戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2016年 秋期 午前(科目A)18


問題文

マルチプログラミングにおけるプロセスの切替え手順を示した図において、OSの処理a〜cとして、適切な組合せはどれか。
基本情報技術者 2016年 秋期 午前(科目A) 問18の問題画像基本情報技術者 2016年 秋期 午前(科目A) 問18の選択肢の画像

選択肢

(正解)

##: プロセスの切替え手順【午前2 解説】

要点まとめ

  • 結論:割込み発生でプロセスAからBへ切替える際は、(a)実行状態の退避、(b)プロセスの選択、(c)実行状態の回復の順が正しい。
  • 根拠:CPUレジスタやプログラムカウンタ等の現行状態を失うと復元不能になるため、まず現在の状態を保存してからスケジューラで次を決定する必要がある。
  • 差がつくポイント:選択(スケジューラ呼出)は退避後に行う点と、回復は選択したプロセスを実行可能にしてCPU制御を移す最終段階である点を確実に押さえること。

正解の理由

図ではプロセスAが実行中に割込みが入り、OSは中央でa→b→cの処理を順に行い、右側のプロセスBの実行状態に制御を渡しています。正しい手順は次の通りです。
(a) 現在のプロセスAの実行状態(レジスタ、プログラムカウンタ、プロセス制御ブロックなど)を退避(保存)する。
(b) スケジューラが実行すべきプロセスを選択する(プロセスBを選択)。
(c) 選択されたプロセスBの保存済み実行状態を回復してCPU制御を移す。
したがって選択肢は (a: 実行状態の退避、b: プロセスの選択、c: 実行状態の回復)が対応します。

よくある誤解

  • 「先にプロセスを選ぶべき」と考える誤解:選択を先にすると現在のCPU状態が失われるリスクがあるため、まず退避が必須です。
  • 「退避と回復は同時に扱える」と考える誤解:退避→選択→回復は順序依存で、順序を入れ替えると整合性や安全性が損なわれます。
  • 「回復は単にレジスタを戻すだけ」と思い込む誤解:回復にはメモリマッピングやメモリ保護の設定、カーネル/ユーザースタックの切替なども含まれます。

解法ステップ

  1. 図の左側(プロセスA)で「割込み→」が示されていることを確認する。
  2. 割込み時のOSの基本責務を思い出す:現在状態の保存、次プロセスの選定、選定プロセスの復元。
  3. 中央のa→b→cにそれぞれ「退避」「選択」「回復」を順に対応させる。
  4. 選択肢を照らし合わせて、aが退避、bが選択、cが回復になっているものを正解とする。

選択肢別の誤答解説

  • ア:aを「実行状態の回復」としているが、割込み直後に回復はあり得ず、まず現在の状態を退避すべきで順序が逆。
  • イ:aが退避で正しいがbを「実行状態の回復」としており、回復を選択より先に行うため手順として矛盾(何を回復するのか不明)。
  • :正解。a=退避、b=選択、c=回復の順で文脈と完全合致。
  • エ:aを「プロセスの選択」とし、選択を退避より先に実行しているため現在状態の一部を失う危険があり不正解。

補足コラム

  • 保存・復元される「実行状態(コンテキスト)」には、汎用レジスタ、プログラムカウンタ(PC)、ステータスレジスタ(FLAGS)、スタックポインタなどのCPU状態に加え、場合によってはMMUのページテーブル参照やスレッド固有のカーネルスタック情報も含まれます。
  • コンテキストスイッチはコスト(キャッシュミス、TLBフラッシュ、処理時間)を伴うため、スケジューラは頻度を最小化する方針を取ることが多いです。
  • 自発的にyieldする協調的スケジューリングでも手順は同様:退避→選択→回復。ただし割込み起点か自発的かで呼び出される経路が異なる点に注意。
簡単な擬似コード例(概念説明用)
def interrupt_handler(current):
    save_context(current)        # a: 実行状態の退避
    next_proc = scheduler()      # b: プロセスの選択
    restore_context(next_proc)   # c: 実行状態の回復
    switch_to(next_proc)

FAQ

Q1: 自発的に処理が切り替わる場合も順序は同じですか?
A1: はい。自発的yieldでも「現在状態の保存→スケジューラ選定→選定プロセスの復元」の順になります。順序は変わりません。
Q2: なぜ選択を先に行ってはいけないのですか?
A2: 選択を先に行うと現在の実行状態(レジスタ等)を保存する前に上書きされる恐れがあり、復元できなくなるため保全の観点から退避が先です。
Q3: コンテキストスイッチは何が高コストですか?
A3: レジスタ保存/復元、自プロセスと次プロセスのメモリ管理切替、キャッシュ/TLBの効率低下などが主なコスト要因です。

関連キーワード: マルチプログラミング、コンテキストスイッチ、プロセススケジューリング、割込み処理、実行状態退避・回復
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について