スワップ領域でページがスワップされたときにpteフラグを復元する方法は?

スワップ領域でページがスワップされたときにpteフラグを復元する方法は?

スワッププロセスを正しく理解したいのですが、ページがメモリに再スワップされた後にページのpteフラグがどのように復元されるかについての完全な説明が見つかりませんでした。これは、スワップアウト時にその情報とアドレスが「失われる」ためです。そのディスク領域は、ページのpteエントリからスワップアウトされた領域に挿入されます。仮想アドレスのフラグは保存されますが、vm_area_structスワップインプロセス中に使用されたステップを追跡できないことを理解しています。

もう1つの潜在的な問題は -fork親プロセスが変更され、親プロセスと子プロセスの両方が置き換えられた場合にどうなるかです。私が考える限り、両方のページテーブルでフラグがオンにread_onlyなっていますが、書き込みvm_area_structは許可されています。なぜなら両方があるからです。特定のメモリ領域に対する権限ですが、一度VM_MAYWRITE交換すると、read_onlyそのpteのフラグが「削除」されます。ページが置き換えられ、子プロセスが書き込みを望んでいる場合、両方を指すページに対してCOWテクノロジは引き続き機能しますか?

答え1

おっしゃったように、vm_area_structエラーが発生したメモリ領域を知らせ、この構造には保護フラグが含まれています。この関数は、ポインタがを指すように__do_page_fault呼び出されます。その後、この構造は、保護ビットをパラメータとして使用して呼び出された構造(パラメータから)まで渡されます。find_vmavm_area_structhandle_pte_faultdo_swap_pagevm_fault *vmfmk_pte

その他の質問:COWページが置き換えられ、プロセスがここに書き込もうとしている場合です。この場合、ページがスワップアウトされたため、ページ障害が発生します。ハンドラはこの状況を処理し、プロセスはディスクからページを読み取るまで待機し続けます。プロセスが再実行されるようにスケジュールされている場合は、無効な書き込みコマンドを再実行してからbam! - 今回は、書き込み中のコピーによってページが読み取り専用になったため、新しいエラーが発生しました。

関連情報