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