web-dev-qa-db-ja.com

カーネルスレッドがプロセスとして扱われる理由

以下のようなpsコマンドの出力(kthreadd、ksoftirqd、kworker)で、実行可能ファイルを持たないプロセスがいくつかあることがわかります。これは、カーネルスレッドであるため、カーネルを処理する理由です。プロセスとしてのスレッドまたはプロセスのように見せますか?スレッド名の後のこの番号はどういう意味ですか?たとえば、シグナルを送信することで、ユーザースペースからこれらのスレッドを強制終了できますか?

root         2     0  0 Nov30 ?        00:00:00 [kthreadd]
root         3     2  0 Nov30 ?        00:00:03 [ksoftirqd/0]
root         5     2  0 Nov30 ?        00:00:00 [kworker/0:0H]
root         7     2  0 Nov30 ?        00:00:41 [rcu_sched]
5
user3718463

引用 Linuxデバイスドライバー、第3版 。オプションを太字にしたかったので、[見積もり]ボタンは使用しませんでした

特に指定のない限り、これらのオプションはすべて、好みのカーネル構成ツールの「カーネルハッキング」メニューにあります。これらのオプションの一部は、すべてのアーキテクチャでサポートされているわけではないことに注意してください。

CONFIG_DEBUG_KERNEL
このオプションは、他のデバッグオプションを利用できるようにするだけです。オンにする必要がありますが、それ自体では機能を有効にしません。

CONFIG_DEBUG_SLAB
この重要なオプションは、カーネルメモリ割り当て関数でいくつかのタイプのチェックをオンにします。これらのチェックを有効にすると、メモリのオーバーランや初期化エラーの欠落を検出できます。割り当てられたメモリの各バイトは、呼び出し元に渡される前に0xa5に設定され、解放されると0x6bに設定されます。これらの「ポイズン」パターンのいずれかがドライバーからの出力で(または多くの場合、oopsリストで)繰り返されているのを目にしたことがあれば、どのような種類のエラーを探すべきかが正確にわかります。デバッグが有効になっている場合、カーネルは割り当てられたすべてのメモリオブジェクトの前後に特別なガード値も配置します。これらの値が変更された場合、カーネルは誰かがメモリ割り当てをオーバーランしたことを認識し、大声で文句を言います。よりあいまいなエラーのさまざまなチェックも有効になっています。

CONFIG_DEBUG_PAGEALLOC
解放されると、ページ全体がカーネルアドレス空間から削除されます。このオプションを使用すると、処理速度が大幅に低下する可能性がありますが、特定の種類のメモリ破損エラーをすばやく指摘することもできます。

CONFIG_DEBUG_SPINLOCK
このオプションを有効にすると、カーネルは初期化されていないスピンロックの操作やその他のさまざまなエラー(ロックを2回ロック解除するなど)をキャッチします。

CONFIG_DEBUG_SPINLOCK_SLEEP
このオプションを使用すると、スピンロックを保持したままスリープしようとしたかどうかを確認できます。実際、問題の呼び出しがスリープしない場合でも、スリープする可能性のある関数を呼び出すと文句を言います。

CONFIG_INIT_DEBUG
_ _ init(または_ _initdata)でマークされたアイテムは、システムの初期化またはモジュールのロード時に破棄されます。このオプションは、初期化の完了後に初期化時のメモリにアクセスしようとするコードのチェックを有効にします。

CONFIG_DEBUG_INFO
このオプションを使用すると、完全なデバッグ情報が含まれた状態でカーネルが構築されます。 gdbを使用してカーネルをデバッグする場合は、その情報が必要になります。 gdbを使用する場合は、CONFIG_FRAME_POINTERを有効にすることもできます。

CONFIG_MAGIC_SYSRQ
「マジックSysRq」キーを有効にします。このキーについては、この章の後半のセクション4.5.2で説明します。

CONFIG_DEBUG_STACKOVERFLOW CONFIG_DEBUG_STACK_USAGE
これらのオプションは、カーネルスタックオーバーフローの追跡に役立ちます。スタックオーバーフローの確かな兆候は、合理的なバックトレースのないoopsリストです。最初のオプションは、カーネルに明示的なオーバーフローチェックを追加します。 2つ目は、カーネルがスタックの使用状況を監視し、マジックSysRqキーを介していくつかの統計を利用できるようにします。

CONFIG_KALLSYMS
このオプション(「一般設定/標準機能」の下)により、カーネルシンボル情報がカーネルに組み込まれます。デフォルトで有効になっています。シンボル情報は、デバッグコンテキストで使用されます。これがないと、oopsリストは16進数でのみカーネルトレースバックを提供できますが、これはあまり役に立ちません。

CONFIG_IKCONFIG CONFIG_IKCONFIG_PROC
これらのオプション([一般設定]メニューにあります)により、完全なカーネル構成状態がカーネルに組み込まれ、/ procを介して利用できるようになります。ほとんどのカーネル開発者は、使用した構成を知っており、これらのオプションは必要ありません(カーネルを大きくします)。ただし、他の誰かが作成したカーネルの問題をデバッグしようとしている場合は、これらは便利です。

CONFIG_ACPI_DEBUG
[電源管理/ ACPI]の下。このオプションは、詳細なACPI(Advanced Configuration and Power Interface)デバッグ情報をオンにします。これは、ACPIに関連する問題が疑われる場合に役立ちます。

CONFIG_DEBUG_DRIVER
[デバイスドライバー]の下。ドライバーコアのデバッグ情報をオンにします。これは、低レベルのサポートコードの問題を追跡するのに役立ちます。第14章でドライバーコアについて見ていきます。

CONFIG_SCSI_CONSTANTS
「デバイスドライバ/ SCSIデバイスのサポート」の下にあるこのオプションは、詳細なSCSIエラーメッセージの情報を組み込みます。 SCSIドライバで作業している場合は、おそらくこのオプションが必要です。

CONFIG_INPUT_EVBUG
このオプション([デバイスドライバー/入力デバイスのサポート]の下)は、入力イベントの詳細なログをオンにします。入力デバイスのドライバーで作業している場合は、このオプションが役立つ場合があります。ただし、このオプションのセキュリティへの影響に注意してください。パスワードを含め、入力したすべてのものがログに記録されます。

CONFIG_PROFILING
このオプションは「プロファイリングサポート」の下にあります。プロファイリングは通常、システムパフォーマンスの調整に使用されますが、カーネルのハングや関連する問題を追跡するのにも役立ちます。


説明

これらのオプションを有効にすると、 スレッドデーモン クラッシュが発生した場合に出力を受け取ることができます。いくつかのインスタンスでは、これらは実行中のアイテム/スレッドに関する詳細情報を提供します。 ---の説明 ワーカースレッドはここにあります 。 RCU_Schedulerは、 ReadCopyUpdate のティックメカニズムです。 LinuxカーネルのReadCopyUpdate とは何ですか?

カーネルスレッドは、カーネルが作業を行っている間に使用されるアイテムを処理します。は、ユーザースペースツールによって強制終了されるべきではありません。

2
eyoung100