为了计算时间,我们通常使用系统调用,但如果我想自己实现它,怎么可能呢?使用rdtsc
给出了我们打开它时的CPU时钟量。由于我们需要cpu频率用于此目的,因此仍无法计算时间。基本的问题是,在我看来,不仅我测量的CPU频率与我在/proc/cpuinfo
中看到的不同,而且它也可以随时间变化(超频和降频)。那么系统调用是如何实现的呢?
我正在寻找的解决方案框架是通过查看一些初始时间t0,自t0(使用rdtsc
)以来的cpu时钟量和cpu频率来计算时间。像
t1 = t0 + (rdtsc1 - rdtsc0) / frequency
答案 0 :(得分:1)
大多数计算机都有一个独立于CPU的实时时钟,例如:在“BIOS”中。实时时钟的中断代码为0x1A,如下所示:http://en.wikipedia.org/wiki/BIOS_interrupt_call
因此,如果要实现像time()
这样的东西,只需调用0x1A中断来查询实时时钟即可。当然这有点依赖于平台。