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         

 例題解析:

 例一、容量為64塊的Cache采用組相聯方式映像,字塊大小為128字節,每4塊為一組,若主容量為4096塊,且以字編址,那么主存地址為多少位,主存區號為多少位?

 

方法一:

 

      分區數=主存容量/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.

例二、一個具有4KB直接相聯cache的32位微處理器,主存的容量為16MB,假定該cache的塊為4個32位的字。

(1)指出主存地址中區號、塊號和塊內地址的位數;

(2)求主存地址為ABCDEF(16進制)的單元在cache中的什么位置?
 分析:
Cache容量:4KB
主存 容量 :16MB
映像方式   :直接映像;


把主存分成若干區,每區與Cache大小相同。區內分塊,主存每個區中塊的大小和Cache中塊的大小相等,主存中每個區包含的塊的個數與Cache中塊的個數相等。任意一個主存塊只能映像到Cache中唯一指定的塊中,即相同塊號的位置。主存地址分為三部分:區號、塊號和塊內地址,Cache地址分為:塊號和塊內地址。

主存地址位數=區號+區內分塊號+塊內地址;
Cache地址位數=塊號+塊內地址。

主存的區號:16M/4KB=2^12=12位;
主存塊號  :4KB/(4*32bit)=2^8=8位;
塊內地址  :4*32bit =16Byte=4個字(因為一個字為32bit)=2^2字=2位;

1)
 
    主存容量為16MB=2^24個字節,1個32位字是由4個字節組成,所以主存字地址為22位. 
CACHE容量為4KB=2^12個字節,同理,CACHE字地址為10位.
CACHE的塊為4個32位的字,所以塊內地址為2位 
在直接映象中: 
CACHE地址位=塊號位數+塊內地址位數==>塊號位數=CACHE地址位-塊風地址位=10-2=8 
主存地址中的區號=主存地址位數-CACHE地址位數=22-10=12位 
(2)
ABCDEF=1010 1011 1100 1101 1110 1111 
該存儲單元在CACHE的位址為: 
區號=1010 1011 1100     塊號=1101 1110     塊內地址=1111

在cache中的位置:塊號1101 1110    塊內地址1111 

數據的存儲一般以"字"為單位進行。 
 

但在計算機里我們保留對字節的尋址和編碼,不管是16位,還是32位,還是64位微處理器.象第二小題主存地址為ABCDEF(16進制)這是一個24位地址碼,而主存字地址為22位. 計算機只會按字進行操作,即它的傳輸運算,包括直接相連cache映象。 所以我們只管字,不管字節。 

ABCDEF=1010 1011 1100 1101 1110 1111

在cache中的位置:塊號1101 1110   塊內地址11 

注:后兩位為字節尋址,這里不用了。(ABCDEC,ABCDED,ABCDEE,ABCDEF這四個字節地址為同一字地址)在同一個CACHE塊內地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM