首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vdso共享库(linux-vdso.so)是包含内核对象代码(系统调用)的库吗?

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

Unix & Linux用户
提问于 2017-10-09 11:12:49
回答 1查看 13.9K关注 0票数 15

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

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

那么vdso是那个图书馆吗?

EN

回答 1

Unix & Linux用户

发布于 2017-10-09 12:48:52

系统调用是在内核中实现的,正如你的后续问题的答案中提到的那样。vDSO (虚拟动态共享对象)是一个小型的虚拟库,也是由内核实现的,内核映射到所有进程中。就像syscalls一样,它由C库包装。

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

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

票数 20
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/396987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档