Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

I/O(アイオー)とは | 意味や読み方など丁寧でわかりやすい用語解説

I/O(アイオー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

入出力 (ニュウリョクシュツリョク)

英語表記

I/O (アイオー)

用語解説

I/Oとは、Input/Outputの略称であり、日本語では「入出力」と訳される。コンピュータシステムが、その外部にある装置や他のシステムとの間でデータをやり取りする行為、またはそのための仕組み全般を指す言葉である。コンピュータは単体で計算処理を行うだけでなく、外部からのデータを受け取り、処理結果を外部に出力することで、人間や他の機械と連携して動作する。この連携の根幹をなすのがI/Oである。最も身近な例は、人間がコンピュータを操作する際のやり取りである。キーボードからの文字入力やマウスのクリックは、人間からコンピュータへのデータ入力、すなわちインプット(Input)にあたる。反対に、コンピュータが処理結果をディスプレイに表示したり、プリンターで文書を印刷したりすることは、コンピュータから外部へのデータ出力、すなわちアウトプット(Output)である。これら以外にも、ハードディスクやSSDといったストレージ装置へのデータの書き込みや読み出し、ネットワークを介した他のコンピュータとの通信など、コンピュータ内部のプロセッサやメモリから見た外部とのデータ交換はすべてI/Oに含まれる。

I/Oは、データの転送単位によって大きく二つの種類に分類される。一つはキャラクタI/O、もう一つはブロックI/Oである。キャラクタI/Oは、データを1文字ずつ、あるいは数バイト単位で逐次的に転送する方式を指す。キーボードからの入力や、シリアルポートを介した通信などがこれに該当する。一方、ブロックI/Oは、データを「ブロック」と呼ばれる一定の大きさの固まり単位でまとめて転送する方式である。ハードディスクやSSDなどのストレージデバイスは、このブロックI/Oを用いてデータの読み書きを行う。一度に大量のデータを効率的に転送できるため、ファイル操作などに適している。

また、プログラムがI/O処理を要求した際の動作によって、同期I/Oと非同期I/Oに分けられる。同期I/Oは、ブロッキングI/Oとも呼ばれ、プログラムがデータの読み書きなどのI/O処理を要求すると、その処理が完了するまでプログラムの実行が一時停止(ブロック)する方式である。処理の完了を待ってから次の命令に進むため、プログラムの構造は単純になるが、I/O処理中はCPUが待機状態となり、リソースを有効活用できないという欠点がある。これに対し、非同期I/Oは、ノンブロッキングI/Oとも呼ばれる。プログラムがI/O処理を要求した後、その完了を待たずに次の処理を続行できる方式である。I/O処理はバックグラウンドで進められ、完了した時点でOSからプログラムへ通知が送られる。プログラムはI/Oの待機時間を他の処理に充てることができるため、システム全体の応答性や処理能力が向上する。特に、多数のクライアントからの要求を同時に処理する必要があるWebサーバーなどでは、非同期I/Oが極めて重要な技術となる。

コンピュータシステムがI/Oデバイスを制御する方式にもいくつかの種類が存在する。最も基本的な方式は、プログラムI/O(PIO)である。この方式では、CPUがI/Oデバイスの状態を定期的に監視(ポーリング)し、データ転送の準備が整うのを待ってから、CPU自身がデータ転送を行う。CPUがI/O処理に付きっきりになるため、その間は他のタスクを実行できず、CPUリソースの利用効率が低い。より効率的な方式として、割り込み駆動I/Oがある。この方式では、CPUがI/Oデバイスに処理を指示した後は、別のタスクを実行する。I/Oデバイス側で処理の準備が完了すると、デバイスがCPUに割り込み信号を送信する。CPUはこの信号を受け取って初めてI/O処理を再開するため、PIOのように待機する必要がなくなり、CPUリソースを有効に活用できる。さらに、大量のデータを高速に転送するために用いられるのがDMA(Direct Memory Access)である。DMAは、CPUを介さずに、I/Oデバイスとメインメモリが直接データをやり取りする仕組みである。DMAコントローラ(DMAC)という専用のハードウェアがデータ転送を管理し、CPUは転送の開始と終了の指示を出すだけで済む。転送中はCPUが完全に解放されるため、システム全体のパフォーマンスを大幅に向上させることが可能であり、現代のコンピュータにおけるストレージやネットワークデバイスとの通信では不可欠な技術となっている。

システムのパフォーマンスを考える上で、I/Oはしばしばボトルネック、すなわち性能の制約要因となる。CPUやメモリの処理速度は非常に高速だが、機械的な動作を伴うハードディスクや、物理的な距離が関係するネットワーク通信などのI/Oデバイスの速度はそれらに比べて格段に遅い。この速度差が原因で、CPUがI/O処理の完了を待つ時間が長くなり、システム全体の性能が低下する現象を「I/Oバウンド」と呼ぶ。この問題を緩和するため、バッファリングやキャッシングといった技術が用いられる。バッファリングは、送受信するデータをメモリ上の一時的な領域(バッファ)に溜めておくことで、低速なI/Oデバイスとのやり取りをまとめて行い、転送効率を高める手法である。キャッシングは、一度読み出したデータを高速なメモリ(キャッシュ)に保存しておき、次に同じデータへの要求があった際に、低速なデバイスへアクセスすることなくキャッシュから高速に応答する仕組みである。このように、I/Oの仕組みと特性を深く理解することは、効率的で高性能なシステムを設計、構築、運用する上で非常に重要である。

関連コンテンツ

関連ITニュース

関連プログラミング言語