(57)【要約】【課題】高負荷時のアクセス競合による機能停止を抑制することができる車両制御装置を提供する。【解決手段】本発明に係る車両制御装置は、共有記憶領域に対する排他制御の実行回数とその結果として発生したアクセス競合回数によって表される関数を用いて、アクセス競合が発生する傾向を判定する。【選択図】図１
2017228192.tif 000002
【特許請求の範囲】
【請求項１】
車両の動作を制御する車両制御装置であって、
前記車両の動作を制御する制御演算を実行する第１および第２演算装置、
前記第１演算装置と前記第２演算装置がともにアクセスする共有記憶領域、
前記第１演算装置と前記第２演算装置が前記共有記憶領域に対して互いに排他的にアクセスするように排他制御を実施する排他制御部、
前記排他制御部が実施する前記排他制御の結果に基づき、前記第１演算装置と前記第２演算装置が前記共有記憶領域に対してアクセスする際にアクセス競合が発生する傾向を判定する、異常判定部、
を備え、
前記異常判定部は、前記排他制御の実行回数と前記排他制御の結果として発生したアクセス競合回数によって表される関数を、所定の判定閾値と比較することにより、前記アクセス競合が発生する傾向を判定する
ことを特徴とする車両制御装置。
【請求項２】
前記異常判定部は、前記判定閾値として、前記実行回数に対して許容される前記アクセス競合回数を表す許容競合回数を用い、
前記異常判定部は、前記許容競合回数と前記アクセス競合回数を比較することにより、前記アクセス競合が発生する傾向を判定する
ことを特徴とする請求項１記載の車両制御装置。
【請求項３】
前記異常判定部は、前記関数として、前記実行回数に対する前記アクセス競合回数の割合によって定義される競合確率と、前記排他制御を開始してからの経過時間とによって表される競合確率関数を用い、
前記異常判定部は、前記競合確率関数の時間微分と前記判定閾値とを比較することにより、前記アクセス競合が発生する傾向を判定する
ことを特徴とする請求項１記載の車両制御装置。
【請求項４】
前記異常判定部は、前記関数として、
前記アクセス競合回数と、
前記実行回数に対する前記アクセス競合回数の割合によって定義される競合確率と、    前記排他制御を開始してからの経過時間とによって表される競合確率関数と、
を組み合わせた複合関数を用い、
前記異常判定部は、前記複合関数と前記判定閾値とを比較することにより、前記アクセス競合が発生する傾向を判定する
ことを特徴とする請求項１記載の車両制御装置。
【請求項５】
前記車両制御装置は、前記第１演算装置が前記制御演算を実行する周期を制御する周期制御部を備え、
前記異常判定部は、前記アクセス競合回数が前記判定閾値を超えている場合は、前記アクセス競合が発生する傾向が許容範囲を超えていると判定し、
前記周期制御部は、前記アクセス競合が発生する傾向が許容範囲を超えていると前記異常判定部が判定した場合は、前記第１演算装置が前記制御演算を実行する周期を一時的に変更する
ことを特徴とする請求項２記載の車両制御装置。
【請求項６】
前記車両制御装置は、前記第１演算装置が前記制御演算を実行する周期を制御する周期制御部を備え、
前記異常判定部は、前記競合確率関数の時間微分が前記判定閾値を超えている場合は、前記アクセス競合が発生する傾向が許容範囲を超えていると判定し、
前記周期制御部は、前記アクセス競合が発生する傾向が許容範囲を超えていると前記異常判定部が判定した場合は、前記第１演算装置が前記制御演算を実行する周期を一時的に変更する
ことを特徴とする請求項３記載の車両制御装置。
【請求項７】
前記車両制御装置は、前記第１演算装置が前記制御演算を実行する周期を制御する周期制御部を備え、
前記異常判定部は、前記複合関数が前記判定閾値を超えている場合は、前記アクセス競合が発生する傾向が許容範囲を超えていると判定し、
前記周期制御部は、前記アクセス競合が発生する傾向が許容範囲を超えていると前記異常判定部が判定した場合は、前記第１演算装置が前記制御演算を実行する周期を一時的に変更する
ことを特徴とする請求項４記載の車両制御装置。
【請求項８】
前記車両制御装置は、フェールセーフ処理を実行するフェールセーフ部を備え、
前記フェールセーフ部は、前記アクセス競合回数の積算値が所定の積算閾値を超えた場合は、前記フェールセーフ処理を実行する
ことを特徴とする請求項１記載の車両制御装置。
【請求項９】
前記車両制御装置は、フェールセーフ処理を実行するフェールセーフ部を備え、
前記異常判定部は、前記アクセス競合回数が前記判定閾値を超えている場合は、前記アクセス競合が発生する傾向が許容範囲を超えていると判定し、
前記フェールセーフ部は、前記アクセス競合が発生する傾向が許容範囲を超えていると前記異常判定部が判定した場合は、前記フェールセーフ処理として、前記第１演算装置が前記制御演算を実行する周期を一時的に変更する
ことを特徴とする請求項２記載の車両制御装置。
【請求項１０】
前記車両制御装置は、フェールセーフ処理を実行するフェールセーフ部を備え、
前記異常判定部は、前記競合確率関数の時間微分が前記判定閾値を超えている場合は、前記アクセス競合が発生する傾向が許容範囲を超えていると判定し、
前記フェールセーフ部は、前記アクセス競合が発生する傾向が許容範囲を超えていると前記異常判定部が判定した場合は、前記フェールセーフ処理として、前記第１演算装置が前記制御演算を実行する周期を一時的に変更する
ことを特徴とする請求項３記載の車両制御装置。
【請求項１１】
前記車両制御装置は、フェールセーフ処理を実行するフェールセーフ部を備え、
前記異常判定部は、前記複合関数が前記判定閾値を超えている場合は、前記アクセス競合が発生する傾向が許容範囲を超えていると判定し、
前記フェールセーフ部は、前記アクセス競合が発生する傾向が許容範囲を超えていると前記異常判定部が判定した場合は、前記フェールセーフ処理として、前記第１演算装置が前記制御演算を実行する周期を一時的に変更する
ことを特徴とする請求項４記載の車両制御装置。
【請求項１２】
前記フェールセーフ部は、前記フェールセーフ処理として、前記第１演算装置を再起動する
ことを特徴とする請求項８記載の車両制御装置。
【請求項１３】
前記フェールセーフ部は、前記フェールセーフ処理として、前記第１演算装置と前記第２演算装置を再起動する
ことを特徴とする請求項８記載の車両制御装置。
【請求項１４】
前記フェールセーフ部は、前記フェールセーフ処理として、前記車両制御装置を再起動する
ことを特徴とする請求項８記載の車両制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両の動作を制御する車両制御装置に関するものである。
【背景技術】
【０００２】
近年、自動車システムなどの組込システムは、多機能化により演算量が年々増加しており、組込システムに求められるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の性能は増加する一方である。パソコン分野においては、このような処理量の増加に対して、演算装置であるＣＰＵのコア数を増やすこと（マルチコア化）によって対応してきた。組込システム分野も例外ではなく、カーナビや携帯電話といった演算量が多くリアルタイム性の制約が比較的緩いコンシューマ系システムにおいてはマルチコア化が進んでいる。自動車制御システムなどの組込制御システムが高度化・複雑化するのにともない、これらの演算量がシングルコアの限界を超えることが予想されるので、マルチコアの採用が検討されている。
【０００３】
一方で、自動車業界におけるソフトウェア品質レベルの統一化と安全性証明の容易化を目的として、機能安全規格ＩＳＯ２６２６２（以下、機能安全規格）が２０１１年に策定された。本規格においては、ハード・ソフトを含めたシステム全体に亘り、故障率算出方法やソフト設計手法などを規定している。車両制御装置が同規格に準拠するためには、安全確保の根拠を提示する必要がある。一般的には、従来設計における知見や実績をエビデンスとしてまとめることにより、同規格に準拠している。
【０００４】
機能安全規格ＩＳＯ２６２６２においては、安全要求が異なるソフトウェア間の干渉を防止することが求められている。一般的な車両制御装置はさまざまな制御アプリケーションによって構成されているので、時間保護機能やメモリ保護機能といったシステムを構成するソフトウェア間の相互作用を防止するための仕組みが近年着目されてきている。例えばあるソフトウェアが暴走した場合、他のソフトウェアが使用するデータが格納されているメモリへアクセスし、そのデータを破壊しようすることを防ぐ機能である。
【０００５】
一般的な車両制御装置に対して機能安全規格ＩＳＯ２６２６２を適用すると、車両制御装置内においてさまざまなＡＳＩＬ（Ａｕｔｏｍｏｔｉｖｅ  Ｓａｆｅｔｙ  Ｉｎｔｅｇｒｉｔｙ  Ｌｅｖｅｌ）のソフトウェアが混在することがわかっている。そのため、既存のソフトウェアが機能安全規格に準拠するには、ソフトウェア間の干渉を防止する仕組みやそれに関わる処理の高速化、軽量化、信頼性向上などの技術が必要となる。
【０００６】
下記特許文献１は、共有資源に対する排他制御について記載している。同文献においては、共有資源に対するアクセス競合の状態が正常か否かを分析するため、当該分析対象プログラムが共有資源のアクセス権（ロック）を獲得し、ロックの獲得に要したロック獲得所要時間を計測する。直近のロック獲得所要時間を所定の数だけ蓄積し、当該蓄積されたロック獲得所要時間に基づいて、ロック獲得所要時間として許容する許容範囲を算出する。最新のロック獲得所要時間が当該許容範囲に含まれている場合、共有資源へのアクセス競合の状態は正常であると分析する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２５１８７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
マルチコアシステムは、各コアが独立に動作することにより、並列に演算処理を実施することができる。他方で、各コアが記憶領域を共有している場合は、コア間でその記憶領域に対するアクセス競合が発生する。アクセス競合が発生した場合、排他制御により一方が他方の実行処理完了を待つように設計される。車両制御装置において、高負荷な処理に対して排他制御が組み込まれると、高負荷時ほど排他制御による待ち合わせが増える。そうすると、車両制御が機能停止に陥る可能性がある。
【０００９】
本発明は、上記のような課題に鑑みてなされたものであり、高負荷時のアクセス競合による機能停止を抑制することができる車両制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る車両制御装置は、共有記憶領域に対する排他制御の実行回数とその結果として発生したアクセス競合回数によって表される関数を用いて、アクセス競合が発生する傾向を判定する。
【発明の効果】
【００１１】
本発明に係る車両制御装置によれば、高負荷時における共有記憶領域に対するアクセス競合による機能停止を抑制し、安全性・可用性を向上することができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態１に係る車両制御装置（ＥＣＵ）１の構成図である。
【図２】記憶領域５が格納するパラメータテーブル５０１００の構成とデータ例を示す図である。
【図３】記憶領域５が格納する記録テーブル５０２００の構成とデータ例を示す図である。
【図４】許容競合回数テーブル５０３００の構成とデータ例を示す図である。
【図５】競合記録テーブル５０４００の構成とデータ例を示す図である。
【図６】第１演算装置制御部４０１の動作を説明するフローチャートである。
【図７】タイマ制御部４０２の動作を説明するフローチャートである。
【図８】第１周期処理部４０３の動作を説明するフローチャートである。
【図９】排他制御部４０４の動作を説明するフローチャートである。
【図１０】競合診断部４０５の動作フローである。
【図１１】異常判定部４０６の動作を説明するフローチャートである。
【図１２】競合傾向判定部４０７の動作を説明するフローチャートである。
【図１３】フェールセーフ部４０８の動作を説明するフローチャートである。
【図１４】第２演算装置制御部４０９の動作を説明するフローチャートである。
【図１５】第２周期処理部４１０の動作を説明するフローチャートである。
【図１６】第２排他制御部４１１の動作を説明するフローチャートである。
【図１７】実施形態２におけるパラメータテーブル５０１００の構成とデータ例を示す図である。
【発明を実施するための形態】
【００１３】
＜実施の形態１＞
図１は、本発明の実施形態１に係る車両制御装置（ＥＣＵ）１の構成図である。ＥＣＵ１は、例えばエンジン制御装置などのような車両の動作を制御する装置であり、第１演算装置２、第２演算装置３、プログラム領域４、記憶領域５、入出力回路６を備える。ここではＥＣＵ１が接続されている機器としてスロットルセンサ７とアクチュエータ８を例示するがこれに限られるものではない。
【００１４】
第１演算装置２と第２演算装置３は、プログラム領域４が格納しているプログラムを実行する演算装置である。第１演算装置２と第２演算装置３は、プログラム領域４が格納しているプログラムを並列実行することができ、さらにプログラム領域４と記憶領域５に対して並列にアクセスすることができる。
【００１５】
プログラム領域４は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの不揮発性記憶装置上に構成された記憶領域である。プログラム領域４は、第１演算装置制御部４０１、タイマ制御部４０２、第１周期処理部４０３、排他制御部４０４、競合診断部４０５、異常判定部４０６、競合傾向判定部４０７、フェールセーフ部４０８、第２演算装置制御部４０９、第２周期処理部４１０、第２排他制御部４１１を格納する。
【００１６】
記憶領域５は、例えばＲＡＭ（Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの記憶装置上における記憶領域である。記憶領域５は、第１演算装置２と第２演算装置３が制御演算を実行する際に使用するデータを一時的に格納する。記憶領域５はさらに、後述の図２〜図５で説明するデータテーブルを格納する。第１演算装置２と第２演算装置３は、プログラム領域４と記憶領域５に対してそれぞれ並列にアクセスすることができる。したがって、アクセス競合が発生する可能性がある。
【００１７】
図２は、記憶領域５が格納するパラメータテーブル５０１００の構成とデータ例を示す図である。パラメータテーブル５０１００は、ＥＣＵ１が制御演算を実施する際に使用する設定パラメータを保持するデータテーブルである。記載の便宜上、本テーブルは記憶領域５内に格納されることとしたが、その他記憶装置上に格納してもよい。パラメータテーブル５０１００は、名称フィールド５０１０１、設定値フィールド５０１０２を有する。
【００１８】
名称フィールド５０１０１は、パラメータテーブル５０１００が管理するデータの名称を保持する。設定値フィールド５０１０２は、パラメータの設定値を保持する。図２に示す各パラメータの詳細については、後述する各プログラムの動作と併せて説明する。
【００１９】
図３は、記憶領域５が格納する記録テーブル５０２００の構成とデータ例を示す図である。記録テーブル５０２００は、ＥＣＵ１が制御演算を実施する過程における各変数の現在値を格納するデータテーブルである。記録テーブル５０２００は、名称フィールド５０２０１、現在値フィールド５０２０２を有する。
【００２０】
名称フィールド５０２０１は、記録テーブル５０２００が管理する変数の名称を保持する。現在値フィールド５０２０２は、変数の現在値を保持する。図３に示す各データの詳細については、後述する各プログラムの動作と併せて説明する。
【００２１】
図４は、許容競合回数テーブル５０３００の構成とデータ例を示す図である。許容競合回数テーブル５０３００は、第１演算装置２と第２演算装置３が共有するリソース（例えば記憶領域５）に対する排他制御の実行回数に対して、アクセス競合が発生することが許容される回数を記述するデータテーブルである。本データテーブルは、例えばあらかじめ実験などに基づいて作成しておくことができる。記載の便宜上、本テーブルは記憶領域５内に格納されることとしたが、その他記憶装置上に格納してもよい。許容競合回数テーブル５０３００は、タイマ値フィールド５０３０１、実行回数フィールド５０３０２、許容競合回数フィールド５０３０３を有する。
【００２２】
タイマ値フィールド５０３０１は、タイマカウンタの値（時刻に相当）を保持する。実行回数フィールド５０３０２は、各時刻において実行されると想定される排他制御の実行回数を、開始時刻から積算した値を保持する。許容競合回数フィールド５０３０３は、各時刻におけるアクセス競合回数の積算値として許容される値を保持する。
【００２３】
図５は、競合記録テーブル５０４００の構成とデータ例を示す図である。競合記録テーブル５０４００は、排他制御によって発生したアクセス競合を記録するデータテーブルである。競合記録テーブル５０４００は、タイマ値フィールド５０４０１、排他制御実行回数フィールド５０４０２、競合回数フィールド５０４０３を有する。
【００２４】
タイマ値フィールド５０４０１は、タイマカウンタの値（時刻に相当）を保持する。排他制御実行回数フィールド５０４０２は、実行された排他制御の開始時刻から各時刻までの積算値を保持する。競合回数フィールド５０４０３は、各時刻におけるアクセス競合回数の積算値を保持する。
【００２５】
図６は、第１演算装置制御部４０１の動作を説明するフローチャートである。第１演算装置制御部４０１は、例えば所定周期ごとに本フローチャートを実行する。以下、図６の各ステップについて説明する。
【００２６】
（図６：ステップＳ４０１０００）
第１演算装置制御部４０１は、記憶領域５が格納する記録テーブル５０２００を初期化する。初期化する対象は、記録テーブル５０２００全体でもよいし、第１演算装置制御部４０１が参照する値のみでもよい。
【００２７】
（図６：ステップＳ４０１００１）
第１演算装置制御部４０１は、タイマ制御部４０２を呼び出す。タイマ制御部４０２の動作については後述の図７で説明する。タイマ制御部４０２は、タイマカウンタを更新する役割を有する。
【００２８】
（図６：ステップＳ４０１００２）
第１演算装置制御部４０１は、第１周期処理部４０３を呼び出す。第１周期処理部４０３の動作については後述の図８で説明する。第１周期処理部４０３は、第１演算装置２が処理を実行する周期を制御する役割を有する。
【００２９】
（図６：ステップＳ４０１００３）
第１演算装置制御部４０１は、競合診断部４０５を呼び出す。競合診断部４０５の動作については後述の図１０で説明する。競合診断部４０５は、第１演算装置２と第２演算装置３の間でアクセス競合が発生しているか否かを診断する役割を有する。
【００３０】
（図６：ステップＳ４０１００４）
第１演算装置制御部４０１は、フェールセーフ部４０８を呼び出す。フェールセーフ部４０８の動作については後述の図１３で説明する。フェールセーフ部４０８は、アクセス競合の状況に応じてフェールセーフ処理を実行する役割を有する。
【００３１】
（図６：ステップＳ４０１００５）
第１演算装置制御部４０１は、終了条件が満たされているか否かを判定する。満たされていれば本フローチャートを終了し、満たされていなければステップＳ４０１００１へ戻る。
【００３２】
図７は、タイマ制御部４０２の動作を説明するフローチャートである。以下、図７の各ステップについて説明する。
【００３３】
（図７：ステップＳ４０２０００）
タイマ制御部４０２は、記録テーブル５０２００からタイマカウンタの現在値フィールド５０２０２を取得する。タイマ制御部４０２はさらに、パラメータテーブル５０１００から最大タイマカウンタの設定値フィールド５０１０２を取得する。タイマ制御部４０２は、取得したタイマカウンタと最大タイマカウンタを比較する。タイマカウンタが最大タイマカウンタ以上であればステップＳ４０２００１に進み、その他の場合はステップＳ４０２００２に進む。
【００３４】
（図７：ステップＳ４０２００１）
タイマ制御部４０２は、記録テーブル５０２００のタイマカウンタの現在値フィールド５０２０２に０を代入する。
【００３５】
（図７：ステップＳ４０２００２）
タイマ制御部４０２は、記録テーブル５０２００のタイマカウンタの現在値フィールド５０２０２に１を加算した値を書き込む。
【００３６】
（図７：ステップＳ４０２０００〜Ｓ４０２００２：補足）
これらステップは、タイマカウンタを所定周期（ここでは最大タイマカウンタ）ごとにリセットして改めて０からカウントし始めるための処理である。
【００３７】
図８は、第１周期処理部４０３の動作を説明するフローチャートである。以下、図８の各ステップについて説明する。
【００３８】
（図８：ステップＳ４０３０００）
第１周期処理部４０３は、記録テーブル５０２００からタイミング調整フラグの現在値フィールド５０２０２を取得する。タイミング調整フラグがセットされている場合はステップＳ４０３００１に進み、その他の場合はステップＳ４０３００３に進む。タイミング調整フラグは、後述する図１３においてセットされるフラグである。
【００３９】
（図８：ステップＳ４０３００１）
第１周期処理部４０３は、パラメータテーブル５０１００から第１演算装置周期その２の設定値フィールド５０１０２を取得する。第１周期処理部４０３はさらに、記録テーブル５０２００からタイマカウンタの現在値フィールド５０２０２を取得する。第１周期処理部４０３は、タイマカウンタを第１演算装置周期その２で除算した余りを求める。余りが０であればステップＳ４０３００２に進み、その他であれば本フローチャートを終了する。
【００４０】
（図８：ステップＳ４０３００２）
第１周期処理部４０３は、記録テーブル５０２００のタイミング調整フラグの現在値フィールド５０２０２をクリアする（例えば０を書き込む）。
【００４１】
（図８：ステップＳ４０３００１〜Ｓ４０３００２：補足）
これらステップにより、第１演算装置２が制御演算を実行する周期が一時的に変更されることになる。アクセス競合が発生したとき、後述するタイミング調整フラグをセットしてこれらステップにより第１演算装置２の実行タイミングを変更することにより、アクセス競合の解消を図ることができる。実行タイミングを調整する方法はこれに限らない。例えば、（ａ）一時的ではなく常に実行タイミングをずらす、（ｂ）周期処理を一定期間実行しない、などの手法が考えられる。
【００４２】
（図８：ステップＳ４０３００３） 
第１周期処理部４０３は、パラメータテーブル５０１００から第１演算装置周期その１の設定値フィールド５０１０２を取得する。第１周期処理部４０３はさらに、記録テーブル５０２００からタイマカウンタの現在値フィールド５０２０２を取得する。第１周期処理部４０３は、タイマカウンタを第１演算装置周期その１で除算した余りを求める。余りが０であればステップＳ４０３００４に進み、その他であれば本フローチャートを終了する。
【００４３】
（図８：ステップＳ４０３００４）
第１周期処理部４０３は、排他制御部４０４を呼び出す。排他制御部４０４の動作については後述の図９で説明する。排他制御部４０４は、第１演算装置２と第２演算装置３が共有アクセスするリソース（例えば記憶領域５）に対する排他制御を、第１演算装置２の側から実施する役割を有する。
【００４４】
図９は、排他制御部４０４の動作を説明するフローチャートである。以下、図９の各ステップについて説明する。
【００４５】
（図９：ステップＳ４０４０００）
排他制御部４０４は、記録テーブル５０２００の排他制御実行カウンタの現在値フィールド５０２０２に１を加えることにより、排他制御実行回数を更新する。
【００４６】
（図９：ステップＳ４０４００１）
排他制御部４０４は、記録テーブル５０２００のリソースの現在値フィールド５０２０２を参照する。同フィールドは、第１演算装置２と第２演算装置３が共有アクセスするリソース（例えば記憶領域５）がアクセス可能であるか否かを示すフラグを保持している。同フラグを参照することにより、当該リソースを獲得できるか否かを判定することができる。リソースを獲得できなければステップＳ４０４００２に進み、獲得できればステップＳ４０４００３へ進む。
【００４７】
（図９：ステップＳ４０４００２）
排他制御部４０４は、記録テーブル５０２００のリソース競合カウンタの現在値フィールド５０２０２に１を加えることにより、アクセス競合回数を更新する。本ステップの後はステップＳ４０４０００に戻って改めてリソース獲得を試みてもよいし、本フローチャートを終了して次の実行周期を待機してもよい。図９においては前者を例示した。
【００４８】
（図９：ステップＳ４０４００３）
排他制御部４０４は、記録テーブル５０２００のリソースの現在値フィールド５０２０２を、アクセス不可である旨のフラグに更新する。排他制御部４０４は、共有リソースをロックする処理（クリティカルセクション処理）を実行することにより、獲得した共有リソースを排他制御した上で、所定の制御演算を実施する。
【００４９】
（図９：ステップＳ４０４００４）
排他制御部４０４は、記録テーブル５０２００のリソースの現在値フィールド５０２０２を、アクセス可能である旨のフラグに更新する。
【００５０】
図１０は、競合診断部４０５の動作フローである。以下、図１０の各ステップについて説明する。
【００５１】
（図１０：ステップＳ４０５０００）
競合診断部４０５は、記録テーブル５０２００からタイマカウンタの現在値フィールド５０２０２を取得する。競合診断部４０５はさらに、パラメータテーブル５０１００から診断実行周期の設定値フィールド５０１０２を取得する。競合診断部４０５は、タイマカウンタを診断実行周期で除算した余りを求める。余りが０であればステップＳ４０５００１に進み、その他であれば本フローチャートを終了する。
【００５２】
（図１０：ステップＳ４０５００１）
競合診断部４０５は、異常判定部４０６を呼び出す。異常判定部４０６の動作については後述の図１１で説明する。異常判定部４０６は、アクセス競合に起因してＥＣＵ１が異常状態に陥っているか否かを判定する役割を有する。
【００５３】
（図１０：ステップＳ４０５００２）
競合診断部４０５は、記録テーブル５０２００から状態レベルの現在値フィールド５０２０２を取得する。状態レベルが０であればステップＳ４０５００３に進み、その他であれば本フローチャートを終了する。
【００５４】
（図１０：ステップＳ４０５００３）
競合診断部４０５は、競合傾向判定部４０７を呼び出す。競合傾向判定部４０７の動作については後述の図１２で説明する。競合傾向判定部４０７は、アクセス競合が発生する傾向がどの程度に至っているかを判定する役割を有する。
【００５５】
図１１は、異常判定部４０６の動作を説明するフローチャートである。以下、図１１の各ステップについて説明する。
【００５６】
（図１１：ステップＳ４０６０００）
異常判定部４０６は、パラメータテーブル５０１００から異常判定閾値の設定値フィールド５０１０２を取得する。異常判定部４０６はさらに、記録テーブル５０２００からリソース競合カウンタの現在値フィールド５０２０２を取得する。リソース競合カウンタが異常判定閾値より大きければステップＳ４０６００１に進み、その他であれば本フローチャートを終了する。
【００５７】
（図１１：ステップＳ４０６００１）
異常判定部４０６は、記録テーブル５０２００の状態レベルの現在値フィールド５０２０２を、アクセス競合が重大である旨の値に更新する。アクセス競合の発生回数（リソース競合カウンタ）が異常判定閾値を超えている場合は、アクセス競合が多数発生して許容範囲を超えているとみなすことができるからである。本実施形態１においては、状態レベル＝２がその旨を表すものとする。
【００５８】
図１２は、競合傾向判定部４０７の動作を説明するフローチャートである。以下、図１２の各ステップについて説明する。
【００５９】
（図１２：ステップＳ４０７０００）
競合傾向判定部４０７は、記録テーブル５０２００のタイマカウンタの現在値フィールド５０２０２（現在時刻を表す）を取得する。競合傾向判定部４０７は、競合記録テーブル５０４００から現在時刻に対応するレコードとそのレコードの競合回数フィールド５０４０３を取得することにより、現在時刻におけるアクセス競合傾向を取得する。
【００６０】
（図１２：ステップＳ４０７００１）
競合傾向判定部４０７は、許容競合回数テーブル５０３００から現在時刻に対応するレコードとそのレコードの許容競合回数フィールド５０３０３を取得する。競合傾向判定部４０７は、アクセス競合傾向が許容競合回数を超えているか否かを判定する。超えている場合はステップＳ４０７００２へ進み、その他の場合は本フローチャートを終了する。
【００６１】
（図１２：ステップＳ４０７００２）
競合傾向判定部４０７は、記録テーブル５０２００の状態レベルの現在値フィールド５０２０２を、アクセス競合が発生する傾向がある旨の値に更新する。いずれかの時刻において競合回数フィールド５０４０３が許容競合回数フィールド５０３０３を超えている場合、少なくともその時刻においてはアクセス競合が許容範囲を超えているからである。本実施形態１においては、状態レベル＝１がその旨を表すものとする。
【００６２】
図１３は、フェールセーフ部４０８の動作を説明するフローチャートである。以下、図１３の各ステップについて説明する。
【００６３】
（図１３：ステップＳ４０８０００）
フェールセーフ部４０８は、記録テーブル５０２００の状態レベルの現在値フィールド５０２０２を取得する。状態レベルが２以上であればステップＳ４０８００１に進み、その他の場合はステップＳ４０８００２に進む。
【００６４】
（図１３：ステップＳ４０８００１）
フェールセーフ部４０８は、以下のいずれかを再起動することにより、フェールセーフ処理を実施する：（ａ）第１演算装置２、（ｂ）第１演算装置２と第２演算装置３、（ｃ）ＥＣＵ１全体。
【００６５】
（図１３：ステップＳ４０８００２）
フェールセーフ部４０８は、記録テーブル５０２００の状態レベルの現在値フィールド５０２０２を取得する。状態レベルが１以上であればステップＳ４０８００３に進み、その他の場合は本フローチャートを終了する。
【００６６】
（図１３：ステップＳ４０８００３）
フェールセーフ部４０８は、記録テーブル５０２００のタイミング調整フラグの現在値フィールド５０２０２をセットする（例えば１を書き込む）。
【００６７】
図１４は、第２演算装置制御部４０９の動作を説明するフローチャートである。第２演算装置制御部４０９は、例えば所定周期ごとに本フローチャートを実行する。以下、図１４の各ステップについて説明する。
【００６８】
（図１４：ステップＳ４０９０００）
第２演算装置制御部４０９は、記憶領域５が格納するデータテーブルを初期化する。初期化する対象は、データテーブル全体でもよいし、第２演算装置制御部４０９が参照する値のみでもよい。ただし本ステップの対象は、第１演算装置制御部４０１が初期化するデータテーブル（例えば記録テーブル５０２００など）ではなく、第２演算装置３のみが用いるデータとすれば足りる。
【００６９】
（図１４：ステップＳ４０９００１）
第２演算装置制御部４０９は、第２周期処理部４１０を呼び出す。第２周期処理部４１０の動作については後述の図１５で説明する。第２周期処理部４１０は、第２演算装置３が処理を実行する周期を制御する役割を有する。
【００７０】
（図１４：ステップＳ４０９００２）
第２演算装置制御部４０９は、終了条件が満たされているか否かを判定する。満たされていれば本フローチャートを終了し、満たされていなければステップＳ４０９００１へ戻る。
【００７１】
図１５は、第２周期処理部４１０の動作を説明するフローチャートである。以下、図１５の各ステップについて説明する。
【００７２】
（図１５：ステップＳ４１００００）
第２周期処理部４１０は、記録テーブル５０２００からタイマカウンタの現在値フィールド５０２０２を取得する。第２周期処理部４１０はさらに、パラメータテーブル５０１００から第２演算装置周期の設定値フィールド５０１０２を取得する。第２周期処理部４１０は、タイマカウンタを第２演算装置周期で除算した余りを求める。余りが０であればステップＳ４１０００１に進み、その他であれば本フローチャートを終了する。
【００７３】
（図１５：ステップＳ４１０００１）
第２周期処理部４１０は、第２排他制御部４１１を呼び出す。第２排他制御部４１１の動作については後述の図１６で説明する。第２排他制御部４１１は、第１演算装置２と第２演算装置３が共有アクセスするリソース（例えば記憶領域５）に対する排他制御を、第２演算装置３の側から実施する役割を有する。
【００７４】
図１６は、第２排他制御部４１１の動作を説明するフローチャートである。以下、図１６の各ステップについて説明する。
【００７５】
（図１６：ステップＳ４１１０００）
第２排他制御部４１１は、記録テーブル５０２００のリソースの現在値フィールド５０２０２を参照することにより、当該リソースを獲得できるか否かを判定する。リソースを獲得できなければ例えば所定時間待機した後に本ステップを繰り返す。リソースを獲得できればステップＳ４１１００１へ進む。
【００７６】
（図１６：ステップＳ４１１００１）
第２排他制御部４１１は、記録テーブル５０２００のリソースの現在値フィールド５０２０２を、アクセス不可である旨のフラグに更新する。排他制御部４０４は、共有リソースをロックする処理（クリティカルセクション処理）を実行することにより、獲得した共有リソースを排他制御した上で、所定の制御演算を実施する。
【００７７】
（図１６：ステップＳ４１１００２）
第２排他制御部４１１は、記録テーブル５０２００のリソースの現在値フィールド５０２０２を、アクセス可能である旨のフラグに更新する。
【００７８】
＜実施の形態１：まとめ＞
本実施形態１に係るＥＣＵ１は、アクセス競合回数が所定の基準値（許容競合回数テーブル５０３００が記述している許容競合回数５０３０３）を超えている場合は、タイミング調整フラグをセット（Ｓ４０８００３）することにより、第１演算装置２の実行周期を一時的に変更する。これにより、負荷が高まった際にアクセス競合によってＥＣＵ１が動作停止状態に陥ることを回避できる。
【００７９】
＜実施の形態２＞
実施形態１においては、アクセス競合回数の時刻ごとの積算値が許容競合回数５０３０３を超えているか否かに基づき、アクセス競合の傾向を判定することとした。本発明の実施形態２では、これに代えてアクセス競合確率の増加率が閾値を超えているか否かに基づき、アクセス競合の傾向を判定する。その他構成は実施形態１と同様であるので、以下では差異点を中心に説明する。
【００８０】
図１７は、本実施形態２におけるパラメータテーブル５０１００の構成とデータ例を示す図である。本実施形態２において、パラメータテーブル５０１００は新たに「許容競合傾向」の設定値を保持している。本パラメータの意義について以下説明する。
【００８１】
アクセス競合の積算値がある時刻において許容範囲を超えた場合は、実施形態１において状態レベル＝１とし、第１演算装置２の実行周期を一時的に変更することにした。しかしアクセス競合が多発する傾向は、これに限られないと考えられる。例えばアクセス競合が発生する確率が瞬時的に増加した場合、近い将来にアクセス競合が許容範囲を超えることが想定される。そこで本実施形態２においては、かかる瞬時的なアクセス競合確率の増加を捕捉し、先行して第１演算装置２の実行周期をずらすことにより、競合回避を図ることとした。
【００８２】
上記を実現するため、まず本実施形態２において、「競合確率＝アクセス競合回数／排他制御実行回数」と定義する。アクセス競合回数と排他制御実行回数はそれぞれタイマカウンタと連携して計測されるので、競合確率は時刻の関数となる。この競合確率を時間微分することにより、競合確率の瞬時変動を算出することができる。この時間微分値を、本実施形態２におけるアクセス競合傾向として用いる。具体的には、ステップＳ４０７０００において競合傾向判定部４０７が上記時間微分値を算出すればよい。競合傾向判定部４０７は、ステップＳ４０７００１において、算出した時間微分値と、「許容競合傾向」の設定値フィールド５０１０２とを比較することにより、アクセス競合傾向を判定することができる。時間微分値が許容競合傾向を超えている場合は、ステップＳ４０７００２において状態レベル＝１とする。
【００８３】
＜実施の形態２：まとめ＞
本実施形態２に係るＥＣＵ１は、アクセス競合確率の瞬時的な増加を捕捉し、アクセス競合が許容範囲を超える前にあらかじめ第１演算装置２の実行周期を一時的にずらす。これにより、アクセス競合が発生してＥＣＵ１が動作停止状態に陥ることを未然に防止することができる。
【００８４】
＜本発明の変形例について＞
本発明は上記実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換える事が可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について他の構成の追加・削除・置換をすることができる。
【００８５】
以上の実施形態において、ＥＣＵ１は演算装置を２つ備えているが、演算装置の個数は２つに限らない。１つのパッケージ内に３つ以上のプロセッサあるいはプロセッサコアを備えるシステムや、プロセッサコアを有する複数のパッケージによって構成されたシステムも、本発明の対象である。
【００８６】
以上の実施形態において、ＥＣＵ１の構成として図１を例示したが、その他構成を備えることもできる。例えば、データを保存するための不揮発性メモリ（バックアップＲＡＭ）、各演算装置が高速にアクセスすることができるローカルメモリ、図１に例示した以外のセンサ、などを備えることもできる。
【００８７】
実施形態１においてはアクセス競合回数の時刻ごとの積算値に基づきアクセス競合傾向を判定し、実施形態２においては競合確率の時間微分に基づきアクセス競合傾向を判定することとしたが、これらを組み合わせて用いることもできる。例えば、アクセス競合回数の時刻ごとの積算値と、競合確率の時間微分とを変数とする評価関数を定め、その評価関数が閾値を超えた場合は、状態レベル＝１とすることが考えられる。
【００８８】
以上の実施形態において、アクセス競合傾向が高まった場合は状態レベル＝１とし、競合回数の積算値が異常判定閾値を超えた場合は状態レベル＝２としたが、さらに多くの状態レベルを設けることもできる。例えば、アクセス競合回数の時刻ごとの積算値や競合確率の時間微分値に応じて、状態レベル＝１を細分することが考えられる。この場合は、状態レベルごとに異なるフェールセーフ処理を実施することもできる。
【００８９】
以上の実施形態において、アクセス競合の傾向やその判定結果に基づく異常判定は、競合診断部４０５／異常判定部４０６／競合傾向判定部４０７が分担して実施することとしたが、これは便宜上の役割分担に過ぎないので、これら機能部の全部または一部を一体的に構成してもよい。
【００９０】
以上の実施形態において、第１演算装置２の実行周期を一時的に変更することを説明したが、第２演算装置３についても同様に実行周期を一時的に変更してもよい。
【符号の説明】
【００９１】
１：ＥＣＵ
２：第１演算装置
３：第２演算装置
４：プログラム領域
４０１：第１演算装置制御部
４０２：タイマ制御部
４０３：第１周期処理部
４０４：排他制御部
４０５：競合診断部
４０６：異常判定部
４０７：競合傾向判定部
４０８：フェールセーフ部
４０９：第２演算装置制御部
４１０：第２周期処理部
４１１：第２排他制御部
５：記憶領域
５０１００：パラメータテーブル
５０２００：記録テーブル
５０３００：許容競合回数テーブル
５０４００：競合記録テーブル
【図１】
2017228192.tif 000003
【図２】
2017228192.tif 000004
【図３】
2017228192.tif 000005
【図４】
2017228192.tif 000006
【図５】
2017228192.tif 000007
【図６】
2017228192.tif 000008
【図７】
2017228192.tif 000009
【図８】
2017228192.tif 000010
【図９】
2017228192.tif 000011
【図１０】
2017228192.tif 000012
【図１１】
2017228192.tif 000013
【図１２】
2017228192.tif 000014
【図１３】
2017228192.tif 000015
【図１４】
2017228192.tif 000016
【図１５】
2017228192.tif 000017
【図１６】
2017228192.tif 000018
【図１７】
2017228192.tif 000019