計算機組成原理(萬字爆肝整理)

第一章 計算機系統概述

“較簡單,不做過多贅述,后面會詳細學到”

第一節 計算機系統層次結構

1.計算機系統的基本組成:硬件+軟件

2.計算機硬件的基本組成:運算器+存儲器+控制器+輸入設備+輸出設備

3.系統軟件和應用軟件

系統軟件操作系統、數據庫管理系統、語言處理程序、分布式軟件系統、網絡軟件系統、標準庫語言、服務性程序
應用軟件科學計算類程序、工程設計類程序、數據統計與處理程序

4.(易考)翻譯程序:

匯編程序(匯編器)將匯編語言程序翻譯成機器語言程序
解釋程序(解釋器)將源程序翻譯成機器指令并立即執行
編譯程序(編譯器)將高級語言翻譯城機器語言或匯編語言

第二節 計算機性能指標

  • 吞吐量:表征一臺計算機在某一時間間隔內能夠處理信息量。
  • 響應時間:表征從輸入有效到系統產生響應之間的時間度量,用時間單位來度量的。
  • 利用率:在給定的時間間隔系統被實際使用的時間所占的比率,用百分比表示的。
  • 處理機字長:指處理機運算器中一次能夠完成二進制數運算的位數,如 32 位、64 位。
  • 總線寬度:一般指 CPU 中運算器與存儲器之間進行互連的內部總線二進制位數。
  • 存儲器容量:存儲器中所有存儲單元的總數目,通常用 KB、MB、GB、TB 來表示。公式一般是:位數×個數

(MAR×MDR)

  • 存儲器帶寬:單位時間內從存儲器讀出的二進制數信息量,一般用字節數/秒表示。
  • 主頻/時鐘周期:CPU 的工作節拍受主時鐘控制,主時鐘不斷產生固定頻率的時鐘度量單位是 MHz、GHz

主頻的倒數稱為 CPU 時鐘周期(T),T=1/f,度量單位是 μs、ns。

K= 103 ,M= 106 ,G= 109

易錯:時鐘頻率的提高,不能保證CPU執行速度又同倍速的提高,有時候還會減慢。

  • CPU 執行時間:表示 CPU 執行一般程序所占用的 CPU 時間,可用下式計算:

CPU 執行時間 = CPU 時鐘周期數 * CPU 時鐘周期

  • CPI:執行一條指令所需的平均時鐘周期數。用下式計算:

CPI = 執行某段程序所需的 CPU 時鐘周期數 / 程序包含的指令條數

  • MIPS:(Million Instructions Per Second)的縮寫,表示平均每秒執行多少百萬條定點指令數,用下式計算:

MIPS = 指令數 / (程序執行時間 * 10^6)

  • FLOPS:(Floating-point Operations Per Second)的縮寫,表示每秒執行浮點操作的次數,用來衡量機器浮點操作的性能。用下式計算:FLOPS = 程序中的浮點操作次數 / 程序執行時間(s)

題目總結:

①對于高級語言程序員來說,浮點數格式、乘法指令、數據如何在運算器中運算時透明的。對于匯編語言程序員,指令格式,機器構造,數據格式則不是透明的。

②在CPU中,IR、MAR、MDR對各類程序員都是透明。

③機器字長,指令字長,存儲字長

機器字長也稱字長——是計算機直接處理二進制數據的位數,機器字長一半等于內部寄存器的大小,它決定了計算機的運算精度。

指令字長——一個指令中包含的二進制代碼的位數。

存儲字長——一個存儲單元中二進制代碼的長度。

指令字長一般是存儲字長的整數倍,若指令字長等于存儲字長的2倍,則需要2次訪存來取出一條指令,因此取值周期為機器周期的2倍;若指令字長等于存儲字長,則取值周期等于機器周期的。

分享一本谷歌大佬撰寫的算法手冊,整整 300 道 LeetCode 題目,并且都是最優解,非常強!這本手冊幫助不少朋友加入大廠,大家加油!

Github瘋傳!谷歌大佬撰寫的算法手冊開源了

第二章 數據的表示和運算

一、無符號整數的表示和運算

Ⅰ、無符號整數的加法:從最低位開始,按位相加,并往更高位進位。

Ⅱ、”被減數“不變,”減數“全部按位取反,末位+1,減法變加法。

二、帶符號整數的表示和運算

帶符號的整數表示:原碼、補碼、反碼

※帶符號的整數運算可以用原碼嗎?

用原碼的話符號位不能參與運算,需要設計復雜的硬件電路才能處理,貴。

這時候就可以利用補碼來進行帶符號的整數運算。

①涉及原碼和補碼的轉化。

正數:原碼->補碼,不變

負數:原碼->補碼,除符號位外,各位取反,末位+1

Ⅰ、補碼的加法

img

從最低位開始,然后按位相加,并往高位進位。算出來的結果,轉回原碼,就可以得到正值。

補充:補碼->原碼:類似,除符號位外,各位取反,末位+1

Ⅱ、補碼的減法

※加法電路造價便宜,減法電路造價昂貴,若將減法變為加法,更加economize。

  • 那我們知道了”減數“的補碼,那如何求得”減數“負值的補碼呢?

補碼全部位取反,末位+1(易錯這里是全部位取反,而帶符號位的負數,是除符號位外,各位取反)

其實啊,這里的運算的邏輯結構和無符號的減法運算是一樣的,通用一套電路,省錢!

三、原碼、反碼和補碼的特性對比

8bit合法的表示范圍最大的數最小的數真值0的表示
帶符號原碼-127~127127-127+0=00000000 -0=10000000
帶符號反碼-127~127127-127+0=00000000 -0=11111111
帶符號補碼-128~127127-128-/+0=00000000 只有這一種
無符號整數0~255255000000000
帶符號移碼-128~127127-1280=10000000 只有這一種

原碼和反碼的合法表示范圍完全相同,而且都有兩種表示真值0的方法。

補碼的合法表示范圍多一個負數,原因就是只有一種0的表示方法,因為-0的補碼就是00000000

img

四、移碼,定點小數

移碼:在補碼的基礎上符號位取反。且移碼只能表示整數。表示范圍和補碼相同。

移碼的作用:移碼的作用就是方便計算機比較兩個數數值的大小。

定點小數的編碼表示:原碼、反碼、補碼。

運算規則和整數的運算規則一模一樣。

五、電路的基本原理和加法器設計

Ⅰ、補碼/無符號整數加減法運算器

img

減法運算過程:

①首先Sub信號置為1;

②多路選擇器的值為1,Y(減數)經過非門,都取反;

③cin來自低位加1;

Ⅱ、標志位生成

①進位標志CF (Carry Flag)只對無符號運算有意義
當運算結果的最高有效位有進位(加法)或借位(減法)時,進位標志置1,

即CF = 1;否則CF= 0。

49H + 6DH=B6H, 沒有進位:CF = 0

BBH + 6AH=(1)25H,有進位:CF = 1

②零標志ZF (Zero Flag)
若運算結果為0,則ZF = 1;否則ZF = 0

49H + 6DH=B6H,結果不是零:ZF = 0

75H + 8BH=(1)00H,結果是零:ZF = 1

③符號標志SF (Sign Flag)只對有符號運算有意義
運算結果最高位為1,則SF = 1;否則SF = 0

49H + 6DH=B6H=10110110B,SF=1

④溢出標志OF (Overflow Flag)只對有符號運算有意義
若算術運算的結果有溢出,則OF=1;否則 OF=0

49H + 6DH =B6H,產生溢出:OF = 1

75H + 8BH =(1)26H,沒有溢出:OF = 0

進位CF和溢出OF位有什么區別呢?

進位標志表示無符號數運算結果是否超出范圍,運算結果仍然正確,對有符號位加減法無意義。

溢出標志表示有符號數運算結果是否超出范圍,運算結果已經不正確,對無符號加減無意義。

溢出的判斷判斷運算結果是否溢出有一個簡單的規則:

只有當兩個相同符號數相加(包括不同符號數相減),而運算結果的符號與原數據符號相反時,產生溢出;因為,此時的運算結果顯然不正確其他情況下,則不會產生溢出

1.當兩個符號相同的數相加,結果的符號與之相反,則OF=1,否則OF=0.

2.當兩個符號不同的數相減,結果的符號與減數相同,則OF=1,否則OF=0.

六、定點數的移位運算

  • 左移1位相當于×2,右移1位相當于÷2
  • 原碼:符號位不參與移位。左移,右移都補0
  • 反碼:符號位不參與移位。若反碼是負數補1;若反碼是正數補0
  • 補碼:符號位不參與移位。若補碼是負數左移低位補0,右移高位補1;若補碼是正數,左移右移都補0

七、原碼補碼的乘法除法運算

Ⅰ、原碼的一位乘法

符號位通過異或確定;數值部分通過被乘數和乘數絕對值的n輪加法、移位完成,根據當前乘數中參與運算的位確定(ACC)加什么。若當運算位=1,則(ACC)+[|x|],若為0,則(ACC)+1。每輪加法完成后,ACC,MQ的內容統一邏輯右移。

img

先ACC初始化。x置于通用寄存器中,y置于MQ。

Ⅱ、補碼的一位乘法

原碼一位乘法和補碼一位乘法的不同點

原碼一位乘法補碼一位乘法
進行n輪的加法、移位進行n輪加法,移位,最后再多來一次加法
每次加法相加,只有兩種情況+0或加x每次加法加有三種情況,0或+x或+[-x]
每次移位都是邏輯右移,補1每次都是補碼的右移,正數右移補0,負數右移補1
符號位不參與運算符號位參與運算
  • 會添加一位輔助位
  • 輔助位-MQ中“最低位”=1時,(ACC)+[X)]補
  • 輔助位-MQ中“最低位”=0時,(ACC)+0
  • 輔助位-MQ中“最低位”=-1時,(ACC)+[-X]補

img

八、C語言類型轉換和數據存儲排列

  • C語言中定點整數是用”補碼“存儲的。
  • 無符號數轉為有符號數:不改變數據內容,改變解釋方式。
  • 長整數變為短整數:高位截斷,保留低位。
  • 短整數變長整數:若為有符號數,在符號位和數值位添1,若為無符號,直接在高位添0。
  • 大小端模式:大端方式便于人類閱讀;小段方式便于機器處理,因為機器最先讀入的就是最應被處理的數據。
  • 邊界對齊:假設存儲字長為32位,則1個字=32bit,半字=16bit。每次訪存只能讀/寫1個字。若采用邊界對齊的方式,則訪問一個字/半字都需要一次訪存,雖然會造成一點點的空間浪費。采用不對齊的方式,對空間利用率高,但是可能會涉及到兩次訪存時間大大增加。

九、浮點數的表示和運算

Ⅰ、概念:之前我們學習了定點數,其中「定點」指的是約定小數點位置固定不變。那浮點數的「浮點」就是指,其小數點的位置是可以是漂浮不定的。

Ⅱ、表示:階符表示的是階碼正負,尾數的數符表示的是尾數正負。

階碼:常用補碼或移碼表示的定點整數,反映表示范圍。

尾數:常用原碼或補碼表示的定點小數,反映精度。

img

Ⅲ、規格化:規定尾數的最高位必須是有效位

①”有效位“又分兩種情況。分為尾數是補碼表示還是原碼表示

原碼表示的尾數視格化:尾數的最高數值位必須是1

補碼表示的尾數規格化:尾數最高數值位必須和尾數符號位相反

②左規:當浮點數運算的結果為非規格化時要進行規格化處理,將尾數算數左移一位,階碼減1。

b= 22×(+0.01001)=21×(+0.10010) #尾數最高位為0,左規

右規:當浮點數運算的結果尾數出現溢出(雙符號位為01或10)時,將尾數算數右移一位,階碼加1。

img

采用雙符號位,當發生溢出時(雙符號位為01或10),可以采用右規,更高位的符號位是正確的符號位。

③雖然浮點數的范圍和精度也有限,但其范圍和精度都已非常之大,所以在計算機中,對于小數的表示我們通常會使用浮點數來存儲。

img

十、IEEE 754

背景:在浮點數提出的早期,各個計算機廠商各自制定自己的浮點數規則,導致不同廠商對于同一個數字的浮點數表示各不相同,在計算時還需要先進行轉換才能進行計算。后來 IEEE 組織提出了浮點數的標準,統一了浮點數的格式,并規定了單精度浮點數 float 和雙精度浮點數 double,從此以后各個計算機廠商統一了浮點數的格式,一直延續至今。

img

img

img

十一、浮點數運算(重點)

現代計算機表示數的方法通常都是浮點數了,所以這節很重要。

①對階:小階向大階靠齊,方便計算機對尾數進行處理。

②尾數加減:尾數常規加減。

③規格化:如果尾數加減出現類似0.0099517× 1012 時,需要“左規”;

如果尾數加減出現類似99.517107× 1012 時,需要“右規”。

④舍入:尾數位數有限,若規定只能保留6位有效尾數,則9.9517107× 1012 →9.95171× 1012 (多余的直接砍掉)或者,9.9517107× 1012 →9.95172× 1012 (若砍掉分非0,則入1)或者,也可以采用四舍五入的原則,當舍棄位≥5時,高位入1。

⑤判溢出:若規定階碼不能超過兩位,則運算后階碼超出范圍,則溢出。

如:9.85211× 1099 +9.96007× 1099 =19.81218× 1099 規格化并用四舍五入的原則保留6位尾數,得1.98122× 10100 ,階碼超過兩位,溢出。

img

強制類型轉化:

無損:char->int->long->double

float->double

有損:int->float,可能會損失精度

float->int,可能會溢出,也可能會損失精度

第三章 存儲系統

第一節 存儲器概述

一、存儲器的層次結構

寄存器->Cache->主存->輔存->外存

Cache-主存:解決了主存與CPU速度不匹配的問題。

主存-輔存:實現虛擬存儲系統,解決了主存容量不夠的問題。

※輔存中的數據要調入到主存才能被CPU訪問

二、存儲器的分類

Ⅰ、按照存取方式:分為隨機存取存儲器(RAM),如內存;順序存取存儲器(SAM),如磁帶;直接存取存儲器(DAM),如磁盤;相聯存儲器(可按內容訪問的存儲器,CAM),如快表。

Ⅱ、按信息是否可改:分為讀/寫存儲器和只讀存儲器(ROM)

Ⅲ、斷電后是否消失:分為易失性存儲器,如內存、Cache;非易失性存儲器,如磁盤、光盤

三、存儲器的性能指標

1.存儲容量:存儲字數×字長

2.單位成本:每位價格=總成本/總容量

3.存儲速度:數據傳輸率=數據的寬帶/存儲周期

存儲周期=存取時間+恢復時間

第二節 主存儲器

一、SRAM和DRAM

一個靜態RAM,一個動態RAM。動態的用于主存,靜態的用于Cache

SRAM和DRAM的差別

類型特點SRAMDRAM
存儲信息觸發器電容
破壞性讀出
讀出后是否需要重寫不用需要
運行速度
集成度
發熱量
存儲成本
是否易失易失易失
是否需要刷新不需要需要
作用常用作Cache常用作主存

二、ROM只讀存儲器

RAM芯片——易失性,斷電后數據消失

ROM芯片——非易失性,斷電后數據不會消失

①MROM——掩模式只讀存儲器:任何人都不可重寫

②PROM——可編程只讀存儲器:寫一次后就不可更改

③EPROM——可擦除可編程只讀存儲器:可進行多次重寫,寫入時間很長

④Flash Memory——閃速存儲器:可進行多次快速擦除重寫,但寫的速度比讀的速度慢

⑤SSD——固態硬盤:可進行多次快速擦除重寫,目前個人電腦大都市這種。速度快,功耗低,價格高。

第三節 主存儲器與CPU的連接

一、單塊存儲器與CPU連接

Ⅰ、連接原理:主存器通過數據總線,地址總線和控制總線與CPU連接。

地址總線的位數決定了可尋址的最大內存空間。

控制總線指出總線周期類型和本次輸入輸出操作完成的時刻。

img

主存儲器的線路

二、多塊存儲器與CPU連接

Ⅰ、位擴展法

原理:CPU的數據線與存儲芯片的數據位數不相等,此時必須使用多個存儲器件對字長進行擴位。每個存儲器的數據線都并行連接在CPU的數據總線上,而地址位數是串行相連。那CPU傳一個地址過來,怎么知道是使用哪個存儲芯片呢,此時就要WE來控制使用哪個存儲芯片。

img

Ⅱ、字擴展法

原理:當主存儲器位數不足,字數足夠時,我們會通過位擴展的方法來擴展主存儲器,將多個字數相同的存儲芯片并聯起來,增加位數,并且存儲空間是連續的。里面還會涉及譯碼器,主要功能就是增加控制存儲器的個數,如有兩位地址線連接了譯碼器,那么譯碼器可以控制 22 個存儲器。

img

線選法譯碼片選法
n條線n個片選信號n條線2的n次方個片選信號
電路簡單電路復雜
地址不連續(兩位舉例,00和11的地址用不到)地址連續(00和11的地址也都用到了)

Ⅲ、字位同時擴展

原理:而當字數和位數都不足時,我們會通過字位同時擴展的方法來擴展存儲器,將多個字數和位數都相同的存儲芯片連接起來,同時增加字數和位數。

Ⅳ、三者比較

字擴展方法只能增加主存儲器的容量,存取速度沒有提升。而位擴展方法不光可以增加主存儲器的容量,同時還可以讓多個存儲芯片同時工作,同時做讀寫操作,增加了存取速度。字位同時擴展的方法又可以增加主存儲器的容量,又可以讓多個存儲芯片同時工作,那么是不是只用字位同時擴展這一種方法就可以了呢?任何事情都是有利弊兩面性的,在能力增強的同時,他的成本,功耗和體積都會增加,所以我們還是要根據實際的系統需求來判斷具體使用的主存儲器擴展方法。

Ⅴ、題目總結

【2018統考真題】假定DRAM芯片中存儲陣列的行數為r、列數為c,對于一個2K×1位的DRAM芯片,為保證其地址引腳數最少,并盡量減少刷新開銷,則r、c的取值分別是()。

解:r是行,c是列,為了保證地址引腳數最少,就要求,行列相差小,并且減少刷新開銷,則要求行數越小越好。故最終行數位32,列數位64。

三、多模塊存儲器

背景:隨著CPU的功能不斷增強,I/O設備數量不斷增多,這也導致了主存的存取速度已成為計算機系統的發展瓶頸。為了解決此問題,除了尋找更高速的原件和采用存儲器層次結構外,調整主存的結構也可以提高訪存速度,這就涉及到了多模塊存儲器。

由于取值周期=存取時間+恢復時間。DRAM芯片恢復時間較短,有可能是存取時間的幾倍。那怎么半,不能讓設備停著吧。那太浪費資源了。

Ⅰ、雙端口RAM

顧名思義,就是利用兩個端口實現多核CPU存儲,需要有兩組完全獨立的數據線,地址線,控制線。支持兩個CPU同時訪問。

兩個端口可以同時對不同單元的地址中取數據,也可以對同一地址單元中讀出數據,但是不行同時對同一單元中寫入數據,也不能對同一單元一邊讀一邊寫入數據。

解決辦法:發出”busy“信號,其中一個CPU的訪問端口暫時關閉。

Ⅱ、單體多字存儲器

原理:原來每行只存放一個存儲字,變為每行存放多個存儲字,這樣原來一次只能讀取一個存儲字,變為一次能讀取多個存儲字,這需要數據總線根數變大。

限制:指令和數據在主存必須是連續存放的。

img

Ⅲ、多體并行存儲器(重點)

原理:每個模塊都有相同的容量和存取速度,各模塊都有獨立的讀寫控制電路,地址寄存器,和數據寄存器,既能并行工作,又能交叉工作(一個模塊進入恢復時間,另一個模塊進行存取)。

img

區別:在高位交叉中,由于下一個訪問的地址還是在這個存儲體上,所以必須等到恢復時間結束后才能繼續訪問,故不能并行訪問。效果也僅僅是擴容。而在低位交叉編制中,下一個訪問地址不在同一個存儲體上,所以可以交叉訪問,不僅擴容還加快了訪問速度。當塊數m ≥ T/r時,能達到最佳存儲效率。T為存取周期,r為存取時間。

img

第四節 外部存儲器

一、磁盤存儲器

優點:存儲容量大,價格低,長期保存而不丟失。

缺點:存取速度慢,機械結構復雜,對環境要求高。

磁盤最小的讀寫單位是一個扇區。

二、固態存儲器SSD(新增考點)

優點:讀寫速度快。若要寫的頁有數據,則不能寫入,需要將塊內其他頁全部復制到一個新的塊中,再寫入新的頁。

缺點:價格高,一個塊被寫入多次可能會壞掉(采用平均磨損,對我們來說仍然很耐用)而磁盤不會。

第五節 高速緩沖存儲器(重點)

一、什么是Cache,為什么要引入Cache?

Cache存儲器也被稱為高速緩沖存儲器,位于CPU和主存儲器之間。之所以在CPU和主存之間要加cache是因為現代的CPU頻率大大提高,內存的發展已經跟不上CPU訪存的速度。在2001 – 2005年間,處理器時鐘頻率以每年55%的速度增長,而主存的增長速度只是7%。在現在的系統中,處理器需要上百個時鐘周期才能從主存中取到數據。如果沒有cache,處理器在等待數據的大部分時間內將會停滯不動

二、原理

采用了程序訪問的時間局部性原理和空間局部性原理

時間局部性:如果一個數據現在被訪問了,那么以后很有可能也會被訪問

空間局部性:如果一個數據現在被訪問了,那么它周圍的數據在以后可能也會被訪問

三、多級Cache的由來?

cache分為L1,L2,L3甚至L4等多級。為什么不能把L1的容量做大,不要其它的cache了?原因在于性能/功耗/面積(PPA)權衡考慮。L1 cache一般工作在CPU的時鐘頻率,要求的就是夠快,可以在2-4時鐘周期內取到數據。L2 cache相對來說是為提供更大的容量而優化的。雖然L1和L2往往都是SRAM,但構成存儲單元的晶體管并不一樣。L1是為了更快的速度訪問而優化過的,它用了更多/更復雜/更大的晶體管,從而更加昂貴和更加耗電;L2相對來說是為提供更大的容量優化的,用了更少/更簡單的晶體管,從而相對便宜和省電。在有一些CPU設計中,會用DRAM實現大容量的L3 cache。

四、如何區分Cache和主存的數據塊對應關系?

每次被訪問的主存塊,一定會被立即調入Cache,而且是以塊為單位進行調入。

img

那是采用什么方式將主存塊號調入到Cache呢?有三種方式

①全相聯映射——主存塊可以放在Cache的任意位置。

那它是如何來訪問主存的呢?

img

對以上圖只要能看懂,對于全相聯映射就沒什么問題了。做幾點說明,CPU在訪問主存時,會先對比Cache所有塊中的標記Tag,Tag就是在主存中的主存塊號,占22位。

②直接映射——每個主存塊只能放在一個特定的位置。Cache塊號=主存塊號%Cache塊總數

img

做以下幾點說明

  • 相對于全相聯映射,直接映射對Tag進行了優化,因為主存塊號最后三位地址就是Cache中的位置,所以將主存塊號其余位作為標記即可。
  • 若Cache總塊數= 2� ,則主存塊號末尾n位直接反映它在Cache的位置,所以將主存塊號其余位作為標志位即可。

③組相聯映射——Cache塊分為若干組,每個主存塊可以放到特定分組中的任意一個位置。組號=主存塊號%分組數

img

做以下幾點說明

  • 相對于全相聯映射,直接映射對Tag進行了優化,因為主存塊號最后兩位地址就是Cache中的位置,所以將主存塊號其余位作為標記即可。
  • 一個組內有幾個Cache塊就成為幾路相聯映射

④三種映射方法對比總結

全相聯直接組相聯
特點任意位置特定位置分組中的任意位置
主存地址結構標記+塊內地址標記+行號+塊內地址標記+組號+塊內地址
優點Cache存儲空間利用充分對任意地址,執行對比一個Tag,速度快折中辦法
缺點可以會對比所有行的標記,速度慢Cache空間利用不充分/

五、Cache很小,而主存很大,如果Cache滿了,是利用了什么替換算法?

替換條件:對于全相聯映射,需要在全局中選擇替換哪一塊,對于直接映射,若非空,則直接替換,對于組相聯,組內滿了,則在組內選擇替換哪一塊。

Ⅰ、隨機算法(RAND)

隨機,隨便,隨意,換哪一個都行。實現簡單,但完全沒有考慮局部性原理,命中率低,實際效果很不穩定。

可能會導致,換出的塊,下一次又需要訪問。就會多次訪問內存塊。導致抖動現象。

Ⅱ、先進先出算法(FIFO)

替換最先進入的塊。同樣實現簡單,但仍然沒有考慮到局部性原理,最先被調入Cache塊可能是被訪問最頻繁的。

Ⅲ、近期最少使用(LRU)

為每個Cache塊設置一個”計數器“,用于記錄每個Cache塊多久沒有被訪問了。然后替換”計數器“值最大的。

  • 計數器的位數=Cache塊的總數= 2� ,只需要n位,且Cache裝滿后所有計數器的值一定不重復。
  • 基于局部性原理,近期被訪問的主存塊,未來可能仍會被使用,LRU算法實際運行效果優秀。
  • 若頻繁訪問的主存塊數量>Cache行的數量,則有可能發生”抖動“

Ⅳ、最近不經常使用(LFU)

為每個Cache設置一個”計數器“,用于記錄Cache被訪問過幾次,然后替換”計數器“值最小的(訪問次數最少的)

曾經被經常訪問的主存塊不一定在未來會被用到。并沒有很好的遵循局部性原理,因此實際運行效果不如LRU。

六、Cache寫策略——CPU修改了Cache中的數據副本,如何確保主存中數據母本一致性?

Ⅰ、寫命中——寫入的時候,在Cache中

①回寫法:當CPU對Cache寫命中時,只修改Cache的內容,而不立即寫入主存,只有當次塊被換出時才寫回主存。減少了訪存次數,但存在數據不一致的隱患。

被換出時,看”臟位“是否知道是否被修改。

②全寫法:當CPU對Cache寫命中時,必須把數據同時寫入Cache和主存,一般使用寫緩沖。訪存次數增加,速度變慢,但是能保證數據的一致性。無臟位。

Ⅱ、寫不命中——寫入的時候,不在Cache中

①寫分配法——當CPU對Cache不命中時,把主存中的塊調入Cache,在Cache中修改。通常搭配回寫法使用,改完后要被換出,才在主存中修改。

②非寫分配法——當CPU對Cache寫不命中時,只寫入主存,不調入Cache,搭配全寫法使用。

第六節 虛擬存儲器

虛擬存儲器:在操作系統的管理下,只把當前需要的部分數據調入主存,暫不需要的部分留在輔存中。在用戶看來,似乎獲得了一個超大的主存。(虛擬性)

一、頁式虛擬存儲器

背景:CPU執行的機器指令中,使用的是”邏輯地址“,因此需要通過”頁表“將邏輯地址轉為物理地址。

一個程序在邏輯上被分為若干個大小相等的”頁面“,”頁面“大小與”塊“的大小相同。每個頁面可以離散的存放在不同主存塊中。

頁表的作用:記錄了每個邏輯頁面存放在哪個主存塊中。

無快表:

img

  • 邏輯地址=邏輯頁號+頁內地址
  • 物理地址=主存塊號+頁內地址

增加快表(存放在Cache中,先訪問快表,若未命中,則去訪問主存中的慢表)

img

  • 快表查詢速度很快,若快表中無,則會去慢表中查找,會把相應的內容存入快表中

清楚整個查找流程

img

二、段式虛擬存儲(按功能拆分成大小不同的模塊)

按照功能模塊拆分不同的模塊大小。

虛擬地址:段號+段內地址

優點:段的分界與程序的自然分界相對應,因而具有邏輯獨立性,使得它易于編譯、管理、修改和保護。

缺點:段的長度可變,分配空間不便,容易留下碎片,不好利用,造成浪費。

三、段頁式虛擬存儲

把程序按邏輯結構分段,每段在分固定大小的頁,主存空間也劃分為大小相等的頁,每個程序對應一個段表,每段對應一個頁表。

虛擬地址:段號+段內地址+頁內地址

優點是兼具段式和頁式的優點缺點是需要查兩次表,系統開銷較大。

四、虛擬存儲器與Cache的比較

Cache虛擬存儲器
解決CPU與主存速度不匹配的問題解決主存容量的問題
全由硬件組成,對所有程序員透明由OS和硬件組成,邏輯上存儲器對系統程序員不透明
不命中影響小不命中影響大
不命中時,主存直接與CPU通信不命中時,不能直接和CPU通信,要先硬盤調入主存

題目總結:

【2015統考真題】假定主存地址為32位,按字節編址,主存和Cache之間采用直接映射方式,主存塊大小為4個字,每字32位,采用回寫方式,則能存放4K字數據的Cache的總容量的位數至少是()

  • Cache的容量分為兩個部分一個是數據存儲容量+標記陣列容量
  • 標記陣列中一定包含有效位和標記位,若為回寫法,則還存在一位的”臟位“,若為LRU、LFU替換算法,則還存在替換算法位(計數器)位數為 ���2� ,n為Cache的個數。
  • 本題按照字節編址,則塊內地址占4位,采用直接映射方法中的標志位為32-4-10=18,Tag=18。
  • 采用回寫法,有一位臟位,故最終標記項有18+1+1=20
  • 標記陣列容量為 210 ×20=20K,數據儲存容量為4K×32=128K,故總的為148K。

第四章 指令系統

第一節 指令格式

指令概念:又稱機器指令,是指示計算機執行某種操作的命令,是計算機運行的最小功能單位。

一條指令就是機器語言的一個語句,一條指令通常要包括操作碼和地址碼兩部分:操作碼主要指明用戶干什么,地址碼主要指明對誰操作。

一、指令分類

按操作數個數分:

Ⅰ、零地址指令:不需要操作數,如空操作、停機、關中斷等指令

Ⅱ、一地址指令:只需要單個操作數,如自增,自減,取反,求補,需要兩個操作數,但其中一個隱含在某個寄存器中

Ⅲ、二地址指令:常用于兩個操作數的算術運算、邏輯運算相關指令。

完成一條指令需要訪存四次,分別為取值,讀第一個操作數,讀第二個操作數,寫回第一個操作數。

Ⅳ、三地址指令:常用于兩個操作數的計算,結果放在第三個地址中。

完成一條指令需要訪存四次,分別為取值,讀讀一個操作數,讀第二個操作數,寫到第三個操作數。

※若指令長度不變,地址碼數量越多,尋址能力就越差

按指令長度是機器指令的多少倍分:

Ⅰ、半長指令:是機器指令長度一半

Ⅱ、單字長指令:與機器指令長度一樣

Ⅲ、雙字長指令:是機器指令長度兩倍

二、擴展操作碼指令格式(考點:會設計指令系統)

概念:指令是定長的,但是操作碼的長度可變。

通常情況下,使用頻率高的指令使用短的操作碼,減少指令譯碼和分析的時間。而使用頻率低的指令使用長的操作碼

img

定長指令和擴展操作碼的比較

定長操作碼擴展操作碼
優點硬件設計簡單,識別速度快在指令長度限制下仍有豐富指令
缺點指令難以增加,不靈活增加指令譯碼和分析難度,速度慢

【2017統考真題】某計算機按字節編址,指令字長固定且只有兩種指令格式,其中三地址指令29條、二地址指令107條,每個地址字段為6位,則指令字長至少應該是()。

解答:三地址29條需要的位數是5位,多出3位,而107條需要6位。故總共5+6+12=23,因為按照字節編址,所以最少需要24位。

第二節 尋址方式(重點)

一、指令尋址(由PC指出)

Ⅰ、順序尋址

PC+”1“,這里的1指指令字長,每次取值結束后PC會+1

Ⅱ、跳躍尋址

執行轉移類指令導致的PC值改變

二、數據尋址(由本條指令的地址碼指明真實地址)

非偏移指令

尋址方式有效地址優點缺點訪存次數(指令執行期間)
直接尋址操作數的真實地址簡單限制尋址范圍1
間接尋址操作數地址的地址可擴大尋址范圍指令在執行階段要多次訪存最少2次
寄存器尋址寄存器的地址不訪問主存,速度快寄存器昂貴0
寄存器間接尋址寄存器地址,內部是操作數主存地址與一般的間址快但執行仍然會訪存1
隱含尋址指令中隱含操作數地址有利于縮短指令字長需要增加存儲操作數的硬件0
立即尋址就是操作數本身最快限制操作數范圍0

