(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵと、各ＣＰＵがアクセス可能な記憶手段と、
第２のＣＰＵが前記記憶手段へデータを書き込むことを禁止するアクセス制御手段と、を有し、
各ＣＰＵが共通の異常検出プログラムを実行することで各ＣＰＵがそれぞれ実現させる手段として、
演算用データを前記記憶手段の第１のアドレスに書き込むデータ書き込み手段と、
前記記憶手段の前記第１のアドレスから前記演算用データを読み出すデータ読み出し手段と、
前記データ読み出し手段が読み出した前記演算用データに演算を施し演算結果データを生成するデータ演算手段と、
前記データ書き込み手段が前記記憶手段の第２のアドレスに書き込み前記データ読み出し手段が前記記憶手段の前記第２のアドレスから読み出した演算結果データと、前記データ演算手段が生成した演算結果データを比較する比較手段と、を有し、
前記アクセス制御手段により前記第２のＣＰＵが前記記憶手段への書き込みを禁止されている状態で、第１のＣＰＵの前記データ書き込み手段が前記記憶手段の前記第２のアドレスに書き込んだ演算結果データを前記第２のＣＰＵの前記データ読み出し手段が読み出すことで、前記第２のＣＰＵの前記比較手段は前記第１のＣＰＵの前記データ演算手段による演算結果データと、前記第２のＣＰＵの前記データ演算手段による演算結果データとを比較する、情報処理装置。
【請求項２】
前記第１のＣＰＵの前記データ書き込み手段が演算用データを前記記憶手段の前記第１のアドレスに書き込み、
前記第１のＣＰＵの前記データ読み出し手段が前記記憶手段の前記第１のアドレスから演算用データを読み出し、
前記第１のＣＰＵの前記データ演算手段が、前記データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成し、
前記第１のＣＰＵの前記データ書き込み手段が演算結果データを前記記憶手段の前記第２のアドレスに書き込み、
前記アクセス制御手段により前記第２のＣＰＵによる前記記憶手段への書き込みが禁止された状態で、前記第２のＣＰＵの前記データ書き込み手段が演算用データを前記記憶手段の前記第１のアドレスに書き込みを試みるが書き込めず、
前記第２のＣＰＵの前記データ読み出し手段が前記記憶手段の前記第１のアドレスから演算用データを読み出し、
前記第２のＣＰＵの前記データ演算手段が、前記第２のＣＰＵの前記データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成し、
前記アクセス制御手段により前記第２のＣＰＵによる前記記憶手段への書き込みが禁止された状態で、前記第２のＣＰＵの前記データ書き込み手段が演算結果データを前記記憶手段の前記第２のアドレスに書き込みを試みるが書き込めず、
前記第２のＣＰＵの前記データ読み出し手段が前記記憶手段の前記第２のアドレスから演算結果データを読み出し、
前記第２のＣＰＵの前記比較手段は、前記第２のＣＰＵの前記データ読み出し手段が読み出した演算結果データと、前記第２のＣＰＵの前記データ演算手段が生成した演算結果データを比較する、ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第２のＣＰＵの前記比較手段は、前記第２のＣＰＵの前記データ読み出し手段が読み出した演算結果データと、前記第２のＣＰＵの前記データ演算手段が生成した演算結果データが一致しない場合、
さらに、正常な演算結果である期待値データと前記第２のＣＰＵの前記データ演算手段が生成した演算結果データ、又は、前記期待値データと前記第２のＣＰＵの前記データ読み出し手段が前記記憶手段の前記第２のアドレスから読み出した演算結果データを比較し、前記第１のＣＰＵ又は前記第２のＣＰＵのどちらに異常があるかを判定する、
ことを特徴とする請求項１又は２いずれか１項記載の情報処理装置。
【請求項４】
前記アクセス制御手段は、前記記憶手段からの読み出し、又は、前記記憶手段への書き込みの許否をＣＰＵ毎に規定したアクセス許否情報を有し、
読み書きが許可されたＣＰＵと書き込みが禁止されたＣＰＵが切り換わるように、アクセス許否情報を書き換える、ことを特徴とする請求項１〜３いずれか１項記載の情報処理装置。
【請求項５】
複数のＣＰＵと、各ＣＰＵがアクセス可能な記憶手段と、
第２のＣＰＵが前記記憶手段へデータを書き込むことを禁止するアクセス制御手段と、を有する情報処理装置の異常判定方法であって、
各ＣＰＵが共通の異常検出プログラムを実行することで各ＣＰＵがそれぞれ実現させる手段が実行するステップとして、
データ書き込み手段が、演算用データを前記記憶手段の第１のアドレスに書き込むステップと、
データ読み出し手段が、前記記憶手段の前記第１のアドレスから演算用データを読み出すステップと、
データ演算手段が、前記データ読み出し手段が読み出した前記演算用データに演算を施し演算結果データを生成するステップと、
比較手段が、前記データ書き込み手段が前記記憶手段の第２のアドレスに書き込み前記データ読み出し手段が前記記憶手段の前記第２のアドレスから読み出した演算結果データと、前記データ演算手段が生成した演算結果データを比較するステップと、を有し、
前記アクセス制御手段により前記第２のＣＰＵが前記記憶手段への書き込みを禁止されている状態で、前記第１のＣＰＵの前記データ書き込み手段が前記記憶手段の前記第２のアドレスに書き込んだ演算結果データを前記第２のＣＰＵの前記データ読み出し手段が読み出すことで、前記第２のＣＰＵの前記比較手段は前記第１のＣＰＵの前記データ演算手段による演算結果データと、前記第２のＣＰＵの前記データ演算手段による演算結果データとを比較する、異常判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコアを有する情報処理装置に関し、コアの動作を監視することが可能な情報処理装置に関する。
【背景技術】
【０００２】
燃費向上や運転者の負担軽減、安全性の向上などをもたらすため、車両にはマイコンを応用した多くの電子制御装置が搭載されている。マイコンが故障するとこれらの制御が損なわれるため、マイコンの動作状態を監視してマイコンの動作を保証する対策が講じられている。
【０００３】
ところで、マイコンに、コアが複数個含まれるマルチコア型のプロセッサが搭載されるようになってきた（以下、マルチコアマイコンという）。マルチコアマイコンにおいて各コアの動作状態を監視する手法として、一命令を同時に複数のコアで実行して、命令単位で実行結果を比較するロックステップ方式が知られている。しかし、ロックステップ方式では、複数のコアが同じ命令を実行するため同時に１つのタスクしか実行されず処理効率が低下してしまう。
【０００４】
そこで、複数のコアで同じタスクを単発的に実行し、比較回路が処理結果を比較することでコアの異常を検出する手法が知られている（例えば、特許文献１参照。）。特許文献１には、複数の通常タスク処理用プロセッサのうち所定順序で選択されたプロセッサと同一の処理を、選択された通常タスク処理用プロセッサと並行して行う並行同一処理用プロセッサと、順に選択された通常タスク処理用プロセッサによる処理結果と並行同一処理用プロセッサによる処理結果とを比較する比較手段と、を有するマルチプロセッサ装置が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１４５９００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示されたコアの監視方法では、専用の比較手段が必要になるという問題がある。これは複数のコアの処理結果を比較するには、各コアの処理結果をコアの外部に取り出す必要があるためである。
【０００７】
複数のコアのいずれかが他のコアの処理結果と自コアの処理結果を比較すれば、比較回路が不要になるが、比較処理を行うコアは他のコアの処理結果を読み出すなどの余分の処理が必要になってしまう。また、この場合、各コアが使用するＲＡＭ領域等が異なるため、同じ入力データを使用し同じ処理を行ったはずでも、処理結果が一致しない場合が生じる可能性がある。
【０００８】
本発明は、上記課題に鑑み、比較回路を用いることなく複数のＣＰＵの動作を監視可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、複数のＣＰＵと、各ＣＰＵがアクセス可能な記憶手段と、第２のＣＰＵが前記記憶手段へデータを書き込むことを禁止するアクセス制御手段と、を有し、各ＣＰＵが共通の異常検出プログラムを実行することで各ＣＰＵがそれぞれ実現させる手段として、演算用データを前記記憶手段の第１のアドレスに書き込むデータ書き込み手段と、前記記憶手段の前記第１のアドレスから前記演算用データを読み出すデータ読み出し手段と、前記データ読み出し手段が読み出した前記演算用データに演算を施し演算結果データを生成するデータ演算手段と、前記データ書き込み手段が前記記憶手段の第２のアドレスに書き込み前記データ読み出し手段が前記記憶手段の前記第２のアドレスから読み出した演算結果データと、前記データ演算手段が生成した演算結果データを比較する比較手段と、を有し、前記アクセス制御手段により前記第２のＣＰＵが前記記憶手段への書き込みを禁止されている状態で、第１のＣＰＵの前記データ書き込み手段が前記記憶手段の前記第２のアドレスに書き込んだ演算結果データを前記第２のＣＰＵの前記データ読み出し手段が読み出すことで、前記第２のＣＰＵの前記比較手段は前記第１のＣＰＵの前記データ演算手段による演算結果データと、前記第２のＣＰＵの前記データ演算手段による演算結果データとを比較する、ことを特徴とする。
【発明の効果】
【００１０】
比較回路を用いることなく複数のＣＰＵの動作を監視可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】マイコンの概略的な特徴を説明する図の一例である。
【図２】マイコンのハードウェア構成図の一例である。
【図３】ＭＰＵによるＲＡＭへのアクセス制御を説明する図の一例である。
【図４】アクセス許否情報の一例を示す図である。
【図５】コア１とコア２が実行するタスクの順番を模式的に説明する図の一例である。
【図６】コア１又はコア２が実行する異常判定処理（タスクＢ）の機能ブロック図の一例を示す。
【図７】コア１，２が異常判定処理を行う手順の一例を示すフローチャート図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図１は、本実施形態のマイコンの概略的な特徴を説明する図の一例である。ＣＰＵコア１とＣＰＵコア２は（以下、ＣＰＵコアを単にコアという）、異常判定処理を異なるタイミングで実行する。この異常判定処理はコア１，２から共通に実行されるタスクである。
【００１３】
また、多くのマイコンは、ＭＰＵ（Memory  Protection  Unit）と呼ばれる回路を有している。ＭＰＵはコア１，２のＲＡＭへのアクセスを制御する。ここでは、ＭＰＵは以下のようにアクセス制御を行う。
・コア１がＲＡＭのアドレスＡ、アドレスＢにライト／リードすることを許可する。
・コア２がＲＡＭのアドレスＡ、アドレスＢからリードすることは許可するが、ライトすることを禁止する。
Ａ．異常判定処理を開始したコア１は以下のように動作する。
(1)  演算用データをアドレスＡに書き込む。
(2)  演算用データをアドレスＡから読み出す。
(3)  演算用データを使って演算を実行して比較用データを生成する。比較用データはコア１が保持しておく。
(4)  比較用データをアドレスＢに書き込む。
(5)  比較用データをアドレスＢから読み出す。
(6)  アドレスＢから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。
【００１４】
コア１が実行する異常判定処理では、(3)と(5)の比較用データが元々同じものなので、書き込みエラー等が生じない限り、２つの比較用データは一致する。
Ｂ．異常判定処理を開始したコア２は以下のように動作する。
(1)  演算用データをアドレスＡに書き込む。しかし、コア２はアドレスＡに演算用データを書き込むことができない。
(2)  演算用データをアドレスＡから読み出す。
(3)  演算用データを使って演算を実行して比較用データを生成する。比較用データはコア２が保持しておく。
(4)  比較用データをアドレスＢに書き込む。しかし、コア２はアドレスＢに比較用データを書き込むことができない。
(5)  比較用データをアドレスＢから読み出す。
(6)  アドレスＢから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。
【００１５】
つまりコア２は、(1)において演算用データを書き込めないので、(3)においてコア２はコア１と同じ演算用データを用いて演算を実行する。そして、(4)においてコア２は比較用データを書き込めないので、(6)においてコア２は、コア１が実行してアドレスＢに書き込んだ比較用データと、コア２が演算を実行して生成した比較用データを比較する。
【００１６】
したがって、コア２は、コア１が比較用データを演算するために使用した演算用データを使用して比較用データを生成し、コア１が生成した比較用データと比較することができる。演算用データの同一性が保証されるので、比較用データの不一致からコア１又はコア２の異常を高い確度で検出できる。
【００１７】
また、異常判定処理は全く同じ処理なので、ＲＯＭには１つの異常判定処理のプログラムを記憶しておけばよい。さらに、異常判定処理の上記のプロセスは、制御用のプログラムでも含まれうるので、制御用のプログラムにいくつかの処理を加えるだけで異常判定処理が可能となる。
【００１８】
〔構成例〕
図２は、車両に搭載されるマイコンのハードウェア構成図の一例である。マイコン１００は、ＥＣＵ（Electronic  Control  Unit）に搭載されることが想定されているがその用途は車両に限定されない。車載されるＥＣＵには、その主要な機能により、エンジンＥＣＵ、ブレーキＥＣＵ、ボディＥＣＵ、ナビゲーションＥＣＵ（ＡＶ・情報処理ＥＣＵ）、ゲートウェイＥＣＵ等の種類がある。本実施例のマイコン１００はＥＣＵの機能の違いに影響されず搭載されることが可能である。また、複数の機能が１つに統合されたＥＣＵにマイコン１００を搭載してもよい。
【００１９】
マイコン１００は、メインバス２１に接続されたプロセッサ１１、ＲＯＭ１２、ＩＮＴＣ１３、ＲＡＭ１４、ＤＭＡＣ１５、並びに、Ｉ／Ｏブリッジ１６を有し、Ｉ／Ｏブリッジ１６には周辺バス２２を介してＡＤＣ（Analog  to  Digital  Converter）１７及びＣＡＮコントローラ１８が接続されている。
【００２０】
プロセッサ１１は少なくとも２つ以上のコア１〜ｎを有する。各コア１〜ｎは一般的な演算機能（例えば、ＡＬＵ等の演算装置、命令バッファ、命令デコーダ、レジスタセット等）を有している。１つのチップに複数のコア１〜ｎを有するプロセッサでなく、ＣＰＵが独立にメインバス２１に接続されていてもよい。
【００２１】
ＭＰＵ２０はプロセッサ内に配置されているが、単独で搭載されてもよい。また、ＭＰＵ２０はＭＭＵ（Memory  Management  Unit）として実装されることも多い。ＭＭＵはアドレス変換機能、メモリ保護機能、キャッシュ管理機能、及び、バス調停機能等を有し、このメモリ保護機能がＭＰＵ２０の機能に相当する。
【００２２】
ＲＯＭ１２はフラッシュメモリなどの不揮発メモリであり、プロセッサ１１が実行するプログラム３０や初期値、パラメータ等を記憶している。
【００２３】
ＩＮＴＣ１３はＩＲＱやその他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してプロセッサ１１に通知する。これによりプロセッサ１１は、割り込みした周辺機器に応じて決まったアドレスの命令をＲＯＭ１２から読み出して処理を実行する。
【００２４】
ＲＡＭ１４は、プロセッサ１１がプログラム３０を実行するための作業領域である。プロセッサ１１はＲＯＭ１２からプログラム３０を読み込み、また、必要であればデータバスを介してＲＡＭ１４からデータを読み出しプログラム３０を実行する。ＤＭＡＣ１５は、プロセッサ１１からの指示によりＲＡＭ１４からＩ／Ｏブリッジ１６を介して周辺機器にデータを送信する。また、周辺機器から割り込みされたプロセッサ１１から指示を受けて、Ｉ／Ｏブリッジ１６を介して周辺機器からデータを受け取り、ＲＡＭ１４に書き込む。
【００２５】
Ｉ／Ｏブリッジ１６は、メインバス２１と周辺バス２２との周波数の違いを吸収し、メインバス側の回路と周辺バス側の回路のデータを互いに受け渡す。Ｉ／Ｏブリッジ１６は、マルチプレクサやブリッジ回路などであり、チャネル毎に、ＡＤＣ１７、及び、ＣＡＮコントローラ１８とそれぞれ接続されており、これらの周辺機器とデータを送受信する。
【００２６】
ＡＤＣ１７は、各種のセンサが検出したアナログ信号をデジタル信号に変換する。ＡＤＣ１７は変換の終了を、ＩＮＴＣ１３を介してプロセッサ１１に通知する。ＣＡＮコントローラ１８は、車載ネットワークを介して接続された他のＥＣＵと通信するための通信装置である。ＣＡＮコントローラ１８は、プロセッサ１１から通信データの送信要求を受け付けるとフレームの各フィールドにＣＡＮ  ＩＤやデータを格納しＣＡＮバスに出力する。また、ＣＡＮコントローラ１８は、受信すべきＣＡＮ  ＩＤの通信データを検出するとそれを取り込みＩＮＴＣ１３を介してプロセッサ１１に割り込んで通知する。
【００２７】
図３は、ＭＰＵ２０によるＲＡＭ１４へのアクセス制御を説明する図の一例である。コア１，コア２は、アドレス線４１、Ｒ／Ｗ選択信号線４２、及び、チップ識別信号線４３などを介してＭＰＵ２０と接続されている。ＭＰＵ２０は、アドレス線４１、Ｒ／Ｗ選択信号線４２、及び、Ｒ／Ｗ許否信号線４４などを介してＲＡＭ１４と接続されている。また、ＲＡＭ１４はデータ線４５を介してコア１、コア２と接続されている。
【００２８】
コア１又はコア２がＲＡＭ１４へアクセス要求する際、例えば、不図示のアービタがラウンドロビン方式、固定優先順位方式、又は、重み付けラウンドロビン方式などに基づき、コア１又はコア２にアクセス権を与える。
【００２９】
アクセス権を取得したコア１又はコア２は、チップ識別信号線をアサートしてＭＰＵ２０と接続する。そして、リード要求かライト要求かをＲ／Ｗ選択信号線によりＭＰＵ２０に通知すると共に、アドレス線によりアドレスを通知する。ＭＰＵ２０がＭＭＵの一機能として搭載されている場合、ＭＭＵは仮想アドレスを物理アドレスに変換するが、本実施形態ではアドレスの変換の有無は問わない。
【００３０】
ＭＰＵ２０は、チップ識別信号線で接続されたコア１又はコア２のアドレス線及びＲ／Ｗ選択信号線をＲＡＭ１４側にパススルーして、アドレスとリード要求／ライト要求をＲＡＭ１４に出力する。ＲＡＭ１４からデータのリード又はＲＡＭ１４へのライトが許可されるか否かは、Ｒ／Ｗ許否信号線により制御される。
【００３１】
ＭＰＵ２０はアクセス許否情報２３を有している。アクセス許否情報２３は、ＯＳやプログラムがマイコンの起動時にＭＰＵ２０のレジスタに記憶させる。アクセス許否情報２３には、ＲＡＭ１４の領域単位に、各コアがリード可能か否か、ライト可能か否かが設定されている。
【００３２】
ＭＰＵ２０は、アクセス許否情報２３を参照して、アクセス要求したコアがアドレスの示す領域にリード又はライト可能か否かを判定する。コア１又はコア２がリード要求し、リードが禁止されている場合、ＭＰＵ２０はＲ／Ｗ許否信号線によりリード禁止をＲＡＭ１４に出力する。この場合、コア１又はコア２はＲＡＭ１４からデータを読み出すことができない。コア１又はコア２がライト要求し、ライトが禁止されている場合、ＭＰＵ２０はＲ／Ｗ許否信号線によりライト禁止をＲＡＭ１４に出力する。この場合、コア１又はコア２はＲＡＭ１４にデータを書き込むことができない。
【００３３】
図４は、アクセス許否情報２３の一例を示す図である。アクセス許否情報２３はコア毎に設けられている。コア毎かつタスク毎に規定することも可能である。アクセス許否情報２３は、「領域番号」、「アドレス」、「サイズ」、「リード」、「ライト」、「モード」の各項目を有する。実際にはＭＰＵ２０にこのようなラベルが付与されているわけではなく、ＭＰＵ２０のレジスタ番号やレジスタ内のbit位置により格納される情報が予め定められている。
【００３４】
「領域番号」は、ＲＡＭ１４の一部又は全体をいくつかの領域に区分した場合に領域を識別するための識別情報である。「アドレス」は領域が始まるアドレスを示し、「サイズ」は領域の容量を示す。「リード」はその領域のリードが許可されているか否かを示し、「ライト」はその領域へのライトが許可されているか否かを示す。「モード」は、コア１，２の動作モードであり、本実施形態では各コアは特権モードとユーザモードの２つの動作モードを有している。簡単には、特権モードは、コアがＯＳを実行する動作モードであり、ユーザモードは、コアがアプリケーションを実行する動作モードである。一般に、ＯＳのシステム領域にアクセスできるのはＯＳだけである。図４では、領域１をシステム領域としたため、領域１は特権モードでのみリード及びライトが許可されている。
【００３５】
コア１のアクセス許否情報２３とコア２のアクセス許否情報２３を比較すると、コア２は、領域２においてユーザモードのライトが禁止されている。すなわち、コア２はユーザモードにおいて、領域２にデータを書き込むことができない。したがって、アクセス許否情報２３により、コア１には領域２にリード及びライトすることを許可し、コア２には領域２からのリードのみを許可する、というアクセス制御が可能になる。
【００３６】
例えば、コア１及びコア２がＲＡＭ１４にデータを書き込むための命令は以下のようになる。
ST  Gr0,  @Gr1
この命令は、レジスタGr0のデータをレジスタGr1に格納されているＲＡＭ１４のアドレス（図１ではアドレスＡ，及び、アドレスＢが相当する）に書き込むというものである（“@”はポインタを意味する）。開発者等は、レジスタGr1に格納されているＲＡＭ１４のアドレスを把握しておき、このアドレスが含まれる領域のアクセス許否情報２３を図４の領域２のように記述する。これにより、コア１はリード／ライト可能だがコア２はリードのみが可能な領域を、異常判定処理により使用されるＲＡＭ１４の領域として確保することができる。
【００３７】
なお、ＭＰＵ２０がアクセス許否情報２３によりコアのアクセス（リード又はライトのどちらの場合でも）を拒否する場合、一般には例外が発生する。つまりＭＰＵ２０は、アクセスを拒否するコアに対し例外の発生を知らせる割込みする。コアはこの割込みに対し予め定められた例外ハンドラや例外処理ルーチンを実行するが、本実施形態ではこの例外は想定されている例外なので、例外ハンドラがすぐに元の異常判定処理に戻る処理を実行すればよい。また、この例外による割込みをマスクしておいてもよい。また、ＭＰＵ２０がコア２と接続された場合に、例外の発生をコア２に通知しないようにしてもよい。例えば、ＭＰＵ２０とコアを接続する例外の割込み線にスイッチを配置し、コア２と接続された場合に、コア２又はＭＰＵ２０がスイッチをオフにする。
【００３８】
〔タスクスケジュール〕
図５（ａ）はコア１とコア２が実行するタスクの順番を模式的に説明する図の一例である。タスクとは、Ｍａｉｎ関数から始まる１つのプログラムに含まれる処理を機能単位で区分したものであり、例えば、Ｍａｉｎ関数から呼ばれる関数、サブルーチンなどが相当する。また、外部割り込みにより実行されるプログラムもタスクである。
【００３９】
本実施形態では、例えば図のタスクＢが異常判定処理のタスクであるとして説明する。コア１及びコア２のいずれもタスクＢを実行するが、完全に同一タイミングで実行することはできない。これは、コア２はコア１のタスクＢの処理結果を利用するためである。このため、コア２は、コア１がタスクＢの実行を開始してから、少なくともやや遅れてタスクＢを実行する必要がある。このようなタスクのスケジューリングは、ＯＳが提供するスケジューラにより行われる。
【００４０】
図５（ｂ）はタスクのスケジューリングを説明するための図の一例である。タスクは一般に、休止状態、実行可能状態、実行状態、及び、待ち状態の各状態を経る。休止状態は生成直後又は実行が完了したタスクの状態である。実行状態は、コアにより現在、実行されているタスクの状態をいう。実行状態のタスクはコアの数以下しか存在しない。実行可能状態は、周辺機器の入出力などが完了し、実行の準備が整ったタスクの状態をいう。実行可能状態のタスクは、コアが実行状態のタスクを終了させれば（コアが空けば）コアに割り当てられる（ディスパッチされる）。待ち状態は、周辺機器が入出力を完了させるなど、実行に必要な条件が整うまで待機しているタスクの状態をいう。
【００４１】
例えば、各タスクは、プログラムのシステムコールにより生成され休止状態になり、システムコールにより休止状態から実行可能状態になる。タスクが生成されると、スケジューラ（又はＯＳ）はタスクの状態等をＴＣＢ（Task  Control  Block）に登録し、以降はＴＣＢに基づきタスクを管理する。
【００４２】
ＴＣＢには、タスク識別番号、タスクの優先度、タスクの現在の状態、タスクの開始アドレスやスタック領域のアドレスなどが登録されている。タスクの優先度は予めプログラムに記述されている。タスクの識別番号、タスクの現在の状態、タスクの開始アドレスやスタック領域のアドレスはＯＳが登録する。
【００４３】
ここで、マルチコアのプロセッサ１１のプログラム実行態様が、各コアのＯＳとタスクの実行形態により分類されることが知られている。このプログラム実行態様には、コアに特定のＯＳとタスクを割り当てるＡＭＰ（Asymmetric  Multiprocessing）」と、各コアが共通のＯＳを実行しコアとタスクの関係が動的に変動しうるＳＭＰ（Symmetric  Multi-processing）」、ＡＭＰとＳＭＰの双方の性質をもつＢＭＰ（Bound  Multiprocessing）がある。
【００４４】
ＡＭＰではシングルコアと同様に、スケジューラはコア毎に用意され、ＳＭＰでは複数のコアに１つ用意される。ＡＭＰでは、それぞれのコアで固有のタスクが動作するため、スケジューラは１つのコアだけをスケジューリングすればよい。ＳＭＰではコアが実行するタスクが固定でなく動的に切り換えることができるため、スケジューラはコア１，２に対し実行可能状態のタスクを割り当てる。本実施形態では、コア１，２が実行タイミングをずらしてタスクＢを実行するので、ＳＭＰ又はＢＭＰの方がスケジューリングが容易である。しかし、プロセッサ１１がＡＭＰで動作した場合でも、コア２のスケジューラがコア１によるタスクＢの実行タイミングを監視するなどして、コア１とコア２が適切なタイミングでそれぞれタスクＢを実行することも可能である。
【００４５】
スケジューラは、所定の規則に従って、実行可能状態のタスクからコア１又はコア２に割り当てるタスクを決定する。例えば、優先度の高い順に割り当てる場合、スケジューラは、実行可能状態のタスクから最も優先度の高いタスクを、コア１又はコア２に割り当てる。最も優先度の高いタスクが複数ある場合は、より早く実行可能状態になったタスクを優先する。
【００４６】
タスクＢは、例えば、タイマ割込みにより定期的に生成又は生成・起動される。また、タスクＢはコア１とコア２がそれぞれ実行できるように、ある時間間隔をおいて２つ起動される。または、コア１がタスクＢの実行途中又は実行完了時に、コア２が実行するためのタスクＢを生成・起動してもよい。
【００４７】
そして、スケジューラは、タスクＢをコア１とコア２の順に交互に割り当てる。これにより、コア１がタスクＢを実行した後、コア２がタスクＢを実行できる。ある時間間隔は、コア１が少なくとも演算用データをＲＡＭ１４に書き込むために必要な時間、又は、演算用データ及び比較用データをＲＡＭ１４に書き込むために必要な時間である。したがって、この時間間隔があいていれば、コア１とコア２は並行してタスクＢを実行できる。
【００４８】
なお、定期的に異常判定処理が実行されるのであれば、スケジューラがコア１，２に異常判定処理を割り当てるタイミングを厳密に制御しなくても、いずれは、コア１の後にコア２が異常判定処理を実行する状況が得られる。しかし、コア１が異常判定処理を実行してからコア２が異常判定処理を実行するまでに、コア１の別のタスクがＲＡＭ１４の演算用データや比較用データを書き換えるおそれがある。このため、好ましくは、コア１が異常判定処理を実行した後、他のタスクを実行するまでに，コア２に異常判定処理を割り当てる。
【００４９】
なお、コア１及びコア２がタスクＢの実行を終了すると、タスクＢは休止状態になるか又は消滅し、次回の処理タイミングになると生成、又は、生成・起動される。
【００５０】
図６は、コア１又はコア２が実行する異常判定処理（タスクＢ）の機能ブロック図の一例を示す。コア１とコア２で機能ブロックは同一である。異常判定処理は、データ演算部３１、データ比較部３６、異常処理部３３、データ書き込み部３４、データ読み出し部３５、及び、データ保持部３２を有する。
【００５１】
データ書き込み部３４は、上記のような命令を使用して演算用データ及び比較用データをＲＡＭ１４に書き込む。
ST  Gr0,  @Gr1
演算用データを書き込む際、Gr0には、異常判定処理のプログラムに記述されている演算用データが格納されており、Gr1には上述した領域２のＲＡＭ１４のアドレス（図１のアドレスＡが相当し、以下「演算データ記憶アドレス」という）が格納されている。
【００５２】
また、比較用データをＲＡＭ１４に書き込む際、Gr0には、データ演算部３１が演算用データを用いて演算することで生成した比較用データが格納されている。Gr1には上述した領域２のＲＡＭ１４のアドレス（図１のアドレスＢが相当し、以下「比較データ記憶アドレス」という）が格納されている。
【００５３】
データ読み出し部３５は、演算用データ及び比較用データをＲＡＭ１４から読み出す。
LD  @Gr1，Gr0
この命令は、レジスタGr1に格納されているＲＡＭ１４のアドレスから読み出したデータを、レジスタGr0に格納するというものである。演算用データを読み出す際、Gr1にはST命令で使用した演算データ記憶アドレスが格納されている。よって、Gr0には演算用データが記憶される。比較用データを読み出す際、Gr1にはST命令で使用した比較データ記憶アドレスが格納されている。よって、Gr0には比較用データが記憶される。
【００５４】
データ演算部３１は、演算用データに予め定められた演算Ｆ（ｘ）を施す。演算Ｆ（ｘ）の内容は、コア１及びコア２のＡＬＵが実装する、算術シフト、論理シフト、加算器、乗算器、除算器等が作動するように定められている。こうすることで、ＡＬＵに一部でも異常があれば検出しやすくなる。
【００５５】
データ演算部３１が行った演算結果は比較用データとして、データ書き込み部３４によりＲＡＭ１４に書き込まれると共に、データ保持部３２が保持する。保持するのは、データ読み出し部３５がＲＡＭ１４から読み出した比較用データとの比較のためである。したがって、保持とは、データ読み出し部３５による読み出しや不図示の他の処理により破壊されなければよい。C言語などの高級言語によるプログラムの記述上、演算結果は戻り値という変数に格納されているので、保持のための特別な記述は不要である。ニーモニックで表せば、演算結果をGr2などの汎用レジスタに退避しておく記述や、スタック領域に記憶する記述で表すことができる。
MOV  Gr0，Gr2  
PUSH  Gr0  
データ比較部３６は、データ保持部３２が保持する比較用データと、データ読み出し部３５がＲＡＭ１４から読み出した比較用データを比較する。高級言語によるプログラムの記述では、適宜、２つの変数を比較するための命令が用意されている。データ保持部３２が保持する比較用データがGr2に記憶され、データ読み出し部３５が、ＲＡＭ１４から読み出した比較用データをGr0に格納した場合、ニーモニックでは以下のように表すことができる。
CMP  Gr0，Gr2
比較結果は、ステータスフラグに反映される。
【００５６】
異常処理部３３は、データ保持部３２が保持する比較用データと、データ読み出し部３５がＲＡＭ１４から読み出した比較用データが一致しない場合、異常処理を行う。ＭＰＵ２０が上記のアクセス許否情報２３を適用する場合、コア１が異常判定処理（タスクB）を実行した時点で、コア１のデータ比較部３６が不一致を検出することはないとしてよい。
【００５７】
これに対し、コア２のデータ比較部３６は不一致を検出することがあるが、不一致になるのは、コア１に異常がある場合とコア２に異常がある場合の２つの場合がある。このため、不一致の場合、データ比較部３６はさらに、定数として予め有している期待値データと、データ保持部３２が保持している比較用データを比較することが有効である。期待値データは、正常なコアが演算用データに演算F（ｘ）を施して得られるデータである。
・期待値データとデータ保持部３２が保持している比較用データが一致する場合、コア１に異常があると判定する。
・期待値データとデータ保持部３２が保持している比較用データが一致しない場合、少なくともコア２に異常があるが、コア１とコア２の両方に異常がある可能性が残る。
【００５８】
このため、期待値データとデータ読み出し部３５が読み出した比較用データ（コア１の演算結果）を比較する。
【００５９】
・比較結果が一致すれば、コア２に異常があることを確定できる。
【００６０】
・比較結果が不一致の場合、コア１及びコア２の両方に異常があることを確定できる。
(i)  コア１に異常があると判定した場合、監視用のコア（コア２）が被監視コア（コア１）を監視した態様になるので、異常処理は容易である。コア２の異常処理部３３は例えば、以下のようなフェールセーフ処理を行う。
【００６１】
(a)  コア１をリセットする。復帰しても同様の異常が検出される場合、コア１への電源を遮断し待機しているコアｎを起動させ、コア１のタスクをコアｎに割り当てる。このようなコアｎがない場合、コア１のタスクをコア２に割り当てる。コア３など動作している他のコアがあればコア１が停止したことを通知する。
【００６２】
(b)  車載ネットワークを介して他のＥＣＵに通知する。他のＥＣＵは、異常検出を記録したり、警告ランプを点灯するなどの処理を行う。
(ii)  コア２に異常があると判定した場合、監視用のコア（コア２）がコア２自身を監視した態様になるので、コア２の異常処理部３３は例えば、コア１又は待機しているコアｎを起動させこれらのコアに異常を通知する。これにより、コア１又はコアｎはコア２と同様のフェールセーフ処理が可能になる。
(iii)  コア１とコア２の両方に異常があると判定した場合、マイコン全体をリセットする。または、コアｍ、ｎなど待機しているコア、又は、コア３，４など他に動作しているコアがあればコア１，２を停止させ、これらのコアにコア１，２のタスクを割り当てる。
【００６３】
なお、例外処理部３７は、例外ハンドラや例外処理ルーチンが相当し、例外発生の次の命令（ＳＴ命令の次の命令）に戻す処理を行う。具体的には、例外発生によりコンテキストを退避し、コンテキストを復帰させる。または、例外による割込みをマスクする処理を行う。
【００６４】
〔動作手順〕
図７は、コア１，２が異常判定処理を行う手順の一例を示すフローチャート図である。コア１とコア２の異常判定処理の手順は同一だが、説明のためそれぞれを別に示している。コア１の処理から説明する。
S10-1：まず、データ書き込み部３４は演算用データをアドレスＡに書き込む。これにより、コア１はコア２に演算用データを渡すことができる。なお、コア１はアクセス許否情報２３により書き込みが許可されている。
S20-1：データ読み出し部３５は演算用データをアドレスＡから読み出す。この処理は、コア１にとっては不要だがコア２に必要なため、異常判定処理に含まれている。こうすることで、コア１とコア２が実行する異常判定処理を同一にできる。
S30-1：データ演算部３１は、読み出した演算用データを使って演算を実行して比較用データを生成する。
S40-1：データ保持部３２が比較用データを保持しておく。
S50-1：データ書き込み部３４は、比較用データをアドレスＢに書き込む。これにより、コア１はコア２に演算結果である比較用データを渡すことができる。
S60-1：データ読み出し部３５は比較用データをアドレスＢから読み出す。この処理は、コア１にとっては不要だがコア２に必要なため、異常判定処理に含まれている。
S70-1：データ比較部３６はアドレスＢから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。
S80-1：一致しない場合、異常処理部３３はフェールセーフ処理を行う。一致する場合は、異常判定処理は終了する。
【００６５】
次に、コア２に異常判定処理（タスクＢ）が割り当てられる。
S10-2：まず、データ書き込み部３４は演算用データをアドレスＡに書き込む。コア２はアクセス許否情報２３により書き込みが許可されていないので例外が発生するが、その後、処理はS20-2に戻る。
S20-2：データ読み出し部３５は演算用データをアドレスＡから読み出す。これにより、コア１とコア２が同じ演算用データを用いて演算することができる。
S30-2：データ演算部３１は、読み出した演算用データを使って演算を実行して比較用データを生成する。
S40-2：データ保持部３２が比較用データを保持しておく。
S50-2：データ書き込み部３４は、比較用データをアドレスＢに書き込む。コア２はＭＰＵ２０により書き込みが許可されていないので例外が発生するが、その後、処理はS60-2に戻る。
S60-2：データ読み出し部３５は比較用データをアドレスＢから読み出す。これにより、コア２はコア１の演算結果を取得できる。
S70-2：データ比較部３６はアドレスＢから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。
S80-2：一致しない場合、異常処理部３３はフェールセーフ処理を行う。一致する場合は、異常判定処理は終了する。
【００６６】
以上説明したように、本実施形態のマイコンは、コアが比較処理を行うので、特定の比較回路などを必要としない。また、コア１，コア２は、異常判定処理以外は制御タスクを実行できるので、ロックステップＣＰＵなどのように１つのコアが異常監視に占有されない。
【００６７】
また、同一の異常判定処理をコア１，２が実行しても、ＭＰＵ２０の機能を利用してコア２の書き込みを禁止すること及びコア１が演算用データをＲＡＭ１４に書き込みコア２がそれを読み出すことにより、コア１，２が同じ演算用データを使用して演算できる。また、同様に、コア１が比較用データをＲＡＭ１４に書き込みコア２がそれを読み出すため、コア２はコア１の演算結果と自コアの演算結果を比較できる。
【００６８】
また、ＭＰＵ２０の機能を利用してコア２の書き込みを禁止すること、及び、ＲＡＭへの書き込みや読み出しなど両方のコア１，２に必要な処理が異常判定処理に記述されていることにより、コア１とコア２が全く同じ異常判定処理を実行できプログラムサイズ（ＲＯＭ容量）を節約できる。
【００６９】
また、本実施形態では、説明のため、タスクＢを異常判定処理とした。しかし、制御タスクに、演算用データと演算処理があれば、ＲＡＭ１４への書き込み、読み出し、及び、比較処理を加えるだけで、異常判定処理となるので、制御タスクを利用した異常判定処理も可能である。
【００７０】
〔その他の例〕
コアが３つ以上ある場合も同様に異常判定することができる。例えば、コア２を監視用のコアとする。この場合、ＭＰＵ２０のアクセス許否情報２３には、コア１とコア３〜ｎのリード及びライトを許可するがコア２のライトを禁止するというアクセス制限が記述される。
【００７１】
スケジューラは、コア１に異常判定処理を割り当てた後、コア２に異常判定処理を割り当てる。これにより、コア１又はコア２の異常を検出できる。また、スケジューラはコア３に異常判定処理を割り当てた後、コア２に異常判定処理を割り当てる。これにより、コア３又はコア２の異常を検出できる。
【００７２】
スケジューラは同様の処理をコアｎに達するまで繰り返す。このように、複数のコアのうち任意の１つのコアに異常判定処理を割り当てた後、ＭＰＵ２０によりライトが禁止されたコア２に異常判定処理を割り当てれば、コアが３つ以上あっても各コアの異常を検出できる。
【００７３】
また、上記のアクセス許否情報２３では固定的に、コア１はリード及びライトが許可され、コア２はライトが禁止されていることが定めらている。しかしながら、アクセス許否情報２３におけるコア１とコア２のアクセス許否を逆にすることもできる。例えば、マイコンの起動時にＯＳがコア１のアクセス許否情報２３をコア２に、コア２のアクセス許否情報２３をコア１に書き換えることで、コア１を監視用のコアとすることができる。この場合、スケジューラは、コア２に異常判定処理を割り当てた後に、コア１に異常判定処理を割り当てれば、コア１がコア２を監視することができる。
【００７４】
３つ以上のコアがある場合も同様で、マイコンの起動時に例えばＯＳがアクセス許否情報２３を書き換えることで監視用のコアを切り換えることができる。
【符号の説明】
【００７５】
１１      プロセッサ
１２      ＲＯＭ
１４      ＲＡＭ
２０      ＭＰＵ（Memory  Protection  Unit）
３１      データ演算部
３２      データ保持部
３４      データ書き込み部
３５      データ読み出し部
３６      データ比較部
１００    マイコン
【図１】
0005699896.tif 000002
【図２】
0005699896.tif 000003
【図３】
0005699896.tif 000004
【図４】
0005699896.tif 000005
【図５】
0005699896.tif 000006
【図６】
0005699896.tif 000007
【図７】
0005699896.tif 000008