PTT推薦

[閒聊] Microcode科普

看板PC_Shopping標題[閒聊] Microcode科普作者
benmei99
(K1NG0DyR)
時間推噓96 推:96 噓:0 →:53

說是科普但就是我感冒在家無聊出來幹個古、帶帶風向(?
比起前幾天製程一知半解的文來說
這算是我的主戰場,但人感冒難免有錯請看官們海涵
警告:職業病的關係有些詞彙我比較喜歡原文,所以看起來會是討厭的晶晶體

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的),對於小白來說能看懂多少,我是希望能讓完全不懂的人了解到底在講什麼東西,起碼這是我在甚麼都不懂的時候,會想要得到的知識、資訊。如果看了有點心得的人可以給我一點反饋

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.158.55 (臺灣)

※ 文章網址:
https://www.ptt.cc/PC_Shopping/E.LEI3Pj-Mgg5E

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/23/2024 21:51:34

smallreader 07/23 21:51熱心講解推

mrme945 07/23 21:54推科普,這幾天電蝦水準整個都高了不少

EraKing 07/23 21:57有趣文章推

cgalen1994 07/23 22:01長知識

zseineo 07/23 22:03

a20556 07/23 22:05推 科普讚讚

CircusWorld 07/23 22:09感謝分享

weiber82 07/23 22:13感謝分享,還是用arm好惹

Pchome12H 07/23 22:15看到一半驚覺拉上去看ID後才繼續看完

Alllllogo 07/23 22:20如果你明天有放假,能不能用個Ai生圖

Alllllogo 07/23 22:20來講解....

AI生圖xD? 你想看怎麼樣的圖片 文字太多難以下嚥嗎xD?

ctes940008 07/23 22:21聽君一席話

kawa0710 07/23 22:24推專業文

TISH12311 07/23 22:25你484想帶學術風向= =

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/23/2024 22:31:16

Yatta 07/23 22:29

mayolane 07/23 22:31大師

Cubelia 07/23 22:32以前microcode大到能從dieshot看到結構

allyourshit 07/23 22:33看到中間一直覺得會跳出胡歌老公出來

阿月是不是很久沒發文了阿,好像很久沒看到了xD

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/23/2024 22:36:00

cc431015 07/23 22:34好文推

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/23/2024 22:38:12

sdbb 07/23 22:41颱風夜優文,謝謝

labbat 07/23 22:47不太滿意一詞多義,雖然知道是英特爾幹法

labbat 07/23 22:48然而可程式化的環節和解碼的環節要區分開

我知道你意思也確實是以Intel家為出發點寫這篇,下次改進

cutejojocat 07/23 22:55先推不然等等怕被發現看不懂

jay920314 07/23 22:57推 好多長知識文此風可長

proton63 07/23 23:01

yymeow 07/23 23:02推專業文,這幾天真的神人輩出

dos01 07/23 23:02剛才把科普看成抖音...我覺得今天該早點睡

dogluckyno1 07/23 23:04推推

chibon1992 07/23 23:05

weimr 07/23 23:05

cliff2001 07/23 23:13

E7lijah 07/23 23:23ptt是學術論壇 沒毛病

aasssdddd 07/23 23:23最重要馬口怎麼應用去修正hw沒講

具體修正的細節是商業機密,我要是知道的話就不會在這邊惹

se2104 07/23 23:26

andy188 07/23 23:27

harry886901 07/23 23:29對不起我只能說你講的已經比我計算機

harry886901 07/23 23:29組織的教授好多了

guanting886 07/23 23:41樓上 幫老師上圖

fufu8aa 07/23 23:58

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 00:17:52

GonXiaXiao 07/24 00:20好文推

Nafusica 07/24 00:26無聊說一下,microcode後來在開發階段

Nafusica 07/24 00:27可以做很多有用的事情 像是early sample

Nafusica 07/24 00:27可以暫時寫到bios讓開發中的mb開機測試

Nafusica 07/24 00:27量產大貨的時候可以移除掉es的支援

Nafusica 07/24 00:28以前頂級玩家也會爭取mb廠先拿初期的

Nafusica 07/24 00:28microcode來跑極限成績之類

懂行的xD 沒錯 感謝補充

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 00:42:17

lunaX19 07/24 00:42

sunyanwen 07/24 00:44classic microcode是這樣,modern "micr

sunyanwen 07/24 00:44ocode"包含更多,像CPU的PCU Firmware就

sunyanwen 07/24 00:44管理turbo,frequency,vid,power等

是的,感謝補充,這部分忘了寫,下次改進

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 00:56:28

lukeatlee 07/24 00:56推 滿有趣的解釋 也好奇Error hand

