(57)【要約】【課題】連続物理メモリを割り振るための改良された方法、システムおよびコンピュータ・ソフトウェアを提供すること。【解決手段】基礎をなす連続物理メモリが連続するかどうかの保証なしに割り振られたメモリから、物理的に連続したメモリを提供することは、割り振られた仮想メモリ中の物理メモリの連続ページを識別することを含む。このようなページは、必要に応じて使用できるように、連続物理メモリのプールに与えられている。連続物理メモリのプールに与えられていないページには、連続物理メモリのプールに与えられているその他のページが割り振られることはなく別の目的で使用するために割振りから解放することができる。【選択図】図１
2004127291.tif 000002
【特許請求の範囲】
【請求項１】
　物理的に連続したメモリ・アドレスを提供する方法であって、
　１つまたは複数の別個の仮想ページを含む、仮想メモリ・アドレス空間の少なくとも一部を割り振るステップと、
　前記少なくとも一部のページのそれぞれについて、物理メモリ・アドレスを取得するステップと、
　前記ページのうちどれが、連続した物理メモリ・アドレスを有するかを判断するステップと、
　前記判断した仮想メモリ・アドレスを、その後に使用するために連続物理メモリのプールに割り当てるステップとを含む方法。
【請求項２】
　前記少なくとも一部の仮想メモリの、前記ページのそれぞれを、ページング不可として割り当てるステップをさらに含む、請求項１に記載の方法。
【請求項３】
　前記少なくとも一部の仮想メモリ中の前記ページの総数と同じ数の要素を有する、２つの配列を提供するステップをさらに含む、請求項１に記載の方法。
【請求項４】
　前記２つの配列は、前記ページのそれぞれの仮想アドレスを保持する第１の配列と、前記ページのそれぞれの対応する物理アドレスを保持する第２の配列を含む、請求項３に記載の方法。
【請求項５】
　前記第２の配列の内容が昇順の物理アドレスになるように、前記２つの配列の内容をソートするステップをさらに含む、請求項１に記載の方法。
【請求項６】
　前記ソートするステップは、前記第１の配列および前記第２の配列のそれぞれの要素の間に１：１の関係を維持する、請求項５に記載の方法。
【請求項７】
　連続物理メモリ・アドレスを形成する前記第２の配列の要素にマーク付けするステップをさらに含む、請求項１に記載の方法。
【請求項８】
　前記仮想メモリの一部のみが割り振られる、請求項１に記載の方法。
【請求項９】
　複数の仮想メモリ部分が割り振られる、請求項１に記載の方法。
【請求項１０】
　少なくとも１つのページを前記連続物理メモリのプールに割り当てていない、前記仮想メモリの割り振られた部分のいずれか１つを解放するステップをさらに含む、
請求項８に記載の方法。
【請求項１１】
　物理的に連続したメモリ・アドレスを提供するためのコンピュータ・ソフトウェアであって、媒体上に記録され、前記コンピュータ・ソフトウェアを解釈することが可能なコンピュータ・システムによって実行されることが可能であり、
　１つまたは複数の別個の仮想ページを含む、仮想メモリ・アドレス空間の少なくとも一部を割り振るためのコード手段と、
　前記少なくとも一部の前記ページのそれぞれについて、物理メモリ・アドレスを取得するためのコード手段と、
　前記ページのうちどれが、連続した物理メモリ・アドレスを有するかを判断するためのコード手段と、
　前記判断した仮想メモリ・アドレスを、その後に使用するために連続物理メモリのプールに割り当てるためのコード手段とを含むコンピュータ・ソフトウェア。
【請求項１２】
　物理的に連続したメモリ・アドレスを提供するためのコンピュータ・システムであって、
　１つまたは複数の別個の仮想ページを含む、仮想メモリ・アドレス空間の少なくとも一部を割り振るための手段と、
　前記少なくとも一部の前記ページのそれぞれについて、物理メモリ・アドレスを取得するための手段と、
　前記ページのうちどれが、連続した物理メモリ・アドレスを有するかを判断するための手段と、
　前記判断した仮想メモリ・アドレスを、その後に使用するために連続物理メモリのプールに割り当てるための手段とを含む、コンピュータ・ソフトウェアを実行するコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、ランダム・アクセス・メモリ中に連続物理メモリを割り振ることに関する。
【背景技術】
【０００２】
　コンピュータ・システムのカーネル・アーキテクチャにおいて、連続物理メモリ（すなわち、連続した実（物理）アドレスを含むメモリ）は、しだいに使用されなくなりつつある。カーネル設計者は、ハードウェアがスキャッタ・ギャザ（scatter-gather）Ｉ／Ｏをサポートしていることを前提としており、これはしばしば正しい。
【０００３】
　しかし、多くの古いハードウェア・コンポーネントは、スキャッタ・ギャザＩ／Ｏをサポートしておらず、また、新しいハードウェア・コンポーネントでもスキャッタ・ギャザＩ／Ｏをサポートしていないものがある。最近の様々なハードウェア・デバイス・コンポーネントは、それらのバッファのディスクリプタ・リングについてスキャッタ・ギャザＩ／Ｏをサポートしていない。その一例として、カリフォルニア州サンホセのAlteon Websystems Inc.が生産しているギガビット・イーサネット（登録商標）／ＰＣＩネットワーク・インタフェース・カード、Ｔｉｇｏｎ２ＡＳＩＣ、バージョン５または６（ＳＸファイバ・コネクタはＩＢＭ　ＦＲＵ０７Ｌ８９１８）が挙げられる。
【０００４】
　オペレーティング・システムは、カーネルのプログラミングのためにＡＰＩ（アプリケーション・プログラム・インタフェース）を提供する。特に、オペレーティング・システムは、カーネルの仮想アドレス空間にメモリを割り振るためのＡＰＩを提供する。一例として、ＡＩＸ（登録商標）オペレーティング・システムが提供するxmalloc()が挙げられる。このＡＰＩは、このＡＰＩの結果として割り振られる物理メモリが連続することを保証しない。
【０００５】
　オペレーティング・システムによっては、物理メモリが連続することを保証して、仮想アドレス空間にメモリを割り振るＡＰＩを提供するものもある。一例として、ＡＩＸ（登録商標）オペレーティング・システム中のrmalloc()が挙げられる。このコマンドの結果として割り振られるメモリは、固定されるが、ページング可能ではない。連続物理メモリを提供するＡＰＩ（例えば、上述のrmalloc()）の使用は限定される。カーネル・エクステンション、デバイス・ドライバ、およびその他のモジュールを書くプログラマは、一般に、rmalloc()などのＡＰＩを使用することが可能でない。このようなＡＰＩは、一般に、特定の状況にあるファームウェア・プログラマだけが使用ができる。この場合、rmalloc()を使って利用可能なメモリのフリー・プールは１６ＭＢであり、ＩＢＭ　ＲＳ／６０００シリーズのシステムなど、ＡＩＸ（登録商標）オペレーティング・システムを使用しているほとんどのシステムにおいては、ファームウェアによって完全に占有される。
【０００６】
　アプリケーション（すなわち、ユーザ・モード）のプログラミングの場合、メモリ割振りのために提供される標準ＡＰＩは、malloc()およびrealloc()である。いずれの場合も、基礎をなす物理メモリの連続性は保証されない。したがって、これらのコールは、連続物理メモリが必要とされる場合の使用には適さない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
　上記に鑑みて、明らかに、連続物理メモリを割り振るための改良された方法、システムおよびコンピュータ・ソフトウェアが必要とされている。
【課題を解決するための手段】
【０００８】
　本明細書では、基礎をなす連続物理メモリが連続するかどうかの保証なく割り振られたメモリから、物理的に連続したメモリを提供するためのアルゴリズムを説明する。これらのアルゴリズムを、メモリを割り振るためのオペレーティング・システム・コールに組み込むことによって、それらのコールによって割り振られたメモリが物理的に連続するように保証することができる。
【０００９】
　物理的に連続したメモリを提供することには、１つの割り振られた仮想メモリのチャンク、または複数の割り振られた仮想メモリのチャンクにおいて、物理メモリの連続ページを識別することが含まれる。このようにして識別された物理ページは、必要に応じて使用するために、連続物理メモリのプールに与えられる。
【００１０】
　単一の仮想メモリ・チャンクのみが割り振られている場合、少なくともいくつかのページが連続ページとして使用されていると、未使用ページを解放することができない。しかし、このようなチャンクに、その後に使用するために連続物理メモリのプールに与えられている他のページが割り振られていなければ、別の目的で使用するために未使用ページを解放することができる。連続物理メモリのプールに与えられていないページはどれも、別の目的で使用するために割振りから解放することができる。
【００１１】
　単一のメモリ・チャンクのみを割り振る方が容易ではあるが、効率がよくない。一方、複数の別個のチャンクを割り振る方が複雑ではあるが、無駄使いする未使用ページが少ないため、より効率的であり得る。
【００１２】
　比較的サイズの大きい単一のメモリ・チャンクのみを割り振る方が容易であり、より多くの物理連続ページが得られるが、効率がよくない。一方、比較的サイズの小さい複数のチャンクを割り振る方が複雑であり、得られる物理連続ページが少ないが、無駄使いする未使用ページが少ないため、より効率的であり得る。
【発明を実施するための最良の形態】
【００１３】
　本明細書では、物理的に連続したメモリを割り振るためのオペレーティング・システムという観点から、方法、コンピュータ・システムおよびコンピュータ・ソフトウェアについて説明している。本明細書では、ＡＩＸ（登録商標）オペレーティング・システムに関連して、特定の実装を説明しているが、その他のオペレーティング・システムについても実装が可能である。
【００１４】
　物理的に連続したメモリを割り振るための第１および第２のアルゴリズムを、それぞれ順番に説明する。各アルゴリズムは特定の利点を備えている。両方の概観を、以下に説明する。
【００１５】
　第１のアルゴリズム
　物理的に連続したメモリを割り振るための第１のアルゴリズムにおけるステップを、図１〜３に関連して、以下に説明する。以下に記載するステップは、図１の流れ図に示すステップに対応する。
　ステップ１１０　仮想アドレス空間に、単一の大きいメモリ・チャンクを割り振る（ユーザ・モードでmalloc()、realloc()、カーネル・モードでxmalloc()）。
　ステップ１２０　上記で得られたチャンク中の各ページに、ページング不可としてマーク付けする。これは、それらのページが決してスワップ・アウトされることなく、その物理アドレスが永続的であることを意味する（カーネル・モードでxmempin()）。
　ステップ１３０　チャンク中の各仮想ページの実物理アドレスを取得する。
　ステップ１４０　２つの配列（データ構造）に、チャンク中のページ数に等しい要素数を割り振る。第１の配列は、各ページの仮想アドレスを保持し、第２の配列は、対応するページの物理アドレスを保持する。
　ステップ１５０　第２の配列中の要素が昇順になるように、配列をソートする。ソーティングの間、第１の配列と第２の配列の要素間の１：１のマッピングが損なわれないよう、注意が必要である。その結果、第２の配列の要素は昇順にソートされるが、第１の配列の要素は特定の順序にはならない。
　ステップ１６０　第２の配列を解析し、連続しているページにマーク付けする。
　ステップ１７０　これらのマーク付けしたページを、次いで、物理的に連続したプールに与える。
【００１６】
　図２は、単一メモリ・チャンク２１０の割り振りを概略的に示す。この単一チャンク２１０は、仮想メモリ・ページ２２０　Ｖ１〜Ｖｎを含む。これらの仮想メモリ・ページ２２０は、物理メモリ・ページ２３０　Ｐ２０１〜Ｐ５００のそれぞれに対応する。仮想メモリ・ページ２２０と物理メモリ・ページ２３０の間に特定の相関関係はない。図２に示すように、例として物理メモリ・アドレスＰ２０１、Ｐ２０４などを記載してある。
【００１７】
　図３は図２に対応し、ソーティング後の仮想メモリ・ページ２２０および物理メモリ・ページ２３０を概略的に示す。この場合、図３に示すように、２組の連続物理メモリ・ページを識別することができる。これらの連続物理メモリ・ページには、アドレスＰ２０１、Ｐ２０２、Ｐ２０３、Ｐ２０４、および、Ｐ３１０、Ｐ３１１を有するページが含まれている。
【００１８】
　物理メモリ２３０のこれら２組のページは、必要に応じて使用できるように、連続物理メモリのプールに与えられている。未使用の物理メモリ・ページは、アドレスＰ４００およびＰ５００を有するものとして識別されるが、メモリ・チャンク２１０が多数のページを上述の２組の連続物理メモリに与えているため、それらの未使用ページを解放することはできない。
【００１９】
　第２のアルゴリズム
　物理的に連続したメモリを割り振るための第２のアルゴリズムを、図４〜６を参照しながら以下に説明する。以下に記載するステップは、図４の流れ図に示すステップに対応する。
　ステップ４１０　仮想アドレス空間に小さい複数メモリ・チャンクを割り振る。（ユーザ・モードでmalloc()、realloc()、カーネル・モードでxmalloc()）。これらのチャンクは、１０ページまたは１００ページ、あるいはそれ以上のページであることがあり、またプログラム可能であり得る。このようなチャンクのいくつかを割り振る。この方法では、連続性が減少し、したがってより多くのページ数を割り振る必要があることに留意されたい。
　ステップ４２０　上記で得られた各チャンク中の各ページに、ページング不可としてマーク付けする。これは、それらのページが決してスワップ・アウトされることなく、その物理アドレスが永続的であることを意味する（カーネル・モードでxmempin()）。
　ステップ４３０　各チャンク中の各仮想ページの実物理アドレスを取得する。
　ステップ４４０　２つの配列（データ構造）に、チャンク全体のページの総数に等しい要素数を割り振る。第１の配列は、各ページの仮想アドレスを保持し、第２の配列は、対応するページの物理アドレスを保持する。
　ステップ４５０　第２の配列中の要素が昇順になるように、配列をソートする。ソーティングの間、第１の配列と第２の配列の間の１：１のマッピングが損なわれないよう、注意が必要である。その結果、第２の配列の要素は昇順にソートされるが、第１の配列の要素は特定の順序にはならない。
　ステップ４６０　第２の配列を解析し、連続しているページにマーク付けする。
　ステップ４７０　これらのマーク付けしたページを、次いで、物理的に連続したプールに与える。
　ステップ４８０　ステップ４１０で割り振った全てのチャンクを調べる。チャンクのうち、連続メモリ・プールに単一ページを与えていないものがあれば、そのチャンクは解放される（free()またはxmemfree()を使って）。
【００２０】
　図５は、ｎ個のメモリ・チャンク５１０の割り振りを概略的に示す。図５に示すように、これらのチャンク５１０は、仮想メモリ・ページ５２０　Ｖ１〜Ｖ１２を含む。これらの仮想メモリ・ページ５２０は、物理メモリ・ページ５３０　Ｐ２１〜Ｐ６６のそれぞれに対応する。仮想メモリ・ページ５２０と物理メモリ・ページ５３０の間に特定の相関関係はない。図５に示すように、例として物理メモリ・アドレスＰ２１、Ｐ３４などを記載してある。
【００２１】
　図６は図５に対応し、ソーティング後の仮想メモリ・ページ５２０および物理メモリ・ページ５３０を概略的に示す。この場合、図６に示すように、２組の連続物理メモリ・ページを識別することができる。これらの連続物理メモリ・ページは、２組の物理メモリ・ページＰ２１、Ｐ２２、Ｐ２３、Ｐ２４、および、Ｐ３４、Ｐ３５、Ｐ３６、Ｐ３７を含む。
【００２２】
　物理メモリ・アドレスＰ５０およびＰ７７を有するページとして、２つの未使用ページが識別されている。２つの使用ページは解放することもできる。これらのページは、１組の連続物理メモリ・ページの一部であるページを共用している、割り振られたメモリ・チャンクの一部ではないためである。これらのページＰ５８およびＰ６６は、仮想ページＶ１１およびＶ１２として、単一のチャンク中に割り振られている。これらのページＰ５８およびＰ６６は、図６に示すように、チャンクｎ　６４０に関連付けられている。
【００２３】
　アルゴリズムの実装
　第１また第２のアルゴリズムのいずれかを、次の方法のいずれかにおいて使用することができる。ある実装では、アルゴリズムをユーザ・モード・ライブラリに含めることができる。あるいは、アルゴリズムをmalloc()コード中に含めることができ、それによって、ユーザ・モード・アプリケーションは、malloc()コードの改定された機能を利用することができる。
【００２４】
　このアルゴリズムをカーネル・エクステンションで実装することにより、カーネル中に機能を提供することができる。記載のアルゴリズムの実装例として、図７〜１０に擬似コードを示す。
【００２５】
　図７は、対応する物理メモリ・アドレスと仮想メモリ・アドレスの配列要素をソートするための擬似コードを示す。図８は、連続メモリのプールを初期化するための擬似コードを示す。図９は、連続メモリのプールを未初期化するための擬似コードを示す。図１０は、所望の連続メモリ・ページ数を得るための擬似コードを示す。
【００２６】
　図７〜１０のこれらの擬似コード・フラグメントを、組み合わせて適切に使用することにより、記載のアルゴリズムを実装することができる。
【００２７】
　図７〜１０の擬似コード・フラグメントは、アルゴリズムを実装するための１つの方法を示す。記載のアルゴリズムを実装するために使用する、多くの異なる効率的なコーディング技術およびデータ構造があり得る。上述のコードは、ユーザ・モード動作のための実装である。以下は、このアルゴリズムをユーザ・モードで実装するための重要な情報である。
【００２８】
　擬似コードは、pdiagex（移植可能診断カーネル・エクステンション）によってエクスポートされるコールを使用することができる。これは、プロミング・エラーの診断のためにＡＩＸ（登録商標）オペレーティング・システムにおいて利用可能な、汎用カーネル・エクステンションである。このコードは、ユーザ・モードであり続けることによって、物理アドレスを取得するための２つのコール（（ａ）pdiag_dd_dma_setup()、（ｂ）pdiag_dd_dma_complete()）を使用する。このエクステンションが使用されない場合には、代わりに、同様の機能を備えた２つのシステム・コールが使用される。
【００２９】
　第１および第２のアルゴリズムの概観
　上記のこの第１のアルゴリズムによると、大量のメモリの無駄使いが生じる。全てのページが連続メモリ・プールに与えられるわけではなくても、未使用のページを解放することはできない。全てのページを単一のmalloc()コールを使って割り振るため、カーネルのメモリ割振り機能がきわめて接近して実行され、そのため、連続物理メモリが得られる確率はきわめて高くなる。
【００３０】
　サイズが小さい仮想メモリ・チャンクを割り振る場合、固定物理アドレスが得られ、各チャンクに対するこれらの操作のそれぞれがそれほど間断なく発生するわけではない。これらのそれぞれの動作の間で、メモリの割振り、メモリなどに関連する多くのその他のカーネル・サービスが一斉に実行される。したがって、物理アドレスは散らされやすい。すなわち、物理アドレスの範囲全体にわたって分散されやすい。これに対して、大きいサイズの１つのチャンクを使用した場合、上述の動作が間断なく発生し、それによって、散らされた、すなわち不連続の物理アドレスが発生する可能性が削減される。
【００３１】
　第２のアルゴリズムは、資源の有効活用を、必要とする物理的な連続メモリの容量より優先する場合に特に有利である。第２のアルゴリズムは、資源をより有効に活用し、不必要なメモリを解放する。しかし、得られる連続メモリの総容量は、第１のアルゴリズムを使った場合よりも少ない。
【００３２】
　第１のアルゴリズムを実装するために必要なプログラミングは比較的単純である。第２のアルゴリズムに必要なプログラミングは、第１のアルゴリズムでは使用しないデータ構造を使用するため、第１のアルゴリズムに必要なプログラミングよりも複雑である。
【００３３】
　コンピュータ・ハードウェアおよびソフトウェア
　図１１は、本明細書に記載の技術を実装するプロセスにおけるステップを実行するために使用できる、コンピュータ・システム１１００の概略図である。コンピュータ・システム１１００は、上述の技術を実行する際の援助となるようにプログラムされた、コンピュータ・ソフトウェアを実行するために提供されている。このコンピュータ・ソフトウェアは、コンピュータ・システム１１００上にインストールされた、適切なオペレーティング・システムの下で実行する。
【００３４】
　このコンピュータ・ソフトウェアは、コンピュータ・システム１１００が解釈することが可能な１組のプログラムされた論理命令を含む。それらの命令は、コンピュータ・システム１１００に、それらの命令が指定する所定の機能を実行するように命令するものである。コンピュータ・ソフトウェアは、互換性のある情報処理システムに、特定の機能を直接、または別の言語、コード、または表記法に変換した後、実行させることを目的とした１組の命令を含む、いずれかの言語、コードまたは表記法で記録された表現でよい。
【００３５】
　コンピュータ・ソフトウェアは、適切なコンピュータ言語で書かれたステートメントを含む、コンピュータ・プログラムによってプログラムされている。コンピュータ・プログラムは、コンパイラを使って処理され、オペレーティング・システムが実行するのに適したバイナリ・フォーマットのコンピュータ・ソフトウェアとなる。コンピュータ・ソフトウェアは、記載の技術のプロセスにおいて特定のステップを実行する、様々なソフトウェア・コンポーネントまたはコード手段を含むようにプログラムされている。
【００３６】
　コンピュータ・システム１１００のコンポーネントには、コンピュータ１１２０、入力装置１１１０、１１１５、およびビデオ・ディスプレイ１１９０が含まれる。コンピュータ１１２０は、プロセッサ１１４０、メモリ・モジュール１１５０、入出力（Ｉ／Ｏ）インタフェース１１６０、１１６５、ビデオ・インタフェース１１４５、および記憶装置１１５５を含む。
【００３７】
　プロセッサ１１４０は、オペレーティング・システム、およびオペレーティング・システムの下で実行するコンピュータ・ソフトウェアを実行する、中央処理装置（ＣＰＵ）である。メモリ・モジュール１１５０は、ランダム・アクセス・メモリ（ＲＡＭ）および読取り専用メモリ（ＲＯＭ）を含み、プロセッサ１１４０の指示のもとで使用される。
【００３８】
　ビデオ・インタフェース１１４５は、ビデオ・ディスプレイ１１９０に接続され、ビデオ・ディスプレイ１１９０上で表示するためのビデオ信号を供給する。コンピュータ１１２０を操作するためのユーザ入力は、キーボード１１１０およびマウス１１１５からなる、入力装置１１１０、１１１５から供給される。記憶装置１１５５は、ディスク・ドライブまたはその他の適切な不揮発性記憶媒体を含むことができる。
【００３９】
　コンピュータ１１２０の各コンポーネントは、データ・バス、アドレス・バス、および制御バスを含む、バス１１３０に接続されており、それによって、これらのコンポーネントは、バス１１３０を介して互いに通信することができる。
【００４０】
　コンピュータ・システム１１００を、インターネットとして示してあるネットワーク１１８０への通信チャネル１１８５を使って、入出力（Ｉ／Ｏ）インタフェース１１６５を介し、１つまたは複数の他の同様のコンピュータに接続することができる。
【００４１】
　コンピュータ・ソフトウェアを、携帯用記憶媒体上に記録されたコンピュータ・プログラム製品として提供することができる。この場合、このコンピュータ・ソフトウェアには、コンピュータ・システム１１００によって記憶装置１１５５からアクセスする。あるいは、コンピュータ１１２０によって、ネットワーク１１８０から直接アクセスすることができる。いずれの場合も、ユーザは、キーボード１１１０およびマウス１１１５を使ってコンピュータ・システム１１００と対話することにより、コンピュータ１１２０上で実行しているコンピュータ・ソフトウェアを操作することができる。
【００４２】
　コンピュータ・システム１１００は、例として説明しているにすぎない。コンピュータ・システムのその他の構成またはタイプも、記載の技術を実装するために同様にうまく使用することができる。
【００４３】
　結論
　本明細書に記載の技術を使って、４Ｋよりも大きいデータ・バッファを使用するのに十分な、比較的大きい連続メモリのプールを提供することができる。一般的なオペレーティング・システムのページのサイズは４Ｋであり、通常、データ・バッファに関するこの４Ｋという限界を超えることはできない。
【００４４】
　記載の技術は、ホット・プラグのＰＣＩ（周辺接続インタフェース）コンポーネントの場合にうまく動作し、ファームウェアの初期化には依存しない。インストール時に再起動する必要もない。また、記載の技術は、rmalloc()を使用しない小規模のメモリ要件、または類似のほとんど利用不可能な資源にも役立つ。
【００４５】
　連続メモリのプールは、アプリケーションおよびカーネルのプログラマが利用できる。利用可能な連続物理メモリの容量は調整可能であり、適切な資源管理によって増やすことも減らすこともできる。資源を適切に管理することによって、最低限のメモリ・プールを提供することができる。ハードウェア・デバイスに追加機能が必要とされることもないし、ハードウェアのメモリ・マッピングの変更が必要とされることもない。資源がロックされることもない。また、物理メモリを割り振るためにオペレーティング・システム・ファームウェアをハックする必要や、カーネルに変更を施す必要もない。
【００４６】
　資源を永続的にブロック化するわけではない。必要に応じて、いつでもメモリおよび資源を一般の使用に利用できるようにすることができる。
【００４７】
　いずれかの特定の場合に利用可能な連続物理メモリの容量は、コンピュータ・システムに設置されているメモリのサイズに依存する。アルゴリズムは、初期化のたびに、利用可能な物理的に連続したメモリの容量を前もって判断することはできない。本明細書に記載のアルゴリズムのいずれにおいても、幾分、メモリの無駄使いが生じる。第２のアルゴリズムは、このメモリの無駄使いの程度を減少させるが、しかし、利用可能な連続メモリの総容量が減少するという犠牲が伴う。
【００４８】
　本明細書に記載の技術および構成は、ＡＩＸ（登録商標）オペレーティング・システムに関するものであるが、これらの技術および構成は、その他のＵＮＩＸ（登録商標）ベースのオペレーティング・システムにも適用できる。また、Ｗｉｎｄｏｗｓ（登録商標）ＮＴなどの非ＵＮＩＸ（登録商標）のオペレーティング・システムにおいても実装が可能である。記載のアルゴリズムは、いずれかの特定のオペレーティング・システムに依存するものではない。
【００４９】
　当業者には明らかなように、本明細書に記載の技術および構成には、様々な変更および修正を加えることができる。
【００５０】
　まとめとして、本発明の構成に関して以下の事項を開示する。
【００５１】
（１）物理的に連続したメモリ・アドレスを提供する方法であって、
　１つまたは複数の別個の仮想ページを含む、仮想メモリ・アドレス空間の少なくとも一部を割り振るステップと、
　前記少なくとも一部のページのそれぞれについて、物理メモリ・アドレスを取得するステップと、
　前記ページのうちどれが、連続した物理メモリ・アドレスを有するかを判断するステップと、
　前記判断した仮想メモリ・アドレスを、その後に使用するために連続物理メモリのプールに割り当てるステップとを含む方法。
（２）前記少なくとも一部の仮想メモリの、前記ページのそれぞれを、ページング不可として割り当てるステップをさらに含む、上記（１）に記載の方法。
（３）前記少なくとも一部の仮想メモリ中の前記ページの総数と同じ数の要素を有する、２つの配列を提供するステップをさらに含む、上記（１）に記載の方法。
（４）前記２つの配列は、前記ページのそれぞれの仮想アドレスを保持する第１の配列と、前記ページのそれぞれの対応する物理アドレスを保持する第２の配列を含む、上記（３）に記載の方法。
（５）前記第２の配列の内容が昇順の物理アドレスになるように、前記２つの配列の内容をソートするステップをさらに含む、上記（１）に記載の方法。
（６）前記ソートするステップは、前記第１の配列および前記第２の配列のそれぞれの要素の間に１：１の関係を維持する、上記（５）に記載の方法。
（７）連続物理メモリ・アドレスを形成する前記第２の配列の要素にマーク付けするステップをさらに含む、上記（１）に記載の方法。
（８）前記仮想メモリの一部のみが割り振られる、上記（１）に記載の方法。
（９）複数の仮想メモリ部分が割り振られる、上記（１）に記載の方法。
（１０）少なくとも１つのページを前記連続物理メモリのプールに割り当てていない、前記仮想メモリの割り振られた部分のいずれか１つを解放するステップをさらに含む、
上記（８）に記載の方法。
（１１）物理的に連続したメモリ・アドレスを提供するためのコンピュータ・ソフトウェアであって、媒体上に記録され、前記コンピュータ・ソフトウェアを解釈することが可能なコンピュータ・システムによって実行されることが可能であり、
　１つまたは複数の別個の仮想ページを含む、仮想メモリ・アドレス空間の少なくとも一部を割り振るためのコード手段と、
　前記少なくとも一部の前記ページのそれぞれについて、物理メモリ・アドレスを取得するためのコード手段と、
　前記ページのうちどれが、連続した物理メモリ・アドレスを有するかを判断するためのコード手段と、
　前記判断した仮想メモリ・アドレスを、その後に使用するために連続物理メモリのプールに割り当てるためのコード手段とを含むコンピュータ・ソフトウェア。
（１２）物理的に連続したメモリ・アドレスを提供するためのコンピュータ・システムであって、
　１つまたは複数の別個の仮想ページを含む、仮想メモリ・アドレス空間の少なくとも一部を割り振るための手段と、
　前記少なくとも一部の前記ページのそれぞれについて、物理メモリ・アドレスを取得するための手段と、
　前記ページのうちどれが、連続した物理メモリ・アドレスを有するかを判断するための手段と、
　前記判断した仮想メモリ・アドレスを、その後に使用するために連続物理メモリのプールに割り当てるための手段とを含む、コンピュータ・ソフトウェアを実行するコンピュータ・システム。
【図面の簡単な説明】
【００５２】
【図１】仮想メモリ・チャンクが１つだけ含まれるように、物理的に連続したメモリを割り振るための第１のアルゴリズムの流れ図である。
【図２】図１の第１のアルゴリズムに従って物理的に連続したメモリを割り振る際に生じるプロセスの概略図である。
【図３】図１の第１のアルゴリズムに従って物理的に連続したメモリを割り振る際に生じるプロセスの概略図である。
【図４】いくつかの仮想メモリ・チャンクが含まれるように、物理的に連続したメモリを割り振るための第２のアルゴリズムの流れ図である。
【図５】図４の第２のアルゴリズムに従って物理的に連続したメモリを割り振る際に生じるプロセスの概略図である。
【図６】図４の第２のアルゴリズムに従って物理的に連続したメモリを割り振る際に生じるプロセスの概略図である。
【図７】図１および６を参照して説明したアルゴリズムを実装するために使用できる、擬似コード・フラグメントを示す図である。
【図８】図１および６を参照して説明したアルゴリズムを実装するために使用できる、擬似コード・フラグメントを示す図である。
【図９】図１および６を参照して説明したアルゴリズムを実装するために使用できる、擬似コード・フラグメントを示す図である。
【図１０】図１および６を参照して説明したアルゴリズムを実装するために使用できる、擬似コード・フラグメントを示す図である。
【図１１】図１〜１０を参照して説明した技術が実行される、コンピュータ・システムの概略図である。
【符号の説明】
【００５３】
　２１０　単一チャンク
　２２０　仮想メモリ・ページ
　２３０　物理メモリ・ページ
　５１０　チャンク
　５２０　仮想メモリ・ページ
　５３０　物理メモリ・ページ
　６４０　チャンク
　１１００　コンピュータ・システム
　１１１０　入力装置、キーボード
　１１１５　入力装置、マウス
　１１２０　コンピュータ
　１１３０　バス
　１１４０　プロセッサ
　１１４５　ビデオ・インタフェース
　１１５０　メモリ・モジュール
　１１５５　記憶装置
　１１６０　入出力（Ｉ／Ｏ）インタフェース
　１１６５　入出力（Ｉ／Ｏ）インタフェース
　１１８０　ネットワーク
　１１８５　通信チャネル
　１１９０　ビデオ・ディスプレイ
【図１】
2004127291.tif 000003
【図２】
2004127291.tif 000004
【図３】
2004127291.tif 000005
【図４】
2004127291.tif 000006
【図５】
2004127291.tif 000007
【図６】
2004127291.tif 000008
【図７】
2004127291.tif 000009
【図８】
2004127291.tif 000010
【図９】
2004127291.tif 000011
【図１０】
2004127291.tif 000012
【図１１】
2004127291.tif 000013