FE EXAM

入出力制御方式(4方式の比較)

CPUと入出力装置の間でデータをやり取りする制御の方式(4種類)

DIAGRAM
CPU負荷 重CPU負荷 軽
CPU負荷:重い軽い1プログラム制御方式CPUがポーリングで完了を待つCPU繰り返し確認I/O転送中のCPU負荷最も重い転送の担当:CPU自身(全部)2割込み制御方式I/O完了を割込みで通知CPU⚡割込み通知I/O転送中のCPU負荷やや軽い転送の担当:CPU(割込み後)3DMA制御方式DMACが直接転送(設定のみ)CPUDMAC設定のみI/O転送中のCPU負荷軽い転送の担当:DMAC4チャネル制御方式専用プロセッサが独立処理CPUチャネル命令を渡すだけI/O転送中のCPU負荷最も軽い転送の担当:チャネル(専用CPU)
解説

📌
入出力制御方式とは

CPUと遅いI/O装置のやり取りを橋渡しCPU(速い)I/O(遅い)データの受け渡しこの受け渡し方の工夫が「制御方式」

入出力制御方式とは、CPU(=中央処理装置)と入出力装置(I/O。ディスク・キーボード・プリンタなど)の間で、どのようにデータをやり取りするかを決めた仕組みのことです。

なぜわざわざ方式を考えるかというと、CPUと入出力装置のスピード差がとても大きいからです。CPUは1秒間に何億回も処理できますが、機械的に動くディスクなどは桁違いに遅いのです。速いCPUが遅い装置の完了をただ待つのは大きな無駄なので、「いかにCPUの手をわずらわせずに入出力を行うか」を工夫した結果、複数の方式が生まれました。

上の図解では、代表的な4方式をCPU負荷が重い順(上)から軽い順(下)に並べています。下に行くほど、CPUが入出力の手間から解放されていくのが分かります。

📋
4方式の概要

入出力制御方式は、大きく次の4種類に分けられます。それぞれ「誰が転送を担当するか」「完了をどう知るか」が異なります。

方式転送の担当完了の知り方
プログラム制御方式CPU自身CPUが繰り返し確認(ポーリング)
割込み制御方式CPU(割込み後)I/Oが割込みで通知
DMA制御方式DMAコントローラDMACが割込みで通知
チャネル制御方式チャネル(専用CPU)チャネルが割込みで通知

各方式を一言でまとめると、次のようになります。
プログラム制御方式:CPUが完了を自分で何度も確認し、転送もCPUが行う最も単純な方式
割込み制御方式:完了をI/Oから割込みで知らせてもらい、待ち時間にCPUが別の仕事をできる方式
DMA制御方式:専用回路DMACが、CPUを介さずメモリとI/Oを直接転送する方式
チャネル制御方式:入出力専用のプロセッサ(チャネル)が、入出力処理を独立してまるごと引き受ける方式

⚖️
CPU負荷の違い

プログラム制御方式
100%
割込み制御方式
60%
DMA制御方式
15%
チャネル制御方式
5%

4方式は、上から下へ進むほど転送中のCPU負荷が軽くなっていくという関係にあります。これは「入出力の仕事をCPUからどんどん他のものへ任せていった」歴史でもあります。

負荷が軽くなる理由を順に見てみましょう。
プログラム制御:完了確認も転送もすべてCPUがやるので、待ち時間も含めてCPUがずっと拘束される
割込み制御:完了確認の手間が消え、待ち時間に別の仕事ができる。ただし転送はまだCPUがやる
DMA制御:転送そのものをDMACに任せ、CPUは設定と完了通知の受け取りだけになる
チャネル制御:入出力専用プロセッサが処理ごと引き受け、CPUはほぼ計算に専念できる

身近な例で考えると、料理をしながら洗濯機を回す場面に似ています。洗濯機の前で終わるまで見張る(プログラム制御)のは非効率で、終了音で知らせてもらえれば料理を進められます(割込み制御)。さらに乾燥まで全自動の洗濯乾燥機(DMA・チャネル)に任せれば、あなたは洗濯のことをほとんど忘れて料理に集中できます。「CPUをいかに本来の計算に専念させるか」が、入出力制御方式の進化の方向だと理解しておくとよいでしょう。

🔴
プログラム制御方式の仕組み

CPUずっと確認中I/O装置処理中(遅い)完了したか?まだですこの往復を何度も繰り返す(ポーリング)→ CPUは他の仕事が一切できない

プログラム制御方式は、CPUが繰り返し入出力装置に「まだ終わりましたか?」と問い合わせ続ける方式です。この「何度も確認し続ける動作」をポーリング(polling=順番に聞いて回ること)と言います。

なぜ非効率なのか。ディスクなどの入出力装置は、CPUと比べて何百〜何万倍も遅いです。CPUが問い合わせを繰り返している間、ほかの計算は一切できません。たとえば「ファイルを読み込む間ずっと待ちながら何もできない」状態です。CPUという高性能な部品が、遅い装置の完了待ちで丸ごとふさがってしまう、という非効率さが問題です。

身近な例で考えると、電子レンジの前でずっと「終わったかな?終わったかな?」と眺め続けるのに似ています。その間、料理の下ごしらえもできず、他のことも何もできません。プログラム制御方式の最大の弱点は、「待っている間のCPUが完全に無駄になる」という点です。この弱点を解決したのが次の割込み制御方式です。

🟡
割込み制御方式の仕組み

CPU別の仕事中I/O装置処理中⚡ 割込み通知!データ転送(CPU)I/Oが終わったら自分で知らせてくれる→ 待ち時間に別の仕事ができる!

割込み制御方式は、入出力装置が処理を終えたタイミングで、自分からCPUに「終わりました」という割込み(=緊急の通知)を送る方式です。CPUはポーリング(繰り返し確認)をやめて、割込みが来るまで別の仕事を続けられます

なぜ改善されたのか。プログラム制御との最大の違いは、「CPUが聞きに行く」のをやめ、「I/Oが教えに来る」方式に変えた点です。CPUは待ち時間を別の計算に使えるので、無駄な時間が大幅に減ります。

ただし1つ注意点があります。割込み制御方式では、データの転送自体はまだCPUが行います。I/Oから「終わりました」と通知が来るたびに、CPUは今の仕事を中断してデータを受け取り、また仕事に戻る、という動作を繰り返します。転送量が多いと、この中断・再開が何度も起きてCPUへの負担が残ります。この「データ転送そのものもCPUから外す」という課題を解決したのが、次のDMA制御方式です。

身近な例では、電子レンジに「チン」というベル(割込み)をつけたのに相当します。ベルが鳴るまで料理の下ごしらえを続けられます(待ち時間の有効活用)。でも、取り出し作業(転送)は自分でやらなければなりません。これが割込み制御方式の改善点と、まだ残る課題の両方を表しています。

関連コンテンツ