34、内核模块作者的内核内存分配 - 第1部分

内核模块作者的内核内存分配 - 第1部分

1. 不同场景下的内存分配

在了解了算法的基础知识后,我们来考虑几种内存分配的场景,包括简单场景和复杂场景。
- 最简单的情况 :内核空间的设备驱动程序(或某些核心代码)请求128 KB的内存,从空闲列表数据结构的5阶列表中获得一个内存块。之后,它会使用页面分配器的释放API释放该内存块。该API通过计算阶数,将释放的块放入5阶列表中。
- 更复杂的情况 :当设备驱动请求128 KB内存时,5阶列表为空。根据页面分配器算法,会检查6阶列表。若6阶列表非空,算法会从该列表中取出一个256 KB的块并将其分成两半。一半(128 KB)给请求者,另一半(128 KB)放入5阶列表。当请求者释放内存块时,算法会先计算其应放入5阶列表,但在放入之前,会查找其伙伴块。若找到伙伴块,会将两者合并成一个256 KB的块,并放入6阶列表,这有助于内存碎片整理。
- 不利的情况 :当设备驱动请求132 KB的内存块时,由于不能分配小于请求的内存,页面分配器会分配下一个可用的内存块,即7阶的256 KB内存块。但驱动程序只会使用前132 KB,剩余的124 KB被浪费,这就是内部碎片问题,是二进制伙伴系统的关键缺陷。不过,有一个补丁(通过 alloc_pages_exact() / free_pages_exact() API)可以缓解这个问题。

2. 页面分配器内部细节

在数据结构方面, zone 结构包含一个

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值