[OS 공부] CPU 스케줄러
CPU 스케줄러란
다중 프로그램 OS의 기본으로 여러 프로세스들이 CPU를 교환하며 사용하기 위해 필요한 스케줄러이다.
스케줄링 대상은 Ready Queue에 있는 프로세스들이다.
이에 대한 이해는 이전 포스팅을 참고
dbstndi6316.tistory.com/176?category=957343
스케줄링이 일어나는 시점
- Running -> Waiting (I/O, 자식프로세스종료)
- Running -> Terminate (부모프로세스 종료)
- Running -> Ready (인터럽트 발생)
- Waiting -> Ready (I/O완료)
비선점 스케줄링 / 선점 스케줄링
비선점 스케줄링 :
- Time-Slice가 없다.
- CPU를 사용중인 프로세스가 자율적으로 반납하는 방식
선점 스케줄링 :
- 우선순위에 따라 CPU를 선점하는 방식
- OS가 알고리즘에 따라 프로세스에게 CPU를 할당하고 필요하면 회수
스케줄링 알고리즘
FCFS (First Come First Served)
- 먼저 온 순서대로 처리한다. 마치 Queue와 같다. (FIFO)
- 비선점형 스케줄링이다. 프로세스가 완료될때까지 CPU반환 X
-->문제점 : convoy effecy (소요시간이 긴 프로세스가 먼저 실행되어 효율성이 낮아지는 현상 발생)
SJF (Shortest -Job -First)
- 다른 프로세스가 먼저 도착했어도 실행시간이 짧은 프로세스에게 먼저 할당해준다.
- 비선점형 스케줄링
-->문제점 : starvation (특정 프로세스가 지나치게 차별받는다. 소요시간이 길면 언제 할당받을지 모른다.)
SRT (Shortest Remaining time First)
- 새로운 프로세스가 도착할 때마다 새로운 스케줄링이 이루어진다.
- 선점형 스케줄링이다. 현재 수행중인 프로세스의 남은 실행시간보다 더 짧은 실행시간을 가지는 새 프로세스가 도차가면 CPU를 반환해야한다.
-->문제점 : starvation (변수가 많기때문에 실행시간을 측정할 수 없다.)
Priority Scheduling
- 우선순위가 가장 높은 프로세스에게 CPU를 할당한다. 작은 숫자일수록 우선순위 높다.
- 선점형 스케줄링 방식 (우선순위를 따진다는 것)
- 비선점형 스케줄링 방식 (우선순위를 따져서 이미 수행되고 있는것이 자율적으로 CPU를 반납)
--> 문제점 : starvation (언제 CPU를 할당받을지 모른다.)
--> 해결책 : aging (오래 기다리면 우선순위를 점점 높여주자.)
Round Robin
- 각 프로세스는 동일한 크기의 할당시간을 갖게된다.
- 할당시간이 지나면 프로세스는 다른 프로세스에게 선점당하고 ready queue의 제일 뒤로 가게된다.
-->장점 : CPU 시간이 랜덤한 프로세스들이 섞여있을때 효율적이다
/ Response time이 빨라진다. (어떤 프로세스도 일정시간 이상 기다리지 않는다.)
/ 프로세스가 기다리는 시간이 CPU를 사용할 만큼 증가한다. = 공정한 스케줄링
--> 주의점 : 설정한 time 간격이 너무 커지면 FCFS와 같아지고 너무 작아지면 overhead가 발생할 것이다.