MMIO(Memory mapping I/O <https://baike.baidu.com/item/I%2FO/84718>)即内存映射I/O
<https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84I%2FO>
,它是PCI规范的一部分,I/O设备
<https://baike.baidu.com/item/I%2FO%E8%AE%BE%E5%A4%87/9688581>
被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的帧缓存
<https://baike.baidu.com/item/%E5%B8%A7%E7%BC%93%E5%AD%98>
,BIOS,PCI设备就可以使用读写内存一样的汇编指令
<https://baike.baidu.com/item/%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4>
完成,简化了程序设计的难度和接口的复杂性。

基本概念
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端口
<https://baike.baidu.com/item/I%2FO%E7%AB%AF%E5%8F%A3/4414518>,它实际上的应该被称为I/O地址
<https://baike.baidu.com/item/I%2FO%E5%9C%B0%E5%9D%80/1189690>空间。小概念:
32位操作系统,32bit的处理器,拥有32bit寻址能力,即可访问2^32=4G的物理地址,那么就具有4G内存的识别能力。
物理地址:并不是指物理内存的地址,而是指处理器和系统内存之间所用到的地址,可以理解为CPU最为方便访问的地址(有别于我们之前所知道的物理地址的定义:段地址*16+偏移地址),而这一个内存并不独属于物理内存,而被分成了很多部分,物理内存当然也能够占用其中的一部分。

PortIO和MMIO 的主要区别
1)前者不占用CPU的物理地址空间
<https://baike.baidu.com/item/%E5%9C%B0%E5%9D%80%E7%A9%BA%E9%97%B4/1423980>
,后者占有(这是对x86架构 <https://baike.baidu.com/item/x86%E6%9E%B6%E6%9E%84/7470217>
说的,一些架构,如IA64 <https://baike.baidu.com/item/IA64/9162880>,port I/O
<https://baike.baidu.com/item/I%2FO/84718>占用物理地址空间)。2)前者是顺序访问。也就是说在一条I/O指令
<https://baike.baidu.com/item/I%2FO%E6%8C%87%E4%BB%A4/9468236>
完成前,下一条指令不会执行。例如通过Port
I/O对设备发起了操作,造成了设备寄存器状态变化,这个变化在下一条指令执行前生效。uncache的MMIO通过uncahce memory的特性保证顺序性。
3)使用方式不同由于port I/O有独立的64K I/O地址
<https://baike.baidu.com/item/I%2FO%E5%9C%B0%E5%9D%80/1189690>空间,但CPU的地址线
<https://baike.baidu.com/item/%E5%9C%B0%E5%9D%80%E7%BA%BF/174321>
只有一套,所以必须区分地址属于物理地址空间还是I/O地址空间。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信