プログラム I/O(I/O: アイオー)

プログラム I/O(I/O: アイオー)

プログラム I/O(I/O: アイオー)

英語表記: Programmed I/O

概要

プログラム I/Oは、コンピュータにおける最も原始的かつ基本的な入出力制御方式の一つです。これは、CPU(中央演算処理装置)自身が、入出力デバイス(周辺機器)の状態を常に監視し、データの転送処理をプログラムの命令によって完全に制御する仕組みを指します。この方式は、「コンピュータの構成要素」における「制御装置」が、周辺機器とのデータのやり取りを主導的に行う、最も直接的な「入出力(I/O)制御」の手法として位置づけられます。

詳細解説

プログラム I/Oは、CPUの命令実行能力を最大限に活用し、周辺機器との確実なデータ連携を実現することを目的としています。この方式が「制御装置(命令の解釈と制御信号)」のカテゴリーに属するのは、入出力操作のすべてがCPUによって発行される命令(例えば、IN命令やOUT命令など)と、それに続く制御信号によって管理されるからです。つまり、I/Oに関するすべての判断と作業をCPUが担う、非常にCPU依存度の高い方式だと言えますね。

動作原理:ポーリングによる制御

プログラム I/Oの動作の核となるのは、「ポーリング」(Polling)と呼ばれる、待機と確認の繰り返しです。

  1. 状態の確認(ポーリング): CPUは、データ転送を開始する前に、周辺機器がデータを受け取る準備ができているか、またはデータ送信の準備ができているかを繰り返し確認します。この確認は、周辺機器が持つ特定のメモリ領域やI/Oポートに割り当てられたステータスレジスタを読み出すことによって行われます。
  2. 待機(ビジーループ): もし周辺機器がまだ準備できていなければ、CPUは他の重要な処理を行うことなく、ただひたすらステータスレジスタを読み出し続けることになります。これをビジーループ(忙しい待機)と呼びます。高性能な「制御装置」であるはずのCPUが、低速な周辺機器の準備完了を律儀に待ち続けるのは、システム全体の効率を考えると、少し非効率的だと感じますよね。
  3. データ転送: 周辺機器が準備完了の信号をステータスレジスタに書き込むと、CPUはその信号を検出します。その後、CPUはデータレジスタを通じて、実際にデータを1バイト(または1ワード)ずつ読み書きします。この転送処理も、CPUが発行する命令によって厳密に制御されます。

制御装置の負荷と文脈

プログラム I/Oの最大の特徴は、CPUの関与度が非常に高い点です。データ転送の開始、状態確認、実際のデータ移動、そして終了処理に至るまで、すべてCPUのプログラム実行によって行われます。

この方式は、構造が単純で実装が容易であるという利点がある一方で、CPUの負荷が極めて高くなるという大きな欠点があります。特に、プリンタやディスクドライブのような、CPUの処理速度に比べて動作が遅い周辺機器を扱う場合、CPUはその機器が準備できるまでの長い時間を、ほぼ無駄に費やしてしまうことになります。

このため、この「入出力(I/O)制御」方式は、CPUが持つ「命令の解釈と制御信号」の能力をフルに使ってI/Oを管理するものの、その非効率性ゆえに、現代の高速なマルチタスクシステムでは、割り込みI/OやDMA(Direct Memory Access)といった、より洗練された方式が主流になっています。しかし、プログラム I/Oは、システムの起動初期段階や、制御が単純な組み込み機器などでは、今でもそのシンプルさから利用されることがあります。

具体例・活用シーン

プログラム I/Oは、特にI/Oの頻度が低く、転送量が少ない環境や、初期設定の段階でよく利用されます。

  • 初期のシリアル通信: ごく初期のパーソナルコンピュータでは、シリアルポートを通じて外部機器と通信する際、CPUがプログラム I/Oを用いて1文字ずつデータの転送を厳密に管理していました。
  • ROM BIOSの初期化: コンピュータが起動する際、ROM BIOS(Basic Input/Output System)が実行され、キーボードやマウスなどの基本的な周辺機器の初期設定を行う段階では、プログラム I/Oが使われることがあります。これは、まだ複雑な割り込み機構が確立されていない段階での確実な制御が必要だからです。
  • 単純な組み込み機器の制御: マイコンを用いた小型の組み込みシステムでは、特定のセンサーの状態を読み取る、あるいはLEDを点滅させるなど、非常に単純で周期的なI/O操作にプログラム I/Oが採用されることがあります。

アナロジー:秘書による逐一報告の物語

プログラム I/Oの非効率性を理解するための比喩として、「超優秀だが気が短い上司(CPU)」と「外部業者(周辺機器)」の関係を物語として考えてみましょう。

ある会社で、上司(CPU)は秘書(制御プログラム)を使って外部業者(プリンタなど)に仕事を依頼しました。

  1. 依頼の開始: 上司は秘書に「Aというファイルを印刷してくれ」と命令を出します。
  2. 逐一確認(ポーリング): 秘書は、外部業者が「紙がセットされているか?」「インクは十分か?」といった準備状況を、他の重要な仕事は一切せずに、1分に1回、電話をかけて確認し続けます。上司は、秘書が電話をかけ終わるまで、次の重要な経営判断(他のプログラムの実行)を待たざるを得ません。
  3. 待機(ビジーループ): 外部業者が「まだ準備中です」と答える限り、秘書は電話をかけ続けるという、非常に退屈で生産性の低い作業に完全に拘束されてしまいます。
  4. データ転送: 業者が「準備完了です!」と答えると、秘書は上司の指示に従い、データを1枚ずつ手渡しで運びます。

この方式の最大の問題は、上司(CPU)の貴重な時間と能力が、外部業者の準備待ちという「待ち時間」に完全に拘束されてしまう点です。この物語が示すように、プログラム I/Oでは「制御装置」の能力が

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

両親の影響を受け、幼少期からロボットやエンジニアリングに親しみ、国公立大学で電気系の修士号を取得。現在はITエンジニアとして、開発から設計まで幅広く活躍している。

目次