私は次のリンクに言及しています:
私たちが探している物理ページがスワップ領域にあるときのページテーブルの内容
Linuxでコンテキスト切り替え後にページテーブルを更新する方法
カーネルはスワップパーティション\ファイルのスワップメモリページをどのように処理しますか?
私はまだ混乱しています。どのようにプロセスは、そのページの1つがセカンダリメモリにスワップされたかどうかを知っています。
例:
プロセスA1は1フレームの物理メモリを割り当て、ここに書き込みます。 PTEのプリセット、修正、および最新ビットは1に設定されます。
これでプロセスA2の番です。より多くのメモリが必要であり、MMUカーネルは修正ビットがセットされているので、プロセスA1のページを補助メモリに書き込むことを決定する。
プロセスA1が再び戻る。コンテキストとPTを復元し、ページを読み書きする準備が整いました(現在のビットがまだ1に設定されていると仮定)、プロセスA2のページにアクセスします。 (?)
私が理解したのは、そのプロセスは簡単ではありません。知るMMUは、特定のページがセカンダリメモリにあることを知っていますが、プロセスA1のPTEを変更する必要がある場所にどのページがありますか? MMUまたはPTには、ページが置き換えられ、ページから復元する必要があることを示すいくつかの情報が必要です。編集:PT / PTEがスタックにあっても、現在のビットは0に変わりますか?
答え1
プロセスはわかりませんが、カーネルは知っています。
MMUは、プロセスA1のページを補助メモリに書き込むことを決定する。
MMUはこれを決定せずにカーネルによって決定されます。 A2にさらにメモリが必要な場合は、カーネルに通知してA2に提供するページを見つけます。空き領域がない場合はページ校正を実行します。ページがバックアップストアに削除されても、ページが「属している」プロセス(存在する場合)に関係なく、「現在」ビットはクリアされます。カーネルはこれらの情報を追跡します。
A1に制御権が返されると、カーネルはA1のPTEを復元するためにカーネルが持っている情報を使用します。したがって、削除されたページのPTE現在のビットはクリアされます。 A1がこれらのページの1つにアクセスすると、MMUは失敗し、カーネルは状況を解決するために再介入します。