我读过“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_pages与__free_pages配对,但不与free_pages配对?
答案 0 :(得分:1)
您可以注意到:
alloc_pages()/ __free_pages()将“page *”(页面描述符)作为参数。 它们在某些基础设施内核代码(如页面错误处理程序)内部使用 ususally ,它们希望操纵页面描述符而不是内存块内容。
__ get_free_pages()/ free_pages()将“unsigned long”(内存块的虚拟地址)作为参数 它们可以被希望使用内存块本身的代码使用,在分配之后,你可以读/写这个内存块。
至于他们的名字和双下划线“__”,你不需要太费心。有时核心函数是在没有太多考虑的情况下随便命名的。当人们想到这些名称不合适时,但后来这些函数已经在内核中大量使用,而内核人员只是懒得改变它们。