偏移尋址(重中之重)

指令執行過程中,都會在將運算結果放入主存中,涉及一次訪存。

Ⅰ、基址尋址

將CPU中基址寄存器(BR)/通用寄存器的內容加上指令格式中的形式地址A,而形成操作數的有效地址,即EA=(BR)+A

img

※采用通用寄存器作為基址寄存器 �0 的位數,根據通用寄存器的總數判斷,程序運行前,CPU將BR的值修改為該程序的起始地址。

  • 基址寄存器是面向操作系統的,其內容由操作系統或管理程序確定。用戶無法修改,在程序執行過程中,基址寄存器的內容不變(作為基地址),形式地址可變(作為偏移量)。
  • 當采用通用寄存器作為基址寄存器時,可由用戶決定哪個寄存器作為基址寄存器,但其內容仍由操作系統確定。
  • 優點:可擴大尋址范圍(基址寄存器的位數大于形式地址A的位數)

Ⅱ、變址尋址

有效地址EA等于指令字中的形式地址A與變址寄存器IX的內容相加之和,即EA= (IX)+A,其中IX可為變址寄存器(專用),也可用通用寄存器作為變址寄存器 。

img

  • 變址寄存器是面向用戶的,在執行過程中,變址寄存器的內容可由用戶改變(IX作為偏移量),形式地址A不變(作為基地址)。剛好與基址尋址相反。
  • 在針對數組處理過程中,不斷改變IX的值,便很容易形成數組中任一數據的地址,特別適合編制循環程序
  • 基址變址復合執行。EA=(IX)+(BR)+A。

Ⅲ、相對尋址

相對尋址:把程序計數器PC的內容加上指令格式中的形式地址A而形成操作數的有效地址,即EA=(PC)+A,其中A是相對于PC所指地址的位移量,可正可負,補碼表示 。

img

  • 優點:這段代碼在程序內浮動時不用更改跳轉指令的地址碼
  • 相對尋址廣泛應用于轉移指令
  • 注意:對于JMP A轉移指令,當從CPU中取出一字節時,會自動執行PC+1。若指令的地址為X,且占2B,在取出該指令后,會自定跳轉到X+2+A。

堆棧尋址

操作數存放在堆棧中,隱含使用堆棧指針作為操作數地址。

  • 硬堆棧是將寄存器作為棧,成本很高;軟堆棧是將主存作為棧,成本低。
  • 硬堆棧不訪存,軟堆棧訪存一次

第三節 高級語言程序與機器級代碼之間的對應

一、基本概念

  • 對操作數的操作地址只涉及三種:寄存器到寄存器,主存到寄存器,立即數到寄存器。
  • dword 32bit ;word 16bit ;byte 8bit
  • 通用寄存器 eax ebx ecx edx 變址寄存器 esi edi 堆棧寄存器 ebp esp。

二、選擇結構語句的機器級表示

jejump when equal,
jnejump when not equal,
jgjump when greater,
jgejump when greater or equal
jljump when less
jlejump when less or equal

img

例如

cmp eax ,ebx #比較寄存器eax和ebx里的值
jg NEXT #若eax>ebx,則跳轉到NEXT

三、循環結構語句的機器級表示

用條件指令實現循環

img

用loop指令實現循環

img

就是將”某些處理“封裝到了Looptop內,使得代碼更加簡潔。

四、CISC和RISC

對比項目CISCRISC
指令系統復雜,龐大簡單,精簡
指令數目一般大于200條一般小于100條
指令字長不固定定長
可訪存指令沒有限制只有Load/Store指令
各種指令執行時間相差較大絕大多數在一個周期內完成
各指令使用頻率有的常用,有點不常用一般都常用
通用寄存器的數量較少
控制方式絕大多數為微程序控制絕大多數為組合邏輯控制
指令流水線可以通過一定方式實現必須實現

第五章 中央處理器

第一節 CPU

一、CPU的結構

CPU由運算器和控制器組成。

img

二、CPU的功能

指令控制、操作控制、時間控制、數據加工、中斷處理。

運算器的功能:對數據加工

控制器的功能:取指令、分析指令、執行指令

第二節 指令執行過程

在指令周期中,包含了:取指周期,在取指周期后需要判斷是否有間址周期,如果沒有就進入到執行周期,在執行周期后又需要判斷是否有中斷程序,如果有就響應中斷并保存斷點生成中斷服務程序入口;如果沒有就進入下一個取指周期。

img

四個周期都有CPU訪存操作,只是訪存目的不同。取值周期是取指令;間址周期是取有效地址;執行周期是為了取操作數;中斷周期是為了保存程序斷點。

指令周期常常有若干個機器周期,機器周期里面又包含若干個時鐘周期。每個指令周期內的機器周期可以不同,機器周期內的時鐘周期也可以不同。時鐘周期是CPU操作的最基本單位。

img

一、取值周期

取指周期:取指周期的任務是根據PC中的內容從主存中取出指令代碼并存放在IR中。而PC中存放的是指令的地址,根據這個地址從內存單元取出的是指令,并放在指令寄存器IR中,取指令的同時,PC加1。

img

二、間址周期

間址周期:間址周期的任務是取操作數有效地址,以一次間址為例,將指令中的地址碼送到MAR并送至地址總線,此后CU向存儲器發讀命令,以獲取有效地址并存至MDR。

img

三、執行周期

執行周期:執行周期的任務是根據IR中的指令字的操作碼和操作數通過ALU操作產生執行結果。不同指令的執行周期操作不同,因此沒有統一的數據流向。

指令執行方案:

單指令周期所有指令選用相同的執行時間(取決于最長指令執行時間),指令間串行,但原本只需要很短時間完成指令也分配了很長時間,降低整個系統運行速度
多指令周期對不同指令選用不同的執行時間,需要更復雜的硬件設計,指令間是串行
流水線在每個時鐘周期讓多個指令同時運行,指令間是并行

四、中斷周期

中斷周期:中斷周期的任務是處理中斷請求。假設程序斷點存入堆棧中,并用SP指示棧頂地址,而且進棧操作是先修改棧頂指針,后存入數據。

img

第三節 數據通路的功能和基本結構

一、數據通路的基本結構

Ⅰ:CPU內部單總線方式。將所有寄存器的輸入端和輸出端都連接在一條公共通路上。易發生沖突。

Ⅱ:雙總線/多總線方式。多個總線上傳不同的數據,提高效率。

Ⅲ:專用數據通路方式。專門給某些部件設計通路。性能很高但是硬件量大。

說明:

①對于單總線的連接方式來說,ALU只能有一端與總線相連,因為兩端相連就必會發生沖突。所以另一段要設計一個暫存器,先把數據放入暫存器,暫存器再與總線相連。

②單周期就是指令在一個周期內完成,這是需要與多總線結構配合。才能使各個部件的數據傳遞。因為單總線一個周期內只能傳遞一個數據,所以指令不可能在一個周期內完成。

內部總線是指同一部件,如CPU內部連接各個寄存器及運算部件之間的總線
系統總線指同一臺計算機的各部件,如CPU,主存,I/O之間連接的總線

第四節 控制器的功能和工作原理

一、硬布線控制器

多提一嘴,一定要看看王道視頻是如何設計出組合邏輯圖的,我保證看完一定會有顛覆性的收獲。

根據指令操作碼、目前的機器周期、節拍信號、機器狀態條件,即可確定現在這個節拍應該發出哪些”微命令“

img

硬布線控制器的特點:

  • 指令越多,設計和實現就越復雜(邏輯圖很復雜),因此一般使用RISC。
  • 如果擴充一條新的指令,則控制器的設計就需要大改,因此擴充指令較為困難。
  • 由于使用存純硬件實現控制,因此執行速度很快。

二、微程序控制器(重難點)

