
CPU 스케줄링은 컴퓨터 시스템에서 프로세스를 효율적으로 할당하여 CPU 자원을 효과적으로 사용하는 방법을 다룹니다. 이 글에서는 CPU 스케줄링의 기본 개념과 다양한 알고리즘을 살펴보겠습니다.
CPU를 효율적으로 사용하기 위해 프로세스를 적절히 배정하는 것이 중요합니다. 다음은 스케줄링의 기본 조건입니다:
프로세스는 여러 상태를 거치며 전이됩니다:
FCFS (First Come First Served): 큐에 도착한 순서대로 CPU를 할당합니다. 실행 시간이 짧은 작업이 뒤로 가면 평균 대기 시간이 길어지는 단점이 있습니다.
SJF (Shortest Job First): 수행 시간이 가장 짧은 작업을 먼저 수행합니다. FCFS보다 평균 대기 시간이 감소하지만 긴 작업은 지연될 수 있습니다.
HRN (Highest Response-ratio Next): 우선순위를 계산하여 점유 불평등을 보완하는 방법입니다. 우선순위는 (대기시간 + 실행시간) / 실행시간으로 계산하여, 대기 시간이 긴 프로세스에 우선권을 부여합니다.
Priority Scheduling: 정적 또는 동적으로 우선순위를 부여하여 우선순위가 높은 프로세스부터 처리합니다. Starvation 문제를 해결하기 위해 Aging 기법을 사용할 수 있습니다. Aging은 우선순위가 낮은 프로세스가 일정 시간 동안 실행되지 않으면, 운영체제가 이 프로세스의 우선순위를 점진적으로 높이는 방법입니다.
Round Robin: FCFS에 의해 프로세스가 할당되면 각 프로세스는 동일한 시간의 Time Quantum만큼 CPU를 할당받습니다. 할당 시간이 크면 FCFS와 같아지고, 작으면 문맥 교환으로 오버헤드가 증가할 수 있습니다.
Multilevel-Queue: 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하여 우선순위가 낮은 큐들이 실행되지 못하는 것을 방지합니다. 각 큐마다 다른 Time Quantum을 설정하여 우선순위가 높은 큐는 작은 Time Quantum을, 우선순위가 낮은 큐는 큰 Time Quantum을 할당받습니다. 우선순위가 높은 큐가 짧은 시간 동안만 CPU를 사용하고 빠르게 반환하면 낮은 우선순위 큐에 있는 프로세스들이 CPU를 사용할 기회가 더 많아져 오랜시간 CPU를 할당받는 문제를 방지할 수 있습니다.
Multilevel-Feedback-Queue: 다단계 큐에서 자신의 Time Quantum을 다 채운 프로세스는 낮은 큐로 내려가고, 다 채우지 못한 프로세스는 원래 큐에 남습니다. Time Quantum을 다채우는 프로세스는 CPU-Bound 즉, CPU 사용량이 많은 프로세스일 가능성이 높기 때문에 작업이 지연될 수 있어서 낮은 큐로 내리고 반대로 다 채우지 못한 프로세스일 경우, I/O-Bound 프로세스로 판단되어 더 높은 우선순위를 부여 받아 빠르게 처리될 수 있게 합니다. 짧은 작업에 유리하며, 입출력 위주(Interrupt가 잦은)의 작업에 우선권을 부여하여 처리 완료 시간을 줄이는 데 기여합니다. 처리 시간이 짧은 프로세스를 먼저 처리하기 때문에 Turnaround(처리 완료 시간) 평균 시간을 줄여줍니다.
[1] GitHub - [Operating System - Chapter 5] CPU 스케줄링 (https://imbf.github.io/computer-science(cs)/2020/10/18/CPU-Scheduling.html)
[2] 티스토리 - [OS] CPU 스케줄링이란? - 인성의 개발 공부 노트 - 티스토리 (https://superohinsung.tistory.com/125)
[3] velog - [운영체제] 5. CPU 스케줄링 (https://velog.io/@passion_man/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-5.-CPU-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81)
[4] F-Lab - CPU 스케줄링 알고리즘의 이해와 적용 (https://f-lab.kr/insight/understanding-cpu-scheduling)