现在的位置: 首页 > 综合 > 正文

mmap 和 shm是什么?有什么区别

2020年02月24日 综合 ⁄ 共 813字 ⁄ 字号 评论关闭

  mmap

  mmap:memory mapping ,内存映射(磁盘文件映射)。

  1、实现原理

  建立虚拟空间一段区域和磁盘上的文件的映射。

  当访问虚拟空间中该区域时,通过 MMU,得到该区域对应的物理地址,OS 发现该区域没有数据,故产生缺页中断。OS 从磁盘中读取相应页的数据直接 copy 到物理内存中。

  对于传统的 read 系统调用来说,他们需要将磁盘中的文件先 copy 到内核缓冲区中,再将该数据 copy 到用户缓冲区中。相较于 mmap ,后者节省了一次 copy ,这也就解释了为什么 mmap 相较于 read 和 write 系统调用性能较高的原因了。

  mmap的机制如:就是在磁盘上建立一个文件,每个进程存储器里面,单独开辟一个空间来进行映射。如果多进程的话,那么不会对实际的物理存储器(主存)消耗太大。

  2、普通映射和匿名映射

  mmap 不仅可以映射到磁盘上的普通文件,还可以映射到匿名文件。实现方式是形参中的 fd = -1,flag = MAP_SHARED | MAP_ANON 。

  对于匿名映射来说,其目的是保证该共享内存映射区只能父子进程使用,其他进程无法访问。如果需要与其他进程访问的话,需要映射到磁盘上的实际文件中。

  shm 实现原理

  shm:shared memory ,共享内存。

  通过相同的 key,实现了不同的进程的各自一段虚拟地址空间同时映射到某一段物理内存中的功能。

  mmap 和 shm 区别

  mmap 保存到实际硬盘,实际存储并没有反映到主存上。优点:储存量可以很大(多于主存)缺点:进程间读取和写入速度要比主存的要慢。

  shm 保存到物理存储器(主存),实际的储存量直接反映到主存上。优点,进程间访问速度(读写)比磁盘要快;缺点,储存量不能非常大(多于主存)。

  使用上看:如果分配的存储量不大,那么使用shm;如果存储量大,那么使用shm。

  以上就是有关mmap和shm的概念以及区别介绍,要了解更多请关注学步园。

抱歉!评论已关闭.