(57)【要約】【課題】組込みシステムにマルチコアを導入し、複数OSを並存させるシステムにおいて、計算資源をOSに配分するオーバーヘッドを抑えつつ、OS間の動的な負荷分散を両立できないという課題があった。【解決手段】マルチコアなどの複数のCPUコアと複数を搭載し、複数のOSを実行し、各CPUコアにより実行するOSが固定されている組込みシステムに対し、各OSに固有の処理を実行するOS専従処理実行部と、複数OSにより実行する並列処理を実行するOS間並列処理実行部と、前記並列処理を実行するOSを決定するOS間負荷分散部とを備える。【選択図】図１
2009163527.tif 000002
【特許請求の範囲】
【請求項１】
複数のCPUコア又はCPUにより複数のOSを実行する情報処理システムであって、
各OSに固有の処理を実行するOS専従処理実行部と、
複数OSにより単一処理を分割して並列実行するOS間並列処理実行部と、
分割された並列処理を実行するOSを負荷に応じて決定するOS間負荷分散部とを有する情報処理システム。
【請求項２】
請求項１の情報処理システムであって、
前記OS間並列処理実行部は、並列タスクに分割する並列タスク分割部と、分割した並列タスクを実行する並列タスク実行部と、実行した結果を統合する並列タスク実行結果統合部と、並列タスクの実行をスケジュールする並列タスク・スケジューリング部とを有する情報処理システム。
【請求項３】
請求項１の情報処理システムであって、
前記OS間負荷分散部は、OSの状態を検知するOS状態検知部と、OSの負荷を推定するOS負荷推定部とを有する情報処理システム。
【請求項４】
請求項１の情報処理システムであって、
OS間共有メモリを有する情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野は、複数のオペレーティングシステム（マルチOS）における負荷分散に関する。特に複数のCPUコア又はプロセッサを有する組込みシステム、装置、機器等におけるマルチOSの負荷分散に関する。
【背景技術】
【０００２】
マルチOSが注目されている（特許文献１）。パソコンやサーバなどでは、複数のOSを単一のハードウェア上で同時に動作可能とする、仮想マシンモニタ（ハイパーバイザ）と呼ばれる技術が使われている（非特許文献１）。図２に仮想マシンモニタを適用した情報処理機器のソフトウェア構成図を示す。仮想マシンモニタにより、従来複数のハードウェア（例えばCPU）により動作していたOSとプログラムを単一CPUに集約できる。このような単一CPUへの集約は組込み機器と呼ばれる分野でも提案されている（非特許文献２）。これらの仮想マシンモニタを応用したシステムは、いわゆる「シングルコア」のCPU上での複数OS並存を想定している。
【０００３】
一方、パソコンやサーバなどの性能向上ニーズに応える技術として、複数の演算処理装置（CPU）を搭載する「マルチコア」、または「マルチプロセッサ」と呼ばれる技術が使われ始めている。マルチコアは、「コア」を複数集めてパッケージに集積したプロセッサであり、コア数に応じてより優れた処理性能を提供する。マルチプロセッサは、シングルコアのプロセッサを複数搭載するシステムであり、プロセッサ数に応じてより優れた処理性能を提供する。マルチプロセッサに関しては、例えば特許文献２がある。
【０００４】
これらの背景から、マルチOSをマルチプロセッサ上で動かすシステムとして、、各コアと各OSとを固定的に対応づけるAMP（Asymmetric  MultiProcessor、ASMPとも呼ぶ）方式と呼ばれるシステムがある。図３にAMP方式を適用したシステムのソフトウェア構成図を示す。このAMP方式について非特許文献３は、「AMPでは、動的な負荷分散をサポートしていないため、CPUコアを効率よく使うための機構をソフトウェアレベルで実現する必要がある。すなわち、従来のソフトウェアを機能分割し各CPUコア上に割り当て、連携や協調するための機能の追加が必要となる。しかし、従来のソフトウェアは各種ライブラリが密に結合されているため、機能分割は容易ではない。また、他CPUコアからの応答順によっては、ソフトウェアの実行順序が予測不可能となり、リアルタイム性を保証することが困難となる。」との課題を考慮した技術を提案している。
【０００５】
【特許文献１】特開2004-13607号公報
【特許文献２】特開2003-345614号公報
【非特許文献１】Ｘｅｎ  Source（商標）  ：  Ｘｅｎ（商標）：  Enterprise  Grade  Open  Source  Virtualization.  A  ＸｅｎSource  White  Paper  V06012006,  2006
【非特許文献２】Samsung：  Secure  Architecture  and  Implementation  of  Ｘｅｎ  on  ARM  for  Mobile  Devices，  Ｘｅｎ  Summit  Spring，  2007
【非特許文献３】元濱ほか：マルチコアアプリケーション間通信方式の設計と評価，情報処理学会第69回全国大会，論文番号4A-4,  2007
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述の背景技術は、以下の課題を抱えている。
【０００７】
仮想マシンモニタを用いる複数OS並存システムでは、仮想マシンモニタのCPU時間管理に起因する性能オーバーヘッドが課題となる。一般に、仮想マシンモニタは負荷の高いOSにCPU時間を長く割り当てることで、OS間の負荷分散機能を実現する。CPU時間を割り当てるOSを変更するとき、実行を停止するOSの状態を保存し、実行を開始するOSの状態を復帰する必要がある。このような保存・復帰の処理がオーバーヘッドの原因となる。一般に、パソコンやサーバに比較して、組込み機器の処理性能は低く、仮想マシンモニタに起因する資源管理オーバーヘッドを許容できない。例えば、非特許文献２の報告では、ベンチマークによっては約２倍の性能悪化が報告されている。
【０００８】
一方、AMP方式による複数OS並存システムでは、仮想マシンモニタによる性能オーバーヘッドは生じない。しかし、本方式は、コアとOSとの関係が固定され、仮想マシンモニタによるCPU実行時間の分配機能は無く、各OSの負荷をマルチコア全体に分散できない。このため、あるOSの負荷がピークを迎えているときに、他のOSはアイドル状態にあるという状況が生じうる。非特許文献３の示す機能分割によれば、AMP方式においても一定の負荷分散は実現できるかもしれない。しかし、各OSに専従する機能を固定して割り当てる静的な負荷分散方法であるため、状況に応じた割り当て変更は実現できず、負荷分散の効果は大きくない。
【０００９】
すなわち、組込みシステムにマルチコアを導入し、マルチOSを実現させるシステムにおいて、計算資源をOSに配分するオーバーヘッドの最小化とOS間の動的な負荷分散とを両立できないという課題があった。
【課題を解決するための手段】
【００１０】
そこで本出願では、計算資源をOSに配分するオーバーヘッドを抑えつつOS間の動的な負荷分散する技術を提案する。
【００１１】
例えばマルチコアを搭載するシステムに、各OSに固有の処理を実行するOS専従処理実行部と、複数OSにより単一処理を分割して並列実行するOS間並列処理実行部と、分割された並列処理を実行するOSを負荷に応じて決定するOS間負荷分散部とを備える。
【発明の効果】
【００１２】
上記の手段により例えば、計算資源をOSに配分するオーバーヘッドを抑えつつOS間の動的な負荷分散が可能となる。
【００１３】
ただし、本出願には上記課題、手段、効果に限らない発明も含まれ、後述する実施例に含まれる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明に好適な実施形態の例（実施例）を説明する。ただし、実施例はあくまで例であり、例えば上記手段を持つ適用形態であれば、本実施例との相違があっても効果を享受できる。
【００１５】
以降、パソコン等のようにソフトを自由に入れ換えて使用できる汎用システムではなく、TV等のようにソフトを予め組込み込んだ組込みシステムを特に例に挙げて説明する。なお、本発明は組み込みシステムに特に好適だが、汎用システムへの応用を妨げるものではない。
【００１６】
パソコンやサーバなどの性能向上ニーズに応える技術として、複数の演算処理装置（CPU）を搭載する「マルチコア」、または「マルチプロセッサ」と呼ばれる技術が使われている。マルチコアは、単一のCPU「シングルコア」を、複数集めてパッケージに集積したプロセッサであり、コア数に応じてより優れた処理性能を提供する。マルチプロセッサは、複数のシングルコア・プロセッサを複数搭載してシステムを構築する手法であり、プロセッサ数に応じてより優れた処理性能を提供する。マルチコアおよびマルチプロセッサ普及の背景には、消費電力などの問題からシングルコアCPU単体の性能改善に限界が見えてきたことがある。
【００１７】
組込みシステムの性能を向上する手法としても、複数のCPUコアを単一パッケージに収めるマルチコアが注目されている。組込み製品は、製品に搭載されるアプリケーションが固定されている。そこで、各アプリケーションの性能特性を事前に調査・特定できることから、性能改善対象とする機能を特定する。また、アプリケーションの挙動を活用して性能を改善するため、アプリケーションに近いOSより上位のレイヤに着目する。
【００１８】
図１は、本実施例の概要を示す。各OSに負荷分散ミドルウェア  101を配置する。負荷分散ミドルウェア101は、複数OSのCPUコアを全て用いて並列処理プログラム102を実行し、性能を改善する。サーバ分野では、OSの下位レイヤに仮想マシンモニタを設け、OS間の負荷を分散する手法が取られているが、組込み分野では、仮想マシンモニタによるオーバーヘッドを無視できない。そこで、並列処理プログラム102として実装する機能は、性能改善が必要な機能に特定する。各OSの特性に依存する機能、および性能改善効果の低い機能をOS専従処理プログラムとして実装する。
【００１９】
負荷分散ミドルウェアには、以下の機能が求められる。
(1)並列処理機能：複数OSに負荷を分散するため、負荷分散ミドルウェアの処理内容を複数の並列タスクに分割し、各OSに並列タスクの実行を委譲する、並列処理機能。
(2)専従処理プログラム負荷情報収集機能：並列タスクの実行を委譲するOSを決定するために、各OSが実行するOS専従処理プログラムの負荷状況を検知・収集する機能。
【００２０】
なお、上記機能の実装にあたり、以下２点にも対応した。
(1)通信オーバーヘッド：複数OSによる並列計算の性能は、OS間通信性能に強く依存する。OS間通信時のデータコピーに起因する性能低下を避けるため、OS管理外のメモリ領域を確保し、通信バッファとして利用する実装とした。
(2)負荷計測オーバーヘッド：OS専従処理プログラムに起因する負荷の計測オーバーヘッドを低減するため、継続的に負荷のかかるプロファイラ計測を避け、OS専従処理プログラムの状態変化を待ち受け、状態をCPU負荷に換算する方式を取った。
【００２１】
以下、詳細に説明する。
【００２２】
図４は、マルチコアを適用したシステムのハードウェアの構成例を示す。現在のマルチコア搭載システム（もしくはマルチプロセッサ・システム）では、各コア、およびメモリとI/Oが単一のバスに結線され、すべてのコアがメモリ、およびI/Oを共有する構成を取るシステムが多い。共有メモリにより、コア間のデータ共有オーバーヘッドが少ない点が、これらのシステムの利点となっている。情報家電、カーナビ、携帯電話などの組込み製品分野においても、パソコンやサーバと同様に性能向上ニーズがあり、マルチコアまたはマルチプロセッサによるシステム開発が図られている。
【００２３】
特に本実施例では、複数のコア（演算装置）4C1、4C2、4CNなどを保持するマルチコア401を搭載する。各コアは共有メモリ402やI/O403と、バス404により結線される。マルチコア401の保持する各コアは、それぞれ固有のOSを駆動する。各コアのOS駆動に必要な情報は、共有メモリ402内の対応するOS使用領域4M1、4M2、4MNなどに保持される。図４では、各OSが単一のコアにより実行される例を示すが、あるOSが複数のコアを用いて実行されてもよい。ただし、システム内に、二つ以上のOSが動作すること、および特定のコアを利用するOSは一つである。
【００２４】
また、各OSは、複数のコアをまた、共有メモリ402内に、複数のOSが相互にデータを通信するための領域4MCを設ける。
【００２５】
図５に、図４のシステムで実行する機能の構成例を示す。各コアの実行するプログラム、および実行に必要なデータは、OS使用領域4M1、4M2、4MNおよび、OS間通信領域4MCに配置される。本図では、4M1、4M2、および4MCに配置されるプログラムとデータを例示する。なお、各部はプログラムやミドルウェアなどのソフトウェアを実行するCPUなどのハードウェアの部位を示すものとする。一部をハードウェアで実現してもよい。プログラムとミドルウェアとの分類は適宜に変更可能である。また「〜プログラム実行部」や「〜ミドルウェア実行部」は、単に「〜部」とも称する。
【００２６】
OS１使用領域4M1はOS専従処理プログラム実行部511、並列処理プログラム実行部512、並列処理ミドルウェア実行部513、OS間通信ミドルウェア実行部514などを保持する。これらのプログラム実行部やミドルウェア実行部は、OS１により管理、実行される。OS１の実行に必要なコードは、OS１プログラム実行部  515として保持される。同様に、OS使用領域4M2は、OS専従処理プログラム実行部521、並列処理プログラム実行部522、並列処理ミドルウェア実行部523、OS間通信ミドルウェア実行部524、OS２プログラム実行部525などを保持する。
【００２７】
OS専従処理プログラム実行部511、521は、各OSに固有の機能であり、負荷分散の対象とならない。並列処理プログラム実行部512は、画像処理や音声処理などの並列化による効果の大きい機能を実現する並列処理プログラムを実行し、OS間負荷分散の対象となる。並列処理プログラム実行部512は、逐次実行部516、および並列化対象部517から構成される。並列処理プログラム実行部512は、並列化対象部517の実行を、並列処理ミドルウェア実行部513に依頼する。並列処理ミドルウェア実行部513は、OS２などの実行する並列処理ミドルウェア実行部523と連携し、負荷を適切に分散しながら依頼された処理を並列実行する。
【００２８】
OS間通信ミドルウェア実行部514、523は、異なるコア上で動作するOSが、相互にデータとシグナルを送受信するための機能を提供する。送受信されるデータはOS間通信領域4MCに配置される。シグナルの送受信は、他コアへの割り込みなどにより実現される。並列処理ミドルウェア実行部513、523は、相互にデータとシグナルを送受信するために、OS間通信ミドルウェア実行部514、524を利用する。
【００２９】
並列処理ミドルウェア実行部513は、並列タスク分割部518、並列タスク・スケジューリング部519、並列タスク実行部51A、並列タスク実行結果統合部51B、OS負荷情報推定部51C、並列タスクリスト部51D、OS負荷情報部51E、状態負荷対応情報部51Fなどを持つ。並列処理ミドルウェア実行部523は、並列タスク実行部527、OS状態検知部528などを持つ。
【００３０】
並列タスク分割部518は、並列処理プログラム実行部512から並列処理の実行依頼を受け付け、受けつけた処理を、各OSが実行可能な処理単位である「並列タスク」に分割する。分割後、並列タスクの実行順序決定に必要な情報を並列タスクリスト部51Dに追加し、並列タスクの実行に必要な情報を並列タスク情報部5C1に追加する。並列タスク・スケジューリング部519は、並列タスクリスト部51DとOS負荷情報部51Eを参照し、並列タスクを実行するOSを決定し、実行を依頼する。ある並列タスクをOS１により実行する場合は、並列タスク実行部51Aに実行を依頼し、OS２により実行する場合は、並列タスク実行部527に実行を依頼する。並列タスク実行部51A、および527は依頼された並列タスクを実行する。並列タスクの実行に必要な入力データは並列タスク情報部5C1を参照して取得する。並列タスクの実行によって得られた出力データは、並列タスク情報部5C1に格納する。並列タスク実行結果統合部51Bは、並列タスク分割部518により分割された並列タスクすべての完了を待ち、並列タスクの実行結果を統合し、統合した実行結果を並列処理プログラム実行部512に渡す。
【００３１】
OS状態検知部528は、OS２にて実行されるプログラムの状態を収集し、OS状態情報部5C2に追加する。収集する状態には、OS専従処理プログラム実行部521やOS２プログラム実行部525の状態などがある。例えば、OS専従処理プログラム実行部521が動画再生プログラムであれば、再生状況（再生中、停止中）、再生対象動画のビットレートなどを、再生状態に変化に応じて受け取る。また、OS  2に対して、管理しているプログラム数などを定期的に問い合わせて収集する。図５では、OS２の状態情報のみを収集する図を示したが、OS１の並列処理ミドルウェア実行部513にOS状態検知部を配置してもよい。OS負荷情報推定部51Cは、OS状態情報5C2を参照し、当該OSの状態を取得する。さらに状態負荷対応情報部51Fを参照し、他OSの負荷を推定し、推定した負荷情報をOS負荷情報部51Eに記録する。先に述べた並列タスク・スケジューリング部519は、OS負荷情報部51Eを参照し、高負荷OSへの並列タスク実行依頼をさけ、低負荷OSに並列タスク実行を依頼する。
【００３２】
図６から図１０を用いて、本実施例におけるデータ構成例を示す。ここでは各データ構造をテーブル形式により実現する例を示したが、同一の情報を持つデータ形式であれば、リスト構造などの別の構造を取ってもよい。
【００３３】
図６に並列タスクリスト部51Dの並列タスクリストのデータ構成例を示す。ここに示した並列タスクリストには、５つの並列タスクが登録されている。各並列タスクは、一意に識別可能なIDを持つ。並列タスクごとに実行に必要とするCPU時間量は異なる。ここでは、「CPU負荷」という表現により、実行に必要となるCPU時間量に相当するデータを保持する例を示す。また、別の並列タスクの実行結果を入力に取る並列タスクなど、各並列タスクの実行順序に制約がある場合がある。「依存並列タスク」は、当該並列タスクの実行開始時に、完了している必要のある並列タスクのIDを示す。ここでは、並列タスクID２３、２４、２５の実行結果を用いて、並列タスクID２６、２７が実行される例を示した。同時並列タスク」は、同じ並列処理から分割された別の並列タスクを示す。ここでは、並列タスクID２３、２４、２５は同じ並列処理から分割され、並列タスクID２６、２７は別の並列処理から分割される例を示した。「実行OSID」は、並列タスク・スケジューリング部により決定された、当該タスクを実行するOSを示す。当該並列タスクの実行状況は、並列タスク状態に格納される。
【００３４】
図７に並列タスク情報部5C1の並列タスク情報のデータ構成例を示す。並列タスク情報は、並列タスクごとに、並列タスクID、関数ID、入力データ、出力データなどの情報を保持する。関数IDは、当該並列タスクの実行処理を実装する関数の識別子である。図７では、並列タスクID２３、２４、２５は関数PARA_Aにより実行され、並列タスクID２６、２７は関数PARA_Bにより実行される例を示した。入力データと出力データは、各関数の実行に与えられるデータと、および実行結果データを格納する領域である。
【００３５】
図８にOS状態情報部5C2のOS状態情報のデータ構成例を示す。ここでは、OS２の管理下で動作するOS専従処理プログラム実行部521の一例として、動画データをデコードする「デコーダ」が動作している状況を示す。デコーダの処理負荷を特徴付ける状態として、「動作状態」と「ビットレート」がOS状態情報に記録される。また、OS２自体の処理負荷を特徴づける状態として、OS２が実行状態を管理するプログラムの数である「プログラム数」が記録される。また、「OS  ID」の値を変えることで、他のOSの状態も同様に記録できる。
【００３６】
図９にOS負荷情報部51EのOS負荷情報のデータ構成例を示す。OS状態情報の内容を用いて算出された、OSの負荷を推定した値が格納されている。
【００３７】
図１０に状態負荷対応情報部51Fの状態負荷対応情報のデータ構成例を示す。図８に示した各状態に対応し、状態を負荷に換算するための方法「負荷換算方法」と、換算に必要な情報「換算情報」を格納している。例えば、デコーダの動作状態であれば、停止中、再生中、一時停止中の各状態に応じ、テーブルから対応する負荷の値を得る。この場合は、テーブルが換算情報となる。また、再生対象となっている動画のビットレートに応じた負荷は、ビットレート（Mbps）に２を乗じた値をCPU負荷（%）として算出することを示している。この場合は、算出式が換算情報となる。
【００３８】
以下、図１１から図１６を用いて、本実施例における各プログラムの実行手順を示す。
【００３９】
図１１に、並列タスク分割部518の処理手順を示す。
【００４０】
手順（ステップ）1101：  並列処理プログラム実行部512からの並列処理実行依頼を待ち受ける。
【００４１】
手順1102：  依頼された並列処理を、並列タスクに分割し、並列タスク情報に追加する。図７に記載された並列タスクID２３、２４、２５は、一つの並列処理を三つの並列タスクに分割する例である。分割処理は、並列タスク情報に三つの並列タスク情報を追加する処理、並列処理プログラム実行部512から受け取った入力データを各並列タスクに分割する処理、各並列タスクの出力データ領域を確保する処理などを含む。
【００４２】
手順1103：  前記手順1102にて分割した並列タスクを、並列タスクリストに追加する。追加した並列タスクの状態は「未スケジュール」、実行OSIDは「未定」とする。その後、並列タスク・スケジューリング部519に、並列タスク追加を通知する。
【００４３】
図１２に、並列タスク・スケジューリング部519の処理手順を示す。
【００４４】
手順1201：  スケジューリングの契機となる、「並列タスク追加」「並列タスク実行完了」「OS負荷変化」などの通知を待ち受ける。
【００４５】
手順1202：  並列タスクリストを参照し、並列タスクの中から、未スケジュールであり、なおかつ、依存並列タスクの実行が全て完了している並列タスクを検索する。見つかった場合は手順1203に進み、見つからない場合は手順1103に進む。
【００４６】
手順1203：  前記手順1202にて見つかった並列タスクのCPU負荷と、OS負荷情報に含まれている各OSの負荷を参照し、当該並列タスクを依頼してもCPU負荷が100%を超えないOSを検索する。適用システムによっては、基準値は100%に限らず、余裕を持たせて90%などの値としてもよい。見つかった場合は手順1204に進み、見つからない場合は手順1205に進む。
【００４７】
手順1204：  前記手順1203にて見つかったOS上で動作している、並列タスク実行部527に、当該並列タスクの実行依頼を通知する。依頼内容にあわせ、並列タスクリストの実行OSID、並列タスク状態などを変更する。
【００４８】
手順1205：  手順1203にて適切なOSが見つからず、なおかつ並列処理プログラム実行部512と同じOS１上で並列タスクを実行可能であれば、並列タスク実行部51Aに、当該並列タスクの実行依頼を通知する。依頼内容にあわせ、並列タスクリストの実行OSID、並列タスク状態などを変更する。
【００４９】
図１３に、並列タスク実行部51A、527の処理手順を示す。
【００５０】
手順1301：  並列タスク・スケジューリング部519からの、並列タスク実行依頼を待ち受ける。
【００５１】
手順1302：  並列タスク情報を参照し、実行を依頼された並列タスクを実行する。実行する関数は並列化対象部517、526に含まれている。並列タスク情報内の関数IDを用い、関数を特定する。並列タスク情報の入力データのアドレスを、パラメータに指定し、当該関数を起動する。実行により出力されるデータは、並列タスク情報の出力データに格納される。
【００５２】
手順1303：  並列タスク実行結果統合部51Bに、実行完了を通知する。
【００５３】
図１４に、並列タスク実行結果統合部51Bの処理手順を示す。
【００５４】
手順1401：  並列タスク実行部51A、527から送られる、並列タスク実行完了通知を待ち受ける。
【００５５】
手順1402：  並列タスクリストを参照し、当該並列タスクの「同時並列タスクID」を取得する。同時並列タスクIDに指定された並列タスクが全て完了していれば、手順1403に進む。完了していなければ、手順1404に進む。
【００５６】
手順1403：  完了した並列タスクすべての出力データを並列タスク情報から取得し、並列処理プログラム実行部512へ通知する。
【００５７】
手順1404：  並列タスクリスト51Dにおける当該並列タスクの状態を「完了」とし、実行完了を並列タスク・スケジューリング部519に通知する。
【００５８】
図１５に、OS状態検知部528の処理手順を示す。
【００５９】
手順1501：  OS専従処理プログラム実行部521、OS２  プログラム実行部525などから送られる、状態変化の通知を待ち受ける。もしくは、一定時間の経過を待ち、OS専従処理プログラム実行部521、OS２  プログラム実行部525などに状態を問い合わせる。
【００６０】
手順1502：  取得した状態に従って、OS状態情報を変更し、OS負荷情報推定部51Cに状態変化を通知する。
【００６１】
図１６に、OS負荷情報推定部51Cの処理手順を示す。
【００６２】
手順1601：  OS状態検知部528からの状態変化通知を待ち受ける。
【００６３】
手順1602：  OS状態情報、および状態負荷情報を参照し、当該OSにかかっている負荷の推定値を算出する。本実施例では、各状態に応じた負荷を算出し、それらの負荷を加算する推定方法を示す。図１０に示した例では、デコーダの動作状態に応じた負荷は、テーブルを参照することで決定される。再生中であれば、負荷は２０％である。ビットレートに応じた負荷は、計算式により算出される。ビットレートが２０Ｍｂｐｓであれば、負荷は４０％である。同様にOSの実行プログラム数に応じた負荷は、実行プログラム数が２であれば、１０％である。これらの負荷、２０％、４０％、１０％を加算した７０％が、OS２の負荷と推定される。
【００６４】
手順1603：  前記手順1602により算出した負荷を、OS負荷情報51Eへ反映し、OS負荷の変更を並列タスク・スケジューリング部519に通知する。
【００６５】
上に述べた実施形態により、マルチコアを搭載する組込みシステムであって、AMP方式により複数OSを並存させる組込みシステムにおいて、計算資源をOSに配分するオーバーヘッドを抑えつつ、OS間負荷の動的な分散を実現できる。なぜなら、各OSは時分割により切り替えながら、OS専従処理プログラム実行部511、521と、並列処理ミドルウェア実行部513、523を同時実行するからである。これにより、各コアの逐次処理による静的な並列処理と、複数コアにまたがった動的な並列処理の双方により、マルチコアの性能を引き出す負荷分散が実現される。各OSによるOS専従処理プログラムと並列処理ミドルウェアの時分割切り替えにはオーバーヘッドが生じるが、このオーバーヘッドは、仮想マシンモニタによるOS切り替えオーバーヘッドよりも小さく抑えられる。
【図面の簡単な説明】
【００６６】
【図１】本実施例の概要を示す。
【図２】仮想マシンモニタを適用したシステムのソフトウェア構成例を示す。
【図３】マルチコア搭載システムにAMP方式を適用したシステムのソフトウェア構成例を示す。
【図４】システム構成例を示す。
【図５】機能構成例を示す。
【図６】並列タスクリスト部51Dにおけるデータ構成例を示す。
【図７】並列タスク情報5C1におけるデータ構成例を示す。
【図８】OS状態情報部5C2におけるデータ構成例を示す。
【図９】OS負荷情報部51Eにおけるデータ構成例を示す。
【図１０】状態負荷対応情報部51Fにおけるデータ構成例を示す。
【図１１】並列タスク分割部518の処理手順例を示す。
【図１２】並列タスク・スケジューリング部519の処理手順例を示す。
【図１３】並列タスク実行部52A、527の処理手順例を示す。
【図１４】並列タスク実行結果統合部51Bの処理手順例を示す。
【図１５】OS状態検知部528の処理手順例を示す。
【図１６】OS負荷情報推定部51Cの処理手順例を示す。
【符号の説明】
【００６７】
401…マルチコア、402…共有メモリ、403…I/O、404…バス、4C1…コア1、4C2…コア2、4CN…コアN、4M1…OS１使用領域、4M2…OS2使用領域、4MN…OSN使用領域、4MC…OS間通信領域、511…OS専従処理プログラム実行部、512…並列処理プログラム実行部、513…並列処理ミドルウェア実行部、514…OS間通信ミドルウェア実行部、515…OS1プログラム実行部、516…逐次実行部、517…並列化対象部、518…並列タスク分割部、519…並列タスク・スケジューリング部、51A…並列タスク実行部、51B…並列タスク実行結果統合部、51C…OS負荷情報統合部、51D…並列タスクリスト、51E…OS負荷情報、51F…状態負荷対応情報、521…OS専従処理プログラム実行部、522…並列処理プログラム実行部、523…並列処理ミドルウェア実行部、524…OS間通信ミドルウェア実行部、525…OS２プログラム実行部、526…並列化対象部、527…並列タスク実行部、528…OS状態検知部、5C1…並列タスク情報、5C2…OS状態情報
【図１】
2009163527.tif 000003
【図２】
2009163527.tif 000004
【図３】
2009163527.tif 000005
【図４】
2009163527.tif 000006
【図５】
2009163527.tif 000007
【図６】
2009163527.tif 000008
【図７】
2009163527.tif 000009
【図８】
2009163527.tif 000010
【図９】
2009163527.tif 000011
【図１０】
2009163527.tif 000012
【図１１】
2009163527.tif 000013
【図１２】
2009163527.tif 000014
【図１３】
2009163527.tif 000015
【図１４】
2009163527.tif 000016
【図１５】
2009163527.tif 000017
【図１６】
2009163527.tif 000018