[linux]——mmap机制解决了什么问题

mmap解决了2类问题:重复问题和共享问题。

1.重复问题

重复问题又分为两类:文件重复和代码重复。

1.1 文件重复

文件重复是因为如果不用mmap机制的话,读写一个文件,那么在物理内存上会有2份重复的内容的——一份内核的页缓存(page cache),另外一份是用户空间保存文件的buf。——读时,内核先把磁盘/flash等外存的文件拷贝到页缓存,再从页缓存拷贝到用户空间的buf。这就费时费力,且内容重复,占空间。而mmap出现了,它省去了内核搬运到用户空间的buf了,直接映射一片地址到内核页缓存了。写也是一样,不用mmap时,内核从用户buffer拷贝到内核页缓存,标记为脏,内核再择机从页缓存写回磁盘/flash。有了mmap后,直接映射到内核页缓存,直接写,省去了从用户buffer拷贝到内核页缓存的操作了。从而大大提升效率。

1.2 代码重复

如果多份可执行程序都要链接某一.a库,那么每个可执行程序的代码段都有一份.a库,这纯纯的占用空间那!——所以so库应运而生,实现就是靠的mmap机制。内核在各个可执行程序运行前把它们所需的so库映射到各自的mmap区域,那么多个进程只需要物理上的一份so库就可以了,相比.a库大大节省空间。

特别需要注意的是,如果只有一份可执行程序是用到xxx.a库,那么用xxx.a库比xxx.so库更节省内存。这也是嵌入式设备砍内存时,切so库为a库的根本原因所在。

2.共享问题

共享问题又分为代码共享问题和内存共享问题。

1.2其实可以看成是解决代码共享问题。
参见1.2节。

接下来看mmap机制如何解决IPC进程间通信与内存共享的问题。 多个进程可以通过mmap机制共享同一份物理内存——这样可以实现进程间内存共享和通信。尤其是在进程间数据量交互大的情况下,用共享内存的方式是最优的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值