天天看點

計算機組成第三章存儲系統

計算機組成第三章

  • 存儲系統
    • 主存儲器
      • 尋址
      • 半導體存儲器RAM
        • 半導體随機存取存儲器
          • DRAM的重新整理
          • SRAM的讀/寫周期
        • 知識點總結
      • 半導體存儲器ROM
      • 基本概念
      • 存儲器性能名額
      • 存儲器的階層化結構
      • 知識點回顧
    • 主存與CPU的連接配接
      • 主存容量擴充---位擴充
      • 主存容量擴充---字擴充
      • 知識點回顧
    • 雙口RAM
    • 多子產品存儲器
      • 多體并行存儲器
    • 高速緩沖存儲器
      • 局部性原理性能分析
      • 位址映射方式
      • 替換算法
      • 寫政策
      • Cache例題訓練
        • 知識點回顧
      • 工作原理
        • 知識點
    • 虛拟存儲器
      • 知識點回顧

存儲系統

計算機組成第三章存儲系統

紅色方框中的是重要知識點

主存儲器

計算機組成第三章存儲系統

主存儲器主要有三個部件?:存儲體、MAR(位址寄存器)和MDR(資料寄存器)

計算機組成第三章存儲系統

存儲器的邏輯就是通過一個時序控制邏輯控制

位址寄存器用來存儲要放入或取出的位址

存儲體用來存放資料

資料寄存器用來存放要放入或取出的資料

計算機組成第三章存儲系統

這是一個存儲元(用來存放1位資料),如何實作存入和取出呢

當要取出時,時序控制邏輯會給上面那個開關一個信号,讓他打開(同樣的,存入的時候時序控制邏輯也會給一個信号,當然是不同的信号)

多個存儲元合并起來就是存儲單元

多個存儲單元合并起來就是存儲體

計算機組成第三章存儲系統

這種形式的存儲器有一個壞處,一次隻能讀一行存儲單元,是以需要一個譯碼器來幫助分析位址

是以總容量=存儲單元個數*存儲字長

計算機組成第三章存儲系統

這就是總的電路圖

片選線:用來控制控制電路的開關(低電平有效/高電平有效)

讀/寫控制線:因為一次隻能執行一個操作,是以讀和寫操作可以放在一根線上

然後位址線把位址存入MAR,經過譯碼器讀取或寫入

讀取的話就把資料放入MDR再到資料線,寫入的話就把MDR中的資料寫入

計算機組成第三章存儲系統

這是存儲器的邏輯圖

上面有n條位址線,說明有n位位址→ 2 n 2^{n} 2n個存儲單元

有n條資料線,說明有存儲單元為n位字長

總容量=存儲單元個數*存儲字長

存儲晶片的描述:

8*8位

常見的描述:

8K8位→ 2 13 ∗ 8 b = 8 K B 2^{13}*8b=8KB 213∗8b=8KB

8K1位→ 2 13 ∗ 1 b = 8 K b = 1 K B 2^{13}*1b=8Kb=1KB 213∗1b=8Kb=1KB

64K*16位→ 2 16 ∗ 16 b = 128 K B 2^{16}*16b=128KB 216∗16b=128KB

K : 2 10 M : 2 20 G : 2 30 T : 2 40 K:2^{10} \qquad M:2^{20} \qquad G:2^{30} \qquad T:2^{40} K:210M:220G:230T:240

是以就可以的出8K= 2 3 ∗ 2 10 2^{3}*2^{10} 23∗210

尋址

計算機組成第三章存儲系統

總容量是1KB

是以位址線有10根

按位元組尋址:1K個單元,每個單元1B

按字尋址:256個單元,每個單元4B

按半字尋址:512個單元,每個單元2B

按雙字尋址:128個單元,每個單元8B

這個應該不是很難了解

半導體存儲器RAM

易失性存儲器(就是斷電以後東西就沒了)

計算機組成第三章存儲系統

這其實就是上面的講的邏輯圖

1.存儲矩陣:由大量相同的位存儲單元陣列構成。

2.譯碼驅動:将來自位址總線的位址信号翻譯成對應存儲單元的選通信号,該信号在讀寫電路的配合下完成對被選中單元的讀/寫操作。

3.讀寫電路:包括讀出放大器和寫入電路,用來完成讀/寫操作。

4.讀/寫控制線:決定晶片進行讀/寫操作。

5.片選線:确定那個存儲晶片被選中,可用于容量擴充

6.位址線:是單向輸入的,其位數與存儲字的個數有關。

7.資料線:是雙向的,其位數與讀出或寫入的資料位數有關。

8.資料線數和位址線數共同反映存儲晶片容量的大小。

如位址線10根,資料線8根,則晶片容量-210X8-8K位。

半導體随機存取存儲器

計算機組成第三章存儲系統

一般存儲器都是用半導體做的,但是會有不同的形式,有SRAM(靜态存儲器)和DRAM(動态存儲器)

剩餘的就是他們的參數對比表

存儲資訊:這是存儲模式,SRAM利用雙穩态,DRAM利用電容(當然這兩種都需要插電,沒電直接GG)

破壞性讀出:觸發器的狀态可以直接檢視,檢視時并不會改變;電容是利用有沒有電來判别的,檢測的時候回導緻電荷流失,會破壞

需要重新整理:觸發器的狀态是穩定的,電容是不穩定,會流失的,是以觸發器不需要重新整理,電容需要

送行列位址:SRAM中并不是行=列矩陣,行列不一定位數相等,是以需要一次性全部送進去;DRAM中是行=列矩陣,是以可以分兩次送

運作速度:這就不用講了

內建度:觸發器需要6個邏輯元件,電容隻需要1個或者3個,是以內建度高低立刻就出現了

發熱量:不需要多講了吧,快的肯定熱

存儲成本:這個也不用講了吧,內建度低的肯定要更多的錢嘛

經過參數對比,也可以看出SRAM更适合做Cache(高速緩存器),DRAM更适合做主存

DRAM的重新整理
  1. 多久需要重新整理一次?

    重新整理周期:一般為2ms

  2. 每次重新整理多少存儲單元?

    以行為機關,每次重新整理一行存儲單元

    (為什麼要用行列位址?減少選通線的數量)

    計算機組成第三章存儲系統

    可以看出,如果是一個譯碼器直接連接配接的話,當n大到一定的程度以後,可能會需要很多很多的線

    當使用行列的方式的話,會少很多,一個是 2 n 2^{n} 2n根,行列的話就是 2 n 2 ∗ 2 2^{\frac{n}{2}}*2 22n​∗2

    會少将近一半,大大節省了材料

  3. 如何重新整理?

    有硬體支援,讀出。行的信 息後重新寫入,占用1個讀/寫周期

  4. 在什麼時刻重新整理?

    存取周期

    假設DRAM内部結構排列成128X 128的形式,讀/寫周 期0.5us

    2ms共2ms/0.5us = 4000個周期

有三個思路

思路一:每次讀寫完都重新整理一行

→系統的存取周期變為1us

前0.5us時間用于正常讀寫

後0.5us時間用于重新整理某行

思路二: 2ms内集中安排時間全部重新整理

→系統的存取周期還是0.5us

有一-段時間專門用于重新整理,

無法通路存儲器,稱為訪存“死區”

思路三: 2ms内每行重新整理1次即可

→2ms内需要産生128次重新整理請求

每隔2ms/128= 15.6us - . 次

每15.6us内有0.5us的“死時間

這三種應該挺好了解(1、讀出來直接重新整理2、同一重新整理3、在這個時間端内重新整理就行)

SRAM的讀/寫周期
計算機組成第三章存儲系統

這次主要是片選線( C S ‾ \overline{CS} CS低電平有效),是以有效時間的位址被讀入,然後進行資料處理,但是會有一定的延後,因為需要進行資料輸出和恢複

