해당 포스트는 쉬운코드님의 유튜브 영상을 정리한 내용입니다.

스케줄러 → cpu를 최대한 활용할 수 있도록 프로세스를 선택
ready queue : ready 상태에 있는 프로세스들을 모아놓은 큐
디스패처 → 선택된 프로세스에게 cpu를 할당하는 역할
- 컨텍스트 스위칭 수행 - 커널 모드에서 실행
- 컨텍스트 스위칭이 일어난 뒤 커널모드에서 선택된 프로세스의 유저 모드로 전환시키는 역할
스케줄링의 선점 방식
Nonpremmptive scheduling (비선점)
- running 상태의 프로세스가 exit, I/O or event wait, interrupt 3개의 경우에만 스케줄링 하는 것
- 프로세스가 자발적으로 running에서 빠져나가기 때문에 Nonpreemptive (os의 개입 없음)
- 프로세스가 스스로 양보해서 다른 프로세스가 cpu에서 실행되도록 함
- 신사적, 협력적 (cooperative), 느린 응답성
- 프로그램의 협력 의지가 필요하기 때문
- 신사적으로 다른 프로세스가 양보할 때까지 레디 큐에서 기다리기 때문에, 프로세스가 시작은 했지만 cpu에서 실행되지는 않는다. 따라서 응답성은 좋지 않다.
Preemptive scheduling (선점)
- 기본적으로 비선점 스케줄링의 기능은 전부 포함
- 추가적으로 프로세스가 끝나지 않았는데도 개입하는 경우 포함
- time slice를 다 쓴 프로세스를 ready로 전환하는 경우
- I/O 작업이 끝나서 ready인 프로세스가 현재 실행중인 프로세스보다 우선순위가 높다면 교체하는 경우
- etc..
- 적극적, 강제적, 빠른 응답성, 데이터 일관성 문제
스케줄링 알고리즘
FCFS (First Come First Served)
SJF (Shortest Job First)
- 프로세스의 다음 cpu burst가 가장 짧은 프로세스부터 실행
- cpu burst → 프로세스가 cpu에서 한번에 연속적으로 실행되는 시간
- 이전에 burst된 시간을 참고하여 미래의 burst될 시간을 예측한다.
SRTF (Shortest Remaining Time First)
- 남은 cpu burst가 가장 짧은 프로세스부터 실행
- SJF에서 Preemptive가 적용된 방식
- 프로세스를 실행하던 도중, 더 짧은 실행 시간을 가진 프로세스가 나타난다면 현재 프로세스를 중단하고 그 프로세스를 실행한다.
Priority
RR (Round Robin)
- time slice로 나눠진 cpu time을 번갈아가며 실행
- 멀티태스킹과 가장 유사한 스케줄링 방식
Multilevel queue
- 프로세스들을 그룹화해서 그룹마다 큐를 두는 방식