我有一个应用程序,它会定期检查检查点(每1秒或2秒)。使用fork
获取检查点。出于某种原因,我还需要记下自上一个检查点以来已被修改的页面。我想到的最有效的方法是,由于fork中使用的写时复制机制,我们可以在出现页面错误时记下页面,其中最初(紧接在fork之后)相同的物理页面映射到原始进程和分叉进程,但是当原始进程尝试写入页面时,将为该页面地址映射新的物理页面。
我想,我需要在内核中进行修改才能做到这一点,还是可以通过使用一些信号处理程序在用户空间中完成?此时我正在做的是使应用程序使用的所有页面仅在获取检查点后读取,并在写入页面时使用信号处理程序捕获故障以记下其地址。然而,与在写时复制上记下页面相比,这是低效的。我怎样才能做到这一点。我需要修改哪个内核部分?有人可以提供我需要进行修改的代码部分的链接吗?也有人可以告诉我,如果可以在用户空间中以相同或几乎相同的效率完成这项工作吗?