計算機組成第三章存儲系統

寫入和讀差不多,隻是多了一個寫入的操作

知識點總結

計算機組成第三章存儲系統

半導體存儲器ROM

隻讀存儲器,用來存放一些固定的指令(就好比電腦的啟動指令之類的)

計算機組成第三章存儲系統

基本概念

計算機組成第三章存儲系統

這是所有的存儲器,可以分為高速緩沖存儲器、主存儲器和輔助存儲器

計算機組成第三章存儲系統

存儲器也可以用不同的材料

  1. 磁表面存儲器:磁盤(選取一塊區域進行順序存取)、錄音帶(順序存儲,就是必須按順序找下去)
  2. 磁芯存儲器
  3. 半導體存儲器:目前最常用材料(随機存取,通過位置直接尋找)
  4. 光存儲器:CD光牒

這裡隻有半導體存儲器具有易失性,也就是斷電則資料消失;

分類的圖

計算機組成第三章存儲系統

存儲器性能名額

  1. 存儲容量:存儲字數*字長
  2. 機關成本:每位價格=總成本/總容量
  3. 存儲速度:資料傳輸率=資料的寬度/存儲周期

    解釋一下

    ①存取時間(Ta):存取時間是指從啟動一-次存儲器操作到完成該操作所經曆的時間,分為讀出時間和寫入時間。

    ②存取周期™ :存取周期又稱為讀寫周期或通路周期。它是指存儲器進行一次完整的讀寫操作所需的全部時間,即連續兩次獨立地通路存儲器操作(讀或寫操作)之間所需的最小時間間隔。

    ③主存帶寬(Bgn) :主存帶寬又稱資料傳輸率,表示每秒從主存進出資訊的最大數量,機關為字/秒、位元組/秒(B/s) 或位/秒(b/s)

存儲器的階層化結構

計算機組成第三章存儲系統

Cache是用來進行速度的提升,輔存用來提升容量

速度是硬體自動完成的

容量是硬體+作業系統完成的

階層化結構對比

計算機組成第三章存儲系統

知識點回顧

計算機組成第三章存儲系統

主存與CPU的連接配接

主存容量擴充—位擴充

計算機組成第三章存儲系統

這是邏輯結構圖

由于存儲器是8K*1位,是以位址線有13位(因為8K= 2 13 2^{13} 213b),資料線是1根,因為隻有1位,CS是片選線、WE是讀寫控制線

而PCU則是16位的位址線和8位的資料線

當然,由于資料線是8位,是以就需要8塊存儲器,是以模式就和上面相似,都用13位位址線去控制,然後提出各自的資料,放入資料線中

位擴充就是使用多個位(就比如這裡使用了8個)

主存容量擴充—字擴充

計算機組成第三章存儲系統

字擴充不同的是他用多的不是資料位,而是傳入的資料字(就是傳進去幾個)

如上圖所示,用13位控制位址,用13、14位來控制目标存儲器

這裡用的是線選法,也就是13、14隻能是01或者10,也就是n條線n個信号(也可以用一根線控制兩個,如果是1的時候可以是取非以後送入另一個,叫做譯碼片選法)

譯碼片選法:一個位址就是0xxx……,另一個就是1xxx……,這裡就是n條線 2 n 2^{n} 2n個信号(也就是通過譯碼器實作)

這個就是字擴充

而低電平有效和高電平有效的差距就是是否取非

而是否工作是通過使能端進行實作的(使能端也分高低電平工作模式)

對比圖

計算機組成第三章存儲系統

而實際中兩種擴充可能會同時出現,是以就會出現

計算機組成第三章存儲系統

設CPU有16根位址線,8根資料線,井用MREQ作為訪存控制信号(低電平有效),用WR作為讀/寫控制信号(高電平為讀,低電平為寫)。現有下列存儲晶片: 1KX 4位RAM, 4KX 8位RAM, 8K x 8位RAM,2KX 8位ROM, 4K x 8位ROM, 8K X 8位ROM及74LS1 38譯碼器和各種門電路。畫出CPU與存儲器的連接配接圖,要求:

1)主存位址空間配置設定: 6000H~ 67FFH為系統程式區; 6800H~6BFFH為使用者程式區。

2)合理選用上述存儲晶片,說明各選幾片?

3)詳細畫出存儲晶片的片選邏輯圖。

(系統程式區用ROM,使用者程式區用RAM)

步驟:

确認位址線、資料線,選擇存儲晶片

CPU資料線8根是以存儲器就是8位

位址配置設定:6000H~67FFH→67FFH-6000H+1=800H, 8 ∗ 1 6 2 = 2 11 = 2 K 8*16^{2}=2^{11}=2K 8∗162=211=2K→用1片2K8位ROM(位址線11根)

6800~6BFFH→6BFFH-6800H+1=400H, 4 ∗ 1 6 2 = 2 10 = 1 K 4*16^{2}=2^{10}=1K 4∗162=210=1K→用2片1K4位RAM,進行位擴充(位址線10根)

位址線:

6000H ~67FFH→0110 0000 0000 0000 ~ 0110 0111 1111 1111

6800H~6BFFH→0110 1000 0000 0000 ~ 0110 1011 1111 1111

位址線就是後面11/10根,(當然是用多的,也就是11根)

然後就是用3位做譯碼器輸入(因為這裡是74LS138譯碼器,是以用3個)

還可以用前面兩位作為使能端,另一個 M R E Q ‾ \overline{MREQ} MREQ​作為使能端(當然這裡需要同一種電平有效模式)

計算機組成第三章存儲系統

這裡解釋一下這個與門的作用:因為程式區的 A 10 A_{10} A10​其實是沒有用,并且必須是0才可以,是以就是和 Y 5 ‾ \overline{Y_{5}} Y5​​與後取非才行

步驟回顧

計算機組成第三章存儲系統

知識點回顧

計算機組成第三章存儲系統

雙口RAM

用來提高存儲器的工作速度(為了比對上CPU的工作速度)

計算機組成第三章存儲系統

這是邏輯結構圖,其實就是多了一套端口和一個CPU來進行讀寫,但是會有以下一些情況

1.兩個端口不同時對同–位址單元存取資料。

2.兩個端口同時對同一位址單元讀出資料。

3.兩個端口同時對同一位址單元寫入資料。(這會導緻寫入錯誤,不知道哪個寫入成功)

4.兩個端口同時對同一位址單元,一個寫入資料,另一個讀出資料。(這回導緻讀出錯誤,可能是先寫入,再讀出)

解決的方法是:

做一個“忙”信号,當一邊的端口被通路時,另一個端口不允許被通路

多子產品存儲器

有兩種形式,單體多字存儲器和多體并行存儲器

單體多字存儲器

計算機組成第三章存儲系統

直接每行多個存儲單元,合并到一個存儲器裡面

每個存儲單元存儲m個字,總線寬度也為m個字,一次并行讀出m個字

指令和資料在主存内必須是連續存放的

(如要隻要一列資料,就會導緻讀取時極大的浪費,很少使用)

多體并行存儲器

計算機組成第三章存儲系統

這個有點像字擴充(但是又有點不同)

每個子產品都有相同的容量和存取速度。

各子產品都有獨立的讀寫控制電路、位址寄存器和資料寄存器。

它們既能并行工作,又能交叉工作。

多體并行存儲體的編址模式

計算機組成第三章存儲系統

很明顯其實就是高低位的差別,一個體号在前面,一個體号在後面,這也會導緻一部分的差別

計算機組成第三章存儲系統

高低位會導緻有所不同,最明顯的就是連續取n個存儲字的時候耗時不同

如上圖所示就是高位交叉編址明顯就是擴容的作用,而低位交叉編址可以起到加速的作用

例題:

