趣谈 Linux 操作系统
刘超
前网易杭州研究院云计算技术部首席架构师
85458 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 72 讲
趣谈 Linux 操作系统
15
15
1.0x
00:00/00:00
登录|注册

21 | 内存管理(下):为客户保密,项目组独享会议室封闭开发

64位系统的四级目录
页表项管理
页表结构
物理内存分页
Linux中的分段机制
段表结构
虚拟地址组成
内存管理的三件事情
大页的大小及配置方法
内存映射
物理内存管理
虚拟内存空间管理
分页机制
分段机制
总结
课堂练习
内存管理精细化
虚拟空间布局
解析内存管理

该思维导图由 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
立即购买
登录 后留言

全部留言(55)

  • 最新
  • 精选
  • geraltlaush
    分页机制本质上来说就是类似于linux文件系统的目录管理一样,页目录项和页表项相当于根目录和上级目录,页内便宜量就是相对路径,绝对路径就是整个32位地址,分布式存储系统也是采用的类似的机制,先用元数据存储前面的路径,再用块内偏移定位到具体文件,感觉道理都差不多

    作者回复: 是的

    2019-05-15
    2
    70
  • 栋能
    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-20
    2
    17
  • 崔伟协
    分页,分段机制的优劣在于哪儿呢,为什么有分页分段

    作者回复: 都是硬件的机制,操作系统作为软件要用硬件机制。文章里面写了优劣势了。分段容易碎片,不容易换出。

    2019-05-15
    4
    13
  • Helios
    请问老师为什么一个表项用4个字节去存储呢

    作者回复: 规定,可以去查一下表项的结构,太细节了,所以这里没有提

    2019-05-15
    5
    10
  • 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-11
    4
  • 饭粒
    32位系统的两级页表那“ 映射 4GB 地址空间就需要 4MB+4KB 的内存”,怎么算的 4MB+4KB ?不太明白。

    作者回复: 第一级4M,第二级4K

    2019-06-27
    5
    2
  • 小松松
    请问一下,Linux在哪些管理上使用的分段,哪些情况使用的是分页呢? 还是说现代操作系统都已经倾向于使用分页来管理了。

    作者回复: 分段仅用于权限

    2019-05-20
    2
  • 有铭
    为什么页的默认大小是4KB,这是以什么理由定下来的,为什么不是2KB或者8KB呢

    作者回复: 历史因素吧

    2019-05-15
    2
    2
  • k先生
    老师,现在不都是用倒排页表了吗?还用多级页表吗?

    作者回复: 本课程主要解析x86和x86_64

    2020-01-07
    1
  • 佳俊
    老师,你好,页表目录和页表也需要内存空间,这些内存空间是在哪里分配的呢?

    作者回复: 后面会讲页表初始化,启动的时候固定的根的位置,的确有点绕

    2020-05-18
收起评论
显示
设置
留言
55
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部