码迷,mamicode.com
首页 > 系统相关 > 详细

Linux之共享内存shm和内存映射mmap

时间:2019-08-21 15:10:01      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:前言   linux   进程   速度   http   mic   机器   读文件   多个   

一、共享内存shm

1 概念:多个进程的地址空间都映射到同一块物理内存,这样多个进程都能看到这块物理内存,实现进程间通信,而且不需要数据的拷贝,所以速度最快。

技术图片

二、内存映射mmap

1 前言:先介绍一下普通的读写文件的原理,进程调用read/write系统调用后会陷入内核,内核开始读写文件,假设内核是在读文件,内核先把文件读取到内核缓冲区,然后把内核缓冲区的数据拷贝到用户缓冲区,实际上整个过程拷贝了两次数据,即先从文件到内核缓冲区,再从内核缓冲区到用户缓冲区;

2 概念:把某个文件映射到进程的地址空间,通过对地址空间的读写,实现对文件的读写,mmap系统调用可以使多个进程映射同一个普通文件来实现共享内存。普通文件映射到地址空间后,进程可以像访问内存的方式一样去访问该文件,这样不需要调用read/write系统调用,减少了用户、内核切换的开销;

 技术图片

三、二者的比较

1 共享内存shm是在内存中创建空间,然后每个进程映射到此处;内存映射mmap是创建一个文件,然后每个进程映射到此处;

2 当机器重启时,mmap把文件保存在磁盘上,所以不会丢失,而共享内存shm存储在内存上就会丢失;

Linux之共享内存shm和内存映射mmap

标签:前言   linux   进程   速度   http   mic   机器   读文件   多个   

原文地址:https://www.cnblogs.com/bo1990/p/11388787.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!