我试图通过查看 linux 内核的源代码来理解函数 clock_gettime
的行为。
我目前正在使用 4.4.0-83-lowlatency
但我只能获得 4.4.76
源文件(但它应该足够接近)。
我的第一个问题是函数多次出现。我选择了 pc_clock_gettime
,它似乎是最接近也是唯一一个处理 CLOCK_MONOTONIC_RAW
的,但如果我错了,请纠正我。
追溯函数的执行流程,发现了一个神秘的ravb_ptp_gettime64
和ravb_ptp_time_read
,与以太网驱动相关。
所以...如果我在要求系统给我时间时理解正确,它会询问以太网驱动程序?
这是我第一次查看内核代码,所以我不太习惯。如果有人能给我解释“如何”和“为什么”,那就太好了。
最佳答案
clock_gettime
使用名为 vDSO(虚拟动态共享对象)的机制。它是一个由内核映射到用户空间的共享库。
vDSO 允许频繁使用 syscall
而不会影响性能。因此内核将时间信息“放入”用户程序可以访问的内存中。最后,它不会是一个系统调用,而只是一个简单的函数调用。
关于linux - clock_gettime的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45207896/