CPUと入出力装置の間でデータをやり取りする制御の方式(4種類)
入出力制御方式とは、CPU(=中央処理装置)と入出力装置(I/O。ディスク・キーボード・プリンタなど)の間で、どのようにデータをやり取りするかを決めた仕組みのことです。
なぜわざわざ方式を考えるかというと、CPUと入出力装置のスピード差がとても大きいからです。CPUは1秒間に何億回も処理できますが、機械的に動くディスクなどは桁違いに遅いのです。速いCPUが遅い装置の完了をただ待つのは大きな無駄なので、「いかにCPUの手をわずらわせずに入出力を行うか」を工夫した結果、複数の方式が生まれました。
上の図解では、代表的な4方式をCPU負荷が重い順(上)から軽い順(下)に並べています。下に行くほど、CPUが入出力の手間から解放されていくのが分かります。
入出力制御方式は、大きく次の4種類に分けられます。それぞれ「誰が転送を担当するか」「完了をどう知るか」が異なります。
| 方式 | 転送の担当 | 完了の知り方 |
|---|---|---|
| プログラム制御方式 | CPU自身 | CPUが繰り返し確認(ポーリング) |
| 割込み制御方式 | CPU(割込み後) | I/Oが割込みで通知 |
| DMA制御方式 | DMAコントローラ | DMACが割込みで通知 |
| チャネル制御方式 | チャネル(専用CPU) | チャネルが割込みで通知 |
各方式を一言でまとめると、次のようになります。
・プログラム制御方式:CPUが完了を自分で何度も確認し、転送もCPUが行う最も単純な方式
・割込み制御方式:完了をI/Oから割込みで知らせてもらい、待ち時間にCPUが別の仕事をできる方式
・DMA制御方式:専用回路DMACが、CPUを介さずメモリとI/Oを直接転送する方式
・チャネル制御方式:入出力専用のプロセッサ(チャネル)が、入出力処理を独立してまるごと引き受ける方式
4方式は、上から下へ進むほど転送中のCPU負荷が軽くなっていくという関係にあります。これは「入出力の仕事をCPUからどんどん他のものへ任せていった」歴史でもあります。
負荷が軽くなる理由を順に見てみましょう。
・プログラム制御:完了確認も転送もすべてCPUがやるので、待ち時間も含めてCPUがずっと拘束される
・割込み制御:完了確認の手間が消え、待ち時間に別の仕事ができる。ただし転送はまだCPUがやる
・DMA制御:転送そのものをDMACに任せ、CPUは設定と完了通知の受け取りだけになる
・チャネル制御:入出力専用プロセッサが処理ごと引き受け、CPUはほぼ計算に専念できる
身近な例で考えると、料理をしながら洗濯機を回す場面に似ています。洗濯機の前で終わるまで見張る(プログラム制御)のは非効率で、終了音で知らせてもらえれば料理を進められます(割込み制御)。さらに乾燥まで全自動の洗濯乾燥機(DMA・チャネル)に任せれば、あなたは洗濯のことをほとんど忘れて料理に集中できます。「CPUをいかに本来の計算に専念させるか」が、入出力制御方式の進化の方向だと理解しておくとよいでしょう。
プログラム制御方式は、CPUが繰り返し入出力装置に「まだ終わりましたか?」と問い合わせ続ける方式です。この「何度も確認し続ける動作」をポーリング(polling=順番に聞いて回ること)と言います。
なぜ非効率なのか。ディスクなどの入出力装置は、CPUと比べて何百〜何万倍も遅いです。CPUが問い合わせを繰り返している間、ほかの計算は一切できません。たとえば「ファイルを読み込む間ずっと待ちながら何もできない」状態です。CPUという高性能な部品が、遅い装置の完了待ちで丸ごとふさがってしまう、という非効率さが問題です。
身近な例で考えると、電子レンジの前でずっと「終わったかな?終わったかな?」と眺め続けるのに似ています。その間、料理の下ごしらえもできず、他のことも何もできません。プログラム制御方式の最大の弱点は、「待っている間のCPUが完全に無駄になる」という点です。この弱点を解決したのが次の割込み制御方式です。
割込み制御方式は、入出力装置が処理を終えたタイミングで、自分からCPUに「終わりました」という割込み(=緊急の通知)を送る方式です。CPUはポーリング(繰り返し確認)をやめて、割込みが来るまで別の仕事を続けられます。
なぜ改善されたのか。プログラム制御との最大の違いは、「CPUが聞きに行く」のをやめ、「I/Oが教えに来る」方式に変えた点です。CPUは待ち時間を別の計算に使えるので、無駄な時間が大幅に減ります。
ただし1つ注意点があります。割込み制御方式では、データの転送自体はまだCPUが行います。I/Oから「終わりました」と通知が来るたびに、CPUは今の仕事を中断してデータを受け取り、また仕事に戻る、という動作を繰り返します。転送量が多いと、この中断・再開が何度も起きてCPUへの負担が残ります。この「データ転送そのものもCPUから外す」という課題を解決したのが、次のDMA制御方式です。
身近な例では、電子レンジに「チン」というベル(割込み)をつけたのに相当します。ベルが鳴るまで料理の下ごしらえを続けられます(待ち時間の有効活用)。でも、取り出し作業(転送)は自分でやらなければなりません。これが割込み制御方式の改善点と、まだ残る課題の両方を表しています。