微处理器制造商如何让软件看到某些东西而其他人不知道?
例如,什么使ISA,寄存器和寄存器号可见,其他功能如缓存大小不可见?
他们是否可以选择让其他功能也像软件的缓存大小一样可见?
他们如何制作可见的东西?是什么让一个 软件可见的功能?
答案 0 :(得分:1)
首先,请理解“可见性”不是布尔值-可见性的数量不同。某些事物可能被定义为“在每个实现中始终存在”(除非CPU中存在错误),某些事物可能是可选的,某些事物可能是特定于模型的,某些事物可能未记录但仍可见,某些事物可能是无意的即使没有人希望它可见(推测执行漏洞)。
例如,是什么使ISA,寄存器和寄存器号可见,以及其他功能(如缓存大小)不可见
理想情况下,公正的组织会创建一个规范(仅关注“对消费者的好处”),然后每个人(程序员,编译器开发人员,CPU制造商)都努力遵守该规范;这样,符合规格的所有软件都可以在符合规格的所有CPU上运行。实际上,这几乎不会发生。取而代之的是,CPU制造商相互竞争,以使其产品看起来更好,同时又削弱了竞争(例如,故意不兼容,污染操作码空间,使用专利来防止竞争等)。最终结果是,关于事物应该如何工作以及事物应该如何可见的决策最终成为营销与合法性之间的折衷,而没有过多考虑“对消费者的好处”(超越营销炒作)。举一个“不错”的例子,看看80x86上“ sysenter vs. syscall”的历史。
他们是否可以选择使其他功能(例如软件的缓存大小)也可见?
缓存始终至少至少是可见的(例如,您始终可以编写使用蛮力计时技术来自动确定缓存大小的程序)。 CPU制造商可以使其更加可见(例如,使用3种或4种不同的,不兼容的且特定于供应商的方式将缓存参数添加到CPUID
中,以使所有人烦恼)。从理论上讲,CPU制造商也可以使其不那么显眼,但这往往会破坏对旧软件的兼容性,因此这种情况很少发生。
它们如何使可见的东西不可见?是什么使功能对软件可见?
如果以“正式”标准(或者如果没有负责创建正式标准的组织,则可能只是制造商的手册之一)中描述的方式看待事物。如果没有记录的方式来查看,则看不见的东西。