1. 序章

このチュートリアルでは、キャッシュミス、TLB(トランスレーションルックアサイドバッファ)ミス、ページフォールトなど、いくつかのあいまいな概念について説明します。これらの概念を理解するには、まず、それらがどのように連携して機能するかを理解する必要があります。交響曲。 次に、各コンポーネントの詳細と、そもそもなぜそれらが必要なのかについて説明します。

2. 定義

それらがどのように連携するかを理解する前に、定義を確認することから始めましょう。

2.1. キャッシュ

キャッシュはRAMに似ていますが、CPUに近いです。 必要なデータにアクセスするためにRAMを完全に通過する代わりに、CPUはキャッシュからデータをより速く取得できます。 ただし、データがキャッシュに存在しない場合は、キャッシュミスが発生します。

2.2. TLB

TLBはメモリキャッシュと考えることができます。 これにより、メモリ位置へのアクセスにかかる時間が短縮されます。 仮想メモリから物理メモリへの最近の変換を保存するため、変換キャッシュをアドレス指定するためにも呼び出します。

2.3. ページテーブル

オペレーティングシステムの仮想メモリシステムは、それをデータ構造として使用します。 仮想メモリと物理メモリ間のマッピングを保存します。 メモリ管理ユニットは、この特定の変換を処理します。

ページテーブルには、関連するページが物理メモリであるかどうかを示す各アイテムのフラグがあります。 ページテーブルエントリには、ページが物理メモリにある場合にページが保存される物理メモリアドレスが含まれます。 ただし、ハードウェアがページを参照し、そのページのページテーブルエントリがページが物理メモリにないことを示している場合、ページフォールトが発生します。これにより、オペレーティングシステムのページングスーパーバイザコンポーネントが呼び出されます。

3. メモリ階層

メモリ階層がなければ、プログラマーが無制限の量の高速メモリを持つことはほとんど不可能です。 局所性の原則によると、ほとんどのプログラムはすべてのコードまたはデータに均一にアクセスするわけではありません。 この原則の結果として、より小さなハードウェアと組み合わせると、より高速な視点が得られ、メモリ階層の速度、コスト、およびサイズが異なります。 次の図で、さまざまなレベルのメモリ階層を確認できます。

3.1. キャッシュ、TLB、仮想アドレス指定が必要なのはなぜですか?

目標は、より低コスト、より高速なアクセス、およびより広い領域を備えたメモリシステムを提供することです。 これにより、さまざまなレベルでさまざまなソリューションが実現します。 キャッシュはCPUのパフォーマンスを向上させます。 CPUは、メモリに到達する代わりに、キャッシュに直接アクセスできます。さらに、仮想メモリは、プログラマーにとって物理メモリを無限大にします。 仮想アドレス指定を使用することにより、物理メモリはディスクのキャッシュの役割を果たします。

仮想アドレス指定用のキャッシュが必要な場合、TLBがステージに入り、仮想メモリのキャッシュとして機能します。 これは、最近使用されたアドレスの変換のための一種の特別なキャッシュです。オペレーティングシステムは、TLBミスを例外として処理します。 TLBミスが頻繁に発生するため、簡単な交換戦略があります。

全体像を見ると、キャッシュメカニズムがメモリ階層において重要な役割を果たしていることがわかります。 これは、ハードウェアレベルのパフォーマンスに影響を与えるだけでなく、メカニズム自体が他の抽象化レベルの他の問題の解決にもつながります。

4. キャッシュミス、TLBミス、およびページフォールト

キャッシュ、仮想メモリ、物理メモリ、TLB、およびそれらすべてがどのように連携するかについて詳しく説明する前に、下の図の全体像を見てみましょう。下の図を簡略化して、第1レベルと第2レベルのキャッシュの区別を考慮しないようにしました。これは、すべてのビットがどこに行くのかがすでに混乱しているためです。

まず、仮想アドレスが論理的にページ番号とページオフセットに分割されていることがわかります。 ページ番号はTLBに送信されます。 TLBの一致がヒットした場合、物理ページ番号がキャッシュタグに送信され、一致するかどうかが制御されます。 一致する場合は、キャッシュヒットです。 それ以外の場合は、キャッシュミスです。 この場合、物理アドレスを使用してメモリからブロックを取得し、キャッシュが更新されます。

TLB内にページが見つからない場合、TLBミスが発生します。この状況では、ページテーブルに移動して、対応するページを探します。 ページテーブルで対応するページが見つからない場合は、ページフォールトが発生します。 この場合、オペレーティングシステムを介してディスクからページを読み取ります。

ページをメモリに転送すると、メモリがいっぱいになる可能性があります。 この場合、被害者のページを見つけて、被害者のページを新しいページPで上書きします。 次に、ページテーブルとTLBを更新します。

これは、全体的なメカニズムが内部でどのように機能するかです。 これらすべての概念の背後にある主要なアイデアを共有するために、いくつかの部分を簡略化しました。 詳細に入ると、さまざまなキャッシュレベルがあり、メモリ階層の問題を解決するためにさまざまなタイプのTLBがステージに登場していることがわかります。

5. キャッシュと仮想メモリの違い

多くの用語は異なりますが、キャッシュはいくつかの点で仮想メモリに似ています。 ページまたはセグメントはブロックのようなものであり、その結果、ページフォールトまたはアドレスフォールトはミスに対応します。 この記事で前述したように、CPUは仮想アドレスを生成します。

ハードウェアとソフトウェアはこれらのアドレスを処理し、メイン(物理)メモリにアクセスする物理アドレスに変換します。 このプロセスをメモリマッピングまたはアドレス変換と呼びます。

キャッシュと仮想メモリには他にも違いがあります。

  • キャッシュミスの交換はハードウェアが担当します。 ただし、オペレーティングシステムは仮想メモリの置き換えを制御します。
  • 仮想メモリのサイズはプロセッサアドレスのサイズに依存しますが、キャッシュサイズはプロセッサアドレスのサイズとは関係ありません。
  • 仮想メモリは、メインメモリの下位レベルのバッキングストアであるだけでなく、ファイルシステムのストレージでもあります。

6. 結論

この記事では、コンピューティングシステムのメモリ階層設計の重要な概念を共有しました。最初に、キャッシュミス、TLBミス、およびページフォールトの全体像を示しました。 次に、これらの概念を簡単に紹介しました。 最後に、キャッシュと仮想メモリの違いを指摘しました。