Answers:
系统调用在内核中实现,如后续问题的答案所述。虚拟动态共享对象vDSO是一个小的虚拟库,也由内核实现,内核将其映射到所有进程。像syscalls一样,它由C库包装。
syscall和vDSO之间的主要区别是特权之一。系统调用在内核空间中执行,并且在用户空间和内核空间之间切换非常昂贵。作为优化,在用户空间中运行的vDSO中提供了一些实际上不需要在内核空间中运行的系统调用。一个例子gettimeofday
经常被调用,并且可以由内核实现而无需切换到内核空间。
该手册vdso
页有更多详细信息。有关一般在Linux上包括vDSO的系统调用的详细讨论,请参见系统调用 第1 部分和第2 部分的剖析。