内存管理之内存映射——概述

内存映射是将文件或物理内存区域映射到进程虚拟地址空间的技术。它分为文件映射和匿名映射,前者数据源为文件,后者无数据源。映射还可按共享和私有划分,共享映射修改可见,私有映射修改不共享。内存映射在创建时分配虚拟内存,首次访问时触发物理内存分配和页表映射。这种技术广泛应用于进程间通信和高效文件读写。
摘要由CSDN通过智能技术生成

内存映射是在进程的虚拟地址空间中创建一个映射,分为以下两种:

  • 文件映射:文件支持的内存映射,把文件的一个区间映射到进程的虚拟地址空间,数据源是存储设备上的文件。
  • 匿名映射:没有文件支持的内存映射,把物理内存映射到进程的虚拟地址空间,没有数据源。

通常把文件映射的物理页称为文件页,把匿名映射的物理页称为匿名页。

 

根据修改是否对其他进程可见和是否传递到底层文件,内存映射分为共享映射和私有映射:

  • 共享映射:修改数据时映射相同区域的其他进程可以看见,如果是文件支持的映射,修改会传递到底层文件。
  • 私有映射:第一次修改数据时会从数据源复制一个副本,然后修改副本,其他进程看不见,不影响数据源。

总结:共享映射可以理解为该映射可以被多个进程共享;私有映射可以理解为该映射是单个进程独有的。

在进程的虚拟地址空间中,代码段和数据段是私有的文件映射,未初始化数据段、堆和栈是私有的匿名映射。

 

内存映射原理如下:

(1)创建内存映射的时候,在进程的用户虚拟地址空间中分配一个虚拟内存区域;

(2)Linux内核采用延迟分配物理内存的策略,在进程第一次访问虚拟页的时候,产生缺页异常。如果是文件映射,那么分配物理页,把文件指定区间的数据读到物理页中,然后在页表中把虚拟页映射到物理页;如果是匿名映射,那么分配物理页,然后在页表中把虚拟页映射到物理页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值