以下讨论仅限i386平台,一般考虑典型情况
linux内核对整个系统的物理内存是通过类型为struct page的数组mem_map来管理的。系统中的伙伴系统分配算法最终是通过操作这个数组来记录物理内存的分配、回收等操作。在这里不要被系统的高端内存、低端内存等概念搞混淆了,高、低端内存的分类主要在于区分物理内存地址是否可以直接映射到内核线性地址空间中。
我们知道,linux的内核地址空间大小为1G(用户空间0~3G,内核空间3G~4G,这种分法最常见),因此如果把这1G线性地址空间全部拿来直接一一映射物理内存的话,在内核态的所有进程(线程)能使用的物理内存总共最多只有1G,为了能使在内核态的所有进程能使用更多的物理内存,

本文主要介绍了Linux内核如何通过mem_map数组和伙伴系统管理物理内存,以及内核线性地址空间的划分,包括低端和高端内存的定义。在进程层面,探讨了线性地址到物理地址的转换,以及用户态和内核态下内存分配的过程,包括页目录和页表的作用。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



