[閒聊] Microcode科普

作者: benmei99 (KinGodyr)   2024-07-23 21:50:08
說是科普但就是我感冒在家無聊出來幹個古、帶帶風向(?
比起前幾天製程一知半解的文來說
這算是我的主戰場,但人感冒難免有錯請看官們海涵
警告:職業病的關係有些詞彙我比較喜歡原文,所以看起來會是討厭的晶晶體
1. 甚麼是Microcode
在了解為甚麼需要跟甚麼是Microcode前,先來看一下高階語言的流程
Source code→Compiler→Machine code
Machine code裡面放著很多machine language instruction(機器指令)
所謂的CISC(複雜指令集)、RISC(精簡指令集),複雜精簡指的是機器指令複雜度。
CISC特點就是指令數非常多而且複雜,指令長度也不等,這和Microcode什麼關係呢?
以前設計CPU的時候都是直接硬體實現(hard-wired),fetch、decode、execute (包含位
址計算、讀取、寫入等等),都是直接用組合邏輯+狀態機電路直接實現並控制的,優點是
硬體執行非常高效。但在後來CISC持續發展下,尋址(addressing)等複雜操作要完全用硬
體實現就越來越不現實也很難維護,所以Microcode就這樣生出來了。
講了那麼多,Microcode到底是什麼? 其實就是把一個指令拆解成很多個Microcode
(Micro-ops),這些microcode是可以直接被硬體實現(執行)的,這樣做降低了很多設計上
的難題和複雜度。Microcode就是一個執行的最小單位(low-level layer)。
Machine instruction執行的時候需要解碼(Decode),負責解碼的單元叫做Instruction
Decode Unit(IDU),IDU大略可以分成兩部分,hardware decoding和microcode decoding
,前者就是直接硬體實現(hard-wired)一些基本指令,例如加減;後者就是負責將複雜指
令轉成數個micro-ops,簡單一點的可能一個micro-ops,普通3~4個左右,複雜的4個以上

x86在80年代後就一直有用microcode,並且Intel在發生了下面要講的事件後開始思考能不
能透過維護microcode來達成出貨後的錯誤修正。
2. Intel大出包
在這次的事件前,Intel出過最大的包應該就是1994年Pentium FDIV bug了,源頭是FPU
的浮點除法指令,在1994年有個美國教授(是數學還是CS我忘了),有個研究需要用電腦做
除法運算,但是他在用電腦處理除法的時候發現答案是錯的,後來種種原因發現是Intel在
當時為了加速運算,把乘法表燒錄在CPU上,但其中有5個輸入錯誤。
其實在運算過程中是會自動修復,只有幾個數字才會完全錯誤,但這位教授很幸運地遇到
了。事後統計我記得是90億次除法才會出現一個錯誤,平均故障是700年才會發生一次(還
是800我也忘了)。後來事件的結果是全面召回有缺陷的CPU。
事件發生後Intel就開始思考出貨後要怎麼維護硬體故障了,很明顯microcode就是一個最
好的維修孔,至於實際上怎麼維修或是patch就是它們的商業機密了,但最後對使用者的方
式就是兩個BIOS更新和作業系統更新。
3. 總結
Microcode是一本基本手冊,利用這本手冊可以實現複雜的指令(CISC)
Microcode的角色是:
A. 指令執行的最小單位
B. CPU內部硬體控制
C. CPU出貨後的維修孔
Microcode其實很有趣,某種程度上RISC的誕生也有淵源,因為在1970年代中期IBM內部的
Project,他們分析了S/360還有S/370的數據得到了一個結論:Microcode的引入會導致
「執行最頻繁執行的指令」時產生很大、昂貴的開銷,這個結論其實就是RISC的源起和概
念。
突然想到補充一下這個Project就是IBM 801,由John Cocke主導,他是圖靈獎得主也被譽
為RISC架構之父,同時也是CYK Algorithm裡的C,(另外兩人是Daniel Younger、嵩忠雄)
其實還有很多能講的,為了避免過於嘮叨就暫且不提,有人有興趣的話再寫
而且如果完全不知道Microcode是甚麼我想這些應該足夠了xD
最近開始嘗試與他人交流(?
我其實不太確定這樣的文章(包含之前在板上PO的),對於小白來說能看懂多少,我是希望
能讓完全不懂的人了解到底在講什麼東西,起碼這是我在甚麼都不懂的時候,會想要得到
的知識、資訊。如果看了有點心得的人可以給我一點反饋

Links booklink

Contact Us: admin [ a t ] ucptt.com