(57)【要約】本発明は、実行可能モジュールの動作速度を属性情報として持つコードを解析して、実行可能モジュールを動作速度属性情報と関連づけて登録し、登録された実行可能モジュールを、関連する動作速度属性情報に基づいて、動作速度別にグループ化して、各グループの属性を含むファイル・ヘッダを作成し、このファイル・ヘッダを持つ実行可能ファイルを実行時にメモリにロードするときに、実行可能ファイル内の実行可能モジュール単位で、ロードのアドレス範囲に動作速度属性情報を関連づけ、実行可能モジュールを実行するときに、該実行可能モジュールのアドレスに関連する動作速度属性情報に従って、該実行可能モジュールを実行するプロセッサの動作速度を制御する。
2002088913.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサの動作速度を実行可能モジュールに応じて可変にするプロセッサ動作速度制御方法であって、
各実行可能モジュールの動作速度を属性情報として持つコードを解析して、前記実行可能モジュールを動作速度属性情報と関連づけて登録するステップと、
登録された実行可能モジュールを、関連する動作速度属性情報に基づいて、動作速度別にグループ化し、各グループの属性を含むファイル・ヘッダを作成するステップと、
前記ファイル・ヘッダを持つ実行可能ファイルを実行時にメモリにロードするときに、前記実行可能ファイル内の実行可能モジュール単位で、前記ロードのアドレス範囲に動作速度属性情報を関連づけるステップと、
実行可能モジュールを実行するときに、該実行可能モジュールのアドレスに関連する動作速度属性情報に従って、該実行可能モジュールを実行するプロセッサの動作速度を制御するステップと、
を含む、プロセッサ動作速度制御方法。
【請求項２】
前記関連づけるステップは、前記動作速度属性情報によって示される動作速度情報を所定の動作速度情報格納部に格納するステップを含む、請求項１に記載の方法。
【請求項３】
前記動作速度を制御するステップは、前記動作速度情報格納部から対応する動作速度情報を読み出して、前記プロセッサの動作速度を制御する、請求項２に記載の方法。
【請求項４】
前記動作速度情報格納部が、仮想アドレス変換機構の変換テーブルに含まれる、請求項２または３に記載の方法。
【請求項５】
前記関連づけるステップは、前記アドレス範囲を示す情報を各動作速度に対応するレジスタに格納するステップを含む、請求項１に記載の方法。
【請求項６】
前記動作速度を制御するステップは、前記実行可能モジュールのアドレスを前記レジスタに格納されている情報と比較して、該アドレスを含むアドレス範囲に対応する動作速度を与えるステップを含む、請求項５に記載の方法。
【請求項７】
プロセッサの動作速度を実行可能モジュールに応じて可変にするプロセッサ動作速度制御装置であって、
各実行可能モジュールの動作速度を属性情報として持つコードを解析して、前記実行可能モジュールを動作速度属性情報と関連づけて登録する手段と、
登録された実行可能モジュールを、関連する動作速度属性情報に基づいて、動作速度別にグループ化し、各グループの属性を含むファイル・ヘッダを作成する手段と、
前記ファイル・ヘッダを持つ実行可能ファイルを実行時にメモリにロードするときに、前記実行可能ファイル内の実行可能モジュール単位で、前記ロードのアドレス範囲に動作速度属性情報を関連づける手段と、
実行可能モジュールを実行するときに、該実行可能モジュールのアドレスに関連する動作速度属性情報に従って、該実行可能モジュールを実行するプロセッサの動作速度を制御する手段と、
を含む、プロセッサ動作速度制御装置。
【請求項８】
前記関連づける手段は、前記動作速度属性情報によって示される動作速度情報を格納する動作速度情報格納部を含む、請求項７に記載の装置。
【請求項９】
前記動作速度を制御する手段は、前記動作速度情報格納部から対応する動作速度情報を読み出して、前記プロセッサの動作速度を制御する、請求項８に記載の装置。
【請求項１０】
前記動作速度情報格納部が、仮想アドレス変換機構の変換テーブルに含まれる、請求項８または９に記載の装置。
【請求項１１】
前記関連づける手段は、各動作速度に対応して前記アドレス範囲を示す情報を格納する複数のレジスタを含む、請求項７に記載の装置。
【請求項１２】
前記動作速度を制御する手段は、前記実行可能モジュールのアドレスを前記レジスタに格納されている情報と比較して、該アドレスを含むアドレス範囲に対応する動作速度を与える手段を含む、請求項１１に記載の装置。
【発明の詳細な説明】
技術分野
本発明は、一般にプロセッサの消費電力を低減する技術に関し、特にプロセッサのクロック速度を可変にすることによって消費電力を低減する技術に関する。
背景技術
コンピュータ、特にパーソナル・コンピュータは、企業のみならず、家庭や学校にも広く普及している。パーソナル・コンピュータに使用されるマイクロプロセッサの性能向上も著しく、最近では動作クロックが１ＧＨｚを超えるものも珍しくない。しかし、動作クロックが高くなってくると、それだけ消費電力や発熱量も増えることになり、それを如何に抑えるかが高速プロセッサの課題となっている。また、ノートブック型コンピュータの場合は、電池駆動がメインのため、デスクトップ型よりも消費電力低減に対する要求が大きい。
以上のようなことから、プロセッサの消費電力および発熱量を低減するために、プロセッサのクロック速度を可変にすることが提案されている。これは、全てのプログラムを同じクロックで走らせる必要はないということに基づくものである。例えば、特開平８−７６８７４号公報には、タスク毎に必要とする中央処理装置の性能情報を設定する一つ以上の性能情報設定回路と、起動中のタスクが必要とする必要最低限の性能で動作するように中央処理装置のクロック周波数を決定する選択情報生成回路と、複数のクロック信号を発生する発信回路と、そのクロック信号の中から一つを選択して中央処理装置へ与えるクロック選択回路とを設けた、中央処理装置のクロック制御装置およびクロック制御方法が開示されている。このクロック制御は、マルチタスクの動作環境において、情報処理装置で動作させるプログラムの性能に応じて、低い性能で済む処理プログラムの実行時には、その要求性能を満足する必要最小限のＣＰＵの動作クロックに自動的に切り替えて消費電力を節約して、タスク実行中でも低消費電力での作動を実現しようとしたものである。
また、米国特許第６１３８２３２号明細書（特開平１０−２２８３８３号公報）には、複数の割込みソースのうちの一つからの割込みを受け付けて、現タスクから優先タスクへ動作を切り替え、割込みを起こした割込みソースに応じてマイクロプロセッサ命令動作レートを設定するようにしたマイクロプロセッサおよびその動作方法が開示されている。それによれば、割込みソースと命令動作レートとの関係を示すレートテーブルが設けられ、割込みを受け付けるたびにアクセスされて、その割込みソースに対応した命令動作レートを与えている。
このように、従来は、実行すべきタスクや処理すべき割込みの種類に応じてプロセッサの動作速度（クロック）を適宜切り替えることにより、消費電力および発熱量の低減を図っていた。
従来の手法は、予め決められたタスクまたは割込みを単位としてクロック速度を切り替えているが、例えば一つのタスクを取ってみても、その中には高速動作が必要なコードと、低速動作が可能なコードが混在していることがあり、そのような場合には、必ずしも最適な動作にはならない。消費電力および発熱量の低減を目指して最適な動作を実現するためには、よりきめの細かい制御、すなわちプログラムの実行アドレス、ひいては実行可能コードを単位とする制御が求められる。
従って本発明の目的は、プロセッサのクロック速度を実行アドレス、ひいては実行可能コード単位で制御することによって、よりきめの細かな電力管理を実現することにある。
本発明の他の目的は、上記のような電力管理を実現するために、プログラム作成時に、プログラムの動作クロックに対する指定ができるようにすることにある。
発明の開示
本発明の第１の態様によれば、各実行可能モジュールの動作速度を属性情報として持つコードを解析して、前記実行可能モジュールを動作速度属性情報と関連づけて登録するステップと、登録された実行可能モジュールを、関連する動作速度属性情報に基づいて、動作速度別にグループ化し、各グループの属性を含むファイル・ヘッダを作成するステップと、前記ファイル・ヘッダを持つ実行可能ファイルを実行時にメモリにロードするときに、前記実行可能ファイル内の実行可能モジュール単位で、前記ロードのアドレス範囲に動作速度属性情報を関連づけるステップと、実行可能モジュールを実行するときに、該実行可能モジュールのアドレスに関連する動作速度属性情報に従って、該実行可能モジュールを実行するプロセッサの動作速度を制御するステップとを含む、プロセッサ動作速度制御方法が提供される。
また、本発明の第２の態様によれば、各実行可能モジュールの動作速度を属性情報として持つコードを解析して、前記実行可能モジュールを動作速度属性情報と関連づけて登録する手段と、登録された実行可能モジュールを、関連する動作速度属性情報に基づいて、動作速度別にグループ化し、各グループの属性を含むファイル・ヘッダを作成する手段と、前記ファイル・ヘッダを持つ実行可能ファイルを実行時にメモリにロードするときに、前記実行可能ファイル内の実行可能モジュール単位で、前記ロードのアドレス範囲に動作速度属性情報を関連づける手段と、実行可能モジュールを実行するときに、該実行可能モジュールのアドレスに関連する動作速度属性情報に従って、該実行可能モジュールを実行するプロセッサの動作速度を制御する手段とを含む、プロセッサ動作速度制御装置が提供される。
以下、添付図面を参照しながら、本発明の好適な実施形態について詳しく説明するが、それらの実施形態はあくまで例示的なものであって、本発明はそれらに限定されるものではない。
発明を実施するための最良の態様
図１は、本発明に従って動作速度が制御されるプロセッサを組み込んだデータ処理システムのハードウェア構成の一例を示したものである。図示のデータ処理システム１００は、ノートブック型またはデスクトップ型のパーソナル・コンピュータを想定しているが、もちろん本発明は、そのようなパーソナル・コンピュータだけでなく、消費電力の低減が要求されるいかなるコンピュータにも適用可能である。
図１のデータ処理システムにおいて、本発明に従って動作クロックが制御されるプロセッサ１０２、およびメイン・メモリ１０４はＰＣＩブリッジ１０８を介してＰＣＩバス１０６に接続されている。ＰＣＩブリッジ１０８は、プロセッサ１０２のための統合メモリ・コントローラ／キャッシュ・メモリを含んでいてもよい。ＰＣＩバス１０６には、ＰＣＩブリッジ１０８の他に、ＬＡＮアダプタ１１０、ＳＣＳＩホスト・バス・アダプタ１１２、拡張バス・インタフェース１１４、オーディオ・アダプタ１１６、グラフィックス・アダプタ１１８、などのコンポーネントも接続可能である。拡張バス・インタフェース１１４は、キーボード／タッチパッド１２０、モデム１２２および追加メモリ１２４のための接続を提供する。ＳＣＳＩホスト・バス・アダプタ１１２は、ハードディスク・ドライブ１２６およびＣＤ−ＲＯＭドライブ１２８のための接続を提供する。
プロセッサ１０２で実行されるオペレーティング・システムおよびアプリケーション・プログラムは、例えばハードディスク・ドライブ１２６に記憶されており、必要に応じてメイン・メモリ１０４に取り出されて実行される。
次に、図１のようなデータ処理システムにおいて、オペレーティング・システムの制御のもとにアプリケーション・プログラムを実行するときに、本発明に従ってプログラムの実行可能コード単位にプロセッサ１０２のクロック速度を可変にする手法について、図２〜図１２を参照して説明する。
図２は本発明の基本構成を示したもので、実行可能モジュール（関数）の動作速度を属性情報として持つプログラムを記述したソース・コード２０２と、該コードを解析して、実行可能モジュールを動作速度属性情報と関連づけて登録するコンパイラ２０４と、登録された実行可能モジュールを、関連する動作速度属性情報に基づいて、動作速度別にグループ化し、各グループの属性を含むファイル・ヘッダを作成するリンカ２０６と、このファイル・ヘッダを持つ実行可能ファイルを実行時にメモリにロードするときに、実行可能ファイル内の実行可能モジュール単位で、対応する動作速度属性情報を所定の動作速度情報格納部に格納するＯＳ管理プログラム２０８と、実行可能モジュールを実行するときに動作速度情報格納部から対応する動作速度情報を読み出すプログラム実行管理部２１０と、読み出された動作速度情報に基づいて、実行可能モジュールを実行するプロセッサ１０２の動作速度を制御するクロック制御部２１２とを含んでいる。ソース・コード２０２、コンパイラ２０４およびリンカ２０６の実施形態としては、図１で示されるデータ処理システム上で実現される場合と、他のデータ処理システム上で実現される場合（プロセッサ１０２のアーキテクチャが異なる場合はクロスコンパイル環境の場合）の両方が考えられる。ＯＳ管理プログラム２０８の実施形態は、図１で示されるデータ処理システム上で動作するオペレーティング・システムの一部として実現される。また、プログラム実行管理部２１０およびクロック制御部２１２の実施形態は、プロセッサ１０２の内部機構として実現される。
ソース・コード２０２の一部の例を図３に示す。図３のソース・コードはＣ言語で記述されているが、他の言語であってももちろん差し支えない。図３において、“＃ｐｒａｇｍａ”はプラグマ・ディレクティブと呼ばれる記述子で、プログラマが対応する関数の属性を指定できるようになっている。図３（Ａ）の例では、ＦｕｎｃｔｉｏｎＨ（）は、高速実行用のアドレス領域にロードされ、高速で実行される関数（以下、“高速動作関数”という）として指定され、ＦｕｎｃｔｉｏｎＬ（）は、低速実行用のアドレス領域にロードされ、低速で実行される関数（以下、“低速動作関数”という）として指定されている。また、図３（Ｂ）に示すように、プラグマ・ディレクティブによる動作速度設定をオーバーライドするプロセッサ命令を使用することもできる。図３（Ｂ）の例では、ちゅうそくで実行される関数（以下、“中速動作関数”という）として指定されたＦｕｎｃｔｉｏｎＭ（）が、通常処理の途中で、プロセッサ命令“ｈｉｇｈｃｌｋ”により高速クロックに切り替えられ、更に、別のプロセッサ命令“ｒｓｔｃｌｋ”により元のクロックに戻されている。これらのプロセッサ命令は、例えばプロセッサ固有ライブラリ関数を提供することによって実行可能となる。
図３に示したようなプラグマ・ディレクティブにより、コードの最適動作クロックに関するプログラマの知見を、最小実行可能モジュール単位でオブジェクト・コードに反映させることができる。なお、図３の例では、高速動作、中速動作および低速動作が全て明示的に指定されているが、特定の速度（例えば、高速）をデフォルトとして、他の速度（例えば、中速および低速）だけを明示的に指定するようにしてもよい。また、速度の種類は、ここでは３種類であるが、プロセッサの能力に応じて、高速および低速の２種類でもよく、あるいは４種類以上でも構わない。
コンパイラ２０４は、ソース・コード２０２を解析することにより、図４に示すように、オブジェクト・コードと、プラグマ・ディレクティブで指定された動作速度を属性として含む関数登録テーブルとを作成する。動作速度に関するプラグマ・ディレクティブをコンパイラ２０４で解析できるようにすることは、当業者であれば容易になし得るであろう。図４の構造は、コンパイラ２０４が解析した各関数についての情報を登録する関数登録部４０２、登録された各関数の名前を登録する関数名部４０４、各関数のクロック速度やコード・サイズなどの属性を登録する関数属性部４０６、および各関数のオブジェクト・コードを含むオブジェクト・コード部４０８から成っている。関数登録部４０２は、登録関数ごとに、名前ポインタ（ＮａｍｅＰｔｒ）４０２Ａ、属性ポインタ（ＡｔｔｒＰｔｒ）４０２Ｂ、およびオブジェクト・ポインタ（ＯｂｊＰｔｒ）４０２Ｃを備えている。名前ポインタ４０２Ａおよび属性ポインタ４０２Ｂは、関数名部４０４および関数属性部４０６中の対応する記憶位置をそれぞれ指定する。
関数登録部４０２のオブジェクト・ポインタ４０２Ｃは、オブジェクト・コード部４０８における当該関数のオブジェクト・コードの開始アドレスを指定する。図４の例では、オブジェクト・コード部４０８は、高速動作関数、すなわちＦｕｎｃｔｉｏｎＨのオブジェクト・コードを含む領域４０８Ａと、低速動作関数、すなわちＦｕｎｃｔｉｏｎＬのオブジェクト・コードを含む領域４０８Ｂとを有する。
次に、図３（Ａ）のソース・コードを例にとって、図４の構成を生成するために、コンパイラ２０４によって実行され登録操作について説明する。コンパイラ２０４は、最初のプラグマ・ディレクティブ“＃ｐｒａｇｍａ（ＨＩＧＨ＿ＳＰＥＥＤ，ＦｕｎｃｔｉｏｎＨ）”を解析して、ＦｕｎｃｔｉｏｎＨを最初の関数“Ｆｕｎｃｔｉｏｎ＃１”として関数登録部４０２に登録する。その際、関数名“ＦｕｎｃｔｉｏｎＨ”を関数名部４０４に登録し、その属性（高速属性、コード・サイズなど）を関数属性部４０６に登録し、オブジェクト・コードをオブジェクト・コード部４０８Ａに登録すると共に、関数登録部４０２において、関数名部４０４への名前ポインタ４０２Ａ、関数属性部４０６への属性ポインタ４０２Ｂ、およびオブジェクト・コード部４０８Ａへのオブジェクト・ポインタ４０２Ｃをそれぞれ設定する。コンパイラ２０４は、２番目のプラグマ・ディレクティブ“＃ｐｒａｇｍａ（ＬＯＷ＿ＳＰＥＥＤ，ＦｕｎｃｔｉｏｎＬ）”についても同様な登録操作を行う。引数ａｒｇ１、ａｒｇ２・・・を含む関数は、図３では、値を返さないｖｏｉｄ型として指定されているが、もちろん他のデータ型も可能である。
次に、コンパイラ２０４が作成した図４のようなテーブル構造を基に、オブジェクト・コードを可能な限り同一のブロックに集積するリンカ２０６について説明する。リンカは、図４のオブジェクト・コード部４０８に登録されている各関数を動作速度別にグループ化するもので、図５の例では、オブジェクト・コード１に含まれる高速動作関数コード１、ＦｕｎｃｔｉｏｎＨ１、およびオブジェクト・コード２に含まれる高速動作関数コード２、ＦｕｎｃｔｉｏｎＨ２が高速動作関数グループ５０２にまとめられ、オブジェクト・コード２に含まれる中速動作関数コード１、ＦｕｎｃｔｉｏｎＭ１、が中速動作関数グループ５０４に入れられ、そしてオブジェクト・コード１に含まれる低速動作関数コード１、ＦｕｎｃｔｉｏｎＬ１、およびオブジェクト・コード２に含まれる低速動作関数コード２、ＦｕｎｃｔｉｏｎＬ２、が低速動作関数グループ５０６にまとめられる。このように、リンカは、生成されたオブジェクト・コードを同一動作速度のモジュールごとにグループ化することによって、動作速度ごとに分割された実行アドレス範囲のフラグメンテーションを避ける。こうしてできあがった情報に基づいて、リンカは図６に示すようなファイル・ヘッダを作成する。
図６において、ファイル・ヘッダ部６０２は、グループごとに一つのエントリを有し、各エントリは、対応する関数グループへのオブジェクト・ポインタ６０２Ａと、グループのサイズ情報６０２Ｂと、動作速度情報６０２Ｃ（高速クロック、中速クロックまたは低速クロック）とを含んでいる。グループ・オブジェクト・ポインタ６０２Ａは、高速動作関数グループ６０４、中速動作関数グループ６０６および低速動作関数グループ６０８のいずれかの開始アドレスを指定する。
リンカ２０６がファイル・ヘッダを作成すると、ＯＳ管理プログラム２０８は、ファイル・ヘッダに記述された、各実行可能モジュールおよびその動作速度情報を読み出し、当該モジュールが指定された動作速度で実行できるように、モジュールのロード領域を確保することによってそのアドレスを決定し、且つそのアドレス領域に対応した動作速度情報格納部に動作速度情報を格納する。図７の仮想アドレス変換機構を例にとって、ＯＳ管理プログラム２０８の動作について説明する。
図７の上半分に示されているのは周知の仮想アドレス変換機構であって、ページ・ディレクトリ（またはセグメント・テーブル）７０２およびページ・テーブル７０４を使って、仮想（論理）アドレス７０６を物理アドレス７０８に変換する。仮想アドレス７０６は、ページ・ディレクトリ番号Ｄ、ページ・テーブル番号Ｔおよびオフセットから成る。ページ・ディレクトリ番号Ｄは、ページ・ディレクトリ・ベースアドレス・レジスタ（ＰＤＢＲ）に格納されているベースアドレスに加算されて、特定のページ・ディレクトリ・エントリ（ＰＤＥ）を選択する。選択されたＰＤＥは、ページ・テーブル７０４のベースアドレスとして使用され、それにページ・テーブル番号Ｔが加算されて、特定のページ・テーブル・エントリＰＴＥを選択する。ＰＴＥはフレーム（ページ・アドレス）を含んでおり、これが仮想アドレス中のオフセットと連結されて、物理アドレス７０８を構成する。
図７の下半分は、本発明に従う、仮想アドレス変換機構の改良部分を示している。すなわち、ページ・テーブル７０４の各エントリに、動作速度情報を示す制御ビットが設けられる。図７の例では、制御ビットは２ビットであり、“１１”が高速動作を表し、“１０”が中速動作を表し、“０１”が低速動作を表している。
ＯＳ管理プログラム２０８は、リンカ２０６が作成したファイル・ヘッダに記述されている実行可能モジュールおよび対応する動作速度制御情報を読み出し、動作速度が同じ実行可能モジュールを物理アドレス・マップ７１２の特定のページ領域に割り付けると共に、該ページ領域に対応するページ・テーブル・エントリの動作速度制御ビットを、ファイル・ヘッダから読み出した動作速度制御情報に従って設定する。図７の例では、ＯＳ管理プログラム２０８は、高速動作関数“ＦｕｎｃｔｉｏｎＨ１”および“ＦｕｎｃｔｉｏｎＨ２”を第１のページ領域７１２Ａに割り付け、中速動作関数“ＦｕｎｃｔｉｏｎＭ１”を第２のページ領域７１２Ｂに割り付け、低速動作関数“ＦｕｎｃｔｉｏｎＬ１”および“ＦｕｎｃｔｉｏｎＬ２”を第３のページ領域７１２Ｃに割り付ける。更に、ＯＳ管理プログラム２０８は、ページ領域７１２Ａ、７１２Ｂおよび７１２Ｃに対応するページ・テーブル・エントリの動作速度制御ビットをそれぞれ“１１”、“１０”および“０１”に設定する。これにより、第１のページ領域７１２Ａは高速動作クロック・ページ領域として指定され、第２のページ領域７１２Ｂは中速動作クロック・ページ領域として指定され、第３のページ領域７１２Ｃは低速動作クロック・ページ領域として指定される。
図７のような仮想アドレス変換機構を持たないプロセッサの場合は、例えば図８に示すように、外部Ｉ／Ｏレジスタまたはプロセッサ内部レジスタとして、複数の実行アドレス範囲および対応する動作速度制御ビットを格納する範囲設定レジスタ８０２、８０４および８０６を設ければよい。高速動作クロック範囲設定レジスタ８０２は、物理アドレス・マップ８０８において、高速動作関数がロードされるアドレス領域８０８Ａの開始アドレス“Ａｄｄｒ＿Ｈ”および長さ“Ｌｅｎｇｔｈ＿Ｈ”と、制御ビット“１１”を格納し、中速動作クロック範囲設定レジスタ８０４は、物理アドレス・マップ８０８において、中速動作関数がロードされるアドレス領域８０８Ｂの開始アドレス“Ａｄｄｒ＿Ｍ”および長さ“Ｌｅｎｇｔｈ＿Ｍ”と、制御ビット“１０”を格納し、そして低速動作クロック範囲設定レジスタ８０６は、物理アドレス・マップ８０８において、低速動作関数がロードされるアドレス領域８０８Ｃの開始アドレス“Ａｄｄｒ＿Ｌ”および長さ“Ｌｅｎｇｔｈ＿Ｌ”と、制御ビット“０１”を格納する。なお、レジスタ８０２〜８０６が高速用、中速用および低速用にそれぞれ固定されている場合は、制御ビットは不要であるが、各レジスタの役割が動的に変わる場合は、動作速度を指定する制御ビットが必要になる。
ＯＳ管理プログラム２０８の更に簡単な例としては、ＯＳ管理プログラム２０８と同等の機能と、実行可能なプログラム部分の機能とが一体化された構造をしており、且つ実行可能コードのアドレス・ラベルを直接参照できるファームウェアのような形態をとることもできる。その場合、当該ファームウェアのＯＳ管理プログラム機能部分が、高速動作コード、中速動作コードおよび低速動作コードを分離するアドレス・ラベルの直接参照によって、図７または図８に示した動作速度情報格納部（制御ビット）に制御情報を格納してもよい。この例では、実行可能プログラムにヘッダ情報は必要ないので、コンパイラ２０４およびリンカ２０６による、クロック速度の属性管理の機能は省略できる。
ＯＳ管理プログラム２０８による実行可能ファイルのロードおよび動作速度制御情報の設定が終わると、プログラム実行管理部２１０は、ロードされた実行可能ファイル内のコードを指定された動作速度で実行するために、実行すべきコードのアドレスに対応する動作速度制御ビットを読み出して、対応するクロック制御信号をクロック制御部２１２へ供給し、該クロック制御部２１２により調整された動作速度でコードを実行する。
クロック制御部２１２へ供給されるクロック制御信号を発生するための回路の一例を図９に示す。図７のページ・テーブル７０４または図８の範囲設定レジスタ８０２〜８０６の一つから読み出された動作速度制御ビット（本実施形態では２ビット）はクロック制御信号デコード回路９０２に入力される。デコード回路９０２は受け取った制御ビットをデコードして、高速、中速および低速のクロックにそれぞれ対応する３本の出力線のうちの対応する１本をアクティブにする。クロック制御信号イネーブル回路９０４は、デコード回路９０２の出力信号および実行アドレス有効タイミング信号に応答して、対応する高速（Ｈ）クロック信号、中速（Ｍ）クロック信号、または低速（Ｌ）クロック信号を出力する。実行アドレス有効タイミング信号は、プロセッサ２０２が実行するコードのアドレスがアドレス・バス（図示せず）上で有効であるタイミングを示す。
プロセッサ２０２が仮想アドレス変換機構を持っている場合は、仮想アドレスによって指定されたページ・テーブル・エントリに含まれる動作速度制御ビットをデコード回路９０２へ供給すればよいが、仮想アドレス変換機構を持たないプロセッサの場合は、図１０に示すようなアドレス比較が必要になる。図１０において、実行すべきコードのアドレスがアドレス比較部を構成する３つの比較器１００２、１００４および１００６の第１の入力に供給される。比較器１００２の第２の入力は、図８に示した範囲設定レジスタ８０２から、高速動作クロック・アドレス領域８０８Ａのアドレス範囲を示す開始アドレス“Ａｄｄｒ＿Ｈ”および長さ“Ｌｅｎｇｔｈ＿Ｈ”を受け取り、比較器１００４の第２の入力は、範囲設定レジスタ８０４から、中速動作クロック・アドレス領域８０８Ｂのアドレス範囲を示す開始アドレス“Ａｄｄｒ＿Ｍ”および長さ“Ｌｅｎｇｔｈ＿Ｍ”を受け取り、比較器１００６の第２の入力は、範囲設定レジスタ８０６から、低速動作クロック・アドレス領域８０８Ｃのアドレス範囲を示す開始アドレス“Ａｄｄｒ＿Ｌ”および長さ“Ｌｅｎｇｔｈ＿Ｌ”を受け取る。実行アドレスがいずれかのアドレス範囲内にあると、そのアドレス範囲に対応する比較器がクロック制御信号イネーブル回路９０４の対応する入力をアクティブにする。図１０は、レジスタ８０２〜８０６に制御ビットが格納されていない例を示しているが、前述のように、各レジスタの役割が固定されていない場合は、動作速度を示す制御ビットが必要であり、その場合は、比較器１００２〜１００６の出力に応じて、対応するレジスタに格納されている制御ビットがクロック制御信号デコード回路９０２に供給される。デコード回路９０２は図１０には示されていないが、制御ビットを使う場合は当然必要になる。
クロック制御部２１２は、クロック制御信号イネーブル回路９０４の出力を受け取って、対応する可変クロック信号を供給するもので、図１１に示すような分周器１１０２で構成することができる。分周器１１０２は、クロック制御信号イネーブル回路９０４がＨクロック信号を出力した場合は、図示しない発振器からシステム・クロックとして供給される外部ベース・クロック信号をそのまま出力し、Ｍクロック信号を受け取った場合は、システム・クロックを２分の１に分周して出力し、Ｌクロック信号を受け取った場合は、システム・クロックを３分の１に分周して出力する。ここで、１、２分の１および３分の１という分周比は例示に過ぎず、他の比率を採用することも可能である。
図１１は、プロセッサ命令による動作速度の変更（オーバーライド）がない場合を示しているが、図３（Ｂ）のソース・コードのように、途中にオーバーライド命令およびオーバーライドをキャンセルする命令が挿入されていると、それをサポートするための追加回路が必要になる。その一例を図１２に示す。追加された回路はオーバーライド信号選択回路１２０２である。オーバーライド信号選択回路１２０２は、図１１と同様のクロック信号を受け取る入力端子１Ａ、２Ａ、３Ａの他に、オーバーライド用のクロック信号を受け取る入力端子１Ｂ、２Ｂ、３Ｂを有し、オーバーライド命令が検出されてオーバーライド・イネーブル信号がアクティブになっていると、Ｈ、Ｍ、Ｌの各クロック信号の代わりに、オーバーライド命令によって指定されたオーバーライド・クロック信号を出力端子１Ｙ、２Ｙ、３Ｙから分周器１１０２に供給する。
以上、本発明の好ましい実施形態について説明してきたが、本発明は上述の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の範囲内で様々な修正、変更、追加が可能であることは言うまでもない。
【図面の簡単な説明】
図１は、本発明に従って動作速度が制御されるプロセッサを組み込んだデータ処理システムのハードウェア構成の一例を示すブロック図である。
図２は、本発明の基本構成を示すブロック図である。
図３は、本発明に従って動作速度を制御するための特殊な記述子を含むソース・コードの一部を示す図である。
図４は、図３のソース・コードをコンパイラが解析した結果を示す図である。
図５は、リンカによるオブジェクト・コードの再配置の様子を示す図である。
図６は、リンカが作成するファイル・ヘッダの一例を示す図である。
図７は、仮想アドレス変換機構を利用した動作速度制御の一例を示すブロック図である。
図８は、仮想アドレス変換機構を持たないプロセッサで動作速度制御を実行するためのレジスタ構成例を示すブロック図である。
図９は、動作速度制御ビットをデコードして、選択されたクロック信号を発生するための回路例を示すブロック図である。
図１０は、仮想アドレス変換機構を持たないプロセッサでクロック制御を行うためのアドレス比較を示すブロック図である。
図１１は、可変クロック信号を発生するための回路を示すブロック図である。
図１２は、図１１の可変クロック信号発生回路でクロック・オーバーライド命令をサポートするための回路例を示すブロック図である。
【図１】
2002088913.tif 000003
【図２】
2002088913.tif 000004
【図３】
2002088913.tif 000005
【図４】
2002088913.tif 000006
【図５】
2002088913.tif 000007
【図６】
2002088913.tif 000008
【図７】
2002088913.tif 000009
【図８】
2002088913.tif 000010
【図９】
2002088913.tif 000011
【図１０】
2002088913.tif 000012
【図１１】
2002088913.tif 000013
【図１２】
2002088913.tif 000014
【国際調査報告】
2002088913.tif 000015
2002088913.tif 000016
2002088913.tif 000017
2002088913.tif 000018