メモリマップドI/O
メモリマップドI/O(英: memory-mapped I/O)とは、コンピュータ内でCPUと入出力機器の間で入出力を行う手法の一種。他の入出力手法としては、ポートマップドI/O(英: port-mapped I/O)と、メインフレームなどで独立した入出力プロセッサを使用するチャネル・コントローラ方式がある。本項目ではポートマップドI/Oについても併せて解説する。「メモリマップト」と「ト」に濁音を付けない表記も用いられる。
メモリマップドI/Oは、アドレス空間(仮想記憶方式の場合、物理アドレス空間)上にメモリと入出力機器が共存し、メモリのリード/ライトのためのCPU命令を入出力機器にも使用する。CPUの(物理)アドレス空間には入出力のための領域が用意されているが、固定的である必要はない。例えば、コモドール64は通常のメモリと入出力機器の空間をバンク切り換えしながら使用することができる。入出力機器(あるいはそれらを束ねるコントローラ)はCPUのアドレスバスを監視し、自身のレジスタがマッピングされた空間へのCPUからのアクセスに応答する。
ポートマップドI/O(I/OマップトI/Oと呼ぶ資料やプログラムドI/Oと呼ぶ資料もある)では、入出力用の特別なCPU命令を使用する。例えば、インテルのx86には入出力専用の IN 命令と OUT 命令があり、入出力機器の1つのバイト(8-bit)あるいは16-bitの読み書きを行う(16-bit入出力機器の読み書きを行う場合、対象となる16-bit入出力機器は偶数アドレスに配置する必要がある)。