지금까지는 하나의 큐에 줄을 서는 것에 대해 이야기 했지만, 이번에 소개할 스케줄링 방법은 여러 큐를 통해 스케줄링하는 것이다. 이때 큐를 여러 갈래로 분류하는데 첫 번째로 Foreground queue이고 두 번째로 Background queue가 있다. Foreground queue에는 Interactive한 job들이 줄을 서고 Background queue에는 batch job – no human interaction job들이 줄을 선다.
Multi-level Queue 스케줄링에서는 큐 내부에 프로세스 우선순위가 아니라 큐의 우선순위를 결정한다. 즉, ‘큐에 대한 스케줄링’이 필요하다는 것을 의미한다.
1. 첫 번째 방법으로 Foreground queue의 우선순위를 극단적으로 높여서 CPU로 하여금 foreground queue가 비지 않는 이상 background queue가 CPU를 점유하지 못하게 통제할 수도 있는 것이다. 이것을 Fixed priority scheduling이라고 한다. 다만 이 경우 background job의 경우 SRTF에서 나타났던 문제와 비슷하게 starvation의 문제가 발생할 수 있다.
2. 두 번째로는 각 큐에 적절한 가중치를 주어서, 예를 들어 80%는 foreground job에 할당하고 20%는 background job에 스케줄링하는 것이다. 이 방법을 Time slice scheduling이라고 한다.
추가적으로 각 큐는 독립적인 스케줄링 알고리즘을 적용한다. 지난 시간에 스케줄링 알고리즘에 대해서 설명할 때 특히 interactive job들은 RR 스케줄링에서 가장 높은 효용성(high responsiveness)을 기대할 수 있다고 말했다. 반면 CPU bound job들은 문맥 교환의 overhead가 적은 것이 좋으므로 한 번에 처리할 수 있는 만큼을 모두 처리하는 것이 좋을 것이다. 따라서 foreground queue에는 RR 스케줄링을 적용하며 background job에는 FCFS 스케줄링을 적용한다. 다만 Multi-level Queue에서는 큐 간의 프로세스 이동, 그러니까 쉽게 말해 프로세스의 신분 이동을 금지한다.
방금 전 Multi-level Queue와 마찬가지로 여러 큐가 존재하는데 위와는 달리 신분 이동이 가능하다. 프로세스가 다른 큐로 이동하는 것이 가능하다는 것이다. Aging을 이 방식으로 구현 가능하기 때문에 starvation problem을 해결할 수 있다. 아무튼 Multilevel-feedback-queue도 큐가 여러 개이며 이렇게 큐를 멀티 레벨로 나누어야 하기 때문에 나누는 데에 필요한 여러 파라미터가 있다.
1. 큐의 수
2. 각 큐의 스케줄링 알고리즘
3. 프로세스를 상위 큐로 보내는 기준
4. 프로세스를 하위 큐로 보내는 기준
5. 프로세스가 CPU를 사용하려고 할 때 들어갈 큐를 결정하는 기준이 있다.
다음 예시는 Multilevel feedback queue의 구현 중 한 예시이다.
첫 번째 큐에는 할당 시간이 8인 프로세스들의 큐이다. 8 time unit이 지났을 때 CPU burst time이 남아있지 않다면 상관없지만, 만약 남아있다면 어떻게 될까? 다음 우선순위를 갖는 할당 시간 16인 프로세스들의 큐로 신분이 내려간다. 만약 16 time unit동안 지났음에도 CPU burst time이 남아있다면 FCFS 스케줄링을 사용하는 큐로 신분이 다시 하락하게 된다. 다만 여기서는 위의 파라미터 중 3번 프로세스를 상위 큐로 보내는 기준이 존재하지 않는 예시일 뿐이며 Multilevel feedback queue가 반드시 이렇게 구현되어야 하는 것은 아니다.
Q0 = RR(짧은) 스케줄링 사용
Q1 = RR(긴) 스케줄링 사용
Q2 = FCFS 스케줄링 사용
1. CPU들이 모두 Homogeneous(동종의) processor인 경우
2. Load sharing (Load Balancing)
3. Symmetric Multiprocessing(SMP)
4. Asymmertric Multiprocessing(ASMP)
우리가 일반적으로 쓰는 컴퓨터는 Real-time이 아니다. Real-time job은 주어진 deadline이 있고 반드시 이 시간 안에 처리가 되어야 하는 것을 말한다. 그런 상황에서의 스케줄링을 말한다. 이전에 했던 time-sharing OS에서 처럼 프로세스를 최대한 빠르게 처리해야 하는 문제가 아니다.
Hard real-time systems
Soft real-time systems
Local Scheduling (User thread)
Global Scheduling (Kernel thread)
1. Queueing models
2. Implementation (구현) & Measurement (성능 측정)
3. Simulation(모의 실험)