マルチタスクとプロセスとスレッド
対象プロダクト:Windows全般
カテゴリー:アーキテクチャ
Windows 3.1 のプロセス
Windows 3.1 では1プロセス1タスク(つまりプロセスとタスクは同義と言えます)のため、複数のアプリケーションが実行されている場合、あるプロセスのタスクが終了するまで、他のプロセスは待たなければなりませんでした。
例えばあるプロセスがファイルをコピーしている場合、コピーが完了するまで他のプロセスは一切の処理が行えませんでした。
これは大きなファイルのコピーを実施した場合、長時間砂時計ポインタの状態で待たされる事を意味します。
Windows 95 以降のプロセス
Windows 95 以降の Windows では1つのプロセスを1つ以上のスレッドの集まりとして実装しました。
そして各プロセスの実行はスケジューラにより、優先度とタイムスライスによって適切に制御されます。
Windows 95 にとってはプロセスは1つのアドレス空間に過ぎません。
Windows 9x のスケジューラ
スレッドを制御するスケジューラは優先度とタイムスライスに従ってスレッドを処理しますが、スレッドの優先度を算出するプライマリスケジューラと、タイムスライスの割り当てを算出するタイムスライススケジューラの2つがあります。
プライマリスケジューラは各スレッドの実行優先度(0~31まで)を算出し、一番高い優先度のスレッド以外をサスペンドします。
そしてタイムスライススケジューラが、この優先度と仮想マシン(VM)の状態からそれぞれのスレッドに割り当てるべきタイムスライスの割合を算出します。
そしてスレッドが実行されます。
※プライマリスケジューラは20ミリ秒に1回スレッドの優先度の再評価を実施します。
※16bit アプリケーションは Windows 95 のシステム仮想マシン内の1つのプロセス空間の中で、シングルスレッドで動作します。
なお、同じ優先度のスレッドが複数存在する場合は、それらの複数のスレッドが次のタイムスライスに平等に分け与えられ、ラウンドロビン方式で実行されます。
またスケジューラは効率良くスレッドにプロセッサ時間を割り当てる為に以下の手法を使用しています。
- 動的な優先度の引き上げ プライマリスケジューラはキーやマウスボタンのクリックなど、必要に応じてスレッドの優先度を一時的に上昇させます。
- 時限減少機能 上昇させたスレッドの値を通常の値まで徐々に戻します。
- 優先度の継承 優先度の高いスレッドが有している排他的リソースを優先度の低いスレッドが使用している場合、その優先度が一時的に入れ替えられます。 そしてその処理が終わると継承した優先度を元の値に戻します。
公開日時:2011年11月19日 23:58:37