我们在代码中使用计时器;我只是对它的真正实现感到好奇。CPU 逻辑电路中或 CPU 裸片外部是否有定时器——例如,外部时钟或类似的东西?
如果没有,那么计时器在哪里?硬件定时器是如何制作的不需要任何详细的解释,只需专注于在我们拥有的硬件板上定位定时器即可。
计算机硬件中有许多不同类型的时钟和定时器。所有基本计算机都会有一个像数字手表一样的晶体,用于同步 CPU 并形成以赫兹为单位的“时钟速度”。
大多数 CPU 都内置了许多计时器,这些计时器使用时钟速度来计算两点之间的相对时间。这允许系统程序员设置一个定时器,该定时器将在晶体的一定数量的时钟周期内“关闭”。计时器通过引发中断线来提醒 CPU 定义的时间已经过去,程序员将一段代码附加到该中断线上。
操作系统和编程语言通常将中断计时器抽象化,因此您不必直接使用它们。
大多数先进的计算机,如个人电脑,都有一个实时时钟,可以存储实际的日历时间和日期,但不经常用于计时操作。
回答你的问题:
在我们拥有的硬件板上找到计时器
它非常取决于您的硬件以及您对哪个计时器感兴趣。您将无法实际看到大多数计时器或时钟,但晶体通常很容易找到并且看起来像一个小金属胶囊 - 请参阅http://www .electronicrepairguide.com/how-to-test-crystal.html
x86 机器上有很多计时器。最著名的是 TSC(时间戳计数器)。那个在CPU里面。然后有 PIT(可编程间隔定时器)作为主板上的芯片,如 Intel 8253 和 8254。我不确定它们是否仍在使用。另一个计时器是 HPET(高精度事件计时器)。它不在 CPU 内部,是三者中最新的。
当然还有电池供电的实时时钟。不确定这是否算作计时器。可能不是。
使用哪个定时器由操作系统决定。在某些系统上使用 TSC,在其他系统上使用 HPET。TSC 通常是首选,因为它位于 CPU 内部,因此访问速度非常快。如果没有直接与硬件对话的汇编指令,您无法真正直接从 C 代码访问特定的计时器。