선점(preemptive) 스케줄링은 실행 중인 프로세스에게서 CPU를 빼앗아 다른 프로세스에 줄 수 있는 방식입니다. 비선점에서는 긴 프로세스가 CPU를 잡으면 급하거나 짧은 프로세스도 끝날 때까지 기다려야 해서, 여러 사람이 함께 쓰는 시스템의 응답이 느려집니다.
CPU 스케줄링: 비선점의 네 규칙은 한번 준 CPU를 거두지 않았습니다. 선점 규칙은 시간이 다 되거나 더 급한 프로세스가 오면 돌던 프로세스를 끊습니다. 아래 그림은 앞 레슨과 같은 프로세스 넷을 선점 규칙 셋으로 다시 깔고, 막대가 잘리고 끼어드는 자리를 짚습니다.
1라운드 로빈 — 할당량만큼 돌아가며
프로세스 넷은 앞 레슨과 같습니다.
| 프로세스 | 도착 시각 | 실행 시간 | 우선순위 |
|---|---|---|---|
| P1 | 0 | 3 | 4 |
| P2 | 1 | 5 | 2 |
| P3 | 2 | 4 | 1 |
| P4 | 4 | 2 | 3 |
라운드 로빈(RR, Round Robin)은 정해진 시간 할당량(time quantum)만큼만 CPU를 주고, 그 안에 끝내지 못하면 준비 줄 맨 뒤로 보냅니다. 자료에 따라 할당량을 타임 슬라이스(time slice)라고도 부릅니다. 그림의 할당량은 3입니다.
할당량이 끝나는 시각에 새 프로세스가 도착하면 문제가 정한 차례를 따릅니다. 정하지 않았으면 새로 온 프로세스를 먼저 줄에 세우고, 잘린 프로세스를 그 뒤에 세우는 풀이가 흔합니다.
선점에서는 한 프로세스가 여러 토막으로 돌아, 대기 시간을 시작 시각으로 셀 수 없습니다. 반환 시간 − 실행 시간으로 셉니다. 모두가 자주 차례를 받아 응답은 빠르지만, 평균 대기는 오히려 길 수 있습니다.
할당량이 아주 크면 아무도 잘리지 않아 FCFS와 같아집니다. 아주 작으면 CPU를 넘기는 문맥 교환이 잦아져 그만큼 시간을 버립니다.
2SRT — 남은 시간이 가장 짧은 것
SRT(Shortest Remaining Time)는 남은 실행 시간이 가장 짧은 프로세스에 CPU를 줍니다. SJF를 선점으로 바꾼 것이라, 새 프로세스가 올 때마다 돌던 프로세스의 남은 시간과 견줍니다.
견주는 것은 처음 실행 시간이 아니라 남은 시간입니다. 시각 4에 P3의 실행 시간은 4였지만 1만큼 돌아 남은 시간이 3이고, 도착한 P4의 2가 더 짧아 CPU를 빼앗습니다.
그림에서도 평균 대기가 가장 짧지만, SJF처럼 긴 프로세스가 기아 상태에 빠질 수 있습니다.
3다단계 큐와 다단계 피드백 큐
다단계 큐(MLQ, Multi-Level Queue)는 준비 줄을 성격에 따라 여러 큐로 나누고, 큐마다 따로 규칙을 둡니다. 위 큐가 비어야 아래 큐가 돌고, 위 큐 프로세스가 오면 아래 큐 프로세스는 끊깁니다. 그림은 우선순위 1·2를 위 큐(라운드 로빈), 3·4를 아래 큐(FCFS)로 나눴습니다.
다단계 피드백 큐(MLFQ, Multi-Level Feedback Queue)는 프로세스가 큐 사이를 옮겨 다닐 수 있게 한 것입니다.
| 가르는 기준 | 다단계 큐 | 다단계 피드백 큐 |
|---|---|---|
| 큐 사이 이동 | 처음 정한 큐에 머문다 | 할당량을 다 쓰면 아래 큐로 내려간다 |
| 아래 큐 | 기아 상태에 빠질 수 있다 | 오래 기다리면 위로 올려 줄 수 있다(에이징) |
시험은 규칙을 선점과 비선점으로 나누게 합니다. 우선순위 방식은 두 가지가 다 있고, 기한부(deadline)는 프로세스마다 끝낼 기한을 주고 그 안에 마치게 하는 비선점 방식입니다.
| 비선점 | 선점 |
|---|---|
| FCFS·SJF·HRN·우선순위·기한부 | RR·SRT·선점 우선순위·다단계 큐·다단계 피드백 큐 |
예제
그림의 SRT를 표로 따라갑니다. 프로세스가 도착하거나 끝날 때마다 남은 시간을 견줍니다.
| 시각 | 남은 시간 | 고름 |
|---|---|---|
| 0 | P1 3 | P1 |
| 1 | P1 2 · P2 5 | P1 |
| 2 | P1 1 · P2 5 · P3 4 | P1 |
| 3 | P2 5 · P3 4 | P3 |
| 4 | P2 5 · P3 3 · P4 2 | P4(P3을 빼앗음) |
| 6 | P2 5 · P3 3 | P3 |
| 9 | P2 5 | P2 |
끝난 시각은 P1 3 · P4 6 · P3 9 · P2 14입니다. 대기 시간은 반환 시간 − 실행 시간으로 P1 3 − 3 = 0, P2 13 − 5 = 8, P3 7 − 4 = 3, P4 2 − 2 = 0이고, 평균은 11 ÷ 4 = 2.75입니다. 일곱 규칙을 견주면 다음과 같습니다.
| 규칙 | 평균 대기 | 평균 반환 |
|---|---|---|
| FCFS | 4 | 7.5 |
| SJF | 3 | 6.5 |
| HRN | 3.5 | 7 |
| 우선순위(비선점) | 3.75 | 7.25 |
| RR(할당량 3) | 5 | 8.5 |
| SRT | 2.75 | 6.25 |
| 다단계 큐 | 6 | 9.5 |
시험 포인트
- 필기: 선점은 돌던 프로세스의 CPU를 빼앗을 수 있습니다. RR은 할당량만큼 돌리고 줄 뒤로 보내며, 할당량이 크면 FCFS와 같아지고 작으면 문맥 교환이 잦아집니다. SRT는 남은 시간이 가장 짧은 것을 고르는 SJF의 선점판입니다. 다단계 큐는 큐 사이를 옮기지 못하고, 다단계 피드백 큐는 옮겨 다닙니다. 비선점은 FCFS·SJF·HRN·우선순위·기한부, 선점은 RR·SRT·선점 우선순위·다단계 큐·다단계 피드백 큐입니다. 선점에서 대기 시간은 반환 시간 − 실행 시간으로 셉니다.
- 실기: 라운드 로빈과 SRT의 평균 대기 시간을 계산해 문제가 정한 꼴대로 씁니다. 이름은 라운드 로빈(RR, Round Robin)·SRT(Shortest Remaining Time)·다단계 큐(MLQ, Multi-Level Queue)·다단계 피드백 큐(MLFQ, Multi-Level Feedback Queue)입니다.
확인 문제
1. SRT로 스케줄링하고 있습니다. 시각 5에 A가 돌고 있고 남은 시간은 4입니다. 준비 줄의 B는 남은 시간이 6입니다. 이때 실행 시간이 3인 C가 도착했습니다. 시각 5 바로 뒤에 CPU를 쓰는 프로세스를 고르세요.
- ① A
- ② B
- ③ C
- ④ A와 C가 한 단위씩 번갈아
정답
③입니다. 남은 시간은 A 4, B 6, C 3이라 C가 가장 짧습니다. SRT는 돌던 A에게서 CPU를 빼앗아 C에 줍니다.
- ① 돌던 프로세스를 끝까지 둔다고 봤습니다. 비선점의 생각입니다.
- ② 먼저 와서 기다린 프로세스를 골랐습니다. 도착순은 FCFS의 규칙입니다.
- ④ 돌아가며 나눠 쓴다고 봤습니다. 라운드 로빈의 생각입니다.
2. 다음 (가)~(라)에 맞는 이름을 쓰세요. (가)·(다)·(라)는 한글 이름과 영문 약어·원어로, (나)는 약어와 영문 원어로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 모든 프로세스에 같은 몫의 시간을 주고, 몫을 다 쓰면 줄 맨 뒤로 보내 차례를 돌립니다.
- (나) 끝날 때까지 남은 시간을 견주어, 그보다 더 빨리 끝날 프로세스가 오면 돌던 것을 멈추게 합니다.
- (다) 시스템 작업·대화형 작업·일괄 작업 줄을 따로 두고, 한번 들어간 줄에서 다른 줄로 옮기지 않습니다.
- (라) 처음에는 가장 위 줄에 넣고, 받은 몫을 다 쓸 때마다 한 줄씩 아래로 내립니다.
정답
받는 답: (가) 라운드 로빈(RR, Round Robin) · (나) SRT(Shortest Remaining Time) · (다) 다단계 큐(MLQ, Multi-Level Queue) · (라) 다단계 피드백 큐(MLFQ, Multi-Level Feedback Queue)
(가)의 실마리는 '같은 몫을 주고 줄 뒤로', (나)는 '남은 시간을 견준다', (다)는 '줄을 따로 두고 옮기지 않는다', (라)는 '몫을 다 쓰면 아래로 내린다'입니다.
- 틀리는 꼴 SJF — (나)에: 처음 실행 시간으로 고르고 돌던 것을 멈추지 않는 비선점입니다. (나)는 남은 시간으로 견주어 빼앗습니다.
- 틀리는 꼴 다단계 피드백 큐 — (다)에: 줄 사이를 옮겨 다닙니다. (다)는 옮기지 않습니다.
- 틀리는 꼴 다단계 큐 — (라)에: 한번 정한 줄에 머뭅니다. (라)는 아래로 내려갑니다.
3. 그림의 프로세스 넷에서 P4의 실행 시간만 2에서 4로 바꿨습니다. SRT로 스케줄링할 때 평균 대기 시간을 소수 첫째 자리까지 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답: 3.5
시각 4에 P4가 도착할 때 P3의 남은 시간은 3이고 P4는 4라, 이번에는 빼앗지 못합니다. 순서는 P1(0~3) → P3(3~7) → P4(7~11) → P2(11~16)입니다.
대기 시간은 P1 0, P3 7 − 2 − 4 = 1, P4 11 − 4 − 4 = 3, P2 16 − 1 − 5 = 10이고, (0 + 1 + 3 + 10) ÷ 4 = 3.5입니다.
- 틀리는 꼴 3.75: 시각 4에 P4가 빼앗는다고 봤습니다. P3의 처음 실행 시간 4와 견주면 그렇게 보이지만, 견주는 것은 남은 시간 3입니다.
4. 다음 네 프로세스를 라운드 로빈(할당량 2)으로 스케줄링할 때 평균 대기 시간을 소수 둘째 자리까지 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
| 프로세스 | 도착 시각 | 실행 시간 |
|---|---|---|
| A | 0 | 4 |
| B | 1 | 3 |
| C | 3 | 5 |
| D | 5 | 2 |
정답
받는 답: 4.25
| 토막 | 돈 프로세스 | 그 뒤 준비 줄 |
|---|---|---|
| 0~2 | A(남은 2) | B A |
| 2~4 | B(남은 1) | A C B |
| 4~6 | A(끝) | C B D |
| 6~8 | C(남은 3) | B D C |
| 8~9 | B(끝) | D C |
| 9~11 | D(끝) | C |
| 11~14 | C(끝) | — |
대기 시간은 반환 시간 − 실행 시간으로 A 6 − 4 = 2, B 8 − 3 = 5, C 11 − 5 = 6, D 6 − 2 = 4이고, (2 + 5 + 6 + 4) ÷ 4 = 4.25입니다.
- 틀리는 꼴 3.5: 할당량 없이 도착순으로 끝까지 돌렸습니다. FCFS의 답입니다.