ページレベルでインクリメンタルプロセスチェックポイントを実装しました(プロセスアドレス空間からファイルにデータをダンプするだけです)。
私が使用したアプローチは次のとおりです。2 つのシステム コールを使用しました。
完全なチェックポイント: アドレス空間全体をコピーします。また、ページに書き込みビットが設定されている場合は、それをクリアします。
増分チェックポイント: 書き込みビットが設定されている場合にのみデータをダンプし、再度クリアします。したがって、基本的には、インクリメンタル チェックポイントに対して書き込みビットが設定されているかどうかを確認します。ある場合は、ページ データをダンプします。
テストプログラム:
char a[10000];
sys_cp_range(a,a+10000);
a[3]='A';
sys_incr_cp_range(a,a+10000);
私の知る限り、カーネルはページ フォールトを実行し、SIGSEGV でプロセスを強制終了して不正な書き込みを処理する必要があります。それでも、プログラムは正常にチェックポイントされます。ここで正確に何が起こっているのですか?