存儲系統二

4.存儲系統二,相聯存儲器,高速緩存cache
(1)相聯存儲器
關聯存儲器(associative memory)也稱爲按內容訪問存儲器(content addressed memory)或簡稱爲TLB(Translation Lookaside Buffer)它是一種不根據地址而是根據存儲內容來進行存取的存儲器,可以實現快速地查找快表.相聯存儲器的基本原理是把存儲單元所存內容的某一部分作爲檢索項(即關鍵字項),去檢索該存儲器,並將存儲器中與該檢索項符合的存儲單元內容進行讀出或寫入。相聯存儲器可用在cache中,在虛擬存儲器中用來作段表、頁表或快表存儲器,也用在數據庫和知識庫中。
(2)Cache
高速緩衝存儲器是存在於主存與CPU之間的一級存儲器, 由靜態存儲芯片(SRAM)組成,容量比較小但速度比主存高得多, 接近於CPU的速度。在計算機存儲系統的層次結構中,是介於中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一起構成一級的存儲器。高速緩衝存儲器和主存儲器之間信息的調度和傳送是由硬件自動進行的。
高速緩衝存儲器最重要的技術指標是它的命中率。主要由三大部分組成:
(a)Cache存儲體:存放由主存調入的指令與數據塊。
(b)地址轉換部件:建立目錄表以實現主存地址到緩存地址的轉換。
(c)替換部件:在緩存已滿時按一定策略進行數據塊替換,並修改地址轉換部件。
在有高速緩衝存儲器的計算機系統中,中央處理器存取主存儲器的地址劃分爲行號、列號和組內地址三個字段。於是,主存儲器就在邏輯上劃分爲若干行;每行劃分爲若干的存儲單元組;每組包含幾個或幾十個字。高速存儲器也相應地劃分爲行和列的存儲單元組。二者的列數相同,組的大小也相同,但高速存儲器的行數卻比主存儲器的行數少得多。
當中央處理器存取主存儲器時,硬件首先自動對存取地址的列號字段進行譯碼,以便將聯想存儲器該列的全部行號與存取主存儲器地址的行號字段進行比較:若有相同的,表明要存取的主存儲器單元已在高速存儲器中,稱爲命中,硬件就將存取主存儲器的地址映射爲高速存儲器的地址並執行存取操作;若都不相同,表明該單元不在高速存儲器中,稱爲脫靶,硬件將執行存取主存儲器操作並自動將該單元所在的那一主存儲器單元組調入高速存儲器相同列中空着的存儲單元組中,同時將該組在主存儲器中的行號存入聯想存儲器對應位置的單元內。
當出現脫靶而高速存儲器對應列中沒有空的位置時,便淘汰該列中的某一組以騰出位置存放新調入的組,這稱爲替換。確定替換的規則叫替換算法,常用的替換算法有:最近最少使用算法(LRU)、先進先出法(FIFO)和隨機法(RAND)等。替換邏輯電路就是執行這個功能的。另外,當執行寫主存儲器操作時,爲保持主存儲器和高速存儲器內容的一致性,對命中和脫靶須分別處理。
設置高速緩衝存儲器(Cache)是解決存取速度的重要方法。在CPU和主存中間設置高速緩衝存儲器,構成高速緩存(Cache)-主存層次,要求Cache在速度上能跟得上CPU的要求。Cache-主存間的地址映象和調度吸取了比它較早出現的主-輔存存儲層次的技術,不同的是因其速度要求高,不是由軟、硬件結合而完全由硬件來實現。
地址映象與轉換
地址映象是指某一數據在內存中的地址與在緩衝中的地址,兩者之間的對應關係。下面介紹三種地址映象的方式。
1.全相聯方式
這裏寫圖片描述
地址映象規則:主存的任意一塊可以映象到Cache中的任意一塊
(1) 主存與緩存分成相同大小的數據塊。
(2) 主存的某一數據塊可以裝入緩存的任意一塊空間中。如果Cache的塊數爲Cb,主存的塊數爲Mb,則映象關係共有Cb×Mb種。
目錄表存放在相關(聯)存儲器中,其中包括三部分:數據塊在主存的塊地址、存入緩存後的塊地址、及有效位(也稱裝入位)。由於是全相聯方式,因此,目錄表的容量應當與緩存的塊數相同。
優點:命中率比較高,Cache存儲空間利用率高。
缺點:訪問相關存儲器時,每次都要與全部內容比較,速度低,成本高,因而應用少。
2.直接相聯方式
這裏寫圖片描述
地址映象規則: 主存儲器中一塊只能映象到Cache的一個特定的塊中。
(1) 主存與緩存分成相同大小的數據塊。
(2) 主存容量應是緩存容量的整數倍,將主存空間按緩存的容量分成區,主存中每一區的塊數與緩存的總塊數相等。
(3) 主存中某區的一塊存入緩存時只能存入緩存中塊號相同的位置。
主存中各區內相同塊號的數據塊都可以分別調入緩存中塊號相同的地址中,但同時只能有一個區的塊存入緩存。由於主、緩存塊號相同,因此,目錄登記時,只記錄調入塊的區號即可。主、緩存塊號及塊內地址兩個字段完全相同。目錄表存放在高速小容量存儲器中,其中包括二部分:數據塊在主存的區號和有效位。目錄表的容量與緩存的塊數相同。
優點:地址映象方式簡單,數據訪問時,只需檢查區號是否相等即可,因而可以得到比較快的訪問速度,硬件設備簡單。
缺點:替換操作頻繁,命中率比較低。
3.組相聯映象方式
這裏寫圖片描述
組相聯的映象規則:
(1) 主存和Cache按同樣大小劃分成塊。
(2) 主存和Cache按同樣大小劃分成組。
(3) 主存容量是緩存容量的整數倍,將主存空間按緩衝區的大小分成區,主存中每一區的組數與緩存的組數相同。
(4) 當主存的數據調入緩存時,主存與緩存的組號應相等,也就是各區中的某一塊只能存入緩存的同組號的空間內,但組內各塊地址之間則可以任意存放,即從主存的組到Cache的組之間採用直接映象方式;在兩個對應的組內部採用全相聯映象方式。
主存地址與緩存地址的轉換有兩部分,組地址是按直接映象方式,按地址進行訪問,而塊地址是採用全相聯方式,按內容訪問。組相聯的地址轉換部件也是採用相關存儲器實現。
優點:塊的衝突概率比較低,塊的利用率大幅度提高,塊失效率明顯降低。
缺點:實現難度和造價要比直接映象方式高。
常用的替換算法有下面三種。
1. 最不經常使用(LFU)算法:
LFU(Least Frequently Used,最不經常使用)算法將一段時間內被訪問次數最少的那個塊替換出去。每塊設置一個計數器,從0開始計數,每訪問一次,被訪塊的計數器就增1。當需要替換時,將計數值最小的塊換出,同時將所有塊的計數器都清零。

