Linux:系统调用会改变吗?
发布时间:2020-12-13 23:10:39 所属栏目:Linux 来源:网络整理
导读:Syscalls是内核的面向用户空间的接口.用户进程通常不会直接调用它们,而是使用libc来执行此操作. libc要么只是在系统调用周围提供一个瘦包装,要么在fork()和exec()的情况下做更多的工作 所以我的问题是 – 内核的syscall接口是否以非向后兼容的方式在内核版本
Syscalls是内核的面向用户空间的接口.用户进程通常不会直接调用它们,而是使用libc来执行此操作. libc要么只是在系统调用周围提供一个瘦包装,要么在fork()和exec()的情况下做更多的工作
所以我的问题是 – 内核的syscall接口是否以非向后兼容的方式在内核版本之间发生变化?或者,一旦建立了系统调用,它将永远不会改变? 解决方法
从应用程序代码的角度来看,syscall是基本原子操作(它是“虚拟机指令”).另见
syscalls(2).
ABI规定了它究竟是如何发生的.对于x86-64,你可以找到它here.参见x86 calling conventions. 对于某些系统调用,最近的内核提供了vdso(7)以使它们更快. Linux内核努力保持二进制级别的兼容性.据传,15年前(静态链接)ELF可执行文件应该在最新的内核上保持不变. 但是,在实践中,您不直接在代码中执行系统调用(因为您需要在汇编中执行此操作,请参阅Linux assembly howto).你经常使用一些libc(例如GNU libc或MUSL libc).出于几个好的原因,您通常会将程序动态链接到libc.so.然后你可能会在很长一段时间内遇到一些不兼容问题(一些链接到旧libc的二进制程序可能不会运行得更新 – 或者更旧 – 一个). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- linux – 如何为* nix进程实现编写器优先读/写锁
- What are the differences between Flyweight and Object P
- linux – 如何在不重新编译内核的情况下禁用CentOS 5.3中的
- linux登录脚本(需密码方式)
- archlinux – “等待X服务器开始接受连接”无限循环
- LINUX教程:从Fedora 25升级到Fedora 26
- linux g将64位共享库代码链接到静态库
- linux – 编译时出错::: strcmp尚未声明
- linux – keepalived config与virtualbox vms无法正常工作
- fopen()是Linux中的线程安全函数吗?