web-dev-qa-db-ja.com

コンピュータは、クラッシュする前にどのように保存できるのですか?

コンピューターがクラッシュしたとき、何かがおかしくなり、もう実行できないという印象を受けました。

コンピューターがクラッシュする前に、どのように保存できるのでしょうか。

コンピュータは、いつクラッシュするかを知ることができますか(したがって、すべてのプロセスに通知します: "クラッシュしようとしているため、できるだけ早く保存してください")?

そうでない場合、ChromeMicrosoft Wordなどのプログラムが、コンピュータがクラッシュした後に「復元」サービスを提供できるのはなぜですか。

52
Pacerier

コンピュータが「クラッシュ」した場合、たとえば、「突然の」電源障害(この場合、何も実行できない)が原因である可能性があります。これは、何らかの厄介な内部イベント(たとえば、破損したページテーブル)が原因である可能性があります。同様に、何も実行できない、または何らかの理由で「その後の操作」を妨げる何らかの条件が原因である可能性があります。おそらく、新しいプロセスを開始できない、おそらく表示を更新できない、おそらくシステムでストレージが不足している可能性があります。

後者の状況でも、OSは制限内で機能し、少なくとも進行中のディスク操作を完了したり、ファイルを適切に閉じたりすることができます。さらに、もう少し機能が可能であれば、OSはさまざまなアプリケーションに通知できる場合があります。自分自身をきれいにシャットダウンするプロセス。

しかし、システムが「ハード」ダウンしても、システム全体および個々のアプリケーションは、システム全体および個々のアプリケーションの状態を復元できるように、「ジャーナル」および/または「チェックポイント」のシステムを維持している場合があります。すべてが「内部的に整合性がある」「重要な」ポイントに達し、重要なデータの最小限が失われた。

これはすべて、単一のメカニズムでは実現できませんが、システムレベルおよびアプリケーションレベルの機能レイヤーで実現されます。

特に電源障害に関しては、事前通知がある場合とない場合があり、「事前」警告は、ほんの一瞬、または(UPSまたはラップトップのバッテリーの障害により)数分になる場合があります。できることは警告の量に依存します。

ほとんどの場合、UPSを使用しないデスクトップシステムでは、ディスク操作を「休止」して、最後に電源がなくなったときに書き込みの最中にディスクが存在しないようにするのが最善の方法です。これにより、ディスク上に不良セクタが生成されるのを防ぎます。 RAM=がはるかに小さい場合、十分な時間がある可能性がありました(電源に大きなコンデンサがある場合、または奇妙なことに、ディスクドライブのローターに保存されているエネルギーを使用して電気)RAMが電源が落ちる前にディスクに書き込むことですが、RAMが100Mを超えると、その可能性はほとんどなくなりました。

[そして、昔、メモリが磁気「コア」で作成されたとき、RAMは、停電時に本質的に保存されていました(ただし、停電時に特定のワードが読み書きされた可能性があります)これにより、古いシステムが停電から回復しやすくなりました。]

ただし、UPSに似たもの(数分から数時間の追加電力が発生する場合があります)には、さらにいくつかのオプションがあります。 1つは、まるで「電源オフ」を要求したかのように、システムをシャットダウンすることです。これにより、各アプリケーション自体が終了し、システム全体が永続テーブルを書き出してシャットダウンします。これには長い時間がかかる場合があります(多くの人が気づいていると思います)。ただし、「ハイバネート」戦略を使用することもできます。この場合、RAMが単一のブロックとしてディスクに書き込まれ、システムの電源がオフになります。「ハイバネート」シナリオでは、電源を復元します。 RAMは、それが書き込まれた場所に正確に読み込まれ、ここで数ビットがスウィズルされ、中断したところから実行が再開されます。

一部の古い「ビッグアイアン」システムでは、緊急停止を行うために準休止戦略が使用されていました。メモリは上記のように書き出されましたが、電源が回復してメモリが読み込まれると、標準のシャットダウンが発生しました。これは、システム状態の一部のビット(特にI/Oコントローラー内)を確実に保存/復元して操作を続行できないために行われました。

6
Daniel R Hicks

ChromeとMicrosoft Wordは、作業中に現在の状態を定期的に保存します。アプリケーションまたはコンピューターがクラッシュした場合、アプリケーションを再起動すると、ディスクに保存されている状態が検索され、復元されます。クラッシュを予測する必要はありません。彼らは何かがうまくいかない場合に備えて常にあなたの状態を保存しています。

82

編集:これは、Windowsではなく、アプリケーションがクラッシュした場合にのみ機能します。

Windows Vistaには、クラッシュ時にWindowsがアプリケーション内の特別な関数を呼び出せるようにする新しいAPIがあり、シャットダウンする前にデータの回復を試みることができます。それはこのように動作します:

  • アプリが起動します
  • アプリがWindows関数を呼び出す:クラッシュしたらRecoverData()を実行してください
  • ...
  • アプリがクラッシュする
  • WindowsはアプリでRecoverData()を実行します
  • RecoverData()は、現在開いているドキュメントに関するデータを取得しようとしますが、その間、Windowsにpingを送信し続けて、まだ回復中であることを通知します。
  • RecoverData()が完了/タイムアウト/ pingを停止すると、Windowsはアプリを終了して再起動します。

