CPUがアクセスしようとしているコンテンツがメモリにロードされていないためにページフォールト例外が発生した場合、OSはセカンダリストレージ(ハードディスクなど)で欠落しているコンテンツをどのように見つけますか?
よろしくお願いします。
-ivan
CPUがアクセスしようとしているコンテンツがメモリにロードされていないためにページフォールト例外が発生した場合、OSはセカンダリストレージ(ハードディスクなど)で欠落しているコンテンツをどのように見つけますか?
よろしくお願いします。
-ivan
ショートバージョン:無効なPTEのアドレスビットは、セカンダリストレージ(スワップファイル)内のオフセットにマップされます。
長いバージョン:そこで何が起こっているのかを理解するために、仮想から物理への変換の仕組みについて簡単に要約してみましょう。x86プラットフォームでの答えについて説明します。
CR3プロセッサレジスタには、ページディレクトリの先頭を指すように20ビットが割り当てられています。仮想アドレスの上位10ビットは、アドレスが使用されるページディレクトリエントリ(PDE)をエンコードします。これは、ページテーブルエントリ(PTE)の配列であり、アドレスの次の10ビットは、PTEが実際の物理ページを参照する場所をエンコードします。質問。最後の12ビットはページ内でオフセットされます。
オペレーティングシステムがメモリからページを削除すると、PTEは無効としてマークされ、PTEのアドレスビットがページファイルにオフセットされます(元の質問に答えます)。
プロトタイプPTEを使用するため、メモリマップトファイルでは少し複雑になります。
さらに詳しい情報に興味がある場合は、Markrussinovichの「WindowsInternals」の本を強くお勧めします。
OSは、ページフォールトに関連付けられたメモリマッピング構造を特定します。これには、特に、関連付けられたファイルへのハンドルがあります。ハンドルを取り、計算を行ってファイルへのオフセットを計算してから、読み取りを発行します。読み取りが戻ると、メモリマネージャはそれをRAMにコピーし、そのページを物理フレーム(実際のRAM)でバックアップされているものとしてマークします。