美文网首页iOS开发之常用技术点
内存映射mmap 和 共享内存

内存映射mmap 和 共享内存

作者: 爱秋刀鱼的猫 | 来源:发表于2018-04-26 10:28 被阅读262次
内存映射

内存映射指的是将 : 进程中的1个虚拟内存区域 & 1个磁盘上的对象,使得二者存在映射关系。当然,也可以多个进程同时映射到一个对象上面。

进程1、2的虚拟内存区域同时映射到同1个共享对象
实现过程
  • 内存映射的实现过程主要是通过Linux系统下的系统调用函数:mmap()
  • 该函数的作用 = 创建虚拟内存区域 + 与共享对象建立映射关系
  • 其函数原型、具体使用 & 内部流程 如下
/** * 函数原型 */ 
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
 /** 
* 具体使用(用户进程调用mmap()) 
* 下述代码即常见了一片大小 = MAP_SIZE的接收缓存区 & 关联到共享对象中(即建立映射) 
*/ 

mmap(NULL, MAP_SIZE, PROT_READ, MAP_PRIVATE, fd, 0); 
/** 
* 内部原理 
* 步骤1:创建虚拟内存区域 
* 步骤2:实现地址映射关系,即:进程的虚拟地址空间 ->> 共享对象 
* 注: 
* a. 此时,该虚拟地址并没有任何数据关联到文件中,仅仅只是建立映射关系 
* b. 当其中1个进程对虚拟内存写入数据时,则真正实现了数据的可见 
*/ 
优点

进程在读写磁盘的时候,大概的流程是:
以write 为例:
进程(用户空间) -> 系统调用,进入内核 -> 将要写入的数据从用户空间拷贝到内核空间的缓存区 -> 调用磁盘驱动 -> 写在磁盘上面。

使用mmap之后
进程(用户空间)--> 读写映射的内存 --> 写在磁盘上面。

(这样的优点是 避免了频繁的进入内核空间,进行系统调用,提高了效率)


共享内存

共享内存是一种ipc的方式,用于进程通信。共享内存位于 进程空间的 栈和堆之间。一般默认的大小是32M。


实现api
shmget 函数

相关文章

  • 内存映射mmap 和 共享内存

    内存映射 内存映射指的是将 : 进程中的1个虚拟内存区域 & 1个磁盘上的对象,使得二者存在映射关系。当然,也可以...

  • Linux 共享内存函数

    mmap 函数实现共享内存 1. 匿名mmap 匿名存储映射:调用mmap函数时,指定 MAP_ANONYMOUS...

  • epoll

    epoll工作原理: 1、使用内存映射技术(mmap) ——> 应用程序和内核共享一个内存 2、epoll采用基于...

  • mmap 内存映射和 shared memory 共享内存的区别

    mmap内存映射文件,多用于对内存的读写直接反应到文件上;指虚拟内存shared memory 共享内存,多用于进...

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

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

  • 25用户态内存映射

    mmap 将虚拟地址空间映射到物理内存 匿名映射,即虚拟内存和物理内存直接映射文件映射,将文件映射到虚拟内存ima...

  • NIO中FileChannel和MappedByteBuffer

    MappedByteBuffer实现MMAP(Memory Mapped Files)技术(内存映射) mmap(...

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

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

  • mmap

    简单的目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函...

  • Android跨进程通信-mmap函数

    mmap函数 mmap是一个很重要的函数,它可以实现共享内存,但并不像SystemV和Posix的共享内存存粹的只...

网友评论

    本文标题:内存映射mmap 和 共享内存

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