#### 两种I/O

1. CPU只能读取三个地方的数据：寄存器，内存，端口  
1. CPU与外设有两种交互方式：内存映射IO(MMIO)与端口IO(PMIO)

##### 端口映射I/O

1. 端口读写指令只有2条：in, out 。这两个指令的硬件实现本质上和读写内存是相同的。
1. 端口地址范围：0～65535  (本机端口：/proc/ioports)  
1. 只能用ax或al来存放与端口交换的数据  

##### 内存映射I/O

很多计算机体系结构都没有单独的设备访问指令,取而代之的是让设备拥有固定的内存地址,然后通过内存读写实现设备读写。实际上现代x86体系结构就在大多数高速设备上(如网络、磁盘、显卡控制器)使用了该技术,叫做内存映射I/O。

#### DMA

内存映射(MMIO和PMIO)作为一种CPU对I/O设备(CPU-to-device)的通信方法，并不影响DMA(直接内存访问), 因为DMA是一种绕过CPU的内存对设备(memory-to-device)的通信方法。