1. 程式人生 > >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容量分割槽,每個區分為若干組,每組包含若干塊。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.