转载-什么是微码Microcode

from:

几句话说清楚44:什么是微码microcode | DecodeZ (decodezp.github.io)

每当听到有人说“这个问题更新一下微码就好了”,就觉得这个哥哥怎么这么迷人,好像在哪里见过。为了也让自己变成这种迷人的哥哥,我也研究了一下到底什么是微码。

这里说的是跑在CPU处理器上的微码,不是IBM那群人嘴里说的那个微码。如果你之前没和IBM打过交道那就当这段话不存在。

计算机体系结构是一层又一层的抽象,典型的比如操作系统对底层硬件的抽象。但鲜有人知的是,操作系统和底层硬件,尤其是CPU之间还存在着几层抽象。什么叫抽象,当然有很多种学术流的解释,但我土气一点的解释就是“不关心”,就是“Don’t care”,就是爱咋地咋地。

用这个模式套用一下我们熟悉的抽象:操作系统要将数据写入磁盘,它不关心怎么操作磁盘;应用要给某个服务器发个数据包,它也不关心怎么操作网卡。

回到我们的微码上来。我们现在常见的操作系统都是用C语言编写,它相对于汇编语言来说,也算是一种“高级语言”。编译器会将这种高级语言编译成汇编语言。只要C语言编写时“不关心”汇编指令是啥,那么就是相对汇编语言做了一次抽象。

马上就到微码了。我们知道汇编指令是执行在CPU上的,那么汇编指令会关心在某个具体型号的CPU上是怎么执行的吗?肯定不会的。汇编的一条ADD指令在80286上可以执行,在最新的Icelake上也能执行,但这两个CPU内部早已发生了天翻地覆的变化,执行ADD的操作已经完全不同了。

换句话说,就是汇编指令并“不关心”是如何在CPU上执行的。

操作系统不关心如何操作磁盘和网卡,是因为这些都有对应的设备驱动操心。汇编指令不关心具体如何在CPU中执行,这个就是由微码来操心了。所以用类比的方式,可以把微码类比成汇编指令针对某一型号CPU的驱动。

同样的汇编指令,会由该型号CPU的微码转成可以跑在该CPU上的微操作(Micro-ops/uops)。这些微操作指导CPU的电路完成汇编指令要求的意图。

在大家还在编写汇编语言代码的时代,微码为汇编语言的编写提供了方便:

  • 只关心汇编逻辑,而不用关心CPU内部电路设计和具体的执行方式
  • 方便设计出新的汇编指令,由微码翻译成具体的执行逻辑,比如循环中“变量自减若大于零则转跳”,可以用一条汇编指令代替,脏活累活都交给微码去干
  • 修复或绕过一些很难修复的处理器数字电路中的Bug

上述第二点也为CISC指令集的实现提供了技术基础。因为不可能所有复杂的指令都是由专门的执行复杂指令的硬件来完成的,也是由简单的数字逻辑模块组合而成的。

在现代CPU里,是存在专门的将汇编指令翻译成微操作的硬件解码器的。但微码依旧存在(就是CPU微架构图中前端那个Microcode sequencer),它作为一个Lookup Table保存在一块ROM中,用来解码复杂的指令,比如浮点运算的指令等。一般是硬件解码器解码得比较快,而用微码解码会比较慢。

理论上,如果你能更改某一个处理器的微码,那么经它翻译的指令可以变成任意其他的指令。因为它关心指令如何在CPU电路中执行。所以现在升级微码主要是用来解决处理器的稳定和安全性的问题。

当然你也可以用它模拟自己没有的汇编指令,比如AVX系列,我只要在看到AVX512的汇编之后,把它翻译成两个“SIMD256”或者四个“SIMD128”指令就好了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
microcode.service 是用于在启动时加载 CPU 微码更新的服务。如果出现该服务的错误,可能是由于以下原因之一: 1. CPU 不支持该微码更新:某些更新可能只适用于特定的 CPU,如果你的 CPU 不支持该更新,则会出现错误。 2. 缺少依赖项:microcode.service 可能需要其他依赖项才能正确加载微码更新,如果缺少这些依赖项,则会出现错误。 3. 微码更新文件已损坏:如果微码更新文件已损坏或缺失,则会导致服务加载错误。 你可以尝试执行以下步骤来解决这个问题: 1. 检查 CPU 支持的微码更新:你可以查看 CPU 的规格说明或在 CPU 制造商的网站上查找该信息。如果你的 CPU 不支持该微码更新,则需要卸载或禁用 microcode.service 服务。 2. 检查是否缺少依赖项:可以使用以下命令检查 microcode.service 的依赖项是否已满足: ``` systemctl list-dependencies microcode.service ``` 如果该命令返回错误信息,则可能需要安装或更新缺少的依赖项。 3. 检查微码更新文件:可以使用以下命令检查微码更新文件是否存在: ``` ls /lib/firmware/intel-ucode/ ``` 如果该命令未返回任何内容,则说明缺少微码更新文件。你可以尝试重新安装 intel-microcode 软件包来恢复缺失的文件: ``` sudo apt-get install --reinstall intel-microcode ``` 如果以上步骤都没有解决问题,请提供更多的错误信息,以便我能够帮助你更好地解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值