0

上周,讲师讲述了如何处理 linux 中的中断,尤其是 do_IRQ 函数。我想知道为什么 do_IRQ 函数从寄存器而不是从堆栈中读取其参数。但教官也不知道这是什么原因。现在我仍然想知道为什么像 do_IRQ 这样的内核函数从寄存器而不是堆栈中读取所需的参数。我用谷歌搜索了它,但我只发现函数从寄存器或堆栈中读取它们的参数,但不是原因。

4

1 回答 1

0

从内核 2.6 开始,所有内核函数都使用寄存器而不是堆栈来传递前 3 个参数(x86_64 中的 6 个)。
在古老的 2.4 内核中,只有少数性能关键函数,例如do_IRQ,以这种方式工作。你的导师会教你关于 2.4 内核的知识吗?!

在寄存器中传递参数可以提高性能。
与内存相比,读/写寄存器要快得多(即使它在 L1 缓存中)。

在所有情况下,调用者和被调用者就参数传递方法达成一致非常重要。
当函数使用非标准方法时,它会被标记为编译器属性。
这个属性告诉编译器两件事——当编译函数本身时,它知道参数应该放在哪里,当编译对它的调用时,它知道把它们放在哪里。

于 2012-04-30T10:31:58.980 回答