内存映射(Memory Map)

内存映射在Linux操作系统中非常重要,因为其涉及到高效的跨进程通信 和 文件操作。

定义

关联进程中的1个虚拟内存区域 和 1个磁盘上的对象,使得二者存在映射关系。

上述的映射过程:
1.初始化该虚拟内存区域
2.虚拟内存区域被初始化后,虚拟内存区域被初始化后,就会在交换区(swap area)之间换来换去。
3.被映射的对象称为:共享对象(普通文件 / 匿名文件)

作用

若存在上述映射关系,则具备以下特征:在多个进程的虚拟内存区域已和同1个共享对象建立映射关系的前提下,若其中1个进程对该虚拟区域进行写操作,那么对于也把该共享对象映射到其自身虚拟内存区域的进程也是可见的。
示意图如下:
在这里插入图片描述
假设进程1和进程2的虚拟内存区域同时映射到同一个共享对象,当进程1对其虚拟内存区域进行写操作时,也会映射到进程2中的虚拟内存区域。

实现过程

内存映射的实现过程主要是通过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个进程对虚拟内存写入数据时,则真正实现了数据的可见
  */

特点

  1. 提高数据的读、写和传输的时间性能, 减少了数据拷贝次数, 用户空间和内核空间的高效交互(通过映射的区域直接交互),用内存读写代替I/O读写
  2. 提高内存利用率:通过虚拟内存 和 共享对象

应用场景

在Linux系统下,根据内存映射的本质原理和特点,其应用场景在于:

  1. 实现内存共享:如 跨进程通信
  2. 提高数据读/写效率 :如 文件读/写操作

参考:
操作系统:图文详解 内存映射
理解虚拟内存机制

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
存储映射(Memory Map)是一种将文件或设备的内容映射到进程的地址空间中的技术。通过存储映射,进程可以直接访问文件或设备的内容,而无需进行繁琐的读写操作。存储映射可以提高访问速度,并且可以实现多个进程之间的共享访问。 存储映射有两种主要的用途:文件内存映射和共享内存。 文件内存映射是将一个文件映射到进程的地址空间中,使得进程可以像访问内存一样访问文件的内容。通过使用mmap系统调用,可以将一个文件映射到内存中,并通过指针来访问文件的内容。这种方式可以提高文件的读写速度,并且可以方便地进行随机访问。 共享内存是一种最快的进程间通信方式,它允许多个进程共享同一块内存区域。在共享内存中,多个进程可以同时访问同一块内存,实现数据的共享。共享内存可以使用不同的接口,如Posix接口和System V接口。通过使用shm_open()和mmap()函数,可以创建和访问共享内存区域。 总结来说,存储映射是一种将文件或设备的内容映射到进程的地址空间中的技术。文件内存映射可以提高文件的读写速度,而共享内存可以实现多个进程之间的数据共享。 #### 引用[.reference_title] - *1* *2* [linux下共享内存sharedMemory(shm)和内存映射memorymap的关系](https://blog.csdn.net/jinking01/article/details/120274820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Memory Map(Linux 存储映射IO)](https://blog.csdn.net/a931040/article/details/51955693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值