内存映射IO (MMIO) 简介

MMIO(Memory mapping   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)。(来自百度百科)
简而言之,MMIO就是通过将外围设备映射到内存空间,便于CPU的访问。 I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O)。 前者就是我们常说的 I/O端口 ,它实际上的应该被称为 I/O地址 空间。
小概念:
32位操作系统,32bit的处理器,拥有32bit寻址能力,即可访问2^32=4G的物理地址,那么就具有4G内存的识别能力。
物理地址:并不是指物理内存的地址,而是指处理器和系统内存之间所用到的地址,可以理解为CPU最为方便访问的地址(有别于我们之前所知道的物理地址的定义:段地址*16+偏移地址),而这一个内存并不独属于物理内存,而被分成了很多部分,物理内存当然也能够占用其中的一部分。

PortIO和MMIO 的主要区别

1)前者不占用CPU的物理地址空间,后者占有(这是对x86架构说的,一些架构,如IA64,port I/O占用物理地址空间)。
2)前者是顺序访问。也就是说在一条I/O指令完成前,下一条指令不会执行。例如通过Port I/O对设备发起了操作,造成了设备寄存器状态变化,这个变化在下一条指令执行前生效。uncache的MMIO通过uncahce memory的特性保证顺序性。
3)使用方式不同
由于port I/O有独立的64K   I/O地址 空间,但CPU的 地址线 只有一套,所以必须区分地址属于物理地址空间还是I/O地址空间。

猜你喜欢

转载自blog.csdn.net/qq_21125183/article/details/80581453