【问题标题】:Linux syscall strategy through vsyscall pageLinux syscall策略通过vsyscall页面
【发布时间】:2014-05-21 14:14:42
【问题描述】:

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

【问题讨论】:

标签: linux kernel virtual-memory system-calls


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2021-11-07
    • 2020-07-05
    相关资源
    最近更新 更多