조앤의 기술블로그

[대학원] 면접준비 - 운영체제 본문

Study/면접

[대학원] 면접준비 - 운영체제

쬬앤 2020. 5. 15. 21:18

해당 대학은 아니지만, 대학원 입학 면접의 질문은 대체로 그 결이 비슷한 것 같아서 다른 대학의 기출문제를 참고하여 면접을 준비했다.

(카이스트, 포항공대 ...)

 

비슷한 질문은 묶어서 공부했다.

 

Q) 프로세스와 스레드의 차이점
Q) 프로세스와 스레드간의 통신에 대해 비교.
Q) 프로세스와 스레드가 메모리에 접근할 때 차이(프로세스와 스레드가 메모리에 store하는데 다른 프로세스와 스레드가 load하면 어떻게 되는지)
Q) Thread 끼리 context-switching 할 때

[프로세스]

* 프로세스
프로세스(Process)는 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램이나, 시스템 프로그램을 의미하는 것.
프로세스는 필요한 각종 자원을 요구한다.

* 프로세스의 여러가지 정의
- 실행중인 프로그램, PCB를 가진 프로그램, 실기억장치에 저장된 프로그램
- 프로세서가 할당되는 실체, 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체. 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적 또는 결과에 따라 발생되는 사건들의 과정
- 프로세서가 할당하는 개체로서 디스패치가 가능한 단위

[PCB(Process Control Block)]
* PCB: 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳. 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB가 제거됨
* PCB에 저장되어 있는 정보 : 프로세스의 현재 상태 / 포인터 (부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리에 대한 포인터, 할당된 자원에 대한 포인터)/ 프로세스 고유 식별자 / 스케줄링 및 프로세스의 우선순위 / CPU 레지스터 정보(누산기, 인덱스 레지스터, 프로그램 카운터 등) / 주기억장치 관리 정보 / 입,출력 상태 정보 / 계정 정보

[스레드(Thread)]
- 하나의 프로세스 내에서 병행성을 증대시키기 위한 메커니즘으로 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위.
- 독립적인 스케줄링의 최소 단위로서, 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능함.
- 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스 역할을 담당한다.
- 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는 다중 스레드라고 함.
- 스레드는 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 한다.

- 스레드의 분류
* 사용자 수준의 스레드 : 사용자가 만든 라이브러리를 사용하여 스레드를 운용함.
: 속도는 빠르지만 구현이 어려움.
* 커널 수준의 스레드 : 운영체제의 커널에 의해 스레드를 운용함
: 구현은 쉽지만 속도가 느림

* 스레드 사용의 장점
- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다.
- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다.
- 응용 프로그램의 응답 시간(Response Time)을 단축시킬 수 있다.
- 실행 환경을 공유시켜 기억장소 및 자원의 낭비가 줄어든다.
- 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다.

* 프로세스의 주요 상태
- 준비(Ready) : 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태
- 실행(Run)
- 대기(Wait), 보류, 블록(Block)

* 프로세스 상태 전이 관련 용어
- Dispatch
- Wake-Up
- Spooling

 

**

프로그램 : 어떤 작업을 위해 실행할 수 있는 파일

 

프로세스

* 사전적 의미

- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램

- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)

- 운영체제로부터 시스템 자원을 할당받는 작업의 단위

- 즉 동적인 개념으로는 실행된 프로그램을 의미함.

 

* 참고) 할당받는 시스템 자원의 예

- CPU 시간

- 운영되기 위해 필요한 주소 공간

- Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

* 특징

- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. 

- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다. 

- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 

- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, Inter-Process Communication)을 사용해야 한다. 

(파이프, 파일, 소켓 등을 이용한 통신 방법 이용)

 

스레드 란

* 사전적 의미

- 프로세스 내에서 실행되는 여러 흐름의 단위

- 프로세스의 특정한 수행 경로

- 프로세스가 할당받은 자원을 이용하는 실행의 단위

 

* 특징

- 스페드는 프로세스 내에서 각각 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유한다. 

- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 

- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다. 

- 각각의 스레드는 별도의 레지스터와 스택을 가지고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다. 

- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다. 

 

[멀티 프로세스와 멀티 스레드 차이]

멀티 프로세스

* 멀티 프로세싱이란

- 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(task)을 처리하도록 하는 것.

* 장점

- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다. 

* 단점

- Context Switching에서의 오버헤드

: Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다. 

: 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 ㅎㅏㄴ다. 

- 프로세스 사이의 어렵고 복잡한 통신 기법(IPC)

: 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다. 

*참고) Context Switching이란?

- CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 context switching이라고 한다. 

- 구체적으로, 동작중인 프로세스가 대기를 하면서 해당 프로세스의 상태(context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다. 

 

[Context Switching]

* Context Switching이란?

- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고, 다음 진행할 task의 상태 값을 읽어 적용하는 과정을 말한다. 

* Context Switching의 과정

1) task의 대부분 정보는 Register에 저장되고 PCB(Process Control Block)로 관리된다. 

2) 현재 실행하고 있는 Task의 PCV 정보를 저장한다. (Process Stack, Ready Queue)

3) 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있다. 

* Context Switching Cost(Process vs Thread)

- process Context Switching 비용 > Thread Context Switching 비용

- Thread는 Stack 영역을 제외한 모든 메모리를 공유하므로 Context Switching 수행 시 Stack 영역만 변경하면 되기 때문에 비용이 적게 든다. 

 

[멀티 스레드]

* 멀티 스레딩이란

- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.

- 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만 멀티 스레딩을 기본으로 하고 있다. 

- 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다. 

 

* 장점

- 시스템 자원 소모 감소(자원의 효율성 증대)

: 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다. 

- 시스템 처리량 증가(처리 비용 감소)

: 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다. 

: 스레드 사이의 작업량이 작아 Context switching이 빠르다. 

- 간단한 통신 방법으로 인한 프로그램 응답 시간 단축

: 스레드는 프로세스 내의 stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다. 

 

* 단점

- 주의 깊은 설계가 필요하다. 

- 디버깅이 까다롭다. 

- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다. 

- 다른 프로세스에서 스레드를 제어할 수 없다. (프로세스 밖에서 스레드 각각을 제어할 수 없다. )

- 멀티 스레드의 경우 자원 공유의 문제가 발생한다. (동기화 문제)

- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

주의할 점

- 동기화 문제

- 스레드 간의 자원 공유는 전역 변수(데이터 세그먼트)를 이용하므로 함께 상용할 때 충돌이 발생할 수 있다. 

 

 

 

[Critical Section / Mutual Exclusion / Semaphore]
Critical Section (임계구역)
* 다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 시점에서는 하나의 프로세스만 자원 또는 데이터를 사용하도록 지정된 공유 자원(영역)을 의미함
* 임계 구역에는 하나의 프로세스만 접근할 수 있으며, 해당 프로세스가 자원을 반납한 후에만 다른 프로세스가 자원이나 데이터를 사용할 수 있다.
* 임계 구역은 특정 프로세스가 독점할 수 없다.
* 임계 구역의 자원이나 데이터는 여러 프로세스가 사용해야 하므로 임계 구역 내에서의 작업은 신속하게 이루어져야 한다.
* 프로세스가 임계 구역에 대한 진입을 요청하면 일정 시간 내에 진입을 허락해야 한다.
* 현재 임계 구역에서 실행되는 프로세스가 없다면 잔류 영역에서 임계 구역 사용을 기다리고 있는 프로세스의 사용을 허락해야 하며, 그 이외에 있는 프로세스는 임계구역에 진입할 수 없다.

Mutual Exclusion (상호 배제)
* 특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법
* 여러 프로세스가 동시에 공유 자원을 사용하려 할 때 각 프로세스가 번갈아가며 공유 자원을 사용하도록 하는 것. 임계 구역을 유지하는 기법
* 상호 배제 기법을 사용함으로써 임계 구역 내에서는 인터럽트, 교착상태, 무한반복이 발생되지 않도록 해야한다.
* 상호 배제 구현기법
- 소프트웨어적 구현 방법
- 하드웨어적 구현 방법

Semaphore (세마포어)
* 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법이다.
* 다익스트라가 제안하였으며, P와 V라는 2개의 연산에 의해서 동기화를 유지시키고, 상호 배제의 원리를 보장함.
* 여러 개의 프로세스가 동시에 값을 수정하지 못한다.
* S는 p와 v 연산으로만 접근 가능한 세마포어 변수로, 공유 자원의 개수를 나타내며 0과 1 혹은 0과 양의 값을 가질 수 있다.
* p 연산: 자원을 사용하려는 프로세스들의 진입 여부를 자원의 개수(s)를 통해 결정하는 것. 자원의 개수를 감소시켜(s = s - 1) 자원이 점유되었음을 알림 (wait 동작)
* v 연산 : 대기중인 프로세스를 깨우는 신호 (wake up)로서, 자원의 개수를 증가시켜 (s = s + 1) 자원이 반납되었음을 알림 (signal 동작)

 

