最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

馮·諾依曼體系結(jié)構(gòu):計(jì)算機(jī)組成的金字塔

2019-04-30 14:56 作者:韋東山  | 我要投稿

作者:徐文浩,極客時(shí)間"深入淺出計(jì)算機(jī)組成原理"專欄作者

原文:

https://time.geekbang.org/column/intro/170

特別說明:本文為專欄免費(fèi)試看部分,如有侵權(quán),聯(lián)系后臺可刪

學(xué)習(xí)計(jì)算機(jī)組成原理,到底是在學(xué)些什么呢?這個(gè)事兒,一兩句話還真說不清楚。不過沒關(guān)系,我們先從“裝電腦”這個(gè)看起來沒有什么技術(shù)含量的事情說起,來弄清楚計(jì)算機(jī)到底是由什么組成的。

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

計(jì)算機(jī)的基本硬件組成

早年,要自己組裝一臺計(jì)算機(jī),要先有三大件,CPU、內(nèi)存和主板。

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

為什么說 CPU 是“最重要”的呢?因?yàn)橛?jì)算機(jī)的所有“計(jì)算”都是由 CPU 來進(jìn)行的。自然,CPU 也是整臺計(jì)算機(jī)中造價(jià)最昂貴的部分之一。



第二個(gè)重要的配件,就是內(nèi)存(Memory)。你撰寫的程序、打開的瀏覽器、運(yùn)行的游戲,都要加載到內(nèi)存里才能運(yùn)行。程序讀取的數(shù)據(jù)、計(jì)算得到的結(jié)果,也都要放在內(nèi)存里。內(nèi)存越大,能加載的東西自然也就越多。



存放在內(nèi)存里的程序和數(shù)據(jù),需要被 CPU 讀取,CPU 計(jì)算完之后,還要把數(shù)據(jù)寫回到內(nèi)存。然而 CPU 不能直接插到內(nèi)存上,反之亦然。于是,就帶來了最后一個(gè)大件——主板(Motherboard)。

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

芯片組控制了數(shù)據(jù)傳輸?shù)牧鬓D(zhuǎn),也就是數(shù)據(jù)從哪里到哪里的問題??偩€則是實(shí)際數(shù)據(jù)傳輸?shù)母咚俟?。因此?strong>總線速度(Bus Speed)決定了數(shù)據(jù)能傳輸?shù)枚嗫臁?/p>

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

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

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

說了這么多,其實(shí)你應(yīng)該有感覺了,顯示器、鼠標(biāo)、鍵盤和硬盤這些東西并不是一臺計(jì)算機(jī)必須的部分。你想一想,我們其實(shí)只需要有 I/O 設(shè)備,能讓我們從計(jì)算機(jī)里輸入和輸出信息,是不是就可以了?答案當(dāng)然是肯定的。

你肯定去過網(wǎng)吧吧?不知道你注意到?jīng)]有,很多網(wǎng)吧的計(jì)算機(jī)就沒有硬盤,而是直接通過局域網(wǎng),讀寫遠(yuǎn)程網(wǎng)絡(luò)硬盤里面的數(shù)據(jù)。我們?nèi)粘S玫母黝愒品?wù)器,只要讓計(jì)算機(jī)能通過網(wǎng)絡(luò),SSH 遠(yuǎn)程登陸訪問就好了,因此也沒必要配顯示器、鼠標(biāo)、鍵盤這些東西。這樣不僅能夠節(jié)約成本,還更方便維護(hù)。

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

如果你用計(jì)算機(jī)玩游戲,做圖形渲染或者跑深度學(xué)習(xí)應(yīng)用,你多半就需要買一張單獨(dú)的顯卡,插在主板上。顯卡之所以特殊,是因?yàn)轱@卡里有除了 CPU 之外的另一個(gè)“處理器”,也就是GPU(Graphics Processing Unit,圖形處理器),GPU 一樣可以做各種“計(jì)算”的工作。

鼠標(biāo)、鍵盤以及硬盤,這些都是插在主板上的。作為外部 I/O 設(shè)備,它們是通過主板上的南橋(SouthBridge)芯片組,來控制和 CPU 之間的通信的?!澳蠘颉毙酒拿趾苤庇^,一方面,它在主板上的位置,通常在主板的“南面”。另一方面,它的作用就是作為“橋”,來連接鼠標(biāo)、鍵盤以及硬盤這些外部設(shè)備和 CPU 之間的通信。

