为什么linux内核包含仅由__前缀不同的函数对?

时间:2014-08-10 12:24:49

标签: linux linux-kernel

Linux调度程序分叉操作使用两个函数sched_fork()__sched_fork()__sched_fork()调用sched_fork()。具有双下划线的类似代码约定(专门用于系统保留名称)在内核中的其他几个位置使用。当一个函数可以被使用时,如何定义这样的两个函数有什么帮助呢?为什么使用这种惯例?

2 个答案:

答案 0 :(得分:2)

如果您搜索来源,则会看到从__sched_fork()以及init_idle()调用sched_fork()。我认为这是定义两个函数的主要原因。

我还看到了具有不同实现的函数对(有和没有__)。例如,__hrtick_start()hrtick_start()。但是,它们的用法略有不同:第一个应该来自hardirqs。

当带有下划线的版本执行功能的核心工作和没有下划线的版本在调用之前执行其他测试时,其他对可能会分开。这样,如果已经检查了所有条件,程序员可以调用下划线版本。

答案 1 :(得分:2)

历史上,模式是使__function成为执行操作'guts'的函数,并且绝对最小化参数检查。另一方面,no -__函数会对参数有效性或某些其他额外成本操作进行一些检查。然而,有时,它只是模块化分为“中间”和“其余”。