(57)【要約】  組込みまたは無線デバイスにおける改善されたメモリ割当てサービスのためのシステムおよび方法。メモリは、コンテナメモリアイテムと参照メモリアイテムの組合せを使用して割り当てられる。
2011521313.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
前記プロセッサ上で実行できるメモリ管理サービスとを備え、
前記メモリ管理サービスは、
第１のメモリアイテムを生成するように構成可能であり、前記第１のメモリアイテムのそれぞれがヘッダおよびペイロードを備え、前記ペイロードは複数の個別に割当て可能なメモリチャンクを格納するように構成可能であり、前記第１のメモリアイテムの前記ヘッダは前記ペイロードの中の割当て可能なスペースを参照し、
第２のメモリアイテムを生成するように構成可能であり、前記第２のメモリアイテムのそれぞれが、前記第１のメモリアイテムの前記ペイロードの中の１つまたは複数のメモリチャンクを参照するヘッダを備え、
メモリ割当て要求に応答して第１または第２のメモリアイテムの前記ヘッダからの参照を返すように構成可能である、メモリ管理システム。
【請求項２】
前記第１のメモリアイテムの前記ヘッダが、前記第１のメモリアイテムへの参照のカウントを保持する、請求項１に記載のメモリ管理システム。
【請求項３】
前記メモリ管理サービスがさらに、複数のサブシステムのそれぞれに別個の第１のメモリアイテムを生成するように構成可能である、請求項１に記載のメモリ管理システム。
【請求項４】
前記メモリ割当て要求が、要求されるメモリサイズを備える、請求項１に記載のメモリ管理システム。
【請求項５】
前記メモリ管理サービスがさらに、特定の第１のメモリアイテムのペイロードの中の割り当てられたメモリのサイズと要求されたメモリのサイズの和を求め、前記和をしきい値と比較するように構成可能である、請求項４に記載のメモリ管理システム。
【請求項６】
前記メモリ管理サービスがさらに、前記和が前記しきい値より小さいとき、特定の第２のメモリアイテムの前記ヘッダからの参照を生成して返すように構成可能である、請求項５に記載のメモリ管理システム。
【請求項７】
前記メモリ管理サービスがさらに、前記和が前記しきい値より大きいとき、前記特定の第１のメモリアイテムの前記ヘッダからの参照を返すように構成可能である、請求項６に記載のメモリ管理システム。
【請求項８】
前記メモリ管理サービスがさらに、特定の第１のメモリアイテムのペイロードの中の割り当てられたメモリのサイズと前記要求されたメモリのサイズの和を求め、前記和を前記特定の第１のメモリアイテムの前記ペイロードのサイズと比較し、前記要求されたメモリのサイズをしきい値と比較するように構成可能である、請求項４に記載のメモリ管理システム。
【請求項９】
前記メモリ管理サービスがさらに、別の特定の第１のメモリアイテムを生成し、前記別の特定の第１のメモリアイテムのペイロードを参照している特定の第２のメモリアイテムを生成し、前記和が前記特定の第１のメモリアイテムの前記ペイロードの前記サイズより大きく、前記要求されたメモリのサイズが前記しきい値より小さいとき、前記特定の第２のメモリアイテムの前記ヘッダからの参照を返すように構成可能である、請求項８に記載のメモリ管理システム。
【請求項１０】
前記メモリ管理サービスがさらに、別の特定の第１のメモリアイテムを生成し、前記和が前記特定の第１のメモリアイテムの前記ペイロードの前記サイズより大きく、前記要求されたメモリのサイズが前記しきい値より大きいとき、前記別の特定の第１のメモリアイテムの前記ヘッダからの参照を返すように構成可能である、請求項８に記載のメモリ管理システム。
【請求項１１】
前記しきい値が、前記特定の第１のメモリアイテムの中の割り当てられたメモリの前記サイズである、請求項８に記載のメモリ管理システム。
【請求項１２】
前記メモリ管理サービスがさらに、前記要求されたメモリのサイズをキャッシュ行の境界に合わせるために前記要求されたメモリのサイズを増大させるように構成可能である、請求項４に記載のメモリ管理システム。
【請求項１３】
メモリ管理の方法であって、
それぞれが第１のヘッダおよびペイロードを備える第１のメモリアイテムを割り当てることであって、前記ペイロードが個別に割当て可能なメモリのチャンクを備え、前記第１のヘッダが前記ペイロードの中の割り当てられていないメモリへの参照を備える、第１のメモリアイテムを割り当てることと、
それぞれ第２のヘッダを備える第２のメモリアイテムを割り当てることであって、前記第２のヘッダが第１のメモリアイテムのペイロードの中のメモリの割り当てられたチャンクへの参照を備える、第２のメモリアイテムを割り当てることと、
メモリ割当ての要求を受信することと、
第１または第２のメモリアイテムのヘッダからの参照を返すことによってメモリ割当ての要求に応答することと
を備える方法。
【請求項１４】
前記第１のヘッダがさらに、前記第１のメモリアイテムへの参照のカウントを備える、請求項１３に記載の方法。
【請求項１５】
前記第１のメモリアイテムを割り当てることがさらに、複数のサブシステムのそれぞれに別個の第１のメモリアイテムを割り当てることを備える、請求項１３に記載の方法。
【請求項１６】
前記メモリ割当て要求が、要求されるメモリサイズを備える、請求項１３に記載の方法。
【請求項１７】
特定の第１のメモリアイテムのペイロードの中の割り当てられたメモリのサイズと前記要求されたメモリのサイズの和を求め、前記和をしきい値と比較することをさらに備える、請求項１６に記載の方法。
【請求項１８】
前記和が前記しきい値より小さいとき、特定の第２のメモリアイテムの前記ヘッダからの参照を割り当てて、返すことをさらに備える、請求項１７に記載の方法。
【請求項１９】
前記和が前記しきい値より大きいとき、前記特定の第１のメモリアイテムの前記ヘッダからの参照を返すことをさらに備える、請求項１８に記載の方法。
【請求項２０】
特定の第１のメモリアイテムのペイロードの中の割り当てられたメモリのサイズと前記要求されたメモリのサイズの和を求めることと、
前記和を前記特定の第１のメモリアイテムの前記ペイロードのサイズと比較することと、
前記要求されたメモリのサイズをしきい値と比較することと
をさらに備える、請求項１６に記載の方法。
【請求項２１】
別の特定の第１のメモリアイテムを生成することと、
前記別の特定の第１のメモリアイテムのペイロードを参照している特定の第２のメモリアイテムを生成することと、
前記和が前記特定の第１のメモリアイテムの前記ペイロードの前記サイズより大きく、前記要求されたメモリのサイズが前記しきい値より小さいとき、前記特定の第２のメモリアイテムの前記ヘッダからの参照を返すことと
をさらに備える、請求項２０に記載の方法。
【請求項２２】
別の特定の第１のメモリアイテムを生成することと、
前記和が前記特定の第１のメモリアイテムの前記ペイロードの前記サイズより大きく、前記要求されたメモリのサイズが前記しきい値より大きいとき、前記別の特定の第１のメモリアイテムの前記ヘッダからの参照を返すことと
をさらに備える、請求項２０に記載の方法。
【請求項２３】
前記しきい値が、前記特定の第１のメモリアイテムの中の割り当てられたメモリの前記サイズである、請求項２０に記載の方法。
【請求項２４】
前記要求されたメモリのサイズをキャッシュ行の境界と合わせるために、前記要求されたメモリのサイズを増大させることをさらに備える、請求項１６に記載のメモリ管理システム。
【請求項２５】
第１のメモリアイテムを割り当てるための手段であって、前記第１のメモリアイテムがそれぞれ第１のヘッダおよびペイロードを備え、前記ペイロードが個別に割当て可能なメモリのチャンクを備え、前記第１のヘッダが前記ペイロードの中の割り当てられていないメモリへの参照を備える、手段と、
第２のメモリアイテムを割り当てるための手段であって、前記第２のメモリアイテムがそれぞれ第２のヘッダを備え、前記第２のヘッダが第１のメモリアイテムの前記ペイロードの中の割り当てられたメモリのチャンクへの参照を備える、手段と、
メモリ割当ての要求を受信するための手段と、
第１または第２のメモリアイテムの前記ヘッダからの参照を返すことによって、メモリ割当ての要求に応答するための手段と
を備えるメモリ管理システム。
【請求項２６】
コンピュータ命令で符号化されたコンピュータ可読媒体であって、実行されるとプロセッサに、
それぞれが第１のヘッダおよびペイロードを備える第１のメモリアイテムを割り当てることであって、前記ペイロードが個別に割当て可能なメモリのチャンクを備え、前記第１のヘッダが前記ペイロードの中の割り当てられていないメモリへの参照を備える、第１のメモリアイテムを割り当てることと、
それぞれ第２のヘッダを備える第２のメモリアイテムを割り当てることであって、前記第２のヘッダが第１のメモリアイテムの前記ペイロードの中の割り当てられたメモリのチャンクへの参照を備える、第２のメモリアイテムを割り当てることと、
メモリ割当ての要求を受信することと、
第１または第２のメモリアイテムの前記ヘッダからの参照を返すことによって、メモリ割当ての要求に応答することと
を行わせる、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００８年４月２日に出願された、「ＭＥＭＯＲＹ  ＡＬＬＯＣＡＴＩＯＮ  ＳＣＨＥＭＥ  ＦＯＲ  ＥＭＢＥＤＤＥＤ  ＯＲ  ＷＩＲＥＬＥＳＳ  ＣＯＭＭＵＮＩＣＡＴＩＯＮ  ＳＹＳＴＥＭＳ」という名称の米国仮特許出願第６１／０４１，８７８号の利益を主張する。本出願は、全体として参照により組み込まれる。
【０００２】
本分野は、概してメモリ割当てに関し、より詳細には組込みまたは無線通信システムにおけるメモリ割当てに関する。
【背景技術】
【０００３】
メモリ割当てサービスは、メモリアイテムのプールを利用する。場合によっては、メモリアイテムは、メモリアイテムの大きさに基づく異なるプールに振り分けられる。例えば、あるプールは多くの小さいメモリアイテムで構成される可能性があり、別のプールは比較的少数の大きいメモリアイテムで構成される可能性がある。メモリ割当て要求に応答して、適切なデータアイテムが特定のプールから選択され、要求するエンティティに返されることが可能である。このシステムは、メモリおよびプロセッサリソースを著しく無駄にすることになる。例えば、小さいメモリアイテムでは、ヘッダのペイロードに対する比率が高く、結果としてメモリを非効率的に使用することになる。さらに、全メモリアイテムが割り当てられると、特定のデータアイテムのかなりのデータ部分は未使用になる可能性がある。また、こうした割当てサービスでは、統計多重化が利用できない。プロセッサリソースはまた、複数の小さいメモリアイテムのチェーン化により消費される。
【０００４】
無線通信システムでは、確実な無線伝送を保証するために、パケットはしばしば小さい固定サイズの「無線リンク」パケット、例えば４０バイト、にセグメント化される。メモリを効率的に使用するためには、１つの手法は、それぞれ４０バイトのブロックを保持する比較的小さいメモリアイテムの大きいプールを作成することであり、この４０バイトのブロックは最終的に上位層で併せてチェーン化されて、より大きいデータブロック（例えば１５００バイトのＩＰパケット）を形成することができる。このサービスの１つの欠点は、メモリアイテムがキャッシュ行に合わせられたもの（３２または６４バイト）でなければならず、これは小さい無線リンクパケットサイズにふさわしくない可能性があるので、一部のスペースが無駄になる可能性があることである。また、様々な技術は、総メモリを削減するために、同じメモリアイテムのプールを共有することがあり、この場合メモリアイテムのペイロードサイズは、最も大きい無線リンクパケットサイズに適合するように選ばれなければならず、これは浪費をさらに増大する可能性がある。
【発明の概要】
【０００５】
１つの実施形態では、メモリ管理のためのシステムが提供される。このシステムは、プロセッサと、このプロセッサで実行可能なメモリ管理サービスを備える。メモリ管理サービスは、第１のメモリアイテムを生成するように構成可能であり、第１のメモリアイテムのそれぞれがヘッダおよびペイロードを備え、ペイロードは個別に割り当てることができる複数のメモリチャンクを格納するように構成可能であり、第１のメモリアイテムのヘッダはペイロードの中の割当て可能なスペースを参照し、メモリ管理サービスは、第２のメモリアイテムを生成するように構成可能であり、第２のメモリアイテムのそれぞれが第１のメモリアイテムのペイロードの中の１つまたは複数のメモリチャンクを参照するヘッダを備え、メモリ管理サービスは、メモリ割当て要求に応答して第１または第２のメモリアイテムのヘッダのいずれかからの参照を返すように構成可能である。
【０００６】
別の実施形態では、メモリ管理のための方法が提供される。この方法は、第１のメモリアイテムを割り当てることであって、第１のメモリアイテムはそれぞれ第１のヘッダおよびペイロードを備え、ペイロードは個別に割当て可能なメモリのチャンクを備え、第１のヘッダはペイロードの中の割り当てられていないメモリへの参照を備える、第１のメモリアイテムを割り当てることと、第２のメモリアイテムを割り当てることであって、第２のメモリアイテムはそれぞれ第２のヘッダを備え、第２のヘッダは第１のメモリアイテムのペイロードの中の割り当てられたメモリのチャンクへの参照を備える、第２のメモリアイテムを割り当てることと、メモリ割当て要求を受信することと、第１または第２のメモリアイテムのヘッダからの参照を返すことによってメモリ割当ての要求に応答することとを備える。
【０００７】
別の実施形態では、メモリ管理システムが提供される。このシステムは、第１のメモリアイテムを割り当てるための手段であって、第１のメモリアイテムはそれぞれ第１のヘッダおよびペイロードを備え、ペイロードは個別に割当て可能なメモリのチャンクを備え、第１のヘッダはペイロードの中の割り当てられていないメモリへの参照を備える、手段と、第２のメモリアイテムを割り当てるための手段であって、第２のメモリアイテムはそれぞれ第２のヘッダを備え、第２のヘッダは第１のメモリアイテムのペイロードの中の割り当てられたメモリのチャンクへの参照を備える、手段と、メモリ割当ての要求を受信するための手段と、第１または第２のメモリアイテムのヘッダから参照を返すことによってメモリ割当ての要求に応答するための手段とを備える。
【０００８】
別の実施形態では、コンピュータ命令で符号化されたコンピュータ可読媒体が提供される。この命令は実行されるとプロセッサに、第１のメモリアイテムを割り当てることであって、第１のメモリアイテムはそれぞれ第１のヘッダおよびペイロードを備え、ペイロードは個別に割当て可能なメモリのチャンクを備え、第１のヘッダはペイロードの中の割り当てられていないメモリへの参照を備える、第１のメモリアイテムを割り当てることと、第２のメモリアイテムを割り当てることであって、第２のメモリアイテムはそれぞれ第２のヘッダを備え、第２のヘッダは第１のメモリアイテムのペイロードの中の割り当てられたメモリのチャンクへの参照を備える、第２のメモリアイテムを割り当てることと、メモリ割当て要求を受信することと、第１または第２のメモリアイテムのヘッダから参照を返すことによってメモリ割当ての要求に応答することとを行わせる。
【図面の簡単な説明】
【０００９】
【図１】移動体デバイスの一例を示すブロック図。
【図２】メモリアイテムの一例を示すブロック図。
【図３】メモリアイテムの別の例を示すブロック図。
【図４Ａ】メモリを割り当てる方法の一例を示すブロック図。
【図４Ｂ】メモリを割り当てる方法の一例を示すブロック図。
【図５】メモリ割当てサービスの実行の様々な例を示すブロック図。
【図６】メモリを割り当てる方法の別の例を示すブロック図。
【発明を実施するための形態】
【００１０】
次の詳細な説明は、本発明のある特定の実施形態に対して行われるものである。しかしながら本発明は、多数の様々な方法で具体化されることが可能である。本明細書の諸態様が、多様な形態で具体化されることが可能であること、および本明細書に開示されるどの特定の構造、機能、または両方も単に代表的なものであることは明らかである。本明細書の教示に基づいて、本明細書に開示された態様が、他のいずれの態様とも個別に実施されることが可能であること、およびこうした態様の２つ以上は、様々な方法で組合せ可能であることを、当業者は理解するであろう。例えば、本明細書に示す任意の数の態様を使用して、装置を実装することが可能であり、または方法を実行することが可能である。さらに、他の構造、機能、または本明細書に示す諸態様の１つもしくは複数に加えて、またはそれ以外の構造および機能を使用して、このような装置を実装することが可能であり、またはこのような方法を実行することが可能である。
【００１１】
移動体デバイスは、一般に動作するためにメモリ割当てサービスを利用する。本明細書には、移動体デバイスの中の様々なサブシステムに必要とされるメモリの総容量を削減する、および移動体デバイスによって消費される処理リソースを削減するための方法および装置が記載される。以下に、記載した方法および装置と共に使用されることが可能であるいくつかのアーキテクチャについて説明する。
【００１２】
図１は、移動体デバイス１０２の一例を示すブロック図である。装置１０２は、メモリ２０４と通信しているプロセッサ２０２および無線リンク１０６を介して通信するためのネットワークインターフェース２０６を含んでいる。必要に応じて、装置１０２はまた、ディスプレイ２１０、キー、タッチスクリーン、もしくは他の好適な触覚入力デバイスのようなユーザ入力デバイス２１２、無線リンク１０６を通じて受信される信号に基づいて音響出力を提供するように構成されたトランスデューサを備えるラウドスピーカ２１４、および／または無線リンク１０６を通じて送信される信号の音響入力を提供するように構成されたトランスデューサを備えるマイクロホン２１６のうちの１つまたは複数を含むことができる。例えば、電話は、グラフィカルユーザインターフェース（ＧＵＩ）の画像出力を提供するように構成されたディスプレイ２１０を含むことができる。
【００１３】
ネットワークインターフェース２０６は、例示の装置１０２が無線リンク１０６を通じて１つまたは複数の装置と通信することができるように、任意の好適なアンテナ（図示せず）、受信機２２０、および送信機２２２を含むことができる。必要に応じてネットワークインターフェース２０６は、プロセッサ２０２の処理要求を減らすために処理機能を有することも可能である。
【００１４】
必要に応じて装置１０２は、リンク１０８を介してネットワーク１１０を通じて通信する第２のネットワークインターフェース２０８を含むことができる。例えば、装置１０２は、有線または無線通信リンクを介して他のネットワーク１１０（例えばインターネットなどのワイドエリアネットワーク）との接続性を提供することができる。したがって装置１０２は、他の装置１０２（例えばＷｉ−Ｆｉステーション）が他のネットワーク１１０とアクセスできるようにすることが可能である。さらに、装置１０２の１つまたは複数はポータブルであるか、場合によっては比較的ポータブルでない可能性があることを理解されたい。第２のネットワークインターフェース２０８は、ＩＥＥＥ８０２．１１（ａ）、（ｂ）、もしくは（ｇ）を含むＩＥＥＥ８０２．１１規格、ＢＬＵＥＴＯＯＴＨ（登録商標）規格、および／またはＣＤＭＡ、ＧＳＭ（登録商標）、ＡＭＰＳに従ったＲＦ信号、または無線セル方式の電話網内の通信に使用される他の既知の信号を送受信することができる。さらに、第２のネットワークインターフェース２０８は、イーサネット（登録商標）（ＩＥＥＥ８０２．３）、ＵＳＢ、またはＭＤＤＩなどの好適な有線ネットワークインターフェースを備えることができる。
【００１５】
装置１０２は、装置１０２の１つまたは複数の構成要素に電力を供給する電池２３１を含むことができる。装置１０２は、電話、スマートフォン、携帯情報端末（ＰＤＡ）、ウルトラモバイルパーソナルコンピュータ（ＵＭＰＣ）、モバイルインターネットデバイス（ＭＩＤ）、または他の任意の移動体デバイスの少なくとも１つを備えることができる。詳細には、本明細書の教示は、様々な装置１０２に組み込まれる（例えば内部に実装されるまたは実行される）ことが可能である。
【００１６】
本明細書に記載する構成要素は、様々な方法で実装されることが可能である。図１を参照すると、デバイスまたは装置１０２は、例えばプロセッサ２０２、ソフトウェア、その何らかの組合せ、または本明細書で教示される他の何らかの方法で実装される諸機能を表すことができる、一連の相互に関係のある機能ブロックとして表されている。例えば、プロセッサ２０２は、入力デバイス２１２を介してユーザ入力を容易にすることができる。さらに送信機２２２は、別の装置１０２に情報を送信することに関連する様々な機能を提供する送信用プロセッサを含むことができる。受信機２２０は、本明細書で教示される別のデバイス１０２から情報を受信することに関連する様々な機能を提供する受信用プロセッサを備えることができる。
【００１７】
プロセッサ２０２はまた、メモリ割当てサービス２０３と通信している。１つの実施形態では、メモリ割当てサービス２０３は、プロセッサ２０２上で動作する。メモリ割当てサービス２０３は、デバイス１０２の中で動作している１つまたは複数のサブシステムからのメモリの要求に応じる。メモリ割当てサービス２０３の方法および動作について、以下にさらに詳細に説明する。
【００１８】
上記のように、図１は、こうした構成要素がいくつかの態様において、適切なプロセッサ構成要素を介して実装されることが可能であることを示している。こうしたプロセッサ構成要素は、いくつかの態様において少なくとも部分的に本明細書に教示する構造を使用して実装されることが可能である。いくつかの態様においてプロセッサは、こうした構成要素の１つまたは複数の機能の一部または全部を実装するように適合させることが可能である。いくつかの態様では、破線の枠で示した構成要素の１つまたは複数はオプションである。
【００１９】
１つまたは複数の例示的実施形態では、記載した機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せで実施することが可能である。ソフトウェアに実装される場合、機能は、コンピュータ可読媒体上の１つもしくは複数の命令またはコードとしてこれに格納される、またはこれを通じて伝送されることが可能である。コンピュータ可読媒体は、コンピュータ記憶媒体とコンピュータプログラムを一方の場所からもう一方の場所へ転送することを容易にする任意の媒体を含む通信媒体とを共に含む。記憶媒体は、汎用コンピュータまたは専用コンピュータによってアクセスされることが可能である任意の使用可能な媒体とすることができる。限定ではなく一例として、このようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、または所望のプログラムコード手段を命令もしくはデータ構造の形態で搬送もしくは格納するために使用することができ、汎用コンピュータもしくは専用コンピュータ、または汎用プロセッサもしくは専用プロセッサでアクセスすることができる他の任意の媒体を含むことができる。また、いかなる接続も、適切にはコンピュータ可読媒体と呼ばれる。例えば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、ディジタル加入者線（ＤＳＬ）、または赤外線、ラジオ波、およびマイクロ波などの無線技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、この同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、または赤外線、ラジオ波、およびマイクロ波などの無線技術が、媒体の定義に含まれる。本明細書で使用するディスク（diskおよびdisc）は、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、ディジタルバーサタイルディスク（digital versatile disc、ＤＶＤ）、フロッピー（登録商標）ディスク、およびブルーレイディスクを含み、ディスク（disk）は通常データを磁気的に再生し、ディスク（disc）はレーザーを使用してデータを光学的に再生する。上記のものの組合せもまた、コンピュータ可読媒体の範囲内に含まれるものとする。
【００２０】
メモリ割当てサービスの１つの態様によれば、小さいメモリブロックは、大きい固定サイズのユニット（「ＤＳＭアイテム」と呼ばれる）にパックされる。より小さいブロックのそれぞれは、ＤＳＭ内のペイロードを指す、「ＤＵＰ」（複製）アイテムの使用を監視される。ＤＳＭアイテムは、限定されたサイズであるので、またＤＳＭ内のすべてのブロックは、同様の限定されたライフタイムを有すると仮定されることが可能であるので、各ＤＳＭ内の空きメモリのフラグメンテーションに対応する必要がない。この利点は、各ＤＳＭ内のメモリがほとんど無駄にならず、高パッキング効率を有する他のメモリ割当て技術の複雑さはわずかであるので、メモリの利用が大きく削減されることが可能であることである。見方を変えるとこれは、固定サイズの割当てサービスとフレキシブルなサイズ割当てサービスの混成物であり、全メモリは固定サイズのブロックに割り当てられるが、フレキシブルな割当ては短いライフタイムを有すると予想されるので、ブロック内では、フレキシブルなサイズの割当てが可能である。
【００２１】
１つの態様では、基本的なメモリブロックはＤＳＭアイテムと呼ばれる。これは、ヘッダとペイロードの部分から構成される。データのブロックがメモリに格納されなければならないとき、新しいＤＳＭアイテムが割り当てられ、データはこのＤＳＭのペイロード部分にコピーされる。さらに、ヘッダは、データの開始および長さを反映するように更新される。データの長さがペイロード部分のサイズを超える場合、複数のＤＳＭアイテムがリンクされたリストに一緒にチェーンされることが可能である。
【００２２】
さらに、特定タイプのＤＳＭアイテムが定義され、ＤＵＰ（「ｄｕｐｌｉｃａｔｅ」）と示される。ＤＵＰは通常のＤＳＭと同じヘッダ構造を使用するが、それ自体のペイロード部分はない。代わりとして、ＤＵＰは、例えば標準的なＤＳＭの内部など他の場所のデータ部分をポイントすることができる。いくつのＤＵＰが同じＤＳＭアイテムの中のデータをポイントするかを追跡するために、「ｒｅｆ＿ｃｏｕｎｔ」と示されるヘッダフィールドがあり、これはこのＤＳＭアイテムの参照の数をカウントし、元のＤＳＭが最初に割り当てられるとき、１に設定される。新しいＤＵＰがＤＳＭアイテムの中をポイントして作成されるたびに、ＤＳＭアイテムのｒｅｆ＿ｃｏｕｎｔが増やされる。同様に、ＤＵＰが解放された状態になると、元のＤＳＭアイテムのｒｅｆ＿ｃｏｕｎｔは減らされる。このように割当てアルゴリズムは、ＤＳＭアイテムが実際に解放状態になるときを知ることができ、これは単に他のＤＵＰがこのパケットのペイロード部分をポイントしないときであり、ｒｅｆ＿ｃｏｕｎｔがゼロに戻ったときである。
【００２３】
ＤＵＰは、元のデータに接触せずにパケットを分割する、データを並べ換える、ヘッダを削除するなどのために使用されることが可能である。このすべては、単にＤＳＭおよびＤＵＰヘッダを操作することによって実現されることが可能である。
【００２４】
別の態様によれば、メモリ効率を向上させるためにデータを同じＤＳＭアイテムにパックすることを可能にする技術は、前に記載した欠点のいくつかに対処することができる。この態様によれば、大きいＤＳＭアイテムのプールが定義される。大きいＤＳＭサイズは、複数の無線リンクパケットからのデータが連結されて同じＤＳＭアイテムになることを可能にする。
【００２５】
図２は、メモリ割当てサービスからのメモリアイテムを示すブロック図である。メモリ割当てサービスは、アプリケーションプログラミングインターフェース（「ＡＰＩ」）を含むことができる。このＡＰＩは、デバイス１０２に存在するサブシステムのようなサブシステムによるアクセスに利用することができる。このメモリ割当てサービスは、全体的にまたは部分的に、プロセッサ２０２または他の同様の処理デバイスによって実行されることが可能である。さらにＡＰＩは、デバイス１０２のような移動体または無線装置の動作システムの一部を形成することができる。あるいはＡＰＩは、ソフトウェアライブラリの一部を形成することができる。図２には、第１のタイプのメモリアイテム６１０が示されている。この第１のタイプのメモリアイテム６１０は、データサービス管理（「ＤＳＭ」）アイテムと呼ばれることがある。あるいはこれは、コンテナアイテムと呼ばれることがある。こうしたコンテナタイプのメモリアイテム６１０は、メモリアイテムのプール６０５として編成される。単一プール６０５が示されているが、ＤＳＭアイテムの複数のプールが使用されることも可能であることを理解されたい。各プールは、アイテムサイズまたはプールによって供給されるサブシステムなど、１つまたは複数の共通の特徴によって特徴付けられることが可能である。
【００２６】
メモリアイテム６１０の拡大図もまた図２に提供されている。拡大図でわかるように、こうしたコンテナタイプのアイテム６１０は、複数の部分を含む。メモリアイテムの第１の部分は、ヘッダ６１５と呼ばれることが可能である。ヘッダ６１５は、メモリアイテム６１０の残りの部分に関連する情報ならびに他の情報を含むことができる。メモリアイテム６１０の第２の部分は、ペイロードと呼ばれることが可能である。ペイロード自体は、メモリ６２０のいくつかの割り当てられた部分またはブロックを有することができる。さらに、ペイロードは、割り当てられていない、または未使用のスペース６２５を有することがある。１つの実施形態では、ペイロードは、ＩＰパケットを格納するために必要とされるサイズに近い、約１５００バイトを含む。
【００２７】
メモリアイテム６１０のヘッダ６１５は、メモリアイテム６１０の中の割り当てられていないスペース６２５への参照のような情報を含むことができる。１つの例では、この参照は、メモリアイテム６１０の中の割り当てられていないスペース６２５の開始アドレスを示すポインタの形をとる。データアイテム６１０の中の割り当てられていないメモリ６２５へのこの参照は、「ｄａｔａ＿ｐｔｒ」と呼ばれることが可能である。またヘッダは、割り当てられたメモリ６２０のサイズを示すフィールドを含むこともある。この割り当てられたスペースの量は、ペイロードの中の「使用済み」スペースと呼ばれることが可能である。ヘッダはまた、メモリアイテム６１０と関連付けられたメモリプール６０５を識別する識別子を示すフィールドを含んでいることもある。この識別子は、「ｐｏｏｌ＿ｉｄ」と呼ばれることが可能である。ヘッダは、メモリアイテム６１０への参照の数を示すフィールドを含むこともできる。例えば、以下に説明するように、メモリアイテム６１０は他のメモリアイテムによって参照されることが可能である。例えば、ペイロードの割り当てられたチャンク６２０のそれぞれが、異なるメモリアイテムによって参照される。さらに、メモリアイテム６１０のヘッダ６１５は、ペイロードの割り当てられていない部分６２５を参照する。こうした参照のカウントは、とりわけ、メモリアイテム６１０がいつ解放されて、その後再び割り当てられるようにプール６０５に返されることが可能であるかを判定する目的のために使用されることが可能である。この参照カウントは、「参照(references)」と呼ばれることもある。ヘッダ６１５は、他のメモリアイテムへの１つまたは複数の参照を含むこともできる。例えば、要求されたメモリのチャンクが大きすぎて単一メモリアイテム６１０に適合しない場合、要求に対処するために合わせてチェーン化されることが可能である１つまたは複数の追加メモリアイテムを示すために、ヘッダの中の参照が使用される場合がある。参照されるメモリアイテムのタイプによって、こうした参照は、「ｐｋｔ＿ｐｔｒ」または「ｄｕｐ＿ｐｔｒ」と呼ばれることもある。例えば、ｐｋｔ＿ｐｔｒは、ゼロ以上のＤＳＭまたはコンテナアイテムを参照することができ、ｄｕｐ＿ｐｔｒは、ゼロ以上のＤＵＰアイテムを参照することができる。識別されたフィールドに加えて、ヘッダ６１５は、目的をテストするために使用されるユーザが定義した１つまたは複数のフィールドのような追加フィールドを含むことができる。さらにヘッダ６１５は、識別されたフィールドの１つまたは複数を省略することができる。
【００２８】
図２はまた、第２のタイプのメモリアイテム６３０を示している。この第２のタイプのメモリアイテムは、複製または「ＤＵＰ」メモリアイテムと呼ばれることがある。これらのＤＵＰアイテム６３０は、コンテナメモリアイテム６１０のヘッダ６１５と同様のヘッダを含んでいる。例えばＤＵＰアイテムは、ＤＳＭアイテムのヘッダ６１５と同じフィールドを有することができる。あるいはＤＵＰアイテムは、より大きいまたは小さいフィールドを有する場合がある。しかしながら、こうしたＤＵＰアイテムは、自身のペイロードがない。むしろ、ＤＵＰアイテムのヘッダ６３０は、コンテナメモリアイテムへの参照を含んでいる。１つの特定の例では、ＤＵＰアイテム６３０は、メモリアイテム６１０の割り当てられた部分６２０の中の第１の割当てメモリブロックを示すポインタを含んでいる。ＤＵＰアイテム６３０は、１つまたは複数のプール６４０に配列されることも可能である。コンテナアイテムのプール６０５のように、複数のＤＵＰアイテムプールが使用されることが可能である。例えば、図２は、２つのＤＵＰアイテムプール６４０および６５０を示している。１つの例では、組込まれたデバイスまたは無線通信デバイスの中の各サブシステムは、その独自のＤＵＰアイテムのプールを有している。この実施形態ではプール６４０は、１つの特定のサブシステムに対応することができ、一方プール６５０は、別のサブシステムに対応することができる。図２に示すように、１つの実施形態は、別個のプールからのＤＵＰアイテムが、単一ＤＳＭアイテム６１０の中のメモリ６２０のブロックを参照することができることを提供する。
【００２９】
図３は、図２に示したメモリアイテムの代替的実施形態を示している。前述のように、ＤＳＭアイテムの単一プール７１５が使用されることが可能である。しかしながら、このときＤＵＰアイテム７３０および７３５の各プールは、それぞれ異なるＤＳＭアイテム７２５および７２０の割り当てられた部分を参照する。上述のようにＤＳＭアイテムは、ペイロードへのすべての参照が解放されると、再割当てのためにＤＳＭプール７１５に返されることが可能である。しかしながら、多数のサブシステムが同じＤＳＭアイテムへのＤＵＰ参照を有することを認められるとき、断片化(fragmentation)が発生する可能性がある。例えば、特定のＤＳＭの第１のサブシステムに割り当てられたすべてのメモリは、すでに解放されている。しかしながら、小さいブロックが別のサブシステムからのＤＵＰによって依然として参照される場合、ペイロードの中の残りのメモリは、第２のサブシステムがその小さいメモリブロックを解放するまで、解放されるのを待たなければならない。この問題を最小化するために、各サブシステムはそれ自体のＤＳＭへのそれ自体のＤＵＰ参照を有することができる。このようにして、特定のＤＳＭの中の割り当てられたメモリ部分のライフタイムは、同じになる可能性が高くなる。ライフタイムが同様であることは、結果として断面化の減少につながる。
【００３０】
図４Ａおよび４Ｂは、メモリを割り当てるための方法７８０の一実施形態を示している。この方法７８０は、プロセッサ２０２のようなプロセッサ上で動作するサービスとして実行されることが可能である。この方法７８０は、メモリ割当て要求の受信および割り当てられたメモリへの参照を返すことを容易にする。以下に説明するように、割り当てられる特定の参照は、要求しているサブシステムの現在のメモリ割当て状態と要求されるメモリブロックのサイズの関数であることが可能である。ステップのいくつかは、特定の応用の要件または指定に適合させるために省略可能であることに留意する。さらに本明細書に記載したステップのいくつかは最適化であり、ゆえにシステムの設計者の裁量により選択して利用されるまたは省略されることが可能である。
【００３１】
方法７８０は、ステップ７８５においてメモリ割当てサービスがメモリ要求を受信したときに始まる。メモリ要求の一部として、要求しているサブシステムは、要求するメモリのサイズを指定することができる。また要求しているサブシステムは、サブシステムのＩＤを提示し、メモリ割当てサービスがそのサブシステムに適切なＤＳＭアイテムを選択できるようにすることが可能である。メモリ要求を受信した後に、メモリ割当てサービスは、判定ステップ７９０に示すように、要求されたサイズが現在のＤＳＭコンテナアイテムの中の割り当てられていないメモリのサイズより小さいかどうかを判定する。図２および３に関して説明したように、ＤＳＭアイテムはペイロード部分に割り当てられていないスペースを有する可能性がある。判定ステップ７９０は、割り当てられていない部分のサイズを要求されたサイズと比較することによって行われることが可能である。あるいは、ペイロードの全体のサイズはわかっているので、要求される量は、ペイロードの割り当てられた部分のサイズと比較されることが可能である。別の実施形態では、メモリ割当てシステムは比較にメモリの要求されるサイズを使用するのではなく、要求のサイズを増大させ、増大された要求がキャッシュの限界と合わせられるようにすることが可能である。例えば、実際の要求は、結果的な要求が、１６、３２、６４、または１２８バイトのような複数の特定のキャッシュ行サイズであるように、増大されることが可能である。ともかく、要求されたメモリサイズ、またはその増大されて合わせられたサイズが割り当てられていない部分に適合する場合、方法はステップ８００へ進む。
【００３２】
判定ステップ８００に進むと、メモリ割当てシステムは、要求されたサイズを現在のＤＳＭアイテムのこれまでに割り当てられた部分のサイズに加えると、第１のしきい値より大きくなるかどうかを判定する。例えば、ＤＳＭペイロードが約１５００バイトの長さである場合、しきい値は１２００バイトである可能性がある。したがって、メモリ割当てシステムは、すでに割り当てられたメモリのサイズを要求されたメモリのサイズに加えると、１２００バイトの限界を超えるかどうかを判定することになる。１つの実施形態では、しきい値は、ＤＳＭアイテムのペイロードのサイズの一定のパーセンテージとして選択されることが可能である。例えばしきい値は、ペイロードのサイズのおよそ７０％〜８０％であることが可能である。別の実施形態では、しきい値のサイズは、ＩＰパケットを格納するためのメモリの要求のような一般的な要求のサイズ特性を反映するように選択されることが可能である。別の実施形態では、割り当てられるメモリのサイズをしきい値と比較するのではなく、割り当てられていない残りのメモリのサイズがしきい値と比較されることが可能である。この実施形態では、要求されたまたは調整されたメモリサイズが割り当てられた場合、サービスは、依然として割り当てられていないペイロードの部分を計算するようになる。次に、残りの割り当てられていないメモリとこのしきい値の比較は、前述の割り当てられるメモリとしきい値の比較と同様に使用されることが可能である。
【００３３】
判定ステップ８００を行うと、識別された和がしきい値より大きい場合、方法はステップ８０５へ進む。ステップ８０５において続行し、メモリ割当てシステムは、要求するサブシステムへ参照を返す。１つの実施形態では、返される参照は、現在のＤＳＭアイテムのヘッダからのｄａｔａ＿ｐｔｒである。有利には、ＤＳＭアイテムのヘッダから参照を返すことによって、メモリ割当てシステムは、ＤＵＰアイテムを作成すること、およびＤＵＰヘッダから参照を返すことに含まれるオーバヘッドおよびリソースを節約する。さらに、単に要求されたサイズではなくＤＳＭペイロードの残りを割り当てることにより、メモリ割当てサービスはペイロードの終わりでデータの小さいブロックを避けることができ、そうしない場合、これは使用されると結果としてチェーン化をもたらす。
【００３４】
判定ステップ８００に戻ると、要求されたメモリサイズをすでに割り当てられたメモリサイズに加えると、しきい値より大きくない場合、方法はステップ８１０へ進む。ステップ８１０では、メモリ割当てサービスはＤＵＰアイテムを作成し、要求されたメモリを割り当て、ＤＵＰの中の参照を要求しているサブシステムに返す。有利には、複数の繰り返しによってこの方法は、メモリ割当てサービスが複数の割当てを単一のＤＳＭアイテムにパックすることを可能にする。このパック化により、メモリリソースを効率的に利用できるようになり、メモリの使用においても処理の使用においても利益をもたらす。
【００３５】
ステップ７９０に戻ると、要求されたメモリサイズが現在のＤＳＭアイテムの中の割り当てられていないスペースより大きい場合、方法は図４Ｂの判定ステップ８４５に進む。判定ステップ８４５では、メモリ割当てサービスは、要求されるサイズが第２のしきい値より大きいかどうかを判定する。この第２のしきい値は、第１のように、固定のバイト数として設定されることが可能である。例えば、ＤＳＭアイテムのペイロードのサイズが１６００バイトである場合、第２のしきい値は１２００バイトとすることができる。あるいは、第２のしきい値は、ペイロードのサイズのパーセンテージとして決定されることも可能である。例えば、第２のしきい値は、ペイロードサイズの６５％〜７５％とすることができる。別の実施形態では、しきい値は動的に決定されることが可能である。例えばしきい値は、ＤＳＭアイテムに割り当てられたメモリの総量と等しく設定されることが可能である。この実施形態では、要求されたサイズがＤＳＭの中の割り当てられたスペースを超える場合、要求されたサイズはしきい値を超えることになる。しきい値がどのように決定されるかにかかわらず、要求されるサイズがこのしきい値より大きい場合、ステップ８５０に示すように、メモリ割当てサービスは新しいＤＳＭアイテムを割り当て、この新しいＤＳＭアイテムのヘッダからのｄａｔａ＿ｐｔｒを要求しているサブシステムへ返す。ステップ８０５と同様に、新しいＤＳＭアイテムのヘッダから参照を返すこのプロセスは、新しいＤＵＰアイテムを作成するオーバヘッドを防ぐ。要求しているサブシステムは、求めるよりも多く、ＤＳＭアイテム全体を与えられ、この割当ては、その後の割当て要求が現在のＤＳＭアイテムに残っている、割り当てられていないメモリで満たされることを可能にする。
【００３６】
ステップ８４５に戻ると、要求されたサイズが、この第２のしきい値より小さい場合、この方法はステップ８５５へ進む。ステップ８５５では、ＤＳＭペイロードの割り当てられていない部分へのＤＳＭアイテムのヘッダの参照が削除される。実際には、これはＤＳＭアイテムの残りを解放する。さらに、新しいＤＳＭアイテムが作成される。新しいＤＳＭアイテムの中のメモリのブロックが割り当てられ、対応するＤＵＰが作成される。新しいＤＵＰの中の、新しいＤＳＭアイテムへの参照は、その後要求しているサブシステムへ返される。
【００３７】
説明の目的で、前述の方法の例が、図５に示されている。ケース１では、現在のＤＳＭアイテム９１０が示されている。現在のＤＳＭは、割り当てられた部分９１５と割り当てられていない部分９２０の両方を有する。要求されたパケットサイズ９２５は、第１のしきい値９３０であるように示されている。図に示すように、割り当てられた部分９１５のサイズを要求された部分９２５のサイズに加えると、第１のしきい値９３０より小さい。したがって、図のようにＤＳＭアイテム９３５のチャンク(chunk)が割り当てられ、新しいＤＵＰアイテムが作成され、その参照が要求中のサブシステムに返される。新しいＤＵＰアイテムは、新しく割り当てられたデータの開始をポイントするＤＳＭ９３５への参照を含んでいる。
【００３８】
ケース２では、現在のＤＳＭ９５５は、別の要求されたパケット９６０と併せて示されている。図に示すように、ＤＳＭ９５５の割り当てられた部分のサイズを要求されたパケットのサイズに加えると第１のしきい値を超えるが、この和は総ペイロード長を超えていない。したがって、ＤＳＭアイテム９６５の割り当てられていない部分への参照が、要求しているサブシステムに返される。結果として、要求されたメモリサイズまたはわずかに大きい行が割当てに調整されることに加えて、要求しているサブシステムは、ＤＳＭ９６５の中の残りの割り当てられていないスペース９８０すべてを取得する。再び、ＤＭＳアイテムのヘッダからの参照を返すことは、ＤＵＰを作成することのオーバヘッドを防ぎ、さもなければ残されていたスタブ９８０によって作り出されるチェーン化の可能性を除く。
【００３９】
ケース３では、現在のＤＳＭ９８５が、別の要求されたメモリブロック９９０と共に示されている。図示されたように、要求されたパケットは大きすぎて、現在のＤＳＭの割り当てられていない部分に適合しない。さらに、要求されたサイズは、第２のしきい値９９５より小さい。したがって、ペイロードの割り当てられていない部分への、現在のＤＳＭ１０００のヘッダの中の参照は削除される。新しいＤＳＭ１００５が形成される。ＤＳＭからのメモリのブロックが割り当てられ、新しいＤＳＭにおいて割り当てられたブロックを参照して新しいＤＵＰアイテムが作成される。この新しいＤＵＰアイテムからの参照は、その後要求しているサブシステムへ返される。再び、第２のしきい値９９５が静的であるように示されているが、しきい値はオリジナルの中の割り当てられたメモリのサイズに等しく設定することによってなど、動的に決定されることが可能であることがわかる。
【００４０】
ケース４では、現在のＤＳＭ１０１０が、要求されたメモリブロック１０１５と一緒に示されている。ケース３と同様に、要求されたサイズは大きすぎて、ＤＳＭアイテム１０１０の割り当てられていない部分に適合しない。さらに、要求されたブロックのサイズ１０１５は、第２のしきい値９９５より大きい。結果として、現在のＤＳＭ１０２０は現在の状態で保たれる。一方で、新しいＤＳＭ１０２５が作成され、新しいＤＳＭヘッダの中のペイロードの割り当てられていない部分への参照が返される。
【００４１】
図６は、図４Ａおよび４Ｂに示す方法と同様である。しかしながら図６は、メモリを割り当てるためのサービスの１つの実施形態で使用されるあるパラメータに関して変形形態を示している。方法１０８０は、図６に示すように、メモリ割当て要求のためのＡＰＩを提供する。１つの特定の実施形態では、方法１０８０は、メモリ割当てを要求するために使用されることが可能であるサブシステムのための関数呼出し(function call)を提供する。図示されるように、関数は、メモリ割当ての要求されるサイズをパラメータとして取得することができる。さらに関数は、要求しているサブシステムを識別するサブシステムＩＤのような他のパラメータを取得することができる。図６によって表されるサービスは、デバイス１０２のプロセッサ２０２のようなプロセッサ上で動作するように構成されることが可能である。割当て要求に応答してサービスは、以下に説明するように、要求されるサイズより大きいまたは等しいサイズの割り当てられたメモリブロックへのポインタを用意する。したがって、サービスのＡＰＩを使用するサブシステムは、割り当てられたメモリへポインタを返される。１つの特定の実施形態では、図６に示す方法は、その動作中、次の値の一部または全部を使用する：
ｃｕｒｒｅｎｔ＿ｄｓｍ＿ｉｔｅｍ＿ｐｔｒ［］：これは、各サブシステムの現在のＤＳＭアイテムへのポインタのセットである。
【００４２】
ａｌｉｇｎｅｄ＿ｐｋｔ＿ｓｉｚｅ：これは、１６、３２、６４、または１２８のようなサイズのキャッシュ行に合うように調整された、要求されるメモリのブロックのサイズである。
【００４３】
ｐｋｔ＿ｐｔｒ：返されることになる割り当てられたメモリへのポインタ。
【００４４】
ＤＳＭＩ＿ＭＥＭ＿ＴＨＲＥＳＨＯＬＤ＿ＴＯ＿ＦＲＥＥ＿ＤＳＭ：ＤＵＰまたはＤＳＭ参照が返されるべきであるかどうかを判定するための第１のしきい値。メモリのブロックを割り当てた後、残りの割り当てられていないメモリがこのしきい値より小さい場合、ＤＳＭ参照が返され、ＤＳＭアイテムの中の残りの割り当てられていない全メモリを有効に割り当てる。
【００４５】
ＤＳＭＩ＿ＴＨＲＥＳＨＯＬＤ＿ＦＯＲ＿ＣＯＭＰＬＥＴＥ＿ＩＴＥＭ＿ＡＬＬＯＣＡＴＩＯＮ：ＤＵＰまたはＤＳＭ参照が返されるべきかどうかを判定するための第２のしきい値。要求されたパケットサイズがこのしきい値より大きい場合、新しいＤＳＭアイテムが生成され、新しいＤＳＭのヘッダからの参照が返される。現在のＤＳＭが維持される。
【００４６】
図６に示す方法は、１０８５に示す関数呼出しから始まる。要求へのパラメータとして、割当てサービスは、要求されるパケットサイズ「ｐｋｔ＿ｓｉｚｅ」を受信する。さらに、いくつかの実施形態では、別のパラメータ、サブシステムＩＤもまた、関数呼出しに渡される。ステップ１１００に進むと、方法は、同時に発生したアクセス問題を回避するために、ＤＳＭアイテムの特定のプールをロックする。プールをロックした後に、方法は判定ステップ１１０５に進む。判定ステップ１１０５では、サービスはｐｋｔ＿ｐｔｒがｎｕｌｌであるかどうかを判定する。要求に対してメモリが割り当てられていない場合、ポインタはｎｕｌｌとすることが可能である。しかしながら、ポインタにＮＵＬＬ値がない場合、サービスはプール１１４０を解除し、ポインタ１１４５を返すように進行する。しかしながら、ポインタがｎｕｌｌである場合、サービスは判定ステップ１１１０へ進む。
【００４７】
判定ステップ１１１０で継続すると、サービスは、ｃｕｒｒｅｎｔ＿ｄｓｍ＿ｉｔｅｍ＿ｐｔｒがｎｕｌｌであるかどうかを判定する。前の繰り返しの結果として、現在のＤＳＭアイテムが存在しない場合、サービスはＤＳＭアイテムを作成するように進み１１１５、このような作成が失敗する場合１１２０、１１４０、１１４５は終了する。有効な現在のＤＳＭが存在していることを確認される、または作成されると、この方法は判定ステップ１１２５へ進む。判定ステップ１１２５では、サービスが、合わせられた要求サイズが、現在のＤＳＭの中の割り当てられていないスペースのサイズより小さいかどうかを判定する。小さい場合、サービスは次に、ステップ１１３０において、ＤＳＭの中で要求されたメモリを割り当てた後に残っている、割り当てられていないスペースが、第１のしきい値より小さいかどうかを判定する。小さい場合、サービスはＤＵＰを作成し、現在のＤＳＭ１１３５の中で合わせられた要求メモリを割り当て、プール１１４０を解除し、ＤＵＰポインタ１１４５を返す。小さくない場合、サービスは全く新しいＤＳＭ１１５０を作成し、プール１１４０を解除し、新しいＤＳＭ１１４５のヘッダからポインタを返す。
【００４８】
ステップ１１２５に戻ると、要求されたサイズが、残りの割り当てられていないスペースより大きい場合、この方法は判定ステップ１１５５へ進む。ステップ１１５５では、サービスは、要求されたサイズが第２のしきい値より大きいまたは等しいかどうかを判定する。そうである場合、サービスは全く新しいＤＳＭ１１６５を作成し、プール１１４０を解除し、新しいＤＳＭ１１４５のヘッダからのポインタを返す。そうでない場合、サービスは現在のＤＳＭの中の残りのメモリを解放し、ステップ１１０５で再びこの方法を開始するように進む。結果として、新しいＤＳＭが作成され、新しいＤＳＭの本文(body)を参照するＤＵＰが作成され、ＤＵＰポインタが要求しているシステムに返される。
【００４９】
本メモリ割当てサービスのさらなる特徴および実施形態もまた、本明細書に提示される：
異なるユーザ用の複数のＤＳＭポインタ
データブロックのライフタイムが実質的にユーザによって異なることが予想される場合に対処するために、アルゴリズムは、複数のＤＳＭポインタを維持し、単に同様のライフタイムを有するデータブロックを同じＤＳＭにパックすることができる。例えば、ユーザの特定ＩＤが割当ての要求と合わせて渡され、このユーザからのデータのみが同じＤＳＭアイテムにパックされるようにすることが可能である。他のユーザからの要求は、他のＤＳＭにパックされる。ここで「ユーザ」は、ユーザプロファイルの１つのセットを任意の他のセットと識別するために、タスクまたはサブタスクまたはレイヤまたは関数のセット、あるいはこれらの他のいずれかの組合せとすることができる。
【００５０】
ＤＳＭの前（または後）にデータを追加するための支援
既存のＤＳＭまたはＤＵＰアイテムの前のデータの追加（すなわちプロトコルヘッダの追加）を、新しいＤＳＭアイテムを割り当てるおよびチェーン化を行う必要がなく、効率的に処理するために、前にフリースペースを有するＤＳＭを割り当てることを可能にすることが提案される。フリースペースは、「オフセット」ヘッダによって追跡される。このように、ＤＵＰまたはＤＳＭは、所与のオフセットを有して割り当てられることが可能であり、後により多くのデータがＤＳＭの前に挿入される必要がある場合、これは、その後にチェーン化が続く、新しいＤＳＭを割り当てることなく、行われることが可能である。同様のサービスは、ＤＳＭの終わりにデータを追加するために許容されることが可能である。
【００５１】
複数のプール
このサービスは、複数のＤＳＭプールがあるユーザへの所与の数のアイテムを予約することができるようにする。このようにしてこのユーザは、他のユーザがＤＳＭアイテムをすべて割り当てたために突然にフリーＤＳＭアイテムがなくなるということを心配する必要がない。またこれは、メモリオーバーラン問題（１人のユーザが割当ての境界を乗り越える）のより優れたデバッグ能力を提供するが、なぜならこの問題はこのユーザのコードベースに限定されるだけだからである。
【００５２】
複数のプールに代わるものとしての割当てサービス
同じことを実現する別の方法は、１つのプールを有することであるが、各ユーザは、ユーザが割り当てることができるＤＳＭアイテムの最大割当量（バイト）を有する。ユーザが自身の割当量に達すると、ユーザは新しいアイテムを割り当てるためにいくつかのアイテムを解放して、他のユーザのメモリが欠乏するのを避けなければならない。複数のプール手法にわたり有する１つの利点は、さらに共有が実現可能であることである。例えば、Ｘアイテムの自身のプールを有する４人のユーザがいる場合、４Ｘアイテムのメモリが必要である。しかしながら、４人すべてのユーザがすべてのアイテムを同時に割り当てる可能性はあまりないので、割当てサービスは、総メモリをおよそ３Ｘに削減することを可能にし、１人のユーザが自身の全メモリ＝Ｘを取得すれば、残りの３人のユーザは、残りのメモリ＝２Ｘを共有することができると仮定する。
【００５３】
異なるサイズに対する複数のＤＳＭポインタ
この態様では、ＤＳＭ割当ては、（上記のサブシステムＩＤを使用するのとは対照的に）要求されるメモリスペースに基づいて分割されることが可能である。すべてのタスク／プロファイルの必要を満たすために複数のサイズのプールの従来の方法を複数のレイヤ／サブシステムにわたって共有する代わりに、この提案を用いると、ＤＳＭポインタごとに特定のサイズのブロックのみが割当て可能である複数のＤＳＭポインタをサポートするために備えることができる。例えば、１２８、２５６、５１２、７６８、１０２４、１５３６バイトのブロックサイズなどのＤＳＭポインタを有することができる。
【００５４】
任意のレイヤ／モジュールが特定のサイズのメモリを要求するときはいつでも、アルゴリズムは最も適合するＤＳＭポインタを決定し、要求されたサイズが利用可能であれｄｕｐを提供することができる。要求されたサイズが利用できない場合は、そのサイズのＤＳＭポインタ（ＮＵＬＬでない場合）を解除し、大きいアイテム（複数）（例えば、所定のバイト数より大きいアイテム、一例では７６８バイト以上のアイテム）のグローバルプールから１の大きいアイテムおよびその後にＤＵＰ、最も適合するブロックサイズを割当て、ＤＵＰを要求者に返す。
【００５５】
この割当てはまた、従来の技術にまさるいくつかの明白な利点を有する。このサービスの所実施形態は、メモリフットプリント(footprint)を削減する。より少ないプールを使用して、よりよい統計多重を可能にする。このサービスは、より優れたパック化効率を推進する。ＤＵＰにはオーバヘッドが加えられるが、ＤＳＭアイテムにはオーバヘッドが少ない。ＣＰＵ処理オーバヘッド（ＭＩＰＳ）は、チェーン化が少ないことにより削減される。このサービスは、より大きいＤＳＭアイテムの使用を可能にし、長いパケットチェーンを回避して（特により大きいパケットサイズにおいて）、それによってＤＳＭ割当て／解放動作の数を削減する。諸実施形態は、複数のメモリプールを含んでいるより多くの従来の手法と関連する維持管理を簡易化する。このサービスは、これを処理するためのセントラルＡＰＩを有することで、サブシステムごとにこのような機能を実行しなければならないこと、したがってコードの写しを作ることを回避するように、実施されることが可能である。ターゲットごとに別々のプールサイズおよびアイテムサイズの必要は回避される。本明細書で概略を述べた技術なしでは、コードを多くの場所（例えば、パケットサービスモジュール（ＰＳ）、高速ＵＳＢ（ＨＳ−ＵＳＢ）モジュールなどのような、スタックの中の様々な、または複数のレイヤ）で別個に実行する必要があり、これは誤りなどを引き起こしやすい。例えば低遅延のメモリ（例えば、インターナルランダムアクセスメモリ（ＩＲＡＭ））の中でＤＵＰプールを定義することによって、さらなる性能の向上（キャッシュベネフィットなど）を求めて高速メモリの中でＤＵＰプールを定義することが可能である。ＤＳＭの中で削減されたチェックは、このアプリケーションプログラミングインターフェース（ＡＰＩ）でただ１つのプールが使用される場合、取得されることが可能である。現在のＤＳＭは、パラメータとして渡されるプールＩＤ（識別情報）に基づいて、いくつかのチェックを行っている。
【図１】
2011521313.tif 000003
【図２】
2011521313.tif 000004
【図３】
2011521313.tif 000005
【図４Ａ】
2011521313.tif 000006
【図４Ｂ】
2011521313.tif 000007
【図５】
2011521313.tif 000008
【図６】
2011521313.tif 000009
【国際調査報告】
2011521313.tif 000010
2011521313.tif 000011
2011521313.tif 000012