컴퓨터를 사용할 때 여러 프로세스들이 바르게 번갈아 가면서 실행되는데, 그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행된다. 그리고 운영체제는 PCB를 통해 인식하고 관리한다.
생성 상태: 프로세스를 생성 중인 상태(new). 이제 막 메모리에 적재되어 PCB를 할당 받은 상태. 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비 상태가 되어 CPU의 할당을 기다린다.
준비 상태: 준비 상태(ready)는 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니라 기다리고 있는 상태. 차례가 되면 CPU를 할당받아 실행 상태가 된다.
⭐ 준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치(dispatch)라고 한다.
실행 상태: 실행 상태(running)는 CPU를 할당받아 실행 중인 상태. 실행 상태인 프로세스는 할당된 일정 시간 동안만 CPU를 사용할 수 있다. 프로세스가 할당된 시간을 모두 사용하면(타이머 인터럽트가 발생하면) 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용해 입출력 장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다.
대기 상태: 프로세스가 실행 도중 입출력장치를 사용할 경우, 입출력 작업은 CPU에 비해 처리 속도가 느리므로 프로세스는 입출력장치가 입출력을 끝낼 때까지(입출력 완료 인터럽트를 받을 때까지)기다린다. 이런 상태를 대기 상태(blocked)라고 한다.입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다린다.
종료 상태: 종료 상태(terminated)는 프로세스가 종료된 상태다. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.
프로세스 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다. 새 프로세스를 생성한 프로세스를 부모 프로세스parent process, 부모 프로세스에 의해 생성된 프로세스를 자식 프로세스child process라고 한다.
부모 프로세스와 자식 프로세스는 각기 다른 PID를 가진다. 일부 운영체제에서는 자식 프로세스의 PCB에는 부모 프로세스 PID인 PPIDParent PID가 기록 되기도 한다.
많은 운영체제는 컴퓨터 부팅 시 실행되는 최초의 프로세스가 자식 프로세스들을 생성하고, 생성된 자식 프로세스들이 새로운 프로세스를 생성하는 계층적인 구조로써 프로세스들을 관리한다.
부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성해 내고, 만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.
fork는 자기 자신 프로세스의 복사본을 만들어 자식 프로세스로 생성하는 시스템 호출이다. 자식 프로세스는 부모 프로세스의 복사본이기 때문에 부모 프로세스의 자원들을 상속 받는다.(PID, 저장된 메모리 위치는 다르다)
exec는 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출이다.