- 공정성: 모든 프로세스에게 공정하고 합리적으로 CPU 자원을 할당하기 위해
- 자원 낭비 최소화: CPU가 쉬지 않고 사용되도록 하여 자원 낭비를 방지하기 위해
- 멀티태스킹: 동시에 여러 프로세스를 실행하기 위해
- 우선순위 관리: 높은 우선순위를 가진 프로세스가 먼저 실행되기 위해
중요한 사실
프로세스 자체는 운영체제의 스케줄러에 의해 직접 실행되지 않으며, 스레드가 실행됨
- CPU 버스트: 프로세스가 CPU를 연속적으로 사용하는 시간
- I/O 버스트: 프로세스가 I/O 작업을 요청하고 완료될 때까지 기다리는 시간
- CPU 버스트보다 I/O 버스트가 많은 프로세스(e.g. 일반적인 백엔드 API 서버 프로그램 등)
- I/O 요청 후 응답까지 기다리는 시간이 길기 때문에 CPU가 상대적으로 덜 사용됨
- 따라서 I/O bound 프로세스의 상태는 실행보다 대기 상태에 더 오래 머무름
- I/O 버스트보다 CPU 버스트가 많은 프로세스(e.g. 동영상 편집 프로그램, 머신러닝 프로그램 등)
- 따라서 CPU bound 프로세스의 상태는 대기보다 실행 상태에 더 오래 머무름
- 운영체제는 프로세스가 중요도에 따라 실행될 수 있도록 우선순위를 부여하며, 각 프로세스의 우선순위 정보는 PCB에 저장됨
- 운영체제가 모든 PCB를 확인해 실행시킬 프로세스를 결정할 순 없으므로, 스케줄링 큐를 통해 프로세스 상태를 관리함
- 준비 큐: CPU 사용을 기다리며 실행 준비가 완료된 프로세스들이 대기하는 큐
- 대기 큐: I/O 작업 등 특정 이벤트가 완료되길 기다리는 프로세스들이 대기하는 큐
- 운영체제가 실행중인 프로세스로부터 자원을 강제로 뺏어 다른 프로세스에 할당할 수 있는 스케줄링 방식
- 자원을 공정하게 분배할 수 있지만 컨텍스트 스위칭 오버헤드 존재
- 현재 대부분의 운영체제가 사용중인 방식
- 운영체제가 실행중인 프로세스로부터 자원을 강제로 뺏을 수 없는 스케줄링 방식
- 현재 실행중인 프로세스가 종료되거나 스스로 대기 상태가 되기 전까진 자원을 뺏을 수 없음
- 컨텍스트 스위칭 오버헤드는 비교적 적지만, 자원을 공정하게 분배받지 못함
- 실행될 프로세스를 선택하는 역할을 담당
- 크게 장기, 중기, 단기 스케줄러가 있음
- 어떤 프로세스를 준비 큐로 보낼지 결정
- 즉, 디스크의 프로그램 중 메모리로 올릴 프로그램을 결정하여 시스템에서 실행되는 프로세스의 수를 제어하기 위한 스케줄러
- 어떤 프로그램을 실행할지는 사용자가 요청하고 장기 스케줄러는 사용자가 실행을 요청한 프로그램을 메모리에 올릴지 말지 결정, 현재 메모리를 사용할 수 없는 상태라면 장기 스케줄러는 프로세스를 준비 큐가 아닌 대기 큐에 넣을 수 있음
- 준비 큐에 있는 프로세스 중 실행될 프로세스를 선택
- CPU 할당을 최적화하기 위한 스케줄러, CPU 스케줄러라고도 부름
- 아래의 '스케줄링 알고리즘' 파트는 단기 스케줄러에서 사용하는 알고리즘을 의미함
- 실행 중인 프로세스의 스와핑을 담당
- 메모리 관리를 위한 스케줄러
- 정의: 준비 큐에 삽입된 순서대로 프로세스를 실행하는 비선점형 스케줄링 알고리즘
- 장점: 단순하고 구현이 용이함
- 단점: CPU bound 프로세스가 있을 경우, 뒤에 있는 다른 프로세스들이 오랫동안 대기해야하는 문제 발생
- 정의: CPU 버스트가 가장 짧은 프로세스부터 실행하는 비선점형 스케줄링 알고리즘
- 장점: 효울적, convoy effect 해결
- 단점: 실제 CPU 버스트 시간을 예측하기 어렵고, 기아(starvation) 현상이 발생할 수 있음
- 정의: CPU 버스트가 가장 짧은 프로세스부터 실행하는 선점형 스케줄링 알고리즘(SJF의 선점형 버전)
- 즉, 현재 실행 중인 프로세스의 남은 CPU 버스트보다 다른 프로세스의 예상 CPU 버스트가 더 짧으면 현재 프로세스를 중단하고 다른 프로세스 실행
- 장점: 효울적, convoy effect 해결
- 단점: 기아(starvation) 현상이 발생할 수 있으며, 빈번한 컨텍스트 스위칭이 발생할 수 있음
- 정의: 준비 큐에 삽입된 순서대로 타임 슬라이스 만큼의 시간동안 번갈아가며 실행하는 선점형 스케줄링 알고리즘
- 각 프로세스는 정해진 타임 슬라이스 동안 CPU를 사용하며, 완료되지 못한 경우 다시 준비 큐의 끝으로 이동
- 타임 슬라이스: 각 프로세스가 CPU를 사용할 수 있는 정해진 시간
- 정의: 우선순위가 높은 프로세스부터 실행하는 스케줄링 방식
- SJF, SRTF도 CPU 버스트 시간을 우선순위로 취급하므로 넓은 의미에서 우선순위 스케줄링이라 할 수 있음
- 단점: 우선순위가 낮은 프로세스가 우선순위가 높은 프로세스에 밀려 계속해서 CPU를 할당받지 못하는 기아(starvation) 현상 발생 가능
- 정의: 우선순위나 특성에 따라 여러 준비 큐를 사용하는 스케줄링
- 높은 우선순위의 큐에 있는 프로세스들을 먼저 전부 처리한 다음 낮은 우선순위의 큐에 있는 프로세스를 처리함
- 각 큐는 별도의 스케줄링 알고리즘을 사용할 수 있음
- 마찬가지로 기아 현상 발생 가능
- Multilevel queue 스케줄링의 발전된 형태
- Multilevel queue 스케줄링에서는 프로세스들의 큐 간 이동이 불가해 기아 현상이 발생할 수 있는데, Multilevel feedback queue 스케줄링에서는 프로세스가 큐 사이를 이동할 수 있어 기아 현상이 발생하지 않음
- 가장 일반적으로 사용하는 CPU 스케줄링 알고리즘
- 새로 준비 상태가 된 프로세스는 가장 높은 우선순위의 큐에 삽입
- 삽입된 프로세스가 해당 큐에서 실행이 완료되지 않으면 다음 우선순위의 큐에 삽입 (반복)
- 낮은 우선순위가 되어 오랫동안 실행되지 못한 경우 다시 우선순위가 높은 큐로 이동시키는 에이징 기법 적용
- 결국 CPU bound 프로세스의 우선순위는 점점 낮아지며, I/O bound 프로세스는 빠르게 실행될 수 있음