어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 모듈
운영체제는 스케줄러를 통해 CPU를 사용하려고 하는 프로세스 사이의 우선순위를 관리하고 이것을 스케줄링 이라 한다.
프로세스를 스케줄링 하기 위한 Queue에는 세 가지 종류가 존재한다.
단기 스케줄러 (CPU Scheduler) : CPU와 메모리 사이를 담당하는 스케줄러
중기 스케줄러 (Swapper) : 메모리에서 CPU를 점유하기 위해 경쟁하는 프로세스를 디스크로 보내는 스케줄러
장기 스케줄러 (Job Scheduler) : 메모리와 디스크 사이를 담당하는 스케줄러
메모리에 너무 적은 프로그램이 올라와도 성능저하가 발생하고, 메모리에 많은 프로그램이 올라와도 성능 저하가 발생하기 때문에, 적절한 균형을 맞춰줘야 하는데 이를 장기 스케줄러가 정함.
그러나, 현재 컴퓨터에는 보통 장기 스케줄러가 없다 그렇기에 중기 스케줄러가 이를 제어한다고 생각하면 됨.
상태명 | 상태 | description |
---|---|---|
new (create state) | 프로세스 생성 중 | - 프로세스가 아직 자원할당을 받지 못한 상태 - PCB가 커널 공간에 생성됨 |
ready (ready state) | 프로세스가 CPU를 기다리는 중 | - 생성된 프로세스가 CPU 자원 할당을 기다리는 상태 - 일반적으로 우선 순위가 높은 프로세스가 먼저 할당 받음 |
running (running state) | 프로세스가 실행 중 | - 프로세스가 CPU 자원을 할당 받아 작업을 수행중인 상태 - 일정 시간 동안 CPU를 사용할 권리를 가지게 된다 - 주어진 시간을 다 사용 하고도 작업이 끝나지 않았다면 ready state로 돌아와 다음 차례를 기다린다 - 프로세스는 ready와 running state를 왔다 갔다 하게 됨 |
terminated (exit state) | 프로세스의 실행 종료 | - PCB가 사라진 상태를 의미 |
blocked (waiting state) | 프로세스 대기 | - running 상태의 프로세스가 주어진 시간을 다 쓰기 전에 입출력(I/O) 작업이 필요하거나, 어떤 이벤트가 생겼을 경우 해당 이벤트가 처리될 때 까지 사용하고 있던 CPU를 반납하고 입출력장치별로 마련된 디바이스 큐에 가서 줄을 서고 기다린다. - 즉, 디바이스 큐에 속한 프로세스는 언제나 blocked 상태 입출력이 완료 되면 디바이스 컨트롤러가 CPU에 인터럽트를 발생시키고, 대기 상태에 있는 여러 프로세스 중 해당 인터럽트로 깨어날 프로세스를 찾는다 - 이후 해당 프로세스는 blocked -> ready 로 상태가 전이되며, 디바이스 큐에서 나와 레디큐로 이동하게 된다. |
suspended | 프로세스 수행 정지 | - 외부적 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태. - 전부 디스크로 swap out |
Blocked와 Suspended의 차이
Blocked : 자신이 요청한 event가 만족되면 Ready
Suspended : 외부에서 resume 해줘야 Active
Running, Ready, Blocked의 경우엔 프로세스 입장에서 다른 놀이기구 줄을 서고 있기 때문에 열심히 일을 하고 있는 상태임. But, Suspended는 Memory를 아예 빼앗긴 상태이므로 외부에서 resume해주지 않는다면 CPU로 돌아갈 수 없음.
Reference
https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f