Linux 时间是如何计算的?

Linux 时间是如何计算的?,linux,time,system-calls,rdtsc,Linux,Time,System Calls,Rdtsc,为了计算时间,我们通常使用一个系统调用,但如果我想自己实现它,这可能吗?使用rdtsc可以得到我们打开它时的cpu时钟量。由于我们需要cpu频率,因此仍然无法计算时间。基本问题是,在我看来,不仅我测量的cpu频率与我在/proc/cpuinfo中看到的不同,而且它还可以随时间变化(超频和欠频)。那么系统调用是如何实现的呢 我正在寻找的解决方案框架是通过查看一些初始时间t0、自t0以来的cpu时钟量(使用rdtsc)和cpu频率来计算时间。差不多 t1 = t0 + (rdtsc1 - rdtsc

为了计算时间,我们通常使用一个系统调用,但如果我想自己实现它,这可能吗?使用
rdtsc
可以得到我们打开它时的cpu时钟量。由于我们需要cpu频率,因此仍然无法计算时间。基本问题是,在我看来,不仅我测量的cpu频率与我在
/proc/cpuinfo
中看到的不同,而且它还可以随时间变化(超频和欠频)。那么系统调用是如何实现的呢

我正在寻找的解决方案框架是通过查看一些初始时间t0、自t0以来的cpu时钟量(使用
rdtsc
)和cpu频率来计算时间。差不多

t1 = t0 + (rdtsc1 - rdtsc0) / frequency

大多数计算机都有一个与CPU分离的实时时钟,例如在“BIOS”中。实时时钟的中断代码为0x1A,如您在此处所见:


因此,如果要实现类似
time()
的功能,只需调用0x1A中断查询实时时钟即可。当然,这有点依赖于平台。

据我所知,中断0x1A将与用于时间系统调用的中断0x80大致相同。它们都会导致上下文切换,我想避免它。