(57)【特許請求の範囲】
【請求項１】
メモリ割り当て要求を受信するステップであって、前記要求は、保存対象のデータ量を示している、前記受信するステップと、
前記保存対象のデータ量は非標準の量であると判断するステップと、
前記保存対象のデータの非標準のデータ量の整数倍の数に基づいた未使用のメモリ・アドレスを探し出すステップと、
前記未使用のメモリ・アドレスを利用して前記データを保存するステップを含み、
前記探し出すステップは、メモリ・アドレスのプールから未使用のメモリ・アドレスを探し出すステップをさらに含み、前記メモリ・アドレスのプールは、セグメントの前記整数倍の数のアドレスを含み、前記セグメントの数の２倍数であるアドレスは含まない、
方法。
【請求項２】
標準割り当ては、メモリ空間の１６バイト割り当てであって、非標準割り当ては、８バイト、４バイト、２バイトまたは１バイト割り当てのうちの１つである、請求項１に記載の方法。
【請求項３】
命令の処理に基づいて、データを保存する連続したメモリの量を算出するステップと、
要求を使って前記データを保存するメモリ・アドレスを要求するステップであって、前記要求は、要求される連続したメモリの量のインジケータを含む、前記要求するステップと、
前記連続したメモリの量の整数倍の数であるメモリ・アドレスを受信するステップと、
前記メモリ・アドレスに前記データを保存するステップと、
探し出すステップをさらに含み、
前記探し出すステップが、メモリ・アドレスのプールから未使用のメモリ・アドレスを探し出すステップをさらに含み、前記メモリ・アドレスのプールは、前記セグメントの前記整数倍の数のアドレスを含み、前記セグメントの数の２倍数であるアドレスは含まない、
方法。
【請求項４】
前記データが標準サイズであるかどうかを判断するステップと、前記データが標準サイズである場合には標準割り当てを提供するステップとをさらに含み、任意的に、標準割り当ては、メモリ空間の１６バイト割り当てであって、非標準割り当ては、８バイト、４バイト、２バイト、または１バイト割り当てのうちの１つである、請求項３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、マルチプロセッサ・コンピュータの分野に関し、特に、プロセッサに対するメモリ割り当てを管理する機構に関する。
【背景技術】
【０００２】
一般的なマルチユニットの並列プロセッサ構成の１つとして、単一命令ストリーム、複数データストリーム（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ，ｍｕｌｔｉｐｌｅ  ｄａｔａ  ｓｔｒｅａｍ）アーキテクチャがある。ＳＩＭＤシステムでは、アクティブな処理装置全てに対し同一の命令が提供される。各処理装置は、各自の一連のレジスタに加え、その処理装置が固有のデータを受信する何らかの手段を有することができる。最近のマルチプロセッサ・チップには、「相乗演算処理要素（ＳＰＥ：ｓｙｎｅｒｇｉｓｔｉｃ  ｐｒｏｃｅｓｓｉｎｇ  ｅｌｅｍｅｎｔ）」と称されることもある多数の小型処理装置（ＰＵ：ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）を組み込むことができ、一般に各ＳＰＥは、単純化された一連の命令を利用する縮小命令セット・コンピュータである。ＳＰＥでは、メモリ割り当てが大幅に縮小されている場合がある。マルチプロセッサ構成では、各プロセッサが、わずか２５６Ｋのメモリなど比較的小さいメモリ割り当てを有する可能性がある。
【０００３】
処理装置が命令を処理し結果を出すと、次にこの結果を上記の比較的小さいメモリ空間へ保存しなければならない。このメモリは、通常、テキスト、データ、ならびにスタックおよびヒープ動作に利用される。ヒープは、動的に割り当てられた変数の収集、すなわち、存続期間が現行のルーチンの実行と関係のないストレージの割り当てに使用される領域であって、頻繁に使用される命令を保持するようにシステム・ソフトウェアおよびシステム拡張機能によって割り当てられた領域とすることができる。スタックは、後入れ後出しベースでデータを使用するデータ構造とすることができる。
【０００４】
大型コンピュータにおけるメモリ割り当てハードウェアおよびソフトウェアは、非常に複雑である。一方、小さい処理装置およびメモリ・システムを利用している場合には、そのようなオーバーヘッドのための空間がないため、高度なメモリ割り当てアリゴリズムは利用することができない。その上、そのように空間が小さいために、メモリまたはメモリ割り当ての効率的な利用に向けてよりいっそう高度な要件が生じる。
【０００５】
動作中、ＰＵなどの要求側がデータの保存またはメモリの利用を必要とするとき、要求側（すなわちＰＵ）は、特定量のメモリを要求することができ、被要求側すなわちアロケータは、その要求を処理しアドレスまたはアドレスのブロックを要求側へ返すことができる。被要求側は、ＰＵとすることもできるし、さらには専用のハードウエアでなくてもよく、同一のハードウェア（すなわち、同一の処理装置）上で動作するソフトウェアとすることもできる。アロケータは、利用可能なまたは「解放された」メモリ領域を特定することができ、そうしたアドレスを要求側へ返すことができる。その後要求側は、データをメモリへ送信し、アロケータによって割り当てられたアドレスへデータを保存することができる。このことを通例、動的メモリ割り当てと称する。動的メモリ割り当てでは、メモリ領域は使用された後に解放され、アロケータが、メモリ位置の状態を追跡しメモリ内の空いた位置に基づいて処理装置へアドレスを返すことができる。静的メモリ割り当ての方が高速ではあるが、一定の制限があるために柔軟性に欠ける。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データ・アラインメントおよびメモリ割り当ては、一般に、コンピュータ・メモリにてデータが配置されアクセスされる手法である。データ・アラインメントは、基本的なことでありながら、なお現代の全てのコンピュータにとって難しい問題である。別々のコンピュータ言語では、データ・ストレージ割り当ておよびデータ・アラインメントが大きく異なるやり方で扱われており、実装によっては、かなりのオーバーヘッドを有する非常に複雑なものもある。大抵の場合、メモリ・システムは、１６バイト・ベースで動作する（言い換えれば、データを保存および抽出する）か、あるいは１６バイト・ベースで動作するように最適化される。このことは通常、メモリ・バスのサイズ、レジスタ・サイズなどに基づくものである。１６バイトより小さいデータ・セグメントの処理は、アロケータにとって重大な問題をもたらす可能性がある。例えば、わずか４バイトの保存が必要な場合にも、システムは、１６バイトが利用可能な領域へたったの４バイトを書き込むことになり得る。こういうことが行われ、後から当該の４バイトが抽出されるときには、データ構造体アラインメントによってさらなる非効率が生じることもある。
【０００７】
使用のためにアロケーションを返すとき、メモリ・アロケータはしばしば、内部使用に向けて、割り当てられたメモリの最前部または構造体のほかのどこかにある空間をいくらか使用する。これを多くの場合「ヘッダ」と称する。ヘッダは、通常、割り当てのサイズなどの情報を含んでいる。このヘッダは、メモリ・アロケータによって内部で使用されるだけなので、「オーバーヘッド」とみなされ、割り当てることのできる使用可能な空きメモリを減らすものである。
【課題を解決するための手段】
【０００８】
上記に示した諸問題は、メモリを管理する方法および機構によって大部分対処される。一実施形態では、方法が、特定サイズの連続したメモリ容量を求める要求を受信するステップと、その要求に応じるのに十分な大きさの空きメモリ領域を探し出すステップと、その空きメモリへのポインタまたは要求のサイズに関連したアドレスを返すステップと、を含むことができる。アドレスは、セグメントのサイズの倍数とすることができる。システムは、要求を引き起こしたデータをそのメモリ・アドレスに保存することができる。
【０００９】
別の方法の実施形態では、システムが、保存対象のデータ量を示しているメモリ割り当て要求を受信し、保存対象のデータ量が非標準の量であるかどうかを判断し、その量が非標準の量であれば、保存対象のデータ量の倍数に基づいた未使用のメモリ・アドレスを探し出すことができる。システムが１６バイト・アライメントをベースに設定されていれば、８バイト、４バイト、２バイトおよび１バイトは、非標準割り当てとなる。同様の非標準割り当てを、１２８、６４、３２、８および４バイトのシステムに適用することもできる。探し出すステップには、さらに、メモリ・アドレスのプールから未使用のメモリ・アドレスを探し出すステップを含めることができ、アドレスのプールには、保存対象のデータ量の整数倍数は含まれるが、保存対象のデータ量の２倍数の倍数であるアドレスは含まれない。
【００１０】
一実施形態では、処理装置のグループ内のプロセッサ装置に対しメモリを割り当てる方法が開示される。本方法は、メモリ割り当て要求を受信するステップを含むことができ、この要求により、命令の実行を完了するのに必要な連続したメモリの量を示すことができる。本方法は、インジケータすなわち量が、非標準割り当てを示しているかどうかを判断し、インジケータが非標準割り当てであれば、その量の倍数に基づいた未使用のメモリ・アドレスを割り当てることができる。本方法はさらに、メモリ・アドレスのプールから未使用のメモリ・アドレスを探し出すステップを含むことができる。アドレスのプールには、要求された量の整数倍数は含まれるが、その量の２倍数のアドレスは含まれておらず、それによりアドレスを利用して割り当てのサイズを算出することができる。
【００１１】
別の実施形態では、プロセッサ装置に対しメモリを割り当てる方法が開示される。本方法は、メモリに保存されるセグメントのサイズを算出するステップと、セグメントを保存するメモリ・アドレスを要求するステップと、セグメントのサイズの倍数であるメモリ・アドレスを受信するステップと、倍数に相当しているメモリ・アドレスにセグメントを保存するステップと、を含むことができる。従って、本方法は、保存対象のデータ量に基づいたアドレス境界にバイトを位置合わせすることができる。このような機構により、固定長アロケータが、異なるクロックの間に同一の固定長割り当ての中へバイトを保存することができるようになり、それにより標準的な固定長アロケータによって保存され得るデータ量が圧縮される。
【００１２】
さらに別の実施形態では、メモリ割り当てシステムが開示される。本システムは、所定の割り当てサイズを有するメモリと、メモリに接続されて、所定の割り当てサイズよりもバイト数の小さいメモリ割り当ての要求を提供するプロセッサと、メモリ・アロケータと、を含むことができる。メモリ割り当て要求に応えて、メモリ・アロケータなどのハードウェアによって実行される命令により、利用可能なメモリ位置の少なくとも１つのメモリ・アドレスを提供することができる。
【００１３】
上記の少なくとも１つのメモリ・アドレスは、所定の最小割り当てサイズよりも小さいが、上記の要求を満たすには十分な大きさの割り当てを与えることができるものである。別の実施形態では、本システムには、上記のメモリ位置に対応するメモリ位置へ結果を送信する送信機を含めることができる。本システムにはさらに、メモリ割り当てに関係のあるデータを符号化するエンコーダを含めることができる。加えて本システムは、所定の割り当てサイズが部分的に埋められるのを追跡するトラッカと、保存対象のバイト・サイズの関数であるアドレスを探し出すことのできる多機能ロケータ・モジュールと、を含むことができる。
【図面の簡単な説明】
【００１４】
【図１】処理システムの実施形態を示す図である。
【図２】メモリ割り当てシステムのブロック図である。
【図３】メモリ割り当てシステムのフロー図である。
【発明を実施するための形態】
【００１５】
以下は、添付の図面に示された、本開示の実施形態の詳細な説明である。実施形態は、発明を明確に伝える程度に非常に詳しいものとなっている。しかし、どんなに詳細に提示されていても、実施形態について予想される変形例を排除することを意図するものではなく、請求項により定義される本開示の技術範囲に含まれる全ての変形例、均等物および代替物を対象に含むものである。以下、個別の実施形態について、特定の回路または論理構成に関連して記載することになるが、当業者には当然のことながら、本開示の実施形態は、他の類似する構成でも有利に実現することができる。
【００１６】
上述のように、多重処理装置環境の処理装置は、わずか２５６Ｋなど、小さいメモリ割り当てを有することがある。この限られたメモリは、通例、テキスト、データ、ならびにスタックおよびヒープ動作に利用される。このようにメモリ空間が限られており、さらに小さいデータ・セグメントの保存が要求されることはまれなことから、高度なメモリ割り当てアルゴリズムを使用することは実際的ではない。当然のことながら、そのようなアルゴリズム用の最小コードは非常に大きく複雑であるので、そうしたコードを保存および実行することの経済的側面が、上述のようなシステムが提供する効率的なメモリ割り当てによって得られるどんな節約をも超過してしまう可能性がある。マルチプロセッサ・システムは、通常、複数の小型処理装置を有し、各処理装置は縮小命令セットを備えている。利用可能なマルチプロセッサ製品の多くは、上述のような装置のメモリ割り当てが１６バイトの倍数となるようにしており、故に、１６バイト・アラインメントが、唯一のサポートされている手法となることが多い。この一次元モードで動作する上述のような単純化されたメモリ割り当てシステムは経済的なものであるが、保存対象のセグメントが１６バイトよりも小さい場合に別のアラインメントを利用するようにすれば、大幅に改善することができる。
【００１７】
上記の１６バイト・アロケータは、通常、何らかの形のヘッダを保存する。このヘッダがさらに帯域幅を減らし相当な量のメモリを消費する可能性があり、こうしたシステムを完璧とは言えないものにしている。多くの現行システムでは、４バイト・ヘッダが用いられる。ヘッダは、必要な割り当てを追跡するのに利用することができる。この機構では、１バイトのストレージが必要な場合にその１バイトと一緒に４バイトのヘッダが保存されることになるため、処理装置によって小さい（本例では１６よりも小さい）バイト数が要求される場合、結果的に非効率な無駄が生じることになる。このような非効率な動作は、セル・タイプのプロセッサまたは処理装置ばかりでなく、大多数の組み込みプロセッサにおいて生じている。
【００１８】
ここで図面を見ると、図１は、メモリ・アロケータを備えたマルチプロセッサ処理システム１００をブロック図の形式で示している。システム１００は、数例を挙げると、パーソナル・コンピュータ・システム、高性能ビデオ・システム、またはサーバなどとすることができる。開示のシステム１００は、メモリ・アロケータ１２８を利用して命令を保存し、さらにそのようなデータを、保存対象のデータのサイズあるいは量に基づいて位置合わせすることができる。一般にシステム１００は、本明細書にて開示する効率的なメモリ割り当て機構を実装可能な多数のシステムのうちの１つである。
【００１９】
システム１００は、オペレーティング・システム上で動作するソフトウェアのスイート全体を実行することができ、さらにシステム１００は、ロードされているソフトウェア・アプリケーション（単数または複数）に従い、ＭＣＣ１１０を用いて、多数の処理タスクを実施することができる。本明細書では単一システムを記載するが、ワークステーションまたはメインフレーム、およびその他の構成、オペレーティング・システムまたはコンピューティング環境も、本開示の範囲から離れるものではないと考えられる。
【００２０】
ＭＣＣ１１０はさらに、独自のデータ・プロセッサとしてもよい相乗プロセッサ装置と、メモリ・アロケータ１２８と、ローカル・メモリ１１８、ランダム・アクセス・メモリ１１２、読み取り専用メモリ１１４などのメモリと、を含むことができる。システム１００は、さらに、入力出力アダプタ１２２と、ユーザ・インターフェース・アダプタ（ＵＩＡ：ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ  ａｄａｐｔｅｒ）１２０と、通信インターフェース・アダプタ１２４と、マルチメディア・コントローラ１２６とを含むことができる。
【００２１】
入力出力（Ｉ／Ｏ：ｉｎｐｕｔ  ｏｕｔｐｕｔ）アダプタ１２２は、ディスク・ドライブ１４７、プリンタ１４５、リムーバブル・ストレージ・デバイス１４６のほか、他の標準および固有のＩ／Ｏデバイスに接続されて、これらを制御することができる。ＵＩＡ１２０は、特化されたＩ／Ｏアダプタであるとみなすことができる。図に示すようにＵＩＡ１２０は、マウス１４０およびキーボード１４１に接続されている。加えて、ＵＩＡ１２０は、タッチ・スクリーン・デバイス（図示せず）など、各種ユーザ制御を提供することの可能なその他のデバイスに接続されていてもよい。
【００２２】
通信インターフェース・アダプタ１２４は、ローカルまたはワイド・エリアのネットワークに対するブリッジとなるブリッジ１５０と、モデム１５１とに接続させることができる。システム・バス１０２を様々な通信デバイスへ接続することによって、情報への外部アクセスを得ることができる。マルチメディア・コントローラ１２６は、一般に、モニタ１６０上へ画像を表示することのできるビデオ・グラフィックス・コントローラを含むほか、外部コンポーネント（図示せず）に対して音声を提供する。一般に、本明細書に記載のメモリ管理機構は、メモリ・アロケータ１２８によって実行することができる。メモリ・アロケータ１２８は、実行された命令の結果およびデータを保存するためにメモリを要求する処理装置に対してメモリ位置を割り当てることができる。
【００２３】
メモリ・アロケータ１２８は、従来のアロケータよりも効率よく動作することが可能であり、ローカル・メモリ１１８におけるデータ・ストレージの集積度を高めることができる。メモリ・アロケータ１２８は、ＭＣＣ１１０と統合されること、ローカル・メモリ１１８と統合されること、またはＭＣＣ１１０と同じ集積回路上の別個のモジュールとして実装されること、あるいはその全てが可能であると考えられる。さらに、メモリ・アロケータは、ＭＣＣ１１０に含まれているアルゴリズムなど、処理装置によって動作させられるアルゴリズムとすることも可能と考えられる。
【００２４】
メモリ位置を効率的に管理および割り当てし、ハードウェアおよび実行に関して低オーバーヘッドでデータを保存する機構が開示される。一実施形態では、ＭＣＣ１１０からローカル・メモリ１１８へ、およびローカル・メモリ１１８からＭＣＣ１１０へデータを移動させるのに、「ヘッダなしの」通信、あるいは縮小されたヘッダでの通信を利用することができる。保存する必要のある何らかのデータをＭＣＣ１１０が持っているとき、ＭＣＣ１１０の部分によって、そのようなデータに対するメモリ・アドレスを要求することができる。このＭＣＣ１１０からの要求には、ＭＣＣ１１０がローカル・メモリ１１８に保存したいと望むバイトまたは数を含めることができる。メモリ・アロケータ１２８は、メモリ・アドレスを返すことができるのであるが、ここでアロケータ１２８によって返される実際のアドレスまたは「数値」は保存対象のバイト数に基づいており、そのため保存データは、一斉に保存されるべきバイト数に基づいて位置合わせされることになる。
【００２５】
図２を参照すると、処理モジュール２００の簡略化された構成のブロック図が開示されている。モジュール２００は、メモリを備えた単一処理装置２０２と、専用のアロケータ２０４とを含むことができる。アロケータは、乗算器２１０と、エンコーダ２１２と、トラッカ２１４とを含むことができる。一実施形態では、マルチプロセッサ環境の処理装置２０２が、システム・メモリ２２０などのメモリにある命令を要求して受け入れることができ、命令を処理した後、そのような処理の結果をローカル・メモリ２０６へ保存することができる。故に、動作において処理装置２０２は、メモリ割り当てが必要であることを判断し、アロケータ２０４へ要求を送信することができる。要求には、処理装置が保存する必要のあるバイト数を含めることができる。アロケータ２０４は、追跡モジュール２１４を利用して、保存対象のバイト数に基づいたアラインメントを有する利用可能なメモリ位置がないかを調べる。メモリ２０６にて適切な位置が見つかったら、アロケータ２０４は、このメモリ・アドレスを処理装置２０２へ返信することができる。
【００２６】
メモリ・アロケータ２０４は、割り当て要求の中にあるバイト数を取り出し、乗算器モジュール２１０を用いてこの数に乗数を掛けることによって、データ・アラインメントを行うことができる。その結果得られるアドレスは、保存対象のバイト数に基づいたアラインメントを提供することになる。アロケータ２０４が提供するこのアドレスによって、保存対象のバイト数に基づいた「自然な」境界またはアラインメントをアドレスに備えることができると言える。こうした保存対象の数または関連バイトに基づいた特定の位置にデータが保存される際には自然境界がもたらされ、そのため後のクロック・サイクルにて、必要に応じて適切な処理装置を用いてデータを効率よく抽出することおよび位置合わせすることができるようになる。
【００２７】
以下の考察は、例示を目的として、１６バイトのメモリ境界を用いたシステムに基づいて提示される。１６バイトという基準を用いるのは、この構成が、現行の多数のマルチプロセッサ・システムにおいて一般に利用されているからである。一方、下記の開示は、１つの例示とみなされるべきものであって、本明細書に記載されるいずれかの特徴を限定するものとは決してみなされるべきではない。例えば下記の記載は、８、３２、６４および１２８バイトに位置合わせされたシステムに適用することも可能である。従来より、１６を超えるバイトを含んだデータ・セグメントは、１６バイト・アラインメントを利用することになっており、その場合先頭バイトの先頭ビットが、１６の倍数であるアドレスに保存される。しかし従来の構成は、１６バイトのごく一部であるデータ・セグメントをメモリにて位置合わせする必要がある場合には、極めて非効率なものとなり得る。
【００２８】
本開示によれば、処理装置が８乃至１５バイトを割り当てる必要がある場合には８バイトを利用して割り当てを位置合わせすることができ、処理装置が４乃至７バイトを保存する必要がある場合には４バイト・アラインメントを利用することができ、２および３バイトが保存対象である場合には２バイト・アラインメントを利用することができ、さらに、１バイトが保存対象である場合には１バイト・アラインメントを利用することができる。このアラインメント手順は、複数のバイトをより密集させてメモリに詰め込むことを可能にし、その上、低オーバーヘッドでそのようなアラインメントを提供することを可能にする。
【００２９】
コンピュータにおいてメモリ・アドレスはバイナリ形式で与えられている。多くの場合、アドレスが１６進（１６を基数とする）形式で表されていると、バイナリ（２を基数とする）アドレスが理解しやすくなる。なぜならば、２＊８＝１６であり、各１６進数によって８つのバイナリ数が表されるからである。一例では、２バイトの割り当てが必要なとき、アロケータ２０４は、保存対象のバイト数の倍数を有するかあるいは倍数で終わるメモリ・アドレスまたは「数値」を、おそらくは１６進数で返すことができる。故に、処理装置によって要求された割り当て対象のバイト数に整数（すなわち、１，２，３・・・・）を掛けたものを用いて、その割り当て用のアドレス位置の少なくとも下位ビットを生成することができる。例えば、処理装置が２バイトを要求する場合、アロケータ２０４によって回答される可能性のあるアドレスとして、「２」（２バイトを示す）掛ける５６、すなわち１１２が考えられ、これを１６進法にすると、１６進数の前には先行する０ｘを置いてそのアドレスが１６進形式であることを示すことが慣例化しているので、０ｘ７０となる。
【００３０】
この割り当て機構では、２バイトについての「自然な」アドレス境界が形成され、故に、動的なアドレス境界が保存対象のバイト数に基づいて提供されている。従来のシステムであれば、このような状況では、従来型のメモリ・アロケータによって画一的な境界（すなわち、１６バイトまたは３２バイトのいずれかの境界）が一貫して提供されることになるだろう。本開示によれば、メモリ・アドレスおよびアドレス境界を、処理装置２０２が保存したいと望むバイト数に基づいて処理装置２０２に対して提供することができる。
【００３１】
保存対象のバイト数に基づいて境界を置くことにより、様々に組み合わせた２、４、および８バイトの組み合わせで１６バイト・セグメントをポピュレートすることが可能になり、その結果、処理装置によって保存されるデータが、より小さいメモリ領域の中へ圧縮される。上述のように、本明細書にて考察され本開示の特徴を説明するのに用いられる１６バイト境界は、アドレス境界の単なる１つの事例／標準に過ぎず、上記の考察は、８バイト、３２バイト、６４バイト、および１２８バイト境界についても同様に良好に機能すると考えられる。
【００３２】
１つのクロック・サイクルで１６バイトが保存される場合、１６バイト・セグメントは均質であるとみなすことができ、１６バイトよりも小さい境界が用いられて２、４および８バイトの様々な組み合わせが１６バイト領域に保存される場合、１６バイトの領域は「非均質」になり得る。
【００３３】
さらに、この非均質な領域に保存されたバイトの各々は、関連のないものとすることができる。本開示によれば、メモリ・アロケータ２０４のトラッカ・モジュール２１４が、メモリ２０６にある非均質な１６バイト境界の各々を追跡すること、すなわちこれらにフラグを立てることができ、さらに、非均質な１６バイト・セグメント各々の内部におけるメモリ・アドレス位置の使用量について追跡することができる。そのため、処理装置２０２が非標準の「小さい」割り当てを必要とした場合、アロケータ２０４によってそのような位置を提供することが可能であり、処理装置２０２はこれらの位置を利用し、上述のような「非標準の」バイト・アラインメントを用いてメモリの空きを埋めることができる。
【００３４】
故に、トラッカ・モジュール２１４は、上記の特徴に従ってメモリ割り当てを追跡することが可能であり、構造化された複数の１６バイト境界の中にある利用可能で部分的に満たされた様々なセグメントを特定することができる。処理装置２０２が、小セグメント（標準すなわち提示の例では１６バイトよりも小さい、いずれかのセグメント）を保存する必要がある場合、アロケータ２０４は、本明細書に記載のバイト・サイズ倍数割り当てを用いることにより、所要の小さいセグメント容量を有するアドレスを提供することができる。
【００３５】
これにより、「半端なサイズの」バイトの複数の小さいグループを、標準のメモリ割り当てサイズ（すなわち、本明細書では１６バイト）内の詰め込まれた構成へ詰め込むことが可能になる。こうしたメモリ・セグメントは、メモリの非均質なセグメントとしてタグ付けすることあるいはフラグを立てることができ、保存対象のバイト数の倍数である「数値」を有する個別のアドレスは、容易に探し出すことが可能であり、上述のように従来とは異なった位置に置くことができる。
【００３６】
一例では、同一の１６バイトのメモリ割り当ての中に、２バイト・セグメントを２バイト・アラインメント（２で割り切れるアドレス）に基づいて保存し、続いて４バイトを４バイト・アラインメント（４で割り切れるアドレス）を用いて保存することができる。アロケータ２０４は、下位標準のあるいは「小さい」利用可能なこの４バイト・セグメントを探し出し、２バイトの保存に利用したものと同じ１６バイト割り当てにある４の倍数であるアドレスを、返すことができる。その後トラッカ２１４によって、この１６バイト・セグメントにてまだあと１０バイトが利用可能であるということを記録することができ、１０バイトは、２バイトおよび４バイトのセグメントで分け合うことが可能になる。
【００３７】
上記の例のハードウェア（すなわち、２０２、２０４、２０６および２０８）が、おそらくは１６バイトのアドレス・バスのために、１６バイトのシステムとして効率的に動作するように設計されていると仮定した場合、上述のような特徴によって、関連のないデータの多様なセグメントを同じ１６バイトのセグメント／割り当ての中へ詰め込むことができる。従ってシステム２００は、１６バイトのフィールド全部を消費してしまう単一の小セグメント・データ（１、２、４または８バイト）を扱う代わりに、多様な小さい２、４および８バイトのセグメントを１６バイトのフィールド／割り当ての中へ詰め込むことができる。
【００３８】
一実施形態によれば、小さい割り当てでは、伝送に際してヘッダを利用しなくてもよく、保存されるデータと一緒にヘッダを保存する必要もなくなると考えられる。特に、１バイトまたは２バイトなどといった小セグメントが保存対象である場合、ヘッダ機構なしで済ませることによって、伝送帯域幅などのオーバーヘッドならびにメモリ使用量の大幅な節約を実現することができる。このように、ヘッダのサイズを縮小することあるいはヘッダを省くことができ、さらに、エンコーダ２１２によって、アドレスの下位ビットのビットを符号化することができる。それに応じて、アロケータ２０４が、データの小セグメントを「自然な」境界に位置合わせすることができ、こうした自然な境界は、１６および３２ビットなどといった大きい割り当てアラインメントの倍数ではない。エンコーダ２１２は、どこに境界が位置付けられたかを符号化することができる。
【００３９】
ヘッダは、通常、割り当てのサイズの表示を提供する。ヘッダが、割り当てのすぐ前ではないどこかに（近傍のアドレスにて）保存された場合、通常、その割り当てのアドレスをも同様にヘッダが有することとなり、このためオーバーヘッドはさらに増加する。ヘッダは、どのスレッドが割り当てを要求したかに関するデータおよびその他の「ハウスキーピング」データなど他のデータを有することもできるが、一実施形態では、開示のシステムのオーバーヘッドを減らすべく、アドレスおよびサイズしか保存しないようにすることができる。
【００４０】
先に述べたように、所望の連続したメモリの量またはサイズを示すメモリ割り当て要求を受信した後で、アロケータ２０４は、その数が非標準割り当てを示しているかどうかを判断することができる。例えば、１６バイト環境であれば、８、４、２および１バイトは、非標準割り当てということになるだろう。その数が、処理装置２０２によって非標準割り当てが行われているということを示している場合、アロケータ２０４によって、保存対象のバイト数の倍数に基づいた未使用のメモリ・アドレスを探し出すことができると考えられる。
【００４１】
一実施形態では、アロケータが、メモリ・アドレスのプールから未使用のメモリ・アドレスを探し出すことができ、アドレスのプールには、バイナリ・セグメントの整数倍数が含まれており、バイナリ・セグメントの数の２倍数であるアドレスは含まれていない。このようにすると、割り当てられたフィールドに何バイト保存されているかが常にアドレスによって決まることになり、アドレス自体を利用して割り当てのサイズを算出することができるため、ヘッダ情報は何も必要とされない。
【００４２】
別の説明としては、アドレス・プールの一実施形態（プールは、特定の非標準のバイト・サイズに向けたアドレスの収集であって、この収集には、その特定の非標準のバイト・サイズの倍数は含まれるが、それより大きい非標準割り当ての倍数、および標準割り当てサイズは含まれない）では、ヘッダ情報は「冗長」である。「プール」の１つの例では、保存されているデータが、８の倍数であるが１６の倍数ではないアドレスを有している場合、処理装置（単数または複数）２０２は、そのアドレスから、割り当てのサイズは最長で８バイト長であろうと判断することができる。例えば、０ｘ２０８は、８バイト割り当てには当てはまるが、１６バイト割り当てには当てはまらないことになる。同様に、アドレスが、４の倍数ではあるが８または１６の倍数ではない場合、処理装置２０２は、そのアドレスによって、割り当ては最長で４バイト長であろうと判断することができるだろう。当然分かるように、アドレス０ｘ２０４は４バイトに当てはまり、このアドレスも４の整数倍数であるが１６の倍数ではない。一実施形態では、アロケータ２０４は、１６に整数を掛けさらに８を足して、８バイト割り当てを得ることができる。アロケータ２０４は、同様にこの割り当てを、単に８を足すことによって、あるいはその値と標準すなわち１６バイトの倍数との「論理和をとる」ことによって、得ることができる。
【００４３】
故に、８バイト割り当ての場合、１６＿バイト＿値｜＝８というのが１つの表現であり、あるいは１６＿バイト＿値＋＝８が別の使用可能な割り当てであるとすればよい。従来のシステムについて上述したように、アロケータが要求されたサイズとは無関係に１６バイト・ブロックの割り当てを選択した場合、そのとき初めてアロケータは、１６バイトに位置合わせされた当初のアドレスにするように引き算をして、１６バイト全体を加えることができる。
【００４４】
割り当てはアドレスのみによって算出することができるため、処理装置（単数または複数）２０２は、ヘッダが割り当てのサイズのみを保存するシステムにて、ヘッダを必要とせずに割り当てのサイズを検知する。そのようなシステムでは、当然、割り当てのサイズに関する冗長なデータは不要であるということになるので、ヘッダを省くことができる。
【００４５】
別の実施形態では、８の倍数であるアドレス上に４バイト割り当てがもたらされるのを防いで、処理装置（単数または複数）２０２に対して付加的な解決を与えることができる。故に、８および１６の倍数であるアドレスを、４バイト割り当てに関して利用可能なリストから除外することができる。同様に、４、８および１６の倍数であるアドレスを、２バイト割り当てに利用可能なアドレスのリストから除外することもできる。従って、８バイトが割り当ての対象である場合、アロケータ２０４は、８の倍数であって１６の倍数ではないアドレス上に、存分に８バイト割り当てを行うことができる。この機構は、好適な手法ではあるものの絶対的ではないものとすることができる。例えば、４バイト割り当てが必要な場合に、アロケータ２０４が、４の倍数である割り当てを見つけることはできないが８の倍数である割り当てを見つけることができると仮定すると、アロケータ２０４は、要求されたものよりも大きい割り当てを返すことができる。それでもやはり、ヘッダなしで済ませることによって、「過剰な割り当て」のせいでともすれば無駄になる空間に対する埋め合わせをすることができる。
【００４６】
当然のことながら、開示の機構を利用して、命令およびデータの双方に関するメモリ割り当てを行うことが可能である。従ってコンパイルする際に、コードのラインと、コードがメモリにて消費することになるビットとの一対一のマッピングを実現するのに、何ら難しい要件はない。一方、コードの各ラインが単一のアセンブリ命令に対応し、各命令が３２ビット命令であるとすれば、命令は、ラインにつき４バイトに相当する。６ラインのコードであれば、３２バイトすなわち２５６ビットを要することになるだろう。この空間は、データそのものではなく、データを処理する命令を保存するのに利用されることになると考えられる。上述のように、メモリの限られているシステムでは、データを処理する命令を保存するのにメモリ空間を割り当て、残りの限られた空間をデータの保存のために残すことがある。
【００４７】
自然の境界（すなわち、保存対象のバイトの倍数）を利用することにより、通常はヘッダの中にあると考えられる情報を、アドレスあるいはアドレスの下位ビットに符号化することができる。さらに、エンコーダ２１２は、「ヘッダなしの」割り当てによって、小さい／非標準割り当てごとに４バイトのメモリ空間が確実に節約されるようにすることができる。ヘッダが省かれると、かなりのメモリ空間を節約することができ、このことは特に、各処理装置２０２に対して小さいメモリ空間のみが割り当てられる場合にあてはまる。ヘッダの「代わりにする」ために、データが境界情報を用いて保存されているインジケータなどの境界データまたは情報を、アドレス・ビットの下位に置くことができる。
【００４８】
メモリ割り当てプロセスの動作中に、アロケータ２０４が１６バイト割り当てを行った後で、保存対象のセグメントのサイズが８バイトより小さいかあるいは８バイトであった場合、命令またはデータを保存するために選択するアドレスは、８を乗じた整数「Ｎ」とすることができる。命令またはデータのサイズが８バイトよりも大きい場合は、アロケータ２０４は、従来の動作に従って、付与されたアドレスおよびサイズの入ったヘッダを送信することにより、空間を割り当てることができる。８の倍数であるアドレス位置が解放されたら、アロケータ２０４は、空き位置のリストへ、例えば１６の倍数であるアドレス＆０ｘＦＦＦＦＦＦＦ０として１６進数で、追加することができる。
【００４９】
アロケータが割り当てを追跡するべく情報にヘッダを付加する、従来の１６バイトに限られた割り当てシステムで利用される１６バイトに比べ、開示の機構は、割り当てごとに４バイトを節約することができる。一実施形態では、従来の固定された１６バイト・システムに対して付加的なコードを付け加えて、ヘッダを使用することなく、１６バイト割り当てをより小さい割り当てに分割することができる。一方、小さい命令用セグメントを処理することは標準ではなく、おそらくまれにしか起こらないので、こうした小さい命令用セグメントのために必要とされるコードは、特殊な処置を受け入れない可能性もある。そこでこのような小さい割り当てがまれである場合には、システムがこの分割コードを使用しないようにすることもできると考えられる。
【００５０】
例えば、１６バイト割り当ては、１バイト、２バイト、４バイト、および８バイトのセグメント（その場合、１＋２＋４＋８＝１５）にさらに分割することが可能と考えられ、この配置では、１６バイト割り当てのうちの１５が利用されることになる。
【数１】
0005489991.tif 000002
ここで示す例では、小さい命令またはデータ・セグメントを保存するのに必要なメモリの空間は、全体で１６バイトである。従来の１６バイト・システムであれば、割り当ての各々（１、２、４、および８バイト）が１６バイトずつ占めるため、４×１６＝６４、さらにヘッダ用に＋１６バイト（すなわち、４つのヘッダ各々に４バイトずつ）で８０に等しくなるので、８０バイトが割り当てられるだろう。当然分かるように、開示の機構は、メモリに６４バイトの節約をもたらす（すなわち、８０−１６＝６４）。
【００５１】
別の実施形態では、以下に示すように、２つの１バイト割り当て、２つの２バイト割り当て、および２つの４バイト割り当てを、１６バイト割り当ての中へ詰め込み、利用可能な１６バイトのうちの１４を利用するようにできると考えられる。
【数２】
0005489991.tif 000003
上記に示す例では、命令またはデータの小セグメントを保存するのに必要な空間すなわちメモリは１６バイトである。この場合、従来のシステムであれば、１２０バイト（６×（１６＋４））が割り当てられることになる。当然分かるように、上述した機構は、メモリに１０４バイトの節約（１２０−１６）をもたらすことになる。開示の機構は、上記の圧縮されたまたは「詰め込まれた」形態にて、コード・サイズと効率性とのトレードオフを与えることができ、このトレードオフは、メモリ資源の限られたセル・タイプ・プロセッサのような組み込みプロセッサに有用である。上述のように、ヘッダ形式の情報は、利用されるアドレスに符号化することができる。
【００５２】
図３を参照すると、メモリ資源を割り当てる方法のフロー図が開示されている。ブロック３０２で示すように、マルチコア・プラットフォームの処理装置が、命令を実行して結果をもたらすことができる。ブロック３０４で示すように、処理装置は、上記の結果を保存するのに、何バイトのメモリが必要とされているかを算出することができる。判定ブロック３０６にて、所要のバイト数について、標準のバイト割り当てあるいは標準のバイト割り当てに近いものであるかどうかを判断することができる。これは固有の標準とすることも所定の標準とすることもでき、一実施形態では、１６バイト標準とすることができる。
【００５３】
バイト割り当てが標準に合致する場合、所定の割り当てブロックに合致する場合、あるいは標準に近い場合には、ブロック３０８で示すように、標準の固定長の「ヘッダ付き」割り当てを行うことができ、ブロック３０９で示すように結果を保存し、プロセスを終了することができる。判定ブロック３０６にて、所要のバイト割り当てが標準あるいは所定の長さよりも短かった場合には、処理装置は、ブロック３１０で示すように、結果を保存するのに必要なバイト数の倍数である非標準割り当てを要求することができる。
【００５４】
２バイトが保存対象である場合、その２バイトは、２の倍数であるアドレスにて位置合わせすることができ、あるいはそのアドレスが、８の倍数である境界を有する可能性もある。４バイトが保存対象である場合、その４バイトは、４の倍数の境界を有しているアドレス位置に位置合わせすることができる。８バイトが保存対象である場合、その８バイトは、８の倍数である境界に位置合わせすることができ、さらに１６バイトは、１６の倍数であるアドレス境界に位置合わせすることができる。
【００５５】
ブロック３１２で示すように、アロケータが、所要の「倍数」を有する、解放されたアドレスを見つけることができる。上述のように、下位アドレスを選択してアラインメント構成または割り当てサイズあるいはその両方についての情報を符号化することができ、それによりヘッダをなくすことができる。ブロック３１４で示すように、処理装置は、結果を保存するのに非標準のアドレスを利用することができ、さらにブロック３１６で示すように、アラインメントに関する情報をアドレスの中に符号化することができる。その後、プロセスを終了することができる。
【００５６】
本開示の別の実施形態は、上記に記載した機構を実装するプログラム製品として実現することができる。プログラム製品のプログラム（単数または複数）は、実施形態の機能（本明細書に記載の方法など）を定義し、データまたは信号あるいはその両方を担持している様々な媒体に含めることができる。データまたは信号あるいはその両方を持担している代表的な媒体としては以下が挙げられるが、これらに限定されない：（ｉ）書き込み不可能なストレージ媒体（例えば、ＣＤ−ＲＯＭドライブにより読み取り可能なＣＤ−ＲＯＭディスクなど、コンピュータ内の読み取り専用メモリ・デバイス）上に恒久的に保存されている情報；（ｉｉ）書き込み可能なストレージ媒体（例えば、ディスケット・ドライブまたはハードディスク・ドライブ内のフレキシブル・ディスク）上に保存された変更可能な情報；および（ｉｉｉ）コンピュータまたは電話のネットワークを経由するなど、ワイヤレス通信を含む通信媒体によってコンピュータへ伝達される情報。後の方の実施形態は、具体的には、インターネットおよびその他のネットワークからダウンロードされる情報を含む。そのようなデータまたは信号あるいはその両方を担持している媒体は、本発明の機能を導くコンピュータ可読命令を保持している場合、本発明の実施形態に相当する。
【００５７】
一般に、本発明の実施形態を実現するように実行されるルーチンは、オペレーティング・システムの一部、あるいは個別のアプリケーション、コンポーネント、プログラム、モジュール、オブジェクトまたは命令のシーケンスとすればよい。本発明のコンピュータ・プログラムは、通常、コンピュータによって機械可読の形式に変換され、故に実行可能命令となる多数の命令を含む。
【００５８】
さらに、プログラムは、プログラムにローカルに常駐するかあるいはメモリ内またはストレージ・デバイス上にある、変数およびデータ構造体を含む。加えて、本明細書にて以下に記載の多様なプログラムは、本発明の個別の実施形態にてそれらのプログラムが実行される対象のアプリケーションに基づいて特定されてもよい。ただし当然のことながら、付随する特定のプログラム専門用語はいずれも、単に便宜上使用されているものに過ぎず、故に本発明は、そのような専門用語によって特定されるまたは含意されるあるいはその両方のいずれか特定のアプリケーションにおける使用にのみ限定されるべきではない。
【００５９】
本開示の利益を得る当業者には当然のことながら、本発明は、非同期インターフェースの挙動をモデル化する方法および機構を考慮している。詳細な説明および図面にて提示および記載された本発明の形態は、単なる例として捉えられるべきものであることが分かる。以下の請求項は、開示された例示的な実施形態の全ての変形例をも含むように広く解釈されるべきものである。
【００６０】
本発明およびその利点の一部をいくつかの実施形態に関して詳細に記載してきたが、当然のことながら、添付の請求項によって定義される本発明の精神および範囲から逸脱することなく、ここに多様な交換、代替および変更を施すことが可能である。本発明の或る実施形態によって複数の目的が達成されることはあり得るが、添付の請求項の範囲内にある各々の実施形態が各々の目的を達成することになるとは限らない。さらに、本明細書に記載のプロセス、機械、製造物、組成物、手段、方法およびステップの特定の実施形態に本出願の範囲を限定することは意図されていない。
【００６１】
当業者であれば本発明の開示からすぐに分かることであるが、本明細書に記載された対応する実施形態と実質的に同じ機能を果たすかまたは実質的に同じ結果を実現する現在既存のあるいは今後開発されるプロセス、機械、製造物、組成物、手段、方法またはステップは、本発明に従って利用することができる。従って添付の請求項には、そのようなプロセス、機械、製造物、組成物、手段、方法またはステップをも範囲内に含めることが意図されている。
【図１】
0005489991.tif 000004
【図２】
0005489991.tif 000005
【図３】
0005489991.tif 000006