(57)【要約】【課題】本発明は、特定の処理の処理負荷を分散させることにより、次に行いたい処理への影響が小さくなるようなタスク処理方法を提供する。【解決手段】イベントドリブンを利用して複数のタスクを並行処理する疑似マルチタスク処理において、特定の処理を細かい処理単位に分割し、その細かく区切った処理をあるイベントごとに少しずつ行うことで処理負荷を分散させるのだが、このとき、別に条件を定めることにより、１度に行う処理の量（サイズ）を動的に決定することができるので、分割処理を行っている時間帯に実行している他の処理への影響が小さくなるように、タスク処理、管理を行うことが可能となる。【選択図】      図３
2005339283.tif 000002
【特許請求の範囲】
【請求項１】
１つのＣＰＵを複数のタスクでシェアリングしながらメインで処理をするタスクＡと、一定間隔の割込み駆動で前記タスクＡに割込んで動作をするタスクＢとを有する処理動作体系からなるタスク処理方法において、
特定の処理をより細かい処理単位に分割し、その細かく区切った処理を前記タスクＢの１割込みごとに一つずつ、あるいは１割込みごとに複数の、細かい処理単位を順番にタスクＢで実行させる、または処理順を入替えても差し支えがない場合は処理順を入替えながらタスクＢで実行させる、
ことを特徴とするタスク処理方法。
【請求項２】
１つのＣＰＵを複数のタスクでシェアリングしながらメインで処理をするタスクＡと、一定間隔の割込み駆動でタスクＡに割込んで動作をするタスクＢとを有する処理動作体系からなるタスク処理方法において、
特定の処理をある割込みから次の割込みまでの間の１単位時間よりも十分小さなサイズに分割しておき、前記タスクＢにおいて、その小さなサイズに分割した処理を１割込みごとに数回ずつ行い、その動作を繰り返し行うことによって処理を完了させる、
ことを特徴とするタスク処理方法。
【請求項３】
請求項１ないし請求項２のいずれかに記載のタスク処理方法において、
前記タスクＡが前記タスクＢに対して処理開始の通知をして前記特定の処理を開始させる場合に、前記タスクＡの求める条件として、前記タスクＢの割込み回数に基づき処理を完了させる条件を同時に示し、前記タスクＢが１割込みごとに行う処理の量を動的に決定する、
ことを特徴とするタスク処理方法。
【請求項４】
請求項１ないし請求項２のいずれかに記載のタスク処理方法において、
前記タスクＡが前記タスクＢに対して処理開始の通知をして前記特定の処理を開始させる場合に、前記タスクＡの求める条件として、１単位時間中の前記タスクＡの処理可能時間の条件を同時に示し、前記タスクＢが１割込みごとに行う処理の量を動的に決定する、
ことを特徴とするタスク処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルタスク処理のみ実行可能なオペレーティングシステムを備えるシステムにおいて、特に、イベントドリブン、たとえば割込み駆動を利用して複数のタスクを疑似的に並行処理する疑似マルチタスク処理を行う際の、処理負荷を分散させるためのタスク処理方法に関するものである。
【背景技術】
【０００２】
従来、シングルタスクのオペレーティングシステム上において、イベントドリブン、たとえば割込み駆動を利用した疑似マルチタスク処理を行うために以下のようなタスク管理方式を採用している（例えば特許文献１参照）。
【０００３】
説明のために、例えば、図１に示すような、タスクＡとタスクＢの２つのタスクが１つのＣＰＵを共有して動作している状況を考える。
【０００４】
図１は、イベントドリブンを利用した疑似マルチタスク処理を示す図である。
図１において、タスクＡは、周期Ｔの割込み駆動で動作し、タスクＢは、メインで処理を行っている。つまりタスクＡが処理を行っていない間だけタスクＢが処理を行うことができる。
【０００５】
図２（ａ）は従来のタスク処理方法を示す図であり、それぞれタスク処理の通常状態（i）タスクＢで第１の処理を行なう場合（ii）、タスクＡで第１の処理をそのまま行なう場合（iii）を示す。
【特許文献１】特開平６−１１９１８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ここで、タスクＢにおいて、ある長さの第１の処理を行おうとすると、図２（ａ）（ii）に示すように、第１の処理が分割されて処理される。しかしながら、タスクＢは第１の処理を行っている間は、当然、別の処理を行うことはできない。もし第１の処理が時間のかかる処理であれば、次の処理が行える状態になるまで長い間待たなければいけないことになるという問題があった。
【０００７】
また、タスクＡにおいて第１の処理を行うとする場合、図２（ａ）（iii）に示すようにタスクＢからの第１の処理の開始要求のあと、そのまま第１の処理を行うと、周期Ｔの割込みがくずれ、処理が破綻してしまう。そのため、タスクＡは、タスクＡ自身の処理と第１の処理との両方を行って周期Ｔ内に収まっている必要がある。
【０００８】
そこで、本発明は、前記従来の課題を解決するためになされたもので、特定の処理の処理負荷を分散させることにより、次に行いたい処理への影響が小さくなるようなタスク処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前記課題を解決するために、本発明の請求項１によるタスク処理方法は、１つのＣＰＵを複数のタスクでシェアリングしながらメインで処理をするタスクＡと、一定間隔の割込み駆動で前記タスクＡに割込んで動作をするタスクＢとを有する処理動作体系からなるタスク処理方法において、特定の処理をより細かい処理単位に分割し、その細かく区切った処理を前記タスクＢの１割込みごとに一つずつ、あるいは１割込みごとに複数の、細かい処理単位を順番にタスクＢで実行させる、または処理順を入替えても差し支えがない場合は処理順を入替えながらタスクＢで実行させることを特徴とするものである。
【００１０】
本発明の請求項２によるタスク処理方法は、１つのＣＰＵを複数のタスクでシェアリングしながらメインで処理をするタスクＡと、一定間隔の割込み駆動でタスクＡに割込んで動作をするタスクＢとを有する処理動作体系からなるタスク処理方法において、特定の処理をある割込みから次の割込みまでの間の１単位時間よりも十分小さなサイズに分割しておき、前記タスクＢにおいて、その小さなサイズに分割した処理を１割込みごとに数回ずつ行い、その動作を繰り返し行うことによって処理を完了させることを特徴とするものである。
【００１１】
本発明の請求項３によるタスク処理方法は、請求項１ないし請求項２のいずれかに記載のタスク処理方法において、前記タスクＡが前記タスクＢに対して処理開始の通知をして前記特定の処理を開始させる場合に、前記タスクＡの求める条件として、前記タスクＢの割込み回数に基づき処理を完了させる条件を同時に示し、前記タスクＢが１割込みごとに行う処理の量を動的に決定することを特徴とするものである。
【００１２】
本発明の請求項４によるタスク処理方法は、請求項１ないし請求項２のいずれかに記載のタスク処理方法において、前記タスクＡが前記タスクＢに対して処理開始の通知をして前記特定の処理を開始させる場合に、前記タスクＡの求める条件として、１単位時間中の前記タスクＡの処理可能時間の条件を同時に示し、前記タスクＢが１割込みごとに行う処理の量を動的に決定することを特徴とするものである。
【発明の効果】
【００１３】
本発明のタスク処理方法によれば、特定の処理の処理負荷を分散させるために、その処理を動的に異なったサイズに分割させて、次に行いたい処理への影響が小さくなるようにタスク処理を行うことが可能となる。
【発明を実施するための最良の形態】
【００１４】
（実施の形態１）
図２（ｂ）は本発明の実施の形態１によるタスク処理方法を示す図であり、タスクＡで第１の処理を分割して行う場合を示している。
【００１５】
図２（ｂ）に示すように、第１の処理を、タスクＡ自身の処理と足し合わせても周期Ｔ内に収まるサイズに分割し、各割込み処理後、あるいは処理の途中、もしくは処理前に、第１の処理を分割した処理ａ、処理ｂ、処理ｃ、…を行うことで、タスクＡにおいて第１の処理を実行することができる。
また、第１の処理を分割する際に、等サイズに分割する、または色々なサイズに分割する方法が考えられる。
【００１６】
以下、本発明のタスク処理方法について詳しく説明する。
図３は、本発明の実施の形態１によるタスク処理方法を示す図であり、タスクＡが定常状態でない場合（i）、タスクＡで第１の処理を一気に行なう場合（ii）を示す。
【００１７】
図３（ii）において、タスクＢがタスクＡに対し第１の処理の処理開始要求を出すと、第１の処理を、タスクＡ自身の処理と足し合わせて周期Ｔ内に収まるサイズに分割し、タスクＡを行なっていない期間に分割された第１の処理を連続して行なう。このとき、第１の処理が終了するまでの間、タスクＡ自身の処理は行なわれているが、タスクＢの処理は行なわれていない。
【００１８】
まず、第１の処理を等サイズに分割する方法について述べる。
図３（iii）は、本発明の実施の形態１によるタスク処理方法におけるタスクＡで第１の処理を等分割して行なう場合を示す。
【００１９】
図３（iii）において、第１の処理が、単純な処理の繰り返し、たとえばΣｎの計算処理のような足し算の繰り返しなどの場合、１割込み処理の間に１つだけ計算処理を行うようにする。つまり、足し算１回分の処理単位である第２の処理に分割する。この処理を、１回の割込みごとに１回ずつ行うことによって、第１の処理を等サイズに分割して処理することができる。（方式１）
【００２０】
また、このとき、１回の割込みに対して、足し算処理を１回でなく数回繰り返すことにより、１回の割込みで処理する分割処理の大きさを増減させ、等サイズではなく、色々なサイズに分割して処理することができる。（方式２）
【００２１】
図３（iv）は、本発明の実施の形態１によるタスク処理方法におけるタスクＢの処理時間が一定になるように第１の処理を分割して行なう場合を示す。
【００２２】
ここで、第１の処理を色々なサイズに分割する方法として、色々な処理が集まって構成されている第１の処理を、処理１つ１つの単位、もしくは数個の処理で１つの単位である第３の処理に分割する。この処理を、１回の割込みごとに１回ずつ行うことによって、第１の処理を色々なサイズに分割して処理することができる。（方式３）
【００２３】
また、このとき、１回の割込みに対して、分割させた処理を１回でなく数回繰り返すことによって、図３（iv）に示すように、１回の割込みで処理する分割処理の大きさをさらに変化させることができる。（方式４）
【００２４】
次に、１回の割込み処理に対する、分割処理のサイズの決定方法について述べる。
まず、等サイズに分割する場合、方式１について述べる。これには、１回の割り込みに、必ず１回の処理を行うという方法がある。タスクＢがタスクＡに対し第１の処理の開始要求を出した次の割込みから、第１の処理内の処理の繰り返し数だけの回数の割込みで処理を行い、この方式を実現させる。
【００２５】
また、この繰り返し処理を数回に１回は行わないようにする、あるいはまた、数回の割り込みに対して、１回だけ処理を行うようにする、といった応用も考えられる。
【００２６】
次に、色々なサイズに分割する場合、方式２について述べる。
図４は、本発明の実施の形態１によるタスク処理方法の詳細図である。
【００２７】
図４において、第１の処理を等サイズの第２の処理に分割している。これには、タスクＢから条件を与えてもらうという方法がある。タスクＢがタスクＡに対し第１の処理の開始要求を出す際に、開始要求と一緒に条件を与える。条件としては、タスクＡの割込み処理１回に、何回、第２の処理を行うか、タスクＡの割込み回数が何回で、この第１の処理をすべて終了させるか、タスクＡの割込み処理のあと、タスクＢの処理時間がどれほど残っていればいいか、などが考えられる。
【００２８】
これらの条件はひとつずつ指定しても良いが、同時に複数指定するようにしても良い。また、第１の処理の開始要求を出すたびに一緒に条件を出したりせずに、最初に条件を決めてしまい、その条件に従いその後の分割処理を行うようにしても良い。
【００２９】
次に、色々なサイズに分割する場合、方式３および、方式４について述べる。
図５は、本発明の実施の形態１によるタスク処理方法の詳細図である。
【００３０】
図５において、第１の処理をそれぞれ異なるサイズの第３の処理に分割している。これにも方式２同様、タスクＢから条件を与えてもらうという方法がある。タスクＢがタスクＡに対し第１の処理の開始要求を出す際に、開始要求と一緒に条件を与える。与える条件としては、タスクＡの割込み処理１回に、何回、第３の処理を行うか、タスクＡの割込み回数が何回で、この第１の処理をすべて終了させるか、タスクＡの割込み処理のあと、タスクＢの処理時間がどれほど残っていればいいか、などが考えられる。
【００３１】
これらの条件はひとつずつ指定しても良いが、同時に複数指定するようにしても良い。また、第１の処理の開始要求を出すたびに一緒に条件を出したりせずに、最初に条件を決めてしまい、その条件に従いその後の分割処理を行うようにしても良い。
【００３２】
次に、方式２や、方式３、方式４において、タスクＢの処理時間がどれほど残っているか、という判断をどのように行うかを述べる。
タスクＡに第１の処理を組み込む際に、第１の処理の中身はどのような処理で構成されているか、タスクＡ自身の処理はどのような処理で構成されているか、それらの処理にはどれほどの時間がかかるのか、割込み周期Ｔはどのくらいか、ということは分かる。つまり、タスクＢにおいて第１の処理の開始要求が出されたときに、割込み周期Ｔは何秒で、タスクＡで行っている自身の処理は何秒程度で、タスクＢの処理のために何秒あけてあげるとすれば、この分割処理は何秒程度行うことが出来る、と判断することができる。
【００３３】
また、その時間がわかれば、図４に示すように、方式２ならば、第１の処理を等サイズで分割した第２の処理を何回行えるか、という判断をすることができる。また、図５に示すように、方式３ならば、第１の処理を分割した、それぞれ異なるサイズの第３の処理のうちのどの処理を行うのが最適か、また処理順を入替えられないのであれば、第１の処理を分割した、それぞれ異なるサイズの第３の処理のうちのどの処理まで行うことができるか、ということを判断することができる。これにより、第１の処理の分割サイズの決定を、割込みごとに動的に行うことができる。
【００３４】
このように本実施の形態によれば、第１の処理をより細かい処理単位である第２、第３の処理に分割し、その細かく区切った処理をタスクＢの１割込みごとに一つずつ、あるいは１割込みごとに複数の、細かい処理単位を順番にタスクＢで実行させる、または処理順を入替えても差し支えがない場合は処理順を入替えながらタスクＢで実行させるようにしたので、第１の処理を分割して行うことにより負荷を拡散し、タスクＢが１つの処理に時間を費やしてしまうことがなくなり、分割のサイズを動的に決定することにより第１の処理が無駄に間延びしてしまうのを防ぐことができるという効果がある。
【産業上の利用可能性】
【００３５】
本発明のタスク処理方法は、特定の処理を動的に異なったサイズに分割させて、次に行いたい処理への影響が小さくなるようにタスク処理を行うことが可能であり、割込み駆動を利用して複数のタスクを疑似的に平行処理する疑似マルチタスク処理を行う際の、処理負荷を分散させるためのタスク処理方法等として有用である。
【図面の簡単な説明】
【００３６】
【図１】イベントドリブンを利用した疑似マルチタスク処理を示す図である。
【図２（ａ）】従来のタスク処理方法を示す図である。
【図２（ｂ）】本発明の実施の形態１によるタスク処理方法を示す図である。
【図３】本発明の実施の形態１によるタスク処理方法を示す図である。
【図４】本発明の実施の形態１によるタスク処理方法の詳細図である。
【図５】本発明の実施の形態１によるタスク処理方法の詳細図である。
【図１】
2005339283.tif 000003
【図２（ａ）】
2005339283.tif 000004
【図２（ｂ）】
2005339283.tif 000005
【図３】
2005339283.tif 000006
【図４】
2005339283.tif 000007
【図５】
2005339283.tif 000008