FE EXAM

プログラム制御方式(ポーリング)

CPUが入出力の完了を繰り返し確認(ポーリング)する制御方式

INTERACTIVE VISUALIZATION
CPU
ビジー待ち
状態確認の回数
0
CPUの稼働
I/O待ち
I/O装置
待機
CPUの状態
✗ 入出力にかかりきり(遊んでいる)
完了確認(ポーリング)回数:0
ステップ 1 / 8
STEP 1/8開始前 — CPUが入出力をしたいCPU(=中央処理装置。コンピュータの頭脳)が、ディスクやキーボードなどの入出力装置(I/O)からデータを読み書きしたいと考えています。プログラム制御方式では、この一連の処理をすべてCPU自身が面倒を見ます。
CPU中央処理装置遊んでいるI/O装置ディスクなど(遅い)待機中CPUは完了するまで状態を何度も確認し続ける(その間は他の仕事ができない)
CPU時間の使われ方
依頼
ビジー待ち(ずっとポーリング)
転送
赤い部分(ビジー待ち)の間、CPUは状態確認だけを繰り返し、他の仕事を一切できていません。これがプログラム制御方式の無駄です。
解説

📌
プログラム制御方式とは

CPUが入出力の全部を自分で面倒みるCPUI/O装置終わった?何度も確認

プログラム制御方式とは、CPU(=中央処理装置。コンピュータの頭脳)が、入出力の手続きを最初から最後まで自分で行う制御方式のことです。入出力装置(I/O)にデータを頼んだあと、CPUが「もう準備できた?」と繰り返し確認し、できていたら自分でデータを運びます。

身近な例で考えると、電子レンジの前にずっと立って、チンするまで何度ものぞき込み続けるのに似ています。本当は温まるまでに別のことができるはずなのに、レンジの前から離れずに見張っているので、その間は他の家事が一切進みません。

上のツールで▶ボタンを押すと、CPUがI/Oに依頼したあと「終わった?まだ?」と何度も状態を確認し、その間ずっと遊んでいる様子を確認できます。最後にやっとデータを運んで完了します。

🔁
ポーリングの仕組み

状態レジスタを繰り返し読む準備中1回目準備中2回目準備中3回目完了4回目完了になるまでループで確認し続ける

ポーリング(polling)とは、CPUがI/O装置の「状態レジスタ」を一定間隔で何度も読みに行き、完了したかどうかを確認する方法です。状態レジスタとは、装置の今の状況(準備中/完了/エラーなど)を表す小さな記憶場所のことです。

処理の流れは、ぐるぐる回るループになっています。
① 状態レジスタを読む:今「準備中」か「完了」かを調べる
② まだ準備中なら①に戻る:完了になるまで何度も繰り返す
③ 完了ならデータを転送する:CPU自身がI/Oからデータを読み出す

この「完了するまでひたすら確認を繰り返してCPUが待つ状態」をビジーウェイト(ビジー待ち)と呼びます。CPUは確認以外の仕事をしておらず、見かけは忙しそうでも実質的には遊んでいる、という点がポイントです。

⚠️
欠点(CPU負荷)

プログラム制御方式の最大の欠点は、I/Oの完了を待っている間ずっとCPUが拘束され、他の仕事ができないことです。

なぜこれが問題かというと、CPUと入出力装置のスピード差がとても大きいからです。CPUは1秒間に何億回も命令を処理できますが、ディスクやプリンタなどのI/O装置は機械的な動作を含むため、桁違いに遅いのです。速いCPUが、遅い装置の完了をただ待ち続けるのは、大きな時間の無駄になります。

具体的な不利な点を整理すると、次のようになります。
CPU時間の浪費:待ち時間の間、本来できたはずの計算が止まる
並行処理ができない:他のプログラムを同時に進められない
I/Oが遅いほど無駄が増える:遅い装置ほど待ち時間が長くなる

この「待っている間も離れられない」問題を解決するために考え出されたのが、完了したら向こうから知らせてもらう割込み制御方式や、転送そのものを専用回路に任せるDMA制御方式です。プログラム制御方式は、これらの出発点となる最も単純な仕組みだと考えると分かりやすいでしょう。

関連コンテンツ