プログラムの実行状態を保存する方法

プログラムの実行状態を保存する方法

完了するまでに数日かかることがある長い計算を実行するプログラムがあります。

コンピュータをシャットダウンして保存した状態でプログラムを実行できるように、プログラムの実行状態を保存する方法はありますか?それとも、何らかの理由でプログラムがクラッシュした場合(最初からではなく)、保存された状態で再起動できますか?

ベストアンサー1

プロセスがファイルシステムと持つことができるさまざまな相互作用のため、プロセスの再起動可能なスナップショットを作成することは困難です。一般に、UNIXシステムがこれをサポートすることを期待しないでください。再起動可能なコアダンプを備えたいくつかのUnixのバリエーションがありましたが、現代にはそうではないと思います(とても複雑になりました)。

Lispシステムには通常、再起動可能なイメージを生成するdumpコマンドがあります。したがって、サポートされているLisp方言でプログラムを書くことができます。ダンピング

仮想マシンでコードを実行し、VirtualBoxなどの仮想マシンマネージャを使用して定期的なスナップショットを作成できます。プログラムの用途によっては、パフォーマンスが低下する可能性があります。

最善の解決策は、おそらくプログラムにスナップショット機能を構築することです。純粋な計算プログラムの場合、これは通常わずかに難しいです。マルチスレッドコンピューティングプログラムでは、スナップショットポイントは、すべてのスレッドが通信するグローバル同期ポイントであることがよくあります。プログラムを作業パッケージとして構築し、プロセッサがアイドル状態になるたびに作業を開始するスケジューラでエントリポイントを作成します。シグナルを受信すると、スケジューラは現在のすべてのジョブが完了するのを待ち、プログラムの状態を保存してからジョブのスケジュールを再開します。

おすすめ記事