英文全称

  1. mmap:memory mapping ,内存映射(磁盘文件映射)。
  2. shm:shared memory ,共享内存。

mmap

1、实现原理

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

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

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

2、普通映射和匿名映射

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

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

shm 实现原理

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

二者区别

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

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

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

(SAW:Game Over!)

mmap 和 shm 区别相关推荐

  1. 什么是共享内存?在内存中的具体位置?shmget的具体使用原理以及其他关联函数(shmat ( ),shmdt ( ),shmctl ( ))、以及C++应用案例?mmap和shm的区别?

    共享内存(shared memory) 共享内存 1.背景 2.定义 3.两种方式(mmap上一篇博客说明) 3.2.shmget 3.2.1.使用流程和基本原理 3.2.2.函数原型(创建共享内存) ...

  2. 共享内存机制——mmap和shm

    共享内存是进程间通信的一种方法,常用到的有mmap和shm,下面做一个比较. mmap机制: 在磁盘上建立一个文件,然后把文件内容映射到虚拟内存上,在每个进程的虚拟存储器里面,单独开辟一个空间来进行映 ...

  3. mmap和shm共享内存的区别和联系

    共享内存的创建 根据理论: 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件(特殊情况下还可以采用匿 ...

  4. mmap映射区和shm共享内存的区别总结

    linux中的两种共享内存.一种是我们的IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储映射I/O(mmap函数) 在说mmap之前我们先说一下普通的读写文件的原理,进程调用 ...

  5. mmap内存映射、system V共享内存和Posix共享内存

    linux内核支持多种共享内存方式,如mmap内存映射,Posix共享内存,以system V共享内存.当内核空间和用户空间存在大量数据交互时,共享内存映射就成了这种情况下的不二选择.它能够最大限度的 ...

  6. Linux下进程通信---共享内存之:shm

    进程通信:进程与进程间的数据交换,称为进程通信.进程通讯的方式有:共享内存.信号量.管道.消息队列.socket等等. 共享内存:内核管理一片物理内存,允许不同的进程同时映射,多个进程可以映射同一块内 ...

  7. 数据安全传输平台项目笔记

    项目介绍与密码学知识 项目整体架构图: 主要功能:对网络通信的数据进行加解密 基础组件: 数据序列化:protobuf socket通信:线程池,连接池 共享内存IPC Mysql数据库 数据加密:o ...

  8. Linux高并发服务器开发---笔记2(多进程)

    0630 第4章 项目制作与技能提升 4.0 视频课链接 4.1 项目介绍与环境搭建 4.2 Linux系统编程1.4.3 Linux系统编程2 4.4 多进程 1-9 10.进程间通信☆☆☆ 进程间 ...

  9. SYSV IPC-共享内存

    目录 1.共享内存的实质 2.使用共享内存的步骤 3.创建共享内存 4.连接共享内存 5.断开与共享内存的关联 6.删除共享内存 7.ipcs/ipcrm 8.查看内核中的共享内存的最大值 9.其他的 ...

最新文章

  1. 1.5 卷积步长-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  2. 51Nod- 1915 西湖游船
  3. Java8 - 一文搞定Fork/Join 框架
  4. ai包装插件_关于DIP异型插件机导入与相关来料标准研究
  5. 转数组在线 php_2021年最新PHP 面试、笔试题汇总(三)
  6. 前端学习(1431):ajax封装六
  7. 2.1.2数据通信基础知识
  8. (NO.00003)iOS游戏简单的机器人投射游戏成形记(一)
  9. CSS3j背景渐变,字体颜色渐变,以及兼容IE写法
  10. Android一帧一帧的动画
  11. 网页爬虫实例一(网页截屏)
  12. Android应用源码之仿墨迹天气插件
  13. Ti芯片 bq76940锂电池管理系统BMS资料,源程序+PDF原理图,主控stm32f030。
  14. 如何制作数据透视表?超详细教程为你解答
  15. 【AAAI 2021】全部接受论文列表(四)
  16. iptables中snat、dnat、masquerade
  17. 入门激光雷达点云的3D目标检测
  18. 在微信小程序中制作的登录功能一定要考虑不同的入口问题
  19. 世界杯电视直播表(及时更新)
  20. springboot依赖lombok插件、lombok常用注解

热门文章

  1. python (16) 如何在linux下安装lxml(pip安装,ubuntu下,centos下)
  2. 【51CTO/BBS】请教: SQL里有没有字符串组合Join的函数??
  3. C#实现Windows后台服务实例浅析
  4. 如何让IDEA启动多个SpringBoot实例
  5. Linux安装minikube命令整理
  6. 使用KubeKey安装K8S集群
  7. Linux centos7 配置用户自动登录
  8. linux bash中的引号:单双引号、反撇号
  9. kafka-topics.sh topic主题crud
  10. eureka服务失效剔除时长配置