내용 출처
KOCW 반효경 교수님 <운영체제> 강의
책 <운영체제와 정보기술의 원리>
반효경 교수님의 <운영체제> 강의 내용을 기반으로 정리했으며,
교수님의 저서 <운영체제와 정보기술의 원리>에서 추가할 만한 내용을 이와 같은 인용문 형식으로 추가함.
Add 명령 : CPU 내의 레지스터에 있는 두 값을 더해 레지스터에 저장
Load 명령 : 메모리에 있는 데이터를 CPU로 읽어들임
Store 명령 : CPU에서 계산된 결과값을 메모리에 저장
CPU Burst 그래프 | 그림 출처
여러 종류의 작업이 섞여 있기 때문에 CPU 스케줄링이 필요하다.
interactive job에게 적절한 response를 제공해야 한다.
CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용해야 한다.
I/O bound process
I/O 요청이 빈번해 CPU burst가 짧게 나타나는 프로세스
CPU bound process
I/O 작업을 거의 수행하지 않아 CPU burst가 길게 나타나는 프로세스
CPU Scheduler
Dispatcher
디스패치 지연시간 (dispatch latency)
디스패처가 하나의 프로세스를 정지시키고 다른 프로세스에게 CPU를 전달하기까지 걸리는 시간
주의) CPU 스케줄러라는 독립된 하드웨어 혹은 소프트웨어가 있는 것이 아니라, 운영체제 내에 CPU 스케줄링을 하는 코드가 있고, 이를 CPU 스케줄러라고 부르는 것이다. 디스패처도 마찬가지다.
[CPU 스케줄링이 필요한 경우]
nonpreemptive(비선점형)
CPU를 획득한 프로세스가 스스로 CPU를 반납하기 전까지는 CPU를 빼앗기지 않는 방법
preemptive(선점형)
프로세스가 CPU를 계속 사용하기를 원하더라도 강제로 빼앗을 수 있는 스케줄링 방법
(nonpreemptive/preemptive 용어는 꼭 알아둘 것!)
CPU Utilization (이용률)
전체 시간에서 CPU가 놀지 않고 일한 시간의 비율
Throughput (처리량)
주어진 시간 동안 몇 개의 작업을 완료했는가
이용률과 처리량이 높을수록 시스템 입장에서 좋은 스케줄링 알고리즘이다.
프로세스 입장에서의 성능 척도
기준 : 특정 프로세스의 시작 ~ 종료까지의 시간이 아니라
이 프로세스가 CPU를 쓰러 들어왔다가 I/O를 하러 나갈 때까지의 시간
(한 번의 CPU burst 동안)
Turnaround Time (소요 시간)
CPU를 쓰러 들어와서 다 쓰고 나갈 때까지 걸리는 시간 (기다린 시간 포함)
Waiting Time (대기 시간)
ready 큐에서 CPU를 쓰기 위해 기다린 시간 (순수하게 기다린 시간)
Response Time (응답 시간)
처음으로 CPU를 얻기까지 걸린 시간
[대기 시간 vs 응답 시간]
선점형 스케줄링에서는 CPU를 얻었다 뺏기고를 반복할 수 있다. 그렇다면 여러 차례 기다리게 될 것이다. 여러 번 기다린 시간을 모두 합친 것이 Waiting Time이고, 처음 CPU를 얻기까지 기다린 시간이 Response Time이다.
First-Come First-Served
: 먼저 온 순서대로 처리한다. (nonpreemptive)
문제점 : Convoy Effect
긴 프로세스가 먼저 와서 짧은 프로세스의 대기 시간이 길어지는 현상
Shortest-Job-First
: CPU burst time이 가장 짧은 프로세스를 가장 먼저 스케줄링한다.
2가지 방식
Nonpreemptive
일단 CPU를 잡으면 이번 CPU burst가 완료될 때까지 CPU를 선점당하지 않는다.
Preemptive
-> Shortest Remaining Time First
(SRTF)
현재 수행중인 프로세스의 남은 burst time보다 더 짧은 CPU burst time을 가지는 새로운 프로세스가 도착하면 CPU를 빼앗는다.
평균 Waiting Time을 최소화하는 최적 알고리즘이다.
문제점 1 - starvation
CPU 사용시간이 긴 프로세스는 영원히 CPU를 사용하지 못하게 될 수 있다.
문제점 2 - CPU 사용 시간을 미리 알 수 없다.
단, 과거의 CPU burst time을 통해 CPU 사용 시간을 추정할 수는 있다. 주로 exponential averaging을 사용한다. 과거의 CPU burst time을 t1, t2, t3...이라고 할 때, 가장 최근의 것일수록 더 많은 가중치를 두는 방식으로 평균을 낸다.
[exponential averaging 관련 글]
Exponential averaging for SJF CPU scheduling
highest priority를 가진 프로세스에게 우선적으로 CPU를 할당한다.
보통 우선순위가 가장 높은 프로세스를 가장 작은 정수로 표현한다.
Nonpreemptive한 방식과 Preemptive한 방식이 있다.
SJF 스케줄링도 우선순위 스케줄링의 일종이다.
(우선순위의 기준 : 예측된 CPU 사용 시간)
문제점 : starvation
해결 방법 : Aging 기법
오래 기다린 프로세스의 우선순위를 증가시키는 기법
q time unit
인 경우, 각 프로세스는 최대 q time unit
단위로 CPU 시간의 1/n을 얻는다.(n-1)q time unit
이상 기다리지 않는다.할당 시간을 너무 크게 하면 FCFS와 같아진다.
할당 시간을 너무 짧게 하면 문맥 교환의 오버헤드가 지나치게 커진다.
따라서 적당한 할당 시간을 부여해야 한다. (일반적으로 10 ~ 100 밀리초)
기다리는 시간이 CPU 사용시간에 비례한다는 점에서 공정한 스케줄링을 수행한다.
일반적으로 멀티레벨 큐에서 준비 큐는 대화형 작업을 담기 위한 전위 큐(foreground queue)와 계산 위주의 작업을 담기 위한 후위 큐(background queue)로 분할하여 운영된다. 그리고 각 큐는 독립적인 스케줄링 알고리즘을 가진다.
foreground (interactive) - RR
background (batch - no human interactive) - FCFS
큐에 대한 스케줄링 또한 필요하다.
Fixed Priority Scheduling
Time Slice
프로세스가 다른 큐로 이동 가능하다.
에이징(Aging)을 이와 같은 방식으로 구현할 수 있다.
멀티레벨 피드백 큐 스케줄러를 정의하는 파라미터들
보통은 multilevel feedback queue에서 처음 들어오는 프로세스를 우선순위가 가장 높은 큐에 넣고, 그 큐는 라운드 로빈의 할당 시간을 짧게 준다. 아래로 내려갈수록 라운드 로빈의 할당 시간을 길게 주며, 마지막 큐의 경우 FCFS 알고리즘을 사용한다.
CPU가 여러 개인 경우 스케줄링은 더욱 복잡해진다.
Homogeneous processor인 경우
Load Sharing
Symmetric Multiprocessing (SMP)
Asymmentic Multiprocessing
Local Scheduling
Global Scheduling
Queueing Models
Implementation & Measurement (구현 및 성능 측정)
Simulation(모의 실험)