CPU 스케쥴링 개요
•
일을 쉬지않고 계속 시키는 것이 OS의 숙제!
⇒ Maximize CPU utilization
•
CPU – I/O 버스트(Burst) Cycle
→ 프로세스 실행은 CPU 실행 및 입출력(I/O) 대기로 구성
OS는 프로세스로부터 CPU를 회수 → 다른 프로세스에게 CPU를 의뢰 → 할당
•
CPU 버스트 분포
→ 많은 수의 짧은 CPU 버스트와 적은 수의 긴 CPU 버스트 존재
◦
burst time은 스케쥴링의 중요한 기준 중 하나
•
프로세스의 수행 = CPU 사용(cpu burst) + I/O 대기(I/O burst)
◦
I/O-bound 프로그램 (입출력 지향) → 많은 수의 짧은 CPU 버스트
◦
CPU-bound 프로그램 (CPU 지향)→ 적은 수의 긴 CPU 버스트
cpu burst time 도표
짧은 burst duration ~ 높은 빈도
긴 burst duration ~ 낮은 빈도
프로세스를 스케쥴링하기 위한 큐 (Queue)
프로세스는 실행되는 동안 다양한 스케쥴링 큐 사이를 이동
운영체제는 이러한 스케쥴링 큐에서 프로세스들을 선택하기 위한 스케쥴러 사용
•
Job queue : 현재 시스템 내의 모든 프로세스들의 집합
•
ready queue : 현재 메모리 내에 있으면서 CPU 를 잡아서 실행되기를 기다리는 프로세스들의 집합
•
Device queue : I/O device의 처리를 기다리는 프로세스의 집합
CPU 스케쥴러?
스케줄링은 시스템의 목표를 달성하기 위해 프로세서를 할당하는 일련의 과정.
메모리에 있는 프로세스들 중 실행할 준비가 되어있는 ready 상태의 프로세스를 선택하고, 그 프로세스에 CPU를 할당 → 단기 스케쥴러가 수행
비선점(Non Preemptive)
•
할당받은 자원을 자진해서 반납하고 문맥 교환(뺏을 수 없다)
◦
system call, I/O 등
•
context switch overhead가 적음
•
잦은 우선 순위의 역전, 평균 응답 시간 증가
선점(preemptive)
•
타의에 의해 자원을 빼앗기고 문맥교환 (뺏을 수 있다)
•
context switch overhead가 큼 ⇒ 프로세스가 자주 바뀜
•
Time sharing system, real time system 등에 적합 → 응답성이 높다
•
경쟁이 불가피, 정합성 이슈
•
CPU 스케쥴링 결정은 다음의 네 가지 상황에서 발생
1.
한 프로세스가 실행 상태(running)에서 대기 상태(blocked)로 전환 될 때 → 비선점
2.
프로세스가 종료(terminated)될 때 → 비선점
3.
프로세스가 실행 상태(running)에서 준비 완료 상태(ready)로 전환될 때 → 선점
4.
프로세스가 대기 (blocked 상태)에서 준비 완료 상태(ready)로 전환될 때 → 선점
디스패쳐(Dispatcher)
디스 패쳐 작업
•
CPU의 제어권을 CPU 스케쥴러에 의해 선택된 프로세스에게 넘김
•
프로세스의 레지스터에 적재(문맥 교환)
◦
모든 context switch에서 호출
•
운영체제의 커널 모드(kernel mode) → 사용자 모드(user mode) 전환
•
프로그램을 다시 시작하기 위해 사용자 프로그램이 올바른 위치를 찾을 수 있도록 적절한 위치로 이동
디스패치 지연(dispatch latency)
•
하나의 프로세스를 중지하고 다른 프로세스를 실행시킬 때 소요되는 시간
•
적으면 적을 수록 좋다
스케쥴링 기준
CPU 이용률(utilization) → Max
•
CPU를 가능한 최대한 바쁘게 유지
처리량(Throughput) → Max
•
단위 시간 당 완료된 프로세스의 개수
총 처리 시간(Turnaround time) → Min
•
프로세스의 제출 시간과 완료 시간과의 간격
대기 시간(Waiting time) → Min
•
준비 완료 큐에서 대기하면서 보낸 시간의 합
응답 시간(Response Time) → Min
•
작업요청으로부터 하나의 요구를 제출한 후 첫번째 응답이 발생할 때까지의 시간 (응답 출력하는데 걸리는 시간 X)
도착 → 준비 큐 도착(프로세스 도착)
시스템 스케쥴링 기준
모든 시스템은 아래의 기준을 충족해야 함
•
No starvation
◦
최대한 기아 상태 없이
•
공평함(fairness)
◦
모든 프로세스가 CPU를 공평하게
•
균형, 효율성 :
◦
모든 시스템의 부분들이 바쁘게
Batch Process system
•
maximize Throughput
•
minimize Turn around time
•
maximize cpu utilization
Interactive system
•
minimize variance in response time
real time system
•
deadline
•
predictabilty
Starvation(기아)
•
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 말한다.
•
나쁜 스케쥴링 정책이 기아문제 초래
◦
높은 우선순위 프로세스가 낮은 우선순위 프로세스를 실행으로부터 지속적으로 멀어지게 한다
•
동기화 문제 또한 기아 문제 초래
◦
지속적인 reader 요청 ← writer 접근 불가
Aging(에이징)
•
기아 문제를 해결할 해결책
•
쓰레드의 스케쥴링 우선순위를 준비 큐에 기다린 시간의 비율에 따라 올려준다
•
혹은 lock 시도 횟수에 따라 쓰레드 스케쥴링 우선순위 증가
•
최종적으로 높은 우선순위에 도달해서 기아문제 해결
스케쥴링 알고리즘
비선점(Non-Preemptive) 스케줄링
•
running → waiting, terminated
•
이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법
•
프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용
•
모든 프로세스에 대한 요구를 공정하게 처리 가능
•
일괄 처리 방식에 적합, 중요한 작업이 기다리는 경우가 발생할 수 있음
•
응답시간 예측이 용이
•
종류 : FCFS(FIFO), SJF, 비선점 우선순위, HRN, 기한부 등 알고리즘
선점(Preemptive) 스케줄링
•
waiting → ready, running → ready
•
하나의 프로세스가 CPU를 할당받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법
•
우선순위가 높은 프로세스를 빠르게 처리할 수 있음
•
주로 빠른 응답시간을 요구하는 대화식 시분할 시스템에 사용
•
선점으로 인한 많은 오버헤드를 초래함
•
선점을 위해 시간 배당을 위한 인터럽트용 타이머 클럭(Clock)이 필요
•
종류 : 선점 우선순위, RR(Round Robin), 다단계 큐(MLQ), 다단계 피드백 큐(MFQ) 등 알고리즘
선입 선처리 스케쥴링
(First-come, First-Served, FCFS)
•
CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당 받음
•
FIFO 큐로 관리
•
Batch system에 적합
•
장점
◦
가장 간단한 형태
◦
코드 작성이 쉽고 이해하기 쉬움
◦
자원을 효율적으로 사용 가능(높은 자원 활용성) → 스케쥴 오버헤드가 적음
•
단점
◦
순서에 따라 대기 시간의 차이가 큼
◦
모든 다른 프로세스들이 하나의 긴 프로세스가 CPU를 양도하기를 기다려야 함(호위효과, Convoy effect)
▪
Convoy effect
•
하나의 수행시간들이 긴 프로세스에 의해 다른 프로세스들이 긴 대기시간을 갖게 되는 현상 (대기 시간 >> 실행 시간)
◦
비선점형(긴 평균 응답 시간)이기 때문에, 시분할 시스템에 부적합
최단 작업 우선 스케쥴링
(Shortest-Job-First, SJF)
•
CPU burst가 짧을 수록 CPU를 먼저 할당 받음
•
장점
◦
평균 대기 시간 최소화
◦
시스템 내 프로세스 수 최소화
◦
많은 프로세스들에게 빠른 응답 시간 제공
•
단점
◦
다음 CPU 요청의 길이 파악이 어려움 (예측이 어려움)
◦
Starvation 현상 발생
▪
Burst time이 긴 프로세스는 자원을 할당받지 못 할 수 있음
•
Aging으로 해결
•
선점형 최단 작업 우선 스케쥴링(Preemptive SJF)
선점형 : 새로운 프로세스가 도착한 후 수행중인 프로세스의 잔여 Burst time 비교하여 그 중에서 최단 burst time process를 가지고 CPU를 빼앗아 작업을 수행
•
비선점형 최단 작업 우선 스케쥴링(Non Preemptive SJF)
→ 비선점형은 도착한 프로세스들과의 비교를 현재 수행하고 있는 프로세스를 완료시킨 후 수행한다.
우선 순위 스케쥴링
(Priority)
•
우선순위가 프로세스들에 연관되어 있으며, 높은 우선순위를 가진 프로세스에게 CPU 할당
•
MLQ(Multi Level Queue)
•
MFQ(Multi level Feedback Queue)
•
장점
◦
내부적 정의(시간제한, 메모리 요구, open files수 등) 활용 가능
◦
외부적 정의(프로세스의 중요성, 컴퓨터 사용을 위해 지불되는 비용의 유형과 양 등) 활용 가능
•
단점
◦
무한 봉쇄, 기아 상태 → Aging 고려
▪
우선 순위가 밀려서 프로세스를 잃어버림
▪
오랫동안 방치된 우선 순위를 올려주는 방식
•
MLQ(Multi Level Queue)
◦
작업 타입(우선 순위) 별로 별도의 ready queue를 가짐
▪
최초 배정된 queue를 벗어나지 못함
▪
각각의 queue는 자신만의 스케줄링 기법 사용
▪
Queue의 구성은 정책에 따라 결정
◦
Queue 사이에는 우선 순위 기반의 스케쥴링 사용
◦
Queue 별로 별도의 스케쥴링 알고리즘을 가짐
▪
포어 그라운드 - 라운드 로빈
▪
백그라운드 - FCFS
◦
각 큐는 일정 비율로 CPU를 나누어 사용
▪
포어그라운드 큐 - cpu 시간의 80%
▪
백그라운드 큐 - cpu 시간의 20%
◦
장점
▪
우선순위가 높은 프로세스에 한해서 빠른 응답 시간
◦
단점
▪
여러 개의 Queue 관리 등 스케줄링 overhead
▪
우선 순위가 낮은 queue는 starvation 현상 발생 가능
•
MFQ(Multi level Feedback Queue)
◦
프로세스의 Queue 간 이동이 허용된 MLQ
◦
프로세스를 CPU burst 성격에 따라 구분
◦
Feedback을 통해 우선 순위 조정 (Aging)
▪
현재까지의 프로세서 사용 정보 및 패턴 활용
▪
기아 상태를 예방
◦
프로세스에 대한 사전 정보 없이 SPN, SRTN, HRRN 기법의 효과를 볼 수 있음
◦
MFQ는 다음의 파라미터에 의해 정의
▪
큐의 개수
▪
각 큐를 위한 스케쥴링 알고리즘
▪
우선 순위 조정 기준
•
한 프로세스를 높은 우선순위 큐로 올려주는 시기를 결정하는 방법
•
한 프로세스를 낮은 우선순위큐로 강등시키는 시기를 결정하는 방법
▪
최초 큐 배정 방법
•
프로세스가 서비스를 필요로 할 때 프로세스가 들어갈 큐를 결정하는 방법
◦
단점
▪
설계 및 구현이 복잡, 스케쥴링 오버헤드가 크다.
◦
변형
▪
각 준비 큐마다 시간 할당랼(quantum)을 다르게 배정
•
프로세스의 특성이 맞는 형태로 운영 가능
▪
입출력 위주 프로세스(I/O bounded)들을 상위 단계의 큐로 이동, 우선 순위 높임
•
프로세스가 block될 때 상위의 준비 큐로 진입하게 함
•
시스템 평균 응답 시간 줄임, 입출력 작업을 분산 시킴
▪
대기 시간이 지정된 시간을 초과한 프로세스들을 상위 큐로 이동 ⇒ Aging
◦
예시
▪
Q0 : 시간 할당량 8ms. RR / Q1 : 시간할당량 16ms. RR / Q2 : FCFS
•
스케쥴링 시나리오
◦
새로운 job이 Q0으로 진입. 시간할당량 8ms 내에 종료되지 않을 경우 Q1으로 이동
◦
Q1으로 진입한 프로세스가 시간할당량 16ms 내에 종료되지 않을 경우 Q2로 이동
라운드 로빈 스케쥴링
(Round-Robin)
•
선점형
•
스케쥴링 기준은 도착 시간, 먼저 도착한 프로세스를 먼저 처리 ⇒ FCFS를 베이스로 함
•
시간 할당량(Time Quantum)이라고 일컫는 작은 단위의 시간을 정의
◦
한 번에 한 프로세스에게 한 번의 시간 할당량 동안 CPU를 할당
◦
FCFS + Time Quantum
•
장점
◦
대화형(interactive), 시분할(real time) 시스템 최적화
•
단점
◦
시간 할당량(Time Quantum)에 따른 성능에 영향이 존재(성능 변화가 생김)
◦
너무 클 경우 – FCFS와 동일한 알고리즘이 됨
◦
너무 작을 경우 – Context Switch에 시간을 더 뺏김(Context Switch overhead 증가)
▪
너무 작을 경우에는 모든 프로세스가 각각 프로세서 위에서 동시에 실행되는 느낌
•
Time quantum 별 평균 총처리 시간 예시
•
예시 (Time Quantum = 2)
•
예시 (Time Quantum = 3)
OS 스케쥴링
UNIX System
•
Interactive system
◦
Priority-based scheduling, preemptive scheduling
•
Priority
◦
Kernel priority
▪
커널 모드에 있는 프로세스
▪
interruptible/uninterruptible priority
◦
User priority
▪
사용자 모드에 있는 프로세스
•
Clock handler
◦
주기적으로 인터럽트 발생
◦
모든 프로세스들의 우선순위 조정
•
스케줄링 기법
◦
높은 우선 순위 우선
▪
프로세서 사용량에 따라 우선순위가 주기적으로 변함
◦
MFQ 스케줄링 기법
•
우선순위 조정
◦
프로세서 사용 반영 (decay computation)
◦
우선순위 조정
Window System
•
Thread scheduling
•
Priority-based, Preemptive scheduling
•
32-level priority scheme
◦
Variable class: 1-15
◦
Real-time class: 16-32
•
MLQ scheduling
◦
각각의 우선순위 마다 큐(queue)를 가짐
◦
스케줄러(scheduler)는 높은 우선순위 큐부터 순차적으로 방문하며, 실행할 준비가 된 스레드를 찾음
•
스케줄링 기법
◦
스레드가 자신의 time quantum을 다 소비하고 나올때
→ 우선순위 하향 조정 (variable class의 경우)
◦
Wake-up 시 → 우선순위 상향 조정 (variable class의 경우)
▪
상향 정도는 스레드가 대기 중이었단 작업에 종속적
•
예)
키보드/마우스 I/O → 크게 상향
디스크 I/O → 약간 상향