存储器映射输入输出

内存映射输入输出（，简称为内存映射I/O），以及端口映射输入输出（，也叫作独立输入输出（），是PC机在中央处理器（）和外部设备之间执行输入输出操作的两种方法，这两种方法互为补充。除此之外，执行输入输出操作也可以使用专用输入输出处理器（）——这通常是指大型電腦上的通道输入输出（），这些专用处理器执行自有的指令集。

内存映射I/O（不要和内存映射文件的输入输出混淆）使用相同的地址总线来寻址內存和输入输出设备（简称I/O设备），前提是I/O设备上的设备内存和寄存器都已经被映射到内存空间的某个地址。这样当CPU访问某个地址的时候，可能是要访问某一部份物理內存，也可能是要访问I/O设备上的内存。因此，设备内存也可以通过内存访问指令来完成读写。每个I/O设备监测CPU的地址总线，并且在发现CPU访问被分配到本设备的地址区域的时候做出响应，建立数据总线和相应设备寄存器之间的连接。为了实现CPU对MMI/O设备的访问，相应的地址空间必须给这些设备保留， 并且不能再分配给系统物理内存。这可以是永久保留，也可以是暂时性的保留。通常来说X86架构都是永久保留的，而在Commodore 64中，由于采用了I/O设备和普通内存之间的堆交换技术（bank switching）,可以做到暂时性保留。

PMI/O通常使用一组专门为I/O设计的CPU指令来执行I/O操作。比如在基于x86和x86-64架构的微处理器中使用in/out指令。这两条指令有一些不同的形式，分别用来在CPU的EAX寄存器（或高16位/低16位/高8位/低8位）和I/O设备的某个端口之间完成对单字节/双字节/四字节数据的操作(比如对out指令，分别有outb, outw和outl) 。I/O设备有一个和内存地址空间相互独立的I/O地址空间。I/O设备通过专用I/O针脚或者专用的总线和CPU相连。因为这个I/O地址空间和内存地址空间相互独立，所以有时候称为独立I/O.

外部链接 
 University lecture notes about computer I/O

M