JP4131983B1 - メモリ管理装置 - Google Patents
メモリ管理装置 Download PDFInfo
- Publication number
- JP4131983B1 JP4131983B1 JP2007525509A JP2007525509A JP4131983B1 JP 4131983 B1 JP4131983 B1 JP 4131983B1 JP 2007525509 A JP2007525509 A JP 2007525509A JP 2007525509 A JP2007525509 A JP 2007525509A JP 4131983 B1 JP4131983 B1 JP 4131983B1
- Authority
- JP
- Japan
- Prior art keywords
- segment
- buffer
- space
- control circuit
- register
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0215—Addressing or allocation; Relocation with look ahead addressing means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Storage Device Security (AREA)
- Memory System (AREA)
Abstract
【選択図】図4
Description
この装置は、1以上のタスクを実行する実行制御回路と、セグメント単位でデータを保持するメモリと、論理アドレスによりアクセスされるバッファ空間をタスクに割り当てる割当制御回路と、論理アドレスを物理アドレスに変換するアドレス変換回路と、バッファ空間とセグメントとの対応関係をセグメント割当情報として保持する状態保持回路と、セグメントキューおよびバッファキューを備える。
状態保持回路は、複数のレジスタグループを含み、レジスタグループは複数個のセグメントレジスタを含む。レジスタグループは複数のバッファ空間のいずれかと対応づけられる。セグメントレジスタには該当バッファ空間における論理アドレス範囲のうちの所定範囲を特定する範囲番号が設定されている。
割当制御回路は、バッファ取得要求を入力されたとき、バッファキューとセグメントキューからそれぞれバッファIDと1以上のセグメントIDを取得し、取得したバッファIDに対応するレジスタグループにおいて、取得した1以上のセグメントIDを1以上のセグメントレジスタにそれぞれ登録することにより、バッファ空間とセグメントとの対応関係を状態保持回路に設定する。バッファIDとはバッファ空間を一意に識別するためのIDであり、セグメントIDとはセグメントを一意に識別するためのIDである。
アドレス変換回路は、メモリに対するアクセス要求を入力されたとき、セグメント割当情報を参照して、アクセス要求元のタスクに対応するレジスタグループにおいて、指定された論理アドレスに対応する範囲番号を特定し、その範囲番号に対応するセグメントレジスタに保持されているセグメントIDを取得し、そのセグメントIDに対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換する。
メモリ管理装置100の基本構成を「基本例」として説明したあと、その機能の一部を拡張・変更した2種類の「改良例」についても説明する。
ここでいう「メモリ」とは、厳密にはヒープメモリ(heap memory)である。同図においては、以下のような経過にてヒープメモリの確保および解放がなされた場合を示している。
時刻t1:ヒープメモリが初期化される。ヒープメモリはすべて空き領域となっている。
時刻t2:1以上のタスクが開始される。タスクによるメモリの取得要求に基づいて、OSは、A〜Eの5つの領域を確保する。以下、同図において「A」と表記されている領域のことを「割当領域(A)」と表記する。同図斜線で示す部分は割当領域であることを示す。
時刻t3:タスクの実行過程において、タスクによるメモリの解放要求に基づいて、OSは割当領域(B)と割当領域(D)を解放する。一方、OSは、新たなメモリ取得要求に基づいて、割当領域(F)と割当領域(G)をヒープメモリに確保する。
時刻t4:タスクの実行過程において、OSは割当領域(A)を解放する。一方、OSは、割当領域(H)、割当領域(I)および割当領域(J)をヒープメモリに確保する。
固定割当方式においては、ヒープメモリはあらかじめ固定長の「単位領域」に分割される。同図においては、ヒープメモリは5つの単位領域に分割されている。時刻t1においてヒープメモリは初期化されており、5つの単位領域はすべて空き領域である。そして、時刻t2に1以上のタスクにより4つの割当領域が要求されている。OSは、割当領域(A)、割当領域(B)、割当領域(C)、割当領域(D)を別々の単位領域に確保する。固定割当方式では、1つの単位領域には1つの割当領域を確保可能となっている。
本実施例に示すメモリ管理方法では、256バイト程度の「セグメント」を単位としてヒープメモリを管理する。ヒープメモリは、あらかじめ、複数のセグメントに分割され、各セグメントには「セグメントID(以下、「SegID」と表記する。)」とよばれるIDが付与される。同図に示すセグメントのサイズは256バイトである。そのため、SegID(0)のセグメント(以下、「セグメント(ID:0)」と表記する。)は、物理アドレス「0x0000〜0x00FF」に対応する。また、セグメント(ID:1)は、物理アドレス「0x0100〜0x01FF」に対応する。このように、SegIDによってヒープメモリの物理アドレスの範囲が特定される。
本実施例におけるメモリ管理装置100は、図3に示したメモリ管理方式をハードウェアロジックとして実装することにより、効率的なだけではなく高速なメモリ管理を実現している。
[基本例]
CPU110には、アドレスバスADDとデータバスDTが接続されている。CPU110は、アドレスバスADDを介してメモリのアドレスを指定する。ADDは32ビットである。ADDの詳細は図5に関連して説明する。CPU110は、データバスDTを介してデータを送受する。
以下、基本例、および、後に示す改良例の一つである「移行改良例」では、
バッファの数:最大8個
セグメントのサイズ:256バイト
1バッファあたりのセグメント数:最大16個
セグメント総数:128個(16×8=128)
という仕様であるとして説明する。
メモリ(MEM):32ビットの論理アドレスADD[31:0]のうち上位12ビットのADD[31:20]がアクセス先となるメモリを指定する。ADD[31:20]=0のときには第1メモリ112、ADD[31:20]=1のときには第2メモリ130がアクセス先となる。
バッファ(BFID):4ビットのADD[19:16]はアクセス先のバッファ空間を指定する。タスクは、後述する「バッファ取得要求」コマンドによりバッファ空間を割り当てられ、割り当てられたバッファ空間のBFIDを取得し、以降においてはこのBFIDによりアクセス先バッファ空間を指定する。バッファは最大8個であるから、BFIDは「0〜7」のいずれかである。
セグメント番号(SegOdr):4ビットのADD[11:8]は、「セグメント番号(以下、「SegOrder」や「SegOdr」とも表記する。)」を示す。SegOdrは、各バッファ空間における論理アドレス範囲を特定するための番号である。図3の場合であれば、バッファ(H)においてH1(セグメント(ID:0))、H2(セグメント(ID:2))、H3(セグメント(ID:3))のSegOdrはそれぞれ「0」、「1」、「2」となる。セグメント番号により、指定されたバッファ空間における論理アドレス範囲が特定される。1バッファあたりのセグメント数は最大16個なので、セグメント番号は「0〜15」のいずれかである。以下、SegID=mにより示されるセグメントのことを「セグメント(番号:m)」のように表記する。SegIDが第2メモリ130における物理アドレス上の位置を特定し、SegOdrはバッファ空間における論理アドレス上の位置を特定する。セグメント番号に関しては、図6に関連して更に説明する。
セグメント内アドレス(SegAdd):8ビットのADD[7:0]は、「セグメント内アドレス(以下、「SegAdd」とも表記する。)」を示す。セグメントのサイズは256バイトなので、セグメント内アドレスは「0〜255」のいずれかである。
セグメント内アドレス(SegAdd):8ビットのM2AD[7:0]は、セグメント内アドレス(SegAdd)を示す。
たとえば、図3に示した例の場合、M2AD[15:0]においてSegID=1、SegAdd=0x0004であれば、セグメント(ID:1)は物理アドレス「0x0100〜0x01FF」に対応するため、0x0100+0x0004より、物理アドレスは「0x0104」となる。
セグメント(番号:0)は、論理アドレス「0x000〜0x0FF」に対応する。同様に、セグメント(番号:1)は、論理アドレス「0x100〜0x1FF」に対応する。 セグメント(番号:0)、いいかえれば、このバッファ空間の先頭に位置に対応づけられているセグメントは、セグメント(ID:22)である。セグメント(番号:1)は、セグメント(ID:106)と対応づけられている。このような対応関係は、セグメント割当情報として割当制御回路120により状態保持回路126に設定される。セグメント内アドレスM2AD[7:0]により、セグメント内の位置が特定される。
論理アドレスADDは、セグメント割当情報に基づいて、物理アドレスM2ADに変換される。
(1)バッファキュー122
バッファキュー122は、新たに割り当て可能なバッファ空間のBFIDをFIFO(First-In First-Out)方式にて保存するメモリである。割当制御回路120が割り当てることができるバッファ空間は最大8個なので、初期状態においては、バッファキュー122には8つのBFIDが保持される。割当制御回路120は、タスクに新たなバッファ空間を割り当てるときには、バッファキュー122からBFIDを1つ取り出す。また、割当制御回路120は、既に割り当てているバッファ空間を解放するときには、そのBFIDをバッファキュー122に戻す。
a.UAB_WR:割当制御回路120からバッファキュー122への書込信号である。
b.UAB_DI:割当制御回路120からバッファキュー122へのBFID送信信号である。UAB_WRがアサート(assert)されると、UAB_DIに現れているBFIDがバッファキュー122に書き込まれる。バッファ空間を解放するとき、割当制御回路120はUAB_WRをアサートして、BFIDをバッファキュー122に1つ戻す。
c.UAB_RD_ABL:バッファキュー122にBFIDが保持されているか否か、いいかえれば、割り当て可能なバッファ空間が残っているか否かを示す。BFIDが保持されているときの値は「1」、保持されていないときの値は「0」となる。新たなバッファ空間を取得するときに、割当制御回路120はUAB_RD_ABLをチェックして、取得可能か否かを判定する。
d.UAB_RE:割当制御回路120からバッファキュー122への読出信号である。
e.UAB_DO:バッファキュー122から割当制御回路120へのBFID送信信号である。UAB_REがアサートされると、UAB_DOに現れているBFIDがバッファキュー122から割当制御回路120に読み出される。バッファ空間を新たに割り当てるとき、割当制御回路120はUAB_RD_ABL=1であることを確認して、UAB_RDをアサートする。これにより、バッファキュー122からBFIDが1つ取り出される。
セグメントキュー124は、新たに割り当て可能なセグメントのSegIDをFIFO方式にて保存するメモリである。割当制御回路120が割り当てることができるセグメントは最大128個なので、初期状態においては、セグメントキュー124には128個のSegIDが保持される。割当制御回路120は、新たなセグメントをバッファ空間に割り当てるときには、セグメントキュー124からSegIDを取り出す。また、割当制御回路120は、既に割り当てているセグメントを解放するときには、そのSegIDをセグメントキュー124に戻す。
a.UAS_WR:割当制御回路120からセグメントキュー124への書込信号である。
b.UAS_DI:割当制御回路120からセグメントキュー124へのSegID送信信号である。UAS_WRがアサートされると、UAS_DIに現れているSegIDがセグメントキュー124に書き込まれる。バッファ空間の解放などにともなってセグメントを解放するとき、割当制御回路120はUAS_WRをアサートする。
c.UAS_RD_ABL:セグメントキュー124にSegIDが保持されているか否か、いいかえれば、割り当て可能なセグメントが残っているか否かを示す。SegIDが保持されているときの値は「1」、保持されていないときの値は「0」となる。新たなセグメントを取得するときに、割当制御回路120はUAS_RD_ABLを見て、取得可能か否かを判定する。
d.UAS_RE:割当制御回路120からセグメントキュー124への読出信号である。
e.UAS_DO:セグメントキュー124から割当制御回路120へのSegID送信信号である。UAS_REがアサートされると、UAS_DOに現れているSegIDがセグメントキュー124から割当制御回路120に読み出される。バッファにセグメントを割り当てるとき、割当制御回路120はUAS_RD_ABL=1であることを確認して、UAS_RDをアサートする。
CPUインタフェース132は、CPU110のアドレスバスADD、データバスDTと接続され、CPU110から割当制御回路120へのコマンド送信を仲介するデコーダ回路である。また、CPUインタフェース132は、割当制御回路120からCPU110へのデータ送信も仲介する。CPU110から割当制御回路120に対しては、後述する複数種類のコマンドがDTを介して送信される。また、コマンドのパラメータ(以下、「設定パラメータ」とよぶ)もデータバスDTを介して割当制御回路120に送信される。CPUインタフェース132は、このコマンドや設定パラメータを保持するためのレジスタを備える。一方、割当制御回路120からは、コマンドの成功・失敗を示す「結果データ」や、実行結果を示すパラメータ(以下、「結果パラメータ」とよぶ)がCPU110に送信される。CPUインタフェース132は、この結果データや結果パラメータを保持するためのレジスタも備える。
b.REQ_D:CPU110から送信されたコマンドと設定パラメータを示す。割当制御回路120は、REQ_Cがアサートされているとき、REQ_Dからコマンドと設定パラメータを読み出す。
c.RES_C:割当制御回路120により、コマンドの実行完了時にアサートされる信号である。
d.RES_D:割当制御回路120から送信された結果データと結果パラメータを示す。CPUインタフェース132は、RES_Cがアサートされているとき、RES_Dに現れている結果データと結果パラメータをレジスタに記録する。
e.INTR:コマンドの実行完了時に送信される割込信号である。CPUインタフェース132は、結果データをレジスタに記録したあと、INTRをアサートしてCPU110に割込通知する。CPU110は、INTRにより割込通知されると、データバスDTを介してCPUインタフェース132のレジスタから結果データや結果パラメータを読み出す。
このようにして、CPUインタフェース132は割当制御回路120とCPU110の間でコマンドの送信とその結果の返信を中継する。
テーブル保持部134は、状態保持回路126のセグメント割当情報の全部または一部を一時的に保持するレジスタである。割当制御回路120は、状態保持回路126からセグメント割当情報を取得し、テーブル保持部134に記録して、設定内容を変更した後、状態保持回路126に送出することにより、状態保持回路126のセグメント割当情報を更新する。テーブル保持部134は、割当制御回路120が状態保持回路126に対してセグメント割当情報を設定するための作業領域であるといえる。以下、セグメント割当情報のうち、テーブル保持部134に保持されているデータのことを、特に「セグメントテーブル」ともよぶ。
a.WR_BT:割当制御回路120からテーブル保持部134への書込信号である。
b.SEG_ORDER:セグメント番号(SegOdr)を指定する信号である。
c.SEG_ID:SegIDを指定する信号である。WR_BTがアサートされると、セグメントテーブルにおいて、SEG_ORDERにて指定されるセグメントに対してSEG_IDにて指定されるSegIDが書き込まれる。
d.BS_WR:セグメントテーブルを示す。セグメントテーブルの内容はBS_WRにより常時出力されている。割当制御回路120は、状態保持回路126に対する書込信号であるWRをアサートすることにより、BS_WRに現れているデータの全部または一部を状態保持回路126に記録する。
e.BS_RD:状態保持回路126のセグメント割当情報を示す信号である。状態保持回路126に対する読出信号であるRDをアサートすることにより、BS_RDにセグメント割当情報が現れる。
f.BF_ID:BFIDを指定する信号である。
g.WR:割当制御回路120から状態保持回路126に対する書込信号である。WRがアサートされると、BS_WRに現れているセグメントテーブルのうち、BFIDにて指定されるバッファ空間についてのデータが状態保持回路126に記録される。
h.RD:割当制御回路120から状態保持回路126に対する読出信号である。RDがアサートされると、状態保持回路126のセグメント割当情報のうち、BFIDにて指定されるバッファ空間についてデータがBS_RDに現れる。読み出されたデータはテーブル保持部134のセグメントテーブルにコピーされる。
i.CLR:割当制御回路120から状態保持回路126に対するクリア信号である。CLRがアサートされると、BFIDにて指定されるバッファ空間についてのセグメント割当情報をクリアすることができる。
なお、割当制御回路120はCPUインタフェース132およびテーブル保持部134をその回路の一部として含んで形成されてもよい。
状態保持回路126は、複数のレジスタグループ140を備える。各レジスタグループ140は、BFID、すなわち、バッファ空間と対応づけられる。レジスタグループ140aは、BFID=0のバッファ空間(以下、「バッファ空間(ID:0)」と表記する)に対応する。バッファ空間は最大8個なので、レジスタグループ140も8個となる。BFID=nのレジスタグループ140のことを、「レジスタグループ140(ID:n)」と表記することにする。
基本例におけるセグメントレジスタ146は、9ビットレジスタである。レジスタグループ140(ID:n)のセグメントレジスタ146(番号:m)に保持されているデータをBn_Sm[8:0]と表記すると、上位1ビットBn_Sm[8]はバッファ空間(ID:n)のセグメント(番号:m)にセグメントが割り当てられているか否かを示す。Bn_Sm[8]=1は「割当済」、Bn_Sm[8]=0は「未割当」を示す。残り8ビットBn_Sm[7:0]が割り当てられているセグメントのSegIDを示す。
状態保持回路126が、BF_IDによりBFID=0を指定し、CLRをアサートすると、デコーダ142は、BF_0_CLRをアサートする。このとき、レジスタグループ140(ID:0)に含まれる全てのセグメントレジスタ146について、B0_Sm[8]=0にセットされる。こうして、バッファとセグメントの対応関係がレジスタグループ140において解消される。
セグメントレジスタ146のデータは、セレクタ144に出力される。割当制御回路120が、BF_IDによりBFID=nを指定し、RDをアサートすると、セレクタ144は、レジスタグループ140(ID:n)のデータをBS_RDとして割当制御回路120に送出する。
また、セレクタ144は、論理アドレスADDによりBFIDを指定されたときには、該当するレジスタグループ140のデータをB_SO(B_SO0[8:0]、B_SO1[8:0]、・・・、B_SO15[8:0]の集合)としてアドレス変換回路128に送信する。
同図においては、縦1列がちょうど1つのレジスタグループ140に対応している。たとえば、BFID=2、SegOdr=4の欄は、レジスタグループ140(ID:2)のセグメントレジスタ146(番号:4)に保持されているSegIDを示す。同図においてはSegID=20となっている。すなわち、バッファ空間(ID:2)のセグメント(番号:4)には、セグメント(ID:20)が対応づけられている。同図において「−」と表記されている欄は、セグメントが割り当てられていないことを示す。たとえば、レジスタグループ140(ID:0)は、セグメント(番号:0)、セグメント(番号:1)、セグメント(番号:2)にはセグメントが割り当てられているが、それ以降については割り当てられていない。
アドレス変換回路128には、CPU110により指定される論理アドレスADDと、状態保持回路126から送出されるB_SOが入力される。論理アドレスADD[31:0]のうち、ADD[31:16]は、状態保持回路126のセレクタ144に入力され、セレクタ144は、ADD[31:16]に指定されたBFIDについてのセグメント割当情報をB_SOとしてアドレス変換回路128に送信する。
以上の回路構成をもとにして、メモリ管理装置100の処理過程をフローチャートにより説明する。以下、「アドレス変換」、「バッファ取得」、「バッファ全解放」、「バッファ部分解放」、「セグメント移行」という5種類の処理を順番に説明する。
CPU110により実行されるタスクは、論理アドレスADD[31:0]により第2メモリ130のアクセス位置を指定する。アドレス変換回路128は、この論理アドレスADD[31:0]を取得する(S10)。このとき、状態保持回路126は、論理アドレスADD[31:0]のうちADD[31:16]を取得する。状態保持回路126のセレクタ144は、ADD[31:16]のうちのADD[19:16]からBFIDを取得する(S12)。指定されたBFID=nであったとする。状態保持回路126のセレクタ144は、指定されたBFID=nに対応するレジスタグループ140(ID:n)を選択する(S14)。状態保持回路126は、論理アドレスADD[31:0]により指定されたバッファ空間(ID:n)についてのセグメント割当情報をB_SOとしてアドレス変換回路128に送る。
CPU110により実行されるタスクは、その実行結果を保存するためのバッファ空間を要求することがある。このとき、タスクは「バッファ取得要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。バッファ取得要求コマンドの設定パラメータとして、バッファに割り当てるべきセグメントの数も指定される。すなわち、設定パラメータによりバッファ空間の大きさを指定する。割当制御回路120は、バッファ取得要求コマンドをREQ_Dから読み出すと、以下に示すバッファ取得処理を開始する。
一方、BFIDやSegIDの取得に失敗したときには(S26のN、S30のN)、割当制御回路120は所定のエラー処理を実行した後に(S42)、「バッファ取得要求」の失敗を通知する(S44)。エラー処理とは、たとえば、BFIDの取得に成功したもののSegIDの取得に失敗したとき、BFIDをバッファキュー122に返すことにより、バッファ取得処理開始前の状態に原状回復させるための処理である。タスクは、バッファ取得要求に失敗すると、所定時間後にバッファ取得要求を再試行してもよい。
CPU110により実行されるタスクは、いったん確保したバッファ空間をもはや使用しないときにはバッファ空間を解放する。バッファ空間の解放方法としては、バッファ空間に対応づけられているセグメントの全部を解放する「全解放」と一部を開放する「部分解放」の2つがある。全解放時には、タスクは「バッファ全解放要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。バッファ全解放要求コマンドの設定パラメータとして、解放対象となるバッファ空間のBFIDが指定される。割当制御回路120は、バッファ全解放要求コマンドをREQ_Dから読み出すと、以下に示すバッファ全解放処理を開始する。
タスクの実行過程において、バッファ空間内のデータの一部が不要になることがある。このような場合には、不要データを保持しているセグメントを解放することにより、メモリの再利用を促進した方がよい。バッファ部分解放処理とは、バッファ空間に対応づけられている1以上のセグメントのうちの一部を解放するための処理である。
割当制御回路120は、バッファ部分解放要求コマンドを取得する(S66)。割当制御回路120は、設定パラメータにて指定されたBFIDに関して、レジスタグループ140のデータをBS_RDから読み出す(S68)。指定されたBFID=nとする。次に、設定パラメータにて指定された解放アドレスから維持番号を特定する(S70)。レジスタグループ140(ID:n)、いいかえれば、バッファ空間(ID:n)におけるセグメントのうち、「維持番号+1」以降のセグメント番号について、セグメントが割り当てられていないときには(S72のN)、「バッファ部分解放要求」は無効であり、「失敗」を通知する(S82)。
タスクの実行過程において、あるバッファ空間のデータを別のバッファ空間に移動したい場合がある。あるいは、あるバッファ空間と別のバッファ空間の間でメモリ共有(メモリマッピング)を実現したい場合もある。セグメント移行処理とは、バッファ空間に対応づけられているセグメントの割当先を別のバッファ空間に設定するための処理である。
バッファ空間(ID:6)のセグメントをバッファ空間(ID:4)にも割り当てるために、タスクは「セグメント移行要求」コマンドを、CPUインタフェース132を介して割当制御回路120に送信する。設定パラメータは、移行先のBFID=4、移行元のBFID=6である。
仮に、タスクAが自らがアクセス可能なバッファ空間(ID:4)のセグメント(番号:3)のデータの書き換えたとする。このとき、対応するセグメント(ID:201)のデータが書き換えられる。これは、バッファ空間(ID:6)のセグメント(番号:0)のデータの書き換えに他ならない。タスクAがバッファ空間(ID:4)のセグメント(番号:3)にタスクBに渡したいデータを記録すれば、タスクBは自らがアクセス可能なバッファ空間(ID:6)のセグメント(番号:0)からそのデータを読み出すことにより、タスクAから渡されたデータを取得できる。本来、タスクAの論理アドレス空間であるバッファ空間(ID:4)とタスクBの論理アドレス空間であるバッファ空間(ID:6)は別々の論理アドレス空間であるが、セグメントの2重割り当てにより別々のバッファ空間の間で効率的にデータを共有できる。セグメント(ID:11)についても同様である。このように、セグメント移行要求によって、複数のバッファ空間の間のいわゆる「メモリマッピング(memory mapping)」が可能となる。
割当制御回路120は、セグメント移行要求コマンドを取得する(S86)。割当制御回路120は移行先BFID=n1に関して、レジスタグループ140(ID:n1)のデータをBS_RDから読み出し(S88)、テーブル保持部134のセグメントテーブルにコピーする(S90)。次に、移行元BFID=n2に関して、レジスタグループ140(ID:n2)のデータをBS_RDから読み出す(S92)。移行元バッファ空間(ID:n2)において、1つもセグメントが割り当てられていなければ(S94のN)、そもそも移行すべきセグメントがないので「セグメント移行要求」は無効であり、「失敗」を通知する(S110)。
これに対し、本実施例のメモリ管理装置100は、上記したメモリ管理機能をハードウェアロジックにより実行している。第2メモリ130をセグメント単位で利用できるため、第2メモリ130の利用効率を高めることができるだけでなく、CPU110の処理能力とは独立したかたちでメモリ管理を実行できる。このため、CPU110で実行されるタスクの処理パフォーマンスを落とさずにメモリ管理処理を実行できる。また、汎用的なプロセッサであるCPU110によりメモリ管理処理を実行するよりもシンプルなプロセスによりメモリ管理を実現できるため消費電力抑制の面でも有効である。
時間的制約の厳しい環境においてバッファ空間の確保や解放が頻繁に生じるアプリケーションを実行する場合には、本実施例に示すメモリ管理装置100は特に有効である。
図8に示した状態保持回路126では、バッファの数だけレジスタグループ140を設けていた。図18は、レジスタグループ140の数以上のバッファを割り当て可能な状態保持回路126の回路構成を示している。説明を簡単にするため、この状態保持回路126はレジスタグループ140を2つだけ含むとする。図8に示した状態保持回路126との違いは、デコーダ142の機能を備えるCASH制御回路172と、退避メモリ174が搭載されていることである。退避メモリ174は、Dual Port RAM(Random Access Memory)であってもよい。また、各レジスタグループ140には、複数のセグメントレジスタ146に加えて「バッファIDレジスタ170」が追加されている。
割当制御回路120がセグメント割当情報を読み出すためにRDをアサートすると、CASH制御回路172は、退避メモリ174において該当する領域のデータをBS_RDにより出力する。
このような処理方法によれば、図8の状態保持回路126に比べて、状態保持回路126全体としての回路サイズをコンパクトにできる。
次に、基本例に対する改良例として、セグメント移行処理を改良した「移行改良例」について説明する。
[移行改良例]
図16や図17に関連して説明したように、メモリ管理装置100は、移行元バッファ空間のセグメントの割当先を移行先バッファ空間に変更することができる。たとえば、TCP/IP(Transmission Control Protocol/Internet Protocol)に基づく通信系アプリケーションソフトウェアの場合、
コンテンツである送信データを生成するコンテンツ処理
送信データに付与すべきTCP/IPヘッダを生成するTCP/IP処理
送信データに付与すべきMAC(Media Access Control)ヘッダを生成するMAC処理
という3つの処理を定義できる。これらの処理は必ずしも別々のプロセスや別々のスレッドである必要はないが、ここでは特に限定しない。
メモリ管理装置100は、コンテンツ処理、TCP/IP処理およびMAC処理のためにそれぞれバッファ空間を設定する。同図では、コンテンツ処理のバッファ空間(ID:4)には10個、TCP/IP処理のバッファ空間(ID:3)には2個、MAC処理のバッファ空間(ID:0)には3個のセグメントが割り当てられている。
以下においては、このような場合でも、CPU110から連続的な論理アドレスによりバッファ空間のデータをアドレッシングするための方法を開示する。このような改良例のことを「移行改良例」とよぶことにする。
基本例のセグメントレジスタ146は9ビットのレジスタであり、上位1ビットがセグメントの割当状態を示し、下位8ビットが割り当てられたセグメントのSegIDを示していた。移行改良例においては、セグメントレジスタ146は、21ビットサイズに拡張変更される。レジスタグループ140(ID:n)のセグメントレジスタ146(番号:m)に保持されているデータBn_Sm[20:0]のうち、上位1ビットのBn_Sm[20]はセグメントの割り当て状態を示す。Bn_Sm[19:8]は「末尾アドレス」を示し、Bn_Sm[7:0]が割り当てられているセグメントのSegIDを示す。ここで、「末尾アドレス」とは、「バッファ空間の先頭から、当該セグメントに保持されているデータの最後尾までのバイト数」を示す。セグメントレジスタ146のBn_Sm[20:0]のうちBn_Sm[19:8]は、S_m_NXST[11:0]として状態保持回路126のセレクタ144から出力される。
以下においては、特に断らない限り、10進数表記により論理アドレスを表現する。
図7のメモリ管理装置100と異なるのは、新たに位置検出回路176を追加している点にある。また、割当制御回路120から末尾アドレスを指定するためのNEXT_ADが追加されている。位置検出回路176は、SEARCH_ADDにより指定された論理アドレスを含むセグメント番号を検出する回路である。SEG_POSは、該当するセグメント番号を示す。FIN_NXは、SEARCH_ADDにより指定された論理アドレスを含むセグメント番号についての末尾アドレスを示す。位置検出回路176の詳細については図23に関連して後述する。
アドレス変換回路128には、CPU110により指定される論理アドレスADDと、状態保持回路126から送出されるB_SOが入力される。論理アドレスADD[31:0]のうち、ADD[31:16]は、状態保持回路126のセレクタ144に入力され、セレクタ144は、ADD[31:16]に指定されたバッファ空間に関するセグメント割当情報をB_SOとしてアドレス変換回路128に入力する。
減算回路180と比較回路182は、ADD[11:0]にて指定された論理アドレスを含むセグメント番号を探るための回路である。動作ロジックは以下の通りである。
S_m_EN=1(セグメント割当済)のとき:
ADD[11:0]-S_m_NXST[11:0]を計算する。ここで、mはセグメント番号を示す。結果が0以上の値であれば、演算結果をS_m+1_OFST[7:0]として出力する。また、S_m+1_OFST[8]=0に設定する。一方、演算結果が負値であれば、S_m+1_OFST[8]=1を出力する。
S_m_EN=0(セグメント未割当)のとき:
S_m+1_OFST[8:0]=0に設定する。なお、S_0_OFST[8:0]は常に0である。
m=0(セグメント(番号:0)):
S_0_EN=1(割当済)、ADD[11:0]-S_0_NXST[11:0]=400-128=272より、S_1_OFST[7:0]=272となる。また、S_1_OFST[8]=0となる。
m=1(セグメント(番号:1)):
S_1_EN=1(割当済)、ADD[11:0]-S_1_NXST[11:0]=400-256=144より、S_2_OFST[7:0]=144となる。また、S_2_OFST[8]=0となる。
m=2(セグメント(番号:2)):
S_2_EN=1(割当済)、ADD[11:0]-S_2_NXST[11:0]=400-326=74より、S_3_OFST[7:0]=74となる。また、S_3_OFST[8]=0となる。
m=3(セグメント(番号:3)):
S_3_EN=1(割当済)、ADD[11:0]-S_3_NXST[11:0]=400-454<0より、S_4_OFST[8]=1となる。
m=4(セグメント(番号:4)):
S_4_EN=1(割当済)、ADD[11:0]-S_4_NXST[11:0]=400-544<0より、S_5_OFST[8]=1となる。
m=5(セグメント(番号:5)):
S_3_EN=0(未割当)より、S_5_OFST[8:0]=0となる。
比較回路182は、S_m_OFST[8:0]とS_m+1_OFST[8:0]を比較して、比較結果をEND_S_kとして出力する。動作ロジックは以下の通りである。
S_m OFST[8]=0、かつ、S_m+1 OFST[8]=1のとき:END_S_m=1
それ以外のとき:END_S_m=0
となる。
m=0(セグメント(番号:0)):
S_0_OFST[8]=0、S_1_OFST[8]=0より、END_S_0=0となる。
m=1(セグメント(番号:1)):
S_1_OFST[8]=0、S_2_OFST[8]=0より、END_S_1=0となる。
m=2(セグメント(番号:2)):
S_2_OFST[8]=0、S_3_OFST[8]=0より、END_S_2=0となる。
m=3(セグメント(番号:3)):
S_3_OFST[8]=0、S_4_OFST[8]=1より、END_S_3=1となる。
m=4(セグメント(番号:4)):
S_4_OFST[8]=1、S_5_OFST[8]=1より、END_S_4=0となる。
このEND_S_m=1となるときのmが、ADD[11:0]に示された論理アドレスを含むセグメントのセグメント番号を示す。ここでは、セグメント(番号:3)に論理アドレス「400番地」が含まれると特定される。
アドレス生成回路178は、ADD[11:0]とEND_S_m、S_m_ID[7:0]、S_m_OFST[7:0]から、物理アドレスM2AD[15:0]を生成する。
m=0(セグメント(番号:0))について、END_S_0=1のときには、M2AD[15:0]のうち、M2AD[15:8]=S_0_ID[7:0]、M2AD[7:0]=ADD[7:0]となる。
m=0(セグメント(番号:0))以外のmについて、END_S_m=1のときには、M2AD[15:0]のうち、M2AD[15:8]=S_m_ID[7:0]、M2AD[7:0]=S_m_OFST[7:0]となる。
図20に示した設例の場合、END_S_3=1なので、M2AD[15:8]=S_3_ID[7:0]、M2AD[7:0]=S_3_OFST[7:0]=74となる。こうして、セグメント(番号:3)に対応づけられているセグメントのの先頭から74バイト目として物理アドレスが特定される。
位置検出回路176は、バッファ部分解放要求コマンドが入力されたときに、設定パラメータにより指定された「解放アドレス−1」をSEARCH_ADDとして入力される。基本的な仕組みは図22に示したアドレス変換回路128と同様である。検出回路188は、SEARCH_ADDに示された「解放アドレス−1」が属するセグメント番号、すなわち、維持番号をSEG_POSとして出力する。また、検出回路188は、セグメント(番号:維持番号)についての末尾アドレスをFIN_NXとして出力する。
同図において図11と同一の符号を付した処理の内容は、図11に関連して説明した内容と同等である。状態保持回路126が論理アドレスADDに基づいてレジスタグループ140を選択したあと、アドレス変換回路128は、図22に関連して説明した処理方法により、論理アドレスが属するセグメント番号を特定し(S114)、当該セグメントにおけるオフセットS_m_OFST[7:0]を計算することにより(S116)、物理アドレスM2AD[15:0]を生成する(S118)。
セグメント移行処理の処理過程についても、図17に関連して説明した処理過程と同様である。ただし、セグメントの末尾アドレスを変更するための処理が追加される。同図は、移行先バッファ空間(ID:7)と移行元バッファ空間(ID:2)の2つのバッファ空間を示している。移行先バッファ空間(ID:7)では、セグメント番号「0」、「1」に対してセグメントが割り当てられている。一方、移行元バッファ空間(ID:2)でも、セグメント番号「0」、「1」に対してセグメントが割り当てられている。ここで、バッファ空間(ID:2)のセグメントの割当先をバッファ空間(ID:7)に変更するとする。
すなわち、移行改良例において、セグメントレジスタ146は、該当セグメントにおける末尾アドレスを保持し、アドレス変換回路128は、この末尾アドレスに基づいて、セグメント移行後のバッファ空間における論理アドレスを「データ存在領域」だけに付与している。このため、セグメント移行処理された後のバッファ空間に対する「データ存在領域」以外へのアクセスを防止しやすくなる。
次に、別の改良例として、バッファ連結機能を追加した「連結改良例」について説明する。
[連結改良例]
しかし、タスクによって必要なバッファ空間のサイズはさまざまである。たとえば、ある処理Aは2キロバイトのバッファ空間があれば充分であるが、別の処理Bは100キロバイトのバッファ空間が必要かもしれない。あるいは、処理Aは通常は2キロバイトのバッファ空間で十分であるが、ごくまれに100キロバイトのバッファ空間が必要になるかもしれない。
2キロバイトのバッファ空間はセグメント8個で実現できるが、100キロバイトのバッファ空間を実現するにはセグメントが400個必要である。100キロバイトが要求される場合に備えてバッファ空間の最大サイズを100キロバイトとして設定してもよいが、1つのレジスタグループ140あたり400個のセグメントレジスタ146を含むことになる。しかし、処理Aが400個のセグメントレジスタ146をフル活用することは滅多にないため、結果としてメモリ管理装置100の動作が非効率になってしまう。
以下においては、メモリ管理装置100に複数のバッファ空間を連結することにより論理アドレス範囲を拡大する機能を追加することによりこのような課題を解決する方法を開示する。このような改良例のことを「連結改良例」とよぶことにする。
通信系アプリケーションの場合、イーサネット(Ethernet(登録商標))・プロトコルであれば、その最大フレーム長は1522バイトである。しかし、イーサネットの上位プロトコルであるTCP/IPが扱うデータサイズには基本的に上限がない。そこで、連結改良例では、複数のバッファ空間を連結することによりTCP/IPのデータを取り扱うのに十分なバッファ空間を生成する方法について開示する。以下、複数のバッファ空間を連結することにより形成される拡大された論理アドレス空間のことを「連結空間」とよぶ。
コンテンツとしての送信データを生成するコンテンツ処理
送信データに付与すべきTCP/IPヘッダを生成するTCP/IP処理
送信データに付与すべきMAC(Media Access Control)ヘッダを生成するMAC処理
という3つの処理を定義する。これら3つの処理は非同期的に実行されるとする。
バッファ190a、190b、190cにより形成される連結空間192には、送信データ1、2、3が保持されている。まず、コンテンツ処理は、バッファ190aを取得した上で送信データ1を記録する。コンテンツ処理は、次の送信データ2を記録するときには、新たにバッファ190bを取得してバッファ190bに連結する。送信データ2はバッファ190aとバッファ190bにまたがって記録される。次の送信データ3はバッファ190bに記録される。更に別の送信データが保持される場合には、バッファ190cが連結されることになる。この連結空間においてはバッファ空間の境目に関係なく論理アドレスによる連続アドレッシングが可能である。このようにして、コンテンツ処理の利用する論理アドレス範囲が必要に応じて拡大される。
送信データ2も送信されると、バッファ190aは全解放される。このような処理方法によれば、必要なときに必要なだけのバッファを取得・解放しつつ、処理に応じてバッファ空間のサイズを大きく変化させることができる。
外部からTCP/IPパケットを受信した受信タスクは、そのパケットのTCP/IPヘッダに記載されているソケット番号(ポート番号)により、宛先となるアプリケーションソフトウェアを識別する。同図においては、受信データ1〜5という5つの受信データがそれぞれバッファ194a、b、c、d、eという5つのバッファに保持されている。受信タスクは、TCP/IPパケットを受信するごとにバッファを取得してもよい。バッファ取得処理を実行するためにOSの機能を必要としないので、CPUにほとんど負荷をかけることなく低コストにてバッファを取得できる。そのため、受信パケットごとにバッファを取得するというプログラムコードを低コストで実行できる。
このような処理方法により、ソケットごとに必要なときに必要なだけのバッファ空間を確保できることになる。
以下、本連結改良例では、
バッファの数:最大16個
セグメントのサイズ:128バイト
1バッファあたりのセグメント数:最大16個
セグメント総数:256個(16×16=256)
連結空間の数:最大16個
として説明する。
各連結空間は、「LBID(Linked Buffer ID)」というIDによって一意に識別される。また、連結空間を構成するバッファ空間には「LBSN(Linked Buffer Sequence Number)」という通し番号が付与される。1バッファあたりの最大セグメント数=16、1セグメントのサイズ=128なので、128×16=2048より、1バッファあたりの最大サイズは2048バイト(2キロバイト)である。また、1連結空間あたりの最大バッファ数は16なので、2048×16=32768より、1連結空間あたりの最大サイズは32768バイト(32キロバイト)である。LBSNは、各連結空間における論理アドレス範囲を特定する。たとえば、LBSN=0のバッファ(以下、「バッファ(LBSN:0)」と表記する)は、連結空間における論理アドレス範囲「0〜32767」のうちの最初の「0〜2047」に該当する。同様にして、バッファ(LBSN:1)は、連結空間における論理アドレス範囲「2048〜4095」に対応する。
既に説明したように、各バッファはセグメントの集合として形成され、セグメント番号によりバッファ空間における位置が特定される。たとえば、バッファ(LBSN:1)のセグメント(番号:0)は、論理アドレス範囲「2048〜4095」のうちのはじめの128バイトである「2048〜2175」の論理アドレス範囲が該当し、バッファ(LBSN:1)のセグメント(番号:1)であれば、論理アドレス範囲「2048〜4095」のうちの「2176〜2303」の論理アドレス範囲が該当する。
まとめると、
LBID:連結空間を特定する。
LBSN:連結空間における論理アドレス範囲のうちの該当範囲をバッファサイズの単位で特定する。
SegID:連結空間における論理アドレス範囲のうちの該当範囲をセグメントサイズの単位にて特定する。
SegAdd:セグメントの先頭からのオフセットを示す。
メモリ(MEM):32ビットの論理アドレスADD[31:0]のうち上位6ビットADD[31:26]はアクセス先となるメモリを指定する。ADD[31:26]=0のときには第1メモリ112、ADD[31:26]=1のときには第2メモリ130がアクセス先となる。
LBID:7ビットのADD[25:19]はLBIDを示す。連結空間の数は最大16個のため、LBIDは0〜15のいずれかである。LBIDにより、アクセス先となる連結空間が特定される。
LBSN:8ビットのADD[18:11]はLBSNを示す。LBIDは0からMAX_LBSN-1の範囲の整数である。LBSNにより、アクセス先の論理アドレス範囲をバッファサイズ単位にて指定できる。
セグメント番号(SegOdr):4ビットのADD[10:7]は、セグメント番号を示す。セグメント番号により、LBSNにより指定されたバッファ空間における論理アドレス範囲をセグメントサイズ単位にて指定できる。1バッファあたりのセグメント数は最大16個なので、セグメント番号は0〜15のいずれかである。
セグメント内アドレス(SegAdd):7ビットのADD[6:0]は、セグメント内アドレスを示す。セグメントのサイズは128バイトなので、セグメント内アドレスは「0〜127」のいずれかである。
セグメント内アドレス(SegAdd):7ビットのM2AD[7:0]は、セグメント内アドレス(SegAdd)を示す。
このM2AD[15:0]により、第2メモリ130における物理アドレスが指定される。
基本例に関して図7に示した割当制御回路120との違いは、LBIDキュー198、MAXLBSNテーブル202およびバッファID検索回路200が追加され、バッファキュー122が無くなっている点にある。基本例に示したバッファキュー122の機能は、バッファID検索回路200の一部として搭載されることになる。
LBIDキュー198は、新たに割り当て可能な連結空間のLBIDをFIFO方式にて保存するメモリである。割当制御回路120が割り当てることができる連結空間は最大16個なので、初期状態においては、LBIDキュー198には16個のLBIDが保持される。割当制御回路120は、タスクに新たな連結空間を割り当てるときには、LBIDキュー198からLBIDを1つ取り出す。また、割当制御回路120は、既に設定されている連結空間を解放するときには、そのLBIDをLBIDキュー198に戻す。
a.LBS_WR:割当制御回路120からLBIDキュー198への書込信号である。
b.LBS_DI:割当制御回路120からLBIDキュー198へのLBID送信信号である。LBS_WRがアサートされると、LBS_DIに現れているLBIDがLBIDキュー198に書き込まれる。連結空間を解放するとき、割当制御回路120はLBS_WRをアサートする。
c.LBS_RD_ABL:LBIDキュー198にLBIDが保持されているか否か、いいかえれば、割り当て可能な連結空間が残っているか否かを示す。LBIDが保持されているときの値は「1」、保持されていないときの値は「0」となる。新たな連結空間を設定するときに、割当制御回路120はLBS_RD_ABLを見て、取得可能か否かを判定する。
d.LBS_RE:割当制御回路120からLBIDキュー198への読出信号である。
e.LBS_DO:LBIDキュー198から割当制御回路120へのLBID送信信号である。LBS_REがアサートされると、LBS_DOに現れているLBIDがLBIDキュー198から割当制御回路120に読み出される。連結空間を新たに設定するとき、割当制御回路120はUALBS_RD_ABL=1であることを確認して、LBS_REをアサートする。
MAXLBSNテーブル202は、各連結空間についてのMAX_LBSNを保持する。MAXLBSNテーブル202と割当制御回路120との間の信号は以下の5つである。
a.MLB_RE:割当制御回路120からMAXLBSNテーブル202への読出信号である。
b.MLB_WE:割当制御回路120からMAXLBSNテーブル202への書込信号である。
c.MLB_LBID[6:0]:割当制御回路120がMAXLBSNテーブル202にLBIDを指定するための信号である。
d.MLB_MLS_I[7:0]:割当制御回路120がMAXLBSNテーブル202にMAX_LBSNを指定するための信号である。MLB_WEがアサートされると、MLB_LBIDにより指定した連結空間について、MLB_MLS_Iにて指定したMAX_LSBNがMAXLBSNテーブル202に書き込まれる。
e.MLB_MLS_O[7:0]:MAXLBSNテーブル202から割当制御回路120へのMAX_LSBNの送信信号である。MLB_REがアサートされると、MLB_MLS_0にあらわれているMAX_LSBNがMAXLBSNテーブル202から読み出される。
バッファID検索回路200は、LBID/LBSN、すなわち、INQとBFIDとを対応づけて保持する。また、バッファID検索回路200は、基本例にけるバッファキュー122のように空きBFIDを管理する。バッファID検索回路200と割当制御回路120との間の信号は以下の7つである。
a.LBS_WR:割当制御回路120からバッファID検索回路200への書込信号である。
b.LBS_LBID[6:0]:割当制御回路120からバッファID検索回路200へのLBID送信信号である。
c.LBS_LBSN[7:0]:割当制御回路120からバッファID検索回路200へのLBSN送信信号である。
d.LBS_BFID_I[4:0]:割当制御回路120からバッファID検索回路200にへのBFID送信信号である。上位1ビットLBS_BFID_0[4]が書込指示かクリア指示を示し、下位3ビットLBS_BFID_0[3:0]がBFIDを示す。書込指示のときにLBS_WRがアサートされると、LBS_LBID[6:0]とLBS_LBSN[7:0]にて指定されたLBID/LBSNにBFIDが対応づけられる。クリア指示のときにLBS_WRがアサートされると、LBS_LBID[6:0]とLBS_LBSN[7:0]にて指定されたLBID/LBSNとBFIDとの対応付けが解消される。LBS_BFID_I[4]=1で書込指示、LBS_BFID_I[4]=0でクリア指示である。
e.LBS_BFID_0[4:0]:バッファID検索回路200から割当制御回路120へのBFID送信信号である。上位1ビットLBS_BFID_0[4]が割当済か未割当を示し、下位3ビットLBS_BFID_0[3:0]がBFIDを示す。BS_LBID[6:0]とLBS_LBSN[7:0]にて指定されたLBID/LBSNについてBFIDが割り当てられているか否かを示す。LBS_BFID_0[4]=1で割当済、LBS_BFID_0[4]=0で未割当を示す。
f.LBS_EMP_BFID[4:0]:空きBFIDがあるときには1、そうでないときには0となる信号である。
g.LBS_LBID_EX:LBS_LBID[6:0]により指定された連結空間について、1以上のバッファ空間が割り当てられているときには1、そうでないときには0となる信号である。
INQ情報回路206はバッファ空間ごとに設けられる。したがって、INQ情報回路206は16個設けられる。INQ情報回路206aはBFID=0に対応し、INQ情報回路206bはBFID=1に対応している。各INQ情報回路206は、比較回路208と保持回路210を備える。保持回路210は16ビットのフリップフロップ回路である。保持回路210の保持するデータMTn[15:0]のうち(n:BFID)、MTn[14:0]はINQ、すなわち、LBID/LBSNを示し、MTn[15]はそのINQに対してバッファが割り当てられているか否かを示す。MTn[15]=0であれば未割当、MTn[15]=1であれば割当済であることを示す。たとえば、MT4[15]=1であって、MT4[14:0]にてLBID=3、LBSN=1であれば、「連結空間(LBID:3)における先頭から2つ目のバッファ(LBSN:1)にはバッファ(BFID:4)が割り当てられている」ことを示す。
なお、LBS_BFID_I[4]=Oによりクリア指示したあと、MTn_WRをアサートすると該当する保持回路210のデータはクリアされる。このときには、LBIDとLBSN、BFIDの関係が解消され、BFIDは再割り当て可能となる。
また、MTn_IQ[14:0]におけるLBIDとLBS_LBID[6:0]におけるLBIDが一致したときには、MT_n_LLEX=1、そうでなければMT_n_LLEX=0となる。すなわち、MT_n_LLEXは、LBS_LBID[6:0]により問い合わせがなされたLBIDが保持回路210に登録されているか否かを示す。したがって、MT_n_A=1のときには、必ずMT_n_LLEX=1となる。MT_n_AとMT_n_LLEXは、セレクタ204に入力される。また、セレクタ204には、MTn_ID[3:0]として所与の値が入力される。MTn_ID[3:0]はBFIDを示す信号である。
a.MT_n_LLEX:割当制御回路120により指定されたLBIDの連結空間に、バッファ(BFID:k)が割り当てられているか(0:未割当、1:割当済)。
b.MT_n_A:割当制御回路120により指定されたLBID/LSBNにより特定されるバッファ空間に、バッファ(BFID:n)が割り当てられているか(0:未割当、1:割当済)。
c.MTn_ID[4]:MTn_ID[3:O]により示されるBFIDのバッファがいずれかの連結空間に割当済であるか(0:未割当、1:割当済)。
d.MTn_ID[3:O]:BFID。
a.LBS_EMP_BFID[4:0]:下位3ビットLBS_EMP_BFID[3:0]がBFIDを示し、上位1ビットのLBS_EMP_BFID[4]がLBS_EMP_BFID[3:0]に示されたBFIDが空いているか否かを示す。S_EMP_BFID[4]=1であれば空いていることを示し、LES_EMP_BFID[4]=0であれば空いていないことを示す。セレクタ204は、MTn_ID[4]をBFID=0からBFID=15までについて順番にチェックし、MTn_ID[4]=0(未割当)となっているBFIDが存在すれば、LES_EMP_BFID[4]=1、LES_EMP_BFID[3:0]=BFIDとして出力する。MTn_ID[4]=0となっているBFIDが存在しなければ、LES_EMP_BFID[4]=0、LES_EMP_BFID[3:0]=0として出力する。すなわち、割当制御回路120は、LBS_EMP_BFID[4:0]により、空きバッファの有無、空きバッファのBFIDを確認できる。基本例でいえば、図7に関連して説明したUAB_RD_ABLとUAB_DOに対応する信号であるといえる。
同図に示す状態保持回路126の構成は、図8に示した基本例の状態保持回路126とほとんど同様である。ただし、連結改良例の状態保持回路126においては、複数のセグメントレジスタ146に加えて、リンクレジスタ214がレジスタグループ140に含まれている。リンクレジスタ214には、そのBFIDに対応したINQ[14:0]、すなわち、LBIDとLBSNの組み合わせが登録され、Bn_BF_INQ[14:0]としてセレクタ144に出力されている。図29により示される論理アドレスADD[31:16]がセレクタ144に入力されると、セレクタ144は、各リンクレジスタ214をチェックして、ADD[25:11]に示されるLBID/LBSNを登録しているレジスタグループ140を特定する。このような処理により、ADD[25:11]に示されるLBID/LBSNに対応するBFIDを特定する。
同図に示すアドレス変換回路128の構成は、図10に示した基本例のアドレス変換回路128とほとんど同様である。アドレス変換回路128には、CPU110により指定される論理アドレスADDと、状態保持回路126から送出されるB_SOが入力される。論理アドレスADD[31:0]のうち、ADD[31:11]は、状態保持回路126のセレクタ144に入力され、セレクタ144は、ADD[31:11]に指定されたLBID/LBSNに対応するバッファ空間に関するセグメント割当情報をB_SOとしてアドレス変換回路128に送信する。該当するバッファ空間が存在しなければ第2メモリ130へのアクセスは失敗する。
CPU110により実行されるタスクは、論理アドレスADD[31:0]により第2メモリ130のアクセス位置を指定する。アドレス変換回路128は、この論理アドレスADD[31:0]を取得する(S10)。このとき、状態保持回路126は、論理アドレスADD[31:0]のうちADD[31:16]を取得する。状態保持回路126のセレクタ144は、ADD[31:11]のうちのINQ[14:0]によりアクセス先となるバッファ空間のLBID/LBSNを取得する(S122)。状態保持回路126のセレクタ144は、各レジスタグループ140のリンクレジスタ214をチェックして、該当するレジスタグループが存在するかを判定する(S124)。なお、割当制御回路120は、バッファID検索回路200への問い合わせにより同等の判定を行ってもよい。
その実行結果を保存するためのバッファ空間を要求するために、タスクは「バッファ取得要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。また、バッファに割り当てるべきセグメントの数に加えて、MAX_LBSNも設定パラメータとして送信する。割当制御回路120は、このバッファ取得要求をREQ_Dから読み出すと、以下に示すバッファ取得処理を開始する。
一方、LBID、BFIDやSegIDの取得に失敗したときには(S136のN、S140のN、S148のN)、割当制御回路120は所定のエラー処理をした後に(S162)、「バッファ取得要求」の失敗を通知する(S164)。
既に1以上のバッファを割り当てられている連結空間について、新たなバッファを連結させるとき、CPU110は「バッファリンク要求」を割当制御回路120に入力する。バッファリンク要求の設定パラメータは、LBIDとLBSN、セグメント数である。LBIDにより連結処理の対象となる連結空間を特定し、LBSNにより連結空間における連結位置を特定する。たとえば、LBSN=2であれば、原則として、LBSN=3の位置に新たなバッファが連結される。ここでは、LBID=p、LBSN=qが設定パラメータとして指定されたとする。
一方、BFIDやSegIDの取得に失敗したときには(S174のN、S182のN、S188のN)、割当制御回路120は所定のエラー処理をした後に(S200)、「バッファリンク要求」の失敗を通知する(S202)。
連結改良例においても、バッファを全解放するとき、タスクは「バッファ全解放要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。連結改良例におけるバッファ全解放要求の設定パラメータは、解放対象となる連結空間のLBIDと解放対象となるLBSNである。設定パラメータとしてLBID=p、LBSN=qが指定されたとする。
バッファ部分解放処理の処理過程は、基本例に示した内容と同等である。
図18の状態保持回路126と基本的な構成は同等である。ただし、レジスタグループ140は、新たにリンクレジスタ214を含む代わりに、バッファIDレジスタ170を含まない構成となっている。図18と同じく、レジスタグループ140が2つだけ存在するとして説明する。全バッファのセグメント割当情報は退避メモリ174に保持されている。そのうち、2つのバッファのセグメント割当情報は、レジスタグループ140aかレジスタグループ140bのいずれかに保持される。リンクレジスタ214は、INQ、すなわち、当該レジスタグループ140に対応するLBID/LBSNを保持する。
割当制御回路120がセグメント割当情報を読み出すためにRDをアサートすると、CASH制御回路172は、退避メモリ174において該当する領域のデータをBS_RDにより出力する。
一方、ADD[31:0]はBF_INQ[14:0]に変換され、バッファID検索回路200に送出されている。状態保持回路126のキャッシュコントロール機能に対応するため、バッファID検索回路200はこのBF_INQ[14:0]により指定されたLBID/LBSNに対応するBFIDをLB_BFID[4:0]により退避メモリ174に返信する機能を備える。このようなバッファID検索回路200の回路構成については、次の図39に関連して説明する。
CASH制御回路172は、状態保持回路126から返信されたデータに基づいて退避メモリ174における該当バッファについてのセグメント割当情報を選択し、いずれかのレジスタグループ140にロードしてからB_SOとして出力させる。
図31に示したバッファID検索回路200との違いは、状態保持回路126からBF_INQ[14:8]としてLBID、BF_INQ[7:0]としてLBSNを入力され、BF_INQ[14:0]により指定されたLBID/LBSNに対応するBFIDをLB_BFID[4:0]として状態保持回路126に出力することである。
そのため、INQ情報回路206には、第2比較回路216が新たに追加されている。第2比較回路216は、BF_INQ[14:0]のLBID/LBSNと保持回路210のLBID/LBSNを比較して、両者が一致すればMT_n_Bをアサートする。このような構成により、セレクタ204はBF_INQ[14:0]に対応するBFIDをLB_BFID[4:0]として状態保持回路126に出力する。
また、連結改良例に示したメモリ管理方法によれば、単一のバッファ空間のサイズ以上に論理アドレス範囲を拡大できる。このため、確保すべきメモリサイズが大きく変化するようなアプリケーションであっても、メモリ管理装置100の回路構成を過度に複雑化・大規模化することなく対応できる。
本実施例に示したメモリ管理機能と同等の機能をソフトウェアOSによって実現しようとすれば、OS自体がCPU110の演算能力を利用して動作することになる。汎用プロセッサであるCPU110に比べて、メモリ管理装置100はメモリ管理専用回路であるためオーバーヘッドが大きく低減される。このようなオーバーヘッドの低減は、システム全体としてのスループットを格段に向上させるだけではなく消費電力の抑制にもつながる。高速動作・小記憶容量・低消費電力を設計要件とする組込システムには、特に有効である。
これに対して、本実施例に示したメモリ管理装置100の場合、CPU110に対する負荷をほとんどかけることなく、ヒープメモリの確保や解放等のメモリ管理処理を実行できる。このため、「ヒープメモリの確保・解放を頻繁に繰り返すプログラム」であってもそれほど実行コストが高くならない。いいかえれば、「必要なときに必要なときだけメモリを確保し、不必要になったときに不必要になっただけメモリを解放する」というプログラムを高パフォーマンスにて実行できるので、コーディング面からもメモリ利用率の高めることができる。
請求項に記載の「第1のバス」は、本実施例においては主としてCPU110と割当制御回路120を接続するデータバスDTが対応し、「第2のバス」は、本実施例においては割当制御回路120と状態保持回路126をテーブル保持部134を介して、または、介さずに接続するBS_RDやBS_WR等の複数の信号線が対応し、「第3のバス」は、本実施例においては主として状態保持回路126とアドレス変換回路128を接続するB_SOの送信信号線が対応し、「第4のバス」は、本実施例においては割当制御回路120とセグメントキュー124を接続する複数の信号線が対応し、「第5のバス」は、本実施例においては割当制御回路120とバッファキュー122を接続する複数の信号線が対応する。
このほかにも、請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
Claims (9)
- 1以上のタスクを実行する実行制御回路と、
複数のセグメントに分割され、セグメント単位にてデータを保持するメモリと、
論理アドレス空間であるバッファ空間に関し、複数のバッファ空間のうちいずれかのバッファ空間についてのバッファIDをタスクに割り当てる割当制御回路と、
バッファ空間における論理アドレスを物理アドレスに変換するアドレス変換回路と、
バッファIDとセグメントIDの対応付けによりバッファ空間とセグメントとの対応関係をセグメント割当情報として保持する状態保持回路と、
前記複数のセグメントのうち、新たな割り当てが許可される状態にあるセグメントのセグメントIDを保持するセグメントキューと、
前記複数のバッファ空間のうち、新たな割り当てが許可される状態にあるバッファ空間のバッファIDを保持するバッファキューと、を備え、
前記状態保持回路は、複数個のセグメントレジスタを含むレジスタグループを複数グループ含み、レジスタグループは前記複数のバッファ空間のいずれかと対応づけられ、更に、セグメントレジスタには該当バッファ空間における論理アドレス範囲のうちの所定範囲を特定する範囲番号が設定されており、
前記割当制御回路は、1以上のセグメントを含むバッファ空間の割り当てを指示するバッファ取得要求を入力されたとき、前記バッファキューと前記セグメントキューからそれぞれバッファIDと1以上のセグメントIDを取得し、取得したバッファIDに対応するレジスタグループにおいて、取得した1以上のセグメントIDを1以上のセグメントレジスタにそれぞれ登録することにより、バッファ空間とセグメントとの対応関係を前記状態保持回路に設定し、
前記アドレス変換回路は、論理アドレスによりアクセス先を指定するアクセス要求を入力されたとき、前記状態保持回路から出力される前記セグメント割当情報を参照して、アクセス要求元のタスクに対応するレジスタグループにおいて、指定された論理アドレスに対応する範囲番号を特定し、その範囲番号に対応するセグメントレジスタに保持されているセグメントIDを取得し、そのセグメントIDに対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換することを特徴とするメモリ管理装置。 - 前記割当制御回路は、バッファ空間の解放を指示する全解放要求を入力されたとき、前記全解放要求において指定されたバッファIDに対応するレジスタグループにおいて、各セグメントレジスタに登録されているセグメントIDを無効化するとともに、前記指定されたバッファIDを前記バッファキューに投入し、前記無効化されたセグメントIDを前記セグメントキューに投入することにより、前記全解放要求にて指定されたバッファ空間とそのバッファ空間に対応づけられていたセグメントを再割当許可状態に設定することを特徴とする請求項1に記載のメモリ管理装置。
- 前記割当制御回路は、バッファ空間の一部の解放を指示する部分解放要求を入力されたとき、前記部分解放要求において指定されたバッファIDに対応するレジスタグループにおいて、前記部分解放要求において指定された論理アドレスよりも所定バイト前の論理アドレスに対応する範囲番号を特定し、その範囲番号に対応する論理アドレス範囲以降の論理アドレスに対応する範囲番号にて示されるセグメントを無効化し、前記無効化されたセグメントIDを前記セグメントキューに投入することにより、前記部分解放要求にて指定された論理アドレス以降に対応づけられているセグメントを再割当許可状態に設定することを特徴とする請求項1に記載のメモリ管理装置。
- 前記割当制御回路は、第1のバッファ空間への第2のバッファ空間のデータの移行を指示するセグメント移行要求を入力されたとき、前記第1のバッファ空間に対応するレジスタグループのセグメントレジスタに対して前記第2のバッファ空間に対応するレジスタグループにおいて有効に登録されているセグメントIDを追加登録することにより、前記第2のバッファ空間に対応するセグメントを前記第1のバッファ空間に対応づけることを特徴とする請求項1に記載のメモリ管理装置。
- 前記割当制御回路は、前記セグメント移行要求を入力されたときには、更に、前記第2のバッファ空間に対応するレジスタグループにおける各セグメントレジスタのセグメントIDを無効化し、前記第2のバッファ空間に対応するバッファIDを前記バッファキューに投入し、前記無効化されたセグメントIDを前記セグメントキューに投入することにより、前記第2のバッファ空間を再割当許可状態に設定することを特徴とする請求項4に記載のメモリ管理装置。
- 前記状態保持回路のレジスタグループには、更に、バッファIDを保持するためのバッファレジスタが含まれ、
前記状態保持回路は、
バッファレジスタとセグメントレジスタに保持されるデータを退避させるための退避メモリと、
退避メモリからレジスタグループへのデータロードを実行する退避制御回路と、を含み、
前記退避制御回路は、アクセス先となるバッファ空間のデータがレジスタグループに存在しないときには、前記退避メモリにおいてアクセス先となるバッファ空間のデータを前記レジスタグループにロードすることを特徴とする請求項1に記載のメモリ管理装置。 - セグメントレジスタは、更に、該当セグメントにおいてデータが書き込まれている範囲を示す記録状態情報を保持し、
前記アドレス変換回路は、前記アクセス要求を入力されたとき、記録状態情報を参照して、範囲番号と論理アドレス範囲との対応関係を調整することを特徴とする請求項1に記載のメモリ管理装置。 - 1以上のバッファ空間を連結することにより一の論理アドレス空間として形成される連結空間に関し、複数の連結空間のうち、新たな割り当てが許可される状態にある連結空間の連結IDを保持する連結空間キュー、を更に備え、
前記状態保持回路のレジスタグループには、バッファ空間が属する連結空間の連結IDとその連結空間の論理アドレス範囲のうち前記バッファ空間が対応する論理アドレス範囲を示す位置番号を保持するリンクレジスタが含まれ、
前記割当制御回路は、前記バッファ取得要求を入力されたとき、バッファIDとセグメントIDに加えて、前記連結空間キューから連結IDを取得し、取得したバッファIDに対応するレジスタグループのリンクレジスタに連結IDと位置番号を登録することにより、連結空間とバッファ空間との対応関係を設定し、
前記割当制御回路は、連結空間への新たなバッファ空間の追加を指示するバッファリンク要求を入力されたとき、前記バッファキューからバッファIDを取得し、取得したバッファIDに対応するレジスタグループのリンクレジスタに前記バッファリンク要求において指定された連結IDと位置番号を登録することにより、連結空間に新たなバッファ空間を追加し、
前記アドレス変換回路は、前記アクセス要求を入力されたとき、アクセス要求元のタスクによりアクセス対象となるレジスタグループとして、前記アクセス要求において指定された連結IDと位置番号を保持するレジスタグループを特定することを特徴とする請求項1に記載のメモリ管理装置。 - 複数のセグメントに分割されたメモリに対するCPU(Central Processing Unit)のアクセスを制御するための装置であって、
第1のバスを介して前記CPUと接続され、論理アドレス空間であるバッファ空間に関し、複数のバッファ空間のうちいずれかのバッファ空間についてのバッファIDをタスクに割り当てる割当制御回路と、
前記割当制御回路と第2のバスを介して接続され、バッファIDとセグメントIDの対応付けによりバッファ空間とセグメントとの対応関係をセグメント割当情報として保持する状態保持回路と、
前記CPUのアドレスバスと接続され、かつ、前記状態保持回路と第3のバスを介して接続される回路であって、バッファ空間における論理アドレスを物理アドレスに変換するアドレス変換回路と、
前記割当制御回路と第4のバスを介して接続され、前記複数のセグメントのうち、データ書込が許可される状態にあるセグメントのセグメントIDを保持するセグメントキューと、
前記割当制御回路と第5のバスを介して接続され、前記複数のバッファ空間のうち、新たな割り当てが許可される状態にあるバッファ空間のバッファIDを保持するバッファキューと、を備え、
前記状態保持回路は、複数個のセグメントレジスタを含むレジスタグループを複数グループ含み、レジスタグループは前記複数のバッファ空間のいずれかと対応づけられ、更に、セグメントレジスタには該当バッファ空間における論理アドレス範囲のうちの所定範囲を特定する範囲番号が設定されており、
前記割当制御回路は、前記CPUから前記第1のバスを介して1以上のセグメントを含むバッファ空間の割り当てを指示するバッファ取得要求を入力されたとき、前記第4のバスおよび前記第5のバスを介して、前記バッファキューと前記セグメントキューからそれぞれバッファIDと1以上のセグメントIDを取得し、前記第2のバスを介して、取得したバッファIDに対応するレジスタグループの1以上のセグメントレジスタにセグメントIDを記録し、
前記アドレス変換回路は、前記CPUから前記アドレスバスに送出された論理アドレスを入力されたとき、前記状態保持回路から前記第3のバスを介して出力される前記セグメント割当情報により、アクセス要求元のタスクに対応するバッファ空間において、指定された論理アドレスに対応する範囲番号を特定し、その範囲番号に対応するセグメントレジスタに保持されているセグメントIDを特定し、そのセグメントIDに対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換することを特徴とするメモリ管理装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2007/050131 WO2008084531A1 (ja) | 2007-01-10 | 2007-01-10 | メモリ管理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP4131983B1 true JP4131983B1 (ja) | 2008-08-13 |
JPWO2008084531A1 JPWO2008084531A1 (ja) | 2010-04-30 |
Family
ID=39608436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007525509A Active JP4131983B1 (ja) | 2007-01-10 | 2007-01-10 | メモリ管理装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8060723B2 (ja) |
JP (1) | JP4131983B1 (ja) |
TW (1) | TW200839514A (ja) |
WO (1) | WO2008084531A1 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010108216A (ja) * | 2008-10-30 | 2010-05-13 | Kyocera Mita Corp | メモリ管理システム、電子機器及びメモリ管理プログラム |
JP5376973B2 (ja) * | 2009-01-30 | 2013-12-25 | 京セラドキュメントソリューションズ株式会社 | メモリ管理システム、電子機器及びメモリ管理プログラム |
JP5377001B2 (ja) * | 2009-02-27 | 2013-12-25 | 京セラドキュメントソリューションズ株式会社 | メモリ管理システム、電子機器及びメモリ管理プログラム |
US8291192B2 (en) | 2008-10-30 | 2012-10-16 | Kyocera Document Solutions, Inc. | Memory management system |
JP5352284B2 (ja) * | 2009-02-27 | 2013-11-27 | 京セラドキュメントソリューションズ株式会社 | メモリ管理システム、電子機器及びメモリ管理プログラム |
JP4621794B1 (ja) * | 2009-07-22 | 2011-01-26 | 株式会社東芝 | キャッシュメモリ制御方法およびキャッシュメモリを備えた情報記憶装置 |
JP2014119850A (ja) * | 2012-12-14 | 2014-06-30 | Nec Commun Syst Ltd | メモリ制御装置、基地局装置、メモリ制御方法、及びプログラム |
US10069767B1 (en) * | 2014-10-31 | 2018-09-04 | Netronome Systems, Inc. | Method of dynamically allocating buffers for packet data received onto a networking device |
JP2017037505A (ja) * | 2015-08-11 | 2017-02-16 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
CN110543351B (zh) | 2018-05-29 | 2023-11-17 | 华为技术有限公司 | 数据处理方法以及计算机设备 |
CN112218104A (zh) * | 2020-09-03 | 2021-01-12 | 视联动力信息技术股份有限公司 | 一种数据传输方法、装置、终端设备和存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0430232A (ja) | 1990-05-25 | 1992-02-03 | Hitachi Ltd | 主記憶再構成方法 |
US5838614A (en) * | 1995-07-31 | 1998-11-17 | Lexar Microsystems, Inc. | Identification and verification of a sector within a block of mass storage flash memory |
US6711663B2 (en) | 2001-11-15 | 2004-03-23 | Key Technology Corporation | Algorithm of flash memory capable of quickly building table and preventing improper operation and control system thereof |
JP4263920B2 (ja) | 2002-02-25 | 2009-05-13 | 株式会社リコー | 情報処理装置及びメモリ管理方法 |
US7313140B2 (en) * | 2002-07-03 | 2007-12-25 | Intel Corporation | Method and apparatus to assemble data segments into full packets for efficient packet-based classification |
US7676814B2 (en) * | 2004-03-25 | 2010-03-09 | Globalfoundries Inc. | Four layer architecture for network device drivers |
-
2007
- 2007-01-10 US US12/281,603 patent/US8060723B2/en active Active
- 2007-01-10 WO PCT/JP2007/050131 patent/WO2008084531A1/ja active Application Filing
- 2007-01-10 JP JP2007525509A patent/JP4131983B1/ja active Active
- 2007-12-03 TW TW96145826A patent/TW200839514A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
US20110246728A1 (en) | 2011-10-06 |
WO2008084531A1 (ja) | 2008-07-17 |
TW200839514A (en) | 2008-10-01 |
JPWO2008084531A1 (ja) | 2010-04-30 |
US8060723B2 (en) | 2011-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4131983B1 (ja) | メモリ管理装置 | |
EP0817093B1 (en) | A multiprocessor system configured to perform block copy operations | |
JP3641675B2 (ja) | 分割バッファアーキテクチュア | |
JP2625385B2 (ja) | マルチプロセッサシステム | |
US10209900B2 (en) | Buffer allocation and memory management using mapping table | |
CN112463714B (zh) | 远程直接内存访问方法、异构计算系统及电子设备 | |
JP2001515244A (ja) | スケーリング可能な共用メモリ・マルチプロセッサ・システム | |
EP0817073A2 (en) | A multiprocessing system configured to perform efficient write operations | |
US20030126393A1 (en) | Method and system for managing an allocation of a portion of a memory | |
JPS61103258A (ja) | 多重プロセッサ・システム | |
JPH05128071A (ja) | 多重プロセツサ・システムの性能の最適化装置及び方法 | |
US8250260B2 (en) | Method, arrangement, data processing program and computer program product for exchanging message data in a distributed computer system | |
US7103747B2 (en) | Memory table and memory manager for use in managing memory | |
WO2022115166A2 (en) | Registering a custom atomic operation with the operating system | |
US7865632B2 (en) | Memory allocation and access method and device using the same | |
US20070162644A1 (en) | Data packing in A 32-bit DMA architecture | |
US11669445B2 (en) | Method for establishing hierarchical look-up tables and/or inquiring memory address according to hierarchical look-up tables | |
CN113296691B (zh) | 数据处理系统、方法、装置以及电子设备 | |
US20050066146A1 (en) | Endian conversion | |
JP4201927B2 (ja) | データ処理管理装置 | |
US6925544B2 (en) | Packet buffer memory with integrated allocation/de-allocation circuit | |
CN112000592B (zh) | 一种模块间数据交互的方法和装置 | |
JP2000330960A (ja) | プロセッサ間通信装置 | |
KR20050064568A (ko) | 온-칩 직렬 주변장치 버스 시스템 및 그 운용방법 | |
US20240176537A1 (en) | Memory system and control method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070925 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070601 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20080225 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20080306 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080318 |
|
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: 20080527 |
|
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: 20080529 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4131983 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: 20110606 Year of fee payment: 3 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R370 | Written measure of declining of transfer procedure |
Free format text: JAPANESE INTERMEDIATE CODE: R370 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R370 | Written measure of declining of transfer procedure |
Free format text: JAPANESE INTERMEDIATE CODE: R370 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110606 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120606 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130606 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130606 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140606 Year of fee payment: 6 |
|
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 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
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 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |