応用情報技術者試験 科目A #9 — OS・仮想記憶・デッドロック
応用情報技術者試験の科目Aに必要なプロセス・スレッドと状態遷移、ラウンドロビンのトレース、FIFO・LRUのページ置換え、スラッシング、デッドロックと安全状態を、例題とオリジナル演習問題5問で学びます。
AP科目A・第9回 · 2026年度・シラバスVer.7.2に基づく独立した学習資料です。IPAとの提携はなく、合格を保証しません。 シリーズ一覧を見る
改訂日: 2026-10-21 · 出典確認日: 2026-10-21 · 基準: 2026年 IPA 応用情報技術者試験(AP)科目A、シラバス Ver.7.2 免責事項: 本記事は Motitory Labs が独自に作成した学習資料であり、IPA(独立行政法人情報処理推進機構)とは関係がなく、IPA の承認・推奨を受けたものではありません。試験の範囲・形式・シラバスは変更される可能性があるため、受験前に必ず IPA 公式サイトで最新情報を確認してください。掲載問題はすべて本記事のために新たに作成したオリジナル問題であり、過去問題を転載したものではありません。
学習インデックス
- 範囲と公式シラバス上の位置
- プログラム・プロセス・スレッド
- プロセスの状態遷移
- スケジューリングとラウンドロビンのトレース
- 仮想記憶とページング
- FIFO・LRU ページ置換えのトレース
- スラッシング
- デッドロック
- 用語対照表(KO/JA/EN)
- クイックシート
- よくある誤り
- オリジナル演習問題 5問
- セルフチェック
- 1・3・7日復習プラン
- 公式出典・シラバス対応表
1. 範囲と公式シラバス上の位置
今回はシラバス Ver.7.2「大分類2:コンピュータシステム/中分類5:ソフトウェア/1. オペレーティングシステム」のうち、次の項目を扱います(正確な対応は15章)。
- (2) OSの機能と構成 — プロセス管理、仮想記憶管理、多重(マルチ)プログラミング
- (4)① タスクと状態遷移 — プロセス、スレッド、実行可能/実行/待ち状態、ディスパッチャ
- (4)② 多重プログラミングとスケジューリング — FCFS、SJF、優先順、ラウンドロビン、タイムクウォンタム、リソーススタベーション、排他制御
- (7)② 仮想記憶管理 — DAT、TLB、ページフォールト、ページイン/アウト、デマンドページング、LRU、FIFO、スラッシング、ワーキングセット
デッドロックはシラバスの用語例には直接挙げられておらず、(4)②「同期制御・排他制御」の範囲から派生する資源割当ての問題として扱います。ファイルシステム、入出力、分散OS、データベースのトランザクションにおけるデッドロック、特定カーネルの実装は今回の範囲外です。
2. プログラム・プロセス・スレッド
| 区分 | 意味 | ポイント |
|---|---|---|
| プログラム | ディスク等に格納された命令とデータの集まり | 静的な「実行ファイル」 |
| プロセス | 実行中のプログラムのインスタンス | OS からアドレス空間と資源(オープン中のファイルなど)を割り当てられる単位 |
| スレッド | プロセス内の実行の流れ(軽量プロセス) | CPU スケジューリングの実行単位となることが多い |
- 同一プロセス内のスレッドは、通常、アドレス空間(コード・データ・ヒープ)とオープン中のファイルなどの資源を共有します。
- 一方、各スレッドは固有のプログラムカウンタ、レジスタの内容(コンテキスト)、スタックをもちます。
- メモリを共有するため生成・切替えのコストはプロセスより一般に小さいものの、共有データを同時に更新すると競合状態が起こるため、排他制御(ミューテックス、セマフォなど)や同期制御は依然として必要です。
- スレッドの実装方式(ユーザレベル/カーネルレベル)やスケジューリング単位は OS によって異なるため、「必ず○○である」という断定は避けましょう。
3. プロセスの状態遷移
基本の3状態モデル:
ディスパッチ
実行可能状態 ─────────────▶ 実行状態
(Ready) ◀───────────── (Running)
▲ プリエンプション/タイムスライス満了 │
│ │ 入出力要求・事象待ち
│ 事象の完了 ▼
└───────────────────────────────── 待ち状態 (Waiting / Blocked)
- ディスパッチ: ディスパッチャが実行可能キューから1つを選び CPU を割り当てる → 実行状態。
- プリエンプション(横取り): タイムクウォンタムの満了や、より優先度の高いタスクの出現によって CPU を奪われる → 実行可能状態へ戻る(待ち状態ではない)。
- 待ち状態(ブロック): 入出力完了などの事象を待つ状態。CPU が空いていても実行できません。
- 待ち → 実行可能: 事象が完了してもすぐ実行されるのではなく、実行可能キューに戻って再びディスパッチを待ちます。つまり**「待ち」は「実行可能」ではなく、待ち → 実行への直接遷移は基本モデルにありません。**
4. スケジューリングとラウンドロビンのトレース
| 方式 | 横取り | 選択基準 | 特徴・リスク |
|---|---|---|---|
| FCFS(到着順) | ノンプリエンプティブ | 到着順 | 単純。長い処理の後ろで短い処理が長く待たされる(コンボイ効果) |
| SJF(ノンプリエンプティブ) | ノンプリエンプティブ | 残り/予測 CPU バーストが最短のもの | 平均待ち時間を短くしやすい。長い処理はスタベーションの危険。バースト長の予測が必要 |
| 優先順 | どちらもあり得る | 優先度 | 低優先度がスタベーションの危険 → エージング(待ち時間に応じて優先度を上げる)で緩和 |
| ラウンドロビン(RR) | プリエンプティブ | 到着順+タイムクウォンタム | 応答性が公平。クウォンタムが小さすぎるとコンテキスト切替えのオーバヘッド増、大きすぎると FCFS に近づく |
トレース時に必ず明示する条件: 到着時刻、CPU バースト、コンテキスト切替え時間、同時到着・同順位時の扱い、タイムクウォンタム、初期の実行可能キュー。条件が異なれば答えも変わります。
公式: ターンアラウンドタイム = 完了時刻 − 到着時刻、待ち時間 = ターンアラウンドタイム − CPU バースト(入出力がない場合)。
必須トレース: RR、クウォンタム = 2
条件: P1・P2・P3 はすべて t=0 に P1→P2→P3 の順で到着、CPU バーストは 5/3/1、タイムクウォンタム 2、コンテキスト切替え時間 0、入出力なし、新たな到着なし。クウォンタムを使い切っても処理が残るプロセスはキューの末尾へ回ります。
| 時刻 | 事象 | 実行 | 実行後の残りバースト | 実行可能キュー(先頭→末尾)、区間終了後 |
|---|---|---|---|---|
| 0 | 初期キュー [P1, P2, P3] | P1 0–2 | P1=3 | [P2, P3, P1] |
| 2 | P1 横取り → 末尾へ | P2 2–4 | P2=1 | [P3, P1, P2] |
| 4 | P2 横取り → 末尾へ | P3 4–5 | P3=0(t=5 完了) | [P1, P2] |
| 5 | P3 完了(クウォンタム途中で終了) | P1 5–7 | P1=1 | [P2, P1] |
| 7 | P1 横取り → 末尾へ | P2 7–8 | P2=0(t=8 完了) | [P1] |
| 8 | P2 完了 | P1 8–9 | P1=0(t=9 完了) | [] |
ガントチャート: P1 0–2 | P2 2–4 | P3 4–5 | P1 5–7 | P2 7–8 | P1 8–9
| プロセス | バースト | 完了 | ターンアラウンド | 待ち時間(ターンアラウンド−バースト) |
|---|---|---|---|---|
| P1 | 5 | 9 | 9 | 4 |
| P2 | 3 | 8 | 8 | 5 |
| P3 | 1 | 5 | 5 | 4 |
| 合計/平均 | 22 / 7.33 | 13 / 13/3 ≈ 4.33 |
参考: 同じ条件の FCFS でも平均待ち時間は (0+5+8)/3 = 13/3 と偶然一致します。平均値だけで方式を判別せず、タイムラインで確認しましょう。ノンプリエンプティブ SJF なら P3→P2→P1 の順に実行され、待ち時間 P1/P2/P3 = 4/1/0、平均 5/3 ≈ 1.67 です。
5. 仮想記憶とページング
- 仮想ページ/ページフレーム: 仮想アドレス空間を固定長のページに、実記憶を同じ大きさのページフレームに分割します。
- ページテーブルとアドレス変換(DAT): 仮想アドレス =(ページ番号, ページ内オフセット)。ページテーブルでページ番号 → フレーム番号を求め、オフセットを付けて実アドレスを得ます。ハードウェア(MMU)が動的に行います。
- TLB: 最近使われたアドレス変換結果(ページ番号→フレーム番号)を保持するキャッシュです。データやページの内容そのものを保持するキャッシュではありません。TLB ミスはページテーブルを参照すれば解決でき、ページフォールトとは別の概念です。
- デマンドページング: 参照された時点で、必要なページを実記憶へ読み込みます。
- ページフォールト: 現在の命令が実記憶にないページを参照したときに発生する**同期的なプロセッサ例外(フォールト)**であり、非同期のハードウェア割込みとは異なります。OS の例外処理が補助記憶からページを読み込みます(ページイン)。空きフレームがなければ置換え対象を選んで追い出します。
- ダーティページの注意: 追出し対象が読み込み後に更新された(ダーティな)ページであれば、ページアウト(書戻し)として補助記憶へ書く必要がありますが、更新されていないページは補助記憶上に有効な複製があれば書込みなしで破棄できます。したがって「追出しのたびに必ずページアウトの書込みが発生する」という断定は不正確です。
FIFO と LRU
| 方式 | 置換え対象 | ヒット時 |
|---|---|---|
| FIFO | 最も早く読み込まれたページ | 読込み順は変わらない |
| LRU | 最も長く参照されていないページ | そのページの最終参照時刻が更新される |
LRU は多くの参照パターンで FIFO よりページフォールトが少ない傾向がありますが、常にそうなるとは限りません。 結果は参照列とフレーム数に依存します。
6. FIFO・LRU ページ置換えのトレース
条件: フレーム3個(初期状態はすべて空き)、参照列 1, 2, 3, 1, 4, 1, 2, 5、先読みなし、1回に1参照、FIFO は最も早く読み込まれたページを決定的に置換え、LRU は厳密に最も長く参照されていないページを置換え(同順位なし)。空きフレームがあれば置換えせずに格納します。フレーム列はスロット位置(追い出されたスロットに新ページが入る)です。
FIFO
| # | 参照 | 結果 | 追出し | フレーム [スロット1, 2, 3] | 読込み順(古→新) |
|---|---|---|---|---|---|
| 1 | 1 | フォールト | – | [1, -, -] | 1 |
| 2 | 2 | フォールト | – | [1, 2, -] | 1, 2 |
| 3 | 3 | フォールト | – | [1, 2, 3] | 1, 2, 3 |
| 4 | 1 | ヒット | – | [1, 2, 3](変化なし) | 1, 2, 3(変化なし) |
| 5 | 4 | フォールト | 1 | [4, 2, 3] | 2, 3, 4 |
| 6 | 1 | フォールト | 2 | [4, 1, 3] | 3, 4, 1 |
| 7 | 2 | フォールト | 3 | [4, 1, 2] | 4, 1, 2 |
| 8 | 5 | フォールト | 4 | [5, 1, 2] | 1, 2, 5 |
FIFO のページフォールト = 7回(ヒットは4番目の参照の1回のみ)。
LRU
| # | 参照 | 結果 | 追出し | フレーム [スロット1, 2, 3] | 参照の新しさ(古→新) |
|---|---|---|---|---|---|
| 1 | 1 | フォールト | – | [1, -, -] | 1 |
| 2 | 2 | フォールト | – | [1, 2, -] | 1, 2 |
| 3 | 3 | フォールト | – | [1, 2, 3] | 1, 2, 3 |
| 4 | 1 | ヒット | – | [1, 2, 3] | 2, 3, 1(1 を更新) |
| 5 | 4 | フォールト | 2 | [1, 4, 3] | 3, 1, 4 |
| 6 | 1 | ヒット | – | [1, 4, 3] | 3, 4, 1 |
| 7 | 2 | フォールト | 3 | [1, 4, 2] | 4, 1, 2 |
| 8 | 5 | フォールト | 4 | [1, 5, 2] | 1, 2, 5 |
LRU のページフォールト = 6回。追出しは、4 の参照時に 2、2 の再参照時に 3、5 の参照時に 4。最終フレームは [1, 5, 2]。
差が出る理由: 4番目の参照(1 のヒット)は FIFO では何も変えないため、次のフォールトで 1 が追い出されます。LRU では 1 の最終参照が更新されるので 1 が残り、6番目の参照がヒットになります。
7. スラッシング
- 定義: ページフォールトとページイン/アウトが過剰かつ継続的に発生し、CPU が有効な処理よりページング待ちに時間を費やして、スループットと CPU 使用率が急激に低下する現象。
- 原因: 多重度が高く、各プロセスに割り当てられたフレームが活発に使われるワーキングセットより不足しているとき。
- 悪循環: CPU 使用率が低く見えるからとプロセスをさらに投入すると、フレームが一層不足して悪化します。プロセスを増やすことは解決策ではありません。
- 対策: 多重度を下げる(一部プロセスの中断・スワップアウト)、ワーキングセットを収められるだけのフレームを割り当てる、ワーキングセット方式やページフォールト頻度(PFF)制御で割当て量を調整する、実記憶を増設する。
- 置換えアルゴリズムを変えるだけでスラッシングが必ず解消するわけではありません。根本原因はフレーム不足です。
8. デッドロック
8.1 4つの必要条件(Coffman の条件)
- 相互排除(mutual exclusion): 資源は同時に1つのプロセスしか使えない。
- 保持と待機(hold and wait): 資源を保持したまま別の資源を待つ。
- 横取り不可(no preemption): 保持している資源を強制的に奪えない。
- 循環待ち(circular wait): プロセスどうしが互いの資源を環状に待つ。
4条件はすべてが同時に成立して初めてデッドロックが起こり得る必要条件です。したがって、少なくとも1つを構造的に成立させなければデッドロックは発生しません。 逆に、システムが4条件をすべて許していても必ずデッドロックが起こるわけではなく、その可能性が残るだけです。
8.2 3つの対処方針 — それぞれ別の概念
| 方針 | 考え方 | 例 | コスト・前提 |
|---|---|---|---|
| 予防(prevention) | 4条件のどれかを構造的に成立しないよう設計 | すべての資源に全体の順序番号を付け、昇順でのみ獲得 → 循環待ちを排除。必要資源を一括要求 → 保持と待機を排除 | 資源利用率の低下、設計上の制約 |
| 回避(avoidance) | 要求ごとに割当て後の状態が安全かを動的に検査し、安全なときだけ許可 | 銀行家のアルゴリズム | 各プロセスが最大要求量を事前に申告する必要。検査のオーバヘッド |
| 検出・回復(detection & recovery) | デッドロックの発生を許し、待ちグラフ/資源割当てグラフで検出してから回復 | プロセスの強制終了、ロールバック、資源の横取り(可能な場合) | 検出の頻度、回復時の処理の損失 |
待ちグラフ(wait-for graph)の注意: 各資源の種類が1個のインスタンスしかないという前提では、待ちグラフの閉路 = デッドロックです。インスタンスが複数ある資源では、閉路があってもデッドロックでない場合があるため、閉路だけでは十分条件にならず、別途検出アルゴリズムが必要です。
8.3 必須例: 安全状態の判定(資源1種類、合計10単位)
| プロセス | 割当て済み | 最大要求 | 追加必要量(最大−割当て) |
|---|---|---|---|
| P1 | 3 | 7 | 4 |
| P2 | 2 | 4 | 2 |
| P3 | 2 | 5 | 3 |
割当て合計 7、現在の空き = 10 − 7 = 3。
- 空き 3 ≥ P2 の必要量 2 → P2 に割り当てて完了、返却後の空き 3 + 2 = 5
- 空き 5 ≥ P1 の必要量 4 → P1 完了、空き 5 + 3 = 8
- 空き 8 ≥ P3 の必要量 3 → P3 完了、空き 8 + 2 = 10
全プロセスが完了できる順序 P2 → P1 → P3(空き 3→5→8→10)が存在するので、現在の状態は安全です。最初に P1(必要量 4 > 空き 3)から始めることはできない点に注意しましょう。
これは現在の状態が安全であることを示したにすぎず、今後どんな要求を無条件に許可してもデッドロックにならないという意味ではありません。回避方式では以後の要求ごとに安全性を再検査し、不安全状態になる割当てを保留します。また、不安全状態がそのままデッドロックであるわけでもありません(デッドロックの可能性を排除できない状態です)。
9. 用語対照表(KO/JA/EN)
| 한국어 | 日本語 | English |
|---|---|---|
| 프로세스 | プロセス | process |
| 스레드(경량 프로세스) | スレッド(軽量プロセス) | thread (lightweight process) |
| 실행 가능 상태 | 実行可能状態 | ready state |
| 실행 상태 | 実行状態 | running state |
| 대기 상태(블록) | 待ち状態 | waiting (blocked) state |
| 디스패치 / 디스패처 | ディスパッチ / ディスパッチャ | dispatch / dispatcher |
| 선점 / 비선점 | プリエンプティブ / ノンプリエンプティブ | preemptive / non-preemptive |
| 타임 퀀텀(타임 슬라이스) | タイムクウォンタム(タイムスライス) | time quantum (time slice) |
| 라운드 로빈 | ラウンドロビン | round robin |
| 선착순 | 到着順(FCFS) | first-come, first-served |
| 최단 작업 우선 | SJF(処理時間順) | shortest job first |
| 기아(스타베이션) / 에이징 | リソーススタベーション / エージング | starvation / aging |
| 배타 제어 / 동기 제어 | 排他制御 / 同期制御 | mutual exclusion control / synchronization |
| 문맥 교환 | コンテキスト切替え | context switch |
| 페이지 / 페이지 프레임 | ページ / ページフレーム | page / page frame |
| 동적 주소 변환 | 動的アドレス変換(DAT) | dynamic address translation |
| TLB(주소 변환 버퍼) | TLB(アドレス変換バッファ) | translation lookaside buffer |
| 페이지 폴트 | ページフォールト | page fault |
| 페이지 인 / 페이지 아웃 | ページイン / ページアウト | page-in / page-out |
| 디맨드 페이징 | デマンドページング | demand paging |
| 페이지 교체 | ページリプレースメント(ページ置換え) | page replacement |
| 워킹 셋 | ワーキングセット | working set |
| 스래싱 | スラッシング | thrashing |
| 교착상태 | デッドロック | deadlock |
| 상호 배제 / 점유 대기 / 비선점 / 순환 대기 | 相互排除 / 保持と待機 / 横取り不可 / 循環待ち | mutual exclusion / hold and wait / no preemption / circular wait |
| 예방 / 회피 / 탐지·회복 | 予防 / 回避 / 検出・回復 | prevention / avoidance / detection & recovery |
| 안전 상태 / 안전 순서 | 安全状態 / 安全系列 | safe state / safe sequence |
| 은행원 알고리즘 | 銀行家のアルゴリズム | Banker’s algorithm |
| 대기 그래프 | 待ちグラフ | wait-for graph |
10. クイックシート
- スレッド: アドレス空間・資源は(通常)共有、PC・レジスタ・スタックは個別。共有するので排他制御が必要。
- 状態: 実行→実行可能(横取り)、実行→待ち(入出力)、待ち→実行可能(事象完了)、実行可能→実行(ディスパッチ)。待ち→実行の直行はない。
- ターンアラウンド = 完了 − 到着、待ち時間 = ターンアラウンド − バースト。
- RR(5/3/1、q=2): 完了 9/8/5、待ち 4/5/4、平均 13/3 ≈ 4.33。
- スタベーション: SJF・優先順で危険 → エージング。
- TLB = アドレス変換のキャッシュ(データキャッシュではない)。
- FIFO: ヒットしても順序はそのまま。LRU: ヒットすると参照の新しさを更新。
1,2,3,1,4,1,2,5、3フレーム: FIFO 7、LRU 6。- スラッシング → 多重度を下げる・ワーキングセット確保・PFF。プロセス追加は悪化。
- デッドロック4条件: 相互排除・保持と待機・横取り不可・循環待ち — 1つでも崩せば予防。
- 予防(構造的に阻止)≠ 回避(動的な安全検査、最大要求の申告)≠ 検出・回復(事後対処)。
- 待ちグラフの閉路 = デッドロックは単一インスタンス前提のときだけ。
- 安全状態の例: 空き 3、P2→P1→P3、3→5→8→10。
11. よくある誤り
- 待ち状態と実行可能状態の混同 — 待ち状態のプロセスは CPU が空いていても実行できません。
- 横取りされたプロセスを待ち状態にする — 横取り後は実行可能状態です。
- RR でキューの並べ替えを省略 — クウォンタム満了のプロセスは末尾へ。クウォンタムより短いバーストは途中で終わり、直ちに次がディスパッチされます。
- 待ち時間を「最初に実行されるまでの時間」で計算 — 全体の待ち時間はターンアラウンド − バースト(P2 は 2 ではなく 5)。
- TLB をデータキャッシュやページの格納場所と誤解 — TLB は変換結果だけを保持します。
- FIFO でもヒット時に順序を更新 — それでは LRU と同じ計算になり誤答になります。
- 「LRU は常に FIFO よりフォールトが少ない」 — 傾向であって保証ではありません。
- スラッシング時にプロセスを増やして CPU 使用率を上げようとする — 逆効果です。
- 予防・回避・検出を同じ意味で使う — 介入の時点と前提が異なります。
- 複数インスタンスの資源で閉路 = デッドロックと断定 — 単一インスタンス前提でのみ成立します。
- 安全状態 = 永久にデッドロックしないと解釈 — 現在の状態についての判定にすぎません。
12. オリジナル演習問題 5問
すべて本記事のために新たに作成した問題です。過去問題は使用していません。
問1(ラウンドロビン)
プロセス P1、P2、P3 が時刻 0 に P1、P2、P3 の順で実行可能キューに到着した。CPU バーストはそれぞれ 5、3、1 である。タイムクウォンタム 2 のラウンドロビンでスケジューリングし、コンテキスト切替え時間は 0、入出力と新たな到着はなく、クウォンタムを使い切ったプロセスはキューの末尾に回る。正しい記述はどれか。
- ア 完了順は P1 → P2 → P3 である。
- イ P2 の待ち時間は 5 であり、平均待ち時間は 13/3 である。
- ウ P3 は時刻 3 に完了する。
- エ 平均待ち時間は 5/3 である。
正解: イ
解説: キュー [P1,P2,P3] → P1 0–2(残り3)→ [P2,P3,P1] → P2 2–4(残り1)→ [P3,P1,P2] → P3 4–5 完了 → [P1,P2] → P1 5–7(残り1)→ [P2,P1] → P2 7–8 完了 → [P1] → P1 8–9 完了。完了 9/8/5、待ち = ターンアラウンド − バースト = 4/5/4、合計 13、平均 13/3 ≈ 4.33。
- ア: 誤り。実際の完了順は P3(5)→ P2(8)→ P1(9)。P1→P2→P3 は FCFS の完了順です。
- ウ: 誤り。P3 は P1・P2 がそれぞれ 2 ずつ実行した後の 4–5 に実行され、時刻 5 に完了します。
- エ: 誤り。5/3 はノンプリエンプティブ SJF(P3→P2→P1、待ち P1/P2/P3 = 4/1/0)の平均です。
問2(FIFO・LRU)
ページフレーム3個(初期状態はすべて空き)で、参照列 1, 2, 3, 1, 4, 1, 2, 5 を1回に1参照ずつ処理する。先読みはなく、FIFO は最も早く読み込まれたページを、LRU は最も長く参照されていないページを置き換える(同順位なし)。空きフレームがある間は置換えを行わない。(FIFO のフォールト回数, LRU のフォールト回数)の組合せとして正しいものはどれか。
- ア (6, 6)
- イ (7, 7)
- ウ (6, 7)
- エ (7, 6)
正解: エ
解説: FIFO の状態: [1,-,-] F、[1,2,-] F、[1,2,3] F、ヒット(変化なし)、[4,2,3] F(1 を追出し)、[4,1,3] F(2 を追出し)、[4,1,2] F(3 を追出し)、[5,1,2] F(4 を追出し)→ 7回。LRU: 最初の3回はフォールト、1 ヒット(1 を更新)、4 フォールト(2 を追出し)→ [1,4,3]、1 ヒット、2 フォールト(3 を追出し)→ [1,4,2]、5 フォールト(4 を追出し)→ [1,5,2] → 6回。
- ア: 誤り。FIFO でもヒット時に順序を更新する(LRU のように計算する)と 6 になります。
- イ: 誤り。LRU でヒット時に参照の新しさを更新しないと FIFO と同じ 7 になります。
- ウ: 誤り。2つの値が入れ替わっています。
問3(スラッシング)
多重プログラミング環境で、ページフォールトが急増し CPU 使用率が大きく低下した。各プロセスに割り当てられたページフレームがワーキングセットより不足していることが原因と判断された。最も適切な対策はどれか。
- ア 多重度を下げて、各プロセスのワーキングセットを収められるフレームを確保する。
- イ CPU 使用率を上げるため、実行するプロセス数を増やす。
- ウ TLB のエントリ数を増やして、ページフォールトをなくす。
- エ ページ置換え方式を FIFO から LRU に変えれば、フレーム不足と関係なく必ず解消する。
正解: ア
解説: スラッシングは、フレームが活発に使われるページの集合(ワーキングセット)より不足し、ページングが止まらなくなる現象です。多重度を下げ(一部プロセスの中断・スワップアウト)、ワーキングセットやページフォールト頻度に基づいてフレームを配分するのが対策です。
- イ: 誤り。プロセスを増やすとプロセス当たりのフレームがさらに減り、スラッシングが悪化します。
- ウ: 誤り。TLB はアドレス変換結果のキャッシュであり、ページが実記憶にないことによるページフォールトはなくせません。
- エ: 誤り。方式の変更が多少役立つことはあっても、フレーム不足という根本原因を「必ず」解消するわけではなく、LRU が常に優れているわけでもありません。
問4(デッドロックへの対処方針)
すべての資源に全体で一意な順序番号を付け、各プロセスは資源を必ず番号の昇順でのみ獲得するという規則を定めた。この方法の説明として正しいものはどれか。
- ア 割当てのたびに安全状態かどうかを検査する回避方式である。
- イ 資源の相互排除の条件を成立させない予防方式である。
- ウ 循環待ちの条件を成立させない予防方式である。
- エ 待ちグラフの閉路を定期的に探して回復する検出・回復方式である。
正解: ウ
解説: 全員が昇順でのみ資源を要求すれば、待ちの関係は常に小さい番号の資源を保持する側が大きい番号の資源を待つ向きになり、環状の連鎖は生じ得ません。4つの必要条件のうち循環待ちを構造的に排除する予防です。
- ア: 誤り。回避は要求ごとに動的に安全性を検査し、最大要求量の申告を必要とします。順序規則は静的な設計上の制約です。
- イ: 誤り。資源は依然として同時に1つのプロセスしか使えないので、相互排除はそのままです。
- エ: 誤り。検出・回復はデッドロックの発生を許して事後に対処します。この方法は発生そのものを防ぎます。
問5(安全状態)
資源が1種類、合計10単位ある。現在の割当て済み量/最大要求量は P1 = 3/7、P2 = 2/4、P3 = 2/5 であり、各プロセスは最大要求量まで割り当てられると完了し、保持する資源をすべて返却する。この状態の説明として正しいものはどれか。
- ア 空き 3 が P1 の追加必要量 4 より小さいので、不安全状態である。
- イ 安全状態であり、P1 → P2 → P3 が安全系列である。
- ウ 安全状態なので、今後どの要求を許可してもデッドロックは発生しない。
- エ 安全状態であり、P2 → P1 → P3 の順に完了すると空きは 3 → 5 → 8 → 10 となる。
正解: エ
解説: 空き = 10 − (3+2+2) = 3。必要量は P1 4、P2 2、P3 3。P2(2 ≤ 3)完了 → 5、P1(4 ≤ 5)完了 → 8、P3(3 ≤ 8)完了 → 10。安全系列が存在するので安全状態です。
- ア: 誤り。安全性は「いずれかの順序で全員が完了できるか」で判定します。P1 を最初にできなくても、P2 から始めればよいのです。
- イ: 誤り。最初は P1 の必要量 4 > 空き 3 なので、P1 から始めることはできません。
- ウ: 誤り。安全状態は現時点での判定です。以後、検査なしに要求を許可すると不安全状態になり得るため、回避方式は要求のたびに再検査します。
13. セルフチェック
- プログラム・プロセス・スレッドを区別し、スレッドが共有するものと個別にもつものを説明できる。
- 横取りされたプロセスと入出力待ちのプロセスが、それぞれどの状態に移るか説明できる。
- RR(5/3/1、q=2)のトレースをキューの状態まで再現し、平均待ち時間 13/3 を求められる。
- スタベーションが起こりやすい方式とエージングの役割を説明できる。
- TLB、ページテーブル、ページフォールトの関係を説明できる。
- 参照列
1,2,3,1,4,1,2,5で FIFO 7、LRU 6 を段階的に再現できる。 - スラッシングの原因と対策、「プロセスを増やす」が誤りである理由を説明できる。
- Coffman の4条件と、予防・回避・検出の違いを例とともに述べられる。
- 待ちグラフの閉路がデッドロックを意味する前提を述べられる。
- 安全系列 P2→P1→P3 を求め、安全状態という判定の限界を説明できる。
14. 1・3・7日復習プラン
- 1日後: クイックシートを見ずに、RR のタイムラインと FIFO/LRU の表を白紙に書き直す。問1・問2を解いて数値を確認する。
- 3日後: 状態遷移図、Coffman の4条件、予防・回避・検出の表を人に説明するつもりで書く。問3・問4を解き、誤りの選択肢がなぜ誤りかを言葉で説明する。
- 7日後: 条件を変えて(例: クウォンタム 3、フレーム 4、空き 2)自分でトレースする。問5を解き、よくある誤り11項目を再点検する。
15. 公式出典・シラバス対応表
公式出典: IPA「応用情報技術者試験(レベル3)シラバス Ver.7.2」 URL: https://www.ipa.go.jp/shiken/syllabus/omgdg50000005kq5-att/syllabus_ap_ver7_2.pdf 確認日: 2026-10-21(PDF 印刷ページ 23–24)
| 本記事の節 | シラバス Ver.7.2 の位置 | 該当する用語例 |
|---|---|---|
| 2. プログラム・プロセス・スレッド | 大分類2/中分類5/1. オペレーティングシステム/(4) タスク管理 ① タスクと状態遷移 | 軽量プロセス, プロセス, スレッド |
| 3. 状態遷移 | 同 (4)① | 実行可能状態, 実行状態, 待ち状態(ディスパッチャの役割) |
| 4. スケジューリング・RR | 同 (4)② 多重(マルチ)プログラミング(マルチタスク)とスケジューリング | プリエンプティブ, ノンプリエンプティブ, タイムスライス, 優先順, ラウンドロビン, SJF, FCFS, タイムクウォンタム, リソーススタベーション, ディスパッチ |
| 2・8. 同期・排他制御、デッドロック | 同 (4)②(同期制御・排他制御の必要性・実現方法) | 排他制御 ※デッドロックは用語例になく、この範囲から派生した内容 |
| 1・5. OS の機能、仮想記憶の概要 | 同 (2) OSの機能と構成 | 仮想記憶管理, プロセス管理, 多重(マルチ)プログラミング |
| 5–7. ページング・置換え・スラッシング | 同 (7) 記憶管理 ② 仮想記憶管理 | DAT, TLB, ページフォールト, ページイン, ページアウト, デマンドページング, ページリプレースメント, LRU, FIFO, スラッシング, ワーキングセット |
改めて: 本資料は IPA の承認を受けたものではなく、試験制度やシラバスは変更される可能性があります。最新情報は IPA 公式サイトで確認してください。