: 어느 프로세스를 적절하게 선택해서 CPU에게 넘겨줄 것인가에 대한 문제
양보하게 되는 상황
1. I/O (하드웨어 or NW or ...)
2. 오래쓰고 있는 프로세스도 언젠가 양보가 필요하다.
3. Fork Process
--> 어떤 프로세스가 들아가 더 효율적인가를 결정하는 것이 CPU 스케줄링.
Long-term (Job scheduler)
Short-term (CPU scheduler)
누구를 dispatch해서 cpu에 보낼 것인지에 대한 순간을 결정
한개의 프로세스를 선택해 그 프로세스에게 CPU사용권을 부여해준다 (dispatcher)
Non-preemptive
: 한개의 프로세스를 자발적으로 CPU에게 넘긴다
멀티태스킽 또는 멀티프로세서가 되는 상황에서 독점적으로 사용되기는 쓰이기 쉽지 않다.
preemptive
: 1개의 프로세스를 독점한다해도 사용권의 일부 time slice 범위안에서 실행시키고 넘으면 강제로 CPU상태를 빼앗아 버린다.
대부분 preemptive
running state 상태를 ready state상태로
waiting state 상태를 reatedy state 상태로
여러개의 프로세스가 ready state에서 기다리는 상황에서
1개 선택해 running으로 가기위해 고려해야 할 상황
CPU utilization
: CPU는 가능한 바빠야 한다. (일당백)
Throughput
: 일정시간 단위에 가능한 많은 프로세스를 실행하도록 한다.
Waiting Time
: ready Queue로 들어온 다음 그 시간 이후로 선택되어 running state로 바뀌는데 걸리는 시간
선택이 안되어 Ready Queue에 오래 머문다면 Waiting time이 길어진다.
동영상, 음악, 등 실시간 데이터 처리가 중요한 경우 이 시간이 길면 매우 치명적
Response Time
: request를 하고 response를 받는데 걸리는 시간.
마우스 클릭 -> response time -> 반응
Fairness
: 여러개의 프로세스들을 모두 공평하게 자원이 분배되어야 한다.
최적화를 위해서는
: 가장 짧은 것부터 스케줄링한다.
(0 + 75 + 200 + 340 + 620 + 940 ) / 5 = 247
5개의 프로세스가 247만큼 Waiting Queue에서 기다린다.
FCFS : 341인 것을 보면 SJF가 더 짧다.
굉장히 긴 프로세스가 먼저 온다면 그만큼 그 뒤의 프로세스는 그 시간만큼 누적되기 때문.
: 동일하게 프로세스를 분산시킨다. 번갈아가면서
장점 ?
반응속도, Waiting Time 모두 짧다
단점 ?
프로세스간의 switching이 굉장히 잦다 -> Context Switching, 즉 오버헤드가 커진다.
모든 각 프로세스들은 항상 priority를 가진다.
우선순위는 User가 정의할 수 있다.
차이점 ? Ready Queue가 한개가 아니다.
foreground process
실제로 사용자가 interactive하게 사용하고 있는 프로세스
Round-Robin 스케줄링이 유리하다.
background (batch) process
FCFS 스케줄링이 유리하다.
예) 노래를 들으며 인터넷 검색을 한다.
노래듣기 : background process,
검색 : foreground process
프로세스의 우선순의 조정도 필요하다.
시간이 지나면 우선순위를 낮추고, 오랫동안 실행이 안되면 우선순위 증가 (Aging)
얼만큼의 CPU를 나눠쓸 것인지에 대한 고려도 필요함
eg) foreground : 80%, background : 20 % (1개의 CPU)