# Operating System ## 内存映射 ### 什么是内存映射 关联 进程中的1个**虚拟内存区域** 和 1个**磁盘上的对象**,使得二者存在映射关系 若存在上述映射关系,则具备以下特征: 1. 假设进程1、2的虚拟内存区域同时映射到同1个共享对象; 2. 当进程1对其虚拟内存区域进行写操作时,也会映射到进程2中的虚拟内存区域 ![image-20190219124218311](https://ws3.sinaimg.cn/large/006tKfTcly1g0bmsgdx2ij30sc17o78j.jpg) ### 实现过程 - 内存映射的实现过程主要是通过`Linux`系统下的系统调用函数:`mmap()` - 该函数的作用 = 创建虚拟内存区域 + 与共享对象建立映射关系 - 其函数原型、具体使用 & 内部流程 如下 ```c /** * 函数原型 */ 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个进程对虚拟内存写入数据时,则真正实现了数据的可见 */ ```