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


52

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

コンピューターがクラッシュする前に、どのようにして物を保存できるのだろうと思っていましたか?

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

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


13
質問への回答が質問のタイトルにあることが好きです。
クリス

電源がオフのときに非常灯はどのように点灯しますか?
ジョエルファン

@JoelFanあなたのバッテリー/発電機が死んでいる場合、彼らはそうではありません= P
Mechaflash

回答:


6

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

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

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

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

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

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

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

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

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


82

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


10
これは部分的にしか当てはまりません。OSは、アプリケーションが例外から回復するのを支援するフレームワークを提供します。
surfasb

3
@surfasb:もっと具体的に教えてください。私たちは常にUnixライクなシステムでシグナルをキャッチできましたが、それについて何をするかはアプリケーションプログラマ次第です。
ディートリッヒエップ

5
この答えは正しいです。エラー回復機能を備えたほとんどのアプリケーションは、定期的にデータを保存します。OSはいつクラッシュするかを知ることができません。そして、それがわかると、手遅れです。
Bogdacutu

1
@surfasb、コンピューター(カーネル)のクラッシュについての質問で、アプリケーションが例外を取得するのではなく、通常は処理され、すべてが正常であるか、せいぜいプロセスコアダンプであり、ドキュメントは保存されません。
psusi

62

編集:これは、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


8
+1:残念ながら、これは最も活用されていないツールの1つです。そして悲しいことに、これは最も支持された答えではありませんか?
surfasb

2
しかし、@ ZippyVは、クラッシュするアプリではなく、クラッシュするウィンドウ自体である場合、コンピューターに呼び出す機能がないというのは本当ではありません RecoverData()か?
12

12
OPは、アプリケーションのクラッシュではなく、コンピューター(OS)のクラッシュについて尋ねているため、この答えは無関係です。
vitaut

確かに、BSODの場合、これは機能しません。
ZippyV

MSが追加するなんて馬鹿げたAPIです。それは、その点に到達したら、アプリケーションがデータを保存するために数十年のために設計されている理由である、任意のデータを保存するためのアプリケーションを信頼することはできません前に、何かがうまくいきません。
-psusi

16

さて、クラッシュするに現在の状態を保存するだけです。X秒ごとに自動保存するように。

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

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

はい、OS /ハードウェアクラッシュなどのより深刻なクラッシュについて話していました
-Pacerier

10

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

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


1
しかし、私は後者の部分が実際に可能だとは思わない。Windowsは、カーネルモードで例外を検出した場合、またはカーネルアドレス空間の一部のデータが破損していることを意味するその他の致命的エラーを検出した場合にのみBSoDを提供します。カーネルモードプログラム(ドライバーなど)は無制限のメモリアクセスを持っているため、エラーをコンポーネントに簡単に分離できないため、システム全体をカーネルモードでシャットダウンする必要があります。データを保存するためにユーザー空間プログラムに信号を送ることは、本質的に非常に危険なカーネルの機能の多くを再開することを意味します。
-billc.cn

2
後者の部分は、BSoDではなくユーザー空間のクラッシュを指しているようです。
ダブロン

8

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


ページングは​​ディスクドライバーを使用して行われます。これがないと、カーネルはディスクへの書き込み方法を知りません。
-psusi

@psusiシステムがクラッシュしたとき、ページファイルはカーネルが安全に書き込むことができることを知っている唯一の場所です。
-kinokijuf

はい、実際にはディスクドライバーを介して書き込みを行います。
プーシィ

1
いいえ。標準のディスクドライバーではなく、特別な「dump_atapi.sys」(SCSIコントローラーの代わりにatapi)ドライバーを使用します。Int 13hも使用していると思います。
-kinokijuf

6

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

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

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

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

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

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

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

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

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


「その場合、オペレーティングシステムはすべてのプロセスに実行停止を要求し、RAMの内容をディスクに保存し、コンピューターを安全にシャットダウンまたは再起動します。」-ディスクに保存されるRAMの内容は、いつ「復元」されますか?
パセリエ

1
彼らは通常の出来事ではありません。ただし、コンピューターが定期的にクラッシュしている場合は、熟練したプログラマーがこのファイルを使用して原因を特定できる場合があります。
親切な

@Pacerier kindall(あなたがいる場合以来述べ、彼らは復元されませんでした RAMを回復、あなたはコンピュータが最初の場所でクラッシュする原因と同じ実行状態になります!)。[システムのプロパティ]-> [詳細設定]-> [起動と回復]で、Windowsのディスクに書き込まれる内容を変更できます。繰り返しになりkindallますが、この情報は、エラーの原因を特定しようとする開発者にとって最も有用です。
ブレークスルー

3

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

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

私は(明らかに)MicrosoftやGoogleで仕事をしていませんが、おそらくそれが(またはそれに近い)やり方です。


2

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

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


2

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

多くのプログラミング言語は例外もサポートしているため(完全に問題が発生した場合のエラーハンドラーへの制御された分岐)、アプリケーションの状態(開いているドキュメント、変更を含む)を保存できる最上位のアプリケーション全体のエラーハンドラーが存在する可能性がありますなど)未処理のアプリケーションエラーが発生した場合。その考えは、アプリケーションが再起動されたときにすべてを読み戻そうとすることです。エラーのタイプとこれの実装方法によって異なりますが、常に機能するとは限りません。もちろん、エラーが発生した場合や結果のデータを使用して意味のある処理を行うのは、それぞれ個別のアプリケーション次第です。ユーザーが最小限の作業量でクラッシュから回復するのを支援する驚くほど効果的な戦略。


2

ファイルシステムのタグがあるので、ここで低レベルのポイントにしたいと思います。

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

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


1

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

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


ヒント:Windowsにはありません。
-kinokijuf

1

システムクラッシュは、OSによって実行される別のルーチンです。「クラッシュ」が発生する理由は、プログラムまたはライブラリがロードに失敗したか、適切にロードされず、システムファイルに永続的な損害を与える可能性があるためです。そのため、安全上の予防措置として、Windowsはシャットダウン/再起動を強制し、システムファイルへのすべての書き込みを停止してから、これらのファイルを不良プログラム/ライブラリによって編集できるようにします。

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

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


1

電源が失われたためにOSがシャットダウンすることについて話している可能性があります。これはほぼ間違いなく一種のクラッシュです。

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

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

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

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.