좀비프로세스와 고아프로세스
2024. 1. 15. 15:17ㆍCS/운영체제
좀비프로세스와 고아프로세스
좀비 프로세스(자식이 먼저 종료 + 부모가 wait()호출 X)
자식 프로세스가 부모프로세스보다 먼저 종료 + 부모프로세스가 아직 wait()를 호출하지 않은 자식프로세스의 상태
- 자식 프로세스가 종료되어도 사용하던 리소스를 운영체제에게 반환하지 못하기때문에 완전히 제거되지 못한다.
- 이러한 경우에 대비하여, 커널은 자식프로세스의 최소한의 정보(자식프로세스의 PID, 프로세스의 종료 상태 등)을 가지게 된다.
- 이후, 부모프로세스가 wait() 시스템콜을 호출하여 종료상태를 회수하게 되면, 좀비프로세스가 정상적으로 제거된다.
고아 프로세스(부모가 먼저 종료)
부모 프로세스가 자식 프로세스보다 먼저 종료하게 되면, 이때, 자식프로세스의 상태를 고아프로세스라고 한다.
- 자식프로세스의 부모프로세스가 제거되었기때문에 자식프로세스의 새로운 부모는 init프로세스가 된다.
- 그렇기때문에 부모의 PID는 1로 변경된다. (init프로세스의 pid값이 1이기때문!)
- init프로세스는 기존의 부모프로세스 대신 wait() 시스템콜을 호출하여 자식이 종료될때까지 기다리고,
- 자식프로세스가 종료된다면 리소스를 회수하여 자식프로세스를 정상적으로 종료 및 제거시킨다.
자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리해?
- 자식 프로세스가 상태를 알리지 않고 죽는 경우⇒ kill이 되면, 자식프로세스를 바로 죽이지 않고 자식프로세스의 PCB에 kill요청이 되었다는 것을 나타내기위해 kill flag정보를 표시한다.
- 부모프로세는 wait()를 통해 자식이 종료될때까지 기다린다.
- 자식프로세스는 kill당하기 전에 exit() 시스템콜 호출
- 부모프로세스는 자식프로세스의 pcb를 확인하여 kill flag가 있음을 인지
- 부모프로세스는 kill flag를 통해 자식프로세스의 상태가 종료되었음을 인지하여 자식프로세스를 종료 및 제거한다.
- ⇒ 다른 프로세스에 의해서 kill당하는 경우로 추측된다.
- 부모가 먼저 죽는 경우
- 부모프로세스가 자식프로세스보다 먼저 죽게되면, 이때 자식프로세스의 상태는 고아프로세스가 된다.
- 부프로세스가 종료되었기때문에, 해당 자식프로세스의 부모프로세스는 init()프로세스가 된다.
- 따라서, 해당 부모의 프로세스의 pid값은 1이 된다. (init프로세스의 pid값이 1이기때문!)
- 이후, 부모프로세스(=init프로세스)가 wait()를 하게 되어 자식프로세스가 종료될때까지 기다리고,
- 자식프로세스가 종료되면 리소스를 회수하여 자식프로세스를 정상적으로 종료 및 제거한다.
- 참조블로그
'CS > 운영체제' 카테고리의 다른 글
PCB(프로세스 제어 블록), multi process? (0) | 2024.01.17 |
---|---|
프로그램, 프로세스, 프로세스 주소공간, 스레드 (0) | 2024.01.17 |
프로세스 관리 (0) | 2024.01.15 |
동기식 I/O와 비동기식 I/O의 공통점과 차이점 (1) | 2024.01.11 |
DMA(Direct Memory Access) (0) | 2024.01.11 |