アドレスのビットは、次の 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この新しいデータ ブロックが格納されるセット内の行が決定され、入力されます。