lunchScreen/Interview_Questions

child process 와 zombie process

Opened this issue · 2 comments

child process 와 zombie process
  • Zombie Process

    • Process는 종료될 때 exit() system call을 사용하여 운영체제에게 삭제를 요청하면서 종료됩니다.
    • Process는 자신의 부모가 호출한 wait() systam call을 통해 모든 자원을 반납합니다.
    • 이 때 exit()으로 종료되었지만, 부모가 아직 wait()을 호출하지 않은 상태를 Zombie Process라고 합니다.
    • Zombie Process가 많아지면 Process의 양이 증가하여 성능 저하를 야기할 수 있습니다.
  • Orphan Process

    • Orphan Process는 부모 Process가 wait()을 호출하지 않고 종료되었을 때 자식 Process를 Orphan Process라고 합니다.
  • init Process

    • Unix 계열의 운영체제에서 Booting 과정 중 생성되는 최초의 Process이며 System이 종료될때까지 계속 살아있는 Daemon Process
    • Orphan Process가 작업을 종료하면 init Process가 wait함수를 호출하여 Orphan Process의 종료 상태를 회수함으로써 Zombie Process가 되는것을 방지한다.
  • 프로세스는 보통 fork 시스템 콜을 통해 생성된다. 이 때 생성한 주체인 프로세스를 부모프로세스, 피 생성된 프로세스를 자식프로세스라고 한다. 부모와 자식은 1:N 관계가 될 수 있다. 그에 따라 전체적으로 프로세스 구조는 tree형태를 나타낼 것이다.
  • fork()의 수행은 부모 프로세스에서 일어나지만, fork()로부터의 리턴은 부모, 자식 모두에게 일어난다. 단, 부모 프로세스의 리턴값은 자식 프로세스의 고유번호(PID)이고 자식 프로세스의 리턴값은 0이다. 이렇게 리턴값을 다르게 설정한 이유는, fork()의 리턴값을 받아 이를 조건문에 활용해 다른 작업을 수행할 수 있도록 하기 위해서이다.
  • 자식프로세스가 생성되면 사용자 문맥의 text 부분만 공유하고, data와 stack 공간은 별도로 생성되고 원래 값이 복사된다. 즉, 같은 이름이라도 각각 다른 값을 뜻하는 변수들을 가진다. PCB도 당연히 따로 생성된다.
  • exit가 호출되었을 때 wait 상에 있는 부모 프로세스에 종료 이벤트를 알려준다. 부모가 wait상태에 있지 않다면 자식 프로세스의 주소 공간과 할당 자원은 없어지지만, PCB는 그대로 유지된다. 이러한 상태를 좀비(zombie) 프로세스 상태라고 한다.