![]() |
1
2
VDSO(7)不是syscall(2)的实现。 如果没有VDSO(7),系统调用将在用户空间应用程序中运行。在这种情况下会发生上下文切换。 如果使用VDSO(7),将在不切换上下文的情况下运行syscall。 内核使用vDSO自动映射到所有用户空间应用程序的地址空间。 |
![]() |
2
1
仔细阅读手册页 syscalls(2) ,则, vdso(7) 和上的wikipages system calls 和 VDSO .另请阅读 operating system wikipage和 Operating Systems: Three Easy Pieces (可免费下载)。
系统调用是基本的,它们是
只有
方式a
user-space
应用程序可以与操作系统交互
kernel
signal(7)
).系统调用需要用户到内核的转换(例如通过
VDSO只是一种聪明的优化(为了避免真正的系统调用的成本,对于像
clock_gettime(2)
它还以真正的系统调用形式存在),有点像内核神奇地提供的共享库,没有任何真正的文件。一些程序(例如静态链接的程序或不使用
您可以避免VDSO(或者不使用它),而早期的内核没有VDSO。但您无法避免进行系统调用,而程序通常会进行大量调用。 同时使用 strace(1) |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |