通过vsyscall页面的Linux系统调用策略

通过vsyscall页面的Linux系统调用策略,linux,kernel,virtual-memory,system-calls,Linux,Kernel,Virtual Memory,System Calls,我正在阅读Linux上的VM处理。显然,要执行系统调用,x86上的0xFFFFF000处有一个页面。称为vsyscall页。在过去,调用系统调用的策略是使用int 0x80。此vsyscall页面策略是否仍在后台使用int 0x80,或者是否使用了不同的调用策略(例如syscall操作码?)。附带问题:int 0x80方法是否过时了?如果在现代Linux二进制文件上运行ldd,您将看到它链接到一个名为Linux vdso.1(在amd64上)或Linux gate.so.1(在x86上)的动态库

我正在阅读Linux上的VM处理。显然,要执行系统调用,x86上的0xFFFFF000处有一个页面。称为vsyscall页。在过去,调用系统调用的策略是使用int 0x80。此vsyscall页面策略是否仍在后台使用int 0x80,或者是否使用了不同的调用策略(例如syscall操作码?)。附带问题:int 0x80方法是否过时了?

如果在现代Linux二进制文件上运行
ldd
,您将看到它链接到一个名为
Linux vdso.1
(在amd64上)或
Linux gate.so.1
(在x86上)的动态库,该库位于vsyscall页面中。这是内核提供的共享库,映射到每个进程的地址空间,其中包含封装如何执行系统调用细节的C函数

这种封装的原因是执行系统调用的“首选”方式在不同的机器上可能有所不同。中断0x80方法应始终在x86上工作,但最近的处理器支持
syscenter
(英特尔)或
syscall
(AMD)指令,它们效率更高。您希望您的程序在可用时使用这些操作码,但也希望相同的已编译二进制代码同时在Intel和AMD(以及其他)处理器上运行,因此它不应包含特定于供应商的操作码。
linux-vdso
/
linux-gate
库将这些特定于处理器的决策隐藏在一致的接口后面


有关更多信息,请参阅。

检查以下答案:@OttavioCampana:谢谢。很酷的东西。