5

あなたは多くのプログラムを知っているかもしれません。たとえば、いくつかのパスワード クラッキング プログラムなどです。実行中にプログラムを停止できます。プログラムを再度実行すると (同じ入力を入力するかどうかに関係なく)、元の場所から続行できます。残っています。これらのプログラムはどのような手法を使用しているのだろうか?

[編集] 主に再帰関数に基づいたプログラムを書いています。私の知る限り、このような状態をプログラムに保存するのは非常に難しいと思います。どういうわけか、スタックの内容、関数呼び出し、およびプログラムに関連するデータを保存し、再起動すると、停止していないかのように実行できる手法はありますか? これは私の頭の中にある概念なので、意味をなさない場合はご容赦ください...

4

4 に答える 4

2

持続性を使用します。

永続性は、オブジェクトの寿命がプログラムの実行寿命を超えているメカニズムです。

シリアル化を使用して、プロセスに関連するオブジェクトの状態をローカル ハード ドライブに保存します。

于 2009-12-06T17:02:59.127 に答える
2

各プログラムごとに異なります。たとえば、ブルート フォース パスワード クラッカーのような単純なものの場合、実際に保存する必要があるのは、最後に試行したパスワードだけです。他のアプリでは、いくつかのデータ ポイントを保存する必要がある場合がありますが、実際にはそれだけで十分です。現在の場所を再構築するために必要な最小限の情報を保存して読み込むだけです。

もう 1 つの一般的な手法は、プログラム全体の状態のイメージを保存することです。状態を保存する機能を備えたゲーム コンソール エミュレーターで遊んだことがあるなら、これが彼らのやり方です。同様の手法が Python に存在し、ピクルス化を使用します。環境が十分に安定している (つまり、変化するポインターがない) 場合は、アプリのメモリ状態全体をバイナリ ファイルにコピーするだけです。再開したいときは、それをメモリにコピーして、再び実行を開始します。これにより、ほぼ完全な状態の回復が得られますが、それが可能かどうかは、環境/言語に大きく依存します。(たとえば、ほとんどの C++ アプリは、OS の助けがなければこれを行うことができませんでした。または、これを念頭に置いて非常に慎重に構築された場合)。

于 2009-12-06T17:07:11.240 に答える
1

これを実現するには、状態 (つまり、計算中の場所) を継続的に保存する必要があります。このようにして、probram を中断した場合、再起動したときに、計算の途中であり、その計算のどこにあったかを知ることができます。

また、メインの計算をユーザー インターフェースとは別のスレッドに配置したい場合もあります。このようにして、ユーザー インターフェースからの「クローズ / 割り込み」リクエストに応答し、スレッドを停止 / 一時停止することでそれらを適切に処理できます。

于 2009-12-06T17:02:45.303 に答える
0

Linux には、プロセス レベルの保存と再開をサポートする CRIU という名前のプロジェクトがあります。これは OS の休止状態と再開に非常に似ていますが、粒度はプロセスに分割されます。また、コンテナ テクノロジ、特に Docker もサポートしています。詳細については、 http://criu.org/を参照してください。

于 2015-06-08T05:49:41.080 に答える