學習筆記 — 計算機組成原理

岩羊 2024-04-06 03:48 22次浏览 0 条评论 taohigo.com

0.前序

計算機文化素養課其一

計算機組成原理,簡稱“計組”

瞭解計算機的底層硬件的邏輯實現,CPU的處理架構,有助於我們更好的使用上層語言進行程序的編寫

這篇文章我會對計組這門課程中的知識體系,其中的一些要點進行一個大致的總結歸納,但我畢竟不是專註於計算機硬件/嵌入式方向的開發者,因此對於一些重點不會過分的深究,本文也難免有一些理解不到位,或者謬誤的地方

歡迎各路神仙留言指正或是賜教一些我不知道的點

若能不吝賜教,鄙人先謝為敬


1.概述

—1.1 計組概述

計算機軟件&硬件層級結構圖:

圖中是計算機的底層硬件到上層軟件開發的層級結構

計算機組成原理是計算機硬件的最上層,計算機系統/體系結構是軟硬件之間的協調交界,計算機操作系統則是計算機軟件的底層

計算機系統結構中的指令集,就需要計算機組成通過硬件進行邏輯實現

從底層硬件到上層軟件,各層都在下層的基礎上進行瞭一定的封裝,並未上層提供瞭可調用的接口來支持上層功能的實現

—1.2 計算機系統概述

計算機即能夠接收/輸入信息,運算處理信息,反饋信息的工具

從微小的傳感器(Sensors),到個人終端/電腦,再到服務器,超級計算機/高性能計算機(HPC),以至物聯網

這些大大小小的計算機系統主要都是由硬件和軟件,兩大部分組成的,計算機發揮其作用的過程,就是硬件對軟件指令的有序執行過程

計算機的底層硬件進行瞭一定的封裝,提供瞭一些接口(API),指令集,對硬件所實現的功能進行公開,從而上層軟件可以通過API編寫需要的邏輯完成一定的功能

軟件又分為底層軟件和上層應用,底層軟件是直接使用硬件接口編寫的,面向硬件進行編程的,管理硬件設備,為上層應用提供開發和運行環境的一類軟件系統。操作系統,遊戲引擎就是所謂的底層軟件

而上層應用是在底層軟件的基礎上,使用高級編程語言編寫,調用/使用底層軟件提供的接口,運行環境,從而完成某種針對性的工作

計算機硬件還可細分為以下層級結構:理論/應用 物理 —> 電子元件 —> 模擬電路 —> 數字電路 —> 數字邏輯 —> 基本部件 —> 計算機硬件

計算機組成原理,主要研究的是數字電子計算機的底層硬件中,通過數字 電路/邏輯 組成計算機的一些基本部件的方法,這些部件完成計算機基本運算的原理,以及各部件之間如何進行有效的組織,協調運行

計算機軟件編碼從上層到下層的層級結構為:高級語言 —> 匯編語言 —> 操作系統 —> 機器語言 —> 微指令系統

在計算機組成原理中會研究基本部件,如何進行有效的組織,並通過微指令系統進行編碼調度,從而完成對機器語言的解釋和執行

計算機的算力的單位是Flops(floating point operations per second),即每秒可執行的浮點運算次數,Flops並不能反應許多對實際輸出運算效率有影響的因素,因而計算機的實際Flops算力與理論峰值會有一段不小的差距

目前世界上算力最強的高性能計算機是我國國防科技大學的天河超級計算機,它的理論峰值算力為 54902.4 TFlops/s ,實際持續運行算力為 33862.7 TFlops/s

—1.3 計算機系統/體系結構 與 計算機組成原理

計算機系統/體系結構是計算機軟件與硬件之間的協調交界,它所研究的是計算機軟硬件的功能分配,軟件與硬件之間的交互接口(API/指令集),是程序員所見所用的計算機概念性結構和功能特性(外特性)

計算機組成原理研究的是如何通過基本部件,實現硬件需要完成的運算/處理功能,如何通過部件的有效組織來體現計算機的外特性

例如,計算機系統/體系結構 規定是否需要由硬件來實現一個加法功能,提供加法指令,加法的具體輸入輸出數據規格應是怎麼樣的,而 計算機組成原理 研究加法指令的實現邏輯是怎樣的,如何通過基本部件去完成這個加法指令的操作

—1.4 計算機的基本組成

——1.4.1 馮·諾伊曼結構

1945年馮·諾伊曼帶領研究小組在已有的ENIAC計算機的基礎上,論述提出瞭一個全新的"存儲程序通用電子計算機方案"–EDVAC(Electronic Discrete variable Automatic Computer)離散變量自動電子計算機

EDVAC認為計算機應包含:運算器,控制器,存儲器,輸入設備,輸出設備五大部分

該方案中提出瞭在計算機存儲器上保存程序指令和數據,在運行時進行讀取指令和數據完成運算,這一體系結構亦被稱之為馮·諾伊曼結構,是所有現代通用電子計算機所遵循的設計模板,按這種結構體系構建出的計算機,稱之為儲存程序計算機

———1.4.1.1 馮·諾伊曼結構的特點

1:馮·諾伊曼結構中計算機由以下五大部分組成

存儲器:存儲程序指令和數據

控制器:控制程序指令的讀取和執行

運算器:按指令對數據進行運算處理

輸入設備:對接用戶,輸入程序指令和數據到存儲器

輸出設備:顯示運算結果

2.程序指令和數據共用同一個存儲器,進行等位存儲,可以按地址尋訪

3.指令和數據均以二進制表示

4.指令由操作碼和地址碼組成,操作碼反應瞭該指令的具體操作,地址碼反映瞭操作需要應用到的操作數據所在的地址

5.對程序指令進行存儲和讀取執行

6.以運算器為運行中心

馮·諾伊曼結構中的特點其實反映瞭當下計算機設計制造領域,計算機的底層硬件實現中的許多問題,例如目前位置我們一直習慣鍵鼠輸入,屏幕顯示輸出,因而輸入輸出設備不做統一,當下的集成電路計算機中的晶體管元依然隻支持穩定的高低電頻,就如最初的機械開關一樣,所以我們仍使用二進制表示指令和數據,未來如果使用某種擁有穩定三態甚至是多態的單元就可能考慮三進制或是其它進制

哈佛結構是計算機體系的另一種組織結構,它與馮·諾伊曼結構最大的區別是區分瞭程序指令和數據的存儲器,分別使用兩套地址/數據總線進行讀寫,改進型哈佛結構則對地址/數據總線進行瞭統一

現代處理器雖然外部依然是馮·諾伊曼結構,但其內部的Cache是按照改進型哈佛結構,分為數據Cache和指令Cache進行組織的

———1.4.1.2 馮·諾依曼結構的硬件框圖

圖中實線表示數據傳遞,虛線表示控制器的運行控制和狀態反饋

如圖以運算器為組織核心

輸入設備將人類表述出的指令/數據,轉化為計算機能夠識別的形式,並通過運算器的處理將指令/數據存放到存儲器中

程序運行時,程序指令會從存儲器中讀取出,傳遞到控制器中,由控制器解析程序指令,並按照順序逐條運行程序指令

程序指令會要求運算器從存儲器中讀取操作數,並完成相應的算術/邏輯運算

最後運算結果通過輸出設備轉換為人能識別的形成進行呈現

馮·諾伊曼結構中運算器作為核心部分,承擔瞭輸入數據的處理存儲,程序執行的運算處理,以及向輸出設備轉換運算結構,工作繁雜,運算器很容易成為結構中的瓶頸

在這結構上,一種以存儲器為核心的改進體系結構如下圖

圖中實現/箭頭表示數據傳輸,虛線表示控制與狀態反饋

通過將存儲器作為核心,輸入輸出設備直接與存儲器進行數據交換,運算器隻讀取需要的數據進行運算處理,從而提高瞭工作效率

——1.4.2 現代計算機的硬件組成

現代通用計算機都是遵循馮·諾伊曼結構的存儲程序計算機,其硬件也是基於五大組成部分進行組織的如下圖所示

上圖中介紹瞭現代計算機硬件的主要組成部分與五大組分之間的聯系

我們可以以層次化的形式對上圖進行再表述,從而形成下圖

的計算機硬件的層次組織

——1.4.3 使用計算機解決問題的過程及硬件實現

我們將結合計算機的底層硬件,來描述使用計算機解決一個實際問題的過程,進而對之前提到的計算機硬件組織進行細化的介紹

首先我們需要考慮的不是如何編寫程序,而是問題是否能夠使用計算機來解決,這涉及到可計算理論,圖靈機停機問題是不可計算問題中的討論焦點,不過些就超出瞭計組的范疇

明確問題的可計算性後,我們需要設計計算模型,並進行編程對計算模型進行表述,從而形成一套指令集,按照指令集中的步驟進行執行就能計算得到問題的答案

有關計算模型的設計,需要結合問題使用一定的算法和數據結構,編程則涉及到高級程序編寫的相關內容,這也都不是計組所關心的問題

我們所編寫的程序會經過編譯,轉碼,轉換為機器語言,也就是上面提到的由二進制操作碼和地址碼組成的程序指令,程序指令和運算需要用到的數據會一並儲存到存儲器中

例如對於計算 ax^{2}+bx+c ,存儲器中的指令&數據就如下圖中的程序清單

可以看到上圖中的程序指令與我們使用高級語言編寫的語句有很大的區別,這樣的程序指令更接近計算機的底層硬件,更強調存儲器,運算器的使用,細化每一步的具體操作與硬件所實現的運算功能相對應

這樣的程序指令通過二進制碼表示,能夠被底層的硬件直接識別和執行,因而我們稱這樣的程序語言為機器語言

從高級程序語言,編譯轉換到機器語言涉及到編譯原理的相關內容,這也超出瞭計組的討論范圍

——1.4.4 存儲器的基本組成

存儲器的主要構成就是一個能夠保存數據的存儲體

存儲體中包含多個存儲單元,每個存儲單元能夠獨立保存一串二進制代碼

存儲單元又由多個存儲元件構成,每個存儲元件保存一個基本進制位上的0/1

存儲單元索保存的這一串二進制代碼數據,稱為存儲字

存儲字具有特定的存儲字長,這個長度是存儲單元保存的二進制代碼的位數,也是存儲單元所包含的存儲元件數量

存儲單元還需要被分配到一個特定的地址,用於按地址尋訪

MAR是存儲器地址寄存器,MAR的長度反應瞭存儲體中存儲單元的數量

MDR是存儲器數據寄存器,MDR就是存儲單元保存數據的地方,MDR的長度就是存儲字長

例如MAR=4位,MDR=8位,那麼存儲體中就有2^4=16個存儲單元,每個存儲單元包含8個存儲元件,保存瞭一串8位的二進制代碼

MAR和MDR是存儲器聯系外部的窗口,或稱接口寄存器

讀取操作時,外部會將地址傳入MAR中,MAR會根據地址在CU的控制下,找到存儲體中對應的存儲單元並將數據拷貝到MDR中(先讀取到MDR),隨後MDR在CU的控制下將數據拷貝到外部需要的位置(再由MDR將數據傳遞給外部)

寫入(存數)操作時,外部會將地址傳入MAR中,MAR會將地址傳遞給存儲體,告知存儲器接下來要往地址對應的存儲單元寫入數據,隨後外部會將數據拷貝至MDR(先傳遞給MDR),再由MDR將數據傳遞給存儲體(再寫入到存儲單元)

——1.4.5 運算器的功能與結構

運算器的功能就是完成一系列需要由硬件實現的算數/邏輯運算,例如加法操作,減法操作,乘法操作

它的核心是一個能夠實現多種算數運算和邏輯運算的組合邏輯電路—ALU(arithmetic and logic unit),又稱為算術邏輯單元

以實現加/減/乘/除 這樣的二元累操作運算的運算器器為例,ALU還需配以三個寄存器用於保存操作數和結果,分別是X,ACC,MQ

X寄存器用於保存輸入的一個操作數,ACC寄存器用於保存一個操作數和運算的結果

MQ寄存器(乘商寄存器)會在乘法和除法操作中參與運算,並輔助ACC進行結果的保存

可以看到加減操作中隻需要X寄存器和ACC參與,保存兩個操作數的輸入,並將結果保存在ACC中

乘法操作,是通過移位和累加實現的,具體算法和我們列豎式乘法類似,由於積的位數會比乘數高,因而需要MQ寄存器輔助保存乘法的低位結果

除法操作,通過移位和減法實現,具體算法與我們列豎式除法類似,通過判斷每位是否夠減,來決定上0或是上1,從而得到商值記錄保存在MQ中,ACC中的被除數會被不斷累減最終變為餘數

———1.4.5.1 加法操作的具體過程

加法操作指令由累加操作碼和被加數的地址M構成

首先在加法操作之前,ACC中已經保存瞭另一個加數,或者說之前運算得到的結果

加法操作其實是一個累加指令,即對ACC中已有的結果,累加地址M處的數據

執行加法操作時,將存儲器地址為M處的數據取出放入X寄存器中,隨後ALU執行加法操作將ACC和X寄存器中的數據累加,結果覆蓋放入ACC中

———1.4.5.2 減法操作的具體過程

減法操作指令由累減操作碼和被減數地址M組成

和加法操作一樣,減法操作也是一個累減指令,即對ACC中已有的結果累減地址M處的數據

———1.4.5.3 乘法操作的具體過程

乘法操作由累乘操作碼和乘數的地址M組成

乘法操作也是一個累乘過程,對ACC中已有的結果,累乘地址M處的數據

