JP4599172B2 - フリーバッファプールを使用することによるメモリの管理 - Google Patents
フリーバッファプールを使用することによるメモリの管理 Download PDFInfo
- Publication number
- JP4599172B2 JP4599172B2 JP2004566587A JP2004566587A JP4599172B2 JP 4599172 B2 JP4599172 B2 JP 4599172B2 JP 2004566587 A JP2004566587 A JP 2004566587A JP 2004566587 A JP2004566587 A JP 2004566587A JP 4599172 B2 JP4599172 B2 JP 4599172B2
- Authority
- JP
- Japan
- Prior art keywords
- buffer
- pool
- free list
- index
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000000872 buffer Substances 0.000 title claims description 271
- 238000000034 method Methods 0.000 claims description 33
- 125000004122 cyclic group Chemical group 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 3
- 230000008569 process Effects 0.000 description 19
- 238000004590 computer program Methods 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000002041 carbon nanotube Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000009182 swimming Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Transfer Systems (AREA)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
Description
【0001】
本出願は、メモリの管理に関する。
【背景技術】
【0002】
(背景)
マルチプロセッサシステムは、共有メモリを含むことができる。すなわち、同一のメモリに対して、システム内の2個以上のプロセッサがアクセス(読み出しまたは書き込み)することができる。共有メモリは、論理的にバッファに区分することができる。
【発明の開示】
【課題を解決するための手段】
(説明)
図1は、プロセッサ20−29と、メモリ30と、局部メモリ41を有するバッファマネージャ(BMGR)とを含むマルチプロセッサシステム10を示す。プロセッサ21−29、メモリ30およびBMGR40はそれぞれ、システムバス50に接続している。作動しているとき、プロセッサ20−29およびBMGR40はそれぞれ、メモリ30にアクセスすることができる。例えば、メモリ30に対して、データの読み込みおよび/または書き込みを行うことができる。一実施形態において、メモリ30はバッファプール60、70に論理区分され、各プールは同一サイズのバッファのセットを含む。本例において、バッファ61−65はプール60に含まれ、バッファ71−73はプール70に含まれる。またメモリ30は、バッファインデックス91−95を保持するバッファインデックスアレイ90と、R_CNT101−105を保持する参照カウント(R_CNT)アレイ98とを含む少なくとも1個のバッファ情報アレイ80を記憶している。本実施形態において、バッファインデックス91−95およびR_CNT101−105は、バッファプール60のバッファ61−65にそれぞれ対応する。バッファインデックスアレイ90は、バッファインデックス91−95の「フリーリスト」と呼ぶことができる。以下に説明するように、バッファインデックス91−95のフリーリストおよびR_CNT101−105は、プール内でバッファの割り当ておよび割り当て解除を管理するために、BMGR40によって使用される。BMGR40は、バッファインデックスアレイ90からのバッファインデックスの各フリーリストのサブセットを、局部メモリ41に保存する。BMGR40は、プール割り当て/割り当て解除レジスタ34のセットを含み、各割り当て/割り当て解除レジスタは、メモリ30のバッファプールに対応する。システム10の動作中、プロセッサは、メモリ30のバッファプールに対応する割り当て/割り当て解除レジスタ34を特定するBMGR40に読み取りコマンドを送ることにより、バッファ割り当てを要求することができる。これに対応して、BMGRは、要求を行ったプロセッサに対し、バッファのバッファポインタアドレスを送る。バッファポインタアドレスは、局部メモリ41に記憶されたバッファインデックスのフリーリストのバッファインデックスに基づいている。
【0004】
本明細書で説明するように、一実施形態において、バッファインデックスアレイ90からのバッファインデックスの各フリーリストのサブセットだけが、局部メモリ41に記憶される。このようにして、BMGR40の局部メモリ41のサイズを減少させることができる。局部メモリ41に記憶されたフリーリストインデックスは、いわゆるフリーリスト巡回待ち行列に記憶される。巡回待ち行列とは、データ(またはアドレス)を待ち行列の始めに上書きすることができるように待ち行列が巡回するようになっており、このときデータ(またはアドレス)が待ち行列の第1配置から始まり最後部配置に至るまで連続する場所に記憶されるようになっている待ち行列のことをいう。システム10の一実施形態において、フリーリスト巡回待ち行列は、2個のポインタ、「先頭」ポインタおよび「最後尾」ポインタにより参照される。先頭ポインタは、割り当て可能な局部メモリ41内の次のバッファインデックスに指定するために使用され、最後尾ポインタは、メモリ30に書き戻すことができる局部メモリ41内の次のバッファインデックスに指定するために使用される。
【0005】
図2は、バッファを要求を行ったプロセッサ21−29に割り当てるためにBMGR40が行うことができるプロセス100を示す。プロセス100の実行中、BMGR40は、プロセッサ21−29からのコマンドを待っているアイドル状態(110)にある。受信した割り当てコマンド(112)に関して、プロセス100で、バッファが割り当て可能かどうか(例えば、バッファインデックスがBMGR40フリーリスト待ち行列上で使用可能か)について判定する(115)。バッファインデックスが使用可能であると判定されると、BMGR40は、割り当てられたバッファに対応するバッファポインタアドレスを第1プロセッサに送り(120)、先頭ポインタをインクリメントし(122)、フリーリスト待ち行列上の次のバッファインデックスを指し示す。バッファインデックスが利用不可であると判定されると、BMGR40は、ヌルポインタ(例えば、ゼロ値)を第1プロセッサに返す(116)。プロセス100には、より多くのバッファインデックスを予め取り出し、局部メモリ41におけるフリーリスト巡回待ち行列上のバッファインデックスを十分な数に維持する必要があるかを判定すること(125)と、より多くのバッファインデックスが必要と判定された(125)場合に、メモリ30から追加のバッファインデックスを予め取り出すこと(126)とが含まれる。
【0006】
プロセス100を実行することにより、2個以上のプロセッサ21−29は、バッファプール内の特定のバッファに共通にアクセスすることができる。本実施形態において、第1プロセッサが割り当てバッファを有する場合、第1プロセッサは、第2プロセッサに割り当てバッファへのアクセスをさせることができる。例えば、第1プロセッサは、割り当てバッファのアドレスを第2プロセッサに送ることができる。第2プロセッサが割り当てバッファへアクセスを開始するとほぼ同時に、第2プロセッサは、バッファインクリメントコマンドをBMGR40に送ることができる。さらにプロセス100を参照すると(図2参照)、受信した(130)バッファインクリメントコマンドに関して、BMGR40は、ポインタアドレスに対応する適切なバッファプールを判定し(135)、R_CNTを読み込み、’n’を追加し(例えば、R_CNTをインクリメントし)、割り当てバッファに対応するR_CNTを書き戻す(140)。第1および第2プロセッサは、引き続き、割り当てバッファにアクセスすることができる。プロセッサが割り当てバッファにアクセスする必要がなくなれば、当該プロセッサは割り当て解除コマンドをBMGR40に送ることができる。受信した(150)割り当て解除コマンドに関して、BMGR40は、割り当て解除コマンドに対応するバッファプールを決定し(155)、対応するR_CNTをメモリ30から読み出し(157)、R_CNTから‘n’を減算(157)した(例えば、R_CNTをデクリメントした)後、対応するR_CNTが0であるかを判定し(160)、対応するR_CNTが0であると判定された場合、プロセス100は、先の判定(160)において対応するR_CNTが1であるかを判定し(165)、フリーリストの最後尾ポインタをインクリメントし(175)、フリーリストがバッファインデックスの書き戻しを必要とするかを判定し(18)、局部メモリ41のバッファインデックスのフリーリストからバッファインデックスを共有メモリ30に書き戻し(185)、コマンドを待つ(110)ために帰還する。
【0007】
このようにバッファを管理することにより、プロセッサは、1個の割り当てコマンド(例えば、1個の読み出しコマンド)によりバッファ割り当てを要求することができ、1個の割り当て解除コマンド(例えば、1個の書き込みコマンド)によりバッファ割り当て解除を要求することができる。また、プロセッサに共有バッファ情報のオーバヘッドを管理させることを要求することなく、複数のプロセッサ間でバッファを共有することができる。さらに、このバッファ管理方法により、プロセッサは、BMGR40が要求を処理する間、システムバスおよび/またはプロセッサを停止させることなく、バッファの割り当てまたは割り当て解除を要求することができる。さらに、プロセス100には、共有メモリ30からバッファインデックスを予め取り出し、局部メモリ40へ記憶することが含まれる。従って、プロセッサからの割り当て要求が連続すれば、プロセッサからの要求があったときのみバッファインデックスを取り出すときに要求する場合より短い時間で処理することができる。これに対して、バッファが割り当て解除されるに従って、BMGR40は、バッファインデックスを、フリーリストからバッファインデックスアレイ90に書き戻すことができる。
【0008】
バッファ割り当てコマンドを、バッファプールの割り当て/割り当て解除コマンドレジスタ34への読み込みとして実行することができる。バッファマネージャ40は、バッファポインタアドレスを含む要求プロセッサへ書き込みコマンドを送ることにより、割り当てコマンドに対応する。バッファ割り当て解除コマンドは、バッファプールの割り当て/割り当て解除コマンドレジスタ34への書き込みコマンドとして実行することができる。
【0009】
一実施形態において、割り当て/割り当て解除双方のコマンドについて、1個の割り当て/割り当て解除レジスタを指定することができる。一実施形態において、割り当て/割り当て解除レジスタ34は、各レジスタがメモリ30のバッファプールに対応する32個のレジスタとして実施される。しかしながら、これより多いまたは少ないバッファプールおよび対応する数の割り当て/割り当て解除レジスタを設けることが可能である。
【0010】
一実施形態において、各バッファプールは対応するベースアドレスを有し、本例においては、pool60_baseおよびpool70_baseが、各プール60、70内の第1バッファのメモリ30内の配置を識別する。また、各バッファプールは、プールの特性を識別するために対応する変数を含むことができる。例えば、“buff_sizeX”変数は、プールにおける各バッファのサイズ(例えば、メモリ配置の数)を示すために使用することができ、“#_buffX”変数は、プールに含まれるバッファの数を示すために使用される。システム10の作動中、buff_sizeX変数および#_buffX変数は、アレイ90に記憶されたバッファインデックス値を算出するためにBMGR40により使用され、また、バッファインデックス値から対応するバッファポインタ値を決定するためにBMGR40により使用される。
【0011】
より詳細には、バッファポインタアドレスを含むコマンドにより、バッファにアクセス(例えば、読み出しおよび書き込み)することができる。しかしながら、BMGR40上のフリーリスト巡回待ち行列は、バッファインデックスを記憶するために使用される。従って、バッファをプロセッサに割り当てると、フリーリストからのバッファインデックスは、要求プロセッサへ返されるバッファポインタアドレスに変換する。一実施形態において、メモリ30内におけるバッファインデックスのバッファポインタアドレスおよび該バッファを含むバッファプールの関連する変数(例えばbuff_sizeXおよび#_buffx)を使用して、プール内のバッファのバッファインデックスを決定する。一例として、第1バッファのバッファインデックスは、バッファのバッファポインタアドレスを、該バッファを含むプールのbuff_sizeX変数で割ることにより、決定された値と同値に設定することができる。一方、バッファのバッファポインタアドレスは、そのバッファインデックス値に、該バッファを含むプールの関連するbuff_sizeX値を掛けることにより、決定することができる。
【0012】
各バッファプールの数および特性は、プログラム化することができる。例えば、各バッファプールの特性は、システム初期化シーケンス中、またはシステム動作中に設定される。バッファプールおよびその特性は、システム10の作動前に初期化し、作動中には原則として静止状態に維持する。システム10の作動中にバッファプールの特性を変更するために、プールに対するすべての動作を停止し、バッファプール特性値をリセットした後、該バッファを取り扱う動作を再開することができる。
【0013】
システム10の一実施形態において、BMGR40は、プロセッサ21−29に対してコマンドを送受信し、メモリ30に対してデータを送受信するバスインターフェース42を含む。また、バッファマネージャ40は、インターフェース42からの受信コマンドを復号する復号論理44を含み、バッファインデックスからのバッファポインタアドレスを決定する。
【0014】
一実施形態において、システム10の作動中、BMGR40は、「プールコンテキスト」情報、例えば、BMGR40に管理された各バッファプールに関する情報を、局部メモリ41に記憶する。プールコンテキスト情報には、例えば、プールベースアドレス、およびバッファプールに関連する変数buff_sizeXおよび#_buffXが含まれる。プールコンテキスト情報は、フリーリス上のバッファインデックスを、バッファプール内のバッファにアクセスするとき、プロセッサにより利用可能なバッファポインタアドレスに変換するために、復号ロジック44により使用することができる。
【0015】
一実施形態において、プロセッサは、1個のコマンドにより、複数のバッファの割り当てまたは割り当て解除を要求することができる。例えば、プロセッサは、1個のバッファを特定するコマンドまたは4個のバッファを特定するコマンドを送出することができる。他の例として、プロセッサは、‘n’値を特定するバッファ割り当てコマンドを送出することができるが、このn値はプロセッサによって要求されたバッファの数に対応する。これに対応して、BMGR40は、各ポインタがプール内において割り当てられたバッファの配置に対応する複数のバッファポインタを、要求を出したプロセッサに返すことができる。
【0016】
一実施形態において、複数のバッファインデックスは、1個のバス50コマンドをもつBMGR40により、(バス50上のアクティビティ量を減少させるために)予め取り出される。例えば、4個以上のバッファインデックスをBMGR40により割り当てたときはいつでも、事前取り出しコマンドをマスターFIFO44cに配置する。マスターインターフェース制御44bは、フリーリスト90から4個の追加バッファインデックスを要求するメモリ30に読み出しコマンドを送ることができ、BMGR40は、メモリ30から受信したとき、これらの追加バッファインデックスをバッファプールのフリーリスト待ち行列に記憶する。
【0017】
プロセス100は、プロセス100の動作中にR_CNTに適用されるインクリメント値および/またはデクリメント値として使用されるMAX_RCNT値を選択的に含むことができる。例えば、アクション(127)、(135)および(140)により、MAX_RCNT値は、複数のバッファを割り当て解除するときに使用することができる。
【0018】
プロセス100の一実施形態において、割り当てに利用できるプール内にバッファがないとBMGR40が判定した(115)場合、ヌルポインタ(すなわち、0の値)が要求を発したプロセッサに返される。このとき、要求を発したプロセッサは、他のバッファ割り当てコマンドを引き続いて送ることができる。図2をさらに参照すると、フリーリスト上に利用できるバッファがないとプロセス100で判定した(115)場合、BMGR40は、要求を発したプロセッサにヌルポインタを送り(116)、追加のバッファインデックスがメモリ30から必要とされているかを判定し(125)、追加のバッファインデックスがバッファマネージャ40により必要とされていると判断した場合、メモリ30からバッファインデックスを取り出す(126)。
【0019】
一実施形態において、バッファがプロセッサに割り当てられる前に、メモリ30に記憶されたR_CNT値を最初に1の値に設定する。それ故、バッファの割り当て中は、対応するR_CNTはインクリメントされない。これにより、システム10により実行されるバスコマンド周期数を減少させることができる。バッファの割り当て解除を行うか、またはR_CNT値をインクリメントするために、プロセッサはバッファが割り当てられたバッファプールについて知る必要はない。より詳細には、プロセッサは、BMGR40に対して、バッファプールのアドレス範囲内のポインタアドレスを含む書き込みコマンドを送ることができ、BMGR40は、バッファプールに対応するプールを決定する。
【0020】
以下の例1は、プロセス100の機能に対応するシステム10の動作の例を表す。
【0021】
例1;
1)プロセッサ21は、pool_10_alloc/deallocレジスタ(@BMGRアドレス=0x0000_0540)を読み込み、バッファインンデックス#5は、フリーリスト先頭ポインタが示している場所にある(そのため、バッファインデックス#5は、局部メモリ41事前取出バッファになければならない)。
【0022】
2)BMGR40は、バッファインデックス#5、例えば、ポインタ(pool=10、indice=5)=pool_10_base+(pool_10_buffer_size*5)に対応するポインタアドレスを決定する。
【0023】
3)BMGRは、決定されたポインタアドレス(10、5)をプロセッサ21に送り、また、巡回待ち行列フリーリストの先頭ポインタをインクリメントさせ、他の割り当てコマンドに備えて巡回待ち行列フリーリストの次の場所に指定する。
【0024】
4)プロセッサ21は、ポインタ(10、5)をプロセッサ22に送る(場合によっては、また、プロセッサ21は、例えば、プロセッサ22のコマンドを送ってプロセッサ21に割り当てられたバッファ中に見出されるデータを処理する。)
5)プロセッサ21または22は、インクリメントコマンドをBMGR40に送り、例えばポインタ(10、5)中のアドレスに書き込みコマンドを送ることにより、ポインタ(10、5)に対応するR_CNTをインクリメントする(R_CNTをインクリメントする書き込みコマンドは、特定のバッファのアドレス範囲内のいかなるアドレスも含むことができ、BMGR40は、アドレスからの適切なバッファを決定し、対応するbuffR_CNT(10、5)をインクリメントすることを認識していただきたい。)
6)プロセッサ21および22は、割り当てられたバッファ(10、5)に継続的にアクセスすることができる。それとほぼ同時に、BMGRは、メモリ30からR_CNT(10、5)を読み込み、R_CNTをインクリメントし、メモリ30に更新したR_CNT値を書き戻すことにより、対応するバッファR_CNT(10、5)をインクリメントする。
【0025】
7)プロセッサ21は、バッファ(10、5)にアクセスする際、バッファ(10、5)内のいずれのアドレスをもいずれのpool_x割り当て解除レジスタ34に書き込むことにより、割り当て解除コマンドをBMGR40に送る。
【0026】
8)BMGR40は、割り当て解除コマンドを受信し、バッファ(10、5)の対応するR_CNT値を決定し、メモリ30からR_CNT(10、5)値を読み込み、R_CNT(10、5)をデクリメントし、デクリメントされたR_CNT(10、5)=1であることを決定し、デクリメントされたR_CNT(10、5)値をメモリ30に書き戻す。
【0027】
9)プロセッサ22は、バッファ(10、5)へのアクセスを行うと、バッファ(10、5)内のいずれかのアドレスをいずれかのpool_x割り当て解除レジスタ34に書き込むことにより、割り当て解除コマンドをBMGR40に送る。
【0028】
10)BMGR40は、割り当て解除コマンドを受信し、バッファ(10、5)の対応するR_CNT(10、5)値を決定し、メモリ30からR_CNT(10、5)値を読み込み、R_CNT(10、5)=0にデクリメントし、デクリメントされたR_CNT(10、5)=0であることを決定し、この場合、メモリにR_CNT(10、5)=0を書き戻す代わりに、R_CNT(10、5)=1をメモリに残す。2個のバスコマンドトランザクション、例えば、1→0と移行するR_CNT値を読み込み、更新し、書き戻す第1バスコマンドおよびR_CNTを0→1と移行する第2バスコマンドの実行を省くことができるため、R_CNT(pool、indice)=1を残すことは重要である。
【0029】
11)また、BMGR40は、局部メモリ41におけるこのバッファプール巡回待ち行列のフリーリスト最後尾ポインタをインクリメントする。
【0030】
例1において、工程7)で、BMGR40がR_CNT(10、5)をインクリメントした後、工程9)で、BMGR40は、R_CNT(10、5)をデクリメントすることを認識していただきたい。一実施形態において、工程7)および9)の操作を除くことが可能である。より詳細には、第1プロセッサ(例えば、プロセッサ21)を「割り当て装置」として指定し、第2プロセッサ(例えば、プロセッサ22)を「割り当て解除装置」として指定した場合。この場合、インクリメントおよび割り当て解除をそれぞれ行う複数のプロセッサを有する代わりに、1つのプロセッサのみがバッファ割り当てコマンドのみを実行し、第2プロセッサは、特定のバッファの割り当て解除コマンドのみを実行する。システム10の操作および/またはプロセス100でこの方法を行うことにより、バッファの割り当て、割り当て解除および/またはR_CNTのインクリメントに要するバスコマンド周期の数を減少させることができる。
【0031】
一実施形態において、割り当てまたは割り当て解除コマンドには、割り当てらえるか割り当て解除されるバッファのアドレス境界内にあるいずれかのアドレスを含むことができる。より詳細には、BMGR40は、プロセッサにより送られたポインタアドレス上でアドレス境界チェックを行い、どのバッファのR_CNTが更新を必要とするかを判定することができる(例えば、図2に説明した動作(155)および(135)を参照)。BMGR40がアドレス境界チェックを行うこの方法は、バッファ割り当てまたは割り当て解除を要求するために、プロセッサ21−29が割り当てられたバッファのベースプールアドレスを記憶する必要はないことを示している。従って、バッファ内の位置のポインタアドレスはどれも、プロセッサからBMGR40に送られた割り当てまたは割り当て解除コマンドの一部として使用することができる。
【0032】
一実施形態において、割り当てられた(または、以前割り当てられた)バッファに対応するR_CNTをインクリメントまたはデクリメントするために、BMGR40は、読み込みコマンドをメモリ30に送り、該バッファに対応するR_CNTアレイ98からR_CNT値を読み出させる。BMGR40は、メモリ30からR_CNTを受信すると、R_CNT値をインクリメントまたはデクリメントし、(R_CNTの更新値により)更新済みR_CNT値をメモリ30に書き戻すことができる。
【0033】
一実施形態において、復号論理ブロック44を、他のコマンドの処理前にバッファ割り当てコマンドを処理するように構成する。より詳細には、復号論理44には、復号論理44a、マスターインターフェース論理44bおよびプール状態制御論理44dが含まれる。マスターインターフェース論理ブロック44bには、復号論理44aからの割り当て解除コマンドおよびインクリメントコマンドを保持するために使用されるFIFO待ち行列44cが含まれる。バッファ割り当て解除コマンドおよび/またはインクリメントコマンドが後にマスターインターフェース制御論理44cにより処理されるためにFIFO44cに保存されるのに対し、復号論理44aにより受信されたバッファ割り当てコマンドは、受信されたときに処理される。そのため、バッファ割り当てコマンドがBMGR40によって処理されるのを待機しているプロセッサは、バッファ処理割り当て解除および/またはR_CNT更新の処理を待機する必要はない。
【0034】
一実施形態において、復号論理44には、プールコンテキスト情報を記憶して局部メモリ41にアクセスするプール状態制御44dが含まれる。本例において、プール状態制御44dは、接続されてコマンド復号44aおよびマスターインターフェース制御44b双方からアクセス要求を受信する。プール状態制御44bは、コマンド復号44aおよびマスターインターフェース論理44dからのアクセス要求の調停を行い、データの読み込みおよび書き出しを局部メモリ41に対して行う。
【0035】
各プロセッサ21−29およびBMGR40は、オペレーティングシステムを装備することができ、オペレーティングシステムとは、プロセッサの動作および資源の割り当てを制御するソフトウェアである。用語「プロセス」または「プログラム」とは、ソフトウェア、例えば、プロセッサまたはコンピュータシステム上で実行することのできるアプリケーションプログラムのことをいう。アプリケーションプログラムは、オペレーティングシステムを介して利用可能なコンピュータ資源を使用して、利用者が望むタスクを行う実行可能な命令のセットである。
【0036】
プロセッサ21−29およびBMGR40は、ハードウェア、ソフトウェアまたはこれら2つの組み合わせの中に実施することができる。プロセッサ、プロセッサにより読み取り可能な記憶媒体(揮発性メモリおよび不揮発性メモリおよび/または記憶部品を含む)、少なくとも1個の入力装置および1個以上の出力装置をそれぞれ含むプログラム可能なコンピュータまたは他の機械で実行されるコンピュータプログラムにおいて、それらを実施することができる。プログラムコードは、入力装置(例えば、マウスまたはキーボード)を用いて入力されるデータに適用して、アプリケーションを実行し、出力情報を生成することができる。
【0037】
アプリケーションを実行するコンピュータが記憶媒体または記憶装置を読み込んだとき、コンピュータを構成および操作する一般または特別目的プログラム可能なコンピュータにより読み取ることが可能な記憶媒体/製品(例えば、CD−ROM、ハードディスクまたは磁気ディスケット)上で、各コンピュータプログラムを記憶することができる。また、実行されるとコンピュータプログラム内の命令により、アプリケーションに従って機械を作動させるコンピュータプログラムにより構成された機械読み取り可能な記憶媒体として、それらを実施することができる。
【0038】
本発明は、上述した特定の実施形態に限定されるものではない。例えば、上述の例は、マルチプロセッサシステムのプロセッサを用いて説明した。しかしながら、例えば、共有メモリにアクセスする機能を含む機能装置として1個以上のプロセッサを実施することができ、例えば、アプリケーション特化集積回路(“ASICS”)として機能装置を実施ことができる。例えば、BMGR40の局部メモリを用いて上記装置を説明した。しかしながら、局部メモリは、レジスタとして部分的に装備され、例えば、バッファインデックスおよびプールコンテキスト情報を記憶するために使用することができる。他の例として、割り当て/割り当て解除レジスタを特定するBMGR40に読み取りコマンドを送ることにより、バッファ割り当てを要求するプロセッサを説明した。しかしながら、レジスタの特定を必要としない他の方法で、割り当て/割り当て解除コマンドを実行することが可能である。
【0039】
また、本明細書に記載のない他の実施形態についても、以下の請求項の範囲である。
【図面の簡単な説明】
【0040】
【図1】図1は、マルチプロセッサシステムのブロック図である。
【図2】図2は、バッファ管理のための工程の流れ図である。
Claims (17)
- 第1の数のエントリーを有するバッファインデックスの第1フリーリストを共有メモリに記憶する工程であって、各バッファインデックスは共有メモリ中のバッファのアドレスに対応する、工程と、
巡回待ち行列状態である、第2の数のエントリーを有するバッファインデックスの第2フリーリストを、バッファインデックスの第1フリーリストからバッファインデックスを予め取り出すことによって、第2メモリに記憶する工程であって、該第2の数のエントリーは、該第1の数のエントリーより少ない、工程と、
第1プロセッサから第1バッファ割り当てコマンドを受信する工程であって、該第1バッファ割り当てコマンドは該共有メモリ内のバッファのプールに関連するレジスタアドレスを含む、工程と、
該第2フリーリスト内のフリーバッファに対応するバッファインデックスの利用可能性に基づき、バッファがバッファプール内で利用可能であるかを判定する工程と、
バッファが利用可能であると判定された場合、該バッファを該第1プロセッサに割り当てる工程と
を含むことを特徴とする方法。 - 前記第2フリーリストからのバッファインデックスを、バッファの割り当て解除に続き、前記第1フリーリストに書き戻す工程をさらに含むことを特徴とする、請求項1記載の方法。
- バッファコンテキスト情報を前記第2メモリに記憶することをさらに含み、前記バッファコンテキスト情報はベースプールアドレス、可変バッファサイズおよび可変バッファの数のうちの少なくとも1個を含み、該バッファコンテキスト情報は、前記バッファがバッファプール内で利用可能であるかを判定する工程において用いられることを特徴とする、請求項1記載の方法。
- 前記バッファプール中のバッファのサイズに基づき、バッファインデックス値またはバッファポインタアドレスを決定することをさらに含むことを特徴とする、請求項3記載の方法。
- 前記バッファプール中のバッファの数に基づき、バッファインデックス値またはバッファポインタアドレスを決定することをさらに含むことを特徴とする、請求項3記載の方法。
- 前記割り当てる工程は、
前記割り当てられたバッファに対応するバッファポインタアドレスを前記第1プロセッサに送ることをさらに含むことを特徴とする、請求項1記載の方法。 - バッファプールに関連する前記アドレスは、該バッファプールに関連するアドレス範囲内のアドレスを含むことを特徴とする、請求項6記載の方法。
- 前記方法は、共有メモリに参照カウント値を記憶することをさらに含み、該参照カウント値は、バッファにアクセスするプロセッサの数に対応することを特徴とする、請求項1記載の方法。
- 第2プロセッサからバッファインクリメントコマンドを受信する工程であって、該バッファインクリメントコマンドは、前記割り当てられたバッファに関連するアドレスを含む、工程と、
該割り当てられたバッファの参照カウントを更新する工程と
をさらに含むことを特徴とする、請求項8記載の方法。 - 前記バッファプール内の複数のバッファの要求を特定する割り当てコマンドを受信する工程と、
該バッファプール内に、少なくとも2個のバッファを割り当てる工程と
をさらに含むことを特徴とする、請求項8記載の方法。 - 複数のプロセッサのうちの少なくともひとつから、割り当て解除コマンドを受信する工程と、
前記割り当てられたバッファの参照カウント値を更新する工程と
をさらに含むことを特徴とする、請求項8記載の方法。 - システムバスと、
該システムバスに接続された複数のプロセッサと、
該複数のプロセッサからデータを送受信するために、該システムバスに接続され、バッファのプールおよび参照カウント値のアレイを含む、共有メモリであって、参照カウントアレイ内の各参照カウント値は、バッファプール内のバッファに対応する、共有メモリと、
共有メモリ内に記憶された第1の数のエントリーを有するバッファインデックスの第1フリーリストであって、該第1フリーリスト内の各バッファインデックスは該バッファプール内のバッファに対応する、第1フリーリストと、
該複数のプロセッサのうちの少なくとも1つからバッファ割り当てコマンドを受信し、プロセッサにバッファ割り当て応答を送るために、該システムバスに接続されたバッファマネージャと、
を含む、システムであって、
該バッファマネージャは、該複数のプロセッサの1つからのバッファ割り当てコマンドに応答して、該バッファプールからのバッファを割り当て、かつ、共有メモリへ/からデータを送受信するために作動し、バッファマネージャは、バッファインデックスの該第1フリーリスト内の第1の数のエントリーより少ない第2の数のエントリーを有するバッファインデックスの第2フリーリストを局部メモリに記憶する局部メモリと、該複数のプロセッサから受信されたコマンドを受信および復号し、かつ、該局部メモリに記憶されたバッファの該第2フリーリストにアクセスし、該参照カウントアレイ内の参照カウントを更新するために作動するコマンド復号論理ブロックとを含むことをすることを特徴とするシステム。 - 前記局部メモリに記憶されたプールコンテキスト情報であって、プールコンテキスト情報は前記共有メモリに規定されたバッファプールに対応し、該プールコンテキスト情報は、プールベースアドレス、バッファプールのサイズおよびバッファプールにおけるエントリーの数のうちの少なくとも1個を含む、プールコンテキスト情報をさらに含むことを特徴とする、請求項12記載のシステム。
- 復号論理は、前記プールコンテキスト情報に基づいて、バッファインデックスおよびバッファポインタアドレスを決定するように動作する論理をさらに含むことを特徴とする、請求項13記載のシステム。
- 機械により実行されたとき、
各々が共有メモリ中のバッファのアドレスに対応するバッファインデックスであって、第1の数のエントリーを有するバッファインデックスの第1フリーリストを該共有メモリに記憶し、
該第1の数のエントリーより少ない第2の数のエントリーを有するバッファインデックスの第2フリーリストを、該第2のフリーリスト上に記憶されるべきバッファインデックスの該第1フリーリストからバッファインデックスを予め取り出すことによって、第2メモリに記憶し、
該共有メモリ内のバッファのプールに関連するレジスタアドレスを含む第1バッファ割り当てコマンドを第1プロセッサから受信し、
該第2フリーリスト内のフリーバッファに対応するバッファインデックスの利用可能性に基づき、バッファが該バッファプール内で利用可能であるかを判定し、
バッファが利用可能であると判定された場合、該バッファプール内のバッファを該第1プロセッサに割り当てる、
という結果を生じる指示を記憶した機械読み取り可能な記憶媒体。 - 機械により実行されたとき、
バッファインデックスを、前記第2フリーリストからバッファの割り当て解除に続き、前記第1フリーリストに書き戻す、
という結果を生じる指示をさらに含むことを特徴とする、請求項15記載の機械読み取り可能な記憶媒体。 - 機械により実行されたとき、
前記バッファプール内のバッファのサイズに基づき、バッファインデックス値またはバッファポインタアドレスを決定する、
という結果を生じる指示をさらに含むことを特徴とする、請求項15記載の機械読み取り可能な記憶媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/340,078 US6931497B2 (en) | 2003-01-09 | 2003-01-09 | Shared memory management utilizing a free list of buffer indices |
PCT/US2003/040967 WO2004063850A2 (en) | 2003-01-09 | 2003-12-19 | Managing memory by using a free buffer pool |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2006513493A JP2006513493A (ja) | 2006-04-20 |
JP2006513493A5 JP2006513493A5 (ja) | 2010-09-09 |
JP4599172B2 true JP4599172B2 (ja) | 2010-12-15 |
Family
ID=32711237
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004566587A Expired - Fee Related JP4599172B2 (ja) | 2003-01-09 | 2003-12-19 | フリーバッファプールを使用することによるメモリの管理 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6931497B2 (ja) |
EP (1) | EP1581872A4 (ja) |
JP (1) | JP4599172B2 (ja) |
TW (1) | TWI359358B (ja) |
WO (1) | WO2004063850A2 (ja) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7133977B2 (en) * | 2003-06-13 | 2006-11-07 | Microsoft Corporation | Scalable rundown protection for object lifetime management |
US7962707B2 (en) * | 2005-07-06 | 2011-06-14 | Honeywell International Inc. | Apparatus and method for deterministic garbage collection of a heap memory |
US7487271B2 (en) * | 2005-09-22 | 2009-02-03 | Motorola, Inc. | Method and apparatus using buffer pools and arrays of buffer pointers for sharing memory in a multiprocessor system |
US7827373B2 (en) * | 2005-10-31 | 2010-11-02 | Honeywell International Inc. | System and method for managing a short-term heap memory |
US20070150593A1 (en) * | 2005-12-28 | 2007-06-28 | Telefonaktiebolaget Lm Ericsson (Publ) | Network processor and reference counting method for pipelined processing of packets |
US7694041B2 (en) * | 2006-05-19 | 2010-04-06 | Arabella Software Ltd. | Method for managing buffers pool and a system using the method |
US8510743B2 (en) * | 2007-10-31 | 2013-08-13 | Google Inc. | Terminating computer applications |
US7971007B2 (en) * | 2008-07-08 | 2011-06-28 | Silicon Motion, Inc. | Downgrade memory apparatus, and method for accessing a downgrade memory |
JP2012010182A (ja) * | 2010-06-25 | 2012-01-12 | Sony Corp | 情報処理装置と情報処理方法 |
US8972995B2 (en) * | 2010-08-06 | 2015-03-03 | Sonics, Inc. | Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads |
US8745291B2 (en) * | 2011-10-04 | 2014-06-03 | Qualcomm Incorporated | Inter-processor communication apparatus and method |
US8949491B1 (en) | 2013-07-11 | 2015-02-03 | Sandisk Technologies Inc. | Buffer memory reservation techniques for use with a NAND flash memory |
US10268410B2 (en) | 2014-10-20 | 2019-04-23 | Netapp, Inc. | Efficient modification of storage system metadata |
US9965196B2 (en) * | 2014-10-20 | 2018-05-08 | Netapp, Inc. | Resource reservation for storage system metadata updates |
CN105224258B (zh) * | 2015-10-19 | 2018-05-22 | 深圳芯邦科技股份有限公司 | 一种数据缓冲区的复用方法与系统 |
US10169073B2 (en) | 2015-12-20 | 2019-01-01 | Intel Corporation | Hardware accelerators and methods for stateful compression and decompression operations |
US10310897B2 (en) * | 2016-09-30 | 2019-06-04 | Intel Corporation | Hardware accelerators and methods for offload operations |
US10235310B2 (en) | 2016-11-29 | 2019-03-19 | International Business Machines Corporation | Deallocation of memory buffer in multiprocessor systems |
US10210106B2 (en) * | 2017-03-15 | 2019-02-19 | International Business Machines Corporation | Configurable hardware queue management |
US10175912B1 (en) | 2017-07-05 | 2019-01-08 | Google Llc | Hardware double buffering using a special purpose computational unit |
US11397672B2 (en) * | 2017-11-29 | 2022-07-26 | Beijing Memblaze Technology Co., Ltd | Deallocating command processing method and storage device having multiple CPUs thereof |
KR101851948B1 (ko) * | 2018-01-29 | 2018-04-25 | (주)베스트케이에스 | 데이터 페이지의 버퍼 풀 관리 방법 |
JP7484633B2 (ja) | 2020-09-30 | 2024-05-16 | 株式会社デンソー | 共用ストレージ管理装置及び共用ストレージ管理方法 |
US11907206B2 (en) | 2021-07-19 | 2024-02-20 | Charles Schwab & Co., Inc. | Memory pooling in high-performance network messaging architecture |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5837887A (ja) * | 1981-08-28 | 1983-03-05 | Nippon Telegr & Teleph Corp <Ntt> | 記憶空間管理方式 |
JPS60118937A (ja) * | 1983-11-30 | 1985-06-26 | Sharp Corp | マルチ・タスク制御用デバイス |
JPS61290548A (ja) * | 1985-06-19 | 1986-12-20 | Fujitsu Ltd | 記憶装置の領域管理方式 |
JPH077380B2 (ja) * | 1985-07-24 | 1995-01-30 | 株式会社日立製作所 | バッファ管理方法 |
EP0522224B1 (en) * | 1991-07-10 | 1998-10-21 | International Business Machines Corporation | High speed buffer management |
US5682553A (en) * | 1995-04-14 | 1997-10-28 | Mitsubishi Electric Information Technology Center America, Inc. | Host computer and network interface using a two-dimensional per-application list of application level free buffers |
EP0872798A1 (en) * | 1997-03-21 | 1998-10-21 | CANAL+ Société Anonyme | Computer memory organization |
US6618793B2 (en) * | 2000-12-18 | 2003-09-09 | Redback Networks, Inc. | Free memory manager scheme and cache |
-
2003
- 2003-01-09 US US10/340,078 patent/US6931497B2/en not_active Expired - Lifetime
- 2003-12-19 EP EP03815240A patent/EP1581872A4/en not_active Withdrawn
- 2003-12-19 JP JP2004566587A patent/JP4599172B2/ja not_active Expired - Fee Related
- 2003-12-19 WO PCT/US2003/040967 patent/WO2004063850A2/en active Application Filing
- 2003-12-30 TW TW092137494A patent/TWI359358B/zh not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
TWI359358B (en) | 2012-03-01 |
US6931497B2 (en) | 2005-08-16 |
JP2006513493A (ja) | 2006-04-20 |
US20040139284A1 (en) | 2004-07-15 |
TW200428210A (en) | 2004-12-16 |
EP1581872A2 (en) | 2005-10-05 |
WO2004063850A3 (en) | 2004-12-23 |
WO2004063850A2 (en) | 2004-07-29 |
EP1581872A4 (en) | 2007-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4599172B2 (ja) | フリーバッファプールを使用することによるメモリの管理 | |
US5386532A (en) | Method and apparatus for transferring data between a memory and a plurality of peripheral units through a plurality of data channels | |
US5388237A (en) | Method of and apparatus for interleaving multiple-channel DMA operations | |
JP4142141B2 (ja) | コンピュータ・システム | |
EP0859978B1 (en) | A system and method for fast context switching between tasks | |
US6081854A (en) | System for providing fast transfers to input/output device by assuring commands from only one application program reside in FIFO | |
US5675793A (en) | Dynamic allocation of a common buffer for use by a set of software routines | |
US6076151A (en) | Dynamic memory allocation suitable for stride-based prefetching | |
US5944815A (en) | Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access | |
US5740406A (en) | Method and apparatus for providing fifo buffer input to an input/output device used in a computer system | |
US9086920B2 (en) | Device for managing data buffers in a memory space divided into a plurality of memory elements | |
US20090055627A1 (en) | Efficient Pipeline Parallelism Using Frame Shared Memory | |
US20230196502A1 (en) | Dynamic kernel memory space allocation | |
JPH05224921A (ja) | データ処理システム | |
US5696990A (en) | Method and apparatus for providing improved flow control for input/output operations in a computer system having a FIFO circuit and an overflow storage area | |
JPH076115A (ja) | データ処理システムのソフトウェアユーザによるハードウェアデータ移動機能の制御方法、プロセッサ間の操作の同期化方法、及び複数の装置制御ブロックの付与方法 | |
US5924126A (en) | Method and apparatus for providing address translations for input/output operations in a computer system | |
US5638535A (en) | Method and apparatus for providing flow control with lying for input/output operations in a computer system | |
KR20130069727A (ko) | 공유 스택의 부분들을 할당하기 위한 시스템 및 방법 | |
JP2006513493A5 (ja) | ||
US8291426B2 (en) | Memory allocators corresponding to processor resources | |
KR20080017292A (ko) | 내장 시스템들을 위한 저장 아키텍쳐 | |
US5893159A (en) | Methods and apparatus for managing scratchpad memory in a multiprocessor data processing system | |
JP2001290706A (ja) | Tlbキャッシュのためのプリフェッチ | |
EP1557755A1 (en) | Method for transferring data in a multiprocessor system, multiprocessor system and processor carrying out this method. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061114 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100218 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100223 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100521 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100528 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100622 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100629 |
|
A524 | Written submission of copy of amendment under article 19 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A524 Effective date: 20100720 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100902 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100927 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4599172 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131001 Year of fee payment: 3 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D04 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |