CPU微码升级与补丁

时间:2024-02-08 11:55:45
CPU微码升级与补丁

CPU微码升级与补丁

cpu微码是指一个 CPU 的指令集作为一微码指令(微指令)的序列。其中每个典型地由很多位域和下一个微指令执行的地址组成。那么,CPU微码怎么升级?CPU微码怎么进行补丁呢?欢迎大家阅读!更多相关信息请关注相关栏目!

在十多年前的Pentium时代,INTEL曾经发布过有缺陷的CPU,因为浮点运算表边界上有几个数据错误,导致在某些应用会出现错误,这个错误概率很小,出错几率小于千万分之一,但在还是被捅出来了。INTEL为此召回CPU。

从PentiumPro起,INTEL决定给CPU留出一个补丁接口,当CPU内部有缺陷的时候,通过加载微码(Microcode),可以修复CPU的部分缺陷。

INTEL说,他们只测试过的CPU都是加载了微码的,如果没有加载微码,INTEL不保证会出现什么问题。

现在的CPU有一个CPUID,通过执行CPUID指令,可以知道当前CPU的版本和Stepping。根据这个信息,再给CPU打相应的补丁。

就是CPUID=06D2,Rev.A2

何时给CPU打补丁?

在给CPU初始化的时候,就需要把INTEL提供的微码写进CPU去,因此,加载CPU微码就是系统BIOS的任务。

如果系统的CPU是可更换的,那么其微码也需要更换。因此,在BIOD里,一般要包进若干个ID的CPU微码,以便工厂安排不同的SKU出货。如果BIOS发布是在CPU发布之前,那么BIOS里很可能就没有包进最新的微码,这个系统要使用新CPU的时候,CPU微码是无法加载的。

另外,BIOSROM容量有限,一个微码补丁最小有2K,如果平台兼容的CPU很多,则微码数量是十分巨大的,台式机某些主板可能兼容20多个CPU版本,那么微码的体积很大,BIOS里根本包不下这么多东西,于是,厂商不得不缩水,去掉一些不常用的微码。这些不常用的微码一般都是早期的CPU,如DOTHAN早期的ASTEPPING就很可能没有对应的微码包进你的本本中去。

不打补丁会有什么问题?

INTEL说他们没测过不打补丁的CPU,也就不知道会出什么问题。呵呵,这显然,他们不想说太多技术细节而已。以俺的经验,如果不打补丁,99.99%的时候,用户是感觉不到的,除非问题特别突出。只是俺遇到过几个明显的例子,为此出了几身汗。有几个案例:

1,某PrescottCPU,在台式机上发热量特别大,超出DesignPoint,后来发现没加载微码,加上微码就正常了;

2,某PentiumDCPU,进WINDOWSXP会蓝屏,以安全模式进去后,安装一个SP2补丁,就正常了。后来查出,也是微码没加载;

3,某PentiumM架构CPU,在使用CPU内部TSC时,发现测出的CPU内部频率高出实现的4倍,如2GHzCPU测出却有8GHz,后查,也是没加载微码造成的.异常。

此类案例很多,特别是Core架构CPU,不但微码必须加载,而且要求尽早加载,否则,连BIOS都跑不完,系统就挂了。但是INTEL但至今没有任何官方对每个CPU微码版本进行描述的文件。

怎么检查CPU微码是否加载?

加载微码后,在CPU的MSR(机器特定寄存器)里可以读出版本号。INTELIA-32编程手册上给出标准检查方法:

MOVECX,008bh

XOREAX,EAX

XOREDX,EDX

WRMSR;向MSR8BH写0,清除MSR中的信息。

MOVEAX,0001

CPUID;读CPUID,让CPU查看微码版本,并把微码版本送到MSR8B中。

MOVECX,008bh

RDMSR;读出当前CPU微码版本。

执行上面的代码后,如果EDX的值为0,则说明你的CPU微码是没有没加载的,你的CPU运行在有缺陷的状态。如果不为0,则显示的是当前微码版本号。

以上代码可以在DOS环境下,用DEBUG32调试界面执行。

我很郁闷……

我有一个杂牌的本本,上的是DothanCPU,某一天,俺升级CPU,却发现发热水平异常,于是检查微码加载情况,果然,BIOS里没有这种CPU版本的微码。

换回原来的原厂CPU继续一测,竟然也没有加载微码。

后来换了BaniasCPU才测到CPU微码加载上了。也就是说,厂商在升级CPU的时候,居然没有升级BIOS,这就是某些小品牌电脑厂商的水平,郁闷。

你的CPU升了么?

很多同学把低配的T4X本本换了CPU,不知道这些同学用得怎么样,呵呵,你检查过你的CPU微码么?BIOS有升级支持么?

《CPU微码升级与补丁.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式