計算機組成原理學習筆記————Cache主存地址映射

Cache——主存地址映射

由主存地址映射到Cache地址稱爲地址映射。映射方式很多,有直接映射,全相聯映射、組相聯映射。 映射就是指將主存地址中的某一塊兒加載到Cache地址中,並指定某一塊。

直接映射

主存當中任意一個塊只能映射到Cache中某一個指定的塊。如圖:
在這裏插入圖片描述
圖中每個主存塊只與一個緩存塊相對應,映射關係爲**i = j mod C 或 i = j mod 2^c ** i爲緩存塊號,j爲主存塊號,C爲緩存塊數。映射結果表明每個緩存塊對應若干個主存塊。

具體實現過程

  1. 根據Cache存儲體大小,將主存分成若干個與Cache存儲體大小相同的區。如圖中Cache有2c-1個塊,則主存被分爲若干個含有2c-1個塊的區。每個區中的塊的編號與Cache中的編號相同,並且一一對應。因此,Cache中的一個塊對應了主存中的若干個塊的位置,主存中的塊要存儲到Cache中時只能根據這樣的對應關係存儲到Cache中唯一的一塊中。
  2. 對於CPU給出的地址,可以分爲三部分,分別是:區號、塊號、塊內偏移地址。區號就是上圖中的t位主存子塊標記 塊號就是c位Cache字塊地址,塊內偏移地址就是b位字塊內地址。
  3. Cache存儲體中的t位標記存儲了主存儲體中對應的區號。對CPU給出的地址,可以根據塊號在Cache中直接找到對應的塊,然後再通過比較器比較地址給出的區號是否與Cache存儲體中標記的區號一致,一致則說明CPU給出的地址已經保存到了Cache中,可直接獲取地址中的指令或數據,若不一致,說明地址還未保存到Cache中,則需訪問主存。

計算機組成原理(第2版)唐朔飛 中的解釋:
在這裏插入圖片描述

缺點

不夠靈活,每個主存塊只能固定的對應某個緩存塊,即使緩存內還空着許多位置也不能佔用,使緩存的存儲空間得不到充分的利用。此外,如果程序恰好要重複訪問對應同一緩存位置的不同主存塊,就要不停的進行替換,而且降低命中率。

對映射關係式i = j mod C的解釋

映射關係爲**i = j mod C 或 i = j mod 2^c ** i爲緩存塊號,j爲主存塊號,C爲緩存塊數。中文描述就是 緩存中塊地址=主存塊地址 mod Cache中的塊數
一個塊數爲8的Cache,取模運算之後得到的就是主存塊地址中的第三位。例如存儲器地址11101被映射到Cache中的101位置,如下圖:
在這裏插入圖片描述
從圖中可以看出一個CPU給出的地址的地位是用來檢索到Cache中的位置,那如何判斷該位置的數據是否爲CPU所請求的字呢? 因此有了標記,即直接映射圖中的高t爲主存塊標記。以上圖中的映射關係爲例,存儲器地址11101的低三位用來映射到Cache,那麼高兩位就用來作爲標記。
在這裏插入圖片描述

對有效位的解釋

當一個處理器啓動時,Cache中沒有數據,則標記域中的值沒有意義。甚至在執行一些指令後,Cache中的一些塊依然爲空,則這些塊中的標記應該被忽略。因此增加了有效位,用來識別Cache存儲塊中的數據是否有效,因爲有時Cache中的數據是無效的。 如果該位沒有置1,則不能使用該塊中的內容。
在這裏插入圖片描述

地址劃分

對於CPU給出的每個可能地址,在Cache中如何進行查找,地址的地位用來找到Cache中與該地址匹配的唯一項。如下圖:將一個地址劃分爲
**標記域:**用來與Cache中標記域的值進行比較。

Cache索引: 用來選擇塊。
在這裏插入圖片描述
對這個cache,地址的低位用來選擇由數據字和標記組成的一個cache項。這個cache中有1 024個字,即4KiB。假設使用32位的地址。cache 中的標記與地址高位相比較,判斷cache中的項是否符合請求的地址。由於cache有210 (1024) 個字,塊大小爲1個字,因此,索引cache需要10位,剩下的32- 10-2= 20位用來和標記相比較。如果標記和地址的高20位相等,並且有效位開啓,那麼請求在cache中命中,相應的字被提供給處理器。否則,發生缺失。
在這裏插入圖片描述

全相聯映射

全相聯映射允許主存中每一個字塊映射到Cache中任何一塊位置。如下圖。
在這裏插入圖片描述
如圖,主存儲器中的塊可能映射到Cache中的任意一個位置。所以當CPU放訪問主存時,需將給出地址中的主存字塊標記與Cache存儲器中的全部標記進行比較,如果有相等的標記,則命中,否則未命中,需進行替換。

優點

方式靈活,命中率更高,縮小了塊衝突率。 邏輯電路多,成本高。

缺點

與直接映射相比,主存字塊標記的位數變成了t+c位,進行比較的比較器位數增加。需和Cache中全部標記進行比較才能判斷所訪問地址內容是否已經在Cache中。

組相聯映射

組相聯映射是直接映射和全相聯映射的一種折中方式。
在這裏插入圖片描述
首先將Cache分成若干個塊,再對塊進行分組,假設分成r個組,組內塊的數量不固定。 然後對主存進行分區,區數與Cache中的組數相同,即r組。主存中每個區的塊可以存儲到Cache對應組中的任意一塊。所以,主存中某個塊所在的區號直接決定了它能夠映射到Cache中的哪個組。

優點

一個塊能映射的位置有多個,與直接映射的一一對應關係相比,更不容易衝突。 在判斷主存中某一個塊是否已在Cache中,只需根據地址所在的區號找到Cache中對應的組,再根據組內塊的標記比較區號是否對應。不需要和每一個Cache進行比較。與全相聯映射相比,比較次數更少。

Cache缺失處理

Cache缺失:由於數據不在Cache中而導致被請求的數據不能滿足。
缺失就是未命中,Cache中沒有CPU要訪問的地址。
Cache缺失處理主要有兩部分組成:處理器控制單元,以及一個進行初始化主存訪問和重新填充Cache的獨立控制器。

Cache缺失處理步驟:

  1. 把程序計數器(PC)的原始值(當前PC-4)送到存儲器中。
  2. 通知主存執行- -次讀操作,並等待主存訪問完成。
  3. 寫cache項,將從主存取回的數據寫人cache中存放數據的部分,並將地址的高位(從ALU中得到)寫人標記域,設置有效位。
  4. 重啓指令執行第-一步,重新取指,這次該指令在cache中。數據訪問時對cache 的控制基本相同:發生缺失時,處理器發生阻塞,直到從存儲器中取回數據後才響應。.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章