乘法操作是通過移位和累加完成的,累加保存結果的操作需要通過ACC實現,真正開始乘法之前,我們會將乘數讀取到MQ中,之後將ACC中的已有結果給到X中,再對ACC清0(累加初始化)

並且由於積的位數會比乘數長,因而我們還需要MQ輔助保存乘積的低位結果

———1.4.5.4 除法操作的具體過程

除法操作由累除操作碼和被除數的地址M組成

除法操作也是一個累除過程,對ACC中已有的結果,累除地址M處的數據

除法操作是通過位移和減法實現的,ACC中已有的結果作為被除數,除數被讀取到X中,此時就需要MQ來保存商,我們會逐位試減決定每位上0或是上1,從而組合出商的結果,ACC中的被除數則會被累減變為餘數

——1.4.6 控制器的功能與結構

控制器的功能就是控制每條程序指令和硬件操作的有序執行,包括對指令進行的讀取,解析,執行,保存結果這一系列過程

完成一條指令,首先需要從存儲器中讀取指令,之後將操作碼部分送達控制單元解析指令,最後由控制單元CU控制相應的部件完成指令

讀取和執行指令需要按一定的順序,這基於指令在儲存器中是按序存儲的,讀取指令時用到的PC寄存器,就是一個保存當前執行指令地址的寄存器

在解析指令的過程中,會根據PC寄存器的地址,將指令的二進制碼讀取到IR寄存器中進行解析,IR寄存器完成讀取後,包含指令的操作碼(OP)和地址碼(AD)

完成指令讀取後PC寄存器的地址值就會自加1(增加1條指令存儲字),從而指向下一條指令的地址

IR寄存器會將指令的操作碼部分傳遞給CU,由CU完成對操作碼的解析,並對相應的部件發出控制信號

——1.4.7 計算機完成一條指令的具體過程

之前講到的,存儲器,運算器,控制器,再加上I/O設備就構成瞭計算機的基本硬件組織,我們將它們一並畫在下圖中

———1.4.7.1 取數指令的執行過程

取數指令是將某個地址下的數據讀取到ACC中

初始狀態下PC中已經保存瞭取數指令的地址

讀取指令&解析:

1.PC將地址傳入MAR中

2.MAR在CU的控制下,將傳入地址傳遞給儲存體,找到指令代碼對應的儲存單元

3.存儲體在CU的控制下,將對應存儲單元中的指令代碼拷貝到MDR中

4.MDR在CU的控制下,將指令代碼傳入到IR中

5.IR將指令的操作碼(OP)傳入到CU中

執行指令:

6.CU解析指令操作碼後,將IR中的地址碼(AD),傳入MAR中

7.MAR在CU的控制下,將傳入地址傳遞給儲存體,找到需要讀取的數據對應的儲存單元

8.存儲體在CU的控制下,將對應存儲單元中的數據拷貝到MDR中

9.MDR在CU的控制下將數據傳入到ACC中

———1.4.7.2 存數指令的執行過程

存數指令是將ACC中的某個數據保存到存儲體中的某個地址下

初始狀態下PC中已經保存瞭存數指令的地址

1-5步驟,讀取&解析指令與2.8.1中取數指令步驟相同

執行指令:

6.CU解析操作碼後,將IR中的地址碼傳入MAR中

7.MAR將存數地址傳入到存儲體,存儲體找到對應的存儲單元,準備向這個單元寫入數據

8.ACC在CU的控制下,將數據傳入到MDR中

9.MDR在CU的控制下,將數據傳給存儲體,存儲體將數據寫入到之前準備好的存儲單元中

———1.4.7.3 程序的執行過程

我們之前編寫的解決 ax^{2}+bx+c 的程序,它在運行時的執行過程如上圖

首先存在一個高級語言,轉化為匯編語言,再轉化為機器語言的過程,我們編寫的程序會轉化為一條條程序指令(由操作碼和地址碼組成的機器語言指令),並逐條按序存入到存儲體中,相關的數據(操作數)也會一並存入存儲體

隨後將程序指令的首地址送入PC中,並啟動程序的執行

最開始執行的是一個取數操作,之後進行逐步的累乘累加操作,得到最終的結果

PC寄存器在每次完成讀取指令代碼到IR寄存器後地址值就會自加1,指向下一條指令的地址,從而程序指令會逐條,有序的執行,直到遇到停機指令,結束程序的運行

—1.5 計算機硬件的技術指標

硬件技術指標用於衡量計算機硬件的性能

這裡我們給出之前提到與五大基本部件相關的計算機硬件系統的技術指標

——1.5.1 機器字長

機器字長指CPU一次能處理的數據位數,與CPU的寄存器位數有關(通常相等),我們常說的32位 64位CPU就是指機器字長

機器字長的大小會決定CPU的在執行某些指令時的效能,例如執行兩個64位數據的加和操作,64位字長的CPU隻需要一次累加操作就可完成,而8位字長的CPU就需要從低位到高位,8次累加操作才能得到答案

——1.5.2 運算速度指標

衡量運算速度有許多不同的衡量方法,因而產生瞭許多與運算速度相關的指標

主頻:CPU時鐘周期的頻率,CPU的指令操作是在時鐘信號控制下,每周期逐步完成的,因而主頻在一定程度上能夠反應CPU的運算速度

核心數:CPU中每個核心都是能夠獨立執行某個程序/線程的處理器,高荷載下每個核心都能盡量保證自己的效率的穩定,但多核的優勢也需要系統/程序進行對應的優化才能發揮作用,執行某些復雜的大型程序時,核心之間也需要相互配合才能完成工作,因而並不是多一個核心速度就能快一倍

主頻與核心數隻能說是硬件為瞭應對工作而進行的準備,因而並不能很好的反映實際的工作效率

吉普森法,是根據實際程序中每條指令的運行時間,相對於每條指令的出現頻率進行加權平均,得到的計算機執行程序指令的平均時間,能夠反應計算機硬件執行指令的快慢

對於每條指令的出現頻率 f_{i} ,有兩種計算方法,一種是根據程序清單的進行計算,一種是根據程序的實際運行進行計算,前者的結果稱之為靜態頻率,後者的結果稱置為動態頻率,相對來說動態頻率比靜態頻率更加準確

CPI是執行一條指令需要的執行周期,同樣是根據指令的出現頻率,得到的加權平均指,能夠反應計算機運行時,在離散的時鐘周期下指令的執行效率

與之相對的,IPC是一個時鐘周期下能夠運行的最大指令數量,由於現代CPU采用超標量體系,可以在一個時鐘周期內載入多條指令同時完成

IPS是每秒能夠完成的指令數量,FLOPS是每秒能完成的的浮點運算次數

執行指令隻是手段,完成實際的工作才是真正目的,相對而言FLOPS較其它有關指令速度的指標能更好的反應計算機硬件的性能

——1.5.3 存儲容量指標

存儲器在計算機中分為主存和輔存

主存容量一般以,存儲單元數量*存儲字長來表示,等於MAR長度*MDR長度,例如:

MAR長10位,MDR長8位,主存容量可表示為 2^{10}*8位=1k*8位

MAR長16位,MDR長32位,主存容量可表示為 2^{16}*32位=16k*32位

另一種主存的表示方法是字節數表示,即計算出存儲單元數量*存儲字長的數值,並用 2^{3}=8位=1b(byte) 表示,例如:

1k*8位=2^{13}=1kb

16k*32位=2^{21}=256kb

輔存容量通常直接用字節數表示,一般容量尺度是 1GB

一些容量單位之間的換算關系:

內存中保存1個基本2進制位的存儲元件,其容量稱之為 1位/1bit

8bit=1byte/1b/1字節

2^{10}b=1024b=1kb/1千字節

2^{10}kb=1024kb=1MB/1兆字節

2^{10}MB=1024MB=1GB

2^{10}GB=1024GB=1TB

但以上的2^10=1024進制隻是理論值,

實際廠傢制造內存/硬盤時常以1000進制換算,並且標註1GB/1TB的內存/硬盤,實際能夠使用的容量也達不到1GB/1TB,往往隻有90%,900MB/900GB左右的實際可用容量


2.計算機的發展及應用

—2.1 第一臺計算機

事實上回答那一臺計算機是世界上第一臺計算機是一個很具有爭議的問題,但通常我們認為

1946年美國賓夕法尼亞大學研制的ENIAC是世界上第一臺通用計算機,ENIAC是之前提到的EDVAC的原型,馮·諾伊曼結構的計算機正是基於這臺計算機的研究成果總結和提出的

ENIAC是由美國國防部委托研制的,完成後被國防部用於彈道計算,盡管ENIAC已經比同時代的計算機運算速度快瞭千倍,但ENIAC沒有存儲器,需要通過人工設置開關,拔插電纜,接線完成編程,這經常需要耗費數天的時間,因此ENIAC實際完成工作的效率並沒有人們想象中的那麼快…

—2.2 計算機發展的驅動力

計算機本質就是用於計算的機器,因而其發展的一大驅動力就是人類,從國防到公司團體再到個人,對實現高速運算需求的不斷擴展

技術的發展也起到瞭很大的作用,主要是硬件(電子技術)的不斷發展,和計算機體系結構理論的發展完善

其中硬件(電子技術)的發展對現代計算機的發展起到瞭決定性的作用,因而計算機的更新換代就是電子技術的更新換代

—2.3 IBM System/360

計算機歷經5代發展,有很多劃時代意義的計算機型,除瞭上面提到的EDVAC,這裡再介紹一下IBM System/360所作的貢獻

IBM System/360是IBM在1964年推出的大、中、小一些列機型的總稱,這一些列計算機是世界上最先出現的,可兼容指令計算機

在System/360之前,各有各的規模,有各自的指令集,一段程序隻能針對某個特定的計算機/機型編寫,每發展出一臺計算機就需要重新編寫程序,重新編寫操作系統

而System/360則構建瞭一套能夠向上向下兼容的系統,具有相同的指令集,相同的數據表示,使用相同的操作系統,可以配置同樣的外設,一段程序可以運行於所有的System/360機型上,並且計算機之間能夠互聯運行

這種兼容,互聯的思想極大的推動瞭計算機領域的發展速度,使計算機發展進入瞭高速時代,許多System/360的核心技術奠定瞭當今數據庫技術、個人計算機風潮、因特網的發展、在線購物和e-business的基礎

System/360另一個最為主要貢獻是在研制過程中,提出瞭計算機體系結構的概念,首次明確定義瞭計算機軟硬件的交界面標準,聯系瞭硬件和軟件的設計者,以此為基礎誕生瞭之後的其它系列機型,兼容機型

—2.4 微處理器與微型計算機的出現與發展

早期的計算機都是占地龐大,大規模電路構成的,擁有同時代極強的運算速度的計算機,事實上這類計算機經過不斷發展,如今仍保持著大占地,大規模電路的特性—也就是如今的超級計算機,並一直作為國傢的國防軍事,科研力量的一部分

但這顯然與正在碼字的我,和看到這篇文章的你,所使用的,面向個人用戶的計算機型

微處理器是指一片高度集成化的電路,包含控制器,運算器,所構成的處理核心,也就是我們平時所說的CPU

微型計算機是指使用維處理作為處理核心,高度集成化的,面向個人用戶,體積小,重量輕,價格低的計算機型,也就是我們平時所說的電腦

CPU最早出現在1971年,由intel生產的4004處理器,4004隻有4位的機器字長,後來經過不斷(6代)的發展,到如今具有64位字長的高性能多核處理器

以intel產品為例的CPU發展型號,其中Pentium(奔騰系列)處理器開啟瞭超標量體系結構的應用

此外1970年出的存儲器芯片,也為微型計算機的發展創造瞭條件,從最初的256位容量,到如今的64MB容量

——2.4.1 摩爾定律

摩爾定律是Interl公司創始人之一Gordon Moore所提出的,CPU發展過程中,新一代的CPU約每隔18-24個月就會發佈,其包含的晶體管數量便會較上一代增加一倍,性能也會提升一倍,從而1美元能夠購買到的算力每18-24個月便會增長一倍

然而隨著晶體管的不斷縮小,集成度不斷增大,集成電路芯片已經逐步頂到瞭電介質傳導速度和量子隧穿效應兩大天花板,導致如今的發展較摩爾定律預測逐步放緩,逐漸達到集成電路這種構造模式的瓶頸,以至於停滯不前

CPU/微處理器芯片正期待著能有更先進的構造技術,打破集成電路的瓶頸,以邁向新世代

—2.5 計算機軟件技術的發展

計算機軟件技術的發展主要是編程語言和系統軟件的發展過程

早期的編程直接使用機器語言,對應硬件指令集進行編程,後來逐漸發展出匯編語言,相比機器語言更容易記憶,之後出現的面向過程,面向對象的高級語言使程序員不必在意底層的硬件實現,可以直接針對問題進行編碼

系統軟件是面向硬件編程,管理硬件資源,解決硬件問題,為上層軟件提供/維護運行環境的一類軟件,操作系統是系統軟件的一類,是軟件的底層。系統軟件的應用使上層軟件開發者,計算機的使用者不必在意底層的硬件工作。語言處理程序(匯編,編譯,解釋程序),服務性程序(裝配,調試,診斷,排錯),數據庫管理系統,網絡軟件也屬於系統軟件

現代軟件的特點是,代碼量大,制作成本昂貴,軟件測試/質量檢測流程復雜。軟件的開發依賴多人協作編碼完成,開發周期長

