(57)【特許請求の範囲】
【請求項１】
コンピュータシステムに対し、当該コンピュータシステムが複数の省電力モードの一つに入るべきことを提示し、
前記提示がなされた場合、CPUのクロック周波数を、電力を節減するよう変更し、
前記CPUクロック周波数の変化に関わらず、一定の時間基準信号を生成し、ここで、前記一定の時間基準信号の生成が、PCIクロックにより生成される周波数信号を分割して分割周波数信号を生成することと、前記分割周波数信号を前記CPUクロック周波数に同期させることとを含み、
前記一定の時間基準信号を用いて、前記一定の時間基準信号の速さで第１レジスタに格納された第１データ値を増大させ、
前記第１データ値と第２レジスタに格納された第２データ値とを、前記一定の時間基準信号の速さで比較し、
前記第１データ値と前記第２データ値とが等しい場合、前記コンピュータシステムのオペレーションシステムへの割り込みを生成する、
コンピュータシステムにおける節電方法。
【請求項２】
前記提示は、省電力モードレジスタへの複数のビットの書き込みを含み、
前記CPUクロック周波数の変更は、PLL内の省電力値に基づいて行われ、
前記方法は、さらに、
前記省電力モードレジスタの前記複数のビットを用いて、前記提示がなされ、前記CPUクロック周波数を変更する前に、PLL内のどの省電力値を用いるかを決定するステップと、
用いられる省電力値に応じて前記複数の省電力モードの一つに入るステップとを含む、請求項１に記載の方法。
【請求項３】
前記コンピュータシステムが前記複数の省電力モードの一つに入る前に、メモリユニットへ、前記CPUクロック周波数と独立に動作するよう指示するステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記メモリユニットがSDRAMを含み、
前記方法が、さらに、
SDRAMをセルフリフレッシュモードで動作させる複数のビットをメモリ制御レジスタへ書き込むステップと、
入力されるメモリアクセスに対して前記SDRAMをアクティブにするステップと、
前記メモリアクセスが完了したときに、前記SDRAMをセルフリフレッシュモードに戻すステップと、
前記メモリ制御レジスタ内の複数ビットをクリアするステップと、
前記メモリ制御レジスタ内の複数ビットがクリアされたとき、通常のSDRAM動作を再開するステップとを含む、請求項３に記載の方法。
【請求項５】
前記オペレーティングシステムが、オペレーティングシステムタスクを実行するために割り込みを使用する、請求項１に記載の方法。
【請求項６】
コンピュータシステムに対する、当該コンピュータシステムが複数の省電力モードの一つに入るべきことの提示が、複数の特定されたコンピュータ資源が指定された時間アイドル状態であった場合に発生する、請求項１に記載の方法。
【請求項７】
前記複数の特定されたコンピュータ資源の動作に応じて前記複数の省電力モードの間でスイッチするステップと、
前記複数の特定されたコンピュータ資源がアクティブになったとき、前記コンピュータシステムへ、通常のCPU動作周波数に戻るよう指示するステップとをさらに含む、請求項６に記載の方法。
【請求項８】
コンピュータシステムに省電力モードに入るよう指示するソフトウェアと、
前記ソフトウェアによる指示に従って、CPUクロック周波数を低下させて電力を節減する省電力回路と、
CPUクロック周波数の変化にかかわらず一定の周波数信号を生成する一定周波数生成部と、
前記一定の周波数信号を用いて、オペレーティングシステムへの割り込みを生成するＳＴＩＣＫＤＰユニットとを備え、
前記ＳＴＩＣＫＤＰユニットは、
前記一定の周波数信号の速さで第１データ値を増加させる第１レジスタと、
前記一定の周波数信号の速さで前記第１データ値と比較される第２データ値を持つ第２レジスタとを含み、ここで、前記割り込みは、前記第２データ値と前記第１データ値とを比較したとき、前記第１データ値と前記第２データ値とが等しい場合に生成され、
前記一定周波数生成部は、
PCIクロックにより生成される周波数信号を入力し、入力した前記周波数信号を分割して分割周波数信号を生成する周波数分割部と、
前記分割周波数信号を入力し、入力した前記分割周波数信号を前記CPUクロック周波数に同期させることにより前記一定の周波数信号を生成する周波数同期部とを含む、
コンピュータシステム用の電力管理システム。
【請求項９】
前記ソフトウェアによる指示は、省電力モードレジスタへの複数のビットの書き込みを含み、
前記システムはさらに、前記省電力モードレジスタの前記複数のビットを用いて、どの省電力モードに入るかを決定するPLL回路を備えた、請求項８に記載のシステム。
【請求項１０】
前記ソフトウェアが、ハードウェアを、現在のモードから所望の省電力モードに順序付ける、請求項９に記載のシステム。
【請求項１１】
前記PLL回路が、省電力回路の一部を含み、
前記PLL回路が、複数の省電力モードに対する複数の省電力値を持つ複数の分周器を備えた、請求項９に記載のシステム。
【請求項１２】
前記複数の分周器が、前記コンピュータシステムの異なる動作周波数を示す値を持つ、請求項１１に記載のシステム。
【請求項１３】
前記PLL回路が、前記PLLにおける前記複数の分周器の動作CPU周波数の値に基づいて前記CPUクロック周波数を変化させ、前記動作CPU周波数は、省電力モードレジスタの複数ビットにより決定される、請求項１２に記載のシステム。
【発明の詳細な説明】
【０００１】
発明の背景
図１に示すように、近代的なコンピュータシステムは、ハードウェア(10)、オペレーティングシステム(12)、アプリケーションプログラム(14)、および、ユーザ(16, 18, 20, 22)というおよそ４つの概念的要素に分割できる。ハードウェア(10)、すなわち、マイクロプロセッサ、メモリ、および入出力デバイスは、基本的なコンピュータ資源を提供する。コンパイラ、データベースシステム、ソフトウェア、ビジネスプログラムなどのアプリケーションプログラム(14)は、ユーザの演算的な問題を解決するためにこれらの資源が用いられる方法を定義する。ユーザ(16, 18, 20, 22)、人間、機械、および他のコンピュータは、ハードウェアを順に稼働させるアプリケーションプログラムを用いて様々な問題を解決する。
【０００２】
オペレーティングシステム(OS) (12)は、コンピュータシステムのユーザとコンピュータハードウェアとの間の仲介人として機能するプログラムである。オペれー手雄イングシステムの役割は、ユーザがプログラムを便利にかつ効率的に実行できる環境を提供することにある。コンピュータシステムは、例えば中央処理装置(CPU)時間、メモリスペース、ファイル格納スペース、入出力(I/O)デバイスなど、問題を解決することが要求される多くの資源（ハードウェアおよびソフトウェア）を有する。オペレーティングシステムは、これらの資源のマネージャとして機能し、タスクに必要な特定のプログラムやユーザへそれらを割り当てる。資源に対する、多くの、おそらく互いに矛盾する要求があり得るので、オペレーティングシステムは、コンピュータシステムを効率的かつ公平に稼働させるために、どの要求を資源へ割り当てるのかを決定しなければならない。
【０００３】
さらに、オペレーティングシステムは、コントロールプログラムとして特徴づけることができる。コントロールプログラムとは、エラーやコンピュータの不正使用を防止するために、ユーザプログラムの実行を制御するものであり、特に、I/Oデバイスの動作に関係する。一般に、オペレーティングシステムは、それが、有用なコンピュータシステムを創造するという問題を解決する合理的な方法であるという理由で存在する。コンピュータシステムの基本的な目標は、ユーザプログラムを実行し、ユーザの問題解決を容易にすることである。この目標に向けて、コンピュータハードウェア(10)は構築されている。ハードウェアそのもの単体を扱うことは容易ではないので、アプリケーションプログラムが開発された。これらの様々なプログラムは、例えばそれらのI/Oオペレーション制御のような、いくつかの共通したオペレーションを必要とする。そこで、資源の制御および割り当ての共通機能は、１つのソフトウェアにまとめられた。それがオペレーティングシステムである。オペレーティングシステムは、上述のタスクや、スレッドスケジューリング、プロセススケジューリング、イベントスケジューリング、および他のシステム関連動作などの管理的なタスクをサポートするために、一定の時間基準(constant time reference)を必要とする。
【０００４】
一般的なオペレーティングシステムは、一定の時間基準としてCPUクロックを用いる。最近のCPUは、166MHzから600MHzを超える周波数を有する。例えば、カリフォルニアのパロアルトのサン・マイクロシステムズによって開発されたUltraSparc-IIeマイクロプロセッサは、500MHz以上のスピードで動作する。これはつまり、このプロセッサが１秒に500×106回のCPUクロックサイクルを完了することを意味する。
【０００５】
電力を節減するために、いくつかのコンピュータシステムは、電力制御機構を取り入れている。例えば、エナジースター（Energy Star(“E*”)）電力条件は、システムがアイドル状態のときのシステムの消費電力が、通常稼働時の消費電力レベルの15%まで低減されることを要求する。この目標を達成するために、システムは、活動していないデバイス（ディスクドライブ、ネットワークカードなど）の電源を切ったり、あるいは動作周波数を低くしたりしなければならない。さらに、CPUそのものが省電力モードに入らなければならない。なぜなら、システム中でCPUが最も消費電力が高いデバイスであることが多いからである。
【０００６】
電力を節減するために、CPUは動作周波数を低くしなければならない。CPUの電源を完全に切ることはできない。なぜなら、それは、実際、システム全体をシャットダウンすることになるからである。CPUが動作周波数を低くしたとき、オペレーティングシステムの時間基準が変化し、その結果として、オペレーティングシステムは、変化する基準時間に従って、その任務を果たすこととなる。異なる周波数モードに変化する間に、オペレーティングシステムは、周波数変化の前に保持していた絶対的な時間基準を失い、周波数変化として、異なる割合で増加するCPUコアクロックを用いることで対処する。
【０００７】
オペレーティングシステムは、互いに異なるタスクにシステム資源を指定して割り当てるので、これらのタスクを効果的かつ効率的に動作させるためには、一定の時間基準を持たなければならない。一定の時間基準がなければ、オペレーティングシステムは、変動する時間基準を用いてタスクのスケジュールを試みなければならなくなる。これは、オペレーティングシステムが一定の時間基準が確立されるのを待つ間に多くのクロックサイクルのロスを引き起こし、最終的にはこの影響がシステムパフォーマンスを悪化させることになる。
【０００８】
従来の技術では、システムのCPUコア周波数が変更されるときは、オペレーティングシステムにシステムハードウェアへの要求や割り込みを遅らせるようになっている。このような仕組みを実現するためのハードウェアは、オペレーティングシステムへの定期的な割り込みを生成するためにクロックサイクルの基礎をCPUクロックとするレジスタを有する。しかし、システムが省電力モードに入ったりあるいは省電力モードから脱したりすることによってCPUクロック周波数が変化したとき、割り込み周期が変化することにより、オペレーティングシステムは不確定的にイベントをスケジュールする。従来、オペレーティングシステムが、システムが周波数変化の遷移を完了するのを単純に待ち、多くのクロックサイクルのロスを許容するシステムも実現されている。全ての要求や割り込みは、システム周波数が所望の周波数へ完全に変化するまで待たされる。
【０００９】
発明の要旨
一つの側面において、本発明は、コンピュータ資源がアイドル状態であるときにコンピュータシステムの電力を節減するための電力管理スキームを実施するシステムに関する。このシステムは、さらに、システムソフトウェアに指定されたときに入ることのできる複数の省電力モードを提供する。このシステムは、さらに、事前のシステム条件に対する最小限の変化による電力管理スキームの実現を含む。
【００１０】
他の側面において、本発明は、イベントスケジューリング、プロセススケジューリング、および他の管理的な目的へのオペレーティングシステムサポートへ一定の時間基準を提供する方法に関する。この方法は、さらに、システムが省電力モードへ移行するときや、システムが省電力モードにあるときにも、一定の時間基準を提供することを含む。
【００１１】
他の側面において、本発明は、ソフトウェアが電力管理スキームを実施する方法に関する。この方法は、コンピュータ資源がアイドル状態のときに、ハードウェアがどのように指定された省電力モード要求に応答すべきかを監視し決定することによって電力管理スキームを制御するソフトウェアを含む。
【００１２】
本発明の他の側面および利点は、以下の説明および添付された請求の範囲によって明らかとなるであろう。
【００１３】
発明の詳細な説明
本発明は、コンピュータ資源がアイドル状態のときにコンピュータシステムの電力を節減する電力管理スキームを実施するシステムに関する。このシステムは、また、コンピュータシステムのCPU周波数が異なる周波数間で切り替わろうとするときに、PCIインタフェースを用いて、オペレーティングシステム(OS)サポートに一定の時間基準を提供するシステムに関する。オペレーティングシステムに一定の絶対的な時間基準を提供するために、本発明の実施形態は、CPU周波数と共にPCI周波数を用いることによって一定の時間基準周波数を生成するスキームを実行する。
【００１４】
PCIは、最近のコンピュータシステムのほとんどにおいて、異なるシステム構成要素を接続するために各システムに組み込まれているローカルバス規格である。PCIは、通常、３２ビットバスとして実現されているが、６４ビットバスであり、３３MHzまたは６６MHzのクロックスピードで動作する。
【００１５】
上述したＥスター(“E*”)条件を満たすために、システムはCPU周波数を低くすることによって電力を節減できる方法を実施しなければならない。表１は、UltraSparc-IIeマイクロプロセッサの異なる周波数モードにおける消費電力の推定レベルを示す。
【００１６】
【表１】
0004482275.tif 000002
【００１７】
消費電力条件を満たすために、UltraSparc-IIeは、CPUクロックを通常の動作周波数の１／２や１／６に変更することにより、電力管理スキームを実行する。一般的には、スキームの仕様はシステムソフトウェアによりプログラム化が可能である。表２に、システムソフトウェアが電力消費量を上下させるために遂行する順序付けを示す（以下でさらに図３を参照して説明する）。
【００１８】
【表２】
0004482275.tif 000003
【００１９】
１／６という割合の限定は、内部PCI同期部の要件である、
fCPU >= 2 fEXTERNAL_PCI
による。
【００２０】
通常の周波数で動作しているシステムと省電力モードで動作しているシステムとの間の違いの一つは、システムが省電力モードである場合は、全ての要求や割り込みが、より低いクロックレートで処理されることである。
【００２１】
システムソフトウェアは、システムトラフィックを監視し、内部CPUクロックを、当該ソフトウェアが適切であると判断する任意のモードに戻すことを決定できる。
【００２２】
図２は、本発明の一実施形態のブロック図である。この図は、電力管理ユニット(30)を含む電力管理スキームのトップレベルのハードウェアレイアウトを示す。電力管理ユニット(30)のデフォルトの動作モードは、フルパワーでの動作である。コンピュータシステムが所定の期間アイドル状態であることをシステムソフトウェアが検出すると、当該ソフトウェアは、図示しないＥスターモードレジスタ（“ESTAR_MODE”）に０を書き込むことにより、システムハードウェアに消費電力低下を命令する。このコマンドにより、電力管理ユニット(30)は、指定された省電力モードまで消費電力を下げるために、一連のステップを順次行う。電力管理ユニット(30)は、まず、SDRAM(32)をセルフリフレッシュモードで動作するようプログラムする。SDRAM(32)は、従来のメモリよりもはるかに高いクロックスピードで動作することが可能であるダイナミックランダムアクセスメモリ(DRAM)の一種である。省電力モードに入るまえに、SDRAM(32)は、コンピュータシステムのCPUバスと同期をとり、機能するために連続的にリフレッシュされる。しかし、省電力モードに入るとき、電力管理ユニット(30)は、SDRAM(32)を、CPUクロックとは独立にリフレッシュするように、セルフリフレッシュモードで動作するようプログラムする。さらに、SDRAM(32)は、通常動作モードにあるときよりも、セルフリフレッシュモードにあるときの方が、消費電力が少ない。
【００２３】
SDRAM(32)は、図示しないメモリ制御レジスタ(MC0)に書き込みを行うことにより、セルフリフレッシュモードで動作するよう構成できる。メモリ制御レジスタは、ソフトウェアが、特定のメモリユニットに対する所望のステータスを表すために、書き込みを行うレジスタである。システムソフトウェアがハードウェアに消費電力低下を指示すると、システムソフトウェアは、セルフリフレッシュ有効ビットを有効化する(MC0[33]=l)。一旦このビットが有効化されると、ソフトウェアはハードウェアに対する命令を生成し、この命令により、SDRAM(32)の動作モードをセルフリフレッシュモード（すなわちスリープモード）に変更する。ハードウェアは、SDRAM(32)への新たなアクセスがあったとき、すなわち、データをSDRAM(32)から取り出す必要が生じたときに、自動的にSDRAM(32)を再起動する。このアクセスが完了すると、ハードウェアはSDRAM(32)をセルフリフレッシュモードに戻す。通常のSDRAM(32)の動作を復活させるためには、システムソフトウェアがセルフリフレッシュ有効ビットを明示的にクリアしなければならない(MC0[33]=0)。
【００２４】
一旦、SDRAM(32)がスリープモードで動作するようプログラムされると、電力管理ユニット(30)は、クロック制御ユニット(36)への信号を生成することにより、CPU動作クロック周波数を、通常の動作周波数の１／２または１／６まで下げる。クロック制御ユニット(36)は、通常、CPUクロック信号やPCIクロック信号を含む全てのクロック信号を管理している。
【００２５】
それから、電力管理ユニット(30)は、いくつかの外部PCIデバイスの動作周波数を低下させあるいは動作停止させるために、多目的出力(GPO)ユニット(34)を経由してクロック制御ユニット(36)へ入るクロック制御信号の生成を始める。２つのGPOピン（図示せず）が、クロック制御ユニット(36)へ、外部PCIデバイスに対するクロックを33MHzから0MHzへ低速化するのか、あるいは、クロックスピードを0MHzから33MHzへ上昇させるのかを指示することを助けるために、設けられている。
【００２６】
一定の時間基準信号をオペレーティングシステムに対して生成するために、電力管理ユニット(30)は、PCIバスモジュール(PBM)(38)を備えている。PBM(38)は、外部デバイスと内部システムハードウェアとの間のPCIインタフェースの主要部である。PBM(38)は、外部PCIデバイスにより発生するダイレクトメモリアクセス(DMA)要求だけでなく、プログラムされた入出力(PIO)要求のタイミングも取り扱う。PIOは、CPUから発生するデータの二つのデバイス間での転送方法である。本発明の実施形態では、電力管理ユニット(30)は、PBM(38)の一部を使用して、PCIクロックとCPUクロックを用いた一定の時間基準信号を生成する（以下に説明する）。
【００２７】
システムソフトウェアは、図３のフロー図に示した電力管理スキームを実施する。表３に、図３に示す各々の遷移に必要なステップの一覧を示す。
【００２８】
【表３】
0004482275.tif 000004
【００２９】
高位モードから低位モードへの遷移、すなわち、遷移Ａ，Ｄ，Ｈがいつ起こったとしても、表３に一覧表示されたステップに加えて考慮が必要である。遷移Ａについては、システムソフトウェアは、元のオートリフレッシュカウントを読みとり、新たなオートリフレッシュカウント（SDRAM仕様に基づいた元のオートリフレッシュカウントよりも低い）をプログラムしなければならない。その後、当該ソフトウェアは、新たなリフレッシュカウントがハードウェアに確実にロードされるように、（64*オートリフレッシュカウントサイクル+ 新たなオートリフレッシュサイクル）だけ待たなければならない。
【００３０】
遷移Ｄの場合、システムソフトウェアは、元のオートリフレッシュカウントを読みとり、新たなオートリフレッシュカウント（SDRAM仕様に基づいた元のオートリフレッシュカウントよりも低い）をプログラムしなければならない。その後、当該ソフトウェアは、新たなリフレッシュカウントがハードウェアに確実にロードされるように、（64*オートリフレッシュカウントサイクルの１／２+ 新たなオートリフレッシュサイクル）だけ待たなければならない。さらに、遷移Ｈの場合、システムソフトウェアは、元のオートリフレッシュカウントを読みとり、新たなオートリフレッシュカウント（SDRAM仕様に基づいた元のオートリフレッシュカウントよりも低い）をプログラムしなければならない。
【００３１】
図４は、本発明の一実施形態にかかる電力管理システムのハードウェアのブロック図である。この図は、その一部がPBM同期ユニット（PBM_SYNC）(42)として機能するように指定されたPBMユニット(40)を含む。PBM_SYNC(42)は、PCI周波数信号（すなわちint_PCI）とCPUクロック周波数信号（すなわちCPUクロック）とを用いて、一定周波数を生成する機能を持つ。PBM_SYNC(42)は、１２分割周波数カウンタ(44)と周波数同期部(45)を有する。内部PCIクロック周波数であるint_PCI周波数信号は、１２分割周波数カウンタ(44)の入力として与えられる。１２分割周波数カウンタ(44)は、int_PCI周波数信号を１２で割り、分割されたint_PCI周波数信号を出力する。分割されたint_PCI周波数信号は、それから、信号周波数同期部(46)へ渡される。信号周波数同期部(46)は、分割されたint_PCI周波数信号とCPUクロック周波数信号とを同期させる。例えば、本発明の一実施形態において、int_PCI周波数信号は、66MHzであり、CPUクロック周波数信号は500MHzである。従って、PBM_SYNC(42)は、CPUクロック周波数信号と同期がとられた5.5MHzの周波数信号を出力する。
【００３２】
この結果としてPBM_SYNC(42)より得られた同期出力信号は、STICKDPユニット(48)に対するclock_enable信号として機能する。STICKDPユニット(48)は、オペレーティングシステムに対してイベントおよびプロセススケジューリングの周期的な割り込みを発生する回路を備えている。STICKDPユニット(48)への入力として与えられるclock_enable信号は、STICKDPユニット(48)へその動作のための時間基準を与える役割を持つ。図５，６を参照する以下の説明において、STICKDPユニット(48)の動作をより詳細に説明する。
【００３３】
STICKDPユニット(48)は、データ２ビットを、PLLユニット(50)へ渡す。このデータ２ビットは、２ビットバス（ESTAR_MODE[1:0]バス）上で渡され、Ｅスターモードレジスタの２ビット値を含む。PLL(50)は、特定の省電力モード値を格納するために電力管理スキームにより用いられる。例えば、PLL(50)は、特定の省電力モードを示す特定値を割り当てられた分周器（図示せず）を含む。さらに、いくつかの条件（後述）が満たされた場合、STICKDPユニット(48)は、プロセッサに対してトラップ信号を生成する必要があることをトラップ(TRAP)ユニット(52)に知らせるstick_alm信号を出力する。以下に、上述の構成要素についてのより詳しい説明を記載する。
【００３４】
図５は、本発明の一実施形態にかかるSTICKDPユニット(60)のハイレベルブロック図である。STICKDPユニット(60)の入出力信号は、図５および表４に示すとおりである。
【００３５】
【表４】
0004482275.tif 000005
【００３６】
ここで、図６に、表４に一覧表示された信号の機能を説明するために、本発明の一実施形態のローレベルブロック図を示す。この図には、STICKDPユニット(62)の回路と、PBM_SYNC(70)およびTRAPユニット(84)に対するSTICKDPユニット(62)のインタフェースも共に示す。
【００３７】
PBM_SYNC(70)は、上述のとおり、１２分割周波数カウンタ(72)と周波数同期部(74)とを有する。int_PCI周波数信号は、１２分割周波数カウンタ(72)に対する入力となる。１２分割周波数カウンタ(72)は、int_PCI周波数信号を１２で割り、分割されたint_PCI周波数信号を周波数同期部(74)へ出力する。周波数同期部(74)は、分割されたint_PCI周波数信号を、CPUクロック周波数信号と同期させる。周波数同期部(74)は、それから、pbm_sync_div信号を出力する。このpbm_sync_div信号は、１２分割されたint_PCI周波数信号の周波数を持ち、CPUクロック周波数信号に同期した信号である。
【００３８】
int_PCI周波数信号は、上述のように、内部PCIクロックである。本発明の一実施形態において、外部PCIクロックの周波数が33.3MHzであるとき、int_PCI周波数信号の周波数は66.67MHzである。UltraSparc-IIeの場合、外部PCIクロックは、省電力モードにかかわらず、常に固定されたままである。電力管理スキームで実行される省電力モードは、CPUコア周波数を変化させるだけであり、このスキームでサポートされる全ての省電力モードにおいて、PCIクロックは変更されずに保持される。
【００３９】
UltraSparc-IIeマイクロプロセッサを用いた本発明の一実施形態の場合、Ｅスターモード１／６をサポートするのであれば、int_PCI周波数信号が66MHzを超えてはならない。これは、CPUコア周波数とPCIコア周波数との間のインタフェースの制限によるものであり、
fCPU >= 2 fEXTERNAL_PCI
が条件となる。Ｅスターモード1/6は、通常モードにおいて500MHzで動作するプロセッサに対して、通常動作周波数の１／６の値（83.3MHz）も、
fCPU >= 2 fEXTERNAL_PCI
の条件を満たすように、選択されるものである。
【００４０】
図６に示すCPUクロック周波数信号は、CPUコア内部クロック周波数であり、一般的には500MHz以上である。
【００４１】
オペレーティングシステムが、周波数が変化する環境（すなわち省電力モードへの出入り）において、プロセスおよびイベントスケジューリングのための時間の経過を常に意識できるようにするために、本発明の実施形態は、Ｅスターモードレジスタ (ESTAR_MODE)(78)を有するSTICKDPユニット(62)と、スティック比較レジスタ(STICK_COMPARE)(80)と、スティックレジスタ(STICK_REG)(82)と、電力管理システムが用いる追加の回路を有する。STICK_COMPARE(80)とSTICK_REG(82)は、CPUクロック周波数信号が変化するか否かにかかわらず、オペレーティングシステムへ周期的な割り込みを提供する機能を持つ。すなわち、STICK_COMPARE(80)とSTICK_REG(82)は、省電力モードへの出入りの際にCPUクロック周波数信号が変化することで割り込み周期が変化して不確定なイベントスケジューリングが発生することを防止するために設けられている。
【００４２】
STICK_REG(82)は、64ビットのレジスタであり、オペレーティングシステムのカウンタとして機能し、割り込みや処理要求を発行するための一定の時間基準を提供する。
【００４３】
STICK_REG(82)(STICK_REG[63])の最上位ビットは、常に“１”であり、このビット位置はプロセッサによって書き込まれず、読み出されもしない。残りの63ビットは、オペレーティングシステム用の現在のカウントを保持する。STICK_REG(82)は、システムリセットの後にカウントを開始する。STICK_COMPARE(80)は、プロセッサによって書き込まれ、読み出される６４ビットのレジスタである。STICK_COMPARE(84)が保持するデータ値は、１２分割された内部PCIクロックの速さでSTICK_REG(82)内のデータ値と比較される。言い換えれば、STICK_COMPARE(80)は、増加するSTICK_REG(82)と比較されるタイムアウト値を格納するために設けられている。
【００４４】
本発明の一実施形態では、STICK_COMPARE(80)およびSTICK_REG(82)は、5.5MHz（１２分割された内部PCIクロック）で動作する。しかし、当業者であれば、他の実施形態において、PCI周波数に応じた異なる周波数を用いることができることは理解できるであろう。
【００４５】
上述のpbm_sync_div信号は、PBM_SYNC(70)により出力されたとき、ORゲート(76)においてmiu_stick_REG_wr_en信号とOR演算される。miu_stick_REG_wr_en信号は、図示しないメモリインタフェースユニット（ＭＩＵ）により生成される。MIUでは、STICK_REG(82)のアドレスが、read/writeアクセスのためにデコードされる。miu_stick_REG_wr_en信号は、STICK_REG(82)への書き込み動作の有効信号として機能する。ORゲート(76)からの出力信号は、実際に、STICK_REG(82)が増加しているか否かを判断するSTICK_REG(82)のクロック有効信号として機能する。ORゲート(76)によるpbm_sync_div信号とmiu_stick_REG_wr_en信号とのOR演算の主な目的は、プロセッサによるSTICK_REG(82)への書き込みプロセスが発生したときに、STICK_REG(82)が増加していないことを確認することである。miu_stick_reg_wr_en信号がpbm_sync_div信号と同時にアクティブであった場合、ORゲート(76)からの出力信号は、STICK_REG(82)へのクロック有効入力を無効化する。すなわち、STICK_REG(82)は、増加しない。miu_stick_REG_wr_en信号がアクティブでない場合、ORゲート(76)は、STICK_REG(82)へのクロック有効入力を有効化するアクティブ信号を出力する。これにより、STICK_REG(82)は増加する。
【００４６】
上述したESTAR_MODE(78)は、省電力モードを有効化または無効化するために電力管理ソフトウェアによって用いられるレジスタである。このレジスタは、種々の省電力モード（１／２、１／６モード）に入るためや、通常の動作周波数モード（１／１モード）にとどまるために主に用いられる。ESTAR_MODE(78)は、６４ビット幅を持つが、最下位の２ビットのみが使用される。この２ビットの値はPLLユニット（以下で図７を用いて説明）に送られる。当業者であれば、異なる数の省電力モードや、省電力モードの他の値を用いた他の実施形態を理解できるであろう。
【００４７】
miu_estar_MODE_wr_en信号は、ESTAR_MODE(78)への入力となり、ESTAR_MODE(78)へのクロック有効入力として用いられる。ESTAR_MODE(78)は、CPU周波数で動作するので、CPUクロック周波数も入力する。miu_estar_MODE_wr_en信号は、ESTAR_MODE (78)のアドレスをデコードする図示しないMIUから送られる。省電力モードを選択するために、プロセッサは、pdp_mcu_pio [62:0]バスを介して、ESTAR_MODE(78)へ２ビットを書き込まなければならない。pdp_mcu_pio[62:0]バスは、ESTAR_MODE (78)や他のレジスタへ書き込みを行うために、プロセッサが使用する内部バスである。miu_estar_MODE_wr_en信号がアクティブの場合、ESTAR_MODE (78)のクロック有効入力が有効化され、ESTAR_MODE (78)は、CPUクロック周波数の速さで、前記２ビットをpdp_mcu_pio[62:0]バスからラッチする。miu_estar_MODE_wr_en信号がアクティブでない場合、ESTAR_MODE (78)のクロック有効入力は無効化され、レジスタ内に存在するビット値が保持される。
【００４８】
pdp_mcu_pio [62:0]バスは、また、プロセッサがSTICK_REG (82)へデータを書き込むためにも用いられる。データは、マルチプレクサ(88)によって増加値（８９）と多重化され、STICK_REG(82)へ出力される。例えば、プロセッサが特定のデータ値をSTICK_REG(82)へ書き込む必要がある場合は、プロセッサは、そのデータを、pdp_mcu_pio[62:0]バス経由でマルチプレクサ(88)の入力へ送る。マルチプレクサ(88)は、データをSTICK_REG(82)へ出力する。STICK_REG(82)は、その後、プロセッサから受け取ったデータに基づき、増加を続ける。STICK_REG(82)は、STICK_REG(82)内に既に存在しているデータに基づいて増加し、増加演算部 (89) は、STICK_REG(82)内のデータ値を増加させ、その結果をマルチプレクサ(88)の入力へ渡す。マルチプレクサ(88)は、増加されたデータ値をSTICK_REG(82)へ出力する。STICK_REG(82) は、プロセッサからのデータをラッチするときに、CPUクロック周波数を用いる。
【００４９】
pdp_mcu_pio[62:0]バスは、プロセッサがSTICK_COMPARE(80)にデータを書き込むためにも用いられる。STICK_COMPARE(80)は、miu_stick_cmp_wr_en信号をそのクロック有効入力として用いる。miu_stick_cmp_wr_en信号は、図示しないＭＩＵにより生成される。図示しないＭＩＵは、STICK_COMPARE(80)のアドレスをデコードし、miu_stick_cmp_wr_en信号を生成する。miu_stick_cmp_wr_en信号は、アクティブである場合、STICK_COMPARE(80)のクロック有効入力を有効化する。これにより、STICK_COMPARE(80)は、 pdp_mcu_pio[62:0]バスからCPUクロック周波数の速さでデータを読み込むことが可能となる。
【００５０】
STICK_COMPARE(80)とSTICK_REG(82)は、pbm_sync_div周波数信号の速さで比較される。これは、この速さが、STICK_REG(82)が増加する速さと等しいからである。STICK_COMPARE(80)およびSTICK_REG(82)のデータ値は、排他的論理和ゲート(83)への入力となる。STICK_COMPARE (80)の各ビットは、ゲート(83)で、STICK_REG(82)の対応するビットと排他的論理和演算される。これらにビットが共にhighまたは共にlowであれば、排他的論理和ゲート(83)はlow信号を出力する。２つのDフリップフロップ(81, 87)が、STICK_COMPARE(80)と STICK_REG(82)の値を一旦比較する際に、各々のビットが排他的論理和ゲート (83)を通過するのを助けるために設けられている。第１のDフリップフロップ(81)は、第２のDフリップフロップ(87)の基準フリップフロップである。第１のDフリップフロップ(81)はpdp_mcu_pio[63]信号からのビットを入力する。第１のDフリップフロップ(81)は、CPUクロック周波数で動作し、miu_stick_cmp_wr_en信号もクロック有効入力として入力する。ソフトウェアがSTICK_COMPARE[63]へ“０”を書き込むときは、Dフリップフロップ (81)へのＤ入力がlowであるので（後述）、miu_stick_cmp_wr_en信号がアクティブになるたびに、第１のDフリップフロップ(81)へのＱの反転出力はhighとなる。これにより、CPUクロック周波数が第１のフリップフロップ(81)を振動させる。第２のDフリップフロップ(87)は、排他的論理和ゲート(83)の出力を、D入力として入力する。第２のDフリップフロップ(87)も、CPUクロック周波数によって振動する。第２のDフリップフロップ(87)へのクロック有効入力は、常にhigh（“１”）であるので、第２のDフリップフロップ(87)は常にCPUクロック周波数によって振動する。第２のDフリップフロップ(87)へのクロックパルスの各々について、パルス後のＱの反転出力のビット値は、パルス前のＤ入力のビットの反転値に等しい。第２のDフリップフロップ(87)のＱの反転出力のビット値と、第１のDフリップフロップ(81)のＱの反転出力のビット値とは、ANDゲート(85)に入力される。ANDゲート(85)への両方の入力が、STICK_COMPARE(80)とSTICK_REG(82)から送られた全てのビットについてhighであれば、ANDゲート(85)は、stick_alm信号を生成する。要約すると、排他的論理和ゲート(83)への二つの入力の値が等しい場合は、排他的論理和ゲート(83)はlowを出力し、第２のDフリップフロップ(87)は、そのＱの反転出力においてhighを出力する。そして、第１のDフリップフロップのＱの反転出力（high）に基づいて、ANDゲート(85)は、highビット値をstick_alm信号に生成する。
【００５１】
ANDゲート８５で生成されるstick_alm信号は、STICK_COMPARE(80)の値がSTICK_REG(82)の値に等しいときに生成される。一旦生成されると、stick_alm信号は、TRAPユニット(84)へ送られる。stick_alm信号を受け取ると、TRAPユニット(84)は、トラップ信号をプロセッサへ生成する。トラップは、オペレーティングシステムにより、イベントスケジューリング、プロセススケジューリング、処理プロセス要求などの管理的なタスクを実行するために用いられる。
【００５２】
前述したように、STICK_COMPARE(80)は、６４ビットのレジスタである。STICK_COMPARE(80)(STICK_COMPARE[63])の最上位ビットは、stick_alm信号の生成を有効化するか無効化するかを示すために用いられる。ソフトウェアは、STICK_COMPARE[63]へ“１”を書き込むことにより、stick_alm信号の生成を無効化できる。STICK_COMPARE(80)(STICK_COMPARE[62:0])の残りの63ビットは、STICK_REG(82)と比較すべき値を表す。
【００５３】
miu_stick_REG_rd_en信号、miu_estar_MODE_rd_en信号、miu_stick_COMPARE_rd_en信号は、読み出し動作を有効化するために、図示しないMIUによってデコードされる信号である。プロセッサが、STICK_COMPARE(80)、STICK_REG(82)、またはESTAR_MODE(78)の中のデータを読む必要が生じた場合、プロセッサは、読むべきレジスタのアドレスをロードし、図示しないMIUがそのアドレスをデコードし、所望のレジスタから対応するデータを選択するデコード信号を、マルチプレクサ(86)を通して供給する。マルチプレクサ(86)は、miu_stick_REG_rd_en信号、miu_estar_MODE_rd_en信号、およびmiu_stick_COMPARE_rd_en信号を選択入力として用い、STICK_COMPARE(80)、STICK_REG(82)、およびESTAR_MODE(78)の値を入力として用いる。例えば、プロセッサが、ESTAR_MODE(78)内のデータを読む必要が生じた場合、miu_estar_MODE_read_en信号が選択され、ESTAR_MODE (78)の値がマルチプレクサ(86)の出力へ送られる。マルチプレクサ(86)からの出力は、 mcu_pdp_pioバスを経由してプロセッサへ到達する。mcu_pdp_pioバスは、プロセッサがレジスタ(78, 80, 82)からデータを読み出すために用いる読み出しバスである。
【００５４】
図７は、本発明の一実施形態にかかるPLLユニット(121)の回路を示す。PLL制御は、PLLユニット(121)内の３つの分周器の値を変更するために必要である。 PLLユニット(121)は、PLLユニット(121)の分周器（図示せず）内にロードされた値に基づいて、システムが異なる省電力モードへ移行することを可能とためにある。この実施形態では、PLLユニット(121)内に３つの分周器を設けた。ESTAR_MODE(78)の内容に基づいて、これら３つの分周器には、別個の値がロードされる。この実施形態では、PLLユニット(121)は、図示しない分周値に基づいて、1/1,1/2,1/6省電力モードへ移行する。当業者であれば、500MHzを超える周波数で動作するシステムには、追加の分周器を用いれば良いことが分かるであろう。
【００５５】
ソフトウェアがシステムのモードの変更を決定するたびに、当該ソフトウェアはESTAR_MODE(78)に書き込む。図７は、ESTAR_MODE(78)の値によって動作周波数の変化が生じるようにするための選択の仕組みを示す。ESTAR_MODE (78)は、前述したように、システムのモードを表すために２つにビットを用いる。これらのビット、すなわち、ESTAR_MODE[1]およびESTAR_MODE[0]は、２個の異なるDフリップフロップ(120, 122)へ、Ｄ入力として、別個に入力される。Dフリップフロップ(120, 122)は、CPUクロック周波数によりそれぞれ振動する。各々のクロックパルスの後で、Dフリップフロップ(120, 122)は、各々のQ出力において、クロックパルスの前のそれぞれのD入力の値を生成する。Dフリップフロップ(120, 122)の出力である、mux_sel[1]およびmux_sel[0]は、ハードコード化パターンを入力するマルチプレクサ１２４への選択信号となる。ハードコード化パターンは、プロセッサがCPU周波数を下げるために用いる特定の省電力モード値を含む。mux_sel[1]とmux_sel[0]との組み合わせに基づいて、マルチプレクサ(124)は、ESTAR_MODE(78)で指定されたパターンを出力し、特定の省電力モード値を３つのPLL分周器にロードする。全ての省電力モードにおいて、PLL分周器の値のみが変化する。PLLユニット(121)が時間を参照するために用いる電圧制御オシレータは、周波数が全く変わらないので、PLLユニット(121)がそのロックを失うことがない。すなわち、PLLユニット(121)は、他のシステム周波数とは独立したそれ自身の基準時間を持つ。
【００５６】
図８は、本発明の一実施形態にかかるソフトウェア要件に関するフローチャートである。この図は、ソフトウェアが、ESTAR_MODE(78)(110)への二つの連続した書き込みの間、少なくともｎ回のクロックサイクル(112)待たなければならないことを示している。この待ち時間は、前回のモードスイッチから、PLLユニット(121)を安定させるために必要である。ｎ回のCPUクロックサイクルの後（すなわちタイムアウト）にのみ、後のモードを表す新たなモードビットが選択入力としてマルチプレクサ(124)へ送られる。ｎの値は、工業規格で規定されていないSDRAMを有するシステムの場合、１６以上でなければならない。規定されていないSDRAMは、本来、データをラッチするためにCPUクロックを用いるメモリである。
【００５７】
本発明の利点は、以下の一つまたはそれ以上を含む。本発明の一つまたはそれ以上の実施形態において、コンピュータシステムは、オペレーティングシステムがシステム管理タスクを実行するために利用する周波数を変更することなく、CPU周波数を低くすることにより、電力を節減することが可能である。オペレーティングシステムは、変化する可能性があるCPUクロック周波数を用いないので、オペレーティングシステムに、イベントスケジューリング、プロセススケジューリング、スレッドスケジューリング、プロセス要求等を処理するための、絶対的な時間基準が供給される。オペレーティングシステムは、CPUが省電力モード周波数の移行を完了させるのを待つ必要がない。従って、オペレーティングシステムについて、CPUクロックサイクルが無駄にならずに済む。当業者にとっては、本発明が、他の利点や特徴を有しても良いことは明らかであろう。
【００５８】
本発明を、限られた数の実施形態について説明したが、当業者であれば、ここに開示された本発明の範囲から逸脱することなく、他の実施形態を考え出すことが可能である。従って、本発明の範囲は、添付された請求の範囲にのみ限定されるものではない。
【図面の簡単な説明】
【図１】  図１は、典型的な従来技術にかかるコンピュータシステムを示す。
【図２】  図２は、本発明の一実施形態にかかる電力管理スキームのブロック図を示す。
【図３】  図３は、本発明の一実施形態にかかるプロセスを表すフローチャートを示す。
【図４】  図４は、本発明の一実施形態にかかる電力管理スキームのブロック図を示す。
【図５】  図５は、本発明の一実施形態にかかるコンピュータサブシステムのハイレベルブロック図を示す。
【図６】  図６は、本発明の一実施形態にかかる電力管理システムのローレベルブロック図を示す。
【図７】  図７は、本発明の一実施形態にかかるコンピュータサブシステムのブロック図を示す。
【図８】  図８は、本発明の一実施形態にかかる電力管理スキームのブロック図を示す。
【図１】
0004482275.tif 000006
【図２】
0004482275.tif 000007
【図３】
0004482275.tif 000008
【図４】
0004482275.tif 000009
【図５】
0004482275.tif 000010
【図６】
0004482275.tif 000011
【図７】
0004482275.tif 000012
【図８】
0004482275.tif 000013