[뮤텍스와 세마포어의 차이]

* 뮤텍스(Mutex)

- 공유된 자원의 데이터를 여러 스레드가 접근하는 것을 막는 것. 

- 상호 배제라고도 하며, Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술.

- 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 synchronized 또는 lock을 사용한다. 

--즉, 뮤텍스 객체를 두 스레드가 동시에 사용할 수 없다. 

 

* 세마포어(Semaphore)

- 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것

- 리소스 상태를 나타내는 간단한 카운터로 생각할 수 있다. 

: 운영체제 또는 커널의 한 지정된 저장장치 내의 값이다. 

: 일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 이용한다. 

: 유닉스 시스템 프로그래밍에서 세마포어는 운영체제의 리소스를 경쟁적으로 사용하는 다중 프로세스에서 행동을 조정하거나 동기화시키는 기술이다. 

- 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있다. 

- 각 프로세스는 세마포어 값은 확인하고 변경할 수 있다. 

: a. 사용 중이지 않는 자원의 경우 그 프로세스가 즉시 자원을 사용할 수 있다. 

: b. 이미 다른 프로세스에 의해 사용 중이라는 사실을 알게 되면 재시도하기 전에 일정 시간을 기다려야 한다. 

: 세마포어를 사용하는 프로세스는 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 기다리도록 해야한다. 

- 세마포어는 이진수를 사용하거나, 또는 추가적인 값을 가질 수도 있다. 

 

* 차이

1) 가장 큰 차이점은 관리하는 동기화 대상의 개수

: Mutex는 동기화 대상이 오직 하나뿐일 때, Semaphore는 동기화 대상이 하나 이상일 때 사용함.

2) Semaphore는 Mutex가 될 수 있지만 Mutex는 Semaphore가 될 수 없다. 

: Mutex는 상태가 0, 1 두 개 뿐인 binary Semaphore

3) Semaphore는 소유할 수 없는 반면, Mutex는 소유가 가능하며 소유주가 이에 대한 책임을 가진다. 

: Mutex의 경우 상태가 두개뿐인 lock이므로 lock을 가질 수 있다. 

4) Mutex의 경우 Mutex를 소유하고 있는 스레드가 이 Mutex를 해제할 수 있다. 하지만 Semaphore의 경우 이러한 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있다. 

5) Semaphore는 시스템 범위에 걸쳐있고 파일시스템 상의 파일 형태로 존재하는 반면 Mutex는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 Clean up 된다. 

 

 

[교착상태의 개념과 조건]

*교착상태(데드락, Deadlock)

- 첫번째 스레드는 두번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리고 있고, 두번째 스레드 역시 첫번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리는 상황을 일컷는다. 일컫는다?

- 모든 스레드가 락이 풀리기를 기다리고 있기 때문에, 무한 대기 상태에 빠지게 된다. 이런 스레드를 교착상태에 빠졌다고 한다. 

 

* 교착상태의 4가지 조건

1) 상호 배제(mutual exclusion)

- 한번에 한 프로세스만 공유 자원을 사용할 수 있다. 

- 좀 더 정확하게는, 공유 자원에 대한 접근 권한이 제한된다. 자원의 양이 제한되어 있더라도 교착상태는 발생할 수 있다. 

2) 들고 기다리기 (hold and wait) = 점유 대기

- 공유 자원에 대한 접근 권한을 갖고 있는 프로세스가, 그 접근 권한을 양보하지 않은 상태에서 다른 자원에 대한 접근 권한을 요구할 수 있다. 

3) 선취(preemption) 불가능 = 비선점

- 한 프로세스가 다른 프로세스의 자원 접근 권한을 강제로 취소할 수 있다. 

4) 대기 상태의 사이클(circular wait) = 순환대기

- 두 개 이상의 프로세스가 자원 접근을 기다리는데, 그 관계에 사이클이 존재한다. 

 

* 교착상태 방지

