24단원 '운영체제: 프로세스'의 다섯 레슨에서 6문제, 앞 단원(20·21)에서 2문제를 섞었고, 끝에 실기 꼴 3문제가 있습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 스케줄링 계산은 종이에 간트 차트를 그려 풀어 보세요. 실기 꼴은 종이에 답을 끝까지 쓴 뒤 펼치세요. 띄어쓰기만 다르면 같은 답입니다.
문제 1
UNIX에 대한 설명으로 옳지 않은 것을 고르세요.
- ① 대부분 C 언어로 작성되어, 다른 기종의 컴퓨터로 옮겨 돌리기 좋다
- ② 여러 사용자가 동시에 접속해 저마다 여러 작업을 돌릴 수 있다
- ③ 커널은 컴퓨터가 켜질 때 메모리에 올라와 꺼질 때까지 머문다
- ④ 셸은 시스템에 하나만 있어, 모든 사용자가 같은 셸로 명령을 친다
정답
④ — 셸은 사용자가 친 명령을 해석해 전하는 명령어 해석기이고, sh·bash·csh·ksh처럼 여럿 가운데 사용자마다 골라 씁니다. 시스템에 하나뿐인 것은 커널입니다.
- ① 맞습니다. 대부분 C로 작성되어 다른 기계로 옮기기 좋은, 이식성이 높은 운영체제입니다.
- ② 맞습니다. UNIX는 다중 사용자·다중 작업을 지원합니다.
- ③ 맞습니다. 커널은 켜질 때 메모리에 올라와 꺼질 때까지 머물며 자원을 관리합니다.
다시 볼 레슨: 운영체제의 역할과 종류
문제 2
음악 재생 앱 프로세스 하나 안에서 소리를 내는 스레드와 다음 곡을 미리 읽어 두는 스레드가 함께 돕니다. 두 스레드가 (가) 프로그램 코드와 데이터를, (나) 스택을 어떻게 쓰는지 알맞은 것을 고르세요.
- ① (가) 스레드마다 따로 둔다 · (나) 스레드마다 따로 둔다
- ② (가) 스레드마다 따로 둔다 · (나) 함께 쓴다
- ③ (가) 함께 쓴다 · (나) 함께 쓴다
- ④ (가) 함께 쓴다 · (나) 스레드마다 따로 둔다
정답
④ — 한 프로세스 안의 스레드는 그 프로세스의 코드·데이터·열린 파일을 함께 씁니다. 실행 흐름은 저마다 따로라, 흐름을 따라가는 PC·레지스터·스택은 스레드마다 둡니다.
- ① 스레드를 프로세스 여럿처럼 봤습니다. 코드·데이터까지 따로 두는 것은 프로세스 여럿이고, 스레드는 이것을 함께 써서 만들고 바꾸는 부담이 작습니다.
- ② 둘을 뒤바꿨습니다. 코드·데이터를 함께 쓰고, 스택을 스레드마다 둡니다.
- ③ 스택까지 함께 쓴다고 봤습니다. 두 스레드는 서로 다른 함수를 부르며 따로 돌므로, 돌아갈 자리를 쌓는 스택은 저마다 있어야 합니다.
다시 볼 레슨: 프로세스와 스레드
문제 3
프로세스 넷이 다음과 같이 도착합니다.
| 프로세스 | 도착 시각 | 실행 시간 |
|---|---|---|
| W | 0 | 6 |
| X | 1 | 4 |
| Y | 3 | 1 |
| Z | 5 | 2 |
비선점 SJF로 스케줄링할 때 평균 반환 시간으로 알맞은 것을 고르세요.
- ① 3.25
- ② 6.5
- ③ 7
- ④ 7.75
정답
② — 시각 0에는 W뿐이라 W(0~6)가 돌고, 비선점이라 끝날 때까지 쥡니다. 시각 6에 X(4)·Y(1)·Z(2)가 기다려 가장 짧은 Y(6~7), 다음 Z(7~9), 마지막 X(9~13) 차례입니다.
| 프로세스 | 끝난 시각 | 반환 시간 |
|---|---|---|
| W | 6 | 6 − 0 = 6 |
| Y | 7 | 7 − 3 = 4 |
| Z | 9 | 9 − 5 = 4 |
| X | 13 | 13 − 1 = 12 |
(6 + 4 + 4 + 12) ÷ 4 = 6.5입니다.
- ① 평균 대기 시간을 셌습니다. 반환 시간은 끝난 시각 − 도착 시각이고, 대기 시간은 거기서 실행 시간을 한 번 더 뺀 값입니다.
- ③ HRN으로 셌습니다. 시각 7에 기다린 시간까지 넣어 견주면 X가 Z보다 앞서지만, SJF는 실행 시간만 봅니다.
- ④ FCFS로 셌습니다. 도착순(W X Y Z)이 아니라 실행 시간이 짧은 순으로 고릅니다.
다시 볼 레슨: CPU 스케줄링: 비선점
문제 4
비선점 SJF가 다음에 CPU를 줄 프로세스를 고르는 방식을 알고리즘 설계 기법으로 보면, 어느 것에 가장 가까운지 고르세요.
- ① 분할 정복
- ② 동적 계획법
- ③ 탐욕 알고리즘
- ④ 백트래킹
정답
③ — SJF는 CPU가 빌 때마다 그 순간 기다리는 프로세스 가운데 가장 짧은 것을 고르고, 고른 것을 끝날 때까지 무르지 않습니다. 단계마다 그 자리에서 가장 좋아 보이는 것을 고르고 다시 무르지 않는 것이 탐욕 알고리즘입니다.
- ① 나눠 풀고 합친다고 봤습니다. SJF는 프로세스 묶음을 나누지 않고, 빌 때마다 하나씩 고릅니다.
- ② 앞에서 구한 답을 표에 적어 다시 쓴다고 봤습니다. SJF는 지난 선택을 적어 두었다가 꺼내 쓰지 않습니다.
- ④ 막히면 되돌아가 다른 것을 고른다고 봤습니다. 비선점 SJF는 한번 준 CPU를 거두지 않아, 고른 것을 무르지 않습니다.
다시 볼 레슨: 알고리즘 설계 기법 · CPU 스케줄링: 비선점
문제 5
라운드 로빈의 시간 할당량을 (가) 어느 프로세스의 실행 시간보다도 크게 잡을 때와 (나) 아주 작게 잡을 때 일어나는 일로 알맞은 것을 고르세요.
- ① (가) FCFS와 같아진다 · (나) 문맥 교환이 잦아진다
- ② (가) FCFS와 같아진다 · (나) 기아 상태가 생긴다
- ③ (가) SJF와 같아진다 · (나) 문맥 교환이 잦아진다
- ④ (가) SJF와 같아진다 · (나) 기아 상태가 생긴다
정답
① — 할당량이 어느 실행 시간보다도 크면 아무도 잘리지 않아, 줄에 선 차례(도착순)로 끝까지 도는 FCFS와 같아집니다. 아주 작으면 CPU를 넘기는 문맥 교환이 잦아지고, 그동안 CPU는 쓸모 있는 일을 하지 못합니다.
- ② (나)를 잘못 봤습니다. 할당량이 작아도 모두가 돌아가며 차례를 받으므로 끝없이 밀리는 프로세스는 없습니다.
- ③ (가)를 잘못 봤습니다. 잘리지 않으면 줄에 선 차례대로 돌 뿐, 실행 시간이 짧은 순으로 다시 고르지 않습니다.
- ④ 둘 다 잘못 봤습니다. 크면 도착순으로 끝까지 돌고, 작으면 문맥 교환이 잦아집니다.
다시 볼 레슨: CPU 스케줄링: 선점 · 프로세스와 스레드
문제 6
라운드 로빈의 준비 줄을 칸 여섯(0~5번)짜리 원형 큐로 만들었습니다. front는 맨 앞 프로세스의 바로 앞 칸을, rear는 맨 뒤 프로세스의 칸을 가리키고, 빈 줄과 가득 찬 줄을 가리려고 칸 하나를 늘 비워 둡니다. (가) 이 줄에 한꺼번에 설 수 있는 프로세스 수와 (나) 줄에 빈자리가 있고 rear가 5일 때 다음 프로세스가 들어가는 칸으로 알맞은 것을 고르세요.
- ① (가) 5 · (나) 0번
- ② (가) 5 · (나) 6번
- ③ (가) 6 · (나) 0번
- ④ (가) 6 · (나) 6번
정답
① — 칸 하나를 늘 비워 두므로 여섯 칸에 다섯까지 섭니다. 넣을 때 rear를 (rear + 1) % 6으로 옮기므로, 5번 다음은 0번 칸입니다.
- ② (나)에서
% 6을 빼먹었습니다. 칸 번호는 0~5뿐이라 6번 칸은 없고, 끝 칸 다음은 첫 칸입니다. - ③ (가)에서 칸 수를 그대로 셌습니다. 여섯 칸을 다 채우면 rear가 front와 같아져 빈 줄과 구별되지 않아, 하나를 비워 둡니다.
- ④ 두 가지를 다 놓쳤습니다. 다섯까지 서고, 5번 다음은 0번입니다.
다시 볼 레슨: 스택과 큐 · CPU 스케줄링: 선점
문제 7
교착 상태가 생기려면 한꺼번에 성립해야 하는 네 조건이 있습니다. 그 네 조건에 들지 않는 것을 고르세요.
- ① 상호 배제
- ② 점유와 대기
- ③ 선점
- ④ 환형 대기
정답
③ — 네 조건은 상호 배제·점유와 대기·비선점·환형 대기입니다. 조건은 쥔 자원을 남이 빼앗을 수 없다는 비선점이고, 빼앗을 수 있다면 기다리던 쪽이 자원을 가져가 기다림의 원이 풀립니다.
- ① 맞습니다. 자원 하나를 한 번에 한 프로세스만 쓰는 조건입니다.
- ② 맞습니다. 자원을 쥔 채 다른 자원을 기다리는 조건입니다.
- ④ 맞습니다. 기다림이 원을 이루는 조건입니다.
다시 볼 레슨: 교착 상태
문제 8
자원 11개를 프로세스 넷이 나눠 씁니다. 지금 상태가 다음과 같을 때, 은행원 알고리즘으로 찾은 안전 순서로 알맞은 것을 고르세요.
| 프로세스 | 최대 요구 | 가진 것 |
|---|---|---|
| P1 | 9 | 4 |
| P2 | 3 | 2 |
| P3 | 8 | 1 |
| P4 | 6 | 3 |
- ① P2 → P4 → P3 → P1
- ② P2 → P4 → P1 → P3
- ③ P3 → P2 → P4 → P1
- ④ 안전 순서가 없다
정답
② — 나눠 준 것이 4 + 2 + 1 + 3 = 10개라 남은 것은 1개이고, 더 필요한 것(최대 요구 − 가진 것)은 P1 5 · P2 1 · P3 7 · P4 3입니다. 끝낼 수 있는 프로세스를 찾고, 끝나면 가졌던 것을 돌려받는다고 셈합니다.
| 차례 | 남은 것 | 끝낼 수 있는 프로세스 | 끝난 뒤 남은 것 |
|---|---|---|---|
| 1 | 1 | P2(1 필요) | 1 + 2 = 3 |
| 2 | 3 | P4(3 필요) | 3 + 3 = 6 |
| 3 | 6 | P1(5 필요) | 6 + 4 = 10 |
| 4 | 10 | P3(7 필요) | 10 + 1 = 11 |
- ① 최대 요구가 작은 차례로 줄 세웠습니다. P2·P4가 끝난 뒤 남은 6개로는 7개가 더 필요한 P3을 끝낼 수 없습니다. 6개로 끝낼 수 있는 것은 5개가 더 필요한 P1입니다.
- ③ 가진 것을 더 필요한 것으로 읽었습니다. P3은 1개를 가졌을 뿐 더 필요한 것은 8 − 1 = 7개라, 남은 1개로는 첫 차례부터 막힙니다.
- ④ 최대 요구를 남은 것과 견줬거나, 끝난 프로세스의 자원을 돌려받지 않았습니다. 견주는 것은 더 필요한 것이고, 끝난 프로세스가 가졌던 자원은 남은 것에 더합니다.
다시 볼 레슨: 교착 상태
문제 9 (실기)
프로세스 넷이 다음과 같이 도착합니다. SRT로 스케줄링할 때 평균 대기 시간을 소수 둘째 자리까지 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
| 프로세스 | 도착 시각 | 실행 시간 |
|---|---|---|
| W | 0 | 6 |
| X | 1 | 4 |
| Y | 3 | 1 |
| Z | 5 | 2 |
정답
받는 답: 2.25
SRT는 프로세스가 도착하거나 끝날 때마다 남은 시간을 견주어, 가장 짧은 것에 CPU를 줍니다.
| 시각 | 남은 시간 | 고름 |
|---|---|---|
| 0 | W 6 | W |
| 1 | W 5 · X 4 | X(W를 빼앗음) |
| 3 | W 5 · X 2 · Y 1 | Y(X를 빼앗음) |
| 4 | W 5 · X 2 | X |
| 5 | W 5 · X 1 · Z 2 | X |
| 6 | W 5 · Z 2 | Z |
| 8 | W 5 | W |
끝난 시각은 Y 4 · X 6 · Z 8 · W 13입니다. 대기 시간은 반환 시간 − 실행 시간으로 W 13 − 6 = 7, X 5 − 4 = 1, Y 1 − 1 = 0, Z 3 − 2 = 1이고, (7 + 1 + 0 + 1) ÷ 4 = 2.25입니다.
- 틀리는 꼴 2.50: 시각 5에 Z가 X를 빼앗는다고 봤습니다. X의 처음 실행 시간 4와 견주면 그렇게 보이지만, 견주는 것은 남은 시간 1입니다.
- 틀리는 꼴 3.25: 빼앗지 않는 SJF로 셌습니다. SRT는 새 프로세스가 올 때마다 돌던 것의 남은 시간과 견줍니다.
- 틀리는 꼴 5.50: 평균 반환 시간을 셌습니다. 대기 시간은 반환 시간에서 실행 시간을 뺍니다.
다시 볼 레슨: CPU 스케줄링: 선점
문제 10 (실기)
어느 운영체제의 설계입니다. (가)·(나)에 맞는 이름을 영문 약어로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 실행 중인 프로그램마다 하나씩 생겨, 그 프로그램의 번호·지금 상태·다음에 실행할 명령의 자리·레지스터 값·열어 둔 파일을 담습니다. CPU를 다른 프로그램에 넘길 때 멈춘 자리를 여기에 적어 둡니다.
- (나) 준비 줄을 위아래로 여러 개 둡니다. 새로 들어온 것은 맨 윗줄에 서고, 할당량을 다 쓰고도 끝나지 않으면 한 줄 아래로 옮겨 섭니다. 아랫줄에서 너무 오래 기다리면 윗줄로 다시 올려 줍니다.
정답
받는 답: (가) PCB · (나) MLFQ
(가)의 실마리는 '프로그램마다 하나씩, 번호·상태·다음 명령 자리를 담는 기록', (나)는 '줄을 여럿 두고, 할당량을 다 쓰면 아랫줄로, 오래 기다리면 윗줄로 옮긴다'입니다.
- 같은 이름의 다른 꼴: (가) Process Control Block · 프로세스 제어 블록, (나) Multi-Level Feedback Queue · 다단계 피드백 큐 — 원어와 한글 이름입니다. 문제가 영문 약어로 물었습니다.
- 틀리는 꼴 문맥 교환 — (가)에: CPU를 넘길 때 (가)에 적고 꺼내는 일의 이름입니다. (가)는 그 기록 자체입니다.
- 틀리는 꼴 MLQ — (나)에: 다단계 큐는 처음 정한 줄에 머물러 줄 사이를 옮기지 않습니다. (나)는 아래로 내리고 위로 올립니다.
- 틀리는 꼴 RR — (나)에: 라운드 로빈은 줄 하나에서 할당량만큼 돌리고 맨 뒤로 보냅니다. 줄을 여럿 두지 않습니다.
다시 볼 레슨: 프로세스와 스레드 · CPU 스케줄링: 선점
문제 11 (실기)
운영체제가 교착 상태를 찾으려고 자원 할당 그래프의 정점을 차례로 방문합니다. 출발한 정점에서 이웃 하나로 들어가고, 거기서 또 이웃 하나로 들어가기를 막힐 때까지 되풀이합니다. 막히면 바로 전 정점으로 물러나 아직 가지 않은 이웃을 찾고, 물러날 자리는 스택에 쌓아 둡니다. 이렇게 그래프를 방문하는 방법의 이름을 한글로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.