@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バイトのページがあります。