

- CPU scheduler
: 운영체제 안에서 스케줄링을 수행하는 코드 블럭
Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고름- Dispatcher
: CPU를 넘겨주는 코드 블럭
CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘김. context switch(문맥 교환)
non-preemptive
: 강제로 빼앗지 않고 자진 반납
CPU를 한번 줬으면 다 쓰고 자진 반납을 할 때까지 보장하는 방법, 비선점형.
다른 프로세스가 실행을 시작하기 위해서는 현재 실행 중인 프로세스가 종료되거나 대기 상태로 들어가야 함
preemptive
: 강제로 빼앗음
선점형 스케줄링, 현대에는 대부분 비선점형
다른 프로세스가 실행해야 할 작업이 더 중요하거나 긴급할 경우, 현재 실행 중인 프로세스를 중단하고 CPU를 다른 프로세스에게 넘김.

- 시스템 입장에서의 성능 척도
- CPU Utilization, 이용률
- 전체 시간 중 CPU가 실제로 작업을 처리한 시간의 비율을 높게 할수록 성능 good, CPU 자원을 최대한 활용할 수록 좋다.
- Throughput, 처리량
- 단위 시간 당 많은 작업을 처리할수록 성능이 좋다.
- 프로그램 입장에서의 성능 척도
- Turnaround time, 소요시간
- 프로세스가 시스템에 진입하여 완료될 때까지의 전체 경과 시간
- ready queue 대기 시간 + cpu 실행 시간 + i/o 시간
- Waiting time, 대기 시간
: 프로세스가 ready 상태에서 cpu를 할당받기를 기다리는 시간- Response time, 응답 시간
: 프로세스가 처음으로 요청을 시작한 후 시스템에서 첫 번째 응답을 받을 때까지 걸리는 시간
FCFS(First-Come First-Served)
- 먼저 들어온 순서대로 처리
- 비선점형 스케줄링
- cpu를 오래 쓰는 프로그램이 먼저 오게 되면 계속 기다려야 하므로 비효율적
- Convoy effect: 작은 프로세스들이 큰 프로세스를 기다리는 동안 작은 프로세스들의 실행이 지연되고 평균 대기 시간이 증가하는 현상
SJF(Shortest-Job-First)
- CPU burst time 가장 짧은 프고세스를 가장 먼저 스케줄링하는 방식
- Nonpreemptive SJF(비선점):
- 프로세스가 CPU를 할당받으면 해당 프로세스의 CPU burst가 완료될 때까지 CPU를 선점받지 않음
- 프로세스가 한 번 CPU를 할당받으면 그 프로세스의 실행이 완료될때까지 다른 프로세스들은 wait
Priority Scheduling
- 우선순위가 높은 순서부터 낮은 순서의 프로세스 순으로 CPU 할당
- 발생 가능한 문제: Starvation
: 우선 순위가 낮은 프로세스가 계속해서 높은 우선 순위를 가진 프로세스에게 밀려 CPU를 할당받지 못하고 대기하게 된다.
=> Aging: 시간이 지남에 따라 우선순위 증가시킴
- 오랜 시간 동안 실행되지 못한 낮은 우선 순위의 프로세스의 우선 순위가 점점 상승하여 CPU를 할당받을 수 있는 기회가 증가
- Aging을 통해 프로세스의 우선순위를 조절 가능
다음 CPU Burst Time을 예측하려면?
- 과거의 CPU 수행 시간을 이용해서 추정할 수 밖에!
- 방법 1) 지수 평균 사용하기
- 새로운 추정 값 = (가중치 이전 추정값) + ((1-가중치)현재 burst time)
: 최근 값에 더 많은 가중치를 주는 방식으로 예측 -> 오래전 값 보다 최대한 최근의 값에 기반해서 추정하기 위함
각 프로세스는 최대 q 시간까지만 사용 가능
: 만약 프로세스는 CPU 사용 도중 타임 퀀텀이 만료되면 해당 프로세스는 준비 큐의 맨 뒤로 이동 -> 다른 프로세스에게 CPU 를 양보, 마지막 프로세스가 타임 퀀텀만큼 CPU 사용하고 나서 다시 첫번째 프로세스로 돌아가는 형식
- 큰 타임 퀀텀
: FCFS(First-Come First-Served) 스케줄링과 유사- 작은 타임 퀀텀
: 컨텍스트 스위치가 매우 빈번하게 발생하게 되어 오버헤드가 커지고 시스템 전체 성능이 저하될 수 있음
-> 적당한 타임 퀀텀의 크기를 선택하는 것이 중요
: 일반적으로 10-100 m/s 정도의 크기가 좋은 성능
일반적으로 SJF 보다 평균 turnaround time(소요시간)이 길지만 RR는 응답 시간은 짧다는 특징이 있음. 시간이 오래걸리는 job, 짧게 걸리는 job이 섞여 있을 때는 효율적이지만 모든 시간이 동일한 job만 있을 때는 비효율적.
