(57)【特許請求の範囲】
【請求項１】
プロセスを処理する演算部と、
処理中の割り込みを禁止する割り込み禁止プロセスの処理時間を記憶する記憶部と
を有するプロセッサシステムであって、前記演算部は、
外部から割り込み要求されたプロセスが割り込み禁止プロセスである場合に、割り込み要求の受信時に実行中のプロセスの実行期限までの時間を算出し、割り込み要求された割り込み禁止プロセスに対応する処理時間を前記記憶部から読み出し、算出した前記実行期限までの時間が前記記憶部から読み出した前記処理時間以上である場合に、前記割り込み要求を受け付ける
プロセッサシステム。
【請求項２】
プロセスを処理する演算部と、処理中の割り込みを禁止する割り込み禁止プロセスの処理時間を記憶する記憶部を有するプロセッサシステムの制御プログラムであって、前記演算部に、
外部から割り込み要求されたプロセスが割り込み禁止プロセスである場合に、割り込み要求の受信時に実行中のプロセスの実行期限までの時間を算出し、
割り込み要求された割り込み禁止プロセスに対応する処理時間を前記記憶部から読み出し、
算出した前記実行期限までの時間が前記記憶部から読み出した前記処理時間以上である場合に、前記割り込み要求を受け付ける
処理を実行させるプロセッサシステムの制御プログラム。
【請求項３】
プロセスを処理する演算部と、処理中の割り込みを禁止する割り込み禁止プロセスの処理時間を記憶する記憶部を有するプロセッサシステムの制御方法であって、前記演算部が、
外部から割り込み要求されたプロセスが割り込み禁止プロセスである場合に、割り込み要求の受信時に実行中のプロセスの実行期限までの時間を算出し、
割り込み要求された割り込み禁止プロセスに対応する処理時間を前記記憶部から読み出し、
算出した前記実行期限までの時間が前記記憶部から読み出した前記処理時間以上である場合に、前記割り込み要求を受け付ける
処理を実行するプロセッサシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセスの割り当てまたはドライバの割り当てを制御するプロセッサシステム、制御プログラム、および制御方法に関する。また、本発明は、プロセッサへ供給するクロックの周波数を制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来から、コンピュータシステムにおいて、デバイスからの割込信号に対して、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）で実行中のプロセスを退避し、割込信号に対する割込処理を行うことで、デバイスに対応する処理を高速で行う技術が存在する。デバイスに対応する処理を、デバイスドライバと称し、デバイスドライバの動作としては、１回の割込信号で完結する単動作型のドライバと、１回の割込信号が発生すると、一定時間間隔などで連続して割込信号が発生する連続動作型のドライバとが存在する。
【０００３】
単動作型のドライバは、デバイスのレジスタセット操作に対し、ソフトウェアフレンドリなインターフェースに変更する。単動作型のドライバは、たとえば、キーボードのドライバ、マウスのドライバ等が当てはまる。連続動作型のドライバは、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ，  Ｆｉｒｓｔ  Ｏｕｔ）で管理されているバッファの枯渇やバッファフル状態の割込信号に対し、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）設定を行うことで、データ転送を行う。連続動作型のドライバは、たとえば、ディスプレイのドライバや、カメラのドライバ等が当てはまる。
【０００４】
連続動作型のドライバには、データ転送となる対象データの仕様により、デッドライン時間が存在する場合が多い。たとえば、ディスプレイのドライバは、ディスプレイが６０［Ｈｚ］にてリフレッシュする場合、デッドライン時間として約０．０１７［秒］以内にデータを転送するという仕様が存在する。
【０００５】
カメラドライバを例に挙げると、カメラデバイスは入力装置として端末に実装され、撮影と同時に１ラインずつカメラデバイスからの入力データがラインバッファに蓄えられる。ラインバッファは該ラインバッファの容量の１／２となると、割り込み処理を発生させ、該ラインバッファに蓄えられたデータは画像処理や圧縮のためにＤＭＡ（Ｄｉｒｅｃｔ
Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を用いて共有メモリへ転送される。
【０００６】
また、シングルコアプロセッサシステムにおいては、複数のプロセスを１つのＣＰＵで該プロセスの処理時間に基づいて実行を切り替える技術が知られている（たとえば、下記特許文献１参照。）。
【０００７】
また、マルチコアプロセッサシステムにおいては、各ドライバの割り当ては該システム起動時に決定される。たとえば、マルチコアプロセッサのうちの１つのＣＰＵをドライバ専用のＣＰＵとすることにより、割り込み処理が発生してもプロセスを退避することなく実行することができる技術が知られている（たとえば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−２８５０９３号公報
【特許文献２】特開平４−３３１３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、プロセスには割り込み禁止が定義されている処理を有する場合がある。該割り込み禁止が定義されている処理を実行中にドライバの割り込み処理が発生しても、直ちに該割り込み処理は実行されない。上述のように連続動作型のドライバにはデッドライン時間があるため、もし割り込み禁止が定義されている処理の処理時間が該デッドライン時間よりも長いと、連続動作型のドライバはデッドライン時間を遵守することができない問題点があった。
【００１０】
たとえば、上述のカメラドライバのようにラインバッファのデータを共有メモリへ転送する機能のデッドライン時間が遵守できないと、転送できなかったデータを失うため、撮影した画像のデータが抜けてしまい、画像が粗くなってしまう。
【００１１】
上述のようにマルチコアプロセッサシステムにおいては、ドライバ専用のＣＰＵを設けることで、プロセスの割り込み禁止が定義されている処理と重なることがない。しかしながら、プロセス専用のＣＰＵでは複数のプロセスが起動され、ドライバ専用のＣＰＵではいずれのドライバも実行されていない場合、プロセス専用のＣＰＵのみに負荷が集中してしまう問題点があった。
【００１２】
本発明は、上述した従来技術による問題点を解消するため、ドライバのデッドライン時間を遵守しつつ、余力のあるＣＰＵにプロセスを割り当てることができるプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の一の観点によれば、プロセスの割り当て指示を検出し、前記プロセスの割り当て指示が検出されると、マルチコアプロセッサのうちの任意のコアに割り当てられた割り込み処理の呼び出し時刻から前記割り込み処理の実行期限までの時間から前記割り込み処理の処理時間を除いた残余の時間を取得し、取得された残余の時間が前記プロセスの割り込み禁止が定義された処理の処理時間以上であるか否かを判断し、前記残余の時間が前記プロセスの割り込み禁止が定義された処理の処理時間以上であると判断された場合、前記任意のコアに前記プロセスを割り当てるプロセッサシステム、制御プログラム、および制御方法が提供される。
【００１４】
本発明の他の観点によれば、対象割り込み処理の実行時間と、マルチコアプロセッサのうちの任意のコアに割り当てられた割当済みの割り込み処理の実行時間とを加算し、前記任意のコアが前記対象割り込み処理の呼び出し時からの実行期限および前記割当済みの割り込み処理の呼び出し時からの実行期限を遵守できるか否かを加算結果に基づいて判断し、前記対象割り込み処理の呼び出し時からの実行期限および前記割当済みの割り込み処理の呼び出し時からの実行期限を遵守できると判断された場合、前記任意のコアに前記対象割り込み処理を割り当てるマルチコアプロセッサシステム、割り当てプログラム、および割り当て方法が提供される。
【００１５】
本発明の他の観点によれば、マルチコアプロセッサのうちの任意のコアに割り当てられた割り当て済のプロセスの終了を検出し、前記割り当て済のプロセスの終了を検出すると、前記任意のコアにいずれのプロセスも割り当てられていないかを判断し、前記任意のコアにいずれのプロセスも割り当てられていないと判断された場合、前記任意のコアに割り当てられた割り込み処理の呼び出し時刻から前記割り込み処理の実行期限までの時間から前記割り込み処理の処理時間を除いた残余の時間を取得し、前記任意のコアへ供給されるクロックの周波数を前記取得手段により取得された残余の時間と前記割り込み処理の処理時間との比率に応じて決定し、決定結果を前記クロックの供給源へ与えるマルチコアプロセッサシステム、制御プログラム、および制御方法が提供される。
【発明の効果】
【００１６】
本プロセッサシステム、制御プログラム、および制御方法によれば、ドライバのデッドライン時間を遵守することができるＣＰＵにプロセスを割り当てることができるという効果を奏する。また、本マルチコアプロセッサシステム、割り当てプログラム、および割り当て方法によれば、複数のドライバが呼び出されても、各ドライバのデッドライン時間を遵守することができるという効果を奏する。また、本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、各ドライバのデッドライン時間を遵守しつつ、低消費電力化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１７】
【図１】本発明の一の例を示す説明図である。
【図２】本発明の他の例を示す説明図である。
【図３】ＥＳＬモデルの一例を示す説明図である。
【図４】実施の形態１にかかる設計支援装置のハードウェアを示すブロック図である。
【図５】ＥＳＬシミュレーション例を示す説明図である。
【図６】ドライバのＣＰおよびＤｔの出力例を示す説明図である。
【図７】プロセスのＣＰの出力例を示す説明図である。
【図８】設計支援装置によるドライバのＣＰおよびＤｔの算出処理手順を示すフローチャートである。
【図９】マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図１０】起動時に関するマルチコアプロセッサシステム９００の機能ブロック図である。
【図１１】ハンドラの割り当て例を示す説明図である。
【図１２】マルチコアプロセッサシステム９００起動時のドライバの割り当て処理手順を示すフローチャートである。
【図１３】運用時に関するマルチコアプロセッサシステム９００の機能ブロック図である。
【図１４】Ａｐｐの算出例を示す説明図である。
【図１５】プロセスＡの割り当て例を示す説明図である。
【図１６】プロセスＢの割り当て例を示す説明図である。
【図１７】プロセスＣの割り当て例を示す説明図である。
【図１８】算出処理手順を示すフローチャートである。
【図１９】マスタＯＳによる割り当て処理手順例１を示すフローチャートである。
【図２０】ＯＳ９１１による割り当て処理手順例２を示すフローチャートである。
【図２１】クロック周波数に関するマルチコアプロセッサシステム９００の機能ブロック図である。
【図２２】ＯＳによるクロック周波数の制御処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下に添付図面を参照して、本発明にかかるプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。
【００１９】
図１は、本発明の一の例を示す説明図である。まず、ＣＰＵ＃０が、プロセス１の割り当て指示を検出する。そして、ＣＰＵ＃０が、ＣＰＵ＃０に割り当てられた割り込み処理であるハンドラＡのイベントの発生時刻からハンドラＡの実行期限までの時間（ハンドラＡのＤｔ）からハンドラＡの処理時間であるハンドラＡのＣＰを除いた残余の時間を取得する。
【００２０】
つぎに、ＣＰＵ＃０が、取得した残余の時間がプロセス１の割り込み禁止が定義された処理の処理時間（プロセス１のＣＰ）以上であるか否かを判断する。すなわち、ここでは、ＣＰＵ＃０にプロセス１が割り当てられた場合に、プロセス１の実行中にハンドラＡのイベントが発生しても、ハンドラＡのＤｔを遵守することができるか否かを判断している。
【００２１】
図１で示すように、ＣＰＵ＃０にプロセス１が割り当てられた場合、プロセス１の割り込み禁止が定義されている処理が実行中にハンドラＡのイベントが発生すると、ハンドラＡのＤｔを遵守できない場合があると判断される。よって、ＣＰＵ＃０はプロセス１をＣＰＵ＃０に割り当てない。
【００２２】
図２は、本発明の他の例を示す説明図である。まず、ＣＰＵ＃０が、プロセス１の割り当て指示を検出する。そして、ＣＰＵ＃０が、ＣＰＵ＃１に割り当てられた割り込み処理であるハンドラＢのイベントの発生時刻からハンドラＢの実行期限までの時間（ハンドラＢのＤｔ）からハンドラＢの処理時間であるハンドラＢのＣＰを除いた残余の時間を取得する。
【００２３】
つぎに、ＣＰＵ＃０が、取得した残余の時間がプロセス１の割り込み禁止が定義された処理の処理時間（プロセス１のＣＰ）以上であるか否かを判断する。すなわち、ここでは、ＣＰＵ＃１にプロセス１が割り当てられた場合に、プロセス１の実行中にハンドラＢのイベントが発生しても、ハンドラＢのＤｔを遵守することができるか否かを判断している。
【００２４】
図２で示すように、プロセス１の実行中にハンドラＢのイベントが発生すると、ハンドラＢのＤｔを遵守することができると判断される。よって、ＣＰＵ＃０はプロセス１をＣＰＵ＃１に割り当てる。
【００２５】
まず、実施の形態１では各ドライバの実行時間の算出と各ドライバのデッドラインについて説明する。つぎに、実施の形態２ではマルチコアプロセッサの起動時と、割り込みハンドラの割り当てと、プロセスの割り当てと、について説明する。
【００２６】
（実施の形態１）
実施の形態１ではＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）モデルを用いて各ドライバの実行時間の算出について説明する。ここで、ＥＳＬモデルとはハードウェアデバイスのビヘイビア（ふるまい）をもとに記述することによりハードウェア環境をシミュレーション化する技術である。たとえば、ＣＰＵのＥＳＬモデルでは命令発行の電気回路的なメカニズムをそのままシミュレーションするのではなく、発行命令とそれに要する時間で表現する。
【００２７】
また、バスのＥＳＬモデルでは同様に、回路メカニズムによるデータ伝播の遅延を厳密に計算するのではなく、アクセス要求により設計上のレイテンシパターンを掛け合わせて、動作と時間概念をビヘイビア（ふるまい）としてシミュレーションしていくこととなる。
【００２８】
従来、シミュレーションというとＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）などの回路設計情報をもとに実際に半導体を実装することなくシミュレーションを行うことであり、実デバイスと同等の動作を実現することで検証を行うために用いられていた。
【００２９】
しかしながら、回路レベルの詳細シミュレーションを実施するには非常に時間がかかり（通常、実デバイスのスピードに対し数千万から数億分の一の処理時間）、アプリケーションを動作させながらのシステム全体の挙動を解析するのは現実的に困難であった。一方で、ＥＳＬモデルでは処理と時間の概念をふるまいとして解析するため回路のシミュレーションを行うまでもなく概ねの処理時間を評価することが可能な環境である。
【００３０】
（ＥＳＬモデル）
図３は、ＥＳＬモデルの一例を示す説明図である。ＥＳＬモデル３００は、評価対象の周辺回路モデル３０１と、周辺回路モデル３０２と、割り込みコントローラモデル３０３と、ＣＰＵモデル３０４と、を有している。
【００３１】
評価対象の周辺回路モデル３０１は、たとえば、カメラデバイスモデルや動画再生デバイスモデルである。評価対象の周辺回路モデル３０１がカメラデバイスモデルであれば、評価対象ドライバはカメラドライバである。また、周辺回路モデル３０１および周辺回路モデル３０２は共有メモリモデル３０５へアクセスするモデルであれば何でもよい。
【００３２】
ここでは、バスバッファの数を増やすことにより、ＣＰＵモデル３０４に対する負荷を増大させる。たとえば、バスバッファの深さが２であるとは、バスモデル３０６のビット幅が１２８ビットの場合には、ＣＰＵモデル３０４以外のハードウェア（評価対象の周辺回路モデル３０１と周辺回路モデル３０２）がバスモデル３０６を１６ビット占有していることを示す。バッファの深さが１６であるとは、バスモデル３０６のビット幅が１２８ビットの場合には、ＣＰＵモデル３０４以外のハードウェア（評価対象の周辺回路モデル３０１と周辺回路モデル３０２）がバスモデル３０６を１２８ビット占有していることを示す。
【００３３】
（設計支援装置のハードウェア）
図４は、実施の形態１にかかる設計支援装置のハードウェアを示すブロック図である。図４において、設計支援装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、磁気ディスクドライブ４０４と、磁気ディスク４０５と、光ディスクドライブ４０６と、光ディスク４０７と、ディスプレイ４０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０９と、キーボード４１０と、マウス４１１と、スキャナ４１２と、プリンタ４１３と、を有している。また、各部はバス４００によってそれぞれ接続されている。
【００３４】
ここで、ＣＰＵ４０１は、割り当て装置の全体の制御を司る。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。磁気ディスクドライブ４０４は、ＣＰＵ４０１の制御にしたがって磁気ディスク４０５に対するデータのリード／ライトを制御する。磁気ディスク４０５は、磁気ディスクドライブ４０４の制御で書き込まれたデータを記憶する。
【００３５】
光ディスクドライブ４０６は、ＣＰＵ４０１の制御にしたがって光ディスク４０７に対するデータのリード／ライトを制御する。光ディスク４０７は、光ディスクドライブ４０６の制御で書き込まれたデータを記憶したり、光ディスク４０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３６】
ディスプレイ４０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ４０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３７】
Ｉ／Ｆ４０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク４１４に接続され、該ネットワーク４１４を介して他の装置に接続される。そして、Ｉ／Ｆ４０９は、ネットワーク４１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３８】
キーボード４１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス４１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３９】
スキャナ４１２は、画像を光学的に読み取り、割り当て装置内に画像データを取り込む。なお、スキャナ４１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ４１３は、画像データや文書データを印刷する。プリンタ４１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００４０】
まず、各対象ドライバのＤｔの算出について説明する。ＣＰＵ４０１が対象ドライバごとに対象周辺回路の動作周波数を取得し、ＣＰＵ４０１が１／動作周波数の算出結果をデッドラインとする。たとえば、ディスプレイの動作仕様が６０［Ｈｚ］であり、音声処理の動作使用が４４．１［ｋＨｚ］であるとする。
・ディスプレイドライバのＤｔ＝１／６０＝１６．６［ｍｓ］
・オーディオドライバのＤｔ＝１／４４．１＝２２［μｓ］
【００４１】
つぎに、各対象ドライバのＣＰについて説明する。
【００４２】
図５は、ＥＳＬシミュレーション例を示す説明図である。ＣＰＵ４０１が、ＥＳＬシミュレータを用いてＥＳＬモデル３００のＣＰＵモデル３０４上に評価対象ドライバを割り当て、実行する。バスバッファの深さが２の場合の実行時間を理論実行値とする。ディスプレイドライバの理論実行値は１０．０［ｍｓ］とし、オーディオドライバの理論実行値は１０．０［μｓ］とする。
【００４３】
グラフ５００では、実行結果はディスプレイドライバの性能比とオーディオドライバの性能比を示している。グラフ５００の横軸はバスバッファの深さであり、グラフ５００の縦軸は性能比である。性能比はバスバッファの深さが２の場合の性能を１とした場合の実行時間の比率である。
【００４４】
具体的には、たとえば、ＣＰＵ４０１が、各ドライバの最低の性能比をグラフ５００から検出する。ここでは、ディスプレイドライバとオーディオドライバとについては共にバスバッファの深さが１６の場合、０．９８で最低の性能比である。すなわち、性能が最大で２［％］劣化することが判明する。ここで、ディスプレイドライバおよびオーディオドライバの劣化率は１０２［％］である。そして、ＥＳＬによる実効値（ＣＰ）は下記のように算出される。
・ＣＰ＝理論実行値×劣化率［％］
【００４５】
よって、ディスプレイドライバのＣＰは１０．０［ｍｓ］×１０２［％］で１０．２［ｍｓ］である。オーディオドライバのＣＰは１０．０［μｓ］×１０２［％］で１０．２［μｓ］である。これにより、ドライバを実行中のＣＰＵが他のＣＰＵや他のハードウェアと共有メモリへのアクセスが競合した場合のドライバの実行時間を得ることができる。よって、実施の形態２では性能が低い場合の実行時間に基づいてプロセスの割り当てやドライバの割り当てを決定することができる。
【００４６】
また、ＣＰＵ４０１が、割り込み禁止が定義されているプロセスについては、該プロセス内の割り込み禁止が定義されている処理の実行時間（ＣＰ）を算出する。具体的には、たとえば、ＣＰＵ４０１が、ＥＳＬモデル３００内のＣＰＵモデル３０４に該プロセスを割り当て、ＥＳＬシミュレータを用いてＥＳＬシミュレーションを実行することにより、該実行時間（ＣＰ）を算出する。
【００４７】
ＣＰＵ４０１が、各ドライバのＣＰおよびＤｔと、プロセスのＣＰを出力する。出力形式としては、たとえば、ディスプレイ４０８への表示、プリンタ４１３への印刷出力、Ｉ／Ｆ４０９による外部装置への送信がある。また、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶することとしてもよい。
【００４８】
図６は、ドライバのＣＰおよびＤｔの出力例を示す説明図である。テーブル６００には割り込みドライバごとにＤｔとＣＰとが保持されている。テーブル６００はドライバ名の項目６０１とＤｔの項目６０２とＣＰの項目６０３とを有している。ドライバ名の項目６０１にはドライバの識別情報が保持され、Ｄｔの項目６０２にはＤｔが保持され、ＣＰの項目６０３にはＣＰが保持される。たとえば、ドライバ名の項目６０１内の識別情報がビデオドライバの場合、Ｄｔの項目６０２の値は１６．６［ｍｓ］であり、ＣＰの項目６０３の値は１０．２［ｍｓ］である。なお、ハンドラ１〜ハンドラ５についてはドライバの割り当ての説明に用いる。
【００４９】
図７は、プロセスのＣＰの出力例を示す説明図である。テーブル７００には、割り込み禁止が定義されているプロセスごとに該プロセスの割り込み禁止が定義されている処理の実行時間が保持される。テーブル７００はプロセス名の項目７０１とＣＰの項目７０２とを有している。プロセス名の項目７０１にはプロセスの識別情報が保持され、ＣＰの項目７０２には割り込み禁止が定義されている処理の実行時間が保持される。
【００５０】
（ドライバのＣＰおよびＤｔの算出処理手順）
図８は、設計支援装置によるドライバのＣＰおよびＤｔの算出処理手順を示すフローチャートである。まず、設計支援装置が、ＥＳＬモデルを取得し（ステップＳ８０１）、未選択のドライバがあるか否かを判断する（ステップＳ８０２）。そして、設計支援装置が、未選択のドライバがないと判断した場合（ステップＳ８０２：Ｙｅｓ）、未選択のドライバから１つのドライバを選択する（ステップＳ８０３）。
【００５１】
設計支援装置が、対象ドライバの動作仕様を取得し（ステップＳ８０４）、Ｄｔ＝１／動作仕様とする（ステップＳ８０５）。設計支援装置が、対象ドライバのＤｔを出力し（ステップＳ８０６）、ＥＳＬシミュレータを用いて、対象ドライバをＥＳＬモデルのＣＰＵモデルに与えてＥＳＬシミュレーションを実行する（ステップＳ８０７）。そして、設計支援装置が、ＥＳＬシミュレーションが終了したか否かを判断する（ステップＳ８０８）。
【００５２】
設計支援装置が、ＥＳＬシミュレーションが終了していないと判断した場合（ステップＳ８０８：Ｎｏ）、ステップＳ８０８へ戻る。一方、設計支援装置が、ＥＳＬシミュレーションが終了したと判断した場合（ステップＳ８０８：Ｙｅｓ）、シミュレーション結果から劣化率を検出する（ステップＳ８０９）。
【００５３】
そして、設計支援装置が、対象ドライバの理論実行値を取得し（ステップＳ８１０）、ＣＰ＝理論実行値×劣化率を算出する（ステップＳ８１１）。対象ドライバの理論実行値については、たとえば、対象プログラムのステップ数などに基づいて設計者が算出してもよい。また、算出された対象ドライバの理論実行値についてはＣＰＵ４０１がアクセス可能な記憶装置に記憶されている。そして、設計支援装置が、対象ドライバのＣＰを出力し（ステップＳ８１２）、ステップＳ８０２へ戻る。ステップＳ８０２において、設計支援装置が、未選択のドライバがないと判断した場合（ステップＳ８０２：Ｎｏ）、一連の処理を終了する。
【００５４】
（実施の形態２）
つぎに、実施の形態２では、ドライバの割り当てとアプリケーションの割り当てについて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００５５】
（マルチコアプロセッサシステムのハードウェア）
図９は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。マルチコアプロセッサシステム９００では、周辺回路９０１と、周辺回路９０２と、割り込みコントローラ９０３と、ＣＰＵ＃０と、ＣＰＵ＃１と、共有メモリ９０５と、クロック供給回路９０６と、を有している。各部はバス９０４を介して接続されている。
【００５６】
ＣＰＵ＃０とＣＰＵ＃１とは、それぞれがコアとレジスタとキャッシュとを有している。ＣＰＵ＃０はマスタＯＳであるＯＳ９１１を実行し、マルチコアプロセッサシステム９００の全体の制御を司る。ＯＳ９１１は、割り当て指示の発生したプロセスをどのＣＰＵに割り当てるかを制御し、かつＣＰＵ＃０でのプロセスの切り替えを制御する割り当てプログラムとＣＰＵ＃０に与えるクロックの周波数を決定する制御プログラムを有している。さらに、ＯＳ９１１は、マルチコアプロセッサシステム９００の起動時においてドライバの割り当てを決定する割り当てプログラムを有している。
【００５７】
ＣＰＵ＃１はスレーブＯＳであるＯＳ９１２を実行している。ＯＳ９１２は、ＣＰＵ＃１に割り当てられたプロセスの切り替えを制御する割り当てプログラムとＣＰＵ＃１に与えるクロックの周波数を決定する制御プログラムとを有している。
【００５８】
クロック供給回路９０６は、各ＣＰＵと、周辺回路９０１と、周辺回路９０２と、割り込みコントローラ９０３と、共有メモリ９０５と、のそれぞれに対してクロックを供給する。また、実施の形態２では、クロック供給回路９０６は、たとえば、各部ごとに該各部に供給するクロックの周波数を各ＣＰＵが設定可能なレジスタを有していることとする。クロック供給回路９０６はレジスタに設定された値に基づいてクロックを生成し、各部にクロックを供給する。
【００５９】
周辺回路９０１と周辺回路９０２とは、たとえば、カメラデバイスやオーディオデバイスやキーボードなどである。
【００６０】
割り込みコントローラ９０３は、周辺回路９０１や周辺回路９０２からの割り込み信号を受け付けると、割り込みテーブルに基づいて該割り込み信号に対応する割り込みハンドラを各ＣＰＵに呼び出させる。
【００６１】
共有メモリ９０５は、ＣＰＵ＃０とＣＰＵ＃１とに共有されるメモリである。共有メモリ９０５は、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。共有メモリ９０５は、たとえば、プロセス管理テーブル９２２と、ＯＳ９１１とＯＳ９１２とのブートプログラムなどのプログラムと、上述したテーブル６００およびテーブル７００と、ドライバ９２１群と、図示していないが割り込みテーブルと、を記憶している。
【００６２】
たとえば、ＲＯＭまたはフラッシュＲＯＭは該プログラムやドライバ群などを記憶し、ＲＡＭはＣＰＵ＃０とＣＰＵ＃１とのワークエリアとして使用される。共有メモリ９０５に記憶されているＯＳ９１１とＯＳ９１２は、各ＣＰＵにロードされることで、コーディングされている処理を各ＣＰＵに実行させることとなる。
【００６３】
ドライバ群９２１は、各周辺回路に対応するドライバを有している。各ＯＳは、ドライバ群９２１から呼び出すドライバを選択する。
【００６４】
プロセス管理テーブル９２２とは、たとえば、各プロセスがどのＣＰＵに割り当てられているか、割り当てられているＣＰＵが該プロセスを実行中であるか否かを示す情報である。各ＣＰＵは、プロセス管理テーブル９２２を読み出して各ＣＰＵのキャッシュに記憶しておく。ＯＳ９１１はＣＰＵ＃０とＣＰＵ＃１とのうちのいずれかのＣＰＵにプロセスを割り当てると、プロセス管理テーブル９２２に該プロセスがどのＣＰＵに割り当てられたかを登録する。また、各ＯＳは、該ＯＳに割り当てられたプロセスの実行が終了すると、該プロセス管理テーブル９２２から該プロセスに関する記述を削除する。
【００６５】
つぎに、実施の形態２では、ドライバの割り当てについて説明する。実施の形態２では、ドライバの割り当てをマルチコアプロセッサシステム９００の起動時に行う。また、これに限らず、マルチコアプロセッサのＯＳの更新後にドライバの割り当てを決定してもよいし、いずれかのドライバのダウンロード時に決定してもよい。
【００６６】
（起動時に関するマルチコアプロセッサシステム９００の機能ブロック図）
図１０は、起動時に関するマルチコアプロセッサシステム９００の機能ブロック図である。マルチコアプロセッサシステム９００は、加算部１００１と、特定部１００２と、判断部１００３と、割り当て部１００４と、を有している。加算部１００１〜割り当て部１００４はＯＳ９１１が有し、ＣＰＵ＃０が共有メモリ９０５からＯＳ９１１をロードして、該ＯＳ９１１内にコーディングされている処理を実行する。
【００６７】
加算部１００１は、対象割り込み処理の実行時間と、マルチコアプロセッサのうちの任意のＣＰＵに割り当てられた割当済みの割り込み処理の実行時間とを加算する。
【００６８】
判断部１００３は、任意のＣＰＵが前記対象割り込み処理の呼び出し時からの実行期限および割当済みの割り込み処理の呼び出し時からの実行期限を遵守できるか否かを加算部１００１による加算結果に基づいて判断する。
【００６９】
割り当て部１００４は、判断部１００３により対象割り込み処理の呼び出し時からの実行期限および割当済みの割り込み処理の呼び出し時からの実行期限を遵守できると判断された場合、任意のＣＰＵに前記対象割り込み処理を割り当てる。
【００７０】
また、特定部１００２は、対象割り込み処理の呼び出し時刻から実行期限までの時間と割当済みの割り込み処理ごとの割り当て済の割り込み処理の呼び出し時刻から実行期限までの時間との中から、最短時間を特定する。実施の形態２では最も短い時間を最短Ｄｔと称する。
【００７１】
判断部１００３は、特定部１００２により特定された最短時間が加算部１００１による加算結果以下であるか否かを判断する。
【００７２】
割り当て部１００４は、判断部１００３により最短時間が加算結果以下であると判断された場合、任意のＣＰＵに対象割り込み処理を割り当てる。
【００７３】
以上を踏まえて図を用いて詳細に説明する。
【００７４】
図１１は、ハンドラの割り当て例を示す説明図である。ＣＰＵ＃０にはハンドラ３とハンドラ４とが割り当てられ、ＣＰＵ＃１にはハンドラ１とハンドラ２とが割り当てられている。ＯＳ９１１は、各ハンドラが割り当てられると、割り当てられているすべてのハンドラのＣＰをテーブル６００から検索することにより、該すべてのハンドラのＣＰを取得する。そして、ＯＳ９１１は、取得したＣＰを加算することによりＣＰの合計値を算出する。ＣＰＵ＃０でのＣＰの合計値は１５［ｍｓ］であり、ＣＰＵ＃１でのＣＰの合計値は２１［ｍｓ］である。
【００７５】
まず、ＯＳ９１１は、複数のハンドラから未割り当てであるハンドラ５を選択する。ここで、複数のハンドラとは、ＣＰとＤｔとが決定している連続動作型のドライバである。つぎに、ＯＳ９１１がハンドラ５を共有メモリ９０５から取得する。そして、ＯＳ９１１がハンドラ５のＣＰとハンドラ５のＤｔとをテーブル６００から検索することにより、ハンドラ５のＣＰとハンドラ５のＤｔとを取得する。
【００７６】
ＯＳ９１１が、ＣＰＵごとにＣＰの合計値とハンドラ５のＣＰとを加算する。ＣＰＵ＃０の加算結果は２０［ｍｓ］であり、ＣＰＵ＃１の加算結果は２６［ｍｓ］である。そして、ＯＳ９１１が、加算結果がハンドラ５のＤｔ以下であるＣＰＵを特定する。ここでは、ＣＰＵ＃０が特定される。そして、ＯＳ９１１が、特定したＣＰＵ＃０へハンドラ５を割り当てる。
【００７７】
（ドライバの割り当て処理手順）
図１２は、マルチコアプロセッサシステム９００起動時のドライバの割り当て処理手順を示すフローチャートである。上述例では、同時にすべてのＣＰＵのＣＰの合計値と最短Ｄｔとを検出していたが、本フローチャートでは、ＣＰＵ＃０から順にＣＰＵの合計値と最短Ｄｔとを検出し、ＣＰＵに割り当て可能か否かを判断する。
【００７８】
まず、ＯＳ９１１が、システム起動・ドライバアサイン処理を開始する（ステップＳ１２０１）。そして、ＯＳ９１１が、ｋ＝０とし（ステップＳ１２０２）、全ドライバを割り当て済か否かを判断する（ステップＳ１２０３）。ＯＳ９１１が、全ドライバを割り当てていないと判断した場合（ステップＳ１２０３：Ｎｏ）、未割り当てのドライバから１つのドライバを対象ドライバとして選択する（ステップＳ１２０４）。
【００７９】
そして、ＯＳ９１１が、ＣＰＵ＃ｋに割り当てられたドライバのＣＰと対象ドライバのＣＰとを加算する（ＣＰの合計値を算出する）（ステップＳ１２０５）。ＯＳ９１１が、ＣＰＵ＃ｋに割り当てられたドライバのＤｔと対象ドライバのＤｔとから、最短Ｄｔを特定する（ステップＳ１２０６）。そして、ＯＳ９１１が、ＣＰの合計値≦最短Ｄｔであるか否かを判断する（ステップＳ１２０７）。
【００８０】
ＯＳ９１１が、ＣＰの合計値≦最短Ｄｔでないと判断した場合（ステップＳ１２０７：Ｎｏ）、ｋ＝ｋ＋１とし（ステップＳ１２０８）、ｋ≦全ＣＰＵ数とする（ステップＳ１２０９）。ＯＳ９１１が、ｋ≦全ＣＰＵ数であると判断した場合（ステップＳ１２０９：Ｙｅｓ）、ステップＳ１２０５へ戻る。一方、ＯＳ９１１が、ｋ≦全ＣＰＵ数でないと判断した場合（ステップＳ１２０９：Ｎｏ）、エラーを出力し（ステップＳ１２１０）、一連の処理を終了する。ＯＳ９１１が、ＣＰの合計値≦最短Ｄｔであると判断した場合（ステップＳ１２０７：Ｙｅｓ）、ＣＰＵ＃ｋに対象ドライバを割り当てる（ステップＳ１２１１）。また、割り当て時には、割り込みテーブルに該対象ドライバがいずれのＣＰＵに割り当てられたかを記憶する。そして、ＣＰＵ＃ｋのＯＳ９１２が、対象ドライバを起動する（ステップＳ１２１２）。
【００８１】
また、ＯＳ９１１が、全ドライバを割り当てたと判断した場合（ステップＳ１２０３：Ｙｅｓ）、システム起動を完了し（ステップＳ１２１３）、一連の処理を終了する。
【００８２】
また、マルチコアプロセッサシステム９００の設計者は、設計時に全ドライバをマルチコアプロセッサに割り当てても、全ドライバが動作可能であることを確認する。これにより、設計者はマルチコアプロセッサシステム９００に設計上の破綻が生じていないかを検証することができる。
【００８３】
つぎに、マルチコアプロセッサシステム９００の運用時におけるプロセスの割り当てについて説明する。
【００８４】
（運用時に関するマルチコアプロセッサシステム９００の機能ブロック図）
図１３は、運用時に関するマルチコアプロセッサシステム９００の機能ブロック図である。マルチコアプロセッサシステム９００は、検出部１３０１と、取得部１３０２と、判断部１３０３と、割り当て部１３０４と、を有している。検出部１３０１〜割り当て部１３０４はＯＳ９１１が有し、ＣＰＵ＃０が共有メモリ９０５からＯＳ９１１をロードして、該ＯＳ９１１内にコーディングされている処理を実行する。
【００８５】
検出部１３０１は、プロセスの割り当て指示を検出する。
【００８６】
取得部１３０２は、検出部１３０１によりプロセスの割り当て指示が検出されると、マルチコアプロセッサのうちの任意のＣＰＵに割り当てられた割り込み処理の呼び出し時刻から割り込み処理の実行期限までの時間から割り込み処理の処理時間を除いた残余の時間を取得する。ここで、割り込み処理の呼び出し時刻から割り込み処理の実行期限までの時間とは、Ｄｔである。残余の時間をＡｐｐとする。
【００８７】
判断部１３０３は、取得部１３０２により取得された残余の時間がプロセスの割り込み禁止が定義された処理の処理時間以上であるか否かを判断する。
【００８８】
割り当て部１３０４は、判断部１３０３により残余の時間がプロセスの割り込み禁止が定義された処理の処理時間以上であると判断された場合、該任意のＣＰＵにプロセスを割り当てる。
【００８９】
以上を踏まえて図を用いて説明する。
【００９０】
図１４は、Ａｐｐの算出例を示す説明図である。図１４では、ＣＰＵ＃０にはビデオドライバが割り当てられ、ＣＰＵ＃１にはオーディオドライバが割り当てられている。まず、各ＯＳは、ドライバの割り当て処理が終了すると、割り当てられた全ドライバのＣＰと該ドライバのＤｔとをテーブル６００を検索することにより取得する。
【００９１】
そして、各ＯＳはＣＰの合計値を算出する。図１４では、各ＯＳはそれぞれ１つのドライバのみが割り当てられているため、ＯＳ９１１でのＣＰの合計値は１０．２［ｍｓ］であり、ＯＳ９１２でのＣＰの合計値は１０．２［μｓ］である。そして、各ＯＳは、割り当てられたドライバのＤｔから最も短いＤｔである最短Ｄｔを検出する。ＯＳ９１１での最短Ｄｔは１６．６［ｍｓ］であり、ＯＳ９１２での最短Ｄｔは２２［μｓ］である。
【００９２】
そして、各ＯＳは最短ＤｔからＣＰの合計値を減算する。ＯＳ９１１での減算結果をＡｐｐ（０）とし、ＯＳ９１２での減算結果をＡｐｐ（１）とする。ＯＳ９１２は、マスタＯＳであるＯＳ９１１へＡｐｐ（１）とＣＰの合計値とを関連付けて通知する。また、各ＯＳは、ＣＰの合計値とＡｐｐとを出力する。出力形式としては、たとえば、共有メモリ９０５に記憶することとしてもよい。
【００９３】
図１５は、プロセスＡの割り当て例を示す説明図である。ＯＳ９１１がプロセスＡの割り当て指示を検出すると、ＯＳ９１１がプロセスＡのＣＰをテーブル７００から検索することにより、プロセスＡのＣＰを取得する。ＯＳ９１１が、プロセスＡのＣＰ以上であるＡｐｐのＣＰＵを特定する。ここでは、ＣＰＵ＃０が特定される。そして、ＯＳ９１１が、特定したＣＰＵ＃０にプロセスＡを割り当てる。
【００９４】
図１６は、プロセスＢの割り当て例を示す説明図である。つぎに、ＯＳ９１１がプロセスＢの割り当て指示を検出すると、ＯＳ９１１がプロセスＢのＣＰをテーブル７００から検索することにより、プロセスＢのＣＰを取得する。ＯＳ９１１がプロセスＢのＣＰ以上であるＡｐｐのＣＰＵを特定する。ここでは、ＣＰＵ＃０とＣＰＵ＃１が特定される。そして、ＯＳ９１１が、特定したＣＰＵ＃１にプロセスＢを割り当てる。
【００９５】
図１７は、プロセスＣの割り当て例を示す説明図である。つぎに、ＯＳ９１１がプロセスＣの割り当て指示を検出すると、ＯＳ９１１がプロセスＣのＣＰをテーブル７００から検索することにより、プロセスＣのＣＰを取得する。ＯＳ９１１がプロセスＣのＣＰ以上であるＡｐｐのＣＰＵを特定する。ここでは、ＣＰＵ＃０が特定される。そして、ＯＳ９１１が、特定したＣＰＵ＃０にプロセスＣを割り当てる。
【００９６】
（マルチコアプロセッサシステム９００の算出処理手順および割り当て処理手順）
図１８は、算出処理手順を示すフローチャートである。Ａｐｐの算出処理については、各ＯＳが実行するが、ここでは、ＯＳ９１２を例に挙げて説明する。まず、ＯＳ９１２が、ドライバの割り当てが終了したか否かを判断する（ステップＳ１８０１）。ＯＳ９１２が、ドライバの割り当てが終了していないと判断した場合（ステップＳ１８０１：Ｎｏ）、ステップＳ１８０１へ戻る。つぎに、ＯＳ９１２が、ドライバの割り当てが終了したと判断した場合（ステップＳ１８０１：Ｙｅｓ）、割り当てられた全ドライバのＣＰおよびＤｔを取得する（ステップＳ１８０２）。
【００９７】
そして、ＯＳ９１２が、割り当てられた全ドライバのＣＰの合計値を算出し（ステップＳ１８０３）、割り当てられたドライバのＤｔのうち最短Ｄｔを検出する（ステップＳ１８０４）。ＯＳ９１２が、Ａｐｐ＝最短Ｄｔ−ＣＰの合計値を算出し（ステップＳ１８０５）、ＡｐｐとＣＰの合計値とをマスタＯＳに通知する（ステップＳ１８０６）。
【００９８】
図１９は、マスタＯＳによる割り当て処理手順例１を示すフローチャートである。まず、マスタＯＳであるＯＳ９１１が、プロセスの割り当て指示を受け付けたか否かを判断する（ステップＳ１９０１）。ＯＳ９１１が、プロセスの割り当て指示を受け付けていないと判断した場合（ステップＳ１９０１：Ｎｏ）、ステップＳ１９０１へ戻る。一方、ＯＳ９１１が、プロセスの割り当て指示を受け付けたと判断した場合（ステップＳ１９０１：Ｙｅｓ）、割り当て指示を受け付けたプロセスのＣＰを取得する（ステップＳ１９０２）。
【００９９】
そして、ＯＳ９１１が、ｉ＝０とし（ステップＳ１９０３）、ＣＰＵ＃ｉがあるか否かを判断する（ステップＳ１９０４）。ＯＳ９１１が、ＣＰＵ＃ｉがあると判断した場合（ステップＳ１９０４：Ｙｅｓ）、ＳＵＢ＝ＣＰＵ＃ｉのＡｐｐ−取得したＣＰを算出し（ステップＳ１９０５）、ＳＵＢ≧０であるか否かを判断する（ステップＳ１９０６）。
【０１００】
ＯＳ９１１が、ＳＵＢ≧０であると判断した場合（ステップＳ１９０６：Ｙｅｓ）、ＣＰＵ＃ｉを割り当て可能なＣＰＵに特定し（ステップＳ１９０７）、ＣＰＵ＃ｉにＳＵＢを関連付けて出力し（ステップＳ１９０８）、ｉ＝ｉ＋１とする（ステップＳ１９０９）。一方、ＯＳ９１１が、ＳＵＢ≧０でないと判断した場合（ステップＳ１９０６：Ｎｏ）、ステップＳ１９０９へ移行する。
【０１０１】
また、ＯＳ９１１が、ＣＰＵ＃ｉがないと判断した場合（ステップＳ１９０４：Ｎｏ）、特定したＣＰＵが複数あるか否かを判断する（ステップＳ１９１０）。ＯＳ９１１が、特定したＣＰＵが複数あると判断した場合（ステップＳ１９１０：Ｙｅｓ）、特定したＣＰＵのうち、ＳＵＢが最も大きいＣＰＵを特定し（ステップＳ１９１１）、特定したＣＰＵにプロセスを割り当て（ステップＳ１９１２）、ステップＳ１９０１へ戻る。
【０１０２】
ＯＳ９１１が、特定したＣＰＵが複数ないと判断した場合（ステップＳ１９１０：Ｎｏ）、特定したＣＰＵにプロセスを割り当て（ステップＳ１９１３）、ステップＳ１９０１へ戻る。
【０１０３】
図２０は、ＯＳ９１１による割り当て処理手順例２を示すフローチャートである。まず、ＯＳ９１１が、プロセスの割り当て指示を受け付けたか否かを判断する（ステップＳ２００１）。ＯＳ９１１が、プロセスの割り当て指示を受け付けていないと判断した場合（ステップＳ２００１：Ｎｏ）、ステップＳ２００１へ戻る。一方、ＯＳ９１１が、プロセスの割り当て指示を受け付けたと判断した場合（ステップＳ２００１：Ｙｅｓ）、割り当て指示を受け付けたプロセスのＣＰを取得する（ステップＳ２００２）。
【０１０４】
そして、ＯＳ９１１が、ｉ＝０とし（ステップＳ２００３）、ＣＰＵ＃ｉがあるか否かを判断する（ステップＳ２００４）。ＯＳ９１１が、ＣＰＵ＃ｉがあると判断した場合（ステップＳ２００４：Ｙｅｓ）、ＣＰＵ＃ｉのＡｐｐ≧取得したＣＰであるか否かを判断する（ステップＳ２００５）。ＯＳ９１１が、ＣＰＵ＃ｉのＡｐｐ≧取得したＣＰであると判断した場合（ステップＳ２００５：Ｙｅｓ）、ＣＰＵ＃ｉにプロセスを割り当て（ステップＳ２００６）、ステップＳ２００１へ戻る。
【０１０５】
ＯＳ９１１が、ＣＰＵ＃ｉのＡｐｐ≧取得したＣＰでないと判断した場合（ステップＳ２００５：Ｎｏ）、ｉ＝ｉ＋１とし（ステップＳ２００７）、ステップＳ２００４へ戻る。また、ステップＳ２００４において、ＯＳ９１１が、ＣＰＵ＃ｉがないと判断した場合（ステップＳ２００４：Ｎｏ）、エラーを出力し（ステップＳ２００８）、ステップＳ２００１へ戻る。
【０１０６】
つぎに、プロセスが割り当てられていないＣＰＵに供給するクロック周波数を下げる例について説明する。
【０１０７】
（クロック周波数に関するマルチコアプロセッサシステム９００の機能ブロック図）
図２１は、クロック周波数に関するマルチコアプロセッサシステム９００の機能ブロック図である。マルチコアプロセッサシステム９００の各ＯＳは、検出部と、判断部と、取得部と、決定部と、設定部と、を有している。ＯＳ９１１は検出部２１０１と、判断部２１０２と、取得部２１０３と、決定部２１０４と、設定部２１０５と、を有し、ＯＳ９１２は、検出部２１１１と、判断部２１１２と、取得部２１１３と、決定部２１１４と、設定部２１１５と、を有している。各ＣＰＵが共有メモリ９０５からそれぞれのＯＳをロードして、該ＯＳ内にコーディングされている処理を実行する。
【０１０８】
検出部２１０１と検出部２１１１とは同一処理であり、判断部２１０２と判断部２１１２とは同一処理である。さらに、取得部２１０３と取得部２１１３とは同一処理であり、決定部２１０４と決定部２１１４とは同一処理であり、設定部２１０５と設定部２１１５とは同一処理である。ここでは、検出部２１０１〜設定部２１０５を例に挙げて説明する。
【０１０９】
検出部２１０１は、マルチコアプロセッサのうちの任意のＣＰＵに割り当てられた割り当て済のプロセスの終了を検出する。ここでは、任意のＣＰＵをＣＰＵ＃０とする。
【０１１０】
判断部２１０２は、検出部２１０１により割り当て済のプロセスの終了を検出すると、任意のＣＰＵにいずれのプロセスも割り当てられていないかを判断する。
【０１１１】
取得部２１０３は、判断部２１０２によりＣＰＵ＃０にいずれのプロセスも割り当てられていないと判断された場合、ＣＰＵ＃０に割り当てられた割り込み処理の呼び出し時刻から割り込み処理の実行期限までの時間から前記割り込み処理の処理時間を除いた残余の時間を取得する。ここでは、残余の時間はＡｐｐである。
【０１１２】
決定部２１０４は、ＣＰＵ＃０へ供給されるクロックの周波数を取得部２１０３により取得された残余の時間と割り込み処理の処理時間との比率に応じて決定する。
【０１１３】
設定部２１０５は、決定部２１０４による決定結果をクロックの供給源へ与える。決ここで、クロック供給源はクロック供給回路９０６である。よって、具体的には、たとえば、ＣＰＵ＃０が、クロック供給回路９０６内のレジスタのうち、該ＣＰＵ＃０へ与えるクロックの周波数に対応するレジスタに決定結果を設定する。
【０１１４】
また、検出部２１０１は、ＣＰＵ＃０への未割り当てのプロセスの割り当てを検出する。
【０１１５】
設定部２１０５は、検出部２１０１によりＣＰＵ＃０への前記未割り当てのプロセスの割り当てを検出すると、ＣＰＵ＃０の仕様で定義された周波数を前記クロックの供給源へ与える。
【０１１６】
たとえば、ＣＰＵ＃０のＡｐｐが６．４［ｍｓ］であり、ＣＰの合計値が１０．２［ｍｓ］であるとする。この場合、１０．２［ｍｓ］に対して、６．４［ｍｓ］まではＣＰＵ＃０の余力であるため、余力が０まではクロックを下げることができる。ここで、ＣＰＵ＃０の仕様で定義された、該ＣＰＵ＃０に供給されるクロックの周波数をＣＭＡＸとする。この場合、ＣＰＵ＃０へ与えるクロックの周波数をＣまで下げることができる。
・Ｃ＝ＣＭＡＸ・｛１−Ａｐｐ／ＣＰの合計値｝
【０１１７】
ここで、ＣＭＡＸが１００ＭＨｚであると、
・Ｃ＝１００・｛１−６．４／１０．２｝＝３７．２５［ＭＨｚ］
となる。
【０１１８】
ここで、ＣＰＵごとのＣＭＡＸについては共有メモリ９０５内で保持されていることとする。詳細な処理についてはフローチャートを用いて説明する。
【０１１９】
（クロック周波数の制御処理手順）
図２２は、ＯＳによるクロック周波数の制御処理手順を示すフローチャートである。制御処理については各ＯＳで実行されるが、ここでは、ＯＳ９１１を例に挙げて説明する。まず、ＯＳ９１１が、プロセスの割り当てまたはプロセスの実行終了を検出したか否かを判断する（ステップＳ２２０１）。ＯＳ９１１が、プロセスの割り当ておよびプロセスの実行終了を検出していないと判断した場合（ステップＳ２２０１：Ｎｏ）、ステップＳ２２０１へ戻る。
【０１２０】
つぎに、ＯＳ９１１が、プロセスの割り当てを検出したと判断した場合（ステップＳ２２０１：プロセスの割り当て）、仕様で定義されたクロックの周波数（ＣＭＡＸ）を取得する（ステップＳ２２０２）。プロセスの割り当てに関しては、ＯＳ９１１がプロセス管理テーブル９２２を参照することにより検出することができる。
【０１２１】
そして、ＯＳ９１１が、ＣＭＡＸをクロック供給回路９０６へ与え（ステップＳ２２０３）、ステップＳ２２０１へ戻る。ＣＭＡＸをクロック供給回路９０６へ与えるとは、クロック供給回路９０６内のＣＰＵ＃０へ与えるクロックの周波数に対応するレジスタをＣＭＡＸに設定することを指す。
【０１２２】
一方、ＯＳ９１１が、プロセスの実行終了を検出したと判断した場合（ステップＳ２２０１：プロセスの実行終了）、割り当てられたプロセスがあるか否かを判断する（ステップＳ２２０４）。プロセスの終了に関しては、ＯＳ９１１がプロセス管理テーブル９２２を参照することにより検出することができる。
【０１２３】
ＯＳ９１１が、割り当てられたプロセスがあると判断した場合（ステップＳ２２０４：Ｙｅｓ）、ステップＳ２２０１へ戻る。ＯＳ９１１が、割り当てられたプロセスがないと判断した場合（ステップＳ２２０４：Ｎｏ）、仕様で定義されたクロックの周波数（ＣＭＡＸ）を取得する（ステップＳ２２０５）。
【０１２４】
そして、ＯＳ９１１が、Ｃ＝ＣＭＡＸ×（１−Ａｐｐ／ＣＰの合計値）を算出し（ステップＳ２２０６）、Ｃをクロック供給回路９０６へ与える（ステップＳ２２０７）。Ｃをクロック供給回路９０６へ与えるとは、クロック供給回路９０６内のＣＰＵ＃０へ与えるクロックの周波数に対応するレジスタをＣに設定することを指す。
【０１２５】
以上説明したように、プロセッサシステム、制御プログラム、および制御方法によれば、任意のコアにプロセスが割り当てられたとして、該任意のコアに割り当て済の割り込み処理が該割り込み処理の呼び出し時からの実行期限を遵守できるか否かを判断することにより、該プロセスを任意のコアに割り当てるか否かを決定する。これによって、割り込み禁止が定義されているプロセスを割り当てても、割り込み処理の呼び出し時からの実行期限を遵守することができる。すなわち、ドライバ専用にＣＰＵを確保しなくてもよい。
【０１２６】
以上説明したように、マルチコアプロセッサシステム、割り当てプログラム、および割り当て方法によれば、対象割り込み処理の実行時間と任意のコアに割り当てられた１または複数の割り込み処理の実行時間とを加算する。そして、加算結果に基づいて、該対象割り込み処理および１または複数の割り込み処理がそれぞれの呼び出し時からの実行期限を遵守できるか否かを判断することにより、該任意のコアに対象割り込み処理を割り当てることができるか否かを判断する。これにより、複数の割り込み処理が同時に呼び出されても、各割り込み処理の呼び出し時からの実行期限を遵守することができる。
【０１２７】
また、該対象割り込み処理の呼び出し時刻から実行期限までの時間と、割当済みの割り込み処理ごとの前記割り当て済の割り込み処理の呼び出し時刻から実行期限までの時間との中から、最短時間を特定する。そして、該特定した最短時間が加算結果以下であるか否かを判断する。これにより、該対象割り込み処理および割当済の割り込み処理がそれぞれの呼び出し時からの実行期限を遵守できるか否かを判断することができる。よって、判断処理を高速化することができ、割り込み処理の割り当てを高速に行うことができる。
【０１２８】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、任意のＣＰＵに割り当てられた割当済のプロセスの実行終了を検出すると、該任意のＣＰＵにいずれのプロセスも割り当てられていないかを判断する。いずれのプロセスも割り当てられていなければ、該任意のＣＰＵに与えるクロックの周波数を、該任意のＣＰＵに割り当てられた割り込み処理の呼び出し時からの実行期限に基づいて決定する。これにより、各ドライバのデッドライン時間を遵守しつつ、低消費電力化を図ることができる。
【０１２９】
また、該任意のＣＰＵへの未割り当てのプロセスの割り当てを検出すると、該任意のＣＰＵへ与えるクロックの周波数を仕様によって定められた周波数に戻す。これにより、各ドライバのデッドライン時間を遵守することができる。
【符号の説明】
【０１３０】
９００  マルチコアプロセッサシステム
１００１  加算部
１００２  特定部
１００３，１３０３，２１０２，２１１２  判断部
１００４，１３０４  割り当て部
１３０１，２１０１，２１１１  検出部
１３０２，２１０３，２１１３  取得部
２１０４，２１１４  決定部
２１０５，２１１５  設定部
【図１】
0005516737.tif 000002
【図２】
0005516737.tif 000003
【図３】
0005516737.tif 000004
【図４】
0005516737.tif 000005
【図５】
0005516737.tif 000006
【図６】
0005516737.tif 000007
【図７】
0005516737.tif 000008
【図８】
0005516737.tif 000009
【図９】
0005516737.tif 000010
【図１０】
0005516737.tif 000011
【図１１】
0005516737.tif 000012
【図１２】
0005516737.tif 000013
【図１３】
0005516737.tif 000014
【図１４】
0005516737.tif 000015
【図１５】
0005516737.tif 000016
【図１６】
0005516737.tif 000017
【図１７】
0005516737.tif 000018
【図１８】
0005516737.tif 000019
【図１９】
0005516737.tif 000020
【図２０】
0005516737.tif 000021
【図２１】
0005516737.tif 000022
【図２２】
0005516737.tif 000023