高速緩沖存儲器的功能、結構與工作原理


2.3 高速緩沖存儲器(Cache)

  2.3.1 高速緩沖存儲器的功能、結構與工作原理

  高速緩沖存儲器是存在于主存與CPU之間的一級存儲器, 由靜態存儲芯片(SRAM)組成,容量比較小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用來存放那些近期需要運行的指令與數據。目的是提高CPU對存儲器的訪問速度。為此需要解決2個技術問題:一是主存地址與緩存地址的映象及轉換; 二是按一定原則對Cache的內容進行替換。
  Cache的結構和工作原理如圖2.3.1所示。

007.gif

  主要由三大部分組成:
  Cache存儲體:存放由主存調入的指令與數據塊。
  地址轉換部件:建立目錄表以實現主存地址到緩存地址的轉換。
  替換部件:在緩存已滿時按一定策略進行數據塊替換,并修改地址轉換部件。

  2.3.2 地址映象與轉換

  地址映象是指某一數據在內存中的地址與在緩沖中的地址,兩者之間的對應關系。下面介紹三種地址映象的方式。

  1.全相聯方式

  地址映象規則:主存的任意一塊可以映象到Cache中的任意一塊
  (1) 主存與緩存分成相同大小的數據塊。
  (2) 主存的某一數據塊可以裝入緩存的任意一塊空間中。
  全相聯方式的對應關系如圖2.3.2所示。如果Cache的塊數為Cb,主存的塊數為Mb,則映象關系共有Cb×Mb種。

008.gif

  圖2.3.3示出了目錄表的格式及地址變換規則。 目錄表存放在相關(聯)存儲器中,其中包括三部分:數據塊在主存的塊地址、存入緩存后的塊地址、及有效位(也稱裝入位)。由于是全相聯方式,因此,目錄表的容量應當與緩存的塊數相同。

010.gif

  舉例:某機主存容量為1M,Cache的容量為32KB, 每塊的大小為16個字(或字節)。 劃出主、緩存的地址格式、 目錄表格式及其容量。
  009.gif
  容量:與緩沖塊數量相同即211=2048(或32K/16=2048)。  優點:命中率比較高,Cache存儲空間利用率高。
  缺點:訪問相關存儲器時,每次都要與全部內容比較,速度低,成本高,因而應用少。

  2.直接相聯方式

  地址映象規則: 主存儲器中一塊只能映象到Cache的一個特定的塊中。
  (1) 主存與緩存分成相同大小的數據塊。
  (2) 主存容量應是緩存容量的整數倍,將主存空間按緩存的容量分成區,主存中每一區的塊數與緩存的總塊數相等。
  (3) 主存中某區的一塊存入緩存時只能存入緩存中塊號相同的位置。
  圖2.3.4示出了直接相聯映象規則。 可見,主存中各區內相同塊號的數據塊都可以分別調入緩存中塊號相同的地址中,但同時只能有一個區的塊存入緩存。由于主、緩存塊號相同,因此,目錄登記時,只記錄調入塊的區號即可。

011.gif

  圖2.3.5示出了主、 緩沖地址格式、目錄表的格式及地址變換規則。主、緩存塊號及塊內地址兩個字段完全相同。目錄表存放在高速小容量存儲器中,其中包括二部分:數據塊在主存的區號和有效位。目錄表的容量與緩存的塊數相同。

