(57)【特許請求の範囲】
【請求項１】
処理プログラムの実行単位となる複数のタスクを当該複数のタスク毎に設定される優先度に基づき、前記優先度が相対的に高い上位タスクの実行により前記優先度が相対的に低い下位タスクの実行が一時的に中断され、前記上位タスクの終了時に前記下位タスクが中断位置から再開されるよう実行することによって一連の機能を実現する情報処理装置であって、
前記上位タスクと前記下位タスクとの間で共通に使用されるグローバル変数を記憶する２つの記憶領域を設定し、
前記下位タスクによる前記グローバル変数の参照途中で前記上位タスクによって前記グローバル変数が更新される可能性のある第１のケースにおいて、
前記上位タスクは、前記２つの記憶領域の一方である作業領域を使用して前記グローバル変数を更新する上位更新処理を実行し、
前記下位タスクは、前記２つの記憶領域の他方である公開領域を使用して前記グローバル変数を参照する下位参照処理を実行し、
前記下位タスクは、前記下位タスク中の前記下位参照処理を開始する前に、前記作業領域から前記公開領域へ前記グローバル変数を複製する複製処理を実行し、
前記下位タスクは、前記上位更新処理が前記複製処理の実行中に実行されることを禁止する割り込み禁止処理であって、前記下位タスクに含まれる複数の前記下位参照処理で参照される複数の前記グローバル変数について共通の割り込み禁止処理を実行することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
複数の前記下位タスク毎に複数の前記公開領域を割り当て、
前記複製処理において、それぞれの前記下位タスクで使用される前記グローバル変数を前記作業領域から複数の前記公開領域へ複製することを特徴とする情報処理装置。
【請求項３】
処理プログラムの実行単位となる複数のタスクを当該複数のタスク毎に設定される優先度に基づき、前記優先度が相対的に高い上位タスクの実行により前記優先度が相対的に低い下位タスクの実行が一時的に中断され、前記上位タスクの終了時に前記下位タスクが中断位置から再開されるよう実行することによって一連の機能を実現する情報処理装置であって、
前記上位タスクと前記下位タスクとの間で共通に使用されるグローバル変数を記憶する２つの記憶領域を設定し、
前記下位タスクによる前記グローバル変数の更新途中で前記上位タスクによって前記グローバル変数が参照される可能性のある第２のケースにおいて、
前記下位タスクは、前記２つの記憶領域の一方である作業領域を使用して前記グローバル変数を更新する下位更新処理を実行し、
前記上位タスクは、前記２つの記憶領域の他方である公開領域を使用して前記グローバル変数を参照する上位参照処理を実行し、
前記下位タスクは、前記下位タスク中の前記下位更新処理を開始する前に、前記作業領域から前記公開領域へ前記グローバル変数を複製する複製処理を実行し、
前記下位タスクは、前記上位参照処理が前記複製処理の実行中に実行されることを禁止する割り込み禁止処理であって、前記下位タスクに含まれる複数の前記下位更新処理で更新される複数の前記グローバル変数について共通の割り込み禁止処理を実行することを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置において、
複数の前記上位タスク毎に複数の前記公開領域を割り当て、
前記複製処理において、それぞれの前記上位タスクで使用される前記グローバル変数を前記作業領域から複数の前記公開領域へ複製することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理プログラムにおいて、優先度が相対的に高い上位タスクと優先度が相対的に低い下位タスクとの間で共通のデータを使用する情報処理装置に関する。
【背景技術】
【０００２】
例えば車両に搭載される電子制御装置（以下「ＥＣＵ」という）に用いられる処理プログラムでは、制御応答性や安全性の確保等から所定の処理をリアルタイムに実行する必要性がある。このようなリアルタイム性が要求される処理では、一般に、「割り込み」を実行する。すなわち、メインルーチンの実行中にイベントの発生等があると、メインルーチンの実行を一時的に中断して割り込みルーチンを実行し、割り込みルーチンの終了後にメインルーチンを再開する。これにより、リアルタイム性を要求する優先度の高い処理を優先的に実行する。
【０００３】
このような処理では、処理プログラムは、実行単位としてのタスク毎に優先度が設定される。上記の例では、メインルーチンは、優先度が相対的に低い「下位タスク」に相当し、割り込みルーチンは、優先度が相対的に高い「上位タスク」に相当する。ここで、上位タスクと下位タスクとの間で共通に使用されるデータを「グローバル変数」という。割り込みがされるとき、グローバル変数の更新および参照に伴う「同時性」が問題となることがある。例えば、更新および参照処理において、割り込みの発生によって、一つのタスクが同時に参照すべき複数のデータが別々に参照される場合や、複数のタスク間で共通に参照されるべきデータが同一とならない場合には、「データの同時性」が問題となる。
【０００４】
この問題に対処するため、従来、下位タスクの実行中に割り込み禁止処理を実行する情報処理装置が知られている。すなわち、下位タスクで複数のグローバル変数が更新または参照される間に上位タスクの割り込みを禁止する。
また、特許文献１には、グローバル変数を「公開領域」と「作業領域」の２つの領域に重複させて記憶させ、グローバル変数の参照と更新とを別々の領域で行い、参照が終了した時点で作業領域と公開領域とを切り替える「領域切換処理」を実行する情報処理装置が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３７８３５５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、割り込み禁止処理をすると、本来優先度の高い上位タスクの実行開始が下位タスクの処理完了まで待たされることとなり、リアルタイム性を損なう。
また、特許文献１の方法は、現在どちらの領域が作業領域でありどちらの領域が公開領域であるかの情報を管理する「領域情報記憶手段」が必要となる上、グローバル変数の参照時にその管理情報をも確認せねばならず、処理負荷が増大するという問題がある。
加えて、何らかの理由で上位タスクがグローバル変数の更新を停止した場合、下位タスクは更新前の古いデータを使用し、さらに更新停止が続くと、更新後の最新データと更新前の過去データとを交互に参照して使用するという、いわゆるデータハンチングの問題が生じる。
かかる問題は、公開領域と作業領域とを動的に切り替えることによって発生する問題である。
【０００７】
本発明は、このような点に鑑みて創作されたものであり、その目的は、処理プログラムのタスクが当該タスクとは優先度が異なるタスクにて更新されるデータを参照する情報処理装置において、処理負荷の増大やデータハンチングを生じることなく、データの同時性を確保することにある。
【課題を解決するための手段】
【０００８】
請求項１から４に記載の情報処理装置は、処理プログラムの実行単位となる複数のタスクを当該複数のタスク毎に設定される優先度に基づき、前記優先度が相対的に高い上位タスクの実行により前記優先度が相対的に低い下位タスクの実行が一時的に中断され、前記上位タスクの終了時に前記下位タスクが中断位置から再開されるよう実行することによって一連の機能を実現する情報処理装置である。この情報処理装置は、優先度が相対的に高い上位タスクと優先度が相対的に低い下位タスクとの間で共通に使用されるグローバル変数を記憶する２つの記憶領域を設定する。
【０００９】
ここで、「下位タスクによるグローバル変数の参照途中で上位タスクによってグローバル変数が更新される可能性のあるケース」を「第１のケース」という。請求項１から２に記載の情報処理装置は、「第１のケース」を対象とする。
上位タスクは、２つの記憶領域の一方である作業領域を使用してグローバル変数を更新する上位更新処理を実行する。下位タスクは、２つの記憶領域の他方である公開領域を使用してグローバル変数を参照する下位参照処理を実行する。そして、下位タスク中の下位参照処理の実行時を除く所定の時期であって、下位参照処理を開始する前に、作業領域から公開領域へグローバル変数を複製する複製処理を実行する。
【００１０】
例えば、下位タスクに含まれる第１サブタスクと第２サブタスクとが、あるグローバル変数を共通に使用する場合を考える。仮に、第１サブタスクがグローバル変数を参照した後、第２サブタスクがグローバル変数を参照する前に上位更新処理が実行されると、第１サブタスクは更新前の古いデータを参照し、第２サブタスクは更新後の新しいデータを参照することとなり、データの同時性が破綻する。その結果、第１サブタスクと第２サブタスクとが同一のデータを必要とする場合、演算が破綻する。
【００１１】
そこで、作業領域と公開領域とを静的に決定し、下位タスク中の所定の時期に作業領域から公開領域への複製処理を実行する。そして、第１サブタスクおよび第２サブタスクが、公開領域に複製されたグローバル変数を共に参照するようにする。ここで、各タスクは、例えばタイマに設定した周期で発生し、基本的に開始タイミングが変動することはないため、タイマの設定により、所定の時期に複製処理を実行することができる。
【００１２】
これにより、下位タスク中に実行される上位更新処理の影響を受けることなく、第１サブタスクと第２サブタスクとの間でデータの同時性を確保することができる。
拡張して言えば、下位参照処理における複数のサブタスク間でのデータの同時性を確保することができる。
【００１３】
また、従来技術の領域切換処理のように領域情報記憶手段を必要としないので、処理負荷を低減することができる。
さらに、領域切換処理においては、何らかの理由で上位更新処理が停止した場合、その後の領域切換処理で、更新後の最新データと更新前の過去データとが交互に繰り返し公開領域に記憶される。すると、下位タスクは、最新データと過去データとを交互に参照して使用するというデータハンチングが生じ、制御上重大な問題を招くおそれがある。それに対し、本発明による複製処理では、上位更新処理が停止した場合でも、下位タスクは、常に最新データを参照することができ、データハンチングは発生しない。
加えて、この情報処理装置は、下位タスク中の下位参照処理を開始する前に複製処理を実行する。
従来技術の領域切換処理によると、下位参照処理では直前の領域切換処理で公開領域に記憶されたデータを参照する。そのため、領域切換処理を実行する下位タスクの実行周期よりも上位更新処理の実行周期が速い場合、領域切換処理後に上位更新処理で更新された最新のデータを参照することができない。よって、参照データの遅延が発生する。
それに対し、下位タスク中の下位参照処理を開始する前に複製処理を実行することで、下位参照処理において最新のデータを使用することができる。
加えて、この情報処理装置は、上位更新処理が複製処理の実行中に実行されることを禁止する割り込み禁止処理を実行する。
仮に、複数のグローバル変数についての複製処理の実行途中に上位更新処理が実行された場合、下位タスクは、一部のグローバル変数については更新前のデータを参照し、残りのグローバル変数については更新後のデータを参照するためデータの同時性が破綻する。そこで、割り込み禁止処理により、複数のグローバル変数についての複製処理が上位更新処理の前後に跨らないようにすることで、データの同時性破綻を回避することができる。
加えて、この情報処理装置は、下位タスクに含まれる複数の下位参照処理で参照される複数のグローバル変数について共通の割り込み禁止処理を実行する。
複数のグローバル変数について、共通の割り込み禁止処理を実行することで、各グローバル変数について個々に割り込み禁止処理を実行する場合に比べ、情報処理装置の処理負荷を低減することができる。
さらに、割り込み禁止処理は、優先度の高い上位タスクの実行を遅らせるためリアルタイム性を損なうというデメリットを伴う。そのため、割り込み禁止処理を共通にして回数を減らすことで、リアルタイム性への影響を最小限に抑えることができる。
【００１８】
請求項２に記載の情報処理装置は、複数の下位タスク毎に複数の公開領域を割り当て、複製処理において、それぞれの下位タスクで使用されるグローバル変数を作業領域から複数の公開領域へ複製する。
【００１９】
複数の下位タスクが存在する場合、仮に、複製処理を実行する下位タスクよりも優先度が高い下位タスクの実行周期が速い場合、優先度が高い下位タスクは、最新のデータを参照することができない。そこで、本請求項に係る構成を採用し、それぞれの下位タスクが複製処理を実行すれば、各下位タスクの実行周期に応じて、最新データを参照することができる。
【００２０】
また、複数の下位タスクが存在する場合、仮に、優先度が相対的に低い下位タスクの実行途中に優先度が相対的に高い別の下位タスクによって複製処理が実行されると、優先度が相対的に低い下位タスクは、一部のグローバル変数については更新前のデータを参照し、残りのグローバル変数については更新後のデータを参照するためデータの同時性が破綻する。そこで、本請求項に係る構成を採用することにより、データの同時性破綻を回避することができる。
【００２１】
次に、上述の「第１のケース」に対し、「下位タスクによるグローバル変数の更新途中で上位タスクによってグローバル変数が参照される可能性のあるケース」を「第２のケース」という。請求項３〜４に記載の情報処理装置は、「第２のケース」を対象とする。
下位タスクは、２つの記憶領域の一方である作業領域を使用してグローバル変数を更新する下位更新処理を実行する。上位タスクは、２つの記憶領域の他方である公開領域を使用してグローバル変数を参照する上位参照処理を実行する。そして、下位タスク中の下位更新処理の実行時を除く所定の時期であって、下位更新処理を開始する前に、作業領域から公開領域へグローバル変数を複製する複製処理を実行する。
【００２２】
例えば、下位タスクが、第１グローバル変数を更新する第１サブタスクと第２グローバル変数を更新する第２サブタスクとを含み、上位タスクが第１グローバル変数および第２グローバル変数を共に使用する場合を考える。仮に、第１サブタスクが第１グローバル変数を更新した後、第２サブタスクが第２グローバル変数を更新する前に上位参照処理が実行されると、上位タスクは、第１グローバル変数については更新後の新しいデータを参照し、第２グローバル変数については更新前の古いデータを参照することとなり、データの同時性が破綻する。その結果、第１グローバル変数と第２グローバル変数とに関連性があり、同じタイミングで更新されたデータを必要とする場合、演算が破綻する。
【００２３】
そこで、作業領域と公開領域とを静的に決定し、下位タスク中の所定の時期に作業領域から公開領域への複製処理を実行する。そして、上位タスクが、公開領域に複製された第１グローバル変数および第２グローバル変数を共に参照するようにする。ここで、各タスクは、例えばタイマに設定した周期で発生し、基本的に開始タイミングが変動することはないため、タイマの設定により、所定の時期に複製処理を実行することができる。
【００２４】
これにより、上位参照処理において、第１グローバル変数と第２グローバル変数との同時性を確保することができる。
拡張して言えば、上位参照処理における複数のグローバル変数の同時性を確保することができる。
また、この情報処理装置は、下位タスク中の下位更新処理を開始する前に複製処理を実行する。
これにより、複製処理後の下位タスクの処理時間のばらつきなどに関係なく、下位更新処理で更新されたデータを常に一定のタイミングで公開領域に複製し、上位タスクが参照可能な状態にすることができる。すなわち、外的要因に対し安定した特性を維持するロバスト性に優れる。
また、この情報処理装置は、上位参照処理が複製処理の実行中に実行されることを禁止する割り込み禁止処理を実行する。
仮に、複数のグローバル変数についての複製処理の実行途中に上位参照処理が実行された場合、上位タスクは、一部のグローバル変数については更新前のデータを参照し、残りのグローバル変数については更新後のデータを参照するためデータの同時性が破綻する。そこで、割り込み禁止処理により、複数のグローバル変数についての複製処理が上位参照処理の前後に跨らないようにすることで、データの同時性破綻を回避することができる。
また、この情報処理装置は、下位タスクに含まれる複数の下位更新処理で更新される複数のグローバル変数について共通の割り込み禁止処理を実行する。
複数のグローバル変数について、共通の割り込み禁止処理を実行することで、各グローバル変数について個々に割り込み禁止処理を実行する場合に比べ、情報処理装置の処理負荷を低減することができる。
さらに、割り込み禁止処理は、優先度の高い上位タスクの実行を遅らせるためリアルタイム性を損なうというデメリットを伴う。そのため、割り込み禁止処理を共通にして回数を減らすことで、リアルタイム性への影響を最小限に抑えることができる。
【００２９】
請求項４に記載の情報処理装置は、複数の上位タスク毎に複数の公開領域を割り当て、複製処理において、それぞれの上位タスクで使用されるグローバル変数を作業領域から複数の公開領域へ複製する。
これにより、例えば、上位タスク毎に、割り当てられた公開領域への複製処理のタイミングをずらすことができる。仮に、第１上位タスクが「常に一定のタイミングで更新されるデータを要求するタスク」であり、第２上位タスクが「常に最新のデータを要求するタスク」であるとする。そこで、第１上位タスク用の公開領域への複製は、下位タスク中の下位更新処理を開始する前に実行することでロバスト性を向上させる。一方、第２上位タスク用の公開領域への複製は、下位タスク中の下位更新処理を完了した後に実行することで最新のデータを参照可能とする。このように、上位タスクの特性に応じて複製処理を実行することができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の第１〜第８実施形態による情報処理装置を適用した電動パワーステアリング装置の概略構成図。
【図２】本発明の第１〜第８実施形態による情報処理装置のシステム図。
【図３】（ａ）：本発明の第１実施形態に対する比較例を説明する説明図、（ｂ）：本発明の第１実施形態（第１のケース）による上位更新／下位参照処理を説明する説明図。
【図４】本発明の第１実施形態に対する別の比較例（従来技術）を説明する説明図。
【図５】（ａ）：本発明の第１実施形態に対する別の比較例（従来技術）を説明する説明図、（ｂ）：本発明の第１実施形態による上位更新／下位参照処理を説明する説明図。
【図６】（ａ）：本発明の第２実施形態に対する比較例を説明する説明図、（ｂ）：本発明の第２実施形態（第１のケース）による上位更新／下位参照処理を説明する説明図。
【図７】本発明の第３実施形態（第１のケース）による上位更新／下位参照処理を説明する説明図。
【図８】（ａ）：本発明の第４実施形態に対する比較例を説明する説明図、（ｂ）：本発明の第４実施形態（第１のケース）による上位更新／下位参照処理を説明する説明図。
【図９】（ａ）：本発明の第５実施形態に対する比較例を説明する説明図、（ｂ）：本発明の第５実施形態（第２のケース）による下位更新／上位参照処理を説明する説明図。
【図１０】（ａ）：本発明の第６実施形態に対する比較例を説明する説明図、（ｂ）：本発明の第６実施形態（第２のケース）による下位更新／上位参照処理を説明する説明図。
【図１１】本発明の第７実施形態（第２のケース）による下位更新／上位参照処理を説明する説明図。
【図１２】（ａ）：本発明の第８実施形態に対する比較例を説明する説明図、（ｂ）：本発明の第８実施形態（第２のケース）による下位更新／上位参照処理を説明する説明図。
【発明を実施するための形態】
【００３１】
自動車等のハンドル操作をアシストするための電動パワーステアリング装置に本発明の情報処理装置を適用した実施形態を図面に基づいて説明する。
（第１実施形態）
図１は、電動パワーステアリング装置を備えたステアリングシステムの全体構成を示す。ステアリングシステム９０に備えられる電動パワーステアリング装置１は、ハンドル９１に接続されたステアリングシャフト９２に操舵トルクを検出するためのトルクセンサ９４を設置している。
ステアリングシャフト９２の先端にはピニオンギア９６が設けられており、ピニオンギア９６はラック軸９７に噛み合っている。ラック軸９７の両端には、タイロッド等を介して一対の車輪９８が回転可能に連結されている。
【００３２】
これにより、運転者がハンドル９１を回転させると、ハンドル９１に接続されたステアリングシャフト９２が回転し、ステアリングシャフト９２の回転運動は、ピニオンギア９６によってラック軸９７の直線運動に変換され、ラック軸９７の直線運動変位に応じた角度について一対の車輪９８が操舵される。
【００３３】
電動パワーステアリング装置１は、操舵アシストトルクを発生するモータ８０、モータ８０の回転を減速してステアリングシャフト９２に伝える減速ギア８９、及び、モータ駆動装置２を備える。モータ８０は３相ブラシレスモータであり、減速ギア８９を正逆回転させる。モータ駆動装置２は、「情報処理装置」としてのＥＣＵ（電子制御装置）１０を備える。モータ駆動装置２は、また、モータ８０の回転角を検出する回転角センサ８５、上述のトルクセンサ９４、車速を検出する車速センサ９５を含む。
この構成により、電動パワーステアリング装置１は、ハンドル９１の操舵を補助するための操舵アシストトルクを発生し、ステアリングシャフト９２に伝達する。
【００３４】
図２にＥＣＵのシステム概略図を示す。ＥＣＵ１０は、マイクロコンピュータ（以下「マイコン」という）１１、入力回路１６および出力回路１７を備えている。
マイコン１１は、処理プログラムを実行するＣＰＵ（中央演算処理装置）１２、ＣＰＵ１２によって実行される処理プログラムを記憶するＲＯＭ１３、ＣＰＵ１２による演算結果等を記憶するためのＲＡＭ１４、及び、入力回路１６および出力回路１７との間で信号をやり取りするためのＩ／Ｏ１５を備えている。
【００３５】
ＲＡＭ１４には、後述するグローバル変数を記憶する２つの記憶領域として、作業領域および公開領域が設けられている。本実施形態では、グローバル変数をｃと表し、作業領域をＣ１と表し、公開領域をＣ２と表す。なお、複数のグローバル変数を使用する他の実施形態では、各グローバル変数について作業領域および公開領域が設けられる。
【００３６】
入力回路１６は、マイコン１１の制御の条件とするための各種センサからの信号を入力する。出力回路１７は、マイコン１１の制御に応じてアクチュエータを駆動する。
本実施形態では、入力回路１６は、上述の回転角センサ８５、トルクセンサ９４および車速センサ９５からの信号を入力し、出力回路１７は、マイコン１１の制御に応じてモータ８０を駆動する。
【００３７】
以上の構成によるＥＣＵ１０において、マイコン１１が実行する処理プログラムは、実行単位である複数のタスクに細分化されて記述されている。複数のタスクには優先度が設定されており、ＥＣＵ１０は、複数のタスクを優先度に基づき実行することによって、一連の機能を実現する。優先度が相対的に高いタスクを「上位タスク」といい、優先度が相対的に低いタスクを「下位タスク」という。
【００３８】
上位タスクは、例えば、制御応答性や安全性の確保等からリアルタイムに処理を実行する必要性の高いタスクである。そのため、上位タスクは一般的に「割り込みルーチン」として設定され、イベントの発生等をトリガとして、下位タスクである「メインルーチン」の実行中に優先して実行される。すなわち、上位タスクの実行により下位タスクの実行が一時的に中断され、上位タスク終了後に下位タスクが中断位置から再開される。
【００３９】
ここで、上位タスクと下位タスクとの間で共通に使用されるデータを「グローバル変数」という。グローバル変数は、上位タスクで更新され下位タスクで参照される場合、あるいは、下位タスクで更新され上位タスクで参照される場合がある。このような更新および参照処理において、割り込みの発生によって、一つのタスクが同時に参照すべき複数のデータが別々に参照される場合や、複数のタスク間で共通に参照されるべきデータが同一とならない場合には、「データの同時性」が問題となる。
【００４０】
この問題に対処するため、本発明では、作業領域と公開領域とを静的に決定し、下位タスク中の所定の時期に、作業領域から公開領域にグローバル変数を複製する「複製処理」を実行することを特徴とする。ここで、各タスクは、例えばタイマに設定した周期で発生し、基本的に開始タイミングが変動することはないため、タイマの設定により、所定の時期に複製処理を実行することができる。
以下、実施形態ごとに、上位タスクと下位タスクとの間でのグローバル変数の更新および参照処理について説明する。
【００４１】
最初に説明する第１〜第４実施形態は、「下位タスクによるグローバル変数の参照途中で上位タスクによってグローバル変数が更新される可能性がある」場合の処理に係る実施形態である。このケースを「第１のケース」という。
本発明の第１実施形態による処理を図３〜５に基づいて説明する。第１実施形態は、第１のケースで、下位タスクの開始時に複製処理を実行する。
【００４２】
図３（ａ）は、第１実施形態に対する比較例として、複製処理がされない場合を示す。上位タスクＳによる上位更新処理では、公開領域Ｃのグローバル変数ｃを更新する。下位タスクＶのサブタスクＸおよびサブタスクＹによる下位参照処理では、公開領域Ｃのグローバル変数ｃを参照する。
以下、サブタスクＸおよびサブタスクＹは、下位タスクＶを構成し、グローバル変数を更新または参照するタスクである。また、図中、下位タスクＶのうちサブタスクＸおよびサブタスクＹを除く部分は、グローバル変数を使用しないタスクを意味する。下位タスクＶのうち破線で指示する部分は、上位タスクＳの割り込みによって下位タスクＶの実行が中断されることを意味する。
【００４３】
下位タスクＶ１においては、サブタスクＸおよびサブタスクＹによる下位参照処理後に、上位タスクＳ１による上位更新処理が行われるため、下位タスクＶに参照されるグローバル変数ｃの同時性に関する問題はない。
一方、下位タスクＶ２においては、サブタスクＸによる下位参照処理後、サブタスクＹによる下位参照処理の実行前に上位タスクＳ２による上位更新処理が行われる。この事例は、例えば、サブタスクＸの処理時間が長くかかる場合に起こり得る。この場合、サブタスクＸは更新前の古いデータを参照し、サブタスクＹは更新後の新しいデータを参照することとなり、サブタスクＸとサブタスクＹとの間でのグローバル変数ｃの同時性が破綻する（Ｎ１０１）。
【００４４】
図３（ｂ）は、第１実施形態により、下位タスクの開始時に複製処理を実行する場合を示す。上位タスクＳは、作業領域Ｃ１のグローバル変数ｃを更新する。下位タスクＶは、開始時ｔｉに作業領域Ｃ１のグローバル変数ｃを公開領域Ｃ２に複製する。下位タスクＶのサブタスクＸおよびサブタスクＹは、それぞれ公開領域Ｃ２のグローバル変数ｃを参照する。なお、図中「ｃ」は複製されるグローバル変数を表し、「（ｃ）」は参照されるグローバル変数を表す。以下、各図にて、適宜、グローバル変数を同様に表示する。
【００４５】
下位タスクＶ２において、サブタスクＸおよびサブタスクＹは、下位タスクＶ２の開始時ｔｉに複製されたグローバル変数ｃを共に参照する。したがって、下位タスクＶ２中に発生する上位タスクＳ２に影響されることなく、サブタスクＸおよびサブタスクＹの下位参照処理におけるグローバル変数ｃの同時性が確保される（Ｎ１１１）。
【００４６】
次に、図４および図５（ａ）は、第１実施形態に対する別の比較例として、特許文献１の従来技術による「領域切換処理」を示す。図４に示すように、上位タスクＳは、作業領域Ｚ１のグローバル変数ｚを更新する。また、下位タスクＶ１のサブタスクＹの完了時に作業領域Ｚ１と公開領域Ｚ２とを切り換える。その次の周期の下位タスクＶ２では、サブタスクＸおよびサブタスクＹは、公開領域Ｚ２のグローバル変数ｚを参照する。
【００４７】
この領域切換処理では、サブタスクＸおよびサブタスクＹは、１周期前のサブタスクＹの完了時以前に作業領域Ｚ１に記憶されていたデータを参照することとなる。その結果、上位タスクＳの実行周期が下位タスクＶの実行周期よりも速い場合には、下位タスクＶの下位参照処理において下位タスクＶの１周期分のデータ遅延が発生する。
これに対し、第１実施形態では、図３（ｂ）に示すように、下位タスクＶの開始時ｔｉにおける最新データを参照することができ、１周期分のデータ遅延は発生しない。
【００４８】
また、従来技術による領域切換処理で、図５（ａ）に示すように、何らかの理由で上位タスクＳが作業領域Ｚ１でのデータ更新を停止した場合を想定する。上位タスクＳ１で更新された最新データは下位タスクＶ１のサブタスクＹの完了時に公開領域Ｚ２に記憶され、下位タスクＶ１の次周期の下位タスクＶ２ではこの最新データを参照する。しかし、次周期の下位タスクＶ３では、２周期前に公開領域Ｚ２にあったデータ、すなわち、下位タスクＶ１が参照した過去データを参照することとなる。そして、下位タスクＶ３の次周期の下位タスクＶ４では、再び最新データを参照し、その後、過去データと最新データとを交互に繰り返し参照し使用するため、データハンチングが生じ、制御上重大な問題を招くおそれがある。
これに対し、第１実施形態では、図５（ｂ）に示すように、上位タスクＳが作業領域Ｃ１でのデータ更新を停止した場合でも、下位タスクＶは、常に最新データを参照することができ、データハンチングは発生しない。
【００４９】
以上のように、第１実施形態は、複製処理を行うことにより、複数のデータ間の同時性を確保することができる。
また、従来技術による領域切換処理と比較すると、下位タスクの１周期分のデータ遅延が発生しない。また、データハンチングの問題がないため、特にデータハンチングが問題となるようなシステムでは有効である。
【００５０】
（第２実施形態）
本発明の第２実施形態による処理を図６に基づいて説明する。第２実施形態は、第１のケースで、複数のグローバル変数についての複製処理の実行中に、上位更新処理の割り込みを禁止する「割り込み禁止処理」を実行する。
図６（ａ）は、第２実施形態に対する比較例として、割り込み禁止処理がされない場合を示す。上位タスクＳは作業領域Ｃ１、Ｄ１のグローバル変数ｃ、ｄを更新する。下位タスクＶのサブタスクＸおよびサブタスクＹは、下位タスクＶの開始時ｔｉの後、公開領域Ｃ２、Ｄ２からグローバル変数ｃ、ｄを参照する。
【００５１】
下位タスクＶ１においては、上位タスクＳの影響を受けることなく、サブタスクＸおよびサブタスクＹが参照するグローバル変数ｃ、ｄの同時性が確保される。また、下位タスクＶ２においても、実行途中で発生する上位タスクＳ２は、作業領域Ｃ１、Ｄ１から公開領域Ｃ２、Ｄ２への複製処理に影響しないため、グローバル変数ｃ、ｄの同時性が確保される（Ｎ２０２）。
【００５２】
一方、下位タスクＶ３では、グローバル変数ｃの複製後、グローバル変数ｄの複製前に上位タスクＳ３が発生してデータが更新される。したがって、サブタスクＸおよびサブタスクＹは、グローバル変数ｃについては更新前の古いデータを参照し、グローバル変数ｄについては更新後の新しいデータを参照することとなる。その結果、下位参照処理におけるグローバル変数ｃ、ｄの同時性が破綻する（Ｎ２０３）。
【００５３】
図６（ｂ）は、第２実施形態により、複製処理の実行時に割り込み禁止処理を行う場合を示す。下位タスクＶの開始時ｔｉの後、２点鎖線で示すように、上位タスクＳによる上位更新処理の割り込みが禁止される割り込み禁止期間Ｐｉｎｔが、サブタスクＸおよびサブタスクＹについて共通に設定される。そして、割り込み禁止期間Ｐｉｎｔ中に複製処理が実行される。
下位タスクＶ３では、下位タスクＶの開始時ｔｉの後、割り込み禁止期間Ｐｉｎｔが終了するまで上位タスクＳ３の実行開始が待たされる。その結果、上位タスクＳ３の影響を受けずに作業領域Ｃ１、Ｄ１から公開領域Ｃ２、Ｄ２への複製処理がされるため、グローバル変数ｃ、ｄの同時性が確保される（Ｎ２１３）。
【００５４】
これにより、第２実施形態では、複数のグローバル変数についての複製処理が上位更新処理の前後に跨らないようにすることで、データの同時性破綻を回避することができる。
また、グローバル変数ｃ、ｄについて、共通の割り込み禁止処理を実行するため、各グローバル変数について個々に割り込み禁止処理を実行する場合に比べ、ＥＣＵ１０の処理負荷を低減することができる。
さらに、割り込み禁止処理は、優先度の高い上位タスクの実行を遅らせるためリアルタイム性を損なうというデメリットを伴う。そのため、割り込み禁止処理を共通にして回数を減らすことで、リアルタイム性への影響を最小限に抑えることができる。
【００５５】
（第３実施形態）
本発明の第３実施形態による処理を図７に基づいて説明する。第３実施形態は、第１のケースで、下位タスクの完了時に複製処理を実行する。
下位タスクＶ１では、サブタスクＸおよびサブタスクＹによる下位参照処理の実行後に上位タスクＳ１による上位更新処理がされるため、データの同時性に関する問題はない。一方、下位タスクＶ２では、サブタスクＸによる下位参照処理の実行後、サブタスクＹによる下位参照処理の実行前に上位タスクＳ２が発生する。しかし、作業領域Ｃ１から公開領域Ｃ２への複製処理は下位タスクＶ２の完了時ｔｆにされるため、サブタスクＹは更新前のデータを参照し、サブタスクＸとの間でデータの同時性が確保される（Ｎ３１２）。
第３実施形態では、第１実施形態と同様に、複数のデータ間の同時性を確保することができる。
【００５６】
（第４実施形態）
本発明の第４実施形態による処理を図８に基づいて説明する。第４実施形態は、第１のケースで、複数の下位タスク毎に複数の公開領域を割り当て、複製処理において、それぞれの下位タスクで使用されるグローバル変数を作業領域から公開領域へ複製する。
図８（ａ）は、第４実施形態に対する比較例として、複数の下位タスクが１つの公開領域を共用する場合を示す。上位タスクＳは作業領域Ｃ１のグローバル変数ｃを更新する。下位タスクは、優先度が高い順に３つの下位タスクＵ、Ｖ、Ｗを含み、優先度が相対的に高い下位タスクは、優先度が相対的に低い下位タスクの実行中に割り込んで実行される。下位タスクＵは、下位タスクＶよりも実行周期が速い。下位タスクＷのうち破線で指示する部分は、上位タスクＳまたは下位タスクＵ、Ｖの割り込みによって下位タスクＷの実行が中断されることを意味する。
また、下位タスクＶの開始時ｔｉにグローバル変数ｃの複製処理が実行される。下位タスクＵ、Ｖ、Ｗは、いずれもグローバル変数ｃを参照する。
【００５７】
この場合、問題点が２つある。問題点の１つめは、下位タスクＵが参照するデータの遅延に関する。上位タスクＳ２の後に発生する下位タスクＵ２は、本来最新のグローバル変数ｃを参照するのが望ましい。しかし、下位タスクＶ２による複製処理が下位タスクＵ２の後に実行されるため、下位タスクＵ２は、１周期前の下位タスクＶ１で複製された古いデータを参照することとなる（Ｎ４０１）。
【００５８】
問題点の２つめは、下位タスクＷが参照するデータの同時性に関する。下位タスクＷ１の実行中には下位タスクＶ１による複製処理がされないため、データの同時性に関する問題はない。一方、下位タスクＷ２の実行中には下位タスクＶ２による複製処理がされる。すると、下位タスクＷ２では、グローバル変数ｃについて、下位タスクＶ２の実行前には更新前の古いデータを参照し、下位タスクＶ２の実行後には更新後の新しいデータを参照することとなり、データの同時性が破綻する（Ｎ４０２）。
【００５９】
図８（ｂ）は、第４実施形態により、下位タスクＵ、Ｖ、Ｗにそれぞれ公開領域Ｃ２、Ｃ３、Ｃ４を割り当てる場合を示す。下位タスクＵ、Ｖ、Ｗのそれぞれの開始時ｔｉｕ、ｔｉｖ、ｔｉｗに、作業領域Ｃ１から各公開領域Ｃ２、Ｃ３、Ｃ４へのグローバル変数ｃの複製処理を行う。すなわち、各下位タスクは、各実行周期に応じて複製処理を行う。
これにより、下位タスクＵ２は、下位タスクＵ２の開始時ｔｉｕに複製された最新のデータを参照することができる（Ｎ４１１）。
【００６０】
また、下位タスクＷ２では、下位タスクＶ２の割り込みに影響されることなく、下位タスクＷ２の開始時ｔｉｗに参照した同一のデータを参照するため、データの同時性が確保される（Ｎ４１２）。
これにより、第４実施形態では、優先度が相対的に低い下位タスクの実行途中に、優先度が相対的に高い別の下位タスクによって複製処理が実行されることによるデータの同時性破綻を回避することができる。
【００６１】
（第５実施形態）
次に説明する第５〜第８実施形態は、「下位タスクによるグローバル変数の更新途中で上位タスクによってグローバル変数が参照される可能性がある」場合の処理に係る実施形態である。このケースを「第２のケース」という。
本発明の第５実施形態による処理を図９に基づいて説明する。第５実施形態は、第２のケースで、下位タスクの開始時に複製処理を実行する。
【００６２】
図９（ａ）は、第５実施形態に対する比較例として、複製処理がされない場合を示す。下位タスクＶのサブタスクＸは、Ｘ公開領域Ｅのグローバル変数ｅを更新し、下位タスクＶのサブタスクＹは、Ｙ公開領域Ｆのグローバル変数ｆを更新する。
上位タスクＳ１による上位参照処理は、サブタスクＸおよびサブタスクＹの実行後に行われるため、データの同時性に関する問題はない。一方、上位タスクＳ２による上位参照処理は、サブタスクＸによるグローバル変数ｅの下位更新処理後、サブタスクＹによるグローバル変数ｆの下位更新処理の実行前に行われる。この事例は、例えば、サブタスクＸの処理時間が長くかかる場合に起こり得る。この場合、上位タスクＳ２は、グローバル変数ｅについては更新後の新しいデータを参照し、グローバル変数ｆについては更新前の古いデータを参照することとなり、グローバル変数ｅとグローバル変数ｆとの同時性が破綻する（Ｎ５０２）。
【００６３】
図９（ｂ）は、第５実施形態により、下位タスクの開始時に複製処理を実行する場合を示す。下位タスクＶのサブタスクＸは、Ｘ作業領域Ｅ１のグローバル変数ｅを更新し、下位タスクＶのサブタスクＹは、Ｙ作業領域Ｆ１のグローバル変数ｆを更新する。下位タスクＶは、開始時ｔｉに、Ｘ作業領域Ｅ１からＸ公開領域Ｅ２へグローバル変数ｅを複製し、かつ、Ｙ作業領域Ｆ１からＹ公開領域Ｆ２へグローバル変数ｆを複製する。そして、上位タスクＳは、Ｘ公開領域Ｅ２のグローバル変数ｅを参照し、Ｙ公開領域Ｆ２のグローバル変数ｆを参照する。
【００６４】
上位タスクＳ２は、下位タスクＶ２の開始時ｔｉに複製されたグローバル変数ｅ、ｆを共に参照する。したがって、上位タスクＳ２で参照されるグローバル変数ｅ、ｆの同時性が確保される（Ｎ５１２）。
【００６５】
これにより、第５実施形態は、上位参照処理における複数のデータの同時性を確保することができる。
また、下位タスクＶの開始時ｔｉに複製処理を実行するため、その後の下位タスクＶの処理時間のばらつきなどに関係なく、下位更新処理で更新されたデータを常に一定のタイミングで公開領域に複製し、上位タスクが参照可能な状態にすることができる。すなわち、外的要因に対し安定した特性を維持するロバスト性に優れる。
【００６６】
（第６実施形態）
本発明の第６実施形態による処理を図１０に基づいて説明する。第６実施形態は、第２のケースで、複製処理の実行中に上位参照処理の割り込みを禁止する「割り込み禁止処理」を実行する。
図１０（ａ）は、第６実施形態に対する比較例として、割り込み禁止処理がされない場合を示す。下位タスクＶのサブタスクＸは、Ｘ作業領域Ｅ１のグローバル変数ｅを更新し、下位タスクＶのサブタスクＹは、Ｙ作業領域Ｆ１のグローバル変数ｆを更新する。下位タスクＶは、開始時ｔｉに、Ｘ作業領域Ｅ１からＸ公開領域Ｅ２へグローバル変数ｅを複製し、かつ、Ｙ作業領域Ｆ１からＹ公開領域Ｆ２へグローバル変数ｆを複製する。そして、上位タスクＳは、Ｘ公開領域Ｅ２のグローバル変数ｅを参照し、Ｙ公開領域Ｆ２のグローバル変数ｆを参照する。
【００６７】
上位タスクＳ１による上位参照処理においては、下位タスクＶ１の開始時ｔｉの後、公開領域Ｅ２、Ｆ２に複製されたグローバル変数ｅ、ｆを共に参照するため、グローバル変数ｅ、ｆの同時性が確保される。また、下位タスクＶ２の実行途中に発生する上位タスクＳ２による上位参照処理においても、同様に、下位タスクＶ２の開始時ｔｉの後、公開領域Ｅ２、Ｆ２に複製されたグローバル変数ｅ、ｆを共に参照するため、グローバル変数ｅ、ｆの同時性が確保される（Ｎ６０２）。
【００６８】
一方、上位タスクＳ３による上位更新処理は、Ｘ作業領域Ｅ１からＸ公開領域Ｅ２へのグローバル変数ｅの複製処理の後、Ｙ作業領域Ｆ１からＹ公開領域Ｆ２へのグローバル変数ｆの複製処理の前に行われる。そのため、上位タスクＳ３は、グローバル変数ｅについては更新前の古いデータを参照し、グローバル変数ｆについては更新後の新しいデータを参照することとなる。その結果、グローバル変数ｅ、ｆの同時性が破綻する（Ｎ６０３）。
【００６９】
図１０（ｂ）は、第６実施形態により、複製処理の実行時に割り込み禁止処理を行う場合を示す。下位タスクＶの開始時ｔｉの後、２点鎖線で示すように、上位タスクＳによる上位参照処理の割り込みが禁止される割り込み禁止期間Ｐｉｎｔが、サブタスクＸおよびサブタスクＹについて共通に設定される。そして、割り込み禁止期間Ｐｉｎｔ中に複製処理が実行される。
上位タスクＳ３は、下位タスクＶ３の開始時ｔｉの後、割り込み禁止期間Ｐｉｎｔが終了するまで上位参照処理の実行開始が待たされる。したがって、公開領域Ｅ２、Ｆ２への複製処理の完了後にグローバル変数ｅ、ｆが参照されるため、グローバル変数ｅ、ｆの同時性が確保される（Ｎ６１３）。
【００７０】
これにより、第６実施形態では、複数のグローバル変数についての複製処理が上位参照処理の前後に跨らないようにすることで、データの同時性破綻を回避することができる。
また、グローバル変数ｅ、ｆについて、共通の割り込み禁止処理を実行するため、各グローバル変数について個々に割り込み禁止処理を実行する場合に比べ、ＥＣＵ１０の処理負荷を低減することができる。
さらに、割り込み禁止処理は、優先度の高い上位タスクの実行を遅らせるためリアルタイム性を損なうというデメリットを伴う。そのため、割り込み禁止処理を共通にして回数を減らすことで、リアルタイム性への影響を最小限に抑えることができる。
【００７１】
（第７実施形態）
本発明の第７実施形態による処理を図１１に基づいて説明する。第７実施形態は、第２のケースで、下位タスクの完了時に複製処理を実行する。
下位タスクＶ１では、サブタスクＸおよびサブタスクＹによる下位更新処理の実行後に、上位タスクＳ１による上位参照処理がされるため、データの同時性に関する問題はない。一方、下位タスクＶ２では、サブタスクＸによる下位更新処理の実行後、サブタスクＹによる下位更新処理の実行前に上位タスクＳ２が発生する。しかし、上位タスクＳ２は、１周期前の下位タスクＶ１の完了時ｔｆにＸ公開領域Ｅ２およびＹ公開領域Ｆ２に複製されたグローバル変数ｅ、ｆを共に参照するため、上位参照処理におけるグローバル変数ｅ、ｆの同時性が確保される（Ｎ７１２）。
【００７２】
第７実施形態では、第５実施形態等と同様に、上位参照処理における複数のデータの同時性を確保することができる。
また、下位タスクＶ１の実行後に最初に発生する上位タスクＳ１’による上位参照処理において、第５実施形態では、下位タスク１周期分遅れたデータを参照する（図９（ｂ）参照）のに対し、第７実施形態では、下位タスクＶの完了時ｔｆに複製処理を実行するため、常に最新のデータを参照することができる。
【００７３】
（第８実施形態）
本発明の第８実施形態による処理を図１２に基づいて説明する。第８実施形態は、第２のケースで、複数の上位タスク毎に複数の公開領域を割り当て、複製処理において、それぞれの上位タスクで使用されるグローバル変数を作業領域から公開領域へ複製する。さらに、それぞれの公開領域への複製処理のタイミングを、下位タスクの開始時と下位タスクの完了時とに分ける。
【００７４】
図１２（ａ）は、第８実施形態に対する比較例として、複数の上位タスクが１つの公開領域を共用する場合を示す。下位タスクＶは作業領域Ｅ１のグローバル変数ｅを更新する。２つの上位タスクＳ、Ｔは、上位タスクＳが上位タスクＴに先行して同周期で実行され、いずれも公開領域Ｅ２のグローバル変数ｅを参照する。また、下位タスクＶの開始時ｔｉに、作業領域Ｅ１から公開領域Ｅ２へグローバル変数ｅが複製される。
【００７５】
この場合、上位タスクＳ１および上位タスクＴ１は、いずれも、下位タスクＶ１の開始時ｔｉに複製されたグローバル変数ｅを参照するため、同時性に関する問題はない。ただし、下位タスクＶ１の実行中にグローバル変数ｅが更新され、上位タスクＴ１が下位タスクＶ１の終了後に発生する場合には、上位タスクＴ１は、常に１周期遅れたデータを参照することとなる（Ｎ８０１）。
【００７６】
図１２（ｂ）は、第８実施形態により、上位タスクＳ、ＴにそれぞれＳ用公開領域Ｅ２、Ｔ用公開領域Ｅ３を割り当てる場合を示す。下位タスクＶの開始時ｔｉに作業領域Ｅ１からＳ用公開領域Ｅ２への複製処理を行い、下位タスクＶの完了時ｔｆに作業領域Ｅ１からＴ用公開領域Ａ３への複製処理を行う。
したがって、下位タスクＶ１の終了後に発生する上位タスクＴ１は、下位タスクＶ１の実行中に更新された最新のグローバル変数ｅを参照することができる（Ｎ８１１）。
【００７７】
第５実施形態の効果で説明したように、下位タスクＶの開始時ｔｉに複製処理を実行する場合にはロバスト性が向上し、また、第７実施形態の効果で説明したように、下位タスクＶの完了時ｔｆに複製処理を実行する場合には最新のデータを参照することができる。したがって、上位タスクの特性に応じて、「常に一定のタイミングで更新されるデータを要求するタスク」を上位タスクＳとし、「常に最新のデータを要求するタスク」を上位タスクＴとすることで、両方のタスクの要求を共に満たすことができる。
【００７８】
（その他の実施形態）
（ア）上記の第１、２、３、５、６、７実施形態では、下位タスクが２つのサブタスクＸ、Ｙを含む場合を例示するが、下位タスクのサブタスクは３つ以上であってもよい。
（イ）上記の第４実施形態では、３つの下位タスクＵ、Ｖ、Ｗを例示する。また、上記の第８実施形態では、２つの上位タスクＳ、Ｔを例示する。これら複数の下位タスク、上位タスクの数はこれに限らない。
【００７９】
（ウ）上記の第１、第５実施形態等では、下位タスクＶの開始時ｔｉに複製処理を実行する。この複製タイミングは、開始時ｔｉに限らず、下位タスクＶの実行中最初にグローバル変数を参照または更新するサブタスクＸの開始前であればよい。
また、上記の第３、第７実施形態等では、下位タスクＶの完了時ｔｆに複製処理を実行する。この複製タイミングは、完了時ｔｆに限らず、下位タスクＶの実行中最後にグローバル変数を参照または更新するサブタスクＹの完了後であればよい。
【００８０】
（エ）本発明の情報処理装置は、電動パワーステアリング装置の他、例えば、ＶＧＲＳ（ギア比可変ステアリング）、ＡＲＳ（アクティブリアステアリング）等、様々な用途に適用することができる。
以上、本発明はこのような実施形態に限定されるものではなく、発明の趣旨を逸脱しない範囲において、種々の形態で実施することができる。
【符号の説明】
【００８１】
１            ・・・電動パワーステアリング装置、
１０            ・・・ＥＣＵ（情報処理装置）、
１１            ・・・マイコン、
１２            ・・・ＣＰＵ、
Ｓ、Ｔ          ・・・上位タスク、
Ｕ、Ｖ、Ｗ      ・・・下位タスク、
Ｘ、Ｙ          ・・・サブタスク、
Ｃ１、Ｄ１      ・・・（第１のケースの）作業領域、
Ｃ２、Ｃ３、Ｃ４、Ｄ２・・・（第１のケースの）公開領域、
ｃ、ｄ          ・・・（第１のケースの）グローバル変数、
Ｅ１、Ｆ１      ・・・（第２のケースの）作業領域、
Ｅ２、Ｅ３、Ｆ２・・・（第２のケースの）公開領域、
ｅ、ｆ          ・・・（第２のケースの）グローバル変数、
Ｐｉｎｔ        ・・・割り込み禁止期間。
【図１】
0005798314.tif 000002
【図２】
0005798314.tif 000003
【図３】
0005798314.tif 000004
【図４】
0005798314.tif 000005
【図５】
0005798314.tif 000006
【図６】
0005798314.tif 000007
【図７】
0005798314.tif 000008
【図８】
0005798314.tif 000009
【図９】
0005798314.tif 000010
【図１０】
0005798314.tif 000011
【図１１】
0005798314.tif 000012
【図１２】
0005798314.tif 000013