要求:會基本概念微命令與微操作,微指令與微周期,主存儲器與控制存儲器,程序與微程序,MAR與CMAR,IR與CMDR。還會一些基本結構,比如為地址形成部件,微地址寄存器CMAR,微指令寄存器CMDR,控制存儲器CM。

  • 微命令:控制器部件向執行部件發出的控制命令,是構成控制序列的最小單位,例如打開或者關閉控制門的電位信號。是各部件完成某個基本微操作的命令
  • 微操作:執行部件接受微命令后所進行的操作,和微操作是一一對應的。 (實際上,微命令是微操作的控制信號,微操作是微命令的執行過程,微操作是執行部件中最基本的操作)
  • 微指令:若干微命令的集合,存放在一個控制存儲器中,而存放微指令的控制存儲器的單元成為微地址。在同一CPU周期內,并行執行的一組微命令,存儲在控制存儲器上面,稱為一條微指令
  • 微周期:從讀取一條微指令,到執行執行完畢所需要的時間稱為微周期。
  • 控制存儲器主存儲器,主要用來存放程序和數據,位于CPU的外部,使用的是RAM。而控制存儲器,則主要用于存儲微程序,位于CPU內部,采用的是ROM
  • 微程序:實現一條機器指令功能的微指令序列。
  • 程序與微程序:程序由機器指令構成,編寫好以后放到主存中運行,可以改寫。而微程序由微指令構成,事先編寫好在CM(控制存儲器)中,一般是不可改寫的。微程序的作用就是實現一條對應的機器指令。
  • 微程序>微指令>微命令=微操作是微命令的執行過程。

img

秒懂哦

  • 一臺計算機可以分為控制部件和執行部件。其中控制部件有指令寄存器,程序計數器,操作控制器,執行部件有運算器,存儲器,外圍設備,狀態條件寄存器。
  • 匯編程序員可見的寄存器有基址寄存器和狀態/標志寄存器,程序計數器PC及通用寄存器。而MAR,MDR,IR,是CPU內部寄存器,匯編程序員不可見,微指令相關的匯編程序員也不可見。

水平型微指令的編碼方式(重點會考)

①字段直接編碼對于直接編碼的方式最大的好處就是能夠并行微操作,縮短了微命令的字段長度。有個題能很好的解釋這其中的原因。某計算機的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接編碼方式,共有33歌微命令,構成5個互斥類,分別包含7,3,12,5和6個微命令,則操作控制字段至少有幾位?

每個互斥類要留1個狀態位不操作,故為8,4,13,6,7個微命令。則需要3,2,4,3,3位共15位控制字段,而直接控制法要33位。很明顯的縮減操作字段位數。

優點明顯,缺點也明顯啊。增加了譯碼,執行時間會增長,而卻增大成本。

直接編碼就是每個控制字段位,就代表一個微命令,優點就是快,電力嘎嘎簡單。但是若微命令要是多達幾百條。那不是要幾百位了。因此指令位數太長。

③某帶有中斷的指令系統有101中操作,采用微程序控制方式,存儲器中相應最少有103個微程序。

要加上取值操作和終端操作,若有n條操作,則有n+2個微程序

④下一條微指令的形成方法常考的:斷定法(根據當前執行的微指令尋找到下一條微指令)和計數器法(類似PC)

第五節 異常和中斷機制

這節會在后面第七章一起講

第六節 指令流水線

講在前面,為什么要引入指令流水線。相信都聽說過華強北的流水線運作方式吧。最明顯的優點就是相較于順序執行的吞吐量更大(單位時間內)運行相同數量的指令也更快。效率也更高。

這里就可以知道指令流水線的概念:把指令執行過程劃分為不同的階段,占用不同的資源,就能使多條指令同時執行

①在流水執行的過程中,會經常遇到沖突,包括結構沖突,數據沖突,控制沖突。

結構相關/沖突/冒險數據相關/沖突/冒險控制相關/沖突/冒險
概念多條指令在同一時刻爭用同一資源下一條指令會用到當前指令計算的結果遇到執行轉移、調用、返回導致PC中斷
處理辦法1.單獨設置數據存儲器和指令存儲器,使取數和取值操作在不同的存儲器中進行 2.暫停時鐘周期1.暫停時鐘周期 2.數據旁路技術 3.編譯優化1.早判斷,早生成 2.預取轉移成功和不成功兩個控制流方向的目標指令 3.加快和提前形成條件碼 4.提高轉移方向的猜準率

五段式指令流水線(超重要)

img

顧名思義,五段分為IF(取值),ID(譯碼&取數),EX(執行),M(訪存),WB(寫回寄存器)

只有上一條指令進入ID段后,下一條指令才能開始IF段,否則會覆蓋IF段鎖存器的內容

考試中常見的五類指令:

Ⅰ、運算類指令的執行過程

IF:根據PC從指令Cache取指令至IF段的鎖存器

ID:取出操作數至ID段的鎖存器

EX:運算,將結果存入EX段鎖存器

M:空段

WB:將運算結果寫回指定的寄存器

Ⅱ、LOAD指令執行過程

作用:load指令可以完成將數據從存儲器中復制到目的寄存器中,會訪存

IF:根據PC從指令Cache取指令至IF段的鎖存器

ID:將基址寄存器的值放到鎖存器A,將偏移量的值放到lmm

EX:運算,得到有效地址

M:從數據Cache中取數并放入鎖存器

WB:將運算結果寫回指定的寄存器

Ⅲ、STORE指令執行過程

**作用:**將數據從寄存器中,復制到存儲器中,會訪存

IF:根據PC從指令Cache取指令至IF段的鎖存器

ID:將基址寄存器的值放到鎖存器A,將偏移量的值放到lmm。將要存的數放到B

EX:運算,得到有效地址。并將鎖存器B的內容放到鎖存器Store

M:寫入數據Cache

WB:空段

Ⅳ、條件轉移指令執行過程

IF:根據PC從指令Cache取指令至IF段的鎖存器

ID:進行比較的兩個數放入鎖存器A,B;偏移量放入lmm

EX:運算,比較兩個數

M:將目標PC值寫回PC

WB:空段

Ⅴ、無條件轉移指令的執行過程

IF:根據PC從指令Cache取指令至IF段的鎖存器

ID:偏移量放入lmm

EX:將目標PC值寫回PC

M:空段

WB:空段

針對條件轉移指令和無條件轉移指令做以下說明:寫入PC的好事比EX更短,可以安排在EX段時間內完成。越早完成就越能避免控制沖突。當然也有在WB段修改PC值的

題目總結:

①流水CPU是由一系列叫做“段”的處理線路組成的。一個m段流水線穩定時的CPU的吞吐能力,與m個并行部件的CPU的吞吐能力相比具有相同的吞吐能力

原因是當流水線穩定后,說明已經進行了一條指令,往后每多一個時鐘周期就多一條指令執行成功。

m個并行平均下來也是一個時針周期就多條指令

故具有相同的吞吐能力,但是流水線的方式,結構實現較為簡單。

第七節 多處理器的基本概念(選擇題)

這節的要求就是明白基本概念

①SISD(單指令流單數據流)

特點:只能并發,不能并行,每條指令處理一個指令

不是數據級并行技術

SISD(單指令流單數據流)SIMD(單指令多數據流)MIMD(多指令多數據流)多處理器系統多計算機系統
特點不是數據級并行技術是一種數據級并行技術是一種線程級并行技術多個處理器共享單一物理地址空間每臺計算機擁有私有存儲器,相互獨立
特征一條指令處理一個數據一條指令處理多個數據多條指令處理多個數據多個處理器+一個主存儲器多個處理器+多個主存儲器
  • 并發(concurrency):把任務在不同的時間點交給處理器進行處理。在同一時間點,任務并不會同時運行。
  • 并行(parallelism):把每一個任務分配給每一個處理器獨立完成。在同一時間點,任務一定是同時運行。

并發不是并行。并行是讓不同的代碼片段同時在不同的物理處理器上執行。并行的關鍵是同時做很多事情,而并發是指同時管理很多事情,這些事情可能只做了一半就被暫停去做別的事情了。(你學廢了嗎?)

第六章 總線

第一節 總線的概述

img

  • 片內總線:芯片內部的總線,是CPU芯片內部寄存器與寄存器之間,寄存器與ALU之間的公共連接線
  • 系統總線:計算機系統內部功能部件(CPU、主存、I/O接口)之間相互連接的總線,可分為三類,數據總線,地址總線,控制總線
  • 通信總線:計算機系統之間或計算機系統與其它系統之間的信息傳送的總線
