你知道你正在用的電腦是 70 年前發明的馮紐曼架構嗎?

《一看就懂的 IC》系列,將延續「一看就懂的 IC 產業結構與競爭關係 」,繼續為讀者科普一下計算機構造和 IC 晶片的原理。

不但能瞭解台灣的電機系與資工系在學些什麼,也是看懂高通、聯發科、台積電、美光等各類 IC 大廠產品策略的必讀知識。

本集作為系列第一篇文,讓我們來看看——什麼是馮紐曼架構。

啪嗒啪嗒打著程式… 你有想過,電腦是怎麼讀懂你的程式的呢?電腦又怎麼做運算?一天到晚聽到的處理器、記憶體、記憶體的讀寫次數、暫存器… 等等名詞,到底是什麼意思呢?

等等… 你有想過,電腦到底又是怎麼來的嗎?(沒有,因為你只想到你自己。就像你不知道,在非洲每經過 1 分鐘,就是 60 秒過去了。)

新一代量子電腦架構近來正炒的熱門,然而在瞭解量子電腦之前,你知道你用的電腦、手機等 3C 產品通通都是馮紐曼架構嗎?

每次查詢相關名詞或翻開電腦介紹書,總是乏味又難懂到難以看完嗎?放心,這將會是你看過最不無聊的硬體結構介紹!

電腦是怎麼來的?

ENIAC:情人節誕生的奇蹟

普遍認為最早的通用電腦,是美國賓州大學的莫奇來(Mauchly)和他的學生埃克特(Eckert)在 1946 年 2 月 14 日當天所發表的「ENIAC」。情人節別再討論單身魯了,人家可是在情人節顛覆世界呢…

ENIAC 計算機在進行每一次運算之前,都須根據運算要求、把不同的元件用人工插接線路的方式連接在一起。將輸入裝置和輸出裝置設好後,才進行通電……啪!一聲,電腦噠噠噠的開始運作。

但現在可能正用電腦看這篇文章的你,好像不需要在開機前把電線插來插去才能使用?

因為 ENIAC 這個電路沒有儲存程式的功能。最早的計算機器僅內涵固定用途的程式,比如一台「計算機器」僅有固定的數學計算程式,除此之外便無其他,無論是文書處理或玩遊戲都不行。

若想要改變這台機器的功能,你必須更改線路結構、甚至重新設計機器。

太麻煩了吧!有沒有什麼更好的辦法呢?比如,做出一台能跑遊戲又能做文書處理的「通用電腦」?

EDVAC:馮·紐曼結構與現代電腦

1945 年 6 月,是現代電腦科學的里程碑。著名的美籍猶太裔數學家馮·紐曼(John von Neumann)與多位學者聯名發表了一篇長達 101 頁的報告《First draft of a report on the EDVAC》其中包括兩大建構電腦的原則:

  • 大膽捨棄了十進制、改以二進制運算和儲存資料。
  • 要被執行的程式得先放在記憶體中、要執行時再去記憶體中抓出來。

事實上,這兩點原則都指向了報告最核心的概念——「可儲存程式的電腦(Stored Program Computer)」。

如果是一台能儲存程式的電腦,只要一開始先將「文書程式」與「遊戲程式」都載入記憶體中,再告訴電腦去記憶體的哪一個位置開始執行就可以完成,在不需更動硬體的情況下就能讓電腦變得更加有彈性。

1951 年,美國軍方根據這份報告、並透過馮·紐曼的協助,斥資五十萬美元打造了計算機「EDVAC」。
馮紐曼與 EDVAC 電腦

相較於十進位、又須人工插接電路的 ENIAC,可以說 EDVAC 是第一台現代意義的通用計算機,至今全世界的電腦皆仍採用「馮·紐曼架構」。

講白點,馮紐曼架構就是一個打造電腦的「數學模型」,也是目前唯一成功被實作出、全世界電腦唯一使用的數學模型。

繼馮紐曼電腦後、第二個被認為可能實作出來的數學模型為量子電腦(Quantum Computer),但到現在還沒真的成功做出來。

其他也還有一些架構,比如哈佛架構、仿生電腦,基本上也都還處於理論階段,尚未商用化。

