어떤 프로세스에게 CPU제어권을 줄 것인가
평가 방법 : 성능 척도
현대에는 강제로 CPU를 빼앗는 스케줄링 방법(선점형)이 주로 사용된다.

- 선입 선출방식 (비효율적)
- 어떤 프로세스인지, 우선순위인지를 구별하지 않고 먼저 오는 순서대로 처리한다.
- CPU권한이 부여되면 자발적으로 반납하지 않는 이상 계속 사용
- CPU를 길게 쓰는 I/O가 CPU를 점유하게 되면, 이후 다른 CPU Bound잡들이 대기하게 되므로 비효율적이다.
- 긴 Job으로 인해 짧은 Job들이 큐에서 대기하는 현상을 Convoy Effect라고 칭한다.
- 스케줄링 기법 중 평균 대기 시간이 가장 짧다는 장점.
- 긴 Job이 영원히 기다릴 수 있는 (starvation)현상의 위험.
- preemptive : 짧은 job이 CPU를 점유하는 도중 더 짧은 job이 오면 CPU를 뺏긴다.
- nonpreemptive : 작업을 다 끝낸 이후에 가장 짧은 job이 CPU를 얻는다.
- 우선순위가 제일 높은 Process 먼저 CPU를 획득
- starvation 현상 발생 가능
- Aging 기법으로 starvation 현상을 방지하는데, 우선 순위가 낮은 Process가 오래 기다리게 되면, 기다린 만큼 우선 순위가 올라가서 CPU를 점유할 수 있게 한다.
- CPU를 정해진 시간만큼만 줘서 job의 종료 여부와 관계없이 CPU를 빼앗는다.
- process들이 CPU를 최초로 얻을 수 있는 응답시간이 빨라진다.
- CPU를 길게 쓰는 process는 CPU를 기다리는 시간이 길어지게 되고, 점유 시간이 길수록 FCFS와 같아지고, 짧을수록 문맥 교환이 잦아지기 때문에 시스템 전체 성능이 떨어진다.

- 우선 순위가 각기 다른 레디큐를 여러개 둔다.
- 1순위 큐에 있는 process가 먼저 CPU를 사용하고, 이후 순위에 따라 CPU를 사용.
- 두 개의 큐가 있다면 interactiva한 process인 forground가 CPU를 많이 사용하게 된다.
- 이 때 우선순위가 낮은 background의 process들에게 startvatuin현상이 빚어지는 것을 방지하기 위해서 time slice를 둔다.

- Hard Real-Time system : 반드시 정해진 시간 내에 작업을 종료하도록 스케줄링 해야한다. ex) 자동차의 에어백
- Soft Real-Time system : 일반 프로세스에 비하여 높은 중요성을 갖고 task를 실행한다. ex)정해진 처리 시간을 넘기면 성능이 감소하는 경우
- Event Latency : 이벤트가 발생하고 나서부터 응답할 때 까지의 시간
- User Level Thread : process 내부에서만 thread의 존재를 알고, 커널은 존재를 모른다. 사용자 프로세스가 직접 thread를 관리한다.
- Kernel Level Thread : 커널이 프로세스 내부의 thread의 존재를 안다.
- Local Scheduling : 사용자 프로세스가 CPU에서 동작중일 때 프로세스가 직접 어떤 thread에게 CPU를 줄지 스케줄링
- Global Scheduling : 커널이 thread의 존재를 알고 직접 관리하고 CPU 스케줄링한다.