Linux 2.6 カーネルには Thread_info 構造が必要です。

Linux 2.6 カーネルには Thread_info 構造が必要です。

Linux 2.6カーネル以前は、struct task_struct各プロセスのカーネルスタックの末尾に存在していました。概念はありませんthread_info struct。ただし、Linux 2.6カーネルでは、プロセスをtask_structカーネルスタックの最後に配置するのではなく、最後に配置しますthread_info struct。 thread_info 構造には、task_structこの構造へのポインタが含まれています。

thread_infoどの構造を導入する必要がありますか?task_structプロセスカーネルスタックの最後にあるifを使用して、stack pointerこの構造に直接アクセスできます。task_struct

2.6カーネルではtask_struct動的割り当てが使用されますslab_allocator。 2.6 カーネル以前は静的に割り当てられていましたか?

答え1

なぜこれが起こるのかわかりません。ただし、git blameファイルにアクションを実行し、変更を導入したコミットを見つけると、簡単に見つけることができます。通常、コミットメッセージはコミットされた変更を非常に詳細に説明します。

答え2

私たちに必要な理由はスレッド情報メモリを割り当てるからです。作業構造使用プレートディスペンサー。これで、これが何に関連しているのか尋ねることができます。

これを理解するには、Slab Allocatorのしくみを理解する必要があります。

Slab Allocatorがないと、カーネル開発者は特定のプロセスのカーネルスタックにtask_structのメモリを割り当てて、簡単にアクセスできます。 Slab Allocatorの出現により、メモリはSlab Allocatorによって決定されたtask_structに割り当てられます。したがって、Slabアロケータを使用すると、特定のプロセスのカーネルスタック以外の場所にtask_structを保存できます。カーネル開発者はthread_infoを導入し、task_structがある場所へのポインタを入れました。したがって、私たちはスレッド情報代わりに、プロセスのカーネルスタックから作業構造。これが私たちがthread_infoを受け入れなければならない理由です。

Robert Loveの本 Linux Kernel DevelopmentでSlab Allocatorについて読むことができます。

関連情報