像PTLsim这样的CAS模拟器如何实现x86硬件的周期精确模拟?

像PTLsim这样的CAS模拟器如何实现x86硬件的周期精确模拟?,x86,simulation,rtos,osdev,X86,Simulation,Rtos,Osdev,有人能告诉我CAS软件是如何工作的吗?如果既不知道每条指令使用了多少个周期,也不知道CPU分支预测逻辑,那么它们如何实现周期精度?还是所有的东西都可以通过NDA获得 我想,如果缓存被命中或丢失,它们可能会非常精确(也许我错了,但我认为预测内部算法更容易),但如果不知道如何实现流水线和超标量,我就不知道如何使模拟周期精确 因此,从理论上讲,在基于x86的硬件上实现硬RTO是否可行?或者应该签署某种保密协议,以便能够估计每个指令所需的时间 第一个问题:如果既不知道每条指令使用了多少个周期,也不知道C

有人能告诉我CAS软件是如何工作的吗?如果既不知道每条指令使用了多少个周期,也不知道CPU分支预测逻辑,那么它们如何实现周期精度?还是所有的东西都可以通过NDA获得

我想,如果缓存被命中或丢失,它们可能会非常精确(也许我错了,但我认为预测内部算法更容易),但如果不知道如何实现流水线和超标量,我就不知道如何使模拟周期精确

因此,从理论上讲,在基于x86的硬件上实现RTO是否可行?或者应该签署某种保密协议,以便能够估计每个指令所需的时间

第一个问题:如果既不知道每条指令使用了多少个周期,也不知道CPU分支预测逻辑,那么它们如何实现周期精度

该模拟器确实为足够精确的CPU模型提供了周期精确的模拟,但没有为英特尔或AMD的当前产品提供现成的模型。在英特尔或AMD有人可以访问所需的信息,可以创建一个RTL级别的模型,并获得当前处理器的周期精确模拟。英特尔和AMD以外的人不能。您仍然可以向模拟器提供公开的已知信息,并获得合理的结果。这些结果将与实际硬件不同

如果您是一名软件开发人员,并且希望对真正的硬件进行基准测试,请使用真正的硬件!像PLTsim这样的模拟器是为(学术)硬件开发人员设计的,他们想测试新的硬件功能,而不需要花费数十万美元在新芯片上

第二个问题:在基于x86的硬件上实现硬RTO理论上可行吗

当然,这在理论上是可能的。在所有情况下,您需要考虑每个代码段的绝对最坏情况。实际问题是,像Core2这样的处理器非常复杂,处理器的状态非常庞大。此外,这些处理器的设计不是为了在定时方面表现出确定性。真正强硬的RTO必须非常保守。最后,正如您正确观察到的,英特尔和AMD以外的人无法获得做出这些保守假设所需的所有信息。在实践中,将最新和最好的CPU传递给用户,而使用具有确定时间的更老、更简单的CPU是合理的

另一方面,如果RTO不一定是真正的硬实时的,那么您可以始终只包含一些安全裕度,并期待最好的结果。;-)

这不是两个问题的答案;我只回答第二个问题。尽管麦基的答案总的来说似乎更好,但请随意投票

硬RTOS很难在x86上实现。SMM(系统管理模式)是一种特殊的东西,它可以扼杀RTOS做出的每一个承诺。CPU在系统管理中断后进入,这可能是由于不同的原因引起的-硬件故障,在某个特殊MMIO位置写入,
out
指令到某个特殊端口。您无法禁用它,也无法真正预测SMI何时发生,SMI处理程序可能需要很长时间才能完成

本质上,您完全不知道CPU何时在SMM中,直到由于CPU处理SMI的时间过长而导致操作系统出现故障。在某些特殊情况下,即使对于非实时操作系统,也可能成为一个问题,更不用说硬RTOS了


关于在x86上使用RTO,还有很多可以为您提供的信息。

在您链接的站点上,有如下声明:

PTLsim是最先进的周期精确微处理器模拟器和虚拟机,适用于x86和x86-64指令集

它直接在模拟的同一平台上运行(运行Linux的x86-64或x86机器)


我不清楚这与任何其他x86虚拟机技术(如QEMU、VirtualBox、VMWare或虚拟PC)有何区别,因为通过在硬件上实际直接运行指令(以及以核心速度运行),这些技术可以实现周期精确性。它是模拟器还是虚拟机?在我看来,它们不是一回事;例如,如果是模拟器而不是虚拟机,PTLsim可能介于两者之间?

查看常见问题解答,关注他们的“协同仿真”技术。这是通过在主机处理器上实际执行模拟代码来实现的。@HansPassant我想你误解了“协同模拟”的概念。周期精确模拟完全基于用户提供的处理器模型。主处理器仅用于加速和/或验证模拟。这只是简单的模拟,没有“co”。@HansPassant我同意:这个术语是误导性的。梅比,他们想到了共同的惯例?谁知道呢…英特尔员工在2010年就不会这么做了:与ARM相关: