21 | 内存管理(下):为客户保密,项目组独享会议室封闭开发
刘超
该思维导图由 AI 生成,仅供参考
上一节,我们讲了虚拟空间的布局。接下来,我们需要知道,如何将其映射成为物理地址呢?
你可能已经想到了,咱们前面讲 x86 CPU 的时候,讲过分段机制,咱们规划虚拟空间的时候,也是将空间分成多个段进行保存。
那就直接用分段机制呗。我们来看看分段机制的原理。
分段机制下的虚拟地址由两部分组成,段选择子和段内偏移量。段选择子就保存在咱们前面讲过的段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等。虚拟地址中的段内偏移量应该位于 0 和段界限之间。如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。
例如,我们将上面的虚拟空间分成以下 4 个段,用 0~3 来编号。每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示。
如果要访问段 2 中偏移量 600 的虚拟地址,我们可以计算出物理地址为,段 2 基地址 2000 + 偏移量 600 = 2600。
多好的机制啊!我们来看看 Linux 是如何使用这个机制的。
在 Linux 里面,段表全称段描述符表(segment descriptors),放在全局描述符表 GDT(Global Descriptor Table)里面,会有下面的宏来初始化段描述符表里面的表项。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了内存管理中的分段机制和分页机制,以及虚拟地址到物理地址的映射方式。在分段机制下,虚拟地址由段选择子和段内偏移量组成,通过段表进行映射。而Linux操作系统倾向于使用分页机制,将物理内存分成大小相同的页,并通过页表进行映射。文章还介绍了页表的结构和内存映射的管理方式。总结了内存管理系统的三个主要方面:虚拟内存空间的管理、物理内存的管理以及内存映射。最后,提出了课堂练习,引导读者了解大页的大小及配置方法。整体而言,本文深入浅出地介绍了内存管理的基本原理和实现方式,适合读者快速了解内存管理的概况。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》,新⼈⾸单¥68
《趣谈 Linux 操作系统》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(55)
- 最新
- 精选
- geraltlaush分页机制本质上来说就是类似于linux文件系统的目录管理一样,页目录项和页表项相当于根目录和上级目录,页内便宜量就是相对路径,绝对路径就是整个32位地址,分布式存储系统也是采用的类似的机制,先用元数据存储前面的路径,再用块内偏移定位到具体文件,感觉道理都差不多
作者回复: 是的
2019-05-15270 - 栋能64位Linux机器,4KB页大小,那虚拟地址组成应该是:22位PGD、10位PUD、10位PMD、10位PTE、12位页偏移地址
作者回复: 由于x86_64处理器硬件限制。x86_64处理器地址线只有48条,故而导致硬件要求传入的地址48位到63位地址必须相同。 4K页面下, 48位线性地址分为5段,位宽度分别是9、9、9、12。映射的方法为页表查找。
2019-07-20217 - 崔伟协分页,分段机制的优劣在于哪儿呢,为什么有分页分段
作者回复: 都是硬件的机制,操作系统作为软件要用硬件机制。文章里面写了优劣势了。分段容易碎片,不容易换出。
2019-05-15413 - Helios请问老师为什么一个表项用4个字节去存储呢
作者回复: 规定,可以去查一下表项的结构,太细节了,所以这里没有提
2019-05-15510 - garlic处理器体系结构支持多重页面大小,操作系统可以根据需要进行相关设置,Linux可以通过hugepage,结合处理器支持页面大小设置多种页面大小,相关笔记: https://garlicspace.com/2020/01/10/%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86-%e9%a1%b5%e9%9d%a2%e5%a4%a7%e5%b0%8f/
作者回复: 是的,Hugepage在优化内存的时候,经常使用,例如虚拟机或者DPDK使用Hugepage
2020-01-114 - 饭粒32位系统的两级页表那“ 映射 4GB 地址空间就需要 4MB+4KB 的内存”,怎么算的 4MB+4KB ?不太明白。
作者回复: 第一级4M,第二级4K
2019-06-2752 - 小松松请问一下,Linux在哪些管理上使用的分段,哪些情况使用的是分页呢? 还是说现代操作系统都已经倾向于使用分页来管理了。
作者回复: 分段仅用于权限
2019-05-202 - 有铭为什么页的默认大小是4KB,这是以什么理由定下来的,为什么不是2KB或者8KB呢
作者回复: 历史因素吧
2019-05-1522 - k先生老师,现在不都是用倒排页表了吗?还用多级页表吗?
作者回复: 本课程主要解析x86和x86_64
2020-01-071 - 佳俊老师,你好,页表目录和页表也需要内存空间,这些内存空间是在哪里分配的呢?
作者回复: 后面会讲页表初始化,启动的时候固定的根的位置,的确有点绕
2020-05-18
收起评论