文章目录

  • 一、内存映射概念
  • 二、内存映射原理
    • 1、分配虚拟内存页
    • 2、产生缺页异常
    • 3、分配物理内存页
  • 三、共享内存
  • 四、进程内存段的内存映射类型

一、内存映射概念


内存映射 概念 : " 内存映射 “ 就是在 进程的 ” 用户虚拟地址空间 " 中 , 创建一个 映射 , " 内存映射 " 有 222 种情况 , ① 文件映射 , ② 匿名映射 ;

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

二、内存映射原理


1、分配虚拟内存页

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

2、产生缺页异常

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

3、分配物理内存页

分配 物理内存页 : 缺页异常后的 222 种处理策略 ;

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

三、共享内存


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

  • 文件映射 : 在进程间的 " 共享内存 " 就是使用 共享的 " 文件映射 " 实现的 ;

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

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

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


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

  • 代码段 : 私有的 " 文件映射 " ;
  • 数据段 : 私有的 " 文件映射 " ;
  • 未初始化数据段 : 私有的 " 匿名映射 " ;
  • 堆栈 : 私有的 " 匿名映射 " ;

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

  1. Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享

    目录 为什么系统软件人员要深入了解cache? cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时, ...

  2. iOS/OS X内存管理(一):基本概念与原理

    iOS/OS X内存管理(一):基本概念与原理 发表于21小时前| 1585次阅读| 来源CSDN| 8 条评论| 作者刘耀柱 移动开发iOSObjective-C内存管理内存泄露局部变量开发经验 a ...

  3. C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理

    首先我们先了解一下内存: C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存. 如果大家在自学C++中遇到困难,想找一个学习 ...

  4. Linux内核页表管理-那些鲜为人知的秘密

    1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟 ...

  5. Linux 驱动开发 三十五:Linux 内核时钟管理

    参考: linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断 Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内 ...

  6. Linux内核如何管理内存

    在学习了进程的 虚拟地址布局 之后,让我们回到内核,来学习它管理用户内存的机制.这里再次使用 Gonzo: Linux kernel mm_struct Linux 进程在内核中是作为进程描述符 ta ...

  7. LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作

    文章目录 内存管理 Arena 结构 内存分配 内存使用率统计 TCMalloc Env家族 PosixEnv EnvWrapper InMemoryEnv 文件操作 SequentialFile W ...

  8. java内存中读文件_关于内存管理:读取Java中的大文件

    我需要一个非常了解Java和内存问题的人的建议. 我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件). 我通常知道如何做到这一点(使用BufferedReader), ...

  9. Windows/Linux内核地址空间管理的异同

    相信很多人都知道Windows页表自映射一说,也晓得Linux内核的一一线性映射.然而很多人也仅仅就是知道而已,记住一个结论比理解一个原因要简单得多.        上周末,有人极具挑衅态度的问我能否 ...

  10. 深入了解Linux内核MMU管理机制

    MMU:存储器管理单元 *虚拟内存空间到物理存储空间的映射.在ARM中采用了页式虚拟内存管理.它把虚拟地址空间分为一个个大小固定的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页.页的大小可 ...

最新文章

  1. php CI框架输出空行问题排查
  2. java list循环中删除元素的坑
  3. 老板让你抗住千万级流量,如何做架构设计?
  4. 【学习笔记】分布式Tensorflow
  5. php如何写回调函数,php – 如何使用类方法作为回调函数?
  6. LeetCode 1066. 校园自行车分配 II(状态压缩DP)
  7. 安全使用网上银行 享受在线购物时尚生活
  8. 服务器能进系统滴滴响,ibm x226服务器开机嘀嘀嘀响三遍就没反应了。是怎么回事?内存吗?...
  9. SDUT 2170 The Largest SCC bfs+tarjan
  10. linux的netperf测试,linux下Netperf使用详解
  11. 什么是友情链接?友情链接的好处及写法(图文)
  12. 这帖子,程序员的痛心疾首,我明臣哭了.
  13. Chrome 书签你知道怎么导入吗(谷歌浏览器的书签保存在哪里 、谷歌浏览器书签保存在哪个文件夹)
  14. [CF1292C] Xenon's Attack on the Gangs
  15. MySQL数据库软件及SQL简介
  16. Android Studio 连接雷电模拟器
  17. namedtuple 具名元组详解
  18. Android 热点发多播,腾讯体育-中超英超直播(com.tencent.qqsports) - 6.5.21.960 - 应用 - 酷安...
  19. 良基、归纳法、动态规划
  20. [QDialog]qt虚拟键盘的实现以及qdateedit实现打开虚拟键盘

热门文章

  1. 【kvm虚拟化详解01】-虚拟化概述和主流方案介绍
  2. 模糊控制洗衣机c语言程序,模糊控制洗衣机
  3. 如何卸载 think-cell?丨卸载教程丨卸载办法
  4. vue 日期多选插件
  5. qttabbar文件浏览器突然坏掉了!
  6. ffmpeg和JavaCV
  7. 直播系统源码开发 JavaCV实现本机摄像头画面远程直播
  8. Tcl 语言——流程控制篇
  9. js格式化显示xml
  10. 移动应用前端h5框架汇总