ダブルパニックがMacの他のタイプのカーネルパニックとどのように異なるかについて、誰かが比較的簡単な説明を提供できますか?
のように単純です…私は開発者ではありませんが、これらのことをもう少しよく理解したいと思います。
このタイプのパニックの大まかな説明:
パニック時に画面に表示される「ダブルパニック」というフレーズ
.panicファイルがある場合、そのフレーズは含まれません
.panicファイルがない場合があります。これは、二重パニックについての限られた議論しか見つけられない理由を説明している可能性があります。
以下のスクリーンショットも関連しています ZEVOエリアのトピック –サポートについての議論は後日続けます。
前のサファリ:
バックグラウンドで、VirtualBoxVMへのUbuntu12.10のインストール:
バックグラウンドで、アクティビティモニター:
Dockでの実行:Finder、アクティビティモニター、AntiRSI…
…メール、Safari、ターミナル、VirtualBox、VirtualBoxVM:
9つのスワップファイル:
仮想ディスクへのVirtualBoxVMの書き込み:
(補足:私の非常に古いが素敵なiPhoneでは、これ以上の写真を撮ることはできませんでした。)
カーネルトラップ0x00000008(SCO Unix)の原因 (2005?)は次のように述べています:
…ダブルパニック-パニック中にカーネルがパニックになります。
破損したドライバコードが原因である可能性がありますが、RAMが不良である可能性が高くなります(またはCPU、マザーボード、CPUに不正な命令が送られる原因となるもの)
–ただし、見出しは次のとおりです。
これは、現代のシステムとはほとんど関係のない古代の投稿です。
最新の信頼できる一般的な説明は見つかりませんでした。
2013-09-25のirc://chat.freenode.net/#macdevで、この質問の以前の版に応えて、誰かがそれが明らかに次のように述べました:
これは、システム状態を保存しようとするコードもクラッシュしたときに、画面への詳細情報のダンプを停止するカーネルパニックコードの安全メカニズムにすぎません。
OS X 10.8.4でxnuのソースコードを調べて、関連する処理を確認できます。
http://www.opensource.Apple.com/source/xnu/xnu-2050.24.15/osfmk/kern/debug.c
restart:
PANIC_LOCK();
if (panicstr) {
if (cpu_number() != paniccpu) {
PANIC_UNLOCK();
/*
* Wait until message has been printed to identify correct
* cpu that made the first panic.
*/
while (panicwait)
continue;
goto restart;
} else {
nestedpanic +=1;
PANIC_UNLOCK();
Debugger("double panic");
printf("double panic: We are hanging here...\n");
panic_stop();
/* NOTREACHED */
}
}
ご覧のとおり、複数のCPUもパニックを引き起こす可能性があり、これらの信号は両方とも同じコードで解決する必要があります。そのため、二重のパニックメッセージが表示される可能性が高くなります。
また、 model_dep.c および kmod.c には、システムが複数のCPUで実行されているという理由だけで二重パニックを回避しようとする方法を説明する役立つコードとコメントがあります。
実際には、すべてのパニック情報は疑わしいものであり、問題を再現したり、いくつかのダンプを相互に関連付けたりできない限り、二重パニック情報は二重に疑わしいものです。
古代(1990年)には、ダブルパニックは次のように説明されていました。
「前のパニックが発生した後に発生するパニック」。
例えば。 OSが回復できないために問題が発生しました。 panic()するしかない。
パニックにより、コンソールへのメッセージの書き込み、オプションでディスクへのダンプ、デバッガーへのドロップなど、いくつかの処理が実行されます。これらのどこかで何か他のことがうまくいかず、2度目のパニックを引き起こします。この2番目のパニックはダブルパニックと呼ばれます。
注:これがOSXにまだ関連しているかどうかはわかりません。