根據程式區域性性規律可知:程式在執行中,總是頻繁地使用那些最近被使用過的指令和資料。這就提供了替換策略的理論依據。綜合命中率、實現的難易及速度的快慢各種因素,替換策略可有隨機法、先進先出法、最近最少使用法等。
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塊0110
111111
500cache塊1301
310300
301cache塊2400
401410
411cache塊3空xx
200201
210操作起始狀態
調入命中
替換暫存器棧法:設定乙個暫存器棧,其容量為cache中替換時參與選擇的塊數。如在組相聯方式中,則是同組內的塊數。堆疊由棧頂到棧底依次記錄主存資料存入快取的塊號,現以一組內4塊為例說明其工作情況,如表2.3.2所示,表中1~4為快取中的一組的4個塊號。
表2.3.2 暫存器棧法實現
快取操作
初始狀態
調入2命中塊4
替換塊1
暫存器032
41暫存器143
24暫存器214
32暫存器3空1
13(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等等。
Cache 替換策略
cache工作原理要求它盡量儲存最新資料,當從主存向cache傳送乙個新塊,而cache中可用位置已被佔滿時,就會產生cache替換的問題。替換問題與cache的組織方式緊密相關 對直接對映cache來說,只要把此可用位置上的主存塊換出cache即可 對全相聯和組相聯cache來說,要從若干個可用位...
Cache的寫策略
write through 直寫模式 在資料更新時,同時寫入快取cache和後端儲存。此模式的優點是操作簡單 缺點是因為資料修改需要同時寫入儲存,資料寫入速度較慢。write back 回寫模式 在資料更新時只寫入快取cache。只在資料被替換出快取時,被修改的快取資料才會被寫到後端儲存。常見處理器...
cache 寫回策略
主要分兩種 寫回 write back 和 寫通 write through 1.write back 只有在乙個cache行被選中替換回主存時,如果cache 行的資料是修改過的 dirty 才將它寫回主存。這種策略,要在cache中設定乙個髒位 dirty bit 用來表示快取中的cache 行...