web-dev-qa-db-ja.com

「カーネルパニック」とは何ですか?

コンピュータに「カーネルパニック」があるとはどういう意味ですか?

それはウィンドウと同等ですか BsoD

また、カーネルパニックが発生したときに、ユーザーはどのメソッド、ヒント、トリックを利用できますか?

19
Stefan

カーネルパニックはBSODと同じであり、救助不可能なIIRCです。ただし、小さな障害はOOPSであり、カーネルにエラーがあることを示しています。

  1. kexec を使用して、パニック時に新しいカーネルに切り替えることができます(高速再起動として脅かすことができます)-おそらく意味があります システムのダンプ 問題をデバッグします
  2. N秒後にカーネルを再起動するpanicパラメーターを使用できます。このような場合、フォールバックカーネルに切り替えるようにGRUBに指示できます。
  3. Magic SysRQキー を使用して、スタックトレースなどを出力します。
16

Linuxカーネルパニックは、カーネルロジックが、通常のロジックの継続的な実行を不可能または無責任にする条件が存在すると判断したときにカーネルが実行するサブルーチン呼び出しです。

カーネルは、次の場合にパニックを呼び出すことができます。

  1. カーネルコードまたはスタックのソフトウェアエラーを検出します
  2. 強制終了可能なプロセスがないメモリ不足などの実行時条件がある場合
  3. 特権モードの実行中にCPU例外が発生すると、oops状態になります

3.Xカーネルでパニックが呼び出される約950の異なる条件があります。パニックサブルーチンは、最初にカーネルスタックダンプとCPUレジスタをコンソールに出力します。次に、クラッシュkexecカーネルが構成されている場合、kexecカーネルを起動します。それ以外の場合、パニックルーチンはすべてのスピンロックを無効にし、緊急再起動を実行します。

Oopsは、特権(つまり、カーネル)モードでの実行中に発生するCPU例外に対してCPU例外ハンドラーから呼び出されるサブルーチンです。例外は、カーネルコードのエラーの結果として、ハードウェア障害の結果として、または特定の例外を引き起こす外部条件の結果として発生する可能性があります。例外のハンドラーは、CPUレジスターとモジュールリストを含むカーネルログを出力します。パニック呼び出しとは異なり、カーネルロジック自体がCPU例外ハンドラーのコンテキスト外でoopsを呼び出すことはありません。

カーネルがkexec用に構成されている場合、oopsによりkexecカーネルが起動されます。それ以外の場合、割り込みハンドラーの実行中に例外が発生すると、oopsによってカーネルパニック呼び出しが発生します。それ以外の場合、カーネルが「panic on oops」で構成されていると、oopsはパニック呼び出しになります。それ以外の場合、カーネルは例外ハンドラーを終了し、実行を再開します。カーネルが例外ハンドラーを終了して実行を再開すると、カーネルの整合性が疑われます。

CPU例外ハンドラーはアーキテクチャー固有です。これらは通常、Arch/*/kernel/traps.cに実装され、割り込みテーブルを設定するアーキテクチャ固有のカーネルエントリコードに設定されます。たとえば、Arch/powerpc/kernel/traps.cおよびArch/powerpc/kernel/head_fsl_booke.Sを参照してください。

カーネルパニックとoopsの両方の条件は、クラッシュデバッグ情報をRAMに保存するために使用できる、またはoopsが割り込みコンテキストで発生しない限りメモリをフラッシュするために使用できるkmsg_dumpルーチンを呼び出すように構成できます。この場合、「kmsg_dump」ルーチンMTDではなく、RAMへの保存にのみ使用できます。 RAMに保存するときは、a)使用されるRAM領域がkexecブートまたは緊急再起動ブート中に上書きされないことを確認し、b)kexecカーネルからメモリ領域を収集することを確認する必要があります。またはブートローダーロジックから。

これは予期しないプログラムフローの動作です(この場合、カーネルはプログラムです)。パニックの場合、プログラムは動作を停止します。 IS Windows BsoDと同じです。KPはカーネルまたはモジュールに問題があることを意味します。安定したカーネルの場合はドライバーを確認してください。特別なものがなく、すべてのドライバーが共通している場合は、ハードウェアの問題である可能性があります。

5
Dmytro Leonenko