詳細: http://msdn.Microsoft.com/en-us/library/windows/desktop/aa373351(v = VS.85).aspx

62
ZippyV

まあ、彼らは現在の状態を保存するだけですbefore彼らはクラッシュします。 X秒ごとの自動保存のように。

私は本当に差別化する必要があると思います:

  • ハードウェアクラッシュ:以前のチェックポイントでのみ回復できます
  • OSクラッシュ:アプリがデータを保存する方法がないため、OSがコアダンプのようなものをドロップする可能性があります
  • アプリケーションクラッシュ:アプリケーションクラッシュのOS機能により情報を保存できます
16

クラッシュの重大度によって異なります。非常に深刻なクラッシュ(コンピューターの最低レベル)は、コンピューターを単純に停止させます。保存される唯一の作業は、各アプリケーションが定期的にデータを自動保存することです。

それほど深刻ではないクラッシュの場合、コンピュータはシャットダウンする必要がある各プログラムに警告します。 [〜#〜] if [〜#〜]プログラムはこのメッセージをリッスンします。これは、プログラムが現在のデータを保存する場所です。ただし、すべてのプログラムがこのメッセージに注意を払うわけではありません。

10
beeudoublez

プログラムは、それらの状態を定期的にディスク上のファイルに保存します。コンピュータはそれを知ることができません。実際、クラッシュダンプはディスクドライバーを使用しても実行されません。システムは単にすべてのメモリをページアウトします。

8
kinokijuf

コンピューターがクラッシュしたとき、何かがおかしくなり、もう実行できないという印象を受けました。

はい、これは完全に本当です。ただし、論理的な観点から見ると、プログラムはコンピューター上で無制限に実行されているわけではありません。プログラムはオペレーティングシステムで実行されています!

コンピューターがクラッシュする前に、どのように保存できるのでしょうか。コンピュータは、いつクラッシュするかを知ることができますか(したがって、すべてのプロセスに通知します:「クラッシュしようとしているので、できるだけ早く保存してください」)。

[〜#〜] bsod [〜#〜] またはカーネルパニックの場合、オペレーティングシステムは本当に安全でないことが起こりそうだと判断しました(無効なメモリポインタ、一部の上書き) OSカーネルに割り当てられたメモリ、存在しないハードウェアへのアクセスなど)。その場合、オペレーティングシステムはすべてのプロセスを実行を停止するように要求し、RAMの内容をディスクに保存します(OSはメモリ割り当ての管理も担当しているため)、安全にシャットダウンしますまたはコンピュータを再起動します。

プログラムによってスローされた未処理の例外がオペレーティングシステムに伝播すると、個々のアプリケーション自体がクラッシュします。この場合、OSはプログラムの実行を停止し、開いているメモリ/ファイルハンドルを閉じます。

上記のどちらの場合も、プログラムの実行は通常、正常に終了しません。これらの場合、アプリケーションが突然実行を「停止」するだけなので、自分のデータを回復するのは個々のアプリケーション次第です。

そうでない場合、ChromeやMicrosoft Wordのようなプログラムが、コンピュータがクラッシュした後に「復元」サービスを提供できる可能性はありますか?

IIRC、これらの両方のアプリケーションは、前述の状態が発生した場合のデータ損失を防ぐために、アプリケーションの状態を定期的にディスクに保存します。たとえば、Wordは現在の作業中のドキュメントのバックアップコピーを数分ごとに自動保存するため、突然ハードリブートが発生した場合でも、データを回復する必要があります(与えるか、数分かかる)。何でもしました。

繰り返しになりますが、開発者として、アプリケーションがこれらの状況に確実に対応できるようにするのはあなた自身の責任です。

6
Breakthrough

ええ、データの復元プロセスはコンピュータのクラッシュだけでなく、停電、プログラムのクラッシュ、保存せずに終了するなどのためのものです。

あなたが言ったことは本当です、コンピュータはそれがいつクラッシュするかを「知る」ことができません。Wordの場合、それはそのデータを復元できるように定期的に自動保存します。 Chromeの場合、おそらくすべてのタブの情報をどこかに保存し、正常に終了したとき、または新しい別のセッションが開始されたとき、またはおそらく他の方法でもそれを削除します。終了に成功すると、データを復元できます。

私は(明らかに)MicrosoftやGoogleで働いていませんが、おそらくそれが(またはそれに近い方法で)機能しています。

3
FALL3N

@ bamboom が言うように、異なる方法で処理する必要があるいくつかの異なるタイプのコンピューター「クラッシュ」があります。事実上、停電は、ゼロ誤差による整数除算とは大きく異なります。

多くのプログラミング言語は例外(完全に問題が発生した場合のエラーハンドラーへの制御された分岐)もサポートしているため、アプリケーションの状態(開いているドキュメント、変更内容など)を保存できるトップレベルのアプリケーション全体のエラーハンドラーが存在する可能性があります。など)未処理のアプリケーションエラーが発生した場合。次に、アプリケーションが再起動されたときに、すべてを読み戻そうとするのがアイデアです。エラーのタイプとこれがどのように実装されているかによっては、常に機能するとは限りません。もちろん、エラーが発生した場合、および結果のデータに対して意味のあることを行うのは、アプリケーションごとに異なります。ただし、最小限の作業損失でクラッシュからユーザーを回復させるのに役立つ驚くほど効果的な戦略。

2
a CVn

ファイルシステムのタグがあるので、ここで簡単に説明します。

FAT/FAT16/FAT32ファイルシステムを使用するWindows OSを覚えているかもしれません。ユーザーが停電を経験し、システム全体がダウンしたとき、時々問題がありました。再起動しようとすると、ファイルが見つからず、起動できないと表示されます。これは、FAT32がトランザクション方式で実行していた操作を追跡しなかったために発生しました。

対照的に、新しいNTFSファイルシステムは、そのインフラストラクチャの journal サポートを受け取りました。つまり、低レベルのOSおよびハードウェアアクセスレイヤーでは、コミットするアクションを記録することにより、情報が安定した安全な状態に保たれます。

2
oleksii

プログラムは、「起動時にこのフラグが設定されていると、問題が発生した」などのフラグをディスクに書き込むことができます。起動時にそのフラグがチェックされ、設定されているかどうかが確認されます。もしそうなら、プログラムは何かがうまくいかなかったことを知っています。

このフラグは、プログラムが起動するとすぐに設定でき、プログラムが正常に終了するとオフになるため、常に機能します。コンピュータが予期せず電源が切れるなど、プログラムの終了によって予期しないエラーが発生した場合、正常に終了しなかったため、フラグは引き続き設定されます。その後、プログラムは最後に実行されたときに正常に終了しなかったことを知ることができます。

2
Paul

停電によるOSのシャットダウンについて話している可能性があります。これは間違いなく一種のクラッシュです。

電源は、入力の長い中断、適切な壁AC電流、メインボードに通知します(適切なAC電流)。出力を停止する前に、適切なDCの供給です。 _メインボードへの電流。大きなコンデンサに電力を蓄えるので、これを行うことができます。 OSは、ハードウェア割り込みの形でこの信号を受信します。

この長い間隔の間に、書き込みバッファリングファイルシステムがすべてのバッファリングされた書き込みを永続的な物理ストレージメディアに転送し、他のいくつかのシャットダウンルーチンを実行するのに十分な時間があります。

書き込みバッファリングファイルシステムの大きな利点の1つは、書き込みを並べ替えることにより、ハードディスクドライブのアームの動きを減らし、それらの数を減らすことができることです。

これは、@ oleksiiが彼の回答で言っていることと似ていますが、書き込みバッファリングファイルシステムでは、完了したトランザクションは通常すぐには転送されず、バッファリングされるだけです。電源障害時には、完了したトランザクションをディスクに転送する必要があります。

1
MarkDBlackwell

一部のオペレーティングシステムの一部のアプリケーションでは、メモリアクセス違反を示すセグメンテーションフォールトなどの信号にフックすることが可能です。この場合、単純なルーチンで可能な限り多くのデータを保存できます。そのデータが使用可能かどうかは別の問題です-クラッシュによってデータが破損した可能性があります。アプリケーションが信号を中断した後も実行を継続することは可能ですが、メモリが破損しているために不安定な状態になり、さらに問題が発生する可能性があるため、お勧めできません。

他のアプリケーションは、自動保存、またはその両方の組み合わせを使用します。これらは、これらのシグナルをキャッチするためのプログラムおよびプラットフォームサポートのニーズに依存します。

1
Thomas O

システムクラッシュは、OSによって実行されるもう1つのルーチンです。 「クラッシュ」が発生する理由は、プログラムまたはライブラリのロードに失敗したか、正しくロードされなかったため、システムファイルに永続的な害を及ぼす可能性があるためです。安全対策として、Windowsはシャットダウン/再起動を強制し、システムファイルへの書き込みをすべて停止してから、これらのファイルが不良プログラム/ライブラリによって編集されるのを許可します。

シャットダウン/再起動する前に、通常のシャットダウン/再起動と同じ機能を実行します。つまり、システムファイルを保存します。

単一のアプリケーション(Word/Chrome)が「進行状況」を保存する限り、それはアプリケーションの内部機能であり、特定の間隔で進行状況を保存します(通常はプログラム設定でも変更できます)。アプリケーション/システムがクラッシュした場合は、再起動後、そのファイルを確認して、セッションを復元するかどうかを確認できます。

1
Mechaflash

アプリは Cの信号 をキャッチし、特定のデータを保存できます。誤って受け取る可能性がある信号の1つは、SIGFPE浮動小数点演算例外(ANSI)です。エラーには、ゼロによる除算とオーバーフローが含まれます。もう1つの信号はSIGINTで、コンソールまたはターミナルでctrl + Cを押すと発生し、アプリを強制終了します

0
user3109