섹션2 CPU 스케줄링
- CPU 스케줄링이란?
- 프로세스들에게 CPU를 할당/해제하는 순서
- 고려 사항
- 어떤 프로세스에게 CPU 사용권을 줘야 하는가?
- CPU를 할당받은 프로세스가 얼마나 CPU를 사용해야 하는가?
- CPU burst : CPU를 할당받아 실행하는 것
- I/O burst : 입출력 작업
- 프로세스 준비(실행대기)와 대기(I/O대기) 상태는 큐로 관리된다.
- CPU 스케줄링 목표
- 리소스 사용률 향상
- 오버헤드 최소화 - 컨텍스트 스위칭 줄이기
- 공평성
- 처리량 향상
- 대기시간 감소 - 작업요청 후 실제 작업까지 대기하는 시간
- 응답시간 감소 - 사용자 요청에 얼마나 빨리 반응하는지
- 서로 상반된 목표들이기 때문에 모두 다 준수하기는 힘들다
- FIFO
- First In First Out, 구현이 간단
- 한 프로세스가 완전히 끝나야 다음 프로세스가 시작되기 때문에 비효율적
- I/O 작업이 끝날 때 까지 CPU가 쉬어야 함
- 현대 운영체제(시분할)에선 잘 쓰이지 않고, 일괄처리 시스템 등에서 사용된다
- SJF
- Shortest Job First, 이론적으로 구현
- 어떤 프로세스가 얼만큼 실행된 지 예측할 수 없다.
- Burst Time이 긴 프로세스는 계속 뒤로 밀려서 영원히 실행되지 않을 수 있다.
- RR
- Round Robin, FIFO 알고리즘의 단점을 해결
- 한 프로세스에게 일정 시간만큼(Time Slice, Time Quantum) CPU를 할당하고,
시간이 다 되면 큐에서 다음 프로세스를 실행
- 타임 슬라이스 값에 따라 성능이 달라진다.
- 프로세스가 동시 실행되는 것 처럼 느껴지면서, 오버헤드가 크지 않은 값
- 20~100ms
- FIFO와 비교하여, 평균 대기 시간이 비슷하다면 RR이 더 비효율적일 수도 있다.
- MLFQ
- Multi Level Feedback Queue, 가장 일반적으로 쓰임. RR 상위호환
- CPU Bound Process - 처리량이 중요
- I/O Bound Process - 응답속도가 중요
- 타임 슬라이스가 크면
- CPU Bound Process에는 좋지만, I/O Bound Process에 대기시간 발생하여 손해
- 타임 슬라이스가 작으면
- 여전히 CPU 사용률은 좋지만 I/O Bound Process 대기시간 감소
- 하지만 컨텍스트 스위칭이 CPU Bound Process에서 여러번 일어나 손해
- 어떻게 하면 둘 다 손해를 덜 볼까…
- 기본적으로는 타임슬라이스를 작게,
하지만 CPU Bound Process에게는 타임슬라이스를 크게 준다
- 프로세스가 실행하가 타임슬라이스 안에 스스로 반납하면 CPU 사용량이 적은 것
- I/O Bound Process일 확률이 높다
- 타임슬라이스를 넘겨서 CPU 스케줄러에 의해 강제로 CPU를 빼앗기면
- CPU Bound Process일 확률이 높다
- 이것을 기준으로 우선순위 큐를 여러개 놓고 관리
- 우선순위가 높을 수록 타임슬라이스가 작아지고
우선순위가 낮을 수록 타임슬라이스가 커진다
- 강제로 CPU를 뺏긴다면 우선순위가 낮은 큐로 이동
- 다음에 실행될 떄는 타임슬라이스가 조금 더 커지게 된다
출처 : 인프런, 그림으로 쉽게 배우는 운영체제