根據(jù)不同的分類標(biāo)準(zhǔn)可以按以下3種方法對(duì)Cache進(jìn)行分類。
?1)數(shù)據(jù)cache和指令cache
?● 指令cache:指令預(yù)取時(shí)使用的cache。
?● 數(shù)據(jù)cache:數(shù)據(jù)讀寫時(shí)使用的cache。
如果一個(gè)存儲(chǔ)系統(tǒng)中指令cache和數(shù)據(jù)cache是同一個(gè)cache,稱系統(tǒng)使用了統(tǒng)一的cache。反之,如果是分開的,那么稱系統(tǒng)使用了獨(dú)立的cache;如果系統(tǒng)中只包含指令cache或者數(shù)據(jù)cache,那么在配制系統(tǒng)時(shí)可以作為獨(dú)立的cache使用了。
使用獨(dú)立的數(shù)據(jù)cache和指令cache,可以在同一個(gè)時(shí)鐘周期中讀取指令和數(shù)據(jù),而不需要雙端口的cache,但這時(shí)候要注意保證指令和數(shù)據(jù)的一致性。
?2)寫通(write-through)cache和寫回(write-back)cache
?● 寫回cache CPU在執(zhí)行寫操作時(shí),被寫的數(shù)據(jù)只寫入cache,不寫入主存,僅當(dāng)需要替換時(shí),才把已經(jīng)修改的cache塊寫回到主存中,在采用這種更新算法的cache快表中,一般有一個(gè)修改位,當(dāng)一塊中的任何一個(gè)單元被修改時(shí),這一塊的修改位被設(shè)置為1,否則這一塊的修改位仍保持為0;在需要替換這一塊時(shí),如果對(duì)應(yīng)的修改位為1,則必須先把這一塊寫到主存中去之后,才能調(diào)入新的塊,否則,只要用新調(diào)入的塊覆蓋該塊即可。
?● 寫通cache CPU在執(zhí)行寫操作時(shí),必須把數(shù)據(jù)同時(shí)寫入cache和主存,這樣,在cache的快表中就不需要“修改位”,
當(dāng)某一塊需要替換時(shí),也不必把這一塊寫回到主存中,新調(diào)入的塊可以立即把這一塊覆蓋掉。
寫回cache和寫通cache的優(yōu)缺點(diǎn)比較如下表所示。
寫回cache與寫通cache比較
?3)讀時(shí)分配(read-allocate)cache和寫時(shí)分配(write-allocate)cache
?● 讀時(shí)分配cache當(dāng)進(jìn)行數(shù)據(jù)寫操作時(shí),如果cache沒命中,只是簡(jiǎn)單地將數(shù)據(jù)寫入主存中,主要在數(shù)據(jù)讀取時(shí),才進(jìn)行cache內(nèi)容預(yù)取。
?●寫時(shí)分配cache當(dāng)進(jìn)行數(shù)據(jù)寫操作時(shí),如果cache未命中,cache系統(tǒng)將會(huì)進(jìn)行cache內(nèi)容預(yù)取,從主存中將相應(yīng)的塊讀取到cache中相應(yīng)的位置,并執(zhí)行寫操作,把數(shù)據(jù)寫入到cache中。對(duì)于寫通類型的cache,數(shù)據(jù)將會(huì)同時(shí)寫入到主存中,對(duì)于寫回類型的cache,數(shù)據(jù)將在合適的時(shí)候?qū)懟氐街鞔嬷小?/p>
由于寫操作分配cache增加了cache內(nèi)容預(yù)取的次數(shù),增加了寫操作的開銷,但同時(shí)可能提高cache的命中率,因此這種技術(shù)對(duì)于系統(tǒng)整體性能的影響與程序中讀操作和寫操作的數(shù)量有關(guān)。
Cache替換算法
隨機(jī)替換算法
通過一個(gè)偽隨機(jī)數(shù)發(fā)生器產(chǎn)生一個(gè)偽隨機(jī)數(shù),用新塊編號(hào)為該偽隨機(jī)數(shù)的cache塊替換掉。這種算法很簡(jiǎn)單且容易實(shí)現(xiàn),但沒有考慮程序的局部性特點(diǎn),也沒有利用歷史上塊地址流的分布情況,因而效果較差,同時(shí)這種算法不易預(yù)測(cè)最壞情況下cache的性能。
輪轉(zhuǎn)替換算法
維護(hù)一個(gè)邏輯的計(jì)數(shù)器,利用該計(jì)數(shù)器依次選擇將要被替換出去的cache塊。這種算法容易預(yù)測(cè)在最壞情況下cache的性能。但在程序發(fā)生很小的變化時(shí),可能造成cache平均性能的急劇變化,這是它的一個(gè)明顯缺點(diǎn)。
-
cpu
+關(guān)注
關(guān)注
68文章
10904瀏覽量
213023 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7139瀏覽量
89581 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4355瀏覽量
86175 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28433
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
![](https://file1.elecfans.com/web2/M00/84/35/wKgZomRl_0mASjQlAAA1tQrEakI922.png)
#硬聲創(chuàng)作季 計(jì)算機(jī)原理:5.3.10 Cache替換算法(2)
在嵌入式中為什么要用到Linux系統(tǒng)呢
淺析cache控制器的分配策略與替換策略
基于修正LRU的壓縮Cache替換策略
基于BWDSP指令Cache的PLRU替換算法研究
一種有效的Cache優(yōu)化替換策略
![一種有效的<b class='flag-5'>Cache</b>優(yōu)化<b class='flag-5'>替換</b>策略](https://file.elecfans.com/web2/M00/49/68/poYBAGKhwK-AHePmAAAV_kXCPRg787.jpg)
OrCAD教程:如何對(duì)元件進(jìn)行替換與更新
![OrCAD教程:如何對(duì)元件進(jìn)行<b class='flag-5'>替換</b>與更新](https://file1.elecfans.com//web2/M00/A7/41/wKgZomUMQ12ASqQ3AAAQsTeFtj0252.jpg)
寄存器和cache的區(qū)別介紹
Python替換字符串的新方法
Python替換字符串的新姿勢(shì)
![Python<b class='flag-5'>替換</b>字符串的新姿勢(shì)](https://file.elecfans.com/web2/M00/94/17/pYYBAGP4JXiAHsODAACyZ0F2pxA930.png)
在組相聯(lián)cache中,用于替換cache line的算法有哪些?
Python 中怎么來實(shí)現(xiàn)類似 Cache 的功能
基于flashtext模塊使用FlashText算法進(jìn)行字符串查找和替換
![基于flashtext模塊使用FlashText<b class='flag-5'>算法</b>進(jìn)行字符串查找和<b class='flag-5'>替換</b>](https://file1.elecfans.com/web2/M00/AC/F4/wKgZomU_ERiABjMAAABEfG00970779.jpg)
評(píng)論