(57)【要約】【課題】キャッシュの一貫性を保ちつつマルチコアプロセッサがメインメモリとして使用できる領域を動的に追加／削除することができるマルチコアプロセッサシステムを提供する。【解決手段】マルチコアプロセッサは、被管理領域３１に含まれる小領域毎に、プロセッサコアに割り当てられていない未割り当て状態かまたはすでにプロセッサコアに割り当てられている割り当て済み状態であるかを管理するとともに小領域毎のメモリアクセスプロトコルを管理する状態管理部（２１、２２、３３および３４）と、被管理領域のうちの未割り当て状態の小領域を増減させることによって被管理領域３１を増減させる被管理領域増減部２３と、を備える。【選択図】図７
2011003072.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュを夫々備える複数のプロセッサコアを備えるマルチコアプロセッサと、
一部が前記マルチコアプロセッサがメインメモリとして使用できる領域である被管理領域に割り当てられるメモリと、
を備え、
前記マルチコアプロセッサは、
前記被管理領域に含まれる小領域毎に、前記マルチコアプロセッサが備えるプロセッサコアに割り当てられていない未割り当て状態かまたはすでにプロセッサコアに割り当てられている割り当て済み状態であるかを管理するとともに、前記割り当て済み状態を、前記キャッシュを使用した読み出し／書き込みアクセスを行うことが可能なキャッシュ使用アクセス可能状態、前記キャッシュを使用しない読み出し／書き込みアクセスが可能なキャッシュ不使用アクセス可能状態、および読み出しアクセスのみ可能な読み出しアクセス可能状態、を含む群のうちの何れか一つの状態にさらに分類し、前記マルチコアプロセッサが備えるプロセッサコアからの要求に応じて、前記未割り当て状態と前記キャッシュ不使用アクセス可能状態との間の遷移、前記キャッシュ不使用アクセス可能状態と前記キャッシュ使用アクセス可能状態との間の遷移、および前記キャッシュ不使用アクセス可能状態と前記読み出しアクセス可能状態との間の遷移、を実行する状態管理部と、
前記被管理領域のうちの前記未割り当て状態の小領域を増減させることによって前記被管理領域を増減させる被管理領域増減部と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記メモリが備えるメモリ領域を前記被管理領域に割り当てるメモリ管理部をさらに備え、
前記被管理領域増減部は、前記被管理領域を増減させる旨の要求を前記メモリ管理部に送信し、前記メモリ管理部から前記要求に対する許可を得た後、前記被管理領域を増減させる、
ことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記状態管理部は、前記マルチコアプロセッサが備えるプロセッサコアからの要求に応じて、前記未割り当て状態と前記キャッシュ使用アクセス可能状態との間の遷移をさらに実行する、
ことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項４】
前記メモリ管理部は、前記マルチコアプロセッサまたは前記マルチコアプロセッサとは異なる専用のプロセッサに備えられる、ことを特徴とする請求項２に記載のマルチコアプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサシステムに関する。
【背景技術】
【０００２】
非特許文献１には、チップ面積および消費電力の増加を抑制することを目的とし、キャッシュの一貫性を維持する機能をハードウェア機構ではなくソフトウェアで実装する技術が開示されている。この技術によれば、メモリアクセスにプロトコルを定義してメモリに状態を与え、状態毎に決められたメモリのアクセスを許可してキャッシュの一貫性を維持する。しかしながら、この方法ではマルチコアプロセッサがメインメモリとして使用できるメモリ領域を動的に追加、削除することが出来ないという問題があった。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】坪井芳郎、太田裕、山下高廣著、”東芝の次世代ＳｏＣ「Ｖｅｎｅｚｉａ」ホモジニアス・マルチコアを採用”、日経エレクトロニクス、日経ＢＰ社、２００８年６月３０日、第９８１号、ｐ．１１１、１１３−１１４
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、キャッシュの一貫性を保ちつつマルチコアプロセッサがメインメモリとして使用できる領域を動的に追加／削除することができるマルチコアプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、キャッシュを夫々備える複数のプロセッサコアを備えるマルチコアプロセッサと、一部が前記マルチコアプロセッサがメインメモリとして使用できる領域である被管理領域に割り当てられるメモリと、を備え、前記マルチコアプロセッサは、前記被管理領域に含まれる小領域毎に、前記マルチコアプロセッサが備えるプロセッサコアに割り当てられていない未割り当て状態かまたはすでにプロセッサコアに割り当てられている割り当て済み状態であるかを管理するとともに、前記割り当て済み状態を、前記キャッシュを使用した読み出し／書き込みアクセスを行うことが可能なキャッシュ使用アクセス可能状態、前記キャッシュを使用しない読み出し／書き込みアクセスが可能なキャッシュ不使用アクセス可能状態、および読み出しアクセスのみ可能な読み出しアクセス可能状態、を含む群のうちの何れか一つの状態にさらに分類し、前記マルチコアプロセッサが備えるプロセッサコアからの要求に応じて、前記未割り当て状態と前記キャッシュ不使用アクセス可能状態との間の遷移、前記キャッシュ不使用アクセス可能状態と前記キャッシュ使用アクセス可能状態との間の遷移、および前記キャッシュ不使用アクセス可能状態と前記読み出しアクセス可能状態との間の遷移、を実行する状態管理部と、前記被管理領域のうちの前記未割り当て状態の小領域を増減させることによって前記被管理領域を増減させる被管理領域増減部と、を備えることを特徴とするマルチコアプロセッサシステムが提供される。
【発明の効果】
【０００６】
本発明によれば、キャッシュの一貫性を保ちつつマルチコアプロセッサがメインメモリとして使用できる領域を動的に追加／削除することができるマルチコアプロセッサシステムを提供することができるという効果を奏する。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施の形態のマルチコアプロセッサシステムの構成を示す図。
【図２】図２は、従来技術によるメモリアクセスプロトコルを説明する図。
【図３】図３は、被管理領域が含むメモリ資源がタスクに割り当てられている様子を説明する図。
【図４】図４は、メモリ確保を行う動作を説明する図。
【図５】図５は、メモリ解放を行う動作を説明する図。
【図６】図６は、第１の実施の形態によるメモリアクセスプロトコルを説明する図。
【図７】図７は、第１の実施の形態のマルチコアプロセッサシステムの機能構成を説明する図。
【図８】図８は、メモリアクセスプロトコル管理情報のデータ構成を説明する図。
【図９】図９は、状態遷移の一例を説明するフローチャート。
【図１０】図１０は、被管理領域を追加する許可を得る手続きを説明するシーケンス図。
【図１１】図１１は、被管理領域を削除する許可を得る手続きを説明するシーケンス図。
【図１２】図１２は、メモリ領域を被管理領域に追加する動作を説明するフローチャート。
【図１３】図１３は、メモリ領域を被管理領域から削除する動作を説明するフローチャート。
【図１４】図１４は、拡張されたメモリアクセスプロトコルを説明する図。
【図１５】図１５は、第２の実施の形態のマルチコアプロセッサシステムの構成を示す図。
【図１６】図１６は、第２の実施の形態のマルチコアプロセッサシステムの機能構成を説明する図。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、本発明の実施の形態にかかるマルチコアプロセッサシステムを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【０００９】
（第１の実施の形態）
図１は、本発明の第１の実施の形態にかかるマルチコアプロセッサシステムの構成を示すブロック図である。
【００１０】
図１に示すように、マルチコアプロセッサシステム１は、マルチコアプロセッサ２と、メモリ３と、メモリ管理プロセッサ４と、通信用バッファ５と、を備えている。夫々の構成要素（マルチコアプロセッサ２、メモリ３、メモリ管理プロセッサ４および通信用バッファ５）は、バスを介して夫々接続されている。なお、夫々の構成要素をバスではなくメッシュなど他のネットワークトポロジーによって夫々接続するように構成してもよい。
【００１１】
マルチコアプロセッサ２は、タスクを実行するためのコアを複数備え、夫々のコアは個別にキャッシュを備えている。
【００１２】
メモリ３は、例えばＲＡＭ（Random  Access  Memory）により構成される。メモリ３には、マルチコアプロセッサ２が備えるコアがタスク実行時に使用するワークエリアが前記コアに逐次割り当てられる領域、言い換えるとマルチコアプロセッサ２がメインメモリとして使用できる領域、である被管理領域３１が確保されている。また、メモリ３には、マルチコアプロセッサ２を管理するプログラムであるカーネルプログラム３２がロードされている。マルチコアプロセッサ２は、カーネルプログラム３２を実行することによってキャッシュの一貫性を保ちつつ被管理領域３１内のメモリ領域を各コアに割り当てる。なお、以降の説明において、マルチコアプロセッサ２を主体として表現する動作は、マルチコアプロセッサ２がカーネルプログラム３２を実行することによって実現される。これらの動作に関しては、マルチコアプロセッサ２の代わりにカーネルプログラム３２を動作の主体として説明する場合もある。なお、カーネルプログラム３２のロード元は、プログラムを予め格納したＲＯＭ（Read  Only  Memory）などにより構成される不揮発性メモリ領域や外部記憶装置などであってよい。
【００１３】
メモリ管理プロセッサ４は、メモリ３のメモリ資源全体を管理する専用プロセッサである。メモリ管理プロセッサ４の具体的な機能については後述する。
【００１４】
通信用バッファ５は、マルチコアプロセッサ２とメモリ管理プロセッサ４との間で通信するための専用バッファである。
【００１５】
次に、本発明の第１の実施の形態の機能構成の説明を行う前に、非特許文献１に開示されているキャッシュの一貫性を保つ技術（以下、単に従来技術という）について説明する。なお、本第１の実施の形態はこの従来技術を包含するので、わかりやすくするために図１に示した構成および符号を使用して説明する。前述したように、従来技術では、ハードウェアではなくソフトウェアによりキャッシュの一貫性を保つ。ソフトウェアでキャッシュの一貫性を保つために、図２に示すようなメモリアクセスプロトコル（Memory  Access  Protocol、ＭＡＰ）を定義し、全てのタスク（正確にはタスクを実行するプロセッサコア）の被管理領域３１に対するアクセスが厳密にこのプロトコルに準拠するようになっている。
【００１６】
従来技術のＭＡＰによれば、図２に示すように、以下の４つの状態が定義されている。
（１）UNALLOCATED状態
カーネルプログラム３２によるタスクへの割り当てがなされておらず、割り当てが可能な状態をUNALLOCATED状態と定義する。具体的には、メモリ割り当て前およびメモリ解放後の状態がこの状態に属する。
（２）PRIVATE状態
キャッシュ（すなわちコアが備えるキャッシュ）を利用した読み出し／書き込みアクセスが許可される状態をPRIVATE状態と定義する。
（３）PUBLIC状態
全てのタスクに対しキャッシュを利用しない読み出し／書き込みアクセスが許可される状態をPUBLIC状態と定義する。
（４）PROTECTED状態
読み出しアクセスのみキャッシュを利用したアクセスが可能な状態をPROTECTED状態と定義する。この状態の領域には書き込みアクセスは一切出来ない。
【００１７】
以上の４つの状態間では矢印に示した向きの遷移が可能となっている。すなわち、UNALLOCATED状態とPUBLIC状態との間は遷移可能となっている。PUBLIC状態は、UNALLOCATED状態のほかに、PRIVATE状態との間、およびPROTECTED状態との間で遷移が可能となっている。このように各状態の定義に基づくメモリアクセスおよび状態遷移の関係を守ることにより、キャッシュの一貫性が保たれる。
【００１８】
夫々の状態遷移はカーネルプログラム３２が提供する関数を呼び出すことによって行われる。呼び出される関数は遷移前の状態と遷移後の状態によって夫々個別に定められている。夫々の関数の引数として、遷移させたいメモリ領域の先頭アドレスとサイズとが使用される。引数として与えられるメモリ領域の状態が関数と対応していない場合は、関数内でそのことを検出できるようになっている。
【００１９】
図３は、被管理領域３１が含むメモリ資源がタスクに割り当てられている様子を説明する図である。被管理領域３１のメモリ資源は、予め決められた単位毎に管理される。被管理領域３１の単位サイズ毎の領域には、タスクに割り当てているか否かを示す二値変数isAllocatedが定義される。isAllocated変数は、主に被管理領域３１のうちのタスクに割り当てられていない領域を探索する用途で使用される。isAllocatedが”true”である領域は既にタスクに割り当てられており、PRIVATE状態、PUBLIC状態およびPROTECTED状態のうちの何れか一つの状態が設定される。また、”false”である領域はタスクに割り当てられておらず、UNALLOCATED状態が設定される。被管理領域３１以外の領域はカーネルプログラム３２の管理下になく、isAllocated変数が定義されていない。タスクからメモリ確保、解放の要求がある場合、カーネルプログラム３２は、次に説明する関数を呼び出し、ＭＡＰの状態を適切な状態へ遷移させる。
【００２０】
（１）allocate(size_t  size,  State  state)
この関数は、タスクからメモリ確保の要求がある場合に呼び出される。図４はallocate関数を呼び出して実行することによりメモリ確保を行う動作を説明するフローチャートである。図４に示すように、タスクからメモリ確保の要求を受信したとき、まず、マルチコアプロセッサ２（カーネルプログラム３２）は、isAllocated変数を手がかりとし、タスクが確保したいサイズ（allocate関数の引数”size_t”として渡されるサイズ）の連続したメモリ領域（メモリ領域Ｍ）が被管理領域３１に空いているか否かを判定する（ステップＳ１）。空いていない場合（ステップＳ１、Ｎｏ）、マルチコアプロセッサ２は、タスクにゼロ値（NULL）を返し（ステップＳ２）、動作を終了する。メモリ領域が空いている場合（ステップＳ１、Ｙｅｓ）、マルチコアプロセッサ２はUNALLOCATED状態から所望の状態（引数”State”、ここではPUBLIC）に遷移させるための関数を呼び出して実行することにより確保したいサイズのメモリ領域のＭＡＰの状態をPUBLIC状態に遷移させ（ステップＳ３）、isAllocated変数を”true”とする（ステップＳ４）。そして、マルチコアプロセッサ２は、この遷移させた領域の先頭アドレスをタスクに返し（ステップＳ５）、動作を終了する。
【００２１】
（２）free  (void  *adr,  size_t  size,  State  state)
この関数は、タスクからメモリ解放の要求がある場合に呼び出される。図５はfree関数を呼び出して実行することによりメモリ解放を行う動作を説明するフローチャートである。図５に示すように、タスクからメモリ解放の要求を受信したとき、マルチコアプロセッサ２は、解放したいメモリ領域（free関数の引数”*adr”で渡される先頭アドレスと引数”size_t”で渡されるサイズとにより指定されるメモリ領域（メモリ領域Ｍ））が引数”State”で渡される現在の状態からUNALLOCATED状態に遷移できるか否かを判定する（ステップＳ１１）。引数”State”で渡される状態がPUBLIC状態ではなく、UNALLOCATED状態に遷移できないと判定した場合（ステップＳ１１、Ｎｏ）、動作を終了する。引数”State”で渡される状態がPUBLIC状態であり、UNALLOCATED状態に遷移できると判定した場合（ステップＳ１１、Ｙｅｓ）、マルチコアプロセッサ２は、PUBLIC状態からUNALLOCATED状態に遷移させるための関数を呼び出して実行することによってこの対象のメモリ領域の状態をUNALLOCATED状態に遷移させる（ステップＳ１２）。そして、マルチコアプロセッサ２は、この遷移させた対象のメモリ領域のisAllocated変数を”false”とし（ステップＳ１３）、動作を終了する。
【００２２】
なお、PUBLIC状態とPRIVATE状態との間、PUBLIC状態とPROTECTED状態との間の遷移は、タスクからの要求に応じてカーネルプログラム３２が対応する関数を呼び出して実行することにより行われる。
【００２３】
このように、カーネルプログラム３２は、どのメモリ領域が割り当てられているかを管理し、それに併せてＭＡＰの状態を遷移させる関数を呼び出す。そして、タスクはアクセス先のメモリ領域の状態に基づいて被管理領域３１にアクセスすることによって、コアが有するキャッシュとメインメモリ領域としての被管理領域３１との間の一貫性（キャッシュの一貫性）を保つことができるようになっている。
【００２４】
しかしながら、被管理領域３１が含むメモリ領域におけるタスクに割り当てられていない領域が不足したり、逆に大量に余ることがある。上記した従来技術によれば、カーネルプログラム３２は、被管理領域３１以外の領域がどのデバイスによって管理されているかがわからない。したがって、タスクに割り当てられていない余った領域をカーネルプログラム３２以外が使用できるようにするために被管理領域３１を減らしたり、タスクに割り当てられていない領域が不足したときに被管理領域３１を追加したりできない。すなわち、メモリ使用効率が悪いという問題があった。これに対して、本第１の実施の形態では、図６に示すように、従来技術のＭＡＰに被管理領域３１外における領域の状態であって被管理領域３１に変更することが可能な状態を定義するDECONTROLLED状態を追加し、DECONTROLLED状態とUNALLOCATED状態との間の遷移を操作することによってUNALLOCATED状態のメモリ領域を増減させ、結果として被管理領域３１を増減させることを可能にしたことが主たる特徴となっている。
【００２５】
図７は、上記した特徴を実現するためのマルチコアプロセッサシステム１の機能構成を説明する図である。図示するように、マルチコアプロセッサ２は、カーネルプログラム３２を実行することによりメモリアロケート管理部２１、メモリアクセスプロトコル管理部２２および被管理領域増減部２３を生成する。
【００２６】
メモリアロケート管理部２１は、被管理領域３１内のメモリ資源に定義されているisAllocated変数の状態を変化させる機能部である。具体的には、メモリアロケート管理部２１は、allocate関数およびfree関数と、タスクの要求に応じてこの群から希望する関数を呼び出して実行する機能と、を指す。allocate関数およびfree関数は、被管理領域３１内のメモリ資源のisAllocated変数の状態を示すメモリアロケート管理情報３３を操作する。図８は、メモリアロケート管理情報３３のデータ構造の一例を説明する図である。
【００２７】
図８において、メモリアロケート管理情報３３における”アドレス”の欄が示す先頭アドレスと”サイズ”の欄が示す領域のサイズとにより一つの連続したアドレスの被管理領域３１が規定される。アドレスが連続した個々の被管理領域３１が複数存在する場合は、”アドレス”および”サイズ”が複数セット規定される。”ＩＤ”欄は、複数セット規定されている夫々の連続した被管理領域３１を夫々区別するための識別子である。”isAllocated”欄には、夫々の連続した被管理領域３１について、予め決められた単位サイズのメモリ領域毎に定義されている変数isAllocatedの値が記述される。ここでは、”ＩＤ０”の被管理領域３１のメモリ領域のisAllocated変数は、先頭から”false”、”true”、”false”・・・となっていることを示している。
【００２８】
図７に戻り、メモリアクセスプロトコル（ＭＡＰ）管理部２２は、被管理領域３１内のメモリ資源の状態を管理する機能部であって、具体的には従来技術にて説明したUNALLOCATED状態とPUBLIC状態との間、PUBLIC状態とPRIVATE状態との間、およびPUBLIC状態とPROTECTED状態との間の遷移を行うために呼び出される夫々の関数およびタスクの要求に応じてこの関数群から希望する関数を呼び出して実行する機能を指す。これらの関数群は、被管理領域３１内のメモリ資源が現在どのような状態になっているかを示す情報であるメモリアクセスプロトコル（ＭＡＰ）管理情報３４を操作する。ＭＡＰ管理情報３４は、具体的には、isAllocated変数が”true”となっているメモリ領域毎に、メモリ領域の状態を、PUBLIC状態、PRIVATE状態およびPROTECTED状態の３つの状態にさらに分類して記憶している。また、ＭＡＰ管理情報３４は、isAllocated変数が”false”となっている領域の状態をUNALLOCATED状態として記憶している。
【００２９】
なお、メモリアロケート管理情報３３およびＭＡＰ管理情報３４が保持される場所については、マルチコアプロセッサ２が読み出し／書き込みアクセス可能な記憶領域であれば特に限定しない。ここでは、メモリアロケート管理情報３３およびＭＡＰ管理情報３４はメモリ３内に保持されているとする。また、メモリ３をバックアップ電源を持たない揮発性メモリにより構成する場合、電源ＯＦＦ時には被管理領域３１が消失するが、メモリアロケート管理情報３３およびＭＡＰ管理情報３４は被管理領域３１とともに消失し、電源ＯＮ時にカーネルプログラム３２により生成されるようにしてよい。また、電源ＯＦＦ時には被管理領域３１内のデータを不揮発性の記憶領域に退避するように構成する場合、メモリアロケート管理情報３３およびＭＡＰ管理情報３４も前記被管理領域３１内のデータとともに退避させるようにしてよい。
【００３０】
なお、ここでは、被管理領域３１以外の領域は暗黙のうちにDECONTROLLED状態であるとし、ＭＡＰ管理情報３４ではこのDECONTROLLED状態の領域を明示的に管理しないようにしているが、ＭＡＰ管理情報３４は被管理領域３１以外の領域をDECONTROLLED状態の領域として記憶するようにしてもよい。
【００３１】
被管理領域増減部２３は、被管理領域３１を増減させる。具体的には、被管理領域増減部２３は、新しく追加されたDECONTROLLED状態とUNALLOCATED状態との間の遷移を行うための関数と、isAllocated変数を生成／削除する関数と、を実行することによって、被管理領域３１を増減させる。isAllocated変数を生成／削除する関数について以下に説明する。
（１）add_control_memory_field(void  *addr,  size_t  size)
この関数は、引数”adr”が示す先頭アドレスと引数”size”が示すサイズにより規定されるメモリ領域のisAllocated変数を生成し、生成したisAllocated変数に”false”を代入する。より具体的には、この関数は、メモリアロケート管理情報３３に、引数”adr”が示すアドレスおよび引数”size”が示すサイズのエントリを追加し、追加したエントリの”isAllocated”の欄に記述される単位サイズ毎のメモリ領域のisAllocated変数の値を全て”false”とする。
（２）remove_control_memory_field(void  *addr,  size_t  size)
この関数は、引数”adr”が示す先頭アドレスと引数”size”が示すサイズにより規定されるメモリ領域のisAllocated変数を削除する。具体的には、この関数は、メモリアロケート管理情報３３において規定されている被管理領域３１から、引数”adr”が示す先頭アドレスと引数”size”が示すサイズにより規定されるメモリ領域の分の記述を削除する。
【００３２】
なお、被管理領域増減部２３は、UNALLOCATED状態のメモリ領域のサイズに応じて被管理領域３１の増減を行うか否かを決定するようにするとよい。例えば、UNALLOCATED状態のメモリ領域が足りなくなる事態が見込まれるとき、被管理領域３１を増加させるようにするとよい。また、UNALLOCATED状態のメモリ領域が大量に余っており、暫くこの余っている領域を使用する見込みがないとき、被管理領域３１を減少させるようにするとよい。
【００３３】
被管理領域増減部２３は、被管理領域３１を増減させる前に、メモリ管理プロセッサ４に被管理領域３１を増減させる旨の要求（被管理領域増減要求）を送信する。メモリ管理プロセッサ４は前述のようにメモリ３のメモリ資源全体を管理する専用プロセッサであって、どの領域がどのデバイスの管理下に置かれているかを記憶している。例えば、被管理領域３１はマルチコアプロセッサ２（正確にはカーネルプログラム３２）の管理下に置かれていることを記憶している。換言すると、メモリ管理プロセッサ４は、被管理領域３１にメモリ３のメモリ資源を割り当てる機能を有している。メモリ管理プロセッサ４は、被管理領域増減部２３から被管理領域増減要求を受信したとき、受信した要求を許可してもよいか否かを判定し、許可してもよいと判定したとき、被管理領域の増減を許可する旨の被管理領域増減許可を被管理領域増減部２３に送信する。被管理領域増減部２３は、被管理領域増減許可を受信した後、被管理領域３１を増減させる。なお、被管理領域増減要求および被管理領域増減許可は、被管理領域増減部２３とメモリ管理プロセッサ４との間で通信用バッファ５を介して送受信される。
【００３４】
次に、本第１の実施の形態のマルチコアプロセッサシステム１の動作を説明する。まず、動作の概要として、状態遷移の一例を説明する。図９は、あるメモリ領域の状態遷移の一例を説明するフローチャートである。
【００３５】
図９に示すように、メモリ領域は、カーネルプログラム３２に管理されていないDECONTROLLED状態となっている（ステップＳ２１）。すなわち、このメモリ領域は被管理領域３１に含まれていない。次に、カーネルプログラム３２の管理下に置かれ、被管理領域増減部２３の動作によりこのメモリ領域のＭＡＰの状態はUNALLOCATED状態に遷移する（ステップＳ２２）。すなわち、このメモリ領域は被管理領域３１に追加される。次に、カーネルプログラム３２にタスクからメモリの割り当て要求が入ると、ＭＡＰ管理部２２の動作により、このメモリ領域の状態はタスクが要求する状態であるPUBLIC状態に遷移し、タスクに割り当てられる（ステップＳ２３）。その後、タスクがＭＡＰ管理部２２が有する対応する関数を呼び出して実行することによって、このメモリ領域は、PRIVATE状態、PUBLIC状態へと遷移し（ステップＳ２４、ステップＳ２５）、タスクはメモリの解放をＭＡＰ管理部２２に依頼する。ＭＡＰ管理部２２は解放要求が通知されると、ＭＡＰの状態をUNALLOCATED状態に遷移させる（ステップＳ２６）。そして、カーネルプログラム３２の管理下から外すことになると、被管理領域増減部２３は、このメモリ領域の状態をDECONTROLLED状態に遷移させる（ステップＳ２７）。すなわち、被管理領域増減部２３は、このメモリ領域を被管理領域３１から削除する。
【００３６】
続いて、被管理領域増減部２３が被管理領域３１を追加／削除するときの動作を説明する。図１０は、被管理領域を追加する際に被管理領域を追加する許可を得る手続きを説明するタイミングチャートである。図示するように、被管理領域増減部２３は、通信用バッファ５に、被管理領域３１を増加させるための要求として、確保したいメモリ領域の情報（先頭アドレス、サイズ）を書き込む（ステップＳ３１）。通信用バッファ５は、要求の書き込みがあったことをメモリ管理プロセッサ４に通知し、該通知を受信したメモリ管理プロセッサ４は、通信用バッファ５から追加要求されたメモリ領域の先頭アドレスとサイズとを読み出す（ステップＳ３２）。メモリ管理プロセッサ４は、その要求が許可できるものであるか否かを判定し（ステップＳ３３）、許可できるものであったのならば、被管理領域３１にそのメモリ領域を追加、すなわちカーネルプログラム３２の管理下に移したことを記憶し（ステップＳ３４）、被管理領域増減許可として要求を許可した旨を通信用バッファ５に書き込む（ステップＳ３５）。ステップＳ３３の判定において許可できるものではなかった場合は、ステップＳ３５において許可できない旨を書き込む。そして、通信用バッファ５は、許可／非許可が書き込まれたことを被管理領域増減部２３に通知し、該通知を受信した被管理領域増減部２３は、許可／非許可を読み出し、メモリ領域を追加する要求に対する結果を知る（ステップＳ３６）。
【００３７】
図１１は、被管理領域を削除する際に被管理領域を削除する許可を得る手続きを説明するタイミングチャートである。図示するように、被管理領域増減部２３は、通信用バッファ５に、被管理領域３１を削除させるための要求として、被管理領域３１のうちの削除（解放）したいメモリ領域の情報（先頭アドレス、サイズ）を書き込む（ステップＳ４１）。通信用バッファ５は、要求の書き込みがあったことをメモリ管理プロセッサ４に通知し、該通知を受信したメモリ管理プロセッサ４は、通信用バッファ５から解放要求されたメモリ領域の先頭アドレスとサイズとを読み出す（ステップＳ４２）。メモリ管理プロセッサ４は、その要求が許可できるものであるか否かを判定し（ステップＳ４３）、許可できるものであったのならば、被管理領域３１からそのメモリ領域を削除、すなわちカーネルプログラム３２の管理下から削除したことを記憶し（ステップＳ４４）、被管理領域増減許可として要求を許可した旨を通信用バッファ５に書き込む（ステップＳ４５）。ステップＳ４３の判定において許可できるものではなかった場合は、ステップＳ４５において許可できない旨を書き込む。そして、通信用バッファ５は、許可／非許可が書き込まれたことを被管理領域増減部２３に通知し、該通知を受信した被管理領域増減部２３は、許可／非許可を読み出し、メモリ領域を解放する要求に対する結果を知る（ステップＳ４６）。
【００３８】
図１２は、メモリ管理プロセッサ４から許可が下りた場合に、被管理領域増減部２３が、要求したメモリ領域を被管理領域３１に追加する動作を説明するフローチャートである。被管理領域３１に追加するメモリ領域をメモリ領域Ｍと表現する。図示するように、まず、メモリ領域Ｍを被管理領域３１に追加する要求に対する許可が下りると（ステップＳ５１）、被管理領域増減部２３は、メモリ領域Ｍの状態をDECONTROLLED状態からUNALLOCATED状態に遷移させる関数を呼び出して実行する（ステップＳ５２）。そして、被管理領域増減部２３は、add_control_memory_fieldを呼び出して実行することにより、メモリ領域ＭのisAllocated変数を生成し、生成したisAllocated変数に”false”を代入し（ステップＳ５３）、被管理領域３１にメモリ領域Ｍを追加する動作を終了する。追加されたメモリ領域Ｍは、カーネルプログラム３２によりタスクに割り当て可能な状態となる。
【００３９】
図１３は、メモリ管理プロセッサ４から許可が下りた場合に、被管理領域増減部２３が、要求したメモリ領域を被管理領域３１から削除する動作を説明するフローチャートである。削除するメモリ領域をメモリ領域Ｍと表現する。図示するように、まず、メモリ領域Ｍを被管理領域３１から削除する要求に対する許可が下りると（ステップＳ６１）、被管理領域増減部２３は、remove_control_memory_fieldを呼び出して実行することにより、メモリ領域ＭのisAllocated変数を削除する（ステップＳ６２）。そして、被管理領域増減部２３は、メモリ領域Ｍの状態をUNALLOCATED状態からDECONTROLLED状態に遷移させる関数を呼び出して実行し（ステップＳ６３）、被管理領域３１からメモリ領域Ｍを削除する動作を終了する。削除されたメモリ領域Ｍは、カーネルプログラム３２の管理下から外れ、タスクが使用することができない状態となる。
【００４０】
以上のように、被管理領域３１に含まれるメモリ領域毎に、isAllocated変数が”false”、すなわちUNALLOCATED状態である（未割り当て状態である）かまたはisAllocated変数が”true”である（割り当て済み状態）であるかを管理するとともに、isAllocated変数が”true”である状態を、キャッシュを使用した読み出し／書き込みアクセスを行うことが可能なPRIVATE状態（キャッシュ使用アクセス可能状態）か、キャッシュを使用しない読み出し／書き込みアクセスが可能なPUBLIC状態（キャッシュ不使用アクセス可能状態）か、読み出しアクセスのみ可能なPROTECTED状態（読み出しアクセス可能状態）か、のうちの何れか一つの状態にさらに分類し、タスク（換言するとマルチコアプロセッサ２が備えるプロセッサコア）からの要求に応じて、UNALLOCATED状態とPUBLIC状態との間の遷移、PUBLIC状態とPRIVATE状態との間の遷移、およびPUBLIC状態とPROTECTED状態との間の遷移、を実行する状態管理部としてのメモリアロケート管理部２１、ＭＡＰ管理部２２、メモリアロケート管理情報３３およびＭＡＰ管理情報３４と、被管理領域３１のうちのUNALLOCATED状態のメモリ領域を増減させることによって被管理領域３１を増減させる被管理領域増減部２３と、を備えるように構成したので、キャッシュの一貫性を保ちつつマルチコアプロセッサ２が使用できるメモリ領域を動的に追加／削除することができるようになる。
【００４１】
なお、図６に示したＭＡＰをさらに拡張し、図１４に示すようにUNALLOCATED状態とPRIVATE状態との間を遷移可能とするようにしてもよい。図６に示したＭＡＰによれば、タスクがキャッシュを使用してアクセスしていたメモリ領域をこのタスクから解放したい場合、いったんPUBLIC状態に移す必要があったが、図１４のようにＭＡＰを拡張することによって、より早くこのタスクから解放させることができるようになる。
【００４２】
なお、以上の説明においては、図６のように５つの状態を定義したＭＡＰを使用するようにしたが、キャッシュの一貫性を保つことができるのであれば前記５つの状態をさらに細分化した状態を定義するようにしてもよい。また、５つの状態以外の状態をさらに追加するようにしてもよい。
【００４３】
また、被管理領域３１のメモリ資源は、予め決められた単位毎に管理される、として説明したが、メモリ資源の管理単位のサイズは特に限定しない。また、メモリ資源の管理は予め決められた単位毎になされなくてもよい。すなわちメモリアロケート管理情報３３およびＭＡＰ管理情報３４により状態管理される個々のメモリ領域のサイズは互いに異なっていてもよい。
【００４４】
（第２の実施の形態）
第１の実施の形態では、メモリ資源の一部を被管理領域に割り当てるとともに、被管理領域増減部から被管理領域増減要求を受信したとき、受信した要求を許可してもよいか否かを判定し、許可してもよいと判定したとき、被管理領域の増減を許可する旨の被管理領域増減許可を被管理領域増減部に送信する機能を、専用のプロセッサであるメモリ管理プロセッサに持たせるようにしたが、この機能を専用のプロセッサではなく、マルチコアプロセッサ上で実現するようにしてもよい。
【００４５】
図１５は、メモリ管理プロセッサを省略し、メモリ管理プロセッサの機能をマルチコアプロセッサ上で実現するようにした第２の実施の形態のマルチコアプロセッサシステムの構成を説明する図である。図示するように、マルチコアプロセッサシステム６では、メモリ管理プロセッサおよびこのメモリ管理プロセッサとマルチコアプロセッサ２との間の通信を行うための通信用バッファが省略されている。メモリ３には、第１の実施の形態の機能に加え、メモリ管理プロセッサの機能を実現するカーネルプログラム３５がロードされている。
【００４６】
図１６は、マルチコアプロセッサシステム６の機能構成を説明する図である。図示するように、マルチコアプロセッサ２は、カーネルプログラム３５を実行することにより、メモリアロケート管理部２１と、メモリアクセスプロトコル（ＭＡＰ）管理部２２と、被管理領域増減部２３と、メモリ管理部２４と、を生成する。メモリ３の機能構成、ならびにメモリアロケート管理部２１、ＭＡＰ管理部２２および被管理領域増減部２３の機能は第１の実施の形態と同等である。また、メモリ管理部２４の機能は第１の実施の形態のメモリ管理プロセッサ４の機能と同等である。
【００４７】
このように、第２の実施の形態によれば、被管理領域３１を割り当てる機能をマルチコアプロセッサ２上で実現するように構成したので、この機能を担う専用のプロセッサや該プロセッサとマルチコアプロセッサ２との通信に使用される通信用バッファ５を省略することができるので、製造コストおよびチップ面積を低減することができるという効果を得ることができる。
【符号の説明】
【００４８】
１  マルチコアプロセッサシステム、２  マルチコアプロセッサ、３  メモリ、４  メモリ管理プロセッサ、５  通信用バッファ、６  マルチコアプロセッサシステム、２１  メモリアロケート管理部、２２  メモリアクセスプロトコル管理部、２３  被管理領域増減部、２４  メモリ管理部、３１  被管理領域、３２  カーネルプログラム、３３  メモリアロケート管理情報、３４  メモリアクセスプロトコル管理情報、３５  カーネルプログラム。
【図１】
2011003072.tif 000003
【図２】
2011003072.tif 000004
【図３】
2011003072.tif 000005
【図４】
2011003072.tif 000006
【図５】
2011003072.tif 000007
【図６】
2011003072.tif 000008
【図７】
2011003072.tif 000009
【図８】
2011003072.tif 000010
【図９】
2011003072.tif 000011
【図１０】
2011003072.tif 000012
【図１１】
2011003072.tif 000013
【図１２】
2011003072.tif 000014
【図１３】
2011003072.tif 000015
【図１４】
2011003072.tif 000016
【図１５】
2011003072.tif 000017
【図１６】
2011003072.tif 000018