(57)【特許請求の範囲】
【請求項１】
第１のプロセッサと、
第２のプロセッサと、
第１及び第２のプロセッサが共通してアクセス可能な共有メモリであって、第１のプロセッサに割り当てられた第１のメモリ領域と、第２のプロセッサに割り当てられた第２のメモリ領域と、通知メモリ領域とを有する共有メモリと、
を備えるマルチプロセッサシステムにおけるデータ同期方法であって、
第１のプロセッサが、第２のメモリ領域内のデータを要求するデータ取得要求を通知メモリ領域に書き込むステップと、
第２のプロセッサが、第２のメモリ領域内のデータを要求するデータ取得要求が通知メモリ領域内に存在するか監視し、データ取得要求が存在する場合は、要求されたデータを第２のメモリ領域から第１のメモリ領域にコピーするとともにコピーが完了したことを通知する完了通知を通知メモリ領域に書き込むステップと、
第１のプロセッサが、要求したデータについての完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、第１のメモリ領域にコピーされたデータに基づいて処理を行うステップと、
を含むことを特徴とするマルチプロセッサシステムにおけるデータ同期方法。
【請求項２】
通知メモリ領域に書き込まれるデータ取得要求には、データ取得要求処理の処理状況を格納するステータス領域が含まれており、
第１のプロセッサによるデータ取得要求の書き込みは、データ取得を要求している状態であることを示すステータスを含むデータ取得要求を通知メモリ領域に書き込むことによって行われ、
第２のプロセッサによる完了通知の書き込みは、前記データ取得要求のステータス領域をコピー完了であることを示すステータスに書き換えることによって行われる、
ことを特徴とする請求項１に記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項３】
第２のプロセッサによる要求されたデータのコピーは、該データの整合性が取れているタイミングで実行される
ことを特徴とする請求項１又は２に記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項４】
第１及び第２のプロセッサは各々複数のタスクを実行するものであり、
タスクの実行コードと該タスクが使用するデータは、該タスクを実行するプロセッサに対応するメモリ領域内の、タスク毎に割り当てられた領域に格納されており、
データ取得の要求は、データを要求するタスク毎に実行されるものであり、
要求されたデータのコピーは、要求されたデータに対応するタスクの処理内で実行される
ことを特徴とする請求項１〜３のいずれかに記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項５】
第１のプロセッサのあるタスクが第２のメモリ領域のデータを要求する際に、第１のプロセッサの別のタスクが同一のデータを既に要求している場合には、重複した要求であることを示したデータ取得要求を通知メモリ領域に書き込み、
第２のプロセッサは、同一データに対して第１のプロセッサの複数のタスクからデータ取得の要求がある場合には、複数のデータ取得要求のうちのいずれかのデータ取得要求が要求するコピー先に該データをコピーするとともに、該データ取得要求に関して該データのコピーが完了したことを通知する完了通知を通知メモリ領域に格納し、
第１のプロセッサが、要求したデータについての完了通知が通知メモリ領域内に存在するか監視し、完了通知が存在する場合には、同一のデータを要求している他のデータ取得要求が要求するコピー先に該データのコピーを行うとともに、当該他のデータ取得要求に関して該データのコピーが完了したことを通知メモリ領域に書き込む
ことを特徴とする請求項４に記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項６】
複数のプロセッサと、
前記複数のプロセッサが共通してアクセス可能な共有メモリであって、各プロセッサに割り当てられたメモリ領域及び通知メモリ領域を有する共有メモリと、
を備えるマルチプロセッサシステムであって、
各プロセッサが、
他のプロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求を通知メモリ領域に書き込むデータ取得要求手段と、
自プロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求が通知メモリ領域内に存在するか監視し、データ取得要求が存在する場合は、要求されたデータを要求元のプロセッサに割り当てられたメモリ領域内にコピーするとともに、コピーが完了したことを通知する完了通知を通知メモリ領域に書き込むデータコピー手段と、
自プロセッサが要求したデータ取得要求の完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、自プロセッサに割り当てられたメモリ領域にコピーされたデータに基づいて処理を行うデータ処理手段と、
を備えることを特徴とするマルチプロセッサシステム。
【請求項７】
通知メモリ領域に書き込まれるデータ取得要求には、データ取得要求処理の処理状況を格納するステータス領域が含まれており、
前記データ取得要求手段は、データ取得を要求している状態であることを示すステータスを含むデータ取得要求を通知メモリ領域に書き込み、
前記データコピー手段が行う完了通知の書き込み処理は、通知メモリ領域に書き込まれ
たデータ取得要求のステータス領域をコピー完了であることを示すステータスに書き換えることによって行われる、
ことを特徴とする請求項６に記載のマルチプロセッサシステム。
【請求項８】
前記データコピー手段は、要求されたデータの整合性が取れているタイミングで、要求されたデータのコピーを実行する
ことを特徴とする請求項６又は７に記載のマルチプロセッサシステム。
【請求項９】
各プロセッサは、各々複数のタスクを実行するものであり、
タスクの実行コードと該タスクが使用するデータは、各プロセッサに対応するメモリ領域内の、タスク毎に割り当てられた領域に格納されており、
データ取得の要求は、データを要求するタスク毎に実行されるものであり、
要求されたデータのコピーは、要求されたデータに対応するタスクの処理内で実行される
ことを特徴とする請求項６〜８のいずれかに記載のマルチプロセッサシステム。
【請求項１０】
前記データ取得要求手段は、あるタスクが他のプロセッサに割り当てられたメモリ領域内のデータを要求する際に、別のタスクが同一データを要求している場合には、重複した要求であることを示したデータ取得要求を通知メモリ領域に書き込み、
前記データコピー手段は、同一データに対して同一プロセッサの複数のタスクからデータ取得の要求がある場合には、複数のデータ取得要求のうちのいずれかのデータ取得要求が要求するコピー先に該データをコピーするとともに、該データ取得要求に関して該データのコピーが完了したことを通知する完了通知を通知メモリ領域に格納し、
データ処理手段は、要求したデータについての完了通知が通知メモリ領域内に存在するか監視し、完了通知が存在する場合には、同一のデータを要求している他のデータ取得要求が要求するコピー先に該データのコピーを行うとともに、当該他のデータ取得要求に関して該データのコピーが完了したことを通知メモリ領域に書き込む
ことを特徴とする請求項９に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにおけるデータ同期技術に関する。
【背景技術】
【０００２】
コンピュータの性能は半導体の微細化に基づいた周波数クロックの向上により行われてきたが、プロセスルールの微細化は消費電力の増大を招くという問題がある。そこで、複数のプロセッサ又は複数のプロセッサコアを有するプロセッサを用いて並列性を活用することで、処理能力を向上させるマルチプロセッサシステムの導入が進んでいる。
【０００３】
このようなマルチプロセッサシステムでは、複数のプロセッサ間でのデータの整合性を保証するために、各種のデータ同期メカニズムが必要とされている。例えば、プロセッサが共有メモリにアクセスするときにロック（セマフォ）を利用して、あるプロセッサがアクセス中のデータに対しては、他のプロセッサがアクセスできない仕組みを提供している。このようなロックの仕組みは、処理の負荷が大きく、並列処理の効果（処理の高速性）が損なわれてしまう。
【０００４】
特許文献１は、ペトリネットによる並列処理において、ジョブスケジューリングを分割して実行することを開示している。ペトリネットによって、データの流れに沿って複数の処理の並列制御が実現できる。
【０００５】
また、特許文献２では、複数のプロセッサ間でデータを共用する際に、ＦＩＦＯバッファを設け、一方のプロセッサがデータを更新する際にＦＩＦＯバッファも更新し、バッファ内のデータは他のプロセッサが割り込み可能となったときにそのプロセッサのＲＡＭに反映される。このようにして、各プロセッサのＲＡＭには常に整合性の取れた最新のデータが書き込まれていることになり、プロセッサにおいてロック待ちなどが発生しない。
【特許文献１】特開平７−５６８６３号公報
【特許文献２】特開２００７−１３３７４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載のペトリネットを用いる方法では、データの流れと処理の開始が非同期となるような処理を実行することができない。
【０００７】
特許文献２に記載のＦＩＦＯバッファを介してデータのやりとりを行う方法では、ＦＩＦＯバッファやコントローラなどの回路をプロセッサ間に新たに設ける必要があるため、コストの上昇を招くという欠点がある。
【０００８】
本発明は、上記問題点を考慮し、マルチプロセッサシステムにおいて、データの整合性を保証した新規かつ有用なデータ共有技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、以下の構成によって上記目的を達成する。
【００１０】
本発明の一態様は、第１及び第２のプロセッサと、両プロセッサが共通してアクセス可能な共有メモリを備えるマルチプロセッサシステムにおけるデータ同期方法である。本発明におけるマルチプロセッサシステムは、ＣＰＵなどのプロセッサを複数備えるシステム
以外に、同一のチップ上に複数のプロセッサコアが設けられたマルチコアプロセッサ（マルチコアＣＰＵ）を備えるシステムも含まれる。
【００１１】
共有メモリは、第１のプロセッサに割り当てられた第１のメモリ領域と、第２のプロセッサに割り当てられた第２のメモリ領域と、通知メモリ領域とを有する。第１及び第２のメモリ領域は、基本的に対応するプロセッサのみがアクセスする領域である。通知メモリ領域は、第１及び第２のプロセッサの双方がアクセスする領域であり、後述するようにデータ取得要求やその完了などを、通知しあうために用いられる領域である。
【００１２】
本発明において、第１のプロセッサが、第２のプロセッサに割り当てられている第２のメモリ領域内のデータを要求する場合には、データ取得要求を通知メモリ領域に書き込む。
【００１３】
第２のプロセッサは、第２のメモリ領域内のデータを要求するデータ取得要求が通知メモリ領域内に存在するか監視し、データ取得要求が存在する場合は、要求されたデータを第２のメモリ領域から第１のメモリ領域にコピーする。それとともに、要求されたデータのコピーが完了したことを通知する完了通知を通知メモリ領域に書き込む。
【００１４】
第１のプロセッサは、要求したデータの完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、第１のメモリ領域にコピーされたデータに基づいて処理を行う。
【００１５】
このように、共有メモリ内の一部を各プロセッサに割り当て、各メモリ領域に対する書き込みは単一のプロセッサから行われることとし、他のプロセッサに割り当てられたメモリ領域からデータを読み込む場合には、通知メモリ領域を介して当該他のプロセッサにコピーを依頼することで、整合性の取れたデータコピーが実現できる。
【００１６】
そして、データ取得要求の通知やコピー完了の通知を、通知メモリ領域を介して行っているので、デュアルポートメモリやＦＩＦＯバッファのような新たな回路を設けることなく、本発明のデータ同期を実行することができる。
【００１７】
本発明において、通知メモリ領域に書き込まれるデータ取得要求には、データ取得要求処理の処理状況を格納するステータス領域が含まれていることが好適である。そして、第１のプロセッサがデータ取得要求を通知メモリ領域に書き込む際には、ステータス領域に要求状態であることを示すステータス（フラグ）を格納する。第２のプロセッサが要求されたデータのコピーを完了した場合に行う完了通知の書き込み処理は、第１のプロセッサが通知メモリ領域に書き込んだデータ取得要求のステータス領域を、コピー完了であることを示すステータスに書き換えることにより行えばよい。
【００１８】
このように、完了通知の書き込みを通知メモリ領域内のデータ取得要求の一部を書き換えるにより実現することで、処理が簡便化されるとともに必要となる通知メモリ領域を削減することが可能となる。
【００１９】
また、本発明において、第２のプロセッサは、要求されたデータのコピーを、該データの整合性が取れているタイミングで実行することが好適である。
【００２０】
例えば、第２のプロセッサが複数のデータを更新する処理などアトミック性が必要な処理を実行中の場合に、その処理の途中に要求されたデータのコピーを行うのではなく、ひとまとまりの処理が完了した後にデータコピーを行うことで、データの整合性を保証することができる。
【００２１】
また、本発明において、第１及び第２のプロセッサは各々複数のタスクを実行するものであり、タスクの実行コードと該タスクが使用するデータは、該タスクを実行するプロセッサに対応するメモリ領域内の、タスク毎に割り当てられた領域に格納されている構成を採用することが好適である。この場合、データ取得の要求は、データを要求するタスク毎に実行し、要求されたデータのコピーはそのデータに対応するタスクの処理内で実行されることが好適である。
【００２２】
このようにすれば、プロセッサは、要求したデータのコピーが完了する間に、他のタスクの処理を行うことが可能なため、総合的なプロセッサの並列性を失うことがない。
【００２３】
また、本発明において、第１のプロセッサのあるタスクが、第２のメモリ領域内のデータを要求する際に、第１のプロセッサの別のタスクが同一のデータを既に要求している場合には、重複した要求であることを示したデータ取得要求を通知メモリ領域に書き込むことが好適である。第２のプロセッサは、第１のプロセッサに係る複数のタスクから同一データの取得要求を受けている場合には、いずれか１つのデータ取得要求に対してのみデータのコピー処理を実行する。例えば、最も早く生じたデータ取得要求に対してデータコピー処理を行うことが考えられる。そして、コピー処理の対象となったデータ取得要求については、コピーが完了したことを通知する完了通知を通知メモリ領域に書き込むことが好適である。そして、第１のプロセッサは、要求したデータの完了通知が通知メモリ領域内にある場合には、同一のデータを要求している他のデータ取得要求が要求するコピー先に当該データのコピーを行うとともに、そのデータ取得要求のコピーが完了したことを通知メモリ領域に書き込むことが好適である。
【００２４】
このようにすれば、第１のプロセッサから、第２のプロセッサの同一データに対して複数の取得要求が発生した場合に、第２のプロセッサの処理負荷を減らすことができる。
【００２５】
なお、本発明は、上記処理の少なくとも一部を有するデータ同期方法として捉えることができる。また、本発明は、上記処理の少なくとも一部を実行するマルチプロセッサシステム、又は、かかる方法を実現するためのプログラムとして捉えることもできる。上記手段及び処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【００２６】
例えば、本発明の一態様は、複数のプロセッサと、前記複数のプロセッサが共通してアクセス可能であり各プロセッサに割り当てられたメモリ領域及び通知メモリ領域を有する共有メモリと、を備えるマルチプロセッサシステムであって、各プロセッサが、他のプロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求を通知メモリ領域に書き込むデータ取得要求手段と、通知メモリ領域内の自プロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求を監視し、データ取得要求が存在する場合に、要求されたデータを要求元のプロセッサに割り当てられたメモリ領域内にコピーするとともに、コピーが完了したことを通知する完了通知を通知メモリ領域に書き込むデータコピー手段と、自プロセッサが要求したデータ取得要求の完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、自プロセッサに割り当てられたメモリ領域にコピーされたデータに基づいて処理を行うデータ処理手段と、を備えるマルチプロセッサシステムとして捉えることができる。
【発明の効果】
【００２７】
本発明によれば、マルチプロセッサシステムにおいて、データの整合性を保証したデー共有が可能となる。
【発明を実施するための最良の形態】
【００２８】
（第１の実施形態）
〈構成〉
本実施形態は、自動車等に搭載されたエンジンを制御するためのエンジン制御システムである。図１に示すように、本実施形態のエンジン制御システムは、２つのＣＰＵ１，２を備えている。また、ＣＰＵ１，２が共通してアクセス可能なメモリ３を備えている。
【００２９】
ＣＰＵ１には、エンジンの冷却水温を検出するための水温センサ４と、エンジンの吸入空気温を検出するための吸気温センサ５が接続されている。ＣＰＵ１は、定期的にセンサ入力処理を実行し、水温センサ４及び吸気温センサ５からの信号を入力しデジタルデータに変換して、メモリ３に格納する。
【００３０】
ＣＰＵ２には、エンジンに燃料を噴射する燃料噴射装置６が接続されている。ＣＰＵ２は、定期的に噴射量決定処理を実行し、ＣＰＵ１が更新した水温及び空気温に基づいて、燃料噴射装置６の燃料噴射量を決定する。
【００３１】
なお、ＣＰＵ１，２は上記のセンサ入力処理や噴射量決定処理以外の処理も並行して実行するよう構成されても良い。上記の説明ではＣＰＵ２からＣＰＵ１に一方的にデータの要求を行うだけであるが、ＣＰＵ１，２のいずれも、他のＣＰＵが実行するタスクに対してデータの要求をするとともに、要求されたデータを他ＣＰＵに渡すことが可能である。
【００３２】
メモリ３は、図１及び図２に示すように、３つの領域３ａ，３ｂ，３ｃに論理的に分割されている。メモリ領域３ａはＣＰＵ１に割り当てられた領域であり、メモリ領域３ｂはＣＰＵ２に割り当てられた領域である。各ＣＰＵに割り当てられてメモリ領域は、基本的にそのＣＰＵのみがアクセスを行う領域である。通知メモリ領域３ｃは、ＣＰＵ１，２が共有するメモリ領域であり、この領域を介してＣＰＵ１，２はデータ取得のための情報をやりとりする。
【００３３】
各割当領域３ａ，３ｂには、それぞれのＣＰＵが実行するタスク（処理）の実行コードと、処理に用いる入力データと、処理結果として算出される出力データを格納する領域が、タスク毎にあらかじめ定められている。各タスクに割り当てられる領域は、連続した領域である必要はないが、本実施形態では連続した領域としている。また、各ＣＰＵに割り当てられる領域（３ａ，３ｂ）も連続した領域である必要はないが、本実施形態では連続した領域としている。
【００３４】
通知メモリ領域３ｃには、異なるＣＰＵのタスク間でデータを受け渡すためのデータ取得要求メッセージが格納される。本実施形態では、通知メモリ領域３ｃは、異なるＣＰＵのタスク間でデータのやりとりがある分だけあらかじめ用意するものとする。ただし、データの要求があるときだけ、必要な領域を確保しても構わない。
【００３５】
図３は、通知メモリ領域３ｃに書き込まれる、データ取得要求７のフォーマットの例を示す図である。データ取得要求７は、状態７ａ、コピー元アドレス７ｂ及びコピー先アドレス７ｃを含む。状態７ａには、「要求無し」「要求」「処理完了」の３つの状態のいずれかが格納される。「要求」は、一方のＣＰＵから他のＣＰＵに対してデータの要求が依頼されている状態であることを示す。「処理完了」は、データの要求を依頼されたＣＰＵが、そのデータのコピーを完了したことを示す。「要求無し」は、上記以外の状態であり、要求がないことを示している。
【００３６】
コピー元アドレス７ｂには、取得したいデータのアドレスが格納される。上記のように、ＣＰＵ２が実行する噴射量決定タスクが、ＣＰＵ１が実行するセンサ入力処理から、水温データを取得したい場合には、ＣＰＵ１に割り当てられているメモリ領域３ａ内の水温
データが格納されているアドレスを指定する。
【００３７】
コピー先アドレス７ｃには、要求したデータのコピー先のアドレスが格納される。上記の例では、ＣＰＵ２に割り当てられているメモリ領域３ｂ内のアドレスを指定する。
【００３８】
なお、データ取得要求メッセージ７は、要求の状態と、どのデータをどこにコピーすべきかという情報をやりとりできる形式であれば、どのようなフォーマットも採用可能である。例えば、どのデータを取得したいかという情報はデータの格納されたコピー元アドレスを直接指定するのではなく、データ毎に識別子（ＩＤ）をあらかじめ定めておき、そのＩＤを指定するようにしても良い。同様にコピー先アドレスの指定も、アドレスを直接指定するのではなく、その他の方法によって通知しても良い。
【００３９】
このように、各ＣＰＵは通知メモリ領域３ｃ内のデータ取得要求メッセージを利用して、データの要求及びコピー処理を実行する。
【００４０】
〈処理フロー〉
次に、各ＣＰＵが行う処理の流れを図４のフローチャートを参照して説明する。図４のフローチャートは、ＣＰＵがある１つのタスクを実行する際の処理の流れを示すフローチャートである。ＣＰＵが複数のタスクを実行可能な場合には、実行可能状態にあるタスクのうち最も優先度の高いタスクの実行を行う。
【００４１】
図４のフローチャートは、データを要求する側のタスクとしての処理を表すＳ１（Ｓ１０〜Ｓ１５）と、データをコピーする側のタスクとしての処理を表すＳ２（Ｓ２０〜Ｓ２２）の２つの部分からなる。各ＣＰＵは、データを要求する側及びデータをコピーする側の両方を実行可能なように、Ｓ１とＳ２の両方を実行する。
【００４２】
まず、データを要求する側のタスクとしての処理Ｓ１について説明する。ＣＰＵが実行可能な処理が存在するかを判定する（Ｓ１０）。他のＣＰＵが実行しているタスクに対してデータの取得要求を出している間（要求先からのコピーが未完了）は、処理を続行することができないので、ステップＳ２０に進む。一方、データ取得要求メッセージが処理された後又は他のＣＰＵに対してデータ取得要求メッセージを出していない場合には、タスク処理を実行可能であり、ステップＳ１１に進む。
【００４３】
ステップＳ１１では、以前に要求したデータ取得要求メッセージのステータス７ａとして「処理完了」となっているものが通知メモリ領域３ｃ内に存在するか判定し、存在する場合には、データ取得要求メッセージのステータス７ａを「要求無し」に変更する（Ｓ１２）。あるいは、データ取得要求メッセージを通知メモリ領域３ｃから削除してしまっても構わない。
【００４４】
次に、自タスクに関する処理を行う（Ｓ１３）。データの取得要求を出していた場合には、自タスクに割り当てられているメモリ領域内にコピーされたデータを参照して処理を行う。そして、他のＣＰＵが実行しているタスクからデータを取得する必要があるか判定する（Ｓ１４）。ここで、他のＣＰＵからデータを取得する必要があれば、データ取得要求メッセージを通知メモリ領域に書き込む（Ｓ１５）。このデータ取得要求メッセージの、ステータス７ａは「要求」とする。
【００４５】
次に、データをコピーする側のタスクとしての処理Ｓ２について説明する。タスクは、通知メモリ領域３ｃを参照して、自タスクに割り当てられた領域内のデータを要求するデータ取得要求メッセージが存在するか調べる（Ｓ２０）。これは、通知メモリ領域３ｃ内にあるデータ取得要求メッセージのコピー元アドレス７ｂを調べることで判定できる。
【００４６】
自タスクのデータが他のＣＰＵで実行されるタスクから要求されている場合には、そのデータを、データ要求通知のコピー先アドレス７ｃにコピーする（Ｓ２１）。そして、通知メモリ領域３ｃ内のデータ取得要求メッセージの状態７ａを「処理完了」に変更する（Ｓ２２）。なお、ステップＳ２１では、あるＣＰＵのタスクに割り当てられたメモリ領域から、他のＣＰＵのタスクに割り当てられたメモリ領域にデータのコピーを行うが、データ要求側のＣＰＵはデータ要求中にそのメモリ領域へのアクセスをしないようにすれば、書き込み時のロック処理等は不要である。なお、データ要求中（未取得時）に要求側のＣＰＵがそのメモリ領域にアクセスできないようにする機構は、単にプログラムをそのようなロジックで記述することで実現しても良いし、メモリ領域へのアクセス前にデータ取得の要求を監視することで実現しても良い。
【００４７】
データを要求した側のタスクでは、通知メモリ領域３ｃ内のデータ取得要求メッセージのステータスをチェックすることで、データのコピーが完了しているか否かを判定することができる。
【００４８】
〈動作例〉
図５に、ＣＰＵ１のセンサ入力タスクがセンサからデータの入力を行い、ＣＰＵ２の噴射量決定タスクがセンサ入力タスクから水温及び空気温データを受け取って噴射量を決定する場合を例に、具体的な動作例を説明する。なお、各タスクが行う処理の内容自体はどのようなものであっても良いことは明らかであろう。
【００４９】
ＣＰＵ２の噴射量決定タスクが、ＣＰＵ１のセンサ入力タスクからデータを取得するために、データ取得要求メッセージを通知メモリ領域３ｃに書き込む。なお、図では１つのデータ取得要求メッセージのみが書き込まれているが、複数のデータを要求する場合には、１つのデータ取得要求メッセージで複数のデータを取得可能としても良いし、それぞれのデータについてデータ取得通知を書き込むこととしても良い。
【００５０】
ＣＰＵ１のセンサ入力タスクでは、通知メモリ領域３ｃを参照して、自タスクに対するデータ取得要求が存在するか判定する。なお、この判定は、センサ入力タスクの処理、すなわちまとめて更新する必要のある水温及び空気温データを更新した後に行われる。ＣＰＵ１のセンサ入力タスクは、通知メモリ領域３ｃにデータ取得要求メッセージがあるので、その通知の内容にしたがってアドレスＳ１に格納されたデータを、アドレスＤ１にコピーする。そして、データ取得要求メッセージのステータスを「処理完了」に更新する。
【００５１】
データ取得の要求を出した噴射量決定タスク側では、適当なタイミングで通知メモリ領域３ｃ内のデータ取得要求メッセージのステータスをチェックする。このステータスが「要求」のままである場合には、まだデータのコピーが行われていないことが分かるので、処理を続行しない。逆に、データ取得要求メッセージ内のステータスが「処理完了」となっている場合には、データのコピーが完了していることが分かるので、取得したデータ（アドレスＤ１のデータ）を参照して、処理を続行することができる。
【００５２】
図６，７を参照して本実施形態によるデータ同期方法の利点について説明する。図６，７はいずれも、各処理のタイミングを表したタイミングチャートである。
【００５３】
図６の例では、ＣＰＵ１がセンサからの入力データを更新中に、ＣＰＵ２の噴射量決定タスクが水温及び空気温の取得を要求している。この時点では、ＣＰＵ１のセンサ入力タスクは、ひとまとめで更新する必要のあるデータ更新を行っている最中なので、データ要求に対して応答しない。そして、水温及び空気温の両方の更新が終わった後で、ＣＰＵ２の噴射量決定タスクからのデータ要求にしたがって、データのコピーを行う。そして、Ｃ
ＰＵ２側では、データ所得要求が完了されたことを検知したときには、噴射量決定タスクに割り当てられたメモリ領域内に、水温及び空気温のデータが更新されているので、これを用いて処理を続行することができる。
【００５４】
このように、ＣＰＵ１側では、ひとまとまりで更新する必要のあるデータを更新している最中にはデータコピーには対応せず、ひとまとまりの更新処理が終わった後でデータコピーを行うので、データの整合性を保証することができる。
【００５５】
また、ＣＰＵ２側のデータを要求したタスクの処理は、データのコピーが完了するまで待ち状態となるものの、要求を受けた側のタスクの処理はデータコピーの際にロック等を取得する処理を行わなくて良いので処理が簡潔で高速になる。また、データを要求した側のタスクは、通知メモリ領域内を参照するだけでデータの取得が完了しているか分かるので、処理が簡潔で高速になる。また、ＣＰＵ２側でも、データを要求したタスクが待ち状態にある場合には、他のタスクを実行可能であるため、全体として並列性を損ねることがない。
【００５６】
次に、図７を例に説明する。図７の例では、データを要求した側のタスクが通知メモリ領域を参照してデータの取得が完了したか判断する時点で、データを要求された側のタスクは既にデータのコピーを完了しており、かつ、さらに新たなセンサ入力によってデータを更新している。このような場合であっても、ＣＰＵ１側からＣＰＵ２側にデータのコピーが完了しているので、ＣＰＵ１側で新たにデータを更新していても、ＣＰＵ２側にはロック待ち等が発生せずにすぐに処理を継続することができる。
【００５７】
図７からも分かるように、データの取得を要求するタスクが取得完了を判定する時間間隔と、要求された側のデータ更新の時間間隔は異なっていても構わない。つまり、センサ入力タスク側では比較的頻繁にデータを更新し、噴射量決定タスクではデータ取得要求を出してからデータ取得完了をチェックするまで時間が空いても構わない。このような場合であっても、噴射量決定タスクがデータ取得を要求した時点でのデータが、噴射量決定タスクに割り当てられたメモリ領域にコピーされているので、データ取得要求を出したタイミングでの整合性の取れたデータを元に処理を継続することができる。
【００５８】
〈実施形態の作用／効果〉
本実施形態によれば、新たなハードウェア等を設けることなくソフトウェアによる処理によって、データの整合性を保証してプロセッサ間でデータの共有を行うことができる。ソフトウェアによる対応であるため、新たなハードウェアを設けることに伴う、コストの上昇や装置の大型化などの問題を招くことがない。
【００５９】
この際、データ要求中は要求する側のタスク（ＣＰＵ）がメモリ領域にアクセスしないことで、要求された側のタスク（ＣＰＵ）はロック処理を行わずに、データのコピー処理を実行することができる。また、データを要求する側のタスクは、通知メモリ領域内のステータスを見るだけでコピー完了か否かを判定しているので、ここでもロック処理は不要となる。つまり、ロック処理を用いることなくデータの共有を実行することができる。
【００６０】
また、データのコピーを行っているため、データがコピーされた後であれば、データを要求した側のタスクは、いつでもそのデータを参照して処理を行うことができる。データを要求された側のタスクからすれば、要求されたデータをコピーしてしまえば、それ以上データ取得要求のことを気にする必要はなくなり、要求がタスクがコピーされたデータを参照しているか否かに関わりなく、自タスクに割り当てられたメモリ領域内でデータの更新を行うことが可能となる。
【００６１】
また、このようなデータ共有方法によれば、１つのプロセス／スレッドで、複数のデータ要求を同時に出すことが可能となる。各データの取得を順次行う方法では待ち時間が多大になり、複数のスレッドを生成する方法ではオーバヘッドが大きくなるが、本方法によれば１スレッド内で同時に要求ができるので、処理負荷や待ち時間が少ない高速な処理が実現できる。
【００６２】
（第２の実施形態）
〈概要〉
第１の実施形態では、データを要求されたタスクが、各要求に対応してデータのコピー処理を実行している。ここで、図８に示すような状況を考える。図８Ａでは、ＣＰＵ２が実行している複数のタスクが、ＣＰＵ１のタスクに対してデータ取得の要求を発行している。第１の実施形態に記載の方法では、図８Ａに示す状況下では、各データ取得要求に対してＣＰＵ２が対応することになる。すなわち、ＣＰＵ１が実行するタスクに割り当てられたメモリ領域から、ＣＰＵ２が実行する各タスクに割り当てられた各メモリ領域へのコピー処理が複数回（図８Ａでは３回）実行されることになる。
【００６３】
あるタスクへの重複するデータ要求の数が多大になった場合、データを要求されたタスクでは要求数に応じた回数だけコピー処理を行わなければならず、処理負荷が過大になってしまう。そこで、図８Ｂ，Ｃに示すように、ＣＰＵ１が実行するタスクは、ＣＰＵ２が実行するタスクに対して１回だけコピー処理を実行する（図８Ｂ）ようにし、残りのデータ要求に対してはＣＰＵ２の中で各タスクに対してコピー処理を実行する（図８Ｃ）ことができれば、ＣＰＵ１にデータ取得要求が集中した場合であっても過度な負荷がかかることを防止できる。
【００６４】
上記のような仕組みを実現するために、データ取得要求メッセージ７の状態７ａとして、新たに、同一ＣＰＵが実行するタスクが既に要求しているデータを重複して要求することを示す「重複要求」のステータスを新たに設ける。同じデータを要求しているので、コピー元アドレス７ｂは、重複した要求の間で同じものとなる。一方、コピー先アドレス７ｃは、データを要求したタスクに割り当てられている領域となるため相違する。
【００６５】
〈処理フロー〉
図９を用いて、本実施形態におけるデータ共有方法の処理の流れを説明する。図９のフローチャートは、第１の実施形態におけるデータ共有方法のフローチャート（図４）のデータを要求する側としての処理（Ｓ１）に相当する部分だけ示している。データをコピーする側としての処理（Ｓ２）は、第１の実施形態と同じなので、図９では省略している。
【００６６】
第１の実施形態との違いは、ステップＳ１２の後にステップＳ１６〜Ｓ１８が設けられている点と、ステップＳ１５がステップＳ１５−１，２，３に置き換えられている点である。
【００６７】
まず、ステップＳ１６〜Ｓ１８の処理について説明する。この処理は、同一データを重複して要求したＣＰＵ側で、データのコピーを行う処理（図８Ｃ）に相当する。
【００６８】
以前に要求したデータ取得要求メッセージのステータスが「処理完了」となっているものがあると判定され（Ｓ１１−ＹＥＳ）、そのステータスを「要求無し」と書き換えた（Ｓ１２）後に、通知メモリ領域内にこのデータ要求と重複したデータ要求があるか判定する（Ｓ１６）。重複したデータ要求があるか否かは、通知メモリ領域内に、ステータスが「重複要求」であり、コピー元アドレスが一致する、データ取得要求メッセージが格納されているか否かで判断することができる。
【００６９】
なお、３つ以上のプロセッサを有するマルチプロセッサシステムの場合は、同一のプロセッサの別タスクが同じデータを要求しているか否かを判断する必要がある。これは、コピー元アドレスが一致し、かつ、コピー先アドレスが同一プロセッサに割り当てられた割当領域内のアドレスであるデータ取得要求メッセージが、通知メモリ領域内に存在するか調べることで実現可能である。
【００７０】
そして、重複するデータ取得要求がある場合（Ｓ１６−ＹＥＳ）には、自プロセッサに割り当てられて領域内でデータのコピー処理を行う（Ｓ１７）（図８Ｃに相当）。そして、重複要求のデータ取得要求メッセージのステータスを「処理完了」に更新する（Ｓ１８）。
【００７１】
次に、ステップＳ１５−１〜３の処理について説明する。この処理は、データ取得要求メッセージを通知メモリ領域に書き込む際に、重複した要求であるか否かを判定し、重複した要求である場合はその旨が判断できるメッセージを通知メモリ領域に書き込む処理である。
【００７２】
他のＣＰＵのデータが必要と判定された場合（Ｓ１４−ＹＥＳ）のデータ取得要求の書き込み時には、通知メモリ領域３ｃを確認して、同一プロセッサが実行する他のタスクが、同じデータに対する要求を既に発行しているか否かを判定する（Ｓ１５−１）。同一データに対する要求が既に存在するか否かは、通知メモリ領域３ｃ内に、コピー元アドレス７ｂが一致する要求が既に存在するか否かで判断することができる。
【００７３】
同一データに対する要求が存在しない場合（Ｓ１５−１−ＮＯ）は、ステータスが「要求」であるデータ取得要求メッセージを通知メモリ領域３ｃ内に格納する（Ｓ１５−２）。一方、同一データに対する要求がすでに存在する場合（Ｓ１５−１−ＹＥＳ）は、ステータスが「重複要求」であるデータ取得要求メッセージを通知メモリ領域３ｃ内に格納する（Ｓ１５−３）。
【００７４】
〈動作例１〉
図１０に、ＣＰＵ１が車輪速データタスクがセンサからデータの入力を行い、ＣＰＵ２のＡＢＳ制御タスク及びカーナビタスクが、それぞれ車輪速データを受け取って処理を行う場合を例に、具体的な動作例を説明する。なお、各タスクが行う処理の内容自体はどのようなものであっても良いことは明らかであろう。
【００７５】
まず、ＡＢＳ制御タスクが、車輪速データを要求するデータ取得要求メッセージＡを通知メモリ領域３ｃに書き込む。ここでは、重複するデータ取得要求は存在しないので、データ取得要求メッセージＡのステータス７ａは「要求」となる。また、コピー元アドレス７ｂはＳ１、コピー先アドレス７ｃはＤ１とする。
【００７６】
次に、カーナビタスクが、同様に車輪速データを要求するデータ取得要求メッセージＢを通知メモリ３ｃに書き込む。ここでは、既にＡＢＳ制御タスクが同一データに対する要求Ａを発行しているので、データ取得要求メッセージＢのステータス７ａは「重複要求」となる。また、コピー元アドレス７ｂはＡＢＳ制御タスクの要求Ａと同じくＳ１であり、コピー先アドレス７ｃは自タスクのメモリ領域内のアドレスとなるのでＤ２となりＡＢＳ制御タスクの要求Ａとは異なる。
【００７７】
ＣＰＵ１の車輪速データ取得タスクが、通知メモリ領域３ｃを参照して、自タスクの目メモリ領域内のデータに対する取得要求があるかチェックする。このとき、ステータスが「要求」と「重複要求」の２つのデータ取得要求Ａ，Ｂが通知されていることが分かるが、車輪速データ取得タスク側では、ステータスが「要求」であるデータ取得要求メッセー
ジＡのみに対応する。すなわち、アドレスＳ１に格納されているデータを、アドレスＤ１のみにコピーする。そして、対応したデータ取得要求メッセージＡのステータスを「処理完了」に更新する。
【００７８】
次に、ＡＢＳ制御タスクが、通知メモリ領域３ｃを参照して、自タスクが要求したデータ取得要求が処理されたか判定する。データ取得要求のステータスが「処理完了」となっていることから、データの取得が完了していることが分かる。そして、ＡＢＳ制御タスクは、重複するデータ取得要求メッセージＢが存在することも分かるので、ＣＰＵ２に割り当てられて領域内でメモリのコピー（Ｄ１からＤ２へ）を行う。そして、データ取得要求メッセージＡのステータスを「要求無し」に、データ取得要求メッセージＢのステータスを「処理完了」に更新する。そして、ＡＢＳ制御タスクは、アドレスＤ１にコピーされたデータを参照して処理を行う。
【００７９】
カーナビタスクが通知メモリ領域３ｃを参照するときには、自タスクが要求したデータ取得要求メッセージＢのステータスが「処理完了」となっていることから、このステータスを「要求無し」に変更し、アドレスＤ２にコピーされたデータを参照して処理を行う。
【００８０】
〈動作例２〉
上記の動作例では、先に要求を出したＡＢＳ制御タスクがＣＰＵ２内でのコピーを行っているが、ＣＰＵ１に要求したデータがＣＰＵ２にコピーされたことを最も先に検知したタスクがＣＰＵ２への割り当てメモリ領域内でのコピーを行えばよい。ここでは、後から要求を出したカーナビタスクがＣＰＵ２への割り当てメモリ領域内でのコピー処理を実行する動作例を図１１を参照して説明する。
【００８１】
ＡＢＳ制御タスク及びカーナビタスクがデータ取得要求を通知メモリ領域内に格納し、車輪速取得タスクが要求されたデータのコピー（Ｓ１からＤ１へ）を行うところまでの処理は上記動作例１と同じであるため、説明を省略する。
【００８２】
ここで、データ取得要求メッセージＡのステータスが「処理完了」となっていることから、ＣＰＵ間でのコピー処理が完了していることが分かる。そこで、ＣＰＵ２の割り当てメモリ領域内でデータのコピー（Ｄ１からＤ２へ）行い、データ取得要求メッセージＢのステータスを「要求無し」に更新する。そして、カーナビタスクは、アドレスＤ２にコピーされたデータを参照して処理を行う。
【００８３】
ＡＢＳ制御タスクが通知メモリ領域３ｃを参照するときには、自タスクが要求したデータ取得要求メッセージＡのステータスが「処理完了」となっていることから、このステータスを「要求無し」に変更し、アドレスＤ１にコピーされたデータを参照して処理を行う。なお、ＡＢＳ制御タスクが通知メモリ領域３ｃを参照するタイミングでは、データ取得要求メッセージＢのステータスは「重複要求」ではなくなっているので、動作例１で行ったようなコピー処理をＡＢＳ制御タスクは行わない。
【００８４】
〈実施例の作用／効果〉
本実施形態に係る方法によれば、同じＣＰＵの複数のタスクから、同一のデータに対して複数の要求があった場合に、要求された側のＣＰＵの処理負荷を軽減することが可能となる。
【００８５】
（変形例）
上記の説明では、メモリ通知領域を介したメッセージ交換を、データ取得要求メッセージのステータス領域を書き換えることによって行っているが、他の方法によるメッセージ交換を行っても良い。例えば、コピー処理の完了を通知する場合に、その旨を通知するメ
ッセージを新たに通知メモリ領域に書き込んでも構わない。
【００８６】
また、上記の説明では、２つのＣＰＵを有する構成を例に説明したが、図１２に示すようなＣＰＵの数が３つ以上の場合であっても、同様の方法によりプロセッサ間でデータ共有を行うことができる。
【００８７】
なお、この場合もメモリ３の領域は各ＣＰＵ毎に領域が割り当てられているので、データ取得要求メッセージのコピー元アドレスやコピー先アドレスを参照することで、どのＣＰＵに係るタスクのデータに対する取得要求であるかや、どのＣＰＵに係るタスクがデータの取得を要求しているかなどを判断することができる。
【００８８】
また、図１３に示すように、１つのＣＰＵが複数のプロセッサコアを有しているマルチコアＣＰＵであっても、プロセッサコア間でのデータ同期が行える。この場合、各プロセッサコアが本発明のプロセッサに相当する。
【図面の簡単な説明】
【００８９】
【図１】第１及び第２の実施形態におけるシステム構成を表す概要図である。
【図２】通知メモリ領域のメモリ構造を示す図である。
【図３】データ取得要求メッセージのフォーマットを示す図である。
【図４】第１の実施形態における、プロセッサ間でデータ交換を行う際の処理の流れを示すフローチャートである。
【図５】第１の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図６】第１の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図７】第１の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図８】第２の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図９】第２の実施形態における、プロセッサ間でデータ交換を行う際の処理の流れを示すフローチャートである。
【図１０】第２の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図１１】第２の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図１２】変形例に係るシステム構成を表す概要図である。
【図１３】変形例に係るシステム構成を表す概要図である。
【符号の説明】
【００９０】
１，２  ＣＰＵ
３      メモリ（ＲＡＭ）
【図１】
0005213485.tif 000002
【図２】
0005213485.tif 000003
【図３】
0005213485.tif 000004
【図４】
0005213485.tif 000005
【図５】
0005213485.tif 000006
【図６】
0005213485.tif 000007
【図７】
0005213485.tif 000008
【図８】
0005213485.tif 000009
【図９】
0005213485.tif 000010
【図１０】
0005213485.tif 000011
【図１１】
0005213485.tif 000012
【図１２】
0005213485.tif 000013
【図１３】
0005213485.tif 000014