キャッシングの仕組みを理解しようとしています。私はこの概念をよりよく理解するために問題に取り組んでいます:
ブロックの長さが 1 ワードで、合計サイズが長さ 32 ビットの 16 ワードである 2 ウェイ セット連想キャッシュの場合、最初は空で、最も使用頻度の低い置換戦略を使用します。次のアドレスがヒットしたかミスしたかを示し、キャッシュの最終的な内容を一覧表示します。
住所:
- 00010001
- 01101011
- 00111111
- 01001000
- 00011001
- 01000010
- 10001001
- 00000000
- 01001000
- 00011100
- 00110000
- 11111100
- 00111010
まず、与えられた情報では、次の順序で 2 つのオフセット ビット、3 つのセット ビット、3 つのタグ ビットがあるように私には思えます (T=tag、S=set、O=offset): TTTSSSOO
例 (アドレス 1):
タグ=000 (0)、セット = 100 (4)、オフセット = 01 (1)
これが正しいと仮定すると、上記のアドレスを検索すると、次のようになります。
- ミス、セット 4、ブロック 0 に保存
- ミス、セット 2、ブロック 0 に保存
- ミス、セット 7、ブロック 0 に保存
- ミス、セット 2、ブロック 1 に格納
- ミス、セット 6、ブロック 0 に保存
- ミス、セット 0、ブロック 0 に保存
- ミス、セット 2、ブロック 0 に格納 (ブロック 0 は LRU でしたが、ブロック 1 は LRU になります)
- ミス、セット 0、ブロック 1 に保存
- セット 2、ブロック 1 のヒット数
- ミス、セット 7、ブロック 1 に格納
- ミス、セット 6、ブロック 1 に格納
- ミス、セット 7、ブロック 0 に格納 (ブロック 0 は LRU でしたが、ブロック 1 は LRU になります)
- ミス、セット 6、ブロック 0 に格納 (ブロック 0 は LRU でしたが、ブロック 1 は LRU になります)
キャッシュの最終的な内容は次のようになります。
セット 0: 01000010、00000000
セット 1: 空、空
セット 2: 10001001、01001000
セット 3: 空、空
セット 4: 00010001、空
セット 5: 空、空
セット 6: 00111010、00110000
セット 7: 11111100、00011100
私はこれに非常に苦労しているので、誰かが私が正しい軌道に乗っているかどうかを教えてくれることを願っています. これらが問題ないように見える場合は、同じ演習を試してみたいと思います。
EDIT1: 新しいアドレス。
- 000_100_01
- 000_010_01
- 000_001_10
- 000_001_01
- 001_010_11
- 000_001_00
- 000_010_11
- 000_010_01
- 001_110_00
- 000_100_11
- 000_000_01
- 000_101_11
- 011_010_11
どちらが好きですか:
- ミス、セット 4 ブロック 0 に格納
- ミス、セット 2 ブロック 0 に格納
- ミス、セット 1 ブロック 0 に格納
- ミス、セット 1 ブロック 1 に格納、ブロック 0 が LRU になる
- ミス、セット 2 に格納 ブロック 1、ブロック 0 が LRU になる
- ミス、セット 1 ブロック 0 に格納、ブロック 1 が LRU になる
- ミス、セット 2 ブロック 0 に格納、ブロック 1 が LRU になる
- ヒット、セット 2 ブロック 0 が LRU になる
- ミス、セット 6 ブロック 0 に格納
- ミス、セット 4 ブロック 1 に格納
- ミス、セット 0 ブロック 0 に格納
- ミス、セット 5 ブロック 0 に格納
- ミス、セット 2 ブロック 0 に格納、ブロック 1 が LRU になる