CPU 스케쥴링
2023. 9. 16. 04:12ㆍ전공/운영체제
스케쥴링 개요
스케쥴링이 필요한 이유?
- 제한된 컴퓨팅 자원 위에서의 멀티 프로세싱을 해야 하기 때문
- 단일 CPU코어에서는 한 시점에 오직 하나의 프로세스만 처리 가능
CPU 스케쥴링
- 레디큐에 있는 프로세스 중 하나를 선택하여 CPU 자원 할당
스케쥴링 수행 시점
- 프로세스가 running 상태에서 waiting상태로 변경될 때
- 프로세스가 running 상태에서 ready상태로 변경될 때
- 프로세스가 waiting 상태에서 ready상태로 변경될 때
- 새로운 프로세스가 ready 상태가 될 때
- running상태의 프로세스가 종료될 때
비선점 스케쥴링(Nonpreemptive scheduling)
- Running 상태의 프로세스가 waiting상태로 바뀌면 트리거링
- Running 상태의 프로세스가 종료되면 트리거링
- 비탄력적(non-flexible)
선점 스케쥴링(Preemptive scheduling)
- Running상태의 프로세스가 waiting상태로 바뀌면 트리거링
- Running상태의 프로세스가 ready상태로 바뀌면 트리거링
- Waiting상태의 프로세스가 ready상태로 바뀌면 트리거링
- Running상태의 프로세스가 종료되면 트리거링
- 현대의 대부분의 운영체제(Windows,MacOS,Linux,Unix)에서 채택
- 복잡한 설계가 요구됨
디스패쳐(Dispatcher)
- 레디큐에서 스케쥴러에 의해 선택된 프로세스에게 CPU코어를 할당하는 모듈
디스패칭 절차
- 프로세스간 문맥 교환(context switching) 수행
- 커널모드에서 사용자모드로 변환
- 중단된 task를 재개하기 위해 사용자 프로그램의 적절한 위치로 점핑
디스패칭 지연(latency)
- 디스패처가 프로세스 하나를 중단시키고 새로운 프로세스를 실행시킬 때까지의 시간

스케쥴링 성능 지표
CPU 이용률(Utilization)
- CPU가 얼마나 바쁜지에 대해 나타내는 척도
- 높을수록 좋음(ideal = 100%)
처리량 (Throughput)
- 단위시간당 완료하는 프로세스 개수
- 높을수록 좋음
전환시간(Turnaround time)
- 프로세스의 레디큐 입장부터 종료까지 걸린 총 시간
대기시간(Waiting time)
- 프로세스가 레디큐에서 머무른 시간
- 전환시간에서 프로세스가 CPU에서 자원을 할당받아 일을 한 시간을 빼면 남는 시간
응답시간(Response time)
- 프로세스 실행 요청 시점 이후에 첫 번째 응답까지 걸린 시간
- 인터럽트 애플리케이션과 관련이 있다.
- 렉 없이 즉각적으로 반응할수록 성능이 좋음 → 짧을수록 좋음
스케쥴링의 목적
- CPU이용률 최대화
- 처리량 최대화
- 전환시간 최소화
- 대기시간 최소화
- 응답시간 최소화
First Come First Served(FCFS) 스케쥴링
스케쥴링 방법
- CPU자원 할당 요청을 한 순서대로 프로세스에게 CPU코어 할당
스케쥴링 구현
- First Input, First Output(FIFO) 큐를 기반으로 FCFS정책 진행
- FIFO기반 레디큐에 프로세스가 삽입되면 PCB는 레디큐의 tail과 연결
- CPU코어는 FIFO기반 레디큐의 head와 연결된 프로세스에게 할당
- 프로세스는 running상태가 되고 PCB는 큐에서 제거
스케쥴링 특성
- 비선점 스케쥴링 방식으로 동작
- 코드 구현이 쉽고 간단
시나리오

단점
- 각 프로세스가 요구하는 CPU burst time이 다른 경우 비효율적
- Convoy effect 발생
시나리오

