问:
在Linux内核mm/page_aloc.c文件中 alloc_pages()函数 -> __alloc_pages()函数 ->rmqueue()函数中语句:
index = (page - mem_map) - zone->offset;
MARK_USED(index, curr_order, area);
答:
- page - mem_map表示该页面在mem_map中的偏移量,而zone->offset又表示该zone中的起始地址在mem_map中的偏移量,所以(page - mem_map) - zone->offset表示该页面在zone中的偏移量。
- MARK_USED就是修改该zone上相应order中位图。具体可以参见ulk。

本文深入解析了Linux内核中页面分配的过程,特别是针对alloc_pages()函数到__alloc_pages()函数再到rmqueue()函数中的关键代码进行了详细解读。通过分析page-mem_map与zone-offset的关系,解释了如何确定页面在zone中的位置,并介绍了MARK_USED函数如何更新相应的位图。
958





