(57)【特許請求の範囲】
【請求項１】
マルチコアプラットホームにおいてソフトリアルタイムオペレーティングシステムの実時間性を確保する方法であって、
第１のコアが、複数の周期のうちの第１の周期の間に作業スレッドを実行するステップと、
前記第１のコアが、前記複数の周期のうちの第２の周期の間に前記作業スレッドが実行される第２のコアを決定するステップであって、前記第１のコアが、前記作業スレッドのコード及び前記作業スレッドの実行に必要なデータのうち前記作業スレッドの実行により変更されないデータを前記第２のコアに転送する、ステップと、
前記第１のコアが、前記第２のコアにウェイティング区間に入るよう指示するステップと、
前記第２のコアが前記ウェイティング区間にいる間に、前記第１のコアが前記作業スレッドの実行に必要なデータのうち前記作業スレッドの実行により変更されるデータを前記第２のコアに転送することにより、前記作業スレッドを移動させるステップと、
を含む方法。
【請求項２】
前記作業スレッドは前記複数の周期の各々で周期的に実行されるよう構成されるリアルタイムタスクスレッドであり、前記方法は、
前記第２のコアに前記作業スレッドの実行により変更されるデータが転送された後、前記第２の周期が到来するときに、前記第２のコアが前記作業スレッドを実行するステップと、
をさらに含む請求項１に記載の方法。
【請求項３】
前記ウェイティング区間は、スピン、または、スピンとスリープとの組み合わせを実行するよう構成される、請求項１に記載の方法。
【請求項４】
前記決定するステップは、
作業スレッド配置方法によって、前記マルチコアプラットホームの複数のコアのうちのどれが前記第２のコアとして割り当てられるかを決定するステップを含む、請求項１乃至３の何れか一項に記載の方法。
【請求項５】
請求項１乃至４のいずれかに記載の方法をコンピュータで実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項６】
マルチコアプラットホームにおいてソフトリアルタイムオペレーティングシステムの実時間性を確保する装置であって、
第１のコアと第２のコアとを含む複数のコアを備え、
前記第１のコアは、
複数の周期のうちの第１の周期の間に作業スレッドを実行し、
前記複数の周期のうちの第２の周期の間に前記作業スレッドが実行される前記第２のコアを決定し、
前記作業スレッドのコード及び前記作業スレッドの実行に必要なデータのうち前記作業スレッドの実行により変更されないデータを前記第２のコアに転送し、
前記第２のコアにウェイティング区間に入るよう指示し、
前記第２のコアが前記ウェイティング区間にいる間に、前記第１のコアが前記作業スレッドの実行に必要なデータのうち前記作業スレッドの実行により変更されるデータを前記第２のコアに転送することにより、前記作業スレッドを移動させる、
ように構成される、
装置。
【請求項７】
前記作業スレッドは前記複数の周期の各々で周期的に実行されるよう構成されるリアルタイムタスクスレッドであり、
前記第２のコアに前記作業スレッドの実行により変更されるデータが転送された後、前記第２の周期が到来するときに、前記第２のコアは前記作業スレッドを実行する、
請求項６に記載の装置。
【請求項８】
前記ウェイティング区間は、スピン、またはスピンとスリープとの組み合わせを実行するよう構成される、請求項６又は７に記載の装置。
【請求項９】
前記第１のコアは、前記作業スレッドを前記第２のコアへ移動させると、他のスレッドを実行する、請求項７又は８に記載の装置。
【請求項１０】
前記第２のコアは、第１のコアから移動された前記作業スレッドを実行し、作業スレッド配置方法によって、前記複数のコアのうちのどれが前記第２のコアとして割り当てられるかを決定する、請求項７乃至９の何れか一項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
マルチコアまたはメニーコアが用いられているモバイルデバイス、マルチメディアデバイス、ホームデバイスなどにおける組み込みシステムで用いるソフトウェアフレームワークに関する。
【背景技術】
【０００２】
リアルタイムオペレーティングシステム（Ｒｅａｌ  Ｔｉｍｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＲＴＯＳ）とは、実時間応用プログラムの要請を考慮したオペレーティングシステムのことをいう。
【０００３】
リアルタイムオペレーティングシステムは、応用プログラムの開発者やプログラマーが計算した実行タイミングや実行時間に応用プログラムを実行させる。
【０００４】
リアルタイムオペレーティングシステムには、ハードリアルタイムオペレーティングシステムとソフトリアルタイムオペレーティングシステムとがある。ソフトリアルタイムオペレーティングシステムは、Ｗｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘ（登録商標）のような汎用ＯＳのライブラリー及びプログラムを使用することができるという長所があるが、ハードリアルタイムオペレーティングシステムに比べてジッターが大きいという短所がある。
【０００５】
ソフトリアルタイムオペレーティングシステムにおいてハードリアルタイムオペレーティングシステムと同等の実時間性を確保するためにはジッターを減少させることが重要である。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、ソフトリアルタイムオペレーティングシステムの実時間性を確保する方法及び装置を提供する。
【課題を解決するための手段】
【０００７】
本発明の一態様は、マルチコアプラットホームにおいてスレッドが実行されるコアを変更しつつスレッドを実行させることで、ソフトリアルタイムオペレーティングシステムの実時間性を確保する方法を提供する。
【０００８】
本発明の一態様に係る方法は、マルチコアプラットホームにおいてソフトリアルタイムオペレーティングシステムの実時間性を確保する方法であって、優先順位の最も高い作業スレッドを決定するステップと、前記作業スレッドを実行するステップと、前記作業スレッドが実行されるコアを決定するステップと、決定したコアに前記作業スレッドを移動させるステップと、を含むことを特徴とする。
【０００９】
前記方法は、前記作業スレッドを転送すると、作業スレッドの実行周期が到来するまで待つステップと、前記作業スレッドの実行周期が到来すると、前記決定したコアで前記作業スレッドを実行するステップと、をさらに含むことができる。
【００１０】
また、前記作業スレッドの実行周期が到来するまで待つ区間は、スピンで構成したり、または、スピンとスリープとの組み合わせで構成することができる。
【００１１】
また、前記作業スレッドを実行するステップは、あらかじめ定められた前記作業スレッドの実行周期になると、前記作業スレッドを実行するステップを含むことができる。
【００１２】
また、前記作業スレッドが実行されるコアを決定するステップは、あらかじめ定められた作業スレッド配置方法によって、次の周期の作業スレッドが実行されるコアを決定するステップを含むことができる。
【００１３】
本発明の一態様は、ソフトリアルタイムオペレーティングシステムの実時間性を確保する方法をコンピュータで実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体を提供する。
【００１４】
本発明の一態様に係る装置は、マルチコアプラットホームにおいてソフトリアルタイムオペレーティングシステムの実時間性を確保する装置であって、優先順位の最も高い作業スレッドを、あらかじめ定められた作業スレッド配置方法によって転送する第１のコアと、前記第１のコアから転送された作業スレッドを受信し、前記作業スレッドの実行周期が到来すると前記作業スレッドを実行する第２のコアと、を備えることを特徴とする。
【００１５】
また、前記第２のコアは、スピン、またはスピンとスリープとの組み合わせを通じて前記作業スレッドの実行周期が到来したか否か決定することができる。
【００１６】
また、前記第１のコアは、前記作業スレッドを前記第２のコアに転送すると、他のスレッドを実行することができる。
【００１７】
また、前記第２のコアは、第１のコアから転送された作業スレッドを実行し、あらかじめ定められた作業スレッド配置方法によって、次の周期の作業スレッドが実行されるコアを決定することができる。
【発明の効果】
【００１８】
本発明によると、ソフトリアルタイムオペレーティングシステムの実時間性を確保することができる。
【図面の簡単な説明】
【００１９】
【図１】マルチコアプラットホームの構成図である。
【図２】マルチコアプラットホームの構成図である。
【図３】マルチコアプラットホームでのタスク転送を示す図である。
【図４】マルチコアプラットホームでのタスク転送を示す図である。
【図５】本発明の一実施例に係るローカルメモリの構造を示す図である。
【図６】本発明の一実施例に係るマルチコアプラットホームでのタスク転送を示す図である。
【図７】リアルタイムオペレーティングシステムの作業スレッドの実行を説明するフロー図である。
【図８】図７の作業スレッドの実行により行われるタスクを示す図である。
【図９】本発明の一実施例に係るソフトリアルタイムオペレーティングシステムがマルチコアプラットホームで実時間性を確保するための作業スレッドの実行を説明するフロー図である。
【図１０】図９の作業スレッドの実行により行われるタスクを示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明を、添付の図面を参照しつつ詳細に説明する。
【００２１】
マルチコアプラットホームにおいてマルチタスクを行うために、オペレーティングシステムは、実行すべき各タスクをそれぞれのコアに割り当て、各タスクの優先順位に基づいてそれぞれのタスクをスケジューリングする。
【００２２】
このとき、タスクを複数のコアのいずれで実行するかを決定し、各タスクを該当のコアに割り当てる方法には、大きく分けて、静的な方法と動的な方法がある。マルチコアシステムでのタスクの転送についてより詳しく説明すると、下記通りである。
【００２３】
まず、コア間のタスク転送のためには、タスクが実行されていた状態を示す情報を、前のコアから、タスクを実行する次のコアに転送させなければならない。このような状態情報には、タスクが使用していたコアのレジスタファイル情報の他、タスクが使用していたメモリの内容も含まれる。
【００２４】
一般に、マルチコアプラットホームでは、キャッシュの他、コア毎のスクラッチパッドメモリ（Ｓｃｒａｔｃｈ  Ｐａｄ  Ｍｅｍｏｒｙ：ＳＰＭ）のようなローカルメモリが使われる。
【００２５】
スクラッチパッドメモリは、キャッシュとは違い、ハードウェアによって一貫性が保持されないため、応用プログラムやオペレーティングシステムのようなソフトウェアは必要なデータをＤＲＡＭや他のメモリから持って来なければならない。スクラッチパッドメモリはハードウェア構成によって数百ＫＢを占めることから、メモリ転送のためのコストを低減することが重要である。
【００２６】
このようなメモリ転送のための既存の方法としては、トータルコピー（ｔｏｔａｌ  ｃｏｐｙ）、プレコピー（Ｐｒｅ−ｃｏｐｙ）、デマンドページ（Ｄｅｍａｎｄ  Ｐａｇｅ）方式などが提案されている。ここで、トータルコピーは、タスクの実行を一時中断し、ローカルメモリの内容などを含む全情報を転送した後、新しいコアでタスクを再開する方法である。
【００２７】
プレコピーは、ローカルメモリのページ修正が一定レベル以下になるまではタスクの実行とローカルメモリの内容の転送を併行するが、一定レベル以下になると、タスクの実行を中断し、残りの内容を転送する方法である。
【００２８】
デマンドページは、仮想メモリのデマンドページを用いてタスクを直ちに転送した後、ページフォルトが発生する度に、必要なメモリ内容をコピーしてくる方法である。
【００２９】
このような従来のメモリ転送は、主に、分散システムにおいて速いタスク転送のために提案された。その他、マルチコアプラットホームにおいてスケジューリングに従って行われるタスクのデータをあらかじめロードする方法を用いることで、このようなロードによりタスクの実行が中止される時間を減らす方法も提案されている。
【００３０】
トータルコピー、プレコピー、デマンドページ方式は、主に、実時間性が要求されない分散システムで用いられる方法であって、マルチコアプラットホームには適していない。
【００３１】
特に、トータルコピー方式は、タスクが使用するローカルメモリの内容全体をコピーする間、タスクの実行を止めなければならず、タスク中断時間が長くなる。
【００３２】
また、プレコピー方式は、同じローカルメモリの内容のコピーが数回行われることがあり、メモリコピーによるオーバーヘッドが大きい。特に、マルチコアプラットホームでは、タスクに関するデータをローカルメモリの入力バッファーに保存した後、それを処理して出力バッファーに保存する作業を反復するが、データを考慮することなくメモリの内容全体をコピーするため、不必要なデータの転送が発生する。また、デマンドページ方式は仮想メモリハードウェアを必要とするが、殆どの場合、組み込みシステムでは仮想メモリハードウェアを提供していないため、デマンドページ方式の使用が困難である。
【００３３】
一方、マルチコアプラットホームにおいてスケジューリングに従って行われるタスクデータをあらかじめロードする方法は、主に、タスクが新しくロードされる際に、ロード時間を前のタスクの実行時間と重ね合わせることで性能を向上させる方法であって、タスクの実行中にタスクの中断なしでタスクを転送することとは相違する。
【００３４】
図１は、マルチコア／メニーコアプラットホームの構成図である。図１を参照すると、実施例の適用されるマルチコア／メニーコアプラットホームは、第１のコア１１、第１のスクラッチパッドメモリ１２、第２のコア２１、第２のスクラッチパッドメモリ２２、第３のコア３１、第３のスクラッチパッドメモリ３３、…、第Ｎのコア４１、第Ｎのスクラッチパッドメモリ４５、ＤＲＡＭ ５、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）６、Ｈ／Ｗモジュール７、及び通信ネットワーク８で構成される。
【００３５】
同図の各コアは、特定タスクを行う。これらのコアは、同種のコアで構成されてもよく、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、再構成可能なプロセッサ（Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐｒｏｃｅｓｓｏｒ：ＲＰ）などの異種のコアで構成されてもよい。
【００３６】
また、各コアは、スクラッチパッドメモリのようなローカルメモリを有しており、このローカルメモリにはタスク実行に必要なコード及びデータが保存される。すなわち、各コアは、タスクのコード及びデータをＤＲＡＭ  ５からローカルメモリにコピーした後、このコピーしたコード及びデータに基づいてタスクを行う。
【００３７】
各コアは、ＤＲＡＭ  ５に比べてローカルメモリへより速やかにアクセスできるため、タスクを迅速に行うことができる。あるコアから他のコアにタスクを転送するためには、ローカルメモリの内容などを含む、タスクの現在実行状態を新しいコアに移さなければならない。
【００３８】
Ｈ／Ｗモジュール７は、マルチコア／メニーコアプラットホーム特有の機能を支援する。もしマルチコア／メニーコアプラットホームが動映像再生装置であれば、Ｈ／Ｗモジュール７は動映像コーデックモジュールである。また、通信ネットワーク８は、同図に示した構成要素を接続させるもので、バスの形態を有することができる。
【００３９】
図２は、図１に示すマルチコア／メニーコアプラットホームにおいてコアがメッシュ状に接続された構造の例示図である。同図のメッシュ状に限定されず、マルチコア／メニーコアプラットホームのコアは様々な接続方式を有することができる。
【００４０】
図２を参照すると、コア間の接続方式によってコア間の通信速度は異なってくる。すなわち、互いに近くに配置されたコア間の通信は、互いに遠くに配置されたコア間の通信に比べて速度が速い。そのため、各コアにタスクを配置する際にも、タスク間の通信量に基づいて配置を異ならせる必要がある。これを適用すると、システムの負荷やアプリケーションの組み合わせによってタスクの配置が性能に影響を与えることがわかる。そのため、最適の性能を示すシステムを構成するためには、タスクの配置をコアの配置に合わせて変化させなければならない。
【００４１】
図３及び図４は、一般的なマルチコアシステムでのタスク転送を示す図である。図３及び図４に示すように、一般に、第１のコア１１０から第２のコア２１０にタスクを転送するためには、第１のコア１１０でのタスクの実行を一応中断し、ローカルメモリ１２０の内容などを含むタスクの現在実行状態を示す情報を、第２のコア２１０に全部移した後に、第２のコア２１０でタスクを再開する。
【００４２】
このとき、ローカルメモリはハードウェア構成によって数百ＫＢになるので、その内容を転送する間、タスクの実行が中断される。
【００４３】
図５は、ローカルメモリの構造を示す例示図である。同図では、一つのタスクが一つのローカルメモリを全部使用するとしたが、複数のタスクが一つのローカルメモリを分けて使用するように構成することもできる。
【００４４】
同図を参照すると、タスクが使用するローカルメモリは、タスクのコードが保存される領域、読み出し専用（Ｒｅａｄ  Ｏｎｌｙ：ＲＯ）データが保存される領域、読み書き（Ｒｅａｄ  Ｗｒｉｔｅ：ＲＷ）データが保存される領域、入力バッファー、及び出力バッファーで構成される。これらの領域は、ローカルメモリの論理的マップに相当する。
【００４５】
タスクは一連の命令の集合である。これらの命令はタスクのコードで示される。タスクの読み取り専用データは、コアによるタスク実行に必要なデータのうち、タスク実行によって変更されないデータのことを指す。タスクの読み書きデータは、コアによるタスク実行に必要なデータのうち、タスク実行によって変更されるデータのことを指す。
【００４６】
入力バッファーには、タスクに対して入力されるデータが保存される。出力バッファーには、入力バッファーに保存されたデータがタスクの実行によって処理された結果が保存される。
【００４７】
ローカルメモリと関連したタスクの実行動作を説明すると、次の通りである。コアは、タスクの実行に必要なデータを入力バッファーから読み込み、それを処理し、その結果を出力バッファーに保存する。
【００４８】
このとき、タスクの状態変化は、読み書きデータの形態でローカルメモリに保存される。タスクのコード及び読み取り専用データは、タスクの実行によってその値が変更されず、タスクの実行に関わらずに、あるコアから他のコアに転送することができる。
【００４９】
そして、入力バッファー及び出力バッファーのデータは、現在それを処理するコアによりアクセスされるものであればよい。このように、ローカルメモリに保存されたデータを、そのデータの属性に基づいて転送するためには、図５のように、同じ属性のデータが連続的に集まっていてもよいが、必ずしも連続している必要はないということが、本発明の属する技術の分野における通常の知識を有する者には理解されるであろう。
【００５０】
図６は、本発明の実施例に係るマルチコアプラットホームでのタスクの転送を示す図である。図６を参照すると、本実施例では、上述の内容に着目し、タスク実行によっても変わらないコード及び読み取り専用データを、タスク実行と併行してあらかじめ転送し、タスク実行によって変わる読み書きデータを転送する時にのみタスク実行を一時的に中断することで、タスク実行が中断される期間を最小化する。このとき、タスク実行によって処理される入力データは新しいコアのローカルメモリに伝達されるように設定し、現コアでは、残っている入出力データのみ処理するようにする。したがって、タスク転送中に一時的に、現コア及び新しいコアでタスクが同時に実行されることがある。現コアに残っている入出力データの処理が終了すると、タスク転送が完了し、タスクが使用していた現コアのローカルメモリは、他のタスクが使用することができる。
【００５１】
図６の実施例を、図１に示すマルチコア／メニーコアプラットホームに適用して説明すると、下記の通りである。ここで、タスクは第１のコア１１から第２のコア２１へ移動すると仮定する。
【００５２】
第１のコア１１は、現在実行しているタスクのコード及び読み取り専用データを第２のコア２１に転送し、この転送動作と併行して、現在実行しているタスクのコード、読み取り専用データ、読み書きデータなどに基づいて、このタスクに対して既に入力されたデータを処理することによってタスクを行う。
【００５３】
第１のコア１１は、このタスクに対して既に入力されたデータの処理が完了すると、タスクの実行を中断し、タスクの読み書きデータを第２のコア２１に転送する。第２のコア２１は、第１のコア１１から転送されたコード、読み取り専用データ、読み書きデータなどに基づいて、タスクに対して入力されるデータを処理することによって、中断されたタスクを再開する。
【００５４】
以上、マルチコアプラットホームでのタスクの転送方法を説明した。以下では、このようなマルチコアプラットホームにおいてソフトリアルタイムオペレーティングシステムの実時間性を確保できる方法について説明する。
【００５５】
図７は、一般的なオペレーティングシステムまたはソフトリアルタイムオペレーティングシステムの作業スレッドの実行を説明するフロー図であり、図８は、図７の作業スレッドの実行によって行われるタスクを示す図である。
【００５６】
一般に、応用プログラムレベルで実時間性を守るために用いる方法は、実時間で実行されるべきスレッドの優先順位を最上位に設定し、システムのロックアップを防止するために中間にスリープ区間を置く。
【００５７】
この方法によれば、実時間で実行されるべきスレッドが、バックグラウンドで動作するプログラムの影響を受けることがなく、オペレーティングシステムは、スリープ区間において、実時間で実行されなくてもよい他のスレッドを行うことでシステムのロックアップを防止することができる。
【００５８】
しかるに、ソフトリアルタイムオペレーティングシステムにおいて、図７に示すようなフローでアプリケーションを製作する場合、スリープ区間で他のスレッドが占有したり、オペレーティングシステムのスケジューリング問題により、予定されたスリープ区間よりも遅れてスリープが解除される問題がある。
【００５９】
つまり、スリープ区間が長くなり、実時間性が守られない場合が発生する。これを解決するためにスリープ区間を除去したりスピンを用いたりすると、システムのロックアップが発生することがある。
【００６０】
図９は、本発明の一実施例に係るソフトリアルタイムオペレーティングシステムの作業スレッドの実行を説明するフロー図であり、図１０は、図９の作業スレッドの実行によって行われるタスクを示す図である。
【００６１】
本発明の一実施例に係るソフトリアルタイムオペレーティングシステムの実時間性を確保する方法は、マルチコアのいずれか一つのコア（以下、「第１のコア」という。）により実時間で実行されるべきスレッドの優先順位を最上位に設定する。
【００６２】
実時間で実行されるべきスレッドの優先順位が最上位に設定されると、第１のコアでそのスレッドが実行される。
【００６３】
スレッドが実行されると、次の周期のスレッドが実行されるコアを決定し、決定されたコア（以下、「第２のコア」という。）にスレッドを転送する。ここで、スレッドの転送には、前述したマルチコアプラットホームでタスクを転送する方法を用いることができる。そして、スレッドを転送するコアを決定する規則としては、コアを周期別に再配置したり時間帯別に再配置する規則を用いることもでき、コアの負荷に従い再配置したりイベントに従い再配置する規則を用いることもできる。
【００６４】
スレッドの転送先である第２のコアでは、スレッドが転送される前に実行されていた他のスレッドの実行を止め、次の周期が到来するまで待つウェイティング区間を有する。
【００６５】
ウェイティング区間は、次の周期の到来を確認し続けるために、スピンで構成してもよく、スリープとスピンとの組み合わせで構成してもよい。
【００６６】
ウェイティング区間を有する第２のコアに第１のコアのスレッドが転送され、スレッドが実行されるべき次の周期が到来すると、ウェイティング区間が終了し、第２のコアでスレッドが再び実行される。図面では周期を１秒としているが、これに限定されるものではない。
【００６７】
このような構造は、ウェイティング区間に、スリープを単独使用せず、スピンを使用したり、スピンとスリープとを組み合わせて使用することによって、コアの占有を他のスレッドに奪われる可能性を除去することできる。
【００６８】
また、スリープ区間を置かず、前述の規則に従ってＣＰＵコアを移動しながらスレッドを実行するため、全てのコアに、他のスレッドが占有できる時間を割り当てることができる。すなわち、特定コアが完全に占有されることがないため、システムのロックアップの発生を防止することができる。
【符号の説明】
【００６９】
５  ＤＲＡＭ
６  ＤＭＡ
７  Ｈ／Ｗモジュール
８  通信ネットワーク
１１、２１、３１、４１、１１０、２１０  コア
１２、２２、３３、４５、１２０、２２０  ＳＰＭ
【図１】
0006296678.tif 000002
【図２】
0006296678.tif 000003
【図３】
0006296678.tif 000004
【図４】
0006296678.tif 000005
【図５】
0006296678.tif 000006
【図６】
0006296678.tif 000007
【図７】
0006296678.tif 000008
【図８】
0006296678.tif 000009
【図９】
0006296678.tif 000010
【図１０】
0006296678.tif 000011