プロセスのページテーブルは、どのページが置き換えられたかをどうやって知ることができますか?

プロセスのページテーブルは、どのページが置き換えられたかをどうやって知ることができますか?

私は次のリンクに言及しています:

私たちが探している物理ページがスワップ領域にあるときのページテーブルの内容

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は失敗し、カーネルは状況を解決するために再介入します。

おすすめ記事