프로세스는 수행 과정에 따라 다음과 같은 상태 변화를 겪습니다.
1. 프로세스의 상태
1) 시작(New) 상태
- 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태입니다.
2) 준비(Ready) 상태
- 프로세스가 CPU를 할당받기를 기다리는 상태입니다.
- 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당받지 못한 상태입니다.
- 준비 큐(ready queue)라는 자료구조에 저장됩니다.
3) 실행(Running) 상태
- 프로세스가 CPU를 할당받아 기계어 명령을 수행하는 상태입니다.
- 한 번에 하나의 프로세스만 실행 상태가 될 수 있습니다.
4) 대기/봉쇄(Blocked, Sleep, Wait) 상태
- CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태를 말합니다.
- 프로세스가 입출력 요청이나 이벤트 발생 등의 이유로 CPU를 반납하고 기다리는 상태입니다.
- 대기 큐(waiting queue)라는 자료구조에 저장됩니다.
5) 중지 대기/봉쇄(Suspended Blocked) 상태
- 봉쇄(Blocked) 상태에 있던 프로세스가 중기 스케줄러에 의해 스왑 아웃된 상태입니다.
6) 중지 준비(Suspended Ready) 상태
- 준비(Ready) 상태에 있던 프로세스가 중기 스케줄러에 의해 디스크로 스왑 아웃된 상태입니다.
7) 종료(terminated) 상태
- 프로세스가 수행을 완료하거나 에러 등의 이유로 중단된 상태입니다.
- 프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태입니다.
- 시스템에서 제거됩니다.
2. 스케줄러의 종류
스케줄러(scheduler)란 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드를 지칭합니다.
1) 장기 스케줄러(long-term scheduler)
- 작업 스케줄러(job scheducler) 라고도 부릅니다.
- 어떤 프로세스를 준비 큐에 진입시킬지 결정하고 옮기는 역할을 합니다.
- 프로세스에게 메모리를 할당하는 문제에 관여합니다.
- 새로운 프로세스의 생성과 종료에 관여합니다.
장기 스케줄러는 과거에 자원이 매우 빈약하던 시절에 주로 사용되었습니다.
과거에는 적은 양의 메모리를 만흔 프로세스들에게 할당하면 프로세스당 메모리 보유량이 지나치게 적어져 시스템의 효율이 매우 떨어졌기 때문에 장기 스케줄러가 이를 조절하는 역할을 담당했기 때문입니다.
현대의 시분할 시스템용 운영체제에서는 중기 스케줄러(medium-term scheduler)를 대신 사용합니다.
2) 단기 스케줄러(short-term scheduler)
- CPU 스케줄러라고도 부릅니다.
- 준비 상태의 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들 것인지 결정하고 옮기는 역할을 합니다.
- 즉, 준비 큐에 있는 여러 프로세스들 중 어떠한 프로세스에게 CPU를 할당할 것인가를 결정합니다.
- CPU의 할당과 선점에 관여합니다.
3) 중기 스케줄러(medium-term scheduler)
- 프로세스당 보유 메모리양이 지나치게 적어진 경우 이를 완화시키기 위해 일부 프로세스를 메모리에서 디스크로 스왑 아웃시키는 역할을 수행합니다.
- 봉쇄 상태(Blocked, Sleep, Wait)에 있는 프로세스가 주로 스왑 아웃 됩니다.
- 메모리의 공간 확보에 관여합니다.