【1000个Linux内存知识-003】-Linux内核中物理内存是如何组织起来的?(物理内存三大金刚:node-zone-page)

物理内存三大金刚:node-zone-page

每张内存条在内核中叫一个node

在linux内核中用pglist_data来描述一个node,每个node分成了多个zone,每个zone分成了11个free_area,每个free_area存储了不同大小的页表分别有11种(2^0个page,2^1个page... 2^10个page),每一种大小的页表链又被分到了6种状态子链表(根据页表是否能够移动MOVEABLE等)

最后巩固一下,计算一些有趣有体感的数字:

1. 假设系统只有1个node,每个node有DMA、DMA32、NORMAL3种zone,总的有多少个list_head的链表?

1node * 3zone * 11area * 6type * 1list/type = 198个链表,并且这198个链表中page大小只有11种,而且每种大小的链表有=18个。

2. 如果系统有4G的物理内存,有多少个page,假设page全部在问题1中zone NORMAL上,如果每个链表上挂载的listnode节点相同,那么这个节点数量是多少?

page数:4G/ (4K/page) = 1M pages = 100万 page

大小类型数:1node * 1zone * 11area = 11个大小类型

假设每个大小的链表都挂载x个node

(2^0+2^1+...2^10) * x = 100w

也就是:2^11 * x = 100w = 2^20

所以x = 2^9=512个

所以每种大小的page平均有512个。

进一步由于每种page的有6种状态的list,所以每种状态数量是 512/6 ≈ 86个节点

(所以假设每种大小都一样多,每个list挂载都一样多,那么每个链表会挂载86个节点,小于100的数量级)

综述,所以Linux内核中物理内存是如何组织起来的?

- 是基于page的,按照node-zone-area-type-list五级管理机制管理物理内存

- 将物理内存根据不同需求分成不同的地带(zone)类似全球根据气候分成热带、温带

- 然后每个地带将物理内存是按照页为单位管理

- 然后将这些页按照2^n个大小分成11种大小的页,分别是1个页,2个页.. 最大的是1024个页

- 然后每种大小的簇 自己又根据状态分成了六个类型组type,每个组里面挂list_head的链表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值