프로세스가 항상 CPU를 사용하는 것은 아니다. 한 프로세스를 실행 가능한 시점까지 실행하고, I/O 등 CPU를 사용하지 않는 작업을 할 때는 다른 프로세스를 실행한다면 CPU 사용 효율을 높일 수 있다. (빠른 응답시간 / 적은 대기시간)
즉, 스케줄링이란 다중 프로그래밍의 목적인 CPU 이용률을 최대화하기 위해 준비 완료 큐에 있는 프로세스에게 어떤 기준으로 CPU를 할당할 것인지를 결정하는 방법이다.
최신 운영체제에서는 실질적으로 프로세스가 아니라 커널 수준 스레드를 스케줄 한다.
✅ 비선점 스케줄링(nonpreemptive) : 어떤 프로세스가 CPU를 할당 받으면 그 프로세스가 종료되거나 입출력 요구가 발생하여 자발적으로 중지될 때까지 계속 실행되도록 보장한다. 종류로는 FIFO, SJF, 우선순위, HRN, 기한부 등이 있다.
장점 :
단점
✅ 선점 스케줄링(preemptive) :
하나의 프로세스가 CPU를 차지하고 있을 때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식이다. 종류로는 SRT, 선점 우선순위, Round Robin, 다단계 큐 등이 있다.
장점
단점
각각의 Queue 에 프로세스들을 넣고 빼주는 스케줄러에도 크게 세 가지 종류가 존재한다.
메모리와 디스크 사이에 스케쥴링을 담당한다.
한정된 메모리에 많은 프로세스들이 한꺼번에 메모리에 올라올 경우, 디스크에 임시로 저장된다. 이 pool 에 저장되어 있는 프로세스 중 어떤 프로세스에 메모리를 할당하여 ready queue 로 보낼지 결정하는 역할을 한다. (new -> ready상태로 전이)
+) 시분할 시스템에서는 장기 스케줄러가 없다. 그냥 곧바로 메모리에 올라가 ready 상태가 된다.
CPU 와 메모리 사이의 스케줄링을 담당한다.
Ready Queue 에 존재하는 프로세스 중 어떤 프로세스에 CPU 를 할당(scheduler dispatch)할지 결정한다. (ready -> running -> waiting -> ready)
가상메모리 체제에서 너무 많은 프로세스가 적재되면 하드디스크 입출력의 과다와 CPU경쟁이 심해져 시스템이 거의 멈추는 Trashing 현상을 방지하기 위해,
메모리에 올라간 프로세스 수를 조절하기위해 메모리 상의 프로세스를 통째로 디스크로 쫒아내는 swap out을 하고, 시간이 흘러 메모리에 여유가 생기면 swap-in 한다.
swap out되는 프로세스는 ready, waiting상태이며 ready상태보단 waiting상태가 당장 cpu를 할당받을 가능성이 낮기 때문에 우선적으로 swap out됩니다.
+) CPU가 할당되어 실행 중인 주기를 CPU 버스트(CPU Burst), 입/출력이 이루어지는 주기를 I/O 버스트(I/O Burst)라 부른다.