012.gif

  地址變換過程:用主存地址中的塊號B去訪問目錄存儲器, 把讀出來的區號與主存地址中的區號E進行比較, 比較結果相等,有效位為1,則Cache命中,可以直接用塊號及塊內地址組成的緩沖地址到緩存中取數;比較結果不相等,有效位為1, 可以進行替換,如果有效位為0,可以直接調入所需塊。
  優點:地址映象方式簡單,數據訪問時,只需檢查區號是否相等即可,因而可以得到比較快的訪問速度,硬件設備簡單。
  缺點:替換操作頻繁,命中率比較低。
  舉例:上例中,主存容量為1M, Cache的容量為32KB,每塊的大小為16個字(或字節)。劃出主、緩存的地址格式、目錄表格式及其容量。
  013.gif
  容量:與緩沖塊數量相同即211=2048(或32K/16=2048)。

  3.組相聯映象方式

  組相聯的映象規則:
  (1) 主存和Cache按同樣大小劃分成塊。
  (2) 主存和Cache按同樣大小劃分成組。
  (3) 主存容量是緩存容量的整數倍,將主存空間按緩沖區的大小分成區,主存中每一區的組數與緩存的組數相同。
  (4) 當主存的數據調入緩存時,主存與緩存的組號應相等,也就是各區中的某一塊只能存入緩存的同組號的空間內,但組內各塊地址之間則可以任意存放, 即從主存的組到Cache的組之間采用直接映象方式;在兩個對應的組內部采用全相聯映象方式。
  圖2.3.6示出了組相聯的映象關系, 圖中緩存共分Cg個組,每組包含有Gb塊; 主存是緩存的Me倍,所以共分有Me個區, 每個區有Cg組,每組有Gb塊。那么, 主存地址格式中應包含4個字段:區號、區內組號、組內塊號和塊內地址。 而緩存中包含3個字段:組號、組內塊號、塊內地址。主存地址與緩存地址的轉換有兩部分,組地址是按直接映象方式,按地址進行訪問,而塊地址是采用全相聯方式,按內容訪問。組相聯的地址轉換部件也是采用相關存儲器實現,見圖2.3.7。
  相關存儲器中每個單元包含有: 主存地址中的區號E與組內塊號B,兩者結合在一起,其對應的字段是緩存塊地址b。相關存儲器的容量,應與緩存的塊數相同。當進行數據訪問時,先根據組號,在目錄表中找到該組所包含的各塊的目錄,然后將被訪數據的主存區號與組內塊號,與本組內各塊的目錄同時進行比較。如果比較相等,而且有效位為“1”則命中。

014.gif

015.gif

   可將其對應的緩存塊地址b送到緩存地址寄存器的塊地址字段,與組號及塊內地址組裝即形成緩存地址。如果比較不相等,說明沒命中,所訪問的數據塊尚沒有進入緩存,則進行組內替換;如果有效位為0,則說明緩存的該塊尚未利用, 或是原來數據作廢,可重新調入新塊。
  優點:塊的沖突概率比較低,塊的利用率大幅度提高,塊失效率明顯降低。
  缺點:實現難度和造價要比直接映象方式高。

  2.3.3 替換策略

  根據程序局部性規律可知:程序在運行中,總是頻繁地使用那些最近被使用過的指令和數據。這就提供了替換策略的理論依據。綜合命中率、實現的難易及速度的快慢各種因素,替換策略可有隨機法、先進先出法、最近最少使用法等。

  1.隨機法(RAND法)

  隨機法是隨機地確定替換的存儲塊。設置一個隨機數產生器,依據所產生的隨機數,確定替換塊。這種方法簡單、易于實現,但命中率比較低。

  2.先進先出法(FIFO法)

  先進先出法是選擇那個最先調入的那個塊進行替換。當最先調入并被多次命中的塊,很可能被優先替換,因而不符合局部性規律。這種方法的命中率比隨機法好些,但還不滿足要求。先進先出方法易于實現,例如Solar-16/65機Cache采用組相聯方式,每組4塊,每塊都設定一個兩位的計數器,當某塊被裝入或被替換時該塊的計數器清為0,而同組的其它各塊的計數器均加1,當需要替換時就選擇計數值最大的塊被替換掉。

  3.最近最少使用法(LRU法)

  LRU法是依據各塊使用的情況, 總是選擇那個最近最少使用的塊被替換。這種方法比較好地反映了程序局部性規律。
  實現LRU策略的方法有多種。 下面簡單介紹計數器法、寄存器棧法及硬件邏輯比較對法的設計思路。
  計數器方法:緩存的每一塊都設置一個計數器,計數器的操作規則是:
  (1) 被調入或者被替換的塊, 其計數器清“0”,而其它的計數器則加“1”。
  (2) 當訪問命中時,所有塊的計數值與命中塊的計數值要進行比較,如果計數值小于命中塊的計數值, 則該塊的計數值加“1”;如果塊的計數值大于命中塊的計數值,則數值不變。最后將命中塊的計數器清為0。
  (3) 需要替換時,則選擇計數值最大的塊被替換。
  例如IBM 370/65機的Cache用組相聯方式,每組4塊,每一塊設置一個2位的計數器,其工作狀態如表2.3.1。

表2.3.1 計數器法實現LRU策略

主存塊地址
塊4
塊2
塊3
塊5
塊號
計數器
塊號
計數器
塊號
計數器
塊號
計數器
Cache塊0
1
10
1
11
1
11
5
00
Cache塊1
3
01
3
10
3
00
3
01
Cache塊2
4
00
4
01
4
10
4
11
Cache塊3
XX
2
00
2
01
2
10
操作
起始狀態
調入
命中
替換

  寄存器棧法:設置一個寄存器棧, 其容量為Cache中替換時參與選擇的塊數。如在組相聯方式中,則是同組內的塊數。堆棧由棧頂到棧底依次記錄主存數據存入緩存的塊號, 現以一組內4塊為例說明其工作情況,如表2.3.2所示,表中1~4為緩存中的一組的4個塊號。

表2.3.2 寄存器棧法實現

緩存操作
初始狀態
調入2
命中塊4
替換塊1
寄存器0
3
2
4
1
寄存器1
4
3
2
4
寄存器2
1
4
3
2
寄存器3
1
1
3

  (1) 當緩存中尚有空閑時,如果不命中,則可直接調入數據塊,并將新訪問的緩沖塊號壓入堆棧,位于棧頂。其他棧內各單元依次由頂向下順壓一個單元,直到空閑單元為止。
  (2) 當緩存已滿,如果數據訪問命中,則將訪問的緩存塊號壓入堆棧,其他各單元內容由頂向底逐次下壓直到被命中塊號的原來位置為止。如果訪問不命中,說明需要替換,此時棧底單元中的塊號即是最久沒有被使用的。所以將新訪問塊號壓入堆棧,棧內各單元內容依次下壓直到棧底,自然,棧底所指出的塊被替換。
  比較對法:比較對法是用一組硬件的邏輯電路來記錄各塊使用的時間與次數。
  假設Cache的每組中有4塊, 替換時,是比較4塊中那一塊是最久沒使用的,4塊之間兩兩相比可以有6種比較關系。如果每兩塊之間的對比關系用一個RS觸發器,則需要6個觸發器(T12,T13,T14,T23,T24,T34), 設T12=0表示塊1比塊2最久沒使用,T12=1表示塊2比塊1最久沒有被使用。 在每次訪問命中或者新調入塊時,與該塊有關的觸發器的狀態都要進行修改。 按此原理,由6個觸發器組成的一組編碼狀態可以指出應被替換的塊。例如,塊1被替換的條件是:T12=0,T13=0,T14=0;塊2被替換的條件是:T12=1,T23=0,T24=0等等。

  2.3.4 Cache的一致性問題

  Cache的內容是主存內容的一部分, 是主存的副本,內容應該與主存一致。由于:
  (1) CPU寫Cache,沒有立即寫主存;
  (2) I/O處理機或I/O設備寫主存。
  從而造成Cache與主存內容的不一致,如圖2.3.8所示。

016.gif

  對Cache進行寫操作時引起的不一致的解決方法:

  1.全寫法亦稱寫直達法(WT法-Write through)

  方法:在對Cache進行寫操作的同時,也對主存該內容進行寫入。
  優點:可靠性較高,操作過程比較簡單。
  缺點:寫操作速度得不到改善,與寫主存的速度相同。

  2.寫回法(WB法-Write back)

  方法:在CPU執行寫操作時,只寫入Cache,不寫入主存。
  優點:速度較高。
  缺點:可靠性較差,控制操作比較復雜。

  2.3.5 Cache性能分析

  1.Cache系統的加速比

  存儲系統采用Cache技術的主要目的是提高存儲器的訪問速度,加速比是其重要的性能參數。Cache存儲系統的加速比SP(Speedup)為:

017.gif

  其中:Tm為主存儲器的訪問周期,Tc為Cache的訪問周期,T則為Cache存儲系統的等效訪問周期,H為命中率。
  可以看出,加速比的大小與兩個因素有關:命中率H及Cache與主存訪問周期的比值Tc/Tm,命中率越高加速比越大。圖2.3.9示出了加速比與命中率的關系。

018.gif

  2.Cache的命中率

  影響Cache命中率的因素很多,如Cache的容量,塊的大小,映象方式,替換策略以及程序執行中地址流的分布情況等等。一般地說,Cache容量越大則命中率越高, 當容量達到一定程度后,容量的增加命中率的改善并不大;Cache塊容量加大, 命中率也明顯增加,但增加到一定值之后反而出現命中率下降的現象;直接映象法命中率比較低,全相聯方式命中率比較高,在組相聯方式中,組數分得越多,則命中率下降。

轉載于:https://www.cnblogs.com/freebye/archive/2005/04/08/133699.html

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

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

相關文章

洛谷 P1417 烹調方案 (01背包拓展)

一看到這道題就是01背包 但是我注意到價值和當前的時間有關。 沒有想太多,直接寫,0分 然后發現輸入方式不對…… 改了之后只有25分 我知道wa是因為時間會影響價值,但不知道怎么做。 后來看了題解,發現我對01背包理解不夠透徹普通0…

LeetCode 77.組合求和

給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重復被選取。 說明: 所有數字(包括 target)都是正整數。解集不能包含重復的組合…

18函數對象19command模式20函數對象在STL中的應用

Item 18. Function ObjectsItem 19. Commands and HollywoodItem 20. STL Function Objects1、unction Objects是什么函數對象聽起來挺嚇人,其實并不神秘,它也是一個類的對象,只不過該類重載了操作符(),使得對象使用以來跟函數一樣。class Fi…

linux df命令功能,Linux df命令簡要介紹

日常工作生活中,我們常需要查看系統當前的磁盤空間使用情況。在windows下,只需簡單點擊我的電腦,就看到帶進度條的系統磁盤使用情況,非常直觀。那linux命令行下如何實現同樣的功能呢?這就是我們今天要介紹的df命令。df…

spring集成RabbitMQ配置文件詳解(生產者和消費者)

1&#xff0c;首先引入配置文件org.springframework.amqp&#xff0c;如下&#xff1a; <dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>1.7.1.RELEASE</version></de…

一天的學習成果:hash輸出,dcache工作原理,include的home directory,fist optype的含義...

最先獲得突破的是解決了下午的崩潰問題。其實原因很簡單&#xff0c;我聲明了一個unsigned int型指針&#xff0c;但是沒有給它分配空間…… 解決了這個問題之后就很簡單了&#xff0c;調用定義在linux/dcache.c文件中的full_name_hash函數對文件名進行hash計算。這里發現了一個…

linux顯示fio為非法指令,FORTRAN運行錯誤消息列表中英對照.doc

FORTRAN運行錯誤消息列表中英對照Fortran的運行時錯誤消息列表本節列出了英特爾Fortran運行時庫(RTL)處理的錯誤。對于每一個錯誤&#xff0c;該表提供了錯誤號&#xff0c;嚴重性代碼&#xff0c;錯誤信息文本&#xff0c;條件符號名稱&#xff0c;而錯誤的詳細說明。在程序中…

各種證書

軟考高級信息系統項目管理師https://www.zhihu.com/question/29904891 轉載于:https://www.cnblogs.com/trumbull/p/11154514.html

linux面試題中的簡答題,[計算機]linux面試題簡答題部分.doc

[計算機]linux面試題簡答題部分linux面試題(簡答題部分)2 簡述進程的啟動、終止的方式以及如何查看進程&#xff1f;答&#xff1a;啟動進程的方式分為手動啟動和自動啟動兩種方式,其中手動啟動的方法用services 服務名 start;或者是./腳本名稱,自動啟動進程的方法有將進程服務…

