このページの本文へ

前へ 1 2 3 4 次へ

基礎から覚える 最新OSのアーキテクチャー 第11回

マルチコアCPUの消費電力はスケジューリングで変わる?

2012年02月16日 14時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回では簡単に、Windowsの「スケジューリングアルゴリズム」について解説した。今回は一歩踏み込んで、具体的なWindowsでのスレッド実行について見ていくことにしよう。

Windowsのタイムスライスは
「Quantum」単位で割り当てる

 Windowsではスレッドに対して、一定の実行時間を割り当てる。これを「タイムスライス」と呼ぶ。基本的にすべてのスレッドは、このタイムスライスの間だけ実行されて、時間が終わると次のスレッドに切り替わる。ただし、Windowsは“プリエンプティブ”なスケジューリングを採用しているので、優先順位の高いスレッドがキューに入ると、そのスレッドが、ほかのスレッドから制御を横取りして実行を開始する。

 そのタイミングは、一定時間ごとにハードウェアが発生させるタイマー割り込みによる。一般的なパソコンでは、15.6ミリ秒ごとにCPUに割り込みがかかり、そのタイミングでスケジューラー(ディスパッチャー)が動作して、より優先順位の高いスレッドがあれば、そのスレッドを実行する。

 どのスレッドも、前述のタイムスライスの期間分だけ、実行時間を割り当てられる。時間を横取りされた場合でも、より優先順位の高いスレッドがなくなったとき(つまり自身が最も高い優先順位になったとき)には、制御が戻ってタイムスライスの残りを実行する。スレッドがタイムスライスを使いはたしたら、同じ優先順位の実行待ち行列の最後に置かれて次の順番を待つ。

 さて、このタイムスライス割り当てだが、Windowsでは「Quantum」という単位で割り当てられる。基本的にタイムスライスの割り当て量は、Quantumの整数倍になる。前述したタイマー割り込みの1周期(15.6ミリ秒)が、3Quantumに相当すると定義されている。そのため、実際のタイムスライスの割り当ては、3の倍数となるわけだ。

 基本的に、Windows 7などクライアント系のWindowsでは、タイムスライスは6quantumであり、サーバー系では36Quantumとなっている。クライアント系での割り当ては「Short」と呼ばれ、サーバー系の割り当ては「Long」という。これはレジストリで制御されるパラメーターであり、クライアント系でもタイムスライス割り当てをLongに設定することが可能だ。

 なおクライアント系Windowsでは、ユーザーが操作しているフォアグラウンドのプロセス(ウインドウが選択状態になっているプロセス)に属するスレッドに対して、大きなタイムスライスを割り当てる「Quantum Boosting」という機能がある。この機能では、フォアグラウンドのスレッドに3倍、つまり18Quantumのタイムスライスを割り当てる。

 このような仕組みが作られた背景には、フォアグラウンドのプロセスはGUI操作とアプリケーション内部の処理を行なう必要があり、ユーザーのスムーズな操作を可能にするためには、少し大きめの時間を与える必要があるからだ。6Quantumは、タイマーの時間でいえば2周期、約31.2ミリ秒となる。これに対して3倍となる18Quantumは、93.6ミリ秒もある。

 スレッド実行のタイミングは同時に実行されているスレッド数や、それらの優先順位によって変わるものだ。GUI操作ではマウスのレポートレートなども関係する。しかし確率的に言えば、Quantumが長いほうがマウスのレポートなどを受け取ったあと、十分な処理時間が割り当てられる可能性が高い。多少バックグラウンドのスレッドが多かったとしても、この仕組みであればフォアグラウンドのアプリケーションに、ある程度の処理時間が割り当てられる可能性が大きいわけだ。

前へ 1 2 3 4 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン