vdso 共享库 (linux-vdso.so) 是包含内核对象代码(系统调用)的库吗?

yoy*_*fun 12 kernel libraries system-calls dynamic-linking shared-library

我注意到我编译为 gcc 的所有程序都链接到 vdso 库。这是包含对内核的系统调用的库,例如 mmap() 和 fork() 以及其他系统调用吗?

我知道系统调用不是 GNU C 标准库的函数,所以它们的目标代码必须在编译时与应用程序链接的某个库中?

那么 vdso 是那个库吗?

Ste*_*itt 16

系统调用在内核中实现,如您的后续问题的回答中所述。vDSO,虚拟动态共享对象,是一个小的虚拟库,也是由内核实现的,内核映射到所有进程中。像系统调用一样,它由 C 库包装。

系统调用和 vDSO 之间的主要区别是特权之一。系统调用在内核空间执行,用户空间和内核空间之间的切换开销很大。作为优化,在用户空间运行的 vDSO 中提供了一些实际上不需要在内核空间中运行的系统调用。一个例子是gettimeofday它经常被调用并且可以由内核实现而无需切换到内核空间。

vdso手册页有更多的细节。有关 Linux 上系统调用的详细讨论,包括 vDSO,请参阅系统调用剖析 第 1部分第 2 部分

  • 点击_promising_第一个Google链接后来到这里... https://linux-vdso.so (2认同)