輸入域測試,代碼覆蓋測試,路徑覆蓋測試,是軟件測試的一些基本策略,但對於現代軟件而言這些測試也需要消耗大量的人力物力,並且往往隻針對某個單元進行全面覆蓋,因而軟件出現漏洞,出現bug,造成損失,隻能盡量規避,無法完全避免


3.系統總線

—3.1 總線的基本概念

馮·諾依曼結構定義瞭計算機組成的五大部分,即使我們將控制器和運算器組合為CPU,將I/O設備統一,依然有三大部分,而現代計算機在此基礎上還有擴展,例如GPU,外部設備等等

我們需要將各個部件聯接起來,進行信息的傳輸交互才能發揮各部分的效能,構成計算機這個整體

兩兩互聯是聯接的基本方式,但現代計算機的部件數量龐大,印刷電路板空間/制作工藝有限,這種方式也不利於部件的擴展,那麼我們不妨將兩兩互聯的線路扭合起來,形成公共的通路,每個部件隻需接入公共通路就能和其它所有部件進行通信

總線(Bus)是計算機各種功能部件之間傳送信息的公共通信幹線,是各個設備共享的傳輸介質,其本質是信號的公共傳輸線

同一條總線上,同一時間隻允許一對設備進行相互通信

—3.2 總線傳輸數據的方式

總線進行數據傳輸有兩種模式,一種是串行傳輸,另一種是並行傳輸

總線中能夠傳輸一位二進制數據的通路稱之為一條信道

串行傳輸隻使用一條信道,逐位發送一串二進制數來傳遞數據

並行傳輸則根據數據/變量的二進制組成,使用多條信道同時發送多位二進制數據

信號的傳輸需要遵循一定的頻率(把電流變化曲線按頻率切割根據高低判斷0/1),在頻率相等的情況下並行傳輸的速度要快於串行傳輸

但並行傳輸存在信號的幹擾(電磁學),尤其是在高頻率/長距離下,過強的信號幹擾會導致無法正確的傳輸0/1數據

並行傳輸在短距下具有速度優勢,串行傳輸在中長距下具有速度優勢

高速數據傳輸技術依托於傳輸頻率上限不斷提高,不受傳輸頻率上限影響的串行傳輸成為高速數據傳輸的主流

而當下計算機中數據傳輸,短距(板內,板間)以並行傳輸為主,長距(外設,計算機之間)以串行傳輸為主

—3.3 總線的分類

首先按照總線的位置可分為片內總線和系統總線

片內總線實現的是單塊芯片內部各部件之間的傳輸通信

而系統總線則是實現芯片與芯片之間,之前提到的計算機各個組成部件之間的信息傳輸

系統總線根據傳輸信息/信號類型的不同,又可分為數據總線,地址總線,控制總線

數據總線通常是雙向的,其信道寬度與機器字長,存儲字長有關(通常小於)

地址總線通常是單向的,其信道寬度與存儲地址長度,I/O地址長度有關(通常相等)

控制總線通常是雙向的,需要傳輸來自CPU的控制信號,來自設備的狀態反饋,總線的使用許可,中斷請求等等信息

片內總線和系統總線都是用於單一計算機/設備內部各部件之間的數據傳輸,而計算機與計算機之間,計算機與其它設備進行跨設備信息傳輸交換的總線,我們稱之為通信總線

—3.4 總線的特性及性能指標

主板就是計算機中最大的總線,它提供瞭各個接口,讓不同的部件能夠連接在一起,從而構成整個計算機

為瞭實現設備通過接口與總線的有效連接,總線就需要擁有一定的機械特性,電氣特性,功能特性,時間特性

機械特性是總線與相應接口在制作時的尺寸構造,針腳排列規范,電氣特性包括信號的傳輸方向,電平的高低范圍,功能特性是總線在傳輸信息/信號類型上的針對性分類,時間特性是總線信號間的時序關系

總線的性能通過以下指標進行描述:

1.總線寬度(傳輸帶寬),等同於總線中數據線/信道的數量,決定瞭總線能夠同時傳輸的數據位數

2.標準傳輸率,以每秒傳輸的最大字節數(MBps)來衡量

3.時鐘特性,數據傳輸的收發是進行同步進行,還是非同步進行(異步為非同步的一種),以及使用怎樣的時鐘頻率進行數據的收發

4.復用性,隻能單一傳輸一種類型的數據(數據,地址)還是能夠傳輸多種類型的數據,例如inter 8086CPU16條地址總線同時復用為數據總線,復用性可以減少芯片的管腳數量,從而有利於芯片的封裝

5.信號線數,各功能類型總線的綜合

6.控制方式,(後面會介紹)(突發,自動,邏輯,仲裁,計數)

7.其它指標,如負載能力等等

—3.5 總線標準

總線標準是各類主板制造商和各類部件/設備制造商之間的協議,保證瞭由不同生產商制作的主板和各個部件能夠被集成在一起工作

總線的標準隨著計算機硬件技術的不斷發展,向著高速度,高擴展的方向不斷更新和完善

圖中給出瞭各種總線標準及相關性能指標

ISA是工業標準數據總線,VESA是通用圖像/視頻傳輸總線

PCI是外設標準總線,它與外部設備構成瞭一種中介緩沖器模式,用於對內外時鐘頻率差異的進行適配,從而外部可以對設備進行任意的添加而不影響CPU的工作,導致計算機性能降低

AGP是interl推出的點對點局部傳輸總線,主要用於連接CPU(控制芯片)和GPU(顯卡)

RS-232和USB是常見的串行接口總線標準

—3.6 總線結構

——3.6.1 單總線結構

最簡單的總線結構就是將所有設備都聯接到一條總線上,這種結構實現簡單,擴展性強,但由於單總線同一時間,隻允許一對設備進行傳輸交互,其它設備需要傳輸時就需要等待正在使用總線的設備釋放總線,這種設計會導致系統中存在總線資源的搶占問題,容易成為系統的瓶頸

例如當I/O設備與主存進行數據交換時,CPU就無法從主存中獲取指令和數據,導致CPU停止運行大大影響效率

——3.6.2 雙總線結構

———3.6.2.1 以CPU和核心的雙總線結構

以CPU為核心的系統結構中,以CPU中心發出兩條總線,一條專用於與I/O設備傳輸數據,一條專用於與主存傳輸數據

通過M總線這條專用總線,解決CPU與主存之間存在繁忙的數據交換,一定程度上提升瞭CPU的運行效率

但這樣的結構依然存在問題,當主存與I/O設備之間需要傳輸數據時,就需要CPU作為中介才能完成數據傳輸,依然會打斷CPU的運行

———3.6.2.2 以存儲器為核心的雙總線結構

現代計算機總線結構的基礎

從主存發出兩條總線,系統總線用於連接主存和其它部件(也包括CPU),存儲總線專用於連接CPU

