2

定期的にチェックポイントを取得するアプリケーションがあります(1秒または2秒ごと)。チェックポイントは、を使用して取得されforkます。何らかの理由で、最後のチェックポイント以降に変更されたページも書き留める必要があります。私の頭に浮かぶ最も効率的な方法は、フォークで使用されるコピーオンライトメカニズムが原因でページフォールトが発生した場合はいつでもページを書き留めることができます。最初は(フォークの直後に)同じ物理ページがにマップされます。元のプロセスとフォークされたプロセスですが、元のプロセスがページに書き込もうとすると、新しい物理ページがそのページアドレスにマップされます。

これを行うにはカーネルに変更を加える必要があると思いますか、それともシグナルハンドラーを使用してユーザースペースでこれを行うことができますか?この時点で私が行っていたのは、アプリケーションが使用するすべてのページをチェックポイントを取った後に読み取り専用にし、ページがアドレスを書き留めるために書き込まれるときにシグナルハンドラーを使用して障害をトラップすることでした。ただし、これは、コピーオンライトでページを書き留めるのに比べて非効率的です。どうすればそれを達成できますか。カーネルのどの部分を変更する必要がありますか?誰かが私が変更を加える必要があるコードのその部分へのリンクを私に提供できますか?また、これが同じまたはほぼ同じ効率でユーザースペースで実行できるかどうかを誰かにアドバイスしてもらえますか?

4

0 に答える 0