(57)【要約】【課題】周期駆動タスク起床時のオーバーヘッドの少ない周期駆動タスク実行装置を実現する。【解決手段】所定のシーケンスで実行される１以上の周期駆動タスクを実行するための周期駆動タスク実行装置（１、１１ｄ）は、１以上の周期駆動タスクのいずれかに対する起床要求があると、その起床要求時に実行中のタスク１の優先度と起床要求に係る周期駆動タスクAの優先度とを比較する比較部１００と、比較の結果タスクAの優先度が実行中のタスク１の優先度よりも高い場合に、コンテキストの参照先を、周期駆動タスク用コンテキストレジスタ（PCTX）に切り替えるコンテキストレジスタ切り替え部１０１と、タスクAの実行が終了すると、所定のシーケンスにおいて定められた次に実行する周期駆動タスクBのコンテキストを、周期駆動タスク用コンテキストレジスタ（PCTX）に設定するコンテキスト設定部１０２を有する。【選択図】図６
2010102567.tif 000002
【特許請求の範囲】
【請求項１】
所定のシーケンスで実行される１以上の周期駆動タスクを実行するための周期駆動タスク実行装置であって、
前記１以上の周期駆動タスクのいずれかに対する起床要求があると、その起床要求時に実行中のタスクの優先度と前記起床要求に係る周期駆動タスクの優先度とを比較する比較部と、
該比較部の比較の結果、前記起床要求に係る周期駆動タスクの優先度が前記実行中のタスクの優先度よりも高い場合に、コンテキストの参照先を、前記起床要求に係る周期駆動タスクのコンテキストが格納された周期駆動タスク用コンテキストレジスタに切り替えるコンテキストレジスタ切り替え部と、
前記起床要求に係る周期駆動タスクの実行が終了すると、前記所定のシーケンスにおいて定められた次に実行する周期駆動タスクのコンテキストを、前記周期駆動タスク用コンテキストレジスタに設定するコンテキスト設定部と、
を有することを特徴とする周期駆動タスク実行装置。
【請求項２】
前記１以上の周期駆動タスクのそれぞれのコンテキストのそれぞれは、所定のメモリの所定の記憶領域に格納され、
前記コンテキスト設定部は、前記次に実行する周期駆動タスクのコンテキストを、前記所定のメモリの対応する記憶領域から読み出して、前記周期駆動タスク用コンテキストレジスタに設定することを特徴とする請求項１に記載の周期駆動タスク実行装置。
【請求項３】
前記１以上の周期駆動タスクのいずれかの実行中に、他の周期駆動タスクに対する起床要求が発生した場合、所定の例外処理を実行する例外処理部を有することを特徴とする請求項１に記載の周期駆動タスク実行装置。
【請求項４】
所定のシーケンスで実行される１以上の周期駆動タスクを実行するための周期駆動タスク実行方法であって、
前記１以上の周期駆動タスクのいずれかに対する起床要求があると、その起床要求時に実行中のタスクの優先度と前記起床要求に係る周期駆動タスクの優先度とを比較し、
該比較の結果、前記起床要求に係る周期駆動タスクの優先度が前記実行中のタスクの優先度よりも高い場合に、コンテキストの参照先を、前記起床要求に係る周期駆動タスクのコンテキストが格納された周期駆動タスク用コンテキストレジスタに切り替え、
前記起床要求に係る周期駆動タスクの実行が終了すると、前記所定のシーケンスにおいて定められた次に実行する周期駆動タスクのコンテキストを、前記周期駆動タスク用コンテキストレジスタに設定する、
ことを特徴とする周期駆動タスク実行方法。
【請求項５】
コンピュータに、所定のシーケンスで実行される１以上の周期駆動タスクを実行させるためのプログラムであって、
前記１以上の周期駆動タスクのいずれかに対する起床要求があると、その起床要求時に実行中のタスクの優先度と前記起床要求に係る周期駆動タスクの優先度とを比較する機能と、
該比較の結果、前記起床要求に係る周期駆動タスクの優先度が前記実行中のタスクの優先度よりも高い場合に、コンテキストの参照先を、前記起床要求に係る周期駆動タスクのコンテキストが格納された周期駆動タスク用コンテキストレジスタに切り替る機能と、
前記起床要求に係る周期駆動タスクの実行が終了すると、前記所定のシーケンスにおいて定められた次に実行する周期駆動タスクのコンテキストを、前記周期駆動タスク用コンテキストレジスタに設定する機能とを実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、周期駆動タスク実行装置、周期駆動タスク実行方法及びプログラムに関し、特に、所定のシーケンスで実行される周期駆動タスクの実行するための周期駆動タスク実行装置、周期駆動タスク実行方法及びプログラムに関する。
【背景技術】
【０００２】
従来より、コンピュータのオペレーティングシステム（以下、OSと略す）の一つとして、リアルタイムOSがあり、リアルタイムOSは広く利用されている。  
リアルタイムOSでは、一般に、割込ハンドラが、リアルタイムで実行されるべきアプリケーションプログラム（以下、リアルタイムアプリケーションあるいはリアルタイムタスクともいう）を、例えば所定の時間間隔で、割込処理により実行する。
【０００３】
具体的には、割込ハンドラが、例えばハードウエアタイマ等により周期的に起動される。その割込ハンドラを起動するために、タスクの実行管理を行うスケジューラは、コンテキストの切り替え処理及びディスパッチ処理を行い、割込ハンドラが実行される。  
その結果実行された割込ハンドラは、周期的に実行すべきリアルタイムアプリケーションの起床（activate）の要求を行う。
【０００４】
割込ハンドラの処理は、リアルタイムアプリケーションの起床要求後に終了し、処理は、タスクの実行管理を行うスケジューラに戻される。スケジューラは、所定のスケジューリング規則に基づいて、実行すべきタスクを決定し、コンテキストの切り替え処理及びディスパッチ処理を行う（例えば、特許文献１参照）。
【０００５】
すなわち、スケジューラが、優先度等に基づいて、次に実行すべきタスクがリアルタイムアプリケーションかあるいは他のタスクかを決定して、その決定された次に実行すべきタスクが実行される。そして、以上のような処理を繰り返すことによって、リアルタイムOSは、リアルタイムアプリケーションも含めて、各種タスクの実行を行う。
【０００６】
しかし、リアルタイムアプリケーションは割込ハンドラにより起床されるため、割込ハンドラの起床、及び割込ハンドラの実行後のスケジューラの実行という、オーバーヘッドが存在する。すなわち、リアルタイムOSは、リアルタイムアプリケーションの実行のために、オーバーヘッドである、２回のコンテキストの切り替え処理と１回のスケジューリングの処理が少なくとも必要となる、という問題を有している。
【０００７】
リアルタイムアプリケーションの実行性能の面からは、このようなオーバーヘッドは好ましくない。例えば、プログラムの設計時における検証において、種々のプログラムの機能、挙動を確認しなければならないので、上述したようなオーバーヘッドが無い方が、本来的には好ましい。オーバーヘッドが多いということは、ソフトウエアの逐次実行に対する妨げが多いということになり、ソフトウエアの検証の観点で見ると、ソフトウエアが実行を持っている状態が増加していることになり、ソフトウエアの品質自体の低下要因にもなる。
【特許文献１】特開2001-75820号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、周期駆動タスク起床時のオーバーヘッドの少ない周期駆動タスク実行装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、所定のシーケンスで実行される１以上の周期駆動タスクを実行するための周期駆動タスク実行装置であって、前記１以上の周期駆動タスクのいずれかに対する起床要求があると、その起床要求時に実行中のタスクの優先度と前記起床要求に係る周期駆動タスクの優先度とを比較する比較部と、該比較部の比較の結果、前記起床要求に係る周期駆動タスクの優先度が前記実行中のタスクの優先度よりも高い場合に、コンテキストの参照先を、前記起床要求に係る周期駆動タスクのコンテキストが格納された周期駆動タスク用コンテキストレジスタに切り替えるコンテキストレジスタ切り替え部と、前記起床要求に係る周期駆動タスクの実行が終了すると、前記所定のシーケンスにおいて定められた次に実行する周期駆動タスクのコンテキストを、前記周期駆動タスク用コンテキストレジスタに設定するコンテキスト設定部と、を有する周期駆動タスク実行装置を提供することができる。
【発明の効果】
【００１０】
本発明によれば、周期駆動タスク起床時のオーバーヘッドの少ない周期駆動タスク実行装置を実現するができる。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して本発明の実施の形態を説明する。  
まず、図１に基づき、本実施の形態に係わるコンピュータシステムの構成を説明する。図１は、本実施の形態に係わるコンピュータシステムの構成を示す模式的構成図である。
【００１２】
コンピュータシステム１は、ハードウエア２とソフトウエア３とから構成される。ハードウエア２は、中央処理装置（以下、CPUという）１１と、主メモリ１２を含んで構成される。ハードウエア２は、半導体チップ等の半導体装置である。CPU１１は、図示しないALU等の演算回路の他に、コンテキスト等を含む各種データを保持するレジスタ群１１ａ、DMAの実行を制御するDMAコントローラ（以下、DMACという）１１ｂ、各種例外処理を実行する例外処理回路１１ｃ等を含んで構成される。ハードウエア２は、他にも種々の回路を含むが、図１では省略している。
【００１３】
ソフトウエア３は、それぞれが所定の処理を行うアプリケーションプログラムである複数のタスク１４と、リアルタイムOSであるOS１５を含む。ソフトウエア３は、他にも種々のソフトウエアを含むが、図１では省略している。複数のタスク１４の中には、通常のタスクの他に、後述する１以上の周期駆動タスクが含まれている。複数のタスク１４は、OS１５の制御の下で、主メモリ１２に展開されて、CPU１１により実行される。また、図示しないが、通常の割り込みハンドラも含まれている。
【００１４】
後述する周期駆動タスク実行部１１ｄは、本実施の形態では、ソフトウエアプログラムで実現される。周期駆動タスク実行部１１ｄは、主メモリ１２にロードされて、CPU１１により実行されるが、図１では、説明を分かり易くするために、CPU１１中に含まれるように図示している。
【００１５】
コンピュータシステム１は、周期駆動タスクを実行するための周期駆動タスク実行装置を構成する。周期駆動タスク実行部１１ｄは、コンピュータシステム１に周期駆動タスクを実行させるためのプログラムである。なお、本実施の形態では、周期駆動タスク実行部１１ｄは、ソフトウエアプログラムの例で説明するが、その一部又は全部をハードウエアにより実現してもよく、その場合は、周期駆動タスク実行部１１ｄは、周期駆動タスク実行装置を構成する。
【００１６】
次に、本実施の形態における周期駆動タスクについて説明する。  
本実施の形態における周期駆動タスクとは、所定のタイミングで、例えば、所定の時間、あるいは所定のイベント（部材の位置、角度等の検出というイベント）で、駆動されるタスクである。
【００１７】
図２と図３は、それぞれ周期駆動シーケンスの例を説明するための図である。図２は、所定の時間として、例えば２ミリ秒（ｍｓ）の時間周期で実行されるタスクの周期駆動シーケンスを示している。よって、この周期駆動タスクは、２ミリ秒毎に実行される。図３は、所定のイベントとして、例えばセンサにより検出された回転部材の角度が所定の角度になると実行されるタスクの周期駆動シーケンスを示している。
【００１８】
すなわち、周期駆動タスクは、所定の周期駆動シーケンスで実行される。周期駆動シーケンスは、ある周期駆動タスク、あるいは複数の周期駆動タスクのそれぞれについての実行の順序が予め決められているシーケンスである。
【００１９】
例えば、周期駆動シーケンスは、複数のタスク１４中の、１つの周期駆動タスクAが、所定の時間間隔で実行されるものでもよいし、周期駆動タスクA、B、Cが、所定の順番に実行されるようなものでもよい。
【００２０】
具体的には、図２は、タスクAが０（ゼロ）ミリ秒(ms)で実行され、タスクBが２ミリ秒で実行され、タスクCが４ミリ秒で実行され、タスクAが６ミリ秒で実行され、タスクBが８ミリ秒で実行され、というように、２ミリ秒の周期で、タスクA,B,C,A,B,C,A,B,C,・・・というように実行されるシーケンスを示す。
【００２１】
図３は、ある回転部材の検出角度が０度の時に、タスクAが実行され、タスクBがその検出角度が３０度の時に実行され、タスクCが５０度の時に実行され、タスクAが８０度と１００度の時に実行され、タスクBが１３０度の時に実行され、というように、所定のイベントにおいて、所定のタスクが実行される、というようなシーケンスを示す。  
従って、周期駆動タスクのシーケンスは予め決定されている。
【００２２】
次に、レジスタ群１１ａに含まれる各種レジスタについて説明する。図４は、ハードウエア２に設けられるレジスタ群１１ａの構成を示す図である。  
レジスタ群１１ａは、カレントタスク優先度レジスタ(CPRI: Current task PRIority register。以下、CPRIと略す)と、周期駆動タスク以外の通常のタスクコンテキストを格納するレジスタ(以下、CCTXと略す)と、スケジューラポインタレジスタ(SCHEP: SCHEduler Pointer。以下、SCHEPと略す)と、周期駆動タスク優先度レジスタ(PPRI: Periodical task PRIority register。以下、PPRIと略す)と、周期駆動コンテキストレジスタ(PCTX: Periodical ConTeXt。以下、PCTXと略す)と、次周期駆動コンテキストポインタレジスタ(NCTXP: Next Periodical ConTeXt Pointer。以下、NCTXPと略す)と、を含む。PPRI,PCTX, NCTXPの３つが、合わせて周期駆動用レジスタ群である。  
CPRIは、カレントタスク優先度レジスタであり、現在起動中すなわち実行中のタスクの優先度を格納するレジスタである。  
SCHEPは、スケジューラポインタレジスタであり、スケジューラの先頭位置を示すアドレスを格納するレジスタである。  
PPRIは、周期駆動タスク優先度レジスタであり、次に起動される周期駆動タスクの優先度を格納するレジスタである。
【００２３】
PCTXは、周期駆動コンテキストレジスタであり、通常のタスクコンテキストを格納するレジスタ(CCTX)と同じ構成を有するレジスタである。即ちプログラムカウンタ(PC)やスタックポインタ(SP)を含むタスクコンテキストを格納したレジスタ群である。なお、CCTXは、周期駆動タスク以外のタスクのコンテキストを格納する。
【００２４】
NCTXPは、次周期駆動コンテキストポインタレジスタであり、次に起動される周期駆動タスクのコンテキストが格納されているアドレスを格納するレジスタである。  
後述するように、これらのレジスタ群は、CPRI,CCTX及びSCHEPを含む通常のタスクの実行時に使用されるレジスタ群２１と、PPRI,PCTX及びNCTXPを含む、周期駆動タスクの実行時に使用される周期駆動タスク用レジスタ群２２に分けられる。
【００２５】
なお、周期駆動タスク用レジスタ群２２の各レジスタは、周期駆動タスク専用のレジスタでもよいが、従来よりあるレジスタ群の一部を、周期駆動タスク用として流用してもよい。
【００２６】
始めに、周期駆動タスクではない通常のタスクだけが実行される場合の処理の流れについて説明する。図５は、通常のタスク切り替えが発生する場合のタスク切り替えのアクティビティ図である。図５における各レジスタに対する処理は、通常のスケジューラ（図示せず）等により行われる。
【００２７】
図５に示すように、アプリケーションプログラム中の通常のタスクであるタスク１を実行中に、通常のタスクであるタスク２が起床されると、リアルタイムOSのスケジューラによるスケジューリングが実行される。スケジューリングでは、CPRIから現在実行中のタスク（以下、現タスクともいう）であるタスク１の優先度情報がCPRIから取得され、タスク１とタスク２の優先度が比較されて、次に実行するタスクが決定される。次に実行されるタスク（以下、次タスクともいう）が決定されると、CPRIに次タスクの優先度が設定され、ディスパッチが行われる。
【００２８】
スケジューリングにより、タスク２が次タスクと決定されると、通常のコンテキストレジスタであるCCTXから主メモリ１２の所定の記憶領域に、タスク１のコンテキストが退避され、タスク２のコンテキストがCCTXに設定される。そして、次タスク２が実行中となる。  
このように、周期駆動タスクでないときは、従来からあるCPRI、CCTX等のレジスタ群を用いて、タスクの切り替えが行われる。
【００２９】
次に、周期駆動タスクの実行時の処理の流れについて説明する。図６は、周期駆動タスクのタスク切り替えが発生する場合のタスク切り替えのアクティビティ図である。図７は、レジスタとコンテキストの関係を説明するための図である。
【００３０】
図６は、通常のタスクの実行から、周期駆動タスクの実行へ遷移し、再び通常タスクが起動される場合を示す。図６における各レジスタに対する処理は、周期駆動タスク実行部１１ｄにより行われる。  
まず、アプリケーションプログラムの中の通常のタスク１が実行中に、必要なサービスコールが発生すれば実行される。タスク１が実行中に、周期駆動タスクの実行要求が発生すると、スケジューリングが実行される。例えば、通常のタスク１が実行中に、周期駆動タスクAの実行要求の割り込みが発生したとする。なお、次に実行予定の周期駆動タスクAの優先度は、PPRIに予め設定されて記憶されている。
【００３１】
OSのスケジューラは、CPRIとPPRIを参照して、タスク１と周期駆動タスクAの優先度を比較して、次に実行するタスクを決定する。スケジューラは、最も高い優先度のタスクを実行するようにスケジューリングを行う。周期駆動タスクAの優先度がタスク１の優先度よりも高く無ければ（すなわちCPRIから読み出した優先度がPPRIから読み出した優先度以上の場合）、NOとなって、現タスクであるタスク１の継続実行を行う。
【００３２】
なお、周期駆動タスクAの優先度がタスク１の優先度と等しい場合は、タスク１継続実行をやめ、周期駆動タスクAを実行させるようにしてもよい。
【００３３】
周期駆動タスクAの方がタスク１よりも、優先度が高ければ、YESとなって、次タスクである周期駆動タスクAの優先度が設定されているPPRIの値がCPRIに設定される。このとき、PPRIとCPRIの値は一致する。
【００３４】
図７に示しかつ上述したように、レジスタ群１１ａは、通常のタスクの実行時に利用されるレジスタCPRI、CCTX,SCHEPを含むレジスタ群２１の他に、PPRI,PCTX及びNCTXPを含む周期駆動用レジスタ群２２を含む。
【００３５】
アプリケーションプログラムの中で、現タスクが通常のタスクであれば、レジスタ群２１が、コンテキストレジスタの参照先となっている。  
また、アプリケーションプログラムの中で、現タスクが周期駆動タスクであれば、レジスタ群２２がコンテキストレジスタの参照先となっている。
【００３６】
図７に示すように、コンテキストレジスタとして、レジスタ群２１と２２のどちらを使用するかは、上記の判定結果に基づいて、参照先選択回路２３によって選択される。レジスタ群２１と２２のどちらを選択するかの参照先選択回路２３への選択指示は、周期駆動実行部１１ｄによりなされる。参照先選択回路２３は、例えば所定のレジスタ回路であって、選択状態を示すデータを保持する。
【００３７】
上述したように、周期駆動タスクについての所定の周期的な割り込みの発生、すなわち周期駆動タスクの起床要求があると、周期駆動実行部１１ｄの比較部１００が、現在のタスク１の優先度(CPRI)と、起床要求に係る周期駆動タスクAの優先度(PPRI)とを比較する。
【００３８】
比較部１００は、周期駆動タスクのいずれかに対する起床要求があると、その起床要求時に実行中のタスクの優先度とその起床要求に係る周期駆動タスクの優先度とを比較する処理部である。  
周期駆動タスクAの優先度の方が高い場合は、コンテキストの参照先の切り替えがコンテキストレジスタ切り替え部１０１により行われ、周期駆動コンテキストレジスタPCTXが選択されて、タスクコンテキストとして利用される。
【００３９】
コンテキストレジスタ切り替え部１０１は、起床要求に係る周期駆動タスクの優先度が実行中のタスクの優先度よりも高い場合に、コンテキストの参照先を、起床要求に係る周期駆動タスクのコンテキストが格納された周期駆動タスク用コンテキストレジスタ（PCTX）に切り替える処理部である。
【００４０】
現在のタスク１の優先度が周期駆動タスクAの優先度以上の場合は、引き続き現タスク１の実行を続け、タスクのスケジューリングによって、PPRIより低いタスクに切り替わるまで周期駆動タスクAの起床はペンディングにされる。
【００４１】
周期駆動タスクAの優先度の方が現在のタスク１の優先度より高い場合は、周期駆動タスクAは、コンテキストの参照先がレジスタ群２２へ切り替ることによって、プログラムカウンタPCTX(PC)が参照されることから、自動的に実行状態に移る。
【００４２】
なお、周期駆動タスクAが実行中にもタスク切り替えが発生する場合もある。タスクの切り替えが発生する場合は、PCTX利用のまま通常のスケジューリングが行われる。すなわち、PCTX利用状態を前提として、通常のスケジューリングが行われる。よって、周期駆動タスクAよりも高い優先度のタスクがあれば、そのタスクが実行される。
【００４３】
すなわち、周期駆動タスクの実行中も、タスクの切り替え要求は受け付けられるようになっている。周期駆動タスクと実行要求されたタスクとの関係には、周期駆動タスクの優先度以下のタスクの実行要求がされた場合と、実行中の周期駆動タスクより優先度が高いタスクの実行要求がされた場合がある。前者の場合、スケジューリングが行なわれるだけで、周期駆動タスクが引き続き実行される点でタスク実行要求がない場合とその後の振舞いは変わらない。後者の場合、スケジューリングの結果、実行要求されたタスクが起動することになる。この場合、通常のタスク間での切り替えと同様にコンテキスト切り替えが発生する。このとき、コンテキストレジスタとしてPCTXを引き続き利用することにより、タスク、OS及びハードウエアは、それぞれ通常のコンテキストの切り替えと同じ処理を行なうだけでよい。
【００４４】
なお、周期駆動タスクの実行中に、周期駆動タスク期限切れ例外が発生する場合がある。周期駆動タスク期限切れ例外は、周期駆動タスクが処理終了に至る前に次の周期駆動タスク起動用の割り込みを受理した場合に発生する場合である。周期駆動タスク期限切れ例外が発生した場合は、所定の例外処理が実行されるようになっている。周期駆動タスク実行部１１ｄは、所定の例外処理を行う例外処理部を含み、その例外処理部は、例えば、周期駆動タスク期限切れ例外が発生したときには、現タスクの実行を継続するか、次の処理に切り替えるかの判定がされる。
【００４５】
周期駆動タスクAの実行が終了すると、次の周期駆動タスクを起床するための準備が行なわれる。即ち、周期駆動タスク用レジスタ群２２(PPRI, PCTX, NCTXPを含む)の値の更新が行われる。レジスタ群２２のNCTXPには、所定のシーケンスにおいて定められた次に実行される周期駆動タスクのコンテキストが格納されているアドレスが格納している。よって、周期駆動タスク実行部１１ｄのコンテキスト設定部１０２は、そのNCTXPを参照して、DMAを用いてレジスタ群２２（NCTXP,PPRI,PCTX）の一斉更新を行う。
【００４６】
コンテキスト設定部１０２は、起床要求に係る周期駆動タスクの実行が終了すると、所定のシーケンスにおいて定められた次に実行する周期駆動タスクのコンテキストを、周期駆動タスク用コンテキストレジスタに設定する処理部である。
【００４７】
より具体的には、周期駆動タスクAの実行の終了が検知されると、周期駆動タスク実行部１１ｄは、参照先選択回路２３に対して、レジスタ群２１を選択させて、それ以降コンテキストレジスタとしてCCTXを参照するように、設定を行う。
【００４８】
そして、コンテキスト設定部１０２は、実行の終了した周期駆動タスクAのコンテキストを、主メモリ１２の対応する所定の記憶領域に退避し、次に実行する周期駆動タスクBのコンテキストを、主メモリ１２の対応する所定の記憶領域から読み出して、レジスタ群２２に設定する。
【００４９】
周期駆動タスクAの実行が終了したとき、レジスタ群２２のNCTXPには、次に実行される周期駆動タスク、例えば周期駆動タスクBのコンテキストが格納されているアドレスが格納されている。よって、コンテキスト設定部１０２は、そのNCTXPを参照して、次の周期駆動タスクのコンテキストすなわちPPRI,PCTX,NCTXPの内容を、DMAにより主メモリ１２から読み出して、レジスタ群２２に設定することができる。
【００５０】
図２の場合の周期駆動シーケンスによれば、タスクAの次はタスクBであり、タスクBの次はタスクCであり、タスクCの次はタスクAである、というように、次に実行される周期駆動タスクは予め決められている。図３の場合の周期駆動シーケンスによれば、周期駆動タスクは、A、B、C、A、A、B、・・というように、次に実行される周期駆動タスクは予め決められている。
【００５１】
図７に示すように、主メモリ１２には、複数の周期駆動タスクのコンテキストデータが、それぞれ対応する所定の記憶領域に記憶されている。各コンテキストデータ中にはNCTXPのデータが含まれる。NCTXPは、周期駆動シーケンスによって予め定められた、その周期駆動タスクの次に実行される周期駆動コンテキストのポインタデータを記憶する。上記の図２の例であれば、周期駆動タスクAの次にタスクBが実行されるので、タスクAのコンテキスト中のNCTXPには、周期駆動タスクBのコンテキストのポインタデータが記憶されている。
【００５２】
図７に示すように、周期駆動タスクAのコンテキストデータとして、NCTXPが含まれ、そのNSTXPは、次の周期駆動タスクBのコンテキストのポインタデータを記憶する。よって、周期駆動実行部１１ｄは、周期駆動タスクAの実行が終了すると、周期駆動タスクAのコンテキストのNCTXPの示す、周期駆動タスクBのコンテキストのポインタデータに基づいて、DMAにより、主メモリ１２から周期駆動タスクBのコンテキストを取得してレジスタ群２２に設定する。周期駆動タスクBのコンテキストがレジスタ群２２に設定されるが、このとき、レジスタ群２２のNCTXPには、周期駆動タスクBの次に実行される周期駆動タスクCのコンテキストポインタの値が設定される（図２の場合）。
【００５３】
以上の処理が終了すると、SCHEPが参照され、CPU１１のプログラムカウンタは、スケジューラの先頭アドレスに切り替えられて、スケジューリングが再度実行される。スケジューリングは、切り替わる前のタスク実行中に割り込みが発生した場合と同じ状態と、現在の状態との比較の下で、行われる。
【００５４】
このとき、次に実行される周期駆動タスクBのコンテキストは、レジスタ群２２に設定されている。よって、次の所定の周期的な割り込みの発生に応じて周期駆動タスクBが実行されるとき、周期駆動タスクBの実行のための、従来のようなスケジューラディスパッチ処理及び割り込みハンドラ処理の実行というオーバーヘッドなく、タスクBの実行を行うことができる。
【００５５】
図８は、本実施の形態に係る、周期起動タスク実行時のコンピュータシステム１の動作を説明するための図である。図８は、各処理の実行が時間経過と共に示されている。  
図８に示すように、ケースC1は、周期駆動タスク実行時の従来の動作を示す。ケースC１では、周期駆動タスクの実行が要求されると、スケジューリングとディスパッチ処理SD1、周期駆動タスクを起床するための割り込みハンドラ処理H及びスケジューリングとディスパッチ処理SD2の３つの処理が行われていた。その後、周期駆動タスク処理PTとその終了後のスケジューリングとディスパッチ処理SD3が行われる。
【００５６】
これに対して、上述した本実施の形態の場合、ケースC2に示すように、上述した３つの処理（SD1,H,SD2）は行われないで、周期駆動タスク処理PTの実行が直接開始される。  
よって、上述した本実施の形態によれば、周期駆動タスクを、上述したオーバーヘッド無くの実行することができるので、実行時間の短縮化を図ることができる。
【００５７】
上述した例では、周期駆動タスク実行部１１ｄの各種処理をソフトウエアにより実現しているが、一部の処理は、ハードウエアにより実現してもよい。図９は、図６における周期駆動タスクの実行開始を指示するための回路の例を示すブロック図である。  
レジスタ群１１ａ中のレジスタCPRIとPPRIには、それぞれOSからの更新データとNCTXP更新時の更新データが記憶されている。CPRIはリアルタイムOS上で実行中のタスクの優先度を示している。またPPRIは、次に実行が期待されている、周期駆動割り込みによって起動される周期駆動タスクの優先度を示している。そして、CPRIとPPRIのデータが比較器３１で比較される。CPRIの優先度よりも、PPRIの優先度が高いとき、比較器３１は、「１」を出力する。
【００５８】
一方、周期駆動タスクを実行させるための割り込みが発生するとその周期駆動割り込み信号は、ラッチ回路３２に入力されラッチされる。周期駆動割り込み信号がラッチされると、ラッチ回路３２は「１」を出力する。
【００５９】
比較器３１の出力とラッチ回路３２の出力が共に「１」の時に、AND回路３３は、周期駆動タスク実行開始の指示信号を出力し、かつラッチ回路３２をリセットする。
【００６０】
すなわち、周期駆動割り込み信号が発生したときに、現在実行中のタスクの優先度（CPRI）よりも、次に実行される周期駆動タスクの優先度（PPRI）が高い場合、タスクの処理は、周期駆動タスク処理へ遷移する。  
以上のように、比較部１００における比較判定すなわち周期駆動タスクへの遷移判定は、図９に示すようなハードウエア回路によって実現することができる。
【００６１】
また、PPRIがCPRI以下の場合は、周期駆動割り込みが発生しても周期駆動タスクへの処理へは遷移せずに現在のタスク処理が引き続き実行される。なお、周期駆動タスク処理中に再度周期駆動割り込みが発生した場合は、周期駆動タスク期限切れ例外が発生する。
【００６２】
図１０は、図６における周期駆動タスクの実行終了の判定のための回路の例を示すブロック図である。  
周期駆動タスク用のレジスタ群２２の中のPCTXのスタックポインタSP（PCTX(SP)）のデータと、主メモリ１２上の対応する（PCTX(SP)）のデータとが比較器３６に入力される。また、周期駆動タスク用のレジスタ群２２の中のPCTXのプログラムカウンタPC（PCTX(PC)）のデータと、主メモリ１２上の対応する（PCTX(PC)）のデータとが比較器３７に入力される。
【００６３】
比較器３６は、主メモリ１２上のPCTX(SP)とレジスタ群２２のPCTX(SP)が等しいときに、「１」を出力する。レジスタ群２２のPCTX(SP)の値は、各種関数が実行されるに従って変化する。そのレジスタ群２２のPCTX(SP))の値と主メモリ１２上の最初のスタックポインタの値（TCTX(SP)の値とが、異なっているときは、タスクの実行中であることを示し、同じときは、スタックポインタの位置は最初の位置に戻り、各種関数の実行処理が終了したことを意味する。
【００６４】
比較器３７は、主メモリ１２上のPCTX(PC)とレジスタ群２２のPCTX(PC)が等しくないときに、「１」を出力する。主メモリ１２上のPCTX(PC)は、変化しないが、レジスタ群２２のPCTX(PC)は、タスクの実行に伴い、プログラムカウンタの値がインクリメントされるので、変化する。
【００６５】
AND回路３８は、比較器３６と３７の出力が共に「１」のときに、周期駆動タスクの終了検知信号を出力する。
【００６６】
すなわち、プログラムカウンタの変化により周期駆動タスクが実行されたことを検出し、かつ、スタックポインタの一致により周期駆動タスクの実行が終了したことを検出することによって、図１０の判定回路は、周期駆動タスクの終了と判定することができる。  
以上のように、周期駆動タスクへの実行終了判定は、図１０に示すようなハードウエア回路によって実現することができる。
【００６７】
なお、周期駆動タスクの終了は、周期駆動タスクのプログラム中に、周期駆動タスクの終了を意味する信号を出力する命令等を含ませ、その命令の出力によって、検知できるようにしてもよい。
【００６８】
すなわち、図１０では、プログラムカウンタのレジスタPCとスタックポインタのレジスタSPの比較を、比較器により行なっているが、周期駆動タスク中に、周期駆動タスクの実行終了を知らせるための命令や、所定のレジスタに終了を意味する所定の値を書き込むことによって、ソフトウエアにより、明示的に周期駆動タスクの終了を知らせるようにしてもよい。
【００６９】
このようなソフトウエアによる方法によれば、ハードウエアの実装方法に選択肢が増え、さらに、周期駆動タスクの終了タイミングの発生及び通知の方法にバラエティを持たせることが可能になる。
【００７０】
以上のように、上述した本実施の形態によれば、周期駆動タスクは、従来のような割込ハンドラの起床、及び割込ハンドラの実行前後のスケジューラの実行というオーバーヘッドなく、実行されるので、リアルタイムアプリケーションの実行性能の向上及び検証の容易性の向上を図ることができる。よって、本実施の形態によれば、従来のような周期駆動用のハンドラは不要であり、周期駆動タスク起床時のオーバーヘッドの少ない周期駆動タスク実行装置を実現するができる。
【００７１】
なお、上述した実施の形態では、周期駆動タスクシーケンスが一つの場合であるが、周期駆動シーケンスが複数ある場合がある。このような場合、周期駆動用レジスタ群２２(PPRI,PCTX,NCTXP)及び周期駆動タスク期限切れ例外処理回路を、周期駆動タスクシーケンス毎に設けることによって、上述した複数の周期駆動タスクシーケンスのそれぞれが一つの場合と同様の処理を行うことができる。
【００７２】
なお、この場合、通常のタスクと周期駆動タスクとの競合だけでなく、周期駆動タスク同士の競合も発生するが、周期駆動タスクが起床されるのは、その優先度がCPRIより高いときのみに起床されるため、競合時の処理は、通常タスクとの競合時と同様に行なうことができる。
【００７３】
従って、例えば、タイマ駆動の周期駆動タスクシーケンスと、回転物体の角度イベント等による駆動の周期駆動タスクシーケンスといった異なる周期駆動タスクが混在するシステムにおいても、上述したように周期駆動タスクの実行制御を行うことができる。
【００７４】
さらに、通常タスクが存在しない１以上の周期駆動タスクのみがプロセッサ上で実行されるシステムにおいて、上述した実施の形態に係る周期駆動タスクの実行制御を行うようにしてもよい。  
上述した実施の形態は、通常のイベント駆動等の通常のタスクも混在するものであるが、通常のタスクが存在しないソフトウェアアーキテクチャ（すなわち周期駆動タスクシーケンスだけで構成されたアーキテクチャ）に上述した周期駆動タスクの実行制御を適用することができる。
【００７５】
例えば、所定のイベントをある周期駆動タスクによるポーリングにより検出するようにして、その所定のイベントに対応する処理を実行するようにすることができる。その結果、どの周期駆動タスクも起動していない場合は、マイクロプロセッサをいわゆるスリープモードに遷移させるようにすることによって、消費電力を抑制できるコンピュータシステムを構築することができる。その場合、周期駆動割り込みの発生に合わせてマイクロプロセッサはノーマルモードに遷移する。
【００７６】
また、周期駆動割り込みがタイマ等の事前予測可能な割り込みである場合、マイクロプロセッサのノーマルモードへの遷移を、実際の周期駆動割り込み発生より前に行なっておくことで、マイクロプロセッサのモード遷移によるオーバーヘッドを小さくしたタスク切り替えを可能とするシステムを構築することができる。
【００７７】
さらになお、上述した実施の形態では、周期駆動タスク期限切れ例外の発生によって処理を継続するか、次の処理に切り替えるかの判断およびその後の処理をソフトウエアによって行なうことを前提としている。すなわち、周期駆動タスク期限切れの場合には、そのソフトウエアにより、その例外の発生に対応する処理が行われる。
【００７８】
しかし、一方で一回のオーバーラップであれば、現在の周期駆動タスク処理を実行し、その実行の終了した後に、改めて次の周期駆動割り込みの検知及び次の周期駆動タスクの実行を行なわせたい、あるいは行わせてもよい、場合がある。  
そこで、一度だけ例外要因を留めて例外を発生させないようにして、現在実行中の周期駆動タスクが終了した後は、周期駆動割り込みの発生に応じて、上述のような例外処理の実行をするようにしてもよい。
【００７９】
さらになお、上述した実施の形態では、周期駆動用のレジスタ更新は、主メモリ１２からDMA等を行なうことによって実現していたが、周期駆動シーケンスにおける周期駆動タスク数が少ない場合は、周期駆動タスク毎に周期駆動用レジスタを設け、各周期に合わせて利用するレジスタを切り替えるようにしてもよい。このような構成にすれば、DMA機能の利用を削減することが可能である。
【００８０】
以上のように、上述した実施の形態に係る周期駆動タスク実行装置および方法によれば、周期駆動タスクのタスクスケジューリングを通常のタスクのスケジューリングとは別に管理して行うことにより、周期駆動タスク起床時のオーバーヘッドの少ない、周期駆動タスクの実行装置を実現することができる。その結果として、オーバーヘッドが少ないので、ソフトウエアの性能及び品質の向上にも繋がる。
【００８１】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施の形態に係わるコンピュータシステムの構成を示す模式的構成図である。
【図２】本発明の実施の形態に係わる周期駆動シーケンスの例を説明するための図である。
【図３】本発明の実施の形態に係わる周期駆動シーケンスの他の例を説明するための図である。
【図４】本発明の実施の形態に係わる、ハードウエアに設けられるレジスタ群１１ａの構成を示す図である。
【図５】本発明の実施の形態に係わる、通常のタスク切り替えが発生する場合のタスク切り替えのアクティビティ図である。
【図６】本発明の実施の形態に係わる、周期駆動タスクのタスク切り替えが発生する場合のタスク切り替えのアクティビティ図である。
【図７】本発明の実施の形態に係わる、レジスタとコンテキストの関係を説明するための図である。
【図８】本発明の実施の形態に係る、周期起動タスク実行時のコンピュータシステムの動作を説明するための図である。
【図９】図６における周期駆動タスクの実行開始を指示するための回路の例を示すブロック図である。
【図１０】図６における周期駆動タスクの実行終了の判定のための回路の例を示すブロック図である。
【符号の説明】
【００８３】
１  コンピュータシステム、２  ハードウエア、３  ソフトウエア、１１  CPU、１２  主メモリ、１４  タスク、１５  OS、２１  従来のレジスタ群、２２  周期駆動タスク用レジスタ群、２３  参照先選択回路
【図１】
2010102567.tif 000003
【図２】
2010102567.tif 000004
【図３】
2010102567.tif 000005
【図４】
2010102567.tif 000006
【図５】
2010102567.tif 000007
【図６】
2010102567.tif 000008
【図７】
2010102567.tif 000009
【図８】
2010102567.tif 000010
【図９】
2010102567.tif 000011
【図１０】
2010102567.tif 000012