從而CPU能夠與主存之間通過存儲總線進行高速的信息交換,並通過系統總線完成其它部件之間的信息傳輸

不過這種結構下,主存依然無法同時使用兩條總線進行數據交換,現代的雙口存儲器依然需要使用分時機制來完成分別完成兩條總線上的數據交換

但隨著計算機技術的不斷發展相信有一天,能夠實現主存數據對系統總線和存儲總線的同時傳輸交換

———3.6.2.3 通道連接的主存總線與I/O總線結構

通過通道連接I/O總線,實現I/O設備與CPU和主存之間的通信

通道是一種特殊的,結構簡單的處理器,其程序由操作系統進行編寫,並可獨立運行

有關這種結構,以及通道的詳細知識會在計算機體系結構中討論

——3.6.3 三總線結構

———3.6.3.1 CPU為核心擴展DMA總線

在以CPU為核心雙總線結構的基礎上

擴展出一條DMA(直接存儲器訪問)總線,用於高速I/O設備與主存之間的高速數據交換

———3.6.3.2 Cashe三總線結構

主存的信息交換速度大約每10年才能增加一倍,相比CPU的更新速度,主存速度就成為瞭瓶頸

為此現代計算機體系結構中引入瞭Cashe(高速緩存),作為CPU與主存之間的中介

在CPU運行時,Cashe會預先加載之後可能需要的數據,並與CPU實現高速的數據交換,從而避免主存的速度瓶頸

局部的高速I/O控制設備可以接入到CPU與Cashe之間的局部總線上

系統總線擴展出擴展總線接口和擴展總線,其它設備可連接至擴展總線上,並通過接口與系統總線連接,從而實現外設和內部主存之間的數據交換

但由於其它設備均連接到擴展總線上,外部設備的工做效能可能受到影響

——3.6.4 四總線結構

四總線結構解決瞭Cashe三總線結構中,外部設備均接入擴展總線,運行效率受到影響的問題

由Cashe橋擴展出高速總線,實現高速外設與CPU的數據交換

再由高速總線,引出擴展總線接口和擴展總線,連接其它低速設備

通過分別組織高速和低速設備總線,提示數據傳輸效率

——3.6.5 實際計算機上的總線結構

———3.6.5.1 傳統微型計算機總線結構

當下個人計算機使用的基本總線結構,系統總線連接CPU和主存,擴展出標準總線控制器,I/O總線,連接其它設備

———3.6.5.2 VL-BUS總線結構

系統總線擴展出VL-BUS高速總線,連接高速設備(例如圖形設備)

VL-BUL總線再擴展出總線控制器,ISA/EISA總線連接低速設備

———3.6.5.3 PCI總線結構

與VL-BUS總線結構類似

系統總線擴展出PCI橋和PCI總線連接高速設備,再由PCI總線擴展出標準總線控制器和ISA/EISA總線連接低速設備

PCI總線結構的缺點是當PCI總線上連接設備過多時,總線帶寬不夠,導致總體性能下降

為此引入瞭多層PCI結構,通過橋電路擴展出多級總線

—3.7 總線控制

當總線連接瞭多個設備時,由於同一時間隻允許一對設備使用總線進行相互通信,因而設備在需要通信時會向總線發出占用申請,在得到占用許可後通過總線完成數據交換

因而總線控制需要解決判優控制和通信控制問題

判優控制是當多個設備發送占用申請時,如何合理的分配總線資源

通信控制是使用總線完成通信時,如何保證數據傳輸的速度和準確性

總線傳輸周期如上圖所示分為四個階段

申請分配階段需要通過判優控制來決定設備是否能占用總線進行通信

尋址階段和傳輸階段共同構成通信階段,需要通信控制來保證數據收發,命令發送響應的有序和準確

——3.7.1 判優控制

———3.7.1.1 基本概念

根據能否發出總線占用申請,我們將總線上的設備分為兩類

主設備(模塊)是通信的主導方,能發送總線占用申請,在占用總線後對總線,及從設備的通信具有控制權

從設備(模塊)是通信的被動方,隻能相應主設備的通信請求,完成通信

一些設備既可以作為主設備也可以作為從設備

有的總線隻允許有一個主設備,有的總線允許有多個主設備

———3.7.1.2 判優控制模式

集中式中判優邏輯由一個部件(CPU)完成,分佈式中判優邏輯有多個部件協調處理

集中式又可分為 鏈式查詢,計數器定時查詢,獨立請求 三種

————3.7.1.2.1 鏈式查詢模式

鏈式查詢模式是結構最簡單的一種控制模式,其電路如上圖所示,多用於微型計算機,嵌入式設備中

數據線和地址線完成總線的數據傳輸功能,此外還有3條控制線傳遞控制信息

BR(bus request)總線請求信號線,所有設備都使用這條線路來發出總線占用請求

BS(bus busy)總線忙信號線,用於獲得占用許可的設備向控制部件反饋/設置通信控制信息

BG(bus grant)總線占用許可信號線,用於鏈式查詢發出總線占用信息的設備

首先I/O設備從BR線向控制部件發送占用申請,之後控制部件通過BG線傳輸授權許可,許可信號會鏈式尋訪每個I/O設備,輪詢是否需要占用總線,當遇到需要占用總線的設備時,該設備截取控制權,BG線信息不再向後傳輸,獲得控制權的設備通過BS線反饋通信信息,展開通信

之所以需要鏈式尋訪,是由於控制信號統一由BR線送達控制部件,因而不經過輪詢,控制部件並不知道究竟是那一個I/O設備發出瞭占用申請

鏈式尋訪模式的一大優點是,我們會按照優先級來佈置BG線的尋訪順序,優先級高的I/O設備可以接入靠前的接口,從而在同時發送占用申請時,能夠被先輪詢到,優先截取占用權

此外鏈式尋訪還具有結構簡單,設備易擴展等優點

鏈式尋訪的缺點是,對電路故障敏感,尤其是BG線,一旦線路或是某個接口出現故障,導致信號傳輸中斷,之後的I/O設備占用申請將永無應答

但我們可以通過增加BG/BS信號線條數,來快速實現可靠性的增強

另一大缺點是授權信號鏈式尋訪,當連接設備過多時BG線容易成為瓶頸,降低整體運行效能

————3.7.1.2.2 計數器定時查詢模式

數據線和地址線完成總線的數據傳輸功能

控制線為BS(總線忙),BR(總線占用請求),設備地址信號線

總線控制部件內部有一個計數器,當設備通過BR線向總線控制部件提出占用請求後,計數器下標會進行初始化,隨後按一定方式進行遞推,總線控制部件將根據計數器下標尋訪對應的I/O設備

與鏈式查詢不同,計數器定時查詢模式中尋訪邏輯可編程,我們可以靈活設定計數器的初始值以及遞推方式,例如固定初始化為K來提升K位置及之後的I/O設備優先級,使用上一次相應的值從而循環優先級,或使用一個數組來安排優先級順序

設備地址信號線的寬度要與I/O接口的總數對應,能夠將所有I/O接口用二進制狀態編碼表示

————3.7.1.2.3 獨立請求模式

相比前兩種模式需要按一定順序查找提出占用請求的設備,獨立請求模式為每個I/O接口鏈接瞭專屬的BR和BG線,從而可以進行獨立的占用請求發送和應答

總線控制部件根據BR線的來源就能獲知發送占用請求的設備,優先級的排序通過總線控制部件內部排隊器這一特殊的集中電路完成,其邏輯也可以進行編程控制

——3.7.2 通信控制

獲得占用總線許可後,主從設備將展開通信,在此過程中需要總線通信控制來協調雙方的數據交換過程,保證收發數據的有序準確

———3.7.2.1 四種通信控制模式

同步通信按照CPU時鐘的高低電頻形成的時鐘頻率,作為統一時標,主從設備會根據時鐘頻率來同步每個時段內需要完成的工作

異步通信是采用應答模式,主設備發送請求,從設備發送應答信號,之後進行相應的命令執行和數據傳輸

半同步通信,通過結合同步和異步,解決不同運行速度的設備之間的通信

分離式通信,是最為高效且復雜的模式,能夠充分挖掘系統總線每一瞬間的潛力

———3.7.2.2 同步通信

同步通信的特點是一定要有定寬,定距的周期來控制通信過程,主從設備各種操作的執行

CPU的高低脈沖信號會形成時鐘頻率,主從設備需要按照時鐘頻率,在相應的周期內,相應的時間點之前,完成相應的工作

每個周期始於上一周期末尾的低電平變為高電平時的上升沿,保持一定時間的高電平後,變為低電平(包含一個下降沿)並結束於下一周期開始前的上升沿

同步方式要求主從設備強制按照時標進行操作/運行同步,因而會受到短板效應的影響,在高速設備和低速設備之間的通信中,必須按低速設備的頻率來設計通信流程,高速設備的效能會有所降低

多用於設備之間存取速度相近時的通信控制

以數據輸入(讀命令)的執行為例

首先在T1周期上升沿之前,主設備要通過地址線給出需要讀取數據的地址

在T1周期內,T2周期上升沿之前,主設備需要給出讀命令信號

T2周期,T3周期上升沿之前,從設備需要將要讀取的數據拷貝至接口寄存器並給出數據信號

T3周期,T4周期上升沿之前,主從設備完成數據的發送和接受,同時讀命令信號撤銷

T4周期,T5周期上升沿之前,地址信號被撤銷

寫入操作執行為例

首先在T1周期上升沿之前,主設備要通過地址線給出需要寫入數據的地址

T1周期高電平階段,下降沿之前,從設備準備好寫入,並發送數據信號

T1周期低電平階段,T2周期上升沿之前,主設備接受數據信號給出寫入命令

T2周期與T3周期,需要完成數據向接口寄存器的寫入,以及接口寄存器向寫入地址位置存儲體的數據寫入

T4周期上升沿之前,從設備需要確認寫入完成,主設備撤銷寫入命令信號

T4周期內,T5周期上升沿之前,地址信號撤銷

———3.7.2.3 異步通信

異步通信采用請求&應答模式,不設置統一的時標來同步進程,設備之間獨立進行運作,何時接受到命令/數據,何時執行相應的操作

異步通信需要增設請求線路和應答線路

異步通信可分為不互鎖(左),半互鎖(中),全互鎖(右)三種模式

不互鎖模式是最為簡單的,由主設備發送請求信號,從設備接受到請求信號後進行應答,一段時間後主設備和從設備的請求/應答信號自動撤銷(不管對方是否有接收),不互鎖模式可靠性較低

半互鎖模式在不互鎖的基礎上,要求主設備必須得到應答才撤銷請求信號,但從設備應答信號依然經過一段時間就自行撤銷,半互鎖較為可靠,但由於從設備不檢測主設備是否成功接收應答,可能導致長時間的請求

全互鎖在半互鎖模式基礎上,要求從設備必須確認主設備撤銷請求(主設備收到瞭應答信息),才會撤銷應答信號,全互鎖能夠完成最可靠的異步通信

如果主設備接收數據發現有誤,半互鎖和全互鎖下,主設備可以要求從設備再次發送數據

———3.7.2.4 半同步通信

半同步通信是同步通信和異步通信的結合,因而具有兩者一定程度上的特正

半同步通信中也會使用一定的時鐘頻率來規范信號的收發,主設備使用時鐘前沿發送信號,從設備使用時鐘後沿判斷識別信號,反饋響應

但與同步通信不同的是,半同步通信不要求主從設備必須在某個時鐘周期中共同完成固定的工作,而是按照自己的運行速度,獨立運行

當主設備於T1周期發送完指令後,在T2周期結束前,若從設備無法完成相應的指令,發送反饋信號/提供數據,從設備會在T2周期內發送WAIT信號(以WAIT信號線低電平表示),主設備會在T3周期到來前一刻,檢測WAIT信號,若為低電平則主設備於T3周期等待從設備完成工作

從設備如果未在n個周期內完成工作將一直發送WAIT信號,主設備在此期間可以執行其它任務,直到從設備在n+1個周期結束前完成準備工作取消WATI信號並發送反饋,主設備會在n+2個周期與從設備進行數據的收發,同時撤銷命令信號,n+3個周期主設備撤銷地址信號

———3.7.2.5 分離式通信

主從設備收發數據大致可劃分為三個過程:

1.主設備發送地址和指令信號(使用總線)

2.從設備準備數據(不使用總線)

3.主從設備完成數據收發(使用總線)

過程2,實際主從設備並未使用總線進行數據交換,但在之前的三種通信模式中會保持占用

而分離式通信正是在過程2時,讓主從設備放棄總線占用,讓其它真正需要使用總線收發數據的設備來占用總線,避免占而不用的情況,從而挖掘總線每一瞬間的潛能

當從設備準備好數據來到過程3時,將由從設備發出占用總線請求(變為主設備),占用總線後將數據發送給主設備(變為從設備)

分離式通信的特點是要求所有設備都有權申請總線占用(都能作為主設備),收發數據采用同步模式進行,各個設備準備數據時不占用總線,總線被占用是一定進行數據交換(沒有占而不用的情況)


4.存儲器

存儲器是現代儲存程序計算機中重要的組成部件之一,計算機運行時的程序指令,數據都保存在存儲器中,改進型的馮·諾伊曼結構也是以存儲器為核心

—4.1 存儲器的分類

1.按存儲介質分類

可分為半導體存儲器,磁介質存儲器,磁芯存儲器,光盤存儲器

我們使用的內存條,U盤都屬於半導體存儲器,半導體存儲器又可分為TTL(Transistor-Transistor-Logic)晶體管-晶體管邏輯型存儲器和MOS(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)金屬氧化物半導體效應場管型存儲器

