Chapter 5: CPU Scheduling
과제3 https://github.com/j-nary/Process_Scheduling_Policy
Process execution cycle
nonpreemptive : 비선점
→ 간단
preemptive : 선점
→ real-time(deadline 중요)
→ 프로세스 간 데이터 공유 시, 일관성 유지 비용 발생
CPU utilization ⬆️
: CPU를 가능한 한 바쁘게 유지
Throughput ⬆️
: 단위 시간동안 처리하는 작업의 개수
Turnaround time ⬇️
: 하나의 프로세스가 시작 ~ 종료까지 걸리는 시간
→ waiting time + CPU burst + I/O burst
Waiting time ⬇️
: 하나의 프로세스가 ready queue에 대기하는 데 걸리는 시간
Response time ⬇️
: 첫번째 응답이 올 때까지의 시간
→ 사용자에게 요청 받은 순간 ~ 요청 내보내는 순간
→ real-time system에서 중요
→ trade-off 관계 : 어떤 지표에 집중해서 설계할 것인가?
FCFS 선입 선처리 스케줄링 (Non-preemptive)
SJF 최단 작업 우선 스케줄링 (Non-preemptive)
→ SRTF (Preemptive)
RR 라운드 로빈 스케줄링 (Preemptive)
우선순위 스케줄링 (both)
→ average waiting time
Non-preemptive
CPU burst가 가장 짧은 process부터
→ 한 번의 CPU를 점유하는 데 걸리는 시간
waiting time 측면에서 베스트 스케줄링
현실적으로 구현 X
CPU Burst 예측 : exponential averaging
알파값은 보통 1/2로 설정
알파 = 0 : 실측값 고려X, 처음 예측했던 거 그대로
알파 =1 : 예측값 고려 X, 실제 얻은 값만
SRTF = STCF(Shortest-time to Complete First)
→ SJF의 Preemptive 버전 (더 효율적)
CPU Time이 짧다면 양보
→ 내가 먼저면 context switching 발생 X
Example
Arrival Time 1, 2, 3 빼주는 거 잊지 말기
→ 실제 시간 차이는 적게 난다 : Context Switching 발생
Preemptive
Nonpreemptive
→ Priority Scheduler는 둘 다 가능
Time Quantum = 6
→ P4의 시스템 오버헤드가 달라짐
→ Context Switching은 없음 : 다른 애랑 바뀌어야 발생
→ Scheduling을 결정하는 시간 때문에 P4(10~17)보다 복잡도가 약간 높아짐
→ 평균 총처리 시간 : (6 + 9 + 10 + 17) / 4 = 10.5
Time Quantum = 1
→ 평균 총처리 시간 : (15 + 9 + 3 + 17) / 4 = 11.0
- SCHED_OTHER : CFS
- Real Time : FIFO, RR, Deadling
- IDLE
Priority + Round Robin 의 특성
Fair 보장을 위한 4가지 요소
nice 값(-20 ~ 19)에 따라 결정
nice 작을 수록 weight 커짐 → 우선순위 높아짐
→ 클수록 가상 실행시간 작게, 타임슬라이스 길게
개요
작동 과정
nice와 weight
가상실행시간
타임 슬라이스
Ready queue 분할
foreground (interactive)
background (batch)
- 1번 queue가 비워지면 실행
→ 각각의 queue 내부에서의 scheduling은 방법 다양하게!
장점
단점
priority scheduling 방식 → starvation 발생
→ (보완) Multilevel Feedback Queue
하나의 process가 특정 queue내에 고정 X
Multilevel Feedback Queue 예시
I/O를 요구해서 wait으로 가면 다시 Q0로
wait로 가지 않고 time slice 끝나서 쫓겨나면 Q1로
→ Q1에서도 time slice 끝나서 쫓겨나면 Q3으로
Asymmetric multiprocessing(AMP)
→ 각 프로세서가 균등하지 않은 고유한 역할을 가짐
(주 프로세서가 리소스, 메모리 관리 주로 담당)
Symmetric multiprocessing(SMP)
→ 모든 프로세서가 동등한 역할
Push migration
Pull migration
- 각각의 core마다 자신의 ready queue를 모니터링하는 processor 만들기
- 몰려있는 process를 자신 쪽으로 당겨옴
→ OS가 구현
sched_setaffinity()
주어진 deadline 내에 무조건 responds 해야하는 시스템
Soft real-time systems
→ 가급적 지켜주면 좋은 것, 큰 일은 X
Hard real-time systems
→ deadline 안 지키면 큰 일
우선순위 : Periodic(주기)의 역순
0 ≤ processing시간(t) ≤ deadline(d) ≤ periodic(p)
Rate Monotonic Scheduling
Preemptive, static scheduling
p1 : 수행시간 20 / 주기 50 → 40%
p2 : 수행시간 35 / 주기 100 → 35%
→ CPU 이용률 총 75%, p1 > p2
문제점
CPU 이용률 상한 존재
간단하게 읽어보고 넘어가기
→ 복잡할수록 평가 정확도 향상