프로세스의 상태
•
생성(New): 프로세스가 생성 중인 상태. 프로세스 생성을 위한 여러 작업(PCB 생성)과 스케줄러 승인 등의 과정을 밟고 있는 상태로, 생성이 완료되면 준비 상태로 넘어간다.
•
준비(Ready): 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태 혹은 프로세스가 CPU를 사용하고 있지는 않고 자기 순서가 올 때까지 기다리고 있는 상태.
•
실행(Running): 프로세스가 CPU를 차지하여 명령어들이 실행되고 실제 작업을 수행하고 있는 상태. interrupt 혹은 system call이 발생하거나 주어진 시간(Time slice) 내에 작업을 끝내지 못하면(Timeout) 프로세스는 다시 준비 상태로 돌아간다.
•
완료(Terminated): 프로세스가 작업을 완료하여 종료된 상태. 프로세스의 코드와 사용했던 데이터를 메모리에서 삭제하고 PCB를 폐기한다.
•
대기(Waiting): 보류(Blocked)라고 불리기도하며, 프로세스가 입출력의 완료나 시그널 수신 등 특정 이벤트를 기다리고 있는 상태. 위 4가지 상태만으로 충분하지만 작업 효율성을 위해 추가되었다. 대표적인 예로, 프로세스가 입출력을 요구한 경우에 대기 상태로 들어가고 입출력이 끝나 인터럽트가 발생하면 준비 상태로 바꾼다.
입출력 작업
입출력 작업의 경우 CPU의 속도보다 매우 느리기 때문에, 이를 기다리는 것은 비효율적이다. 때문에 입출력 작업을 받으면 프로세스를 대기 상태로 바꾸고, 준비 상태 프로세스들 중 하나를 실행 상태로 바꾸어 작업을 수행한다.
프로세스의 상태 전이
•
하나의 프로그램이 실행되면, 그 프로그램에 대응되는 프로세스가 생성되어 준비 리스트의 마지막에 들어간다. 준비 리스트의 프로세스들은 준비(Ready) 상태에서 CPU가 할당되기를 기다리며, 우선순위가 높은 프로세스부터 CPU를 할당받고 준비 리스트를 나간다.
•
Admit
프로세스 생성을 위한 준비가 끝난 후 생성 상태에서 준비 상태로 바뀌는 것을 Admit이라 한다.
admit : new -> ready
C
복사
•
Exit
프로세스가 작업을 완료하여 실행 상태에서 종료 상태로 바뀌는 것을 Exit이라 한다.
exit : running -> terminated
C
복사
•
Dispatch
준비 리스트에 있던 프로세스가 스케줄링에 따라 CPU를 점유하게 되는 것. 준비 상태에서 실행 상태로 바뀌는 것을 Dispatch라 한다.
ready -> running
C
복사
•
Block
실행 상태의 프로세스가 허가된 시간을 다 쓰기 전에 입출력이나 시그널 대기와 같이 특정 이벤트를 기다려야 하는 경우, 프로세스는 CPU를 스스로 반납하고 대기(wating) 상태로 넘어가는 것을 Block이라 한다.
running -> wating
C
복사
•
Wakeup
입출력 작업 완료나 시그널 수신과 같이 대기 상태의 프로세스에서 기다리던 이벤트가 발생했을 때, 보류 상태에서 준비 상태로 넘어가는 것을 Wakeup이라 한다.
wating -> ready
C
복사
•
Timeout
프로세스가 프로세서(CPU)를 독점하여 사용하지 못하게 하기 위해, 운영체제는 clock interrupt를 두어 프로세스가 일정 시간동안만 점유할 수 있도록 한다. CPU를 점유한 프로세스가 일정 시간동안 작업을 끝내지 못하면 실행 상태에서 준비 상태로 넘어가는 것을 Timeout이라 한다.
running -> ready
C
복사
•
Swap-out
프로세스 생성 후 메모리 부족 혹은 준비 상태의 프로세스가 기억장치를 읽어버린 경우 커널에 의해 메모리를 회수 당하고 지연 상태로 바뀌게 되는 것을 swap-out이라 한다.
wating -> delay
ready -> delay
C
복사
•
Swap-in
기억장치가 다시 할당되는 경우 지연 상태에서 다시 준비 상태나 대기 상태로 바뀌는 것을 swap-in이라 한다.
delay -> wating
delay -> ready
C
복사
지연상태 발생 원인