(计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)
文章目錄
- 一:計算機層次結構
- (1)早期的馮諾依曼機
- (2)現代計算機的組織結構
- 二:計算機硬件概述
- (1)存儲器
- A:存儲元、存儲單元、存儲體、存儲字和存儲字長
- B:存儲器的基本結構
- (2)運算器
- A:運算器基本結構
- B:運算器過程偽代碼描述
- (3)控制器
- A:指令
- B:控制器基本結構
- C:控制器過程偽代碼描述
- 精華:計算機的工作過程
一:計算機層次結構
(1)早期的馮諾依曼機
馮諾依曼機特點如下
其中,實線是數據線,虛線是控制線(雙向)。在這種層次結構下,在控制器的指揮下,輸入和輸出設備輸入一些數據給運算器進行各種運算,如果產生中間結果,就會給存儲器,計算完成結果給到輸出設備。可以發現這種層次結構容易受到輸入和輸出設備的牽制,因為他們的速度相較于運算器太慢了,也即是短板效應
(2)現代計算機的組織結構
為了解決I/O設備的速度和CPU速度差異懸殊的問題,現如今的計算機則采用以存儲器為中心的計算機組織結構
這種結果使I/O操作盡可能繞過CPU,直接在I/O設備和存儲器之間完成,以提高系統的整體運行效率
二:計算機硬件概述
(1)存儲器
A:存儲元、存儲單元、存儲體、存儲字和存儲字長
目前我們采用半導體器件來承擔存儲任務,一個半導體觸發器由于有0和1兩個狀態,就可以記憶一個二進制代碼。比如1個數需要用16位二進制代碼表示,那么就需要有16個觸發器來保存這些代碼,這16個觸發器就是一個存儲單元。
串講:主存儲器由許多存儲單元組成,每個存儲單元包含多個存儲元,每個存儲元存儲1位二進制代碼0或1,故存儲單元可存儲一串二進制代碼,稱這串代碼為存儲字,而這串代碼的位數稱為存儲字長,存儲字長一般是一個字節(8位)或字節的偶數倍。同時許多存儲單元共同構成了一個存儲體。
B:存儲器的基本結構
存儲器分為主存(內存)和輔存(外存)。CPU可以直接訪問的是主存,主存主要存放的是程序和數據,是計算機實現“存儲程序”控制的基礎;外存中信息必須加載進主存后,CPU才可以訪問
主存最基本構成如下:存儲體存放二進制信息,MAR存放的是訪存地址(經過地址譯碼后找到所選存儲單元);MBR存儲的是要從存儲器中讀入或寫入的信息。
【考點】
- 數據在存儲體中是按照地址存儲的,每個地址對應一個存儲單元;
- 存儲單元數目=2MAR位數2^{MAR位數}2MAR位數,例如如果MAR為10位,則存儲單元數目為210=10242^{10}=1024210=1024。它用于尋址,其長度和PC長度一致
- MDR的位數表示存儲字長,例如MDR為16,表示存儲字長為16,也表示1個字(word)=16bit
- 注意區分字(word)和字節(Byte),1個字節等于8個bit,而1個字的大小取決于機器
- 1B=1個字節,1b=1個bit
(2)運算器
運算器是計算機的執行部件,用于進行算數運算和邏輯運算
- 算數運算:比如加減乘除
- 邏輯運算:比如與、或、非、異或、比較等等
A:運算器基本結構
其中ALU是運算器造價最為高昂的部分,其實就是一堆復雜的電路
其余三個分別是寄存器,輔助ALU完成計算功能,作用如下了解即可
B:運算器過程偽代碼描述
設M為主存中的某一個存儲單元,(M)表示取M中的數據,->表示將內容送入寄存器
加法實現:假設ACC中已經存在一個數,那么首先取M的內容送入操作數寄存器X,即(M)->X;然后兩者相加重新送入寄存器ACC中,即(ACC)+(M)->(ACC)
乘法實現:假設ACC中已經存在一個數,那么首先取M的內容送入乘商寄存器MQ作為乘數,即(M)->MQ,再取ACC寄存器的內容放入X寄存器作為被乘數,即ACC->X,接著將ACC清零,即0->ACC,然后乘數乘以被乘數,一個送入乘積高位,一個送入乘積低位,即(X)×(MQ)->ACC//MQ
除法實現:假設ACC中已經存在一個數,首先取M的內容送入X作為除數,即(M)->X,ACC中的內容作為被除數,結果一個放入MQ作為整數部分,即(ACC)/(X)->MQ,另一個放入ACC作為余數,即(ACC)%(X)->ACC
(3)控制器
控制器是計算機的指揮中心,由其指揮各部件自動協調地進行工作
A:指令
計算機指令就是指揮機器工作的指示和命令,程序本質就是一系列按照一定順序排列的指令
控制器靠指令指揮機器工作,人們用指令表達自己的意圖,并交給控制器執行
指令=操作碼+地址碼
操作碼就是指示計算機要干什么,地址碼可以理解為干這些事情需要的原材料在哪里,比如主存中就有可能存儲一些我們需要用到的數據,甚至可以是一些IO設備,比如鍵盤的地址
B:控制器基本結構
控制器基本結構如下
- 控制單元(CU):分析指令、發出信號、協調操作
- 指令寄存器(IR):存放當前要執行的指令,注意內容來源于MDR,因為指令和數據一樣也被存在存儲器
- 程序計數器(PC):存放當前要執行的指令地址, 與MAR直接連通,并且可以自動+1
C:控制器過程偽代碼描述
完成一條指令的過程為:取指令(PC)->分析指令(IR)->執行指令(CU)
具體過程:首先取出指令,即(IR),接著獲取指令的操作碼,即OP(IR),然后獲取指令的地址碼,即AD(IR),然后將操作碼送入控制單元分析,即OP(IR)->CU,操作碼表示需要干什么,但是干活需要原材料,所以再把指令的地址碼送入MAR,AD(IR)->MAR,從MAR指示的存儲體取出原材料即可。
結合前面的加法,我們可以寫出完整的加法運算的過程的: 首要取加法指令,而指令存儲在存儲體中,想要取出指令必須要知道的指令的地址,而這個地址就存放在PC中,PC又和MAR直接相連,即(PC)->MAR,于是指令此時被放入了MDR中,那么接著將指令放入IR中,即(MDR)->IR,接著取指令的操作碼送入控制單元,即OP(IR)->CU,然后再把原材料(就是一些操作數)的地址碼送入MAR,即AD(IR)->MAR。接著就可以進行加法操作了,由于上一步已經將操作數的地址碼送入了MDR中,所以現在送入操作數寄存器,即(MDR)->X,然后(ACC)+(X)->ACC,最后PC要自增,即(PC)+1->PC,表示下一條指令
精華:計算機的工作過程
學習到這里,我們就可以從硬件到角度分析一下,看似簡單的C語言代碼,在背后計算機究竟做了多少事情
以下程序非常簡單,聲明了4個變量并賦值,然后在main函數內進行運算
經過編譯器編譯后,這段程序在主存中就是這樣的
- 下半部分是定義的變量,上半部分則是對應于高級語言對應的機器指令
為了方便演示,我們將控制器、運算器和存儲體也放在旁邊
第一組
1:程序開始運行,PC的值為0,保存的是第一條指令的地址。然后將PC的內容,也就是指令的地址送入到MAR中,即(PC)->MAR,MAR=0。也就是說控制器向存儲器指明,我接下來要訪問主存0號地址處的數據,同時告訴存儲器進行讀操作
2+3:主存儲器會根據MAR記錄的地址信息,到存儲體中找出0號地址對應的二進制數據,并將其放入到MDR中,此時MDR中存放了第一條指令。即M(MAR)->MDR,此時MDR=000001 0000000101
4:接著將MDR中的指令放入IR中,于是控制器就存放了當前要執行的指令。即(MDR)->IR,(IR)=000001 0000000101
5:這條指令的前6個比特位是地址碼,會被送入到控制單元CU中,CU分析后,得知這是一條取數命令。即OP(IR)->CU
6:取數指令會將變量a的內容放入寄存器ACC中。但是現在變量a不知道在哪里,所以現在會把指令的地址碼送到MAR當中,即(MAR)=5
7+8:接著主存儲器根據MAR指明的地址,也就是a的地址(5),去存儲體中找出5號地址的數據,并將其放入MDR當中。即M(MAR)->MDR,(MDR)=0000000000000010,也即(MDR)=2
9:接著在控制單元的指揮下,MDR中的數據就被放入到了ACC中。至此第一條指令完成
10:最后PC自增1,進行下一條指令,即(PC)=1
接下來進行下一組操作
1:程序接著運行,PC的值為1,保存的是第二條指令的地址。然后將PC的內容,也就是指令的地址送入到MAR中,即(PC)->MAR,MAR=1。也就是說控制器向存儲器指明,我接下來要訪問主存1號地址處的數據,同時告訴存儲器進行讀操作
2+3:主存儲器會根據MAR記錄的地址信息,到存儲體中找出1號地址對應的二進制數據,并將其放入到MDR中,此時MDR中存放了第二條指令。即M(MAR)->MDR,此時MDR=000100 0000000110
4:接著將MDR中的指令放入IR中,于是控制器就存放了當前要執行的指令。即(MDR)->IR,(IR)=000100 0000000110
5:這條指令的前6個比特位是地址碼,會被送入到控制單元CU中,CU分析后,得知這是一條乘法命令。即OP(IR)->CU
6:接著把指令的地址碼送到MAR當中,即(MAR)=6
7+8:接著主存儲器根據MAR指明的地址,也就是b的地址(6),去存儲體中找出6號地址的數據,并將其放入MDR當中。即M(MAR)->MDR,(MDR)=0000000000000011,也即(MDR)=3
9:由于是乘法,所以控制單元將MDR中的內容送入到乘商寄存器MQ中,即(MDR)->MQ,此時(MQ)=0000000000000011=3
10:先把a的值放入通用寄存器X中,即(ACC)->X,(X)=2
11:CU告訴ALU,讓其進行乘法運算。即(MQ)×(X)->ACC,(ACC)=6。注意如果乘積過大,需要MQ輔助存儲,也就是最上面講到過的(X)×(MQ)->ACC//MQ
接著進行下一組操作,具體過程就不詳細演示了,步驟如下
- 1:PC存儲2號指令的地址,(PC)->MAR,(MAR)=2
- 2+3:M(MAR)->MDR,(MDR)=000011 0000000111
- 4:(MDR)->IR,(IR)=000011 0000000111
- 5:OP(IR)->CU,CU分析操作碼,得知這是加法執行
- 6:Ad(IR)->MAR,將指令的地址碼送入MAR,(MAR)=7
- 7+8:M(MAR)->MDR,(MDR)=00000000 00000001=1
- 9:(MDR)->x,(X)= 00000000 00000001=1
- 10:(ACC)+(X)->ACC,(ACC)->7,由ALU實現加法運算
接著進行下一組操作
- 1:(PC)->MAR,(MAR)=3
- 2+3:M(MAR)->MDR,MDR=000010 0000001000
- 4:(MDR)->IR,(IR)000010 0000001000
- **5:**OP(IR)->CU,CU分析得知,這是存數指令
- 6:AD(IR)->MAR,(MAR)=8
- 7+8:(ACC)->MDR,MDR=7
- 9:(MDR)->地址為8的存儲單元,導致y=7
最后再讀取到停機指令時,計算機通過中斷機制就結束了程序的運行
總結
以上是生活随笔為你收集整理的(计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文字处理的标签及属性
- 下一篇: 关于结对和团队组建