計(jì)算機(jī)組成原理總結(jié)

大四即將畢業(yè)的一個(gè)清晨,無意中刷微信公眾號(hào)偶得一個(gè)關(guān)于計(jì)算機(jī)組成原理質(zhì)量很高的文章,細(xì)細(xì)讀罷,感覺這些知識(shí)都是以前老師在課堂上講過的,但是當(dāng)時(shí)覺得這些知識(shí)很是無聊(我一個(gè)學(xué)軟件的需要了解硬件做什么?),所以考完試就把這些知識(shí)還給老師和課本了。一年之后看來,這些知識(shí)很是受用,遂找同學(xué)借來《計(jì)算機(jī)組成原理》的課本重新拜讀(原諒我已經(jīng)把我的課本當(dāng)3塊錢賣了),總結(jié)如下:

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

1945年,數(shù)學(xué)家馮·諾依曼在研究EDVAC機(jī)時(shí)提出了“存儲(chǔ)程序”的概念。以此概念為基礎(chǔ)的的各類計(jì)算機(jī)統(tǒng)稱為馮·諾依曼計(jì)算機(jī)。他的特點(diǎn)可歸結(jié)如下:

  1. 計(jì)算機(jī)由輸入設(shè)備,存儲(chǔ)器,輸出設(shè)備,控制器和運(yùn)算器構(gòu)成。其中控制器還包含指令寄存器(IR),指令譯碼器(ID)和操作控制器(OC)。
  2. 指令和數(shù)據(jù)以同等的地位放于存儲(chǔ)器內(nèi),并可按地址尋訪。
  3. 指令和數(shù)據(jù)均由二進(jìn)制數(shù)表示。
  4. 指令由操作碼和地址碼組成,操作碼用來表示操作的性質(zhì),地址碼用來表示操作數(shù)在存儲(chǔ)器中的位置。
  5. 指令在存儲(chǔ)器中按順序存放,通常情況下指令是按照順序執(zhí)行的;在特定的條件下,可根據(jù)運(yùn)算結(jié)果或根據(jù)設(shè)定的條件改變執(zhí)行的順序。
圖片來源于百度

整個(gè)計(jì)算機(jī)工作的流程按照如下步驟來進(jìn)行:

  1. 輸入設(shè)備將數(shù)據(jù)和程序輸入到存儲(chǔ)器中,比如將硬盤中的程序加載到內(nèi)存中就屬于這個(gè)過程,但是這個(gè)程序并不是我們平時(shí)編寫的Java之類的代碼,而是經(jīng)過機(jī)器編譯之后的程序,經(jīng)過編譯之后的程序分為指令和數(shù)據(jù)兩部分。
  2. 當(dāng)程序到達(dá)內(nèi)存中之后,指令寄存器的指針就指向要執(zhí)行指令的地址,控制器根據(jù)指令的地址在內(nèi)存中尋址后將指令裝載到指令寄存器中,整個(gè)過程可以看做指令寄存器永遠(yuǎn)保存著下一個(gè)要執(zhí)行的指令。
  3. 指令寄存器位于CPU的內(nèi)部,本質(zhì)上是一個(gè)存儲(chǔ)設(shè)備,當(dāng)指令從內(nèi)存轉(zhuǎn)移到CPU內(nèi)部之后還需要經(jīng)過譯碼器解碼得到操作碼是什么,操作數(shù)在哪。
  4. 之后交由運(yùn)算器根據(jù)操作碼和操作數(shù)進(jìn)行算術(shù)運(yùn)算(加減乘除),邏輯運(yùn)算(比較,位移)。
  5. 運(yùn)算完畢之后通過輸出設(shè)備轉(zhuǎn)換為人們熟悉的信息形式,如打印輸出和顯示器輸出等。

主存儲(chǔ)器

主存儲(chǔ)器簡(jiǎn)稱內(nèi)存,主存。存儲(chǔ)體由許多存儲(chǔ)單元構(gòu)成,每個(gè)存儲(chǔ)單元又包含許多存儲(chǔ)元件,每個(gè)存儲(chǔ)元件都能寄存一位二進(jìn)制代碼“0”或“1”??梢?,一個(gè)存儲(chǔ)單元存儲(chǔ)著一串二進(jìn)制代碼,稱這串二進(jìn)制代碼為一個(gè)存儲(chǔ)字長(zhǎng)。存儲(chǔ)字長(zhǎng)可以為8位,16位或32位等。
一個(gè)存儲(chǔ)字可代表一個(gè)二進(jìn)制數(shù),也可代表一串字符,如存儲(chǔ)字0011011001111101,既可以表示由十六進(jìn)制字符組成的367DH,又可代表16位的二進(jìn)制數(shù),此值對(duì)應(yīng)十進(jìn)制數(shù)13949。
指令和數(shù)據(jù)都存放在內(nèi)存中,通過存儲(chǔ)單元地址號(hào)來反應(yīng),因此取一條指令和取一個(gè)數(shù)據(jù)的操作完全可以視為是相同的操作,可以用一套控制體系來完成兩個(gè)截然不同的操作。
為了能夠?qū)崿F(xiàn)按地址訪問的方式,主存中必須配備兩個(gè)寄存器MAR和MDR。
MAR(Memory Address Rigister)是存儲(chǔ)器地址寄存器,用來存放欲訪問存儲(chǔ)單元的地址。為了能夠表示任意個(gè)一個(gè)存放單元的地址,MAR的位數(shù)就是存放單元的個(gè)數(shù)(如MAR有10位,那么存儲(chǔ)單元就有2^10個(gè),如果一個(gè)存儲(chǔ)字長(zhǎng)為8位,那么該內(nèi)存就有1K大?。?。
MDR(Memory Data Rigister)是存儲(chǔ)器數(shù)據(jù)寄存器,用來存放從存儲(chǔ)單元取出來的數(shù)據(jù)或者正準(zhǔn)備送往存儲(chǔ)單元的數(shù)據(jù)(分別對(duì)應(yīng)讀和寫操作),其位數(shù)與存儲(chǔ)字長(zhǎng)相等。
隨著硬件技術(shù)的發(fā)展,現(xiàn)如今MAR和MDR都已經(jīng)集成到CPU中。如下圖所示:

主存和CPU的關(guān)系

當(dāng)要從存儲(chǔ)器中讀取某一信息字時(shí),首先由CPU將該字的地址送至MAR,再由地址總線送至主存中,然后發(fā)出讀命令。主存接受到讀命令后根據(jù)地址將該存儲(chǔ)單元的內(nèi)容讀出,并經(jīng)過數(shù)據(jù)總線將內(nèi)容送至MDR中,至于讀出的內(nèi)容經(jīng)過MDR送至什么地方將有CPU來決定。
當(dāng)要往存儲(chǔ)器中寫內(nèi)容時(shí),首先由CPU將要寫內(nèi)容的地址經(jīng)過MAR送到地址總線,并將寫的內(nèi)容送到MDR,在CPU發(fā)出寫的命令時(shí),主存根據(jù)地址總線上的信息把數(shù)據(jù)總線上的信息寫入到對(duì)應(yīng)的存儲(chǔ)單元中。

高級(jí)語言編譯過程

高級(jí)語言我們以Java程序?yàn)槔?,從程序員編寫的Java代碼到CPU可以執(zhí)行的指令需要經(jīng)歷如下步驟:


Java代碼到可執(zhí)行指令的過程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容