- 4가지 조건들 가운데 하나를 제거하면 된다. 

- 공유 자원 중 많은 경우가 한번에 한 프로세스만 사용할 수 있기 때문에 (ex) 프린트) 1번 조건은 제거하기 어렵다. 

- 대부분의 교착상태 방지 알고리즘은 4번 조건, 즉 대기 상태의 사이클이 발생하는 일을 막는데 초점이 맞춰져 있다. 




Q) memory hierachy
Q) 메모리 하이러키란?
q) 메모리를 그렇게 구성한 이유는?

메모리를 필요에 따라 여러가지 종류로 나눈 것. 

주로 CPU가 메모리에 더 빨리 접근하기 위함.

레지스터와 캐시는 CPU 내부에 존재하므로 매우 빠르게 접근 가능.

메모리는 CPU 외부에 존재. Bus 통해 접근

하드 디스크는 CPU가 직접 접근할 방법이 없음 (하드 디스크의 데이터를 메모리로 이동시키고 메모리에서 접근해야 함- 매우 느리다.)

 

큰 메모리를 사용한다 하더라도 그 안의 모든 데이터에 고르게 접근하지는 x

자주 쓰이는 데이터는 계속 자주 쓰이고, 자주 쓰이지 않는 데이터는 계속 자주 안쓰임 (locality?)

 

메모리 구조에서 상층에 속할수록 가격은 더 비쌈 + 크기가 작음 (빠르니까)

필요(CPU가 메모리에 더 빨리 접근하기 위함)에 따라 메모리를 계층화해 둠.

컴퓨터는 속도가 느리고 용량이 큰 기억장치의 내용 중에서 CPU가 자주 사용하는 데이터를 속도가 빠른 기억장치로 옮겨 놓고 사용함으로써, 전체적인 기억장치 액세스 속도를 개선하는 전략 사용.

기억장치 성능 평가 기준- 액세스 속도, 용량, 가격 / 세가지 특징은 상반되는 경우가 많다. 

보통 액세스 속도가 빠를수록 용량은 작아지고, 가격은 비싸진다. 

 

<메모리 계층 구조의 필요성>

- 자주 쓰이는 데이터는 계속 쓰임(참조의 지역성) : 자주 쓰이는 데이터는 전체 데이터의 일부이기 때문에 상위 메모리의 용량이 하위 메모리의 용량보다 작아도 됨.

- 디코딩(명령어 해독 단계) 속도 : 여러 개의 메모리를 사용할 시 CPU는 자신이 원하는 메모리에 접근해야만 한다. 이 과정에서 컨트롤 신호를 해석해야 하는데, 메모리가 클수록 비용이 증가

- 경제성: 상위 계층의 메모리일수록 비쌈

 


Q) locality
Q) locality 사용 - Virtual Memory, Cache. 둘의 차이
Q) 캐시를 구현하는 방법
[국부성(locality, 구역성)]
* 실행중인 프로세스가 주기억장치를 참조할 때는 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론. Denning에 의해 증명됨.
* 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 된다.
* 캐시 메모리 시스템의 이론적 근거이다.
* 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상 기억장치 관리의 이론적인 근거가 된다.
* locality 종류
시간 구역성(Temporal Locality)
- 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상
- 한번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미함
공간 구역성(Spatial Locality)
- 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상

[워킹 셋 / 페이지 부재]
워킹 셋 (working set)
* 프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합
* 데닝(Denning)이 제안한 프로그램의 움직임에 대한 모델로, 프로그램의 Locality(구역성) 특징을 이용함.
* 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상을 줄인다.
* 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹 셋은 시간에 따라 바뀌게 된다.

