Search

CPU 스케쥴링

CPU(Central Processing Unit; 중앙처리장치)

[ 그림1. 기본적인 컴퓨터 장치와 각 장치 사이 접근 ]
데이터 처리 연산, 저장, 제어 등의 프로그램 명령을 실제로 수행하는 장치
프로세서라고도 함
일반적으로 처리 속도가 다른 장치보다 빠름
한 번에 한가지 일(프로세스)만 수행할 수 있음
주기억장치(RAM)에 적재된 프로세스 중 한 프로세스를 선택하여 실행시킴
프로세스를 선택하는 과정 == CPU 스케줄링

스케줄러

프로세스를 스케줄링하는 장치
큐 종류
작업 큐 (Job Queue)
실행되기 위한 프로그램 집합
디스크에 위치
준비 큐 (Ready Queue)
실행에 필요한 모든 자원을 가진채로 메모리(주기억장치)에 있으면서, CPU할당을 기다리는 프로세스 집합
장치 큐 (Device Queue)
IO 작업을 기다리는 프로세스 집합
IO를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 존재
스케줄러 종류
장기 스케줄러 (Job scheduler)
디스크와 메모리 사이 스케줄링 담당
작업 큐의 프로세스 중, 메모리와 자원들을 할당해서 준비 큐로 보낼 프로세스 결정
프로세스 상태: new => ready로 변경
단기 스케줄러 (CPU scheduler)
메모리와 CPU사이 스케줄링 담당
준비 큐에 있는 프로세스 중 어떤 것을 실행 시킬 지 결정
프로세스 상태: ready => running ⇒ waiting ⇒ ready
중기 스케줄러 (Memory Scheduler)
메모리에 너무 많은 프로세스가 있는 경우, 프로세스를 디스크로 쫒아냄 (Swapping)
실행중인 프로세스 수(degree of Multiprogramming) 제어
프로세스 상태: ready => suspended

프로세스 상태와 상태 전이

상태 종류
생성 (New)
프로세스가 생성되는 중
준비 (Ready)
프로세스가 메모리(주기억장치)에 적재되어, 실행에 필요한 자원을 모두 얻은 채로 CPU할당을 기다림
실행 (Running)
프로세스가 CPU할당받아 실행 중
대기 (Waiting)
프로세스가 할당받은 CPU를 반납하고 이벤트(ex. IO)를 처리 중
IO작업은 디스크에서 일어나고, 디스크는 CPU보다 처리 속도가 느림. ⇒ 따라서 디스크 IO 작업 동안 CPU 점유하고 있어도 다음 명령어 수행 불가 ⇒ CPU 낭비
따라서 IO작업하는 프로세스는 CPU를 반납하고 장치큐에 가서 줄을 서게 됨
종료 (Terminated)
프로세스 실행이 완료되어 CPU 반납
중지/지연 (Suspended)
외부적 이유로 수행이 정지되어, 프로세스가 메모리에서 내려가 디스크로 Swap out됨
상태 전이
승인 (Admitted)
프로세스 승인되어 준비 큐에 올라옴
New → Ready
스케줄러 디스패치(Scheduler Dispatch)
준비 큐에 있는 준비 상태의 프로세스를 실행
Ready → Running
Timeout 과 Interrupt
선점형 스케줄링에서 발생
다른 프로세스에게 CPU를 넘겨주기 위해 실행중인 프로세스를 준비 큐로 보냄
Timeout : 일정시간이 지나 다음 프로세스에게 CPU 할당
Interrupt : 우선순위 높은 프로세스에게 CPU 할당
Running→ Ready
Sleep/Block
실행중인 프로세스가 IO장치 등의 자원 요청 후, 할당받을 때까지 장치큐에 들어가 기다림
Running → Waiting
Wake UP
이벤트에 필요한 자원이 할당되면, 프로세스가 준비상태로 전이됨
Waiting → Ready
Swap-out
프로세스 메모리 부족 등으로 프로세스가 중단되어 디스크로 내려감
Ready → Suspended
Waiting → Suspended
Swap-in
프로세스가 다시 메모리로 적재됨
Suspended → Ready
Suspended → Waiting

CPU 스케줄링

