(57)【要約】【課題】タスク実行効率の低下を抑制する【解決手段】ＥＣＵ１では、ＣＰＵコア１１が、キュー格納部３１で設定された実行順（以下、第１実行順という）で複数のタスクを順次実行する。またＣＰＵコア１２が、キュー格納部３２で設定された実行順（以下、第２実行順という）で複数のタスクを順次実行する。そしてＥＣＵ１は、ＣＰＵコア１１がタスクを実行している実行期間と、ＣＰＵコア１２がタスクを実行している実行期間とで重複している部分がある場合において、ＣＰＵコア１１が実行しているタスクと、ＣＰＵコア１２が実行しているタスクとがタスク依存関係を有しないように、第１実行順と第２実行順を変更する。【選択図】図１
2015170180.tif 000002
【特許請求の範囲】
【請求項１】
予め設定された第１実行順で複数のタスク（５０）を順次実行する第１タスク実行手段（１１，Ｓ１３０）と、
前記第１タスク実行手段と並列に、予め設定された第２実行順で複数のタスクを順次実行する第２タスク実行手段（１２，Ｓ１３０）と、
前記第１タスク実行手段が実行するタスクを第１タスクとし、前記第２タスク実行手段が実行するタスクを第２タスクとし、前記第１タスク実行手段が前記第１タスクを実行している第１タスク実行期間と、前記第２タスク実行手段が前記第２タスクを実行している第２タスク実行期間とで重複している部分がある場合において、実行期間が互いに重複している前記第１タスクと前記第２タスクとが、互いに並列に実行されることを許可するように予め設定された実行許可関係を有するように、前記第１実行順と前記第２実行順を変更する実行順変更手段（１１，１２，Ｓ１０〜Ｓ１００）とを備える
ことを特徴とする電子制御装置（１）。
【請求項２】
前記実行順変更手段は、
前記第１実行順で１番目の前記第１タスクが、前記第２タスク実行手段が実行中の前記第２タスクとの間で前記実行許可関係を有するか否かを判断する第１関係判断手段（１１，Ｓ３０）と、
前記実行許可関係を有しないと前記第１関係判断手段が判断した場合に、前記第１関係判断手段において判断対象となった前記第１タスクの実行順が１番目より遅くなるように前記第１実行順を変更する第１変更手段（１１，Ｓ９０）と、
前記第２実行順で１番目の前記第２タスクが、前記第１タスク実行手段が実行中の前記第１タスクとの間で前記実行許可関係を有するか否かを判断する第２関係判断手段（１２，Ｓ３０）と、
前記実行許可関係を有しないと前記第２関係判断手段が判断した場合に、前記第２関係判断手段において判断対象となった前記第２タスクの実行順が１番目より遅くなるように前記第２実行順を変更する第２変更手段（１２，Ｓ９０）とを備える
ことを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記実行順変更手段は、
前記第１実行順で１番目の前記第１タスクが、前記第２タスク実行手段が実行中の前記第２タスクとの間で前記実行許可関係を有するか否かを判断する第１関係判断手段と、
前記実行許可関係を有しないと前記第１関係判断手段が判断した場合に、前記第１関係判断手段において判断対象となった前記第１タスクを前記第２タスク実行手段が実行するように前記第１実行順と前記第２実行順を変更する第３変更手段（１１，Ｓ７０）と、
前記第２実行順で１番目の前記第２タスクが、前記第１タスク実行手段が実行中の前記第１タスクとの間で前記実行許可関係を有するか否かを判断する第２関係判断手段と、
前記実行許可関係を有しないと前記第２関係判断手段が判断した場合に、前記第２関係判断手段において判断対象となった前記第２タスクを前記第１タスク実行手段が実行するように前記第１実行順と前記第２実行順を変更する第４変更手段（１２，Ｓ７０）とを備える
ことを特徴とする請求項１に記載の電子制御装置。
【請求項４】
前記実行順変更手段は、
前記第１実行順で１番目の前記第１タスクが、前記第２タスク実行手段が実行中の前記第２タスクとの間で前記実行許可関係を有するか否かを判断する第１関係判断手段と、
前記実行許可関係を有しないと前記第１関係判断手段が判断した場合に、前記第１関係判断手段において判断対象となった前記第１タスクが前記第２タスク実行手段での実行を禁止されているか否かを判断する第１禁止判断手段（１１，Ｓ５０）と、
前記第１タスクが前記第２タスク実行手段での実行を禁止されていると前記第１禁止判断手段が判断した場合に、前記第１関係判断手段において判断対象となった前記第１タスクの実行順が１番目より遅くなるように前記第１実行順を変更する第１実行順変更手段（１１，Ｓ９０）と、
前記第１タスクが前記第２タスク実行手段での実行を禁止されていないと前記第１禁止判断手段が判断した場合に、前記第１関係判断手段において判断対象となった前記第１タスクを前記第２タスク実行手段が実行するように前記第１実行順と前記第２実行順を変更する第２実行順変更手段（１１，Ｓ７０）と、
前記第２実行順で１番目の前記第２タスクが、前記第１タスク実行手段が実行中の前記第１タスクとの間で前記実行許可関係を有するか否かを判断する第２関係判断手段と、
前記実行許可関係を有しないと前記第２関係判断手段が判断した場合に、前記第２関係判断手段において判断対象となった前記第２タスクが前記第１タスク実行手段での実行を禁止されているか否かを判断する第２禁止判断手段（１２，Ｓ５０）と、
前記第２タスクが前記第１タスク実行手段での実行を禁止されていると前記第２禁止判断手段が判断した場合に、前記第２関係判断手段において判断対象となった前記第２タスクの実行順が１番目より遅くなるように前記第２実行順を変更する第３実行順変更手段（１２，Ｓ９０）と、
前記第２タスクが前記第１タスク実行手段での実行を禁止されていないと前記第２禁止判断手段が判断した場合に、前記第２関係判断手段において判断対象となった前記第２タスクを前記第１タスク実行手段が実行するように前記第１実行順と前記第２実行順を変更する第４実行順変更手段（１２，Ｓ７０）とを備える
ことを特徴とする請求項１に記載の電子制御装置。
【請求項５】
前記実行許可関係を有する前記第１タスクと前記第２タスクには互いに異なる許可関係識別情報が設定され、
前記実行順変更手段は、前記第１タスクに設定された前記許可関係識別情報と、前記第２タスクに設定された前記許可関係識別情報とを比較することにより、前記実行許可関係を有するか否かを判断する
ことを特徴とする請求項１〜請求項４の何れか１項に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを並列に実行可能な電子制御装置に関する。
【背景技術】
【０００２】
従来、複数のタスクが共通データを参照および更新することが可能に構成されている場合において共通データの一貫性を保持するために、タスク割り込みを一時的に禁止する排他制御が行われている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−１３１８９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、複数のタスクを並列に実行可能に構成されている場合において共通データの一貫性を保持するために、並列に実行可能な複数のタスクのうち少なくとも１つのタスクの実行を禁止すると、タスク実行効率が低下してしまうという問題があった。
【０００５】
本発明は、こうした問題に鑑みてなされたものであり、タスク実行効率の低下を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するためになされた本発明の電子制御装置は、第１タスク実行手段と、第２タスク実行手段と、実行順変更手段とを備える。
第１タスク実行手段は、予め設定された第１実行順で複数のタスクを順次実行する。第２タスク実行手段は、第１タスク実行手段と並列に、予め設定された第２実行順で複数のタスクを順次実行する。
【０００７】
実行順変更手段は、第１タスク実行手段が実行するタスクを第１タスクとし、第２タスク実行手段が実行するタスクを第２タスクとし、第１タスク実行手段が第１タスクを実行している第１タスク実行期間と、第２タスク実行手段が第２タスクを実行している第２タスク実行期間とで重複している部分がある場合において、実行期間が互いに重複している第１タスクと第２タスクとが、互いに並列に実行されることを許可するように予め設定された実行許可関係を有するように、第１実行順と第２実行順を変更する。
【０００８】
このように構成された電子制御装置では、第１タスクの実行中において、実行中の第１タスクと並列に実行することが禁止されている第２タスクの代わりに、実行中の第１タスクと並列に実行することが許可されている第２タスクを実行することができる。同様に、第２タスクの実行中において、実行中の第２タスクと並列に実行することが禁止されている第１タスクの代わりに、実行中の第２タスクと並列に実行することが許可されている第１タスクを実行することができる。
【０００９】
このため、第１タスクの実行中において第２タスクが実行されていないという事態と、第２タスクの実行中において第１タスクが実行されていないという事態との少なくとも一方の発生を抑制することができ、タスク実行効率の低下を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】電子制御装置（ＥＣＵ）１の構成を示すブロック図である。
【図２】タスク実行処理を示すフローチャートである。
【図３】タスク実行処理においてタスク実行順を変更する具体例を示す図である。
【図４】ＣＰＵコア１１，１２の動作を示す第１のタイミングチャートである。
【図５】ＣＰＵコア１１，１２の動作を示す第２のタイミングチャートである。
【発明を実施するための形態】
【００１１】
以下に本発明の実施形態について図面とともに説明する。
本実施形態の電子制御装置（Electronic Control Unit）１（以下、ＥＣＵ１という）は、車両に搭載され、車両のエンジン（不図示）の制御を行う。
【００１２】
ＥＣＵ１は、図１に示すように、マイクロコンピュータ２（以下、マイコン２という）を備える。
マイコン２は、エンジンを制御するための処理を実行し、車両に取り付けられた電気負荷（インジェクタ等）を制御するための制御信号を出力する。
【００１３】
またマイコン２は、ＣＰＵ（Central Processing Unit）コア１１，１２、フラッシュＲＯＭ１３およびＲＡＭ１４と、これらを相互に接続するバス１５とを備える。
ＣＰＵコア１１，１２は、プログラムを実行するための演算ユニットとレジスタなどを備える。
【００１４】
フラッシュＲＯＭ１３は、データ書き換え可能な不揮発性メモリである。そしてフラッシュＲＯＭ１３は、リアルタイムオペレーティングシステム（以下、ＲＴＯＳという）を制御するＯＳプログラム２１と、車両に搭載されたエンジン等を制御する車両制御プログラム２２とを記憶する。
【００１５】
ＲＡＭ１４は、揮発性メモリであり、ＣＰＵコア１１，１２の演算結果等を一時的に記憶する。またＲＡＭ１４には、キュー格納部３１、キュー格納部３２、実行タスク情報格納部４１および実行タスク情報格納部４２が設けられている。
【００１６】
また車両制御プログラム２２は、複数のタスク５０を備える。そして各タスク５０は、対応するタスクを実行するためのタスクプログラム５１と、タスク依存関係（後述）を判断するために設定されるタスク依存関係識別番号５２と、対応するタスクを実行するＣＰＵコアが制約されているか否かを示す実行コア制約情報５３とを備える。
【００１７】
なおタスク依存関係識別番号５２は、タスク依存関係を有する複数のタスクに対して同一の番号が設定される。例えば、タスクＡとタスクＢとがタスク依存関係を有する場合には、タスクＡとタスクＢのタスク依存関係識別番号５２が例えば「０ｘ００００１２３４」に設定される。また、タスクＡ，ＢとタスクＣとがタスク依存関係を有していない場合には、タスクＣのタスク依存関係識別番号５２が例えば「０ｘ００００５６７８」に設定される。
【００１８】
またタスク依存関係は、複数のタスクが互いに共通のデータを参照および更新するか否かによって決定される。例えば、タスクＡとタスクＢが互いに共通のデータを参照および更新する場合には、タスクＡとタスクＢはタスク依存関係を有すると決定される。
【００１９】
また実行コア制約情報５３は、対応するタスクを実行するＣＰＵコアが制約されている場合には例えば「１」が設定され、制約されていない場合には例えば「０」が設定される。
【００２０】
そしてＣＰＵコア１１，１２は、フラッシュＲＯＭ１３に記憶されているＯＳプログラム２１を実行することにより、ＲＴＯＳを動作させる。
ＲＴＯＳは、車両制御プログラム２２を構成するタスクの実行を要求するタスク処理要求が発生すると、このタスク処理要求に対応するタスクに予め設定されたタスク優先度に基づき、タスク優先度の高いタスクを優先して実行するようにタスクの実行順を決定するスケジューリングを行う。
【００２１】
具体的には、ＲＴＯＳは、対応するタスクプログラム５１が記憶されている先頭アドレスを示すタスクアドレス情報を、タスク優先度の高い順に配列して、キュー格納部３１またはキュー格納部３２に格納することにより、実行待ちタスクの実行順を決定する。このため、キュー格納部３１またはキュー格納部３２から、実行順が最も早いタスクアドレス情報を抽出することにより、ＲＴＯＳにより決定された実行順で、タスクを実行することが可能となる。
【００２２】
このように構成されたＥＣＵ１において、ＣＰＵコア１１，１２は、タスク実行処理を実行する。
ここで、ＣＰＵコア１１（１２）が実行するタスク実行処理の手順を説明する。タスク実行処理は、キュー格納部３１（３２）から、実行順が最も早いタスクアドレス情報が抽出される毎に実行される処理である。
【００２３】
このタスク実行処理が実行されると、ＣＰＵコア１１（１２）は、図２に示すように、まずＳ１０にて、抽出したタスクアドレス情報が示す先頭アドレス（以下、抽出タスクアドレスという）に基づいて、この抽出タスクアドレスに格納されているタスクプログラム５１のタスク依存関係識別番号５２をフラッシュＲＯＭ１３から読み出す。なおタスク依存関係識別番号５２は、上記先頭アドレスの値と予め設定された識別番号検索値とを加算した加算値のアドレスに記憶されている。本実施形態では、この識別番号検索値は、車両制御プログラム２２を構成する全てのタスク５０について同一の値が設定されている。以下、フラッシュＲＯＭ１３から読み出したタスク依存関係識別番号５２を、判断対象タスク識別番号５２という。
【００２４】
次にＳ２０にて、実行タスク情報格納部４２（４１）に格納されているタスク依存関係識別番号５２を読み出す。以下、Ｓ２０で読み出したタスク依存関係識別番号５２を実行中タスク識別番号５２という。
【００２５】
そしてＳ３０にて、フラッシュＲＯＭ１３から直近で読み出したタスク依存関係識別番号５２（判断対象タスク識別番号５２）と、Ｓ２０で読み出したタスク依存関係識別番号５２（実行中タスク識別番号５２）とが一致しているか否かを判断する。
【００２６】
ここで、直近の判断対象タスク識別番号５２と実行中タスク識別番号５２とが一致している場合には（Ｓ３０：ＹＥＳ）、Ｓ４０にて、直近の抽出タスクアドレスに基づいて、この先頭アドレスに格納されているタスクプログラム５１の実行コア制約情報５３をフラッシュＲＯＭ１３から読み出す。なお実行コア制約情報５３は、先頭アドレスの値と予め設定された制約情報検索値とを加算した加算値のアドレスに記憶されている。本実施形態では、この制約情報検索値は、車両制御プログラム２２を構成する全てのタスク５０について互いに同一の値が設定されている。
【００２７】
そしてＳ５０にて、Ｓ４０で読み出した実行コア制約情報５３に基づいて、直近の抽出タスクアドレスに格納されているタスクプログラム５１により実行されるタスク（以下、判断対象タスクという）を、ＣＰＵコア１１（１２）で実行する必要があるか否かを判断する。具体的には、読み出した実行コア制約情報５３が１に設定されている場合には、ＣＰＵコア１１（１２）で実行する必要があると判断し、読み出した実行コア制約情報５３が０に設定されている場合には、ＣＰＵコア１１（１２）で実行する必要がないと判断する。
【００２８】
ここで、判断対象タスクをＣＰＵコア１１（１２）で実行する必要がない場合には（Ｓ５０：ＮＯ）、Ｓ６０にて、別コア格納指示値ｉをインクリメント（１加算）する。さらにＳ７０にて、直近の抽出タスクアドレスを示すタスクアドレス情報を、対応するタスクが別コア格納指示値ｉが示す実行順で実行されるように、キュー格納部３２（３１）に格納することにより、ＣＰＵコア１２（１１）における実行待ちタスクの実行順を再決定し、Ｓ１００に移行する。例えば、別コア格納指示値ｉが１である場合には、ＣＰＵコア１２（１１）における実行待ちタスクの中で実行順が１番となるように、直近の抽出タスクアドレスを示すタスクアドレス情報をキュー格納部３２（３１）に格納する。
【００２９】
一方、判断対象タスクをＣＰＵコア１１（１２）で実行する必要がある場合には（Ｓ５０：ＹＥＳ）、Ｓ８０にて、当コア格納指示値ｊをインクリメント（１加算）する。さらにＳ９０にて、直近の抽出タスクアドレスを示すタスクアドレス情報を、対応するタスクが当コア格納指示値ｊが示す実行順の次に実行されるように、キュー格納部３１（３２）に格納することにより、ＣＰＵコア１１（１２）における実行待ちタスクの実行順を再決定し、Ｓ１００に移行する。例えば、当コア格納指示値ｊが１である場合には、ＣＰＵコア１１（１２）における実行待ちタスクの中で実行順が２番となるように、直近の抽出タスクアドレスを示すタスクアドレス情報をキュー格納部３１（３２）に格納する。
【００３０】
そしてＳ１００に移行すると、キュー格納部３１（３２）から、現時点で実行順が最も早いタスクアドレス情報を読み出し、Ｓ３０に移行する。
またＳ３０にて、直近の判断対象タスク識別番号５２と実行中タスク識別番号５２とが一致していない場合には（Ｓ３０：ＮＯ）、Ｓ１１０にて、別コア格納指示値ｉと当コア格納指示値ｊを０に設定する。さらにＳ１２０にて、直近の判断対象タスク識別番号５２を実行タスク情報格納部４１（４２）に格納することで、実行タスク情報格納部４１（４２）に格納される情報を上書きする。そしてＳ１３０にて、直近の抽出タスクアドレスに基づいて、フラッシュＲＯＭ１３からタスクプログラム５１を読み出して、タスクを実行し、タスク実行処理を終了する。
【００３１】
次に、タスクアドレス情報をキュー格納部３１，３２に格納する具体例を説明する。
例えば図３に示すように、キュー格納部３１には、実行待ちタスクの実行が早い順に、タスクＢ、タスクＣおよびタスクＤのタスクアドレス情報が格納されているとする。また、キュー格納部３２には、実行待ちタスクの実行が早い順に、タスクＰ、タスクＱ、タスクＲ、タスクＳおよびタスクＴのタスクアドレス情報が格納されているとする。
【００３２】
そして、ＣＰＵコア１１においてタスクＡを実行中であり、ＣＰＵコア１２において新たなタスクの実行を開始するタイミングであるとする。
この場合にＣＰＵコア１２は、まず、キュー格納部３２からタスクＰのタスクアドレス情報を読み出す。ここで、タスクＰは、タスクＡとタスク依存関係があり且つＣＰＵコア１２で実行する必要がないとする。このため、タスクＰのタスクアドレス情報は、ＣＰＵコア１１における実行待ちタスクの中で実行順が１番となるように、キュー格納部３１に格納される（矢印ＡＬ１を参照）。これにより、キュー格納部３１には、実行待ちタスクの実行が早い順に、タスクＰ、タスクＢ、タスクＣおよびタスクＤのタスクアドレス情報が格納される（矢印ＡＬ１１を参照）。また、キュー格納部３２には、実行待ちタスクの実行が早い順に、タスクＱ、タスクＲ、タスクＳおよびタスクＴのタスクアドレス情報が格納される（矢印ＡＬ１１を参照）。
【００３３】
そしてＣＰＵコア１２は、次に、キュー格納部３２からタスクＱのタスクアドレス情報を読み出す。ここで、タスクＱは、タスクＡとタスク依存関係があり且つＣＰＵコア１２で実行する必要がないとする。このため、タスクＱのタスクアドレス情報は、ＣＰＵコア１１における実行待ちタスクの中で実行順が２番となるように、キュー格納部３１に格納される（矢印ＡＬ２を参照）。これにより、キュー格納部３１には、実行待ちタスクの実行が早い順に、タスクＰ、タスクＱ、タスクＢ、タスクＣおよびタスクＤのタスクアドレス情報が格納される（矢印ＡＬ１２を参照）。また、キュー格納部３２には、実行待ちタスクの実行が早い順に、タスクＲ、タスクＳおよびタスクＴのタスクアドレス情報が格納される（矢印ＡＬ１２を参照）。
【００３４】
そしてＣＰＵコア１２は、次に、キュー格納部３２からタスクＲのタスクアドレス情報を読み出す。ここで、タスクＲは、タスクＡとタスク依存関係があり且つＣＰＵコア１２で実行する必要があるとする。このため、タスクＲのタスクアドレス情報は、ＣＰＵコア１２における実行待ちタスクの中で実行順が２番となるように、キュー格納部３２に格納される（矢印ＡＬ３を参照）。これにより、キュー格納部３２には、実行待ちタスクの実行が早い順に、タスクＳ、タスクＲおよびタスクＴのタスクアドレス情報が格納される（矢印ＡＬ１３を参照）。
【００３５】
そしてＣＰＵコア１２は、次に、キュー格納部３２からタスクＳのタスクアドレス情報を読み出す。ここで、タスクＳは、タスクＡとタスク依存関係があり且つＣＰＵコア１２で実行する必要があるとする。このため、タスクＳのタスクアドレス情報は、ＣＰＵコア１２における実行待ちタスクの中で実行順が３番となるように、キュー格納部３２に格納される（矢印ＡＬ４を参照）。これにより、キュー格納部３２には、実行待ちタスクの実行が早い順に、タスクＴ、タスクＲおよびタスクＳのタスクアドレス情報が格納される（矢印ＡＬ１３を参照）。
【００３６】
そしてＣＰＵコア１２は、次に、キュー格納部３２からタスクＴのタスクアドレス情報を読み出す。ここで、タスクＴは、タスクＡとタスク依存関係がないとする。このため、ＣＰＵコア１２は、フラッシュＲＯＭ１３からタスクＴのタスクプログラム５１を読み出して、タスクＴを実行する。
【００３７】
このように構成されたＥＣＵ１では、ＣＰＵコア１１が、キュー格納部３１で設定された実行順（以下、第１実行順という）で複数のタスクを順次実行する（Ｓ１３０）。またＣＰＵコア１２が、キュー格納部３２で設定された実行順（以下、第２実行順という）で複数のタスクを順次実行する（Ｓ１３０）。
【００３８】
そしてＥＣＵ１は、ＣＰＵコア１１がタスクを実行している実行期間と、ＣＰＵコア１２がタスクを実行している実行期間とで重複している部分がある場合において、ＣＰＵコア１１が実行しているタスクと、ＣＰＵコア１２が実行しているタスクとがタスク依存関係を有しないように、第１実行順と第２実行順を変更する（Ｓ１０〜Ｓ１００）。
【００３９】
これにより、ＣＰＵコア１１によるタスクの実行中において、ＣＰＵコア１１が実行中のタスクと並列に実行することが禁止されているタスクの代わりに、ＣＰＵコア１１が実行中のタスクと並列に実行することが許可されているタスクをＣＰＵコア１２が実行することができる。同様に、ＣＰＵコア１２によるタスクの実行中において、ＣＰＵコア１２が実行中のタスクと並列に実行することが禁止されているタスクの代わりに、ＣＰＵコア１２が実行中のタスクと並列に実行することが許可されているタスクをＣＰＵコア１１が実行することができる。
【００４０】
このため、ＣＰＵコア１１によるタスクの実行中においてＣＰＵコア１２でタスクが実行されていないという事態の発生と、ＣＰＵコア１２によるタスクの実行中においてＣＰＵコア１１でタスクが実行されていないという事態の発生を抑制することができ、タスク実行効率の低下を抑制することができる。
【００４１】
またＣＰＵコア１１は、第１実行順で１番目のタスクが、ＣＰＵコア１２が実行中のタスクとの間でタスク依存関係を有しているか否かを判断する（Ｓ３０）。そしてＣＰＵコア１１は、タスク依存関係を有していると判断した場合に（Ｓ３０：ＹＥＳ）、判断対象となったタスクの実行順が１番目より遅くなるように第１実行順を変更する（Ｓ９０）。同様にＣＰＵコア１２は、第２実行順で１番目のタスクが、ＣＰＵコア１１が実行中のタスクとの間でタスク依存関係を有しているか否かを判断する（Ｓ３０）。そしてＣＰＵコア１２は、タスク依存関係を有していると判断した場合に（Ｓ３０：ＹＥＳ）、判断対象となったタスクの実行順が１番目より遅くなるように第２実行順を変更する（Ｓ９０）。
【００４２】
これによりＥＣＵ１は、ＣＰＵコア１２で実行中であったタスクが終了した後に、ＣＰＵコア１２で実行中であったタスクとの間でタスク依存関係を有しているタスクをＣＰＵコア１１で実行させることができる。同様にＥＣＵ１は、ＣＰＵコア１１で実行中であったタスクが終了した後に、ＣＰＵコア１１で実行中であったタスクとの間でタスク依存関係を有しているタスクをＣＰＵコア１２で実行させることができる。
【００４３】
例えば図４に示すように、ＣＰＵコア１１においてタスクＡを実行中であり、ＣＰＵコア１２において新たなタスクの実行を開始するタイミングであるとする。この場合にＣＰＵコア１２は、タスクＡとタスク依存関係のあるタスクＦの代わりに、タスクＡとタスク依存関係のないタスクＧを実行し、タスクＡとタスクＧの実行が終了した後に、タスクＦを実行することができる。
【００４４】
またＣＰＵコア１１は、第１実行順で１番目のタスクが、ＣＰＵコア１２が実行中のタスクとの間でタスク依存関係を有しているか否かを判断する（Ｓ３０）。そしてＣＰＵコア１１は、タスク依存関係を有していると判断した場合に（Ｓ３０：ＹＥＳ）、判断対象となったタスクをＣＰＵコア１２が実行するように第１実行順と第２実行順を変更する（Ｓ７０）。同様にＣＰＵコア１２は、第２実行順で１番目のタスクが、ＣＰＵコア１１が実行中のタスクとの間でタスク依存関係を有しているか否かを判断する（Ｓ３０）。そしてＣＰＵコア１２は、タスク依存関係を有していると判断した場合に（Ｓ３０：ＹＥＳ）、判断対象となったタスクをＣＰＵコア１１が実行するように第１実行順と第２実行順を変更する（Ｓ７０）。
【００４５】
これによりＥＣＵ１は、ＣＰＵコア１２で実行中であったタスクが終了した後に、ＣＰＵコア１２で実行中であったタスクとの間でタスク依存関係を有しているタスクをＣＰＵコア１２で実行させることができる。同様にＥＣＵ１は、ＣＰＵコア１１で実行中であったタスクが終了した後に、ＣＰＵコア１１で実行中であったタスクとの間でタスク依存関係を有しているタスクをＣＰＵコア１１で実行させることができる。
【００４６】
例えば図５に示すように、ＣＰＵコア１１においてタスクＡを実行中であり、ＣＰＵコア１２において新たなタスクの実行を開始するタイミングであるとする。この場合にＣＰＵコア１２は、タスクＡとタスク依存関係のあるタスクＦの代わりに、タスクＡとタスク依存関係のないタスクＧを実行し、ＣＰＵコア１１は、タスクＡの実行が終了した後に、タスクＦを実行することができる。
【００４７】
またＣＰＵコア１１は、第１実行順で１番目のタスクが、ＣＰＵコア１２が実行中のタスクとの間でタスク依存関係を有していると判断した場合に（Ｓ３０：ＹＥＳ）、判断対象となったタスクがＣＰＵコア１２での実行を禁止されているか否かを判断する（Ｓ５０）。そしてＣＰＵコア１１は、ＣＰＵコア１２での実行を禁止されていると判断した場合に（Ｓ５０：ＹＥＳ）、判断対象となったタスクの実行順が１番目より遅くなるように第１実行順を変更する（Ｓ９０）。またＣＰＵコア１１は、ＣＰＵコア１２での実行を禁止されていないと判断した場合に（Ｓ５０：ＮＯ）、判断対象となったタスクをＣＰＵコア１２が実行するように第１実行順と第２実行順を変更する（Ｓ７０）。
【００４８】
同様にＣＰＵコア１２は、第２実行順で１番目のタスクが、ＣＰＵコア１１が実行中のタスクとの間でタスク依存関係を有していると判断した場合に（Ｓ３０：ＹＥＳ）、判断対象となったタスクがＣＰＵコア１１での実行を禁止されているか否かを判断する（Ｓ５０）。そしてＣＰＵコア１２は、ＣＰＵコア１１での実行を禁止されていると判断した場合に（Ｓ５０：ＹＥＳ）、判断対象となったタスクの実行順が１番目より遅くなるように第２実行順を変更する（Ｓ９０）。またＣＰＵコア１２は、ＣＰＵコア１１での実行を禁止されていないと判断した場合に（Ｓ５０：ＮＯ）、判断対象となったタスクをＣＰＵコア１１が実行するように第１実行順と第２実行順を変更する（Ｓ７０）。
【００４９】
これによりＥＣＵ１は、ＣＰＵコア１２での実行を禁止されているタスクを確実にＣＰＵコア１１で実行させることができる。同様にＥＣＵ１は、ＣＰＵコア１１での実行を禁止されているタスクを確実にＣＰＵコア１２で実行させることができる。
【００５０】
また、互いにタスク依存関係を有していない複数のタスクには互いに異なるタスク依存関係識別番号５２が設定される。そしてＥＣＵ１は、ＣＰＵコア１１で実行されるタスクに設定されたタスク依存関係識別番号５２と、ＣＰＵコア１２で実行されるタスクに設定されたタスク依存関係識別番号５２とを比較することにより、タスク依存関係を有するか否かを判断する（Ｓ３０）。
【００５１】
これによりＥＣＵ１は、タスク依存関係識別番号５２が一致しているか否かという簡便な方法で、タスク依存関係を有するか否かを判断することができる。
以上説明した実施形態において、ＣＰＵコア１１によるＳ１３０の処理は本発明における第１タスク実行手段、ＣＰＵコア１２によるＳ１３０の処理は本発明における第２タスク実行手段、ＣＰＵコア１１，１２によるＳ１０〜Ｓ１００の処理は本発明における実行順変更手段である。
【００５２】
また、ＣＰＵコア１１によるＳ３０の処理は本発明における第１関係判断手段、ＣＰＵコア１１によるＳ９０の処理は本発明における第１変更手段、ＣＰＵコア１２によるＳ３０の処理は本発明における第２関係判断手段、ＣＰＵコア１２によるＳ９０の処理は本発明における第２変更手段、ＣＰＵコア１１によるＳ７０の処理は本発明における第３変更手段、ＣＰＵコア１２によるＳ７０の処理は本発明における第４変更手段である。
【００５３】
また、ＣＰＵコア１１によるＳ５０の処理は本発明における第１禁止判断手段、ＣＰＵコア１１によるＳ９０の処理は本発明における第１実行順変更手段、ＣＰＵコア１１によるＳ７０の処理は本発明における第２実行順変更手段、ＣＰＵコア１２によるＳ５０の処理は本発明における第２禁止判断手段、ＣＰＵコア１２によるＳ９０の処理は本発明における第３実行順変更手段、ＣＰＵコア１２によるＳ７０の処理は本発明における第４実行順変更手段である。
【００５４】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
例えば上記実施形態では、マイコンが２個のＣＰＵコアを備えるものを示したが、３個以上のＣＰＵコアを備えるようにしてもよい。
【００５５】
また上記実施形態では、マイコンが複数のＣＰＵコアを備えるものを示した。しかし、マイコンが１個のＣＰＵコアを備え、１個のＣＰＵコアのリソースを時分割して使用することで仮想的に複数のＣＰＵコアが存在しているように動作するものであってもよい。
【符号の説明】
【００５６】
１…ＥＣＵ、１１，１２…ＣＰＵコア、３１，３２…キュー格納部、５０…タスク
【図１】
2015170180.tif 000003
【図２】
2015170180.tif 000004
【図３】
2015170180.tif 000005
【図４】
2015170180.tif 000006
【図５】
2015170180.tif 000007