[CS스터디] 스케줄러
--목차--
스케줄링?
스케줄링을 위한 Queue 종류
스케줄러 종류
--------
1. 스케줄링?
1) 정의
여러 프로세스가 번갈아가며 사용하는 자원을 어떤 시점에 어떤 프로세스에게 자원을 할당할지 결정하는 방법.
2) 목적
CPU나 자원을 효율적으로 이용하기 위한 조건을 충족시키기 위함.
(스케줄링 방법에 따라 프로세서(CPU)를 할당받을 프로세스를 결정하므로 시스템의 성능에 영향을 미치기 때문.)
- 자원 할당의 공정성 : 모든 프로세스에 공정하게 할당.
- 처리율 증가 : CPU가 유효시간을 최소화해서 단위시간당 프로세스를 처리하는 비율 증가.
- CPU 이용률 증가 : 프로세스 실행 과정에서 CPU 낭비 시간 감소(주기억장치 접근, 입출력 명령..etc) 및 순수하게 CPU가 프로세스 실행하는데 사용되는 실행 비율 증가.
- 우선순위 제도 : 우선순위가 높은 프로세스 먼저 실행.
- 오버헤드 최소화
- 응답시간 최소화 : 작업 지시 및 반응하기 시작하는 시간 최소화.
- 반환시간 최소화 : 프로세스를 제출한 시간부터 실행이 완료되는 시간 최소화.
- 대기시간 최소화 : 프로세스가 준비상태 큐에서 대기하는 시간 최소화.
- 균형있는 자원의 사용 : 메모리/입출력장치 등의 공유 자원을 균형있게 사용.
- 예측 가능성 보장 : 언제 어떻게 실행해도 프로세스는 거의 비슷한 시간, 비슷한 비용으로 처리되어야 함.
- 실행 대기 방지 : 자원을 사용하기 위해 무한정 연기되는 상태(Starvation) 회피.
3) 기타 정보
- 좋은 스케줄링 : CPU의 효율성을 높이고, 프로세스의 응답시간을 최소화하여 시스템의 작업처리 능력을 향상시킨다.
- 프로세스 : CPU만 사용하는 단계(CPU burst) + I/O 작업(I/O burst) 반복 사이클.
- 스케줄링의 존재 목적을 CPU burst time 분포로 설명하기
- 프로세스는 CPU burst와 I/O burst로 이루어져 있는데, I/O-bound Job(짧고 많은 CPU burst가 존재하는 프로그램)과 CPU-bound Job(길고 적은 CPU burst가 존재하는 프로그램)이라 부른다.
- I/O-bound Job : CPU 사용 시간 < I/O 사용 시간
- CPU-bound Job : 계산 위주
- 이런 Job들이 섞여 있어 CPU 스케줄링 필요.

- CPU 스케줄링으로 인해 변경되는 프로세스의 상태
- Running -> Waiting(Blocked) : I/O 요청 or 자식 프로세스의 종료를 위해 wait()함수 호출한 경우
- (비선점, Non-preemptive) : 운영체제가 강제로 프로세스의 사용권 통제.
- Running -> Ready : 인터럽트 발생한 경우
- (선점, Preemptive) : 프로세스가 스스로 다음 프로세스에게 자리를 넘겨주는 방식.
- 여러 프로세스가 동시 작업시 경쟁 상태(Race Condition) 문제점.
- 한 프로세스가 데이터 수정시 다른 프로세스가 선점한다면, 데이터의 일관성 사라짐.
- 여러 프로세스가 동시 작업시 경쟁 상태(Race Condition) 문제점.
- (선점, Preemptive) : 프로세스가 스스로 다음 프로세스에게 자리를 넘겨주는 방식.
- Waiting -> Ready : I/O 작업이 끝난 경우
- (선점, Preemptive)
- Terminate
- (비선점, Non-preemptive)
- Running -> Waiting(Blocked) : I/O 요청 or 자식 프로세스의 종료를 위해 wait()함수 호출한 경우
2. 스케줄링에 필요한 Queue 종류
프로세스를 스케줄링 하기 위한 Queue에는 3가지 종류가 존재한다.
프로세스 관리 목적으로 존재.
1) Job Queue
ㄱ. 정의
현재 시스템 내에 있는 모든 프로세스의 집합
2) Ready Queue
ㄱ. 정의
현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
3) Device Queue
ㄱ. 정의
Device I/O 작업을 대기하고 있는 프로세스의 집합
3. 스케줄러의 종류
1) 장기 스케줄러(Long-term Scheduler or Job Scheduler)
ㄱ. 정의
대용량 메모리(일반적으로 디스크)에 임시로 저장된 경우, 이 pool에 저장된 프로세스 중 ready queue로 보낼지 결정하는 스케줄러.
ㄴ. 목적
메모리는 한정되어 있는 데 많은 프로세스들이 한번에 메모리에 올라올 경우 순서를 할당한다.
ㄷ. 특징
메모리와 디스크 사이 스케줄링을 담당.
프로세스에 각종 리소스(memory..etc)를 할당
실행중인 프로세스의 수(degree of Multiprogramming) 제어
프로세스의 상태를 메모리에서 ready로 설정.
ㄹ. 기타 정보
time sharing system에서는 장기 스케줄러가 없고, 그냥 메모리에 올라가 ready상태가 된다.
2) 단기 스케줄러(Short-term Scheduler or CPU scheduler)
ㄱ. 정의
ready queue에 존재하는 프로세스 중 어떤 프로세스를 running시킬지 결정하는 스케줄러.
ㄴ. 목적
cpu와 메모리 사이 스케줄링 담당.
ㄷ. 특징
프로세스에 cpu를 할당.(Scheduler dispatch)
프로세스의 상태 변화: ready -> running -> waiting -> ready
ㄹ. 기타 정보
3) 중기 스케줄러(Medium-term Scheduler or Swapper)
ㄱ. 정의
현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러.
ㄴ. 목적
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 옮겨버림.(Swappping)
ㄷ. 특징
프로세스에게서 memory dellocate
실행중인 프로세스의 수(degree of Multiprogramming) 제어
프로세스의 상태 변화. ready -> suspended
ㄹ. 기타 정보
Suspended(Stopped) : 외부적 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태.
프로세스 전부 디스크로 swap out. 스스로 ready 상태로 돌아갈 수 없음.
(block : 다른 I/O 작업 기다리는 상태. 스스로 ready state로 돌아갈 수 있음.)
https://velog.io/@hyun0310woo/운영체제-스케줄링-알고리즘
https://hyuntaekhong.github.io/blog/OperatingSystem03/