パソコンがクラッシュした時に、何かがおかしくなって、演奏ができなくなってしまったという印象を受けました
気になったのですが、パソコンがクラッシュする前にどうやって保存しているのでしょうか?
コンピュータは、いつクラッシュするかを知ることができるのでしょうか(したがって、すべてのプロセスに通知します
そうでない場合、Chrome
やMicrosoft Word
のようなプログラムが、コンピュータがクラッシュした後に「復元」サービスを提供することが可能なのでしょうか?
52 Pacerier 2012-01-15
コンピュータが “クラッシュ “するとき、それは、例えば、”突然の “電源障害(この場合は何もできません)が原因かもしれませんし、同様に何もできないような厄介な内部イベント(例えば、破損したページテーブル)が原因かもしれませんし、それは単に何らかの方法で “それ以上の操作 “を妨げる何らかの条件が原因かもしれません – おそらく、新しいプロセスを開始できない、ディスプレイを更新できない、システムが単にストレージを使い果たしたかもしれません
これらの後者の状況では、OSはまだ機能することができます, 制限内で, と少なくとも進行中であったディスク操作を完了することができます, きれいにファイルを閉じる, など.また、わずかに多くの機能が可能であれば、, OSはきれいに自分自身をシャットダウンするために様々なアプリケーションプロセスを伝えることができるかもしれません
しかし、システムが「ハード」にダウンしたとしても、システム全体と個々のアプリケーションは、システム全体と個々のアプリケーションの状態を、すべてが「内部的に一貫している」「重要なデータが最低限失われた」「アトミック」なポイントに復元できるように、「ジャーナル」および/または「チェックポイント」のシステムを維持している可能性があります
これはすべて単一のメカニズムではなく、システムやアプリケーションレベルでの機能のレイヤーで実現されています
具体的には、停電に関しては、事前通知がある場合とない場合があり、「事前」の警告は、ほんの数秒の場合もあれば、(UPSや故障したノートパソコンのバッテリーの場合は)数分の場合もあります。何ができるかは、警告の量によって異なります
ほとんどの場合、UPSのないデスクトップsysyemでは、最終的に電源が消えたときにディスクが書き込みの途中ではないように、ディスク操作を “休止 “にするのが最善の方法です。これにより、ディスク上に不良セクタが発生するのを防ぐことができます。RAMがもっと小さかった頃は、電源が落ちる前にRAMをディスクに書き込むのに十分な時間を確保することができましたが(電源に大きなコンデンサを使用したり、奇妙なことにディスクドライブのローターに蓄えられたエネルギーを使って発電したりして)、RAMが100M以上に大きくなると、その可能性はほとんどなくなりました
そして、昔、メモリが磁気の「コア」で作られていた時代には、電源が切れてもRAMは本質的に保存されていたことに注意してください(電源が切れたときに読み書きされている特定の単語は破損しているかもしれませんが)。これは、それらの古いシステムの電源障害からの回復を容易にした。]
しかし、UPS のようなもの(数分から数時間の追加電力を与えることができます)では、さらにいくつかのオプションがあります。一つは、「電源オフ」を要求したかのように、単にシステムをシャットダウンすることです。これにより、各アプリケーションが終了し、システム全体が永久テーブルを書き出してシャットダウンします。これには長い時間がかかることがあります(お気づきの方も多いと思いますが)。しかし、「ハイバネート」戦略を使用することも可能で、RAMを1つのブロックとしてディスクに書き込み、その後システムの電源を切るという方法もあります。ハイバネート “シナリオでは、電源を回復すると、RAMは、それが書き込まれた場所に正確に読み込まれ、こことそこにいくつかのビットがswizzledされ、その後、それが去ったところで実行が再開されます
いくつかの古い “ビッグアイアン “システムでは、緊急シャットダウンを行うために半休止状態の戦略が使用されていました。メモリは上記のように書き出されますが、電源が回復し、メモリが読み込まれたときに、標準的なシャットダウンが発生します。これは、システムの状態のいくつかのビット(特にI/Oコントローラの)は、継続的な操作を可能にするために、確実に保存/復元することができなかったために行われました
6 Daniel R Hicks 2012-01-21
Chrome や Microsoft Word は、作業中に現在の状態を定期的に保存します。アプリケーションやコンピュータがクラッシュした場合、アプリケーションが再起動すると、ディスクに保存されている状態を探して復元します。クラッシュを予測する必要はなく、何か問題が発生した場合に備えて常に状態を保存しています
82 Stephen Jennings 2012-01-15
EDIT: これはWindowsではなく、アプリケーションがクラッシュしたときにのみ動作します
Windows Vista以降、アプリケーションがクラッシュしたときに、Windowsがシャットダウンする前にデータの復元を試みることができるように、アプリケーション内の特別な関数を呼び出すことができるようにする新しいAPIがあります。これは次のように動作します
- アプリ起動
- アプリはWindows関数を呼び出します
- …
- App crashes
- Windowsはアプリ内で
RecoverData()
を実行します RecoverData()
は、現在開いているドキュメントのデータを取得しようとしますが、その間に Windows に ping して、まだ復旧に忙しいことを伝え続けていますRecoverData()
が終了/タイムアウト/ping停止した場合、Windowsはアプリを終了して再起動します
詳細はこちら。http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx
62 ZippyV 2012-01-15
クラッシュする前に現在の状態を保存するだけだよX秒ごとの自動保存とか
本当に差別化が必要だと思います
- ハードウェアがクラッシュしました。以前のチェックポイントでしか回復できません
- OSクラッシュ:アプリがデータを保存する方法はありません、OSはコアダンプのようなものを落とすことができます
- アプリケーションクラッシュ。アプリケーションクラッシュのためのOSの機能は、情報を保存することができます
16 Stephan Dollberg 2012-01-15
クラッシュの深刻度によって異なります。非常に深刻なクラッシュ(コンピュータの最低レベルで)が発生すると、コンピュータは単に停止します。保存される作業は、各アプリケーションが定期的にデータを自動保存することによってのみ行われます
重度のクラッシュではない場合、コンピュータは各プログラムにシャットダウンが必要であることを警告します。プログラムがこのメッセージに耳を傾けると、プログラムは現在のデータを保存します。しかし、すべてのプログラムがこのメッセージに注意を払うわけではありません
10 beeudoublez 2012-01-15
プログラムは定期的にディスク上のファイルに状態を保存します。コンピュータはそれを知ることができません。実際には、クラッシュダンプはディスクドライバを使用して実行されません – システムは単にすべてのメモリをページアウトします
8 kinokijuf 2012-01-15
パソコンがクラッシュした時に、何かがおかしくなって、演奏ができなくなってしまったという印象を受けました
はい、これは全くその通りです。しかし、論理的な観点から見ると、あなたのプログラムはコンピュータ上で無制限に実行されているわけではありません。プログラムはオペレーティングシステムの下で実行されているのです!
私は不思議に思っていたのですが、コンピュータはどのようにしてクラッシュする前に物事を保存することができますか?コンピュータは本当にいつクラッシュするかを知ることができるのでしょうか(したがって、すべてのプロセスに通知します: “クラッシュしようとしているので、できるだけ早く保存してください”)?
さて、BSODやカーネルパニックが発生した場合、オペレーティングシステムは、本当に安全ではないことが起きようとしていると判断します(メモリポインタの無効、OSカーネルに割り当てられたメモリの一部の上書き、存在しないハードウェアへのアクセスなど)。その場合、オペレーティングシステムは、実行を停止するためにすべてのプロセスを呼び出し、ディスクにRAMの内容を保存します(OSはまた、メモリ割り当てを管理する責任があるため)、安全にシャットダウンまたはコンピュータを再起動します
個々のアプリケーション自体がクラッシュするのは、プログラムによって投げられた処理されていない例外があった場合で、それがオペレーティングシステムに伝搬します。この場合、OS はプログラムの実行を停止し、開いているメモリやファイルのハンドルを閉じます
上記の両方のケースでは、プログラムの実行は通常は潔く終了しません。これらのケースでは、突然実行を「停止」しただけなので、個々のアプリケーションが自分のデータを回復するかどうかは個々のアプリケーションにかかっています
そうでない場合、ChromeやMicrosoft Wordのようなプログラムが、コンピュータがクラッシュした後に「復元」サービスを提供することができるのはなぜでしょうか?
私の記憶では、これらのアプリケーションは、前述の条件が発生した場合にデータの損失を防ぐために、定期的にディスクにアプリケーションの状態を保存します。例えば、Word は数分ごとに現在作業中の文書のバックアップコピーを自動保存するので、突然のハードリブートが発生しても、何もしなくてもデータを回復することができます(作業時間は数分程度)
繰り返しになりますが、開発者として、アプリケーションがこれらの状況に対応できるようにすることは、あなた自身の責任です
6 Breakthrough 2012-01-16
そう、データ復元プロセスは、コンピュータのクラッシュだけでなく、停電、プログラムのクラッシュ、保存せずに終了した場合など、多くの場合に使用されています
あなたが言ったことは本当です。コンピュータはいつクラッシュするかを「知る」ことができません、Wordの場合、データを復元できるように定期的に自動保存します。Chromeの場合は、おそらくタブごとの情報をどこかに保存していて、終了に成功したときや、新しいセッションを開始したときに削除しています
私は(明らかに)マイクロソフトやグーグルで働いているわけではないのですが、おそらくそれが(あるいはそれに近い形で)機能しているのだと思います
3 FALL3N 2012-01-15
プログラムは、「起動時にこのフラグが設定されている場合は、何かが間違っている」というようなフラグをディスクに書き込むことができます。起動時にそのフラグがセットされているかどうかをチェックします。もしセットされていれば、プログラムは何かが間違っていたことを知っています
このフラグは、プログラムが起動するとすぐに設定でき、プログラムが正常に終了するとオフになるので、常に機能します。コンピュータの電源が不意に切れるなどの予期せぬエラーでプログラムが終了した場合、正常終了しなかったのでフラグは設定されたままになります。そうすると、プログラムは最後に実行したときに正常終了しなかったことを知ることができます
2 Paul 2012-01-16
@bamboomが言っているように、コンピュータの「クラッシュ」にはいくつかの異なるタイプがあり、異なる処理をしなければなりません。実質的に停電は、例えば、ゼロエラーによる整数の除算とは大きく異なります
多くのプログラミング言語が例外(何かが完全におかしくなったときにエラーハンドラへの制御された分岐)をサポートしているため、処理されていないアプリケーションエラーが発生したときに、アプリケーションの状態(開いているドキュメントや変更などを含む)を保存することができるトップレベルのアプリケーション全体のエラーハンドラを持つ可能性があります。これは、アプリケーションが再起動されたときに、すべての状態を読み返そうとするものです。エラーの種類や実装方法にもよりますが、必ずしもうまくいくとは限りませんし、もちろん、エラーに直面して結果として得られるデータに対して何か意味のあることをするかどうかはそれぞれのアプリケーション次第です
2 user 2012-01-16
ファイルシステムのタグがあるので、ここでは低レベルな点を挙げておきたい
Windows OSはFAT/FAT16/FAT32のファイルシステムを使用していたのを覚えているだろう。停電してシステム全体がダウンしたときに問題が発生することがありました。再起動しようとすると、ファイルがなくなっていて起動できないということになります。これは、FAT32がトランザクション的に実行している操作を記録していないために起こったものです
対照的に新しいNTFSファイルシステムは、journalのインフラストラクチャのサポートを受けており、OSとハードウェアのアクセス層の低レベルで情報がコミットされるアクションを記録することで、安定した安全な状態に保たれることを意味します
2 oleksii 2012-01-16
一部のオペレーティングシステム上のいくつかのアプリケーションでは、メモリアクセス違反を示すセグメンテーションフォルトなどの信号に引っ掛けることが可能である。この場合、簡単なルーチンで可能な限り多くのデータを保存することができます。そのデータが使用可能かどうかは別の問題で、クラッシュによってデータが破損している可能性があります。シグナルを割込んだ後にアプリケーションを実行し続けることは可能ですが、メモリが破損して不安定な状態になっている可能性があり、それがさらなる問題を引き起こす可能性があるため、お勧めできません
他のアプリケーションは自動保存、または両方の組み合わせを使用します – それはこれらの信号をキャッチするためのプログラムとプラットフォームのサポートのニーズに依存します
1 Thomas O 2012-01-16
システムクラッシュは、OSによって実行される別のルーチンにすぎません。クラッシュ “が起こる理由は、プログラムやライブラリがロードに失敗したか、または正しくロードされなかったため、システムファイルに永久的な害を引き起こす能力を持っています。だから、安全対策として、Windowsは強制的にシャットダウン/再起動し、これらのファイルが不良プログラム/ライブラリによって編集することを許可される前に、システムファイルへのすべての書き込みを停止します
シャットダウン/再起動の前に、通常のシャットダウン/再起動と同じ機能を実行します
単一のアプリケーション(Word/Chrome)が “進捗状況 “を保存することに関しては、それはアプリケーションの内部機能であり、特定の間隔で進捗状況を保存します(通常はプログラムの設定で変更できます)。アプリケーションやシステムがクラッシュした場合、再起動後にそのファイルを見て、セッションを復元するかどうかを尋ねてきます
1 Mechaflash 2012-01-16
電源が落ちてOSがシャットダウンするという話をしているのではないでしょうか。これは間違いなくクラッシュの一種です
電源は、メインボードへの適切なDC電流の供給である出力を停止する前に、その入力、適切な壁のAC電流の任意の長い中断について、メインボードに(信号線を介して、私は推測しています)通知します。それは大きなコンデンサにその電気を格納するため、それはこれを行うことができます。OSは、ハードウェア割り込みの形でこの信号を受信します
この長い間隔の間、書き込みバッファリングファイルシステムがバッファリングされたすべての書き込みを永続的な物理ストレージメディアに転送したり、他のシャットダウンルーチンを実行したりするのに十分な時間があります
書き込みバッファリングファイルシステムの大きな利点の一つは、書き込みをソートすることで、ハードディスクドライブの腕の動きを少なくし、離れた場所での書き込みを少なくすることができることです
これは @oleksii が回答で述べていることと似ているが、書き込みバッファリングファイルシステムでは、完了したトランザクションは通常すぐに転送されるのではなく、単にバッファリングされるだけであるということを除いては。停電時には、完了したトランザクションはディスクに転送されるべきです
1 MarkDBlackwell 2012-01-21
アプリは、Cのシグナルをキャッチして、特定のデータを保存することができます。誤って取得してしまう可能性のあるシグナルとして、SIGFPE浮動小数点演算例外(ANSI)があります。エラーには、ゼロによる除算やオーバーフローなどがあります。もう一つのシグナルはSIGINTで、コンソールやターミナルでctrl+Cを押すことで発生し、アプリを終了させます
0 None 2012-01-16