페이지 부재(page fault)
* 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상. 페이지 부재 빈도(PFF; Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미함.
* 페이지 부재 빈도 방식 : 페이지 부재율(page fault rate)에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식

[캐시 메모리(cache memory)]
* cpu의 속도와 메모리의 속도 차이를 줄이기 위해 사용하는 고속 buffer memory이다.
* 캐시는 주기억장치와 cpu 사이에 위치한다.
* 캐시 메모리는 메모리 계층 구조에서 가장 빠른 소자이며, 처리 속도가 거의 cpu의 속도와 비슷할 정도이다.
* 캐시를 사용하면 기억장치를 access하는 횟수가 줄어들기 때문에 컴퓨터의 처리 속도가 향상된다.
* 명령어나 자료를 찾기 위해서 캐시 메모리에 접근하는 경우, 원하는 정보가 캐시 메모리에 기억되어 있을 때 적중(hit)되었다고 하고, 기억되지 않으면 실패했다고 한다.

[가상 기억장치(virtual memory)]
* 기억 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용할 수 있도록 하는 운영체제의 메모리 운영기법.
* 가상기억장치의 목적은 주기억장치의 용량 확보.
* 가상 기억장치는 하드웨어적으로 실제로 존재하는 것이 아니고, 소프트웨어적인 방법으로 보조기억장치를 주기억장치처럼 사용하는 것이다.
* 사용자 프로그램을 여러 개의 작은 블록으로 나누어서 보조기억장치에 보관해 놓고 프로그램 실행 시 필요한 부분들만 주기억장치에 적재한다.
* 주기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있다.


Q)시스템 콜이 뭔지
q) 트랩이란?
Q) 시스템 콜과 인터럽트의 차이는
Q) 인터럽트에 걸리면 어떻게 되는가?
Q) 인터럽트 처리 후에 어떻게 이전 상태로 돌아가는가?
[인터럽트의 종류 및 발생 원인]
* 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 즉시 중단하고, 발생된 상황을 우선 처리한 후 실행중이던 작업으로 복귀(복귀 주소는 스택에 저장)하여 계속 처리하는 것.
외부 인터럽트 : 기계적
내부 인터럽트 : 잘못된 명령이나 데이터를 사용할 떄 발생하며, trap이라고도 부름
- 하드웨어 에서의 신호에 의해 발생

소프트웨어 인터럽트 : 명령의 요청에 의해 발생
- 명령어의 수행에 의해 발생

[인터럽트 발생시 CPU가 확인할 사항]
* 프로그램 카운터의 내용
* 사용한 모든 레지스터의 내용
* 상태 조건의 내용 (PSW)

[인터럽트의 동작 순서]
1) 인터럽트 요청 신호 발생
2) 프로그램 실행을 중단함 : 현재 실행중이던 명령어(micro instruction)는 끝까지 실행함.
3) 현재의 프로그램 상태를 보존함 : 프로그램 상태는 다음에 실행할 명령의 번지로서 pc가 가지고 있음
4) 인터럽트 처리 루틴을 실행함 : 인터럽트를 요청한 장치를 식별함
5) 인터럽트 서비스(취급) 루틴을 실행함
- 처리기 상태 복구
- 인터럽트 원인 결정
- 처리기 레지스터의 상태 보존
- 상대적으로 낮은 레벨의 마스크 레지스터 클리어
6) 상태 복구 :인터럽트 요청 신호가 발생했을 때 보관한 pc의 값을 다시 pc에 저장함.
7) 중단된 프로그램 실행 재개 : pc의 값을 이용하여 인터럽트 발생 이전에 수행중이던 프로그램을 계속 실행함.

Q) 스케줄링 정책
q) 스케줄링을 하는 이유는?
q) 스케줄링 알고리즘은 뭐가 있는가?
[스케줄링 / 문맥 교환]
* 스케줄링 정의 : 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업
* 스케줄링 목적 : 공정성, 처리율 증가, cpu 이용률 증가, 우선순위 제도, 오버헤드 최소화, 응답 시간 최소화, 반환 시간 최소화, 대기 시간 최소화, 균형 있는 자원의 사용, 무한 연기 회피

* 문맥 교환(context switching) : 하나의 프로세스에서 다른 프로세스로 cpu가 할당되는 과정에서 발생되는 것. 새로운 프로세스에게 cpu를 할당하기 위해 현재 cpu가 할당된 프로세스의 상태 정보를 저장하고, 새로운 프로세스의 상태 정보를 설정한 후 cpu를 할당하여 실행되도록 하는 작업. 운영체제에서 overhead의 발생 요인 중 하나

[프로세서 스케줄링의 종류]
비선점 스케줄링(non-preemptive)
* 이미 할당된 cpu를 다른 프로세스가 강제로 빼앗아 사용할 수 없는! 스케줄링 기법
* 프로세스가 cpu를 할당받으면 해당 프로세스가 완료될 때까지 cpu를 사용함
* 모든 프로세스에 대한 요구를 공정하게 처리할 수 있음
* 일괄 처리 방식에 적합, 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있음
* 응답 시간 예측이 용이함
* 종류 : FCFS(FIFO), SJF(Shortest Job First), 우선순위(Priority), HRN(Highest Response-ratio Next), 기한부(Deadline) 등

