我在页面级别实现了增量进程检查点(我只是将数据从进程地址空间转储到文件中)。
我使用的方法如下。我使用了两个系统调用:
完成检查点:复制整个地址空间。此外,如果为页面设置了写位,请将其清除。
增量检查点:仅在设置写入位并再次清除时转储数据。所以基本上,我检查是否为增量检查点设置了写入位。如果是,则转储页面数据。
测试程序:
char a[10000];
sys_cp_range(a,a+10000);
a[3]='A';
sys_incr_cp_range(a,a+10000);
据我所知,内核应该通过使用 SIGSEGV 终止进程来进行页面错误并处理非法写入情况。然而,该程序已成功检查点。这里到底发生了什么?