No OS X, o que é um pânico duplo?

5

Alguém pode oferecer uma explicação relativamente simples de como um duplo pânico difere de outros tipos de pânico do kernel em um Mac?

Simples como… não sou desenvolvedor, mas quero entender essas coisas um pouco melhor.

Antecedentes

Uma descrição solta de pânicos deste tipo:

  • a frase "duplo pânico" na tela no momento do pânico

  • se houver um arquivo .panic, ele não incluirá essa frase

  • às vezes não há arquivos .popano, o que pode explicar por que posso encontrar apenas uma discussão limitada sobre duplo pânico .

Um exemplo do OS X 10.8.5

As imagens abaixo também se relacionam com um tópico na área do ZEVO - I ' Vou continuar a discussão de suporte lá no devido tempo.

Safari na frente:

Nofundo,ainstalaçãodoUbuntu12.10emumVirtualBoxVM:

Em segundo plano, o Activity Monitor:

ExecutandonoDock:Finder,ActivityMonitor,AntiRSI…

… Mail, Safari, Terminal, VirtualBox e VirtualBoxVM:

Novearquivosdetroca:

VirtualBoxVM escrevendo em um disco virtual:

(Nota:commeuiPhonemuitoantigo,masadorável,eunãoconseguitirarfotosmelhores.)

encontrado

O que faz com que uma armadilha de kernel 0x00000008 (SCO Unix) (2005?) mencione:

… the Double Panic- the kernel panics while panicing.

It can be caused by corrupt driver code, but is more likely to be bad ram (or bad CPU, motherboard- anything that causes a bad instruction to get to the cpu)

- mas o título lá é:

This is an ancient post with little relevance to modern systems.

Não encontrei nenhuma explicação genérica autorizada atualizada.

Nota

Em irc: //chat.freenode.net/#macdev em 2013-09-25 em resposta a uma edição anterior desta pergunta, alguém afirmou que é claramente:

  • um pânico durante um pânico.
por Graham Perrin 25.09.2013 / 18:07

2 respostas

5

Isso é simplesmente um mecanismo de segurança no código de pânico do kernel para parar de descarregar mais informações para a tela quando o código para tentar salvar o estado do sistema também falhou.

Podemos inspecionar o código fonte do xnu no OS X 10.8.4 e ver o tratamento relevante:

link

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

Como você pode ver, vários CPUs também podem causar pânico e ambos os sinais precisariam ser resolvidos pelo mesmo código - então, possivelmente, é um vetor mais provável para ver a mensagem de pânico duplo.

Também model_dep.c e kmod.c tem código útil e comentários para explicar como o sistema tenta para evitar pânicos duplos apenas devido à execução em mais de uma CPU.

Na prática, todas as informações de pânico são suspeitas, e as informações de pânico duplo são duplamente suspeitas, a menos que você consiga reproduzir o problema ou correlacionar vários despejos.

    
por 25.09.2013 / 18:37
2

Nos tempos antigos (1990-ish) um duplo pânico foi explicado para mim como:
 "Um pânico que acontece depois que um pânico anterior ocorreu".

Por exemplo Algo está errado, pois não há como o sistema operacional se recuperar. Não tem escolha a não ser entrar em pânico ().

O Panic fará com que ele faça algumas coisas, como escrever uma mensagem no console, enviar um dump para o disco ou descartar um depurador. Em algum lugar nestes algo mais vai errado desencadeando um segundo pânico. Esse segundo pânico é chamado de pânico duplo.

Observação: não tenho certeza se isso ainda é relevante no OS X.

    
por 25.09.2013 / 19:18