アドレスのビットは、次の 3 つのグループに分けられます。
tag | set index | Block offset
t bits | s bits | b bits
キャッシュ内のブロックのサイズがB
バイトの場合b = (log2 B) bits
、ブロック オフセットを指定する必要があります。
キャッシュに S セットがある場合、s = (log2 S)
ビットがセット インデックスに使用されます。また、キャッシュが完全に関連付けられている場合、セットは と のみでありS = 1
、s = 0
セット インデックスにビットは使用されません。
残りのビットはタグに使用され、次を使用してt
計算できます。t = NUM_BITS - s - b
これにより、任意のアドレスを対応するキャッシュ ラインにマップできることが保証され、キャッシュ ラインを見るだけvalid bit
で、キャッシュにアドレスがあるかどうかを確認できます。プログラムで空間データの局所性を活用するために、通常、キャッシュ ラインのサイズはワード サイズよりも大きいことに注意してください。
要求されたアドレスがキャッシュ内に見つからない場合、キャッシュに取り込まれるデータ ブロックの開始アドレスを計算する必要があります。
範囲のサイズは、常にキャッシュ ブロック サイズと同じです。開始アドレスは、アドレスのブロック オフセット ビットをゼロにすることによって計算されます。1s
終了アドレスは、アドレスのブロック オフセット ビットをすべて使用して計算されます。
LRU
キャッシュの結合性とエビクション スキーム ( vs ) に応じて、LFU
この新しいデータ ブロックが格納されるセット内の行が決定され、入力されます。