(57)【特許請求の範囲】
【請求項１】
複数のタスク処理が順次実行されるマルチタスク処理に用いられ、前記各々のタスク処理を実行するマイクロコンピュータが使用する複数のコンテキストを、順次切替えるコンテキスト切替装置において、
前記マイクロコンピュータが使用する前記コンテキストを格納する複数のレジスタからなる処理用レジスタセットと、該処理用レジスタセットと同一構造を有し、該処理用レジスタセットに格納されたコンテキストとバンク切り替えにより切り替えられるコンテキストを格納する複数のレジスタからなる退避／復帰用レジスタセットとにより構成されたレジスタファイルと、
前記複数のタスク処理の各々に対応したコンテキストを、各タスク処理毎に設定した所定の記憶領域にそれぞれ格納するコンテキスト記憶手段と、
前記処理用レジスタセットと前記退避／復帰用レジスタセットとの間のバンク切替えをレジスタ単位で実行することにより、前記マイクロコンピュータによりアクセスされるコンテキストを切替えると共に、前記退避／復帰用レジスタセット内において前記マイクロコンピュータにより使用されなくなったコンテキストを、前記コンテキスト記憶手段にレジスタ単位で退避させ、その後前記マイクロコンピュータにより使用されるコンテキストを、前記コンテキスト記憶手段からレジスタ単位で取り出して前記退避復帰用レジスタセットに復帰させる退避／復帰手段と、
前記処理用レジスタセット内において前記マイクロコンピュータにより更新されたコンテキストが格納されたレジスタを監視するアクセス監視手段と、
前記レジスタファイル内の各レジスタに格納されたコンテキストのタスク情報を記憶するタスク記憶手段と、
を備え、
前記退避／復帰手段は、
前記退避／復帰用レジスタセットの各レジスタに格納されたコンテキストを退避させるに際し、前記タスク記憶手段に記憶された前記各レジスタのタスク情報を参照して該コンテキストの前記コンテキスト記憶手段における退避先を検索し、前記処理用レジスタセット側で前記アクセス監視手段によりコンテキストの更新が認められたレジスタに対応する前記退避／復帰用レジスタセット側のレジスタ内のコンテキストを退避させ、
該コンテキストの退避中に、新たなコンテキストの切替要求が発生した場合には、前記処理用レジスタセット側で前記アクセス監視手段によりコンテキストの更新が認めらなかったレジスタをバンク切替えすることにより、前記退避／復帰用レジスタセット側にコンテキストの退避が不要なレジスタを集約し、
その後、該退避／復帰用レジスタセットに対し、次に実行されるタスクに対応した全てのコンテキストを復帰させることを特徴とするコンテキスト切替装置。
【請求項２】
前記退避／復帰手段は、
前記退避／復帰用レジスタセットへのコンテキストの復帰処理の途中で、前記マイクロコンピュータによる新たなタスク切替要求が生じた場合には、当該コンテキストの復帰処理を中断し、新たなタスクに対応したコンテキストの復帰を実行することを特徴とする請求項１記載のコンテキスト切替装置。
【請求項３】
前記アクセス監視手段は、
前記処理用レジスタセットを構成する個々のレジスタ内に格納されたコンテキストの更新状況を、該個々のレジスタ毎に示す複数のフラグを備え、
前記退避／復帰手段による前記処理用レジスタと前記退避／復帰用レジスタとの間の全てのバンク切替えが終了した後に、前記複数のフラグの全てを０にリセットし、その後、前記マイクロコンピュータによるコンテキストの更新が確認された前記処理用レジスタセット内のレジスタに対応するフラグを１にセットすること、
を特徴とする請求項１又は請求項２記載のコンテキスト切替装置。
【請求項４】
前記タスク記憶手段は、前記アクセス監視手段によりコンテキストの更新が確認されたレジスタのタスク情報に、現在実行中のタスクに割り当てられたＩＤを書き込んで記憶することを特徴とする請求項１〜３のいずれかに記載のコンテキスト切替装置。
【請求項５】
前記退避／復帰手段は、
新たにタスク切替要求が生じた場合に、新たなタスクに割り当てられたＩＤと、前記タスク記憶手段に記憶された前記退避／復帰用レジスタ内の各レジスタのタスク情報が有するＩＤとを比較することにより、該各レジスタが前記新たなタスクに対応したコンテキストを有するか否かを検索し、
前記退避／復帰用レジスタ内の各レジスタの中で、前記新たなタスクに割り当てられたＩＤと同一のＩＤを有するレジスタが検知された場合には、当該同一のＩＤを有するレジスタに対しては、新たなコンテキストの復帰を行わず、当該同一のＩＤを有しないレジスタに対して、新たなコンテキストの復帰を行うことを特徴とする請求項４に記載のコンテキスト切替装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンテキスト切替装置に関し、特に、処理速度等や処理時間保証に対する要求条件の厳しい分野において利用される、マルチタスク処理用の組込みＣＰＵに適用されるコンテキスト切替装置に関する。
【０００２】
【従来の技術】
家電製品や産業機器等には、これらを制御するための所定のタスク処理を実行する組込みＣＰＵを備えたものがある。そして近年では、製品の機能の多様化に伴い、この組込みＣＰＵにより、複数のタスク処理を並列動作させるマルチタスク処理を行うことが必要とされている。従来、このマルチタスク処理を実現する最も簡単な方法として、メモリバンク切替えによりコンテキスト切替えを行う方法が知られている。
【０００３】
図７（ａ）は、このようなコンテキスト切替えを行う装置の概略構成を表すブロック図である。同図に示すように、コンテキスト切替装置１０１は、マイクロコンピュータのＣＰＵ１０２が所定のタスクを実行する際に必要なコンテキストを格納するレジスタファイル１０３、レジスタファイル１０３にて更新されたコンテキストを保存するコンテキスト記憶装置１０４、及び、レジスタファイル１０２とコンテキスト記憶装置１０４との間でコンテキストを退避又は復帰させる退避／復帰装置１０５から構成される。
【０００４】
レジスタファイル１０３は、同一構造を有する２組のレジスタセットSet#Ａ及びSet#Ｂから構成され、この各々のレジスタセットが、複数のレジスタから構成されている。そして、Set#Ａ又はSet#Ｂの一方がＣＰＵ１０２によりアクセスされ、他方が退避／復帰装置１０５によりアクセスされる。
【０００５】
退避／復帰装置１０５は、レジスタファイル１０３におけるSet#Ａ及びSet#Ｂのバンク切替えを行い、ＣＰＵ１０２からアクセスされるレジスタセットを切替えると共に、レジスタファイル１０３内のＣＰＵ１０２による使用中でないレジスタセットとコンテキスト記憶装置１０４との間で行われるコンテキストの退避、復帰処理を制御する。
【０００６】
コンテキスト記憶装置１０４は、ＣＰＵ１０２により処理（更新）されたコンテキストを、各タスク毎に設定された記憶領域に記憶する。
以下、コンテキスト切替装置１０１の動作を、図７（ｂ）に示すタイミングチャートに基づいて説明する。
【０００７】
ＣＰＵ１０２によりタスク１が実行され、その際のコンテキスト情報がSet#Ａに格納されているとする。そしてこのとき、外部からの割込み信号、事象待ち等の解除、或いは周期タスクの起動等により、ＣＰＵ１０２での実行タスクをタスク１からタスク２へ切替える要求が生じたとする。
【０００８】
すると、退避／復帰装置１０５は、コンテキスト記憶装置１０４に格納されたタスク２に対応したコンテキストを、Set#Ｂに復帰させる。そして、その実行完了後、Set#ＡとSet#Ｂとの間でバンク切替えを行い、ＣＰＵ１０２にSet#Ｂを参照させるようにする。このバンク切替え後、ＣＰＵ１０２によりSet#Ｂを用いたタスク２が実行され、それと同時に、退避／復帰装置１０５は、Set#Ａ内のタスク１に対応するコンテキストを、コンテキスト記憶装置１０４へ退避させ、退避完了後はそのまま待機する。
【０００９】
そしてその後、さらにタスク２をタスク３に切替える要求が生じた場合には、退避／復帰装置１０５は、上記と同様に、Set#Ａに対してタスク３のコンテキストを復帰させた後、Set#ＢとSet#Ａとの間でバンク切替えを行う。そして、このバンク切替え後、ＣＰＵ１０２によるSet#Ａ内のコンテキストを用いたタスク３の実行と並行して、退避／復帰装置１０５は、Set#Ｂ内のタスク２に対応するコンテキストをコンテキスト切替記憶１０４へ退避させる。このようにして、タスク切替え要求に対して高速にコンテキストの切替えが行われている。
【００１０】
これ以外にも、前記手法において退避動作が終了したレジスタファイルに対して、スケジューラによるタスク情報を基に、次に実行されそうなタスクに対応したコンテキストを予め復帰させる等の方法も提案されている。ただしこの場合、タスクの予想がはずれた場合は、タスク切替え要求後に図７（ｂ）と同様のレジスタの復帰が実行されることになる。
【００１１】
【発明が解決しようとする課題】
ところで、自動車制御やロボット制御等のように、制約時間内にタスク処理を終了しないと、システムとして何らかの問題が生じるハードリアルタイムシステムにおいては、処理時間の予測性が非常に重要となる。この点を観案し、例えばＣＰＵとメモリとのやりとりを高速に行う手段として、キャッシュメモリを用いることが考えられる。しかし、キャッシュメモリはミスヒットが生じる場合があるため、このようなハードリアルタイムシステムにおいては、常にミスヒットが生じた最悪時間で設計を行わなければならず、キャッシュメモリの効果が十分に発揮できない。このため、ハードリアルタイムシステムにおいては、通常キャッシュメモリが使用されることはない。このような例からもわかるように、ハードリアルタイムシステムにおいては、単に処理速度が高速なだけでなく、常に同じ速度で動作するという動作保証が重要となる。
【００１２】
これらの要求を観案して、図７（ａ）に示した従来のコンテキスト切替装置が実行するコンテキスト切替え方法を評価した場合、図７（ｃ）のタイミングチャートに示すような問題が生じることに気づく。以下、この問題について説明する。
【００１３】
仮に、ＣＰＵ１０２によりタスク１が実行され、そのコンテキスト情報がSet#Ａに格納されているとする。そして、外部からの割込み信号、および事象待ち等の解除、周期タスクの起動等により、ＣＰＵ１０２での実行タスクをタスク１からタスク２へ切替える要求が生じたとする。このとき、退避／復帰装置１０５は、Set#Ｂに対してコンテキスト記憶装置１０４からタスク２に対するコンテキストを復帰させる。そして、その復帰完了後バンク切替えを行い、ＣＰＵ１０２にSet#Ｂを参照させるようにする。すると、ＣＰＵ１０２によりSet#Ｂを用いたタスク２が実行され、それと同時に、退避／復帰装置１０５は、Set#Ａのタスク１に対応するコンテキストのコンテキスト記憶装置１０４への退避を開始する。
【００１４】
さて、この退避中にタスク２からタスク３へのタスク切替要求があった場合を考えることにする。この場合には、切替え要求後もタスク１のコンテキストの退避は中止されず引き続き行われ、退避終了後にタスク３に対応したコンテキストのSet#Ａへの復帰が行われる。そして、その復帰完了後にSet#ＢからSet#Ａへのバンク切替えが行われ、ＣＰＵ１０２によるタスク３の実行が可能となる。
【００１５】
このとき、タスク２からタスク３への切替要求が発生してから、実際に要求されたタスク３が実行されるまでの時間を応答時間として見ると、このようにタスク１のコンテキストの退避途中でタスク３の切替え要求が起きた場合には、当該コンテキストの残りの退避時間分がオーバーヘッドとして応答時間に加算されることになる。
【００１６】
つまり、このようなタスク切替要求が発生するタイミングにより、この応答時間が変わることになる。このため、最悪の場合、つまりタスク切替え要求後、直ちに次のタスク切替要求が生じた場合には、全てのレジスタ内のコンテキストの退避時間分がオーバーヘッドとして応答時間に加算されることになる。この場合、バンク切替えを行わず、１つのレジスタセット（つまり、Set#Ａ又はSet#Ｂ）にて退避、復帰を行った場合と同等の応答時間を要する結果となる。しかも前述のように、ハードリアルタィムシステムにおいては応答時間を最悪時間で設計する必要があるため、バンク切替えの効果を設計に有効に活かすことができないこととなる。
【００１７】
このような問題を回避するために、例えば、全てのタスクに対応したレジスタセットを用意する方法、或いは、レジスタセットを多数用意し、これら複数間でファイルを切替える、若しくはタスクに対して動的にレジスタファイルを割り当てる方法等が提案されている。
【００１８】
しかしながら、これら方法を用いた場合にはレジスタセットの数が増大し、組込み用途向けのシステムで最も重要なコスト高の問題が生じることになる。
本発明はこうした問題点に鑑み、どのようなタイミングでタスク切替要求が生じても、コンテキスト退避時間による上記オーバーヘッドがなく、タスク復帰時間分の応答時間にて要求されたタスクの実行が可能であり、しかも、簡単なレジスタセットの構成でこれを実現することができるコンテキスト切替装置を提供することを目的とする。
【００１９】
【課題を解決するための手段】
上記課題に鑑み、請求項１記載のコンテキスト切替装置においては、レジスタファイルが、処理用レジスタセット及び退避／復帰用レジスタセットにより構成されている。処理用レジスタセットは、マイクロコンピュータがタスク処理に用いるコンテキストを格納する。一方、退避／復帰用レジスタセットは、この処理用レジスタセットが保有するコンテキストと切替えられるコンテキストを格納する。そして、これら処理用レジスタセット及び退避／復帰用レジスタセットが、共に同一構造を有する複数のレジスタから構成され、相互にレジスタ単位でのコンテキストの切替えが可能となっている。
【００２０】
そして、このレジスタ単位でのコンテキストの効率的な切替えを実現するために、アクセス監視手段が、処理用レジスタセット内において、マイクロコンピュータにより更新されたコンテキストが格納されたレジスタを監視すると共に、タスク記憶手段が、レジスタファイル内の各レジスタに格納されたコンテキストがコンテキスト記憶手段に設定されたどのタスクに対応した記憶領域に格納されるべきものであるか等のタスク情報を記憶する。
【００２１】
そして、退避／復帰手段が、処理用レジスタセットと退避／復帰用レジスタセットとの間のバンク切替えをレジスタ単位で実行することにより、マイクロコンピュータによりアクセスされるコンテキストを切替えると共に、退避／復帰用レジスタセット内においてマイクロコンピュータにより使用されなくなったコンテキストを、コンテキスト記憶手段にレジスタ単位で退避させ、その後、マイクロコンピュータにより使用されるコンテキストを、コンテキスト記憶手段からレジスタ単位で取り出して退避／復帰用レジスタセットに復帰させる。
【００２２】
このとき、退避／復帰手段は、退避／復帰用レジスタセットの各レジスタに格納されたコンテキストを退避させるに際し、タスク記憶手段に記憶された各レジスタのタスク情報を参照してコンテキスト記憶手段における各コンテキストの退避先を決定し、処理用レジスタセット側でアクセス監視手段によりコンテキストの更新が認められたレジスタに対応する退避／復帰用レジスタセット側のレジスタ内のコンテキストを退避させる。そして、このコンテキストの退避中に、新たなコンテキストの切替要求が発生した場合には、処理用レジスタセット側でアクセス監視手段によりコンテキストの更新が認めらなかったレジスタをバンク切替えする。
【００２３】
このため、退避／復帰用レジスタセット側には、コンテキストの退避が不要なレジスタが集約されることになる。従って、退避／復帰用レジスタセット側のコンテキストの退避の途中でタスク切替要求が発生したとしても、退避／復帰用レジスタセット内には上書きにより消去されてしまってもかまわないコンテキストしか存在しないため、直ちに新たなタスクに対応した全てのコンテキストの復帰を行うことができる。
【００２４】
この結果、どのようなタイミングでタスク切替要求が生じても、タスク切替要求が発生してから新たなタスク処理が実行されるまでの応答時間を、新たなタスクに対応したコンテキストの復帰時間にて保証することができる。このため、処理時間保証に対する要求条件の厳しい分野においても、コンテキスト切替えにおけるバンク切替えの効果を設計に有効に活かすことができる。
【００２５】
また、上記のようなコンテキスト切替えは、上記処理用レジスタセットと退避／復帰用レジスタセットが、各々一つずつあれば実現することができる。このため、簡単なレジスタセットの構成でコンテキスト切替装置を構成することができ、コンテキスト切替装置を安価に提供することができる。
【００２６】
ところで、このようなコンテキスト切替えを行う場合、コンテキストの復帰処理の途中で、マイクロコンピュータによる新たなタスク切替要求が生じる場合がある。この場合、当該コンテキストの復帰を終了してから、新たなタスクに対応したコンテキストの復帰処理を実行するとすると、タスク切替要求の発生時点から当該コンテキストの復帰完了時点までの時間が不明確であるため、タスク切替要求が発生してから新たなタスク処理が実行されるまでの応答時間が不明確なものとなってしまう。つまり、このタスク切替要求の発生時点から当該コンテキストの復帰完了時点までの時間分が従来と同様のオーバーヘッドとなって、処理時間保証を満足できない結果となってしまう。
【００２７】
そこで、このような問題を回避するために、請求項２記載のコンテキスト切替装置では、このように、退避／復帰用レジスタセットへのコンテキストの復帰処理の途中で、マイクロコンピュータによる新たなタスク切替要求が生じた場合には、退避／復帰手段が当該コンテキストの復帰処理を中断し、直ちに新たなタスクに対応したコンテキストの復帰を実行する。
【００２８】
このように構成することで、タスク切替要求が発生してから新たなタスク処理が実行されるまでの応答時間を、新たなタスクに対応したコンテキストの復帰時間で保証することができる。
また、上記アクセス監視手段の具体的態様としては、請求項３に記載のように、処理用レジスタセットを構成する個々のレジスタ内に格納されたコンテキストの更新状況を、個々のレジスタ毎に示す複数のフラグを備え、退避／復帰手段による処理用レジスタと退避／復帰用レジスタとの間の全てのバンク切替えが終了した後に、複数のフラグの全てを０にリセットし、その後、マイクロコンピュータによるコンテキストの更新が確認された処理用レジスタセット内のレジスタに対応するフラグを１にセットするように構成してもよい。
【００２９】
このように構成すれば、退避／復帰手段は、このフラグの状態を参照することにより、個々のレジスタに格納されたコンテキストがコンテキスト記憶手段に退避されるべきものであるのか否かの情報を容易に取得することができる。
さらに、上記タスク記憶手段の具体的態様としては、請求項４に記載のように、アクセス監視手段によりコンテキストの更新が確認されたレジスタのタスク情報に、現在実行中のタスクに割り当てられたＩＤを書き込んで記憶するように構成することが考えられる。
【００３０】
このように構成すれば、退避／復帰手段は、更新されたコンテキストをコンテキスト記憶手段に退避させる際に、このＩＤを参照することにより、更新されたコンテキストのコンテキスト記憶手段における退避先を容易に把握することができ、当該コンテキストをコンテキスト記憶手段に設定された所定の記憶領域に容易に退避させることができる。
【００３１】
また、上記コンテキスト切替えを行う場合、コンテキストの退避中に以前実行されたタスクへの切替要求が再度発生する場合がある。そしてこの際、退避／復帰用レジスタセットに当該タスクに対応するコンテキストであってマイクロコンピュータにより更新されたものが存在する場合には問題が生じる。すなわち、この場合に、上記手法に沿ってこの更新されたコンテキストを一旦処理用レジスタセット側にバンク切替えし、他方の退避／復帰用レジスタセット側にコンテキスト記憶手段から当該タスクに対応した全てのコンテキストを復帰させ、その後、処理用レジスタセットと退避／復帰用レジスタセットの全てのコンテキストについてバンク切替えを行ったとする。すると、当該タスクを構成するコンテキストの内、先程更新されたはずのコンテキストが更新される前の状態で処理用レジスタセットに格納されることになる。従って、この状態でマイクロコンピュータが処理用レジスタセットにアクセスすると、マイクロコンピュータが更新される前のコンテキストを処理することになり、誤作動を引き起こすおそれがある。
【００３２】
そこで、このような問題を回避すべく、請求項５記載のコンテキスト切替装置では、新たにタスク切替要求が生じた場合には、退避／復帰手段が、新たなタスクに割り当てられたＩＤと、タスク記憶手段に記憶された退避／復帰用レジスタ内の各レジスタのタスク情報が有するＩＤとを比較することにより、これら各レジスタが新たなタスクに対応したコンテキストを有するか否かを検索する。そして、退避／復帰用レジスタ内の各レジスタの中に、新たなタスクに割り当てられたＩＤと同一のＩＤを有するレジスタが検知された場合には、当該同一のＩＤを有するレジスタに対しては、新たなコンテキストの復帰を行わず、当該同一のＩＤを有するレジスタに対して、新たなコンテキストの復帰を行うようにしている。
【００３３】
このように構成することで、新たなタスクに対応したコンテキストの復帰は、更新がされてないコンテキストについてのみ行われ、マイクロコンピュータは、復帰されたコンテキストと、既に更新済みでレジスタファイル内に保留されたコンテキストとを用いて次のタスク処理を実行することになる。このため、上記のようなマイクロコンピュータの誤作動等が生じることがない。
【００３４】
ただし、この場合、新たなタスクに対応したコンテキストの復帰時間が、復帰しないコンテキストがある分、短くなる可能性はある。このため、タスク切替要求が発生してから新たなタスク処理が実行されるまでの応答時間を、新たなタスクに対応したコンテキストの復帰時間と同一にすることができない場合もある。しかし、復帰時間が短くなった分は、その時間待機するように構成すればよいのであって、上述した処理時間保証に問題が生じることはない。
【００３５】
【発明の実施の形態】
以下、本発明の好適な実施例を図面に基づいて説明する。
［第１実施例］
図１は、本実施例のコンテキスト切替装置の全体構成を示すブロック図である。
【００３６】
同図に示すように、コンテキスト切替装置１は、マイクロコンピュータ側のＣＰＵ２がマルチタスク処理を構成する所定のタスク処理を実行する際に用いるコンテキストを格納するレジスタファイル３、ＣＰＵ２により実行（更新）された各タスクに対するコンテキストを保存するコンテキスト記憶装置４、及び、レジスタファイル３とコンテキスト記憶装置４との間でコンテキストの切替えを行うコンテキスト制御装置５から構成される。
【００３７】
レジスタファイル３は、同一構造を有する２組のレジスタセットSet#ＣＰＵ及びSet#ＭＥＭから構成されている。そして、この各々のレジスタセットが、複数のレジスタから構成され、各々のレジスタセット間で対応した個々のレジスタ毎に相互にバンク切替え可能に構成されている。Set#ＣＰＵはＣＰＵ２によりアクセスされ、Set#ＭＥＭはコンテキスト制御装置５によりアクセスされる。
【００３８】
コンテキスト記憶装置４は、レジスタファイル３にて更新された個々のレジスタに対応したコンテキストをタスク毎に記憶する。尚、当該コンテキスト記憶装置４がコンテキスト記憶手段に該当する。
コンテキスト制御装置５は、レジスタファイル３とコンテキスト記憶装置４との間でコンテキストを退避又は復帰させる退避／復帰手段６、レジスタファイル３において更新されたレジスタを監視するアクセス監視手段７、及び、レジスタファイル３のタスク情報を記憶するタスク記憶手段８により構成される。
【００３９】
退避／復帰手段６は、レジスタファイル３においてSet#ＣＰＵとSet#ＭＥＭとの間のバンク切替えをレジスタ単位で行い、ＣＰＵ２からアクセスされるコンテキストを切替えると共に、レジスタファイル３におけるＣＰＵ２による使用中でないレジスタセット（つまりSet#ＭＥＭ）とコンテキスト記憶装置４との間で行われるコンテキストの退避及び復帰処理を制御する。
【００４０】
アクセス監視手段７は、Set#ＣＰＵにおいてＣＰＵ２によりコンテキストが更新されたレジスタを監視する。
タスク記憶手段８は、アクセス監視手段７の監視結果から、レジスタファイル３内の各レジスタに格納されたコンテキストがどのタスクに属するかといったタスク情報を記憶する。
【００４１】
次に、コンテキスト切替装置１が実行するコンテキスト切替処理について、図２に基づいて説明する。図２（ａ）は、当該コンテキスト切替処理のタイミングチャートの一例であり、図２（ｂ）〜（ｇ）は、このタイミングチャートに沿ったレジスタファイル３内でのコンテキストの切替動作を示す説明図である。
【００４２】
尚、以下の説明において、レジスタファイル３を構成するレジスタセットSet#ＣＰＵ及びSet#ＭＥＭは、それぞれ同じ構造を有する６つのレジスタから構成されると仮定する。また、タイミングチャートに示したSet#Ａ及びSet#Ｂは、便宜上の表記であり、タスクを実行する側がSet#ＣＰＵの動作を示し、タスクを復帰又は退避させる側がSet#ＭＥＭの動作を示すものとする。また、各レジスタに格納されるコンテキストについては、対応するタスクの種別をＴの添え字にて表し、それが格納されるレジスタの番号をハイフンの後の番号にて表すこととする（例えば、０番目のレジスタに格納されたタスク１のコンテキストは「Ｔ１−０」と表されるものとする）。さらに、Set#ＣＰＵ内でＣＰＵ２により更新されたコンテキストに対しては、#を付加して表現することとする。
【００４３】
さて、図２（ａ）に示すフェーズ１において、ＣＰＵ２によりタスク１が実行された後、タスク１からタスク２へのタスク切替要求が発生したとする。この時点において、レジスタファイル３には、図２（ｂ）に示すように、Set#ＣＰＵ側の各レジスタには、タスク１に対応するコンテキストＴ１−０〜Ｔ１−５が更新されて＃Ｔ１−０〜＃Ｔ１−５となって格納されている。尚、このコンテキストの更新情報は、アクセス監視手段７により逐次監視されている。アクセス監視手段７は、後述のように、コンテキストの更新状況を表すフラグをレジスタファイル３内のレジスタ毎に保有しており、更新されたコンテキストが格納されたレジスタ対応するフラグに１を、更新されてないコンテキストが格納されたレジスタに対応するフラグに０を、それぞれ設定するように構成されている。
【００４４】
そして、このタスク切替要求により、退避／復帰手段６は、コンテキスト記憶装置４からSet#ＭＥＭに対してタスク２に対するコンテキストを復帰させる（フェーズ２）。このとき、レジスタファイル３の状態は、図２（ｃ）に示すように、Set#ＭＥＭ側にＴ２−０〜Ｔ２−５がセットされた状態となる。
【００４５】
その後、直ちに退避／復帰手段６がSet#ＣＰＵ及びSet#ＭＥＭの双方の全レジスタを互いにバンク切替えし、ＣＰＵ２にタスク２に対するコンテキストが開示される。そして、ＣＰＵ２によりSet#ＣＰＵ側のレジスタに格納されたコンテキストの更新が行われ、これにあわせてこのレジスタに対応したSet#ＭＥＭ側のレジスタのコンテキスト（つまり、タスク１に対応したコンテキスト）が順次コンテキスト記憶装置４に退避される。尚、この退避は、退避／復帰手段６がアクセス監視手段７のフラグを参照してコンテキストの更新を確認しながら行う。
【００４６】
ここで、この退避の途中で新たにタスク２からタスク３へのタスク切替要求が発生したとする。このときのレジスタファイル３の内容を図２（ｄ）に示す（フェーズ３）。この時点においては、Set#ＣＰＵ側の＃Ｔ２−１、＃Ｔ２−２及び＃Ｔ２−４が更新されているので、Set#ＭＥＭ側の＃Ｔ１−１、＃Ｔ１−２及び＃Ｔ１−４がコンテキスト記憶装置４に既に退避されている。ここでは、コンテキストが退避されたレジスタを＊＊＊で示している。
【００４７】
そして、図２（ｅ）に示すように、フェーズ３においてSet#ＣＰＵ側でＣＰＵ２により更新されてないコンテキストが格納されたレジスタのみに対してバンク切替えが実行される（フェーズ４）。つまりこの場合、退避／復帰手段６により、Set#ＣＰＵ側のＴ２−０、Ｔ２−３及びＴ２−５が、Set#ＭＥＭ側の＃Ｔ１−０、＃Ｔ１−３及び＃Ｔ１−５とバンク切替えされることになる。このため、この時点において、Set#ＭＥＭ側には、既に退避が完了したコンテキスト又はＣＰＵ２により更新されていないため退避が不必要なコンテキストのみが格納されていることになる。従って、このSet#ＭＥＭに対しては、即座にコンテキスト記憶装置４からタスク３に対応するコンテキストを復帰させることが可能となる。
【００４８】
そして、図２（ｆ）に示すように、退避／復帰手段６により、コンテキスト記憶装置４からSet#ＭＥＭに対してタスク３に対応するコンテキストの復帰が行われた後（フェーズ５）、Set#ＣＰＵ及びSet#ＭＥＭの双方の全レジスタがバンク切替えされる。こうして図２（ｇ）に示す状態となり、直ちにＣＰＵ２によるタスク３の実行が可能となる。
【００４９】
またこのとき、バンク切替え後のSet#ＭＥＭには、タスク１及びタスク２に関するコンテキストが混在して格納されているが、Set#ＭＥＭ内の各レジスタ内のコンテキストのタスク情報は、図２（ｇ）に示されるようにタスク記憶手段８に、各々のタスクに割り当てられたＩＤ番号が付された状態で記憶されている。例えば同図においては、Set#ＭＥＭ側の０番目のレジスタにはタスク１に対応したコンテキスト＃Ｔ１−０が格納されているため、タスク記憶手段８内の対応領域には、ＩＤ番号として１が記憶されている。従って、Set#ＭＥＭの各々のレジスタに格納されたコンテキストがどのタスクに属するものであるかは、このタスク記憶手段８を参照することにより把握することができる。尚、Set#ＭＥＭからコンテキスト記憶装置４へのコンテキストの退避に際しては、退避／復帰手段６が、このタスク記憶手段８を参照して、それぞれのコンテキストをコンテキスト記憶装置４の各タスクに対応した所定の領域に退避させる。
【００５０】
以上のように、本実施例では、アクセス監視手段７がＣＰＵ２によるレジスタファイル３内のコンテキストの更新状況を逐次監視し、その一方で、タスク記憶手段８がレジスタファイル３内のコンテキストのタスク情報を記憶する。このため、Set#ＣＰＵ及びSet#ＭＥＭ内のコンテキストをレジスタ単位で識別して相互にバンク切替えすることができ、また、Set#ＭＥＭ側のコンテキストをレジスタ単位でコンテキスト記憶装置４に退避或いは復帰させることができる。
【００５１】
また、Set#ＣＰＵ側でのレジスタ内のコンテキストの更新に合わせて、Set#ＭＥＭ側の対応するレジスタのコンテキストが順次退避されると共に、Set#ＣＰＵ側でコンテキストの更新がされなかったレジスタに対応したSet#ＭＥＭ側のレジスタのコンテキストが、Set#ＣＰＵ側のレジスタにバンク切替される。このため、Set#ＭＥＭを構成するレジスタには、更新されず退避の必要のないコンテキストのみが格納されることになるため、コンテキスト記憶装置４から直ちに新たなコンテキストの復帰をさせることができる。
【００５２】
このため、コンテキストの退避途中においてタスク切替要求が発生しても、直ちにSet#ＭＥＭへの新たなコンテキストの復帰を実行することができる。この結果、コンテキスト復帰分の時間をコンテキスト切替え時間として保証することができ、タスクの切替要求が発生してから実際に要求されたタスクが実行されるまでの応答時間を常に一定にすることができる。従って、本実施例のコンテキスト切替装置１によれば、コンテキスト切替の処理速度の高速化及び処理時間保証等を確保することができ、バンク切替えの効果を設計に有効に活かすことができる。
［第２実施例］
第１実施例では、コンテキスト退避中にタスク切替要求が生じた場合の動作について説明したが、コンテキストの復帰処理の途中で新たなタスク切替要求が生じた場合に一つの問題が生じる。すなわちこの場合、復帰途中のコンテキストの復帰処理が終了してから、新たなタスクに対応したコンテキストの復帰処理を実行するとすると、タスク切替要求の発生時点から当該コンテキストの復帰完了時点までの時間が不明確であるため、タスク切替要求が発生してから新たなタスク処理が実行されるまでの応答時間が不明確なものとなってしまい、上述した処理時間保証を満足できない結果となってしまうのである。
【００５３】
そこで、本実施例では、このようなコンテキスト復帰中にタスク切替要求が生じた場合についても処理時間保証を満足できるコンテキストの切替動作を、図３に基づいて説明する。
尚、コンテキスト切替装置１の全体構成は第１実施例と全く同様であり、図３のタイミングチャートにおいて、同図（ｂ）〜（ｅ）に示すフェーズ４までの動作は第１実施例の図２（ｂ）〜（ｅ）の動作と全く同様であるので、これらの説明については省略する。
【００５４】
図３（ｅ）に示すフェーズ４、すなわち、Set#ＭＥＭ側に退避が不必要なコンテキストのみが格納された状態の後、コンテキスト記憶装置４からのタスク３に対応するコンテキストの復帰動作中に、タスク３からタスク４へのタスク切替要求が生じたとする。この時点において、同図（ｆ）に示すように、Set#ＭＥＭに対して、タスク３に対応したいくつかのコンテキスト（つまりＴ３−０及びＴ３−１）が復帰されている。
【００５５】
本実施例では、この時点において復帰されたタスク３のコンテキストを無視し、同図（ｇ）に示すように、直ちにタスク４に対応するコンテキストの復帰を実行する（フェーズ５）。このようにすることで、その復帰終了後、Set#ＣＰＵ及びSet#ＭＥＭの双方の全レジスタ内のコンテキストをバンク切替えすることにより、直ちにＣＰＵ２によるタスク４の実行が可能となる。
【００５６】
このように、本実施例では、タスクの復帰中に新たなタスクへのタスク切替要求が発生した場合に、それまでの復帰情報を捨てて、新たなタスクに対するコンテキスト復帰を開始する。このため、新たなタスクに対応したコンテキストの復帰分の時間を応答時間として保証することができる。尚、この場合、捨てられた復帰情報（コンテキスト）はＣＰＵ２による更新が行われてないため、コンテキスト記憶装置４側にはこれと同じ情報が格納されている。このため、これらの復帰情報が捨てられても何ら問題は生じない。
［第３実施例］
第１実施例に示したコンテキスト切替えを行う場合、コンテキストの退避中に以前実行されたタスクへの切替要求が再度発生する場合が想定される。この際、Set#ＭＥＭに当該タスクに対応するコンテキストであってＣＰＵ２により更新されたものが存在する場合に問題が生じる。すなわち、この場合に第１実施例と同様に、まず更新されたコンテキストを一旦Set#ＣＰＵ側にバンク切替えし、他方のSet#ＭＥＭ側に当該タスクに対応した全てのコンテキストを復帰させ、その後、Set#ＣＰＵとSet#ＭＥＭの全てのコンテキストについてバンク切替えを行ったとする（図２（ｄ）〜（ｇ）の処理に相当）。すると、当該タスクを構成するコンテキストの内、本来更新されたはずのコンテキストが更新されてない状態でSet#ＣＰＵに格納されることになり、ＣＰＵ２が誤作動を引き起こすおそれがある。
【００５７】
本実施例では、このように、コンテキストの退避中にタスク切替要求が発生した場合であって、新しいタスクに対するコンテキストの一部が未退避でSet#ＭＥＭ内に存在する場合についてのコンテキストの切替動作を、図４及び図５に基づいて説明する。
【００５８】
尚、コンテキスト切替装置１の全体構成は第１実施例と全く同様であり、図４のタイミングチャートにおいて、図５（ａ）〜（ｅ）に示す動作は第１実施例の図２（ｂ）〜（ｆ）に示す動作と全く同様であるので、これらの説明については省略する。
【００５９】
図５（ｅ）に示すフェーズ５においては、Set#ＭＥＭに対してタスク３に対応したコンテキストが復帰され、Set#ＣＰＵには、タスク１及びタスク２に対応したコンテキストであって退避が必要なコンテキストが混在して格納されている。そして、この直後にすべてのレジスタに対するバンク切替えを行い、ＣＰＵ２によりタスク３の実行が開始されると同時に、タスク１及びタスク２に対応したレジスタの退避が開始されている。そして、その退避途中でタスク３から再度タスク１へのタスク切替要求が発生したときのレジスタファイル３の状態が図５（ｆ）に示されている。このとき、Set#ＣＰＵ側では、ＣＰＵ２により＃Ｔ３−０及び＃Ｔ３−１が更新された状態となっている。これに対し、Set#ＭＥＭ側では０番目及び１番目のレジスタの退避が終了している。
【００６０】
本実施例では、ここで、退避／復帰手段６が、タスク記憶手段８を参照し、タスク切替えが要求されているタスク１に対応するコンテキストがSet#ＭＥＭのいずれかのレジスタに格納されてないかどうかを検索する。そして、タスク１に対応したコンテキストが見つかった場合には、これらをタスク切替え後に直ちに使用するため、退避／復帰手段６は、これらのコンテキストを退避の対象外とする。この場合、Set#ＭＥＭの４番目のレジスタに格納された＃Ｔ１−３と、６番目のレジスタに格納された＃Ｔ１−５とが、退避の対象外となる。
【００６１】
そして、タスク切替えの対象となるコンテキストをSet#ＭＥＭ側に保留し、それ以外の更新されたコンテキストについてバンク切替えを行い、退避のための確保を行う（図５（ｇ））。つまり、図５（ｆ）においては、＃Ｔ２−２及び＃Ｔ２−４がバンク切替の対象となる。
【００６２】
その後、図５（ｈ）に示すように、コンテキスト記憶装置４に格納されたタスク１に対応するコンテキストの内、既にSet#ＭＥＭに格納されている＃Ｔ１−３及び＃Ｔ１−５を除くコンテキストの復帰がレジスタ単位で実行される。そしてこの後、Set#ＣＰＵ及びSet#ＭＥＭの双方の全レジスタ内のコンテキストをバンク切替えすることにより、直ちにＣＰＵ２によるタスク１の実行が可能となる。
【００６３】
このように、タスク１に対応したコンテキストの復帰は、更新がされてないコンテキストについてのみ行われ、ＣＰＵ２は、復帰されたコンテキストと、更新済でSet#ＭＥＭに保留されたコンテキストとを用いて続くタスク１の処理を実行することになる。このため、上述したＣＰＵ２による誤作動等が生じることはない。
【００６４】
以上の実施例に示したコンテキスト切替処理を実行するために、コンテキスト制御装置５が実行する具体的処理の一例を、図６に示すフローチャートに沿って詳細に説明する。
尚、当該フロチャートの中で用いられる記号の内、ｘはレジスタファイル３内のレジスタの位置（番号）を示すインデックス、ＯｌｄＴｓｋはタスク切替要求が発生する前に実行されていたタスクに割り当てられたＩＤ番号、ＮｅｗＴｓｋはタスク切替え後に実行されるタスクに割り当てられたＩＤ番号、ＣＰＵ［ｘ］はSet#ＣＰＵ内においてＣＰＵ２からアクセスされるレジスタ、ＭＥＭ［ｘ］はSet#ＭＥＭ内においてコンテキスト記憶装置４からアクセスされるレジスタ、Ｆｌａｇ［ｘ］は、アクセス監視手段７が保有し、ＣＰＵ［ｘ］のどのレジスタがＣＰＵ２から更新されたかを示すフラグ、Ｔｓｋ［ｘ］は、タスク記憶手段８が保有し、ＭＥＭ［ｘ］に格納されたコンテキストの内、退避が必要なコンテキストがどのタスクに対するものかをタスクＩＤで示すものである。
【００６５】
まず、タスク切替要求があったか否かが判断される（Ｓ１１０）。このとき、タスク切替要求が無いと判断された場合には（Ｓ１１０：ＮＯ）、続いて、Set#ＣＰＵの各レジスタ内でコンテキストの更新があったか否かが判断される（Ｓ１２０）。そして、コンテキストの更新があったと判断された場合には（Ｓ１２０：ＹＥＳ）、アクセス監視手段７により、更新されたコンテキストを格納するレジスタに対応したＦｌａｇ［ｘ］に１がセットされると共に、退避／復帰手段６により、このレジスタに対応するＭＥＭ［ｘ］のコンテキストがコンテキスト記憶装置４に退避される（Ｓ１３０）。尚、この動作は、例えば、図２（ｄ）において、Ｔ２−１が更新され、＃Ｔ１−１が退避される処理に対応する。
【００６６】
他方、Ｓ１２０において、Set#ＣＰＵにてコンテキストの更新がなかったと判断された場合には（Ｓ１２０：ＮＯ）、Ｓ１１０に戻る。
一方、Ｓ１１０において、タスク切替要求があったと判断された場合には（Ｓ１１０：ＹＥＳ）、まず最初（０番目）のレジスタ内のコンテキストを処理するために、ｘを０にリセットする（Ｓ１４０）。
【００６７】
そして、Ｆｌａｇ［ｘ］（つまりＦｌａｇ［０］）を参照することにより、ＣＰＵ［ｘ］が更新されているか否かを確認する（Ｓ１５０）。このとき、Ｆｌａｇ［ｘ］が１、つまり、ＣＰＵ［ｘ］が更新されていると判断されると（Ｓ１５０：ＹＥＳ）、このＣＰＵ［ｘ］内のコンテキストは後に退避する必要があるため、その退避先のタスクのＩＤ番号を記憶するために、Ｔｓｋ［ｘ］としてＯｌｄＴｓｋを格納しておく（Ｓ１６０）。尚、この動作は、例えば、図２（ｄ）においてＴ２−１が更新されて＃Ｔ２−１となり、そのSet#ＣＰＵのタスク情報としてタスク記憶装置８の対応領域にタスク２を表す「２」が記憶された状態に対応する。
【００６８】
一方、Ｓ１５０において、Ｆｌａｇ［ｘ］が０、つまり、ＣＰＵ［ｘ］が更新されていないと判断されると（Ｓ１５０：ＮＯ）、続いて、タスク記憶手段８に格納されたSet#ＭＥＭ内のレジスタのタスク情報に基づいて、タスク切替えが要求されているタスク（つまりＮｅｗＴｓｋ）が、更新されたものであり退避が必要であるタスク（つまりＴｓｋ［ｘ］）に一致しないか否かが判断される（Ｓ１７０）。このとき、一致しないと判断された場合には（Ｓ１７０：ＹＥＳ）、当該ＣＰＵ［ｘ］についてバンク切替を行い、Set#ＣＰＵ内のコンテキストとSet#ＭＥＭ内のコンテキストが入れ替えられる（Ｓ１８０）。尚、この動作は、例えば、図２（ｄ）及び（ｅ）において、Ｔ２−０と＃Ｔ１−０とが入れ替えられる処理に対応する。
【００６９】
そしてその後、ＭＥＭ［ｘ］に対してコンテキスト記憶装置４からのコンテキストの復帰が行われる（Ｓ１９０）。尚、この動作は、例えば図５（ｇ）に示すSet#ＭＥＭ側においてＴ３−２が格納されたレジスタに対し、図５（ｈ）に示すようにＴ１−２が復帰した状態に対応する。
【００７０】
他方、Ｓ１７０にて、ＮｅｗＴｓｋがＴｓｋ［ｘ］に一致したと判断された場合には（Ｓ１７０：ＮＯ）、このＭＥＭ［ｘ］に対しては退避を行わないようにし、さらにＣＰＵ２によりＮｅｗＴｓｋの実行でこのレジスタが更新されない場合も復帰対象となるため、Ｆｌａｇ［ｘ］を１にセットする（Ｓ２００）。尚、この動作は、例えば図５（ｇ）に示すSet#ＭＥＭ側にいおいて＃Ｔ１−３が格納されたレジスタに対して、図５（ｈ）に示すように復帰が行われない状態に対応する。
【００７１】
こうして、０番目のレジスタに対する処理が終了すると、ｘに１がインクリメントされ（Ｓ２２０）、続いて１番目のレジスタに対する処理が同様に行われる。以上のＳ１５０〜Ｓ２００までの処理を、全てのレジスタ（０番目のレジスタから５番目のレジスタまで）について行い、全てのレジスタについて上記処理が終了したと判断されると（Ｓ２１０：ＹＥＳ）、Set#ＣＰＵ及びSet#ＭＥＭの双方の全レジスタ内のコンテキストがバンク切替えされる（Ｓ２３０）。これにより、直ちにＣＰＵ２による次のタスクの実行が可能となる。
【００７２】
以上、本発明の実施例について説明したが、本発明の実施の形態は、上記実施例に何ら限定されることなく、本発明の技術的範囲に属する限り種々の形態をとり得ることはいうまでもない。
例えば、上記実施例では、コンテキスト制御装置５として、退避／復帰手段６、アクセス監視手段７、及びタスク記憶手段８より構成されるものを示したが、これら退避／復帰手段６、アクセス監視手段７、及びタスク記憶手段８を、それぞれ制御機能を有する独立した装置、つまり、退避／復帰装置、アクセス監視装置、及びタスク記憶装置として構成してもよい。
【図面の簡単な説明】
【図１】  本発明のコンテキスト切替装置の全体構成を示すブロック図である。
【図２】  本発明の第１実施例に係るコンテキスト切替処理の動作を示すタイミングチャート及びその動作説明図である。
【図３】  第２実施例に係るコンテキスト切替処理の動作を示すタイミングチャート及びその動作説明図である。
【図４】  第３実施例に係るコンテキスト切替処理の動作を示すタイミングチャートである。
【図５】  第３実施例に係るコンテキスト切替処理の動作を示す説明図である。
【図６】  本発明のコンテキスト切替処理の一例を示すフローチャートである。
【図７】  従来のコンテキスト切替装置の全体図及びコンテキスト切替処理の動作を示すタイミングチャートである。
【符号の説明】
１・・・コンテキスト切替装置、  ３・・・レジスタファイル、
４・・・コンテキスト記憶装置、  ５・・・コンテキスト制御装置、
６・・・退避／復帰手段、  ７・・・アクセス監視手段、
８・・・タスク記憶手段
【図１】
0004147717.tif 000002
【図２】
0004147717.tif 000003
【図３】
0004147717.tif 000004
【図４】
0004147717.tif 000005
【図５】
0004147717.tif 000006
【図６】
0004147717.tif 000007
【図７】
0004147717.tif 000008