Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
MEMORY MANAGEMENT APPARATUS
Document Type and Number:
WIPO Patent Application WO/2008/084531
Kind Code:
A1
Abstract:
A second memory (130) holds data on a segment unit basis. An allocation control circuit (120) sets a buffer space as a logical address. The buffer space is formed as an aggregation of one or more segments. A state holding circuit (126) holds the correspondence relationship between the buffer space and the segments as segment allocation information. An address conversion circuit (128) converts a logical address to a physical address with reference to the segment allocation information. A segment queue holds an empty segment and a buffer queue holds an empty buffer. The state holding circuit (126) comprises a plurality of register groups each including a plurality of segment registers. The register group is made to correspond to any of a plurality of the buffer spaces. The segment register has a set range number for specifying a predetermined range of the logical address range in the relevant buffer space.

Inventors:
MARUYAMA NAOTAKA (JP)
Application Number:
PCT/JP2007/050131
Publication Date:
July 17, 2008
Filing Date:
January 10, 2007
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
NETCLEUS SYSTEMS CORP (JP)
MARUYAMA NAOTAKA (JP)
International Classes:
G06F12/10; G06F12/02
Foreign References:
JP2003316645A2003-11-07
US20030093610A12003-05-15
JP2002508862A2002-03-19
JPH0430232A1992-02-03
Attorney, Agent or Firm:
MORISHITA, Sakaki (Shibuya-ku Tokyo, 21, JP)
Download PDF:
Claims:
 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に対応する物理アドレスを特定することにより、論理アドレスを物理アドレスに変換することを特徴とするメモリ管理装置。 
Description:
メモリ管理装置

 この発明は、メモリ管理技術に関する。

 CPU(Central Processing Unit)をはじめとする電 デバイスの高機能化・低価格化にともなっ 、携帯電話のような組込システム(Enbeded Sys tem)にも高度なOS(Operating System)が搭載されつ ある。システムの性能や用途に応じてOSに求 められる機能はさまざまであるが、その中核 となるのは「メモリ管理機能」である。

 通常、筐体サイズや製造コストなどの制 から、搭載できるメモリの容量には限度が る。組込システムでは特に制約が厳しく、 られたメモリ資源を効率的に利用する必要 ある。また、決められた時間内に処理が完 することを厳密に要求するシステムも多い 時間的要件の厳しいシステムの場合、メモ 管理処理にともなうオーバヘッドはシステ 全体のパフォーマンスに大きく影響する。

 本発明は、上記課題に鑑みてなされたもの あり、その主たる目的は、高速かつ効率的 メモリ管理機能を実現するための技術、を 供することにある。

特開2003-316645号公報

 本発明のある態様は、メモリ管理装置であ 。
 この装置は、1以上のタスクを実行する実行 制御回路と、セグメント単位でデータを保持 するメモリと、論理アドレスによりアクセス されるバッファ空間をタスクに割り当てる割 当制御回路と、論理アドレスを物理アドレス に変換するアドレス変換回路と、バッファ空 間とセグメントとの対応関係をセグメント割 当情報として保持する状態保持回路と、セグ メントキューおよびバッファキューを備える 。
 状態保持回路は、複数のレジスタグループ 含み、レジスタグループは複数個のセグメ トレジスタを含む。レジスタグループは複 のバッファ空間のいずれかと対応づけられ 。セグメントレジスタには該当バッファ空 における論理アドレス範囲のうちの所定範 を特定する範囲番号が設定されている。
 割当制御回路は、バッファ取得要求を入力 れたとき、バッファキューとセグメントキ ーからそれぞれバッファIDと1以上のセグメ トIDを取得し、取得したバッファIDに対応す るレジスタグループにおいて、取得した1以 のセグメントIDを1以上のセグメントレジス にそれぞれ登録することにより、バッファ 間とセグメントとの対応関係を状態保持回 に設定する。バッファIDとはバッファ空間を 一意に識別するためのIDであり、セグメントI Dとはセグメントを一意に識別するためのIDで ある。
 アドレス変換回路は、メモリに対するアク ス要求を入力されたとき、セグメント割当 報を参照して、アクセス要求元のタスクに 応するレジスタグループにおいて、指定さ た論理アドレスに対応する範囲番号を特定 、その範囲番号に対応するセグメントレジ タに保持されているセグメントIDを取得し そのセグメントIDに対応する物理アドレスを 特定することにより、論理アドレスを物理ア ドレスに変換する。

 このような態様によれば、タスクにバッ ァ空間を割り当て、バッファ空間にセグメ トを割り当て、論理アドレスを物理アドレ に変換してメモリへのアクセスを実現する いう一連の処理をハードウェアロジックに り実現できる。これにより、ソフトウェアO Sに比べて高速にメモリ管理処理を実行しや くなる。また、バッファ空間をセグメント 位で取り扱うことにより、メモリの利用率 高めることができる。

 なお、以上の構成要素の任意の組合せ、 発明を方法、システム、記録媒体、コンピ ータプログラムにより表現したものもまた 本発明の態様として有効である。

 本発明によれば、高速かつ効率的なメモ 管理機能を実現できる。

