深入解析内存管理机制:从页面分配到区域分配器
1. 块分配
在内存管理中, __rmqueue() 函数用于在一个区域中寻找空闲块。该函数接收两个参数:区域描述符的地址和 order , order 表示请求的空闲页面块大小的对数(例如, order 为 0 表示一个页面的块,1 表示两个页面的块,依此类推)。若页面帧成功分配, __rmqueue() 函数返回第一个分配的页面帧的页面描述符的地址;否则,返回 NULL 。
struct free_area *area;
unsigned int current_order;
for (current_order=order; current_order<11; ++current_order) {
area = zone->free_area + current_order;
if (!list_empty(&area->free_list))
goto block_found;
}
return NULL;
如果循环结束仍未找到合适的空闲块, __rmqueue() 函数返回 NULL ;若找到合适的空闲块,则将其第一个页面帧的描述符从列表中移除,并减少区域描述符中的 free_pages 值。
超级会员免费看
订阅专栏 解锁全文
1720

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



