06-内存页面大小
23.1.4 内存页面大小
一般情况下,内存页面的大小是4KB(即PAGE_SIZE定义为4KB),但是这并非是一定的,实际上,页面大小在一个4~64KB的范围内是可变的,即使在相同的平台下也可以定义不同的PAGE_SIZE和PAGE_SHIFT。
鉴于此,当在内核空间中通过get_free_pages()函数申请内存时,如果它的第二个参数为order,意味着申请PAGE_SIZE * 2order的内存,同样是申请64KB内存,如果PAGE_SIZE为4KB,应该传入的order是4,如果PAGE_SIZE是16KB,应该传入的参数是2。为了保证在申请64KB内存时,在任何PAGE_SIZE的情况下都成立,可以使用如代码清单23.3所示的方法。
代码清单23.3 通过get_order()获得要申请内存的order
1 #include <asm/page.h>
2 int order = get_order(64*1024);
3 buf = get_free_pages(GFP_KERNEL, order);