VIPTキャッシュとエイリアスに関連する2つの側面があります。また、問題は、命令セットアーキテクチャによって少し異なる場合があります。
1)
各プロセスの仮想アドレスを外部物理アドレスにマップするには、いくつかの方法があります。
「プロセス識別子」または「アドレススペース識別子」(iirc ARM、SPARC、MIPS)を使用するものもあり、実行中の各プロセスには、異なるページテーブルの選択に使用される異なる値が与えられます。
一部のユーザーは「論理/物理」アドレスを使用します。各プロセスのアドレス(=論理)は、すべてのプロセス間で共有されるより大きなアドレス空間(たとえば32から52ビット)(=仮想)に変換され、TLBはこれらの拡張仮想アドレスを物理アドレス。PowerPCはそのようなものです。
各コンテキスト切り替え中にすべてのTLBとすべてのキャッシュをフラッシュする必要をなくすために、キャッシュタグ(およびTLB)は、対応するアドレススペース識別子または拡張仮想アドレスを格納できます。各プロセスの各アドレスは異なり、エイリアスは不可能です(よく、たとえば、すべてのプロセスの同じ仮想アドレス範囲にマッピングされた特権カーネルコードを実行する場合など、エイリアスが予想されます)
2)
さらに微妙な問題は、複数のプロセスが同じ物理メモリ領域を共有する場合です。この物理メモリの範囲は、プロセスごとに異なる仮想アドレスにマップされる場合があります。1つのプロセスによる変更は、他のプロセスからは見えない場合があります。特に、書き込みがすぐにRAMに転送されないライトバックキャッシュの場合。OSの支援による1つの解決策は、キャッシュサイズに応じてプロセス間のアライメントを保証することです。仮想アドレスが異なるプロセス間で異なる場合でも、それらは同じキャッシュラインでエイリアス化され、自動的に相互に排出されます。
仮想インデックス付きキャッシュは、これらのエイリアシングの問題のため、主に単純な(古い)CPUで使用されます。現在、非常に一般的な手法は、L1キャッシュの各ウェイをMMUページサイズ(通常は4kBまたは8kB)に制限することです。これにより、キャッシュインデックスが物理アドレスと仮想アドレスで共有され、キャッシュフェッチがMMUアドレス解決と同時に発生します。 。