(57)【要約】【課題】タスク管理の処理を高速化する。【解決手段】タスク実行中にシステムコールまたは割り込みが発生すると，実行中のタスクのスタックに，ＣＰＵが有する複数のレジスタのうち，このタスクにより使用されているレジスタの内容のみがセーブ（プッシュ）される（Ｓ１）。その後，システムコール等の要求処理，次の実行タスクの決定等が行われた後（Ｓ２〜Ｓ９），次に実行されるタスクのスタックから，この実行されるタスクに使用されるレジスタの内容がＣＰＵの対応するレジスタにロード（ポップ）される（Ｓ５，Ｓ８）。このように全てのレジスタではなく，使用されるレジスタの内容のみがセーブ／ロードされるので，処理量が減少し，処理の高速化が図られる。また，処理に要するクロック数がデータ移動命令よりも少ないプッシュ命令およびポップ命令を使用することにより，処理が高速化される。【選択図】　　　　図３
2004021610.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタを有する処理装置によって実行されるタスクのタスク管理を行うタスク管理装置において，
前記レジスタの内容を記憶する記憶手段と，
前記タスクの実行中にシステムコールまたは割り込みが発生すると，前記複数のレジスタのうち，該タスクにより使用されるレジスタの内容のみを前記記憶手段に格納するレジスタ退避手段と，
前記システムコールまたは割り込みの処理後，前記タスクの実行が開始される際に，前記レジスタ退避手段により退避されたレジスタの内容を前記複数のレジスタのうち対応するレジスタに復帰させるレジスタ復帰手段と，
を備えていることを特徴とするタスク管理装置。
【請求項２】
請求項１において，
前記レジスタ退避手段は，前記システムコールが発生した場合には，前記複数のレジスタのうち，前記タスクにより使用されるレジスタの内容のみを前記記憶手段に格納し，前記割り込みが発生した場合には，前記複数のレジスタのすべて，または，スタックポインタを除くレジスタのすべての内容を前記記憶手段に格納する，
ことを特徴とするタスク管理装置。
【請求項３】
請求項１または２において，
前記記憶手段は，プッシュダウンスタックであり，
前記処理装置は，命令セットとして，前記プッシュダウンスタックに前記レジスタの内容を格納するプッシュ命令と，前記プッシュダウンスタックに格納された前記レジスタの内容を前記レジスタに戻すポップ命令とを有し，
前記レジスタ退避手段は，前記処理装置に前記プッシュ命令を実行させることにより前記レジスタの内容を退避させ，
前記レジスタ復帰手段は，前記処理装置に前記ポップ命令を実行させることにより前記レジスタの内容を前記レジスタに復帰させる，
ことを特徴とするタスク管理装置。
【請求項４】
複数のレジスタを有する処理装置とメモリとを有するコンピュータによって実行されるタスクの管理方法において，
前記タスクの実行中にシステムコールまたは割り込みが発生すると，前記複数のレジスタのうち，前記タスクにより使用されるレジスタの内容のみを前記記憶部に格納し，
前記システムコールまたは割り込みの処理後，前記タスクの実行が開始される際に，前記記憶部に格納したレジスタの内容を，前記複数のレジスタのうち対応するレジスタに戻す，
ことを特徴とするタスク管理方法。
【請求項５】
タスクを実行するコンピュータに，
前記タスクの実行中にシステムコールまたは割り込みが発生すると，前記コンピュータの処理装置が有する複数のレジスタのうち，前記タスクによって使用されるレジスタの内容のみを前記コンピュータが有するメモリに格納する手順と，
前記システムコールまたは割り込みの処理後，前記タスクの実行が開始される際に，前記メモリに格納されたレジスタの内容を，前記処理装置の複数のレジスタのうち，対応するレジスタに戻す手順と，
を実行させるためのタスク管理プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，タスク管理装置，タスク管理方法，およびタスク管理プログラムに関し，特に，タスク実行中にシステムコールまたは割り込みが発生した際の処理を高速化するタスク管理装置，タスク管理方法，およびタスク管理プログラムに関する。
【０００２】
【従来の技術】
図５は，コンピュータにおいて実行される従来のタスク管理の処理の概要を示している。この図では，コンピュータの一部であるＣＰＵ７およびメモリ（ＲＡＭ）１５が示されている。
【０００３】
複数のタスク（ジョブ，スレッド）が実行されるコンピュータでは，タスク管理は実行され，タスクを管理している。
【０００４】
このタスク管理では，各タスク用にタスク制御ブロック（ＴＣＢ：Ｔａｓｋ　Ｃｏｎｔｒｏｌ　Ｂｌｏｃｋ）がメモリ１５に設けられ，このＴＣＢに，タスクの状態を表す情報が記憶される。ＴＣＢには，タスクＩＤ，プログラム開始アドレス等に加えて，ＣＰＵ７の全てのレジスタ（プログラムカウンタ８，スタックポインタ８，汎用レジスタ群１０等）を格納する領域が設けられている。図５では，２つのタスクＡおよびＢのそれぞれのＴＣＢ３１および３３が例示されている。
【０００５】
また，メモリ１５に一般に設けられるスタック領域は，各タスク用に分割され，図５では，タスクＡ用のスタック３２およびタスクＢ用のスタック３４が例示されている。
【０００６】
ここで，従来のタスク管理では，タスクＡがＣＰＵ７によって実行されている場合において，割り込み（たとえばタイマ割り込み，データ受信割り込み等）や，タスクＡからシステムコールが発生すると，ＣＰＵ７は，その全てのレジスタ（プログラムカウンタ８，スタックポインタ９，汎用レジスタ群１０等）のデータをタスクＡのＴＣＢ３１に記憶（セーブ）し，その後，割り込み処理やシステムコールの処理を実行していた。
【０００７】
また，従来のタスク管理では，割り込み処理やシステムコールの処理後，タスクスケジューリングによってタスクＡからタスクＢへの切り替えが発生した場合には，ＣＰＵ７は，切り替え後のタスクＢのＴＣＢ３３に記憶されている全てのレジスタの内容（データ，アドレス等）をＣＰＵ７の対応するレジスタ（プログラムカウンタ８，スタックポインタ９，汎用レジスタ群１０等）にロードしていた。
【０００８】
【発明が解決しようとする課題】
このように，従来のタスク管理では，ＣＰＵ７の全てのレジスタをセーブおよびロードしているため，タスクの切り替えに多くの時間を要していた。また，セーブする領域が各タスクのＴＣＢであるため，データのセーブおよびロードを実行する命令には，クロック数を多く必要とする移動命令（たとえばアセンブリ言語の“ＭＯＶ”命令）が必要となり，これによっても，タスクの切り替えに多くの時間を要していた。
【０００９】
このため，リアルタイム性の要求されるプログラム（たとえば高速交通機関制御，航空機管制等のプログラム）では，処理に遅れが生じ，リアルタイム処理を実現できないという問題があった。
【００１０】
本発明の目的は，タスク管理の処理，特に，タスク実行中にシステムコールまたは割り込みが発生した際のレジスタの退避および復帰処理を高速化することにある。
【００１１】
【課題を解決するための手段】
前記目的を達成するために，本発明によるタスク管理装置は，複数のレジスタを有する処理装置によって実行されるタスクのタスク管理を行うタスク管理装置において，前記レジスタの内容を記憶する記憶手段と，前記タスクの実行中にシステムコールまたは割り込みが発生すると，前記複数のレジスタのうち，該タスクにより使用されるレジスタの内容のみを前記記憶手段に格納するレジスタ退避手段と，前記システムコールまたは割り込みの処理後，前記タスクの実行が開始される際に，前記レジスタ退避手段により退避されたレジスタの内容を前記複数のレジスタのうち対応するレジスタに復帰させるレジスタ復帰手段と，を備えていることを特徴とする。
【００１２】
本発明によるタスク管理方法は，複数のレジスタを有する処理装置とメモリとを有するコンピュータによって実行されるタスクの管理方法において，前記タスクの実行中にシステムコールまたは割り込みが発生すると，前記複数のレジスタのうち，前記タスクにより使用されるレジスタの内容のみを前記記憶部に格納し，前記システムコールまたは割り込みの処理後，前記タスクの実行が開始される際に，前記記憶部に格納したレジスタの内容を，前記複数のレジスタのうち対応するレジスタに戻すことを特徴とする。
【００１３】
本発明によるタスク管理プログラムは，前記タスク管理方法を，タスクを実行するコンピュータに実行させるものである。
【００１４】
ここで，複数のレジスタを有する処理装置は，ＣＰＵ，マイクロコンピュータ，マイクロプロセッサ等のいずれであってもよい。
【００１５】
本発明によると，タスク実行中にシステムコールまたは割り込みが発生すると，タスクを実行する処理装置の有する複数のレジスタのうち，該タスクにより使用されるレジスタの内容のみが記憶手段に格納（退避）される。したがって，従来のように，複数のレジスタのすべての内容を格納する場合よりも，格納に要する処理量が減少し，処理速度を向上させることができる。
【００１６】
本発明の一実施の形態において，前記レジスタ退避手段は，前記システムコールが発生した場合には，前記複数のレジスタのうち，前記タスクにより使用されるレジスタの内容のみを前記記憶手段に格納し，前記割り込みが発生した場合には，前記複数のレジスタのすべて，または，スタックポインタを除くレジスタのすべての内容を前記記憶手段に格納する。
【００１７】
また，好ましくは，前記記憶手段は，プッシュダウンスタックであり，前記処理装置は，命令セットとして，前記プッシュダウンスタックに前記レジスタの内容を格納するプッシュ命令と，前記プッシュダウンスタックに格納された前記レジスタの内容を前記レジスタに戻すポップ命令とを有し，前記レジスタ退避手段は，前記処理装置に前記プッシュ命令を実行させることにより前記レジスタの内容を退避させ，前記レジスタ復帰手段は，前記処理装置に前記ポップ命令を実行させることにより前記レジスタの内容を前記レジスタに復帰させる。
【００１８】
プッシュ命令およびポップ命令は，データの移動命令（たとえばアセンブラ言語の“ＭＯＶ”）よりも，少ないクロック数で実行することができる。したがって，これによっても，処理速度を向上させることができる。
【００１９】
【発明の実施の形態】
以下に，本発明の実施の形態を，図面を参照しながら説明するが，これは一例であって，本発明の技術的範囲を限定するものではない。
【００２０】
図１は，本発明の一実施の形態によるタスク管理装置１の構成を示す機能ブロック図である。タスク管理装置１は，レジスタ退避部２，要求処理部３，実行タスク決定部４，ＴＣＢ更新部５，レジスタ復帰部６，および記憶部２０を有する。記憶部２０は，スタック（プッシュダウンスタック）２１を含んでいる。
【００２１】
レジスタ退避部２は，タスクの実行中にシステムコールまたは割り込みが発生した場合に，タスクを実行しているコンピュータの処理装置（ＣＰＵ，マイクロコンピュータ，マイクロプロセッサ等）の所定のレジスタ（後述）の内容（データ，アドレス等）を，記憶部２０のスタック２１に格納（セーブ，プッシュ）する。要求処理部３は，レジスタ退避部２によりレジスタの内容がスタック２１にセーブされた後，システムコールまたは割り込みの処理を実行する。
【００２２】
実行タスク決定部４は，要求処理部３によるシステムコールまたは割り込みの処理後，次に実行すべきタスクを決定（選択）する。システムコールまたは割り込み前に実行されていたタスクが再び選択される場合もあるし，システムコールまたは割り込みによって別のタスクの実行が必要となり，この別のタスクが選択される場合もある。別のタスクが選択された場合に，実行タスク決定部４は，タスク切り替えを実行する。
【００２３】
ＴＣＢ更新部５は，実行タスク決定部４によりタスク切り替えが行われた場合に，タスク切り替え前に実行されていたタスクのタスク制御ブロック（ＴＣＢ：Ｔａｓｋ　Ｃｏｎｔｒｏｌ　Ｂｌｏｃｋ）の内容およびタスク切り替え後に実行されるタスクのＴＣＢの内容を更新する。タスク切り替えが行われない場合には，ＴＣＢ更新部５はこの更新処理を実行しない。
【００２４】
レジスタ復帰部６は，実行タスク決定部４によって決定されたタスクについての所定のレジスタの内容をスタック２１から，タスクを実行するコンピュータの処理装置の対応するレジスタに格納（ロード，ポップ）する。その後，実行タスク決定部４により決定されたタスクが実行される。
【００２５】
このタスク管理装置１は，たとえば，タスクを実行するコンピュータ内に設けられ，コンピュータのオペレーティングシステム（ＯＳ）の一部として，プログラム（タスク管理プログラム）により実現することができる。図２は，タスク管理装置１がタスク管理プログラムとして実現され，実装されたコンピュータ１００の構成の一部を示している。
【００２６】
このコンピュータ１００は，一般的なコンピュータであり，ＣＰＵ７，メモリ（ＲＡＭ）１５，図示しないＲＯＭ等を有する。ＣＰＵ７，メモリ１５，ＲＯＭ（図示略）等は，図示しないシステムバスによって接続され，ＣＰＵ７は，メモリ１５およびＲＯＭからデータを読み出し，また，メモリ１５にデータを書き込むことができる。
【００２７】
ＣＰＵ７は，図示しない演算ユニット（ＡＬＵ）に加えて，処理対象となるデータ，アドレス等を一時的に保持するレジスタ群１０，プログラムカウンタ（ＰＣ）８，スタックポインタ（ＳＰ）９等のレジスタを有する。レジスタ群１０は，ｎ個（ｎは２以上の整数）の汎用レジスタを有する。また，ＣＰＵ７には，図示しない割り込み信号線が入力されている。割り込みには，タイマ割り込み，外部からのデータ受信割り込み（たとえばシリアルポートからのデータ受信割り込み）等がある。
【００２８】
メモリ１５には，各タスクの状態を表す情報を格納するタスク制御ブロック（ＴＣＢ：Ｔａｓｋ　Ｃｏｎｔｒｏｌ　Ｂｌｏｃｋ）および各タスクのスタック領域（プッシュダウンスタック領域）が設けられ，図２では，一例として，タスクＡおよびＢのそれぞれのＴＣＢ１１および１３ならびにスタック１２および１４の領域が示されている。
【００２９】
なお，このスタック１２および１４は，図１のスタック２１を詳細に示したものである。また，タスクＡ，Ｂ等は，たとえば，リアルタイム性の要求されるプログラム（たとえば高速交通機関制御，航空機管制等のプログラム）のタスクであってもよいし，リアルタイム性が要求されないプログラムのタスクであってもよい。
【００３０】
ＴＣＢ１１は，タスクＩＤ，プログラム開始アドレス，スタック先頭アドレス，現在のスタックアドレス，スタックサイズ，優先順位，停止原因，タスクの状態等の各データ項目を有する。ＴＣＢ１３も，同じデータ項目を有する。以下では，タスクＡのＴＣＢ１１を例にとり，各データ項目を説明するが，以下の内容はタスクＢのＴＣＢ１３や他の図示しないタスクのＴＣＢにも同様に当てはまる。
【００３１】
「タスクＩＤ」は，タスクＡを他のタスクから一意に識別するための識別情報である。「プログラム開始アドレス」は，タスクＡのプログラムが記憶されている記憶装置（ＲＯＭ（図示略）またはメモリ１５）の先頭アドレスである。
【００３２】
「スタック先頭アドレス」は，タスクＡのスタック１２の先頭アドレスである。「現在のスタックアドレス」は，タスクＡのスタック１２の現在のスタックアドレス，すなわち，次にプッシュ（ＰＵＳＨ）命令が実行された場合にデータが格納されるメモリセルのアドレスである。「スタックサイズ」は，タスクＡに割り当てられたスタック領域のサイズ（たとえばバイト数）である。
【００３３】
「優先順位」は，タスクＡの優先順位であり，「停止原因」は，タスクＡが停止している場合にその停止した原因である。この停止原因として，システムコール，割り込み，または終了がある。「タスクの状態」は，タスクＡの現在の状態であり，たとえばＲＵＮ，ＲＥＡＤＹ，およびＷＡＩＴのいずれかの状態をとる。
【００３４】
なお，従来技術の欄で説明した図４のＴＣＢと異なり，ＳＰ９以外のレジスタ（ＰＣ８，レジスタ群１０）の格納領域は，ＴＣＢ１１および１３には設けられていない。
【００３５】
メモリ１５には，処理中のデータ等が一時的に記憶されるワーク領域等（図示略）も設けられる。また，タスク管理プログラムを含むＯＳのプログラムは，ＲＯＭ（図示略）に記憶される場合もあるし，ＲＯＭまたはハードディスクから読み出されてメモリ１５に記憶される場合もある。
【００３６】
図３は，コンピュータ１００におけるタスク管理装置１（タスク管理プログラム）の処理の流れを示すフローチャートである。このフローチャートは，図１の機能ブロックの詳細な処理を示すものでもある。
【００３７】
まず，フローチャートの処理を説明する前に，本実施の形態の前提事項について説明する。タスクＡ，Ｂ等のタスクプログラムおよびシステムコール（ＯＳへの処理要求）の処理プログラムは，そのソースプログラム（ソースコード）が所定の高級言語（たとえばＣ言語，Ｃ＋＋言語等）で記述された後，コンパイラ（たとえばＣ言語やＣ＋＋言語のコンパイラ等）でコンパイルされてオブジェクトプログラム（オブジェクトコード，マシン語プログラム）に変換されているものとする。一方，割り込み処理のプログラムは，アセンブラ言語により記述され，オブジェクトプログラムに変換されているものとする。
【００３８】
コンパイラは，一般に，コンパイル後のオブジェクトプログラムにおいて使用されるレジスタを所定のものに限定しており，ＣＰＵ７が備えているすべてのレジスタをオブジェクトプログラムにおいて使用するわけではない。すなわち，オブジェクトプログラムで使用されるレジスタは，ＣＰＵ７のすべてのレジスタではなく，一部のレジスタである。たとえば，レジスタ群１０のレジスタＡ１〜Ａｎのうち，レジスタＡ１〜Ａｉ（ｉはｎより小さい整数）がオブジェクトプログラムで使用される。
【００３９】
したがって，タスクの実行中にシステムコールまたは割り込み処理が発生し，タスクの処理データやアドレスを格納したレジスタの内容を一時的に退避させる必要がある場合に，すべてのレジスタではなく，コンパイラにより限定されている所定のレジスタの内容のみを退避させるだけで，タスクの処理状況を保存することができる。そして，この所定のレジスタの内容を再びＣＰＵ７の対応するレジスタに復帰させるだけで，タスクの処理を再開することができる。所定のレジスタがどのレジスタであるかは，コンパイラを調べることにより知ることができる。
【００４０】
そこで，本実施の形態では，タスクの実行中にシステムコールまたは割り込みが発生した場合に，コンパイラにより限定された所定のレジスタ（以下，単に「所定のレジスタ」という。）の内容のみを退避および復帰させることとする。これにより，すべてのレジスタの内容を退避させ，復帰させていた従来の処理よりも，退避および復帰に要する処理量が減少し，処理を高速化することができる。
【００４１】
なお，割り込み処理のプログラムはアセンブラ言語で記述されるので，記述するユーザによって様々なレジスタが使用され，一定していないことが想定される。しかし，このような場合であっても，タスクの処理データやアドレスは前述の通り保存されるので，問題はない。
【００４２】
また，本実施の形態では，レジスタ（ＳＰ９を除く。）が一時的に退避されるメモリ１５の領域が従来のようなＴＣＢ１１，１３ではなく，スタック１２，１４とされる。スタック１２，１４へレジスタの内容の書き込むプッシュ命令（ＰＵＳＨ）およびスタック１２，１４からレジスタの内容の読み出すポップ命令（ＰＯＰ）は，ＴＣＢ１１，１３へレジスタの内容の書き込む命令や読み出す命令（たとえばいずれも移動命令の“ＭＯＶ”）よりも，少ないクロック数で処理される。したがって，レジスタの内容の退避先をスタックとすることによって，従来よりも少ないクロック数で退避処理および復帰処理が完了し，これによっても，処理を高速化することができる。
【００４３】
以下，このような前提を踏まえて，図３のフローチャートの処理を詳述する。
【００４４】
まず，実行中にシステムコールまたは割り込みが発生すると，タスク管理装置１（タスク管理プログラムを実行するＣＰＵ７）は，実行中のタスクのスタックに，所定のレジスタの内容をセーブ（プッシュ）する（Ｓ１）。
【００４５】
たとえば，タスクＡの実行中にシステムコールまたは割り込みが発生すると，所定のレジスタとして，ＰＣ８およびレジスタ群１０のうちのレジスタＡ１〜Ａｉの内容がタスクＡのスタック１２にセーブされる。これにより，タスク管理装置１は，タスクＡのＴＣＢ１１の現在のスタックアドレスを更新する。
【００４６】
続いて，タスク管理装置１は，システムコールまたは割り込みの要求を処理すし（Ｓ２），処理後，次に実行すべきタスクを決定する（Ｓ３）。
【００４７】
タスクの決定により，タスク切り替えが行われず，これまで実行されていたタスクが継続して実行される場合には（Ｓ４で「なし」），タスク管理装置１は，これまで実行されていたタスクのスタックから所定のレジスタの内容を，ＣＰＵ７の対応するレジスタにロード（ポップ）する（Ｓ５）。このロード処理において，所定のレジスタの内容を読み出すべきスタックのアドレスは，ＴＣＢの現在のスタックアドレスにより示されている。ロード後，タスク管理装置１は，ＴＣＢの現在のスタックアドレスを更新する。
【００４８】
たとえば，これまで実行されていたタスクがタスクＡの場合には，タスクＡのスタック１２の現在のスタックアドレスからＰＣ８およびレジスタＡ１〜Ａｉの内容が，ＣＰＵ７のＰＣ８およびレジスタＡ１〜Ａｉにそれぞれロードされる。その後，タスクＡのＴＣＢ１１の現在のスタックアドレスが更新され，タスクＡの実行が継続される。
【００４９】
一方，タスク切り替えが行われ，別のタスクが実行される場合には（Ｓ４で「あり」），タスク管理装置１は，切り替え前に実行されていたタスクのＴＣＢおよび切り替え後に実行されるタスクのＴＣＢを更新する（Ｓ６，Ｓ７）。
【００５０】
たとえば，タスクＡの実行後，タスク切り替えによりタスクＢが実行される場合に，タスクＡのＴＣＢ１１の停止原因にシステムコールまたは割り込みが書き込まれ，タスクの状態に“ＷＡＩＴ”が書き込まれるとともに，タスクＢのＴＣＢ１３のタスクの状態に“ＲＵＮ”が書き込まれる。
【００５１】
その後，タスク管理装置１は，切り替え後に実行されるタスクの前回の停止原因をＴＣＢの停止原因から読み出し，停止原因がシステムコールまたは割り込みであるか，終了であるかを判断する（Ｓ９）。
【００５２】
たとえば，タスク切り替えによりタスクＢが実行される場合に，タスクＢのＴＣＢ１３の停止原因が調べられる。
【００５３】
停止原因がシステムコールまたは割り込みである場合には，前回停止した際にセーブした所定のレジスタの内容がスタックに格納されているので，タスク管理装置１は，これらの内容を所定のレジスタにロードする（Ｓ８）。一方，停止原因が終了である場合には，その停止の際に，所定のレジスタの内容をセーブする必要がなく，したがって所定のレジスタの内容はスタックに格納されていないので，タスク管理装置１は，ロード処理を行わない。その後，切り替え後のタスクが実行される。
【００５４】
このような処理が，各タスクの実行中にシステムコールまたは割り込みが発生するごとに繰り返される。
【００５５】
システムコールの際に退避させるレジスタと割り込みの際に退避させるレジスタとを異ならせることもできる。たとえば，システムコールの際には，前述した所定のレジスタを退避させ，割り込みの場合には，ＳＰ９を除く全レジスタを退避させることもできる。
【００５６】
図４は，システムコールの際に退避させるレジスタと割り込みの際に退避させるレジスタとが異なる場合におけるタスク管理装置（タスク管理プログラム）１の処理の流れを示すフローチャートである。図３のフローチャートと同じ処理には同じ符号を付し，その詳細な説明を省略する。
【００５７】
タスクの実行中に，システムコールまたは割り込みが発生すると，タスク管理装置１は，起動原因がシステムコールであるか，割り込みであるかを判断する（Ｓ１１）。
【００５８】
タスク管理装置１は，起動原因がシステムコールである場合には，ステップＳ１の処理を実行し，起動原因が割り込みである場合には，実行中のタスクのスタックに，ＳＰ９を除く全レジスタ（ＰＣ８およびレジスタＡ１〜Ａｎ）の内容をセーブする（Ｓ１２）。
【００５９】
続いて，タスク管理装置１は，ステップＳ２からＳ４の処理を実行し，ステップＳ４において，タスク切り替えが行われない場合には（Ｓ４で「なし」），起動原因についてステップＳ１１と同じ判断を行う（Ｓ１３）。
【００６０】
タスク管理装置１は，起動原因がシステムコールである場合には，ステップＳ５の処理を実行し，起動原因が割り込みである場合には，割り込み発生前に実行中であったタスクのスタックからＳＰを除く全レジスタの内容をＣＰＵ７の対応するレジスタにロードする（Ｓ１４）。その後，実行中であったタスクが再び実行される。
【００６１】
一方，ステップＳ４において，タスク切り替えが行われる場合には（Ｓ４で「あり」），タスク管理装置１は，ステップＳ６およびＳ７の処理を実行した後，切り替え後のタスクの前回の停止原因をＴＣＢの停止原因により判断する（Ｓ１５）。
【００６２】
タスク管理装置１は，停止原因がシステムコールの場合には（Ｓ１５で「システムコール」），ステップＳ８の処理（所定のレジスタの内容を所定のレジスタにロードする処理）を実行する。停止原因が割り込みの場合には（Ｓ１５で「割り込み」），タスク管理装置１は，この割り込みの際にＳＰ９を除く全レジスタの内容がスタックにセーブされているので，セーブされたレジスタの内容をＣＰＵ７の対応するレジスタにロードする（Ｓ１６）。
【００６３】
一方，停止原因が終了である場合には（Ｓ１５で「終了」），レジスタの内容は退避されていないので，レジスタの内容のロード処理は実行されない。その後，切り替え後のタスクが実行される。
【００６４】
このような処理が，各タスクの実行中にシステムコールまたは割り込みが発生するごとに繰り返される。
【００６５】
この図４のフローチャートに示す処理によっても，レジスタの退避および復帰に要する処理数が従来よりも減少するので，処理を高速化することができる。また，レジスタの退避先がスタックであるので，これによっても処理速度が向上する。
【００６６】
なお，割り込み発生の際に，ＳＰ９を除く全てのレジスタを退避し，その後，復帰させているが，ＳＰ９を含めて，退避および復帰処理を実行してもよい。
【００６７】
【発明の効果】
本発明によると，タスク管理に要する処理，特にレジスタの内容の退避処理および復帰処理に要する処理量が減少するので，タスク管理の処理を高速化することができる。また，レジスタの内容の退避処理および復帰処理を実行する命令として，プッシュ命令およびポップ命令をそれぞれ使用することにより，少ないクロック数で処理が実行され，これによっても処理を高速化することができる。
【図面の簡単な説明】
【図１】本発明の一実施の形態によるタスク管理装置の構成を示す機能ブロック図である。
【図２】本発明の一実施の形態によるタスク管理装置がタスク管理プログラムとして実現され，実装されたコンピュータの構成の一部を示している。
【図３】コンピュータにおけるタスク管理装置（タスク管理プログラム）の処理の流れを示すフローチャートである。
【図４】コンピュータにおけるタスク管理装置（タスク管理プログラム）の処理の流れを示すフローチャートである。
【図５】コンピュータにおいて実行される従来のタスク管理の処理の概要を示す。
【符号の説明】
１　タスク管理装置
２　レジスタ退避部
６　レジスタ復帰部
２０　記憶部
２１　スタック
７　ＣＰＵ
８　プログラムカウンタ
９　スタックポインタ
１０　レジスタ群
１５　メモリ
１１，１３　タスク制御ブロック
１２，１４　タスクのスタック
【図１】
2004021610.tif 000003
【図２】
2004021610.tif 000004
【図３】
2004021610.tif 000005
【図４】
2004021610.tif 000006
【図５】
2004021610.tif 000007