2

我有一个应用程序,它会定期检查点(每 1 或 2 秒)。检查点是使用fork. 出于某种原因,我还需要记下自上次检查点以来已修改的页面。我想到的最有效的方法是,每当由于 fork 中使用的写时复制机制而出现页面错误时,我们都可以记下页面,其中最初(在 fork 之后)相同的物理页面被映射到原始进程和分叉进程,但是当原始进程尝试写入页面时,会为该页面地址映射一个新的物理页面。

我想,我需要在内核中进行修改才能做到这一点,或者这可以通过使用一些信号处理程序在用户空间中完成吗?此时我正在做的是让应用程序使用的所有页面在获取检查点后只读,并在写入页面时使用信号处理程序捕获错误以记下它们的地址。但是,与写时复制时记下页面相比,这是低效的。我怎样才能做到这一点。我需要修改内核的哪一部分?有人可以提供我需要修改的那部分代码的链接吗?如果这可以在用户空间中以相同或几乎相同的效率完成,有人可以建议我吗?

4

0 回答 0