(57)【要約】複数のプロセッサ１０１〜１０ｍと、プロセッサ１０１〜１０ｍに接続された共有メモリ１２０と、プロセッサ１０１〜１０ｍに接続されたタイマ１３０とを有するマルチプロセッサシステム１００である。共有メモリ１２０は、プロセッサ１０１〜１０ｍの間での通信データを格納するバッファ用領域部と収支カウンタ部を有する。バッファ用領域部は、それぞれがいずれか１つのプロセッサ１０１〜１０ｍに対応する複数のバッファ用領域を含んでいる。プロセッサ１０１〜１０ｍは、タイマ１３０によって通知されるタイミングごとにバッファ用領域を受け渡しする。収支カウンタ部は、受け渡したバッファ用領域の増減を管理する。
2010119932.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算処理手段と、
複数の前記演算処理手段に接続された記憶手段と、
複数の前記演算処理手段に接続された同期イベント通知手段とを有し、
前記記憶手段は、複数の前記演算処理手段の間での通信データを格納するバッファ用領域部と収支カウンタ部を有し、
前記バッファ用領域部は、それぞれがいずれか１つの前記演算処理手段に対応する複数のバッファ用領域を含んでおり、
前記演算処理手段は、前記同期イベント通知手段によって通知されるタイミングごとに前記バッファ用領域を受け渡し、
前記収支カウンタ部は、受け渡した前記バッファ用領域の増減を管理することを特徴とするマルチプロセッサシステム。
【請求項２】
前記収支カウンタ部は、それぞれがいずれか１つの前記演算処理手段に対応する複数の収支カウンタ領域を含んでおり、
前記収支カウンタ領域は、前記演算処理手段ごとに一つずつ設けられ、
前記演算処理手段と他の前記演算処理手段との間で前記バッファ用領域の増減が発生した場合に、この増減の合算値を保持することを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記演算処理手段は、前記収支カウンタ領域に保持された値を用いて前記バッファ用領域を受け渡すことを特徴とする請求項２に記載のマルチプロセッサシステム。
【請求項４】
前記収支カウンタ部は、さらに収支カウンタ調整領域を含み、
前記収支カウンタ調整領域は、予め任意の２つの前記演算処理手段の間で次に受け渡される前記バッファ用領域の個数を決める指標値を保持することを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項５】
複数の前記演算処理手段のうちの一つが、前記収支カウンタ調整領域に書き込む前記指標値を生成することを特徴とする請求項４に記載のマルチプロセッサシステム。
【請求項６】
複数の前記演算処理手段は、異なる特定の前記演算処理手段に対して所有権を譲渡する前記バッファ用領域の個数と前記収支カウンタ調整領域で保持された値との大小を比べ、前記収支カウンタ調整領域で保持された値の方が大きい場合には、その差分に相当する複数のバッファ用領域をさらに追加して譲渡することを特徴とする請求項４に記載のマルチプロセッサシステム。
【請求項７】
前記バッファ用領域には、複数の前記演算処理手段の間で通信される少なくとも一つのメッセージが格納されていることを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項８】
前記バッファ用領域には、前記メッセージを管理するためのヘッダ部が設けられていることを特徴とする請求項７に記載のマルチプロセッサシステム。
【請求項９】
前記ヘッダ部は前記メッセージの長さに相当する値を含むことを特徴とする請求項８に記載のマルチプロセッサシステム。
【請求項１０】
前記イベント通知手段は、予め決められた一定周期毎に割り込み信号によって複数の前記演算処理手段に前記タイミングを通知することを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項１１】
互いに通信を行う複数のプロセッサと、
複数の前記プロセッサからアクセス可能な共有メモリと、
複数の前記プロセッサにイベントを通知するタイマと、
収支カウンタとを有し、
前記共有メモリは、任意のある時刻において複数の領域に論理的に分割され、それぞれの領域はいずれかの前記プロセッサによって管理されており、
前記共有メモリのそれぞれの領域に対する管理は、前記イベントの通知が発生するごとに前記プロセッサ間で前記領域を受け渡しすることにより行われ、
前記収支カウンタは、前記領域を受け渡した前後で各プロセッサが管理する前記共有メモリのメモリ量の増減を保持し、
各プロセッサが管理する各領域の個数配分の偏りを、前記収支カウンタを用いて補正することを特徴とするマルチプロセッサシステム。
【請求項１２】
前記領域には、複数の前記プロセッサの間で通信される少なくとも一つのメッセージが格納されていることを特徴とする請求項１１に記載のマルチプロセッサシステム。
【請求項１３】
前記領域には、前記メッセージを管理するためのヘッダ部が設けられていることを特徴とする請求項１２に記載のマルチプロセッサシステム。
【請求項１４】
前記ヘッダ部は前記メッセージの長さに相当する値を含むことを特徴とする請求項１３に記載のマルチプロセッサシステム。
【請求項１５】
前記タイマは、予め決められた一定周期毎に割り込み信号によって複数の前記プロセッサに前記イベントを通知することを特徴とする請求項１１に記載のマルチプロセッサシステム。
【請求項１６】
互いに通信を行う複数のプロセッサと、複数の前記プロセッサからアクセス可能な共有メモリと、複数の前記プロセッサにイベントを通知するタイマとを有するマルチプロセッサシステムのメモリ管理方法において、
前記共有メモリを、任意のある時刻において複数の領域に論理的に分割し、
それぞれの領域をいずれかの前記プロセッサによって管理し、
前記共有メモリのそれぞれの領域に対する管理を、前記イベント通知が発生するごとに前記プロセッサ間で前記領域を受け渡しすることにより行い、
前記領域を受け渡しした前後で各プロセッサが管理する前記共有メモリのメモリ量の増減を保持し、
前記イベント通知が発生するごとに、前記領域の管理を前記プロセッサ間で交換し、
各プロセッサが管理する各領域の個数配分の偏りを、前記メモリ量の増減を用いて補正することを特徴とするマルチプロセッサシステムにおけるメモリ管理方法。
【請求項１７】
前記領域には、複数の前記プロセッサの間で通信される少なくとも一つのメッセージが格納されていることを特徴とする請求項１６に記載のマルチプロセッサシステムにおけるメモリ管理方法。
【請求項１８】
前記領域には、前記メッセージを管理するためのヘッダ部が設けられていることを特徴とする請求項１７に記載のマルチプロセッサシステムにおけるメモリ管理方法。
【請求項１９】
前記ヘッダ部は前記メッセージの長さに相当する値を含むことを特徴とする請求項１８に記載のマルチプロセッサシステムにおけるメモリ管理方法。
【請求項２０】
前記タイマは、予め決められた一定周期毎に割り込み信号によって複数の前記プロセッサに前記イベントを通知することを特徴とする請求項１６に記載のマルチプロセッサシステムにおけるメモリ管理方法。
【請求項２１】
複数のプロセッサ間の通信データを格納する領域を、予め共有メモリの複数のバッファ用領域に分割し、
ある時刻においてそれぞれの前記バッファ用領域の書き換え権をいずれかの前記プロセッサに割り振り、
前記通信データを前記バッファ用領域に格納し、
前記バッファ用領域をタイマ割込のタイミングで複数の前記プロセッサ間で入れ替えることにより前記通信データの送信を行い、
この入れ替えに伴って生じた前記バッファ用領域の個数に関する複数の前記プロセッサ間に跨る偏りを、前記プロセッサごとの増減量としてカウンタに格納し、
この増減量を使用して、次の通信時に前記バッファ用領域の個数を補正して平準化することを特徴とするマルチプロセッサシステムにおけるメモリ管理方法。
【請求項２２】
複数のプロセッサ間で交換する通信データを格納するための領域を、予め共有メモリの複数の部分領域に分割し、
分割した前記複数の部分領域を前記プロセッサにそれぞれ割り当て、
所定のタイミングで同時に複数の前記プロセッサ間で前記部分領域を受け渡し、
受け渡した前記部分領域の量をカウンタに保持し、
前記受け渡しの際、前記カウンタの値に満たない場合には、その差分をさらに送信することを特徴とするマルチプロセッサシステムにおけるメモリ管理方法。
【請求項２３】
互いに通信を行う複数のプロセッサと、複数の前記プロセッサからアクセス可能な共有メモリと、複数の前記プロセッサにイベントを通知するタイマとを有するマルチプロセッサシステムで実行可能な通信プログラムにおいて、
前記通信プログラムは、
前記共有メモリを、任意のある時刻において複数の領域に論理的に分割する処理と、
それぞれの領域をいずれかの前記プロセッサによって管理する処理と、
前記共有メモリのそれぞれの領域に対する管理を、前記イベント通知が発生するごとに前記プロセッサ間で前記領域を受け渡しすることにより行う処理と、
前記領域を受け渡した前後で各プロセッサが管理する前記共有メモリのメモリ量の増減を保持する処理と、
前記イベント通知が発生するごとに、前記領域の管理を前記プロセッサ間で交換して、各プロセッサが管理する各領域の個数配分の偏りを、前記メモリ量の増減を用いて補正する処理とを有することを特徴とするマルチプロセッサシステムで実行可能な通信プログラム。
【請求項２４】
前記領域には、複数の前記プロセッサの間で通信される少なくとも一つのメッセージが格納されていることを特徴とする請求項２３に記載のマルチプロセッサシステムで実行可能な通信プログラム。
【請求項２５】
前記領域には、前記メッセージを管理するためのヘッダ部が設けられていることを特徴とする請求項２４に記載のマルチプロセッサシステムで実行可能な通信プログラム。
【請求項２６】
前記ヘッダ部は前記メッセージの長さに相当する値を含むことを特徴とする請求項２５に記載のマルチプロセッサシステムで実行可能な通信プログラム。
【請求項２７】
前記タイマは、予め決められた一定周期毎に割り込み信号によって複数の前記プロセッサに前記イベントを通知することを特徴とする請求項２３に記載のマルチプロセッサシステムで実行可能な通信プログラム。
【請求項２８】
同時実行可能な異なる複数のプロセッサ上で実行される通信プログラムの間で
前記通信プログラムはそれぞれ異なる通信データ格納領域をそれぞれの時刻で排他的に所有しており、
外部イベントのタイミングで任意の通信プログラム間で所有している前記通信データ格納領域を受け渡し、
前記通信データ格納領域の受け渡しによって生じるデータ格納領域量の差分を保持し、
この差分に満たない通信データ格納領域を追加して送信するような処理を前記プロセッサに実行させることを特徴とするマルチプロセッサシステムで実行可能な通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサ間で共有メモリを介して通信するマルチプロセッサシステム、マルチプロセッサシステムにおけるメモリ管理方法及びマルチプロセッサシステムで実行可能な通信プログラムに関し、特に、周期処理を行う組込機器に用いるマルチプロセッサシステム、マルチプロセッサシステムにおけるメモリ管理方法及びマルチプロセッサシステムで実行可能な通信プログラムに関する。
【背景技術】
【０００２】
携帯電話や音楽・映像のポータブル再生機などに代表されるような民生用の組込機器においても、近年、処理すべきデータ量が増加している。このような組込機器の処理性能向上手段としては、演算器リソース量に応じた処理能力向上が可能なマルチコア技術が用いられることが一般的となりつつある。
組込機器において、マルチコアのプロセッサ間で多量のデータを授受させるにはいずれのプロセッサからもアクセス可能な共有メモリを介してデータを授受させる方式が都合よい。それは、プロセッサ間で扱うデータ量を格納するのに足りる程度の容量を持った共有メモリでは、ソフトウェアの実装次第でプロセッサ間の通信がフレキシブルな形で実現できて製品展開が容易になるためである。また共有メモリによれば、レジスタ等を介したプロセッサ間での通信に比べて単位データ量あたりの実装コストを低く抑えることができるためである。
ただし、複数のプロセッサで共有メモリを介して通信するには、データ領域もしくはそれに付随する管理情報を書き換える際に競合が生じないようにするプロセッサ間での排他制御機構が必要となる。ところが、排他制御機構を実装するには、そのためのハードウェア側での対応が必要であったり、ロック解除の待ち時間が発生したりして、実装コストや処理時間オーバーヘッドの面での欠点がある。またプロセッサ間での通信頻度が高くなるとその時間オーバーヘッドが増加し、システム全体の処理能力に与える影響がより顕著となる。
この明示的な排他制御を回避する手段として、一つのプロセッサに書き換え権を固定する方法が特表２００７−５０３０５３号公報（特許文献１）（第６頁、図１）に開示されている。この既存の共有メモリを用いるプロセッサ間通信装置は、共有メモリを管理する第１のプロセッサと、第１のプロセッサによって逐次に割り当てられた共有メモリ上のバッファを用いて第１のプロセッサにメッセージ送信する第２のプロセッサと、それらに接続された共有メモリとから構成されている。
このような構成を有するプロセッサ間通信装置は次のように動作する。すなわち、第２のプロセッサから第１のプロセッサへメッセージ送信する必要があるときに、まず、第２のプロセッサはプロセッサ間の通信に用いる空のメッセージ・バッファの確保を第１のプロセッサに要求する。すると、第１のプロセッサは共有メモリ上にメッセージ・バッファを確保してその位置を表すポインタを第２のプロセッサへ通知する。第２のプロセッサはこのポインタ位置にあるバッファへメッセージを格納した後、その旨を第１のプロセッサへ送信する。
さらに、プロセッサ間の通信手段としてリングバッファを用いることで排他制御による時間オーバーヘッドを回避したマルチプロセッサバッファシステムが特開平６−１２３８３号公報（特許文献２）（第１２頁、図２）に開示されている。複数のプロセッサと、任意の２つのプロセッサの間に双方向それぞれ一つずつ置かれたリングバッファとから構成されている。第１のプロセッサはリングバッファに通信データを追加するためのポインタを占有して更新する権利を有し、第２のプロセッサはリングバッファから通信データを読み出し済みであることを表すポインタを占有して更新する権利を有する。
このような構成を有するリングバッファを用いるマルチプロセッサバッファシステムは次のように動作する。第１のプロセッサはリングバッファ上のポインタによって指されたアドレスに送信したいデータを書き込む。第２のプロセッサはこれとは別のポインタを持ち、読み出した分だけポインタを先に進める。
これらの動作により、第１のプロセッサから第２のプロセッサへリングバッファを介してデータを送信しつつ、第２のプロセッサが更新したポインタを第１のプロセッサが参照することで以前に送信に使った領域ですでに使用済みの領域を再利用することが可能となる。すなわち、第１のプロセッサから第２のプロセッサにデータを送り、第２のプロセッサから第１のプロセッサに空き領域を返却するという手続きが結果として実現されている。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、プロセッサ間で通信が頻繁に発生するシステムに対して、特許文献１及び特許文献２による方法を適用するにはいくつかの問題がある。
第１の問題点は、プロセッサ間の通信における処理時間オーバーヘッドを抑制するための対策が不十分ということである。その理由は、通信データの個数に比例して、もしくはそれ以上に通信処理時間が増加してしまう仕組みをもつためである。
特許文献１において、送信側のプロセッサは通信が発生するたびにバッファ確保要求を受信側のプロセッサへ行う必要があり、この行為にかかる処理時間オーバーヘッドは通信データ数に比例して増加することになる。さらに、送信側のプロセッサではメモリの空き状況を直接自身で管理していないため、一時的にメモリ確保ができない状況であってもそれが直ちにはわからず、領域が確保されるまでデータ要求を繰り返し行わなければならず、これも時間オーバーヘッドとなりうる。
特許文献２においては、すでに別のプロセッサによって通信用に格納されたデータをさらに別のプロセッサへ送信する必要があるときにリングバッファ間で通信データのコピーが発生するためである。たとえば、第１のプロセッサから第２のプロセッサに送信されたメッセージを、さらに第３のプロセッサで受信させるためには、第１のプロセッサと第２のプロセッサの間にあるリングバッファを用いてメッセージを受信した後、第２のプロセッサと第３のプロセッサの間にあるリングバッファへ改めてコピーをする必要がある。
第２の問題点は、複数のプロセッサ間でデータを授受するのに用いる共有メモリの総量を抑制するための対策が不十分ということである。その理由は、システム全体として必要な総共有メモリ量の最大値に比べて、個々のプロセッサ間で必要な共有メモリ量の最大値の和は大きくなってしまう可能性が大きいためである。これは、任意の２つのプロセッサ間ごとに占有する固定量の共有メモリを用意しなければならず、通信量が動的に変化することを考えると個々のプロセッサ間ごとに通信に必要な最大メモリ量を確保する必要があることに起因する。
特許文献１において、プロセッサ毎に受信のための共有メモリがそれぞれ独立に用意される必要があり、特許文献２においても、任意の２つのプロセッサ間で双方向にリングバッファが予め固定的に用意されていることが想定されている。
本発明の目的は、上述した課題を解決するための技術を提供することにあり、プロセッサ間でデータを授受する機能を有するシステムにおいて、プロセッサ間の通信量に比例して通信時間が増加するのを抑えつつ、通信に必要なバッファ量を抑制することにある。
【課題を解決するための手段】
【０００４】
本発明のマルチプロセッサシステムは、
複数の演算処理手段と、複数の前記演算処理手段に接続された記憶手段と、複数の前記演算処理手段に接続された同期イベント通知手段とを有し、
前記記憶手段は、複数の前記演算処理手段の間での通信データを格納するバッファ用領域部と収支カウンタ部を有し、
前記バッファ用領域部は、それぞれがいずれか１つの前記演算処理手段に対応する複数のバッファ用領域を含んでおり、
前記演算処理手段は、前記同期イベント通知手段によって通知されるタイミングごとに前記バッファ用領域を受け渡し、
前記収支カウンタ部は、受け渡した前記バッファ用領域の増減を管理する。
また、本発明のマルチプロセッサシステムにおけるメモリ管理方法は、
複数のプロセッサ間で交換する通信データを格納するための領域を、予め共有メモリの複数の部分領域に分割し、
分割した前記複数の部分領域を前記プロセッサにそれぞれ割り当て、
所定のタイミングで同時に複数の前記プロセッサ間で前記部分領域を受け渡し、
受け渡した前記部分領域の量をカウンタに保持し、
前記受け渡しの際、前記カウンタの値に満たない場合には、その差分をさらに送信する。
また、本発明のマルチプロセッサシステムで実行可能な通信プログラムは、
互いに通信を行う複数のプロセッサと、複数の前記プロセッサからアクセス可能な共有メモリと、複数の前記プロセッサにイベントを通知するタイマとを有するマルチプロセッサシステムで実行可能な通信プログラムにおいて、
前記通信プログラムは、
前記共有メモリを、任意のある時刻において複数の領域に論理的に分割する処理と、
それぞれの領域をいずれかの前記プロセッサによって管理する処理と、
前記共有メモリのそれぞれの領域に対する管理を、前記イベント通知が発生するごとに前記プロセッサ間で前記領域を受け渡しすることにより行う処理と、
前記領域を受け渡した前後で各プロセッサが管理する前記共有メモリのメモリ量の増減を保持する処理と、
前記イベント通知が発生するごとに、前記領域の管理を前記プロセッサ間で交換して、各プロセッサが管理する各領域の個数配分の偏りを、前記メモリ量の増減を用いて補正する処理とを有する。
【発明の効果】
【０００５】
本発明によれば、プロセッサ間でデータを授受する機能を有するシステムにおいて、プロセッサ間の通信量に比例して通信時間が増加するのを抑えつつ、通信に必要なバッファ量を抑制することができる。
【図面の簡単な説明】
【０００６】
図１は本発明の実施の形態に係るマルチプロセッサシステムの構成を示すブロック図である。
図２は本発明の実施の形態に係る共有メモリ上の論理領域の構成を示すメモリマップである。
図３は本発明の実施の形態に係る共有メモリ上のバッファ用領域内部の構成を示す図である。
図４は本発明の実施の形態に係る共有メモリ上のバッファ管理領域内部の構成を示す図である。
図５は本発明の実施の形態に係る共有メモリ上の収支カウンタ調整テーブルの構成を示す図である。
図６は本発明の実施の形態に係るマルチプロセッサシステムの動作における送信データ生成処理を示すフローチャートである。
図７は本発明の実施の形態に係るマルチプロセッサシステムの動作における送信データ登録処理を示すフローチャートである。
図８は本発明の実施の形態に係るマルチプロセッサシステムの動作における受信ハンドラ起動処理を示すフローチャートである。
図９は本発明の実施の形態に係るマルチプロセッサシステムの動作における受信ハンドラ処理内部を示すフローチャートである。
図１０は本発明の実施の形態に係るマルチプロセッサシステムの動作における収支調整処理を示すフローチャートである。
【発明を実施するための最良の形態】
【０００７】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
本発明の実施の形態に係るマルチプロセッサシステムは、ソフトウェアによってお互いの間で通信を行う複数の演算処理手段としてのプロセッサ群と、複数の演算処理手段からアクセス可能な記憶手段としての共有メモリと、複数の前記演算処理手段にイベントを通知する同期イベント通知手段としてのタイマを備える。前記共有メモリは任意のある時刻において複数の領域に論理的に分割されており、それぞれの領域はいずれかのプロセッサによって管理されている。
共有メモリ上のそれぞれの領域はタイマによる割り込みイベント発生ごとにプロセッサ間で受け渡しをすることができ、受け渡しした前後での各プロセッサが管理する共有メモリ量の増減を保持するための収支カウンタ手段をさらに備える。
図１を参照して、本発明の実施の形態に係るマルチプロセッサシステムの構成について説明する。
本発明の実施の形態に係るマルチプロセッサシステム１００は、プログラム制御により動作するプロセッサ１０１〜１０ｍと、共有バス１１０と、共有メモリ１２０と、タイマ１３０とから構成されている。ここで、プロセッサ１０１〜１０ｍは、コンピュータ、中央処理装置、データ処理装置などであり、タイマ割込処理手段（図示せず）を含む。
これらの手段はそれぞれ概略次のように動作する。
上記タイマ割込処理手段は、タイマ１３０からの割り込み信号を入力したらそれを処理するためのタイマハンドラを起動し、タイマハンドラによって管理する共有メモリ１２０上の部分領域をプロセッサ１０１〜１０ｍの間で交換する処理を行う。
共有メモリ１２０は、複数のプロセッサ１０１〜１０ｍのいずれからの読み出しおよび書き込みのアクセスに対して応答する機能を有する。タイマ１３０は、予め設定された周期で同時に複数のプロセッサ１０１〜１０ｍに対して割り込み信号を発生する機能を有する。
次に、図２、図３及び図４を参照して、共有メモリ１２０上に存在する各領域について説明する。
共有メモリ１２０上には、プロセッサ１０１〜１０ｍ間の通信データを格納するためのバッファ用領域群２１０とバッファ管理領域２２０と収支カウンタ群２３０と収支カウンタ調整領域２４０が配置されている。
バッファ用領域群２１０は複数のバッファ用領域２１１〜２１ｎから成る。バッファ用領域の個数ｎの条件としては、通信処理が滞る状況を回避するために全てのプロセッサ１０１〜１０ｍ間に十分な量のバッファ用領域を割り当てる必要があり、それは少なくともプロセッサ個数の自乗よりも十分大きい値である。
図３に示すように、バッファ用領域２１１〜２１ｎ内には複数のデータを格納可能であり、それを示すためのヘッダとしてデータの直前にそのデータ長が格納される形を採る。受信側で複数の通信データ位置を読み取る際には、データ長とそれに続くデータを順次読み取ることによって一つのバッファ用領域内に格納された複数のデータ位置を解読することができる。バッファ用領域２１１を例に取り説明すると、データがバッファ１に格納され、このデータの直前にそのデータ長（ｌｅｎ＝２４）が格納される。
図４に示すように、バッファ管理領域２２０の内部の構成は、送信元（送信側）のプロセッサＩＤ、送信先（受信側）のプロセッサＩＤに関連づけられて、それぞれのプロセッサ間通信において使用する先頭バッファ領域ＩＤと書き込み中フラグがそれぞれ格納された構造と成っている。
先頭バッファ領域ＩＤは、バッファ用領域群２１０を構成するバッファ用領域２１１〜２１ｎのいずれかに該当する。あるプロセッサ間の通信において複数のバッファ用領域２１１〜２１ｎを使用する場合には、図３に示すように、バッファ用領域の先頭に次のバッファ用領域ＩＤを格納したリンクリストを構成する。つまり、バッファ管理領域２２０から先頭のバッファ領域ＩＤのみを取り出し、２つめ以降のバッファ用領域は一つ前のバッファ用領域の先頭に格納されたＩＤを読み取ることによって認識する。バッファ用領域２１１を例に取り説明すると、バッファ用領域２１１の先頭には、次のバッファ用領域ＩＤ（ｎｅｘｔ＝８）が格納されている。
収支カウンタ２３０には、各プロセッサ１０１〜１０ｍが通信を行ったことによって増減したそれぞれの管理するバッファ用領域２１１〜２１ｎの個数の増減数が保持されている。この収支カウンタ２３０の更新はそれぞれが割り当てられているプロセッサ自身によって更新される。
次に、図５を参照して、収支カウンタ調整テーブル２４０の構成を説明する。
図５に示すように、収支カウンタ調整テーブル２４０の内部の構成は、提供側のプロセッサＩＤ、受領側のプロセッサＩＤに関連づけられて、収支カウンタ調整量が格納された構造となっている。
次に、図６のフローチャートを参照して、本実施の形態の送信データ生成処理について詳細に説明する。
まず、各プロセッサ１０１〜１０ｍがそれぞれ所有している通信データを格納するためのバッファ用領域２１１〜２１ｎから使用可能な空きバッファ用領域を一つ選択する（ステップＳ６０１）。
そして、その選択したバッファ用領域に通信データを格納する。その際、ヘッダとしてデータサイズを通信データの前に格納する（ステップＳ６０２）。これを後続データが無くなるまで繰り返す（ステップＳ６０３）。
もしも、選択したバッファ用領域に通信データを格納するための十分な空き領域が無くなれば、新たに空きのバッファ用領域を確保する。（ステップＳ６０４）。
全データを格納し終わった後、収支カウンタ調整値（図５の収支カウンタ調整テーブル２４０参照）を参照して、当該出力先プロセッサに与えるべきバッファ領域数に満たない場合には差分の空きバッファ用領域を追加する（ステップＳ６０５）。
なお、通信データがなくても収支カウンタ調整値が設定されている場合にはこのステップを実行する。
なお、図６に示す処理は自らを除くすべてのプロセッサに対して必要に応じて順次行い、使用したバッファ用領域は後述する送信データ登録処理Ｓ７０１〜７（図７参照）へ全て渡される。なお、送信データ生成処理Ｓ６０１〜Ｓ６０５を行う回数についての制約は特になく、タイマ１３０によって発生する割り込み信号間で何度行っても良い。
次に、図７のフローチャートを参照して、本実施の形態の送信データ登録処理について詳細に説明する。
まず、任意の２つのプロセッサ間での通信におけるデッドロックを回避するため割り込み禁止を設定する（ステップＳ７０１）。このデッドロックが発生する例としては、任意の２つのプロセッサ間でお互いに送信データ登録処理動作中にタイマ割込が入ったときが挙げられる。
そして、書き込み中に受信処理が実行されるのを防ぐためバッファ管理領域２２０に書き込み中のフラグ（図４参照）を立てる（ステップＳ７０２）。
その後、Ｓ６０１〜Ｓ６０５のステップで通信データを格納したバッファ用領域を連結するためにそれぞれのｎｅｘｔフィールド（図３参照）に次のバッファ領域のＩＤを書き込む（ステップＳ７０３）。
次に、ステップＳ７０３で連結したリストの先頭に当たるバッファ用領域のＩＤをバッファ管理領域２２０（図４参照）に書き込む（ステップＳ７０４）。
次に、ステップＳ７０２〜Ｓ７０３で使用したバッファ領域用個数だけ自らのプロセッサＩＤに割り当てられている収支カウンタ２３０（図２参照）を減算する（ステップＳ７０５）。ここでのＳ７０３〜Ｓ７０５において対象とする通信データは、これを実行する以前のＳ６０１〜Ｓ６０５における処理を行った通信データのうち未処理のものを全て含んでいなければならない。
最後に、ステップＳ７０１で立てた書き込み中フラグをおろし（ステップＳ７０６）、割り込み禁止を解除する（ステップＳ７０７）。
これらＳ７０１〜Ｓ７０７のステップは、タイマ１３０によって発生する割り込み信号間でせいぜい１回以下行うことを通常想定しているが、それ以上の回数を行っても良い。
次に、図８のフローチャートを参照して、本実施の形態の受信ハンドラ起動処理について詳細に説明する。
まず、タイマ１３０による割り込み信号を受信したら、全てのプロセッサ１０１〜１０ｍは割り込みハンドラ処理を起動する（ステップＳ８０１）。
それに続いて、処理中のその他のタスクが中断されて受信ハンドラ処理が実行される（ステップＳ９００）。
次に、図９のフローチャートを参照して、本実施の形態の受信処理ハンドラ内動作（図８のステップＳ９００）について詳細に説明する。
まず、送信元のプロセッサＩＤを格納する送信元カウンタを初期化する（ステップＳ９０１）。
このとき、送信元カウンタに格納したプロセッサＩＤが自分自身であればＳ９０３〜Ｓ９０７の処理をスキップする（ステップＳ９０２）。
送信元カウンタに格納したプロセッサＩＤが自分自身でなければ、バッファ管理領域２２０において送信元欄が前記送信元カウンタ値であり送信先が自らのＩＤである行を参照し、先頭バッファ領域ＩＤを取得する（ステップＳ９０３）。
読み込んだ前記先頭バッファ領域ＩＤ（図４参照）の値がＮＵＬＬであれば、送信元カウンタの値がＩＤとなるプロセッサからの通信は無いのでステップＳ９０８へジャンプする（ステップＳ９０４）。
前記先頭バッファ領域ＩＤの値がＮＵＬＬでなければ、送信元カウンタの値がＩＤとなるプロセッサからの通信が存在するので前記先頭バッファ領域ＩＤに相当するバッファ用領域２１１〜２１ｎのうち該当する領域に格納された複数の通信データを順次読み込む（ステップＳ９０５）。
ステップＳ９０５で通信データを全て読み終わったら、前記バッファ用領域の先頭に格納されている次のバッファ領域ＩＤ（図３参照）を読み込む（ステップＳ９０６）。
以降、Ｓ９０６で読み込む次のバッファ領域ＩＤがＮＵＬＬになるまで、ステップＳ９０５〜９０６を繰り返す（ステップＳ９０７）。
Ｓ９０６で読み込む次のバッファ領域ＩＤがＮＵＬＬになれば、この時点で前記送信元カウンタに格納されたＩＤを持つプロセッサからの通信データはもはや無いので、次の送信元プロセッサＩＤを前記送信元カウンタに格納して全てのプロセッサＩＤについての処理が終わるまでＳ９０２〜Ｓ９０８を送信元プロセッサＩＤごとに繰り返す（ステップＳ９０８〜Ｓ９０９）。
最後に、受信したバッファ用領域個数分だけ収支カウンタ２３０を加算する（ステップＳ９１０）。
次に、図１０のフローチャートを参照して、本実施の形態の収支調整処理について詳細に説明する。
まず、収支テーブルを元に収支カウンタ２３０の値を比較して増加量の多い順に並び替えたテーブルＸを生成する（ステップＳ１００１）。
また、必要な変数類を初期化する（ステップＳ１００２）。
次に、収支で増加が最も多いものと減少が最も多いものの間で最大限の調整をとるため、絶対値の小さい方の値を多い側から少ない側へ移動させるように収支調整テーブルへ書き込む（ステップＳ１００３〜Ｓ１０１０）。
次に、本実施の形態の効果について説明する。
本実施の形態では、タイマ割り込みごとにそれぞれのバッファ用領域の一部をプロセッサ間で入れ替えるというように構成されているため、プロセッサ間の通信量に比例して通信時間が増加するのを抑えることができる。このとき、通信データ自体を書き込んだり読み出したりする時間を除けば単位時間あたりほぼ一定時間での通信処理が実現される。
また、本実施の形態では、さらに、各バッファ用領域がある時刻においていずれか一つのプロセッサに割り振られており、かつ、タイマ契機ごとにそれぞれのバッファ用領域の一部をプロセッサ間で入れ替えるというように構成されているため、通信に必要なバッファを各プロセッサ間でシステムの動作中に状況に応じて融通しあうことができ、システム全体でのメモリ使用量を抑えることができる。
上述のように、本発明の実施の形態に係るマルチプロセッサシステムは、ソフトウェアによってお互いの間で通信を行う複数の演算処理手段としてのプロセッサ群と、複数の演算処理手段からアクセス可能な記憶手段としての共有メモリと、複数の前記演算処理手段にイベントを通知する同期イベント通知手段としてのタイマを備える。前記共有メモリは任意のある時刻において複数の領域に論理的に分割されており、それぞれの領域はいずれかのプロセッサによって管理されている。
共有メモリ上のそれぞれの領域に対する管理はタイマによる割り込みイベント発生ごとにプロセッサ間で交換することができ、管理を交換した前後での各プロセッサが管理する共有メモリ量の増減を保持するための収支カウンタ手段をさらに備える。
このような構成を採用し、前記イベント通知が発生するごとに共有メモリ上で論理的に割された領域の管理をプロセッサ間で交換し、各プロセッサが管理する共有メモリ上の各領域の個数配分の偏りを、収支カウンタを用いて補正する。
このような構成を採用している本発明の実施の形態に係るマルチプロセッサシステムでは、プロセッサ間で頻繁に通信が発生するシステムであっても、プロセッサ間の通信量に比例して通信時間が増加するのを抑えられる。
その理由は、任意の時刻においてそれぞれのプロセッサは自らが管理する共有メモリ上の部分領域を持っていることによって、プロセッサ間の通信に用いるバッファ領域を確保するための通信を行う必要がないためである。このとき、通信データ自体を書き込む時間を除けば単位時間あたりに通信にかかる処理時間をほぼ一定に抑えることができる。
さらに、複数のプロセッサ間でデータを授受するのに用いる共有メモリの総量を抑制できる。その理由は、システムの動作中に通信に必要なバッファを各プロセッサ間で融通しあうことで、プロセッサ間毎にマージンを考慮したメモリの確保をしなくてすむためである。これにより、必ずしも任意の２つのプロセッサ間で必要な最大メモリ量の総和をシステム全体として保有する必要はなくなり、システム全体として必要な共有メモリの最大量を確保しさえすれば済む。
さらに加えて、それぞれのバッファ用領域の一部をプロセッサ間で受け渡しその収支を管理しているため、バッファ領域が必要なプロセッサの処理に応じて適切なバッファ領域や必要な数のバッファ領域をプロセッサに提供することも可能である。
以上、本発明の実施の形態について具体的に説明したが、本発明は上述の実施形態に限定されるものではなく、本発明技術的思想に基づく各種の変形が可能である。
本発明は、有線乃至は無線の通信を行う通信処理装置に適用できる。また、動画のエンコードやデコードを行うメディア処理装置にも適用可能である。
この出願は、２００９年４月１７日に出願された日本出願特願第２００９−１００４５６号を基礎とする優先権を主張し、その開示のすべてをここに取り込むものである。
【図１】
2010119932.tif 000003
【図２】
2010119932.tif 000004
【図３】
2010119932.tif 000005
【図４】
2010119932.tif 000006
【図５】
2010119932.tif 000007
【図６】
2010119932.tif 000008
【図７】
2010119932.tif 000009
【図８】
2010119932.tif 000010
【図９】
2010119932.tif 000011
【図１０】
2010119932.tif 000012
【国際調査報告】
2010119932.tif 000013
2010119932.tif 000014
2010119932.tif 000015
2010119932.tif 000016