운영체제 (OS)

Ju Young Pang

·

2022. 11. 5. 17:20

문제 모음

더보기
  1. 프로세스와 쓰레드의 차이점은?
  2. 메모리 영역 중 힙영역과 스택영역의 차의점은?
  3. 쓰레드에서 stack을 분리한 이유는?
  4. 멀티 프로세싱과 멀티 쓰레딩의 장단점 및 차이점은?
  5. 멀티 쓰레드 환경에서의 주의점
  6. CPU 스케쥴링이 발생하는 시점은?
  7. 선점형 스케쥴링과 비선점형 스케쥴링이란?
  8. 동시성이란?
  9. 병렬성이란?
  10. 데드락이란?
  11. 데드락의 4가지 조건은?
  12. 데드락의 해결방법은?
  13. 임계 영역이란?
  14. 운영체제에서의 기아란?
  15. 세마포어와 뮤텍스의 차이점은?
  16. 페이징과 세그먼트의 차이점은?
  17. 내부 단편화와 외부 단편화란?
  18. 페이지 교체 알고리즘이란?
  19. 컨텍스트 스위칭이란?
  20. 동기와 비동기의 차이점은?

해답

Q) 프로세스와 쓰레드의 차이점은?

더보기

프로세스는 자원을 할당받아 메모리 위에서 실행되고 있는 작업의 단위이고, 쓰레드는 프로세스가 할당한 자원에서 동작하고 있는 실행 단위입니다.

프로세스의 메모리 영역의 code, data, heap, stack 중 쓰레드는 stack만을 각자 할당받고 나머지는 공유합니다. 

따라서 쓰레드는 즉시 다른 쓰레드들의 결과를 확인할 수 있는데 반해, 프로세스는 다른 프로세스와 독립적인 구조로, 서로 통신하기 위해서는 IPC (프로세스 간 통신, Inter-Process Communication) 사용해야합니다.

Q) 메모리 영역 중 힙영역과 스택영역의 차의점은?

더보기

메모리 영역에는 code, data, heap, stack이 있습니다. 코드는 실행할 코드가 저장되는 텍스트 영역, 데이터는 전역변수와 정적변수가 저장되는 영역, 스택은 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역, 힙 영역은 사용자가 직접 관리할 수 있는 동적 메모리 영역입니다.

이 중 힙 영역은 런타임에 크기가 결정되고 스택영역은 컴파일타임에 크기가 결정됩니다.

Q) 쓰레드에서 stack을 분리한 이유는?

더보기

Stack은 함수의 호출 정보가 저장되는데, stack의 LIFO 구조로 인해 이를 공유하게되면 실행 순서가 꼬일 수 있기 때문입니다.

Q) 멀티 프로세싱과 멀티 쓰레딩의 장단점 및 차이점은?

더보기

멀티 프로세싱은 하나의 프로그램을 여러개의 프로세스로 구성하는 것을 의미합니다. 하나의 프로세스가 죽더라도 다른 프로세서에게는 영향을 끼치지 않는다는 장점이 있으며 컨텍스트 스위칭을 위한 오버헤드가 발생한다는 단점이 있습니다.

멀티 쓰레딩은 하나의 프로그램을 여러개의 쓰레드로 구성하는 것을 의미합니다. 컨텍스트 스위칭을 위한 오버헤드가 작다는 장점이 있고, 하나의 쓰레드에 문제가 생기면 다른 쓰레드에도 문제가 생긴다는 점과 자원 공유, 즉 동기화에 문제가 생길 수 있다는 점이 단점입니다.

Q) 멀티 쓰레드 환경에서의 주의점

더보기

다수의 쓰레드가 하나의 공유 자원에 접근할 때 상호 배제를 제거해 데드락을 예방하고 동기화 기법을 이용해 동시성 문제가 생기지 않도록 주의해야합니다.

Q) CPU 스케쥴링이 발생하는 시점은?

더보기
  • 실행상태에서 대기상태로 전환될 때 (예, 입출력 요청) - Non preemptive(비선점)
  • 실행상태에서 준비상태로 전환될 때 (예, 인터럽트 발생) - preemptive(선점)
  • 대기상태에서 준비상태로 전환될 때(예, 입출력이 종료될 때)
  • 종료될 때(Terminated)

Q) 선점형 스케쥴링과 비선점형 스케쥴링이란?

더보기

선점형 스케쥴링은 하나의 프로세스가 실행중인 다른 프로세스에게서 CPU를 뺏어올 수 있음을 의미하고 비선점형은 하나의 프로세스가 끝나지 않으면 CPU를 사용할 수 없음을 의미합니다.

Q) 동시성이란?

더보기

싱글 코어에서 멀티 스레드를 동작 시키기 위한 방법으로 멀티 태스킹을 위해 스레드들이 코어를 번갈아가며 사용하는 것을 의미합니다.

Q) 병렬성이란?

더보기

멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것을 의미합니다. 

Q) 데드락이란?

더보기

데드락, 또는 교착 상태란, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다. 예를 들면 A프로세스가 1번 자원을, B프로세스가 2번 자원을 점유하고 있는 상황에서 A는 2번 자원이, B는 1번 자원이 필요할 때 생길 수 있습니다.

Q) 데드락의 4가지 조건은?

