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地址空间。

内存映射IO (MMIO) 简介相关推荐

  1. linux内存映射边读边写,内存映射IO空间的读写函数writeb(), writew(), writel()

    132 } IO_CONCAT定义在include/asm-$(arch)目录下的IO.H中 #define IO_CONCAT(a,b)_IO_CONCAT(a,b) #define _IO_CON ...

  2. 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别

    最近在看NVMeDirect和SPDK的源码,觉得有必要梳理一下MMIO和PMIO的区别.关于MMIO和PMIO,维基百科上是这么讲滴, Memory-mapped I/O (MMIO) and po ...

  3. IO的端口映射和内存映射 (Port mapped I/O 和 Memory mapped I/O说明)

    IO端口和IO内存的区别及分别使用的函数接口  每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以 ...

  4. 【java】java中内存映射文件和IO

    转载:https://leokongwq.github.io/2017/02/25/java-memorymapped-file-and-io.html 对大多数Java开发人员来说,Java中的内存 ...

  5. Java基础:JavaNIO 之 内存映射文件原理

    1. 前言 最近研究Java中内存映射I/O.Java类库中的NIO中的内存映射文件MappedByteBuffer,相对于Java I/O是一个新的功能.特把适合用于处理大文件,在对大文件处理的时候 ...

  6. linux 文件IO与内存映射:内存映射

    前言 前面几篇我们学习了用户空间的IO缓冲区,以及IO缓冲区的分散聚合IO技术. 为了减少系统调用的次数,提升系统性能,操作系统开发者门提出了这么多的缓存技术. 但是到这里这些技术同样有不足的地方:不 ...

  7. 磁盘IO:缓存IO、直接IO、内存映射

    磁盘IO的几种访问方式如下: 缓存IO 缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O.在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓 ...

  8. Omap4460内存映射简介

    Omap4460内存映射简介 Omap4460作为32位芯片,它的4G空间被分成4个部分(G0~G3): Q0:GPMC空间(通用存储器控制器) 1.  用于NOR/NAND flash 2.  用于 ...

  9. 第十七篇,文件偏移量lseek函数,系统IO应用实例(LCD应用)和内存映射详细讲解。

    一.文件偏移量. 1.什么是文件偏移量? 文件偏移量就是文件光标当前的定位,默认打开一个文件时,文件的定位都是在文件的最开头. 文件读操作/写操作都会使得文件偏移量往后偏移. 2.怎么才能使得文件偏移 ...

最新文章

  1. mongoose手动生成ObjectId
  2. java 继承与多态
  3. 运行报错error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
  4. MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)
  5. [转载]Hot Door CADtools (实战篇)
  6. 手机app 服务器 网页同步,手机app接入云服务器
  7. ActiveMQ中的温度,存储和内存使用百分比
  8. python3.6里有xhr吗_python – XHR请求URL在尝试解析其内容时不存在
  9. swft c 语言 数组,如何在swift中实现数组的深拷贝
  10. yii2: 点击编辑后,左侧的连接(a.navtab)失效,变成在新窗口打开
  11. 三星Galaxy S22首发!4nm旗舰芯Exynos 2200跑分出炉
  12. 电脑黑屏故障的解决方案
  13. C#中的#define DEBUG疑问
  14. /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:在函数‘_start’中:(.text+0x20):对‘main’未
  15. Proteus与emu8086实现流水灯联调
  16. Java数字转换大写
  17. 计算机辅助制造系统英文,计算机辅助集成制造系统,computer-aided integrated manufacturing system,音标,读音,翻译,英文例句,英语词典...
  18. 在matlab中读取二进制文件
  19. MTK6577+Android烧录
  20. 群晖邮箱服务器需要什么证书,群晖NAS邮件通知及两步验证登录详解

热门文章

  1. noip2006总结
  2. java应用之solr入门篇
  3. [bzoj4590][Shoi2015]自动刷题机
  4. mysql select 1
  5. sql server 常用的扩展存储过程
  6. na na na na na ~
  7. 在 centos6 上安装 LAMP
  8. 【转】MongoDB 3.0 正式版本即将发布,强力推荐
  9. [转载]常用正则表达式
  10. 计算机视觉之人脸检测相关Paper资源汇总