馮·諾依曼體系結構:計算機組成的金字塔

作者:徐文浩,極客時間"深入淺出計算機組成原理"專欄作者

特別說明:本文爲專欄免費試看部分,如有侵權,聯繫後臺可刪

學習計算機組成原理,到底是在學些什麼呢?這個事兒,一兩句話還真說不清楚。不過沒關係,我們先從“裝電腦”這個看起來沒有什麼技術含量的事情說起,來弄清楚計算機到底是由什麼組成的。

不知道你有沒有自己搞過“裝機”這回事兒。在 2019 年的今天,大部分人用的計算機,應該都已經是組裝好的“品牌機”。如果我們把時鐘撥回到上世紀八九十年代,不少早期的電腦愛好者,都是自己採購各種電腦配件,來裝一臺自己的計算機的。

計算機的基本硬件組成
早年,要自己組裝一臺計算機,要先有三大件,CPU、內存和主板。

在這三大件中,我們首先要說的是CPU,它是計算機最重要的核心配件,全名你肯定知道,叫中央處理器(Central Processing Unit)。

爲什麼說 CPU 是“最重要”的呢?因爲計算機的所有“計算”都是由 CPU 來進行的。自然,CPU 也是整臺計算機中造價最昂貴的部分之一。

在這裏插入圖片描述

第二個重要的配件,就是內存(Memory)。你撰寫的程序、打開的瀏覽器、運行的遊戲,都要加載到內存裏才能運行。程序讀取的數據、計算得到的結果,也都要放在內存裏。內存越大,能加載的東西自然也就越多。

在這裏插入圖片描述

存放在內存裏的程序和數據,需要被 CPU 讀取,CPU 計算完之後,還要把數據寫回到內存。然而 CPU 不能直接插到內存上,反之亦然。於是,就帶來了最後一個大件——主板(Motherboard)。

主板是一個有着各種各樣,有時候多達數十乃至上百個插槽的配件。我們的 CPU 要插在主板上,內存也要插在主板上。主板的芯片組(Chipset)和總線(Bus)解決了 CPU 和內存之間如何通信的問題。

芯片組控制了數據傳輸的流轉,也就是數據從哪裏到哪裏的問題。總線則是實際數據傳輸的高速公路。因此,總線速度(Bus Speed)決定了數據能傳輸得多快。
在這裏插入圖片描述

有了三大件,只要配上電源供電,計算機差不多就可以跑起來了。但是現在還缺少各類輸入(Input)/ 輸出(Output)設備,也就是我們常說的I/O 設備。如果你用的是自己的個人電腦,那顯示器肯定必不可少,只有有了顯示器我們才能看到計算機輸出的各種圖像、文字,這也就是所謂的輸出設備。

同樣的,鼠標和鍵盤也都是必不可少的配件。這樣我才能輸入文本,寫下這篇文章。它們也就是所謂的輸入設備。

最後,你自己配的個人計算機,還要配上一個硬盤。這樣各種數據才能持久地保存下來。絕大部分人都會給自己的機器裝上一個機箱,配上風扇,解決灰塵和散熱的問題。不過機箱和風扇,算不上是計算機的必備硬件,我們拿個紙板或者外面放個電風扇,也一樣能用。

說了這麼多,其實你應該有感覺了,顯示器、鼠標、鍵盤和硬盤這些東西並不是一臺計算機必須的部分。你想一想,我們其實只需要有 I/O 設備,能讓我們從計算機裏輸入和輸出信息,是不是就可以了?答案當然是肯定的。

你肯定去過網吧吧?不知道你注意到沒有,很多網吧的計算機就沒有硬盤,而是直接通過局域網,讀寫遠程網絡硬盤裏面的數據。我們日常用的各類雲服務器,只要讓計算機能通過網絡,SSH 遠程登陸訪問就好了,因此也沒必要配顯示器、鼠標、鍵盤這些東西。這樣不僅能夠節約成本,還更方便維護。