流水線(低位交叉編址的多提存儲器)

微觀(計算題)

子產品數m=4,存儲周期為T,字長W,資料總線寬度為W,總線傳輸周期為r,連續存取n個字,求交叉存儲器的帶寬。

有m個存儲體,存儲周期為T,字長W,每隔r時間啟動下一個存儲體,連續存取n個字,求存儲器的存取速率。

連續存取n個字耗時=T+(n-1)r (條件是m≥T/r,一般是m=T/r)

帶寬= n ∗ W T + ( n − 1 ) r \frac{n*W}{T+(n-1)r} T+(n−1)rn∗W​

宏觀(概念題)

一個存儲周期内。交叉存儲器可以提供的資料量為單個子產品的m倍。

(可以并行工作如總線寬度為mW時,可以同時取出長度為mW的資料)

高速緩沖存儲器

局部性原理性能分析

空間局部性:在最近的未來要用到的資訊(指令和資料),很可能與現在正在使用的資訊在存儲空間上是鄰近的。

時間局部性:在最近的未來要用到的資訊,很可能是現在正在使用的資訊。

計算機組成第三章存儲系統

可以從圖中看出

每次CPU從主存取出一個資料需要1000ns,做一個運算需要5ns,是以一個資料的處理就需要1000*2+5ns

而當使用一個Cache(高速緩存存儲器)的時候,讀入一塊資料需要1000ns,CPU取出一個資料需要5ns,運算5ns以及寫入5ns,是以一個資料的處理就需要1000+53=1015(但是他讀入的是一塊,如果是十個,其實十個的資料就是1000+35*10=1150ns,就會比隻有主存的時間少很多)

屬性:

命中率H:CPU欲通路的資訊已在Cache中的比率

設一個程式執行期間,Cache的總命中次數為 N c N_{c} Nc​,通路主存的總次數為 N m N_{m} Nm​,則H= N c N c + N m \frac{N_{c}}{N_{c}+N_{m}} Nc​+Nm​Nc​​

缺失率M=1-H

設 t c t_{c} tc​為命中時的Cache通路時間, t m t_{m} tm​為未命中時的通路時間(這個其實是通路主存時間+通路Cache時間,因為我的教課書上對于 t m t_{m} tm​的定義是通路主存時間,注意昂!!!)

Cache-主存 系統的平均通路時間 T a T_{a} Ta​為

T a = H ∗ t c + ( 1 − H ) ∗ t m T_{a}=H*t_{c}+(1-H)*t_{m} Ta​=H∗tc​+(1−H)∗tm​

例題:

[例3-2]假設Cache的速度 是主存的5倍,且Cache的命中率為95%,則采用Cache後 ,存儲器性能提高多少(設Cache和主 存同時被通路,若Cache 命中則中斷通路主存) ?

設Cache的存取周期為1,則主存的存取周期為5t

Cache和主存同時通路,不命中時通路時間為5t

故系統的平均通路時間為 T a T_{a} Ta​=0.95t+ 0.055t= 1.21t(系統的效率 e = t / 1.2 t = 83.3 % e=t/1.2t=83.3\% e=t/1.2t=83.3%)

設每個周期可存取的資料量為S,

則存儲系統帶寬為S/1.21t,

不采用Cachel時帶寬為S /51t,

故性能為原來的 S / 1.2 t S / 5 t = 5 t 1.2 t \frac{S/1.2t}{S/5t}=\frac{5t}{1.2t} S/5tS/1.2t​=1.2t5t​≈4.17倍,即提高了3.17倍。

若采用先通路Cache再訪間主存的方式

不命中時,通路Cache耗時為t,發現不命中後再通路主存耗時為5t,總耗時為6t

故系統的平均通路時間為 T a = 0.95 ∗ t + 0.05 ∗ 6 t = 1.25 t T_{a}=0.95*t+0.05*6t=1.25t Ta​=0.95∗t+0.05∗6t=1.25t(系統的效率 e = t / 1.25 t = 80 % e=t/1.25t=80\% e=t/1.25t=80%)

