プロセススケジューリングとデッドロック:ラウンドロビン・優先度順と4大発生条件の対策
CPUが一つでも複数の処理が動いて見えるのはなぜでしょうか?
OSが実行する処理を切り替えるからです。実行順序を時刻で追い、待ち時間と、互いに資源を待ち続けるデッドロックを区別します。
プロセスの3つの状態と状態遷移
ここでは実行可能・実行中・待機の3状態に注目します。実際のOSでは、生成・終了・中断などを別の状態として扱うこともあります。
I/Oを要求した処理は待機し、完了後に実行可能へ戻ります。
プロセス状態 | 状態の意味 | 次の状態への遷移契機 |
|---|---|---|
実行可能状態 (Ready) | CPUさえ割り当てられれば即座に実行できる状態 | スケジューラによってCPUが割り当てられる(ディスパッチ)→ 実行中へ |
実行中状態 (Running) | 現在CPUを使って命令を実行している状態 | ・タイムクウォンタム満了(時間切れ)→ 実行可能へ ・I/O要求や入出力待ち発生 → 待機状態へ |
待機状態 (Waiting / Blocked) | ディスク読込やネットワーク応答などの入出力完了を待っている状態 | 入出力完了の割込み通知を受ける → 実行可能状態へ |
代表的なプロセススケジューリング方式
CPUをどのプロセスに優先して割り当てるかを決めるアルゴリズムです。
スケジューリング方式 | 割り当てのルール | メリットと特徴 | 注意点・デメリット |
|---|---|---|---|
ラウンドロビン方式 | 一定のCPU時間(タイムスライス)を順番に均等に割り当てる | すべてのプロセスが公平に処理され、応答性が良い(TSS向き) | 時間を短くしすぎるとコンテキストスイッチのオーバーヘッドが増大 |
優先度順方式 | プロセスに静的・動的優先度を付け、高いものから実行 | 重要な緊急タスクを最優先で処理できる | 低優先度プロセスが放置される「飢餓(Starvation)」が発生 |
残余処理時間順 | 残りの処理時間が最も短いプロセスを優先して割り当てる | 平均ターンアラウンドタイムを理論上最小化できる | 各プロセスの残り実行時間を正確に予測するのが困難 |
エージングは待ち時間に応じて優先度を上げ、飢餓を抑える仕組みです。実行の保証は、優先度の上限やスケジューラの規則などにも依存します。
デッドロック(Deadlock)の発生4条件と対策
複数のプロセスが互いの保持する資源を待ち、関係するプロセスが先へ進めない状態をデッドロックと呼びます。OSのすべてのプロセスが停止するとは限りません。
デッドロックが成立する4大条件(コフマンの条件)
- 相互排除 (Mutual Exclusion)
リソースを同時に1つのプロセスしか排他的に使用できない。
- 占有と待機 (Hold and Wait)
すでにリソースを確保したまま、別のリソースの解放を待機する。
- 非横取り (No Preemption)
他プロセスが使用中のリソースを強制的に奪うことができない。
- 循環待機 (Circular Wait)
プロセス間でリソースの要求関係が円環状(輪)になっている。
4条件はデッドロックの必要条件です。少なくとも一つを成立させない設計にすれば予防できます。例えば、資源の取得順序を統一して循環待機を防ぎます。複数個ある資源では、単に循環があるだけで発生を断定できない場合があります。
ラウンドロビン:完了時刻と待ち時間を求める
CPU処理時間がそれぞれ 5ミリ秒、3ミリ秒、2ミリ秒の 3つのプロセス A, B, C がこの順で同時に到着した。タイムクウォンタムを 2ミリ秒とするラウンドロビン方式で処理したとき、プロセス C が完了するまでの時間は何ミリ秒か。
(※コンテキストスイッチの時間は無視する)
【選択肢】
- ア
4 ミリ秒
- イ
6 ミリ秒
- ウ
8 ミリ秒
- エ
10 ミリ秒
解説と解答
正解:イ(6 ミリ秒)
時間帯 | 実行プロセス | 処理時間 | 各プロセスの残り処理時間 [A, B, C] |
|---|---|---|---|
0 〜 2 ms | プロセス A | 2 ms 実行 (5 → 3) | [A:3, B:3, C:2] |
2 〜 4 ms | プロセス B | 2 ms 実行 (3 → 1) | [A:3, B:1, C:2] |
4 〜 6 ms | プロセス C | 2 ms 実行 (2 → 0) | [A:3, B:1, C:0] 完了! |
プロセス C は 2ミリ秒で終了するため、第1周目のタイムスライス(4〜6 ms)でピッタリ完了します。したがって、完了時刻は 6 ミリ秒です。
同じ演習で平均待ち時間まで求める
到着時刻は全て0、I/O待ちはなく、切替時間も0です。Cの完了後は、Aが6〜8ms、Bが8〜9ms、Aが9〜10msに動きます。
処理 | 完了時刻 | CPU処理時間 | 待ち時間=完了−到着−CPU |
|---|---|---|---|
A | 10ms | 5ms | 5ms |
B | 9ms | 3ms | 6ms |
C | 6ms | 2ms | 4ms |
平均待ち時間は(5+6+4)÷3=5msです。完了時刻、ターンアラウンド時間、待ち時間を混同しないようにします。
予防・回避・検出後の回復の違い
- 予防
取得順序の統一などで、発生条件を成立させません。
- 回避
銀行家のアルゴリズムなどで安全状態を保てる割当てを選びます。安全でない状態は、既にデッドロックした状態と同義ではありません。
- 検出と回復
発生を調べ、選んだ処理の中断・ロールバックなどで待ち合いを解消します。
まとめ:OS制御の重要キーワード総まとめ
プロセスの3状態は「実行可能」「実行中」「待機」。
ラウンドロビンは公平なタイムスライス分割(TSS)。
低優先度プロセスの飢餓を防ぐのは「エージング」。
デッドロックの4条件のうち一つを成立させなければ予防できる。4条件の有無と、実際の資源割当てを確認する。
出典と仕様を確認する
次におすすめの学習
編集・検証について
編集・検証:IT資格ラボ編集部
IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。
編集方針・情報源・訂正方針を見る