struct task_struct
Linuxデバイスドライバの読み取り中に、プロセス記述子(タイプ)に特定のタスクに関するすべての情報が含まれていることがわかります。プロセス記述子はスラブアロケータによって動的に割り当てられる。
私が疑問に思うのは、thread_info
スタックの一番下に保存されている(x86仮定)という新しい構造を導入する必要があることです。なぜこのようなことをするのですか?
struct task_struct
現在実行中のジョブアドレス()のアドレスをカーネルスタックに入れることができないのはなぜですか?
ベストアンサー1
私たちに必要な理由はスレッド情報メモリを割り当てるからです。作業構造スラブアロケータを使用します。これで、これが何に関連しているのか尋ねることができます。
これを理解するには、Slab Allocatorのしくみを理解する必要があります。
Slab Allocatorがない場合、カーネル開発者は次のことができます。作業構造特定のプロセスのカーネルスタックに簡単にアクセスできるようにします。 Slab Allocatorの出現により、メモリは次に割り当てられます。作業構造スラブアロケータによって決定されます。したがって、Slab Allocatorを使用すると、作業構造特定のプロセスのカーネルスタック以外の場所に保存されます。今カーネル開発者はスレッド情報その位置へのポインタを置きます。作業構造生きる。だから私たちは耐えなければならないスレッド情報。
Robert Loveの本 Linux Kernel DevelopmentでSlab Allocatorについて読むことができます。