物理内存管理

站在处理器的角度来看,管理内存的最小单位是页。
在linux内核中,一个页的大小是4KB,管理一个页的数据结构为struct page,每个页面都有自己的编号pfn。struct page的地址存储在mem_map[]数组中。

1. pfn与mem_map[]

对于一个计算机系统,其整个物理地址空间应该是从0开始,到实际系统能支持的最大物理空间为止的一段地址空间。在ARM系统中,假设物理地址是32个bit,那么其物理地址空间就是4G,在ARM64系统中,如果支持的物理地址bit数目是48个,那么其物理地址空间就是256T。当然,实际上这么大的物理地址空间并不是都用于内存,有些也属于I/O空间(当然,有些cpu arch有自己独立的io address space)。因此,内存所占据的物理地址空间应该是一个有限的区间,不可能覆盖整个物理地址空间。

PFN是page frame number的缩写,所谓page frame,就是针对物理地址空间而言的,把物理地址空间分成一个个的page size的区域,并且给每一个page 编号,这个号码就是PFN。假设物理内存从0地址开始,那么PFN等于0的那个页帧就是0地址(物理地址)开始的那个page。假设物理内存从x地址开始,那么第一个页帧号码就是(x>>PAGE_SHIFT)。

总结一下,
1.mem_map[index] 数组的index 和 pfn 之间是存在一个固定的偏移(与芯片的layout相关;
2.pfn对应了整个物理地址空间,而mem_map[]只管理了用于内存的区间;
3.比如arm32有4G的物理地址空间,对于某个物理地址x来说,它的pfn就是x>>12(4KB页面),现在假设DDR只有1G,那么mem_map[]就只是对应这个1G空间,但pfn是对应了整个4G的空间

2. zone

层次说明
Node(存储节点)CPU被划分成多个节点,每个节点都有自己的一块内存,可以参考NUMA架构有关节点的介绍
Zone(管理区)每一个Node(节点)中的内存被划分成多个管理区域(Zone),用于表示不同范围的内存
Page(页面)每一个管理区又进一步被划分为多个页面,页面是内存管理中最基础的分配单位

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值