CPU Scheduling
CPU-burst Time의 분포

여러 종류의 job(process)이 섞여 있기 때문에 CPU 스케줄링이 필요하다
- Interative job에게 적절한 response 제공 요망
- CPU와 I/O장치 등 시스템 자원을 골고루 효율적으로 사용
프로세스의 특성 분류
- I/O-bound process
- CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job
- many short CPU bursts
- CPU-bound process
- 계산 위주의 job
- few very long CPU bursts
CPU Schduler & Dispatcher
- CPU Scheculer
- Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다
- Dispatcher
- CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘긴다
- 이 과정을 context switch라고 한다
- CPU 스케줄링이 필요한 경우
- Running → Blocked(ex: I/O요청하는 시스템 콜)
- Running → Ready(ex: 할당시간만료로 time Interrupt)
- Blocked → Ready(ex: I/O완료 후 Interrupt)
- Terminate
비선점:Non-preemptive(=강제로 빼앗지 않고 자진 반납)
선점:preemptive(=강제로 빼앗음)
Scheduling Crieria(성능 척도)
시스템 입장에서 CPU 성능척도
CPU Scheduling
FCFS(First-Come First-Served)
프로세스 도착 순서대로 처리(비선점형 nonpreemptive)

※ 문제점
Convoy effect : short process behind long process
앞에 긴 프로세스가 존재하여 뒤에 짧은 프로세스가 처리되지 못하는 현상
SJF(Shortest-Job-First)
- 각 프로세스와 다음번 CPU burst time을 가지고 스케쥴링에 활용
- CPU burst time이 가장 짧은 프로세스를 제일 먼저 스케쥴
1) Non-preemptive
CPU를 잡으면 이번 CPU burst가 완료될 때까지 CPU를 뺏기지 않음

2) Preemptive
현재 수행중인 프로세스의 남은 burst time보다 더 짧은 CPU burst time 을 가지는 새로운 프로세스가 도착하면 CPU를 빼앗긴다. 이를 SRTF(Shortest-Remaining-Time-First)라고 부른다.

- SJF is optimal(최적화) : 주어진 프로세스에 대해 minimum average waiting time을 보장
※ CPU Burst Time의 예측
- 다음번 CPU burst time 은 추정(estimate)만 가능
- 과거의 CPU burst time 을 이용해서 추정 (exponential averaging)
Priority Scheduling
- A priority number(integer) is associated with each process
- (smallest integer = highest priority) 가장 높은 우선수위를 가진 프로세스에게 CPU 할당
- SJF 는 일종의 priority scheduling
※ 문제점
Starvation(기아현상)
- low priority processes may never execute. (낮은 우선순위 프로세스가 영원히 CPU를 얻지 못하는 것)
※ 해결책
Aging(노화)
- as time progresses increase the priority of the process (시간이 지나면 우선순위를 올려주는 것)
RR(Round Robin)
- 각 프로세스는 동일한 크기의 을 가진다 (일반적으로 10-100milliseconds) 할당 시간(time quantum)
- 할당 시간이 지나면 프로세스는 선점(preempted) 당하고 ready queue와 제일 뒤에 가서 다시 줄을 선다
- n 개의 프로세스가 ready queue에 있고 할당 시간이 q time unit 인 경우 각 프로세스는 최대 q time unit 단위로 CPU 시간의 1/n을 얻는다 (어떤 프로세스도 (n-1)q time unit 이상을 기다리지 않는다)
※ 장점
1) 응답시간이 빠르다.
2) CPU가 길게 필요하면 길게 기다리고, 짧게 필요하면 짧게 기다린다. (짧은 프로세스는 빨리 나가고 긴 프로세스는 많이 기다리게 되므로 프로세스의 waiting time 과 turnaround time이 비례)
※ 할당시간에 따른 차이
- time quamtum large (할당시간이 길다면) => FCFS
- time quamtum small (할당시간이 짧다면)=> context switch 오버헤드가 커진다.
Multilevel Queue
Queue가 여러줄이며 우선순위가 높은 큐의 프로세스가 CPU 우선권을 가진다

- Ready queue를 여러개로 분할
- foreground (interactive(IO))
- background(batch - no human interaction)
- 각 큐는 독립적인 스케쥴링 알고리즘을 가진다
- foreground - RR (빠른 응답속도)
- background - FCFS
- 큐에 대한 스케쥴링 필요
- Fixed priority scheduling : starvation 문제
- Time slice : 각 큐에 CPU time을 적절한 비유로 할당한다
- Eg. 80% to foreground in RR, 20% to background in FCFS
Multilevel Feedback Queue

- 프로세스 처리가 끝나면 바로 나감, 처리가 끝나지 못하면 두번째 큐로 이동, 또 처리가 되지 못했다면 맨 밑의 큐로 이동
- 처리가 짧은 프로세스에게 우선권을 먼저 준다
※ Multiple-Processor Scheduling
CPU가 여러개인 경우
1) Homogeneous processor 인 경우
- Queue에 한 줄로 세워서 각 프로세서가 알아서 꺼내가도록
- 반드시 특정 프로세서에서 수행되어야 하는 프로세스가 있는 경우 문제가 복잡해진다
2) Load sharing
- 일부 프로세서에 job이 몰리지 않도록 부하를 적절히 공유하는 메커니즘 필요
- 별개의 큐를 두는 방법 vs. 공동 큐를 사용하는 방법
3) Symmetric Multiprocessing(SMP)
4) Asymmetric multiprocessing
- 하나의 프로세서가 시스템 데이터의 접근과 공유를 책임지고 나머지 프로세서는 거기에 따름
※ Real-Time Scheduling
1) Hard real-time systems : 정해진 시간안에 반드시 끝내도록 스케쥴링
2) Soft real-time computing : 일반 프로세스에 비해 높은 우선순위를 갖도록 해야 한다
※ Thread Scheduling
1) Local Scheduling : User level thread 의 경우 사용자 수준의 thread library에 의해 어떤 thread 를 스케쥴할 지 결정
2) Global Scheduling : Kernel level thread 의 경우 일반 프로세스와 마찬가지로 커널의 단기 스케쥴러가 어떤 thread 스케쥴할지 결정
※ Algoritm Evaluation 알고리즘 평가방법
1) Queueing models
- 확률 분포로 주어지는 arrival rate와 service rate 등은 통해 각종 performance index 값을 계산

2) Implementation (구현) & Measurement (성능 측정)
- 실제 시스템에 알고리즘을 구현하여 실제 작업(workload)에 대해서 성능을 측정 비교
3) Simulation (모의 실험)
- 알고리즘을 모의 프로그램으로 작성 후 trace를 입력하여 결과 비교
참고