前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )

【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )

作者头像
韩曙亮
发布2023-03-30 14:28:09
8.3K0
发布2023-03-30 14:28:09
举报

文章目录

一、内存映射概念


内存映射 概念 : " 内存映射 “ 就是在 进程的 ” 用户虚拟地址空间 " 中 , 创建一个 映射 , " 内存映射 " 有

2

种情况 , ① 文件映射 , ② 匿名映射 ;

  • 文件映射 : 有 文件 支持 的 内存映射 , 将 指定文件 的 指定位置 指定大小 的数据 , 映射到 进程 " 用户虚拟地址空间 " 中 , 文件内容直接装载到该 虚拟内存 中 ;
  • 匿名映射 : 没有 文件 支持 的 内存映射 , 只是将 " 物理内存空间 “ 映射到 ” 虚拟内存空间 " , 其中的数据是随机值 ;

二、内存映射原理


1、分配虚拟内存页

分配 虚拟内存页 : 在 Linux 系统中 创建 " 内存映射 “ 时 , 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ;

2、产生缺页异常

缺页异常 : Linux 内核在分配 " 物理内存 “ 时 , 采用了 ” 延迟策略 “ , 即进程第一次访问 , 不会立即分配 物理内存 , 而是产生一个 ” 缺页异常 " ;

3、分配物理内存页

分配 物理内存页 : 缺页异常后的

2

种处理策略 ;

  • 文件映射 : 对于 " 文件映射 " , 遇到 " 缺页异常 " 后 , 会 分配 " 物理内存页 “ , 并且将 要映射的文件 的 部分数据 读取到 该 ” 物理内存页 " 中 ;
  • 匿名映射 : 对于 " 匿名映射 " , 直接分配 " 物理内存页 “ , 并且在 " 页表 “ 中 , 将 ” 虚拟内存页 " 映射到 ” 物理内存页 " ;

三、共享内存


内存映射 与 共享内存 关系 :

  • 文件映射 : 在进程间的 " 共享内存 " 就是使用 共享的 " 文件映射 " 实现的 ;
  • 匿名映射 : " 匿名映射 “ 一般是 ” 私有映射 " , 一般不作为 " 共享内存 " 使用 , 如果两个进程之间 共享 匿名映射 , 只能是 父子进程之间 才可以 ;

如果修改了 进程间的 " 共享内存 " 对应的 " 文件映射 " , 修改后不会立刻更新到文件中 , 调用 msync 函数 , 强制同步写入到文件中 ;

四、进程内存段的内存映射类型


在 进程 的 " 用户虚拟地址空间 " 中 , 不同的 内存段 其 内存映射 类型也是不同的 :

  • 代码段 : 私有的 " 文件映射 " ;
  • 数据段 : 私有的 " 文件映射 " ;
  • 未初始化数据段 : 私有的 " 匿名映射 " ;
  • 堆栈 : 私有的 " 匿名映射 " ;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、内存映射概念
  • 二、内存映射原理
    • 1、分配虚拟内存页
      • 2、产生缺页异常
        • 3、分配物理内存页
        • 三、共享内存
        • 四、进程内存段的内存映射类型
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档