カーネルスレッドがプロセスと見なされる理由

カーネルスレッドがプロセスと見なされる理由

以下の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]

ベストアンサー1

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

特に明記しない限り、これらのオプションはすべて、お気に入りのカーネル設定ツールの「カーネルハッキング」メニューにあります。すべてのアーキテクチャがこれらのオプションの一部をサポートしているわけではありません。

設定_デバッグ_カーネル
このオプションを使用すると、他のデバッグオプションを使用できますが、それ自体は機能を有効にしません。

CONFIG_DEBUG_SLAB
この重要なオプションは、カーネルメモリ割り当て機能でさまざまな種類のチェックを有効にします。これらのチェックを有効にすると、多くのメモリオーバーフローと初期化損失エラーが検出される可能性があります。割り当てられたメモリの各バイトは、呼び出し元に渡される前に0xa5に設定され、解放されると0x6bに設定されます。ドライバの出力(またはしばしば申し訳ありませんが、リスト)で、これらの「毒性」パターンが繰り返し表示されている場合は、見つけるべきエラーの種類を正確に知ることができます。デバッグが有効になると、カーネルは割り当てられた各メモリオブジェクトの前後に特別な保護値を配置します。この値が変更されると、カーネルは誰かがメモリ割り当てを超えたことを知っていて、大声で文句を言います。より曖昧なエラーの様々な検査も可能である。

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

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

CONFIG_DEBUG_SPINLOCK_SLEEP
このオプションを使用すると、スピンロックが維持されている間にスリープモードの試行を確認できます。実際、スリープ状態になる可能性のある関数を呼び出すと、問題の呼び出しがスリープ状態でなくても文句を言います。

設定_初期化_デバッグ
__init(または__initdata)とマークされたエントリは、システム初期化またはモジュールロード時間の後に削除されます。このオプションを使用すると、初期化が完了した後に初期化時間メモリにアクセスしようとするコードを確認できます。

デバッグ情報の設定
このオプションを使用すると、カーネルは完全なデバッグ情報で構築されます。 gdbを使用してカーネルをデバッグするには、この情報が必要です。 gdbを使用する予定の場合は、CONFIG_FRAME_POINTERを有効にすることをお勧めします。

CONFIG_MAGIC_SYSRQ
「魔法SysRq」キーを有効にします。この章の後半のセクション4.5.2でこのキーを見てみましょう。

CONFIG_DEBUG_STACKOVERFLOW CONFIG_DEBUG_STACK_USAGE
これらのオプションはカーネルスタックのオーバーフローを追跡するのに役立ちます。スタックオーバーフローの確実な兆候は、妥当な逆追跡なしで申し訳ありませんリストです。最初のオプションはカーネルに明示的なオーバーフローチェックを追加し、2番目のオプションはカーネルがスタック使用量を監視し、魔法のSysRqキーを介していくつかの統計を提供するようにします。

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

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

CONFIG_ACPI_DEBUG
「電源管理/ACPI」から。このオプションは、詳細なACPI(詳細設定および電源インターフェイス)デバッグ情報をオンにします。これは、ACPI関連の問題が疑われる場合に便利です。

設定_デバッグ_ドライバ
「デバイスドライバー」から。低レベルサポートコードの問題を追跡するのに役立つドライバコアのデバッグ情報をオンにします。ドライバコアについては第14章で議論します。

CONFIG_SCSI_CONSTANTS
このオプションはデバイスドライバ/ SCSIデバイスサポートの下にあり、詳細なSCSIエラーメッセージに関する情報が組み込まれています。 SCSIドライバを使用している場合は、このオプションが必要になる場合があります。

構成入力EVBUG
このオプション(デバイスドライバ/入力デバイスのサポートの下)は、入力イベントの詳細なログ記録を設定します。このオプションは、入力デバイス用のドライバを開発する場合に便利です。ただし、このオプションがセキュリティに与える影響に注意してください。パスワードを含め、入力した内容をすべて記録します。

構成_分析
このオプションは「分析サポート」の下にあります。プロファイリングは通常、システムのパフォーマンス調整に使用されますが、特定のカーネルの中断や関連する問題を追跡するためにも使用できます。


説明する

このオプションを有効にすると、出力を受け取ることができます。スレッドデーモン衝突。場合によっては、実行中のプロジェクト/スレッドに関する追加情報を提供します。説明ワーカースレッドはここにあります。。 RCU_Schedulerはティックメカニズムです。レプリケーション更新を読む。何ですかLinuxカーネルのReadCopyUpdate

カーネル操作を処理するときにカーネルスレッドによって使用される項目。ユーザースペースツールで終了しないでください。

おすすめ記事