(57)【要約】【課題】コンテキスト切替を効率的に実行可能なプロセッサを提供する。【解決手段】複数のプログラムを順次実行するプロセッサであって、それぞれが複数のレジスタを有する複数のレジスタ群と、前記複数のレジスタ群から１つずつ順次選択するレジスタ切替部と、前記複数のプログラムに対応する退避復帰情報に応じて、前記複数のレジスタ群の値の退避及び復帰を制御する切替制御部と、前記レジスタ切替部による選択がなされる毎に、選択されたレジスタ群に格納された値により特定されるプログラムを実行する処理実行部とを有する。【選択図】図１
2012008767.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムを順次実行するプロセッサであって、
それぞれが複数のレジスタを有する複数のレジスタ群と、
前記複数のレジスタ群から１つずつ順次選択するレジスタ切替部と、
前記複数のプログラムに対応する退避復帰情報に応じて、前記複数のレジスタ群の値の退避及び復帰を制御する切替制御部と、
前記レジスタ切替部による選択がなされる毎に、選択されたレジスタ群に格納された値により特定されるプログラムを実行する処理実行部とを備える
プロセッサ。
【請求項２】
請求項１に記載のプロセッサにおいて、
前記退避復帰情報は、メモリに格納され、
前記切替制御部は、退避を行わず、次に復帰させるレジスタ値群のプログラムカウンタ値を、前記退避復帰情報に基づいてソフトウェアにより設定する
プロセッサ。
【請求項３】
請求項２に記載のプロセッサにおいて、
前記処理実行部は、アイドル処理の中断を確認することなく、前記プロセッサ又は前記プロセッサの外部のプロセッサの消費電力を低減する制御を行う
プロセッサ。
【請求項４】
請求項１に記載のプロセッサにおいて、
前記退避復帰情報は、メモリに格納され、
前記切替制御部は、前記退避を行わない場合をソフトウェアにより設定する
プロセッサ。
【請求項５】
請求項４に記載のプロセッサにおいて、
前記処理実行部は、周期的にデータ処理を行う
プロセッサ。
【請求項６】
請求項５に記載のプロセッサにおいて、
前記データ処理の対象はビデオデータであり、
前記切替制御部は、Ｉフレームのビデオデータが処理される際には前記レジスタ群に格納された値を退避せず、Ｐフレームのビデオデータが処理される際には前記レジスタ群に格納された値の退避及び復帰を行う
プロセッサ。
【請求項７】
請求項５に記載のプロセッサにおいて、
前記データ処理の対象はバッファキューに格納されたメッセージデータであり、
前記切替制御部は、前記レジスタ群に格納された値を退避せず、前記レジスタ群の一部についてのみ復帰を行う
プロセッサ。
【請求項８】
請求項１に記載のプロセッサにおいて、
前記プログラムは、値が退避されるレジスタ群のプログラムカウンタ値を変更するか否かを示す命令を有し、
前記切替制御部は、前記命令が実行された場合に、次に値を復帰させるレジスタ群に格納されるプログラムカウンタ値を変更する
プロセッサ。
【請求項９】
プログラムを実行する再生装置であって、
請求項５に記載のプロセッサを備え、
前記データ処理の対象はビデオデータであり、
前記切替制御部は、Ｉフレームのビデオデータが処理される際には前記レジスタ群に格納された値を退避せず、Ｐフレームのビデオデータが処理される際には前記レジスタ群に格納された値の退避及び復帰を行う
再生装置。
【請求項１０】
プログラムを実行する処理装置であって、
請求項５に記載のプロセッサを備え、
前記データ処理の対象はバッファキューに格納されたメッセージデータであり、
メッセージデータのキュー制御を所定時間内で実行することで通信制御を分散する
処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサに関し、特に効率的にプログラムを実行する技術に関する。
【背景技術】
【０００２】
複数のタスクを１つのプロセッサで擬似的に並列に処理するためのオペレーティングシステム（以下では、ＯＳと称する）が知られている。このようなＯＳは、タスクのスケジュール機能及びコンテキスト（context）のディスパッチ機能を持つ。スケジュール機能は、複数のタスクの実行順序及びタスクの実行時間を規定するスケジュールを生成する機能である。ディスパッチ機能は、このスケジュールに基づいて、タスクのコンテキストを切り替えてプロセッサにタスクを実行させる機能である。コンテキストは、プログラムの実行位置やデータの格納位置などを示す制御情報であって、タスクに対応している。
【０００３】
このようなＯＳは、以下の処理をプロセッサに実行させる。即ち、プロセッサは、コンテキストをプロセッサ内部のレジスタ群に格納し、格納されたコンテキストに基づいてプログラムやデータを取得してタスクを実行し、タスクの実行に伴ってコンテキストを更新し、このコンテキストをメモリに書き込むという処理を繰り返す。ここで、便宜的に、外部のメモリに格納されているコンテキストをレジスタ群に書き込むことを復帰といい、レジスタ群に格納されているコンテキストをこの外部のメモリに書き込むことを退避ということにする。
【０００４】
プロセッサ及びコンテキストメモリの処理の例を説明する。プロセッサは、タスクを実行する処理実行部と、処理実行部における処理を制御する制御部と、実行するタスクのコンテキストを格納するレジスタ群とを有する。レジスタ群は、１つのタスクに対応するコンテキスト、即ち、レジスタ値群を格納するためのレジスタの集まりである。
【０００５】
処理実行部は、新たなコンテキストがレジスタ群に格納される毎に、このコンテキストに基づいてプログラムやデータを取得してタスクを実行する。制御部は、レジスタ群内にすでに格納されているコンテキストをコンテキストメモリに上書きすることにより退避し、次にどのコンテキストをレジスタ群への格納対象とすべきかを判断し、この判断により格納対象とされたコンテキストをコンテキストメモリから読み出してレジスタ群に書き込むことにより復帰する。
【０００６】
したがって、上述の退避、判断及び復帰中においては、処理実行部は、レジスタ群の内容であるコンテキストを更新するのでプログラムの実効を中断せざるを得ない。例えば、タスクＡ、タスクＢ、タスクＣ及びタスクＤの４つのタスクがあるものとする。各タスクが均等に処理されるように、タスクの実行順序は、タスクＡ、タスクＢ、タスクＣ及びタスクＤの順であるとし、タスクＤの次には再びタスクＡから実行されるものとする。これらのタスクのそれぞれが実行される際に、事前に上述の退避、判断及び復帰が行われる。つまり、各タスクを実行する上で、上述の退避、判断及び復帰がオーバーヘッドとなっている。
【０００７】
ここで、タスクＡからタスクＤまでの処理を１周期の処理と定義すると、ＯＳは、この１周期における、タスクの実行順序及びタスクの実行時間を示すスケジュールを生成する。制御部は、このスケジュールに基づいて、上述の判断、即ち、レジスタ群への格納対象とするコンテキストの決定をする。以上のような処理を実施することにより、１つのプロセッサで複数のタスクを擬似的に並列に処理することができる。
【０００８】
上述の退避、判断及び復帰をハードウェアで実行し、複数のタスクを擬似的に並列に処理するプロセッサが知られている（例えば、特許文献１を参照）。また、プロセッサのリソースの割り当てを周期的に切り替えることにより、プロセッサ内のレジスタやパイプライン回路の空き時間を有効利用して、１つのプロセッサをあたかも複数のプロセッサであるかのように動作させる、仮想マルチプロセッサが普及しつつある（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１０−１１３０１号公報
【特許文献２】特開２００７−２２６８２３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、このような仮想マルチプロセッサのハードウェアによるコンテキスト切替の単位は、仮想的な論理プロセッサ（ＬＰ）であり、ＯＳによるスケジューリング対象であるタスクやスレッドの粒度とは異なる。ＯＳ上のソフトウェアによる、プロセッサの切替を意識した処理には、オーバーヘッドが生じ、効率的にタスクの実行が行えないという問題がある。
【００１１】
例えば、あるタスクが前回の処理期間（リソースの割り当て期間）で割込みを受けずに処理を完了したかどうか確認する必要がある場合には、ハードウェアの切替や、外部からの割込みや、タスク処理要求で特定の処理が中断されたか否かの判定を、当該タスクが再開される毎にソフトウェアで確認するという処理が必要である。また、プロセッサが複数のレジスタ値群に対して退避／判断／復帰の処理を行う時間の長さが次のコンテキストのディスパッチ開始タイミングに影響して、１回の処理期間内ではあるタスクの処理を完了できず、次の処理期間で再度処理されることがある。
【００１２】
本発明は、コンテキスト切替を効率的に実行可能なプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の実施形態によるプロセッサは、複数のプログラムを順次実行するプロセッサであって、それぞれが複数のレジスタを有する複数のレジスタ群と、前記複数のレジスタ群から１つずつ順次選択するレジスタ切替部と、前記複数のプログラムに対応する退避復帰情報に応じて、前記複数のレジスタ群の値の退避及び復帰を制御する切替制御部と、前記レジスタ切替部による選択がなされる毎に、選択されたレジスタ群に格納された値により特定されるプログラムを実行する処理実行部とを有する。
【００１４】
これによると、退避復帰情報に応じて、レジスタ群の値の退避及び復帰を制御するので、コンテキスト切替におけるコンテキストメモリへのアクセス数とアクセス時間を削減することができ、メモリアクセス等によるプロセッサの消費電力を低減することができる。また、次に実行するプログラムに対応するレジスタ切替に伴う処理をより短い時間で完了できるので、実行対象の処理が選択されない無駄な期間を削減できる。このため、全体の処理に必要な時間を短縮できる可能性がある。
【発明の効果】
【００１５】
本発明の実施形態によれば、コンテキストの切替を効率よく行うことができる。したがって、複数のプログラムの実行を並列に効率よく行うことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態に係る仮想マルチプロセッサ及びコンテキストメモリの構成例を示すブロック図である。
【図２】図１のコンテキストメモリに格納される実行順序テーブル及びコンテキストを示す図である。
【図３】完了通知フラグ群及び設定フラグ群についての説明図である。
【図４】タスクとプレートとの間の関係を示す説明図である。
【図５】図１の仮想マルチプロセッサにおいて行われる処理の流れの例を示すフローチャートである。
【図６】フラグ判定処理の流れを示すフローチャートである。
【図７】図６の処理を時系列で説明する図である。
【図８】図１の仮想マルチプロセッサと外部プロセッサとの間の接続関係を示す図である。
【図９】図１のサイクルカウンタの構成例を示すブロック図である。
【図１０】タイムスロットについての説明図である。
【図１１】アイドル処理の一般的な処理の流れの例を示すフローチャートである。
【図１２】図１の仮想マルチプロセッサにおいて行われるアイドル処理の流れの例を示すフローチャートである。
【図１３】図１の仮想マルチプロセッサにおいて行われるビデオストリームの処理の例を時系列で説明する図である。
【図１４】図１の仮想マルチプロセッサにおいて行われる処理の流れの例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図面を参照しながら説明する。図面において同じ参照番号で示された構成要素は、同一の又は類似の構成要素である。
【００１８】
（１．構成）
図１は、本発明の実施形態に係る仮想マルチプロセッサ１００及びコンテキストメモリ２００の構成例を示すブロック図である。図１の仮想マルチプロセッサ１００は、処理実行部１１０と、処理制御部１１１と、レジスタ切替部１１２と、切替制御部１１３と、第１レジスタ群１１４と、第２レジスタ群１１５と、サイクルカウンタ１１６と、外部インタフェース（Ｉ／Ｆ）１１７と、ＤＭＡ（direct memory access）管理部１１８と、完了通知レジスタ１１９と、制御レジスタ１２０と、設定フラグレジスタ１２１と、クロックマスク部１２７とを有している。コンテキストメモリ２００は、コンテキスト格納領域２０１と、実行順序テーブル格納領域２０２とを有している。また、図１には、基準信号を生成する発振器６００と、この基準信号に基づいて仮想マルチプロセッサ１００に供給するクロックパルスを生成するＰＬＬ６０１とが示されている。
【００１９】
仮想マルチプロセッサ１００は、プレートを順次切り替えて実行するプロセッサである。ここで、プレートとは、タスク又はＯＳのスケジューリング単位である１以上のタスクをまとめたものであり、プロセッサ側からみた実行対象をいう。１つのプレートは、１つの実行位置、即ち、プログラム中の命令位置を有する。もしくは、１つのプレートは、プログラムの実行時間枠であるタイムスロットを複数有し、タイムスロットの実行順序を規定し、さらにタイムスロット毎に実行されるプログラムが割り当てられていて、仮想マルチプロセッサ１００が複数のプログラムを擬似的に並列に順次実行してもよい。プロセッサ側からみた実行対象となるプログラムのことを、便宜上、ロジカルプロセッサ（以下、ＬＰという）という。
【００２０】
コンテキストメモリ２００は、コンテキスト、即ち、プレートに対応するプログラムの実行位置を示すプログラムカウンタの値、並びに上述のプログラム及びデータの格納位置を示すアドレスなどの制御情報を格納している。ここで、上述のプレートに対応するプログラムを実行することを、プレートの実行ということとする。
【００２１】
図２は、図１のコンテキストメモリ２００に格納される実行順序テーブル３００及びコンテキストを示す図である。コンテキストメモリ２００は、例えばＳＲＡＭである。コンテキスト格納領域２０１には、複数のプレートの各コンテキストが格納される。実行順序テーブル格納領域２０２には、各プレートの実行順序を示す実行順序テーブル３００が格納される。
【００２２】
実行順序テーブル３００は、１つのプレートに含まれる管理用アプリケーションプログラム（以下、管理アプリケーションという）により生成された、プレートの実行スケジュールを定めたテーブル情報であり、コンテキスト格納領域２０１における複数のメモリアドレス（以下、コンテキストアドレスという）の値の配列であり、これらコンテキストアドレスの値により示されるそれぞれの場所には、各プレートを実行するのに必要なコンテキストが存在する。
【００２３】
実行順序テーブル格納領域２０２において各コンテキストアドレスの値が格納されている物理的位置を示すアドレスを、以下、テーブルアドレスということとする。上述のテーブルアドレスは、数値で示されるものであって、この数値の大小関係は、このテーブルアドレスにより特定される位置に格納されたコンテキストアドレスの上記配列における順序に対応する。
【００２４】
つまり、スケジューリング１周期においては、小さなテーブルアドレスから大きなテーブルアドレスの順で、テーブルアドレスの値により示される物理的位置に格納されたコンテキストアドレスの値により特定されるコンテキストアドレスに対応するプレートが実行されることとなる。実行順序テーブル３００に、プレートの実行順序が、ＬＰ１→ＬＰ０→ＬＰ２→ＬＰ１→ＬＰ３と示されている場合、このような順序で１サイクル分の各プレートの実行が終了し、このサイクルが複数回繰り返されることとなる。
【００２５】
図８は、図１の仮想マルチプロセッサ１００と外部プロセッサ３０との間の接続関係を示す図である。主メモリ１０と、図示されていないキャッシュメモリとが、バス８００を介して仮想マルチプロセッサ１００に接続されている。主メモリ１０は、例えばＤＲＡＭであって、プログラム及びデータなどを格納する。キャッシュメモリは、例えばＳＲＡＭであって、主メモリ１０と仮想マルチプロセッサ１００との間に接続され、プログラム及びデータなどを格納する。
【００２６】
仮想マルチプロセッサ１００は、複数のプレートを擬似的に並列に実行するが、これら複数のプレートのうちの１つが、外部プロセッサ３０に処理を依頼する場合もある。そのための外部プロセッサ３０が、上記と同様にバスを介して仮想マルチプロセッサ１００に接続されている。即ち、図８に示すように、外部プロセッサ３０と主メモリ１０はバス８００によって接続されており、仮想マルチプロセッサ１００と外部プロセッサ３０は、主メモリ１０を介して接続されている。
【００２７】
仮想マルチプロセッサ１００は、バス８００を介して、外部プロセッサ３０が実行する処理ための入力データを主メモリ１０にライトし、外部プロセッサ３０が実行した処理の結果として得られたデータを主メモリ１０からリードする。また、外部プロセッサ３０は、処理のための入力データを主メモリ１０からリードし、処理結果として得られたデータを主メモリ１０にライトする。
【００２８】
処理要求信号線８０１及び処理完了信号線８０２は、バス８００とは独立して設けられ、仮想マルチプロセッサ１００と外部プロセッサ３０との間を接続する。より具体的には、処理要求信号線８０１は、処理要求信号を仮想マルチプロセッサ１００から外部プロセッサ３０へ伝送する。処理完了信号線８０２は、処理完了信号を外部プロセッサ３０から仮想マルチプロセッサ１００へ伝送する。これらの信号により、仮想マルチプロセッサ１００から外部プロセッサ３０への処理の依頼と、外部プロセッサ３０から仮想マルチプロセッサ１００への処理完了の通知とがなされる。
【００２９】
第１レジスタ群１１４及び第２レジスタ群１１５は、いずれも、コンテキストの内容であるプログラムカウンタの値、並びにプログラム及びデータの格納位置を示すアドレスなどのレジスタ値を格納するための複数のレジスタの集まりである。各レジスタは、プレートが実行される際にそのレジスタに格納されたプログラムカウンタの値などが更新されたか否かを示す更新フラグの値を格納するための１ビットの記憶領域を有する。
【００３０】
例えば、レジスタに格納された値が更新された場合、更新フラグの値は１、更新がなされていない場合、更新フラグの値は０である。なお、デフォルトの状態では、第１レジスタ群１１４及び第２レジスタ群１１５の各レジスタの更新フラグの値は０となっている。レジスタ切替部１１２は、切替制御部１１３からの指示に従って、第１レジスタ群１１４及び第２レジスタ群１１５のうちから１つずつを、プログラム実行の際に使用するレジスタ群（以下、カレントレジスタ群と称する）として順次選択する。レジスタ切替部１１２は、後述の周期のそれぞれにおいてこのような選択を行う。
【００３１】
なお、仮想マルチプロセッサ１００が２つのレジスタ群１１４，１１５を有する場合について説明するが、仮想マルチプロセッサ１００がより多くのレジスタ群を有していてもよい。
【００３２】
ここで、便宜的にカレントレジスタ群として選択されていない方のレジスタ群をスタンバイレジスタ群といい、上述の選択対象を現在選択がなされているレジスタ群からもう一方のレジスタ群に切り替えることを、レジスタ切替ということとする。処理実行部１１０は、レジスタ切替が行われると（即ち、レジスタ切替部による選択がなされると）、選択されたカレントレジスタ群に格納されているコンテキストに基づいて、実行するプログラム及びこのプログラムの実行に必要なデータの所在を特定し、ＤＭＡ管理部１１８にこれらプログラム及びデータを取得するように指示する。
【００３３】
これらのプログラム及びデータの取得は、キャッシュメモリからの取得を前提としており、キャッシュメモリに目的とするデータが存在する場合（以下、このような場合を「キャッシュヒット」という。）、又は、例外的に後述する外部記憶装置からブログラム及びデータを取得した場合に、処理実行部１１０は、これらのプログラム及びデータを取得し、これらのプログラム及びデータを用いて、処理制御部１１１からの指示に従ってプレートを実行する。
【００３４】
処理実行部１１０は、例外的にＤＭＡ管理部１１８に図示されない外部記憶装置からプログラム及びデータを取得するように指示する場合もある。この外部記憶装置は、同じく図示されない他の入出力装置などによってアクセス（例えばリード、ライト）することも可能である。複数の装置からアクセスする場合と、１つの装置からアクセスする場合とではそのアクセスに要する時間が異なる（複数の装置からアクセスする場合のアクセス時間の方が長い）。
【００３５】
一方、目的とするデータがキャッシュメモリに存在しない場合、即ち、キャッシュミスが生じた場合、又は、外部記憶装置へのアクセスに時間がかかると判断された場合には、処理実行部１１０は、その旨を処理制御部１１１に通知し、処理制御部１１１からの指示に従って以降の処理を実施する。このプレートの実行に伴い、処理実行部１１０は、コンテキストに格納されている値でプログラムカウンタなどの更新すべき値を更新し、値を更新したレジスタに含まれる更新フラグの値を１にする。
【００３６】
また、処理実行部１１０は、プレートの実行中に後述の待ち要因が発生した場合には、プレートをスリープさせたことを示す通知を、処理制御部１１１を介して切替制御部１１３に出力し、さらに、発生した待ち要因の種別に対応する設定フラグレジスタ１２１内の後述の設定フラグの値を１に変更する。処理実行部１１０は、待ち要因が発生したとき、外部プロセッサ３０に処理を依頼する。
【００３７】
この待ち要因の解消となる事由が、外部プロセッサ３０から処理結果を受け取ることである場合には、処理実行部１１０は、外部プロセッサ３０に処理を依頼してプレートをスリープさせたことを示す通知を、処理制御部１１１を介して切替制御部１１３に出力する。このとき、切替制御部１１３は、外部Ｉ／Ｆ１１７に処理要求信号を出力する。
【００３８】
なお、図１は、第１レジスタ群１１４にプレートＢに対応するコンテキストが格納され、この第１レジスタ群１１４がカレントレジスタとして選択されている時点の状態を示している。仮想マルチプロセッサ１００内部でのデータの入出力と、コンテキストメモリ２００、主メモリ１０、キャッシュメモリ及び外部プロセッサにおけるデータの入出力は、ＤＭＡ転送により行われ、ＤＭＡ管理部１１８は、このＤＭＡ転送を制御する。
【００３９】
ＤＭＡ管理部１１８は、各機能ブロックからの要求に基づいてＤＭＡ転送を実施してその転送が完了したとき、その旨を示す信号（以下、「転送完了信号」という。）を切替制御部１１３に出力する。キャッシュメモリからプログラム及びデータを取得しようとして、キャッシュミスが生じた場合、ＤＭＡ管理部１１８は、キャッシュミスが生じたことを示す信号（以下、「キャッシュミス信号」という。）を切替制御部１１３に出力する。
【００４０】
さらに、ＤＭＡ管理部１１８は、図示されない外部記憶装置からプログラム及びデータを取得しようとして、外部記憶装置へのアクセスに時間がかかる（レイテンシが大きい）と判断されたとき、メモリレイテンシが大きいことを示す信号（以下、「メモリアクセス遅延信号」という）を切替制御部１１３に出力する。
【００４１】
外部Ｉ／Ｆ１１７は、外部プロセッサなどの外部機器に接続するインタフェースであり、例えば、外部プロセッサに依頼した処理が完了したことを示す、外部プロセッサ処理完了信号などの外部からの信号を切替制御部１１３に通知する。また、外部Ｉ／Ｆ１１７は、例えば、外部プロセッサ３０に処理を依頼することを示す処理要求信号を外部プロセッサ３０に通知する。つまり、前述したように、外部Ｉ／Ｆ１１７は、切替制御部１１３から外部Ｉ／Ｆ１１７に処理要求信号が通知されたとき、処理要求信号を外部プロセッサ３０に出力する。処理制御部１１１は、処理実行部１１０を制御して、プレート実行の開始から終了まで、継続的にプレートを実行させる。
【００４２】
サイクルカウンタ１１６は、クロックカウンタを有し、切替制御部１１３及び処理制御部１１１を介し、処理実行部１１０において、管理アプリケーションが含まれるプレートが実行されたことにより決定された値を、カウント値の初期値として設定する。
【００４３】
また、サイクルカウンタ１１６は、この初期値から１クロック毎に１づつディクリメントすることによりカウントダウンを行い、値が０となったとき、切替制御部１１３にその旨を示す信号（以下、「カウント値０信号」という）を出力し、再度初期値を設定してカウントダウンを開始する、という処理を繰り返す。
【００４４】
なお、カウント値の初期値は、各プレート共通の値である。制御レジスタ１２０は、現在の実行中のプレート及び次に実行すべきプレートを特定する情報を格納するためのレジスタである。より具体的には、制御レジスタ１２０は、現在の実行中のプレートに対応するコンテキストアドレスの値が格納されている物理的位置のテーブルアドレス（以下、「カレントアドレス」という）の値及び次に実行すべきプレートに対応するコンテキストアドレスが格納されている物理的位置のテーブルアドレス（以下、「ネクストアドレス」という）の値を格納している。制御レジスタ１２０は、さらに、実行順序テーブル格納領域２０２において、最も小さなテーブルアドレス（以下、「テーブル先頭アドレス」という）の値と、最も大きなテーブルアドレス（以下、「テーブル終端アドレス」という）の値とを格納している。
【００４５】
仮想マルチプロセッサ１００は、ハードウェアにより、プレート実行中断のトリガとなり得る所定の要因（以下、「待ち要因」という）が発生したとき、レジスタ切替、即ち、プレートの切替を実施し、レジスタ切替がなされたプレートを実行順序から除外するスリープを実行し、また、この待ち要因が解消したとき、このプレートの実行を試みるウエイクアップを実施する。このようなスリープ及びウエイクアップを実施する際、ウエイクアップのトリガとなる待ち要因を特定するために、プレート毎にどのような待ち要因でスリープが発生しているのかを知る必要がある。また、外部からの割込み要求などが到来した場合、外部からの要求に応えるべきか否かを事前に知る必要がある。
【００４６】
そのため、各プレートのコンテキストの中に、スリープの発生のトリガとなった待ち要因の種別、割込み要求を受け付けるか否かなどをそれぞれ示す設定フラグの値を格納する領域を有する。このように待ち要因には複数の種別があり、これら種別毎に設定フラグ、つまり、設定フラグ群がある。
【００４７】
この設定フラグ群は、コンテキスト格納領域２０１に格納されている各コンテキスト内に含まれている。設定フラグレジスタ１２１は、２つのプレートに含まれている設定フラグ群のそれぞれを格納するためのレジスタである。プレートの実行に際し、実行されたプレート自らがプレートの実行の中断を要求することにより、又は、外部からプレートの実行を中断させる要求などが到来したことなどにより、待ち要因が発生したとき、現在実行中のプレートに対応するコンテキストの複数の設定フラグのうち、発生した待ち要因の種別に対応する設定フラグの値が、処理実行部１１０により０から１に変更される。
【００４８】
ここで、上述のプレートの実行を中断させる要求には、いわゆる割込み要求を含んでおり、このような割込みが発生した場合に実行中のプレートを必ずしも中断する必要はなく、割込みを受け付けるか否かは、プレート毎に定められている。そのため、割込みを許容するプレートにおいては、プログラム設計者により割込み要求を受け付けるか否かを示す設定フラグの値に割込み可能を示す値である１が格納されている。
【００４９】
完了通知レジスタ１１９は、上述の待ち要因が現在解消されているか否か、割込み要求が発生したか否かなどをそれぞれ示すフラグ（以下、「完了通知フラグ」という）を格納するためのレジスタである。この完了通知フラグは、１つのコンテキスト中に含まれる設定フラグの数と同数存在し、各完了通知フラグは、待ち要因の種別毎に存在する設定フラグのそれぞれと１対１に対応している。つまり、完了通知フラグの集まりを構成する完了通知フラグ群のビット列長は、設定フラグの集まりを構成する設定フラグ群のビット列長と同一であり、先頭からのビット位置が同じであれば同じ待ち要因についての値を格納している。
【００５０】
切替制御部１１３について説明する。切替制御部１１３は、複数のプログラムに対応する退避復帰情報に応じて、レジスタ群１１４，１１５の値の退避及び復帰（退避復帰）を制御する。
【００５１】
切替制御部１１３は、サイクルカウンタ１１６からカウント値０信号を受け取ったとき、処理実行部１１０からプレートをスリープさせたことを示す通知を受け取ったとき、ＤＭＡ管理部１１８よりキャッシュミス信号を受け取ったとき、又は、メモリアクセス遅延信号を受け取ったとき、後述のフラグ判定処理を実施して現状のネクストアドレスの値をそのままにしておくのか、それとも、他のテーブルアドレスの値を新たなネクストアドレスの値とするのかを判断してネクストアドレスの値の見直しを図る。また、切替制御部１１３は、制御レジスタ１２０内に格納されているネクストアドレスの値を新たなカレントアドレスの値として格納し直すと共に、このネクストアドレスの値の次に大きなテーブルアドレスの値を新たなネクストアドレスの値として格納し、上述のレジスタ切替を実施するようにレジスタ切替部１１２に指示する。
【００５２】
さらに、切替制御部１１３は、このレジスタ切替が実施された結果、退避復帰の可否を示す退避復帰情報（退避復帰オプション）を参照し、退避復帰オプションの値が１となっているプレートに対しては、レジスタ値及び設定フラグのコンテキスト情報をコンテキスト格納領域２０１に転送する退避を行わない。退避復帰オプションの値が０の場合、切替制御部１１３は、レジスタ値をコンテキスト格納領域２０１の本レジスタ値に対応する記憶領域に上書きすることにより退避するようにＤＭＡ管理部１１８に指示し、後述のフラグ判定処理を行う。ここで、切替制御部１１３は、スタンバイレジスタ群となったレジスタ群の各レジスタの更新フラグを参照し、更新フラグの値が１となっているレジスタに格納されているレジスタ値を、コンテキスト格納領域２０１のこのレジスタ値に対応する記憶領域、即ち、レジスタ群への格納時に変更される前のレジスタ値が読み出された場所に上書きすることにより退避することで、メモリアクセスを削減してもよい。
【００５３】
また、切替制御部１１３は、前記退避に伴って、当該退避されるコンテキストの設定フラグを、設定フラグレジスタ１２１から読み出して、コンテキスト格納領域２０１内のこの設定フラグに対応する記憶領域、即ち、設定フラグレジスタ１２１への格納時に設定フラグが読み出された場所に上書きすることにより設定フラグの値を退避する。
【００５４】
上述の退避及び後述のフラグ判定処理が完了すると、切替制御部１１３は、制御レジスタ１２０内のネクストアドレスの値により特定されるプレートのコンテキストをスタンバイレジスタ群の各レジスタに格納、即ち、復帰する。このとき、切替制御部１１３は、各レジスタの更新フラグの値を０にクリアする。ここで、退避復帰オプション情報の値が１のプレートに対しては、タスクエントリからの実行に必要なレジスタにのみ復帰させる。例えば、最も少数の場合として、プログラムカウンタ値のみをレジスタに復帰させるようにしてもよい。
【００５５】
切替制御部１１３は、上述の退避、フラグ判定処理及び復帰を、カレントレジスタ群に格納されたコンテキストを用いた処理実行部１１０によるプレートの実行と並行して実施する。なお、上述の退避、フラグ判定処理及び復帰に要する時間は、上述のプレートの実行時間よりも短くなるように、管理アプリケーションなどにより、上述のレジスタ切替のタイムスパンが定められている。このタイムスパンは、退避復帰オプション情報の値が１のプレートに関する限りは、退避を必ず行う場合に比べて、短く設定できる。
【００５６】
以下、切替制御部１１３におけるフラグ判定処理の詳細について説明する。切替制御部１１３は、コンテキスト格納領域２０１内に格納され、制御レジスタ１２０のネクストアドレスの値により特定されるコンテキストに含まれる設定フラグ群のビット列のうち、値１が格納されているビット（以下、「有効ビット」という）の位置を把握する。このような有効ビットの位置を把握する処理を、有効ビット位置検索処理ということとする。このとき、設定フラグ群のビット列のうち、有効ビットが１つもない場合、切替制御部１１３は、ネクストアドレスの値をそのままにしてフラグ判定処理を終了する。
【００５７】
設定フラグ群のビット列のうち、有効ビットがある場合、切替制御部１１３は、完了通知レジスタ１１９内の完了通知フラグ群のビット列における上述の有効ビットの位置に対応する位置のみを参照し、この有効ビットの位置に対応する位置全てに値１が格納されている場合は、ネクストアドレスの値をそのままにしてフラグ判定処理を終了する。有効ビットの位置に対応する位置とは、設定フラグ群のビット列の先頭位置から有効ビットまでのビット数と同じビット数分、完了通知フラグ群のビット列の先頭位置から離れた位置（以下、「有効ビット対応位置」という）のことである。
【００５８】
一方、完了通知フラグ群の有効ビット対応位置のいずれかに値０が格納されている場合、切替制御部１１３は、実行順序テーブル格納領域２０２に示されている現時点におけるネクストアドレスの値の次に大きな値のテーブルアドレスの値を、暫定的に新たなネクストアドレスの値とする。そして、切替制御部１１３は、この暫定的なネクストアドレスの値により特定されるコンテキストに含まれている設定フラグについて、上述の有効ビット位置検索処理を実施した後、完了通知フラグ群の有効ビット対応位置の値に応じてネクストアドレスを見直す上述の処理を、フラグ判定処理が終了するまで繰り返し行う。現状のネクストアドレスの値がテーブル終端アドレスの値である場合、ネクストアドレスの値の次に大きな値のテーブルアドレスの値を、テーブル先頭アドレスの値とする。
【００５９】
（２．データ）
以下、仮想マルチプロセッサ１００において用いられるデータについて説明する。図２の実行順序テーブル３００は、コンテキストが格納されているコンテキスト格納領域２０１内のコンテキストアドレスの値を複数有しており、これらのコンテキストアドレスの値の物理的な格納位置、即ち、テーブルアドレスが各コンテキストアドレスにより特定されるプレートの実行順序を決定している。これに代えて、プログラムの実行時間枠であるタイムスロットが複数設定されており、実行順序テーブル３００が、タイムスロットの実行順序を規定し、さらにタイムスロット毎に実行されるプログラムを割り当てていて、プログラムが順次実行されるようにしてもよい。
【００６０】
つまり、より小さな値のテーブルアドレスが割り当てられている場所に格納されているコンテキストアドレスほど、そのコンテキストアドレスに対応するプレートの実行順序が先になっている。上述のフラグ判定処理により、プレートの実行順序が飛ばされることがあるものの、基本的にはコンテキストアドレスの値の物理的格納位置、即ち、配列により示される順序に従ってプレートが実行される。テーブル最終アドレスがカレントアドレスとなっている場合における、カレントアドレスにより特定されるプレートが実行された後は、テーブル先頭アドレスをカレントアドレスとすることにより特定されるプレートが実行される。
【００６１】
このように、コンテキストアドレスの物理的格納位置、即ち、テーブルアドレスは、１サイクルのプレートの実行順序を示す。図２において、テーブルアドレスは、２０００から２０５０までの値を有している。この場合、テーブル先頭アドレスの値は２０００であり、テーブル終端アドレスの値は２０５０である。より小さい値のテーブルアドレスに格納されているコンテキストアドレスのプレートが、先に実行される。
【００６２】
退避復帰オプション情報としては、タイムスロットに割付けようとしたプログラムが実行不可能な状態となっている場合におけるプログラム実行動作を決定する情報が格納されている。即ち、省電力化を示すコード“ＭＩＣＲＯ−ＳＬＥＥＰ”、高効率なプログラム実行を示すコード“ＳＷＩＴＣＨ”、又は、常に実行可能で割込みやタスク処理要求のない時に実行することができてコンテキストの退避復帰を不要とするコード“ＩＤＬＥ”が格納されている。
【００６３】
図３は、完了通知フラグ群及び設定フラグ群についての説明図である。完了通知フラグ群は、強制待ちフラグ、キューの空き通知フラグ、割込み通知フラグ、ソフトウェアの待ち指示フラグ、外部プロセッサ処理完了通知フラグ、転送通知フラグなどを有する。
【００６４】
強制待ちフラグは、固定値０が格納されているフラグである。キューの空き通知フラグは、プレートの実行中、容量的に空きが少ないキューに命令などをキュー登録しようとした場合など、キューを管理する外部機器からキューに空きがないことを示す通知が到来したか否かを示すフラグである。このフラグは、キューに空きがないことを示す通知がなされた場合には、値０になり、キューに空きがある状態では、値１になる。
【００６５】
割込み通知フラグは、外部機器から割込み要求が到来したか否かを示すフラグであり、割込み要求が到来していない場合、デフォルト値である値１になり、割込み要求が到来した場合、切替制御部１１３により値０にされる。ソフトウェアの待ち指示フラグは、アプリケーションソフトなどからプレートの実行を待たせる指示が到来したか否かを示すフラグであり、上述の指示が到来していない場合、デフォルト値である値１になり、上述の指示が到来した場合、切替制御部１１３により値０にされる。
【００６６】
外部プロセッサ処理完了通知フラグは、プレートの実行時に外部のプロセッサに処理を依頼した場合、依頼した処理が完了したことを示す通知が到来したか否かを示すフラグである。即ち、このフラグは、キャッシュミス信号あるいはメモリアクセス遅延信号を発生させる要因となったＤＭＡ転送や、プログラムによって要求されるＤＭＡ転送などの完了を示すフラグであり、この通知が到来していない場合、デフォルト値である値０になり、依頼した処理が完了したことを示す通知が到来した場合、切替制御部１１３により、値１にされる。
【００６７】
転送完了通知フラグは、ＤＭＡ転送が完了したことを示す通知が到来したか否かを示すフラグであり、この通知が到来していない場合、デフォルト値０になり、ＤＭＡ転送が完了したことを示す通知が到来した場合、切替制御部１１３により、値１にされる。なお、これら上述のフラグのそれぞれは、そのフラグをトリガとして新たなプレートが実行された場合には、そのフラグの値が、切替制御部１１３により上述のデフォルト値に設定される。
【００６８】
設定フラグ群に含まれる各フラグは、完了通知フラグ群の各フラグに対応し、対応するフラグを無視するか否かを示す。コンテキスト中に含まれる設定フラグ群の設定フラグの値が０である場合には、対応する完了通知フラグの値に影響されることなく、このコンテキストに基づいてプレートが実行される。
【００６９】
また、設定フラグのいずれかの値が１である場合には、値が１である設定フラグに対応する完了通知フラグの値により、この設定フラグを含むコンテキストに対応するプレートを実行対象とするか否かが切替制御部１１３により判断される。なお、設定フラグに値１が格納される例としては、以前この設定フラグを含むコンテキストに対応するプレートが実行されたとき、待ち要因が発生し、プレートの実行が中断された場合などが挙げられる。このようなプレートは、持ち要因が解消されるまで、スリープ状態となる。
【００７０】
より具体的には、ある設定フラグの値、及びこのフラグに対応する完了通知フラグの値が１である場合には、この設定フラグを含むコンテキストに対応するプレートが実行対象とされる。つまり、このプレートが切替制御部１１３によりウエイクアップされる。一方、ある設定フラグの値が１、このフラグに対応する完了通知フラグの値が０である場合には、この設定フラグを含むコンテキストに対応するプレートが非実行対象とされる（即ち、プレートの実行順序から除外される）。つまり、このプレートはスリープ状態となる。また、ある設定フラグの値が０の場合には、このフラグに対応する種別の待ち要因を切替制御部１１３は無視する。この待ち要因に対応する完了通知フラグも参照されない。
【００７１】
図４は、タスクとプレートとの間の関係を示す説明図である。ソフトウェア側には、複数のタスクが存在し、そのうち、リアルタイムで処理されるタスクは、ＯＳを介さずに、直接、管理アプリケーションの管理下に置かれている。なお、実行順序テーブル３００の内容を更新するための管理アプリケーションが、上述のリアルタイムで処理されるタスクに含まれている。このタスク、即ち、プレートが実行されるとき、例えば、新たな処理を実行すべき状態となっていれば、処理実行部１１０により、実行順序テーブル３００の内容が更新される。
【００７２】
これにより、１サイクル分プレートが実行される毎に、少なくとも１回はタスクのスケジューリングを見直す機会が発生する。より具体的には、管理アプリケーションに対応するプレートが実行される毎に、前記条件の発生の有無を判断し、この条件が発生した場合に、新たな内容の実行順序テーブルであるダミーテーブルを実行順序テーブル格納領域２０２内に生成し、プレート実行の基礎とする実行順序テーブルを、現状の実行順序テーブル３００からダミーテーブルへと切り替えることにより更新する。
【００７３】
一方、リアルタイムで処理する必要のないタスクは、まず、ＯＳの管理下に置かれ、さらに管理アプリケーションの管理下に置かれている。プレートは、ハードウェア側、即ち、処理実行部１１０における１実行単位であり、１つのタスクそのものである場合と、複数のタスクをまとめたものである場合とがあり、これらのプレートの割り振りは、プログラミングにより自由に決定可能である。また、実行するタスクや、制御するデバイスから割込みがない場合、割込みやタスク処理要求を待っているアイドル状態の際に実行されるアイドルタスクは、管理アプリケーションの管理下に置かれていても、ＯＳの管理下に置かれていてもよい。アイドルタスクでは、システムの消費電力を低減する制御を実装することが一般的である。
【００７４】
図１０は、タイムスロットについての説明図である。タイムスロットは、通常のスケジューリングに用いられるタイムドリブン型のタイムスロットである。映像や音声などを対象とするリアルタイムでの処理を前提とするプログラム実行用のタイムスロットＴＳ０，ＴＳ１，及びＴＳ２と、リアルタイムでの処理を前提としないプログラム実行用のタイムスロットＴＳ３がある。各タイムスロットには、図１０の（１）に示すように、基本サイクルの値が対応付けられており、この基本サイクルの値に相当する時間が、プログラム実行時間枠となる。図１０の（２）に示すように、切替のタイミングをタイムスロットの基本サイクルと厳密には一致させることはできず、通常数サイクル程度オーバーして切り替わる。実行時間枠からオーバーした時間をタイムスロットＴＳ３の実行時間枠から差し引き、実行時間に破綻をきたさないようにする。
【００７５】
（３．動作）
以下、１つのプロセッサにより擬似的に並列にプレートを実行する際に、効率的なプレートの実行を実現する処理について、仮想マルチプロセッサ１００における処理を例として説明する。
【００７６】
図５は、図１の仮想マルチプロセッサ１００において行われる処理の流れの例を示すフローチャートである。切替制御部１１３は、コンテキストメモリ２００内の実行順序テーブル３００を参照し、制御レジスタ１２０内に、テーブル先頭アドレス、カレントアドレス、ネクストアドレス及びテーブル終端アドレスを登録する（ステップＳ５００）。
【００７７】
第１レジスタ群１１４及び第２レジスタ群１１５内の全ての値をクリアする（ステップＳ５０１）。切替制御部１１３は、第１レジスタ群１１４及び第２レジスタ群１１５のうちカレントレジスタ群及びスタンバイレジスタ群を選択する（ステップＳ５０２）。
【００７８】
切替制御部１１３は、カレントアドレスにより特定されるコンテキストをカレントレジスタ群に格納させる（ステップＳ５０３）。つづいて、切替制御部１１３は、処理制御部１１１を介して処理実行部１１０にプレート実行の指示を与え、その結果、処理実行部１１０は、カレントレジスタ群に格納されているコンテキストに基づいて、プレートの実行を開始する（ステップＳ５０４）。
【００７９】
サイクルカウンタ１１６は、プレート実行開始と共に、プレートの実行により設定される初期値からカウントダウンを開始する（ステップＳ５０５）。切替制御部１１３は、外部Ｉ／Ｆ１１７及びＤＭＡ管理部１１８からの信号入力を受け付け、入力された信号に応じて完了通知レジスタ１１９の完了通知フラグの値を更新する（ステップＳ５０６）。
【００８０】
切替制御部１１３は、フラグ判定処理を実施して、制御レジスタ１２０内のネクストアドレスの値を確定する（ステップＳ５０７）。つづいて、切替制御部１１３は、退避復帰の可否を示す退避復帰オプション情報を参照し、コンテキストの退避復帰の要否を判定する（ステップＳ５０８）。切替制御部１１３は、退避復帰オプションの値が１となっているプレートに対しては、レジスタ値及び設定フラグのコンテキスト情報をコンテキスト格納領域２０１に転送する退避を行わない（ステップＳ５０８で退避復帰否の場合）。退避復帰オプションの値が０の場合（ステップＳ５０８で退避復帰要の場合）、切替制御部１１３は、スタンバイレジスタ群に含まれるレジスタのうち、その更新フラグの値が１となっているレジスタに格納されているコンテキスト部分のみをコンテキスト格納領域２０１に退避させ（ステップＳ５０９）、スタンバイレジスタ群に格納されている値を全てクリアする（ステップＳ５１０）。
【００８１】
さらに、切替制御部１１３は、制御レジスタ１２０内のネクストアドレスにより特定されるコンテキストをスタンバイレジスタ群に格納させる（ステップＳ５１１）。ここで、前記の退避復帰オプションの値が１のプレートに対しては、タスクエントリからの実行に必要な少数のレジスタのみ、つまり最小ではプログラムカウンタ値のみ、レジスタに復帰させてもよい。切替制御部１１３は、制御レジスタ１２０内のネクストアドレスをカレントアドレスとして登録し直し、ネクストアドレスの次のアドレスを新たなネクストアドレスとして登録し直す（ステップＳ５１２）。
【００８２】
切替制御部１１３は、サイクルカウンタ１１６よりカウント値０信号が入力されたかどうかを判断する。即ち、切替制御部１１３は、プレート実行の終了が指示されたか又は処理実行部１１０より実行中のプレートをスリープさせたことを示す通知があったかどうか、さらに、その通知が外部プロセッサ３０に処理を依頼してからプレートをスリープさせたことを示す通知であったかどうかを判断する（ステップＳ５１３）。切替制御部１１３は、これら信号の入力又は通知がなされた場合、処理実行部１１０にプレートの実行を終了させ、さらに、外部プロセッサ３０に処理を依頼してからプレートをスリープさせた場合は、切替制御部１１３から外部Ｉ／Ｆ１１７に処理要求信号を通知させ、外部Ｉ／Ｆ１１７から外部プロセッサ３０に処理要求信号を出力させる（ステップＳ５１４）。その後、切替制御部１１３は、レジスタ切替部１１２にレジスタ切替を実施させ（ステップＳ５１５）、プレートの実行を開始するステップＳ５０４に戻る。一方、これら信号の入力又は通知がなされない場合、現在のプレートの実行を継続し、終了又はスリープさせたことを示す通知があったかどうかを判断するステップＳ５１３に戻る。
【００８３】
図６は、フラグ判定処理の流れを示すフローチャートである。切替制御部１１３は、コンテキスト格納領域２０１内に存在し、制御レジスタ１２０のネクストアドレスにより特定されるコンテキストに含まれる設定フラグ群のビット列のうち、値１が格納されている有効ビットの位置を把握する有効ビット位置検索処理を行う（ステップＳ６００）。
【００８４】
切替制御部１１３は、有効ビットが１つも存在しないかどうかを判断し（ステップＳ６０１）、有効ビットが１つも存在しない場合、制御レジスタ１２０におけるネクストアドレスの値をそのままにしてフラグ判定処理を終了する。一方、有効ビットが１以上存在する場合、切替制御部１１３は、完了通知レジスタ１１９内の完了通知フラグ群のビット列における上述の有効ビットの位置のみを参照し（ステップＳ６０２）、この有効ビット全てに値１が格納されているか否かを判断する（ステップＳ６０３）。
【００８５】
完了通知フラグ群の有効ビット全てに値１が格納されている場合、切替制御部１１３は、ネクストアドレスの値をそのままにしてフラグ判定処理を終了する（ステップＳ６０４）。一方、完了通知フラグ群のビット列における有効ビットのいずれかに値０が格納されている場合、切替制御部１１３は、実行順序テーブル格納領域２０２内に示されている現時点におけるネクストアドレスの次のアドレスを暫定的に新たなネクストアドレスとし（ステップＳ６０４）、有効ビット位置検索処理を実施するステップＳ６００に戻る。
【００８６】
以上の処理を実施することにより、仮想マルチプロセッサ１００は、プレートの終了から次のプレートの開始までの間に、コンテキストの退避、判断及び復帰に要する時間を通常は介在させることなくプレートを実行する。
【００８７】
図７は、図６の処理を時系列で説明する図である。コンテキストの退避、判断及び復帰は、プレートの実行と並行して行われる。このため、プレートの終了から次のプレートの開始までの間に、コンテキストの退避、判断及び復帰に要する時間が介在することが通常の処理では回避されている。さらに、「アイドル処理Ｙ」で示されるタスクは、コンテキストを退避しない判断をするので、タスクＡ実行時にコンテキストＹの退避を省くことができ、タスクＢ実行時にコンテキストＹを復帰する際は、少数のレジスタのコンテキスト（最小の場合はプログラムカウンタ値のみ）を復帰することにより、退避、判断及び復帰に要する時間、つまりレジスタ切替のタイムスパンを短縮することができる。このため、タスクＡ実行やタスクＢ実行において、スケジューリングで各タスク実行に割り当てられた所定の時間中に各タスクが待ち条件等で時間を放棄した場合にも、次の処理開始までの無駄な時間を削減することができる。
【００８８】
以上のように、本実施形態によれば、１つの仮想マルチプロセッサ１００において、擬似的に並列に複数のプレートを実行しても、コンテキストの退避、判断及び復帰は、プレートの実行と並行して行われる。プレートの実行時間にコンテキストの退避、判断及び復帰に要する時間が介在することがないので、効率的にタスクを実行することができる。
【００８９】
なお、本実施の形態では、この実行順序テーブル３００は、プレートの実行順序を示し、この実行順序テーブル３００内におけるコンテキストアドレスの値の物理的格納位置、即ち、配列により基本的なプレートの実行順序が定められているが、この方法に限らず、例えば、実行順序テーブル３００内にコンテキストアドレスの値とテーブルアドレスの値との組を格納し、このテーブルアドレスの値が次の実行順序に対応するコンテキストアドレスの物理的な格納位置を示すことにより、つまり、このテーブルアドレスの値をポインタとして用いることにより、プレートの実行順序を定めるようにしてもよい。
【００９０】
また、待ち要因が発生した場合、実行中のプレートに割り当てられている実行時間を放棄して他のプレートに明け渡す例を示したが、これによらず、プレートの実行時間を他のプレートに明け渡さずに、上述の放棄がなされている時間分だけ、プロセッサの駆動周波数を下げ、電力消費を抑えるようにしてもよい。
【００９１】
その場合、プレートの実行に割り当てられた絶対時間が変らないようにするため、例えば、プロセッサの駆動周波数、即ち、クロック周波数を２分の１に低減した場合、サイクルカウンタ１１６は、１クロックあたり１ずつディクリメントしていたものを、１クロックあたり２ずつディクリメントすることとなる。本実施の形態では、退避、フラグ判定処理及び復帰に要する時間は、上述のプレートの実行時間よりも短くなるように、管理アプリケーションなどにより、上述のレジスタ切替のタイムスパンが定められているとしたが、これはこのタイムスパンの下限値を決定する制約条件である。
【００９２】
一方、このタイムスパンの上限値を決める制約条件について、本実施の形態では、特筆していないが、このタイムスパンは、プレートを実行することができる限界の時間であり、各プレートの実質的な実行時間が、この限界の時間に対して極めて短い時間で処理を実施していた場合、各プレートの実行に際して、処理が行われていない無駄な時間が生じていることとなり、このような無駄を避けるために、管理アプリケーションは、プレートの実質的な実行時間と上述のタイムスパンがほぼ同様の時間で、かつ、上述のタイムスパンが各プレートの実質的な実行時間以上となるようにタイムスパンの上限値を決定してもよい。
【００９３】
ところで、通信処理などのリアルタイムな処理では、プレートの実行により処理すべきデータの到来する周期がほぼ決まっている。つまり、１サイクルにおける各プレートの処理負荷が決まっており、上述のように決められた上限値及び下限値を有するタイムスパンを用いて、１サイクル分の各プレートが実行されたとしても、次のサイクルで処理すべきデータが到来していなかったのでは意味がない。
【００９４】
そこで、処理実行部１１０における処理能力が、１サイクルで処理すべきプレートの処理負荷に勝って処理時間に余裕が生じている場合、このような余裕が生じなくなる程度に、処理実行部１１０におけるプロセッサの駆動周波数、即ち、処理能力を低減し、各プレートの実質的な実行時間を大きくするようにしてもよい。その場合、各プレートの実行に際して、処理が行われていない無駄な時間が削減され、かつ、プロセッサの駆動周波数を下げることにより消費電力も低減される。
【００９５】
また、現在実行中のプレートの次に実行すべきプレート、即ち、スタンバイレジスタ群に格納されているコンテキストに対応するプレートの実行に必要なデータを事前にキャッシュに格納しておくとしてもよい。その場合、スタンバイレジスタ群に格納されているコンテキストを事前に参照し、次のプレートの実行に必要なデータを把握し、このデータをキャッシュに格納する機能部が必要となる。
【００９６】
また、メインメモリの容量を物理的な容量よりも仮想的に大きくするために、「プログラムによって指定される論理アドレス」と「プロセッサが物理的にアクセスする物理アドレス」との対応関係（マッピング）を管理する「仮想メモリ機能部」を本実施の形態に付与してもよい。
【００９７】
なお、キャッシュには、論理アドレスと物理アドレスとの対応関係（マッピング）を示す「アドレス変換テーブル」を格納する「アドレス変換テーブルキャッシュ」が含まれ、この「アドレス変換テーブルキャッシュ」に、次に実行すべきプレートに必要となるデータを示す論理アドレスを物理アドレスに変換できる「アドレス変換テーブル」を格納しておくようにしてもよい。その場合、現在実行中のプレートの次に実行すべきプレート、即ち、スタンバイレジスタ群に格納されているコンテキストを事前に参照し、次のプレートの実行に必要なデータを把握し、さらに、そのデータの論理アドレスを物理アドレスに変換できるアドレス変換テーブルの値を把握して、それをアドレス変換テーブルキャッシュに格納する機能部が必要となる。
【００９８】
また、サイクルカウンタ１１６におけるカウント値の初期値は、各プレート共通の値であるとしたが、プレート毎に異なっているとしてもよい。つまり、この初期値は、プレートの実行のために用意される時間を示し、プレートの処理の内容に応じてプレート固有の実行時間を割り当ててもよい。その場合、実行順序テーブル格納領域２０２内にコンテキストアドレスに対応付けられてカウント値の初期値が格納される。そして、切替制御部１１３は、制御レジスタ１２０内のカレントアドレス及びネクストアドレスそれぞれに上述のカウント値の初期値を対応付けて格納する。
【００９９】
また、これに伴い、サイクルカウンタ１１６は、オーバーヘッドを解消しつつ随時異なる初期値に基づいてカウントダウンを実施するために、２つ設けることが望ましい。
【０１００】
図９は、図１のサイクルカウンタ１１６の構成例を示すブロック図である。図９のサイクルカウンタ１１６は、入出力部３０１と、第１メモリ３０２と、第２メモリ３０３と、カウントダウン部３０４とを有する。入出力部３０１は、切替制御部１１３からカウント値の初期値を受信し、受信した上述の初期値を交互に第１メモリ３０１及び第２メモリ３０３に格納させる。第１メモリ３０２及び第２メモリ３０３は、ＦＩＦＯメモリである。
【０１０１】
カウントダウン部３０４は、第１メモリ３０２及び第２メモリ３０３から交互に初期値を読み出してその初期値に基づいてカウントダウンを実施する。入出力部３０１は、カウントダウン部３０４からの信号を受け取ったとき、切替制御部１１３にカウント値０信号を出力する。
【０１０２】
以上のような構成により、プレートの処理の内容に応じてプレート固有の実行時間を割り当てることができる。
【０１０３】
また、本実施形態では、退避復帰情報を実行順序テーブル格納領域２０２にテーブル情報として格納することにより、切替制御部１１３は、退避を行わず、次に復帰させるレジスタ値群のプログラムカウンタ値を、退避復帰情報に基づいてソフトウェアにより指定する。この場合、図５のフローチャートにおいて、ソフトウェアが指定した各プログラムに対応するプレート毎の退避復帰情報も、制御レジスタ１２０に登録される（ステップＳ５００）。
【０１０４】
これによりＯＳ又はユーザプログラムは、コンテキストの退避を行わず、常にタスクの処理関数の開始位置（つまりタスクエントリ）から実行処理する所定のプログラムを指定することができ、ソフトウェアからプロセッサを使用しやすくなる。
【０１０５】
ソフトウェアが指定するプログラムを、アイドルタスクとして実行する場合の例を説明する。この場合には、当該プロセッサもしくは外部プロセッサの消費電力を低減することができる。アイドルタスクは、割込みやタスク処理要求のない時に実行されるタスクであって、優先度が低く、他に必要な処理がある場合には実行されないコンテキストである。
【０１０６】
図１１は、アイドル処理の一般的な処理の流れの例を示すフローチャートである。例えば消費電力に関係する動作クロックや駆動デバイスを制御するタスクが、タスクＡ、タスクＢ、タスクＣとあるとする。これらのタスクは、仮想マルチプロセッサ上で動作する全てのタスクである必要はない。アイドル処理では、まずタスクＡに関する処理すべき作業が完了していて、タスクＡが関連するデバイスや機能ブロックの電源やクロックを低減してよいかチェックする（ステップＳ１００１）。もしタスクＡが処理継続の状態でなく、実行すべき処理が完了していれば、次のタスクのチェックに進む。タスクＡが関連するデバイスからの割込みやタスクから処理要求の待ち状態であれば、タスクＡは処理を継続するため、関連するデバイスや機能ブロックの消費電力を低減する制御を行わず、アイドル状態の処理を再開する。
【０１０７】
つづいて同様に、タスクＢ及びタスクＣをチェックする（ステップＳ１００２及びＳ１００３）。その後、各タスクで関連するデバイス、機能ブロック、自プロセッサの処理実行部のクロックや消費電力を低減する制御を行う（ステップＳ１００７）。ただし、消費電力を低減する制御においては、各タスクの状況に応じて処理内容や低減される消費電力の程度が異なっていてもよい。
【０１０８】
この消費電力を低減する制御の前には、タスクに割込みやタスク処理要求によりコンテキスト切替があったか否かを確認する処理（ステップＳ１００６）が必要である。また、この消費電力を低減する制御は、アトミックに制御される必要がある（ステップＳ１００４でアトミック制御開始、ステップＳ１００５及びステップＳ１００８でアトミック制御終了）。このアトミック制御は、タスクへの処理要求が直前に発生したのに、消費電力を低減する制御により、処理要求をハンドルできなくなることを防ぐためである。
【０１０９】
図１２は、図１の仮想マルチプロセッサ１００において行われるアイドル処理の流れの例を示すフローチャートである。仮想マルチプロセッサ１００では、アイドルタスクのアイドル処理Ｙは、実行中に割込み、タスク要求、又は時系列切替が発生して中断されても、必ずプログラムの先頭位置、即ちタスクエントリから処理が再開される。このため、アイドル処理Ｙが中断されたかどうかを確認する必要がない。図１２のステップＳ１００７では、処理実行部１１０は、アイドル処理Ｙの中断を確認することなく、各タスクで関連するデバイス、機能ブロック、処理実行部１１０又は外部プロセッサ３０のクロックや消費電力を低減する制御を行う。
【０１１０】
図１２では、アトミック制御の処理（ステップＳ１００４，Ｓ１００５，及びＳ１００８）が不要となり、図１１に比べて処理が簡易化される。これにより、プロセッサの消費電力を効率よく低減することができ、また、プログラム実装を簡易にすることができる。あるタスクが外部からの割込みやタスク処理要求で中断されていないという条件を判定する処理は、そのタスクの処理の先頭から連続して処理を実行するようディスパッチさせると効率がよいからある。
【０１１１】
このように、図１２の処理によると、ＯＳ又はユーザプログラムは、プロセッサ及びそれを含むシステムの消費電力を低減するアイドルタスクを効率的に実行することができる。ＯＳは、実行するタスクや、制御するデバイスから割込みがない場合、割込みやタスク処理要求を待っているアイドル状態として、アイドルタスクを実行する。アイドルタスクでは、システムの消費電力を低減する制御を実装することが一般的である。割込みやタスク処理要求のない時に実行されるアイドルタスクは、タスクの優先度が低く、他に必要な処理がある場合には実行されないので、タスクエントリから実行されるようにすると、プログラム実装を簡易にすることができる。
【０１１２】
仮想マルチプロセッサ１００は、マルチメディアストリームのフレームデータ、ネットワークのパケット、又はプロセス間通信のメッセージを周期的に分散処理するように、プログラムを実行してもよい。このような場合の例について説明する。
【０１１３】
図１３は、図１の仮想マルチプロセッサ１００において行われるビデオストリームの処理の例を時系列で説明する図である。処理実行部１１０は、ビデオストリームデータを、例えば約１／３０秒の周期で周期的にデジタル処理する。基準となるＩフレーム（intra coded picture）を処理する場合には、前後のフレームデータへの依存がなく圧縮率も低い。このため、切替制御部１１３は、このフレームを処理する周期では上述したような退避をせず、プログラムをタスクエントリから開始してコンテキスト切替の負荷を軽減する。切替制御部１１３は、このような退避を行わない場合をソフトウェアにより設定する。前のフレームとの差異を利用して圧縮された圧縮率の高いＰフレーム（predictive coded picture）を処理する場合には、前のフレームデータへの依存性があるので、切替制御部１１３は、退避復帰を実施する。
【０１１４】
ビデオのフレームデータを処理するタスクＡの後にタスクＢが行われ、タスクＢの処理量がタスクＡの処理量に連動すると仮定する。すると、比較的負荷の重いＩフレーム処理では、タスクＢで退避、判断、及び復帰の処理に要するタイムスパンは長いが、比較的負荷の軽いＰフレーム処理では、タスクＢで退避、判断、及び復帰の処理に要するタイムスパンを短くできる。このため、無駄な時間や処理を削減してプログラムを効率よく実行できる。
【０１１５】
このように、Ｉフレームのタスク処理を１周期内で完了させる場合には、切替制御部１１３は、レジスタ群１１４，１１５に格納された値を退避せず、これらのレジスタ群の一部についてのみ復帰を行い、常にタスクエントリからタスク処理を開始する。このため、プロセッサのメモリアクセスや実行処理をさらに削減し、プロセッサの消費電力を低減することができる。
【０１１６】
組込み機器システムでは、ネットワークのパケットや、プロセス間、プロセッサ間、及び、複数のシステムＬＳＩ間における通信メッセージを一度に送受信すると、プロセッサの処理負荷が急激に増加する。そこで、処理実行部１１０は、メッセージデータ（パケット及び通信メッセージ）を周期的に分散処理してもよい。このような場合、メッセージデータをＯＳや管理アプリケーションが管理するバッファキューに格納し、格納されたメッセージデータを前述のビデオのＰフレームのデータのように処理してもよい。例えば、切替制御部１１３は、バッファキューに格納されたメッセージデータを処理する際には、レジスタ群１１４，１１５に格納された値を退避せず、これらのレジスタ群の一部についてのみ復帰を行う。これにより、プロセッサの動作クロック等を低速に保って消費電力を低減することができる。
【０１１７】
図１の仮想マルチプロセッサ１００は、プログラムを実行する再生装置や処理装置に含まれていてもよい。
【０１１８】
また、プログラムが、値が退避されるレジスタ群のプログラムカウンタ値を変更するか否かを示す命令範囲又は区切り命令を有するようにし、周期内で割り当てられた実行時間枠であるタイムスロット内で命令範囲又は区切り命令が実行された場合に、次に値を復帰させるレジスタ群に格納されるプログラムカウンタ値を、例えば次の命令範囲の開始位置や、区切り命令後のプログラムカウンタ値に変更するようにしてもよい。このような場合の例について説明する。
【０１１９】
図１４は、図１の仮想マルチプロセッサ１００において行われる処理の流れの例を示すフローチャートである。図１４のフローチャートは、コンテキストの退避復帰情報の判定をするステップＳ５０８に代えてステップＳ１５０８及びＳ１５０９を有する点が、図５のフローチャートとは異なっている。その他の点は、図５のフローチャートと同様である。
【０１２０】
ステップＳ１５０８では、切替制御部１１３は、区切り命令を実行したかどうかを判定する。実行した場合には、切替制御部１１３は、レジスタのプログラムカウンタ（ＰＣ）値を更新して退避させる（ステップＳ１５０９）。区切り命令が未実行である場合には、コンテキストの退避は不要であり、ステップＳ５１０に進む。この場合には、次の実行時には前回と同じプログラム位置から実行される。
【０１２１】
これにより、退避復帰するプログラムカウンタ値がプロセッサにより自動的に更新され、プログラム内の任意の箇所を示すようにプログラムカウンタ値を設定することができる。したがって、実行されるプログラムを効率よく実装できる。
【産業上の利用可能性】
【０１２２】
以上説明したように、本発明の実施形態によれば、コンテキストの切替を効率よく行うことができるので、本発明は、特に、省電力制御やリアルタイム性が重要視される、デジタルテレビや携帯電話といった組込み機器向けのプロセッサ等について有用である。
【符号の説明】
【０１２３】
１００  仮想マルチプロセッサ
１１０  処理実行部
１１２  レジスタ切替部
１１３  切替制御部
１１４  第１レジスタ群
１１５  第２レジスタ群
２００  コンテキストメモリ
【図１】
2012008767.tif 000003
【図２】
2012008767.tif 000004
【図３】
2012008767.tif 000005
【図４】
2012008767.tif 000006
【図５】
2012008767.tif 000007
【図６】
2012008767.tif 000008
【図７】
2012008767.tif 000009
【図８】
2012008767.tif 000010
【図９】
2012008767.tif 000011
【図１０】
2012008767.tif 000012
【図１１】
2012008767.tif 000013
【図１２】
2012008767.tif 000014
【図１３】
2012008767.tif 000015
【図１４】
2012008767.tif 000016