有了南橋,自然對應(yīng)著也有“北橋”。是的,以前的主板上通常也有“北橋”芯片,用來作為“橋”,連接 CPU 和內(nèi)存、顯卡之間的通信。不過,隨著時(shí)間的變遷,現(xiàn)在的主板上的“北橋”芯片的工作,已經(jīng)被移到了 CPU 的內(nèi)部,所以你在主板上,已經(jīng)看不到北橋芯片了。

馮·諾依曼體系結(jié)構(gòu)

剛才我們講了一臺計(jì)算機(jī)的硬件組成,這說的是我們平時(shí)用的個(gè)人電腦或者服務(wù)器。那我們平時(shí)最常用的智能手機(jī)的組成,也是這樣嗎?

我們手機(jī)里只有 SD 卡(Secure Digital Memory Card)這樣類似硬盤功能的存儲卡插槽,并沒有內(nèi)存插槽、CPU 插槽這些東西。沒錯(cuò),因?yàn)槭謾C(jī)尺寸的原因,手機(jī)制造商們選擇把 CPU、內(nèi)存、網(wǎng)絡(luò)通信,乃至攝像頭芯片,都封裝到一個(gè)芯片,然后再嵌入到手機(jī)主板上。這種方式叫SoC,也就是 System on a Chip(系統(tǒng)芯片)。

這樣看起來,個(gè)人電腦和智能手機(jī)的硬件組成方式不太一樣??墒?,我們寫智能手機(jī)上的 App,和寫個(gè)人電腦的客戶端應(yīng)用似乎沒有什么差別,都是通過“高級語言”這樣的編程語言撰寫、編譯之后,一樣是把代碼和數(shù)據(jù)加載到內(nèi)存里來執(zhí)行。這是為什么呢?因?yàn)?,無論是個(gè)人電腦、服務(wù)器、智能手機(jī),還是 Raspberry Pi 這樣的微型卡片機(jī),都遵循著同一個(gè)“計(jì)算機(jī)”的抽象概念。

這是怎么樣一個(gè)“計(jì)算機(jī)”呢?這其實(shí)就是,計(jì)算機(jī)祖師爺之一馮·諾依曼(John von Neumann)提出的馮·諾依曼體系結(jié)構(gòu)(Von Neumann architecture),也叫存儲程序計(jì)算機(jī)。

什么是存儲程序計(jì)算機(jī)呢?這里面其實(shí)暗含了兩個(gè)概念,一個(gè)是“可編程”計(jì)算機(jī),一個(gè)是“存儲”計(jì)算機(jī)。

說到“可編程”,估計(jì)你會有點(diǎn)懵,你可以先想想,什么是“不可編程”。計(jì)算機(jī)是由各種門電路組合而成的,然后通過組裝出一個(gè)固定的電路版,來完成一個(gè)特定的計(jì)算程序。一旦需要修改功能,就要重新組裝電路。這樣的話,計(jì)算機(jī)就是“不可編程”的,因?yàn)槌绦蛟谟?jì)算機(jī)硬件層面是“寫死”的。最常見的就是老式計(jì)算器,電路板設(shè)好了加減乘除,做不了任何計(jì)算邏輯固定之外的事情。


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

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


▲著名的Engima Machine就用到了 Plugboard 來進(jìn)行“編程


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

于是我們的馮祖師爺,基于當(dāng)時(shí)在秘密開發(fā)的 EDVAC 寫了一篇報(bào)告First Draft of a Report on the EDVAC,描述了他心目中的一臺計(jì)算機(jī)應(yīng)該長什么樣。這篇報(bào)告在歷史上有個(gè)很特殊的簡稱,叫First Draft,翻譯成中文,其實(shí)就是《第一份草案》。這樣,現(xiàn)代計(jì)算機(jī)的發(fā)展就從祖師爺寫的一份草案開始了。

First Draft里面說了一臺計(jì)算機(jī)應(yīng)該有哪些部分組成,我們一起來看看。

