(57)【要約】【課題】ＣＰＵの有効利用と消費電力の抑制を両立させたコンピュータ装置を提供する。【解決手段】コンピュータ装置１００は、複数のＣＰＵ１０１とメモリ１０２とＯＳ１２１と１以上のアプリケーション１１２とを有する。アプリケーション１１２は、遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行し、且つ遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止する機能を持つ。ＯＳ１１１のＣＰＵ監視手段１２２は、ＣＰＵ負荷状況を監視し、第１の閾値以下にＣＰＵ負荷が低下した際にアプリケーション１１２に対し遊休ＣＰＵ利用可能イベントを送信し、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際にアプリケーション１１２に対して遊休ＣＰＵ利用キャンセルイベントを送信する。【選択図】図１
2007334782.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置において、
前記メモリに、遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行し且つ遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止するアプリケーションの識別子を記憶する記憶部を備え、
前記ＯＳに、ＣＰＵ負荷状況を監視し、第１の閾値以下にＣＰＵ負荷が低下した際に前記記憶部に識別子が記憶されている何れかのアプリケーションに対し遊休ＣＰＵ利用可能イベントを送信し、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際に前記遊休ＣＰＵ利用可能イベントを送信したアプリケーションに対して遊休ＣＰＵ利用キャンセルイベントを送信するＣＰＵ監視手段を備えることを特徴とするコンピュータ装置。
【請求項２】
前記遊休ＣＰＵ利用処理を実行するＣＰＵの数を制限することにより、遊休ＣＰＵ利用処理によるＣＰＵ負荷の増大量を抑えることを特徴とする請求項１記載のコンピュータ装置。
【請求項３】
前記ＣＰＵ監視手段は、ＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信することを特徴とする請求項１または２記載のコンピュータ装置。
【請求項４】
前記アプリケーションは、ＣＰＵ数変更イベントを受信することにより分散処理数を変更する使用ＣＰＵ数変更処理を行うことを特徴とする請求項３記載のコンピュータ装置。
【請求項５】
複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置において、
前記ＯＳに、ＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信するＣＰＵ監視手段を備えることを特徴とするコンピュータ装置。
【請求項６】
前記アプリケーションは、ＣＰＵ数変更イベントを受信することにより分散処理数を変更する使用ＣＰＵ数変更処理を行うことを特徴とする請求項５記載のコンピュータ装置。
【請求項７】
複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置の制御方法において、
前記ＯＳが、ＣＰＵ負荷状況を監視する第１のステップと、
前記ＯＳが、第１の閾値以下にＣＰＵ負荷が低下した際にアプリケーションに対し遊休ＣＰＵ利用可能イベントを送信する第２のステップと、
前記アプリケーションが、前記遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行する第３のステップと、
前記ＯＳが、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際に前記アプリケーションに対して遊休ＣＰＵ利用キャンセルイベントを送信する第４のステップと、
前記アプリケーションが、前記遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止する第５のステップとを含むことを特徴とするコンピュータ制御方法。
【請求項８】
複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置の制御方法において、
前記ＯＳが、ＣＰＵの増減を監視する第１のステップと、
前記ＯＳが、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信する第２のステップと、
前記アプリケーションが、前記ＣＰＵ数変更イベントを受信することにより分散処理数を変更する第３のステップとを含むことを特徴とするコンピュータ制御方法。
【請求項９】
複数のＣＰＵと、メモリと、前記ＣＰＵ上で実行される１以上のアプリケーションであって、遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行し且つ遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止するアプリケーションとを有するコンピュータを、ＣＰＵ負荷状況を監視し、第１の閾値以下にＣＰＵ負荷が低下した際に前記アプリケーションに対し遊休ＣＰＵ利用可能イベントを送信し、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際に前記遊休ＣＰＵ利用可能イベントを送信したアプリケーションに対して遊休ＣＰＵ利用キャンセルイベントを送信するＣＰＵ監視手段として機能させるためのプログラム。
【請求項１０】
複数のＣＰＵと、メモリと、前記ＣＰＵ上で実行される１以上のアプリケーションとを有するコンピュータを、ＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信するＣＰＵ監視手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ装置に関し、特に複数のＣＰＵを備えたコンピュータ装置においてＣＰＵを有効利用する技術に関する。
【背景技術】
【０００２】
ハードウェア技術の進歩に伴い、複数のＣＰＵを備えたコンピュータ装置が比較的安価に供給されるようになってきた。ＣＰＵを複数台備えたコンピュータ装置は、複数のＣＰＵを並列に動作させることで、処理速度やスループット、信頼性が向上し、単一のＣＰＵしか有しないコンピュータ装置に比べて高性能な計算機システムを実現できる。その反面、稼動するＣＰＵの数に応じて消費電力は大きくなる。このため、状況に応じて動的にＣＰＵの追加（活性化）、削除（非活性化）が行えるようになっていることが多い。
【０００３】
複数のＣＰＵを備えたコンピュータ装置では、一般にマルチプロセッサ向けのＯＳ（オペレーティングシステム）を使用する。ＯＳは、各ＣＰＵの稼動状況を管理し、アプリケーションの各スレッドを各ＣＰＵに割り当てることにより並列処理を実現する。また、スレッド間の実行同期待ちを減らすために、同じアプリケーションを構成するスレッドを異なるプロセッサで同時に実行させるギャングスケジューリングと呼ばれるスケジューリングアルゴリズムも知られている（例えば特許文献１参照）。
【０００４】
さらにマルチプロセッサに限った技術ではないが、アプリケーションへのリソース（ＣＰＵ、メモリ等）の割り当てを、パラメータで指定されたサービスレベル目標に合致するように制御する方法がある（例えば特許文献２参照）。また、特に仕事をしていない状態になったとき、ＣＰＵに供給する基準クロックの周波数を下げて、ＣＰＵを省電力モードで動作させたり、より消費電力を低減するためにＣＰＵへのクロックを停止させる技術もある（例えば特許文献３参照）。
【０００５】
【特許文献１】特開２００４−２８０２９３号公報
【特許文献２】特開２００４−２１９８２号公報
【特許文献３】特開２００６−２３８０３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ユーザが操作を行っていない時に、コンピュータ装置のＣＰＵ負荷が非常に低くなる場合がある。このような場合、従来の技術傾向としては、特許文献３に見られるように消費電力の低減を最優先とし、コンピュータ装置を省電力モードにすることであった。しかしながら、これではＣＰＵの有効利用は図れない。何故なら、例えば、アプリケーションによっては、ユーザの次の操作の処理が予想できる場合にその処理をバックグラウンド処理などで予め行っておけばレスポンスを大幅に改善でき、実際にユーザが操作を行った時のＣＰＵの高負荷を避けることができるからである。ただしこの場合、アプリケーションにバックグラウンド処理を無条件で許可すると、ＣＰＵの有効利用は図れるが、消費電力が大きくなり過ぎるという問題が生じる。特許文献２に見られるように、アプリケーションへのリソースの割り当てを、パラメータで指定されたサービスレベル目標に合致するように制御する方法を適用すれば、無制限な使用は抑制できるが、リソースが制限されるためアプリケーション本来の処理に悪影響を与える恐れがある。
【０００７】
そこで本発明の目的は、ＣＰＵの有効利用と消費電力の抑制とを両立させたコンピュータ装置を提供することにある。
【０００８】
また、複数のＣＰＵを持つコンピュータ装置では、前述したように状況に応じて動的にＣＰＵの追加、削除が行われるが、このＣＰＵの追加、削除をアプリケーションに迅速に知らせる仕組みがなかった。このため、動的に変化するＣＰＵ数に応じて分散処理数（スレッド数）を動的に変化させるようなアプリケーションを開発する場合、個々のアプリケーション中に現在のＣＰＵ数を定期的にチェックするロジックを組み込む必要があり、アプリケーションの開発が困難になると共に、定期的なチェックがアプリケーション毎に実行されるため、システム全体の効率も低下するという問題があった。
【０００９】
そこで本発明の別の目的は、ＣＰＵの追加、削除によるＣＰＵ数の変更をアプリケーションが速やかに認識できるようにすることにある。
【課題を解決するための手段】
【００１０】
本発明の第１のコンピュータ装置は、複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置において、前記メモリに、遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行し且つ遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止するアプリケーションの識別子を記憶する記憶部を備え、前記ＯＳに、ＣＰＵ負荷状況を監視し、第１の閾値以下にＣＰＵ負荷が低下した際に前記記憶部に識別子が記憶されている何れかのアプリケーションに対し遊休ＣＰＵ利用可能イベントを送信し、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際に前記遊休ＣＰＵ利用可能イベントを送信したアプリケーションに対して遊休ＣＰＵ利用キャンセルイベントを送信するＣＰＵ監視手段を備えることを特徴とする。
【００１１】
本発明の第２のコンピュータ装置は、第１のコンピュータ装置において、前記遊休ＣＰＵ利用処理を実行するＣＰＵの数を制限することにより、遊休ＣＰＵ利用処理によるＣＰＵ負荷の増大量を抑えることを特徴とする。
【００１２】
本発明の第３のコンピュータ装置は、第１または第２のコンピュータ装置において、前記ＣＰＵ監視手段は、ＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信することを特徴とする。
【００１３】
本発明の第４のコンピュータ装置は、第３のコンピュータ装置において、前記アプリケーションは、ＣＰＵ数変更イベントを受信することにより分散処理数を変更する使用ＣＰＵ数変更処理を行うことを特徴とする。
【００１４】
本発明の第５のコンピュータ装置は、複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置において、前記ＯＳに、ＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信するＣＰＵ監視手段を備えることを特徴とする。
【００１５】
本発明の第６のコンピュータ装置は、第５のコンピュータ装置において、前記アプリケーションは、ＣＰＵ数変更イベントを受信することにより分散処理数を変更する使用ＣＰＵ数変更処理を行うことを特徴とする。
【００１６】
本発明の第１のコンピュータ制御方法は、複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置の制御方法において、前記ＯＳが、ＣＰＵ負荷状況を監視する第１のステップと、前記ＯＳが、第１の閾値以下にＣＰＵ負荷が低下した際にアプリケーションに対し遊休ＣＰＵ利用可能イベントを送信する第２のステップと、前記アプリケーションが、前記遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行する第３のステップと、前記ＯＳが、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際に前記アプリケーションに対して遊休ＣＰＵ利用キャンセルイベントを送信する第４のステップと、前記アプリケーションが、前記遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止する第５のステップとを含むことを特徴とする。
【００１７】
本発明の第２のコンピュータ制御方法は、複数のＣＰＵとメモリと前記ＣＰＵ上で実行されるＯＳと該ＯＳの制御の下で前記ＣＰＵ上で実行される１以上のアプリケーションとを備えたコンピュータ装置の制御方法において、前記ＯＳが、ＣＰＵの増減を監視する第１のステップと、前記ＯＳが、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信する第２のステップと、前記アプリケーションが、前記ＣＰＵ数変更イベントを受信することにより分散処理数を変更する第３のステップとを含むことを特徴とする。
【００１８】
本発明の第１のプログラムは、複数のＣＰＵと、メモリと、前記ＣＰＵ上で実行される１以上のアプリケーションであって、遊休ＣＰＵ利用可能イベントを受信することにより遊休ＣＰＵ利用処理を実行し且つ遊休ＣＰＵ利用キャンセルイベントを受信することにより前記遊休ＣＰＵ利用処理の実行を停止するアプリケーションとを有するコンピュータを、ＣＰＵ負荷状況を監視し、第１の閾値以下にＣＰＵ負荷が低下した際に前記アプリケーションに対し遊休ＣＰＵ利用可能イベントを送信し、前記第１の閾値より大きな第２の閾値以上にＣＰＵ負荷が上昇した際に前記遊休ＣＰＵ利用可能イベントを送信したアプリケーションに対して遊休ＣＰＵ利用キャンセルイベントを送信するＣＰＵ監視手段として機能させることを特徴とする。
【００１９】
本発明の第２のプログラムは、複数のＣＰＵと、メモリと、前記ＣＰＵ上で実行される１以上のアプリケーションとを有するコンピュータを、ＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信するＣＰＵ監視手段として機能させることを特徴とする。
【００２０】
『作用』
本発明にあっては、コンピュータ装置に対するユーザ操作がなくなってＣＰＵ負荷が第１の閾値以下に低下すると、そのことがＯＳのＣＰＵ監視手段により検出され、遊休ＣＰＵの利用を促すために遊休ＣＰＵ利用可能イベントがアプリケーションに発行される。その後、ユーザ操作が再開されるなどしてＣＰＵ負荷が第２の閾値以上になると、消費電力を抑えるためと本来の処理への影響を軽減するために、遊休ＣＰＵ利用キャンセルイベントがアプリケーションに発行され、遊休ＣＰＵ利用処理を停止させる。
【００２１】
またＣＰＵの追加や削除があると、そのことがＯＳのＣＰＵ監視手段により検出され、各アプリケーションにＣＰＵ数変更イベントが発行される。これにより、アプリケーションは、変更後のＣＰＵ数に合わせて分散処理数を変更するといった処理を適宜実行することが可能となる。
【発明の効果】
【００２２】
本発明によれば、コンピュータ装置のＣＰＵ負荷が第１の閾値よりも低い時に、アプリケーションに遊休ＣＰＵ利用可能イベントを通知して遊休ＣＰＵ利用処理を促す一方、第２の閾値を超えるとアプリケーションに遊休ＣＰＵ利用キャンセルイベントを通知して遊休ＣＰＵ利用処理を停止させるようにしているため、ＣＰＵの有効利用と消費電力の抑制とを両立させることが可能となる。
【００２３】
また本発明によれば、ＣＰＵ監視手段がＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信するため、ＣＰＵの追加、削除によるＣＰＵ数の変更をアプリケーションが速やかに認識することができる。これにより、動的に変化するＣＰＵ数に応じて分散処理数（スレッド数）を動的に変化させるようなアプリケーションの開発を容易に行うことが可能となる。
【発明を実施するための最良の形態】
【００２４】
『第１の実施の形態』
図１を参照すると、本発明の第１の実施の形態にかかるコンピュータ装置１００は、複数のＣＰＵ１０１と、メモリ１０２と、入出力装置１０３とを備えている。
【００２５】
メモリ１０２は、複数のＣＰＵ１０１からアクセス可能なＲＡＭ等の記憶装置であり、ＯＳ１１１と、１以上のアプリケーションプログラム（以下、単にアプリケーションと記す）１１２と、遊休ＣＰＵ利用制御テーブル１１３と、第１および第２の設定負荷値１１４および１１５とを記憶している。
【００２６】
ＯＳ１１１は、マルチプロセッサ用のオペレーティングシステムであり、メモリ管理、ファイル管理およびデバイス管理などの基本的な機能を担うＯＳカーネル１２１と、本発明で新たに追加されたＣＰＵ監視手段１２２とから構成される。
【００２７】
ＣＰＵ監視手段１２２は、ＣＰＵ１０１の負荷状況を監視し、第１の設定負荷値１１４以下にＣＰＵ負荷が低下した際にアプリケーション１１２に対し遊休ＣＰＵ利用可能イベントを送信する機能を有する。また、第１の設定負荷値１１４より大きな第２の設定負荷値１１５以上にＣＰＵ負荷が上昇した際に、遊休ＣＰＵ利用可能イベントを送信したアプリケーション１１２に対して遊休ＣＰＵ利用キャンセルイベントを送信する機能を有する。
【００２８】
第１の設定負荷値１１４および第２の設定負荷値１１５は、コンピュータ装置１００の初期設定パラメータの一つとして固定的に記憶されるか、或いは入出力装置１０３からのユーザ操作によって変更可能なパラメータとしてメモリ１０２に記憶される。２つの設定負荷値のうち、第１の設定負荷値１１４は、遊休ＣＰＵ利用処理を開始させる閾値となるＣＰＵ負荷を示し、第２の設定負荷値１１５は、遊休ＣＰＵ利用処理を停止させる閾値となるＣＰＵ負荷を示す。第２の設定負荷値１１５の値は、パフォーマンスと消費電力とのバランスにより決定される。例えば、電池で駆動するコンピュータ装置の場合は、消費電力を抑えるために低い値に設定される。第１の設定負荷値１１４は、第２の設定負荷値１１５より小さな値に設定される。第１の設定負荷値１１４と第２の設定負荷値１１５との差が小さいと、起動された遊休ＣＰＵ利用処理が直ぐに停止される可能性が高くなる。逆に差が大きいと、遊休ＣＰＵ利用処理が起動される場面が少なくなるので、両者のバランスを考慮して決定される。
【００２９】
アプリケーション１１２は、文書ビューワなどのプログラムであり、何れかのＣＰＵ１０１で実行されることにより所定の処理を実行する。アプリケーション１１２は、Ｉ／Ｏイベント処理手段１３１と、遊休ＣＰＵ利用処理手段１３２と、イベントディスパッチ手段１３３とから構成される。
【００３０】
Ｉ／Ｏイベント処理手段１３１は、自アプリケーション１１２に対して発行されたＩ／Ｏイベントに対応する処理を実行する部分であり、Ｉ／Ｏイベントの種類毎に存在する。
【００３１】
遊休ＣＰＵ利用処理手段１３２は、自アプリケーション１１２に対して遊休ＣＰＵ利用可能イベントが発行された場合に実行すべき処理（以下、遊休ＣＰＵ利用処理と記す）を実行する手段である。
【００３２】
イベントディスパッチ手段１３３は、ＯＳ１１１からイベントを受信し、受信したイベントの種類に応じて各処理手段１３１、１３２を制御する手段である。
【００３３】
遊休ＣＰＵ利用制御テーブル１１３は、遊休ＣＰＵ利用処理手段１３２を有するアプリケーション１１２毎に遊休ＣＰＵ利用可能イベントの送信状況を記録する記憶部である。
【００３４】
図２を参照すると、遊休ＣＰＵ利用制御テーブル１１３には、アプリケーション識別子と遊休ＣＰＵ利用可能イベント送信状況の組を記録するエントリが複数設けられている。アプリケーション識別子には、アプリケーション１１２を一意に識別する文字列が設定される。遊休ＣＰＵ利用可能イベント送信状況には、「送信済」および「未送信」の何れかが設定される。また、エントリの並びは、遊休ＣＰＵ利用可能イベントを送信する優先順位を示している。
【００３５】
入出力装置１０３は、利用者からのデータや指示を受け付けるキーボード、利用者に対して各種のデータを提示するディスプレイなどで構成される。
【００３６】
次に本実施の形態にかかるコンピュータ装置１００の動作を説明する。
【００３７】
コンピュータ装置１００の電源が投入され、システムが立ち上がると、ＯＳ１１１のＯＳカーネル１２１およびＣＰＵ監視手段１２２が動作を開始する。
【００３８】
ＣＰＵ監視手段１２２は、コンピュータ装置１００上でアプリケーション１１２が起動される毎に、起動したアプリケーション１１２が遊休ＣＰＵ利用処理手段１３２を持つタイプのアプリケーションであれば、そのアプリケーション識別子を設定したエントリを遊休ＣＰＵ利用制御テーブル１１３の末尾に追加する。このとき当該エントリの遊休ＣＰＵ利用可能イベント送信状況は「未送信」としておく。
【００３９】
ＣＰＵ監視手段１２２が、遊休ＣＰＵ利用処理手段１３２を持つタイプのアプリケーションであるか否かを判断する方法としては、そのタイプのアプリケーション１１２には起動時にその旨をＯＳ１１１のＣＰＵ監視手段１２２に通知する機能を持たせ、ＣＰＵ監視手段１２２は、通知の有無によってタイプを判断する方法がある。他の方法として、遊休ＣＰＵ利用処理手段１３２を持つタイプか否かをアプリケーション属性の一つとして設定し、ＣＰＵ監視手段１２２がアプリケーション属性を参照して判断する方法がある。
【００４０】
起動されたアプリケーション１１２は、何れか１つ或いは複数のＣＰＵ１０１上で実行される。入出力装置１０３などからアプリケーション１１２に対して何らかのＩ／Ｏイベントが発生すると、ＯＳカーネル１２１により、そのＩ／Ｏイベントが該当するアプリケーション１１２へ送信され、イベントディスパッチ手段１３３により該当するＩ／Ｏイベント処理手段１３１が実行される。これらの動作は従来と同じである。
【００４１】
またＣＰＵ監視手段１２２は、コンピュータ装置１００の動作中、図３に示される処理を常に実行している。まず、定期的にＣＰＵ負荷状況を調査する（ステップＳ１０１）。ここで調査するＣＰＵ負荷状況は、複数存在する全てのＣＰＵ１０１の負荷を考慮したシステム全体のＣＰＵ使用率である。例えば、ＣＰＵ１０１が全部で４個あり、その内の３個がＣＰＵ使用率０％、残りの１個がＣＰＵ使用率１００％とすると、システム全体のＣＰＵ使用率は２５％になる。
【００４２】
次に、ＣＰＵ負荷が第１の設定負荷値よりも低いかどうかを判定する（ステップＳ１０２）。ＣＰＵ負荷が第１の設定負荷値よりも低い場合、ステップＳ１０３の処理に進み、そうでない場合はステップＳ１１０の処理に進む。
【００４３】
ステップＳ１０３では遊休ＣＰＵ利用制御テーブル１１３を参照し、遊休ＣＰＵ利用可能イベント送信状況が「送信済」になっているアプリケーション１１２が存在するかどうかを調査する（ステップＳ１０４）。遊休ＣＰＵ利用可能イベントを送信したアプリケーション１１２が存在しない場合（ステップＳ１０４でＮＯ）、ステップＳ１０７の処理に進む。他方、遊休ＣＰＵ利用可能イベントを送信したアプリケーション１１２が既に存在していた場合（ステップＳ１０４でＹＥＳ）、このアプリケーション１１２に対して遊休ＣＰＵ利用キャンセルイベントを送信し（ステップＳ１０５）、遊休ＣＰＵ利用制御テーブル１１３中の当該アプリケーション１１２の遊休ＣＰＵ利用可能イベント送信状況を「未送信」に変更すると共に順番を下げるために当該エントリを最後尾に移動させる（ステップＳ１０６）。そして、ステップＳ１０７の処理に進む。ステップＳ１０５で遊休ＣＰＵ利用キャンセルイベントを送信する理由は、遊休ＣＰＵ利用可能イベントを既に或るアプリケーションに送信したのにもかかわらず、ＣＰＵ負荷が未だ第１の設定負荷値より低いということは、そのアプリケーションによる遊休ＣＰＵ利用処理でＣＰＵが殆ど利用されていないと見做されるため、その利用をキャンセルして別のアプリケーションに利用させるためである。
【００４４】
ステップＳ１０７では、遊休ＣＰＵ利用制御テーブル１１３の先頭エントリに設定されているアプリケーション識別子を持つアプリケーション１１２を選択する（ステップＳ１０７）。次に、この選択したアプリケーション１１２に対して遊休ＣＰＵ利用可能イベントを送信し（ステップＳ１０８）、遊休ＣＰＵ利用制御テーブル１１３中の当該アプリケーション１１２の遊休ＣＰＵ利用可能イベント送信状況を「送信済」に変更する（ステップＳ１０９）。そして、一定時間のタイマ待ちを行い（ステップＳ１１５）、その後にステップＳ１０１に戻ってＣＰＵ負荷状況の調査を再度実施する。
【００４５】
ステップＳ１０８で遊休ＣＰＵ利用可能イベントの送信先となったアプリケーション１１２は、図４に示されるように、送信された遊休ＣＰＵ利用可能イベントを受信し（ステップＳ２０１）、イベントディスパッチ手段１３３により遊休ＣＰＵ利用処理手段１３２を実行する（ステップＳ２０２）。これにより、遊休ＣＰＵ利用処理の処理量に応じてＣＰＵ負荷が増大していく。
【００４６】
一方、ステップＳ１０２において、ＣＰＵ負荷が第１の設定負荷値よりも低くないと判定した場合、ＣＰＵ負荷が第１の設定負荷値よりも高く設定される第２の設定負荷値より高くなっているかどうかを調査する（ステップＳ１１０）。若し、ＣＰＵ負荷が第２の設定負荷値よりも高くなっていなければ、一定時間のタイマ待ちを行い（ステップＳ１１５）、その後にステップＳ１０１に戻ってＣＰＵ負荷状況の調査を再度実施する。
【００４７】
ＣＰＵ負荷が第２の設定負荷値よりも高い場合、ＣＰＵ監視手段１２２は、遊休ＣＰＵ利用制御テーブル１１３を参照し（ステップＳ１１１）、遊休ＣＰＵ利用可能イベント送信状況が「送信済」になっているアプリケーション１１２が存在するかどうかを調べる（ステップＳ１１２）。若し、存在すれば、そのアプリケーション１１２に対して遊休ＣＰＵ利用キャンセルイベントを送信し（ステップＳ１１３）、遊休ＣＰＵ利用制御テーブル１１３中の当該アプリケーション１１２の遊休ＣＰＵ利用可能イベント送信状況を「未送信」に変更すると共に順番を下げるために当該エントリを最後尾に移動させる（ステップＳ１１４）。そして、一定時間のタイマ待ちを行い（ステップＳ１１５）、その後にステップＳ１０１に戻ってＣＰＵ負荷状況の調査を再度実施する。
【００４８】
ステップＳ１１３で遊休ＣＰＵ利用キャンセルイベントの送信先となったアプリケーション１１２は、図５に示されるように、送信された遊休ＣＰＵ利用キャンセルイベントを受信し（ステップＳ２１１）、イベントディスパッチ手段１３３により遊休ＣＰＵ利用処理手段１３２の実行を停止する（ステップＳ２１２）。これにより、ＣＰＵ負荷が減少していく。
【００４９】
図６にＣＰＵ負荷の時間的な変化例を示す。図６（ａ）は、遊休ＣＰＵ利用処理手段１３２を有するタイプのアプリケーション１１２が１つも存在しない場合のＣＰＵ負荷の時間的な変化例、つまり従来のコンピュータ装置と同様の状況を示す。ユーザ操作が行われなくなってＣＰＵ負荷が第１の設定負荷値より小さくなっても、遊休ＣＰＵ利用処理が実行されない。このため、ＣＰＵ負荷は低いまま遷移する。その後、ＣＰＵ負荷が上昇しているのは、ユーザ操作が再開され、例えばＩ／Ｏイベントに応じた処理がアプリケーションで実行されたことによる。
【００５０】
図６（ｂ）は、遊休ＣＰＵ利用処理手段１３２を有するタイプのアプリケーション１１２が存在する場合のＣＰＵ負荷の時間的な変化例を示す。ユーザ操作が行われなくなってＣＰＵ負荷が第１の設定負荷値より小さくなった時点で、遊休ＣＰＵ利用処理手段１３２を有するタイプのアプリケーション１１２による遊休ＣＰＵ利用処理の実行が開始される。このため、ＣＰＵ負荷が上昇している。そして、図６（ｂ）の例では、第２の設定負荷値より小さなＣＰＵ負荷で安定して遷移している。その後、図６（ａ）の場合と同様に例えばＩ／Ｏイベントに応じた処理がアプリケーションで実行されると、その分の負荷が重畳されることによりＣＰＵ負荷が第２の設定負荷値を超えるため、遊休ＣＰＵ利用キャンセルイベントが発行されて、遊休ＣＰＵ利用処理が停止される。図６（ｂ）の場合、遊休ＣＰＵ利用処理は、時刻ｔ１から時刻ｔ２までの間で実行されている。
【００５１】
ところで、遊休ＣＰＵ利用処理中のＣＰＵ負荷が図６（ｂ）に示したように第２の設定負荷値より低い値で収まれば良いが、第２の設定負荷値を超えてしまうと、図６（ｃ）に示すように、第２の設定負荷値を超えた時点で遊休ＣＰＵ利用キャンセルイベントにより遊休ＣＰＵ利用処理が停止される。そして、その結果、ＣＰＵ負荷が下り、第１の設定負荷値より低くなると、再び遊休ＣＰＵ利用可能イベントが発行されて遊休ＣＰＵ利用処理が実行され、それに伴ってＣＰＵ負荷が上昇し、再び第２の設定負荷値を超えるために遊休ＣＰＵ利用処理が停止されるといった状況が繰り返される。このような状況に陥っても、多少なりとも遊休ＣＰＵ利用処理は進行するが、効率は悪い。そこで、遊休ＣＰＵ利用処理によるＣＰＵ負荷の増大量を抑える仕組みを導入するのが望ましい。
【００５２】
遊休ＣＰＵ利用処理によるＣＰＵ負荷の増大量を抑える方法の一例は、遊休ＣＰＵ利用処理で利用可能なＣＰＵの個数をＣＰＵ利用可能イベントでアプリケーションに通知し、アプリケーションがその個数に合わせたスレッド数で遊休ＣＰＵ利用処理を実行することである。例えば、ＣＰＵ１０１が合計ｎ個ある場合、遊休ＣＰＵ利用処理で利用可能なＣＰＵの個数をｍ（ｍ＜ｎ）個とすると、ＣＰＵをｍ個使えることを遊休ＣＰＵ利用可能イベントによってＣＰＵ監視手段１２２からアプリケーション１１２へ通知する。アプリケーション１１２は、遊休ＣＰＵ利用処理手段１３２の遊休ＣＰＵ利用処理を、利用できるＣＰＵ数ｍと同じ数のスレッドに分割して実行する。
【００５３】
次に本実施の形態の効果を説明する。
【００５４】
本実施の形態によれば、ＣＰＵの有効利用と消費電力の抑制とを両立させることができる。その理由は、コンピュータ装置のＣＰＵ負荷が設定負荷値よりも低い時に、アプリケーションに遊休ＣＰＵ利用可能イベントを通知して遊休ＣＰＵ利用処理を促す一方、設定負荷値を超えるとアプリケーションに遊休ＣＰＵ利用キャンセルイベントを通知して遊休ＣＰＵ利用処理を停止させるようにしているためである。
【００５５】
次に、遊休ＣＰＵ利用処理の具体例について説明する。
【００５６】
１）具体例１
アプリケーション１１２は文書ビューワであり、遊休ＣＰＵ利用処理手段１３２は、レンダリングの先行処理を行う手段とする。具体的には、ユーザは高い確率で現在表示しているページの前もしくは次のページの表示を要求するため、このレンダリングを遊休ＣＰＵ利用処理手段１３２で先行して行う。
【００５７】
図７（ａ）にＣＰＵが４個のコンピュータ装置におけるアプリケーション１１２の実行状況を示す。第２の設定負荷値は約２５％に設定されており、コンピュータ装置のＣＰＵが特に使用されていない状況の時、４個のＣＰＵの２５％に相当する１個が使えるという遊休ＣＰＵ利用可能イベントをＣＰＵ監視手段１２２からアプリケーション１１２へ送る。アプリケーション１１２は、送られてきたイベントから、ＣＰＵを１個使う範囲で、予測される次の操作結果を実行して出しておき、ユーザの実際の操作が予測と一致した場合にそれを利用する。このため予測成功時には応答にかかる実処理時間を短縮することができる。また、その時のＣＰＵ使用率を最大で約２５％とすることができる。従って、ＣＰＵの有効利用と消費電力の抑制とを両立させることが可能となる。
【００５８】
これに対して、図７（ｂ）に示されるように、ユーザが操作を開始した後に全ての処理を行う場合には、４台のＣＰＵをフルに使っても或る程度の処理時間が必要となり、レスポンスが遅くなる。
【００５９】
２）具体例２
他の例としては、他からのリクエストに応じて処理を実行するタイプの機構（例えばグリッドコンピューティング）に参加しているコンピュータ装置において、他からのリクエストに応じた処理を、コンピュータ装置のＣＰＵ負荷が設定負荷値よりも低い時に遊休ＣＰＵ利用処理としてアプリケーション１１２で実行する例が考えられる。これにより、ＣＰＵの有効利用と消費電力の抑制とを両立させることが可能となる。
【００６０】
『第２の実施の形態』
図８を参照すると、本発明の第２の実施の形態にかかるコンピュータ装置２００は、図１に示した第１の実施の形態にかかるコンピュータ装置１００と比較して、アプリケーション１１２の代わりにアプリケーション２１２を有し、ＣＰＵ監視手段１２２の代わりにＣＰＵ監視手段２２２を有し、さらにＣＰＵ装置状態１１６を有する点で相違する。
【００６１】
ＣＰＵ監視手段２２２は、ＣＰＵ監視手段１２２と同じ機能を有すると共に、さらにＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーション２１２に対してＣＰＵ数変更イベントを送信する機能を有する。ＣＰＵ数変更イベントでは、活性化状態にある最新のＣＰＵ数が通知される。
【００６２】
アプリケーション２１２は、アプリケーション１１２と同様なＩ／Ｏイベント処理手段１３１、遊休ＣＰＵ利用処理手段１３２およびイベントディスパッチ手段１３３に加えて、使用ＣＰＵ数変更処理手段１３４を備えている。
【００６３】
使用ＣＰＵ数変更処理手段１３４は、ＣＰＵ数変更イベントにより通知されたＣＰＵ数に合わせて、アプリケーション２１２の処理（例えばＩ／Ｏイベント処理手段１３１で実行する処理）の分散処理数を変更する手段である。
【００６４】
ＣＰＵ装置状態１１６は、コンピュータ装置２００に存在する全てのＣＰＵ１０１の状態（活性化、非活性化など）を記録する記憶部である。
【００６５】
次に本実施の形態にかかるコンピュータ装置２００の動作を説明する。コンピュータ装置２００では、第１の実施の形態で説明したコンピュータ装置１００と同じ動作と、本実施の形態特有の動作とが行われる。コンピュータ装置１００と同じ動作については、説明が重複するので省略する。以下、本実施の形態特有の動作について説明する。
【００６６】
ＣＰＵ監視手段２２２は、コンピュータ装置２００の動作中、図９に示される処理を常に実行している。まず、定期的にＣＰＵ装置状態を調査する（ステップＳ３０１）。ここで調査するＣＰＵ装置状態とは、コンピュータ装置２００に存在する各ＣＰＵ１０１が活性化あるいは非活性化しているといった状態である。次に、ＣＰＵ装置状態１１６から過去のＣＰＵ装置状態を取得し（ステップＳ３０２）、前記調査したＣＰＵ装置状態と比較することにより、活性化しているＣＰＵ数の変化を検出する（ステップＳ３０３）。若し、変化がなければ、ステップＳ３０６へ進む。変化があった場合、各アプリケーション２１２に対して、活性化しているＣＰＵ数を通知するＣＰＵ数変更イベントを送信する（ステップＳ３０４）。次に、前記調査したＣＰＵ装置状態でＣＰＵ装置状態１１６を更新し（ステップＳ３０５）、ステップＳ３０６へ進む。
【００６７】
ステップＳ３０６では、一定時間のタイマ待ち及びハードウェアが変更されたことを通知するイベント待ちを行い、一定時間が経過するか、或いはその前にハードウェア変更イベントがあった場合に、ステップＳ３０１に戻ってＣＰＵ装置状態の調査を再度実施する。
【００６８】
各アプリケーション２１２は、図１０に示されるように、ステップＳ３０４でＣＰＵ監視手段２２２から送信されたＣＰＵ数変更イベントを受信し（ステップＳ４０１）、イベントディスパッチ手段１３３により使用ＣＰＵ数変更処理手段１３４を実行する（ステップＳ４０２）。これにより、変更後のＣＰＵ数に合わせて、分散処理数が変更され、効率良くＣＰＵを利用することが可能になる。
【００６９】
図１１（ａ）に、２個のＣＰＵが活性状態にあるときに新たに２個のＣＰＵが追加されたときのＣＰＵ利用状況を示す。２個のＣＰＵの追加が発生した時、本実施の形態ではそれがＯＳ１１１のＣＰＵ監視手段２２２で検出されて、各アプリケーション２１２にその情報を伝達するシステムイベント（ＣＰＵ数変更イベント）が送られる。このイベントを受取ったアプリケーション２１２は、その情報に基づき追加後のＣＰＵ数に合わせて分散処理の分割数を変更することにより、追加分のＣＰＵを速やかに有効利用する。
【００７０】
これに対して、ＣＰＵの追加に対して何らの処理を行わない場合、図１１（ｂ）に示すように、ＣＰＵ数２個で処理を分散したままになり、追加された２個のＣＰＵを利用することができない。また、各アプリケーションが定期的にＣＰＵ数をチェックし、それに合わせて分散処理数を変更する場合、図１１（ｃ）に示されるようにＣＰＵ数を定期的にチェックする処理が各アプリケーション毎に走行するため、ロスが大きくなる。さらに、予め多数に処理を分散しておき、ＯＳのＣＰＵスケジューリング機能によりＣＰＵ数の増減に対応させる方式では、図１１（ｄ）に示すように、分散数が実際に使用できるＣＰＵ数を超えている時には一つのＣＰＵに複数の分散処理を割り当てるための時分割によるＣＰＵのコンテキストスイッチが発生し、この時にロスが生じてしまう。
【００７１】
次に本実施の形態の効果を説明する。
【００７２】
本実施の形態によれば、第１の実施の形態と同様の効果が得られると共に、ＣＰＵの追加、削除によるＣＰＵ数の変更をアプリケーションが速やかに認識できる。その理由は、ＣＰＵ監視手段がＣＰＵの増減を監視し、ＣＰＵの増減時にアプリケーションに対してＣＰＵ数変更イベントを送信するためである。これにより、動的に変化するＣＰＵ数に応じて分散処理数（スレッド数）を動的に変化させるようなアプリケーションの開発を容易に行うことが可能となる。
【図面の簡単な説明】
【００７３】
【図１】本発明の第１の実施の形態のブロック図である。
【図２】本発明の第１の実施の形態における遊休ＣＰＵ利用制御テーブルの内容例を示す図である。
【図３】本発明の第１の実施の形態におけるＣＰＵ監視手段の処理例を示すフローチャートである。
【図４】本発明の第１の実施の形態におけるアプリケーションの遊休ＣＰＵ利用可能イベントにかかる処理例を示すフローチャートである。
【図５】本発明の第１の実施の形態におけるアプリケーションの遊休ＣＰＵ利用キャンセルイベントにかかる処理例を示すフローチャートである。
【図６】本発明の第１の実施の形態におけるＣＰＵ負荷の時間的な変化例を示す図である。
【図７】本発明の第１の実施の形態における具体例を示す図である。
【図８】本発明の第２の実施の形態のブロック図である。
【図９】本発明の第２の実施の形態におけるＣＰＵ監視手段の処理例を示すフローチャートである。
【図１０】本発明の第２の実施の形態におけるアプリケーションのＣＰＵ数変更イベントにかかる処理例を示すフローチャートである。
【図１１】本発明の第２の実施の形態における効果の説明図である。
【符号の説明】
【００７４】
１００、２００…コンピュータ装置
１０１…ＣＰＵ
１０２…メモリ
１０３…入出力装置
１１１…ＯＳ
１１２、２１２…アプリケーション
１１３…遊休ＣＰＵ利用制御テーブル
１１４…第１の設定負荷値
１１５…第２の設定負荷値
１１６…ＣＰＵ装置状態
１２１…ＯＳカーネル
１２２、２２２…ＣＰＵ監視手段
１３１…Ｉ／Ｏイベント処理手段
１３２…遊休ＣＰＵ利用処理手段
１３３…イベントディスパッチ手段
１３４…使用ＣＰＵ数変更処理手段
【図１】
2007334782.tif 000003
【図２】
2007334782.tif 000004
【図３】
2007334782.tif 000005
【図４】
2007334782.tif 000006
【図５】
2007334782.tif 000007
【図６】
2007334782.tif 000008
【図７】
2007334782.tif 000009
【図８】
2007334782.tif 000010
【図９】
2007334782.tif 000011
【図１０】
2007334782.tif 000012
【図１１】
2007334782.tif 000013