여러개의 프로그램이 실행될 때 해결해야되는 이슈가 발생.
이러한 이슈들을 해결하는 작업이 바로 CPU 스케줄링이다. 즉, 어떤 프로세스에게 얼마 동안 CPU를 할당할지 결정하는 작업이라고 할 수 있다.
CPU burst
프로그램 실행중에 연속적으로 CPU를 사용하는 단절된 구간이다. (스케줄링의 단위)
.
I/O burst
프로그램 실행중에 I/O작업이 끝날때까지 block되는 구간이다.
프로세스의 종류에 따라 CPU burst / I/O burst의 빈도와 길이가 다르다. 이러한 특성에 따라 프로세스를 다음의 두 가지로 나눌 수 있다.
✨ I/O bound process
✨ CPU bound process
** 여러 종류의 job(=process)이 섞여 있기 때문에 CPU 스케쥴링이 필요하다
✨ CPU Scheduler
✨ Dispatcher
→ CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있
는 경우이다
1. Running → Blocked (예: I/O 요청하는 시스템 골)
2. Running → Ready (예: 할당 시간만료로 timer interrupt)
3. Blocked → Ready (예: I/O 완료후 인터럽트)
4. Terminate
🏴 1, 4에서의 스케줄링은 nonpreemptive (=강제로 빼앗지 않고 자진 반납)
"All other scheduling is preemptive (=강제로 빼앗음)
: Performance Index(=Performance Measure, 성능척도)
→ 제한된 시간 내에 최대한 많은 프로세스를 처리 (‘작업량’이 관건)
✨CPU utilization (이용률)
✨Throughput (처리량)
네트워크에서의 처리량은 단위 시간당 전송한 양을 의미
→ CPU를 최대한 빨리 얻어서 빨리 실행 (‘시간’이 관건)
✨Turnaround time (소요시간, 반환시간)
✨Waiting time (대기 시간)
✨Response time (응답시간)
Process | Burst Time |
---|---|
P1 | 24 |
P2 | 3 |
P3 | 3 |
도착 순서 : P1 → P2 → P3
Waiting time P1 = 0, P2 = 24, P3 = 27
Average waiting time = (0 + 24 + 27) / 3 = 17
도착 순서 : P2 → P3 → P1
Waiting time P1 = 6, P2 = 0, P3 = 3
Average waiting time = (6 + 0 + 3) / 3 = 3
💡 Case1 보다 Case2가 훨씬 효율적이다. 문제는 순서가 어떻게 올지는 모른다.
✨ Convoy Effect (콘보이 현상)
🏴 Short process가 long process의 뒤에서 오래 기다리는 현상을 콘보이 현상이라 한다
✨ Two schemes:
Non-Preemptive
✓ 일단 CPU를 잡으면 이번 CPU burst가 완료될 때까지 CPU를 선점(preemption) 당하지 않음
Preemptive
✓ 현재 수행중인 프로세스의 남은 burst time 보다 더 짧은 CPU burst time을 가지는 새로운 프로세스가 도착하면 CPU를 빼앗김.
✓ 이 방법을 Shortest-Remaining-Time-First(SRTF)이라고도 부른다
✨ SJF is optimal(최적화)
주어진 프로세스들에 대해 minimum average waiting time을 보장
Process | Arrival Time | Burst Time |
---|---|---|
P1 | 0.0 | 7 |
P2 | 2.0 | 4 |
P3 | 4.0 | 1 |
P4 | 5.0 | 4 |
Waiting time : P1 = 0 , P2 = 6 , P3 = 3, P4 = 7
Average waiting time : (0 + 6 + 3 + 7 ) / 4 = 4
Waiting time : P1 = 9, P2 = 1, P3 = 0, P4 = 2
Average waiting time : (9 + 1 + 0 + 2)/4 = 3
📌 예측 식
τ = 예측 버스트 시간
t = 실제 버스트 시간
α = 가중치
💡 최근 데이터일수록 더 큰 비중으로 반영하고 오래된 데이터 일수록 적은 비중으로 반영하는 특성이 있다. (알파가 0<= α <=1 사이이기 때문에)
📌 위의 식을 풀어보게 되면
τ(n+1) = α * t(n) + (1 - α) * τ(n)
이제 이전 공식에서 τ(n)을 확장해 보겠습니다.
τ(n) = α * t(n-1) + (1 - α) * τ(n-1)
이제 두 번째 방정식의 τ(n)을 첫 번째 방정식으로 대체하십시오.
τ(n+1) = α * t(n) + (1 - α) * [α * t(n-1) + (1 - α) * τ(n-1)]
→ τ(n+1) = α * t(n) + (1 - α) * α * t(n-1) + (1 - α)^2 * τ(n-1)
이 프로세스를 계속하면 수식을 재귀적으로 계속 확장할 수 있습니다.
✨ 프로세스마다 적절한 우선순위를 부여하여 우선순위가 높은 프로세스부터 실행하는 알고리즘
✨ 우선순위는 프로세스 생성 시에 사용자에 의해 지정되기도 하고 운영체제에서 내부적으로 메모리 용량이나 실행 시간 등을 기준으로 하여 결정하기도 한다.
✨ highest priority를 가진 프로세스에게 CPU 할당
(smallest integer = highest priority).
✨ SJF는 일종의 priority scheduling이다
✨ 실제 CPU 스케쥴링에서 가장 많이사용는 방법의 근간이 되는 알고리즘
✨ 각 프로세스는 동일한 크기의 할당 시간(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
Process | Burst Time |
---|---|
P1 | 53 |
P2 | 17 |
P3 | 68 |
P4 | 24 |
💡 일반적으로 SJF보다 average turnaround time이 길지만 response time(응답시간)은 더 짧다
✨ Ready queue를 프로세스의 특성에 따라 여러 레벨로 분할
✨ 각 큐는 독립적인 스케줄링 알고리즘을 가짐
✨ 큐에 대한 스케줄링이 필요
💡 Starvation이 발생할 수 있다.
Why? → 프로세스가 다른 Queue로 이동하지 못하기 때문
✨ 프로세스가 다른 큐로 이동 가능
✨ 에이징(aging)을 이와 같은 방식(큐 이동)으로 구현할 수 있다
✨Multilevel-feedback-queue scheduler를 정의하는 파라미터들
Three queues:
Scheduling
(이 환경에서 다루는 것은 CPU가 하나인 상황이다. 멀티 CPU에 대한것은 살펴만 본다)
✨ CPU가 여러 개인 경우 스케줄링은 더욱 복잡해짐
✨ Homogeneous processor인 경우
✨ Load sharing
✨ Symmetric Multiprocessing (SMP)
✨ Asymmetric multiprocessing
(우리가 일반적으로 사용하는 컴퓨터는 Real-Time이 아니다. Real-Time 컴퓨터에 대한 스케줄링)
✨ Hard real-time systems
✨ Soft real-time computing
✨ Local Scheduling
✨ Global Scheduling
✨ Queueing models
✨ Implementation (구현) & Measurement (성능 측정)
✨ Simulation (모의 실험)