(57)【要約】      （修正有）【課題】制約タスクを強制終了可能とする装置、方法とプログラムの提供。【解決手段】タスクを起動する際に、同じ優先順位のタスク間でタスク・スタック領域を共有する制約タスクを有し、優先順位ごとの前記タスク・スタック領域の先頭アドレスを保管するスタック・ポインタ・テーブル５１を有し、前記制約タスクを起動したときに、システム・スタック領域に、前記タスク・スタック領域を確保し、制約タスクの優先順位に対応した前記スタック・ポインタ・テーブル内の領域に、タスク・スタックのアドレスを登録し、その後、前記制約タスクを起動し、制約タスク処理を終了するときに、終了対象の制約タスクの優先順位に対応した前記スタック・ポインタ・テーブル内の領域から、終了対象の制約タスクよりも優先順位の低い制約タスクのタスク・スタックのアドレスを読み出し、前記タスク・スタックのアドレスをスタック・ポインタに格納する。【選択図】図２
2006146329.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムを含む情報処理装置において、
タスクに対応するタスク・スタック領域を後入れ先出し（Last In First Out）方式で記憶管理するスタック領域を備えるとともに、前記スタック領域に格納されるタスク・スタック領域のアドレス情報を保管する手段を備え、
少なくとも１つのタスク・スタック領域が上積みされている状態のタスク・スタック領域（「第１のタスク・スタック領域」という）に対応するタスクの終了処理により前記第１のタスク・スタック領域が解放されて空き領域とされ、つづいて、前記空き領域上に積まれているタスク・スタック領域のそれぞれに対応するタスクの終了により前記空き領域上に積まれているタスク・スタック領域が解放された場合に、前記保管されているタスク・スタック領域のアドレス情報に基づき、前記スタック領域のスタック・ポインタが、解放された前記第１のタスク・スタック領域に対応する前記空き領域とその直下の領域との境界を指すように制御する手段を備えてなる、ことを特徴とする情報処理装置。
【請求項２】
前記タスクの終了時、前記タスクに対応して保管しているタスク・スタック領域のアドレス情報を削除する、ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記タスク・スタック領域の先頭アドレスを保持するスタック・ポインタテーブルを備えている、ことを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記タスクを起動したときに、前記スタック領域に、前記タスク・スタック領域を確保し、起動するタスクの優先順位に対応した前記スタック・ポインタテーブル内の領域に、タスク・スタック領域の先頭アドレスを登録し、その後、前記タスクを起動するように制御する手段を備えている、ことを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記タスクを終了するときに、終了対象のタスクの優先順位に対応した前記スタック・ポインタテーブルから、前記終了対象のタスクよりも優先順位の低いタスクのタスク・スタック領域の先頭アドレスを読み出し、前記タスク・スタック領域の先頭アドレスをスタックポインタに格納する手段を備えている、ことを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記第１のタスク・スタック領域に対応する前記タスクは、同じ優先順位のタスク間でタスク・スタック領域を共有する制約タスクである、ことを特徴とする請求項１乃至５のいずれか一に記載の情報処理装置。
【請求項７】
優先度が同じである複数のタスクについて前記複数のタスクの中で一番多くスタック領域を使用するタスクの分の領域を確保し、前記複数のタスク同士で、スタック領域を共有する制約タスクに対して、前記制約タスクを起動するにあたり、タスク・スタック領域を、システム・スタック領域に確保する手段と、
優先度と、前記タスク・スタック領域のアドレス情報を含むスタック・ポインタ情報を格納するスタック・ポインタテーブルに、前記制約タスクのスタック・ポインタ情報を登録する手段と、
前記確保したタスク・スタック領域を用いて前記制約タスクを起動する手段と、
を備えている、ことを特徴とする情報処理装置。
【請求項８】
起動された前記制約タスクを終了するコマンドを受け、前記制約タスクを終了させ、前記スタック・ポインタテーブルより、前記制約タスクに関して登録された前記スタック・ポインタ情報を削除する手段を備えている、ことを特徴とする請求項７記載の情報処理装置。
【請求項９】
前記制約タスクに割当てられたタスク・スタック領域を解放する手段を備えている、ことを特徴とする請求項７記載の情報処理装置。
【請求項１０】
実行中の制約タスクの切り替えを開始し、前記制約タスクがレディ状態となると、前記レディ状態の制約タスクのタスクコンテキストを前記タスク・スタック領域に退避し、前記レディ状態の制約タスクのスタック・ポインタ情報をスタック・ポインタテーブルに登録し、次のタスクへの切り替えを行う手段を備えている、ことを特徴とする請求項７記載の情報処理装置。
【請求項１１】
タスクの終了コマンドが発行された場合、前記終了対象のタスクの属性をチェックし、制約タスクの場合、終了対象の制約タスクのスタック・ポインタ情報を前記スタック・ポインタテーブルから削除し、終了対象の制約タスクを終了させるように制御する手段を備えている、ことを特徴とする請求項７記載の情報処理装置。
【請求項１２】
タスクの復帰時に、次に動作するタスクの属性が制約タスクである場合、スタック・ポインタテーブル内のスタック・ポインタ情報を修正し、システム・スタック領域のスタック・ポインタの値を、前記スタック・ポインタ情報のアドレスに変更して制約タスクに戻り、前記タスク・スタック領域よりタスクコンテキストを復帰するように制御する手段を備えている、ことを特徴とする請求項１０記載の情報処理装置。
【請求項１３】
タスクに対応するタスク・スタック領域を、後入れ先出し（Last In First Out）方式で記憶管理するスタック領域を備え情報処理装置のタスク制御方法において、
前記スタック領域に格納されるタスク・スタック領域のアドレス情報を保管するステップと、
少なくとも１つのタスク・スタック領域が上積みされている状態のタスク・スタック領域（「第１のタスク・スタック領域」という）に対応するタスクの終了処理により前記第１のタスク・スタック領域が解放されて空き領域とされ、つづいて、前記空き領域上に積まれているタスク・スタック領域のそれぞれに対応するタスクの終了により前記空き領域上に積まれているタスク・スタック領域が解放された場合に、前記保管されているタスク・スタック領域のアドレス情報に基づき、前記スタック領域のスタック・ポインタが、解放された前記第１のタスク・スタック領域に対応する前記空き領域とその直下の領域との境界を指すように制御するステップと、
を含む、ことを特徴とするタスク制御方法。
【請求項１４】
優先度が同じである複数のタスクについて前記複数のタスクの中で一番多くスタック領域を使用するタスクの分の領域を確保し、前記複数のタスク同士で、スタック領域を共有する制約タスクの制御を行うオペレーティングシステムのタスク制御方法であって、
前記制約タスクを起動するにあたり、タスク・スタック領域を、システム・スタック領域に確保する工程と、
優先度と、タスク・スタック領域のアドレス情報を含むスタック・ポインタ情報を格納するスタック・ポインタテーブルに、前記制約タスクのスタック・ポインタ情報を登録する工程と、
前記確保したタスク・スタック領域を用いて前記制約タスクを起動する工程と、
を含む、ことを特徴とするタスク制御方法。
【請求項１５】
起動された前記制約タスクを終了するコマンドを受け、前記制約タスクを終了させ、前記スタック・ポインタテーブルより、前記制約タスクに関して登録された前記スタック・ポインタ情報を削除する工程を含む、ことを特徴とする請求項１４記載のタスク制御方法。
【請求項１６】
前記制約タスクに割当てられたタスク・スタック領域を解放する工程を含む、ことを特徴とする請求項１４記載のタスク制御方法。
【請求項１７】
実行中の制約タスクの切り替え時に、前記制約タスクがレディ状態となると、前記レディ状態の制約タスクのタスクコンテキストを前記タスク・スタック領域に退避し、前記レディ状態の制約タスクのスタック・ポインタ情報をスタック・ポインタテーブルに登録し、次のタスクへの切り替えを行う工程を含む、ことを特徴とする請求項１４記載のタスク制御方法。
【請求項１８】
タスクの終了コマンドが発行された場合、前記終了対象のタスクの属性をチェックし、制約タスクの場合、終了対象の制約タスクのスタック・ポインタ情報を前記スタック・ポインタテーブルから削除し、終了対象の制約タスクを終了させるように制御する工程をさらに含む、ことを特徴とする請求項１４記載のタスク制御方法。
【請求項１９】
タスクの復帰時に、次に動作するタスクの属性が制約タスクである場合、スタック・ポインタテーブル内のスタック・ポインタ情報を修正し、システム・スタック領域のスタック・ポインタの値を、前記スタック・ポインタ情報のアドレスに変更して制約タスクに戻り、
前記タスク・スタック領域よりタスクコンテキストを復帰する、ように制御する工程を含む、ことを特徴とする請求項１７記載のタスク制御方法。
【請求項２０】
タスクに対応するタスク・スタック領域を後入れ先出し（Last In First Out）方式で記憶管理するスタック領域を備えたコンピュータに、
前記スタック領域に格納されるタスク・スタック領域のアドレス情報を保管する処理と、
少なくとも１つのタスク・スタック領域が上積みされている状態のタスク・スタック領域（「第１のタスク・スタック領域」という）に対応するタスクの終了処理により前記第１のタスク・スタック領域が解放されて空き領域とされ、つづいて、前記空き領域上に積まれているタスク・スタック領域のそれぞれに対応するタスクの終了により前記空き領域上に積まれているタスク・スタック領域が解放された場合に、前記保管されているタスク・スタック領域のアドレス情報に基づき、前記スタック領域のスタック・ポインタが、解放された前記第１のタスク・スタック領域に対応する前記空き領域とその直下の領域との境界を指すように制御する処理と、
を実行させるプログラム。
【請求項２１】
優先度が同じである複数のタスクについて前記複数のタスクの中で一番多くスタック領域を使用するタスクの分の領域を確保し、そのタスク同士で、スタック領域を共有する制約タスクの制御を行うコンピュータに、
前記制約タスクを起動するにあたり、タスク・スタック領域を、システム・スタック領域に確保する処理と、
優先度と、タスク・スタック領域のアドレス情報を含むスタック・ポインタ情報を格納するスタック・ポインタテーブルに、前記制約タスクのスタック・ポインタ情報を登録する処理と、
前記確保したタスク・スタック領域を用いて前記制約タスクを起動する処理と、
を実行させるプログラム。
【請求項２２】
請求項２１記載のプログラムにおいて、
起動された前記制約タスクを終了するコマンドを受け、前記制約タスクを終了させ、前記スタック・ポインタテーブルより、前記制約タスクに関して登録された前記スタック・ポインタ情報を削除する処理を実行させるプログラム。
【請求項２３】
請求項２１記載のプログラムにおいて、
前記制約タスクに割当てられたタスク・スタック領域を解放する処理を実行させるプログラム。
【請求項２４】
請求項２１記載のプログラムにおいて、
実行中の制約タスクの切り替え時に、前記制約タスクがレディ状態となると、前記レディ状態の制約タスクのタスクコンテキストを前記タスク・スタック領域に退避し、前記レディ状態の制約タスクのスタック・ポインタ情報をスタック・ポインタテーブルに登録し、次のタスクへの切り替えを行う処理を実行させるプログラム。
【請求項２５】
請求項２１記載のプログラムにおいて、
タスクの終了コマンドが発行された場合、前記終了対象のタスクの属性をチェックする処理と、
前記チェックの結果、制約タスクの場合、終了対象の制約タスクのスタック・ポインタ情報を前記スタック・ポインタテーブルから削除し、終了対象の制約タスクを終了させるように制御する処理と、
を実行させるプログラム。
【請求項２６】
請求項２１記載のプログラムにおいて、
タスクの復帰時に、次に動作するタスクの属性が制約タスクである場合、スタック・ポインタテーブル内のスタック・ポインタ情報を修正し、システム・スタック領域のスタック・ポインタの値を、前記スタック・ポインタ情報のアドレスに変更して制約タスクに戻り、前記タスク・スタック領域よりタスクコンテキストを復帰するように制御する処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムオペレーティングシステム（以下「ＲＴＯＳ」と略記される）に関し、特に、ＲＴＯＳの制約タスクを対象とするサービス・コールの発行に適用して好適とされる情報処理装置とオペレーティングシステムのタスク制御方法並びにプログラムに関する。
【背景技術】
【０００２】
ＩＴＲＯＮの仕様により、制約タスクが定義されている。またＩＴＲＯＮの仕様では、制約タスクを強制終了できないことになっている。
【０００３】
この仕様では、システムの構築に不便なため、制約タスクの強制終了を実現させることが望ましい。
【０００４】
以下の動作の説明において、静的に定義するタスクは、全て制約タスクとする。
【０００５】
タスクには３種類の優先度があり、同じ優先度の制約タスクは重複して起動できないものとする。４つのタスクが存在するものとする。
【０００６】
（１）制約タスクＡ（優先度：高）（タスク・スタック領域：Ａ＿ＴＳ）
（２）制約タスクＢ（優先度：中）（タスク・スタック領域：Ｂ＿ＴＳ）
（３）制約タスクＣ（優先度：低）（タスク・スタック領域：Ｃ＿ＴＳ）
（４）制約タスクＤ（優先度：低）（タスク・スタック領域：Ｄ＿ＴＳ）
【０００７】
制約タスクＣを実行中に、制約タスクＢは優先されて実行するが、制約タスクＣを実行中に優先度の同じ制約タスクＤは起動できない。
【０００８】
図１４は、従来のシステムにおける通常のタスクの実行状態の変化を示す図である。図１４において、１〜８はそれぞれタイミングを示す参照符号である。図１５は、システム・スタック領域における、図１４の各タイミングに対応したシステム・スタック領域の変化を示した図であり、２−Ａ〜２−Ｆは、タイミング１〜７の状況をそれぞれ示している。図１５において、１０は、システム・スタック領域のスタック・ポインタ（オペレーティングシステムで用意される）である。
【０００９】
図１４のタイミング１で、タスクＣが起動され、システム・スタック領域には、図１５の２−Ａに示すように、Ｃ＿ＴＳ領域が確保される。同時に、スタック・ポインタ１０は、Ｃ＿ＴＳと空き領域の境界に位置する。
【００１０】
図１４のタイミング２で、タスクＢが起動され、スタック領域には、図１５の２−Ｂに示すようにＢ＿ＴＳ領域が確保される。スタック・ポインタ１０は、Ｂ＿ＴＳと空き領域の境界に位置する。
【００１１】
図１４のタイミング３で、タスクＡが起動され、スタック領域には、図１５の２−Ｃに示すようにＡ＿ＴＳ領域が確保される。スタック・ポインタ１０は、Ａ＿ＴＳと空き領域の境界に位置する。
【００１２】
図１４のタイミング５で、タスクＡに対するｔｅｒ＿ｔｓｋ（ｔｅｒｍｉｎａｔｅ＿ｔａｓｋ：タスク終了コマンド）が発行され、タスクＡは終了し、タスクＢの処理に戻る。スタック領域から、Ａ＿ＴＳが削除され、スタック・ポインタ１０は、図１５の２−Ｄに示すように、Ｂ＿ＴＳと空き領域の境界に位置する。なお、ｔｅｒ＿ｔｓｋは、指定されたタスクを終了させるコマンドであり、このコマンドが発行されると、指定されたタスクは終了させられる。
【００１３】
ここで、何らかの原因で、タスクを終了させることができない場合は、ｔｅｒ＿ｔｓｋを発行しても、エラーを返し、タスクを強制終了できないことを示す。
【００１４】
図１４のタイミング６で、タスクＢに対するｔｅｒ＿ｔｓｋが発行され、タスクＢは終了し、タスクＣの処理に戻る。スタック領域からＢ＿ＴＳが削除され、スタック・ポインタ１０は、図１５の２−Ｅに示すように、Ｃ＿ＴＳと空き領域の境界に位置する。
【００１５】
通常動作時は、上記のように、優先度の高いタスクが起動されると、優先度の低いタスクは処理は保留され、優先度の高いタスクの処理が行われる。そして、優先度の高いタスクの処理が終了すると、優先度が次に高いタスクの処理に移る。
【００１６】
次に、制約タスクの処理について説明する。「制約タスク」とは、優先度が同じである複数のタスクにおいて、複数のタスクの中で一番多くスタック領域を使用するタスクの分の領域を確保し、そのタスク同士で、スタック領域を共有するものである。制約タスクの詳細は、後記非特許文献１（ＩＴＲＯＮの仕様書：ｕＩＴＲＯＮ  ４．０  仕様  Ｖｅｒ．４．０２．００  ５．２．１  制約タスク）の記載が参照される。
【００１７】
図１６は、タスクが起動されたときのスタック領域の構成を示した図である。通常のタスクでは、スタック領域はタスクごとに確保されるが、スタック領域を共有する制約タスクでは、その分のスタック領域、すなわちメモリ使用量を減らすことができる。しかし、複数のタスク間でスタック領域を共有するため、同じ優先度のタスク同士は重ねて実行することができない仕様となっている。図１６の３−Ａは、通常のタスクでのスタック領域の構成を示しており、タスクＢのタスク・スタック領域２２、タスクＣのタスク・スタック領域２３と、タスクＤのタスク・スタック領域２４が確保されている。
【００１８】
しかし、制約タスクを使用すると、優先度の同じであるタスクＣとタスクＤのスタック領域は共通に確保されるので、図１６の３−Ｂに示すように、タスクＣ、Ｄの共通タスク・スタック領域２７と、タスクＢのタスク・スタック領域２２とが確保され、タスク・スタック領域２４の分だけメモリ使用量が抑えられる。
【００１９】
【非特許文献１】ITRONの仕様書：uITRON 4.0仕様 Ver.4.02.00 5.2.1 制約タスク  トロン協会ホームページ  インターネット＜URL：http://www.assoc.tron.org＞ NEC製RTOS仕様書：RX850 (uITRON4.0) システム仕様書 (外部仕様編)
【発明の開示】
【発明が解決しようとする課題】
【００２０】
上記したように、制約タスクを用いると、メモリの消費量は減らすことができるが、使用上の制約から、以下のような問題が発生する。
【００２１】
あるタスクが実行中に、何らかの理由（例えばカーオーディオのシステムなどで、異常が発生した場合にシステムを緊急に停止させるために、ＣＤ（コンパクトディスク）などの装置を停止させる必要がある。その場合に、対象となるタスクを強制的に終了させ、ＣＤ装置を停止させるタスクを動作させたい等の理由）により、対象となるタスクを終了させる必要がある。
【００２２】
例えば、時間の制約により、図１４において、タスクＣを実行しなければならなくなるような状況になった場合、タスクＢを強制終了させて、タスクＣの実行に戻る必要がある。このような場合、タスクＢを対象としたｔｅｒ＿ｔｓｋを発行してタスクＢを終了させる。このとき、タスクＢが制約タスクとして定義されている場合、ｔｅｒ＿ｔｓｋによってタスクＢが終了してしまうと、タスクＢが使用していたタスク・スタック領域（他のタスクと共用するスタック領域）を解放しなければならなくなり、スタック領域が正しく認識されない状態になってしまう。
【００２３】
すなわち、前に実行していたタスクに戻るための情報が正しく認識できず、全体の処理が異常になり、システムハングアップを起こしてしまう場合が生じる。
【００２４】
このため、上記非特許文献１では、仕様として、このような制約タスクに対する終了コマンド（ｔｅｒ＿ｔｓｋ）の発行に対して、エラーを返し、終了処理が実行できないように規定されている。すなわち、制約タスクを強制終了させることができない。
【００２５】
図１７は、制約タスクを対象としたｔｅｒ＿ｔｓｋ発行され、実行されてしまったときのシステム・スタック領域の変化を示す図ある。４−Ａは、図１４のタイミング３の状況を示している。４−Ｂは、図１４のタイミング４の状況を示しており、制約タスクＢがｔｅｒ＿ｔｓｋで強制終了し、タスク・スタック領域Ｂ＿ＴＳは解放されているものとする。４−Ｃは、図１４のタイミング５の状況を示している。４−Ｄは、図１４のタイミング６の状況を示している。
【００２６】
制約タスクを対象としたｔｅｒ＿ｔｓｋを発行し、処理が行われると、対象とされた制約タスクのタスク・スタック領域（システム・スタック領域の一部）を解放する必要がある。仮に、ｔｅｒ＿ｔｓｋの対象とされた制約タスクＢが強制終了された場合、システム・スタック領域は、図１７の４−Ｂのようになる。タスクＡのタスク・スタックＡ＿ＴＳは、Ｂ＿ＴＳが解放された領域の上に存在している。この状態で、システムが動作し続けると、タイミング５の処理において、タスクＡが終了した後に、タスクＣに処理が移る。これは、タスクＢが、タイミング４の処理で終了しているためである。
【００２７】
タスクＣに復帰するときのスタック・ポインタの値は、タスクＡが終了した時点でのスタックポインタの値（１０）になっており（符号３１で示す）、本来のタスクＣに復帰するときのスタックポインタ値（３０）とは明らかに異なっている。
【００２８】
制約タスクのタスク・スタック領域のシステム・スタック領域からの積み下ろし（解放）をＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ；後入れ先出し）方式で行うという制約を、無視すると、図１７に示したように、システム・スタック領域が破壊され、システムが正常に動作しなくなる。
【００２９】
したがって、本発明は、上記問題点に鑑みて創案されたものであって、その主たる目的は、スタックずれ等を招くことなく、制約タスクを対象としたタスク終了コマンドを発行して制約タスクを強制終了可能とした情報処理装置、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【００３０】
本願で開示される発明は、前記目的を達成するため、概略以下の通り構成される。
【００３１】
本発明の１つのアスペクト（側面）に係る情報処理装置は、オペレーティングシステムを含む情報処理装置において、タスクに対応するタスク・スタック領域を後入れ先出し（Last In First Out）方式で記憶管理するスタック領域を備えるともに、前記スタック領域に格納されるタスク・スタック領域のアドレス情報を保管する手段を備え、少なくとも１つのタスク・スタック領域が上積みされている状態のタスク・スタック領域（「第１のタスク・スタック領域」という）に対応するタスクの終了処理により前記第１のタスク・スタック領域が解放されて空き領域とされ、つづいて、前記空き領域上に積まれているタスク・スタック領域のそれぞれに対応するタスクの終了により、前記空き領域上に積まれているタスク・スタック領域が解放された場合に、前記保管されたタスク・スタック領域のアドレス情報に基づき、前記スタック領域のスタック・ポインタが、解放された前記第１のタスク・スタック領域に対応する前記空き領域とその直下の領域との境のアドレスを指すように制御を行う手段を備えている。本発明において、前記第１のタスク・スタック領域に対応するタスクは、同じ優先順位のタスク間でタスク・スタック領域を共有する制約タスクである。
【００３２】
本発明の別のアスペクト（側面）に係る情報処理装置は、同じ優先順位のタスク間でタスク・スタック領域を共有する制約タスクを有し、優先順位ごとの前記タスク・スタック領域の先頭アドレスを保管するスタック・ポインタテーブルを有する。本発明に係る情報処理装置は、好ましくは、前記制約タスクを起動したときに、システム・スタック領域に、前記タスク・スタック領域を確保し、起動する制約タスクの優先順位に対応した前記スタック・ポインタテーブル内の領域に、タスク・スタック領域の先頭アドレスを登録し、その後、前記制約タスクを起動するように制御する手段を備えている。本発明に係る情報処理装置は、前記制約タスクを終了するときに、終了対象の制約タスクの優先順位に対応した前記スタック・ポインタテーブルから、終了対象の制約タスクよりも優先順位の低い制約タスクのタスク・スタック領域のアドレスを読み出し、前記タスク・スタック領域のアドレスをスタック・ポインタに格納する手段を備えている。
【００３３】
本発明の他のアスペクト（側面）に係るオペレーティングシステムでのタスク制御方法は、同じ優先順位のタスク間でタスク・スタック領域を共有する制約タスクを有し、優先順位ごとの前記タスク・スタック領域の先頭アドレスを保管するスタック・ポインタテーブルを設け、前記制約タスクを起動したときに、システム・スタック領域に、前記タスク・スタック領域を確保する工程と、起動する制約タスクの優先順位に対応した前記スタック・ポインタテーブル内の領域に、タスク・スタックのアドレスを登録し、その後、前記制約タスクを起動するように制御する工程を含む。本発明に係る方法において、前記制約タスク処理を終了するときに、終了対象の制約タスクの優先順位に対応した前記スタック・ポインタテーブル内の領域から、終了対象の制約タスクよりも優先順位の低い制約タスクのタスク・スタックのアドレスを読み出し、前記タスク・スタックのアドレスをスタック・ポインタに格納する工程をさらに含むようにしてもよい。
【００３４】
本発明の他のアスペクト（側面）に係るプログラムは、同じ優先順位のタスク間でタスク・スタック領域を共有する制約タスクを有し、優先順位ごとの前記タスク・スタック領域の先頭アドレスを保管するスタック・ポインタテーブルを備えたコンピュータに、前記制約タスクを起動したときに、システム・スタック領域に、前記タスク・スタック領域を確保し、起動する制約タスクの優先順位に対応した前記スタック・ポインタテーブル内の領域に、タスク・スタックのアドレスを登録し、その後、前記制約タスクを起動するように制御する処理を実行させるプログラムよりなる。本発明に係るプログラムにおいて、前記制約タスク処理を終了するときに、終了対象の制約タスクの優先順位に対応した前記スタック・ポインタテーブル内の領域から、終了対象の制約タスクよりも優先順位の低い制約タスクのタスク・スタックのアドレスを読み出し、前記タスク・スタックのアドレスをスタック・ポインタに格納する、をコンピュータに実行させるようにしてもよい。
【発明の効果】
【００３５】
本発明によれば、スタック・ポインタの修正を行なうことで、スタックずれ等をまねくことなく、制約タスクを対象としたタスク終了コマンドを発行して制約タスクを強制終了させることができる。
【発明を実施するための最良の形態】
【００３６】
本発明を実施するための最良の形態について説明する。本発明の実施の形態においては、図２に示すように、制約タスクに対して、該制約タスクが使用するシステム・スタック領域の情報を保持するスタック・ポインタテーブルがあらたに追加されている。スタック・ポインタテーブルは、図１に示すように、システム・スタック領域を破壊しない動作ができるために最低限必要とされる情報（例えば優先度、スタック領域のトップ・アドレス）を保持する。
【００３７】
本発明の一実施の形態のタスク制御方法について説明する。本発明の一実施の形態のタスク制御方法は、制約タスクを起動するにあたり、タスク・スタック領域を、システム・スタック領域に確保する工程（図７の１００）と、優先度と、タスク・スタック領域のアドレス情報を含むスタック・ポインタ情報を格納するスタック・ポインタテーブルに、前記制約タスクのスタック・ポインタ情報を登録する工程（図７の１１０）と、前記確保したタスク・スタック領域を用いて前記制約タスクを起動する工程（図７の１０１）と、を含む。これらの工程は、オペレーティングシステムを構成するプログラムによって実現される。
【００３８】
また、本発明の一実施の形態のタスク制御方法は、起動された制約タスクを終了するコマンドを受け、制約タスクを終了させ（図８の１２０）、スタック・ポインタテーブルより、前記制約タスクに関して登録されたスタック・ポインタ情報を削除する工程（図８の１３０）と、制約タスクに割当てられたスタック領域を解放する工程（図８の１２１）とを含む。これらの工程は、オペレーティングシステムを構成するプログラムによって実現される。
【００３９】
そして、本発明の一実施の形態のタスク制御方法は、タスクの終了コマンドが発行された場合、終了対象のタスクの属性をチェックする工程（図１０の１６２）と、制約タスクの場合、終了対象の制約タスクのスタック・ポインタ情報をスタック・ポインタテーブルから削除する工程（図１０の１７０）と、終了対象の制約タスクを終了させるように制御する工程（図１０の１７１）とを含む。これらの工程は、オペレーティングシステムを構成するプログラムによって実現される。以下実施例に即して説明する。
【実施例】
【００４０】
本発明の一実施例について説明する。本発明の一実施例の情報処理装置（ＲＴＯＳが起動される）は、制約タスクが使用するシステム・スタック領域の情報を保持するスタック・ポインタテーブル５１を備えている。図２のスタック・ポインタテーブル５１は、制約タスクのタスク・スタック領域に関する情報を保持するテーブル（記憶領域）である。
【００４１】
制約タスクのタスク・スタック領域が確保される（すなわち制約タスクが起動する）と、スタック・ポインタテーブル５１に、スタック・ポインタ情報が登録される。
【００４２】
制約タスクが終了するか、スタック・ポインタの修正にスタック・ポインタ情報が使用されると、スタック・ポインタテーブルから削除される。
【００４３】
スタック・ポインタテーブルでは、制約タスクのスタック・ポインタに関する情報（システム・スタック領域を破壊しない動作ができる最小限の情報）が保持されている。
【００４４】
図１を参照すると、本実施例において、スタック・ポインタテーブルのスタック・ポインタ情報は、該当する制約タスクのタスク優先度４０（制約タスクは、同一優先度で一つしか起動できないため、優先度を用いて識別する）と、該当する制約タスクのタスク・スタック領域の先頭アドレス（４１）を含む。
【００４５】
次に、スタック・ポインタテーブルの管理について説明する。スタック・ポインタテーブル５１は、制約タスクが生成されたタスク優先度数分、ＲＴＯＳ（リアルタイムオペレーティングシステム）のデータ領域（６−Ｂ）に配置される。
【００４６】
ＲＴＯＳは、該ＲＴＯＳの初期化時に、該ＲＴＯＳのデータ領域（６−Ａ）の中に、スタック・ポインタテーブルの場所を示すポインタ５０を保持することで、スタック・ポインタテーブルを管理する。
【００４７】
図１３は、本発明の一実施例の計算機システム（情報処理装置）の構成例を示す図である。図１３に示すように、本発明の一実施例の計算機システムは、ＣＰＵ２２１と、ＲＯＭ（読み出し専用メモリ）２２２と、ＲＡＭ（ランダムアクセスメモリ）２２３を備えている。ＲＡＭ領域２２３には、ＲＴＯＳのデータ領域２２４が確保されている。スタック・ポインタテーブル２１０（図２の５１に対応する）は、ＲＴＯＳのデータ領域２２４の一部である。
【００４８】
静的に定義するタスクは、全て制約タスクとする。特に制限されないが、以下の説明では、３つのタスクが存在するものとする。
【００４９】
（１）制約タスク  Ａ（優先度：高）（タスク・スタック領域：Ａ＿ＴＳ）（スタック・ポインタ情報：Ａ＿スタック・ポインタ）
（２）制約タスク  Ｂ（優先度：中）（タスク・スタック領域：Ｂ＿ＴＳ）（スタック・ポインタ情報：Ｂ＿スタック・ポインタ）
（３）制約タスク  Ｃ（優先度：低）（タスク・スタック領域：Ｃ＿ＴＳ）（スタック・ポインタ情報：Ｃ＿スタック・ポインタ）：
【００５０】
図３は、本発明のタスク実行状態の変化を示す図である。図３において、６０〜６３、６５、６６はそれぞれタイミングを示す符号である。
【００５１】
図４は、図３の各タイミングに対応したシステム・スタック領域の変化を示した図であり、８−Ａはタイミング６０の状況を、８−Ｂはタイミング６１の状況を、８−Ｃはタイミング６２の状況を、８−Ｄはタイミング６３の状況を、８−Ｅはタイミング６４の状況を、８−Ｆはタイミング６５の状況を、８−Ｇはタイミング６６の状況を、それぞれ示している。
【００５２】
タイミング６０で、タスクＣが起動され、システム・スタック領域には、図４の８−Ａに示すように、タスク・スタック領域としてＣ＿ＴＳが確保される。同時に、スタック・ポインタ１０は、Ｃ＿ＴＳとその上の空き領域の境界に位置する。
【００５３】
タイミング６１で、タスクＢが起動され、スタック領域には、図４の８−Ｂに示すように、タスク・スタック領域として、Ｂ＿ＴＳが確保される。スタック・ポインタ１０は、Ｂ＿ＴＳとその上の空き領域の境界に位置する。
【００５４】
タイミング６２で、タスクＡが起動され、スタック領域には、図４の８−Ｃに示すようにタスク・スタック領域として、Ａ＿ＴＳが確保される。スタック・ポインタ１０は、Ａ＿ＴＳとその上の空き領域の境界に位置する。
【００５５】
タイミング６３で、タスクＢに対するｔｅｒ＿ｔｓｋ（ｔｅｒｍｉｎａｔｅ＿ｔａｓｋ：タスク終了コマンド）が発行され、タスクＢは終了し、システム・スタック領域から、タスクＢのタスク・スタック領域Ｂ＿ＴＳが解放され、空き領域とされる。このとき、スタック・ポインタ１０は、図４の８−Ｄに示すように、Ａ＿ＴＳとその上の空き領域の境界に位置する。すなわち、スタック・ポインタ１０が指す位置（アドレス）は、図４の８−Ｃのときと、変わらない。
【００５６】
タイミング６４で、タスクＡは終了し、システム・スタック領域から、タスクＡのタスク・スタック領域Ａ＿ＴＳが削除され、スタック・ポインタ１０は、図４の８−Ｅに示すように、元のＢ＿ＴＳ（現空き領域）と、元のＡ＿ＴＳ（空き領域）の境をさす。
【００５７】
タイミング６４で、タスクＣの処理に戻る前に、スタック・ポインタ１０の修正が行われ、図４の８−Ｆに示すように、タスクＣのタスク・スタック領域Ｃ＿ＴＳとその上の空き領域の境界に位置し、タイミング６５で、タスクＣに戻る。
【００５８】
タイミング６６で、タスクＣが終了する。
【００５９】
図５は、図３の各タイミングに対応したスタック・ポインタテーブル５１（図２参照）の変化を示した図であり、９−Ａは図３のタイミング６０の状況を、９−Ｂは図３のタイミング６１の状況を、９−Ｃは図３のタイミング６２の状況を、９−Ｄは図３のタイミング６３の状況を、９−Ｅは図３のタイミング６４の状況を、９−Ｆは図３のタイミング６５の状況を、９−Ｇは図３のタイミング６６の状況を、それぞれ示している。
【００６０】
タイミング６０では、図５の９−Ａに示すように、スタック・ポインタテーブル５１（図２参照）には、スタック・ポインタ情報として、Ｃのスタック・ポインタ情報Ｃ＿ＳＰが格納され、スタック・ポインタテーブルを示すポインタ５０（図２参照）は、Ｃ＿ＳＰをポイントする。
【００６１】
タイミング６１では、図５の９−Ｂに示すように、スタック・ポインタテーブル５１（図２参照）には、スタック・ポインタ情報として、ＣとＢのスタック・ポインタ情報Ｃ＿ＳＰ、Ｂ＿ＳＰが格納される。スタック・ポインタテーブルを示すポインタ５０（図２参照）は、Ｂ＿ＳＰをポイントする。
【００６２】
タイミング６２では、図５の９−Ｃに示すように、スタック・ポインタテーブル５１（図２参照）には、スタック・ポインタ情報として、ＣとＢとＡのスタック・ポインタ情報Ｃ＿ＳＰ、Ｂ＿ＳＰ、Ａ＿ＳＰが格納される。スタック・ポインタテーブルを示すポインタ５０（図２参照）は、Ａ＿ＳＰをポイントする。
【００６３】
タイミング６３では、図５の９−Ｄに示すように、Ｂのスタック・ポインタ情報Ｂ＿ＳＰがスタック・ポインタテーブル５１（図２参照）から削除される。
【００６４】
タイミング６４、６５では、図５の９−Ｅ、９−Ｆに示すように、Ａのスタック・ポインタ情報Ａ＿ＳＰがスタック・ポインタテーブル５１（図２参照）から削除される。スタック・ポインタテーブル５１を示すポインタ５０（図２参照）は、Ｃ＿ＳＰをポイントする。
【００６５】
タイミング６６では、図５の９−Ｇに示すように、Ｃのスタック・ポインタ情報Ｃ＿ＳＰがスタック・ポインタテーブル５１（図２参照）から削除される。
【００６６】
図６は、図３の各タイミングに対応したシステム・スタック領域とスタック・ポインタテーブルの変化とスタック・ポインタの修正に関する動作を示した図である。１０−Ａは図３のタイミング６２の状況を示している。システム・スタック領域には、タスク・スタック領域として、Ｃ＿ＴＳ、Ｂ＿ＴＳ、Ａ＿ＴＳが確保されている。
【００６７】
図６の１０−Ｂと１０−Ｆは、図３のタイミング６３の状況におけるシステム・スタック領域とスタック・ポインタテーブルをそれぞれ示している。１０−Ｆの９０は、タスク終了対象のスタック・ポインタテーブルのＢ＿ＳＰを表している。
【００６８】
図６の１０−Ｃと１０−Ｇは、図３のタイミング６４の状況におけるシステム・スタック領域とスタック・ポインタテーブルをそれぞれ示している。
【００６９】
図６の１０−Ｅと１０−Ｉは、図３のタイミング６５の状況におけるシステム・スタック領域とスタック・ポインタテーブルをそれぞれ示している。
【００７０】
図６の１０−Ｄは、スタック・ポインタ修正直後のシステム・スタック領域を示し、図６の１０−Ｈは、スタック・ポインタ修正直後のスタック・ポインタテーブルを示している。１０−Ｄに示すように、タイミング６５のスタック・ポインタは９３の位置にあり、スタック領域Ｃ＿ＴＳのトップアドレスを指示している。また、タイミング６５において、スタック・ポインタテーブルは、１０−Ｈに示すように、タスクＣのスタック・ポインタＣ＿ＳＰを格納している。
【００７１】
図７は、本発明の一実施例における制約タスク起動時の制御手順を示す流れ図である。
【００７２】
ステップ１００では、システム・スタック領域からタスク・スタック領域を確保する。
【００７３】
ステップ１１０では、制約タスクのスタック・ポインタ情報（優先度４０）をスタック・ポインタテーブル（図２参照）に登録する。
【００７４】
ステップ１０１では、確保したタスク・スタック領域を使って制約タスクを起動させる。
【００７５】
ステップ１０２では、制約タスクがＲｕｎｎｉｎｇ（実行状態）状態になる。
【００７６】
図１８は、本発明の比較例として従来のシステムの制約タスク起動時の制御手順を示す流れ図である。
【００７７】
ステップ１００では、システム・スタック領域からタスク・スタック領域を確保する。
【００７８】
ステップ１０１では、確保したタスク・スタック領域を使って制約タスクを起動させる。
【００７９】
ステップ１０２では、制約タスクがＲｕｎｎｉｎｇ（実行状態）状態になる。
【００８０】
このように、従来のシステムでは、図７のステップ１１０を欠いている。
【００８１】
図８は、本発明の一実施例における制約タスク終了時の制御手順を示す流れ図である。
【００８２】
ステップ１２０では、制約タスクが終了する処理（ｅｘｔ＿ｔｓｋなど）が実行される。
【００８３】
ステップ１３０では、制約タスクのスタック・ポインタ情報（４０と４１）をスタック・ポインタテーブル５１（図２参照）から削除する。
【００８４】
ステップ１２１では、制約タスクがタスク・スタック領域を解放する。
【００８５】
ステップ１２２では、制約タスクがＤｏｒｍａｎｔ（ドーマント）状態に遷移する。
【００８６】
ステップ１２３では、システムが次のタスクへ切り替える。
【００８７】
図１９は、本発明の比較例として従来のシステムの制約タスク終了時の制御手順を示す流れ図である。
【００８８】
ステップ１２０では、制約タスクが終了する処理（ｅｘｔ＿ｔｓｋなど）が実行される。
【００８９】
ステップ１２１では、制約タスクがタスク・スタック領域を解放する。ステップ１２２では、制約タスクがＤｏｒｍａｎｔ（ドーマント）状態に遷移する。
【００９０】
ステップ１２３では、システムが次のタスクへ切り替える。
【００９１】
このように、従来のシステムでは、図８のステップ１３０の処理を欠いている。
【００９２】
図９は、本発明の一実施例における制約タスクの待ち状態への移行時の制御手順を示す流れ図である。
【００９３】
ステップ１４０では、システムが実行中のタスクを切り替えを開始する。
【００９４】
ステップ１４１では、実行中の制約タスクがＲｅａｄｙ（レディ：実行可）状態になる。
【００９５】
ステップ１４２では、Ｒｅａｄｙ状態になった制約タスクのタスク・コンテキストをタスク・スタック領域に積み上げる。
【００９６】
次のステップ１５０では、Ｒｅａｄｙ状態になった制約タスクのスタック・ポインタ情報（４１）を、スタック・ポインタテーブルへ登録する。
【００９７】
ステップ１４３では、システムが次のタスクを起動する。
【００９８】
図２０は、本発明の比較例として従来のシステムの制約タスクのの待ち状態への移行時の制御手順を示す流れ図である。
【００９９】
ステップ１４０では、システムが実行中のタスクの切り替えを開始する。
【０１００】
ステップ１４１では、実行中の制約タスクがＲｅａｄｙ状態になる。
【０１０１】
ステップ１４２では、Ｒｅａｄｙ状態になった制約タスクのタスク・コンテキストをタスク・スタック領域に積み上げる。
【０１０２】
ステップ１４３では、システムが次のタスクを起動する。
【０１０３】
従来のシステムでは、図９のステップ１５０の処理を欠いている。
【０１０４】
図１０は、本発明の一実施例における制約タスクを対象としたｔｅｒ＿ｔｓｋ発行時の制御手順を示す流れ図である。
【０１０５】
ステップ１６０では、タスクを対象とするｔｅｒ＿ｔｓｋが発行される。
【０１０６】
ステップ１６１では、システムでｔｅｒ＿ｔｓｋが開始される。
【０１０７】
ステップ１６２では、タスクの属性を判断する。
【０１０８】
ステップ１６２の判断の結果、通常タスクの場合、ステップ１６３に分岐し、通常タスクが終了する
ステップ１６２の判断の結果、制約タスクの場合、ステップ１７０に分岐し、終了対象とされた制約タスクのスタック・ポインタ情報（４０と４１）をスタック・ポインタテーブルから削除する。
【０１０９】
次のステップ１７１では、終了対象とされた発明の制約タスクを終了させる。
【０１１０】
ステップ１７２では、タスクの終了処理では、タスク・スタック領域に関しては何も行わない。
【０１１１】
次にステップ１６４で正常終了を返す。
【０１１２】
ステップ１６６では、ｔｅｒ＿ｔｓｋを終了する。
【０１１３】
ステップ１６７では、元の処理へ戻る。
【０１１４】
図２１は、本発明の比較例として従来のシステムにおける制約タスクを対象としたｔｅｒ＿ｔｓｋ発行時の制御手順を示す流れ図である。
【０１１５】
ステップ１６０では、タスクを対象とするｔｅｒ＿ｔｓｋが発行される。
【０１１６】
ステップ１６１では、システムでｔｅｒ＿ｔｓｋが開始される。
【０１１７】
ステップ１６２では、タスクの属性を判断する。
【０１１８】
ステップ１６２の判断の結果、通常タスクの場合、ステップ１６３に分岐し、通常タスクが終了する。
【０１１９】
次にステップ１６４で正常終了を返す。
【０１２０】
ステップ１６２の判断の結果、制約タスクの場合、ステップ１６５に分岐し、制約タスエラーコードを返す処理を示す。
【０１２１】
ステップ１６６では、ｔｅｒ＿ｔｓｋを終了する。
【０１２２】
ステップ１６７において、元の処理へ戻る。
【０１２３】
図１１は、本発明の一実施例における制約タスクへの復帰時の制御手順を示す流れ図である。
【０１２４】
ステップ１８０では、前の処理を終了する。
【０１２５】
ステップ１８１では、次に動作させるタスクをサーチする。
【０１２６】
次のステップ１９０では、次に動くタスクの属性をチェックする。
【０１２７】
ステップ１９０のチェックの結果、通常タスクの場合、ステップ１８２に分岐する。
【０１２８】
ステップ１９０のチェックの結果、制約タスクの場合、ステップ１９１に分岐し、スタック・ポインタの修正を行う。
【０１２９】
ステップ１８２では、退避したタスクへ戻る処理を開始する。
【０１３０】
ステップ１８３では、退避したタスクのタスク・コンテキストを元に戻す。
【０１３１】
ステップ１８４において、タスクへ戻る。
【０１３２】
図２２は、本発明の比較例として、従来のシステムにおける制約タスクへの復帰時の制御手順を示す流れ図である。
【０１３３】
ステップ１８０では、前の処理を終了する。
【０１３４】
ステップ１８１では、次に動作させるタスクをサーチする。
【０１３５】
ステップ１８２では、退避したタスクへ戻る処理を開始する。
【０１３６】
ステップ１８３では、退避したタスクのタスク・コンテキストを元に戻す。
【０１３７】
ステップ１８４において、タスクへ戻る。
【０１３８】
以下では、本発明の一実施例の動作についてさらに説明する。例えば図３のタイミング６０でタスクＣが起動され、システム・スタック領域に、図４の８−Ａに示すように、Ｃ＿ＴＳ領域が確保され、スタック・ポインタテーブル（図２の５１、図１３の２３０）には、図５の９−Ａに示すように、Ｃ＿スタック・ポインタが登録される。同時に、スタック・ポインタ１０は、図４に示すように、Ｃ＿ＴＳと空き領域の境界に位置する。
【０１３９】
図３のタイミング６１でタスクＣが待ち状態になるので、Ｃ＿スタック・ポインタに（タスクＣの）トップを保存し、タスクＢが起動され、システム・スタック領域に、図４の８−Ｂに示すように、Ｂ＿ＴＳ領域が確保され、スタック・ポインタテーブルに、図５の９−Ｂで示すように、Ｂ＿スタック・ポインタが登録される。同時に、スタック・ポインタ１０は、図４に示すように、Ｂ＿ＴＳと空き領域の境界に位置する。
【０１４０】
図３のタイミング６２でタスクＢが待ち状態になるので、Ｂ＿スタック・ポインタに（タスクＢの）トップを保存し、タスクＡが起動され、システム・スタック領域に、図４の８−Ｃで示すように、Ａ＿ＴＳ領域が確保され、スタック・ポインタテーブルに図５の９−Ｃに示すように、Ａ＿スタック・ポインタが登録される。同時に、スタック・ポインタ１０は、図４に示すように、Ａ＿ＴＳと空き領域の境界に位置する。
【０１４１】
図３のタイミング６３でタスクＡからタスクＢを対象としたｔｅｒ＿ｔｓｋが実行される。
【０１４２】
強制終了させる処理の前に、タスクＢのスタック・ポインタ情報（Ｂ＿スタック・ポインタ）を、スタック・ポインタテーブルから削除する。それから、タスクＢを強制終了する処理を行う。この時に、システム・スタック領域（Ｂ＿ＴＳ）に関わる処理は何も行われない。Ｂ＿ＴＳは、システム上で使用されることはないので、図４では、「空」として扱っている。しかし、実際の状態は、図６の１０−Ｃ、１０−Ｄの９５に示すように、システム・スタック領域に残ったままになる。
【０１４３】
図３のタイミング６３の直後では、ｔｅｒ＿ｔｓｋ（Ｂ）（タスクＢの強制終了）の処理が正常終了し、タスクＡの処理が継続される。
【０１４４】
図３のタイミング６４でタスクＡが終了する。システム・スタック領域では、図４の８−Ｅに示すように、Ａ＿ＴＳが解放され、図５の９−Ｅに示すように、スタック・ポインタテーブルから、Ａ＿スタック・ポインタが削除される。同時に、スタック・ポインタ１０は、図４に示すように、Ａ＿ＴＳが確保される前の境界に位置する。
【０１４５】
タスクＢは終了しているため、タスクＣに戻る処理が行われる。
【０１４６】
図３のタイミング６４で、タスクＣへ戻る処理の前にタスクＣの状態（制約タスクかどうか）を調べ、制約タスクの場合は、スタック・ポインタの修正（スタック・ポインタテーブルからＣ＿スタック・ポインタの情報を取得し、スタック・ポインタを、Ｃ＿スタック・ポインタのトップに変更）が行なわれる。
【０１４７】
図３のタイミング６５の開始時点で、システム・スタック領域は、図６の１０−Ｅの状態になる。図６の１０−Ｅの９４のように、スタック・ポインタより上に積まれている情報（Ｂ＿ＴＳの情報）はシステム上では、不必要な情報となる。
【０１４８】
図３のタイミング６５でタスクＣに戻る処理が行われる。図６の１０−Ｅの９３のようにスタック・ポインタは正常な位置に修正されている。
【０１４９】
図３のタイミング６６でタスクＣが終了する。システム・スタック領域では、図４の８−Ｇで示すように、Ｃ＿ＴＳが解放され、図５の９−Ｇに示すように、スタック・ポインタテーブルから、Ｃ＿スタック・ポインタを削除する。
【０１５０】
本実施例では、スタック・ポインタの修正を行うことで、スタック・ポインタのズレを回避し、制約タスクを対象としたｔｅｒ＿ｔｓｋの発行を可能としている。
【０１５１】
本実施例によれば、時間制約を守れなかったタスクを強制終了させることが可能になるので、時間制約に厳しいシステムでも制約タスクが使用できる。
【０１５２】
図１２は、本実施例の作用効果の一例を示す図である。この例では、タスクＢを、タスクＣの実行後２ｍｓで開始しなければならないものとする。図１２において、２０−Ａは、時刻を示し、２０−Ｂは、正常時の動作を示す。タスクＣを２ｍｓ、Ｂを１ｍｓ、Ａを１ｍｓ実行している。
【０１５３】
２０−Ｃは、異常時の動作を示している。タスクＣを３ｍｓ、タスクＢを１ｍｓ、タスクＡを１ｍｓ実行している。すなわち、タスクＢはタスクＣの実行後２ｍｓで開始していない。
【０１５４】
２０−Ｄは、本発明の一実施例を説明するための図であり、タスクＣの強制終了が行われている。タスクＣをタイミング２００で強制終了させることにより、タスクＢを、タスクＣの実行後２ｍｓで開始させることができる。
【０１５５】
一方、２０−Ｃ（比較例）のように、タスクＣが正しい時間に終了しなかった場合、タスクＢの開始時刻は、タスクＣの終了が遅れた時間だけ遅れる。
【０１５６】
このように、本実施例によれば、タスクＣを（２００の時刻で）強制終了させることによりタスクＢの開始時刻を遵守することができる。
【０１５７】
なお、上記実施例では、ＲＴＯＳを例に説明したが、ＲＴＯＳ以外にも、任意のＯＳのタスク制御、プロセス制御に適用してもよいことは勿論である。以上、本発明を上記実施例に即して説明したが、本発明は、上記実施例の構成にのみ限定されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【０１５８】
【図１】本発明の一実施例におけるスタック・ポインタの情報を示す図である。
【図２】本発明の一実施例におけるリアルタイムＯＳのスタック・ポインタテーブルの構成を示す図である。
【図３】本発明の一実施例におけるタスク実行状態の推移の様子を模式的に示す図である。
【図４】本発明の一実施例におけるシステム・スタック領域の状態変化の様子を示す図である。
【図５】本発明の一実施例におけるスタック・ポインタテーブル情報の推移の様子を示す図である。
【図６】本発明の一実施例におけるシステム・スタック領域とスタック・ポインタテーブル情報の推移の様子を示す図である。
【図７】本発明の一実施例における制約タスク起動時の処理手順を示すフローチャートである。
【図８】本発明の一実施例における制約タスク終了時の処理手順を示すフローチャートである。
【図９】本発明の一実施例における制約タスクの待ち状態への移行時の処理手順を示すフローチャートである。
【図１０】本発明の一実施例における制約タスクを対象としたｔｅｒ＿ｔｓｋ発行時の処理手順を示すフローチャートである。
【図１１】本発明の本発明の一実施例における制約タスクへ復帰する時の処理手順を示すフローチャートである。
【図１２】本発明の一実施例の作用効果を説明するための図である。
【図１３】本発明の一実施例のシステム構成を示す図である。
【図１４】従来のシステムにおけるタスク実行状態の推移の様子を示す図である。
【図１５】従来のシステムにおけるシステム・スタック領域の状態変化を示す図である。
【図１６】従来のシステムにおける通常タスクと制約タスクのタスク・スタック領域の違いを示す図である。
【図１７】比較例として従来のシステムにおいて制約タスクの強制終了時のシステム・スタック領域に起きる現象を説明する図である。
【図１８】比較例として従来のシステムにおける制約タスク起動時の処理手順を示すフローチャートである。
【図１９】比較例として従来のシステムにおける制約タスク終了時の処理手順を示すフローチャートである。
【図２０】比較例として従来のシステムにおける制約タスクの待ち状態への移行時の処理手順を示すフローチャートである。
【図２１】比較例として従来のシステムにおける制約タスクを対象とした  ｔｅｒ＿ｔｓｋ  発行時の処理手順を示すフローチャートである。
【図２２】比較例として従来のシステムにおける制約タスクへ復帰する時の処理手順を示すフローチャートである。
【符号の説明】
【０１５９】
１〜８
１０  スタック・ポインタ
４０  優先度
４１  トップアドレス
５０  スタック・ポインタテーブルを示すポインタ
５１  スタック・ポインタテーブル
６０〜６６  タイミング
９０  Ｂ＿ＳＰ（タスクＢのスタック・ポインタテーブル）
９２  Ｃ＿ＳＰ（タスクＣのスタック・ポインタテーブル）
９３  スタック・ポインタ
９４  スタック・ポインタより上の領域
９５  Ｂ＿ＴＳ
１００〜１０２、１１０  ステップ
１２０〜１２３、１３０  ステップ
１４０〜１４３、１５０  ステップ
１６０〜１６３、１７０〜１７２  ステップ
１８０〜１８４、１９０、１９１  ステップ
２２１  ＣＰＵ
２２２  ＲＯＭ
２２３  ＲＡＭ
２２４  ＲＴＯＳデータ領域
２３０  ＳＰテーブル
【図１】
2006146329.tif 000003
【図２】
2006146329.tif 000004
【図３】
2006146329.tif 000005
【図４】
2006146329.tif 000006
【図５】
2006146329.tif 000007
【図６】
2006146329.tif 000008
【図７】
2006146329.tif 000009
【図８】
2006146329.tif 000010
【図９】
2006146329.tif 000011
【図１０】
2006146329.tif 000012
【図１１】
2006146329.tif 000013
【図１２】
2006146329.tif 000014
【図１３】
2006146329.tif 000015
【図１４】
2006146329.tif 000016
【図１５】
2006146329.tif 000017
【図１６】
2006146329.tif 000018
【図１７】
2006146329.tif 000019
【図１８】
2006146329.tif 000020
【図１９】
2006146329.tif 000021
【図２０】
2006146329.tif 000022
【図２１】
2006146329.tif 000023
【図２２】
2006146329.tif 000024
【手続補正書】
【提出日】平成16年12月3日(2004.12.3)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
【非特許文献１】ITRONの仕様書：uITRON 4.0仕様 Ver.4.02.00 5.2.1 制約タスク  トロン協会ホームページ  インターネット＜URL：http://www.assoc.tron.org＞