CPU Scheduling Algorithm
CPU 스케줄링 알고리즘
•
FCFS : first come first served
•
SJF : shortest job first
•
SRTF : shortest remaining time first
•
Priority Scheduling
•
RR : round robin
•
Multilevel Queue
•
Multilevel Feedback Queue
•
Multiple-Processor Scheduling
•
Real-time scheduling
•
thread scheduling
FCFS : first come first served
•
프로세스의 도착 순서대로 스케줄링된다.
•
단점은 짧은 수행시간을 가진 프로세스라도 늦게 도착하면 오랜 시간을 대기해야한다는 것이다.
SJF : shortest job first
•
각 프로세스의 다음번 CPU burst time 을 가지고 스케줄링에 활용한다.
•
CPU burst time 이 가장 짧은 프로세스를 제일 먼저 스케줄한다.
•
종류
◦
non-preemptive
▪
일단 CPU 를 잡으면 이번 CPU burst 가 완료될 때까지 CPU 를 선점당하지 않는다.
◦
preemptive
▪
현재 수행중인 프로세스의 남은 burst time 보다 더 짧은 CPU burst time 을 가지는 새로운 프로세스가 도착하면, CPU 빼앗긴다.
▪
이 방법을 SRTF 하고 한다. → SRTF : shortest remaining time first
•
optimal
◦
주어진 프로세스들에 대해서 minimum average waiting time 을 보장한다.
•
다음 CPU burst time은 어떻게 알 수 있는가?
◦
추정만 가능하다.
◦
과거의 CPU burst time 을 이용해서 추정한다.
Priority Scheduling
•
우선순위 번호가 각 프로세스에게 할당된다.
•
가장 높은 우선순위를 가진 프로세스에게 CPU 를 할당한다.
•
smallest integer = highest priority
◦
preemptive
◦
nonpreemptive
•
SJF 는 일종의 priority scheduling 이라고 할 수 있다.
◦
priority = predicted next CPU burst time
•
문제점
◦
starvation : 낮은 우선순위를 가진 프로세스들은 아마 시작도 못해볼 것이다.
•
해결책
◦
aging : 대기 시간이 흐를수록 우선순위를 높여주는 방법
RR : round robin
•
각 프로세스는 동일한 크기의 할당시간 time quantum 을 가진다. 일반적으로는 10-100 milliseconds.
•
할당 시간이 지나면 프로세스는 선점 preempted 당하고, ready queue 의 제일 뒤에 가서 다시 줄을 선다.
•
n개의 프로세스가 ready queue에 있고 할당 시간이 q time unit 인 경우, 각 프로세스는 최대 q time unit 단위로 CPU 시간의 1/n 을 얻는다.
•
어떤 프로세스도 (n-1)q time unit 이상 기다리지 않는다.
•
퍼포먼스
◦
q large → FCFS
◦
q small → context switch 오버헤드가 커진다.
•
할당 시간이 넘어가서 다시 queue의 제일 뒤로 가야할 때, 다시 마지막 시점부터 정확하게 시작할 수 있다면, 굉장히 효과적인 방법이 될 수 있다.
Multilevel Queue
•
ready queue 를 여러개로 분할한다.
◦
foreground - interactive
◦
background - batch, no human interaction
•
각 큐는 독립적인 스케줄링 알고리즘을 가진다.
◦
foreground - RR
◦
background - FCFS
•
큐에 대한 스케줄링이 필요
◦
fixed priority scheduling
▪
foreground 를 항상 먼저 serve 하고 background 를 나중에 하는 방법
▪
단점 : background 는 오랜 시간 대기해야한다.
◦
time slice
▪
각 큐에 CPU time 을 적적한 비율로 할당한다.
▪
foreground : 80%, RR
▪
background : 20%, FCFS
•
줄마다 우선순위가 다르다.
•
우선순위대로 나열하자면 다음과 같다.
◦
system → interactive → interactive editing → batch → student
Multilevel Feedback Queue
•
프로세스가 다른 큐로 이동이 가능하다.
•
에이징을 이와 같은 방식으로 구현할 수 있다.
•
multilevel feedback queue scheduler 를 정의하는 파라미터들
◦
queue 의 수
◦
각 큐의 scheduling algorithm
◦
process 를 상위 큐로 보내는 기준
◦
process 를 하위 큐로 내쫗는 기준
◦
프로세스가 CPU 서비스를 받으려 할 때 들어갈 큐를 결정하는 기준
•
보통은 처음 들어오는 프로세스를 첫 queue 에 할당하고 밑으로 갈수록 시간을 길게 둔다.
◦
CPU 이용 시간이 짧은 프로세스는 첫줄에 들어와서 바로 끝날 수 있도록하고
◦
이용 시간이 길수록 낮은 queue 로 이동하여 좀 더 기다리도록 한다.
◦
CPU 버스트가 짧은 프로세스에게 운영시간을 많이 주는 방식이다.
•
스케줄링
◦
새로운 job은 제일 윗쪽 queue, Q0에 들어가게 된다.
◦
CPU 를 잡아서 할당시간 8 millisec 안에 수행된다.
◦
할당 시간안에 다 끝내지 못했다면, 그 아래 queue 로 내려간다.
◦
Q1에 줄서서 기다렸다가 CPU 를 잡아서 16ms 동안 수행이 되고
◦
그 안에도 다 못끝냈다면 Q2로 쫓겨난다.
Multiple-Processor Scheduling
•
cpu 가 여러개인 경우, 스케줄링은 더욱 복잡해진다.
•
homogeneous processor
◦
queue에 한줄로 세워서 각 프로세서가 알아서 꺼내가게 할 수 있다.
◦
반드시 특정 프로세서에서 수행되어야 하는 프로세스가 있는 경우에는 문제가 더욱 복잡해진다.
•
load sharing
◦
일부 프로세서에 job 이 몰리지 않도록 부하를 적절히 공유하는 메커니즘이 필요하다.
◦
별개의 큐를 두는 방법 vs. 공동 큐를 사용하는 방법
•
symmetric multiprocessing, SMP
◦
각 프로세서가 각자 알아서 스케줄링 결정
•
asymmetric multiprocessing
◦
하나의 프로세서가 시스템 데이터의 접근과 공유를 책임지고 나머지 프로세서는 거기에 따른다.
◦
CPU가 여러개이고, 하나의 CPU가 책임을 진다.
Real-time scheduling
•
hard real time systems
◦
정해진 시간안에 반드시 끝내도록 스케줄링해야한다.
◦
보통 periodical 하게 수행되는 경우가 많다.
•
soft real time systems
◦
일반 프로세스에 비해 높은 priority를 갖도록 해야한다.
Thread scheduling
•
local scheduling
◦
user level thread
◦
운영체제가 thread의 존재를 모름
◦
사용자 수준의 thread library에 의해 어떤 thread를 스케줄할지를 결정한다.
•
global scheduling
◦
kernel level thread
◦
운영체제가 thread의 존재를 알고 있음
◦
일반 프로세스와 마찬가지로 커널의 단기 스케줄러가 어떤 thread를 스케줄할지 결정한다.
그렇다면, 어떤 알고리즘이 가장 적절할까?
Algorithm Evaluation
•
queueing models
◦
확률 분포로 주어지는 arrival rate와 service rate 등을 통해 각종 performance index 값을 계산한다.
•
implementation & measurement
◦
실제 시스템에 알고리즘을 구현하여 실제 작업에 대해서 성능을 측정 비교한다.
◦
하지만 이 방법은 수행하기에 어렵다.
•
simulation
◦
알고리즘을 모의 프로그램으로 작성 후, trace(시뮬레이션 프로그램에 input으로 들어갈 데이터)를 입력으로 하여 결과를 비교한다.