(57)【要約】【課題】複数のアクセスユニットが１つのデータメモリを使用する場合に、各ユニットの使用領域を確実に用意することができるメモリ管理装置を提供する。【解決手段】データ入出力システム１において、データメモリ２の使用領域と空き領域とをリンクリストメモリ３を使用して管理する場合に、ポートＰ０〜Ｐ２が夫々データメモリ２を使用する領域に制限を設け、各ポートＰ０〜Ｐ２の使用領域が常に確保されるようにメモリ管理装置８を構成し、特定のポートがデータメモリ２を独占的に使用する状態を回避する。【選択図】図１
2008269561.tif 000002
【特許請求の範囲】
【請求項１】
書込みが要求されたデータをデータメモリに書き込むと共に、読み出しが要求されたデータを前記データメモリより読み出して出力する場合に、前記データメモリの使用領域と空き領域とをリンクリストメモリを使用して管理するメモリ管理装置において、
前記データメモリに対してデータの書込み及び読み出しを行う複数のアクセスユニットが夫々前記データメモリを使用する領域に制限を設けることで、前記複数のアクセスユニットの使用領域が常に確保されるように構成したことを特徴とするメモリ管理装置。
【請求項２】
前記複数のアクセスユニットが、夫々前記データメモリを使用している領域の先頭アドレス，末尾アドレスが格納されるキュー先頭レジスタ及びキュー末尾レジスタと、
これら複数のアクセスユニットが、夫々前記データメモリの領域を使用しているサイズをカウントするためのキューカウンタと、
前記空き領域の先頭アドレス及び末尾アドレスが格納されるIdle先頭レジスタ及びIdle末尾レジスタと、
前記空き領域のサイズをカウントするためのIdleカウンタと、
前記複数のキューカウンタについて夫々キューの上限値，及びキューの最小限確保数に対応する下限値が設定されており、前記Idleカウンタの値より、各キューカウンタにおけるカウンタ値が前記下限値より大きい場合の両者の差分を全て合計して減算した値が格納される仮想Idleカウンタとを備え、
前記複数のアクセスユニットの何れかによる書込み要求が発生した場合に、
前記アクセスユニットに対応するキューカウンタが上限値以上、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタの値が「０」の場合は、前記データメモリに対する書込みを禁止し、
前記アクセスユニットに対応するキューカウンタが下限値未満の場合、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタが「０」でない場合は当該カウンタをデクリメントしてから、前記Idle先頭レジスタが示すアドレスにデータを書込み、
前記キューカウンタが「０」でない場合は、前記Idle先頭レジスタのアドレス値を、前記アクセスユニットのキュー末尾レジスタが示す前記リンクリストメモリのアドレスに書込み、前記キューカウンタが「０」の場合は、前記アドレス値を、前記アクセスユニットのキュー先頭レジスタに書込み、
前記アクセスユニットのキュー末尾レジスタに、前記Idle先頭レジスタの内容を書き込んで、前記アクセスユニットのキューカウンタをインクリメントし、
前記Idle先頭レジスタが示す前記リンクリストメモリのアドレスからデータを読み出して、前記データを前記Idle先頭レジスタに書き込んで、前記Idleカウンタをデクリメントする書込み制御手段を備えたことを特徴とする請求項１記載のメモリ管理装置。
【請求項３】
前記複数のアクセスユニットが、夫々前記データメモリを使用している領域の先頭アドレス，末尾アドレスが格納されるキュー先頭レジスタ及びキュー末尾レジスタと、
これら複数のアクセスユニットが、夫々前記データメモリの領域を使用しているサイズをカウントするためのキューカウンタと、
前記空き領域の先頭アドレス及び末尾アドレスが格納されるIdle先頭レジスタ及びIdle末尾レジスタと、
前記空き領域のサイズをカウントするためのIdleカウンタと、
前記複数のキューカウンタについて夫々キューの上限値，及びキューの最小限確保数に対応する下限値が設定されており、前記Idleカウンタの値より各キューカウンタにおけるカウンタ値が前記下限値より大きい場合の両者の差分を全て合計して減算した値が格納される仮想Idleカウンタとを備え、
前記複数のアクセスユニットの何れかによる書込み要求が発生した場合に、
前記アクセスユニットに対応するキューカウンタが上限値以上、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタの値が「０」の場合は、当該ユニットの使用領域のキュー先頭レジスタが示すアドレスにデータを書込み、前記キュー先頭レジスタのアドレス値をキュー末尾レジスタが示す前記リンクリストメモリのアドレスとキュー末尾レジスタに書き込み、前記アドレス値が示す前記リンクリストメモリのアドレスからデータを読み出して、前記データを前記キュー先頭アドレスへ書き込み、
前記アクセスユニットに対応するキューカウンタが下限値未満の場合、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタが「０」でない場合は当該カウンタをデクリメントしてから、前記Idle先頭レジスタが示すアドレスにデータを書込み、
前記キューカウンタが「０」でない場合は、前記Idle先頭レジスタのアドレス値を、前記アクセスユニットのキュー末尾レジスタが示す前記リンクリストメモリのアドレスに書込み、前記キューカウンタが「０」の場合は、前記アドレス値を、前記アクセスユニットのキュー先頭レジスタに書込み、
前記アクセスユニットのキュー末尾レジスタに、前記Idle先頭レジスタの内容を書き込んで、前記アクセスユニットのキューカウンタをインクリメントし、
前記Idle先頭レジスタが示す前記リンクリストメモリのアドレスからデータを読み出して、前記データを前記Idle先頭レジスタに書き込んで、前記Idleカウンタをデクリメントする書込み制御手段を備えたことを特徴とする請求項１記載のメモリ管理装置。
【請求項４】
前記複数のアクセスユニットの何れかによる読出し要求が発生した場合に、
前記アクセスユニットに対応するキューカウンタが「０」の場合は、前記データメモリからのデータ読み出しを禁止し、
前記アクセスユニットに対応するキューカウンタが「０」でない場合は、前記アクセスユニットのキュー先頭レジスタが示す前記データメモリのアドレスからデータを読み出し、
前記Idleカウンタの値が「０」でない場合は、前記Idle末尾レジスタが示す前記リンクリストメモリのアドレスと前記Idle末尾レジスタに、前記アクセスユニットのキュー先頭レジスタの内容を書込んで、前記Idleカウンタをインクリメントし、
前記カウンタの値が「０」の場合は、前記Idle先頭レジスタ及び前記Idle末尾レジスタに、前記アクセスユニットのキュー先頭レジスタの内容を書込んで、前記Idleカウンタをインクリメントし、
前記アクセスユニットのキュー先頭レジスタが示す前記リンクリストメモリのアドレスからデータを読出して、そのデータを前記キュー先頭レジスタに書き込んで前記アクセスユニットのキューカウンタをデクリメントし、
前記アクセスユニットのキューカウンタが下限値以上となった場合は、仮想Idleカウンタをインクリメントする読出し制御手段を備えたことを特徴とする請求項２または３記載のメモリ管理装置。
【請求項５】
前記複数のアクセスユニットを、複数のアクセスグループに分けて、
各グループ毎にキューカウンタを設け、
前記制御手段は、
前記グループ毎のキューカウンタについては、
キューの上限値のみを設定し、当該上限値については、前記アクセスユニット毎のキューカウンタの上限値と同様の判断処理を行い、
前記アクセスユニット毎のキューカウンタと同様のカウント操作を行うことを特徴とする請求項１乃至４の何れかに記載のメモリ管理装置。
【請求項６】
書込みが要求されたデータをデータメモリに書き込むと共に、読み出しが要求されたデータを前記データメモリより読み出して出力する場合に、前記データメモリの使用領域と空き領域とをリンクリストメモリを使用して管理するメモリ管理方法において、
前記データメモリに対してデータの書込み及び読み出しを行う複数のアクセスユニットが夫々前記データメモリを使用する領域に制限を設けることで、前記複数のアクセスユニットの使用領域が常に確保することを特徴とするメモリ管理方法。
【請求項７】
前記複数のアクセスユニットが、夫々前記データメモリを使用している領域の先頭アドレス，末尾アドレスが格納されるキュー先頭レジスタ及びキュー末尾レジスタと、
これら複数のアクセスユニットが、夫々前記データメモリの領域を使用しているサイズをカウントするためのキューカウンタと、
前記空き領域の先頭アドレス及び末尾アドレスが格納されるIdle先頭レジスタ及びIdle末尾レジスタと、
前記空き領域のサイズをカウントするためのIdleカウンタと、
前記複数のキューカウンタについて夫々キューの上限値，及びキューの最小限確保数に対応する下限値を設定することで、前記Idleカウンタの値より、各キューカウンタにおけるカウンタ値が前記下限値より大きい場合の両者の差分を全て合計して減算した値が格納される仮想Idleカウンタとを使用し、
前記複数のアクセスユニットの何れかによる書込み要求が発生した場合に、
前記アクセスユニットに対応するキューカウンタが上限値以上、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタの値が「０」の場合は、前記データメモリに対する書込みを禁止し、
前記アクセスユニットに対応するキューカウンタが下限値未満の場合、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタが「０」でない場合は当該カウンタをデクリメントしてから、前記Idle先頭レジスタが示すアドレスにデータを書込み、
前記キューカウンタが「０」でない場合は、前記Idle先頭レジスタのアドレス値を、前記アクセスユニットのキュー末尾レジスタが示す前記リンクリストメモリのアドレスに書込み、前記キューカウンタが「０」の場合は、前記アドレス値を、前記アクセスユニットのキュー先頭レジスタに書込み、
前記アクセスユニットのキュー末尾レジスタに、前記Idle先頭レジスタの内容を書き込んで、前記アクセスユニットのキューカウンタをインクリメントすると共に、前記Idle先頭レジスタが示す前記リンクリストメモリのアドレスからデータを読み出して、前記データを前記Idle先頭レジスタに書き込んで、前記Idleカウンタをデクリメントすることを特徴とする請求項６記載のメモリ管理方法。
【請求項８】
前記複数のアクセスユニットが、夫々前記データメモリを使用している領域の先頭アドレス，末尾アドレスが格納されるキュー先頭レジスタ及びキュー末尾レジスタと、
これら複数のアクセスユニットが、夫々前記データメモリの領域を使用しているサイズをカウントするためのキューカウンタと、
前記空き領域の先頭アドレス及び末尾アドレスが格納されるIdle先頭レジスタ及びIdle末尾レジスタと、
前記空き領域のサイズをカウントするためのIdleカウンタと、
前記複数のキューカウンタについて夫々キューの上限値，及びキューの最小限確保数に対応する下限値を設定することで、前記Idleカウンタの値より各キューカウンタにおけるカウンタ値が前記下限値より大きい場合の両者の差分を全て合計して減算した値が格納される仮想Idleカウンタとを使用し、
前記複数のアクセスユニットの何れかによる書込み要求が発生した場合に、
前記アクセスユニットに対応するキューカウンタが上限値以上、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタの値が「０」の場合は、当該ユニットの使用領域のキュー先頭レジスタが示すアドレスにデータを書込み、前記キュー先頭レジスタのアドレス値をキュー末尾レジスタが示す前記リンクリストメモリのアドレスとキュー末尾レジスタに書き込み、前記アドレス値が示す前記リンクリストメモリのアドレスからデータを読み出して、前記データを前記キュー先頭アドレスへ書き込み、
前記アクセスユニットに対応するキューカウンタが下限値未満の場合、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ前記仮想Idleカウンタが「０」でない場合は当該カウンタをデクリメントしてから、前記Idle先頭レジスタが示すアドレスにデータを書込み、
前記キューカウンタが「０」でない場合は、前記Idle先頭レジスタのアドレス値を、前記アクセスユニットのキュー末尾レジスタが示す前記リンクリストメモリのアドレスに書込み、前記キューカウンタが「０」の場合は、前記アドレス値を、前記アクセスユニットのキュー先頭レジスタに書込み、
前記アクセスユニットのキュー末尾レジスタに、前記Idle先頭レジスタの内容を書き込んで、前記アクセスユニットのキューカウンタをインクリメントすると共に、前記Idle先頭レジスタが示す前記リンクリストメモリのアドレスからデータを読み出して、前記データを前記Idle先頭レジスタに書き込んで、前記Idleカウンタをデクリメントすることを特徴とする請求項６記載のメモリ管理方法。
【請求項９】
前記複数のアクセスユニットの何れかによる読出し要求が発生した場合に、
前記アクセスユニットに対応するキューカウンタが「０」の場合は、前記データメモリからのデータ読み出しを禁止し、
前記アクセスユニットに対応するキューカウンタが「０」でない場合は、前記アクセスユニットのキュー先頭レジスタが示す前記データメモリのアドレスからデータを読み出し、
前記Idleカウンタの値が「０」でない場合は、前記Idle末尾レジスタが示す前記リンクリストメモリのアドレスと前記Idle末尾レジスタに、前記アクセスユニットのキュー先頭レジスタの内容を書込んで、前記Idleカウンタをインクリメントし、
前記カウンタの値が「０」の場合は、前記Idle先頭レジスタ及び前記Idle末尾レジスタに、前記アクセスユニットのキュー先頭レジスタの内容を書込んで、前記Idleカウンタをインクリメントし、
前記アクセスユニットのキュー先頭レジスタが示す前記リンクリストメモリのアドレスからデータを読出して、そのデータを前記キュー先頭レジスタに書き込んで前記アクセスユニットのキューカウンタをデクリメントし、
前記アクセスユニットのキューカウンタが下限値以上となった場合は、仮想Idleカウンタをインクリメントすることを特徴とする請求項７または８記載のメモリ管理方法。
【請求項１０】
前記複数のアクセスユニットを、複数のアクセスグループに分けて、各グループ毎にキューカウンタを使用し、
前記グループ毎のキューカウンタについては、
キューの上限値のみを設定し、当該上限値については、前記アクセスユニット毎のキューカウンタの上限値と同様の判断処理を行い、
前記アクセスユニット毎のキューカウンタと同様のカウント操作を行うことを特徴とする請求項６乃至９の何れかに記載のメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書込みが要求されたデータをデータメモリに書き込むと共に、読み出しが要求されたデータをデータメモリより読み出して出力する場合に、データメモリの使用領域と空き領域とをリンクリストメモリを使用して管理する装置及び方法に関する。
【背景技術】
【０００２】
例えば、通信などのアプリケーションにおいて、１つのデータメモリに対して複数のパケットによるデータの入力要求や出力要求が発行され、データメモリを各パケットに対応した複数の領域に分けて使用する場合に、リンクリストメモリを用いて領域管理を行い、データメモリの空き領域を、極力効率的に使用する管理方式がある（例えば、特許文献１参照）。
【特許文献１】特開２０００−２００２１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上記のようなリンクリストを用いた管理方式では、複数の入力元より入力されるデータをデータメモリに時系列的に書き込んで行くと、特定の入力元がメモリ領域の殆どを使用する結果、その他の入力元がデータメモリを使用する余地がなくなってしまうという問題がある。
本発明は上記事情に鑑みて成されたものであり、その目的は、複数のアクセスユニットが１つのデータメモリを使用する場合に、各ユニットの使用領域を確実に用意することができるメモリ管理装置及びメモリ管理方法を提供することにある。
【課題を解決するための手段】
【０００４】
請求項１記載のメモリ管理装置によれば、データメモリの使用領域と空き領域とをリンクリストメモリを使用して管理する場合に、複数のアクセスユニットが夫々データメモリを使用する領域に制限を設け、各アクセスユニットの使用領域が常に確保されるように構成するので、従来とは異なり、特定のユニットがデータメモリを独占的に使用する状態となることは回避される。
【０００５】
請求項２記載のメモリ管理装置によれば、各アクセスユニットのキューカウンタに下限値を設定し、空き領域数を示すIdleカウンタより、キューカウンタのカウンタ値が前記下限値より大きい場合の両者の差分を全て合計したものを減じた仮想Idleカウンタを使用して空き領域を管理することで、各ユニットの使用領域は、少なくとも下限値分は確保されるようになる。
そして、書込み制御手段は、複数のアクセスユニットの何れかによる書込み要求が発生した場合（書込みユニット）、当該ユニットのキューカウンタが上限値以上、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ仮想Idleカウンタの値が「０」の場合は、データメモリに対する書込みを禁止する。即ち、キューカウンタが上限値未満であっても、仮想Idleカウンタ値が「０」であれば、その時点の空き領域は、他のユニットの使用領域の下限を確保すると実質的に空きが無い状態にある。従って、この場合もデータメモリに対する書込みを禁止する。
【０００６】
また、書込みユニットのキューカウンタが下限値未満の場合、または、前記カウンタが上限値未満で且つ下限値以上であり且つ仮想Idleカウンタが「０」でない場合は当該カウンタをデクリメントしてから、Idle先頭レジスタが示すアドレスにデータを書き込む。即ち、キューカウンタが下限値未満であれば、書込みユニットの使用領域には確実に空きがあることを示すので無条件に書込みが可能である。また、キューカウンタが下限値以上であっても、仮想Idleカウンタが「０」でなければ、その他のユニットが使用する下限を確保した上で空き領域が存在することを示す。従って、（領域を１つ使用するので）仮想Idleカウンタをデクリメントして、Idle先頭レジスタが示すアドレスにデータを書き込むことができる。
【０００７】
そして、上記の書込み処理を行った後、書込みユニットのキューカウンタが「０」でなければ、Idle先頭レジスタのアドレス値を当該ユニットのキュー末尾レジスタが示すリンクリストメモリのアドレスに書き込む。即ち、上記の書込み処理を行った結果、空き領域の先頭は、書込みユニットの使用領域の末尾となるからである。また、書込みユニットのキューカウンタが「０」の場合は、当該ユニットの使用領域が全く無いことを示すので、空き領域の先頭アドレスを当該ユニットのキュー先頭レジスタに書き込んで、当該使用領域の先頭を設定する。
【０００８】
更に、書込みユニットのキュー末尾レジスタに、Idle先頭レジスタの内容（空き領域の先頭アドレス）を書込み、（領域を１つ使用したので）当該ユニットのキューカウンタをインクリメントし、Idle先頭レジスタが示すリンクリストメモリのアドレスからデータ（即ち、現時点の空き領域の先頭アドレス）を読み出すと、そのデータをIdle先頭レジスタに書き込んで、（空き領域が１つ減ったので）Idleカウンタをデクリメントする。
以上のようにして、各ユニットの使用領域を確保しつつ、データメモリに対する書込み制御を行うことができる。そして、各ユニットの使用領域に上限値と下限値とを設定してデータメモリを管理するので、下限値により各ユニットの最小使用数を確保した上で、上限値を柔軟に(即ち、上限値のトータルがデータメモリの容量を超えても良い)設定することが可能となる。
【０００９】
請求項３記載のメモリ管理装置によれば、書込み制御手段は、書込みユニットによる書込み要求が発生した場合、当該ユニットのキューカウンタが上限値以上、または、前記キューカウンタが上限値未満で且つ下限値以上であり且つ仮想Idleカウンタの値が「０」の場合は、当該ユニットの使用領域の先頭アドレスにデータを書き込む。即ち、請求項２においては、同様のケースでデータメモリに対する書込みを禁止したが、請求項３では、使用領域の先頭アドレス，即ち、最も古いデータの上に新たなデータを上書きし、キュー先頭レジスタのアドレス値をキュー末尾レジスタが示すリンクリストメモリのアドレスとキュー末尾レジスタに書き込み、キュー先頭レジスタのアドレス値が示すリンクリストメモリのアドレスからデータを読み出して、そのデータをキュー先頭アドレスに書き込み、最新のデータとして管理する。従って、最新のデータを喪失することなく、データメモリに記憶させることができる。
【００１０】
請求項４記載のメモリ管理装置によれば、読出し制御手段は、複数のアクセスユニットの何れかによる読出し要求が発生した場合に（読出しユニット）、当該ユニットのキューカウンタが「０」の場合はデータメモリからのデータ読み出しを禁止する。即ち、この場合、読出し対象となるデータが存在しないからである。一方、前記キューカウンタが「０」でない場合は、読出しユニットのキュー先頭レジスタが示すデータメモリのアドレス（即ち、使用領域の先頭アドレス）からデータを読み出す。尚、一度読み出されたデータは、その時点でデータメモリに記憶保持する必要がなくなり、上書きが許可されることが前提となっている。
【００１１】
そして、上記の処理の後、Idleカウンタの値が「０」でない場合は、Idle末尾レジスタが示すリンクリストメモリのアドレスとIdle末尾レジスタに、読出しユニットのキュー先頭レジスタの内容を書込む。また、使用領域が１つ開放されたのでIdleカウンタをインクリメントする。
一方、Idleカウンタの値が「０」の場合は、使用領域の空きがないので、Idle先頭レジスタ及びIdle末尾レジスタに、読出しユニットのキュー先頭レジスタの内容を書込んでから（空き領域の先頭を再度初期設定する）Idleカウンタをインクリメントする。
【００１２】
更に、読出しユニットのキュー先頭レジスタが示すリンクリストメモリのアドレスからデータを読出して、そのデータをキュー先頭レジスタに書込み、使用領域が１つ開放されたので当該ユニットのキューカウンタをデクリメントする。加えて、読出しユニットのキューカウンタが下限値以上であれば、実質的な空き領域が１つ増えるので、仮想Idleカウンタをインクリメントする。
以上のように制御することで、各ユニットの使用領域からデータの読み出しを適切に行なうことができる。
【００１３】
請求項５記載のメモリ管理装置によれば、複数のアクセスユニットを、複数のアクセスグループに分けて各グループ毎にキューカウンタを設け、それらのキューカウンタについては、キューの上限値のみを設定し、制御手段は、当該上限値についてはアクセスユニット毎のキューカウンタの上限値と同様の判断処理を行うと共に、各グループ毎にキューカウンタについて、アクセスユニット毎のキューカウンタと同様のカウント操作を行う。斯様に構成すれば、各グループ毎に使用領域の上限を設定することで、アプリケーションに応じて上限をより多様に設定することができる。
【発明を実施するための最良の形態】
【００１４】
（第１実施例）
以下、本発明の第１実施例について図１ないし図６を参照して説明する。図１は、本発明のメモリ管理装置を含むデータ入出力システムの構成を示すものである。斯様なシステムは、例えば、通信データを送受信する装置などに使用される。データ入出力システム１はデータメモリ２を備えており、そのデータメモリ２を、３つのポートＰ０〜Ｐ２（アクセスユニット）が共有してデータの書込み及び読み出しを行うようになっている。そして、データメモリ２については、使用領域及び空き領域の管理をリンクリスト方式により行うため、リンクリストメモリ３が用意されている。
【００１５】
ポートＰ０〜Ｐ２は、リクエスト調停部４並びに制御部（読出し制御手段，書込み制御手段）５を介してデータメモリ２にアクセスを行う。ポートＰ０〜Ｐ２がリクエスト調停部４に対してWriteリクエスト（書込み要求）、Readリクエスト（読出し要求）を出力すると、リクエスト調停部４はその要求を調停して要求を許可する。そして、要求が許可されたポートＰ０〜Ｐ２の何れかは、Writeポート，Readポートを出力して、Writeアクセス，Readアクセスを実行する。
リクエスト調停部４は、制御部５に対して、起動信号，Ｒ／Ｗ制御信号，アクセスを実行するポートを示すポート信号を出力する。制御部５は、シーケンサ（ステートマシン）や演算器を備えており、アドレス，セレクト制御やデータ制御を行う。
【００１６】
使用領域管理部（読出し制御手段，書込み制御手段）６は、ポートＰ０〜Ｐ２がデータメモリ２を使用するに当たり、各使用領域を管理するためのレジスタ群やカウンタなどで構成される。以下、使用領域管理部６における管理パラメータについて説明する。
・キュー先頭アドレス  ：使用領域の先頭アドレス
・キュー末尾アドレス  ：使用領域の末尾アドレス
・キューカウンタ：使用領域を実際に使用している（データを書込んでいる）サイズ
・キュー上限数  ：使用領域の上限数（ユーザ設定による固定値）
・キュー下限数  ：使用領域の下限数（ユーザ設定による固定値）
即ち、各使用領域について下限数（下限値）を設定することで、各ポートＰ０〜Ｐ２には、夫々の使用領域の最小限数が確保される。また、下限数とは別に上限数（上限値）を設定し、使用領域の最大数を制限する。ここで、「キュー」とは「使用領域」と同義である。
【００１７】
そして、以下の各フラグは、キューカウンタの状態に応じて使用領域管理部６により自動的にセットされる。
・キューFULLフラグ      ：キューカウンタが上限数以上になるとセット
・キューOV＿MINフラグ  ：キューカウンタが下限数以上になるとセット
・キューEMPTYフラグ    ：キューカウンタが「０」になるとセット
【００１８】
一方、未使用領域管理部（読出し制御手段，書込み制御手段）７は、データメモリ２の未使用領域（空き領域）を管理するためのレジスタ群である。以下、未使用領域管理部７における管理パラメータについて説明する。
・Idle先頭アドレス  ：未使用領域の先頭アドレス
・Idle末尾アドレス  ：未使用領域の末尾アドレス
・Idleカウンタ      ：未使用領域のサイズ
また、Idleカウンタとは別に、仮想Idleカウンタが用意されている。仮想Idleカウンタは、Idleカウンタのカウンタ値から、各ポートＰ０〜Ｐ２について、キューカウンタのカウンタ値がキュー下限数より大きい場合の両者の差分を全てのポートにつき合計し、その合計値を減じた値が未使用領域管理部７によりセットされるカウンタである。ここで「Idle」とは「未使用領域」と同義である。
【００１９】
即ち、上述のように、各使用領域について下限数を設定することで、各ポートＰ０〜Ｐ２の使用領域を確保するので、何れかのポートがデータメモリ２に書込みを行う場合に、自身の使用領域について見かけ上の空き領域があるとしても、仮想Idleカウンタが「０」の場合には（仮想Idle＿EMPTYフラグがセットされる）、他のポートの使用領域について下限数を確保するため書込みを禁止する。
【００２０】
そして、制御部５は、使用領域管理部６，未使用領域管理部７の各レジスタ，カウンタ，フラグの状態を参照しつつ、リンクリストメモリ３に、使用領域，未使用領域夫々のリンクリストアドレスを書き込むことで、データメモリ２をリンクリスト方式によって管理する。また、制御部５は、データメモリ２に対する書込み処理，読出し処理が終了すると、Writeアクノリッジ，Readアクノリッジ信号を外部に出力する。
以上の構成において、データ入出力システム１よりリクエスト調停部４を除いたものがメモリ管理装置８を構成している。尚、リンクリストを用いた管理方式の基本的な部分については、特許文献１に開示されているような周知技術と同様である。
【００２１】
次に、本実施例の作用について図２ないし図６も参照して説明する。
＜全体処理＞
図３は、制御部５を中心に実行される処理内容の全体を示すフローチャートである。制御部５は、リンクリストメモリ３，使用領域管理部６及び未使用領域管理部７に対して図４に示す初期設定を行なう（ステップＭ１）。それから、ポートＰ０〜Ｐ２の何れかによってWriteリクエスト，Readリクエストの何れかが発行されるまで（ステップＭ３，Ｍ６）待機する（ステップＭ２，Idle状態）。
そして、Writeリクエストがあると（ステップＭ３，「ＹＥＳ」）、データメモリ２の使用領域（バッファ）に空きがあるか否かを判定し（ステップＭ４）空きがあればWrite処理を実行する（ステップＭ５）。一方、Readリクエストがあると（ステップＭ６，「ＹＥＳ」）、データメモリ２の使用領域に読み出し対象データがあるか否かを判定し（ステップＭ７）対象データがあればRead処理を実行する（ステップＭ８）。
【００２２】
＜初期設定処理＞
次に、ステップＭ１の「初期設定」処理について、図４を参照して説明する。制御部５は、先ず、リンクリストメモリ３の全アドレスに、「アドレス＋１」のデータを書き込む（ステップＳ１）。それから、各ポートＰ０〜Ｐ２の制御レジスタを設定する（ステップＳ２）。キューカウンタはゼロクリアし、キュー上限数，下限数は、ユーザの仕様に応じて設定する。尚、キュー先頭アドレス，末尾アドレスは処理の実行過程で決まるため、初期設定は不要である。
【００２３】
続いて、使用領域管理部６は、各ポートＰ０〜Ｐ２のキューカウンタの状態に応じて、FULLフラグ， OV＿MINフラグ， EMPTYフラグを初期設定する（ステップＳ３）。この場合、キューEMPTYフラグだけがセットされる。尚、続くステップＳ４，Ｓ５は、第１実施例を拡張した第２実施例において実行される処理であり、第１実施例では使用しないため、その説明は第２実施例で行う。
【００２４】
次に、制御部５は、未使用領域管理部７のIdle先頭アドレス，末尾アドレスを、リンクリストメモリ（バッファ）３の先頭アドレス，末尾アドレスに設定すると共に、Idleカウンタを、リンクリストメモリ３のサイズに設定する（この時点では、全領域が未使用であるため，ステップＳ６)。それから、仮想Idleカウンタの値を、上述のように初期設定し（ステップＳ７）、当該カウンタの状態を仮想Idle ＿EMPTYフラグに反映させる（ステップＳ８）。
【００２５】
＜Write制御＞
次に、ステップＭ４，Ｍ５に相当するWrite制御について図５を参照して説明する。先ず、書込みを行うのがＰ０〜Ｐ２の何れのポートであるかを判別すると（ステップＷ１）、そのポート（書込みポートと称す）のキューＦＵＬＬフラグが「０」か否かを判断する（ステップＷ２）。キューＦＵＬＬフラグが「１」であれば（ＮＯ）、書込みポートの使用領域には全てデータが書き込まれており、且つ、それらは未だ読み出されていない状態にある。従って、データメモリ２に書込みは行わず、処理を終了する。
【００２６】
一方、キューＦＵＬＬフラグが「０」であれば（ＹＥＳ）、書込みポートの使用領域は上限に達していないので、続いてキューOV＿MINフラグが「０」か否かを判断する（ステップＷ３）。キューOV＿MINフラグが「０」であれば（ＹＥＳ）、書込みポートの使用領域は未だ下限に達していないことを示すので、無条件で書込みが可能となる。従って、この時点でIdle先頭アドレスレジスタが示しているリンクリストメモリ３のアドレス（最初の書込みは、メモリ３の先頭アドレス）にデータを書き込む（ステップＷ４）。
【００２７】
また、ステップＷ３において、キューOV＿MINフラグが「１」であれば（ＮＯ）、書込みポートの使用領域は下限を超えている。そこで、ステップＷ９に移行し、仮想Idle ＿EMPTYフラグが「０」か否かを判断する。当該フラグが「１」であれば（ＮＯ）、他のポートの下限を確保した状態で、データメモリ２に空き領域はないことを示すので、書込みは行わず処理を終了する。一方、上記フラグが「０」であれば（ＹＥＳ）データメモリ２に空き領域があるので、ステップＷ４に移行して書込みを行う。尚、ステップＷ２，Ｗ３，Ｗ９，Ｗ１０の処理が、図３におけるステップＭ４に対応する。
【００２８】
ステップＷ４においてデータを書き込むと、続いて、書込みポートのキューカウンタが「０」か否かを判断する（ステップＷ５）。当該カウンタが「０」でなければ（ＮＯ）、使用領域に書き込まれているデータが、その時点で全て読み出されていないことを示す。
但し、最初に書込みが行われた時点では、初期設定によりキューカウンタは「０」となっているため「ＹＥＳ」と判断し、キュー先頭アドレスレジスタに、Idle先頭アドレスレジスタの値を書き込む（ステップＷ１１）。それから、当該レジスタの値を、キュー末尾アドレスレジスタにも書込み（データを１個だけ書き込んだ時点では、使用領域の先頭と末尾は同じ）、この時点で領域を１つ使用したのでキューカウンタをインクリメントする（ステップＷ７）。
【００２９】
尚、次回に同じ書込みポートが次のデータを書き込む場合には、ステップＷ５で（ＮＯ）と判断するので、ステップＷ６に移行し、キュー末尾アドレスレジスタが示すリンクリストメモリ３のアドレスに、Idle先頭アドレスレジスタの値を書き込む。そして、ステップＷ７に移行する。
続くステップＷ８では、キューカウンタの状態を各キュー（FULL，OV＿MIN，EMPTY）フラグに反映させる。それから、Idle先頭アドレスレジスタが示すリンクリストメモリ３のアドレスからデータを読出し、そのデータをIdle先頭アドレスレジスタに書き込むと共に、Idleカウンタをデクリメントする（ステップＷ１２）。最後に、仮想Idleカウンタの状態を、EMPTYフラグに反映させると（ステップＷ１３）処理を終了する。
【００３０】
上述した書込み制御については、ステップＷ２，Ｗ３，Ｗ９における各フラグの判定結果に基づく書込み処理の禁止と、その判定処理を行うためのステップＷ１０，Ｗ１３における仮想Idleカウンタに関する処理部分が新規な構成となっている。
【００３１】
＜Read制御＞
次に、図３のステップＭ７，Ｍ８に相当するRead制御について図６を参照して説明する。先ず、読み出しを行うのがＰ０〜Ｐ２の何れのポートであるかを判別すると（ステップＲ１）、そのポート（読出しポートと称す）のキューEMPTYフラグが「０」か否かを判断する（ステップＲ２）。即ち、キューEMPTYフラグが「１」にセットされていれば（ＮＯ）、読出しポートの使用領域にデータの書込みが全く行われておらず、読出し対象データが存在しないことを示す。従って、データの読み出しは行わず、処理を終了する。
【００３２】
一方、キューEMPTYフラグが「０」であれば（ステップＲ２，ＹＥＳ）読出し対象データが存在するので、キュー先頭アドレスレジスタが示すデータメモリ２のアドレスからデータを読み出す（ステップＲ３）。続いて、Idleカウンタが「０」か否かを判断するが（ステップＲ４）、「０」でなければ（ＮＯ）データメモリ２に空き領域が存在する。従って、Idle末尾アドレスレジスタが示すリンクリストメモリ３のアドレスに、読出しポートのキュー先頭アドレスレジスタの内容を書き込む（ステップＲ５）。即ち、空き領域の末尾を、ステップＲ３で読出しを行ったアドレスに更新する。
また、ステップＲ４においてIdleカウンタが「０」の場合は（ＹＥＳ）、データメモリ２に空き領域がないので、Idle先頭アドレスレジスタにキュー先頭アドレスレジスタの内容を書き込む（ステップＲ１２）。即ち、空き領域の先頭アドレスを、使用領域の先頭アドレスに更新する。
【００３３】
続いて、Idle末尾アドレスレジスタに、キュー先頭アドレスレジスタの内容を書き込む。即ち、この時点での使用領域の先頭アドレスが空き領域の末尾アドレスとなる。それから、データを読み出したことで使用領域を１つ開放したのでIdleカウンタをインクリメントする（ステップＲ６）。次に、キュー先頭アドレスレジスタが示すリンクリストメモリ３のアドレスからデータを読み出すと、そのデータをキュー先頭アドレスレジスタに書き込み、キューカウンタをデクリメントする（ステップＲ７）。
【００３４】
次に、ステップＷ８と同様に、キューカウンタの状態を各キュー（FULL，OV＿MIN，EMPTY）フラグに反映させると（ステップＲ８）、キューOV＿MINフラグが「０」か否かを判定する（ステップＲ９）。当該フラグが「１」であれば（ＮＯ）、使用領域を１つ開放した時点で、読出しポートの割当て領域は下限以上に使用されている。従って、仮想Idleカウンタをインクリメントして（ステップＲ１０）、当該カウンタの状態をEMPTYフラグに反映させると（ステップＲ１１）処理を終了する（尚、ステップＲ１１はパスしても良い）。一方、ステップＲ９においてキューOV＿MINフラグが「０」であれば（ＹＥＳ）、読出しポートの割当て領域は下限に達するまで使用されていないので、そのままステップＲ１１に移行する。
【００３５】
ここで、図２は、上記のWrite制御，Read制御が行われた場合のデータメモリ２，リンクリストメモリ３のイメージと、各レジスタやフラグの変化状態の一例を示す。初期状態が（ａ）であり、データメモリ２（サイズは８フレームと仮定）の空き領域はアドレス４，７となっている。ポートＰ０のデータ配置は、
データＰ０−０→アドレス０
データＰ０−１→アドレス１
データＰ０−２→アドレス５
であり、使用領域の先頭アドレスは「０」、末尾アドレスは「５」、キューカウンタの値は「３」となっている。また、リンクリストメモリ３におけるアドレスリンクは、
アドレス：０→１→５→（６）
となっている。但し、最後のアドレス（６）はポートＰ０の使用領域を意味しない。
【００３６】
また、各ポートＰ０，Ｐ１，Ｐ２の使用領域の上限は各「４」であり、それらのトータルはデータメモリ２のサイズを超えているが、下限は「１」，「１」，「２」に設定されており、各ポートには少なくともそれらの領域が確保されている。そして、データを書き込んだ数が上限値に達しなくとも、仮想Idleカウンタの状態に基づく制御により書込みが制限される場合がある。
【００３７】
上記の状態(ａ）から、（ｂ）において、ポートＰ０が次にデータＰ０−３を書き込む場合、データメモリ２の空き領域の先頭アドレス「４」（Idle０）に書き込む。その結果、リンクリストメモリ３のアドレス５にはアドレス４が書き込まれ、リンクリストメモリ３におけるアドレスリンクは、
アドレス：０→１→５→４→（７）
に変化する。
また、使用領域の末尾アドレスは「４」、キューカウンタの値は「４」となり、上限に達したため、キューFULLフラグがセットされる。そして、Idle先頭アドレスは「７」に、Idleカウンタの値は「１」に、仮想Idleカウンタの値は「０」に減少したので、仮想Idle＿EMPTYフラグがセットされる。
【００３８】
次に状態（ｂ）から、（ｃ）において、ポートＰ２がデータＰ２−０を読み出す場合、データメモリ２のキュー先頭アドレス２からデータＰ２−０が読み出される。すると、アドレス２が空き領域となり、ポートＰ２の使用領域はなくなる。即ち、キューカウンタの値は「０」となってキューEMPTYフラグがセットされる。そして、Idle末尾アドレスは「２」となり、Idleカウンタはインクリメントされて「２」となる。この場合、Read制御に従ってポートＰ２のキュー先頭アドレスは(４)に更新されるが、使用領域は存在しないため実質的な意味はない。
【００３９】
以上のように本実施例によれば、データ入出力システム１において、データメモリ２の使用領域と空き領域とをリンクリストメモリ３を使用して管理する場合に、ポートＰ０〜Ｐ２が夫々データメモリ２を使用する領域に制限を設け、各ポートＰ０〜Ｐ２の使用領域が常に確保されるようにメモリ管理装置８を構成したので、従来とは異なり、特定のポートがデータメモリ２を独占的に使用する状態となることは回避される。
具体的には、各ポートＰ０〜Ｐ２のキューカウンタに下限数を設定し、空き領域数を示すIdleカウンタの値より、各キューカウンタにおけるカウンタ値が下限数よりも大きい場合の両者の差分を合計して減じた仮想Idleカウンタを使用して空き領域を管理することで、各ユニットの使用領域は、少なくとも下限数分は確保される。
【００４０】
そして、制御部５は、ポートＰ０〜Ｐ２の何れかによる書込み要求が発生した場合、書込みポートのキューカウンタが上限数以上、または上限数未満で且つ下限数以上であり且つ仮想Idleカウンタの値が「０」の場合は、データメモリ２に対する書込みを禁止する。即ち、キューカウンタが上限数未満であっても、他のポートの使用領域の下限を確保する必要がある場合は書込みを禁止する。
また、書込みポートのキューカウンタが下限数未満の場合、または上限数未満で且つ下限数以上であり且つ仮想Idleカウンタが「０」でない場合は当該カウンタをデクリメントし、Idle先頭レジスタが示すアドレスにデータを書き込む。即ち、書込みポートの使用領域に確実に空きがある場合、また、その他のポートが使用する下限を確保した上で空き領域が存在する場合は、空き領域の先頭アドレスにデータを書き込むことができる。
【００４１】
そして、上記のように書込み処理を行なうと空き領域の先頭は書込みポートの使用領域の末尾となるので、キューカウンタが「０」でなければ、Idle先頭レジスタのアドレス値を当該ポートのキュー末尾レジスタが示すリンクリストメモリ３のアドレスに書き込む。また、キューカウンタが「０」の場合は使用領域に先頭がないので、空き領域の先頭アドレスを書込みポートのキュー先頭レジスタに書き込んで、使用領域の先頭を空き領域の先頭として、以降は、使用領域の先頭からデータを上書きすることができる。
【００４２】
更に、書込みポートのキュー末尾レジスタにIdle先頭レジスタの内容を書き込んでキューカウンタをインクリメントし、Idle先頭レジスタが示すリンクリストメモリ３のアドレスからデータを読み出し、Idle先頭レジスタに書き込むとIdleカウンタをデクリメントする。従って、各ポートの使用領域を確保しつつ書込み制御を行うことができる。そして、各ポートの使用領域について、下限数により最小使用数を確保した上で上限数を柔軟に設定することができる。
また、制御部５は、ポートＰ０〜Ｐ２の何れかによる読出し要求が発生した場合に、読み出しポートのキューカウンタが「０」の場合はデータ読み出しを禁止し、キューカウンタが「０」でない場合は、キュー先頭レジスタが示すデータメモリ２のアドレスからデータを読み出す。
【００４３】
そして、上記の処理の後、Idleカウンタの値が「０」でない場合は、Idle末尾レジスタが示すリンクリストメモリ３のアドレスとIdle末尾レジスタに、キュー先頭レジスタの内容を書込んでIdleカウンタをインクリメントする。また、Idleカウンタの値が「０」の場合は、Idle先頭レジスタ及びIdle末尾レジスタに、キュー先頭レジスタの内容を書込んでからIdleカウンタをインクリメントする。更に、キュー先頭レジスタが示すリンクリストメモリ３のアドレスからデータを読出してキュー先頭レジスタに書き込んでキューカウンタをデクリメントし、キューカウンタが下限数以上であれば仮想Idleカウンタをインクリメントする。従って、各ポートの使用領域からデータの読み出しを適切に行なうことができる。
【００４４】
（第２実施例）
図７ないし図１２は本発明の第２実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分について説明する。第２実施例のデータ入出力システム１１は、データメモリ２に対して書込み及び読み出しを行なうユニット数を増やして構成されており、リクエスト調停部４は１２に、制御部５は１３に、使用領域管理部６は１４に、メモリ管理装置８は１５に夫々置き換えられている。
【００４５】
ポートはＰ０〜Ｐ７の８つがあり、各ポートについてHigh，Mid，Lowの３つの優先度（クラス）が設定されており、アクセスユニット数は「２４」となっている。そして、ポートＰ０における優先度High，Mid，Lowの各ユニットは、Ｐ０グループと称す。尚、これらの優先度は、本発明のメモリ管理方式とは直接の関係がなく、各ポートＰ０〜Ｐ７の内部でデータを読み書きするための優先順位を示しており、その優先順位に基づく調整は別の構成部分によって行なわれる。
【００４６】
使用領域管理部１４においては、各ユニット毎に、先頭／末尾アドレスレジスタ，キューカウンタ，キュー上限／下限数，キュー（FULL，OV＿MIN，EMPTY）フラグが用意されていると共に、各ポートＰ０〜Ｐ７毎にも、キューカウンタ，キュー上限数，キューFULLフラグが用意されている（ポート総和管理部）。また、各ポートＰ０〜Ｐ７におけるHigh，Mid，Lowの優先度についても縦の関係でグループ化されており、各グループ毎にキューカウンタ，キュー上限数，キューFULLフラグが用意されている（優先度総和管理部）。尚、グループ毎のカウンタや上限数は、グループに属するユニットのカウンタ値，上限数の総和となる。
【００４７】
次に、第２実施例の作用について図８乃至図１２も参照して説明する。尚、第２実施例の場合、図４に示す初期設定処理において、各ポート総和管理部及び各優先度総和管理部についても、キューカウンタの初期設定（＝０），キュー上限数の設定（ユーザの仕様による）を行なうと共に（ステップＳ４）、キューカウンタの状態をキューFULLフラグに反映させる処理を行なう（ステップＳ５）。
【００４８】
また、図８，図９は、第１実施例の図５，図６相当図である。基本的な処理は第１実施例と同様であるが、ステップ番号に“’”を付した処理については、アクセスを行ったユニットを、当該ユニットが属するグループと共に特定する処理が付加されたものを示している。例えば、図８のステップＷ１’では、書込み要求を行なったユニットが属しているのが、Ｐ０〜Ｐ７の何れのグループであり（何れのポート総和管理部に属し）、High，Mid，Lowの何れの優先度総和管理部に属するかを判別しており、ステップＷ２’では、書込みユニットが属するグループ，優先度管理部，ポート総和管理部の全てのキューFULLフラグが「０」か否かを判断する。
また、ステップＷ８’においては、対象グループのカウンタ状態を各キューフラグに反映させると共に、対象のポート総和管理部，優先度総和管理部のカウンタ状態も、キューFULLフラグに反映させている。そして、図９に示すRead制御においても、同様の変更が加えられている。
【００４９】
図１０，図１１は、以上のように処理を行う結果、各アクセスユニットがデータメモリ２の領域を分割して使用する例を概念的に説明するものである。尚、説明を簡単にするため、ポート数をＰ０〜Ｐ３の４つとして計１２のユニットがある場合を示す。また、データメモリ２のサイズは、５１２フレームであるとする。
【００５０】
図１１（ａ）においては、各グループのキュー単位，出力ポート単位，クラス単位の何れについても上限数を「５１２」に設定した場合であり、上限数の設定条件が最も緩くなっている。即ち、各ユニットについては、キューの下限数が確保されている以外は、その他のユニットの何れか１つが仮想Idleカウンタで示される空き領域の最大値（＜５１２）まで使用することが可能である。また、各ポートＰ０〜Ｐ３についても、各クラスHigh，Mid，Lowについても、同様の設定である。
【００５１】
図１１（ｂ）においては、（ａ）に対して、各グループのキュー単位の上限を、クラスHighは４２フレーム、クラスMid，Lowは４３フレームとして、各ポート毎に５１２フレームを等分した場合である。尚、ポート単位，クラス単位の上限が５１２フレームに設定されているが、実質的には（４２＋４３＋４３＝）１２８フレームが上限となっている。
【００５２】
図１１（ｃ）においては、ポート間で上限数に傾斜を付与して設定した場合である。即ち、ポートＰ０については各クラスの上限が６４フレーム，ポートＰ１，Ｐ２は同上限が夫々４８，３２フレームとなっている。そして、ポートＰ３については、クラス単位の上限設定がなく、ポート単位で上限が８０フレームに設定されている。
【００５３】
図１１（ｄ）においては、各ポートＰ０〜Ｐ３毎に上限を１２８フレームで設定して等分する。そして、キュー単位の上限設定は５０フレームとしておき、総和が１２８フレームとなる範囲内で制限する。
【００５４】
また、図１２は、図７に示すデータ入出力システム１１を備え、その周辺にポートＰ０〜Ｐ７の入出力制御を行う構成部分を加えたものを示しており、例えば、通信データ入出力装置のＩＣチップとして構成される。通信データ入出力装置２１は、８つのポートＰ０〜Ｐ７について、入力ポート２２，出力ポート２３が独立に存在する。即ち、入力ポート２２（０）を介して入力されたデータがデータメモリ２に書き込まれると、そのデータは出力ポート２３（０）により読み出されて外部に出力される。
【００５５】
入力ポート２２が、リクエスト信号を入力制御部２４に出力すると、入力制御部２４は、それらのリクエスト信号を調停し、マルチプレクサ２５及びWriteグループ設定部２６にポートセレクト信号を出力すると共に、データ入出力システム１１のリクエスト調停部１２に対して、Writeリクエスト信号を出力する。
入力制御部２４で選択された入力ポート２２のデータは、マルチプレクサ２５を介して優先度判定部２７に出力され、更にデータ入出力システム１１のデータメモリ２に出力される。各ポートについては、優先度High，Mid，Lowのグループが存在しており、ポート内においてそれらの内２つ以上がリクエストを出力した場合、ポート内で優先度が高いものが選択されている。そして、優先度判定部２７は、選択されたポートが出力したデータに付与されている優先度を判定すると、その判定結果をWriteグループ設定部２６に出力する。
【００５６】
Writeグループ設定部２６は、与えられたポート並びに優先度に基づいてWriteグループ（アクセスユニットの１つ）を設定し、リクエスト調停部１２に対して出力する。また、データ入出力システム１１の制御部１３が出力するWriteアクノリッジ信号は、入力制御部２４に与えられている。
【００５７】
一方、出力ポート２３が、リクエスト信号を自身に対応する出力優先度判定部２８並びに出力制御部２９に出力すると、出力優先度判定部２８は、上記リクエスト信号に付与されているポートグループの優先度を判定し、その判定結果を出力制御部２９に出力する。すると、出力制御部２９は、入力されたリクエスト信号並びに優先度に応じてReadグループ（アクセスユニットの１つ）を設定し、Readリクエスト信号と共にリクエスト調停部１２に対して出力する。
そして、データメモリ２より出力されたデータは、各出力ポート２３に出力されるようになっている。また、制御部１３が出力するReadアクノリッジ信号は、出力制御部２９に与えられ、出力制御部２９は、選択した出力ポートの１つにそのアクノリッジ信号を出力する。
【００５８】
以上のように第２実施例によれば、複数のポートＰ０〜Ｐ７について、優先度のクラスを３段階に設定したグループを持たせて、また、その３段階のクラスについてもアクセスグループに分けて各グループ毎にキューカウンタを設け、それらのキューカウンタについては上限数のみを設定し、制御部１３は、当該上限数についてはポートＰ０〜Ｐ７毎のキューカウンタの上限数と同様の判断処理を行うと共に、各グループ毎のキューカウンタについて、ポートＰ０〜Ｐ７のキューカウンタと同様のカウント操作を行う。従って、アプリケーションに応じて上限をより多様に設定することができる。
【００５９】
（第３実施例）
図１３は本発明の第３実施例を示すものであり、第１実施例と異なる部分について説明する。図１３は図５相当図である。第１実施例のWrite制御では、ステップＷ２，Ｗ９で「ＮＯ」と判断した場合に、データメモリ２に対する書込みを禁止したが、第３実施例では、上記のケースでステップＷ１４を実行し、書込みポートのキュー先頭アドレスレジスタが示すデータメモリ２のアドレスに入力データを書き込む。
【００６０】
即ち、ステップＷ２，Ｗ９で「ＮＯ」と判断するケースは、データメモリ２に空き領域が存在しないため、第１実施例では書込みを禁止したが、第３実施例では、書込みポートの使用領域の先頭アドレスが示す、未だ読み出されていないデータの内最も古いものに、最新の入力データを上書きする。それから、キュー先頭レジスタのアドレス値をキュー末尾レジスタが示すリンクリストメモリのアドレスとキュー末尾レジスタに書き込み（ステップＷ１５，Ｗ１６）、キュー先頭レジスタのアドレス値が示すリンクリストメモリのアドレスからデータを読み出して、そのデータをキュー先頭アドレスに書き込み（ステップＷ１７）、最新のデータとして管理する。従って、最新のデータを喪失することなく、データメモリに記憶させることができる。
【００６１】
本発明は上記し且つ図面に記載した実施例に限定されるものではなく、以下のような変形または拡張が可能である。
アクセスユニットの数は、個別の設計に応じて適宜変更すれば良い。
【図面の簡単な説明】
【００６２】
【図１】本発明の第１実施例であり、メモリ管理装置を含むデータ入出力システムの構成を示す図
【図２】データメモリ，リンクリストメモリのイメージと、各レジスタやフラグの変化状態の一例を示す図
【図３】処理内容の全体を示すフローチャート
【図４】図３におけるステップＭ１の初期設定処理の詳細を示すフローチャート
【図５】Write制御の詳細を示すフローチャート
【図６】Read制御の詳細を示すフローチャート
【図７】本発明の第２実施例を示す図１相当図
【図８】図５相当図
【図９】図６相当図
【図１０】各アクセスユニットがデータメモリの領域を分割して使用する例を概念的に説明する図（その１）
【図１１】図１０相当（その２）
【図１２】データ入出力システムを備えて構成される通信データ入出力装置の構成例を示す図
【図１３】本発明の第３実施例を示す図５相当図
【符号の説明】
【００６３】
図面中、２はデータメモリ、３はリンクリストメモリ、５は制御部（読出し制御手段，書込み制御手段）、６は使用領域管理部（読出し制御手段，書込み制御手段）、７は未使用領域管理部（読出し制御手段，書込み制御手段）、８はメモリ管理装置、１３は制御部（読出し制御手段，書込み制御手段）、１４は使用領域管理部（読出し制御手段，書込み制御手段）、１５はメモリ管理装置を示す。
【図１】
2008269561.tif 000003
【図２】
2008269561.tif 000004
【図３】
2008269561.tif 000005
【図４】
2008269561.tif 000006
【図５】
2008269561.tif 000007
【図６】
2008269561.tif 000008
【図７】
2008269561.tif 000009
【図８】
2008269561.tif 000010
【図９】
2008269561.tif 000011
【図１０】
2008269561.tif 000012
【図１１】
2008269561.tif 000013
【図１２】
2008269561.tif 000014
【図１３】
2008269561.tif 000015