Shortest Job First(SJF) 스케쥴링
스케쥴링 방법
- CPU burst time이 짧은 순서대로 프로세스에게 CPU코어 할당
스케쥴링 특성
- 각 프로세스의 다음 CPU burst time 길이를 고려하여 CPU스케쥴링 수행
- 주어진 프로세스 집합에 대해서 최소 average turnaround time 및 average waiting time 보장
- 비선점 스케쥴링 방식으로 동작
시나리오


단점
- 프로세스가 서로 다른 시간에 도착할 수 있음
시나리오

Shortest Remaining Time First(SRTF) 스케쥴링
스케쥴링 방식
- 프로세스가 새롭게 레디큐에 입력될 때마다 남은 처리시간이 가장 짧은 순서대로 프로세스에게 CPU코어 할당
스케쥴링 특성
- 프로세스 도착 시간을 고려하여 스케쥴링 수행
- 프로세스의 레디큐 입력시간이 다양한 경우에도 좋은 시스템 성능 도출
- 선점 스케쥴링 방식으로 동작
시나리오

CPU Burst Time 예측
Approximated SJF/SRTF 스케쥴링
- 각 프로세스의 정확한 다음 CPU burst time을 미리 알 수는 없음
- 그러나 예측은 가능
- 예측된 CPU burst time을 기반으로 (근사) 스케쥴링 수행
지수 평균(Exponential averaging) 기반 예측 기법
- 이전 CPU burst time을 토대로 다음 CPU burst time을 추정


Round Robin(RR) 스케쥴링
스케쥴링 방법
- 미리 정의된 CPU 시간만큼 각 프로세스가 CPU코어를 할당받음
- 미리 정의된 CPU 시간을 time quantum 또는 time slice라고 부름
스케쥴링 특성
- Response time(응답시간)을 고려한 스케쥴링
- 스케쥴러는 레디큐를 돌면서 각 프로세스에게 1 time quantum동안 CPU코어를 할당
- 매 time quantum이 지날 때마다 타이머를 통한 인터럽트 발생, 다음 프로세스를 위한 스케쥴링 수행
- Time quantum은 일반적으로 10-100밀리 초정도로 정의됨
- 레디큐는 순환큐(circular queue)로서 동작

Time quantum
- Time quantum의 길이에 따라 시스템 성능이 달라짐
- Time quantum의 길이가 짧을수록 응답시간(response time)이 짧아짐
- Time quantum의 길이가 길수록 문맥교환(context switching) 오버헤드가 감소
- Time quantum이 매우 길어지면 RR스케쥴링은 FCFS스케쥴링과 동일해짐
- Time quantum이 매우 짧아지면 문맥교환이 너무 자주 발생하여 시스템 성능 저하 발생


Priority 스케쥴링
스케쥴링 방법
- 각 프로세스에게 우선순위(priority)가 할당됨
- 우선순위가 높은 순서대로 프로세스에게 CPU코어 할당
스케쥴링 특성
- SJF스케쥴링은 priority 스케쥴링의 특별 범주에 속함
- CPU burst time이 길수록 priority는 낮아짐
- 다음 CPU burst time의 역수(reciprocal)가 priority로 정의됨
- 모든 프로세스의 priority가 동일한 경우 FCFS스케쥴링과 동치

단점 : 기아(Starvation)
- 바닐라 Priority 스케쥴링에서 발생
- 끝이 없는 블록(indefinite blocking)이 발생할 수 있음
- 낮은 우선순위를 가지는 프로세스는 결코 CPU코어를 할당받을 수 없음
해결책 : 노화(Aging)
- 끝이 없는 블록 문제 해결
- 프로세스의 대기시간이 길어질수록 우선순위를 점차적으로 높여감
'전공 > 운영체제' 카테고리의 다른 글
동기화 응용 (0) | 2023.09.26 |
---|---|
동기화(Synchronization) (0) | 2023.09.16 |
저수준에서의 프로세스 관리 (0) | 2023.09.16 |
프로세스 (0) | 2023.09.16 |
리눅스 (0) | 2023.09.16 |