2016-11-30 222 views
0

首先,第一個緩存有16個單字塊。作爲一個例子,我將使用0x03內存引用。索引有4位(0011)。很明顯,位等於3mod16(0011 = 0x03 = 3)。不過,我正在使用這個mod方程式來弄糊塗,以確定具有偏移位的緩存中的塊位置。當直接映射緩存中存在偏移量時,如何將內存地址映射到塊?

第二個高速緩存的總大小爲八個雙字塊。這意味着有1個偏移位。由於現在有8個塊,所以只有3個索引位。作爲一個例子,我將採用與0x03相同的內存引用。但是現在我無法使用之前使用的mod方程映射到塊。我嘗試3mod8這是3,但在這種情況下,由於有一個偏移位,索引位是001。001不等於3,所以我做錯了什麼?有偏移位時,mod不工作嗎?我的印象是,mod方程總是等於索引位。

+0

你必須修改索引,而不是整個地址。 –

+0

我有點困惑。我認爲索引是映射到塊:S –

+0

我的意思是說你必須修改偏移量以上的位來獲得索引。 (即去除標籤位)。偏移位不影響地址映射到緩存中的哪一行,因此它們/它不是計算的一部分。 –

回答

2

其全部在地址中。你得到地址,然後屏蔽掉從最後的位數,原因如下。

  1. 緩存行中的字數。如果你有2個字的緩存行(需要一點點,4個字-2磅等)
  2. 然後你有多少個緩存行條目。 (如果是1024緩存行,則取10位,這10位是您的索引,其餘位是您的標記)

現在,您還需要考慮'WAY'。如果它的直接映射緩存,如上所述。如果它是一個2路組相聯高速緩存,你沒有1024行,你有512塊,每塊有2行。這意味着你只需要9位來確定塊的索引。如果它的4種方式,你有256塊,其中有4行,這意味着你只需要8位索引。

在集合關聯緩存中,索引用於選擇一個塊,一旦選擇了塊,在緩存未命中的情況下,使用可以使用類似LRU的策略來填充條目。命中率是通過比較所選塊中的標記來確定的。

底線,塊位置不是由地址決定的,只有一個塊被地址選中,然後它的標籤比較才能找到數據。