このページの本文へ

前へ 1 2 3 次へ

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

マルチコアCPUを賢く使いこなす スケジューリングの秘密

2011年12月27日 12時00分更新

文● 塩田紳二

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

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の割り当てでフォアとバックのどちらを優先するかは、コントロールパネルから設定できる。ただし、通常使う分には変更しない方がいい。

クライアントOSのWindows 7でも、プロセッサーのスケジューリングをバックグラウンド優先に変更できる

 今回は、スケジューリングの概要のみを解説した。しかしスケジューリングアルゴリズムなど、まだ話題は多く残っている。また最近では、電力効率をあげるスケジューリングという考えもある。これらについては次回解説することにしよう。

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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