프로세스 상태, 계층 구조, 생성 기법
프로세스 상태
1. 생성 상태
- 이제 막 메모리에 적재되어 PCB를 할당 받은 상태
2. 준비 상태
- 당장이라도 CPU를 할당 받아 실행할 수 있지만 자신의 차례가 아니기 때문에 기다리는 상태이다.
- 자신의 차례가 오면 실행 상태로 변환된다. (디스패치)
3. 실행 상태
- CPU를 할당 받아 실행중인 상태이다.
- 할당된 시간 모두 사용 시(타이머 인터럽트 발생 시) 준비상태로 변환된다.
- 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날 때(입출력 완료 인터럽트 발생시)까지 대기상태로 변환된다.
4. 대기 상태
- 프로세스가 실행 도중 입출력장치를 사용하는 경우
- 입출력 작업은 CPU에 비해 느리기 때문에 대기상태로 기다린다.
5. 종료 상태
- 프로세스가 종료된 상태이다.
- PCB, 프로세스의 메모리 영역 정리
프로세스 계층 구조
- 프로세스 실행 도중 (시스템 호출을 통해) 다른 프로세스 생성이 가능하다.
- 새 프로세스를 생성한 프로세스 : 부모
- 생성된 프로세스 : 자식
1. 부모 프로세스와 자식 프로세스는 별개의 프로세스로 각각 다른 PID를 갖는다.
- 일부 운영체제에서는 자식 프로세스 PCB에 부모 프로세스 PID(PPID)를 명시하기도 함
2. 부모와 자식 관계를 통해 프로세스의 계층적인 구조가 형성된다.
프로세스 생성 기법 (fork - exec 구조)
- 부모 프로세스는 자식 프로세스를 어떻게 만들고, 자식 프로세스는 어떻게 자신만의 코드를 실행하는가?
1. 부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성
2. 자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체
fork 시스템 호출
- 복사본 (자식 프로세스)를 생성한다.
- 부모 프로세스의 자원을 상속한다.
exec 시스템 호출
- 메모리 공간을 새로운 프로그램으로 덮어쓴다.
- 코드 / 데이터 영역은 실행할 프로그램 내용으로 바뀌고 나머지 영역은 초기화
fork를 통해 복제본을 자식프로세스로써 생성하고
복제본 자식 프로세스는 exec을 통해 실행하는 옷으로 바뀌어 메모리공간으로 바꾸어 실행한다.
fork 시스템 호출과 exec시스템 호출이 반복되는 과정이라고 볼 수 있다.
fork 이후 exec을 하지 않는 경우도 있으며, 이는 동일한 일을 수행하는 프로세스가 병행 실행되는 구조라고 볼 수 있다.