【问题标题】:How is time calculated?时间是怎么计算的?
【发布时间】:2014-04-29 13:54:02
【问题描述】:

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

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

t1 = t0 + (rdtsc1 - rdtsc0) / frequency

【问题讨论】:

    标签: linux time system-calls rdtsc


    【解决方案1】:

    大多数计算机都有一个独立于 CPU 的实时时钟,例如在“BIOS”中。实时时钟的中断代码是 0x1A,您可以在这里看到:http://en.wikipedia.org/wiki/BIOS_interrupt_call

    因此,如果您要实现类似time() 的功能,您只需调用 0x1A 中断来查询实时时钟即可。当然,这在一定程度上取决于平台。

    【讨论】:

    • 据我了解,中断 0x1A 与用于时间系统调用的中断 0x80 大致相同。它们都会导致上下文切换,我想避免它。
    猜你喜欢
    • 2022-12-18
    • 1970-01-01
    • 2018-04-09
    • 2017-04-11
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多