Process Scheduling
Context Switch
Context Switch가 일어날 때 발생하는 Overhead
1. Ready Queue에서 프로세스를 탐색하는 비용
2. PCB에 현재 프로세스 내용을 저장하고, 다음 프로세스내용을 로드하는 비용
3. Interrupt나 System call로 유저모드에서 커널모드로 진입하고 나오는 비용
4. 현재 프로세스에서 사용한 Register들을 flush하고 다음 프로세스에서 사용되는 Register를 로드하는 비용
4. TLB를 Flush하는 비용
Scheduling Criteria
<높을 수 록 좋음>
CPU utilization: CPU의 바쁜 정도
Throughput: 수행을 완료하는 단위시간
<낮을 수록 좋음>
Turnaround Time: 프로세스가 수행을 완료하는 총 시간
Waiting Time: 프로세스가 Ready Queue에서 기다리는 총 시간
Response Time: 일이 처음 시작될 때 반응하는 시간
non-preemptive vs preemptive
non-preemptive: 비선점형 스케쥴링으로 프로세스가 종료되어야만 다음 프로세스가 실행된다. context switching의 오버헤드가 적다.
Preemptive: 선점형 스케쥴링으로 프로세스 실행중에 context-switching이 일어날 수 있다. context switching의 오버헤드가 크다.
FCFS/FIFO
Starvation
SJF
가장 적은 일을 기대하는 프로세스를 우선적으로 고른다.
Waiting Time이 최소화 된다.
Starvation이 발생할 수 있다.
STCF
RR
Priority Scheduling
priority inversion
우선순위가 낮은 프로세스가 공유자원을 사용하고 있고, 우선순위가 높은 프로세스가 CPU에서 공유 자원을 사용하려고 할 때, 우선순위가 낮은 공유자원의 사용이 끝날 때까지 Waiting상태에 들어간다. 하지만 이때 공유자원과 상관없고 우선순위가 중간인 프로세스가 들어오면 그 프로세스가 실행된다. 이때 우선순위가 높은 프로세스는 우선순위가 중간인 프로세스보다 우선순위가 높음에도 늦게 실행된다. 이를 priorty inversion이라 한다.
이를 해결하기 위해 PIP,PCP 스케쥴링을 사용한다.
PIP
PCP
[참고] Operating Systems Three Easy Pieces/Remzi H.Arpaci-Dusseau/ CreateSpace Publishing