선점 스케줄링(preemptive)
* 하나의 프로세스가 cpu를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 cpu를 강제로 빼앗아 사용할 수 있는! 스케줄링 기법
* 우선순위가 높은 프로세스를 빠르게 처리할 수 있음
* 주로 빠른 응답시간을 요구하는 대화식 시분할 시스템에 사용됨
* 선점할 프로세스에게 일정한 시간을 배당하기 위한 인터럽트용 타이머 클록(clock)이 필요함
* 비선점 스케줄링에 비해 많은 overhead를 초래할 수 있음
* 종류 : SRT(Shortest Remaining Time), 선점 우선순위, RR(Round Robin), 다단계 큐(Multi level Queue), 다단계 피드백 큐


Q) 다중프로그래밍
Q) 다중프로그래밍 정도가 너무 많으면 어떻게 하나?
[운영체제 운용 기법 및 발달과정]
일괄처리 시스템(batch processing)
다중 프로그래밍(multi-programming)시스템
* 하나의 cpu와 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식
* 하나의 주기억장치에 2개 이상의 프로그램을 기억시켜 놓고, 하나의 cpu와 대화하면서 동시에 처리한다.
시분할 시스템 (time sharing)
다중 처리 시스템(multi-processing)
* 여러개의 cpu와 하나의 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식
* 하나의 cpu가 고장나더라도 다른 cpu를 이용하여 업무를 처리할 수 있으므로 시스템의 신뢰성과 안전성이 높음
실시간 처리(real time processing) 시스템
다중 모드 처리(multi mode processing) 시스템
분산 처리(distributed processing) 시스템


Q) virtual memory 설명
[가상 기억장치 (Virtual Memory)]
* 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것. 용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 것. 현재 사용되는 운영체제에서 흔히 사용되는 기법.
* 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용함.
* 가상기억장치에 저장된 프로그램을 실행하려면 가상기억 장치의 주소를 주기억장치의 주소로 바꾸는 주소 변환작업(주소 매핑)이 필요하다.
* 블록 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화를 해결할 수 있다.
* 기억장치의 이용률과 다중 프로그래밍의 효율을 높일 수 있다.
* 운영체제의 설계가 복잡해지고 주소 변환을 위한 테이블을 사용하므로 기억장소를 낭비할 수 있다.
* Virtual Memory 구현 기법
- 페이징(paging) 기법
- 세그멘테이션(segmentation) 기법
* 주소 변환 : 가상 기억 장치에 있는 프로그램이 주기억 장치에 적재되어 실행될 때 논리적인 가상주소를 물리적인 실기억주소로 변환하는 것. 주소 Mapping이라고도 함.

Q) 페이지 / 세그멘테이션 각각의 장단점을 비교해서 설명
q) 세그멘테이션과 page의 차이점 ( page가 좋은 점)
Q) paging
Q) page table

페이징 기법
- 가상 기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법.
- 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있음.
- 페이지 맵 테이블이 필요함.

세그멘테이션 기법
- 가상 기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
- 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 ‘세그먼트’라고 하며, 각 세그먼트는 고유한 이름과 크기를 갖고 있음.
- 다른 세그먼트에게 할당된 영역을 침범할 수 없으며, 이를 위해 기억장치 보호키(Storage Protection Key)가 필요함.
- 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있음.
- 세그먼트 맵 테이블이 필요함.

단편화 (Fragmentation)
* 분할된 주기억장치에 프로그램을 할당하고 반납하는 과정을 반복하면서 사용되지 않고 남는 기억장치의 빈 공간 조각을 의미함
* 내부(Internal) 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 크기 때문에 프로그램이 할당된 후 사용되지 않고 남아있는 빈 공간
* 외부(External) 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 작기 때문에 프로그램이 할당될 수 없어 사용되지 않고 빈 공간으로 남아 있는 분할된 전체 영역

단편화 해결방법
* 통합(Coalescing) 기법 : 주기억장치 내에 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 작업
* 압축(Compaction) 기법, 집약 : 주기억장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용 공간을 만드는 작업으로, 여러 위치에 분산되어 있는 단편화된 빈 공간을 주기억장치의 한쪽 끝으로 옮겨서 큰 기억 공간을 만듦

