メモリマップドI/O 【memory mapped I/O】 メモリマップトI/O
概要
メモリマップドI/O(memory mapped I/O)とは、コンピュータ上でCPUから各装置への入出力(I/O)にメインメモリと共通のアドレスを用いる方式。メモリアクセスとI/Oの命令や回路の一部を共通化することができる。CPUが入出力装置やストレージ装置を制御したりデータを送受信するには、装置ごとに割り当てられたアドレスを指定してデータの書き込みや読み込みを指示するが、メモリマップドI/Oではこのアドレス体系がメインメモリと共通になっており、ある範囲はメモリ、ある範囲はI/Oとなっている。
これにより、メモリにアクセスするのと同じ命令でI/Oの操作を行うことができ、バスなどの回路の一部も共通化することができる。コストや性能の面で有利だが、メモリとI/Oは異なる装置であるため、CPUの構造が複雑になるとメモリアクセスの高速化手法が使えないなどの弊害がある。
また、アドレス空間が16ビットなど小さかった時代には、貴重なアドレスがI/O用に消費されることがデメリットとなる場合もあったが、現代の32ビットや64ビットのアドレス空間ではこの点はあまり問題にならない。
一方、メモリ空間とは別にI/O用のアドレス空間を設けて専用の命令でアクセスする方式を「ポートマップドI/O」(port-mapped I/O)あるいは「I/OマップドI/O」(I/O mapped I/O)、「プログラムドI/O」(programmed I/O)などと呼ぶ。CPUに専用の命令や回路が必要となるが、アドレス空間の重複がないためメモリ容量を有効活用できる。なお、英語で “mapped” の発音は /mæpt/ であるため、原音に忠実に「メモリマップトI/O」と表記・発音する場合もある。
(2024.8.2更新)