lukeatlee 07/24 00:56ling原理(逃

Error handling也是蠻多能寫的,CPU層級的interrupt、OS IPC層級、程式語言層級的ex ception

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 01:04:27

niverse 07/24 01:12很有趣 推個

niverse 07/24 01:13拜託續集XD

roseritter 07/24 01:19推 認真文

y7moremore 07/24 01:27看不懂也推

z1357961 07/24 01:42推科普

fate201 07/24 01:47推學術 喚醒死去的計算機概論的記憶

woula 07/24 02:26推 很不錯,受教了XD

as134679258 07/24 02:42長知識 推

neo5277 07/24 03:16推個˙

justicebb 07/24 03:35推科普 很好睡

moocow 07/24 03:56

ShibaTatsuya 07/24 04:49推 PTT果然是學術論壇

kelvin0004 07/24 05:28死去的計結記憶在攻擊我

xxxx9999xxxx 07/24 05:53推。

iorittn 07/24 06:42

DivineSX 07/24 06:45推推

bhmagic 07/24 07:38聽君一席話 知君是文組

Dreampen 07/24 08:49推講解

DarkPST 07/24 08:59感謝科普

Recluz 07/24 09:07讚讚 版上需要更多這種優質文

greg7575 07/24 09:25應該不會在這版上出現胡歌老公吧。

bunjie 07/24 09:39推推 希望能有更多深入介紹

fanyuzeng 07/24 09:55推解說

ClixTW 07/24 09:57推推,看了覺得很有趣

kuroshizu21 07/24 10:31言簡意賅, 清楚易懂, 期待下一篇!!

kuroshizu21 07/24 10:33而且這樣拋磚引玉的文章也讓板上很多

kuroshizu21 07/24 10:33其他的板友出來回應/補充/討論, 我個

kuroshizu21 07/24 10:34人覺得這樣很棒

ufoufoufo 07/24 10:40

Fortis931 07/24 10:41小白狂喜

andy6805 07/24 10:48電蝦一片業代中難得的清流

rgo 07/24 10:52至少能讓咱們理解下intel不是空口豪洨

info2000 07/24 11:21推推,我一直以為微碼只有辨識cpu的功能

info2000 07/24 11:21,原來用處這麼大

AmibaGelos 07/24 11:33現代microcode和當初已經差很多惹 早

AmibaGelos 07/24 11:33期指state machine 如arm push能挑哪

AmibaGelos 07/24 11:33些reg存進stack 實際上是loop over指

AmibaGelos 07/24 11:33令裡16個select bit 這部分到現在變

AmibaGelos 07/24 11:33成decoder內的microcode 但microcode

AmibaGelos 07/24 11:33更新包山包海 不論eTVB或之前spectre

AmibaGelos 07/24 11:33meltdown改分支預測行為都和原始micr

AmibaGelos 07/24 11:33ocode無關惹 只是當初借用名字

是的,感謝補充,這部分稍嫌瑣碎就沒寫了

labbat 07/24 11:43借用名字描述得真好,之前想用重載或重新

labbat 07/24 11:43定義的解釋效果都不太理想

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 11:49:14

jacky841224j 07/24 11:54實現這語意有點奇怪,應該是達成吧

一般情況下我會講implement xD

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 11:57:53

y865504 07/24 12:14推專業

smartree 07/24 12:18又學了新知識了,好文推推

shadoM 07/24 12:24計組科普

nicetw20xx 07/24 12:40

kyocartoon 07/24 12:45推專業 跪求續集

tomsawyer 07/24 12:58如果microcode能被永久放在cpu裡,那

tomsawyer 07/24 12:58一定有儲存結構 但應該沒有

tomsawyer 07/24 13:00所以ucode應該都是隨著os實時打上去的

其實是有的喔,有一塊ROM跟RAM,RAM是用來幫那塊ROM patch的。以Intel來說目前Microco de的讀寫都是透過Model Specific Register(MSR)

athraugh 07/24 14:17希望看續集

tw11509 07/24 14:17

jhjhs33504 07/24 14:42常見BIOS更新microcode是CISC架構

jhjhs33504 07/24 14:45RISC不確定是不是當成firmware寫入O

jhjhs33504 07/24 14:45S image

jhjhs33504 07/24 14:47早期灌OS還得先灌驅動更新才行

et84121 07/24 14:55推推

cmshow 07/24 15:05推,漲姿勢

wk415937 07/24 15:19

cancelpc 07/24 16:35用知識沖淡錢臭味

※ 編輯: benmei99 (111.248.158.55 臺灣), 07/24/2024 16:35:52

RusevDay 07/24 16:42先推再看

jhjhs33504 07/24 17:45手機通常出廠怎樣就怎樣 也可刷機破解

w9515 07/24 17:48推分享謝謝

yymeow 07/24 17:52再推一下,長知識了

Tenshi3028 07/24 18:11好文推推

ILike58 07/24 19:04這不算晶晶體啦,優質的中譯書籍也是這種

ILike58 07/24 19:04描述。

fantasy043 07/24 23:14推專業教導 辛苦了

canandmap 07/25 00:07推,謝謝分享

dowbane 07/25 00:43感謝分享

timofEE 07/25 02:32稍微看的懂 先推著明天來仔細看

amethystboy 07/25 08:01原來是商業機密

samsonfu 07/25 12:32

doomsday0728 07/25 14:53推 跟上時事

jyhfang 07/25 17:18推 有些詞用原文完全沒問題 中文翻譯

jyhfang 07/25 17:19不一致 閱讀起來比較頭疼

kuseang 07/25 23:03推推 長知識

kaltu 07/26 00:30實現語境會怪是因為這也是大陸人翻英文不管

kaltu 07/26 00:30語境只看字典第一個意思的結果,跟面向對向

kaltu 07/26 00:30一樣的翻法

kaltu 07/26 00:30我對microcode的理解就是比較簡單的就算機

kaltu 07/26 00:30器碼的巨集展開器,比較複雜的就是機器碼的

kaltu 07/26 00:30直譯器

kaltu 07/26 00:30反正這個時代跟編譯語言直譯語言的區別已經

kaltu 07/26 00:30從根本上消失了,再怎麼編譯最後產生的mach

kaltu 07/26 00:30ine code/binary

kaltu 07/26 00:30對CPU來說也只是microcode拿來interpret的b

kaltu 07/26 00:30ytecode而已

a8785007 07/26 03:02原來是這樣啊

SilverFox 07/26 07:22

tgenie 07/26 07:55

skyrain1234 07/26 09:06

ak478998 07/26 12:48把學術論壇效益發揮的淋漓盡致

youcanfindit 07/26 18:27推 感謝科普