説明

マルチプロセッサシステムにおけるデータ同期方法及びマルチプロセッサシステム

【課題】マルチプロセッサシステムにおいて、データの整合性を保証したデータ共有を実現する。
【解決手段】複数のプロセッサと共有メモリから構成され、共有メモリ領域は各プロセッサに割り当てられて領域とプロセッサ間のメッセージ交換を行うための通知メモリ領域とを含んでおり、第1のプロセッサが第2のプロセッサの割り当てメモリ領域内のデータを取得する場合には、データ取得要求を通知メモリ領域に書き込む。通知メモリ領域内のデータ取得要求を監視することでデータが要求されたことを確認でき、その場合は、割当領域間でデータのコピーを行うとともに、コピーが完了したことを示す完了通知を通知メモリ領域に書き込む。データを要求した側のプロセッサは、通知メモリ領域内の完了通知を確認することで取得したデータを利用した処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチプロセッサシステムにおけるデータ同期技術に関する。
【背景技術】
【0002】
コンピュータの性能は半導体の微細化に基づいた周波数クロックの向上により行われてきたが、プロセスルールの微細化は消費電力の増大を招くという問題がある。そこで、複数のプロセッサ又は複数のプロセッサコアを有するプロセッサを用いて並列性を活用することで、処理能力を向上させるマルチプロセッサシステムの導入が進んでいる。
【0003】
このようなマルチプロセッサシステムでは、複数のプロセッサ間でのデータの整合性を保証するために、各種のデータ同期メカニズムが必要とされている。例えば、プロセッサが共有メモリにアクセスするときにロック(セマフォ)を利用して、あるプロセッサがアクセス中のデータに対しては、他のプロセッサがアクセスできない仕組みを提供している。このようなロックの仕組みは、処理の負荷が大きく、並列処理の効果(処理の高速性)が損なわれてしまう。
【0004】
特許文献1は、ペトリネットによる並列処理において、ジョブスケジューリングを分割して実行することを開示している。ペトリネットによって、データの流れに沿って複数の処理の並列制御が実現できる。
【0005】
また、特許文献2では、複数のプロセッサ間でデータを共用する際に、FIFOバッファを設け、一方のプロセッサがデータを更新する際にFIFOバッファも更新し、バッファ内のデータは他のプロセッサが割り込み可能となったときにそのプロセッサのRAMに反映される。このようにして、各プロセッサのRAMには常に整合性の取れた最新のデータが書き込まれていることになり、プロセッサにおいてロック待ちなどが発生しない。
【特許文献1】特開平7−56863号公報
【特許文献2】特開2007−133744号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
特許文献1に記載のペトリネットを用いる方法では、データの流れと処理の開始が非同期となるような処理を実行することができない。
【0007】
特許文献2に記載のFIFOバッファを介してデータのやりとりを行う方法では、FIFOバッファやコントローラなどの回路をプロセッサ間に新たに設ける必要があるため、コストの上昇を招くという欠点がある。
【0008】
本発明は、上記問題点を考慮し、マルチプロセッサシステムにおいて、データの整合性を保証した新規かつ有用なデータ共有技術を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明は、以下の構成によって上記目的を達成する。
【0010】
本発明の一態様は、第1及び第2のプロセッサと、両プロセッサが共通してアクセス可能な共有メモリを備えるマルチプロセッサシステムにおけるデータ同期方法である。本発明におけるマルチプロセッサシステムは、CPUなどのプロセッサを複数備えるシステム
以外に、同一のチップ上に複数のプロセッサコアが設けられたマルチコアプロセッサ(マルチコアCPU)を備えるシステムも含まれる。
【0011】
共有メモリは、第1のプロセッサに割り当てられた第1のメモリ領域と、第2のプロセッサに割り当てられた第2のメモリ領域と、通知メモリ領域とを有する。第1及び第2のメモリ領域は、基本的に対応するプロセッサのみがアクセスする領域である。通知メモリ領域は、第1及び第2のプロセッサの双方がアクセスする領域であり、後述するようにデータ取得要求やその完了などを、通知しあうために用いられる領域である。
【0012】
本発明において、第1のプロセッサが、第2のプロセッサに割り当てられている第2のメモリ領域内のデータを要求する場合には、データ取得要求を通知メモリ領域に書き込む。
【0013】
第2のプロセッサは、第2のメモリ領域内のデータを要求するデータ取得要求が通知メモリ領域内に存在するか監視し、データ取得要求が存在する場合は、要求されたデータを第2のメモリ領域から第1のメモリ領域にコピーする。それとともに、要求されたデータのコピーが完了したことを通知する完了通知を通知メモリ領域に書き込む。
【0014】
第1のプロセッサは、要求したデータの完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、第1のメモリ領域にコピーされたデータに基づいて処理を行う。
【0015】
このように、共有メモリ内の一部を各プロセッサに割り当て、各メモリ領域に対する書き込みは単一のプロセッサから行われることとし、他のプロセッサに割り当てられたメモリ領域からデータを読み込む場合には、通知メモリ領域を介して当該他のプロセッサにコピーを依頼することで、整合性の取れたデータコピーが実現できる。
【0016】
そして、データ取得要求の通知やコピー完了の通知を、通知メモリ領域を介して行っているので、デュアルポートメモリやFIFOバッファのような新たな回路を設けることなく、本発明のデータ同期を実行することができる。
【0017】
本発明において、通知メモリ領域に書き込まれるデータ取得要求には、データ取得要求処理の処理状況を格納するステータス領域が含まれていることが好適である。そして、第1のプロセッサがデータ取得要求を通知メモリ領域に書き込む際には、ステータス領域に要求状態であることを示すステータス(フラグ)を格納する。第2のプロセッサが要求されたデータのコピーを完了した場合に行う完了通知の書き込み処理は、第1のプロセッサが通知メモリ領域に書き込んだデータ取得要求のステータス領域を、コピー完了であることを示すステータスに書き換えることにより行えばよい。
【0018】
このように、完了通知の書き込みを通知メモリ領域内のデータ取得要求の一部を書き換えるにより実現することで、処理が簡便化されるとともに必要となる通知メモリ領域を削減することが可能となる。
【0019】
また、本発明において、第2のプロセッサは、要求されたデータのコピーを、該データの整合性が取れているタイミングで実行することが好適である。
【0020】
例えば、第2のプロセッサが複数のデータを更新する処理などアトミック性が必要な処理を実行中の場合に、その処理の途中に要求されたデータのコピーを行うのではなく、ひとまとまりの処理が完了した後にデータコピーを行うことで、データの整合性を保証することができる。
【0021】
また、本発明において、第1及び第2のプロセッサは各々複数のタスクを実行するものであり、タスクの実行コードと該タスクが使用するデータは、該タスクを実行するプロセッサに対応するメモリ領域内の、タスク毎に割り当てられた領域に格納されている構成を採用することが好適である。この場合、データ取得の要求は、データを要求するタスク毎に実行し、要求されたデータのコピーはそのデータに対応するタスクの処理内で実行されることが好適である。
【0022】
このようにすれば、プロセッサは、要求したデータのコピーが完了する間に、他のタスクの処理を行うことが可能なため、総合的なプロセッサの並列性を失うことがない。
【0023】
また、本発明において、第1のプロセッサのあるタスクが、第2のメモリ領域内のデータを要求する際に、第1のプロセッサの別のタスクが同一のデータを既に要求している場合には、重複した要求であることを示したデータ取得要求を通知メモリ領域に書き込むことが好適である。第2のプロセッサは、第1のプロセッサに係る複数のタスクから同一データの取得要求を受けている場合には、いずれか1つのデータ取得要求に対してのみデータのコピー処理を実行する。例えば、最も早く生じたデータ取得要求に対してデータコピー処理を行うことが考えられる。そして、コピー処理の対象となったデータ取得要求については、コピーが完了したことを通知する完了通知を通知メモリ領域に書き込むことが好適である。そして、第1のプロセッサは、要求したデータの完了通知が通知メモリ領域内にある場合には、同一のデータを要求している他のデータ取得要求が要求するコピー先に当該データのコピーを行うとともに、そのデータ取得要求のコピーが完了したことを通知メモリ領域に書き込むことが好適である。
【0024】
このようにすれば、第1のプロセッサから、第2のプロセッサの同一データに対して複数の取得要求が発生した場合に、第2のプロセッサの処理負荷を減らすことができる。
【0025】
なお、本発明は、上記処理の少なくとも一部を有するデータ同期方法として捉えることができる。また、本発明は、上記処理の少なくとも一部を実行するマルチプロセッサシステム、又は、かかる方法を実現するためのプログラムとして捉えることもできる。上記手段及び処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【0026】
例えば、本発明の一態様は、複数のプロセッサと、前記複数のプロセッサが共通してアクセス可能であり各プロセッサに割り当てられたメモリ領域及び通知メモリ領域を有する共有メモリと、を備えるマルチプロセッサシステムであって、各プロセッサが、他のプロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求を通知メモリ領域に書き込むデータ取得要求手段と、通知メモリ領域内の自プロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求を監視し、データ取得要求が存在する場合に、要求されたデータを要求元のプロセッサに割り当てられたメモリ領域内にコピーするとともに、コピーが完了したことを通知する完了通知を通知メモリ領域に書き込むデータコピー手段と、自プロセッサが要求したデータ取得要求の完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、自プロセッサに割り当てられたメモリ領域にコピーされたデータに基づいて処理を行うデータ処理手段と、を備えるマルチプロセッサシステムとして捉えることができる。
【発明の効果】
【0027】
本発明によれば、マルチプロセッサシステムにおいて、データの整合性を保証したデー共有が可能となる。
【発明を実施するための最良の形態】
【0028】
(第1の実施形態)
〈構成〉
本実施形態は、自動車等に搭載されたエンジンを制御するためのエンジン制御システムである。図1に示すように、本実施形態のエンジン制御システムは、2つのCPU1,2を備えている。また、CPU1,2が共通してアクセス可能なメモリ3を備えている。
【0029】
CPU1には、エンジンの冷却水温を検出するための水温センサ4と、エンジンの吸入空気温を検出するための吸気温センサ5が接続されている。CPU1は、定期的にセンサ入力処理を実行し、水温センサ4及び吸気温センサ5からの信号を入力しデジタルデータに変換して、メモリ3に格納する。
【0030】
CPU2には、エンジンに燃料を噴射する燃料噴射装置6が接続されている。CPU2は、定期的に噴射量決定処理を実行し、CPU1が更新した水温及び空気温に基づいて、燃料噴射装置6の燃料噴射量を決定する。
【0031】
なお、CPU1,2は上記のセンサ入力処理や噴射量決定処理以外の処理も並行して実行するよう構成されても良い。上記の説明ではCPU2からCPU1に一方的にデータの要求を行うだけであるが、CPU1,2のいずれも、他のCPUが実行するタスクに対してデータの要求をするとともに、要求されたデータを他CPUに渡すことが可能である。
【0032】
メモリ3は、図1及び図2に示すように、3つの領域3a,3b,3cに論理的に分割されている。メモリ領域3aはCPU1に割り当てられた領域であり、メモリ領域3bはCPU2に割り当てられた領域である。各CPUに割り当てられてメモリ領域は、基本的にそのCPUのみがアクセスを行う領域である。通知メモリ領域3cは、CPU1,2が共有するメモリ領域であり、この領域を介してCPU1,2はデータ取得のための情報をやりとりする。
【0033】
各割当領域3a,3bには、それぞれのCPUが実行するタスク(処理)の実行コードと、処理に用いる入力データと、処理結果として算出される出力データを格納する領域が、タスク毎にあらかじめ定められている。各タスクに割り当てられる領域は、連続した領域である必要はないが、本実施形態では連続した領域としている。また、各CPUに割り当てられる領域(3a,3b)も連続した領域である必要はないが、本実施形態では連続した領域としている。
【0034】
通知メモリ領域3cには、異なるCPUのタスク間でデータを受け渡すためのデータ取得要求メッセージが格納される。本実施形態では、通知メモリ領域3cは、異なるCPUのタスク間でデータのやりとりがある分だけあらかじめ用意するものとする。ただし、データの要求があるときだけ、必要な領域を確保しても構わない。
【0035】
図3は、通知メモリ領域3cに書き込まれる、データ取得要求7のフォーマットの例を示す図である。データ取得要求7は、状態7a、コピー元アドレス7b及びコピー先アドレス7cを含む。状態7aには、「要求無し」「要求」「処理完了」の3つの状態のいずれかが格納される。「要求」は、一方のCPUから他のCPUに対してデータの要求が依頼されている状態であることを示す。「処理完了」は、データの要求を依頼されたCPUが、そのデータのコピーを完了したことを示す。「要求無し」は、上記以外の状態であり、要求がないことを示している。
【0036】
コピー元アドレス7bには、取得したいデータのアドレスが格納される。上記のように、CPU2が実行する噴射量決定タスクが、CPU1が実行するセンサ入力処理から、水温データを取得したい場合には、CPU1に割り当てられているメモリ領域3a内の水温
データが格納されているアドレスを指定する。
【0037】
コピー先アドレス7cには、要求したデータのコピー先のアドレスが格納される。上記の例では、CPU2に割り当てられているメモリ領域3b内のアドレスを指定する。
【0038】
なお、データ取得要求メッセージ7は、要求の状態と、どのデータをどこにコピーすべきかという情報をやりとりできる形式であれば、どのようなフォーマットも採用可能である。例えば、どのデータを取得したいかという情報はデータの格納されたコピー元アドレスを直接指定するのではなく、データ毎に識別子(ID)をあらかじめ定めておき、そのIDを指定するようにしても良い。同様にコピー先アドレスの指定も、アドレスを直接指定するのではなく、その他の方法によって通知しても良い。
【0039】
このように、各CPUは通知メモリ領域3c内のデータ取得要求メッセージを利用して、データの要求及びコピー処理を実行する。
【0040】
〈処理フロー〉
次に、各CPUが行う処理の流れを図4のフローチャートを参照して説明する。図4のフローチャートは、CPUがある1つのタスクを実行する際の処理の流れを示すフローチャートである。CPUが複数のタスクを実行可能な場合には、実行可能状態にあるタスクのうち最も優先度の高いタスクの実行を行う。
【0041】
図4のフローチャートは、データを要求する側のタスクとしての処理を表すS1(S10〜S15)と、データをコピーする側のタスクとしての処理を表すS2(S20〜S22)の2つの部分からなる。各CPUは、データを要求する側及びデータをコピーする側の両方を実行可能なように、S1とS2の両方を実行する。
【0042】
まず、データを要求する側のタスクとしての処理S1について説明する。CPUが実行可能な処理が存在するかを判定する(S10)。他のCPUが実行しているタスクに対してデータの取得要求を出している間(要求先からのコピーが未完了)は、処理を続行することができないので、ステップS20に進む。一方、データ取得要求メッセージが処理された後又は他のCPUに対してデータ取得要求メッセージを出していない場合には、タスク処理を実行可能であり、ステップS11に進む。
【0043】
ステップS11では、以前に要求したデータ取得要求メッセージのステータス7aとして「処理完了」となっているものが通知メモリ領域3c内に存在するか判定し、存在する場合には、データ取得要求メッセージのステータス7aを「要求無し」に変更する(S12)。あるいは、データ取得要求メッセージを通知メモリ領域3cから削除してしまっても構わない。
【0044】
次に、自タスクに関する処理を行う(S13)。データの取得要求を出していた場合には、自タスクに割り当てられているメモリ領域内にコピーされたデータを参照して処理を行う。そして、他のCPUが実行しているタスクからデータを取得する必要があるか判定する(S14)。ここで、他のCPUからデータを取得する必要があれば、データ取得要求メッセージを通知メモリ領域に書き込む(S15)。このデータ取得要求メッセージの、ステータス7aは「要求」とする。
【0045】
次に、データをコピーする側のタスクとしての処理S2について説明する。タスクは、通知メモリ領域3cを参照して、自タスクに割り当てられた領域内のデータを要求するデータ取得要求メッセージが存在するか調べる(S20)。これは、通知メモリ領域3c内にあるデータ取得要求メッセージのコピー元アドレス7bを調べることで判定できる。
【0046】
自タスクのデータが他のCPUで実行されるタスクから要求されている場合には、そのデータを、データ要求通知のコピー先アドレス7cにコピーする(S21)。そして、通知メモリ領域3c内のデータ取得要求メッセージの状態7aを「処理完了」に変更する(S22)。なお、ステップS21では、あるCPUのタスクに割り当てられたメモリ領域から、他のCPUのタスクに割り当てられたメモリ領域にデータのコピーを行うが、データ要求側のCPUはデータ要求中にそのメモリ領域へのアクセスをしないようにすれば、書き込み時のロック処理等は不要である。なお、データ要求中(未取得時)に要求側のCPUがそのメモリ領域にアクセスできないようにする機構は、単にプログラムをそのようなロジックで記述することで実現しても良いし、メモリ領域へのアクセス前にデータ取得の要求を監視することで実現しても良い。
【0047】
データを要求した側のタスクでは、通知メモリ領域3c内のデータ取得要求メッセージのステータスをチェックすることで、データのコピーが完了しているか否かを判定することができる。
【0048】
〈動作例〉
図5に、CPU1のセンサ入力タスクがセンサからデータの入力を行い、CPU2の噴射量決定タスクがセンサ入力タスクから水温及び空気温データを受け取って噴射量を決定する場合を例に、具体的な動作例を説明する。なお、各タスクが行う処理の内容自体はどのようなものであっても良いことは明らかであろう。
【0049】
CPU2の噴射量決定タスクが、CPU1のセンサ入力タスクからデータを取得するために、データ取得要求メッセージを通知メモリ領域3cに書き込む。なお、図では1つのデータ取得要求メッセージのみが書き込まれているが、複数のデータを要求する場合には、1つのデータ取得要求メッセージで複数のデータを取得可能としても良いし、それぞれのデータについてデータ取得通知を書き込むこととしても良い。
【0050】
CPU1のセンサ入力タスクでは、通知メモリ領域3cを参照して、自タスクに対するデータ取得要求が存在するか判定する。なお、この判定は、センサ入力タスクの処理、すなわちまとめて更新する必要のある水温及び空気温データを更新した後に行われる。CPU1のセンサ入力タスクは、通知メモリ領域3cにデータ取得要求メッセージがあるので、その通知の内容にしたがってアドレスS1に格納されたデータを、アドレスD1にコピーする。そして、データ取得要求メッセージのステータスを「処理完了」に更新する。
【0051】
データ取得の要求を出した噴射量決定タスク側では、適当なタイミングで通知メモリ領域3c内のデータ取得要求メッセージのステータスをチェックする。このステータスが「要求」のままである場合には、まだデータのコピーが行われていないことが分かるので、処理を続行しない。逆に、データ取得要求メッセージ内のステータスが「処理完了」となっている場合には、データのコピーが完了していることが分かるので、取得したデータ(アドレスD1のデータ)を参照して、処理を続行することができる。
【0052】
図6,7を参照して本実施形態によるデータ同期方法の利点について説明する。図6,7はいずれも、各処理のタイミングを表したタイミングチャートである。
【0053】
図6の例では、CPU1がセンサからの入力データを更新中に、CPU2の噴射量決定タスクが水温及び空気温の取得を要求している。この時点では、CPU1のセンサ入力タスクは、ひとまとめで更新する必要のあるデータ更新を行っている最中なので、データ要求に対して応答しない。そして、水温及び空気温の両方の更新が終わった後で、CPU2の噴射量決定タスクからのデータ要求にしたがって、データのコピーを行う。そして、C
PU2側では、データ所得要求が完了されたことを検知したときには、噴射量決定タスクに割り当てられたメモリ領域内に、水温及び空気温のデータが更新されているので、これを用いて処理を続行することができる。
【0054】
このように、CPU1側では、ひとまとまりで更新する必要のあるデータを更新している最中にはデータコピーには対応せず、ひとまとまりの更新処理が終わった後でデータコピーを行うので、データの整合性を保証することができる。
【0055】
また、CPU2側のデータを要求したタスクの処理は、データのコピーが完了するまで待ち状態となるものの、要求を受けた側のタスクの処理はデータコピーの際にロック等を取得する処理を行わなくて良いので処理が簡潔で高速になる。また、データを要求した側のタスクは、通知メモリ領域内を参照するだけでデータの取得が完了しているか分かるので、処理が簡潔で高速になる。また、CPU2側でも、データを要求したタスクが待ち状態にある場合には、他のタスクを実行可能であるため、全体として並列性を損ねることがない。
【0056】
次に、図7を例に説明する。図7の例では、データを要求した側のタスクが通知メモリ領域を参照してデータの取得が完了したか判断する時点で、データを要求された側のタスクは既にデータのコピーを完了しており、かつ、さらに新たなセンサ入力によってデータを更新している。このような場合であっても、CPU1側からCPU2側にデータのコピーが完了しているので、CPU1側で新たにデータを更新していても、CPU2側にはロック待ち等が発生せずにすぐに処理を継続することができる。
【0057】
図7からも分かるように、データの取得を要求するタスクが取得完了を判定する時間間隔と、要求された側のデータ更新の時間間隔は異なっていても構わない。つまり、センサ入力タスク側では比較的頻繁にデータを更新し、噴射量決定タスクではデータ取得要求を出してからデータ取得完了をチェックするまで時間が空いても構わない。このような場合であっても、噴射量決定タスクがデータ取得を要求した時点でのデータが、噴射量決定タスクに割り当てられたメモリ領域にコピーされているので、データ取得要求を出したタイミングでの整合性の取れたデータを元に処理を継続することができる。
【0058】
〈実施形態の作用/効果〉
本実施形態によれば、新たなハードウェア等を設けることなくソフトウェアによる処理によって、データの整合性を保証してプロセッサ間でデータの共有を行うことができる。ソフトウェアによる対応であるため、新たなハードウェアを設けることに伴う、コストの上昇や装置の大型化などの問題を招くことがない。
【0059】
この際、データ要求中は要求する側のタスク(CPU)がメモリ領域にアクセスしないことで、要求された側のタスク(CPU)はロック処理を行わずに、データのコピー処理を実行することができる。また、データを要求する側のタスクは、通知メモリ領域内のステータスを見るだけでコピー完了か否かを判定しているので、ここでもロック処理は不要となる。つまり、ロック処理を用いることなくデータの共有を実行することができる。
【0060】
また、データのコピーを行っているため、データがコピーされた後であれば、データを要求した側のタスクは、いつでもそのデータを参照して処理を行うことができる。データを要求された側のタスクからすれば、要求されたデータをコピーしてしまえば、それ以上データ取得要求のことを気にする必要はなくなり、要求がタスクがコピーされたデータを参照しているか否かに関わりなく、自タスクに割り当てられたメモリ領域内でデータの更新を行うことが可能となる。
【0061】
また、このようなデータ共有方法によれば、1つのプロセス/スレッドで、複数のデータ要求を同時に出すことが可能となる。各データの取得を順次行う方法では待ち時間が多大になり、複数のスレッドを生成する方法ではオーバヘッドが大きくなるが、本方法によれば1スレッド内で同時に要求ができるので、処理負荷や待ち時間が少ない高速な処理が実現できる。
【0062】
(第2の実施形態)
〈概要〉
第1の実施形態では、データを要求されたタスクが、各要求に対応してデータのコピー処理を実行している。ここで、図8に示すような状況を考える。図8Aでは、CPU2が実行している複数のタスクが、CPU1のタスクに対してデータ取得の要求を発行している。第1の実施形態に記載の方法では、図8Aに示す状況下では、各データ取得要求に対してCPU2が対応することになる。すなわち、CPU1が実行するタスクに割り当てられたメモリ領域から、CPU2が実行する各タスクに割り当てられた各メモリ領域へのコピー処理が複数回(図8Aでは3回)実行されることになる。
【0063】
あるタスクへの重複するデータ要求の数が多大になった場合、データを要求されたタスクでは要求数に応じた回数だけコピー処理を行わなければならず、処理負荷が過大になってしまう。そこで、図8B,Cに示すように、CPU1が実行するタスクは、CPU2が実行するタスクに対して1回だけコピー処理を実行する(図8B)ようにし、残りのデータ要求に対してはCPU2の中で各タスクに対してコピー処理を実行する(図8C)ことができれば、CPU1にデータ取得要求が集中した場合であっても過度な負荷がかかることを防止できる。
【0064】
上記のような仕組みを実現するために、データ取得要求メッセージ7の状態7aとして、新たに、同一CPUが実行するタスクが既に要求しているデータを重複して要求することを示す「重複要求」のステータスを新たに設ける。同じデータを要求しているので、コピー元アドレス7bは、重複した要求の間で同じものとなる。一方、コピー先アドレス7cは、データを要求したタスクに割り当てられている領域となるため相違する。
【0065】
〈処理フロー〉
図9を用いて、本実施形態におけるデータ共有方法の処理の流れを説明する。図9のフローチャートは、第1の実施形態におけるデータ共有方法のフローチャート(図4)のデータを要求する側としての処理(S1)に相当する部分だけ示している。データをコピーする側としての処理(S2)は、第1の実施形態と同じなので、図9では省略している。
【0066】
第1の実施形態との違いは、ステップS12の後にステップS16〜S18が設けられている点と、ステップS15がステップS15−1,2,3に置き換えられている点である。
【0067】
まず、ステップS16〜S18の処理について説明する。この処理は、同一データを重複して要求したCPU側で、データのコピーを行う処理(図8C)に相当する。
【0068】
以前に要求したデータ取得要求メッセージのステータスが「処理完了」となっているものがあると判定され(S11−YES)、そのステータスを「要求無し」と書き換えた(S12)後に、通知メモリ領域内にこのデータ要求と重複したデータ要求があるか判定する(S16)。重複したデータ要求があるか否かは、通知メモリ領域内に、ステータスが「重複要求」であり、コピー元アドレスが一致する、データ取得要求メッセージが格納されているか否かで判断することができる。
【0069】
なお、3つ以上のプロセッサを有するマルチプロセッサシステムの場合は、同一のプロセッサの別タスクが同じデータを要求しているか否かを判断する必要がある。これは、コピー元アドレスが一致し、かつ、コピー先アドレスが同一プロセッサに割り当てられた割当領域内のアドレスであるデータ取得要求メッセージが、通知メモリ領域内に存在するか調べることで実現可能である。
【0070】
そして、重複するデータ取得要求がある場合(S16−YES)には、自プロセッサに割り当てられて領域内でデータのコピー処理を行う(S17)(図8Cに相当)。そして、重複要求のデータ取得要求メッセージのステータスを「処理完了」に更新する(S18)。
【0071】
次に、ステップS15−1〜3の処理について説明する。この処理は、データ取得要求メッセージを通知メモリ領域に書き込む際に、重複した要求であるか否かを判定し、重複した要求である場合はその旨が判断できるメッセージを通知メモリ領域に書き込む処理である。
【0072】
他のCPUのデータが必要と判定された場合(S14−YES)のデータ取得要求の書き込み時には、通知メモリ領域3cを確認して、同一プロセッサが実行する他のタスクが、同じデータに対する要求を既に発行しているか否かを判定する(S15−1)。同一データに対する要求が既に存在するか否かは、通知メモリ領域3c内に、コピー元アドレス7bが一致する要求が既に存在するか否かで判断することができる。
【0073】
同一データに対する要求が存在しない場合(S15−1−NO)は、ステータスが「要求」であるデータ取得要求メッセージを通知メモリ領域3c内に格納する(S15−2)。一方、同一データに対する要求がすでに存在する場合(S15−1−YES)は、ステータスが「重複要求」であるデータ取得要求メッセージを通知メモリ領域3c内に格納する(S15−3)。
【0074】
〈動作例1〉
図10に、CPU1が車輪速データタスクがセンサからデータの入力を行い、CPU2のABS制御タスク及びカーナビタスクが、それぞれ車輪速データを受け取って処理を行う場合を例に、具体的な動作例を説明する。なお、各タスクが行う処理の内容自体はどのようなものであっても良いことは明らかであろう。
【0075】
まず、ABS制御タスクが、車輪速データを要求するデータ取得要求メッセージAを通知メモリ領域3cに書き込む。ここでは、重複するデータ取得要求は存在しないので、データ取得要求メッセージAのステータス7aは「要求」となる。また、コピー元アドレス7bはS1、コピー先アドレス7cはD1とする。
【0076】
次に、カーナビタスクが、同様に車輪速データを要求するデータ取得要求メッセージBを通知メモリ3cに書き込む。ここでは、既にABS制御タスクが同一データに対する要求Aを発行しているので、データ取得要求メッセージBのステータス7aは「重複要求」となる。また、コピー元アドレス7bはABS制御タスクの要求Aと同じくS1であり、コピー先アドレス7cは自タスクのメモリ領域内のアドレスとなるのでD2となりABS制御タスクの要求Aとは異なる。
【0077】
CPU1の車輪速データ取得タスクが、通知メモリ領域3cを参照して、自タスクの目メモリ領域内のデータに対する取得要求があるかチェックする。このとき、ステータスが「要求」と「重複要求」の2つのデータ取得要求A,Bが通知されていることが分かるが、車輪速データ取得タスク側では、ステータスが「要求」であるデータ取得要求メッセー
ジAのみに対応する。すなわち、アドレスS1に格納されているデータを、アドレスD1のみにコピーする。そして、対応したデータ取得要求メッセージAのステータスを「処理完了」に更新する。
【0078】
次に、ABS制御タスクが、通知メモリ領域3cを参照して、自タスクが要求したデータ取得要求が処理されたか判定する。データ取得要求のステータスが「処理完了」となっていることから、データの取得が完了していることが分かる。そして、ABS制御タスクは、重複するデータ取得要求メッセージBが存在することも分かるので、CPU2に割り当てられて領域内でメモリのコピー(D1からD2へ)を行う。そして、データ取得要求メッセージAのステータスを「要求無し」に、データ取得要求メッセージBのステータスを「処理完了」に更新する。そして、ABS制御タスクは、アドレスD1にコピーされたデータを参照して処理を行う。
【0079】
カーナビタスクが通知メモリ領域3cを参照するときには、自タスクが要求したデータ取得要求メッセージBのステータスが「処理完了」となっていることから、このステータスを「要求無し」に変更し、アドレスD2にコピーされたデータを参照して処理を行う。
【0080】
〈動作例2〉
上記の動作例では、先に要求を出したABS制御タスクがCPU2内でのコピーを行っているが、CPU1に要求したデータがCPU2にコピーされたことを最も先に検知したタスクがCPU2への割り当てメモリ領域内でのコピーを行えばよい。ここでは、後から要求を出したカーナビタスクがCPU2への割り当てメモリ領域内でのコピー処理を実行する動作例を図11を参照して説明する。
【0081】
ABS制御タスク及びカーナビタスクがデータ取得要求を通知メモリ領域内に格納し、車輪速取得タスクが要求されたデータのコピー(S1からD1へ)を行うところまでの処理は上記動作例1と同じであるため、説明を省略する。
【0082】
ここで、データ取得要求メッセージAのステータスが「処理完了」となっていることから、CPU間でのコピー処理が完了していることが分かる。そこで、CPU2の割り当てメモリ領域内でデータのコピー(D1からD2へ)行い、データ取得要求メッセージBのステータスを「要求無し」に更新する。そして、カーナビタスクは、アドレスD2にコピーされたデータを参照して処理を行う。
【0083】
ABS制御タスクが通知メモリ領域3cを参照するときには、自タスクが要求したデータ取得要求メッセージAのステータスが「処理完了」となっていることから、このステータスを「要求無し」に変更し、アドレスD1にコピーされたデータを参照して処理を行う。なお、ABS制御タスクが通知メモリ領域3cを参照するタイミングでは、データ取得要求メッセージBのステータスは「重複要求」ではなくなっているので、動作例1で行ったようなコピー処理をABS制御タスクは行わない。
【0084】
〈実施例の作用/効果〉
本実施形態に係る方法によれば、同じCPUの複数のタスクから、同一のデータに対して複数の要求があった場合に、要求された側のCPUの処理負荷を軽減することが可能となる。
【0085】
(変形例)
上記の説明では、メモリ通知領域を介したメッセージ交換を、データ取得要求メッセージのステータス領域を書き換えることによって行っているが、他の方法によるメッセージ交換を行っても良い。例えば、コピー処理の完了を通知する場合に、その旨を通知するメ
ッセージを新たに通知メモリ領域に書き込んでも構わない。
【0086】
また、上記の説明では、2つのCPUを有する構成を例に説明したが、図12に示すようなCPUの数が3つ以上の場合であっても、同様の方法によりプロセッサ間でデータ共有を行うことができる。
【0087】
なお、この場合もメモリ3の領域は各CPU毎に領域が割り当てられているので、データ取得要求メッセージのコピー元アドレスやコピー先アドレスを参照することで、どのCPUに係るタスクのデータに対する取得要求であるかや、どのCPUに係るタスクがデータの取得を要求しているかなどを判断することができる。
【0088】
また、図13に示すように、1つのCPUが複数のプロセッサコアを有しているマルチコアCPUであっても、プロセッサコア間でのデータ同期が行える。この場合、各プロセッサコアが本発明のプロセッサに相当する。
【図面の簡単な説明】
【0089】
【図1】第1及び第2の実施形態におけるシステム構成を表す概要図である。
【図2】通知メモリ領域のメモリ構造を示す図である。
【図3】データ取得要求メッセージのフォーマットを示す図である。
【図4】第1の実施形態における、プロセッサ間でデータ交換を行う際の処理の流れを示すフローチャートである。
【図5】第1の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図6】第1の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図7】第1の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図8】第2の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図9】第2の実施形態における、プロセッサ間でデータ交換を行う際の処理の流れを示すフローチャートである。
【図10】第2の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図11】第2の実施形態におけるプロセッサ間でのデータ交換処理を説明する図である。
【図12】変形例に係るシステム構成を表す概要図である。
【図13】変形例に係るシステム構成を表す概要図である。
【符号の説明】
【0090】
1,2 CPU
3 メモリ(RAM)

【特許請求の範囲】
【請求項1】
第1のプロセッサと、
第2のプロセッサと、
第1及び第2のプロセッサが共通してアクセス可能な共有メモリであって、第1のプロセッサに割り当てられた第1のメモリ領域と、第2のプロセッサに割り当てられた第2のメモリ領域と、通知メモリ領域とを有する共有メモリと、
を備えるマルチプロセッサシステムにおけるデータ同期方法であって、
第1のプロセッサが、第2のメモリ領域内のデータを要求するデータ取得要求を通知メモリ領域に書き込むステップと、
第2のプロセッサが、第2のメモリ領域内のデータを要求するデータ取得要求が通知メモリ領域内に存在するか監視し、データ取得要求が存在する場合は、要求されたデータを第2のメモリ領域から第1のメモリ領域にコピーするとともにコピーが完了したことを通知する完了通知を通知メモリ領域に書き込むステップと、
第1のプロセッサが、要求したデータについての完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、第1のメモリ領域にコピーされたデータに基づいて処理を行うステップと、
を含むことを特徴とするマルチプロセッサシステムにおけるデータ同期方法。
【請求項2】
通知メモリ領域に書き込まれるデータ取得要求には、データ取得要求処理の処理状況を格納するステータス領域が含まれており、
第1のプロセッサによるデータ取得要求の書き込みは、データ取得を要求している状態であることを示すステータスを含むデータ取得要求を通知メモリ領域に書き込むことによって行われ、
第2のプロセッサによる完了通知の書き込みは、前記データ取得要求のステータス領域をコピー完了であることを示すステータスに書き換えることによって行われる、
ことを特徴とする請求項1に記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項3】
第2のプロセッサによる要求されたデータのコピーは、該データの整合性が取れているタイミングで実行される
ことを特徴とする請求項1又は2に記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項4】
第1及び第2のプロセッサは各々複数のタスクを実行するものであり、
タスクの実行コードと該タスクが使用するデータは、該タスクを実行するプロセッサに対応するメモリ領域内の、タスク毎に割り当てられた領域に格納されており、
データ取得の要求は、データを要求するタスク毎に実行されるものであり、
要求されたデータのコピーは、要求されたデータに対応するタスクの処理内で実行される
ことを特徴とする請求項1〜3のいずれかに記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項5】
第1のプロセッサのあるタスクが第2のメモリ領域のデータを要求する際に、第1のプロセッサの別のタスクが同一のデータを既に要求している場合には、重複した要求であることを示したデータ取得要求を通知メモリ領域に書き込み、
第2のプロセッサは、同一データに対して第1のプロセッサの複数のタスクからデータ取得の要求がある場合には、複数のデータ取得要求のうちのいずれかのデータ取得要求が要求するコピー先に該データをコピーするとともに、該データ取得要求のコピーが完了したことを通知する完了通知を通知メモリ領域に格納し、
第1のプロセッサが、要求したデータについての完了通知が通知メモリ領域内に存在するか監視し、完了通知が存在する場合には、同一のデータを要求している他のデータ取得要求が要求するコピー先に該データのコピーを行うとともに、当該他のデータ取得要求のコピーが完了したことを通知メモリ領域に書き込む
ことを特徴とする請求項4に記載のマルチプロセッサシステムにおけるデータ同期方法。
【請求項6】
複数のプロセッサと、
前記複数のプロセッサが共通してアクセス可能な共有メモリであって、各プロセッサに割り当てられたメモリ領域及び通知メモリ領域を有する共有メモリと、
を備えるマルチプロセッサシステムであって、
各プロセッサが、
他のプロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求を通知メモリ領域に書き込むデータ取得要求手段と、
自プロセッサに割り当てられたメモリ領域内のデータを要求するデータ取得要求が通知メモリ領域内に存在するか監視し、データ取得要求が存在する場合は、要求されたデータを要求元のプロセッサに割り当てられたメモリ領域内にコピーするとともに、コピーが完了したことを通知する完了通知を通知メモリ領域に書き込むデータコピー手段と、
自プロセッサが要求したデータ取得要求の完了通知が通知メモリ領域に存在するか監視し、完了通知が存在する場合は、自プロセッサに割り当てられたメモリ領域にコピーされたデータに基づいて処理を行うデータ処理手段と、
を備えることを特徴とするマルチプロセッサシステム。
【請求項7】
通知メモリ領域に書き込まれるデータ取得要求には、データ取得要求処理の処理状況を格納するステータス領域が含まれており、
前記データ取得要求手段は、データ取得を要求している状態であることを示すステータスを含むデータ取得要求を通知メモリ領域に書き込み、
前記データコピー手段が行う完了通知の書き込み処理は、通知メモリ領域に書き込まれたデータ取得要求のステータス領域をコピー完了であることを示すステータスに書き換えることによって行われる、
ことを特徴とする請求項6に記載のマルチプロセッサシステム。
【請求項8】
前記データコピー手段は、要求されたデータの整合性が取れているタイミングで、要求されたデータのコピーを実行する
ことを特徴とする請求項6又は7に記載のマルチプロセッサシステム。
【請求項9】
各プロセッサは、各々複数のタスクを実行するものであり、
タスクの実行コードと該タスクが使用するデータは、各プロセッサに対応するメモリ領域内の、タスク毎に割り当てられた領域に格納されており、
データ取得の要求は、データを要求するタスク毎に実行されるものであり、
要求されたデータのコピーは、要求されたデータに対応するタスクの処理内で実行される
ことを特徴とする請求項6〜8のいずれかに記載のマルチプロセッサシステム。
【請求項10】
前記データ取得要求手段は、あるタスクが他のプロセッサに割り当てられたメモリ領域内のデータを要求する際に、別のタスクが同一データを要求している場合には、重複した要求であることを示したデータ取得要求を通知メモリ領域に書き込み、
前記データコピー手段は、同一データに対して同一プロセッサの複数のタスクからデータ取得の要求がある場合には、複数のデータ取得要求のうちのいずれかのデータ取得要求が要求するコピー先に該データをコピーするとともに、該データ取得要求のコピーが完了
したことを通知する完了通知を通知メモリ領域に格納し、
データ処理手段は、要求したデータについての完了通知が通知メモリ領域内に存在するか監視し、完了通知が存在する場合には、同一のデータを要求している他のデータ取得要求が要求するコピー先に該データのコピーを行うとともに、当該他のデータ取得要求のコピーが完了したことを通知メモリ領域に書き込む
ことを特徴とする請求項9に記載のマルチプロセッサシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate