(57)【要約】      （修正有）【課題】従来はプロセッサコアで行われてきたバッファ管理をプロセッサコアの処理から開放する。【解決手段】バッファ管理ユニット２４において、システムオンチップ（ＳＯＣ）１０の複数のバッファアドレスを管理する段階と、ＳＯＣ１０における利用可能なバッファアドレスの数が低い閾値を下回る場合、ＳＯＣ１０の外部にあるメモリ４４から１以上のバッファアドレスをＳＯＣ１０で取得する段階と、ＳＯＣ１０における利用可能なバッファアドレスの数が高い閾値を上回る場合、別の１以上のバッファアドレスをＳＯＣ１０からメモリ４４に分配する段階とを備える。【選択図】図１
2011204233.tif 000002
【特許請求の範囲】
【請求項１】
システムオンチップ（ＳＯＣ）の複数のバッファアドレスを管理する段階と、
前記ＳＯＣにおける利用可能なバッファアドレスの数が低い閾値を下回る場合、前記ＳＯＣの外部にあるメモリから１以上のバッファアドレスを前記ＳＯＣで取得する段階と
を備える方法。
【請求項２】
前記ＳＯＣにおける利用可能なバッファアドレスの数が高い閾値を上回る場合、別の１以上のバッファアドレスを前記ＳＯＣから前記メモリに分配する段階をさらに備える請求項１に記載の方法。
【請求項３】
前記ＳＯＣの前記複数のバッファアドレスを管理する段階は、
前記ＳＯＣの内部バッファポインタプールの前記複数のバッファアドレスを管理する段階を有し、
前記メモリから前記１以上のバッファアドレスを取得する段階は、
前記メモリの外部バッファポインタプールから前記１以上のバッファアドレスを取得する段階を有する請求項１に記載の方法。
【請求項４】
前記ＳＯＣの前記複数のバッファアドレスを管理する段階は、
前記ＳＯＣの複数のバッファポインタを管理する段階をさらに有し、前記複数のバッファポインタのうちの１つのバッファポインタは、前記複数のバッファアドレスのうち対応するバッファアドレスを含む請求項１に記載の方法。
【請求項５】
前記メモリから前記１以上のバッファアドレスを前記ＳＯＣで取得する段階は、
第１のバッファアドレスを前記ＳＯＣからクライアントコンポーネントに割り当てる段階と、
前記割り当てが行われると、前記ＳＯＣにおける利用可能なバッファアドレスの数が前記低い閾値を下回る場合に前記メモリから前記１以上のバッファアドレスを前記ＳＯＣで取得する段階をさらに有する請求項１に記載の方法。
【請求項６】
前記第１のバッファアドレスを割り当てる段階は、
前記クライアントコンポーネントからのバッファ位置の分配要求を受信する段階と、
前記分配要求を受信すると、前記第１のバッファアドレスを含む第１のバッファポインタを前記クライアントコンポーネントに割り当てることにより、前記第１のバッファアドレスを前記クライアントコンポーネントに割り当てる段階をさらに有する請求項５に記載の方法。
【請求項７】
前記第１のバッファアドレスを前記クライアントコンポーネントに割り当てると、前記第１のバッファアドレスを、前記ＳＯＣで利用不可能なバッファアドレスとする段階をさらに備える請求項６に記載の方法。
【請求項８】
前記クライアントコンポーネントにより、前記クライアントコンポーネントが受信したデータパケットを、前記第１のバッファアドレスを前記クライアントコンポーネントに割り当てることに少なくとも部分的に基づいて、前記第１のバッファアドレスに対応するバッファ位置にバッファする段階をさらに備える請求項５に記載の方法。
【請求項９】
前記内部バッファポインタプールは第１の内部バッファポインタプールであり、
前記方法はさらに、
クライアントコンポーネントからの、前記クライアントコンポーネントが受信したデータパケットをバッファせよとのバッファ位置の分配要求を受信する段階と、
前記分配要求を受けると、前記第１の内部バッファポインタプールおよび第２の内部バッファポインタプールのいずれかを、バッファアドレスを前記クライアントコンポーネントに割り当てるべく、（ｉ）前記データパケットのサイズ、（ｉｉ）前記第１の内部バッファポインタプールに関連付けられているバッファ位置のサイズ、および、（ｉｉｉ）前記第２の内部バッファポインタプールに関連付けられているバッファ位置のサイズに少なくとも部分的に基づいて選択する段階と、
対応するバッファポインタを前記クライアントコンポーネントに割り当てることにより、選択された前記内部バッファポインタプールに関連付けられたバッファアドレスを前記クライアントコンポーネントに割り当てる段階とを備える請求項３に記載の方法。
【請求項１０】
前記内部バッファポインタプールは第１の内部バッファポインタプールであり、
前記方法はさらに、
前記第１の内部バッファポインタプールからのバッファアドレスが第１のクライアントコンポーネントに割り当てられるよう、前記第１の内部バッファポインタプールを前記第１のクライアントコンポーネントに関連付ける段階と、
第２の内部バッファポインタプールからのバッファアドレスが第２のクライアントコンポーネントに割り当てられるよう、前記第２の内部バッファポインタプールを前記第２のクライアントコンポーネントに関連付ける段階とを備える請求項３に記載の方法。
【請求項１１】
前記別の１以上のバッファアドレスを分配する段階は、
第１のバッファアドレスに関連付けられている第１のバッファ位置を解放せよとの解放要求をクライアントコンポーネントから受信する段階と、
前記解放要求を受けて、前記第１のバッファ位置を解放する段階と、
前記第１のバッファ位置が解放されると、前記第１のバッファアドレスを前記ＳＯＣで利用可能なバッファアドレスとする段階と、
前記第１のバッファアドレスが前記ＳＯＣで利用可能なバッファアドレスとされると、前記内部バッファポインタプールにおいて利用可能なバッファアドレスの数が前記高い閾値を上回る場合、前記別の１以上のバッファアドレスを前記ＳＯＣから前記メモリへ割り当てる段階とをさらに有する請求項２に記載の方法。
【請求項１２】
前記１以上のバッファアドレスは、第１の複数のバッファアドレスを含み、
前記メモリから前記第１の複数のバッファアドレスを前記ＳＯＣで取得する段階は、
前記メモリから前記第１の複数のバッファアドレスを前記ＳＯＣへ、前記メモリと前記ＳＯＣとの間の単一の処理として送信する段階をさらに有する請求項１に記載の方法。
【請求項１３】
クライアントコンポーネントと、
内部バッファポインタプール（ＩＢＰＰ）、及びコントローラを有するバッファ管理ユニット（ＢＭＵ）と
を備え、
前記コントローラは、
前記ＩＢＰＰにおける未割り当てのバッファポインタの数を監視して、
前記ＩＢＰＰにおける未割り当てのバッファポインタの数が閾値を下回る場合、外部バッファポインタプール（ＥＢＰＰ）から前記ＩＢＰＰに１以上のバッファポインタを分配するシステムオンチップ（ＳＯＣ）。
【請求項１４】
前記コントローラはさらに、
前記内部バッファポインタプールにおける未割り当てのバッファポインタの数が高い閾値を上回る場合、前記ＩＢＰＰから前記ＥＢＰＰへ別の１以上のバッファポインタを分配する請求項１３に記載のＳＯＣ。
【請求項１５】
前記ＩＢＰＰの前記バッファポインタは、前記ＳＯＣの外部にあるメモリの対応するバッファ位置を指し示す請求項１３に記載のＳＯＣ。
【請求項１６】
前記クライアントコンポーネントは、前記ＢＭＵとは別個のプロセッサコアである請求項１３に記載のＳＯＣ。
【請求項１７】
前記クライアントコンポーネントは、ネットワークインタフェースである請求項１３に記載のＳＯＣ。
【請求項１８】
前記ＥＢＰＰは、前記ＳＯＣの外部にあるメモリに格納される請求項１３に記載のＳＯＣ。
【請求項１９】
各バッファポインタプール（ＢＰＰ）が内部バッファポインタプール（ＩＢＰＰ）と外部バッファポインタプール（ＥＢＰＰ）とに論理的に分割される複数のＢＰＰを維持する段階と、
各ＢＰＰについて、対応するＩＢＰＰに複数のバッファポインタを動的に分配し、対応するＥＢＰＰに別の複数のバッファポインタを動的に分配する段階と
を備える方法。
【請求項２０】
前記複数のＢＰＰは、第１のＢＰＰおよび第２のＢＰＰを含み、
前記方法は、
第１のコンポーネントからバッファ分配要求を受信する段階と、
前記バッファ分配要求を受信すると、前記第１のＢＰＰおよび前記第２のＢＰＰのうちいずれかを選択する段階と、
選択された前記ＢＰＰに関連付けられている前記ＩＢＰＰからのバッファポインタを前記第１のコンポーネントに割り当てる段階とをさらに備える請求項１９に記載の方法。
【請求項２１】
各ＢＰＰについて、対応するＩＢＰＰと対応するＥＢＰＰとの間でバッファポインタの動的再分配を行って前記ＩＢＰＰにおける未割り当てのバッファポインタを閾値数に維持する段階をさらに備える請求項２０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の実施形態は、概してバッファに係り、より詳しくは、バッファマネージャおよびメモリ管理方法に係る。
【０００２】
［関連出願］
本願は、２０１０年３月１８日に提出された米国特許出願第６１／６１５，３２７号および２０１０年５月２５日に提出された米国特許出願第６１／３４７，９４７号の優先権を主張しており、本明細書と矛盾する箇所を除いて、これらの明細書全体をここに全ての目的で参照として組み込む。本願は、２０１０年１１月１６日に提出された米国特許出願第１２／９４７６７８号（ＭＰ３４４４）、２０１１年３月１日に提出された米国特許出願第１３／０３８，２７９号（代理人整理番号ＭＰ３５９９）、および２０１１年３月１日に提出された米国特許出願第１３／０３８，２５８号（代理人整理番号ＭＰ３５８０）に関連しており、本明細書と矛盾する箇所を除いて、これらの明細書全体をここに全ての目的で参照として組み込む。
【背景技術】
【０００３】
そうではないと明記しない限り、このセクションで記載される方法は、本開示の請求項に対する先行技術ではなく、このセクションに含まれる事項を先行技術であると自認したと解釈されるべきではない。
【０００４】
従来のコンピューティングシステムでは、バッファ管理は概してプロセッサコアで行われてきた。例えばプロセッサコアはデータをバッファするためにバッファを分配し、バッファされたデータがバッファから取り除かれたときにバッファを解放している。これらの処理により、プロセッサコアのリソースが大量に消費される。
【発明の概要】
【課題を解決するための手段】
【０００５】
様々な実施形態において、本開示は、システムオンチップ（ＳＯＣ）の複数のバッファアドレスを管理する段階と、ＳＯＣにおける利用可能なバッファアドレスの数が低い閾値を下回る場合、ＳＯＣの外部にあるメモリから１以上のバッファアドレスをＳＯＣで取得する段階とを備える方法を提供する。ＳＯＣにおける利用可能なバッファアドレスの数が高い閾値を上回る場合、別の１以上のバッファアドレスをＳＯＣからメモリに分配する段階をさらに備える。クライアントコンポーネントと、バッファ管理ユニット（ＢＭＵ）とを備え、バッファ管理ユニット（ＢＭＵ）は、内部バッファポインタプール（ＩＢＰＰ）と、コントローラとを有し、コントローラは、ＩＢＰＰにおける未割り当てのバッファポインタの数を監視して、ＩＢＰＰにおける未割り当てのバッファポインタの数が閾値を下回る場合、外部バッファポインタプール（ＥＢＰＰ）からＩＢＰＰに１以上のバッファポインタを分配するシステムオンチップ（ＳＯＣ）も適用される。さらに、各ＢＰＰが内部バッファポインタプール（ＩＢＰＰ）と外部バッファポインタプール（ＥＢＰＰ）とに論理的に分割される複数のバッファポインタプール（ＢＰＰ）を維持する段階と、各ＢＰＰについて、対応するＩＢＰＰに複数のバッファポインタを動的に分配し、対応するＥＢＰＰに別の複数のバッファポインタを動的に分配する段階とを備える方法も提供される。
【０００６】
以下の詳細な記載は図面を参照しながら行われるが、図面は本明細書の一部を構成するものであり、全図面にわたり同様の参照番号は同様の部材を示し、図面は本開示の原理を示す実施形態の形で示されている。また、他の実施形態の利用も可能であり、本開示の範囲を逸脱せずとも構造上および論理上の変更が可能である。従って以下の詳細な記載は限定的に捉えられるべきではなく、本開示における実施形態の範囲は、添付請求項およびそれらの均等物によってのみ定義されるべきである。
【図面の簡単な説明】
【０００７】
【図１】本開示の一実施形態における、バッファ管理ユニットを含むシステムオンチップを含むパケット通信システムを概略する。
【０００８】
【図２】本開示の一実施形態における図１のパケット通信システムの例示的な外部バッファポインタプールを概略する。
【０００９】
【図３】本開示の一実施形態における、図１のバッファ管理ユニットをより詳細に概略する。
【００１０】
【図４】本開示の一実施形態における図１および図３のパケット通信システムを作動させる例示的な方法を示す。
【００１１】
【図５】本開示の一実施形態における図１および図３のパケット通信システムを作動させる別の例示的な方法を示す。
【発明を実施するための形態】
【００１２】
図１は、本開示の一実施形態における、バッファ管理ユニット（ＢＭＵ）２４を含むシステムオンチップ（ＳＯＣ）１０を含むパケット通信システム１００（システム１００と称する場合もある）の一部を選択して概略する。本開示の教示を曖昧にしない配慮から、図面にはシステム１００の別の部分を示さない。示されているＳＯＣ１０は、さらに１以上のプロセッサコア（例えばプロセッサコア１２ａ、…、プロセッサコア１２Ｍ、Ｍは適切な正の整数である）を含む。
【００１３】
システム１００は、１以上のネットワークインタフェース（例えばネットワークインタフェース１６ａ、ネットワークインタフェース１６ｂ、…、ネットワークインタフェース１６Ｐ、Ｐは適切な正の整数である）を含む。図１に示す通り、ネットワークインタフェースの１以上（例えばネットワークインタフェース１６ｂ）は、ＳＯＣ１０の外部にあり、残りのネットワークインタフェースのうちの１以上（例えばネットワークインタフェース１６ａ、ネットワークインタフェース１６ｂ、…、ネットワークインタフェース１６Ｐ）は、ＳＯＣ１０の内部にある。一実施形態では、ネットワークインタフェース１６ａ、…、１６Ｐは、ネットワークスイッチ、ネットワークルータ、ネットワークポート、イーサネット（登録商標）ポート（ギガバイトイーサネット（登録商標）ポート）、ネットワークコントローラ、その他のネットワーク接続および／またはその他を有する適切なデバイス等のネットワークデバイスである。一実施形態では、ＳＯＣ１０は、ネットワークスイッチまたはルータに関連付けられている。例えばネットワークスイッチは、ＳＯＣ１０上に位置していてよい。
【００１４】
一実施形態では、ＳＯＣ１０はさらに、ネットワークインタフェース１６ａ、…、１６Ｐ、プロセッサコア１２ａ、…、１２Ｍ、ＢＭＵ２４、およびメモリコントローラ４０に動作可能に連結された共有バス２０を含む。様々な他の実施形態では、図１には示されていないが、共有バス２０の代わりに、ＳＯＣ１０が、複数のバス（例えばＳＯＣ１０の２つのコンポーネント間の専用バス、ＳＯＣ１０の幾らかのコンポーネントにより共有されるバス等）を含む。メモリコントローラ４０は、メモリ４４に動作可能に連結されてこれを制御する。一実施形態では、メモリコントローラ４０は、１以上のコンポーネントから（例えば、ＢＭＵ２４、複数のプロセッサコアおよび／または複数のネットワークインタフェースうちの１つから）、共有バス２０を介してメモリ４４に対して命令の読み書きを行い、受信した命令をメモリ４４が許可できるフォーマットに翻訳する。つまり、メモリコントローラ４０は、共有バス２０を介して、メモリ４４とシステム１００の様々な他のコンポーネントとの間のインタフェースとして機能する。図１に示すように、一実施形態では、メモリ４４はＳＯＣ１０の外部にあるが、他の実施形態では、メモリ４４がＳＯＣ１０の内部にある。一実施形態では、メモリ４４は、ＤＲＡＭ（例えばＤＤＲ３、ＳＤＲＡＭ））である。
【００１５】
ＳＯＣ１０は通常様々な他のコンポーネント（例えば１以上の周辺機器、インタフェース、および／またはその他）を含むが、明瞭性を期す目的からこれらのコンポーネントは図１から省いている。例えば、図１には示していないが、ＳＯＣ１０は、データパケットストリームを処理するパケット処理モジュールを含み、１以上のパケット処理機能（例えばデータパケットのブリッジ）を行う。同様に図１には示していないが、ＳＯＣ１０は、様々な周辺機器および物理層コンポーネント（シリアライザ／デシリアライザ（ＳＥＲＤＥＳ）モジュール、１以上のポート、ネットワークスイッチ等）を含む。一実施形態では、ＳＯＣ１０は、ＳＯＣ１０のアプリケーション領域に基づく様々な他のコンポーネントを含む。
【００１６】
一実施形態では、メモリ４４は、複数のバッファ位置（例えばバッファ位置50_a1, …, 50_aR, 50_b1, …, 50_bS, …, 50_N1, …, 50_NT、Ｒ、Ｓ、ＴおよびＮは適切な正の整数である）を含む。メモリ４４に含まれるバッファ位置各々は、１以上のバイトのデータをバッファする。例えば、各バッファ位置50_a1, …, 50_aRは、３２バイトのデータを格納し、各バッファ位置50_b1, …, 50_bSは、２５６バイトのデータを格納し、各バッファ位置50_N1, …, 50_NTは、１０５６バイトのデータを格納する、といった具合である。一実施形態では、図示されているバッファ位置のうち１以上が、メモリ４４内で連続するバッファ位置である。
【００１７】
プロセッサコア１２ａ…、プロセッサコア１２Ｍ、ネットワークインタフェース１６ａ、…、および／またはネットワークインタフェース１６Ｐ（および／または、図１に示していないＳＯＣ１０の１以上の他のコンポーネント（例えばＳＯＣ１０のインタフェースコントローラ、ＳＯＣ１０のエンジン等））は、ＢＭＵ２４からサービスを受け（ＢＭＵ２４がこれらコンポーネントのうち１以上に対してバッファ位置を分配する）、プロセッサコア１２ａ、…、プロセッサコア１２Ｍ、ネットワークインタフェース１６ａ、…、および／またはネットワークインタフェース１６Ｐ（および／またはＢＭＵ２４からサービスを受ける任意の他のコンポーネント）も、本明細書ではＢＭＵ２４のクライアントコンポーネントと称する。ＢＭＵ２４のクライアントコンポーネントがデータパケットを受信して、データパケットをバッファしようとする場合、クライアントコンポーネントは、バッファ位置の分配要求（本明細書ではバッファ位置分配要求またはバッファ分配要求とも称する）をＢＭＵ２４に送信する。後述するように、分配要求に基づいて、ＢＭＵ２４は、クライアントコンポーネントにバッファ位置を分配する。
【００１８】
一実施形態では、ＢＭＵ２４は、複数のバッファポインタプール（ＢＰＰ）に関連付けられ、各ＢＰＰはバッファポインタのリストを含み、バッファポインタは、メモリ４４における対応するバッファ位置のアドレスまたはポインタである。例えば、図１には示していないが、システム１００は、BPP_a, …, BPP_N（つまり、Ｎ個のＢＰＰ）を含む。各ＢＰＰは、内部バッファポインタプール（ＩＢＰＰ）および外部バッファポインタプール（ＥＢＰＰ）という２つの論理セクションに分割される。図１は、ＩＢＰＰおよびＥＢＰＰのみを示し、ＢＰＰは示していない。例えば、BPP_aがＩＢＰＰ３２ａおよびＥＢＰＰ３６ａに分割され、BPP_bがＩＢＰＰ３２ｂおよびＥＢＰＰ３６ｂに分割され、BPP_NがＩＢＰＰ３２ＮおよびＥＢＰＰ３６Ｎに分割される、といった具合である。図１に示すように、様々なＢＰＰのＩＢＰＰ（つまりＩＢＰＰ３２ａ、ＩＢＰＰ３２ｂ、…、ＩＢＰＰ３２Ｎ）が、ＢＭＵ２４の内部に格納される。図１に示すように、様々なＢＰＰのＥＢＰＰ（つまりＥＢＰＰ３６ａ、ＥＢＰＰ３６ｂ、…、ＥＢＰＰ３６Ｎ）は、ＢＭＵ２４の外部の位置に（例えばメモリ４４に）格納される。
【００１９】
後で詳述するように、一実施形態では、ＢＭＵ２４は、各ＩＢＰＰについて、ＩＢＰＰ（例えばＩＢＰＰ３２ａ）における未割り当てのバッファポインタ（例えば、いずれのクライアントコンポーネントにも割り当てられておらず、クライアントコンポーネントに対する割り当ての準備が整っているもの）の数を監視するＢＭＵコントローラ２８を含む。例えば、未割り当てのバッファポインタは、分配の準備が整っている対応するバッファアドレスを含む。図１には示していないが、一実施形態では、ＢＭＵコントローラ２８は、各ＩＢＰＰについて、高い閾値および低い閾値を維持する（別の実施形態では、ＢＭＵコントローラ２８は、２以上のＩＢＰＰ間で高い閾値および低い閾値を共有する）。後で詳述するように、ＢＭＵコントローラ２８は、各ＢＰＰについて、対応するＩＢＰＰおよび対応するＥＢＰＰ間でバッファポインタを動的に転送して、ＩＢＰＰ内の未割り当てのバッファポインタの数を、対応する低い閾値と高い閾値との間に維持する。例えば、ＩＢＰＰ内の未割り当てのバッファポインタの数が低い閾値を下回った場合、ＢＭＵコントローラ２８は、対応するＥＢＰＰ（例えばＥＢＰＰ３６ａ）からＩＢＰＰ３２ａに１以上のバッファポインタを分配する。他方で、ＩＢＰＰ内の未割り当てのバッファポインタの数が高い閾値レベルを超えた場合には、ＢＭＵコントローラ２８は、ＩＢＰＰ３２ａからＥＢＰＰ３６ａへ別の１以上のバッファポインタを分配する。従ってＢＭＵコントローラ２８は、各ＩＢＰＰについて、１以上のクライアントコンポーネントに対して少なくとも幾つかの未割り当てのバッファポインタの分配準備が整っているようにする（尤も、一実施形態では、ＩＢＰＰおよび対応するＥＢＰＰの両方に未割り当てのバッファポインタが残っていない場合、ＩＢＰＰは分配準備が整ったバッファポインタを持たない場合もある）。つまり、ＳＯＣ１０でローカルに管理される少なくとも幾つかのバッファを、常にクライアントコンポーネントに対する分配準備が整った状態にしておく。
【００２０】
図１には示していないが、一実施形態では、ＥＢＰＰ３６ａ、…、３６Ｎは、バッファ位置50_a1, …, 50_NTが含まれているメモリとは異なるメモリに格納される。例えば、ＥＢＰＰ３６ａ、…、３６Ｎおよびバッファ位置50_a1, …, 50_NTが、２以上の異なるメモリに格納される。一実施形態では、１以上のバッファ位置がそれぞれ異なるメモリにあってよい（例えば、図１には示していないが、バッファ位置50_a1がメモリ４４にあり、バッファ位置50_b1がメモリ４４とは異なるメモリ（ＳＯＣ１０の内部または外部いずれであってもよい）にあってよい）。
【００２１】
前述したように、各ＢＰＰは、バッファポインタのリストを含み、ここでバッファポインタは、対応するバッファ位置のアドレスまたはポインタである。例えばBPP_aが、バッファ位置50_a1, 50_a2, …, 50_aRに対応するＲ個のバッファポインタを含み、BPP_bがバッファ位置50_b1, 50_b2, …, 50_bSに対応するＳ個のバッファポインタを含み、BPP_Nが、バッファ位置50_N1, 50_N2, …, 50_NTに対応するＴ個のバッファポインタを含む、といった具合である。
【００２２】
ＢＭＵ２４は、ＢＰＰに関連するバッファポインタをＥＢＰＰからＩＢＰＰへ、および／またはＩＢＰＰからＥＢＰＰへ、動的に分配するＢＭＵコントローラ２８を含む。一実施形態では、ＢＭＵコントローラ２８は、各ＩＢＰＰに対応してカウントＭを格納する。例えば、ＢＭＵコントローラ２８は、ＩＢＰＰａ、…ＩＢＰＰＮに対応してカウントＭａ、…、ＭＮを格納する。一実施形態では、後で後述するように、ＩＢＰＰに対応するカウント（例えば、ＩＢＰＰａに対応するカウントＭａ）は、ＩＢＰＰにおける未割り当てのバッファポインタのカウント（例えば、未割り当てのバッファポインタの数）を維持する。ＢＭＵ２４は、図１では明瞭性を期す目的から示されていない１以上の他のコンポーネント（例えば送信ポート、受信ポート、送信キュー等）も含む。
【００２３】
各ＢＰＰについて、ＢＭＵ２４（および／またはプロセッサコア１２ａ、プロセッサコア１２ｂ、および／または、システム１００の任意の他の適切なコンポーネント）は（例えばシステム１００の起動時に）、ＢＰＰのバッファポインタの一部を対応するＩＢＰＰに割り当て、ＢＰＰの残りのバッファポインタを対応するＥＢＰＰに分配する。例えば、BPP_aに含まれるＲ個のバッファポインタのうち、Ｒ１個のバッファポインタがＩＢＰＰ３２ａに動的に分配され、残りのＲ２個のバッファポインタがＥＢＰＰ３６ａに分配される。
【００２４】
クライアントコンポーネント（例えば、図１のプロセッサコアおよび／またはネットワークインタフェース、および／またはＳＯＣ１０の内部または外部にあってよいシステム１００の任意の他の適切なコンポーネントのいずれか）がバッファ位置にデータパケットをバッファする必要がある場合、クライアントコンポーネントはＢＭＵ２４にバッファ分配要求を送信する。受信したバッファ分配要求に基づいて、ＢＭＵ２４は、バッファポインタを適切なＩＢＰＰからクライアントコンポーネントに割り当てることにより、クライアントコンポーネントにバッファ位置を割り当てる。
【００２５】
ＩＢＰＰに分配された個々のバッファポインタは、ＩＢＰＰリストに追加され、これらは未割り当てである（例えば、いずれのクライアントにも割り当てられていないが、クライアントコンポーネントへの割り当て準備が整っている）。ＩＢＰＰからの未割り当てのバッファポインタ（例えば、バッファ位置50_a2に対応する、ＩＢＰＰ３２ａからのバッファポインタ）をクライアントコンポーネントに割り当てる場合、このバッファポインタをＩＢＰＰリストから除外して、ＩＢＰＰにおける未割り当てのバッファポインタの数を１減少させる。バッファポインタがクライアントコンポーネントに割り当てられると、クライアントコンポーネントは、対応するバッファ位置に（例えばバッファ位置50_a2に）データパケットを格納したり書き込んだりすることができるようになる。
【００２６】
他方で、バッファ位置（例えばバッファ位置50_a2）のコンテンツを、クライアントコンポーネントが読み出す場合には、バッファ位置は自由になる（つまり、将来の格納に利用可能となる）。従って、ＢＭＵ２４により対応するバッファポインタ（以前にクライアントコンポーネントに対して割り当てられたもの）が解放され（つまり、バッファポインタがＩＢＰＰに追加され、「未割り当て」と示される）、このバッファポインタが将来の割り当てに利用可能とされる。つまり、バッファ位置からの読み出しに基づいて、対応するバッファポインタを解放し、これにより、対応するＩＢＰＰの未割り当てのバッファポインタ数が増加する（例えば１増加する）。
【００２７】
前述したように、ＩＢＰＰに対応するカウント（例えばＩＢＰＰａに対応するカウントＭａ）は、ＩＢＰＰの未割り当てのバッファポインタのカウントを維持する。一実施形態では、ＩＢＰＰ内の未割り当てのバッファポインタ数が、対応する低い閾値よりも減少すると（例えば、ＩＢＰＰから１以上のクライアントコンポーネントへのバッファポインタの割り当てによって減少すると）、ＢＭＵ２４は、１以上のバッファポインタを、対応するＥＢＰＰからＩＢＰＰへ再分配する。例えば、ＩＢＰＰ３２ａから１以上のクライアントコンポーネントに対するバッファポインタの割り当てにより、ＩＢＰＰ３２ａ内の未割り当てのバッファポインタ数が低い閾値よりも減少する場合がある。ＩＢＰＰ３２ａ内の未割り当てのバッファポインタ数が低い閾値よりも減少すると、複数のバッファポインタを対応するＥＢＰＰ（つまりＥＢＰＰ３６ａ）からＩＢＰＰ３２ａへ再分配する。この複数の再分配を行われるバッファポインタ（例えば３２個のバッファポインタ）は、ＥＢＰＰ３６ａからＩＢＰＰ３２ａへ送信され、ＩＢＰＰ３２ａに格納され、１以上のクライアントへの将来の分配に備えさせる。このようにバッファポインタをＥＢＰＰから対応するＩＢＰＰへ再分配することにより、１以上のクライアントコンポーネントに対する分配準備が整ったバッファポインタが少なくとも幾つか常にＩＢＰＰに存在するようすることができる（つまり、幾つかの未割り当てのバッファポインタが常にＩＢＰＰ内に存在するようにすることができる）。言い換えると、少なくとも幾つかのバッファが、クライアントコンポーネントへの分配準備が整った状態で、常にＳＯＣでローカルに管理されていることになる。
【００２８】
他方で、１以上のクライアントコンポーネントがバッファポインタを解放すると、ＩＢＰＰ内の未割り当てのバッファポインタ数が対応する高い閾値より増加することがある。ＩＢＰＰ内の未割り当てのバッファポインタ数が高い閾値より増加した場合には、ＩＢＰＰの複数のバッファポインタを対応するＥＢＰＰに再分配する。このようにバッファポインタを再分配することにより、ＩＢＰＰが未割り当てのバッファポインタで溢れることがなくなり、ＢＭＵ２４内の全てのＩＢＰＰが必要とする格納スペースを比較的制限することができる。つまり、ＳＯＣでローカルに管理されるバッファの数を制限して、ＳＯＣ上での管理容易性を維持することができる。
【００２９】
一実施形態では、低い閾値および高い閾値は設定可能である。例えば、常にＩＢＰＰ内に未割り当てのバッファポインタが存在するよう、また、ＩＢＰＰのバッファポインタを格納するためにＳＯＣ１０で必要とされる格納スペースを比較的小さくするよう、低い閾値および高い閾値を設定することができる。
【００３０】
ＩＢＰＰおよび対応するＥＢＰＰ間のバッファポインタの送信（例えば、バッファポインタを再分配する間の）は、バッファポインタのバッチで行われてよい。例えば、３２個のバッファポインタが、ＥＢＰＰ３６ａからＩＢＰＰ３２ａへ、またこの逆方向に、単一のバッチとして再分配を行われ送信される（例えば３２個のバッファポインタが、ＥＢＰＰ３６ａからＩＢＰＰ３２ａへ、またはこの逆方向に、単一の処理または単一の送信で送信される）。一実施形態では、このようなバッファポインタのバッチ送信（例えば、３２個のバッファポインタを別個に送信する代わりに）によって、メモリ４４に対する処理数、バス２０への負荷、メモリコントローラ４０への負荷、および／または送信の帯域幅要件を減少させることができる。
【００３１】
一実施形態では、場合によって、１以上のバッファポインタをＥＢＰＰから直接１以上のクライアントコンポーネントに割り当てることができる。例えば、対応するＥＢＰＰからＩＢＰＰへのバッファポインタのバッチの再分配および送信の前にＩＢＰＰ内の未割り当てのポインタが枯渇すると（例えば、クライアントコンポーネントに対して幾つかのバッファポインタを高速に割り当てることにより高速に枯渇する場合等）、１以上のバッファポインタをＥＢＰＰから直接１以上のクライアントコンポーネントに割り当てることができる。
【００３２】
別の実施形態では、ＳＯＣ１０は、例えばＳＯＣ１０の外部から生じた複数のトラフィックの流れから受信したデータパケットを処理する。ＳＯＣ１０が処理するデータパケットのサイズは場合によって大きく変わりうる。一実施形態では、バッファポインタに割り当てるためのＩＢＰＰの選択を、バッファされるデータパケットのサイズに少なくとも部分的に基づいて行う。例えば、単一のＢＰＰに関連付けられる個々のバッファ位置は同様のサイズであるが、異なるＢＰＰに関連付けられるバッファ位置は互いに異なるサイズである。例えば、BPP_aに関連付けられるバッファ位置50_a1, …, 50_aRは各々、３２バイトの格納容量を有する。他方で、BPP_bに関連付けられるバッファ位置50_b1, …, 50_bSは各々、２５６バイトの格納容量を有する。従って、クライアントコンポーネント（例えばネットワークインタフェース１６ａ）が１６バイトのデータパケットをバッファしようとする場合、ＢＭＵ２４は、このクライアントコンポーネントに、ＩＢＢＰ３２ａから１つのバッファポインタ（バッファ位置50_a1, …, 50_aRのいずれか１つ）を割り当てる。一方で、クライアントコンポーネントが１２８バイトのデータパケットをバッファしようとする場合には、ＢＭＵ２４は、このクライアントコンポーネントに、ＩＢＢＰ３２ｂから１つのバッファポインタ（バッファ位置50_b1, …, 50_bSのいずれか１つ）を割り当てる。
【００３３】
一実施形態では、マルチコアシステム（例えばＳＯＣ１０）の場合に、各ＢＰＰは対応するプロセッサコアに関連付けられている。例えば、プロセッサコア１２ａがBPP_aを割り当てられ（つまりＩＢＰＰ３２ａがプロセッサコア１２ａにバッファポインタを割り当てる）、プロセッサコア１２ｂがBPP_bを割り当てられる（つまりＩＢＰＰ３２ｂがプロセッサコア１２ｂにバッファポインタを割り当てる）、といった具合である。つまり、各プロセッサコアは自身のバッファ領域を有する。従って一実施形態では、バッファポインタプールの分配を、バッファされるべきデータパケットの始点に基づいて行う（例えば、データパケットがプロセッサコア１２ａ、プロセッサコア１２ｂ、および／またはその他から始まっているか）。
【００３４】
一実施形態では、バッファポインタを割り当てるためのＩＢＰＰの選択を、任意の他の適切な基準に基づいて行うこともできる。
【００３５】
一実施形態では、ＢＭＵ２４によるバッファポインタの管理および／または割り当ては、プロセッサコア１２ａ、…、１２Ｍに管理されることなく、または最小限の管理下で行うことができる。つまり、ＢＭＵ２４の利用により、プロセッサコアをバッファ管理および／または割り当てから解放することができ、これによりプロセッサコアの処理電力を大幅に節電することができる。これに比して、従来のバッファ管理システムでは、プロセッサコアがバッファ管理および／または割り当てを行っている。
【００３６】
ＩＢＰＰおよび対応するＥＢＰＰを管理してＩＢＰＰからバッファポインタを割り当てる（ＥＢＰＰから割り当てるのではなく）ことには幾つかの利点がある。例えば、ＩＢＰＰおよびクライアントコンポーネントの１以上を全てＳＯＣ１０内に位置させることができる。従って、ＩＢＰＰからバッファポインタをクライアントコンポーネントに割り当てる速度は、ＥＢＰＰからバッファポインタをクライアントコンポーネントに割り当てる速度より比較的高速である。さらに、ＥＢＰＰを維持することにより（例えば全てのバッファポインタをＩＢＰＰに格納する代わりに）、ＩＢＰＰのバッファポインタの格納に要される格納サイズを比較的小さくすることができる（これは、ＳＯＣ１０の格納容量が、ＳＯＣ１０の外部にあるメモリ４４の格納容量よりも比較的制限されているからである）。
【００３７】
一実施形態では、バッファ位置に関連付けられている記述子は、バッファ位置の物理アドレスと仮想アドレスとを含む。一実施形態では、ＢＭＵ２４は、その物理アドレスを利用してバッファポインタを割り当てる、および／または、解放する。別の実施形態では、各バッファ位置（例えばバッファ位置50_a1）が物理アドレスおよび仮想アドレスの両方を含むので、ＢＭＵ２４がバッファポインタを割り当てる、および／または、解放するとき、これら物理アドレスおよび仮想アドレスの両方が割り当てられる、および／または、解放される。
【００３８】
仮想アドレスを処理する別の方法として、各仮想アドレスをバッファ自身に書き込む、というものがある（例えばシステムの初期化段階中に書き込むことができる）。この場合には、ＢＭＵ２４は、バッファポインタを分配する際に、バッファの物理アドレスのみをクライアントに送信する。そしてクライアントは、必要に応じて、バッファ自身からバッファの仮想アドレスを読み出すことができる（例えば、仮想アドレスが３２ビットの長さである場合には、バッファの最初の４バイト分から読み出すことができる）。
【００３９】
従来のシステムでは、通常、プロセッサコアがバッファ割り当てを管理する。通常、この従来のシステムではプロセッサコアは仮想アドレスを処理するので、バッファ位置における仮想アドレスのみを記録する。これと比して、システム１００のバッファ位置はプロセッサコア、ネットワークインタフェース、ＢＭＵ２４、および／またはＢＭＵ２４の任意の適切なクライアントコンポーネントによるアクセスを受ける。一例では、ネットワークインタフェースおよび／またはＢＭＵ２４はバッファ位置の物理アドレスを利用してバッファ位置にアクセスし、プロセッサコアはバッファ位置の仮想アドレスを利用してバッファ位置にアクセスする。従って、ＢＭＵ２４は、バッファ位置の物理アドレスおよび仮想アドレス両方を対応するバッファ位置記述子に維持し、これにより、プロセッサコアおよびネットワークインタフェースの両方が（および／または、ＢＭＵ２４の任意の他のクライアントコンポーネントが）、バッファ位置に途切れなくアクセスできるようになる。
【００４０】
図２は、本開示の一実施形態における図１のシステム１００の例示的なＥＢＰＰ（例えばＥＢＰＰ３６ａ）を概略する。例えば、ＥＢＰＰ３６ａは、８つのバッファポインタ２１０ａ、…、２１０ｈを含むが、他の実施形態では、ＥＢＰＰ３６ａは、任意の他の適切な数のバッファポインタを含んでよい。
【００４１】
陰なしで示されているバッファポインタ２１０ｃ、…、２１０ｅは、ＩＢＰＰ３２ａへの再分配に利用可能である。バッファポインタ２１０ａ、２１０ｂ、２１０ｆ、…、２１０ｈは（例えば先頭アドレスおよび後尾アドレスの間のバッファポインタ）は、再分配には利用できないので（例えばバッファポインタリストの一部ではないことから）、グレーの陰を付して示している。図２は、ＩＢＰＰ３２ａに既に分配されたバッファポインタ（例えばバッファポインタ２１０ａ、２１０ｂ、２１０ｆ、…、２１０ｈ）を格納するＥＢＰＰ３６ａを示しているが、一実施形態では、ＥＢＰＰ３６ａはこれらバッファポインタを格納しなくてもよい。
【００４２】
一実施形態では、ＥＢＰＰ３６ａに含まれるバッファポインタは連続するアドレスを有する。例えば、バッファポインタ２１０ｂのアドレスは、バッファポインタ２１０ａのアドレスを増分することで生成でき、バッファポインタ２１０ｃのアドレスは、バッファポインタ２１０ｂのアドレスを増分することで生成できる、といった具合である。ＥＢＰＰ３６ａに関連付けられている開始アドレスは、ＥＢＰＰ３６ａの最初のバッファポインタ（例えばバッファポインタ２１０ａ）のアドレス（例えば仮想アドレスおよび／または物理アドレス）のことであってよい。ＥＢＰＰ３６ａに関連付けられている最終アドレスは、ＥＢＰＰ３６ａの最終のバッファポインタ（例えばバッファポインタ２１０ｈ）のアドレス（例えば仮想アドレスおよび／または物理アドレス）のことであってよい。一実施形態においてバッファポインタはＥＢＰＰ３６ａからＩＢＰＰ３２ａへ（またこの逆の方向に）バッチで再分配を行われ、ＥＢＰＰ３６ａの連続するバッファポインタ２１０ｃ、…、２１０ｅは、ＩＢＰＰ３２ａへの再分配に利用可能である。ＥＢＰＰ３６ａに関連付けられている先頭アドレスは、ＩＢＰＰ３２ａへの再分配に利用可能な複数のバッファポインタ（例えばバッファポインタ２１０ｃ、２１０ｄ、２１０ｅ）の最初のバッファポインタ（例えばバッファポインタ２１０ｃ）のアドレス（例えば仮想アドレスおよび／または物理アドレス）のことである。ＥＢＰＰ３６ａに関連付けられている後尾アドレスは、ＩＢＰＰ３２ａへの再分配に利用可能な複数のバッファポインタ（例えばバッファポインタ２１０ｃ、２１０ｄ、２１０ｅ）の最後のバッファポインタ（例えばバッファポインタ２１０ｅ）のアドレス（例えば仮想アドレスおよび／または物理アドレス）のことである。ＥＢＰＰ３６ａの先頭アドレスおよび後尾アドレスは、ＩＢＰＰ３２ａおよびＥＢＰＰ３６ａの間でバッファポインタが割り当てられる、および／または、再分配を行われる場合に、動的に変化する。
【００４３】
一実施形態では、ＢＭＵ２４は、開始アドレスおよび最終アドレス、並びに、ＥＢＰＰ３６ａの現在の先頭アドレスおよび後尾アドレスを格納する。これらアドレスに基づいて、ＢＭＵ２４は、ＩＢＰＰ３２ａへの再分配に利用可能な、ＥＢＰＰ３６ａ内のバッファポインタの数を認識することができる。例えば、先頭アドレスおよび後尾アドレスの差異を、ＩＢＰＰ３２ａへの再分配に利用可能なバッファポインタの数の指標として利用することができる。
【００４４】
図２には示していないが、個々のＩＢＰＰも、対応する開始アドレス、最終アドレス、先頭アドレス、および、後尾アドレスを含む。例えば、ＩＢＰＰの先頭アドレスとは、クライアントコンポーネントへの割り当てに利用可能な複数のバッファポインタの最初のバッファポインタのアドレスのことである。同様に、ＩＢＰＰの後尾アドレスとは、クライアントコンポーネントへの割り当てに利用可能な複数のバッファポインタの最後のバッファポインタのアドレスのことである。前述したように、ＩＢＰＰに対応するカウント（例えばＩＢＰＰａに対応するカウントＭａ）は、ＩＢＰＰにおける未割り当てのバッファのカウントを維持する。例えばカウントＭａは、ＩＢＰＰａの先頭アドレスと後尾アドレスとの間のバッファポインタの数を維持することにより、ＩＢＰＰａにおける未割り当てのバッファポインタの数のカウントを維持する。
【００４５】
図３は、本開示の一実施形態における、図１のＢＭＵ２４をより詳細に概略する。ＢＭＵ２４は、ＩＢＰＰ３２ａ、…、ＩＢＰＰ３２Ｎを格納するＩＢＰＰ格納ユニット３２を含む。ＢＭＵ２４はさらに、ＢＭＵコントローラ２８、ＢＭＵ直接メモリアクセス（ＤＭＡ）３１２、およびレジスタファイル３１６を含む。
【００４６】
図１および図３によると、一実施形態では、ＢＭＵ３２はさらに、１以上のクライアントコンポーネント（例えば図３に示していないネットワークインタフェース１６ｃ）および／またはメモリ４４から、共有バス２０を介してデータおよび／または命令を受信する受信ポート３０４を含む。例えば、ＢＭＵ２４は、１以上のクライアントコンポーネントからのバッファ分配要求およびバッファ解放要求を受信し、さらに、前述したように１以上のＥＢＰＰから再分配されたバッファポインタを受信する。ＢＭＵ２４はさらに、マルチプレクサ３４４、送信キュー３２４（例えばＦＩＦＯキュー）および送信ポート３２８を含む。
【００４７】
ＢＭＵ２４の受信ポート３０４で受信したデータおよび／または命令は、受信キュー３２０（例えばＦＩＦＯキュー）に入り、ＢＭＵコントローラ２８に、ＩＢＰＰのいずれか１つに、ＢＭＵ  ＤＭＡ３１２に、および／または、レジスタファイル３１６に選択的に送信される。
【００４８】
ＢＭＵコントローラ２８は、様々なＩＢＰＰおよびＥＢＰＰの開始アドレス、最終アドレス、先頭アドレス、および／または、後尾アドレスを格納するバッファポインタアドレスプール３０８を含む。ＢＭＵコントローラ２８はさらに、書き込みロジック３４８、読み出しロジック３５２、およびマルチプレクサ３４０を含む。
【００４９】
一実施形態では、ＢＭＵコントローラ２８は、バッファポインタアドレスプール３０８の様々なアドレスを監視することで、ＩＢＰＰおよびＥＢＰＰの各々における未割り当てのバッファポインタを記録する。ＩＢＰＰにおける未割り当てのバッファポインタの数を、前述した高い閾値および低い閾値と比較することにより、ＢＭＵコントローラ２８は、バッファポインタをＩＢＰＰから対応するＥＢＰＰへ、または、ＥＢＰＰからＩＢＰＰへ再分配する必要があるかを判断する。バッファポインタをＥＢＰＰからＩＢＰＰへ再分配する場合には、ＢＭＵ  ＤＭＡ３１２は、マルチプレクサ３４４、送信キュー３２４、および送信ポート３２８を介して、ＥＢＰＰに対してプル要求を送信する。
【００５０】
バッファポインタをＩＢＰＰから対応するＥＢＰＰに再分配する場合には、ＢＭＵ  ＤＭＡ３１２は、マルチプレクサ３４０および読み出しロジック３５２を介して、ＩＢＰＰに対してプッシュ要求を送信する（例えば、ＩＢＰＰから対応するＥＢＰＰにバッファポインタを再分配させるように）。  プッシュ要求を受信すると、ＩＢＰＰは、再分配されたポイントバッファを、マルチプレクサ３４４、送信キュー３２４、および送信ポート３２８を介して、メモリ４４の対応するＥＢＰＰに送信する。マルチプレクサ３４４は、ＩＢＰＰ格納ユニット３２、ＢＭＵ  ＤＭＡ３１２、およびレジスタファイル３１６からの入力を、例えばこれらコンポーネントのいずれかからの入力がイネーブルされると選択的にマルチプレックスする。
【００５１】
ＢＭＵコントローラ２８がバッファ分配要求を受信すると、ＢＭＵコントローラ２８は、例えばバッファされるデータパケットのサイズ、要求を送ってきたクライアントコンポーネント、様々なＩＢＰＰで利用可能な未割り当てのバッファポインタの数、および／またはその他に基づいて、適切なＢＰＰを選択する。選択されたＢＰＰに対応するＩＢＰＰは、マルチプレクサ３４０および読み出しロジック３５２を介して分配要求を受信して、マルチプレクサ３４４、送信キュー３２４、および送信ポート３２８を介してクライアントコンポーネントへ、分配されたバッファポインタを送信する。
【００５２】
ＢＭＵコントローラ２８がバッファ解放要求を受信すると、対応するＩＢＰＰ（例えばバッファポインタが解放されるべきＩＢＰＰ）は、書き込みロジック３４８を介して解放要求を受信して（例えば、書き込みロジック３４８はこの解放要求をＩＢＰＰ格納ユニット３２に送信する）、バッファポインタをＩＢＰＰリストに書き込んでこのバッファポインタを解放する。
【００５３】
レジスタファイル３１６は、ＢＭＵ２４に関連付けられている様々な設定情報を格納する。例えば、レジスタファイル３１６はＢＭＵコントローラ２８と通信して、ＢＭＵ２４の１以上の他のコンポーネントが受信した情報を受信して、レジスタファイル３１６に格納されている様々な設定情報を周期的に更新する。
【００５４】
図４は、本開示の一実施形態における図１および図３のシステム１００を作動させる例示的な方法４００を示す。４０４で、ＢＭＵ２４（例えばＢＭＵコントローラ２８）は、（例えば第１の複数のバッファポインタおよび第２の複数のバッファポインタを）ＩＢＰＰ（例えばＩＢＰＰ３２ａ）およびＥＢＰＰ（例えばＥＢＰＰ３６ａ）にそれぞれ分配し、ここでＢＰＰ（例えばBPP_a）は、ＩＢＰＰおよびＥＢＰＰを含む。
【００５５】
この分配に続いて、ＢＭＵ２４は、４０８で分配要求を受信する、あるいは、４３０で解放要求を受信する。例えば４０８で、ＢＭＵ２４は、第１のコンポーネントから（例えばネットワークインタフェース１６ａから）バッファ位置の分配要求を受信する。４１２で、ＢＭＵ２４は、ＩＢＰＰ３２ａの第１の複数のバッファポインタのうちの対応する第１のバッファポインタを第１のコンポーネントに割り当てることで、第１のコンポーネントに第１のバッファ位置を割り当てる。一実施形態では、ＢＭＵ２４は、第１のバッファ位置の割り当てに呼応して、未割り当てのバッファポインタリストから第１のバッファポインタを削除する。
【００５６】
４１６で、ＢＭＵ２４は、ＩＢＰＰ３２ａにおける未割り当てのバッファポインタの数が低い閾値未満であるかを判断する。この未割り当てのバッファポインタの数が低い閾値未満でない場合には（４１６のＮＯ）、方法は４０８または４３０の処理のいずれかへループして戻る。反対に、この未割り当てのバッファポインタの数が低い閾値未満である場合には（４１６のＹＥＳ）、ＢＭＵ２４は４２０で、ＥＢＰＰ３６ａから第２の複数のバッファポインタのうちの第３の複数のバッファポインタをＩＢＰＰ３２ａに動的再分配する（例えば、ＥＢＰＰ３６ａからＩＢＰＰ３２ａに複数のバッファポインタを再分配する）。４２０の後で、方法は４０８または４３０の処理のいずれかへループして戻る。
【００５７】
再度４３０の処理を参照すると、ＢＭＵ２４は、第２のコンポーネント（例えばプロセッサコア１２ａ）から、第１の複数のバッファポインタのうちの第２のバッファポインタと関連付けられている第２のバッファ位置を解放せよとの解放要求を受信する。例えば、第２のバッファ位置は、ＢＭＵ２４が第２のコンポーネントに予め割り当てたものであってよい。４３４で、ＢＭＵ２４は第２のバッファ位置を解放して、第２のバッファポインタを未割り当てとする。４３８で、ＢＭＵ２４は、ＩＢＢＰ３２ａにおける未割り当てのバッファポインタの数が高い閾値を上回るかを判断する。ＩＢＢＰ３２ａにおける未割り当てのバッファポインタの数が高い閾値より大きくない場合には（４３８のＮＯ）、方法は４０８または４３０の処理のいずれかへループして戻る。反対に、ＩＢＢＰ３２ａにおける未割り当てのバッファポインタの数が高い閾値を上回る場合には（４３８のＹＥＳ）、ＢＭＵ２４は４４２で、ＩＢＰＰ３２ａから第２の複数のバッファポインタのうちの第４の複数のバッファポインタをＥＢＰＰ３６ａに動的再分配する（例えば、ＩＢＰＰ３２ａからＥＢＰＰ３６ａに複数のバッファポインタを再分配する）。４４２の後で、方法は４０８または４３０の処理のいずれかへループして戻る。
【００５８】
図５は、本開示の一実施形態における図１および図３のパケット通信システムを作動させる別の例示的な方法５００を示す。図１、図３、および図５を参照すると、５０４で、ＢＭＵコントローラ２８は、ＳＯＣの複数のバッファアドレスを管理する（例えば、ＳＯＣ１０の内部バッファポインタプール（例えばＩＢＰＰ３２ａ）の対応する複数のバッファポインタを管理する）。５０８で、ＢＭＵコントローラ２８は、ＳＯＣにおける利用可能なバッファアドレスの数（例えば、内部バッファポインタプールにおける未割り当てのバッファポインタの数）が低い閾値を下回るか、あるいは、高い閾値を上回るかを判断する。５０８でＳＯＣにおける利用可能なバッファアドレスの数が低い閾値を下回る場合、５１２でＢＭＵコントローラ２８は、１以上のバッファアドレスを外部メモリから（例えばメモリ４４のＥＢＰＰ３６ａ等の外部バッファポインタプールから）ＳＯＣへ（例えばＩＢＰＰ３２ａへ）分配してから、５０４での監視を継続する。他方、５０８でＳＯＣにおける利用可能なバッファアドレスの数が高い閾値を上回る場合、５１６でＢＭＵコントローラ２８は、別の１以上のバッファアドレスをＳＯＣから外部メモリへ分配してから、５０４での監視を継続する。さらに５０８でＳＯＣにおける利用可能なバッファアドレスの数が低い閾値と高い閾値との間にある場合には、方法は５０４の監視を継続する。
【００５９】
特定の実施形態について例示、記載してきたが、これらの特定の実施形態は、本開示の範囲を逸脱せずに、幅広い様々な代替実装例および／または均等実装例で置き換えることが可能である。本開示は、添付請求項に文字通りまたは均等論により略含まれる方法、装置、製品の全てを含む。本願は、ここで開示される実施形態の変更例および変形例全てを含むことを意図する。従って、本開示は請求項およびその均等物による限定のみが意図されている。
【図１】
2011204233.tif 000003
【図２】
2011204233.tif 000004
【図３】
2011204233.tif 000005
【図４】
2011204233.tif 000006
【図５】
2011204233.tif 000007
【外国語明細書】
2011204233000001.pdf