1.1計算機的發展
計算機系統 = 軟體 + 硬體
軟體可以劃分為系統軟體和應用軟體,系統軟體用來管理整個計算機系統(如:作業系統、資料庫管理系統 、標準程式庫、網路軟體、語言處理程式、服務程式)。應用軟體是按任務需要編制而成的各種程式(比如抖音、迅雷、QQ.)
硬體的發展
第一代:電子管時代
第一臺電子數字計算機,採用 電子管作為邏輯元件(邏輯元件是用於處理電訊號的最小單元)
第二代:電晶體時代
採用電晶體作為邏輯單元,大大減少了體積和功耗。有了作業系統雛形
第三代:中小規模積體電路時代
採用中小規模的積體電路作為邏輯元件。體積減少,功耗降低,可靠性高,開始出現分時作業系統
第四代:大規模、超大規模積體電路時代
採用大規模或超大規模的積體電路作為邏輯元件,開始出現微處理器、微型計算機。
目前計算機發展的趨勢有兩個方面
1.更微型,多用途
2.更巨型,超高速
1.2.1硬體的組成
“儲存程式”:是指將指令以二進位制程式碼的形式事先輸入計算機的主儲存器,然後按其在儲存器中的首地址執行程式的第一條指令,以後就按該程式的規定順序執行其他指令,直至程式執行結束。
馮諾依曼計算機的特點:
1.計算機由五大部件組成
2.指令和資料以同等地位存於儲存器,可按地址尋訪
3.指令和資料用二進位制表示
4.指令由操作碼和地址碼組成
5.儲存程式(會提前把指令和資料儲存到儲存程式中)
6.以運算器為中心
現代的計算機以儲存器為中心
CPU整合了運算器和控制器,可以將結構簡化成:
小結
1.2.2硬體的工作原理
主儲存器
儲存體中按照地址儲存各種資料
MAR負責 存取/寫入 的地址資料,當CPU將地址資料告訴MAR後,儲存器會根據MAR中的地址找到資料 /根據地址將MDR中的資料寫入儲存體。
MDR負責儲存 查詢/存入 的資料,儲存器根據MAR查詢完成後,資料會被放到MDR中CPU可以取走MDR中的資料 / 將MDR中的資料寫入儲存體
儲存體會被分成一個一個的儲存單元,每個儲存單元中存放二進位制程式碼資料稱為儲存字,每個儲存字包含多少二進位制位稱為儲存字長,用於存放二進位制的電子元件稱為儲存元,每個儲存元可以儲存 1bit
儲存字長 = MDR位數
運算器
運算器:用於實現算術運算(如:加減乘除)、邏輯運算(如:與或非)
一個運算器有4個主要組成部分: ACC、 MQ、X、ALU
ACC:累加器用於存放運算元或運算結果
MQ:乘商暫存器,在乘、除運算時,用於存放運算元或運算結果。
X:通用的運算元暫存器,用於存放運算元
ALU:算術邏輯單元,透過內部複雜的電路實現算數運算、邏輯運算
控制器
控制器有三個主要組成部分:CU、IR、PC
CU:控制單元,分析指令,給出控制訊號
IR:指令暫存器,存放當前執行的指令
PC:程式計數器,存放下一條指令地址,有自動加1功能
完成一條指令的過程:
1.根據PC中記錄的指令地址 ,從記憶體中取出指令
2.將取出的指令放入IR中進行指令分析
3.分析完成後CU會控制相關部件完成這個指令的操作
小結
1.2.3計算機系統的層次結構
語言轉換
高階語言 經過編譯程式 可以被翻譯成組合語言 然後經過彙編程式 可以被翻譯成機器語言,機器語言可以直接被識別
高階語言還可以直接透過解釋程式 翻譯成機器語言
編譯程式:將高階語言編寫的源程式全部語句一次性翻譯成機器語言程式,而後再執行機器語言程式(只需翻譯一次)
解釋程式:將源程式的一條語句翻譯成對應於機器語言的語句,並立即執行。緊接著再翻譯下一句(每次執行都要翻譯〉
1.3計算機效能指標
儲存器效能指標
儲存器容量:
MDR位數=儲存字長=每個儲存單元的大小
MAR位數反映儲存單元的個數(最多支援多少個,但實際值可能比他小)
總容量 = 儲存單元個數 × 儲存字長 bit = 儲存單元個數 × 儲存字長 / 8 Byte
CPU效能指標
CPU主頻:
CPU主頻(單位:Hz)指的是CPU數字脈衝訊號震盪頻率,將每個脈衝訊號的時間稱為CPU的時鐘週期(單位:s、ns、us)
CPU主頻 = 1/CPU時鐘週期
CPI:
CPI指的是執行一條指令所需的時鐘週期數(一般指平均值)
執行一條指令的耗時 = CPI * CPU時鐘週期
IPS:
每秒執行多少指令
IPS = 主頻 / CPI
FLOPS:
每秒執行多少次浮點運算
系統整體效能指標
資料通路頻寬:
資料匯流排一次所能並行傳送資訊的位數(各硬體部件透過資料匯流排傳輸資料)
吞吐量:
指系統在單位時間內處理請求的數量。
它取決於資訊能多快地輸入記憶體,CPU能多快地取指令,資料能多快地從記憶體取出或存入,以及所得結果能多快地從記憶體送給一臺外部裝置。這些步驟中的每一步都關係到主存,因此,系統吞吐量主要取決於主存的存取週期。
響應時間:
指從使用者向計算機傳送一個請求,到系統對該請求做出響應並獲得它所需要的結果的等待時間。
通常包括CPU時間(執行一個程式所花費的時間)與等待時間(用於磁碟訪問、儲存器訪問、I/o操作、作業系統開銷等時間)。
小結
2.1.1進位計數制
基數:每個數碼位所用到的不同符號的個數,r進位制的基數就是r
二進位制是最適合計算機進行儲存和處理的計數方式
1:可使用兩個穩定狀態的物理器件表示兩種狀態
2:0,1正好對應邏輯值假、真,方便實現邏輯運算
3:可很方便地使用邏輯閘電路實現算術運算
進位制轉化
其他進位制轉十進位制
r進製表示的數在不同的位置上有不同的位權,只需要將r進位制數的 各個位*位權 然後相加即可得到十進位制數
如:
十進位制轉化成其他進位制
在十進位制轉化為其他進位制的時候,分為整數部分和小數部分 分別轉化
整數部分:除基取餘法,把整數部分的值不停的對 r 進行相除並取餘,直到商為0,然後將餘數從後往前寫出來就是要轉化的數
小數部分:乘基取整法,把小數部分的值不停的 乘 r並記錄結果的整數部分,直到結果小數部分為0,然後將記錄的整數部分順序寫出來就是要轉化的小數部分(有一些小數是無法被精確轉化的)
二進位制、八進位制、十六進位制 之間的轉化
二進位制每一個位能表示2種數字,每三個位能表示8種數字。八進位制每一個位可以表示8個數字,那麼在二進位制轉化為八進位制時,只需要將三個位三個位組合在一起即可。在八進位制轉二進位制時,將每個八進位制位分成三個二進位制位即可。十六進位制轉化類似
真值和機器數
真值:符合人類習慣的數字
機器數:數字實際存到機器裡的形式,正負號需要被“數字化”
小結
2.1.2BCD碼
為了方便的轉化二進位制和十進位制,利用4個二進位制位來儲存一個十進位制數值(4個二進位制位可以表示 16種數,但是十進位制只表示0-9十個,所以會有冗餘)
8421碼
四個二進位制位表示不同的權值,分別為 8、4、2、1
8421碼的加法運算:
如果是手算可以先化成10進位制數相加,然後再將結果化成8421碼
如果是二進位制相加,那麼四位對應相加,然後判斷結果範圍是否在0000 -- 1001內,如果在的化,就是結果,如果不在需要再加一個6(冗餘部分),得到最終結果
餘三碼
在8421碼的基礎上,每個數都加一個3
餘三碼 的四個二進位制位並沒有固定的權值,所以將餘三碼稱為無權碼。
2421碼
2421碼和8421碼類似,只不過是第一個數的權值改成了2
對2421碼來說,0-4這五個數對應的第一個二進位制位都是0,5-9對應的第一個二進位制位是1
2421碼和8421碼一樣,每個二進位制位對應固定的權值,所以被稱為有權碼。
小結
2.1.3無符號數
無符號整數:
1:全部二進位制位都是數值位,沒有符號位,第 i 位的位權是2i-1
2:n bit無符號整數表示範圍0~2n-1,超出則溢位
3:可以表示的最小的數 全0,可以表示的最大的數 全1
加法運算
從最低位開始,按位相加,並往更高位進位
減法運算
1:“被減數”不變,減數”全部位按位取反、末位+1,減法變加法
2:從最低位開始,按位相加,並往更高位進位
如 99 - 9
1:把9的二進位制取反並且末尾加1
2:按位相加
2.1.4有符號整數
原碼
第一個二進位制位表示符號:0正1負;其餘位數表示數值
若機器字長n+1位,帶符號整數的原碼錶示範圍: - (2n-1) ≤ x ≤2n - 1
真值0有兩種形式:+0和-0 ,+0: 00000000 ; -0: 10000000
原碼轉化為補碼
補碼的加法和減法
加法:從最低位開始,按位相加((符號位參與運算),並往更高位進位
減法:將 A補 - B補 轉化成 A補 + (-B)補
B補 轉化為 (-B)補 的方法:全部位取反,末位加1
移碼
將補碼的符號位取反就可以得到移碼
移碼只能用來表示整數,真值0只有一種表示方式
原碼和反碼的合法表示範圍完全相同,都有兩種方法表示真值0
補碼和移碼 的合法表示範圍比原碼多一個負數,只有一種方法表示真值0
2.1.5定點小數
定點 即小數點的位置固定,預設小數點在符號位的後面
定點小數的補碼、反碼的轉換和 有符號整數轉換方法相同
加減運算
加法:從最低位開始,按位相加(符號位參與運算),並往更高位進位
減法:“被減數”不變,“減數”全部位按位取反、末位+1,減法變加法從最低位開始,按位相 加,並往更高位進位
數位擴充套件
當對有符號整數進行數位擴充套件時,需要在符號位的後面進行擴充套件:
而對定點小數進行數位擴充套件時,需要在最後面進行數位擴充套件:
2.2奇偶校驗碼
奇校驗碼:整個校驗碼(有效資訊位和校驗位)中“1”"的個數為奇數。
偶校驗碼:整個校驗碼(有效資訊位和校驗位)中“1"的個數為偶數。
奇偶校驗只能識別出奇數個位發生跳變的情況,當偶數個位發生跳變無法檢測出
2.2.1算數邏輯單元ALU
ALU是運算器中的核心部件,主要功能有:算數運算、邏輯運算、以及移位、求補等輔助功能
與或非邏輯運算
與非 和 或非 的運算規律:
一位全加器 FA
在實現加法運算時,需要輸入兩個加數和一個進位數。需要輸出加法結果和進位結果。
加法結果可以靠異或進行實現,有偶數個1的話結果就是0,有奇數個1的話結果就是1
用 A和B別表示兩個加數,C表示進位,S表示結果
Si = Ai ⊕ Bi ⊕ Ci-1
進位結果:如果兩個加數都是1那麼進位結果是1,如果兩個加數有一個是1並且進位數也是1那麼進位結果是1,其他情況進位結果是0。
Ci = AiBi + (Ai ⊕ Bi)Ci+1
簡化版:
序列加法器
使用一個 一位全加器,將兩個加數逐位輸入到加法器中,並且增加一個進位觸發器儲存進位結果。
如果運算元長n位,加法就要分n次進行,每次產生一位和,並且序列逐位地送回暫存器。
序列進位的並行加法器
將多個 一位全加器 串聯起來,前一位的加法器得到的進位結果會當作下一個加法器的進位數進行運算。
雖然可以將各個位同時輸入到加法器中,但是後一位需要前一位運算完成後得到進位結果才可以進行運算,運算速度和單個的 一位加法器的運算速度和資訊輸送速度有很大關聯。
並行進位加法器
對必須等待上一位的進位結果進行最佳化
將每一位相加的表示式展開
最終可以展開到 C0,其中Ai,Bi的值已知,C0為0,也就是說其實一開始每個位的結果就可以確定,無需等待上一個位的進位結果。
每一步都需要用到 A1B1和A1 ⊕B1的值
第二步以及後面每步都需要用到 A2B2和A2 ⊕B2的值
第三步以及後面每步都需要用到 A3B3和A3 ⊕B3的值
...........................
那麼我們可以剛開始就把需要用到的這些資訊計算出來,並送到需要用到這些數值的加法器中。
優點:不需要等待前面的加法器得到進位結果再進行計算,降低時間
缺點:需要增加硬體消耗,並且位數越多電路越複雜
為了防止電路無限複雜,一般每四位採用並行進位加法
小結
2.2.2 補碼加減運算器
利用加減控制訊號,控制是否取反和末尾加1
2.2.3溢位判斷
原碼的加減運算:
補碼的加減計算:
也有可能產生溢位
溢位判斷
上溢:指結果超出了最大的正數表示範圍
下溢:指結果超出了最小的負數表示範圍
判斷方法:
方法一:一位符號位:
設A的符號為As,B的符號為Bs,運算結果的符號為Ss,則溢位邏輯表示式為
V=0時表示沒有溢位,V=1時表示有溢位
方法二:一位符號位的進位情況
符號位的進位Cs,最高數值位的進位C1,當兩個進位不同時就表示已經溢位
方法三:雙符號位
將正負符號用兩個位表示,00表示正,11表示負,當出現 01或者10的時候表示出現了溢位。01表示上溢,10表示下溢。
符號擴充套件
將短資料擴充套件成長資料。
正數:
原碼、反碼、補碼都相同,只需要往符號位之後擴充套件0就行
負數:
原碼:要往符號位之後擴充套件0
反碼:與原碼相反,所以需要往符號位之後擴充套件1
補碼:往符號位之後擴充套件1
小結
2.2.4加法器的標誌位
OF :溢位標誌,溢位時符號為1,沒有溢位符號為0,OF符號只在有符號數的加減運 算中有意義。
SF :符號標誌位,標誌為1時是負數,標誌為0時是正數,SF符號只在有符號數的 加減運算中有意義。
ZF :零標誌,結果為0是標誌位至1,不為0時至0。
CF :進位/借位標誌,表示最高位的進位/借位情況,發生進位/借位時置1,否則置 0。CF符號只在有符號數的加減運算中有意義。當CF為1時表明無符號數的加減 法產生了溢位。
小結
2.2.5定點數的移位運算
算數移位:
將小數點保持位置不變,數值右移 n位表示原數 / rn;左移n位表示 ,原數 * rn
原碼:
原碼右移:高位補0低位捨棄。若捨棄的位為0相當於÷r,若捨棄位為1會丟失精度
原碼左移:低位補0高位捨棄。若捨棄的位為0相當於*r,若捨棄位為1會出現嚴重誤差
反碼:
正數的移位:左移右移都與原碼相同
負數的移位:在進行左移和右移的時候補的是 1 不是0
補碼:
正數的移位:左移右移都與原碼相同
負數的移位:從右往左數,第一個1以及右邊的部分遵循原碼移位規律,第一個1往左 遵循反碼的移位規則(右移補1,左移補0)
邏輯移位:
無符號數的移位
右移:高位補0,左移:低位補0
迴圈移位:
小結
2.2.6原碼的乘法運算
手算乘法與十進位制乘法相同,用絕對值相乘,符號位單獨用異或處理
機器處理原碼乘法的過程:
X暫存器中存放被乘數
MQ暫存器中存放乘數,在計算過程中逐漸變成儲存 積 的低位
ACC暫存器中存放 積 的高位,開始時ACC的值為0
例:1.1101 * 0.1011 在運算器中的計算過程:
首先取絕對值(符號位單獨異或處理),將1.1101寫為0.1101,然後把兩個數一個放到X中當被乘數,一個放到MQ中當乘數。並且把ACC置為0。
觀察MQ的最低位,如果為1,則ACC+X值; 如果為0,則ACC加0
在ACC完成加法運算後,將ACC和MQ整體邏輯右移,高位補0(邏輯右移)
然後重複判斷MQ的最後一位是0還是1,對ACC進行加法運算,直到MQ中存放的是乘數的符號位
最終得到乘法結果是0.10001111,然後將符號位改為之前異或處理的符號位。得到結果就是1.000111。
2.2.7補碼的乘法運算
補碼與原碼不同的是
1.不需要取絕對值,直接將符號帶入運算器,需要用雙符號位(MQ中不用)
2.在MQ中新增加了一個輔助位
2.比MQ多一次加法,即最後一位的符號位要參與運算
4.補碼的右移是算數右移,如果是正數則補0,負數則補1
5.ACC中加什麼要看輔助位和最低位的差值:輔助位-最低位=1,加[X]補;輔助位-最低 位=0 ,加0;輔助位-最低位 = -1 加 [-x]補 ;
例: -0.1101 * 0.1011
首先將乘數和被乘數分別放入MQ和X,ACC置0,其中X和ACC左邊要加一個符號位,MQ右面要加一個輔助位。
計算輔助位減去MQ的最低位的值,如果為1,則ACC+[x]補 ;如果為0,則ACC+0 ;
如果為-1,則ACC+ [-x]補 ;
在ACC加法完成後,將ACC和MQ統一算數右移,符號位不變,符號位右邊一位如果是正數則補0,如果是負數則補1
與原碼乘法不同的是,MQ中符號位右移到最後一位時,仍然需要再進行一輪加法運算
2.2.8原碼的除法運算
手算除法與十進位制除法相同,用絕對值相除,符號位單獨用異或處理
機器處理原碼除法的過程:
ACC暫存器中存放被除數和餘數
X暫存器中存放 乘數
MQ暫存器中存放 商
恢復餘數法:
運算過程中採用絕對值進行運算,符號位採用異或 單獨處理
開始時,將被除數放入ACC暫存器,除數放入X暫存器,MQ中置0,MQ中的最後一位表示當前 運算的 一位商。
每次運算器進行計算時,會預設 將MQ的最後一位置 1,然後會讓ACC中數值減去X中數值,並將結果儲存到ACC中,如果ACC中儲存的結果是正數,那麼MQ中置 1 是正確的,如果ACC中儲存的結果是負數,那麼MQ中置1就是錯誤的,那麼計算機需要修改MQ中最後一位為0,並且再將ACC中加上除數。
再確定好MQ最後一位值後,將ACC和MQ中的值同一邏輯左移一位
之後重複上面的內容,直到MQ中確定的位數與暫存器位數相同。此時MQ中就是商,ACC的數成 r -n 就可以得到餘數。
再之前恢復餘數法中,當得到的餘數 A小於0時,需要再加上被除數B,然後左移一位得到結果相當於 2A+2B。當在下一步中,需要再減去被除數得到下一步的餘數,相當於2A+B,所以可以簡化步驟,不需要恢復,直接將得到的小於 0的餘數A左移然後加上被除數即可得到下一步餘數。
2.2.9補碼除法運算
與原碼的加減交替法類似,但是
1.補碼的符號位需要參與運算
2.被除數、除數、餘數採用雙符號位
首先根據被除數和除數是否同號判斷被除數需要加還是減除數。如果同號則被除數需要減除數,如果異號則被除數需要加除數,然後得到這一步的餘數。根據餘數和除數的符號,如果同號這一位商1然後餘數需要左移一位並減去除數,如果異號這一位需要商0,餘數需要左移一位閉關加上除數。以上過程一直重複n次,直到最後一位商,恆為1。
2.2.10資料的儲存和排列
大端儲存:資料按照儲存地址遞增的順序從資料的大端到小端進行儲存,大端儲存符合人 類的閱讀習慣。
小端儲存:資料按照儲存地址遞增的順序從資料的小端到大端進行儲存,人類閱讀時需要 將資料倒過來讀取,但是小端儲存符合機器的閱讀習慣
邊界對齊
採用邊界不對齊的方式可以合理的利用儲存空間,但是在訪問某些資料的時候可能會進行兩次訪存。
採用邊界對齊的方式雖然會浪費一些空間,但是每次查詢資料只需要一次方寸,利用空間換時間
2.3.1浮點數的表示
將數值採用階碼和尾數的部分表示,階碼用來表示科學計數法的指數部分,尾數用來表示數值部分。
階碼反應數值的大小,尾數反應數值的精度
階碼反映浮點數的表示範圍及小數點的實際位置;
尾數M的數值部分的位數n反映浮點數的精度。
規格化浮點數:
規定尾數的最高數值位必須是一個有效值。
左規:當浮點數運算的結果為非規格化時要進行規格化處理,將尾數算數左移一位,階碼減1。
右規:當浮點數運算的結果尾數出現溢位(雙符號位為01或10)時,將尾數算數右移一位,階碼加1。
規格化的特點
注意,採用補碼錶示,如果符號位是負,那麼數值位第一位必須是0
由於尾數部分採用補碼錶示,符號位為1那麼數值位的第一位必須是0,所以進行左歸,將數左移3位直到第一位是0,補碼左移需要在右面添0,所以得到左歸後的結果是
1.0100000,左歸完成需要減少階碼,得到階碼為0.011。故規格化得到的答案應該為:
0.011 ; 1.0100000
溢位問題(已經不考了)
正上溢和負上溢是因為表達的數值超出最大的表示範圍。
正下溢和負下溢是因為表示的小數比能表示的最小的範圍還小。
小結
2.3.2IEEE 754
在IEEE 754標準中,階碼是由移碼表示的(這裡的移碼與之前的移碼偏置值不同,之前是2n ,現在是 2n -1)正常計算 移碼 = 真值 + 偏置值
移碼的 全0和全1(-128 和-127)不作為階碼使用
2.3.3浮點數運算
浮點數運算的步驟:
1.對階:將階數小的數向階數大的數對齊(階數小的右移)
2.尾數加減:階數統一之後就可以讓尾數相加減了
3.規格化:保證尾數的第一個數值位是有效位
4.舍入:如果相加減之後尾數長度過長,需要進行舍入
5.溢位判斷:判斷階碼是否溢位
舍入策略:
“0”舍“1”入法:類似於十進位制數運算中的“四捨五入”法,即在尾數右移時,被移去的最高數值位為0,則捨去;被移去的最高數值位為1,則在尾數的末位加1。這樣做可能會使尾數又溢位,此時需再做一次右規。
恆置“1”法:尾數右移時,不論丟掉的最高數值位是“1”還是“0”,都使右移後的尾數末位恆置“1”。這種方法同樣有使尾數變大和變小的兩種可能。
小結
3.1.1儲存系統
儲存器的分類:
1.按照在計算機中的層次(作用)進行分類:主存、輔存、cache
主存:CPU可以直接訪問,容量較小、訪問速度較快、單位價格較高。
輔存:CPU不可以直接訪問、容量極大、存取速度較慢、單位成本低。
cache:CPU可以直接訪問,容量小,價格高、位於主存和CPU之間。
2.按照儲存介質進行分類:磁表面儲存器、半導體儲存器、光儲存器。
3.按照存取方式進行分類:隨機儲存器RAM、順序儲存器、直接存取儲存器、相連儲存器
隨機儲存器:讀寫任何一個儲存單元的時間需要的時間都相同,與儲存單元所在的 位置無關。
順序儲存器:讀寫一個儲存單元所需要的時間取決於儲存單元所在的物理位置。
直接儲存器:既有隨機儲存的特性,又有直接儲存的特性。先按照隨機儲存找到區 域,然後按照順序方式存取。
相聯儲存器:按照儲存內容進行訪問的儲存器。比如快表
4.按照資訊的可更改性進行分類:讀寫儲存器、只讀儲存器
讀寫儲存器:可存可讀,主要用作主存、cache(SRAM)和記憶體條(DRAM)
只讀儲存器:只能讀不能存,常用來製作硬碟
5.按照資訊的可儲存性:易失性儲存器、非易失性儲存器。
易失性儲存器:斷電後儲存資訊就消失的儲存器,比如主存、Cache
非易失性儲存器:斷電後儲存資訊依然儲存,如磁碟、光碟
儲存器的效能指標
主要的效能指標有三個:儲存容量、單位成本、儲存速度。設計儲存器的目標是大容量、低成本、高速度。
儲存容量:即儲存器中可儲存的資訊位元數。儲存容量=儲存字數*字長(如1M *8位)
單位成本:每位價格=總價格/總容量
存取速度:資料傳輸率=資料寬度/儲存週期
存取速度又分為存取時間、存取週期、主存頻寬。
存取時間:指從開始儲存到結束儲存的時間,分為讀取時間和寫入時間
存取週期:指儲存器進行一次完整的讀寫操作所需要的時間、即兩次訪問儲存器操 作的時間間隔,一般大於存取時間(因為包括恢復時間)
主存頻寬:表示每秒從主存進出資訊的最大數量
多層儲存器結構
儲存器結構由上到下價格逐漸降低, 速度越來越慢, 容量越來越大, CPU訪問頻度越來越低
主存 - 輔存:實現了虛擬儲存系統,解決了主存容量不夠的問題。
Cache - 主存:解決了CPU和主存速度不匹配的問題。
小結
3.2.1主儲存器
3.2.2SRAM 和 DRAM
RAM指的是隨機訪問儲存器,DRAM即動態RAM,SRAM即靜態RAM
SRAM
SRAM的儲存元是 雙穩態觸發器,資訊被讀出後不需要再生(非破壞性讀出)SRAM的存取速度快、但是整合度低、功耗大。一般用來製造Cache。
DRAM
DRAM是利用柵極電容上的電荷來儲存資訊的,資訊讀取後需要再生(破壞性讀出)讀取速度較慢、整合度高,容量大、功耗低。一般用來製造主存。
由於DRAM以電荷來儲存資訊,但是電荷會自動消失,所以DRAM必須每隔一段時間進行重新整理,這個重新整理時間稱作重新整理週期。
常用的重新整理方式:集中重新整理、分散重新整理、非同步重新整理
集中重新整理:
在一個重新整理週期內部、利用一段固定的時間一詞對儲存器進行再生、這段時間停止對儲存器的讀寫操作、又稱為 “ 死時間 ” 或者訪存 “ 死區 ”。
集中重新整理的優點:讀寫操作時不受重新整理工作的影響,所以存取速度較高。
集中重新整理的缺點:在 集中重新整理時間(“死區”)時,不能訪問儲存器。
分散重新整理:
把對行的重新整理分散到各個工作週期中。把存取週期兩個部分,前半部分可以正常讀寫時、後半部分用於重新整理某一行、下一週期內後半部分用於重新整理下一行。
優點:沒有死區
缺點:增加了系統的存取週期、降低了整機的速度。
非同步重新整理:
將重新整理週期除以行數、得到兩次重新整理操作時間的間隔t,每隔t時間進行一次重新整理。(好像這樣就不用關心週期了)
非同步重新整理既可以縮短死時間、又可以利用重新整理間隔最大為2ms的特點。可以避免CPU等待時間過長、又可以減少重新整理次數,從整體上提高整機的工作效率。
重新整理需要注意的問題:
1.重新整理對CPU是透明的,不依賴於外部的訪問
2.重新整理的單位是行、因此重新整理緊緊需要行地址
3.重新整理操作僅僅給柵極電容補充電荷、不需要資訊輸出。重新整理時不需要選片,所有晶片同時重新整理
SRAM和DRAM的區別
DRAM恢復時間較長,SRAM恢復時間較短
3.2.3 只讀儲存器ROM
只讀儲存器
ROM中一旦有了資訊就不能輕易改變、即使掉電也不會丟失,他在計算機系統中是隻供讀出的儲存器
ROM優點
1.結構簡單、位密度比可讀寫儲存器高
2.具有非易失性、可靠性高
ROM的分類 :
MROM:由廠家 在生產過程中寫入資訊,之後不可重寫,只能讀出。特點:可靠性高,靈活性差、生產週期長、只適合批次定製。
PROM:使用者可以寫入一次資訊,寫入完成後不可更改。
EPROM:允許使用者寫入資訊,並允許多次擦除,可以多次重寫。分為UVEPROM(紫外線擦除,必須全部擦除)和 EEPROM(電擦除,可以選擇擦除)
快閃記憶體:可以進行多次快速的擦除重寫
固態硬碟:可以進行多次快速的擦除重寫
主機板上有塊BIOS晶片就是ROM,它儲存了自舉裝入程式,負責引導 裝入 作業系統
小結
3.2.4多模組儲存器
常見的多模組儲存器有兩種:多體並行儲存器、單體多字儲存器
多體並行儲存器
每個模組都有相同的容量和存取速度。各模組都有獨立的讀寫控制電路、地址暫存器和資料暫存器。它們既能並行工作,又能交叉工作。
按照編址的不同可以分為高位交叉編址和低位交叉編址
高位交叉編址:理論上多個儲存體可以被並行訪問,但是由於通常會連續訪向,因此實際 效果相當於單純的擴容。
低位交叉編址:依次讀取不同的儲存體,在上一個儲存體恢復時不會影響下一個儲存體的 讀取。
存取週期為T,存取時間為r,為了使訪問不間斷,應保證模組數m≥T/r,當大於T/r時,會有一些儲存體在恢復完成後有閒置時間,故最理想的模組數應該為m==T/r。
單體多字儲存器
將多個模組合併為一個模組,並且擴充套件資料匯流排的寬度,使得每次可以並行的讀取多個字。
小結
3.3.1主存和CPU的連結
連結原理:
1.主存透過資料匯流排、地址匯流排和控制匯流排和CPU相連
2.地址匯流排的位數決定了可定址的最大空間。
MDR儲存的資料透過資料匯流排與主存進行交換
MAR儲存的地址資訊透過地址匯流排傳送到主存
透過控制匯流排對主存進行讀寫操作
儲存器的輸入輸出訊號:
主要線路有地址匯流排、資料匯流排、片選線、讀/寫控制線。
主存容量擴充套件
單個儲存晶片的容量有限,在字數或者字長方面與實際儲存器的要求由差距,需要在字和位兩個方面進行擴充。
通常採用位擴充套件法、字擴充套件法、字位同時擴充套件法來進行容量擴充。
位擴充套件法:
CPU的資料線數與儲存晶片的位數不一定相等,可以透過增加儲存晶片的數量來增加CPU資料線與儲存晶片的連結數,使得記憶體增大。
字擴充套件法:
字擴充套件法是增加儲存器中 字的數量。字擴充套件將晶片的 地址線、資料線、讀寫控制線相應並聯,而由片選訊號來區分各個晶片的地址範圍。
字位同時擴充套件法:
既增加儲存字的數量,又增加儲存字長
程式訪問的區域性性原理
時間區域性性:最近被訪問的資訊很可能還要被訪問
空間侷限性:最近被訪問的資訊的臨近地址的資訊可能被訪問
小結
3.4.1磁碟儲存器
計算機的外儲存器又稱為輔助儲存器,目前主要使用磁表面儲存器,如:磁碟儲存器、磁帶儲存器和磁鼓儲存器。
優點:1.儲存容量大,位價格低;
2.記錄介質可以重複使用;
3.記錄資訊可以長期儲存而不丟失,甚至可以離線存檔;
4.非破壞性讀出,讀出時不需要再生。
缺點:1.存取速度慢;
2.機械結構複雜;
3.對工作環境要求較高;
磁碟裝置的組成
1.儲存區域:
一塊硬碟含有若干個記錄面,每個記錄面劃分為若干條磁軌,而每條磁軌又劃分為若干個扇區(也叫做塊),扇區是磁碟讀寫的最小單位,也就是說磁碟按塊存取。
2.硬碟儲存器
硬碟儲存器由 磁碟驅動器、磁碟控制器、和碟片組成。
磁碟驅動器:核心部件是磁頭和碟片,負責控制磁頭的移動和盤面的轉動。
磁碟控制器:磁碟和主機之間的互動介面
磁碟的效能指標
1.容量:一個磁碟能儲存的位元組總數。格式化的磁碟容量要比非格式化的磁碟容量小。
2.記錄密度:指碟片單位面積記錄的二進位制資訊量。分為道密度、位密度、面密度。
道密度:沿著半徑方向單位長度的磁軌數。
位密度:單位長度的磁軌上記錄的二進位制位數。
面密度:道密度與位密度乘積。
3.平均存取時間:
4.資料傳輸率:磁碟儲存器在單位時間內向主機傳送資料的位元組數,稱為資料傳輸率。
磁碟地址
磁碟工作過程
硬碟的主要操作是定址、讀盤、寫盤。每個操作都對應一個控制字,硬碟工作時,第一步是取控制字,第二步是執行控制字。
硬碟屬於機械式部件,其讀寫操作是序列的,不可能在同一時刻既讀又寫,也不可能在同一時刻讀兩組資料或寫兩組資料。
磁碟陣列
看書
小結
3.4.2固態硬碟
3.5.1 Cache
Cache位於儲存器結構的頂層,通常由SRAM組成。
Cache中的空間和記憶體中一樣,被分成一個一個的塊,Cache與記憶體的資料交換以塊為單位
Cache效能分析
命中率:指CPU想要訪問的資訊已經存在在Cache中的比率。
平均訪問時間:
如果先查詢Cache,找不到後再去記憶體查詢:
時間 = 命中率 * 訪問Cache時間 + (1 - 命中率) * (訪問Cache時間 + 訪問記憶體時間)
如果同時查詢,在Cache中找到後停止在記憶體中查詢:
時間 = 命中率 * 訪問Cache時間 + (1 - 命中率 )* 訪問記憶體時間
小結
3.5.2Cache與主存的對映
全相聯對映:主存內容可以存放在Cache的任意位置
在CPU訪問Cache時,需要挨個檢視Cache中存放的標記與要訪問的記憶體塊 地址是否相同,如果相同且有效位為1則可以訪問Cache,否則訪問記憶體。
優點:Cache利用率高,命中率高。
缺點:查詢速度慢
直接對映:每個主存塊只能放到一個特定的位置: Cache塊號=主存塊號% Cache總塊數
缺點:即使有空閒塊,但是無法讓其他塊填入。空間利用不充分,命中率低。
優點:存放的塊號是模 塊數得到的,存放到同一Cache中的記憶體地址的後幾位 必定都是相同的,可以不用儲存;對於每次訪問只需要對比一次標記就 可以。
在CPU訪問Cache時,先取需要訪問地址的後幾位,確定會存放在Cache中的 哪個塊,然後根據塊號比對此時存放的標記位和要訪問的地址的前面幾位是否 相同。如果相同且有效位為1,則訪問Cache。否則訪問記憶體。
組相聯對映:Cache塊分為若干組,每個主存塊可放到特定分組中的任意一個位置。
組號=主存塊號%分組數
存放在同一組的不同記憶體資料的地址的最後幾位一定是相同的,所以不需要 存放後面幾位。
CPU訪問Cache時,先取要訪問的記憶體地址的後幾位,確定出存放的Cache 的組號,然後在這個組內按個尋找標記位與要訪問的地址的前幾位是否相 同,如果相同且有效位為1那麼訪問Cache,否則訪問記憶體。
優點:上面兩種方法的折中。
在存放資料時需要在Cache中加入 一個有效位和一個標記位。標記位表示此Cache塊存放的主存塊的 塊號是什麼,初始時全為0。有效位表示是否記錄了主存內容,有效位為1表示標記有效,標記為為0表示標記無效。
小結
3.5.3Cache的替換演算法
1.採用全相聯對映
只有在Cache塊全部裝滿才會進行替換
2.採用直接對映
如果對應的位置已經有資料,直接進行替換
3.採用組相聯對映
只有分組滿了才會進行替換,在分組內選擇替換那一塊
全相聯對映的替換演算法
隨機演算法:如果Cache已經滿了,隨機選擇一塊進行替換
隨機演算法並沒有考慮區域性性原則,Cache命中率很低,實際效果很不穩定。
先進先出演算法FIFO:如果Cache已滿,替換最先進入Cache的塊。
先進先出演算法實現簡單,但是仍然沒有考慮區域性性原理,最先被調入Cache的也可能被頻繁訪問。
抖動現象:剛被換出的塊緊接著又被訪問,導致發生頻繁的換入換出現象。
近期最少使用演算法LRU:為每個Cache設定一個計數器,用於記錄沒每個Cache多久沒有 被訪問,在進行替換時替換出最久沒被訪問的一個。
當訪問一個Cache塊時,將此Cache計數器置零,將比這個Cache計數器小的Cache計 數器加一(最大的仍然會是最大的,無需多餘操作)
當有空閒塊時,也需要將沒有命中的塊計數器加一。當沒有空閒塊時,需要將計數器 最大的塊替換,新加入的塊的計數器置零,其餘塊計數器加一。
LRU考慮了區域性性原理,實際執行的效果優秀,Cache的命中率高。
如果被頻繁訪問的主存塊的數量要大於Cache塊的數量那麼會產生抖動現象。
最近不經常使用演算法LFU:為每個Cache設定一個計數器,用於記錄每個Cache被訪問過 幾次,在Cache滿時替換計數器最小的Cache塊。
曾經經常使用的主存塊未來不一定可以用到,沒有很好的遵循區域性性原理,實際執行效果不如LRU。
小結
3.5.4Cache寫策略
寫命中時
即當CPU要寫資料的地址在Cache中可以找到。
寫回法:只修改Cache中的內容,當Cache塊被換出時才寫入主存。需要對每個Cache增加 一個髒位,用來表示有沒有被修改過。
全寫法:同時將需要修改的資料寫入Cache中和記憶體中。一般採用寫緩衝寫入資料,如果 寫入資料很頻繁可能會因為寫緩衝飽和發生而阻塞。
寫不命中時
即要寫入資料的地址在Cache中找不到時。
寫分配法:先將記憶體中的資料調入Cache中,然後對Cache中資料進行寫入/修改。通常搭 配寫回法使用。
非寫分配法:直接寫入記憶體,不用調入Cache,通常搭配全寫法使用。
小結
3.6.1頁式儲存器
頁式儲存器就是將一個程序在邏輯上分為若干個大小相同的頁面,頁面大小與塊大小相同。每個頁面可以離散的放入不同的主存塊中。
為了實現由邏輯地址到實體地址的轉換,作業系統需要為每個程序建立一個頁表。
3.6.2虛擬儲存器
在程序執行時,無需將所有程式碼調入主存,只需要將需要執行的程式碼調入主存。
看作業系統。
4.1.1指令
指令:是指示計算機執行某種操作的命令,是計算機執行的最小功能單位。一臺計算機的所有指令集合稱為這臺計算機的指令系統或者指令集。(一臺計算機只可以執行自己的指令系統的指令,不能執行其他系統的指令)
指令格式
一條指令通常包括操作碼和地址碼兩個部分。
根據地址碼的數目,可以將指令分為 零地址指令、一地址指令、二地址指令.......
零地址指令:只需要給出操作碼,不需要給出地址碼
常見零地址指令:1.不需要運算元的指令:如空操作、停機、關中斷等操作
2.堆疊計算機,兩個運算元隱含存放在棧頂和次棧頂,計算機結果壓回棧頂
一地址指令:需要給出操作碼和一個地址碼的指令
常見一地址指令:1:只需要一個運算元的指令:如取反、加1、取補等等。
指令含義:OP(A1) → A1 ;
需要進行三次訪存:取指令、取資料、將結果儲存
2:需要兩個運算元,但是一個運算元隱含在暫存器中(如ACC)
指令含義:(ACC)OP(A1)→ACC
需要完成兩次訪存:取指令、取資料
二地址指令:需要給出操作碼和兩個地址的指令
常見二地址指令:需要兩個運算元的算數運算、邏輯運算等等。
指令含義 (A1) OP (A2) → A1
需要完成四次訪存:取指令、取資料1、取資料2、存結果
三地址指令:需要給出操作碼和三個地址的指令
常見三地址指令:需要兩個運算元的邏輯運算、算數運算等、並且把結果存放到指定地址
指令含義:(A1) OP (A2) → A3
需要完成四次訪存:取指令、取資料1、取資料2、存結果
四地址指令:需要給出操作碼和四個地址碼的指令
常見四地址指令:需要兩個運算元的邏輯運算、算數運算等、把結果存放到指定地址並且 指向下一條指令。
正常情況下取指令之後PC加1,但是四地址指令可以指向任意指令位置
指令含義:(A1)OP(A2) →A3 , A4=要執行的下一條指令。
按照指令長度對指令分類
按照操作碼長度對指令分類
按照操作型別對指令分類
小結
4.1.2擴充操作碼
對 定長的指令字結構和可變長的操作碼進行擴充套件
如果指令只有十六位,並且每個地址佔4位,那麼三地址指令需要12位表示地址,只剩4位表示操作碼。故指令由 0000 到 1111來表示,這裡將1111保留不做指令,當出現1111時,表明這是一條二地址指令,將五到八位作為指令碼,一地址和零地址指令以此類推。
4.2.1指令定址
在執行完成一條指令之後,如何找到下一條指令。
設定一個程式計數器PC,PC指向的地址就是下一條指令的位置
如果指令是順序執行的,只需要將PC+1或者+指令長度即可
如果指令是跳躍執行的,將PC指指向跳躍指令指向的指令
4.2.1資料定址
資料定址:確定一條指令的地址碼指向的真實地址
為了確定採取哪一種資料定址方式,在指令中加入定址特徵位
直接定址:指令中的形式地址就是實體地址
優點:直接定址的方式簡單,不需要專門計算運算元的地址。只需要訪存兩次
缺點:當運算元的地址改變時,指令失效
間接定址:指令的地址指向的是 存放資料地址的地址
需要訪存三次,需要先取指令,然後訪問存放資料地址的地址,然後訪問資料 地址
優點:擴大了定址範圍(指令中可能用16位表示資料地址的地址,表示的地址 可能用32位表示資料地址)便於編制程式(方便子程式的返回)
缺點:需要訪存三次,需要先取指令,然後訪問存放資料地址的地址,然後訪 問資料地址
暫存器定址:指令中給出的地址並非是記憶體地址,而是暫存器編號,資料存放在暫存器中
優點:取完指令後無需訪問記憶體,之訪問暫存器;暫存器數量少,可以用更 少的位表示暫存器編號,減少指令長度增加執行速度。
缺點:暫存器數量優先且造價較貴。
暫存器間接定址:指令中給出的暫存器編號,但暫存器中實際儲存的是資料的地址
只需要訪問兩次記憶體:取指令、取資料。比一般的間接定址要快。
隱含定址:不是明顯的給出運算元的地址,而是指令中隱含著運算元的地址(如兩個數相 加只給出一個數的地址,另一個數隱含在ACC暫存器中)
優點:有利於縮短指令字長
缺點:需要增加儲存運算元或者隱含地址的硬體
立即定址:指令的地址碼部分 就是運算元本身,一般採用補碼形式儲存(#後面跟數一般 就表示立即數)
優點:只需要取指令訪問一次記憶體,指令執行時間最短
缺點:地址碼的位數限制立即數的範圍
基址定址:指令存放的地址碼是地址偏移量,將基址暫存器中的地址加上地址碼內容可以 得到有效地址。(基址暫存器存放的是程式的起始地址,只可以由作業系統或 管理程式確定,無法由使用者確定)
優點:可以擴大定址範圍
變址定址:指令存放的地址碼視為基地址,需要增加一個變址暫存器IX存放偏移量,資料 地址=基地址 + 變址暫存器中的偏移量。
編址暫存器中的值是面向使用者的,使用者可以容易的修改暫存器內容,適合編制 迴圈程式。
複合定址:將基址定址和變址定址結合起來,即使用基址暫存器,也使用變址暫存器。
相對定址:將程式計數器PC的內容加上指令格式中地址碼錶示的偏移量即是有效地址。 (PC指向的是下一條指令的地址,偏移量可正可負)
優點:方便程式碼在程式內部浮動。
堆疊定址:運算元被存放到堆疊之中,隱含使用堆疊指標(SP)作為運算元地址
可以採用多個暫存器表示堆疊的不同的層(成本較高),也可以採用記憶體劃分 一部分儲存做邏輯堆疊(成本較低)
在進行運算時,彈出堆疊最上方兩個元素,運算完成後再將結果壓入棧頂
4.3.1高階語言與機器級程式碼的對應關係
記憶體表示用 [ ] 表示記憶體地址,前面要加上讀取資料的大小
常用的暫存器:
對於通用暫存器可以進行分開使用:如AX表示EAX的後16位。AL可以表示後八位,AH可以表示後面 9-16位
4.3.2常見的 X86彙編指令
資料來源包括:1.暫存器、2.記憶體、3.指令中的常數
X86不允許兩個運算元同時來自主存
d表示目的運算元、s表示源運算元,最終處理完成的結果要放到目的運算元的位置,故d表示的目的運算元只可能來自於暫存器或主存,不會是指令 常數。
算數運算:
邏輯運算:
其他指令
4.3.3AT&T格式和Intel格式
4.3.4選擇語句的機器級表示
無條件轉移指令:
直接跳轉到相應地址
1.可以直接給出跳轉地址
2.跳轉地址可以來自暫存器
3.跳轉地址可以來自記憶體
4.採用標號標記跳轉位置
條件轉移指令
需要滿足一定的條件然後跳轉到相應地址
例:將C語言翻譯為彙編指令
4.3.5迴圈語句的機器級表示
實現迴圈語句的組成部分:
1.迴圈前的初始化
2.是否直接跳過迴圈
3.迴圈主體
4.是否繼續迴圈
也可以使用loop指令來實現迴圈操作:
4.3.6 函式呼叫的機器級表示
call和ret指令
在進行函式呼叫時,會把函式的棧幀壓入堆疊,當函式呼叫完成後,將函式的棧幀從棧中刪除。每個函式的棧幀主要包括:定義的區域性變數、函式呼叫相關資訊。
在組合語言中使用 call指令實現函式呼叫(call 函式名)
使用 ret指令作為函式返回( ret )
call指令作用:1.將IP舊值壓棧儲存(儲存在函式棧幀頂部)
2.設定IP新值,無條件轉移至被呼叫函式的第一條指令
ret指令作用:從函式的棧幀頂部找到IP舊值,將其出棧並恢復IP暫存器
如何訪問棧幀資料
方法一:使用Push指令和Pop指令
push指令將esp減4(指向下一地址)然後將資料壓入
Pop指令將棧頂元素彈出並將esp加4(指回上一條指令)
方法二:使用Mov指令,將資料直接指向相應地址
如何切換棧幀
呼叫者執行call 指令
被呼叫者儲存上一層函式的棧幀,設定當前函式的棧幀
在呼叫結束時,恢復上一層函式的棧幀
最後執行ret指令,從棧頂找到返回值,出棧並恢復IP值
棧幀儲存內容
1.每一個棧幀的最頂部需要儲存上一個函式棧幀的基地址
2.棧幀的 最底部 會儲存返回地址(IP地址)
3.棧幀底部會儲存函式的區域性變數(越早定義的變數越靠近棧頂)
4.棧幀頂部會儲存函式的呼叫引數(越先出現的引數越靠近棧頂)
小結
4.4 CISC和RISC
CISC和RISC是指令設計的兩種思路,CISC設計思路:一條指令可以完成一個複雜的基本功能(如X86架構,主要用於電腦);RISC設計思路:一條指令用於完成一個基本動作,需要多條指令組合完成一個複雜的基本功能(如ARM架構,主要用於手機)。
5.1CPU功能和基本結構
CPU功能:
1.指令控制:完成取指令、分析指令、和執行指令的操作,即程式的順序控制
2.操作控制:一條指令的功能往往是由若干操作訊號的組合來實現的。CPU管理併產生由 記憶體取出的每條指令的操作訊號,把各種操作訊號送往相應的部件,從而控 制這些部件按指令的要求進行動作。
3.時間控制:對各種操作加以時間上的控制。時間控制要為每條指令按時間順序提供應有 的控制訊號。
4.資料加工:對資料進行算數和邏輯運算。
5.中斷處理:對計算機執行過程中出現的異常情況和特殊請求進行處理。
運算器的基本結構
1.算數邏輯單元 ALU:主要進行算數/邏輯運算。
2.通用暫存器:用於存放各種運算元和各種地址資訊,SP暫存器是堆疊指標,用於展示 棧頂地址。
3.暫存暫存器:用於暫時儲存從主存中傳入的資料
4.累加暫存器Acc:用於暫時存放ALU的運算結果,用於實現加法運算
5.程式狀態字暫存器Psw:保留運算結果的各種狀態資訊,如:溢位標誌OP、符號標誌 SF、零標誌ZF、進位標誌CF等等。PSW中的這些位參與並決 定微操作的形成。
6.移位器:對運算結果進行移位運算
7.計數器:控制乘除運算的操作步數
控制器的基本結構
1.程式計數器PC:用於指出下一條指令在主存中的存放位置,PC有自增功能。
2.指令暫存器IR:用於儲存當前正在執行的指令。
3.指令譯碼器:對指令的操作碼部分進行移碼,像控制器提供特定的操作訊號。
4.微操作訊號發生器:根據IR的內容、PSW內容以及時序訊號,產生控制整個計算機系 統所需要的各種控制訊號,其結構有組合邏輯型和儲存邏輯型兩種
5.時序系統:用於產生時序訊號(控制指令執行的先後順序),由統一時鐘分頻得到
6.儲存器地址暫存器MAR:用於存放要訪問的主存單元的地址。
7.儲存器資料暫存器MDR:用於存放要存入主存的資訊或者從主存讀出的資訊
其中黃色框的暫存器代表使用者可見,灰色框的暫存器代表使用者不可見
5.2指令的執行過程
指令週期:指CPU從主存中每取出並執行一條指令所需的全部時間,一個指令週期最 少由取指週期和執行週期組成。
完成某一個子工作需要的時間就是一個機器週期,通常一個指令週期用若干個機器週期(CPU週期)來表示。一個機器週期又包含若干個時鐘週期,時鐘週期是CPU操作的最基本單位。
如果完成所有子工作所需機器週期都是相同的,那麼這種CPU叫做定長機器週期CPU如果不同子工作完成所需要的機器週期是不同的,這種CPU稱為不定長的機器週期CPU
完整的指令週期:
四個工作週期都可能進行訪存操作:取指週期為了取指令、間址週期為了取地址、執行週期為了取運算元、中斷週期為了儲存程式斷點。
取指週期:
1.當前指令地址送至儲存器地址暫存器,記做:(PC)→MAR
2.CU發出控制訊號,經控制匯流排傳到主存,這裡是讀訊號,記做:1→R
3.將MAR所指主存中的內容經資料匯流排送入MDR,記做: M(MAR) → MDR
4.將MDR中的內容(此時是指令)送入IR,記做:(MDR) → IR
5.CU發出控制訊號,形成下一條指令地址,記做:(PC)+1 → PC
間址週期:
1:將指令的地址碼送入MAR,記做:Ad(IR)→MAR 或 Ad(MDR) → MAR
2:CU發出控制訊號,啟動主存做讀操作,記做:1→R
3:將MAR所指主存中的內容經資料匯流排送入MDR,此時MDR中就是需要的運算元。記做 M(MAR) → MDR。可以在使用時直接從MDR中取資料,也可以將MDR資料拼接到IR中 的指令地址中。
執行週期:
按照IR的指令操作碼和 運算元透過ALU操作產生執行結果。
中斷週期:
暫停當前任務去完成其他任務。為了能夠恢復當前任務,需要儲存斷點。一般使用堆疊來儲存斷點,假設SP指向棧頂元素,進棧操作是先修改指標,後存入資料。
1:CU控制將SP減1(棧頂指標移動一位),修改後的地址送入MAR記做:
(SP) - 1→SP , (SP)→ MAR
2:CU發出控制訊號,啟動主存做寫操作,記做:1→ w
3:將斷點 (PC內容) 送入MDR,記做:(PC) → MDR
4:CU控制將中斷服務程式的地址送入PC
指令執行方案
方案一:單指令週期:
對所有指令都選用相同的執行時間來完成,執行時間取決於最長的指令執行時間,指令之間序列執行。
缺點:對於較短執行時間的指令也需要 使用較高的週期來完成,會減低整體執行速度
方案二:多指令週期:
對不同的指令按照不同的執行週期來完成,各個指令之間序列執行。
缺點:需要更加複雜的硬體設計
方案三:流水線方案:
在指令執行的不同階段需要用到的硬體是不同的,在一個指令完成一個階段後讓其他指令執行,儘可能讓多個指令同時執行但是處於不同的執行步驟之中。指令之間並行執行
小結
5.3CPU的資料通路
資料通路指的是資料在功能部件之間傳輸的路徑
單匯流排結構
元件之間的資訊交換依靠一根匯流排完成,同一時間只有兩個元件之間可以進行資訊交換
例:
專用通路結構
5.4.1硬佈線控制器
每發出一個微命令 就可以完成一個微操作,微命令和微操作是對應的
比如:微命令 :PCout 、MARin 有效,可以完成微操作:(PC)→ MAR
根據指令操作碼、目前的機器週期、節拍訊號、機器狀態條件,即可確定現在這個節拍下應該發出哪些“微命令”
硬佈線控制器的設計
步驟:
1.分析每個階段的微操作序列(那些指令在哪個階段執行、在什麼條件下執行)
2.選擇CPU的控制方式(採用定長機器週期還是不定長機器週期,每個機器週期安排幾 個節拍)
3.安排微操作時序(怎麼在規定節拍內完成所有微操作)
4.電路設計(確定每個微操作命令的邏輯表示式,並用電路實現)
分析每個階段的微操作序列:
選擇CPU的控制方式
假設採用定長機器週期並且每個機器週期安排三個節拍
安排微操作時序
將一個階段的所有操作在安排在三個節拍完成
原則:
1.微操作的先後順序不得隨意更改
2.被控物件不同的微操作儘量在一個節拍內完成
3.佔用時間較短的微操作儘量在一個節拍內完成,並允許有先後順序
取指週期:
間址週期:
執行週期:
電路設計
列出操作時間表
寫出微操作命令的最簡表示式
畫出邏輯圖
5.4.2微程式控制器
微程式控制器是在CPU出廠之前將所有指令的微程式存入 控制器儲存器中
微程式控制器的基本結構
小結
5.4.3微指令的設計
微指令的格式
1.水平型微指令:一條微指令可以定義多個可並行的微指令
優點:微程式較短,執行速度快
缺點:微指令長,編寫微程式較麻煩
2.垂直型微指令:一條微指令只可以定義一個微命令,由微操作碼欄位規定具體功能
優點:微指令短,簡單,便於編寫微程式
缺點:微程式長,執行速度慢,工作效率低
3.混合型微指令:
在垂直型的基礎上增加一些不太複雜的並行操作。
微指令較短,仍便於編寫;微程式也不長,執行速度加快。
微指令的編碼方式
1.直接編碼:在微指令的操作控制欄位中,每一位代表一個微操作命令
優點:簡單、直接、執行速度過快、操作並行性好
缺點:微指令字長過長,n個微命令就要求微指令的操作欄位有n位,需要儲存空間大
2.欄位直接編碼:將微程式的控制欄位分成若干個段,每段經過譯碼後發出控制訊號
微命令欄位分段的原則:
1.互斥性微命令分在同一段內,相容性微命令分在不同段內。
2.每個小段中包含的資訊位不能太多,否則將增加譯碼線路的複雜性和譯碼時間。
3.一般每個小段還要留出一個狀態,表示本欄位不發出任何微命令。例如:當某欄位的長度為3位時,最多隻能表示7個互斥的微命令,通常用000表示不操作。
優點:可以縮短指令字長
缺點:需要透過譯碼電路後再發出微指令,速度較慢
3.欄位間接編碼:一個欄位的某些微命令需由另一個欄位中的某些微命令來解釋,由於不是靠欄位直接譯碼發出的微命令,故稱為欄位間接編碼,又稱隱式編碼。
優點:可以進一步縮短微指令字長
缺點:削弱了微指令並行控制能力,通常作為欄位直接編碼方式的一種輔助手段。
微指令地址的形成方式
小結
5.4.4微程式控制單元的設計
設計步驟:
1.分析每個階段的微操作序列
2.寫出對應機器指令的微操作命令以及節拍安排
3.確定微指令格式
4.編寫微指令碼點
微程式分類:
靜態微程式:微程式無需改變,採用ROM
動態微程式:透過改變微指令和微程式改變機器指令,採用EPROM
硬佈線控制器和微程式控制器的區別
小結
5.6.1指令流水線
順序執行方式:
一個指令必須等待前一個指令執行完成後才會執行
優點:設計簡單,硬體代價小
缺點:執行指令速度較慢,同一時刻處理機只有一條指令在執行,各個部件的利用率很低
流水線方式
一次重疊執行方式:
指令的第一個階段與上一條指令的最後一個階段有重疊
優點:程式的執行時間縮短了,各個部件利用率明顯提高
缺點:硬體開銷增加,控制過程更加複雜
兩次重疊執行方式:
一條指令的前兩個階段與上一條指令的後兩個階段有重疊
指令執行時間進一步縮短
流水線的效能指標
1.吞吐率(TP):指單位時間內流水線完成的任務數量
TP = n(任務數量) / T(完成時間)
2.加速比(S):完成同樣的任務不使用流水線和使用流水線所花費的時間之比
S= T0 / T
3.效率:流水線裝置的利用率
5.6.2指令流水線的影響因素和分類
五段式架構的指令的執行週期:
IF:取值階段
ID:譯碼階段
EX:執行階段
M:訪存階段
WB:寫入階段
為方便流水線的設計,將每個階段的耗時取成一樣,以最長耗時為準。即此處應將機器週期設定為100ns。
流水線每一個功能段部件後面都要有一個緩衝暫存器,或稱為鎖存器,其作用是儲存本流水段的執行結果,提供給下一流水段使用。
影響流水線的因素
1.結構相關(資源衝突)
由於多條指令在同一時刻爭用同一資源而形成的衝突稱為結構相關。
解決方法:
1.後一個相關指令暫停一週
2.資源重複配置(將指令和資料放入不同的暫存器)
2.資料相關(資料衝突)
資料相關指在一個程式中,存在必須等前一條指令執行完才能執行後一條指令的情況,則這兩條指令即為資料相關。
解決方法:
1.把遇到資料相關的指令及其後續指令都暫停一至幾個時鐘週期,直到資料相關問題消失後再繼續執行。可分為硬體阻塞(stall)和軟體插入“NOP”(空指令)兩種方法。
2.資料旁路技術:將上一步ALU中得到的結果直接拿到下一步需要運算的元件中
3.編譯最佳化:透過編譯器調整指令順序來解決資料相關。
3.控制相關(控制衝突)
當流水線遇到轉移指令和其他改變PC值的指令而造成斷流時,會引起控制相關。
解決方法:
1.,轉移指令分支預測
2.預取轉移成功和不成功兩個控制流方向上的目標指令
3.加快和提前形成條件碼
4.提高轉移方向的猜準率
流水線的多發技術
1.超標量技術:
每個時鐘週期內可併發
多條獨立指令要配置多個功能部件
不能調整指令的執行順序
透過編譯最佳化技術,把可並行執行的指令搭配起來
2.超流水技術
在一個時鐘週期內再分段(3段)
在一個時鐘週期內一個功能部件使用多次( 3次)
不能調整指令的執行順序
靠編譯程式解決最佳化問題
3.超長指令字
由編譯程式挖掘出指令間潛在的並行性,將多條能並行操作的指令組合成一條
具有多個操作碼欄位的超長指令字(可達幾百位)
採用多個處理部件
小結
5.7多處理器
SISD 單指令流單資料流:
各個指令序列只能併發不可並行,每條指令處理一兩個資料。不是資料級並行技術。
硬體組成:一個處理器+一個儲存器。如果採用指令流水線,需要設定多個功能部件,採用多模組交叉儲存器。
SIMD 單指令流多資料流:
各個指令只能併發不可並行,但是每條指令可以同時處理具有多個相同特徵的資料,是一種資料級並行技術。
硬體組成:一個指令控制器(CU)+多個執行單元 + 多個區域性儲存器 + 一個主儲存器。每個執行單元有各自的暫存器、區域性儲存器、地址暫存器。不同執行單元執行同一條指令,處理不同的資料。
MIMD 多指令流多資料流:
各個指令序列並行執行,分別處理不同的資料,是一種執行緒級並行或執行緒級以上的並行技術。
向量處理器
向量處理器是一種SIMD的進階應用。向量處理的一條指令的處理物件是向量,擅長對向量型資料平行計算、浮點數運算等
5.7.2硬體多執行緒
6.1匯流排
匯流排是為多個部件分時 共享的公告資訊傳送線路
共享是指匯流排上可以掛接多個部件,各個部件之間互相交換的資訊都可以透過這組線路分時共享。
分時是指同一時刻只允許有一個部件向匯流排傳送資訊,如果系統中有多個部件,則它們只能分時地向匯流排傳送資訊。
匯流排的特性
1.機械特性:尺寸、形狀、管腳數、排列順序
2.電器特性:傳輸方向和有效電平範圍
3.功能特性:每根傳輸線的功能(地址、資料、控制)
4.時間特性:訊號的時序關係
序列匯流排和並行匯流排
按照資料傳輸格式將匯流排分為序列匯流排和並行匯流排。
序列匯流排:每次只可以傳輸一位位元的資料
優點:只需要一根傳輸線,成本低。廣泛應用於長距離傳輸,不易產生干擾;應用於計算機內部時可以節省佈線空間。
缺點:在資料傳送和接受的時候要進行拆卸和裝配,要考慮序列-並行轉換問題
並行匯流排:每次可以傳輸多位位元的資料
優點:匯流排的邏輯時序比較簡單,電路設計容易
缺點:訊號線數量多,佔用更多的不限空間,遠距離傳輸時成本高。線路之間可以會產生干擾。
片內匯流排、系統匯流排、通訊匯流排
按照匯流排的功能將匯流排分為片內匯流排、系統匯流排、通訊匯流排
片內匯流排:是晶片內部的匯流排。是CPU晶片內部暫存器之間、暫存器與ALU之間的公共鏈 接線。
系統匯流排:是計算機系統內各個功能部件之間互相連結的匯流排。按系統匯流排傳輸資訊內容 的不同,又可分為3類:資料匯流排、地址匯流排和控制匯流排。
資料匯流排 DB: 負責傳輸各個功能部件之間的資料資訊,包括指令和運算元 匯流排的位數(根數)與機器字長和儲存字長有關;傳輸方向 是雙向的。
地址匯流排 AB: 傳輸地址資訊,包括主存單元或者I/O埠的地址;匯流排的位 數(根數)與主存地址空間大小以及裝置數量有關。資料傳輸 方向是單向的。
控制匯流排 CB:傳輸控制資訊,一根控制線傳輸一個控制資訊。對於單根控制 線來說,資料是單向傳輸的,但是對於整個控制匯流排來說資料 傳輸是雙向的。
通訊匯流排:通訊匯流排式用於計算機系統之間或計算機系統與其他系統之間的資訊傳輸 的匯流排,也成為外部匯流排。
系統匯流排的結構:
單匯流排結構:
雙匯流排結構:
三匯流排結構:
小結
匯流排的效能指標
1.匯流排的傳輸週期(匯流排週期):一次匯流排操作所需的時間(包括申請階段、定址階段、傳輸 階段和結束階段),通常由若干個匯流排時鐘週期構成。
2.匯流排時鐘週期:即機器的時鐘週期。計算機有一個統一的時鐘,以控制整個計算機的各 個部件,匯流排也要受此時鐘的控制。
3.匯流排的工作頻率:匯流排上各種操作的頻率,為匯流排週期的倒數。若匯流排週期=N個時鐘周 期,則匯流排的工作頻率=時脈頻率/N。實際上指一秒內傳送幾次資料
4.匯流排的時脈頻率:即機器的時脈頻率,為時鐘週期的倒數。若時鐘週期為T,則時鐘頻 率為1/T。實際上指一秒內有多少個時鐘週期。
5.匯流排寬度:又稱為匯流排位寬,它是匯流排上同時能夠傳輸的資料位數,通常是指資料匯流排 的根數,如32根稱為32位(bit)匯流排。
6.匯流排頻寬:可理解為匯流排的資料傳輸率,即單位時間內匯流排上可傳輸資料的位數,通常 用每秒鐘傳送資訊的位元組數來衡量,單位可用位元組/秒(B/s)表示。
7.匯流排複用:匯流排複用是指一種訊號線在不同的時間傳輸不同的資訊。可以使用較少的線 傳輸更多的資訊,從而節省了空間和成本。
8.訊號線數:地址匯流排、資料匯流排和控制匯流排3種匯流排數的總和稱為訊號線數。
6.3匯流排操作和定時
匯流排週期的四個階段:申請分配階段、定址階段、傳輸階段、結束階段
申請分配階段:由需要使用匯流排的主模組(或主裝置)提出申請,經匯流排仲裁機構決定將 下一傳輸週期的匯流排使用權授予某一申請者。也可將此階段細分為傳輸請 求和匯流排仲裁兩個階段。
定址階段:獲得使用權的主模組透過匯流排發出本次要訪問的從模組的地址及有關命令,啟 動參與本次傳輸的從模組。
傳輸階段:主模組和從模組進行資料交換,可單向或雙向進行資料傳送。
結束階段:主模組的有關資訊均從系統匯流排上撤除,讓出匯流排使用權。
匯流排定時
匯流排定時是指匯流排在雙方交換資料的 過程中需要時間配合 關係的控制,這種控制稱為匯流排定時,他的實質是一種協議或者規則。
同步定時方式:匯流排控制器採用統一的時鐘訊號來協調傳送和接受雙方的定時關係
若干個時鐘產生相等的時間間隔,每個間隔構成一個匯流排週期。在一個總 線週期中,傳送方和接收方可進行一次資料傳送。
因為採用統一的時鐘,每個部件或裝置傳送或接收資訊都在固定的匯流排傳 送週期中,一個匯流排的傳送週期結束,下一個匯流排傳送週期開始。
非同步定時方式:在非同步定時方式中,沒有統一的時鐘,也沒有固定的時間間隔,完全依靠 傳送雙方相互制約的“握手”訊號來實現定時控制。
主裝置提出交換資訊的“請求”訊號,經介面傳送到從裝置;從裝置接到主設 備的請求後,透過介面向主裝置發出“回答”訊號。
小結
7.1.1輸入輸出系統和I/O控制方式
I/O控制方式
包括程式直接控制方式、中斷驅動方式、DMA方式、通道控制方式。
看作業系統筆記 5.1.3
I/O組成
I/O由I/O軟體和I/O硬體兩個部分組成
小結
7.1.2外部裝置
7.2 I/O介面
I/O介面:又叫做I/O控制器,主要負責協調主機與外部裝置之間的資料傳輸
I/O介面的作用
1:資料緩衝:透過資料緩衝暫存器(DBR)達到主機和外設工作速度的匹配
2:錯誤或狀態監測:透過狀態暫存器反饋裝置的各種錯誤、狀態資訊,供CPU查用
3:控制和定時:接收從控制匯流排發來的控制訊號、時鐘訊號
4:資料格式轉換:串-並、並-串等格式轉換
5:與主機和裝置通訊:實現主機—I/O介面一I/O裝置之間的通訊
I/O介面的工作原理
介面與埠
統一編址:I/O埠的編址和記憶體編址統一
靠不同的地址碼來區分記憶體和I/O裝置。訪存類指令都可以訪問I/O埠
獨立編址:I/O埠的編址與記憶體編址無關,是獨立編址的
靠不同的指令來區分I/O裝置。只能用專門的I/O指令去訪問I/O埠
I/O介面分類
小結
7.3.1程式查詢方式
程式查詢方式是當CPU啟動I/O操作時,當I/O裝置正在準備資料的時候,CPU會不停的輪詢檢查I/O裝置的狀態,只有當I/O裝置準備完成時,CPU才會讀寫資料。在I/O裝置準備的過程中,CPU不可以做其他工作。
小結
7.3.2中斷的作用和原理
程式中斷是指在計算機執行現行程式的過程中,出現某些急需處理的異常情況或特殊請求,CPU暫時中止現行程式,而轉去對這些異常情況或特殊請求進行處理,在處理完畢後CPU又自動返回到現行程式的斷點處,繼續執行原程式。
中斷的過程
中斷的分類
中斷請求標記
每個中斷源向CPU發出中斷請求的時間是隨機的。
為了記錄中斷事件並區分不同的中斷源,中斷系統需對每個中斷源設定中斷請求標記觸發器INTR,當其狀態為“1”時,表示中斷源有請求。
這些觸發器可組成中斷請求標記暫存器,該暫存器可集中在CPU中,也可分散在各個中斷源中。
對於外中斷,CPU是在統一的時刻即每條指令執行階段結束前向介面發出中斷查詢訊號,以獲取I/O的中斷請求,也就是說,CPU響應中斷的時間是在每條指令執行階段的結束時刻。
CPU響應中斷必須滿足以下3個條件:
1:中斷源有中斷請求。
2:CPU允許中斷即開中斷。
3:一條指令執行完畢,且沒有更緊迫的任務。
中斷判優
中斷判優要解決多箇中斷訊號同時傳送時先處理哪個的問題。
中斷判優既可以用硬體實現,也可用軟體實現:
硬體實現是透過硬體排隊器實現的,可以設定在CPU中,也可以分散在各個中斷源中
軟體實現是透過查詢程式實現的。
優先順序設定:
7.3.3多重中斷
中斷遮蔽技術
中斷遮蔽技術主要用於多重中斷,CPU要具備多重中斷的功能,須滿足下列條件:
1:在中斷服務程式中提前設定開中斷指令。
2:優先順序別高的中斷源有權中斷優先順序別低的中斷源。
每個中斷源都有一個遮蔽觸發器,1表示遮蔽該中斷源的請求,0表示可以正常申請,所有遮蔽觸發器組合在一起,便構成一個遮蔽字暫存器,遮蔽字暫存器的內容稱為遮蔽字。
小結
7.3.4程式中斷方式
在I/O裝置準備資料的時候,CPU可以去處理其他任務,當I/O裝置準備完成後,會向CPU傳送一箇中斷訊號