一般的なメモリ管理方法の一つとして 由割当方式を説明するための模式図である 一般的なメモリ管理方法の一つとして 定割当方式を説明するための模式図である 本実施例におけるメモリ管理方法を説 するための模式図である。 本実施例におけるメモリ管理装置の回 図である。 論理アドレス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 1 :ヒープメモリが初期化される。ヒープメモ はすべて空き領域となっている。
 時刻t 2 :1以上のタスクが開始される。タスクによる モリの取得要求に基づいて、OSは、A~Eの5つ 領域を確保する。以下、同図において「A」 と表記されている領域のことを「割当領域(A) 」と表記する。同図斜線で示す部分は割当領 域であることを示す。
 時刻t 3 :タスクの実行過程において、タスクによる モリの解放要求に基づいて、OSは割当領域(B) と割当領域(D)を解放する。一方、OSは、新た メモリ取得要求に基づいて、割当領域(F)と 当領域(G)をヒープメモリに確保する。
 時刻t 4 :タスクの実行過程において、OSは割当領域(A) を解放する。一方、OSは、割当領域(H)、割当 域(I)および割当領域(J)をヒープメモリに確 する。

 同図に示す自由割当方式の場合、割当領 を確保するために必要なだけの空き領域を し出す必要があるが、メモリの確保と解放 繰り返されていくうちに空き領域が細分化 てしまう。そのため、必要なサイズの割当 域の確保に失敗しやすくなる。一度電源を 入すると、何年間も初期化されることのな 通信系アプリケーションでは、このような 題が特に顕在化しやすい。

 図2は、一般的なメモリ管理方法の一つとし て固定割当方式を説明するための模式図であ る。
 固定割当方式においては、ヒープメモリは らかじめ固定長の「単位領域」に分割され 。同図においては、ヒープメモリは5つの単 位領域に分割されている。時刻t 1 においてヒープメモリは初期化されており、 5つの単位領域はすべて空き領域である。そ て、時刻t 2 に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」、セグメント(H 2)は論理アドレス「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(以下、「B FID」と表記する。)」を保持する。セグメン キュー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の集合として形成される装置であるが、C PU110や第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より、物理アドレスは「0 x0104」となる。

 図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)方 にて保存するメモリである。割当制御回路12 0が割り当てることができるバッファ空間は 大8個なので、初期状態においては、バッフ キュー122には8つのBFIDが保持される。割当 御回路120は、タスクに新たなバッファ空間 割り当てるときには、バッファキュー122か BFIDを1つ取り出す。また、割当制御回路120は 、既に割り当てているバッファ空間を解放す るときには、そのBFIDをバッファキュー122に す。

 バッファキュー122と割当制御回路120との間 信号は以下の5つである。
 a.UAB_WR:割当制御回路120からバッファキュー1 22への書込信号である。
 b.UAB_DI:割当制御回路120からバッファキュー1 22へのBFID送信信号である。UAB_WRがアサート(as sert)されると、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からバッファキュー1 22への読出信号である。
 e.UAB_DO:バッファキュー122から割当制御回路1 20への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インタフェース13 2は、割当制御回路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からテーブル保持部13 4への書込信号である。
 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インタフェース1 32およびテーブル保持部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個となる。以下、Seg Odr=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_W Rをアサートする。このとき、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は、基本例におけるアドレス変換回路12 8の回路構成図である。
 アドレス変換回路128には、CPU110により指定 れる論理アドレスADDと、状態保持回路126か 送出されるB_SOが入力される。論理アドレス ADD[31:0]のうち、ADD[31:16]は、状態保持回路126 セレクタ144に入力され、セレクタ144は、ADD[3 1: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は、バッファ取得要求コマンドをR EQ_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)に登録する(S3 8)。

 こうして、バッファとセグメントの新たな 応関係がセグメント割当情報として状態保 回路126に登録される。割当制御回路120は、 得したBFID=nを結果パラメータとして「バッ ァ取得要求」の成功をRES_Dを介してCPU110に 知する(S40)。
 一方、BFIDやSegIDの取得に失敗したときには( S26のN、S30のN)、割当制御回路120は所定のエラ ー処理を実行した後に(S42)、「バッファ取得 求」の失敗を通知する(S44)。エラー処理と 、たとえば、BFIDの取得に成功したもののSegI Dの取得に失敗したとき、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」設定する(S 56)。こうして、バッファ全解放要求にて指定 されたバッファ空間(ID:n)に対応づけられてい たセグメントは、すべて再割当可能な状態に 戻される。次に、割当制御回路120は、指定さ れたBFID=nをバッファキュー122に投入する(S58) こうして、BFID=nも再割当可能な状態に戻さ る。割当制御回路120は、「バッファ全解放 求」の成功をRES_Dを介してCPU110に通知する(S 60)。

 図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」設定する(S 76)。そして、設定後のセグメントテーブルの データをレジスタグループ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」に対して、バッファ空間(I D: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重割り当てにより別々のバッファ空間の間 効率的にデータを共有できる。セグメント(I D: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のセグメントテーブルにコピーする(S 90)。次に、移行元BFID=n2に関して、レジスタ ループ140(ID:n2)のデータをBS_RDから読み出す(S 92)。移行元バッファ空間(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:n 2)において割り当てられていたセグメントのS egIDを追加し、「割当済」設定する(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の機能を備えるCA SH制御回路172と、退避メモリ174が搭載されて ることである。退避メモリ174は、Dual Port R AM(Random Access Memory)であってもよい。また、 レジスタグループ140には、複数のセグメン レジスタ146に加えて「バッファIDレジスタ17 0」が追加されている。

 割り当てることのできるバッファの数は 大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(Transmissio n Control Protocol/Internet Protocol)に基づく通信 アプリケーションソフトウェアの場合、
 コンテンツである送信データを生成するコ テンツ処理
 送信データに付与すべきTCP/IPヘッダを生成 るTCP/IP処理
 送信データに付与すべきMAC(Media Access Contro l)ヘッダを生成する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)のセグメントに ついてデータの連続性が損なわれている。
 以下においては、このような場合でも、CPU1 10から連続的な論理アドレスによりバッファ 間のデータをアドレッシングするための方 を開示する。このような改良例のことを「 行改良例」とよぶことにする。

 図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+12 8=256だからである。セグメント(番号:2)の末尾 アドレスS_2_NXST[11:0]は256+70=326により「326」と なる。同様にして、326+128=454よりセグメント( 番号:3)の末尾アドレスS_3_NXST[11:0]は「454」、4 54+90=544よりセグメント(番号:4)の末尾アドレ S_4_NXST[11:0]は「544」となる。

 基本例として図11等に関連して説明した ドレス変換方法では、ADD[11:8]によりセグメ ト番号(SegOdr)を特定し、セグメント番号(SegOd r)により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=7 4より、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[3 1: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なので、M2 AD[15:8]=S_3_ID[7:0]、M2AD[7:0]=S_3_OFST[7:0]=74となる こうして、セグメント(番号:3)に対応づけら ているセグメントのの先頭から74バイト目 して物理アドレスが特定される。

 図23は、移行改良例における位置検出回路17 6の回路構成図である。
 位置検出回路176は、バッファ部分解放要求 マンドが入力されたときに、設定パラメー により指定された「解放アドレス-1」をSEARC H_ADDとして入力される。基本的な仕組みは図2 2に示したアドレス変換回路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=204 8バイト(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 Contro l)ヘッダを生成するMAC処理
という3つの処理を定義する。これら3つの処 は非同期的に実行されるとする。
 バッファ190a、190b、190cにより形成される連 空間192には、送信データ1、2、3が保持され いる。まず、コンテンツ処理は、バッファ1 90aを取得した上で送信データ1を記録する。 ンテンツ処理は、次の送信データ2を記録す ときには、新たにバッファ190bを取得してバ ッファ190bに連結する。送信データ2はバッフ 190aとバッファ190bにまたがって記録される 次の送信データ3はバッファ190bに記録される 。更に別の送信データが保持される場合には 、バッファ190cが連結されることになる。こ 連結空間においてはバッファ空間の境目に 係なく論理アドレスによる連続アドレッシ グが可能である。このようにして、コンテ ツ処理の利用する論理アドレス範囲が必要 応じて拡大される。

 TCP/IP処理は、バッファ190dを取得し、TCP/IP ヘッダであるヘッダAを生成してバッファ190d 記録する。そして、セグメント移行要求に ってバッファ190aの送信データ1をバッファ19 0dに移行させる。バッファ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 B uffer Sequence Number)」という通し番号が付与さ れる。1バッファあたりの最大セグメント数=1 6、1セグメントのサイズ=128なので、128×16=2048 より、1バッファあたりの最大サイズは2048バ ト(2キロバイト)である。また、1連結空間あ たりの最大バッファ数は16なので、2048×16=3276 8より、1連結空間あたりの最大サイズは32768 イト(32キロバイト)である。LBSNは、各連結空 間における論理アドレス範囲を特定する。た とえば、LBSN=0のバッファ(以下、「バッファ(L BSN:0)」と表記する)は、連結空間における論 アドレス範囲「0~32767」のうちの最初の「0~20 47」に該当する。同様にして、バッファ(LBSN:1 )は、連結空間における論理アドレス範囲「20 48~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は、連結改良例における論理アドレスAD Dと物理アドレス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を指定するための信号である。ML B_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にあらわれているMA X_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からバッファI D検索回路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にB FIDが対応づけられる。クリア指示のときに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であって、M T4[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をアサートすると該当する保持回路2 10のデータはクリアされる。このときには、L BIDと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_L LEXは、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により指定されたL BIDの連結空間に、バッファ(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]がBF IDを示し、上位1ビットのLBS_EMP_BFID[4]がLBS_EMP_B FID[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として出力する。M Tn_ID[4]=0となっているBFIDが存在しなければ、L ES_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/LB SNが一致)となっているBFIDが存在すれば、LBS_B FID_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は、連結改良例における状態保持回路12 6の回路構成図である。
 同図に示す状態保持回路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[2 5: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)。アドレス変換回路1 28のセレクタ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は、LB IDキュー198のLBS_RD_ABLをチェックして、空いて いるLBIDが存在するかを判定する(S136)。空きLB IDがなければ(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、L BS_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とMA X_LBSNとがMAXLBSNテーブル202に対応づけられる

 割当制御回路120は、セグメントキュー124 UAS_RD_ABLをチェックして、空いているSegIDが 在するかを判定する(S148)。空きセグメント なければ(S148のN)、S162のエラー処理に移行 る。空きセグメントがあれば(S148のY)、割当 御回路120はUAS_DOによりSegIDを1つ取得する(S15 0)。割当制御回路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)、割当制御回路1 20は所定のエラー処理をした後に(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)。空きB FIDがなければ(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は、LBI D=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つ取得する(S19 0)。割当制御回路120は、テーブル保持部134にB FID=nとSegIDおよび先ほどのLBID=p、LBSN=q+1 or 0 対応づけて設定する(S192)。SegIDが登録された セグメント番号については「割当済:1」、そ 以外のセグメント番号については「未割当: 0」を設定する。設定パラメータとして指定 れた数だけSegIDを取得していないときには(S1 94のN)、処理はS188に戻る。指定数だけ取得し ときには(S194のY)、割当制御回路120は、取得 したBFID=nを指定し、WRをアサートして、状態 持回路126の該当するレジスタグループ140に グメント割当情報を登録する(S196)。

 こうして、バッファとセグメントの新たな 応関係が状態保持回路126に登録されること なる。また、リンクレジスタ214には、(LBID,L BSN)=(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は、このBFI D=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にクリア設定をした上で、L BS_LBIDとLBS_LBSN、LBS_BFID_Iにより、BFID=nと(LBID,LB SN)=(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比較回路21 6が新たに追加されている。第2比較回路216は BF_INQ[14:0]のLBID/LBSNと保持回路210のLBID/LBSNを 較して、両者が一致すればMT_n_Bをアサート る。このような構成により、セレクタ204はB F_INQ[14:0]に対応するBFIDをLB_BFID[4:0]として状態 保持回路126に出力する。

 以上、基本例および移行改良例と連結改良 にて示したセグメント単位のメモリ管理に れば、第2メモリ130の利用効率を高めること ができる。また、CPU110にて実行される各種ア プリケーション・タスクは論理アドレスによ りバッファ空間にアクセスできる。特に、移 行改良例に示したメモリ管理方法によれば、 複数のバッファ空間の間でセグメントの移行 を行うときでも論理アドレスの連続性を保つ ことができる。このため、メモリの利用効率 を高めつつも、プログラミング負担を軽減で きる。
 また、連結改良例に示したメモリ管理方法 よれば、単一のバッファ空間のサイズ以上 論理アドレス範囲を拡大できる。このため 確保すべきメモリサイズが大きく変化する うなアプリケーションであっても、メモリ 理装置100の回路構成を過度に複雑化・大規 化することなく対応できる。

 本実施例のメモリ管理装置100のユニークな イントは、上記したメモリ管理機能をハー ウェアロジックにより実現している点にも る。CPU110にて実行されるアプリケーション タスクが「バッファ取得要求」や「バッフ 全解放要求」といったコマンドをメモリ管 装置100に入力すると、メモリ管理装置100はC PU110の演算能力にほとんど依存せずにコマン を実行できる。
 本実施例に示したメモリ管理機能と同等の 能をソフトウェアOSによって実現しようと れば、OS自体がCPU110の演算能力を利用して動 作することになる。汎用プロセッサであるCPU 110に比べて、メモリ管理装置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とセグメントキュー12 4を接続する複数の信号線が対応し、「第5の ス」は、本実施例においては割当制御回路1 20とバッファキュー122を接続する複数の信号 が対応する。
 このほかにも、請求項に記載の各構成要件 果たすべき機能は、本実施例において示さ た各機能ブロックの単体もしくはそれらの 係によって実現されることも当業者には理 されるところである。

 本発明によれば、効率的かつ高速なメモ 管理を実現される。