The “virtual dynamic shared object” (or vDSO) is a small shared library exported by the kernel to accelerate the execution of certain system calls that do not necessarily have to run in kernel space.
With VDSO the system call interface is decided by the kernel:
- a stream of instructions to issue the system call is generated by the kernel in a special memory area (formatted as an ELF shared object)
- that memory area is mapped towards the end of the user address space
- libc searches for VDSO and if present will use it to issue the system call
vsyscalls
- “System calls” that run directly from user space, part of the VDSO
- Static data (e.g.
getpid()
) - Dynamic data update by the kernel a in RW map of the VDSO (e.g.
gettimeofday()
,time()
, )