作者:Carson_Ho
链接:https://www.jianshu.com/p/719fc4758813
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Linux
操作系统中非常重要,因为其涉及到高效的跨进程通信 & 文件操作关联 进程中的1个虚拟内存区域 & 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个进程对虚拟内存写入数据时,则真正实现了数据的可见
*/
在Linux
系统下,根据内存映射的本质原理 & 特点,其应用场景在于:
下面,我将详细讲解 内存映射应用在跨进程通信 & 文件操作的实例
Linux
系统文件操作流程如下从上面可看出:使用了内存映射的文件读/写 操作方式效率更加高、性能最好!
从上面可看出:使用了内存映射的跨进程通信 效率最高、性能最好!
本文全面讲解了 Linux
操作系统中的内存映射
原文:https://www.cnblogs.com/awkflf11/p/12670031.html