3

プログラムがその命令パスやメモリ データに違反すると、OS の「仮想マシン」のような空間でプログラムが実行され、次の命令を決定できないため、OS はいくつかのメッセージを表示してプログラムを停止します。

OS in tern もプログラムであり、他のプログラムと同様にマシン リソースを共有し、同様の方法で停止する可能性がありますが、デバッグ情報とブルー スクリーンを表示するのに十分な場合があります。プログラマーとして考えているのは、デバッグ情報を出力して画面を青色にすることができれば、コールド リブートを要求する代わりに、OS を完全に回復しようとできないのはなぜですか? 結局のところ、その OS - すべてのソフトウェアの強固な基盤 (もちろん Windows については話していません) であるはずですが、スペースシャトルが Windows を実行した場合、何が起こるでしょうか - 回復しませんか?

つまり、MS が再起動が不要な点まで回復するためにすべてを試みていないだけなのか、それとも MS のような企業がそれを行うことができなくなった他のより深刻な問題なのか?

4

2 に答える 2

3

Microsoft に固有のものではありません。Linux にはカーネル パニックメカニズムがあり、OS X にはカーネル パニックメカニズムがあります。内部の破損が検出されると、すべての非おもちゃのオペレーティング システム カーネルには何らかのパニック メカニズムがあると思います。破損は、障害のあるハードウェア、障害のあるソフトウェア、ガンマ線がメモリ ボードに正しく当たることによって発生する可能性があります。

カーネル パニックの背後にある全体的なポイントは、間違ってはならない何かが間違っているという認識です。他に無効になる可能性のあるものは何ですか? クラッシュが発生した場所によっては、ドライブ上の正常データの上に破損したデータが走り書きされる可能性があるため、ファイルシステムを同期してマウント解除するのは安全ではない場合があります。

ビデオ カードへの書き込みは、ユーザーにイベントを通知する良い方法です (とにかく、多くのシステムにはモニターが接続されています)。ビデオ カードへの書き込みは、ディスク上のデータを破損する可能性は低いです。または、ページ テーブルが破損して代わりにディスク上のファイルを参照するようになり、ほとんどのオペレーティング システムは、カーネル パニック後にブロック デバイスへの書き込みを拒否して、ユーザー データを全力で保護しようとします。

システムを稼働状態に戻すにはどうすればよいか考えてみてください。破損したカーネル データ構造に関連付けられている可能性のあるすべてのアプリケーションを破棄する必要があります。システム サービスを元に戻すには、アプリケーションを正しい順序で再起動する必要があります。再起動は、これらの両方を確実に実行するための非常に簡単な方法です。

于 2011-05-27T02:10:13.670 に答える
2

ユーザー空間プログラムが回復できないのと同じ理由で、OS を回復することはできません。特定の種類のエラーが見られる場合、プログラムが未定義の状態にあり、したがって回復できないことを意味します。問題が何らかの意味で致命的ではない場合 (つまり、プログラムがすぐに停止するわけではありません) であっても、破損している、または破損している可能性があるため、続行するのは安全ではありません。

たとえば、ユーザー空間のプログラムであれ OS カーネルであれ、バッファ オーバーランや混乱したポインタが原因でスタックが破損したとします。プログラムはそれからどのように回復することになっていますか?現在実行中の関数が終了したときにスタックが吹き飛ばされた場合、どこに戻りますか? 返送先住所がなくなっている可能性があります。それで?

マイクロソフトだけではありません。Unix での「カーネル パニック」について聞いたことがありますか?

于 2011-05-27T02:05:58.150 に答える