23 | 物理内存管理(上):会议室管理员如何分配会议室?
刘超
该思维导图由 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
《趣谈 Linux 操作系统》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(39)
- 最新
- 精选
- 有铭还是没理解那个“伙伴系统”为何会命名为伙伴系统,没感觉到有“伙伴”的感觉
作者回复: 一整个会议室,划分为两个1/2,再划分为四个1/4,两个1/4就是伙伴呀
2019-05-20415 - 奔跑的码仔老师,对于32bit的系统,如果物理内存大小小于896M,那物理内存区域还有ZONE_HIGHMEM吗?您的第26节课讲到内核处理匿名页的缺页中断处理时,会调用alloc_zeroed_user_highpage_movable去高端内存区域分配物理页,对于32bit系统,物理内存小于896M的情况,这时候伙伴系统去哪里分配物理页呢?对于64bit系统,没有高端内存区域,那上述函数去哪里分配高端内存的物理页呢?
作者回复: 小于就没有了。如果小于没有ZONE_HIGHMEM的话,就会退而求其次,在直接映射区分配,如果分配不到,就说明没有内存了。64位就是直接映射区分配。
2019-09-039 - 江山未一边读一边在脑海构想结构关系图,半天不得要领。看到最后这张图才恍然大悟。艾玛,以后先看最后这张图,少分配一点脑细胞了
作者回复: 哈哈,以后先看最后的总结图。
2019-08-014 - geraltlaush伙伴系统的意思就是劫富济贫
作者回复: 也不是,回收内存的时候,还合并呢
2019-05-224 - oldman老师,我这里有一个疑惑,内存的最大连续页是1024个页,也就是4MB的大小,我们知道在一般的应用程序中,数组都是一连串的内存,那我如果要申请一个大于4MB的数组呢,操作系统会怎么样来分配呢,期待老师解惑。
作者回复: 这是物理内存呀。应用程序操作的是虚拟内存呀,虚拟内存大了去了。
2019-07-1233 - Linuxer每个页块的第一个页的物理地址是该页块大小的整数倍。怎么理解
作者回复: 大小为16个页框的块,其起始地址是16*2^12的倍数.
2019-05-2122 - 注意力$老师,好多数据安装时都建议关闭numa,主要是觉得numa哪里不好呢
作者回复: 跨节点速度慢
2020-06-011 - 奔跑的码仔您好,之前看过一篇文章讲解Linux内存物理模型,里面说到了三种物理模型:平坦型、非连续型、稀疏性,看完本节后,发现基于zone的buddy系统和上面讲解的几种模型的关系,理不清了。不知道,三种物理模型是不是也是基于zone的伙伴系统呢?
作者回复: 这三种模型的区别是page不是连续的,对于zone没有影响
2019-08-2821 - Linuxer有些应用会要求关闭numa那么这里numanode就为1吗?这时候是所有CPU共用一个pglist?
作者回复: 关闭就smp了
2019-05-211 - 饭粒看多几遍终于稍微明白点了
作者回复: 厉害
2020-05-23
收起评论