Basic Concepts
- Resource는 두가지 종류로 나눌 수 있음
- Preemptible Resource : 한 Process가 점유한 상태에서 다른 Process에게 양보할 수 있는 자원 (ex. Main memory)
- Non-Preemptible Resource : 한 Process가 점유하면 사용을 마칠 때 까지 다른 Process에게 양보할 수 없는 자원 (ex. Printer)
- Resource allocation의 2가지 문제 :
- 여러 Process가 한 Resource를 잡을려고 할 때 누구한테 줄것인가?
- 일단 한 Process가 한 Resource를 잡으면 게한테 얼마만큼 오래 Resource를 부여해줄까?
- Resource allocation 문제에 대한 의사결정이 시스템의 성능에 큰 영향을 미침
CPU Burst
- Job Process
- Batch Monitor에서의 Job : 한번 수행이 시작되면 완료될 때 까지 계속 수행되는 작업
- Process : 끝나지 않은 Job들이 여러개 있음
-
CPU Burst : Program의 수행 중에 연속적으로 CPU를 사용하는 단절된 구간
- CPU Burst가 Scheduling의 단위가 됨
-
I/O Burst : Program의 수행 중의 I/O의 완료를 기다리며 Block되는 구간
-
CPU Burst의 Size : 이 Size에 따라서 Scheduling 기법이 달라진다
- CPU Burst의 Size가 큰 것 : 과학 기술의 연산
- CPU Burst의 Size가 작은 것 : I/O Interactive 한 것
CPU Scheduler
- CPU Scheduler가 결정하는 작업 :
- 어떤 이유에선가 현재 Process가 수행을 더 이상 하지 않아야될 때, 다음에 어떤 Process에게 CPU를 줄까를 결정하는 작업
- 그 Process가 CPU를 할당 받으면 얼마나 오래동안 수행할 것인가를 결정하는 작업
-
CPU Scheduler는 언제 일어나나?
- Ready ➡️ Running : Dispatcher가 돌아서 상태 변환
- Running ➡️ Ready : Hardware Interrupt가 걸려서 Scheduler가 개입되고 강제로 CPU를 뺏음
- Running ➡️ Waiting : Non-Preemptive scheduling
- Running ➡️ Terminated : Non-Preemptive scheduling
- Waiting ➡️ Ready : 어떤 Process가 Waiting에서 Ready로 갈려면 Asynchronous 이벤트가 발생해야된다. Asynchronous 이벤트는 Preemptive scheduling을 촉발하는 것이다.
- scheduling는 Process state transition에서 state transition를 촉발하는 행위들이다
Scheduling Policies
-
Scheduling을 통해서 성취하고자 하는 것들 :
-
Resource Utilization을 극대화
- Utilization : 어떤 Resource가 존재하면 전체 컴퓨터 Up time중에 얼마 만큼의 시간동안 의미있는 수행을 했느냐를 나타냄
-
Overhead를 최소화 시키기
- 즉, OS가 참여하는데 Code양이 적어야된다
-
Context switching를 최소화 시키기
- 빈번하게 Scheduler가 뜨게되면 context switching이 많아지게 됨
-
Fairness
-
CPU time을 여러 Process에게 골고루 나눠줘야됨
-
Fairness는 상황에 따라 달라짐 :
💁🏻 범용 System에서 Fairness :
- 1/n 의 Share
💁🏻 우선순위 기반 System에서 Fairness :
- 높은 우선순위의 Process에게 CPU를 주는 것이 Fair함
- 어떤 경우에는 Fair하지만 방치하게 되면 문제가 생김
- 해결방법 : Aging - Task가 CPU를 기다리는 시간에 비례하여 우선순위를 점차적으로 높이는 기법
-
-
-
Metric들 :
- waiting time MIN
- response time MIN
- response time에 민감한 Application : User Interactive한 Application, Foreground App
- turnaround time MIN
- throughput MAX
- throughput : 단위시간에 컴퓨터 시스템이 수행을 종료시키는 Process의 개수
- throughput에 민감한 Application : CPU intensive한 것
- 현대 OS는 throughput과 response time의 Balance를 맞추는 것이 중요한 문제
Scheduling 기법들
-
First In First Out (FIFO)
- 먼저 들어온놈 먼저 처리
-
CPU Burst 단위로 FIFO : 한 Process가 I/O를 할 때 까지 CPU를 점유함
-
장점 :
- 단순하고 직관적임
-
단점 :
-
CPU를 독점할 수 있음 (ex. 어떤 Process의 CPU Burst안에 무한 loop가 존재 할 경우)
💁🏻 해결 방안 : Timer register 사용
-
-
FIFO에서 가장 최적의 Waiting time을 가질 수 있는 방법 :
- scheduling sequence가 shortest job first 를 따르게 계속 순서를 바꿈
-
Shortest Job First
-
Shortest Job First는 Optimal algorithm
-
Shortest job first를 할 경우의 문제점 : OS가 Task의 남은 CPU Burst Size를 예측할 수 없음
-
Preemptive Shortest Job First :
- 현재는 가장 짧은 CPU Burst Size의 process을 수행하고 있는데 새로운 CPU Burst Size가 더 짧은 process가 왔을 경우 rescheduling 하게됨
- a.k.a Shortest-Remaining-Time-First (SRTF)
-
Non-Preemptive Shortest Job First :
- 존재하지 않는 알고리즘
- 우리가 CPU Burst Size를 다 안다는 가정 하의 알고리즘
-
CPU Burst Size를 예측하는 방법 :
-
Exponential averaging :
🔺 a = 0로 설정 할 경우, 과거의 approximation 값만 고려, 최근 history는 고려 ❌
🔺 a = 1로 설정 할 경우, 바로 지난 번의 Burst Size를 이번의 Burst Size로 받아드리겠다
🔺 0<a<1 의 값을 통해서 최근 history와 지난 번의 예측한 값의 비율을 결정할 수 있음
🔺 a의 설정이 케바케이기 때문에 실제 OS에 적용시키긴 어려움
-
-
-
Round Robin
-
FIFO로 scheduling을 하되 Time out 값을 둔다
- 자기의 CPU Burst Size가 Time out 값보다 크면 수행을 강제로 종료 당하고 Ready Queue 가장 뒤로 간다
-
Round Robin 문제 :
- Time out 값을 얼마로 둘것인지?
- Time Slice (Time Quantum) : Task에게 CPU가 할당된 후 다음 schduling을 위한 timer interrupt가 발생할 때 까지의 시간
-
Round Robin이 FIFO보다 항상 성능이 좋은 건 아니다
- FIFO == Round Robin ( Time Quantum = ∞ms )
-
CPU Bound Process : 대부분 시간을 CPU 연산을 하면서 보내는 Process
- CPU Utilization 과 Thoughtput 이 높을 수록 좋음
-
I/O Bound Process : 대부분 시간을 I/O를 보낸 다음 waiting 하면서 보내고 실제 CPU 연산 시간을 짧게가지는 Process
- Response time이 짧을 수록 좋음
-
Example.
Process No Characteristic 1 - 1ms 동안 CPU연산 한 다음 I/O 유발시켜서 10ms동안 노는 Process
- I/O Bound Process2 - I/O 없이 CPU연산만 하는 Process
- CPU Bound ProcessSenario 1 : Round Robin ( Time Quantum = 100ms )
-
Process 1가 먼저 수행 할 경우
Senario 2 : Round Robin ( Time Quantum = 1ms )
-
Process 1가 먼저 수행 할 경우
💁🏻 CPU Utilization 과 I/O Utilization을 모두 고려해서 볼 때 Senario 2가 좋음
💁🏻 Process 1입장에서는 Senario 2처럼 time slice가 적은 것이 좋지만 Process 2한테 있어서는 Penalty가 있음 ( Overhead 문제 : Process 2의 time slice boundary 마다 time interrupt가 발생해서 interrupt service routine이 돌게된다 )
💁🏻 결과적으로 두 Senario 모두가 우리가 원치않는 모습들을 가지고 있다
💁🏻 그럼 이 문제의 극복하기 위해선
🔺 CPU Bound Process 한테는 긴 Time Quantum를 주고
🔺 I/O Bound Process 한테는 짧은 Time Quantum를 주고 우선순위를 높여준다
-
-
-
Multi-level Feedback Queue
-
Adaptive Scheduling :
- Workload(즉, process)의 특성에 따라 Time Quantum의 크기를 동적으로 바꿔주는Scheduling 기법
- Process별로 Process의 특징에 따라서 Scheduling방식에 변화를 줄 수 있음
-
Multi-level Feedback Queue : Run Queue가 Multi-level로 되어있음
-
가장 위에 있는 Queue는 우선순위가 높고 Time Quantum는 짧음
-
밑의 level Queue일 수록 우선순위는 낮고 Time Quantum는 길다
-
새로운 Process가 생성이 되면, 그 Process는 무조건 가장 우선순위 높은 Queue에 들어가 Round Robin을 한다
-
그런데 Round Robin하다가 자기의 Time Quantum보다 더 빨리 끝났으면 그 Queue에 머물러 있고 그렇지 않으면 밑에 level의 Queue로 강등하게됨
-
-
-
Fair Share Scheduling
- a.k.a Bandwidth Scheduling, Proportional Share Scheduling
- 대기 중인 Process들에게 정해진 비율에 따라 CPU의 Bandwidth를 분배하는 Scheduling 기법
- 최근에는 1/n Scheduling도 아니고 우선순위 Scheduling도 아닌 Bandwidth Scheduling이 부각하기 시작함
- Performance isolation 할 때도 Bandwidth Scheduling이 필요함
- Performance isolation : CPU를 많이 차지할 꺼 같은 APP이 들어왔을 때 그 APP의 영향을 격리시키는 것
- Linux에는 CFS (Completely Fair Scheduler)이라하는 Bandwidth Scheduling Algorithm이 포함되어 있음
《Reference》