여러 Process들은, 자신의 연산이 실행되기 위해서 CPU가 필요하다.
문제점은, CPU에 비해 프로세스가 많으므로 돌아가면서 프로세스를 CPU에 적재해서 실행해야한다느 점이다.
문맥 교환, CPU에서 연산중인 프로세스가 다른 프로세스로 바뀌는 것을 'context switch'라고 한다.
context switch를 하기 위해서는
위의 예시외에도, 많은 동작들이 필요하며 자동적으로 오버헤드가 발생하게 된다.
이런 오버헤드를 최소화하기 위해, 운영체제는 CPU 스케쥴링을 지원한다.
PPT 프로그램을 생각해보자. 만일 슬라이드 쇼를 펼치고 있다면, 연산은 일어나지 않을 것이다. 반면에, 마우스나 키보드를 움직이거나 입력하면 적은 cpu 타임에 비해 많은 인터럽트가 발생할 것이다. 위와 같은 상황을, 'I/O 바운드'라고 한다.
스케쥴링에는 두 가지 종류가 존재한다.
만일 A,B,C 3 개의 프로세스가 순서대로 스케쥴러에 의해 스케쥴링 되었다고 생각해보자.
계속해서 C보다 높은 우선순위를 가진 프로세스가 투입될 경우 C는 영원히 CPU 스케쥴이 되지 않을 것이다.
이와 같은 상황을 기아상태(starvation)이라고 부른다. 스케쥴링 알고리즘은, 이 '기아상태'를 배제하여야한다.
First Come First Served , 즉 먼저 할당된 프로세스를 먼저 실행하는 알고리즘이다. Batch 시스템에서 쓰인다.
이 처럼, 특정 프로세스가 오래 걸릴 경우 상대적으로 짧은 프로세스들은 비효율적으로 선점된 프로세스가 끝나길 기다릴 수 밖에 없다.
Shoreted Job First , 가장 실행시간이 짧아보이는 프로세스 순으로 스케쥴링 한다. 이론상 좋아보이나, 문제점이 존재한다.
SJF의 선점형 모델이다. 최적의 결과를 보장할 수 있으나, 잦은 인터럽트의 발생으로 인해 큰 오버헤드를 가진다.
FIFO의 선점적인 형태이다.
Quantum을 얼마나 설정할 것인지 어려운 부분이 라운드 로빈에 존재한다.
우선순위 스케쥴링. Task에 우선순위를 부여한다.
위의 룰을 통해, 각 우선순위 큐를 설정해준다. 각 우선순위 큐 마다, 설정된 quantum이 존재한다.
같은 Priority 내에서는 Round Robin 으로 task를 스케쥴링한다.
이 외에도, 자잘한 스케쥴링 알고리즘이 존재하지만. 대표적인 알고리즘만 설명해봤다.
다음 3장부터는 메모리에 대해 알아보도록하자.