【发布时间】:2011-03-19 08:01:33
【问题描述】:
一些(很多?全部?)64 位1 Linux 发行版允许通过提供 32 位和 64 位库(包括 libc)的并行集合来运行 32 位应用程序。因此,32 位应用程序可以链接到 32 位库并由 64 位内核运行。
我想知道 32 位应用程序如何在 64 位内核上进行系统调用的机制。我怀疑答案在 libc 和/或内核源代码中的某个地方,但由于我不知道去哪里寻找,因此深入研究源代码会很耗时。
还有一个更重要的问题,是否有任何性能开销?2从逻辑上讲,来自 32 位应用程序系统调用的调用必须转换为 64 位内部内核环境。这是如何以及在哪里完成的?
1 “32 位” = IA-32,“64 位” = AMD64
2在你的回答中假设它很重要:)
【问题讨论】:
-
好问题。阅读源代码总是令人着迷,但非常耗时。
标签: c linux performance system-calls