Java で連想キャッシュをシミュレートする必要がある課題を与えました。一連のバイト アドレスが与えられているので、各アドレスがヒットかミスかを調べる必要があります。キャッシュは 32 ブロックで構成され、各ブロックは 8 バイトです
したがって、スキームは次のようになります。
- アドレスからグループ アドレスを計算します (グループ アドレスは、アドレスをキャッシュ内の各ブロックのサイズで割ったものです。たとえば、アドレス 950 のグループ アドレスは 950/8 になります)。
- グループ アドレス全体をタグとして使用する
- キャッシュ全体をスキャンし、タグが既にキャッシュにあるかどうかを確認します
- タグが見つかった場合は、ヒットを記録します
- タグが見つからない場合は、ミスを記録し、最初に使用可能なブロックにタグを保存します
- 使用可能なスペースがない場合は、キャッシュから LEAST 最近使用された (LRU) ブロックを削除します。
- 新しいタグが保存されるようにキャッシュを更新し (ミスがあった場合)、このブロックが最近最も使用されたブロックであることを覚えておいてください。
- 有効なビットを真に設定し、タグをブロックに保存し、最初に使用されたアドレスを記憶します。
私が抱えている問題は、最近使用されていないビットを実行することです。LRU を実装するように求められる方法は、ブロックを最近使用されたものから使用されていないものへと順番に保持することです。ブロックを置き換える必要がある場合は、古いものを最後から削除し、新しいものを最初に追加します。次に、ヒットを取得したら、ヒットをキャッシュの先頭に移動します。