💡 프로세스와 쓰레드의 차이에 대해 설명해주세요.
- 프로세스
- 프로세스는 현재 실행 중인 프로그램을 말하며, 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다.
- 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있습니다.
- 쓰레드
- 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행됩니다.
- 쓰레드는 프로세스 내에서 Stack 영역만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)은 공유하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있습니다.
💡 멀티 프로세스와 멀티 쓰레드의 특징에 대해 설명해주세요.
- 멀티 프로세스
- 멀티 프로세스란 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것을 말합니다.
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용할 수 있습니다.
- 멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만 멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.
- 멀티 쓰레드
- 멀티 쓰레드란 하나의 프로세스에서 여러 쓰레드간에 자원을 공유하며 작업을 나누어 수행하는 것을 말합니다.
- 멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만 하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받는다는 단점이 있습니다.
💡 멀티 쓰레드의 동시성과 병렬성을 설명해주세요.
- 동시성은 다중작업을 위해 싱글 코어에서 여러 개의 쓰레드가 함께 실행되는 것을 말합니다. 이는 동시에 실행되는 것처럼 보이지만 사실은 번갈아가며 실행되고 있는 것입니다.
- 병렬성은 다중작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것을 말합니다.
💡 멀티 쓰레드 환경에서의 주의사항을 설명해주세요.
- 다수의 쓰레드가 공유 데이터에 동시에 접근하는 경우에 상호배제 또는 동기화 기법을 통해 동시성 문제 또는 교착 상태가 발생하지 않도록 주의해야 합니다.
💡 교착상태(Deadlock)에 대해 설명해주세요.
- 데드락이란 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 대기하고 있는 상태를 말합니다.
- 예를 들어, 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스는 서로의 자원을 얻기 위해 무한정 기다리게 됩니다.
- 데드락의 4가지 조건
- 비선점 (Nonpreemptive) : 모든 프로세스는 다른 프로세스의 자원을 뺏을 수 없음.
- 환형 대기 (Circular wait) : 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 그 관계가 순환적 구조인 경우
- 점유와 대기 (Hold & Wait) : 공유 자원에 대한 접근 권한을 가진 채로 다른 자원에 대한 접근 권한을 요구한 경우
- 상호 배제(Mutual Exclusion) : 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적인 경우
💡 콘보이 현상(convoy effect)이란 무엇이고, 콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인지 설명해주세요.
- 콘보이 현상이란 작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦춰져 효율성을 떨어뜨리는 현상을 말합니다.
- FCFS(First-Come First Served) 스케줄링은 비선점형 스케줄링 방식으로, 순차적으로 먼저 큐에 들어온 작업부터 실행하므로 콘보이 현상이 발생할 수 있습니다.
💡 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명해주세요.
- 선점형은 우선순위가 높은 프로세스가 현재 다른 프로세스를 실행중인 CPU를 선점하여 실행할 수 있음을 의미하고
- 비선점형은 CPU가 현재 프로세스를 실행하고 있다면 그 프로세스의 실행이 끝날 때까지는 다른 프로세스를 실행할 수 없음을 의미합니다.
💡 동기와 비동기의 차이에 대해 설명해주세요.
- 동기는 순차적, 직렬적으로 작업을 수행하고, 비동기는 병렬적으로 작업을 수행합니다.
- 예를 들어, 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때,
- 동기는 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후의 작업들은 블로킹(Blocking, 작업 중단)됩니다.
- 비동기는 서버에 데이터를 요청한 이후 서버로부터 데이터가 응답될 때까지 대기하지 않고(Non-Blocking) 즉시 다음 작업을 수행합니다.
💡 Critical Section(임계영역)에 대해 설명해주세요.
- 임계 영역이란 프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한 번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 말합니다.
- 임계 영역 문제를 해결하기 위해서는 아래의 3가지 조건을 충족해야 합니다.
- 상호 배제(Mutual exclution) - 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
- 진행(Progress) - 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정 해주어야 한다.
- 한정 대기(Bounded waiting) - 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음번 임계 영역에 들어갈 때 제한을 두어야 한다.
💡 뮤텍스(Mutex)와 세마포어(Semaphore)에 대해 설명해주시고, 둘의 차이에 대해 설명해주세요.
- 공유자원을 안전하게 관리하기 위해서는 상호배제(Mutual exclusion)를 달성하는 기법이 필요합니다.
- 뮤텍스와 세마포어는 이를 위해 고안된 기법으로, 서로 다른 방식으로 상호배제를 달성합니다.
- 뮤텍스는 Key에 해당하는 어떤 오브젝트가 있으며, 이 오브젝트를 소유한 프로세스 혹은 쓰레드만이 공유자원에 접근할 수 있도록 하는 기법입니다.
- 세마포어는 현재 공유자원에 접근할 수 있는 프로세스나 쓰레드의 수를 나타내는 값을 따로 두어, 그 값이 1 이상이라면 접근을 허용하고, 0이라면 접근을 제한함으로써 상호배제를 달성하는 기법입니다.
- 뮤텍스는 Key에 해당하는 어떤 오브젝트를 통해 하나의 프로세스나 쓰레드를 단독으로 실행하는 반면 세마포어는 변수만큼의 프로세스 또는 쓰레드가 공유자원에 접근할 수 있습니다.
- 또한 뮤텍스는 Key를 획득한 프로세스가 반드시 Lock을 해제해야하는 반면 세마포어는 현재 수행중인 프로세스가 아닌 다른 프로세스도 세마포어를 해제할 수 있습니다.
💡 페이지 교체 알고리즘에 대해 설명해주세요.
- 페이징 기법으로 메모리를 관리하는 운영체제에서, 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이징 부재시)에 어떤 페이지 프레임을 선택해 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
- FIFO(first in first out)
- 가장 간단한 알고리즘으로, 페이지가 올라온 순서를 큐에 저장해가며 메모리에 올라온 지 가장 오래된 페이지를 교체합니다.
- 최적(Optimal) 페이지 교체
- 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 알고리즘으로, 프로세스가 앞으로 사용할 페이지를 미리 알아야 한다는 조건이 있습니다.
- 이 조건은 실제로는 알 방법이 없기 때문에 구현이 불가능한 알고리즘입니다. 때문에 연구를 목적으로 주로 사용됩니다.
- LRU(least-recently-used)
- 가장 오래 사용되지 않은 페이지를 교체하는 알고리즘입니다.
- OPT 알고리즘의 방식과 비슷한 효과를 낼 수 있는 방법이며, OPT 알고리즘보다 페이지 교체 횟수가 높지만 FIFO 알고리즘보다 효율적입니다.
- LFU(least-frequently-used)
- 참조 횟수가 가장 작은 페이지를 교체하는 알고리즘입니다.
- 만약 대상인 페이지가 여러 개 일 경우, LRU 알고리즘을 따라 가장 오래 사용되지 않은 페이지를 교체합니다.
- MFU(most-frequently-used)
- LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘입니다.
- FIFO(first in first out)
- LFU와 MFU는 구현에 상당한 비용이 들고, LRU만큼 유사하게 구현해내지 못하기 때문에 실제로는 잘 쓰이지 않습니다.
💡 컨텍스트 스위칭(Context Switching)이 무엇인지 설명해주세요.
- 컨텍스트란 CPU가 해당 프로세스를 실행하기 위해 필요한 정보를 말하며
- 즉, 컨텍스트 스위칭이란 멀티프로세스 환경에서 CPU가 기존 프로세스의 컨텍스트를 다음 프로세스의 컨텍스트로 교체하는 작업을 의미합니다.
- 인터럽트로 인해 컨텍스트 스위칭이 발생할 경우에는 기존 프로세스의 컨텍스트를 프로세스 내부의 PCB에 저장함으로써 이후에 이어서 작업을 수행할 수 있게 됩니다.
📌 References
'🎤 Tech Interview' 카테고리의 다른 글
[Tech Interview] Part 8. ETC (0) | 2023.06.05 |
---|---|
[Tech Interview] Part 7. Back-End (0) | 2023.06.03 |
[Tech Interview] Part 5. Network (0) | 2023.05.29 |
[Tech Interview] Part 4. Algorithm (0) | 2023.05.24 |
[Tech Interview] Part 3. Data Structure (0) | 2023.05.22 |