CPU Scheduling
2022.07.11 공부 내용, 2022.07.15 보강
Thanks to Leegon Kim
다중 프로그래밍에서는 어떤 프로세스가 실행 중 대기해야 하는 경우에 그에게서 CPU 사용권을 뺏아 다른 프로세스에게 CPU 사용권을 준다. 이 때 어떤 프로세스가 실행될 지 결정하는 작업을 CPU scheduling 이라 한다.
프로세스 실행은 CPU 실행 (CPU 버스트) 과 I/O 대기 (I/O 버스트)로 이루어짐. CPU 버스트 뒤에 I/O 버스트가 옴.
CPU가 idle 상태가 되면, OS는 ready queue에 있는 프로세스를 선택해 실행하고 CPU를 할당해 준다. Short-term scheduler라고도 부름.
다음과 같이 프로세스가 변하는 네 가지 상황에서 CPU 스케쥴링이 일어남.
1, 4번의 경우에만 스케쥴링이 일어나는 경우, 프로세스가 종료되거나 I/O가 있을 때 까지 실행을 보장한다는 의미에서 non-preemptive scheduling.
모든 경우에서 스케쥴링이 일어나는 경우, OS가 프로세스의 CPU 사용권을 선점할 수 있다는 의미에서 preemptive scheduling. race condition 발생 가능.
Short-term scheduler에게 선택된 프로세스에게 CPU 제어권을 넘겨주는 모듈. 한 프로세스를 멈추고 다른 프로세스를 실행하는데 걸리는 시간을 dispatch latency라 함.
Short-term scheduler가 프로세스를 선택하는 알고리즘.
다음은 스케쥴링 알고리즘의 성능을 판단하는 기준들.
먼저 들어온 프로세스부터 실행. 실행시간이 긴 프로세스에 의해 다른 프로세스들의 대기 시간이 늘어나는 convoy effect 발생 가능. 비선점.
실행시간이 짧은 프로세스를 우선적으로 실행. 프로세스의 다음 실행 시간을 알기 힘드므로 구현이 힘듦. 비선점.
SJF에서 선점 방식으로 바꾼 것. 프로세스가 실행 중 더 짧은 실행 시간을 가진 프로세스가 들어오면 해당 프로세스에게 CPU 할당.
SJF보다 일반적인 알고리즘. 프로세스에 우선순위를 부여한 후 우선 순위가 높은 것 부터 실행. 선점 / 비선점 둘 다 가능.
낮은 우선순위를 가진 프로세스는 무한정 대기하는 starvation 현상 발생 가능. 이를 방지하기 위해 오래 기다린 프로세스의 우선 순위를 높이는 aging 방식 가능.
타임슬라이스를 설정 후 일정 시간이 지나면 다음 프로세스 수행, 완료되지 못한 프로세스는 ready queue의 맨 마지막에 삽입.
타임슬라이스가 크면 FCFS와 차이가 없고, 작으면 context switch overhead가 발생함. 적절한 선정이 필요. 선점.
우선 순위에 따라 여러 큐를 두고 각 프로세스마다 해당하는 큐에 배정. 각 큐마다 다른 스케쥴링 방식 적용. 한번 할당되면 다른 큐로 이동 불가능.
Multi level queue에서 유연성을 더해 프로세스가 다른 큐로 이동이 가능하게 만들어 둠. 다만 관리의 복잡성이 증가.
Ready queue에 있는 프로세스 중 어떤 프로세스에게 CPU 자원을 할당 할 지에 대한 적절한 알고리즘 선택이 필요함.