VDSO(Virtual Dynamically-linked Shared Object)是个很有意思的东西, 它将内核态的调用映射到用户态的地址空间中, 使得调用开销更小, 路径更好.

开销更小比较容易理解, 那么路径更好指的是什么呢? 拿x86下的系统调用举例, 传统的int 0x80有点慢, Intel和AMD分别实现了sysenter, sysexit和syscall, sysret, 即所谓的快速系统调用指令, 使用它们更快, 但是也带来了兼容性的问题. 于是Linux实现了vsyscall, 程序统一调用vsyscall, 具体的选择由内核来决定. 而vsyscall的实现就在VDSO中.

Linux(kernel 2.6 or upper)环境下执行ldd /bin/sh, 会发现有个名字叫linux-vdso.so.1(老点的版本是linux-gate.so.1)的动态文件, 而系统中却找不到它, 它就是VDSO. 例如:

$ ldd /bin/shlinux-vdso.so.1 =>  (0x00007fff2f9ff000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28d5b36000)/lib64/ld-linux-x86-64.so.2 (0x00007f28d5eca000)

linux-gate.so.1的地址是0xffffe000. 较新的内核提供了进程随机地址化功能, linux-vdso.so.1的地址每次cat /proc/self/maps都会变化, 想把它从/proc/self/mem中dd出来反汇编玩儿的同学请先:

echo "0" > /proc/sys/kernel/randomize_va_space

不光是快速系统调用, glibc现在也提供了VDSO的支持, open(), read(), write(), gettimeofday()都可以直接用VDSO中的实现, 使得这些调用更快, glibc更兼容, 内核新特性在不影响glibc的情况下也可以更快的部署. 实在是Nice!

linux vdso(Virtual Dynamically-linked Shared Object)内核态的调用映射到用户态的地址空间开销更小相关推荐

  1. 计算机是如何识别内核态和用户态的,浅谈操作系统的用户态和内核态

    浅谈操作系统的用户态和内核态 我们经常会听到程序的用户态和内核态,一个程序从用户态进入了内核态... 什么是用户态和内核态 内核态和用户态到底指的是什么呢?我们这就解开其神秘面纱 所谓的用户态.内核态 ...

  2. 操作系统中用户态和内核态(系统态)是什么?用户态如何变成内核态?

    用户态:当进程在执行用户自己的代码时,则称其处于用户态,这时cpu 访问资源有限,运行在用户态下的程序不能直接访问操作系统内核数据结构和程序. 内核态:当一个任务(进程)执行系统调用而陷入内核代码中执 ...

  3. Linux的使用和认识实验,通过一个小实验认识Linux vDSO

    这里不再解释vDSO的概念,而直接谈其意义: vDSO类似一个信息公告板,用户可以直取所需,而无需为此办理任何手续. vDSO相当于内核直接暴露出来的一个C库,作为GLIBC的补充. - 类似gett ...

  4. linux内存重映射的概念及对内核虚拟地址的重映射方法分析

    [摘要]本文分析了Linux设备的内存映射的相关概念和理论,使用例子对mmap及nopage的驱动编写方法进行了解释,最后对3种不同的内核虚拟空间分配方法下,mmap驱动编写方法进行了细致的分析和调试 ...

  5. java运行在用户态_理解Linux用户态和内核态

    Linux整体架构图 我们先来看一张Linux整体架构图. 系统调用 ​ 系统调用时操作系统的最小功能单位.根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-35 ...

  6. Linux用户态和内核态

    究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例 ...

  7. linux 内核信号量与用户态信号量(system v,信号量在Linux多线程机制中的应用

    [摘 要]本文以信号量原理为基础,重点阐述信号量在Linux多线程同步机制中的实现特色. [关键词]信号量:Linux:多线程:同步 1 信号量 1965年E. W. Dijkstra首次提出信号量的 ...

  8. 【转】linux内核态和用户态的区别

    原文网址:http://www.mike.org.cn/articles/linux-kernel-mode-and-user-mode-distinction/ 内核态与用户态是操作系统的两种运行级 ...

  9. linux收发包内核进程名称,Linux内核IP Queue机制的分析(一)——用户态接收数据包...

    序 笔者将会通过包括本文在内的三篇文章,对IP Queue机制从用户态的应用到内核态的模块程序设计进行分析.三篇文章的题目分别是: Linux内核IP Queue机制的分析(一)­--用户态接收数据包 ...

最新文章

  1. 国内ITSM解决方案-UNIPER
  2. 强化学习圣经:《强化学习导论》第二版(附PDF下载)
  3. Android 新手常见的10个误区(下)
  4. new 开始转向PHP
  5. 云炬Android开发笔记 17商品详情功能开发
  6. matlab fft简单小例子,matlabfft简单例子(A simple example of matlabfft).doc
  7. 从容器到容器云,什么才是 Kubernetes 的本质?
  8. CUDA编程之:Stream(流)
  9. JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
  10. Graph_editor——好用的画图软件,你会用吗?
  11. java公司年会抽奖流程图文件流_年会抽奖程序的一些总结
  12. 洛谷入门-- P3717
  13. 第十六届“振兴杯”计算机网络管理员赛项理论参考题库(1)单选
  14. WIN10 + Ubuntu18.04 双系统安装教程(新机)
  15. 解决python ping测试
  16. Ubuntu下怎么退出vim编辑器
  17. 时域采样与频域采样实验报告_使用网络分析仪进行时域分析
  18. GCT备考之考前辅导篇
  19. MATLAB在simulink仿真中出现的重要错误及解决办法
  20. vue office在线编辑_多人协同、AI 协作……未来的 Office 有这些「黑科技」

热门文章

  1. ForkJoinPool的理解与使用
  2. Rhel 7 /Centos 7配置快速启动栏启动以Firefox为例
  3. 【CMS建站】写给大家看的网站制作教程01—了解网站制作流程
  4. spring-boot-starter-custom
  5. LVGL 8.2 meter with multiple arcs
  6. sja1c语言,三菱A1SJ71UC24-R2手册A1SJ71UC24-R2硬件用户手册 - 广州凌控
  7. 7. 无线体内纳米网:改善体内电磁通道信号传播性能的若干新型石墨烯材料
  8. 解密|FBI不光有特工,还有智能存储系统!
  9. 数值数据在计算机中的表示方法
  10. 专访IBM孙震:流程挖掘行业前景广阔,市场教育待完成