(若讀者對於量子電腦架構有興趣,歡迎參考以下 Kurzgesagt 科學頻道 的動畫介紹,記得開中文字幕!)

馮紐曼能打造一個電腦架構,至今延續超過 70 年全世界的電腦都還在用它,實在太厲害了!除此之外,馮紐曼還是博弈論的創始人,也被稱作「博弈論之父」;博弈論被認為是 20 世紀經濟學最偉大的成果之一。另外他在量子力學上也有著重大貢獻…

咳咳,離題了。希望經過這樣的介紹,您能對馮紐曼此人天才的逆天程度有一些概念。

最後,在這邊還是要為大家補充一下,「可儲存程式」電腦這個概念並不是由馮紐曼提出、而是圖靈(Turing)提的圖靈機(Turing Machine)噢。

(英國男影星 Benedict Cumberbatch 在電影《模仿遊戲》中飾演的主角即為圖靈。馮紐曼只是根據圖靈機的想法,將可儲存程式電腦真正實作出來。)

但你想進一步知道圖靈是為什麼會提出圖靈機這個數學模型嗎?咳咳,歡迎你參考我 先前寫的一篇文章 。(天啊,這接下來又得為大家另開一個系列討論了)

馮紐曼的現代電腦架構

接下來,讓我們針對馮紐曼架構、來為讀者做進一步的解釋,同時瞭解 CPU 與記憶體的設計原理。

馮紐曼架構(可儲存程式電腦)

在馮紐曼式的電腦中,電腦被分成了五大單元、缺一不可,分別稱作「控制器」、「運算器」、「儲存器」、「輸入設備」(Input)與「輸出設備」(Output)。

「輸入設備」就是你用來將外部資料輸入到電腦的東西,比如鍵盤、滑鼠。「輸出設備」就是將電腦內部的資料輸出到外部給你看的東西,比如螢幕、印表機。

最近蠻多新創公司、遊戲開發商、工程師、技術宅宅都改用 .io 的網址,比如 spring.io。讓 .io 變成繼 .com 之後的熱門網域。這是因為 io 剛好有 I/O(Input/ output)的意義。

那「控制器」、「運算器」和「儲存器」又是什麼呢?

在這裡,我們要來講一個小當家做菜的故事幫你瞭解。

儲存器,也就是實際上的 「記憶體」。可以把記憶體想像成一個大櫃子,每個櫃子都有一個編號,我們稱為位址(Address)。常常聽到的 「記憶體位址」 就是這個意思噢!

這些櫃子中,會用來儲存正在執行中程式的「程式碼」(指令)、和待處理的「資料」。

想像一下,這些指令就是我們的食譜、資料就是食材;對資料要求做加減乘除的處理程序,其實就是對食材做蒸煮炒炸的感覺呢!

等等,那是誰要負責執行這些食譜和煮食材呢?當然就是我們的廚師、也就是 「處理器」要做的事情。

但這個廚師腦子記不太得東西,你得告訴他:要去記憶體位址哪邊抓食譜、和要去記憶體位址的哪邊抓食材。這個動作就叫做 「Memory Read」(讀取記憶體)

想想你炒菜的時候,一定要先把料從冰箱拿出來放到鍋子的旁邊啊,總不會要炒菜的時候、才衝到冰箱把菜拿出來吧?這樣鍋子都要燒乾了。

所以我們把要煮的食材(要運算的資料)從記憶體抓出來後,會先把它暫存到 CPU 的一個空間,這個空間就叫做 「暫存器」,專門放即將要算的資料、和剛算好的資料。

可以想像暫存器(Register)就是你鍋子邊放要煮食材、和剛煮好的菜的盤子。依據不同架構的 CPU ,暫存器的數量會不同。像 ARM 和 MIPS 架構的處理器裡面便有 32 個暫存器。

然後 CPU 廚師會開始根據食譜煮煮煮食材… 煮完後,又把剛煮好的菜餚先放到手邊的盤子中,也就是 CPU 中的另一個暫存器。

 

但你煮完的菜餚總不能一直放在廚房繼續佔空間,廚房是要煮菜的地方,得把菜再放回倉庫存放。

所以 CPU 會把煮好的菜(運算完的結果)送回記憶體的格子中。這個動作就叫做「Memory Write」(寫入記憶體)。

