我读了“”一书,发现了一些让我困惑的函数,如下所示:
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_pages与__free_pages成对,而不是free_pages?
发布于 2014-02-21 07:40:15
你可以注意到:
alloc_pages() / __free_pages()以"page *“(页描述符)作为参数。它们通常由一些基础结构内核代码在内部使用,比如页面错误处理程序,它们希望操作页面描述符而不是内存块内容。
__get_free_pages() / free_pages()以“无符号长”(内存块的虚拟地址)作为参数,它们可以被希望使用内存块本身的代码使用,在分配之后,您可以对这个内存块进行读写。
至于他们的名字和双下划线"__",你不需要太费心。有时,在首次编写内核函数时,它们会被随意命名,而不需要太多考虑。当人们认为名称不合适时,这些函数后来已经在内核中被广泛使用,而内核人员只是懒得修改它们。
https://stackoverflow.com/questions/21845378
复制相似问题