OSの目的、使われ方によって
最適なスケジューリングは変わる
そういうわけで、スケジューラーはメモリーやI/Oといった、OSが管理するリソース全体と関連する。OSのリソース管理とは、「なんらかの形でプロセス、スレッドのスケジューリングをすること」とも言えるわけだ。
次に実行するプロセスを決めるアルゴリズムを、「スケジューリングアルゴリズム」という。どんなアルゴリズムを選ぶかはOSの開発方針次第なのだが、スケジューリングは広い範囲にまたがる処理であるため、簡単に変更することはできず、OSのバージョンアップなどでも、劇的に変わることは少ない。そのため最初の設計がまずい、あるいは設計が現状に合わないといった場合には、効率的なスケジューリングができずに操作していてぎくしゃくした感じになったり、CPUが持つ性能を発揮できないことがある。
OSの仕様や目的によっても、最適なアルゴリズムは違う。例えばリアルタイム性※1を提供するかどうかは、アルゴリズム選択の大きな違いとなる。リアルタイム系OSは組み込み機器向けに多く、家電や自動車、産業用機器などで使われることが多い。
※1 一定時間内に処理を開始するなど、プロセス起動や再開までの時間が、正確に管理されるOS。
もちろん、Windowsのような非リアルタイムOSでも、厳密ではないが一定時間内に処理を完了しなければならないプログラムはある。Windowsにもプロセスの優先度設定に「リアルタイム」があるが、本来の意味でのリアルタイム動作ではない。優先度を挙げてタイムスライスの割り当てを増やすことで、実質上リアルタイムのように動作できるという意味である。
現在ではプロセッサー性能に余裕があるが、かつてはビデオの再生時に、映像と音を同期させるのさえ困難だった。動画や音声のデコード処理と再生処理の間にほかのプロセスの処理が入ってしまうと、一定時間内に終わらず、動画と音声のタイミングがずれたり、途切れたりしてしまったからだ。そのため、再生に関わるプロセスの優先度を非常に高く設定して、ほかのプロセスを押さえて再生を行なわせていたものだ。
WindowsのようなOSでも、「サーバー用途かクライアント用途か」によって、最適条件は変わってくる。例えばWindowsのサーバー版とクライアント版は同一ソースコードから作られているため、カーネルに関してはほぼ同じだ。ゆえにスケジューリングアルゴリズムもほとんど変わらない。だが、パラメーターの違いで若干の調整を行なっているようだ。
ではスケジューリングにおけるクライアントOSとサーバーOSの違いは、どこにあるのだろう? クライアントOSでは、フォアグラウンドにあるプロセスをユーザーが操作する。そのためその反応が遅れると、体感速度が落ちてしまう。そこで、ユーザーが操作しているウインドウのプロセスは、優先度を高くするという処理が行なわれる。
逆にサーバーOSではユーザーが操作する場面は少ないし、サーバー本来の処理を優先して、プロセスを公平に実行できなければならない。そのためWindows Serverでは、フォアグラウンドのプロセスの優先度をあげる必要はない。むしろそうしてしまうと、背後で動いているバックグラウンドサービスに影響が出てしまう。ちなみに、CPUの割り当てでフォアとバックのどちらを優先するかは、コントロールパネルから設定できる。ただし、通常使う分には変更しない方がいい。
今回は、スケジューリングの概要のみを解説した。しかしスケジューリングアルゴリズムなど、まだ話題は多く残っている。また最近では、電力効率をあげるスケジューリングという考えもある。これらについては次回解説することにしよう。
この連載の記事
-
第13回
PC
ARM版Windows 8実現の布石となったWindows 7の「MinWin」 -
第12回
PC
アプリがWindowsの機能を使うには? APIとDLLの仕組み -
第11回
PC
マルチコアCPUの消費電力はスケジューリングで変わる? -
第10回
PC
AMD FX向けにパッチで修正 スケジューラーが抱える難題 -
第8回
PC
意味の違いがわかる? タスクとプロセスとスレッド -
第7回
PC
Windowsのメモリー管理をx86の仕組みから読み解く -
第6回
PC
メモリー不足を根本的に解決する64bit OSの仕組み -
第5回
PC
Windows 8でMetro Styleアプリを動かす「WinRT」 -
第4回
PC
Windowsを動かすデバイスドライバーの仕組み 前編 -
第3回
PC
OSの仕事はハードウェアをアプリから「隠す」こと? - この連載の一覧へ