1. 程式人生 > >【復習筆記】Cache的映像方法

【復習筆記】Cache的映像方法

mar 原則 exc 內存 什麽 dsp 助理 自然 存儲器

註:寫的時候忘記統一內存/主存的稱呼,特別聲明文中內存=主存。閱讀本文建議畫圖輔助理解

Cache是什麽

cache高速緩沖存儲器一種特殊的存儲器子系統,其中復制了主存中頻繁使用的數據以利於快速訪問。為了便於根據CPU送來的地址信息到Cache中去讀取數據,必須有某種函數把主存地址映象成Cache地址。實現這種映象的函數叫映象函數。不同的映像函數有:

  1. 直接映像法
  2. 全相聯映像法
  3. 組相聯映象法

    直接映像法

    原則:

  • 直接映象函數為i=j mod 2c ,其中i是Cache塊號,j是主存塊號, 2c為Cache總塊數。
  • 將主存分為若幹區,每區容量與Cache總容量相等。每區塊數與Cache的塊數相同,這樣,每區中第i塊映射的位置就是Cache的第i塊
  • 維護一個塊表,表的長度為Cache的塊數(為了記錄Cache中每塊存的是主存的第幾區),表中每個項目長度是主存區號的長度(為了存下塊的編號)。在每次訪問主存時查這個塊表來對應訪問Cache。

    例:設主存容量為1MB,高速緩存容量為16KB,塊的大小為512字節。采用直接地址映像法。

  1. 寫出主存地址格式。
  2. 寫出Cache地址格式。
  3. 塊表的容量是多大。
  4. 畫出直接方式地址映像及變換示意圖。

    解:

    Cache塊數=16KB/512B=32塊
    則主存每區為32塊,共1MB/16KB=64區
    所以主存地址為6位區號(共64區)+5位區內塊號(共32塊)+9位塊內地址(塊容量512B,按字節編址)
    所以Cache地址

    為5位區內塊號,9內塊內地址(相當於主存的一個區)
    自然的,塊表的容量為32*6位(表示Cache32個塊中分別存了第幾區的主存塊)
    圖使用教材上的圖吧:
    技術分享圖片

    特點:沖突多,命中率低,使用率低。但是訪問速度快。

    全相聯映像法

    原則:

  • 主存中每一塊可存入Cache中的的任一位置
  • 維護一個目錄表,記錄Cache每塊存的是內存的哪一塊。表的長度就為Cache塊數(原因上同),每條項目的長度為主存的主存塊號的長度(不是區內塊號),每次訪存的時候查表訪問。

    方法簡單,例題略。

    特點:目錄表容量很大,訪存慢。但Cache的使用率高。

    組相聯映像法

    原則:

  • 是前兩種方法的組合,結合了各自的優點。
  • 將Cache分組,內存分區。內存區內的塊數和Cache的組數相同(原因稍後介紹)。
  • 主存區內的塊和Cache的組采用直接相聯映像法,即第主存每區的第i塊都映射到Cache的第i組。
  • Cache每組組內采用全相聯映像法,例如Cache的第3組中有個4塊,Cache的第1塊存了來自內存第2區的第3塊,第2塊存了來自內存第6區的第3快,第3、4塊空.
  • 按照上面的原則,就需要一個表來說明Cache每一組存了哪幾區的內存塊。訪存時查表到對應的區中尋找有沒有該內存塊。

    例. 一個組相聯映像Cache由64個存儲塊組成, 每組包含4個存儲塊。主存包含4096個存儲塊,每塊由128字組成。訪存地址為字地址。

    (1)寫出主存地址位數和地址格式
    (2)寫出Cache地址位數和地址格式;
    (3)畫出組相聯映像方式示意圖,
    (4)主存字地址為7B568H單元映射到Cache哪個組?

    解:

    Cache組數為64/4=16組
    主存每區內的塊數=Cache的組數,則主存的區數為4096/16=256區,每區內有16個存儲塊
    那麽主存地址的組成為8位區號(256區)+4位區內塊號(16個存儲塊)+7位塊內地址(一塊128字,按字編址)
    Cache地址為4位組號(16組)+2位組內塊號(每組4快)+7位塊內地址(一共128字,按字編址)
    教材中的圖:
    技術分享圖片
    7B568H=(二進制)11110110 1010 1101000 //按8421碼翻譯,前面的0舍棄,然後按內存格式分組
    按照前面主存地址的分析,內存映射到Cache的哪個位置是根據其第8到12位(從0開始,從左往右數),為1010=5,所以映射到第5組。

【復習筆記】Cache的映像方法