본문 바로가기

CS 과목(CS科目)/운영체제(OS)

CPU 스케줄러, Dispatcher

CPU 스케줄러 vs Dispatcher

 

Scheduler : CPU에 실행시킬  Ready Queue의 프로세스/스레드를 선택하는 역할.( OS 기능 )

Dispatcher : Scheduler에 의해 선택된 프로세스/스레드에게 CPU를 할당하는 역할.( OS 기능 )

1. Kernel Mode에서 문맥 교환 작업이 끝나면,  User Mode로 전환하여 새롭게 시작될 프로세스/스레드에게 제어권을 넘김

2. 새롭게 선택된 프로세스/스레드가 어디서부터 실행되어야 하는지 적절한 위치로 이동시킴. 

( 문서에 다라서는 스케줄러와 디스패처를 엄밀히 구분하지 않고 설명하는 경우도 있다.)

 

스케줄링 선점 방식

Non preemptive scheduling vs Preemtive Scheduling

Non preemptive scheduling

Non preemptive 스케줄링

실행 중인 프로세스/스레드가 

1. 다시 Ready Queue에 자발적으로 들어 가는 경우

2. I/0 작업등으로 Waiting Queue에 들어 가는 경우

3. 실행이 완전히 끝나는 경우

-> 위 3가지 경우에 대해서만 OS가 개입하는 스케줄링을 Non Preemptive 스케줄링이라고 한다. 

( 1, 2의 경우를 제외하고는 Ready Queue에 있는 프로세스/스레드는 실행 중인 프로세스/스레드가 CPU를 다 사용할 때까지 기다린다.)

OS가 적극적으로 or 강제로 개입(선점)하여 프로세스/스레드의 실행이 제어되는 것이 아니라, 프로세스/스레드가 스스로

실행의 흐름을 제어하는 것이기에  Non Preemptive 라고 부른다.

Non preemptive scheduling의 특성 : 신사적, 협력적(cooperative), 느린 응답성

협력적(cooperative) : 프로그램 level에서 프로세스/스레드끼리 cpu를 서로 양보.

 

Preemptive(선점) Scheduling

 

preemptive 스케줄링은 기본적으로 non preemptive 스케줄링이 하는 기능을 전부 다 할 수가 있다. 

거기서 추가적으로, 실행 중인 프로세스/스레드가 아직 CPU를 다 실행시키지 안 았음에도 강제로 Ready Queue에 집어 넣

을 수가 있다. 

preemptive 스케줄링 특징 : 적극적, 강제적, 빠른 응답성, 데이터 일관성 문제

데이터 일관성 문제 : 이러한 문제를 해결하기 위하여, 뮤텍스, 모니터 등의 기법을 배웠다. 

 

스케줄링 알고리즘( 깊게 들어가지는 않음)

FCFS : 먼저 온 프로세스/스레드부터 실행

SJF : 프로세스/스레드의 다음 CPU Burst가 가장 짧은 프로세스부터 실행

SRTF (Shortest Remaining Time First) : 남은 CPU Burst가 가장 짧은 프로세스/스레드부터 실행

Priority : 우선순위대로 프로세스/스레드를 실행 시킴

Round Robin : time slice로 나눠진 cpu time을 번갈아 가며 실행( 일반적으로 round robin을 채택)

Multilevel Queue : 프로세스/스레드들을 우선순위를 기준으로 그룹화해서 그룹마다 큐를 두는 방식