在懂量子電腦之前,你知道你現在正在用馮紐曼架構嗎

接續一看就懂的 一看就懂的 IC 產業結構與競爭關係,《一看就懂的IC》系列將持續為大家介紹 IC 與硬體的核心基礎概念,此為第一集。

還記得我們在先前晶圓代工系列中提到的「半導體」、「IC」嗎?

積體電路(IC 晶片)是將複雜的電路微縮到晶圓上,再經過兩三百道以上的複雜工序、完成封裝測試後,所製造出的電子元件。

IC 可以說是一個完整的電路系統,能用來處理資訊。電腦、手機、數位相機、電視、冰箱… 等消費性電子產品或家電用品,裡面全都有 IC晶片。

其實我們在之前只明確介紹了「晶圓代工」的技術環節。在這邊為讀者澄清一下觀念。所以這時候的你可能還是搞不懂:

  • IC 的用途具體來說是什麼?

CPU、GPU、記憶體等等都是 IC 噢!

  • 為什麼要用半導體?

以前的電腦是由真空管做的,但因成本過高、效能低,才變成用半導體元件電晶體取代。

  • 為什麼都說電腦的世界只有 0 與 1?

因為電腦採用的是二進位制。(人類是用十進位制)

  • 電晶體開開關關的任務是為了什麼?

做二進位邏輯運算的邏輯閘。

  • 組成電腦的處理器、記憶體、螢幕,元件之間的關係是什麼?

依據馮紐曼的架構來的。至今全世界的電腦仍採用此架構。

好啦,在〈一看就懂的 IC〉的系列中,我們就要來解答這幾個問題。

本系列將為讀者科普一下計算機構造和 IC 晶片的原理。不但是看懂高通與聯發科等 IC 設計大廠在幹嘛之前的必讀知識,也能瞭解一下台灣電機系與資工系到底在學什麼。


 

啪嗒啪嗒打著程式… 你有想過,電腦是怎麼讀的懂你的程式呢?電腦該怎麼做運算呢?

一天到晚聽到的處理器、記憶體、記憶體的讀寫次數、暫存器… 等等名詞,到底是什麼意思呢?

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

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

 

電腦是怎麼來的?

ENIAC:情人節誕生的奇蹟

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

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

history-first-computors-eniac.jpg

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

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

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

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

 

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

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

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

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

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

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

1143fe0ca7acd9eb49322c72982c5d3f.jpg

馮紐曼與 EDVAC 電腦

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

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

繼馮紐曼電腦後、第二個被認為可能實作出來的數學模型為量子電腦 (Quantum Computer) ,但到現在還沒真的成功做出來。其他也還有一些架構,比如哈佛架構、仿生電腦,基本上都還處於理論階段,沒有出現在商業用上。

(若是讀者對於量子電腦架構有興趣的話,歡迎參考Kurzgesagt 可愛動畫介紹噢。記得開中文字幕!)

馮紐曼能打造一個電腦架構,至今延續超過 70 年全世界的電腦都還在用它,實在太厲害。

除此之外,馮紐曼還是博弈論的創始人,也被稱作「博弈論之父」;博弈論被認為是 20 世紀經濟學最偉大的成果之一。另外他在量子力學上也有著重大貢獻…

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

備註:不過可儲存程式電腦這個概念並不是由馮·紐曼提出、而是圖靈 (Turing) 提的圖靈機 (Turing Machine) 噢~

就是小班在電影模仿遊戲中飾演的那位,馮·紐曼只是將可儲存程式電腦真的實作出來。

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

 

馮紐曼的現代電腦架構

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

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

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

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

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

compute.png

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

在這裡我們就要講一個小當家做菜的故事啦。

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

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

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

mem.png

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

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

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

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

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

cpu.png

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

cpumem.png

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

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

同時,廚師會繼續根「程式計數器」(Program Counter, PC)上記載的記憶體位址,來取得下一張要執行的食譜。你就想像它只是另一個用來放食譜單子的倉庫地址的盤子!

Program Counter 是一個特殊的暫存器,專門用來存放下一個要被執行的指令所在的記憶體位址。也可以叫它 Instruction Address Register 或 Instruction Counter。

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

 

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

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

這樣就是一台馮紐曼架構的電腦啦!

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

von

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

大家想玩玩看的話,閒閒沒事就把主機板打開,發揮一下動手拆的駭客精神、看看裡面有哪些東西吧!還可以用來烤煎餅噢。看完內部架構(煎完煎餅)再裝回去就沒事了XD

https://www.youtube.com/watch?v=3ArW4uogl9w

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

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

 

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

結合我們先前在 Intel x86 與 ARM 架構大戰 一文中介紹過的——任何產品在設計的時候,都要先制定規格、再依據規格設計出相應的產品。當我們想要設計 CPU 時,要制定的規格就是「指令集架構」(Instruction Set Architecture, ISA )。

指令集架構包含了:
  • 指令集
  • 該指令集依附的機器結構敘述(Hardware Information)

螢幕快照 2017-04-14 16.57.51

提供工程師造計算機的抽象規格。根據相同的抽象規格,可以採用不同的方式造出計算機,然而造出來的計算機會彼此相容,也就是功能、規格相同。

所以如果我們把 ISA 和馮紐曼架構結合在一起,就是:

指令集架構(ISA)+ 馮紐曼架構 (Von Neuman Machine)

= 電腦基礎架構(Basic Computer Structure)

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

可以想想並找找看手機的運算單元、儲存單元、 I/O裝置分別是哪些硬體噢!把手機拆開來看看也行 <-不負責任推坑,要知道怎麼裝的回去喔!

 

歡迎大家收看今天的〈邁向硬體宅之路〉第一集。我們今天學到了:

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

 

快脫離曾經的 100% 科技小白,自己的工具人還是自己當吧!

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

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

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

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

本系列的第二集,就讓我們來更進一步介紹記憶體吧!會在下週日公布,還請準時收看噢。

點我看第二集:DRAM、NAND FLASH 最近貴到炸,你還搞不懂記憶體的差異嗎?

Lynn 的補充:

如果我們利用 ARM 架構下的組合語言,把 CPU 要執行的指令寫出來,就會是:

ADD R0, R1, R2 
//R0 是目的暫存器,R1 和 R2 是來源暫存器。

 

意思是把編號 R1 和 R2 暫存器中的數字拿出來做「ADD」(加法),加完後的結果存回 R0 中。

也就是:若 R1 和 R2 的數字分別是 1 和 2,加完後為 3、3 會被存回 R0 這個暫存器中。這段程式碼背後的過程機制。也就是上面所介紹的內容。

 

  • 資料參考來源:
    • 交通大學-計算機組織開放課程
    • 北京大學-計算機組成開放課程
  • 圖片來源:
    • 本文圖片皆為 CC 授權圖、或使用 CC 授權圖自製,轉載請經作者同意。