美文网首页js css html
进程间通信之共享内存&内存映射(mmap)

进程间通信之共享内存&内存映射(mmap)

作者: andorid_xiao | 来源:发表于2023-11-13 20:17 被阅读0次

https://blog.csdn.net/hj605635529/article/details/67636526
https://blog.csdn.net/hj605635529/article/details/73163513

1.概念:

共享内存就是多个进程的地址空间映射到同一个物理内存,多个进程都能看到这块物理内存,共享内存可以提供给服务器进程和客户进程之间进行通信,不需要进行数据的复制,所以速度最快。

linux中的两种共享内存。一种是我们的IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储映射I/O(mmap函数)

在说mmap之前我们先说一下普通的读写文件的原理,进程调用read或是write后会陷入内核,因为这两个函数都是系统调用,进入系统调用后,内核开始读写文件,假设内核在读取文件,内核首先把文件读入自己的内核空间,读完之后进程在内核回归用户态,内核把读入内核内存的数据再copy进入进程的用户态内存空间。实际上我们同一份文件内容相当于读了两次,先读入内核空间,再从内核空间读入用户空间。

Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改,mmap()系统调用使得进程之间可以通过映射一个普通的文件实现共享内存。普通文件映射到进程地址空间后,进程可以向访问内存的方式对文件进行访问,不需要其他系统调用(read,write)去操作。

相关文章

  • Android Binder机制

    Binder简介 binder使用内存映射(mmap)来实现进程间传递数据,比较传统的进程间通信. binder只...

  • 【网络】关于MMAP、零拷贝

    MMAP介绍 mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。 普通文件被映射到进程地址空间后...

  • 2018-08-06

    【转】父子进程通信的两种方式--消息队列和共享内存 man mmap

  • Linux 进程间通信 -- 文件mmap映射

    Linux 进程间通信 -- 文件mmap映射 打开一个文件, 并且指定文件中的一个区域, 映射到内存中, 然后直...

  • 共享内存

    Linux进程间通信 - 共享内存

  • Linux进程通信

    共享内存mmap(父子进程) main.cpp makefile: 共享内存posix(父子进程) main.cp...

  • 共享内存

    进程间通信之-共享内存Shared Memory--linux内核剖析(十一)

  • 共享内存之——mmap内存映射

    文章转自博客园。原文 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间...

  • Android

    ContentProvider 作用 进程间数据共享 即跨进程通信 原理 Binder进程间通信结合匿名共享内存(...

  • 进程间通讯

    一、进程间通讯的方式进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和...

网友评论

    本文标题:进程间通信之共享内存&内存映射(mmap)

    本文链接:https://www.haomeiwen.com/subject/ucfibdtx.html