(57)【要約】【課題】プロセス実行時にデータキャッシュおよびＴＬＢに取り込まれるデータとして、１つのスレッドから頻繁に参照されるオブジェクトを集約させることで、データキャッシュおよびＴＬＢキャッシュのヒット率を向上させる。【解決手段】コンピュータ（計算機）におけるプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置先を動的に制御し、使用頻度の高いオブジェクト同士を近傍に配置するメモリ管理部１０を設け、プロセスにおける論理メモリ空間のヒープ領域に、スレッド毎の固有領域を割り当てることで、１つのスレッドが生成するオブジェクトを、メモリ、もしくは記憶装置上で連続して配置させる。【選択図】　　　　図１
2004078636.tif 000002
【特許請求の範囲】
【請求項１】
計算機のプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置制御を行うメモリ管理システムであって、
スレッド単位でメモリ領域を割り当て、スレッドが生成したオブジェクトを、当該スレッドに割り当てたメモリ領域に配置するメモリ管理手段を有することを特徴とするメモリ管理システム。
【請求項２】
計算機のプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置制御を行うメモリ管理システムであって、
上記プロセス用のヒープ領域をスレッド単位で割り当てる割当手段と、
スレッドに割り当てた領域と当該スレッドとの対応付け情報を記憶する記憶手段と、
スレッドが生成するオブジェクトを、上記記憶手段で記憶した対応付け情報を参照して、当該スレッドに割り当てた領域に配置する手段と
を有することを特徴とするメモリ管理システム。
【請求項３】
計算機におけるプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置方法であって、
スレッド単位でメモリ領域を割り当てる手順と、
スレッドが生成したオブジェクトを、当該スレッドに割り当てたメモリ領域に配置する手順とを有することを特徴とするメモリ配置方法。
【請求項４】
計算機におけるプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置方法であって、
上記プロセス用のヒープ領域をスレッド単位で割り当てる手順と、
スレッドに割り当てた領域と当該スレッドとの対応付け情報を記憶装置に記憶する手順と、
スレッドが生成するオブジェクトを、上記記憶装置で記憶した対応付け情報を参照して、当該スレッドに割り当てた領域に配置する手順と
を有することを特徴とするメモリ配置方法。
【請求項５】
コンピュータに、請求項３、もしくは、請求項４のいずれかに記載のメモリ配置方法における各手順を実行させるためのプログラム。
【請求項６】
コンピュータに、請求項３、もしくは、請求項４のいずれかに記載のメモリ配置方法における各手順を実行させるためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機におけるプロセス実行時に生成されるオブジェクトの動的メモリ配置技術に係わり、例えば、キャッシュ性能の向上等を図るのに好適なメモリ管理技術に関するものである。
【０００２】
【従来の技術】
通常の計算機（コンピュータ）においては、プロセスの実行単位はスレッドであり、プロセス実行時に個々のスレッドより生成される個々のオブジェクトは、当該プロセス用のヒープ領域に、生成順に格納され、その後、スレッド単位でプロセスが実行される際、中央演算装置（ＣＰＵ）が前出のオブジェクトをヒープ領域から読み出して実行する。
【０００３】
この際、使用頻度の高いオブジェクトは、ヒープ領域よりもアクセス速度の速いデータキャッシュに保持し、実行速度を高速化することが従来行われている。
【０００４】
しかしながら、一般的に、データキャッシュのサイズは有限であり、データキャッシュに取り込まれるデータサイズは固定長であり、基本的に、データキャッシュに取り込まれるデータは、プロセスが使用するメモリの部分的な複製であり、ヒープ領域の部分的な複製でもある。従って、データキャッシュにおいても、オブジェクトはその生成順に保持された状態である。
【０００５】
このように、データキャッシュにおいては、１つのプロセスの各スレッドが生成した全てのオブジェクトを保持するものではない。そのため、中央演算装置がデータキャッシュから読み出したデータ内のオブジェクト全てが、１つのスレッドにおいて使用頻度の高いオブジェクトとは限らず、キャッシュミスが発生する。
【０００６】
また、一般的に、１つのプロセスで使用される論理メモリ空間は、そのプロセス内のみで有効であり、かつ、一般的に、プロセス毎に使用する論理メモリ空間を切り替えるため、論理メモリ空間と物理メモリ空間のマッピングが必要になる。
【０００７】
プロセスから見える論理メモリ空間のアドレス（仮想アドレス）から実際のメモリ・アドレス（物理アドレス）への対応表の中で頻繁に使用されるものを一時的に保存するバッファをＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ　Ｌｏｏｋ−ａｓｉｄｅ　Ｂｕｆｆｅｒ）といい、このＴＬＢを用いることにより、これら仮想アドレスと物理アドレスの変換を高速に実行できる。
【０００８】
ところが、前出の論理メモリ空間は、上述したヒープ領域を含んでおりオブジェクトが生成順にヒープ領域上に配置されていけば、ＴＬＢに保存された１つの変換に含まれるオブジェクトの全てが１つのスレッドで頻繁に参照されるとは限らない。
【０００９】
【発明が解決しようとする課題】
解決しようとする問題点は、従来の技術では、データキャッシュおよびＴＬＢに含まれるオブジェクトの全てが１つのスレッドで頻繁に使用されるとは限らない点である。
【００１０】
本発明の目的は、これら従来技術の課題を解決し、プロセス実行時にデータキャッシュおよびＴＬＢに取り込まれるデータ、すなわちヒープ領域に、１つのスレッドから頻繁に参照されるオブジェクトを集約させることで、データキャッシュおよびＴＬＢキャッシュのヒット率を向上させることである。
【００１１】
【課題を解決するための手段】
上記目的を達成するため、本発明では、計算機におけるプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置先を動的に制御し、使用頻度の高いオブジェクト同士を近傍に配置することを特徴とする。すなわち、プロセスにおける論理メモリ空間のヒープ領域に、スレッド毎の固有領域を割り当てることで、１つのスレッドが生成するオブジェクトを、メモリ、もしくは記憶装置上で連続して配置させる。このことにより、ヒープ領域内に生成されるオブジェクトがスレッド単位でまとまり、データキャッシュに取り込まれる単位データ内の複数のオブジェクトに、同一のスレッドのオブジェクトが入る可能性が高くなり、結果として、データキャッシュのヒット率が向上する。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態を、図面により詳細に説明する。
【００１３】
図１は、本発明に係わるメモリ管理システムの構成例を示すブロック図であり、図２は、図１におけるメモリ管理システムを実装したコンピュータのハードウェア構成例を示すブロック図である。
【００１４】
図２において、２１はＣＲＴ（Ｃａｔｈｏｄｅ　Ｒａｙ　Ｔｕｂｅ）やＬＣＤ（Ｌｉｑｕｉｄ　Ｃｒｙｓｔａｌ　Ｄｉｓｐｌａｙ）等からなる表示装置、２２はキーボードやマウス等からなる入力装置、２３はＨＤＤ（Ｈａｒｄ　Ｄｉｓｋ　Ｄｒｉｖｅ）等からなる外部記憶装置、２４はＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）２４ａや主メモリ２４ｂおよび入出力インタフェース２４ｃ等を具備してコンピュータ処理を行なう情報処理装置、２５は本発明に係わるプログラムやデータを記録したＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ　Ｄｉｓｃ−Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）もしくはＤＶＤ（Ｄｉｇｉｔａｌ　Ｖｉｄｅｏ　Ｄｉｓｃ／Ｄｉｇｉｔａｌ　Ｖｅｒｓａｔｉｌｅ　Ｄｉｓｃ）等からなる光ディスク、２６は光ディスク２５に記録されたプログラムおよびデータを読み出すための駆動装置、２７はＬＡＮ（Ｌｏｃａｌ　Ａｒｅａ　Ｎｅｔｗｏｒｋ）カードやモデム等からなる通信装置である。
【００１５】
光ディスク２５に格納されたプログラムおよびデータを情報処理装置２４により駆動装置２６を介して外部記憶装置２３内にインストールした後、外部記憶装置２３から主メモリ２４ｂに読み込みＣＰＵ２４ａで処理することにより、情報処理装置２４内に図１に示すメモリ管理システムを含む各処理部が構成される。
【００１６】
図１において、１はメモリ管理システム、２はプロセス実行部であり、メモリ管理システム１は、領域割当部１１、マップ生成部１２、マップ情報記憶部１３オブジェクト配置部１４により構成されるメモリ管理部１０を有する。
【００１７】
このような構成により、本例のメモリ管理システム１では、コンピュータにおけるプロセス実行時に、複数スレッドが生成するオブジェクトをメモリに配置する際、スレッド単位でメモリ領域を割り当て、スレッドが生成したオブジェクトを、当該スレッドに割り当てたメモリ領域に配置する。
【００１８】
すなわち、領域割当部１１により、プロセス用のヒープ領域をスレッド単位で割り当て、マップ生成部１２において、スレッドに割り当てた領域と当該スレッドとの対応付け情報を生成し、マップ情報記憶部１３で、その情報をテーブル（スレッドヒープ領域マップ１５）に記憶し、オブジェクト配置部１４において、スレッドが生成するオブジェクトを、マップ情報記憶部１３でスレッドヒープ領域マップ１５に記憶している対応付け情報を参照して、当該スレッドに割り当てた領域に配置する。
【００１９】
スレッドヒープ領域マップ１５においては、各スレッドの特定に用いるスレッド識別情報が登録されるスレッドＩＤ１５ａと、各スレッドに割り当てたメモリ領域の特定に用いる領域情報１５ｂとの項目が設けられており、このスレッドヒープ領域マップ１５の内容に基づき、例えば、スレッドＡａが生成するオブジェクトは、アドレス情報Ａａで特定されるメモリ領域に配置される。
【００２０】
このように、本例では、メモリ管理部１０を新たに設けることにより、コンピュータのプロセス実行過程において、プロセスの実行単位であるスレッドによるオブジェクトの生成時に、スレッド毎にオブジェクトの生成場所を動的に制御することで、使用頻度の高いオブジェクト同士を近傍に配置する。
【００２１】
ここでの動的な制御は、メモリ管理部１０において、当該プロセスにおける論理メモリ空間のヒープ領域に、スレッド毎の固有領域を割り当てることで行われる。また、オブジェクトの近傍配置とは、メモリ、もしくはデータキャッシュやＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ　Ｌｏｏｋ−ａｓｉｄｅ　Ｂｕｆｆｅｒ）等の記憶装置上でオブジェクトが連続して配置されていることを意味する。
【００２２】
このオブジェクトの近傍配置により、ヒープ領域内に生成されるオブジェクトがスレッド単位でまとまり、例えばデータキャッシュに取り込まれる単位データ内の複数のオブジェクトに、同一のスレッドのオブジェクトが入る可能性が高くなる。
【００２３】
プロセス実行時には複数のスレッドが実行されるが、一般的に、データキャッシュは１つのスレッドに対してのみ有効であり、スレッド切り替えが生じればデータキャッシュの有効性はなく、有効なデータキャッシュが再構築される。
【００２４】
上述したように、本例では、データキャッシュの中に同一スレッドのオブジェクトが入る可能性が高く、結果として、従来の技術よりもデータキャッシュのヒット率が向上する。
【００２５】
同様に、ＴＬＢキャッシュにおいても、１スレッドに使用されるオブジェクトが同一ページ上に存在する可能性が高く、それらのページをＴＬＢキャッシュに取り込むことで、同一スレッド実行時におけるＴＬＢキャッシュヒット率が向上する。
【００２６】
さらに、スレッド切り替え時には、常に一定数のページファイルの切り替えが要求されるが、このページファイル切り替え数は、オブジェクトが生成順にヒープ領域に格納されている場合よりも、スレッド数が十分多い場合には、少なくなるので、大規模アプリケーションに対して、本例が極めて有効であることがわかる。
【００２７】
以下、図３から図５を用いて、本例のメモリ管理システムの処理動作を説明する。
【００２８】
図３は、図１におけるメモリ管理システムによるメモリ配置処理例を示すフローチャートであり、図４は、図１におけるメモリ管理システムの第１の処理動作例を示す説明図、図５は、図１におけるメモリ管理システムの第２の処理動作例を示す説明図である。
【００２９】
図３に示すように、プロセスＡにおけるスレッドＡａの生成要求があれば（ステップ３０１）、図１におけるメモリ管理システム１は、当該スレッドＡａに、プロセスＡ用のヒープ領域における領域Ａａを割り当て（ステップ３０２）、その割当結果を、例えば、図１におけるスレッドヒープ領域マップ１５に示すように、各スレッドの特定に用いるスレッド識別情報（スレッドＩＤ：Ａａ）と、各スレッドに割り当てたメモリ領域の特定に用いる領域情報（アドレスＡａ）とを対応付け、記憶装置に記憶する（ステップ３０３）。
【００３０】
その後、スレッドＡａによるオブジェクトの生成要求があれば（ステップ３０４）、図１におけるスレッドヒープ領域マップ１５を参照して、当該スレッドＡａに割り当てた領域Ａａを特定し、この領域Ａａに、当該オブジェクトを配置する（ステップ３０５）。
【００３１】
次の図４および図５の処理においては、「ＪＡＶＡ（登録商標）　ＶＭ」における例を説明する。
【００３２】
「ＪＡＶＡ（登録商標）　ＶＭ」ではヒープ領域管理技術として、「Ｇａｒｂａｇｅ　Ｃｏｌｌｅｃｔｉｏｎ」（ＧＣ）を使用しており、本例では、ＧＣの技術として「Ｇｅｎｅｒａｔｉｏｎ　ＧＣ」を使用した場合について述べる。
【００３３】
「Ｇｅｎｅｒａｔｉｏｎ　ＧＣ」では図４に示すように、ヒープ領域は大きく「Ｎｅｗ　Ｇｅｎｅｒａｔｉｏｎ」、「Ｏｌｄ　Ｇｅｎｅｒａｔｉｏｎ」、「Ｐｅｒｍａｎｅｎｔ　Ｇｅｎｅｒａｔｉｏｎ」という３つの領域に分けられ、その中でも更に「Ｎｅｗ　Ｇｅｎｅｒａｔｉｏｎ」は「Ｅｄｅｎ」と「Ｓｕｒｖｉｖｏｒ」という２つの領域に分けられる。
【００３４】
上記構造において新規にオブジェクトが生成される場合には常に、「Ｅｄｅｎ」領域からオブジェクトが生成される。
【００３５】
本例ではメモリ管理部１０を新たに設け、プロセス実行時にスレッド生成要求が生じた場合、そのスレッド生成要求をメモリ管理部１０が取得し、メモリ管理部１０はプロセスのヒープ領域をスレッドヒープ領域マップ１５で管理する。
【００３６】
メモリ管理部１０は、スレッド毎に一定ヒープ領域を「ＧｅｎｅｒａｔｉｏｎＧＣ」に使用される複数ジェネレーションにわたって確保を行い、その領域をスレッドに対して通知を行う。
【００３７】
尚、この際に生成されるスレッド毎のヒープ領域は、事前に静的に決定されているものであり、ユーザからの要求によって任意の領域を割り当てることが可能である。
【００３８】
例えば、プロセスを実行中にスレッドＡａの生成要求が生じれば（図４中（１））、メモリ管理部１０は、その通知を取得し、メモリ管理部１０が持つスレッドヒープ領域マップ１５から新たなスレッド用エリアを判断し（図４中（２））、実ヒープ領域の確保を行う（図４中（３））。その情報を基にスレッドＡａが作成される（図４中（４），（５），（６））。
【００３９】
図５においては、スレッド実行時のオブジェクト生成例を示しており、オブジェクト生成要求が生じた場合、生成要求をメモリ管理部１０に通知し、メモリ管理部１０は、スレッドヒープ領域マップ１５に従って、要求されたオブジェクトを「Ｎｅｗ　Ｇｅｎｅｒａｔｉｏｎ」の「Ｅｄｅｎ」領域に生成する。
【００４０】
例えば、プロセス実行中にスレッドＡａに処理が移った場合（図５中（１））、スレッドＡを実行するに当たってオブジェクトの生成要求はメモリ管理部１０に通知され（図５中（２））、メモリ管理部１０がそのスレッドＡａに割り当てられたヒープ領域（「Ｅｄｅｎ」領域）に、要求されたオブジェクトを生成する（図５中（３））。
【００４１】
メモリ管理部１０は、生成されたヒープ領域のアドレスを返り値としてスレッドＡａに通知する。
【００４２】
以上、図１〜図５を用いて説明したように、本例では、コンピュータ（計算機）におけるプロセス実行時に複数スレッドが生成するオブジェクトのメモリ配置先を動的に制御し、使用頻度の高いオブジェクト同士を近傍に配置する。すなわち、プロセスにおける論理メモリ空間のヒープ領域に、スレッド毎の固有領域を割り当てることで、１つのスレッドが生成するオブジェクトを、メモリ、もしくは記憶装置上で連続して配置させる。
【００４３】
このことにより、ヒープ領域内に生成されるオブジェクトがスレッド単位でまとまり、使用頻度の高いオブジェクト同士が近傍に配置されることにより、例えばデータキャッシュに取り込まれる単位データ内の複数のオブジェクトに、同一のスレッドのオブジェクトが入る可能性が高くなり、結果として、データキャッシュのヒット率が向上する。
【００４４】
さらに、１つのプロセス内でスレッド数が十分多い場合には、使用頻度の高いオブジェクト同士が近傍に配置されることにより、同一ページ内に配置される可能性が高くなり、その結果としてＴＬＢのヒット率を向上させることができる。
【００４５】
尚、本発明は、図１〜図５を用いて説明した例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。例えば、本例では、「ＪＡＶＡ（登録商標）　ＶＭ」を例として説明したが、「ＪＡＶＡ（登録商標）」以外の他のプログラム言語で動作するコンピュータにおいても適用可能である。
【００４６】
また、各スレッドに割り当てるヒープ領域（スレッド割り当てヒープ）のサイズに関しては、全てのスレッドに対して同じ大きさにすることでも、それぞれ異なるように設定しても良い。
【００４７】
また、本例では、コンピュータ（計算機）の構成として図２の構成例を示したが、キーボードや光ディスクの駆動装置の無いコンピュータ構成としても良い。また、本例では、光ディスクを記録媒体として用いているが、ＦＤ（Ｆｌｅｘｉｂｌｅ　Ｄｉｓｋ）等を記録媒体として用いることでも良い。また、プログラムのインストールに関しても、通信装置を介してネットワーク経由でプログラムをダウンロードしてインストールすることでも良い。
【００４８】
【発明の効果】
本発明によれば、使用頻度の高いオブジェクト同士が近傍に配置され、このことにより、例えばデータキャッシュのデータ取り込み時に１つのスレッドからの使用頻度の高いオブジェクトが取り込まれ、その結果としてデータキャッシュのヒット率を向上させることができ、かつ、１つのプロセス内でスレッド数が十分多い場合には、使用頻度の高いオブジェクト同士が近傍に配置されることにより、同一ページ内に配置される可能性が高くなり、その結果としてＴＬＢのヒット率を向上させることが可能である。
【図面の簡単な説明】
【図１】本発明に係わるメモリ管理システムの構成例を示すブロック図である。
【図２】図１におけるメモリ管理システムを実装したコンピュータのハードウェア構成例を示すブロック図である。
【図３】図１におけるメモリ管理システムによるメモリ配置処理例を示すフローチャートである。
【図４】図１におけるメモリ管理システムの第１の処理動作例を示す説明図である。
【図５】図１におけるメモリ管理システムの第２の処理動作例を示す説明図である。
【符号の説明】
１：メモリ管理システム、２：プロセス実行部、１０：メモリ管理部、１１：領域割当部、１２：マップ生成部、１３：マップ情報記憶部、１４オブジェクト配置部、１５：スレッドヒープ領域マップ、１５ａ：スレッドＩＤ、１５ｂ：領域情報、２１：表示装置、２２：入力装置、２３：外部記憶装置、２４：情報処理装置、２４ａ：ＣＰＵ、２４ｂ：主メモリ、２４ｃ：入出力インタフェース、２５：光ディスク、２６：駆動装置、２７：通信装置。
【図１】
2004078636.tif 000003
【図２】
2004078636.tif 000004
【図３】
2004078636.tif 000005
【図４】
2004078636.tif 000006
【図５】
2004078636.tif 000007