해당 내용은 아주대학교 '김상훈' 교수님의
'운영체제' 수업을 바탕으로 작성되었습니다.
[목차]
1. Process란?
2. Program → Process
3. 프로세스의 5가지 상태
4. Process Hierarchy
5. Process Creation - fork()
6. Replace Process Image - exec()
7. Process Termination
8. Process 구현


new : process가 새로 생긴 상태ready : processor에게 할당되기를 기다리는 상태running : instruction이 실행되고 있는 상태blocked : 특정 event가 일어나기를 기다리는 상태exited : 실행이 끝난 상태한 프로세스가 또다른 프로세스를 생성할 수 있다.
parent와 child의 관계가 형성되어 결국 프로세스 간의 관계를 tree 구조처럼 나타낼 수 있다
새로운 프로세스를 만들 때 현재 프로세스를 cloning해서 만든다
결국 child process는 parent의 address space를 duplicate 한다
- (사실 내용을 전부 복사하지 않고 memory를 share하는 방식으로 mapping만 복사한다)
fork() 함수를 통해 현재 프로세스에서 새로운 프로세스를 만들 수 있다
다음은 fork() 함수의 리턴 값이다.
fork() 실패시 parent process에게 -1 을 return
새로 생긴 child process는 0을 return 받는다
parent process는 새로 생성된 child process의 PID를 return 받는다
| parent | child's PID |
|---|---|
| child | 0 |
| fail | -1 |
exec()현재 프로세스의 image를 새로운 process image로 Replace
exec() 계열 함수들을 통해 replace
exec() 하고나면 기존 address space는 모두 사라지고 새롭게 다시 시작
process가 죽으면 PID와 status information을 return한다
이 return 값을 parent가 wait() 함수를 통해 받아줘야 된다
parent process에서 wait() 함수는 child process의 return 값을 받기 전까지 계속 blocked 상태에 있다
- 만약 child process가 죽었지만 아무도 wait() 함수로 return 값을 회수하지 않으면 이 process는 Zombie process가 된다
- 만약 parent가 wait() 함수를 호출하지 않고 child 보다 먼저 죽는 경우, tree 구조이기에 parent process가 먼저 죽으면 tree 연결이 끊기게 된다. 이렇게 남겨진 child process들을 Orphan process라고 한다.
Cascading terminationReparentingInit process로 입양 보낸다Init process로 입양 보내는 이유 : Init process는 초기 process로, 주기적으로 wait() 함수를 호출해주기 때문이다.
self quiz 링크
https://overjoyed-goldfish-618.notion.site/f81e3c203cff4bfcb5841da8e9bfbc02?pvs=4