프로세스 생성
- 운영체제가 최초의 프로세스를 생성하면, 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다. 이때 기존 프로세스를 부모 프로세스라 하고, 새로 생긴 프로세스를 자식 프로세스라고 부른다.
- 프로세스의 트리 (계층 구조)를 형성한다.
- 프로세스는 자원을 필요로 한다.
- 자원의 공유
- 부모와 자식이 모든 자원을 공유하는 모델
- 일부를 공유하는 모델
- 전혀 공유하지 않는 모델(잉반적인 모델)
- 수행 (Execution)
- 부모와 자식이 공존하며 수행하는 모델 (이때는 부모와 자식이 CPU를 획득하기 위해 경쟁하는 관계가 됨)
- 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델
주소 공간
- 자식은 부모의 공간을 복사한다. (프로세스 ID를 제외한 운영체제 커널 내의 정보와 주소 공간의 정보)
- 자식은 그 공간에 새로운 프로그램을 올린다.
- 유닉스의 예
- fork() 시스템 콜이 새로운 프로세스를 생성한다.
- fork() 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램으로 주소 공간을 덮어 씌운다.
프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다. (exit)
- 자식이 부모에게 output data를 보낸다.(via wait)
- 프로세스의 각종 자원이 운영체제에 반납된다.
- 부모 프로세스가 자식의 수행을 종료 시킨다. (abort)
- 자식이 할당 자원의 한계치를 넘어선다.
- 자식에게 할당된 task가 더 이상 필요하지 않는다.
- 부모가 종료(exit)한다.
- 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 주지 않는다.
- 단계적인 종료
시스템 콜
fork() 시스템 콜
exec() 시스템 콜
wait() 시스템 콜
exit() 시스템 콜
abort() 시스템 콜
프로세스 간의 협력
독립적 프로세스 (Independent process)
협력 프로세스 (Cooperating process)
프로세스 간 협력 메커니즘 (IPC: Interprocess Communication)
메시지 전달 방식 (Message Passing)
공유 메모리 방식 (Shared Memory)