스케줄링
⭐️ 스케줄링의 목적
🚨 주 목적은 멀티 프로세스 환경에서 모든 프로세스를 공평하게 실행하는 것이다
- 공평성 : 모든 프로세스가 공평하게 실행되어야 함
- 효율성 : 자원을 효율적으로 사용해 자원이 사용되지 않는 시간이 없도록 함
- 안정성 : 우선순위를 고려해 높은 우선순위의 프로세스를 먼저 처리하도록 함
- 반응 시간 보장 : 프로세스가 일정 시간 내에 응답할 수 있도록 함
- 무한 연기 방지 : 특정 프로세스에 대한 처리가 무한히 연기되지 않도록 함
⭐️⭐️⭐️ 스케줄링의 단계
장기 스케줄링 ( =잡 스케줄링 또는 승인 스케줄링)
준비 큐에 어떤 프로세스를 넣을지 결정해 메모리에 올라가는 프로세스 수를 조절한다
현대 운영체제에서는 시분할 시스템을 사용하므로 대부분 사용하지 않음
중기 스케줄링
메모리에 로드된 프로세스 수를 동적으로 조절한다
메모리에 프로세스가 많이 로드되면 스왑 아웃해서 일부 프로세스를 통째로 저장 → 스왑 아웃된 프로세스는 중단 상태가 됨 → 중단 상태는 준비 상태에서 스왑 아웃된 ‘중단된 준비 상태’와 대기 상태에서 스왑 아웃된 ‘중단된 대기 상태’로 구분
단기 스케줄링 ( =CPU 스케줄링)
준비 큐에 있는 대기 상태 프로세스 중 어떤 프로세스를 다음으로 실행할지 스케줄링 알고리즘으로 결정한다
⇒ 어떤 프로세스를 디스패치할지 결정하는 것
스케줄러 관점에서의 스케줄링
스왑 아웃, 스왑 인, 스와핑
- 스왑 아웃 : 메모리 공간보다 많은 프로세스가 로드될 때, 중기 스케줄러가 이벤트 발생을 기다리고 있는 프로세스를 통째로 저장 공간으로 옮겨 저장하는 것
- 스왑 인 : 스왑 아웃한 프로세스에서 이벤트 요청이 오면 해당 프로세스를 통째로 다시 메모리에 로드하는 것
- 스와핑 : 스왑 아웃과 스왑 인처럼 프로세스를 통째로 메모리 영역과 저장 공간으로 옮기는 것, 메모리 공간보다 많은 프로세스를 실행할 수 있다는 장점
⭐️⭐️⭐️ 스케줄링 알고리즘
🚨 스케줄링 알고리즘은 CPU 스케줄러가 준비 큐에 있는 프로세스 중 어떤 프로세스를 실행시킬지 결정하는 데 사용한다
스케줄링의 목적을 달성하기 위한 평가 기준
- CPU 사용률 : CPU를 놀리지 않고 사용하는지 판단
- 처리량 : 단위 시간 당 실행한 프로세스 수
- 응답 시간 : 프로세스에 요청이 발생했을 때 응답까지 걸리는 시간
- 반환 시간 : 프로세스가 로드된 이후부터 종료될 때까지 걸리는 시간
- 대기 시간 : 프로세스가 대기 큐에서 대기하는 시간의 총합
또한, 스케줄링 알고리즘은 비선점형과 선점형으로 나뉜다
비선점형 스케줄링
🚨 비선점형 스케줄링은 실행 중인 프로세스가 종료될 때까지 다른 프로세스를 실행할 수 없음을 의미한다
- FCFS(first come first served) 스케줄링 : 준비 큐에 먼저 들어온 프로세스가 우선순위를 갖는 알고리즘
- SJF(shortest job first) 스케줄링 (=SJN 스케줄링): 실행 시간이 짧은 프로세스가 우선순위를 갖는 알고리즘으로, 준비 큐에 있는 프로세스 중 CPU를 점유하는 실행 시간이 가장 짧은 프로세스부터 실행
- 평균 대기 시간이 가장 짧지만, 실행 시간이 긴 프로세스는 실행 시간이 짧은 프로세스에 밀려 기아 상태가 될 수 있다 → 기아 상태 : 우선 순위가 낮은 특정 프로세스는 계속 실행되지 못하는 것
- HRRN(highest response ratio next) 스케줄링
선점형 스케줄링
🚨 선점형 스케줄링은 스케줄러가 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행할 수 있음을 의미한다
- RR(round robin) 스케줄링 : 프로세스 간 우선순위가 없고, 모든 프로세스를 순서대로 일정 시간 동안 실행하며 일정 시간을 초과하면 다른 프로세스를 실행한다 → 일정 시간 : ‘시간 단위’를 의미하며 타임 퀸텀 또는 타임 슬라이스라고도 함, 일반적으로 시간 단위는 10~100밀리초
- 장점 : 모든 프로세스가 반복 수행되어 응답 속도가 빠르다
- 단점 : 콘텍스트 스위칭이 빈번하게 일어나 오버헤드가 크다
- SRTF(shortest remaining time first) 스케줄링 : 준비 큐에서 대기 시간이 가장 짧게 남은 프로세스를 우선 수행하는 알고리즘으로, 한 프로세스가 실행 중일 때 실행 시간이 더 짧은 프로세스가 준비 큐에 들어오면 실행 시간이 더 짧은 프로세스가 CPU를 차지한다
- 장점 : 평균 대기 시간이 짧다
- 단점 : 수행 시간이 긴 프로세스는 기아 상태가 되기 쉽다
- 멀티 레벨 스케줄링 : 준비 큐를 목적에 따라 여러 개로 분리해 사용하는 알고리즘으로, 분리한 큐는 각각 우선순위가 있고 각자 다른 스케줄링 알고리즘을 적용할 수 있다 → 여러 개의 큐는 foreground 큐와 background 큐로 나뉜다
- foreground 큐 : 응답 속도가 중요한 프로세스가 들어감
- background 큐 : 응답 속도보다 성능을 중요시하는 프로세스가 들어감
.
스케줄링 예제
준비 큐에 다음과 같이 프로세스가 들어있다고하자
프로세스 이름 | 예상 실행 시간 | 준비 큐에 들어온 시간 |
---|
P1 | 150 | 0 |
P2 | 60 | 20 |
P3 | 300 | 40 |
P4 | 270 | 60 |
P5 | 120 | 80 |
FCFS 스케줄링에서 프로세스 실행 순서
- 평균 대기 시간 = 각 프로세스의 대기 시간 합 / 프로세스의 수 {0 + (150 - 20) + (210 - 40) + (510 - 60) + (780 - 80)} / 5 = 290
SJF 스케줄링에서 프로세스 실행 순서
- 평균 대기 시간 {0 + (150 - 20) + (210 - 80) + (330 - 60) + (600 - 40)} / 5 = 218 → FCFS 스케줄링 알고리즘보다 짧다
RR 스케줄링에서 프로세스 실행 순서
아래 예는 시간 단위를 50이라고 했을 때이다
- RR 스케줄링에서 어떤 프로세스에서 응답 요청이 들어왔을 때 기다리는 최대 시간 (전체 프로세스 수 - 1) * 시간 단위
응답 속도가 다른 스케줄링보다 빠르지만, 콘텍스트 스위칭이 빈번히 일어나는 문제가 있으므로 시간 단위를 적절히 설정해야 한다
SRTF 스케줄링에서 프로세스 실행 순서
P1 처럼 프로세스가 중간에 중단된 경우, 수행 완료까지의 대기 시간을 합한다
- 평균 대기 시간 {(200 - 20) + (20 - 20) + (80 - 80) +(330 - 60) + (600 - 40)} / 5 = 202 → 다른 스케줄링 알고리즘보다 평균 대기 시간이 짧다
멀티 레벨 스케줄링에서 프로세스 실행 순서
준비 큐가 목적에 맞춰 여러 큐로 나뉘어 있고, 프로세스가 들어오면 해당 프로세스의 우선순위에 맞는 큐에 들어가 대기한다