시분할 시스템이 생겨나면서 기존의 일괄 작업 시스템보다 프로세스의 상태가 복잡해졌다.
기존의 일괄 작업 시스템과 달리 시분할 시스템에서는 프로세스의 작업 도중에 인터럽트에 의해 CPU를 다른 프로세스에 넘겨주는 경우가 생겨났기 때문이다.
기본적으로 프로세스의 상태는 생성, 준비, 실행, 대기, 완료 (+보류) 5가지로 분류할 수 있다.
생성 상태
프로그램이 메모리에 올라가 프로세스가 되고, 운영체제에 의해 프로세스 제어 블럭(PCB)가 생성된다.
준비 상태
프로세스가 생성되면 바로 CPU에 할당되어 실행되는 것이 아니라 준비 상태에 접어든다. 이 때 PCB는 준비 큐에 들어가며 CPU에 할당될 때까지 자신의 차례를 기다린다. 준비 큐에서 어떤 프로세스가 실행 상태로 옮겨지는가는 CPU 스케줄러에 의해 관리된다. 이렇게 CPU 스케줄러에 의해 준비 상태의 프로세스가 실행 상태로 되는 것을 디스패치(dispatch) 라고 한다.
실행 상태
CPU 스케줄러에 의해 프로세스가 실행 상태가 되면 CPU를 할당받아 작업을 진행한다. 시분할 시스템의 경우에는 타임 슬라이스가 주어지기 때문에 이 시간동안마나 프로세스가 CPU를 사용할 수 있다. 만약 주어진 타임 슬라이스동안 작업을 완료하지 못하면 타임아웃(timeout) 즉, 인터럽트가 발생하며 실행 상태의 프로세스는 작업을 중단하고 다시 준비 상태가 된다.
대기 상태
만약 실행 중인 프로세스가 입출력을 요청하는 경우에는 CPU 작업을 중단하고 입출력을 처리해야 한다. 따라서 CPU는 입출력 관리자에게 입출력 요청을 하게 된다. 이 때 block 명령이 발생하며 프로세스는 입출력이 끝날 때까지 대기 상태가 된다.
입출력이 완료되면 인터럽트가 발생하고, 대기 상태의 프로세스는 바로 실행 상태로 되는 것이 아니라 준비 상태가 된다. 프로세스가 입출력이 완료된 시점에 이미 CPU를 할당받고 실행 중인 프로세스가 있을 수 있기 때문이다. 그러므로 준비 큐에 들어가서 자기 차례가 될 때까지 기다린다.
완료 상태
프로세스가 작업을 모두 완료하면 종료된다. 메모리에 적재되었던 프로세스 정보와 프로세스 제어 블럭(PCB)가 제거된다.
기본적인 프로세스 상태 5가지에 대해 살펴보았다.
여기서 보류 상태를 추가하면 아래와 같다.
보류 상태
보류 상태는 프로세스가 메모리를 벗어난 상태를 나타낸다. 메모리가 꽉 차거나 잠시 프로세스의 실행을 보류해야 하는 경우에 메모리가 아닌 스왑 영역에 임시로 옮겨진다. 대기 상태에서 보류되느냐, 준비 상태에서 보류되느냐에 따라 보류 대기 상태와 보류 준비 상태로 나뉜다.
보류 상태와 앞서 설명한 5가지의 상태를 분리하기 위해 생성, 준비, 실행, 대기, 완료 상태를 합쳐서 활성 상태라고 부르기도 한다.