목차
프로세스가 생성되어 실행될 때 필요한 시스템의 여러자원을 해당 프로세스에게 할당하는 작업을 뜻 하며, 대기 시간은 최소화 하고 최대한 공평하게 처리하는 것을 목적으로합니다.
다중프로그래밍 시스템과 시분할 시스템을 만족시키기 위해서는 스케줄링 기법이 절대적으로 필요합니다.
가장 공정한 CPU 스케줄링 ?
CPU를 사용하고 싶어하는 프로세스들이 차레로 돌아가며 ? <-- 비효율적
빨리 처리해야하는 프로세스가 있기 때문 (=프로세스마다 우선순위가 다르기 때문)
입출력 작업이 많은 프로세스 (IO Bound)의 우선순위는
CPU 작업이 많은 프로세스 (CPU Bound)의 우선순위보다 높다

프로세스 우선순위는 PCB 에 저장이 된다.

(우선순위 확인 방법)

프로세스의 우선 순위를 결정할 때, 모든 PCB 를 검사하면서 우선순위를 결정하는 것은 굉장히 비효율적일 수 있다.
이런 비효율적인 것을 해결하고자 OS 는 스케줄링큐를 사용한다.
(같은 queue 내에서도 우선순위가 높으면 앞쪽으로 옮겨짐)
0. Job queue : 시스템 안에 존재하는 프로세스들
1. 준비큐 (Ready queue ) : cpu 를 이용하기 위해 기다리는 줄
2. 대기큐 (Device queue) : 입출력 장치를 이용하기 위해 기다리는 줄

전체적인 스케줄링 흐름은
cpu 를 번갈아가면서 사용하기 때문에 프로세스들은 준비 큐에 기다리면서 cpu 할당을 기다리게 된다. 준비상태에 접어든 프로세스 중 CPU 를 할당 받을 차례가 되면 dispatch 가 되서 실행상태가 되고 실행 시간이 완료가 되면 (타이머 인터럽트 전에 프로세스가 종료되면 종료 상태로됨) 다시 준비큐에 삽입이 된다. 그리고 다음 준비큐에 있는 프로세스가 다시 실행상태로 변환된다. 만약 실행상태에 있다가 입출력장치 요청이 필요하면 대기큐에서 대기 상태로 있다가 입출력완료 인터럽트를 받으면 준비큐로 다시 들어간다.
조금 더 자세히 알아보면 대기큐는 각각의 입출력 장치별로 여러개의 큐가 존재한다.
즉 같은 장치를 요구하는 프로세스들은 같은 큐에서 대기를 할 수 있다.

참고) 스케줄링큐가 추가된 프로세스 상태 다이어그램

즉 정해진 시간만큼 돌아가면서 CPU를 쓸 수 있음
- 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골고루 자원을 배분할 수 있다.
- 그만큼 context swiching 과정에서 오버헤드가 발생할 수 있다.
- 선점형 스케줄링에 비해 context switcing 에서 발생하는 오버헤드가 적다.
- 모든 프로세스가 골고루 자원을 이용하기 어렵다