システムオンチップSOCの複数のバッファアドレスを管理する段階と、前記SOCにおける利用可能なバッファアドレスの数が低い閾値を下回る場合、前記SOCの外部にあるメモリから1以上のバッファアドレスを前記SOCで取得する段階とを備える方法。前記SOCにおける利用可能なバッファアドレスの数が高い閾値を上回る場合、別の1以上のバッファアドレスを前記SOCから前記メモリに分配する段階をさらに備える請求項1に記載の方法。前記SOCの前記複数のバッファアドレスを管理する段階は、前記SOCの内部バッファポインタプールの前記複数のバッファアドレスを管理する段階を有し、前記メモリから前記1以上のバッファアドレスを取得する段階は、前記メモリの外部バッファポインタプールから前記1以上のバッファアドレスを取得する段階を有する請求項1に記載の方法。前記SOCの前記複数のバッファアドレスを管理する段階は、前記SOCの複数のバッファポインタを管理する段階をさらに有し、前記複数のバッファポインタのうちの1つのバッファポインタは、前記複数のバッファアドレスのうち対応するバッファアドレスを含む請求項1に記載の方法。前記メモリから前記1以上のバッファアドレスを前記SOCで取得する段階は、第1のバッファアドレスを前記SOCからクライアントコンポーネントに割り当てる段階と、前記割り当てが行われると、前記SOCにおける利用可能なバッファアドレスの数が前記低い閾値を下回る場合に前記メモリから前記1以上のバッファアドレスを前記SOCで取得する段階をさらに有する請求項1に記載の方法。前記第1のバッファアドレスを割り当てる段階は、前記クライアントコンポーネントからのバッファ位置の分配要求を受信する段階と、前記分配要求を受信すると、前記第1のバッファアドレスを含む第1のバッファポインタを前記クライアントコンポーネントに割り当てることにより、前記第1のバッファアドレスを前記クライアントコンポーネントに割り当てる段階をさらに有する請求項5に記載の方法。前記第1のバッファアドレスを前記クライアントコンポーネントに割り当てると、前記第1のバッファアドレスを、前記SOCで利用不可能なバッファアドレスとする段階をさらに備える請求項6に記載の方法。前記クライアントコンポーネントにより、前記クライアントコンポーネントが受信したデータパケットを、前記第1のバッファアドレスを前記クライアントコンポーネントに割り当てることに少なくとも部分的に基づいて、前記第1のバッファアドレスに対応するバッファ位置にバッファする段階をさらに備える請求項5に記載の方法。前記内部バッファポインタプールは第1の内部バッファポインタプールであり、前記方法はさらに、クライアントコンポーネントからの、前記クライアントコンポーネントが受信したデータパケットをバッファせよとのバッファ位置の分配要求を受信する段階と、前記分配要求を受けると、前記第1の内部バッファポインタプールおよび第2の内部バッファポインタプールのいずれかを、バッファアドレスを前記クライアントコンポーネントに割り当てるべく、i前記データパケットのサイズ、ii前記第1の内部バッファポインタプールに関連付けられているバッファ位置のサイズ、および、iii前記第2の内部バッファポインタプールに関連付けられているバッファ位置のサイズに少なくとも部分的に基づいて選択する段階と、対応するバッファポインタを前記クライアントコンポーネントに割り当てることにより、選択された前記内部バッファポインタプールに関連付けられたバッファアドレスを前記クライアントコンポーネントに割り当てる段階とを備える請求項3に記載の方法。前記内部バッファポインタプールは第1の内部バッファポインタプールであり、前記方法はさらに、前記第1の内部バッファポインタプールからのバッファアドレスが第1のクライアントコンポーネントに割り当てられるよう、前記第1の内部バッファポインタプールを前記第1のクライアントコンポーネントに関連付ける段階と、第2の内部バッファポインタプールからのバッファアドレスが第2のクライアントコンポーネントに割り当てられるよう、前記第2の内部バッファポインタプールを前記第2のクライアントコンポーネントに関連付ける段階とを備える請求項3に記載の方法。前記別の1以上のバッファアドレスを分配する段階は、第1のバッファアドレスに関連付けられている第1のバッファ位置を解放せよとの解放要求をクライアントコンポーネントから受信する段階と、前記解放要求を受けて、前記第1のバッファ位置を解放する段階と、前記第1のバッファ位置が解放されると、前記第1のバッファアドレスを前記SOCで利用可能なバッファアドレスとする段階と、前記第1のバッファアドレスが前記SOCで利用可能なバッファアドレスとされると、前記内部バッファポインタプールにおいて利用可能なバッファアドレスの数が前記高い閾値を上回る場合、前記別の1以上のバッファアドレスを前記SOCから前記メモリへ割り当てる段階とをさらに有する請求項2に記載の方法。前記1以上のバッファアドレスは、第1の複数のバッファアドレスを含み、前記メモリから前記第1の複数のバッファアドレスを前記SOCで取得する段階は、前記メモリから前記第1の複数のバッファアドレスを前記SOCへ、前記メモリと前記SOCとの間の単一の処理として送信する段階をさらに有する請求項1に記載の方法。クライアントコンポーネントと、内部バッファポインタプールIBPP、及びコントローラを有するバッファ管理ユニットBMUとを備え、前記コントローラは、前記IBPPにおける未割り当てのバッファポインタの数を監視して、前記IBPPにおける未割り当てのバッファポインタの数が閾値を下回る場合、外部バッファポインタプールEBPPから前記IBPPに1以上のバッファポインタを分配するシステムオンチップSOC。前記コントローラはさらに、前記内部バッファポインタプールにおける未割り当てのバッファポインタの数が高い閾値を上回る場合、前記IBPPから前記EBPPへ別の1以上のバッファポインタを分配する請求項13に記載のSOC。前記IBPPの前記バッファポインタは、前記SOCの外部にあるメモリの対応するバッファ位置を指し示す請求項13に記載のSOC。前記クライアントコンポーネントは、前記BMUとは別個のプロセッサコアである請求項13に記載のSOC。前記クライアントコンポーネントは、ネットワークインタフェースである請求項13に記載のSOC。前記EBPPは、前記SOCの外部にあるメモリに格納される請求項13に記載のSOC。各バッファポインタプールBPPが内部バッファポインタプールIBPPと外部バッファポインタプールEBPPとに論理的に分割される複数のBPPを維持する段階と、各BPPについて、対応するIBPPに複数のバッファポインタを動的に分配し、対応するEBPPに別の複数のバッファポインタを動的に分配する段階とを備える方法。前記複数のBPPは、第1のBPPおよび第2のBPPを含み、前記方法は、第1のコンポーネントからバッファ分配要求を受信する段階と、前記バッファ分配要求を受信すると、前記第1のBPPおよび前記第2のBPPのうちいずれかを選択する段階と、選択された前記BPPに関連付けられている前記IBPPからのバッファポインタを前記第1のコンポーネントに割り当てる段階とをさらに備える請求項19に記載の方法。各BPPについて、対応するIBPPと対応するEBPPとの間でバッファポインタの動的再分配を行って前記IBPPにおける未割り当てのバッファポインタを閾値数に維持する段階をさらに備える請求項20に記載の方法。様々な実施形態において、本開示は、システムオンチップSOCの複数のバッファアドレスを管理する段階と、SOCにおける利用可能なバッファアドレスの数が低い閾値を下回る場合、SOCの外部にあるメモリから1以上のバッファアドレスをSOCで取得する段階とを備える方法を提供する。SOCにおける利用可能なバッファアドレスの数が高い閾値を上回る場合、別の1以上のバッファアドレスをSOCからメモリに分配する段階をさらに備える。クライアントコンポーネントと、バッファ管理ユニットBMUとを備え、バッファ管理ユニットBMUは、内部バッファポインタプールIBPPと、コントローラとを有し、コントローラは、IBPPにおける未割り当てのバッファポインタの数を監視して、IBPPにおける未割り当てのバッファポインタの数が閾値を下回る場合、外部バッファポインタプールEBPPからIBPPに1以上のバッファポインタを分配するシステムオンチップSOCも適用される。さらに、各BPPが内部バッファポインタプールIBPPと外部バッファポインタプールEBPPとに論理的に分割される複数のバッファポインタプールBPPを維持する段階と、各BPPについて、対応するIBPPに複数のバッファポインタを動的に分配し、対応するEBPPに別の複数のバッファポインタを動的に分配する段階とを備える方法も提供される。以下の詳細な記載は図面を参照しながら行われるが、図面は本明細書の一部を構成するものであり、全図面にわたり同様の参照番号は同様の部材を示し、図面は本開示の原理を示す実施形態の形で示されている。また、他の実施形態の利用も可能であり、本開示の範囲を逸脱せずとも構造上および論理上の変更が可能である。従って以下の詳細な記載は限定的に捉えられるべきではなく、本開示における実施形態の範囲は、添付請求項およびそれらの均等物によってのみ定義されるべきである。図1は、本開示の一実施形態における、バッファ管理ユニットBMU24を含むシステムオンチップSOC10を含むパケット通信システム100システム100と称する場合もあるの一部を選択して概略する。本開示の教示を曖昧にしない配慮から、図面にはシステム100の別の部分を示さない。示されているSOC10は、さらに1以上のプロセッサコア例えばプロセッサコア12a、...、プロセッサコア12M、Mは適切な正の整数であるを含む。システム100は、1以上のネットワークインタフェース例えばネットワークインタフェース16a、ネットワークインタフェース16b、...、ネットワークインタフェース16P、Pは適切な正の整数であるを含む。図1に示す通り、ネットワークインタフェースの1以上例えばネットワークインタフェース16bは、SOC10の外部にあり、残りのネットワークインタフェースのうちの1以上例えばネットワークインタフェース16a、ネットワークインタフェース16b、...、ネットワークインタフェース16Pは、SOC10の内部にある。一実施形態では、ネットワークインタフェース16a、...、16Pは、ネットワークスイッチ、ネットワークルータ、ネットワークポート、イーサネット登録商標ポートギガバイトイーサネット登録商標ポート、ネットワークコントローラ、その他のネットワーク接続および/またはその他を有する適切なデバイス等のネットワークデバイスである。一実施形態では、SOC10は、ネットワークスイッチまたはルータに関連付けられている。例えばネットワークスイッチは、SOC10上に位置していてよい。一実施形態では、SOC10はさらに、ネットワークインタフェース16a、...、16P、プロセッサコア12a、...、12M、BMU24、およびメモリコントローラ40に動作可能に連結された共有バス20を含む。様々な他の実施形態では、図1には示されていないが、共有バス20の代わりに、SOC10が、複数のバス例えばSOC10の2つのコンポーネント間の専用バス、SOC10の幾らかのコンポーネントにより共有されるバス等を含む。メモリコントローラ40は、メモリ44に動作可能に連結されてこれを制御する。一実施形態では、メモリコントローラ40は、1以上のコンポーネントから例えば、BMU24、複数のプロセッサコアおよび/または複数のネットワークインタフェースうちの1つから、共有バス20を介してメモリ44に対して命令の読み書きを行い、受信した命令をメモリ44が許可できるフォーマットに翻訳する。つまり、メモリコントローラ40は、共有バス20を介して、メモリ44とシステム100の様々な他のコンポーネントとの間のインタフェースとして機能する。図1に示すように、一実施形態では、メモリ44はSOC10の外部にあるが、他の実施形態では、メモリ44がSOC10の内部にある。一実施形態では、メモリ44は、DRAM例えばDDR3、SDRAMである。SOC10は通常様々な他のコンポーネント例えば1以上の周辺機器、インタフェース、および/またはその他を含むが、明瞭性を期す目的からこれらのコンポーネントは図1から省いている。例えば、図1には示していないが、SOC10は、データパケットストリームを処理するパケット処理モジュールを含み、1以上のパケット処理機能例えばデータパケットのブリッジを行う。同様に図1には示していないが、SOC10は、様々な周辺機器および物理層コンポーネントシリアライザ/デシリアライザSERDESモジュール、1以上のポート、ネットワークスイッチ等を含む。一実施形態では、SOC10は、SOC10のアプリケーション領域に基づく様々な他のコンポーネントを含む。一実施形態では、メモリ44は、複数のバッファ位置例えばバッファ位置50a1...50aR50b1...50bS...50N1...50NT、R、S、TおよびNは適切な正の整数であるを含む。メモリ44に含まれるバッファ位置各々は、1以上のバイトのデータをバッファする。例えば、各バッファ位置50a1...50aRは、32バイトのデータを格納し、各バッファ位置50b1...50bSは、256バイトのデータを格納し、各バッファ位置50N1...50NTは、1056バイトのデータを格納する、といった具合である。一実施形態では、図示されているバッファ位置のうち1以上が、メモリ44内で連続するバッファ位置である。プロセッサコア12a...、プロセッサコア12M、ネットワークインタフェース16a、...、および/またはネットワークインタフェース16Pおよび/または、図1に示していないSOC10の1以上の他のコンポーネント例えばSOC10のインタフェースコントローラ、SOC10のエンジン等は、BMU24からサービスを受けBMU24がこれらコンポーネントのうち1以上に対してバッファ位置を分配する、プロセッサコア12a、...、プロセッサコア12M、ネットワークインタフェース16a、...、および/またはネットワークインタフェース16Pおよび/またはBMU24からサービスを受ける任意の他のコンポーネントも、本明細書ではBMU24のクライアントコンポーネントと称する。BMU24のクライアントコンポーネントがデータパケットを受信して、データパケットをバッファしようとする場合、クライアントコンポーネントは、バッファ位置の分配要求本明細書ではバッファ位置分配要求またはバッファ分配要求とも称するをBMU24に送信する。後述するように、分配要求に基づいて、BMU24は、クライアントコンポーネントにバッファ位置を分配する。一実施形態では、BMU24は、複数のバッファポインタプールBPPに関連付けられ、各BPPはバッファポインタのリストを含み、バッファポインタは、メモリ44における対応するバッファ位置のアドレスまたはポインタである。例えば、図1には示していないが、システム100は、BPPa...BPPNつまり、N個のBPPを含む。各BPPは、内部バッファポインタプールIBPPおよび外部バッファポインタプールEBPPという2つの論理セクションに分割される。図1は、IBPPおよびEBPPのみを示し、BPPは示していない。例えば、BPPaがIBPP32aおよびEBPP36aに分割され、BPPbがIBPP32bおよびEBPP36bに分割され、BPPNがIBPP32NおよびEBPP36Nに分割される、といった具合である。図1に示すように、様々なBPPのIBPPつまりIBPP32a、IBPP32b、...、IBPP32Nが、BMU24の内部に格納される。図1に示すように、様々なBPPのEBPPつまりEBPP36a、EBPP36b、...、EBPP36Nは、BMU24の外部の位置に例えばメモリ44に格納される。後で詳述するように、一実施形態では、BMU24は、各IBPPについて、IBPP例えばIBPP32aにおける未割り当てのバッファポインタ例えば、いずれのクライアントコンポーネントにも割り当てられておらず、クライアントコンポーネントに対する割り当ての準備が整っているものの数を監視するBMUコントローラ28を含む。例えば、未割り当てのバッファポインタは、分配の準備が整っている対応するバッファアドレスを含む。図1には示していないが、一実施形態では、BMUコントローラ28は、各IBPPについて、高い閾値および低い閾値を維持する別の実施形態では、BMUコントローラ28は、2以上のIBPP間で高い閾値および低い閾値を共有する。後で詳述するように、BMUコントローラ28は、各BPPについて、対応するIBPPおよび対応するEBPP間でバッファポインタを動的に転送して、IBPP内の未割り当てのバッファポインタの数を、対応する低い閾値と高い閾値との間に維持する。例えば、IBPP内の未割り当てのバッファポインタの数が低い閾値を下回った場合、BMUコントローラ28は、対応するEBPP例えばEBPP36aからIBPP32aに1以上のバッファポインタを分配する。他方で、IBPP内の未割り当てのバッファポインタの数が高い閾値レベルを超えた場合には、BMUコントローラ28は、IBPP32aからEBPP36aへ別の1以上のバッファポインタを分配する。従ってBMUコントローラ28は、各IBPPについて、1以上のクライアントコンポーネントに対して少なくとも幾つかの未割り当てのバッファポインタの分配準備が整っているようにする尤も、一実施形態では、IBPPおよび対応するEBPPの両方に未割り当てのバッファポインタが残っていない場合、IBPPは分配準備が整ったバッファポインタを持たない場合もある。つまり、SOC10でローカルに管理される少なくとも幾つかのバッファを、常にクライアントコンポーネントに対する分配準備が整った状態にしておく。図1には示していないが、一実施形態では、EBPP36a、...、36Nは、バッファ位置50a1...50NTが含まれているメモリとは異なるメモリに格納される。例えば、EBPP36a、...、36Nおよびバッファ位置50a1...50NTが、2以上の異なるメモリに格納される。一実施形態では、1以上のバッファ位置がそれぞれ異なるメモリにあってよい例えば、図1には示していないが、バッファ位置50a1がメモリ44にあり、バッファ位置50b1がメモリ44とは異なるメモリSOC10の内部または外部いずれであってもよいにあってよい。前述したように、各BPPは、バッファポインタのリストを含み、ここでバッファポインタは、対応するバッファ位置のアドレスまたはポインタである。例えばBPPaが、バッファ位置50a150a2...50aRに対応するR個のバッファポインタを含み、BPPbがバッファ位置50b150b2...50bSに対応するS個のバッファポインタを含み、BPPNが、バッファ位置50N150N2...50NTに対応するT個のバッファポインタを含む、といった具合である。BMU24は、BPPに関連するバッファポインタをEBPPからIBPPへ、および/またはIBPPからEBPPへ、動的に分配するBMUコントローラ28を含む。一実施形態では、BMUコントローラ28は、各IBPPに対応してカウントMを格納する。例えば、BMUコントローラ28は、IBPPa、...IBPPNに対応してカウントMa、...、MNを格納する。一実施形態では、後で後述するように、IBPPに対応するカウント例えば、IBPPaに対応するカウントMaは、IBPPにおける未割り当てのバッファポインタのカウント例えば、未割り当てのバッファポインタの数を維持する。BMU24は、図1では明瞭性を期す目的から示されていない1以上の他のコンポーネント例えば送信ポート、受信ポート、送信キュー等も含む。各BPPについて、BMU24および/またはプロセッサコア12a、プロセッサコア12b、および/または、システム100の任意の他の適切なコンポーネントは例えばシステム100の起動時に、BPPのバッファポインタの一部を対応するIBPPに割り当て、BPPの残りのバッファポインタを対応するEBPPに分配する。例えば、BPPaに含まれるR個のバッファポインタのうち、R1個のバッファポインタがIBPP32aに動的に分配され、残りのR2個のバッファポインタがEBPP36aに分配される。クライアントコンポーネント例えば、図1のプロセッサコアおよび/またはネットワークインタフェース、および/またはSOC10の内部または外部にあってよいシステム100の任意の他の適切なコンポーネントのいずれかがバッファ位置にデータパケットをバッファする必要がある場合、クライアントコンポーネントはBMU24にバッファ分配要求を送信する。受信したバッファ分配要求に基づいて、BMU24は、バッファポインタを適切なIBPPからクライアントコンポーネントに割り当てることにより、クライアントコンポーネントにバッファ位置を割り当てる。IBPPに分配された個々のバッファポインタは、IBPPリストに追加され、これらは未割り当てである例えば、いずれのクライアントにも割り当てられていないが、クライアントコンポーネントへの割り当て準備が整っている。IBPPからの未割り当てのバッファポインタ例えば、バッファ位置50a2に対応する、IBPP32aからのバッファポインタをクライアントコンポーネントに割り当てる場合、このバッファポインタをIBPPリストから除外して、IBPPにおける未割り当てのバッファポインタの数を1減少させる。バッファポインタがクライアントコンポーネントに割り当てられると、クライアントコンポーネントは、対応するバッファ位置に例えばバッファ位置50a2にデータパケットを格納したり書き込んだりすることができるようになる。他方で、バッファ位置例えばバッファ位置50a2のコンテンツを、クライアントコンポーネントが読み出す場合には、バッファ位置は自由になるつまり、将来の格納に利用可能となる。従って、BMU24により対応するバッファポインタ以前にクライアントコンポーネントに対して割り当てられたものが解放されつまり、バッファポインタがIBPPに追加され、未割り当てと示される、このバッファポインタが将来の割り当てに利用可能とされる。つまり、バッファ位置からの読み出しに基づいて、対応するバッファポインタを解放し、これにより、対応するIBPPの未割り当てのバッファポインタ数が増加する例えば1増加する。前述したように、IBPPに対応するカウント例えばIBPPaに対応するカウントMaは、IBPPの未割り当てのバッファポインタのカウントを維持する。一実施形態では、IBPP内の未割り当てのバッファポインタ数が、対応する低い閾値よりも減少すると例えば、IBPPから1以上のクライアントコンポーネントへのバッファポインタの割り当てによって減少すると、BMU24は、1以上のバッファポインタを、対応するEBPPからIBPPへ再分配する。例えば、IBPP32aから1以上のクライアントコンポーネントに対するバッファポインタの割り当てにより、IBPP32a内の未割り当てのバッファポインタ数が低い閾値よりも減少する場合がある。IBPP32a内の未割り当てのバッファポインタ数が低い閾値よりも減少すると、複数のバッファポインタを対応するEBPPつまりEBPP36aからIBPP32aへ再分配する。この複数の再分配を行われるバッファポインタ例えば32個のバッファポインタは、EBPP36aからIBPP32aへ送信され、IBPP32aに格納され、1以上のクライアントへの将来の分配に備えさせる。このようにバッファポインタをEBPPから対応するIBPPへ再分配することにより、1以上のクライアントコンポーネントに対する分配準備が整ったバッファポインタが少なくとも幾つか常にIBPPに存在するようすることができるつまり、幾つかの未割り当てのバッファポインタが常にIBPP内に存在するようにすることができる。言い換えると、少なくとも幾つかのバッファが、クライアントコンポーネントへの分配準備が整った状態で、常にSOCでローカルに管理されていることになる。他方で、1以上のクライアントコンポーネントがバッファポインタを解放すると、IBPP内の未割り当てのバッファポインタ数が対応する高い閾値より増加することがある。IBPP内の未割り当てのバッファポインタ数が高い閾値より増加した場合には、IBPPの複数のバッファポインタを対応するEBPPに再分配する。このようにバッファポインタを再分配することにより、IBPPが未割り当てのバッファポインタで溢れることがなくなり、BMU24内の全てのIBPPが必要とする格納スペースを比較的制限することができる。つまり、SOCでローカルに管理されるバッファの数を制限して、SOC上での管理容易性を維持することができる。一実施形態では、低い閾値および高い閾値は設定可能である。例えば、常にIBPP内に未割り当てのバッファポインタが存在するよう、また、IBPPのバッファポインタを格納するためにSOC10で必要とされる格納スペースを比較的小さくするよう、低い閾値および高い閾値を設定することができる。IBPPおよび対応するEBPP間のバッファポインタの送信例えば、バッファポインタを再分配する間のは、バッファポインタのバッチで行われてよい。例えば、32個のバッファポインタが、EBPP36aからIBPP32aへ、またこの逆方向に、単一のバッチとして再分配を行われ送信される例えば32個のバッファポインタが、EBPP36aからIBPP32aへ、またはこの逆方向に、単一の処理または単一の送信で送信される。一実施形態では、このようなバッファポインタのバッチ送信例えば、32個のバッファポインタを別個に送信する代わりにによって、メモリ44に対する処理数、バス20への負荷、メモリコントローラ40への負荷、および/または送信の帯域幅要件を減少させることができる。一実施形態では、場合によって、1以上のバッファポインタをEBPPから直接1以上のクライアントコンポーネントに割り当てることができる。例えば、対応するEBPPからIBPPへのバッファポインタのバッチの再分配および送信の前にIBPP内の未割り当てのポインタが枯渇すると例えば、クライアントコンポーネントに対して幾つかのバッファポインタを高速に割り当てることにより高速に枯渇する場合等、1以上のバッファポインタをEBPPから直接1以上のクライアントコンポーネントに割り当てることができる。別の実施形態では、SOC10は、例えばSOC10の外部から生じた複数のトラフィックの流れから受信したデータパケットを処理する。SOC10が処理するデータパケットのサイズは場合によって大きく変わりうる。一実施形態では、バッファポインタに割り当てるためのIBPPの選択を、バッファされるデータパケットのサイズに少なくとも部分的に基づいて行う。例えば、単一のBPPに関連付けられる個々のバッファ位置は同様のサイズであるが、異なるBPPに関連付けられるバッファ位置は互いに異なるサイズである。例えば、BPPaに関連付けられるバッファ位置50a1...50aRは各々、32バイトの格納容量を有する。他方で、BPPbに関連付けられるバッファ位置50b1...50bSは各々、256バイトの格納容量を有する。従って、クライアントコンポーネント例えばネットワークインタフェース16aが16バイトのデータパケットをバッファしようとする場合、BMU24は、このクライアントコンポーネントに、IBBP32aから1つのバッファポインタバッファ位置50a1...50aRのいずれか1つを割り当てる。一方で、クライアントコンポーネントが128バイトのデータパケットをバッファしようとする場合には、BMU24は、このクライアントコンポーネントに、IBBP32bから1つのバッファポインタバッファ位置50b1...50bSのいずれか1つを割り当てる。一実施形態では、マルチコアシステム例えばSOC10の場合に、各BPPは対応するプロセッサコアに関連付けられている。例えば、プロセッサコア12aがBPPaを割り当てられつまりIBPP32aがプロセッサコア12aにバッファポインタを割り当てる、プロセッサコア12bがBPPbを割り当てられるつまりIBPP32bがプロセッサコア12bにバッファポインタを割り当てる、といった具合である。つまり、各プロセッサコアは自身のバッファ領域を有する。従って一実施形態では、バッファポインタプールの分配を、バッファされるべきデータパケットの始点に基づいて行う例えば、データパケットがプロセッサコア12a、プロセッサコア12b、および/またはその他から始まっているか。一実施形態では、バッファポインタを割り当てるためのIBPPの選択を、任意の他の適切な基準に基づいて行うこともできる。一実施形態では、BMU24によるバッファポインタの管理および/または割り当ては、プロセッサコア12a、...、12Mに管理されることなく、または最小限の管理下で行うことができる。つまり、BMU24の利用により、プロセッサコアをバッファ管理および/または割り当てから解放することができ、これによりプロセッサコアの処理電力を大幅に節電することができる。これに比して、従来のバッファ管理システムでは、プロセッサコアがバッファ管理および/または割り当てを行っている。IBPPおよび対応するEBPPを管理してIBPPからバッファポインタを割り当てるEBPPから割り当てるのではなくことには幾つかの利点がある。例えば、IBPPおよびクライアントコンポーネントの1以上を全てSOC10内に位置させることができる。従って、IBPPからバッファポインタをクライアントコンポーネントに割り当てる速度は、EBPPからバッファポインタをクライアントコンポーネントに割り当てる速度より比較的高速である。さらに、EBPPを維持することにより例えば全てのバッファポインタをIBPPに格納する代わりに、IBPPのバッファポインタの格納に要される格納サイズを比較的小さくすることができるこれは、SOC10の格納容量が、SOC10の外部にあるメモリ44の格納容量よりも比較的制限されているからである。一実施形態では、バッファ位置に関連付けられている記述子は、バッファ位置の物理アドレスと仮想アドレスとを含む。一実施形態では、BMU24は、その物理アドレスを利用してバッファポインタを割り当てる、および/または、解放する。別の実施形態では、各バッファ位置例えばバッファ位置50a1が物理アドレスおよび仮想アドレスの両方を含むので、BMU24がバッファポインタを割り当てる、および/または、解放するとき、これら物理アドレスおよび仮想アドレスの両方が割り当てられる、および/または、解放される。仮想アドレスを処理する別の方法として、各仮想アドレスをバッファ自身に書き込む、というものがある例えばシステムの初期化段階中に書き込むことができる。この場合には、BMU24は、バッファポインタを分配する際に、バッファの物理アドレスのみをクライアントに送信する。そしてクライアントは、必要に応じて、バッファ自身からバッファの仮想アドレスを読み出すことができる例えば、仮想アドレスが32ビットの長さである場合には、バッファの最初の4バイト分から読み出すことができる。従来のシステムでは、通常、プロセッサコアがバッファ割り当てを管理する。通常、この従来のシステムではプロセッサコアは仮想アドレスを処理するので、バッファ位置における仮想アドレスのみを記録する。これと比して、システム100のバッファ位置はプロセッサコア、ネットワークインタフェース、BMU24、および/またはBMU24の任意の適切なクライアントコンポーネントによるアクセスを受ける。一例では、ネットワークインタフェースおよび/またはBMU24はバッファ位置の物理アドレスを利用してバッファ位置にアクセスし、プロセッサコアはバッファ位置の仮想アドレスを利用してバッファ位置にアクセスする。従って、BMU24は、バッファ位置の物理アドレスおよび仮想アドレス両方を対応するバッファ位置記述子に維持し、これにより、プロセッサコアおよびネットワークインタフェースの両方がおよび/または、BMU24の任意の他のクライアントコンポーネントが、バッファ位置に途切れなくアクセスできるようになる。図2は、本開示の一実施形態における図1のシステム100の例示的なEBPP例えばEBPP36aを概略する。例えば、EBPP36aは、8つのバッファポインタ210a、...、210hを含むが、他の実施形態では、EBPP36aは、任意の他の適切な数のバッファポインタを含んでよい。陰なしで示されているバッファポインタ210c、...、210eは、IBPP32aへの再分配に利用可能である。バッファポインタ210a、210b、210f、...、210hは例えば先頭アドレスおよび後尾アドレスの間のバッファポインタは、再分配には利用できないので例えばバッファポインタリストの一部ではないことから、グレーの陰を付して示している。図2は、IBPP32aに既に分配されたバッファポインタ例えばバッファポインタ210a、210b、210f、...、210hを格納するEBPP36aを示しているが、一実施形態では、EBPP36aはこれらバッファポインタを格納しなくてもよい。一実施形態では、EBPP36aに含まれるバッファポインタは連続するアドレスを有する。例えば、バッファポインタ210bのアドレスは、バッファポインタ210aのアドレスを増分することで生成でき、バッファポインタ210cのアドレスは、バッファポインタ210bのアドレスを増分することで生成できる、といった具合である。EBPP36aに関連付けられている開始アドレスは、EBPP36aの最初のバッファポインタ例えばバッファポインタ210aのアドレス例えば仮想アドレスおよび/または物理アドレスのことであってよい。EBPP36aに関連付けられている最終アドレスは、EBPP36aの最終のバッファポインタ例えばバッファポインタ210hのアドレス例えば仮想アドレスおよび/または物理アドレスのことであってよい。一実施形態においてバッファポインタはEBPP36aからIBPP32aへまたこの逆の方向にバッチで再分配を行われ、EBPP36aの連続するバッファポインタ210c、...、210eは、IBPP32aへの再分配に利用可能である。EBPP36aに関連付けられている先頭アドレスは、IBPP32aへの再分配に利用可能な複数のバッファポインタ例えばバッファポインタ210c、210d、210eの最初のバッファポインタ例えばバッファポインタ210cのアドレス例えば仮想アドレスおよび/または物理アドレスのことである。EBPP36aに関連付けられている後尾アドレスは、IBPP32aへの再分配に利用可能な複数のバッファポインタ例えばバッファポインタ210c、210d、210eの最後のバッファポインタ例えばバッファポインタ210eのアドレス例えば仮想アドレスおよび/または物理アドレスのことである。EBPP36aの先頭アドレスおよび後尾アドレスは、IBPP32aおよびEBPP36aの間でバッファポインタが割り当てられる、および/または、再分配を行われる場合に、動的に変化する。一実施形態では、BMU24は、開始アドレスおよび最終アドレス、並びに、EBPP36aの現在の先頭アドレスおよび後尾アドレスを格納する。これらアドレスに基づいて、BMU24は、IBPP32aへの再分配に利用可能な、EBPP36a内のバッファポインタの数を認識することができる。例えば、先頭アドレスおよび後尾アドレスの差異を、IBPP32aへの再分配に利用可能なバッファポインタの数の指標として利用することができる。図2には示していないが、個々のIBPPも、対応する開始アドレス、最終アドレス、先頭アドレス、および、後尾アドレスを含む。例えば、IBPPの先頭アドレスとは、クライアントコンポーネントへの割り当てに利用可能な複数のバッファポインタの最初のバッファポインタのアドレスのことである。同様に、IBPPの後尾アドレスとは、クライアントコンポーネントへの割り当てに利用可能な複数のバッファポインタの最後のバッファポインタのアドレスのことである。前述したように、IBPPに対応するカウント例えばIBPPaに対応するカウントMaは、IBPPにおける未割り当てのバッファのカウントを維持する。例えばカウントMaは、IBPPaの先頭アドレスと後尾アドレスとの間のバッファポインタの数を維持することにより、IBPPaにおける未割り当てのバッファポインタの数のカウントを維持する。図3は、本開示の一実施形態における、図1のBMU24をより詳細に概略する。BMU24は、IBPP32a、...、IBPP32Nを格納するIBPP格納ユニット32を含む。BMU24はさらに、BMUコントローラ28、BMU直接メモリアクセスDMA312、およびレジスタファイル316を含む。図1および図3によると、一実施形態では、BMU32はさらに、1以上のクライアントコンポーネント例えば図3に示していないネットワークインタフェース16cおよび/またはメモリ44から、共有バス20を介してデータおよび/または命令を受信する受信ポート304を含む。例えば、BMU24は、1以上のクライアントコンポーネントからのバッファ分配要求およびバッファ解放要求を受信し、さらに、前述したように1以上のEBPPから再分配されたバッファポインタを受信する。BMU24はさらに、マルチプレクサ344、送信キュー324例えばFIFOキューおよび送信ポート328を含む。BMU24の受信ポート304で受信したデータおよび/または命令は、受信キュー320例えばFIFOキューに入り、BMUコントローラ28に、IBPPのいずれか1つに、BMUDMA312に、および/または、レジスタファイル316に選択的に送信される。BMUコントローラ28は、様々なIBPPおよびEBPPの開始アドレス、最終アドレス、先頭アドレス、および/または、後尾アドレスを格納するバッファポインタアドレスプール308を含む。BMUコントローラ28はさらに、書き込みロジック348、読み出しロジック352、およびマルチプレクサ340を含む。一実施形態では、BMUコントローラ28は、バッファポインタアドレスプール308の様々なアドレスを監視することで、IBPPおよびEBPPの各々における未割り当てのバッファポインタを記録する。IBPPにおける未割り当てのバッファポインタの数を、前述した高い閾値および低い閾値と比較することにより、BMUコントローラ28は、バッファポインタをIBPPから対応するEBPPへ、または、EBPPからIBPPへ再分配する必要があるかを判断する。バッファポインタをEBPPからIBPPへ再分配する場合には、BMUDMA312は、マルチプレクサ344、送信キュー324、および送信ポート328を介して、EBPPに対してプル要求を送信する。バッファポインタをIBPPから対応するEBPPに再分配する場合には、BMUDMA312は、マルチプレクサ340および読み出しロジック352を介して、IBPPに対してプッシュ要求を送信する例えば、IBPPから対応するEBPPにバッファポインタを再分配させるように。プッシュ要求を受信すると、IBPPは、再分配されたポイントバッファを、マルチプレクサ344、送信キュー324、および送信ポート328を介して、メモリ44の対応するEBPPに送信する。マルチプレクサ344は、IBPP格納ユニット32、BMUDMA312、およびレジスタファイル316からの入力を、例えばこれらコンポーネントのいずれかからの入力がイネーブルされると選択的にマルチプレックスする。BMUコントローラ28がバッファ分配要求を受信すると、BMUコントローラ28は、例えばバッファされるデータパケットのサイズ、要求を送ってきたクライアントコンポーネント、様々なIBPPで利用可能な未割り当てのバッファポインタの数、および/またはその他に基づいて、適切なBPPを選択する。選択されたBPPに対応するIBPPは、マルチプレクサ340および読み出しロジック352を介して分配要求を受信して、マルチプレクサ344、送信キュー324、および送信ポート328を介してクライアントコンポーネントへ、分配されたバッファポインタを送信する。BMUコントローラ28がバッファ解放要求を受信すると、対応するIBPP例えばバッファポインタが解放されるべきIBPPは、書き込みロジック348を介して解放要求を受信して例えば、書き込みロジック348はこの解放要求をIBPP格納ユニット32に送信する、バッファポインタをIBPPリストに書き込んでこのバッファポインタを解放する。レジスタファイル316は、BMU24に関連付けられている様々な設定情報を格納する。例えば、レジスタファイル316はBMUコントローラ28と通信して、BMU24の1以上の他のコンポーネントが受信した情報を受信して、レジスタファイル316に格納されている様々な設定情報を周期的に更新する。図4は、本開示の一実施形態における図1および図3のシステム100を作動させる例示的な方法400を示す。404で、BMU24例えばBMUコントローラ28は、例えば第1の複数のバッファポインタおよび第2の複数のバッファポインタをIBPP例えばIBPP32aおよびEBPP例えばEBPP36aにそれぞれ分配し、ここでBPP例えばBPPaは、IBPPおよびEBPPを含む。この分配に続いて、BMU24は、408で分配要求を受信する、あるいは、430で解放要求を受信する。例えば408で、BMU24は、第1のコンポーネントから例えばネットワークインタフェース16aからバッファ位置の分配要求を受信する。412で、BMU24は、IBPP32aの第1の複数のバッファポインタのうちの対応する第1のバッファポインタを第1のコンポーネントに割り当てることで、第1のコンポーネントに第1のバッファ位置を割り当てる。一実施形態では、BMU24は、第1のバッファ位置の割り当てに呼応して、未割り当てのバッファポインタリストから第1のバッファポインタを削除する。416で、BMU24は、IBPP32aにおける未割り当てのバッファポインタの数が低い閾値未満であるかを判断する。この未割り当てのバッファポインタの数が低い閾値未満でない場合には416のNO、方法は408または430の処理のいずれかへループして戻る。反対に、この未割り当てのバッファポインタの数が低い閾値未満である場合には416のYES、BMU24は420で、EBPP36aから第2の複数のバッファポインタのうちの第3の複数のバッファポインタをIBPP32aに動的再分配する例えば、EBPP36aからIBPP32aに複数のバッファポインタを再分配する。420の後で、方法は408または430の処理のいずれかへループして戻る。再度430の処理を参照すると、BMU24は、第2のコンポーネント例えばプロセッサコア12aから、第1の複数のバッファポインタのうちの第2のバッファポインタと関連付けられている第2のバッファ位置を解放せよとの解放要求を受信する。例えば、第2のバッファ位置は、BMU24が第2のコンポーネントに予め割り当てたものであってよい。434で、BMU24は第2のバッファ位置を解放して、第2のバッファポインタを未割り当てとする。438で、BMU24は、IBBP32aにおける未割り当てのバッファポインタの数が高い閾値を上回るかを判断する。IBBP32aにおける未割り当てのバッファポインタの数が高い閾値より大きくない場合には438のNO、方法は408または430の処理のいずれかへループして戻る。反対に、IBBP32aにおける未割り当てのバッファポインタの数が高い閾値を上回る場合には438のYES、BMU24は442で、IBPP32aから第2の複数のバッファポインタのうちの第4の複数のバッファポインタをEBPP36aに動的再分配する例えば、IBPP32aからEBPP36aに複数のバッファポインタを再分配する。442の後で、方法は408または430の処理のいずれかへループして戻る。図5は、本開示の一実施形態における図1および図3のパケット通信システムを作動させる別の例示的な方法500を示す。図1、図3、および図5を参照すると、504で、BMUコントローラ28は、SOCの複数のバッファアドレスを管理する例えば、SOC10の内部バッファポインタプール例えばIBPP32aの対応する複数のバッファポインタを管理する。508で、BMUコントローラ28は、SOCにおける利用可能なバッファアドレスの数例えば、内部バッファポインタプールにおける未割り当てのバッファポインタの数が低い閾値を下回るか、あるいは、高い閾値を上回るかを判断する。508でSOCにおける利用可能なバッファアドレスの数が低い閾値を下回る場合、512でBMUコントローラ28は、1以上のバッファアドレスを外部メモリから例えばメモリ44のEBPP36a等の外部バッファポインタプールからSOCへ例えばIBPP32aへ分配してから、504での監視を継続する。他方、508でSOCにおける利用可能なバッファアドレスの数が高い閾値を上回る場合、516でBMUコントローラ28は、別の1以上のバッファアドレスをSOCから外部メモリへ分配してから、504での監視を継続する。さらに508でSOCにおける利用可能なバッファアドレスの数が低い閾値と高い閾値との間にある場合には、方法は504の監視を継続する。特定の実施形態について例示、記載してきたが、これらの特定の実施形態は、本開示の範囲を逸脱せずに、幅広い様々な代替実装例および/または均等実装例で置き換えることが可能である。本開示は、添付請求項に文字通りまたは均等論により略含まれる方法、装置、製品の全てを含む。本願は、ここで開示される実施形態の変更例および変形例全てを含むことを意図する。従って、本開示は請求項およびその均等物による限定のみが意図されている。