(57)【要約】【課題】ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供する。【解決手段】オペレーティングシステム（ＯＳ）は、プロセス（アプリケーション）が要求するスレッドを実行するバックグラウンドで、スレッドタイプ分類・モジュール１２１及びスケジューリング・モジュール１２２を実行する。モジュール１２１は、当該スレッドを、用意されている当該スレッドのスレッドタイプを伴って、モジュール１２２に送る。モジュール１２１は、プロセス内の各スレッドにつき、それぞれ、単位時間に呼び出したシステムコールの種類の偏りに基づいて、そのスレッドタイプを予め分類している。モジュール１２２は、モジュール１２１からのスレッドにおける優先度を、そのスレッドタイプに応じて決定して、スケジューリングを行う。プロセス内のユーザとの対話を行う特定のスレッドをＧＵＩ制御タイプに分類し、その優先度を高く決定できる。【選択図】        図３
2005309534.tif 000002
【特許請求の範囲】
【請求項１】
プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング装置であって、
上記複数のスレッドのタイプをそれぞれ分類するスレッドタイプ分類手段と、
上記スレッドタイプ分類手段で分類された上記複数のスレッドのタイプに応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング手段と
を備えることを特徴とするスケジューリング装置。
【請求項２】
上記スレッドタイプ分類手段は、
上記複数のスレッドがそれぞれ単位時間に呼び出したシステムコールの種類の偏りに基づいて、該複数のスレッドのタイプを分類する
ことを特徴とする請求項１に記載のスケジューリング装置。
【請求項３】
上記スレッドのタイプにはＧＵＩ制御タイプおよびデータ処理タイプが存在し、上記システムコールの種類にはＧＵＩ関連システムコールおよびＩ／Ｏ・メモリアクセス関連システムコールが存在し、
上記スレッドタイプ分類手段は、対象スレッドが上記単位時間に呼び出したシステムコールにおいてＧＵＩ関連システムコールがＩ／Ｏ・メモリアクセス関連システムコールより多いときは該対象スレッドのタイプをＧＵＩ制御タイプに分類し、対象スレッドが上記単位時間に呼び出したシステムコールにおいてＩ／Ｏ・メモリアクセス関連システムコールがＧＵＩ関連システムコールより多いときは該対象スレッドのタイプをデータ処理タイプに分類する
ことを特徴とする請求項２に記載のスケジューリング装置。
【請求項４】
プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング方法であって、
上記複数のスレッドのタイプをそれぞれ分類するスレッドタイプ分類工程と、
上記スレッドタイプ分類工程で分類された上記複数のスレッドのタイプに応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程と
を備えることを特徴とするスケジューリング方法。
【請求項５】
プロセス内の複数のスレッドを時分割処理するために、
上記複数のスレッドのタイプをそれぞれ分類するスレッドタイプ分類工程と、
上記スレッドタイプ分類工程で分類された上記複数のスレッドのタイプに応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程と
を備えるスケジューリング方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な媒体。
【請求項６】
プロセス内の複数のスレッドを時分割処理するために、
上記複数のスレッドのタイプをそれぞれ分類するスレッドタイプ分類工程と、
上記スレッドタイプ分類工程で分類された上記複数のスレッドのタイプに応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程と
を備えるスケジューリング方法をコンピュータに実行させるためのプログラム。
【請求項７】
プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング装置であって、
上記複数のスレッドの周期をそれぞれ測定するスレッド周期測定手段と、
上記スレッド周期測定手段で測定された上記複数のスレッドの周期に応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング手段と
を備えることを特徴とするスケジューリング装置。
【請求項８】
上記スレッド周期測定手段は、
対象スレッドの周期を、該対象スレッドがスレッド開始システムコールを呼び出した時刻から該対象スレッドがスレッド終了システムコールを呼び出した時刻までの時間とする
ことを特徴とする請求項７に記載のスケジューリング装置。
【請求項９】
上記スケジューリング手段は、
対象スレッドの優先度を、該対象スレッドの上記測定された周期が要求周期より長いとき、現在の優先度より高い優先度とする
ことを特徴とする請求項７に記載のスケジューリング装置。
【請求項１０】
プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング方法であって、
上記複数のスレッドの周期をそれぞれ測定するスレッド周期測定工程と、
上記スレッド周期測定工程で測定された上記複数のスレッドの周期に応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程と
を備えることを特徴とするスケジューリング方法。
【請求項１１】
プロセス内の複数のスレッドを時分割処理するために、
上記複数のスレッドの周期をそれぞれ測定するスレッド周期測定工程と、
上記スレッド周期測定工程で測定された上記複数のスレッドの周期に応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程と
を備えるスケジューリング方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な媒体。
【請求項１２】
プロセス内の複数のスレッドを時分割処理するために、
上記複数のスレッドの周期をそれぞれ測定するスレッド周期測定工程と、
上記スレッド周期測定工程で測定された上記複数のスレッドの周期に応じて該複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程と
を備えるスケジューリング方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング装置およびスケジューリング方法、並びにプログラムおよびそれを記録した媒体に関する。
【０００２】
詳しくは、この発明は、複数のスレッドのタイプをそれぞれ分類し、その分類結果に応じて当該複数のスレッドの優先度を決定してスケジューリングを行う、または、複数のスレッドの周期をそれぞれ測定し、その測定結果に応じて当該複数のスレッドの優先度を決定してスケジューリングを行うことによって、ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できるようにしたオペレーティングシステムのスケジューリング装置等に係るものである。
【背景技術】
【０００３】
例えば、パーソナルコンピュータ用のオペレーティングシステム（ＯＳ）として、プロセス（アプリケーション）を構成する複数のスレッドを時分割処理するオペレーティングシステムが存在する。この場合、オペレーティングシステムが持つスケジューラは、ＲＥＡＤＹ状態にある複数のスレッドから一つのスレッドを選んで、プロセッサを割り当てＲＵＮ状態にする。このスケジューラの働きを、スケジューリングと呼んでいる。
【０００４】
通常、特許文献１に記載されるように、スケジューラは、各スレッドに予め割り振られている優先度に基づいて、ＲＥＡＤＹ状態にある複数のスレッドから優先度の一番高いスレッドを選んでプロセッサを割り当てる。この場合、優先度の一番高いスレッドが複数あった場合には、一番早くＲＥＡＤＹ状態になったスレッドを選んでプロセッサに割り当てる。
【０００５】
【特許文献１】特開２０００−２０３２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
コンピュータシステムにおいて、ユーザの不満に直結するのはレスポンスの低下である。システムに大きな負荷がかかり処理速度が低下したとしても、ユーザとのコミュニケーションが快適に行われれば、ユーザのストレスを大幅に低減できることが期待できる。
【０００７】
例えば、非常に大きなデータを処理した場合、それに伴ってマウスポインタの反応が遅くなったり、他のプログラムのウィンドウが描画されない等の性能の低下をもたらすことがある。殆どのオペレーティングシステムでは、ユーザが、プロセスの優先度を変更することが可能だが、優先度を指定できる単位はプロセス全体であり、そのプロセス内のユーザとの対話を行う特定のスレッドの優先度のみを上げるということは不可能である。また、プロセスが起動してから優先度を毎回設定する作業は繁雑であり、システムのパフォーマンスを低下させる場合がある。
【０００８】
多くの場合、スレッドは、起動時に、そのスレッドの優先度、およびそのスレッドが守るべき周期であるデッドラインが設定され、それに沿ってスケジューリングが行われる。例えば、スレッドＡとスレッドＢは、それぞれ、４処理単位、２処理単位を要するスレッドとし、スレッドＢの優先度ＰｂがスレッドＢの優先度Ｐａより低いとすると、図１２に示すようなスケジューリングが行われる。
【０００９】
この場合、Ｐｂ＞Ｐａであることから、プリエンプションが起こって、スレッドＢはデッドラインを守ることができている。しかし、仮にＰｂ＜Ｐａであったとした場合には、プリエンプションは起こらず、スレッドＢはデッドラインを守れない場合がある。なお、各スレッドの優先度およびデッドラインは、プロセス（アプリケーション）の作成者（プログラマ）が設定するものであり、任意のシステムにおいて普遍的に成立するわけではない。
【００１０】
この発明の目的は、ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供することにある。
【課題を解決するための手段】
【００１１】
この発明に係るスケジューリング装置は、プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング装置であって、複数のスレッドのタイプをそれぞれ分類するスレッドタイプ分類手段と、このスレッドタイプ分類手段で分類された複数のスレッドのタイプに応じてこの複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング手段とを備えるものである。
【００１２】
また、この発明に係るスケジューリング方法は、プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング方法であって、複数のスレッドのタイプをそれぞれ分類するスレッドタイプ分類工程と、このスレッドタイプ分類工程で分類された複数のスレッドのタイプに応じてこの複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程とを備えるものである。
【００１３】
また、この発明に係るプログラムは上述したスケジューリング方法をコンピュータに実行させるためのものである。また、この発明に係るコンピュータ読み取り可能な媒体は、上述したプログラムを記録したものである。
【００１４】
この発明においては、複数のスレッドのタイプがそれぞれ分類される。例えば、複数のスレッドがそれぞれ単位時間に呼び出したシステムコールの種類の偏りに基づいて、当該複数のスレッドのタイプが分類される。
【００１５】
例えば、スレッドのタイプにはＧＵＩ(Graphical User Interface)制御タイプおよびデータ処理タイプが存在し、システムコールの種類にはＧＵＩ関連システムコールおよびＩ／Ｏ・メモリアクセス関連システムコールが存在するものとする。この場合、対象スレッドが単位時間に呼び出したシステムコールにおいてＧＵＩ関連システムコールがＩ／Ｏ・メモリアクセス関連システムコールより多いとき、当該対象スレッドはＧＵＩ制御タイプとされる。また例えば、対象スレッドが単位時間に呼び出したシステムコールにおいてＩ／Ｏ・メモリアクセスシス関連テムコールがＧＵＩ関連システムコールより多いとき、当該対象スレッドのタイプはデータ処理タイプとされる。
【００１６】
そして、複数のスレッドのタイプの分類結果に応じて、この複数のスレッドの優先度が決定され、その優先度に基づいてスケジューリングが行われる。この場合、各タイプの優先度は、プロセスの作成者（プログラマ）により予め設定されている。
【００１７】
これにより、例えば、プロセス内のユーザとの対話を行う特定のスレッドがＧＵＩ制御タイプに分類され、その優先度が高く決定され、従ってユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できる。
【００１８】
この発明に係るスケジューリング装置は、プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング装置であって、複数のスレッドの周期をそれぞれ測定するスレッド周期測定手段と、このスレッド周期測定手段で測定された複数のスレッドの周期に応じてこの複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング手段とを備えるものである。
【００１９】
また、この発明に係るスケジューリング方法は、プロセス内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリング方法であって、複数のスレッドの周期をそれぞれ測定するスレッド周期測定工程と、このスレッド周期測定工程で測定された複数のスレッドの周期に応じてこの複数のスレッドの優先度を決定してスケジューリングを行うスケジューリング工程とを備えるものである。
【００２０】
また、この発明に係るプログラムは上述したスケジューリング方法をコンピュータに実行させるためのものである。また、この発明に係るコンピュータ読み取り可能な媒体は、上述したプログラムを記録したものである。
【００２１】
この発明においては、複数のスレッドの周期がそれぞれ測定される。この場合、対象スレッドの周期は、この対象スレッドがスレッド開始システムコールを呼び出した時刻からこの対象スレッドがスレッド終了システムコールを呼び出した時刻までの時間とされる。
【００２２】
そして、複数のスレッドの周期の測定結果に応じて、この複数のスレッドの優先度が決定され、その優先度に基づいてスケジューリングが行われる。例えば、対象スレッドの優先度は、この対象スレッドの測定された周期が要求周期（対象スレッドが守るべき周期、つまりデッドライン）より長いとき、現在の優先度より高い優先度とされる。
【００２３】
これにより、例えば、プロセス内のユーザとの対話を行う特定のスレッドの周期が要求周期内に納まるように、その優先度が決定され、従ってユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できる。
【発明の効果】
【００２４】
この発明によれば、複数のスレッドのタイプをそれぞれ分類し、その分類結果に応じて当該複数のスレッドの優先度を決定してスケジューリングを行う、または、複数のスレッドの周期をそれぞれ測定し、その測定結果に応じて当該複数のスレッドの優先度を決定してスケジューリングを行うものであり、ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できる。
【発明を実施するための最良の形態】
【００２５】
図１は、実施の形態としてのコンピュータシステム１００のハードウェア構成を示している。
【００２６】
このコンピュータシステム１００は、プロセッサ１０１と、バス１０２と、ＲＡＭ(Random Access Memory)１０３と、ＲＯＭ(Read Only Memory)１０４と、キーボード・マウスコントローラ（ＫＭコントローラ）１０５と、入力装置１０６と、ディスプレイコントローラ１０７と、表示部１０８と、外部記憶装置１０９と、メディアドライブ１１０と、ネットワークインタフェース（ネットワークＩ／Ｆ）１１１とを有している。
【００２７】
プロセッサ１０１は、コンピュータシステム１００全体の動作を統括的に制御するメイン・コントローラであり、一般には、ＣＰＵ(Central Processing Unit)、もしくはＭＰＵ(Micro Processing Unit)と呼ばれる。プロセッサ１０１は、オペレーティングシステム（ＯＳ:Operating System）の制御下で、各種のアプリケーション(プロセス）を実行する。このプロセッサ１０１は、バス１０２を介して、その他の各周辺装置と相互接続されている。
【００２８】
バス１０２は、アドレスバス、データバス、コントロールバス等の多数のバス信号線で構成される共通信号伝送路であり、例えばＰＣＩ(Peripheral Component Interconnect)バスやＩＳＡ(Industry Standard Architecture)バス等がこれに該当する。バス接続された各周辺装置は、それぞれ固有のＩ／Ｏアドレス（またはメモリ・アドレス）が割り振られたＩ／Ｏレジスタを含んでいる。プロセッサ１０１（より具体的には、プロセッサ１０１が実行するソフトウェアプログラム）は、Ｉ／Ｏアドレスを指定することで、周辺装置のＩ／Ｏレジスタに対してデータやコマンドの読み書きをして、所望の制御を実行できる。
【００２９】
ＲＡＭ１０３は、プロセッサ１０１が実行するプログラムコードをロードしたり、作業データを一時格納するために使用される書き込み可能なメモリである。このＲＡＭ１０３は、通常、複数個のＤＲＡＭ(Dynamic RAM)チップで構成されている。
【００３０】
ＲＯＭ１０４は、製造時に格納データが恒久的に書き込まれる読み出し専用の不揮発性メモリである。このＲＯＭ１０４上には、例えば、コンピュータシステム１００の電源投入時に実行する自己診断テストプログラム（ＰＯＳＴ:Power-on Self Test）や、ハードウェア入出力操作を実行するためのコード群（ＢＩＯＳ:Basic Input/Output System）が格納されている。このＲＯＭ１０４は、例えばＥＥＰＲＯＭ(Electrically Erasable and Programmable ROM)のように消去再書き込みが可能なタイプであってもよい。
【００３１】
ＫＭコントローラ１０５は、キーボードやマウスなどの入力装置１０６を介したユーザからのコマンド入力などを受容する装置である。このＫＭコントローラ１０５は、キーボードからのキャラクタ入力やマウスからの座標指示入力が発生したことに応答して、プロセッサ１０１に対して割り込み要求を発行する。
【００３２】
ディスプレイコントローラ１０７は、表示部１０８における描画処理を制御する周辺コントローラであり、描画データを一時格納するフレームバッファ（図示しない）を備えている。表示部１０８は、ＣＲＴ(Cathode Ray Tube)ディスプレイ、ＬＣＤ(Liquid Crystal Display)、ＰＤＰ(Plasma Display Panel)等であり、その画面には、処理データやコマンド入力のためのメニューなどを含んだＧＵＩ作業画面（ウィンドウ）が表示される。
【００３３】
外部記憶装置１０９は、例えば、ハードディスクドライブ（ＨＤＤ）のような、比較的大容量で再書き込み可能、かつ不揮発性の記憶装置であり、データファイルを蓄積したり、プログラムファイルをインストールするために使用される。
【００３４】
メディアドライブ１１０は、カートリッジ式のメディア１１２を交換可能に装填して、このメディア１１２に対してデータを読み書きするための装置である。ここで、メディア１１２としては、ＭＯ(Magneto-Optical disc)、ＣＤ−ＲＯＭ(Compact Disc as Read Only Memory)、ＤＶＤ(Digital Versatile Disc)などの、コンピュータシステム１００から着脱自在で可搬型のメディアが挙げられる。例えば、本発明に係るオペレーティングシステムは、コンピュータ読み取り可能なファイル形式でメディア１１２上に記憶されており、当該メディア１１２を媒介として流通され、メディアドライブ１１０によって外部記憶装置１０９にインストールできる。
【００３５】
ネットワークＩ／Ｆ１１１は、コンピュータシステム１００を所定の通信プロトコル、例えばＴＣＰ／ＩＰ(Transmission Control Protocol/Internet Protocol)に従って、ネットワーク１１３接続するための装置である。ネットワーク１１３上には、図示しない複数のコンピュータシステム（以下では、「リモート・システム」とも呼ぶ）が存在する。ネットワーク１１３上の各システム間では、例えばパケット交換方式で、コンピュータ読み取り可能なプログラムやデータを有形的な形態で伝送できる。
【００３６】
オペレーティングシステム（ＯＳ）は、周知のように、基本ソフトウェアとも呼ばれ、ハードウェアを制御し、コンピュータシステムの基本的な動作を可能にするソフトウェアである。図２は、この観点から、コンピュータシステムの構成を見た概念図である。
【００３７】
ハードウェアは、ＢＩＯＳ等のファームウェアと呼ばれる小規模なソフトウェアによって制御される。このファームウェアは、一般に、ハードウェア自体に内蔵されている。オペレーティングシステムは、ドライバと呼ばれるソフトウェアを介してハードウェアを制御する。ドライバは、上述したファームウェアを介して、ハードウェアを制御する。
【００３８】
このように、オペレーティングシステムは、ハードウェアを間接的に制御し、プロセス（アプリケーション）を実行できる環境を提供している。プロセスがハードウェアを制御する場合、オペレーティングシステムのｒｅａｄ，ｗｒｉｔｅ等のシステムコール(System Call)を利用できる。このシステムコールは、オペレーティングシステムのＡＰＩ(Application Programmer's Interface)、つまりプロセスをプログラムするプログラマが使える機能である。
【００３９】
プロセス（アプリケーション）は、複数のスレッドで構成されている。スレッドは実行単位または制御単位を意味している。プロセスの実行時には、当該プロセスを構成するスレッドが時分割的に実行される。スレッドが実行されるとき、当該スレッドはオペレーティングシステムのシステムコールを呼び出して利用する。
【００４０】
オペレーティングシステムは、プロセスを実行する場合、プロセスを構成する複数のスレッドを時分割処理する。この場合、オペレーティングシステムが持つスケジューラは、ＲＥＡＤＹ状態にある複数のスレッドから一つのスレッドを選んで、プロセッサ１０１を割り当てＲＵＮ状態にする。
【００４１】
図３は、オペレーティングシステムのスケジューラ部分の構成を示している。オペレーティングシステムは、プロセス（アプリケーション）が要求するスレッドを実行するバックグラウンドで、スレッドタイプ分類・モジュール１２１およびスケジューリング・モジュール１２２を実行する。
【００４２】
プロセスが要求するスレッドは、スレッドタイプ分類・モジュール１２１に送られる。このスレッドタイプ分類・モジュール１２１は、当該スレッドを、用意されている当該スレッドのスレッドタイプを伴って、スケジューリング・モジュール１２２に送る。この場合、スレッドタイプ分類・モジュール１２１は、プロセス内の各スレッドにつき、それぞれ、単位時間に呼び出したシステムコールの種類の偏りに基づいて、そのタイプを予め分類している。
【００４３】
本実施の形態において、分類対象のスレッドは、ＧＵＩ制御タイプまたはデータ処理タイプに分類される。この場合、システムコールの種類に、ＧＵＩ関連システムコールおよびＩ／Ｏ・メモリアクセス関連システムコールが存在するものとする。ＧＵＩ関連システムコールには、マウス関連システムコール、キーボード関連システムコール、グラフィクス描画システムコール等が含まれる。Ｉ／Ｏ・メモリアクセス関連システムコールには、ディスクアクセスシステムコール、ネットワークアクセスシステムコール等が含まれる。
【００４４】
図４は、スレッドＡ，Ｂの単位時間のシステムコールの呼び出し履歴の一例を示している。スレッドＡが単位時間に呼び出すシステムコールは全部で６つであって、５つがＧＵＩ関連システムコールであり、１つがＩ／Ｏ・メモリアクセス関連システムコールである。また、スレッドＢが単位時間に呼び出すシステムコールは全部で５つであって、５つ全部がＩ／Ｏ・メモリアクセス関連システムコールである。
【００４５】
この場合、スレッドＡは、５／６がＧＵＩ関連システムコールであり、１／６がＩ／Ｏ・メモリアクセス関連システムコールであるので、図５に示すように、ＧＵＩ制御タイプに分類される。また、スレッドＢは、０／５がＧＵＩ関連システムコールであり、５／５がＩ／Ｏ・メモリアクセス関連システムコールであるので、図５に示すように、データ処理タイプに分類される。
【００４６】
図６のフローチャートは、任意のスレッド（対象スレッド）のシステムコール呼び出し履歴により、当該スレッドのタイプ分類処理を行う処理手順を示している。
【００４７】
まず、ステップＳＴ１０で、処理を開始し、ステップＳＴ１１で、ＧＵＩ関連のシステムコールが呼び出されたか否かを判定する。ＧＵＩ関連システムコールが呼び出されたときは、ステップＳＴ１２で、ＧＵＩ関連システムコールの呼び出し回数gui_call_countを１だけ増加し、その後にステップＳＴ１３に進む。
【００４８】
上述のステップＳＴ１１で、ＧＵＩ関連システムコールが呼び出されていないときは、ステップＳＴ１４で、Ｉ／Ｏ・メモリアクセス関連システムコールが呼び出されたか否かを判定する。Ｉ／Ｏ・メモリアクセス関連システムコールが呼び出されたときは、ステップＳＴ１５で、Ｉ／Ｏ・メモリアクセス関連システムコールの呼び出し回数dp_call_countを１だけ増加し、その後にステップＳＴ１３に進む。なお、ステップＳＴ１４で、Ｉ／Ｏ・メモリアクセス関連システムコールが呼び出されていないときは、直ちにステップＳＴ１３に進む。
【００４９】
ステップＳＴ１３では、スレッドの稼働時間であるtimerを１だけ増加する。そして、ステップＳＴ１６で、timerが上述した単位時間であるシステムコールの計測周期PERIODより大きいか否かを判定する。timer＞PERIODでないときは、ステップＳＴ１１に戻り、上述したと同様の処理をする。一方、timer＞PERIODであるときは、ステップＳＴ１７で、timer＝０とし、その後にステップＳＴ１８に進む。
【００５０】
このステップＳＴ１８では、ＧＵＩ関連システムコールの呼び出し回数gui_call_countがＩ／Ｏ・メモリアクセス関連システムコールの呼び出し回数dp_call_countより大きいか否かを判定する。gui_call_count＞dp_call_countであるときは、ステップＳＴ１９で、スレッドのタイプをＧＵＩ制御タイプに設定する。そして、ステップＳＴ２０で、gui_call_count＝０、dp_call_count＝０とし、ステップＳＴ２１で、処理を終了する。一方、gui_call_count＞dp_call_countでないときは、ステップＳＴ２２で、スレッドのタイプをデータ処理タイプに設定し、ステップＳＴ２０を介して、ステップＳＴ２１で、処理を終了する。
【００５１】
また、図３に戻って、スケジューリング・モジュール１２２は、スレッドタイプ分類・モジュール１２１からのスレッドにおける優先度を、そのスレッドタイプに応じて決定して、スケジューリングを行う。図７は、プロセス（アプリケーション）の制作者（プログラマ）が予め決める、スレッドタイプと優先度との関係の一例を示している。ＧＵＩ制御タイプのスレッドは、プロセッサの仕事量が小さくスレッド負荷は低いが、優先度が高く設定される。一方、データ処理タイプのスレッドは、プロセッサの仕事量が大きくスレッド負荷は高いが、優先度は低く設定される。
【００５２】
図８は、スケジューリング・モジュール１２２の構成を示している。このスケジューリング・モジュール１２２は、優先度キュー方式を採用している。このスケジューリング・モジュール１２２は、スレッドタイプ分類・モジュール１２１からのスレッドを、それに対応した優先度が付加された状態で、スレッドキューに入れる。そして、スケジューリング・モジュール１２２の実行スレッド切替器は、優先度が最も高いものの中で先頭のものを実行すべきスレッドとしてスレッドキューから取り出し、プロセッサ１０１に割り当てる。
【００５３】
なお、本実施の形態において、スレッドの優先度は、上述したように分類されたそのスレッドのタイプによって決定されるが、さらに、そのスレッドの実行時に、その周期（実際の稼働時間）を実測し、測定された周期が要求周期、例えばデッドラインより長いときは、その優先度を上昇させる。
【００５４】
図９Ａ，Ｂは、スレッド周期の実測によるスレッドの優先度変化例を示している。スレッドの周期は、スレッドの処理の最初にスレッド開始システムコールを入れておき、そのスレッドの処理の最後にスレッド終了システムコールを入れておくことで、実測できる。つまり、オペレーティングシステムは、スレッド周期を実測すべき対象スレッドがスレッド開始システムコールを呼び出した時刻から、その対象スレッドがスレッド終了システムコールを呼び出した時刻までの時間を、その対象スレッドのスレッド周期とする。
【００５５】
図９Ａは、優先度変化前の状態を示しており、測定された周期（実測した周期）が、要求周期より長くなっている。この場合、オペレーティングシステムは、当該対象スレッドの優先度を上昇させる。図９Ｂは、優先度変化後の状態を示しており、測定された周期（実測した周期）は、要求周期より短くなっている。
【００５６】
図１０のフローチャートは、実行中スレッド（対象スレッド）のスレッド周期の実測による優先度上昇処理の処理手順を示している。
【００５７】
まず、ステップＳＴ３０で、処理を開始し、ステップＳＴ３１で、スレッド開始システムコールが呼び出されたか否かを判定する。スレッド開始システムコールが呼び出されたときは、ステップＳＴ３２で、実行中スレッドのstart_flagを、「１」に設定する。そして、ステップＳＴ３３で、実行中スレッドのstart_timeに、現在時刻を設定し、その後にステップＳＴ３１に戻る。
【００５８】
ステップＳＴ３１でスレッド開始システムコールが呼び出されていないときき、ステップＳＴ３４に進む。このステップＳＴ３４では、スレッド終了システムコールが呼び出されたか否かを判定する。スレッド終了システムコールが呼び出されていないときは、ステップＳＴ３１に戻る。一方、スレッド終了システムコールが呼び出されたときは、ステップＳＴ３５に進む。
【００５９】
このステップＳＴ３５では、start_flagが「１」に設定されているか否かを判定する。start_flagが「１」に設定されていないときは、未だスレッド開始システムコールが呼び出されておらず、start_timeにスレッド開始の時刻が設定されていないことから、ステップＳＴ３６で、エラーであるとして、ステップＳＴ３１に戻る。一方、start_flagが「１」に設定されているときは、ステップＳＴ３７に進む。
【００６０】
このステップＳＴ３７では、実行中スレッドの測定された周期、つまり現在時刻−start_timeが、実行中スレッドの要求周期であるperiod以内であるか否かを判定する。現在時刻−start_time＞periodであるときは、ステップＳＴ３８で、実行されていた対象スレッドの優先度を上げ、ステップＳＴ３９で、start_flgを「０」に戻し、その後にステップＳＴ４０で、処理を終了する。一方、現在時刻−start_time＞periodでないときは、直ちにステップＳＴ３９を介して、ステップＳＴ４０で、処理を終了する。
【００６１】
図１１は、上述した、スケジューリング機能、スレッドタイプ分類処理（図６参照）、および、優先度上昇処理（図１０参照）等の機能を実現するためのスレッド管理テーブルの一例を示している。このスレッド管理テーブルは、プロセス（アプリケーション）を実行する際、そのプロセス内の複数のスレッド毎に、例えばＲＡＭ１０３内に作成される。
【００６２】
以上説明したように、本実施の形態においては、プロセス（アプリケーション）内の複数のスレッドのタイプを分類し、その分類結果に応じて、当該複数のスレッドの優先度を決定し、その優先度に基づいてスケジューリングを行うものである。例えば、プロセス内のユーザとの対話を行う特定のスレッドをＧＵＩ制御タイプに分類し、その優先度を高く決定できることから、本実施の形態では、ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できる。
【００６３】
また、本実施の形態においては、実行中のスレッドの周期を測定し、その周期が要求周期を越えるとき、当該スレッドの優先度を上昇させるものであり、例えばプロセス（アプリケーション）内のユーザとの対話を行う特定のスレッドの周期を要求周期内に納めるように、その優先度を動的に決定でき、ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できる。
【００６４】
なお、上述実施の形態においては、プロセス（アプリケーション）内の複数のスレッドのスレッドタイプを、それぞれのスレッドが単位時間内に呼び出したシステムコールの種類の偏りに基づいて分類するものを示したが、分類方法はこれに限定されるものではない。複数の分類方法を実装し、目的に応じて切り替えることで、任意の目的に沿ったスケジューリングを自動的に行うことが可能となる。
【００６５】
また、上述実施の形態においては、測定されたスレッドの周期が要求周期より長いとき、当該スレッドの優先度を上げるものを示したが、さらに測定されたスレッドの周期が要求周期よりも短いとき、当該スレッドの優先度を下げることも考えられる。
【産業上の利用可能性】
【００６６】
この発明は、ユーザを煩わせることなくユーザに対してストレスの少ない環境を提供できるものであり、プロセス（アプリケーション）内の複数のスレッドを時分割処理するオペレーティングシステムのスケジューリングに適用できる。
【図面の簡単な説明】
【００６７】
【図１】実施の形態としてのコンピュータシステムのハードウェア構成を示すブロック図である。
【図２】コンピュータシステムの構成を説明するための図である。
【図３】オペレーティングシステムのスケジューラ部分の構成を示すブロック図である。
【図４】スレッドＡ，Ｂの単位時間のシステムコールの呼び出し履歴の一例を示す図である。
【図５】ＧＵＩ関連、Ｉ／Ｏ・メモリアクセス関連のシステムコール呼出回数とスレッドタイプの判別の例を示す図である。
【図６】システムコール呼出履歴によるスレッドタイプ分類処理の処理手順を示すフローチャートである。
【図７】スレッドタイプと優先度との関係の一例を示す図である。
【図８】スケジューリング・モジュールの構成を示すブロック図である。
【図９】スレッド周期の実測によるスレッドの優先度変化例を説明するための図である。
【図１０】スレッド周期の実測による優先度上昇処理の処理手順を示すフローチャートである。
【図１１】スレッド管理テーブルの一例を示す図である。
【図１２】スレッドの優先度とデッドラインを説明するための図である。
【符号の説明】
【００６８】
１００・・・コンピュータシステム、１０１・・・プロセッサ、１０２・・・バス、１０３・・・ＲＡＭ、１０４・・・ＲＯＭ、１０５・・・キーボード・マウスコントローラ（ＫＭコントローラ）、１０６・・・入力装置、１０７・・・ディスプレイコントローラ、１０８・・・表示部、１０９・・・外部記憶装置、１１０・・・メディアドライブ、１１１・・・ネットワークインタフェース（ネットワークＩ／Ｆ）、１１２・・・メディア、１１３・・・ネットワーク、１２１・・・スレッドタイプ分類・モジュール、１２２・・・スケジューリング・モジュール
【図１】
2005309534.tif 000003
【図２】
2005309534.tif 000004
【図３】
2005309534.tif 000005
【図４】
2005309534.tif 000006
【図５】
2005309534.tif 000007
【図６】
2005309534.tif 000008
【図７】
2005309534.tif 000009
【図８】
2005309534.tif 000010
【図９】
2005309534.tif 000011
【図１０】
2005309534.tif 000012
【図１１】
2005309534.tif 000013
【図１２】
2005309534.tif 000014