(57)【要約】【課題】リアルタイム性を損なうことなく、プロセッサのパワーセーブを実現する。【解決手段】スケジューリング処理では、３つの処理要素Ａ，Ｂ，Ｃを含むリアルタイム処理が予め決められた特定の時間間隔で周期的にプロセッサ（ＶＰＵ）によって実行されるように、特定の時間間隔を単位とする各周期における処理要素Ａ，Ｂ，Ｃそれぞれの実行タイミングが決定される。そして、各周期の開始タイミングから処理要素Ａ，Ｂ，Ｃを含むリアルタイム処理の実行が完了されるまでの期間Ｔ１が、各周期の時間間隔に対して占める割合に基づいて、ＶＰＵの動作速度を低下する処理が実行される。例えば、期間Ｔ１の長さが各周期の時間間隔の１／２であるならば、期間Ｔ１の長さが各周期の時間間隔近辺にまで延びるように、ＶＰＵの動作速度を１／２に低下させる制御が実行される。【選択図】    図１２
2005062956.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイム処理を特定の時間間隔で周期的に実行するためのスケジューリング方法において、
前記リアルタイム処理がプロセッサによって前記特定の時間間隔で周期的に実行されるように、前記リアルタイム処理の実行開始タイミングを決定するステップと、
前記プロセッサが第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行に要する時間を示す情報と前記特定の時間間隔とに基づき、前記プロセッサが前記第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行期間が前記特定の時間間隔に対して占める割合を算出するステップと、
前記算出された割合に基づいて、前記プロセッサの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行するステップとを具備することを特徴とするスケジューリング方法。
【請求項２】
前記動作速度制御処理を実行するステップは、前記特定の時間間隔を単位とする各周期における前記リアルタイム処理の実行が遅くとも次の周期が開始される前に完了し、且つ前記各周期における前記リアルタイム処理の実行が完了するタイミングが前記プロセッサが前記第１の動作速度で動作する場合よりも遅れるように、前記算出された割合と前記第１の動作速度とに基づいて、前記第２の動作速度の値を決定するステップを含むことを特徴とする請求項１記載のスケジューリング方法。
【請求項３】
前記動作速度制御処理を実行するステップは、前記プロセッサの動作速度が前記第２の動作速度に設定されるように、前記プロセッサに供給されるクロック周波数の値を制御するステップを含むことを特徴とする請求項１記載のスケジューリング方法。
【請求項４】
連鎖された複数の処理要素から構成されるリアルタイム処理を複数のプロセッサを用いて特定の時間間隔で周期的に実行するためのスケジューリング方法において、
前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、互いに並列に実行可能な複数の処理要素グループにグループ分けするステップと、
前記特定の時間間隔を単位とする周期毎に前記複数の処理要素グループが互いに異なるプロセッサによって並列に実行されるように、各周期における前記複数の処理要素グループそれぞれの実行タイミングと各周期において前記複数の処理要素グループそれぞれが実行されるプロセッサを決定するステップと、
前記各周期における前記複数の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記複数の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記複数の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が最も長い処理要素グループを選択するステップと、
前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出するステップと、
前記算出された割合に基づいて、前記複数の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行するステップとを具備することを特徴とするスケジューリング方法。
【請求項５】
前記動作速度制御処理を実行するステップは、前記各周期における前記選択された処理要素グループの実行期間が遅くとも次の周期が開始される前に完了し、且つ前記各周期の開始タイミングから前記複数の処理要素グループの実行期間が完了するまでの時間間隔それぞれが同じ割合で延びるように、前記算出された割合と前記第１の動作速度とに基づいて、前記第２の動作速度の値を決定するステップを含むことを特徴とする請求項４記載のスケジューリング方法。
【請求項６】
前記動作速度制御処理を実行するステップは、前記複数の処理要素グループが実行されるプロセッサそれぞれの動作速度が前記第２の動作速度に設定されるように、前記プロセッサそれぞれに供給されるクロック周波数の値を制御するステップを含むことを特徴とする請求項４記載のスケジューリング方法。
【請求項７】
連鎖された複数の処理要素から構成されるリアルタイム処理を複数のプロセッサを用いて特定の時間間隔で周期的に実行するためのスケジューリング方法において、
前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、第１処理要素グループと当該第１処理要素グループに後続して実行される第２処理要素グループとにグループ分けするステップと、
前記第２の処理要素グループが前記第１の処理要素グループよりも１周期分遅れた状態で前記特定の時間間隔で前記第１の処理要素グループおよび前記第２の処理要素グループの各々が１以上のプロセッサによって周期的に実行されるように、前記特定の時間間隔を単位とする各周期における前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行タイミングと各周期において前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれが実行されるプロセッサを決定するステップと、
前記各周期における前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記第１の処理要素グループおよび前記第２の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が長い処理要素グループを選択するステップと、
前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出するステップと、
前記算出された割合に基づいて、前記第１の処理要素グループおよび前記第２の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行するステップとを具備することを特徴とするスケジューリング方法。
【請求項８】
リアルタイム処理を特定の時間間隔で周期的に実行する情報処理システムにおいて、
プロセッサと、
前記リアルタイム処理が前記プロセッサによって前記特定の時間間隔で周期的に実行されるように、前記リアルタイム処理の実行開始タイミングを決定する手段と、
前記プロセッサが第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行に要する時間を示す情報と前記特定の時間間隔とに基づき、前記プロセッサが前記第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行期間が前記特定の時間間隔に対して占める割合を算出する手段と、
前記算出された割合に基づいて、前記プロセッサの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行する手段とを具備することを特徴とする情報処理システム。
【請求項９】
前記動作速度制御処理を実行する手段は、前記特定の時間間隔を単位とする各周期における前記リアルタイム処理の実行が遅くとも次の周期が開始される前に完了し、且つ前記各周期における前記リアルタイム処理の実行が完了するタイミングが前記プロセッサが前記第１の動作速度で動作する場合よりも遅れるように、前記算出された割合と前記第１の動作速度とに基づいて、前記第２の動作速度の値を決定する手段を含むことを特徴とする請求項８記載の情報処理システム。
【請求項１０】
前記動作速度制御処理を実行する手段は、前記プロセッサの動作速度が前記第２の動作速度に設定されるように、前記プロセッサに供給されるクロック周波数の値を制御する手段を含むことを特徴とする請求項８記載の情報処理システム。
【請求項１１】
連鎖された複数の処理要素から構成されるリアルタイム処理を特定の時間間隔で周期的に実行する情報処理システムにおいて、
複数のプロセッサと、
前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、互いに並列に実行可能な複数の処理要素グループにグループ分けする手段と、
前記特定の時間間隔を単位とする周期毎に前記複数の処理要素グループが互いに異なるプロセッサによって並列に実行されるように、各周期における前記複数の処理要素グループそれぞれの実行タイミングと各周期において前記複数の処理要素グループそれぞれが実行されるプロセッサを決定する手段と、
前記各周期における前記複数の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記複数の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記複数の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が最も長い処理要素グループを選択する手段と、
前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出する手段と、
前記算出された割合に基づいて、前記複数の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行する手段とを具備することを特徴とする情報処理システム。
【請求項１２】
前記動作速度制御処理を実行する手段は、前記各周期における前記選択された処理要素グループの実行期間が遅くとも次の周期が開始される前に完了し、且つ前記各周期の開始タイミングから前記複数の処理要素グループの実行期間が完了するまでの時間間隔それぞれが同じ割合で延びるように、前記算出された割合と前記第１の動作速度とに基づいて、前記第２の動作速度の値を決定する手段を含むことを特徴とする請求項１１記載の情報処理システム。
【請求項１３】
前記動作速度制御処理を実行する手段は、前記複数の処理要素グループが実行されるプロセッサそれぞれの動作速度が前記第２の動作速度に設定されるように、前記プロセッサそれぞれに供給されるクロック周波数の値を制御する手段を含むことを特徴とする請求項１１記載の情報処理システム。
【請求項１４】
連鎖された複数の処理要素から構成されるリアルタイム処理を特定の時間間隔で周期的に実行する情報処理システムにおいて、
複数のプロセッサと、
前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、第１処理要素グループと当該第１処理要素グループに後続して実行される第２処理要素グループとにグループ分けする手段と、
前記第２の処理要素グループが前記第１の処理要素グループよりも１周期分遅れた状態で前記特定の時間間隔で前記第１の処理要素グループおよび前記第２の処理要素グループの各々が１以上のプロセッサによって周期的に実行されるように、前記特定の時間間隔を単位とする各周期における前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行タイミングと各周期において前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれが実行されるプロセッサを決定する手段と、
前記各周期における前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記第１の処理要素グループおよび前記第２の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が長い処理要素グループを選択する手段と、
前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出する手段と、
前記算出された割合に基づいて、前記第１の処理要素グループおよび前記第２の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行する手段とを具備することを特徴とする情報処理システム。
【請求項１５】
コンピュータに、リアルタイム処理を特定の時間間隔で周期的に実行させるプログラムであって、
前記リアルタイム処理がプロセッサによって前記特定の時間間隔で周期的に実行されるように、前記リアルタイム処理の実行開始タイミングを決定する処理を、前記コンピュータに実行させる手順と、
前記プロセッサが第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行に要する時間を示す情報と前記特定の時間間隔とに基づき、前記プロセッサが前記第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行期間が前記特定の時間間隔に対して占める割合を算出する処理を、前記コンピュータに実行させる手順と、
前記算出された割合に基づいて、前記プロセッサの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を、前記コンピュータに実行させる手順とを具備することを特徴とするプログラム。
【請求項１６】
複数のプロセッサを含むコンピュータに、連鎖された複数の処理要素から構成されるリアルタイム処理を特定の時間間隔で周期的に実行させるプログラムであって、
前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、互いに並列に実行可能な複数の処理要素グループにグループ分けする処理を、前記コンピュータに実行させる手順と、
前記特定の時間間隔を単位とする周期毎に前記複数の処理要素グループが互いに異なるプロセッサによって並列に実行されるように、各周期における前記複数の処理要素グループそれぞれの実行タイミングと各周期において前記複数の処理要素グループそれぞれが実行されるプロセッサを決定する処理を、前記コンピュータに実行させる手順と、
前記各周期における前記複数の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記複数の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記複数の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が最も長い処理要素グループを選択する処理を、前記コンピュータに実行させる手順と、
前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出する処理を、前記コンピュータに実行させる手順と、
前記算出された割合に基づいて、前記複数の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を、前記コンピュータに実行させる手順とを具備することを特徴とするプログラム。
【請求項１７】
複数のプロセッサを含むコンピュータに、連鎖された複数の処理要素から構成されるリアルタイム処理を特定の時間間隔で周期的に実行させるプログラムであって、
前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、第１処理要素グループと当該第１処理要素グループに後続して実行される第２処理要素グループとにグループ分けする処理を、前記コンピュータに実行させる手順と、前記第２の処理要素グループが前記第１の処理要素グループよりも１周期分遅れた状態で前記特定の時間間隔で前記第１の処理要素グループおよび前記第２の処理要素グループの各々が１以上のプロセッサによって周期的に実行されるように、前記特定の時間間隔を単位とする各周期における前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行タイミングと各周期において前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれが実行されるプロセッサを決定する処理を、前記コンピュータに実行させる手順と、前記各周期における前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記第１の処理要素グループおよび前記第２の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記第１の処理要素グループおよび前記第２の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が長い処理要素グループを選択する処理を、前記コンピュータに実行させる手順と、
前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出する処理を、前記コンピュータに実行させる手順と、
前記算出された割合に基づいて、前記第１の処理要素グループおよび前記第２の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を、前記コンピュータに実行させる手順とを具備することを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はリアルタイム処理を特定の時間間隔で周期的に実行するためのスケジューリング方法および情報処理システムに関する。
【０００２】
【従来の技術】
従来より、サーバコンピュータのような計算機システムにおいては、その演算処理能力の向上を図るために、マルチプロセッサ、並列プロセッサのようなシステムアーキテクチャが利用されている。マルチプロセッサおよび並列プロセッサのどちらも、複数のプロセッサユニットを利用することによって演算処理の並列化を実現している。
複数のプロセッサユニットを備えたシステムとしては、例えば、１台の高速ＣＰＵ、複数台の低速ＣＰＵ、および共有メモリを備えたシステムが知られている（例えば、特許文献１参照）。このシステムにおいては、高速ＣＰＵおよび複数台の低速ＣＰＵに対する処理プログラムのプロセス群の割付は、プロセス群の並列動作度の大小および処理時間の大小に応じて行われる。
【０００３】
また、複数のプロセッサにスレッド群を割り当てるためのスケジューリング技術としては、同一のプロセス内に属するスレッドを同一のプロセッサに実行させる技術が知られている（例えば、特許文献２参照）。
【０００４】
ところで、最近では、計算機システムのみならず、例えば、ＡＶ（オーディオ・ビデオ）データのような大容量のデータをリアルタイムに処理する組み込み機器においても、その演算処理能力の向上のためにマルチプロセッサ、並列プロセッサのようなシステムアーキテクチャの導入が要求されている。
【０００５】
【特許文献１】
特開平１０−１４３３８０号公報
【０００６】
【特許文献２】
特開平８−１８００２５号公報
【０００７】
【発明が解決しようとする課題】
しかし、マルチプロセッサ、並列プロセッサのようなシステムアーキテクチャを前提としたリアルタイム処理システムの報告はほとんどなされていないのが現状である。
リアルタイム処理システムにおいては、ある許容時間の制限内に個々の処理を完了することが要求される。また連鎖された複数の処理要素の組み合わせから構成されるリアルタイム処理を、限られたある一定時間間隔で周期的に実行するためには、連鎖された複数の処理要素すべてを各周期の時間間隔内に完了することが必要となる。
【０００８】
リアルタイム処理システムは組み込みシステムとして用いられることが多いので、その低消費電力化の実現も大きな課題である。システムに搭載されるプロセッサユニットの数が多くなるほど、消費電力は増大する。このため、マルチプロセッサ、並列プロセッサのようなシステムアーキテクチャをリアルタイム処理システムに適用するに際しては、リアルタイム性が要求される処理を時間内に完了するというリアルタイム性を保障しながら、プロセッサのパワーセーブを図るための新たな仕組みが要求される。
【０００９】
非リアルタイム処理システムにおいては、計算機システムのパワーセーブは、通常、プロセッサの動作周波数を下げることによって実現されている。しかし、リアルタイム処理システムにおいては、もしプロセッサの動作周波数を単純に下げると、リアルタイム性が要求される処理が時間内に完了できなくなり、これによってリアルタイム性を損なうという問題が生じる。
【００１０】
本発明は上述の事情を考慮してなされたものであり、リアルタイム性を損なうことなくプロセッサのパワーセーブを実現することが可能なスケジューリング方法および情報処理システムを提供することを目的とする。
【００１１】
【課題を解決するための手段】
上述の課題を解決するため、本発明は、リアルタイム処理を特定の時間間隔で周期的に実行するためのスケジューリング方法において、前記リアルタイム処理がプロセッサによって前記特定の時間間隔で周期的に実行されるように、前記リアルタイム処理の実行開始タイミングを決定するステップと、前記プロセッサが第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行に要する時間を示す情報と前記特定の時間間隔とに基づき、前記プロセッサが前記第１の動作速度で動作した場合に対応する前記リアルタイム処理の実行期間が前記特定の時間間隔に対して占める割合を算出するステップと、前記算出された割合に基づいて、前記プロセッサの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行するステップとを具備することを特徴とする。
【００１２】
このスケジューリング方法によれば、プロセッサが第１の動作速度で動作した場合に対応するリアルタイム処理の実行期間が特定の時間間隔に対して占める割合に基づいて、プロセッサの動作速度を第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理が実行される。よって、リアルタイム処理を特定の時間間隔で周期的に実行するというリアルタイム性を保証しつつ、プロセッサのパワーセーブを実現することが可能となる。
【００１３】
また、本発明は、連鎖された複数の処理要素から構成されるリアルタイム処理を複数のプロセッサを用いて特定の時間間隔で周期的に実行するためのスケジューリング方法において、前記処理要素間の実行順序の関係に基づいて、前記複数の処理要素を、互いに並列に実行可能な複数の処理要素グループにグループ分けするステップと、前記特定の時間間隔を単位とする周期毎に前記複数の処理要素グループが互いに異なるプロセッサによって並列に実行されるように、各周期における前記複数の処理要素グループそれぞれの実行タイミングと各周期において前記複数の処理要素グループそれぞれが実行されるプロセッサを決定するステップと、前記各周期における前記複数の処理要素グループそれぞれの実行タイミングと、第１の動作速度で動作するプロセッサによって実行された場合に対応する前記複数の処理要素グループそれぞれの実行に要する時間を示す情報とに基づいて、前記複数の処理要素グループの内から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が最も長い処理要素グループを選択するステップと、前記第１の動作速度で動作するプロセッサによって実行された場合に対応する前記各周期の開始タイミングから当該周期における前記選択された処理要素グループの実行期間が完了するまでの時間間隔が、前記特定の時間間隔に対して占める割合を算出するステップと、前記算出された割合に基づいて、前記複数の処理要素グループが実行されるプロセッサそれぞれの動作速度を前記第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理を実行するステップとを具備することを特徴とする。
【００１４】
このスケジューリング方法によれば、リアルタイム処理を構成する複数の処理要素が複数の処理要素グループに分けられ、それら複数の処理要素グループが互いに異なるプロセッサによって並列に実行されるようにスケジューリングされる。これにより、各周期の開始タイミングから当該周期におけるリアルタイム処理の実行期間が完了するまでの時間間隔を短くできるので、複数のプロセッサそれぞれの空き時間を増やすことが可能となる。この空き時間を有効利用した省電力制御を行うために、各周期内における実行期間の完了が最も遅い処理要素グループが選択され、そして第１の動作速度で動作するプロセッサによって実行された場合に対応する各周期の開始タイミングから当該周期における選択された処理要素グループの実行期間が完了するまでの時間間隔が特定の時間間隔に対して占める割合に基づいて、複数の処理要素グループが実行されるプロセッサそれぞれの動作速度を第１の動作速度よりも低速の第２の動作速度に設定する動作速度制御処理が実行される。この場合、複数の処理要素グループの実行期間が完了するまでの時間間隔それぞれが同じ割合で延びるので、処理要素グループ間の実行順序の制約を満たした状態で、リアルタイム性を損なうことなく、複数のプロセッサそれぞれのパワーセーブを図ることが可能となる。
【００１５】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
図１には、本発明の一実施形態に係るリアルタイム処理システムを実現するための計算機システムの構成例が示されている。この計算機システムは、リアルタイム性が要求される各種処理をその時間的な制約条件の範囲内で実行する情報処理システムであり、汎用計算機として利用できるほか、リアルタイム性が要求される処理を実行するための様々な電子機器用の組み込みシステムとして利用することができる。図１に示されているように、この計算機システムにおいては、マスタープロセッサユニット（ＭＰＵ１１：Ｍａｓｔｅｒ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、複数のバーサタイルプロセッサユニット（ＶＰＵ：Ｖｅｒｓａｔｉｌｅ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２と、メインメモリ１４と、入出力制御装置１５とが、接続装置１３によって相互に接続されている。接続装置１３は、例えば、クロスバスイッチのような相互結合網、あるいはバスによって構成されている。リング状のバス構造を用いることも出来る。ＭＰＵ１１は計算機システムの動作を制御するメインプロセッサである。オペレーティングシステム（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）は、主にＭＰＵ１１によって実行される。ＯＳの一部の機能はＶＰＵ１２や入出力制御装置１５で分担して実行することもできる。各ＶＰＵ１２は、ＭＰＵ１１の管理の下で各種の処理を実行するプロセッサである。ＭＰＵ１１は、複数のＶＰＵ１２に処理を振り分けて並列に実行させるための制御を行う。これにより高速で効率よい処理の実行を行うことが出来る。メインメモリ１４は、ＭＰＵ１１、複数のＶＰＵ１２および入出力制御装置１５によって共有される記憶装置（共有メモリ）である。ＯＳおよびアプリケーションプログラムはメインメモリ１４に格納される。入出力制御装置１５には、ひとつあるいは複数の入出力デバイス（入出力装置）１６が接続される。入出力制御装置１５はブリッジとも呼ばれる。
【００１６】
接続装置１５はデータ転送レートを保証するＱｏＳ機能を持つ。この機能は、接続装置１５を介したデータ転送を予約されたバンド幅（転送速度）で実行することによって実現される。ＱｏＳ機能は、たとえば、あるＶＰＵ１２からメモリ１４に５Ｍｂｐｓでライトデータを送信する場合、あるいはあるＶＰＵ１２と別のＶＰＵ１２との間で１００Ｍｂｐｓでデータ転送する場合に利用される。ＶＰＵ１２は接続装置１３に対してバンド幅（転送速度）を指定（予約）する。接続装置１３は指定されたバンド幅を要求したＶＰＵ１２に対して優先的に割り当てる。あるＶＰＵ１２のデータ転送に対してバンド幅が予約されたならば、そのＶＰＵ１２によるデータ転送中に他のＶＰＵ１２、ＭＰＵ１１あるいは入出力制御装置１５が大量のデータ転送を行っても、予約されたバンド幅は確保される。この機能は、特に、リアルタイム処理を行う計算機にとって重要な機能である。
【００１７】
図１の構成では、ＭＰＵ１１が１つ、ＶＰＵ１２が４つ、メモリ１４が１つ、入出力制御装置が１つであるが、ＶＰＵ１２の個数は制限されない。またＭＰＵ１１を持たない構成も可能である。この場合、ＭＰＵ１１の行う処理は、ある一つのＶＰＵ１２が担当する。つまり、仮想的なＭＰＵ１１の役割をＶＰＵが兼ねる。
【００１８】
計算機システムには、さらに、省電力制御装置１７が設けられている。省電力制御装置１７は、計算機システム全体あるいは部分的にその消費電力を下げるために、たとえば次のような制御を行う。
１．計算機システム全体のクロックの周波数を下げる
２．計算機システム全体の電源電圧を下げる
３．計算機システム全体の電源を切る
４．ひとつあるいは複数のモジュール（ＭＰＵ、ＶＰＵ、メモリ、入出力制御装置など）のクロックの周波数を下げる
５．ひとつあるいは複数のモジュール（ＭＰＵ、ＶＰＵ、メモリ、入出力制御装置など）の電源電圧を下げる
６．ひとつあるいは複数のモジュール（ＭＰＵ、ＶＰＵ、メモリ、入出力制御装置など）の電源を切る
７．接続装置のクロック周波数を下げる
８．接続装置の転送速度を下げる
９．接続装置のバス幅を減らす
１０．接続装置の電源を切る
１１．メモリバンク単位で電源を切る
１２．メモリバンク単位でリフレッシュを止める
１３．ＭＰＵやＶＰＵ内で同時に動作する機能モジュールを減らす（たとえば演算装置を複数持っている場合に、同時に使う演算装置を制限することで、使わない演算装置の消費電力を下げる）
これらの省電力機能は、ソフトウェアの制御の下に行うことができる。また、上記１−１３の省電力のための制御は、単独で実施することもできるし、組み合わせて実施することもできる。
【００１９】
図２には、ＭＰＵ１１と各ＶＰＵ１２の構成が示されている。ＭＰＵ１１は処理ユニット２１およびメモリ管理ユニット２２を備えている。処理ユニット２１は、メモリ管理ユニット２２を通してメモリ１４をアクセスする。メモリ管理ユニット２２は、仮想記憶管理と、メモリ管理ユニット２２内のキャッシュメモリの管理を行うユニットである。各ＶＰＵ１２は、処理ユニット３１、ローカルストレージ（ローカルメモリ）３２、およびメモリコントローラ３３を備えている。各ＶＰＵ１２の処理ユニット３１は、そのＶＰＵ内部のローカルストレージ３２を直接アクセスすることができる。メモリコントローラ３３は、ローカルストレージ３２とメモリ１４の間のデータ転送を行うＤＭＡコントローラの役割を持つ。このメモリコントローラ３３は、接続装置１４のＱｏＳ機能を利用できるように構成されており、バンド幅を予約する機能および予約したバンド幅でデータ入出力を行う機能を有している。またメモリコントローラ３３は、ＭＰＵ１１のメモリ管理ユニット２２と同様の仮想記憶管理機能を持つ。ＶＰＵ１２の処理ユニット３１はローカルストレージ３２を主記憶として使用する。処理ユニット３１はメモリ１４に対して直接的にアクセスするのではなく、メモリコントローラ３３に指示して、メモリ１４の内容をローカルストレージ３２に転送して読んだり、ローカルストレージ３２の内容をメモリ１４に書いたりする。
【００２０】
ＭＰＵ１１のメモリ管理ユニット２２およびＶＰＵ１２のメモリコントローラ３３それぞれによって実行される仮想記憶管理は、たとえば図３のように実施することができる。ＭＰＵ１１の処理ユニット２１あるいはＶＰＵ１２のメモリコントローラ３３から見たアドレスは、図３の上の部分に示すような６４ビットのアドレスである。この６４ビットのアドレスは、上位の３６ビットがセグメント番号、中央の１６ビットがページ番号、下位の１２ビットがページオフセットである。このアドレスから、実際に接続装置１３を通してアクセスする実アドレス空間への変換は、セグメントテーブル５０およびページテーブル６０を用いて実行される。セグメントテーブル５０およびページテーブル６０は、メモリ管理ユニット２２およびメモリコントローラ３３に各々設けられている。
【００２１】
ＭＰＵ１１および各ＶＰＵ１２から見た実アドレス（ＲＡ）空間には、図４に示すように、たとえば以下のようなデータがマッピングされている。
１．メモリ（主記憶装置）
２．ＭＰＵ１１の各種制御レジスタ
３．各ＶＰＵ１２の各種制御レジスタ
４．各ＶＰＵ１２のローカルストレージ
５．各種入出力デバイス（入出力装置）の制御レジスタ（入出力制御装置の制御レジスタも含む）
ＭＰＵ１１および各ＶＰＵ１２は、実アドレス空間の該当するアドレスにアクセスすることで、１〜５の各データを読み書きすることができる。特に、実アドレス空間にアクセスすることで、どのＭＰＵ１１からでも、あるいはどのＶＰＵ１２からでも、さらに入出力制御装置１５からでも、任意のＶＰＵ１２のローカルストレージ３２にアクセスすることができることは重要である。またセグメントテーブルあるいはページテーブルを用いて、ＶＰＵ１２のローカルストレージ３２の内容が自由に読み書きされないように保護することもできる。
ＭＰＵ１１あるいはＶＰＵ１２からみたアドレス空間は、図３の仮想記憶メカニズムを用いて、たとえば図５に示すようにマッピングされる。ＭＰＵ１１あるいはＶＰＵ１２上で実行しているプログラムから直接見えるのは、実効アドレス（ＥＡ；Ｅｆｆｅｃｔｉｖｅ  Ａｄｄｒｅｓｓ）空間である。ＥＡは、セグメントテーブル５０によって、仮想アドレス（ＶＡ；Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ）空間にマッピングされる。さらにＶＡは、ページテーブル６０によって、実アドレス（ＲＡ；Ｒｅａｌ  Ａｄｄｒｅｓｓ）空間にマップされる。このＲＡが、図４で説明したような構造を持っている。
【００２２】
ＭＰＵ１１は制御レジスタ等のハードウェア機構によって、例えば、各ＶＰＵ１２のレジスタの読み書き、各ＶＰＵ１２のプログラムの実行開始／停止などの、各ＶＰＵ１２の管理を行うことができる。また、ＭＰＵ１１とＶＰＵ１２の間、あるいはあるＶＰＵ１２と他のＶＰＵ１２の間の通信や同期は、メールボックスやイベントフラグなどのハードウェア機構によって行うことが出来る。
【００２３】
この実施形態の計算機システムは、従来ハードウェアで実現されていたようなリアルタイム性の要求の厳しい機器の動作を、ソフトウェアを用いて実現することを可能にする。例えば、あるＶＰＵ１２があるハードウェアを構成するある幾つかのハードウェアコンポーネントに対応する演算処理を実行し、それと並行して、他のＶＰＵ１２が他の幾つかのハードウェアコンポーネントに対応する演算処理を実行する。
【００２４】
図６はデジタルテレビ放送の受信機の簡略化したハードウェア構成を示している。図６においては、受信した放送信号はＤＥＭＵＸ（デマルチプレクサ）回路１０１によって音声データと映像データと字幕データそれぞれに対応する圧縮符号化されたデータストリームに分解される。圧縮符号化された音声データストリームはＡ−ＤＥＣ（音声デコーダ）回路１０２によってデコードされる。圧縮符号化された映像データストリームはＶ−ＤＥＣ（映像デコーダ）回路１０３によってデコードされる。デコードされた映像データストリームはＰＲＯＧ（プログレッシブ変換）回路１０５に送られ、そこでプログレッシブ映像信号に変換するためのプログレッシブ変換処理が施される。プログレッシブ変換された映像データストリームはＢＬＥＮＤ（画像合成）回路１０６に送られる。字幕データストリームはＴＥＸＴ（字幕処理）回路１０４によって字幕の映像に変換された後、ＢＬＥＮＤ回路１０６に送られる。ＢＬＥＮＤ回路１０６は、ＰＲＯＧ回路１０５から送られてくる映像と、ＴＥＸＴ回路１０４から送られてくる字幕映像とを合成して、映像ストリームとして出力する。この一連の処理が、映像のフレームレート（たとえば、１秒間に３０コマ、３２コマ、または６０コマ）に従って、繰り返し実行される。
【００２５】
図６のようなハードウェアの動作をソフトウェアによって実行するために、本実施形態では、たとえば図７に示すように、各ハードウェアの動作をソフトウェアとして実現したプログラムモジュール１００を用意する。このプログラムモジュール１００は、図６のＤＥＭＵＸ回路１０１、Ａ−ＤＥＣ回路１０２、Ｖ−ＤＥＣ回路１０３、ＴＥＸＴ回路１０４、ＰＲＯＧ回路１０５、およびＢＬＥＮＤ回路１０６に対応する処理を計算機システムに実行させるアプリケーションプログラムであり、マルチスレッドプログラミングを用いて記述されている。このプログラムモジュール１００は、それぞれスレッドとして実行される複数のプログラム（複数のルーチン群）から構成されている。すなわち、プログラムモジュール１００には、ＤＥＭＵＸプログラム１１１、Ａ−ＤＥＣプログラム１１２、Ｖ−ＤＥＣプログラム１１３、ＴＥＸＴプログラム１１４、ＰＲＯＧプログラム１１５、およびＢＬＥＮＤプログラム１１６が含まれている。ＤＥＭＵＸプログラム１１１、Ａ−ＤＥＣプログラム１１２、Ｖ−ＤＥＣプログラム１１３、ＴＥＸＴプログラム１１４、ＰＲＯＧプログラム１１５、およびＢＬＥＮＤプログラム１１６は、それぞれ図６のＤＥＭＵＸ回路１０１、Ａ−ＤＥＣ回路１０２、Ｖ−ＤＥＣ回路１０３、ＴＥＸＴ回路１０４、ＰＲＯＧ回路１０５、およびＢＬＥＮＤ回路１０６に対応する処理要素それぞれに対応する手順を記述したプログラムであり、それぞれスレッドとして実行される。つまり、プログラムモジュール１００の実行時には、ＤＥＭＵＸプログラム１１１、Ａ−ＤＥＣプログラム１１２、Ｖ−ＤＥＣプログラム１１３、ＴＥＸＴプログラム１１４、ＰＲＯＧプログラム１１５、およびＢＬＥＮＤプログラム１１６それぞれに対応するスレッドが生成され、生成されたスレッドそれぞれが１以上のＶＰＵ１２にディスパッチされて実行される。ＶＰＵ１２のローカルストレージ３２にはそのＶＰＵ１２にディスパッチされたスレッドに対応するプログラムがロードされ、スレッドはローカルストレージ３２上のプログラムを実行する。デジタルテレビ放送の受信機を構成するハードウェアモジュール群それぞれに対応するプログラム１１１〜１１６と、構成記述１１７と呼ぶデータとをパッケージ化したものが、デジタルテレビ放送の受信機を実現するプログラムモジュール１００になる。
【００２６】
構成記述１１７は、プログラムモジュール１００内の各プログラム（スレッド）をどのように組み合わせて実行するべきかを示す情報であり、連鎖されたプログラム１１１〜１１６間の入出力関係（連鎖関係）および各プログラムの処理に必要なコスト（時間）などを示す。図８には構成記述１１７の例が示されている。
【００２７】
図８の構成記述１１７の例では、スレッドとして動作する各モジュール（プログラムモジュール１００内の各プログラム）に対して、その入力につながるモジュール、その出力がつながるモジュール、そのモジュールの実行に要するコスト、出力がつながるモジュールそれぞれへの出力に必要なバッファサイズが記述されている。たとえば、番号▲３▼のＶ−ＤＥＣプログラムは、番号▲１▼のＤＥＭＵＸプログラムの出力を入力とし、その出力は番号▲５▼のＰＲＯＧプログラムに向かっており、その出力に必要なバッファは１ＭＢで、番号▲３▼のＶ−ＤＥＣプログラム自体の実行コストは５０であることを示している。なお、実行に必要なコストは、実行に必要な時間（実行期間）やステップ数などを単位として記述することができる。また、何らかの仮想的な仕様のＶＰＵで実行した場合の時間を単位とすることも可能である。計算機によってＶＰＵの仕様や処理性能が異なる場合もあるので、このように仮想的な単位を設けてコストを表現するのは望ましい形態である。図８に示した構成記述１１７に従って実行する場合の、プログラム間のデータの流れは図９の通りである。
【００２８】
さらに、構成記述１１７には、プログラム１１１〜１１６それぞれに対応するスレッド間の結合属性を示す結合属性情報がスレッドパラメータとして記述されている。なお、スレッドパラメータはプログラム１１１〜１１６中にコードとして直接記述することも可能である。
【００２９】
次に、図１０、図１１を参照して、プログラム１１１〜１１６が本実施形態の計算機システムによってどのように実行されるかを説明する。ここでは、ＶＰＵ０とＶＰＵ１の２つのＶＰＵ１２が計算機システムに設けられている構成を想定する。毎秒３０フレームで映像を表示する場合の、各ＶＰＵ１２に対するプログラムの割り当てを時間を追って記入したのが図１０である。ここでは１周期分の時間間隔内で１フレーム分の音声と映像を出力している。まず、ＶＰＵ０でＤＥＭＵＸプログラムが処理を行い、その結果の音声と映像と字幕のデータをバッファに書き込む。その後ＶＰＵ１でＡ−ＤＥＣプログラムとＴＥＸＴプログラムを順次実行し、それぞれの処理結果をバッファに書き込む。ＶＰＵ０では、次にＶ−ＤＥＣプログラムが映像データの処理を行い、結果をバッファに書き込む。ＶＰＵ０では、続いてＰＲＯＧプログラムが処理を行い、結果をバッファに書き込む。この時点で、ＶＰＵ１でのＴＥＸＴの処理は終わっているので、最後のＢＬＥＮＤプログラムの実行をＶＰＵ０で行い、最終的な映像データを作成する。この処理の流れを、毎周期繰り返すように実行する。
【００３０】
ここで説明したように、所望の動作を滞りなく行えるように、各ＶＰＵ１２上で、いつ、どのプログラムを実行するかを決める作業を、スケジューリングとよぶ。スケジューリングを行うモジュールをスケジューラとよぶ。本実施形態では、プログラムモジュール１００中に含まれる上述の構成記述１１７に基づいてスケジューリングが行われる。すなわちスケジューリング処理では、構成記述１１７に基づいて複数のプログラム１１１〜１１６を実行する複数のスレッドそれぞれの実行開始タイミングおよび実行期間が決定され、複数のスレッドそれぞれが１以上のＶＰＵ１２に割り当てられる。プログラムモジュール１００の実行時には以下の処理が行われる。
１．  オペレーティングシステムはプログラムモジュール１００をそれが記憶されている外部記憶装置またはメモリ１３から入力し、構成記述１１７を読み込む。
【００３１】
２．  オペレーティングシステム内のスケジューラは、構成記述１１７に基づいてプログラムモジュール１００内の複数のプログラム１１１〜１１６を実行するための複数のスレッド（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）それぞれの実行開始タイミングおよび実行期間を決定することにより、複数のスレッド（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）を１以上のＶＰＵに割り当てて実行する。
【００３２】
このように、本実施形態のリアルタイム処理システムでは、プログラムモジュール１００に含まれる構成記述１１７に基づいて、連鎖された複数のプログラム１１１〜１１６を実行する複数のスレッド（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）それぞれの実行開始タイミングおよび実行期間が決定されるので、プログラムのコード中に個々の処理の時間的な制約条件を詳細に記述せずとも、リアルタイム処理を実行するためのスレッド群を効率よくスケジューリングすることが可能となる。
【００３３】
図１１は、毎秒６０フレームで表示する場合の実行の様子を示している。図１０と異なるのは、図１０では毎秒３０フレームだったので、１周期（１／３０秒）で１フレーム分の処理を完了できたのに対し、図１１では毎秒６０フレーム処理する必要がある点である。すなわち、１周期（１／６０秒）では１フレーム分の処理を完了できないので、図１１では、複数（ここでは２）周期にまたがったソフトウェアパイプライン処理を行っている。たとえば周期１のはじめに入力された信号に対して、ＶＰＵ０でＤＥＭＵＸ処理とＶ−ＤＥＣ処理を行う。その後、周期２においてＶＰＵ１でＡ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤの各処理を行って最終的な映像データを出力する。周期２ではＶＰＵ０は次のフレームのＤＥＭＵＸとＶ−ＤＥＣの処理を行っている。このように、ＶＰＵ０によるＤＥＭＵＸ，Ｖ−ＤＥＣの処理と、ＶＰＵ１によるＡ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤの処理を、２周期にまたがってパイプライン的に実行する。このようなパイプライン処理を実行するために、プログラムモジュール１００の実行時には以下の処理が行われる。
１．  オペレーティングシステムはプログラムモジュール１００をそれが記憶されている外部記憶装置またはメモリ１３から入力し、構成記述１１７を読み込む。
【００３４】
２．  オペレーティングシステム内のスケジューラは、構成記述１１７に基づいてプログラムモジュール１００内の複数のプログラム１１１〜１１６によって実行される複数の処理要素（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）それぞれの実行順序の関係を判断し、複数の処理要素（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）を、先行して実行される処理要素の集合である第１処理要素グループと、それに後続して実行される処理要素の集合である第２処理要素グループとにグループ分けする。これにより、例えば、ＤＥＭＵＸ、Ｖ−ＤＥＣが第１処理要素グループに、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤが第２処理要素グループに分類される。
【００３５】
３．  スケジューラは、第１処理要素グループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）および第２処理要素グループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）がパイプライン形式で周期的に実行されるように、ＶＰＵ０，ＶＰＵ１の少なくとも２つのプロセッサを用いて、第１処理要素グループおよび第２処理要素グループの各々に１以上のＶＰＵを周期的に割り当てる。例えばＶＰＵ０，ＶＰＵ１の２つのプロセッサによるパイプラインを実行する時には、スケジューラは、第１処理要素グループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）がＶＰＵ０によって１／６０秒の時間間隔で周期的に実行されるように第１処理要素グループをＶＰＵ０に周期的に割り当てる。さらに、スケジューラは、第２処理要素グループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）が第１処理要素グループよりも１周期遅れたタイミングでＶＰＵ１によって１／６０秒の時間間隔で周期的に実行されるように第２処理要素グループをＶＰＵ１に周期的に割り当てる。
【００３６】
なお、例えば、第２処理要素グループをＶＰＵ１とＶＰＵ２の２つのプロセッサによって並列に実行しても良い。例えば、ＶＰＵ１ではＡ−ＤＥＣ、ＴＥＸＴを実行し、それと並行してＶＰＵ１でＰＲＯＧ、ＢＬＥＮＤを実行する。
【００３７】
図７のプログラムモジュール１００の例では、複数の処理要素（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）がそれぞれ異なるスレッドによって実行されるので、上述の処理要素グループは、スレッドグループと称することもできる。
【００３８】
図７に示したプログラムモジュール１００は、本実施形態の計算機システムを組み込んだ機器内のフラッシュＲＯＭやハードディスクに予め記録しておいてもよいが、ネットワークを介して流通させるようにしてもよい。この場合、本実施形態の計算機システムによって実行される処理の内容は、ネットワークを介してダウンロードしたプログラムモジュールの種類に応じて決まる。よって、例えば本実施形態の計算機システムを組み込んだ機器に、様々な専用ハードウェアそれぞれに対応するリアルタイム処理を実行させることが出来る。例えば、新しいコンテンツの再生に必要な新しいプレーヤーソフトウェアやデコーダソフトウェアや暗号ソフトウェアなどを、本実施形態の計算機システムで実行可能なプログラムモジュールとして、コンテンツと一緒に配布することで、本実施形態の計算機システムを搭載した機器であれば、いずれの機器でも、その能力が許す範囲内で、そのコンテンツを再生することができる。
【００３９】
（省電力制御）
本実施形態の計算機システムにおいては、上述のプログラムモジュール１００のようなリアルタイム処理を制限された時間内に完了するというリアルタイム性を保障しながら、計算機システムの消費電力を低減するための省電力制御が実行される。例えば、特定の時間間隔で周期的に実行することが要求されるリアルタイム処理が与えられたときには、特定の時間間隔を単位とする各周期内におけるリアルタイム処理の実行が次の期間の開始タイミングまでに完了する範囲で、リアルタイム処理を実行するために使用される各ＶＰＵの動作速度をできるだけ低下させる制御が実行される。図１２には、３つの処理要素Ａ，Ｂ，Ｃから構成されるリアルタイム処理をＶＰＵ０によって周期的に実行する場合のスケジューリングの例が示されている。スケジューリング処理では、３つの処理要素Ａ，Ｂ，Ｃを含むリアルタイム処理が予め決められた特定の時間間隔で周期的にＶＰＵ１２によって実行されるように、各処理要素の実行に要するコスト（実行期間）と、処理要素間の実行順序の関係とに基づいて、特定の時間間隔を単位とする各周期における処理要素Ａ，Ｂ，Ｃそれぞれの実行タイミングが決定される。スケジューリング処理で考慮される各処理要素の実行期間の長さは、ＶＰＵ０の動作速度が１００％である場合に対応している。
【００４０】
周期１内における処理要素Ａ，Ｂ，Ｃそれぞれの実行期間（Ａ１，Ｂ１，Ｃ１）が完了してから、周期２の開始タイミングまでの間は、ＶＰＵ０は何ら処理を実行しない。本実施形態においては、この空き時間を利用して、ＶＰＵ０の動作速度を低下する。すなわち、各周期の開始タイミングから処理要素Ａ，Ｂ，Ｃの実行が完了されるまでの期間Ｔ１が、図１３に示されているように、各周期の時間間隔近辺にまで伸びるように、ＶＰＵ０の動作速度が低下される。期間Ｔ１の長さが各周期の時間間隔の１／２であるならば、例えば、ＶＰＵ０の動作速度を１／２に低下させる動作速度制御処理が実行される。ＶＰＵ０は５０％の動作速度で動作するので、ＶＰＵ０の消費電力は低減される。よって、処理要素Ａ，Ｂ，Ｃを特定の時間間隔で周期的に実行するというリアルタイム性を保障しつつ、ＶＰＵ０の消費電力を低減することが可能となる。
【００４１】
次に、図１４のフローチャートを参照して、省電力制御処理の手順を説明する。
ステップＳ１：  オペレーティングシステムは、複数の処理要素から構成されるリアルタイム処理が予め決められた特定の時間間隔で周期的にＶＰＵ０によって実行されるように、特定の時間間隔を単位とする各周期における複数の処理要素それぞれの実行タイミングを決定するスケジューリング処理を実行する。
ステップＳ２：  オペレーティングシステムは、ＶＰＵ０がその最高速度（１００％）で動作した場合に対応するリアルタイム処理の実行に要するコストを示す情報に基づき、各周期の開始タイミングから当該周期におけるリアルタイム処理の実行期間が完了するまでの時間間隔Ｔを算出する。リアルタイム処理の実行開始タイミングが各周期の開始タイミングから始まる場合には、時間間隔Ｔは、リアルタイム処理の実行期間に一致する。コストを示す情報は、例えば、上述の構成記述１１７によって与えられる。もしリアルタイム処理が複数の処理要素から構成される場合には、リアルタイム処理の実行期間は複数の処理要素それぞれの実行期間の和となる。よって、構成記述１１７によって与えられる、複数の処理要素それぞれの実行に要するコストに基づいて、リアルタイム処理の実行期間を決定することが出来る。
【００４２】
ステップＳ３：  オペレーティングシステムは、１周期分の時間間隔に対する時間間隔Ｔの比率、つまり時間間隔Ｔが１周期を規定する特定の時間間隔に占める割合、を算出する。
ステップＳ４，Ｓ５：  オペレーティングシステムは、算出された割合に基づいて、ＶＰＵ０の動作速度をその最高動作速度（１００％）よりも低速の動作速度に設定する動作速度制御処理を実行する。
【００４３】
ステップＳ４においては、ＶＰＵ０の動作速度が決定される。すなわち、オペレーティングシステムは、１周期分の時間間隔に占める時間間隔Ｔの割合に基づき、各周期におけるリアルタイム処理の実行期間が遅くとも次の周期が開始される前に完了し、且つ各周期の開始タイミングからリアルタイム処理の実行期間が完了するまでの時間間隔Ｔ１の長さが延びるように、ＶＰＵ０の動作速度（クロック周波数）を決定する。ＶＰＵ０の動作速度（クロック周波数）は、算出された割合をＶＰＵ０の最高速度（１００％）に乗ずることによって求めることが出来る。たとえば、時間間隔Ｔの長さが１周期分の時間間隔の半分であるならば、設定可能な最も低速のＶＰＵ０の動作速度は、ＶＰＵ０の最高速度（１００％）の半分の速度（５０％）となる。次いで、ステップＳ５において、オペレーティングシステムは、接続装置１３を介して省電力制御装置１７にＶＰＵ０のクロック周波数を示すコマンドを送信する。省電力制御装置１７は各ＶＰＵに供給されるクロックの周波数を制御する回路を備えており、オペレーティングシステムからのコマンドで指定されるＶＰＵのクロック周波数を、当該コマンドで指定されるクロック周波数に設定する。これにより、ＶＰＵ０の動作速度はステップＳ４で決定された動作速度に設定される。結果的にリアルタイム処理がゆっくり実行されることになるので、時間間隔Ｔは１周期を規定する特定の時間間隔近辺にまで伸びることになる。
【００４４】
この省電力制御は、ＶＰＵの空き時間をより多く確保できるようにスケジューリングすることにより、より省電力効果を高めることができるという特徴を有している。したがって、リアルタイム処理を構成する複数の処理要素の実行期間をできるだけ多くのＶＰＵに均等に割り当てることによって、１周期内におけるリアルタイム処理の実行期間がなるべく短くなるようにスケジューリングすることが好ましい。図１５には、連鎖された３つの処理要素Ａ，Ｂ，ＣがＶＰＵ０，ＶＰＵ１によって実行されるようにスケジューリングした例が示されている。今、処理要素Ａ，Ｂ，Ｃ間に、処理要素Ｂ、Ｃの実行前に処理要素Ａが実行されなければならないという制約が存在する場合を想定する。３つの処理要素Ａ，Ｂ，Ｃは、各周期において並列に実行可能な２つの処理要素グループにグループ分けされる。ここでは、３つの処理要素Ａ，Ｂ，Ｃは、処理要素Ａ，Ｂを含む第１処理要素グループと、処理要素Ｃを含む第２処理要素グループとに分けられている。第１処理要素グループ（Ａ，Ｂ）は特定の時間間隔で周期的に実行されるようにＶＰＵ０に割り当てられ、第２処理要素グループ（Ｃ）は第１処理要素グループ（Ａ，Ｂ）と同じ特定の時間間隔で周期的に実行されるようにＶＰＵ１に割り当てられる。ＶＰＵ１における処理要素Ｃの実行開始タイミングは、ＶＰＵ０における処理要素Ａの完了後にＶＰＵ１における処理要素Ｃの実行が開始されるように決定される。
【００４５】
各周期の開始タイミングから第１処理要素グループ（Ａ，Ｂ）の実行が完了されるまでの時間間隔Ｔ１は、各周期の開始タイミングから第２処理要素グループ（Ｃ）の実行が完了されるまでの時間間隔Ｔ２よりも長い。この場合、図１６に示されているように、時間間隔Ｔ１が各周期の時間間隔にまで伸びるように、ＶＰＵ０，ＶＰＵ１の動作速度が同じ比率で低下される。時間間隔Ｔ１の長さが各周期の時間間隔の１／３であるならば、ＶＰＵ０，ＶＰＵ１それぞれの動作速度を１／３に低下させる制御が実行される。これにより、ＶＰＵ０，ＶＰＵ１は３３％の動作速度で動作するので、ＶＰＵ０，ＶＰＵ１の消費電力を低減することができる。ＶＰＵ０，ＶＰＵ１の動作速度は同じ比率で低下されるので、ＶＰＵ１における処理要素Ｃの実行がＶＰＵ０における処理要素Ａの完了後に開始されるという制約条件が破綻することはない。
【００４６】
次に、図１７のフローチャートを参照して、リアルタイム処理を複数のＶＰＵによって実行する場合における省電力制御処理の手順を説明する。なお、以下では、処理要素グループをスレッドグループと称することとする。
【００４７】
ステップＳ１１：  オペレーティングシステムは、各周期内におけるリアルタイム処理の実行がなるべく短い時間で完了するように、リアルタイム処理を構成する連鎖された複数の処理要素を、処理要素間の実行順序の関係に基づいて、互いに並列に実行可能な複数のスレッドグループにグループ分けする。以下では、グループ分けの結果、第１スレッドグループ、第２スレッドグループ、第３スレッドグループの３つのスレッドグループにグループ分けされた場合を想定する。
【００４８】
ステップＳ１２：  オペレーティングシステムは、特定の時間間隔を単位とする周期毎に第１スレッドグループ、第２スレッドグループ、第３スレッドグループが互いに異なるＶＰＵによって並列に実行されるように、各周期における第１スレッドグループ、第２スレッドグループ、第３スレッドグループそれぞれの実行タイミングと各周期において第１スレッドグループ、第２スレッドグループ、第３スレッドグループそれぞれが実行されるＶＰＵを決定するスケジューリング処理を実行する。これにより、例えば、第１スレッドグループはＶＰＵ０によって周期的に実行されるようにスケジューリングされ、同様に、第２スレッドグループはＶＰＵ１によって周期的に実行されるようにスケジューリングされ、第３スレッドグループはＶＰＵ２によって周期的に実行されるようにスケジューリングされる。
【００４９】
ステップＳ１３：  オペレーティングシステムは、各周期における第１スレッドグループ、第２スレッドグループ、第３スレッドグループそれぞれの実行タイミングと、１００％の動作速度で動作するＶＰＵによって実行された場合に対応する第１スレッドグループ、第２スレッドグループ、第３スレッドグループそれぞれの実行に要するコストを示す情報とに基づいて、スレッドグループ毎に、各周期の開始タイミングから当該スレッドグループの処理が完了するまでの時間間隔Ｔを算出する。
【００５０】
ステップＳ１４：  オペレーティングシステムは、第１スレッドグループ、第２スレッドグループ、第３スレッドグループの３つのスレッドグループの中から各周期内における実行期間の完了が最も遅いスレッドグループ、つまり時間間隔Ｔの長さがもっとも長いスレッドグループを選択する。
ステップＳ１５：  オペレーティングシステムは、１周期分の時間間隔に対する選択されたスレッドグループに対応する時間間隔Ｔの比率、つまり時間間隔Ｔが１周期分の時間間隔に占める割合を算出する。
ステップＳ１６：  オペレーティングシステムは、算出された割合に基づいて、選択されたスレッドグループの実行期間が遅くとも次の周期が開始される前に完了する範囲で、各周期の開始タイミングから第１スレッドグループ、第２スレッドグループの実行期間が完了するまでの時間間隔それぞれが同じ割合で延びるように、第１スレッドグループ、第２スレッドグループ、第３スレッドグループの実行に使用されるＶＰＵ０，ＶＰＵ１，ＶＰＵ２それぞれの動作速度（クロック周波数）を決定する。
ステップＳ１７：  オペレーティングシステムは、省電力制御装置１７にＶＰＵ０，ＶＰＵ１，ＶＰＵ２のクロック周波数を示すコマンドを送信する。省電力制御装置１７は各ＶＰＵに供給されるクロックの周波数を制御する回路を備えており、オペレーティングシステムからのコマンドで指定されるＶＰＵ０，ＶＰＵ１，ＶＰＵ２それぞれのクロック周波数を、当該コマンドで指定されるクロック周波数に設定する。これにより、ＶＰＵ０，ＶＰＵ１，ＶＰＵ２それぞれの動作速度が１００％よりも低速の動作速度に設定されるので、ＶＰＵ０，ＶＰＵ１，ＶＰＵ２それぞれの消費電力を低減することができる。
【００５１】
（オペレーティングシステム）
本計算機システムでは、システム内にＯＳ（オペレーティングシステム）をひとつだけ実装する場合には、図１８に示すように、そのＯＳ２０１がすべての実資源（たとえば、ＭＰＵ１１、ＶＰＵ１２、メモリ１４、入出力制御装置１５、入出力装置１６など）を管理する。
一方、仮想計算機方式を用いて、複数のＯＳを同時に動作させることも可能である。この場合には、図１９に示すように、まず仮想計算機ＯＳ３０１を実装し、それがすべての実資源（たとえば、ＭＰＵ１１、ＶＰＵ１２、メモリ１４、入出力制御装置１５、入出力装置１６など）を管理する。仮想計算機ＯＳ３０１はホストＯＳと称されることもある。さらに仮想計算機ＯＳ３０１の上に、ひとつ以上のＯＳ（ゲストＯＳとも呼ぶ）を実装する。各ゲストＯＳ３０２，３０３は、図２０に示すように、仮想計算機ＯＳ３０１によって与えられる仮想的な計算機資源から構成される計算機上で動作し、ゲストＯＳ３０２，３０３の管理するアプリケーションプログラムに各種のサービスを提供する。図２０の例では、ゲストＯＳ３０２は、１つのＭＰＵ１１と、２つのＶＰＵ１２と、メモリ１４とから構成される計算機上で動いていると思っており、ゲストＯＳ３０３は１つのＭＰＵ１１と、４つのＶＰＵ１２と、メモリ１４とから構成される計算機上で動いていると思っている。ゲストＯＳ３０２からみたＶＰＵ１２や、ゲストＯＳ３０３からみたＶＰＵ１２が、実際には実資源のどのＶＰＵ１２に対応しているかは、仮想計算機ＯＳ３０１が管理している。ゲストＯＳ３０２，３０３は、その対応を意識する必要はない。
【００５２】
仮想計算機ＯＳ３０１は、計算機システム全体の資源を時分割で各ゲストＯＳ３０２，３０３に割り当てるように、ゲストＯＳ３０２，３０３のスケジューリングを行う。例えば、ゲストＯＳ３０２がリアルタイム処理を行うものであるとする。たとえば１秒間に３０回、正しいペースで処理を行いたい場合には、各ゲストＯＳ３０２はそのパラメタを仮想計算機ＯＳ３０１に設定する。仮想計算機ＯＳ３０１は、１／３０秒に１回、確実にそのゲストＯＳ３０１に必要なだけの処理時間が割り当てられるようにスケジューリングを行う。リアルタイム性を要求しない処理を行うゲストＯＳには、リアルタイム性を要求するゲストＯＳよりも低い優先度で、処理時間の割り当てを行うように、スケジューリングが行われる。図２１は、時間軸を横にとって、ゲストＯＳ３０２とゲストＯＳ３０３が切り替わりながら動いている様子を示している。ゲストＯＳ３０２が動いている間は、ＭＰＵ１１と全てのＶＰＵ１２がゲストＯＳ３０２の資源として使用され、ゲストＯＳ３０３が動いている間は、ＭＰＵ１１と全てのＶＰＵ１２がゲストＯＳ３０３の資源として使用される。
【００５３】
図２２は別の動作モードを示している。ターゲットアプリケーションによってはＶＰＵ１２をずっと占有して利用したい場合がある。たとえば、常にデータやイベントを監視し続けることが必要なアプリケーションがこれに相当する。このようなときには、特定のＶＰＵ１２を特定のゲストＯＳによって占有するように、仮想計算機ＯＳ３０１のスケジューラがスケジュール管理する。図２２では、ＶＰＵ３をゲストＯＳ３０２の専用資源に指定した場合の例である。仮想計算機ＯＳ３０１がゲストＯＳ３０２（ＯＳ１）とゲストＯＳ３０３（ＯＳ２）を切り替えても、ＶＰＵ３は常にゲストＯＳ３０２（ＯＳ１）の管理下で動作し続ける。
【００５４】
さて、複数のＶＰＵ１２を用いてプログラムを動作させるために、本実施形態では、複数のＶＰＵ１２それぞれに割り当てるスレッドをスケジューリングするためのスケジューラを含む、ＶＰＵ実行環境と呼ぶソフトウェアモジュールを用いる。本計算機システムにＯＳがひとつしか搭載されていない場合は、図２３に示すようにそのＯＳ２０１にＶＰＵ実行環境４０１を実装する。ＶＰＵ実行環境４０１は、スケジューラによるスケジューリングの結果に基づいて、各ＶＰＵの動作速度をできるだけ低下させるための制御を実行するパワーセーブルーチンも含んでいる。ＶＰＵ実行環境４０１は、ＯＳ２０１のカーネル内に実装することもできるし、ユーザプログラムレベルで実装することもできるし、両者に分割して協調して動作するように実装することも出来る。一方、仮想計算機ＯＳ上でひとつあるいは複数のＯＳを動作させる場合、ＶＰＵ実行環境４０１を実装する方式には、次のような方式がある。
１．仮想計算機ＯＳ３０１の中にＶＰＵ実行環境４０１を実装する方式（図２３）
２．ＶＰＵ実行環境４０１を仮想計算機ＯＳ３０１が管理するひとつのＯＳとして実装する方式（図２５）。図２５では、仮想計算機ＯＳ３０１上で動作するゲストＯＳ３０４自体がＶＰＵ実行環境４０１である。
３．仮想計算機ＯＳ３０１が管理する各ゲストＯＳに、それぞれ専用のＶＰＵ実行環境４０１を実装する方式（図２６）。図２６においては、ゲストＯＳ３０２，３０３にそれぞれＶＰＵ実行環境４０１，４０２が実装されている。ＶＰＵ実行環境４０１，４０２は、仮想計算機ＯＳ３０１の提供するゲストＯＳ間の通信機能を用いて、必要に応じて、互いに連携して動作する。
４．仮想計算機ＯＳ３０１が管理するゲストＯＳのうちのひとつにＶＰＵ実行環境４０１を実装して、ＶＰＵ実行環境を持たないゲストＯＳは、仮想計算機ＯＳ３０１の提供するゲストＯＳ間の通信機能を用いて、ＶＰＵ実行環境４０１を持つゲストＯＳのＶＰＵ実行環境４０１を利用する方式（図２７）。
【００５５】
これらの方式のメリットは以下のとおりである。
方式１のメリット
・仮想計算機ＯＳの持つゲストＯＳ（仮想計算機ＯＳが管理する対象のＯＳ）のスケジューリングと、ＶＰＵ１２のスケジューリングを一体化できるので、効率良く、きめ細かなスケジューリングができ、資源を有効利用できる。
・複数のゲストＯＳ間でＶＰＵ実行環境を共有できるので、新しいゲストＯＳを導入する場合に新しくＶＰＵ実行環境を作らなくてもよい。
方式２のメリット
・仮想計算機ＯＳの上にあるゲストＯＳ間でＶＰＵ１２のスケジューラを共有できるので、効率良く、きめ細かなスケジューリングができ、資源を有効利用できる。
・複数のゲストＯＳ間でＶＰＵ実行環境を共有できるので、新しいゲストを導入する場合に新しくＶＰＵ実行環境を作らなくてもよい。
・ＶＰＵ実行環境を仮想計算機ＯＳや特定のゲストＯＳに依存せずに作れるので、標準化がしやすく、取り替えて使うことも出来る。特定の組み込み機器に適応したＶＰＵ実行環境を作って、その機器の特性を活かしたスケジューリング等を行うことで、効率良い実行ができる。
方式３のメリット
・各ゲストＯＳに対してＶＰＵ実行環境を最適に実装できるので、効率良く、きめ細かなスケジューリングができ、資源を有効利用できる。
【００５６】
方式４のメリット
・すべてのゲストＯＳがＶＰＵ実行環境を実装する必要がないので、新しいゲストＯＳを追加しやすい。
このように、いずれの方式でもＶＰＵ実行環境を実装することができる。また、このほかにも適宜実施可能である。
【００５７】
（サービスプロバイダ）
本実施形態の計算機システムにおいては、ＶＰＵ実行環境４０１は、各ＶＰＵ１２に関連する各種資源（各ＶＰＵの処理時間、メモリ、接続装置のバンド幅、など）の管理とスケジューリング機能の他に、さまざまなサービス（ネットワークを使った通信機能、ファイルの入出力機能、コーデックなどのライブラリ機能の呼び出し、ユーザとのインタフェース処理、入出力デバイスを使った入出力処理、日付や時間の読み出し、など）を提供する。これらのサービスは、ＶＰＵ１２上で動作するアプリケーションプログラムから呼び出されて、簡単なサービスの場合にはそのＶＰＵ１２上のサービスプログラムで処理される。しかし通信やファイルの処理などＶＰＵ１２だけでは処理できないサービスに関しては、ＭＰＵ１１上のサービスプログラムによって処理する。このようなサービスを提供するプログラムを、サービスプロバイダ（ＳＰ）と呼ぶ。
【００５８】
図２８にＶＰＵ実行環境のひとつの実施例を示す。ＶＰＵ実行環境の主要部分はＭＰＵ１１上に存在する。これが、ＭＰＵ側ＶＰＵ実行環境５０１である。各ＶＰＵ１２上には、そのＶＰＵ１２内で処理可能なサービスを実行する最小限の機能のみを持つＶＰＵ側ＶＰＵ実行環境５０２が存在する。ＭＰＵ側ＶＰＵ実行環境５０１の機能は、大きく、ＶＰＵコントロール５１１と、サービスブローカ５１２の２つに分けられる。ＶＰＵコントロール５１２は、主に、各ＶＰＵ１２に関連する各種資源（ＶＰＵの処理時間、メモリ、仮想空間、接続装置のバンド幅、など）の管理機構や、同期機構や、セキュリティの管理機構や、スケジューリング機能を提供する。スケジューリング結果に基づいてＶＰＵ１２上のプログラムのディスパッチを行うのは、このＶＰＵコントロール５１１である。サービスブローカ５１２は、ＶＰＵ１２上のアプリケーションが呼び出したサービス要求を受けて、適当なサービスプログラム（サービスプロバイダ）を呼び出してそのサービスを提供する。
ＶＰＵ側ＶＰＵ実行環境５０２は、主に、ＶＰＵ１２上のアプリケーションプログラムが呼び出したサービス要求を受けて、ＶＰＵ１２内で処理できるものは処理し、そうでないものはＭＰＵ側ＶＰＵ実行環境５０１のサービスブローカ５１２に処理を依頼する働きをする。
【００５９】
図２９に、ＶＰＵ側ＶＰＵ実行環境５０２がサービス要求を処理する手順を示す。ＶＰＵ側ＶＰＵ実行環境５０２はアプリケーションプログラムからのサービス呼び出しを受け取ると（ステップＳ１０１）、ＶＰＵ実行環境５０２内で処理できるサービスであるかどうかを判別し（ステップＳ１０２）、それであれば、対応するサービスを実行して、結果を呼び出し元へ返す（ステップＳ１０３，Ｓ１０７）。一方、ＶＰＵ実行環境５０２内で処理できるサービスではないならば、該当するサービスを実行可能なサービスプログラムがＶＰＵ１２上で実行可能なプログラムとして登録されているかどうかを判断する（ステップＳ１０４）。登録されているならば、当該サービスプログラムを実行し、結果を呼び出し元へ返す（ステップＳ１０５，Ｓ１０７）。登録されていないならば、サービスブローカ５１２に処理を依頼し、そしてサービスブローカ５１２から返されるサービスの結果を呼び出し元へ返す（ステップＳ１０６，Ｓ１０７）。
【００６０】
図３０に、ＭＰＵ側ＶＰＵ実行環境５０１のサービスブローカ５１２が、ＶＰＵ側ＶＰＵ実行環境５０２から要求されたサービスを処理する手順を示す。サービスブローカ５１２はＶＰＵ側ＶＰＵ実行環境５０２からのサービス呼び出しを受け取ると（ステップＳ１１１）、ＭＰＵ側ＶＰＵ実行環境５０１内で処理できるサービスであるかどうかを判別し（ステップＳ１１２）、それであれば、対応するサービスを実行して、結果を呼び出し元のＶＰＵ側ＶＰＵ実行環境５０２へ返す（ステップＳ１１３，Ｓ１１４）。一方、ＭＰＵ側ＶＰＵ実行環境５０１内で処理できるサービスではないならば、該当するサービスを実行可能なサービスプログラムがＭＰＵ１１上で実行可能なプログラムとして登録されているかどうかを判断する（ステップＳ１１４）。登録されているならば、当該サービスプログラムを実行し、結果を呼び出し元のＶＰＵ側ＶＰＵ実行環境５０２へ返す（ステップＳ１１６，Ｓ１１４）。登録されていないならば、エラーを呼び出し元のＶＰＵ側ＶＰＵ実行環境５０２へ返す（ステップＳ１１７）。
【００６１】
なお、ＶＰＵ１２で実行するプログラムが発行するサービス要求には、サービスの実行結果のリプライを返すものもあれば、要求を出すだけでリプライの無いものもある。また、リプライ先は、通常は要求を出したスレッドであるが、リプライ先として他のスレッド、スレッドグループ、あるいはプロセスを指定することもできる。そのため、サービス要求のメッセージには、リプライ先の指定も含めることが好ましい。サービスブローカ５１２は、広く使われているオブジェクトリクエストブローカを用いて実現することができる。
【００６２】
（リアルタイム処理）
本実施形態の計算機システムはリアルタイム処理システムとして機能する。この場合、そのリアルタイム処理システムの対象とする処理は、大きく、
１．ハードリアルタイム処理
２．ソフトリアルタイム処理
３．ベストエフォート処理（ノンリアルタイム処理）
の３種類に分類できる。１と２がいわゆるリアルタイム処理と呼ばれるものである。本実施形態のリアルタイム処理システムは、多くの既存のＯＳと同様、スレッドとプロセスの概念を持っている。ここではまず、本実施形態のリアルタイム処理システムにおけるスレッドとプロセスに関して説明する。
【００６３】
スレッドには、次の３つのクラスがある。
１．ハードリアルタイムクラス
このスレッドクラスは、その時間要件（ｔｉｍｉｎｇ  ｒｅｑｕｉｒｅｍｅｎｔｓ）は非常に重要で、その要件が満たされなかった際に重大な状況になるような、重要なアプリケーションに用いる。
２．ソフトリアルタイムクラス
このスレッドクラスは、例えその時間要件が満たされなかった場合においても、その品質が低下するだけのアプリケーションに用いる。
３．ベストエフォートクラス
このスレッドクラスは、その要件の中に一切の時間要件を含まないアプリケーションに用いる。
【００６４】
スレッドは本アルタイム処理システム内において処理を実行する実体である。
スレッドには、そのスレッドが実行するプログラムが関連付けられている。各スレッドは、スレッドコンテクストと呼ぶ、それぞれのスレッドに固有の情報を保持している。スレッドコンテクストには、たとえば、プロセッサのレジスタの値や、スタックなどの情報が含まれている。
本リアルタイム処理システムにおいては、ＭＰＵスレッドとＶＰＵスレッドの２種類のスレッドが存在する。これら２つのスレッドは、そのスレッドが実行されるプロセッサ（ＭＰＵ１１かＶＰＵ１２）によって分類されており、スレッドとしてのモデルは全く同じである。ＶＰＵスレッドのスレッドコンテクストには、ＶＰＵ１２のローカルストレージ３２の内容や、メモリコントローラ３３の持つＤＭＡコントローラの状態なども含む。
【００６５】
複数のスレッドをその属性に応じてグループとしてまとめたものを、スレッドグループと呼ぶ。スレッドグループは、グループに含まれるスレッドすべてに対して同じ属性を与える、などの処理を効率よく簡単にできるメリットがある。ハードリアルタイムクラスまたはソフトリアルタイムクラスのスレッドグループは、密結合スレッドグループ（ｔｉｇｈｔｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ  ｇｒｏｕｐ）と疎結合スレッドグループ（ｌｏｏｓｅｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ  ｇｒｏｕｐ）の２種類に大別される。密結合スレッドグループ（ｔｉｇｈｔｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ  ｇｒｏｕｐ）と疎結合スレッドグループ（ｌｏｏｓｅｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ  ｇｒｏｕｐ）はスレッドグループに付加された属性情報（結合属性情報）によって識別される。アプリケーションプログラム内のコードまたは上述の構成記述によってスレッドグループの結合属性を明示的に指定することができる。
密結合スレッドグループは互いに協調して動作する複数のスレッドの集合から構成されるスレッドグループである。すなわち、密結合スレッドグループは、そのグループに属するスレッド群が、お互いに密接に連携して動作することを示す。密接な連携とは、例えば，頻繁にスレッド間で通信あるいは同期処理などの相互作用（ｉｎｔｅｒａｃｔｉｏｎ）を行ったり、あるいは、レイテンシ（ｌａｔｅｎｃｙ）（遅延）の小さい相互作用を必要とする場合などである。一方、疎結合スレッドグループは、密結合スレッドグループに比べてそのグループに属するスレッド群間の密接な連携が不要であるスレッドグループであり、スレッド群はメモリ１４上のバッファを介してデータ受け渡しのための通信を行う。
【００６６】
（密結合スレッドグループ）
図３１に示すように、密結合スレッドグループに属するスレッド群にはそれぞれ別のＶＰＵが割り当てられ、各スレッドが同時に実行される。密結合スレッドグループに属するスレッドを、密結合スレッド（ｔｉｇｈｔｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ）と呼ぶ。この場合、密結合スレッドグループに属する密結合スレッドそれぞれの実行期間がそれら密結合スレッドの個数と同数のＶＰＵそれぞれに対して予約され、それら密結合スレッドが同時に実行される。図３１においては、ある密結合スレッドグループにスレッドＡ，Ｂの２つが密結合スレッドとして含まれており、それらスレッドＡ，ＢがそれぞれＶＰＵ０，ＶＰＵ１によって同時に実行されている様子を示している。スレッドＡ，Ｂをそれぞれ別のＶＰＵによって同時に実行することを保証することにより、各スレッドは相手のスレッドが実行されているＶＰＵのローカルストレージや制御レジスタを通じて相手のスレッドとの通信を直接的に行うことが出来る。図３２は、スレッドＡ，Ｂがそれぞれ実行されるＶＰＵ０，ＶＰＵ１のローカルストレージを介してスレッドＡ，Ｂ間の通信が実行される様子を示している。この場合、スレッドＡが実行されるＶＰＵ０においては、そのスレッドＡのＥＡ空間の一部に、通信相手のスレッドＢが実行されるＶＰＵ１のローカルストレージ３２に対応するＲＡ空間がマッピングされる。このマッピングのためのアドレス変換は、ＶＰＵ０のメモリコントローラ３３内に設けられたアドレス変換ユニット３３１がセグメントテーブルおよびページテーブルを用いて実行する。スレッドＢが実行されるＶＰＵ１においては、そのスレッドＢのＥＡ空間の一部に、通信相手のスレッドＡが実行されるＶＰＵ０のローカルストレージ３２に対応するＲＡ空間がマッピングされる。このマッピングのためのアドレス変換は、ＶＰＵ１のメモリコントローラ３３内に設けられたアドレス変換ユニット３３１がセグメントテーブルおよびページテーブルを用いて実行する。図３３には、ＶＰＵ０上で実行されるスレッドＡが自身のＥＡ空間にスレッドＢが実行されるＶＰＵ１のローカルストレージ（ＬＳ１）３２をマッピングし、ＶＰＵ１上で実行されるスレッドＢが自身のＥＡ空間にスレッドＡが実行されるＶＰＵ０のローカルストレージ（ＬＳ０）３２をマッピングした様子が示されている。例えば、スレッドＡはスレッドＢに引き渡すべきデータがローカルストレージＬＳ０上に準備できた時点で、そのことを示すフラグをローカルストレージＬＳ０またはスレッドＢが実行されるＶＰＵ１のローカルストレージＬＳ１にセットする。スレッドＢはそのフラグのセットに応答して、ローカルストレージＬＳ０上のデータをリードする。
【００６７】
このように、結合属性情報によって密結合関係にあるスレッドを特定できるようにすると共に、密結合関係にあるスレッドＡ，Ｂがそれぞれ別のＶＰＵによって同時に実行されることを保証することにより、スレッドＡ，Ｂ間の通信、同期に関するインタラクションをより軽量で且つ遅延無く行うことが可能となる。
【００６８】
（疎結合スレッドグループ）
疎結合スレッドグループに属するスレッド群それぞれの実行時間は、それらスレッド群間の入出力関係によって決定され、たとえ実行順序の制約がないスレッド同士であってもそれらが同時に実行されることは保証されない。疎結合スレッドグループ属するスレッドを、疎結合スレッド（ｌｏｏｓｅｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ）と呼ぶ。図３４においては、ある疎結合スレッドグループにスレッドＣ，Ｄの２つが疎結合スレッドとして含まれており、それらスレッドＣ，ＤがそれぞれＶＰＵ０，ＶＰＵ１によって実行されている様子を示している。図３４に示すように、各スレッドの実行時間はばらばらになる。スレッドＣ，Ｄ間の通信は、図３５に示すように、メインメモリ１４上に用意したバッファを介して行われる。スレッドＣはローカルストレージＬＳ０に用意したデータをＤＭＡ転送によってメインメモリ１４上に用意したバッファに書き込み、スレッドＤはその開始時にＤＭＡ転送によってメインメモリ１４上のバッファからローカルストレージＬＳ１にデータを読み込む。
【００６９】
（プロセスとスレッド）
プロセスは，図３６に示すように、一つのアドレス空間と一つ以上のスレッドから構成される。一つのプロセスに含まれるスレッドの数と種類は，どのような組み合わせでも構わない。例えば，ＶＰＵスレッドのみから構成されるプロセスも構築可能であるし，ＶＰＵスレッドとＭＰＵスレッドが混在するプロセスも構築可能である。スレッドがスレッド固有の情報としてスレッドコンテクストを保持しているのと同様に，プロセスもプロセス固有の情報としてプロセスコンテクストを保持する。このプロセスコンテクストには，プロセスに固有であるアドレス空間と，プロセスが含んでいる全スレッドのスレッドコンテクストが含まれる。プロセスのアドレス空間は，プロセスに属するすべてのスレッド間で共有することができる。一つのプロセスは，複数のスレッドグループを含むことができる。しかし，一つのスレッドグループが複数のプロセスに属することはできない。このため，あるプロセスに属するスレッドグループは，そのプロセスに固有であるということになる。本実施形態のリアルタイム処理システムにおいて、スレッドを新しく生成する方式には、Ｔｈｒｅａｄ  ｆｉｒｓｔ  ｍｏｄｅｌとＡｄｄｒｅｓｓ  ｓｐａｃｅ  ｆｉｒｓｔ  ｍｏｄｅｌの２種類がある。Ａｄｄｒｅｓｓ  ｓｐａｃｅ  ｆｉｒｓｔ  ｍｏｄｅｌは既存のＯＳで採用されているのと同様の方式で、ＭＰＵスレッドにもＶＰＵスレッドにも適用できる。一方、Ｔｈｒｅａｄ  ｆｉｒｓｔ  ｍｏｄｅｌはＶＰＵスレッドにしか適用できない方式で、本発明のリアルタイム処理システムに特有の方式である。Ｔｈｒｅａｄ  ｆｉｒｓｔ  ｍｏｄｅｌでは，既存のスレッド（新しくスレッドを作りたいと思っている側のスレッド。新しく作るスレッドの親になるスレッドのこと。）は，まず新規スレッドが実行するプログラムを指定して，新規スレッドにプログラムの実行を開始させる。この時、プログラムはＶＰＵ１２のローカルストレージに格納され、所定の実行開始番地から処理が開始される。この時点では、この新規スレッドにはアドレス空間が関連付けられていないので、自身のローカルストレージはアクセスできるが、メモリ１４はアクセスできない。その後，新規スレッドは，必要に応じて自身でＶＰＵ実行環境のサービスを呼び出してアドレス空間を生成して関連付けたり、ＭＰＵ１１側の処理によってアドレス空間を関連付けられたりして、メモリ１４にアクセスできるようになる。Ａｄｄｒｅｓｓ  ｓｐａｃｅ  ｆｉｒｓｔ  ｍｏｄｅｌでは，既存のスレッドは，新しくアドレス空間を生成するか、あるいは既存のアドレス空間を指定して、そのアドレス空間に新規スレッドが実行するプログラムを配置する。そして新規スレッドにそのプログラムの実行を開始させる。Ｔｈｒｅａｄ  ｆｉｒｓｔ  ｍｏｄｅｌのメリットは、ローカルストレージだけで動作するので、スレッドの生成やディスパッチや終了処理などのオーバーヘッドを小さくできることである。
【００７０】
（スレッド群のスケジューリング）
次に、図３７のフローチャートを参照して、ＶＰＵ実行環境４０１によって実行されるスケジューリング処理について説明する。ＶＰＵ実行環境４０１内のスケジューラは、スケジュール対象のスレッド群にスレッドグループ単位で付加されている結合属性情報に基づいて、スレッド間の結合属性をチェックし（ステップＳ１２１）、各スレッドグループ毎にそのスレッドグループが密結合スレッドグループおよび疎結合スレッドグループのいずれであるかを判別する（ステップＳ１２２）。結合属性のチェックは、プログラムコード中のスレッドに関する記述あるいは上述の構成記述１１７中のスレッドパラメータを参照することによって行われる。このようにして、密結合スレッドグループおよび疎結合スレッドグループをそれぞれ特定することにより、スケジュール対象のスレッド群は密結合スレッドグループと疎結合スレッドグループとに分離される。
【００７１】
密結合スレッドグループに属するスレッド群に対するスケジューリングは次のように行われる。すなわち、ＶＰＵ実行環境４０１内のスケジューラは、スケジュール対象のスレッド群から選択された密結合スレッドグループに属するスレッド群がそれぞれ別のＶＰＵによって同時に実行されるように、その密結合スレッドグループに属するスレッド群と同数のＶＰＵそれぞれの実行期間を予約し、スレッド群をそれら予約したＶＰＵそれぞれに同時にディスパッチする（ステップＳ１２３）。そして、スケジューラは、各スレッドが実行されるＶＰＵ内のアドレス変換ユニット３３１を用いて、各スレッドのＥＡ空間の一部に、協調して相互作用を行う相手となる他のスレッドが実行されるＶＰＵのローカルストレージに対応するＲＡ空間をマッピングする（ステップＳ１２４）。一方、スケジュール対象のスレッド群から選択された疎結合スレッドグループに属する疎結合スレッド群については、スケジューラは、それらスレッド群間の入出力関係に基づいてそれらスレッド群を１以上のＶＰＵに順次ディスパッチする（ステップＳ１２５）。
【００７２】
（スレッドの状態遷移）
一般にスレッドは、生成されてから消滅するまで、たとえば図３８に示すような状態遷移を行う。図３８の例では、以下の７種類の状態を遷移する。
１．ＮＯＴ  ＥＸＩＳＴＥＮＴ状態
論理的な状態であり，有効なスレッドでは，この状態はない。
２．ＤＯＲＭＡＮＴ状態
スレッドは生成されているが，まだ実行は開始されていない。
３．ＲＥＡＤＹ状態
スレッドが，その実行を開始する準備ができている状態。
４．ＷＡＩＴＩＮＧ状態
スレッドが，実行を開始（再開）するための条件が満たされることを待っている状態。
５．ＲＵＮＮＩＮＧ状態
スレッドが，実際にＶＰＵまたはＭＰＵ上で実行されている状態。
６．ＳＵＳＰＥＮＤＥＤ状態
ＶＰＵ実行環境や他のスレッドにより，スレッドが強制的にその実行を中断させられている状態。
７．ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態
ＷＡＩＴＩＮＧ状態とＳＵＳＰＥＮＤＥＤ状態が重なった状態。
【００７３】
これらの７つの状態の間の遷移条件と、その遷移に伴うスレッドコンテクストの扱いは、以下のようになる。
＜ＮＯＴ  ＥＸＩＳＴＥＮＴ状態からＤＯＲＭＡＮＴ状態への遷移＞
・スレッドの作成によって遷移する。
・スレッドコンテクストが作成される。ただしコンテクストの中身は初期状態である。
＜ＤＯＲＭＡＮＴ状態からＮＯＴ  ＥＸＩＳＴＥＮＴ状態への遷移＞
・スレッドの削除によって遷移する。
・スレッドが，そのスレッドコンテクストを保存するように設定されていた場合，この遷移によって，保存されていたコンテクストは破棄される。
＜ＤＯＲＭＡＮＴ状態からＷＡＩＴＩＮＧ状態への遷移＞
・スレッドが，実行環境に対してスレッドのスケジューリングをリクエストすると，スレッドの状態は，ＤＯＲＭＡＮＴ状態からＷＡＩＴＩＮＧ状態へ遷移する。
＜ＷＡＩＴＩＮＧ状態からＲＥＡＤＹ状態への遷移＞
・スレッドが，生起するのを待っていたイベント（例えば，同期や通信，タイマなど）が，生起した場合に，スレッドの状態はＷＡＩＴＩＮＧ状態からＲＥＡＤＹ状態へ遷移する。
【００７４】
＜ＲＥＡＤＹ状態からＲＵＮＮＩＮＧ状態への遷移＞
・スレッドが，実行環境によってＭＰＵまたはＶＰＵにディスパッチされると，スレッドの状態は，ＲＥＡＤＹ状態からＲＵＮＮＩＮＧ状態へ遷移する。
・スレッドコンテクストがロードされる。また，スレッドコンテクストが退避されていた場合には，復元される。
＜ＲＵＮＮＩＮＧ状態からＲＥＡＤＹ状態への遷移＞
・スレッドが，スレッドの実行を横取りされると，スレッドの状態は，ＲＵＮＮＩＮＧ状態からＲＥＡＤＹ状態へ遷移する。
【００７５】
＜ＲＵＮＮＩＮＧ状態からＷＡＩＴＩＮＧ状態への遷移＞
・スレッドが，同期や通信などの機構を利用し，イベントを待つために自身の実行を中断した場合，スレッドの状態は，ＲＵＮＮＩＮＧ状態からＷＡＩＴＩＮＧ状態へ遷移する。
・すべてのクラスのスレッドは，スレッドコンテクストを保存するように設定することができる。スレッドが，スレッドコンテクストを保存するように設定されていた場合は，ＲＵＮＮＩＮＧ状態からＷＡＩＴＩＮＧ状態へ遷移する際に，実行環境によって，そのスレッドのスレッドコンテクストが退避される。このスレッドコンテクストは，ＤＯＲＭＡＮＴ状態に遷移しない限り保持され，次にこのスレッドがＲＵＮＮＩＮＧ状態に遷移した時に復元される。
＜ＲＵＮＮＩＮＧ状態からＳＵＳＰＥＮＤＥＤ状態への遷移＞
・スレッドが，実行環境や他のスレッドからの指示などによって，強制的にその実行を中断させられた場合，スレッドの状態は，ＲＵＮＮＩＮＧ状態からＳＵＳＰＥＮＤＥＤ状態へ遷移する。
・すべてのクラスのスレッドは，スレッドコンテクストを保存するように設定することができる。スレッドが，スレッドコンテクストを保存するように設定されていた場合は，ＲＵＮＮＩＮＧ状態からＳＵＳＰＥＮＤ状態へ遷移する際に，実行環境によって，スレッドコンテクストが退避される。このスレッドコンテクストは，ＤＯＲＭＡＮＴ状態に遷移しない限り，次にこのスレッドがＲＵＮＮＩＮＧ状態に遷移した時に復元される。
【００７６】
＜ＲＵＮＮＩＮＧ状態からＤＯＲＭＡＮＴ状態への遷移＞
・スレッドは，スレッド自身でその実行を終了した場合に，ＲＵＮＮＩＮＧ状態からＤＯＲＭＡＮＴ状態へ遷移する。
・スレッドが，そのスレッドコンテクストを保存するように設定されていた場合，この遷移によってコンテクストの内容が破棄される。
＜ＷＡＩＴＩＮＧ状態からＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態への遷移＞
・スレッドがＷＡＩＴＩＮＧ状態にてイベントなどの生起を待っている最中に，外部から強制的にスレッドの実行を中断された場合，スレッドの状態は，ＷＡＩＴＩＮＧ状態からＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態へ遷移する。
＜ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態からＷＡＩＴＩＮＧ状態への遷移＞
・スレッドが，ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態にいる最中に，外部からスレッドの実行を再開された場合，スレッドの状態はＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態からＷＡＩＴＩＮＧ状態へ遷移する。
【００７７】
＜ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態からＳＵＳＰＥＮＤＥＤ状態への遷移＞
・スレッドは，スレッドがＷＡＩＴＩＮＧ状態にいた時に待っていたイベントが生起した場合に，スレッドの状態は，ＷＡＩＴＩＮＧ−ＳＵＳＰＥＮＤＥＤ状態からＳＵＳＰＥＮＤＥＤ状態へ遷移する。
【００７８】
＜ＳＵＳＰＥＮＤＥＤ状態からＲＥＡＤＹ状態への遷移＞
・スレッドが，外部からスレッドの実行を再開させられた時に，スレッドの状態は，ＳＵＳＰＥＮＤＥＤ状態からＲＥＡＤＹ状態へ遷移する。
【００７９】
＜ＲＥＡＤＹ状態からＳＵＳＰＥＮＤＥＤ状態への遷移＞
・スレッドが，外部環境によってスレッドの実行が中断させられた場合に，スレッドの状態は，ＲＥＡＤＹ状態からＳＵＳＰＥＮＤＥＤ状態へ遷移する。
【００８０】
（スレッドの実行期間）
スレッドに実際にＶＰＵが割り当てられて処理を実行しているＲＵＮＮＩＮＧ状態の期間を、実行期間（ｅｘｅｃｕｔｉｏｎ  ｔｅｒｍ）と呼ぶ。一般にスレッドが生成されてから消滅するまでの間には、スレッドは複数の実行期間を持つ。図３９はあるスレッドの生成から消滅までの時間軸に沿った状態の変化の例を示しているが、この例では、その生存期間中に、２回の実行期間があることを示している。実行期間と実行期間との間のコンテクストの保存（ｓａｖｅ）や復元（ｒｅｓｔｏｒｅ）は、さまざまな方法を用いて実現することができる。たとえば、多くの通常のスレッドは、実行期間が終了した時点のコンテクストを保存しておいて、次の実行期間の初めにそのコンテクストを復元するように動作させる。一方、ある種の周期的な（ｐｅｒｉｏｄｉｃ）処理においては、全ての周期（ｐｅｒｉｏｄ）において、実行期間の開始時には新しいコンテクストを作成してその実行期間中はそのコンテクストを使って実行を進め、実行期間の終了時にはそのコンテクストは廃棄するように動作させる。
【００８１】
（密結合スレッドグループに属するスレッドの実行期間）
密結合スレッドグループに属するスレッドの場合の実行期間は、たとえば図４０のようになる。すなわち、密結合スレッドグループに属するすべてのスレッドは、ある一つの実行期間において、全てのスレッドが同時に実行されるように、ＶＰＵ実行環境４０１によってスケジューリングされる。このような密結合スレッドグループは、主としてハードリアルタイムスレッドに対して使用される。そのため、この動作を実現するために、ＶＰＵ実行環境４０１は、ハードリアルタイムクラスにおける実行期間を予約するときに、同時に使用するプロセッサとその数を指定する。さらに、ＶＰＵ実行環境４０１は、予約するそれぞれのプロセッサに対して、一対一に同時実行させるスレッドのコンテクストを対応させる。
【００８２】
なお、ある期間において密結合スレッドグループに属していた複数のスレッドは、他の実行期間においては、密結合の関係を解消して、各スレッドが別々に動作することもできる。このような場合には、各スレッドは、今、密結合スレッドとして動作しているのか、あるいは、別々に動作しているのかを意識して、相手のスレッドとの通信や同期等の処理を行う必要がある。各スレッドには、横取り可能（ｐｒｅｅｍｐｔｉｖｅ）か横取り不可（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）を示すプリエンプションに関連した属性が与えられる。Ｐｒｅｅｍｐｔｉｖｅとは、スレッドの実行期間中に、そのスレッドが横取りされることを許す、すなわち、実行を停止させることができるという属性である。Ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅとは、スレッドの実行期間中に、そのスレッドが横取りされないことを保障するという属性である。この横取り不可（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）という属性の意味は、スレッドのクラス間で異なる。ハードリアルタイムクラスでは、スレッドが実行を開始すると、実行期間が終わるまで、そのスレッド自身以外、誰もその実行を止めることが出来ないことを意味する。ソフトリアルタイムクラスでは、そのクラスにとって、横取り可能性（ｐｒｅｅｍｐｔｉｖｅ−ｎｅｓｓ）は必要不可欠であるため、横取り不可の属性はサポートされない。ベストエフォートクラスでは、スレッドの実行は、他のベストエフォートクラスからの横取りからは保護されるものの、ハードリアルタイムやソフトリアルタイムクラスといったより高いレベルからは、横取りされる。
【００８３】
（スレッドの実行モデル）
スレッドの実行モデルは、大きく、図４１に示すような周期実行モデルと、図４２に示すような非周期実行モデルの２つに分類できる。周期実行モデルでは、スレッドは周期的（ｐｅｒｉｏｄｉｃａｌｌｙ）に実行される。その一方、非周期実行モデルでは、イベントを起点としてその実行が行われる。周期実行モデルの実装方式には、ソフトウェア割込みを用いる方式と、同期機構（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｐｒｉｍｉｔｉｖｅｓ）のようなイベントオブジェクトを用いる方式がある。ハードリアルタイムクラスでは、ソフトウェア割込みを用いて実装する。すなわち、ＶＰＵ実行環境４０１は、周期的な処理を開始するタイミングで、所定の方法で決定されるスレッドのエントリポイントへジャンプしたり、あるいは、事前に所定の手順で登録されたコールバック関数を呼び出す。ソフトリアルタイムクラスでは、イベントオブジェクトを用いて実装する。すなわち、各周期において、あらかじめ登録されたイベントオブジェクトに対して、たとえばＶＰＵ実行環境４０１がイベントを通知するので、ソフトリアルタイムスレッドは、毎周期そのイベントオブジェクトを待ち、イベントが発生したら所定の処理を実行するようにプログラムを構成することで、周期実行モデルを実現する。ベストエフォートクラスの場合は、ソフトウェア割込みを用いる方式を用いても、イベントオブジェクトを用いる方式を用いても、周期実行モデルを実装できる。なお、実際の実行は、それぞれの周期の先頭で常に開始されるとは限らず、制約条件（ｃｏｎｓｔｒａｉｎｔｓ）の範囲内で、状態に応じて遅らされることもある。
【００８４】
非周期実行モデルは、イベントモデルを用いると、周期実行モデルと同様に実現できる。すなわち、ソフトリアルタイムやベストエフォートクラスでは、非周期実行モデルは、イベントが通知されるタイミングが異なるだけで、実装手法上は周期実行モデルと同じになる。ハードリアルタイムクラスの場合は、時間要件を保障するために必要な、最小発生期間（ｍｉｎｉｍｕｍ  ｉｎｔｅｒ−ａｒｒｉｖａｌ  ｔｉｍｅ）やデットラインは、システムの振る舞いを強く制約するため、非周期実行は制限される。
【００８５】
（コンテクストの切り替え）
本実施形態のリアルタイム処理システムにおいては、ＶＰＵスレッドの実行期間の終了に伴うコンテクストの切り替え方式は、複数の方式から選択することができる。ＶＰＵのコンテクスト切り替えのコストは非常に大きいので、その方式を選択できるようにすることで、コンテクスト切り替えの効率を向上させることができる。指定したコンテクスト切り替え方式は、スレッドの予約された実行期間が終了した際に用いられるものである。実行期間中のコンテクスト切り替え、すなわち、いわゆるプリエンプションの際には、どの様な場合においても現在のスレッドの全てのコンテクストを保存して、次に実行再開するときに復元する必要がある。本実施形態のリアルタイム処理システムで提供するＶＰＵコンテクスト切り替えの方式には、たとえば、以下のような方式がある。
【００８６】
１．コンテクストの破棄
いかなるコンテクストも保存しない。
２．完全なコンテクストの保存
ＶＰＵのレジスタ、ローカルストレージ、およびメモリコントローラ内のＤＭＡコントローラの状態を含む、ＶＰＵの完全なコンテクストを保存する。
３．Ｇｒａｃｅｆｕｌコンテキスト保存
ＶＰＵのメモリコントローラ内のＤＭＡコントローラが実行中の全ての動作が完了するまでコンテクスト切り替えを遅延する。その後、ＶＰＵのレジスタとローカルストレージの内容を保存する。この方式では、完全なコンテクスト保存と同様、ＶＰＵのコンテクストの全てが保存される。
【００８７】
スレッドのスケジューリングを行うスケジューラは、ＭＰＵスレッドとＶＰＵスレッドの両方をスケジューリングするひとつのスケジューラとして実装することもできるし、ＭＰＵスレッド用のスケジューラとＶＰＵスレッド用のスケジューラを別に実装することもできる。ＭＰＵとＶＰＵではコンテクスト切り替えのコストが異なるため、別々にそれぞれに適したスケジューラを実装するほうが効率よくなる。
【００８８】
（ハードリアルタイムクラスのスケジューリング）
ハードリアルタイムクラスのスレッド群のスケジューリングは、タスクグラフを拡張した予約グラフを用いて行われる。図４３はタスクグラフの例である。タスクグラフは、タスク間の関係を表す。タスク間の矢印は、タスク間の依存関係（入出力関係）を示している。図４３の例では、タスク１とタスク２は、自由に実行を開始することが出来ることを表している。それに対し、タスク３は、タスク１とタスク２両方の実行終了後に始めて実行を開始することが出来ることを表している。また、タスク４とタスク５は、タスク３の実行終了後に実行を開始することが出来ることを表している。タスクグラフにはコンテクストの概念がない。例えば、タスク１とタスク４とを同じコンテクストを用いて実行したい場合に、それを記述することができない。そこで、本実施形態のリアルタイム処理システムでは、以下のようにしてタスクグラフを拡張した予約グラフを用いる。
【００８９】
まず、タスクグラフを、タスクではなく実行期間の間の関係を示すものととらえる。そして、それぞれの実行期間に、コンテクストを関係付けることで、そのコンテクストに対応するスレッドが、その実行期間に実行されることを示す。複数の実行期間に同じコンテクストが関係付けられると、それら全ての実行期間において、そのスレッドが実行されることを示す。例えば、図４４では、スレッド１のコンテクストが実行期間１と２とに関係付けられており、スレッド１は、実行期間１と２の期間で実行されることを示す。さらに、グラフに用いられる実行期間の間の矢印に、実行環境にて保障されるハードリアルタイムの制約条件を表す属性を付加する。このようにして作成した予約グラフを用いて、リアルタイムシステムアプリケーションのモデルを一切修正することなく、処理モデルとその処理が持つ時間要件などの制約条件を記述することが可能になる。図４５に、図４４をベースに作成した予約グラフの例を示す。図４５でコンテクスト１，２，３は、それぞれ図４４のスレッド１，２，３のコンテクストを示している。
【００９０】
（ソフトリアルタイムクラスのスケジューリング）
ソフトリアルタイムクラスのスケジューリングは、スレッドの実行形態を予測可能とするために、固定優先度スケジューリングを用いて実行される。そのスケジューリング方式としては、固定優先度ＦＩＦＯスケジューリングと固定優先度ラウンドロビンスケジューリングの２種類のスケジューリングアルゴリズムを用意する。優先度の高いスレッドの実行を優先するため、低い優先度のスレッドが実行中であっても、より高い優先度のスレッドが実行可能になった場合には、低優先度のスレッドの実行をプリエンプトし、直ちに高優先度のスレッドの実行を開始する。クリティカルセクション（ｃｒｉｔｉｃａｌ  ｓｅｃｔｉｏｎ）の実行時に発生する、優先度逆転問題を避けるため、優先度継承プロトコルや、優先度シーリングプロトコルなどの同期機構を併せて実施するのが望ましい。
【００９１】
（ベストエフォートクラスのスケジューリング）
ベストエフォートクラスのスケジューリングは、たとえば、動的優先度スケジューリングなどを用いる。
【００９２】
（階層型スケジューラ）
ＶＰＵ実行環境４０１内のスケジューリング機能は、図４６に示すような階層型のスケジューラとして実施することができる。すなわち、スレッドレベルのスケジューリングは、スレッドクラス間（ｉｎｔｅｒ−ｃｌａｓｓ）スケジューリングと、スレッドクラス内（ｉｎｔｒａ−ｃｌａｓｓ）スケジューリングの、２つの階層により構成する。そのため、ＶＰＵ実行環境４０１内のスケジューラは、スレッドクラス内（ｉｎｔｒａ−ｃｌａｓｓ）スケジューリング部６０１と、スレッドクラス間（ｉｎｔｅｒ−ｃｌａｓｓ）スケジューリング部６０２とを持つ。スレッドクラス間スケジューリングでは、スレッドクラス間を跨るスケジューリングを行う。スレッドクラス内スケジューリングでは、それぞれのスケジューリングクラスごとに、そのスケジューリングクラスに属するスレッドのスケジューリングを行う。スレッドクラス内（ｉｎｔｒａ−ｃｌａｓｓ）スケジューリング部６０１には、ハードリアルタイム（ハードＲＴ）クラススケジューリング部６１１、ソフトリアルタイム（ソフトＲＴ）クラスケジューリング部６１２、ベストエフォートクラスケジューリング部６１３が設けられている。
【００９３】
スレッドクラス間スケジューリングとスレッドクラス内スケジューリングは、階層構造をなしており、まず、スレッドクラス間スケジューリングが動作して、どのスレッドクラスを実行するか決定した後、該当するスレッドクラス内スケジューリングによって、そのスレッドクラス内のどのスレッドを実行するかを決定する。スレッドクラス間スケジューリングは、プリエンプト可能な固定優先度スケジューリングを用いる。このとき、ハードリアルタイムクラスが最高優先度を持ち、ソフトリアルタイムクラス、ベストエフォートクラスの順に優先度が低くなるようにする。低優先度クラスのスレッドは、より優先度の高いクラスのスレッドが実行可能（ｒｅａｄｙ）になると、その実行はプリエンプトされる。スレッドクラス間の同期は、ＶＰＵ実行環境４０１によって提供される同期プリミティブによって実現する。このとき特に、ハードリアルタイムスレッドにはブロックすることのないプリミティブのみ使用できるようにして、ハードリアルタイムスレッドのブロックが発生しないようにする。また、ベストエフォートスレッドがソフトリアルタイムスレッドをブロックした場合には、そのベストエフォートスレッドは、ソフトリアルタイムスレッドとして扱うことで、スレッドクラス間の優先度逆転の発生を防止するようにする。さらに、そのベストエフォートスレッドが、他のソフトリアルタイムスレッドによってブロックされるような場合には、優先度継承プロトコルなどの方式を用いてブロックされないようにする。
【００９４】
（スレッドパラメタ）
本実施形態のリアルタイム処理システムでは、さまざまなパラメタを用いてスケジューリングを行う。各クラスのスレッドに共通のパラメタには、たとえば以下のようなものがある。
・スレッドのクラス（ハードリアルタイム、ソフトリアルタイム、ベストエフォート）
・使用するリソース（ＭＰＵもしくはＶＰＵの数、バンド幅、物理メモリサイズ、入出力デバイス）
・優先度
・横取り可能（ｐｒｅｅｍｐｔｉｖｅ）か横取り不可（ｎｏｎ−ｐｒｅｅｍｐｔｉｖｅ）か
さらにハードリアルタイムクラスのスレッドに関しては、たとえば以下のようなパラメタがある。
【００９５】
・実行期間
・デッドライン
・周期あるいは最小発生期間（ｍｉｎｉｍｕｍ  ｉｎｔｅｒ−ａｒｒｉｖａｌ  ｔｉｍｅ）
・ＶＰＵのコンテクスト切り替え方式
図４７にハードリアルタイムクラスの基本的なパラメタの例を示す。図４７の一番上にある例１の実行期間の予約指定の例では、指定した実行期間の間、ＭＰＵを１つ、ＶＰＵを２つ同時に予約し、ＶＰＵのコンテクストを完全に保存することを指定している。この場合、３つのプロセッサ上で同時にスレッドが実行され、その実行期間終了後に、ＭＰＵスレッドに加え、ＶＰＵスレッドのコンテクストが完全に保存される。次に、右上にある例２では、ＶＰＵ数とその実行期間によって表現される処理が、デッドラインより以前に実行されることを保障する際の、デッドラインの指定方法を示している。デッドラインは、予約リクエストを行った時刻（ｒｅｑｕｅｓｔ  ｔｉｍｅ）からの相対時刻で指定される。もっとも下にある例３では、周期実行を指定している。この例では、２つのＶＰＵ１２を指定した実行期間が、周期的に実行され、また、各周期の実行後にＶＰＵスレッドのコンテクストが破棄され、全ての処理が新しいコンテクストで処理されること示している。さらに、その周期の先頭からの相対時刻を用いてデッドラインを指定している。
【００９６】
ハードリアルタイムクラスで用いる別のパラメタとして、たとえば以下に示すような制約条件がある。
・タイミング制約（絶対タイミング制約、相対タイミング制約）
・先行制約
・相互排他制約
タイミング制約は、実行タイミングを遅らせる手段を提供する。絶対タイミング制約は、図４８に示すように、例えば周期の開始時刻のような、ある静的なタイミングを基準として遅延時間を指定する制約条件である。相対タイミング制約は、図４９に示すように、例えば他の実行期間の開始時刻や終了時刻のような、動的なタイミングやイベントを基準として許容可能な遅延時間を指定する制約条件である。先行制約は、相対タイミング制約を用いて、他の実行期間の終了時間を基準にし、その遅延時間を０以上と指定することで実現できるので、先行制約は相対タイミング制約の特殊な場合と考えることができる。
【００９７】
相互排他制約（ｍｕｔｕａｌ  ｅｘｃｌｕｓｉｖｅ）は、図５０に示すように、それぞれの実行期間が、時間的に重ならないことを保障する制約である。相互排他制約を用いることによって、ロックによって発生するスレッド実行時間の予測不可能性を削減することが可能になる。すなわち、あるリソースを共有する全てのスレッドが同時に実行されないようにして、そのリソースに関するロックをなくすことができる。
【００９８】
（スレッドの同期機構）
本実施形態のリアルタイム処理システムでは、スレッドの同期機構として、たとえば以下のような手段を用いる。
【００９９】
・セマフォ
・メッセージキュー
・メッセージバッファ
・イベントフラグ
・バリア
・ミューテックス
その他の同期プリミティブも、これらと同様に用いることができる。このような同期機構を実現する手段として、本発明のリアルタイム処理システムでは、次の３通りの方式がある。
【０１００】
・メモリ（主記憶）１３あるいはＶＰＵのローカルストレージ３２上に、たとえばＴＥＳＴ＆ＳＥＴのような命令を使って実現する
・メールボックスやシグナルレジスタなどのハードウェア機構を使って実現する
・ＶＰＵ実行環境がサービスとして提供する機構を利用する
これらの実現手段の異なる同期機構は、それぞれ得失を持っているため、それを利用するスレッドの属性等によって、たとえば図５１のように使い分けるのが望ましい。すなわち、ＭＰＵやＶＰＵが共有してアクセスできるメモリ１３（主記憶ＭＳ）を使って実装した同期機構は、すべてのクラスのスレッドで使用できる。それに対して，ＶＰＵ１２のローカルストレージＬＳ上に実装した同期機構は、密結合スレッドグループ（ｔｉｇｈｔｌｙ  ｃｏｕｐｌｅｄ  ｔｈｒｅａｄ  ｇｒｏｕｐ）に属するスレッドのみが使うことができる。これは、密結合スレッドグループに属するスレッドのみが，同期相手のスレッドが同時に動作していることを保障されるからである。例えば，相手のスレッドが動作しているＶＰＵのローカルストレージ上に実装した同期機構を用いる場合、密結合スレッドグループのスレッドであれば、同期機構を使う時点で、相手のスレッドが動作していることが保障されているので、その相手スレッドを実行しているＶＰＵのローカルストレージに同期機構のための情報が必ず存在する。
【０１０１】
メモリ（主記憶ＭＳ）やローカルストレージＬＳ以外の手段を用いて実装した同期機構としては、ハードウェア機構を使って実現する場合と、ＶＰＵ実行環境４０１のサービスを使う場合がある。密結合スレッドグループに属するスレッド、あるいはハードリアルタイムクラスのスレッドは，速い同期機構が必要であるので、ハードウェア機構を用いて実装した同期機構を用いるのが望ましい。それに対して，疎結合スレッドグループに属するスレッド、あるいはソフトリアルタイムクラスと，ベストエフォートクラスのスレッドは，実行環境が提供する機構を利用するのが望ましい。
【０１０２】
（同期機構の自動選択）
本実施形態のリアルタイム処理システムでは、上記の同期機構を、スレッドの属性や状態に合わせて自動的に選択・切り替えを行うことができる。これは例えば図５２に示すような手順により、同期処理を行いたいスレッドが密結合スレッドグループに属している状態の間は（ステップＳ２０１のＹＥＳ）、メモリ１４あるいはＶＰＵ１２のローカルストレージ３２あるいはハードウェア機構を用いて実装された高速な同期機構を用いるが（ステップＳ２０２，Ｓ２０３，Ｓ２０４，Ｓ２０５）、スレッドの状態が変化して密結合関係になくなった状態では（ステップＳ２０１のＮＯ）、メモリ１４上に実装された同期機構化あるいはＶＰＵ実行環境４０１のサービスとして提供されている同期機構を用いるように同期機構を切り替える（ステップＳ２０６，Ｓ２０７，Ｓ２０８）。
この切り替え手段は、ＶＰＵ１２上で動作するプログラムに対して、ライブラリの形式で提供するようにしても良いし、ＶＰＵ１２側のＶＰＵ実行環境５０２の提供するサービスとして提供することもできる。複数の同期機構を切り替える方式としては、あらかじめ複数の同期機構を確保しておいて、それを使い分けるようにすることもできるし、切り替えを行う時点で新しく同期機構を確保するようにすることもできる。
【０１０３】
ＶＰＵ１２のローカルストレージを用いた同期機構は、密結合スレッドグループに属するスレッド間のように、同期処理を行う時点で、同期機構を実装しているＶＰＵ１２のローカルストレージが必ず有効になっている必要がある。この制限を緩和する方式としては、スレッドが実行中（ＲＵＮＮＩＮＧ状態）で無い場合には、そのスレッドを最後に実行していたときのローカルストレージの内容をメモリに保存しておき、そのスレッドに対応付けられたローカルストレージを指すページテーブルあるいはセグメントテーブルのエントリからは、その保存したメモリ領域を指すようにマッピングを制御する。この方式により、相手のスレッドが実行中でなくても、相手のスレッドに対応付けられたローカルストレージがあたかもあるように、スレッドの実行を続けることができる。実行中で無かったスレッドが、ＶＰＵ１２を割り当てられて実行を始めるときには、メモリ１４に保存していた内容を、再びローカルストレージに戻して、対応するページテーブルあるいはセグメントテーブルのマップを変更する。このように、ＶＰＵ１２のローカルストレージのバックアップコピーに対しても動作可能なように同期機構を実装しておくことで、密結合スレッドグループに属するスレッドでなくても、ＶＰＵ１２のローカルストレージを用いて実装した高速な同期機構を利用できるようになる。
【０１０４】
（予約グラフ）
図５３は、図９に例として示した処理フローに対応する予約グラフを示したものである。図５３において、６つの四角い箱は実行期間（ｅｘｅｃｕｔｉｏｎ  ｔｅｒｍ）を表している。各実行期間の四角の左上の番号は予約する実行期間のＩＤであり、実行期間の四角の中の記号は、その実行期間に対応付けられているスレッドコンテクストの識別子である。実行期間の四角の下の数値は、その実行期間の長さ（コスト）を表している。実行期間の四角の間を結ぶ矢印は、ここではすべて先行制約を表している。すなわち、矢印が入る実行期間は、必ず矢印が出ている実行期間が終わった後で実行を開始することを示している。これにより、実行期間間の連鎖が表現される。また、矢印に添えられている番号はその矢印で結ばれた実行期間の間でデータの受け渡しに使うバッファのＩＤを表しており、番号と共に添えられている数値はバッファのサイズを表している。図５３に示した予約グラフに従って処理を実行するための手順は、以下のようになる。
【０１０５】
１．ＤＥＭＵＸプログラム１１１を実行するスレッドコンテクストを作成して、その識別子をＤＥＭＵＸとする。
２．Ａ−ＤＥＣプログラム１１２を実行するスレッドコンテクストを作成して、その識別子をＡ−ＤＥＣとする。
３．Ｖ−ＤＥＣプログラム１１３を実行するスレッドコンテクストを作成して、その識別子をＶ−ＤＥＣとする。
４．ＴＥＸＴプログラム１１４を実行するスレッドコンテクストを作成して、その識別子をＴＥＸＴとする。
５．ＰＲＯＧプログラム１１５を実行するスレッドコンテクストを作成して、その識別子をＰＲＯＧとする。
６．ＢＬＥＮＤプログラム１１６を実行するスレッドコンテクストを作成して、その識別子をＢＬＥＮＤとする  。
【０１０６】
７．図５４に示すようなデータ構造の予約リクエストを作成し、ＶＰＵ実行環境４０１に渡して予約を行う。
ここで手順１から６までのスレッドコンテクストの作成は、スレッドとして実行したいプログラムを指定してＶＰＵ実行環境４０１に依頼すると、ＶＰＵ実行環境４０１が必要な資源を割り当ててスレッドコンテクストを作成し、そのハンドルを返してくるので、それを識別子と関連付けている。
【０１０７】
図５４の予約リクエストは、ＢＵＦＦＥＲと書かれたバッファデータと、ＴＡＳＫと書かれた実行期間データから構成される。バッファデータは、実行期間の間でデータを受け渡すために用いるメモリ１４上のバッファを宣言するもので、Ｉｄ：にバッファ番号を、Ｓｉｚｅ：にバッファサイズを、ＳｒｃＴａｓｋ：にデータを書き込む実行期間の番号を、ＤｓｔＴａｓｋ：にデータを読み出す実行期間の番号を持つ。実行期間データは、Ｉｄ：に実行期間番号を、Ｃｌａｓｓ：にスレッドクラス（ＶＰＵはＶＰＵスレッドであることを示し、ＨＲＴはハードリアルタイムクラスであることを示す。他に、ＭＰＵスレッドを示すＭＰＵや、ソフトリアルタイムクラスを示すＳＲＴや、ベストエフォートクラスを示すＢＳＴなどがある）を、ＴｈｒｅａｄＣｏｎｔｅｘｔ：にこの実行期間に対応付けるスレッドコンテクストを、Ｃｏｓｔ：にこの実行期間の長さあるいはコストを、Ｃｏｎｓｔｒａｉｎｔ：にこの実行期間を基準とする各種の制約を、ＩｎｐｕｔＢｕｆｆｅｒ：にこの実行期間で読み出すバッファの識別子のリストを、ＯｕｔｐｕｔＢｕｆｆｅｒ：にこの実行期間で書き込むバッファの識別子のリストを持つ。Ｃｏｎｓｔｒａｉｎｔ：には、先行制約を示すＰｒｅｃｅｄｅｎｃｅ：や、絶対タイミング制約を示すＡｂｓｏｌｕｔｅＴｉｍｉｎｇ：や、相対タイミング制約を示すＲｅｌａｔｉｖｅＴｉｍｉｎｇ：や、排他制約を示すＥｘｃｌｕｓｉｖｅ：などを指定でき、それぞれ制約の相手になる実行期間の番号のリストを持つ。
【０１０８】
図５４の予約リクエストで予約したバッファ領域は、ＶＰＵ実行環境４０１が、バッファにデータを書き込むスレッドの実行開始時に割り当て、データを読み出すスレッドの実行終了時に解放する。割り当てられたバッファのアドレスは、たとえばスレッドの起動時にあらかじめ決まっているアドレスあるいは変数あるいはレジスタなどを用いて、スレッドに通知することができる。本実施形態のリアルタイム処理システムでは、図７に示したようなプログラムモジュール１００が与えられたときに、その中にある、図８に示すような構成記述１１７を読み込んで、それに基づいて、上記の手順でスレッドコンテクストの生成と図５４の予約リクエストの作成・発行を行って、そのプログラムモジュール１００の実行を行う機能を提供する。この機能により、図７のようなプログラムモジュール１００によって記述された専用ハードウェアの処理を、複数のプロセッサによるソフトウェア処理によって実現することが可能となる。実現したいハードウェア毎に図７のような構造を持つプログラムモジュールを作成して、それを本実施形態のリアルタイム処理システムに準拠した機能が組み込まれた機器で実行することにより、当該機器を所望のハードウェアとして動作させることが可能となる。別の例としては、アプリケーションプログラム中に図５４の予約リクエストを作成する処理を記述しておき、アプリケーションプログラムが自ら予約リクエストを作成してＶＰＵ実行環境４０１に渡して予約を行うように動作させることも可能である。
【０１０９】
図５４に示す予約リクエストが与えられると、ＶＰＵ実行環境４０１は、各実行期間を周期内のどのタイミングでどのＶＰＵ１２で実行するかを決める。これがスケジューリングである。本実施形態のリアルタイム処理システムが組み込まれる電子機器の種類によっては、実際には、このような予約リクエストが同時に複数与えられることもあるので、それらが矛盾ないように（与えられた制約が満たされないことがないように）処理のタイミングが決定される。例えば、図５５に示すように、ＶＰＵ１２が２つあるときに、図５４の予約リクエストだけが入っていたとすると、ＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、ＢＬＥＮＤの並行に実行できない処理をＶＰＵ０で順次実行し、ＤＥＭＵＸの実行後に並行して動作できるＡ−ＤＥＣとＴＥＸＴをＶＰＵ１で実行するようにスケジューリングする。
【０１１０】
（ソフトウェアパイプライン）
ここでもし、ひとつの周期内で一連の処理要素ＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、ＢＬＥＮＤを全て順次実行できるだけの時間がない場合には、複数の周期にまたがるようにソフトウェアパイプライン化を行う。例えば図５６に示すように、最初の周期１ではＤＥＭＵＸとＶ−ＤＥＣをＶＰＵ０で行い、次の周期２でＡ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤの処理をＶＰＵ１で行うようにする。この周期２では、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤの処理と並行して、次のフレームのＤＥＭＵＸとＶ−ＤＥＣがＶＰＵ０によって実行される。すなわち、図５７に示すように、ＶＰＵ０がＤＥＭＵＸとＶ−ＤＥＣを実行している間、ＶＰＵ１では前の周期のＤＥＭＵＸとＶ−ＤＥＣの出力を受けたＡ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤが動くという具合に、パイプライン処理を行う。パイプライン処理を採用することにより、各周期におけるリアルタイム処理の実行をより短い時間で完了することが可能となる。
【０１１１】
図５８のフローチャートには、ソフトウェアパイプラインを実現するためのスケジューリング処理の手順が示されている。
ＶＰＵ実行環境４０１は、まず、逐次処理が必要な一連のスレッド群（ＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、ＢＬＥＮＤ）の全てをひとつの周期内で実行できるか否かを判別する（ステップＳ２０１）。１周期の値は、プログラムモジュール１００の実行条件としてＶＰＵ実行環境４０１に対して予め設定されている。もちろん、構成記述１１７に周期の値を明示的に記述することもできる。ステップＳ２０１では、ＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、ＢＬＥＮＤそれぞれのコストに基づいてそれらＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、ＢＬＥＮＤの総実行期間が予測される。そして、その予測値と周期の値とが比較される。
【０１１２】
もし一連のスレッド群（ＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、ＢＬＥＮＤ）がひとつの周期内で実行できないと判別されたならば（ステップＳ２０１のＮＯ）、ＶＰＵ実行環境４０１は、プログラムモジュール１００を実行するための全てのスレッド（ＤＥＭＵＸ、Ｖ−ＤＥＣ、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）を、それらスレッド間の実行順序の関係に基づいて、逐次処理可能な連続する２つのグループ（以下、第１スレッドグループ、第２スレッドグループと称する）にグループ分けする（ステップＳ２０２）。第１スレッドグループは先行して実行される１以上のスレッドの集合であり、第２スレッドグループは第１スレッドグループに後続して実行される１以上のスレッドの集合である。本例では、スレッド間の先行制約の条件が満たされ、且つ第１スレッドグループおよび第２スレッドグループの各々の総実行期間が一つの周期に対応する時間間隔以下になるように、ＤＥＭＵＸ、Ｖ−ＤＥＣが第１スレッドグループに、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤが第２スレッドグループに分類される。
【０１１３】
ＶＰＵ実行環境４０１は、第１スレッドグループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）がＶＰＵ０によって１／６０秒の時間間隔で周期的に実行されるように、第１スレッドグループに属する各スレッドの実行期間をＶＰＵ０に周期的に割り当てる（ステップＳ２０３）。ステップＳ２０３では、ＤＥＭＵＸ、Ｖ−ＤＥＣの各々の周期実行がＶＰＵ０に対して予約される。次いで、ＶＰＵ実行環境４０１は、第２スレッドグループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）が第１スレッドグループよりも１周期分遅れたタイミングでＶＰＵ１によって１／６０秒の時間間隔で周期的に実行されるように、第２スレッドグループに属する各スレッドをＶＰＵ１に周期的に割り当てる（ステップＳ２０４）。ステップＳ２０３では、Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤの各々の周期実行がＶＰＵ１に対して予約される。
これにより、第１スレッドグループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）と第２スレッドグループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）とがＶＰＵ０，ＶＰＵ１の２つのプロセッサによってパイプライン形式で実行される。この結果、ある周期における第１スレッドグループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）の処理とその１周期遅れの第２スレッドグループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）の処理とが並行して実行され、１／６０秒の周期毎にフレームデータの処理結果を出力することが出来る。
【０１１４】
なお、上述の例では、第１スレッドグループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）を常にＶＰＵ０で実行し、第２スレッドグループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）を常にＶＰＵ１で実行したが、図５９に示すように、第１スレッドグループ（ＤＥＭＵＸ、Ｖ−ＤＥＣ）が割て当てられるプロセッサ、および第２スレッドグループ（Ａ−ＤＥＣ、ＴＥＸＴ、ＰＲＯＧ、ＢＬＥＮＤ）が割て当てられるプロセッサが周期毎に入れ換えられるようにスケジューリングを行ってもよい。すなわち、スケジューリング処理では、第２スレッドグループが第１スレッドグループよりも１周期分遅れた状態で周期毎に第１スレッドグループおよび第２スレッドグループが互いに異なるプロセッサによって並列に実行されるように、各周期における第１スレッドグループおよび第２スレッドグループそれぞれの実行タイミングと、各周期において第１スレッドグループおよび第２スレッドグループそれぞれが実行されるプロセッサが決定される。
【０１１５】
（パイプライン処理を利用した省電力制御）
上述したように、パイプライン処理を利用することにより、各周期におけるリアルタイム処理の実行がなるべく短い時間で完了するようにリアルタイム処理を複数のＶＰＵに効率よく割り当てることが可能となる。よって、パイプライン処理を用いることにより、リアルタイム処理を実行する複数のＶＰＵそれぞれの動作速度をより遅く設定することが可能となる。
図６０は、ＶＰＵ０とＶＰＵ１の２つのＶＰＵを用いて、図５３の予約グラフで示されるデジタル放送の受信を行うプログラムを２本同時に実行する例を示している。Ｄ１−１，Ｖ１−１，Ｐ１−１，Ａ１−１，Ｔ１−１，Ｂ１−１は１本目のプログラムにおける周期１のＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、Ａ−ＤＥＣ、ＴＥＸＴ、ＢＬＥＮＤの処理を示しており、またＤ２−１，Ｖ２−１，Ｐ２−１，Ａ２−１，Ｔ２−１，Ｂ２−１は２本目のプログラムにおける周期１のＤＥＭＵＸ、Ｖ−ＤＥＣ、ＰＲＯＧ、Ａ−ＤＥＣ、ＴＥＸＴ、ＢＬＥＮＤの処理を示している。
【０１１６】
ＶＰＵ０，ＶＰＵ１，ＶＰＵ２，ＶＰＵ３の４つのＶＰＵが設けられている場合には、本実施形態においては、図６１に示すように、ソフトウェアパイプラインを行って、４つのＶＰＵをすべて使用し、且つ１周期内に割り当てられた実行期間の終了が全ＶＰＵ間でできるだけ均等になるようにスケジューリングされる。図６１では、１本目のプログラムにおけるＤＥＭＵＸ、Ｖ−ＤＥＣの処理と１本目のプログラムにおける１周期前のＰＲＯＧ、Ａ−ＤＥＣ、ＴＥＸＴ、ＢＬＥＮＤの処理はＶＰＵ０とＶＰＵ１の２つのＶＰＵによって並行して実行される。また２本目のプログラムにおけるＤＥＭＵＸ、Ｖ−ＤＥＣの処理と２本目のプログラムにおける１周期前のＰＲＯＧ、Ａ−ＤＥＣ、ＴＥＸＴ、ＢＬＥＮＤの処理はＶＰＵ２とＶＰＵ３の２つのＶＰＵによって並行して実行される。このようにスケジューリングすると、毎周期の後半はどのＶＰＵも処理を行っていないので、その空き時間を利用して、図６２に示すように全ＶＰＵの動作速度を下げることができる。
【０１１７】
ＶＰＵ０，ＶＰＵ１，ＶＰＵ２，ＶＰＵ３の４つのＶＰＵそれぞれの動作速度の制御処理は、以下の手順で行われる。まず、スケジューリングによって決定された複数のスレッドグループそれぞれの各周期における実行開始タイミングと、１００％の動作速度で動作するＶＰＵによって実行された場合に対応する複数のスレッドグループそれぞれの実行に要するコストを示す情報とに基づいて、複数のスレッドグループの中から、各周期の開始タイミングから当該周期における実行期間が完了するまでの時間間隔が最も長いスレッドグループが選択される。次いで、１００％の動作速度で動作するＶＰＵによって実行された場合に対応する各周期の開始タイミングから当該周期における選択されたスレッドグループの実行期間が完了するまでの時間間隔Ｔが、１周期分の時間間隔に対して占める割合が算出される。そして、その算出された割合に基づいて、ソフトウェアパイプラインに使用されるＶＰＵそれぞれの動作速度が、１００％よりも遅い速度に設定される。
【０１１８】
（階層構造を持つ予約グラフ）
図５３に示した予約グラフは階層構造を持っていないが、図６３に示すように、階層構造を持つ予約グラフを扱うことも出来る。図６３の例では、実行期間ＡはＢに先行し、ＢはＣに先行する。Ｂの中はＤがＥとＦに先行している。それゆえ、階層を解くと、ＡはＤに先行し、ＥとＦはＣに先行することになる。
【０１１９】
（密結合スレッドグループを考慮した予約リクエスト）
例えば図５３に示した予約グラフにおいてＶ−ＤＥＣを実行するスレッドとＰＲＯＧを実行するスレッドが密結合スレッドグループに属する場合、その結合属性を示す予約リクエストが図６４のように生成される。図６４の例においては、ＴｉｇｈｔｌｙＣｏｕｐｌｅｄ  ：に相手先のスレッドに対応する実行期間のＩＤが記述されている。これにより、Ｖ−ＤＥＣを実行するスレッドとＰＲＯＧを実行するスレッドがそれぞれ別のＶＰＵによって同時に実行されるように、例えば図６５に示すようにスケジューリングされる。この場合、Ｖ−ＤＥＣを実行するスレッドとＰＲＯＧを実行するスレッドとの間の通信はローカルストレージを介して実行できるので、バッファをメモリ１４上に用意する必要はない。図６５の例では、ＤＥＭＵＸ、Ｖ−ＤＥＣ、ＢＬＥＮＤを実行するスレッドグループが完了するタイミングが最も遅いので、各周期の実行開始タイミングからＤＥＭＵＸ、Ｖ−ＤＥＣ、ＢＬＥＮＤを実行するスレッドグループの実行が完了するまでの時間間隔が、１周期分の時間間隔にまで延びるように、ＶＰＵ０，ＶＰＵ１，ＶＰＵ２それぞれの動作速度が同じ割合で低下される。ＶＰＵ０，ＶＰＵ１，ＶＰＵ２それぞれの動作速度を同じ割合で低下することにより、密結合関係にあるＶ−ＤＥＣとＰＲＯＧの実行期間は一致する。
【０１２０】
（構成記述に基づくスケジューリングアルゴリズム）
以下、プログラムモジュールに組み込まれた構成記述に基づいて各スレッドの実行期間を予約するための処理手順について説明する。
【０１２１】
図７のプログラムモジュール１００内の構成記述１１７は、図８の例のようになっている。この構成記述１１７が与えられると、ＶＰＵ実行環境４０１は次の手順を実行する。
１．構成記述１１７のモジュール欄に書かれている各プログラムをロードして、それぞれを実行するスレッドを生成する。このとき、本実施形態では、構成記述１１７のエントリそれぞれに対して一つのスレッドを生成する。構成記述１１７の中に、同じモジュール名を持つ複数のエントリが存在する場合には、同じモジュールを実行する複数のスレッドをそれぞれのエントリと対応するように生成することになる。なお、図８の例では、すべてのスレッドはひとつのプロセスに属するように生成されるものとしているが、それぞれのスレッドが別のプロセスに属するように実施することもできるし、あるグループのスレッドはあるプロセスに属し、また他のグループのスレッドは別のプロセスに属するといったように実施することもできる。
２．構成記述１１７の情報から、図５４で説明したような予約リクエストのデータ構造を作成する。
３．予約リクエストをＶＰＵ実行環境に渡して処理のスケジューリングを行い、実行を開始する。
【０１２２】
この２番目の予約リクエストを作成するステップは、次のように行う。
まず、構成記述１１７の出力欄に１対１に対応するように、ＢＵＦＦＥＲレコードを作成して予約リクエストに加える。例えば、図８の構造記述１１７の例では、ＤＥＭＵＸモジュールの２番目の出力は１ＭＢのバッファを使ってデータをＶ−ＤＥＣに渡しているので、それに対応するように、図５４のＩｄが２のＢＵＦＦＥＲレコードを作成している。Ｉｄが２のＢＵＦＦＥＲレコードには、そのバッファサイズがＳｉｚｅ欄に１ＭＢと記録され、そのバッファにデータを書き込むＤＥＭＵＸモジュールに対応するタスクであるＩｄが１のＴＡＳＫレコードへの参照がＳｒｃＴａｓｋ欄に記録され、そのバッファのデータを読み出すＶ−ＤＥＣモジュールに対応するタスクであるＩｄが３のＴＡＳＫレコードへの参照がＤｓｔＴａｓｋ欄に記録されている。
【０１２３】
次に、構成記述１１７のモジュール欄に１対１に対応するように、ＴＡＳＫレコードを作成して予約リクエストに加える。例えば、図８の構造記述１１７の例で、Ｖ−ＤＥＣモジュールに対応するＴＡＳＫレコードとして、図５４のＩｄが３のＴＡＳＫレコードを作成している。Ｉｄが３のＴＡＳＫレコードには、以下のような情報が記録されている。
【０１２４】
Ｃｌａｓｓ欄：  このＴＡＳＫレコードに指定されるスレッドをどのような属性で実行させるかを示すフラグ。ＶＰＵはＶＰＵ上で実行するスレッドであることを、ＨＲＴはハードリアルタイムクラスのスレッドであることを示す。これらの情報は、図８の例では構成記述１１７のスレッドパラメタに記述されている情報をもとに設定する。
【０１２５】
ＴｈｒｅａｄＣｏｎｔｅｘｔ欄：  このＴＡＳＫレコードで実行の予約を行いたいスレッドのスレッドコンテクストを指定する。具体的には、図８の構成記述１１７のモジュール欄に指定されたプログラムモジュールをロードして、それを実行するスレッドをＶＰＵ実行環境４０１によって生成し、そのスレッドのスレッドコンテクストの識別子（あるいはポインタなど）を、ＴｈｒｅａｄＣｏｎｔｅｘｔ欄に記録する。
Ｃｏｎｓｔｒａｉｎｔ欄：  このＴＡＳＫレコードに関する制約条件を記録する。先行制約の場合は、Ｐｒｅｃｅｄｅ：の後にそのＴＡＳＫが先行する他のＴＡＳＫのＩｄを必要な数指定する。Ｉｄが３のＴＡＳＫレコードの場合、Ｉｄが５のＰＲＯＧモジュールに対応するＴＡＳＫに先行することを示している。
ＩｎｐｕｔＢｕｆｆｅｒ欄：  このＴＡＳＫレコードで指定されるスレッドがデータを読み出すバッファのＢｕｆｆｅｒレコードのＩｄを必要な数指定する。
ＯｕｔｐｕｔＢｕｆｆｅｒ欄：  このＴＡＳＫレコードで指定されるスレッドがデータを書き込むバッファのＢｕｆｆｅｒレコードのＩｄを必要な数指定する。
このようにして、構造記述が与えられるとそれに対する予約リクエストが作成される。
【０１２６】
次に、その予約リクエストをＶＰＵ実行環境４０１内のスケジューラに渡すと、スケジューラは、指定された予約リクエストを実行するのに必要なスケジュールを作成する。このスケジューリング処理の結果作成されたスケジュールは、例えば図５５に示すような、各周期のどのタイミングで、どのＶＰＵを、どれだけの時間、どのスレッドに割り当てるかを示すものである。実際には、例えば図６６のような予約リストによって表現されるように実施することができる。
【０１２７】
図６６の予約リストは、各ＶＰＵに対応付けられた予約エントリから構成される。予約エントリには、ひとつのスレッドに対して、それを各周期内のどのタイミングでＶＰＵを割り当てて実行を始めるかを開始時間欄に、どれくらいの時間でＶＰＵを取り上げるかを実行期間欄に、そのスレッドの識別子を実行スレッド欄に記録している。それらの予約エントリは、実行するＶＰＵ別に、開始時間順にソートされて予約リストにつながれている。
【０１２８】
図５４または図６４に示すような予約リクエストから、図６６に示すような予約リストを作成する手順は、例えば図６７のフローチャートで示す手順で実施できる。
基本は、予約リクエスト中の各ＴＡＳＫレコードを、ＢＵＦＦＥＲを使った入出力関係を考慮して順序付けして、データの流れる順に、ＶＰＵの実行時間を割り付けて行けばよい。このとき、密結合スレッドグループに指定されているＴＡＳＫ群には、それぞれのＴＡＳＫのスレッドに同時にＶＰＵを割り付けるようにする必要がある。
【０１２９】
図６７にその手順を示す。予約リクエストが与えられると、その中のＴＡＳＫレコードに指定されているすべてのタスクの集合に対して、以下の手順でスケジューリング（いいかえると、スケジュールの割り付け、あるいは予約リストの作成）を行う。
ステップＳ３０１：  全ての入力タスクが割付け済みのタスクで、密結合指定のないタスクを選択する。すなわち、未割り付けのタスク（すなわち、まだ予約エントリを作って予約リストにつないでいないタスク）の中で、そのタスクの入力となるデータのソースになるタスクがすべて割り付け済み（予約エントリが予約リストに入っている）であるか、あるいはそのタスクはデータの入力を持たない場合であって、かつ、そのタスクが密結合指定されていないものが存在すれば、それを選択してステップＳ３０２へ、そうでなければステップＳ３０４へ行く。
ステップＳ３０２：  選択したタスクを予約できるＶＰＵが存在すれば（言い換えると、他のタスクとの間の制約を満たす開始時間と実行期間を予約できるＶＰＵが存在すれば）、ステップＳ３０３へ、そうでなければスケジューリング不可能なので失敗を通知する。
ステップＳ３０３：  選択したタスクの予約エントリを作成して、予約リストにつなぐ。
【０１３０】
ステップＳ４０４：  全ての入力タスクが割付け済みのタスクで、密結合関係にあるタスク群を選択する。すなわち、未割り付けのタスク（すなわち、まだ予約エントリを作って予約リストにつないでいないタスク）の中で、そのタスクの入力となるデータのソースになるタスクがすべて割り付け済み（予約エントリが予約リストに入っている）であるか、あるいはそのタスクはデータの入力を持たないものの集合であって、かつ、その集合に属するタスク間が密結合指定されているものが存在すれば、そのタスク集合（タスク群とも呼ぶ）を選択してステップＳ３０５５へ、そうでなければ既にすべてのタスクを割り付けているのでスケジューリング処理を終了する。
ステップＳ３０５：  選択したタスク集合に含まれるすべてのタスクを同時に（同じ開始時間で同じ実行期間を持つように）予約できる複数のＶＰＵが存在すればステップＳ３０６へ、そうでなければスケジューリング不可能なので失敗を通知する。
ステップＳ３０６：  選択したタスク集合のすべてのタスクの予約エントリを作成して、予約リストにつなぐ。
【０１３１】
ここでの説明はひとつの予約リクエストのスケジューリングの手順について述べたが、上述したように、実際は、ひとつのシステムにおいて複数の予約リクエストが同時に存在することが普通である。そのような場合には、複数の予約リクエストを順次上記の手順でスケジューリングするように実施することもできるし、より望ましくは、同時に複数の予約リクエストを上記の手順でスケジューリングするように実施する。
【０１３２】
以上、デジタルテレビ放送用受信機の動作を記述したプログラムモジュールを例に説明したが、他の様々なハードウェアの動作を記述したプログラムモジュールを用意することにより、デジタルテレビ放送用受信機以外の他の任意のハードウェアの動作をソフトウェアによって実現することが出来る。
【０１３３】
なお、図１の計算機システムに設けられたＭＰＵ１１と複数のＶＰＵ１２は、それらを１チップ上に混載した並列プロセッサとして実現することもできる。この場合も、ＭＰＵ１１によって実行されるＶＰＵ実行環境、あるいは特定の一つのＶＰＵなどによって実行されるＶＰＵ実行環境が、複数のＶＰＵ１２に対するスケジューリングとそれらＶＰＵそれぞれの動作速度を制御することが出来る。
【０１３４】
またソフトウェアパイプライン処理は、３つのＶＰＵによって実行することも出来る。この場合、リアルタイム処理を実行するための連鎖された複数の処理要素は逐次処理可能な第１乃至第３の３つの処理要素グループにグループ分けされ、第１乃至第３の３つの処理要素グループが３つのＶＰＵによってパイプライン形式で周期的に実行されるように第１乃至第３の３つの処理要素グループの各々が１以上のＶＰＵに周期的に割り当てられる。例えば、ＶＰＵ０，１，２の３つのＶＰＵを使用する場合には、第１処理要素グループがＶＰＵ０によって周期的に実行され、第１処理要素グループよりも１周期分遅れたタイミングで第２処理要素グループがＶＰＵ１によって周期的に実行され、さらに第２処理要素グループよりも１周期分遅れたタイミングで第３処理要素グループが周期的に実行されるようにスケジューリングされる。次いで、第１処理要素グループ、第２処理要素グループ、および第３処理要素グループの中から、各周期内における実行期間の完了が最も遅い処理要素グループが選択される。そして、各周期の開始タイミングから当該周期における選択された処理要素グループの実行期間が完了するまでの時間間隔が１周期分の時間間隔に対して占める割合に基づいて、ＶＰＵ０，１，２の動作速度が低下される。
【０１３５】
また、ある処理要素グループの処理を複数のＶＰＵによって並列に実行することもできる。例えば、同一処理要素グループ内に並列処理可能な複数の処理要素が含まれている時は、同一処理要素グループ内の複数の処理要素を複数のＶＰＵによって並列に実行してもよい。
【０１３６】
またＶＰＵ実行環境として動作するプログラムまたはそのＶＰＵ実行環境を含むオペレーティングシステムなどのプログラムをコンピュータ読み取り可能な記憶媒体に記憶することにより、その記憶媒体を通じて当該プログラムを、ローカルプロセッサをそれぞれ有する複数のプロセッサを含むコンピュータに導入して実行するだけで、本実施形態と同様の効果を得ることが出来る。
【０１３７】
また、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【０１３８】
【発明の効果】
以上説明したように、本発明によれば、リアルタイム性を損なうことなくプロセッサのパワーセーブを実現することが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るリアルタイム処理システムを構成する計算機システムの例を示すブロック図。
【図２】同実施形態のリアルタイム処理システムに設けられたＭＰＵおよびＶＰＵそれぞれの構成を示すブロック図。
【図３】同実施形態のリアルタイム処理システムで用いられる仮想アドレス変換機構の例を示す図。
【図４】同実施形態のリアルタイム処理システムにおける実アドレス空間にマッピングされるデータの例を示す図。
【図５】同実施形態のリアルタイム処理システムにおける実効アドレス空間、仮想アドレス空間、実アドレス空間を説明するための図。
【図６】デジタルテレビ放送の受信機の構成を示すブロック図。
【図７】同実施形態のリアルタイム処理システムによって実行されるプログラムモジュールの構成の例を示す図。
【図８】図７のプログラムモジュール内に含まれる構成記述の例を示す図。
【図９】図７のプログラムモジュールに対応するプログラム間のデータの流れを示す図。
【図１０】図７のプログラムモジュールが２つのＶＰＵによって並列に実行される様子を示す図。
【図１１】図７のプログラムモジュールが２つのＶＰＵによってパイプライン形式で実行される様子を示す図。
【図１２】リアルタイム処理を構成するスレッド群が周期的に実行されるようにスケジューリングした様子を示す図。
【図１３】図７のスケジューリング結果に基づいて、ＶＰＵの動作速度を低下させる例を示す図。
【図１４】同実施形態のリアルタイム処理システムによって実行される省電力制御処理の手順の例を示すフローチャート。
【図１５】リアルタイム処理を構成するスレッド群が２つのＶＰＵによって周期的に実行されるようにスケジューリングした様子を示す図。
【図１６】図１５のスケジューリング結果に基づいて、２つのＶＰＵの動作速度を低下させる例を示す図。
【図１７】同実施形態のリアルタイム処理システムによって実行される省電力制御処理の手順の他の例を示すフローチャート。
【図１８】同実施形態のリアルタイム処理システムにおけるオペレーティングシステムの実装形態の例を示す図。
【図１９】同実施形態のリアルタイム処理システムにおけるオペレーティングシステムの実装形態の他の例を示す図。
【図２０】同実施形態のリアルタイム処理システムにおける仮想計算機ＯＳとゲストＯＳとの関係を示す図。
【図２１】同実施形態のリアルタイム処理システムにおいて複数のゲストＯＳに時分割で資源が割り当てられる様子を示す図。
【図２２】同実施形態のリアルタイム処理システムにおいてある特定のゲストＯＳによって特定の資源が専有される様子を示す図。
【図２３】同実施形態のリアルタイム処理システムにおいてスケジューラとして用いられるＶＰＵ実行環境を示す図。
【図２４】同実施形態のリアルタイム処理システムで用いられる仮想計算機ＯＳにＶＰＵ実行環境を実装した例を示す図。
【図２５】同実施形態のリアルタイム処理システムで用いられる一つのゲストＯＳとしてＶＰＵ実行環境を実装する例を示す図。
【図２６】同実施形態のリアルタイム処理システムで用いられる複数のゲストＯＳそれぞれにＶＰＵ実行環境を実装する例を示す図。
【図２７】同実施形態のリアルタイム処理システムで用いられる一つのゲストＯＳにＶＰＵ実行環境を実装する例を示す図。
【図２８】同実施形態のリアルタイム処理システムで用いられるＭＰＵ側ＶＰＵ実行環境とＶＰＵ側ＶＰＵ実行環境を説明するための図。
【図２９】同実施形態のリアルタイム処理システムで用いられるＶＰＵ側ＶＰＵ実行環境によって実行される処理手順を示すフローチャート。
【図３０】同実施形態のリアルタイム処理システムで用いられるＭＰＵ側ＶＰＵ実行環境によって実行される処理手順を示すフローチャート。
【図３１】同実施形態のリアルタイム処理システムにおいて密結合スレッドグループに属するスレッド群がそれぞれ別のプロセッサによって同時に実行される様子を示す図。
【図３２】同実施形態のリアルタイム処理システムにおける密結合スレッド間の相互作用を説明するための図。
【図３３】同実施形態のリアルタイム処理システムにおいて各密結合スレッドの実効アドレス空間に相手のスレッドが実行されるＶＰＵのローカルストレージがマッピングされる様子を示す図。
【図３４】同実施形態のリアルタイム処理システムにおける疎結合スレッドグループに属するスレッド群に対するプロセッサの割り当てを説明するための図。
【図３５】同実施形態のリアルタイム処理システムにおける疎結合スレッド間の相互作用を説明するための図。
【図３６】同実施形態のリアルタイム処理システムにおけるプロセスとスレッドとの関係を説明するための図。
【図３７】同実施形態のリアルタイム処理システムにおけるスケジューリング処理の手順を示すフローチャート。
【図３８】同実施形態のリアルタイム処理システムにおけるスレッドの状態遷移を示す図。
【図３９】同実施形態のリアルタイム処理システムにおけるスレッドとその実行期間との関係を説明するための図。
【図４０】同実施形態のリアルタイム処理システムにおける密結合スレッド群がある実行期間において同時に実行される様子を示す図。
【図４１】同実施形態のリアルタイム処理システムにおける周期実行モデルを示す図。
【図４２】同実施形態のリアルタイム処理システムにおける非周期実行モデルを示す図。
【図４３】タスクグラフを説明するための図。
【図４４】同実施形態のリアルタイム処理システムで用いられる予約グラフの原理を説明するための図。
【図４５】同実施形態のリアルタイム処理システムで用いられる予約グラフの例を説明するための図。
【図４６】同実施形態のリアルタイム処理システムで用いられる階層型スケジューラを説明するための図。
【図４７】同実施形態のリアルタイム処理システムがハードリアルタイムクラスのスケジューリングのために使用するパラメータの例を説明する図。
【図４８】同実施形態のリアルタイム処理システムで用いられる絶対タイミング制約を説明する図。
【図４９】同実施形態のリアルタイム処理システムで用いられる相対タイミング制約を説明する図。
【図５０】同実施形態のリアルタイム処理システムで用いられる相互排他制約を説明する図。
【図５１】同実施形態のリアルタイム処理システムにおける同期機構を説明するための図。
【図５２】同実施形態のリアルタイム処理システムにおいて同期機構を使い分ける手順を示すフローチャート。
【図５３】同実施形態のリアルタイム処理システムにおいて用いられる予約グラフの例を示す図。
【図５４】同実施形態のリアルタイム処理システムにおいて生成される予約リクエストの例を示す図。
【図５５】同実施形態のリアルタイム処理システムが図５４の予約リクエストに基づいて実行するスケジューリングの例を示す図。
【図５６】同実施形態のリアルタイム処理システムによって実行されるソフトウェアパイプライン形式のスケジューリングを説明するための第１の図。
【図５７】同実施形態のリアルタイム処理システムによって実行されるソフトウェアパイプライン形式のスケジューリングを説明するための第２の図。
【図５８】同実施形態のリアルタイム処理システムによって実行されるソフトウェアパイプラインのためのスケジューリング処理の手順を示すフローチャート。
【図５９】同実施形態のリアルタイム処理システムによって実行されるソフトウェアパイプライン形式のスケジューリングの他の例を示す図。
【図６０】同実施形態のリアルタイム処理システムにおいて２つのプログラムが同時に２つのＶＰＵによって実行されるようにスケジューリングした様子を示す図。
【図６１】同実施形態のリアルタイム処理システムにおいて２つのプログラムが４つのＶＰＵによってパイプライン形式で実行されるようにスケジューリングした様子を示す図。
【図６２】図６１のスケジューリング結果に基づき、４つのＶＰＵの動作速度を低下した様子を示す図。
【図６３】同実施形態のリアルタイム処理システムにおいて用いられる階層構造を持つ予約グラフの例を示す図。
【図６４】同実施形態のリアルタイム処理システムによって生成される、密結合スレッドグループを考慮した予約リクエストの例を示す図。
【図６５】同実施形態のリアルタイム処理システムが図６４の予約リクエストに基づいて行うスケジューリングの例を示す図。
【図６６】同実施形態のリアルタイム処理システムにおいて用いられる予約リストの例を示す図。
【図６７】同実施形態のリアルタイム処理システムにおける実行期間予約処理の手順を示すフローチャート。
【符号の説明】
１１…ＭＰＵ（Ｍａｓｔｅｒ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、１２…ＶＰＵ（Ｓｌａｖｅ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、１４…メインメモリ、１７…省電力制御装置、２１…処理ユニット、２２…メモリ管理ユニット、３１…処理ユニット、３２…ローカルストレージ、３３…メモリコントローラ、５０…セグメントテーブル、６０…ページテーブル、１００…プログラムモジュール、１１１〜１１６…プログラム、１１７…構成記述、３３１…アドレス変換ユニット、４０１…ＶＰＵ実行環境。
【図１】
2005062956.tif 000003
【図２】
2005062956.tif 000004
【図３】
2005062956.tif 000005
【図４】
2005062956.tif 000006
【図５】
2005062956.tif 000007
【図６】
2005062956.tif 000008
【図７】
2005062956.tif 000009
【図８】
2005062956.tif 000010
【図９】
2005062956.tif 000011
【図１０】
2005062956.tif 000012
【図１１】
2005062956.tif 000013
【図１２】
2005062956.tif 000014
【図１３】
2005062956.tif 000015
【図１４】
2005062956.tif 000016
【図１５】
2005062956.tif 000017
【図１６】
2005062956.tif 000018
【図１７】
2005062956.tif 000019
【図１８】
2005062956.tif 000020
【図１９】
2005062956.tif 000021
【図２０】
2005062956.tif 000022
【図２１】
2005062956.tif 000023
【図２２】
2005062956.tif 000024
【図２３】
2005062956.tif 000025
【図２４】
2005062956.tif 000026
【図２５】
2005062956.tif 000027
【図２６】
2005062956.tif 000028
【図２７】
2005062956.tif 000029
【図２８】
2005062956.tif 000030
【図２９】
2005062956.tif 000031
【図３０】
2005062956.tif 000032
【図３１】
2005062956.tif 000033
【図３２】
2005062956.tif 000034
【図３３】
2005062956.tif 000035
【図３４】
2005062956.tif 000036
【図３５】
2005062956.tif 000037
【図３６】
2005062956.tif 000038
【図３７】
2005062956.tif 000039
【図３８】
2005062956.tif 000040
【図３９】
2005062956.tif 000041
【図４０】
2005062956.tif 000042
【図４１】
2005062956.tif 000043
【図４２】
2005062956.tif 000044
【図４３】
2005062956.tif 000045
【図４４】
2005062956.tif 000046
【図４５】
2005062956.tif 000047
【図４６】
2005062956.tif 000048
【図４７】
2005062956.tif 000049
【図４８】
2005062956.tif 000050
【図４９】
2005062956.tif 000051
【図５０】
2005062956.tif 000052
【図５１】
2005062956.tif 000053
【図５２】
2005062956.tif 000054
【図５３】
2005062956.tif 000055
【図５４】
2005062956.tif 000056
【図５５】
2005062956.tif 000057
【図５６】
2005062956.tif 000058
【図５７】
2005062956.tif 000059
【図５８】
2005062956.tif 000060
【図５９】
2005062956.tif 000061
【図６０】
2005062956.tif 000062
【図６１】
2005062956.tif 000063
【図６２】
2005062956.tif 000064
【図６３】
2005062956.tif 000065
【図６４】
2005062956.tif 000066
【図６５】
2005062956.tif 000067
【図６６】
2005062956.tif 000068
【図６７】
2005062956.tif 000069