ioremap()和mmap

1.明确:不管是在用户空间还是在内核空间,软件一律不能去直接访问设备的物理地址;

2.在内核驱动中如果要访问设备的物理地址,需要利用ioremap将设备的物理地址映射到内核虚拟地址上(动态内存映射区),以后驱动程序访问这个内核虚拟地址就是在间接得访问设备的物理地址(MMU,TLB,TTW)

3.如果用户要访问硬件设备,不能直接访问,也不能在用户空间访问,只能通过系统调用(open,close,read,write,ioctl)来访问映射好的内核虚拟地址,通过这种间接的访问来访问硬件设备,但是如果设计到数据的拷贝,还需要借助4个内存拷贝函数!

1.通过以上的分析,发现应用程序通过read,write,ioctl来访问硬件设备,它们都要经过两次的数据拷贝,一次是用户空间和内核空间的数据拷贝,另外一次是内核空间和硬件之
间的数据拷贝,如果设备拷贝的数据量比较小,那么read,write,ioctl的两次数据拷贝的过程对系统的影响几乎可以忽略不计,如果设备的数据量非常大,例如显卡(独立),
LCD屏幕(显存共享主存),摄像头,声卡这类设备涉及的数据量比较庞大,如果还是用read,write,ioctl进行访问设备数据,无形对系统的性能影响非常大。

2.用户访问设备,最终其实涉及的用户和硬件,而read,write,ioctl本身会牵扯到内核,所以这些函数涉及2次的数据拷贝,用户要直接去访问硬件设备,只需要将硬件设备的物理地址信息映射到用户的虚拟地址空间即可,一旦完毕,不会在牵扯到内核空间,以后用户直接访问用户的虚拟地址就是在访问设备硬件,由2次的数据拷贝的转换为一次的数据拷贝。

mmap()目的:将硬件物理地址映射到用户虚拟地址空间,由2次数据拷贝变成1次数据拷贝!

ioremap和mmap的区别相关推荐

  1. linux 内存映射-ioremap和mmap函数

    最近开始学习Linux驱动程序,将内存映射和ioremap,mmap函数相关资料进行了整理 一,内存映射  对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器 ...

  2. ioremap 与 mmap【转】

    转自:http://blog.csdn.net/junllee/article/details/7415732 内存映射 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件 ...

  3. ioremap 与 mmap

    转自: http://zhuzhenzhong123.blog.163.com/blog/static/19886275201191792611666/ 几乎每一种外设都是通过读写设备上的寄存器来进行 ...

  4. linux内存操作--ioremap和mmap

    对于一个系统来讲,会有非常多的外设,那么这些外设的管理都是通过CPU完毕.那么CPU在这个过程中是怎样找到外设的呢? 虽然在一个系统中会有诸多的外设,在每一个外设的接口电路中会有多个port.可是假设 ...

  5. malloc分配内存的实现中brk和mmap的区别

    malloc函数族: #include <stdlib.h>void *malloc(size_t size);void free(void *ptr);void *calloc(size ...

  6. shmget物理内存_共享内存 mmap shmget 区别

    请参考apache对于共享内存的scoreboard的初始化,ap_init_scoreboard() 得有一个内存变量ap_scoreboard_image来索引对应的共享内存 By firewor ...

  7. Android MMKV使用及 MMAP原理

    什么是MMKV MMKV--基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强. MMKV 是基于 mmap 内存映射的移动端通 ...

  8. Linux学习之系统编程篇:shm 共享内存及其操作函数

    一.shm 和 mmap 的区别 (1)mmap 是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行映射.shm 每个进程最终会映射到同一块物理内存.shm 保存在物理内存,这样读写的速度最 ...

  9. 通俗易懂的Kafka零拷贝机制

    Kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不是kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝.下面我就画图讲解零拷贝,如果对你有帮助 ...

最新文章

  1. ICLR2020 | StructBERT : 融合语言结构的BERT模型
  2. 【C 语言】数据类型本质 ( sizeof 函数 | 数据类型大小 )
  3. leetcode C++ 28. 实现 strStr() 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 need
  4. 想过没有,Spring的Bean为啥默认单例?
  5. 逻辑漏洞小结之SRC篇
  6. Tensorflow学习教程------tfrecords数据格式生成与读取
  7. WF4.0 Beta1 CancellationScope 取消容器
  8. ejb stateless 包含在哪个包_微信评论能发表情包的那三天,今年最火表情包已有定论?!...
  9. 【GIS】投影类型的选择
  10. cmd 终端快速查看自己的ip地址
  11. AppScan报错--发生内部错误
  12. windows端口转发(端口映射)示例
  13. 电气控制技术实训考核装置
  14. 1.0 信息化与信息系统
  15. Windows7 专业版 IE8 升级 IE11--离线安装
  16. UART协议就应该这么理解
  17. gc2000导出丝印和坐标_GC2000导坐标方法
  18. python制作时间,如何利用python制作时间戳转换工具详解
  19. echarts 地图上如何打点
  20. Field eFaultPriorityService in com.ect.emes.admin.restapi.AlarmRestApi required a bean of type 解决方法

热门文章

  1. 友善之臂编linux内核,手把手教你从头开始搭建友善之臂ARM-tiny4412开发环境(史上最详细!!)...
  2. 机器学习之Naive Bayes算法:日撸Java三百行day58-59
  3. 编程题走迷宫_迷宫--小学生编程竞赛题目(两种解法,一种简单的推荐)
  4. 婚礼的正确打开方式:“电子+纸质”请柬,让婚礼更出彩
  5. [机缘参悟-57]:《素书》-4-修身养志[本德宗道章第四]
  6. 2023年上半年数据库系统工程师上午真题及答案解析
  7. Unity之几何着色器--草随风摇曳
  8. 51系列—基于51单片机的校园教室打铃系统(代码+仿真+电路图超级全)
  9. 停用词过滤---Python自然语言处理(4)
  10. 自主小型Web服务器实现——TinyHttp