프로세스와 스레드의 차이점에 대해 설명해 보세요.
우선, 프로세스는 독립적으로 실행 중인 프로그램을 말하고, 메모리 영역(Heap, Stack 등)을 다른 프로세스와 공유하지 않습니다. 그리고 프로세스는 최소 1개의 스레드 즉, 메인 스레드를 가지고 있습니다.
스레드는 프로세스 내에서 Stack만 별도로 할당받아 그 외에 메모리 영역을 공유하기 때문에 다른 스레드의 실형 결과를 즉시 확인할 수 있습니다. 그리고 스레드는 프로세스 내에 존재하고 프로세스가 할당받은 자원을 이용해서 실행됩니다.
멀티 프로세스와 멀티 스레드의 차이점에 대해 설명해 보세요.
멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만, 멀티 르세드보다 많은 메모리 공간과 CPU를 차지한다는 단점이 있습니다.
멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 하나의 스레드에 문제가 생기면 전체 스레드가 영향을 받아 동기화 문제가 있다는 단점이 있습니다.
멀티 스레드의 동시성과 병렬성에 대해 설명해 보세요.
멀티 스레드에서 동시성은 멀티 작업을 위해 싱글 코어에서 여러 개의 스레드를 번갈아가며 실행하는 것을 말합니다.
그리고 병렬성은 멀티 작업을 위해 한 개 이상의 스레드를 포함하는 각 코어들을 동시에 실행하는 것을 말합니다.
멀티 스레드의 환경에서 주의사항은 무엇이 있나요?
다수의 스레드가 공유 데이터에 동시에 접근하는 경우 상호배제하거나 동기화 기법을 통해 동시성 문제 또는 교착 상태가 발생하지 않도록 주의해야 합니다.
데드락에 대해 설명해 보세요.
둘 이상의 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다. 예를 들어, 자원 A를 가진 프로세스가 P1, 자원 B를 가진 프로세스가 P2일 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스는 서로 자원을 얻기 위해 무한정으로 기다리게 되는데 이걸 데드락이라고 합니다.
그리고 데드락이 발생하는 이유는 네 가지 주요 조건이 있습니다. 첫 번째로 비선점 조건이 있습니다. 비선점은 한 프로세스가 다른 프로세스의 자원을 강제로 뺏을 수 없다는 조건입니다. 두 번째로 순환 대기 조건입니다. 이 경우 여러 프로세스가 서로 다른 자원을 기다리는 상황이 순환 형태로 발생합니다. 세 번째 조건인 점유 대기는 이미 자원을 가진 프로세스가 추가 자원을 기다리는 상황을 말하고, 마지막으로 상호 배제 조건은 한 번에 한 프로세스만 특정 자원에 접근할 수 있다는 것을 나타냅니다. 이렇게 네 가지가 데드락이 발생하는 네 가지 조건입니다.
콘보이 현상(convoy effect)이란 무엇이고, 콘보이 현상이 발생될 수 있는 CPU 스케쥴러 알고리즘은 무엇인가요?
콘보이 현상이란 작업시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦쳐줘 효율성을 떨어트리는 현상입니다. 그리고 FCFS(First-Come First-Served) 스케쥴링이 비선점형으로 순차적으로 먼저 큐에 들어온 작업부터 실행하기 때문에 콘보이 현상이 발생할 수 있습니다.
선점형 스케쥴러와 비선점형 스케쥴러의 차이를 설명해 보세요.
선점형은 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있음을 의미하고, 비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음을 의미합니다.
동기와 비동기의 차이에 대해 설명해 보세요.
동기란 순차적으로 직렬적으로 태스크를 수행하고, 비동기는 병렬적으로 태스크를 수행합니다.
예를 들어, 서버에서 데이터를 가져와 화면에 표시하는 작업을 할 때, 동기는 서버에 데이터를 요청하여 응답될 때까지 이후 태스크들이 블록 됩니다. 비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 기다리지 않고 바로 다음 태스크를 수행할 수 있습니다.
임계 영역(Critical Section)은 무엇인가요?
임계 영역이란 프로세스간에 공유자원을 접근하는 데 있어 문제가 발생하지 않도록 한 번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 말합니다.
임계 영역 문제를 해결하기 위해서는 3가지 조건을 충족해야 합니다.
첫 번째로, 상호 배제라는 조건인데 이는 하나의 프로세스가 임계 영역에 들어가면 다른 프로세스는 들어갈 수 없다는 의미입니다. 두 번째로, 진행이라는 조건인데 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정해줘야 합니다. 마지막으로 한정 대기로 다른 프로세스의 진행을 방해하지 않기 위해, 한번 임계 구역에 들어간 프로세스는 다음 임계 영역에 들어갈 때 제한을 두어야 합니다.
뮤텍스와 세마포어의 차이에 대해 설명해 보세요.
뮤텍스는 Lock을 사용해서 하나의 프로세스나 스레드를 단독으로 실행하게 합니다. 반면, 세마포어는 공유자원에 세마포어 변수만큼의 프로세스나 스레드가 접근할 수 있습니다. 세마포어의 변수는 공유자원의 개수를 나타내는 변수이며, 현재 수행 중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다. 하지만, 뮤텍스는 Lock을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.
페이징 교체 알고리즘에 대해 설명해 보세요.
페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주 기억장치에 적재되지 않았을 시 즉, 페이징 부재 시에 어떤 페이지 프레임을 선택해 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
페이지 교체 알고리즘은 크게 두 가지가 있는데 가장 간단한 알고리즘은 메모리에 올라온 지 가장 오래된 페이지를 교체하는 알고리즘인 FIFO가 있습니다. 간단하고 초기화 코드에 적절하며, 페이지가 올라온 순서를 큐에 저장하는 방식입니다. 그리고 가장 오래 사용되지 않은 페이지를 교체하는 알고리즘인 LRU가 있습니다. Optimal 알고리즘의 방식과 비슷한 효과를 나타낼 수 있으며, 페이지 교체 횟수는 높지만 FIFO 알고리즘보다는 효율적입니다.
컨텍스트 스위칭(Context Switching)에 대해 설명해 보세요.
컨텍스트 스위칭은 멀티 프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선순위의 프로세스가 실행되어야 할 때 기존 프로세스의 상태 또는 레지스터의 값을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터의 값을 교체하는 작업을 말합니다.