时间戳计数器限制

时间:2011-03-29 10:45:27

标签: operating-system intel assembly privileged-functions

我想检查RDTSC指令是否可用。必须有Intel Pentium或更新的处理器,寄存器CR4中的TSD标志清零或设置且CPL等于0.

因此,获取当前权限级别(CS段寄存器的第0位和第1位)没有问题。检查指令本身是否受支持也没有问题(CPUID.1:EDX [4] = 1)。

但是(这就是问题),这也必须在用户模式(PL3)下运行。但是,我无法在用户模式下读取控制寄存器CR4。

有没有其他方法可以检查操作系统是否限制了对时间戳计数器的访问?

1 个答案:

答案 0 :(得分:2)

唯一的方法是“尝试”指令并拦截异常,前提是操作系统使您能够以安全的方式对事件做出反应并恢复状态,以便继续执行程序。不幸的是,并非所有操作系统都允许在他们认为“致命”的例外之后继续。在Windows上,您可以尝试使用结构化异常处理,在Linux上有特定信号(特别是SIGILL)。但其他操作系统不会原谅这种例外情况。 再见

(编辑)

PS:原则上,OS也可能会触发异常并模拟指令,因此应用程序无法确定指令是否真的可用。我不知道是否有操作系统可以做这件事(虚拟机,也许?)。 再见!