ダイレクト マップ キャッシュは 16 ブロックで構成されます。メイン メモリには、それぞれ 8 バイトの 16K ブロックが含まれます。メイン メモリのアドレス形式 (各フィールドのサイズを意味します) は何ですか。
フィールドが Tag|Block|Offset であることはわかっています。それぞれのサイズを取得する方法がわかりません。
これは宿題ですか?
この問題を解決するには、問題のアーキテクチャのアドレス サイズを知る必要があります。一般的な解決策:
C をキャッシュのビット単位のサイズとします。
アドレスのビット単位のサイズを A とします。
B をキャッシュ ブロックのビット単位のサイズとします。
S をキャッシュの連想性とします (ある意味で、ダイレクト マップは S=1 であり、完全連想は S=C/B です)。
キャッシュ内のライン数 L は、C/B に等しくなります。これは、キャッシュ ビット数を 1 行あたりのビット数で割ったものです。キャッシュ内のセットの数である Q は、L/S に等しくなります。これは、結合性で割った行数です。この行と上記の理由は明らかです。そうでない場合は、以下を読む前に教科書をもう一度叩いてください。
では、ディスプレイスメント ビット、ブロック ビット、タグ ビットの 3 つを考えてみましょう。
置換ビットは、キャッシュ ライン内の特定のアイテムを見つけるためのものです。バイト アドレス指定可能なメモリを仮定すると、変位ビットの数 D は ceil(log2(ceil(B/8))) です。これは、各ステップで切り上げられた、キャッシュ ライン内のバイト数の 2 を底とする対数です。メモリが 2 バイトでアドレス指定できる場合、内側の部分は B/16 などになります。
ブロック ビットは、キャッシュ内で必要なキャッシュ セットを見つけるためのものです。したがって、ブロックのビット数 O は ceil(log2(Q)) です。これは、キャッシュ内のセット数の 2 を底とする対数です。
タグビットは残っているものです。したがって、タグ ビットの数である T は ADO です。英語では、アドレスのビット数から、他の 2 つの部分に使用されるビット数を差し引いたもの。ここで結合性を考慮する必要はありません。これは、L の代わりに Q を使用して上記で既に処理したためです。
要約すれば:
最後にタグの長さを計算します。これは間違いなく簡単です。
PS - 実際には、キャッシュにはダーティ ビットとその他のメタデータも各行に格納されることに注意してください。ただし、これらの質問は通常、そのようなことを無視するので、私もそうしました。