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

时间:2014-05-21 14:14:42

标签: linux kernel virtual-memory system-calls

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

1 个答案:

答案 0 :(得分:1)

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

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

有关详细信息,请参阅this article