(57)【特許請求の範囲】
【請求項１】
記憶部と、
該記憶部に記憶される複数のソフトウェアの動作を制御するソフトウェア制御部と、
前記ソフトウェア制御部の動作モードを特権モードと非特権モードとの間で切り換える動作モード切換部と、
前記記憶部に対する前記各ソフトウェアのアクセス権限を切り換えるアクセス権限切換部と、を備え、
前記アクセス権限切換部は、前記記憶部の保護領域の活性状態を管理するためのテーブルを使用して、前記保護領域の活性状態を変更し、
前記各ソフトウェアは、特権モードで動作可能な特権モード動作ソフトウェアと、非特権モードで動作可能な非特権モード動作ソフトウェアとに区分され、
当該区分と安全度に応じて一意に決定されるプログラム切換ＩＤが対応付けられ、
前回動作したソフトウェアのプログラム切換ＩＤと前記ソフトウェア制御部が動作させるソフトウェアのプログラム切換ＩＤとを比較して、それぞれのプログラム切換ＩＤの組み合わせに応じて動作モードと安全度の切り換えを判断し、
前記ソフトウェア制御部が動作させるソフトウェアを前記特権モード動作ソフトウェアと前記非特権モード動作ソフトウェアとの間で切り換える場合には、前記動作モード切換部が動作モードを切り換え、
前記ソフトウェア制御部が動作させるソフトウェアを同じ動作モードで動作するソフトウェア同士の間で切り換える場合には、前記アクセス権限切換部が前記ソフトウェアの安全度に応じて前記アクセス権限を切り換える、ことを特徴とする車両用制御装置。
【請求項２】
前記非特権モード動作ソフトウェアは、安全度に応じて複数段階に区分されることを特徴とする請求項１記載の車両用制御装置。
【請求項３】
前記ソフトウェアのアクセス権限を監視するアクセス権限違反監視部を備え、
前記アクセス権限違反監視部がアクセス権限違反を検知すると処理を中止することを特徴とする請求項１記載の車両用制御装置。
【請求項４】
前記ソフトウェアのアクセス権限を監視するアクセス権違反監視部を備え、
前記アクセス権限違反監視部がアクセス権限違反を検知すると違反に関する情報を保存することを特徴とする請求項１記載の車両用制御装置。
【請求項５】
前記記憶部を分割して複数の記憶領域を設定する記憶領域設定部を備え、
前記アクセス権限切換部は、前記複数の記憶領域に対し、異なるアクセス権限を設定することを特徴とする請求項１記載の車両用制御装置。
【請求項６】
前記記憶部を分割して複数の記憶領域を設定する記憶領域設定部を備え、
前記アクセス権限切換部は、前記複数の記憶領域の中の同じ記憶領域に対し、ソフトウェアの安全度に応じて異なるアクセス権限を設定することを特徴とする請求項１記載の車両用制御装置。
【請求項７】
前記アクセス権限切換部は、前記複数の記憶領域ごとに設定されるアクセス権限のパターンを複数管理し、
前記パターンを切り換えることにより、前記複数の記憶領域に対する個別のアクセス権限を一括して切り換えることを特徴とする請求項５又は６記載の車両用制御装置。
【請求項８】
前記アクセス権限切換部は、前記記憶部に対して設定されるアクセス権限を、前記ソフトウェアの実行中に再設定することを特徴とする請求項１記載の車両用制御装置。
【請求項９】
前記アクセス権限切換部が、
前記ソフトウェア制御部が前記非特権モードで動作し、第１の安全度水準が設定された第１のソフトウェアを動作させ、
前記第１のソフトウェアの実行中に、前記非特権モードで動作し、前記第１の安全度水準よりも高い第２の安全度水準が設定された第２のソフトウェアを動作させようとする際に、前記アクセス権限切換部がアクセス権限を切り換える、ことを特徴とする請求項１に記載の車両用制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両用制御装置に関するものである。
【背景技術】
【０００２】
近年の多くの車両制御システムは、電子化された車両制御機器を操作するＥＣＵ、すなわち電子制御装置（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）と、複数のＥＣＵ間の通信を可能にする車載ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）から構成されている。
【０００３】
車両制御システムは環境負荷の低減や安全要求に伴い、システムの高機能化、機能の分散化、複雑化が進んでいる。その結果、ＥＣＵのソフトウェアアーキテクチャの標準化、安全装置の電子制御化とその安全性確保の仕組みの重要性が増大している。
【０００４】
例えば、カーメーカは分散させた機能毎に専用のＥＣＵを用意するため、一つの車両制御システムに複数のＥＣＵが混在する。標準化された車両制御装置のソフトウェアアーキテクチャを導入することで、仕様の異なるＥＣＵを組合せて車両制御システムを構築することを容易にしている。ＡＵＴＯＳＡＲアーキテクチャでは、マイコンに依存する機能単位や、センサやアクチュエータの制御処理のアルゴリズム、設定パラメータ単位でモジュール化が行われているため、マイコンが変更となっても対象となるモジュールを修正するだけで、他のモジュールを修正することなく対応できる。
【０００５】
また、車両制御機器における安全装置の電子制御化にともない機能安全の仕組みが車両制御システムに導入されてきている。ここで、機能安全とはシステムに不具合が生じたときにシステムが安全側に遷移することで安全を確保する考えである。例えば自動車向け機能安全規格ＩＳＯ２６２６２では、安全度水準であるＡＳＩＬ（ＡｕｔｏｍｏｔｉｖｅＳａｆｅｔｙ  Ｉｎｔｅｇｒｉｔｙ  Ｌｅｖｅｌ）が設けられている。
【０００６】
一般的な車両制御システムは、コスト増加抑制や性能最適化の要求を満たすべく、さまざまな制御アプリケーションによって構成されており、さまざまな安全度水準のソフトウェアが混在することになる。機能安全規格ＩＳＯ２６２６２では安全要求が異なるソフトウェア間の干渉を防止することが求められている。具体的には、安全度水準の低いＱＭのソフトウェアが暴走して、ＡＳＩＬＤ等の安全度水準の高いソフトウェアが格納されているメモリへアクセスし、データを破壊することを防ぐことである。従って、一般的な車両制御システムにおいて機能安全規格ＩＳＯ２６２６２に準拠するには、ソフトウェア間の干渉を防止する仕組みが必要となる。
【０００７】
このような仕組みの一例として、特許文献１では、安全度の異なるタスクを実行する場合には、ユーザモードとカーネルモードとの間で動作モードを切り換えることが提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１２−２４７９７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、上記従来技術では、安全度水準の異なるタスクを実行すべく動作モードを切り換える際に、負荷の大きい割り込み処理を行うものである。従って、上記従来技術では、安全性を確保できたとしても、オーバーヘッドが増加してしまうという問題がある。
【００１０】
そこで、本発明は、安全度水準の異なる複数のソフトウェアを動作させる場合であっても、処理負荷を抑えつつ安全性を確保することができる車両用制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、記憶部と、該記憶部に記憶される複数のソフトウェアの動作を制御するソフトウェア制御部と、前記ソフトウェア制御部の動作モードを特権モードと非特権モードとの間で切り換える動作モード切換部と、前記記憶部に対する前記各ソフトウェアのアクセス権限を切り換えるアクセス権限切換部とを備えることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、安全度水準の異なる複数のソフトウェアを動作させる場合であっても、処理負荷を抑えつつ安全性を確保することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係る車両用制御装置の構成図である。
【図２】車両用制御装置のメモリ保護領域アクセス権限設定管理テーブルの例を示す図である。
【図３】車両用制御装置のメモリ保護領域アクセス権限管理テーブルの例を示す図である。
【図４】車両用制御装置のメモリ保護領域活性状態管理テーブルの例を示す図である。
【図５】車両用制御装置のメモリ保護領域活性パターン管理テーブルの例を示す図である。
【図６】車両用制御装置の動作モード管理テーブルの例を示す図である。
【図７】車両用制御装置で動作するソフトウェアの安全度水準と動作モードの例を示す図である。
【図８】車両用制御装置のプログラム切換ＩＤ管理テーブルの例を示す図である。
【図９】車両用制御装置の前回プログラムＩＤ管理テーブルの例を示す図である。
【図１０】車両用制御装置のテーブルサイズ管理テーブルの例を示す図である。
【図１１】車両用制御装置の前回動作モードフラグ管理テーブルの例を示す図である。
【図１２】車両用制御装置の割り込み処理用退避データ管理テーブルの例を示す図である。
【図１３】車両用制御装置のソフトウェア制御部の例を示す図である。
【図１４】車両用制御装置のＭＰＵ設定部の動作フローの例を示す図である。
【図１５】車両用制御装置の動作モード切換部の動作フローの例を示す図である。
【図１６】車両用制御装置のアクセス権限切換部の動作フローの例を示す図である。
【図１７】車両用制御装置で動作するソフトウェアの安全度水準と動作モードの他の例を示す図である。
【発明を実施するための形態】
【００１４】
図１は、本発明の実施形態に関わる車両用制御装置の構成図である。以下、車両用制御装置として、エンジンを制御する装置であるＥＣＵ１を元に説明する。エンジン制御装置ＥＣＵ１は演算装置（ＣＰＵ）１１、記憶部としてのメモリ１２、入出力回路１３、ＣＡＮコントローラ１４、スロットルセンサ１５、ペダルセンサ１６を備える。
【００１５】
演算装置（ＣＰＵ）１１は、ＣＰＵコア１１１、メモリ保護装置（ＭＰＵ）１１２からなる。ＣＰＵコア１１１は、メモリ１２が記憶（格納）している複数のソフトウェア（本実施形態では「プログラム」と称することがある。）を実行するプロセッサ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。演算装置（ＣＰＵ）１１は、特権モード、非特権モードと呼ばれる動作モードを有しており、両動作モードは、割り込み処理によって切り換えることができる。なお、ＣＰＵコア１１１の数は１つとしているが、ＣＰＵコア１１１の数は複数でもかまわない。
【００１６】
メモリ保護装置（ＭＰＵ）１１２は、主にメモリ１２へのアクセス権限を管理する装置であり、ソフトウェアのアクセス権限を監視するアクセス権限違反監視部を備える。アクセス権限を管理するとは、メモリ１２のアドレス空間に対し、任意の領域にアクセス権限を設定し、その設定を有効化、無効化することである。さらにメモリ１２に対するアクセスを監視し、アクセスに異常（即ち、違反）があればＣＰＵコア１１１の処理を無効又は中止して、処理結果が反映されないようにする。同等の機能を、回路デバイスなどのハードウェアを用いて構成することもできる。また、メモリ保護装置（ＭＰＵ）１１２は、メモリ１２を分割して複数の記憶領域を設定する記憶領域設定部を備えている。後述するメモリ保護領域は、この記憶領域設定部により設定される領域である。
【００１７】
メモリ１２はプログラム領域１２１とデータ記憶領域１２２を有する。プログラム領域１２１は、ソフトウェア制御部１１２１、アクセス権限切換部１２１２、動作モード切換部１２１３、ＭＰＵ設定部１２１４を格納する。データ記憶領域１２２は後述の図２で説明するメモリアクセス権限管理テーブル１２２００１０、図３で説明するメモリ保護領域アクセス権限管理テーブル１２２００２１、図４で説明するメモリ保護領域活性状態管理テーブル１２２００３０、図５で説明するメモリ保護領域活性パターン管理テーブル１２２００４０、図６で説明する動作モード管理テーブル１２２００５０、図８で説明するプログラム切換ＩＤ管理テーブル１２２００６０、図９で説明する前回プログラムＩＤ管理テーブル１２２００７０、図１０で説明するテーブルサイズ管理テーブル１２２００８０、図１１で説明する前回動作モードフラグ管理テーブル１２２００９０、図１２で説明する割り込み処理用退避データ管理テーブル１２２００１００を格納する。
【００１８】
本実施形態では、エンジン制御ＥＣＵ１の構成を機能安全規格ＩＳＯ２６２６２対応のＥＣＵアーキテクチャとしているが構成はこれに限らない。例えば、データを保存するための不揮発性メモリ（バックアップラム）や水温センサなどを備えてもよい。
【００１９】
エンジン制御装置１のデータ記憶領域１２２に格納されるテーブルを下記より説明する。
【００２０】
図２は、メモリアクセス権限管理テーブル１２２００１０の例を示す図である。メモリアクセス権限管理テーブル１２２００１０は、ＭＰＵが管理する、メモリ１２に対するデフォルトのアクセス権限の設定情報を管理するテーブルであり、先頭アドレスフィールド１２２００１１、後尾アドレスフィールド１２２００１２、特権モード書き込みフィールド１２２００１３、特権モード実行フィールド１２２００１４、特権モード読み込みフィールド１２２００１５、非特権モード書き込みフィールド１２２００１６、非特権モード実行フィールド１２２００１７、非特権モード読み出しフィールド１２２００１８からなる。説明の都合上、本実施形態ではメモリ１２に対するデフォルトのアクセス権限の設定情報を管理するためにメモリアクセス権限管理テーブル１２２００１０を用いるが、これに限らない。
【００２１】
先頭アドレスフィールド１２２００１１は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリを示す先頭アドレスを保持する。後尾アドレスフィールド１２２００１２は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリの後尾を示すアドレスを保持する。特権モード書き込みフィールド１２２００１３は、演算装置（ＣＰＵ）１１が特権モード時に先頭アドレスと後尾アドレスによって指定された領域（以下、メモリ保護領域）に対し、書き込み可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は書き込み不可とし、１の場合は書き込み可能とする。特権モード実行フィールド１２２００１４は、演算装置（ＣＰＵ）１１が特権モード時にメモリ保護領域に対し、処理を実行可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は処理の実行不可とし、１の場合は処理の実行可能とする。特権モード読み込みフィールド１２２００１５は、演算装置（ＣＰＵ）１１が特権モード時にメモリ保護領域に対し、読み出し可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は読み出し不可とし、１の場合は読み出し可能とする。非特権モード書き込みフィールド１２２００１６は、演算装置（ＣＰＵ）１１が非特権モード時にメモリ保護領域に対し、書き込み可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は書き込み不可とし、１の場合は書き込み可能とする。非特権モード実行フィールド１２２００１７は、演算装置（ＣＰＵ）１１が非特権モード時にメモリ保護領域に対し、処理を実行可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は処理の実行不可とし、１の場合は処理の実行可能とする。非特権モード読み出しフィールド１２２００１８は、演算装置（ＣＰＵ）１１が非特権モード時にメモリ保護領域に対し、読み出し可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は処理の実行不可とし、１の場合は処理の実行可能とする。ここで、メモリ領域１２のデフォルトのアクセス権限は、特権モードの書き込み、実行、読み出しは許可するが、非特権モードの書き込み、実行、読み出しは許可されない、としたがこれに限らない。例えば、特権モード、非特権モードにおいても書き込み、実行、読み出しを許可してもかまわない。
【００２２】
図３は、メモリ保護領域アクセス権限管理テーブル１２２００２０の例を示す図である。メモリ保護領域アクセス権限設定管理テーブル１２２００２０は、ＭＰＵが管理する、メモリ１２に対するアクセス権限の設定情報を管理するテーブルであり、メモリ保護領域番号フィールド１２２００２１、先頭アドレスフィールド１２２００２２、後尾アドレスフィールド１２２００２３、特権モード書き込みフィールド１２２００２４、特権モード実行フィールド１２２００２５、特権モード読み込みフィールド１２２００２６、非特権モード書き込みフィールド書き込み１２２００２７、非特権モード実行フィールド１２２００２８、非特権モード読み出しフィールド１２２００２９からなる。説明の都合上、本実施形態ではメモリ１２に対するアクセス権限の設定情報を管理するためにメモリ保護領域アクセス権限管理テーブル１２２００２０を用いるが、これに限らない。
【００２３】
メモリ保護領域アクセス権限管理テーブル１２２００２０では、複数のメモリ保護領域１〜４を有し、アクセス権限切換部は、各メモリ保護領域に対し、異なるアクセス権限を設定する。また、メモリ保護領域２，３は、実際には同じ領域であるが、アクセス権限切換部は、このメモリ保護領域２，３に対し、ソフトウェアの安全度に応じて異なるアクセス権限を設定する。
【００２４】
メモリ保護領域番号フィールド１２２００２１は、メモリ保護ユニット（ＭＰＵ）１２が管理するメモリ保護領域の領域番号を保持する。ここではメモリ保護領域が設定可能な領域は合計４領域としているがこれに限らない。先頭アドレスフィールド１２２００２２は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリ保護領域を示す先頭アドレスを保持する。後尾アドレスフィールド１２２００２３は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリ保護領域の後尾を示すアドレスを保持する。特権モード書き込みフィールド１２２００２４は、演算装置（ＣＰＵ）１１がメモリ保護領域に対し、書き込み可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は書き込み不可とし、１の場合は書き込み可能とする。
【００２５】
特権モード実行フィールド１２２００２５、演算装置（ＣＰＵ）１１が特権モード時に先頭アドレスと後尾アドレスによって指定された領域に対し、処理を実行可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は処理の実行不可とし、１の場合は処理の実行可能とする。
【００２６】
特権モード読み出しフィールド１２２００２６は、演算装置（ＣＰＵ）１１が特権モード時にメモリ領域に対し、読み出し可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は読み出し不可とし、１の場合は読み出し可能とする。非特権モード書き込みフィールド１２２００２７は、演算装置（ＣＰＵ）１１が非特権モード時にメモリ保護領域に対し、書き込み可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は書き込み不可とし、１の場合は書き込み可能とする。非特権モード実行フィールド１２２００２８は、演算装置（ＣＰＵ）１１が非特権モード時にメモリ保護領域に対し、処理を実行可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は処理の実行不可とし、１の場合は処理の実行可能とする。非特権モード読み出しフィールド１２２００２９は、演算装置（ＣＰＵ）１１が非特権モード時にメモリ保護領域に対し、読み出し可能か判断するための値を保持する。ここでは０か１の値を保持し、０の場合は処理の実行不可とし、１の場合は処理の実行可能とする。ここで、先頭アドレス２２００２２と後尾アドレス２２００２３によって範囲指定されないメモリ１２へのアクセス権限は、メモリアクセス権限管理テーブル１２２００１０で設定されたデフォルトのアクセス権限に設定される。
【００２７】
図４はメモリ保護領域活性状態管理テーブル１２２００３０の例を示す図である。メモリ保護領域活性状態管理テーブル１２２００３０は、メモリ保護ユニット（ＭＰＵ）１１２がメモリ保護領域に設定したアクセス権限が有効か無効かを管理するためのテーブルであり、メモリ保護領域番号フィールド１２２００３１、活性状態フィールド１２２００３２からなる。
【００２８】
メモリ保護領域番号フィールド１２２００３１は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリ保護領域の領域番号を保持する。ここではメモリ保護領域を４領域としているが、領域数はこれに限らない。
【００２９】
活性状態フィールド１２２００３２は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリ保護領域の活性状態の値を保持する。ここでは０か１の値を保持し、０の場合は該当するメモリ領域に設定されたアクセス権限の設定は無効となり、１の場合は該当するメモリ領域に設定されたアクセス権限の設定が有効となる。活性状態の値が０を保持した場合、該当するメモリ領域に設定されたアクセス権限は、メモリ保護領域アクセス権限管理テーブル１２２００１０におけるデフォルトのアクセス権限である。
【００３０】
図５はメモリ保護領域活性パターン管理テーブル１２２００４０の例を示す図である。メモリ保護領域活性パターン管理テーブル１２２００４０は、メモリ保護領域活性状態管理テーブル１２２００３０の活性状態フィールド１２２００３２に設定するメモリ保護領域の活性状態の設定パターンであり、メモリ保護領域番号フィールド１２２００４１、活性パターン１フィールド１２２００４２、活性パターン２フィールド１２２００４３からなる。
【００３１】
この図５のメモリ保護領域活性パターン管理テーブル１２２００４０にあるとおり、アクセス権限切換部は、複数のメモリ保護領域ごとに設定されるアクセス権限のパターンを活性パターン１及び活性パターン２として複数管理し、このパターンを切り換えることにより、複数のメモリ保護領域領域に対する個別のアクセス権限を一括して切り換える。
【００３２】
メモリ保護領域番号フィールド１２２００４１は、メモリ保護ユニット（ＭＰＵ）１１２が管理するメモリ保護領域の領域番号を保持する。ここではメモリ保護領域を４領域としているが、領域数はこれに限らない。
【００３３】
活性パターン１フィールド１２２００４２は、メモリ保護領域活性状態管理テーブル１２２００３０の活性状態フィールド１２２００３２に設定するメモリ保護領域の活性状態の設定パターンの一つである。ここでは全メモリ領域に対して、活性状態を設定しているが、一部のメモリ領域に対してのみ活性状態を設定してもよい。活性パターン２フィールド１２２００４３は、メモリ保護領域活性状態管理テーブル１２２００３０の活性状態フィールド１２２００３２に設定するメモリ保護領域の活性状態の設定パターンの一つである。ここでは全メモリ領域に対して、活性状態を設定しているが、一部のメモリ領域に対してのみ活性状態を設定してもよい。
【００３４】
図６は動作モード管理テーブル１２２００５０の例を示す図である。動作モード管理テーブル１２２００５０は、演算装置（ＣＰＵ）１１の動作モードを管理するためのテーブルであり、動作モードフラグフィールド１２２００５１からなる。
【００３５】
動作モードフラグフィールド１２２００５１は、演算装置（ＣＰＵ）１１の動作モードを示す値を保持する。ここでは０か１の値を保持し、０を保持するときは演算装置（ＣＰＵ）１１の動作モードは特権モード、１を保持するときは非特権モードを示す。
【００３６】
本実施形態では、各ソフトウェアが一般的な安全度水準（ＡＳＩＬ、ＱＭ）による区分とは別に、動作モードによる分類によって区分されている。これを図７を用いて説明する。具体的には、各ソフトウェアは、特権モードで動作可能な特権モード動作ソフトウェア（ＡＳＩＬＯＳ）と、非特権モードで動作可能な非特権モード動作ソフトウェア（ＡＳＩＬアプリ１〜２、ＱＭアプリ１〜３）とに区分される。また、非特権モード動作ソフトウェアは、さらに安全度に応じて複数段階に区分されている。図７では、非特権モード動作ソフトウェアのうち比較的安全度が高いＡＳＩＬアプリ１〜２と、比較的安全度が低いＱＭアプリ１〜３とに区分されている。
【００３７】
安全度水準の区分に基づいて説明すると、同じＡＳＩＬであるソフトウェア（ＡＳＩＬＯＳと、ＡＳＩＬアプリ１〜２）がさらに安全度に応じて複数段階に区分されており、安全度が比較的低い方のソフトウェア（ＡＳＩＬアプリ１〜２）は、ＱＭアプリと同じ非特権モード動作ソフトウェアに分類されている。
【００３８】
これは、各ソフトウェアが安全度に応じていわば高・中・低の３段階に区分される状態とも言える。
【００３９】
このように、本実施形態では、ソフトウェアの分類分けが工夫されており、非特権モードで動作させるソフトウェアの範囲が、通常は特権モードで動作させることが想定される安全度水準ＡＳＩＬのソフトウェアの一部を含むように拡張されている。
【００４０】
そして、ソフトウェア制御部が動作させるソフトウェアを特権モード動作ソフトウェアと非特権モード動作ソフトウェアとの間で切り換える場合には、動作モード切換部が動作モードを切り換える。一方、ソフトウェア制御部が動作させるソフトウェアを同じ動作モードで動作するソフトウェア同士の間で切り換える場合には、アクセス権限切換部がソフトウェアの安全度に応じてアクセス権限を切り換える。
【００４１】
図８はプログラム切換ＩＤ管理テーブル１２２００６０の例を示す図である。プログラム切換ＩＤ管理テーブル１２２００６０は、演算装置（ＣＰＵ）１１が実行するプログラムにおいて、ソフトウェア間のパーティショニングを実現するために割り当てるＩＤを管理するテーブルであり、プログラムＮｏ．フィールド１２２００６１、プログラム名フィールド１２２００６２、安全度水準フィールド１２２００６３、動作モードフィールド１２２００６４、プログラム切換フィールドＩＤ１２２００６５からなる。
【００４２】
プログラムＮｏ．フィールド１２２００６１は、エンジン制御ＥＣＵ１において実行されるソフトウェアに割り振られるナンバーである。
【００４３】
プログラム名フィールド１２２００６２は、エンジン制御ＥＣＵ１において実行されるソフトウェアの名称である。
【００４４】
安全度水準フィールド１２２００６３は、エンジン制御ＥＣＵ１において実行されるソフトウェアに割り付けられた安全度水準である。ここで、安全度水準はＡＳＩＬとＱＭに大別され、ＱＭが割り付けられたソフトウェアに比べＡＳＩＬが割り付けられたソフトウェアに対する安全度水準が高い。
【００４５】
ところで、安全度水準は、ソフトウェアに異常が発生した場合にシステムに与える影響の大きさに基づいて設定されており、安全度水準が高いソフトウェアとは、動作の際に要求される安全度が高いことを意味する。
【００４６】
動作モードフィールド１２２００６４は、該当するプログラム実行時に求められる演算装置（ＣＰＵ）１１の動作モードを示す。ここではＯＳや一部のアプリケーションに対し特権モードでの動作が割り当てられ、そのほかのアプリケーションは非特権モードで動作する。
【００４７】
プログラム切換ＩＤフィールド１２２００６５は、前回動作したプログラムのプログラム切換ＩＤを保持する。プログラム切換ＩＤはＡＳＩＬレベルと、実行動作モードの組み合わせで一意に決定される。ここでは、ＡＳＩＬレベルがＡＳＩＬ、実行動作モードが特権モードのプログラムに対し１が割り付けられ、ＡＳＩＬレベルがＡＳＩＬ、実行動作モードが非特権モードのプログラムに対し２が割り付けられ、ＡＳＩＬレベルがＱＭ、実行動作モードが非特権モードのプログラムに対し３が割り付けられるが、プログラム切換ＩＤの設定はこれに限らない。
【００４８】
図９は前回プログラム切換ＩＤ管理テーブル１２２００７０の例を示す図である。前回プログラム切換ＩＤ管理テーブル１２２００７０は、前回プログラム切換ＩＤフィールド１２２００７１からなる。
【００４９】
前回プログラム切換ＩＤフィールド１２２００７１は、前回動作したプログラムのプログラム切換ＩＤの値を保持する。
【００５０】
図１０はテーブルサイズ管理テーブル１２２００８０の例を示す図である。テーブルサイズ管理テーブル１２２００８０は、名称フィールド１２２００８１、総数フィールド１２２００８２、プログラム個数フィールド１２２００８３、メモリ保護領域数フィールド１２２００８４からなる。
【００５１】
名称フィールド１２２００８１は、テーブルサイズ管理テーブル１２２００８０で管理する対象の名称である。
【００５２】
総数フィールド１２２００８２は、テーブルサイズ管理テーブル１２２００８０で管理する対象の総数を表す。
【００５３】
プログラム個数フィールド１２２００８３は、プログラム切換ＩＤ管理テーブル１２２００６０が管理するプログラムＩＤの最大数を示す。
【００５４】
メモリ保護領域数フィールド１２２００８４は、メモリ保護領域アクセス権限管理テーブル１２２００２０で管理するメモリ保護領域番号の最大数を示す。
【００５５】
図１１は前回動作モードフラグ管理テーブル１２２００９０の例を示す図である。前回動作モードフラグ管理テーブル１２２００９０は、前回実行されたプログラムの演算装置（ＣＰＵ）１１の動作モードを示す値を管理するテーブルであり、前回動作モードフラグフィールド１２２００９１からなる。
【００５６】
前回動作モードフラグフィールド１２２００９１は、前回実行されたプログラムの演算装置（ＣＰＵ）１１の動作モードを示す値を保持する。ここでは０か１の値を保持し、０を保持するときは前回プログラムが実行した際の演算装置（ＣＰＵ）１１の動作モードが特権モードであること示し、１を保持するときは非特権モードを示す。
【００５７】
図１２は割り込み処理用退避データ管理テーブル１２２０１００の例を示す図である。割り込み処理用退避データ管理テーブル１２２０１００は、ＯＳによる割り込み処理時に退避するデータを管理するテーブルであり、動作モードフィールド１２２０１０１、プログラムカウンタフィールド１２２０１０２からなる。
【００５８】
動作モードフィールド１２２０１０１は、ＯＳの割り込み処理の直前の演算装置（ＣＰＵ）１１１の動作モードを示す値を保持する。ここでは０か１の値を保持し、０を保持するときは演算装置（ＣＰＵ）１１の動作モードは特権モード、１を保持するときは非特権モードを示す。
【００５９】
プログラムカウンタフィールド１２２０１０２は、演算装置（ＣＰＵ）１１１がＯＳの割り込み処理の直前に実行したメモリのアドレスである。
【００６０】
以上のテーブルが実施例１のエンジン制御ＥＣＵ１の記憶領域１２２に格納される。
【００６１】
これよりエンジン制御ＥＣＵ１のプログラム領域１２１に格納されているプログラムの動作フローについて説明する。
【００６２】
図１３はソフトウェア制御部１２１１の動作フローである。以下、図１３の各ステップについて説明する。診断設定情報送信実行部１２１１は、ｉに０を代入する（Ｓ１２１１０００）。診断設定情報確認用データ生成部１２１１は、ｉに１を加える（Ｓ１２１１００１）。ソフトウェア制御部１２１１は、ｉがテーブルサイズ管理テーブル１２２００８０で管理するプログラム個数の総数を超えているかを判定する（Ｓ１２１１００２）。ｉがプログラム個数の総数を超えている場合には処理を終了し、超えていない場合はＳ１２１１００３に進む。ソフトウェア制御部１２１１は、後述の図１１で説明するＭＰＵ設定部１２１５を呼ぶ（Ｓ１２１１００３）。これにより実行するプログラムに応じた演算装置（ＣＰＵ）１１の動作モードの変更や、メモリ１２に割り付けられたメモリ保護領域の活性状態を変更し、メモリ保護を実現する。ソフトウェア制御部１２１１は、プログラム切換ＩＤ管理テーブル１２２００６０のiに該当するプログラムＮｏ．のプログラムを実行し、ステップ１２１１００１に進む（Ｓ１２１１００４）。
【００６３】
図１４はＭＰＵ設定部１２１５の動作フローである。以下、図１４の各ステップについて説明する。ＭＰＵ設定部１２１５は、プログラム切換ＩＤ管理テーブル１２２００６０からiと等しいプログラムＮｏ．のプログラム切換ＩＤを取得する(Ｓ１２１５０００)。ＭＰＵ設定部１２１５は、前回プログラム切換ＩＤ管理テーブル１２２００７０から前回のプログラム切換ＩＤを取得する(Ｓ１２１５００１)。ＭＰＵ設定部１２１５は、取得したプログラム切換ＩＤと前回のプログラム切換ＩＤを比較し(Ｓ１２１５００２)、両者の値が等しい場合には、ステップステップ１２１５００６に進み、異なる場合にはステップ１２１５００３に進む。ＭＰＵ設定部１２１５は、取得したプログラム切換ＩＤと前回のプログラム実行ＩＤのうち、どちらかのプログラムＩＤが１の場合には、Ｓ１２１５００４に進み、異なる場合にはＳ１２１５００５に進む。ＭＰＵ設定部１２１５は、後述の図１５の動作モード切換部１２１３を呼び、演算装置（ＣＰＵ）の動作モードを切り換える (Ｓ１２１５００４)。ＭＰＵ設定部１２１５は、後述の図１３のアクセス権限切換部１２１２を呼び、メモリ領域の活性状態を変更し、メモリ１２へのアクセス権限を切り換える (Ｓ１２１５００５)。ＭＰＵ設定部１２１５は、前回プログラム切換ＩＤ管理テーブル１２２００７０の前回のプログラムＩＤを今回のプログラムＩＤで更新し(Ｓ１２１５００６)、処理を終了する。
【００６４】
図１５は動作モード切換部１２１３の動作フローである。以下、図１５の各ステップについて説明する。動作モード切換部１２１３は、動作モードフラグ管理テーブル１２２００５０から演算装置（ＣＰＵ）１１の動作モードフラグを取得する（Ｓ１２１３０００）。動作モード切換部１２１３は、ＯＳの割り込み処理を実施し、現在のプログラムカウンタと動作モードフラグを割り込み処理用退避データ管理テーブル１２２０１００に退避させる（Ｓ１２１３００１）。動作モード切換部１２１３は、割り込み処理用退避データ管理テーブル１２２０１００から動作モードフラグを取得する（Ｓ１２１３００２）。動作モード切換部１２１３は、取得した動作モードフラグの値を反転し、割り込み処理用退避データ管理テーブル１２２０１００の動作モードフラグを反転した値で更新する（Ｓ１２１３００３）。動作モード切換部１２１３は、ＯＳによる割り込み処理を終了し、割り込み処理用退避データ管理テーブル１２２０１００から退避した動作モードフラグとプログラムカウンタを取得し（Ｓ１２１３００４）、プログラムカウンタ、動作モードフラグを更新し処理を終了する。
【００６５】
図１６はアクセス権限切換部１２１２の動作フローである。以下、図１６の各ステップについて説明する。アクセス権限切換部１２１２は、プログラム切換ＩＤ管理テーブル１２２００６０からiに該当するプログラムＮｏ．のプログラム切換ＩＤを取得する（Ｓ１２１２０００）。アクセス権限切換部１２１２は、前回プログラム切換ＩＤ管理テーブル１２２００７０から前回プログラム切換ＩＤを取得する（Ｓ１２１２００１）。アクセス権限切換部１２１２は、ｊに０を代入する（Ｓ１２１２００２）。アクセス権限切換部１２１２は、取得したプログラムＩＤと前回プログラムＩＤの組み合わせを比較し（Ｓ１２１２００３）、組み合わせが（１，３）または（３，１）であればステップ１２１２００４に、異なる場合はステップ１２１２００７に進む。Ｓ１２１２００３でＹｅｓの場合、アクセス権限切換部１２１２は、ｊに１を加える（Ｓ１２１２００４）。アクセス権限切換部１２１２は、メモリ保護領域活性状態管理テーブル１２２００３０のｊと同じメモリ保護領域番号の活性状態を、メモリ保護領域活性パターン管理テーブル１２２００４０のｊと同じメモリ保護領域番号の活性パターン２の値に設定する（Ｓ１２１２００５）。アクセス権限切換部１２１２は、テーブルサイズ管理テーブル１２２００８０のメモリ保護領域数とｊを比較し（Ｓ１２１２００６）、メモリ領域数がｊよりも小さいステップ１２１２００６に、大きい場合にはステップ１２１２００１０に進む。Ｓ１２１２００３でＮｏの場合、アクセス権限切換部１２１２は、ｊに１を加える（Ｓ１２１２００７）。アクセス権限切換部１２１２は、メモリ保護領域活性状態管理テーブル１２２００３０のｊと同じメモリ保護領域番号の活性状態を、メモリ保護領域活性パターン管理テーブル１２２００４０のｊと同じメモリ保護領域番号の活性パターン１の値に設定する（Ｓ１２１２００８）。アクセス権限切換部１２１２は、テーブルサイズ管理テーブル１２２００８０のメモリ保護領域数とｊを比較し（Ｓ１２１２００９）、メモリ領域数がｊよりも小さいステップ１２１２００６に、大きい場合にはステップ１２１２００１０に進む。アクセス権限切換部１２１２は、前回プログラム切換ＩＤ管理テーブル１２２００７０の前回プログラム切換ＩＤを、取得したプログラム切換ＩＤの値で更新する（Ｓ１２１２０１０）。
【００６６】
次に、本実施形態の車両用制御装置で行われる動作を図８を用いて説明する。
【００６７】
まず、ソフトウェア制御部１２１１は、プログラムＮｏ．１として、非特権モードで動作する安全度水準ＱＭのソフトウェア「ＱＭアプリ１」を動作させている。そして、ＱＭアプリ１の実行中に、ソフトウェア制御部１２１１は、プログラムＮｏ．２として、非特権モードで動作する安全度水準ＡＳＩＬのソフトウェア「ＡＳＩＬアプリ１」を動作させようとする。このとき、「ＱＭアプリ１」と「ＡＳＩＬアプリ１」とは、動作モードは非特権モードで同じであるため動作モード切換部による動作モード切換は不要であるが、安全度が異なることに起因してアクセス権限が異なるため、アクセス権限切換部がアクセス権限を切り換える。ここで、安全度水準（即ち、安全度水準がＡＳＩＬかＱＭか）に基づいて動作モードを切り換える方法では、動作させるソフトウェアを「ＱＭアプリ１」から「ＡＳＩＬアプリ１」に変更する時点で動作モード切換部による動作モード切換が必要となる。しかし、本実施形態では、処理負荷（オーバヘッド）の大きな動作モード切換の処理が不要であり、アクセス権限切換の処理で済むため、ソフトウェアを「ＱＭアプリ１」から「ＡＳＩＬアプリ１」に変更する際の処理を高速化する。
【００６８】
次に、ソフトウェア制御部１２１１は、プログラムＮｏ．３として、非特権モードで動作する安全度水準ＡＳＩＬのソフトウェア「ＡＳＩＬＯＳ」を動作させようとする。このとき、「ＡＳＩＬアプリ１」と「ＡＳＩＬＯＳ」とでは動作モードが異なるため、動作モード切換部が動作モードを切り換える。ここでは、処理負荷の大きな動作モード切換の処理が発生する。
【００６９】
次に、ソフトウェア制御部１２１１は、プログラムＮｏ．４として、非特権モードで動作する安全度水準ＱＭのソフトウェア「ＱＭアプリ２」を動作させようとする。このとき、「ＡＳＩＬＯＳ」と「ＱＭアプリ２」とでは動作モードが異なるため、動作モード切換部が動作モードを切り換える。ここでも、処理負荷の大きな動作モード切換の処理が発生する。
【００７０】
次に、ソフトウェア制御部１２１１は、プログラムＮｏ．５として、非特権モードで動作する安全度水準ＡＳＩＬのソフトウェア「ＡＳＩＬアプリ２」を動作させようとする。従来であれば動作モード切換部による動作モード切換が必要であったが、本実施形態では動作モード切換は不要であり、アクセス権限切換部がアクセス権限を切り換える。
【００７１】
次に、ソフトウェア制御部１２１１は、プログラムＮｏ．６として、非特権モードで動作する安全度水準ＱＭのソフトウェア「ＱＭアプリ３」を動作させようとする。ここで、安全度水準に基づいて動作モードを切り換える方法では、作モード切換部による動作モード切換が必要であるが、本実施形態では動作モード切換は不要であり、アクセス権限切換部がアクセス権限を切り換える。
【００７２】
このように、動作させるソフトウェアをプログラムＮｏ．１から６まで順次変更する上記の例では、従来は４回必要であった動作モード切換が、本実施形態であれば２回で済む。このように、本実施形態によれば、動作するソフトウェアが順次変更されながら行われる車両制御全体としての負荷（オーバヘッド）を減少させることができる。
【００７３】
一般的に、車両制御に用いられるソフトウェアは、安全度が低いものの方が安全度が高いものに比べて多い。従って、安全度の比較的低いソフトウェア間ではアクセス権限切換によるメモリ保護を採用することで、動作モード切換が必要な対象を安全度の比較的高いソフトウェアに絞ることができる。即ち、動作モード切換が必要となる安全度を引き上げることができる。従って、全体として、動作モード切換の回数を減少させることができる。
【００７４】
以上のように、通常のソフトウェアアーキテクチャでは、一つのタスクに異なる安全度のソフトウェアが混在しており、異なる安全要求のソフトウェアにおいてパーティショニングを適用すると、メモリ保護ユニット（ＭＰＵ）によるアクセス制限が発生する。従来手法ではアクセス権限切り換え処理は、実行中の処理の中断が伴うＯＳの割り込み機能によって実現されるため、既存のソフトウェアでは、メモリ保護ユニット（ＭＰＵ）で管理するアクセス権限の切り換えが頻発し、処理中断によるオーバーヘッド増加が懸念されていた。
【００７５】
一方、本実施形態によれば、安全度水準の異なる複数のソフトウェアを動作させる場合であっても、処理負荷を抑えつつ安全性を確保することができる。即ち、メモリ保護装置１１２が管理するメモリ保護領域の活性状態を柔軟にコントロールすることで、同一の演算装置（ＣＰＵ）１１の動作モードで異なる安全度のソフトウェア間のメモリ保護を実現することができる。また、演算装置（ＣＰＵ）１１の動作モードの切換と、メモリ保護装置１１２が管理するメモリ保護領域の活性状態の設定を活用することで、ＯＳの割り込み頻度の少ない高速なメモリアクセス権限の切換をすることができる。
【００７６】
なお、車両用制御装置がアクセス権限違反を検出した場合、ドライバにその旨を報知するものであっても良い。例えば、ユーザインタフェース用の車両用制御装置を含む複数の車両用制御装置が車載ネットワークを介して接続される車両制御システムを例に説明すると、いずれかの車両用制御装置がメモリアクセスの異常（即ち、違反）を検出した場合、ユーザインタフェース用の車両用制御装置に異常情報を送信し、異常情報を受信した前記ユーザインタフェース用の車両用制御装置がドライバーへの警告に関する指令を行う方法がある。
【００７７】
また、アクセス異常情報を記憶するバックアップメモリを車両用制御装置に設け、ソフトウェアのアクセスに権限違反があった場合には、バックアップメモリに保存するようにしてもよい。この場合には、車載ネットワークを介して解析ツールを車両用制御装置に接続し、解析ツールからメモリアクセス異常情報を要求するメッセージを送信することにより、このメッセージを受信した車両用制御装置がメモリアクセス異常情報を解析ツールに送信することで、メモリアクセス異常情報を取り出すことができる。
【００７８】
なお、上記実施形態においては、特権モードで動作可能なソフトウェアがＡＳＩＬＯＳであり、非特権モード動作ソフトウェアが安全度に応じて複数段階に区分される例を説明したが、これに限定されず、特権モード動作ソフトウェアが安全度に応じて複数段階に区分されるものであってもよい。この場合には、同じ特権モードにおいてアクセス権限切換部がソフトウェアの安全度に応じてアクセス権限を切り換える。一例としては、図１７に示すように、ＡＳＩＬ  ＯＳとＡＳＩＣ−Ｃアプリが特権モード動作ソフトウェアであり、非特権モード動作ソフトウェアがＡＳＩＬ−Ｂアプリ、ＡＳＩＬ−Ａアプリ、ＱＭアプリである例が考えられる。
【図１】
0006349444.tif 000002
【図２】
0006349444.tif 000003
【図３】
0006349444.tif 000004
【図４】
0006349444.tif 000005
【図５】
0006349444.tif 000006
【図６】
0006349444.tif 000007
【図７】
0006349444.tif 000008
【図８】
0006349444.tif 000009
【図９】
0006349444.tif 000010
【図１０】
0006349444.tif 000011
【図１１】
0006349444.tif 000012
【図１２】
0006349444.tif 000013
【図１３】
0006349444.tif 000014
【図１４】
0006349444.tif 000015
【図１５】
0006349444.tif 000016
【図１６】
0006349444.tif 000017
【図１７】
0006349444.tif 000018