问:
在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。