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
실행 중인 프로세스/스레드가
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 : 프로세스/스레드들을 우선순위를 기준으로 그룹화해서 그룹마다 큐를 두는 방식
'CS 과목(CS科目) > 운영체제(OS)' 카테고리의 다른 글
온갖 Level에서의 Thread 총정리( 하드웨어 스레드, os 스레드, native 스레드, kernel 스레드, user 스레드, green 스레드), 자바 스레드 모델 (0) | 2022.12.31 |
---|---|
인터럽트(interrupt), 시스템 콜(System Call), 유저 모드(user mode), 커널 모드(kernel mode) (2) | 2022.12.31 |
OS Process state vs JAVA Thread state (0) | 2022.12.30 |
dead lock(교착상태) with JAVA (0) | 2022.12.27 |
모니터(monitor)(sub: 그 모니터 아닙니다 ㅋㅋ) (0) | 2022.12.23 |