微码作用
微码是指令和实现电路之间的隔离。
指令对不同的CPU可以是相同的,但是微码确是对于特定的电路结构而言的,不同电路结构对应的微码不一样,是特定设计的CPU的一部分。
微码可以保存在ROM中,也可以保存在内存中。
微码的加载可以由BIOS进行,也可以在操作系统加载时由操作系统进行。
读取方法
cat /proc/cpuinfo
详细介绍与背景
在十多年前的Pentium时代,intel曾经发布过有缺陷的cpu,因为浮点运算表边界上有几个数据错误,导致在某些应用会出现错误,这个错误概率很小,出错概率小于千万分之一,但还是被捅了出来,intel为此召回cpu。为了避免此类事件再次发生,intel决定给cpu留一个补丁接口,当cpu内部有缺陷的时候,通过加载微码(Microcode),可以修复CPU的部分缺陷。
微指令(英语:microcode),又称微码,是在CISC结构下,运行一些功能复杂的指令时,所分解一系列相对简单的指令。相关的概念最早在1947年开始出现。
微指令的作用是将机器指令与相关的电路实现分离,这样一来机器指令可以更自由的进行设计与修改,而不用考虑到实际的电路架构。与其他方式比较起来,使用微指令架构可以在降低电路复杂度的同时,建构出复杂的多步骤机器指令。撰写微指令一般称为微程序设计(microprogramming),而特定架构下的处理器实做中微指令有时会称为微程序(microprogram)。
现代的微指令通常由CPU工程师在设计阶段编写,并且存储在只读内存(ROM, read-only-memory)或可编程逻辑数组(PLA, programmable logic array)中。然而有些机器会将微指令存储在静态随机存取内存(SRAM)或是闪存(flash memory)中。它通常对普通程序员甚至是汇编语言程序员来说是不可见的,也是无法修改的。与机器指令不同的是,机器指令必须在一系列不同的处理器之间维持兼容性,而微指令只设计成在特定的电路架构下运行,成为特定处理器设计的一部分。
在给CPU初始化的时候, 就需要把INTEL提供的微码写进CPU去,因此 加载CPU微码就是系统BIOS的任务,在这种情况下,当操作系统还没有开始运行时,微码已经由BIOS加载到CPU中。Linux 的内核可以在引导时更新 CPU 固件,而无需 BIOS 更新。处理器的微码保存在内存中,在每次启动系统时,内核可以更新这个微码。这些来自 Intel/AMD 的微码的更新可以去修复 bug 或者使用补丁来防范 bug,这种方式是在操作系统开始启动后进行加载微码。
参考文献:
https://blog.csdn.net/vic_qxz/article/details/79723072
https://www.sohu.com/a/251871710_100060134
https://wenku.baidu.com/view/f23b94d4360cba1aa811da49.html
https://blog.csdn.net/dengjinge