web-dev-qa-db-ja.com

OS Xでは、ダブルパニックとは何ですか?

ダブルパニックがMacの他のタイプのカーネルパニックとどのように異なるかについて、誰かが比較的簡単な説明を提供できますか?

のように単純です…私は開発者ではありませんが、これらのことをもう少しよく理解したいと思います。

バックグラウンド

このタイプのパニックの大まかな説明:

  • パニック時に画面に表示される「ダブルパニック」というフレーズ

  • .panicファイルがある場合、そのフレーズは含まれません

  • .panicファイルがない場合があります。これは、二重パニックについての限られた議論しか見つけられない理由を説明している可能性があります。

OS X10.8.5の例

以下のスクリーンショットも関連しています ZEVOエリアのトピック –サポートについての議論は後日続けます。

前のサファリ:

Screenshot of a double panic with Safari in front

バックグラウンドで、VirtualBoxVMへのUbuntu12.10のインストール:

In the background, installation of Ubuntu 12.10 to a VirtualBoxVM

バックグラウンドで、アクティビティモニター:

In the background, Activity Monitor

Dockでの実行:Finder、アクティビティモニター、AntiRSI…

Finder, Activity Monitor, AntiRSI …

…メール、Safari、ターミナル、VirtualBox、VirtualBoxVM:

enter image description here

9つのスワップファイル:

Nine swap files

仮想ディスクへのVirtualBoxVMの書き込み:

VirtualBoxVM writing to its virtual disk

(補足:私の非常に古いが素敵なiPhoneでは、これ以上の写真を撮ることはできませんでした。)


見つかりました

カーネルトラップ0x00000008(SCO Unix)の原因 (2005?)は次のように述べています:

…ダブルパニック-パニック中にカーネルがパニックになります。

破損したドライバコードが原因である可能性がありますが、RAMが不良である可能性が高くなります(またはCPU、マザーボード、CPUに不正な命令が送られる原因となるもの)

–ただし、見出しは次のとおりです。

これは、現代のシステムとはほとんど関係のない古代の投稿です。

最新の信頼できる一般的な説明は見つかりませんでした。

注意

2013-09-25のirc://chat.freenode.net/#macdevで、この質問の以前の版に応えて、誰かがそれが明らかに次のように述べました:

  • パニック中のパニック。
5
Graham Perrin

これは、システム状態を保存しようとするコードもクラッシュしたときに、画面への詳細情報のダンプを停止するカーネルパニックコードの安全メカニズムにすぎません。

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で実行されているという理由だけで二重パニックを回避しようとする方法を説明する役立つコードとコメントがあります。

実際には、すべてのパニック情報は疑わしいものであり、問​​題を再現したり、いくつかのダンプを相互に関連付けたりできない限り、二重パニック情報は二重に疑わしいものです。

5
bmike

古代(1990年)には、ダブルパニックは次のように説明されていました。
「前のパニックが発生した後に発生するパニック」。

例えば。 OSが回復できないために問題が発生しました。 panic()するしかない。

パニックにより、コンソールへのメッセージの書き込み、オプションでディスクへのダンプ、デバッガーへのドロップなど、いくつかの処理が実行されます。これらのどこかで何か他のことがうまくいかず、2度目のパニックを引き起こします。この2番目のパニックはダブルパニックと呼ばれます。

注:これがOSXにまだ関連しているかどうかはわかりません。

2
Hennes