(57)【要約】      （修正有）【課題】メモリ構成要素を有するデジタルデータ処理システムにおいて使用可能であるメモリ資源を管理するための構成および方法を提供する。【解決手段】各フリーメモリブロックに対するフリーポインタが、リンクされたリストとして維持されるメモリブロックに保存される。階層的に構成されたメモリ構成要素を有するシステムにおいて、少数のフリーポインタが、比較的高い性能レベルのメモリに保持され、このフリーポインタの残りが、比較的低い性能レベルのメモリに保持される。【選択図】図２
2011248920.tif 000002
【特許請求の範囲】
【請求項１】
フリーブロックのリンクされたリストに区分された速いが小さいレベルＡメモリと、遅いが大きいレベルＢメモリとを有するデジタルデータ処理システムにおいて、前記レベルＢメモリにおける使用可能な資源を管理する方法であって、前記方法は、
前記レベルＡメモリの一部分をフリーポインタ格納部として割り当てることと、
前記フリーブロックに対するポインタを前記フリーポインタ格納部に格納することと、
前記フリーポインタ格納部が所定の最大レベルに到達した場合に、プッシュ動作を開始することであって、前記プッシュ動作は、フリーブロックの前記リンクされたリストにおける第１のフリーブロックを識別し、かつ、それを第１のフリーポインタブロックとして指定し、かつ、前記フリーポインタ格納部から前記第１のフリーポインタブロックに前記ポインタを移動させる、ことと、
前記フリーブロックに対する全てのポインタが格納されるまで、前記フリーポインタ格納部にポインタを格納するステップと、前記フリーポインタ格納部から、フリーブロックの前記リンクされたリストから識別された後続のフリーポインタブロックに前記ポインタを移動させるプッシュ動作を開始するステップを繰り返すことと
を含む、方法。
【請求項２】
割り当て要求に応答して、前記フリーポインタ格納部におけるポインタを用いて、フリーブロックを割り当てることと、
前記第１のフリーポインタブロックを識別し、かつ、前記フリーポインタ格納部におけるポインタ数が所定の最小値に到達した場合に、前記第１のフリーポインタブロックから前記フリーポインタ格納部にポインタを移動させるプル動作を開始することと、
前記フリーポインタ格納部におけるポインタを用いてフリーブロックを割り当てるステップと、前記フリーポインタ格納部におけるポインタ数が所定の最小値に到達した場合に、後続のフリーポインタブロックから前記フリーポインタ格納部にポインタを移動させるプル動作を開始するステップとを繰り返すことと
をさらに含む、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の背景）
（１．技術分野）
本発明は、デジタルデータ処理システム、特に、使用可能なメモリ資源を管理するためのデジタルデータ処理システムにおける構成および方法に関する。
【背景技術】
【０００２】
（２．背景技術）
全般的に、以下の説明において、デジタルデータ処理システムの当業者にとっては慣れ親しんだ各専門用語が最初に現れる時にイタリック体で表す。さらに、新しいと考えられる、あるいは新しいと考えられる文脈において用いられる用語を最初に紹介する場合、その用語をボールド体で表し、その用語に適用する定義を与える。本発明者らの発明は特にデジタルデータ処理システムでの利用を意図したものであることから、この特定当業者によく知られた用語をしばしば用いることになる。例えば、このようなシステムのメモリ構成要素の特定アドレスに保存された情報の個々の要素に関して、その要素そのものではなく、言及されている要素のアドレスを含む別個の互いに異なる要素に言及するためにポインタという用語を典型的に用いる。本発明者らが用いる分野の他の共通用語としては：ビットに対するｂやバイトに対するＢ、最上位ビットに対するｍｓｂや最下位ビットに対するｌｓｂ、メガバイトに対するＭＢといったものがある。
【０００３】
少なくとも１９４０年代以降、デジタルデータ処理システムのプログラマは、使用可能な未割り当てメモリ資源を管理するためにさまざまな論理構成を用いてきた。１つのよく見られる配置では、システム初期化中に作動されるメモリ初期化処理により使用可能メモリをブロック組に区画し、各ブロックが、アクティブな処理に対して現行で割り当てられていないメモリの通常サイズの連続範囲のアドレスを含む。このプロセスでは、その後、各ブロック内のあらかじめ指定されたアドレスに対して、リスト上の直接連続するブロックへのポインタあるいは前向きリンクを保存することでこういったフリーブロックのリンクされたリストを構成する。全般的に、リストの一次アクセス点はヘッダであり、このヘッダが、少なくとも、フリーリストのヘッドにおけるブロックに向けたポインタを保存するため転送リンクを含む。望まれる場合、このヘッダはまた、フリーリストのテールにあるブロックに向けたポインタを含む後向きリンクを含む。利便性のため、ヘッダは、フリーリストに現行で載っているブロック数といったフリーリストの状況に関連する他の情報を含む。
【０００４】
インテル社のＰｅｎｔｕｉｕｍ（登録商標）４といった従来式の市販で利用可能なマイクロプロセッサを組み込んだ典型的な最近のデジタルデータ処理システムにおいて、メモリ構成要素は、複数の別個の互いに異なる層、例えば、高速であるが比較的小さいレベルＡや低速であるが大きなレベルＢに対して、階層的に構成されている。こういったシステムにおいて、中央演算処理装置で即座にアクセスできるメモリ資源にあるヘッダを維持することがもっとも効率的であるが、この中央演算処理装置は典型的にはデータキャッシュあるいはレジスタアレイ等の高速回路である。本発明者らの発明では、レベルＡの資源を単クロックサイクルでアクセス可能なものと考えるが、その一方で、レベルＢでの主メモリ構成要素へのアクセスでは複クロックサイクルが必要である。メモリ設計者によりかなりの資源が消費されているにもかかわらず、この性能の違いにより、半導体製造工程や深パイプライン化技術の進歩に応じて、プロセッサ構成要素が、主メモリ構成要素と比較してかなりの高クロック周波数で作動できるようになった。
【０００５】
図１の例として示されたものは階層的に構成されたメモリ２であり、この中で未割り当てのメモリブロックが、メモリ２の、例えばレベルＢに維持されたフリーリスト４により管理される。既知の従来技術であるメモリ初期化処理で構成される代表的リストは：（リストのテールと呼ばれることの多い）フリーリスト４でそれより低いブロックがないことを示すゼロ前向きリンク（「リンク」）をもつ第１ブロックＢＡ６；次に低いブロックＢＡを指す前向きリンクをもつ次に高いブロックＢＢ；（リストのヘッドと呼ばれることの多い）次に低いブロックＢＹを指す前向きリンクをもつ、同様に続くブロックＢＣ１０，ＢＤ１２，．．．，ＢＹ１４を通って最上部ブロックＢＺ１６である。メモリ２のレベルＡに維持されたヘッダ１８において、前向きリンクであるヘッド２０は、フリーリスト４のヘッドにあるフリーブロック、すなわちＢＺ１６を指し、後向きリンクであるテール２２はフリーリスト４のテールにあるフリーブロックを指すが、この例では、これはＢＡ６である。
注記：複数の図において、対応するリンクにおいてさらにブロックがあるということを示すために点連結線を用いているが、これは図示を不必要に複雑にすることを避けるために示されていないものがある。
【０００６】
アクティブな処理、例えば処理＿Ａからの受信に対して、フリーメモリのブロックを割り当てるという要求、すなわちメモリ割り当て処理により、典型的には、フリーリストのヘッドにブロックを割り当てる。図１に示された例において、ブロック割り当ては次のように簡単に示される：
１．ヘッド２０から、フリーリスト４のヘッドにあるブロック、すなわちブロックＢＺ１６に向けたポインタを検索する；
２．ブロックＢＺ１６から、フリーリスト４の次に低いブロック、すなわちブロックＢＹ１４に向けたポインタを検索する；
３．ヘッド２０のブロックＢＹ１４に向けたポインタを保存する。
注記：処理＿Ａに対してブロックに向けたポインタを与えるだけといったことを含め、割り当てられたブロックの場所（およびサイズ）について処理＿Ａに通知するため、さまざまな方法が提案されている。ある応用例は、処理＿Ａで「所有される」ブロックのリストに対して新たに割り当てられるブロックにメモリ割り当て処理をリンクさせることが望ましいというものである。
【０００７】
これにより、図１に示されるような階層的に構成されたメモリにおいて、ブロック割り当てでは少なくとも３つのメモリアクセスが必要である：
１．メモリのレベルＡでの読み出しサイクル；
２．メモリのレベルＢでの読み出しサイクル；
３．メモリのレベルＡでの書き込みサイクル。
【０００８】
アクティブな処理から、メモリの割り当てブロックの割り当て解除を行う要求受信に対して、メモリの割り当て解除処理により、典型的には、フリーリストのヘッドにブロックを戻す。図１に示す例に続き、割り当てられたばかりのブロックＢＺ１６の割り当て解除を処理＿Ａが要求したと仮定すると、割り当て解除は次のように簡単に示される：
１．ヘッド２０から、フリーリスト４のヘッドにあるブロック、すなわちブロックＢｙ１４に向けたポインタを検索する；
２．ブロックＢＹ１４に向けたポインタをブロックＢＺ１６の前向きリンクに保存する；
３．ヘッド２０のブロックＢＺ１６に向けたポインタを保存する。
注記：上述のとおり、処理＿Ａに対してメモリ割り当て処理が、処理で所有されるブロックのリストを維持する場合、メモリ割り当て解除処理は、割り当て解除されているブロックを処理＿Ａのリストから切り離す役割をもつ。
これにより、図１に示されるような階層的に構成されたメモリにおいて、ブロック割り当て解除でも同じく少なくとも３つのメモリアクセスが必要である：
１．メモリのレベルＡでの読み出しサイクル；
２．メモリのレベルＢでの書き込みサイクル；
３．メモリのレベルＡでの書き込みサイクル。
【０００９】
メモリ２をレベルＡおよびＢだけでできたものとして図示したが、これは例示のためだけであり、メモリ２が２つのレベルだけに限定される、あるいはフリーリスト４およびヘッダ１８が同一レベルで同時に保存、あるいは１つのレベル超で分けることができるということを示唆することを意図したものではない。さらに、この説明の文脈において、オペレーティングシステムを典型的に含む比較的大規模なシステムを選定したが、他の実施例も確かに可能であり、これには、典型的に別個の互いに異なるオペレーティングシステムをもたない埋め込みシステムや、適切にプログラムされた状態機械が重要なメモリ管理処理を実行するような純粋なハードウェアインスタンシエイションといったものがある。当業者にとって明らかなとおり、こういった判断は、ハードウェアの費用やシステム性能を含むさまざまな因子により影響を受ける。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明者らが提出するのは、必要とされるものが、使用可能なメモリ資源を管理するためのさらに効率的な構成および方法であり、特に、使用可能なメモリのブロックの割り当ておよび割り当て解除を行うための主メモリ構成要素へのアクセスが平均的にほとんど必要ないというものである。
【課題を解決するための手段】
【００１１】
（発明の概要）
本発明者らの発明の簡単な実施例により、メモリ構成要素をもつデジタルデータ処理システムを用いるための、このメモリ中の使用可能な資源を管理するための方法を提供する。この実施例において、メモリの第１の部分をまず、少なくとも第１および第２のブロックに区画し、第１ブロックを第１のポインタブロックとして割り当てる。次に、第２ブロックを指す第１ポインタを生成する。最後に、第１のポインタブロックの第１ポインタを保存し、これによりここで第１ポインタがフリーポインタリストの第１部材を含む。第２ブロックが割り当てられると、第１ポインタがフリーポインタリストから除去され；第２ブロックの割り当てが解除されると、第１ポインタが再生成されてフリーポインタリストに追加し直される。第１ポインタリストはこれにより、動的に拡大縮小するようにされ、これによりメモリの第１部分の使用可能ブロックの全てに対してフリーポインタの組を常に備えるようにできる。
【００１２】
本発明者らの発明のさらに実用的な実施例により、メモリ構成要素をもつデジタルデータ処理システムを用いるための、このメモリ中の使用可能な資源を管理するための方法を提供する。この実施例において、まずメモリの第１部分をｎ個のブロックに区画し、ブロックのうちｍ個をポインタブロックとして割り当て、それぞれが最大ｓ個のポインタを保存するようにされ、ここで（ｎ＞ｍ）、（ｎ＞ｓ）かつ（（ｍ＊ｓ）≧（ｎ−ｍ））であるとする。次に、（ｎ−ｍ）個のブロックおのおのに対して、そのブロックを指すポインタを生成する。最後に、ポインタのうちｓ個をポインタブロックの最初の（ｍ−１）個のおのおのに保存し、ポインタの残りの（（ｎ−Ｍ）−（ｍ−１）＊ｓ））をポインタブロックの最後に保存し、これにより、ポインタブロックに保存されたポインタがフリーポインタリストを含むようになる。ブロックが割り当てられ、割り当て解除されるのに応じて、ポインタは、それぞれ、フリーポインタリストから除去される、あるいはそこに追加され、それにより、フリーポインタリストが動的に拡大縮小し、これによりメモリの第１部分の使用可能ブロックの全てに対してフリーポインタの組を常に備えるようにできる。好ましくは、特に、第２部分が、第１部分に対して、サイズは小さいが動作が速い場合に、フリーポインタリスト部分がメモリの第２部分に保存される。
【００１３】
本発明者らの発明の他の実施例により、メモリ構成要素をもつデジタルデータ処理システムを用いるための、このメモリ中の使用可能な資源を管理するための方法を提供する。この実施例において、まず、メモリの第１部分をブロックに区画し、その後、ポインタで構成されるフリーポインタリストを生成し、これらポインタのおのおのがブロックの各１つを指すようにする。ブロックが割り当てられると、フリーポインタリストから各ポインタを除去し、ブロックの割り当てが解除されると、各ポインタをフリーポインタリストに追加する。このように、フリーポインタリストが動的に拡大縮小するようにされ、これによりメモリの第１部分の使用可能ブロックの全てに対してフリーポインタの組を常に備えるようにできるようになるメカニズムを提供する。好ましくは、特に、第２部分が、第１部分に対して、サイズは小さいが動作が速い場合に、フリーポインタリスト部分がメモリの第２部分に保存される。
【００１４】
本発明者らの発明のさらに他の実施例により、メモリ構成要素をもつデジタルデータ処理システムを用いるための、このメモリ中の使用可能な資源を管理するための方法を提供する。この実施例において、まず、メモリの第１部分をフリーブロックの組に区画する。それに続く動作中に、フリーブロックの第１組のリンクされたリストをフリーポインタリストとして維持し、各フリーブロックがフリーブロックの第２組のフリーブロックのおのおのに対してフリーポインタ組を保存する。システムからの第１要求に応じて、フリーポインタリストのヘッドにあるフリーポインタにより指されるフリーポインタ組のブロックを割り当て、その後、そのヘッドにあるポインタをフリーポインタリストから除去する。システムからの第２の要求に応じて、割り当てられたブロックをフリーブロックの組に戻し；そのヘッドにあるフリーポインタリストに対して、戻されるブロックへのフリーポインタを追加する。再び、フリーポインタリストが動的に拡大縮小するようにされ、これによりメモリの第１部分の使用可能ブロックの全てに対してフリーポインタの組を常に備えるようにできるメカニズムを提供した。好ましくは、特に、第２部分が、第１部分に対して、サイズは小さいが動作が速い場合に、フリーポインタリスト部分がメモリの第２部分に保存される。
【００１５】
本発明者らの発明の他の１つの実施例により、メモリ構成要素をもつデジタルデータ処理システムを用いるための、このメモリ中の使用可能な資源を管理するための方法を提供する。この実施例において、まず、メモリの第１部分を少なくとも（ｎ＋１）個のフリーブロックに区画し、フリーブロックの最初の１つをフリーポインタブロックとして割り当て、ブロック内の各スロットにおいて少なくともｎ個のフリーポインタそれぞれを保存するサイズを第１のフリーブロックがもつ。次に、フリーポインタブロックのスロットの最初の１つを指すようヘッドポインタを初期化する。その後、ｎ個の他のフリーブロックのおのおのに対して、ｎ個のフリーブロックの各１つに向けたフリーポインタを、ヘッドポインタにより指されるフリーポインタブロックのスロットに保存し、フリーポインタブロックの次に続くスロットを指すようヘッドポインタを前進させる。システムからの第１の要求に応じて：フリーポインタブロックから、ヘッドポインタで指される保存されたフリーポインタの１つを検索し；検索されたフリーポインタにより指されるフリーブロックを割り当て；フリーポインタブロックの次に続くスロットを指すようヘッドポインタを後退させる。システムからの第２の要求に応じて：フリーポインタブロックの次に続くスロットを指すようヘッドポインタを前進させ；あらかじめ割り当てられたブロックをフリーブロックの組に戻し；ヘッドポインタで指されるフリーポインタブロックのスロットに対して、戻されるフリーブロックに向けたフリーポインタを保存する。再び、フリーポインタリストが動的に拡大縮小するようにされ、これによりメモリの第１部分の使用可能ブロックの全てに対してフリーポインタの組を常に備えるようにできるメカニズムを提供した。好ましくは、特に、第２部分が、第１部分に対して、サイズは小さいが動作が速い場合に、フリーポインタリスト部分がメモリの第２部分に保存される。
【００１６】
本発明者らの発明は、添付された図面とあわせて、好ましい実施例の説明によりさらによく理解される。
【００１７】
図面において、同様の要素にはできるだけ同様の番号が割り振られるようにする。しかし、このやり方は単に引用における利便性や番号が不必要に増加することを防ぐためのものであり、本発明者らの発明において、複数の実施例での機能あるいは構成のいずれかで同一性が要求されることを意味する、あるいはそれを示唆することを意図したものではない。
例えば、本発明は以下の項目を提供する。
（項目１）
メモリ構成要素をもつデジタルデータ処理システムにおいて、前記メモリにおける使用可能な資源を管理するための方法であって、この方法が：
前記メモリの第１の部分をｎ個のブロックに区画するステップと；
前記ブロックのうちｍ個をポインタブロックとして割り当て、それぞれが最大ｓ個のポインタを保存するようにされ、ここで（ｎ＞ｍ）、（ｎ＞ｓ）かつ（（ｍ＊ｓ）≧（ｎ−ｍ））であるステップと；
前記（ｎ−ｍ）個のブロックおのおのに対して、前記ブロックを指すポインタを生成するステップと；
前記ポインタブロックの最初の（ｍ−１）個おのおのの前記ポインタのうちｓ個を保存するステップと；
前記ポインタブロックの最後の前記ポインタの残りの（（ｎ−ｍ）−（ｍ−１）＊ｓ））個を保存するステップとを含む方法であって；
前記ポインタブロックに保存されたポインタがフリーポインタリストを含むことを特徴とする方法。
（項目２）
項目１に記載の方法であって、この方法がさらに：
第１のブロックを割り当てる第１の割り当て要求に応じて：
前記ポインタリストの第１のポインタで指されるブロックを割り当てのため選択するステップと；
前記第１ブロックとして前記選択ブロックを割り当てるステップと；
前記ポインタリストから前記第１ポインタを除去するステップとを含む方法。
（項目３）
項目２に記載の方法であって、この方法がさらに：
前記の第１の割り当て要求に応じて前記ポインタブロックの最後が０個のポインタを保存する場合、第２ブロックを割り当てるための第２割り当て要求に応じて、前記の最後のポインタブロックを前記の第２ブロックとして割り当てるステップを含む方法であって；これにより、前記ポインタブロックの次の１つが前記の最後のポインタブロックになる方法。
（項目４）
項目２に記載の方法であって、この方法がさらに：
前記第１ブロックの割り当てを解除する第１の割り当て解除要求に応じて：
前記第１ブロックの割り当てを解除するステップと；
前記第１ブロックを指す第２ポインタを生成するステップと；
前記ポインタリストに前記第２ポインタを追加するステップとを含む方法。
（項目５）
項目４に記載の方法であって、この方法がさらに：
前記の第１の割り当て解除要求に応じて前記ポインタブロックの最後がｓ個のポインタを保存する場合、第２ブロックの割り当てを解除するための第２割り当て解除要求に応じて：
前記第２ブロックの割り当てを解除するステップと；
前記第２ブロックをポインタブロックとして割り当てるステップとを含む方法であって；
これにより前記第２ブロックが最後のポインタブロックになる方法。
（項目６）
項目１に記載の方法であって、この方法がさらに：
ポインタブロックのリンクされたリストを形成するために前記のｍ個のポインタブロックをリンクするステップと；
前記のリンクされたリストに保存された前記ポインタの最後の除去の際に前記のリンクされたリストの前記ポインタブロックの最後を除去するステップと；
前記のリンクされたリストの前記ポインタブロックの最後にｓ番目のポインタを追加する際にポインタブロックを前記のリンクされたリストに追加するステップとを含む方法。
（項目７）
項目１に記載の方法であって、前記フリーポインタリストの選択された部分が前記メモリの第２部分に保存されることを特徴とする方法。
（項目８）
項目７に記載の方法であって、前記メモリの第２部分が、第１部分に対して、サイズは小さいが動作が速いことを特徴とする方法。
（項目９）
メモリ構成要素をもつデジタルデータ処理システムにおいて、前記メモリにおける使用可能な資源を管理するための方法であって、この方法が：
前記メモリの第１の部分を少なくとも第１と第２のブロックに区画するステップと；
前記第１ブロックを第１ポインタブロックとして割り当てるステップと；
前記第２ブロックを指す第１ポインタを生成するステップと；
前記第１ポインタを前記第１ポインタブロックに保存するステップとを含む方法であって；
前記ポインタブロックに保存されたポインタがフリーポインタリストを含むことを特徴とする方法。
（項目１０）
項目９に記載の方法であって、この方法がさらに：
ブロックを割り当てる第１の割り当て要求に応じて：
前記第１ポインタで指されるブロックを割り当てのため選択するステップと；
前記の選択されたブロックを割り当てるステップと；
前記ポインタリストから前記第１ポインタを除去するステップとを含む方法。
（項目１１）
項目１０に記載の方法であって、この方法がさらに：
前記の第１の割り当て要求に応じて前記の第１ポインタブロックが０個のポインタを保存してから、その後、第２の割り当て要求に応じて第１ポインタブロックを割り当てるステップを含む方法であって：
これによりフリーポインタリストが空になる方法。
（項目１２）
項目１１に記載の方法であって、この方法がさらに：
割り当てられたブロックの割り当てを解除する第１の割り当て解除要求に応じて：
前記の割り当てされたブロックの割り当てを解除するステップと；
前記第１ポインタブロックとして前記の割り当て解除されたブロックを再割り当てするステップとを含む方法。
（項目１３）
項目１２に記載の方法であって、この方法がさらに：
前記の第１の割り当て解除要求に応じて前記の第１ポインタブロックが所定数未満のポインタを保存する場合、割り当てられたブロックの割り当てを解除するための第２割り当て解除要求に応じて：
前記の割り当てされたブロックの割り当てを解除するステップと；
前記の割り当て解除されたブロックを指す第２ポインタを生成するステップと；
前記ポインタリストに前記第２ポインタを追加するステップとを含む方法。
（項目１４）
項目９に記載の方法であって、前記フリーポインタリストの選択された部分が前記メモリの第２部分に保存されることを特徴とする方法。
（項目１５）
項目１４に記載の方法であって、前記メモリの第２部分が、第１部分に対して、サイズは小さいが動作が速いことを特徴とする方法。
（項目１６）
メモリ構成要素をもつデジタルデータ処理システムにおいて、前記メモリにおける使用可能な資源を管理するための方法であって、この方法が：
前記メモリの第１の部分をブロックに区画するステップと；
ポインタで構成されるフリーポインタを生成し、ポインタのおのおのが前記ブロックのそれぞれ１つを指すステップと；
ブロックが割り当てられると、前記フリーポインタリストから各ポインタを除去するステップと；
ブロックの割り当てが解除されると、前記フリーポインタリストに各ポインタを追加するステップとを含む方法。
（項目１７）
項目１６に記載の方法であって、フリーポインタリストが、前期ブロックのリンクされたリストに保存され、各ブロックが、所定数の前記フリーポインタを保存することを特徴とする方法。
（項目１８）
項目１７に記載の方法であって、リンクされたリストのヘッドにあるブロックで保存されたフリーポインタの最後を除去すると同時に前記ブロックが、リンクされたリストのヘッドから除去され、これにより、前記のリンクされたリストの次のブロックが、前記リストのヘッドになる方法。
（項目１９）
項目１７に記載の方法であって、前記のリンクされたリストのヘッドにあるブロックに対して前記の所定数のポインタを追加すると同時に、前記のリンクされたリストのヘッドにブロックが追加され、これにより、前記のリンクされたリストの前記の追加されたブロックが、前記のリンクされたリストのヘッドになる方法。
（項目２０）
項目１６に記載の方法であって、前記フリーポインタリストの選択された部分が前記メモリの第２部分に保存されることを特徴とする方法。
（項目２１）
項目２０に記載の方法であって、前記メモリの第２部分が、第１部分に対して、サイズは小さいが動作が速いことを特徴とする方法。
（項目２２）
メモリ構成要素をもつデジタルデータ処理システムにおいて、前記メモリにおける使用可能な資源を管理するための方法であって、この方法が：
前記メモリの第１の部分をフリーブロックの組に区画するステップと；
前記フリーブロックの第１組のリンクされたリストをフリーポインタとして維持し、前記フリーブロックの第２組のフリーブロックのおのおのに対してフリーポインタの処理された組を保存するステップと；
前記システムからの第１の要求に応じて：
前記フリーポインタリストのヘッドにあるフリーポインタにより指された前記フリーブロック組のブロックを割り当てるステップと；
前記フリーポインタリストからこのリストのヘッドにある前記ポインタを除去するステップと；
前記システムからの第２の要求に応じて：
割り当てられたブロックを前記フリーブロックの組に戻すステップと；
このリストのヘッドにある前記フリーポインタリストに対して、前記の戻されたブロックを指すフリーポインタを追加するステップとを含む方法。
（項目２３）
項目２２に記載の方法であって、前記フリーポインタリストの選択された部分が前記メモリの第２部分に保存されることを特徴とする方法。
（項目２４）
項目２３に記載の方法であって、前記メモリの第２部分が、第１部分に対して、サイズは小さいが動作が速いことを特徴とする方法。
（項目２５）
メモリ構成要素をもつデジタルデータ処理システムにおいて、前記メモリにおける使用可能な資源を管理するための方法であって、この方法が：
前記メモリの第１の部分を少なくともｎ＋１個のフリーブロックに区画するステップと；
前記フリーブロックの最初の１つをフリーポインタブロックとして割り当て、前記の第１のフリーブロックが、前記ブロック内の各スロットにおいておのおのが少なくともｎ個のフリーポインタを保存するような大きさをもつステップと；
前記フリーポインタブロックの前記スロットの最初の１つを指すようヘッドポインタを初期化するステップと；
前記のｎ個の他のフリーブロックのおのおのに対して：
前記ヘッドポインタで指された前記フリーポインタブロックのスロットに対して、前記のｎ個のフリーブロックの各１つに対するフリーポインタを保存するステップと；
前記フリーポインタブロックの次に続くスロットを指すよう前記ヘッドポインタを前進させるステップと；
前記システムからの第１の要求に応じて：
前記フリーポインタブロックから、前記ヘッドポインタにより指され保存された前記フリーポインタの１つを検索するステップと；
前記の検索されたフリーポインタにより指されたフリーブロックを割り当てるステップと；
前記フリーポインタブロックの次に続くスロットを指すよう前記ヘッドポインタを後退させるステップと；
前記システムからの第２の要求に応じて：
前記フリーポインタブロックの次に続くスロットを指すよう前記ヘッドポインタを前進させるステップと；
割り当てられたブロックを前記フリーブロックの組に戻すステップと；
前記ヘッドポインタで指された前記の第１フリーポインタブロックのスロットに対して、前記の戻されたフリーブロックに対するフリーポインタを保存するステップとを含む方法。
（項目２６）
項目２５に記載の方法であって、前記ポインタリストの選択された部分が前記メモリの第２部分に保存されることを特徴とする方法。
（項目２７）
項目２６に記載の方法であって、前記メモリの第２部分が、第１部分に対して、サイズは小さいが動作が速いことを特徴とする方法。
【図面の簡単な説明】
【００１８】
【図１】図１は、使用可能なメモリ資源を管理するために用いられる従来のフリーリストのブロック図である。
【図２】図２は、使用可能なメモリ資源を管理するための、本発明の第１の実施例により構成されるフリーポインタリストのブロック図である。
【図３】図３は、図２のフリーポインタリストのさらに詳細なブロック図である。
【図４】図４は、使用可能なメモリ資源を管理するための、本発明の第２の実施例により構成されるフリーポインタリストのブロック図である。
【図５】図５は、図４のフリーリストのさらに詳細なブロック図である。
【発明を実施するための形態】
【００１９】
（発明の詳細な説明）
本発明者らの発明の好ましい実施例により、メモリのフリーブロックそのものではなく、むしろフリーブロックに向けたポインタを保存するために割り当てられたメモリのブロックのリンクされたリストを維持することで使用可能なメモリ資源を管理する。引用の利便性のため、本発明者らのリストをフリーポインタリストと呼び、ポインタそのものはフリーポインタと呼ぶ。
【００２０】
全般的に図２の例で示され、さらに詳細には図３で示されているものはメモリシステムであるが、このメモリシステムにおいて、使用可能なフリーブロックＢＡ２４，ＢＢ２６，ＢＣ２８，ＢＤ３０，．．．，ＢＹ３２，ＢＺ３４は、２つのフリーポインタブロックＢＡ２４およびＢＤ３０だけで構成されるフリーポインタリスト３６を用いて管理され、これらの両フリーポインタブロックはメモリ２のレベルＢに保存される。図示された構成に到達するため、本発明者らのメモリ初期化処理では、メモリの使用可能なプールの第１のフリーブロックを特定するために通常の技術を用いるが、この例ではメモリはＢＡ２４である。その後、まず前向きリンクスロットを指すようヘッド２０の初期化を行うことにより、ブロックがフリーポインタリスト３６の第１のフリーポインタブロックとなり、さらにその前向きリンクスロットのゼロ前向きポインタを保存するよう構成する（図３参照）。次のフリーブロックとしてＢＢ２６を特定すると、対応するフリーポインタが生成され、フリーポインタブロックＢＡ２４の次の使用可能なフリーポインタスロットを指すようヘッド２０が更新され、このヘッドがフリー１になり、新たに生成されたフリーポインタが、ヘッド２０、すなわちフリー１により指されるスロットに保存される。次のフリーブロックとしてＢＣ２８を特定すると、対応するフリーポインタが生成され、フリーポインタブロックＢＡ２４の次の使用可能なフリーポインタスロットを指すようヘッド２０が更新され、このヘッドがフリー２になり、新たに生成されたフリーポインタが、ヘッド２０、すなわちフリー２により指されるスロットに保存される。ＢＤ３０を次のフリーブロックとして特定すると、対応するフリーポインタが生成される。しかし、ヘッド２０を更新しようとすると、フリーポインタブロックＢＡ２４の全ての使用可能スロットが有効なフリーポインタで満たされていることを（例えば、従来の範囲確認アルゴリズムを用いて）処理により検出する。これに応じて、この処理により、前向きリンクスロットを指すようヘッド２０を再初期化することでフリーブロックＢＤ３０を次の現行のフリーポインタブロックになるよう構成し、その後、その前向きリンクスロットに対して、現時点で満たされているフリーポイントブロックＢＡ２４に向けた前向きリンクを保存する。この処理は全てのフリーブロックが特定され、各フリーポインタがフリーポインタブロックのリンクされたリストに保存されるまで続けられる。したがって、図示された例に対して、フリーブロックの最後ＢＺ３４に対応するフリーポインタは、フリーポインタブロックＢＤ３０のフリー２に保存され、図２および図３の両方で示されるように、メモリ初期化処理の終了時に、ヘッド２０がフリーブロックＢＤ３０のフリー２を指す。
注記：図２において、ヘッド２０が、現行のフリーポイントブロックのうちの任意のフリーポインタスロットを（さらに、実際には前向きリンクを同様に）指すことができるということを示すため点連結線を用いたが、図示を過度に複雑にすることを防ぐために、とる可能性のあるあらゆる変数を示していない。
【００２１】
図２および図３示す例において、フリーポインタブロックＢＡ２４およびＢＤ３０のおのおのは、フリーメモリの各ブロックに向けた２つのポインタだけを保存するようになっている。これにより、この単純な例において、合計４個のフリーメモリブロックを管理するため、合計２個のメモリブロックが必要である（実際には、以下に示すとおり、管理されるフリーブロックの合計数は６である）。このような配置により、実際的な大きさのメモリシステムで実行された場合、さらに大きく効率が上がる。例えば、さらに典型的なブロックサイズである５１２Ｂに対して、２５６ＭＢのメモリを合計５２４，２８８個のブロックに区画できる。３２ｂのポインタ（通常のサイズであるが、絶対的に必要とされるものよりもビット数は大きい）を使用し、前向きリンクに対して各フリーポインタブロックの最初の６４Ｂをとっておくと仮定すると、各フリーポインタブロックにおいて１２６個のフリーポインタを保存するために使用可能なスペースがあることになる。そのような配置において、フリーポインタブロックとして使用するため、５２４，２８８個の使用可能なフリーブロックのうち４，１２９個をあらかじめ割り当てることができ、これにより、フリーポインタとして合計５２０，２５４個の使用可能なスロットが得られる。したがって、明らかにに、残りの５２０，１５９個の使用可能なフリーブロックを管理するため、４，１２９個のフリーブロックが使用可能であり、５２０，２５４個の使用可能なフリーポインタスロットのうち９５個しか無駄にならない。
【００２２】
図２および図３で図示した構造で、フリーポインタリスト３６のヘッドにあるフリーポインタブロックを用いてフリーメモリブロックを割り当てることが望ましい。参照の利便性のため、このブロックをアクティブフリーポインタブロックと呼ぶ。メモリ初期化処理の最後に、その時に自動的に埋められるフリーポインタブロックが最初のアクティブフリーポインタブロックになる。さらに、メモリ初期化処理により頻繁にヘッド２０を更新して、最も新しく埋められたスロットを指すようにすることから、メモリ割り当てを即座に行うことができる。その後、各フリーブロックが割り当てられると、ヘッド２０が更新され、次の有効なフリーポインタを指すようになる。割り当て要求が受信され、アクティブフリーポインタブロックに有効なフリーポインタが残っていない場合、その前向きリンクをヘッド２０にコピーすることで、その時点で空のアクティブフリーポインタブロックが非活性化され、これにより、フリーポインタリスト３６の次のフリーポインタブロックを活性化する。その時点で非活性化されるフリーポインタブロックは、好ましくは、メモリの使用可能ブロックに対する保留された要求を満たすために割り当てられることにより、この時点で使用可能なフリーブロックのプールに戻すことができる。これにより、フリーブロックおよび各フリーポインタブロックが比例的に消費されるため、メモリ要求のもっとも極端な条件下で、割り当てに対して使用可能な最終のブロックがフリーポインタブロックの最後になる−レベルＢメモリ資源が無駄にならず、メモリ管理専用のレベルＡの資源だけが、前向きリンクおよび後向きリンク、すなわちヘッド２０およびテール２２を保存するためのヘッダ１８の資源になる。
注記：アクティブフリーポインタブロックの有効なフリーポインタと無効なフリーポインタとの間の境界を追跡するためにヘッド２０を用いることにより、有効なフリーポインタを含まないスロットにゼロポインタを保存する必要がなく、この保存を実際に行うことでメモリ書き込みアクセス数が増加し、臨界メモリ帯域を消費する。
【００２３】
上述の従来技術と比較するにあたって、図２および図３に示される構成から始めて、本発明者らの発明によりどのように第１のメモリ割り当て要求が処理されるかを詳細に正確に説明する。アクティブな処理、例えば処理＿Ａからの受信に対して、フリーメモリのブロックを割り当てるという要求、すなわち本発明者らのメモリ割り当て処理により、フリーポインタリスト３６のヘッドにあるフリーポインタブロックにある第１の有効なフリーポインタブロックにより指されるフリーブロックを割り当てる。図２および図３で示される例に対して、割り当て要求を満たすためにフリーブロックを得る作業は次のステップにより達成される：
１．ヘッド２０から、アクティブフリーポインタブロックＢＤ３０のフリー２スロットに向けたポインタを検索する；
２．アクティブフリーポインタＢＤ３０のフリー２スロットから、必要とするフリーブロックＢＺ３４に向けたポインタを検索する；
３．アクティブフリーポインタブロックＢＤ３０のフリー１スロットを指すようヘッド２０を更新する。
これにより、図２および図３で示されるような階層的に構成されたメモリにおいて、ブロック割り当てでは少なくとも次の３つのメモリアクセスが必要である：
１．メモリのレベルＡでの読み出しサイクル；
２．メモリのレベルＡでの読み出しサイクル；
３．メモリのレベルＡでの書き込みサイクル。
【００２４】
ここで、アクティブな処理、例えばプロセスＡから、メモリの割り当てブロックの割り当て解除を行う要求受信に対して、メモリの割り当て解除処理により、典型的には、フリーポインタリスト３６のヘッドにブロックを戻す。図２および図３に示される例に続き、割り当てられたばかりのブロックＢＺ３４の割り当て解除を処理＿Ａが要求したと仮定すると、割り当て解除は次のステップにより実施できる：
１．ヘッド２０から、アクティブフリーポインタブロックＢＤ３０のフリー２スロットに向けたポインタを検索する；
２．アクティブフリーポインタブロックＢＤ３０のフリー２スロットを指すようヘッド２０を更新する；
３．アクティブフリーポインタＢＤ３０のフリー２スロットに対して、現時点でフリーのブロックＢＺ３４に向けたポインタを保存する。
これにより、図２および図３で示されるような階層的に構成されたメモリにおいて、ブロック割り当て解除では少なくとも次の３つのメモリアクセスが必要である：
１．メモリのレベルＡでの読み出しサイクル；
２．メモリのレベルＡでの書き込みサイクル；
３．メモリのレベルＢでの書き込みサイクル。
【００２５】
この点まで、従来方法とは確かに異なる構成や手順でありながら、本発明者らの発明では顕著な性能上の利点（メモリアクセスサイクルにおける利点）はないということを示した。しかし、妥当な数のフリーポインタを保持する上で十分なメモリレベルＡにスペースが当てられるのであれば、本発明者らの発明は劇的に好ましい方向に向く。
【００２６】
図４において全般的に示され、図５においてさらに詳細に示されているものは、メモリレベルＡで比較的少数のフリーポインタを維持し、残りがもしあれば、その残りをメモリレベルＢで維持するため、本発明者らの発明の拡張された実施例により構成された２レベル式フリーポインタリスト３８である。全般に、メモリレベルＢにあるフリーポインタリスト３８の構成要素は、図２および図３で示されるフリーポインタリスト３６と構成（および構成方法）が実質的に同一である。しかしさらに、所定数のフリーポインタ（「Ｆ＿Ｐｔｒｓ」）を保持するため、フリーポインタ記憶装置Ｆ４０をメモリレベルＡになるよう保存する。好ましくは、フリーポインタブロック内にあるものと少なくとも同数のフリーポインタフリーポインタ、好ましくはフリーポインタブロックのフリーポインタの数よりも少なくとも１だけ多いものを含むよう記憶装置Ｆ４０のサイズを決める。
【００２７】
全般に、システム全体像から、フリーブロックが割り当てられる順番はあまり重要でない。したがって、フリーポインタ記憶装置Ｆ４０は、図示された例のとおり、後入れ先出し（「ＬＩＦＯ」）列、あるいは先入れ後出し（「ＦＩＦＯ」）列のいずれかで作動できる。実施に関して、フリーポインタ記憶装置Ｆ４０は、例えば、円形管理バッファあるいはプッシュダウンスタックのいずれかで構成できる。しかし、割り当て順番が重要なシステムにおいて、このシステム制限を満たすため、さまざまな既知の実施オプションの特定の１つを選定することが望ましい。この説明では、フリーポインタ記憶装置Ｆ４０が、円形管理バッファとして実施されるＬＩＦＯ列であると仮定している。このような構成において、最終ポインタ４２は、列のヘッドに追加される最終フリーポインタを常に指す。
【００２８】
本発明者らの発明の好ましい実施例によれば、本発明者らのメモリ初期化処理では、フリーポインタブロックをあらかじめ組み立てるための一次作業エリアとしてフリーポインタ記憶装置Ｆ４０を用いる。処理の開始時に、フリーポインタ記憶装置Ｆ４０は空であり、最終ポインタ４２はゼロである。これにより、第１のフリーブロックが、例えばフリーブロックＢＡ２４として特定されると、最終ポインタ４２は、フリーポインタ記憶装置Ｆ４０のＦ１スロットを指すよう前進し、対応するフリーポインタがそのスロットに記憶される。第２のフリーブロックＢＢ２６が特定されると、最終ポインタ４２は、フリーポインタ記憶装置Ｆ４０のＦ２スロットを指すよう前進し、対応するフリーポインタがそのスロットに記憶される。この処理は、最終ポインタ４２を所定の最大レベルまで前進させた結果、フリーポインタ記憶装置Ｆ４０からメモリレベルＢまでフリーポインタのブロックを移行させる必要性をプッシュ信号が示すようになるまで継続される。これにより、図示された例において、最終ポインタ４２がフリーポインタ記憶装置Ｆ４０のＦ３スロットまで前進した場合に、プッシュ動作が開始される。第３のフリーブロックＢＣ２８を特定すると同時に、この処理により最終ポインタ４２を、Ｆ３スロットを指すよう前進させる際にこれがまず起こり、その後、そのスロット内の対応するフリーポインタを記憶させる。結果として行われるプッシュ操作の間、まず前向きリンクスロットを指すようヘッド２０の初期化を行うことにより、この例ではＢＤ３０となる次のフリーブロックがフリーポインタリスト３６の第１のフリーポインタブロックになり、さらにその前向きリンクスロットのゼロ前向きポインタを保存するよう構成する（図５参照）。この処理ではその後、適当な数のフリーポインタをフリーポインタ記憶装置Ｆ４０から新たなフリーポインタブロックの各スロットに移動させ、上述のとおりフリーポインタスロットが満たされるのに応じてヘッド２０を継続的に更新し、同時に、各ポインタがうまく移動された後に最終ポインタ４２を後退させる。
【００２９】
プッシュ操作の最後に、最終ポインタ４２は再び、有効なフリーポインタ（この例ではブロックＢＡ２４）を含む唯一のスロットであるフリーポインタ記憶装置Ｆ４０のＦ１スロットを指す。フリーポインタ記憶装置Ｆ４０においてこの時点で使用可能なスペースを用いて、メモリ初期化処理により通常の操作を再開できる。この例ではＢＹ３２（介在するブロックの説明については効率性の点から無視している）となる次のフリーブロックが特定されると、最終ポインタ４２は、フリーポインタ記憶装置Ｆ４０のＦ２スロットを指すよう前進し、対応するフリーポインタがそのスロットに記憶される。最後に、この例ではＢＺ３４となる最終フリーブロックが特定されると、最終ポインタ４２は、フリーポインタ記憶装置Ｆ４０のＦ３スロットを指すよう前進し、対応するフリーポインタがそのスロットに記憶される。この時点で、追加のフリーブロックが特定されるとプッシュ操作が開始されることを示すようプッシュ信号が再び発せられる。この例では、このようなことは起こっていないが、一般的に、大きなメモリ構成要素をもつシステムにおいて、こういった処理は、全てのフリーブロックが特定されて各フリーポインタが、まずフリーポインタ記憶装置Ｆ４０に保存されるまで継続され、さらに必要に応じてフリーポインタブロックのリンクされたリストに押し込まれる。
【００３０】
図４および図５で図示した構造で、現時点で最終ポインタ４２により指されているＦ４０のスロットで記憶されているフリーポインタにより指されているフリーブロックとともに各割り当て要求を満たすことが望ましい。各フリーブロックが割り当てられると、最終ポインタ４２が１つのスロットにより後退させられる。これにより、図示された例において、フリーブロックＢＺ３４は、メモリに対する第１の要求を満たすよう割り当てられ、その結果、最終ポインタ４２はＦ２スロットを指すよう後退させられる。この処理は、結果として最終ポインタが所定の最小レベル未満まで下がり、メモリレベルＢからメモリレベルＡまであらかじめ下げられたフリーポインタを移動させる必要性をプル信号が示すようになるまで継続される。フリーポインタ記憶装置Ｆ４０が４個のフリーポインタだけを備える図示された例において、第１のスロットＦ１を指すよう最終ポインタ４２の後退直後にプル操作が開始されるよう提案する。これは、メモリに対する第２の要求を満たすようフリーブロックＢＹ３２を割り当てた結果、この処理により最終ポインタ４２はＦ１スロットを指すよう後退させられる際にまず発生する。結果として行われるプル操作の間、この処理により、ヘッド２０から、フリーポインタリスト３６のヘッドにあるフリーポインタブロックの第１のフリーポインタ、すなわちＢＤ１２に向けたポインタを検索する。この処理ではその後、適当な数のフリーポインタをフリーポインタ記憶装置Ｆ４０からＦ４０の各スロットに移動させ、上述のとおりフリーポインタスロットが空にされるのに応じてヘッド２０を継続的に更新し、同時に、各フリーポインタがうまく移動されるのに応じて最終ポインタ４２を前進させる。プル操作の結果、フリーポインタブロックに有効なポインタが残らない場合、プル操作により、フリーポインタリスト３６からそのブロックのリンクを切断し、フリーポインタ記憶装置Ｆ４０の次に使用可能なスロットのこの時点でフリーになったブロックに対して対応するフリーポインタを挿入する。
【００３１】
後に明らかとなるとおり、本発明者らの発明の好ましい実施例により、メモリのブロックの割り当て／割り当て解除を行うためのアクティブ処理からの各要求にこたえる間にメモリ構成要素のレベルＢにあるフリーポインタリスト３６にアクセスする必要がなくなる。むしろ、本発明者らの発明では、メモリのレベルＡに対するそのようなルーチン作業を制限するものであり、プッシュ／プル操作の間だけレベルＢにアクセスされ、その際においてもこの操作はまとまったアクセスの中で比較的短い操作になる。この処理は、メモリのレベルＢが効率的にブロックアクセスをサポートするようになっていれば、特に効率的である。
【００３２】
全般的に、上述の処理により、プッシュ／プル操作がバックグランドでスケジューリングできるようになる。これにより、これらの操作では、おそらく異常に長い一連のメモリ割り当てあるいは割り当て解除の間を除けば、システム性能に与える影響は最小限のものである。しかし、本発明者らの発明から最大限の性能を実現するため、フリーポインタＦ４０のサイズが最適化されるようシステムアプリケーションの予想される動的挙動を理解するよう注意深い解析を行うよう勧める。一方では、フリーポインタ記憶装置Ｆ４０があるシステムに対して小さすぎる場合、不必要なプッシュ／プル操作においてかなりの性能が失われ；他方、これが大きすぎる場合、他の重要な作業で利用できない過剰なレベルＡ空間そのものによりかなりの性能劣化が起こる。当然ながら、適切に構成されたシステムにおいて、システムに対する要求が時間とともに、さらに異なる作業負荷の下で変化するのに応じて、フリーポインタ記憶装置Ｆ４０のサイズを動的に調整するため従来型の作業監視アルゴリズムを用いることも確かに考えられる。
【００３３】
これにより、使用可能なメモリ資源を効率的に管理するための構成および方法を本発明者らが提供したことは明らかである。特に、使用可能なメモリ資源を管理するための構成および方法を本発明者らは開示した。さらに、従来技術のように直接ではなく、フリーポインタのリストを通して間接的に使用可能なメモリ資源を管理するための構成および方法を本発明者らは開示した。高性能レベルおよび比較的低性能レベルで階層的に構成されるメモリをもつシステムにおいて、フリーポインタが二層リストとして維持される場合、本発明者らの構成および方法は特に効率的であり、ここでは少数のフリーポインタが高性能レベルで維持され、フリーポインタの残りが低性能レベルで維持される。当業者であれば、本発明者らの発明の考え方から逸脱することなく改造や変更を行うことができるということを認識するであろう。したがって、本発明者らの発明は、そのような変更や改造について、添付の請求項の適用範囲内に入ることを意図している。
【図１】
2011248920.tif 000003
【図２】
2011248920.tif 000004
【図３】
2011248920.tif 000005
【図４】
2011248920.tif 000006
【図５】
2011248920.tif 000007
【外国語明細書】
2011248920000001.pdf