(57)【要約】【課題】本発明は、複数のプロセッサにより共有される共有メモリにおいてデータを処理する際、効率良くメモリを管理することが可能なメモリ管理装置を提供しようとするものである。【解決手段】複数のプロセッサ１１は、並列動作が可能である。メモリ１３は、これらプロセッサ１１に共有される。メモリ１３は、各プロセッサ１１の要求に応じてメモリ１３内の割り当て可能な領域に割り当てられた割り当て済みメモリサイズ２２ｅと、割り当てられたメモリが解放されたことを示す解放済みメモリサイズ２２ｆとを有し、割り当て済みメモリサイズ２２ｅと解放済みメモリサイズ２２ｆとを比較することによって、メモリが再利用可能か否かを判定する。【選択図】      図３
2009181213.tif 000002
【特許請求の範囲】
【請求項１】
並列動作が可能な複数のプロセッサと、
これらプロセッサに共有されるメモリとを有し、
前記メモリは、前記各プロセッサの要求に応じて前記メモリ内の割り当て可能な領域に割り当てられた割り当て済みメモリサイズと、前記割り当てられたメモリが解放されたことを示す解放済みメモリサイズとを有し、
前記割り当て済みメモリサイズと前記解放済みメモリサイズとを比較することによって、前記メモリが再利用可能か否かを判定する制御手段を具備することを特徴とするメモリ管理装置。
【請求項２】
前記解放済みメモリサイズは、複数の前記プロセッサに対応してそれぞれ設けられ、前記制御手段は、複数の前記解放済みメモリサイズの和に基づき前記メモリが再利用可能か否かを判定することを特徴とする請求項１記載のメモリ管理装置。
【請求項３】
前記メモリは、前記割り当て可能な領域を含む固定長の少なくとも１つのページを有し、前記割り当て済みメモリサイズ及び複数の前記解放済みメモリサイズは、前記ページ毎に管理されることを特徴とする請求項２記載のメモリ管理装置。
【請求項４】
前記メモリは、最大ページ数を記憶し、前記制御手段は、ページ内の前記割り当て可能な領域が、複数の前記プロセッサのいずれかから要求されたメモリサイズを満たさない場合、前記最大ページ数の範囲内で、前記メモリ内に新たなページを設定することを特徴とする請求項３記載のメモリ管理装置。
【請求項５】
前記メモリは、最小ページ数を記憶し、最小ページ数で指定された数のページを有することを特徴とする請求項４記載のメモリ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば複数のマイクロプロセッサと、これらマイクロプロセッサに共有された共有メモリ型マルチプロセッサに適用されるメモリ管理装置に関する。
【背景技術】
【０００２】
この種の共有メモリ型マルチプロセッサにおいて、例えば動画再生や信号処理等のような、連続的なデータを連続的に処理するソフトウェアを作成する場合、複数のマイクロプロセッサにより共有されるメモリの更新は、互いに排他的であることが保証されている必要がある（例えば特許文献１を参照）。この保証方法として、共有メモリを更新する前にメモリ領域をロックし、更新が終了した段階でメモリ領域のロックを解放するといった排他制御を明示的に行うことが一般的である。メモリ領域のロックは、一時期に一つのプロセッサコア上のソフトウェアしか確保できない。このため、プロセッサコア数が増加するとともに、ロックを確保しようとする、所謂ロックの衝突が多発するようになり、マイクロプロセッサの処理性能が急激に低下する要因になっている。
【０００３】
更に、複数のマイクロプロセッサで処理を行うと、メモリ領域が解放される順番が、処理内容やプロセッサの状態によって前後する。このため、解放時に隣接するメモリ領域を併合する単一マイクロプロセッサ向けの従来のメモリ管理方法が必ずしも有効とはいえない。
【０００４】
一般的なメモリ管理の実現方法として、ファーストフィット法やベストフィット法が知られている（例えば非特許文献１を参照）。これらの方法は、空きメモリ領域をリスト状に繋いで、必要十分なメモリ領域を検索して割り当てる方法であるが、空きメモリ領域をリストとして管理しているため、ロックによる排他制御が必須になる。さらに、メモリ領域のロックを解除する場合において、このメモリ領域に隣接する空きメモリ領域の併合処理をする際、メモリ領域の併合処理を行っている間中、空きメモリ領域のリストがロックされたままになるため、ロックの衝突が発生しやすい。
【０００５】
一方、多くの組み込みシステムにおいて一般的な、メモリプール法においても、空きメモリ領域をリストとして管理している場合、メモリ領域をロックにより排他的に制御する必要がある。しかし、この方法の場合、空きメモリ領域の併合処理の必要がないため、ロックの衝突は軽減される。しかしながら、メモリプール法は、割り当てるメモリのサイズ毎にプールを用意するので、メモリの最大使用量にあわせて、メモリプールを予め確保しておくことが必要となり、メモリの使用効率が大幅に低下する。
【０００６】
尚、関連技術としてファーストフィット法とメモリプール法のハイブリッドや（例えば特許文献２を参照）、定常的なトラフィックだけでなく、バースト的なトラフィックに対してもメモリを有効に活用することができる記憶領域管理方法（例えば特許文献３を参照）が開発されている。
【０００７】
しかし、動画再生や信号処理等のような連続的データの連続的な処理（以下ストリーム処理と呼ぶ）は、固定長で利用期間が似通ったメモリ領域の割り当て解放を繰り返す性質がある。更に、ストリーム処理は、処理の負荷によって、必要なメモリ量が変動するような特性を持っている。従って、上記のいずれの方式も効率よくメモリ管理を行うことが出来なかった。
【特許文献１】特開平９−３０５４１８号公報
【特許文献２】特開２００５−５００１０号公報
【特許文献３】特開２００６−１２６９７３号公報
【非特許文献１】"Data Structures Using Java", Author: Langsam, Yedidyah /Augenstein, Moshe J. /Tenenbaum, Aaron M. Publisher:Pearson Education Limited Published 2003/04 ISBN:9780130477217
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、複数のプロセッサにより共有される共有メモリにおいてデータを処理する際、効率良くメモリを管理することが可能なメモリ管理装置を提供しようとするものである。
【課題を解決するための手段】
【０００９】
本発明のメモリ管理装置の態様は、並列動作が可能な複数のプロセッサと、これらプロセッサに共有されるメモリとを有し、前記メモリは、前記各プロセッサの要求に応じて前記メモリ内の割り当て可能な領域に割り当てられた割り当て済みメモリサイズと、前記割り当てられたメモリが解放されたことを示す解放済みメモリサイズとを有し、前記割り当て済みメモリサイズと前記解放済みメモリサイズとを比較することによって、前記メモリが再利用可能か否かを判定する制御手段を具備することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、複数のプロセッサにより共有される共有メモリにおいてデータを処理する際、効率良くメモリを管理することが可能なメモリ管理装置を提供できる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の詳細を図示の実施形態によって説明する。
【００１２】
（第１の実施形態）
図１は、本実施形態に係る共有メモリ型マルチプロセッサシステムのハードウェア構成の一例を概略的に示している。図１において、複数のプロセッサ１１は、バス１２に接続されている。このバス１２には、これらプロセッサ１１により共有されるメモリ１３が接続されている。各プロセッサ１１は、例えば、レジスタ１１ａを有し、各レジスタ１１ａは、プロセッサ１１毎に異なる、例えば０からＮ番までのプロセッサを識別する識別番号を記憶している。
【００１３】
図２は、メモリ１３の概略構成を示している。メモリ１３は、割り当て可能なメモリ領域１３ａを有している。この割り当て可能メモリ領域１３ａは、割り当て可能メモリ領域１３ａを管理する管理用メモリブロック（メモリマネージャ）２１と、複数の割り当て用メモリブロック（ページ）２２から構成されている。このメモリマネージャ２１とページ２２は、図示するように連続して設けられる必要はなく、メモリ１３の中であれば、順番や位置などに依存せず設けることが可能である。
【００１４】
図３は、図２に示す割り当て可能メモリ領域１３ａの構成を示している。
【００１５】
メモリマネージャ２１は、複数のページ２２のうち、先頭ページの位置を示す先頭ページポインタ２１ａと、１ページの容量（サイズ）を示すページサイズ２１ｂと、割り当て可能メモリ領域１３ａ内における最小ページ数２１ｃと最大ページ数２１ｄ、及び現在割り当てられているページの数を示すページ数とを記憶している。
【００１６】
尚、仮想記憶等を備えている場合において、メモリ１３の使用量の上限を制約しない場合は、最大ページ数２１ｄの設定を省略可能である。
【００１７】
各ページ２２は、固定長のメモリ領域であり、ページマネージャ２２ａとページボディ２２ｂにより構成されている。ページマネージャ２２ａは、ページ２２を管理し、ページボディ２２ｂは、タスク等の処理に使用されるメモリ領域（記憶部）である。
【００１８】
ページマネージャ２２ａは、前ページポインタ２２ｃと、後ページポインタ２２ｄと、割り当て済みメモリサイズ２２ｅ（第１の記憶容量情報）と、少なくとも１つの解放済みメモリサイズ２２ｆ（第２の記憶容量情報）により構成されている。前ページポインタ２２ｃは、ページマネージャ２２ａが属するページ２２の前に接続されているページ２２の位置を示しており、後ページポインタ２２ｄは、ページマネージャ２２ａが属するページ２２の後に接続されているページ２２の位置を示している。また、割り当て済みメモリサイズ２２ｅは、ページマネージャ２２ａに属するページボディ２２ｂに割り当てられているメモリブロックの大きさを示している。解放済みメモリサイズ２２ｆは、プロセッサが解放したメモリブロックの大きさを示しており、この解放済みメモリサイズ２２ｆは、各プロセッサの識別番号（プロセッサのコア番号）に対応して記憶される。
【００１９】
尚、ページマネージャ２２ａは、各ページの先頭にヘッダとして設定しているが、ページマネージャ２２ａの位置は属するページ２２内であれば制限されるものではなく、例えばフッタとして設定することも可能である。
【００２０】
ページボディ２２ｂは、割り当て済みメモリ領域２２ｇと、空きメモリ領域２２ｉと、ページマネージャポインタ２２ｊにより構成されている。割り当て済みメモリ領域２２ｇは、タスク等の処理を実行する際に割り当てられたメモリブロックである。また、割り当て済みメモリ領域２２ｇは、例えば末尾に、同一ページボディ２２ｂ内に記憶されているページマネージャポインタ２２ｊの位置（アドレス）を示すメモリブロックポインタ２２ｈを記憶する。また、メモリブロックポインタ２２ｈには、ページマネージャ２２ａの位置（先頭アドレス）を記憶しても良い。空きメモリ領域２２ｉは、使用していないメモリブロックであり、タスク等の処理を実行する際に割り当てられる。ページマネージャポインタ２２ｊは、これが属するページ２２のページマネージャ２２ａの位置を示している。また、ページマネージャポインタ２２ｊは、ページボディ２２ｂの末尾に記憶されている。
【００２１】
このページ２２は、メモリマネージャ２１により増減可能とされる。すなわち、メモリ１３のメモリ領域を使用してページを増加させることが可能であり、メモリ１３にメモリ領域を返すためにページを減少させることも可能である。
【００２２】
尚、複数のページ２２はそれぞれ同一の構成を有するものであり、前ページポインタ２２ｃ及び後ページポインタ２２ｄによりリンクされることによって環状に接続されている。
【００２３】
図４は本実施形態のメモリの割り当て処理の一例を示したフローチャートである。
【００２４】
本実施形態において、割り当て可能メモリ領域１３ａへメモリブロックの割り当て処理を行うタスク（以下、割り当てタスクと略称する）は一つのみである。この割り当てタスクは、複数のプロセッサのうちの１つのプロセッサにおいて動作される。
【００２５】
割り当てタスクにより、メモリ１３にメモリマネージャ２１へのポインタと、要求メモリサイズが入力される（Ｓ４０１）。メモリマネージャ２１へのポインタにより、メモリマネージャ２１を有する割り当て可能メモリ領域１３ａの位置が算出される。メモリマネージャ２１に設定された先頭ページポインタ２１ａにより、先頭ページとして設定されているページ２２のページマネージャ２２ａの位置が算出される。例えば、任意のタスクが、選択されたページマネージャ２２ａに設定されている割り当て済みメモリサイズ２２ｅと、入力された要求メモリサイズとの合計サイズが、メモリマネージャ２１に設定されている１ページのサイズ（ページサイズ）以下であるか否かを判定する（Ｓ４０２）。先頭ページの割り当て済みメモリサイズ２２ｅと要求メモリサイズとの合計サイズが、ページサイズ以下である場合、先頭ページのページボディ２２ｂに、要求されているメモリブロックを割り当てる（Ｓ４０３）。この後、ページマネージャ２２ａの割り当て済みメモリサイズ２２ｅに、新規に割り当てたメモリブロックのメモリサイズを加算して更新する（Ｓ４０４）。また、割り当てたメモリブロックの末尾に、図３に示すように、メモリブロックポインタ２２ｈを設定し（Ｓ４０５）、割り当てたメモリブロックへのポインタを出力し、割り当てが成功となる。
【００２６】
一方、ステップ４０２において、先頭ページの割り当て済みメモリサイズ２２ｅと要求メモリサイズの合計サイズが、ページサイズより大きい場合、要求メモリサイズがページサイズより大きいか否かを判定する（Ｓ４０６）。要求メモリサイズがページサイズより大きい場合、この割り当て可能メモリ領域１３ａに、要求するメモリブロックは割り当てられないと判定され、割り当てタスクは割り当てメモリ領域１３ａへのメモリブロックの割り当てを終了する。
【００２７】
また、前記ステップ４０６において、要求メモリサイズがページサイズ以下である場合、先頭ページのページマネージャ２２ａに設定された後ページポインタ２２ｄによって、次のページの位置が算出される。そして、後ページポインタ２２ｄによって示されたページ２２のページマネージャ２２ａを参照し、設定された割り当て済みメモリサイズ２２ｅと、解放済みメモリサイズ２２ｆの和が等しいか否かを判定する（Ｓ４０７）。選択されたページ２２のページマネージャ２２ａに設定された割り当て済みメモリサイズ２２ｅと、解放済みメモリサイズ２２ｆの和が等しい場合、選択されたページ２２に属するページボディ２２ｂにおいて、使用中のメモリ領域が無く、再利用可能であるということを示している。この場合、ページマネージャ２２ａに設定された、割り当て済みメモリサイズ２２ｅと、解放済みメモリサイズ２２ｆを全てリセットし（Ｓ４０８）、例えば割り当てタスクが、選択されたページのページボディ２２ｂに要求されたメモリブロックを割り当てる（Ｓ４０９）。また、メモリマネージャ２１の先頭ページポインタ２１ａを、選択されたページ２２の位置を示すデータに更新し、このページ２２を先頭ページとして設定する（Ｓ４１０）。次いで、選択されたページのページマネージャ２２ａの割り当て済みメモリサイズ２２ｅに、新規に割り当てたメモリブロックのメモリサイズを加算して更新する（Ｓ４０４）。また、割り当てたメモリブロックの末尾に、メモリブロックポインタ２２ｈを設定し（Ｓ４０５）、割り当てたメモリブロックへのポインタを出力し、割り当てが成功となる。
【００２８】
また、前記ステップ４０７において、選択されたページ２２のページマネージャ２２ａに設定された割り当て済みメモリサイズ２２ｅと解放済みメモリサイズ２２ｆの和が等しくない場合、ページマネージャ２２ａに設定されている後ページポインタ２２ｄによって次のページ２２を選択し、ステップ４０７の判定を実行する。また、ステップ４０７の条件を満たさない場合、メモリマネージャ２１に設定されている先頭ページポインタ２１ａが示す先頭ページが選択されるまで、ステップ４０７を実行する。割り当て可能メモリ領域１３ａが管理している全てのページに関してステップ４０７の判定を実行し、条件を満たすページ２２が無い場合は、ページが不足していると判定される（Ｓ４０７）。
【００２９】
この場合、メモリマネージャ２１に設定されている現在のページ数２１ｅと、最大ページ数２１ｄを比較する（Ｓ４１１）。現在のページ数２１ｅが最大ページ数２１ｄ以上の場合、制限値までページを確保しているため、例えば割り当てが終了される。尚、終了せず、メモリが解放され、空き領域が発生するまで待機するように実装することも可能である。
【００３０】
ステップ４１１において、現在のページ数２１ｅが最大ページ数２１ｄ未満である場合、例えばメモリマネージャ２１よりも下位のメモリマネージャ（例えばオペレーティングシステム）に対して、メモリ１３の領域を使用して新たなページ２２を確保するように要求する（Ｓ４１２）。この後、メモリ１３に新たなページ２２のための空き領域があるか否かを判定する（Ｓ４１３）。メモリ１３に新たなページ２２のための空き領域を確保できない場合、ページ確保は失敗となる。この場合も上記のように待機するように実装することも可能である。
【００３１】
ステップ４１３において、ページが確保できた場合、確保できたメモリ領域を新規のページ２２として割り当て可能メモリ領域１３ａに追加し、メモリマネージャ２１の現在のページ数２１ｅを更新する（Ｓ４１４）。そして、この新規のページ２２のページボディ２２ｂにメモリブロックを割り当て（Ｓ４１５）、メモリマネージャ２１の先頭ページポインタ２１ａを、新規のページ２２へのポインタに更新し、新規のページ２２を先頭ページとして更新する（Ｓ４１６）。この後、ページマネージャ２２ａの割り当て済みメモリサイズ２２ｅに、新規に割り当てたメモリブロックのメモリサイズを加算して更新する（Ｓ４０４）。また、割り当てたメモリブロックの末尾に、メモリブロックポインタ２２ｈを設定し（Ｓ４０５）、割り当てたメモリブロックへのポインタを出力し、割り当てが成功となる。
【００３２】
尚、図４において、ステップ４０２とステップ４０６の順序を入れ替えても本実施形態は実施することが可能である。
【００３３】
次に、図５を用いて本実施形態におけるメモリブロックの解放処理の一例を説明する。
【００３４】
メモリブロックを割り当てる割り当てタスクは１つのみであったが、メモリブロックを解放するタスク（以下、解放タスクと略称する）の数は限定されない。
【００３５】
解放タスクへの入力データは、割り当て済みメモリ領域２２ｇへのポインタと、割り当て済みメモリサイズ２２ｅであり、解放処理による出力はない。
【００３６】
割り当て可能メモリ領域１３ａに割り当てたメモリブロックを解放する場合、解放タスクに、割り当て済みメモリ領域２２ｇへのポインタと、割り当て済みメモリサイズが入力される（Ｓ５０１）。解放タスクは、割り当て済みメモリ領域２２ｇへのポインタより、解放するメモリブロックの位置を算出する。すなわち、図３に示す割り当て済みメモリ領域２２ｇの末尾に設定されたメモリブロックポインタ２２ｈにより、ページマネージャポインタ２２ｊの位置を算出する。このページマネージャポインタ２２ｊから属するページマネージャ２２ａの位置を算出する（Ｓ５０２）。この後、例えば割り当て済みメモリ領域２２ｇを解放するプロセッサのレジスタに設定された、識別番号を参照する（Ｓ５０３）。このレジスタの参照は、周知の命令を用いて実行される。これにより取得されたプロセッサの識別番号に基づき、ページマネージャ２２ａに設定されているプロセッサの識別番号に対応した解放済みメモリサイズ２２ｆに、解放した割り当て済みメモリサイズを加算する（Ｓ５０４）。これにより、メモリブロックの解放が完了される。
【００３７】
ここで、具体例について説明する。
【００３８】
図６は、図１に示すシステムにより、例えば、mpegの再生のような、ストリーム処理を実行する場合の動作を概略的に図示している。
【００３９】
圧縮された動画の再生処理等のストリーム処理を実行する際、例えば動画ストリーム解析タスクが動画ストリームを解析し、差分画像等のパラメータセットを取り出す。割り当てタスクは、このパラメータセットを格納するためのメモリブロックの割り当て要求を受ける（Ｓ６０１）。メモリブロックに格納されたパラメータセットは、ファーストイン／ファーストアウト（ＦＩＦＯ）のバッファ（又はキュー（queue））に順次供給される（Ｓ６０２）。各信号処理用のタスクが各プロセッサ上で動作し、ＦＩＦＯから順次データが供給される。パラメータセットは、次に信号処理用のタスクにより、各プロセッサにおいて信号処理が実行される。この信号処理において、新たなパラメータセットに対してデコードの結果が１つ生成される。このデコード結果を格納するメモリブロックを割り当てタスクに要求する。割り当てタスクは、各タスクの要求に応じて、上記動作によりメモリブロックを割り当てる。信号処理用のタスクによる処理が終了すると、中間データを含む、割り当てられたメモリブロックを解放する（Ｓ６０３）。解放タスクは、処理が終了した信号処理用のタスクの要求に応じて、上記動作により、メモリブロックを解放する。解放されたメモリブロックは、割り当てタスクにより新たなメモリブロックとして割り当てられる。
【００４０】
上記実施形態によれば、ページ２２は、固定長のメモリ領域であり、各ページは、少なくとも割り当て済みメモリサイズ２２ｅと個々のプロセッサコア毎の解放済みメモリサイズ２２ｆを保持している。すなわち、ページマネージャ２２ａは、ページボディ２２ｂに割り当てられたメモリブロックの容量の合計を、割り当て済みメモリサイズ２２ｅとして設定され、プロセッサ１１毎に解放されたメモリブロックの容量を、プロセッサ１１毎の解放済みメモリサイズ２２ｆとして設定されている。このため、ページマネージャ２２ａが、割り当て済みメモリサイズ２２ｅとプロセッサ１１毎の解放済みメモリサイズ２２ｆの累計とを管理し、これらを比較することにより、ページボディ２２ｂに再利用可能なメモリ領域があるか否かを判定できる。したがって、プロセッサコア間の排他制御（ロック）が不要となる。
【００４１】
すなわち、割り当てタスクは唯一であり、メモリブロックの割り当て処理をしている間に、他のタスクが割り当て済みメモリ領域２２ｇを増加させることはない。また、メモリブロックの解放処理は、タスク毎に自由に解放することができる。このため、解放済みメモリサイズ２２ｆは他のタスクが増加させる可能性はあるが、メモリブロックの割り当て時における他のタスクからの割り当てを防止するプロセッサコア１１間の排他制御が不要となる。
【００４２】
また、メモリブロックを解放した後、解放済みメモリサイズ２２ｆの更新を行うため、メモリブロックの解放中の領域にメモリブロックが割り当てられることはなく、プロセッサコア１１間のロックが不要となる。しかも、メモリ領域を固定長としているため、空きメモリ領域２２ｉの併合処理を行う必要はなく、プロセッサコア１１間のロックが不要となる。このため、プロセッサコア１１の個数を増加させてもロックの必要はなく（ロックフリー）、ロックの衝突による処理性能低下を防止でき、プロセッサコア１１の個数の増加に伴ってスケーラブルに性能を向上させることができる。
【００４３】
図７は、本実施形態の最大ページ数２１ｄを変更する方法の一例を示している。
【００４４】
割り当てタスクにより、最大ページ数２１ｄが変更される場合、メモリマネージャ２１に設定されている現在のページ数２１ｅと変更後の最大ページ数２１ｄを比較する（Ｓ７０１）。現在のページ数２１ｅが、変更後の最大ページ数２１ｄ以下の場合、メモリマネージャ２１の最大ページ数２１ｄを更新するだけでよい（Ｓ７０２）。
【００４５】
ステップ７０１において、現在のページ数２１ｅが変更後の最大ページ数２１ｄよりも大きい場合、先頭ページのページマネージャ２２ａに設定されている後ページポインタ２２ｄから、次のページ２２を選択し、割り当て済みメモリサイズ２２ｅと、解放済みメモリサイズ２２ｆの和が等しいか否かを判定する（Ｓ７０３）。割り当て済みメモリサイズ２２ｅと、解放済みメモリサイズ２２ｆの和が等しい場合、このページは不使用状態であるため、このページのリンクを解除し、ページ２２を取り除く（Ｓ７０４）。次いで、現在のページ数２１ｅと変更後の最大ページ数２１ｄを比較する（Ｓ７０５）。現在のページ数２１ｅが、変更後の最大ページ数２１ｄ以下の場合、メモリマネージャ２１を更新する（Ｓ７０６）。
【００４６】
ステップ７０３において、割り当て済みメモリサイズ２２ｅと解放済みメモリサイズ２２ｆの和が等しくない場合、現在選択されているページ２２が、メモリマネージャ２１に設定されている先頭ページポインタ２１ａが示すページ２２か否かを判定する（Ｓ７０７）。現在選択されているページ２２が先頭ページではない場合、ページマネージャ２２ａに設定されている後ページポインタ２２ｄより、次のページ２２が選択され、ステップ７０３の判定が実行される。
【００４７】
ステップ７０５において、現在のページ数２１ｅが、変更後の最大ページ数２１ｄ以下という条件を満たせなかった場合、ステップ７０７において先頭ページか否かの判定が実行される。
【００４８】
また、ステップ７０７において、選択されているページ２２が先頭ページである場合は、メモリマネージャを更新する（Ｓ７０６）。しかしながら、選択されているページ２２が先頭ページである場合は、割り当て可能メモリ領域１３ａに属するページ２２を全て判定し、現在のページ数２１ｅが、変更後の最大ページ数２１ｄ以下という条件を満たせなかったこととなるため、最大ページ数２１ｄの変更は失敗となる。失敗した場合は、例えば失敗を示すポインタやリターンコードを出力する。
【００４９】
尚、ステップ７０５において、現在のページ数２１ｅが、変更後の最大ページ数２１ｄ以下という条件を満たしている場合においても、全てのページ２２を判定する処理も実現可能であり、最大ページ数２１ｄの変更処理の手段は、図７に示したフローチャートに限定されるものではない。
【００５０】
図８は、本実施形態の最小ページ数２１ｃを変更する方法の一例を示している。
【００５１】
割り当てタスクにより、最小ページ数２１ｃが変更される場合、メモリマネージャ２１に設定されている現在のページ数２１ｅと変更後の最小ページ数２１ｃを比較する（Ｓ８０１）。現在のページ数２１ｅが変更後の最小ページ数２１ｃ以上である場合、メモリマネージャ２１の最小ページ数２１ｃを更新するだけでよい（Ｓ８０２）。
【００５２】
ステップ８０１において、現在のページ数２１ｅが変更後の最小ページ数２１ｃ未満の場合、メモリ１３に新たなページ２２のための空き領域があるか否かを判定する（Ｓ８０３）。メモリ１３から新規のページ２２のためのメモリを確保できた場合、確保できたメモリ領域を新規のページ２２として割り当て可能メモリ領域１３ａに追加し、メモリマネージャ２１に設定されている現在のページ数２１ｅと変更後の最小ページ数２１ｃを比較する（Ｓ８０１）。
【００５３】
ステップ８０３において、ページが確保できなかった場合、最小ページ数２１ｃの変更は失敗となる。失敗した場合は、例えば失敗したことを示すポインタやリターンコードを出力する。
【００５４】
尚、必ず随時メモリ確保をする場合、最小ページの設定は省略可能である。
【００５５】
上記実施形態によれば、割り当てメモリ領域１３ａが使用できるページ数をメモリマネージャ２１が管理している。また、ページマネージャ２２ａに設定された割り当て済みメモリサイズ２２ｅの大きさと、解放済みメモリサイズ２２ｆの大きさの和とを比較し、これらが等しい場合、このページが全く使用されていないため、再利用可能と判別することができる。したがって、必要に応じてメモリ領域を増減できるので、効率良くメモリ１３を使用することができる。また、最小ページ数２１ｃで指定されたページ数を予め確保しているため、メモリブロックの割り当ての成功を保証することができる。
【図面の簡単な説明】
【００５６】
【図１】本実施形態に係るハードウェア構成を示す構成図。
【図２】図１に示すメモリを概略的に示す構成図。
【図３】図２に示すメモリを示す構成図。
【図４】本実施形態に係るメモリブロックの割り当て処理の一例を示すフローチャート。
【図５】本実施形態に係るメモリブロックの解放処理の一例を示すフローチャート。
【図６】本実施形態に係るストリーム処理の動作の一例を示す図。
【図７】本実施形態に係る最大ページ数変更の動作の一例を示すフローチャート。
【図８】本実施形態に係る最小ページ数変更の動作の一例を示すフローチャート。
【符号の説明】
【００５７】
１１…プロセッサ、１３…メモリ、１３ａ…割り当て可能メモリ領域、２１…メモリマネージャ、２１ｃ…最小ページ数、２１ｄ…最大ページ数、２２…ページ、２２ａ…ページマネージャ、２２ｂ…ページボディ、２２ｅ…割り当て済みメモリサイズ、２２ｆ…解放済みメモリサイズ。
【図１】
2009181213.tif 000003
【図２】
2009181213.tif 000004
【図３】
2009181213.tif 000005
【図４】
2009181213.tif 000006
【図５】
2009181213.tif 000007
【図６】
2009181213.tif 000008
【図７】
2009181213.tif 000009
【図８】
2009181213.tif 000010