(57)【特許請求の範囲】
【請求項１】
タスクのタイムアウト時間をシステムタイマとタスク管理ブロックの時間待ちリストとによって管理する、オペレーティングシステムのタイマ管理方法において、
上記システムタイマの繰り返し時刻を示す連接符号をメモリ上に設定する符号設定処理と
各タスクのタスク管理ブロックを、該各タスクのタイムアウト時間の順に、上記連接符号の前後に配設するリスト生成処理とを備えたことを特徴とする、オペレーティングシステムのタイマ管理方法。
【請求項２】
上記連接符号が上記時間待ちリストの終点を兼ねる、請求項１に記載のオペレーティングシステムのタイマ管理方法。
【請求項３】
上記連接符号を、上記システムタイマの繰り返し時刻以降のタイムアウト時間を持つタスクが最初に発生したときに設定する上記符号設定処理を備える、請求項１に記載のオペレーティングシステムのタイマ管理方法。
【請求項４】
タスクのタイムアウト時間をシステムタイマとタスク管理ブロックの時間待ちリストとによって管理する、オペレーティングシステムのタイマ管理方法において、
各タスクのタスク管理ブロックを、該各タスクのタイムアウト時間の順に配設するリスト生成処理と
システムタイマの繰り返し時刻以降の、最も早いタイムアウト時間を持つタスクのタスク管理ブロックを指示するポインタをメモリ上に設定するポインタ設定処理とを備えたことを特徴とする、オペレーティングシステムのタイマ管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はオペレーティングシステム（以下「ＯＳ」と略す）、特にマルチタスクＯＳにおける、各タスクのタイムアウト時間の管理方法に関するものである。
【０００２】
【従来の技術】
複数のタスクを並列して実行するマルチタスクＯＳにおいては、これら複数のタスクを、各タスクごとにメモリ上の領域であるタスク管理ブロック（Ｔａｓｋ  Ｃｏｎｔｒｏｌ  Ｂｌｏｃｋ：  以下「ＴＣＢ」と略す）を割り当てることにより管理している。特に各タスクのタイムアウト時間については、これらタスクのＴＣＢをそのタイムアウト時間の早い順に並べたリスト構造を生成することにより管理している。このリスト構造を時間待ちリストと呼ぶ。
【０００３】
図７（ａ）はこの時間待ちリストの概念図であり、システムタイマＴは現在の時間２００を示し（図中の”ｓｙｓｔｉｍ＝２００”）、時間待ちリストの始点Ｉのポインタはタイムアウト時間３００の（図中の”ｔｍｏ＝３００”  ）ＴＣＢ１を指示している。これは具体的には時間待ちリストの始点Ｉに相当するアドレスのデータ中に、ＴＣＢ１のアドレスを書き込むことにより実現される。また上記タイムアウト時間３００はＴＣＢ１に書き込まれている。同様にＴＣＢ１のポインタはタイムアウト時間５００のＴＣＢ２を指示し、ＴＣＢ２のポインタは時間待ちリストの終点Ｆを指示している。
【０００４】
ここでＴＣＢ３によって管理されるタイムアウト時間４００のタスクが発生すると、図７（ｂ）に示すようにポインタの繋ぎ換えにより、このＴＣＢ３は上記時間待ちリスト中のＴＣＢ１とＴＣＢ２との間に挿入される。このように時間待ちリストをタイムアウトの時間の早い順に配列するのは、タイムアウト時間を経過したタスクのＴＣＢをこの時間待ちリストから削除する際に、この時間待ちリストの先頭のＴＣＢから順に削除できるという便宜のためである。
【０００５】
このような時間待ちリストによるタイムアウト時間の管理においては、以下に述べるようにシステムタイマの繰り返しが生じたときの処理が問題となる。
【０００６】
即ち、例えば１６ｂｉｔの符号無し整数によるシステムタイマの場合、その上限値は６５５３５（０ｘｆｆｆｆ）であり、この時刻を超過するとシステムタイマの繰り返しが生じ、システムタイマの値は０に戻る。
【０００７】
一般に、タスクのタイムアウト時間は、このタスクを管理するＴＣＢからＯＳに対して、現在時刻からタイムアウトするまでの時間である解除時間を通知することによって指定される。
【０００８】
従って、例えば現在時間６５５００に対して、これより時間３００経過後にタイムアウトするようなタスクが発生した場合、ＯＳはこのタスクのタイムアウト時間を６５５００＋３００＝６５８００と算出する。
【０００９】
ところが、この６５８００という時間はシステムタイマの上限値６５５３５を超過しているために、このままの値ではシステムタイマが管理することができない。そこでＯＳはシステムタイマの繰り返し時刻を差し引いた値、即ち６５８００−（６５５３５＋１）＝２６４をこのタスクのタイムアウト時間とし、ＴＣＢに書き込む。
【００１０】
このタスクのタイムアウト時間２６４は上述したシステムタイマの繰り返しに起因する見かけの値であるので、図７（ｃ）に示すようにこのタスクを管理するＴＣＢ４は上記時間待ちリスト中ではＴＣＢ２の末尾に挿入されなければならない。そしてこの適切な挿入を行うためには、この時間待ちリスト中の全てのＴＣＢについて、それぞれ上記システムタイマの繰り返し時刻以前のものであるか否かを判断した上で、上記適切な挿入の位置を検索する必要があり、時間待ちリストの構成に時間がかかるという問題があった。
【００１１】
このような問題点を解決する方法の一つが特許第２９３８０７２号である。この方法は、以下に説明する第１の時間待ちリストと、第２の時間待ちリストとの異なる２本の時間待ちリストを生成することを特徴とする。即ち、時間待ちのタスクが発生した際に、このタスクのタイムアウト時間がシステムタイマの繰り返し時刻以前であるか以降であるかを判断する。そして繰り返し時刻以前であれば第１の時間待ちリストへ、繰り返し時刻以降であれば第２の時間待ちリストへ、このタスクのＴＣＢをタイムアウト時間の順に配列する。更に、システムタイマの繰り返しが生ずるたびに上記第１と第２の時間待ちリストを切り替えて、現在管理している時間待ちリストの先頭からタイムアウト時間を経過したタスクのＴＣＢを削除する。
【００１２】
【発明が解決しようとする課題】
しかし上記特許第２９３８０７２号の方法には以下のような問題がある。
【００１３】
即ち、タイムアウト時間を経過したタスクのＴＣＢを削除するにあたって、システムタイマの繰り返しが生ずるたびに管理する時間待ちリストを切り替えるために、この管理中の時間待ちリストを指示するポインタを設定する必要がある。そしてこのポインタの指示を上記繰り返しの都度切り替えなければならないため、メモリの使用量が大きくなり、処理に時間がかかる。
【００１４】
本発明はこのような問題に鑑みてなされたものであり、メモリの使用量が少なく処理が高速なマルチタスクＯＳの管理方法を提供するものである。
【００１５】
【課題を解決するための手段】
上記の課題を解決するために、本発明では以下の方法を採用している。
【００１６】
先ず、メモリ上にシステムタイマの繰り返し時刻を示す連接符号を設定する。そして、上記繰り返し時刻以前のタイムアウト時間を持つタスクのタスク管理ブロックは、時間待ちリストの始点と上記連接符号との間に、タイムアウト時間の順に配設する。同様に、上記繰り返し時刻以降のタイムアウト時間を持つタスクのタスク管理ブロックは、上記連接符号と時間待ちリストの終点との間に、タイムアウト時間の順に挿入する。
【００１７】
あるいは、全てのタスクのタスク管理ブロックをタイムアウト時間の順に配設するとともに、上記繰り返し時刻以降の最も早いタイムアウト時刻を持つタスクのタスク管理ブロックを指示するポインタを、メモリ上に設定する。
【００１８】
以上により、全てのタスク管理ブロックを、一列のリスト構造によって管理することができる。このため、タスクのタイムアウト時間の管理としては、タイムアウト時間を超過したタスクのタスク管理ブロックを先頭から削除するだけでよい。また新規のタスク管理ブロックの挿入に当たっては、上記連接符号あるいはポインタの前後いずれか一方で挿入箇所の検索を行えばよい。従って高速でメモリ使用量の少ないタイムアウト時間の管理が可能となる。
【００１９】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を用いて説明する。
【００２０】
（第１の実施の形態）
図１は本発明の第１の実施の形態によるリスト生成処理のフロー図である。このフロー図に基づく時間待ちリストの生成を図２を参照しながら説明する。
【００２１】
先ず、図２（ａ）はタスクの発生していない初期状態を示している。本実施の形態におけるシステムタイマＴは１６ｂｉｔの符号無し整数によるものとし、その上限値は６５５３５（０ｘｆｆｆｆ）であるとする。なお、システムタイマＴの示している現在時刻６３０００（図中の”ｓｙｓｔｉｍ＝６３０００”）は一つの例であって、特定の時刻を意味するものではない。
【００２２】
この初期状態において、オペレーティングシステム（以下「ＯＳ」と略す）の管理する時間待ちリストは始点Ｉと連接符号Ｃのみからなる。始点Ｉとシステムタイマの繰り返し点を意味する連接符号Ｃとはそれぞれメモリ上に確保された領域であり、この領域内に他のメモリ領域のアドレスを書き込むことにより、タスク管理ブロック（Ｔａｓｋ  Ｃｏｎｔｒｏｌ  Ｂｌｏｃｋ：  以下「ＴＣＢ」と略す）等を指示するポインタを設定することができる。ＴＣＢもまたメモリ上に確保された領域であり、始点Ｉ等と同様にＴＣＢ等を指示するポインタを設定することができる。
【００２３】
この初期状態では始点Ｉのポインタは連接符号Ｃを指示し、連接符号Ｃのポインタは連接符号Ｃ自身を指し、当該連接符号Ｃがこの時間待ちリストの終点を兼ねるようにしている。
【００２４】
ここで例えば、上記の初期状態において、解除時間１０００のタスクＴ１が発生すると、このタスクＴ１のＴＣＢ１がＯＳに対してこの解除時間１０００を通知し、時間待ちリストの生成が開始される。そしてシステムタイマＴの示す現在時刻６３０００とこの解除時間１０００とに基づいて、ＯＳはこのタスクＴ１のタイムアウト時間を６３０００＋１０００＝６４０００と算出する（図１ステップ１０）。
【００２５】
続いてシステムタイマＴの上限値、即ち繰り返し時刻６５３５５と上記タイムアウト時間６４０００との比較処理が行われ、始点Ｉと連接符号Ｃとの間にＴＣＢ１が挿入される（図１ステップ１１ＹＥＳ→ステップ１２）。即ち、図２（ｂ）に示すように、始点ＩのポインタをＴＣＢ１を指示するように設定し、ＴＣＢ１のポインタを連接符号Ｃを指示するように設定する。なお、図２（ｂ）中の”ｔｍｏ＝６４０００”  は上記タイムアウト時間６４０００がＯＳによってＴＣＢ１に書き込まれたことを示している。
【００２６】
一方、上記タスクＴ１と同時に解除時間３０００のタスクＴ２が発生した場合は、ＯＳによりこのタスクＴ２のタイムアウト時間は６３０００＋３０００＝６６０００と算出される。これはシステムタイマＴの繰り返し時刻６５３５５を超過するので、このタスクＴ２の６ＴＣＢ２が連接符号Ｃの後方に挿入される（図１ステップ１１ＮＯ→ステップ１３）。即ち、連接符号ＣのポインタをＴＣＢ２を指示するように設定し、ＴＣＢ２のポインタを連接符号Ｃを指示するように設定する。そしてこのときＴＣＢ２が管理するタイムアウト時間は６６０００−（６５３５５＋１）＝４６４となる（図２（ｃ））。
【００２７】
以下同様に、上記繰り返し時刻以前のタイムアウト時間を持つタスクが発生した場合は、連接符号Ｃの前方にこのタスクのＴＣＢが時間の順に挿入される。また、上記繰り返し時刻以降のタイムアウト時間を持つタスクが発生した場合は、連接符号Ｃの後方にこのタスクのＴＣＢが時間の順に挿入される。従って全てのＴＣＢを一列の時間待ちリストで管理できるようになるが、、各ＴＣＢの挿入位置を検索する処理は、各ＴＣＢのタイムアウト時間によって、連接符号Ｃの前方または後方の一方のみで行えばよい。
【００２８】
図３（ａ）は上記のリスト生成処理によって生成された時間待ちリストの一例である。
【００２９】
上述したように、全てのＴＣＢを一列の時間待ちリストで管理しているため、タスクのタイムアウト時間の管理としては、タイムアウト時間を超過したタスクのＴＣＢを先頭から削除するだけでよい（図３（ｂ））。
【００３０】
ここで、上記連接符号Ｃの前方のＴＣＢが全て削除され（図３（ｃ））、システムタイマＴが繰り返しを生じた場合には、始点Ｉのポインタを連接符号Ｃの直後のＴＣＢ２を指示するように切り替える。そしてさらに連接符号Ｃのポインタを連接符号Ｃ自身を指すように切り替えて、図３（ｄ）に示すような時間待ちリストを生成すれば、上記のリスト生成処理が繰り返し適用できる。
【００３１】
以上では連接符号Ｃを初期状態から設定するものとして説明したが、連接符号Ｃを上記繰り返し時刻以降のタイムアウト時間を持つタスクが最初に発生した際に設定してもよい。
【００３２】
即ち、初期状態においては、時間待ちリストの始点Ｉのポインタは終点Ｆを指示する（図４（ａ））。ここで終点Ｆは始点Ｉ等と同様なメモリ上の領域である。そしてシステムタイマＴの繰り返し時刻以前のタイムアウト時間を持つタスクについては、ＴＣＢが上記始点Ｉと終点Ｆとの間に、タイムアウト時間の順に挿入される（図４（ｂ））。上記繰り返し時刻以降のタイムアウト時間を持つタスクが最初に発生したとき、連接符号Ｃを設定するとともに上記連接符号Ｃの後方にこのタスクのＴＣＢを挿入する（図４（ｃ））。以降、ＴＣＢの削除については図３において説明した処理と同様である。
【００３３】
（第２の実施の形態）
図５は本発明の第２の実施の形態によるリスト生成処理のフロー図である。このフロー図に基づく時間待ちリストの生成を図６を参照しながら説明する。
【００３４】
始点Ｉ、終点Ｆ、システムタイマＴ、及びタスクのタイムアウト時間の算出方法については第１の実施の形態と同様であるので、説明を省略する。
【００３５】
図６（ａ）はタスクの発生していない初期状態を（ｓｙｓｔｉｍ＝６３０００）示し、始点Ｉのポインタは終点Ｆを指示している。この初期状態において、時間待ちのタスクＴ５（ｔｍｏ＝６４０００  ）、タスクＴ６（ｔｍｏ＝６５０００  ）が発生したものとする。この場合は図６（ｂ）に示すように、ＯＳはこのタスクＴ５、タスクＴ６をそれぞれ管理するＴＣＢ５、ＴＣＢ６を始点Ｉと終点Ｆとの間に、タイムアウト時間の順に挿入する（図５ステップ５１ＹＥＳ→ステップ５４）。
【００３６】
ここで、システムタイマＴの繰り返し時刻を超過したタイムアウト時刻６６０００を持つタスクＴ７（ｔｍｏ＝４６４  ）が発生した場合、ＯＳはタスクＴ７のＴＣＢ７を、ＴＣＢ６と終点Ｆとの間に挿入する。そして更に、図６（ｃ）に示すように、メモリ上にこのＴＣＢ７を指示するポインタＰを設定する。（図５ステップ５１ＮＯ→ステップ５２ＮＯ→ステップ５４）
その後、時間待ちのタスクが発生した場合には、このタスクのタイムアウト時間が、ポインタＰの指示するＴＣＢ７のタスクのタイムアウト時間より早いか否かを判断する（図５ステップ５３）。そして早い場合はこのＴＣＢ７の前方に（図５ステップ５３ＹＥＳ→ステップ５７）、遅い場合はこのＴＣＢ７の後方に（図５ステップ５３ＮＯ→ステップ５６）、上記時間待ちのタスクのＴＣＢをタイムアウト時間の順に挿入する。
【００３７】
ここで、タイムアウト時間が上記ＴＣＢ７のタスクよりも早く、且つ上記繰り返し時刻を超過しているタスクが発生したときは、ポインタＰをこのタスクのＴＣＢを指示するように切り替える（図５ステップ５７）。これによって、ポインタＰを常にシステムタイマＴの繰り返し時刻以降の、最も早いタイムアウト時間を持つタスクのＴＣＢを指示するように設定する。
【００３８】
以上によって、全てのＴＣＢを一列の時間待ちリストで管理できるようになるので、タイムアウト時間の管理に当たっては、タイムアウト時間を経過したタスクのＴＣＢを上記時間待ちリストの先頭から削除すればよい。システムタイマＴの繰り返し時刻を経過したときは、上記ポインタＰを消去する。
【００３９】
なお、以上ではポインタＰを、システムタイマＴの繰り返し時刻を超過したタイムアウト時間を持つタスクが、最初に発生したときに設定するものとしたが、初期状態でポインタＰが終点Ｆを指示するように設定してもよい。また終点ＦがポインタＰを兼ねるようにすることもできる。
【００４０】
【発明の効果】
以上説明した方法により、全てのタスク管理ブロックを、一列のリスト構造によって管理することができる。このため、タスクのタイムアウト時間の管理としては、タイムアウト時間を超過したタスクのタスク管理ブロックを先頭から削除するだけでよい。従って高速でメモリ使用量の少ないタイムアウト時間の管理が可能となる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態によるリスト生成処理のフロー図。
【図２】本発明の第１の実施の形態により生成される時間待ちリストの概念図。
【図３】本発明の第１の実施の形態によるタスク管理ブロックの管理方法を示す概念図。
【図４】本発明の第１の実施の形態により生成される時間待ちリストの概念図。
【図５】本発明の第２の実施の形態によるリスト生成処理のフロー図。
【図６】本発明の第２の実施の形態により生成される時間待ちリストの概念図。
【図７】従来の時間待ちリストの概念図。
【符号の説明】
Ｃ  連接符号
Ｐ  ポインタ
Ｉ  始点
Ｆ  終点
Ｔ  システムタイマ
１、２、３、４、５、６、７  タスク管理ブロック
【図１】
0003613513.tif 000002
【図２】
0003613513.tif 000003
【図３】
0003613513.tif 000004
【図４】
0003613513.tif 000005
【図５】
0003613513.tif 000006
【図６】
0003613513.tif 000007
【図７】
0003613513.tif 000008