1.2 プロセスとは?

 プログラムが動いている状態のことをプロセスと呼びます(タスクと呼んでいるOSもあります)。psコマンドによって表示できるものがプロセスです。プログラムが1つであっても、そのプログラムを実行しているプロセスが複数存在することもあります。

 おのおののプロセスは、そのプロセス固有のコンテキストを持ちます。コンテキストとは、そのプロセスが動作するためのプロセス空間、そのプロセスが動作するときのレジスタ値などです。これらの個々のプロセスに関する情報は、task_struct構造体(task_t型)で管理されています(図1-1)。Linuxカーネルがプロセスを操作するときは、この構造体を操作することになります。

 また、Linuxカーネルではスレッドも一種のプロセスとして管理しています。スレッドどうしが同じプロセス空間を共有していることを除けば、通常のプロセスと同じです。各スレッドにもtask_struct構造体が割り当てられています。プロセススケジューリングの点からは、どちらもまったく同じものとして扱われます。

 さらに、Linuxカーネルのコードのみを実行するカーネルスレッドも、プロセススケジューリングの視点からは、プロセスと同じものです。固有のプロセス空間を持たないことを除けば、task_struct構造体が割り当てられ、プロセスと同様に管理されます。