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

23 | 物理内存管理(上):会议室管理员如何分配会议室?

伙伴系统
页的分配
free_area
struct zone
zone_type
伙伴系统
区域
pglist_data_t
页的分配
节点
struct page
NUMA(Non-uniform memory access)
SMP(Symmetric multiprocessing)
平坦内存模型
物理内存的组织方式
物理内存管理

该思维导图由 AI 生成,仅供参考

前一节,我们讲了如何从项目经理的角度看内存,看到的是虚拟地址空间,这些虚拟的地址,总是要映射到物理的页面。这一节,我们来看,物理的页面是如何管理的。

物理内存的组织方式

前面咱们讲虚拟内存,涉及物理内存的映射的时候,我们总是把内存想象成它是由连续的一页一页的块组成的。我们可以从 0 开始对物理页编号,这样每个物理页都会有个页号。
由于物理地址是连续的,页也是连续的,每个页大小也是一样的。因而对于任何一个地址,只要直接除一下每页的大小,很容易直接算出在哪一页。每个页有一个结构 struct page 表示,这个结构也是放在一个数组里面,这样根据页号,很容易通过下标找到相应的 struct page 结构。
如果是这样,整个物理内存的布局就非常简单、易管理,这就是最经典的平坦内存模型(Flat Memory Model)。
我们讲 x86 的工作模式的时候,讲过 CPU 是通过总线去访问内存的,这就是最经典的内存使用方式。
在这种模式下,CPU 也会有多个,在总线的一侧。所有的内存条组成一大片内存,在总线的另一侧,所有的 CPU 访问内存都要过总线,而且距离都是一样的,这种模式称为 SMP(Symmetric multiprocessing),即对称多处理器。当然,它也有一个显著的缺点,就是总线会成为瓶颈,因为数据都要走它。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了物理内存管理的组织方式和节点、区域的概念,以及页的数据结构和分配过程。首先详细解析了物理内存的组织方式,包括平坦内存模型、SMP和NUMA模式,以及非连续内存模型和稀疏内存模型。其次,重点介绍了NUMA方式下的节点结构和区域的定义,以及冷热页的概念。文章还介绍了页的数据结构struct page,包括匿名页和内存映射文件的使用模式,以及slab allocator、slub allocator和slob等小块内存分配器。此外,还详细解析了伙伴系统的页块链表和分配过程,以及相关的代码实现。通过本文,读者可以快速了解物理内存管理的基本概念和组织结构,以及页的数据结构和分配过程的具体实现细节。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(39)

  • 最新
  • 精选
  • 有铭
    还是没理解那个“伙伴系统”为何会命名为伙伴系统,没感觉到有“伙伴”的感觉

    作者回复: 一整个会议室,划分为两个1/2,再划分为四个1/4,两个1/4就是伙伴呀

    2019-05-20
    4
    15
  • 奔跑的码仔
    老师,对于32bit的系统,如果物理内存大小小于896M,那物理内存区域还有ZONE_HIGHMEM吗?您的第26节课讲到内核处理匿名页的缺页中断处理时,会调用alloc_zeroed_user_highpage_movable去高端内存区域分配物理页,对于32bit系统,物理内存小于896M的情况,这时候伙伴系统去哪里分配物理页呢?对于64bit系统,没有高端内存区域,那上述函数去哪里分配高端内存的物理页呢?

    作者回复: 小于就没有了。如果小于没有ZONE_HIGHMEM的话,就会退而求其次,在直接映射区分配,如果分配不到,就说明没有内存了。64位就是直接映射区分配。

    2019-09-03
    9
  • 江山未
    一边读一边在脑海构想结构关系图,半天不得要领。看到最后这张图才恍然大悟。艾玛,以后先看最后这张图,少分配一点脑细胞了

    作者回复: 哈哈,以后先看最后的总结图。

    2019-08-01
    4
  • geraltlaush
    伙伴系统的意思就是劫富济贫

    作者回复: 也不是,回收内存的时候,还合并呢

    2019-05-22
    4
  • oldman
    老师,我这里有一个疑惑,内存的最大连续页是1024个页,也就是4MB的大小,我们知道在一般的应用程序中,数组都是一连串的内存,那我如果要申请一个大于4MB的数组呢,操作系统会怎么样来分配呢,期待老师解惑。

    作者回复: 这是物理内存呀。应用程序操作的是虚拟内存呀,虚拟内存大了去了。

    2019-07-12
    3
    3
  • Linuxer
    每个页块的第一个页的物理地址是该页块大小的整数倍。怎么理解

    作者回复: 大小为16个页框的块,其起始地址是16*2^12的倍数.

    2019-05-21
    2
    2
  • 注意力$
    老师,好多数据安装时都建议关闭numa,主要是觉得numa哪里不好呢

    作者回复: 跨节点速度慢

    2020-06-01
    1
  • 奔跑的码仔
    您好,之前看过一篇文章讲解Linux内存物理模型,里面说到了三种物理模型:平坦型、非连续型、稀疏性,看完本节后,发现基于zone的buddy系统和上面讲解的几种模型的关系,理不清了。不知道,三种物理模型是不是也是基于zone的伙伴系统呢?

    作者回复: 这三种模型的区别是page不是连续的,对于zone没有影响

    2019-08-28
    2
    1
  • Linuxer
    有些应用会要求关闭numa那么这里numanode就为1吗?这时候是所有CPU共用一个pglist?

    作者回复: 关闭就smp了

    2019-05-21
    1
  • 饭粒
    看多几遍终于稍微明白点了

    作者回复: 厉害

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