故性能為原來的 5 t 1.25 t = 4 倍 \frac{5t}{1.25t}=4倍 1.25t5t​=4倍,即提高了3倍

位址映射方式

主存當中一塊資料是如何移到Cache上的

(1)空位随意放:全相聯映射

計算機組成第三章存儲系統

他這個就是随意放進去,然後在放進去的位置前面放上他在主存裡面的位置,在主存裡面放在Cache裡面的位置,互相對應(這個位置可以從位址位數裡面表現出來)

計算機組成第三章存儲系統

主存位址對Cache的映射

(2)對号入座:直接映射

計算機組成第三章存儲系統

這個就類似于哈希表,按照一定的算法,将資料按位置放入,是以他需要在主存内的具體位置(防止撞車),然後在主存内放入Cache字塊位址和字塊内位址

計算機組成第三章存儲系統

這個就是主存位址對Cache的映射

舉例:

假定資料在主存和Cache間的傳送機關為512B

Cache大小 2 13 = 8 K B = 16 行 ∗ 512 B / 行 2^{13}=8KB=16行*512B/行 213=8KB=16行∗512B/行

主存大小 2 20 = 1024 K B = 2048 塊 ∗ 512 B / 塊 2^{20}=1024KB=2048塊*512B/塊 220=1024KB=2048塊∗512B/塊

如何對0220CH單元進行通路

化開為0000 0010 0010 1100

因為Cache傳送機關是512B,是以Cache塊内位址為9位

Cache大小是16*512,是以Cache行号為4位

剩餘前面的7位都是主存位址,即标記

(3)按号分組,組内随意放:組相聯映射

第一種方法對Cache的使用率很高,但是不是很好找

第二種方法很好找,但是由于算法的固定位置,可能對Cache的使用率不是很高

第三種直接采用了他們兩種方法的優點,既分組,又互相映射

計算機組成第三章存儲系統

這個就是主存位址對Cache的映射

在Cache裡面存入主存位置,在主存裡面放入Cache組位置和具體位址(類似于2-1第二組第一個位置)

三種方法的比較

計算機組成第三章存儲系統

替換算法

替換算法,就是Cache滿了怎麼辦(或者就是相應的位址映射方式的可用空間滿了,咋辦)

寫政策,Cache的内容被修改後與主存保持一緻

替換算法

1.随機算法(RAND):随機地确定替換的Cache塊。它的實作比較簡單,但沒有依據程式通路的局部性原理,故可能命中率較低。

2.先進先出算法(FIFO):選擇最早調入的行進行替換。它比較容易實作,但也沒有依據程式通路的局部性原理,可能會把-些需要經常使用的程式塊( 如循環程式)也作為最早進入Cache的塊替換掉。

3.近期最少使用算法(LRU):依據程式訪間的局部性原理選擇近期内長久未通路過的存儲行作為替換的行,平均命中率要比FIFO要高,是堆棧類算法。

LRU算法對每行設定一一個計數器,Cache每命中一次, 命中行計數器清0,而其他各行計數器均加1,需要替換時比較各特定行的計數值,将計數值最大的行換出。

4.最不經常使用算法(LFU):将- -段時間内被通路次數最少的存儲行換出。每行也設定一個計數器,新行建立後從o開始計數,每通路一次,被通路的行計數器加1,需要替換時比較各特定行的計數值,将計數值最小的行換出。

這四種方式應該挺好了解的,就是第一種方式極其傻,是以隻需要了解,很少使用

例題:

設Cache由8個塊構成,CPU依次通路的主存位址塊号為: 4, 6, 12, 4, 8, 14, 22, 6, 4, 11, 5,2(十進制),求:

計算機組成第三章存儲系統

1)假設位址映射方式為全相聯映射,在采用FIFO、LRU、LFY替換算法時,分别求Cache命中次數。

