差分

移動先: 案内検索

カーネルの構造と機能

3,084 バイト追加, 2007年10月18日 (木) 07:10
/* カーネルの構造 */
| 各種ハードウェア |
+---------------------------------------------------------------+
 
 
 
=== プロセス管理 ===
 
プロセス管理は、プロセスの生成と消滅についての処理と、そのプロセスのスケジュールを管理するスケジュラーの部分です。利用しているCPU数と比べプロセス数の方がはるかに多いわけですから、プロセスに上手に計算資源を割り振ってあげなければなりません。
 
ここではプロセスという言葉をつかっていますが、タスクやスレッドという言葉もあります。ある処理の計算資源と処理の流れをすべて含めて呼ぶ時はタスクです。計算資源は共有していてる複数あるいは単数の処理の流れのことをスレッドと呼びます。ですから1つのタスクで複数のスレッドを持つことができます。1つのタスクに対し、1つのスレッドだけの場合、これをUNIXの伝統的な呼び方であるプロセスと呼びます。1タスク・1スレッドが伝統的な意味でのUNIXのプロセスと同等の意味を持ちます。
 
:補足| UNIXは最初からスレッドを持っていたわけではありません。そのため80年代に入ってから色々な組織がスレッドの実装を試みました。Brown Univ.のブラウンスレッド、サンマイクロシステムズのLWP (Lightweiht Process)、DECのCMA スレッド、CMUのCスレッドパッケージがあります。各々互換性はありません。紆余曲折あり、現在ではPOSIX仕様のスレッドであるpthreads(7)が主流になっています。
 
 
 
プロセスのスケジュリングでは、Linuxの場合、 システムコールsched_setscheduler(2)を使い、プロセスのスケジュリングの方法を指定することができます。
 
* SCHED_FIFO: First-In-First-Out
* SCHED_RR: ラウンドロビン
* SCHED_OTHER: デフォルトのLinuxのタイムシェア
* SCHED_BATCH: バッチでの処理を行う(2.6.12以降)
 
 
FIFOは、そのプロセスがCPU資源を占有する方式です。CPU資源を占有といっても、一般ユーザで動作するよりもさらに、優先度よりも高い優先度で動くプロセスあると、そちらの方を優先します。ラウンドロビンは順繰りにプロセスが処理されます。デフォルトでは、プロセスの動作時間を見て、優先順位を計算し、その優先順位が高い方から処理するようになっています。このスケジュリングの処理アルゴリズムは Linux 2.4 と Linux 2.6 では入れ換えれておりLinux 2.6では処理効率がよくなっています。2.6.12以降ではあたらしくSCHED_BATCHのスケジュールが加わるなど、オペレーティングシステムの心臓部ともいえるスケジュラー部分でも進化しています。
 
 
;補足: 別な見地からいけば、Linux 2.4あたりまでのスケジュラーはやはり他のオペレーティングシステムからみると見劣りするものだというのは否定できない事実です。
匿名利用者