web-dev-qa-db-ja.com

カーネルoopsとカーネルパニックの違いは何ですか?

カーネルパニックとは何か知っていますが、「カーネルoops」という用語も見ました。私はいつも同じだと思っていましたが、違うのかもしれません。そう:

カーネルoopsとは何ですか?カーネルパニックとはどう違うのですか?

54
strugee

" oops "は、システムの信頼性に影響を与えるほど深刻なLinuxカーネルの問題です。

一部の「エラー」は、データの損失やその他の損傷がないように、カーネルがすぐに実行を停止することを決定するほど悪いものです。これらは kernel panics と呼ばれます。

後者の用語は原始的なものであり、LinuxのUnixフォアベアの非常に初期のバージョンに戻っており、発生するとコンソールに「パニック」メッセージを出力します。このような条件を処理する元のAT&T Unixカーネル関数はpanic()と呼ばれます。 AT&T Unixのパブリックソースコードリリースを最初のリリースまでたどることができます。

  • OpenSolarisバージョンのpanic() は、Sunからリリースされました 2005年 。それはかなり複雑で、そのヘッダーコメントはパニック状況で何が起こるかについて多くを説明しています。

  • nix V4panic()の実装は1973年にリリースされました。基本的には、カーネルのコア状態をコンソールに出力し、プロセッサを停止します。

  • その関数は nix V3では実質的に変更されていません Amit Singhによれば、 有名な は古いバージョンのMac OS Xを分析して説明しました。その最初のリンクは、panic()の実装に対するmacOSのアプローチを説明する素敵な記事へとあなたを導きます。それは、関連する歴史的な議論から始まります。

  • " nix-jun72 "スキャンされたソースコードのプリントアウトからUnix V1を復活させるプロジェクトは、この関数の非常に初期の PDP-11アセンブリバージョン を示し、1972年6月より前に書かれたUnixはCで完全に書き直されました。この時点で、その実装は、PDP-11を再起動するだけの6命令ルーチンに要約されています。

46
Warren Young

おっとは、カーネルが遭遇する特定のエラーです。 Oopsには次の情報が含まれています:

  • 簡単な説明
  • おっとっと #
  • どのCPUで発生したか、およびCPUが実行していたコード
  • 登録内容

Oopsはカーネルコードをデバッグする方法であり、それを支援するユーティリティがあります。カーネルパニックは、システムが回復できず、再起動する必要があることを意味します。ただし、エラーが発生したため、システムは通常続行できます。 std outではなく、oopsメッセージをファイルに記録するようにklogdとsyslogdを構成できます。

15
tdk2fe