Linux alloc_pages()与u free_pages()配对
我读了《Linux内核开发》一书,发现了一些让我困惑的函数,如下所示:Linux alloc_pages()与u free_pages()配对,linux,linux-kernel,Linux,Linux Kernel,我读了《Linux内核开发》一书,发现了一些让我困惑的函数,如下所示: struct page *alloc_pages(gfp_t gfp_mask, unsigned int order) void __free_pages(struct page *page, unsigned int order) unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) void free_pages(unsigned lon
struct page *alloc_pages(gfp_t gfp_mask, unsigned int order)
void __free_pages(struct page *page, unsigned int order)
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
void free_pages(unsigned long addr, unsigned int order)
问题在于函数名中两个下划线的使用,以及函数如何配对。
1.linux内核何时会在其函数名中使用两个下划线?
2.为什么alloc_页面与uu free_页面配对,而不是与free_页面配对?您可以注意到:
alloc_pages()/__free_pages()将“页面*”(页面描述符)作为参数。
它们通常由一些基础结构内核代码在内部使用,比如页面错误处理程序,它们希望操作页面描述符而不是内存块内容
__get_free_pages()/free_pages()将“unsigned long”(内存块的虚拟地址)作为参数
它们可以由希望使用内存块本身的代码使用,分配后,您可以读取/写入此内存块
至于他们的名字和双下划线“_u”,你不需要太麻烦。有时,内核函数在第一次编写时被随意命名,没有过多考虑。当人们认为这些函数的名字不合适,但后来这些函数已经在内核中广泛使用,而内核人员只是懒得更改它们