什么是Intel微码?

Qua*_*mis 75 linux assembly intel

根据我的阅读,它用于修复CPU中的错误而无需修改BIOS.根据我对汇编的基本知识,我知道汇编指令在内部由CPU分成微码并相应地执行.但是,在系统启动并运行时,intel会以某种方式提供访问以进行一些更新.

有人有更多的信息吗?有没有关于微码可以做些什么以及如何使用它们的文件?


编辑:我已经阅读了维基百科的文章:没有弄清楚我怎么能自己写一些,以及它会有什么用处.

Tho*_*nin 76

在较旧的时代,微代码在CPU中被大量使用:每条指令都被分成微码.这使得适度CPU中的指令集相对复杂(考虑到具有许多操作数模式和8个32位寄存器的Motorola 68000适用于40000个晶体管,而单核现代x86将拥有超过1 亿个).这不再适用.出于性能原因,大多数指令现在都是"硬连线":它们的解释是由任何微码之外的不灵活电路执行的.

在最近的x86中,有些复杂的指令fsin(例如计算浮点值的正弦函数)是用微码实现的,但是简单的指令(包括整数乘法imul)不是.这限制了定制微码可以实现的目标.

话虽这么说,微代码格式不仅非常特定于特定的处理器型号(例如,Pentium III和Pentium IV的微代码不能互相自由交换 - 当然,使用Intel微处理器的AMD处理器不在问题),但它也是一个受到严密保护的秘密.英特尔发布了操作系统或主板BIOS可以更新微码的方法(必须在每次硬复位后完成;更新保存在易失性RAM中),但微代码内容没有记录.在英特尔®64和IA-32架构软件开发人员手册(卷3a)描述了更新过程(第9.11节"微码更新设施"),但声明实际的微码是"加密的"并且是时钟满的校验和.措辞很模糊,几乎可以隐藏任何类型的加密保护,但最重要的是,对于英特尔以外的人来说,目前不可能编写和尝试一些自定义微码.

如果"加密"不包括数字(非对称)签名和/或如果英特尔人以某种方式破坏保护系统,则可以想象一些显着的逆向工程努力可能使人们能够生产这样的微码,但是鉴于可能有限的适用性(因为大多数指令都是硬连线的),就编程能力而言,可能性不会太大.

  • "这不再适用.出于性能原因,大多数指令现在都是"硬连线":它们的解释是由任何微码之外的不灵活电路执行的." 我不认为这是正确的.Agnor Fog已对现代x86 CPU进行了大量逆向工程,并经常提到微码,事实上我认为微码是流水线和OOE而不是正常指令,而正常的事情就像使用内存地址而不是寄存器来生成操作一样额外的u-ops.Agnor Fog手册:http://www.agner.org/optimize/microarchitecture.pdf (42认同)
  • 此外,pltsim尝试进行完整的x86-64 CPU仿真,专门模拟微码:http://www.ptlsim.org/ (5认同)
  • 这看起来像很多猜测而没有参考. (5认同)
  • @JosephGarvin:另一个显而易见的事实是Pentium IV有_trace cache_而不是普通的_L1 icache_. (2认同)
  • 似乎ptlsim.org不再存在,但[Marss86](http://www.marss86.org/~marss86/index.php/Home)基于ptlsim. (2认同)
  • @JosephGarvin哦,我明白了.是的,有许多微编码指令,具体而言,许多系统指令执行一个或多个验证.但是,编译器经常使用的大多数指令都是硬连线和特殊的.Agner Fog列表中吞吐量小于1的指令不会进行微编码.为了实现小于1的吞吐量,必须在同一时钟中解码多个指令,并且只有第一个解码器处理微编码指令.吞吐量大于1的指令可能是微编码的. (2认同)

old*_*mer 17

想一想虚拟机或模拟器,例如qemu-arm可以模拟x86主机上的arm处理器,理想情况下,模拟臂上运行的软件不知道它不是真正的手臂.将这个想法提升到整个芯片设计的水平,使得它看起来总是像x86,软件永远不会知道芯片内部有一些可编程项目.而其他一些处理器在某种程度上是为了实现/模拟x86而设计的.据说流行的AMD 29000产品线刚刚消失,因为硬件团队和处理器/核心成为早期x86克隆的核心.Linus工作的Transmeta有一个vliw处理器,它被制作成低功耗的x86.在那种情况下,翻译层不是(尽可能多)秘密.Vliw,很长的指令词,

不,它不像我暗示的那么多仿真层,没有一些linux在每个芯片内部运行qemu程序.它介于硬连线之间,中间没有软件/微代码和完全打击模拟.可编程位可能像一个FPGA,可编程门,也可能是软件或可编程状态机,这意味着不可编程门,正是在栅极运行是可编程的.

您的非x86,非大铁型处理器.以ARM为例,是硬连线,没有微码.微控制器,PIC,MSP430,AVR,假设这些不是微编码的.基本上不要假设所有处理器都是微编码的,如果有任何处理器系列则很少.只是我们在PC上处理的那些已经存在并且可能仍然存在,所以可能感觉它们都是.

作为乐趣,因为它听起来可能与此微打,很可能非常具体的处理器系列,你可能永远不会访问它是如何工作的,除非你的Intel或AMD,每个可能有自己的内部工作.所以,你需要在这两个中的一个找到工作,然后通过沟渠你的工作方式成为可能什么是一个精英团队,做这项工作之一.一旦你的职业生涯陷入困境,你的技能可能仅限于一家公司的一份工作.你可能有一个显卡上更有趣的编程单独的GPU,这东西是记录或至少具有工具,是你今天可以不用在AMD或英特尔花费10年的时间可能一事无成.

  • *"没有一些linux在那里运行,每个芯片内都有一个qemu程序."*我会嘲笑那个前景 - 直到几天前.然后,报告了这个:http://www.zdnet.com/article/minix-intels-hidden-in-chip-operating-system/.事情变得比以前复杂得多. (3认同)

Pau*_*l R 9

你通常不会写微代码.要做到这一点,需要熟悉CPU微架构.英特尔不会一般性地发布有关其微架构或其微代码的任何信息.

  • @Paul R:英特尔微码更新在硬复位时不会持久.在硬复位时,处理器将恢复为工厂微码. (11认同)
  • @Paul R:微代码不是持久的:)再次阅读那个wiki.此外,linux在每次重启时都会保持CPU的路径...另外,在wiki上它说通常BIOS负责在每个init上路由CPU. (5认同)
  • 有微码模拟器,如果你想了解更多有关微码的信息并尝试一下,例如:http://www.mythsim.org/,http://en.wikipedia.org/wiki/MikroSim,http:// www .forth.com /存档/ jfar/VOL3/NO3/article1.pdf (5认同)
  • 只要微码不持久,为什么会导致cpu损坏?(我这里不是在谈论超频,我只想问一下在股票cpu上可以做些什么) (4认同)
  • 如果您想使用微代码和其他CPU实现细节,您可能会考虑进入FPGA软核处理器.或者只是玩模拟器. (4认同)