カーネルパニック
カーネルパニック ( KPと略されることもあります )は、内部の致命的なエラーを検出したときにオペレーティングシステムのカーネルがとる安全対策であり、安全に回復できないか、メジャーのリスクがはるかに高くないとシステムを実行し続けることができませんデータロス。この用語は、主にUnixおよびUnixライクシステムに固有です。 Microsoft Windowsオペレーティングシステムの場合、同等の用語は「Stopエラー」です。これにより、Windowsの初期バージョン(口語では「死のブルースクリーン」またはBSoDとして知られる)に青色の背景にバグチェックコードを表示するバグチェック画面が表示され、または、Xbox Oneプラットフォームと一部のWindows 10ビルドの緑の背景に。
AT&T派生およびBSD Unixソースコードでpanic()として知られるパニックを処理するカーネルルーチンは、通常、コンソールにエラーメッセージを出力し、事後デバッグ用にカーネルメモリのイメージをディスクにダンプし、システムが手動で再起動されるのを待つか、自動再起動を開始します。提供される情報は非常に技術的な性質のものであり、システム管理者またはソフトウェア開発者が問題を診断するのを支援することを目的としています。カーネルパニックは、カーネル空間外で発生したエラーによっても発生する可能性があります。たとえば、多くのUnixオペレーティングシステムは、ユーザー空間で実行されるinitプロセスが終了するとパニックになります。
歴史
Unixカーネルは、障害検出メカニズムとしてアサーションを使用して、内部の一貫性と実行時の正確性を維持します。基本的な前提は、ハードウェアとソフトウェアが正しく動作し、アサーションの失敗によりパニック 、つまりすべてのシステムアクティビティが自発的に停止することです。カーネルパニックは、Unixの初期バージョンで導入され、Unixとその前身であるMulticsの設計哲学の大きな違いを示しました。 Multics開発者のTom van Vleckは、この変更についてUnix開発者のDennis Ritchieと話し合ったことを思い出します。
私は、Multicsで書いていたコードの半分がエラー回復コードだったとデニスに言いました。 「すべてのものを省きました。エラーがある場合は、パニックと呼ばれるこのルーチンがあり、呼び出されるとマシンがクラッシュし、ホールを叫んでください、「ちょっと、リブートしてください」」
元のpanic()関数は、基本的にFifth Edition UNIXからVAXベースのUNIX 32Vに変更されず、他の情報のないエラーメッセージのみを出力し、システムを無限のアイドルループに落としました。
V6 UNIXのpanic()関数のソースコード:
Unixコードベースが強化されたため、panic()関数も強化され、さまざまな形式のデバッグ情報がコンソールにダンプされました。
原因
パニックは、オペレーティングシステムのハードウェア障害またはソフトウェアバグの結果として発生する場合があります。多くの場合、オペレーティングシステムはエラーが発生した後も操作を継続できます。ただし、システムは不安定な状態にあり、セキュリティ侵害やデータ破損のリスクを冒すのではなく、オペレーティングシステムが停止してさらなる損傷を防ぎ、エラーの診断を容易にし、通常は再起動します。
ソースコードからカーネルバイナリイメージを再コンパイルした後、カーネルが正しく構成、コンパイル、またはインストールされていない場合、結果のカーネルの起動中にカーネルパニックが発生することがよくあります。アドオンハードウェアまたは誤動作するRAMも、OSとの互換性がないか、デバイスドライバーが見つからないため、起動時に致命的なカーネルエラーの原因になる可能性があります。カーネルは、ルートファイルシステムを見つけることができない場合にもpanic()に入る可能性があります。カーネルユーザー空間の初期化の最終段階では、通常、initの生成が失敗するとパニックがトリガーされます。システムが使用できなくなるため、initプロセスが終了した場合にもパニックがトリガーされる場合があります。
以下は、kernel_init()でのLinuxカーネルの最終初期化の実装です。
オペレーティングシステムの仕様
Linux
カーネルパニックは、他のUnixライクシステムと同様にLinuxでも発生しますが、カーネルOOPSと呼ばれる別の種類のエラー状態を生成することもあります。この場合、カーネルは通常、問題のあるプロセスを強制終了した後も実行を続けます。 OOPによって一部のサブシステムまたはリソースが使用できなくなる可能性があるため、後でカーネルパニックが完全に発生する可能性があります。
Linuxカーネルでは、カーネルパニックにより、キーボードLEDが重大な状態を視覚的に示して点滅します。
マックOS
Mac OS X 10.2から10.7でカーネルパニックが発生すると、コンピューターはシステムを再起動する必要があることをユーザーに知らせる多言語メッセージを表示します。 10.2より前は、より伝統的なUnixスタイルのパニックメッセージが表示されていました。 10.8以降では、コンピューターは自動的に再起動し、再起動後にメッセージが表示されます。メッセージの形式はバージョンごとに異なります。
- 10.0〜10.1:システムは、エラーに関する詳細を示すテキストを画面に表示し、応答しなくなります。
- 10.2:黒い透明なカーテンをロールダウンし、白い背景にメッセージを表示して、コンピューターを再起動する必要があることをユーザーに通知します。メッセージは、英語、フランス語、ドイツ語、および日本語で表示されます。
- 10.3–10.5:カーネルパニックはバージョン10.2とほぼ同じですが、エラー画面の背景は黒です。
- 10.6–10.7:テキストは改訂され、スペイン語の翻訳が含まれています。
- 10.8以降:コンピューターはすぐに再起動する前に応答しなくなります。コンピューターが起動すると、カーネルパニックが原因でコンピューターが再起動することを示すメッセージが数秒間表示され、その後コンピューターが再起動します。中国語の翻訳も追加されました。
最初のカーネルパニックから3分以内に5つ以上のカーネルパニックが発生すると、Macは30秒間禁止標識を表示してからシャットダウンします(これは「カーネルパニックの繰り返し」として知られています)。
10.2より上のすべてのバージョンでは、テキストはスタンバイシンボルにスーパーインポーズされ、フルスクリーンではありません。デバッグ情報はNVRAMに保存され、再起動時にログファイルに書き込まれます。 10.7には、カーネルパニック後に自動的に再起動する機能があります。場合によっては、10.2以降では、スタンバイシンボルに加えてエラーの詳細を示す白いテキストが表示される場合があります。
- Mac OS X 10.0–10.1カーネルパニック
- Mac OS X 10.2カーネルパニック
- Mac OS X 10.3–10.5カーネルパニック
- Mac OS X 10.6および10.7カーネルパニック
- OS X 10.8以降のバージョンでカーネルパニックが原因でコンピューターが再起動した後に表示されるメッセージ