ページがディスクにスワップアウトされた後、ページテーブルの内容はどのように見えますか?


1

私が理解していることから、ページテーブルは仮想アドレスを物理アドレスにマッピングします。しかし、ページがディスクにスワップアウトされた場合はどうなりますか?データの場所は、物理アドレスよりも多くのビットを書き込む必要はありませんか?スワップファイルが変更されると、データの場所は変わりませんか?この問題は、異なるオペレーティングシステムで異なる方法で解決されますか?

回答:


1

簡単な質問から始めましょう。

スワップファイルが変更されると、データの場所は変わりませんか?

ページファイル内の既存のデータの場所を変更するページファイルの変更はありません。ページファイルが拡張されると、(「エクステント」または「ラン」にグループ化された)より多くのクラスターが最後に追加されるだけなので、既存のデータの場所は変更されません。ページファイルの場所は常にページファイルの開始点を基準にしているため、既存のエクステントを何らかの方法で移動しても、ページファイルの場所は変わりません。

さて、ビットについて:

データの場所は、物理アドレスよりも多くのビットを書き留める必要はありませんか?

はい、ページファイルが可能な物理メモリサイズよりも大きくなる可能性がある場合、ページファイル内のページを指定するには、物理​​ページ番号を指定するビットよりも多くのビットが必要です。

PAEが有効になっていないx86では、物理ページ番号(PFN、「ページフレーム番号」の略)のページテーブルエントリ(PTE)に20ビットがあります。(PTEは32ビットです。他の12ビットはフラグビットです。ビット0は、ページを参照するときにページフォールトが発生しないことを示す「有効」または「ページ存在」ビットです。3つのフラグビットはOSによる使用。「読み取り専用」、「カーネルモードでのみアクセス可能」、「キャッシュの無効化」などの意味があります(この段落のすべてはCPUアーキテクチャによって決定されます-OSに依存しません)。

Windowsでは、ページファイルにあるページの場合、有効なページのPFNを保持するPTEの同じビットは、実際にページ内の場所を保持するために使用されます。これは、ページファイルの先頭からのオフセットをページサイズ単位で表したものです。物理ページの20ビットPFNがこれらのシステムのRAMを4 GBに制限するように、これはページファイルを4 GBに制限します。

ただし、複数のページファイルを持つことができます。PTEにはさらに4つのビットがあり、ページファイル内のページに対して、ページファイル番号を示します。したがって、合計64 GBのページファイル領域に対して、16個のページファイルが存在する可能性があります。

古いx86専用プロセッサでPAEを有効にすると、PTEの幅は64ビットになり、CPUはPTEに24ビット(20から最大)のPFNを実装します。これにより、64 GBのRAMが許可され、Windowsでは64 GBのページファイルが許可されます。そのPTE形式には多くの未使用ビットがあるため、OSは実際にはより大きなページファイルをサポートできます。32ビットWindowsがサポートしているかどうかはわかりません。

64ビットモードの新しい64ビットプロセッサには、40ビットのPFNがあり、再び、無効な(つまり存在しない)ページのページファイルオフセットを保持するために同じビットが使用されます。したがって、RAMまたはページファイルは、2 ^ 40ページを記述することができます。これは、1から2兆ページの、1024から4番目のページです。また、各ページは4 KiBです。したがって、4 PiBページファイルが最大であり、ハードウェアでサポートされる最大RAMでもあります。繰り返しになりますが、Windowsは複数のページファイルを持つことができると言っています。すぐにページファイルのスペース制限に達するとは思わない。:)

CPUによって強制されない上記のすべてはOS固有です。実際、page-within-pagefileをPTEに保存する必要はまったくありません。別の構造を使用できます。無効なPTEはHPT構造にまったく格納されていないため、ハッシュされたページテーブルを使用するPowerPCなどのプロセッサでは、OS はPTEに格納できません

しかし、x86 / x64では、無効なPTEを使用しない理由は本当にありません。ところで、これは機能します。「有効な」ビットがクリアされていると、MMUはPTEの残りの部分について1ビット(意図された)を気にしないからです。したがって、無効なPTEの場合、OSが好きなように使用するために1ビットを除くすべてが利用可能です。実際、Windowsには、ページの状態に応じて、「無効なPTE」の他の形式がいくつかあります。たとえば、スタンバイリストまたは変更済みリストのページの場合、PFNフィールドには、RAM内のページの物理的な場所が引き続き含まれています。無効なページのPTEは、「仮想アドレス記述子」を参照するか、共有ページの場合は「プロトタイプPTE」を参照する場合があります。ハードウェアMMUはこれらの構造のいずれも参照せず、PTEのみを参照します。

詳細は、Solomon、Russinovich、およびIonescuによるWindows Internalsの「メモリ管理」の章にあります


良いフィードバックをありがとう!あなたが任意のフォローQsのを持っている場合は、コメントとして投稿してください、またはあなたの元Q.変更することを躊躇しないで
ジェイミー・ハンラハンを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.