這就是依照順序,把Cache中沒有的放入,就是

放入4,放入6,放入12,命中4(因為4已經在Cache中,是以命中),放入8,放入14,放入22,命中6,命中4,放入11,放入5,這時候2沒有地方放,因為滿了,就要用到對應的替換算法

FIFO:先進先出,把4替換成2

LRU:近期最少通路,會出現歧義(是0的太多了,是以在作業系統中會有解釋)

LFU:最不經常通路,會出現歧義(這個也是0的太多了)

是以命中次數就是3

2)假設位址映射方式為直接映射,求Cache命 中次數。

可以從圖中看出直接映射的方式就是對8取模(并且替換也是直接替換)

是以過程如下

放入4(位置4),放入6(位置6),12替換4(位置4),4替換12(位置4),放入8(位置0),14替換6(位置6),22替換14(位置6),6替換22(位置6),命中4,放入11(位置3),放入5(位置5),放入2(位置2)

是以命中次數為1

3)假設位址映射方式為二路組相聯映射,在采用FIFO、 LRU、 LFU替換算法時,分别求Cache命中次數。

二路組相聯映射

就是兩個塊一組,根據題目就是分成4組,然後放入

是以過程如下

放入4(0-0),放入6(2-0),放入12(0-1),命中4,8替換(FIFO:4,0-0;LRU:12,0-1;LFU:12,0-1),放入14(2-1),22替換(FIFO:6,2-0;LRU、LFU),6替換/命中,4替換/命中,放入11(3-0),放入5(1-0),2替換

可以具體看出,命中次數因算法不同而不同,是以不做具體分析(其實就是懶)

FIFO的具體過程

計算機組成第三章存儲系統

LRU具體過程

計算機組成第三章存儲系統

寫政策

計算機組成第三章存儲系統

帶有Cache的CPU+主存邏輯圖

這裡當Cache的内容被修改的時候需要和主存保持一緻,是以我們需要把Cache内容協會主存

有以下政策

命中時:

(1)寫回法(write-back):當CPU對Cache寫 命中時,隻修改Cache的内容,而不立即寫入主存,隻有當此塊被換出時才寫回主存

(2)全寫法(寫直通法,write-through): 當CPU對Cache寫命中時,必須把資料同時寫入Cache和主存,一般使用寫緩沖(write buffer)(當然會有一個寫入緩存器,慢慢寫入,釋放CPU去工作;這也會有問題,如果寫的太頻繁,會導緻寫緩沖溢出)

未命中時:

(1)寫配置設定法:把主存中的塊調入Cache,在Cache中修改。搭配寫回法使用

(2)非寫配置設定法:隻寫入主存,不調入Cache,搭配全寫法使用

是以還有一種結構:多級Cache

計算機組成第三章存儲系統

為了湊速度,也是拼了

Cache例題訓練

設主存位址空間大小為1KB,按位元組編址,Cache由8個塊構成,每個Cache塊大小為16B, CPU依次通路以下位址:

0001001110、1001110010、 0001001111、 001 1000010、0101001000、1011110010、1111010000、0011001001 (十進制為78、626、79、194、 328、 754、 976、201), 求:

計算機組成第三章存儲系統

1)假設位址映射方式為全相聯映射,在采用FIFO、LRU、 LFU替換算法時,分别求Cache命中次數。

可以看出主存空間是1KB= 2 10 B 2^{10}B 210B,是以就是10位位址,然後Cache大小是16B,是以大小為 2 4 2^{4} 24,位址位數為4位

是以主存字塊标記就是6位,字塊内位址就是4位

計算機組成第三章存儲系統

是以每次放進去的有16B資料,不是我們了解時候的一位

計算機組成第三章存儲系統

可以看第一張圖發現命中次數為2

2)假設位址映射方式為直接映射,求Cache命中次數。

計算機組成第三章存儲系統

