본 글은 다음 강의를 들으며 정리한 내용입니다.
강의 정보 : 운영체제 / 이화여대 반효경
강의 링크
여러 종류의 job(=process)이 섞여 있기 때문에 CPU 스케줄링이 필요하다.
Interactive job에게 적절한 response 제공 요망
CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용
프로세스는 그 특성에 따라 다음 두 가지로 나눔
I/O-bound process
CPU-bound process
CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘긴다.
이 과정을 context switch(문맥 교환)라고 한다.
CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우이다.
1, 4에서의 스케줄링은 nonpreemptive (비선점형) (=강제로 빼앗지 않고 자진 반납)
2, 3에서의 스케줄링은 preemptive (선점형) (=강제로 빼앗음)
CPU utilization (이용률)
Throughput (처리량)
#
of processess that complete their execution per time unit위 2개는 시스템 입장에서의 성능 척도
Turnaround time (소요 시간, 반환 시간)
Waiting time (대기 시간)
Response time (응답 시간)
위 3개는 프로세스(고객) 입장에서의 성능 척도
FCFS (First-Come-First-Served)
SJF (Shortest-Job-First)
SRTF (Shortest-Remaining-Time-First)
Priority Scheduling
RR (Round Robin)
Multilevel Queue
Multilevel Feedback Queue
FCFS 는 비선점형 스케줄링
Example 1 :
Process | Burst Time |
---|---|
P1 | 24 |
P2 | 3 |
P3 | 3 |
프로세스의 도착 순서 : P1, P2, P3
Waiting time for P1 = 0; P2 = 24; P3 = 27
Average waiting time : (0 + 24 + 27) / 3 = 17
그리 효율적이진 않음
Example 2 :
프로세스의 도착 순서 : P2, P3, P1
Waiting time for P1 = 6; P2 = 0; P3 = 3
Average waiting time : (6 + 0 + 3) / 3 = 3
Much better than previous case
Convoy effect : short process behind long process (짧은 프로세스들이 지나치게 오래 기다려야 하는 현상)
각 프로세스의 다음번 CPU burst time을 가지고 스케줄링에 활용
CPU burst time이 가장 짧은 프로세스를 제일 먼저 스케줄
Two schemes
Nonpreemptive
Preemptive
SJF is optimal
Example of Non-Preemptive SJF :
Process | Arrival Time | Burst Time |
---|---|---|
P1 | 0 | 7 |
P2 | 2 | 4 |
P3 | 4 | 1 |
P4 | 5 | 4 |
프로세스의 도착 순서 : P1, P2, P3, P4
Waiting time for P1 = 0; P2 = 6; P3 = 3; P4 = 7
Average waiting time : (0 + 6 + 3 + 7) / 4 = 4
Example of Preemptive SJF :
Waiting time for P1 = 9; P2 = 1; P3 = 0; P4 = 2
Average waiting time : (9 + 1 + 0 + 2) / 4 = 3
A priority number (integer) is associated with each process
highest priority를 가진 프로세스에게 CPU 할당 (smallest integer = highest priority)
SJF는 일종의 priority scheduling이다.
Problem (SJF의 문제점)
Solution
다음번 CPU burst time을 어떻게 알 수 있는가? (영향을 주는 요소로 input data, branch, user...)
추정(estimate)만이 가능하다.
과거의 CPU burst time을 이용해서 추정 (exponential averaging
)
점화식을 풀면 타우n+1은 실제로 수행된 프로세스의 CPU burst time 값들로 나타낼 수 있다.
현대적인 컴퓨터 시스템에서 사용하는 CPU Scheduling
Response time(응답 시간)이 빠르다. (예측할 필요 X)
각 프로세스는 동일한 크기의 할당 시간(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 이상 기다리지 않음)
Performance (극단적인 상황)
Example : RR with Time Quantum = 20
Process | Burst Time |
---|---|
P1 | 53 |
P2 | 17 |
P3 | 68 |
P4 | 24 |
일반적으로 SJF보다 average turnaround time이 길지만 response time은 더 짧다.
CPU burst time이 모두 동일한 프로세스(특수한 경우)가 아주 짧은 time quantum으로 잘게 나뉠 경우는 average turnaround time이 너무 길어지기 때문에 비효율적일 수 있다.
Ready queue를 여러 개로 분할
각 큐는 독립적인 스케줄링 알고리즘을 가짐
큐에 대한 스케줄링이 필요
프로세스가 다른 큐로 이동 가능
Aging을 이와 같은 방식으로 구현할 수 있다.
Multilevel-feedback-queue scheduler를 정의하는 parameter들
Example of Multilevel Feedback Queue
Three queues :
Scheduling
CPU가 여러 개인 경우 스케줄링은 더욱 복잡해짐
Homogeneous processor인 경우
Load sharing
Symmetric Multiprocessing (SMP)
Asymmetric Multiprocessing
Hard real-time systems
Soft real-time systems
Local Scheduling
Global Scheduling
Queueing models
Implementation & Measurement (구현 & 성능 측정)
Simulation (모의 실험)