"複数のCPUと、各CPUがアクセス可能な記憶手段と、を有する情報処理装置であって、各CPUが共通に読み出す異常検出プログラムを記憶したプログラム記憶手段と、前記記憶手段への書き込みをCPU毎に禁止可能なアクセス制御手段と、演算用データを前記記憶手段に書き込むデータ書き込み手段と、前記記憶手段から演算用データを読み出すデータ読み出し手段と、前記データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成するデータ演算手段と、前記データ書き込み手段が前記記憶手段に書き込み前記データ読み出し手段が読み出した演算結果データと、前記データ演算手段が生成した演算結果データを比較する比較手段と、を有することを特徴とする情報処理装置。第1のCPUの前記データ書き込み手段が演算用データを前記記憶手段に書き込み、第1のCPUの前記データ読み出し手段が前記記憶手段から演算用データを読み出し、第1のCPUの前記データ演算手段が、データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成し、第1のCPUの前記データ書き込み手段が演算用データを前記記憶手段に書き込み、第2のCPUの前記データ読み出し手段が前記記憶手段から演算用データを読み出し、第2のCPUの前記データ演算手段が、データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成し、第2のCPUの前記データ読み出し手段が前記記憶手段から演算結果データを読み出し、第2のCPUの前記比較手段が、第2のCPUの前記データ読み出し手段が読み出した演算結果データと、第2のCPUの前記データ演算手段が生成した演算結果データを比較する、ことを特徴とする請求項1記載の情報処理装置。第2のCPUの前記比較手段は、第2のCPUの前記データ読み出し手段が読み出した演算結果データと、第2のCPUの前記データ演算手段が生成した演算結果データが一致しない場合、さらに、正常な演算結果である期待値データと第2のCPUの前記データ演算手段が生成した演算結果データ、又は、前記期待値データと第2のCPUの前記データ読み出し手段が前記記憶手段から読み出した演算結果データを比較し、第1のCPU又は第2のCPUのどちらに異常があるかを判定する、ことを特徴とする請求項1又は2いずれか1項記載の情報処理装置。前記アクセス制御手段は、前記記憶手段からの読み出し、又は、前記記憶手段への書き込みの許否をCPU毎に規定したアクセス許否情報を有し、読み書きが許可されたCPUと書き込みが禁止されたCPUが切り換わるように、アクセス許否情報を書き換える、ことを特徴とする請求項1~3いずれか1項記載の情報処理装置。複数のCPUと、各CPUがアクセス可能な記憶手段と、各CPUが共通に読み出す異常検出プログラムを記憶したプログラム記憶手段と、を有する情報処理装置の異常判定方法であって、データ書き込み手段が、演算用データの前記記憶手段への書き込みを試みるステップと、アクセス制御手段が、書き込みを試みたCPUに基づき演算用データの前記記憶手段への書き込みを許可するか否を判定するステップと、データ読み出し手段が、前記記憶手段から演算用データを読み出すステップと、前記データ演算手段が、データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成するステップと、データ書き込み手段が、演算結果データの前記記憶手段への書き込みを試みるステップと、アクセス制御手段が、書き込みを試みたCPUに基づき演算結果データの前記記憶手段への書き込みを許可するか否を判定するステップと、データ読み出し手段が、前記記憶手段から演算結果データを読み出すステップと、比較手段が、前記データ読み出し手段が読み出した演算結果データと、前記データ演算手段が生成した演算結果データを比較するステップと、を有する異常判定方法。しかしながら、特許文献1に開示されたコアの監視方法では、専用の比較手段が必要になるという問題がある。これは複数のコアの処理結果を比較するには、各コアの処理結果をコアの外部に取り出す必要があるためである。複数のコアのいずれかが他のコアの処理結果と自コアの処理結果を比較すれば、比較回路が不要になるが、比較処理を行うコアは他のコアの処理結果を読み出すなどの余分の処理が必要になってしまう。また、この場合、各コアが使用するRAM領域等が異なるため、同じ入力データを使用し同じ処理を行ったはずでも、処理結果が一致しない場合が生じる可能性がある。本発明は、上記課題に鑑み、比較回路を用いることなく複数のCPUの動作を監視可能な情報処理装置を提供することを目的とする。本発明は、複数のCPUと、各CPUがアクセス可能な記憶手段と、を有する情報処理装置であって、各CPUが共通に読み出す異常検出プログラムを記憶したプログラム記憶手段と、前記記憶手段への書き込みをCPU毎に禁止可能なアクセス制御手段と、演算用データを前記記憶手段に書き込むデータ書き込み手段と、前記記憶手段から演算用データを読み出すデータ読み出し手段と、前記データ読み出し手段が読み出した演算用データに演算を施し演算結果データを生成するデータ演算手段と、前記データ書き込み手段が前記記憶手段に書き込み前記データ読み出し手段が読み出した演算結果データと、前記データ演算手段が生成した演算結果データを比較する比較手段と、を有することを特徴とする。比較回路を用いることなく複数のCPUの動作を監視可能な情報処理装置を提供することができる。以下、本発明を実施するための形態について図面を参照しながら説明する。図1は、本実施形態のマイコンの概略的な特徴を説明する図の一例である。CPUコア1とCPUコア2は以下、CPUコアを単にコアという、異常判定処理を異なるタイミングで実行する。この異常判定処理はコア1,2から共通に実行されるタスクである。また、多くのマイコンは、MPUMemoryProtectionUnitと呼ばれる回路を有している。MPUはコア1,2のRAMへのアクセスを制御する。ここでは、MPUは以下のようにアクセス制御を行う。コア1がRAMのアドレスA、アドレスBにライト/リードすることを許可する。コア2がRAMのアドレスA、アドレスBからリードすることは許可するが、ライトすることを禁止する。A.異常判定処理を開始したコア1は以下のように動作する。演算用データをアドレスAに書き込む。演算用データをアドレスAから読み出す。演算用データを使って演算を実行して比較用データを生成する。比較用データはコア1が保持しておく。比較用データをアドレスBに書き込む。比較用データをアドレスBから読み出す。アドレスBから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。コア1が実行する異常判定処理では、との比較用データが元々同じものなので、書き込みエラー等が生じない限り、2つの比較用データは一致する。B.異常判定処理を開始したコア2は以下のように動作する。演算用データをアドレスAに書き込む。しかし、コア2はアドレスAに演算用データを書き込むことができない。演算用データをアドレスAから読み出す。演算用データを使って演算を実行して比較用データを生成する。比較用データはコア2が保持しておく。比較用データをアドレスBに書き込む。しかし、コア2はアドレスBに比較用データを書き込むことができない。比較用データをアドレスBから読み出す。アドレスBから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。つまりコア2は、において演算用データを書き込めないので、においてコア2はコア1と同じ演算用データを用いて演算を実行する。そして、においてコア2は比較用データを書き込めないので、においてコア2は、コア1が実行してアドレスBに書き込んだ比較用データと、コア2が演算を実行して生成した比較用データを比較する。したがって、コア2は、コア1が比較用データを演算するために使用した演算用データを使用して比較用データを生成し、コア1が生成した比較用データと比較することができる。演算用データの同一性が保証されるので、比較用データの不一致からコア1又はコア2の異常を高い確度で検出できる。また、異常判定処理は全く同じ処理なので、ROMには1つの異常判定処理のプログラムを記憶しておけばよい。さらに、異常判定処理の上記のプロセスは、制御用のプログラムでも含まれうるので、制御用のプログラムにいくつかの処理を加えるだけで異常判定処理が可能となる。構成例図2は、車両に搭載されるマイコンのハードウェア構成図の一例である。マイコン100は、ECUElectronicControlUnitに搭載されることが想定されているがその用途は車両に限定されない。車載されるECUには、その主要な機能により、エンジンECU、ブレーキECU、ボディECU、ナビゲーションECUAV情報処理ECU、ゲートウェイECU等の種類がある。本実施例のマイコン100はECUの機能の違いに影響されず搭載されることが可能である。また、複数の機能が1つに統合されたECUにマイコン100を搭載してもよい。マイコン100は、メインバス21に接続されたプロセッサ11、ROM12、INTC13、RAM14、DMAC15、並びに、I/Oブリッジ16を有し、I/Oブリッジ16には周辺バス22を介してADCAnalogtoDigitalConverter17及びCANコントローラ18が接続されている。プロセッサ11は少なくとも2つ以上のコア1~nを有する。各コア1~nは一般的な演算機能例えば、ALU等の演算装置、命令バッファ、命令デコーダ、レジスタセット等を有している。1つのチップに複数のコア1~nを有するプロセッサでなく、CPUが独立にメインバス21に接続されていてもよい。MPU20はプロセッサ内に配置されているが、単独で搭載されてもよい。また、MPU20はMMUMemoryManagementUnitとして実装されることも多い。MMUはアドレス変換機能、メモリ保護機能、キャッシュ管理機能、及び、バス調停機能等を有し、このメモリ保護機能がMPU20の機能に相当する。ROM12はフラッシュメモリなどの不揮発メモリであり、プロセッサ11が実行するプログラム30や初期値、パラメータ等を記憶している。INTC13はIRQやその他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してプロセッサ11に通知する。これによりプロセッサ11は、割り込みした周辺機器に応じて決まったアドレスの命令をROM12から読み出して処理を実行する。RAM14は、プロセッサ11がプログラム30を実行するための作業領域である。プロセッサ11はROM12からプログラム30を読み込み、また、必要であればデータバスを介してRAM14からデータを読み出しプログラム30を実行する。DMAC15は、プロセッサ11からの指示によりRAM14からI/Oブリッジ16を介して周辺機器にデータを送信する。また、周辺機器から割り込みされたプロセッサ11から指示を受けて、I/Oブリッジ16を介して周辺機器からデータを受け取り、RAM14に書き込む。I/Oブリッジ16は、メインバス21と周辺バス22との周波数の違いを吸収し、メインバス側の回路と周辺バス側の回路のデータを互いに受け渡す。I/Oブリッジ16は、マルチプレクサやブリッジ回路などであり、チャネル毎に、ADC17、及び、CANコントローラ18とそれぞれ接続されており、これらの周辺機器とデータを送受信する。ADC17は、各種のセンサが検出したアナログ信号をデジタル信号に変換する。ADC17は変換の終了を、INTC13を介してプロセッサ11に通知する。CANコントローラ18は、車載ネットワークを介して接続された他のECUと通信するための通信装置である。CANコントローラ18は、プロセッサ11から通信データの送信要求を受け付けるとフレームの各フィールドにCANIDやデータを格納しCANバスに出力する。また、CANコントローラ18は、受信すべきCANIDの通信データを検出するとそれを取り込みINTC13を介してプロセッサ11に割り込んで通知する。図3は、MPU20によるRAM14へのアクセス制御を説明する図の一例である。コア1,コア2は、アドレス線41、R/W選択信号線42、及び、チップ識別信号線43などを介してMPU20と接続されている。MPU20は、アドレス線41、R/W選択信号線42、及び、R/W許否信号線44などを介してRAM14と接続されている。また、RAM14はデータ線45を介してコア1、コア2と接続されている。コア1又はコア2がRAM14へアクセス要求する際、例えば、不図示のアービタがラウンドロビン方式、固定優先順位方式、又は、重み付けラウンドロビン方式などに基づき、コア1又はコア2にアクセス権を与える。アクセス権を取得したコア1又はコア2は、チップ識別信号線をアサートしてMPU20と接続する。そして、リード要求かライト要求かをR/W選択信号線によりMPU20に通知すると共に、アドレス線によりアドレスを通知する。MPU20がMMUの一機能として搭載されている場合、MMUは仮想アドレスを物理アドレスに変換するが、本実施形態ではアドレスの変換の有無は問わない。MPU20は、チップ識別信号線で接続されたコア1又はコア2のアドレス線及びR/W選択信号線をRAM14側にパススルーして、アドレスとリード要求/ライト要求をRAM14に出力する。RAM14からデータのリード又はRAM14へのライトが許可されるか否かは、R/W許否信号線により制御される。MPU20はアクセス許否情報23を有している。アクセス許否情報23は、OSやプログラムがマイコンの起動時にMPU20のレジスタに記憶させる。アクセス許否情報23には、RAM14の領域単位に、各コアがリード可能か否か、ライト可能か否かが設定されている。MPU20は、アクセス許否情報23を参照して、アクセス要求したコアがアドレスの示す領域にリード又はライト可能か否かを判定する。コア1又はコア2がリード要求し、リードが禁止されている場合、MPU20はR/W許否信号線によりリード禁止をRAM14に出力する。この場合、コア1又はコア2はRAM14からデータを読み出すことができない。コア1又はコア2がライト要求し、ライトが禁止されている場合、MPU20はR/W許否信号線によりライト禁止をRAM14に出力する。この場合、コア1又はコア2はRAM14にデータを書き込むことができない。図4は、アクセス許否情報23の一例を示す図である。アクセス許否情報23はコア毎に設けられている。コア毎かつタスク毎に規定することも可能である。アクセス許否情報23は、領域番号、アドレス、サイズ、リード、ライト、モードの各項目を有する。実際にはMPU20にこのようなラベルが付与されているわけではなく、MPU20のレジスタ番号やレジスタ内のbit位置により格納される情報が予め定められている。領域番号は、RAM14の一部又は全体をいくつかの領域に区分した場合に領域を識別するための識別情報である。アドレスは領域が始まるアドレスを示し、サイズは領域の容量を示す。リードはその領域のリードが許可されているか否かを示し、ライトはその領域へのライトが許可されているか否かを示す。モードは、コア1,2の動作モードであり、本実施形態では各コアは特権モードとユーザモードの2つの動作モードを有している。簡単には、特権モードは、コアがOSを実行する動作モードであり、ユーザモードは、コアがアプリケーションを実行する動作モードである。一般に、OSのシステム領域にアクセスできるのはOSだけである。図4では、領域1をシステム領域としたため、領域1は特権モードでのみリード及びライトが許可されている。コア1のアクセス許否情報23とコア2のアクセス許否情報23を比較すると、コア2は、領域2においてユーザモードのライトが禁止されている。すなわち、コア2はユーザモードにおいて、領域2にデータを書き込むことができない。したがって、アクセス許否情報23により、コア1には領域2にリード及びライトすることを許可し、コア2には領域2からのリードのみを許可する、というアクセス制御が可能になる。例えば、コア1及びコア2がRAM14にデータを書き込むための命令は以下のようになる。STGr0Gr1この命令は、レジスタGr0のデータをレジスタGr1に格納されているRAM14のアドレス図1ではアドレスA,及び、アドレスBが相当するに書き込むというものであるはポインタを意味する。開発者等は、レジスタGr1に格納されているRAM14のアドレスを把握しておき、このアドレスが含まれる領域のアクセス許否情報23を図4の領域2のように記述する。これにより、コア1はリード/ライト可能だがコア2はリードのみが可能な領域を、異常判定処理により使用されるRAM14の領域として確保することができる。なお、MPU20がアクセス許否情報23によりコアのアクセスリード又はライトのどちらの場合でもを拒否する場合、一般には例外が発生する。つまりMPU20は、アクセスを拒否するコアに対し例外の発生を知らせる割込みする。コアはこの割込みに対し予め定められた例外ハンドラや例外処理ルーチンを実行するが、本実施形態ではこの例外は想定されている例外なので、例外ハンドラがすぐに元の異常判定処理に戻る処理を実行すればよい。また、この例外による割込みをマスクしておいてもよい。また、MPU20がコア2と接続された場合に、例外の発生をコア2に通知しないようにしてもよい。例えば、MPU20とコアを接続する例外の割込み線にスイッチを配置し、コア2と接続された場合に、コア2又はMPU20がスイッチをオフにする。タスクスケジュール図5aはコア1とコア2が実行するタスクの順番を模式的に説明する図の一例である。タスクとは、Main関数から始まる1つのプログラムに含まれる処理を機能単位で区分したものであり、例えば、Main関数から呼ばれる関数、サブルーチンなどが相当する。また、外部割り込みにより実行されるプログラムもタスクである。本実施形態では、例えば図のタスクBが異常判定処理のタスクであるとして説明する。コア1及びコア2のいずれもタスクBを実行するが、完全に同一タイミングで実行することはできない。これは、コア2はコア1のタスクBの処理結果を利用するためである。このため、コア2は、コア1がタスクBの実行を開始してから、少なくともやや遅れてタスクBを実行する必要がある。このようなタスクのスケジューリングは、OSが提供するスケジューラにより行われる。図5bはタスクのスケジューリングを説明するための図の一例である。タスクは一般に、休止状態、実行可能状態、実行状態、及び、待ち状態の各状態を経る。休止状態は生成直後又は実行が完了したタスクの状態である。実行状態は、コアにより現在、実行されているタスクの状態をいう。実行状態のタスクはコアの数以下しか存在しない。実行可能状態は、周辺機器の入出力などが完了し、実行の準備が整ったタスクの状態をいう。実行可能状態のタスクは、コアが実行状態のタスクを終了させればコアが空けばコアに割り当てられるディスパッチされる。待ち状態は、周辺機器が入出力を完了させるなど、実行に必要な条件が整うまで待機しているタスクの状態をいう。例えば、各タスクは、プログラムのシステムコールにより生成され休止状態になり、システムコールにより休止状態から実行可能状態になる。タスクが生成されると、スケジューラ又はOSはタスクの状態等をTCBTaskControlBlockに登録し、以降はTCBに基づきタスクを管理する。TCBには、タスク識別番号、タスクの優先度、タスクの現在の状態、タスクの開始アドレスやスタック領域のアドレスなどが登録されている。タスクの優先度は予めプログラムに記述されている。タスクの識別番号、タスクの現在の状態、タスクの開始アドレスやスタック領域のアドレスはOSが登録する。ここで、マルチコアのプロセッサ11のプログラム実行態様が、各コアのOSとタスクの実行形態により分類されることが知られている。このプログラム実行態様には、コアに特定のOSとタスクを割り当てるAMPAsymmetricMultiprocessingと、各コアが共通のOSを実行しコアとタスクの関係が動的に変動しうるSMPSymmetricMultiprocessing、AMPとSMPの双方の性質をもつBMPBoundMultiprocessingがある。AMPではシングルコアと同様に、スケジューラはコア毎に用意され、SMPでは複数のコアに1つ用意される。AMPでは、それぞれのコアで固有のタスクが動作するため、スケジューラは1つのコアだけをスケジューリングすればよい。SMPではコアが実行するタスクが固定でなく動的に切り換えることができるため、スケジューラはコア1,2に対し実行可能状態のタスクを割り当てる。本実施形態では、コア1,2が実行タイミングをずらしてタスクBを実行するので、SMP又はBMPの方がスケジューリングが容易である。しかし、プロセッサ11がAMPで動作した場合でも、コア2のスケジューラがコア1によるタスクBの実行タイミングを監視するなどして、コア1とコア2が適切なタイミングでそれぞれタスクBを実行することも可能である。スケジューラは、所定の規則に従って、実行可能状態のタスクからコア1又はコア2に割り当てるタスクを決定する。例えば、優先度の高い順に割り当てる場合、スケジューラは、実行可能状態のタスクから最も優先度の高いタスクを、コア1又はコア2に割り当てる。最も優先度の高いタスクが複数ある場合は、より早く実行可能状態になったタスクを優先する。タスクBは、例えば、タイマ割込みにより定期的に生成又は生成起動される。また、タスクBはコア1とコア2がそれぞれ実行できるように、ある時間間隔をおいて2つ起動される。または、コア1がタスクBの実行途中又は実行完了時に、コア2が実行するためのタスクBを生成起動してもよい。そして、スケジューラは、タスクBをコア1とコア2の順に交互に割り当てる。これにより、コア1がタスクBを実行した後、コア2がタスクBを実行できる。ある時間間隔は、コア1が少なくとも演算用データをRAM14に書き込むために必要な時間、又は、演算用データ及び比較用データをRAM14に書き込むために必要な時間である。したがって、この時間間隔があいていれば、コア1とコア2は並行してタスクBを実行できる。なお、定期的に異常判定処理が実行されるのであれば、スケジューラがコア1,2に異常判定処理を割り当てるタイミングを厳密に制御しなくても、いずれは、コア1の後にコア2が異常判定処理を実行する状況が得られる。しかし、コア1が異常判定処理を実行してからコア2が異常判定処理を実行するまでに、コア1の別のタスクがRAM14の演算用データや比較用データを書き換えるおそれがある。このため、好ましくは、コア1が異常判定処理を実行した後、他のタスクを実行するまでに,コア2に異常判定処理を割り当てる。なお、コア1及びコア2がタスクBの実行を終了すると、タスクBは休止状態になるか又は消滅し、次回の処理タイミングになると生成、又は、生成起動される。図6は、コア1又はコア2が実行する異常判定処理タスクBの機能ブロック図の一例を示す。コア1とコア2で機能ブロックは同一である。異常判定処理は、データ演算部31、データ比較部36、異常処理部33、データ書き込み部34、データ読み出し部35、及び、データ保持部32を有する。データ書き込み部34は、上記のような命令を使用して演算用データ及び比較用データをRAM14に書き込む。STGr0Gr1演算用データを書き込む際、Gr0には、異常判定処理のプログラムに記述されている演算用データが格納されており、Gr1には上述した領域2のRAM14のアドレス図1のアドレスAが相当し、以下演算データ記憶アドレスというが格納されている。また、比較用データをRAM14に書き込む際、Gr0には、データ演算部31が演算用データを用いて演算することで生成した比較用データが格納されている。Gr1には上述した領域2のRAM14のアドレス図1のアドレスBが相当し、以下比較データ記憶アドレスというが格納されている。データ読み出し部35は、演算用データ及び比較用データをRAM14から読み出す。LDGr1,Gr0この命令は、レジスタGr1に格納されているRAM14のアドレスから読み出したデータを、レジスタGr0に格納するというものである。演算用データを読み出す際、Gr1にはST命令で使用した演算データ記憶アドレスが格納されている。よって、Gr0には演算用データが記憶される。比較用データを読み出す際、Gr1にはST命令で使用した比較データ記憶アドレスが格納されている。よって、Gr0には比較用データが記憶される。データ演算部31は、演算用データに予め定められた演算Fxを施す。演算Fxの内容は、コア1及びコア2のALUが実装する、算術シフト、論理シフト、加算器、乗算器、除算器等が作動するように定められている。こうすることで、ALUに一部でも異常があれば検出しやすくなる。データ演算部31が行った演算結果は比較用データとして、データ書き込み部34によりRAM14に書き込まれると共に、データ保持部32が保持する。保持するのは、データ読み出し部35がRAM14から読み出した比較用データとの比較のためである。したがって、保持とは、データ読み出し部35による読み出しや不図示の他の処理により破壊されなければよい。C言語などの高級言語によるプログラムの記述上、演算結果は戻り値という変数に格納されているので、保持のための特別な記述は不要である。ニーモニックで表せば、演算結果をGr2などの汎用レジスタに退避しておく記述や、スタック領域に記憶する記述で表すことができる。MOVGr0,Gr2PUSHGr0データ比較部36は、データ保持部32が保持する比較用データと、データ読み出し部35がRAM14から読み出した比較用データを比較する。高級言語によるプログラムの記述では、適宜、2つの変数を比較するための命令が用意されている。データ保持部32が保持する比較用データがGr2に記憶され、データ読み出し部35が、RAM14から読み出した比較用データをGr0に格納した場合、ニーモニックでは以下のように表すことができる。CMPGr0,Gr2比較結果は、ステータスフラグに反映される。異常処理部33は、データ保持部32が保持する比較用データと、データ読み出し部35がRAM14から読み出した比較用データが一致しない場合、異常処理を行う。MPU20が上記のアクセス許否情報23を適用する場合、コア1が異常判定処理タスクBを実行した時点で、コア1のデータ比較部36が不一致を検出することはないとしてよい。これに対し、コア2のデータ比較部36は不一致を検出することがあるが、不一致になるのは、コア1に異常がある場合とコア2に異常がある場合の2つの場合がある。このため、不一致の場合、データ比較部36はさらに、定数として予め有している期待値データと、データ保持部32が保持している比較用データを比較することが有効である。期待値データは、正常なコアが演算用データに演算Fxを施して得られるデータである。期待値データとデータ保持部32が保持している比較用データが一致する場合、コア1に異常があると判定する。期待値データとデータ保持部32が保持している比較用データが一致しない場合、少なくともコア2に異常があるが、コア1とコア2の両方に異常がある可能性が残る。このため、期待値データとデータ読み出し部35が読み出した比較用データコア1の演算結果を比較する。比較結果が一致すれば、コア2に異常があることを確定できる。比較結果が不一致の場合、コア1及びコア2の両方に異常があることを確定できる。コア1に異常があると判定した場合、監視用のコアコア2が被監視コアコア1を監視した態様になるので、異常処理は容易である。コア2の異常処理部33は例えば、以下のようなフェールセーフ処理を行う。コア1をリセットする。復帰しても同様の異常が検出される場合、コア1への電源を遮断し待機しているコアnを起動させ、コア1のタスクをコアnに割り当てる。このようなコアnがない場合、コア1のタスクをコア2に割り当てる。コア3など動作している他のコアがあればコア1が停止したことを通知する。車載ネットワークを介して他のECUに通知する。他のECUは、異常検出を記録したり、警告ランプを点灯するなどの処理を行う。コア2に異常があると判定した場合、監視用のコアコア2がコア2自身を監視した態様になるので、コア2の異常処理部33は例えば、コア1又は待機しているコアnを起動させこれらのコアに異常を通知する。これにより、コア1又はコアnはコア2と同様のフェールセーフ処理が可能になる。コア1とコア2の両方に異常があると判定した場合、マイコン全体をリセットする。または、コアm、nなど待機しているコア、又は、コア3,4など他に動作しているコアがあればコア1,2を停止させ、これらのコアにコア1,2のタスクを割り当てる。なお、例外処理部37は、例外ハンドラや例外処理ルーチンが相当し、例外発生の次の命令ST命令の次の命令に戻す処理を行う。具体的には、例外発生によりコンテキストを退避し、コンテキストを復帰させる。または、例外による割込みをマスクする処理を行う。動作手順図7は、コア1,2が異常判定処理を行う手順の一例を示すフローチャート図である。コア1とコア2の異常判定処理の手順は同一だが、説明のためそれぞれを別に示している。コア1の処理から説明する。S101:まず、データ書き込み部34は演算用データをアドレスAに書き込む。これにより、コア1はコア2に演算用データを渡すことができる。なお、コア1はアクセス許否情報23により書き込みが許可されている。S201:データ読み出し部35は演算用データをアドレスAから読み出す。この処理は、コア1にとっては不要だがコア2に必要なため、異常判定処理に含まれている。こうすることで、コア1とコア2が実行する異常判定処理を同一にできる。S301:データ演算部31は、読み出した演算用データを使って演算を実行して比較用データを生成する。S401:データ保持部32が比較用データを保持しておく。S501:データ書き込み部34は、比較用データをアドレスBに書き込む。これにより、コア1はコア2に演算結果である比較用データを渡すことができる。S601:データ読み出し部35は比較用データをアドレスBから読み出す。この処理は、コア1にとっては不要だがコア2に必要なため、異常判定処理に含まれている。S701:データ比較部36はアドレスBから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。S801:一致しない場合、異常処理部33はフェールセーフ処理を行う。一致する場合は、異常判定処理は終了する。次に、コア2に異常判定処理タスクBが割り当てられる。S102:まず、データ書き込み部34は演算用データをアドレスAに書き込む。コア2はアクセス許否情報23により書き込みが許可されていないので例外が発生するが、その後、処理はS202に戻る。S202:データ読み出し部35は演算用データをアドレスAから読み出す。これにより、コア1とコア2が同じ演算用データを用いて演算することができる。S302:データ演算部31は、読み出した演算用データを使って演算を実行して比較用データを生成する。S402:データ保持部32が比較用データを保持しておく。S502:データ書き込み部34は、比較用データをアドレスBに書き込む。コア2はMPU20により書き込みが許可されていないので例外が発生するが、その後、処理はS602に戻る。S602:データ読み出し部35は比較用データをアドレスBから読み出す。これにより、コア2はコア1の演算結果を取得できる。S702:データ比較部36はアドレスBから読み出した比較用データと、保持している比較用データを比較して、一致するか否かを判定する。S802:一致しない場合、異常処理部33はフェールセーフ処理を行う。一致する場合は、異常判定処理は終了する。以上説明したように、本実施形態のマイコンは、コアが比較処理を行うので、特定の比較回路などを必要としない。また、コア1,コア2は、異常判定処理以外は制御タスクを実行できるので、ロックステップCPUなどのように1つのコアが異常監視に占有されない。また、同一の異常判定処理をコア1,2が実行しても、MPU20の機能を利用してコア2の書き込みを禁止すること及びコア1が演算用データをRAM14に書き込みコア2がそれを読み出すことにより、コア1,2が同じ演算用データを使用して演算できる。また、同様に、コア1が比較用データをRAM14に書き込みコア2がそれを読み出すため、コア2はコア1の演算結果と自コアの演算結果を比較できる。また、MPU20の機能を利用してコア2の書き込みを禁止すること、及び、RAMへの書き込みや読み出しなど両方のコア1,2に必要な処理が異常判定処理に記述されていることにより、コア1とコア2が全く同じ異常判定処理を実行できプログラムサイズROM容量を節約できる。また、本実施形態では、説明のため、タスクBを異常判定処理とした。しかし、制御タスクに、演算用データと演算処理があれば、RAM14への書き込み、読み出し、及び、比較処理を加えるだけで、異常判定処理となるので、制御タスクを利用した異常判定処理も可能である。その他の例コアが3つ以上ある場合も同様に異常判定することができる。例えば、コア2を監視用のコアとする。この場合、MPU20のアクセス許否情報23には、コア1とコア3~nのリード及びライトを許可するがコア2のライトを禁止するというアクセス制限が記述される。スケジューラは、コア1に異常判定処理を割り当てた後、コア2に異常判定処理を割り当てる。これにより、コア1又はコア2の異常を検出できる。また、スケジューラはコア3に異常判定処理を割り当てた後、コア2に異常判定処理を割り当てる。これにより、コア3又はコア2の異常を検出できる。スケジューラは同様の処理をコアnに達するまで繰り返す。このように、複数のコアのうち任意の1つのコアに異常判定処理を割り当てた後、MPU20によりライトが禁止されたコア2に異常判定処理を割り当てれば、コアが3つ以上あっても各コアの異常を検出できる。また、上記のアクセス許否情報23では固定的に、コア1はリード及びライトが許可され、コア2はライトが禁止されていることが定めらている。しかしながら、アクセス許否情報23におけるコア1とコア2のアクセス許否を逆にすることもできる。例えば、マイコンの起動時にOSがコア1のアクセス許否情報23をコア2に、コア2のアクセス許否情報23をコア1に書き換えることで、コア1を監視用のコアとすることができる。この場合、スケジューラは、コア2に異常判定処理を割り当てた後に、コア1に異常判定処理を割り当てれば、コア1がコア2を監視することができる。3つ以上のコアがある場合も同様で、マイコンの起動時に例えばOSがアクセス許否情報23を書き換えることで監視用のコアを切り換えることができる。"