- CPU 스케줄링 : 운영체제의 CPU 배분 방법
- CPU 스케줄링 알고리즘 : CPU 스케쥴링의 절차
- CPU 스케줄러 : CPU 스케쥴링 알고리즘을 결정하고 수행하는 운영체제의 일부분
개요
우선순위
- 모든 프로세스는 CPU 자원을 필요로 함
- 따라서 운영체제는 공정하고 합리적인 방법으로 CPU 자원을 프로세스에 할당 필요
- 운영체제는 프로세스별 우선순위를 판단해 PCB에 명시하고, 우선순위가 높은 프로세스에는 CPU의 자원을 더 빨리 더 많이 할당
- 운영체제가 프로세스들에게 높고 낮은 우선순위를 할당하는 다양한 기준
- CPU 활용률 : 전체 CPU 가동 시간 중 작업을 처리하는 시간의 비율
- 운영체제는 CPU 활용률을 높게 유지할 수 있도록 우선순위를 할당
- 높은 CPU 활용률을 유지하기 위해 입출력 작업이 많은 프로세스의 우선순위를 높게 유지
- 대부분의 프로세스는 CPU와 입출력장치를 모두 사용해 실행과 대기 상태를 오가며 실행
- CPU 버스트 : 프로세스가 CPU를 이용하는 작업
- CPU 집중 프로세스
- EX : 복잡한 수학 연산, 그래픽 처리 작업 프로세스
- 대기 상태보다 실행 상태에 더 많이 머무름
- 입출력 버스트 : 입출력장치를 기다리는 작업
- 입출력 집중 프로세스
- EX : 비디오 재생, 디스크 백업 작업 프로세스
- 실행 상태보다 입출력을 위한 대기 상태에 더 많이 머무름
- CPU 집중 프로세스와 입출력 집중 프로세스 각각 주로 머무르는 상태가 다르기 때문에 모든 프로세스가 동일한 시간의 빈도로 CPU를 사용하는 것은 합리적이지 않음
- 입출력 집중 프로세스를 가능한 빨리 실행시켜 끊임없이 입출력 장치를 작동시킨 다음, CPU 집중 프로세스에 집중적으로 CPU를 할당하는 것이 합리적
- 입출력장치가 입출력 작업을 완료하기 전까지 입출력 집중 프로세스는 어차피 대기 상태 → 입출력 집중 프로세스를 먼저 처리하고 이후에 다른 프로세스를 실행시켜 CPU 활용률을 높임
- 즉, 입출력 장치 프로세스는 일반적으로 CPU 집중 프로세스보다 우선순위가 높음
스케줄링 큐
- 운영체제는 프로세스들에게 ‘자원을 이용하고 싶다면 줄을 서서 기다릴 것’을 요구
- CPU 자원 요구 프로세스, 메모리에 적재되고 싶은 프로세스, 대기 상태로 특정 입출력장치를 이용하고 싶은 프로세스 모두에 해당 → 이 줄을 스케줄링 큐를 통해 구현
- 프로세스들의 PCB를 큐에 삽입해 줄 세우는 것(스케줄링에 사용되는 큐는 반드시 선입선출일 필요 X)
- 운영체제가 관리하는 큐는 대표적으로 준비 큐와 대기 큐가 존재
- 준비 큐 : CPU를 이용하고 싶은 프로세스의 PCB가 서는 줄
- 대기 큐 : 대기 상태에 접어든 프로세스의 PCB가 서는 줄
- 주로 입출력 작업을 수행 중인 경우, 대기 큐에서 대기 상태로 입출력 완료 인터럽트를 대기
- CPU를 사용해야 입출력 작업이 가능한거 아닌가요?
- 대기 큐에서, 같은 입출력 장치를 요구한 프로세스들은 같은 대기 큐에서 대기( EX : 프린터 대기 큐, CD-ROM 대기 큐, 하드 디스크 대기 큐 등) → 운영체제가 동시다발적으로 자원을 요구하는 여러 프로세스들을 효율적으로 관리 가능
- 큐에 삽입된 순서대로 실행하되, 우선순위가 높은 프로세스부터 먼저 실행

출처 : 프로세스와 스레드 02 - 프로세스의 상태 | Cometa's blog!
선점형 스케쥴링 & 비선점형 스케쥴링
스케줄링은 기본적으로는 프로세스의 실행이 끝나면 이뤄짐. 그러나 프로세스가 종료되지 않은 상황임에도 실행 도중 스케줄링이 수행되는 대표적인 두 시점 존재
- 실행 상태 → 대기 상태(입출력 작업) : 선점형, 비선점형
- 실행 상태 → 준비 상태(타이머 인터럽트) : 선점형
선점형 스케줄링
현재 어떤 프로세스가 CPU를 할당받아 사용하고 있더라도 운영체제가 프로세스로부터 CPU 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식
- 타이머 인터럽트 기반 스케줄링
- 프로세스마다 정해진 시간만큼만 CPU를 이용하고, 정해진 시간을 모두 소비하면 운영체제가 해당 프로세스로부터 CPU 자원을 뺏어 다음 프로세스에게 할당하는 방식이니까