課程鏈接:
計(jì)算機(jī)組成_北京大學(xué)_中國(guó)大學(xué)MOOC(慕課)
1 - 2 - 102-馮·諾依曼結(jié)構(gòu)的要點(diǎn)(13-'59--)_嗶哩嗶哩_bilibili
現(xiàn)代的計(jì)算機(jī)形態(tài)各異,但究其本質(zhì),幾乎全部采用了馮·諾依曼結(jié)構(gòu)。要了解計(jì)算機(jī),首先要知道什么是馮·諾依曼結(jié)構(gòu)。
1. 馮·諾依曼結(jié)構(gòu)的要點(diǎn)
要說馮·諾依曼結(jié)構(gòu),就得從《關(guān)于EDVAC的報(bào)告草案》說起。這份報(bào)告論述了兩個(gè)重要的思想:1. 存儲(chǔ)程序(而不是開關(guān)連線),2. 二進(jìn)制(而不是十進(jìn)制)。這份報(bào)告還明確了計(jì)算機(jī)的五個(gè)部分:運(yùn)算器,控制器,存儲(chǔ)器,輸入設(shè)備和輸出設(shè)備。
?2. 馮·諾依曼計(jì)算機(jī)的類比
知道了馮·諾依曼計(jì)算機(jī)的基本結(jié)構(gòu)以后,我們可以做一個(gè)有趣的類比。把馮·諾依曼計(jì)算機(jī)看成是一個(gè)餐館。廚房就是CPU,其中大廚就是控制器,而他做菜的工具-鍋就相當(dāng)于運(yùn)算器。倉庫則是存儲(chǔ)器,里面存放了做菜所需的原料和任務(wù)單。這個(gè)類比中沒有包含輸入輸出設(shè)備,這部分我們后面再探討。
注意,如果沒有存儲(chǔ)程序的概念,即任務(wù)單和原料不放在一起,任務(wù)單是由人來下達(dá)的,這樣帶來的問題就是,由于控制器和運(yùn)算器運(yùn)轉(zhuǎn)很快,下達(dá)指令就會(huì)成為瓶頸,影響整體效率。
下面我們把計(jì)算機(jī)執(zhí)行一條指令的過程來類比一下。計(jì)算機(jī)執(zhí)行一條指令主要包含4個(gè)步驟:取指,譯碼,執(zhí)行,回寫。
1. 取指(Fetch):相當(dāng)于廚師知道了下張任務(wù)單的存放位置,然后向倉庫發(fā)起請(qǐng)求:我需要第1格的東西。倉庫收到命令以后取出所需東西,給廚師送回去,這就是第一步-取指。
2. 譯碼(Decode):相當(dāng)于廚師分析任務(wù)單,比如任務(wù)單上寫了炒菜,原料放在倉庫第6格,炒完以后給A號(hào)盤子(通用寄存器)
3. 執(zhí)行(Execute):按照任務(wù)的不同步驟,進(jìn)行執(zhí)行
4. 回寫(Write-back):將炒完的菜盛放到A號(hào)盤子里
3. 計(jì)算機(jī)結(jié)構(gòu)的簡(jiǎn)化模型
通過餐館的例子,我們形象地了解了馮·諾依曼計(jì)算機(jī)的基本結(jié)構(gòu)和指令執(zhí)行過程。通過這個(gè)餐館的模型,我們幾乎可以一一對(duì)應(yīng)地構(gòu)造出一個(gè)簡(jiǎn)化的計(jì)算機(jī)結(jié)構(gòu)模型。首先看到有CPU和存儲(chǔ)器兩大部件,中間通過系統(tǒng)總線(控制總線,地址總線和數(shù)據(jù)總線)相連。
存儲(chǔ)器中包含了很多存儲(chǔ)單元。存儲(chǔ)單元的位寬由設(shè)計(jì)計(jì)算機(jī)時(shí)對(duì)存儲(chǔ)器的編址方法確定,比如如果存儲(chǔ)器按字節(jié)編址,則每個(gè)存儲(chǔ)單元存放8位二進(jìn)制數(shù)。另外,存儲(chǔ)單元的地址是唯一的,不同存儲(chǔ)單元地址互不相同。CPU要想訪問某個(gè)存儲(chǔ)單元,必須通過地址總線給出相應(yīng)的地址,因此如果地址總線寬度為n,則CPU能管理的存儲(chǔ)單元最多為2^n個(gè)。除了存儲(chǔ)單元以后,存儲(chǔ)器里還有MAR(Memory Address Register,存儲(chǔ)器地址寄存器)和MDR(Memory Data Register,存儲(chǔ)器數(shù)據(jù)寄存器),分別用于存放CPU正在讀或?qū)懙拇鎯?chǔ)單元的地址和數(shù)據(jù)。
再來看一下CPU。CPU中的控制器用于控制計(jì)算機(jī)各部件完成取指令,分析指令和執(zhí)行指令等功能。主要組成部分包括IR(Instruction Register,指令寄存器),PC(Program Counter,程序計(jì)數(shù)器),MAR,MDR,指令譯碼部件,控制電路。IR存放“正在執(zhí)行或即將執(zhí)行的指令”,PC存放“下一條指令的存儲(chǔ)單元地址”,具有自動(dòng)增量計(jì)數(shù)功能。MAR在訪存時(shí)用于存放“存儲(chǔ)單元的地址”,和存儲(chǔ)器上的MAR通過地址總線相連。MDR在訪存時(shí)用于存放“對(duì)存儲(chǔ)單元讀或?qū)懙臄?shù)據(jù)”,和存儲(chǔ)器上的MDR通過數(shù)據(jù)總線相連。指令譯碼部件對(duì)IR中的指令進(jìn)行譯碼,以確定IR中存放的是哪一條指令。當(dāng)確定了是哪條指令之后,控制電路就可以產(chǎn)生對(duì)應(yīng)的控制信號(hào),在時(shí)序脈沖的同步下控制各個(gè)部件的動(dòng)作。
CPU中的運(yùn)算器用于算術(shù)運(yùn)算和邏輯運(yùn)算。核心部件ALU用于完成計(jì)算,X,Y,Z是ALU的數(shù)據(jù)暫存器,可視為ALU的一部分,F(xiàn)用于存放運(yùn)算結(jié)果的狀態(tài)(零/正負(fù)/進(jìn)位/溢出)。R0~Rn-1是n個(gè)通用寄存器,用于臨時(shí)存放數(shù)據(jù),數(shù)據(jù)可以來自存儲(chǔ)器,也可以來自于其他通用寄存器或ALU的輸出。不同寄存器之間傳遞數(shù)據(jù)通過CPU的內(nèi)部總線傳遞。
4. 計(jì)算機(jī)執(zhí)行指令的過程
根據(jù)上述的計(jì)算機(jī)簡(jiǎn)化模型,我們?cè)賮碇販匾幌掠?jì)算機(jī)執(zhí)行指令的過程。之前我們提到,計(jì)算機(jī)執(zhí)行一條指令主要包含4個(gè)步驟:取指,譯碼,執(zhí)行,回寫。我們假設(shè)現(xiàn)在執(zhí)行的指令是ADD R0, [6],表示把通用寄存器R0的內(nèi)容和地址為6的存儲(chǔ)單元的內(nèi)容相加,運(yùn)算結(jié)果更新到R0中。
1. 取指(Fetch):控制器發(fā)出控制信號(hào),將PC寄存器中的內(nèi)容通過內(nèi)部總線傳遞到MAR中。MAR將存儲(chǔ)的地址通過地址總線傳到存儲(chǔ)器的MAR中。與此同時(shí),控制電路會(huì)在控制總線上發(fā)出相應(yīng)的控制信號(hào)(READ)到存儲(chǔ)器的控制邏輯單元,代表這次訪問存儲(chǔ)器的操作是要讀數(shù)據(jù)。存儲(chǔ)器通過地址譯碼器查找到對(duì)應(yīng)存儲(chǔ)單元的內(nèi)容,并將此內(nèi)容送到存儲(chǔ)器的MDR。然后存儲(chǔ)器的控制邏輯單元通過控制總線發(fā)送控制信號(hào)(READY)給CPU。同時(shí)MDR的數(shù)據(jù)通過數(shù)據(jù)總線送到CPU的MDR上。然后MDR中的內(nèi)容通過內(nèi)部總線傳遞到IR中。最后PC計(jì)數(shù)器更新為下一條指令所需要訪問的地址。到此,取指階段完成。
2. 譯碼(Decode):當(dāng)前IR寄存器中的指令被送到指令譯碼器,譯出這是一條“ADD R0, [6]”的指令)。這時(shí)發(fā)現(xiàn)其中一個(gè)操作數(shù)[6]還在存儲(chǔ)器中,因此把要取的地址(0110)放到MAR中,隨后的過程類似于第1步,取回來的數(shù)據(jù)放到MDR上。然后由于后面要進(jìn)行ADD的操作,因此把兩個(gè)操作數(shù)放到ALU的暫存器處,即R0的數(shù)據(jù)放到X,MDR的數(shù)據(jù)放到Y(jié),這樣計(jì)算所需的操作數(shù)就準(zhǔn)備好了。
3. 執(zhí)行(Execute):在控制電路的控制下,ALU就會(huì)進(jìn)行運(yùn)算,將X和Y的內(nèi)容執(zhí)行加法,結(jié)果寫到Z。
4. 回寫(Write-back):將運(yùn)算結(jié)果寫入到通用寄存器或存儲(chǔ)器。對(duì)于這條指令是寫到R0上,那么控制電路會(huì)給出控制信號(hào),把Z的結(jié)果通過內(nèi)部總線傳遞到R0上。
?5. 計(jì)算機(jī)的輸入輸出
前面的模型我們只講到了運(yùn)算器,控制器和存儲(chǔ)器,本節(jié)我們引入另外兩個(gè)部分:輸入輸出設(shè)備。畢竟如果沒有輸入輸出設(shè)備,即使我們的cpu再強(qiáng)大,也沒什么用。
現(xiàn)在我們考慮在模型機(jī)上加上輸入輸出設(shè)備,這里我們添加一個(gè)簡(jiǎn)化的輸入輸出設(shè)備——輸入通過手動(dòng)開關(guān)控制,輸出通過小燈泡表示。這就是第一臺(tái)微型計(jì)算機(jī)牛郎星8800所用到的輸入輸出設(shè)備。
現(xiàn)在我們把這樣的輸入輸出設(shè)備接到我們的模型機(jī)上。我們可以設(shè)想這是一個(gè)類似于存儲(chǔ)器結(jié)構(gòu)的輸入輸出芯片,它內(nèi)部有2個(gè)存儲(chǔ)單元,每個(gè)單元都有自己的地址。這里設(shè)定的地址是1110和1111,和存儲(chǔ)器里的地址都不相同,因此可以相互區(qū)分。
那么這個(gè)輸入輸出設(shè)備是如何和計(jì)算機(jī)的其他部分交互的呢?和存儲(chǔ)器類似,也是通過系統(tǒng)總線相連。下面我們通過輸入,輸出兩個(gè)簡(jiǎn)單場(chǎng)景來理解這一過程。
輸入的簡(jiǎn)單場(chǎng)景:CPU通過地址總線發(fā)送要讀取的地址(1111),地址總線上會(huì)有簡(jiǎn)單的分流邏輯,判斷當(dāng)前訪問的對(duì)象是輸入輸出設(shè)備而不是存儲(chǔ)器。同時(shí)控制電路通過控制總線發(fā)送READ信號(hào),表示此次操作為一個(gè)讀操作。然后和之前的指令執(zhí)行過程類似,1111地址的內(nèi)容11100000通過MDR返回給數(shù)據(jù)總線。?
輸出的簡(jiǎn)單場(chǎng)景:CPU通過地址總線發(fā)送要寫入的地址(1110),同時(shí)控制電路通過控制總線發(fā)送WRITE信號(hào),表示此次操作為一個(gè)寫操作。然后11001100通過數(shù)據(jù)總線傳送給輸入輸出設(shè)備的MDR,再寫入到1110存儲(chǔ)單元的位置。?
?6. 馮·諾依曼結(jié)構(gòu)和具體實(shí)現(xiàn)
現(xiàn)在我們對(duì)馮·諾依曼結(jié)構(gòu)已經(jīng)非常熟悉了,包括五個(gè)部分: 運(yùn)算器,控制器,存儲(chǔ)器,輸入設(shè)備和輸出設(shè)備。?
那這樣原理性的框圖和現(xiàn)代計(jì)算機(jī)的具體實(shí)現(xiàn)是如何對(duì)應(yīng)的呢?以個(gè)人計(jì)算機(jī)為例,CPU代表的是運(yùn)算器CA和控制器CC,主存(也常稱為內(nèi)存條)代表存儲(chǔ)器M。那么CPU是如何獲取指令并開始執(zhí)行的呢?這塊主板上采用的是個(gè)人計(jì)算機(jī)上長(zhǎng)期占據(jù)主導(dǎo)地位的南北橋結(jié)構(gòu)。CPU對(duì)外連接的一塊芯片叫做北橋,CPU想要訪問主存,就得通過北橋芯片。但這里我們還要注意,計(jì)算機(jī)剛啟動(dòng)的時(shí)候,主存里面是沒有信息的,因?yàn)楫?dāng)計(jì)算機(jī)斷電之后,主存的信息都會(huì)丟失。那在系統(tǒng)啟動(dòng)之后,CPU從哪里獲取指令呢?我們可以看到北橋下方還有一塊比較大的芯片,它就是南橋,南橋內(nèi)部集成了很多輸入輸出設(shè)備的控制器,其中包括BIOS芯片,這個(gè)芯片存儲(chǔ)容量很小,會(huì)保存一段比較簡(jiǎn)單但是十分重要的程序,包括檢查主板上有哪些設(shè)備(顯卡,鍵盤等),是否工作正常,這顆芯片是一顆只讀存儲(chǔ)器,當(dāng)系統(tǒng)斷電之后,只讀存儲(chǔ)器中保存的信息是不會(huì)丟失的。所以當(dāng)CPU啟動(dòng)后,CPU可以依次通過北橋,南橋來訪問BIOS芯片,從里面取得指令。
?整個(gè)南北橋的結(jié)構(gòu)在現(xiàn)代計(jì)算機(jī)的演進(jìn)中發(fā)生著快速的變化。下圖和上圖是同一個(gè)結(jié)構(gòu),圖中紅色的箭頭代表傳輸壓力大,為了減少性能瓶頸,南北橋的結(jié)構(gòu)發(fā)生了一些演變。
首先,北橋中的主存控制器被移到了CPU芯片當(dāng)中,這樣CPU就能直接訪問主存而不需要通過北橋,這樣可以大大提高數(shù)據(jù)的傳輸率,進(jìn)而提升系統(tǒng)的性能?,F(xiàn)在,顯示的這條通道就成了下一個(gè)要解決的問題。
因此在最新的個(gè)人計(jì)算機(jī)的CPU設(shè)計(jì)中,不僅包括了主存控制器,還包括PCIe控制器,可以直接連接顯卡。這樣北橋中最重要的部件都被集成到了CPU中,這樣北橋就沒有存在的必要了。將北橋中剩余的一些功能和南橋整合到一起之后,所謂南北橋的架構(gòu)其實(shí)已經(jīng)消失了,整個(gè)個(gè)人計(jì)算機(jī)的主板由3片式的架構(gòu)縮減成了2片式。由于沒有了北橋,南橋這個(gè)名字也顯得有些奇怪了,所以它現(xiàn)在往往有一些不同的名字(如PCH)。現(xiàn)在CPU直接連接了主存和顯卡,還與原先的南橋直接相連,這樣就將原先通過主板的復(fù)雜的通路大多移到了芯片的內(nèi)部,而芯片內(nèi)部的數(shù)據(jù)傳輸率是遠(yuǎn)遠(yuǎn)高于主板的,這樣就大大地提升了系統(tǒng)的性能。
那既然從3片縮減成了2片,我們可不可以進(jìn)一步縮減呢?其實(shí)已經(jīng)有人這么做了。這就是系統(tǒng)芯片的概念。
系統(tǒng)芯片(System-on-a-Chip, SoC):將計(jì)算機(jī)或其他電子系統(tǒng)集成為單一芯片的集成電路。
這是一個(gè)硬幣大小的芯片,但在這一顆芯片內(nèi)部集中了馮·諾依曼結(jié)構(gòu)的所有組件。所以我們可以用這樣的芯片制造出非常小巧的計(jì)算機(jī)。這種計(jì)算機(jī)只有手掌大小,但它的功能很完備,并擁有豐富的外部接口,與普通的計(jì)算機(jī)并沒有什么差別。這樣高集成度的優(yōu)勢(shì)就讓系統(tǒng)芯片的技術(shù)廣泛應(yīng)用于智能手機(jī)/平板電腦等移動(dòng)計(jì)算設(shè)備上。文章來源:http://www.zghlxwxcb.cn/news/detail-682136.html
那么原先計(jì)算機(jī)中那么多的芯片和板卡,為什么能夠集中到越來越少的芯片當(dāng)中呢?那就得說到一條著名的定律——摩爾定律:當(dāng)價(jià)格不變時(shí),集成電路上可容納的晶體管數(shù)目,約每隔18個(gè)月便會(huì)增加一倍,性能也將提升一倍。文章來源地址http://www.zghlxwxcb.cn/news/detail-682136.html
到了這里,關(guān)于【計(jì)算機(jī)組成 課程筆記】1.2 馮·諾伊曼結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!