入出力ポート

入出力ポート（にゅうしゅつりょくポート、英語: Input/Output Port）は、コンピュータ等の情報機器において、装置の外部に接続する機器との情報の入出力に使用するインタフェースの端子（ポート）である。以下、略語としてI/Oポート（アイオーポート）を用いる。 コンピュータシステムにおけるディジタルインタフェースで、1本の端子に0か1（具体的には0Vか5Vなどの電圧）を選択して出力することができる回路、および1本の端子の電圧に応じて0か1を判別しその状態を読み取ることができる回路のことをI/Oポートと呼ぶ。 入力専用や出力専用の回路もあるが、多くの場合入力と出力の両方が行える回路構成になっており、レジスタの設定により入力か出力を切り替えて使うことができる。 CPUの周辺装置として存在し、その先にLEDやスイッチを接続して、LED表示やリレーのON/OFF、ボタンの入力などに用いられる。8本単位で構成される場面が多く、パラレルI/Oとも呼ばれる。 CPUファミリとして存在していたペリフェラルLSIの具体的な製品の例を以下に示す。 i8255(Programmable Peripheral Interface, PPI) ポートA,B,Cの8ビットのI/Oポートを3組持ち、ポートCは1ビット単位で入力/出力の切り替えができる。電源投入時のポートの状態は入力で、内部プルアップ抵抗は無い。 Z84C20(Z80PIO) Z80ファミリのパラレルI/Oインタフェースで8ビットのI/Oポートを2つ持つ。 MC6821 シェイクハンド機能を備えた8ビットのI/Oポートを2組備え、プリンタインターフェイスとして使用出来る。 現在これらのペリフェラルは単体で使われる場面は少なく、チップセットやマイクロコントローラに内蔵されて使われている。 マイクロコントローラ内蔵の回路の場合、汎用入出力ポートやGPIO(General Purpose I/O)とも呼ばれる。入力/出力の切り替え以外に、プルアップ有/無、プルアップ/プルダウン、出力ドライバの強弱なども設定できるGPIOがある。 計測や制御分野のボード製品ではディジタルI/OやDIO(Digital I/O)とも呼ばれる。 用途の面からコネクタ形状やピン配置が規格化されたコンピュータの外部接続端子を指す。 以下に、一般的なパーソナルコンピュータ（PC/AT互換機）の外部機器接続端子（主要な入出力端子）の、一般的名称・対応する標準規格の例を挙げる。 9ピンシリアルポート - RS-232 ANSI/TIA/EIA-574-90 25ピンパラレルポート（プリンターポート）- IEEE Std 1284.1-1997 USB (Universal Serial Bus) USB Inprementation forum USB規格 4/6ピン高速シリアルポート（i.LINKまたはFireWire) - IEEE Std 1394-1995 PS/2コネクタ VGA端子 - VESA Advanced Feature Connector (VAFC) Standard V1.0, R1.1 1995 DVIポート - VESA Flat Panel Display Interface Standard, FPDI-1, V1.0, R2.0 1995 パーソナルコンピュータのPC/AT互換機を構成する増設ボードの一種で、シリアルポートやプリンタポートなどの機能をもったもの。 現在のPCを構成するパーツとしてのI/Oは、長い時間の間に幾つかの転換期を迎えた。 特定のインターフェースを拡張する目的として、インターフェース機能とボードが1対1で対応するものである。シリアルインターフェース、パラレルインターフェース、フロッピーディスクコントローラ、IDEハードディスクコントローラ、GPIBインターフェースカード等があった。単機能の拡張カードは後述する時代の変遷の影響を大きく受ける事はなく、カードのインターフェース方式が時代に沿ったものが作られ、販売されている。 かつてのマザーボードは、CPUソケットとメモリソケット、ISAバスバックプレーンのみを搭載していた。その為周辺機器を接続するためのカードが販売されていた。多くはISAバス用で、シリアルインターフェース、パラレルインターフェース、フロッピーディスクコントローラ、IDEハードディスクコントローラを搭載していた。この頃は、前述の単機能カードを複数取り付けるか、あるいは1枚で済むマルチI/Oカードの搭載が必須であった。 VLバスが登場すると、それに呼応するようにI/OカードもVLバスに対応した。主にハードディスクアクセスにおけるパフォーマンスが向上し、スーパーI/Oカードと呼ばれた。しかし、VLバスは33MHz駆動時に2本用意するのが限界で、この当時ハードディスクアクセスにエラーが多発した。過渡期であり、スーパーI/Oカード相当の機能をマザーボードに配するメーカーもあった（いわゆるオールインワンである）。 マザーボード上にI/O機能を実装するにあたって、CPUが変わるとバスも変わる故設計に多額の投資をしなくてはならず、インターフェースチップメーカー、マザーボードメーカー、またPCメーカーは統一したインターフェースを求めた。本来、ビデオカードやI/Oをマザーボード上に配置し、アクセスする為の厳密な意味でのPCIローカルバスは規格策定を進めるにつれ拡張カードスロットとして実装する性格のものとなった(PCIは初期の頃PCIローカルバスと呼ばれていたが拡張バスとして使われる間に単にPCIバスと呼ばれるようになった)。I/O制御チップメーカーは予めバス仕様を知っていたので、PCIバスが登場するやいなや直ちにPCIバス用スーパーI/Oカードを提供した。しかしそれはもはや時代遅れの物であり、全てのI/Oをマザーボード上に搭載するオールインワン設計の製品に置き換わった。 マザーボードに存在するシリアルポートやパラレルポートなどは、1990年代後半以降レガシーデバイスとして扱われるようになり、USBによって置き換えが可能なことから、コスト削減の目的で徐々に廃されている。2007年現在、キーボードやマウス、プリンターなどはUSBで直接接続する方法が普及している。また、シリアルポートやパラレルポート、PS/2などの従来のインタフェース持ったデバイスをUSBバスに接続するためのブリッジも製品化されている。 レガシーデバイスが存在しないPCにUSBキーボードやUSBマウスを接続した場合、起動時のBIOS側のエミュレーションでPS/2接続と同じように振舞う機能を持ったものも存在する。同様にSATAをパラレルATAに見せるエミュレーションを行うBIOSも存在する。 Z80やIntelx86などのCPUやPCIバスなどでは、メインメモリとは別のアドレス空間としてI/O空間があり、ペリフェラルのレジスタを接続するために用意されている。 x86ではI/O空間はメモリ空間より狭く、アクセスできる命令も限定されている。 I/O空間のアドレスはI/OアドレスやI/Oポートアドレスと呼ばれる。 マイクロプロセッサやOSが保護機能を持っている場合、アプリケーションがI/O空間をアクセスすることに制限をかけることができる。 PC/AT互換機で共通化されているペリフェラルの一般的なI/Oアドレス配置の例を以下に示す。 Intel系のプロセッサに対して、ARMやモトローラ系のプロセッサ（これらに限らず近年のRISCプロセッサではほぼすべて）ではI/O空間は存在しないため、ペリフェラルのレジスタはメモリ空間に配置される。このことをメモリマップドI/Oと言う。 PCIバスのI/O空間は、I/O空間を持たないプロセッサでは、メインメモリ空間の一部にI/O空間を配置することで実現している。