c语言 sysinfo_vdso 官方文档翻译

官方文档

水平有限, 如果发现错误请指出, 我会尽快修改

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中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值