기억장소의 재배치(Relocation)
* 여러 위치에 분산된 단편화(Fragmentation)된 공간을 주기억장치의 한 쪽 끝으로 옮겨서 큰 가용 공간을 만드는 압축(Compaction) 기법을 수행할 때 각 프로그램에 주어진 분할 영역의 주소를 새롭게 지정해줘야 하는데, 이를 기억장소의 재배치라고 함.
* 재배치를 위해서는 기준 레지스터(Base Register)와 경계 레지스터(Boundary Register)를 사용한다.


Q) page fault가 발생했을 때.

Q) LRU가 구현이 힘든 이유는?
Q) 프로세스 수행할 때, 요구한 페이지가 메모리에 없을 때 어떻게 하나?

q) 페이지 폴트가 났다. 어떻게 해야 하는가?
q) 페이지 폴트, 페이지 교체
Q) NRU는 무엇인가?(NUR)


[페이지 부재(page fault)]

 

q) 메모리가 부족하면 어떻게 되는가?
[페이지 교체 알고리즘]
페이지 부재가 발생했을 때 가상 기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데, 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할지 결정하는 기법

* OPT(OPTimal Replacement)
- 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법
- 각 페이지의 호출 순서와 참조 상황을 미리 예측해야 하므로 실현 가능성이 희박함.

*FIFO(First In First Out)
- 각 페이지가 주기억장치에 적재될 때마다 그 때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법
- 이해하기 쉽고, 프로그래밍 및 설계가 간단함.
- 페이지 프레임 수가 많으면 페이지 부재의 수가 줄어드는 것이 일반적이지만, 페이지 프레임 수를 증가시켰는데도 불구하고 페이지 부재가 더 많이 일어나는 벨레이디의 모순(Belady’s Anomaly) 현상이 발생함

* LRU(Least Recentlry Used)
- 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법
- 각 페이지마다 계수기나 스택을 두어 현 시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래 전에 사용된 페이지를 교체함

프로세스가 주기억장치에 접근할 때마다 참조된 페이지에 대한 시간을 기록해야함. 큰 오버헤드가 발생

 

* LFU(Least Frequently Used)

* NUR(Not Used Recently)
주기억장치에서 최근에 사용되지 않은 페이지를 교체한다. 

최근에 사용된 메모리 페이지를 유지하는 것을 선호하는 것.

* SCR(Second Chance Replacement)


Q) thrashing을 해결하는 방법
[Thrashing]
* 프로세스의 처리 시간보다 페이지 교체 시간이 더 많아지는 현상
* 다중 프로그래밍 시스템이나 가상 기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정 중 자주 페이지 부재가 발생함으로 인해 나타나는 현상으로 전체 시스템의 성능이 저하된다.
* 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소된다.
* CPU 이용률을 높이고, 스래싱 현상을 방지하는 방법
- 다중 프로그래밍의 정도를 적정 수준으로 유지한다.
- 페이지 부재율(page fault rate)을 조절한다.
- working set을 유지한다.
- 프로세스가 필요로 하는 만큼의 프레임을 제공한다.
- 부족한 자원을 증설한다.
- 일부 프로세스를 종료한다.

 

 

Q) page가 메모리에 가득찬 상황에서 디스크로 내보낼 page를 정하는 방법 중 많이 사용하는 것은?
페이지 교체 알고리즘..?


q) 멀티 cpu에서 한 cpu가 논다. 어떻게 job을 줘야할까?
잡 스케줄링..

 

q) 멀티 프로세서에서 로드 밸런스를 최대로 높이려면 어떻게 해야 하는가.
q) 멀티 프로세서일 때 스케줄링 어떻게 하는가
-> CPU가 여러개인 경우 어떻게 스케줄링해줄 것이냐

 

 

가상메모리..?

운영체제 메모리 관리

페이지 교체 알고리즘

Q) Demand Paging

MMU 매커니즘(메모리 관리 매커니즘)을 사용해서 여러 프로세스가 시스템의 메모리를 효율적으로 공유할 수 있도록 하는 기술

 

[동기와 비동기]

이 개념은 OS 뿐만 아니라 여러가지 분야에서도 쓰인다. 

* 동기(Synchronous)

