CPU Scheduling
by Namnani
CPU 스케쥴링에 대해 알아보기 전에...
이러한 Thread는 어디에 활용되고 있을까?
- 게임 프로그래밍
- 네트워크 프로그래밍
다중프로그래밍(Multi-programming)을 위해 CPU 스케쥴링이 중요하다!
CPU burst time?
=> CPU가 일을 수행하는 시간
I/O burst time
=> I/O 요청에 대한 응답을 기다리는 시간
CPU가 유휴 상태(idle state)가 될 때마다 운영체제는 준비 큐에 있는 프로세스들(프로세스 제어 블록 : PCB) 중에서 하나를 선택하여 실행
여기서 잠깐 PCB(Process Control Block)란?
=>특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다.
![pcb](https://user-images.githubusercontent.com/21725428/48549872-5d602580-e914-11e8-8fc3-4f6147f0c22e.PNG)
CPU 스케쥴링의 2가지 형태
<li> 선점 스케쥴링(Preemptive Scheduling) : 선점은 한 프로세스가 CPU를 점유하고 있을 때 다른 프로세스가 현재 프로세스를 중지시키고 자신이 CPU를 차지 할 수 있는 방식이다. 우선순위가 높은 프로세스가 먼저 수행 될 때 유리하고, 빠른 응답시간을 요구하는 시분할 시스템에 유용하다. 하지만 선점 때문에 많은 오버헤드를 초래한다.
</li>
▶ 선점 알고리즘의 특징
-
선점 스케쥴링을 위해 타이머와 같은 특정 하드웨어를 요구할 수 있음
-
동기화를 위한 비용 증가 : 공유 자료에 대한 접근 조정 필요
ex) 선점을 한 프로세스가 이전 프로세스가 조작 중이었던 자료에 접근해선 안됨
-
커널 자료구조의 불일치를 방지하기 위해, 문맥교환을 수행하기 전에 시스템 호출이 완료되거나 I/O 요청이 완료되기를 기다려야 함
-
그러나 이 방법은 멀티프로세싱과 실시간 컴퓨팅을 지원하기에는 부적합함
▶ 디스패처(Dispatcher) : CPU의 제어를 단기 스케쥴러가 선택한 프로세스에게 부여하는 모듈
-
문맥을 교환하는 일
-
사용자 모드로 전환하는 일
-
프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동(jump)하는 일
-
디스패치 지연(Dispatch latency) : 디스패처가 한 프로세스를 중단시키고 다른 프로세스의 수행을 시작하도록 하는 시간
-> 가능한 짧아야 함
스케쥴링 기준(Scheduling Criteria)
▶ 기준
<시스템 입장에서의 효율성 판단 척도>
1) CPU 이용률(Utilization) : CPU 수행 시간 / 시스템 구동 시간 (%) (↑)
2) 처리율(throughput) : 단위 시간당 완료되는 프로세스 수 (↑)
<사용자 입장에서의 효율성 판단 척도>
3) 반환 시간(turnaround time) : 프로세스가 시스템에 진입하여 완료되기까지의 시간(↓)
- 기억장치에 들어가는 시간
- 준비 큐에서 대기하는 시간 -> 4)에 해당
- CPU에서의 실행 시간
- 입출력 시간
4) 대기 시간(waiting time) : 준비 큐에서 대기하는 시간 (↓)
-> CPU 스케쥴링 알고리즘에 따라 실질적으로 영향받는 요소
5) 반응 시간(response time) : 작업을 제출한 후 첫 응답이 나올 때까지의 시간 (↓)
-> 대화식 시스템의 경우 반환 시간보다 적합
각종 스케쥴링 알고리즘(Scheduling Algorithm)
▶ 선입 선처리 스케쥴링(First-Come First-Served; FCFS Scheduling) : CPU를 요구하는 순으로 할당
- 선입선출(FIFO) 큐로 구현, 제일 간단함, 비선점 스케쥴링, 효율적이지 않음.
ex) 프로세스 , CPU 버스트 시간(msec)
P1 24
P2 3
P3 3
ex) 하나의 CPU 중심 작업과 다수의 입출력 중심 작업이 존재하는 경우
-> Convoy effect : 소요시간이 긴 프로세스가 먼저 도달하여 시간을 잡아먹고 있는 부정적인 현상. 해결책은? 짧은 것부터 먼저 처리하는 식의 알고리즘으로 가능!
▶ 최단 작업 우선 스케쥴링(Shortest-Job-First Scheduling) : CPU 버스트 시간이 가장 작은 프로세스를 선택. 단, 동일할 경우는 선입선출 스케쥴링을 적용
-> 최적 알고리즘 : 평균 대기 시간을 최소로 함, 비선점 스케쥴링
ex) 프로세스 , CPU 버스트 시간
P1 6
P2 8
P3 7
P4 3
▶ 선점 SJF 스케쥴링 : 최소 잔여 시간 우선(Shortest Remaining Time First) 스케쥴링 => 비선점 스케쥴링인 SJF를 선점 스케쥴링으로 적용한 것임.
-
ex) 프로세스 , 도착 시간 , 버스트 시간
P1 0 8 P2 1 4 P3 2 9 P4 3 5
Starvation 발생 Starvation이란, 프로세스가 끊임없이 필요한 컴퓨터 자원을 가져오지 못하는 상황
▶ 우선 순위 스케쥴링(Priority Scheduling) : 우선 순위가 높은 프로세스에 CPU 할당. 단, 동일한 경우에는 FCFS로 처리
- SJF : 우선 순위 p가 차기 버스트 시간의 예상치 τ의 역수인 경우
-> 즉, p = 1/τ
-
ex) 프로세스 , 버스트 시간 , 우선 순위(작을수록 높은 우선순위인 경우)
P1 10 3 P2 1 1 P3 2 3 P4 1 4 P5 5 2
▶ 라운드 로빈 스케쥴링(Round-Robin Scheduling) : 원형 준비 상태 큐의 각 프로세스에 일정한 시간량(time quantum) 혹은 시간 할당량(time slice)씩 CPU를 할당하는 선점 알고리즘
-> 시분할 시스템에서 사용
-
시간 할당량 이내에 프로세스가 끝나거나 입출력을 요구한 경우 : 프로세스를 큐에서 제거하고 즉시 다음 작업 시작
-
시간 할당량보다 CPU 버스트 시간이 큰 경우 : 운영체제에 의해 인터럽트되고 중단된 프로세스는 큐의 맨 뒤로 이동함
ex) 프로세스 , 버스트 시간 (시간량 = 4)
P1 24
P2 3
P3 3
Subscribe via RSS