(57)【特許請求の範囲】
【請求項１】
第１の数のエントリーを有するバッファインデックスの第１フリーリストを共有メモリに記憶する工程であって、各バッファインデックスは共有メモリ中のバッファのアドレスに対応する、工程と、
巡回待ち行列状態である、第２の数のエントリーを有するバッファインデックスの第２フリーリストを、バッファインデックスの第１フリーリストからバッファインデックスを予め取り出すことによって、第２メモリに記憶する工程であって、該第２の数のエントリーは、該第１の数のエントリーより少ない、工程と、
第１プロセッサから第１バッファ割り当てコマンドを受信する工程であって、該第１バッファ割り当てコマンドは該共有メモリ内のバッファのプールに関連するレジスタアドレスを含む、工程と、
該第２フリーリスト内のフリーバッファに対応するバッファインデックスの利用可能性に基づき、バッファがバッファプール内で利用可能であるかを判定する工程と、
バッファが利用可能であると判定された場合、該バッファを該第１プロセッサに割り当てる工程と
を含むことを特徴とする方法。
【請求項２】
前記第２フリーリストからのバッファインデックスを、バッファの割り当て解除に続き、前記第１フリーリストに書き戻す工程をさらに含むことを特徴とする、請求項１記載の方法。
【請求項３】
バッファコンテキスト情報を前記第２メモリに記憶することをさらに含み、前記バッファコンテキスト情報はベースプールアドレス、可変バッファサイズおよび可変バッファの数のうちの少なくとも１個を含み、該バッファコンテキスト情報は、前記バッファがバッファプール内で利用可能であるかを判定する工程において用いられることを特徴とする、請求項１記載の方法。
【請求項４】
前記バッファプール中のバッファのサイズに基づき、バッファインデックス値またはバッファポインタアドレスを決定することをさらに含むことを特徴とする、請求項３記載の方法。
【請求項５】
前記バッファプール中のバッファの数に基づき、バッファインデックス値またはバッファポインタアドレスを決定することをさらに含むことを特徴とする、請求項３記載の方法。
【請求項６】
前記割り当てる工程は、
前記割り当てられたバッファに対応するバッファポインタアドレスを前記第１プロセッサに送ることをさらに含むことを特徴とする、請求項１記載の方法。
【請求項７】
バッファプールに関連する前記アドレスは、該バッファプールに関連するアドレス範囲内のアドレスを含むことを特徴とする、請求項６記載の方法。
【請求項８】
前記方法は、共有メモリに参照カウント値を記憶することをさらに含み、該参照カウント値は、バッファにアクセスするプロセッサの数に対応することを特徴とする、請求項１記載の方法。
【請求項９】
第２プロセッサからバッファインクリメントコマンドを受信する工程であって、該バッファインクリメントコマンドは、前記割り当てられたバッファに関連するアドレスを含む、工程と、
該割り当てられたバッファの参照カウントを更新する工程と
をさらに含むことを特徴とする、請求項８記載の方法。
【請求項１０】
前記バッファプール内の複数のバッファの要求を特定する割り当てコマンドを受信する工程と、
該バッファプール内に、少なくとも２個のバッファを割り当てる工程と
をさらに含むことを特徴とする、請求項８記載の方法。
【請求項１１】
複数のプロセッサのうちの少なくともひとつから、割り当て解除コマンドを受信する工程と、
前記割り当てられたバッファの参照カウント値を更新する工程と
をさらに含むことを特徴とする、請求項８記載の方法。
【請求項１２】
システムバスと、
該システムバスに接続された複数のプロセッサと、
該複数のプロセッサからデータを送受信するために、該システムバスに接続され、バッファのプールおよび参照カウント値のアレイを含む、共有メモリであって、参照カウントアレイ内の各参照カウント値は、バッファプール内のバッファに対応する、共有メモリと、
共有メモリ内に記憶された第１の数のエントリーを有するバッファインデックスの第１フリーリストであって、該第１フリーリスト内の各バッファインデックスは該バッファプール内のバッファに対応する、第１フリーリストと、
該複数のプロセッサのうちの少なくとも１つからバッファ割り当てコマンドを受信し、プロセッサにバッファ割り当て応答を送るために、該システムバスに接続されたバッファマネージャと、
を含む、システムであって、
該バッファマネージャは、該複数のプロセッサの１つからのバッファ割り当てコマンドに応答して、該バッファプールからのバッファを割り当て、かつ、共有メモリへ／からデータを送受信するために作動し、バッファマネージャは、バッファインデックスの該第１フリーリスト内の第１の数のエントリーより少ない第２の数のエントリーを有するバッファインデックスの第２フリーリストを局部メモリに記憶する局部メモリと、該複数のプロセッサから受信されたコマンドを受信および復号し、かつ、該局部メモリに記憶されたバッファの該第２フリーリストにアクセスし、該参照カウントアレイ内の参照カウントを更新するために作動するコマンド復号論理ブロックとを含むことをすることを特徴とするシステム。
【請求項１３】
前記局部メモリに記憶されたプールコンテキスト情報であって、プールコンテキスト情報は前記共有メモリに規定されたバッファプールに対応し、該プールコンテキスト情報は、プールベースアドレス、バッファプールのサイズおよびバッファプールにおけるエントリーの数のうちの少なくとも１個を含む、プールコンテキスト情報をさらに含むことを特徴とする、請求項１２記載のシステム。
【請求項１４】
復号論理は、前記プールコンテキスト情報に基づいて、バッファインデックスおよびバッファポインタアドレスを決定するように動作する論理をさらに含むことを特徴とする、請求項１３記載のシステム。
【請求項１５】
機械により実行されたとき、
各々が共有メモリ中のバッファのアドレスに対応するバッファインデックスであって、第１の数のエントリーを有するバッファインデックスの第１フリーリストを該共有メモリに記憶し、
該第１の数のエントリーより少ない第２の数のエントリーを有するバッファインデックスの第２フリーリストを、該第２のフリーリスト上に記憶されるべきバッファインデックスの該第１フリーリストからバッファインデックスを予め取り出すことによって、第２メモリに記憶し、
該共有メモリ内のバッファのプールに関連するレジスタアドレスを含む第１バッファ割り当てコマンドを第１プロセッサから受信し、
該第２フリーリスト内のフリーバッファに対応するバッファインデックスの利用可能性に基づき、バッファが該バッファプール内で利用可能であるかを判定し、
バッファが利用可能であると判定された場合、該バッファプール内のバッファを該第１プロセッサに割り当てる、
という結果を生じる指示を記憶した機械読み取り可能な記憶媒体。
【請求項１６】
機械により実行されたとき、
バッファインデックスを、前記第２フリーリストからバッファの割り当て解除に続き、前記第１フリーリストに書き戻す、
という結果を生じる指示をさらに含むことを特徴とする、請求項１５記載の機械読み取り可能な記憶媒体。
【請求項１７】
機械により実行されたとき、
前記バッファプール内のバッファのサイズに基づき、バッファインデックス値またはバッファポインタアドレスを決定する、
という結果を生じる指示をさらに含むことを特徴とする、請求項１５記載の機械読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、メモリの管理に関する。
【背景技術】
【０００２】
（背景）
マルチプロセッサシステムは、共有メモリを含むことができる。すなわち、同一のメモリに対して、システム内の２個以上のプロセッサがアクセス（読み出しまたは書き込み）することができる。共有メモリは、論理的にバッファに区分することができる。
【発明の開示】
【課題を解決するための手段】
（説明）
図１は、プロセッサ２０−２９と、メモリ３０と、局部メモリ４１を有するバッファマネージャ（ＢＭＧＲ）とを含むマルチプロセッサシステム１０を示す。プロセッサ２１−２９、メモリ３０およびＢＭＧＲ４０はそれぞれ、システムバス５０に接続している。作動しているとき、プロセッサ２０−２９およびＢＭＧＲ４０はそれぞれ、メモリ３０にアクセスすることができる。例えば、メモリ３０に対して、データの読み込みおよび／または書き込みを行うことができる。一実施形態において、メモリ３０はバッファプール６０、７０に論理区分され、各プールは同一サイズのバッファのセットを含む。本例において、バッファ６１−６５はプール６０に含まれ、バッファ７１−７３はプール７０に含まれる。またメモリ３０は、バッファインデックス９１−９５を保持するバッファインデックスアレイ９０と、Ｒ_ＣＮＴ１０１−１０５を保持する参照カウント（Ｒ_ＣＮＴ）アレイ９８とを含む少なくとも１個のバッファ情報アレイ８０を記憶している。本実施形態において、バッファインデックス９１−９５およびＲ_ＣＮＴ１０１−１０５は、バッファプール６０のバッファ６１−６５にそれぞれ対応する。バッファインデックスアレイ９０は、バッファインデックス９１−９５の「フリーリスト」と呼ぶことができる。以下に説明するように、バッファインデックス９１−９５のフリーリストおよびＲ_ＣＮＴ１０１−１０５は、プール内でバッファの割り当ておよび割り当て解除を管理するために、ＢＭＧＲ４０によって使用される。ＢＭＧＲ４０は、バッファインデックスアレイ９０からのバッファインデックスの各フリーリストのサブセットを、局部メモリ４１に保存する。ＢＭＧＲ４０は、プール割り当て／割り当て解除レジスタ３４のセットを含み、各割り当て／割り当て解除レジスタは、メモリ３０のバッファプールに対応する。システム１０の動作中、プロセッサは、メモリ３０のバッファプールに対応する割り当て／割り当て解除レジスタ３４を特定するＢＭＧＲ４０に読み取りコマンドを送ることにより、バッファ割り当てを要求することができる。これに対応して、ＢＭＧＲは、要求を行ったプロセッサに対し、バッファのバッファポインタアドレスを送る。バッファポインタアドレスは、局部メモリ４１に記憶されたバッファインデックスのフリーリストのバッファインデックスに基づいている。
【０００４】
本明細書で説明するように、一実施形態において、バッファインデックスアレイ９０からのバッファインデックスの各フリーリストのサブセットだけが、局部メモリ４１に記憶される。このようにして、ＢＭＧＲ４０の局部メモリ４１のサイズを減少させることができる。局部メモリ４１に記憶されたフリーリストインデックスは、いわゆるフリーリスト巡回待ち行列に記憶される。巡回待ち行列とは、データ（またはアドレス）を待ち行列の始めに上書きすることができるように待ち行列が巡回するようになっており、このときデータ（またはアドレス）が待ち行列の第１配置から始まり最後部配置に至るまで連続する場所に記憶されるようになっている待ち行列のことをいう。システム１０の一実施形態において、フリーリスト巡回待ち行列は、２個のポインタ、「先頭」ポインタおよび「最後尾」ポインタにより参照される。先頭ポインタは、割り当て可能な局部メモリ４１内の次のバッファインデックスに指定するために使用され、最後尾ポインタは、メモリ３０に書き戻すことができる局部メモリ４１内の次のバッファインデックスに指定するために使用される。
【０００５】
図２は、バッファを要求を行ったプロセッサ２１−２９に割り当てるためにＢＭＧＲ４０が行うことができるプロセス１００を示す。プロセス１００の実行中、ＢＭＧＲ４０は、プロセッサ２１−２９からのコマンドを待っているアイドル状態（１１０）にある。受信した割り当てコマンド（１１２）に関して、プロセス１００で、バッファが割り当て可能かどうか（例えば、バッファインデックスがＢＭＧＲ４０フリーリスト待ち行列上で使用可能か）について判定する（１１５）。バッファインデックスが使用可能であると判定されると、ＢＭＧＲ４０は、割り当てられたバッファに対応するバッファポインタアドレスを第１プロセッサに送り（１２０）、先頭ポインタをインクリメントし（１２２）、フリーリスト待ち行列上の次のバッファインデックスを指し示す。バッファインデックスが利用不可であると判定されると、ＢＭＧＲ４０は、ヌルポインタ（例えば、ゼロ値）を第１プロセッサに返す（１１６）。プロセス１００には、より多くのバッファインデックスを予め取り出し、局部メモリ４１におけるフリーリスト巡回待ち行列上のバッファインデックスを十分な数に維持する必要があるかを判定すること（１２５）と、より多くのバッファインデックスが必要と判定された（１２５）場合に、メモリ３０から追加のバッファインデックスを予め取り出すこと（１２６）とが含まれる。
【０００６】
プロセス１００を実行することにより、２個以上のプロセッサ２１−２９は、バッファプール内の特定のバッファに共通にアクセスすることができる。本実施形態において、第１プロセッサが割り当てバッファを有する場合、第１プロセッサは、第２プロセッサに割り当てバッファへのアクセスをさせることができる。例えば、第１プロセッサは、割り当てバッファのアドレスを第２プロセッサに送ることができる。第２プロセッサが割り当てバッファへアクセスを開始するとほぼ同時に、第２プロセッサは、バッファインクリメントコマンドをＢＭＧＲ４０に送ることができる。さらにプロセス１００を参照すると（図２参照）、受信した（１３０）バッファインクリメントコマンドに関して、ＢＭＧＲ４０は、ポインタアドレスに対応する適切なバッファプールを判定し（１３５）、Ｒ_ＣＮＴを読み込み、’ｎ’を追加し（例えば、Ｒ＿ＣＮＴをインクリメントし）、割り当てバッファに対応するＲ_ＣＮＴを書き戻す（１４０）。第１および第２プロセッサは、引き続き、割り当てバッファにアクセスすることができる。プロセッサが割り当てバッファにアクセスする必要がなくなれば、当該プロセッサは割り当て解除コマンドをＢＭＧＲ４０に送ることができる。受信した（１５０）割り当て解除コマンドに関して、ＢＭＧＲ４０は、割り当て解除コマンドに対応するバッファプールを決定し（１５５）、対応するＲ_ＣＮＴをメモリ３０から読み出し（１５７）、Ｒ_ＣＮＴから‘ｎ’を減算（１５７）した（例えば、Ｒ＿ＣＮＴをデクリメントした）後、対応するＲ_ＣＮＴが０であるかを判定し（１６０）、対応するＲ_ＣＮＴが０であると判定された場合、プロセス１００は、先の判定（１６０）において対応するＲ_ＣＮＴが１であるかを判定し（１６５）、フリーリストの最後尾ポインタをインクリメントし（１７５）、フリーリストがバッファインデックスの書き戻しを必要とするかを判定し（１８）、局部メモリ４１のバッファインデックスのフリーリストからバッファインデックスを共有メモリ３０に書き戻し（１８５）、コマンドを待つ（１１０）ために帰還する。
【０００７】
このようにバッファを管理することにより、プロセッサは、１個の割り当てコマンド（例えば、１個の読み出しコマンド）によりバッファ割り当てを要求することができ、１個の割り当て解除コマンド（例えば、１個の書き込みコマンド）によりバッファ割り当て解除を要求することができる。また、プロセッサに共有バッファ情報のオーバヘッドを管理させることを要求することなく、複数のプロセッサ間でバッファを共有することができる。さらに、このバッファ管理方法により、プロセッサは、ＢＭＧＲ４０が要求を処理する間、システムバスおよび／またはプロセッサを停止させることなく、バッファの割り当てまたは割り当て解除を要求することができる。さらに、プロセス１００には、共有メモリ３０からバッファインデックスを予め取り出し、局部メモリ４０へ記憶することが含まれる。従って、プロセッサからの割り当て要求が連続すれば、プロセッサからの要求があったときのみバッファインデックスを取り出すときに要求する場合より短い時間で処理することができる。これに対して、バッファが割り当て解除されるに従って、ＢＭＧＲ４０は、バッファインデックスを、フリーリストからバッファインデックスアレイ９０に書き戻すことができる。
【０００８】
バッファ割り当てコマンドを、バッファプールの割り当て／割り当て解除コマンドレジスタ３４への読み込みとして実行することができる。バッファマネージャ４０は、バッファポインタアドレスを含む要求プロセッサへ書き込みコマンドを送ることにより、割り当てコマンドに対応する。バッファ割り当て解除コマンドは、バッファプールの割り当て／割り当て解除コマンドレジスタ３４への書き込みコマンドとして実行することができる。
【０００９】
一実施形態において、割り当て／割り当て解除双方のコマンドについて、１個の割り当て／割り当て解除レジスタを指定することができる。一実施形態において、割り当て／割り当て解除レジスタ３４は、各レジスタがメモリ３０のバッファプールに対応する３２個のレジスタとして実施される。しかしながら、これより多いまたは少ないバッファプールおよび対応する数の割り当て／割り当て解除レジスタを設けることが可能である。
【００１０】
一実施形態において、各バッファプールは対応するベースアドレスを有し、本例においては、ｐｏｏｌ６０_ｂａｓｅおよびｐｏｏｌ７０_ｂａｓｅが、各プール６０、７０内の第１バッファのメモリ３０内の配置を識別する。また、各バッファプールは、プールの特性を識別するために対応する変数を含むことができる。例えば、“ｂｕｆｆ_ｓｉｚｅＸ”変数は、プールにおける各バッファのサイズ（例えば、メモリ配置の数）を示すために使用することができ、“＃_ｂｕｆｆＸ”変数は、プールに含まれるバッファの数を示すために使用される。システム１０の作動中、ｂｕｆｆ_ｓｉｚｅＸ変数および＃_ｂｕｆｆＸ変数は、アレイ９０に記憶されたバッファインデックス値を算出するためにＢＭＧＲ４０により使用され、また、バッファインデックス値から対応するバッファポインタ値を決定するためにＢＭＧＲ４０により使用される。
【００１１】
より詳細には、バッファポインタアドレスを含むコマンドにより、バッファにアクセス（例えば、読み出しおよび書き込み）することができる。しかしながら、ＢＭＧＲ４０上のフリーリスト巡回待ち行列は、バッファインデックスを記憶するために使用される。従って、バッファをプロセッサに割り当てると、フリーリストからのバッファインデックスは、要求プロセッサへ返されるバッファポインタアドレスに変換する。一実施形態において、メモリ３０内におけるバッファインデックスのバッファポインタアドレスおよび該バッファを含むバッファプールの関連する変数（例えばｂｕｆｆ_ｓｉｚｅＸおよび＃_ｂｕｆｆｘ）を使用して、プール内のバッファのバッファインデックスを決定する。一例として、第１バッファのバッファインデックスは、バッファのバッファポインタアドレスを、該バッファを含むプールのｂｕｆｆ_ｓｉｚｅＸ変数で割ることにより、決定された値と同値に設定することができる。一方、バッファのバッファポインタアドレスは、そのバッファインデックス値に、該バッファを含むプールの関連するｂｕｆｆ_ｓｉｚｅＸ値を掛けることにより、決定することができる。
【００１２】
各バッファプールの数および特性は、プログラム化することができる。例えば、各バッファプールの特性は、システム初期化シーケンス中、またはシステム動作中に設定される。バッファプールおよびその特性は、システム１０の作動前に初期化し、作動中には原則として静止状態に維持する。システム１０の作動中にバッファプールの特性を変更するために、プールに対するすべての動作を停止し、バッファプール特性値をリセットした後、該バッファを取り扱う動作を再開することができる。
【００１３】
システム１０の一実施形態において、ＢＭＧＲ４０は、プロセッサ２１−２９に対してコマンドを送受信し、メモリ３０に対してデータを送受信するバスインターフェース４２を含む。また、バッファマネージャ４０は、インターフェース４２からの受信コマンドを復号する復号論理４４を含み、バッファインデックスからのバッファポインタアドレスを決定する。
【００１４】
一実施形態において、システム１０の作動中、ＢＭＧＲ４０は、「プールコンテキスト」情報、例えば、ＢＭＧＲ４０に管理された各バッファプールに関する情報を、局部メモリ４１に記憶する。プールコンテキスト情報には、例えば、プールベースアドレス、およびバッファプールに関連する変数ｂｕｆｆ_ｓｉｚｅＸおよび＃_ｂｕｆｆＸが含まれる。プールコンテキスト情報は、フリーリス上のバッファインデックスを、バッファプール内のバッファにアクセスするとき、プロセッサにより利用可能なバッファポインタアドレスに変換するために、復号ロジック４４により使用することができる。
【００１５】
一実施形態において、プロセッサは、１個のコマンドにより、複数のバッファの割り当てまたは割り当て解除を要求することができる。例えば、プロセッサは、１個のバッファを特定するコマンドまたは４個のバッファを特定するコマンドを送出することができる。他の例として、プロセッサは、‘ｎ’値を特定するバッファ割り当てコマンドを送出することができるが、このｎ値はプロセッサによって要求されたバッファの数に対応する。これに対応して、ＢＭＧＲ４０は、各ポインタがプール内において割り当てられたバッファの配置に対応する複数のバッファポインタを、要求を出したプロセッサに返すことができる。
【００１６】
一実施形態において、複数のバッファインデックスは、１個のバス５０コマンドをもつＢＭＧＲ４０により、（バス５０上のアクティビティ量を減少させるために）予め取り出される。例えば、４個以上のバッファインデックスをＢＭＧＲ４０により割り当てたときはいつでも、事前取り出しコマンドをマスターＦＩＦＯ４４ｃに配置する。マスターインターフェース制御４４ｂは、フリーリスト９０から４個の追加バッファインデックスを要求するメモリ３０に読み出しコマンドを送ることができ、ＢＭＧＲ４０は、メモリ３０から受信したとき、これらの追加バッファインデックスをバッファプールのフリーリスト待ち行列に記憶する。
【００１７】
プロセス１００は、プロセス１００の動作中にＲ_ＣＮＴに適用されるインクリメント値および／またはデクリメント値として使用されるＭＡＸ_ＲＣＮＴ値を選択的に含むことができる。例えば、アクション（１２７）、（１３５）および（１４０）により、ＭＡＸ_ＲＣＮＴ値は、複数のバッファを割り当て解除するときに使用することができる。
【００１８】
プロセス１００の一実施形態において、割り当てに利用できるプール内にバッファがないとＢＭＧＲ４０が判定した（１１５）場合、ヌルポインタ（すなわち、０の値）が要求を発したプロセッサに返される。このとき、要求を発したプロセッサは、他のバッファ割り当てコマンドを引き続いて送ることができる。図２をさらに参照すると、フリーリスト上に利用できるバッファがないとプロセス１００で判定した（１１５）場合、ＢＭＧＲ４０は、要求を発したプロセッサにヌルポインタを送り（１１６）、追加のバッファインデックスがメモリ３０から必要とされているかを判定し（１２５）、追加のバッファインデックスがバッファマネージャ４０により必要とされていると判断した場合、メモリ３０からバッファインデックスを取り出す（１２６）。
【００１９】
一実施形態において、バッファがプロセッサに割り当てられる前に、メモリ３０に記憶されたＲ_ＣＮＴ値を最初に１の値に設定する。それ故、バッファの割り当て中は、対応するＲ_ＣＮＴはインクリメントされない。これにより、システム１０により実行されるバスコマンド周期数を減少させることができる。バッファの割り当て解除を行うか、またはＲ_ＣＮＴ値をインクリメントするために、プロセッサはバッファが割り当てられたバッファプールについて知る必要はない。より詳細には、プロセッサは、ＢＭＧＲ４０に対して、バッファプールのアドレス範囲内のポインタアドレスを含む書き込みコマンドを送ることができ、ＢＭＧＲ４０は、バッファプールに対応するプールを決定する。
【００２０】
以下の例１は、プロセス１００の機能に対応するシステム１０の動作の例を表す。
【００２１】
例１；
１）プロセッサ２１は、ｐｏｏｌ_１０_ａｌｌｏｃ／ｄｅａｌｌｏｃレジスタ（＠ＢＭＧＲアドレス＝０ｘ００００_０５４０）を読み込み、バッファインンデックス＃５は、フリーリスト先頭ポインタが示している場所にある（そのため、バッファインデックス＃５は、局部メモリ４１事前取出バッファになければならない）。
【００２２】
２）ＢＭＧＲ４０は、バッファインデックス＃５、例えば、ポインタ（ｐｏｏｌ＝１０、ｉｎｄｉｃｅ＝５）＝ｐｏｏｌ_１０_ｂａｓｅ＋（ｐｏｏｌ_１０_ｂｕｆｆｅｒ_ｓｉｚｅ＊５）に対応するポインタアドレスを決定する。
【００２３】
３）ＢＭＧＲは、決定されたポインタアドレス（１０、５）をプロセッサ２１に送り、また、巡回待ち行列フリーリストの先頭ポインタをインクリメントさせ、他の割り当てコマンドに備えて巡回待ち行列フリーリストの次の場所に指定する。
【００２４】
４）プロセッサ２１は、ポインタ（１０、５）をプロセッサ２２に送る（場合によっては、また、プロセッサ２１は、例えば、プロセッサ２２のコマンドを送ってプロセッサ２１に割り当てられたバッファ中に見出されるデータを処理する。）
５）プロセッサ２１または２２は、インクリメントコマンドをＢＭＧＲ４０に送り、例えばポインタ（１０、５）中のアドレスに書き込みコマンドを送ることにより、ポインタ（１０、５）に対応するＲ_ＣＮＴをインクリメントする（Ｒ_ＣＮＴをインクリメントする書き込みコマンドは、特定のバッファのアドレス範囲内のいかなるアドレスも含むことができ、ＢＭＧＲ４０は、アドレスからの適切なバッファを決定し、対応するｂｕｆｆＲ_ＣＮＴ（１０、５）をインクリメントすることを認識していただきたい。）
６）プロセッサ２１および２２は、割り当てられたバッファ（１０、５）に継続的にアクセスすることができる。それとほぼ同時に、ＢＭＧＲは、メモリ３０からＲ_ＣＮＴ（１０、５）を読み込み、Ｒ_ＣＮＴをインクリメントし、メモリ３０に更新したＲ_ＣＮＴ値を書き戻すことにより、対応するバッファＲ_ＣＮＴ（１０、５）をインクリメントする。
【００２５】
７）プロセッサ２１は、バッファ（１０、５）にアクセスする際、バッファ（１０、５）内のいずれのアドレスをもいずれのｐｏｏｌ_ｘ割り当て解除レジスタ３４に書き込むことにより、割り当て解除コマンドをＢＭＧＲ４０に送る。
【００２６】
８）ＢＭＧＲ４０は、割り当て解除コマンドを受信し、バッファ（１０、５）の対応するＲ_ＣＮＴ値を決定し、メモリ３０からＲ_ＣＮＴ（１０、５）値を読み込み、Ｒ_ＣＮＴ（１０、５）をデクリメントし、デクリメントされたＲ_ＣＮＴ（１０、５）＝１であることを決定し、デクリメントされたＲ_ＣＮＴ（１０、５）値をメモリ３０に書き戻す。
【００２７】
９）プロセッサ２２は、バッファ（１０、５）へのアクセスを行うと、バッファ（１０、５）内のいずれかのアドレスをいずれかのｐｏｏｌ_ｘ割り当て解除レジスタ３４に書き込むことにより、割り当て解除コマンドをＢＭＧＲ４０に送る。
【００２８】
１０）ＢＭＧＲ４０は、割り当て解除コマンドを受信し、バッファ（１０、５）の対応するＲ_ＣＮＴ（１０、５）値を決定し、メモリ３０からＲ_ＣＮＴ（１０、５）値を読み込み、Ｒ＿ＣＮＴ（１０、５）＝０にデクリメントし、デクリメントされたＲ_ＣＮＴ（１０、５）＝０であることを決定し、この場合、メモリにＲ_ＣＮＴ（１０、５）＝０を書き戻す代わりに、Ｒ_ＣＮＴ（１０、５）＝１をメモリに残す。２個のバスコマンドトランザクション、例えば、１→０と移行するＲ_ＣＮＴ値を読み込み、更新し、書き戻す第１バスコマンドおよびＲ_ＣＮＴを０→１と移行する第２バスコマンドの実行を省くことができるため、Ｒ_ＣＮＴ（ｐｏｏｌ、ｉｎｄｉｃｅ）＝１を残すことは重要である。
【００２９】
１１）また、ＢＭＧＲ４０は、局部メモリ４１におけるこのバッファプール巡回待ち行列のフリーリスト最後尾ポインタをインクリメントする。
【００３０】
例１において、工程７）で、ＢＭＧＲ４０がＲ_ＣＮＴ（１０、５）をインクリメントした後、工程９）で、ＢＭＧＲ４０は、Ｒ_ＣＮＴ（１０、５）をデクリメントすることを認識していただきたい。一実施形態において、工程７）および９）の操作を除くことが可能である。より詳細には、第１プロセッサ（例えば、プロセッサ２１）を「割り当て装置」として指定し、第２プロセッサ（例えば、プロセッサ２２）を「割り当て解除装置」として指定した場合。この場合、インクリメントおよび割り当て解除をそれぞれ行う複数のプロセッサを有する代わりに、１つのプロセッサのみがバッファ割り当てコマンドのみを実行し、第２プロセッサは、特定のバッファの割り当て解除コマンドのみを実行する。システム１０の操作および／またはプロセス１００でこの方法を行うことにより、バッファの割り当て、割り当て解除および／またはＲ_ＣＮＴのインクリメントに要するバスコマンド周期の数を減少させることができる。
【００３１】
一実施形態において、割り当てまたは割り当て解除コマンドには、割り当てらえるか割り当て解除されるバッファのアドレス境界内にあるいずれかのアドレスを含むことができる。より詳細には、ＢＭＧＲ４０は、プロセッサにより送られたポインタアドレス上でアドレス境界チェックを行い、どのバッファのＲ_ＣＮＴが更新を必要とするかを判定することができる（例えば、図２に説明した動作（１５５）および（１３５）を参照）。ＢＭＧＲ４０がアドレス境界チェックを行うこの方法は、バッファ割り当てまたは割り当て解除を要求するために、プロセッサ２１−２９が割り当てられたバッファのベースプールアドレスを記憶する必要はないことを示している。従って、バッファ内の位置のポインタアドレスはどれも、プロセッサからＢＭＧＲ４０に送られた割り当てまたは割り当て解除コマンドの一部として使用することができる。
【００３２】
一実施形態において、割り当てられた（または、以前割り当てられた）バッファに対応するＲ_ＣＮＴをインクリメントまたはデクリメントするために、ＢＭＧＲ４０は、読み込みコマンドをメモリ３０に送り、該バッファに対応するＲ_ＣＮＴアレイ９８からＲ_ＣＮＴ値を読み出させる。ＢＭＧＲ４０は、メモリ３０からＲ_ＣＮＴを受信すると、Ｒ_ＣＮＴ値をインクリメントまたはデクリメントし、（Ｒ_ＣＮＴの更新値により）更新済みＲ_ＣＮＴ値をメモリ３０に書き戻すことができる。
【００３３】
一実施形態において、復号論理ブロック４４を、他のコマンドの処理前にバッファ割り当てコマンドを処理するように構成する。より詳細には、復号論理４４には、復号論理４４ａ、マスターインターフェース論理４４ｂおよびプール状態制御論理４４ｄが含まれる。マスターインターフェース論理ブロック４４ｂには、復号論理４４ａからの割り当て解除コマンドおよびインクリメントコマンドを保持するために使用されるＦＩＦＯ待ち行列４４ｃが含まれる。バッファ割り当て解除コマンドおよび／またはインクリメントコマンドが後にマスターインターフェース制御論理４４ｃにより処理されるためにＦＩＦＯ４４ｃに保存されるのに対し、復号論理４４ａにより受信されたバッファ割り当てコマンドは、受信されたときに処理される。そのため、バッファ割り当てコマンドがＢＭＧＲ４０によって処理されるのを待機しているプロセッサは、バッファ処理割り当て解除および／またはＲ_ＣＮＴ更新の処理を待機する必要はない。
【００３４】
一実施形態において、復号論理４４には、プールコンテキスト情報を記憶して局部メモリ４１にアクセスするプール状態制御４４ｄが含まれる。本例において、プール状態制御４４ｄは、接続されてコマンド復号４４ａおよびマスターインターフェース制御４４ｂ双方からアクセス要求を受信する。プール状態制御４４ｂは、コマンド復号４４ａおよびマスターインターフェース論理４４ｄからのアクセス要求の調停を行い、データの読み込みおよび書き出しを局部メモリ４１に対して行う。
【００３５】
各プロセッサ２１−２９およびＢＭＧＲ４０は、オペレーティングシステムを装備することができ、オペレーティングシステムとは、プロセッサの動作および資源の割り当てを制御するソフトウェアである。用語「プロセス」または「プログラム」とは、ソフトウェア、例えば、プロセッサまたはコンピュータシステム上で実行することのできるアプリケーションプログラムのことをいう。アプリケーションプログラムは、オペレーティングシステムを介して利用可能なコンピュータ資源を使用して、利用者が望むタスクを行う実行可能な命令のセットである。
【００３６】
プロセッサ２１−２９およびＢＭＧＲ４０は、ハードウェア、ソフトウェアまたはこれら２つの組み合わせの中に実施することができる。プロセッサ、プロセッサにより読み取り可能な記憶媒体（揮発性メモリおよび不揮発性メモリおよび／または記憶部品を含む）、少なくとも１個の入力装置および１個以上の出力装置をそれぞれ含むプログラム可能なコンピュータまたは他の機械で実行されるコンピュータプログラムにおいて、それらを実施することができる。プログラムコードは、入力装置（例えば、マウスまたはキーボード）を用いて入力されるデータに適用して、アプリケーションを実行し、出力情報を生成することができる。
【００３７】
アプリケーションを実行するコンピュータが記憶媒体または記憶装置を読み込んだとき、コンピュータを構成および操作する一般または特別目的プログラム可能なコンピュータにより読み取ることが可能な記憶媒体／製品（例えば、ＣＤ−ＲＯＭ、ハードディスクまたは磁気ディスケット）上で、各コンピュータプログラムを記憶することができる。また、実行されるとコンピュータプログラム内の命令により、アプリケーションに従って機械を作動させるコンピュータプログラムにより構成された機械読み取り可能な記憶媒体として、それらを実施することができる。
【００３８】
本発明は、上述した特定の実施形態に限定されるものではない。例えば、上述の例は、マルチプロセッサシステムのプロセッサを用いて説明した。しかしながら、例えば、共有メモリにアクセスする機能を含む機能装置として１個以上のプロセッサを実施することができ、例えば、アプリケーション特化集積回路（“ＡＳＩＣＳ”）として機能装置を実施ことができる。例えば、ＢＭＧＲ４０の局部メモリを用いて上記装置を説明した。しかしながら、局部メモリは、レジスタとして部分的に装備され、例えば、バッファインデックスおよびプールコンテキスト情報を記憶するために使用することができる。他の例として、割り当て／割り当て解除レジスタを特定するＢＭＧＲ４０に読み取りコマンドを送ることにより、バッファ割り当てを要求するプロセッサを説明した。しかしながら、レジスタの特定を必要としない他の方法で、割り当て／割り当て解除コマンドを実行することが可能である。
【００３９】
また、本明細書に記載のない他の実施形態についても、以下の請求項の範囲である。
【図面の簡単な説明】
【００４０】
【図１】図１は、マルチプロセッサシステムのブロック図である。
【図２】図２は、バッファ管理のための工程の流れ図である。
【図１】
0004599172.tif 000002
【図２】
0004599172.tif 000003