const用法

const的用法很讓人葷菜&#xff0c;現在總結以下&#xff1a;1&#xff0c;必須初始化2&#xff0c;作為函數的參數是個好習慣&#xff0c;const在*號左邊所指常量值&#xff0c;在右邊所指的是常量指針3&#xff0c;const成員函數的目的是指明該函數可以在const對象上調用,也就…

Multiverse: Revolutionary Backend for Alembic // Multiverse: 下一代Alembic后端

J CUBE&#xff0c;日本最大的動畫公司Polygon Picture&#xff08;以下簡稱PPI&#xff09;公司成立的專職R&D公司隆重推出Multiverse&#xff0c;下一代Alembic存儲后端。 我們還開發了針對Autodesk Maya的工具&#xff0c;運用Multiverse在流程中。 "multiverse&qu…

c語言 程序延時 校準,c語言實現系統時間校正工具代碼分享

//*******************************************************************//Time Protocol是一種非常簡單的應用層協議。它返回一個未格式化的32位二進制數字,//這個數字描述了從1900年1月1日午夜到現在的秒數。服務器在端口37監聽協議請求&#xff0c;以//TCP/IP或者UDP/IP格式…

近半年能力沒進步原因分析與求助

2019獨角獸企業重金招聘Python工程師標準>>> 20180907 思維方式有缺陷&#xff0c;想到的解決方法經常不是最有效率的。導致工作時間內基本沒自由學習的時間。 業余時間不夠專注&#xff0c;學習方向經常變&#xff0c;沒能堅持搞透一個點就換書看&#xff0c;沒有總…

疑問:關于Microsoft Office InfoPath 2003 Toolkit for Visual Studio 2005 Beta 2

因開發急須這個東西&#xff0c;但我不是msdn的subscriber用戶不能單獨下載&#xff0c;但微軟這樣提示http://blogs.msdn.com/vsto2/archive/2005/05/05/415003.aspxIf you need the Toolkit, but you are not an MSDN Universal subscriber, if you go to http://msdn.micros…

windows下安裝Redis并部署成服務

文章來源&#xff1a;https://www.cnblogs.com/weiqinl/p/6490372.html windows下安裝Redis并部署成服務 Redis 是一個開源&#xff08;BSD許可&#xff09;的&#xff0c;內存中的數據結構存儲系統&#xff0c;它可以用作數據庫、緩存和消息中間件。 一&#xff1a;下載 下載地…

c語言編寫程序計算行列式值,新手作品:行列式計算C語言版

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓對話 ControlHeightDecrease ShiftUp Arrow 向上調整選定的控件或對話一個對話單位對話 ControlHeightIncrease ShiftDown Arrow 向下調整選定的控件或對話一個對話單位對話 ControlMoveDown Dow…

.net core高性能通訊開源組件BeetleX

BeetleX beetleX是基于dotnet core實現的輕量級高性能的TCP通訊組件&#xff0c;使用方便、性能高效和安全可靠是組件設計的出發點&#xff01;開發人員可以在Beetlx組件的支持下快帶地構建高性能的TCP通訊服務程序&#xff0c;在安全通訊方面只需要簡單地設置一下SSL信息即可實…

按組排名

rank() over,dense_rank() over,row_number() over的區別 1.rank() over&#xff1a;查出指定條件后的進行排名。特點是&#xff0c;加入是對學生排名&#xff0c;使用這個函數&#xff0c;成績相同的兩名是并列&#xff0c;下一位同學空出所占的名次。 select name,subject,sc…

《Excel與VBA程序設計》第一章

點擊下載&#xff1a;http://files.cnblogs.com/maweifeng/Excel_VBA_001.rar轉載于:https://www.cnblogs.com/maweifeng/archive/2005/06/23/179729.html

linux java環境變量設置

JAVA環境變量設置&#xff1a; #vi /etc/profile#在文件最后添加以下內容&#xff1a; export JAVA_HOME/usr/java/jdk1.8.0_91 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 執行如下命令使環境變量生效&#xff1a; s…