數據總線地址總線控制總線
功能傳輸數據信息傳輸地址信息傳輸控制信息
大小與什么有關機器字長、存儲字長主存地址空間大小傳輸一個信號
方向雙向單向既有雙向也有單向
總線結構單總線(常用)雙總線三總線
內容系統總線主存總線、I/O總線主存總線、I/O總線、DMA總線
結構CPU、主存、I/O設備都連接在一組總線上主存總線用于CPU,主存之間的傳送;I/O總線用于多個外部設備與通道之間進行傳送多加的一條DMA總線是用于主存訪問高速外設
優點結構簡單,成本低,易于接入新的設備將較低速的I/O設備從單總線分離出來,實現存儲器總線和I/O總線分離更加提高了I/O設備的性能,更快響應命令,提高系統吞吐量
缺點帶寬低,負載重,不支持并發傳送操作需要增加硬件設備系統工作效率低,同一時刻只能一個總線工作

第二節 性能指標

寫一些會考的性能指標,配合相應的題

第三節 總線定時方式

同步通信異步通信半同步通信分離式通信
特點由統一時鐘控制數據傳送采用應答方式,沒有公共時鐘的標準同步、異步結合充分挖掘系統總線每瞬間的潛力
優點傳送速度快保證兩個工作速度相差很大的部件之間進行傳輸
缺點強制性同步復雜,慢

補充:關于異步通信還分為三類:不互鎖,速度最快,可靠性最差;半互鎖;全互鎖。速度最慢,可靠性最好。

第七章 I/O系統

第一節 I/O接口

簡單來說,I/O接口就是負責協調主機與外部設備之間的數據傳輸

可以這樣理解就是你的電腦,怎么控制你的U盤上,做一些讀寫操作。U盤不是“親兒子”啊,所以要單獨給它設置接口來控制它。

CPU那如何確定要操作的是主存還是外部設備呢。這就引出了編制方式——統一編制和獨立編址

統一編制獨立編制
內容把外部設備的存儲當成內存進行分配,有統一的地區分配,靠不同的地址區別內存和外部設備獨立編制,專門為輸入/輸出指令設置訪問端口,靠不同指令區別內存和外部設備
優點1.不需要專門的指令表示訪問外存 2.讀寫控制電路簡單 3,程序設計靈活性高1.地址譯碼快 2.不占用主存地址空間
缺點1.端口占用了主存地址空間,使主存地址空間變小 2.尋址時間長(外部設備)1.程序設計靈活差 2.指令增加,控制電路復雜

補充個會考的內容,關于顯存VRAM(就是顯示存儲器)

顯存是為了提高刷新圖像的信號,會提前把需要顯示的數據放入顯存中。如今的計算機很多都有獨立顯存,就這可以避免,顯存占用主存的空間。

顯存會考的計算:

容量=分辨率×灰度級位數

帶寬=分辨率×灰度級位數×幀數

第二節 主機訪問I/O設備的控制方式

一、程序查詢方式

特點:CPU與I/O串行工作,CPU不斷查詢I/O設備狀態,直到外設準備就緒。

優點:接口設計簡單,設備量少。

缺點:CPU信息傳送過程中要花費很多時間用于查詢和等待,而且在一段時間內只能和一臺外設交換信息,效率低。

獨占查詢:CPU100%的時間都在查詢I/O狀態,完全串行。

定時查詢:每隔一段時間CPU就查詢I/O狀態,查詢的間隔內CPU可以執行其他程序。

二、中斷方式

Ⅰ、程序中斷是指在計算機執行現行程序的過程中,出現某些急需處理的異常情況或特殊請求,CPU暫時中斷現行程序,而轉去執行這些異常情況或特殊請求進行處理。處理完畢后又自動返回到現行程序的斷點處,繼續執行原程序。

引出幾個問題:

問題一:接收到中斷信號后是怎么轉到執行中斷程序的?

問題二:中斷程序執行完后是怎么回來執行原先程序的?

問題三:假如有多個程序斷源同時申請,怎么專門安排優先順序?

問題四、如何判斷是哪個設備發來的中斷信號?

Ⅱ、*整個中斷方式的流程(重點)*

1.中斷請求

“先說明開中斷和關中斷的作用,關中斷保證原子操作,不會被打斷,標志位IF=1為開中斷(允許中斷)”

CPU在統一時刻每條指令執行階段結束前向接口發出中斷查詢信號,獲取I/O的中斷請求,也就是說,CPU響應中斷的時間是在每條指令執行階段的結束時刻。

如何判斷是哪個設備發來的中斷信號?

會存在一個中斷請求標記寄存器,里面不同位代表不同的設備中斷。狀態位為1的話,代表處理中斷申請。

CPU響應中斷必須滿足以下3個條件:

①中斷源有中斷請求。

②CPU允許中斷即斷開中斷。

③一條指令執行完畢,且沒有更緊迫的任務。

2.中斷響應

假如有多個程序斷源同時申請,怎么專門安排優先順序?

有兩種處理辦法:

①硬件實現硬件排隊器

②軟件實現查詢程序

中斷的優先級:

硬件故障中斷>軟件中斷

非屏蔽中斷>可屏蔽中斷

DMA請求>I/O設備傳送的中斷請求

有再補充

3.中斷處理

接收到中斷信號后是怎么轉到執行中斷程序的?

這時候就需要中斷隱指令:保存原程序的PC值,并讓PC指向中斷程序的第一條。

中斷隱指令的任務:

①關中斷。在中斷服務程序中,為保護中斷現場不會再被新的中斷打斷,就必須關中斷

②保存斷點。保證“回得來”

③引出中斷服務。將中斷服務程序入口地址傳送給程序計數器

引出中斷服務,如何將中斷傳給PC?

通過硬件向量法,將硬件(中斷向量地址形成部件)產生向量地址,再由向量地址找到入口地址。

中斷處理過程—硬件向量法。為什么要用向量地址去尋找中斷的入口,而不是直接去尋找中斷入口?

1.若是通過中斷向量地址形成部件直接去入口地址的話,會造成中斷程序有時候長短不一,就要頻繁修改中斷向量地址形成部件。

2.若是先通過向量地址,在內存中找到中斷地址的話,只需修改內存的地址就可以。

img

中斷服務程序的任務

①保護現場。保存通用寄存器和狀態寄存器的內容。

②中斷服務。主體部分。例如將需要打印的字符傳送到打印機的緩沖存儲器中。

③恢復現場。通過出棧或取值把之前保存的信息傳送回寄存器中。

④中斷返回。通過中斷返回指令回到原程序斷點處。

總結:中斷處理過程=中斷隱指令+中斷服務程序

img

中斷流程

Ⅲ、單重中斷和多重中斷

單重中斷:執行中斷服務程序時不響應新的中斷請求。

多重中斷:又稱中斷嵌套,執行中斷服務程序時可響應新的中斷請求。

對于多重中斷有中斷屏蔽技術,在中斷服務開啟前打開中斷指令。優先級別高的中斷源有權中斷優先級別低的中斷源。

這時候就要設置一個屏蔽觸發器,1表示屏蔽該中斷請求,0表示正常申請,所有屏蔽觸發器構成一個屏蔽寄存器,屏蔽寄存器里面內容就是屏蔽字。

有以下幾個說明

①每個中斷源至少有一個1(對自身中斷源)

②1越多,優先級越高

img

看懂這個例題就夠了

三、DMA方式

DMA的特點:

1、內存既可以被CPU訪問也可以被DMA控制器訪問,CPU和DMA控制器會競爭總線的使用權,因而需要仲裁機制。

2、外部設備與內存之間的整個數據交換過程全部在DMA控制器的控制下完成,CPU能夠與外部設備并行工作,大大提高了效率。

3、在DMA方式開始之前CPU要對DMA控制器進行初始化,在DMA方式結束之后,CPU要申請中斷,對內存緩沖區進行后處理。

DMA的處理方式:

1.預處理:CPU完成寄存器初值設置等準備工作。

2.數據傳輸:CPU繼續執行主程序,DMA控制器完成數據傳送

3.后處理:CPU執行中斷服務程序做DMA結束處理

DMA的傳送方式:

1.停止CPU訪存:需要傳送數據時,停止CPU訪存,總線控制器交給DMA控制器。

