Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux alloc_pages()与u free_pages()配对_Linux_Linux Kernel - Fatal编程技术网

Linux alloc_pages()与u free_pages()配对

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

我读了《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 long addr, unsigned int order)
问题在于函数名中两个下划线的使用,以及函数如何配对。 1.linux内核何时会在其函数名中使用两个下划线? 2.为什么alloc_页面与uu free_页面配对,而不是与free_页面配对?

您可以注意到:

alloc_pages()/__free_pages()将“页面*”(页面描述符)作为参数。 它们通常由一些基础结构内核代码在内部使用,比如页面错误处理程序,它们希望操作页面描述符而不是内存块内容

__get_free_pages()/free_pages()将“unsigned long”(内存块的虚拟地址)作为参数 它们可以由希望使用内存块本身的代码使用,分配后,您可以读取/写入此内存块

至于他们的名字和双下划线“_u”,你不需要太麻烦。有时,内核函数在第一次编写时被随意命名,没有过多考虑。当人们认为这些函数的名字不合适,但后来这些函数已经在内核中广泛使用,而内核人员只是懒得更改它们