web-dev-qa-db-ja.com

実際に休止状態を*せずに*回復するために休止状態を作成/保存できますか?

マシンを実際に休止状態にしたりハイブリッドスリープ状態にしたりせずに、強制的または意図しない電源オフが発生した場合に、コンピューターを最後の状態(開いているプログラムなど)に戻すことができるようにしたいと思います。

これは可能ですか? Windowsは、休止状態またはハイブリッドスリープ時に作成された休止状態データから起動しますが、Windows内でこの休止状態データを手動で作成/更新することは可能ですか?

同様のことを達成できるサードパーティのプログラムはありますか? (仮想マシンを除く)正確な状態保存は必要ありませんが、少なくとも、開いているものを記憶して再度開く方法が必要です。

現在のところ、1時間使用しないとシステムをスリープ(ハイブリッドスリープ)するため、停電が発生した場合は、ハイブリッドスリープ状態データから起動できます。これは問題ありませんが、時折の電力損失に対処することなく、24時間年中無休で何でも実行することができなくなります。 (これは、本来よりもはるかに頻繁に発生するようです)

6
Enigma

あなたがそれをすることができない理由は少なくとも2つあります。

最初のもの。休止状態は ACPI電源状態 のおかげで機能します。 「ダンプRAMハードドライブにシャットダウンしてシャットダウンする」ほど単純ではありません。RAMがすべてではありません。また、デバイスに戻す必要があるデバイスもあります。以前の状態。ACPIがパーティに参加する場所です。S5状態に入るとデバイスを一時停止し、S0に戻るとデバイスを再開できます。ただし、S5はシャットダウンを意味するため、シャットダウンせずにコンピューターを休止状態にすることはできません。

2番目のもの。実行中のコンピューターをオンにしたまま休止状態にすることができるハードウェアがあると仮定します。これにより、並列コンピューティングを扱うときに直面する可能性のある問題と同様の問題が発生します。

コンピューターは順番に動作します。それらは一連の単純な(「その数を4つ増やす」のような本当に単純な)命令を1つずつ実行します。最近のPCはマルチコアCPUを搭載しており、理論的には一度に複数の命令を処理できますが、常に可能であるとは限りません。たとえば、3つの命令があるとします。

  1. ユーザーからXを読み取ります。
  2. Xに2を掛けます。
  3. Xを7インクリメントします。

ステップ2は、ステップ1が終了するまで処理できません。これは、その時点でXが不明であるためです。同様に、Xの値はステップ2で変更される可能性が非常に高いため、ステップ3はステップ2が終了するまで処理できません。これらのステップは1つずつ処理する必要があります。

ここで、銀行振込を処理するコンピューターがあると想像してみましょう。銀行口座にいくらかの金額があり、100ドルを友達の口座に送金したいと考えています。アルゴリズムは次のようになり、何らかの理由で段階的に処理する必要があります。

  1. アカウントに関連付けられている金額を100ドル減らします。
  2. 友達のアカウントの金額を100ドル増やします。
  3. 転送が処理されたので、転送キューから削除します。

コンピュータはこの転送の処理を開始し、突然、ステップ1と2の間で、停電のためにオフになります。

これで、コンピューターが「休止状態ではあるが稼働中」ではなかった場合、コンピューターは起動を開始し、問題が発生したことに気付きます。最近のすべての操作を検証する必要があることがわかります。すべて順調。

しかし、ステップ1の処理を開始する前に「休止状態であるが生きている」場合は、問題があります。休止状態のときにすべてが正常であったことを記憶しているため、コンピューターは問題が発生したことを認識しません。しかし、ハードドライブ上のデータは更新されており、$ 100はすでにアカウントから引き落とされていますが、まだ友達のアカウントに転送されていません。しかし、それは休止状態の後に起こったので、コンピュータはそれについて知りません。

コンピューターはあなたのアカウントからさらに100ドルを受け取り、それをあなたの友人に送金します。最初の100ドルはなくなりました。

実行中のシステムを「休止状態」にすることで発生する可能性のある、そのような問題は数十万あります。

8
gronostaj

仮想マシン内で作業する場合は、同様のことを実行できます。仮想マシンを使用すると、任意の時点でコンピューターのスナップショットを作成して、それらに戻すことができます。これは、VMWare、Hyper-V、およびVirtualBoxを使用して実行できます。

2
Keltari