gpt4 book ai didi

linux - alloc_pages() 与 __free_pages() 配对

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:31 25 4
gpt4 key购买 nike

看了《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?

最佳答案

如您所见:

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

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

至于他们的名字和双下划线“__”,你不用太在意。有时内核函数在最初编写时没有考虑太多就随意命名。当人们认为名称不合适时,但后来这些函数已经在内核中被广泛使用,内核人员根本懒得更改它们。

关于linux - alloc_pages() 与 __free_pages() 配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com