1

ARM11 で言われているように、キャッシュは物理的にアドレス指定され、多くのキャッシュ エイリアシングの問題を解決し、コンテキスト スイッチのオーバーヘッドを削減します。

物理アドレスを理解するには?キャッシュ エイリアシングの問題を解決し、コンテキスト スイッチのオーバーヘッドを削減するには、どのように役立つのでしょうか?

4

1 に答える 1

8

キャッシュには 3 つの一般的なタイプがあります。

  • VIVT = Virtually Indexed Virtually Tagged
  • VIPT = Virtually Indexed Physically Tagged
  • PIPT = 物理的に索引付けされた物理的にタグ付けされた

もあります

  • PIVT = 物理的にインデックス付けされた、仮想的にタグ付けされた

PIPT は通常、第 2 レベル以降のキャッシュに使用されます。これは、その時点で物理アドレスを知る必要があるためですが、armv7 では PIPT L1 D キャッシュも導入されました。PIVT は実際には実用的ではないため、現実の世界では使用されません。

違いは、キャッシュ ラインが基になるメモリに接続される方法です。

Virtually Indexed とは、純粋なキャッシュ ライン ルックアップが仮想アドレスで実行されるため、仮想アドレスから物理アドレスへの変換の前に実行できることを意味します。タグ付けは、キャッシュ ラインが実際に基になるメモリにマップされるか、同じキャッシュ ラインにたまたまマップされる他のメモリ位置のデータを含むかどうかを決定します。

タグ付けが仮想アドレスで行われる場合、たまたま同じ仮想アドレスを使用する 2 つのプロセスが互いにトリップする可能性があります。これは、一方のプロセスがキャッシュに入れられたデータにアクセスする可能性があるためです。そのため、VIVT でキャッシュされた CPU の場合、カーネルはコンテキスト スイッチでキャッシュ全体をフラッシュする必要があります。そのため、新しいプロセスが誤って誤ったデータにアクセスすることはありません。つまり、一般に、コンテキスト スイッチは VIVT キャッシュ CPU では非常にコストのかかる操作です。ARMv5 以降では、仮想アドレスをタグで変更する、いわゆる Fast Context Switch Extensions がサポートされています。しかし、それには多くの制限が伴います。

対照的に、VIPT は引き続き仮想アドレスを使用してキャッシュ ラインを検索しますが、タグを物理アドレスと照合するため、キャッシュ ライン ルックアップと並行して MMU ルックアップを実行できます。

エイリアシングは、VIVT キャッシュのもう 1 つの大きな問題です。2 つの仮想アドレスが同じ物理メモリの場所を指している可能性があるためです (これは、ユーザー空間とカーネル空間の間でメモリを共有している場合に発生する可能性があります)。そのため、キャッシュ内に異なるデータを持つ 2 つの場所が存在する可能性があり、適切に管理することが非常に困難になる可能性があります (キャッシュを正しい順序で明示的にフラッシュして無効化する)。

于 2012-07-05T15:19:28.337 に答える