(57)【特許請求の範囲】
【請求項１】
コンピュータシステムの有するプロセッサにより実行される複数のタスクであって、システムクロックを停止する深いスリープ状態に対応付けられた消費電力の異なる複数の省電力モードと、上記深いスリープ状態に対応付けられた複数の省電力モードのいずれの消費電力よりも消費電力が大きい省電力モードであってシステムクロックを停止しない浅いスリープ状態の省電力モードとのうち、上記深いスリープ状態の省電力モードへの上記プロセッサの移行禁止を要求する禁止要求情報を出力し、禁止要求情報を出力した後、さらに、上記禁止要求情報と上記深いスリープ状態の省電力モードへの上記プロセッサの移行許可を要求する許可要求情報とのいずれか一方を出力する複数のタスクの各タスクから、各タスクが出力した上記禁止要求情報と上記許可要求情報とのいずれかの情報を入力し、上記プロセッサが実行するタスクがない場合、上記深いスリープ状態に対応付けられた複数の省電力モードと上記浅いスリープ状態の省電力モードとのうちいずれかひとつの省電力モードに上記プロセッサを移行するプロセッサ省電力制御装置であって、
上記各タスクに対応して、初期値が０であって、上記禁止要求情報が出力された回数を出力情報として保持する省電力モード禁止カウンタテーブルと、
上記各タスクに対応して、上記深いスリープ状態の省電力モードに対応する複数の省電力モードのうち当該タスクが上記プロセッサに許可する省電力モードを保持情報として保持するモード保持部と、
上記各タスクから上記禁止要求情報を入力した場合、上記省電力モード禁止カウンタテーブルに保持された当該タスクに対応する出力情報に１を加算して当該タスクに対応する出力情報を更新し、上記各タスクから許可要求情報を入力した場合、上記省電力モード禁止カウンタテーブルに保持された当該タスクに対応する出力情報から１を減算して当該タスクに対応する出力情報を更新する省電力管理部と、
上記プロセッサが実行するタスクがない場合、上記省電力モード禁止カウンタテーブルに保持されているすべてのタスクの出力情報が０であるか否かを判定し、すべてのタスクの出力情報が０であることを判定した場合、上記モード保持部に各タスクに対応して保持情報として保持されている省電力モードの中からから消費電力の大きさが最も大きい省電力モードを選択し、選択した省電力モードに上記プロセッサを移行させ、上記省電力モード禁止カウンタテーブルに保持されているいずれかのタスクの出力情報が０でないことを判定した場合、上記浅いスリープ状態の省電力モードに上記プロセッサを移行させる省電力設定部と
を備えたことを特徴とするプロセッサ省電力制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、省電力モードを備えたプロセッサを持つコンピュータシステムにおいて、ＯＳ上で動作するタスクから所定の省電力モードへの移行を禁止する禁止要求及び移行を許可する許可要求を受けて、所定の省電力モードへの移行の禁止と許可とを入れ子呼び出しすることを可能にするプロセッサ省電力制御装置、プロセッサ省電力制御方法、プロセッサ省電力制御方法のプログラムを記録したコンピュータ読み取り可能な記録媒体、プロセッサ省電力制御方法を実行するプログラムとに関する。
また、ＯＳに複数の省電力モードを制御する手段を設け、複数の省電力モードを持つプロセッサへの対応も可能にするプロセッサ省電力制御装置、プロセッサ省電力制御方法、プロセッサ省電力制御方法のプログラムを記録したコンピュータ読み取り可能な記録媒体、プロセッサ省電力制御方法を実行するプログラムとに関する。
【０００２】
【従来の技術】
特開平１０−３４１１８７によると、従来、リアルタイムＯＳの中で起動タスクがない場合は、プロセッサ（ＣＰＵ）の消費電力を少なくするために、ＣＰＵのシステムクロック（ＣＬＯＣＫ）を停止し、ＣＰＵを待機（ＨＡＬＴ）状態にする。ただし、ＣＰＵ  ＣＬＯＣＫを停止すると、その復帰処理に時間がかかり、外部割込みに即座に応答できないため、図２１に示すように、タスク毎にＣＰＵ  ＣＬＯＣＫのＯＮ／ＯＦＦを示すビット列からなる変数Ａを設け、変数ＡのいずれかのビットがＯＮの時、ＣＰＵ  ＣＬＯＣＫをＯＮとするＨＡＬＴ状態（浅いスリープ状態、本明細書ではＳＬＥＥＰもしくはＳＬＰと表記する）に移行するようにしていた。また、変数ＡのすべてのビットがＯＦＦの時、ＣＰＵ  ＣＬＯＣＫをＯＦＦとするＨＡＬＴ状態（深いスリープ状態、本明細書ではＤＥＥＰ  ＳＬＥＥＰもしくはＤＳＬＰと表記する）に移行するようにしていた。
【０００３】
しかし、上記特開平１０−３４１１８７の発明では、各タスクは変数Ａ内のビットのＯＮ／ＯＦＦしか制御できないため、ＯＮ／ＯＦＦを入れ子にすることができない。この入れ子呼び出しについて図２２を用いて説明する。
通常、図２２（Ａ）のようにプロセッサに対してＤＳＬＰ禁止要求を行なうための関数とＤＬＳＰ許可要求を行なうための関数とは、対にして呼び出され、その区間がＤＳＬＰ禁止区間となる。入れ子呼び出しとは、図２２（Ａ）のＤＳＬＰ禁止区間内でさらにＤＳＬＰ禁止要求とＤＳＬＰ許可要求が呼び出されることを指す（図２２（Ｂ））。それにより、各タスクのＳ／Ｗ構造を簡略化することができる。例えば、図２２（Ｂ）は、ＤＳＬＰ禁止要求を行なうための関数とＤＬＳＰ許可要求を行なうための関数とが入れ子呼び出しをサポートしていた場合の処理である。ＤＳＬＰ禁止要求を行なうための関数を２回呼び出した場合には、ＤＬＳＰ許可要求を行なうための関数も２回呼び出すことによってＤＳＬＰ許可状態に移行するようにしている。そのため、タスクプログラム作成者は、ＤＳＬＰ禁止要求を呼び出す場合に、すでにＤＳＬＰ禁止状態かどうかを意識することなく、ＤＳＬＰ禁止状態にしたい区間をＤＳＬＰ禁止要求を行なうための関数とＤＳＬＰ許可要求を行なうための関数で囲むだけでよくなる。
一方、入れ子呼び出しをサポートしていない場合には、図２３のように１回目のＤＬＳＰ許可要求を行なうための関数を呼び出した直後にＤＳＬＰ許可状態に移行している。そのため、２回目のＤＳＬＰ禁止要求を行なうための関数を呼ぶ出す前に、既にＤＳＬＰ禁止状態かどうかを判断して、ＤＳＬＰ禁止状態であれば、２回目のＤＳＬＰ禁止要求を行なうための関数と１回目のＤＬＳＰ許可要求を行なうための関数を呼び出さないなどの工夫が必要になる。すべてのタスクにこのような工夫を施すことは、非常に大変なことである。
次に、図２４にＣＰＵ  ＣＬＯＣＫのＯＮ／ＯＦＦを入れ子にする例を示す。図２４は、図２２（Ｂ）と同じ効果を示している。ただし、上記特開平１０３４１１８７の発明は、図２４のような動作を行なうことができない。それを実現しようとした場合には、入れ子に呼び出された場合でも問題がないようにする処理をタスク側に組込まなければならず、タスクの処理が複雑になる。
さらに、ＣＰＵ  ＣＬＯＣＫのＯＮ／ＯＦＦ状態の違いによるＨＡＬＴ状態だけでなく、３つ以上の省電力モードをプロセッサが持つ場合には、それに対応することができない（上記特開平１０３４１１８７の発明では、ＣＰＵ  ＣＬＯＣＫをＯＮにするＨＡＬＴ状態（ＳＬＰ状態）とＣＰＵ  ＣＬＯＣＫをＯＦＦとするＨＡＬＴ状態（ＤＳＬＰ状態）の２つを区別していた。）。
【０００４】
【発明が解決しようとする課題】
以上のように、従来は、各タスクは変数Ａ内のビットのＯＮ／ＯＦＦしか制御できないため、入れ子にするためには入れ子に呼び出された場合でも問題がないようにする処理をタスク側に組込まなければならず、タスクの処理が複雑になるという問題点があった。
さらに、３つ以上の省電力モードをプロセッサが持つ場合には、それに対応することができないという問題点があった。
【０００５】
この発明は上記のような問題点を解決するためになされたもので、ＤＳＬＰ状態への移行禁止及び許可要求の入れ子呼び出しが可能となり、タスクの処理を簡略化することを目的とする。
また、何度かＤＳＬＰ状態への移行禁止要求が行われている状態であっても、それらの要求を一度に解除することを可能にして、従来の技術で示したようなビット操作による管理と同様に振舞うことを目的とする。
さらに、プロセッサをＤＳＬＰ状態に移行させてもよい状態かどうかを即座に判断して、プロセッサの消費電力を抑えることを目的とする。
また、複数の省電力モードを備えたプロセッサを持つシステムにおいても、各タスクが移行を許可している省電力モードにプロセッサを移行させることを目的とする。
また、プロセッサをどの省電力モードに移行させるかどうかを即座に判断して、プロセッサの消費電力を抑えることを目的とする。
また、ＤＳＬＰ状態への移行を禁止したり許可したりするプロセッサの省電力制御方法と、省電力モードを設定するプロセッサの省電力制御方法を混在させる。これにより、タスクはプロセッサに依存することなく、タスク自身が制御しやすい方法でプロセッサの省電力制御を行い、タスクの処理の簡略化や、タスクの再利用などを簡単に行なうことを目的とする。
【０００６】
【課題を解決するための手段】
この発明に係るコンピュータシステムの有するプロセッサを、所定の省電力モードに移行するプロセッサ省電力制御装置は、以下の要素を備えたことを特徴とする。
（ａ）コンピュータシステム上で実行される１つ以上のタスク毎に省電力モードへの移行を許可する許可要求情報と、上記プロセッサの所定の省電力モードへの移行を禁止する禁止要求情報とのいずれか一方の要求情報を受け付ける省電力管理部、
（ｂ）上記省電力管理部によって受け付けられた要求情報が禁止要求情報である場合に、上記禁止要求情報が出力されていることを示す出力情報を保持する省電力モード禁止カウンタテーブル、
（ｃ）上記プロセッサがアイドル状態になった場合に、上記省電力モード禁止カウンタテーブルに保持されている出力情報を用いて上記プロセッサの移行する省電力モードを判断し、移行させる省電力設定部。
【０００７】
また、この発明に係るプロセッサ省電力制御装置は、上記省電力管理部が、上記タスクから省電力モードへの移行を禁止することを強制的に解除する強制許可要求情報を受けると、上記省電力モード禁止カウンタテーブルに保持される出力情報を初期化することを特徴とする。
【０００８】
また、この発明に係るプロセッサ省電力制御装置は、上記プロセッサ省電力制御装置が、上記禁止要求情報の出力されている合計数を保持する合計カウンタを備え、上記省電力設定部は、上記プロセッサがアイドル状態になった場合に、上記合計数を用いて上記プロセッサを所定の省電力モードに移行するかしないかを判断し、その判断結果に基づき上記プロセッサを上記所定の省電力モードに移行させることを特徴とする。
【０００９】
また、この発明に係るプロセッサ省電力制御装置は、上記省電力モードは、省電力レベルに応じた複数種類の省電力モードを有し、上記プロセッサ省電力制御装置は、上記タスク毎に上記プロセッサの移行可能な省電力モードの種類を示す保持情報を保持するモード保持部を備え、上記省電力管理部は、上記コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから移行可能な省電力モードの種類を設定するための省電力モード設定要求情報を受け付けて、受け付けた省電力設定要求情報を上記保持情報として上記モード保持部に保持し、上記省電力設定部は、上記プロセッサを省電力モードに移行する場合に、上記モード保持部に保持されている保持情報から各タスク間で最も動作再開時間の短い省電力レベルの省電力モード（最上位の省電力レベルの省電力モード）を選択して、上記プロセッサを、選択した最上位の省電力レベルの省電力モードに移行することを特徴とする。
【００１０】
この発明に係るコンピュータシステムの有するプロセッサを省電力モードに移行するプロセッサ省電力制御装置は、上記プロセッサは、省電力レベルに応じた複数種類の省電力モードに移行可能であり、上記プロセッサ省電力制御装置は、上記コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、移行可能な省電力モードの種類を設定するための省電力モード設定要求情報を受け付ける省電力管理部と、上記省電力管理部によって受け付けられたタスク毎の省電力モード設定要求情報を保持するモード保持部と、上記プロセッサがアイドル状態になった場合に、上記モード保持部に保持されている省電力モード設定要求情報から各タスク間で最も動作再開時間の短い省電力レベルの省電力モード（最上位の省電力レベルの省電力モード）を取得して、上記プロセッサを、取得した最上位のレベルの省電力モードに移行する省電力設定部とを備えたことを特徴とする。
【００１１】
また、この発明に係るプロセッサ省電力制御装置は、上記プロセッサ省電力制御装置が、さらに、所定のレベルを有する省電力モードを示す情報を記憶するモードサブ保持部を備え、上記省電力管理部は、上記モード保持部に保持されている省電力モード設定要求情報から最上位の省電力レベルを有する省電力モードを選択して、選択した省電力モードを上記モードサブ保持部に保持し、上記省電力設定部は、上記プロセッサを上記モードサブ保持部に保持されている省電力モードに移行することを特徴とする。
【００１２】
また、この発明に係るプロセッサ省電力制御装置は、上記モード保持部が、保持している省電力モード設定要求情報を、上位の省電力レベルを有する省電力モードから下位の省電力レベルを有する省電力モードの順に省電力モードを取得できるように保持している省電力モードキューであることを特徴とする。
【００１３】
この発明に係るコンピュータシステムの有するプロセッサを、所定の省電力モードに移行するプログラムを記録したコンピュータ読み取り可能な記録媒体は、コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、省電力モードへの移行を許可する許可要求情報と、上記プロセッサの所定の省電力モードへの移行を禁止する禁止要求情報とのいずれか一方の要求情報を受け付ける省電力管理ステップと、上記省電力管理ステップによって受け付けられた要求情報が禁止要求情報である場合に、上記禁止要求情報が出力されていることを示す出力情報を保持する省電力モード禁止情報保持ステップと、上記プロセッサがアイドル状態になった場合に、上記省電力モード禁止情報保持ステップによって保持されている出力情報を用いて上記プロセッサの移行する省電力モードを判断し、移行させる省電力設定ステップとを有することを特徴とする。
【００１４】
この発明に係るコンピュータシステムの有するプロセッサであって、省電力モードの関係を表わすレベルを有する複数種類の省電力モードに移行可能なプロセッサを、所定の省電力モードに移行するプログラムを記録したコンピュータ読み取り可能な記録媒体は、上記コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、省電力レベルに対応した複数の省電力モードの中から移行可能な省電力モードの種類を設定するための省電力モード設定要求情報を受け付ける省電力管理ステップと、上記省電力管理ステップによって受け付けられたタスク毎の省電力モード設定要求情報を保持するモード保持ステップと、上記プロセッサがアイドル状態になった場合に、上記モード保持ステップによって保持された省電力モード設定要求情報から各タスク間で最も動作再開時間の短い省電力レベルの省電力モード（最上位の省電力レベルの省電力モード）を選択して、上記プロセッサを、選択した最上位の省電力レベルの省電力モードに移行する省電力設定ステップとを有することを特徴とする。
【００１５】
この発明に係るコンピュータシステムの有するプロセッサを、所定の省電力モードに移行するプロセッサ省電力制御方法は、コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、省電力モードへの移行を許可する許可要求情報と、上記プロセッサの所定の省電力モードへの移行を禁止する禁止要求情報とのいずれか一方の要求情報を受け付ける省電力管理ステップと、上記省電力管理ステップによって受け付けられた要求情報が禁止要求情報である場合に、上記禁止要求情報が出力されていることを示す出力情報を保持する省電力モード禁止情報保持ステップと、上記プロセッサがアイドル状態になった場合に、上記省電力モード禁止情報保持ステップによって保持されている出力情報を用いて上記プロセッサの移行する省電力モードを判断し、移行させる省電力設定ステップとを有することを特徴とする。
【００１６】
この発明に係るコンピュータシステムの有するプロセッサを省電力モードに移行するプロセッサ省電力制御方法は、上記プロセッサは、複数種類の省電力モードに移行可能であり、上記複数種類の省電力モードはそれぞれ、各省電力モードの関係を表わすレベルを有し、上記プロセッサ省電力制御方法が、上記コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、省電力レベルに対応した複数の省電力モードの中から移行可能な省電力モードの種類を設定するための省電力モード設定要求情報を受け付ける省電力管理ステップと、上記省電力管理ステップによって受け付けられたタスク毎の省電力モード設定要求情報を保持するモード保持ステップと、上記プロセッサがアイドル状態になった場合に、上記モード保持ステップによって保持された省電力モード設定要求情報から各タスク間で最も動作再開時間の短い省電力レベルの省電力モード（最上位の省電力レベルの省電力モード）を選択して、上記プロセッサを、選択した最上位の省電力レベルの省電力モードに移行する省電力設定ステップとを有することを特徴とする。
【００１７】
この発明に係るコンピュータシステムの有するプロセッサを、所定の省電力モードに移行するコンピュータシステム上で動作するプログラムは、コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、省電力モードへの移行を許可する許可要求情報と、上記プロセッサの所定の省電力モードへの移行を禁止する禁止要求情報とのいずれか一方の要求情報を受け付ける省電力管理処理と、上記省電力管理処理によって受け付けられた要求情報が禁止要求情報である場合に、上記禁止要求情報が出力されていることを示す出力情報を保持する省電力モード禁止情報保持処理と、上記プロセッサがアイドル状態になった場合に、上記省電力モード禁止情報保持処理によって保持されている出力情報を用いて上記プロセッサの移行する省電力モードを判断し、移行させる省電力設定処理とをコンピュータに実行させることを特徴とする。
【００１８】
この発明に係るコンピュータシステムの有するプロセッサであって、省電力モードの関係を表わすレベルを有する複数種類の省電力モードに移行可能なプロセッサを、所定の省電力モードに移行するコンピュータシステム上で動作するプログラムは、上記コンピュータシステム上で実行される１つ以上のタスク毎に各タスクから、省電力レベルに対応した複数の省電力モードの中から移行可能な省電力モードの種類を設定するための省電力モード設定要求情報を受け付ける省電力管理処理と、上記省電力管理処理によって受け付けられたタスク毎の省電力モード設定要求情報を保持するモード保持処理と、上記プロセッサがアイドル状態になった場合に、上記モード保持処理によって保持された省電力モード設定要求情報から各タスク間で最も動作再開時間の短い省電力レベルの省電力モード（最上位の省電力レベルの省電力モード）を選択して、上記プロセッサを、選択した最上位の省電力レベルの省電力モードに移行する省電力設定処理とをコンピュータに実行させることを特徴とする。
【００１９】
【発明の実施の形態】
実施の形態１．
この実施の形態１では、プロセッサを、ＤＥＥＰ  ＳＬＥＥＰ状態（ＤＳＬＰ状態、例えば、ＣＰＵ  ＣＬＯＣＫをＯＦＦとする状態）の省電力モードに移行することを禁止及び許可することを制御する手段をプロセッサ省電力制御装置に備える。そして、ＯＳ上で動作するタスクから要求される、プロセッサをＤＳＬＰ状態へ移行することを禁止するＤＬＳＰ禁止要求および移行することを許可するＤＳＬＰ許可要求の入れ子呼び出しを可能にするプロセッサ省電力制御装置の一例を説明する。
【００２０】
図１はこの発明の実施の形態１であるプロセッサ省電力制御装置を示すものである。図において、１はプロセッサ、２はオペレーティングシステム（ＯＳ）、３はタスク、４は省電力管理手段（省電力管理部）、５はＤＳＬＰ禁止要求受付部、６はＤＳＬＰ許可要求受付部、７はＤＳＬＰ禁止カウンタテーブル、８は省電力設定手段（省電力設定部）である。
個々のタスクはタスクＩＤと呼ばれる識別子を持つ。タスクＩＤは、異なるタスク同士が同じタスクＩＤを持つことのないように決定される。例えば、タスクＩＤはタスク毎に一意な整数値で表される。
省電力管理手段４は、ＤＳＬＰ禁止要求受付部５と、ＤＳＬＰ許可要求受付部６とを持ち、これらの機能をＡｐｐｌｉｃａｔｉｏｎ  ＰｒｏｇｒａｍｍｉｎｇＩｎｔｅｒｆａｃｅ（ＡＰＩ）としてタスク３に提供する。ＡＰＩの例を図２に示す。
ＤＳＬＰ禁止カウンタテーブル７は、タスク（タスクＩＤ）毎にＤＳＬＰ禁止カウンタを持っている。ＤＳＬＰ禁止カウンタテーブル７の例を図３に示す。
【００２１】
この発明の実施の形態１におけるプロセッサ省電力制御装置の動作とプロセッサ省電力制御方法について一例を説明する。方法については図４の動作手順を参照する。
まず、ＯＳ起動時に、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタを０に初期化しておく（Ｓ１）。つまり、ＯＳ起動直後はすべてのタスクがＤＳＬＰ許可状態となる。
タスク３は、プロセッサがアイドル状態になったときにＤＳＬＰ状態に移行することを避けたい、つまりＤＳＬＰ状態への移行を禁止する場合には、省電力管理手段４が提供するＡＰＩ（図２ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４に禁止要求情報であるＤＳＬＰ禁止要求を出す。また、ＤＳＬＰ状態に移行することを許可する、つまりＤＳＬＰ状態への移行禁止を解除する場合には、省電力管理手段４が提供するＡＰＩ（図２ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４に許可要求情報であるＤＳＬＰ許可要求を出す。
省電力管理手段４では、ＤＳＬＰ禁止要求が通知されると（Ｓ２）、ＤＳＬＰ禁止要求受付部５が、ＡＰＩ（図２ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタに１を加算する（Ｓ３）。このようにＤＳＬＰ禁止カウンタは、ＤＳＬＰ禁止要求が出された回数を出力情報としてタスク毎に保持しておくものである。
また、省電力管理手段４では、ＤＳＬＰ許可要求が通知されると（Ｓ２）、ＤＳＬＰ許可要求受付部６が、ＡＰＩ（図２ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタから１を減算する（Ｓ３）。タスク毎のＤＳＬＰ禁止カウンタが０になると、そのタスクが発行したすべてのＤＳＬＰ禁止要求が解除されたことになる。上記Ｓ１、Ｓ２は、省電力管理ステップ及び、省電力管理処理に該当し、Ｓ３は省電力モード禁止情報保持ステップ及び、省電力モード禁止情報保持処理に該当する。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ４）。
省電力設定手段８では、ＤＳＬＰ禁止カウンタテーブル７を参照し、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタが０であれば、つまり、すべてのタスクがＤＳＬＰ許可状態であれば（Ｓ５，Ｓ６，ＹＥＳ）、Ｈ／Ｗ操作によりプロセッサをＤＳＬＰ状態に移行させる（Ｓ７）。もし、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタが０でなければ（Ｓ５，Ｓ６，ＮＯ）、Ｈ／Ｗ操作によりプロセッサをＳＬＰ状態に移行させる（Ｓ８）。上記Ｓ４からＳ８は、省電力設定ステップ及び、省電力設定処理に該当する。
【００２２】
以上のように、タスク毎にＤＳＬＰ禁止カウンタを持たせることで、ＤＳＬＰ禁止要求を発行した数だけ、ＤＳＬＰ許可要求を出さない限り、省電力設定手段８がプロセッサをＤＳＬＰ状態に移行させることがなくなる。したがって、ＤＳＬＰ状態への移行禁止及び許可要求の入れ子呼び出しが可能となり、タスクの処理を簡略化することができる。
【００２３】
なお、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタをタスク毎に持つ必要がない場合には、つまり、ＤＳＬＰ禁止要求やＤＳＬＰ許可要求を呼び出す必要があるタスクが１つしかない場合には、ＤＳＬＰ禁止カウンタテーブル７を持つ必要はなく、１つのＤＳＬＰ禁止カウンタだけを持つことによって同様の効果を得ることができる。
【００２４】
また、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタをタスク毎に管理するのではなく、タスクがいくつか集まったタスクグループ毎に管理するようにすることもできる。この場合は、タスクＩＤの代わりにタスクグループＩＤという識別子を使用することで同様の効果を得ることができる。
【００２５】
この実施の形態１では、省電力モードを備えたプロセッサを持つシステムにおいて、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置の一例を説明した。
タスクからのＤＥＥＰ  ＳＬＥＥＰ（ＤＳＬＰ）禁止要求を受け付けるためのＤＳＬＰ禁止要求受付部と、ＤＳＬＰ許可要求を受け付けるためのＤＳＬＰ許可要求受付部を備えた省電力管理手段と、プロセッサがアイドル状態になったときにオペレーティングシステム（ＯＳ）から呼び出される省電力設定手段と、ＤＬＰ禁止要求が出されているか否かをタスク毎に保持しておくためのＤＳＬＰ禁止カウンタテーブル。
【００２６】
実施の形態２．
図５はこの発明の実施の形態２であるプロセッサ省電力制御装置を示すものである。図において、９はＤＳＬＰ強制許可要求受付部である。なお、１〜８は実施の形態１と同じであるため、説明を省略する。
省電力管理手段４は、ＤＳＬＰ禁止要求受付部５と、ＤＳＬＰ許可要求受付部６と、ＤＳＬＰ強制許可要求受付部９を持ち、これらの機能をＡＰＩとしてタスク３に提供する。ＡＰＩの例を図６に示す。
【００２７】
この発明の実施の形態２におけるプロセッサ省電力制御装置の動作と、プロセッサ省電力制御方法について一例を説明する。方法については実施の形態１で説明した図４を参照する。
ＯＳ起動時の処理は実施の形態１と同じであるため、説明を省略する。
タスク３は、プロセッサがアイドル状態になったときにＤＳＬＰ状態に移行することを避けたい、つまりＤＳＬＰ状態への移行を禁止する場合には、省電力管理手段４が提供するＡＰＩ（図６ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４にＤＳＬＰ禁止要求を出す。また、ＤＳＬＰ状態に移行することを許可する、つまりＤＳＬＰ状態への移行禁止を解除する場合には、省電力管理手段４が提供するＡＰＩ（図６ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４にＤＳＬＰ許可要求を出す。また、何度かＤＳＬＰ禁止要求を出した後に、強制的にＤＳＬＰ許可要求を出したい場合、つまりタスク３が出したＤＳＬＰ禁止要求をすべて解除したい場合には、省電力管理手段４が提供するＡＰＩ（図６ではｆｏｒｃｅｄ＿ｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４に強制許可要求情報であるＤＳＬＰ強制許可要求を出す。
ＤＳＬＰ禁止要求が通知された場合の処理及びＤＳＬＰ許可要求が通知された場合の処理は、実施の形態１と同じであるため、説明を省略する。
省電力管理手段４では、ＤＳＬＰ強制許可要求が通知されると（実施の形態２では図４のＳ２でＤＳＬＰ強制許可要求を更に受け付けるものとする）、ＤＳＬＰ強制許可要求受付部９が、ＡＰＩ（図６ではｆｏｒｃｅｄ＿ｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタを０に初期化して（Ｓ３）、出力情報を初期化する。これにより、すべてのＤＳＬＰ禁止要求が解除されたことになる。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ４）。
省電力設定手段８の処理は、実施の形態１と同じのため、説明を省略する。
【００２８】
実施の形態１では、タスク３が強制的にＤＳＬＰ許可要求を出したい場合、ＤＳＬＰ禁止要求を出した数だけＤＳＬＰ許可要求を出す必要があり、処理が複雑にならざるを得なかったが、以上のように、ＤＳＬＰ強制許可要求受付部９を追加することによって、ＤＳＬＰ状態への移行禁止を容易に解除することができる。
【００２９】
この実施の形態２では、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置の一例を説明した。
タスクからのＤＳＬＰ禁止要求を受け付けるためのＤＳＬＰ禁止要求受付部と、ＤＳＬＰ許可要求を受け付けるためのＤＳＬＰ許可要求受付部の他に、タスクからのＤＳＬＰ強制許可要求を受け付けるためのＤＳＬＰ強制許可要求受付部を備えた省電力管理手段。
【００３０】
実施の形態３．
図７はこの発明の実施の形態３であるプロセッサ省電力制御装置を示すものである。図において、１０はＤＳＬＰ禁止カウンタテーブル内のすべてのＤＳＬＰ禁止カウンタの値を合計した値を保持しておくためのＤＳＬＰ禁止合計カウンタ（合計カウンタ）である。１〜９は実施の形態２と同じであるため、説明を省略する。
【００３１】
この発明の実施の形態３におけるプロセッサ省電力制御装置の動作の一例と、プロセッサ省電力制御方法の一例について説明する。方法については実施の形態１で説明した図４を参照する。
まず、ＯＳ起動時に、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタ及びＤＳＬＰ禁止合計カウンタ１０を０に初期化しておく（Ｓ１）。つまり、ＯＳ起動直後はすべてのタスクがＤＳＬＰ許可状態となる。
タスク３は、プロセッサがアイドル状態になったときにＤＳＬＰ状態に移行することを避けたい、つまりＤＳＬＰ状態への移行を禁止する場合には、省電力管理手段４が提供するＡＰＩ（図６ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４にＤＳＬＰ禁止要求を出す。また、ＤＳＬＰ状態に移行することを許可する、つまりＤＳＬＰ状態への移行禁止を解除する場合には、省電力管理手段４が提供するＡＰＩ（図６ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４にＤＳＬＰ許可要求を出す。また、何度かＤＳＬＰ禁止要求を出した後に、強制的にＤＳＬＰ許可要求を出したい場合、つまりタスク３が出したＤＳＬＰ禁止要求をすべて解除したい場合には、省電力管理手段４が提供するＡＰＩ（図６ではｆｏｒｃｅｄ＿ｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４にＤＳＬＰ強制許可要求を出す。
省電力管理手段４では、ＤＳＬＰ禁止要求が通知されると（Ｓ２）、ＤＳＬＰ禁止要求受付部５が、ＡＰＩ（図６ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタに１を加算すると共にＤＳＬＰ禁止合計カウンタ１０にも１を加算する（Ｓ３）。
また、省電力管理手段４では、ＤＳＬＰ許可要求が通知されると（Ｓ２）、ＤＳＬＰ許可要求受付部６が、ＡＰＩ（図６ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタから１を減算すると共にＤＳＬＰ禁止合計カウンタ１０からも１を減算する（Ｓ３）。
省電力管理手段４では、ＤＳＬＰ強制許可要求が通知されると（実施の形態２のように図４のＳ２でＤＳＬＰ強制許可要求を受け付けるものとする）、ＤＳＬＰ強制許可要求受付部９が、ＡＰＩ（図６ではｆｏｒｃｅｄ＿ｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタを０に初期化すると共にＤＳＬＰ禁止合計カウンタ１０から初期化する前のＤＳＬＰ禁止カウンタの値を引く（Ｓ３）。
タスク毎のＤＳＬＰ禁止カウンタを加減すると同時にＤＳＬＰ禁止合計カウンタ１０の値も加減することにより、常にＤＳＬＰ禁止カウンタの合計値がＤＳＬＰ禁止合計カウンタ１０に保持された状態となる。つまり、ＤＳＬＰ禁止合計カウンタが０になると、すべてのタスクがＤＳＬＰ許可状態であるということである。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ４）。
省電力設定手段８では、ＤＳＬＰ禁止合計カウンタ１０を参照し、ＤＳＬＰ禁止合計カウンタ１０の値が０であれば（Ｓ５，Ｓ６，ＹＥＳ）、Ｈ／Ｗ操作によりプロセッサをＤＳＬＰ状態に移行させる（Ｓ７）。もし、ＤＳＬＰ禁止合計カウンタ１０の値が０でなければ（Ｓ５，Ｓ６，ＮＯ）、Ｈ／Ｗ操作によりプロセッサをＳＬＰ状態に移行させる（Ｓ８）。
【００３２】
以上のように、ＤＳＬＰ禁止合計カウンタを持たせることで、省電力設定手段８においてＤＳＬＰ禁止カウンタテーブル７内のすべてのタスクのＤＳＬＰ禁止カウンタを参照することなく、プロセッサをＤＳＬＰ状態に移行させてもよい状態かどうかを即座に判断することができる。
これにより、プロセッサをすばやくＳＬＰ状態もしくはＤＳＬＰ状態に移行させることができ、プロセッサの消費電力を抑えることができる。
【００３３】
実施の形態３では、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置を説明した。
ＤＳＬＰ禁止カウンタテーブル内のすべてのＤＳＬＰ禁止カウンタの値を合計した値を保持しておくためのＤＳＬＰ禁止合計カウンタ。
【００３４】
実施の形態４．
図８はこの発明の実施の形態４であるプロセッサ省電力制御装置を示すものである。図において、１はプロセッサ、２はＯＳ、３はタスク、４は省電力管理手段、８は省電力設定手段、１１は省電力モード設定要求受付部、１２はモード保持テーブル（モード保持部）である。
省電力管理手段４は、省電力モード設定要求受付部１１を持ち、この機能をＡＰＩとしてタスク３に提供する。ＡＰＩの例を図９に示す。
モード保持テーブル１２は、タスク（タスクＩＤ）毎にモード保持変数を持っている。プロセッサ１は例えば図１０に示すように複数の動作モードを持っている。各動作モードは省電力モード間の省電力に応じる関係を示す省電力レベルを有している。省電力レベルは、ここでは動作再開時間の短い（一般的には消費電力を要する）方の動作モードを上位の省電力レベルのモードとし、その逆を下位の省電力レベルのモードとする。モード保持テーブル１２の例を図１１に示す。
【００３５】
この発明の実施の形態４におけるプロセッサ省電力制御方法の動作と、プロセッサ省電力制御方法の一例について説明する。方法については、図１２を参照する。また、関数のプログラムの例を図１３に示す。
まず、ＯＳ起動時に、モード保持テーブル１２内のすべてのモード保持変数を最下位のモード（図１０ではＭＯＤＥ４）に初期化しておく（Ｓ１０）。つまり、ＯＳ起動直後はすべてのタスクが最下位のモードまでの移行を許可した状態となる。
タスク３は、プロセッサがアイドル状態になったときにあるモードよりも下位のモードに移行することを避けたい場合には、省電力管理手段４が提供するＡＰＩ（図９、図１３ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）を用いて、どのモードまで移行してもよいかを引数で指定し、省電力管理手段４に省電力設定要求情報である省電力モード設定要求を出す。つまり、図１０で示す省電力モードを持つプロセッサの場合、ＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ３の省電力モードを設定する。ＭＯＤＥ３及びＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ２の省電力モードを設定する。ＭＯＤＥ２〜ＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ１の省電力モードを設定する。すべてのモードへの移行を許可する場合には，ＭＯＤＥ４を設定する。
省電力管理手段４では、省電力モード設定要求が通知されると（Ｓ１１）、省電力モード設定要求受付部１１が、ＡＰＩ（図９、図１３ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）の引数として渡されたタスクＩＤに対応する、モード保持テーブル１２内のモード保持変数に、引数で渡された省電力モードを保持情報として保持しておく（Ｓ１２）。上記Ｓ１０，Ｓ１１とは省電力管理ステップ及び、省電力管理処理に該当し、Ｓ１２はモード保持ステップ及び、モード保持処理に該当する。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ１３）。
省電力設定手段８では、モード保持テーブル１２を参照し、モード保持テーブル１２内のモード保持変数に保持された省電力モードのうち、最も上位の省電力モードを選択してプロセッサを移行させる（Ｓ１４）。上記Ｓ１３，Ｓ１４は、省電力設定ステップ及び、省電力設定処理に該当する。
【００３６】
以上のように、タスク毎にモード保持変数を設けることによって、複数の省電力モードを備えたプロセッサを持つシステムにおいて、各タスクが移行を許可している省電力モードにプロセッサを移行させることができる。そのため、常に最適なモードにプロセッサを移行させることができ、プロセッサの電力消費を抑えることができる。
また、各タスクは他のタスクがどのような省電力モードを要求しているかを気にする必要がないため、自タスクが望む省電力モードを設定するだけでよく、タスクの処理を簡略化することができる。
さらに、ｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ  ＡＰＩが設定前の省電力モードを返すことで、ｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ  ＡＰＩの入れ子呼び出しを実現することもできる。そのときのタスク３のＣ言語での記述例を図１３に示した。図１３に示したタスクの処理は図１４のようになる。つまり、ＭＯＤＥ３の省電力モードまでを許可する「ｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ」と、ＭＯＤＥ２までの省電力モードを許可するための「ｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ」が、入れ子になっている。処理としては、ｔａｓｋ＿ｍａｉｎ関数にてＭＯＤＥ３までの移行しか許可していない区間を実行中に、ｔａｓｋ＿ｓｕｂ関数が呼び出された場合を想定している。ｔａｓｋ＿ｓｕｂ関数は、関数の中にＭＯＤＥ２までの移行しか許可しない区間を持っている。
【００３７】
なお、モード保持テーブル１２内のモード保持変数をタスク毎に持つ必要がない場合には、モード保持テーブル１２を持つ必要はなく、１つのモード保持変数だけを持つことによって同様の効果を得ることができる。
【００３８】
また、モード保持テーブル１２内のモード保持変数をタスク毎に管理するのではなく、タスクがいくつか集まったタスクグループ毎に管理するようにすることもできる。この場合は、タスクＩＤの代わりにタスクグループＩＤという識別子を使用することで同様の効果を得ることができる。
【００３９】
実施の形態４では、省電力モードを備えたプロセッサを持つシステムにおいて、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置の一例を説明した。
タスクからの省電力モード設定要求を受け付けるための、省電力モード設定要求受付部を備えた省電力管理手段と、プロセッサがアイドル状態になったときにＯＳから呼び出される省電力設定手段と、タスク毎に設定された省電力モードを保持しておくためのモード保持テーブル。
【００４０】
実施の形態５．
図１５はこの発明の実施の形態５であるプロセッサ省電力制御装置の構成を示すものである。図において、１はプロセッサ、２はＯＳ、３はタスク、４は省電力管理手段、８は省電力設定手段、１１は省電力モード設定要求受付部、１３はモード保持部の一例である省電力モードキューである。
省電力管理手段４は、省電力モード設定要求受付部１１を持ち、この機能をＡＰＩとしてタスク３に提供する。ＡＰＩの例を図９に示す。
省電力モードキュー１３は、タスク（タスクＩＤ）毎に要求されたモード保持変数をキュー構造を用いて管理したものであり、タスク毎に設定された省電力モードを上位順に保持情報として保持しておくためのものである。つまり、省電力モードキューの先頭の要素は、タスクが指定した中で最も上位の省電力モードが常に保持されていることになる。省電力モードキュー１３の例を図１６に示す。タスク毎に設定された省電力モードを上位順に保持しておくために、図１６では、先頭の要素を保持する「先頭の要素」を有している。「先頭の要素」に最上位の省電力レベルの省電力モードが保持されているキューのアドレスをセットしておく。「先頭の要素」にセットされているアドレスに保持されている情報をアクセスすることによって、最上位の省電力レベルの省電力モードを選択できる。また、モード保持変数を保持するとともに、次の省電力レベルの省電力モードを示すモード保持変数が保持されているアドレスと、１つ上位の省電力レベルを有する省電力モードを示すモード保持変数が保持されているアドレスとを保持する構造となっている。このため、上位のレベルの省電力モードを示すモード保持変数から下位の省電力レベルの省電力モードを示すモード保持変数へと順にモード保持変数を選択することができる。
【００４１】
この発明の実施の形態５におけるプロセッサ省電力制御装置の動作の一例とプロセッサ省電力制御方法の一例について説明する。プロセッサ省電力制御方法の処理手順は図１２を参照する。ただし、図１２のモード保持テーブルを省電力モードキューとして考える。
まず、ＯＳ起動時に、タスク毎のモード保持変数をすべて最下位のモード（図９ではＭＯＤＥ４）に初期化し（Ｓ１０）、省電力モードキュー１３に挿入しておく。つまり、ＯＳ起動直後はすべてのタスクが最下位のモードまでの移行を許可した状態となる。
タスク３は、プロセッサがアイドル状態になったときにあるモードよりも下位のモードに移行することを避けたい場合には、省電力管理手段４が提供するＡＰＩ（図９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）を用いて、どのモードまで移行してもよいかを引数で指定し、省電力管理手段４に省電力設定要求情報である省電力モード設定要求を出す。つまり、図１０で示す省電力モードを持つプロセッサの場合、ＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ３の省電力モードを設定する。ＭＯＤＥ３及びＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ２の省電力モードを設定する。ＭＯＤＥ２〜ＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ１の省電力モードを設定する。すべてのモードへの移行を許可する場合には，ＭＯＤＥ４を設定する。
省電力管理手段４では、省電力モード設定要求が通知されると（Ｓ１１）、省電力モード設定要求受付部１１が、ＡＰＩ（図９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）の引数として渡されたタスクＩＤに対応する、モード保持変数に、引数で渡された動作モードを代入し、その要素を省電力モードキューに挿入し直す（Ｓ１２）。挿入し直すことによって省電力モードキューの要素を常に上位の省電力モードから順につながれるようにする。上記Ｓ１０，Ｓ１１は、省電力管理ステップ及び、省電力管理処理に該当し、Ｓ１２は、モード保持ステップ及び、モード保持処理に該当する。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ１３）。
省電力設定手段８では、省電力モードキュー１３につながれている先頭の要素を参照し、その要素内のモード保持変数に保持された省電力モードにプロセッサを移行させる（Ｓ１４）。上記Ｓ１３，Ｓ１４は、省電力設定ステップ及び、省電力設定処理に該当する。
【００４２】
以上のように、省電力モードキュー１３を設けることによって、省電力設定手段８において、すべてのタスクのモード保持変数を参照しなくても、省電力モードキュー１３の先頭の要素を参照するだけで、タスクが指定した省電力モードのうち最も上位の省電力モードを簡単に選択することができる。
これにより、タスクが指定したうち最も上位の省電力モードを選択する処理を省くことができ、プロセッサの消費電力を抑えることができる。
【００４３】
実施の形態５では、省電力モードを備えたプロセッサを持つコンピュータシステムにおいて、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置について一例を説明した。
タスクからの省電力モード設定要求を受け付けるための、省電力モード設定要求受付部を備えた省電力管理手段と、プロセッサがアイドル状態になったときにＯＳから呼び出される省電力設定手段と、タスク毎に設定された省電力モードを保持しておくための省電力モードキュー。
【００４４】
実施の形態６．
図１７はこの発明の実施の形態６であるプロセッサ省電力制御装置を示すものである。図において、１４はモード保持テーブル内のすべてのモード保持変数のうち、最も上位の省電力モード値を保持しておくための最上位モード保持変数（モードサブ保持部）である。１〜４、８、１１〜１２は実施の形態４と同じであるため、説明を省略する。
【００４５】
この発明の実施の形態６におけるプロセッサ省電力制御装置の動作とプロセッサ省電力制御方法の処理手順の一例について説明する。プロセッサ省電力制御方法については、図１２を参照する。
まず、ＯＳ起動時に、モード保持テーブル１２内のすべてのモード保持変数及び最上位モード保持変数１４を最下位のモード（図１０ではＭＯＤＥ４）に初期化しておく（Ｓ１０）。つまり、ＯＳ起動直後はすべてのタスクが最下位のモードまでの移行を許可した状態となる。
タスク３は、プロセッサがアイドル状態になったときにあるモードよりも下位のモードに移行することを避けたい場合には、省電力管理手段４が提供するＡＰＩ（図９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）を用いて、どのモードまで移行してもよいかを引数で指定し、省電力管理手段４に省電力設定要求情報である省電力モード設定要求を出す。つまり、図１０で示す省電力モードを持つプロセッサの場合、ＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ３の省電力モードを設定する。ＭＯＤＥ３及びＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ２の省電力モードを設定する。ＭＯＤＥ２〜ＭＯＤＥ４への移行を禁止したい場合は、ＭＯＤＥ１の省電力モードを設定する。すべてのモードへの移行を許可する場合には，ＭＯＤＥ４を設定する。
省電力管理手段４では、省電力モード設定要求が通知されると（Ｓ１１）、省電力モード設定要求受付部１１が、ＡＰＩ（図９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）の引数として渡されたタスクＩＤに対応する、モード保持テーブル１２内のモード保持変数に、引数で渡された省電力モードを保持情報として保持しておく（Ｓ１２）。同時に、最上位モード保持変数１４には、常にモード保持テーブル１２内のすべてのモード保持変数のうち、最も上位の省電力モードの値を保持しておく。図１２には、最上位モード保持変数１４に最も上位の省電力モードの値を保持する処理が示されていないが、Ｓ１２の処理と同時に行なうものとする。上記Ｓ１０，Ｓ１１は省電力管理ステップ及び、省電力管理処理に該当し、Ｓ１２は、モード保持ステップ及び、モード保持処理に該当する。
最も上位の省電力モードの値を保持しておく方法は数々存在するが、その一例を以下に示す。
まず、省電力モード設定要求が通知されると、省電力モード設定要求受付部１１が、ＡＰＩ（図９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）の引数として渡されたタスクＩＤに対応する、モード保持テーブル１２内のモード保持変数の現在値を変数Ａ61に保存した後、そのタスクのモード保持変数に、引数で渡された新たな省電力モードの値Ａ62を代入する。次に、もし、Ａ62が最上位モード保持変数１４の値Ａ63よりも上位の省電力モードであれば、最上位モード保持変数１４にＡ62を代入する。そうではなく、Ａ62が最上位モード保持変数１４の値Ａ63よりも下位の省電力モードであり、なおかつ、Ａ63とＡ61が同じ値であれば、モード保持テーブル内のすべてのモード保持変数を参照し、その中で最も上位の省電力モードの値を最上位モード保持変数１４に代入する。このようにすることで、最上位モード保持変数１４には、常にモード保持テーブル１２内のすべてのモード保持変数のうち、最も上位の省電力モードの値が保持されていることになる。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ１３）。
省電力設定手段８では、最上位モード保持変数１４に保持された省電力モードにプロセッサを移行させる（Ｓ１４）。上記Ｓ１３，Ｓ１４は、省電力設定ステップ及び、省電力設定処理に該当する。
【００４６】
以上のように、最上位モード保持変数１４を持たせることで、省電力設定手段８においてモード保持テーブル１２内のすべてのタスクのモード保持変数を参照することなく、すべてのタスクが指定した省電力モードのうち、最も上位の省電力モードにプロセッサを移行させることができる。
これにより、プロセッサをすばやく適切な省電力モードに移行させることができ、プロセッサの消費電力を抑えることができる。
【００４７】
実施の形態６では、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置について説明を行なった。
モード保持テーブル内に保持された省電力モード設定要求のうち、最も上位の（消費電力は大きいが実行復帰時間の早い）省電力モード設定要求の値を保持しておくための最上位モード保持変数。
【００４８】
実施の形態７．
図１８はこの発明の実施の形態７であるプロセッサ省電力制御装置を示すものである。図において、１１は省電力モード設定要求受付部、１２はモード保持テーブルである。１〜８は実施の形態１と同じであるため、説明を省略する。
省電力管理手段４は、ＤＳＬＰ禁止要求受付部５と、ＤＳＬＰ許可要求受付部６と、省電力モード設定要求受付部１１を持ち、これらの機能をＡＰＩとしてタスク３に提供する。ＡＰＩの例を図１９に示す。
ＤＳＬＰ禁止カウンタテーブル７の詳細は、実施の形態１と同じであるため、説明を省略する。
モード保持テーブル１２の詳細は、実施の形態４と同じであるため、説明を省略する。
この実施の形態では、図２０に示すように、システム構築時にあらかじめ、複数存在する省電力モードをＳＬＰ状態とＤＳＬＰ状態の２種類の状態に分類しておく。
【００４９】
この発明の実施の形態７におけるプロセッサ省電力制御装置の動作とプロセッサ省電力制御方法について一例を説明する。プロセッサ省電力制御方法については、図４と図１２に記載の処理手順が混合したものとする。
まず、ＯＳ起動時に、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタを０に初期化しておく（Ｓ１）。つまり、ＯＳ起動直後はすべてのタスクがＤＳＬＰ許可状態となる。また、モード保持テーブル１２内のすべてのモード保持変数を最下位のモード（図２０ではＭＯＤＥ４）に初期化しておく（Ｓ１０）。つまり、ＯＳ起動直後はすべてのタスクが最下位のモードまでの移行を許可した状態となる。
タスク３は、プロセッサがアイドル状態になったときにＤＳＬＰ状態に移行することを避けたい、つまりＤＳＬＰ状態への移行を禁止する場合には、省電力管理手段４が提供するＡＰＩ（図１９ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４に省電力設定要求情報であるＤＳＬＰ禁止要求を出す。また、ＤＳＬＰ状態に移行することを許可する、つまりＤＳＬＰ状態への移行禁止を解除する場合には、省電力管理手段４が提供するＡＰＩ（図１９ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）を用いて、省電力管理手段４に省電力設定要求情報であるＤＳＬＰ許可要求を出す。
もしくは、タスク３は、プロセッサがアイドル状態になったときにあるモードよりも下位のモードに移行することを避けたい場合には、省電力管理手段４が提供するＡＰＩ（図１９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）を用いて、どのモードまで移行してもよいかを引数で指定し、省電力管理手段４に省電力設定要求情報である省電力モード設定要求を出す。
省電力管理手段４では、ＤＳＬＰ禁止要求が通知されると（Ｓ２）、ＤＳＬＰ禁止要求受付部５が、ＡＰＩ（図１９ではｄｉｓａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタに１を加算して保持情報とする（Ｓ３）。
また、省電力管理手段４では、ＤＳＬＰ許可要求が通知されると（Ｓ２）、ＤＳＬＰ許可要求受付部６が、ＡＰＩ（図１９ではｅｎａｂｌｅ＿ｄｅｅｐ＿ｓｌｅｅｐ）の引数として渡されたタスクＩＤに対応する、ＤＳＬＰ禁止カウンタテーブル７内のＤＳＬＰ禁止カウンタから１を減算して保持情報とする（Ｓ３）。
また、省電力管理手段４では、省電力モード設定要求が通知されると（Ｓ１１）、省電力モード設定要求受付部１１が、ＡＰＩ（図１９ではｓｅｔ＿ｓｌｅｅｐ＿ｍｏｄｅ）の引数として渡されたタスクＩＤに対応する、モード保持テーブル１２内のモード保持変数に、引数で渡された省電力モードを保持情報として保持しておく（Ｓ１２）。上記Ｓ１，Ｓ２，Ｓ１０，Ｓ１１は、省電力管理ステップ及び、省電力管理処理に該当し、Ｓ３は、省電力モード禁止情報保持ステップ及び、省電力モード禁止情報保持処理に該当し、Ｓ１２は、モード保持ステップ及び、モード保持処理に該当する。
次に、すべてのタスクが待ち状態や終了状態になると、プロセッサ１は動作させるタスクがなくなり、アイドル状態となる。ＯＳ２は、プロセッサ１がアイドル状態であることを検出すると、省電力設定手段８を呼び出す（Ｓ４，Ｓ１３）。
省電力設定手段８では、ＤＳＬＰ禁止カウンタテーブル７を参照し、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタが０（ＤＳＬＰ許可状態）であれば、ＤＳＬＰ状態として定義された省電力モードのうち最も下位の省電力モードの値と、モード保持テーブル１２内のモード保持変数に保持された省電力モードのうち、最も上位の省電力モードを比較し、より上位の省電力モードにプロセッサを移行させる（Ｓ５，Ｓ６，Ｓ７，Ｓ１４）。
もし、ＤＳＬＰ禁止カウンタテーブル７内のすべてのＤＳＬＰ禁止カウンタが０でなければ（ＤＳＬＰ禁止状態）、ＤＳＬＰ状態として定義された省電力モードのうち最も下位の省電力モードの値と、モード保持テーブル１２内のモード保持変数に保持された省電力モードのうち、最も上位の省電力モードを比較し、より上位の省電力モードにプロセッサを移行させる（Ｓ５，Ｓ６，Ｓ８，Ｓ１４）。上記Ｓ４，Ｓ５，Ｓ６，Ｓ７，Ｓ８，Ｓ１３，Ｓ１４は、省電力設定ステップ及び、省電力設定処理に該当する。
【００５０】
以上のように、ＤＳＬＰ禁止カウンタテーブル７とモード保持テーブル１２の双方を参照して、適切な省電力モードに移行する省電力設定手段８を用いることによって、ＤＳＬＰ状態への移行を禁止したり許可したりするプロセッサの省電力制御方法と、省電力モードを設定するプロセッサの省電力制御方法を混在させることができる。
これにより、タスク３はプロセッサに依存することなく、タスク３自身が制御しやすい方法（ＡＰＩ）でプロセッサの省電力制御を行うことができ、タスクの処理の簡略化や、タスクの再利用などが簡単にできる。
【００５１】
実施の形態７では、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置について説明を行なった。
タスクからのＤＳＬＰ禁止要求を受け付けるためのＤＳＬＰ禁止要求受付部と、ＤＳＬＰ許可要求を受け付けるためのＤＳＬＰ許可要求受付部と、ＤＳＬＰ強制許可要求を受け付けるためのＤＳＬＰ強制許可要求受付部の他に、タスクからの省電力モード設定要求を受け付けるための省電力モード設定要求受付部を備えた省電力管理手段と、タスク毎に設定された省電力モードを保持しておくためのモード保持テーブル。
【００５２】
なお、この実施の形態７に、実施の形態２で示したＤＳＬＰ強制許可要求受付部９を省電力管理手段４に備えることも可能である。
また、この実施の形態７に、実施の形態３で示したＤＳＬＰ禁止合計カウンタを設け、省電力設定手段の処理を高速化することも可能である。
また、この実施の形態７では、実施の形態４で示したものと同様にモード保持テーブルを用いてプロセッサの省電力制御を行っているが、その代替として実施の形態５で示したものと同様に省電力モードキューを用いてプロセッサの省電力制御を行うことも可能である。
また、この実施の形態７に、実施の形態６で示した最上位モード保持変数を設け、省電力設定手段の処理を高速化することも可能である。
【００５３】
また、実施の形態７では、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置について簡単な例を説明した。
タスクからのＤＳＬＰ禁止要求を受け付けるためのＤＳＬＰ禁止要求受付部と、ＤＳＬＰ許可要求を受け付けるためのＤＳＬＰ許可要求受付部と、ＤＳＬＰ強制許可要求を受け付けるためのＤＳＬＰ強制許可要求受付部の他に、タスクからの省電力モード設定要求を受け付けるための省電力モード設定要求受付部を備えた省電力管理手段と、タスク毎に設定された省電力モードを保持しておくための省電力モードキュー。
【００５４】
また、実施の形態７では、以下の手段を備えたことを特徴とするプロセッサ省電力制御装置について簡単な例を説明した。
モード保持テーブル内に保持された省電力モード設定要求のうち、最も上位の（消費電力は大きいが、実行復帰時間の早い）省電力モード設定要求の値を保持しておくための最上位モード保持変数。
【００５５】
また、上記実施の形態１から実施の形態７で説明した省電力管理ステップ及び省電力管理処理、モード保持ステップ及びモード保持処理、省電力設定ステップ及び省電力設定処理、省電力モード禁止情報保持ステップ及び省電力モード禁止情報保持処理とは、コンピュータで実行されるプログラムである。また、そのプログラムは、コンピュータにより読み取り可能な記録媒体、例えば、ＲＯＭ（リード  オンリー  メモリ）やＦＸＤ（フレキシブル  ディスク）の記録媒体に記録されている。
【００５６】
【発明の効果】
以上のように、この発明では、以下の効果がある。
省電力モード（ＤＳＬＰ）禁止カウンタテーブルにタスク毎に（ＤＳＬＰ）禁止要求情報が出されていることを保持することで、（ＤＳＬＰ）禁止要求情報を発行した数だけ、（ＤＳＬＰ）許可要求情報を出さない限り、省電力設定部がプロセッサを許可要求情報によって許可される（ＤＳＬＰ）状態に移行させることがなくなる。したがって、許可要求情報によって許可される（ＤＳＬＰ）状態への移行禁止及び許可要求の入れ子呼び出しが可能となり、タスクの処理を簡略化することができる効果がある。
【００５７】
また、タスクが強制的に（ＤＳＬＰ）許可要求情報を発行したい場合、（ＤＳＬＰ）禁止要求情報を発行した数だけ（ＤＳＬＰ）許可要求情報を出す必要があり、処理が複雑にならざるを得なかった。しかし、（ＤＳＬＰ）強制許可要求情報を省電力管理部が受け付けることによって、禁止要求情報により移行を禁止されている（ＤＳＬＰ）状態への移行禁止を容易に解除することができる効果がある。
【００５８】
また、合計カウンタ（ＤＳＬＰ禁止合計カウンタ）を持たせることで、省電力設定部においてＤＳＬＰ禁止カウンタテーブル内のすべてのタスクについて省電力禁止要求情報が出されてることを判断することなく、プロセッサを禁止要求情報により移行を禁止されている（ＤＳＬＰ）状態に移行させてもよい状態かどうかを即座に判断することができる。
これにより、プロセッサをすばやく移行を禁止されている状態（ＳＬＰ状態もしくはＤＳＬＰ状態）に移行させることができ、プロセッサの消費電力を抑えることができる効果がある。
【００５９】
また、タスク毎にモード保持部（モード保持変数）を設けることによって、複数の省電力モードを備えたプロセッサを持つシステムにおいて、各タスクが移行を許可している省電力モードにプロセッサを移行させることができる効果がある。そのため、常に最適なモードにプロセッサを移行させることができ、プロセッサの電力消費を抑えることができる効果がある。
また、各タスクは他のタスクがどのような省電力モードを要求しているかを気にする必要がないため、自タスクが望む省電力モードを設定するだけでよく、タスクの処理を簡略化することができる効果がある。
【００６０】
また、モード保持部（省電力モードキュー）を設けることによって、省電力設定部において、すべてのタスクについての省電力モード設定要求情報（モード保持変数）を参照しなくても、省電力モードキューの先頭の要素を参照するだけで、タスクが指定した省電力モードのうち最も上位の省電力レベルの省電力モードを簡単に選択することができる。
これにより、タスクが指定したうち最も省電力効果の小さい、けれど復帰時間の早い省電力レベルの省電力モードを見つけ出す処理を省くことができ、プロセッサの消費電力を抑えることができる効果がある。
【００６１】
また、モードサブ保持部（最上位モード保持変数）を持たせることで、省電力設定部においてモード保持部（モード保持テーブル）内のすべてのタスクの省電力モード設定要求情報（モード保持変数）を参照することなく、すべてのタスクが指定した省電力モードのうち、最も省電力効果の小さい、けれど復帰時間の早い省電力レベルの省電力モードにプロセッサを移行させることができる。
これにより、プロセッサをすばやく適切な省電力モードに移行させることができ、プロセッサの消費電力を抑えることができる効果がある。
【００６２】
さらに、省電力モード禁止カウンタテーブル（ＤＳＬＰ禁止カウンタテーブル）とモード保持部（モード保持テーブル）の双方を参照して、適切な省電力モードに移行する省電力モード設定部を用いることによって、所定の省電力モード（例えば、ＤＳＬＰ状態）への移行を禁止したり許可したりするプロセッサの省電力制御方法と、所定の省電力モードを直接設定するプロセッサの省電力制御方法を混在させることができる。
これにより、タスクはプロセッサに依存することなく、タスク自身が制御しやすい方法（ＡＰＩ）でプロセッサの省電力制御を行うことができ、タスクの処理の簡略化や、タスクの再利用などが簡単にできる効果がある。
【図面の簡単な説明】
【図１】  実施の形態１におけるプロセッサ省電力制御装置の構成例を示す図。
【図２】  実施の形態１におけるＡＰＩの一例を示す図。
【図３】  実施の形態１におけるＤＳＬＰ禁止カウンタテーブルの例を示す図。
【図４】  実施の形態１におけるプロセッサ省電力制御方法の一例を示す図。
【図５】  実施の形態２におけるプロセッサ省電力制御装置の構成例を示す図。
【図６】  実施の形態２におけるＡＰＩの一例を示す図。
【図７】  実施の形態３におけるプロセッサ省電力制御装置の構成例を示す図。
【図８】  実施の形態４におけるプロセッサ省電力制御装置の構成例を示す図。
【図９】  実施の形態４におけるＡＰＩの一例を示す図。
【図１０】  実施の形態４における動作モードの種類の例を示す図。
【図１１】  実施の形態４におけるモード保持テーブルを示す図。
【図１２】  実施の形態４におけるプロセッサ省電力制御方法の一例を示す図。
【図１３】  実施の形態４におけるタスクのプログラムの一例を示す図。
【図１４】  実施の形態４におけるプログラムの入れ子を説明する図。
【図１５】  実施の形態５におけるプロセッサ省電力制御装置の構成例を示す図。
【図１６】  実施の形態５におけ省電力モードキューを示す図。
【図１７】  実施の形態６におけるプロセッサ省電力制御装置の構成例を示す図。
【図１８】  実施の形態７におけるプロセッサ省電力制御装置の構成例を示す図。
【図１９】  実施の形態７におけるＡＰＩの一例を示す図。
【図２０】  実施の形態７における動作モードの種類の例を示す図。
【図２１】  従来例における変数Ａを説明する図。
【図２２】  （Ａ）プログラムのＤＳＬＰ禁止区間を説明する図。（Ｂ）プログラムのＤＳＬＰ禁止区間とＤＳＬＰ許可区間との入れ子を説明する図。
【図２３】  プログラムのＤＳＬＰ禁止区間とＤＳＬＰ許可区間との入れ子を説明する図。
【図２４】  プログラムのＤＳＬＰ禁止区間の入れ子を説明する図。
【符号の説明】
１  プロセッサ、２  ＯＳ、３  タスク、４  省電力管理手段、５  ＤＳＬＰ禁止要求受付部、６  ＤＳＬＰ許可要求受付部、７  ＤＳＬＰ禁止カウンタテーブル、８  省電力設定手段、９  ＤＳＬＰ強制許可要求受付部、１０  ＤＳＬＰ禁止合計カウンタ、１１  省電力モード設定要求受付部、１２  モード保持テーブル、１３  省電力モードキュー、１４  最上位モード保持変数。
【図１】
0004704613.tif 000002
【図２】
0004704613.tif 000003
【図３】
0004704613.tif 000004
【図４】
0004704613.tif 000005
【図５】
0004704613.tif 000006
【図６】
0004704613.tif 000007
【図７】
0004704613.tif 000008
【図８】
0004704613.tif 000009
【図９】
0004704613.tif 000010
【図１０】
0004704613.tif 000011
【図１１】
0004704613.tif 000012
【図１２】
0004704613.tif 000013
【図１３】
0004704613.tif 000014
【図１４】
0004704613.tif 000015
【図１５】
0004704613.tif 000016
【図１６】
0004704613.tif 000017
【図１７】
0004704613.tif 000018
【図１８】
0004704613.tif 000019
【図１９】
0004704613.tif 000020
【図２０】
0004704613.tif 000021
【図２１】
0004704613.tif 000022
【図２２】
0004704613.tif 000023
【図２３】
0004704613.tif 000024
【図２４】
0004704613.tif 000025