(58)【調査した分野】(Int.Cl.,DB名)
前記スケジューラ(33)が直接指示して、前記外部メモリ(6)から読み出したコンテキストを格納するためのリアルタイムスケジューリング用のリアルタイムレジスタバンク(32)を別途備えることを特徴とする請求項1又は2記載のデータ処理装置。
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1のような従来技術では、レジスタバンクに復帰されるのは実行可能状態のタスクに対応したコンテキストであり、現在は実行対象ではないが、例えばイベントが発生した直後から処理を開始する必要があるタスクについては、高速なコンテキストスイッチを行うことができない。また、従来技術は、ハードウェアスケジューラ(特許文献1ではメモリバスアービタ)によってコンテキストの退避,復帰が行われるため、レジスタバンク間においてデータ転送を高速に実行する技術が使用できない。
【0007】
本発明は上記事情に鑑みてなされたものであり、その目的は、現在実行対象となっているタスクのみならず、前記タスクの実行に伴い以降に実行される可能性があるタスクのコンテキストについても高速にスイッチすることができるデータ処理装置を提供することにある。
【課題を解決するための手段】
【0008】
請求項1記載のデータ処理装置によれば、コンテキストに、当該コンテキストに対応するタスクが実行されることに関連して、以降に実行される可能性が高いと推定される他のタスクに対応する1つ以上のコンテキストについて、外部メモリ上の
先頭アドレスを示すリンクコンテキスト情報を含むようにする。そして、CPUコアが、スケジューラからの切り替え指示に応じて複数のレジスタバンクの1つに格納されているコンテキストの実行を開始すると、レジスタバンク制御手段は、そのコンテキストに付随するリンクコンテキスト情報で示される他のコンテキス
トをレジスタバンクに格納する。
【0009】
このように構成すれば、CPUコアがあるタスクを実行している途中で、若しくは実行することに伴って発生したイベントにより、他のタスクを実行する必要が生じた場合に、前記他のタスクに対応するコンテキス
トは、既にその時点で外部メモリから読み出されており、レジスタバンクに格納されている可能性が高くなる。そして、CPUコアが、前記他のタスクに切り替えて直ちに実行することができれば、総じてマルチタスクの処理速度が高速になる。
また、リンクコンテキスト情報を取り扱うレジスタバンクの制御は、スケジューラとは独立したレジスタバンク制御手段によって行われる。したがって、スケジューラが実行するリアルタイムスケジューリングとは無関係に、レジスタバンク間においてデータ転送を高速に実行することが可能になる。
【発明を実施するための形態】
【0011】
(第1実施例)
以下、第1実施例について説明する。マイクロコンピュータ1(データ処理装置)を構成するCPU2(CPUコア)は、CPUメモリバス(アドレス及びデータバス)3及びメモリコントローラ4を介してROM5(プログラムメモリ)及びRAM6(外部メモリ)にアクセスする。ROM5には、CPU2によって実行されるプログラムやデータが記憶されており,RAM6はCPU2のワークエリアとして使用される。CPU2は、前記プログラムに従い複数のタスクを切り換えながら実行するようになっており、所謂マルチタスクCPUである。
【0012】
また、マイクロコンピュータ1は、複数,例えば4つのレジスタバンク7(1〜4)を備えている。これらのレジスタバンク(スレッド)7には、CPU2が実行対象とするタスクを切り換える際に、タスクの実行途中の状態が反映されているプログラムカウンタやステータスレジスタ,汎用レジスタ等の各種レジスタの値であるコンテキストが格納される。CPU2が切り換えて実行するタスクの数はレジスタバンク7の数よりも多いため、レジスタバンク7に格納しきれないタスクのコンテキストは、RAM6に記憶される。
【0013】
そして、レジスタバンク7とRAM6との間におけるコンテキストの入れ換えは、実行コンテキスト情報部8の制御ロジック9(レジスタバンク制御手段)によって行われる。レジスタバンク7及び実行コンテキスト情報部8とRAM6との間は、コンテキストメモリバス10及びメモリコントローラ4を介して接続されている。実行コンテキスト情報部8より出力されるアドレスに応じてRAM6より読み出されたコンテキストは、デマルチプレクサ11を介してレジスタバンク7(1〜4)の何れかに格納される。したがって、メモリコントローラ4は、CPU2がCPUメモリバス3を介して行うアクセスと、実行コンテキスト情報部8がコンテキストメモリバス10を介して行うアクセスとを調停する。
【0014】
レジスタバンク7(1〜4)に格納されたコンテキストは、マルチプレクサ12を介してCPU2に読み出されるが、上記デマルチプレクサ11及びマルチプレクサ12の切り換え制御も、実行コンテキスト情報部8により行われる。尚、レジスタバンク7に格納されたコンテキストを、コンテキストスイッチによりRAM6に退避させる場合もあるので、デマルチプレクサ11は、その際にはマルチプレクサとして機能する。
【0015】
スケジューラ13は、例えば割り込み等の外部イベントやタスクの実行等に伴い発生する内部イベントに応じて、CPU2に実行させるタスクの切り換えを制御するロジックである。スケジューラ13は、実行コンテキスト情報部8に対して、実行対象とするタスクを選択させる信号を出力する。すると、実行コンテキスト情報部8は、上記タスクに対応するコンテキストが格納されているレジスタバンク7を指定するバンク番号をマルチプレクサ12に与えて、前記コンテキストを選択させる。
【0016】
本実施例では、タスクのコンテキストに、リンクコンテキスト情報が含まれている。リンクコンテキスト情報とは、当該コンテキストに対応するタスクが実行されることに関連して、以降に実行される可能性が高いと推定される他のタスクに対応する1つ以上のコンテキストである。
図3(a)に示すように、コンテキストAについてのリンクコンテキスト情報はコンテキストB,C,Dであり、コンテキストBについてのリンクコンテキスト情報はコンテキストC,D,Hである。また、リンクコンテキスト情報の実態は、指定されているコンテキストが格納されているRAM6の領域を示す物理アドレス又は仮想アドレスである。
【0017】
また、
図2に示すように、各コンテキストの内容は、プログラムカウンタ(PC)値,リンクコンテキスト情報(コンテキストAの場合、上記コンテキストB,C,Dに対応),汎用(GP)レジスタ0〜15等である。各コンテキストが格納されている領域の先頭アドレスは、スタックポインタによって示される。例えば、スケジューラ13によりあるタスクの実行が選択された際に、前記タスクのコンテキストがその時点でレジスタバンク7に格納されていなければ、RAM6より読み出されてレジスタバンク7に格納される。そして、選択されたタスクがCPU2によって実行されると、対応するコンテキストに含まれているリンクコンテキスト情報が実行コンテキスト情報部8のリンクコンテキスト情報部14に格納される。すると、制御ロジック部9により、各リンクコンテキスト情報に対応するRAMアドレスがコンテキストメモリバス10に順次出力され、読み出されたコンテキストが、デマルチプレクサ11を介してレジスタバンク7に格納される(詳細は後述する)。
【0018】
また、
図4に示すように、リンクコンテキスト情報は、当初はROM5の例外ベクタ領域に配置されており、当該領域から読み出される。その先頭アドレス(0xXXXX_XXXX)は、例えば図示しないベクタベースアドレスレジスタによって指定される。尚、図中のベクタ番号はタスクに対応しており、例えばベクタ0のリンクコンテキスト情報はタスク0の情報であり、ベクタ0の分岐命令は、その分岐先にあるタスク0の実行開始アドレスをフェッチするために配置されている。
【0019】
プログラムフェッチ制御モジュール15は、CPU2の内部ロジックであり、通常はプログラムカウンタ16のカウンタ値が示すアドレスを、マルチプレクサ17を介してフェッチする。そして、割り込みイベントが発生すると、その割り込みに対応する処理を開始するため、マルチプレクサ17をベクタフェッチ側に切り換えてベクタアドレスを出力する。
【0020】
また、ROM5にアクセスしてフェッチしたプログラムの命令又はデータは、デマルチプレクサ18を介して読み込まれる。フェッチしたデータがリンクコンテキスト情報である場合は、デマルチプレクサ18により振り分けられ、CPU2がそのリンクコンテキスト情報をリンクコンテキスト情報部14に格納する。デマルチプレクサ18の切り替え制御は、ベクタをフェッチするアドレスのLSBによって行われる。
【0021】
次に、本実施例の作用について
図3及び
図5を参照して説明する。
図5は、スケジューラ13がCPU2に、実行対象とするタスクをタスクNに切り替えるように要求した際に、例えばオペレーティングシステム(OS)によって実行される処理を示す。尚、各タスクの状態は「実行状態」,「実行可能状態」,「待機状態」,「休止状態」の何れかであり、それぞれ以下の状態に対応する。
「実行状態」:タスクがCPU2によって実行中。
「実行可能状態」:タスクのコンテキストがレジスタバンク7に格納済み。
「待機状態」:タスクのコンテキストがRAM6に格納済み。
「休止状態」:タスクのコンテキストがRAM6に未格納。
【0022】
図5において、先ず、タスクNのコンテキストが、レジスタバンク7に格納(ロード)済みか否かを判断し(S1)、格納済みであれば(YES;「実行可能状態」)マルチプレクサ12により対応するレジスタバンク7を指定するように切り換える(S2)。すると、CPU2は、タスクNのコンテキストを読み込んで各レジスタ等に対応するレジスタ値等をセットして、タスクNの実行を開始する(「実行状態」)。すなわち、ROM5の例外ベクタ領域よりベクタNをフェッチして、分岐命令が実行される。
【0023】
一方、タスクNのコンテキストがレジスタバンク7に格納済みでなければ(S1:NO)、タスクNが「休止状態」か否かを判断する(S3)。「休止状態」であれば(YES)、タスクNのコンテキストをROM5の例外ベクタ領域から読み出して(S5:ベクタフェッチ)ステップS2に移行する。また、タスクNが「休止状態」でなければ(S3:NO)、タスクNのコンテキストはRAM6に格納済みであるから(「待機状態」)、RAM6にアクセスして上記コンテキストをフェッチすると、ステップS2に移行する。
【0024】
図3(b)において、スケジューラ13により実行対象がタスクAに切り換えられると、対応するコンテキストAへの切り換え,すなわちコンテキストスイッチが行われる。タスクAが「待機状態」であれば、メモリバス10よりコンテキストAが読み出され、レジスタバンク7(1)に格納される。すると、CPU2は、コンテキストAを読み出してタスクAの実行を開始するが、コンテキストAのリンクコンテキスト情報によりコンテキストB,C,Dが指定されている。これらのタスクB,C,Dも「待機状態」であれば、メモリバス10よりコンテキストB,C,Dも読み出されてレジスタバンク7(2〜4)に格納される。
【0025】
タスクAを実行した結果、次にタスクBに切り換えて実行することになり、コンテキストAからコンテキストBにスイッチする場合、タスクBは「実行可能状態」である。したがって、レジスタバンク7(2)よりコンテキストBが読み出され、CPU2によって直ちに実行が開始される。コンテキストBのリンクコンテキスト情報はコンテキストC,D,Hであり、前者2つは「実行可能状態」である。コンテキストHが「待機状態」であればRAM6から読み出す必要があるが、事前にレジスタバンク7(1)に格納されているコンテキストAをRAM6に書き込んで退避させてから(タスクAは「待機状態」となる)、コンテキストHを読み出してレジスタバンク7(1)に格納する。
【0026】
以上のように本実施例によれば、コンテキストに、当該コンテキストに対応するタスクが実行されることに関連して、以降に実行される可能性が高いと推定される他のタスクに対応する1つ以上のコンテキストについて、RAM6上の
先頭アドレスを示すリンクコンテキスト情報を含むようにする。そして、CPU2が、スケジューラ13からの切り替え指示に応じてレジスタバンク7の1つに格納されているコンテキストの実行を開始すると、実行コンテキスト情報部8は、そのコンテキストに付随するリンクコンテキスト情報で示される他のコンテキストをレジスタバンク7に格納する。
【0027】
したがって、CPU2があるタスクを実行している途中で、若しくは実行することに伴って発生したイベントにより、他のタスクを実行する必要が生じた場合に、前記他のタスクに対応するコンテキストは、既にその時点でRAM6から読み出されており、レジスタバンク7に格納されている可能性が高くなる。そして、CPU2が、前記他のタスクに切り替えて直ちに実行することで、総じてマルチタスクの処理速度を従来よりも高速にすることができる。
【0028】
そして、リンクコンテキスト情報を取り扱うレジスタバンクの制御は、スケジューラ13とは独立した実行コンテキスト情報部8によって行われる。したがって、スケジューラ13が実行するリアルタイムスケジューリングとは無関係に、レジスタバンク7間においてデータ転送を高速に実行することが可能になる。
また、リンクコンテキスト情報を、CPU2が実行するプログラムが記憶されているROM5の例外ベクタ領域に配置し、リンクコンテキスト情報を、最初に取得する際には、CPU2が対応するタスクのベクタにフェッチを行って取得するようにした。これにより、CPUメモリバス3を介してリンクコンテキスト情報を取得できるので、専用のバスを別途設ける必要がない。
【0029】
(第2実施例)
以下、第1実施例と同一部分には同一符号を付して説明を省略し、異なる部分のみ説明する。第1実施例では1つのRAM6を用いたが、第2実施例のマイクロコンピュータ21は、2つのRAM22及び23を設ける。そして、前者のRAM22はCPU2のワークエリアとしてのみ使用し、後者のRAM23(外部メモリ)は、レジスタバンク7との間でコンテキストを退避,復帰させるためだけに使用する。そのため、メモリコントローラも、CPUメモリバス3側のメモリコントローラ24と、コンテキストメモリバス10側のメモリコントローラ25との2つをそれぞれ専用に設けている。
【0030】
以上のように構成される第2実施例によれば、RAM23をRAM22と別個に設け、コンテキストメモリバス10を、レジスタバンク7とRAM23との間で、コンテキストの退避処理及び復帰処理を行うための専用のバスとした。したがって、コンテキストメモリバス10を、上記退避処理及び復帰処理を行うのに適した設計にできる。例えば1つのコンテキストが256ビットであれば、データバスを256ビット幅として、1バスサイクルのみでRAM23にロード,ストアすることが可能となる。
【0031】
(第3実施例)
第3実施例のマイクロコンピュータ31は、レジスタバンク7(
図7では、リンクレジスタバンク)と別個に、4つのリアルタイムレジスタバンク32を備えている。リアルタイムレジスタバンク32は、実行コンテキスト情報部8によっては制御されず、スケジューラ13に替わるスケジューラ33によって制御される。スケジューラ33は、リンクコンテキスト情報に基づくコンテキストの管理とは別個に、リアルタイムスケジューリングにより必要と判断されたタスクのコンテキストを直接指定して、コンテキストメモリバス10より読み出す。そのため、コンテキストメモリバス10を介したRAM6へのアクセスアドレスは、実行コンテキスト情報部8が出力するアドレスと、スケジューラ33が出力するアドレスとがマルチプレクサ34を介して出力される。
【0032】
リアルタイムレジスタバンク32を増設したことに伴い、デマルチプレクサ11,マルチプレクサ12は、それぞれデマルチプレクサ35,マルチプレクサ36に置き換えられている。デマルチプレクサ35の切り替えは、上記RAM6へのアクセスアドレスを、実行コンテキスト情報部8,スケジューラ33の何れが出力したかに従って行われる。一方、マルチプレクサ36の切り替えは、第1実施例と同様に、スケジューラ33が指定したタスクに応じて実行コンテキスト情報部8により行われる。
【0033】
また、このように構成した場合、実行コンテキスト情報部8とスケジューラ33とのそれぞれが制御対象とするタスク群を分離するのがタスク管理上好ましい。例えばタイマ割り込み処理のように、一定周期で実行されるタスクは実行コンテキスト情報部8で扱い、その他の例えば外部からの割り込み処理のように非同期的に実行されるタスクは、スケジューラ33によるリアルタイムスケジューリングで取り扱うのが適している。
【0034】
以上のように第3実施例によれば、スケジューラ33が直接指示して、RAM6から読み出したコンテキストを格納するためのリアルタイムスケジューリング用のリアルタイムレジスタバンク32を別途備える。そして、スケジューラ33が、リアルタイムレジスタバンク32にコンテキストを格納する対象のタスクの種類と、リンクコンテキスト情報として扱うコンテキストのタスクとを、分離する。
これにより、現在はレジスタバンク7に格納されていないが、スケジューラ33がリアルタイムスケジューリングを行うことで、例えば割り込み処理が発生する確率が高いと判断したような場合に、対応するタスクのコンテキストを予めリアルタイムレジスタバンク32に格納しておく。すると、実際に割り込みが発生した際に、その処理を迅速に実行できる。
【0035】
(第4実施例)
第4実施例は、
図8(a)に示すように、例えばコンテキストBのリンクコンテキスト情報で指定すべきコンテキストがC,Dの2つのみである場合に、残りの1つを例えば「HOLD」というように、既にレジスタバンク7に格納されているコンテキストを保持するための指示子を指定可能とする。尚、この指示子は、実際には特定の数値を割り当てるようにする。このように指定すると、
図8(b)において、コンテキストAからBにスイッチした際に、リンクコンテキストは全て「実行可能状態」であるから、RAM6との間でコンテキストの退避や復帰を行う必要が無くなる。尚、指示子「HOLD」に替えて、例えばリンクコンテキストの「指定なし」を意味する「N/A」等の指示子を指定可能としても良い。
【0036】
以上のように第4実施例によれば、リンクコンテキスト情報において、レジスタバンク7に現在格納されて
おり、実行される可能性が高いリンクコンテキストを
そのまま保持するための指示子,又は
リンクコンテキストの「指定なし」を意味する指示子を
、前記実行される可能性が高いリンクコンテキストの先頭アドレスに替えて格納可能としたので、必要とするリンクコンテキストが指定可能な数よりも少ない場合に、RAM6に対する無用なアクセスを防止できる。
【0037】
本発明は上記した、又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
リンクコンテキスト情報で指定可能とするリンクコンテキストの数は「3」に限ることなく、個別の設計に応じて適宜変更して良い。それに従い、レジスタバンクの数も「4」に限ることなく適宜変更して良い。
【0038】
タスクスイッチを行う場合、必ずしも現在実行中のタスクのコンテキストをRAM6に退避させる必要はない。例えば、CPU2が実行した時点で「休止状態」にしても問題がないタスクであれば、コンテキストを退避させずに、新たにロードしたタスクのコンテキストをレジスタバンク7に上書きしても良い。
図5に示すタスクディスパッチ処理を、ハードロジックにより行っても良い。
リンクコンテキスト情報は、プログラムメモリの例外ベクタ領域に配置する必要はなく、その他の任意の領域に配置しても良い。