linux - clock_gettime的来源

标签 linux time linux-kernel

我试图通过查看 linux 内核的源代码来理解函数 clock_gettime 的行为。 我目前正在使用 4.4.0-83-lowlatency 但我只能获得 4.4.76 源文件(但它应该足够接近)。

我的第一个问题是函数多次出现。我选择了 pc_clock_gettime,它似乎是最接近也是唯一一个处理 CLOCK_MONOTONIC_RAW 的,但如果我错了,请纠正我。

追溯函数的执行流程,发现了一个神秘的ravb_ptp_gettime64ravb_ptp_time_read,与以太网驱动相关。

所以...如果我在要求系统给我时间时理解正确,它会询问以太网驱动程序?

这是我第一次查看内核代码,所以我不太习惯。如果有人能给我解释“如何”和“为什么”,那就太好了。

最佳答案

clock_gettime 使用名为 vDSO(虚拟动态共享对象)的机制。它是一个由内核映射到用户空间的共享库。

vDSO 允许频繁使用 syscall 而不会影响性能。因此内核将时间信息“放入”用户程序可以访问的内存中。最后,它不会是一个系统调用,而只是一个简单的函数调用。

关于linux - clock_gettime的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45207896/

相关文章:

linux-kernel - Linux针对执行shellcode的安全措施

linux - 如何使用 shell 在 Linux 中删除超过 7 天的文件

algorithm - 线段树的最坏情况运行时间

c++ - C/C++时区正确时间转换(到纪元后的秒数)

Java:getMinutes 和 getHours

c - 如何解释内核 panic ?

c - Ubuntu 上的多播

Centos7 上未安装 Android 构建工具

python - 在 Linux 中从 Python 启动一个 c 程序,将一个大文本字符串作为参数传递给 c 程序

linux - copy_from_user() 运行在用户空间还是内核空间?