以下に添付図面を参照して、本発明にかかるマルチプロセッサシステム、制御方法、および制御プログラムの好適な実施の形態を詳細に説明する。
図1は、本発明の一の例を示す説明図である。まず、CPU#0が、プロセス1の割り当て指示を検出する。そして、CPU#0が、CPU#0に割り当てられた割り込み処理であるハンドラAのイベントの発生時刻からハンドラAの実行期限までの時間(ハンドラAのDt)からハンドラAの処理時間であるハンドラAのCPを除いた残余の時間を取得する。
つぎに、CPU#0が、取得した残余の時間がプロセス1の割り込み禁止が定義された処理の処理時間(プロセス1のCP)以上であるか否かを判断する。すなわち、ここでは、CPU#0にプロセス1が割り当てられた場合に、プロセス1の実行中にハンドラAのイベントが発生しても、ハンドラAのDtを遵守することができるか否かを判断している。
図1で示すように、CPU#0にプロセス1が割り当てられた場合、プロセス1の割り込み禁止が定義されている処理が実行中にハンドラAのイベントが発生すると、ハンドラAのDtを遵守できない場合があると判断される。よって、CPU#0はプロセス1をCPU#0に割り当てない。
図2は、本発明の他の例を示す説明図である。まず、CPU#0が、プロセス1の割り当て指示を検出する。そして、CPU#0が、CPU#1に割り当てられた割り込み処理であるハンドラBのイベントの発生時刻からハンドラBの実行期限までの時間(ハンドラBのDt)からハンドラBの処理時間であるハンドラBのCPを除いた残余の時間を取得する。
つぎに、CPU#0が、取得した残余の時間がプロセス1の割り込み禁止が定義された処理の処理時間(プロセス1のCP)以上であるか否かを判断する。すなわち、ここでは、CPU#1にプロセス1が割り当てられた場合に、プロセス1の実行中にハンドラBのイベントが発生しても、ハンドラBのDtを遵守することができるか否かを判断している。
図2で示すように、プロセス1の実行中にハンドラBのイベントが発生すると、ハンドラBのDtを遵守することができると判断される。よって、CPU#0はプロセス1をCPU#1に割り当てる。
まず、実施の形態1では各ドライバの実行時間の算出と各ドライバのデッドラインについて説明する。つぎに、実施の形態2ではマルチコアプロセッサの起動時と、割り込みハンドラの割り当てと、プロセスの割り当てと、について説明する。
(実施の形態1)
実施の形態1ではESL(Electronic System Level)モデルを用いて各ドライバの実行時間の算出について説明する。ここで、ESLモデルとはハードウェアデバイスのビヘイビア(ふるまい)をもとに記述することによりハードウェア環境をシミュレーション化する技術である。たとえば、CPUのESLモデルでは命令発行の電気回路的なメカニズムをそのままシミュレーションするのではなく、発行命令とそれに要する時間で表現する。
また、バスのESLモデルでは同様に、回路メカニズムによるデータ伝播の遅延を厳密に計算するのではなく、アクセス要求により設計上のレイテンシパターンを掛け合わせて、動作と時間概念をビヘイビア(ふるまい)としてシミュレーションしていくこととなる。
従来、シミュレーションというとRTL(Register Transfer Level)などの回路設計情報をもとに実際に半導体を実装することなくシミュレーションを行うことであり、実デバイスと同等の動作を実現することで検証を行うために用いられていた。
しかしながら、回路レベルの詳細シミュレーションを実施するには非常に時間がかかり(通常、実デバイスのスピードに対し数千万から数億分の一の処理時間)、アプリケーションを動作させながらのシステム全体の挙動を解析するのは現実的に困難であった。一方で、ESLモデルでは処理と時間の概念をふるまいとして解析するため回路のシミュレーションを行うまでもなく概ねの処理時間を評価することが可能な環境である。
(ESLモデル)
図3は、ESLモデルの一例を示す説明図である。ESLモデル300は、評価対象の周辺回路モデル301と、周辺回路モデル302と、割り込みコントローラモデル303と、CPUモデル304と、を有している。
評価対象の周辺回路モデル301は、たとえば、カメラデバイスモデルや動画再生デバイスモデルである。評価対象の周辺回路モデル301がカメラデバイスモデルであれば、評価対象ドライバはカメラドライバである。また、周辺回路モデル301および周辺回路モデル302は共有メモリモデル305へアクセスするモデルであれば何でもよい。
ここでは、バスバッファの数を増やすことにより、CPUモデル304に対する負荷を増大させる。たとえば、バスバッファの深さが2であるとは、バスモデル306のビット幅が128ビットの場合には、CPUモデル304以外のハードウェア(評価対象の周辺回路モデル301と周辺回路モデル302)がバスモデル306を16ビット占有していることを示す。バッファの深さが16であるとは、バスモデル306のビット幅が128ビットの場合には、CPUモデル304以外のハードウェア(評価対象の周辺回路モデル301と周辺回路モデル302)がバスモデル306を128ビット占有していることを示す。
(設計支援装置のハードウェア)
図4は、実施の形態1にかかる設計支援装置のハードウェアを示すブロック図である。図4において、設計支援装置は、CPU(Central Processing Unit)401と、ROM(Read‐Only Memory)402と、RAM(Random Access Memory)403と、磁気ディスクドライブ404と、磁気ディスク405と、光ディスクドライブ406と、光ディスク407と、ディスプレイ408と、I/F(Interface)409と、キーボード410と、マウス411と、スキャナ412と、プリンタ413と、を有している。また、各部はバス400によってそれぞれ接続されている。
ここで、CPU401は、割り当て装置の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
光ディスクドライブ406は、CPU401の制御にしたがって光ディスク407に対するデータのリード/ライトを制御する。光ディスク407は、光ディスクドライブ406の制御で書き込まれたデータを記憶したり、光ディスク407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
I/F409は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク414に接続され、該ネットワーク414を介して他の装置に接続される。そして、I/F409は、ネットワーク414と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ412は、画像を光学的に読み取り、割り当て装置内に画像データを取り込む。なお、スキャナ412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ413は、画像データや文書データを印刷する。プリンタ413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
まず、各対象ドライバのDtの算出について説明する。CPU401が対象ドライバごとに対象周辺回路の動作周波数を取得し、CPU401が1/動作周波数の算出結果をデッドラインとする。たとえば、ディスプレイの動作仕様が60[Hz]であり、音声処理の動作使用が44.1[kHz]であるとする。
・ディスプレイドライバのDt=1/60=16.6[ms]
・オーディオドライバのDt=1/44.1=22[μs]
つぎに、各対象ドライバのCPについて説明する。
図5は、ESLシミュレーション例を示す説明図である。CPU401が、ESLシミュレータを用いてESLモデル300のCPUモデル304上に評価対象ドライバを割り当て、実行する。バスバッファの深さが2の場合の実行時間を理論実行値とする。ディスプレイドライバの理論実行値は10.0[ms]とし、オーディオドライバの理論実行値は10.0[μs]とする。
グラフ500では、実行結果はディスプレイドライバの性能比とオーディオドライバの性能比を示している。グラフ500の横軸はバスバッファの深さであり、グラフ500の縦軸は性能比である。性能比はバスバッファの深さが2の場合の性能を1とした場合の実行時間の比率である。
具体的には、たとえば、CPU401が、各ドライバの最低の性能比をグラフ500から検出する。ここでは、ディスプレイドライバとオーディオドライバとについては共にバスバッファの深さが16の場合、0.98で最低の性能比である。すなわち、性能が最大で2[%]劣化することが判明する。ここで、ディスプレイドライバおよびオーディオドライバの劣化率は102[%]である。そして、ESLによる実効値(CP)は下記のように算出される。
・CP=理論実行値×劣化率[%]
よって、ディスプレイドライバのCPは10.0[ms]×102[%]で10.2[ms]である。オーディオドライバのCPは10.0[μs]×102[%]で10.2[μs]である。これにより、ドライバを実行中のCPUが他のCPUや他のハードウェアと共有メモリへのアクセスが競合した場合のドライバの実行時間を得ることができる。よって、実施の形態2では性能が低い場合の実行時間に基づいてプロセスの割り当てやドライバの割り当てを決定することができる。
また、CPU401が、割り込み禁止が定義されているプロセスについては、該プロセス内の割り込み禁止が定義されている処理の実行時間(CP)を算出する。具体的には、たとえば、CPU401が、ESLモデル300内のCPUモデル304に該プロセスを割り当て、ESLシミュレータを用いてESLシミュレーションを実行することにより、該実行時間(CP)を算出する。
CPU401が、各ドライバのCPおよびDtと、プロセスのCPを出力する。出力形式としては、たとえば、ディスプレイ408への表示、プリンタ413への印刷出力、I/F409による外部装置への送信がある。また、RAM403、磁気ディスク405、光ディスク407などの記憶領域に記憶することとしてもよい。
図6は、ドライバのCPおよびDtの出力例を示す説明図である。テーブル600には割り込みドライバごとにDtとCPとが保持されている。テーブル600はドライバ名の項目601とDtの項目602とCPの項目603とを有している。ドライバ名の項目601にはドライバの識別情報が保持され、Dtの項目602にはDtが保持され、CPの項目603にはCPが保持される。たとえば、ドライバ名の項目601内の識別情報がビデオドライバの場合、Dtの項目602の値は16.6[ms]であり、CPの項目603の値は10.2[ms]である。なお、ハンドラ1〜ハンドラ5についてはドライバの割り当ての説明に用いる。
図7は、プロセスのCPの出力例を示す説明図である。テーブル700には、割り込み禁止が定義されているプロセスごとに該プロセスの割り込み禁止が定義されている処理の実行時間が保持される。テーブル700はプロセス名の項目701とCPの項目702とを有している。プロセス名の項目701にはプロセスの識別情報が保持され、CPの項目702には割り込み禁止が定義されている処理の実行時間が保持される。
(ドライバのCPおよびDtの算出処理手順)
図8は、設計支援装置によるドライバのCPおよびDtの算出処理手順を示すフローチャートである。まず、設計支援装置が、ESLモデルを取得し(ステップS801)、未選択のドライバがあるか否かを判断する(ステップS802)。そして、設計支援装置が、未選択のドライバがないと判断した場合(ステップS802:Yes)、未選択のドライバから1つのドライバを選択する(ステップS803)。
設計支援装置が、対象ドライバの動作仕様を取得し(ステップS804)、Dt=1/動作仕様とする(ステップS805)。設計支援装置が、対象ドライバのDtを出力し(ステップS806)、ESLシミュレータを用いて、対象ドライバをESLモデルのCPUモデルに与えてESLシミュレーションを実行する(ステップS807)。そして、設計支援装置が、ESLシミュレーションが終了したか否かを判断する(ステップS808)。
設計支援装置が、ESLシミュレーションが終了していないと判断した場合(ステップS808:No)、ステップS808へ戻る。一方、設計支援装置が、ESLシミュレーションが終了したと判断した場合(ステップS808:Yes)、シミュレーション結果から劣化率を検出する(ステップS809)。
そして、設計支援装置が、対象ドライバの理論実行値を取得し(ステップS810)、CP=理論実行値×劣化率を算出する(ステップS811)。対象ドライバの理論実行値については、たとえば、対象プログラムのステップ数などに基づいて設計者が算出してもよい。また、算出された対象ドライバの理論実行値についてはCPU401がアクセス可能な記憶装置に記憶されている。そして、設計支援装置が、対象ドライバのCPを出力し(ステップS812)、ステップS802へ戻る。ステップS802において、設計支援装置が、未選択のドライバがないと判断した場合(ステップS802:No)、一連の処理を終了する。
(実施の形態2)
つぎに、実施の形態2では、ドライバの割り当てとアプリケーションの割り当てについて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
(マルチコアプロセッサシステムのハードウェア)
図9は、マルチコアプロセッサシステムのハードウェアを示すブロック図である。マルチコアプロセッサシステム900では、周辺回路901と、周辺回路902と、割り込みコントローラ903と、CPU#0と、CPU#1と、共有メモリ905と、クロック供給回路906と、を有している。各部はバス904を介して接続されている。
CPU#0とCPU#1とは、それぞれがコアとレジスタとキャッシュとを有している。CPU#0はマスタOSであるOS911を実行し、マルチコアプロセッサシステム900の全体の制御を司る。OS911は、割り当て指示の発生したプロセスをどのCPUに割り当てるかを制御し、かつCPU#0でのプロセスの切り替えを制御する割り当てプログラムとCPU#0に与えるクロックの周波数を決定する制御プログラムを有している。さらに、OS911は、マルチコアプロセッサシステム900の起動時においてドライバの割り当てを決定する割り当てプログラムを有している。
CPU#1はスレーブOSであるOS912を実行している。OS912は、CPU#1に割り当てられたプロセスの切り替えを制御する割り当てプログラムとCPU#1に与えるクロックの周波数を決定する制御プログラムとを有している。
クロック供給回路906は、各CPUと、周辺回路901と、周辺回路902と、割り込みコントローラ903と、共有メモリ905と、のそれぞれに対してクロックを供給する。また、実施の形態2では、クロック供給回路906は、たとえば、各部ごとに該各部に供給するクロックの周波数を各CPUが設定可能なレジスタを有していることとする。クロック供給回路906はレジスタに設定された値に基づいてクロックを生成し、各部にクロックを供給する。
周辺回路901と周辺回路902とは、たとえば、カメラデバイスやオーディオデバイスやキーボードなどである。
割り込みコントローラ903は、周辺回路901や周辺回路902からの割り込み信号を受け付けると、割り込みテーブルに基づいて該割り込み信号に対応する割り込みハンドラを各CPUに呼び出させる。
共有メモリ905は、CPU#0とCPU#1とに共有されるメモリである。共有メモリ905は、たとえば、ROM(Read Only Memory)と、RAM(Random Access Memory)と、フラッシュROMなどを有している。共有メモリ905は、たとえば、プロセス管理テーブル922と、OS911とOS912とのブートプログラムなどのプログラムと、上述したテーブル600およびテーブル700と、ドライバ921群と、図示していないが割り込みテーブルと、を記憶している。
たとえば、ROMまたはフラッシュROMは該プログラムやドライバ群などを記憶し、RAMはCPU#0とCPU#1とのワークエリアとして使用される。共有メモリ905に記憶されているOS911とOS912は、各CPUにロードされることで、コーディングされている処理を各CPUに実行させることとなる。
ドライバ群921は、各周辺回路に対応するドライバを有している。各OSは、ドライバ群921から呼び出すドライバを選択する。
プロセス管理テーブル922とは、たとえば、各プロセスがどのCPUに割り当てられているか、割り当てられているCPUが該プロセスを実行中であるか否かを示す情報である。各CPUは、プロセス管理テーブル922を読み出して各CPUのキャッシュに記憶しておく。OS911はCPU#0とCPU#1とのうちのいずれかのCPUにプロセスを割り当てると、プロセス管理テーブル922に該プロセスがどのCPUに割り当てられたかを登録する。また、各OSは、該OSに割り当てられたプロセスの実行が終了すると、該プロセス管理テーブル922から該プロセスに関する記述を削除する。
つぎに、実施の形態2では、ドライバの割り当てについて説明する。実施の形態2では、ドライバの割り当てをマルチコアプロセッサシステム900の起動時に行う。また、これに限らず、マルチコアプロセッサのOSの更新後にドライバの割り当てを決定してもよいし、いずれかのドライバのダウンロード時に決定してもよい。
(起動時に関するマルチコアプロセッサシステム900の機能ブロック図)
図10は、起動時に関するマルチコアプロセッサシステム900の機能ブロック図である。マルチコアプロセッサシステム900は、加算部1001と、特定部1002と、判断部1003と、割り当て部1004と、を有している。加算部1001〜割り当て部1004はOS911が有し、CPU#0が共有メモリ905からOS911をロードして、該OS911内にコーディングされている処理を実行する。
加算部1001は、対象割り込み処理の実行時間と、マルチコアプロセッサのうちの任意のCPUに割り当てられた割当済みの割り込み処理の実行時間とを加算する。
判断部1003は、任意のCPUが前記対象割り込み処理の呼び出し時からの実行期限および割当済みの割り込み処理の呼び出し時からの実行期限を遵守できるか否かを加算部1001による加算結果に基づいて判断する。
割り当て部1004は、判断部1003により対象割り込み処理の呼び出し時からの実行期限および割当済みの割り込み処理の呼び出し時からの実行期限を遵守できると判断された場合、任意のCPUに前記対象割り込み処理を割り当てる。
また、特定部1002は、対象割り込み処理の呼び出し時刻から実行期限までの時間と割当済みの割り込み処理ごとの割り当て済の割り込み処理の呼び出し時刻から実行期限までの時間との中から、最短時間を特定する。実施の形態2では最も短い時間を最短Dtと称する。
判断部1003は、特定部1002により特定された最短時間が加算部1001による加算結果以下であるか否かを判断する。
割り当て部1004は、判断部1003により最短時間が加算結果以下であると判断された場合、任意のCPUに対象割り込み処理を割り当てる。
以上を踏まえて図を用いて詳細に説明する。
図11は、ハンドラの割り当て例を示す説明図である。CPU#0にはハンドラ3とハンドラ4とが割り当てられ、CPU#1にはハンドラ1とハンドラ2とが割り当てられている。OS911は、各ハンドラが割り当てられると、割り当てられているすべてのハンドラのCPをテーブル600から検索することにより、該すべてのハンドラのCPを取得する。そして、OS911は、取得したCPを加算することによりCPの合計値を算出する。CPU#0でのCPの合計値は15[ms]であり、CPU#1でのCPの合計値は21[ms]である。
まず、OS911は、複数のハンドラから未割り当てであるハンドラ5を選択する。ここで、複数のハンドラとは、CPとDtとが決定している連続動作型のドライバである。つぎに、OS911がハンドラ5を共有メモリ905から取得する。そして、OS911がハンドラ5のCPとハンドラ5のDtとをテーブル600から検索することにより、ハンドラ5のCPとハンドラ5のDtとを取得する。
OS911が、CPUごとにCPの合計値とハンドラ5のCPとを加算する。CPU#0の加算結果は20[ms]であり、CPU#1の加算結果は26[ms]である。そして、OS911が、加算結果がハンドラ5のDt以下であるCPUを特定する。ここでは、CPU#0が特定される。そして、OS911が、特定したCPU#0へハンドラ5を割り当てる。
(ドライバの割り当て処理手順)
図12は、マルチコアプロセッサシステム900起動時のドライバの割り当て処理手順を示すフローチャートである。上述例では、同時にすべてのCPUのCPの合計値と最短Dtとを検出していたが、本フローチャートでは、CPU#0から順にCPUの合計値と最短Dtとを検出し、CPUに割り当て可能か否かを判断する。
まず、OS911が、システム起動・ドライバアサイン処理を開始する(ステップS1201)。そして、OS911が、k=0とし(ステップS1202)、全ドライバを割り当て済か否かを判断する(ステップS1203)。OS911が、全ドライバを割り当てていないと判断した場合(ステップS1203:No)、未割り当てのドライバから1つのドライバを対象ドライバとして選択する(ステップS1204)。
そして、OS911が、CPU#kに割り当てられたドライバのCPと対象ドライバのCPとを加算する(CPの合計値を算出する)(ステップS1205)。OS911が、CPU#kに割り当てられたドライバのDtと対象ドライバのDtとから、最短Dtを特定する(ステップS1206)。そして、OS911が、CPの合計値≦最短Dtであるか否かを判断する(ステップS1207)。
OS911が、CPの合計値≦最短Dtでないと判断した場合(ステップS1207:No)、k=k+1とし(ステップS1208)、k≦全CPU数とする(ステップS1209)。OS911が、k≦全CPU数であると判断した場合(ステップS1209:Yes)、ステップS1205へ戻る。一方、OS911が、k≦全CPU数でないと判断した場合(ステップS1209:No)、エラーを出力し(ステップS1210)、一連の処理を終了する。OS911が、CPの合計値≦最短Dtであると判断した場合(ステップS1207:Yes)、CPU#kに対象ドライバを割り当てる(ステップS1211)。また、割り当て時には、割り込みテーブルに該対象ドライバがいずれのCPUに割り当てられたかを記憶する。そして、CPU#kのOS912が、対象ドライバを起動する(ステップS1212)。
また、OS911が、全ドライバを割り当てたと判断した場合(ステップS1203:Yes)、システム起動を完了し(ステップS1213)、一連の処理を終了する。
また、マルチコアプロセッサシステム900の設計者は、設計時に全ドライバをマルチコアプロセッサに割り当てても、全ドライバが動作可能であることを確認する。これにより、設計者はマルチコアプロセッサシステム900に設計上の破綻が生じていないかを検証することができる。
つぎに、マルチコアプロセッサシステム900の運用時におけるプロセスの割り当てについて説明する。
(運用時に関するマルチコアプロセッサシステム900の機能ブロック図)
図13は、運用時に関するマルチコアプロセッサシステム900の機能ブロック図である。マルチコアプロセッサシステム900は、検出部1301と、取得部1302と、判断部1303と、割り当て部1304と、を有している。検出部1301〜割り当て部1304はOS911が有し、CPU#0が共有メモリ905からOS911をロードして、該OS911内にコーディングされている処理を実行する。
検出部1301は、プロセスの割り当て指示を検出する。
取得部1302は、検出部1301によりプロセスの割り当て指示が検出されると、マルチコアプロセッサのうちの任意のCPUに割り当てられた割り込み処理の呼び出し時刻から割り込み処理の実行期限までの時間から割り込み処理の処理時間を除いた残余の時間を取得する。ここで、割り込み処理の呼び出し時刻から割り込み処理の実行期限までの時間とは、Dtである。残余の時間をAppとする。
判断部1303は、取得部1302により取得された残余の時間がプロセスの割り込み禁止が定義された処理の処理時間以上であるか否かを判断する。
割り当て部1304は、判断部1303により残余の時間がプロセスの割り込み禁止が定義された処理の処理時間以上であると判断された場合、該任意のCPUにプロセスを割り当てる。
以上を踏まえて図を用いて説明する。
図14は、Appの算出例を示す説明図である。図14では、CPU#0にはビデオドライバが割り当てられ、CPU#1にはオーディオドライバが割り当てられている。まず、各OSは、ドライバの割り当て処理が終了すると、割り当てられた全ドライバのCPと該ドライバのDtとをテーブル600を検索することにより取得する。
そして、各OSはCPの合計値を算出する。図14では、各OSはそれぞれ1つのドライバのみが割り当てられているため、OS911でのCPの合計値は10.2[ms]であり、OS912でのCPの合計値は10.2[μs]である。そして、各OSは、割り当てられたドライバのDtから最も短いDtである最短Dtを検出する。OS911での最短Dtは16.6[ms]であり、OS912での最短Dtは22[μs]である。
そして、各OSは最短DtからCPの合計値を減算する。OS911での減算結果をApp(0)とし、OS912での減算結果をApp(1)とする。OS912は、マスタOSであるOS911へApp(1)とCPの合計値とを関連付けて通知する。また、各OSは、CPの合計値とAppとを出力する。出力形式としては、たとえば、共有メモリ905に記憶することとしてもよい。
図15は、プロセスAの割り当て例を示す説明図である。OS911がプロセスAの割り当て指示を検出すると、OS911がプロセスAのCPをテーブル700から検索することにより、プロセスAのCPを取得する。OS911が、プロセスAのCP以上であるAppのCPUを特定する。ここでは、CPU#0が特定される。そして、OS911が、特定したCPU#0にプロセスAを割り当てる。
図16は、プロセスBの割り当て例を示す説明図である。つぎに、OS911がプロセスBの割り当て指示を検出すると、OS911がプロセスBのCPをテーブル700から検索することにより、プロセスBのCPを取得する。OS911がプロセスBのCP以上であるAppのCPUを特定する。ここでは、CPU#0とCPU#1が特定される。そして、OS911が、特定したCPU#1にプロセスBを割り当てる。
図17は、プロセスCの割り当て例を示す説明図である。つぎに、OS911がプロセスCの割り当て指示を検出すると、OS911がプロセスCのCPをテーブル700から検索することにより、プロセスCのCPを取得する。OS911がプロセスCのCP以上であるAppのCPUを特定する。ここでは、CPU#0が特定される。そして、OS911が、特定したCPU#0にプロセスCを割り当てる。
(マルチコアプロセッサシステム900の算出処理手順および割り当て処理手順)
図18は、算出処理手順を示すフローチャートである。Appの算出処理については、各OSが実行するが、ここでは、OS912を例に挙げて説明する。まず、OS912が、ドライバの割り当てが終了したか否かを判断する(ステップS1801)。OS912が、ドライバの割り当てが終了していないと判断した場合(ステップS1801:No)、ステップS1801へ戻る。つぎに、OS912が、ドライバの割り当てが終了したと判断した場合(ステップS1801:Yes)、割り当てられた全ドライバのCPおよびDtを取得する(ステップS1802)。
そして、OS912が、割り当てられた全ドライバのCPの合計値を算出し(ステップS1803)、割り当てられたドライバのDtのうち最短Dtを検出する(ステップS1804)。OS912が、App=最短Dt−CPの合計値を算出し(ステップS1805)、AppとCPの合計値とをマスタOSに通知する(ステップS1806)。
図19は、マスタOSによる割り当て処理手順例1を示すフローチャートである。まず、マスタOSであるOS911が、プロセスの割り当て指示を受け付けたか否かを判断する(ステップS1901)。OS911が、プロセスの割り当て指示を受け付けていないと判断した場合(ステップS1901:No)、ステップS1901へ戻る。一方、OS911が、プロセスの割り当て指示を受け付けたと判断した場合(ステップS1901:Yes)、割り当て指示を受け付けたプロセスのCPを取得する(ステップS1902)。
そして、OS911が、i=0とし(ステップS1903)、CPU#iがあるか否かを判断する(ステップS1904)。OS911が、CPU#iがあると判断した場合(ステップS1904:Yes)、SUB=CPU#iのApp−取得したCPを算出し(ステップS1905)、SUB≧0であるか否かを判断する(ステップS1906)。
OS911が、SUB≧0であると判断した場合(ステップS1906:Yes)、CPU#iを割り当て可能なCPUに特定し(ステップS1907)、CPU#iにSUBを関連付けて出力し(ステップS1908)、i=i+1とする(ステップS1909)。一方、OS911が、SUB≧0でないと判断した場合(ステップS1906:No)、ステップS1909へ移行する。
また、OS911が、CPU#iがないと判断した場合(ステップS1904:No)、特定したCPUが複数あるか否かを判断する(ステップS1910)。OS911が、特定したCPUが複数あると判断した場合(ステップS1910:Yes)、特定したCPUのうち、SUBが最も大きいCPUを特定し(ステップS1911)、特定したCPUにプロセスを割り当て(ステップS1912)、ステップS1901へ戻る。
OS911が、特定したCPUが複数ないと判断した場合(ステップS1910:No)、特定したCPUにプロセスを割り当て(ステップS1913)、ステップS1901へ戻る。
図20は、OS911による割り当て処理手順例2を示すフローチャートである。まず、OS911が、プロセスの割り当て指示を受け付けたか否かを判断する(ステップS2001)。OS911が、プロセスの割り当て指示を受け付けていないと判断した場合(ステップS2001:No)、ステップS2001へ戻る。一方、OS911が、プロセスの割り当て指示を受け付けたと判断した場合(ステップS2001:Yes)、割り当て指示を受け付けたプロセスのCPを取得する(ステップS2002)。
そして、OS911が、i=0とし(ステップS2003)、CPU#iがあるか否かを判断する(ステップS2004)。OS911が、CPU#iがあると判断した場合(ステップS2004:Yes)、CPU#iのApp≧取得したCPであるか否かを判断する(ステップS2005)。OS911が、CPU#iのApp≧取得したCPであると判断した場合(ステップS2005:Yes)、CPU#iにプロセスを割り当て(ステップS2006)、ステップS2001へ戻る。
OS911が、CPU#iのApp≧取得したCPでないと判断した場合(ステップS2005:No)、i=i+1とし(ステップS2007)、ステップS2004へ戻る。また、ステップS2004において、OS911が、CPU#iがないと判断した場合(ステップS2004:No)、エラーを出力し(ステップS2008)、ステップS2001へ戻る。
つぎに、プロセスが割り当てられていないCPUに供給するクロック周波数を下げる例について説明する。
(クロック周波数に関するマルチコアプロセッサシステム900の機能ブロック図)
図21は、クロック周波数に関するマルチコアプロセッサシステム900の機能ブロック図である。マルチコアプロセッサシステム900の各OSは、検出部と、判断部と、取得部と、決定部と、設定部と、を有している。OS911は検出部2101と、判断部2102と、取得部2103と、決定部2104と、設定部2105と、を有し、OS912は、検出部2111と、判断部2112と、取得部2113と、決定部2114と、設定部2115と、を有している。各CPUが共有メモリ905からそれぞれのOSをロードして、該OS内にコーディングされている処理を実行する。
検出部2101と検出部2111とは同一処理であり、判断部2102と判断部2112とは同一処理である。さらに、取得部2103と取得部2113とは同一処理であり、決定部2104と決定部2114とは同一処理であり、設定部2105と設定部2115とは同一処理である。ここでは、検出部2101〜設定部2105を例に挙げて説明する。
検出部2101は、マルチコアプロセッサのうちの任意のCPUに割り当てられた割り当て済のプロセスの終了を検出する。ここでは、任意のCPUをCPU#0とする。
判断部2102は、検出部2101により割り当て済のプロセスの終了を検出すると、任意のCPUにいずれのプロセスも割り当てられていないかを判断する。
取得部2103は、判断部2102によりCPU#0にいずれのプロセスも割り当てられていないと判断された場合、CPU#0に割り当てられた割り込み処理の呼び出し時刻から割り込み処理の実行期限までの時間から前記割り込み処理の処理時間を除いた残余の時間を取得する。ここでは、残余の時間はAppである。
決定部2104は、CPU#0へ供給されるクロックの周波数を取得部2103により取得された残余の時間と割り込み処理の処理時間との比率に応じて決定する。
設定部2105は、決定部2104による決定結果をクロックの供給源へ与える。決ここで、クロック供給源はクロック供給回路906である。よって、具体的には、たとえば、CPU#0が、クロック供給回路906内のレジスタのうち、該CPU#0へ与えるクロックの周波数に対応するレジスタに決定結果を設定する。
また、検出部2101は、CPU#0への未割り当てのプロセスの割り当てを検出する。
設定部2105は、検出部2101によりCPU#0への前記未割り当てのプロセスの割り当てを検出すると、CPU#0の仕様で定義された周波数を前記クロックの供給源へ与える。
たとえば、CPU#0のAppが6.4[ms]であり、CPの合計値が10.2[ms]であるとする。この場合、10.2[ms]に対して、6.4[ms]まではCPU#0の余力であるため、余力が0まではクロックを下げることができる。ここで、CPU#0の仕様で定義された、該CPU#0に供給されるクロックの周波数をCMAXとする。この場合、CPU#0へ与えるクロックの周波数をCまで下げることができる。
・C=CMAX・{1−App/CPの合計値}
ここで、CMAXが100MHzであると、
・C=100・{1−6.4/10.2}=37.25[MHz]
となる。
ここで、CPUごとのCMAXについては共有メモリ905内で保持されていることとする。詳細な処理についてはフローチャートを用いて説明する。
(クロック周波数の制御処理手順)
図22は、OSによるクロック周波数の制御処理手順を示すフローチャートである。制御処理については各OSで実行されるが、ここでは、OS911を例に挙げて説明する。まず、OS911が、プロセスの割り当てまたはプロセスの実行終了を検出したか否かを判断する(ステップS2201)。OS911が、プロセスの割り当ておよびプロセスの実行終了を検出していないと判断した場合(ステップS2201:No)、ステップS2201へ戻る。
つぎに、OS911が、プロセスの割り当てを検出したと判断した場合(ステップS2201:プロセスの割り当て)、仕様で定義されたクロックの周波数(CMAX)を取得する(ステップS2202)。プロセスの割り当てに関しては、OS911がプロセス管理テーブル922を参照することにより検出することができる。
そして、OS911が、CMAXをクロック供給回路906へ与え(ステップS2203)、ステップS2201へ戻る。CMAXをクロック供給回路906へ与えるとは、クロック供給回路906内のCPU#0へ与えるクロックの周波数に対応するレジスタをCMAXに設定することを指す。
一方、OS911が、プロセスの実行終了を検出したと判断した場合(ステップS2201:プロセスの実行終了)、割り当てられたプロセスがあるか否かを判断する(ステップS2204)。プロセスの終了に関しては、OS911がプロセス管理テーブル922を参照することにより検出することができる。
OS911が、割り当てられたプロセスがあると判断した場合(ステップS2204:Yes)、ステップS2201へ戻る。OS911が、割り当てられたプロセスがないと判断した場合(ステップS2204:No)、仕様で定義されたクロックの周波数(CMAX)を取得する(ステップS2205)。
そして、OS911が、C=CMAX×(1−App/CPの合計値)を算出し(ステップS2206)、Cをクロック供給回路906へ与える(ステップS2207)。Cをクロック供給回路906へ与えるとは、クロック供給回路906内のCPU#0へ与えるクロックの周波数に対応するレジスタをCに設定することを指す。
以上説明したように、マルチプロセッサシステム、制御方法、および制御プログラムによれば、任意のコアにプロセスが割り当てられたとして、該任意のコアに割り当て済の割り込み処理が該割り込み処理の呼び出し時からの実行期限を遵守できるか否かを判断することにより、該プロセスを任意のコアに割り当てるか否かを決定する。これによって、割り込み禁止が定義されているプロセスを割り当てても、割り込み処理の呼び出し時からの実行期限を遵守することができる。すなわち、ドライバ専用にCPUを確保しなくてもよい。
以上説明したように、マルチプロセッサシステム、制御方法、および制御プログラムによれば、対象割り込み処理の実行時間と任意のコアに割り当てられた1または複数の割り込み処理の実行時間とを加算する。そして、加算結果に基づいて、該対象割り込み処理および1または複数の割り込み処理がそれぞれの呼び出し時からの実行期限を遵守できるか否かを判断することにより、該任意のコアに対象割り込み処理を割り当てることができるか否かを判断する。これにより、複数の割り込み処理が同時に呼び出されても、各割り込み処理の呼び出し時からの実行期限を遵守することができる。
また、該対象割り込み処理の呼び出し時刻から実行期限までの時間と、割当済みの割り込み処理ごとの前記割り当て済の割り込み処理の呼び出し時刻から実行期限までの時間との中から、最短時間を特定する。そして、該特定した最短時間が加算結果以下であるか否かを判断する。これにより、該対象割り込み処理および割当済の割り込み処理がそれぞれの呼び出し時からの実行期限を遵守できるか否かを判断することができる。よって、判断処理を高速化することができ、割り込み処理の割り当てを高速に行うことができる。
以上説明したように、マルチプロセッサシステム、制御方法、および制御プログラムによれば、任意のCPUに割り当てられた割当済のプロセスの実行終了を検出すると、該任意のCPUにいずれのプロセスも割り当てられていないかを判断する。いずれのプロセスも割り当てられていなければ、該任意のCPUに与えるクロックの周波数を、該任意のCPUに割り当てられた割り込み処理の呼び出し時からの実行期限に基づいて決定する。これにより、各ドライバのデッドライン時間を遵守しつつ、低消費電力化を図ることができる。
また、該任意のCPUへの未割り当てのプロセスの割り当てを検出すると、該任意のCPUへ与えるクロックの周波数を仕様によって定められた周波数に戻す。これにより、各ドライバのデッドライン時間を遵守することができる。