Qual é a diferença entre um kernel oops e um pânico no kernel?

51

Eu sei o que é um pânico no kernel, mas também vi o termo "kernel oops". Eu sempre pensei que eles eram iguais, mas talvez não. Assim:

O que é um kernel oops e como ele é diferente de um pânico no kernel?

strugee
fonte

Respostas:

45

Um " oops " é um problema do kernel Linux ruim o suficiente para afetar a confiabilidade do sistema.

Alguns "ops" são ruins o suficiente para que o kernel decida parar de executar imediatamente, para que não haja perda de dados ou outros danos. Estes são chamados de pânico do kernel .

O último termo é primordial, remonta às versões mais antigas dos antepassados ​​Unix do Linux, que também imprimem uma mensagem de "pânico" no console quando elas acontecem. A função original do kernel da AT&T Unix que lida com essas condições é chamada panic(). Você pode rastreá-lo através dos lançamentos de código-fonte público da AT&T Unix até seus primeiros lançamentos:

  • A versão do OpenSolarispanic() foi lançada pela Sun em 2005 . É bastante elaborado, e seus comentários no cabeçalho explicam muito sobre o que acontece em uma situação de pânico.

  • A implementação do Unix V4panic() foi lançada em 1973. Basicamente, apenas imprime o estado do núcleo do kernel no console e para o processador.

  • Essa função é substancialmente inalterada no Unix V3, de acordo com Amit Singh, que famosa dissecou uma versão mais antiga do Mac OS X e a explicou. Esse primeiro link leva você a um artigo adorável que explica a abordagem do macOS para a implementação do panic(), que começa com uma discussão histórica relevante.

  • O projeto " unix-jun72 " para ressuscitar o Unix V1 das impressões de código-fonte digitalizadas mostra uma versão de montagem muito inicial do PDP-11 dessa função, escrita antes de junho de 1972, antes que o Unix fosse totalmente reescrito em C. Nesse ponto, sua implementação é reduzidos a uma rotina de 6 instruções que faz pouco mais do que reiniciar o PDP-11.

Warren Young
fonte
Aconteceu de ver as suas edições (presumivelmente É por isso que eu tenho mais algumas upvotes sobre a questão?) - realmente impressionante, graças para adicionar a este :)
strugee
14

Um oops é um erro específico que o kernel encontra. Um Ops contém as seguintes informações:

  • Descrição breve
  • Ops #
  • Em qual CPU ocorreu e o código que a CPU estava executando
  • Registrar conteúdo

Opa, é uma maneira de depurar o código do kernel, e existem utilitários para ajudá-lo. Um pânico no kernel significa que o sistema não pode se recuperar e deve ser reiniciado. No entanto, com um Ops, o sistema geralmente pode continuar. Você pode configurar o klogd e o syslogd para registrar mensagens Oops nos arquivos, em vez de excluir o std.

tdk2fe
fonte