13

CPUキャッシュと物理アドレスの間の「エイリアシング」の意味に少し混乱しています。最初に私はそれがウィキペディアで定義されていることを発見しました:

ただし、VIVTにはエイリアシングの問題があり、複数の異なる仮想アドレスが同じ物理アドレスを参照する場合があります。もう1つの問題は同音異義語で、同じ仮想アドレスが複数の異なる物理アドレスにマップされます。

しかし、しばらくして、DAC'05のプレゼンテーション(ppt)で別の定義を見ました:「仮想メモリを備えた組み込みプロセッサ用のエネルギー効率の高い物理的にタグ付けされたキャッシュ」

キャッシュのエイリアシングと同義語:

エイリアス:異なる物理アドレスにマップされた異なるコンテキストからの同じ仮想アドレス同義語:同じ物理アドレスにマップされた異なる仮想アドレス(データ共有)

私はネイティブスピーカーではないので、どちらが正しいかわかりませんが、Wikiの定義は正しいと思います。

編集:

CPUキャッシュでの「エイリアシング」の概念は、通常「同義語」を意味し、逆に「同音異義語」を意味します。より一般的なレベルでは、「エイリアシング」は「混乱」や「カオス」などです。したがって、私の意見では、「エイリアシング」とは、(X-> Y)のマッピングが「全単射ではない」ことを正確に意味します。

「X」=キャッシュされた物理アドレスユニットのサブセット。(各要素は1行のバイトです)

「Y」=有効なキャッシュラインのセット。(要素は「行」でもあります)

4

2 に答える 2

14

最初に仮想メモリについて学ぶ必要がありますが、基本的には次のとおりです。

  • プログラムが使用するメモリアドレスは、RAMが使用する物理アドレスではありません。これらは、CPUによって物理アドレスにマップされた仮想アドレスです。

  • 複数の仮想アドレスが同じ物理アドレスを指すことができます。

つまり、同じデータの2つのコピーを、知らないうちにキャッシュの別々の部分に置くことができます...それらは正しく更新されないため、間違った結果が得られます。


編集:

参考文献の抜粋:

キャッシュエイリアシングは、メモリの物理ページへの複数のマッピングに、キャッシュと非キャッシュなどの競合するキャッシュ状態がある場合に発生します。これらの競合する状態が原因で、プロセッサのキャッシュがフラッシュされると、その物理ページのデータが破損する可能性があります。そのページがドライバによってDMAに使用されている場合、これはハードウェアの安定性の問題とシステムのロックアップにつながる可能性があります。


まだ確信が持てない人のために

ARMv4およびARMv5プロセッサでは、キャッシュは仮想インデックス付きの仮想タグ付き(VIVT)キャッシュとして編成され、インデックスとタグの両方が仮想アドレスに基づいています。この方法の主な利点は、トランスレーションルックアサイドバッファ(TLB)が仮想アドレスのキャッシュラインのマッチングに関与しないため、キャッシュルックアップが高速になることです。ただし、このキャッシュ方法では、同じ物理アドレスを複数の仮想アドレスにマップできるキャッシュエイリアシングのため、より頻繁なキャッシュフラッシュが必要になります。

于 2011-05-10T08:22:52.683 に答える
5

@Wuはい、エイリアシングを理解するために仮想メモリをほとんど理解する必要はありません。最初に数行の説明をさせてください。

1GBのRAM(物理メモリ)があるとしましょう。私は4GBのメモリを持っているという見方をプログラマーに提示したいので、仮想メモリを使用します。仮想メモリでは、プログラマーは自分が4GBを持っていると考え、その観点からプログラムを作成します。物理メモリがどれだけ存在するかを知る必要はありません。利点は、プログラムがさまざまな量のRAMを搭載したコンピューターで実行されることです。また、プログラムは他のプログラムと一緒にコンピューター上で実行できます(物理メモリも消費します)。

これが仮想メモリの実装方法です。簡単な1レベルの仮想メモリシステムを紹介します(Intelには2/3レベルのシステムがあるため、説明が複雑になります。

ここでの問題は、プログラマーが40億のアドレスを持っていて、それらの40億のアドレスを配置できる場所が10億しかないことです。したがって、アドレスは仮想アドレス空間からのものであり、物理アドレス空間にマップする必要があります。これは、ページテーブルと呼ばれる単純なインデックステーブルを使用して行われます。仮想アドレスを使用してページテーブルにアクセスすると、そのメモリ位置の物理アドレスが提供されます。

詳細:物理スペースは1GBしかないため、システムは最後にアクセスした1GB相当の物理メモリのみを保持し、残りはシステムディスクに保持することに注意してください。プログラムが特定のアドレスを要求するとき、最初にそれがすでに物理メモリにあるかどうかをチェックします。もしそうなら、それはプログラムに返されます。そうでない場合は、ディスクから取り出して物理メモリに入れてから、プログラムに戻します。後者はページフォールトとして知られています。

仮想メモリのコンテキストでエイリアシングに戻る:仮想->物理アドレス間にマッピングがあるため、2つの仮想アドレスを作成して同じ物理アドレスにマッピングすることができます。これは、仮想アドレスXとYのページテーブルを見ると、どちらの場合も同じ物理アドレスを取得すると言っているのと同じです。

以下に、8エントリのページテーブルの簡単な例を示します。8つの仮想アドレスと3つの物理アドレスしかないとします。ページテーブルは次のようになります。

     0:1
     1:ディスク上
     2:2
     3:1
     4:ディスク上
     5:ディスク上
     6:ディスク上
     7:0


これは、仮想アドレス4にアクセスすると、ページフォールトが発生することを意味します。
仮想アドレス3にアクセスすると、物理アドレス1が取得されます。
この場合、仮想アドレス0と3は、両方の同じ物理アドレス1にエイリアシングしています。

注:概念を単純化するために、どこでも物理アドレスと仮想アドレスという用語を使用しました。実際のシステムでは、仮想から物理へのマッピングはアドレスごとではありません。代わりに、仮想空間のチャンクを物理空間にマッピングします。各チャンクはページと呼ばれ(そのため、マッピングテーブルはページテーブルと呼ばれます)、チャンクのサイズはISAのプロパティです。たとえば、Intelx86には4Kバイトのページがあります。

于 2011-05-10T15:54:27.823 に答える