【发布时间】:2016-03-16 04:56:15
【问题描述】:
系统调用有 man(2) 页面,但这些页面描述了位于系统调用之上的 C 库 (glibc) 的行为。原始系统调用 API/ABI 是否记录在某处(UseTheSourceLuke 除外)?我在手册页中看到了一些关于内核/libc 之间差异的内容,但我并没有感觉到记录这些差异是当务之急。
我真正想说的是:C 库是否被 POLICY 视为稳定/记录的 Linux API,而内核的系统调用 API/ABI 被认为是不稳定的(可能会更改),因此故意未记录或低优先级?
所以更改系统调用的内核开发人员会在 glibc 中使用变通方法?那么其他的 libc 呢?
我能找到关于这个主题的历史讨论吗?
编辑:所以 ABI 是稳定的,系统调用的行为也是如此,但内核开发人员没有记录它们。 glibc 正在记录它们(带有自己的添加/更改)。对吗?
【问题讨论】:
-
re:历史讨论。您可能会发现一些 here。没有深度,但更多的是对主题的概述,包括 API/ABI。
-
如果您询问如何将系统调用参数传递给内核,那么 ABI 在给定的处理器架构中是稳定的。跨处理器架构是您将看到 ABI 差异的地方。
-
如果 ABI 是稳定的,而且系统调用的行为也是稳定的,我猜可能会有它的文档。
-
它是稳定的(对于特定架构),因为更改向后兼容以避免破坏旧的用户空间代码。
-
很有可能为 12 年前最新的稳定内核(即 v2.6 行之一)编写的 Linux libc 可以与现代内核一起使用。实际上,您可以在 RHEL / CentOS 6 中看到这种情况,它基于 2.6 系列内核,但您可以轻松切换到更新的内核,例如通过从 EL-repo 安装内核包。
标签: c linux api assembly kernel