(57)【特許請求の範囲】
【請求項１】
タスク毎に確保した資源値保存領域に資源の状態を示す値である資源値を保存し、タスクを実行するときに当該タスクが使用する資源の資源値を資源値保存領域から読み出すことで、それぞれのタスクの独立性を保証して複数のタスクを並行して実行するデータ処理装置におけるマルチタスクシステムにより実現されたタスク切り替え方法において、
上記データ処理装置が資源を複数の資源グループに分割して管理し、
タスク切り替えにより実行中となったタスクが資源を使用する際、上記データ処理装置が当該資源が属する資源グループを当該タスクが使用可能か否かを判定する資源グループ使用可能性検査を行い、
資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定された場合には、上記データ処理装置が実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続し、
資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定されなかった場合には、上記データ処理装置が当該資源が属する資源グループを実行中のタスクが使用可能な状態に変更する資源グループ占有タスク切り替え処理を行った上で、実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続し、
タスク切り替えによって実行を開始するタスクが、上記資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、上記データ処理装置が当該資源グループの資源値の保存及び／又は読み込みを、タスク切り替えの際に必要に応じて予め行うこと
を特徴とするタスク切り替え方法。
【請求項２】
実行中のタスクが資源グループを使用可能であるか否かを示す資源グループ使用許可フラグを設けておき、
上記資源グループ使用可能性検査では、資源グループ使用許可フラグに基づいて、上記データ処理装置が実行中のタスクが資源グループを使用可能か否かを判定すること
を特徴とする請求項１記載のタスク切り替え方法。
【請求項３】
タスクが資源グループを占有しているか否かを資源グループ毎に示す資源グループ占有フラグをタスク毎に設けておき、
タスク切り替え時に、タスク切り替えによって停止するタスクに対応する資源グループ占有フラグのうち、資源グループ使用許可フラグに使用可能であることを示す値が設定されている資源グループに対応する資源グループ占有フラグに、上記データ処理装置が当該資源グループを占有していることを示す値を設定し、
上記資源グループ占有タスク切り替え処理では、実行中のタスクが使用しようとしている資源が属する資源グループをそれまで使用していたタスクに対応する資源グループ占有フラグのうち、当該資源グループに対応する資源グループ占有フラグに、上記データ処理装置が当該資源グループを占有していないこと示す値を設定する処理を行うこと
を特徴とする請求項２記載のタスク切り替え方法。
【請求項４】
上記資源グループ使用許可フラグは、共通の機能を提供する１以上の資源グループからなる機能ブロック単位で、実行中のタスクが資源グループを使用可能であるか否かを示すこと
を特徴とする請求項２記載のタスク切り替え方法。
【請求項５】
上記資源グループ使用許可フラグは、資源グループ毎に、実行中のタスクが資源グループを使用可能であるか否かを示すこと
を特徴とする請求項２記載のタスク切り替え方法。
【請求項６】
上記資源グループ占有タスク切り替え処理において、
実行中のタスクが使用しようとしている資源の資源値を保持する必要がある場合に、上記データ処理装置が当該資源が属する資源グループの資源値を資源値保存領域に保存する処理と、
実行中のタスクに対応した資源値保存領域に、実行中のタスクが使用しようとしている資源の資源値として有効な値が保存されている場合に、上記データ処理装置が実行中のタスクに対応した資源値保存領域から資源値を読み込む処理とを行うこと
を特徴とする請求項１記載のタスク切り替え方法。
【請求項７】
資源グループを占有しているタスクに対応した値が設定される資源グループ占有タスク変数を資源グループ毎に設けておき、
上記資源グループ占有タスク切り替え処理では、上記データ処理装置が実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数に、実行中のタスクに対応した値を設定する処理も行うこと
を特徴とする請求項６記載のタスク切り替え方法。
【請求項８】
実行中のタスクに対応した値が設定される実行中タスク変数を設けておき、
上記資源グループ使用可能性検査では、上記データ処理装置が実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数の値と、実行中タスク変数の値とを比較することにより、当該資源が属する資源グループを実行中のタスクが使用可能か否かを判定すること
を特徴とする請求項７記載のタスク切り替え方法。
【請求項９】
資源グループに属する資源に使用中のものが存在するか否かを資源グループ毎に示す資源グループ保存値有効フラグをタスク毎に設けておき、
タスクが資源を使用することにより当該資源の資源値が有効な値となった場合には、上記データ処理装置が当該タスクに対応した資源グループ保存値有効フラグのうち、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに使用中の資源が存在していることを示す値を設定し、
上記資源グループ占有タスク切り替え処理において、上記データ処理装置が実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、当該資源を使用しているタスクに対応した資源グループ保存値有効フラグに基づいて行うとともに、
上記資源グループ占有タスク切り替え処理において、上記データ処理装置が実行中のタスクに対応した資源値保存領域に、実行中のタスクが使用しようとしている資源の資源値として有効な値が保存されているか否かの判断を、実行中のタスクに対応した資源グループ保存値有効フラグに基づいて行うこと
を特徴とする請求項６記載のタスク切り替え方法。
【請求項１０】
タスク切り替えによって実行を開始するタスクが、上記資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、タスク切り替え処理において、上記データ処理装置が当該資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに対応した資源値保存領域に有効な値が存在していることを示す値を設定する処理を行うこと
を特徴とする請求項９記載のタスク切り替え方法。
【請求項１１】
タスクの実行を終了する際に、上記データ処理装置が当該タスクに対応した全ての資源グループ保存値有効フラグの値を、資源グループに使用中の資源が存在しないことを示す値に設定すること
を特徴とする請求項９記載のタスク切り替え方法。
【請求項１２】
資源グループに属する資源をタスクが使用中であるか否かを示す資源グループ使用中フラグを資源グループ毎に設けておき、
タスクが資源を使用するときには、上記データ処理装置が当該資源が属する資源グループに対応した資源グループ使用中フラグに、当該資源グループに属する資源をタスクが使用中であることを示す値を設定し、
上記資源グループ占有タスク切り替え処理において、実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、上記データ処理装置が当該資源が属する資源グループに対応した資源グループ使用中フラグに基づいて行うこと
を特徴とする請求項６記載のタスク切り替え方法。
【請求項１３】
タスク切り替えによって実行を開始するタスクが、上記資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、タスク切り替え処理において、上記データ処理装置が当該資源グループに対応した資源グループ使用中フラグに、当該資源グループに使用中の資源が存在していることを示す値を設定する処理を行うこと
を特徴とする請求項１２記載のタスク切り替え方法。
【請求項１４】
タスクが資源グループを占有しているか否かを資源グループ毎に示す資源グループ占有フラグをタスク毎に設けておき、
上記資源グループ占有タスク切り替え処理では、
実行中のタスクが使用しようとしている資源が属する資源グループを占有しているタスクに対応する資源グループ占有フラグのうち、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有フラグに、上記データ処理装置が当該資源グループを占有していないことを示す値を設定する処理と、
実行中のタスクに対応した資源グループ占有フラグのうち、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有フラグに、上記データ処理装置が当該資源グループを占有していることを示す値を設定する処理も行うこと
を特徴とする請求項６記載のタスク切り替え方法。
【請求項１５】
タスクが使用可能な資源を、キャッシュメモリを備えた中央処理装置を使用して取り扱う場合には、
上記データ処理装置が資源を資源グループに分割する際に、各資源グループに対応した各資源値保存領域のサイズがキャッシュメモリのキャッシュラインサイズの整数倍となるように分割すること
を特徴とする請求項１記載のタスク切り替え方法。
【請求項１６】
タスクが使用可能な資源を、キャッシュメモリを備えた中央処理装置を使用して取り扱うとともに、資源値保存領域をキャッシュメモリ上に確保する場合には、
上記データ処理装置が資源値保存領域の先頭アドレスがキャッシュメモリのキャッシュラインの境界となるように資源値保存領域を確保すること
を特徴とする請求項１記載のタスク切り替え方法。
【請求項１７】
タスク毎に確保した資源値保存領域に資源の状態を示す値である資源値を保存し、タスクを実行するときに当該タスクが使用する資源の資源値を資源値保存領域から読み出すことで、それぞれのタスクの独立性を保証して複数のタスクを並行して実行するデータ処理装置において、
資源を複数の資源グループに分割して管理し、
タスク切り替えにより実行中となったタスクが資源を使用する際、当該資源が属する資源グループを当該タスクが使用可能か否かを判定する資源グループ使用可能性検査を行い、
資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定された場合には、実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続し、
資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定されなかった場合には、当該資源が属する資源グループを実行中のタスクが使用可能な状態に変更する資源グループ占有タスク切り替え処理を行った上で、実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続し、
タスク切り替えによって実行を開始するタスクが、上記資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、当該資源グループの資源値の保存及び／又は読み込みを、タスク切り替えの際に必要に応じて予め行うこと
を特徴とするデータ処理装置。
【請求項１８】
実行中のタスクが資源グループを使用可能であるか否かを示す資源グループ使用許可フラグの値を保持する資源グループ使用許可フラグ保持手段を備え、
上記資源グループ使用可能性検査では、資源グループ使用許可フラグに基づいて、実行中のタスクが資源グループを使用可能か否かを判定すること
を特徴とする請求項１７記載のデータ処理装置。
【請求項１９】
上記資源グループ使用許可フラグは、共通の機能を提供する１以上の資源グループからなる機能ブロック単位で、実行中のタスクが資源グループを使用可能であるか否かを示すこと
を特徴とする請求項１８記載のデータ処理装置。
【請求項２０】
上記資源グループ使用許可フラグは、資源グループ毎に、実行中のタスクが資源グループを使用可能であるか否かを示すこと
を特徴とする請求項１８記載のデータ処理装置。
【請求項２１】
上記資源グループ占有タスク切り替え処理において、
実行中のタスクが使用しようとしている資源の資源値を保持する必要がある場合に、当該資源が属する資源グループの資源値を資源値保存領域に保存する処理と、
実行中のタスクに対応した資源値保存領域に、実行中のタスクが使用しようとしている資源の資源値として有効な値が保存されている場合に、実行中のタスクに対応した資源値保存領域から資源値を読み込む処理とを行うこと
を特徴とする請求項１７記載のデータ処理装置。
【請求項２２】
資源グループを占有しているタスクに対応した値が資源グループ毎に設定される資源グループ占有タスク変数の値を保持する資源グループ占有タスク変数保持手段を備え、
上記資源グループ占有タスク切り替え処理では、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数に、実行中のタスクに対応した値を設定する処理も行うこと
を特徴とする請求項２１記載のデータ処理装置。
【請求項２３】
実行中のタスクに対応した値が設定される実行中タスク変数の値を保持する実行中タスク変数保持手段を備え、
上記資源グループ使用可能性検査では、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数の値と、実行中タスク変数の値とを比較することにより、当該資源が属する資源グループを実行中のタスクが使用可能か否かを判定すること
を特徴とする請求項２２記載のデータ処理装置。
【請求項２４】
資源グループに属する資源に使用中のものが存在するか否かを資源グループ毎に示す資源グループ保存値有効フラグの値を保持する資源グループ保存値有効フラグ保持手段を備え、
タスクが資源を使用することにより当該資源の資源値が有効な値となった場合には、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに使用中の資源が存在していることを示す値を設定し、
上記資源グループ占有タスク切り替え処理において、実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに基づいて行うこと
を特徴とする請求項２１記載のデータ処理装置。
【請求項２５】
実行中のタスクが、特定の資源グループの資源値が破壊されることを前提とした処理を実行した場合には、当該資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに対応した資源値保存領域に有効な値が存在していないことを示す値を設定すること
を特徴とする請求項２４記載のデータ処理装置。
【請求項２６】
資源グループに属する資源をタスクが使用中であるか否かを資源グループ毎に示す資源グループ使用中フラグを保持する資源グループ使用中フラグ保持手段を備え、
タスクが資源を使用するときには、当該資源が属する資源グループに対応した資源グループ使用中フラグに、当該資源グループに属する資源をタスクが使用中であることを示す値を設定し、
上記資源グループ占有タスク切り替え処理において、実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、当該資源が属する資源グループに対応した資源グループ使用中フラグに基づいて行うこと
を特徴とする請求項２１記載のデータ処理装置。
【請求項２７】
実行中のタスクが、特定の資源グループの資源値が破壊されることを前提とした処理を実行した場合には、
資源値が破壊されることが前提とされている資源グループのうち、実行中のタスクが使用可能な資源グループについて、当該資源グループに対応した資源グループ使用中フラグに、当該資源グループを使用中のタスクが存在していないことを示す値を設定すること
を特徴とする請求項２６記載のデータ処理装置。
【請求項２８】
タスクが使用可能な資源を取り扱う中央処理装置と、上記中央処理装置に設けられたキャッシュメモリとを備えており、
上記資源グループは、各資源グループに対応した各資源値保存領域のサイズがキャッシュメモリのキャッシュラインサイズの整数倍となるように資源が分割されてなること
を特徴とする請求項１７記載のデータ処理装置。
【請求項２９】
タスクが使用可能な資源を取り扱う中央処理装置と、上記中央処理装置に設けられたキャッシュメモリとを備えており、
上記資源値保存領域は、各資源値保存領域の先頭アドレスがキャッシュメモリのキャッシュラインの境界となるように確保されること
を特徴とする請求項１７記載のデータ処理装置。
【請求項３０】
上記資源値保存領域を確保する際に、保存する資源値のサイズに応じて、資源値保存領域のサイズを動的に変化させて確保すること
を特徴とする請求項１７記載のデータ処理装置。
【請求項３１】
上記資源値保存領域のサイズを、資源グループを単位として動的に変化させること
を特徴とする請求項３０記載のデータ処理装置。
【請求項３２】
上記資源値保存領域を、対応するタスクが使用するスタックと同一のメモリブロックに、当該タスクがスタックにデータを格納していく方向とは逆の方向から確保していくこと
を特徴とする請求項３０記載のデータ処理装置。
【請求項３３】
上記資源値保存領域を動的に変化させるときに、スタックとしてタスクが使用中の領域と資源値保存領域とが重複しないかを確認する領域重複チェック手段を備えていること
を特徴とする請求項３２記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、それぞれのタスクの独立性を保証して複数のタスクを並行して実行するマルチタスクシステムにおけるタスク切り替え方法に関する。また、本発明は、それぞれのタスクの独立性を保証して複数のタスクを並行して実行するデータ処理装置に関する。
【０００２】
【従来の技術】
従来、マルチタスク機能を有したオペレーティングシステムでは、タスク切り替えを行うために、図２０に示すように、タスク毎に、タスクを制御するのに必要なタスク情報を保存するタスク情報保存領域と、タスクの実行に使用される資源の状態を示す資源値を保存する資源値保存領域とを、メモリ上に一連の領域として確保するようにしている。なお、資源値とは、具体的には、中央処理装置のレジスタ値や、浮動小数点演算装置のレジスタ値などである。
【０００３】
そして、例えば、タスクＡが実行されているときに、当該タスクＡの実行を停止してタスクＢの実行を開始するようにタスク切り替えを行う場合には、先ず、それまでにタスクＡが資源を使用した結果が反映された資源値を、タスクＡについてのタスク情報と共にメモリに保存する。すなわち、タスクＡを停止するときには、そのときの資源の状態を示す値を資源値としてメモリに保存する。
【０００４】
次いで、これから実行するタスクＢについて、当該タスクＢがこれまでに実行されたことにより設定されている資源値を、タスクＢについてのタスク情報と共にメモリから読み込み、その後、当該タスクＢの実行を開始する。このとき、メモリから読み込まれる資源値には、タスクＢが以前に停止したときの資源の状態を示す値が設定されている。そして、タスクＢの実行を開始するときには、この資源値に基づいて、中央処理装置のレジスタ値や浮動小数点演算装置のレジスタ値などを、タスクＢが停止したときの状態に戻す。これにより、中央処理装置のレジスタ値や浮動小数点演算装置のレジスタ値などが、タスクＢが停止したときの状態に戻され、その後、タスクＢの実行が再開される。
【０００５】
なお、中央処理装置には、このようなタスク切り替えの動作を高速化するために、図２１（ａ）に示すように、タスク毎の資源値の保存領域として、レジスタファイルと呼ばれる資源値保存用ハードウェアを用意したものがある。また、図２１（ｂ）に示すように、タスク毎の資源値の保存領域として、レジスタスタックと呼ばれる資源値保存用ハードウェアを用意したものもある。これらの中央処理装置では、タスク切り替え時におけるメモリに対する資源値の読み書きを低減することができるので、タスク切り替え動作を高速化することができる。
【０００６】
【発明が解決しようとする課題】
従来は、タスク切り替えを行うために、図２０に示したように、タスク情報及び資源値を保存するための領域を、メモリ上にタスク毎に確保するようにしている。しかし、このようにしてタスク切り替えを行った場合には、タスク切り替え時に、タスクが使用可能な資源全てについて、それらの資源値の読み書きをメモリに対して行うこととなるため、以下のような問題がある。
【０００７】
（１）資源が多数ある場合（例えば、中央処理装置が多数のレジスタを有するような場合）には、タスク切り替えを行う毎に、メモリに対する大量の読み書きが発生するため、タスク切り替えに時間がかかる。
【０００８】
（２）資源を新たに追加したような場合、追加された資源を使用しないタスクについても、追加された資源の資源値をメモリに保存することとなるため、タスク切り替えに時間がかかるようになる。例えば、ハードウェアを機能拡張して浮動小数点演算装置を追加したような場合、浮動小数点演算装置の機能を使用しないタスクも、浮動小数点演算装置のレジスタ値を資源値としてメモリに保存するようになり、その結果、タスク切り替えに時間がかかるようになってしまう。
【０００９】
（３）使用可能な資源が増加した場合、全てのタスクが全ての資源を使うとは限らず、通常は、一部の資源しか使用しないようなタスクも存在する。しかし、従来のタスク切り替えでは、一部の資源しか使用しないようなタスクについても、全ての資源についての資源値をメモリに保存するようにしていた。そのため、特に使用可能な資源が増加した場合に、タスク切り替えのためにメモリを大量に消費することとなってしまっていた。
【００１０】
なお、図２１に示したように資源値保存用ハードウェアを用意した場合には、上述の（１）の問題は解決することができるが、この場合にも以下のような問題がある。
【００１１】
（４）用意できる資源値保存用ハードウェアには限りがあり、全てのタスク切り替えを資源値保存用ハードウェアだけで賄えるとは限らない。そして、資源が増加したり、切り替わるタスクの数が増えたりして、資源値保存用ハードウェアだけで賄いきれなくなった場合には、結局、図２０に示したように、メモリに対する読み書きを行うこととなる。したがって、資源値保存用ハードウェアを用意してタスク切り替えの高速化を図ったとしても、資源が増加したり、切り替わるタスクの数が増えた場合には、その効果が大幅に低下してしまう。
【００１２】
（５）取り扱う資源の量に対して、大規模な資源値保存用ハードウェアが必要となる。そのため、中央処理装置等を半導体装置として集積化するにあたって、資源値保存用ハードウェアによってかなりの半導体面積が消費されてしまう。
【００１３】
（６）取り扱う資源の量が多くなった場合には、それに応じて資源値保存用ハードウェアを大規模化するか、或いは資源値保存用ハードウェアで保持できるタスク数を減らす必要がある。
【００１４】
また、図２０に示したようなタスク切り替えの機構を、リアルタイム処理が必要な機器に応用することを考えると、特に使用可能な資源が増加した場合に、以下のような問題が生じる。
【００１５】
（７）タスク切り替えを行う毎に、使用可能な資源全ての資源値について、メモリへの保存及びメモリからの読み出しを行うため、特に使用可能な資源が増加した場合に、タスク切り替えに時間がかかるようになる。そのため、割り込み処理等のように高速な起動が必要とされる処理を、タスク切り替えの機構で行うことが不可能となってしまう。これは、特にリアルタイム処理が必要な機器において、大きな問題である。
【００１６】
また、図２０に示したようにタスク切り替えを行った場合には、タスク切り替え時に大量のメモリアクセスが発生するが、このときにキャッシュメモリやレジスタファイル等を使用できるかできないかで、実際にメモリにアクセスする量が大きく変動するため、以下のような問題もあった。
【００１７】
（８）切り替え先のタスクの起動に要する時間の変動が大きく、割り込み処理等を行うときに、処理のタイミングの特定が困難である。
【００１８】
以上のように、従来はタスク切り替えについて様々な問題があった。そして、本発明は、以上のような従来の実情に鑑みて提案されたものであり、上述したような従来の問題を解消することが可能なタスク切り替え方法及びデータ処理装置を提供することを目的としている。
【００１９】
【課題を解決するための手段】
本発明に係るタスク切り替え方法は、タスク毎に確保した資源値保存領域に資源の状態を示す値である資源値を保存し、タスクを実行するときに当該タスクが使用する資源の資源値を資源値保存領域から読み出すことで、それぞれのタスクの独立性を保証して複数のタスクを並行して実行するマルチタスクシステムにおけるタスク切り替え方法に関する。
【００２０】
【課題を解決するための手段】
そして、本発明に係るタスク切り替え方法では、データ処理装置が資源を複数の資源グループに分割して管理し、タスク切り替えにより実行中となったタスクが資源を使用する際、データ処理装置が当該資源が属する資源グループを当該タスクが使用可能か否かを判定する資源グループ使用可能性検査を行う。そして、資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定された場合には、データ処理装置が実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続する。また、資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定されなかった場合には、データ処理装置が当該資源が属する資源グループを実行中のタスクが使用可能な状態に変更する資源グループ占有タスク切り替え処理を行った上で、実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続し、タスク切り替えによって実行を開始するタスクが、資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、データ処理装置が当該資源グループの資源値の保存及び／又は読み込みを、タスク切り替えの際に必要に応じて予め行う。
【００２２】
また、上記タスク切り替え方法においては、実行中のタスクが資源グループを使用可能であるか否かを示す資源グループ使用許可フラグを設けておくようにしても良い。この場合、資源グループ使用可能性検査では、資源グループ使用許可フラグに基づいて、データ処理装置が実行中のタスクが資源グループを使用可能か否かを判定する。
【００２３】
また、以上のように資源グループ使用許可フラグを設けた場合は、更に、タスクが資源グループを占有しているか否かを資源グループ毎に示す資源グループ占有フラグをタスク毎に設けておくようにしても良い。この場合は、タスク切り替え時に、タスク切り替えによって停止するタスクに対応する資源グループ占有フラグのうち、資源グループ使用許可フラグに使用可能であることを示す値が設定されている資源グループに対応する資源グループ占有フラグに、データ処理装置が当該資源グループを占有していることを示す値を設定する。そして、資源グループ占有タスク切り替え処理では、実行中のタスクが使用しようとしている資源が属する資源グループをそれまで使用していたタスクに対応する資源グループ占有フラグのうち、当該資源グループに対応する資源グループ占有フラグに、データ処理装置が当該資源グループを占有していないこと示す値を設定する処理を行う。
【００２４】
なお、資源グループ使用許可フラグは、例えば、共通の機能を提供する１以上の資源グループからなる機能ブロック単位で、実行中のタスクが資源グループを使用可能であるか否かを示すものであっても良いし、或いは、資源グループ毎に、実行中のタスクが資源グループを使用可能であるか否かを示すものであっても良い。
【００２５】
また、上記タスク切り替え方法において、資源グループ占有タスク切り替え処理では、例えば、実行中のタスクが使用しようとしている資源の資源値を保持する必要がある場合に、データ処理装置が当該資源が属する資源グループの資源値を資源値保存領域に保存する処理と、実行中のタスクに対応した資源値保存領域に、実行中のタスクが使用しようとしている資源の資源値として有効な値が保存されている場合に、データ処理装置が実行中のタスクに対応した資源値保存領域から資源値を読み込む処理とを行う。
【００２６】
以上のように資源グループ占有タスク切り替え処理を行う際は、資源グループを占有しているタスクに対応した値が設定される資源グループ占有タスク変数を資源グループ毎に設けておくようにしても良い。この場合、資源グループ占有タスク切り替え処理では、データ処理装置が実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数に、実行中のタスクに対応した値を設定する処理も行う。
【００２７】
また、以上のように資源グループ占有タスク変数を設けた場合は、更に、実行中のタスクに対応した値が設定される実行中タスク変数を設けておくようにしても良い。この場合、資源グループ使用可能性検査では、例えば、データ処理装置が実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数の値と、実行中タスク変数の値とを比較することにより、当該資源が属する資源グループを実行中のタスクが使用可能か否かを判定する。
【００２８】
また、資源グループに属する資源に使用中のものが存在するか否かを資源グループ毎に示す資源グループ保存値有効フラグをタスク毎に設けておくようにしても良い。この場合、タスクが資源を使用することにより当該資源の資源値が有効な値となった場合には、データ処理装置が当該タスクに対応した資源グループ保存値有効フラグのうち、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに使用中の資源が存在していることを示す値を設定する。そして、資源グループ占有タスク切り替え処理では、データ処理装置が実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、当該資源を使用しているタスクに対応した資源グループ保存値有効フラグに基づいて行うとともに、データ処理装置が実行中のタスクに対応した資源値保存領域に、実行中のタスクが使用しようとしている資源の資源値として有効な値が保存されているか否かの判断を、実行中のタスクに対応した資源グループ保存値有効フラグに基づいて行う。
【００２９】
なお、資源グループ保存値有効フラグを設けた場合、タスク切り替えによって実行を開始するタスクが、資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、タスク切り替え処理において、データ処理装置が当該資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに対応した資源値保存領域に有効な値が存在していることを示す値を設定する処理も行うことが好ましい。
【００３０】
また、タスクの実行を終了する際には、データ処理装置が当該タスクに対応した全ての資源グループ保存値有効フラグの値を、資源グループに使用中の資源が存在しないことを示す値に設定することが好ましい。
【００３１】
また、資源グループに属する資源をタスクが使用中であるか否かを示す資源グループ使用中フラグを資源グループ毎に設けておくようにしても良い。この場合、タスクが資源を使用するときには、データ処理装置が当該資源が属する資源グループに対応した資源グループ使用中フラグに、当該資源グループに属する資源をタスクが使用中であることを示す値を設定する。そして、資源グループ占有タスク切り替え処理において、実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、データ処理装置が当該資源が属する資源グループに対応した資源グループ使用中フラグに基づいて行う。
【００３２】
なお、資源グループ使用中フラグを設けた場合、タスク切り替えによって実行を開始するタスクが、資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、タスク切り替え処理において、データ処理装置が当該資源グループに対応した資源グループ使用中フラグに、当該資源グループに使用中の資源が存在していることを示す値を設定する処理も行うことが好ましい。
【００３３】
また、タスクが資源グループを占有しているか否かを資源グループ毎に示す資源グループ占有フラグをタスク毎に設けておくようにしても良い。この場合、資源グループ占有タスク切り替え処理では、実行中のタスクが使用しようとしている資源が属する資源グループを占有しているタスクに対応する資源グループ占有フラグのうち、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有フラグに、データ処理装置が当該資源グループを占有していないことを示す値を設定する処理と、実行中のタスクに対応した資源グループ占有フラグのうち、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有フラグに、データ処理装置が当該資源グループを占有していることを示す値を設定する処理とを行う。
【００３４】
また、上記タスク切り替え方法において、タスクが使用可能な資源を、キャッシュメモリを備えた中央処理装置を使用して取り扱う場合には、データ処理装置が資源を資源グループに分割する際に、各資源グループに対応した各資源値保存領域のサイズがキャッシュメモリのキャッシュラインサイズの整数倍となるように分割することが好ましい。
【００３５】
また、上記タスク切り替え方法において、タスクが使用可能な資源を、キャッシュメモリを備えた中央処理装置を使用して取り扱うとともに、資源値保存領域をキャッシュメモリ上に確保する場合には、データ処理装置が資源値保存領域の先頭アドレスがキャッシュメモリのキャッシュラインの境界となるように資源値保存領域を確保することが好ましい。
【００３９】
一方、本発明に係るデータ処理装置は、タスク毎に確保した資源値保存領域に資源の状態を示す値である資源値を保存し、タスクを実行するときに当該タスクが使用する資源の資源値を資源値保存領域から読み出すことで、それぞれのタスクの独立性を保証して複数のタスクを並行して実行するデータ処理装置である。
【００４０】
そして、本発明に係るデータ処理装置は、資源を複数の資源グループに分割して管理し、タスク切り替えにより実行中となったタスクが資源を使用する際、当該資源が属する資源グループを当該タスクが使用可能か否かを判定する資源グループ使用可能性検査を行う。そして、資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定された場合には、実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続する。また、資源グループ使用可能性検査の結果、当該資源が属する資源グループが実行中のタスクで使用可能と判定されなかった場合には、当該資源が属する資源グループを実行中のタスクが使用可能な状態に変更する資源グループ占有タスク切り替え処理を行った上で、実行中のタスクに当該資源の使用を認めて、実行中のタスクの処理を継続し、タスク切り替えによって実行を開始するタスクが、資源グループ使用可能性検査を行うことができない資源を使用する可能性がある場合には、当該資源グループの資源値の保存及び／又は読み込みを、タスク切り替えの際に必要に応じて予め行う。
【００４１】
上記データ処理装置は、実行中のタスクが資源グループを使用可能であるか否かを示す資源グループ使用許可フラグの値を保持する資源グループ使用許可フラグ保持手段を備えていても良い。この場合、資源グループ使用可能性検査では、資源グループ使用許可フラグに基づいて、実行中のタスクが資源グループを使用可能か否かを判定する。
【００４２】
なお、資源グループ使用許可フラグは、例えば、共通の機能を提供する１以上の資源グループからなる機能ブロック単位で、実行中のタスクが資源グループを使用可能であるか否かを示すものであっても良いし、或いは、資源グループ毎に、実行中のタスクが資源グループを使用可能であるか否かを示すものであっても良い。
【００４３】
また、上記データ処理装置において、資源グループ占有タスク切り替え処理では、例えば、実行中のタスクが使用しようとしている資源の資源値を保持する必要がある場合に、当該資源が属する資源グループの資源値を資源値保存領域に保存する処理と、実行中のタスクに対応した資源値保存領域に、実行中のタスクが使用しようとしている資源の資源値として有効な値が保存されている場合に、実行中のタスクに対応した資源値保存領域から資源値を読み込む処理とを行う。
【００４４】
また、上記データ処理装置は、資源グループを占有しているタスクに対応した値が資源グループ毎に設定される資源グループ占有タスク変数の値を保持する資源グループ占有タスク変数保持手段を備えていても良い。この場合、資源グループ占有タスク切り替え処理では、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数に、実行中のタスクに対応した値を設定する処理も行う。
【００４５】
また、上記データ処理装置は、資源グループ占有タスク変数保持手段の他に、更に、実行中のタスクに対応した値が設定される実行中タスク変数の値を保持する実行中タスク変数保持手段を備えていても良い。この場合、資源グループ使用可能性検査では、例えば、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数の値と、実行中タスク変数の値とを比較することにより、当該資源が属する資源グループを実行中のタスクが使用可能か否かを判定する。
【００４６】
また、上記データ処理装置は、資源グループに属する資源に使用中のものが存在するか否かを資源グループ毎に示す資源グループ保存値有効フラグの値を保持する資源グループ保存値有効フラグ保持手段を備えていても良い。この場合、タスクが資源を使用することにより当該資源の資源値が有効な値となった場合には、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに使用中の資源が存在していることを示す値を設定する。そして、資源グループ占有タスク切り替え処理において、実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断は、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに基づいて行う。
【００４７】
なお、資源グループ保存値有効フラグ保持手段を備えている場合、実行中のタスクが、特定の資源グループの資源値が破壊されることを前提とした処理を実行した場合には、当該資源グループに対応した資源グループ保存値有効フラグに、当該資源グループに対応した資源値保存領域に有効な値が存在していないことを示す値を設定するようにすると良い。
【００４８】
また、上記データ処理装置は、資源グループに属する資源をタスクが使用中であるか否かを資源グループ毎に示す資源グループ使用中フラグを保持する資源グループ使用中フラグ保持手段を備えていても良い。この場合、タスクが資源を使用するときには、当該資源が属する資源グループに対応した資源グループ使用中フラグに、当該資源グループに属する資源をタスクが使用中であることを示す値を設定する。そして、資源グループ占有タスク切り替え処理において、実行中のタスクが使用しようとしている資源の資源値を保持する必要があるか否かの判断を、当該資源が属する資源グループに対応した資源グループ使用中フラグに基づいて行う。
【００４９】
なお、資源グループ使用中フラグ保持手段を備えている場合、実行中のタスクが、特定の資源グループの資源値が破壊されることを前提とした処理を実行した場合には、資源値が破壊されることが前提とされている資源グループのうち、実行中のタスクが使用可能な資源グループについて、当該資源グループに対応した資源グループ使用中フラグに、当該資源グループを使用中のタスクが存在していないことを示す値を設定するようにすると良い。
【００５０】
また、上記データ処理装置は、タスクが使用可能な資源を取り扱う中央処理装置と、上記中央処理装置に設けられたキャッシュメモリとを備えていても良い。この場合、資源グループは、各資源グループに対応した各資源値保存領域のサイズがキャッシュメモリのキャッシュラインサイズの整数倍となるように資源が分割されてなることが好ましい。
【００５１】
また、上記データ処理装置が、タスクが使用可能な資源を取り扱う中央処理装置と、上記中央処理装置に設けられたキャッシュメモリとを備えている場合、資源値保存領域は、各資源値保存領域の先頭アドレスがキャッシュメモリのキャッシュラインの境界となるように確保すると良い。
【００５２】
また、上記データ処理装置では、資源値保存領域を確保する際に、保存する資源値のサイズに応じて、資源値保存領域のサイズを動的に変化させて確保するようにしても良い。この場合、資源値保存領域のサイズは、資源グループを単位として動的に変化させると良い。また、資源値保存領域のサイズを動的に変化させる場合、当該資源値保存領域は、対応するタスクが使用するスタックと同一のメモリブロックに、当該タスクがスタックにデータを格納していく方向とは逆の方向から確保していくようにすると良い。ただしこの場合、データ処理装置は、資源値保存領域を動的に変化させるときに、スタックとしてタスクが使用中の領域と資源値保存領域とが重複しないかを確認する領域重複チェック手段を備えていることが好ましい。
【００５３】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【００５４】
１．本発明の実施の形態の概要
本発明では、中央処理装置のレジスタや浮動小数点演算装置のレジスタなど、タスクが使用する資源で、なおかつタスク毎に独立した値を保持する必要がある資源を、資源グループと呼ぶ複数のグループに分割して管理する。
【００５５】
本発明では、実行中のタスクが資源を使用する際に、実行中のタスクが当該資源が属する資源グループを使用可能か否かを判定する、資源グループ使用可能性検査と呼ぶ検査を実行する。なお、本発明では、実行中のタスクが当該資源グループを占有している場合に、資源グループが使用可能であると判断する。そして、資源グループ使用可能性検査の結果、資源が使用可能である場合は、本発明が導入されていない場合と何ら変わりなく処理を継続する。また、それ以外の場合は、資源グループ占有タスク切り替え処理と呼ぶ処理を起動する。
【００５６】
資源グループ占有タスク切り替え処理では、切り替え対象となっている資源グループについて、資源値の保存、読み込み、そして資源グループの占有状態の変更を行う。具体的には、切り替えの対象となっている資源グループを現在占有しているタスクを特定し、当該資源グループを現在占有しているタスクが、当該資源グループに属する資源に有効な値を設定している場合は、それらを当該タスクに対応した資源値保存領域に保存する。また、実行中のタスク（すなわち資源を使用しようとしているタスク）が、当該資源グループに対応する有効な値を資源値保存領域に保持している場合は、それらの値を読み込む。そして、これらの処理の後、当該資源グループを占有しているタスクを、現在実行中のタスクに切り替える。
【００５７】
また、本発明に係るタスク切り替え方法は、オペレーティングシステム等のソフトウェアの一部として実現することも可能であるし、或いは、本発明を適用したデータ処理装置で実現することも可能であるが、いずれの場合においても、一連の資源グループ使用可能性検査及び資源グループ占有タスク切り替え処理を正常に実行できるように、いくつかのフラグ及び変数を用意し、これらの値を必要に応じて設定したり参照したりする。
【００５８】
なお、資源グループ使用可能性検査は、非常に頻繁に行われる処理である。したがって、資源グループ使用可能性検査は、オペレーティングシステム等によるソフトウェア処理によって行うようにするのではなく、資源グループ使用可能性検査を行う機構をデータ処理装置にハードウェアとして実装しておき、ハードウェア処理によって行うようにしておいたほうが、より高速な処理が可能となるので好ましい。
【００５９】
このような資源グループ使用可能性検査は、例えば、機能ブロック毎に使用の可否を示す使用許可フラグをデータ処理装置に実装しておき、当該使用許可フラグを用いて行う。ここで、機能ブロックは、共通の機能を提供する１以上の資源グループから構成される。具体的には、例えば、浮動小数点演算装置のレジスタをひとまとめにして機能ブロックとして扱う。
【００６０】
そして、機能ブロック毎に使用の可否を示す使用許可フラグを用いて資源グループ使用可能性検査を行う際は、使用不可能な資源グループを含む機能ブロックに対応した使用許可フラグを、当該機能ブロックの使用が不可であることを示すように設定しておく。そして、資源グループ使用可能性検査では、当該使用許可フラグを参照することにより、資源グループの使用の可否を検出する。
【００６１】
また、資源グループ毎に使用の可否を示す資源グループ使用許可フラグをデータ処理装置に実装しておき、当該資源グループ使用許可フラグを用いて、資源グループ使用可能性検査を行うようにしても良い。資源グループ毎に使用の可否を示す資源グループ使用許可フラグを用いて資源グループ使用可能性検査を行う際は、使用不可能な資源グループに対応した資源グループ使用許可フラグを、当該資源グループの使用が不可であることを示すように設定しておく。そして、資源グループ使用可能性検査では、当該資源グループ使用許可フラグを参照することにより、資源グループの使用の可否を検出する。
【００６２】
また、資源グループを占有しているタスクに対応した値が資源グループ毎に設定される資源グループ占有タスク変数が格納されるレジスタと、実行中のタスクに対応した値が設定される実行中タスク変数が格納されるレジスタとをデータ処理装置に実装しておき、資源グループ占有タスク変数及び実行中タスク変数を用いて、資源グループ使用可能性検査を行うようにしても良い。資源グループ占有タスク変数及び実行中タスク変数を用いて資源グループ使用可能性検査を行う際は、資源グループ占有タスク変数と実行中タスク変数とを比較することで、資源グループの使用の可否を検出する。
【００６３】
このように資源グループ使用可能性検査に使用するフラグや変数が格納されるレジスタをデータ処理装置にハードウェアとして実装しておけば、タスク処理の実行効率を落とすことなく、資源グループ使用可能性検査を行うことが可能となる。
【００６４】
一方、資源グループ占有タスク切り替え処理についても、より高速に処理を行うという観点からは、資源グループ占有タスク切り替え処理を行う機構をできるだけデータ処理装置にハードウェアとして実装しておき、当該処理をハードウェア処理として行うようにしたほうが好ましい。ただし、資源グループ占有タスク切り替え処理は、資源グループ使用可能性検査ほど頻繁に行われるものではないので、オペレーティングシステム等によるソフトウェア処理によって行うようにしても良い。なお、資源グループ占有タスク切り替え処理の殆どの部分は、オペレーティングシステム等のソフトウェアによる実現も、データ処理装置に実装されたハードウェア又はマイクロプログラムによる実現も可能である。
【００６５】
なお、資源グループ占有タスク切り替え処理では、具体的には、切り替え対象となる資源グループの資源値の保存が必要か否かを判断し必要であれば当該資源値を保存する処理や、資源値の保存が必要か否かを判断するのに必要なフラグを更新する処理や、切り替え対象となる資源グループの資源値の読み込みが必要か否かを判断し必要であれば当該資源値を読み込む処理や、資源値の読み込みが必要か否かを判断するのに必要なフラグを更新する処理や、資源グループを占有しているタスクを特定するのに必要な変数を更新する処理や、資源グループ使用可能性検査で使用するフラグを更新する処理などを行う。
【００６６】
このような資源グループ占有タスク切り替え処理を行うにあたっては、切り替え対象となる資源グループの資源値の保存が必要か否かを判断する手段として、各資源グループに対応した資源グループ使用中フラグを用意しておく。そして、タスクの実行中に、ある資源グループに属する資源が使用されたら、対応する資源グループ使用中フラグに「真」の値を設定する。また、タスク切り替えによって実行が開始されたタスクが、特定の資源グループの資源値が破壊されることを前提にした処理（例えば、システムコールや、サブルーチン呼び出しや、サブルーチンからの復帰処理など）を実行した場合には、当該資源グループに対応した資源グループ使用中フラグに「偽」の値を設定する。また、タスクの実行終了などにより、タスクが使用していた資源の資源値を破棄しても問題ないと判断された場合には、当該タスクが占有していた資源グループに対応する資源グループ使用中フラグに「偽」の値を設定する。
【００６７】
また、上述のような資源グループ占有タスク切り替え処理を行うにあたっては、切り替え対象となる資源グループの資源値の読み込みが必要か否かを判断する手段として、各資源グループに対応した資源グループ保存値有効フラグをタスク毎に用意しておく。そして、実行中のタスクが資源を使用する際に、当該タスクに対応した資源グループ保存値有効フラグのうち、当該資源が属する資源グループに対応する資源グループ保存値有効フラグに「真」の値を設定する。なお、このように資源グループ保存値有効フラグを用いる際は、実行中のタスクに対応する資源グループ保存値有効フラグを保持するレジスタを、データ処理装置に設けておくと良い。これにより、資源グループ保存値有効フラグの更新に要するメモリアクセスを低減させることができる。
【００６８】
なお、タスク切り替えによって実行が開始されたタスクが、特定の資源グループの資源値が破壊されることを前提にした処理を含む場合には、当該タスクに対応した資源グループ保存値有効フラグのうち、資源値が破壊されることが前提とされている資源グループに対応した資源グループ保存値有効フラグに「偽」の値を設定する。これにより、不要な資源値の保存や読み込みを省略することが可能となり、メモリアクセスを低減することができる。また、タスクの実行終了などにより、タスクが使用していた資源の資源値を破棄しても問題ないと判断された場合には、当該タスクに対応した資源グループ保存値有効フラグのうち、当該タスクが占有していた資源グループに対応する資源グループ保存値有効フラグに「偽」の値を設定する。これにより、不要な資源値の保存や読み込みを省略することが可能となり、メモリアクセスを更に低減することができる。
【００６９】
また、上述のような資源グループ占有タスク切り替え処理を行うにあたっては、資源グループを占有しているタスクを特定する手段として、各資源グループに対応した資源グループ占有タスク変数を用意しておく。そして、資源グループ占有タスク切り替え処理では、切り替え対象となる資源グループに対応した資源グループ占有タスク変数の値を、実行中のタスクに対応した値に更新する。
【００７０】
２．基本的な処理の流れ
タスク切り替えが発生した際、オペレーティングシステムは、タスク切り替えによって実行が停止されるタスクに対応した資源グループ保存値有効フラグや資源グループ占有フラグ等を更新する。また、オペレーティングシステムは、必要な場合には、タスク切り替えによって実行が開始されるタスクについて、資源グループ使用許可フラグ、資源グループ保存値有効フラグ、実行中タスク変数などの保存及び設定を行う。また、オペレーティングシステムは、必要な場合には、資源値の保存及び読み込みを、上述のようなフラグの保存及び設定の手順の間の適切な時期に行う。そして、これらの処理を行った後、オペレーティングシステムは、新しいタスクの実行を開始する。
【００７１】
そして、タスク切り替えによって実行中となったタスクが、使用を許可されていない資源グループに属する資源を使用しようとしたときには、使用を許可されていない資源グループに属する資源をタスクが使用しようとしていることが、資源グループ使用可能性検査によって検出され、資源グループ占有タスク切り替え処理が起動される。そして、資源グループ占有タスク切り替え処理により、使用を許可されていなかった資源グループに属する資源をタスクが使用できるようにするのに必要な処理が行われる。そして、資源グループ占有タスク切り替え処理により、資源の使用が可能となったら、当該資源を使用してタスクの処理を継続する。
【００７２】
なお、資源グループ使用中フラグを保持するレジスタをデータ処理装置が実装している場合は、実行中のタスクが資源を使用しようとしたときに、当該資源が属する資源グループに対応した資源グループ使用中フラグに「真」の値を設定しておく。また、資源グループ保存値有効フラグを保持するレジスタをデータ処理装置が実装している場合は、実行中のタスクが資源を使用しようとしたときに、当該資源が属する資源グループに対応した資源グループ保存値有効フラグに「真」の値を設定しておく。
【００７３】
そして、資源グループ占有タスク切り替え処理では、先ず、実行中のタスクが使用しようとしている資源が属する資源グループに対応した資源グループ占有タスク変数から、当該資源グループを占有中のタスクを特定する。そして、当該資源グループを占有中のタスクに対応した資源グループ占有フラグに「偽」の値を設定する。また、当該資源グループを占有中のタスクに対応した資源グループ保存値有効フラグを検査し、その値が「真」ならば、当該資源グループの資源値を、当該資源グループを占有中のタスクに対応した資源値保存領域に保存する。
【００７４】
なお、資源グループ使用中フラグの値を保持するレジスタをデータ処理装置が実装している場合には、当該レジスタの内容を検査し、占有タスク切り替え対象の資源グループに対応した資源グループ使用中フラグの値が「真」ならば、当該資源グループの資源値を、当該資源グループを占有中のタスクに対応した資源値保存領域に保存する。
【００７５】
次に、実行中のタスクに対応した資源グループ保存値有効フラグを検査し、占有タスク切り替え対象の資源グループに対応した値が「真」ならば、実行中のタスクに対応した資源値保存領域から、当該資源グループの資源値を読み込む。これにより、実行中のタスクからは、あたかも自分が設定した値が当該資源に継続して存在していたかのように見え、タスク間の独立性が保証される。
【００７６】
なお、実行中のタスクに対応した資源グループ保存値有効フラグの値が「偽」の場合には、実行中のタスクに対応した資源値保存領域として、占有タスク切り替え対象の資源グループに対応した資源値保存領域が、既に確保されているかどうかを検査する。そして、確保されていない場合には、当該資源グループに対応する資源値保存領域を確保する。その後、当該資源グループに対応する資源グループ保存値有効フラグに「真」の値を設定する。
【００７７】
そして、以上の処理を行うとともに、占有タスク切り替え対象の資源グループに対応した資源グループ占有タスク変数に、実行中のタスクに対応した値を設定することにより、資源グループを占有するタスクの切り替え処理がなされ、実行中のタスクが資源を使用できる状態とされる。
【００７８】
なお、資源グループ使用許可フラグを使用して資源使用可能性検査を行う場合は、資源グループ占有タスク切り替え処理の中で、占有タスク切り替え対象の資源グループに対応する資源グループ使用許可フラグに「真」の値を設定する処理も行う。
【００７９】
３．メモリの使用について
以上のようにタスク切り替えを行うにあたって、各タスクに対応した資源値保存領域は、タスクが使用するスタックと同一のメモリブロックに確保すると良い。スタックに使用するメモリブロックは、タスクが生成されるまでは確保する必要がなく、また、タスクが実行を終了したら開放してしまうことができる。このような性質を利用することで、タスクに動的にスタック用のメモリブロックを割り当ててメモリ使用量を節約する機構を実現できるが、このような機構において、タスクが使用するスタックと同一のメモリブロックに資源値保存領域を確保するようにすれば、資源値保存領域も動的に割り当てることが可能となり、メモリ使用量を更に節約することが可能となる。
【００８０】
また、資源値保存領域はタスク毎に確保されるが、当該資源値保存領域を確保する際は、保存する資源値のサイズに応じて、資源値保存領域のサイズを動的に変化させて確保したほうが好ましい。これにより、メモリを効率的に使用することが可能となる。そして、このように資源値保存領域のサイズを動的に変化させるようにした場合には、実行中のタスクがこれまで使用していなかった資源グループを使用しようとしたときに、資源グループ占有タスク切り替え処理の中で、当該資源グループに対応する資源値保存領域を確保するようにする。このとき、資源値保存領域は、タスクが使用するスタックと同一のメモリブロックに、当該タスクがスタックにデータを格納していく方向とは逆の方向から確保していくようにすると良い。これにより、メモリを更に有効に使用できる。
【００８１】
なお、資源値保存領域を、タスクが使用するスタックと同一のメモリブロックに確保する場合は、スタックとして使用する領域と資源値保存領域とが重複しないことが望まれる。スタックとして使用する領域と資源値保存領域とが重複しないようにするには、例えば、資源値保存領域のサイズを動的に変化させるときに、スタックとして使用中の領域と資源値保存領域とが重複しないかを確認するようにする。また、例えば、タスクがスタックとして使用する領域のサイズを動的に変化させるときに、スタックとして使用する領域と資源値保存領域とが重複しないかを確認するようにする。
【００８２】
また、データ処理装置がキャッシュメモリを備えている場合は、資源を資源グループに分割する際に、各資源グループに対応した各資源値保存領域のサイズがキャッシュメモリのキャッシュラインサイズの整数倍となるように分割したほうが良い。このように、各資源グループに対応した各資源値保存領域のサイズが、キャッシュメモリのキャッシュラインサイズの整数倍となっていれば、メモリアクセスをより効率良く行うことが可能となる。
【００８３】
また、データ処理装置がキャッシュメモリを備えており、資源値保存領域をキャッシュメモリ上に確保する場合には、資源値保存領域の先頭アドレスがキャッシュメモリのキャッシュラインの境界となるようにしたほうが良い。このように、資源値保存領域の先頭アドレスがキャッシュメモリのキャッシュラインの境界となっていれば、メモリアクセスをより効率良く行うことが可能となる。
【００８４】
４．本発明の具体例
つぎに、以上のような本発明の実施の形態について、より具体的な例を挙げて更に詳細に説明する。なお、以下の説明では、まず、本発明の第１の実施の形態として、本発明に係るタスク切り替え方法を既存のデータ処理装置を用いてオペレーティングシステムの処理によって実現した場合について、具体的な例を挙げて説明する。その後、本発明の第２の実施の形態として、本発明を適用した新規なデータ処理装置を用いてタスク切り替えを行う場合について、具体的な例を挙げて説明する。
【００８５】
４−１  第１の実施の形態
まず、本発明の第１の実施の形態として、本発明に係るタスク切り替え方法を、従来より実用化されているデータ処理装置において、オペレーティングシステムの処理によって実現した場合について説明する。
【００８６】
なお、以下に説明するタスク切り替え方法は、オペレーティングシステムの処理によって実現されるが、当該オペレーティングシステムは、タスク切り替えを実現するモジュール以外については、任意の構成とすることができる。したがって、タスク切り替えを実現するモジュール以外については、従来のオペレーティングシステムと同様な構成であっても良い。
【００８７】
また、以下に説明するタスク切り替え方法では、説明を簡単にするため、タスク切り替え処理等を実行するオペレーティングシステムは、オペレーティングシステム専用のレジスタを用いて処理を行い、タスクが使用するレジスタの値を破壊しないものとする。ただし、本発明は、オペレーティングシステムが、タスクと同一のレジスタを使用するような場合にも適用可能である。オペレーティングシステムが、タスクと同一のレジスタを使用する場合には、当該レジスタをオペレーティングシステムが使用するか、タスクが使用するかによって、当該レジスタの値の保存や読み込みを適切なタイミングで行うようにすれば良い。
【００８８】
４−１−１  データ処理装置の構成
まず、本例において使用されるデータ処理装置について説明する。なお、このデータ処理装置自体は既に実用化されているものであり、新規なものではない。
【００８９】
本例において使用されるデータ処理装置は、中央処理装置（ＣＰＵ：Central Processing Unit）と、浮動小数点演算などの演算命令を高速に実行する浮動小数点演算装置とを備えている。ここで、中央処理装置はキャッシュメモリを備えており、当該キャッシュメモリのキャッシュラインサイズは１６バイトである。
【００９０】
そして、このデータ処理装置は、タスクが使用可能な資源として、図１に示すように、中央処理装置のレジスタ（以下、汎用レジスタと称する。）と、浮動小数点演算装置のレジスタ（以下、浮動小数点レジスタと称する。）とを備えている。
【００９１】
ここで、汎用レジスタは、０〜１２７番まであり、各汎用レジスタは３２ビットの容量を持つ。また、浮動小数点レジスタは、０〜６３番まであり、各浮動小数点レジスタは６４ビットの容量を持つ。したがって、このデータ処理装置は、汎用レジスタと浮動小数点レジスタとで、合計８１９２ビット（＝１０２４バイト）の容量を持っている。
【００９２】
また、このデータ処理装置は、図１に示すように、浮動小数点演算装置が使用可能であるか否かを示す使用許可フラグ（以下、浮動小数点演算装置使用許可フラグと称する。）が格納される１ビットのレジスタも備えている。
【００９３】
４−１−２  プログラムの仕様
本例において、データ処理装置によって実行されるプログラムは、サブルーチン呼び出し、サブルーチンからの復帰又はシステムコール等のような機能ブロックの呼び出し或いは復帰の命令（簡単のため、以下の説明では、これらの命令を一括して機能ブロック遷移命令と称する。）を実行する際に、汎用レジスタの０〜６３番と浮動小数点レジスタの０〜３１番は、作業用レジスタとして使用して、呼び出された機能ブロックの処理中に値を変更しても構わないが、汎用レジスタの６４〜１２７番と浮動小数点レジスタの３２〜６３番は、機能ブロックの処理を終了して当該プログラムの処理を継続する際に、機能ブロックの呼び出し前の値を保持していなければならないという仕様に従っているものとする。
【００９４】
また、実行中のタスクがオペレーティングシステムに指示するタスク切り替えの要求については、機能ブロック遷移命令を使用するものとする。
【００９５】
また、任意のタイミングで発生する割り込み処理に対応するため、割り込み処理のときには、全ての汎用レジスタ及び浮動小数点レジスタの値を割り込み直前の値に復元してから、通常処理を再開する必要があるものとする。
【００９６】
４−１−３  オペレーティングシステムの概要とデータ構造
つぎに、オペレーティングシステムの概要、並びに当該オペレーティングシステムが取り扱うデータ構造について説明する。
【００９７】
本例において使用するオペレーティングシステムは、マルチタスク機能を有している。すなわち、このオペレーティングシステムは、タスクが使用する資源の状態を示す資源値（すなわち、汎用レジスタや小数点レジスタの値）をタスク毎に用意した資源値保存領域に保存し、タスクを実行するときに当該タスクが使用する資源の資源値を資源値保存領域から読み出すことで、それぞれのタスクの独立性を保証して複数のタスクを並行して実行することが可能となっている。
【００９８】
そして、本発明は、このようなマルチタスク機能を実現するにあたって、タスクが使用することが可能な資源を、複数の資源グループに分割して管理することを特徴としており、本例においては、オペレーティングシステムによって、タスクが使用することが可能な資源である汎用レジスタ及び浮動小数点レジスタを、図２に示すように、資源グループ０、資源グループ１、資源グループ２、資源グループ３の４つの資源グループに分割して管理する。
【００９９】
ここで、資源グループ０は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がない汎用レジスタのグループである。すなわち、資源グループ０には、汎用レジスタの０〜６３番が属する。また、資源グループ１は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がある汎用レジスタのグループである。すなわち、資源グループ１には、汎用レジスタの６４〜１２７番が属する。また、資源グループ２は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がない浮動小数点レジスタのグループである。すなわち、資源グループ２には、浮動小数点レジスタの０〜３１番が属する。また、資源グループ３は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がある浮動小数点レジスタのグループである。すなわち、資源グループ３には、浮動小数点レジスタの３２〜６３番が属する。
【０１００】
また、オペレーティングシステムは、図２に示すように、メモリ上の変数として、資源グループ２−３占有タスク変数と、実行中タスク変数とを定義する。ここで、資源グループ２−３占有タスク変数には、資源グループ２及び資源グループ３を占有しているタスクに対応した値が設定される。換言すれば、資源グループ２及び資源グループ３の資源値は、資源グループ２−３占有タスク変数が示すタスクに対応した値となる。また、実行中タスク変数には、現在実行中のタスクに対応した値が設定される。すなわち、本例では、実行中タスク変数の値を参照することにより、実行中のタスクを特定することが可能となっている。
【０１０１】
また、オペレーティングシステムは、データ処理装置に備えられた浮動小数点演算装置使用許可フラグを、資源グループ２及び資源グループ３に属する資源の使用を許可するか否かを示す資源グループ使用許可フラグとして使用する。具体的には、実行中のタスクが資源グループ２及び資源グループ３に属する資源を使用可能のとき、浮動小数点演算装置使用許可フラグに「真」の値が設定され、実行中のタスクが資源グループ２及び資源グループ３に属する資源を使用してはいけないとき、浮動小数点演算装置使用許可フラグに「偽」の値が設定される。
【０１０２】
また、オペレーティングシステムは、図３に示すように、複数のタスクを並行して実行する際に、タスク毎に、タスク情報を保存するためのタスク情報保存領域と、タスクの実行に使用される資源の状態を示す資源値を保存するための資源値保存領域とをメモリ上に確保する。
【０１０３】
ここで、タスク情報保存領域に格納されるタスク情報は、一つのタスクに対して一つ存在する。そして、これらのタスク情報は、図４に示すように、それらのタスクの数に応じた配列としてメモリ上にまとめて保存され、当該配列の添え字を用いて各タスク情報を参照できるようになされている。すなわち、各タスク情報はそれぞれ配列要素としてメモリ上に保存され、各配列要素が保存される領域が、それぞれタスク情報保存領域に対応している。このようにタスク情報を配列としてメモリ上にまとめて保存しておけば、メモリを有効に活用することができ、しかも、各タスク情報に高速にアクセスすることが可能となる。
【０１０４】
また、各タスク情報保存領域は、図５に示すように、タスク制御情報領域と、資源制御情報領域とを有している。ここで、タスク制御情報領域は、オペレーティングシステムがタスクを制御するのに必要なタスク制御情報が保存される領域である。タスク制御情報領域に保存されるタスク制御情報は、本発明のポイントとなるものではなく、従来のシステムで使用されていたものと同様で良いので、ここでは詳細な説明は省略する。
【０１０５】
一方、資源制御情報領域は、タスクが使用する資源を制御するのに必要な資源制御情報が保存される領域であり、従来のシステムには無かったものである。この資源制御情報領域には、タスクが使用する資源を制御するのに必要な資源制御情報として、資源グループ２−３占有フラグと、資源グループ保存値有効フラグと、資源値保存領域先頭番地とが保存される。
【０１０６】
資源制御情報のうち、資源グループ２−３占有フラグは、資源グループ２及び資源グループ３を占有しているか否かを示すフラグである。そして、タスクが資源グループ２及び資源グループ３を占有しているとき、当該タスクに対応したタスク情報の資源グループ２−３占有フラグには、「真」の値が設定される。また、タスクが資源グループ２及び資源グループ３を占有していないとき、当該タスクに対応したタスク情報の資源グループ２−３占有フラグには、「偽」の値が設定される。
【０１０７】
すなわち、あるタスクに対応したタスク情報の資源グループ２−３占有フラグが「真」のとき、資源グループ２及び資源グループ３の資源値は、当該タスクに対応した値となっている。また、あるタスクに対応したタスク情報の資源グループ２−３占有フラグが「偽」のとき、資源グループ２及び資源グループ３の資源値は、当該タスクに対応した値にはなっていない。
【０１０８】
また、資源制御情報のうち、資源グループ保存値有効フラグは、有効な値が資源値保存領域に保存されているか否かを資源グループ毎に示すフラグである。この資源グループ保存値有効フラグには、資源グループ０に対応したフラグ（以下、資源グループ保存値有効フラグ０と称する。）と、資源グループ１に対応したフラグ（以下、資源グループ保存値有効フラグ１と称する。）と、資源グループ２に対応したフラグ（以下、資源グループ保存値有効フラグ２と称する。）と、資源グループ３に対応したフラグ（以下、資源グループ保存値有効フラグ４と称する。）とがある。
【０１０９】
そして、資源値保存領域に、資源グループ０の資源値として有効な値が保存されているとき、資源グループ保存値有効フラグ０には「真」の値が設定され、資源グループ０の資源値として有効な値が保存されていないとき、資源グループ保存値有効フラグ０には「偽」の値が設定される。同様に、資源値保存領域に、資源グループ１の資源値として有効な値が保存されているとき、資源グループ保存値有効フラグ１には「真」の値が設定され、資源グループ１の資源値として有効な値が保存されていないとき、資源グループ保存値有効フラグ１には「偽」の値が設定される。同様に、資源値保存領域に、資源グループ２の資源値として有効な値が保存されているとき、資源グループ保存値有効フラグ２には「真」の値が設定され、資源グループ２の資源値として有効な値が保存されていないとき、資源グループ保存値有効フラグ２には「偽」の値が設定される。同様に、資源値保存領域に、資源グループ３の資源値として有効な値が保存されているとき、資源グループ保存値有効フラグ３には「真」の値が設定され、資源グループ３の資源値として有効な値が保存されていないとき、資源グループ保存値有効フラグ３には「偽」の値が設定される。
【０１１０】
なお、タスクの実行を終了するときには、資源値の資源値保存領域への保存を行わずに、当該タスクに対応するタスク情報の資源グループ保存値有効フラグの値をすべて「偽」の値に設定する。これにより、無用な資源値の保存を行わなくて済むようになる。
【０１１１】
また、資源制御情報のうち、資源値保存領域先頭番地には、資源値保存領域のメモリ上での先頭番地を示す値が設定される。従来は、図２０に示したように、タスク情報保存領域と資源値保存領域とがメモリ上で一連の領域とされていた。これに対して、本例では、図３及び図５に示すように、タスク情報保存領域と、資源値保存領域とをそれぞれ別々にメモリ上に確保する。そこで、本例では、資源値保存領域の場所が分かるように、資源制御情報として、資源値保存領域先頭番地を保存しておく。
【０１１２】
また、上述したように、オペレーティングシステムは、各タスク毎に資源値保存領域を確保する。ここで、資源値保存領域には、当該資源値保存領域に対応するタスクの実行に使用される資源の状態を示す資源値が保存されるが、本例において、資源値保存領域には、全ての資源の資源値が保存されるとは限らず、資源グループ単位で必要なものだけが保存される。
【０１１３】
すなわち、例えば、タスクが資源グループ０及び資源グループ１の資源値だけを保持すれば良い場合には、当該タスクに対応した資源値保存領域には、図５に示すように、資源グループ０及び資源グループ１の資源値だけが保存される。換言すれば、例えば、浮動小数点演算装置を使用しないタスクにおいては、資源グループ２及び資源グループ３のための資源値保存領域が不要となる。
【０１１４】
なお、従来のタスク切り替え方法では、全てのタスクについて全ての資源値を資源値保存領域に保存するようにしていたので、タスク一つあたりの資源値保存領域として、全ての汎用レジスタ及び浮動小数点レジスタの分のメモリ、すなわち１０２４バイトのメモリが必要であった。一方、本例では、資源を資源グループに分割して管理し、資源値保存領域には、値を保持すべき資源を含む資源グループについてだけ、資源値を保存するようにする。したがって、例えば、浮動小数点演算装置を使用しないタスクについては、浮動小数点レジスタに対応する資源値保存領域が必要ないので、従来のタスク切り替え方法に比べて、タスク一つあたり５１２バイトのメモリ（すなわち浮動小数点レジスタの分のメモリ）を節約することができる。
【０１１５】
このように、本例では、資源を資源グループに分割して管理し、資源値保存領域には、値を保持すべき資源を含む資源グループについてだけ、資源値を保存するようにする。これにより、タスク切り替えを行ったときにメモリに保存すべきデータ量を大幅に削減することができ、タスク切り替え時のメモリアクセスを大幅に削減することができる。
【０１１６】
なお、資源値保存領域に資源値を格納する際、資源グループ０の資源値は、資源制御情報の資源値保存領域先頭番地が示すメモリ番地から順次格納するようにする。また、資源グループ１の資源値は、資源制御情報の資源値保存領域先頭番地が示すメモリ番地から２５６バイト分だけ後ろのメモリ番地から順次格納するようにする。また、資源グループ２の資源値は、資源制御情報の資源値保存領域先頭番地が示すメモリ番地から５１２バイト分だけ後ろのメモリ番地から順次格納するようにする。また、資源グループ３の資源値は、資源制御情報の資源値保存領域先頭番地が示すメモリ番地から７６８バイト分だけ後ろのメモリ番地から順次格納するようにする。
【０１１７】
このように、各資源グループの資源値を保存する領域の相対的な位置関係を予め決めておいた場合、各資源グループの資源値を保存する領域を示す情報としては資源値保存領域先頭番地だけがあれば良く、各資源グループの資源値を保存する領域のメモリ番地を個別に記憶しておくような必要が無くなる。
【０１１８】
４−１−４  タスク切り替え処理の概略
つぎに、以上のようなオペレーティングシステムによって行われるタスク切り替えの処理の概略について説明する。
【０１１９】
本例におけるタスク切り替えでは、浮動小数点演算装置使用許可フラグによって管理される資源グループ２及び資源グループ３については、タスク切り替えの時点では、資源値保存領域への資源値の保存や、資源値保存領域からの資源値の読み込みを行わない。そして、資源グループ２及び資源グループ３については、それらに属する資源が必要になった段階で必要に応じて、資源値の保存や読み込みを行う。
【０１２０】
また、資源グループ０や資源グループ１についても、資源値保存領域への資源値の保存や、資源値保存領域からの資源値の読み込みを常に行うとは限らず、必要なものについてだけ、資源値の保存や読み込みを行う。
【０１２１】
すなわち、タスク切り替えが機能ブロック遷移命令によって起動された場合には、資源グループ１の資源値は保持しなければならないが、資源グループ０の資源値は変更して構わないので、資源グループ１の資源値の保存だけを行う。一方、タスク切り替えが割り込み処理によって起動された場合には、資源グループ０の資源値と資源グループ１の資源値の両方を保持しなければならないので、資源グループ０の資源値と資源グループ１の資源値の両方について、資源値保存領域への保存を行う。
【０１２２】
また、資源値保存領域から資源値を読み込む場合も、先ず、資源グループ保存値有効フラグを検査し、資源グループ０や資源グループ１の資源値として有効な値が資源値保存領域に保存されているか否かを判別する。そして、有効な値が保存されている場合にだけ、資源値保存領域からの資源値の読み込みを行う。すなわち、タスク切り替えにより実行を再開するタスクに関しては、当該タスクが実行を停止したときに設定した資源グループ保存値有効フラグの値を参照して、有効な資源値だけを資源値保存領域から読み込む。
【０１２３】
なお、上述したように、資源グループ２及び資源グループ３については、タスク切り替えの時点では、資源値保存領域への資源値の保存や、資源値保存領域からの資源値の読み込みを行わない。そこで、タスクが資源グループ２や資源グループ３に属する資源が必要になったときには、先ず、資源グループ使用可能性検査を行う。資源グループ使用可能性検査では、資源グループ２や資源グループ３に属する資源をタスクが使用可能であるか否かを検査する。なお、資源グループ使用可能性検査については、後で詳細に説明する。
【０１２４】
そして、資源グループ使用可能性検査の結果、当該資源をタスクが使用可能であると判定された場合には、当該資源を使用してタスクの処理を継続し、使用可能でないと判定された場合には、資源グループ占有タスク切り替え処理を行う。資源グループ占有タスク切り替え処理では、当該資源をタスクが使用可能な状態に変更する。なお、資源グループ占有タスク切り替え処理については、後で詳細に説明する。そして、資源グループ占有タスク切り替え処理により、当該資源をタスクが使用可能な状態に変更されたら、当該資源を使用してタスクの処理を継続する。
【０１２５】
４−１−５  タスク切り替え処理の詳細
つぎに、以上のようなタスク切り替え処理について、図６のフローチャートを参照して詳細に説明する。なお、ここでは、タスクＡからタスクＢへのタスク切り替えを行うものとして説明する。
【０１２６】
タスクＡからタスクＢへのタスク切り替え処理を行う際は、先ず、ステップＳＴ１−１において、タスク切り替えが割り込み処理によるものであるか否かを判断する。割り込み処理によるタスク切り替えの場合には、ステップＳＴ１−２へ進み、割り込み処理によるタスク切り替えでない場合（すなわち機能ブロック遷移命令によるタスク切り替えの場合）には、ステップＳＴ１−４へ進む。
【０１２７】
ステップＳＴ１−２では、割り込み処理によるタスク切り替えに対応するように、タスクＡに対応したタスク情報の資源グループ保存値有効フラグの設定を行う。具体的には、タスクＡに対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ０及び資源グループ１に対応する資源グループ保存値有効フラグの値を「真」にする。なお、タスクＡに対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ２及び資源グループ３に対応する資源グループ保存値有効フラグの値は変更しない。
【０１２８】
次に、ステップＳＴ１−３において、使用許可フラグが存在しない資源グループの資源値を、タスクＡに対応した資源値保存領域に保存する。具体的には、資源グループ０及び資源グループ１の資源値を、タスクＡに対応した資源値保存領域に保存する。なお、資源グループ２及び資源グループ３については、後述するように浮動小数点演算装置使用許可フラグを用いて資源グループ使用可能性検査を行うことができるので、タスク切り替えの時点では、資源グループ２及び資源グループ３の資源値の保存は行わない。そして、ステップＳＴ１−３での処理が完了したら、ステップＳＴ１−６へ進む。
【０１２９】
一方、ステップＳＴ１−４では、機能ブロック遷移命令によるタスク切り替えに対応するように、タスクＡに対応したタスク情報の資源グループ保存値有効フラグの設定を行う。具体的には、タスクＡに対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ０に対応する資源グループ保存値有効フラグの値を「偽」にし、資源グループ１に対応する資源グループ保存値有効フラグの値を「真」にし、資源グループ２に対応する資源グループ保存値有効フラグの値を「偽」にする。なお、資源グループ３に対応する資源グループ保存値有効フラグの値は変更しない。
【０１３０】
次に、ステップＳＴ１−５において、使用許可フラグが存在しない資源グループの資源値を、タスクＡに対応した資源値保存領域に保存する。具体的には、資源グループ１の資源値を、タスクＡに対応した資源値保存領域に保存する。なお、使用許可フラグが存在しない資源グループとしては、資源グループ０と資源グループ１とがあるが、機能ブロック遷移命令によるタスク切り替えの場合、資源グループ０の資源値は変更されても構わないので、ここでは、資源グループ０の資源値は保存しない。また、資源グループ２及び資源グループ３については、後述するように浮動小数点演算装置使用許可フラグを用いて資源グループ使用可能性検査を行うことができるので、タスク切り替えの時点では、資源グループ２及び資源グループ３の資源値の保存は行わない。そして、ステップＳＴ１−５での処理が完了したら、ステップＳＴ１−６へ進む。
【０１３１】
ステップＳＴ１−６以降の処理は、割り込み処理によるタスク切り替えの場合と、機能ブロック遷移命令によるタスク切り替えの場合とで共通であり、先ず、ステップＳＴ１−６において、浮動小数点演算装置使用許可フラグの値を、タスクＡ（すなわち切り替え元のタスク）に対応したタスク情報の資源グループ２−３占有フラグに設定する。
【０１３２】
次に、ステップＳＴ１−７乃至ステップＳＴ１−１０の処理により、タスクＢ（すなわち切り替え先のタスク）に対応した資源値保存領域に資源グループ０及び資源グループ１の資源値が保存されている場合には、それらの値を読み出す。すなわち、資源グループ２及び資源グループ３については、資源グループ使用可能性検査が行えるので、資源グループ２及び資源グループ３の資源値の読み込みをタスク切り替えの時点で行う必要はないが、資源グループ０及び資源グループ１については、資源グループ使用可能性検査を行うことができないので、タスク切り替えの時点で、タスクＢに対応したタスク情報の資源グループ保存値有効フラグの値に基づいて、資源グループ０及び資源グループ１の資源値の読み込みを行う。
【０１３３】
具体的には、先ず、ステップＳＴ１−７において、タスクＢに対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ０の値を検査する。そして、資源グループ保存値有効フラグ０の値が「真」の場合は、ステップＳＴ１−８へ進み、当該ステップＳＴ１−８において、資源グループ０の資源値をタスクＢに対応した資源値保存領域から読み込み、その後、ステップＳＴ１−９へ進む。一方、資源グループ保存値有効フラグ０の値が「偽」の場合は、資源グループ０の資源値の読み込みを行うことなく、ステップＳＴ１−９へ進む。
【０１３４】
次に、ステップＳＴ１−９において、タスクＢに対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ１の値を検査する。そして、資源グループ保存値有効フラグ１の値が「真」の場合は、ステップＳＴ１−１０へ進み、当該ステップＳＴ１−１０において、資源グループ１の資源値をタスクＢに対応した資源値保存領域から読み込み、その後、ステップＳＴ１−１１へ進む。一方、資源グループ保存値有効フラグ１の値が「偽」の場合は、資源グループ１の資源値の読み込みを行うことなく、ステップＳＴ１−１１へ進む。
【０１３５】
次に、ステップＳＴ１−１１において、浮動小数点演算装置使用許可フラグに、タスクＢに対応したタスク情報の資源グループ２−３占有フラグの値を設定する。
【０１３６】
次に、ステップＳＴ１−１２において、実行中タスク変数にタスクＢに対応した値を設定する。以上の処理で、資源グループの制御に必要な処理と、タスク切り替えの時点で必要な資源値の保存及び読み込みの処理とが完了したこととなる。
【０１３７】
最後に、ステップＳＴ１−１３において、その他のタスク切り替え処理を行い、全てのタスク切り替え処理が完了したら、タスクＢを起動する。なお、ステップＳＴ１−１３での処理は、資源の管理に関する処理以外の処理である。したがって、ステップＳＴ１−１３での処理は、従来のオペレーティングシステムと同様で良く、本発明のポイントではないので、詳細な説明は省略する。
【０１３８】
なお、ステップＳＴ１−１２で行うような処理は、実行するタスクを管理するために、従来のオペレーティングシステムにおけるタスク切り替え処理でも行われることが多いが、実行中タスク変数は本発明において使用される変数であるので、ここでは、実行中タスク変数にタスクＢに対応した値を設定する処理を、ステップＳＴ１−１３とは別のステップとして明示した。
【０１３９】
ところで、従来、図１に示したようなデータ処理装置においてタスク切り替えを行う際は、タスク切り替えを行う毎に、汎用レジスタ及び小数点レジスタの全てについて値の保存及び読み込みを行う必要があるため、１０２４バイトの資源値の資源値保存領域への保存と、１０２４バイトの資源値の資源値保存領域からの読み込みとが必要だった。これに対して、上記タスク切り替え処理では、資源を４つの資源グループ０，１，２，３に分割して管理し、必要なものについてだけ、資源値保存領域への保存や資源値保存領域からの読み込みを行うようにしているので、タスク切り替え時のメモリアクセスが非常に少なくて済む。
【０１４０】
すなわち、上記タスク切り替え処理では、タスク切り替えが割り込み処理によって起動された場合には、切り替え元のタスク（すなわちタスクＡ）に対応した資源値保存領域への資源値の保存を、資源グループ０及び資源グループ１についてだけ行えば良い。この場合、資源値保存領域への資源値の保存は、５１２バイトだけで済む。また、タスク切り替えが機能ブロック遷移命令によって起動された場合には、切り替え元のタスク（すなわちタスクＡ）に対応した資源値保存領域への資源値の保存を、資源グループ１についてだけ行えば良い。この場合、資源値保存領域への資源値の保存は、２５６バイトだけで済む。
【０１４１】
また、上記タスク切り替え処理において、資源値保存領域からの資源値の読み込み量が最大となるのは、切り替え先のタスク（すなわちタスクＢ）に対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ０及び資源グループ保存値有効フラグ１が「真」の場合であるが、この場合でも、切り替え先のタスクに対応した資源値保存領域からの資源値の読み込みは、資源グループ０及び資源グループ１についてだけ行えば良い。すなわち、上記タスク切り替え処理において、資源値保存領域からの資源値の読み込み量は、最大でも５１２バイトだけで済む。
【０１４２】
また、上記タスク切り替え処理において、切り替え先のタスク（すなわちタスクＢ）に対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ０が「偽」であり、且つ、資源グループ保存値有効フラグ１が「真」の場合には、切り替え先タスクに対応した資源値保存領域からの資源値の読み込みは、資源グループ１についてだけ行えば良い。この場合、資源値保存領域からの資源値の読み込みは、２５６バイトだけで済む。
【０１４３】
なお、切り替え先のタスク（すなわちタスクＢ）に対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ０が「真」であり、且つ、資源グループ保存値有効フラグ１が「真」の場合とは、切り替え先のタスクが割り込み処理によるタスク切り替えによって停止していた場合である。また、切り替え先のタスク（すなわちタスクＢ）に対応したタスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ０が「偽」であり、且つ、資源グループ保存値有効フラグ１が「真」の場合とは、切り替え先のタスクが機能ブロック遷移命令によるタスク切り替えによって停止していた場合である。
【０１４４】
４−１−６  資源グループ使用可能性検査
つぎに、資源グループ使用可能性検査について、図７のフローチャートを参照して詳細に説明する。
【０１４５】
資源グループ使用可能性検査は、中央処理装置による命令実行と並行して行われるものである。すなわち、資源グループ使用可能性検査は、タスクの命令を実行しようとする毎に実行される。
【０１４６】
資源グループ使用可能性検査では、先ず、ステップＳＴ２−１において、実行しようとしている命令が浮動小数点演算装置を使用するか否かを判断する。そして、浮動小数点演算装置を使用する場合には、ステップＳＴ２−２へ進む。一方、浮動小数点演算装置を使用しない場合には、そのまま資源グループ使用可能性検査を終了して、浮動小数点演算装置を使用することなくタスクの命令を実行する。
【０１４７】
ステップＳＴ２−２では、浮動小数点演算装置使用許可フラグの値を検査する。そして、浮動小数点演算装置使用許可フラグの値が「偽」の場合には、ステップＳＴ２−３へ進む。一方、浮動小数点演算装置使用許可フラグの値が「真」の場合には、タスクが浮動小数点演算装置を使用できる状態に既になっているので、資源グループ使用可能性検査を終了して、浮動小数点演算装置を使用してタスクの命令を実行する。
【０１４８】
ステップＳＴ２−３に進むのは、タスクが浮動小数点演算装置を使用できる状態になっていない場合である。そこで、ステップＳＴ２−３では、資源グループ占有タスク切り替え処理を行い、タスクが浮動小数点演算装置を使用できるようにする。なお、資源グループ占有タスク切り替え処理については後で詳細に説明する。そして、資源グループ占有タスク切り替え処理により、タスクが浮動小数点演算装置を使用できる状態になったら、資源グループ使用可能性検査を終了して、浮動小数点演算装置を使用してタスクの命令を実行する。
【０１４９】
以上のような資源グループ使用可能性検査は、中央処理装置による命令実行と並行して行われるものであり、資源グループ占有タスク切り替え処理が起動されない限り、資源グループ使用可能性検査によって処理時間が増加するようなことはない。すなわち、浮動小数点演算装置を使用しないタスクについては、資源グループ占有タスク切り替え処理が起動されることはないので、資源グループ使用可能性検査がタスクの実行速度に悪影響を与えることはない。したがって、浮動小数点演算装置を使用しないタスクは、浮動小数点演算装置に関する資源値の保存や読み込みを行わないことによる処理時間短縮及び資源値保存領域削減の効果のみを受けることとなる。
【０１５０】
一方、浮動小数点演算装置を使用するタスクにおいては、資源グループ占有タスク切り替え処理が起動される場合がある。そして、資源グループ占有タスク切り替え処理が起動された場合には、資源グループ占有タスク切り替え処理の分だけ、従来に比べて処理量が増加する。
【０１５１】
ただし、本例では、浮動小数点演算装置を使用しないタスクに切り替えたとき、浮動小数点レジスタの値（すなわち、資源グループ２及び資源グループ３の資源値）について、資源値保存領域への保存や資源値保存領域からの読み込みを行わないようにしており、その分だけ従来に比べて処理量が削減される。すなわち、例えば、浮動小数点演算装置を使用していたタスクが停止してから、当該タスクの実行が再開するまでの間に、他のタスクが浮動小数点演算装置を使用していない場合には、そのまま浮動小数点レジスタの値が保持されるので、タスク切り替えを行う毎に全ての資源値を更新する従来のタスク切り替え方法に比べて、浮動小数点レジスタの値の更新に伴う処理が大幅に削減される。
【０１５２】
そして、浮動小数点演算装置を使用するタスク同士でよほど頻繁にタスク切り替えを行わない限り、資源グループ占有タスク切り替え処理に伴う処理量の増加よりも、浮動小数点レジスタの値の更新に伴う処理を削減したことによる処理量減少のほうが遥かに寄与が大きい。したがって、タスク切り替えの対象となるタスクに、浮動小数点演算装置を使用するタスクが含まれていたとしても、浮動小数点演算装置を使用するタスク同士でよほど頻繁にタスク切り替えを行わない限りは、本例のほうが従来に比べて処理量が遥かに少なくて済む。
【０１５３】
４−１−７  資源グループ占有タスク切り替え処理
つぎに、資源グループ占有タスク切り替え処理について、図８のフローチャートを参照して詳細に説明する。
【０１５４】
資源グループ占有タスク切り替え処理は、上述したように、タスクが資源（本例では浮動小数点レジスタ）を使用しようとしたときに、資源グループ使用可能性検査により、当該資源が使用可能になっていないと判断された場合に実行される。すなわち、タスクが資源を使用しようとしたときに当該資源が使用可能となっていない場合には、資源グループ占有タスク切り替え処理によって、当該資源をタスクが使用可能な状態に変更される。なお、資源グループ占有タスク切り替え処理には、大きく分けて、資源グループの使用権限を変更する処理と、当該資源グループの資源値の保存及び読み込みを行う処理とが含まれる。
【０１５５】
このような資源グループ占有タスク切り替え処理では、図８のフローチャートに示すように、先ず、ステップＳＴ３−１において、資源グループ２−３占有タスク変数が示すタスクに対応したタスク情報（すなわち、浮動小数点演算装置を現在占有しているタスクのタスク情報）を、占有中タスク情報として特定する。
【０１５６】
次に、ステップＳＴ３−２において、占有中タスク情報の資源グループ２−３占有フラグに「偽」の値を設定する。
【０１５７】
次に、ステップＳＴ３−３において、浮動小数点演算装置使用許可フラグに「真」の値を設定する。これにより、現在実行中のタスクに対して、浮動小数点演算装置の使用が許可される。
【０１５８】
次に、資源グループ２や資源グループ３の資源値を保持する必要がある場合には、ステップＳＴ３−４乃至ステップＳＴ３−７での処理により、資源グループ２及び資源グループ３を現在占有しているタスクに対応した資源値保存領域に、それらの資源値を保存する。
【０１５９】
具体的には、先ず、ステップＳＴ３−４において、占有中タスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ２を検査する。そして、資源グループ保存値有効フラグ２の値が「真」の場合は、ステップＳＴ３−５へ進み、当該ステップＳＴ３−５において、資源グループ２の資源値を、占有中タスク情報に対応した資源値保存領域に保存し、その後、ステップＳＴ３−６へ進む。一方、資源グループ保存値有効フラグ２の値が「偽」の場合は、資源グループ２の資源値を資源値保存領域に保存することなく、ステップＳＴ３−６へ進む。
【０１６０】
次に、ステップＳＴ３−６において、占有中タスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ３を検査する。そして、資源グループ保存値有効フラグ３の値が「真」の場合は、ステップＳＴ３−７へ進み、当該ステップＳＴ３−７において、資源グループ３の資源値を、占有中タスク情報に対応した資源値保存領域に保存し、その後、ステップＳＴ３−８へ進む。一方、資源グループ保存値有効フラグ３の値が「偽」の場合は、資源グループ３の資源値を資源値保存領域に保存することなく、ステップＳＴ３−８へ進む。
【０１６１】
次に、ステップＳＴ３−８において、実行中タスク変数が示すタスクに対応したタスク情報（すなわち現在実行中のタスクに対応したタスク情報）を、実行中タスク情報として特定する。
【０１６２】
次に、現在実行中のタスクに対応した資源値保存領域に、資源グループ２や資源グループ３の資源値として、有効な値が保存されている場合には、ステップＳＴ３−９乃至ステップＳＴ３−１２での処理により、それらの資源値を読み込む。
【０１６３】
具体的には、先ず、ステップＳＴ３−９において、実行中タスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ２を検査する。そして、資源グループ保存値有効フラグ２の値が「真」の場合は、ステップＳＴ３−１０へ進み、当該ステップＳＴ３−１０において、資源グループ２の資源値を、実行中タスク情報に対応した資源値保存領域から読み込み、その後、ステップＳＴ３−１１へ進む。一方、資源グループ保存値有効フラグ２の値が「偽」の場合は、資源グループ２の資源値を資源値保存領域から読み込むことなく、ステップＳＴ３−１１へ進む。
【０１６４】
次に、ステップＳＴ３−１１において、実行中タスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ３を検査する。そして、資源グループ保存値有効フラグ３の値が「真」の場合は、ステップＳＴ３−１２へ進み、当該ステップＳＴ３−１２において、資源グループ３の資源値を、実行中タスク情報に対応した資源値保存領域から読み込み、その後、ステップＳＴ３−１３へ進む。一方、資源グループ保存値有効フラグ３の値が「偽」の場合は、資源グループ３の資源値を資源値保存領域から読み込むことなく、ステップＳＴ３−１３へ進む。
【０１６５】
次に、ステップＳＴ３−１３において、実行中タスク情報の資源グループ保存値有効フラグのうち、資源グループ保存値有効フラグ２及び資源グループ保存値有効フラグ３に「真」の値をする。なお、実行中のタスクに対して資源グループ２及び資源グループ３の使用を許可したからといって、実行中のタスクが資源グループ２と資源グループ３の両方を使用するとは限らない。したがって、実行中のタスクに対して資源グループ２及び資源グループ３の使用を許可したからといって、資源グループ２の資源値と、資源グループ３の資源値の両方を保持する必要があるとは限らない。しかしながら、本例では、タスクが資源グループ２や資源グループ３に属する資源を実際に使用したか否かを判断する手段を設けていない。そこで、本例では、使用可能にした資源については、それらの資源値を全て保持する必要があるものとし、ステップＳＴ３−１３において、資源グループ保存値有効フラグ２と資源グループ保存値有効フラグ３の両方の値を「真」に設定するようにしている。
【０１６６】
そして最後に、ステップＳＴ３−１４において、資源グループ２−３占有タスク変数に実行中タスク変数の値を設定する。
【０１６７】
以上で資源グループ占有タスク切り替え処理が完了し、現在実行中のタスクが、資源グループ２及び資源グループ３（すなわち浮動小数点レジスタ）を使用することが可能となる。
【０１６８】
４−２  第２の実施の形態
つぎに、本発明の第２の実施の形態として、本発明を適用した新規なデータ処理装置を用いて行われるタスク切り替えについて説明する。
【０１６９】
本例では、タスク切り替えに必要な情報を保持するレジスタをデータ処理装置に実装させておく。また、それらのレジスタを用いて行われるタスク切り替えの機構もデータ処理装置に実装させておき、タスク切り替えに伴う処理の大部分をハードウェアによって処理するようにする。
【０１７０】
このように、タスク切り替えの機構をデータ処理装置に実装させておくことにより、オペレーティングシステムによるソフトウェア処理を大幅に削減することが可能となり、オペレーティングシステムの処理だけでタスク切り替えを行うような場合に比べて、大幅に効率的且つ高速にタスク切り替えを行うことができる。
【０１７１】
４−２−１  データ処理装置の構成
まず、本例において使用されるデータ処理装置について説明する。なお、このデータ処理装置は、本発明を適用した新規なデータ処理装置である。
【０１７２】
本例において使用されるデータ処理装置は、中央処理装置（ＣＰＵ：Central Processing Unit）と、浮動小数点演算などの演算命令を高速に実行する浮動小数点演算装置とを備えている。ここで、中央処理装置はキャッシュメモリを備えており、当該キャッシュメモリのキャッシュラインサイズは１６バイトである。
【０１７３】
そして、このデータ処理装置は、タスクが使用可能な資源として、図９に示すように、中央処理装置のレジスタ（以下、汎用レジスタと称する。）と、浮動小数点演算装置のレジスタ（以下、浮動小数点レジスタと称する。）とを備えている。ここで、汎用レジスタは、０〜１２７番まであり、各汎用レジスタは３２ビットの容量を持つ。また、浮動小数点レジスタは、０〜６３番まであり、各浮動小数点レジスタは６４ビットの容量を持つ。したがって、このデータ処理装置は、汎用レジスタと浮動小数点レジスタとで、合計８１９２ビット（＝１０２４バイト）の容量を持っている。
【０１７４】
なお、本例においても、上述した本発明の第１の実施の形態と同様に、データ処理装置によって実行されるプログラムは、機能ブロック遷移命令を実行する際に、汎用レジスタの０〜６３番と浮動小数点レジスタの０〜３１番は、作業用レジスタとして使用して、呼び出された機能ブロックの処理中に値を変更しても構わないが、汎用レジスタの６４〜１２７番と浮動小数点レジスタの３２〜６３番は、機能ブロックの処理を終了して当該プログラムの処理を継続する際に、機能ブロックの呼び出し前の値を保持していなければならないという仕様に従っているものとする。
【０１７５】
また、実行中のタスクがオペレーティングシステムに指示するタスク切り替えの要求については、機能ブロック遷移命令を使用するものとする。
【０１７６】
また、任意のタイミングで発生する割り込み処理に対応するため、割り込み処理のときには、全ての汎用レジスタ及び浮動小数点レジスタの値を割り込み直前の値に復元してから、通常処理を再開する必要があるものとする。
【０１７７】
そして、本発明に係るデータ処理装置は、タスクが使用可能な資源を、複数の資源グループに分割して管理することを特徴としており、本例においては、タスクが使用することが可能な資源である汎用レジスタ及び浮動小数点レジスタを、図９に示すように、１６の資源グループに分割して管理する。
【０１７８】
すなわち、このデータ処理装置は、タスクが使用することが可能な資源である汎用レジスタ及び浮動小数点レジスタを、汎用レジスタの０〜１５番が属する資源グループ０、汎用レジスタの１６〜３１番が属する資源グループ１、汎用レジスタの３２〜４７番が属する資源グループ２、汎用レジスタの４８〜６３番が属する資源グループ３、汎用レジスタの６４〜７９番が属する資源グループ４、汎用レジスタの８０〜９５番が属する資源グループ５、汎用レジスタの９６〜１１１番が属する資源グループ６、汎用レジスタの１１２〜１２７番が属する資源グループ７、浮動小数点レジスタの０〜７番が属する資源グループ８、浮動小数点レジスタの８〜１５番が属する資源グループ９、浮動小数点レジスタの１６〜２３番が属する資源グループ１０、浮動小数点レジスタの２４〜３１番が属する資源グループ１１、浮動小数点レジスタの３２〜３９番が属する資源グループ１２、浮動小数点レジスタの４０〜４７番が属する資源グループ１３、浮動小数点レジスタの４８〜５５番が属する資源グループ１４、浮動小数点レジスタの５６〜６３番が属する資源グループ１５の１６の資源グループに分割して管理する。
【０１７９】
なお、資源グループ０，１，２，３は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がない汎用レジスタのグループである。また、資源グループ４，５，６，７は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がある汎用レジスタのグループである。また、資源グループ８，９，１０，１１は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令前の値を保持する必要がない浮動小数点レジスタのグループである。また、資源グループ１２，１３，１４，１５は、機能ブロック遷移命令によるタスク切り替えを行う際に、機能ブロック遷移命令後の値を保持する必要がある浮動小数点レジスタのグループである。
【０１８０】
また、このデータ処理装置は、図９に示すように、タスク切り替えに必要な情報を保持するレジスタとして、資源グループ占有タスク変数レジスタと、実行中タスク変数レジスタと、資源グループ使用許可フラグレジスタと、資源グループ使用中フラグレジスタと、資源グループ保存値有効フラグレジスタとを備えている。なお、これらのレジスタは、従来のデータ処理装置には無かったものであり、本発明を適用した図９に示すデータ処理装置において、新規に実装したものである。
【０１８１】
資源グループ占有タスク変数レジスタには、資源グループ０に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数０と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ２に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数２と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ３に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数３と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ４に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数４と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ５に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数５と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ６に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数６と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ７に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数７と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ８に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数８と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ９に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数９と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１０に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１０と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１１に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１１と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１２に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１２と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１３に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１３と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１４に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１４と称する。）が格納される３２ビットの符号無し整数のレジスタと、資源グループ１５に対応した資源グループ占有タスク変数（以下、資源グループ占有タスク変数１５と称する。）が格納される３２ビットの符号無し整数のレジスタとがある。
【０１８２】
なお、資源グループ占有タスク変数０には、資源グループ０を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１には、資源グループ１を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数２には、資源グループ２を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数３には、資源グループ３を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数４には、資源グループ４を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数５には、資源グループ５を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数６には、資源グループ６を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数７には、資源グループ７を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数８には、資源グループ８を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数９には、資源グループ９を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１０には、資源グループ１０を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１１には、資源グループ１１を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１２には、資源グループ１２を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１３には、資源グループ１３を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１４には、資源グループ１４を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。また、資源グループ占有タスク変数１５には、資源グループ１５を占有しているタスクがあるときに、当該タスクに対応したタスク情報が格納されている領域の先頭番地が設定される。
【０１８３】
実行中タスク変数レジスタは、３２ビットの符号無し整数のレジスタであり、実行中タスク変数が格納される。ここで、実行中タスク変数は、現在実行中のタスクに対応したタスク情報が格納されている領域の先頭番地を示す変数である。すなわち、タスクが実行されているとき、実行中タスク変数レジスタには、当該タスクに対応したタスク情報が格納されている領域の先頭番地が、実行中タスク変数として設定される。
【０１８４】
資源グループ使用許可フラグレジスタは、１６ビットの符号無し整数のレジスタであり、１６個の資源グループ使用許可フラグが格納される。ここで、資源グループ使用許可フラグは、資源グループの使用を許可するか否かを示すフラグであり、資源グループ使用許可フラグレジスタを構成する１６個の各ビットは、１６に分割された各資源グループに対応した、１６個の独立した資源グループ使用許可フラグとして扱われる。
【０１８５】
なお、資源グループ使用許可フラグには、実行中のタスクが対応する資源グループを使用可能の場合に「真」の値が設定され、使用可能でない場合に「偽」の値が設定される。したがって、例えば、資源グループ２を使用可能の場合、資源グループ２に対応した資源グループ使用許可フラグに「真」の値が設定され、また、例えば、資源グループ５を使用可能でない場合、資源グループ５に対応した資源グループ使用許可フラグに「偽」の値が設定される。
【０１８６】
資源グループ使用中フラグレジスタは、１６ビットの符号無し整数のレジスタであり、１６個の資源グループ使用中フラグが格納される。ここで、資源グループ使用中フラグは、資源グループを使用中のタスクが存在しているか否かを示すフラグであり、資源グループ使用中フラグレジスタを構成する１６個の各ビットは、１６に分割された各資源グループに対応した、１６個の独立した資源グループ使用中フラグとして扱われる。
【０１８７】
なお、資源グループ使用中フラグには、いずれかのタスクが対応する資源グループが使用中の場合に「真」の値が設定され、使用中でない場合に「偽」の値が設定される。したがって、例えば、資源グループ４を使用中の場合、資源グループ４に対応した資源グループ使用中フラグに「真」の値が設定され、また、例えば、資源グループ１０を使用していない場合、資源グループ１０に対応した資源グループ使用中フラグに「偽」の値が設定される。
【０１８８】
資源グループ保存値有効フラグレジスタは、１６ビットの符号無し整数のレジスタであり、１６個の資源グループ保存値有効フラグが格納される。ここで、資源グループ保存値有効フラグは、実行中のタスクにおいて、各資源グループの資源値として有効な値が、資源グループの各資源或いは対応する資源値保存領域に存在するか否かを示すフラグであり、資源グループ保存値有効フラグレジスタを構成する１６個の各ビットは、１６に分割された各資源グループに対応した、１６個の独立した資源グループ保存値有効フラグとして扱われる。
【０１８９】
なお、資源グループ保存値有効フラグには、実行中のタスクについて、対応する資源グループの資源値として有効な値が、資源グループの各資源が保持しているか、或いは資源値保存領域に保存されている場合に、「真」の値が設定され、有効な値が保存されていない場合に「偽」の値が設定される。したがって、例えば、資源グループ６の資源値として有効な値が保存されている場合、資源グループ６に対応した資源グループ保存値有効フラグに「真」の値が設定され、また、例えば、資源グループ１５の資源値として有効な値が保存されていない場合、資源グループ１５に対応した資源グループ保存値有効フラグに「偽」の値が設定される。
【０１９０】
なお、以上のようにデータ処理装置に新規に実装したレジスタのうち、少なくとも実行中タスク変数レジスタ、資源グループ使用許可フラグレジスタ、資源グループ使用中フラグレジスタ及び資源グループ保存値有効フラグレジスタは、オペレーティングシステムによる読み出しや書き込みができるようにしておく。
【０１９１】
４−２−２  タスク情報と資源値保存領域
本例においても、複数のタスクを並行して実行する際に、タスク情報を保存するためのタスク情報保存領域と、タスクの実行に使用される資源の状態を示す資源値を保存するための資源値保存領域とを、メモリ上にタスク毎に確保する。以下、このようにメモリ上にタスク毎に確保されるタスク情報保存領域及び資源値保存領域について、図１０を参照して詳細に説明する。
【０１９２】
４−２−２−１  タスク情報保存領域
タスク情報保存領域は、タスク情報を保存するための領域であり、タスク情報保存領域に格納されるタスク情報は、一つのタスクに対して一つ存在する。これらのタスク情報は、上述した本発明の第１の実施の形態と同様に、タスクの数に応じた配列としてメモリ上にまとめて保存され、当該配列の添え字を用いて各タスク情報を参照できるようになされる。すなわち、各タスク情報はそれぞれ配列要素としてメモリ上に保存され、各配列要素が保存される領域が、それぞれタスク情報保存領域に対応している。このようにタスク情報を配列としてメモリ上にまとめて保存しておけば、メモリを有効に活用することができ、しかも、各タスク情報に高速にアクセスすることができる。
【０１９３】
また、各タスク情報保存領域は、図１０に示すように、タスク制御情報領域と、資源制御情報領域とを有している。ここで、タスク制御情報領域は、タスクを制御するのに必要なタスク制御情報が保存される領域である。タスク制御情報領域に保存されるタスク制御情報は、本発明のポイントとなるものではなく、従来のシステムで使用されていたものと同様で良いので、ここでは詳細な説明は省略する。
【０１９４】
一方、資源制御情報領域は、タスクで使用される資源を制御するのに必要な資源制御情報が保存される領域であり、従来のシステムには無かったものである。この資源制御情報領域には、タスクで使用される資源を制御するのに必要な資源制御情報として、資源グループ占有フラグと、資源グループ保存値有効フラグと、資源値保存領域先頭番地と、最大保存位置と、保存位置配列とが保存される。
【０１９５】
資源制御情報のうち、資源グループ占有フラグは、タスクが資源グループを占有しているか否かを資源グループ毎に示すフラグであり、各資源グループに対応するように１６ビットのフラグとなっている。すなわち、あるタスクが資源グループのいずれかを占有しているとき、当該タスクに対応するタスク情報の資源グループ占有フラグは、当該タスクが占有している資源グループに対応するビットが「真」の値に設定される。なお、占有していない資源グループに対応するビットは「偽」の値に設定される。
【０１９６】
また、資源制御情報のうち、資源グループ保存値有効フラグは、有効な値が資源値保存領域に保存されているか否かを資源グループ毎に示すフラグであり、各資源グループに対応するように１６ビットのフラグとなっている。すなわち、資源値保存領域に資源グループの資源値として有効な値が保存されているとき、当該資源値保存領域に対応したタスク情報の資源グループ保存値有効フラグは、有効な値が保存されている資源グループに対応するビットが「真」の値に設定される。なお、有効な値が保存されていない資源グループに対応するビットは「偽」の値に設定される。
【０１９７】
なお、タスクの実行を終了するときには、資源値の資源値保存領域への保存を行わずに、当該タスクに対応するタスク情報の資源グループ保存値有効フラグの値をすべて「偽」の値に設定する。これにより、無用な資源値の保存を行わなくて済むようになる。
【０１９８】
また、資源制御情報のうち、資源値保存領域先頭番地には、資源値保存領域のメモリ上での先頭番地を示す値が設定される。従来は、図２０に示したように、タスク制御情報領域と資源値保存領域とがメモリ上で一連の領域とされていた。これに対して、本例では、タスク制御情報領域と資源値保存領域とをそれぞれ別々にメモリ上に確保するようにしている。そこで、本例では、資源値保存領域の場所が分かるように、資源制御情報として、資源値保存領域先頭番地を保存しておく。
【０１９９】
また、資源制御情報のうち、最大保存位置には、いくつの資源グループについて資源値保存領域が確保済みであるかを示す値が設定される。すなわち、例えば、図１０に示すように、３つの資源グループについて、それらの資源グループの資源値を保存するための領域が資源値保存領域に確保されている場合、当該資源値保存領域に対応したタスク情報の最大保存位置には「３」が設定される。
【０２００】
また、資源制御情報のうち、保存位置配列には、資源値の保存位置を示す値が資源グループ毎に設定される。例えば、図１０に示すように、資源値保存領域の先頭に資源グループ０の資源値が保存されており、資源値保存領域の２番目に資源グループ８の資源値が保存されており、資源値保存領域の３番目に資源グループ２の資源値が保存されているとする。この場合、当該資源値保存領域に対応したタスク情報の保存位置配列のうち、資源グループ０に対応する値が、資源値保存領域の先頭を示す値「０」に設定され、資源グループ８に対応する値が、資源値保存領域の２番目を示す値「１」に設定され、資源グループ２に対応する値が、資源値保存領域の３番目を示す値「２」に設定される。なお、資源値保存領域に資源値が保存されていない資源グループについては、資源値保存領域に資源値が保存されていないことを示す値「１６」が設定される。
【０２０１】
４−２−２−２  資源値保存領域
資源値保存領域には、当該資源値保存領域に対応するタスクの実行に使用される資源の状態を示す資源値が保存される。ただし、資源値保存領域には、全ての資源の資源値が保存されるとは限らず、資源グループ単位で必要なものだけが保存される。
【０２０２】
なお、従来のタスク切り替え方法では、全てのタスクについて全ての資源の資源値を資源値保存領域に保存するようにしていた。したがって、図１０に示したようなデータ処理装置を使用する場合には、タスク一つあたりの資源値保存領域として、全ての汎用レジスタ及び浮動小数点レジスタの分のメモリ、すなわち１０２４バイトのメモリが必要であった。一方、本例では、資源を資源グループに分割して管理し、資源値保存領域には、資源値を保持すべき資源を含む資源グループについてだけ、資源値を保存するようにしている。したがって、本例では、従来のタスク切り替え方法に比べて、資源値の保存を大幅に削減することができる。
【０２０３】
このように、本例では、資源を資源グループに分割して管理し、資源値保存領域には、資源値を保持すべき資源を含む資源グループについてだけ、資源値を保存するようにする。これにより、タスク切り替えを行ったときにメモリに保存すべきデータ量を大幅に削減することができ、タスク切り替え時のメモリアクセスを大幅に削減することができる。
【０２０４】
なお、資源値保存領域への資源値の格納は資源グループ単位で行われるが、このとき、各資源グループの資源値はタスク情報の資源値保存領域先頭番地が示すメモリ番地から順次格納していく。すなわち、例えば、最初に資源グループ０の資源値を保存することとなった場合には、タスク情報の資源値保存領域先頭番地が示すメモリ番地から、資源グループ０の資源値を順次格納し、次に、資源グループ８の資源値を保存することとなった場合には、資源グループ０の資源値が格納されている領域の直ぐ後に、資源グループ８の資源値を順次格納し、次に、資源グループ２の資源値を保存することとなった場合には、資源グループ８の資源値が格納されている領域の直ぐ後に、資源グループ２の資源値を順次格納する。なお、図１０は、このようにして資源グループ０、資源グループ８、資源グループ２の資源値が順次格納された状態を示している。
【０２０５】
４−２−３  タスク切り替え
つぎに、図９に示したようなデータ処理装置を用いて行われるタスク切り替え方法について詳細に説明する。なお、ここで言うタスク切り替え方法とは、本発明を適用したタスク切り替えの一連の処理全体を指しており、換言すれば、後述するタスク切り替え処理、資源グループ使用可能性検査及び資源グループ占有タスク切り替え処理の３つの処理を示している。
【０２０６】
なお、図９に示したようなデータ処理装置を用いる場合、タスク切り替えは、資源グループ使用許可フラグを使用して行うことも、資源グループ使用許可フラグを使用しないで行うことも可能である。そこで、以下の説明では、資源グループ使用許可フラグを使用してタスク切り替えを行う場合と、資源グループ使用許可フラグを使用しないでタスク切り替えを行う場合とについて、それぞれ説明する。
【０２０７】
４−２−３−１  資源グループ使用許可フラグを使用する場合
まず、図９に示したようなデータ処理装置を用いて行われるタスク切り替えについて、資源グループ使用許可フラグを使用してタスク切り替えを行う場合について説明する。
【０２０８】
４−２−３−１−１  タスク切り替え時のオペレーティングシステムの処理
まず、タスク切り替えを行うときに、オペレーティングシステムによって実行される処理について、図１１のフローチャートを参照して説明する。なお、ここでは、タスクＡからタスクＢへのタスク切り替えを行うものとして説明する。
【０２０９】
タスクＡからタスクＢへのタスク切り替えを行うとき、オペレーティングシステムは、先ず、ステップＳＴ４−１において、タスクＢ（すなわち切り替え先のタスク）に対応したタスク情報が格納されているタスク情報保存領域の先頭番地（以下、先頭番地Ｋと称する。）を計算する。なお、フローチャートでは、先頭番地Ｋのことを単に「Ｋ」と表記している。
【０２１０】
次に、ステップＳＴ４−２において、実行中タスク変数レジスタが示すタスク情報（すなわちタスクＡのタスク情報）の資源グループ占有フラグに、データ処理装置の資源グループ使用許可フラグレジスタの値を書き込む。
【０２１１】
次に、ステップＳＴ４−３において、実行中タスク変数レジスタが示すタスク情報（すなわちタスクＡのタスク情報）の資源グループ保存値有効フラグに、データ処理装置の資源グループ保存値有効フラグレジスタの値を書き込む。
【０２１２】
次に、ステップＳＴ４−４において、実行中タスク変数レジスタに、ステップＳＴ４−１で計算した先頭番地Ｋの値を設定する。
【０２１３】
次に、ステップＳＴ４−５において、実行中タスク変数レジスタが示すタスク情報（すなわちタスクＢのタスク情報）の資源グループ使用許可フラグの値を読み込み、その値を資源グループ使用許可フラグレジスタに設定する。
【０２１４】
次に、ステップＳＴ４−６において、実行中タスク変数レジスタが示すタスク情報（すなわちタスクＢのタスク情報）の資源グループ保存値有効フラグの値を読み込み、その値を資源グループ保存値有効フラグレジスタに設定する。
【０２１５】
最後に、ステップＳＴ４−７において、その他のタスク切り替え処理を行い、全てのタスク切り替え処理が完了したら、タスクＢを起動する。なお、ステップＳＴ４−７での処理は、資源の管理に関する処理以外の処理である。したがって、ステップＳＴ４−７での処理は、従来のオペレーティングシステムと同様で良く、本発明のポイントではないので、詳細な説明は省略する。
【０２１６】
以上のように、タスク切り替えの時点で資源値の制御のためにオペレーティングシステムが行うべき処理は、実行中タスク変数やフラグの書き換えだけであり、非常に僅かである。しかも、資源値の保存や読み込みを行わないので、メモリアクセスも非常に少なくて済み、読み書きともに４バイトずつしか発生しない。従来は、タスク切り替えの時点で全ての資源値について保存と読み込みを行っていたので、タスク切り替え毎に１０２４バイトずつの読み書きが発生していた。すなわち、本例では、従来に比べて、タスク切り替え時のメモリアクセスが１／２５６にまで低減されている。
【０２１７】
このように、タスク切り替えの時点での処理が大幅に削減されるのは、資源値を制御する機構をデータ処理装置に実装させているためである。すなわち、資源値の制御に伴う機構をデータ処理装置に実装させることにより、非常に効率的且つ高速なタスク切り替えを実現することが可能となる。
【０２１８】
４−２−３−１−２  データ処理装置に実装される機構
本例では、上述したように、タスク切り替えの時点においてオペレーティングシステムが行うべき処理は、実行中タスク変数やフラグの書き換えだけであり、タスク切り替えの時点では資源値の保存や読み込みは行わない。その代わり、タスクが資源を使用しようとするときに、当該資源をタスクが使用可能であるかを検査し、必要に応じて資源値の保存や読み込み等の処理を行い、タスクが資源を使用できるようにする。
【０２１９】
そして、本例では、このような処理を実現するために、資源グループ使用可能性検査を行う機構と、資源グループ占有タスク切り替え処理を行う機構と、資源グループ保存処理を行う機構と、資源グループ読み込み処理を行う機構と、資源グループ保存領域確保処理を行う機構とをデータ処理装置にハードウェアとして実装しておく。
【０２２０】
以下、このようにデータ処理装置にハードウェアとして実装された機構によって実行される各処理について説明する。
【０２２１】
４−２−３−１−２−１  資源グループ使用可能性検査
まず、資源グループ使用可能性検査について、図１２のフローチャートを参照して詳細に説明する。
【０２２２】
資源グループ使用可能性検査は、中央処理装置による命令実行と並行して行われるものである。すなわち、資源グループ使用可能性検査は、タスクの命令を実行しようとする毎に実行される。
【０２２３】
資源グループ使用可能性検査では、先ず、ステップＳＴ５−１において、実行しようとしている命令が、機能ブロック遷移命令であるか否かを判断する。そして、機能ブロック遷移命令の場合には、ステップＳＴ５−２及びステップＳＴ５−３の処理を行い、その後、ステップＳＴ５−４へ進む。一方、機能ブロック遷移命令ではない場合には、直ぐに、ステップＳＴ５−４へ進む。
【０２２４】
ステップＳＴ５−２では、資源グループ０〜３及び資源グループ８〜１１に対応する資源グループ使用中フラグレジスタのうち、対応する資源グループ使用許可フラグレジスタの値が「真」のものに「偽」の値を設定する。具体的には、例えば、資源グループ２に対応する資源グループ使用許可フラグレジスタの値が「真」の場合には、資源グループ２に対応する資源グループ使用中フラグレジスタに「偽」の値を設定する。このように資源グループ使用中フラグレジスタの値を設定しておくことにより、実行中のタスクが現在占有使用している資源グループのうち、資源値の保持が不要な資源グループについては、資源値の資源値保存領域への保存が行われなくなる。
【０２２５】
また、ステップＳＴ５−３では、資源グループ０〜３及び資源グループ８〜１１に対応する資源グループ保存値有効フラグレジスタに「偽」の値を設定する。このように資源グループ保存値有効フラグレジスタの値を設定しておくことにより、不要な資源値については、資源値保存領域からの読み込みが行われなくなる。
【０２２６】
以上のように、実行しようとする命令が機能ブロック遷移命令のときには、ステップＳＴ５−２及びステップＳＴ５−３での処理を行うことにより、不要な資源値の保存や読み込みを省略することが可能となり、資源値の保存や読み込みを従来に比べて約５割削減できる。
【０２２７】
ステップＳＴ５−４では、実行しようとしている命令が、資源を使用するか否かを判断する。そして、資源を使用する場合は、ステップＳＴ５−５へ進む。一方、資源を使用しない場合は、資源グループ使用可能性検査を終了し、タスクの命令を実行する。
【０２２８】
ステップＳＴ５−５においては、実行しようとしている命令が使用する資源が属する資源グループを特定する。なお、以下の説明では、ステップＳＴ５−５において特定された資源グループのことを「index番の資源グループ」と称する。すなわち、実行しようとしている命令は、index番の資源グループに属する資源を使用する。
【０２２９】
次に、ステップＳＴ５−６において、資源グループ使用許可フラグレジスタに格納されている資源グループ使用許可フラグの中から、index番の資源グループに対応した資源グループ使用許可フラグを特定する。なお、以下の説明では、ステップＳＴ５−６において特定された資源グループ使用許可フラグのことを「資源グループ使用許可フラグＪ」と称する。また、フローチャートでは、資源グループ使用許可フラグＪのことを単に「Ｊ」と表記している。
【０２３０】
次に、ステップＳＴ５−７において、資源グループ使用中フラグレジスタに格納されている資源グループ使用中フラグの中から、index番の資源グループに対応した資源グループ使用中フラグを特定する。なお、以下の説明では、ステップＳＴ５−７において特定された資源グループ使用中フラグのことを「資源グループ使用中フラグＬ」と称する。また、フローチャートでは、資源グループ使用中フラグＬのことを単に「Ｌ」と表記している。
【０２３１】
次に、ステップＳＴ５−８において、資源グループ保存値有効フラグレジスタに格納されている資源グループ保存値有効フラグの中から、index番の資源グループに対応した資源グループ保存値有効フラグを特定する。なお、以下の説明では、ステップＳＴ５−８において特定された資源グループ保存値有効フラグのことを「資源グループ保存値有効フラグＭ」と称する。また、フローチャートでは、資源グループ保存値有効フラグＭのことを単に「Ｍ」と表記している。
【０２３２】
次に、ステップＳＴ５−９において、資源グループ使用許可フラグＪの値を検査する。そして、資源グループ使用許可フラグＪの値が「偽」の場合には、ステップＳＴ５−１０へ進み、資源グループ使用許可フラグＪの値が「真」の場合には、ステップＳＴ５−１２へ進む。
【０２３３】
ステップＳＴ５−１０では、資源グループ占有タスク変数レジスタに格納されている資源グループ占有タスク変数の中から、index番の資源グループに対応した資源グループ占有タスク変数を特定する。なお、以下の説明では、ステップＳＴ５−１０において特定された資源グループ占有タスク変数のことを「資源グループ占有タスク変数Ｋ」と称する。また、フローチャートでは、資源グループ占有タスク変数Ｋのことを単に「Ｋ」と表記している。
【０２３４】
次に、ステップＳＴ５−１１において、資源グループ占有タスク切り替え処理を行う。なお、資源グループ占有タスク切り替え処理については、後で詳細に説明する。そして、資源グループ占有タスク切り替え処理が終了したら、ステップＳＴ５−１２へ進む。
【０２３５】
ステップＳＴ５−１２では、資源グループ使用許可フラグＪに「真」の値を設定し、資源グループ使用中フラグＬに「真」の値を設定し、資源グループ保存値有効フラグＭに「真」の値を設定する。これにより、現在実行中のタスクはindex番の資源グループに属する資源を使用中であることが、資源グループ使用中フラグレジスタ及び資源グループ保存値有効フラグレジスタに記録されることとなる。そして、ステップＳＴ５−１２での処理が完了したら、ステップＳＴ５−１３へ進む。
【０２３６】
ステップＳＴ５−１３では、実行しようとしている命令が、他の資源グループを使用するか否かを判定する。そして、他の資源グループを使用する場合には、ステップＳＴ５−５へ戻って、当該資源グループについての検査を行う。一方、他の資源グループを使用しない場合には、資源グループ使用可能性検査を終了し、タスクの命令を実行する。
【０２３７】
なお、以上のように資源グループ使用可能性検査を行ったとき、資源グループ占有タスク切り替え処理が起動されるのは、資源グループ使用許可フラグＪの値が「偽」の場合だけであり、資源グループ使用許可フラグＪの値が「真」の場合には、資源グループ占有タスク切り替え処理は起動されない。換言すれば、資源グループ占有タスク切り替え処理が起動されるのは、タスクが実行しようとしている命令が資源を使用しようとしたが、当該資源の使用が許可されていない場合である。
【０２３８】
４−２−３−１−２−２  資源グループ占有タスク切り替え処理
つぎに、資源グループ占有タスク切り替え処理について、図１３のフローチャートを参照して詳細に説明する。なお、資源グループ占有タスク切り替え処理は、上述したように、資源グループ使用可能性検査のステップＳＴ５−１１において呼び出されて起動される処理である。
【０２３９】
資源グループ占有タスク切り替え処理では、先ず、ステップＳＴ６−１において、資源グループ使用中フラグＬの値を検査する。そして、資源グループ使用中フラグＬの値が「真」の場合には、ステップＳＴ６−２へ進み、資源グループ使用中フラグＬの値が「偽」の場合には、ステップＳＴ６−３へ進む。
【０２４０】
ステップＳＴ６−２では、資源グループ保存処理を行う。なお、資源グループ保存処理については、後で詳細に説明する。そして、資源グループ保存処理が終了したら、ステップＳＴ６−３へ進む。
【０２４１】
ステップＳＴ６−３では、資源グループ占有タスク変数Ｋに、実行中タスク変数の値を設定する。
【０２４２】
次に、ステップＳＴ６−４において、資源グループ保存値有効フラグＭの値を検査する。そして、資源グループ保存値有効フラグＭの値が「真」の場合には、ステップＳＴ６−５へ進み、資源グループ保存値有効フラグＭの値が「偽」の場合には、ステップＳＴ６−６へ進む。
【０２４３】
ステップＳＴ６−５では、資源グループ読み込み処理を行う。なお、資源グループ読み込み処理については、後で詳細に説明する。そして、資源グループ読み込み処理が終了したら、資源グループ占有タスク切り替え処理を終了する。
【０２４４】
また、ステップＳＴ６−６では、資源グループ保存領域確保処理を行う。なお、資源グループ保存領域確保処理については、後で詳細に説明する。そして、資源グループ保存領域確保処理が終了したら、資源グループ占有タスク切り替え処理を終了する。
【０２４５】
４−２−３−１−２−３  資源グループ保存処理
つぎに、資源グループ保存処理について、図１４のフローチャートを参照して詳細に説明する。なお、資源グループ保存処理は、上述したように、資源グループ占有タスク切り替え処理のステップＳＴ６−２において呼び出されて起動される処理である。
【０２４６】
資源グループ保存処理では、先ず、ステップＳＴ７−１において、資源グループ占有タスク変数Ｋの示すタスク情報の保存位置配列のうち、index番の資源グループに対応した保存位置配列の値を読み出す。なお、以下の説明では、ステップＳＴ７−１において読み出した保存位置配列の値を「保存位置配列値Ｐ１」と称する。また、フローチャートでは、保存位置配列値Ｐ１のことを単に「Ｐ１」と表記している。なお、保存位置配列値Ｐ１は、index番の資源グループの資源値が、資源値保存領域中の何番目のブロックに保存されるかを示している。
【０２４７】
次に、ステップＳＴ７−２において、資源グループ占有タスク変数Ｋの示すタスク情報の資源値保存領域先頭番地の値を読み出し、その値に保存位置配列値Ｐ１を６４倍した値を加えた値を計算する。なお、以下の説明では、ステップＳＴ７−２において計算された値を「保存番地Ｑ１」と称する。また、フローチャートでは、保存番地Ｑ１のことを単に「Ｑ１」と表記している。なお、保存番地Ｑ１は、index番の資源グループの資源値を保存する領域の先頭のメモリ番地を示している。
【０２４８】
次に、ステップＳＴ７−３において、index番の資源グループの資源値を、保存番地Ｑ１を先頭番地とする領域に保存する。
【０２４９】
以上で、資源グループ保存処理が完了し、index番の資源グループの資源値が、資源値保存領域の所定の位置に保存される。
【０２５０】
４−２−３−１−２−４  資源グループ読み込み処理
つぎに、資源グループ読み込み処理について、図１５のフローチャートを参照して詳細に説明する。なお、資源グループ読み込み処理は、上述したように、資源グループ占有タスク切り替え処理のステップＳＴ６−５において呼び出されて起動される処理である。
【０２５１】
資源グループ読み込み処理では、先ず、ステップＳＴ８−１において、実行中タスク変数の示すタスク情報の保存位置配列のうち、index番の資源グループに対応した保存位置配列の値を読み出す。なお、以下の説明では、ステップＳＴ８−１において読み出した保存位置配列の値を「保存位置配列値Ｐ２」と称する。また、フローチャートでは、保存位置配列値Ｐ２のことを単に「Ｐ２」と表記している。なお、保存位置配列値Ｐ２は、index番の資源グループの資源値が、資源値保存領域中の何番目のブロックに保存されているかを示している。
【０２５２】
次に、ステップＳＴ８−２において、実行中タスク変数の示すタスク情報の資源値保存領域先頭番地の値を読み出し、その値に保存位置配列値Ｐ２を６４倍した値を加えた値を計算する。なお、以下の説明では、ステップＳＴ８−２において計算された値を「保存番地Ｑ２」と称する。また、フローチャートでは、保存番地Ｑ２のことを単に「Ｑ２」と表記している。なお、保存番地Ｑ２は、index番の資源グループの資源値が保存されている領域の先頭のメモリ番地を示している。
【０２５３】
次に、ステップＳＴ８−３において、index番の資源グループの資源値を、保存番地Ｑ２を先頭番地とする領域から読み込む。
【０２５４】
以上で、資源グループ読み込み処理が完了し、index番の資源グループの資源値が、資源値保存領域から読み込まれる。
【０２５５】
４−２−３−１−２−５  資源グループ保存領域確保処理
つぎに、資源グループ保存領域確保処理について、図１６のフローチャートを参照して詳細に説明する。なお、資源グループ保存領域確保処理は、上述したように、資源グループ占有タスク切り替え処理のステップＳＴ６−６において呼び出されて起動される処理である。
【０２５６】
資源グループ保存領域確保処理では、先ず、ステップＳＴ９−１において、実行中タスク変数の示すタスク情報の保存位置配列のうち、index番の資源グループに対応した保存位置配列の値を読み出す。なお、以下の説明では、ステップＳＴ９−１において読み出した保存位置配列の値を「保存位置配列値Ｐ３」と称する。また、フローチャートでは、保存位置配列値Ｐ３のことを単に「Ｐ３」と表記している。
【０２５７】
次に、ステップＳＴ９−２において、実行中タスク変数の示すタスク情報の最大保存位置の値を読み出す。なお、以下の説明では、ステップＳＴ９−２において読み出し最大保存位置の値を「最大保存位置Ｒ」と称する。また、フローチャートでは、最大保存位置Ｒのことを単に「Ｒ」と表記している。
【０２５８】
次に、ステップＳＴ９−３において、保存位置配列値Ｐ３と最大保存位置Ｒとを比較する。このとき、保存位置配列値Ｐ３が最大保存位置Ｒよりも小さくなるのは、index番の資源グループの資源値を保存する領域が、資源値保存領域に既に確保されている場合である。したがって、保存位置配列値Ｐ３が最大保存位置Ｒよりも小さい場合には、資源グループ保存領域確保処理を終了する。
【０２５９】
一方、ステップＳＴ９−３において、保存位置配列値Ｐ３が最大保存位置Ｒ以上となるのは、index番の資源グループの資源値を保存する領域が、資源値保存領域に未だ確保されていない場合である。したがって、保存位置配列値Ｐ３が最大保存位置Ｒ以上となっている場合には、index番の資源グループの資源値を保存する領域を確保するため、資源グループ保存領域確保処理を継続し、ステップＳＴ９−４へ進む。
【０２６０】
ステップＳＴ９−４では、実行中タスク変数の示すタスク情報の資源値保存領域先頭番地の値を読み出し、その値に最大保存位置Ｒに１を加算した値を６４倍した値を加えた値を計算する。なお、以下の説明では、ステップＳＴ９−６において計算された値を「保存番地Ｑ３」と称する。すなわち、実行中タスク変数の示すタスク情報の資源値保存領域先頭番地の値をＡ、最大保存位置ＲをＲとしたとき、保存番地Ｑ３＝Ａ＋｛（Ｒ＋１）×６４｝である。なお、フローチャートでは、保存番地Ｑ３のことを単に「Ｑ３」と表記している。
【０２６１】
次に、ステップＳＴ９−５において、保存番地Ｑ３が、タスクがスタックとして使用しているメモリ領域（以下、スタック変数領域と称する。）の先頭よりも手前であるか否かを判断する。このとき、保存番地Ｑ３がスタック変数領域の先頭よりも手前でないと判断されるのは、未使用領域が不足し、index番の資源グループの資源値を保存する領域を確保できない場合である。したがって、保存番地Ｑ３がスタック変数領域の先頭よりも手前でない場合には、スタック領域不足例外処理を起動する。なお、スタック領域不足例外処理は、未使用領域の不足に対処するための例外処理であるが、未使用領域の不足に対する対処の仕方には様々な手法が考えられるし、このような例外処理は本発明のポイントではないので、ここでは詳細な説明は省略する。
【０２６２】
一方、ステップＳＴ９−５において、保存番地Ｑ３がスタック変数領域の先頭よりも手前であると判断されるのは、未使用領域が十分にあり、index番の資源グループの資源値を保存する領域を確保できる場合である。したがって、保存番地Ｑ３がスタック変数領域の先頭よりも手前である場合には、index番の資源グループの資源値を保存する領域を確保するため、資源グループ保存領域確保処理を継続し、ステップＳＴ９−６へ進む。
【０２６３】
ステップＳＴ９−６では、実行中タスク変数の示すタスク情報の保存位置配列のうち、index番の資源グループに対応した保存位置配列に、実行中タスク変数の示すタスク情報の最大保存位置の値（すなわち最大保存位置Ｒ）を書き込む。
【０２６４】
次に、ステップＳＴ９−７において、実行中タスク変数の示すタスク情報の最大保存位置に、最大保存位置Ｒに１を加算した値を書き込む。換言すれば、ステップＳＴ９−７では、実行中タスク変数の示すタスク情報の最大保存位置の値を１だけ大きくする。
【０２６５】
以上で、資源グループ保存領域確保処理が完了し、index番の資源グループの資源値を保存する領域が確保される。
【０２６６】
４−２−３−２  資源グループ使用許可フラグを使用しない場合
つぎに、図９に示したようなデータ処理装置を用いて行われるタスク切り替えについて、資源グループ使用許可フラグを使用しないでタスク切り替えを行う場合について説明する。
【０２６７】
４−２−３−２−１  タスク切り替え時のオペレーティングシステムの処理
まず、タスク切り替えを行うときに、オペレーティングシステムによって実行される処理について、図１７のフローチャートを参照して説明する。なお、ここでは、タスクＡからタスクＢへのタスク切り替えを行うものとして説明する。
【０２６８】
タスクＡからタスクＢへのタスク切り替えを行うとき、オペレーティングシステムは、先ず、ステップＳＴ１０−１において、タスクＢ（すなわち切り替え先のタスク）に対応したタスク情報が格納されているタスク情報保存領域の先頭番地（以下、先頭番地Ｋと称する。）を計算する。なお、フローチャートでは、先頭番地Ｋのことを単に「Ｋ」と表記している。
【０２６９】
次に、ステップＳＴ１０−２において、実行中タスク変数の示すタスク情報（すなわちタスクＡのタスク情報）の資源グループ保存値有効フラグに、資源グループ保存値有効フラグレジスタの値を書き込む。
【０２７０】
次に、ステップＳＴ１０−３において、実行中タスク変数レジスタに、ステップＳＴ１０−１で計算した先頭番地Ｋの値を設定する。
【０２７１】
次に、ステップＳＴ１０−４において、実行中タスク変数の示すタスク情報（すなわちタスクＢのタスク情報）の資源グループ保存値有効フラグの値を読み込み、その値を資源グループ保存値有効フラグレジスタに設定する。
【０２７２】
最後に、ステップＳＴ１０−５において、その他のタスク切り替え処理を行い、全てのタスク切り替え処理が完了したら、タスクＢを起動する。なお、ステップＳＴ１０−５での処理は、資源の管理に関する処理以外の処理である。したがって、ステップＳＴ１０−５での処理は、従来のオペレーティングシステムと同様で良く、本発明のポイントではないので、詳細な説明は省略する。
【０２７３】
以上のように、タスク切り替えの時点で資源値の制御のためにオペレーティングシステムが行うべき処理は、実行中タスク変数やフラグの書き換えだけであり、非常に僅かである。しかも、資源値の保存や読み込みを行わないので、メモリアクセスも非常に少なくて済み、読み書きともに２バイトずつしか発生しない。従来は、タスク切り替えの時点で全ての資源値について保存と読み込みを行っていたので、タスク切り替え毎に１０２４バイトずつの読み書きが発生していた。すなわち、本例では、従来に比べて、タスク切り替え時のメモリアクセスが１／５１２にまで低減されている。
【０２７４】
このように、タスク切り替えの時点での処理が大幅に削減されるのは、資源値を制御する機構をデータ処理装置に実装させているためである。すなわち、資源値の制御に伴う機構をデータ処理装置に実装させることにより、非常に効率的且つ高速なタスク切り替えを実現することが可能となる。
【０２７５】
４−２−３−２−２  データ処理装置に実装される機構
本例では、上述したように、タスク切り替えの時点においてオペレーティングシステムが行うべき処理は、実行中タスク変数やフラグの書き換えだけであり、タスク切り替えの時点では資源値の保存や読み込みは行わない。その代わり、タスクが資源を使用しようとするときに、当該資源をタスクが使用可能であるかを検査し、必要に応じて資源値の保存や読み込み等の処理を行い、タスクが資源を使用できるようにする。
【０２７６】
そして、本例では、このような処理を実現するために、資源グループ使用可能性検査を行う機構と、資源グループ占有タスク切り替え処理を行う機構と、資源グループ保存処理を行う機構と、資源グループ読み込み処理を行う機構と、資源グループ保存領域確保処理を行う機構とをデータ処理装置にハードウェアとして実装しておく。
【０２７７】
以下、このようにデータ処理装置にハードウェアとして実装された機構によって実行される各処理について説明する。ただし、これらの処理のうち、資源グループ保存処理、資源グループ読み込み処理及び資源グループ保存領域確保処理については、資源グループ使用許可フラグを使用してタスク切り替えを行う場合と同様なので説明は省略する。
【０２７８】
４−２−３−２−２−１  資源グループ使用可能性検査
まず、資源グループ使用可能性検査について、図１８のフローチャートを参照して詳細に説明する。
【０２７９】
資源グループ使用可能性検査は、中央処理装置による命令実行と並行して行われるものである。すなわち、資源グループ使用可能性検査は、タスクの命令を実行しようとする毎に実行される。
【０２８０】
資源グループ使用可能性検査では、先ず、ステップＳＴ１１−１において、実行しようとしている命令が、機能ブロック遷移命令であるか否かを判断する。そして、機能ブロック遷移命令の場合には、ステップＳＴ１１−２の処理を行い、その後、ステップＳＴ１１−３へ進む。一方、機能ブロック遷移命令ではない場合には、直ぐに、ステップＳＴ１１−３へ進む。
【０２８１】
ステップＳＴ１１−２では、資源グループ０〜３及び資源グループ８〜１１に対応する資源グループ保存値有効フラグレジスタに「偽」の値を設定する。このように資源グループ保存値有効フラグレジスタの値を設定しておくことにより、不要な資源値については、資源値保存領域からの読み込みが行われなくなる。
【０２８２】
以上のように、実行しようとする命令が機能ブロック遷移命令のときには、ステップＳＴ１１−２での処理を行うことにより、不要な資源値の保存や読み込みを省略することが可能となり、資源値の保存や読み込みを従来に比べて約５割削減できる。
【０２８３】
ステップＳＴ１１−３では、実行しようとしている命令が、資源を使用するか否かを判断する。そして、資源を使用する場合は、ステップＳＴ１１−４へ進む。一方、資源を使用しない場合は、資源グループ使用可能性検査を終了し、タスクの命令を実行する。
【０２８４】
ステップＳＴ１１−４においては、実行しようとしている命令が使用する資源が属する資源グループを特定する。なお、以下の説明では、ステップＳＴ１１−４において特定された資源グループのことを「index番の資源グループ」と称する。すなわち、実行しようとしている命令は、index番の資源グループに属する資源を使用する。
【０２８５】
次に、ステップＳＴ１１−５において、資源グループ占有タスク変数レジスタに格納されている資源グループ占有タスク変数の中から、index番の資源グループに対応した資源グループ占有タスク変数を特定する。なお、以下の説明では、ステップＳＴ１１−５において特定された資源グループ占有タスク変数のことを「資源グループ占有タスク変数Ｋ」と称する。また、フローチャートでは、資源グループ占有タスク変数Ｋのことを単に「Ｋ」と表記している。
【０２８６】
次に、ステップＳＴ１１−６において、資源グループ保存値有効フラグレジスタに格納されている資源グループ保存値有効フラグの中から、index番の資源グループに対応した資源グループ保存値有効フラグを特定する。なお、以下の説明では、ステップＳＴ１１−６において特定された資源グループ保存値有効フラグのことを「資源グループ保存値有効フラグＭ」と称する。また、フローチャートでは、資源グループ保存値有効フラグＭのことを単に「Ｍ」と表記している。
【０２８７】
次に、ステップＳＴ１１−７において、実行中タスク変数と資源グループ占有タスク変数Ｋとを比較する。なお、フローチャートでは実行中タスク変数のことを「Ｄ」と表記している。そして、実行中タスク変数の値と、資源グループ占有タスク変数Ｋの値とが等しくない場合には、ステップＳＴ１１−８へ進み、等しい場合には、ステップＳＴ１１−９へ進む。
【０２８８】
ステップＳＴ１１−８では、資源グループ占有タスク切り替え処理を行う。なお、資源グループ占有タスク切り替え処理については、後で詳細に説明する。そして、資源グループ占有タスク切り替え処理が終了したら、ステップＳＴ１１−９へ進む。
【０２８９】
ステップＳＴ１１−９では、資源グループ保存値有効フラグＭに「真」の値を設定する。これにより、index番の資源グループの資源値を保持すべき状態になったことが、資源グループ保存値有効フラグレジスタに記録されることとなる。そして、ステップＳＴ１１−９での処理が完了したら、ステップＳＴ１１−１０へ進む。
【０２９０】
ステップＳＴ１１−１０では、実行しようとしている命令が、他の資源グループを使用するか否かを判定する。そして、他の資源グループを使用する場合には、ステップＳＴ１１−４へ戻って、当該資源グループについての検査を行う。一方、他の資源グループを使用しない場合には、資源グループ使用可能性検査を終了し、タスクの命令を実行する。
【０２９１】
なお、以上のように資源グループ使用可能性検査を行ったとき、資源グループ占有タスク切り替え処理が起動されるのは、実行中タスク変数の値と資源グループ占有タスク変数Ｋの値とが等しくない場合だけであり、実行中タスク変数の値と資源グループ占有タスク変数Ｋの値とが等しい場合には、資源グループ占有タスク切り替え処理は起動されない。換言すれば、資源グループ占有タスク切り替え処理が起動されるのは、タスクが実行しようとしている命令が資源を使用しようとしたが、当該資源をタスクが占有していない場合である。
【０２９２】
４−２−３−２−２−２  資源グループ占有タスク切り替え処理
つぎに、資源グループ占有タスク切り替え処理について、図１９のフローチャートを参照して詳細に説明する。なお、資源グループ占有タスク切り替え処理は、上述したように、資源グループ使用可能性検査のステップＳＴ１１−９において呼び出されて起動される処理である。
【０２９３】
資源グループ占有タスク切り替え処理では、先ず、ステップＳＴ１２−１において、資源グループ占有タスク変数Ｋの示すタスク情報の資源グループ保存値有効フラグのうち、index番の資源グループに対応した資源グループ保存値有効フラグの値を読み出す。なお、以下の説明では、ステップＳＴ１２−１において読み出された資源グループ保存値有効フラグの値を「資源グループ保存値有効フラグＬ」と称する。また、フローチャートでは、資源グループ保存値有効フラグＬのことを単に「Ｌ」と表記している。
【０２９４】
次に、ステップＳＴ１２−２において、資源グループ保存値有効フラグＬの値を検査する。そして、資源グループ保存値有効フラグＬの値が「真」の場合には、ステップＳＴ１２−３へ進み、資源グループ保存値有効フラグＬの値が「偽」の場合には、ステップＳＴ１２−４へ進む。
【０２９５】
ステップＳＴ１２−２では、図１４のフローチャートに従って、資源グループ保存処理を行う。そして、資源グループ保存処理が終了したら、ステップＳＴ１２−４へ進む。
【０２９６】
ステップＳＴ１２−４では、資源グループ占有タスク変数Ｋに、実行中タスク変数の値を設定する。
【０２９７】
次に、ステップＳＴ１２−５において、資源グループ保存値有効フラグＭの値を検査する。そして、資源グループ保存値有効フラグＭの値が「真」の場合には、ステップＳＴ１２−６へ進み、資源グループ保存値有効フラグＭの値が「偽」の場合には、ステップＳＴ１２−７へ進む。
【０２９８】
ステップＳＴ１２−６では、図１５のフローチャートに従って、資源グループ読み込み処理を行う。そして、資源グループ読み込み処理が終了したら、資源グループ占有タスク切り替え処理を終了する。
【０２９９】
また、ステップＳＴ１２−７では、図１６のフローチャートに従って、資源グループ保存領域確保処理を行う。そして、資源グループ保存領域確保処理が終了したら、資源グループ占有タスク切り替え処理を終了する。
【０３００】
４−２−３−３  まとめ
以上詳細に説明したように、資源グループ使用許可フラグを使用した場合も、資源グループ使用許可フラグを使用しない場合も、タスク切り替えの時点で資源値の制御のためにオペレーティングシステムが行うべき処理は、実行中タスク変数やフラグの書き換えだけであり、非常に僅かである。しかも、タスク切り替えの時点では、資源値の保存や読み込みを行わないので、タスク切り替え時のメモリアクセスも非常に少なくて済む。すなわち、資源値の制御に伴う機構をデータ処理装置に実装させて、資源値の保存や読み込みをオペレーティングシステムによることなく、ハードウェアでの処理によって実行するようにすることで、タスク切り替えに伴う資源値の保存や読み込みを非常に効率的且つ高速に行うことが可能となる。
【０３０１】
しかも、以上のようにタスク切り替えを行った場合、資源値の保存や読み込みは、単に先送りされた訳ではなく、起動されるタスクで使用しない資源グループについては、保存も読み込みも完全に省略される。また、使用した資源グループについても、他のタスクが使用しなければ、そのまま値が保持され、保存も読み込みも完全に省略される。また、タスク実行中に機能ブロック遷移命令を実行する都度、破壊しても構わない資源グループについては、資源グループ使用中フラグレジスタや資源グループ保存値有効フラグレジスタを更新し、資源値の保存を行わないようにしている。このように、上記タスク切り替え処理では、資源値の保存や読み込みを極力少なくし、本当に必要なものについてだけ資源値の保存や読み込みを行うようにしており、資源値の保存や読み込みが非常に効率的に行われる。
【０３０２】
なお、従来のタスク切り替え方法では、メモリへの読み書きがタスク切り替え時に集中し、それがバスのボトルネックの原因となるようなこともあったが、上述のようにタスク切り替えを行った場合には、資源値の保存や読み込みは散発的に行われることとなるため、バスのボトルネックも生じ難い。
【０３０３】
しかも、上述のようにタスク切り替えを行った場合には、タスク切り替え時の資源値の保存や読み込みが非常に少なく、タスク切り替えが非常に高速に行われるので、割り込み処理等のように高速な起動が必要とされる処理も、タスク切り替えの機構で実現することが可能となる。換言すれば、上述のようにタスク切り替えを行った場合には、割り込み処理をタスク切り替えの機構で行うようにしても、割り込み処理の起動や終了時のオーバーヘッドが非常に少なくて済む。
【０３０４】
５．本発明のその他の実施の形態
本発明は、上述した例に限定されるものではなく、様々な変形が可能である。
【０３０５】
例えば、中央処理装置のレジスタの数や、浮動小数点演算装置のレジスタの数などは、特に限定されるものではなく、任意の数で構わない。更に、データ処理装置も、中央処理装置及び浮動小数点演算装置からなるものでなくてもよく、例えば、中央処理装置だけであっても良いし、或いは、浮動小数点演算装置の他にも、三次元座標変換計算を行う装置や、画像データの圧縮伸長処理を高速に行うための並列演算を行う装置など、様々なコプロセッサを備えていても良い。
【０３０６】
また、タスクが使用可能な資源を資源グループに分割して管理するにあたって、その分割数も特に限定されるものではなく、自由に選ぶことができる。ただし、資源の分割の仕方によってタスク切り替え処理の効率は変化するので、資源を資源グループに分割して管理するにあたっては、処理対象となるタスクの種類やデータ処理装置の構成等に応じて、タスク切り替え処理がより効率良く行われるように、資源の分割を最適化したほうが好ましいことは言うまでもない。また、上述したように、中央処理装置がキャッシュメモリを備えているときには、資源を資源グループに分割する際に、各資源グループに対応した各資源値保存領域のサイズが、キャッシュメモリのキャッシュラインサイズの整数倍になるように分割したほうが好ましい。
【０３０７】
また、本発明の第２の実施の形態では、タスク切り替え処理以外の殆どの処理を、データ処理装置にハードウェア的な機構として実装したが、要求される半導体回路の規模等に応じて、殆どの部分を任意に選んでソフトウェアによる実装に置き換えることも可能である。また、例えば、資源グループ占有タスク切り替え処理についてはソフトウェアで行うが、資源グループの保存や読み込みについては、それを短い命令数で実行できる特別の命令を用意して、高速な処理を可能にするなど、部分的に機能を切り出してハードウェア化するようなことも可能である。
【０３０８】
また、本発明の第２の実施の形態では、実行中タスク変数に、実行中のタスクに対応したタスク情報保存領域の先頭番地を設定したが、実行中タスク変数には、タスク情報領域の中の資源制御情報領域の先頭番地を設定するようにしても良い。タスク情報領域の中の資源制御情報領域の先頭番地を実行中タスク変数に設定するようにした場合は、タスク情報のうちオペレーティングシステムに依存する部分（すなわちタスク制御情報）のサイズに左右されることなく、実行中タスク変数に基づいて、資源制御情報領域に直接アクセスすることが可能となる。換言すれば、タスク情報の中の資源制御情報領域の先頭番地を実行中タスク変数に設定するようにした場合は、オペレーティングシステムの実装に左右されずに、ハードウェアによる処理だけで、資源の制御に必要なタスク情報を操作することが可能となる。
【０３０９】
【発明の効果】
以上詳細に説明したように、本発明によれば、タスク切り替えの際に発生するメモリアクセスを分散することができ、しかも、不要なメモリアクセスを大幅に削減することができ、さらに、資源値を保持するための大量のハードウェア資源を必要としない。したがって、本発明によれば、以下のような効果が得られる。
【０３１０】
（１）多くのレジスタを有する中央処理装置等において、タスク切り替えの時間を大幅に短縮することができる。
【０３１１】
（２）ハードウェアを機能拡張し、例えば浮動小数点演算装置を追加したような場合、追加機能を使用しないタスクについては、タスク切り替えの時間に影響が出なくなる。
【０３１２】
（３）使用可能な資源量が増加しても、各タスクが使用した資源グループについてのみ、資源値を保存する領域を確保すればよく、メモリの使用量を大幅に削減できる。
【０３１３】
（４）切り替わるタスクの数が増えても、効果が下がるようなことはなく、タスク切り替えを高速に行うことができる。
【０３１４】
（５）中央処理装置等の資源量に対して、わずかな追加ハードウェアのみで実現可能であり、レジスタファイル等の機構によりタスク切り替えの高速化を図るような場合に比べて、半導体面積を大幅に削減できる。
【０３１５】
（６）中央処理装置等の資源量が多くなっても、本発明のために必要な追加ハードウェアはわずかであり、しかも、高速に切り替え可能なタスク数にも制限がない。
【０３１６】
（７）高速に起動したいタスクは、使用する資源を限定することで、タスク切り替えを高速に行うことができる。そのため、割り込み処理等のように高速な起動が必要な処理についても、タスク切り替えの機構で行うことが可能となる。
【０３１７】
（８）タスク切り替え完了までのメモリアクセス量が大幅に減少するため、切り替え先のタスクの起動時間を特定することが容易となる。
【０３１８】
（９）データ処理装置が資源の使用禁止機能（例えば浮動小数点演算装置使用許可フラグ）を予め備えている場合には、オペレーティングシステムの変更だけで、タスク切り替えを高速化することができる。
【０３１９】
（１０）資源グループ使用可能性検査や資源グループ占有タスク切り替え処理を行う機構を、データ処理装置にハードウェアとして実装した場合には、タスク切り替えに必要な命令ステップを削減して、タスク切り替え時の処理を非常に高速化することができる。しかも、タスク切り替え後に資源を初めて使用する際に発生する占有タスク切り替え処理も非常に高速化することができる。
【０３２０】
（１１）資源値保存領域がキャッシュメモリのキャッシュラインサイズの整数倍となるように資源グループのサイズを設定し、また、資源値保存領域の先頭をキャッシュラインの境界に整合させることによって、資源を資源グループに分割しても、資源値保存領域の前後端での余計なメモリアクセスが発生しないようにすることができ、メモリアクセスを効率良く行うことが可能となる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態で使用するデータ処理装置のレジスタの構成を示す図である。
【図２】本発明の第１の実施の形態における資源グループとメモリ上の変数とを説明するための図である。
【図３】本発明を適用して複数のタスクを並行して実行するときの状態を示す図である。
【図４】本発明の第１及び第２の実施の形態におけるタスク情報の配列を示す図である。
【図５】本発明の第１の実施の形態におけるタスク情報保存領域及び資源値保存領域を示す図である。
【図６】本発明の第１の実施の形態におけるタスク切り替え処理のフローチャートである。
【図７】本発明の第１の実施の形態における資源グループ使用可能性検査のフローチャートである。
【図８】本発明の第１の実施の形態における資源グループ占有タスク切り替え処理のフローチャートである。
【図９】本発明の第２の実施の形態におけるデータ処理装置のレジスタの構成を示す図である。
【図１０】本発明の第２の実施の形態におけるタスク情報保存領域及び資源値保存領域を示す図である。
【図１１】本発明の第２の実施の形態において、資源グループ使用許可フラグを使用してタスク切り替えを行うときのタスク切り替え処理のフローチャートである。
【図１２】本発明の第２の実施の形態において、資源グループ使用許可フラグを使用してタスク切り替えを行うときの資源グループ使用可能性検査のフローチャートである。
【図１３】本発明の第２の実施の形態において、資源グループ使用許可フラグを使用してタスク切り替えを行うときの資源グループ占有タスク切り替え処理のフローチャートである。
【図１４】本発明の第２の実施の形態における資源グループ保存処理のフローチャートである。
【図１５】本発明の第２の実施の形態における資源グループ読み込み処理のフローチャートである。
【図１６】本発明の第２の実施の形態における資源グループ保存領域確保処理のフローチャートである。
【図１７】本発明の第２の実施の形態において、資源グループ使用許可フラグを使用しないでタスク切り替えを行うときのタスク切り替え処理のフローチャートである。
【図１８】本発明の第２の実施の形態において、資源グループ使用許可フラグを使用しないでタスク切り替えを行うときの資源グループ使用可能性検査のフローチャートである。
【図１９】本発明の第２の実施の形態において、資源グループ使用許可フラグを使用しないでタスク切り替えを行うときの資源グループ占有タスク切り替え処理のフローチャートである。
【図２０】複数のタスクを並行して実行するときの従来の状態を示す図である。
【図２１】従来の中央処理装置のタスク切り替え高速化機構を説明するための図であり、（ａ）はレジスタファイルを示す図、（ｂ）はレジスタウィンドウを示す図である。
【図１】
0003991443.tif 000002
【図２】
0003991443.tif 000003
【図３】
0003991443.tif 000004
【図４】
0003991443.tif 000005
【図５】
0003991443.tif 000006
【図６】
0003991443.tif 000007
【図７】
0003991443.tif 000008
【図８】
0003991443.tif 000009
【図９】
0003991443.tif 000010
【図１０】
0003991443.tif 000011
【図１１】
0003991443.tif 000012
【図１２】
0003991443.tif 000013
【図１３】
0003991443.tif 000014
【図１４】
0003991443.tif 000015
【図１５】
0003991443.tif 000016
【図１６】
0003991443.tif 000017
【図１７】
0003991443.tif 000018
【図１８】
0003991443.tif 000019
【図１９】
0003991443.tif 000020
【図２０】
0003991443.tif 000021
【図２１】
0003991443.tif 000022