同時,廚師會繼續根據「程式計數器(Program Counter, PC)上記載的記憶體位址,來取得下一張要執行的食譜。

可以想像它只是另一個用來放食譜單子的倉庫地址的盤子!程式計數器是一個特殊的暫存器,專門用來存放下一個要被執行的指令所在的記憶體位址。也可以叫它 Instruction Address Register 或 Instruction Counter。

哇!輕輕鬆鬆就瞭解馮紐曼架構了,以後再看到 CPU、記憶體、記憶體位址、暫存器、記憶體的讀寫次數、Program Counter… 之類的討論和名詞,相信不會再害怕了!

講這麼多,這個架構在實際上的硬體,是長什麼樣子呢?

在一塊個人電腦的主機板上,可以插上 CPU 處理器、主記憶體、顯示卡,再接上硬碟,連接到鍵盤,連上螢幕,最後接上電源。

這樣就是一台馮紐曼架構的電腦啦!來看一下我們講的馮紐曼架構五大單元,是不是都在上面:「控制器」與「運算器」(都包在 CPU 裡面)、「儲存器」(記憶體)、「輸入設備」、「輸入設備」。

登愣!這樣就出現一台可以正常運作的電腦,很簡單吧!以後別怕身邊沒有工具人,自己就能當自己的工具人。

這時候就要回顧一下一開始說的… 還記得我們提到,為什麼馮紐曼架構電腦,為什麼會比本來的 ENIAC 電腦更好呢?

因為在電腦要執行程式之前,先將要執行的「程式碼」與「資料」儲存於記憶體。若要變更任務,只需要修改程式即可,省去更改線路的麻煩。

另外,還記得「指令集架構」這個名詞嗎?

結合我們先前在 Intel x86 與 ARM 架構大戰 一文中介紹過——任何產品在設計的時候,都要先制定規格、再依據規格設計出相應的產品。

當我們想要設計 CPU 時,要制定的規格就是「指令集架構」(Instruction Set Architecture, ISA)。

指令集架構包含了:

  • 指令集
  • 該指令集依附的機器結構敘述(Hardware Information)

指令集架構提供工程師造計算機的抽象規格。根據相同的抽象規格,可以採用不同的方式造出計算機,然而造出來的計算機會彼此相容,也就是功能、規格相同。所以如果我們把 ISA 和馮紐曼架構結合在一起,就是:

指令集架構(ISA)+ 馮紐曼架構(Von Neuman Machine)= 電腦基礎架構(Basic Computer Structure)

無論是伺服器、Workstation、個人電腦、筆電,還是你的手機、平板電腦等電子產品,至今全部都是採用馮紐曼架構的電腦!

可以想想並找找看手機的運算單元、儲存單元、 I/O 裝置分別是哪些硬體,把手機拆開來看看也行(不負責任推坑)!

結語

我們今天學到了:

  1.  馮紐曼是一位多可怕的逆天天才。
  2.  馮紐曼架構有五大單元(控制、運算、儲存、I/O)
  3.  無論手機電腦等電子產品全都是馮紐曼架構。
  4.  「I/O 設備」對應到的,就是鍵盤、滑鼠,與螢幕、印表機。
  5.  「控制/運算/儲存單元」如何運作,也就是 CPU 和記憶體之間的關係(廚師拿食材與指令 / 倉庫)
  6.  指令集架構 + 馮紐曼架構 = 電腦基礎架構

感謝大家收看今天的《一看就懂的 IC》第一集。

等等,我還有個問題!記憶體和硬碟,到底有什麼差別?(難道硬碟和 CPU 的關係就是上面講的這樣嗎?)

不,CPU 不會直接去硬碟抓資料。有些硬體裝置雖然叫「記憶體」、比如快閃記憶體 Flash,但它的身份其實是硬碟。符合我們這邊介紹的記憶體是 DRAM。

蛤?我還是聽不太懂差異耶!而且記憶體又有 DRAM、SRAM、SDRAM、DDR、LPDDR、Nor Flash、NAND Flash…. 各式各樣的,到底差異在哪邊啊(暈)

三星、SK 海力士、美光、金士頓,或台灣的創見、威剛、旺宏等「記憶體大廠」,又差異在哪?分別銷售哪幾種產品呢?