스케쥴러 ( Scheduler )
CPU가 항상 놀지않도록 프로세스를 선택하는 역할
만약 CPU running 부분에 있던 프로세스가 특정 상황으로 인해 terminated, waiting, ready 등으로 갈 수 있기 때문에 비어 있게 됨. 그래서 이 비어있는 코어에 이어서 다른 프로세스가 실행 되도록 레디큐에서 선택하는 역할을 함
ready 상태의 (실행을 기다리는) 프로세스들의 상태를 모아놓은 곳
디스패쳐 ( Dispatcher )
선택된 프로세스를 실제로 CPU에서 실행되도록 만드는 역할
=> 선택된 프로세스에게 CPU를 할당하는 역할
OS간 전환하는 일도 디스패쳐가 함
쉽게 설명하기 위해 스케쥴러와 디스패쳐를 같이 묶어서 설명하기도 함
running 상태인 프로세스가 있을 때 waiting, ready, terminated 세가지 경우에서 자발적으로 프로세스가 빠져나가는 방식
=> 이미 사용되는 cpu를 빼앗지는 못하고 사용이 끝날 때 까지 기다림
비선점 방식이 하는일도 모두 가능 하고 추가적으로 하는 일이 있음
=> 프로세스가 할당받고 사용되고 있는 CPU를 강제로 중지 시키고 CPU를 차지할 수도 있음
이런게 있구나~ 하고 넘어가자
앞서 설명한 ready queue에서 기다리고 있는 프로세스들을 어떤 기준으로 선택할지에 대한 알고리즘
먼저 도착한 순서대로 처리하는 방식 ( 큐 방식 )
프로세스의 다음 CPU burst가 가장 짧은 프로세스부터 실행 ( 시간 짧은 )
남은 CPU burst가 가장 짧은 프로세스부터 실행하는 방식
=> 중간에 새로 들어온 CPU burst가 더 짧을 경우 바꿔서 실행함
우선순위가 높은 프로세스부터 실행하는 방식
=> 선점 방식이라면 CPU작업하는 중간에 높은 우선순위가 오면 작업하던걸 강제로 멈추고 우선 순위가 높은쪽으로 바꿔서 실행, 비선점 방식이라면 하던 작업은 끝마치고 실행
time slice로 나눠진 CPU time을 번갈아가며 실행
=> 처음에 이야기한 멀티태스킹과 가장 비슷한 스케쥴링 방식
프로세스들을 그룹화해서 그룹마다 큐를 두는 방식