MMIO(Memory-mapped
I/O)即
内存映射I/O,它是PCI规范的一部分,
I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的
帧缓存,BIOS,PCI设备就可以使用读写内存一样的
汇编指令完成,简化了程序设计的难度和接口的复杂性。
MMIO(Memory mapping
I/O)即
内存映射I/O,它是PCI规范的一部分,
I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的
帧缓存,BIOS,PCI设备就可以使用读写内存一样的
汇编指令完成,简化了程序设计的难度和接口的复杂性。I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O)。
对于x86架构来说,通过IN/OUT指令访问。PC架构一共有65536个8bit的
I/O端口,组成64KI/O
地址空间,编号从0~0xFFFF。连续两个8bit的端口可以组成一个16bit的端口,连续4个组成一个32bit的端口。I/O地址空间和CPU的物理地址空间是两个不同的概念,例如I/O地址空间为64K,一个32bit的CPU物理地址空间是4G。
MMIO占用CPU的物理地址空间,对它的访问可以使用CPU访问内存的指令进行。一个形象的比喻是把文件用
mmap()后,可以像访问内存一样访问文件、同样,MMIO是用访问内存一样的方式访问
I/O资源,如设备上的内存。MMIO不能被cache(有特殊情况,如VGA)。
2、前者是顺序访问。也就是说在一条
I/O指令完成前,下一条指令不会执行。例如通过Port I/O对设备发起了操作,造成了设备寄存器状态变化,这个变化在下一条指令执行前生效。uncache的MMIO通过uncahce memory的特性保证顺序性。
由于port I/O有独立的64K
I/O地址空间,但CPU的
地址线只有一套,所以必须区分地址属于物理地址空间还是I/O地址空间。