直接映射的方式,這裡需要有一個Cache字塊位址,為什麼是3位呢(因為每個Cache塊位址是16B,但是有8塊,所有還有一個 2 3 2^{3} 23),最後主存字塊位址标記就是10-3-4=3

計算機組成第三章存儲系統

可以看出,第一個其實是用Cache字塊位址來定位,标記是主存字塊位址,放入的是16B的資料

3)假設位址映射方式為二路組相聯映射,在采用FIFO、LRU、 LFU替換算法時,分别求Cache 命中次數。

計算機組成第三章存儲系統

這裡和第二種方法不同的就是Cache字段位址變成了組位址,組位址長度就是(8/2=塊數/x路)= 2 2 2^{2} 22,兩位

最終填充也是如下所示

計算機組成第三章存儲系統

4)假設其它配置同3),采用寫回法和直寫法時,Cache的總容量分别為多少?

計算機組成第三章存儲系統

這個應該也挺好了解

知識點回顧

計算機組成第三章存儲系統

工作原理

計算機組成第三章存儲系統

這在Cache中間其實還是會加很多的輔助硬體

知識點

計算機組成第三章存儲系統

虛拟存儲器

是一個邏輯模型

功能:使用者給出一個位址,叫做虛位址或邏輯位址,虛拟存儲器要給出該位址對應的資料

實作:由輔助硬體将虛位址映射到主存當中的某個單元,主存單元位址稱為實位址或實體位址

虛拟存儲器的種類:

(1)頁式虛拟存儲器

虛拟空間與主存空間都被劃分成同樣大小的頁,主存的頁稱為實頁,虛存的頁稱為虛頁

計算機組成第三章存儲系統

這裡其實就是一個映射關系,虛頁号+頁表基址寄存器可以合成一個頁表項位址,經過查表得到實頁号,然後通過頁内位址進行資料的存取

(2)段氏虛拟存儲器

段式虛拟存儲器中的段是按程式的邏輯結構劃分的,各個段的長度因程式而異。

虛拟位址分為兩部分:段号和段内位址。

段表:每一行記錄了與某個段對應的段号、裝入位、段起點和段長等資訊。

由于段的長度可變,是以段表中要給出各段的起始位址與段的長度。

計算機組成第三章存儲系統

這個和頁式的差別就是,他沒有直接對應的頁内位址,是以他可以根據資料的長度來配置設定,而頁式虛拟存儲器的頁大小固定,會造成浪費

(3)段頁式虛拟存儲器

把程式按邏輯結構分段,每段再劃分為固定大小的頁

主存空間也劃分為大小相等的頁

程式對主存的調入、調出仍以頁為基本傳送機關。

每個程式對應一個段表, 每段對應一個頁表。(這邊會因為頁表過大而出現一個多級頁表的概念,這塊内容在作業系統裡面會詳細解釋)

虛拟位址:段号+段内頁号+頁内位址

快表

頁表、段表存放在主存中,收到虛拟位址後要先通路主存,查詢頁表、段表,進行虛實位址轉換。(其實就是放在Cache中叫快表,放在主存中叫慢表)

放在主存中的頁表稱為慢表(Page)。

通路過程:

計算機組成第三章存儲系統

不過一般是兩邊同時通路,如果命中就中斷對主存的操作

例題:

計算機組成第三章存儲系統

這裡就直接上圖了,因為文字比較蒼白,順便解釋一下位址的由來

主存位址:實頁号16位+頁内位址12位

虛拟位址:虛頁号20位+頁内位址12位

首先是頁内位址:4KB= 2 12 2^{12} 212B,是以頁内位址就是12位

然後是實頁号:256MB= 2 28 2^{28} 228B,是以實頁号=28-12=18位

然後是虛頁号:4GB= 2 32 2^{32} 232B,是以虛頁号=28-12=20位

然後是位址變換,有效位表示表内的資料是否有意義,标記表示實頁号,頁框号表示虛頁号,直接轉換就行

知識點回顧

計算機組成第三章存儲系統

繼續閱讀