還有一個很特殊的設備,就是顯卡(Graphics Card)。現在,使用圖形界面操作系統的計算機,無論是 Windows、Mac OS 還是 Linux,顯卡都是必不可少的。有人可能要說了,我裝機的時候沒有買顯卡,計算機一樣可以正常跑起來啊!那是因爲,現在的主板都帶了內置的顯卡。

如果你用計算機玩遊戲,做圖形渲染或者跑深度學習應用,你多半就需要買一張單獨的顯卡,插在主板上。顯卡之所以特殊,是因爲顯卡里有除了 CPU 之外的另一個“處理器”,也就是GPU(Graphics Processing Unit,圖形處理器),GPU 一樣可以做各種“計算”的工作。

鼠標、鍵盤以及硬盤,這些都是插在主板上的。作爲外部 I/O 設備,它們是通過主板上的南橋(SouthBridge)芯片組,來控制和 CPU 之間的通信的。“南橋”芯片的名字很直觀,一方面,它在主板上的位置,通常在主板的“南面”。另一方面,它的作用就是作爲“橋”,來連接鼠標、鍵盤以及硬盤這些外部設備和 CPU 之間的通信。

有了南橋,自然對應着也有“北橋”。是的,以前的主板上通常也有“北橋”芯片,用來作爲“橋”,連接 CPU 和內存、顯卡之間的通信。不過,隨着時間的變遷,現在的主板上的“北橋”芯片的工作,已經被移到了 CPU 的內部,所以你在主板上,已經看不到北橋芯片了。

馮·諾依曼體系結構
剛纔我們講了一臺計算機的硬件組成,這說的是我們平時用的個人電腦或者服務器。那我們平時最常用的智能手機的組成,也是這樣嗎?

我們手機裏只有 SD 卡(Secure Digital Memory Card)這樣類似硬盤功能的存儲卡插槽,並沒有內存插槽、CPU 插槽這些東西。沒錯,因爲手機尺寸的原因,手機制造商們選擇把 CPU、內存、網絡通信,乃至攝像頭芯片,都封裝到一個芯片,然後再嵌入到手機主板上。這種方式叫SoC,也就是 System on a Chip(系統芯片)。

這樣看起來,個人電腦和智能手機的硬件組成方式不太一樣。可是,我們寫智能手機上的 App,和寫個人電腦的客戶端應用似乎沒有什麼差別,都是通過“高級語言”這樣的編程語言撰寫、編譯之後,一樣是把代碼和數據加載到內存裏來執行。這是爲什麼呢?因爲,無論是個人電腦、服務器、智能手機,還是 Raspberry Pi 這樣的微型卡片機,都遵循着同一個“計算機”的抽象概念。

這是怎麼樣一個“計算機”呢?這其實就是,計算機祖師爺之一馮·諾依曼(John von Neumann)提出的馮·諾依曼體系結構(Von Neumann architecture),也叫存儲程序計算機。

什麼是存儲程序計算機呢?這裏面其實暗含了兩個概念,一個是“可編程”計算機,一個是“存儲”計算機。

說到“可編程”,估計你會有點懵,你可以先想想,什麼是“不可編程”。計算機是由各種門電路組合而成的,然後通過組裝出一個固定的電路版,來完成一個特定的計算程序。一旦需要修改功能,就要重新組裝電路。這樣的話,計算機就是“不可編程”的,因爲程序在計算機硬件層面是“寫死”的。最常見的就是老式計算器,電路板設好了加減乘除,做不了任何計算邏輯固定之外的事情。
在這裏插入圖片描述

我們再來看“存儲”計算機。這其實是說,程序本身是存儲在計算機的內存裏,可以通過加載不同的程序來解決不同的問題。有“存儲程序計算機”,自然也有不能存儲程序的計算機。典型的就是早年的“Plugboard”這樣的插線板式的計算機。

