Process
Process in memory
- Code(Text): 작성한 코드가 들어가는 부분
- Data: Global variable을 포함하는 부분
- Stack: Temporary data를 포함하는 부분
- Heap: 런타임 중에 동적으로 할당되는 부분
State of Process
- New: 새로운 프로세스가 생성된 상태
- Ready: Process가 Processor에 할당되기를 기다리는 상태
- Running: 명령어가 실행되는 상태
- Blocked: Process가 I/O가 완료되기를 기다리는 상태
- Exited: Process의 실행이 종료된 상태
Process의 계층
- 프로세스들은 Tree형태의 구조로 이루어진다.
프로세스(부모)는 다른 프로세스(자식)를 만들 수 있다.
fork()
- Process 복제하고, 복제된 프로세스는 새로운 메모리 공간에 전부 복사된다.
exec() family
- 현재 Process이미지에 새로운 process 이미지로 대체한다.
abort()
- 프로그램 내부에서 비정상적인 오류가 발생하면 프로그램을 종료한다.
assert()
- 파라미터로 들어온 표현식이 거짓이라면 abort()를 호출한다.
kill()
- Process에게 signal을 보내고, 해당 프로세스는 종료된다.
wait()
Process Termination
- Zombie
부모 process에서 wait()나 waitpid()를 만나기 전 상태의 자식 process이다.
- Orphan
부모 Process가 종료되고, wait를 만나지 않아 종료가 되지 않은 자식 Process이다. 이들은 init/systemd process에 연결한다.
PCB
- 프로세스의 정보를 포함한다.
PID, Process state, program counter, cpu register 등을 포함한다.
[참고] Operating Systems Three Easy Pieces/Remzi H.Arpaci-Dusseau/ CreateSpace Publishing