x86处理器中的时间源

use*_*064 4 x86 timer computer-architecture

有没有人知道可用于测量时间的x86指令?是否可以通过软件访问任务开关的定时器?

myr*_*ack 11

在x86平台上测量时间的方法:

  • 实时时钟 - 操作系统的时间和日期来源.1秒精度.标准PC中唯一可用于测量绝对时间的时间源.

  • 8254计数器/定时器 - 自PC诞生以来一直存在于主板上的标准计数器/定时器芯片(现在是芯片组内的功能块).这是IRQ0的传统来源,IRQ0是在大多数旧操作系统中执行任务切换的定时器中断.

  • RDTSC汇编指令 - 计算CPU时钟周期.请参阅Anon ymous的答案,了解一些使用细节.几乎可以在x86上找到时间源的最高精度.但是,它有一些准确的问题.如果你在汇编中写作,也是最方便的选择.

  • RDTSCP汇编指令 - 与RDTSC类似,但是是序列化的,它解决了RDTSC的一些精度问题.仅在最新的处理器上找到.

  • HPET - 围绕PC的Core Duo时代推出.旨在替代古老的8254.现代操作系统将使用它作为他们的任务调度中断(Vista及更高版本)

  • 芯片组中的专有定时器 - 一些芯片组内置了特殊定时器,用于电源管理和多媒体功能.如果您正在处理固定功能的嵌入式系统而不是通用PC,您有时可以为自己的应用程序命令这些.

请注意,根据您的操作系统和硬件,并非所有这些选项都可供您使用.如果您在现代操作系统(Windows,Linux)下运行,它将控制8254/HPET以满足其自身的时序需求,因此它们将无法供您使用.

在现代操作系统下,通常最好使用OS提供的计时功能.如果您尝试使用它,操作系统开发人员可能会解决您将遇到的许多问题.(请注意,操作系统可能提供多种计时功能.选择适合您应用的功能.)