gpt4 book ai didi

Linux:系统调用会改变吗?

转载 作者:IT王子 更新时间:2023-10-29 01:15:01 29 4
gpt4 key购买 nike

系统调用是面向用户空间的内核接口(interface)。用户进程通常不会直接调用它们,而是使用 libc 来调用它们。 libc 要么只是提供一个围绕系统调用的薄包装器,要么像 fork()exec()

那样做更多的工作

所以我的问题是 - 内核的系统调用接口(interface)是否会以非向后兼容的方式在内核版本之间发生变化?还是系统调用一旦建立,就永远不会改变?

最佳答案

A syscall从应用程序代码的角度来看,是一个基本的原子操作(它是一个“虚拟机指令”)。另见 syscalls(2) .

ABI指定它是如何发生的。对于 x86-64,您可以找到它 here .另见 x86 calling conventions .

对于某些系统调用,最近的内核提供了 vdso(7)使它们更快。

Linux 内核努力保持二进制级别的兼容性。据传一个15岁(静态链接)ELF可执行文件应该在最新的内核上运行不变。

但是,实际上,您不会直接在您的代码中执行系统调用(因为您需要在汇编中执行此操作,请参阅 Linux assembly howto )。您经常为此使用一些 libc(例如 GNU libcMUSL libc)。出于几个很好的原因,您通常将程序动态链接到 libc.so。那么从长远来看,您可能会遇到一些不兼容问题(某些链接到旧 libc 的二进制程序可能无法在更新或更旧的程序上运行)。

关于Linux:系统调用会改变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22715452/

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