IO命令は、ハードウェアと相互作用することになっています。したがって、IO命令は一般に、メモリセマンティクスに準拠していません(また、準拠することは想定されていません)。代わりに、セマンティクスは、通信するハードウェア(および対応するプロトコル)によって異なります。IOスペースをメモリとは考えないでください。
メモリ命令は、メモリとメモリマップドIOにアクセスできます。メモリマップドIOにアクセスすると、IO命令のように動作します。それらが実メモリにアクセスする場合にのみ、メモリセマンティクスが適用されます。これは、たとえば、メモリ位置への読み取りは、常にこの位置に書き込まれた最後の値を返すことを意味します。
CPUは、メモリマップドIOと実メモリに使用されるアドレス空間を区別することが重要です。たとえば、メモリマップドIOからのデータをキャッシュに格納したり、メモリ命令がメモリマップドIOの場所に投機的にアクセスしたりしてはなりません。このため、メモリマップドIOスペースへのアクセスは、実際のメモリへのアクセスよりも大幅に遅くなります。
メモリマップドIOと実メモリを区別するために、プロセッサは通常ページテーブルを使用しますが、メモリタイプ範囲レジスタのような他のメカニズムがあります。
最後に、メモリに書き込むことができる他のハードウェアが存在する可能性があります。例としては、複数のコアやダイレクトメモリアクセスを備えたシステムがあります。これらのシステムは、お互いを認識し、キャッシュコヒーレンシプロトコルを使用して正しいメモリセマンティクスを維持する必要があります。呪いのなかで、これにはIOマップドメモリと実メモリを区別する必要もあります。
結論は、実際のメモリもメモリのように動作し、メモリのセマンティクスに準拠しているということです。IOおよびメモリマップドIOは、任意の方法で動作できます。