CPU가 하나의 프로세스 작업이 끝나면 다음 프로세스 작업을 수행해야 한다. 이 때, 다음 프로세스가 어느 프로세스인지를 선택하는 알고리즘을 CPU Scheduling 알고리즘 이라고 한다. 간단히 생각해보면 먼저 온 프로세스가 먼저 실행되는 것이 가장 좋을 것 같지만, 실제 환경에서는 여러가지 단점들이 존재하기 때문에 반드시 이 방법이 좋다고는 할 수 없다. 그렇므로 여러가지 알고리즘이 존재하는데 오늘은 이 알고리즘들에 대하여 알아보자.
우선 처리해야 하는 프로세스들의 대기장소인 Queue에 대하여 간략하게 알아보자.
1. 장기 스케줄링(Long-term scheduling)
장기 스케줄러는 메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 역할을 한다. 장기 스케줄러가 Ready Queue에 어떤 작업들을 올릴지는 여러가지 알고리즘에 의해 결정되는데, 이 알고리즘들은 이후에 살펴볼 것이다.
2. 중기 스케줄링(Medium-term scheduling)
메모리에 많은 수의 프로세스가 적재되어 공간이 협소해지게 되면, CPU가 당장 필요한 주소 공간도 부족해진다. 이 경우에 메모리에 적재된 프로세스들이 디스크로 I/O되는 경우가 수시로 발생하게 되어 시스템의 성능이 매우 저하된다.
3. 단기 스케줄링(Short-term scheduling)
우리가 흔히 dispatcher라고 알고 있는 스케줄러이다.
어떤 프로세스에게 CPU를 할당해 줄 것인지를 결정한다.
준비 상태의 프로세스 중에서 어떤 프로세스를 다음 번에 실행 상태로 만들 것인지를 결정한다.
특정 Event가 발생할 때마다 단기 스케줄러가 작동하는데 그 Event의 예시로는 다음이 있다.
1. Clock interrupts
2. I/O interrupts
3. Operating System calls
4. Signals
✔미리 알고가자
👀Preemptive(선점) VS Nonpreemptive(비선점)란?
'선점'은 프로세스가 CPU를 점유하고 있는 동안 I/O나 다른 인터럽트가 발생한 것도 아니고 모든 작업을 끝내지도 않았는데, 다른 프로세스가 해당 CPU를 강제로 점유할 수 있는 것이다.
'비선점'은 '선점'과 반대이다. 한 프로세스가 한 번 CPU를 점유했다면, 그 프로세스의 I/O나 다른 인터럽트의 발생 또는 프로세스의 종료 전까지 다른 프로세스가 CPU를 점유하지 못하는 것이다.
특징
장점
문제점
특징
장점
문제점
특징
문제점
해결책
특징
장점
문제점?
RR방식이 가능한 이유
프로세스는 자신의 context를 save할 수 있기 때문이다!
특징
SJN방식의 Preemptive 버전이다.
새로운 프로세스가 들어왔을 때 현재 프로세스와 들어온 프로세스가 해야할 service time을 비교하여 더 짧은 놈이 선점한다.
문제점
스케줄러는 새로운 프로세스가 도착할 때마다 processing time을 계산해야한다.
service time이 긴 프로세스가 굶주림 현상을 나타낼 수 있다.