-
FCFS/FIFO - 선입 선처리 스케줄링
→ 교수님 왈) 수십년전 방식. 이걸 쓰면 운영체제라고 부를 수 없을 정도로 구리다.
- 레디큐에 삽입된 순서대로 처리
- 비선점형 스케줄링
- 문제점) 프로세스들이 기다리는 시간이 매우 길어질 수 있음 (=
convoy effect 호위 효과, 교수님 왈) 똥차효과.. 긴 프로세스 똥차가 CPU 점유해서 도로 막고있음)
-
SJF - 최단 작업 우선 스케줄링
- 호위 효과 방지
- 선점형 / 비선점형 두가지 방식으로 구현가능 (다음 짧은 작업이 들어왔을 때 선점할 것인가)
- 옵티멀이긴 하나, 과연 이걸 구현할 수 있을까? CPU burst time을 우리가 알 수 있을까? 없다.
- 과거의 데이터들을 보고 예측해야 한다. → 지수적 평균을 낸다. (왜?: 최근의 값이 더 신뢰성이 있으므로 가중치를 주기 위함.)
→ 교수님 왈) 이 데이터를 기록하는것조차 리소스 낭비이다. 이론적으로 옵티멀일 뿐 구리다.
-
RR - Round Robin 스케줄링
→ 드디어 시분할 됨. 정해진 시간만큼만 프로세스가 점유
- FCFS + 타임 슬라이스 (각 프로세스가 CPU를 사용할 수 있는 정해진 시간)
- 즉 일단 큐에 삽입된 순서대로 CPU 이용하되, 정해진 시간만큼만 이용
- 정해진 시간을 모두 사용하였음에도 아직 프로세스 완료되지 않았다면 다시 큐의 맨 뒤에 삽입 (컨텍스트 스위칭)
- 선점형 스케줄링
-
SRT - 최소 잔여 시간 우선 스케줄링
- SJF + RR
- 즉 정해진 시간만큼 CPU를 이용하되, 다음으로 CPU를 사용할 프로세스로는 남은 작업 시간이 가장 적은 프로세스 선택
- 선점형 스케줄링
-
우선순위 스케줄링
- 우선순위가 같은 프로세스들은 FCFS로 스케줄링
- SJF, SRT ⊂ 우선 순위 스케줄링
- 문제점) starvation (우선순위가 낮은 프로세스는 끝끝내 실행되지 않을수도…)
- 해결방법) aging - 오랫동안 대기한 프로세스의 우선순위를 점차 높이기