(57)【要約】【課題】  擬似並行的に複数のプログラムを効率的に実行可能なプロセッサを提供する。【解決手段】  複数のレジスタ群と、複数のレジスタ群のうちいずれか１つを、プログラム実行の基礎とする実行対象レジスタ群として選択し、選択先を所定時間毎に切り替えるレジスタ切替部４１２と、切り替え毎に、実行対象レジスタ群にあるレジスタ値群によりプログラムを特定し、特定したプログラムを実行する処理実行部４１０と、プログラムの実行を中断する中断事由が発生していることを検出し、中断事由が解消したことを検出し、プログラムの実行をするハードウエアの消費電力を低減する処理制御部４１１とを備え、処理実行部４１０は、プログラムについての中断事由の発生が検出された場合、中断事由が解消するまでプログラムの実行のために割り当てられるべき実行期間を放棄し、処理制御部４１１が放棄している間、電力低減を実施するプロセッサ。  【選択図】  図１５
2006099782.tif 000002
【特許請求の範囲】
【請求項１】
メモリに格納されている複数のレジスタ値群を用いて、これらレジスタ値群それぞれに対応するプログラムを逐次実行するプロセッサであって、複数のレジスタ群と、前記複数のレジスタ群のうちいずれか１つを、プログラム実行の基礎とする実行対象レジスタ群として選択し、当該選択先を所定時間毎に切り替える選択先切り替え手段と、前記切り替えがなされる毎に、前記複数のレジスタ群のうち前記選択がなされていない１のレジスタ群に前記レジスタ値群を復帰する復帰手段と、前記切り替えがなされる毎に、前記復帰に先行して、当該復帰の対象となったレジスタ群にある各レジスタ値を、これらレジスタ値に対応する前記メモリ中のレジスタ値群に上書きすることにより退避する退避手段と、前記切り替えがなされる毎に、前記実行対象レジスタ群にあるプログラムカウンタ値を含むレジスタ値群によりプログラムを特定し、前記特定したプログラムを実行するプログラム実行手段と、
プログラムの実行を中断する中断事由が発生していることを検出する中断事由発生検出手段と、前記中断事由が解消したことを検出する中断事由解消検出手段と、
プログラムの実行をするハードウエア部分の消費電力を低減する消費電力低減手段と
を備え、
前記所定時間は、複数のカウント値がそれぞれのプログラムに対応づけられて格納されたテーブル情報にもとづいて、前記カウント値により特定された時間であり、
前記プログラム実行手段は、プログラムの実行に際し、当該プログラムについての中断事由の発生が検出された場合、当該中断事由が解消するまで、当該プログラムの実行のために割り当てられるべき実行期間を放棄し、前記消費電力低減手段は、前記放棄が実施されている間、前記低減を実施することを特徴とするプロセッサ。
【請求項２】
前記プログラム実行手段は、プログラム実行用のＣＰＵを有し、前記消費電力低減手段は、前記放棄が実施されている間、前記ＣＰＵに供給されているクロック信号を遮断することにより、前記低減を実施することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記プログラム実行手段は、プログラム実行用のＣＰＵを有し、前記消費電力低減手段は、前記放棄が実施されている間、前記ＣＰＵに印加されている電圧を低下又は０にすることにより、前記低減を実施することを特徴とする請求項１記載のプロセッサ。
【請求項４】
さらに、非定常的に実行すべきプログラムの実行要求を受け付ける実行要求受付手段を備え、前記消費電力低減手段は、前記要求が受け付けられたとき、前記低減を取り止めることを特徴とする請求項１記載のプロセッサ。
【請求項５】
前記実行要求は、割り込み処理要求であることを特徴とする請求項４記載のプロセッサ。
【請求項６】
前記実行要求は、前記前記選択先切り替え手段により例外的な前記切り替えを伴って、緊急的にプログラムを実行するためのイベント処理要求であることを特徴とする請求項４記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、効率的にプログラムを実行する技術に関する。
【背景技術】
【０００２】
従来、複数のタスクを１つのプロセッサで擬似並行的に処理するためのＯＳ（Operating System）がある。このＯＳは、以下の処理をプロセッサに実行させる。即ち、プロセッサは、タスク毎に対応するプログラムの実行位置やデータの格納位置などを示す制御情報（以下、「コンテキスト」という。）をプロセッサ内部のレジスタ群に格納し、格納されたコンテキストにもとづいてプログラムやデータを取得してタスクを実行し、タスクの実行に伴ってコンテキストを更新し、このコンテキストをメモリに書き込むという処理を繰り返す。
【０００３】
ここで、便宜的に、外部のメモリに格納されているコンテキストをレジスタ群に書き込むことを復帰といい、レジスタ群に格納されているコンテキストをこのメモリに書き込むことを退避ということとする。図３２は、このようなＯＳの支配のもと、タスクを実行する従来のプロセッサ１００１の機能ブロック図であり、上述のコンテキストを格納しているコンテキストメモリ１０１０も合わせて示す。
【０００４】
プロセッサ１００１は、タスクを実行する処理実行部１００２と、処理実行部１００２における処理に関する制御を実施する制御部１００３と、実行するタスクのコンテキストを格納するレジスタ群１００４とを有する。レジスタ群１００４は、１つのタスクに対応するコンテキスト、即ち、レジスタ値群を格納するためのレジスタの集まりである。
処理実行部１００２は、新たなコンテキストがレジスタ群１００４に格納される毎に、このコンテキストにもとづいてプログラムやデータを取得してタスクを実行する。制御部１００３は、レジスタ群１００４内に既に格納されているコンテキストをコンテキストメモリ１０１０に上書きすることにより退避し、次にどのコンテキストをレジスタ群１００４への格納対象とすべきかを判断し、この判断により格納対象とされたコンテキストをコンテキストメモリ１０１０から読み出してレジスタ群１００４に書き込むことにより復帰する。
【０００５】
したがって、処理実行部１００２は、上述の退避、判断及び復帰中においては、レジスタ群１００４の内容であるコンテキストを更新している最中であるので、プログラムの実行を中断せざるを得ない。図３３は、プロセッサ１００１におけるタスク実行の流れ及びレジスタ群１００４とコンテキストメモリ１０１０との間におけるコンテキストの入出力の状況を示す図である。
【０００６】
この図の左から右へと時間が経過するものとする。ここでは、例えば、タスクＡ、タスクＢ、タスクＣ及びタスクＤの４つのタスクがあるものとし、タスクの実行順序は、各タスクが均等に処理されるようにタスクＡ、タスクＢ、タスクＣ及びタスクＤの順となっているものとし、タスクＤの次は、また、タスクＡから実行されるものとする。
従来、各タスクの実行に際し、事前に上述の退避、判断及び復帰に実施される。つまり、各タスクを実行する上で、上述の退避、判断及び復帰がオーバーヘッドとなっている。ここで、タスクＡからタスクＤまでの処理を１サイクルの処理と定義づけると、上述のＯＳは、この１サイクルにおける、各タスクの実行順序及びタスクの実行時間、つまり、タスクのスケジュールを規定している。
【０００７】
制御部１００３は、このスケジュールにもとづいて、上述の判断、即ち、レジスタ群１００４への格納対象とするコンテキストを決定する。以上のような処理を実施することにより、１つのプロセッサで複数のタスクを擬似並行的に処理することができる。また、上述の退避、判断及び復帰をハードウエアで実行し、複数のタスクを擬似並行的に処理するプロセッサもある。（例えば、特許文献１）
【特許文献１】特開平１０−１１３０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、このように１つのプロセッサで複数のタスクを擬似並行的に処理する場合、１つのタスクのみを継続的に実行する場合に比べ、タスクの実行までに上述の退避、判断及び復帰のオーバーヘッドが生じ、タスクの実行開始から次のタスクの実行開始までの時間がかかり、効率的にタスクの実行が行えないという問題がある。
特に、携帯電話などの通信機器及びTV受像機などの放送機器などにおいては、リアルタイムに近い状態でのデータ処理を実行する必要があるが、このような機器において、複数のタスクを擬似並行的に処理する場合、上述のオーバーヘッドがある従来のタスクの実行方法では、上述のようなリアルタイム近い状態でのデータ処理の実施は困難となる。
【０００９】
そこで本発明は、上記問題点に鑑みてなされたものであり、１つのプロセッサで擬似並行的に複数のタスク、即ち、プログラムを実行する場合に、効率的にタスクを実行可能なプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の目的を達成するために、本発明に係るプロセッサは、メモリに格納されている複数のレジスタ値群を用いて、これらレジスタ値群それぞれに対応するプログラムを逐次実行するプロセッサであって、複数のレジスタ群と、前記複数のレジスタ群のうちいずれか１つを、プログラム実行の基礎とする実行対象レジスタ群として選択し、当該選択先を所定時間毎に切り替える選択先切り替え手段と、前記切り替えがなされる毎に、前記複数のレジスタ群のうち前記選択がなされていない１のレジスタ群に前記レジスタ値群を復帰する復帰手段と、前記切り替えがなされる毎に、前記復帰に先行して、当該復帰の対象となったレジスタ群にある各レジスタ値を、これらレジスタ値に対応する前記メモリ中のレジスタ値群に上書きすることにより退避する退避手段と、前記切り替えがなされる毎に、前記実行対象レジスタ群にあるプログラムカウンタ値を含むレジスタ値群によりプログラムを特定し、前記特定したプログラムを実行するプログラム実行手段と、プログラムの実行を中断する中断事由が発生していることを検出する中断事由発生検出手段と、前記中断事由が解消したことを検出する中断事由解消検出手段と、プログラムの実行をするハードウエア部分の消費電力を低減する消費電力低減手段とを備え、前記所定時間は、複数のカウント値がそれぞれのプログラムに対応づけられて格納されたテーブル情報にもとづいて、前記カウント値により特定された時間であり、前記プログラム実行手段は、プログラムの実行に際し、当該プログラムについての中断事由の発生が検出された場合、当該中断事由が解消するまで、当該プログラムの実行のために割り当てられるべき実行期間を放棄し、前記消費電力低減手段は、前記放棄が実施されている間、前記低減を実施することを特徴とするプロセッサ。
【発明の効果】
【００１１】
上記構成により、前記所定時間が複数のカウント値にもとづいて特定され、前記所定時間を非固定的な時間に設定することができるため、前記切り替えの間隔、つまりプログラム実行時間を非固定的に設定することができる。また、プログラムの実行に影響を及ぼすことなく、事前にレジスタ値群が実行対象レジスタ群以外のレジスタ群に復帰されるので、当該レジスタ値にもとづいてプログラムを実行しようとする際、前記復帰及び退避などのオーバーヘッドが解消されているため、速やかにプログラムが実行され得る環境となっており、プログラムがより高速に実行される。
【００１２】
また、上述のオーバーヘッドの解消により、頻繁に前記切り替えがなされても、プログラムの実行時間には影響がなく、擬似的なリアルタイム処理の並列実行に効果的である。
さらに、実行中のプログラムにおける実行予定時間のうち、前記放棄がなされた時間において、消費電力低減手段により前記低減が実施され、省電力化が図られる。さらに、プログラムの実行中断により残された時間において、何もしないことにより、プログラムの実行周期をできる限り均一に保つ（周期性を保つ）ことができる。
【００１３】
また、前記プログラム実行手段は、プログラム実行用のＣＰＵを有し、前記消費電力低減手段は、前記放棄が実施されている間、前記ＣＰＵに供給されているクロック信号を遮断することにより、前記低減を実施するとしてもよい。
これにより、容易に前記省電力化が図られる。
また、前記プログラム実行手段は、プログラム実行用のＣＰＵを有し、前記消費電力低減手段は、前記放棄が実施されている間、前記ＣＰＵに印加されている電圧を低下又は０にすることにより、前記低減を実施するとしてもよい。
【００１４】
これにより、容易に前記省電力化が図られる。
さらに、非定常的に実行すべきプログラムの実行要求を受け付ける実行要求受付手段を備え、前記消費電力低減手段は、前記要求が受け付けられたとき、前記低減を取り止めてもよい。
これにより、緊急的に実行されるプログラム以外の実行要求は、受け付けられないため、プログラム実行手段、即ち、ＣＰＵによるプログラム実行の要否判断の処理を省くことができ、効率的なプログラム実行がなされる。
【００１５】
また、前記実行要求は、割り込み処理要求であるとしてもよい。
これにより、割り込み処理要求が発生した場合、消費電力低減手段による前記低減が取り止められる。
また、前記実行要求は、前記前記選択先切り替え手段により例外的な前記切り替えを伴って、緊急的にプログラムを実行するためのイベント処理要求であるとしてもよい。
【００１６】
これにより、イベント処理要求が発生した場合、消費電力低減手段による前記低減が取り止められる。
【発明を実施するための最良の形態】
【００１７】
＜第１の実施形態＞
（１．構成）
本発明の第１の実施形態について、図面を参照しながら詳細に説明する。図１は、本発明の第１の実施形態における仮想マルチプロセッサ１００の機能ブロック図である。
仮想マルチプロセッサ１００は、プレートの逐次切り替え実行を行うプロセッサである。ここで、プレートとは、従来のタスク又はＯＳのスケジューリング単位である１以上のタスクをまとめたものであり、プロセッサ側から見た実行対象をいう。１つのプレートは、1つの実行位置、即ち、プログラム中の命令位置を有する。
【００１８】
また、図１には、上述のプレート毎に用意されるプレートに対応するプログラムの実行位置を示すプログラムカウンタの値、上述のプログラム及びデータの格納位置を示すアドレスなどの制御情報、即ち、コンテキストが格納されているコンテキストメモリ２００も合わせて示している。ここで、上述のプレートに対応するプログラムを実行することを、プレートの実行ということとする。
【００１９】
上述のコンテキストメモリ２００は、ＳＲＡＭにより構成され、複数のプレートの各コンテキストが格納されているコンテキスト格納領域２０１及び各プレートの実行順序を示す実行順序テーブル３００が格納されている実行順序テーブル格納領域２０２を有する。この実行順序テーブル３００は、１つのプレートに含まれる管理用アプリケーションプログラム（以下、「管理アプリケーション」という。）により生成されたプレートの実行スケジュールを定めたテーブルであり、コンテキスト格納領域２０１における複数のメモリアドレス（以下、「コンテキストアドレス」という。）の値の配列であり、これらコンテキストアドレスの値により示されるそれぞれの場所には、各プレートを実行するのに必要なコンテキストが存在する。
【００２０】
なお、実行順序テーブル格納領域２０２において、各コンテキストアドレスの値が格納されている物理的位置を示すアドレスを以下、テーブルアドレスということとする。上述のテーブルアドレスは、数値で示されるものであって、この数値の大小関係は、このテーブルアドレスにより特定される位置に格納されたコンテキストアドレスの上記配列における順序に対応する。
【００２１】
つまり、スケジューリング１サイクルにおいては、テーブルアドレスの値が小さい順に、このテーブルアドレスの値により示される物理的位置に格納されたコンテキストアドレスの値により特定されるコンテキストアドレスと対応するプレートが実行されることとなる。このようにして、実行順序テーブル３００に、プレートの実行順序が、Ａ→Ｂ→Ｃ→Ａ→Ｄ→Ｃと示されている場合、このような順序で１サイクル分の各プレートの実行が終了し、このサイクルが複数回繰り返されることとなる。
【００２２】
各プレートの１回分の処理時間をいずれも同じ時間となっており、処理に時間がかかるプレートは、上述のプレートＡのように、１サイクルにおける実行回数が多くなっている。
図３４は、仮想マルチプロセッサ１００と外部プロセッサ３０との接続関係を示す図である。
【００２３】
上述の機能部の他に、仮想マルチプロセッサ１００に関連し、以下の機能部がある。即ち、プログラム及びデータなどを格納し、DRAMからなる主メモリ１０と、図示していないが、この主メモリ１０と仮想マルチプロセッサ１００との間に接続され、ＳＲＡＭからなる上述のプログラム及びデータなどを格納するためのキャッシュメモリとが存在し、これらはバス７００を介して仮想マルチプロセッサ１００に接続されている。
【００２４】
また、仮想マルチプロセッサ１００は、複数のプレートを擬似並行的に実行するものであるが、これら複数のプレートのうちの１つが、外部のプロセッサに処理を依頼する場合もあり、そのための外部プロセッサが、上記と同様にバスを介して仮想マルチプロセッサ１００に接続されている。即ち、図３４に示すように、外部プロセッサ３０と主メモリ１０はバス７００によって接続されており、仮想マルチプロセッサ１００と外部プロセッサ３０は、主メモリ１０を介して接続されている。
【００２５】
仮想マルチプロセッサ１００は、上述のバス７００を介して、主メモリ１０に外部プロセッサ３０が実行する処理の入力データをライトし、主メモリ１０から外部プロセッサ３０が実行した処理の結果であるデータをリードする。
また、外部プロセッサ３０は、主メモリ１０から処理の入力データをリードし、主メモリ１０に処理結果であるデータをライトする。
【００２６】
外部プロセッサ処理要求信号線７０１及び外部プロセッサ処理完了信号線７０２は、上述のバス７００とは独立して設けられ、それぞれ仮想マルチプロセッサ１００と外部プロセッサ３０と接続する。より具体的には、上記外部プロセッサ処理要求信号線７０１は、処理要求信号を仮想マルチプロセッサ１００から外部プロセッサ３０へと送信するための信号系統であり、また、外部プロセッサ処理完了信号線７０２は、処理完了信号を外部プロセッサ３０から仮想マルチプロセッサ１００へと送信するための信号系統である。
【００２７】
これらそれぞれの信号の伝達により、仮想マルチプロセッサ１００から外部プロセッサへの処理の依頼と、外部プロセッサから仮想マルチプロセッサ１００への処理完了の通知とがなされる。仮想マルチプロセッサ１００は、ＳＩＭＤ（Single Instruction / MultipleData）型のプロセッサであって、処理実行部１１０と、処理制御部１１１と、レジスタ切替部１１２と、切替入替制御部１１３と、第１レジスタ群１１４と、第２レジスタ群１１５と、サイクルカウンタ１１６と、外部Ｉ／Ｆ１１７と、ＤＭＡ管理部１１８と、完了通知レジスタ１１９と、制御レジスタ１２０と、設定フラグレジスタ１２１とを有する。
【００２８】
第１レジスタ群１１４及び第２レジスタ群１１５は、コンテキストの内容であるプログラムカウンタの値、プログラム及びデータの格納位置を示すアドレスなどのレジスタ値をそれぞれ格納するためのレジスタの集まりである。
また、各レジスタは、プレートが実行される際、このレジスタに格納されたプログラムカウンタなどの値が更新されたか否かを示す更新フラグの値を格納するための１ビットの記憶領域を有する。
【００２９】
上述の値が更新された場合、更新フラグの値は１を示し、更新がなされていない場合、更新フラグの値は０を示す。なお、デフォルトの状態では、第１レジスタ群１１４及び第２レジスタ群１１５の各レジスタの更新フラグの値は０となっている。レジスタ切替部１１２は、切替入替制御部１１３からの指示にしたがい、第１レジスタ群１１４及び第２レジスタ群１１５のうちいずれか１つのレジスタ群をプログラム実行の際に使用するレジスタ群（以下、「カレントレジスタ群」）として選択する。
【００３０】
ここで、便宜的にカレントレジスタ群として選択されていない方のレジスタ群をスタンバイレジスタ群といい、上述の選択対象を現在選択がなされているレジスタからもう一方のレジスタに切り替えることを、レジスタ切り替えということとする。処理実行部１１０は、上述のレジスタ切り替え、つまり、カレントレジスタ群の選択がなされると、このカレントレジスタ群に格納されているコンテキストにもとづいて、実行するプログラム及びこのプログラムの実行に必要なデータの所在を特定し、ＤＭＡ管理部１１８にこれらプログラム及びデータを取得するように指示する。
【００３１】
これらプログラム及びデータの取得は、キャッシュメモリからの取得を前提としており、キャッシュメモリに目的とするデータが存在する場合（以下、「キャッシュヒット」という。）、または、例外的に後述する外部記憶装置からブログラム及びデータを取得した場合、処理実行部１１０は、これらプログラム及びデータを取得し、これらプログラム及びデータを用いて、処理制御部１１１からの指示にしたがいプレートを実行する。
【００３２】
ただし、処理実行部１１０は、例外的にＤＭＡ管理部１１８に図示されない外部記憶装置からプログラム及びデータを取得するように指示する場合もある。この外部記憶装置は、同じく図示されない他の入出力装置などによってアクセス（例えばリード、ライト）することも可能であり．複数の装置からアクセスする場合と、１つの装置からアクセスする場合とではそのアクセスの時間が異なる（複数の装置からのアクセス時間の方が長くなる）。
【００３３】
一方、キャッシュメモリに目的とするデータが存在しない場合、即ち、キャッシュミスが生じた場合、または、外部記憶装置へのアクセスに時間がかかると判断された場合、処理実行部１１０は、その旨を処理制御部１１１に通知し、処理制御部１１１からの指示にしたがって以降の処理を実施する。このプレートの実行に伴い、処理実行部１１０は、コンテキストに格納されている値でプログラムカウンタなどの更新すべき値を更新し、値を更新したレジスタに含まれる更新フラグの値を１にする。
【００３４】
また、処理実行部１１０は、プレートの実行中に後述の待ち要因が発生した場合、プレートをスリープさせたことを示す通知を、処理制御部１１１を介して切替入替制御部１１３に出力すると共に、設定フラグレジスタ１２１内における発生した待ち要因の種別に対応する後述の設定フラグの値を１に変更する。
また、処理実行部１１０は、先の待ち要因の発生したとき、外部プロセッサ３０に処理を依頼する。
【００３５】
さらに、この待ち要因の解消となる事由が、外部プロセッサ３０から処理結果を受け取ることである場合、処理実行部１１０は、外部プロセッサ３０に処理を依頼してプレートをスリープさせたことを示す通知を、処理制御部１１１を介して切替入替制御部１１３に出力する。このとき、切替入替制御部１１３は、後述の外部Ｉ／Ｆ１１７に処理要求信号を出力する。
【００３６】
なお、図１は、ある瞬間の状態を示す図であり、処理実行部１１０（プレートＢ実行）とあるのは、第１レジスタ群１１４にプレートＢに対応するコンテキストが格納され、さらに、この第１レジスタ群１１４がカレントレジスタとして選択されている時点の状態を示すものである。仮想マルチプロセッサ１００内部でのデータの入出力と、コンテキストメモリ２００、主メモリ１０、キャッシュメモリ及び外部プロセッサとにおけるデータの入出力は、ＤＭＡ転送により実施され、ＤＭＡ管理部１１８は、このＤＭＡ転送を制御する。
【００３７】
また、ＤＭＡ管理部１１８は、各機能部からの要求にもとづいてＤＭＡ転送を実施してその転送が完了したとき、その旨を示す信号（以下、「転送完了信号」という。）を切替入替制御部１１３に出力し、また、キャッシュメモリからプログラム及びデータを取得しようとして、キャッシュミスが生じた場合、キャッシュミスが生じたことを示す信号（以下、「キャッシュミス信号」という。）を切替入替制御部１１３に出力する。
【００３８】
さらに、ＤＭＡ管理部１１８は、図示されない外部記憶装置からプログラム及びデータを取得しようとして、外部記憶装置へのアクセスに時間がかかる（レイテンシが大きい）と判断されたとき、メモリレイテンシが大きいことを示す信号（以下、「メモリアクセス遅延信号」という）を切替入替制御部１１３に出力する。
外部Ｉ／Ｆ１１７は、外部プロセッサなどの外部機器に接続するインターフェースであり、例えば、外部プロセッサに依頼した処理が完了したことを示す、外部プロセッサ処理完了信号などの外部からの信号を切替入替制御部１１３に通知する。
【００３９】
また、外部Ｉ／Ｆ１１７は、例えば、外部プロセッサ３０に処理を依頼することを示す処理要求信号を外部プロセッサ３０に通知する。
つまり、前述したように、外部Ｉ／Ｆ１１７は、切替入替制御部１１３から外部Ｉ／Ｆ１１７に処理要求信号が通知されたとき、処理要求信号を外部プロセッサ３０に出力する。処理制御部１１１は、プレート実行の開始から終了まで、処理実行部１１０において、継続的にプレートを実行させるように制御する。
【００４０】
サイクルカウンタ１１６は、クロックカウンタを有し、切替入替制御部１１３及び処理制御部１１１を介し、処理実行部１１０において、管理アプリケーションが含まれるプレートが実行されたことにより決定された値を、このカウント値を初期値として登録する。
また、サイクルカウンタ１１６は、上述の初期値から１クロック毎に１づつディクリメントすることによりカウントダウンを行い、値が０となったとき、切替入替制御部１１３にその旨を示す信号（以下、「カウント値０信号」という。）を出力すると共に、再度初期値設定を行ってカウントダウンを開始するという処理を繰り返す。
【００４１】
なお、上述のカウント値の初期値は、各プレート共通の値である。制御レジスタ１２０は、現在の実行中のプレート及び次に実行すべきプレートを特定する情報を格納するためのレジスタである。より具体的には、制御レジスタ１２０は、現在の実行中のプレートに対応するコンテキストアドレスの値が格納されている物理的位置のテーブルアドレス（以下、「カレントアドレス」という。）の値及び次に実行すべきプレートに対応するコンテキストアドレスが格納されている物理的位置のテーブルアドレス（以下、「ネクストアドレス」という。）の値を格納しており、さらに、実行順序テーブル格納領域２０２において、最も小さなテーブルアドレス（以下、「テーブル先頭アドレス」という。）の値と、最も大きなテーブルアドレス（以下、「テーブル終端アドレス」という。）の値とを格納している。
【００４２】
ところで、タスクの実行時に使用する共有資源が、他の機器により利用されており、直ちに使用できないことによる待機の発生及びいわゆる割り込みの発生などをトリガとしてソフトウエアにより、非定常的に現在実行中のタスクを中断してタスクの実行スケジュールから除外し、このタスクに割り当てられた実行時間を他のタスクに明け渡し、また、タスク中断のトリガとなった要因が解消されたときに、このタスクの実行順序を再度スケジューリングして実行することは、公知技術である。
【００４３】
本発明は、さらに、ハードウエアにより、プレート実行中断のトリガとなり得る所定の要因（以下、「待ち要因」という。）が発生したとき、レジスタ切り替え、即ち、プレートの切り替えを実施し、レジスタ切り替えがなされたプレートを実行順序から除外するスリープを実行し、また、この待ち要因が解消したとき、このプレートの実行を試みるウエイクアップを実施する。
【００４４】
このようなスリープ及びウエイクアップを実施する際、ウエイクアップのトリガとなる待ち要因を特定するために、プレート毎にどのような待ち要因でスリープが発生しているのかを知る必要がある。
また、外部からの割り込み要求などが到来した場合、外部からの要求に応えるべきか否かを事前に知る必要がある。
【００４５】
そのため、各プレートのコンテキストの中に、スリープの発生のトリガとなった待ち要因の種別、割り込み要求を受け付けるか否かなどをそれぞれ示す設定フラグの値を格納する領域を有する。このように待ち要因には複数の種別があり、これら種別毎に設定フラグ、つまり、設定フラグ群がある。
この設定フラグ群は、コンテキスト格納領域２０１に格納されている各コンテキスト内に含まれている。設定フラグレジスタ１２１は、２つのプレートに含まれている設定フラグ群それぞれを格納するためのレジスタである。プレートの実行に際し、実行されたプレート自らがプレートの実行の中断を要求し、又は、外部からプレートの実行を中断させる要求などが到来したことなどにより、待ち要因が発生したとき、現在実行中のプレートに対応するコンテキストの複数設定フラグのうち発生した待ち要因の種別に対応する設定フラグの値が処理実行部１１０により０から１に変更される。
【００４６】
ここで、上述のプレートの実行を中断させる要求には、いわゆる割り込み要求を含んでおり、このような割り込みが発生した場合に実行中のプレートを必ずしも中断する必要はなく、割り込みを受け付けるか否かは、プレート毎に定められている。そのため、割り込みを許容するプレートにおいては、プログラム設計者により割り込み要求を受け付けるか否かを示す設定フラグの値に割り込み可能を示す値である１が格納されている。
【００４７】
完了通知レジスタ１１９は、上述の待ち要因が現在解消されているか否か、割り込み要求が発生したか否かなどをそれぞれ示すフラグ（以下、「完了通知フラグ」という。）を格納するためのレジスタである。この完了通知フラグは、１つのコンテキスト中に含まれる設定フラグの数と同数存在し、各完了通知フラグは、待ち要因の種別毎に存在する各設定フラグのそれぞれと１対１に対応している。
【００４８】
つまり、完了通知フラグの集まりを構成する完了通知フラグ群のビット列長は、設定フラグの集まりを構成する設定フラグ群のビット列長と同一であり、先頭からのビット位置が同じであれば同じ待ち要因についての値を格納している。切替入替制御部１１３は、サイクルカウンタ１１６からカウント値０信号を受け取ったとき、処理実行部１１０からプレートをスリープさせたことを示す通知を受け取ったとき、及び、ＤＭＡ管理部１１８よりキャッシュミス信号を受け取ったとき、または、メモリアクセス遅延信号を受け取ったとき、後述のフラグ判定処理を実施して現状のネクストアドレスの値をそのままにしておくのか、それとも、他のテーブルアドレスの値を新たなネクストアドレスの値とするのかを判断してネクストアドレスの値の見直しを図りつつ、制御レジスタ１２０内に格納されているネクストアドレスの値を新たなカレントアドレスの値として格納し直すと共に、上述のネクストアドレスの値の次に大きなテーブルアドレスの値を新たなネクストアドレスの値として格納し、上述のレジスタ切り替えを実施するようにレジスタ切替部１１２に指示する。
【００４９】
さらに、切替入替制御部１１３は、このレジスタ切り替えが実施された結果、スタンバイレジスタ群となったレジスタ群の各レジスタの更新フラグを参照し、更新フラグの値が１となっているレジスタに格納されているレジスタ値をコンテキスト格納領域２０１のこのレジスタ値に対応する記憶領域、即ち、レジスタ群への格納時に変更される前のレジスタ値が読み出された場所に上書きすることにより退避するようにＤＭＡ管理部１１８に指示すると共に、後述のフラグ判定処理を実施する。
【００５０】
また、切替入替制御部１１３は、前記退避に伴って、当該退避されるコンテキストの設定フラグを、設定フラグレジスタ１２１から読み出して、コンテキスト格納領域２０１内のこの設定フラグに対応する記憶領域、即ち、設定フラグレジスタ１２１への格納時に設定フラグが読み出された場所に上書きすることにより設定フラグの値を退避する。
上述の退避及び後述のフラグ判定処理が完了すると、切替入替制御部１１３は、制御レジスタ１２０内のネクストアドレスの値により特定されるプレートのコンテキストをスタンバイレジスタ群の各レジスタに格納、即ち、復帰する。このとき、切替入替制御部１１３は、各レジスタの更新フラグの値を０にクリアする。
【００５１】
切替入替制御部１１３は、上述の退避、フラグ判定処理及び復帰を、カレントレジスタ群に格納されたコンテキストを用いた処理実行部１１０によるプレートの実行と並行して実施する。なお、上述の退避、フラグ判定処理及び復帰に要する時間は、上述のプレートの実行時間よりも短くなるように、管理アプリケーションなどにより、上述のレジスタ切り替えのタイムスパンが定められている。
【００５２】
以下、切替入替制御部１１３におけるフラグ判定処理の詳細について説明する。切替入替制御部１１３は、コンテキスト格納領域２０１内に存在し、制御レジスタ１２０のネクストアドレスの値により特定されるコンテキストに含まれる設定フラグ群のビット列のうち、１の値が格納されているビット（以下、「有効ビット」という。）の位置を把握する。
【００５３】
このような有効ビットの位置を把握する処理を有効ビット位置検索処理ということとする。このとき、設定フラグ群のビット列のうち、有効ビットが１つもない場合、切替入替制御部１１３は、ネクストアドレスの値をそのままにしてフラグ判定処理を終了する。
設定フラグ群のビット列のうち、有効ビットがある場合、切替入替制御部１１３は、完了通知レジスタ１１９内の完了通知フラグ群のビット列における上述の有効ビットの位置に対応する位置のみを参照し、この有効ビットの位置に対応する位置全てに１の値が格納されている場合は、ネクストアドレスの値をそのままにしてフラグ判定処理を終了する。
【００５４】
なお、有効ビットの位置に対応する位置とは、設定フラグ群のビット列の先頭位置から有効ビットまでのビット数と同じビット数分、完了通知フラグ群のビット列の先頭位置から離れた位置（以下、「有効ビット対応位置」という。）のことである。一方、完了通知フラグ群の有効ビット対応位置のいずれかに０の値が格納されている場合、切替入替制御部１１３は、実行順序テーブル格納領域２０２に示されている現時点におけるネクストアドレスの値につづき、次に大きな値のテーブルアドレスの値を暫定的に新たなネクストアドレスの値とする。
【００５５】
そして、切替入替制御部１１３は、この暫定的なネクストアドレスの値により特定されるコンテキストに含まれている設定フラグについて、上述の有効ビット位置検索処理を実施した後、完了通知フラグ群の有効ビット対応位置の値に応じてネクストアドレスを見直す上述の処理を、フラグ判定処理が終了するまで繰り返し実施する。
なお、現状のネクストアドレスの値がテーブル終端アドレスの値である場合、ネクストアドレスの値につづき、次に大きな値のテーブルアドレスの値とは、テーブル先頭アドレスの値とする。
（２．データ）
以下、仮想マルチプロセッサ１００において用いられるデータについて説明する。
【００５６】
図２は、コンテキストメモリ２００に格納されている実行順序テーブル３００及びコンテキストのデータ構成を示す図である。実行順序テーブル３００は、コンテキストが格納されているコンテキスト格納領域２０１内のコンテキストアドレスの値が複数示されており、これらコンテキストアドレスの値の物理的な格納位置、即ち、テーブルアドレスが各コンテキストアドレスにより特定されるプレートの実行順序を決定している。
【００５７】
つまり、小さな値のテーブルアドレスが割り当てられている場所に格納されているコンテキストアドレスほどこのコンテキストアドレスに対応するプレートの実行順序が先順位となっている。上述のフラグ判定処理により、プレートの実行順序が飛ばされることがあるものの、基本的にはコンテキストアドレスの値の物理的格納位置、即ち、配列により示される順序に従ってプレートが実行され、テーブル最終アドレスがカレントアドレスとなっている場合における、カレントアドレスにより特定されるプレートが実行された後は、テーブル先頭アドレスをカレントアドレスとすることにより特定されるプレートが実行される。
【００５８】
つまり、コンテキストアドレスの物理的格納位置、即ち、テーブルアドレスは、１サイクルのプレートの実行順序を示す。図２において、テーブルアドレスは、２０００から２００５までの値を有しており、この場合、テーブル先頭アドレスの値は、２０００となり、テーブル終端アドレスの値は、２００５となる。
小さい値のテーブルアドレスに格納されているコンテキストアドレスのプレートほど実行順序が先となる。図３は、完了通知フラグ群及び設定フラグ群の各フラグについて説明する図である。完了通知フラグ群は、強制待ちフラグ、キューの空き通知フラグ、割り込み通知フラグ、ソフトウエアの待ち指示フラグ、外部プロセッサ処理完了通知フラグ、転送通知フラグなどを有する。
【００５９】
強制待ちフラグは、０の値が固定的に格納されているフラグである。キューの空き通知フラグは、プレートの実行中、容量的に空きが少ないキューに命令などをキュー登録しようとした場合など、キューを管理する外部機器からキューに空きがないことを示す通知が到来したか否かを示すフラグであり、キューに空きがないことを示す通知がなされた場合、０の値をとり、キューに空きがある状態では、１の値をとる。
【００６０】
割り込み通知フラグは、外部機器から割り込み要求が到来したか否かを示すフラグであり、割り込み要求が到来していない場合、デフォルト値である１の値をとり、また、割り込み要求が到来した場合、切替入替制御部１１３により０の値にされる。ソフトウエアの待ち指示フラグは、アプリケ−ションソフトなどからプレートの実行を待たせる指示が到来したか否かを示すフラグであり、上述の指示が到来していない場合、デフォルト値である１の値をとり、上述の指示が到来した場合、切替入替制御部１１３により０の値にされる。
【００６１】
外部プロセッサ処理完了通知フラグは、プレートの実行時に外部のプロセッサに処理を依頼した場合、依頼した処理が完了したことを示す通知が到来したか否かを示すフラグであり、すなわち、キャッシュミス信号あるいはメモリアクセス遅延信号を発生させる要因となったＤＭＡ転送や、プログラムによって要求されるＤＭＡ転送などの完了を示すフラグであり、この通知が到来していない場合、デフォルト値である０の値をとり、また、依頼した処理が完了したことを示す通知が到来した場合、切替入替制御部１１３により、１の値にされる。
【００６２】
転送通知フラグは、ＤＭＡ転送が完了したことを示す通知が到来したか否かを示すフラグであり、この通知が到来していない場合、デフォルト値である０の値をとり、また、ＤＭＡ転送が完了したことを示す通知が到来した場合、切替入替制御部１１３により、１の値にされる。なお、これら上述のフラグそれぞれは、そのフラグをトリガとして、新たなプレートが実行された場合、そのプレートの実行によりそのフラグの値が、切替入替制御部１１３により上述のデフォルト値にリ復帰されることとなる。
【００６３】
設定フラグ群を構成する各フラグは、完了通知フラグ群の各フラグに対応するフラグであって、対応するフラグを無視するか否かを示す。コンテキスト中に含まれる設定フラグ群を構成する設定フラグの値が０の場合、対応する完了通知フラグの値に影響されることなく、このコンテキストにもとづいてプレートが実行される。
また、設定フラグの値に１がある場合、対応する完了通知フラグの値により、この設定フラグを含むコンテキストに対応するプレートを実行対象とするか否かが切替入替制御部１１３により判断される。なお、設定フラグの値に１が格納される例としては、以前この設定フラグを含むコンテキストに対応するプレートが実行されたとき、待ち要因が発生し、プレートの実行が中断されたなどが挙げられ、このようなプレートは、持ち要因が解消されるまで、スリープ状態となる。
【００６４】
より具体的には、対応するものどうしの完了通知フラグの値及び設定フラグの値が１の場合、この設定フラグを含むコンテキストに対応するプレートが実行対象とされ、対応するものどうしの完了通知フラグの値が０で、設定フラグの値が１の場合、このコンテキストに対応するプレートが非実行対象とされ、即ち、プレートの実行順序から除外される。
つまり、対応する完了通知フラグの値及び設定フラグの値が１の場合、この設定フラグを含むコンテキストに対応するプレートが切替入替制御部１１３によりウエイクアップされ、対応する完了通知フラグの値が０で、設定フラグの値が１の場合、このプレートのスリープ状態となる。
【００６５】
また、設定フラグの値が０の場合、この０の値が格納されている場所の対応する種別の待ち要因については切替入替制御部１１３より無視がなされ、この待ち要因に対応する完了通知フラグも参照されない。
図４は、タスクとプレートとの関係を示す図である。ソフトウエア側には、複数のタスクが存在し、そのうち、リアルタイムで処理するタスクは、ＯＳを介さず直接、管理アプリケーションの管理下に置かれている。なお、実行順序テーブル３００の内容を更新するための管理アプリケーションが、上述のリアルタイムで処理するタスクに含まれており、このタスク、即ち、プレートが実行されるとき、例えば、新たな処理を実行すべき状態となっていれば、処理実行部１１０により、実行順序テーブル３００の内容が更新されることとなる。
【００６６】
これにより、１サイクル分プレートが実行される毎に、少なくとも１回はタスクのスケジューリングを見直す機会が発生する。より具体的には、管理アプリケーションに対応するプレートが実行される毎に、前記条件の発生の有無を判断し、この条件が発生した場合に、新たな内容の実行順序テーブルであるダミーテーブルを実行順序テーブル格納領域２０２内に生成し、プレート実行の基礎とする実行順序テーブルを現状の実行順序テーブル３００からダミーテーブルへと切り替えることにより更新する。
【００６７】
一方、リアルタイムで処理する必要のないタスクは、まず、ＯＳの管理下に置かれ、さらに管理アプリケーションの管理下に置かれている。プレートは、ハードウエア側、即ち、処理実行部１１０における１実行単位であり、１つのタスクそのものである場合と、複数のタスクをまとめたものである場合とがあり、これらのプレートの割り振りは、プログラミングにより自由に決定可能である。
（３．動作）
以下、仮想マルチプロセッサ１００において、１つのプロセッサにより擬似並行的にプレートを実行する際、効率的なプレートの実行を実現する処理について説明する。
【００６８】
図５は、仮想マルチプロセッサ１００において実施される処理を示すフローチャートである。切替入替制御部１１３は、コンテキストメモリ２００内の実行順序テーブル３００を参照し、制御レジスタ１２０内に、テーブル先頭アドレス、カレントアドレス、ネクストアドレス及びテーブル終端アドレスを登録する（ステップＳ５００）。
第１レジスタ群１１４及び第２レジスタ群１１５内の全ての値をクリアする（ステップＳ５０１）。切替入替制御部１１３は、第１レジスタ群１１４及び第２レジスタ群１１５のうちカレントレジスタ群及スタンバイレジスタ群を選択する（ステップＳ５０２）。
【００６９】
そして、切替入替制御部１１３は、カレントアドレスにより特定されるコンテキストをカレントレジスタ群に格納させる（ステップＳ５０３）。つづいて、切替入替制御部１１３は、処理制御部１１１を介して処理実行部１１０にプレート実行の指示を与え、その結果、処理実行部１１０は、カレントレジスタ群に格納されているコンテキストにもとづいて、プレートの実行を開始する（ステップＳ５０４）。
【００７０】
サイクルカウンタ１１６は、プレート実行開始と共に、プレートの実行により設定される初期値からカウントダウンを開始する（ステップＳ５０５）。切替入替制御部１１３は、外部Ｉ／Ｆ１１７及びＤＭＡ管理部１１８からの信号入力を受付け、入力された信号に応じて完了通知レジスタ１１９の完了通知フラグの値を更新する（ステップＳ５０６）。
そして、切替入替制御部１１３は、フラグ判定処理を実施して、制御レジスタ１２０内のネクストアドレスの値を確定する（ステップＳ５０７）。つづいて、切替入替制御部１１３は、スタンバイレジスタ群を構成する各レジスタの更新フラグの値が１となっているコンテキスト部分のみをコンテキスト格納領域２０１に退避させ（ステップＳ５０８）、スタンバイレジスタ群に格納されている値を全てクリアする（ステップＳ５０９）。
【００７１】
さらに、切替入替制御部１１３は、制御レジスタ１２０内のネクストアドレスにより特定されるコンテキストをスタンバイレジスタ群に格納させる（ステップＳ５１０）。そして、切替入替制御部１１３は、制御レジスタ１２０内のネクストアドレスをカレントアドレスとして登録し直し、ネクストアドレスの次のアドレスを新たなネクストアドレスとして登録し直す（ステップＳ５１１）。
【００７２】
切替入替制御部１１３は、サイクルカウンタ１１６よりカウント値０信号が入力された、即ち、プレート実行の終了が指示されたか又は処理実行部１１０より実行中のプレートをスリープさせたことを示す通知があったかどうか、さらに、その通知が外部プロセッサ３０に処理を依頼してからプレートをスリープさせたことを示す通知であったかどうかを判断し（ステップＳ５１２）、これら信号の入力又は通知がなされた場合、処理実行部１１０にプレートの実行を終了させ、さらに、外部プロセッサ３０に処理を依頼してからプレートをスリープさせた場合は、切替入替制御部１１３から外部Ｉ／Ｆ１１７に処理要求信号を通知させ、外部Ｉ／Ｆ１１７から外部プロセッサ３０に処理要求信号を出力させ（ステップＳ５１３）、レジスタ切替部１１２にレジスタ切り替えを実施させ（ステップＳ５１４）、プレートの実行を開始するステップＳ５０４に戻る。
【００７３】
一方、これら信号の入力又は通知がなされない場合、現在のプレートの実行を継続し、終了又はスリープさせたことを示す通知があったかどうかを判断するステップＳ５１２に戻る。図６は、フラグ判定処理を示すフローチャートである。切替入替制御部１１３は、コンテキスト格納領域２０１内に存在し、制御レジスタ１２０のネクストアドレスにより特定されるコンテキストに含まれる設定フラグ群のビット列のうち、１の値が格納されている有効ビットの位置を把握する有効ビット位置検索処理を実施する（ステップＳ６００）。
【００７４】
そして、切替入替制御部１１３は、有効ビットが１つも存在しないかどうかを判断し（ステップＳ６０１）、有効ビットが１つも存在しない場合、制御レジスタ１２０におけるネクストアドレスの値をそのままにしてフラグ判定処理を終了する。一方、有効ビットが１以上存在する場合、切替入替制御部１１３は、完了通知レジスタ１１９内の完了通知フラグ群のビット列における上述の有効ビットの位置のみを参照し（ステップＳ６０２）、この有効ビット全てに１の値が格納されているか否かを判断する（ステップＳ６０３）。
【００７５】
完了通知フラグ群の有効ビット全てに１の値が格納されている場合、切替入替制御部１１３は、ネクストアドレスの値をそのままにしてフラグ判定処理を終了する（ステップＳ６０４）。一方、完了通知フラグ群のビット列における有効ビットのいずれかに０の値が格納されている場合、切替入替制御部１１３は、実行順序テーブル格納領域２０２内に示されている現時点におけるネクストアドレスの次のアドレスを暫定的に新たなネクストアドレスとし（ステップＳ６０４）、有効ビット位置検索処理を実施するステップＳ６００に戻る。
【００７６】
以上の処理を実施することにより、仮想マルチプロセッサ１００は、プレートの終了から次のプレートの開始までの間に、コンテキストの退避、判断及び復帰に要する時間を介在させることなくプレートを実行することができる。図７は、このような状態を時系列的に説明する図である。コンテキストの退避、判断及び復帰は、プレートの実行と並行して実施されている。
【００７７】
このため、プレートの終了から次のプレートの開始までの間に、コンテキストの退避、判断及び復帰に要する時間が介在することが回避されている。以上のように、本実施形態によれば、１つの仮想マルチプロセッサ１００において、擬似並行的に複数のプレートを実行しても、コンテキストの退避、判断及び復帰は、プレートの実行と並行して実施するため、プレートの実行時間にコンテキストの退避、判断及び復帰に要する時間が介在することがないので、効率的にタスクを実行することができる。
【００７８】
なお、本実施の形態では、この実行順序テーブル３００は、プレートの実行順序を示し、この実行順序テーブル３００内におけるコンテキストアドレスの値の物理的格納位置、即ち、配列により基本的なプレートの実行順序が定められているが、この方法に限らず、例えば、実行順序テーブル３００内にコンテキストアドレスの値とテーブルアドレスの値との組を格納し、このテーブルアドレスの値が次の実行順序に対応するコンテキストアドレスの物理的な格納位置を示すことにより、つまり、このテーブルアドレスの値をポインタとして用いることにより、プレートの実行順序を定めるとしてもよい。
【００７９】
その場合、格納されているコンテキストアドレスの値の物理的な格納位置に実行順序が左右されず、また、このポインタを変更することにより、容易に実行順序の変更を行うことができる。図８は、このようなポインタを用いる場合の実行順序を示すテーブルのデータ構成を示す図であり、コンテキストの格納位置との対応関係を示すために、コンテキスト格納領域２０１におけるデータ構成も合わせて示している。
【００８０】
この実行順序テーブルは、上述のコンテキストアドレスと次の実行順序を指し示すポインタとしてのテーブルアドレスとの組を格納している。
また、本実施の形態において、切替入替制御部１１３は、フラグ判定処理を、実行順序テーブル３００により示される実行順序にもとづいて実施するものとしたことにより、スリープされたプレートがウエイクアップするタイミングは、実行順序テーブル３００に規定されたそのプレートの実行順序が巡ってきたときとなるが、フラグ判定処理に際して、スリープしているプレートのコンテキスト内の設定フラグ群を優先的に参照して、フラグ判定処理を実施し、ウエイクアップの条件が揃えば、スリープしているプレートの実行順序を待たずに実行するとしてもよい。
【００８１】
図９は、このような場合におけるプレート実行状況を時系列的に示す図である。ｔ０において、プレートＡは、外部プロセッサ３０に処理を依頼し、外部のプロセッサ３０から処理結果を受け取るまでスリープに入るいわゆる突き放しを実施している。
ここで、この突き放しについて説明する。まず、仮想マルチプロセッサは、主メモリ１０に外部プロセッサ３０が実施する処理の入力データをライトした後、処理要求信号を出力し外部プロセッサ３０に処理を要求すると共に、プレートをスリープさせる。外部プロセッサ３０は、主メモリ１０から命令をフエッチし動作すると共に、主メモリから処理の入力データをリードして要求された処理を行い、その処理結果であるデータを主メモリにライトする。
【００８２】
その後、外部プロセッサ３０は、処理完了信号を出力し、仮想マルチプロセッサ１００に処理が完了した旨を通知する。処理の完了が通知されると、図５、図６において先述したフラグ判定処理などにより、仮想マルチプロセッサ１００は、スリープしたプレートを再度実行し、主メモリ１０から外部プロセッサ３０が処理した結果であるデータをリードする。
【００８３】
このように、プレートを実行することにより、仮想マルチプロセッサ１００は、外部のプロセッサに処理を依頼し、外部のプロセッサから処理結果を受け取るまでスリープする。以下、具体的に動作を説明する。まず、ｔ０では、設定フラグ群における、外部プロセッサ処理完了通知フラグの値が１に変更される。
ｔ２からｔ４までにおいて、プレートＡについて優先的にフラグ判定処理を実施するが、完了通知レジスタ１１９内の有効ビット、即ち、外部プロセッサ処理完了通知フラグの値は０であるためウエイクアップされない。プレートＤの実行期間中であるｔ５において、外部プロセッサ処理完了通知フラグの値が１となっているためウエイクアップされる。
【００８４】
このウエイクアップに伴って、切替入替制御部１１３は、ウエイクアップされたプレートのコンテキストをスタンバイレジスタ群に格納する。そして、ｔ６において、切替入替制御部１１３は、レジスタ切替部１１２にレジスタ切り替えを実施させる。そして、処理実行部１１０は、カレントレジスタに格納されたプレートＡに対応するコンテキストにもとづいて、プレートＡを実行する。
【００８５】
なお、この後、再度プレートＡが実行されるのは、プレートＡの正規の実行順序が巡ってきたときとなる。
また、図９においては、スリープしているプレートが１つの場合を示したが、複数のプレートがスリープしている場合も考えられ、このような場合、早くスリープされたプレートのコンテキストに対して優先的にフラグ判定処理を実施してもよく、逆に、遅くスリープされたプレートのコンテキストに対して優先的にフラグ判定処理を実施してもよい。
【００８６】
図１０は、遅くスリープされたプレートのコンテキストに対して優先的にフラグ判定処理を実施する例を時系列的に示す図である。プレートＢにつづきプレートＤがスリープ状態となっており、図中における５回目の判定において、プレートＢ及びプレートＤが実行可能な状態と判定され、この時点においてスリープしている時間が最も短いプレートＤが優先的にウエイクアップされ、これにつづいてプレートＢがウエイクアップされている。
【００８７】
これは、先にスリープされたプレートの実行の順序は、後にスリープされたプレートよりも近づいてきているため、先にスリープされたプレートをウエイクアップして実行してしまうと、直ぐに、またこのプレートの実行順序が巡ってきてしまうため、この時点を捕らえれば、プレートの実行開始の間隔が極端に狭くなり、プレートの実行時間が均等化されない可能性があるためである。
【００８８】
また、図９及び図１０を用いて説明した上述のフラグ判定処理において、プレートのスリープ時間が決められた時間を超える場合、上述の優先を取り止めるとしてもよい。
また、本実施の形態では、完了通知フラグ群及び設定フラグ群は、強制待ちフラグ、キューの空き通知フラグ、割り込み通知フラグ、ソフトウエアの待ち指示フラグ、外部プロセッサ処理完了通知フラグ、転送通知フラグなどを有するとしたが、これ以外のフラグを設けてもよい。
【００８９】
例えば、複数のプレートがスリープしている場合、種々の完了通知フラグがどのプレートに対応するものなのかが判らなくなる。そこで、プレートを識別するための番号が対応づけられているフラグを、完了通知フラグ群及び設定フラグ群に設け、スリープが生じたとき、処理実行部１１０から実行中のプレートを特定するためのユニークな番号を発生させ、この番号を設定フラグ群内に新たに設けたフラグに登録すると共に、この番号をスリープの発生のトリガとなった外部機器に対し通知する。
【００９０】
待ち要因が解消されたとき、例えば、外部プロセッサなどの外部機器により、外部プロセッサ処理管理信号などと共に、上述の番号が合わせて通知されることにより、外部プロセッサ処理完了通知フラグが１とされるのに加え、この番号を示すフラグも１とされるので、どのプレートに対応するものかを判定することが可能となる。
また、本実施の形態では、待ち要因が発生した場合、実行中のプレートに割り当てられている実行時間を放棄して他のプレートに明け渡す例を示したが、これによらず、プレートの実行時間を他のプレートに明け渡さずに、上述の放棄がなされている時間分だけ、プロセッサの駆動周波数を下げ、電力消費を抑えるとしてもよい。
【００９１】
その場合、プレートの実行に割り当てられた絶対時間が変らないようにするため、例えば、プロセッサの駆動周波数、即ち、クロック周波数を2分の１に低減した場合、サイクルカウンタ１１６は、１クロックあたり１づつディクリメントしていたものを、１クロックあたり２づつディクリメントすることとなる。本実施の形態では、退避、フラグ判定処理及び復帰に要する時間は、上述のプレートの実行時間よりも短くなるように、管理アプリケーションなどにより、上述のレジスタ切り替えのタイムスパンが定められているとしたが、これはこのタイムスパンの下限値を決定する制約条件である。
【００９２】
一方、このタイムスパンの上限値を決める制約条件について、本実施の形態では、特筆していないが、このタイムスパンは、プレートを実行することができる限界の時間であり、各プレートの実質的な実行時間が、この限界の時間に対して極めて短い時間で処理を実施していた場合、各プレートの実行に際して、処理が行われていない無駄な時間が生じていることとなり、このような無駄を避けるために、管理アプリケーションは、プレートの実質的な実行時間と上述のタイムスパンがほぼ同様の時間で、かつ、上述のタイムスパンが各プレートの実質的な実行時間以上となるようにタイムスパンの上限値を決定してもよい。
【００９３】
ところで、通信処理などのリアルタイムな処理では、プレートの実行により処理すべきデータの到来する周期がほぼ決まっている。つまり、１サイクルにおける各プレートの処理負荷が決まっており、上述のように決められた上限値及び下限値を有するタイムスパンを用いて、１サイクル分の各プレートが実行されたとしても、次のサイクルで処理すべきデータが到来していなかったのでは意味がない。
【００９４】
そこで、処理実行部１１０における処理能力が、１サイクルで処理すべきプレートの処理負荷に勝って処理時間に余裕が生じている場合、このような余裕が生じなくなる程度に、処理実行部１１０におけるプロセッサの駆動周波数、即ち、処理能力を低減し、各プレートの実質的な実行時間を大きくするようにしてもよい。
その場合、各プレートの実行に際して、処理が行われていない無駄な時間が削減され、かつ、プロセッサの駆動周波数を下げることにより消費電力も低減される。
【００９５】
また、現在実行中のプレートの次に実行すべきプレート、即ち、スタンバイレジスタ群に格納されているコンテキストに対応するプレートの実行に必要なデータを事前にキャッシュに格納しておくとしてもよい。
その場合、スタンバイレジスタ群に格納されているコンテキストを事前に参照し、次のプレートの実行に必要なデータを把握し、このデータをキャッシュに格納する機能部が必要となる。
【００９６】
また、メインメモリの容量を物理的な容量よりも仮想的に大きくするために、「プログラムによって指定される論理アドレス」と「プロセッサが物理的にアクセスする物理アドレス」との対応関係（マッピング）を管理する「仮想メモリ機能部」を本実施の形態に付与してもよい。
なお、この仮想メモリ機能は公知技術である。この場合、キャッシュには、論理アドレスと物理アドレスとの対応関係（マッピング）を示す「アドレス変換テーブル」を格納する「アドレス変換テーブルキャッシュ」が含まれ、この「アドレス変換テーブルキャッシュ」に、次に実行すべきプレートに必要となるデータを示す論理アドレスを物理アドレスに変換できる「アドレス変換テーブル」を格納しておくとしてもよい。
【００９７】
その場合、現在実行中のプレートの次に実行すべきプレート、即ち、スタンバイレジスタ群に格納されているコンテキストを事前に参照し、次のプレートの実行に必要なデータを把握し、さらに、そのデータの論理アドレスを物理アドレスに変換できるアドレス変換テーブルの値を把握して、それをアドレス変換テーブルキャッシュに格納する機能部が必要となる。
【００９８】
また、サイクルカウンタ１１６におけるカウント値の初期値は、各プレート共通の値であるとしたが、プレート毎に異なっているとしてもよい。つまり、この初期値は、プレートの実行のために用意される時間を示し、プレートの処理の内容に応じてプレート固有の実行時間を割り当ててもよい。その場合、図１１に示すように、実行順序テーブル格納領域２０２内にコンテキストアドレスに対応づけられてカウント値の初期値が格納される。
【００９９】
そして、切替入替制御部１１３は、制御レジスタ１２０内のカレントアドレスス及びネクストアドレスそれぞれに上述のカウント値の初期値を対応づけて格納する。
また、これに伴い、サイクルカウンタ１１６は、オーバーヘッドを解消しつつ随時異なる初期値にもとづいてカウントダウンを実施するために、２つ設けることが望ましい。
また、サイクルカウンタ１１６は、図１２に示す機能部構成とすることもできる。この図において、サイクルカウンタ１１６は、入出力部３０１と、第１メモリ３０２と、第２メモリ３０３と、カウントダウン部３０４とを有する。入出力部３０１は、切替入替制御部１１３からカウント値の初期値を受信し、受信した上述の初期値を交互に第１メモリ３０１及び第２メモリ３０３に格納する機能を有する。
【０１００】
また、入出力部３０１は、カウントダウン部３０４からの信号を受け取ったとき、切替入替制御部１１３にカウント値０信号を出力する。第１メモリ３０２及び第２メモリ３０３は、ＦＩＦＯメモリである。カウントダウン部３０４は、第１メモリ３０２及び第２メモリ３０３から交互に初期値を読み出してその初期値にもとづきカウントダウンを実施する。
【０１０１】
以上のような構成により、プレートの処理の内容に応じてプレート固有の実行時間を割り当てることができる。
また、処理実行部１１０は、N段のパイプライン処理によりプレートを実行するとしてもよい。図１３は、４段のパイプライン処理を実施する例を示す。
この場合、１段目で、プレートＡの処理の実行が終了しても、２段目から４段目までは、まだプレートＡが実行中の状態である。つまり、この状態は、カレントレジスタ群のレジスタ値が必要であるため、プレートＡのレジスタ値の退避はできない。１段目のプレートＡの処理の実行が終了してから３クロック経過したとき、４段目のプレートＡの実行が終了するので、ここでプレートＡのレジスタ値が退避可能となる。
【０１０２】
よって、例えば、Ｎ段のパイプライン処理によりプレートが実行される場合は、１段目のプレートの実行が終了してから少なくとも（Ｎ−１）クロック後でなければ、レジスタ値、即ち、コンテキストを退避できないこととなる。
また、本実施の形態では、一旦プレートがスリープすると、ウエイクアップする機会は、実行順序テーブル３００に示された、次の実行順序のみであったが、待ち要因が発生してスリープしても、この待ち要因が瞬時に解消される場合もあるため、これを考慮し、スリープとなった直後から１回分のプレート実行までの間については、スリープしたプレートの実行順序を最先の順序とし、このスリープしたプレートを優先的に実行させてもよい。 図１４は、このようなプレート実行がなされた場合における、プレート実行状況を説明する図である。
【０１０３】
この図において、プレートＣがスリープした直後にスリープの原因となった待ち要因が解消されており、プレートＤの実行中は、プレートＣの実行順序を最先の順位にしているので、プレートＤが実行された後にプレートＣが実行されている。ただし、この場合、待ち要因の解消タイミングが、プレートＤの実行終了間際であった場合、本実施の形態においては、スタンバイレジスタの数は、１つのみであるため、本来プレートＤの後に実施されるはずであるプレートＡの復帰の時間のマージンを見込まなければならない。
【０１０４】
そのため、スリープしたプレートの実行順序を最優先とする時間（以下、「優先期間」という。）は、この図の場合、プレートＤの実行時間よりも短くなっている。このような不都合を解消すべく、レジスタ群を少なくとも３つ設け、このうちの１つをカレントレジスタ群、また、残りの２つをスタンバイレジスタ群とすることにより、図１４におけるプレートＣのコンテキストと、プレートＡのコンテキストとを同時に、２つのスタンバイレジスタ群に格納することにより、上述の優先期間は、プレートＤの実行終了間際まで長くなる。
【０１０５】
また、第１の実施形態では、プレートの数は、レジスタ群の数を上回っていることを前提として説明していたが、これに限らず、プレートの数がレジスタ群の数以下であってもよい。その場合、コンテキストメモリ内のコンテキスト格納領域を備えなくても良く、退避、復帰のステップが不要となる。
具体的には、図５におけるＳ５０８（退避）、Ｓ５０９（スタンバイレジスタ群のクリア）が不要となり、Ｓ５１０とＳ５１４の処理が変更される。つまり、第１の実施形態では、Ｓ５１０（スタンバイレジスタ群への格納）は、Ｓ５０７のフラグ判定処理で決定される制御レジスタ１２０内のネクストアドレスにより特定されるコンテキストをスタンバイレジスタ群に格納させる処理であったが、コンテキスト格納領域が無い場合は、Ｓ５１０を「Ｓ５０７で判断されるネクストアドレスにより特定されるコンテキストにあらかじめ対応づけられているレジスタ群」を「次のカレントレジスタ群」として切替入替制御部１１３に選択し記憶させる処理とすればよい。
【０１０６】
そして、Ｓ５１４で、切替入替制御部１１３が先ほど「次のカレントレジスタ群」として選択したレジスタ群がカレントレジスタ群になるように、レジスタ切替部１１２はレジスタ切り替えを実施すればよい。この場合、切替入替制御部１１３は、上記のネクストアドレスにより特定されるコンテキストに対応付けられているレジスタ群がどれであるかを把握して記憶する機能を、レジスタ切巻部１１２は、切替入替制御部１１３が記憶したレジスタ群にカレントレジスタ群を切り替える機能を、それぞれ有することとなる。
【０１０７】
ここで、プレート及びレジスタ群の数が２つの場合、より具体的には、プレートＡは第１レジスタ群、プレートＢは第２レジスタ群に対応付けられているとする。例えば、切替入替制御部１１３は、プレートＡを実行するときは、コンテキストメモリからレジスタ値群を復帰する動作なしで、第１レジスタ群をカレントレジスタ群として選択する。
また、レジスタ群及びプレート（プレートＡ、Ｂ、Ｃがあり、プレートＣは第３レジスタ群に対応付けられているものとする。）の数が３つの場合であっても、カレントレジスタ群として選択されているのが実行対象レジスタ群であって、それ以外がスタンバイレジスタ群となる。プレートＣを実行する際、第３レジスタ群をカレントレジスタ群として選択される。
【０１０８】
選択先を切り替えた後も、コンテキストメモリにレジスタ値群を退避する動作は不要である。コンテキスト格納領域を備えない上記の構成でも、複数のプログラムが所定時間毎に頻繁に切り替えられながら高速に実行されるので、擬似的なリアルタイム処理の並列実行に効果的である。
また、本第１の実施形態では、コンテキストメモリ２００は、ＳＲＡＭにより構成されるとしたが、ＤＲＡＭであってもよく、さらに、これらメモリに限らず、高速にアクセスされるレジスタや低速にアクセスされる外部記憶装置であってもよい。
【０１０９】
また、本第１の実施形態では、管理アプリケーションが１つのプレートに含まれているとしたが、複数のプレートに含まれているとしてもよい。
＜第２の実施形態＞
（１．構成）
第２の実施形態について、図面を参照しながら詳細に説明する。
【０１１０】
図１５は、第２の実施形態における仮想マルチプロセッサ４００の機能ブロック図である。仮想マルチプロセッサ４００は、第１の実施形態における仮想マルチプロセッサ１００と同様に、複数のプログラムを擬似並行的に実行するプロセッサである。
この仮想マルチプロセッサ４００は、複数のタイムスロットそれぞれに割り当てられたプログラムを逐次実行することにより、複数のプログラムを擬似並行的に実行する。ここで、タイムスロットとは、プログラムを時分割して実行する場合における、最小のプログラム実行時間枠のことである。
【０１１１】
第１の実施形態における仮想マルチプロセッサ１００では、プレートそのもの、即ち、プログラムの実行順序が規定されているが、第２の実施形態の仮想マルチプロセッサ４００では、まず、タイムスロットの順序が規定され、さらに、タイムスロット毎に実行されるプログラムの候補が用意されている点で第１の実施形態とは異なる。
より具体的には、各タイムスロットには、自タイムスロットへの割り当て候補となる４つ又は１つのプログラムが対応づけられおり、通常、これらのプログラムのうちいずれか１つが前記割り当ての対象となる。原則的には、規定されたタイムスロットの順序にもとづいて各タイムスロットに割り当てられているプログラムが逐次実行される。
【０１１２】
また、仮想マルチプロセッサ４００は、前記割り当ての対象となるプログラムが実行不可能な状態となった場合における処理の内容が、第１の実施形態における仮想マルチプロセッサ１００とは異なる。なお、プロセッサ側からみた実行対象となるプログラムのことを、便宜上、ロジカルプロセッサ（以下、「ＬＰ」という。）という。
図１５には、プログラムの実行位置を示すプログラムカウンタの値、プログラム及びデータの格納位置を示すアドレスなどの制御情報、即ち、コンテキストが格納されているコンテキストメモリ５００も合わせて示している。このコンテキストメモリ５００は、ＳＲＡＭにより構成され、各プログラムに対応するコンテキストが格納されているコンテキスト格納領域５０１を有する。
【０１１３】
コンテキスト格納領域５０１は、コンテキストメモリ５００内の決められた記憶領域にあって、各プログラムに対応するコンテキストの値が格納されている。さらに、図１５には、基準信号を生成する発振器６００と、この基準信号にもとづいて仮想マルチプロセッサ４００に供給するクロックパルスを生成するＰＬＬ６０１とが示されている。
また、これらの機能部の他に、仮想マルチプロセッサ４００に関連し、図示していない以下の機能部がある。即ち、プログラム及びデータなどを格納し、DRAMからなる主メモリと、ＳＲＡＭからなる上述のプログラム及びデータなどを格納するためのキャッシュメモリとが、バスを介して仮想マルチプロセッサ４００に接続されている。
【０１１４】
仮想マルチプロセッサ４００は、時間割付情報格納レジスタ４０２と、処理実行部４１０と、処理制御部４１１と、レジスタ切替部４１２と、スケジューリング制御部４１３と、第１レジスタ群４１４と、第２レジスタ群４１５と、サイクルカウンタ４１６と、外部Ｉ／Ｆ４１７と、ＤＭＡ管理部４１８と、リクエスト検出部４１９と、制御レジスタ４２０と、設定フラグレジスタ４２１と、ＬＰ状態格納レジスタ４２４と、プロセッサ状態格納部４２５と、クロックマスク部４２７とを有する。
【０１１５】
時間割付情報格納レジスタ４０２は、タイムスロット及びプログラムに関する情報が格納されている。より具体的には、この情報は、タイムスロットのプログラム実行時間枠と実行順序などを規定する１）タイムスロット情報と、各タイムスロットにおいて実行されるプログラムの候補を特定するための２）ＬＰ情報と、プログラムの候補の範囲を限定するための３）優先度＆モード情報と、実行可能なプログラムの候補がタイムスロットに存在しない場合における処理の内容を決定するための４）アイドルオプション情報と、実行中のプログラムが中断した場合における処理の内容を決定するための５）タイムオプション情報とからなる。
【０１１６】
タイムスロット毎に、これら５種類の情報が存在し、タイムスロット単位で互いに関連付けられている。第１レジスタ群４１４及び第２レジスタ群４１５は、コンテキストの内容であるプログラムカウンタの値、プログラム及びデータの格納位置を示すアドレスなどのレジスタ値をそれぞれ格納するためのレジスタの集まりである。
レジスタ切替部４１２は、スケジューリング制御部４１３からの指示にしたがい、第１レジスタ群４１４及び第２レジスタ群４１５のうちいずれか１つのレジスタ群をプログラム実行の際に使用するレジスタ群、即ち、カレントレジスタ群として選択する。第１の実施形態と同様に、この選択先の切り替えを、レジスタ切り替えといい、カレントレジスタ群として選択されていない方のレジスタ群をスタンバイレジスタ群ということとする。
【０１１７】
ちなみに、このレジスタ切り替えのことを、コンテキストスイッチングと呼ぶ場合もある。 処理実行部４１０は、プログラム実行するためのＣＰＵなどを有し、上述のレジスタ切り替え、つまり、カレントレジスタ群の選択がなされると、このカレントレジスタ群に格納されているコンテキストにもとづいて、実行するプログラム及びこのプログラムの実行に必要なデータの所在を特定し、ＤＭＡ管理部４１８にこれらプログラム及びこのプログラムの実行に必要なデータを取得するように指示する。
【０１１８】
そして、処理実行部４１０は、プログラムの実行に必要なデータが取得されたとき、処理制御部４１１からの指示にしたがいプログラムの実行を開始する。
また、処理実行部４１０は、プログラムの実行中に、処理が続行できない状況となった場合、プログラムの実行を中断する旨を示すウエイトコードを処理制御部４１１に出力する。
【０１１９】
なお、上述のＣＰＵは、クロックマスク部４２７を介しＰＬＬ６０１から出力されるクロックパルスに同期して駆動しており、このクロックパルスが途絶えた場合、プログラム実行も停止する。ＬＰ状態格納レジスタ４２４は、各プログラムの状態及び属性などを示すプログラム状態情報と各タイムスロットの設定内容が示されたタイムスロット設定情報を格納するためのレジスタである。
【０１２０】
より具体的には、このタイムスロット設定情報は、タイムスロットを特定するためのID（以下。「TS＿ID」という。）と、このタイムスロットの属性を示すコードとからなる。ここで、タイムスロットの属性のコードとして、そのタイムスロットが、定常的に実行されることを原則とするプログラムの実行用として用意されたタイムドリブン型タイムスロットである場合には「ＴＤ」が、また、イベントが発生した場合にのみに実行するような非定常的なプログラム実行のために用意されたイベントドリブン型タイムスロットである場合には「ＥＤ」が示されている。
【０１２１】
つまり、タイムドリブン型タイムスロットは、イベントが発生しなくても、実行対象となり得るが、イベントドリブン型タイムスロットは、イベントが発生したときでなくては、実行対象とはなり得えない。 上述のプログラム状態情報には、プログラムを特定するＩＤの値と、プログラムの状態を特定するコードと、このプログラムの属性を示すコードと、プログラムを起床又は回復させるタイミング（以下、「起床タイミング」という。）を示すコードとが示されている。
【０１２２】
プログラムの状態を特定するコードとしては、waiting、ready、running、suspended-waiting、suspended-ready、non-existentの６つがある。このうち、ready及びrunningは、現在、プログラムが実行できる状況であり、特に、runningは、現在プログラム実行中であることを示す。
また、waiting及びsuspended-waitingは、現在、プログラムが実行できない状態にあることを示す。
【０１２３】
non-existentは、現在、プログラムを実行する必要がない状態にあることを示す。つまり、これらwaiting、suspended-waiting及びnon-existentの状態であるプログラムは、プログラム実行のスケジューリングの対象範囲外となる。
また、プログラム実行中にプログラム実行ができない状態となり、これらコードがsuspended-waitingへと遷移した場合、その時点において割り当てられていたタイムスロットのTS＿IDの値がこれらコードに付されることとなる。
【０１２４】
なお、これらのコードは、プログラム実行が可能となった時点で、それぞれsuspended-readyへと遷移するが、プログラムの実行がなされるまで上述のTS＿IDの値が付されたままとなる。プログラムの属性を示すコードとしては、そのプログラムが、定常的に実行されることを原則とするプログラムである場合には「ＴＤ」が、また、イベントが発生した場合にのみに実行されるプログラムである場合には「ＥＤ」が示されている。
【０１２５】
起床タイミングを示すコードとしては、プログラムの実行要求が発生したときにスタンバイレジスタ群となっているレジスタ群が開放された後、コンテキストを格納して実行するプログラム、つまり、処理時間の制約が少ないプログラムの場合には、「ｎ」が示され、また、既にスタンバイレジスタ群内に格納したコンテキストを入れ替えてまで早急に実行を必要とするプログラムの場合、「e」のコードが示されている。
【０１２６】
制御レジスタ４２０は、現在実行対象となっているタイムスロット及び次の実行対象とすべきタイムスロットを特定する情報を格納するためのレジスタである。より具体的には、制御レジスタ４２０は、現在実行対象となっているタイムスロットに対応するタイムスロット情報が格納されている場所を示すカレントアドレスの値と、次の実行対象とすべきタイムスロットに対応するタイムスロット情報が格納されている場所を示すネクストアドレスの値を格納している。
【０１２７】
仮想マルチプロセッサ４００においては、１６個タイムスロットが設定されており、これに伴い、タイムスロット情報の数も１６存在する。上記１６個のタイムスロットのうち、プログラムの実行に通常用いられるタイムスロットは、４つのみである。なお、この４つのタイムスロットに対応するタイムスロット情報のアドレスの値が、連続した値をとるように、タイムスロット情報が時間割付情報格納レジスタ４０２に格納されている。
【０１２８】
制御レジスタ４２０は、上述の連続したアドレス値における、その値が最も小さい先頭アドレスの値及びその値が最も大きい終端アドレスの値も格納している。各タイムスロット情報は、各タイムスロットを特定するためのＴＳ＿ＩＤの値（０から１５のいずれか）を含んでいる。
このＴＳ＿ＩＤの値が小さいほど、時間割付情報格納レジスタ４０２において、タイムスロット情報が格納されている場所のアドレスの値も小さい。プログラムの実行に通常用いられる上記４つタイムスロットには、０から３までのＴＳ＿ＩＤの値が対応づけられている。つまり、上述の先頭アドレスには、ＴＳ＿ＩＤの値０が示されたタイムスロット情報が格納されており、また、上述の終端アドレスには、ＴＳ＿ＩＤの値３が示されたタイムスロット情報が格納されている。
【０１２９】
上記４つタイムスロットのそれぞれには、優劣関係があり、先頭アドレスに格納されているタイムスロット情報により特定されるタイムスロット(TS_ID=0)が最も優先度が高く、終端アドレスに向かってアドレスの値が大きくなるほど、そのアドレスに格納されているタイムスロットの優先度が低くなる。このタイムスロットの優先度とは、リアルタイム処理が必要とされる度合いを示し、特に、終端アドレスに格納されているタイムスロット情報（TS_ID=3）により特定されるタイムスロットにおいては、リアルタイム処理を保証しない。
【０１３０】
プロセッサ状態格納部４２５は、現在実行中のプログラムの状態に関する情報を格納するレジスタである。この情報は、１）現在においてレジスタ切替部４１２による切り替えが禁止されているか否かを示す切替禁止フラグの値と、２）現在、後述の共通割り込処理が実行されているか否かを示す共通割込フラグの値とからなる。
前記切り替えが禁止及び前記共通割り込みが生じている場合には、それぞれのフラグの値は、１となり、それ以外の場合には０の値をとる。設定フラグレジスタ４２１は、プログラムに関する設定情報を格納するためのレジスタである。より具体的には、この設定情報とは、プログラム毎に用意されているフラグの集まり（以下、「設定フラグ群」という。）であり、これら設定フラグ群の各フラグの値が示す内容は、例えば、自プログラムが受付可能な固有割り込み処理要求又はイベント処理要求の種別などである。
【０１３１】
リクエスト検出部４１９は、プログラム毎に用意されているフラグの集まり（以下、「固有フラグ群」という。）と、各プログラムに共通して用意されているフラグの集まり（以下、「共通フラグ群」という。）を有する。この固有フラグ群の各フラグは、設定フラグレジスタ４２１に格納されている設定フラグ群の各フラグと１対１に対応しており、固有フラグ群を構成するビットデータのビット列長は、設定フラグ群を構成するビットデータのビット列長と同一であり、先頭からのビット位置が同じであれば同じ項目についての値を示している。
【０１３２】
なお、これらのフラグには、各フラグが示す項目に関連する情報、例えば、この項目に対応するプログラムを特定するＩＤなどの関連情報が付されているものがある。リクエスト検出部４１９は、外部Ｉ／Ｆ４１７から受け取った外部信号のビットデータの配列及び値にもとづいて、上述の固有フラグ群及び共通フラグ群の値を更新する。
つまり、リクエスト検出部４１９は、受け取った外部信号を理解可能なデータ形式へと変換する。リクエスト検出部４１９は、更新された共通フラグ群の各フラグの値、及び、設定フラグレジスタ４２１内の設定フラグ群の値と固有フラグ群の値とを照合した結果にもとづいて、この外部信号の内容を把握する。
【０１３３】
このような処理を、便宜的に、外部信号解読処理という。外部信号の内容としては、大別すると、割り込み処理要求とイベント処理要求の２つがある。割り込み処理要求には、さらに、固有割り込み処理要求と共通割り込み処理要求とがある。
ここで、固有割り込み処理要求とは、特定のプログラムのみにおいて実行可能な処理の実行要求であって、この特定のプログラムのみが固有割り込み処理の実行を必要としている。
【０１３４】
また、共通割り込み処理要求とは、全てのプログラムにおいて実行可能な処理の実行要求であって、これらプログラムが共通してこの共通割り込み処理の実行を必要としている。
上述の共通フラグ群は、この共通割り込み処理要求の内容ついて示すものである。なお、これら割り込み処理は、実行可能なプログラム上からサブルーチンプログラムにジャンプして実行される。イベント処理要求とは、実行できない状態となっているプログラム又は現在実行の必要がないプログラムにおいて、実行可能な状態となるイベント又は実行を必要とするイベントが発生したために生じるこれらプログラムの実行要求である。
【０１３５】
より具体的には、リクエスト検出部４１９は、上述の外部信号解読処理の実行により、受け取った外部信号が、固有割り込み処理要求、共通割り込み処理要求及びイベント処理要求のいずれを示すのかを判別する。上記判別結果が、固有割り込み処理要求であった場合、リクエスト検出部４１９は、上述の関連情報により、この固有割り込み処理の割込み先となるプログラムを特定するＩＤ（以下、「固有Ｐ＿ＩＤ」という。）及び固有割り込み処理を実行するサブルーチンプログラムを特定するＩＤ（以下、「固有ＳＰ＿ＩＤ」という。）も取得する。
【０１３６】
また、上記判別結果が、共通割り込み処理要求であった場合、リクエスト検出部４１９は、上述の関連情報により、上述の外部信号から共通割り込み処理を実行するサブルーチンプログラムを特定するＩＤ（以下、「共通ＳＰ＿ＩＤ」という。）を取得する。
また、上記判別結果が、イベント処理要求であった場合、リクエスト検出部４１９は、上述の関連情報により、上述の外部信号から実行要求がなされたプログラムを特定するＩＤ（以下、「イベントＰ＿ＩＤ」という。）を取得する。
【０１３７】
リクエスト検出部４１９は、上述の取得に伴い、取得したこれらＩＤをスケジューリング制御部４１３に出力する。
また、リクエスト検出部４１９は、上述の固有割り込み処理要求、共通割り込み処理要求及びイベント処理要求に応じる処理の実行が完了した旨をスケジューリング制御部４１３から受け取ったとき、完了した処理に該当する項目のフラグの値をデフォルト値に変更する。
【０１３８】
さらに、リクエスト検出部４１９は、上記判別結果が、イベント処理要求であった場合、先に述べたイベントＰ＿ＩＤのスケジューリング制御部４１３への出力に先行して、ＬＰ状態格納レジスタ４２４を参照する。このとき、このイベントＰ＿ＩＤにより特定されるプログラムの属性が「ＥＤ」を示す場合、つまり、このプログラムが非定常的に実行されるイベントドリブン型のプログラムである場合、リクエスト検出部４１９は、後述するサイクル先頭信号の直近の受信時点から現在までにおいて、プログラムの属性が「ＥＤ」であるプログラムを示すＰ＿ＩＤをスケジューリング制御部４１３に出力したことがない場合に限り、このＰ＿ＩＤをスケジューリング制御部４１３に出力するものとする。
【０１３９】
リクエスト検出部４１９は、以上の処理を実施した結果、Ｐ＿ＩＤの出力できなかったものについて、このＰ＿ＩＤを記憶し、次にサイクル先頭信号を受信したときに、スケジューリング制御部４１３に出力するようにする。スケジューリング制御部４１３は、１タイムスロット分のプログラム実行時間枠内において、プログラム実行のスケジューリングを実施し、コンテキストをスタンバイレジスタ群に復帰するための処理（以下、「復帰処理」という。）を実施し、レジスタ切り替えのための処理（以下、「レジスタ切り替え処理」という。）を実施し、スタンバイレジスタ群からコンテキストをコンテキストメモリ５００上に退避するための処理（以下、「退避処理」という。）を実施する機能を有する。（１−１．スケジューリング）まず、上述のスケジューリングについて説明する。
【０１４０】
スケジューリングには、定常的な処理の実行についてのスケジューリングである１）タイムドリブンスケジューリング、現在スケジューリングの対象外となっているプログラムの実行についてのスケジューリングである２）イベントドリブンスケジューリング及びプログラムの実行中にプログラムの実行時間が放棄された場合におけるスケジューリングである３）放棄スケジューリングの３つがある。
【０１４１】
スケジューリング制御部４１３は、これら３つのスケジューリング及びレジスタ切り替え処理の予備的処理として、（１）目的タイムスロット検索処理、（２）目的ＴＳ割り当てプログラム検索処理、（３）優先度＆モード情報検索処理、（４）アイドルオプション情報検索処理及び（５）タイムオプション情報検索処理を実施する。
（１−１−１．目的タイムスロット検索処理）
以下、目的タイムスロット検索処理について説明する。
【０１４２】
スケジューリング制御部４１３は、制御レジスタ４２０内に格納されているカレントアドレスの値、ネクストアドレスの値、先頭アドレスの値及び終端アドレスの値のうち、目的とするいずれか１つのアドレス（以下、「目的アドレス」という。）の値を参照し、時間割付情報格納レジスタ４０２内の目的アドレスに格納されているタイムスロット情報内のＴＳ＿ＩＤの値を参照し、当該タイムスロット（以下、「目的ＴＳ」という。）を特定し、さらに、このタイムスロットに割り当てられているプログラム実行時間枠、即ち、基本サイクルの値を取得する。
（１−１−２．目的ＴＳ割り当てプログラム検索処理）
以下、目的ＴＳ割り当てプログラム検索処理について説明する。
【０１４３】
スケジューリング制御部４１３は、目的ＴＳに対応づけられているＬＰ情報を参照し、このＬＰ情報が示す４つのプログラムを特定し、さらに、これらプログラムそれぞれに対応づけられている優先度（０から３のいずれか）を把握する。
（１−１−３．優先度＆モード情報検索処理）以下、優先度＆モード情報検索処理について説明する。
【０１４４】
スケジューリング制御部４１３は、目的ＴＳに対応づけられている優先度＆モード情報を参照し、優先度として０から３のいずれが示されているのか、さらに、モードとしてIndexモード及びLevelモードのいずれが示されているのかを把握する。上述のIndexモード及びLevelモードとは、タイムスロットへのプログラムの割り付け方を規定する設定情報であり、優先度＆モード情報にIndexモードが示されている場合、ある１つのプログラムのみに対してタイムスロットへの割り付けを試み、また、優先度＆モード情報にLevelモードが示されている場合、指定された優先度よりも上位の優先度を有するプログラムのみに対してタイムスロットへの割り付けを試みられることとなる。
（１−１−４．アイドルオプション情報検索処理）
以下、アイドルオプション情報検索処理について説明する。
【０１４５】
スケジューリング制御部４１３は、アイドルオプション情報検索処理として、目的ＴＳに対応づけられているアイドルオプション情報を参照し、「SWITCH」及び「MICRO-SLEEP」のいずれが示されているのかを判別する。
（１−１−５．タイムオプション情報検索処理）
スケジューリング制御部４１３は、タイムオプション情報検索処理として、目的ＴＳに対応づけられているタイムオプション情報の内容を参照し、「LP_SWITCH」、「TS_SWITCH」及び「MICRO-SLEEP」のいずれが示されているのかを判別する。
（１−２．タイムドリブンスケジューリング）
以下、タイムドリブンスケジューリングについて説明する。
【０１４６】
タイムドリブンスケジューリングとは、通常のプログラム実行に関するスケジューリングである。後述のイベントドリブンスケジューリング及び放棄スケジューリングが実行されない限り、スケジューリング制御部４１３は、タイムドリブンスケジューリングを実行し、これにもとづいて復帰処理、レジスタ切り替え処理及び退避処理を実施する。
スケジューリング制御部４１３は、タイムドリブンスケジューリングとして、以下のスケジューリング処理を実施する。
（１−２−１．スケジューリング処理）
以下、スケジューリング処理について説明する。スケジューリング制御部４１３は、ネクストアドレスを目的アドレスとして先に述べた目的タイムスロット検索処理を実施し、目的ＴＳ（以下、ここでは、「ネクストＴＳ」という。）を特定した後、先に述べた目的ＴＳ割り当てプログラム検索処理を実施してこのネクストＴＳに対応づけられている４つのプログラムを特定し、さらに、これらプログラムそれぞれに対応づけられている優先度を把握する。
【０１４７】
次に、スケジューリング制御部４１３は、先に述べた優先度＆モード情報検索処理を実行し、上述のネクストＴＳに対応づけられている優先度＆モード情報の内容、即ち、優先度及びモードを検索する。検索されたモードがLevelモードであるとき、スケジューリング制御部４１３は、検索された優先度の値以下の値が対応づけられている全てのプログラムを上述の目的ＴＳへと割り当てるプログラムの候補（以下、「候補プログラム」という。）とする。
【０１４８】
検索されたモードがIndexモードであるとき、スケジューリング制御部４１３は、優先度＆モード情報検索処理により検索された優先度の値が対応づけられている１つのプログラムを上述の候補プログラムとする。さらに、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４内の各候補プログラムに対応するプログラム状態情報を参照し、各候補プログラムがそれぞれ実行可能であるか否かを検出する。
【０１４９】
より具体的には、スケジューリング制御部４１３は、候補プログラムのプログラム状態情報がreadyを示している場合に、そのプログラムが実行可能であると判断し、そのプログラムを上述のネクストＴＳへの割り付け候補として有効にする。このようにして有効とされた候補プログラムを、有効候補プログラムという。
スケジューリング制御部４１３は、１つのネクストＴＳに対して、複数の有効候補プログラムが存在する場合には、優先度の値が最も小さな値が対応づけられている有効候補プログラムをこのネクストＴＳへの割り付け対象とする。
【０１５０】
また、スケジューリング制御部４１３は、１つのネクストＴＳに対して、１つの有効候補プログラムが存在する場合には、その有効候補プログラムをこのネクストＴＳへの割り付け対象とする。
有効候補プログラムをネクストＴＳへの割り付け対象とするのに伴い、スケジューリング制御部４１３は、当該ネクストＴＳのタイムスロット情報に有効候補プログラムを特定するＩＤを対応づける。さらに、スケジューリング制御部４１３は、上述の有効候補プログラムの実行が完了したとき、上述のタイムスロット情報から当該有効候補プログラムを特定するＩＤを抹消する。
【０１５１】
また、１つのネクストＴＳに対して、有効候補プログラムが１つも存在しない場合には、スケジューリング制御部４１３は、アイドルオプション情報検索処理を実施することにより得られる情報の内容にもとづいて、その後の処理の内容を決定する。より具体的には、スケジューリング制御部４１３は、上述の情報の内容が、「MICRO-SLEEP」を示す場合、いずれのプログラムも上述のネクストＴＳへの割り当て対象としない。
【０１５２】
なお、このようにしてプログラムが割り当てられなかったタイムスロットをエンプティタイムスロットという。
また、上述の情報の内容が、「SWITCH」を示す場合、スケジューリング制御部４１３は、ネクストアドレスの値に１を加えた値（ただし、ネクストアドレスが終端アドレスであった場合に限り、先頭アドレスの値）を新たなネクストアドレスとし、上述のスケジューリング処理を繰り返し実施する。
【０１５３】
以上のようなタイムドリブンスケジューリングを実施した後、スケジューリング制御部４１３は、復帰処理、レジスタ切り替え処理及び退避処理を実施する。
（１−３．イベントドリブンスケジューリング）以下、イベントドリブンスケジューリングについて説明する。イベントドリブンスケジューリングとは、現在スケジューリングの対象外となっている以下のプログラムの実行要求が生じているとき、前記タイムドリブンスケジューリングに代えて実施されるスケジューリングである。
【０１５４】
実行要求が生じている上述のプログラムとは、即ち、EDの属性を有するプログラムであって、waitingの状態からreadyへと遷移したもの、及び、TD又はEDの属性を有するプログラムであって、suspended- waiting 又はrunningの状態からsuspended-readyの状態となっているプログラムである。なお、スケジューリング制御部４１３は、タイムドリブンスケジューリングを実施しようとしたとき、その直前において、上述のプログラムの実行要求が生じているか否かを判断する。
【０１５５】
スケジューリング制御部４１３は、リクエスト検出部４１９からイベントＰ＿ＩＤを受け取ったとき、受け取ったイベントＰ＿ＩＤによりプログラムを特定し、ＬＰ状態格納レジスタ４２４を参照し、このプログラムの状態とＴＳ＿ＩＤの値、プログラムの属性、起床タイミングを把握し、把握した内容に応じて以下の処理を実施する。
（１−３−１．回復イベント処理）
スケジューリング制御部４１３は、上記特定プログラムの状態がwaiting、属性が「ＴＤ」、起床タイミングが「ｎ」を示す場合、ＬＰ状態格納レジスタ４２４におけるイベントＰ＿ＩＤにより特定される現在のプログラムの状態をreadyに遷移させる。
【０１５６】
スケジューリング制御部４１３は、このような回復イベント処理の実施後、タイムドリブンスケジューリング後に実施する復帰処理、レジスタ切り替え処理及び退避処理を実施する。
（１−３−２．緊急回復イベント処理）
上記特定プログラムの状態がsuspended-waiting、属性が「ＴＤ」、起床タイミングが「ｅ」を示す場合、スケジューリング制御部４１３は、この特定プログラムの状態をsuspended-readyに遷移させる。
【０１５７】
そして、スケジューリング制御部４１３は、この特定プログラムの状態を示すコードに付されているＴＳ＿ＩＤの値からタイムスロット（以下、「特定ＴＳ」という。）を特定し、この特定ＴＳに上述の特定プログラムを割り当てる。このような緊急回復イベント処理を実施した後、スケジューリング制御部４１３は、後述の緊急復帰処理を実施し、また、タイムドリブンスケジューリング後に実施されるレジスタ切り替え処理に代えて、後述の緊急レジスタ切り替え処理を実施する。
（１−３−３．イベント起床処理）また、上記特定プログラムの状態がsuspended-waiting、属性が「ＴＤ」、起床タイミングが「ｎ」を示す場合、ＬＰ状態格納レジスタ４２４におけるイベントＰ＿ＩＤにより特定される現在のプログラムの状態をsuspended-readyに遷移させる。
【０１５８】
さらに、上記特定プログラムの状態がwaiting又はsuspended-waiting、属性が「ＥＤ」、起床タイミングが「ｎ」を示す場合、スケジューリング制御部４１３は、受け取ったイベントＰ＿ＩＤにより特定されるプログラムの状態がwaitingであればreadyに、suspended-waitingであればsuspended-readyに変更する。加えて、スケジューリング制御部４１３は、イベントドリブンスケジューリング後に実施される起床タイミング「ｅ」の緊急レジスタ切り替え処理が発生した場合、その事象の発生によって、実行中のプログラムの状態を属性に関係なくrunningからsuspended-readyへと変更する。
【０１５９】
このイベント起床処理を実施した場合、スケジューリング制御部４１３は、タイムドリブンスケジューリング後に実施される復帰処理に代えて、後述の早期復帰処理を実施し、カウント値０信号の到来をトリガとして、後述のレジスタ切り替え処理を実施する。このようなイベント処理をイベント起床処理という。
（１−３−４．緊急イベント起床処理）また、上記特定プログラムの状態がwaiting又はsuspended-waiting、属性が「ＥＤ」、起床タイミングが「ｅ」を示す場合、スケジューリング制御部４１３は、特定プログラムの状態がwaitingであればreadyに、suspended-waitingであればsuspended-readyに変更する。
【０１６０】
この緊急イベント起床処理を実施した場合、スケジューリング制御部４１３は、タイムドリブンスケジューリング後に実施される復帰処理に代えて、後述の緊急復帰処理を実施し、また、タイムドリブンスケジューリング後に実施されるレジスタ切り替え処理に代えて、後述の緊急レジスタ切り替え処理を実施する。このようなイベント処理を緊急イベント起床処理という。
（１−４．放棄スケジューリング）
スケジューリング制御部４１３が、処理制御部４１１を介して処理実行部４１０からウエイトコードを受け取った場合、もしくは、ＤＭＡ管理部４１８から後に述べるキャッシュミス信号を受け取った場合に実施する放棄スケジューリングについて説明する。
【０１６１】
上述のウエイトコードとは、実行中のプログラムの継続が不可能となったとき、実行中のプログラムに割り当てられている時間が放棄されたことを示すコードであり、このウエイトコードには、「vmp_wait」と、「vmp_sus」とがある。「vmp_wait」コードは、上述の放棄時間が比較的長いことが見込まれる場合に、処理実行部４１０により発せられるコードであり、また、「vmp_sus」コードは、上述の放棄時間が比較的短いことが見込まれる場合に、処理実行部４１０により発せられるコードである。
【０１６２】
スケジューリング制御部４１３は、処理制御部４１１を介して処理実行部４１０から「vmp_wait」コード、「vmp_sus」コード及びキャッシュミス信号を受け取った場合、ＬＰ状態格納レジスタ４２４内に格納されている実行中のプログラムの状態を更新する。より具体的には、「vmp_wait」コードを受け取った場合、スケジューリング制御部４１３は、実行中のプログラムの状態をrunningからwaitingに変更する。
【０１６３】
また、「vmp_sus」コードを受け取った場合、又は、キャッシュミス信号を受け取った場合、スケジューリング制御部４１３は、実行中のプログラムの状態をrunningからsuspended-waitingに変更する。そして、スケジューリング制御部４１３は、カレントアドレスを目的アドレスとして、先に述べたタイムオプション情報検索処理を実施する。
受け取ったウエイトコードが「vmp_sus」の場合、スケジューリング制御部４１３は、タイムオプション情報に関係なく、後述の緊急レジスタ切り替え処理を実施し、退避処理を実施して、さらに後述の制御レジスタ値更新処理を実施する。
【０１６４】
また、受け取ったウエイトコードが「vmp_wait」であり、かつ、タイムオプション情報の内容が「TS_SWITCH」を示す場合においても、上記と同様にスケジューリング制御部４１３は、後述の緊急レジスタ切り替え処理を実施し、退避処理を実施して、さらに後述の制御レジスタ値更新処理を実施する。
なお、前記緊急レジスタ切り替え処理が実施される直前のスタンバイレジスタ群では、タイムドリブンスケジューリングによる復帰処理か、又は、イベントドリブンスケジューリングで実施されるイベント起床処理後の早期復帰処理がなされている。
【０１６５】
また、受け取ったウエイトコードが「vmp_wait」であって、かつ、タイムオプション情報の内容が「LP_SWITCH」を示すとき、スケジューリング制御部４１３は、現在実行対象となっているタイムスロットに有効候補プログラムが存在するか否かを判断し、有効候補プログラムが存在する場合には、有効候補プログラムのうち最も優先度が高いプログラム（有効候補プログラムが１つの場合には、そのプログラム）に対応するコンテキストのレジスタ値をスタンバイレジスタ群に格納、即ち、復帰を実施する。
【０１６６】
その後、スケジューリング制御部４１３は、後述の緊急レジスタ切り替え処理を実施し、退避処理を実施する。
また、有効候補プログラムが存在しない場合、及び、タイムオプション情報の内容が「MICRO-SLEEP」を示す場合、スケジューリング制御部４１３は、処理実行部４１０においてカレントレジスタ群内のレジスタ値の更新を伴わないプログラム実行である後述のNOP実行させるように処理制御部４１１に指示すると共に、以下の処理を実施する。
【０１６７】
即ち、スケジューリング制御部４１３は、直ちにマスク信号のクロックマスク部４２７への出力を開始し、さらに、スタンバイレジスタ群に格納されているコンテキストの内容を参照し、このコンテキストに対応するプログラムの実行に必要なデータが格納されているメモリのアドレスの値を取得し、このアドレスに格納されているデータをキャッシュメモリに書き込むようにＤＭＡ管理部４１８に指示する。
【０１６８】
さらに、スケジューリング制御部４１３は、次にレジスタ切り替え、又は緊急レジスタ切り替えが実施されるとき、マスク信号のクロックマスク部４２７への出力を停止する。スケジューリング制御部４１３は、サイクルカウンタ４１６からカウント値０信号を受け取ったとき、後述のレジスタ切り替え処理及び退避処理を実施する。
次に、復帰処理、緊急復帰処理及び早期復帰処理などの復帰に関する処理について説明する。
（１−５−１．復帰処理）
復帰処理とは、タイムドリブンスケジューリング実施後において、スケジューリング制御部４１３により実施される、レジスタ値をスタンバイレジスタ群に格納するための処理である。
【０１６９】
スケジューリング制御部４１３は、復帰処理として、スタンバイレジスタ群が開放されたとき、即ち、退避が完了したとき、上述のタイムドリブンスケジューリングにより割り当てられたプログラムのコンテキストのレジスタ値を、上述のスタンバイレジスタ群に格納するようにＤＭＡ管理部４１８に指示する。
（１−５−２．緊急復帰処理）
緊急復帰処理とは、イベントドリブンスケジューリングを実施した結果、先に述べた特定プログラムの起床タイミングが「ｅ」を示す場合において、スケジューリング制御部４１３により実施される、レジスタ値をスタンバイレジスタ群に格納するための処理である。
【０１７０】
スケジューリング制御部４１３は、緊急復帰処理として、上述の緊急回復イベント処理又は緊急イベント起床処理を実行が完了したとき、スタンバイレジスタ群に格納されているレジスタ値を退避して、直ちに特定プログラムに対応するコンテキストのレジスタ値を上述のスタンバイレジスタ群に格納、即ち、緊急的な復帰を実施するようにＤＭＡ管理部４１８に指示する。
【０１７１】
なお、上述の退避及び復帰は、レジスタ群単位ではなく、各レジスタ単位で実行することが可能であり、レジスタ毎に退避、復帰を順次実施することにより、これらの退避及び復帰が擬似並行的に実施されることとなる。
（１−５−３．早期復帰処理）
早期復帰処理とは、イベントドリブンスケジューリングを実施した結果、先に述べた特定プログラムの起床タイミングが「ｎ」を示す場合において、スケジューリング制御部４１３により実施される、レジスタ値をスタンバイレジスタ群に格納するための処理である。
【０１７２】
スケジューリング制御部４１３は、早期復帰処理として、スタンバイレジスタ群が開放されたとき、即ち、退避が完了したとき、直ちに特定プログラムに対応するコンテキストのレジスタ値を、上述のスタンバイレジスタ群に格納するようにＤＭＡ管理部４１８に指示する。なお、スケジューリング制御部４１３は、緊急復帰処理と同様に、上述の格納に先行して、スタンバイレジスタ群のレジスタ値の初期化を実施する。
【０１７３】
つづいて、レジスタ切り替え処理及び緊急レジスタ切り替え処理などのレジスタ切り替えに関する処理について説明する。
（１−６−１．レジスタ切り替え処理）
スケジューリング制御部４１３は、サイクルカウンタ４１６からカウント値０信号を受け取ったとき、後述の基本サイクル調整処理を実施し、さらに後述の切り替えタイミング確認処理を行った上でレジスタ切り替えを実施するようにレジスタ切替部４１２に指示する。
【０１７４】
また、スケジューリング制御部４１３は、レジスタ切り替えが完了した旨の通知をレジスタ切替部４１２から受け取ったとき、基本サイクルの値をサイクルカウンタ４１６に出力し、さらに、後述の実時間保存処理及び後述の制御レジスタ値更新処理を実施する。この時、実行対象となっているタイムスロットが先に述べたエンプティタイムスロットである場合、スケジューリング制御部４１３は、基本サイクルの値をサイクルカウンタ４１６に出力するのに伴い、処理実行部４１０においてNOP実行させるように処理制御部４１１に指示すると共に、クロックマスク部４２７へのマスク信号の出力を開始し、さらに、スタンバイレジスタ群に格納されているコンテキストの内容を参照し、このコンテキストに対応するプログラムの実行に必要なデータが格納されているメモリのアドレスの値を取得し、このアドレスに格納されているデータをキャッシュメモリに書き込むようにＤＭＡ管理部４１８に指示する。
【０１７５】
また、スケジューリング制御部４１３は、次にレジスタ切り替え又は緊急レジスタ切り替えが実施されたとき、このマスク信号のクロックマスク部４２７への出力を停止する。
（１−６−１−１．基本サイクル調整処理）
以下、基本サイクル調整処理について説明する。
スケジューリング制御部４１３は、レジスタ切り替えの直前に、ＬＰ状態格納レジスタ４２４を参照し、スタンバイレジスタ群に格納されているレジスタ値群に対応するプログラムの状態がsuspended-readyであるか否かを判断し、suspended-readyである場合には、スタンバイレジスタ群内の後述の残余サイクル値記憶領域から後述の実カウント値を取得する。
【０１７６】
そして、スケジューリング制御部４１３は、次回のプログラム実行時において、このプログラムが割り当てられているタイムスロットのタイムスロット情報に示されている正規の基本サイクルに代えて、この実カウント値をこのプログラムの実行時間、つまり、このプログラムが割り当てられているタイムスロットの基本サイクルとする。
さらに、このタイムスロットのＴＳ＿ＩＤの値が３である場合、即ち、リアルタイム処理を保証しないタイムスロットである場合、スケジューリング制御部４１３は、ＴＳ＿ＩＤの値が３を示すタイムスロット情報内のタイムラグ値を取得し、このタイムラグ値を上述の基本サイクルの値から差し引いたものを、次回のプログラム実行時における新たな基本サイクルとすると共に、このタイムスロット情報内の前記タイムラグ値を０に更新する。
【０１７７】
なお、スケジューリング制御部４１３は、処理制御部４１１からプログラム実行の開始の通知を受け取ったとき、以上のように求められた基本サイクルの値をサイクルカウンタ４１６に出力する。
（１−６−１−２．切り替えタイミング確認処理）
以下、切り替えタイミング確認処理について説明する。
【０１７８】
プログラムを時分割実行する場合、例えば、プログラムの実行に用いられる共有資源などの都合によりプログラムの実行を任意の時間に終了することができない。つまり、任意の時間でレジスタ切り替えを実施することはできない。このため、スケジューリング制御部４１３は、まず、プログラムの終了を処理制御部４１１に依頼し、プログラムの実行の終了が可能な点でプログラムを終了させ、レジスタ切り替えが可能であるか否かを確認する。
【０１７９】
より具体的には、上述の依頼後、スケジューリング制御部４１３は、プロセッサ状態格納部４２５内の切替禁止フラグの値及び共通割り込みフラグの値を参照し、この切替禁止フラグの値及び共通割り込みフラグの値が０である場合にはレジスタ切り替えが可能であり、切替禁止フラグの値及び共通割り込みフラグの値が１である場合にはレジスタ切り替えが不可能であると判断する。
（１−６−１−３．実時間保存処理）
以下、実時間保存処理について説明する。
【０１８０】
スケジューリング制御部４１３は、レジスタ切り替えを実施するようにレジスタ切替部４１２に指示したとき、その時点においてサイクルカウンタ４１６が有するカウント値を取得し、このカウント値（以下、「実カウント値」という。）が正の値をとり、かつ、上述のレジスタ切り替えのトリガとなる「vmp_sus」コードを受け取っている場合、この実カウント値を、前記レジスタ切り替えが実行された結果、スタンバイレジスタ群となるレジスタ群の決められた領域（以下、「残余サイクル値記憶領域」という。）に書き込む。
【０１８１】
このようにすることにより、実行を終了したプログラムの実カウント値が、このプログラムのコンテキストに付され、このコンテキストの退避に伴い、コンテキストメモリ５００へと格納されるため、次回プログラム実行時において、前回のプログラム実行時における実カウント値が取得可能となる。
また、上記実カウント値が負の値をとる場合、もしくは、上記実カウント値が正の値をとり、かつ、上述のレジスタ切り替えのトリガとなる「vmp_wait」コードを受け取っている場合、スケジューリング制御部４１３は、終端アドレスを目的アドレスとして目的タイムスロット検索処理を実施し、これにより特定されるタイムスロット（TS_ID=3）のタイムスロット情報の格納場所を特定し、このタイムスロット情報に格納されているタイムラグ値からこの実カウント値を加えることにより、このタイムラグ値を更新する。
【０１８２】
なお、上述の切り替えタイミング確認処理の説明において述べた理由により、切り替えのタイミングをタイムスロットの基本サイクルと厳密に一致させることはできず、通常、数サイクル程度オーバーして切り替えるため、上述の実カウント値は、負の値をとり、また、プログラムの実行が中断されることによりレジスタ切り替えが行なわれたときなどには、実カウント値は、実行対象となっているタイムスロットの基本サイクル未満となるため正の値をとる。
（１−６−１−４．制御レジスタ値更新処理）
以下、制御レジスタ値更新処理について説明する。
【０１８３】
制御レジスタ値更新処理とは、以下に示すスケジューリングの実施に伴って実行される制御レジスタ４２０内のデータ更新である。上述のスケジューリングの実施とは、即ち、１）タイムドリブンスケジューリングの実施、２）タイムオプション情報の内容が「TS_SWITCH」を示す場合における放棄スケジューリングの実施のことである。
スケジューリング制御部４１３は、現時点におけるネクストアドレスの値を新たなカレントアドレスの値とすると共に、当該ネクストアドレスの値に１を加えた値（ただし、ネクストアドレスが終端アドレスであった場合に限り、先頭アドレスの値）を新たなネクストアドレスとし、これに伴って、制御レジスタ４２０内に格納されているカレントアドレスの値及びネクストアドレスの値を更新する。
【０１８４】
また、スケジューリング制御部４１３は、カレントアドレスの値を、終端アドレスの値から先頭アドレスの値へと移行させたとき、サイクル先頭信号をリクエスト検出部４１９に出力する。
（１−６−２．緊急レジスタ切り替え処理）
以下、緊急レジスタ切り替え処理について説明する。
【０１８５】
スケジューリング制御部４１３は、放棄スケジューリングのタイムオプション処理において、タイムオプション情報の内容が「TS_SWITCH」を示すとき、並びに、イベントドリブンスケジューリング時の緊急回復イベント処理及び緊急イベント起床処理後に緊急復帰処理が完了したときに、上述の基本サイクル調整処理を実施し、さらに上述の切り替えタイミング確認処理を行った上でレジスタ切り替えを実施するようにレジスタ切替部４１２に指示する。
【０１８６】
そして、スケジューリング制御部４１３は、レジスタ切り替えが完了した旨の通知をレジスタ切替部４１２から受け取ったとき、基本サイクルの値をサイクルカウンタ４１６に出力し、さらに、上述の実時間保存処理を実施する。
（１−７−１．退避処理）
スケジューリング制御部４１３は、レジスタ切り替えが完了した旨の通知をレジスタ切替部４１２から受け取ったとき、このレジスタ切り替えによりスタンバイレジスタ群となるレジスタ群に格納されているコンテキストのレジスタ値を、もともとこのコンテキストが格納されていたコンテキストメモリ５００上の記憶領域に上書きする、即ち、退避するようにＤＭＡ管理部４１８に指示する。
【０１８７】
なお、上述のレジスタ切り替えが実施される直前において、実行対象となっていたタイムスロットが先に述べたエンプティタイムスロットであるときにおいても上述の退避を行う。
（１−８−１．固有割込み処理）
また、スケジューリング制御部４１３は、リクエスト検出部４１９から、固有Ｐ＿ＩＤ及び固有ＳＰ＿ＩＤを受け取った場合、以下の処理を実施する。
【０１８８】
即ち、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４を参照し、受け取った固有Ｐ＿ＩＤにより特定されるプログラムが、現在実行中であるか否かを判断し、現在実行中である場合、直ちに処理制御部４１１を介し、処理実行部４１０に受け取った固有ＳＰ＿ＩＤにより特定されるサブルーチンプログラムにジャンプして処理を実行するように指示する。
【０１８９】
また、受け取った固有Ｐ＿ＩＤにより特定されるプログラムが、現在実行中でない場合、スケジューリング制御部４１３は、リクエスト検出部４１９内のフラグを参照することによりこのサブルーチンプログラムの割込み先となるプログラムを特定し、この特定されたプログラムが実行される時に、処理制御部４１１を介して処理実行部４１０にこのサブルーチンプログラムにジャンプして処理を実行するように指示する。
（１−８−２．共通割り込み処理）
また、スケジューリング制御部４１３は、リクエスト検出部４１９から、共通ＳＰ＿ＩＤを受け取った場合、直ちに処理制御部４１１を介し、処理実行部４１０に受け取った共通ＳＰ＿ＩＤにより特定されるサブルーチンプログラムにジャンプして処理を実行するように指示し、処理制御部４１１から当該サブルーチンプログラムの実行開始の通知を受け取ったとき、サイクルカウンタ４１６にカウントダウンを中断するように指示する。
【０１９０】
また、スケジューリング制御部４１３は、処理制御部４１１から上述の共通ＳＰ＿ＩＤにより特定されるサブルーチンプログラムの実行が完了したことを示す通知を受け取ったとき、サイクルカウンタ４１６にカウントダウンの再開を指示するカウント再開信号を出力する。以上のように、スケジューリング制御部４１３は、様々な処理を実行する機能を有する。
【０１９１】
処理制御部４１１は、処理実行部４１０におけるプログラムの実行状況を管理する機能を有し、処理実行部４１０のプログラム実行状況を監視し、処理実行部４１０におけるプログラム実行の開始タイミング及び終了タイミングと、割込み処理の開始タイミング及び終了タイミングを把握する。処理制御部４１１は、これらタイミングが到来するごとに、これらタイミングが到来した旨をスケジューリング制御部４１３に通知する。
【０１９２】
また、処理制御部４１１は、処理実行部４１０からウエイトコードを受け取ったとき、このウエイトコードをスケジューリング制御部４１３に出力する。さらに、処理制御部４１１は、処理実行部４１０におけるプログラム実行が中断できない状態にあるとき、プロセッサ状態格納部４２５内の切替禁止フラグの値を１（デフォルト値は０）にし、また、処理実行部４１０において、共通ＳＰ＿ＩＤにより特定されるサブルーチンプログラムが実行されている間、プロセッサ状態格納部４２５内の共通割り込みフラグの値を１（デフォルト値は０）にする。
【０１９３】
さらに、処理制御部４１１は、処理実行部４１０からレジスタ切替禁止命令を受け取ったとき、プロセッサ状態格納部４２５内の切替禁止フラグの値を１にし、また、処理実行部４１０からレジスタ切替禁止解除命令を受け取ったとき、上記切替禁止フラグの値を０にする。 また、処理制御部４１１は、スケジューリング制御部４１３からNOP実行させる指示を受け取った場合、処理実行部４１０をNOP実行させる。
【０１９４】
ＤＭＡ管理部４１８は、ＤＭＡ転送を円滑に実施し、管理する機能部であり、処理実行部４１０、スケジューリング制御部４１３などの各機能部からの要求にもとづいてＤＭＡ転送を実施する。
また、ＤＭＡ管理部４１８は、各機能部から要求されたＤＭＡ転送が完了したとき、その旨を示す信号（以下、「転送完了信号」という。）を当該機能部及びスケジューリング制御部４１３に出力し、また、処理実行部４１０からの要求に応じ、キャッシュメモリからプログラム及びデータを取得しようとして、キャッシュミスが生じた場合、キャッシュミスが生じたことを示す信号（以下、「キャッシュミス信号」という。）をスケジューリング制御部４１３に出力する。
【０１９５】
外部Ｉ／Ｆ４１７は、外部プロセッサなどの外部機器に接続するインターフェースであり、外部から受け取った信号をスケジューリング制御部４１３およびリクエスト検出部４１９に出力する。サイクルカウンタ４１６は、クロックカウンタを有し、スケジューリング制御部４１３から基本サイクルの値を受け取ったとき、この値をカウンタの初期値としてカウントダウンを開始する。
【０１９６】
サイクルカウンタ４１６は、上述の初期値から１クロック毎に１づつディクリメントすることにより上述のカウントダウンを行い、値が０となったとき、スケジューリング制御部４１３にその旨を示す信号（以下、「カウント値０信号」という。）を出力する。
また、サイクルカウンタ４１６は、スケジューリング制御部４１３からの指示にもとづき、カウントダウンを中断し、再開し、さらに、指示された時点におけるカウンタの値である実カウント値をスケジューリング制御部４１３に出力する。
【０１９７】
クロックマスク部４２７は、スケジューリング制御部４１３からマスク信号を受信している間、処理実行部４１０へのクロックパルスの信号経路を遮断する機能を有する。
（２．データ）図１６は、時間割付情報格納レジスタ４０２及びＬＰ状態格納レジスタ４２４に格納されている情報の内容を示す図である。
時間割付情報格納レジスタ４０２には、１）タイムスロット情報と、２）ＬＰ情報と、３）優先度＆モード情報と、４）アイドルオプション情報と、５）タイムオプション情報とが格納されている。これらの情報は、タイムスロット毎に用意され、互いに関連付けられている。
（２−１−１．タイムスロット情報）タイムスロット情報には、タイムスロットを特定するためのＴＳ＿ＩＤの値と、基本サイクルの値とが含まれている。
【０１９８】
また、ＴＳ＿ＩＤの値が３のタイムスロット情報には、さらに、タイムラグ値が含まれている。
また、スケジューリング制御部４１３によりスケジューリングが実施されると、プログラムが割り当てられたタイムスロットのＴＳ＿ＩＤの値に、このプログラムのＩＤが対応づけられることとなる。
（２−１−２．ＬＰ情報）ＬＰ情報には、タイムスロットへの割り当て候補となるプログラムに関する情報が格納されている。
【０１９９】
１つのタイムスロットへの割り当て候補となるプログラムの属性及び数は、割り当て先のタイムスロットの属性により異なる。即ち、ＴＤの属性を有するプログラムは、必ずＴＤの属性を有するタイムスロットに割り当てられる。
また、ＴＤの属性を有する各タイムスロットには、ＴＤの属性を有する４つの候補プログラムが用意されている。
【０２００】
一方、ＥＤの属性を有するプログラムは、必ずＥＤの属性を有するタイムスロットに割り当てられる。
また、ＥＤの属性を有する各タイムスロットには、ＥＤの属性を有する１つの候補プログラムが用意されているのみである。各ＬＰ情報は、上述の割り当て先のタイムスロットに対応するタイムスロット情報に対応づけられている。
【０２０１】
ＬＰ情報には、プログラムを特定するためのＩＤの値と、優先度を示す値と、このプログラムに対応するコンテキストが格納されているコンテキストメモリ５００上のアドレスの値との組が、割り当て候補となるプログラムの数だけ格納されている。上述の優先度を示す値は、０、１、２、３のいずれかの値であって、割り当て候補となる各プログラム同士の優先度が重複しないように設定されている。
【０２０２】
なお、割り当て候補となるプログラムの数が１つの場合の優先度を示す値は、０となる。
（２−１−３．優先度＆モード情報）
優先度＆モード情報には、タイムスロットへの割り当て候補となるプログラムの指定に関する情報が格納されている。
【０２０３】
即ち、優先度＆モード情報には、優先度を示す０、１、２、３のいずれか１つの値と、モードを示すコード「Ｉ」又は「Ｌ」が格納されている。ここでコード「Ｉ」は、Indexモードを示し、コード「Ｌ」は、Levelモードを示す。この優先度＆モード情報の内容を変更することにより、有効となる候補プログラムの範囲が変化するため、各候補プログラムの実行頻度を設計上好ましい値に近づけることができる。
（２−１−４．アイドルオプション情報）
アイドルオプション情報には、タイムスロットに割り付けようとしたプログラムが全て実行不可能な状態となっている場合におけるプログラム実行動作を決定する情報が格納されている。
【０２０４】
即ち、アイドルオプション情報には、省電力化を示すコード「MICRO-SLEEP」又は高効率なプログラム実行を示すコード「SWITCH」が格納されている。
（２−１−５．タイムオプション情報）
タイムオプション情報には、実行中のプログラムが中断した場合における、中断以降のプログラム実行動作を決定する情報が格納されている。
【０２０５】
即ち、タイムオプション情報には、実行中のプログラムが中断した場合、このプログラムに代えて、このプログラムが属しているタイムスロットに対応づけられている実行可能な別のプログラムをタイムスロットに割り付けることを示すコード「LP_SWITCH」、次のタイムスロットを実行対象とすることを示すコード「TS_SWITCH」、又は、省電力化を示すコード「MICRO-SLEEP」が格納されている。
【０２０６】
ＬＰ状態格納レジスタ４２４には、１）プログラム状態情報と、２）タイムスロット設定情報とが格納されている。
（２−２．プログラム状態情報）
プログラム状態情報には、プログラム毎に、プログラムを特定するためのＩＤと、プログラム状態を示すコード及びプログラムの属性ならびにプログラムを起床又は回復させるタイミングを示すコードが格納されている。
【０２０７】
プログラム状態を示すコードとしては、waiting、suspended-waiting、ready、suspended- ready、running、nonexistentの６つがある。waitingコードは、現在、プログラムの実行時間を放棄しており、かつ、次回プログラム実行時に通常のタイムスロットのプログラム実行時間枠でプログラム実行することを示し、また、suspended-waitingコードは、現在、プログラムの実行時間を放棄しており、かつ、放棄して使用されなかった時間（最大１スロット分）を次回プログラム実行時におけるプログラム実行時間とすることを示す。
【０２０８】
readyコードは、現在、プログラムが実行可能な状態であることを示し、suspended- readyコードは、suspended-waitingコードであったプログラムが、現在、プログラムが実行可能な状態であることを示す。
また、プログラム実行時間が放棄されたことにより、waitingコード、suspended-waitingコード及びsuspended- readyコードの状態に遷移した場合には、これらコードに、前記放棄が生じた時点において割り当て先となっていたタイムスロットのＴＳ＿ＩＤの値が付されている。
【０２０９】
なお、このＴＳ＿ＩＤの値は、実行されるまでクリアされないため、 readyコード及びsuspended-readyコードにも付されている場合がある。runningコードは、現在、プログラムが実行可能な状態であり、かつ、実行中であることを示す。nonexistentコードは、現在、プログラムがスケジューリングの対象範囲外にあることを示す。
ここでスケジューリングの対象範囲外とは、現時点において、候補プログラムにさえなり得ないプログラムの状態を意味する。ちなみに、候補プログラムであって、waiting又はsuspended-waitingの状態となっているものを、候補スケジューリングの対象外ということとする。なお、先に述べたプログラムの回復とは、「ＴＤ」属性のプログラムが、waitingの状態からreadyになったこと、あるいは、「ＴＤ」属性のプログラムがsuspended-waitingの状態から上述したタイミング「ｅ」で、suspended-readyになったことを意味する。
【０２１０】
また、プログラムの起床とは、「ＴＤ」属性のプログラムが、suspended-waitingの状態から上述したタイミング「ｎ」で、suspended-readyになったこと、あるいは、「ＥＤ」属性のプログラムが、waiting又はsuspended-waitingの状態からそれぞれready又はsuspended-readyの状態となったことを意味する。なお、このようなプログラムを起床又は回復させるタイミングを総称して、本実施例では、先に述べたように単に起床タイミングと呼んでいる。
【０２１１】
プログラムの属性を示すコードには、イベントが発生すると候補スケジューリングの対象範囲内となりイベントドリブンスケジューリングにて、タイムドリブンスケジューリングで決定される所定の順番に関係なく、タイムスロットに割り付けられて実行されるイベントドリブン型のプログラムであることを示すコード「ＥＤ」と、イベントが発生すると、候補スケジューリングの対象範囲内となるが、タイムドリブンスケジューリングにより所定の順番まで待ってからタイムスロットに割り付けられて実行されるプログラム、即ち、タイムドリブン型のプログラムであることを示すコード「ＴＤ」がある。
【０２１２】
つまり、ＥＤ属性のプログラムは、waiting又はsuspended‐waitingの状態からそれぞれready又はsuspended‐readyに移行し、イベントドリブンスケジューリングによりタイムスロットに割り付けられ、一方、ＴＤ属性のプログラムはwaitingからreadyに遷移し、タイムドリブンスケジューリングにより、タイムスロットに割り付けられる。
ただし、例外として、タイムドリブン型のプログラムであっても、イベントが発生すると候補スケジューリングの対象範囲内となり、イベントドリブンスケジューリングにて、タイムドリブンスケジューリングで決定される所定の順番に関係なくタイムスロットに割り付けられ実行される場合がある。つまり、この例外とは、タイムドリブン型のプログラムがsuspended‐waitingの状態からsuspended‐readyに遷移し、イベントドリブンスケジューリングにより、タイムスロットに割り付けられる場合である。
【０２１３】
起床タイミングを示すコードには、既にスタンバイレジスタ群への格納が完了したコンテキストを消去してまでも、カウント値０信号を受け取るまで待つことなく緊急的にプログラムを実行する必要があることを示すコード「ｅ」、及び、スタンバイレジスタ群から退避処理が完了した後、スタンバイレジスタ群への格納が完了し、カウント値０信号を受け取ってからプログラムを実行することを示すコード「ｎ」がある。
【０２１４】
設定フラグレジスタ４２１には、プログラム毎に用意された設定フラグ群が格納されている。この設定フラグ群は、各プログラムが許容する割込みやイベントの内容を特定するためのものであり、プログラム毎に用意されている以外は、第１の実施形態において述べた設定フラグ群と同様であるため、ここでは詳細な説明を省略する。
リクエスト検出部４１９には、図１５に示すように、プログラム毎に用意されたＬＰ固有フラグ群及び１つの共通フラグ群が格納されている。ＬＰ固有フラグ群とは、固有割込みに関する情報であり、現在、どのプログラムに対してどのような固有割込みの実行要求が発生しているのかを示す。このＬＰ固有フラグ群は、見かけ上プログラム毎に存在するが、その実態は１つのビット列データであって、各フラグは、割込みを許容するプログラム及び固有割込みの内容に対応するビット位置に存在している。
【０２１５】
つまり、或るプログラムにおいてその内容の割込みを許容する場合には、そのプログラム及び割込みの内容に対応するビット位置に存在するＬＰ固有フラグの値（デフォルト値は０）が１となっている。そのデータ構成については、第１の実施形態において述べた完了通知フラグと同様であるため、ここでは詳細な説明を省略する。
共通フラグ群とは、共通割り込みの実行要求が発生しているか否かを示すフラグの集まりである。ここで、共通割り込みの実行要求とは、どのプログラムにおいても実行可能なサブルーチンプログラムの実行要求を意味する。共通フラグ群の実態は、１つのビット列データであって、割り込んで実行すべきサブルーチンプログラム固有のビット位置が存在する。
【０２１６】
つまり、共通割込み要求が生じているサブルーチンプログラムがある場合に、そのサブルーチンプログラムに対応するビット位置のフラグの値が１（デフォルト値は０）となっている。プロセッサ状態格納部４２５は、切替禁止フラグの値及び共通割り込みフラグの値を格納している。
切替禁止フラグは、例えば、プログラムの実行中において共有資源へアクセスしており、プログラムを即座に中断することができないなどの理由により、現在レジスタ切り替えを実行できない状況にあることを示し、レジスタ切り替えを実行できない間、１（デフォルト値は０）の値をとる。この切替禁止フラグの値は、実行中のプログラムが発する命令により、書き換えが可能である。
【０２１７】
共通割り込みフラグは、現在、共通割り込みの処理が実行中であることを示し、共通割り込みの処理が実行されている間、１（デフォルト値は０）の値をとる。
（３．動作）
以下、仮想マルチプロセッサ４００において、１つのプロセッサにより擬似並行的にプログラムを実行する際、効率的なプログラムの実行を実現する処理について説明する。
【０２１８】
図１７は、仮想マルチプロセッサ４００において実施される処理を示すフローチャートである。処理実行部４１０は、処理制御部４１１からの指示にもとづいて、プログラムの実行を開始する（ステップＳ１００）。このプログラム実行に並行して、スケジューリング制御部４１３は、スタンバイレジスタ群に格納されているレジスタ値を対象とする退避処理を実施し（ステップＳ１０１）、リクエスト検出部４１９は、外部Ｉ／Ｆ４１７から受け取った外部信号にもとづいて、イベント処理要求が発生しているか否かを判別する（ステップＳ１０２）。
【０２１９】
イベント処理要求が発生している場合、リクエスト検出部４１９は、イベントＰ＿ＩＤをスケジューリング制御部４１３に出力する。スケジューリング制御部４１３は、このイベントＰ＿ＩＤにもとづいて、イベントドリブンスケジューリングを実施する（ステップＳ１０３）。なお、イベントドリブンスケジューリング実施後に実施される処理の内容は、イベントドリブンスケジューリングの実施結果により異なる。
【０２２０】
イベント処理要求が発生していない場合、スケジューリング制御部４１３は、目的ＴＳをネクストＴＳとし（ステップＳ１０４）、タイムドリブンスケジューリングを実施し（ステップＳ１０５）、さらに、復帰処理を実施する（ステップＳ１０６）。そして、リクエスト検出部４１９は、割込み処理要求が発生しているか否かを判別し（ステップＳ１０７）、割込み処理要求が発生している場合、割込みの種別に応じて、固有Ｐ＿ＩＤ、固有ＳＰ＿ＩＤ及び共通ＳＰ＿ＩＤなどをスケジューリング制御部４１３に出力する。
【０２２１】
これらＩＤを受け取ったとき、スケジューリング制御部４１３は、割込み処理を実行する（ステップＳ１０８）。一方、割込み処理要求が発生していない場合、スケジューリング制御部４１３は、ウエイトコード及びキャッシュミス信号にもとづいて、プログラム実行時間の放棄又はキャッシュミスが発生しているか否かを判断し（ステップＳ１０９）、これらが発生している場合には、放棄スケジューリングを実施する（ステップＳ１１０）。
【０２２２】
なお、放棄スケジューリング実施後に実施される処理の内容は、放棄スケジューリングの実施結果により異なる。一方、プログラム実行時間の放棄又はキャッシュミスが発生していない場合、スケジューリング制御部４１３は、カウント値０信号をサイクルカウンタ４１６から受け取ったとき、処理実行部４１０におけるプログラム実行を終了させ（ステップＳ１１１）、レジスタ切り替え処理を実施した後（ステップＳ１１２）、処理実行部４１０によるプログラム実行を開始するステップＳ１００に戻る。
【０２２３】
図１８は、スケジューリング制御部４１３により実施されるタイムドリブンスケジューリングの内容を示すフローチャートである。まず、目的ＴＳをネクストＴＳとした場合の動作を説明する。スケジューリング制御部４１３は、図１８（Ａ）のステップＳ１０４の処理に引き続き、目的タイムスロット検索処理を実施する（ステップＳ１２０）。
より具体的には、スケジューリング制御部４１３は、時間割付情報格納レジスタ４０２内のネクストアドレスに格納されているタイムスロット情報を参照し、タイムスロットを特定するＴＳ＿ＩＤによりネクストＴＳを特定し、さらに、このタイムスロットに割り当てられている基本サイクルの値を取得する。そして、スケジューリング制御部４１３は、目的ＴＳ割り当てプログラム検索処理を実施する（ステップＳ１２１）。
【０２２４】
より具体的には、スケジューリング制御部４１３は、ネクストＴＳに対応づけられているＬＰ情報を参照し、このＬＰ情報が示す候補プログラムを特定し、さらに、これらプログラムそれぞれに対応づけられている優先度を把握する。そして、スケジューリング制御部４１３は、優先度＆モード情報検索処理を実施する（ステップＳ１２２）。
より具体的には、スケジューリング制御部４１３は、ネクストＴＳに対応づけられている優先度＆モード情報を参照し、優先度として０から３のいずれが示されているのか、さらに、モードとしてIndexモード及びLevelモードのいずれが示されているのかを把握する。
【０２２５】
また、スケジューリング制御部４１３は、アイドルオプション情報検索処理を実施する（ステップＳ１２３）。
より具体的には、スケジューリング制御部４１３は、ネクストＴＳに対応づけられているアイドルオプション情報を参照し、「SWITCH」及び「MICRO-SLEEP」のいずれが示されているのかを判別する。つづいて、スケジューリング制御部４１３は、スケジューリング処理を実施する（ステップＳ１２４）。
【０２２６】
より具体的には、スケジューリング制御部４１３は、目的タイムスロット検索処理により得られたネクストＴＳに対応づけられている４つのプログラムを特定し、目的ＴＳ割り当てプログラム検索処理により、これらプログラムそれぞれに対応づけられている優先度を把握する。そして、スケジューリング制御部４１３は、優先度＆モード情報検索処理により得られた、優先度及びモードにもとづいて、上記４つのプログラムから候補プログラムを選出する。
【０２２７】
さらに、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４内の各候補プログラムに対応するプログラム状態情報を参照し、各候補プログラムがそれぞれ実行可能であるか否かを検出し、候補プログラムから有効候補プログラムを選出する。このとき、有効候補プログラムが複数ある場合、優先度の値が最も小さな値が対応づけられている有効候補プログラムをこのネクストＴＳへの割り付け対象とする。
【０２２８】
また、有効候補プログラムが１つも存在しない場合には、スケジューリング制御部４１３は、アイドルオプション情報検索処理を実施することにより得られる情報の内容にもとづいて、その後の処理の内容を決定する。即ち、上述の情報の内容が、「MICRO-SLEEP」を示す場合、スケジューリング制御部４１３は、いずれのプログラムも上述のネクストＴＳへの割り当て対象としない。
【０２２９】
この場合、スケジューリング制御部４１３は、このネクストＴＳが実行対象となっている期間、処理実行部４１０にＮＯＰ実行させる共に、クロックマスク部４２７に処理実行部４１０へのクロックパルスの供給を遮断させる。
また、上述の情報の内容が、「SWITCH」を示す場合、スケジューリング制御部４１３は、ネクストアドレスの値に１を加えた値（ただし、ネクストアドレスが終端アドレスであった場合に限り、先頭アドレスの値）を新たなネクストアドレスとし、ステップＳ１２０からＳ１２４のスケジューリング処理を繰り返し実施する。
【０２３０】
以上の処理が終了したとき、割込み処理要求が発生しているか否かを判別する上述のステップＳ１０６へと移行する。なお、目的ＴＳをカレントＴＳとする場合の動作については、後述する。図１９は、スケジューリング制御部４１３により実施されるイベントドリブンスケジューリングの内容を示すフローチャートである。
スケジューリング制御部４１３は、リクエスト検出部４１９から受け取ったイベントＰ−ＩＤによりプログラムを特定する。
【０２３１】
また、スケジューリング制御部４１３は、実行中のプログラムがイベントドリブンスケジューリングにより緊急レジスタ切り替えすることで中断させられるとき、中断させられるこのプログラムを特定する（ステップＳ１３０）。
さらに、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４を参照し、このプログラムの属性、状態、起床タイミングを判別する。そして、スケジューリング制御部４１３は、以下に示す（１）から（３）のいずれかに該当しているか否かを判断する（ステップＳ１３１）。
（１）プログラムの属性がＥＤである。
（２）プログラムの属性がＴＤであって、プログラム状態がsuspended‐waitingであり、かつ、起床タイミングが「ｎ」である。
（３）running状態であったプログラムがイベントドリブンスケジューリングにより緊急レジスタ切り替えされた。
【０２３２】
この判定の結果、該当しなかった場合、つまり、「いいえ」のとき、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４を参照し、このプログラムの起床タイミングが「ｅ」であるか否かを判別し（ステップＳ１３２）、「ｅ」でない場合、即ち、「ｎ」である場合、回復イベント処理を実施する。より具体的には、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４に示されているこのプログラムの状態がwaitingであればreadyに変更する。
【０２３３】
この後、タイムドリブンスケジューリングを実施する上述のステップＳ１０４へと移行する。
また、ステップＳ１３２における判別結果が、「ｅ」である場合、スケジューリング制御部４１３は、先に述べた緊急回復イベント処理を実施し（ステップＳ１３４）、先に述べた緊急復帰処理を実施し（ステップＳ１３５）、さらに、先に述べた緊急レジスタ切り替え処理を実施した後（ステップＳ１３６）、上述のステップＳ１００へと移行させる。
【０２３４】
また、上述のステップＳ１３１において、判定の結果、該当した場合、即ち、「はい」の場合、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４を参照し、このプログラムの起床タイミングが「ｅ」であるか否かを判別し（ステップＳ１３７）、「ｅ」でない場合、即ち、「ｎ」である場合、先に述べたイベント起床処理を実施し（ステップＳ１４１）、先に述べた早期復帰処理を実施し（ステップＳ１４２）、上述のステップＳ１０７へと移行させる。
【０２３５】
また、上述のステップＳ１３７における判別において、起床タイミングが「ｅ」である場合、スケジューリング制御部４１３は、先に述べた緊急イベント起床処理を実施し（ステップＳ１３８）、先に述べた緊急復帰処理を実施し（ステップＳ１３９）、さらに、先に述べた緊急レジスタ切り替え処理を実施した後（ステップＳ１４０）、上述のステップＳ１００へと移行させる。
【０２３６】
図２０は、上述のステップＳ１０８において実施される割込み処理の内容を示すフローチャートである。スケジューリング制御部４１３は、リクエスト検出部４１９から受け取る固有Ｐ＿ＩＤ、固有ＳＰ＿ＩＤ及び共通ＳＰ＿ＩＤにもとづいて、共通割込み処理の要求が発生しているか否かを判別する（ステップＳ１５０）。
共通割込み処理の要求が発生している場合、即ち、リクエスト検出部４１９から共通ＳＰ＿ＩＤを受け取った場合、スケジューリング制御部４１３は、この共通ＳＰ＿ＩＤにより特定されるサブルーチンプログラムが実行されている間、サイクルカウンタ４１６におけるカウントダウンを中断させる（ステップＳ１５１〜ステップＳ１５２）一方、共通割込み処理の要求が発生しておらず、固有割込み処理の要求が発生している場合、つまり、リクエスト検出部４１９から固有Ｐ＿ＩＤ及び固有ＳＰ＿ＩＤを受け取った場合、スケジューリング制御部４１３は、この固有ＳＰ＿ＩＤにより特定されるサブルーチンプログラムが実行されている間、サイクルカウンタ４１６におけるカウントダウンについては特に何もしない（ステップＳ１５３〜ステップＳ１５４）。
【０２３７】
以上の処理が実行された後、上述のステップＳ１０９へと移行する。図２１は、上述のステップＳ１１０において実施される放棄スケジューリングの内容を示すフローチャートである。スケジューリング制御部４１３は、ＤＭＡ管理部４１８からキャッシュミス信号を受け取ったか否かを判別し（ステップＳ１６０）、キャッシュミス信号を受け取っている場合、実行中のプログラムのプログラム状態をsuspended-waitingに変更し（ステップＳ１６１）、先に述べたタイムオプション情報検索処理を実施する（ステップＳ１６２）。
【０２３８】
また、キャッシュミス信号を受け取っていない場合、スケジューリング制御部４１３は、さらに、「vmp_sus」コードを受け取っているか否かを判別し（ステップＳ１６３）、「vmp_sus」コードを受け取っている場合、実行中のプログラムのプログラム状態をsuspended-waitingに変更し（ステップＳ１６１）、先に述べたタイムオプション情報検索処理を実施する（ステップＳ１６２）。
【０２３９】
上述のステップＳ１６３における判別において、「vmp_sus」コードを受け取っていない場合、必然的に「vmp_wait」コードを受け取っているので、スケジューリング制御部４１３は、実行中のプログラムのプログラム状態をwaitingに変更し（ステップＳ１６６）、先に述べたタイムオプション情報検索処理を実施する（ステップＳ１６２）。
スケジューリング制御部４１３は、このタイムオプション情報検索処理を実行することにより、タイムオプション情報の内容を認識する。そして、スケジューリング制御部４１３は、タイムオプション情報の内容が「MICRO-SLEEP」を示すか否かを判別し、（ステップＳ１６５）タイムオプション情報の内容が「MICRO-SLEEP」である場合、処理制御部４１１を介して処理実行部４１０にｎｏｐ実行させ（ステップＳ１６６）、上述のステップＳ１０２へと移行させる。
【０２４０】
また、タイムオプション情報の内容が「MICRO-SLEEP」でない場合、スケジューリング制御部４１３は、さらに、タイムオプション情報の内容が「TS_SWITCH」を示すか否かを判別し、「TS_SWITCH」を示す場合、緊急レジスタ切り替え処理を実施し（ステップＳ１６８）、上述のステップＳ１００へと移行させる。
また、タイムオプション情報の内容が「TS_SWITCH」を示していない場合、タイムオプション情報の内容は、必然的に「LP_SWITCH」となるので、スケジューリング制御部４１３は、ここでは、目的ＴＳをカレントＴＳとし（ステップＳ１６９）、先に述べたタイムドリブンスケジューリングを実施する（ステップＳ１７０）。
【０２４１】
ここで、ステップＳ１７０において実施するタイムドリブンスケジューリングの内容について、ステップＳ１０５において実施するタイムドリブンスケジューリングの内容との相違点を挙げつつ説明する。上記２つのタイムドリブンスケジューリングの内容について、以下の２つの違いがある。
即ち、ステップＳ１７０において実施するタイムドリブンスケジューリングでは、目的ＴＳがネクストＴＳではなくカレントＴＳであるという点と、スケジューリング処理を実施した結果、有効候補プログラムが存在しないときにアイドルオプション情報とは無関係にＮＯＰ実行へと移行するという点である。より具体的には、図１８（Ｂ）ステップＳ１６９の処理にひき続き、スケジューリング制御部４１３は、目的タイムスロット検索処理を実施する（ステップＳ１２０）。
【０２４２】
つまり、スケジューリング制御部４１３は、時間割付情報格納レジスタ４０２内のカレントアドレスに格納されているタイムスロット情報を参照し、タイムスロットを特定するＴＳ−ＩＤによりカレントＴＳを特定し、さらに、このタイムスロットに割り当てられている基本サイクルの値を取得する。そして、スケジューリング制御部４１３は、目的ＴＳ割り当てプログラム検索処理を実施し（ステップＳ１２１）、優先度＆モード情報検索処理を実施する（ステップＳ１２２）。
【０２４３】
つづいて、スケジューリング制御部４１３は、アイドルオプション情報検索処理を実施し（ステップＳ１２３）、スケジューリング処理を実施する（ステップＳ１２４）。より具体的には、スケジューリング制御部４１３は、目的タイムスロット検索処理により得られたカレントＴＳに対応付けられている４つのプログラムを特定し、目的ＴＳ割り当てプログラム検索処理により、これらプログラムそれぞれに対応づけられている優先度を把握する。
【０２４４】
そして、スケジューリング制御部４１３は、優先度＆モード情報検索処理により得られた、優先度及びモードにもとづいて、上記４つのプログラムから候補プログラムを選出する。さらに、スケジューリング制御部４１３は、ＬＰ状態格納レジスタ４２４内の各候補プログラムに対応するプログラム状態情報を参照し、各候補プログラムがそれぞれ実行可能であるか否かを検出し、候補プログラムから有効候補プログラムを選出する。
【０２４５】
このとき、有効候補プログラムが複数ある場合、優先度の値が最も小さな値が対応付けられている有効候補プログラムをこのカレントＴＳへの割り付け対象とする。もし、有効候補プログラムが1つも存在しない場合には、取得したアイドルオプションに関わりなく有効候補プログラムが存在しないことを記憶する。
以上の処理が、目的ＴＳをカレントＴＳとするステップＳ１７０におけるタイムドリブンスケジューリングである。このようなタイムドリブンスケジューリングを実行した後、スケジューリング制御部４１３は、有効候補プログラムがあるか否かを判断する（ステップＳ１７１）。
【０２４６】
有効候補プログラムがない場合、スケジューリング制御部４１３は、処理制御部４１１を介して処理実行部４１０にｎｏｐ実行させると共に（ステップＳ１６６）、ｎｏｐ実行させている間、クロックマスク部４２７に処理実行部４１０へのクロック供給を遮断するように指示し、上述のステップＳ１０２へと移行させる。
この指示の結果、処理実行部４１０へのクロックの供給は、遮断される。一方、有効候補プログラムがある場合、復帰処理を実施し（ステップＳ１７２）、緊急レジスタ切り替え処理を実施して（ステップＳ１６８）、上述のステップＳ１００へと移行させる。
（４．プロセッサ駆動時におけるプログラム実行状況）以下、仮想マルチプロセッサ４００の駆動時におけるプログラム実行状況について説明する。
（４−１．基本的なプログラム実行状態）
仮想マルチプロセッサ４００では、先に述べたように、複数のタイムスロット及び各タイムスロットに割り当てられたプログラムにもとづいてプログラム実行される。
【０２４７】
図２２は、このタイムスロットについて説明する図である。以下、便宜上、各タイムスロットを、ＴＳｎ（ｎは、０から１５までの整数）と記し、このｎの値は、タイムスロット毎に固有であるものとする。設定上１６個のタイムスロット用意されており、このうち４つのタイムスロット（ＴＳ０〜ＴＳ３）が通常のスケジューリングに用いられるタイムドリブン型のタイムスロットである。
【０２４８】
つまり、ＴＳ０からＴＳ３までの各タイムスロットに割り当てられている１つのプログラムが順次実行され、ＴＳ３のタイムスロットに割り当てられているプログラムの実行が終了すると、また、ＴＳ０のタイムスロットに割り当てられているプログラムから実行されることとなる。ＴＳ０からＴＳ２までのタイムスロットは、映像や音声などを対象とするリアルタイムでの処理を前提とするプログラム実行用のタイムスロットである。
【０２４９】
また、ＴＳ３（TS_ID=3）は、リアルタイムでの処理を前提としないプログラム実行用のタイムスロットである。その他のタイムスロット（ＴＳ４〜ＴＳ１５）は、イベントが発生したときに起床するイベントドリブン型のタイムスロットである。図２２（ａ）に示すように、各タイムスロットは、基本サイクルの値が対応づけられており、この基本サイクルの値に相当する時間が、プログラム実行時間枠となる。
【０２５０】
図２２（ｂ）に示すように、切り替えのタイミングをタイムスロットの基本サイクルと厳密に一致させることはできず、通常、数サイクル程度オーバーして切り替わる。仮想マルチプロセッサ４００では、先に述べた基本サイクル調整処理を実施することにより、ＴＳ０からＴＳ３までのタイムスロットにおいて、実行時間枠からオーバーした時間をＴＳ３のタイムスロットの実行時間枠から差し引き、実行時間に破綻を来たさないようにする。
【０２５１】
また、仮想マルチプロセッサ４００では、実行予定のプログラムに割り当てられているプログラム実行時間が放棄されている場合、効率的なプログラム実行又は省電力化を図るための措置の内容を決定するものとして、タイムオプション情報及びアイドルオプション情報の２つの情報がある。
（４−２．放棄時におけるタイムオプション情報にもとづくプログラム実行状態）タイムオプション情報とは、先に述べたように、プログラム実行中にこのプログラムが実行不可能となり、このプログラムの実行時間が放棄された以後のプログラム実行の内容を決定するタイムスロットについての情報である。
【０２５２】
図２３は、プログラム実行時間が放棄された場合のタイムオプション情報にもとづくプログラム実行状態、即ち、タイムオプション情報検索処理によるプログラム実行状態について説明する図である。以下、便宜上、各プログラムを、ＬＰｍ（ｍは、０から３１までの整数）と記し、このｍの値は、プログラム毎に固有であるものとする。
図２３（ａ）に示すように、タイムドリブン型のタイムスロットであるＴＳ０、ＴＳ１、ＴＳ２及びＴＳ３において、有効な候補プログラムがある場合、各タイムスロットの実行時間枠内で順次プログラムが実行される。ここで、ＴＳ０にはＬＰ０が、ＴＳ１にはＬＰ１が、ＴＳ２にはＬＰ２が、ＴＳ３にはＬＰ３がそれぞれ割り当てられている。
【０２５３】
図２３（ｂ）に示すように、ＴＳ１の実行時間枠においてＬＰ１の実行中に、処理実行部４１０による「vmp_wait」コード出力をトリガとして、プログラム実行時間の放棄が行なわれ、かつ、このＴＳ１のタイムオプション情報が「LP_SWITCH」を示す場合には、先に述べた各機能部における処理が実行されることにより、以下のようにプログラム実行される。
【０２５４】
即ち、このＴＳ１の実行時間枠を使いきるまで、ＬＰ１に代わって、同じＴＳ１に対応づけられ実行可能な状態となっている有効候補プログラムであって、最も優先度が高い候補プログラムであるＬＰ４が実行される。このとき、スタンバイレジスタ群に格納されていたＬＰ２に対応するコンテキストのレジスタ値は一旦破棄され、ＬＰ４に対応するコンテキストのレジスタ値が格納される。
【０２５５】
このような破棄やＬＰ４の復帰を行い、ＬＰ４の実行が開始されるまでにｔ２の時間を要する。通常、このｔ２は、サイクルカウンタ４１６によるパルス出力のおよそ３０サイクル分に相当する時間である。ところで、ＴＳ１に有効候補プログラムが１つもないとき、もはやこのタイムスロットにおいてのプログラム実行は不可能となり、このような場合、スケジューリング制御部４１３は、後述のＴＳ１のタイムオプション情報が「MICRO-SLEEP」を示す場合におけるプログラム実行と同様のプログラム実行を行うように制御するものとする。
【０２５６】
なお、有効候補プログラムが１つもないために、実行対象範囲外となったＴＳ１のようなタイムスロットをスリーピングタイムスロットという。上述のプログラム実行時間の放棄が行なわれ、かつ、このＴＳ１のタイムオプション情報が「TS_SWITCH」を示す場合には、以下のようにプログラム実行される。
即ち、図２３（ｃ）に示すように、速やかにレジスタ切り替えが行われ、次のＴＳ２に割り当てられているＬＰ２が繰り上げられて実行される。このとき、スタンバイレジスタ群には、既に、ＬＰ２が格納されているため、ＬＰ２が速やかに実行される。
【０２５７】
また、上述のプログラム実行時間の放棄が行なわれ、かつ、このＴＳ１のタイムオプション情報が「MICRO-SLEEP」を示す場合には、図２３（ｄ）に示すように、このＴＳ１の実行時間枠を使いきるまで、本来実行するプログラムとは無関係な意味のないプログラムの実行、即ち、ｎｏｐ実行される。
なお、上述のｎｏｐ実行されている間、処理実行部４１０へのクロックの出力が遮断され、その結果、駆動電力が低減される。
（４−３．放棄時におけるアイドルオプション情報にもとづくプログラム実行状態）アイドルオプション情報とは、先に述べたように、あるタイムスロットにおいて有効な候補プログラムが１つも存在しない場合におけるプログラム実行の内容を決定するタイムスロットについての情報である。
【０２５８】
図２４（ａ）、（ｂ）、（ｃ）は、タイムドリブン型のタイムスロットにおいて、有効な候補プログラムが１つもない場合のアイドルオプション情報にもとづくプログラム実行の状況を説明する図である。図２４（ａ）は、タイムドリブン型の各タイムスロットにおいて、有効な候補プログラムが少なくとも１つある場合のプログラム実行状況を示す。
このような状況を前提とし、以下、ＴＳ１において、有効な候補プログラムが１つも存在しないこととなった場合のプログラム実行について説明する。ＴＳ１において、有効な候補プログラムが１つも存在せず、かつ、このＴＳ１のアイドルオプション情報が「SWITCH」を示す場合には、先に述べた各機能部における処理が実行されることにより、図２４（ｂ）に示すように、ＴＳ１に代わり、ＴＳ２に割り当てられているＬＰ２が実行される。
【０２５９】
また、ＴＳ１において、有効な候補プログラムが１つも存在せず、かつ、このＴＳ１のアイドルオプション情報が「MICRO-SLEEP」を示す場合には、図２４（ｃ）に示すように、このＴＳ１の実行時間枠を使いきるまでｎｏｐ実行される。なお、上述のｎｏｐ実行されている間、処理実行部４１０、即ち、ＣＰＵへのクロックパルスの出力が遮断され、その結果、駆動電力が低減される。
（４−４．ウエイト状態解消時におけるプログラム実行状態）vmp_susコード出力をトリガとして、実行中であったプログラムは実行不可能な中断状態（suspended‐waiting）となる。
【０２６０】
また、緊急レジスタ切り替えをともなって他のプログラムにより中断されたときに、実行中であったプログラムは実行可能な中断状態（suspended‐ready）となる。これらのプログラムが実行中に割り付けられていたタイムスロットを中断タイムスロットといい、上述したとおりプログラムのＰ＿ＩＤがＴＳ＿ＩＤに関連付けられて記憶されている。
上述の実行不可能な中断状態となったプログラムは、ウエイト状態が解消したときに有効候補プログラムとなる。
【０２６１】
また、他のプログラムにより中断させられたプログラムは、実行可能な中断状態となったときに有効候補プログラムとなる。以下、一旦中断させられたプログラムが有効候補プログラムとなり、中断タイムスロットに割り付けられてタイムスロットの途中から実行を再開する状況について説明する。
図２５（ａ）、（ｂ）は、このような状況におけるプログラムの実行状況を説明する図である。図２５（ａ）は、ＴＳ０からＴＳ３の４つのタイムスロットのうち、既にＴＳ３が、中断タイムスロットとなっており、処理実行部４１０からの「vmp_sus」コード出力をトリガとして、ＴＳ０に割り当てられているＬＰ０が有効でなくなり、新たにＴＳ０が中断タイムスロットとなった場合のプログラムの実行状況を示す。
【０２６２】
このとき、ＴＳ０においては、設定されている実行時間枠に相当する時間t３が使いきられていない。「vmp_sus」コードを受け取った場合、スケジューリング制御部４１３は、ＬＰ０のプログラム状態をsuspended-waitingに更新し、実行時間枠内において使われずに残った時間t4を実カウント値としてコンテキスト内に保存する。
そして、図２５（ａ）に示すように、ＴＳ１及びＴＳ２のみが繰り返し実行対象となる。図２５（b）は、中断タイムスロットとなったＴＳ０に割り当てられているＬＰ０にウエイト状態の解消、つまり、実行不可能な中断状態（suspended-waiting）の解消が生じ、かつ、ＬＰ状態格納レジスタ４２４においてＬＰ０の起床タイミングが「ｎ」、即ち通常に起床させる旨を示す場合におけるプログラムの実行状況を示す。
【０２６３】
この場合、スケジューリング制御部４１３は、図２５（b）に示すように、実行不可能な中断状態の解消が生じたとき、ＬＰ０のプログラム状態をsuspended-readyに更新するが、即座にＬＰ０を実行させようとせず、カウント値０信号を待って、他のＴＳでのプログラム実行を中断させないタイミングで、ＬＰ０を実行するように制御する。
これにより、実行不可能な中断状態の解消が生じた時点において、既に、スタンバイレジスタ群に格納されているレジスタ値が使用され、この格納が無駄とならない。このとき、スケジューリング制御部４１３は、コンテキスト内に保存されている実カウント値分の時間t4だけ、ＬＰ０を実行するように制御する。
【０２６４】
なお、このＬＰ０の実行は、イベントドリブンスケジューリングによりなされる。そして、これにつづいて、通常のタイムドリブンスケジューリングにより実行対象となったＴＳ０に割り当てられているＬＰ０がｔ３だけ実行されることとなる。
以下、上述のケースにおいて、ＬＰ状態格納レジスタ４２４におけるＬＰ０の起床タイミングが「ｅ」を示している場合における、ウエイトの解消時、つまり、実行不可能な中断状態が解消したときのプログラム実行状況について説明する。
（４−５．緊急的な復帰イベント発生時におけるプログラム実行状態）図２６（ａ）は、図２５（ａ）と同様に、ＴＳ０からＴＳ３の４つのタイムスロットのうち、既にＴＳ３が、中断タイムスロットとなっており、処理実行部４１０からの「vmp_sus」コード出力をトリガとして、ＴＳ０に割り当てられているＬＰ０が有効でなくなり、新たにＴＳ０が中断タイムスロットとなった場合のプログラムの実行状況を示す。
【０２６５】
このとき、ＴＳ０においては、設定されている実行時間枠ｔ５が全て使い切られていない。
また、図２５（ａ）と同様に、「vmp_sus」コードを受け取った場合、スケジューリング制御部４１３は、ＬＰ０のプログラム状態をsuspended-waitingに更新し、実行時間枠内において使われずに残った時間t６を実カウント値としてコンテキスト内に保存する。
【０２６６】
図２６（b）は、スリーピングタイムスロットとなったＴＳ０に割り当てられているＬＰ０にウエイトの解消、つまり、実行不可能な中断状態の解消が生じ、かつ、ＬＰ状態格納レジスタ４２４においてＬＰ０の起床タイミングが「ｅ」、即ち緊急的に起床させる旨を示している場合におけるプログラムの実行状況を示す。
この場合、スケジューリング制御部４１３は、図２６（b）に示すように、ウエイトの解消、つまり、実行不可能な中断状態の解消が生じたとき、ＬＰ０のプログラム状態をsuspended-readyに更新し、即座にＬＰ０を実行させようとする。ここで上述の即座とは、復帰処理やレジスタ切り替えなどに要するオーバーヘッド（ｔ２）でのプログラム実行を意味する。
【０２６７】
より具体的には、スケジューリング制御部４１３は、ウエイトの解消、つまり、実行不可能な中断状態の解消が生じた時点において、既に、スタンバイレジスタ群に格納されているレジスタ値を破棄し、このスタンバイレジスタ群にＬＰ０に対応するコンテキストのレジスタ値を格納するという緊急復帰処理を実施し、緊急レジスタ切り替え処理を実行し、直ちにＬＰ０を上述のｔ６の時間分実行させると共に、ＬＰ１のプログラム状態をsuspended-readyに更新し、ＴＳ１の実行時間枠内において使われずに残った時間t７を実カウント値としてＬＰ１のコンテキスト内に保存する。
【０２６８】
上述のレジスタ切り替え処理を実行によりスタンバイレジスタ群となったレジスタ群には、それまで実行されていたＬＰ１に対応するコンテキストのレジスタ値が存在するが、スケジューリング制御部４１３は、このＬＰ１のレジスタ値を退避し、ＬＰ０の実行に伴い復帰処理を実行し、ＬＰ０の実行が終了後、レジスタ切り替え処理を実施して、直ちにＬＰ１を上述のｔ７の時間分実行させる。
【０２６９】
なお、このＬＰ１の実行も、イベントドリブンスケジューリングによりなされ、具体的には、イベント起床処理（起床タイミング「ｎ」）により実行再開される。
（４−６．イベント処理要求が発生した場合におけるプログラム実行状態）イベント処理要求が発生しない場合、図２７（ａ）に示すように、ＴＳ０、ＴＳ１、ＴＳ２及びＴＳ３が順次実行対象となり、これらタイムスロットそれぞれに割り当てられたプログラムＬＰ０、ＬＰ１、ＬＰ２及びＬＰ３が逐次実行される。
【０２７０】
図２７（ｂ）は、上述の状態を前提として、イベント用のタイムスロットであるＴＳ４のＬＰ４を実行するイベント処理要求が発生し、かつ、ＬＰ状態格納レジスタ４２４においてＬＰ４の起床タイミングが「ｎ」、即ち通常に起床させる旨を示す場合におけるプログラムの実行状況を示す。この場合、スケジューリング制御部４１３は、図２７（b）に示すように、イベント処理要求が発生したとき、ＬＰ４のプログラム状態をwaitingからreadyに更新するが、即座にＬＰ４を実行させようとせず、イベント処理要求が発生したときにカレントレジスタ群となっているレジスタ群が、スタンバイレジスタ群となり、かつ、このレジスタ群が開放されたとき、このレジスタ群にＬＰ４に対応するコンテキストのレジスタ値を格納し、このレジスタ群がカレントレジスタ群となったときに、ＬＰ４を実行するようにする。
【０２７１】
これにより、イベント処理要求が発生した時点において、既に、スタンバイレジスタ群に格納されているレジスタ値が使用され、この格納が無駄とならない。図２７（ｃ）は、イベント用のタイムスロットであるＴＳ４のＬＰ４を実行するイベント処理要求が発生し、かつ、ＬＰ状態格納レジスタ４２４においてＬＰ４の起床タイミングが「ｅ」、即ち緊急的に起床させる旨を示している場合におけるプログラムの実行状況を示す。
【０２７２】
この場合、スケジューリング制御部４１３は、図２７（ｃ）に示すように、イベント処理要求が発生したとき、ＬＰ４のプログラム状態をreadyに更新し、即座に、即ち、上述のｔ２でＬＰ４を実行させようとする。より具体的には、スケジューリング制御部４１３は、イベント処理要求が発生した時点において、既に、スタンバイレジスタ群に格納されているレジスタ値を破棄し、このスタンバイレジスタ群にＬＰ４に対応するコンテキストのレジスタ値を格納し、緊急レジスタ切り替え処理を実行し、直ちにＬＰ４を実行させると共に、実行が中断されたＬＰ１のプログラム状態をsuspended-readyに更新し、ＴＳ１の実行時間枠内において使われずに残った時間、即ち、実カウント値をＬＰ１のコンテキスト内に保存する。
【０２７３】
上述のレジスタ切り替え処理を実行によりスタンバイレジスタ群となったレジスタ群には、それまで実行されていたＬＰ１に対応するコンテキストのレジスタ値が存在し、スケジューリング制御部４１３は、このレジスタ値を一旦退避するそして、再度このレジスタ値をスタンバイレジスタ群に復帰して、ＬＰ４の実行が終了後、直ちにレジスタ切り替え処理を実施して、直ちにＬＰ１を上述の使われずに残った時間分実行させるように制御する。
【０２７４】
なお、このＬＰ１の実行も、イベントドリブンスケジューリングによりなされ、具体的には、イベント起床処理（起床タイミング「ｎ」）により実行再開される。
（４−７．共通割り込み処理要求が発生した場合におけるプログラム実行状況）図２８（ａ）、（ｂ）は、共通割り込み処理要求が発生した場合におけるプログラム実行状況を説明する図である。
【０２７５】
図２８（ａ）に示すように、共通割り込み処理要求が発生していない場合、ＴＳ０からＴＳ３の４つのタイムスロットが順次実行対象のタイムスロットとなり、これらタイムスロットそれぞれに割り当てられているＬＰ０、ＬＰ１、ＬＰ２及びＬＰ３が逐次実行される。ＴＳ２におけるＬＰ２実行中に共通割り込み処理要求が発生した場合、図２８（ｂ）に示すように、スケジューリング制御部４１３は、ＬＰ２のプログラム実行中にこの共通割り込み処理専用サブルーチンにジャンプして共通割り込み処理を実行させ、この共通割り込み処理が完了した後、ＬＰ２に戻ってプログラム実行させる。
【０２７６】
このとき、スケジューリング制御部４１３は、上述のサブルーチンにおけるプログラム実行時間を、割り込まれたＬＰ２の実行時間に含めないように制御する。より具体的には、スケジューリング制御部４１３は、上述のサブルーチンにおいて、共通割り込み処理が実行されている間、サイクルカウンタ４１６におけるカウントダウンをストップさせる。
この結果、ＴＳ２の実行時間枠ｔ９に上述のサブルーチンにおいてプログラムが実行されていた時間ｔ１０を加えた時間がＬＰ２の実行時間となる。このように、共通割り込み処理の実行時間を、割り込まれたＬＰ２の本来の実行時間に含めないようにするのは、全てのプログラムが共通割り込み処理の実行を必要としているにもかかわらず、偶然に割り込まれたある１つのタイムスロットの実行時間枠を消費することにより、このタイムスロットに割り当てられているプログラムだけ実行時間が減少するという不公平が生じることを是正するためである。
（４−８．固有割込み処理要求が発生した場合におけるプログラム実行状況）
図２９（ａ）、（ｂ）、（ｃ）は、固有割込み処理要求が発生した場合におけるプログラム実行状況を説明する図である。
【０２７７】
図２９（ａ）に示すように、固有割込み処理要求が発生していない場合、ＴＳ０からＴＳ３の４つのタイムスロットが順次実行対象のタイムスロットとなり、これらタイムスロットそれぞれに割り当てられているＬＰ０、ＬＰ１、ＬＰ２及びＬＰ３が逐次実行される。図２９（ｂ）に示すように、ＴＳ２におけるＬＰ２実行中にＬＰ３に対応する固有割込み処理要求が発生した場合、スケジューリング制御部４１３は、次にＬＰ３が実行されるときに、この固有割込み処理専用サブルーチンにジャンプして固有割込み処理を実行させ、この固有割込み処理が完了した後、ＬＰ３に戻ってプログラム実行させる。
【０２７８】
このとき、スケジューリング制御部４１３は、固有割込み処理専用サブルーチンにおけるプログラム実行時間を、割り込まれたＬＰ３の実行時間に含める。つまり、スケジューリング制御部４１３は、上述のサブルーチンにおいて、固有割込み処理が実行されている間、サイクルカウンタ４１６におけるカウントダウンをストップさせない。
このように、ＬＰ３に対応する固有割込み処理の実行時間を、割り込まれたＬＰ３の本来の実行時間に含めるのは、ＬＰ３のみがこの固有割込み処理の実行を必要としており、固有割込み処理の実行を必要とするプログラムの実行時間から固有割込み処理の実行時間が消費されるとしても、共通割り込み処理の場合のような実行時間についてのプログラム間における不公平が生じないためである。
【０２７９】
また、図２９（ｃ）に示すように、ＴＳ３におけるＬＰ３実行中にＬＰ３に対応する固有割込み処理要求が発生した場合、スケジューリング制御部４１３は、直ちにこの固有割込み処理専用サブルーチンにジャンプして固有割込み処理を実行させ、この固有割込み処理が完了した後、ＬＰ３に戻ってプログラム実行させる。
このときも上述と同様に、スケジューリング制御部４１３は、固有割込み処理実行用サブルーチンにおけるプログラム実行時間を、割り込まれたＬＰ３の実行時間に含める。以上のように、第２の実施形態によれば、１つの仮想マルチプロセッサ４００において、擬似並行的に複数のプログラムを実行しても、コンテキストの退避、判断及び復帰は、プログラムの実行と並行して実施するため、プログラムの実行時間にコンテキストの退避、判断及び復帰に要する時間が介在することがないので、効率的にタスクを実行することができる。
【０２８０】
また、タイムスロット毎に複数のプログラムが用意されているため、１つのプログラムが実行できない状態となっても、そのプログラムに代わって別のプログラムが実行することができ、プログラムの実行時間を有効に使用することができる。さらに、プログラムが実行できない状態となった場合、そのプログラムの実行時間において、処理実行部４１０にＮＯＰ実行させている状態で駆動を停止させることにより消費電力を低減することができる。
【０２８１】
なお、本実施形態では、スケジューリング制御部４１３は、固有割込み処理実行用サブルーチンにおけるプログラム実行時間を、割り込まれたプログラムの実行時間に含めるとしたが、これに限らず、例えば、以下のようにしてもよい。ここで、図３０（ａ）に示すように、固有割込み処理が発生していない場合には、ＴＳ０からＴＳ３の４つのタイムスロットが順次実行対象のタイムスロットとなり、これらタイムスロットそれぞれに割り当てられているＬＰ０、ＬＰ１、ＬＰ２及びＬＰ３が逐次実行されているものとする。
【０２８２】
各タイムスロットに割り当てられているＬＰ０からＬＰ３までのプログラムが実行されたとき、１巡目のプログラム実行が終了する。図３０（ｂ）に示すように、ｋ巡目のＬＰ２の実行中において、ＬＰ２に対応する固有割込み処理が発生した場合、スケジューリング制御部４１３は、このときに限り、固有割込み処理実行用サブルーチンにおけるプログラム実行時間ｔ１３を、割り込まれたプログラム（ＬＰ）の実行時間に含めない。
【０２８３】
つまり、スケジューリング制御部４１３は、固有割込み処理実行用サブルーチンにおいてプログラム実行している時間ｔ１３の間、サイクルカウンタ４１６におけるカウントダウンをストップさせる。そして、スケジューリング制御部４１３は、図３０（ｃ）に示すように、ｋ＋１順目において、ＴＳ２に割り当てられているＬＰ２が実行されるとき、このＴＳ２の実行時間枠ｔ１２から上述のおけるプログラム実行時間ｔ１３を差し引いた時間分ＬＰ２を実行させる。
【０２８４】
より具体的には、スケジューリング制御部４１３は、サイクルカウンタ４１６に出力する基本サイクルの値に代えて、上述のｔ１２からｔ１３を差し引いた時間に相当する値をサイクルカウンタ４１６に出力する。なお、ｋ＋２巡目では、図３０（ａ）に示すような通常の実行がなされる。
また、本実施形態では、図３１（ａ）に示すように、クロックマスク部４２７が、スケジューリング制御部４１３からマスク信号を受信している間、処理実行部４１０へのクロックパルスの信号経路を遮断することにより、処理実行部４１０の電力消費を低減しているが、これに限らず、以下のようにしてもよい。
【０２８５】
即ち、図３１（ｂ）に示すように、処理実行部４１０への電力供給経路上に配置される電力制御部４３０が、スケジューリング制御部４１３から上述のマスク信号に代わる電力制御信号を受信している間、この電力供給経路を遮断することにより、処理実行部４１０における電力消費を０にしてもよい。
また、図３１（ｃ）に示すように、発振器６００と処理実行部４１０との間にあるクロックパルスの信号経路上に配置される分周器などからなる分周部４３１が、スケジューリング制御部４１３から上述のマスク信号に代わる分周信号を受信している間、例えば、４分周することにより、処理実行部４１０の駆動周波数を下げて電力消費を低減してもよい。
【０２８６】
さらに、図３１（ｄ）に示すように、発振器６００と仮想マルチプロセッサ４００との間にあるクロックパルスの信号経路上に配置される分周器などからなる分周部４３１が、スケジューリング制御部４１３から上述のマスク信号に代わる分周信号を受信している間、このクロックパルスの周波数を、例えば、４分周することにより、処理実行部４１０の駆動周波数を下げて電力消費を低減してもよい。
【０２８７】
このとき、サイクルカウンタ４１６は、従来の機能を発揮する通常処理部４３２に加え、逓倍器などからなる逓倍部４３３を有し、クロックパルスの周波数を、例えば、４逓倍するなどして上述の分周による影響を相殺し、カウントダウンを行うとしてもよい。なお、上述の分周及び逓倍の値は、無論、４に限るものではない。
また、第２の実施形態では、リクエスト検出部４１９は、イベントＰ＿ＩＤの出力を行おうとするとき、現在を起点として所定時間分過去に遡った期間における記憶された前記イベントＰ＿ＩＤの出力回数が、予め決められているしきい値を越えることとなる場合、前記出力回数が前記しきい値以下となるように上述の出力を遅延するとしたが、前記出力回数が当該しきい値を越えることとなる場合、前記イベントＰ＿ＩＤの出力を取り止める、即ち、イベント処理要求を無視するとしてもよい。
【０２８８】
また、第２の実施形態では、スケジューリング制御部４１３は、スタンバイレジスタ群に格納されているコンテキストに対応するプログラムの実行に必要なデータをキャッシュメモリに書き込むようにＤＭＡ管理部４１８に指示するとしたが、これに代えて、ガーベジコレクションを実行する機能部に対し、ガーベジコレクションの実行を指示するとしてもよい。
【０２８９】
また、本第２の実施形態では、或る時点において、２以上のプログラムの状態が新たにready 又はsuspended-readyとなった場合、即ち、イベントドリブンスケジューリングの候補内、つまり、スケジューリングの対象範囲内に、複数のプログラムが存在するとき、いずれのプログラムを先に実行するのかについては、記載していないが、プログラムに付与された優先度にもとづいて、優先度が最も高いものから先に実行対象としてもよい。
【０２９０】
例えば、プログラムＩＤの値が小さいものほど、優先度が高いとする場合、プログラムのＩＤの小さなものから先に実行対象とすることとなる。
また、第２の実施形態では、プログラム（ＬＰ）の数は、レジスタ群の数を上回っていることを前提として説明していたが、これに限らず、プログラムの数がレジスタ群の数以下であってもよい。
【０２９１】
その場合、コンテキストメモリ５００を備えなくても良く、退避、復帰のステップが不要となる。プログラムの数が２つの場合、ＬＰ０は、第１レジスタ群に、ＬＰ１は、第２レジスタ群にそれぞれ対応付けられているものとする。例えば、スケジューリング制御部４１３は、ＬＰ０を実行するときは、コンテキストメモリからレジスタ値群を復帰する動作なしで、第１レジスタ群をカレントレジスタ群として選択する。
【０２９２】
仮に、プログラム及びレジスタ群の数が３つの場合であっても、カレントレジスタ群として選択されているものが実行対象レジスタ群であって、それ以外がスタンバイレジスタ群となる。ここで、ＬＰ２は第３レジスタ群に対応付けられているものとする。ＬＰ２を実行するときは、第３レジスタ群をカレントレジスタ群として選択する。
選択先を切り替えた後も、コンテキストメモリにレジスタ値群を退避する動作は不要である。
【０２９３】
また、コンテキストメモリ５００は、ＳＲＡＭにより構成されるとしたが、ＤＲＡＭであってもよく、さらに、これらメモリに限らず、高速にアクセスされるレジスタや低速にアクセスされる外部記憶装置であってもよい。
【産業上の利用可能性】
【０２９４】
本願発明のプロセッサは、ＣＰＵが内包されたテレビジョンおよびパソコンなどに適用可能である。
【図面の簡単な説明】
【０２９５】
【図１】第１の実施形態における仮想マルチプロセッサ１００の機能ブロック図である。
【図２】コンテキストメモリに格納されているテーブル及びコンテキストのデータ構成を示す図である。
【図３】完了通知フラグ群及び設定フラグ群の各フラグについて説明する図である。
【図４】タスクとプレートとの関係を示す図である。
【図５】仮想マルチプロセッサにおいて実施される処理を示すフローチャートである。
【図６】フラグ判定処理を示すフローチャートである。
【図７】仮想マルチプロセッサにおいて実施される処理を時系列的に説明する図である。
【図８】ポインタを用いて実行順序を示すテーブルのデータ構成を示す図である。
【図９】スリープしているプレートのコンテキストに対して優先的にフラグ判定処理を実施する場合のプレート実行状況を時系列的に示す図である。
【図１０】遅くスリープされたプレートのコンテキストに対して優先的にフラグ判定処理を実施する例を時系列的に示す図である。
【図１１】コンテキストアドレスにカウント値の初期値が付加された実行順序テーブルのデータ構成を示す図である。
【図１２】サイクルカウンタの機能ブロック図である。
【図１３】４段のパイプライン処理を実施する例を示す図である。
【図１４】スリープとなった直後から１回分のプレート実行までの間については、スリープしたプレートの実行順序を最先の順序とし、このスリープしたプレートを優先的に実行する場合のプレート実行の流れを示す図である。
【図１５】第２の実施形態における仮想マルチプロセッサの機能ブロック図である。
【図１６】時間割付情報格納レジスタ及びＬＰ状態格納レジスタに格納されている情報の内容を示す図である。
【図１７】第２の実施形態における仮想マルチプロセッサにおいて実施される処理を示すフローチャートである。
【図１８】スケジューリング制御部により実施されるタイムドリブンスケジューリングの内容を示すフローチャートである。
【図１９】スケジューリング制御部により実施されるイベントドリブンスケジューリングの内容を示すフローチャートである。
【図２０】割込み処理の内容を示すフローチャートである。
【図２１】放棄スケジューリングの内容を示すフローチャートである。
【図２２】（ａ）は、各タイムスロットの基本サイクルの値を示す図である。（ｂ）は、基本サイクル調整処理による基本サイクルの値の見直しについて説明する図である。
【図２３】（ａ）は、プログラム実行時間が放棄されない通常のプログラム実行状態を示す図である。（ｂ）は、プログラム実行時間が放棄され、タイムオプション情報が「LP_SWITCH」を示す場合におけるプログラム実行状態を示す図である。（ｃ）は、プログラム実行時間の放棄が行なわれ、かつ、このＬＰ１のタイムオプション情報が「TS_SWITCH」を示す場合におけるプログラム実行状態を示す図である。（ｄ）は、プログラム実行時間の放棄が行なわれ、かつ、このＬＰ１のタイムオプション情報が「MICRO-SLEEP」を示す場合におけるプログラム実行状態を示す図である。
【図２４】（ａ）は、タイムドリブン型のタイムスロットにおいて、有効な候補プログラムが１つもない場合のアイドルオプション情報にもとづくプログラム実行の状況を説明する図である。（ｂ）は、有効な候補プログラムが１つも存在せず、かつ、このＬＰ１のアイドルオプション情報が「SWITCH」を示す場合におけるプログラム実行状態を示す図である。（ｃ）は、ＴＳ１において、有効な候補プログラムが１つも存在せず、かつ、このＬＰ１のアイドルオプション情報が「MICRO-SLEEP」を示す場合におけるプログラム実行状態を示す図である。
【図２５】（ａ）は、スリーピングタイムスロットがある場合のプログラムの実行状況を示す。（ｂ）は、スリーピングタイムスロットに割り当てられているプログラムにウエイト状態の解消が発生し、かつ、このプログラムの起床タイミングが「n」を示す場合におけるプログラムの実行状況を示す。
【図２６】（ａ）は、スリーピングタイムスロットがある場合のプログラムの実行状況を示す。（ｂ）は、スリーピングタイムスロットに割り当てられているプログラムにウエイト状態の解消が発生し、かつ、このプログラムの起床タイミングが「ｅ」を示す場合におけるプログラムの実行状況を示す。
【図２７】（ａ）は、イベント処理要求が発生しない場合におけるプログラム実行状態を示す図である。（ｂ）は、イベント処理要求が発生し、かつ、このイベント処理を実行するプログラムの起床タイミングが「n」を示す場合におけるプログラムの実行状況を示す。（ｃ）は、イベント処理要求が発生し、かつ、このイベント処理を実行するプログラムの起床タイミングが「ｅ」を示す場合におけるプログラムの実行状況を示す。
【図２８】（ａ）は、共通割り込み処理要求が発生していない場合におけるプログラム実行状態を示す図である。（ｂ）は、共通割り込み処理要求が発生している場合におけるプログラム実行状態を示す図である。
【図２９】（ａ）は、固有割込み処理要求が発生していない場合におけるプログラム実行状態を示す図である。（ｂ）は、固有割込み処理要求が発生したとき、この固有割込み処理を実行するプログラム以外が実行されている場合における固有割込み処理の実行状態を示す図である。（ｃ）は、固有割込み処理要求が発生したとき、この固有割込み処理を実行するプログラムが実行されている場合における固有割込み処理の実行状態を示す図である。
【図３０】（ａ）は、固有割込み処理要求が発生していない場合におけるプログラム実行状態を示す図である。（ｂ）は、ｋ巡目に固有割込み処理が発生した場合における、第１及び２の実施形態以外の方法によるｋ巡目の固有割込み処理の実行状態を示す図である。（ｃ）は、ｋ巡目に固有割込み処理が発生した場合における、第１及び２の実施形態以外の方法によるｋ＋１巡目の固有割込み処理の実行状態を示す図である。
【図３１】（ａ）は、第２の実施形態における電力消費の低減化する機能部の構成を示す図である。（ｂ）は、第２の実施形態以外の方法による電力消費の低減化する機能部の構成の一例を示す図である。（ｃ）は、第２の実施形態以外の方法による電力消費の低減化する機能部の構成の一例を示す図である。（ｄ）は、第２の実施形態以外の方法による電力消費の低減化する機能部の構成の一例を示す図である。
【図３２】従来のプロセッサの機能ブロック図である。
【図３３】従来のプロセッサにおけるタスク実行の流れ及びレジスタ群とコンテキストメモリとの間におけるコンテキストの入出力の状況を示す図である。
【図３４】第１の実施形態における仮想マルチプロセッサ１００と外部プロセッサ３０の接続関係を示す図である。
【符号の説明】
【０２９６】
１０  主メモリ
３０  外部プロセッサ
１００  仮想マルチプロセッサ
１１０  処理実行部
１１１  処理制御部
１１２  レジスタ切替部
１１３  切替入替制御部
１１４  レジスタ群
１１５  レジスタ群
１１６  サイクルカウンタ
１１７  外部Ｉ／Ｆ
１１８  ＤＭＡ管理部
１１９  完了通知レジスタ
１２０  制御レジスタ
１２１  設定フラグレジスタ
２００  コンテキストメモリ
２０１  コンテキスト格納領域
２０２  実行順序テーブル格納領域
３０１  入出力部
３０２  第１メモリ
３０３  第２メモリ
３０４  カウントダウン部
４００  仮想マルチプロセッサ
４０２  時間割付情報格納レジスタ
４１０  処理実行部
４１１  処理制御部
４１２  レジスタ切替部
４１３  スケジューリング制御部
４１４  レジスタ群
４１５  レジスタ群
４１６  サイクルカウンタ
４１７  外部Ｉ／Ｆ
４１８  ＤＭＡ管理部
４１９  リクエスト検出部
４２０  制御レジスタ
４２１  設定フラグレジスタ
４２４  ＬＰ状態格納レジスタ
４２５  プロセッサ状態格納部
４２７  クロックマスク部
４３０  電力制御部
４３１  逓倍部
４３２  通常処理部
４３３  分周部
５００  コンテキストメモリ
５０１  コンテキスト格納領域
６００  発振器
６０１  ＰＬＬ
７００  バス
７０１  外部プロセッサ処理要求信号線
７０２  外部プロセッサ処理完了信号線
【図１】
2006099782.tif 000003
【図２】
2006099782.tif 000004
【図３】
2006099782.tif 000005
【図４】
2006099782.tif 000006
【図５】
2006099782.tif 000007
【図６】
2006099782.tif 000008
【図７】
2006099782.tif 000009
【図８】
2006099782.tif 000010
【図９】
2006099782.tif 000011
【図１０】
2006099782.tif 000012
【図１１】
2006099782.tif 000013
【図１２】
2006099782.tif 000014
【図１３】
2006099782.tif 000015
【図１４】
2006099782.tif 000016
【図１５】
2006099782.tif 000017
【図１６】
2006099782.tif 000018
【図１７】
2006099782.tif 000019
【図１８】
2006099782.tif 000020
【図１９】
2006099782.tif 000021
【図２０】
2006099782.tif 000022
【図２１】
2006099782.tif 000023
【図２２】
2006099782.tif 000024
【図２３】
2006099782.tif 000025
【図２４】
2006099782.tif 000026
【図２５】
2006099782.tif 000027
【図２６】
2006099782.tif 000028
【図２７】
2006099782.tif 000029
【図２８】
2006099782.tif 000030
【図２９】
2006099782.tif 000031
【図３０】
2006099782.tif 000032
【図３１】
2006099782.tif 000033
【図３２】
2006099782.tif 000034
【図３３】
2006099782.tif 000035
【図３４】
2006099782.tif 000036