(57)【要約】      （修正有）【課題】共有メモリを共有するための処理を並列化し、共有メモリのフラグメンテーションを抑制し、データのコピー回数を低減し、且つＤＭＡモジュールが要求するサイズの境界とデータの先頭アドレスとの間のアライメントをとる。【解決手段】メモリ管理装置１３は、複数のプロセッサ１２ａ，１２ｂにより共有される共有メモリ１４を管理する。各プロセッサに割り当てられる共有メモリ１４のメモリ領域を確保し、各メモリ領域に複数のプロセッサと１対１に対応する複数のリファレンスカウンタを設ける。メモリ領域を各プロセッサに割り当てるときに、メモリ領域を管理するプロセッサに対応するリファレンスカウンタに１を加算し、メモリ領域を解放するときにリファレンスカウンタから１を減算する。更新されたメモリ領域における複数のリファレンスカウンタの値の合算結果が０である場合に、メモリ領域が割り当てられたプロセッサからメモリ領域を解放する。【選択図】図１
2012093882.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサにより共有される共有メモリを管理するメモリ管理装置であって、
各プロセッサの要求に基づいて、前記各プロセッサに割り当てられる前記共有メモリのメモリ領域を確保し、各メモリ領域に前記複数のプロセッサと１対１に対応する複数のリファレンスカウンタを設ける割当部と、
各メモリ領域を前記各プロセッサに割り当てるときに、前記メモリ領域を管理するプロセッサに対応する前記リファレンスカウンタの値に１を加算し、前記メモリ領域が割り当てられたプロセッサから前記メモリ領域を解放するときに、前記メモリ領域を管理するプロセッサに対応する前記リファレンスカウンタの値から１を減算する更新部と、
前記更新部により更新されたメモリ領域における前記複数のリファレンスカウンタの値の合算結果が０である場合に、前記メモリ領域が割り当てられたプロセッサから前記メモリ領域を解放する解放部と、
を備えることを特徴とするメモリ管理装置。
【請求項２】
割当メモリブロックおよび管理メモリブロックを有する共有メモリと、
前記共有メモリを共有する複数のプロセッサと、を備え、
各プロセッサは、
前記各プロセッサの要求に基づいて、前記各プロセッサに割り当てられる前記共有メモリのメモリ領域を確保し、各メモリ領域に前記複数のプロセッサと１対１に対応する複数のリファレンスカウンタを設ける割当部と、
前記メモリ領域を前記各プロセッサに割り当てるときに、前記メモリ領域を管理するプロセッサに対応する前記リファレンスカウンタの値に１を加算し、前記メモリ領域が割り当てられたプロセッサから前記メモリ領域を解放するときに、前記メモリ領域を管理するプロセッサに対応する前記リファレンスカウンタの値から１を減算する更新部と、
前記更新部により更新された複数のリファレンスカウンタの値の合算結果が０である場合に、前記メモリ領域が割り当てられたプロセッサから前記メモリ領域を解放する解放部と、
を備えることを特徴とするマルチプロセッサシステム。
【請求項３】
前記割当部は、前記メモリ領域の末尾に、前記メモリ領域の先頭アドレスに該当するアロケーションユニットに対応するエントリへのエントリポインタを設け、前記エントリポインタの前に前記複数のリファレンスカウンタを設ける、請求項２に記載のマルチプロセッサシステム。
【請求項４】
前記探索部は、前記エントリポインタに基づいて、基準スケールを決定し、前記基準スケール及び未使用エントリの先頭アドレスを用いて、前記基準スケールに対応する仮のエントリの仮の末尾アドレスを計算し、前記仮の末尾アドレスに基づいて前記仮のエントリへの仮のエントリポインタ及び前記仮のエントリへの先頭アドレスを計算し、前記仮の先頭アドレス及び前記未使用エントリの先頭アドレスと、前記基準スケール及び前記仮のエントリの仮のスケールと、を照合し、その照合結果に基づいて前記メモリ領域のスケールを決定する、請求項３に記載のマルチプロセッサシステム。
【請求項５】
前記割当部は、前記割当メモリブロックの各ページの先頭アドレスと、アロケーションユニットのスケールと、前記アロケーションユニットのスケール毎に割当可能なメモリ領域を示すフリーリスト情報と、を前記管理メモリブロックに設定する、請求項２乃至４の何れか１項に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリ管理装置、マルチプロセッサシステム、及びメモリ管理方法に関する。
【背景技術】
【０００２】
近年、画像データ等の大容量のデータを処理するために、共有メモリと、複数のプロセッサと、を備えるマルチプロセッサシステムが利用される。そのようなマルチプロセッサシステムでは、以下の第１〜第６要件を満たすことが必要である。
【０００３】
＜第１要件＞  共有メモリの割当及び削除がプロセッサ間で互いに排他的であること。
＜第２要件＞  １つのデータに対して１６ＫＢ〜１２ＭＢのメモリ領域を共有メモリ内に確保すること。例えば、１２８０×７２０ピクセルの画像データに対しては、１．３ＭＢ以上の連続したメモリ領域を共有メモリ内に確保することが求められる。
＜第３要件＞  異なるサイズのデータが混在した場合であっても共有メモリの割当を適切に実行可能であること。例えば、１６ＫＢの静止画の画像データと１２ＭＢの動画の画像データを同時に取り扱うためには、１６ＫＢの画像データと１２ＭＢの画像データが混在した場合であっても共有メモリの割当が適切に実行されることが求められる。
＜第４要件＞  共有メモリのフラグメンテーションを抑制可能であること。特に、画像データ等の大容量データを取り扱う場合には、共有メモリの容量に対するデータの容量の割合が大きいので、フラグメンテーションが発生し易い傾向にある。従って、画像データ等の大容量データを取り扱うためには、フラグメンテーションの抑制が重要である。
＜第５要件＞  データのコピー回数を低減すること。特に、画像データ等の大容量データでは、データをコピーするときの共有メモリとプロセッサとの間のデータ転送量が大きくなるので、マルチプロセッサシステムへの負荷を低減するためにデータのコピー回数を低減することが重要である。
＜第６要件＞  ダイレクトメモリアクセス（以下、「ＤＭＡ（Direct Memory Access）」という）モジュールを用いてデータ転送を行うときにＤＭＡモジュールが要求するサイズ（例えば、２５６ｂｙｔｅ又は１０２４ｂｙｔｅ) の境界とデータの先頭アドレスとの間のアラインメントをとること。例えば、データの先頭アドレスが“0x400100”である場合には、ＤＭＡユニットが要求する単位（２５６ｂｙｔｅ）の境界でアラインメントをとることにより、データ転送効率の効率が改善する。
【０００４】
しかしながら、従来のメモリ管理装置では、第１〜第６要件を全て満たすことはできない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１８１２１３号公報
【特許文献２】特開２００９−１８１２６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本実施形態の課題は、共有メモリを共有するための処理を並列化し、共有メモリのフラグメンテーションを抑制し、データのコピー回数を低減し、且つＤＭＡモジュールが要求するサイズの境界とデータの先頭アドレスとの間のアライメントをとることである。
【課題を解決するための手段】
【０００７】
本実施形態に係るメモリ管理装置は、複数のプロセッサにより共有される共有メモリを管理する。メモリ管理装置は、割当部と、更新部と、解放部と、を備える。割当部は、各プロセッサの要求に基づいて、各プロセッサに割り当てられる共有メモリのメモリ領域を確保し、各メモリ領域に複数のプロセッサと１対１に対応する複数のリファレンスカウンタを設ける。更新部は、各メモリ領域を各プロセッサに割り当てるときに、メモリ領域を管理するプロセッサに対応するリファレンスカウンタの値に１を加算し、メモリ領域が割り当てられたプロセッサからメモリ領域を解放するときに、メモリ領域を管理するプロセッサに対応するリファレンスカウンタの値から１を減算する。解放部は、更新部により更新されたメモリ領域における複数のリファレンスカウンタの値の合算結果が０である場合に、メモリ領域が割り当てられたプロセッサからメモリ領域を解放する。
【図面の簡単な説明】
【０００８】
【図１】本実施形態に係るマルチプロセッサシステム１０の構成を示すブロック図。
【図２】メモリ管理装置１３の構成を示すブロック図。
【図３】割当メモリブロックＡのデータ構造を示す概略図である。
【図４】管理メモリブロックＭのデータ構造を示す概略図である。
【図５】本実施形態に係るメモリ管理処理の手順を示すフローチャート。
【図６】初期化（Ｓ５０２）の手順を示すフローチャート。
【図７】初期化（Ｓ５０２）において得られる管理メモリブロックＭのデータ構造を示す概略図。
【図８】メモリ割当（Ｓ５０３）の手順を示すフローチャート。
【図９】未使用エントリ取得（Ｓ８０４）を説明するためのエントリＥのデータ構造を示す概略図。
【図１０】未使用エントリ取得（Ｓ８０４）において得られる管理メモリブロックＭのデータ構造を示す概略図。
【図１１】分割（Ｓ８０５）の手順を示す擬似コード。
【図１２】メモリ領域割当（Ｓ８０６）の手順を示すフローチャート。
【図１３】メモリ領域割当（Ｓ８０６）において得られるメモリ領域のデータ構造を示す概略図。
【図１４】メモリ共有（Ｓ５０４）の手順を示すフローチャート。
【図１５】探索（Ｓ１４０１）の手順を示すフローチャート。
【図１６】先頭アドレス計算（Ｓ１５０４）において得られる仮のエントリＥｖのデータ構造を示す概略図。
【図１７】メモリ解放（Ｓ５０５）の手順を示すフローチャート。
【図１８】フリーリスト返却（Ｓ１７０４）の手順を示すフローチャート。
【図１９】併合（Ｓ１８０３）の手順を示す擬似コード。
【発明を実施するための形態】
【０００９】
本実施形態について、図面を参照して説明する。本実施形態に係るマルチプロセッサシステムについて説明する。図１は、本実施形態に係るマルチプロセッサシステム１０の構成を示すブロック図である。
【００１０】
マルチプロセッサシステム１０は、複数のプロセッサ１２ａ，１２ｂと、共有メモリ１４と、を備える。プロセッサ１２ａ，１２ｂは、互いに、バス又はインターコネクト等の接続線１６を介して共有メモリ１４に接続される。すなわち、プロセッサ１２ａ，１２ｂは、共有メモリ１４を共有する。
【００１１】
プロセッサ１２ａ，１２ｂはそれぞれ、共有メモリ１４に格納されたアプリケーションプログラムを起動することにより、メモリ管理装置１３と、データ処理装置１５と、を実現するモジュールである。プロセッサ１２ａ，１２ｂは、複数のアプリケーションを並列に実行可能である。
【００１２】
メモリ管理装置１３は、複数のプロセッサ１２ａ，１２ｂにより共有される共有メモリ１４をバディシステムで管理する装置である。図２は、メモリ管理装置１３の構成を示すブロック図である。メモリ管理装置１３は、初期化部１３１と、割当部１３２と、共有部１３３と、探索部１３４と、解放部１３５と、更新部１３６と、を備える。
【００１３】
データ処理装置１５は、共有メモリ１４に格納されたデータに対してデータ処理を実行する装置である。例えば、データ処理装置１５は、静止画データ及び動画像データ等の画像データに対して画像処理を実行するための画像処理装置である。
【００１４】
共有メモリ１４は、様々なアプリケーションプログラムと、データ処理装置１５により取り扱われる様々なデータと、を記憶可能である。例えば、共有メモリ１４は、ＤＲＡＭ（Direct Random Access Memory）である。
【００１５】
共有メモリ１４上には、割当メモリブロックＡ及び管理メモリブロックＭが構築される。図３は、割当メモリブロックＡのデータ構造を示す概略図である。図４は、管理メモリブロックＭのデータ構造を示す概略図である。割当メモリブロックＡは、データ処理装置１５に割り当てられるメモリブロックである。管理メモリブロックＭは、メモリ管理装置１３により使用されるメモリブロックである。管理メモリブロックＭ及び割当メモリブロックＡは、全てのプロセッサ１２ａ，１２ｂから参照可能である。
【００１６】
割当メモリブロックＡは、複数のページを含む。各ページは、共有メモリ１４のメモリ領域が所定のページサイズＰＳ毎に分割されたものである。各ページは、連続したメモリ領域に構築されても良いし、非連続なメモリ領域に構築されても良い。各ページは、Ｎ（N＝２ｎ）（ｎは正の整数）個の固定長メモリ（以下、「アロケーションユニット」という）ＡＵ［ｊ，１］〜ＡＵ［ｊ，Ｎ］（ｊ＝１〜Ｋ、Ｋは２以上の整数）に分割される。ｎは、アロケーションユニットの最大スケールである。
【００１７】
管理メモリブロックＭは、変数セクションＶＳと、フリーリストＦＬと、ページポインタセクションＰＰＳと、エントリセクションＥＳと、を含む。
【００１８】
変数セクションＶＳは、割当メモリブロックＡに関する情報を示す複数の変数を含む。具体的には、変数セクションＶＳは、ページ数を示す変数Ｐ＿ＣＯＵＮＴと、アロケーションユニットのサイズを示す変数ＡＵ＿ＳＩＺＥと、アロケーションユニットの最大スケールを示す変数ＡＵ＿ＭＡＸ＿ＳＣＡＬＥと、フリーリストのロックフラグＦ１と、を含む。変数Ｐ＿ＣＯＵＮＴには、ページ数Ｋが設定される。変数ＡＵ＿ＳＩＺＥには、ＡＳ（ＡＳ＝ＰＳ／Ｎ）が設定される。変数ＡＵ＿ＭＡＸ＿ＳＣＡＬＥには、ｎが設定される。ロックフラグＦ１には、１又は０が設定される。ロックフラグＦ１の値が１である場合にはフリーリストＦＬがロックされ、ロックフラグＦ１の値が０である場合にはフリーリストＦＬがアンロックされる。
【００１９】
フリーリストＦＬは、アロケーションユニットのスケール毎のｎ個のフリーリスト情報ＦＲＥＥ［１］〜ＦＲＥＥ［ｎ］を含む。各フリーリスト情報ＦＲＥＥ［１］〜ＦＲＥＥ［ｎ］は、割当可能なメモリ領域を示す情報である。例えば、フリーリスト情報ＦＲＥＥ［１］は、１ページのアロケーションユニットの数が２１個である場合（すなわち、アロケーションユニットのスケールが１である場合）の割当可能なメモリ領域を示し、フリーリスト情報ＦＲＥＥ［ｎ］は、１ページのアロケーションユニットの数が２ｎ個である場合（すなわち、アロケーションユニットのスケールが最大スケールである場合）の割当可能なメモリ領域を示す。以下、フリーリスト情報ＦＲＥＥ［ｎ］を「最大スケール用フリーリスト情報」という。
【００２０】
ページポインタセクションＰＰＳは、ページと同数（Ｋ個）のページポインタＰＰ［１］〜ＰＰ［Ｋ］を含む。各ページポインタＰＰ［１］〜ＰＰ［Ｋ］には、割当メモリブロックＡの各ページの先頭アドレスが設定される。例えば、ページポインタＰＰ［１］にはページ１の先頭アドレスが設定され、ページポインタＰＰ［Ｋ］にはページＫの先頭アドレスが設定される。
【００２１】
エントリセクションＥＳは、アロケーションユニットと同数（Ｋ×Ｎ個）のエントリＥ［１，１］〜Ｅ［Ｋ，Ｎ］を含む。各エントリＥ［１，１］〜Ｅ［Ｋ，Ｎ］は、アロケーションユニットに１対１に対応する。例えば、エントリＥ［１，１］は、ページ１の１番目のアロケーションユニットＡＵ［１，１］に対応し、エントリＥ［Ｋ，Ｎ］は、ページＫのＮ番目のアロケーションユニットＡＵ［Ｋ，Ｎ］に対応する。
【００２２】
各エントリＥ［１，１］〜Ｅ［Ｋ，Ｎ］は、アロケーションユニットＡＵ［１，１］〜ＡＵ［Ｋ，Ｎ］のスケールを示す変数Ｓと、使用フラグＦ２と、リンクポインタＬＰと、を含む。使用フラグＦ２の値は１又は０である。使用フラグＦ２の値が１である場合には、各エントリＥ［１，１］〜Ｅ［Ｋ，Ｎ］に対応するアロケーションユニットＡＵ［１，１］〜ＡＵ［Ｋ，Ｎ］が使用中（割当不可能）であることを示す。使用フラグＦ２の値が０である場合には、各エントリＥ［１，１］〜Ｅ［Ｋ，Ｎ］に対応するアロケーションユニットＡＵ［１，１］〜ＡＵ［Ｋ，Ｎ］が未使用（割当可能）であることを示す。リンクポインタＬＰは第１リンクポインタＰＲＥＶと、第２リンクポインタＮＥＸＴと、を含む。第１リンクポインタＰＲＥＶには、関連付けられた前方のエントリの先頭アドレスが設定される。第２リンクポインタＮＥＸＴには、関連付けられた後方のエントリの先頭アドレスが設定される。
【００２３】
本実施形態に係るメモリ管理処理について説明する。図５は、本実施形態に係るメモリ管理処理の手順を示すフローチャートである。
＜メモリブロック構築（Ｓ５０１）＞  メモリ管理装置１３が、割当メモリブロックＡ及び管理メモリブロックＭを共有メモリ１４上に構築する。このとき、管理メモリブロックＭの変数Ｐ＿ＣＯＵＮＴ、変数ＡＵ＿ＳＩＺＥ、変数ＡＵ＿ＭＡＸ＿ＳＣＡＬＥ、及びページポインタＰＰ［１］〜ＰＰ［Ｋ］にそれぞれ、データ処理装置１５からの要求に応じた値が設定される。なお、ロックフラグＦ１には何も設定されない。
【００２４】
＜初期化（Ｓ５０２）＞  初期化部１３１が、メモリブロック構築（Ｓ５０１）において構築された管理メモリブロックＭを初期化する。図６は、初期化（Ｓ５０２）の手順を示すフローチャートである。
【００２５】
＜アンロック（Ｓ６０１）＞  初期化部１３１が、管理メモリブロックＭのロックフラグＦ１に０（アンロック）を設定する。
＜ポインタ設定（Ｓ６０２）＞  初期化部１３１が、最大スケール用フリーリスト情報ＦＲＥＥ［ｎ］に、ページ１の１番目のアロケーションユニットＡＵ［１，１］へのポインタＡＰＮＴ［１，１］を設定し、最大スケール用フリーリスト情報ＦＲＥＥ［ｎ］以外のフリーリスト情報ＦＲＥＥ［１］〜ＦＲＥＥ［ｎ−１］にＮＵＬＬ（無効値）を設定する。
【００２６】
＜エントリ設定（Ｓ６０３）＞  初期化部１３１が、各ページの１番目のエントリＥ［ｊ，１］に所定の値を設定する。具体的には、変数Ｓにｎが設定され、使用フラグＦ２に０（未使用）が設定され、第１リンクポインタＰＲＥＶに１つ前のページの１番目のエントリへのポインタ（以下、エントリポインタという）ＥＰＮＴ［ｊ−１，１］が設定され、第２リンクポインタＮＥＸＴに１つ後のページの１番目のエントリポインタＥＰＮＴ［ｊ＋１，１］が設定される。各ページの２番目以降のエントリＥ［ｊ，２］〜Ｅ［ｊ，Ｎ］には何も設定されない。これにより、図７の管理メモリブロックＭが得られる。図７は、初期化（Ｓ５０２）において得られる管理メモリブロックＭのデータ構造を示す概略図である。エントリ設定（Ｓ６０３）が終了すると、初期化（Ｓ５０２）が終了し、メモリ割当（Ｓ５０３）が実行される。
【００２７】
＜メモリ割当（Ｓ５０３）＞  割当部１３２が、データ処理装置１５の要求に応じて所定のサイズのメモリ領域をデータ処理装置１５に割り当てる。
図８は、メモリ割当（Ｓ５０３）の手順を示すフローチャートである。
【００２８】
＜要求スケール計算（Ｓ８０１）＞  割当部１３２が、データ処理装置１５により要求されたメモリ領域のバイト単位のサイズ（以下、「要求サイズ」という）ＲＥＱに基づいて、要求スケールＲＥＱ＿Ｓを計算する。要求スケールＲＥＱ＿Ｓは、要求サイズＲＥＱを確保するために必要なスケールである。すなわち、割当部１３２は、バイト単位の要求サイズＲＥＱをスケール単位の要求スケールＲＥＱ＿Ｓに換算する。具体的には、割当部１３２は、要求サイズＲＥＱ及び図７の変数ＡＵ＿ＳＩＺＥの値ＡＳを用いて、２０×ＡＳ〜２ｎ×ＡＳのうち、“ＲＥＱ＜２ｘ×ＡＳ”を満たすｘの最小値を計算する。ｘは、要求サイズＲＥＱを確保するために必要なスケールを意味する。ｘの最小値が要求スケールＲＥＱ＿Ｓである。
【００２９】
＜ロック（Ｓ８０２）＞  割当部１３２が、管理メモリブロックＭのロックフラグＦ１に１（ロック）を設定する。なお、Ｓ８０２が実行される前にロックフラグＦ１に１が設定されている（すなわち、他のメモリ管理装置１３によりフリーリストが使用されている）場合には、割当部１３２は、ロックフラグＦ１に０（アンロック）が設定されるまで待機し、ロックフラグＦ１に０が設定された後にロックフラグＦ１に１を設定する。
【００３０】
＜Ｓ８０３＞  割当部１３２が、要求スケール計算（Ｓ８０１）において計算された要求スケールＲＥＱ＿Ｓに対応するフリーリスト情報ＦＲＥＥ［ＲＥＱ＿Ｓ］に登録されたエントリの中から、使用フラグＦ２に０（未使用）が設定されているエントリ（以下、「未使用エントリ」という）を検索する。フリーリスト情報ＦＲＥＥ［ＲＥＱ＿Ｓ］に未使用エントリが登録されている場合には（Ｓ８０３−ＹＥＳ）、未使用エントリ取得（Ｓ８０４）が実行される。フリーリスト情報ＦＲＥＥ［ＲＥＱ＿Ｓ］に未使用エントリが登録されていない場合には（Ｓ８０３−ＮＯ）、分割（Ｓ８０５）が実行される。
【００３１】
＜未使用エントリ取得（Ｓ８０４）＞  割当部１３２が、フリーリスト情報ＦＲＥＥ［ＲＥＱ＿Ｓ］に登録されている未使用エントリのうちフリーリストのエントリの先頭の未使用エントリに対応するアロケーションユニットと、最初の未使用エントリの変数Ｓと、により示される範囲のエントリを取得する。図９は、エントリＥのデータ構造を示す概略図である。例えば、図９に示すように、割当部１３２は、ページ１の３番目のエントリＥ［１，３］が取得を取得する場合には、エントリＥ［１，３］の第２リンクポインタＮＥＸＴの値ＥＰＮＴ［１，４］を、エントリＥ［１，３］の前のエントリＥ［１，２］の第２リンクポインタＮＥＸＴに設定し、エントリＥ［１，３］の第１リンクポインタＰＲＥＶの値ＥＰＮＴ［１，２］を、エントリＥ［１，３］の後のエントリＥ［１，４］の第１リンクポインタＰＲＥＶに設定する。換言すると、割当部１３２は、エントリＥ［１，３］の前後のエントリＥ［１，２］，Ｅ［１，３］のリンクポインタを書き換えることにより、エントリＥ［１，３］を取得する。次いで、割当部１３２は、ロックフラグＦ１に０を設定する（すなわち、フリーリストをアンロックする）。これにより、図１０の管理メモリブロックＭが得られる。図１０は、未使用エントリ取得において得られる管理メモリブロックＭのデータ構造を示す概略図である。
【００３２】
＜分割（Ｓ８０５）＞  割当部１３２が、擬似コードに基づいて、アロケーションユニットを分割する。図１１は、分割の手順を示す擬似コードである。具体的には、割当部１３２は、Ｓ８０３で参照されたスケール（例えば、要求スケールＲＥＱ＿Ｓ）より１つ大きいスケール（例えば、スケールＲＥＱ＿Ｓ＋１）に対応するフリーリスト情報（例えば、フリーリスト情報ＦＲＥＥ［ＲＥＱ＿Ｓ＋１］）に登録されたエントリの中から未使用エントリを取得し、未使用エントリに対応するアロケーションユニットを分割する。換言すると、割当部１３２は、Ｓ８０３で参照されたスケールより１つ大きなスケールで要求サイズを満たすアロケーションユニットを分割する。分割（Ｓ８０５）が終了すると、Ｓ８０３が実行される。なお、Ｓ８０３及びＳ８０５を繰り返しても未使用エントリがない場合には、エラーと判定され、ロックフラグＦ１に０が設定され、メモリ管理処理が終了する。
【００３３】
＜メモリ領域割当（Ｓ８０６）＞  割当部１３２が、未使用エントリ取得（Ｓ８０４）において取得された未使用エントリに基づいて、メモリ領域をデータ処理装置１５に割り当てる。図１２は、メモリ領域割当（Ｓ８０６）の手順を示すフローチャートである。
【００３４】
＜メモリ領域確保（Ｓ１２０１）＞  割当部１３２が、未使用エントリ取得（Ｓ８０４）において取得された未使用エントリに対応する先頭アドレスｐからｐ＋２ＲＥＱ＿Ｓ×ＡＳまでのメモリ領域を確保する。すなわち、確保されるメモリ領域のサイズは、２ＲＥＱ＿Ｓ×ＡＳである。
【００３５】
＜エントリポインタ登録（Ｓ１２０２）＞  割当部１３２が、メモリ領域確保（Ｓ１２０１）において確保されたメモリ領域の末尾に、未使用エントリへのエントリポインタ（すなわち、未使用エントリの先頭アドレス）ＥＰＮＴを登録する。すなわち、割当部１３２は、メモリ領域の末尾にメモリ領域の先頭アドレスｐに該当するアロケーションユニットに対応するエントリへのエントリポインタＥＰＮＴを設ける。なお、エントリポインタ登録（Ｓ１２０２）は省略されても良い。
【００３６】
＜リファレンスカウンタ登録（Ｓ１２０３）＞  割当部１３２が、エントリポインタ登録（Ｓ１２０２）において登録されたエントリポインタの前に、メモリ管理装置１３と同数のリファレンスカウンタ（すなわち、複数のプロセッサ１２ａ，１２ｂと１対１に対応する複数のリファレンスカウンタ）を登録する。例えば、プロセッサ１２ａ，１２ｂがそれぞれメモリ管理装置１３を実現する（すなわち、２つのメモリ管理装置１３が実現される）場合には、リファレンスカウンタＲＣａがプロセッサ１２ａに対応し、リファレンスカウンタＲＣｂがプロセッサ１２ｂに対応する。このとき、複数のリファレンスカウンタＲＣａ，ＲＣｂには、０（初期値）が設定される。なお、エントリポインタ登録（Ｓ１２０２）が省略される場合には、複数のリファレンスカウンタは、メモリ領域確保（Ｓ１２０１）において確保されたメモリ領域の末尾に登録される。
【００３７】
＜リファレンスカウンタ設定（Ｓ１２０４）＞  割当部１３２が、メモリ領域割当（Ｓ８０６）の対象となるメモリ管理装置１３を実現するプロセッサに対応するリファレンスカウンタに１を設定する。例えば、プロセッサ１２ａにより実現されるメモリ管理装置１３がメモリ領域割当の対象である場合には、プロセッサ１２ａに対応するリファレンスカウンタＲＣａに１が設定される。
【００３８】
＜レスポンス（Ｓ１２０５）＞  割当部１３２が、未使用エントリ取得（Ｓ８０４）において取得された未使用エントリに対応する先頭アドレスｐをデータ処理装置１５に返すためのレスポンスを発行する。これにより、メモリ領域がデータ処理装置１５に割り当てられる。図１３は、メモリ領域割当において得られるメモリ領域のデータ構造を示す概略図である。データ処理装置１５に割り当てられるメモリ領域は、図１３に示すように、データ処理装置１５により取り扱われるデータ（例えば、画像データ）を格納するためのデータブロックＤと、各プロセッサ１２ａ，１２ｂに対応するリファレンスカウンタＲＣａ，ＲＣｂと、未使用エントリへのエントリポインタＥＰＮＴと、を含む。すなわち、割当部１３２は、各プロセッサ１２ａ，１２ｂの要求に基づいて、各プロセッサ１２ａ，１２ｂに割り当てられる共有メモリ１４のメモリ領域を確保し、各メモリ領域に複数のプロセッサ１２ａ，１２ｂと１対１に対応する複数のリファレンスカウンタＲＣａ，ＲＣｂを設ける。レスポンス（Ｓ１２０５）が終了すると、メモリ割当（Ｓ５０３）が終了し、メモリ共有（Ｓ５０４）が実行される。
【００３９】
＜メモリ共有（Ｓ５０４）＞  共有部１３３が、データのコピーを避けるために、複数のデータ処理装置１５が割り当てられたメモリ領域を共有できるようにする。図１４は、メモリ共有（Ｓ５０４）の手順を示すフローチャートである。
【００４０】
＜探索（Ｓ１４０１）＞  探索部１３４が、メモリ割当（Ｓ５０３）においてデータ処理装置１５に割り当てられたメモリ領域に対応するエントリを探索する。図１５は、探索（Ｓ１４０１）の手順を示すフローチャートである。
【００４１】
＜基準スケール決定（Ｓ１５０１）＞  探索部１３４が、基準スケールＳｒを決定する。基準スケールＳｒの値は、スケールの最小値１又はスケールの最大値ｎである。例えば、探索部１３４は、基準スケールＳｒをｎに決定する。
＜末尾アドレス計算（Ｓ１５０２）＞  探索部１３４が、基準スケール決定（Ｓ１５０１）において決定した基準スケールＳｒ及び未使用エントリ取得（Ｓ８０４）において取得された未使用エントリの先頭アドレスｐを用いて、基準スケールＳｒに対応する仮のエントリＥｖの仮の末尾アドレスｑｖを計算する。
＜エントリポインタ計算（Ｓ１５０３）＞  探索部１３４が、末尾アドレス計算（Ｓ１５０２）において計算された仮の末尾アドレスｑｖに基づいて、仮のエントリＥｖへの仮のエントリポインタＥＰＮＴｖを計算する。
【００４２】
＜先頭アドレス計算（Ｓ１５０４）＞  探索部１３４が、末尾アドレス計算（Ｓ１５０２）において計算された仮の末尾アドレスｑｖを用いて、仮のエントリＥｖの先頭アドレスｐｖを計算する。これにより、仮のエントリＥｖが得られる。図１６は、先頭アドレス計算において得られる仮のエントリＥｖのデータ構造を示す概略図である。仮のエントリＥｖは、仮のスケールＳｖと、仮の使用フラグＦ２ｖと、仮のリンクポインタＬＰｖと、を含む。仮の先頭アドレスｐｖ及び仮の末尾アドレスｑｖは、仮のエントリＥｖが仮の先頭アドレスｐｖから仮の末尾アドレスｑｖに格納されたエントリであることを意味する。
【００４３】
＜Ｓ１５０５＞  探索部１３４が、先頭アドレス計算（Ｓ１５０４）において計算された仮の先頭アドレスｐｖと、未使用エントリ取得（Ｓ８０４）において取得された未使用エントリの先頭アドレスｐと、を照合する。仮の先頭アドレスｐｖが未使用エントリの先頭アドレスｐと一致する場合には（Ｓ１５０５−ＹＥＳ）、Ｓ１５０６が実行される。仮の先頭アドレスｐｖが未使用エントリの先頭アドレスｐと一致しない場合には（Ｓ１５０５−ＮＯ）、基準スケール変更（Ｓ１５１１）が実行される。
【００４４】
＜Ｓ１５０６＞  探索部１３４が、基準スケール決定（Ｓ１５０１）において決定された基準スケールＳｒと仮のスケールＳｖとを照合する。仮のスケールＳｖが基準スケールＳｒと一致する場合には（Ｓ１５０６−ＹＥＳ）、Ｓ１５０７が実行される。仮のスケールＳｖが基準スケールＳｒと一致しない場合には（Ｓ１５０６−ＮＯ）、基準スケール変更（Ｓ１５１１）が実行される。
【００４５】
＜Ｓ１５０７＞  探索部１３４が、エントリポインタ計算（Ｓ１５０３）において計算された仮のエントリポインタＥＰＮＴｖに対応する実際のエントリＥの使用フラグＦ２が１であるか否かを判定する。仮のエントリポインタＥＰＮＴｖに対応する実際のエントリＥの使用フラグＦ２が１である場合には（Ｓ１５０７−ＹＥＳ）、スケール決定（Ｓ１５０８）が実行される。仮のエントリポインタＥＰＮＴｖに対応する実際のエントリＥの使用フラグＦ２が０である場合には（Ｓ１５０７−ＮＯ）、メモリ管理処理が終了する。
【００４６】
＜スケール決定（Ｓ１５０８）＞  探索部１３４が、基準スケール決定（Ｓ１５０１）において決定した基準スケールＳｒを、未使用エントリ取得（Ｓ８０４）において取得された未使用エントリの先頭アドレスｐに対応するスケールとして決定する。すなわち、探索部１３４は、エントリポインタＥＰＮＴに基づいて、メモリ領域のスケールを決定する。スケール決定（Ｓ１５０８）が終了すると、エントリの探索が終了し、リファレンスカウンタ更新（Ｓ１４０２）が実行される。
【００４７】
＜基準スケール変更（Ｓ１５１１）＞  探索部１３４が、基準スケールＳｒの値を変更する。具体的には、解放部１３５は、基準スケールＳｒの値から１を減算又は基準スケールＳｒの値に１を加算する。基準スケール変更（Ｓ１５１１）が終了すると、末尾アドレス計算（Ｓ１５０２）が実行される。
【００４８】
＜リファレンスカウンタ更新（Ｓ１４０２）＞  更新部１３６が、メモリ管理装置１３を実現するプロセッサに対応するリファレンスカウンタの値に１を加算する。すなわち、更新部１３６は、メモリ領域を各プロセッサ１２ａ，１２ｂに割り当てるときに、メモリ領域を管理するプロセッサに対応するリファレンスカウンタの値に１を加算する。例えば、プロセッサ１２ａがメモリ管理装置１３を実現する場合には、更新部１３６は、プロセッサ１２ａに対応するリファレンスカウンタＲＣａの値に１を加算する。リファレンスカウンタ更新（Ｓ１４０２）が終了すると、メモリ共有（Ｓ５０４）が終了し、メモリ解放（Ｓ５０５）が実行される。
【００４９】
＜メモリ解放（Ｓ５０５）＞  解放部１３５が、メモリ領域をデータ処理装置１５から解放する。図１７は、メモリ解放（Ｓ５０５）の手順を示すフローチャートである。
【００５０】
＜探索（Ｓ１７０１）＞  探索部１３４が、Ｓ１４０１と同様に、探索を実行する。
＜リファレンスカウンタ更新（Ｓ１７０２）＞  更新部１３６が、メモリ管理装置１３を実現するプロセッサに対応するリファレンスカウンタの値から１を減算する。すなわち、更新部１３６は、共有メモリ１４が割り当てられたプロセッサからメモリ領域を解放するときに、メモリ領域を管理するプロセッサに対応するリファレンスカウンタの値から１を減算する。例えば、プロセッサ１２ａがメモリ管理装置１３を実現する場合には、更新部１３６は、プロセッサ１２ａに対応するリファレンスカウンタＲＣａの値から１を減算する。
【００５１】
＜Ｓ１７０３＞  解放部１３５が、全てのリファレンスカウンタ（例えば、リファレンスカウンタＲＣａ，ＲＣｂ）の値の合算結果が０であるか否かを判定する。合算結果が０である場合には（Ｓ１７０３−ＹＥＳ）、フリーリスト返却（Ｓ１７０４）が実行される。合算結果が０でない場合には（Ｓ１７０３−ＮＯ）、メモリ管理処理が終了する。すなわち、解放部１３５は、更新部１３６により更新されたメモリ領域における複数のリファレンスカウンタの値の合算結果が０である場合に、メモリ領域が割り当てられたプロセッサからメモリ領域を解放する。
【００５２】
＜フリーリスト返却（Ｓ１７０４）＞  解放部１３５が、フリーリストを返却する。図１８は、フリーリスト返却（Ｓ１７０４）の手順を示すフローチャートである。
【００５３】
＜ロック（Ｓ１８０１）＞  解放部１３５が、ロックフラグＦ１に１（ロック）を設定する。なお、ロックフラグＦ１に１が設定されている（すなわち、他のメモリ管理装置１３によりフリーリストが使用されている）場合には、解放部１３５は、ロックフラグＦ１に０（アンロック）が設定されるまで待機し、ロックフラグＦ１に０が設定された後にロックフラグＦ１に１を設定する。
【００５４】
＜使用フラグ設定（Ｓ１８０２）＞  解放部１３５が、仮のエントリポインタＥＰＮＴｖに対応する実際のエントリＥの使用フラグＦ２に０（未使用）を設定する。
＜併合（Ｓ１８０３）＞  解放部１３５が、擬似コードに基づいて、アロケーションユニットを併合する。図１９は、併合の手順を示す擬似コードである。図１９の擬似コードは、図１１の擬似コードにより表される分割（Ｓ８０５）と逆の処理により、併合が実行されることを表す。
【００５５】
＜アンロック（Ｓ１８０４）＞  解放部１３５が、ロックフラグＦ１に０を設定する。アンロックが終了すると、メモリ管理処理が終了する。
【００５６】
本実施形態に係るメモリ管理装置１３の少なくとも一部は、ハードウェアで構成しても良いし、ソフトウェアで構成しても良い。ソフトウェアで構成する場合には、メモリ管理装置１３の少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させても良い。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でも良い。
【００５７】
また、本実施形態に係るメモリ管理装置１３の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布しても良い。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布しても良い。
【００５８】
なお、本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で構成要素を変形して具体化される。また、上述した実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明が形成可能である。例えば、上述した実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００５９】
１０  マルチプロセッサシステム
１２ａ，１２ｂ  プロセッサ
１３  メモリ管理装置
１３１  初期化部
１３２  割当部
１３３  共有部
１３４  探索部
１３５  解放部
１３６  更新部
１４  共有メモリ
１５  データ処理装置
１６  接続線（バス又はインターコネクト） 
【図１】
2012093882.tif 000003
【図２】
2012093882.tif 000004
【図３】
2012093882.tif 000005
【図４】
2012093882.tif 000006
【図５】
2012093882.tif 000007
【図６】
2012093882.tif 000008
【図７】
2012093882.tif 000009
【図８】
2012093882.tif 000010
【図９】
2012093882.tif 000011
【図１０】
2012093882.tif 000012
【図１１】
2012093882.tif 000013
【図１２】
2012093882.tif 000014
【図１３】
2012093882.tif 000015
【図１４】
2012093882.tif 000016
【図１５】
2012093882.tif 000017
【図１６】
2012093882.tif 000018
【図１７】
2012093882.tif 000019
【図１８】
2012093882.tif 000020
【図１９】
2012093882.tif 000021