FE EXAM

ディスパッチャ(dispatcher)

実行可能状態のタスクを選んでCPUに割り当てるOSのプログラム。

INTERACTIVE VISUALIZATION
実行可能
実行中
ディスパッチャ
フェーズ
idle
キュー内のタスク
0
実行中のタスク
シナリオ
ステップ1 / 6
STEP 1/6実行を待つタスクたちまだ何も始まっていない状態です。これからタスク(=CPUに実行してほしい処理のかたまり)が、実行できる準備のできたものから順に並んでいきます。CPU(=中央処理装置。計算を実際に行う部品)は今は空いています。
実行可能キュー(順番待ち)(空)ディスパッチャタスクをCPUへ割り当てるCPU空き
役割の流れ
スケジューラ : 次に動かすタスクを 決める(方針)
ディスパッチャ: 決まったタスクへ CPUを割り当てる(実行)
切替時 : 旧タスクのコンテキスト保存 → 新タスクのコンテキスト復元
解説

📌
ディスパッチャとは

AB実行可能キューディスパッチャCPUA実行

ディスパッチャとは、実行できる準備のできたタスクを選んで、実際にCPU(=中央処理装置。計算を行う部品)へ割り当て、実行状態に移すOSのプログラムのことです。タスクをCPUへ送り出すこの操作を「ディスパッチ」と呼びます。OS(=コンピュータ全体を管理する基本ソフト)の一部です。

身近な例で考えると、銀行の窓口で「次の方どうぞ」と呼ぶ係員に似ています。番号札を持って待っている人(=実行可能なタスク)を、空いた窓口(=CPU)へ実際に案内する役目です。誰が動けるかを並べておき、空いた瞬間に送り込みます。

上のツールで▶ボタンを押すと、実行可能キューに並んだタスクを、ディスパッチャが先頭から順にCPUへ割り当てていく流れを確認できます。

🔧
役割

ディスパッチャが担当する仕事は、大きく次の3つです。
CPUを渡す:選ばれたタスクを実行可能状態から実行状態へ移し、CPUの使用権を与える
コンテキストの保存・復元:レジスタ(=CPU内の小さな作業メモリ)など、タスクの作業状態(コンテキスト)をしまったり取り出したりする
実行中タスクの切替:今動いているタスクを止め、別のタスクへCPUを渡し替える

ここで大事なのがコンテキストスイッチ(=あるタスクの作業状態を保存し、別のタスクの作業状態を復元して切り替えること)です。タスクを途中で止めても、保存しておいた状態を後で戻せば、続きから何事もなかったように再開できます。

ノートに途中まで書いた計算を一旦しまって、別のノートを開いて作業し、また元のノートを開いて続きを書く——その「ノートをしまう・開く」作業がコンテキストの保存・復元にあたります。上のツールのSTEP5で、AをしまってBを取り出す切替の様子を確認できます。

⚖️
スケジューラとの違い

よく混同されるのがスケジューラとの違いです。両者は別々の役割を持っています。スケジューラが「次にどのタスクを実行するか決める(方針)」、ディスパッチャが「決まったタスクに実際にCPUを割り当てる(実行)」のが基本です。

項目スケジューラディスパッチャ
役割次に動かすタスクを決める決まったタスクにCPUを割り当てる
性質方針・選び方を担う実際の受け渡しを担う
例えると順番を決める管理者窓口へ案内する係員

料理屋で例えると、どの注文を先に作るか決めるのがスケジューラ決まった注文をコンロ(CPU)に乗せて調理を始めるのがディスパッチャです。「決める係」と「渡す係」に分かれていると考えると、両者の違いがすっきり整理できます。

📌
なぜディスパッチャが必要なのか

ABCD多数のタスクディスパッチャ1つを選んで渡すCPUA を実行中

なぜディスパッチャが必要なのか。それは、CPUは1つなのに、動かしたいタスクは同時にたくさんあるからです。タスクが自分でCPUを奪いに行く仕組みにすると、タスク同士が衝突して混乱します。そこで「CPUを渡す専門の窓口係=ディスパッチャ」を置き、1つのCPUをタスクへ順番に貸し出すことで秩序を保ちます。

ディスパッチャがいない世界を想像してみましょう。たとえば、銀行の窓口が1つしかないのに、お客さんが勝手に窓口に割り込もうとする状態です。案内係(=ディスパッチャ)がいるから、列の先頭の人だけが窓口へ進め、残りは席で待てます。

ディスパッチャはOSのカーネル(=OSの中核部分)に組み込まれており、利用者やアプリからは見えません。上のツールを再生すると、ディスパッチャが実行可能キューから先頭のタスクを取り出してCPUに渡す流れを確認できます。

📌
ディスパッチのタイミング — いつCPUが渡されるか

タスク実行中時間切れ割当て時間終了入出力待ち読込・書出の完了待ちタスク終了処理が完了したいずれの場合もディスパッチャが次のタスクにCPUを渡す

ディスパッチャは「呼ばれたとき」だけ動きます。ではいつ呼ばれるのか。主に次の3つのタイミングです。


時間切れ(タイムアウト):OSはタスクごとに「CPUを使える時間の上限(タイムスライス)」を決めています。時間が来たら強制的に次のタスクへ切り替えます。これにより1つのタスクがCPUを独占できない
入出力待ち(I/O待ち):ファイルの読み込みやキーボードの入力など、「データが来るまで待つ」処理が発生すると、そのタスクはCPUを手放して待機状態へ移ります。ディスパッチャが別のタスクにCPUを渡す
タスクの終了:タスクが処理をすべて終えると、CPUが空くのでディスパッチャが次のタスクを割り当てる

これらのタイミングで自動的にCPUが次のタスクへ渡されるので、複数のアプリを同時に動かしているように見えます。実際には1つのCPUをすごく速い速度で使い回しているだけで、私たちの目には「同時に動いている」ように映ります。

練習問題

🎯
基本情報技術者 練習問題

Q1.ディスパッチャの説明として最も適切なものはどれか。
A.実行可能状態のタスクを選んで実際にCPUへ割り当て、実行状態に移すプログラム
B.メモリの空き領域を管理するプログラム
C.ファイルをディスクへ書き込むプログラム
D.ネットワークのパケットを転送するプログラム
Q2.ディスパッチャがタスクを切り替えるときに行うこととして正しいものはどれか。
A.CPUの動作周波数を変更する
B.実行を終えるタスクのコンテキストを保存し、次のタスクのコンテキストを復元する
C.タスクを優先度順に並べ替える方針を決める
D.ディスクの断片化を解消する
Q3.スケジューラとディスパッチャの役割分担として正しいものはどれか。
A.スケジューラが実際にCPUを割り当て、ディスパッチャが次のタスクを決める
B.スケジューラが次にどのタスクを実行するか決め、ディスパッチャが決まったタスクに実際にCPUを割り当てる
C.両者は同じもので役割の違いはない
D.どちらもアプリケーションが行う処理である

関連コンテンツ