1. 程式人生 > >直接對映詳解

直接對映詳解

在cache中為主存中每個字分配一個位置的最簡單方法就是根據這個字的主存地址進行分配,這種cache結構稱為直接對映。其中,每個儲存器地址對應到cache中一個確定的地址

直接對映cache都採用以下對映方法:

i=j mod C,其中,i為Cache塊地址,j為主存塊地址,C為Cache中的塊數,mod表示求餘運算。



  • 上圖中Cache的塊數為8,又塊數是2的冪,取模計算就很簡單,只需要取地址的低log2(8)位即塊地址中最低的三位,例如儲存器地址(00001)2被對映到(001)2的位置,(11101)2被對映到(101)2的位置。

標記:由於cache中每個位置可能對應於儲存器中多個位置,因此需要引入一組標記,標記中包含了地址資訊。標記只需包含地址的高位

,也就是沒有用來檢索cache的那些位。如上圖示記位只需使用5位地址中的高兩位。

有效位:我們還需要一種方法來判斷cache塊中確實沒有包含有效資訊。例如,當一個處理器啟動時,cache中沒有資料,標記域中的值就沒有意義,甚至在執行了一些指令後,cache中的一些塊依然為空。因此需要增加一個有效位來標識一個塊是否含有一個有效地址。


  • 上圖給出了一個使用32位地址,1024字的cache。由於cache有1024個字,即需要10位索引2^10。又有2位是位元組偏移資訊,剩下的32-10-2=20位用來和標記比較。如果標記和地址的高20位相等,並且有效位開啟,那麼請求在cache命中。


上圖給出了直接對映的完整結構圖

直接對映是最簡單的地址對映方式,它的硬體簡單,成本低,地址變換速度快,而且不涉及替換演算法問題。但是這種方式不夠靈活,

Cache的儲存空間得不到充分利用,每個主存塊只有一個固定位置可存放,容易產生衝突,使Cache效率下降,因此只適合大容量Cache採用。例如,如果一個程式需要重複引用主存中第0塊與第2^c塊,最好將主存第0塊與第2^c塊同時複製到Cache中,但由於它們都只能複製到Cache的第0塊中去,即使Cache中別的儲存空間空著也不能佔用,因此這兩個塊會不斷地交替裝入Cache中,導致命中率降低。