Kra*_*ken 6 memory cpu computer-architecture
我读到微码在每次重新启动时都会加载到处理器中。它驻留在闪存中,当机器启动时,它会被复制到 CPU。或者在 Linux 的情况下,操作系统本身具有处理器的微代码副本。但是微码是如何复制到处理器的呢?所有数据都经过 CPU 同意在计算机中移动。CPU 以机器语言给出指令。由于微码对于这些机器语言指令的执行是必不可少的,那么在处理器中没有微码的情况下,CPU如何完成访问闪存并进行后续操作的指令?这是否意味着硬连线非微编码指令在实模式下复制微代码?
mis*_*256 10
现代 CPU 已经安装了完整的微码。此微码位于 CPU 本身的特殊 ROM 区域中,无法更改/擦除。因此,CPU 可以开箱即用。
然后系统 BIOS 和/或操作系统可以启动将微代码更新加载到 CPU 中。这样的更新不是一个完整的微代码,而是一个解决错误的小补丁。为此,CPU 包含一小块易失性 RAM。
一个有用的参考:https : //www.dcddcc.com/pubs/paper_microcode.pdf
Law*_*ceC 10
我读到微码在每次重新启动时都会加载到处理器中。
BIOS 可以在启动期间发出微码更新。操作系统也可以。通常需要这些更新,尤其是对于更高版本的 Intel CPU。
它驻留在闪存中,当机器启动时,它会被复制到 CPU。或者在 Linux 的情况下,操作系统本身具有处理器的微代码副本。但是微码是如何复制到处理器的呢?
现代 Intel 和 CPU 有一种称为“模型特定寄存器”的机制,以及用于读取 (RDMSR) 和写入它们 (WRMSR) 的特殊 CPU 指令。虽然这些寄存器会影响 CPU 设置,但写入具有新微码地址的特定寄存器会告诉 CPU 读取内存区域并应用于现有微码。
所有数据都经过 CPU 同意在计算机中移动。CPU 以机器语言给出指令。由于微码对于这些机器语言指令的执行是必不可少的,那么在处理器中没有微码的情况下,CPU如何完成访问闪存并进行后续操作的指令?
总是有一个微码。上述机制更新微码。Intel/AMD 并没有真正发布有关其工作原理的详细信息,它们仅提供更新机制。显然,它以某种方式将 ROM 微码复制到某种 CPU 内部存储器。但是当 CPU 启动时,那里有一些微码。如果没有 BIOS 进行微码更新,一些最近的 Intel 和可能的 AMD CPU 在启动后将无法可靠地工作,但显然它们将运行良好以执行初始微码更新。
这是否意味着硬连线非微编码指令在实模式下复制微代码?
初始微码设置由 CPU 在内部完成,不执行任何指令来实现这一点。它是在执行第一条 CPU 指令之前设置的。
要更新 BIOS,必须执行相应的 RDMSR 和 WRMSR 指令。
参考:“此指令必须在特权级别 0 或实地址模式下执行;否则,将生成一般保护异常 #GP(0)。” 如果不是在实模式下执行,则必须在环 0 或内核模式下执行。您可以随时更新微码。
这个问题表述不当。现代x86/IA64 CPU中有很多“微码”,“微码补丁”和微码是有区别的。
其经典理解中的微代码(作为长 CPU 指令执行的逐步元素)几乎肯定是刻在硅片中的,因为当新的硅片/RTL与每个新的制造节点一起编译。
但是,所有最近的 CPU 都有几个内部单元,这些单元由嵌入在 x86 CPU 芯片中的独立微处理器控制。
最著名/众所周知的是所谓的“P-unit”,一种控制 CPU 动态电源管理的处理器。随着 CPU 晶体管的进一步小型化,核心频率上升和泄漏增加,将功率保持在合理限制的唯一方法是通过积极的时钟节流和动态功率门控。问题在于 CPU 可以执行无数种软件代码,并且每一种都达到某个功耗峰值。某些“电源病毒”的模式在 CPU 最终确定零售的那一刻可能还不为人所知,并且必须更正管理算法的某些参数。这是通过专用的“微码补丁”完成的。
还有几个这种类型的微处理器控制其他 CPU 块,如图形和内存。
补丁过程细节为绝密,防止恶意干扰。这是一些黑客关于尝试对该机制进行逆向工程的报告。
简而言之,x86 架构的微码并没有加载到现代 CPU 中,但是各种辅助嵌入式微处理器的微码可以有补丁。
微码更新只是对永久刻录到 ROM 中的现有 CPU 微码的补丁。CPU 有一个永久性 ROM 和一个可以包含新代码的补丁 RAM。RAM 中还有一个“匹配”值表。该表对 ROM 的每个可修补部分都有一个条目。当 CPU 执行可修补指令时,它会检查此表。如果有条目,则它使用 RAM 中的代码。如果它具有默认值,则跳转到 ROM。因此,要修补 CPU,必须将新代码上传到 RAM,然后适当修改匹配表中的条目。执行此操作的过程大致如下:
清除 EAX,使用 CPUID 读取当前处理器签名,并将匹配的微码更新加载到内核内存中。
清除 EAX 和 EBX,并使用来自修订匹配特定寄存器的 RDMSR 指令读取当前微码修订。
使用 WRMSR 指令将微码更新的内存地址写入更新匹配特定寄存器。
读取新的微码修订版,如果与更新的匹配,则返回成功。否则返回失败。
在基于 Linux 的操作系统中,此过程在启动时由称为“微码”的特定内核模块完成。您可以阅读此模块的源代码以查看确切过程。
请注意,补丁文件有一个文档头,但补丁数据本身,即实际代码,由硬编码到处理器中的秘密密钥加密。除非您知道此密钥,否则您将无法编写自己的补丁。
归档时间: |
|
查看次数: |
12290 次 |
最近记录: |