더보기
  • 비선점 (Nonpreemptive) : 다른 프로세스의 자원을 뺏을 수 없음.
  • 순환 대기 (Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조.
  • 점유 대기 (Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구.
  • 상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우.

Q) 데드락의 해결방법은?

더보기

데드락을 해결하기 위해서는 데드락의 4가지 조건 중 하나라도 없애면 됩니다. 공유 자원 중 많은 경우가 한 프로세스만 사용할 수 있는 경우가 많기 때문에 상호 배제는 없애기 힘들기에 많은 경우 순환 대기를 막는데 초점이 맞추어져있습니다. 해결 방법은 예방, 회피, 탐지와 복구 등이 있습니다.

Q) 임계 영역이란?

더보기

임계 영역이란 프로세스간의 공유 자원을 접근함에 있어 문제가 생기지 않도록 한번에 한 프로세스만이 접근하도록 해야하는 영역을 의미합니다. 임계 영역을 만들기 위해서는 세가지 조건이 필요합니다. 하나의 프로세스만이 들어갈 수 있어야 한다는 상호 배제, 임계 영역에 들어간 프로세스가 없는 상태에서 여러 프로세스가 동시에 임계 영역에 진입하려 할 때 어느 것이 들어갈지 결정해준다는 진행, 그리고 기아를 방지하기위한 한정 대기입니다.

Q) 운영체제에서의 기아란?

더보기

운영체제에서 기아란 우선 순위가 낮은 프로세스가 계속해서 자원을 할당 받지 못하는 것을 의미합니다.

Q) 세마포어와 뮤텍스의 차이점은?

더보기

뮤텍스는 lock을 사용해 공유 자원에 하나의 프로세스 또는 스레드만이 접근할 수 있도록 하는 것입니다. 그에 반해 세마포어는 세마포어의 카운트 갯수만큼의 프로세스 또는 스레드가 공유 자원에 접근할 수 있도록 하는 것입니다. 따라서 세마포어의 카운트를 1로 설정하면 뮤텍스로 사용이 가능합니다.


Q) 페이징과 세그먼트의 차이점은?

더보기

페이징은 프로세스를 물리적 고정 크기로 나누어 메모리에 불연속적으로 적재하는 방식을 뜻합니다. 페이징을 사용하면 외부 단편화 문제를 해결할 수 있으나 내부 단편화가 존재할 수 있습니다.

세그먼트는 프로세스를 논리적 내용으로 프로세스를 나누어 메모리를 할당하는 방식을 뜻합니다. 각 세그먼트는 ㅋ크기가 다르며 내부 단편화가 존재하지 않으나 외부 단편화가 생길 수 있습니다.

Q) 내부 단편화와 외부 단편화란?

더보기

내부 단편화란 할당된 메모리 공간보다 프로세스가 작아서 사용하지 않는 메모리가 생기는 것을 의미합니다. 외부 단편화란 전체적으로 남아있는 메모리 공간은 프로세스를 올릴 수 있을 정도이지만 그 공간이 연속적이지 않아서 프로세스를 올릴 수 없는 상황을 의미합니다.

Q) 페이지 교체 알고리즘이란?

더보기

페이징 기법으로 관리되는 운영체제에서 주기억 장치에 필요한 페이지가 적재되어있지 않았을 때 어떤 페이지 프레임을 선택해 교체할지 선택하기 위해 사용하는 알고리즘입니다. FIFO, optimal 페이지 교체, LRU (Least Recently Used), LFU (Least Frequently Used), MFU (Most Frequently Used) 등이 있습니다. Optimal 페이지 교체는 실제로 활용할 수 있는 방법은 아니기에 연구 목적으로만 사용되며 LFU와 MFU는 구현 비용이 높기 때문에 실제로 쓰이지 않습니다.

Q) 컨텍스트 스위칭이란?

더보기

컨텍스트 스위칭이란 어떤 프로세스를 실행하고 있는 중에 발생한 인터럽트로 인해 현재 실행 중인 프로세스를 중지하고 다음 우선 순위 프로세스를 실행하기 위한 과정입니다. 현재 실행중인 프로세스의 상태, 즉 PCB를 저장하고 다음 프로세스를 동작시켜 작업을 처리한 후에 이전에 저장했던 컨텍스트를 복구시킵니다.

Q) 동기와 비동기의 차이점은?

더보기

동기는 요청과 결과가 동시에 일어난다는 의미로, 메소드를 실행시킴과 동시에 값이 반환되기 전까지는 blocking되어 있다는 것을 의미합니다. 비동기의 경우, blocking 되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task를 위임하고 바로 다음 코드를 실행합니다.

동기 방식은 설계가 간편하고 직관적이라는 장점이 있으나 결과가 주어질때가지 대기해야한다는 단점이 있습니다. 비동기 방식은 동기보다 복잡하지만 결과가 주어질 때까지 다른 작업을 수행할 수 있기 때문에 자원을 효율적으로 사용할 수 있습니다.

'CS 공부 > 면접 준비' 카테고리의 다른 글

Spring + SpringBoot  (0) 2022.12.01
네트워크  (0) 2022.11.24
Spring security + JWT  (0) 2022.11.22
데이터베이스 (DB)  (2) 2022.11.22
Java  (0) 2022.11.05