更新

更新

就术语而言,到底是什么“微码”如果可以更新,它与固件有何不同?

这个问题不是一个此问题的重复(据我所知)我也问过关于修改微代码的问题。在这里我只是想知道如何正确使用这些术语。

更新

我选了一个答案,但我对它不是特别满意。我听过很多答案,发现很多答案同样不令人满意。所以让我向你们介绍我的两个框架,

  1. “处理器微码类似于处理器固件。”随着我越来越多地阅读这篇文章,我逐渐明白了这一点。在这种情况下,“微码”只是对“处理器固件”的营销。请耐心听我说……
  2. 或者,我错了,我知道这是常有的事!在这种情况下,我需要更彻底地了解我为什么错了。我读到的那些指向我错误的答案,让我很难理解它们,
    • “执行与数据” 很多答案都使用这种范式,但对于 CPU 来说,这对我来说没有多大意义。有些人断言固件是执行的,但通过什么执行呢?对于 CPU 来说,程序是指令还是数据?
    • 如果固件连接了软件和硬件(阅读:神的电气工程),那么微代码如何不能满足这种区别。
    • 随着时间的推移,“解释”变得越来越没有意义。使用微代码说“硬件指令被解释”是什么意思。如果这是真的,那么如果它没有被解释,而是被预编译为不同的硬件指令并仅仅被“执行”,那么它的性能会一样好吗?此外,通用 MIDI 怎么会不以同样的方式被解释呢?它是一种由“MIDI 微代码”解释并在硬件上运行的语言。或者,解释电传打字机指令以供视觉显示的哑终端?
    • “微代码”是否适用于在声卡上运行的代码?显卡(GPU)

答案1

固件一词的起源是硬件与软件之间的中间点——嵌入硬件的软件。它是指存储在硬件设备上的非易失性存储器(如 ROM、EEPROM 或闪存)中并由设备本身使用的软件。

在某些类型的硬件中,将“固件”存储在驱动程序软件中并在启动/初始化时加载到设备上,而不是将其永久留在设备上的做法越来越普遍。例如,现在将几百 KB 的固件代码存储在加载到主机操作系统的软件驱动程序中,并在驱动程序初始化设备时将其发送到设备,这已经不是什么大问题了。

即使它不是驻留在硬件上,它仍然通常被称为“固件”(如果您拆卸硬件并将其放入另一个系统中,它将不会保留该版本的“固件”)。

微代码是其中的一个子集。微代码并不是在启动时加载到设备上的所有固件的通用术语。相反,它是特定于 CPU 的,其中微代码构成了高级标准 CPU 指令与特定于该 CPU 的低级操作之间的转换层。它可能在启动时由 BIOS 加载到 CPU 上,并在稍后的启动阶段由操作系统替换。

微代码更新可以修改 CPU 的低级行为,以解决某些尚未发现的错误,而无需更换 CPU 硬件。微代码通常包含从高级到低级指令的最有效映射,以实现最佳速度和能效,因此有时当需要更改微代码来修复某些错误时,这可能会导致性能下降。

请注意幽灵崩溃(该漏洞仅影响英特尔芯片)无法仅通过微代码更新来修复,并且需要更改核心操作系统功能,这可能会进一步降低性能。


回答您编辑后提出的一些具体问题:

  1. 是的,微码基本上是运行在处理器上的固件。特殊术语“微码”专门指处理器上的固件,其中包含从标准机器语言转换为低级处理器指令的蓝图。因此,它是一个比固件更具体的术语。

    请注意,正如我上面所讨论的,它在关闭时不会存储在 CPU 上,而是在每次启动时加载到 CPU 上。

  2. 我认为你没有错。固件不必用某种机器语言编写,其执行也不必以某种方式触发。在某个低级别,所有机器代码都是由处理器“读取”并以某种方式解释的“数据”。

    术语“微代码”通常仅用于主 CPU,而不用于显卡或其他硬件,即使其他设备可能以相同的方式加载代码。

答案2

https://wiki.debian.org/Microcode

CPU 微代码

处理器微码类似于处理器固件。内核能够更新处理器的固件,而无需通过 BIOS 更新来更新。微码更新保存在易失性存储器中,因此 BIOS/UEFI 或内核会在每次启动时更新微码。

Intel 和 AMD 的处理器可能需要更新其微代码才能正常运行。这些更新可修复可能导致错误处理、代码和数据损坏以及系统死机等问题的错误/勘误表。

BIOS(或 UEFI)在启动期间更新 CPU 微代码,但大多数情况下主板供应商不会频繁发布 BIOS/UEFI 更新,或者用户不会安装此类更新。出于这些原因,系统处理器很可能在大量系统上运行过时的微代码。

例子:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html

答案3

嗯,英特尔“微码更新”实际上是“固件”更新,因为它们更新的不仅仅是处理器的微码翻译单元。

这些统一处理器包更新(我们称之为英特尔的“微代码更新”)还会更新其他片上微控制器(例如 PMU 和电源管理核心)以及不同片上处理器子系统的多个参数表。它们相当复杂。

该信息可在几项与微码和微码更新相关的英特尔专利中找到。

答案4

“微代码”是最初的术语,指的是用于实现处理器“公共”指令集的解释器的指令。

但随着时间的推移,随着实施方案的多种变化,这种区别变得越来越模糊。首先是水平微代码与垂直微代码,然后是各种在“主”处理器指令集中编写“微代码”(例如,用于实现 I/O 指令)的方案。然后需要区分通过普通程序“运行”操作轻松加载的代码与保存在 ROM 或其他受保护且相对不可变的存储器中的代码(例如用于 BIOS)。因此,发明了术语“固件”来指代这些以某种方式在存储中更持久(并且更难被用户修改)的指令。

但自从做出这些最初的区分以来,情况已多次发生变化和扭曲,并且这些术语只有在给定的处理器和操作系统环境中才能精确定义。

相关内容