추가적으로 Scheduling Algorithm들을 더 기록해두려고 합니당😊
앞서 이미 우선 순위 스케줄러의 예들을 봤습니다.
- SJF, STCF는 모두 우선 순위 스케줄러 입니다. (우선순위 = CPU Burst Time)
우선 순위 스케줄링 문제
- Starvation: 우선 순위가 높은 작업이 CPU를 지배 할 수 있는 문제점
해결책
- 프로세스 동작에 따라 설정
- 대기 시간에 따라 설정
ex) 준비 대기열에서 소요 된 시간
Deadline이 가장 가까운 것을 scheduling 한다
why? -> Preempt Scheduler일 때, EDF Scheduler로 만족시킬 수 없다면 다른 스케줄러로도 만족시킬 수가 없음
ex) 원자력 발전소, 우주선 등
Key idea - Divide the ready queue in two
1. High priority Queue = interactive processes
RR Scheduling
2. Low priority Queue = CPU bound processes
FCFS Scheduling
정적인 구성으로 되어 있음
1. 각 프로세스에는 시작시 우선 순위가 지정됨
2. 각 대기열에는 고정 된 양의 CPU 시간이 제공됨
ex). High priority Queue = 80%
Low priority Queue = 20%
>> MLQ의 4가지 문제점
💧 1. 무엇이 High priority이고, Low priority인지 모른다는 점
💧 2. 대기열에 고정된 양의 CPU 시간을 제공하는데, 이에 대한 기준이 모호함
💧 3. High와 Low가 섞여있는 process들은 어떻게 처리할 것인가?
💧 4. Low에서 FCFS로 진행될텐데, 이때 convoy 문제는 어떻게 해결 할 것인가?
->우선순위가 낮은 queue는 Starvation 현상 발생 가능
Burst time, 프로세스 동작에 대한 사전지식 필요 없음
>> 그래서 위와 같은 문제점을 해결하기 위해 새로운 Rule을 추가합니다.
1. Priority Boost (Starvation 문제점 해결) - 특정 시간(S)이 지나면, 모든 프로세스들을 제일 높은 우선순위로 변경
2. Cheat Prevention (Cheating 문제점 해결) - time-slice마다 얼마나 썼는지 check하는 것이 아닌, 현재 queue에서 CPU를 얼마나 사용했는가를 check 하는 방식으로 Rule 변경
Lottery Scheduling의 무작위성은 간단하고 대략적으로 공정한 스케줄러를 구축 가능하게 해주지만, 공정성이 보장되는 것은 아닙니다.
다음과 같은 스케줄러는 Lottery보다는 공정성이 보장되는 스케줄러입니다.
공배수를 10,000이라고 가정하고 각 프로세스의 Tickets들로 나누게 되면 그 값이 Stride이다. 따라서 P1 Stride = 100(10000/100), P2 Stride = 200(10000/50),
P3 Stride = 40(10000/250) 이다.
각 프로세서는 Arrival Time이 같기 때문에 랜덤으로 실행되지만 이번에는 P1 process가 먼저 실행된다는 가정하에 문제를 작성해봤다.
이 과정에서 새로운 processer가 왔을 때, pass값을 어떻게 줄것인가는 Stride Scheduler의 문제점입니다.
구현의 간단함 - Lottery Scheduler > Stride Scheduler
Stride Scheduler는 Lottery Scheduler에 비해 여러가지 정보를 입력해야 합니다.
또한 히스토리를 유지해야 하는 번거로움이 있습니다.
둘의 공통적인 문제 - 티켓을 얼마나 줘야할것인가는 두 스케줄러의 공통적인 문제입니다.