주기억장치에 적재되어 실행을 기다리는 프로세스 중 어떤 프로세스에게 CPU를 할당할지 결정하는 것
좋은 스케줄링의 기준
오버헤드가 적다
CPU사용률이 높다
기아현상이 적게 발생한다.
cf. 기아현상 : 프로세스가 필요한 자원을 할당받지 못하여, 실행되지 못한 채로 자원할당을 무한정 기다리는 상태
시스템 종류에 따른 스케줄링 목표
일괄처리 시스템 (Batch System)
작업을 일괄적으로 한번에 처리하므로, 시간보다는 처리량이 중요
실시간 시스템 (Real-time System)
작업 요청부터 응답을 얻기까지의 시간적 제약이 존재하므로, 작업이 완료되어야 하는 기한(deadline) 맞추기가 중요
대화식 시스템 (Interactive System)
사용자와 컴퓨터가 대화를 하며 작업을 처리하므로, 응답시간이 빨라야 함
종류
비선점형 스케줄링(Non-Preemptive Scheduling)
할당된 CPU를 다른 프로세스가 뺏을 수 없어서, 프로세스 종료까지 실행 보장되는 방식
장점
빨리 응답해야하는 것에 초점을 맞춘 것이 아니기 때문에, 일괄처리방식에 적합
응답시간 예측이 쉬움(← 한번 실행 되면 종료까지 실행보장되니깐)
단점
중요한 작업이 대기함
스케줄링 방식 종류
FCFS(Frist Come Frist Served)
큐에 도착한 순서대로 CPU할당
장점
단순하다
단점
실행시간 긴 것이 앞으로 가면, 평균 대기시간 길어짐
비선점형 우선순위
더 높은 우선순위의 프로세스가 준비 큐에 도착 시, 준비 큐의 Head에 넣음
단점
우선순위 낮은 프로세스는 거의 영원히 CPU할당 못받음
SJF(Shortest Job First)
수행시간이 가장 짧은 작업을 먼저 수행
장점
FCFS보다 평균대기 시간 감소
짧은 작업에 유리
단점
사용시간 긴 프로세스는 거의 영원히 CPU할당 못받음
HRN(Hightest Response-radio Next)
대기시간이 길어질수록 우선순위 높아짐 (SJF 단점 보완)
선점형 스케줄링(Preemptive Scheduling)
OS가 CPU사용권을 가지기 때문에, 한 프로세스에게 할당된 CPU를 뺏어와 우선순위가 더 높은 프로세스에게 할당시키는 방식
장점
우선순위 높은 프로세스를 빠르게 처리 가능
빠른 응답을 요구하는 대화식 시분할 시스템에서 이용
cf. 대화식 시분할 시스템
시분할 시스템 : 프로세서가 여러 작업을 교대로 수행함
대화식 시분할 시스템 : 대화형이란 컴퓨터와 사용자가 1:1 대화하는 것처럼 보인다는 것이다. 실제로는 여러 사용자가 이용함에도, 프로세서가 다중 작업을 빠르게 교대함으로써 마치 1:1 처럼 인식 되는 것이다.
단점
선점과정에서의 문맥교환으로 인해 발생하는 오버헤드
문맥교환(Context Switch)
“문맥” 이란?
프로세스의 상태, 프로세스 명령이 어디까지 수행되었는지, 우선순위 정보 등과 같은 프로세스 현재 상태 정보
CPU를 할당받아 실행되던 프로세스의 문맥을 보관하고 CPU를 뺏은 후, 새로운 프로세스의 문맥을 주기억장치에 적재하여 CPU를 할당하는 작업
오버헤드 발생 이유
문맥을 교환하는 동안에는 작업을 수행할 수 없기 때문
선점시간을 재기 위한 인터럽트용 클럭 필요
클럭으로 선점시간을 재고, 시간이 초과되면 인터럽트 발생하여 CPU할당 해제
CPU 총 사용시간 예측이 어려움
새로운 프로세스가 준비 큐에 올 때마다 스케줄링을 다시하기 때문
스케줄링 방식 종류
SRTF (Shortest Remaining Time First)
남은 작업 시간이 적을 수록 우선순위가 높음
단점
남은 시간이 긴 프로세스는 거의 영원히 할당 받을 수 없음
해결
aging 기법 : 우선순위 낮은 프로세스도 오래 기다리면 우선순위 높아짐
선점형 우선순위 (Priority)
우선순위 가장 높은 프로세스에게 CPU할당
라운드 로빈 (Round robin; RR)
FCFS에 의해 프로세스들이 보내지면 각 프로세스는 동일한 시간의 시간(=할당 시간)만큼 CPU 사용
할당 시간 지나면 프로세스는 선점 당하고 준비 큐의 맨 뒤로 다시 대기
현대의 CPU스케줄링
장점
응답시간 빨라짐
모든 프로세스들이 할당 시간 이상을 기다리지 않음
단점
할당 시간이 크면 FCFS와 같고, 작으면 문맥교환이 잦아져 오버헤드 증가
다단계 큐(Multilevel-queue)
작업 종류마다 다른 우선순위 큐들을 둠
우선순위 낮은 프로세스가 실행 못되는 것을 방지하고자 큐마다 다른 할당시간 설정
우선순위 높은 큐는 할당시간 작음 & 우선순위 낮은 큐는 할당시간 큼