JP4131983B1 - メモリ管理装置 - Google Patents

メモリ管理装置 Download PDF

Info

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
Application number
JP2007525509A
Other languages
English (en)
Other versions
JPWO2008084531A1 (ja
Inventor
修孝 丸山
Original Assignee
ネットクリアスシステムズ株式会社
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ネットクリアスシステムズ株式会社 filed Critical ネットクリアスシステムズ株式会社
Application granted granted Critical
Publication of JP4131983B1 publication Critical patent/JP4131983B1/ja
Publication of JPWO2008084531A1 publication Critical patent/JPWO2008084531A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address 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

第2メモリ130は、セグメント単位でデータを保持する。割当制御回路120は、論理アドレス空間としてのバッファ空間を設定する。このバッファ空間は1以上のセグメントの集合として形成される。状態保持回路126は、バッファ空間とセグメントとの対応関係をセグメント割当情報として保持する。アドレス変換回路128は、このセグメント割当情報を参照して、論理アドレスを物理アドレスに変換する。セグメントキューは空きセグメント、バッファキューは空きバッファを保持する。状態保持回路126は、複数個のセグメントレジスタを含むレジスタグループを複数グループ含む。レジスタグループは複数のバッファ空間のいずれかと対応づけられている。セグメントレジスタには該当バッファ空間における論理アドレス範囲のうちの所定範囲を特定する範囲番号が設定されている。
【選択図】図4

Description

この発明は、メモリ管理技術に関する。
CPU(Central Processing Unit)をはじめとする電子デバイスの高機能化・低価格化にともなって、携帯電話のような組込システム(Enbeded System)にも高度なOS(Operating System)が搭載されつつある。システムの性能や用途に応じてOSに求められる機能はさまざまであるが、その中核となるのは「メモリ管理機能」である。
通常、筐体サイズや製造コストなどの制約から、搭載できるメモリの容量には限度がある。組込システムでは特に制約が厳しく、限られたメモリ資源を効率的に利用する必要がある。また、決められた時間内に処理が完了することを厳密に要求するシステムも多い。時間的要件の厳しいシステムの場合、メモリ管理処理にともなうオーバヘッドはシステム全体のパフォーマンスに大きく影響する。
本発明は、上記課題に鑑みてなされたものであり、その主たる目的は、高速かつ効率的なメモリ管理機能を実現するための技術、を提供することにある。
特開2003−316645号公報
本発明のある態様は、メモリ管理装置である。
この装置は、1以上のタスクを実行する実行制御回路と、セグメント単位でデータを保持するメモリと、論理アドレスによりアクセスされるバッファ空間をタスクに割り当てる割当制御回路と、論理アドレスを物理アドレスに変換するアドレス変換回路と、バッファ空間とセグメントとの対応関係をセグメント割当情報として保持する状態保持回路と、セグメントキューおよびバッファキューを備える。
状態保持回路は、複数のレジスタグループを含み、レジスタグループは複数個のセグメントレジスタを含む。レジスタグループは複数のバッファ空間のいずれかと対応づけられる。セグメントレジスタには該当バッファ空間における論理アドレス範囲のうちの所定範囲を特定する範囲番号が設定されている。
割当制御回路は、バッファ取得要求を入力されたとき、バッファキューとセグメントキューからそれぞれバッファIDと1以上のセグメントIDを取得し、取得したバッファIDに対応するレジスタグループにおいて、取得した1以上のセグメントIDを1以上のセグメントレジスタにそれぞれ登録することにより、バッファ空間とセグメントとの対応関係を状態保持回路に設定する。バッファIDとはバッファ空間を一意に識別するためのIDであり、セグメントIDとはセグメントを一意に識別するためのIDである。
アドレス変換回路は、メモリに対するアクセス要求を入力されたとき、セグメント割当情報を参照して、アクセス要求元のタスクに対応するレジスタグループにおいて、指定された論理アドレスに対応する範囲番号を特定し、その範囲番号に対応するセグメントレジスタに保持されているセグメントIDを取得し、そのセグメントIDに対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換する。
このような態様によれば、タスクにバッファ空間を割り当て、バッファ空間にセグメントを割り当て、論理アドレスを物理アドレスに変換してメモリへのアクセスを実現するという一連の処理をハードウェアロジックにより実現できる。これにより、ソフトウェアOSに比べて高速にメモリ管理処理を実行しやすくなる。また、バッファ空間をセグメント単位で取り扱うことにより、メモリの利用率を高めることができる。
なお、以上の構成要素の任意の組合せ、本発明を方法、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
本発明によれば、高速かつ効率的なメモリ管理機能を実現できる。
一般的なメモリ管理方法の一つとして自由割当方式を説明するための模式図である。 一般的なメモリ管理方法の一つとして固定割当方式を説明するための模式図である。 本実施例におけるメモリ管理方法を説明するための模式図である。 本実施例におけるメモリ管理装置の回路図である。 論理アドレスADDと物理アドレスM2ADのデータ構造を示す図である。 物理アドレスADDと物理アドレスM2ADの対応関係を示す図である。 基本例に関して、割当制御回路とその周辺の回路構成を示す図である。 基本例における状態保持回路の回路構成図である。 状態保持回路において、セグメントレジスタのデータ保持状態を示す図である。 基本例におけるアドレス変換回路の回路構成図である。 基本例におけるアドレス変換処理の処理過程を示すフローチャートである。 基本例におけるバッファ取得処理の処理過程を示すフローチャートである。 基本例におけるバッファ全解放処理の処理過程を示すフローチャートである。 バッファ部分解放処理の内容を説明するための模式図である。 基本例におけるバッファ部分解放処理の処理過程を示すフローチャートである。 セグメント移行処理の内容を説明するための模式図である。 基本例におけるセグメント移行処理の処理過程を示すフローチャートである。 基本例に関し、キャッシュコントロール機能を搭載した状態保持回路の回路構成図である。 セグメント移行処理における課題について説明するための模式図である。 移行改良例に関して、セグメント移行処理後も論理アドレスを連続させる方法を説明するための模式図である。 移行改良例に関して、割当制御回路とその周辺の回路構成を示す図である。 移行改良例におけるアドレス変換回路の回路構成図である。 移行改良例における位置検出回路の回路構成図である。 移行改良例におけるアドレス変換処理の処理過程を示すフローチャートである。 移行改良例におけるセグメント移行処理の内容を説明するための模式図である。 TCP/IPによるデータ送信に関して、バッファ連結処理を説明するために模式図である。 TCP/IPによるデータ受信に関して、バッファ連結処理を説明するための模式図である。 連結空間におけるLBIDとLBSNの関係を説明するための模式図である。 連結改良例における論理アドレスADDと物理アドレスM2ADのデータ構造を示す図である。 連結改良例において、割当制御回路とその周辺の回路構成を示す図である。 連結改良例におけるバッファID検索回路の回路構成図である。 連結改良例における状態保持回路の回路構成図である。 連結改良例におけるアドレス変換回路の回路構成図である。 連結改良例におけるアドレス変換処理の処理過程を示すフローチャートである。 連結改良例におけるバッファ取得処理の処理過程を示すフローチャートである。 連結改良例におけるバッファ連結処理の処理過程を示すフローチャートである。 連結改良例におけるバッファ全解放処理の処理過程を示すフローチャートである。 連結改良例に関し、キャッシュコントロール機能を搭載した状態保持回路の回路構成図である。 図38の状態保持回路のキャッシュコントロール機能に対応するバッファID検索回路の回路構成図である。
本実施例に示すメモリ管理装置100は、OSのメモリ管理機能を電子回路により実現している。まず、図1および図2に関連して、一般的なメモリ管理方法の概要を説明した上でその問題点を指摘する。その上で、図3に関連して、本実施例におけるメモリ管理方法の概要を説明する。更に、図4以降においては、メモリ管理装置100の回路構成や処理内容の詳細について説明する。
メモリ管理装置100の基本構成を「基本例」として説明したあと、その機能の一部を拡張・変更した2種類の「改良例」についても説明する。
図1は、一般的なメモリ管理方法の一つとして自由割当方式を説明するための模式図である。
ここでいう「メモリ」とは、厳密にはヒープメモリ(heap memory)である。同図においては、以下のような経過にてヒープメモリの確保および解放がなされた場合を示している。
時刻t:ヒープメモリが初期化される。ヒープメモリはすべて空き領域となっている。
時刻t:1以上のタスクが開始される。タスクによるメモリの取得要求に基づいて、OSは、A〜Eの5つの領域を確保する。以下、同図において「A」と表記されている領域のことを「割当領域(A)」と表記する。同図斜線で示す部分は割当領域であることを示す。
時刻t:タスクの実行過程において、タスクによるメモリの解放要求に基づいて、OSは割当領域(B)と割当領域(D)を解放する。一方、OSは、新たなメモリ取得要求に基づいて、割当領域(F)と割当領域(G)をヒープメモリに確保する。
時刻t:タスクの実行過程において、OSは割当領域(A)を解放する。一方、OSは、割当領域(H)、割当領域(I)および割当領域(J)をヒープメモリに確保する。
同図に示す自由割当方式の場合、割当領域を確保するために必要なだけの空き領域を探し出す必要があるが、メモリの確保と解放が繰り返されていくうちに空き領域が細分化してしまう。そのため、必要なサイズの割当領域の確保に失敗しやすくなる。一度電源を投入すると、何年間も初期化されることのない通信系アプリケーションでは、このような問題が特に顕在化しやすい。
図2は、一般的なメモリ管理方法の一つとして固定割当方式を説明するための模式図である。
固定割当方式においては、ヒープメモリはあらかじめ固定長の「単位領域」に分割される。同図においては、ヒープメモリは5つの単位領域に分割されている。時刻tにおいてヒープメモリは初期化されており、5つの単位領域はすべて空き領域である。そして、時刻tに1以上のタスクにより4つの割当領域が要求されている。OSは、割当領域(A)、割当領域(B)、割当領域(C)、割当領域(D)を別々の単位領域に確保する。固定割当方式では、1つの単位領域には1つの割当領域を確保可能となっている。
同図に示す固定割当方式は、少なくとも、5つ分の割当領域の確保は保証されるので、割当領域の数が5つ以内であることが確実なシステムでは有効な手法である。ただし、割当領域のサイズは単位領域のサイズにより制約を受ける。また、割当領域のサイズが小さい場合であっても、事実上、単位領域一つ分の領域を占有してしまうため、メモリ利用効率が悪くなる。
図3は、本実施例におけるメモリ管理方法を説明するための模式図である。
本実施例に示すメモリ管理方法では、256バイト程度の「セグメント」を単位としてヒープメモリを管理する。ヒープメモリは、あらかじめ、複数のセグメントに分割され、各セグメントには「セグメントID(以下、「SegID」と表記する。)」とよばれるIDが付与される。同図に示すセグメントのサイズは256バイトである。そのため、SegID(0)のセグメント(以下、「セグメント(ID:0)」と表記する。)は、物理アドレス「0x0000〜0x00FF」に対応する。また、セグメント(ID:1)は、物理アドレス「0x0100〜0x01FF」に対応する。このように、SegIDによってヒープメモリの物理アドレスの範囲が特定される。
ここで、割当領域(H)、割当領域(I)、割当領域(J)、割当領域(N)、割当領域(M)という5つの割当領域を確保する。割当領域(H)は、セグメント(ID:0)、セグメント(ID:2)、セグメント(ID:3)という3つのセグメントから構成される。割当領域(H)は、物理アドレスとしては必ずしも連続しない。割当領域が物理アドレスとして連続する必要がないため、任意の空きセグメントを追加するだけで割当領域のサイズを拡大できる。自由割当方式や固定割当方式では、「空き領域でありながら割当領域に設定できない領域」が大きくなりやすいという問題があった。しかし、本実施例におけるメモリ管理方式によれば、セグメントという小さな単位にて空き領域を管理することによりメモリ利用率を格段に向上させることができる。
ただし、割当領域の物理アドレスが連続しなくなると、タスクがアクセス先の物理アドレスを特定するのが難しくなる。そこでこのような難点を解決するために、割当領域において連続する論理アドレスを定義する。たとえば、割当領域(H)において、セグメント(H1)は論理アドレス「0x0000〜0x00FF」、セグメント(H2)は論理アドレス「0x0100〜0x01FF」、セグメント(H3)は論理アドレス「0x0200〜0x02FF」に対応づける。実際の物理アドレスが連続していないときでも、割当領域において論理アドレスは連続する。同様にして、割当領域(I)や割当領域(J)の論理アドレスも共に「0x0000」から開始される。以下、1以上のセグメントにより形成される論理アドレス空間のことを「バッファ」または「バッファ空間」とよぶことにする。バッファは、タスクごとに固有の論理アドレス空間であってもよいし、1つのタスクが複数のバッファ空間を使用してもよい。同図の場合、5つのバッファ空間、いいかえれば、5種類の論理アドレス空間が形成されている。
論理アドレスによるアドレッシングを実現するためには、タスクにより指定される論理アドレスをメモリにおける物理的な位置を特定するための物理アドレスに変換するための機構が必要となる。このようなアドレス変換機能は、ソフトウェアOSのメモリ管理機能として実現されてもよい。しかし、ソフトウェアOSは、その動作のためにCPUの演算能力を利用するため、メモリ管理関連処理の実行がアプリケーションの処理パフォーマンスに影響する。リアルタイム性を要求されるシステムにおいては、メモリ管理処理にともなうオーバーヘッドを極力抑制することが望ましい。
本実施例におけるメモリ管理装置100は、図3に示したメモリ管理方式をハードウェアロジックとして実装することにより、効率的なだけではなく高速なメモリ管理を実現している。
[基本例]
図4は、本実施例におけるメモリ管理装置100の回路図を示す。
CPU110には、アドレスバスADDとデータバスDTが接続されている。CPU110は、アドレスバスADDを介してメモリのアドレスを指定する。ADDは32ビットである。ADDの詳細は図5に関連して説明する。CPU110は、データバスDTを介してデータを送受する。
第1メモリ112は、アドレスバスADDとデータバスDTに接続される。第1メモリ112は、CPU110によりプログラム領域およびスタック領域として使用される。第2メモリ130は、データバスDTに接続され、アドレスバスADDとはアドレス変換回路128を介して接続される。第2メモリ130は、CPU110によりヒープ領域として使用される。図3に関連して説明したように、第2メモリ130は複数のセグメントに分割される。
割当制御回路120は、バッファとセグメントの関連づけを行う。割当制御回路120はタスクにバッファを割り当て、バッファにセグメントを割り当てる。バッファの数とセグメントの数には上限がある。バッファキュー122は、所定個数のバッファのうち、割り当て可能な状態にあるバッファの「バッファID(以下、「BFID」と表記する。)」を保持する。セグメントキュー124は、所定個数のセグメントのうち、割り当て可能な状態にあるセグメントのSegIDを保持する。バッファとセグメントの対応関係は「セグメント割当情報」として状態保持回路126に保持される。図3に示した例の場合であれば、バッファ(H)、セグメント(ID:0)、セグメント(ID:2)、セグメント(ID:3)がセグメント割当情報として対応づけられることになる。アドレス変換回路128は、CPU110から送出された論理アドレスADD[31:0]を物理アドレスM2AD[15:0]に変換する。
以下、基本例、および、後に示す改良例の一つである「移行改良例」では、
バッファの数:最大8個
セグメントのサイズ:256バイト
1バッファあたりのセグメント数:最大16個
セグメント総数:128個(16×8=128)
という仕様であるとして説明する。
メモリ管理装置100は、少なくとも、割当制御回路120、バッファキュー122、セグメントキュー124、状態保持回路126、アドレス変換回路128の集合として形成される装置であるが、CPU110や第2メモリ130、第1メモリ112を含む装置として形成されてもよい。割当制御回路120については図7、状態保持回路126については図8と図9、アドレス変換回路128については図10に関連して詳述する。
図5は、論理アドレスADDと物理アドレスM2ADのデータ構造を示す。
メモリ(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」のいずれかである。
このように、MEM、BFID、SegOdr、SegAddを含む論理アドレスADD[31:0]により、CPU110は第2メモリ130のアクセス位置を指定する。アドレス変換回路128は、論理アドレスADD[31:0]と状態保持回路126のセグメント割当情報から、物理アドレスM2AD[15:0]を生成する。具体的な変換方法については、図11に関連して詳述する。
SegID:物理アドレスM2AD[15:0]のうち上位8ビットM2AD[15:8]はSegIDを示す。SegIDにより、セグメントサイズの単位で物理アドレス範囲が特定される。
セグメント内アドレス(SegAdd):8ビットのM2AD[7:0]は、セグメント内アドレス(SegAdd)を示す。
たとえば、図3に示した例の場合、M2AD[15:0]においてSegID=1、SegAdd=0x0004であれば、セグメント(ID:1)は物理アドレス「0x0100〜0x01FF」に対応するため、0x0100+0x0004より、物理アドレスは「0x0104」となる。
図6は、物理アドレスADDと物理アドレスM2ADの対応関係を示す図である。
セグメント(番号:0)は、論理アドレス「0x000〜0x0FF」に対応する。同様に、セグメント(番号:1)は、論理アドレス「0x100〜0x1FF」に対応する。 セグメント(番号:0)、いいかえれば、このバッファ空間の先頭に位置に対応づけられているセグメントは、セグメント(ID:22)である。セグメント(番号:1)は、セグメント(ID:106)と対応づけられている。このような対応関係は、セグメント割当情報として割当制御回路120により状態保持回路126に設定される。セグメント内アドレスM2AD[7:0]により、セグメント内の位置が特定される。
論理アドレスADDは、セグメント割当情報に基づいて、物理アドレスM2ADに変換される。
図7は、基本例に関して、割当制御回路120とその周辺の回路構成を示す図である。
(1)バッファキュー122
バッファキュー122は、新たに割り当て可能なバッファ空間のBFIDをFIFO(First-In First-Out)方式にて保存するメモリである。割当制御回路120が割り当てることができるバッファ空間は最大8個なので、初期状態においては、バッファキュー122には8つのBFIDが保持される。割当制御回路120は、タスクに新たなバッファ空間を割り当てるときには、バッファキュー122からBFIDを1つ取り出す。また、割当制御回路120は、既に割り当てているバッファ空間を解放するときには、そのBFIDをバッファキュー122に戻す。
バッファキュー122と割当制御回路120との間の信号は以下の5つである。
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つ取り出される。
(2)セグメントキュー124
セグメントキュー124は、新たに割り当て可能なセグメントのSegIDをFIFO方式にて保存するメモリである。割当制御回路120が割り当てることができるセグメントは最大128個なので、初期状態においては、セグメントキュー124には128個のSegIDが保持される。割当制御回路120は、新たなセグメントをバッファ空間に割り当てるときには、セグメントキュー124からSegIDを取り出す。また、割当制御回路120は、既に割り当てているセグメントを解放するときには、そのSegIDをセグメントキュー124に戻す。
セグメントキュー124と割当制御回路120との間の信号は以下の5つである。
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をアサートする。
(3)CPUインタフェース132
CPUインタフェース132は、CPU110のアドレスバスADD、データバスDTと接続され、CPU110から割当制御回路120へのコマンド送信を仲介するデコーダ回路である。また、CPUインタフェース132は、割当制御回路120からCPU110へのデータ送信も仲介する。CPU110から割当制御回路120に対しては、後述する複数種類のコマンドがDTを介して送信される。また、コマンドのパラメータ(以下、「設定パラメータ」とよぶ)もデータバスDTを介して割当制御回路120に送信される。CPUインタフェース132は、このコマンドや設定パラメータを保持するためのレジスタを備える。一方、割当制御回路120からは、コマンドの成功・失敗を示す「結果データ」や、実行結果を示すパラメータ(以下、「結果パラメータ」とよぶ)がCPU110に送信される。CPUインタフェース132は、この結果データや結果パラメータを保持するためのレジスタも備える。
a.REQ_C: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の間でコマンドの送信とその結果の返信を中継する。
(4)テーブル保持部134
テーブル保持部134は、状態保持回路126のセグメント割当情報の全部または一部を一時的に保持するレジスタである。割当制御回路120は、状態保持回路126からセグメント割当情報を取得し、テーブル保持部134に記録して、設定内容を変更した後、状態保持回路126に送出することにより、状態保持回路126のセグメント割当情報を更新する。テーブル保持部134は、割当制御回路120が状態保持回路126に対してセグメント割当情報を設定するための作業領域であるといえる。以下、セグメント割当情報のうち、テーブル保持部134に保持されているデータのことを、特に「セグメントテーブル」ともよぶ。
テーブル保持部134に関わる信号は以下の4つである。
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に記録する。
割当制御回路120と状態保持回路126が直接関わる信号は以下の5つである。
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をその回路の一部として含んで形成されてもよい。
図8は、基本例における状態保持回路126の回路構成図である。
状態保持回路126は、複数のレジスタグループ140を備える。各レジスタグループ140は、BFID、すなわち、バッファ空間と対応づけられる。レジスタグループ140aは、BFID=0のバッファ空間(以下、「バッファ空間(ID:0)」と表記する)に対応する。バッファ空間は最大8個なので、レジスタグループ140も8個となる。BFID=nのレジスタグループ140のことを、「レジスタグループ140(ID:n)」と表記することにする。
レジスタグループ140は、複数のセグメントレジスタ146を含む。セグメントレジスタ146は、セグメント番号(SegOdr)と対応づけられる。1バッファ空間あたりのセグメント数は最大16個なので、レジスタグループ140に含まれるセグメントレジスタの数も16個となる。以下、SegOdr=mのセグメントレジスタ146のことを、「セグメントレジスタ146(番号:m)」と表記することにする。同図において、セグメントレジスタ146aはレジスタグループ140(ID:0)のセグメントレジスタ146(番号:0)であり、セグメントレジスタ146bはレジスタグループ140(ID:0)のセグメントレジスタ146(番号:1)である。
基本例におけるセグメントレジスタ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を示す。
たとえば、レジスタグループ140(ID:2)のセグメントレジスタ146(番号:1)に関し、B2_S1[8]=1、B2_S1[7:0]=102であれば、セグメント(番号:102)が割り当てられていることを示す。
テーブル保持部134から送信されたセグメント割当情報を示すBS_WRは、各レジスタグループ140、ひいては、各セグメントレジスタ146への入力となる。BS_WRのうち、BFID=nに関するデータはレジスタグループ140(ID:n)に入力される。そのうち、SegOdr=mに関するデータはセグメントレジスタ146(番号:m)に入力される。
状態保持回路126が、BF_IDによりBFID=0を指定し、WRをアサートすると、デコーダ142は、BF_0_WRをアサートする。このとき、BS_WRにあらわれているセグメント割当情報のうち、BFID=0に対応するデータがレジスタグループ140(ID:0)に書き込まれる。他のBFID値が指定されたときも同様である。
状態保持回路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に送信する。
図9は、状態保持回路126において、セグメントレジスタ146のデータ保持状態を示す図である。
同図においては、縦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)にはセグメントが割り当てられているが、それ以降については割り当てられていない。
図10は、基本例におけるアドレス変換回路128の回路構成図である。
アドレス変換回路128には、CPU110により指定される論理アドレスADDと、状態保持回路126から送出されるB_SOが入力される。論理アドレスADD[31:0]のうち、ADD[31:16]は、状態保持回路126のセレクタ144に入力され、セレクタ144は、ADD[31:16]に指定されたBFIDについてのセグメント割当情報をB_SOとしてアドレス変換回路128に送信する。
CPU110により指定される論理アドレスADD[31:0]のうち、ADD[11:8]により指定されるSegOdrは、アドレス変換回路128内のセレクタ168に入力される。SegOdr=mであれば、セレクタ168は、B_SOのうち該当するセグメント(番号:m)のSegIDをM2AD[15:8]として送出する。また、ADD[7:0]のセグメント内アドレス(SegAdd)は、そのままM2AD[7:0]として送出される。こうして、論理アドレスADD[31:0]は物理アドレス[15:0]に変換される。
以上の回路構成をもとにして、メモリ管理装置100の処理過程をフローチャートにより説明する。以下、「アドレス変換」、「バッファ取得」、「バッファ全解放」、「バッファ部分解放」、「セグメント移行」という5種類の処理を順番に説明する。
図11は、基本例におけるアドレス変換処理の処理過程を示すフローチャートである。
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に送る。
一方、アドレス変換回路128は、論理アドレスADD[31:0]のうちのADD[11:8]からSegOdrを取得する(S16)。指定されたSegOdr=mであったとする。アドレス変換回路128のセレクタ168は、指定されたSegOdrについてのSegIDをB_SOmから特定する(S18)。取得されたSegIDとADD[7:0]のセグメント内アドレス(SegAdd)により、物理アドレスM2AD[15:0]が生成される。
図12は、基本例におけるバッファ取得処理の処理過程を示すフローチャートである。
CPU110により実行されるタスクは、その実行結果を保存するためのバッファ空間を要求することがある。このとき、タスクは「バッファ取得要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。バッファ取得要求コマンドの設定パラメータとして、バッファに割り当てるべきセグメントの数も指定される。すなわち、設定パラメータによりバッファ空間の大きさを指定する。割当制御回路120は、バッファ取得要求コマンドをREQ_Dから読み出すと、以下に示すバッファ取得処理を開始する。
割当制御回路120は、バッファ取得要求コマンドを取得する(S24)。割当制御回路120は、バッファキュー122のUAB_RD_ABLをチェックして、空いているBFIDが存在するかを判定する(S26)。空きバッファがなければ(S26のN)、S42のエラー処理に移行する。空きバッファがあれば(S26のY)、割当制御回路120はUAB_DOによりBFIDを1つ取得する(S28)。ここでは、取得したBFID=nとする。
次に、割当制御回路120は、セグメントキュー124のUAS_RD_ABLをチェックして、空いているSegIDが存在するかを判定する(S30)。空きセグメントがなければ(S30のN)、S42のエラー処理に移行する。空きセグメントがあれば(S30のY)、割当制御回路120はUAS_DOによりSegIDを1つ取得する(S32)。割当制御回路120は、テーブル保持部134のセグメントテーブルにおいて、SegOdr=0から順番に取得されたSegIDを登録する(S34)。セグメントテーブルにおいて、SegIDが登録されたセグメントについては「割当済」、それ以外は「未割当」が設定される。設定パラメータとして指定された数だけSegIDを取得していないときには(S36のN)、処理はS30に戻る。指定数だけ取得したときには(S36のY)、割当制御回路120は、取得したBFID=nを指定し、WRをアサートして、状態保持回路126のセグメントテーブルをデータをレジスタグループ140(ID:n)に登録する(S38)。
こうして、バッファとセグメントの新たな対応関係がセグメント割当情報として状態保持回路126に登録される。割当制御回路120は、取得したBFID=nを結果パラメータとして「バッファ取得要求」の成功をRES_Dを介してCPU110に通知する(S40)。
一方、BFIDやSegIDの取得に失敗したときには(S26のN、S30のN)、割当制御回路120は所定のエラー処理を実行した後に(S42)、「バッファ取得要求」の失敗を通知する(S44)。エラー処理とは、たとえば、BFIDの取得に成功したもののSegIDの取得に失敗したとき、BFIDをバッファキュー122に返すことにより、バッファ取得処理開始前の状態に原状回復させるための処理である。タスクは、バッファ取得要求に失敗すると、所定時間後にバッファ取得要求を再試行してもよい。
図13は、基本例におけるバッファ全解放処理の処理過程を示すフローチャートである。
CPU110により実行されるタスクは、いったん確保したバッファ空間をもはや使用しないときにはバッファ空間を解放する。バッファ空間の解放方法としては、バッファ空間に対応づけられているセグメントの全部を解放する「全解放」と一部を開放する「部分解放」の2つがある。全解放時には、タスクは「バッファ全解放要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。バッファ全解放要求コマンドの設定パラメータとして、解放対象となるバッファ空間のBFIDが指定される。割当制御回路120は、バッファ全解放要求コマンドをREQ_Dから読み出すと、以下に示すバッファ全解放処理を開始する。
割当制御回路120は、バッファ全解放要求コマンドを取得する(S48)。割当制御回路120は、設定パラメータにて指定されたBFIDに関して、レジスタグループ140のデータをBS_RDから読み出す(S50)。指定されたBFID=nとする。レジスタグループ140(ID:n)、いいかえれば、バッファ空間(ID:n)にセグメントが割り当てられていないときには(S52のN)、「バッファ全解放要求」は無効であり、「失敗」を通知する(S62)。バッファ空間にセグメントが割り当てられていないのだから、そのバッファ空間は未使用である。この場合、BFID=nをバッファキュー122に投入して、BFID=nを再割当可能な状態に戻す。バッファにセグメントが割り当てられているか否かは、セグメントレジスタ146のBn_Sm[8]をチェックするだけで判定できる。
1つでもセグメントが割り当てられていれば(S52のY)、割当制御回路120は、割り当てられている1以上のセグメントについてのSegIDをセグメントキュー124に投入する(S54)。更に、割当制御回路120は、CLRをアサートすることにより、該当レジスタグループ(ID:n)の全セグメントレジスタ146について「未割当:0」設定する(S56)。こうして、バッファ全解放要求にて指定されたバッファ空間(ID:n)に対応づけられていたセグメントは、すべて再割当可能な状態に戻される。次に、割当制御回路120は、指定されたBFID=nをバッファキュー122に投入する(S58)。こうして、BFID=nも再割当可能な状態に戻される。割当制御回路120は、「バッファ全解放要求」の成功をRES_Dを介してCPU110に通知する(S60)。
図14は、バッファ部分解放処理の内容を説明するための模式図である。
タスクの実行過程において、バッファ空間内のデータの一部が不要になることがある。このような場合には、不要データを保持しているセグメントを解放することにより、メモリの再利用を促進した方がよい。バッファ部分解放処理とは、バッファ空間に対応づけられている1以上のセグメントのうちの一部を解放するための処理である。
同図の場合、バッファ空間(ID:n)において、セグメント番号「0」〜「4」に対してセグメントが割り当てられている。この5つの割当済セグメントのうちの一部を解放、すなわち、再割当可能な状態に設定するために、タスクは「バッファ部分解放要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。設定パラメータは、解放対象となるバッファ空間のBFIDと論理アドレスにより指定される「解放アドレス」である。解放アドレスは論理アドレスである。
まず、「解放アドレス−1」となる論理アドレスを含むセグメント番号(SegOdr)が特定される。同図の場合、このセグメント番号は「2」である。以下、「解放アドレス−1」となる論理アドレスを含むセグメント番号のことを「維持番号」とよぶ。割当制御回路120は、「維持番号+1」以降のセグメント番号に対応づけられているセグメントを解放対象とする。同図の場合、セグメント番号「3」と「4」に割り当てられているセグメントが解放される。
図15は、基本例におけるバッファ部分解放処理の処理過程を示すフローチャートである。
割当制御回路120は、バッファ部分解放要求コマンドを取得する(S66)。割当制御回路120は、設定パラメータにて指定されたBFIDに関して、レジスタグループ140のデータをBS_RDから読み出す(S68)。指定されたBFID=nとする。次に、設定パラメータにて指定された解放アドレスから維持番号を特定する(S70)。レジスタグループ140(ID:n)、いいかえれば、バッファ空間(ID:n)におけるセグメントのうち、「維持番号+1」以降のセグメント番号について、セグメントが割り当てられていないときには(S72のN)、「バッファ部分解放要求」は無効であり、「失敗」を通知する(S82)。
1つでもセグメントが割り当てられていれば(S72のY)、割当制御回路120は、「維持番号+1」以降のセグメント番号について、SegIDをセグメントキュー124に投入する(S74)。更に、割当制御回路120は、「維持番号+1」以降のセグメント番号に関し、テーブル保持部134のセグメントテーブルについて「未割当:0」設定する(S76)。そして、設定後のセグメントテーブルのデータをレジスタグループ140(ID:n)に登録することにより、レジスタグループ140(ID:n)の内容を更新する(S78)。こうして、バッファ空間(ID:n)に対応づけられているセグメントのうち、「維持番号+1」以降のセグメント番号に対応づけられているセグメントは、すべて再割当可能な状態に戻される。割当制御回路120は、「バッファ一部解放要求」の成功をRES_Dを介してCPU110に通知する(S80)。
図16は、セグメント移行処理の内容を説明するための模式図である。
タスクの実行過程において、あるバッファ空間のデータを別のバッファ空間に移動したい場合がある。あるいは、あるバッファ空間と別のバッファ空間の間でメモリ共有(メモリマッピング)を実現したい場合もある。セグメント移行処理とは、バッファ空間に対応づけられているセグメントの割当先を別のバッファ空間に設定するための処理である。
同図の場合、バッファ空間(ID:4)ではセグメント番号「0」〜「2」に対してセグメントが割り当てられている。割り当てられているセグメントのSegIDは、それぞれ、「14」、「8」、「2」である。一方、バッファ空間(ID:6)ではセグメント番号「0」、「1」に対してセグメントが割り当てられている。割り当てられているセグメントのSegIDは、それぞれ、「201」、「11」である。ここで、バッファ空間(ID:6)に割り当てられているセグメントをバッファ空間(ID:4)にも割り当てることにより複数のバッファ空間に対して同じセグメントを2重に割り当てるとする。すなわち、セグメント(ID:201)とセグメント(ID:11)を、バッファ空間(ID:4)のセグメント(番号:3)、セグメント(番号:4)に割り当てることがこの処理の目的である。
バッファ空間(ID:6)のセグメントをバッファ空間(ID:4)にも割り当てるために、タスクは「セグメント移行要求」コマンドを、CPUインタフェース132を介して割当制御回路120に送信する。設定パラメータは、移行先のBFID=4、移行元のBFID=6である。
セグメント移行要求を入力されると、割当制御回路120は、バッファ空間(ID:4)のセグメント番号「3」、「4」に対して、バッファ空間(ID:6)のセグメント番号「0」、「1」のセグメント(ID:201)とセグメント(ID:11)を割り当てる。この段階で、セグメント(ID:201)はバッファ空間(ID:4)のセグメント(番号:3)に割り当てられる。一方、セグメント(ID:201)とバッファ空間(ID:6)との対応関係は解消されていない。そのため、セグメント(ID:201)は、バッファ空間(ID:4)とバッファ空間(ID: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)」が可能となる。
メモリマッピングではなく、セグメント移行要求により、セグメント(ID:201)とセグメント(ID:11)の割当先をバッファ空間(ID:4)のみに設定してもよい。セグメント(ID:210)とセグメント(ID:11)の割当先をバッファ空間(ID:6)のセグメント(番号:0)、セグメント(番号:1)から、バッファ空間(ID:4)のセグメント(番号:3)、セグメント(番号:4)に変更すれば、バッファ空間(ID:6)のデータがバッファ空間(ID:4)に移動されることになる。具体的には、割当制御回路120は、まず、テーブル保持部134にバッファ空間(ID:4)のデータを読み出す。次に、バッファ空間(ID:6)のデータを状態保持回路126から取得し、テーブル保持部134に読み出したデータを追記する。そのあと、BFID=4を指定して、テーブル保持部134のデータを一気に状態保持回路126に書き込む。
図17は、基本例におけるセグメント移行処理の処理過程を示すフローチャートである。ここでは、メモリマッピングではなく、移行元のバッファ空間のセグメントの割当先を移行元のバッファ空間に「変更」し、移行元のバッファ空間を全解放する処理として説明する。移行先バッファ空間のBFID=n1、移行元バッファ空間のBFID=n2とする。
割当制御回路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)。
移行元バッファ空間(ID:n2)において、割当済セグメントが存在しても(S94のY)、移行先バッファ空間(ID:n1)に十分な空きがなければ(S96のY)、セグメント移行要求は無効となる。たとえば、移行先バッファ空間(ID:n1)において、セグメント番号「14」までセグメントが割り当てられているときに、2つ以上のセグメントを移行させようとするときにはオーバーフローとなり、セグメント移行要求は失敗する。
移行先バッファ空間(ID:n1)にセグメントを割り当てるのに十分な空きがあれば(S96のN)、テーブル保持部134に保持されているセグメントテーブルのうち、移行先BFID=n1のセグメント割当情報について、移行元バッファ空間(ID:n2)において割り当てられていたセグメントのSegIDを追加し、「割当済」設定する(S98)。一方、移行元バッファ空間(ID:n2)についてはCLRをアサートすることにより、全セグメントを「未割当」設定した上で(S102)、セグメントテーブルのうちBFID=n1のセグメント割当情報を状態保持回路126に登録する(S104)。割当制御回路120は、移行元BFID=n2をバッファキュー122に投入する(S106)。こうして、BFID=n2は再割当可能な状態に戻される。割当制御回路120は、「セグメント移行要求」の成功をCPU110に通知する(S108)。
上記したメモリ管理機能をソフトウェアOSで実現する場合、メモリ管理処理を実行するためにはCPU110の演算機能に大きく依存しなければならない。ソフトウェアOS自体による第1メモリ112や第2メモリ130へのアクセスにともなうオーバーヘッドも発生する。
これに対し、本実施例のメモリ管理装置100は、上記したメモリ管理機能をハードウェアロジックにより実行している。第2メモリ130をセグメント単位で利用できるため、第2メモリ130の利用効率を高めることができるだけでなく、CPU110の処理能力とは独立したかたちでメモリ管理を実行できる。このため、CPU110で実行されるタスクの処理パフォーマンスを落とさずにメモリ管理処理を実行できる。また、汎用的なプロセッサであるCPU110によりメモリ管理処理を実行するよりもシンプルなプロセスによりメモリ管理を実現できるため消費電力抑制の面でも有効である。
時間的制約の厳しい環境においてバッファ空間の確保や解放が頻繁に生じるアプリケーションを実行する場合には、本実施例に示すメモリ管理装置100は特に有効である。
図18は、基本例に関し、キャッシュコントロール機能を搭載した状態保持回路126の回路構成図である。
図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」が追加されている。
割り当てることのできるバッファの数は最大8個であるが、ここでは8個のBFIDのすべてが取得済みであるとして説明する。8つのバッファのセグメント割当情報は、すべて退避メモリ174に保持されている。そのうち、2つのバッファのセグメント割当情報は、レジスタグループ140にも保持される。バッファIDレジスタ170は、対応するBFIDを保持する。
割当制御回路120がセグメント割当情報を登録するためにWRをアサートすると、CASH制御回路172は退避メモリ174において該当する領域のデータを更新する。該当バッファ空間のデータがレジスタグループ140に存在すれば更新内容を反映させる。存在しなければ、該当バッファ空間の更新後のデータをいずれかのレジスタグループ140にロードしてもよい。
割当制御回路120がセグメント割当情報をクリアするためにCLRをアサートすると、CASH制御回路172は退避メモリ174において該当する領域のデータについて全てのセグメントを「未割当」設定する。該当バッファ空間のデータがレジスタグループ140に存在すればレジスタグループ140のすべてのセグメントレジスタ146に「未割当」設定する。
割当制御回路120がセグメント割当情報を読み出すためにRDをアサートすると、CASH制御回路172は、退避メモリ174において該当する領域のデータをBS_RDにより出力する。
CPU110から論理アドレスADD[31:0]が指定されると、CASH制御回路172は該当バッファ空間についてのデータがレジスタグループ140に存在するかをバッファIDレジスタ170をチェックして判定する。存在すれば、CASH_SEL信号により該当レジスタグループ140のセグメント割当情報をB_SOとして出力させる。該当バッファ空間についてのセグメント割当情報がレジスタグループ140に存在しないときには、該当バッファ空間についてのセグメント割当情報を退避メモリ174からいずれかのレジスタグループ140にロードしてからB_SOとして出力させる。
このような処理方法によれば、図8の状態保持回路126に比べて、状態保持回路126全体としての回路サイズをコンパクトにできる。
次に、基本例に対する改良例として、セグメント移行処理を改良した「移行改良例」について説明する。
[移行改良例]
図19は、セグメント移行処理における課題について説明するための模式図である。
図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個のセグメントが割り当てられている。
バッファ空間(ID:4)の10個のセグメントのうち、セグメント(番号:9)だけ一部しかデータが書き込まれていない。バッファ空間(ID:3)のセグメント(番号:1)、バッファ空間(ID:0)のセグメント(番号:2)についても同様である。次に、バッファ空間(ID:0)に、バッファ空間(ID:3)のセグメントとバッファ空間(ID:4)のセグメントを移行させる。こうして、バッファ空間(ID:0)には計15個のセグメントが含まれることになる。移行後のバッファ空間(ID:0)に含まれるデータから送信フレームが形成される。
しかし、元々のバッファ空間(ID:0)におけるセグメント(番号:2)や、バッファ空間(ID:3)におけるセグメント(番号:3)のセグメントにおいては、一部しかデータが記録されていなかったため、移行後のバッファ空間(ID:0)のデータが一部不連続となっている。同図の場合、移行後のバッファ空間(ID:0)において、セグメント(番号:2)、セグメント(番号:4)のセグメントについてデータの連続性が損なわれている。
以下においては、このような場合でも、CPU110から連続的な論理アドレスによりバッファ空間のデータをアドレッシングするための方法を開示する。このような改良例のことを「移行改良例」とよぶことにする。
図20は、移行改良例に関して、セグメント移行処理後も論理アドレスを連続させる方法を説明するための模式図である。
基本例のセグメントレジスタ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から出力される。
たとえば、図20に示すバッファ空間の場合、セグメント(番号:0)とセグメント(番号:1)には、128バイト分のデータが保持されているが、セグメント(番号:2)には、70バイト分しかデータが保持されていない。また、セグメント(番号:3)には、128バイト分のデータが保持されているが、セグメント(番号:4)には、90バイト分しかデータが保持されていない。また、セグメント(番号:5)には、全くデータが保持されていない。
同図の場合、セグメント(番号:0)の末尾アドレスS_O_NXST[11:0]は「128」となる。バッファ空間の先頭(論理アドレス=0x0000)から、セグメント(番号:0)におけるデータの最後尾(論理アドレス=0x00FF)までのバイト数は128バイトだからである。同様にして、セグメント(番号:1)の末尾アドレスS_1_NXST[11:0]は「256」となる。128+128=256だからである。セグメント(番号:2)の末尾アドレスS_2_NXST[11:0]は256+70=326により「326」となる。同様にして、326+128=454よりセグメント(番号:3)の末尾アドレスS_3_NXST[11:0]は「454」、454+90=544よりセグメント(番号:4)の末尾アドレスS_4_NXST[11:0]は「544」となる。
基本例として図11等に関連して説明したアドレス変換方法では、ADD[11:8]によりセグメント番号(SegOdr)を特定し、セグメント番号(SegOdr)によりSegIDを特定し、ADD[7:0]によりセグメント内アドレス(SegAdd)を特定することにより物理アドレスを特定する。しかし、図20に示すバッファ空間の場合、セグメント(番号:2)の一部が未使用となっているため、論理アドレスの連続性が損なわれてしまう。いいかえれば、CPU110はセグメント(番号:2)の先頭から70バイト以降をアドレッシングしてしまうと不正アクセスとなってしまう。このような不正アクセスを防ぐためには、セグメント(番号:2)の一部にある「穴」をアドレッシングされないように処置する必要がある。
そこで、移行改良例では、セグメント(番号:2)における最後尾データの論理アドレスと、セグメント(番号:3)における先頭データの論理アドレスを連続させることにより、セグメントの「穴」に対するアドレッシングができないように、末尾アドレスに基づいて、論理アドレスを調整している。同図の場合、セグメント(番号:0)の論理アドレスは「0番地から127番地」、セグメント(番号:1)の論理アドレスは「128番地から255番地」、セグメント(番号:2)の論理アドレスは「256番地から325番地」、セグメント(番号:3)の論理アドレスは「326番地から453番地」、セグメント(番号:4)の論理アドレスは「454番地から543番地」となるように論理アドレスの範囲を調整する。
以下においては、特に断らない限り、10進数表記により論理アドレスを表現する。
たとえば、論理アドレスADD[11:0]として当該バッファ空間の400番地がアクセス先として指定されたとする。S_2_NXST[11:0]=326、S_3_NXST[11:0]=454であるから、400番地は、セグメント(番号:3)に存在する。S_2_NXST[11:0]=326なので、400−326=74より、400番地はセグメント(番号:3)において先頭から74バイト目の位置を示すことになる。
図21は、移行改良例に関して、割当制御回路120とその周辺の回路構成を示す図である。
図7のメモリ管理装置100と異なるのは、新たに位置検出回路176を追加している点にある。また、割当制御回路120から末尾アドレスを指定するためのNEXT_ADが追加されている。位置検出回路176は、SEARCH_ADDにより指定された論理アドレスを含むセグメント番号を検出する回路である。SEG_POSは、該当するセグメント番号を示す。FIN_NXは、SEARCH_ADDにより指定された論理アドレスを含むセグメント番号についての末尾アドレスを示す。位置検出回路176の詳細については図23に関連して後述する。
図22は、移行改良例におけるアドレス変換回路128の回路構成図である。
アドレス変換回路128には、CPU110により指定される論理アドレスADDと、状態保持回路126から送出されるB_SOが入力される。論理アドレスADD[31:0]のうち、ADD[31:16]は、状態保持回路126のセレクタ144に入力され、セレクタ144は、ADD[31:16]に指定されたバッファ空間に関するセグメント割当情報をB_SOとしてアドレス変換回路128に入力する。
CPU110により指定される論理アドレスADD[31:0]のうち、ADD[11:0](SegOdr/SegAdd)は、アドレス変換回路128内の全ての減算回路180に入力される。各減算回路180は、SegIDに対応している。たとえば、減算回路180aはSegID=0に対応し、減算回路180bはSegID=1に対応する。セグメントレジスタ146のデータサイズは21ビットであるから、状態保持回路126から入力されるB_S0mも21ビットのデータである(SegID=mとする)。セグメント(番号:0)のセグメントの割当状態を示すB_SO0[20]は、S_0_EN信号として、セグメント(番号:0)と対応する減算回路180aに入力される。また、セグメント(番号:0)の末尾アドレスを示すB_SO0[19:8]も、S_0_NXST[11:0]として、減算回路180aに入力される。他のセグメント番号についても同様である。セグメント(番号:0)についてのSegIDを示すB_SO0[7:0]は、S_0_ID[7:0]として、アドレス生成回路178に入力される。他のセグメント番号についても同様である。
(1)減算回路180
減算回路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である。
図20に示した設例の場合、ADD[11:0]=400(番地)だったので、
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となる。
(2)比較回路182
比較回路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
となる。
図20に示した設例の場合、
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番地」が含まれると特定される。
(3)アドレス生成回路178
アドレス生成回路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バイト目として物理アドレスが特定される。
図23は、移行改良例における位置検出回路176の回路構成図である。
位置検出回路176は、バッファ部分解放要求コマンドが入力されたときに、設定パラメータにより指定された「解放アドレス−1」をSEARCH_ADDとして入力される。基本的な仕組みは図22に示したアドレス変換回路128と同様である。検出回路188は、SEARCH_ADDに示された「解放アドレス−1」が属するセグメント番号、すなわち、維持番号をSEG_POSとして出力する。また、検出回路188は、セグメント(番号:維持番号)についての末尾アドレスをFIN_NXとして出力する。
減算回路184は、図22の減算回路180と同様のロジックにて、ADD[11:0]とS_m_NXST[11:0]の減算処理を行う。比較回路186は、図22の比較回路182と同様のロジックにて、「解放アドレス−1」を含むセグメント番号、すなわち、維持番号を検出する。移行改良例のメモリ管理装置100の場合、バッファ部分解放処理のうち、図15のS70は、位置検出回路176に「解放アドレス−1」をSEARCH_ADDとして入力して、SEG_POSにより検出することになる。
図24は、移行改良例におけるアドレス変換処理の処理過程を示すフローチャートである。
同図において図11と同一の符号を付した処理の内容は、図11に関連して説明した内容と同等である。状態保持回路126が論理アドレスADDに基づいてレジスタグループ140を選択したあと、アドレス変換回路128は、図22に関連して説明した処理方法により、論理アドレスが属するセグメント番号を特定し(S114)、当該セグメントにおけるオフセットS_m_OFST[7:0]を計算することにより(S116)、物理アドレスM2AD[15:0]を生成する(S118)。
バッファ取得処理の処理過程についても、図12に関連して説明した処理過程と同様である。ただし、セグメントレジスタ146に末尾アドレスを登録する点が異なる。バッファ全解放処理の処理過程については、図13に関連して説明した処理過程と同様である。バッファ部分解放処理の処理過程については、図15に関連して説明した処理過程と同様である。ただし、維持番号を位置検出回路176により求めている点が異なる。
図25は、移行改良例におけるセグメント移行処理の内容を説明するための模式図である。
セグメント移行処理の処理過程についても、図17に関連して説明した処理過程と同様である。ただし、セグメントの末尾アドレスを変更するための処理が追加される。同図は、移行先バッファ空間(ID:7)と移行元バッファ空間(ID:2)の2つのバッファ空間を示している。移行先バッファ空間(ID:7)では、セグメント番号「0」、「1」に対してセグメントが割り当てられている。一方、移行元バッファ空間(ID:2)でも、セグメント番号「0」、「1」に対してセグメントが割り当てられている。ここで、バッファ空間(ID:2)のセグメントの割当先をバッファ空間(ID:7)に変更するとする。
セグメント移行要求を入力されると、割当制御回路120は移行元バッファ空間(ID:2)のセグメント(番号:0)とセグメント(番号:1)に対応づけられているセグメントの割当先を、バッファ空間(ID:2)のセグメント(番号:2)とセグメント(番号:3)に変更する。
ここで、バッファ空間(ID:n)におけるセグメント(番号:m)の末尾アドレスを「Nn_m」と表記することにする。セグメントの割当先を変更することにより、新たに、N7_2とN7_3を設定する必要がある。そのために、まず、割当制御回路120は、バッファ空間(ID:7)のセグメント(番号:2)の末尾の論理アドレスを「ONTA」として保持する。したがって、セグメント(番号:3)の先頭の論理アドレスは「ONTA+1」となる。割当制御回路120は、N7_2=N2_0+ONTA、N7_3=N2_1+ONTAとして末尾アドレスを設定する。このような設定方法により、セグメント移行処理後も、移行先セグメントの末尾アドレスを正しく設定することができる。
すなわち、移行改良例において、セグメントレジスタ146は、該当セグメントにおける末尾アドレスを保持し、アドレス変換回路128は、この末尾アドレスに基づいて、セグメント移行後のバッファ空間における論理アドレスを「データ存在領域」だけに付与している。このため、セグメント移行処理された後のバッファ空間に対する「データ存在領域」以外へのアクセスを防止しやすくなる。
次に、別の改良例として、バッファ連結機能を追加した「連結改良例」について説明する。
[連結改良例]
上記した基本例や移行改良例では、バッファ空間に含まれるセグメント数は最大8個として説明した。そのため、1つのバッファ空間のサイズは、8セグメント、すなわち、256×8=2048バイト(2キロバイト)に制限されることになる。
しかし、タスクによって必要なバッファ空間のサイズはさまざまである。たとえば、ある処理Aは2キロバイトのバッファ空間があれば充分であるが、別の処理Bは100キロバイトのバッファ空間が必要かもしれない。あるいは、処理Aは通常は2キロバイトのバッファ空間で十分であるが、ごくまれに100キロバイトのバッファ空間が必要になるかもしれない。
2キロバイトのバッファ空間はセグメント8個で実現できるが、100キロバイトのバッファ空間を実現するにはセグメントが400個必要である。100キロバイトが要求される場合に備えてバッファ空間の最大サイズを100キロバイトとして設定してもよいが、1つのレジスタグループ140あたり400個のセグメントレジスタ146を含むことになる。しかし、処理Aが400個のセグメントレジスタ146をフル活用することは滅多にないため、結果としてメモリ管理装置100の動作が非効率になってしまう。
以下においては、メモリ管理装置100に複数のバッファ空間を連結することにより論理アドレス範囲を拡大する機能を追加することによりこのような課題を解決する方法を開示する。このような改良例のことを「連結改良例」とよぶことにする。
図26は、TCP/IPによるデータ送信に関して、バッファ連結処理を説明するために模式図である。
通信系アプリケーションの場合、イーサネット(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が連結されることになる。この連結空間においてはバッファ空間の境目に関係なく論理アドレスによる連続アドレッシングが可能である。このようにして、コンテンツ処理の利用する論理アドレス範囲が必要に応じて拡大される。
TCP/IP処理は、バッファ190dを取得し、TCP/IPヘッダであるヘッダAを生成してバッファ190dに記録する。そして、セグメント移行要求によってバッファ190aの送信データ1をバッファ190dに移行させる。バッファ190dにはヘッダAと送信データ1が保持される。バッファ190aからは送信データ1が削除される。
MAC処理は、バッファ190eを取得し、MACヘッダであるヘッダBを生成してバッファ190eに記録する。そして、セグメント移行要求によってバッファ190dのヘッダA+送信データ1をバッファ190eに移行させる。バッファ190eにはヘッダBとヘッダA、送信データ1が保持される。バッファ190dは全解放されてもよい。こうして、バッファ190eに保持されたヘッダB・ヘッダA・送信データ1というデータセットが送信フレームとして外部に送信されることになる。このとき、バッファ190eを全解放してもよい。
送信データ2も送信されると、バッファ190aは全解放される。このような処理方法によれば、必要なときに必要なだけのバッファを取得・解放しつつ、処理に応じてバッファ空間のサイズを大きく変化させることができる。
図27は、TCP/IPによるデータ受信に関して、バッファ連結処理を説明するための模式図である。
外部からTCP/IPパケットを受信した受信タスクは、そのパケットのTCP/IPヘッダに記載されているソケット番号(ポート番号)により、宛先となるアプリケーションソフトウェアを識別する。同図においては、受信データ1〜5という5つの受信データがそれぞれバッファ194a、b、c、d、eという5つのバッファに保持されている。受信タスクは、TCP/IPパケットを受信するごとにバッファを取得してもよい。バッファ取得処理を実行するためにOSの機能を必要としないので、CPUにほとんど負荷をかけることなく低コストにてバッファを取得できる。そのため、受信パケットごとにバッファを取得するというプログラムコードを低コストで実行できる。
バッファ194aの受信データ1とバッファ194cの受信データ3はソケット番号:0を対象とするデータであり、バッファ194bの受信データ2、バッファ194dの受信データ4、バッファ194eの受信データ5は、ソケット番号:1を対象とするデータである。そこで、受信タスクは、ソケット番号:0用の連結空間196aとソケット番号:1用の連結空間196bを用意して受信データを組み立てる。受信タスクは、受信データ1と受信データ3を連結空間196aのバッファ194fに記録する。また、受信タスクは、受信データ2と受信データ4を連結空間196bのバッファ194hに記録した後、バッファ194iを連結空間196bに連結して、更に、受信データ5を記録する。
このような処理方法により、ソケットごとに必要なときに必要なだけのバッファ空間を確保できることになる。
以下、本連結改良例では、
バッファの数:最大16個
セグメントのサイズ:128バイト
1バッファあたりのセグメント数:最大16個
セグメント総数:256個(16×16=256)
連結空間の数:最大16個
として説明する。
図28は、連結空間におけるLBIDとLBSNの関係を説明するための模式図である。
各連結空間は、「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:セグメントの先頭からのオフセットを示す。
ところで、連結空間の数は最大16個であり、割り当てることができるバッファの最大数も16個である。このため、1つの連結空間に16個のバッファを連結すると、別の連結空間を作ることはできない。一方、1つしかバッファを含まない連結空間が16個あるときには、いずれの連結空間に対しても新たなバッファを追加することはできない。連結空間の数や連結空間に含まれるバッファの数の組み合わせはアプリケーション側にて柔軟に設定できる。そこで、連結空間には、MAX_LSBNという値を設定することにする。MAX_LBSNとは、「連結空間に接続することができるバッファの数の上限値」である。MAX_LBSNは、1〜16の範囲で設定される。たとえば、MAX_LSBN=3として設定された連結空間では、LSBNは0〜2のいずれかである。バッファ(LBSN:0)、バッファ(LBSN:1)、バッファ(LBSN:2)の順にデータが記録されていく。そして、バッファ(LBSN:2)にもはや十分なスペースがなくなると、バッファ(LBSN:2)の続きとしてバッファ(LBSN:0)にデータが記録される。バッファ(LBSN:0)が使用中であれば、バッファ(LBSN:0)が全解放されるまで待たされることになる。このように、連結空間は循環式にデータを記録することができる。
図29は、連結改良例における論理アドレスADDと物理アドレスM2ADのデータ構造を示す図である。
メモリ(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」のいずれかである。
このように、MEM、LBID、LBSN、SegOdr、SegAddを含む論理アドレスADD[31:0]により、CPU110は第2メモリ130のアクセス位置を指定する。基本例について示した図5のADDにおけるBFIDの代わりに、LBIDとLBSNのペアによりバッファを特定している。以下、ADD[25:11]におけるLBID/LBSNのことをINQ[14:0]とも表記する。アドレス変換回路128は、論理アドレスADD[31:0]と状態保持回路126のセグメント割当情報から、物理アドレスM2AD[15:0]を生成する。
SegID:物理アドレスM2AD[15:0]のうち上位9ビットM2AD[15:7]はSegIDを示す。SegIDにより、セグメントサイズの単位で物理アドレス範囲が特定される。
セグメント内アドレス(SegAdd):7ビットのM2AD[7:0]は、セグメント内アドレス(SegAdd)を示す。
このM2AD[15:0]により、第2メモリ130における物理アドレスが指定される。
図30は、連結改良例において、割当制御回路120とその周辺の回路構成を示す図である。
基本例に関して図7に示した割当制御回路120との違いは、LBIDキュー198、MAXLBSNテーブル202およびバッファID検索回路200が追加され、バッファキュー122が無くなっている点にある。基本例に示したバッファキュー122の機能は、バッファID検索回路200の一部として搭載されることになる。
(1)LBIDキュー198
LBIDキュー198は、新たに割り当て可能な連結空間のLBIDをFIFO方式にて保存するメモリである。割当制御回路120が割り当てることができる連結空間は最大16個なので、初期状態においては、LBIDキュー198には16個のLBIDが保持される。割当制御回路120は、タスクに新たな連結空間を割り当てるときには、LBIDキュー198からLBIDを1つ取り出す。また、割当制御回路120は、既に設定されている連結空間を解放するときには、そのLBIDをLBIDキュー198に戻す。
LBIDキュー198と割当制御回路120との間の信号は以下の5つである。
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をアサートする。
(2)MAXLBSNテーブル202
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から読み出される。
(3)バッファID検索回路200
バッファ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となる信号である。
図31は、連結改良例におけるバッファID検索回路200の回路構成図である。
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)が割り当てられている」ことを示す。
デコーダ212にはLBS_BFID_I[3:0]とLBS_WRが入力される。LBS_WRがアサートされると、デコーダ212はLBS_BFID_I[3:0]にて指定されたBFIDに対応するINQ情報回路206に対して、MTn_WRをアサートする。LBS_BFID_I[4]=1、すなわち、書込指示であれば、LBS_LBID[6:0]とLBS_LBSN[7:0]がINQ情報回路206の保持回路210に書き込まれる。LBID/LBSNとBFIDが対応づけられたので、MTn[15]=1に設定される。このように、割当制御回路120は、LBIDとLBSN、BFIDを指定して、LBS_BFID_I[4]=1により書込指示したあと、LBS_WRをアサートすることによりLBIDとLBSNおよびBFIDをバッファID検索回路200に対応づけて登録できる。保持回路210に保持されるMTn[15:0]のうち、割り当ての有無を示すMTn[15]はMTn_ID[4]としてセレクタ204に入力され、LBIDとLBSNの組み合わせを示すMTn[14:0]はMTn_IQ[14:0]として比較回路208に入力される。
なお、LBS_BFID_I[4]=Oによりクリア指示したあと、MTn_WRをアサートすると該当する保持回路210のデータはクリアされる。このときには、LBIDとLBSN、BFIDの関係が解消され、BFIDは再割り当て可能となる。
比較回路208は、LBIDとLBSNの組み合わせを示すMTn_IQ[14:0]と、割当制御回路120から送信されたLBS_LBID[6:0]、LBS_LBSN[7:0]を比較する回路である。MTn_IQ[14:0]におけるLBIDとLBSNの組み合わせと、LBS_LBID[6:0]、LBS_LBSN[7:0]におけるLBIDとLBSNの組み合わせが完全に一致したときにはMT_n_A=1、それ以外ではMT_n_A=0となる。すなわち、MT_n_Aは、LBS_LBID[6:0]、LBS_LBSN[7:0]により問い合わせがなされたLBID/LBSNの組み合わせが保持回路210に登録されているか否かを示す。
また、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を示す信号である。
セレクタ204に入力される信号をまとめると以下の通りとなる。
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。
セレクタ204から割当制御回路120に出力される信号をまとめると以下の通りである。
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に対応する信号であるといえる。
b.LBS_BFID_O[4:0]:上位1ビットのLBS_BFID_O[4]が、LBS_LBID[6:0]、LBS_LBSN[7:0]におけるLBIDとLBSNの組み合わせに該当するBFIDの有無を示し、下位3ビットLBS_BFID_O[3:0]がそのBFIDを示す。LBS_BFID_O[4]=1であれば指定されたLBID/LBSNに対応するBFIDが存在することを示し、LBS_BFID_O[4]=0であれば存在しないことを示す。セレクタ204は、MTn_ID[4]とMT_n_AをBFID=0からBFID=15までについて順番にチェックし、MTn_ID[4]=1(割当済)かつMT_n_A=1(LBID/LBSNが一致)となっているBFIDが存在すれば、LBS_BFID_O[4]=1、LBS_BFID_O[3:0]=BFIDとして出力する。存在しなければ、LBS_BFID_O[4]=0、LBS_BFID_O[3:0]=0として出力する。すなわち、割当制御回路120は、LBS_BFID_O[4:0]により、LBS_LBID[6:0]、LBS_LBSN[7:0]にて指定したLBID/LBSNに対してバッファが割り当てられているか否か、割り当てられているバッファのBFIDを確認できる。
c.LBS_LBID_EX:LBS_LBID[6:0]により指定されたLBIDについて、1以上のバッファが割り当てられているか否かを示す。LBS_LBID_EX=1であれば割り当てられていることを示し、LBS_LBID_EX=0であれば割り当てられていないことを示す。
図32は、連結改良例における状態保持回路126の回路構成図である。
同図に示す状態保持回路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を特定する。
図33は、連結改良例におけるアドレス変換回路128の回路構成図である。
同図に示すアドレス変換回路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]のうち、ADD[10:7]により指定されるSegOdrは、アドレス変換回路128内のセレクタ168に入力される。SegOdr=mであれば、セレクタ168は、B_SOのうち該当するセグメント(番号:m)のSegIDをM2AD[14:7]として送出する。また、ADD[6:0]のセグメント内アドレス(SegAdd)は、そのままM2AD[6:0]として送出される。こうして、論理アドレスADD[31:0]は物理アドレス[15:0]に変換される。
図34は、連結改良例におけるアドレス変換処理の処理過程を示すフローチャートである。
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への問い合わせにより同等の判定を行ってもよい。
該当レジスタグループが存在しなければ(S124のN)、アクセスエラーを通知する(S132)。該当レジスタグループが存在すれば(S124のY)、状態保持回路126のセレクタ144は、該当レジスタグループ140からセグメント割当情報をB_SOとしてアドレス変換回路128に送る。
アドレス変換回路128はADD[10:7]よりセグメント番号を取得する(S126)。アドレス変換回路128のセレクタ168は、指定されたセグメント番号についてのSegIDをB_SOから特定する(S128)。こうして特定されたSegIDとADD[6:0]のセグメント内アドレスにより、物理アドレスM2AD[15:0]が生成される(S130)。
図35は、連結改良例におけるバッファ取得処理の処理過程を示すフローチャートである。
その実行結果を保存するためのバッファ空間を要求するために、タスクは「バッファ取得要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。また、バッファに割り当てるべきセグメントの数に加えて、MAX_LBSNも設定パラメータとして送信する。割当制御回路120は、このバッファ取得要求をREQ_Dから読み出すと、以下に示すバッファ取得処理を開始する。
割当制御回路120は、バッファ取得要求コマンドを取得する(S24)。割当制御回路120は、LBIDキュー198のLBS_RD_ABLをチェックして、空いているLBIDが存在するかを判定する(S136)。空きLBIDがなければ(S136のN)、S162のエラー処理に移行する。空きLBIDが存在すれば(S136のY)、割当制御回路120はLBS_DOによりLBIDを1つ取得する(S138)。ここでは、取得したLBID=pとする。
次に、割当制御回路120は、バッファID検索回路200のLBS_EMP_BFID[4]をチェックして空いているBFIDが存在するかを判定する(S140)。空きBFID、すなわち、割り当て可能なバッファがなければ(S140のN)、S162のエラー処理に移行する。空きバッファがあれば(S140のY)、割当制御回路120はLBS_EMP_BFID[3:0]によりBFIDを1つ取得する(S142)。ここでは、取得したBFID=nとする。
割当制御回路120は、LBS_BFID_I[3:0]にBFID=n、LBS_BFID_I[4]に書き込み指示のための「1」を設定し、LBS_LBID[6:0]にLBID=p、LBS_LBSN[7:0]にLBSN=0と設定した上でLBS_WRをアサートすることにより、BFID=nにLBID/LBSN=(p,0)を登録する(S144)。割当制御回路120は、設定パラメータのMAX_LBSNをMAXLBSNテーブル202に登録する(S146)。こうして、LBIDとMAX_LBSNとがMAXLBSNテーブル202に対応づけられる。
割当制御回路120は、セグメントキュー124のUAS_RD_ABLをチェックして、空いているSegIDが存在するかを判定する(S148)。空きセグメントがなければ(S148のN)、S162のエラー処理に移行する。空きセグメントがあれば(S148のY)、割当制御回路120はUAS_DOによりSegIDを1つ取得する(S150)。割当制御回路120は、テーブル保持部134のセグメントテーブルにおいて、BFID=nとSegIDおよび先ほどのLBID=p、LBSN=0を対応づけて設定する(S152)。このときバッファ(LBSN:0)のセグメント番号0から順番にSegIDが登録される。SegIDが登録されたセグメント番号については「割当済:1」、それ以外のセグメント番号については「未割当:0」を設定する。設定パラメータとして指定された数だけSegIDを取得していないときには(S156のN)、処理はS148に戻る。指定数だけ取得したときには(S156のY)、割当制御回路120は、取得したBFID=nを指定し、WRをアサートして、状態保持回路126の該当するレジスタグループ140にセグメント割当情報を登録する(S158)。
こうして、バッファとセグメントの新たな対応関係が状態保持回路126に登録されることになる。リンクレジスタ214には(LBID,LBSN)=(p,0)が登録される。割当制御回路120は、LBID=p、LBSN=0、BFID=nを結果パラメータとして「バッファ取得要求」の成功をRES_Dを介してCPU110に通知する(S160)。
一方、LBID、BFIDやSegIDの取得に失敗したときには(S136のN、S140のN、S148のN)、割当制御回路120は所定のエラー処理をした後に(S162)、「バッファ取得要求」の失敗を通知する(S164)。
図36は、連結改良例におけるバッファ連結処理の処理過程を示すフローチャートである。
既に1以上のバッファを割り当てられている連結空間について、新たなバッファを連結させるとき、CPU110は「バッファリンク要求」を割当制御回路120に入力する。バッファリンク要求の設定パラメータは、LBIDとLBSN、セグメント数である。LBIDにより連結処理の対象となる連結空間を特定し、LBSNにより連結空間における連結位置を特定する。たとえば、LBSN=2であれば、原則として、LBSN=3の位置に新たなバッファが連結される。ここでは、LBID=p、LBSN=qが設定パラメータとして指定されたとする。
割当制御回路120は、バッファリンク要求コマンドを取得する(S170)。割当制御回路120は、更に、設定パラメータからLBID=pとLBSN=qを取得する(S172)。割当制御回路120は、バッファID検索回路200のLBS_EMP_BFID[4]をチェックして空いているBFIDが存在するかを判定する(S174)。空きBFIDがなければ(S174のN)、S200のエラー処理に移行する。空きBFIDがあれば(S174のY)、割当制御回路120はLBS_EMP_BFID[3:0]によりBFIDを1つ取得する(S178)。取得したBFID=nとする。
設定パラメータにより指定されたLBSN=qについて、q+1=MAX_LBSNでなければ(S180のN)、LBSN=q+1が新たなバッファの連結位置となる。もし、q+1=MAX_LBSNであれば(S180のY)、LBSN=0の位置にバッファを連結する。ただし、バッファ(LBSN:0)が割当済であれば(S182のY)、S200のエラー処理に移行する。バッファ(LBSN:0)が解放されていれば(S182のN)、バッファ(LBSN:0)に新たなバッファの連結位置となる(S184)。割当制御回路120は、LBID=p、LBSN=q+1 or 0とBFID=nの組み合わせをバッファID検索回路200に登録する(S186)。
割当制御回路120は、セグメントキュー124のUAS_RD_ABLをチェックして、空いているSegIDが存在するかを判定する(S188)。空きセグメントがなければ(S188のN)、S200のエラー処理に移行する。空きセグメントがあれば(S188のY)、割当制御回路120はUAS_DOによりSegIDを1つ取得する(S190)。割当制御回路120は、テーブル保持部134にBFID=nとSegIDおよび先ほどのLBID=p、LBSN=q+1 or 0を対応づけて設定する(S192)。SegIDが登録されたセグメント番号については「割当済:1」、それ以外のセグメント番号については「未割当:0」を設定する。設定パラメータとして指定された数だけSegIDを取得していないときには(S194のN)、処理はS188に戻る。指定数だけ取得したときには(S194のY)、割当制御回路120は、取得したBFID=nを指定し、WRをアサートして、状態保持回路126の該当するレジスタグループ140にセグメント割当情報を登録する(S196)。
こうして、バッファとセグメントの新たな対応関係が状態保持回路126に登録されることになる。また、リンクレジスタ214には、(LBID,LBSN)=(p,q+1 or 0)が登録されることになる。割当制御回路120は、LBSN=q+1 or 0、BFID=nを結果パラメータとして「バッファリンク要求」の成功をRES_Dを介してCPU110に通知する(S198)。
一方、BFIDやSegIDの取得に失敗したときには(S174のN、S182のN、S188のN)、割当制御回路120は所定のエラー処理をした後に(S200)、「バッファリンク要求」の失敗を通知する(S202)。
図37は、連結改良例におけるバッファ全解放処理の処理過程を示すフローチャートである。
連結改良例においても、バッファを全解放するとき、タスクは「バッファ全解放要求」コマンドをCPUインタフェース132を介して割当制御回路120に送信する。連結改良例におけるバッファ全解放要求の設定パラメータは、解放対象となる連結空間のLBIDと解放対象となるLBSNである。設定パラメータとしてLBID=p、LBSN=qが指定されたとする。
割当制御回路120は、バッファ全解放要求コマンドを取得する(S206)。割当制御回路120は、設定パラメータにて指定されたLBID=p、LBSN=qを取得する(S208)。割当制御回路120は、バッファID検索回路200に問い合わせて、この(LBSN,LBID)=(p,q)の組み合わせについてバッファが割り当てられているかを判定する(S210)。バッファが割り当てられていなければ(S210のN)、割当制御回路120は「バッファ全解放要求」の「失敗」をCPU110に通知する(S228)。バッファが割り当てられていれば(S210のY)、LBS_BFID_O[3:0]より割り当てられているBFIDを取得する(S212)。BFID=nであるとする。次に、割当制御回路120は、このBFID=nに対応するレジスタグループ140のデータをBS_RDから読み出し、該当バッファ空間におけるセグメントのうち、「割当済:1」となっているセグメントが存在しないときには(S214のN)、「バッファ全解放要求」は無効であるため、「失敗」を通知する(S228)。
「割当済:1」のセグメントが存在するときには(S214のY)、割当制御回路120は、「割当済:1」に設定されているセグメントのSegIDをセグメントキュー124に投入する(S216)。更に、割当制御回路120は、CLRをアサートして、レジスタグループ(ID:n)の全セグメントレジスタ146について「未割当:0」に設定する(S220)。こうして、レジスタグループ140(ID:n)におけるバッファとセグメントの関係を解消し、割り当てられていたセグメントを再割当可能な状態に戻す。割当制御回路120は、バッファID検索回路200に対して、LBS_BFID[4]=0にクリア設定をした上で、LBS_LBIDとLBS_LBSN、LBS_BFID_Iにより、BFID=nと(LBID,LBSN)=(p,q)の関係を解消する(S220)。こうして、バッファID検索回路200におけるバッファと連結空間の関係を解消する。もし、指定された連結空間(LBID:p)について、1つもバッファが割り当てられていなければ(S222のY)、割当制御回路120は、LBID=pをLBIDキュー198に投入し、LBID=pを再割当可能な状態に戻す(S224)。1つでもバッファが割り当てられていれば(S222のN)、S224の処理はスキップされる。設定パラメータのLBID=pに対してバッファが割り当てられているかは、LBS_LBID_EXの値により判定される。最後に、割当制御回路120は、「バッファ全解放要求」の成功をRES_Dを介してCPU110に通知する(S226)。
バッファ部分解放処理の処理過程は、基本例に示した内容と同等である。
図38は、連結改良例に関し、キャッシュコントロール機能を搭載した状態保持回路126の回路構成図である。
図18の状態保持回路126と基本的な構成は同等である。ただし、レジスタグループ140は、新たにリンクレジスタ214を含む代わりに、バッファIDレジスタ170を含まない構成となっている。図18と同じく、レジスタグループ140が2つだけ存在するとして説明する。全バッファのセグメント割当情報は退避メモリ174に保持されている。そのうち、2つのバッファのセグメント割当情報は、レジスタグループ140aかレジスタグループ140bのいずれかに保持される。リンクレジスタ214は、INQ、すなわち、当該レジスタグループ140に対応するLBID/LBSNを保持する。
割当制御回路120がセグメント割当情報を登録するためにWRをアサートすると、CASH制御回路172は退避メモリ174において該当する領域のデータを更新する。該当バッファ空間のデータがレジスタグループ140に存在すれば更新内容を反映させ、存在しなければ該当バッファ空間の更新後のデータをいずれかのレジスタグループ140にロードする。
割当制御回路120がセグメント割当情報をクリアするためにCLRをアサートすると、CASH制御回路172は退避メモリ174における退避メモリ174において該当する領域のデータをクリアする。該当バッファ空間のデータがレジスタグループ140に存在すればレジスタグループ140のすべてのセグメントレジスタ146に「未割当」設定する。
割当制御回路120がセグメント割当情報を読み出すためにRDをアサートすると、CASH制御回路172は、退避メモリ174において該当する領域のデータをBS_RDにより出力する。
CPU110から論理アドレスD[31:0]が指定されると、セレクタ144は、INQ[14:0]を抽出し、リンクレジスタ214をチェックして、該当バッファ空間についてのデータがレジスタグループ140が存在するか判定する。存在すれば、そのレジスタグループ140のセグメント割当情報をB_SOとしてアドレス変換回路128に出力する。もし、該当バッファ空間についてのデータがレジスタグループ140に存在しなければ、NO_CACHEをアサートする。
一方、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として出力させる。
図39は、図38の状態保持回路126のキャッシュコントロール機能に対応するバッファID検索回路200の回路構成図である。
図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に出力する。
以上、基本例および移行改良例と連結改良例にて示したセグメント単位のメモリ管理によれば、第2メモリ130の利用効率を高めることができる。また、CPU110にて実行される各種アプリケーション・タスクは論理アドレスによりバッファ空間にアクセスできる。特に、移行改良例に示したメモリ管理方法によれば、複数のバッファ空間の間でセグメントの移行を行うときでも論理アドレスの連続性を保つことができる。このため、メモリの利用効率を高めつつも、プログラミング負担を軽減できる。
また、連結改良例に示したメモリ管理方法によれば、単一のバッファ空間のサイズ以上に論理アドレス範囲を拡大できる。このため、確保すべきメモリサイズが大きく変化するようなアプリケーションであっても、メモリ管理装置100の回路構成を過度に複雑化・大規模化することなく対応できる。
本実施例のメモリ管理装置100のユニークなポイントは、上記したメモリ管理機能をハードウェアロジックにより実現している点にもある。CPU110にて実行されるアプリケーション・タスクが「バッファ取得要求」や「バッファ全解放要求」といったコマンドをメモリ管理装置100に入力すると、メモリ管理装置100はCPU110の演算能力にほとんど依存せずにコマンドを実行できる。
本実施例に示したメモリ管理機能と同等の機能をソフトウェアOSによって実現しようとすれば、OS自体がCPU110の演算能力を利用して動作することになる。汎用プロセッサであるCPU110に比べて、メモリ管理装置100はメモリ管理専用回路であるためオーバーヘッドが大きく低減される。このようなオーバーヘッドの低減は、システム全体としてのスループットを格段に向上させるだけではなく消費電力の抑制にもつながる。高速動作・小記憶容量・低消費電力を設計要件とする組込システムには、特に有効である。
通常、C言語のmalloc関数のようなヒープメモリを確保するためのプログラムコードは、実行コストが高くつくコードである。そのため、ヒープメモリの確保・解放を頻繁に繰り返すようなコンピュータプログラムは処理パフォーマンスが悪くなる。そこで、通常は、初期化時等にあらかじめ大きめのサイズにてメモリ領域を確保しておくことが多い。しかし、このようなプログラムを実行すると、「割当領域として確保されているが実際には使用されていないメモリ領域」が発生しやすい。メモリ容量の小さなシステムにとっては許容しがたい状況となる。
これに対して、本実施例に示したメモリ管理装置100の場合、CPU110に対する負荷をほとんどかけることなく、ヒープメモリの確保や解放等のメモリ管理処理を実行できる。このため、「ヒープメモリの確保・解放を頻繁に繰り返すプログラム」であってもそれほど実行コストが高くならない。いいかえれば、「必要なときに必要なときだけメモリを確保し、不必要になったときに不必要になっただけメモリを解放する」というプログラムを高パフォーマンスにて実行できるので、コーディング面からもメモリ利用率の高めることができる。
最初に述べたように、OSの機能の中でもメモリ管理機能は中核となる機能である。この中核機能をハードウェアとしてのメモリ管理装置100により提供できるため、本実施例のメモリ管理装置100は、さまざまな電子機器のメモリ利用効率、ひいては、処理パフォーマンスを改善することが期待される。
以上、本発明を実施例をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
請求項に記載の「実行制御回路」の機能は、本実施例において主としてCPU110の機能として実現される。請求項に記載の「メモリ」の機能は、本実施例においては主として第2メモリ130の機能として実現される。請求項に記載の「範囲番号」は、本実施例においてはセグメント番号(SegOdr)として表現されている。請求項に記載の「セグメントIDの無効化」とは、本実施例においては「未割当:0」の設定として表現されている。同様に「有効に登録されているセグメントID」とは、本実施例においては割当済みのセグメントとして表現されている。請求項に記載の「退避制御回路」の機能は、本実施例においては主としてCASH制御回路172の機能として実現される。請求項に記載の「記録状態情報」は、本実施例においてはBn_Sm[19:8]の末尾アドレスとして表現されている。請求項に記載の「連結空間キュー」は、本実施例においては主としてLBIDキュー198として表現されている。請求項に記載の「連結ID」と「位置番号」は、本実施例においてはそれぞれLBID、LBSNとして表現されている。
請求項に記載の「第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. 1以上のタスクを実行する実行制御回路と、
    複数のセグメントに分割され、セグメント単位にてデータを保持するメモリと、
    論理アドレス空間であるバッファ空間に関し、複数のバッファ空間のうちいずれかのバッファ空間についてのバッファIDをタスクに割り当てる割当制御回路と、
    バッファ空間における論理アドレスを物理アドレスに変換するアドレス変換回路と、
    バッファIDとセグメントIDの対応付けによりバッファ空間とセグメントとの対応関係をセグメント割当情報として保持する状態保持回路と、
    前記複数のセグメントのうち、新たな割り当てが許可される状態にあるセグメントのセグメントIDを保持するセグメントキューと、
    前記複数のバッファ空間のうち、新たな割り当てが許可される状態にあるバッファ空間のバッファIDを保持するバッファキューと、を備え、
    前記状態保持回路は、複数個のセグメントレジスタを含むレジスタグループを複数グループ含み、レジスタグループは前記複数のバッファ空間のいずれかと対応づけられ、更に、セグメントレジスタには該当バッファ空間における論理アドレス範囲のうちの所定範囲を特定する範囲番号が設定されており、
    前記割当制御回路は、1以上のセグメントを含むバッファ空間の割り当てを指示するバッファ取得要求を入力されたとき、前記バッファキューと前記セグメントキューからそれぞれバッファIDと1以上のセグメントIDを取得し、取得したバッファIDに対応するレジスタグループにおいて、取得した1以上のセグメントIDを1以上のセグメントレジスタにそれぞれ登録することにより、バッファ空間とセグメントとの対応関係を前記状態保持回路に設定し、
    前記アドレス変換回路は、論理アドレスによりアクセス先を指定するアクセス要求を入力されたとき、前記状態保持回路から出力される前記セグメント割当情報を参照して、アクセス要求元のタスクに対応するレジスタグループにおいて、指定された論理アドレスに対応する範囲番号を特定し、その範囲番号に対応するセグメントレジスタに保持されているセグメントIDを取得し、そのセグメントIDに対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換することを特徴とするメモリ管理装置。
  2. 前記割当制御回路は、バッファ空間の解放を指示する全解放要求を入力されたとき、前記全解放要求において指定されたバッファIDに対応するレジスタグループにおいて、各セグメントレジスタに登録されているセグメントIDを無効化するとともに、前記指定されたバッファIDを前記バッファキューに投入し、前記無効化されたセグメントIDを前記セグメントキューに投入することにより、前記全解放要求にて指定されたバッファ空間とそのバッファ空間に対応づけられていたセグメントを再割当許可状態に設定することを特徴とする請求項1に記載のメモリ管理装置。
  3. 前記割当制御回路は、バッファ空間の一部の解放を指示する部分解放要求を入力されたとき、前記部分解放要求において指定されたバッファIDに対応するレジスタグループにおいて、前記部分解放要求において指定された論理アドレスよりも所定バイト前の論理アドレスに対応する範囲番号を特定し、その範囲番号に対応する論理アドレス範囲以降の論理アドレスに対応する範囲番号にて示されるセグメントを無効化し、前記無効化されたセグメントIDを前記セグメントキューに投入することにより、前記部分解放要求にて指定された論理アドレス以降に対応づけられているセグメントを再割当許可状態に設定することを特徴とする請求項1に記載のメモリ管理装置。
  4. 前記割当制御回路は、第1のバッファ空間への第2のバッファ空間のデータの移行を指示するセグメント移行要求を入力されたとき、前記第1のバッファ空間に対応するレジスタグループのセグメントレジスタに対して前記第2のバッファ空間に対応するレジスタグループにおいて有効に登録されているセグメントIDを追加登録することにより、前記第2のバッファ空間に対応するセグメントを前記第1のバッファ空間に対応づけることを特徴とする請求項1に記載のメモリ管理装置。
  5. 前記割当制御回路は、前記セグメント移行要求を入力されたときには、更に、前記第2のバッファ空間に対応するレジスタグループにおける各セグメントレジスタのセグメントIDを無効化し、前記第2のバッファ空間に対応するバッファIDを前記バッファキューに投入し、前記無効化されたセグメントIDを前記セグメントキューに投入することにより、前記第2のバッファ空間を再割当許可状態に設定することを特徴とする請求項4に記載のメモリ管理装置。
  6. 前記状態保持回路のレジスタグループには、更に、バッファIDを保持するためのバッファレジスタが含まれ、
    前記状態保持回路は、
    バッファレジスタとセグメントレジスタに保持されるデータを退避させるための退避メモリと、
    退避メモリからレジスタグループへのデータロードを実行する退避制御回路と、を含み、
    前記退避制御回路は、アクセス先となるバッファ空間のデータがレジスタグループに存在しないときには、前記退避メモリにおいてアクセス先となるバッファ空間のデータを前記レジスタグループにロードすることを特徴とする請求項1に記載のメモリ管理装置。
  7. セグメントレジスタは、更に、該当セグメントにおいてデータが書き込まれている範囲を示す記録状態情報を保持し、
    前記アドレス変換回路は、前記アクセス要求を入力されたとき、記録状態情報を参照して、範囲番号と論理アドレス範囲との対応関係を調整することを特徴とする請求項1に記載のメモリ管理装置。
  8. 1以上のバッファ空間を連結することにより一の論理アドレス空間として形成される連結空間に関し、複数の連結空間のうち、新たな割り当てが許可される状態にある連結空間の連結IDを保持する連結空間キュー、を更に備え、
    前記状態保持回路のレジスタグループには、バッファ空間が属する連結空間の連結IDとその連結空間の論理アドレス範囲のうち前記バッファ空間が対応する論理アドレス範囲を示す位置番号を保持するリンクレジスタが含まれ、
    前記割当制御回路は、前記バッファ取得要求を入力されたとき、バッファIDとセグメントIDに加えて、前記連結空間キューから連結IDを取得し、取得したバッファIDに対応するレジスタグループのリンクレジスタに連結IDと位置番号を登録することにより、連結空間とバッファ空間との対応関係を設定し、
    前記割当制御回路は、連結空間への新たなバッファ空間の追加を指示するバッファリンク要求を入力されたとき、前記バッファキューからバッファIDを取得し、取得したバッファIDに対応するレジスタグループのリンクレジスタに前記バッファリンク要求において指定された連結IDと位置番号を登録することにより、連結空間に新たなバッファ空間を追加し、
    前記アドレス変換回路は、前記アクセス要求を入力されたとき、アクセス要求元のタスクによりアクセス対象となるレジスタグループとして、前記アクセス要求において指定された連結IDと位置番号を保持するレジスタグループを特定することを特徴とする請求項1に記載のメモリ管理装置。
  9. 複数のセグメントに分割されたメモリに対する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に対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換することを特徴とするメモリ管理装置。
JP2007525509A 2007-01-10 2007-01-10 メモリ管理装置 Active JP4131983B1 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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