官方文档
水平有限, 如果发现错误请指出, 我会尽快修改
NAME
vsdo - overview of the virtual ELF dynamic shared object
SYNOPSIS
void *vdso = (uintptr_t) getauxval(AT_SYSINFO_EHDR); //TODO
DESCRIPTION
"vDSO"(虚拟动态共享对象)是一个内核会自动映射到每个用户进程的地址空间的小型共享库. 用户的程序通常不需要关心vdso的内部细节, 因为这个库主要是提供给c语言库使用的. 你只需要使用c语言库提供的函数, 而c语言库会在某些必要的函数中使用到vdso提供的功能.
所以究竟为什么vdso会存在呢? 有些内核提供的系统调用会被用户非常频繁地调用, 以至于这些系统调用的性能会对程序的整体性能有决定性的影响. 因为频繁地系统调用同时也会导致用户空间和内核空间之间的频繁切换.
这个文档剩下的部分主要针对的是C语言库的开发者, 如果你试图在你自己的程序中使用vdso而不是使用c语言库那么你很有可能出错了.
Example background
进行系统调用可以很慢, 在x86架构的32位系统中, 你可以通过触发一个软中断(int 0x80)来告诉系统你要进行一个进行系统调用, 然而这个指令(int) 的代价非常大: 它需要经过一个完成的中断处理过程.(译注:原文为 it goes through the full interrupt-handling paths in the processor's microcode as well as in the kernel., 因为不清楚就不擅自翻译了)新的处理器提供了更快(同时也是向后兼容)的指令来进行系统调用. c语言库可以使用vdso中内核提供的函数, 而不是在运行时判断这项功能是否可以使用.
需要注意的是这儿有个属于可能会比较容易引起误会. 在x86系统中, vDSO中