バイトアドレス指定とワードアドレス指定の違いを理解しようとしています。
16 KBの容量を持つ4ウェイセットアソシアティブキャッシュメモリユニットは、8ワードのブロックサイズを使用して構築されます。ワード長は32ビットです。物理アドレス空間のサイズは4GBです。
キャッシュ内のセット数
ワードアドレッシングが使用されている場合:
ブロックオフセット
PASは
つまり、合計アドレスビット $ = 30 \ビット$
アドレス構造:
タグビット: $ 20 \ビット$
セットビット: $ 7 \ビット$
ブロックオフセットビット: $ 3 \ビット$
ここで、CPUがにアクセスしたいとします。特定の単語の3番目のバイト。
- キャッシュコントローラーは、 $ 7 \ bits $ セットフィールドを使用してセットにインデックスを付けます。次に、上位の $ 20 \ bits $ タグフィールドをすべての<セット内のspanclass = "math-container"> $ 4 $ ブロック。一致するものが見つかった場合、キャッシュヒットが発生し、下位の $ 3 \ bits $ ブロックオフセットが発生して、単語の1つが $ 8 $ ワード。次に、CPUはワードから3番目のバイトを抽出し、操作を実行します。
- タグが一致しない場合、キャッシュミスが発生し、メモリ読み取り信号が送信されます。参照の空間的局所性により、ワードはキャッシュに転送されます。
CPUがバイトアドレス指定可能の場合:
合計アドレスビット
アドレス構造:タグビット: $ 20 \ビット$
セットビット: $ 7 \ビット$
ブロックオフセットビット: $ 5 \ビット$
CPUがの3番目のバイトにアクセスする場合ワード:
- ワードアドレス可能のステップ1と同じですが、CPUは、下位の $ 2 \を使用して、ワードの3番目のバイトを直接アドレス指定できるようになりました。ビット$ バイトオフセット。ただし、どうなるか混乱しています。CPUレジスタの幅はワードアドレスと同じように1ワードなので、ブロック内の8ワードのうち1ワードがレジスタに転送されます。ここでは「バイト抽出」ステップの方が簡単ですか?実際にワードをアドレス指定しているのに、なぜバイトアドレス指定と呼ぶのですか?
- ワードアドレス指定のステップ2と同じです。データのブロックが転送されます。キャッシュミスの場合のメモリからキャッシュへ。
また、この回答は、物理メモリは常にバイトであることを示していますさて、メモリのアドレス可能性とCPUアーキテクチャのアドレス可能性の違いは何ですか?
回答
ワードアドレス指定つまり、プロセッサのアドレスバスの行数は、ワード自体のビット数よりも少なくなります。
4バイトのワードがあるとします。(32ビットのアドレス空間)
このマシンがバイトアドレスの場合abこの場合、CPUのアドレスバスは32行になり、メモリ内の各バイトにアクセスできるようになります。
このマシンがワードアドレス可能の場合、CPUのアドレスバスは30行になります( $ 32-log_ {2} 4 = 30 $ )。これにより、メモリにアクセスできるようになります ONLY は4バイトのワード/チャンクであり、それもワードサイズの倍数であるアドレスからのものです。
CPUに特定のアドレスからバイトをフェッチするように要求すると、最初にアドレスの最下位2ビットがドロップされ(ドロップすると、0で上書きされます)、ワードがフェッチされます。結果のアドレスから、フェッチされたワード内のオフセットとして最下位2ビットを使用してバイトを返します。
これにより、CPUがアドレスの変更と処理により多くの時間を費やす必要があるため、メモリアクセス時間が増加します。フェッチされたワード。ただし、アドレスバスラインの削減により回路の複雑さが軽減されるため、ハードウェアコストの削減にも役立ちます。
ただし、このオーバーヘッドはバイトアドレス指定可能なマシンでは発生しないため、「byte抽出」の方が簡単です。
コメント
- あなたが言っていることを理解しています'。 div id = “4f5e1a206e”>
バイトアドレス指定の場合に発生しますか?CPUがワードの3番目のバイトを必要としていると仮定します。CPUは32ビットアドレスを送信し、最下位2ビットは10に設定されます。 t?しかし、1ワード幅のレジスタを使用している場合、どのようにバイトを格納するのでしょうか。 'この場合のCPUは、キャッシュから単語をフェッチして、'レジスタに格納しますか?
char arr[10]
とCPUがあるとしましょう。 3番目の文字、つまりarr[2]
を読みたい。次に、32ビットアドレスを使用してバイトにアクセスした後、レジスタの8LSBに格納します。ただし、アドレス指定可能なワードの場合、CPUは最初に3番目のバイトが属するワードのアドレスを計算し(つまり、2つのLSBを0で上書きし)、その中のワードをフェッチします' sレジスタ。その後、バイトオフセットを使用して必要なバイトを取得します。これは正しいですか?