TTL型存儲器集成度低功耗高但速度快,MOS型存儲器集成度高功耗低,現代計算機存儲器主要是MOS型

磁盤,磁帶都屬於磁介質存儲器,在金屬表面塗抹磁層,作為磁載體,利用磁化方向的不同來表示0和1,磁盤表面每一圈可保存0/1的同心圓稱之為磁道,由小到大磁道弧排列形成扇區,以扇區為單位進行數據的存儲

磁介質存儲器在讀取數據時需要通過磁頭移動尋找扇區,並判別磁道不同位置的磁化方向/或施加相應的磁化從而完成數據的讀寫

磁芯存儲器(Core Memory),通過橫縱導線磁環構成,是計算機芯片內部的存儲器,曾為計算機發展做出一定的貢獻

光盤存儲器采用激光和磁光材料,進行數據的存儲和讀寫

半導體存儲器是易失型存儲器(RAM),需要持續供電來維持數據保存,斷電後數據丟失,另外三種存儲器都是非易失型(ROM),能夠在斷電後保存數據

2.按存取方式分類

可分為隨機訪問存儲器和串行訪問存儲器

隨機訪問存儲器存取時間與物理地址無關,隻要給出地址就能進行尋址訪問,例如內存

隨機訪問存儲器又可分為隨機存儲器(程序執行中可讀可寫),和隻讀存儲器(用於存放系統參數等隻讀常量)

而串行范圍存儲器,存取時間與物理地址有關,根據地址的不同存取時間會有所差異,需要針對物理地址位置進行一定的調整才能完成數據的讀寫,例如磁盤,磁帶

串行存儲器又可分為順序存取存儲器,例如磁帶,隻能按物理地址順序讀寫,和直接存取存儲器,例如磁盤,可以在任意指定位置讀寫數據,但磁頭需要根據物理位置進行一定的調整

3.按作用分類

主存儲器可分為RAM和ROM,易失性和非易失性,RAM容量小高速但斷電後數據會丟失(內存),ROM容量大低速能在斷電後保存數據(硬盤)

閃存(Flash Memory)其實屬於EEPROM(電擦除可編程隻讀存儲器),它的讀取速度較ROM更快,可以進行反復擦寫,並且能在斷電後保存數據

我們使用的U盤就屬於閃存,一些高性能的微型計算機可能直接將閃存作為硬盤使用,就是所謂的固態硬盤(SSD)

閃存不能像RAM那樣以字節為單位改寫數據,因而不能取代RAM

閃存也可以用做主輔存儲器之間/寄存器主存之間的速度調劑,即緩存,我們可以在讀取數據後提前預取附近位置的數據到緩存中,如果之後需要讀取的數據恰好已經被保存到瞭緩存中,就可以直接讀取緩存,稱之為“緩存命中”

CPU寄存器和內存之間就會使用Cache高速緩存,一些磁盤也會使用SSD陣列作為緩存提高讀取速度

輔助存儲器是指光盤,磁盤,磁帶一類外部低速存儲器

—4.2 存儲器的層次結構

用戶的需求通常希望存儲器能夠有更低的價格,更大的容量,更快的速度

但實際並沒有任何一種單一的存儲器能夠兼顧這三方面的優勢,因而存儲器形成瞭如上圖所示的層次結構,在不同層次,不同的存儲器之間通過硬件接口,軟件適配,或是軟硬件結合的方式進行連接,從而構成一整套計算機存儲體系,從而整個存儲體系能夠做到三方兼顧

寄存器是直接部署在某一硬件部件內部的容量低,但速度極快的存儲器,是硬件運行時能直接訪問到的,直接進行處理的數據,除瞭CPU,I/O設備中也會佈置寄存器

其中部分寄存器是提供給機器語言程序員進行編碼讀寫控制的,也有部分寄存器運行固定的預制硬件邏輯,對機器語言程序員透明

對於上層的程序員來說,我們不需要考慮存儲體系的層次結構,隻需要將其看作一個整體進行數據的讀寫即可,信息在不同層次間的傳遞,會通過相應的連接方式(軟件,硬件,軟硬結合)自動完成

——4.2.1 緩存—主存—輔存

程序運行時,CPU需要將主存中保存的指令,數據讀如到寄存器中執行

而對於某些大型程序,或是部分大容量的數據,資料,由於主存容量有限,可能還需要主機外部可擴展的輔存來存儲,因而主存—輔存之間會通過硬件接口和軟件適配結合的方式,完成數據的傳遞交換,構成一個存儲整體,稱之為虛擬存儲器

我們在進行程序編寫時,看到的地址是對應虛擬存儲器的虛地址/邏輯地址,在程序實際運行時,會通過一定的機制將虛地址轉為真實的物理地址

對於上層軟件的開發者來說,不需要考慮這個存儲整體的數據傳輸,通常隻需要將它們看作一個整體進行調用即可,一些情況下可以通過編碼控制數據/資源,從輔存到主存,或是在主存內部(RAM ROM之間)的加載和卸載

此外,由於CPU的運行速度提升(摩爾定律)較主存速度快,因而我們會在主存和CPU寄存器之間架設緩存(Cache),來適配兩者的速度差異

緩存通過每次CPU訪問主存後,對訪問附近位置的數據進行預取加載,利用程序的時間局部性和空間局部性,從而在之後CPU需要訪問主存時就可能出現“緩存命中”,從而直接獲取預加載好的緩存數據

緩存—主存,直接使用主存地址,或者說對數據隻記錄主存地址,即便數據被預加載到緩存中,其地址仍表示為主存地址,從而CPU在訪問時按主存地址尋訪即可,若相應主存地址處的數據已經預加載到瞭緩存中,則優先獲取緩存中預加載的數據到CPU寄存器中

但緩存本身並不是沒有地址,在完成緩存—>CPU寄存器的數據讀取過程中,CPU提供的主存地址會轉換為對應的緩存地址,從而讀取緩存中對應的數據

主存儲器地址又稱之為物理地址/實地址

緩存和主存之間通過預制硬件邏輯進行連接,對程序員是完全透明的

—4.3 主存儲器概述

——4.3.1 主存儲器的組成結構

如上圖,我們細化瞭之前給出的主存儲器組成

地址總線連接在MAR上,向MAR單向傳遞地址,地址數據經譯碼器,驅動器轉換,從而在存儲體中選定對應的存儲單元

數據總線連接在MDR上,可進行雙向數據傳到,通過控制電路發送讀/寫信號決定是將MDR中的數據寫入存儲體,還是將存儲體的數據讀出MDR再傳遞到數據總線上


/*

別問,問就是屯瞭很久

已達到文章容量上限瞭

反正再寫不是崩潰就是亂碼瞭

發出來開始屯第二篇

*/