首先是一個(gè)包含算術(shù)邏輯單元(Arithmetic Logic Unit,ALU)和處理器寄存器(Processor Register)的處理器單元(Processing Unit),用來完成各種算術(shù)和邏輯運(yùn)算。因?yàn)樗軌蛲瓿筛鞣N數(shù)據(jù)的處理或者計(jì)算工作,因此也有人把這個(gè)叫作數(shù)據(jù)通路(Datapath)或者運(yùn)算器。

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

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

最后就是各種輸入和輸出設(shè)備,以及對應(yīng)的輸入和輸出機(jī)制。我們現(xiàn)在無論是使用什么樣的計(jì)算機(jī),其實(shí)都是和輸入輸出設(shè)備在打交道。個(gè)人電腦的鼠標(biāo)鍵盤是輸入設(shè)備,顯示器是輸出設(shè)備。我們用的智能手機(jī),觸摸屏既是輸入設(shè)備,又是輸出設(shè)備。而跑在各種云上的服務(wù)器,則是通過網(wǎng)絡(luò)來進(jìn)行輸入和輸出。這個(gè)時(shí)候,網(wǎng)卡既是輸入設(shè)備又是輸出設(shè)備。

任何一臺計(jì)算機(jī)的任何一個(gè)部件都可以歸到運(yùn)算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備中,而所有的現(xiàn)代計(jì)算機(jī)也都是基于這個(gè)基礎(chǔ)架構(gòu)來設(shè)計(jì)開發(fā)的。

而所有的計(jì)算機(jī)程序,也都可以抽象為從輸入設(shè)備讀取輸入信息,通過運(yùn)算器控制器來執(zhí)行存儲在存儲器里的程序,最終把結(jié)果輸出到輸出設(shè)備中。而我們所有撰寫的無論高級還是低級語言的程序,也都是基于這樣一個(gè)抽象框架來進(jìn)行運(yùn)作的。


▲馮·諾依曼體系結(jié)構(gòu)示意圖

總結(jié)

可以說,馮·諾依曼體系結(jié)構(gòu)確立了我們現(xiàn)在每天使用的計(jì)算機(jī)硬件的基礎(chǔ)架構(gòu)。因此,學(xué)習(xí)計(jì)算機(jī)組成原理,其實(shí)就是學(xué)習(xí)和拆解馮·諾依曼體系結(jié)構(gòu)。

具體來說,學(xué)習(xí)組成原理,其實(shí)就是學(xué)習(xí)控制器、運(yùn)算器的工作原理,也就是 CPU 是怎么工作的,以及為何這樣設(shè)計(jì);學(xué)習(xí)內(nèi)存的工作原理,從最基本的電路,到上層抽象給到 CPU 乃至應(yīng)用程序的接口是怎樣的;學(xué)習(xí) CPU 是怎么和輸入設(shè)備、輸出設(shè)備打交道的。

學(xué)習(xí)組成原理,就是在理解從控制器、運(yùn)算器、存儲器、輸入設(shè)備以及輸出設(shè)備,從電路這樣的硬件,到最終開放給軟件的接口,是怎么運(yùn)作的,為什么要設(shè)計(jì)成這樣,以及在軟件開發(fā)層面怎么盡可能用好它。

--END--?

關(guān)注公眾號百問科技(id:baiwenkeji)第一時(shí)間閱讀嵌入式干貨。 技術(shù)交流加個(gè)人威信13266630429,驗(yàn)證:B站



馮·諾依曼體系結(jié)構(gòu):計(jì)算機(jī)組成的金字塔的評論 (共 條)

分享到微博請遵守國家法律
沛县| 涡阳县| 铅山县| 长垣县| 原阳县| 株洲市| 新化县| 富源县| 百色市| 安吉县| 永城市| 重庆市| 常熟市| 扎囊县| 阿拉善左旗| 抚顺市| 特克斯县| 灵山县| 磐安县| 营山县| 寿阳县| 吉安市| 隆化县| 晋中市| 罗甸县| 惠水县| 马公市| 滨海县| 图们市| 贵州省| 图木舒克市| 隆尧县| 乌鲁木齐县| 长沙市| 湘潭市| 葫芦岛市| 博野县| 烟台市| 宁陵县| 南郑县| 洪江市|