1. 程式人生 > >2.4 計算機結構的簡化模型

2.4 計算機結構的簡化模型

14. 簡單 邏輯 我們 例如 任務 邏輯運算 功能 要去

計算機組成

2 計算機基本結構

2.4 計算機結構的簡化模型

技術分享圖片

為了掌握計算機的內部結構,我們要先來構建一個計算機的簡化模型。這個模型能夠體現計算機內部的關鍵之處,又足夠的簡單,便於理解。

技術分享圖片

這個馮諾依曼結構的餐館,我們已經非常熟悉了。我們都可以根據這個餐館的結構幾乎一一對應的來構造出我們的計算機結構的模型。

技術分享圖片

這個計算機結構的簡化模型我們又稱之為模型機。目前包含了CPU和存儲器兩大布局,中間通過系統總線相連。系統總線又被細化為控制總線、地址總線和數據總線三個部分。CPU和存儲器內部各有相應的結構。我們現在就來逐個部件的說明這個模型機是如何構建的。

技術分享圖片

首先來看存儲器。在設計計算機時要確定存儲器的編址方式,如果存儲器按字節編制,那每一個存儲單元就能存放8位的二進制數,而且每個存儲單元的地址是唯一的。CPU要想訪問某個存儲單元,必須要通過地址總線給出相應的地址,因此如果地址總線的寬度為n,則CPU能管理的存儲單元數最多為2的n次方個。假設地址總線的寬度為32位, 那麽CPU能管理的存儲單元數就是2的32次方,也就是4G。CPU發來的地址將會存放在存儲器地址寄存器, 簡稱為MAR。CPU要讀寫的數據則會通過數據總線傳送,數據總線的寬度一般為存儲單元位寬的整數倍,對應的數據則會放在一個被稱為存儲器數據寄存器,簡稱為MDR的結構中。最後控制總線與存儲器當中的控制邏輯相連,用於接收來自於CPU的讀寫信號或者向CPU反饋傳輸已經完成的信號。

技術分享圖片

我們再來看模型機的CPU。首先來看其中的控制器。控制器是用於控制計算機各個部件完成取指令分析指令執行指令等功能。在我們的模型機中主要包含如上的部分,我們逐個來進行分析。

技術分享圖片

  • 首先是指令寄存器,簡稱為IR。用於存放正在執行或者即將執行的指令。這個指令是從存儲器中取來的,暫時存放在這個寄存器裏。
  • 程序計數器PC。用於存放下一條指令的存儲單元地址。我們還記得在餐館那個例子中廚師要去取下一張任務單的時候就會檢查他下一張任務單的位置,那麽其實對應的就是這個寄存器的功能。取完下一條指令之後,這個程序計數器需要自動遞增以指向接下來那一條指令的地址。
  • CPU當中也有訪存相關的寄存器。訪問存儲器的地址,存放在MAR寄存器中;用於寫到存儲器或者從存儲器讀回的數據在MDR寄存器中。

技術分享圖片

指令譯碼部件則是用於對IR,也就是指令寄存器當中的指令進行譯碼,以確定其中存放的是哪一條指令。當確定了是哪條指令之後,控制電路就可以產生對應的控制信號,這些控制信號在持續脈沖的同步下去控制CPU當中各個控制部件的動作。

技術分享圖片

然後我們來看模型機的運算器。運算器顧名思義是用來完成運算的。運算主要可分為算術運算和邏輯運算。常見最基本的算術運算就是加法和減法,稍微復雜一些還有乘法和除法等等。常見的邏輯運算包括非、與、或等等。

技術分享圖片

運算器主要有如下的部件構成。其核心部分是ALU,也就是算數邏輯單元的簡稱。它用於完成算數運算和邏輯運算,我們從圖中可以看出這個ALU有兩個輸入,一個輸出。比如我們要完成一個加法,那麽加法的兩個操作數也就是被加數和加數分別從A端口和B端口輸入,經過ALU計算後,將加法的運算結果送到輸出端口。

為了便於描述,我們將ALU的輸入和輸出分別設置了暫時保存數據用的寄存器,分別記為X,Y和Z,也就說ALU將會對X和Y所保存的數據進行控制器所指定的運算,並將結果輸出到Z。此外,ALU在運算時還會產生相應的狀態,比如這個運算的結果是否產生進位,是否會有溢出等等。這樣的運算結果的狀態會保存在F這個寄存器,F是標誌的簡稱。

那運算器所要運算的數據實際是從存儲器來的,但是不能每一次運算都去存儲器取數,這樣的話效率就太低了,所以有一些常用的數需要提前從存儲器中取出來。那我們就需要在運算器中有臨時存放這些數的部件,這就是通用寄存器。在我們的模型機中設置了n個通用寄存器,其編號從 \(R_0\) 一直到 \(R_{n-1}\)。通用寄存器當中的數據可以來自於存儲器,也可以來自於其他通用寄存器,或者來自於ALU的輸出,也就說我們可以在兩個不同的通用寄存器之間傳遞數據,也可以在ALU和通用寄存器之間傳遞數據。

技術分享圖片

在通用寄存器和ALU,以及剛才提到的控制器當中的若幹寄存器之間要傳遞數據的話,就必須要經過CPU的內部總線。內部總線是用於在CPU內部跟各個部件之間傳遞數據的裝置。我們舉一個例子,例如我們需要將數據從 \(R_0\) 傳送到 X,也就是可能為下一次運算進行準備,那麽數據會通過內部總線從 \(R_0\) 傳到了 X。那麽所謂這個傳送的過程指的是什麽呢?在之後我們具體講電路實現的時候會為大家詳細解釋,在這裏為了便於理解,我先為大家打一個比方,如果我們把內部總線看作是輸水的水管的話,那我們可以把這些通用寄存器等部件看作是蓄水的水池。比如在這個例子中我們要從 \(R_0\) 傳送數據到 X, \(R_0\) 和 X 都可以看做兩個蓄水池,它們分別有自己的進水口和出水口。 \(R_0\) 我們看它有個雙向的箭頭,證明它既可以輸入又可以輸出,所以它既有進水口又有出水口。而 X 就一個單向的箭頭,說明它只有進水口沒有出水口,因為我們知道 X 和 Y 作為ALU的數據輸入的臨時寄存器的,所以它不需要輸出。從 \(R_0\) 傳送數據到 X,我們可以理解成在控制電路的控制下,將 \(R_0\) 的出水管打開,再將 X 的入水管打開,與此同時將其他所有部件的出水管和入水管都關閉,這樣 \(R_0\) 裏面保存的數據就像水流一樣,經過了內部總線會流到X中,那麽經過一段時間之後,X中所保存的數就跟 \(R_0\) 當中的數一樣了。這個我們就可以用來形象的理解,從 \(R_0\) 傳送輸入到X,這就是內部總線的作用。

技術分享圖片

那這樣,我們這個計算機結構的簡化模型就構造完成了。

技術分享圖片

現在我們已經構建完成了這個模型機的核心部分,想要了解這個靜態的結構,一個有效的方法 是觀察其動態的運行過程。下一節我們就來一起分析模型機是如何運行的。

2.4 計算機結構的簡化模型