這種算法將計數週期限定在對這些特定塊兩次替換之間的間隔時間內,不能嚴格反映近期訪問情況,新調入的塊很容易被替換出去。
2. 近期最少使用(LRU)算法:
LRU(Least Recently Used,近期最少使用)算法是把CPU近期最少使用的塊替換出去。這種替換方法需要隨時記錄Cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。每塊也設置一個計數器,Cache每命中一次,命中塊計數器清零,其他各塊計數器增1。當需要替換時,將計數值最大的塊換出。
LRU算法相對合理,但實現起來比較複雜,系統開銷較大。這種算法保護了剛調入Cache的新數據塊,具有較高的命中率。LRU算法不能肯定調出去的塊近期不會再被使用,所以這種替換算法不能算作最合理、最優秀的算法。但是研究表明,採用這種算法可使Cache的命中率達到90%左右。
3. 隨機替換
最簡單的替換算法是隨機替換。隨機替換算法完全不管Cache的情況,簡單地根據一個隨機數選擇一塊替換出去。隨機替換算法在硬件上容易實現,且速度也比前兩種算法快。缺點則是降低了命中率和Cache工作效率。
Cache命中率除了和替換算法有關外,還與Cache的容量及塊的大小有關。
Cache和主存的效率計算
第一,看命中率的定義:CPU欲訪問的信息已經在Cache中的比率稱之爲命中率。
設程序在執行期間,Cache的命中次數是Nc,訪問主存的次數是Nm,則命中率H=Nc/(Nc+Nm),Tc是cache的存取時間。Tm爲主存的訪問時間。
平均訪問時間Ta = H⋅Tc+(1−H)⋅Tm.
看一道習題理解兩種策略的不同:同時訪問Cache和主存,Cache命中時中斷訪存 || 先訪問Cache,沒有時再訪問主存調入Cache再從Cache中拿數據。
例:假設Cache的訪問速度是主存的5t,且Cache的命中率是95%,則採用Cache後,存儲器的存儲性能提高多少?
解:同時訪主存時:Cache存儲週期是t,主存的存儲週期是5t
則平均訪問時間:Ta = 0.95t + 0.05 * 5t = 1.2t
主存性能:5t/1.2t = 4.17倍
不同時訪主存時,在不命中的時候用時就不是5t,而是6t
於是:Ta = 0.95t + 0.05 * 6t = 1.25t
主存性能:5t/1.25 = 4倍
即不同時訪問時,在訪問Cache失敗時耽誤了一點點時間,計算不命中的時間時加上訪問Cache用時即可。

發佈了64 篇原創文章 · 獲贊 116 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章