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