スポンサーリンク

【応用情報技術者試験】ソフトウェアの基礎を固めよう!      ~第2章~タスク管理

タスク管理|状態遷移とスケジューリング ソフトウェア

タスク管理は、OSが実行する処理の状態を管理し、CPUをどの処理に割り当てるかを制御する仕組みです。この章では、実行・実行可能・待ちの違いから、スケジューリング、コンテキスト切替え、デッドロックまでを整理します。

ここでのタスクはOSが管理する実行単位を指します。OSによってプロセスやスレッドとの対応が異なるため、試験では問題文の定義に従います。

3つの状態:「何を待っているか」で見分ける

状態 意味 例
実行(Running) CPUを割り当てられて処理している 計算を進めている
実行可能(Ready) 実行できるがCPUの割当てを待っている 実行可能キューに並ぶ
待ち(Waiting/Blocked) 入出力や資源などの条件を待つ 未完了の読込みやロックの解放を待つ

ReadyはCPU待ち、Waitingはイベントや資源待ちです。学習ではこの3状態を中心に扱いますが、生成・終了などを加えたモデルや、OS独自の細かな状態もあります。

状態遷移の主なきっかけ

  • 実行可能→実行:選ばれたタスクにCPUを割り当てる(ディスパッチ)。
  • 実行→実行可能:割当て時間の終了などで、CPUを取り上げる(プリエンプション)。
  • 実行→待ち:必要な入出力や資源がまだ利用できず、処理を続けられない。
  • 待ち→実行可能:入出力完了などで待ち条件が解消する。

基本モデルでは、入出力が完了しても直接「実行」へ飛ぶのではなく、実行可能になってからCPUを割り当てられます。また、非同期・非ブロッキングの入出力は、要求しただけで必ず待ち状態になるわけではありません。

スケジューリングとディスパッチ

スケジューリングは次に動かす対象を選ぶこと、ディスパッチは選んだ対象へCPUの制御を渡すことです。ここではCPUが同時に1タスクを実行する単純なモデルで考えます。

方式 選び方 注意点
到着順(FCFS) 実行可能になった順に処理 長い処理が先だと後続が待つ
優先度順 優先度が高い処理を先にする 低優先度の処理が長く待つ飢餓に注意。プリエンプトの有無は条件次第
ラウンドロビン 時間の上限(タイムクォンタム)を決めて順に割り当てる 短すぎる割当ては切替え負荷を増やす

ラウンドロビンを時刻で追う

全タスクが0msに到着し、キューの順番はP1→P2→P3、必要CPU時間は順に5ms・3ms・1msとします。タイムクォンタムは2ms、入出力待ちと切替え時間は無視します。

時間帯 動くタスク 処理後の残りCPU時間
0〜2ms P1 P1:3ms
2〜4ms P2 P2:1ms
4〜5ms P3 P3:完了
5〜7ms P1 P1:1ms
7〜8ms P2 P2:完了
8〜9ms P1 P1:完了

上限まで必ず使い切るのではなく、処理が終わればCPUを手放します。実行順はP1→P2→P3→P1→P2→P1です。

コンテキスト切替え:途中の状態を保存する

コンテキスト切替えでは、実行中の処理を後で再開できるように、プログラムカウンタやレジスタなどを保存し、次の処理の状態を復元します。プロセスを切り替える場合は、アドレス空間などの管理情報の切替えも関係します。

毎回メモリ全体をコピーするという意味ではありません。切替え中はアプリケーションの本来の計算が進まないため、オーバーヘッドになります。システムコールや割込みによる実行モードの変更が、必ず別タスクへの切替えを伴うわけでもありません。

プリエンプティブとノンプリエンプティブ

  • プリエンプティブ:OSが実行中の処理からCPUを取り上げられる方式。時間制限や優先度などに基づきます。
  • ノンプリエンプティブ:処理の終了や待ち状態への移行、自発的な実行権の返却などをきっかけに切り替える方式。

プリエンプションだけで、他のタスクへの不具合の影響を全て防げるわけではありません。メモリ保護や資源の管理なども別途必要です。

ターンアラウンドタイムと応答時間

  • ターンアラウンドタイム:到着から処理完了まで。完了時刻−到着時刻。
  • 応答時間:要求から応答まで。スケジューリングの計算問題では、到着から最初にCPUを使うまで、と定義することがあります。
  • 待ち時間:実行可能キューでCPUを待つ時間。
  • スループット:単位時間当たりに完了する処理数。

先ほどの例では全て0ms到着なので、P1・P2・P3のターンアラウンドタイムは9ms・8ms・5ms、平均は22÷3≒7.33msです。「初回のCPU割当てまで」を応答時間とするなら、0ms・2ms・4ms、平均2msです。

排他制御とデッドロックも押さえる

共有データへ同時にアクセスすると、更新の消失などが起きる場合があります。ミューテックスなどで必要な範囲を保護しますが、資源の獲得順序によってはデッドロックが発生します。

デッドロックの必要条件は、相互排他・保持と待ち・非奪取・循環待ちの4つです。例えばAが資源Xを保持してYを待ち、BがYを保持してXを待つ状態です。資源の取得順序を統一するなどの対策を考えます。4条件が成立し得ることと、今まさにデッドロックが起きていることは区別します。

確認問題

入出力の完了を待っているタスクについて、入出力が完了した直後の基本的な状態遷移はどれでしょうか。

  1. 待ち→実行可能
  2. 待ち→実行(CPU割当ての判断なし)
  3. 実行可能→待ち
解答・解説を見る

正解は①です。待ち条件が解消すると実行可能になります。その後、選択とCPU割当てを経て実行します。

タスクの基礎から資源共有へ、noteで復習

プロセス・スレッドと共有資源の関係を、まとめて整理したい方へ。

関連noteでは、プロセスとスレッドの違い、資源共有、競合、排他制御、セマフォとミューテックス、デッドロックを扱っています。この章の実行単位と、共有データを安全に扱う仕組みをつなぐ復習に使えます。

プロセス・スレッド・排他制御のnote教材を見る →

教材の公開範囲・価格などはリンク先でご確認ください。

関連する記事と次の章

参考:UIC:プロセスの状態/UIC:CPUスケジューリング/Cornell:OSとプロセス

コメント