: '동기'라고 하면 다수의 개체들이 동일(일정)한 무언가를 가지는 것. 또는 무언가가 동일(일정)하게 되는 것.

- 그 무언가는 상태가 될 수 있고, 행위가 될 수 있고, 시간, 속도, 주기, 출현 등이 될 수 있다. 

- 여기서 말하는 '동기'는 두개의 프로세스가 데이터를 주고 받을 때, 주고받는 순서(또는 시간)가 일정하다는 것을 뜻한다. (너한번, 나한번)

 

* 비동기(Asynchronous)

- 동기가 아닌 것

 

* 동기식, 동기적이다. 

- 어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다린 다음 작업을 수행한다. 

: 데이터를 주고받는 '순서'가 중요할 때 사용된다.

: 요청한 작업만 처리하면 되기 때문에 전체적인 수행 속도는 빠를 수 있다. (일만 하면 된다.)

: 한 작업에 대한 시간이 길어질 경우, 전체 응답이 지연될 수 있다. 

 

* 비동기식, 비동기적이다. 

- 어떤 작업을 요청했을 때, 그 작업이 종료될 때까지 기다리지 않고(작업을 위임하고), 다음 작업을 수행한다. 요청했던 작업이 끝나면 결과를 받고, 그에 따른 추가 작업이 있다면 수행한다.

: 요청 순서에 상관없이, 동시에 다수의 작업을 처리할 수 있다. 

: 작업이 끝날 때 따로 이벤트를 감지하고 결과를 받아 그에 따른 추가 작업을 해줘야 하기 때문에, 비교적 느릴 수 있다. 

: I/O 작업이 잦고, 빠른 응답속도를 요구하는 프로그램에 적합하다.

 

 

[출처]

시나공 필기

arings.tistory.com/entry/카이스트-면접문제들?category=301287

 

카이스트 면접문제들

이번에 카이스트 면접준비하면서 봤던... 출처는 goms 이고 그외 약 2006년인가? 부터 2010년까지 기출문제 나왔던거 정리한거 따로 파일로 있으니 여기내용의 그것에서 일부분 필요하시면 말씀을..

arings.tistory.com

dakuo.tistory.com/126

 

메모리 계층(Memory Hierarchy)

메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(H..

dakuo.tistory.com

velog.io/@pa324/운영체제-메모리-관리-l5k3qktzwo

 

운영체제 - 메모리 관리

메모리 주소 바인딩 > 프로세스가 실행되기 위해서는 프로그램이 물리적 메모리에 적재되어 있어야 한다. 또한, cpu가 기계어 명령을 수행하기 위해 논리적 주소를 통해 메모리 참조를 하게 되면

velog.io

enfanthoon.tistory.com/56

 

운영체제 - 9(CPU스케줄링2, 쓰레드/다중 프로세서 스케줄링)

스케줄링 알고리즘 1. Multilevel Queue Scheduling (Queue를 여러개 두어 우선순위 스케줄링) - 서로 다른 유형별로 구분하여 분리처리 - 유형에 맞는 스케줄링 알고리즘을 각각 따로 적용 Ex) 대화형 프로�

enfanthoon.tistory.com

gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

 

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

copycode.tistory.com/122

 

운영체제 24장 - 메모리 관리(11) : 페이지 교체 알고리즘 -

운영체제 24장 - 페이지 교체 알고리즘 - 가상 메모리는 요구 페이지 기법을 통해 필요한 페이지만 backing store에서 메모리로 적재를 하고 사용하지 않는 부분은 그대로 둔다. 하지만 필요한 페이��

copycode.tistory.com

github.com/WeareSoft/tech-interview/blob/master/contents/network.md

 

WeareSoft/tech-interview

:loudspeaker::person_frowning: tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.

github.com

arings.tistory.com/entry/운영체제공룡책-Operation-system-concepts

 

운영체제(공룡책) Operation system concepts

카이스트 준비하면서 주요과목 정리.. 이때까지 어떤 과목을 수강하면서 항상 시험에 나올꺼만 공부했던거 같았다 그래서 그런지 중간중간 흐름이 깨지고 명확한 이해없이 냅다 외우기만 했었�

arings.tistory.com

parksb.github.io/article/12.html

 

🦕 공룡책으로 정리하는 운영체제 Ch.8

Memory-Management Strategies

parksb.github.io