Cache和主存地址對映關係
阿新 • • 發佈:2019-02-03
知識點:Cache與主存地址映像
Cache和主存都被分成若干個大小相等的塊,每塊由若干個位元組組成,主存和Cache的資料交換是以塊為單位,需要考慮二者地址的邏輯關係。
地址映像:把主存地址空間映像到Cache地址空間,即按某種規則把主存的塊複製到Cache中。
一、全相連映像
主存中任何一個塊均可以映像裝入到Cache中的任何一個塊的位置上。主存地址分為塊號和塊內地址兩部分,Cache地址也分為塊號和塊內地址。Cache的塊內地址部分直接取自主存地址的塊內地址段。主存塊號和Cache塊號不相同,Cache塊號根據主存塊號從塊表中查詢。Cache儲存的各資料塊互不相關,Cache必須對每個塊和塊自身的地址加以儲存。當請求資料時,Cache控制器要把請求地址同所有的地址加以比較,進行確認。
特點:靈活,塊衝突率低,只有在Cache中的塊全部裝滿後才會出現衝突,Cache利用率高。但地址變換機構複雜,地址變換速度慢,成本高。
公式: 主存地址位數=塊號+塊內地址; Cache地址位數=塊號+塊內地址。
二、直接映像
把主存分成若干區,每區與Cache大小相同。區內分塊,主存每個區中塊的大小和Cache中塊的大小相等,主存中每個區包含的塊的個數與Cache中塊的個數相等。任意一個主存塊只能映像到Cache中唯一指定的塊中,即相同塊號的位置。主存地址分為三部分:區號、塊號和塊內地址,Cache地址分為:塊號和塊內地址。直接映像方式下,資料塊只能映像到Cache中唯一指定的位置,故不存在替換演算法的問題。它不同於全相連Cache,地址僅需比較一次。
特點:地址變換簡單、速度快,可直接由主存地址提取出Cache地址。但不靈活,塊衝突率較高,Cache空間得不到充分利用。
公式: 主存地址位數=區號+區內分塊號+塊內地址; Cache地址位數=塊號+塊內地址。
三、組相連映像
組相連映像是前兩種方式的折衷。主存按Cache容量分割槽,每個區分為若干組,每組包含若干塊。Cache也進行同樣的分組和分塊。主存中一個組內的塊數與Cache中一個組內的塊數相等。組間採用直接方式,組內採用全相連方式。組的容量=1時,即直接映像,組的容量=整個Cache的容量時,即全相連映像。Cache的存在對於程式設計師透明,Cache的地址變換和資料塊的替換演算法都採用硬體實現。
公式:主存地址位數=區號+組號+主存塊號+塊內地址;
Cache地址位數=組號+組內塊號+塊內地址。
四、主存地址和Cache地址的相關計算
主存地址的位數A由主存容量N決定 A=log2N=區號位數+塊號位數+塊內地址位數
Cache地址的位數B由Cache容量H決定B=LOG2H=塊號位數+塊內地址位數
區號根據Cache容量劃分,區號長度=主存地址位數-Cache地址位數
主存的塊號和Cache塊號的長度相同,位數K取決於Cache中能容納的個數J,K=LOG2J
主存的塊內地址和Cache的塊內地址長度相同,位數M取決於塊的容量 Q , M=LOG2Q
例題解析:
方法一:
分割槽數=主存容量/Cache容量=4096/64=64;
區內分組數=64/4=16;
組內分塊數=4塊/組;
塊內地址=128位元組;
所以根據公式:
主存地址位數=6+4+2+7=19;
主存區號=6位。
方法二:
主存地址的位數A由主存容量N決定
A=log2N=區號位數+塊號位數+塊內地址位數
所以:
A=LOG2N=LOG2(4096*128)=LOG2(2^12*2^7)=LOG2(2^19)=19;
Cache地址的位數B由Cache容量H決定 B=LOG2H=塊號位數+塊內地址位數
所以: B=LOG2(64*128)=13.區號的計算方法同上!
方法三:
主存地址=主存塊地址+塊內地址=12+7=19;
主存區號地址=主存塊地址-Cache塊地址=12-6=6.