整個計算機就是一個巨大的插線板,通過在板子上不同的插頭或者接口的位置插入線路,來實現不同的功能。這樣的計算機自然是“可編程”的,但是編寫好的程序不能存儲下來供下一次加載使用,不得不每次要用到和當前不同的“程序”的時候,重新插板子,重新“編程”。

在這裏插入圖片描述
▲著名的Engima Machine就用到了 Plugboard 來進行“編程

”可以看到,無論是“不可編程”還是“不可存儲”,都會讓使用計算機的效率大大下降。而這個對於效率的追求,也就是“存儲程序計算機”的由來。

於是我們的馮祖師爺,基於當時在祕密開發的 EDVAC 寫了一篇報告First Draft of a Report on the EDVAC,描述了他心目中的一臺計算機應該長什麼樣。這篇報告在歷史上有個很特殊的簡稱,叫First Draft,翻譯成中文,其實就是《第一份草案》。這樣,現代計算機的發展就從祖師爺寫的一份草案開始了。

First Draft裏面說了一臺計算機應該有哪些部分組成,我們一起來看看。

首先是一個包含算術邏輯單元(Arithmetic Logic Unit,ALU)和處理器寄存器(Processor Register)的處理器單元(Processing Unit),用來完成各種算術和邏輯運算。因爲它能夠完成各種數據的處理或者計算工作,因此也有人把這個叫作數據通路(Datapath)或者運算器。

然後是一個包含指令寄存器(Instruction Reigster)和程序計數器(Program Counter)的控制器單元(Control Unit/CU),用來控制程序的流程,通常就是不同條件下的分支和跳轉。在現在的計算機裏,上面的算術邏輯單元和這裏的控制器單元,共同組成了我們說的 CPU。

接着是用來存儲數據(Data)和指令(Instruction)的內存。以及更大容量的外部存儲,在過去,可能是磁帶、磁鼓這樣的設備,現在通常就是硬盤。

最後就是各種輸入和輸出設備,以及對應的輸入和輸出機制。我們現在無論是使用什麼樣的計算機,其實都是和輸入輸出設備在打交道。個人電腦的鼠標鍵盤是輸入設備,顯示器是輸出設備。我們用的智能手機,觸摸屏既是輸入設備,又是輸出設備。而跑在各種雲上的服務器,則是通過網絡來進行輸入和輸出。這個時候,網卡既是輸入設備又是輸出設備。

任何一臺計算機的任何一個部件都可以歸到運算器、控制器、存儲器、輸入設備和輸出設備中,而所有的現代計算機也都是基於這個基礎架構來設計開發的。

而所有的計算機程序,也都可以抽象爲從輸入設備讀取輸入信息,通過運算器和控制器來執行存儲在存儲器裏的程序,最終把結果輸出到輸出設備中。而我們所有撰寫的無論高級還是低級語言的程序,也都是基於這樣一個抽象框架來進行運作的。
在這裏插入圖片描述
▲馮·諾依曼體系結構示意圖

總結
可以說,馮·諾依曼體系結構確立了我們現在每天使用的計算機硬件的基礎架構。因此,學習計算機組成原理,其實就是學習和拆解馮·諾依曼體系結構。

具體來說,學習組成原理,其實就是學習控制器、運算器的工作原理,也就是 CPU 是怎麼工作的,以及爲何這樣設計;學習內存的工作原理,從最基本的電路,到上層抽象給到 CPU 乃至應用程序的接口是怎樣的;學習 CPU 是怎麼和輸入設備、輸出設備打交道的。

學習組成原理,就是在理解從控制器、運算器、存儲器、輸入設備以及輸出設備,從電路這樣的硬件,到最終開放給軟件的接口,是怎麼運作的,爲什麼要設計成這樣,以及在軟件開發層面怎麼儘可能用好它。

                                           --END--

關注公衆號百問科技(ID:baiwenkeji)第一時間閱讀嵌入式乾貨。
技術交流加個人威信13266630429,驗證:CSDN博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章