差分

移動先: 案内検索

プロセス管理

947 バイト追加, 2011年11月12日 (土) 10:00
/* スケジュリング */
* FIFO : 最初に入ったプロセスが終了するまでそのプロセスが専有する方式。最初に入ったものが最初に出るのでFirst-In-First-Out / FIFOと呼ばれる。
 
* RR : ラウンドロビン( Round Robin: 一定の間隔で順繰りに回ってくる)でプロセスが割り当てられる方式。
 
* 独自優先順位: 実行に使用した時間の違いなどにより優先順位をつけるなどし、その優先順位に従って割り当てる方式。(Linuxデフォルト)
 
* バッチ: (たとえば大量の処理をしても)プライオリティの変化をつけない。尚、当然ながらタイムシェアリングシステムにおいてのバッチという意味である。
Linuxの基本はUNIXの流れであるラウンドロビンと優先順位をミックスしたものです。優先順位によってタスク待ちの優先順位の高いキューにセットされます。またそれだけでもなくタイムスライスの値も変化させています。Linux 2.6.22の場合、タイムスライスは平均100msですが内部では最小5msから最大800msまで内部で動的に変化させています。
 Linux 2.6系におけるスケジュラーは以前2.4系で使われていたスケジュラーからみると画期的に性能がいいO(1)スケジュラ(Order one scheduler)に変更されました。さらにLinux 2.6.23からO(1)スケジュラからCFS(Completely Fair Scheduler)に変更されました。 ==== CFS ====Linux 2.6.23からCFS(Completely Fair Scheduler)は、<ref>Linux カーネル 2.6 Completely Fair Scheduler の内側http://www.ibm.com/developerworks/jp/linux/library/l-completely-fair-scheduler/</ref>
<ref>
Completely Fair Scheduler によるマルチプロセッシング
http://www.ibm.com/developerworks/jp/linux/library/l-cfs/index.html
</ref>
に変更されました。O(1)スケジュラがヒューリスティック(発見的)にスケジュリングするのですが、CFS スケジュラがヒューリスティック(発見的)にスケジュリングしていたのに対し、CFS のスケジュリングは(数学的な意味で)数値を計算してスケジュリングを決めます。
ヒューリスティックな方法では、ある種の特定の条件に嵌まってしまいスケジュリングが公平に処理できなくなったり、あるいは偶然に有利な条件になったり不利な条件になったりとする可能性があります。
それから比べるとCFSは公平にスケジュリングされます。それに比べCFSは公平にスケジュリングされます。  それまでの Linux のスケジュラーは、タスクを管理するキューをもち、その中で処理をしていました。CFSでは平衡2分探索木の一種である赤黒木というデータ構造を使いタスクを管理します。タスクは仮想実行時間という値を持ち、タスクが実行されるとこの値は増えます。タスク管理のツリーに戻される時、この仮想実行時間の値によってツリー中の適切な位置に置かれます。このツリーの中で最も値の小さいものが次に実行されるべきタスクとなります。こうすることによってCFSは計算量はO(log n)で、適切なタスクを選ぶという操作が可能になっています。  
CFS スケジュラに関しての評価
<ref>
</ref>
を見ていると安定したスケジュリングを実現しており良い結果を残しているようです。
 
今後もある意味オペレーティングシステムの心臓部ともいえるスケジュラーが色々な要件を満たすため、
あるいはさらなる効率化のために変更される可能性はあるでしょう。あるいはさらなる効率化のために変更される可能性は十分にあります。あちらこちらの腕利きのカーネルハッカーがどんどん新しい提案をしてくるダイナミックさを持つLinuxらしいエピソードです。これからも、あちらこちらの腕利きのカーネルハッカーがどんどん新しい提案をしてくることでしょう。
=== プライオリティ ===
匿名利用者