5

Может кто-нибудь предложить относительно простое объяснение того, как двойная паника отличается от других типов паники ядра на Mac?

Просто, как в ... Я не разработчик, но я хотел бы понять эти вещи немного лучше.

Фон

Свободное описание паники этого типа:

  • фраза «двойная паника» на экране во время паники

  • если есть файл .panic, он не будет включать эту фразу

  • иногда нет файла .panic, который может объяснить, почему я могу найти только ограниченное обсуждение двойной паники.

Пример OS X 10.8.5

Скриншоты ниже также будут относиться к теме в области ZEVO - я продолжу обсуждение поддержки там же в свое время.

Сафари впереди:

Скриншот двойной паники с Safari впереди

В фоновом режиме установка Ubuntu 12.10 в VirtualBoxVM:

В фоновом режиме установка Ubuntu 12.10 в VirtualBoxVM

В фоновом режиме монитор активности:

В фоновом режиме, монитор активности

Запуск в доке: Finder, Activity Monitor, AntiRSI…

Finder, Activity Monitor, AntiRSI…

… Mail, Safari, Terminal, VirtualBox и VirtualBoxVM:

Девять файлов подкачки:

Девять файлов подкачки

Запись VirtualBoxVM на виртуальный диск:

VirtualBoxVM записывает на свой виртуальный диск

(Примечание: с моим очень старым, но красивым iPhone я не смог получить более качественные фотографии.)


Найденный

Что вызывает ловушку ядра 0x00000008 (SCO Unix) (2005?) отмечает:

... Двойная паника - ядро паникует при панике.

Это может быть вызвано поврежденным кодом драйвера, но, скорее всего, это плохой оперативной памяти (или плохой ЦП, материнская плата - все, что приводит к плохой инструкции, чтобы добраться до процессора)

- но заголовок есть:

Это древний пост, мало связанный с современными системами.

Я не мог найти никакого современного авторитетного общего объяснения.

Заметка

В irc://chat.freenode.net/#macdev 2013-09-25 в ответ на более раннюю версию этого вопроса кто-то заявил, что это ясно:

  • паника во время паники.

2 ответа2

5

Это довольно простой механизм безопасности в коде паники ядра, позволяющий прекратить вывод дополнительной информации на экран, когда код, пытающийся сохранить состояние системы, также потерпел крах.

Мы можем проверить исходный код для xnu в OS X 10.8.4 и увидеть соответствующую обработку:

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 */
        }
    }

Как вы можете видеть, несколько процессоров могут также вызывать панику, и оба этих сигнала должны быть разрешены одним и тем же кодом - так что, возможно, это более вероятный вектор, чтобы увидеть сообщение о двойной панике.

Кроме того, model_dep.c и kmod.c содержат полезный код и комментарии, объясняющие, как система пытается избежать двойной паники только из-за того, что работает на более чем одном процессоре.

На практике вся информация о панике является подозрительной, а информация о двойной панике является подозрительной вдвойне, если только вы не можете воспроизвести проблему или сопоставить несколько дампов.

2

В древние времена (1990-е годы) двойная паника объяснялась мне так:
«Паника, возникающая после предыдущей паники».

Например, что-то идет не так, как не удается восстановить ОС. У него нет выбора, кроме как паниковать ().

Паника заставит его сделать несколько вещей, таких как запись сообщения на консоль, опциональный сброс на диск или отладчик. Где-то в этом что-то еще идет не так, что вызывает вторую панику Эта вторая паника называется двойной паникой.

Примечание: я не уверен, что это все еще актуально в OS X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .