(57)【要約】【課題】タスク干渉を抑制しつつ時間同期タスクの起動遅延を抑制可能にした、タスク管理装置を提供する。【解決手段】時間同期タスクおよび非同期タスクの実行順序を管理するタスク管理装置において、このタスク管理装置は、実行制御部、蓄積制御部および蓄積管理部を備える。実行制御部は、ＯＳキューＱ１（タスク登録部）にエンキューされている時間同期タスクおよび非同期タスクを、エンキュー順序およびタスク優先度に従って実行させる。蓄積制御部は、非同期タスクを、ＯＳキューＱ１へのエンキューに先立ち蓄積キューＱ２（タスク蓄積部）へエンキューして蓄積させる。蓄積管理部は、蓄積キューＱ２にエンキューされている非同期タスクを、蓄積キューＱ２からデキューしてＯＳキューＱ１へエンキューする。【選択図】図３
2020135214.tif 000002
【特許請求の範囲】
【請求項１】
一定の時間周期で起動要求される時間同期タスク、および前記時間周期とは無関係に起動要求される非同期タスクの、実行順序を管理するタスク管理装置において、
タスク登録部（Ｑ１）にエンキューされている前記時間同期タスクおよび前記非同期タスクを、エンキュー順序およびタスク優先度に従って実行させる実行制御部（Ｓ３２）と、
前記非同期タスクを、前記タスク登録部へのエンキューに先立ちタスク蓄積部（Ｑ２）へエンキューして蓄積させる蓄積制御部（Ｓ２１）と、
前記タスク蓄積部にエンキューされている前記非同期タスクを、前記タスク蓄積部からデキューして前記タスク登録部へエンキューする蓄積管理部（Ｓ２３、Ｓ２３Ｃ、Ｓ４２、Ｓ４２Ｃ）と、
を備えるタスク管理装置。
【請求項２】
前記蓄積管理部は、前記タスク登録部から前記非同期タスクがデキューされる毎に、前記タスク蓄積部に蓄積されている前記非同期タスクを、前記タスク登録部へ１つずつエンキューさせる請求項１に記載のタスク管理装置。
【請求項３】
前記蓄積管理部は、前記タスク登録部から前記非同期タスクがデキューされる毎に、前記タスク蓄積部に蓄積されている前記非同期タスクを、前記タスク登録部へ複数ずつまとめてエンキューさせる請求項１に記載のタスク管理装置。
【請求項４】
前記蓄積管理部は、前記タスク登録部から前記非同期タスクがデキューされる毎に、前記タスク蓄積部に蓄積されている前記非同期タスクを、前記タスク登録部へ所定数ずつエンキューさせ、
前記所定数を条件に応じて可変設定するエンキュー数設定部（Ｓ２３Ａ、Ｓ４２Ａ）を備える請求項１に記載のタスク管理装置。
【請求項５】
一定の時間周期で起動要求される時間同期タスク、および前記時間周期とは無関係に起動要求される非同期タスクの、実行順序を管理するタスク管理装置において、
タスク登録部（Ｑ１）にエンキューされている前記時間同期タスクおよび前記非同期タスクを、エンキュー順序およびタスク優先度に従って実行させる実行制御部（Ｓ３２）と、
前記非同期タスクをタスク蓄積部（Ｑ２）へエンキューして蓄積させる蓄積制御部（Ｓ２１）と、
前記タスク登録部にエンキューされているタスクが存在せず、かつ、前記タスク蓄積部に前記非同期タスクが蓄積されている場合に、前記タスク蓄積部にエンキューされている前記非同期タスクの実行を要求する実行要求タスクを生成し、前記実行要求タスクを前記タスク登録部にエンキューする非同期タスク制御部（Ｓ２３０、Ｓ２３０Ｃ、Ｓ４２０、Ｓ４２０Ｃ）と、
を備えるタスク管理装置。
【請求項６】
前記実行要求タスクは、前記タスク蓄積部に蓄積されている１つの前記非同期タスクについて実行を要求するタスクである請求項５に記載のタスク管理装置。
【請求項７】
前記実行要求タスクは、前記タスク蓄積部に蓄積されている複数の前記非同期タスクについて実行を要求するタスクである請求項５に記載のタスク管理装置。
【請求項８】
前記実行要求タスクは、前記タスク蓄積部に蓄積されている所定数の前記非同期タスクについて実行を要求するタスクであり、
前記所定数を条件に応じて可変設定する実行要求数設定部（Ｓ２３０Ａ、Ｓ４２０Ａ）を備える請求項５に記載のタスク管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この明細書における開示は、時間同期タスクおよび非同期タスクの実行順序を管理する、タスク管理装置に関する。
【背景技術】
【０００２】
特許文献１には、順次発生するタスクの実行順序を管理する、リアルタイムオペレーティングシステム（以下、ＲＴＯＳと記載）が記載されている。ＲＴＯＳにエンキューされてくるタスクは、エンキューされてきた順序に従って実行される。但し、各タスクには優先度が予め設定されている。低優先度タスクの実行中に高優先度タスクがエンキューされてきた場合、ＲＴＯＳは実行中の低優先度タスクを中断させて高優先度タスクを実行させる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−２５２５７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、発生するタスクは、一定の時間周期で起動要求される時間同期タスク、および時間周期とは無関係に起動要求される非同期タスクに分類される。そして、時間同期タスクのインターバル期間中に非同期タスクが大量に発生すると、以下の問題が懸念されるようになる。すなわち、インターバル期間中に大量発生した非同期タスクの優先度と時間同期タスクの優先度が同じである場合、大量発生した非同期タスクの全てが実行完了した後に、時間同期タスクが実行されることになる。そのため、時間同期タスクの実行待ち時間が長くなり、時間同期タスクの起動遅延が生じる。
【０００５】
なお、時間同期タスクの優先度を非同期タスクの優先度より高く設定すれば、非同期タスクの大量発生といった上述の状況であっても、実行中の非同期タスクを中断させて時間同期タスクを実行させることになる。そのため、時間同期タスクの起動遅延は解消される。しかしながら、非同期タスクを中断させることに起因して、非同期タスクで処理されるデータと時間同期タスクで処理されるデータとの不整合が生じるといった、タスク干渉の問題が生じ得る。
【０００６】
開示される１つの目的は、タスク干渉を抑制しつつ時間同期タスクの起動遅延を抑制可能にした、タスク管理装置を提供することである。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、開示された１つの態様は、
一定の時間周期で起動要求される時間同期タスク、および時間周期とは無関係に起動要求される非同期タスクの、実行順序を管理するタスク管理装置において、
タスク登録部（Ｑ１）にエンキューされている時間同期タスクおよび非同期タスクを、エンキュー順序およびタスク優先度に従って実行させる実行制御部（Ｓ３２）と、
非同期タスクを、タスク登録部へのエンキューに先立ちタスク蓄積部（Ｑ２）へエンキューして蓄積させる蓄積制御部（Ｓ２１）と、
タスク蓄積部にエンキューされている非同期タスクを、タスク蓄積部からデキューしてタスク登録部へエンキューする蓄積管理部（Ｓ２３、Ｓ２３Ｃ、Ｓ４２、Ｓ４２Ｃ）と、
を備えるタスク管理装置とされる。
【０００８】
ここに開示されたタスク管理装置によると、発生直後の非同期タスクを、タスク登録部とは別のタスク蓄積部に溜めておき、その後で、タスク登録部へエンキューさせることができる。つまり、非同期タスクを、発生時点よりも遅れたタイミングでタスク登録部へエンキューさせることができる。そのため、その溜められている期間中に時間同期タスクが発生した場合、溜められている非同期タスクよりも後に発生した時間同期タスクを、その非同期タスクよりも先にタスク登録部へエンキューできる。したがって、時間同期タスクの優先度を非同期タスクの優先度より高くすることなく、非同期タスクよりも後に発生した時間同期タスクを、その非同期タスクよりも先にタスク登録部へエンキューできる。よって、実行中の非同期タスクの中断を要することなく、時間同期タスクの起動遅延を抑制できる。
【０００９】
上記目的を達成するため、開示された１つの態様は、
一定の時間周期で起動要求される時間同期タスク、および時間周期とは無関係に起動要求される非同期タスクの、実行順序を管理するタスク管理装置において、
タスク登録部（Ｑ１）にエンキューされている時間同期タスクおよび非同期タスクを、エンキュー順序およびタスク優先度に従って実行させる実行制御部（Ｓ３２）と、
非同期タスクをタスク蓄積部（Ｑ２）へエンキューして蓄積させる蓄積制御部（Ｓ２１）と、
タスク登録部にエンキューされているタスクが存在せず、かつ、タスク蓄積部に非同期タスクが蓄積されている場合に、タスク蓄積部にエンキューされている非同期タスクの実行を要求する実行要求タスクを生成し、実行要求タスクをタスク登録部にエンキューする非同期タスク制御部（Ｓ２３０、Ｓ２３０Ｃ、Ｓ４２０、Ｓ４２０Ｃ）と、
を備えるタスク管理装置とされる。
【００１０】
ここに開示されたタスク管理装置によると、発生直後の非同期タスクを、タスク登録部とは別のタスク蓄積部に溜めておき、その後で、タスク登録部からデキューして実行させることができる。そのため、タスク蓄積部に溜められている期間中に時間同期タスクが発生した場合、溜められている非同期タスクよりも後に発生した時間同期タスクを、その非同期タスクよりも先にタスク登録部へエンキューして実行できる。したがって、時間同期タスクの優先度を非同期タスクの優先度より高くすることなく、非同期タスクよりも後に発生した時間同期タスクを、その非同期タスクよりも先にタスク登録部へエンキューできる。よって、実行中の非同期タスクの中断を要することなく、時間同期タスクの起動遅延を抑制できる。
【００１１】
尚、上記括弧内の参照番号は、後述する実施形態における具体的な構成との対応関係の一例を示すものにすぎず、技術的範囲を何ら制限するものではない。
【図面の簡単な説明】
【００１２】
【図１】第１実施形態に係るタスク管理装置が適用された、制御システムの全体図である。
【図２】第１実施形態に係るソフトウェア資源の構成図である。
【図３】第１実施形態に係るタスク管理装置による、制御の一例を示すタイムチャートである。
【図４】第１実施形態に係るタスク管理装置による、時間同期タスク発生時の処理手順を示すフローチャートである。
【図５】第１実施形態に係るタスク管理装置による、非同期タスク発生時の処理手順を示すフローチャートである。
【図６】第１実施形態に係るタスク管理装置による、タスク起動の処理手順を示すフローチャートである。
【図７】第１実施形態に係るタスク管理装置による、非同期タスクの実行完了時の処理手順を示すフローチャートである。
【図８】第２実施形態に係るタスク管理装置による、非同期タスク発生時の処理手順を示すフローチャートである。
【図９】第２実施形態に係るタスク管理装置による、非同期タスクの実行完了時の処理手順を示すフローチャートである。
【図１０】第３実施形態に係るタスク管理装置による、制御の一例を示すタイムチャートである。
【図１１】第３実施形態に係るタスク管理装置による、非同期タスク発生時の処理手順を示すフローチャートである。
【図１２】第３実施形態に係るタスク管理装置による、非同期タスクの実行完了時の処理手順を示すフローチャートである。
【図１３】第４実施形態に係るタスク管理装置による、非同期タスク発生時の処理手順を示すフローチャートである。
【図１４】第４実施形態に係るタスク管理装置による、非同期タスクの実行完了時の処理手順を示すフローチャートである。
【図１５】第１実施形態の比較例としてのタスク管理装置による、非同期タスク発生時の処理手順を示すタイムチャートである。
【発明を実施するための形態】
【００１３】
以下、本開示の複数の実施形態を図面に基づいて説明する。尚、各実施形態において対応する構成要素には同一の符号を付すことにより、重複する説明を省略する場合がある。各実施形態において構成の一部分のみを説明している場合、当該構成の他の部分については、先行して説明した他の実施形態の構成を適用することができる。
【００１４】
（第１実施形態）
図１は、制御装置１と、各種入力装置３０と、各種出力装置４０と、を備える制御システムを示す。これらの制御装置１、各種入力装置３０および各種出力装置４０は、車両に搭載されている。この車両には、走行駆動源となるエンジン（内燃機関）が搭載されている。制御装置１は、各種入力装置３０で検出される値に基づき、各種出力装置４０の作動を制御する。
【００１５】
各種出力装置４０の具体例としては、エンジンの燃焼に用いられる燃料を噴射するインジェクタや、エンジンの点火に用いられる点火装置のイグナイタ等が挙げられる。各種入力装置３０の具体例としては、回転角センサや吸気量センサ、水温センサ等が挙げられる。回転角センサは、エンジンのクランク軸が所定角度回転する毎にパルス状の信号を出力する。吸気量センサは、エンジン燃焼室へ吸入される空気量（吸気量）に応じた検出信号を出力する。水温センサは、エンジンの冷却水温度に応じた検出信号を出力する。
【００１６】
制御装置１は、マイクロコンピュータ（マイコン１０）と、入力回路２１と、出力回路２２と、を備える。入力回路２１は、各種入力装置３０から入力されてくる信号の波形成形やＡ／Ｄ変換等の処理を行う。出力回路２２は、各種出力装置４０への駆動電力の供給や、駆動信号の出力等を行う。制御装置１は、車内ＬＡＮ３２を通じて他の制御装置と相互に通信を行う機能を備える。例えば、他の制御装置で何かしらの異常が検知された場合、異常が生じている旨の信号（異常信号）が入力回路２１へ入力される。
【００１７】
例えば、マイコン１０は、単位時間当たりに回転角センサから出力されたパルス信号の数に基づき、単位時間当たりのクランク軸の回転数（エンジン回転数）を算出する。マイコン１０は、吸気量センサから出力された検出信号に基づき吸気量を算出する。このように算出された吸気量は、エンジン負荷を表す指標として用いられる。マイコン１０は、水温センサから出力された検出信号に基づき冷却水温度を算出する。
【００１８】
制御装置１は、算出されたエンジン回転数、エンジン負荷および冷却水温度等に基づき、インジェクタの作動を制御（燃料噴射制御）したり、イグナイタの作動を制御（点火制御）したりする。これにより、エンジン出力や排気エミッション等のエンジン運転状態が制御される。燃料噴射制御や点火制御は、クランク軸が所定角度回転する毎に実行される。つまり、高エンジン回転数であるほど、燃料噴射制御や点火制御に要する制御装置１の演算処理負荷は大きくなる。
【００１９】
マイコン１０は、プロセッサ（ＣＰＵ１１）、不揮発性メモリ（ＲＯＭ１２）、揮発性メモリ（ＲＡＭ１３）および入出力ポート（Ｉ／Ｏポート）を備える。ＲＯＭ１２およびＲＡＭ１３に係るメモリは、プロセッサによって読み取り可能な「プログラムおよび／またはデータ」を非一時的に格納する非遷移的かつ実体的な記憶媒体である。記憶媒体は、半導体メモリによって提供される。プログラムは、それ単体で、またはプログラムが格納された記憶媒体として流通する場合がある。
【００２０】
ＣＰＵ１１は、演算結果をＲＡＭ１３に記憶させながら、ＲＯＭ１２に記憶されている各種プログラムを実行する。各種プログラムの具体例としては、先述した燃料噴射制御および点火制御等の各種出力装置４０の制御プログラムや、電気的または機械的な異常を検知するプログラム等が挙げられる。
【００２１】
プログラムの実行等により生成されるタスクは、ＣＰＵ１１のスケジューリング対象となる基本単位である。上記タスクは、プログラムをＲＡＭ１３に読み込み、ＣＰＵ１１のレジスタ群やＲＡＭ１３のスタック領域を使用しながら実行される。タスクは、待ち状態、実行可能状態および実行状態に遷移する。
【００２２】
実行状態は、タスクにＣＰＵ１１が割り付けられて命令が実行されている状態である。実行可能状態は、他のタスクによってＣＰＵ１１が使用されているため実行されていないが、ＣＰＵ１１が割り付けられれば直ちにＣＰＵ１１を使用できる状態である。待ち状態は、入出力の完了や他のタスクからのメッセージ到着等、何らかの事象の発生を待っている状態である。待ち状態のタスクには、事象の発生までＣＰＵ１１は割り付けられない。
【００２３】
図２は、マイコン１０により実現されるソフトウェア資源の階層構造を示す。ソフトウェア資源は、リアルタイムオペレーティングシステム（ＲＴＯＳ１０ａ）と、逐次実行ソフト１０ｂと、各種のアプリケーション１０ｃと、を備える。
【００２４】
ＲＴＯＳ１０ａは、各アプリケーション１０ｃの起動、停止、監視などを含めた制御を行う。ＲＴＯＳ１０ａは、タスクが生成されてから実行されるまでの時間に制限を持って、タスクをスケジュール管理している。例えば、ハードウェア割り込みが発生してから処理ルーチンを呼出すまでの時間が最悪値を越えないように、ＲＴＯＳ１０ａはタスクをスケジュール管理している。例えば、高優先度のタスクが確実に実行されることを保証するように、ＲＴＯＳ１０ａはタスクをスケジュール管理している。
【００２５】
逐次実行ソフト１０ｂは、アプリケーション１０ｃとＲＴＯＳ１０ａとの中間に入るソフトウェアであり、ミドルウェアとも呼ばれる。アプリケーション１０ｃはミドルウェアに要求を出すと、ミドルウェアがＲＴＯＳ１０ａに必要な要求を出し、結果をアプリケーション１０ｃに返す。あるいはミドルウェア自体が各アプリケーション１０ｃの起動、停止、監視などを含めた制御を行う。
【００２６】
なお、本明細書では、例えば「タスクが・・・する」「ＲＴＯＳが・・・する」「逐次実行ソフト１０ｂが・・・する」というプログラムを主体とした表現を適宜用いているが、ハードウェア的な視点では上記主体はマイコン１０である。
【００２７】
ＲＡＭ１３上には各タスク用のキューのためのバッファ（記憶領域）が確保されている。キューは、先入れ先出し（ＦＩＦＯ）のリスト構造でデータを保持するデータ構造である。図３に示すように、ＲＴＯＳ１０ａで管理されるキューは、本明細書ではＯＳキューＱ１と呼ばれ、「タスク登録部」に相当する。逐次実行ソフト１０ｂで管理されるキューは、本明細書では蓄積キューＱ２と呼ばれ、「タスク蓄積部」に相当する。
【００２８】
発生する各種のタスクは、一定の時間周期で起動要求される時間同期タスクと、時間周期とは無関係に起動要求される非同期タスクとに分類される。各種のタスクには、優先度が設定されている。高優先度のタスクは、低優先度のタスクよりも優先してＣＰＵ１１に割り付けられる。例えば、低優先度のタスクを実行している最中に高優先度のタスクが発生すると、実行中の低優先度タスクを中断して高優先度タスクを実行するように、タスクの実行順序が管理される。
【００２９】
非同期タスクは、蓄積キューＱ２にエンキューされ、その後、蓄積キューＱ２からデキューされてＯＳキューＱ１にエンキューされる。ＯＳキューＱ１にエンキューされている非同期タスクは、ＣＰＵ１１に割り付けられる順番が到来したタイミングでＯＳキューＱ１からデキューされ、ＣＰＵ１１により実行される。つまり、非同期タスクは、ＯＳキューＱ１にエンキューされることに先立ち、蓄積キューＱ２にエンキューされる。
【００３０】
蓄積キューＱ２にエンキューされている非同期タスクは、ＯＳキューＱ１への非同期タスクの登録数が所定登録数以下であることを条件として、ＯＳキューＱ１へのエンキューが許可される。そして、本実施形態では所定登録数は１つに設定されている。したがって、短時間で大量の非同期タスクが生じた場合であっても、大量の非同期タスクが短時間で一度にＯＳキューＱ１にエンキューされることはなく、蓄積キューＱ２に一旦蓄積される。そして、蓄積された非同期タスクは、蓄積キューＱ２から少しずつＯＳキューＱ１にエンキューされる（移動する）ことになる。
【００３１】
蓄積キューＱ２からＯＳキューＱ１へ非同期タスクが移動するタイミングは、ＯＳキューＱ１から非同期タスクがデキューされて実行されるタイミングに設定されている。したがって、ＯＳキューＱ１から非同期タスクがデキューされる毎に、次の非同期タスクがＯＳキューＱ１にエンキューされる。
【００３２】
時間同期タスクは、蓄積キューＱ２にエンキューされることなくＯＳキューＱ１にエンキューされる。つまり、時間同期タスクは、蓄積キューＱ２に蓄積されることなく、ＯＳキューＱ１に直接エンキューされる。時間同期タスクには、異なる時間周期のタスクが含まれる。例えば、１０ｍｓの時間周期で発生する時間同期タスクや、３ｍｓの時間周期で発生する時間同期タスク等が存在する。図３に示す例では、複数種類の時間同期タスクのうち、１０ｍｓの時間同期タスクだけが記載されている。
【００３３】
次に、図３を用いて、上述したタスクの実行順序管理の一例を説明する。
【００３４】
ｔ１０時点で、時間同期タスク（１０）の起動要求が発生し、その後１０ｍｓ経過したｔ２０時点で、次の時間同期タスク（１０）の起動要求が発生している。そして、ｔ１０時点からｔ２０時点までの期間、つまり時間同期タスク（１０）のインターバル期間に、４つの非同期タスク（１）（２）（３）（４）の起動要求が発生している。これらの非同期タスク（１）〜（４）および時間同期タスク（１０）は、全て同じ優先度に設定されている。なお、本明細書では、タスクの起動要求が発生したことを、単にタスクが発生したと表現する場合がある。
【００３５】
ｔ１０時点で発生した時間同期タスク（１０）は、直ちにＯＳキューＱ１へエンキューされる。このエンキュー時点では、実行可能状態である他のタスクが１つもＯＳキューＱ１にエンキューされていない状態、かつ、ＣＰＵ１１に割り付けられた実行状態のタスクが存在しない状態である。そのため、ＯＳキューＱ１へエンキューされた時間同期タスク（１０）は直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。
【００３６】
この時間同期タスク（１０）の実行開始時点ｔ１１から実行終了時点ｔ１２までの実行期間中に、先述した４つの非同期タスク（１）〜（４）が発生している。これらの非同期タスク（１）〜（４）は、発生した時点で直ちに蓄積キューＱ２へエンキューされる。
【００３７】
非同期タスク（１）が蓄積キューＱ２へエンキューされた時点では、実行可能状態である他の非同期タスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、蓄積キューＱ２へエンキューされた非同期タスク（１）は直ちにデキューされ、ＯＳキューＱ１にエンキューされる。
【００３８】
非同期タスク（２）が蓄積キューＱ２へエンキューされた時点では、ＯＳキューＱ１に非同期タスク（１）がエンキューされている状態である。そのため、蓄積キューＱ２にエンキューされた非同期タスク（２）は、ＯＳキューＱ１へ移動されずに蓄積キューＱ２に蓄積される。非同期タスク（３）（４）についても同様にして、ＯＳキューＱ１へ移動されずに蓄積キューＱ２に蓄積される。
【００３９】
その後、時間同期タスク（１０）の実行終了時点ｔ１２で、ＯＳキューＱ１にエンキューされている非同期タスク（１）は直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。
【００４０】
その後、非同期タスク（１）の実行終了時点ｔ１３では、他の非同期タスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、蓄積キューＱ２へエンキューされている非同期タスク（２）は直ちにデキューされ、ＯＳキューＱ１にエンキューされる。このエンキュー時点では、実行可能状態である他のタスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、ＯＳキューＱ１へエンキューされた非同期タスク（２）は直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。
【００４１】
次の時間同期タスク（１０）は、非同期タスク（２）の実行期間中のｔ２０時点で発生している。ｔ２０時点で発生した時間同期タスク（１０）は、直ちにＯＳキューＱ１へエンキューされる。このエンキュー時点では、非同期タスク（２）が実行状態である。そのため、時間同期タスク（１０）は、実行可能状態でＯＳキューＱ１に保持される。
【００４２】
その後、非同期タスク（２）の実行終了時点ｔ２１では、他の非同期タスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、蓄積キューＱ２へエンキューされている非同期タスク（３）は直ちにデキューされ、ＯＳキューＱ１にエンキューされる。さらに、非同期タスク（２）の実行終了時点ｔ２１では、ＯＳキューＱ１にエンキューされている時間同期タスク（１０）が直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。
【００４３】
要するに、非同期タスク（１）の実行期間中には、以降の非同期タスク（２）（３）（４）は、ＯＳキューＱ１にエンキューされずに蓄積キューＱ２に蓄積される。その蓄積期間中に発生した時間同期タスク（１０）、つまり非同期タスク（２）（３）（４）より後に発生した時間同期タスク（１０）は、非同期タスク（３）（４）より先にＯＳキューＱ１にエンキューされる。時間同期タスク（１０）の発生時点ｔ２０から実行開始時点ｔ２１までの時間が、時間同期タスク（１０）の起動遅延時間Ｔａ（図中の矢印参照）に相当する。
【００４４】
その後、時間同期タスク（１０）の実行終了時点ｔ２２で、ＯＳキューＱ１にエンキューされている非同期タスク（３）は直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。
【００４５】
その後、非同期タスク（３）の実行終了時点ｔ２３では、他の非同期タスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、蓄積キューＱ２へエンキューされている非同期タスク（４）は直ちにデキューされ、ＯＳキューＱ１にエンキューされる。このエンキュー時点では、他のタスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、ＯＳキューＱ１へエンキューされた非同期タスク（４）は直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。
【００４６】
次に、図４〜図７を用いて、上述したタスク実行順序を制御するための処理手順について説明する。これらの処理は、制御装置１に電源供給されている期間に、所定の演算周期でマイコン１０により繰り返し実行される。
【００４７】
図４は、時間同期タスクに対する処理フローを示しており、先ずステップＳ１０では、時間同期タスクが前回発生してから所定時間が経過したか否かが判定される。この所定時間は、先述した時間周期に設定されている。ステップＳ１０の判定は、複数種類の時間同期タスクの各々に対して実行される。所定時間経過したと判定された場合、続くステップＳ１１において、該当する種類の時間同期タスクが、ＯＳキューＱ１へエンキューされる。
【００４８】
図５は、非同期タスクに対する処理フローを示しており、先ずステップＳ２０では、非同期タスクが発生したか否かを判定する。例えば、車内ＬＡＮ３２を通じて他の制御装置から異常信号が制御装置１へ入力された場合に、その異常信号入力に起因して発生するタスクが、非同期タスクの具体例として挙げられる。非同期タスクが発生したと判定された場合、続くステップＳ２１において、その発生した非同期タスクが蓄積キューＱ２にエンキューされる。続くステップＳ２２では、ＯＳキューＱ１にエンキューされている非同期タスクがあるか否かを判定する。非同期タスクなしと判定された場合、続くステップＳ２３において、１つの非同期タスクが、蓄積キューＱ２からデキューされてＯＳキューＱ１へエンキューされる。つまり、１つの非同期タスクが蓄積キューＱ２からＯＳキューＱ１へ移動される。ＯＳキューＱ１にエンキューされている非同期タスクがあると判定された場合には、上記移動が禁止される。
【００４９】
図６は、ＯＳキューＱ１をデキューするための処理フローを示しており、先ずステップＳ３０では、実行中のタスクがあるか否かが判定される。実行中タスクなしと判定された場合、続くステップＳ３１において、ＯＳキューＱ１にエンキューされているタスクがあるか否かが判定される。タスクありと判定された場合、続くステップＳ３２において、ＯＳキューＱ１に最初にエンキューされたタスクが、ＯＳキューＱ１からデキューされて起動される。
【００５０】
図７は、蓄積キューＱ２をデキューするための処理フローを示しており、先ずステップＳ４０では、非同期タスクの実行が完了したか否かが判定される。実行完了と判定された場合、続くステップＳ４１において、蓄積キューＱ２にエンキューされている非同期タスクがあるか否かが判定される。タスクありと判定された場合、続くステップＳ４２において、１つの非同期タスクが、蓄積キューＱ２からデキューしてＯＳキューＱ１へエンキューされて移動される。
【００５１】
以上に説明した図４〜図７の制御を実行することで、図３に例示されるように、時間同期タスク（１０）および非同期タスク（１）〜（４）の実行順序が制御される。なお、ステップＳ３２の処理を実行している時のマイコン１０は、ＯＳキューＱ１にエンキューされているタスクを、エンキュー順序およびタスク優先度に従って実行させる「実行制御部」に相当する。ステップＳ２１の処理を実行している時のマイコン１０は、非同期タスクを、ＯＳキューＱ１へのエンキューに先立ち蓄積キューＱ２へエンキューして蓄積させる「蓄積制御部」に相当する。ステップＳ２３、Ｓ４２の処理を実行している時のマイコン１０は、蓄積キューＱ２にエンキューされている非同期タスクを、蓄積キューＱ２からデキューしてＯＳキューＱ１へエンキューする「蓄積管理部」に相当する。また、マイコン１０が「タスク管理装置」を提供する。
【００５２】
＜作用効果＞
以下、上述した構成を備えることによる効果について、図１５を参照しつつ、本実施形態の比較例としてのタスク管理装置と比較しながら説明する。この比較例は、上述した蓄積キューＱ２が廃止されたタスク管理装置であり、発生した非同期タスクは、蓄積キューＱ２に蓄積されることなく発生時点でＯＳキューＱ１にエンキューされる。そのため、時間同期タスク（１０）の実行期間中に先述した４つの非同期タスク（１）〜（４）が発生した場合、これらの非同期タスク（１）〜（４）が順次実行された後に、次回の時間同期タスク（１０）の実行が開始される。よって、時間同期タスク（１０）の起動遅延時間Ｔａが長くなる。
【００５３】
なお、時間同期タスクの優先度を非同期タスクの優先度より高く設定すれば、インターバル期間中に非同期タスクが大量発生するといった図１５の状況であっても、実行中の非同期タスク（２）を中断させて時間同期タスク（１０）が実行されることになる。よって、時間同期タスク（１０）の起動遅延は解消される。しかしながら、非同期タスク（２）を中断させることに起因して、非同期タスク（２）で処理されるデータと時間同期タスクで処理されるデータとの不整合が生じるといった、タスク干渉の問題が生じ得る。
【００５４】
これに対し、本実施形態に係るタスク管理装置は、実行制御部、蓄積制御部および蓄積管理部を備える。そのため、図３に示す通り、非同期タスク（３）（４）よりも後に発生した次回の時間同期タスク（１０）の実行が、それら非同期タスク（３）（４）よりも前に開始される。したがって、時間同期タスクの優先度を非同期タスクの優先度より高くすることなく、非同期タスクよりも後に発生した時間同期タスクを、その非同期タスクよりも先にＯＳキューＱ１へエンキューできる。よって、実行中の非同期タスクの中断に起因したタスク干渉を招くことなく、時間同期タスクの起動遅延時間Ｔａを短くできる。
【００５５】
さらに本実施形態では、蓄積管理部は、ＯＳキューＱ１から非同期タスクがデキューされる毎に、蓄積キューＱ２に蓄積されている非同期タスクが、ＯＳキューＱ１へ１つずつエンキューされる。そのため、複数ずつエンキューさせる場合に比べて、起動遅延時間Ｔａをより一層短くできる。
【００５６】
例えば、非同期タスクをＯＳキューＱ１へ２つずつエンキューさせる場合には、１つ目の非同期タスクの実行中に時間同期タスクが発生すると、起動遅延時間Ｔａは次のように長くなる。すなわち、１つ目の非同期タスクの実行が完了した後に、既に発生している時間同期タスクを実行できず、２つ目の非同期タスクを実行させる。そして、これら２つの時間同期タスクの実行が完了するのを待って、時間同期タスクが実行開始される。これに対し、１つずつエンキューさせる場合には、２つ目の非同期タスクよりも先に時間同期タスクが実行されるので、その分だけ起動遅延時間Ｔａが短縮される。
【００５７】
さらに本実施形態では、ＲＴＯＳ１０ａとは別の階層（ミドルウェア）の逐次実行ソフトが、蓄積キューＱ２の記憶領域を管理している。そのため、ＲＴＯＳ１０ａの機能へ変更させることなく逐次実行ソフトを追加することで、蓄積キューＱ２に非同期タスクを溜めるといった機能が追加され得る。
【００５８】
（第２実施形態）
上記第１実施形態では、蓄積キューＱ２にエンキューされている非同期タスクは、ＯＳキューＱ１から非同期タスクがデキューされる毎に、ＯＳキューＱ１へ１つずつ移動される。これに対し本実施形態では、上記移動の数（所定数）が可変設定される。
【００５９】
具体的には、先述した図５および図７の処理を図８および図９の処理に変更することで、上述した可変設定が実現されている。すなわち、図５のステップＳ２３は、図８のステップＳ２３Ａ、Ｓ２３Ｂ、Ｓ２３Ｃに変更され、図７のステップＳ４２は、図９のステップＳ４２Ａ、Ｓ４２Ｂ、Ｓ４２Ｃに変更されている。
【００６０】
図８のステップＳ２３Ａでは、蓄積キューＱ２から１回でデキューされる所定数が、条件に応じて設定される。例えば、マイコン１０の処理負荷が大きい場合であるほど、上記所定数は多い数に設定される。より具体的には、時間同期タスクおよび非同期タスクを実行する処理の負荷が大きいほど、上記所定数は多い数に設定される。或いは、制御装置１に電源投入されて制御装置１が起動を開始してから所定時期までの期間では、その期間以降に比べて、上記所定数は少ない数（例えば１つ）に設定される。例えば上記所定時期は、制御装置１の起動開始後、回転角センサからの出力信号が制御装置１へ最初に入力された時期である。
【００６１】
続くステップＳ２３Ｂでは、蓄積キューＱ２に所定数以上の非同期タスクがあるか否かが判定される。所定数以上あると判定された場合、続くステップＳ２３Ｃにおいて、ステップＳ２３Ａで設定された所定数の非同期タスクが、蓄積キューＱ２からデキューされ、ＯＳキューＱ１にエンキューされる。
【００６２】
なお、図９のステップＳ４２Ａ、Ｓ４３ＢおよびＳ４３Ｃによる各処理は、図８のステップＳ２３Ａ、Ｓ２３ＢおよびＳ２３Ｃによる各処理と同じ内容である。ステップＳ２３Ａ、Ｓ４２Ａの処理を実行している時のマイコン１０は、上記所定数を条件に応じて可変設定する「エンキュー数設定部」に相当する。
【００６３】
＜作用効果＞
以上により、本実施形態によれば、マイコン１０の処理負荷が大きいほど、上記所定数が多い値に設定される。そして、１回で移動させる非同期タスクの数が多いほど、その移動に伴い生じるマイコン１０の処理負荷は軽くなる。この点を鑑み、本実施形態によれば、タスク実行処理等でマイコン１０の処理負荷が大きい場合であるほど、非同期タスクの移動に伴い生じる処理負荷が小さくなる。そのため、タスク実行とタスク移動の全体で生じる処理負荷が軽減される。
【００６４】
（第３実施形態）
上記第１実施形態では、蓄積キューＱ２にエンキューされている非同期タスクは、ＯＳキューＱ１に移動されてから実行される。これに対し本実施形態では、蓄積キューＱ２にエンキューされている非同期タスクの実行を要求する実行要求タスクが生成され、その実行要求タスクがＯＳキューＱ１にエンキューされる。そして、実行要求タスクがＯＳキューＱ１からデキューされて実行されることにより、蓄積キューＱ２にエンキューされている非同期タスクは、ＯＳキューＱ１に移動されることなく実行される。
【００６５】
次に、図１０を用いて、上述したタスクの実行順序管理の一例を説明する。
【００６６】
ｔ１０時点で発生した時間同期タスク（１０）は、直ちにＯＳキューＱ１へエンキューされ、直ちにＣＰＵ１１に割り付けられて実行される。この時間同期タスク（１０）の実行開始時点ｔ１１から実行終了時点ｔ１２までの実行期間中に、発生した４つの非同期タスク（１）〜（４）は、発生した時点で直ちに蓄積キューＱ２へエンキューされる。
【００６７】
非同期タスク（１）が蓄積キューＱ２へエンキューされた時点では、実行可能状態である他の非同期タスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、蓄積キューＱ２へエンキューされた非同期タスク（１）の実行を要求する実行要求タスク（ｑ）が直ちに生成され、ＯＳキューＱ１にエンキューされる。
【００６８】
その後、時間同期タスク（１０）の実行終了時点ｔ１２で、ＯＳキューＱ１にエンキューされている実行要求タスク（ｑ）が直ちにデキューされ、ＣＰＵ１１に割り付けられて実行される。これにより、蓄積キューＱ２へエンキューされている非同期タスク（１）が蓄積キューＱ２からデキューされて実行される。
【００６９】
その後、非同期タスク（１）の実行終了時点ｔ１３では、他のタスクが１つもＯＳキューＱ１にエンキューされていない状態である。そのため、実行要求タスク（ｑ）が直ちに生成されてＯＳキューＱ１にエンキューされ、その後直ちに実行される。これにより、蓄積キューＱ２へエンキューされている非同期タスク（２）が蓄積キューＱ２からデキューされて実行される。
【００７０】
次の時間同期タスク（１０）は、非同期タスク（２）の実行期間中のｔ２０時点で発生し、直ちにＯＳキューＱ１へエンキューされる。このエンキュー時点では、非同期タスク（２）が実行状態である。そのため、時間同期タスク（１０）は、実行可能状態でＯＳキューＱ１に保持される。
【００７１】
その後、非同期タスク（２）の実行終了時点ｔ２１では、実行要求タスク（ｑ）がＯＳキューＱ１にエンキューされていない状態である。そのため、実行要求タスク（ｑ）が直ちに生成されてＯＳキューＱ１にエンキューされる。さらに、非同期タスク（２）の実行終了時点ｔ２１では、ＯＳキューＱ１にエンキューされている時間同期タスク（１０）が直ちにデキューされて実行される。
【００７２】
要するに、非同期タスク（１）の実行期間中には、以降の非同期タスク（２）（３）（４）は、ＯＳキューＱ１にエンキューされずに蓄積キューＱ２に蓄積される。その蓄積期間中に発生した時間同期タスク（１０）、つまり非同期タスク（２）（３）（４）より後に発生した時間同期タスク（１０）は、非同期タスク（３）（４）より先に実行される。時間同期タスク（１０）の発生時点ｔ２０から実行開始時点ｔ２１までの時間が、時間同期タスク（１０）の起動遅延時間Ｔａに相当する。
【００７３】
その後、時間同期タスク（１０）の実行終了時点ｔ２２で、ＯＳキューＱ１にエンキューされている実行要求タスク（ｑ）が直ちに実行される。これにより、蓄積キューＱ２へエンキューされている非同期タスク（３）が蓄積キューＱ２からデキューされて実行される。
【００７４】
その後、非同期タスク（３）の実行終了時点ｔ２３では、実行要求タスク（ｑ）がＯＳキューＱ１にエンキューされていない状態である。そのため、実行要求タスク（ｑ）が直ちに生成されてＯＳキューＱ１にエンキューされて実行され、この実行により、非同期タスク（４）が蓄積キューＱ２からデキューされて実行される。
【００７５】
次に、上述したタスク実行順序を制御するための処理手順について、第１実施形態に係る図４〜図７との相違点について説明する。
【００７６】
図４および図６の処理内容は、本実施形態でも同じである。図５および図７の処理を図１１および図１２の処理に変更することで、上述した実行要求タスク生成の制御が実現されている。すなわち、図５のステップＳ２２、Ｓ２３は、図１１のステップＳ２３０、Ｓ２３０に変更され、図７のステップＳ４２は、図１２のステップＳ４２０に変更されている。
【００７７】
図１１のステップＳ２２０では、ＯＳキューＱ１に実行要求タスクがあるか否かが判定される。実行要求タスクがないと判定された場合、次のステップＳ２３０において、実行要求タスクを生成し、生成した実行要求タスクをＯＳキューＱ１にエンキューする。実行要求タスクとは、蓄積キューＱ２に蓄積されている１つの非同期タスクについて実行を要求するタスクのことである。なお、図１２のステップＳ４２０による処理は、図１１のステップＳ２３０による処理と同じ内容である。
【００７８】
要するに、ステップＳ２３０、Ｓ４２０の処理によれば、ＯＳキューＱ１にエンキューされているタスクが存在せず、かつ、蓄積キューＱ２に非同期タスクが蓄積されている場合に、上記実行要求タスクが生成される。そして、この実行要求タスクは、ＯＳキューＱ１にエンキューされる。このようなステップＳ２３０、Ｓ４２０の処理を実行している時のマイコン１０は、実行要求タスクを生成してＯＳキューＱ１にエンキューする「非同期タスク制御部」に相当する。
【００７９】
＜作用効果＞
以上により、本実施形態によっても、上記第１実施形態と同様の効果が奏される。すなわち、本実施形態に係るタスク管理装置は、実行制御部、蓄積制御部および非同期タスク制御部を備える。そのため、図１０に示す通り、非同期タスク（３）（４）よりも後に発生した次回の時間同期タスク（１０）の実行が、それら非同期タスク（３）（４）よりも前に開始される。したがって、時間同期タスクの優先度を非同期タスクの優先度より高くすることなく、非同期タスクよりも後に発生した時間同期タスクを、その非同期タスクよりも先にＯＳキューＱ１へエンキューできる。よって、実行中の非同期タスクの中断に起因したタスク干渉を招くことなく、時間同期タスクの起動遅延時間Ｔａを短くできる。
【００８０】
さらに本実施形態では、非同期タスク制御部により生成される実行要求タスクは、ＯＳキューＱ１に蓄積されている１つの非同期タスクについて実行を要求するタスクである。そのため、複数ずつ実行させる場合に比べて、起動遅延時間Ｔａをより一層短くできる。
【００８１】
例えば、実行要求タスクが非同期タスクを２つずつ実行させる場合には、１つ目の非同期タスクの実行中に時間同期タスクが発生すると、起動遅延時間Ｔａは次のように長くなる。すなわち、１つ目の非同期タスクの実行が完了した後に、既に発生している時間同期タスクを実行できず、２つ目の非同期タスクを実行させる。そして、これら２つの時間同期タスクの実行が完了するのを待って、時間同期タスクが実行開始される。これに対し、１つずつエンキューさせる場合には、２つ目の非同期タスクよりも先に時間同期タスクが実行されるので、その分だけ起動遅延時間Ｔａが短縮される。
【００８２】
（第４実施形態）
上記第３実施形態では、蓄積キューＱ２にエンキューされている非同期タスクは、実行要求タスクが実行される毎に、１つずつデキューされて実行される。これに対し本実施形態では、実行要求タスクが実行される毎に実行される非同期タスクの数（所定数）が可変設定される。
【００８３】
具体的には、先述した図１１および図１２の処理を図１３および図１４の処理に変更することで、上述した可変設定が実現されている。すなわち、図１１のステップＳ２３０は、図１３のステップＳ２３０Ａ、Ｓ２３０Ｂ、Ｓ２３０Ｃに変更され、図１２のステップＳ４２０は、図１４のステップＳ４２０Ａ、Ｓ４２０Ｂ、Ｓ４２０Ｃに変更されている。
【００８４】
図１３のステップＳ２３０Ａでは、上記所定数が条件に応じて設定される。例えば、マイコン１０の処理負荷が大きい場合であるほど、上記所定数は多い数に設定される。より具体的には、時間同期タスクおよび非同期タスクを実行する処理の負荷が大きいほど、上記所定数は多い数に設定される。或いは、制御装置１に電源投入されて制御装置１が起動を開始してから所定時期までの期間では、その期間以降に比べて、上記所定数は少ない数（例えば１つ）に設定される。例えば上記所定時期は、制御装置１の起動開始後、回転角センサからの出力信号が制御装置１へ最初に入力された時期である。
【００８５】
続くステップＳ２３０Ｂでは、蓄積キューＱ２に所定数以上の非同期タスクがあるか否かが判定される。所定数以上あると判定された場合、続くステップＳ２３０Ｃにおいて、ステップＳ２３０Ａで設定された所定数の非同期タスクを実行する実行要求タスクが生成される。そして、この実行要求タスクは、ＯＳキューＱ１にエンキューされる。このようなステップＳ２３０Ｃ、Ｓ４２０Ｃの処理を実行している時のマイコン１０は、実行要求タスクを生成してＯＳキューＱ１にエンキューする「非同期タスク制御部」に相当する。
【００８６】
なお、図１４のステップＳ４２０Ａ、Ｓ４３０ＢおよびＳ４３０Ｃによる各処理は、図１３のステップＳ２３０Ａ、Ｓ２３０ＢおよびＳ２３０Ｃによる各処理と同じ内容である。ステップＳ２３０Ａ、Ｓ４２０Ａの処理を実行している時のマイコン１０は、上記所定数を条件に応じて可変設定する「実行要求数設定部」に相当する。
【００８７】
＜作用効果＞
以上により、本実施形態によれば、マイコン１０の処理負荷が大きいほど、上記所定数が多い値に設定される。そして、実行要求タスクによる１回の起動で実行させる非同期タスクの数が多いほど、マイコン１０の処理負荷は軽くなる。この点を鑑み、本実施形態によれば、タスク実行処理等でマイコン１０の処理負荷が大きい場合であるほど、実行要求タスクの実行に伴い生じる処理負荷が小さくなるので、マイコン１０の処理負荷が軽減される。
【００８８】
（他の実施形態）
以上、本開示の複数の実施形態について説明したが、各実施形態の説明において明示している構成の組み合わせばかりではなく、特に組み合わせに支障が生じなければ、明示していなくても複数の実施形態の構成同士を部分的に組み合わせることができる。そして、複数の実施形態及び変形例に記述された構成同士の明示されていない組み合わせも、以下の説明によって開示されているものとする。
【００８９】
上記第１実施形態では、ＯＳキューＱ１から非同期タスクがデキューされる毎に、蓄積キューＱ２に蓄積されている非同期タスクが、ＯＳキューＱ１へ１つずつエンキューされる。これに対し、同様の状況下における非同期タスクが、ＯＳキューＱ１へ複数ずつまとめてエンキューされてもよい。
【００９０】
上記第３実施形態では、実行要求タスクは、ＯＳキューＱ１に蓄積されている１つの非同期タスクについて実行を要求するタスクである。これに対し、実行要求タスクは、ＯＳキューＱ１に蓄積されている複数の非同期タスクについて実行を要求するタスクであってもよい。
【００９１】
上記第１実施形態は次のように変形されてもよい。すなわち、蓄積キューＱ２にエンキューされている非同期タスクは、ＯＳキューＱ１への非同期タスクの登録数が所定登録数以下であることを条件として、ＯＳキューＱ１へエンキューされてもよい。その所定登録数は、複数であっても１つであってもよい。なお、所定登録数が少なく設定されているほど、時間同期タスクの起動遅延抑制の効果が大きくなる。
【００９２】
上記第１実施形態では、図３に例示する状況において、非同期タスク（２）を蓄積キューＱ２からＯＳキューＱ１へ移動させるタイミングは、非同期タスク（１）の実行終了時点である。これに対し、上記タイミングは、非同期タスク（１）がＯＳキューＱ１からデキューされた時点、つまり非同期タスク（１）の実行開始時点ｔ１２であってもよい。但し、上記タイミングが非同期タスク（１）の実行終了時点である方が、時間同期タスクの起動遅延抑制の効果が大きくなる。
【符号の説明】
【００９３】
１０…マイコン（タスク管理装置）、Ｑ１…タスク登録部、Ｑ２…タスク蓄積部、Ｓ２１…蓄積制御部、Ｓ３２…実行制御部、Ｓ２３、Ｓ２３Ｃ、Ｓ４２、Ｓ４２Ｃ…蓄積管理部、Ｓ２３０、Ｓ２３０Ｃ、Ｓ４２０、Ｓ４２０Ｃ…非同期タスク制御部、Ｓ２３Ａ、Ｓ４２Ａ…エンキュー数設定部、Ｓ２３０Ａ、Ｓ４２０Ａ…実行要求数設定部
【図１】
2020135214.tif 000003
【図２】
2020135214.tif 000004
【図３】
2020135214.tif 000005
【図４】
2020135214.tif 000006
【図５】
2020135214.tif 000007
【図６】
2020135214.tif 000008
【図７】
2020135214.tif 000009
【図８】
2020135214.tif 000010
【図９】
2020135214.tif 000011
【図１０】
2020135214.tif 000012
【図１１】
2020135214.tif 000013
【図１２】
2020135214.tif 000014
【図１３】
2020135214.tif 000015
【図１４】
2020135214.tif 000016
【図１５】
2020135214.tif 000017