エイリアシングの問題は、仮想的にインデックス化された物理タグ付きキャッシュに現れますか?


7

基本的に、そして簡単な方法として、TLBからの物理アドレスでキャッシュにアクセスできます。

ただし、別の方法として、仮想アドレスを使用してキャッシュにアクセスできます。ただし、この場合、コンテキストスイッチ間でキャッシュが完全にフラッシュされない場合(他のプロセスのデータがキャッシュに存在する可能性があります)、エイリアスの問題があります。同じメモリを別の仮想アドレスから送信できます。

しかし、私の教科書では、これらの問題を含めて、多くのものが仮想的に索引付けされた物理的なタグ付けによって解決できます。これでもエイリアスの問題が発生する可能性があると思います。

私が間違っている?


Shubhamは正しい答えを出しました。詳細/洞察については、85以上の論文をレビューするTLBに関する私の調査論文をご覧ください。論文の図3aはアドレスの細分割について説明し、3bはキャッシュインデックスがページオフセットから完全に計算されるため、特定のキャッシュサイズに対してエイリアシングが発生しない特殊なケースを示しています。
user984260 2018

回答:


6

十分に小さいキャッシュサイズを選択すると、エイリアシングの問題を解決できます。キャッシュのサイズが、キャッシュのインデックスを作成するためのビットがすべてページオフセットビットに由来するようなものである場合、複数の仮想アドレスがキャッシュ内の同じインデックス位置を指し、エイリアシングが解決されます。

たとえば、32ビットの仮想アドレス0xFFFF FFFFについて考えてみます。このシステムでは、ページオフセットビットを16ビットにするために、64kBのページサイズを使用しています。次に、インデックスビットを10(セット数1024)に、ブロックサイズを64バイトに選択します。次に、インデックスビットとブロックオフセットビットの両方が仮想アドレスのページオフセットビットに収容されます。別のアドレス0xEEEE FFFFを考えてみます。このアドレスはエイリアスが発生するように見えますが、仮想アドレスが異なっていても、下位ビットがキャッシュ内の同じ場所にマップするように強制し、エイリアスはありません。このアプローチの唯一の欠点は、キャッシュサイズがページサイズによって制限されることです。


素人の言葉で。仮想メモリ全体の概念は、異なる仮想ページ番号と物理ページ番号に依存しています。VI-PTでは、物理番号は物理タグです。したがって、エイリアスの問題はありません(物理アドレスは一意であるため)。仮想アドレスは、オフセット部分からのインデックスを使用してキャッシュ内のエントリに絞り込むために使用されます(これは、物理/仮想アドレスの場合と同じです)。したがって、これは非ページ番号ビットを使用するためのインデックス付けを制限します。したがって、キャッシュサイズが小さくなります。
Anup Buchke

1

VIPTキャッシュとエイリアスに関連する2つの側面があります。また、問題は、命令セットアーキテクチャによって少し異なる場合があります。

1)

各プロセスの仮想アドレスを外部物理アドレスにマップするには、いくつかの方法があります。

「プロセス識別子」または「アドレススペース識別子」(iirc ARM、SPARC、MIPS)を使用するものもあり、実行中の各プロセスには、異なるページテーブルの選択に使用される異なる値が与えられます。

一部のユーザーは「論理/物理」アドレスを使用します。各プロセスのアドレス(=論理)は、すべてのプロセス間で共有されるより大きなアドレス空間(たとえば32から52ビット)(=仮想)に変換され、TLBはこれらの拡張仮想アドレスを物理アドレス。PowerPCはそのようなものです。

各コンテキスト切り替え中にすべてのTLBとすべてのキャッシュをフラッシュする必要をなくすために、キャッシュタグ(およびTLB)は、対応するアドレススペース識別子または拡張仮想アドレスを格納できます。各プロセスの各アドレスは異なり、エイリアスは不可能です(よく、たとえば、すべてのプロセスの同じ仮想アドレス範囲にマッピングされた特権カーネルコードを実行する場合など、エイリアスが予想されます)

2)

さらに微妙な問題は、複数のプロセスが同じ物理メモリ領域を共有する場合です。この物理メモリの範囲は、プロセスごとに異なる仮想アドレスにマップされる場合があります。1つのプロセスによる変更は、他のプロセスからは見えない場合があります。特に、書き込みがすぐにRAMに転送されないライトバックキャッシュの場合。OSの支援による1つの解決策は、キャッシュサイズに応じてプロセス間のアライメントを保証することです。仮想アドレスが異なるプロセス間で異なる場合でも、それらは同じキャッシュラインでエイリアス化され、自動的に相互に排出されます。

仮想インデックス付きキャッシュは、これらのエイリアシングの問題のため、主に単純な(古い)CPUで使用されます。現在、非常に一般的な手法は、L1キャッシュの各ウェイをMMUページサイズ(通常は4kBまたは8kB)に制限することです。これにより、キャッシュインデックスが物理アドレスと仮想アドレスで共有され、キャッシュフェッチがMMUアドレス解決と同時に発生します。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.