개발/CS

[OS] 프로세스 관리 - 프로세스의 생성과 종료, 시스템콜

zz132456zz 2022. 8. 17. 00:31
728x90

 

프로세스 생성 (Process Creation)

부모 프로세스가 자식 프로세스를 생성한다.
프로세스는 자원을 필요로 하는데 운영체제로부터 받는다.
부모와 자원을 공유하는 경우도 있고 공유하지 않는 경우도 있는데 일반적으로 공유하지 않는다.
자식은 부모의 공간과 PCB, 자원 등을 복사한다. 일단 복제를 하고 새로운 프로그램을 덮어 씌운다.
fork() 시스템 콜이 새로운 프로세스를 생성한다. (부모를 그대로 복사 - OS data except PID + binary)

exec() 시스템 콜이 새로운 프로그램을 메모리에 올린다.

프로세스 종료 (Process Termination)

exit() 시스템 콜을 하면 프로세스가 종료된다.

자발적 종료(exit)

프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다.

자식이 부모에게 output data를 보낸다. (wait() 시스템 콜을 통해)
프로세스의 각종 자원들이 운영체제에게 반납된다.
프로그램에 명시적으로 적어주지 않아도 main함수가 리턴되는 위치에 컴파일러가 넣어준다.

비자발적 종료(abort)

부모 프로세스가 자식의 수행을 종료시킨다.
그럼 언제 비자발적 종료가 되나??
자식이 할당 자원의 한계치를 넘어설 때
자식에게 할당된 태스크가 더 이상 필요하지 않을 때
부모가 종료되는 경우에 (부모 프로세스가 죽기 전에 자식 프로세스가 먼저 죽어야 하기 때문)

프로세스와 관련한 시스템콜

fork()

create a child

exec()

overlay new image

wait()

sleep until child is done
프로세스 A가 wait 시스템콜을 호출하면
커널을 child가 종료될 때까지 프로세스 A를 sleep 시킨다.(block 상태)
Child process가 종료되면 커널은 프로세스 A를 깨운다.(ready 상태)

exit()

frees all the resources, notify parent

 

 

 

 

 

 

 

 

 

 

728x90