仮想アドレス空間が物理アドレス空間よりも大きい場合、アドレスマッピングはどのようにメモリに保存されますか?


14

40の物理アドレスビットを持つシステムで作業しているとしましょう。合計物理アドレス空間(バイトアドレス可能なメモリを想定)はバイト、または1 TiBです。また、仮想アドレスの長さが48ビットの場合、物理メモリ内の場所よりも多くのアドレスが仮想メモリで使用できることを意味します。240

「過剰な」アドレスはハードディスクの場所も参照する可能性があるため、これは理にかなっています。しかし、私が理解していないのは、仮想アドレスと物理アドレス間の変換がどのように行われるかです。VASの場所を物理的な場所にリンクするマッピングがどこかに格納されていると思います。物理的な場所よりも多くの仮想アドレスの場所がある場合、これらすべてのマッピングをメモリに保存するにはどうすればよいですか?少なくとも、各仮想アドレスを格納するために48ビットが必要であり、次に、マップ先の物理的な場所を格納するためにさらに40ビットが必要です。すべての場所をマッピングすると、物理メモリ自体よりも多くのメモリが必要になるため、明らかに、各仮想アドレスの対応する物理アドレスへの1:1マッピングを保存することはできません。

ここで正確に何が欠けていますか?


少量のメモリとアドレス空間でもそれはできません。16ビットの物理アドレスと16ビットの仮想アドレスがある場合、1:1マッピングのすべてを保存することはできません。
user253751

2
問題はあなたが考えているよりも複雑です。コンピューターのメモリがTBになることはめったにないため、物理メモリは仮想アドレススペースよりもはるかに少なくなります。さらに悪いことに、各プロセスには完全に独立した仮想アドレス空間があります!
Mooingダック

ハードディスクの場所に加えて、無駄にするビット/スペースがあります。たとえば、スタックの下に大きな領域をマッピングせずに検出できないオーバーフローを防ぐことができます。別のクラスの攻撃を防ぐために、ロードするものをランダム化できます。アドレスがカーネルまたはユーザーのものである場合、1ビットで表示したい-スペースの半分を無駄にしている場合でも先に進みます。ほとんどの教科書は仮想メモリのページングの側面に集中していますが、さらに多くのことがあります。
マチェイピエチョトカ

(アドレスが別名になることもあることに注意してください。これは有用な場合があるため、VA AとアドレスBはA!= Bでも同じPA Pを参照しています。)
Maciej Piechotka

回答:


26

この作業を行うための秘Theは「ページング」です。ハードディスクから物理メモリにデータを取り込むとき、数バイトだけを取り込むのではありません。ページ全体を表示します。4kバイトは非常に一般的なページサイズです。

個々のバイトではなく、ページのみを追跡する必要がある場合、マッピングはずっと安くなります。48ビットのアドレス空間と4096バイトのページがある場合、2 ^ 36ページ(約690億ページ)のどれを追跡するだけで十分です。それははるかに簡単です!すべてのページが見つかった場所の記録は、「ページテーブル」と呼ばれます。

実際に1〜256 TiBのメモリが必要な場合、このページテーブルを保存するために数ギガバイトを放棄することは大したことではありません。ただし、実際には、マルチレベルページテーブルを使用するなどのことを行います。これにより、実際に使用しているアドレス空間の領域のみのページを保持するため、もう少し効率的になります。


6
ページファイルは、メモリ不足のために再利用されたコンテンツを保持する必要がある物理ページフレームのコンテンツを含むディスク上の物理ファイルのWindows用語です。間違っていなければ、仮想ページアドレスを物理ページアドレスにマッピングするデータ構造は、ページテーブルと呼ばれるべきです。
モニカの復活-ζ--17年

@hexafractionあなたは正しいと思います。変更を加えました。
コートアンモン-復活モニカ

2
実際のメモリが大きい場合、ページテーブルに必要なメモリを削減する別の方法は、より大きなページを許可することです。x86には、4 KiBページと2/4 MiBページを混在させるオプションがあります。
ネイト・エルドリッジ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.