운영체제는 CPU 스케줄링을 통해 Ready Queue에 있는 어떤 프로세스에 CPU를 할당할 것인지를 결정한다.
이때 운영체제는 여러 가지 다른 CPU 스케줄링 알고리즘들이 있다.
1. 선입 선처리 스케줄링 (First-Come, First-Served Scheduling : FCFS)
- CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당받는다.
- 선입선출(FIFO) Queue로 쉽게 관리할 수 있다.
(1) 비선점형(Non-Preemptive) 스케줄링
- 일단 CPU가 한 프로세스에 할당되면, 그 프로세스가 종료 또는 I/O 처리를 위해 CPU를 방출할 때까지 CPU를 점유한다.
(2) 호위 효과(convoy effect)
- 다른 프로세스들이 하나의 긴 프로세스가 CPU를 놓기를 기다리는 것
- 선입 선처리 스케줄링에서는 호위 효과가 발생한다.
- 결론적으로 낮은 CPU와 장치 사용률을 보이게 된다.
(3) 문제(Problem)
- 한 프로세스가 지나치게 오랫동안 CPU를 점유하는 것을 허용되기 때문에 큰 손해가 발생한다.
2. 최단 작업 우선 스케줄링 (Shortest Job First : SJF)
- 각 프로세스의 next CPU burst 길이를 고려한 알고리즘이다.
- CPU가 이용 가능해지면, 가장 작은 next CPU burst를 가진 프로세스에 CPU를 할당한다.
- 두 프로세스가 동일한 길이의 next CPU burst를 가지면, 선입 선처리 스케줄링을 적용한다.
(1) 최적의 알고리즘
- SJF 스케줄링 알고리즘은 주어진 프로세스 집합에 대해 최소의 평균 대기 시간을 가진다.
(2) 문제(Problem)
- 실행하기 전 next CPU burst의 길이를 완벽하게 예측하기 어렵다.
(3) Next CPU Burst 예측
- 한계를 극복하고자 next CPU burst를 예측한다.
- next CPU burst 길이의 근삿값을 계산한다.
- 지수 평균한 것으로 근삿값을 계산한다.
(4) 최소 잔여 시간 우선 (shortest remaining time first : STCF)
- 선점형 SJF(Preemptive version of SJF)
- 만약 새로운 프로세스가 현재 실행되고 있는 프로세스의 남은 시간보다도 더 짧은 CPU burst를 가지고 있다면 Context Switching 발생한다.
3. 라운드 로빈 스케줄링 (Round Robin Scheduling RR)
- 시간 할당량(time quantum), 또는 타임슬라이스(time slice)라고 하는 작은 단위의 시간을 정의한다.
- CPU 스케줄러는 준비 큐를 돌면서 한 프로세스에 한 번의 시간 할당량 동안 CPU를 할당한다.
(1) 실행 두 가지 경우
- 첫 번째, 프로세스의 CPU 버스트가 한 번의 시간 할당량보다 작은 경우
- 프로세스 자신이 CPU를 자발적으로 방출할 것이다. 스케줄러는 그 후 준비 큐에 있는 다음 프로세스를 진행
- 두 번째, 현재 실행 중인 프로세스의 CPU 버스트가 한 번의 시간 할당량보다 긴 경우
- 시간 할당량 이후에 interrupt 발생, Context Switching이 일어나고 실행하던 프로세스는 다시 준비 큐에 넣어진다. 그 후 스케줄러는 준비 큐의 다음 프로세스를 선택한다.
(2) 선점형
- CPU 버스트가 한 번의 시간 할당량을 초과하면, 프로세스는 선점되고 준비 큐로 되돌아간다. 그러므로 선점형이다.
(3) RR 알고리즘의 성능
- 시간 할당량(time quantum)의 크기에 매우 많은 영향을 받는다.
- 시간 할당량이 매우 크면, RR 알고리즘의 경우 선입 선처리 정책(FCFS)과 비슷해진다.
- 한 프로세스가 지나치게 오랫동안 CPU를 점유하게 된다.
- 시간 할당량이 매우 적다면, RR 알고리즘은 매우 많은 Context Switching을 야기한다.
(4) 시간 할당량(Time Quantum)과 문맥 교환 시간(Context Switch Time)
- 시간 할당량은 Context Switch time보다 커야 한다.
- 그렇지 않으면 문맥 교환 오버헤드로 인해 성능이 크게 저하된다.
- 만약 Context Switch time이 시간 할당량의 10%라면, CPU 시간의 약 10%가 Context Switch에 소비되는 것이다.
- 현대 운영체제의 시간 할당량은 10-100 ms, Context-Switch 시간은 10 ms
(5) 총 처리 시간(turnaround time)
- 총 처리 시간 또한 시간 할당량의 크기에 좌우된다.
- 한 프로세스 집합의 평균 총 처리 시간은 시간 할당량의 크기가 증가하더라도 반드시 개선되지는 않는다.
4. 우선순위 스케줄링 (Priority Scheduling)
- CPU는 가장 높은 우선순위를 가진 프로세스에 할당된다.
- 우선순위가 같은 프로세스들은 선입 선처리(FCFS) 순서로 스케줄 된다.
- SJF(최단 작업 우선 스케줄링)은 일반적인 우선순위 스케줄링 알고리즘의 특별한 경우이다. 짧은 실행시간을 우선순위로 가진 경우
(1) 선점형과 비선점형
- 선점형은 새로 도착한 프로세스의 우선순위가 현재 실행되는 프로세스의 우선순위보다 높다면 Context Switching 발생한다.
- 비선점형은 준비 완료 Queue에 새로운 프로세스를 넣는다.
(2) 문제(Problem)
- 기아 상태(Starvation) 또는 무한 봉쇄(indefinite blocking)
- 우선순위 스케줄링 알고리즘을 사용할 경우 낮은 우선순위 프로세스들이 CPU를 무한히 대기하는 경우가 발생한다.
(3) 해결(Solution)
- 노화(Aging)
- 오랫동안 시스템에서 대기하는 프로세스들의 우선순위를 점진적으로 증가시킨다.
(4) 우선순위 + 라운드 로빈 알고리즘 (Priority with RR Scheduling)
- 우선순위가 가장 높은 프로세스를 실행하고 우선순위가 같은 프로세스들은 라운드 로빈 스케줄링을 사용하여 스케줄 하는 방식이다.
5. 다단계 큐 스케줄링 (Multilevel Queue Scheduling)
- 우선순위마다 별도의 Queue를 가진다.
- 우선순위가 가장 높은 큐에서 프로세스를 스케줄 한다.
- 다단계 큐 스케줄링 알고리즘은 프로세스들이 시스템 진입 시에 영구적으로 하나의 큐에 할당된다.
- 이 때문에 기아(starvation)상태가 발생할 수 있다.
- 준비 큐를 foreground와 background 큐로 나눌 수 있다
- foreground(interactive)
- background(batch)
- Ex) 백그라운드 큐는 FCFS 알고리즘에 의해 스케줄 되는 반면, 포그라운드 큐는 RR 알고리즘에 의해 스케줄 될 수 있다.
* Example
- 4개의 큐를 가진 다단계 큐 스케줄링 알고리즘의 예
- 각 큐는 낮은 우선순위의 큐보다 절대적인 우선순위를 가진다.
- 예를 들어, 배치 프로세스가 실행되고 있는데, 대화형 프로세스가 준비 큐에 들어가면 배치 프로세스는 선점될 것이다.
- Foreground, Background 큐는 CPU 시간의 일정량을 받아서 자기 큐에 있는 다양한 프로세스들을 스케줄 한다.
- 예를 들어, 포그라운드 큐는 RR 스케줄링을 위해 CPU 시간의 80%가 주어지고, 백그라운드 큐는 CPU 시간의 20%를 받아 사용한다.
6. 다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue Scheduling)
- 다단계 피드백 큐 스케줄링 알고리즘에서는 프로세스가 큐들 사이를 이동하는 것을 허용한다.
(1) 다단계 피드백 큐 스케줄링의 동작
- 새로운 프로세스는 모두 첫 번째 큐에 들어간다. 그리고 라운드 로빈(RR) 알고리즘으로 동작
- 시간 할당량(time quantum) 안에 끝내지 못하면 낮은 우선순위 큐로 넘어간다.
- 낮은 우선순위의 큐는 FCFS 알고리즘으로 동작하게 되는데 이때 너무 오래 대기하는 프로세스는 높은 우선순위 큐로 이동할 수 있다.
- 노화(Aging)를 이용해서 기아(starvation) 상태를 예방한다.
(2) 매개변수
- 큐의 개수
- 각 큐를 위한 스케줄링 알고리즘
- 한 프로세스를 높은 우선순위 큐로 올려주는 시기를 결정하는 방법
- 한 프로세스를 낮은 우선순위 큐로 강등시키는 시기를 결정하는 방법
- 프로세스가 서비스를 필요로 할 때 프로세스가 들어갈 큐를 결정하는 방법
반응형
'OS(운영체제)' 카테고리의 다른 글
실시간 CPU 스케줄링 (Real-Time CPU Scheduling) (0) | 2021.12.09 |
---|---|
Multiple-Processor Scheduling (다중 처리기 스케줄링) (0) | 2021.12.09 |
CPU Scheduling Criteria(스케줄링 기준) (0) | 2021.12.09 |
CPU 스케줄링(CPU Scheduling) (0) | 2021.12.09 |
프로세스 통신 (Interprocess Communication, IPC) (0) | 2021.12.09 |
댓글