【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )
文章目录
- 一、内存映射概念
- 二、内存映射原理
- 1、分配虚拟内存页
- 2、产生缺页异常
- 3、分配物理内存页
- 三、共享内存
- 四、进程内存段的内存映射类型
一、内存映射概念
内存映射 概念 : " 内存映射 “ 就是在 进程的 ” 用户虚拟地址空间 " 中 , 创建一个 映射 , " 内存映射 " 有 222 种情况 , ① 文件映射 , ② 匿名映射 ;
- 文件映射 : 有 文件 支持 的 内存映射 , 将 指定文件 的 指定位置 指定大小 的数据 , 映射到 进程 " 用户虚拟地址空间 " 中 , 文件内容直接装载到该 虚拟内存 中 ;
- 匿名映射 : 没有 文件 支持 的 内存映射 , 只是将 " 物理内存空间 “ 映射到 ” 虚拟内存空间 " , 其中的数据是随机值 ;
二、内存映射原理
1、分配虚拟内存页
分配 虚拟内存页 : 在 Linux 系统中 创建 " 内存映射 “ 时 , 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ;
2、产生缺页异常
缺页异常 : Linux 内核在分配 " 物理内存 “ 时 , 采用了 ” 延迟策略 “ , 即进程第一次访问 , 不会立即分配 物理内存 , 而是产生一个 ” 缺页异常 " ;
3、分配物理内存页
分配 物理内存页 : 缺页异常后的 222 种处理策略 ;
- 文件映射 : 对于 " 文件映射 " , 遇到 " 缺页异常 " 后 , 会 分配 " 物理内存页 “ , 并且将 要映射的文件 的 部分数据 读取到 该 ” 物理内存页 " 中 ;
- 匿名映射 : 对于 " 匿名映射 " , 直接分配 " 物理内存页 “ , 并且在 " 页表 “ 中 , 将 ” 虚拟内存页 " 映射到 ” 物理内存页 " ;
三、共享内存
内存映射 与 共享内存 关系 :
文件映射 : 在进程间的 " 共享内存 " 就是使用 共享的 " 文件映射 " 实现的 ;
匿名映射 : " 匿名映射 “ 一般是 ” 私有映射 " , 一般不作为 " 共享内存 " 使用 , 如果两个进程之间 共享 匿名映射 , 只能是 父子进程之间 才可以 ;
如果修改了 进程间的 " 共享内存 " 对应的 " 文件映射 " , 修改后不会立刻更新到文件中 , 调用 msync
函数 , 强制同步写入到文件中 ;
四、进程内存段的内存映射类型
在 进程 的 " 用户虚拟地址空间 " 中 , 不同的 内存段 其 内存映射 类型也是不同的 :
- 代码段 : 私有的 " 文件映射 " ;
- 数据段 : 私有的 " 文件映射 " ;
- 未初始化数据段 : 私有的 " 匿名映射 " ;
- 堆栈 : 私有的 " 匿名映射 " ;
【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )相关推荐
- Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享
目录 为什么系统软件人员要深入了解cache? cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时, ...
- iOS/OS X内存管理(一):基本概念与原理
iOS/OS X内存管理(一):基本概念与原理 发表于21小时前| 1585次阅读| 来源CSDN| 8 条评论| 作者刘耀柱 移动开发iOSObjective-C内存管理内存泄露局部变量开发经验 a ...
- C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
首先我们先了解一下内存: C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存. 如果大家在自学C++中遇到困难,想找一个学习 ...
- Linux内核页表管理-那些鲜为人知的秘密
1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟 ...
- Linux 驱动开发 三十五:Linux 内核时钟管理
参考: linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断 Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内 ...
- Linux内核如何管理内存
在学习了进程的 虚拟地址布局 之后,让我们回到内核,来学习它管理用户内存的机制.这里再次使用 Gonzo: Linux kernel mm_struct Linux 进程在内核中是作为进程描述符 ta ...
- LevelDB 源码剖析(三)公共基础:内存管理、数值编码、Env家族、文件操作
文章目录 内存管理 Arena 结构 内存分配 内存使用率统计 TCMalloc Env家族 PosixEnv EnvWrapper InMemoryEnv 文件操作 SequentialFile W ...
- java内存中读文件_关于内存管理:读取Java中的大文件
我需要一个非常了解Java和内存问题的人的建议. 我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件). 我通常知道如何做到这一点(使用BufferedReader), ...
- Windows/Linux内核地址空间管理的异同
相信很多人都知道Windows页表自映射一说,也晓得Linux内核的一一线性映射.然而很多人也仅仅就是知道而已,记住一个结论比理解一个原因要简单得多. 上周末,有人极具挑衅态度的问我能否 ...
- 深入了解Linux内核MMU管理机制
MMU:存储器管理单元 *虚拟内存空间到物理存储空间的映射.在ARM中采用了页式虚拟内存管理.它把虚拟地址空间分为一个个大小固定的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页.页的大小可 ...
最新文章
- php CI框架输出空行问题排查
- java list循环中删除元素的坑
- 老板让你抗住千万级流量,如何做架构设计?
- 【学习笔记】分布式Tensorflow
- php如何写回调函数,php – 如何使用类方法作为回调函数?
- LeetCode 1066. 校园自行车分配 II(状态压缩DP)
- 安全使用网上银行 享受在线购物时尚生活
- 服务器能进系统滴滴响,ibm x226服务器开机嘀嘀嘀响三遍就没反应了。是怎么回事?内存吗?...
- SDUT 2170 The Largest SCC bfs+tarjan
- linux的netperf测试,linux下Netperf使用详解
- 什么是友情链接?友情链接的好处及写法(图文)
- 这帖子,程序员的痛心疾首,我明臣哭了.
- Chrome 书签你知道怎么导入吗(谷歌浏览器的书签保存在哪里 、谷歌浏览器书签保存在哪个文件夹)
- [CF1292C] Xenon's Attack on the Gangs
- MySQL数据库软件及SQL简介
- Android Studio 连接雷电模拟器
- namedtuple 具名元组详解
- Android 热点发多播,腾讯体育-中超英超直播(com.tencent.qqsports) - 6.5.21.960 - 应用 - 酷安...
- 良基、归纳法、动态规划
- [QDialog]qt虚拟键盘的实现以及qdateedit实现打开虚拟键盘