2.周期挪用方式:當I/O接口沒有DMA請求時,CPU按程序要求訪問內存;一旦I/P接口有DMA請求,則I/O接口挪用一個或幾個周期。缺點是:數據輸入或輸出過程中實際占用了CPU時間。

3.交替訪存方式:CPU與DMA控制器交替訪問內存。不需要總線使用權的申請、建立和歸還過程。

效率高,但實現起來有困難,基本上不被使用。

  • DMA與中斷方式的差別
中斷DMA
數據傳送程序控制硬件控制—DMA控制器。CPU只需進行預處理和后處理
中斷請求傳送數據向CPU報告傳輸結束
響應指令執行周期結束后響應中斷每個機器周期結束都可,即總線空閑即可
適用場景CPU控制,低速設備DMA控制器控制,高速設備
優先級低于DMA高于中斷
工作方式CPU與外設并行,傳送與主程序串行CPU與外設并行,傳送與主程序并行
請求內容請求的是CPU處理時間請求的是總線使用權
  • 中斷的分類:

img

最后給大家分享200多本計算機經典書籍PDF電子書,包括C語言、C++、Java、Python、前端、數據庫、操作系統、計算機網絡、數據結構和算法、機器學習、編程人生等,感興趣的小伙伴可以自取:

https://mp.weixin.qq.com/s?__biz=Mzg2OTY1NzY0MQ==&mid=2247486208&idx=1&sn=dbeedf47c50b1be67b2ef31a901b8b56&chksm=ce98f646f9ef7f506a1f7d72fc9384ba1b518072b44d157f657a8d5495a1c78c3e5de0b41efd&token=1652861108&lang=zh_CN#rd

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160262.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

expdp導出分區表緩慢排查(Streams AQ: waiting for messages in the queue )

基本信息 單機,從老環境遷移到19.19。之前的導出速度接受范圍內。硬件是提升的 導出使用了壓縮,加密,并行64進程,表分區約90個,無lob字段。 現象 導出開始時能并行導出(并行約45個,沒起到64…

Cypress環境變量

Cypress環境變量 baseUrl 當你配置了 baseUrl ,測試套件中的 cy.visit() 、 cy.request() 都會自動以 baseUrl 的值作為前綴并且,當你需要訪問某些網址或者發起接口請求時,在代碼中就可以不用再指定請求的 host 或者 url 了 如何配置 base…

Java進階——多線程相關,實際應用中的積累,持續更新

目錄 多線程相關CountDownLatch賽跑的案例countDownLatch.await(300, TimeUnit.SECONDS); Java其他進階Map的put方法只放一個元素的集合 多線程相關 CountDownLatch 案例:主線程的執行需要等待子線程執行完,等各個線程執行完畢后,主線程做收…

redis的高可用(主從復制和哨兵模式)

redis的高可用(主從復制和哨兵模式) redis的性能管理:redis的數據緩存在內存當中 INFO memory:查看redis內存使用情況 used_memory:1800800:redis中數據占用的內存 used_memory_rss:5783552:redis向操作…

Halcon Solution Guide I basics(3): Region Of Interest(有興趣區域/找重點)

文章目錄 文章專欄前言文章解讀前言創建ROI案例1:直接截取ROI手動截取ROI 總結ROI套路獲取窗口句柄截取ROI區域獲取有效區域 Stop組合 文章專欄 Halcon開發 Halcon學習 練習項目gitee倉庫 CSDN Major 博主Halcon文章推薦 前言 今天來看第三章內容,既然是…

QTableWidget——編輯單元格

文章目錄 前言熟悉QTableWiget,通過實現單元格的合并、拆分、通過編輯界面實現表格內容及屬性的配置、實現表格的粘貼復制功能熟悉QTableWiget的屬性 一、[單元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…

Docker實踐筆記7:構建MySQL 8鏡像

使用Docker構建MySQL 8鏡像并運行容器 本教程將指導您使用Dockerfile構建和運行一個MySQL 8容器。讓我們開始吧! 步驟1:創建Dockerfile 在您的項目根目錄下創建一個名為Dockerfile的文件。以下是Dockerfile的示例內容: # 基于最新的MySQL…

docker、elasticsearch8、springboot3集成備忘

目錄 一、背景 二、安裝docker 三、下載安裝elasticsearch 四、下載安裝elasticsearch-head 五、springboot集成elasticsearch 一、背景 前兩年研究了一段時間elasticsearch,當時也是網上找了很多資料,最后解決個各種問題可以在springboot上運行了…

vue-使用input封裝上傳文件圖片全局組件

前言 實際開發過程中,我們經常遇見需要上傳文件圖片功能,可以封裝一個全局組件來調用 原理很簡單,首先獲取到文件或圖片對象,調用自己公司文檔服務器的接口,上傳文件圖片 為了方便用戶體驗,我們應該在上傳…

Godot

前言 為什么要研究開源引擎 主要原因有: 可以享受“信創”政策的紅利,非常有利于承接政府項目。中美脫鉤背景下,國家提出了“信創”政策。這個政策的核心就是,核心技術上自主可控。涉及的產業包括:芯片、操作系統、數據…

【Django使用】md文檔10大模塊第5期:Django數據庫增刪改查和Django視圖

Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼復用,多個組件可以很方便的以"插件"形式服務于整個框架,Django有許多功能強大的第三方插件,你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴展…

Vue項目 配置項設置

一、項目運行時瀏覽器自動打開 找到package.json文件 找到"sctipts"配置項 在"serve"配置項最后加上--open "scripts": {"serve": "vue-cli-service serve --open","build": "vue-cli-service build&quo…

Redis面試內容,Redis過期策略,Redis持久化方式,緩存穿透、緩存擊穿和緩存雪崩,以及解決辦法

文章目錄 一、redis什么是RedisRedis使用場景1、緩存2、數據共享[分布式](https://so.csdn.net/so/search?q分布式&spm1001.2101.3001.7020)3、分布式鎖4、全局ID5、計數器6、限流7、位統計 Redis有5中數據類型: SSHLZRedis中一個key的值每天12點過期&#xff…

Cookie、Session、CBV加裝飾器的三種方法

【0】cookie、session和Token的發展史 【1】Cookie的形式 存儲形式:k:v鍵值對存儲位置:客戶端缺點:不安全,信息可能會泄露 【2】session的形式 標識符,表示我是當前用戶加密出來的數據對敏感信息進行加密…

排序算法-----快速排序(非遞歸實現)

目錄 前言 快速排序 基本思路 非遞歸代碼實現 前言 很久沒跟新數據結構與算法這一欄了,因為數據結構與算法基本上都發布完了,哈哈,那今天我就把前面排序算法那一塊的快速排序完善一下,前面只發布了快速排序遞歸算法,…

單鏈表相關面試題--3.鏈表的中間節點

3.鏈表的中間節點 876. 鏈表的中間結點 - 力扣(LeetCode) /* 解題思路: 通過快慢指針找到中間節點,快指針每次走兩步,慢指針每次走一步,當快指針走到結尾的時候,慢指針正好走到中間位置 */ typ…

HTTPS協議的加密流程

目錄 一,HTTPS是什么 二,兩種加密方式 三,HTTPS的加密過程 3.1 引入對稱加密 3.2 引入非對稱加密 3.3 引入證書 一,HTTPS是什么 HTTPS也是一個應用層協議,它是在HTTP協議的基礎上引入了一個加密層。因為HTTP協議…

每天一道算法題(十)——獲取和為k的子數組

文章目錄 1、問題2、示例3、解決方法(1)方法1——雙指針 總結 1、問題 給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 2、示例 示例 1: 輸入&#x…

多分類自定義采樣比例

多分類自定義采樣比例 import torch from torch.utils.data import DataLoader, Dataset, WeightedRandomSampler from torchvision import transforms from torchvision.datasets import ImageFolder# 假設你有一個自定義的數據集類 class CustomDataset(Dataset):def __init…

51單片機按鍵控制LED燈亮滅的N個玩法

51單片機按鍵控制LED燈亮滅的N個玩法 1.概述 這篇文章介紹按鍵的使用,以及通過控制LED燈的小實驗,發現按鍵中存在的問題,然后思考并解決這些問題。達到熟練使用按鍵控制元器件。 2.搭建硬件環境 1.硬件準備 名稱型號數量單片機STC12C205…