(57)【要約】【課題】小規模な回路構成でチェーンメモリのチェーン構成を復旧すること。【解決手段】複数の領域に区切られたチェーンメモリを有する伝送装置に具備されるメモリコントローラは、前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶する管理メモリと、前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出する第１の合計部と前記管理メモリから読み出されたアドレスのエラーを検出するエラー検出部と、前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出する第２の合計部と、前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレス情報の訂正値を算出する算出部と、を備える。【選択図】図１７
2020004064.tif 000002
【特許請求の範囲】
【請求項１】
複数の領域に区切られたチェーンメモリを有する伝送装置に具備されるメモリコントローラであって、
前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶する管理メモリと、
前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出する第１の合計部と、
前記管理メモリから読み出されたアドレスのエラーを検出するエラー検出部と、
前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出する第２の合計部と、
前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する算出部と、
を備えるメモリコントローラ。
【請求項２】
前記算出部は、前記第１の合計値から前記第２の合計値を減算することにより前記訂正値を算出する請求項１記載のメモリコントローラ。
【請求項３】
第１の合計部は、前記管理メモリに記憶された前記複数のアドレスの合計値を算出することにより前記第１の合計値を算出する請求項１または２記載のメモリコントローラ。
【請求項４】
前記管理メモリに記憶された前記複数のアドレスが重複しないように管理する管理部をさらに備える請求項１乃至３のいずれか１項に記載のメモリコントローラ。
【請求項５】
前記管理部は、前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリのユーザのデータを記憶した最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶した先頭の領域を示すアドレスに設定する請求項４記載のメモリコントローラ。
【請求項６】
前記管理部は、前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリの前記ユーザのデータを記憶していない最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶していない先頭の領域を示すアドレスに設定する請求項４または５記載のメモリコントローラ。
【請求項７】
複数の領域に区切られたチェーンメモリを有する伝送装置に具備されるメモリコントローラが実行する制御方法であって
前記メモリコントローラが有する管理メモリが、前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶し、
前記メモリコントローラが有する第１の合計部が、前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出し、
前記メモリコントローラが有するエラー検出部が、前記管理メモリから読み出されたアドレスのエラーを検出し、
前記メモリコントローラが有する第２の合計部が、前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出し、
前記メモリコントローラが有する算出部が、前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する
制御方法。
【請求項８】
複数の領域に区切られたチェーンメモリを有するコンピュータに、
前記コンピュータが有する管理メモリに、前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶させ、
前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出し、
前記管理メモリから読み出されたアドレスのエラーを検出し、
前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出し、
前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、制御方法、およびプログラムに関する。
【背景技術】
【０００２】
受信したパケットを他の伝送装置に送信する際に、パケットを受信してから送信するまでの間、このパケットをバッファ（チェーンメモリ）に格納する伝送装置（例えば、スイッチなど）がある。
【０００３】
伝送装置において、バッファは所定サイズの領域に区切られ、領域を示すアドレスポインタをチェーンで繋いで管理する方式が用いられる。
【０００４】
伝送装置は、パケットを格納するバッファとは別に、該バッファにおけるデータ格納領域のアドレスを連結するチェーンとバッファの空き領域のアドレスを連結するチェーンとを管理するためチェーン管理メモリを有する。
【０００５】
チェーン管理メモリは、パケットを記憶したバッファの領域または空き領域の各アドレス対して、それぞれのアドレスに続く領域のアドレス（次アドレス）を記憶して、データ格納領域または空き領域のチェーンを構成する。
【０００６】
チェーン管理メモリにおいてリードエラーが発生した場合、次アドレスが不明となりチェーンが途切れてしまう。すなわち、チェーンメモリ構成を搭載した装置において、チェーンメモリのアドレス管理するチェーン管理メモリでリードエラーが発生するとチェーン構成が壊れる。そのため、チェーン構成を初期状態に戻して復旧させる方法が用いられる。その場合、チェーンメモリに格納しているパケットは廃棄されるという課題がある。
【０００７】
フレームを結合する際に誤りを検出することが出来る技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−２７８２４１号公報
【特許文献２】特開２０１０−１８２０８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
近年は、システムの高速化、大容量化、およびデバイス技術の発展と共に大容量メモリを実装する事が増えている。そのため、チェーン管理メモリを初期状態に戻す事により廃棄されるパケット容量も膨大となるため、初期状態に戻す事は大きな課題であり、初期状態に戻す事なく復旧させる事が求められている。この課題の解決を目的とし、特許文献１記載の技術が知られている。
【００１０】
しかしながら、特許文献１記載の技術では、伝送装置は、前段となるフレームを識別する前方識別子（Before Code）と次々フレームが格納されたアドレスを示す情報（Next2）を記憶するメモリを有する。よって、特許文献１記載の従来技術では、Before codeとNext2を記憶するメモリを追加しているためチェーン管理メモリの３倍のメモリ容量が必要となる。バッファ容量の要求は今後も増加することが予想され、その場合、従来技術のように３倍のメモリ容量を実装することは困難となる。
【００１１】
本発明は、小規模な回路構成でチェーンメモリのチェーン構成を復旧することを目的とする。
【課題を解決するための手段】
【００１２】
実施の形態のメモリコントローラは、複数の領域に区切られたチェーンメモリを有する伝送装置に具備される。前記メモリコントローラは、管理メモリ、第１の合計部、エラー検出部、第２の合計部、および算出部を有する。
【００１３】
前記管理メモリは、前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶する。
【００１４】
前記第１の合計部は、前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出する。
【００１５】
前記エラー検出部は、前記管理メモリから読み出されたアドレスのエラーを検出する。
前記第２の合計部は、前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出する。
【００１６】
前記算出部は、前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する。
【発明の効果】
【００１７】
実施の形態によれば、小規模な回路構成でチェーンメモリのチェーン構成を復旧することができる。
【図面の簡単な説明】
【００１８】
【図１】比較例の伝送装置の構成図である。
【図２】比較例のメモリコントローラのアクセス処理を説明する図（その１）である。
【図３】比較例のメモリコントローラのアクセス処理を説明する図（その２）である。
【図４】比較例のメモリコントローラのアクセス処理を説明する図（その３）である。
【図５】比較例のメモリコントローラのアクセス処理を説明する図（その４）である。
【図６】比較例のメモリコントローラのアクセス処理を説明する図（その５）である。
【図７】比較例のメモリコントローラのアクセス処理を説明する図（その６）である。
【図８】比較例のメモリコントローラのアクセス処理を説明する図（その７）である。
【図９】比較例のメモリコントローラのアクセス処理を説明する図（その８）である。
【図１０】比較例のメモリコントローラのアクセス処理を説明する図（その９）である。
【図１１】比較例のメモリコントローラのアクセス処理を説明する図（その１０）である。
【図１２】比較例のメモリコントローラのアクセス処理を説明する図（その１１）である。
【図１３】比較例のリードエラー時の動作を説明する図（その１）である。
【図１４】比較例のリードエラー時の動作を説明する図（その２）である。
【図１５】比較例のリードエラー時の動作を説明する図（その３）である。
【図１６】比較例のリードエラー時の動作を説明する図（その４）である。
【図１７】実施の形態の伝送装置の構成図である。
【図１８】実施の形態のチェーン管理メモリのリードエラー時の動作を説明する図である。
【図１９】比較例のチェーン管理メモリの例を示す図である。
【図２０】実施の形態のチェーン管理メモリの例を示す図である。
【図２１】実施の形態のチェーン管理メモリの更新方法のフローチャートである。
【図２２】実施の形態のメモリコントローラのアクセス処理を説明する図（その１）である。
【図２３】実施の形態のメモリコントローラのアクセス処理を説明する図（その２）である。
【図２４】実施の形態のメモリコントローラのアクセス処理を説明する図（その３）である。
【図２５】実施の形態のメモリコントローラのアクセス処理を説明する図（その４）である。
【図２６】実施の形態のメモリコントローラのアクセス処理を説明する図（その５）である。
【図２７】実施の形態のメモリコントローラのアクセス処理を説明する図（その６）である。
【図２８】実施の形態のメモリコントローラのアクセス処理を説明する図（その７）である。
【図２９】実施の形態のメモリコントローラのアクセス処理を説明する図（その８）である。
【図３０】実施の形態のメモリコントローラのアクセス処理を説明する図（その９）である。
【図３１】実施の形態のメモリコントローラのアクセス処理を説明する図（その１０）である。
【図３２】実施の形態のメモリコントローラのアクセス処理を説明する図（その１１）である。
【図３３】実施の形態のチェーン管理メモリの変形例を示す図である
【図３４】他の実施の形態の伝送装置の構成図である。
【図３５】他の実施の形態のチェーン管理メモリの更新方法のフローチャートである。
【図３６】他の実施の形態のチェーン管理メモリのリードエラー発生時の例を示す図である。
【図３７】他の実施の形態のリードエラー箇所以外の次アドレスのバンク毎の合計値を示す図である。
【図３８】情報処理装置（コンピュータ）の構成図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照しながら実施の形態について説明する。
最初に比較例について説明し、その後、実施の形態について説明する。
【００２０】
図１は、比較例の伝送装置の構成図である。
伝送装置１１は、パケットバッファ（チェーンメモリ）２１およびメモリコントローラ３１を有する。
【００２１】
メモリコントローラ３１は、パケットバッファ２１に書き込み先または読み出し先のアドレスを通知する。メモリコントローラ３１は、ユーザ識別部４１、管理部５１、およびチェーン管理メモリ監視部６１を有する。管理部５１は、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５を有する。また、管理部５１は、記憶部（不図示）を有し、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５は、当該記憶部に記憶される。尚、チェーン管理メモリ、ユーザ管理テーブル、容量管理テーブル、および空アドレス管理テーブルは、メモリコントローラ３１の外にあってもよい。
【００２２】
伝送装置１１に入力されたパケットは、パケットバッファ２１に記憶される。パケットバッファ２１は、リード要求に応じて、メモリコントローラ３１から受信したアドレスに基づいて記憶されているパケットを読み出して出力する。
【００２３】
ユーザ識別部４１は、パケットを受信し、受信したパケットがどのユーザのパケットであるか識別する。
【００２４】
管理部５１は、ユーザ識別部４１により識別されたユーザや入力されたパケットの情報（例えば、パケットのサイズ）等に基づいて、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５を読み書きする。管理部５１は、チェーン管理メモリ５２を用いてパケットバッファ２１のチェーン構成を管理する。管理部５１は、ユーザ管理テーブル５３を用いてユーザ単位のアドレス管理を行う。管理部５１は、容量管理テーブル５４を用いてパケットバッファ２１の蓄積容量を管理する。管理部５１は、空アドレス管理テーブル５５を用いてパケットバッファ２１の空きアドレスを管理する。
【００２５】
チェーン管理メモリ５２は、パケットバッファ２１のデータが記憶された領域のアドレスおよび空き領域のアドレス（空アドレス）のチェーン構成を示す情報を記憶する。詳細には、チェーン管理メモリ５２は、各アドレスに、当該アドレスに対応するパケットバッファ２１のアドレスに記憶されたデータに続くデータが記憶された領域のアドレス（次アドレス）を記憶する。尚、チェーン管理メモリ５２は、あるアドレスに対応するパケットバッファ２１のアドレスに記憶されたデータが最終データである場合、当該アドレスの次のアドレス（次アドレス）を記憶する。または、チェーン管理メモリ５２は、あるアドレスに対応するパケットバッファ２１の空き領域のアドレスに続く空き領域のアドレス（次アドレス）を記憶する。
【００２６】
ユーザ管理テーブル５３は、パケットバッファ２１のユーザ毎のデータが記憶された領域のアドレスを示す。詳細には、ユーザ管理テーブル５３には、ユーザ、先頭アドレス、および最終アドレスが対応付けて記述される。
【００２７】
容量管理テーブル５４は、ユーザ毎のデータのサイズを示す。詳細には、容量管理テーブル５４には、ユーザと蓄積容量とが対応付けて記述される。蓄積容量には、例えば、ワード数が記述される。
【００２８】
空アドレス管理テーブル５５は、パケットバッファ２１のデータが記憶されていない領域のアドレスである空アドレスを示す。空アドレス管理テーブル５５には、空アドレスの先頭アドレスおよび最終アドレスが記述される。
【００２９】
チェーン管理メモリ監視部６１は、チェーン管理メモリ５２から次アドレスを読み出し、読み出した次アドレスのエラーの有無をチェックし、リードエラーを検出する。管理部５１は、リードエラーが検出された場合、チェーン管理メモリ５２を初期設定状態にする。
【００３０】
次に、パケットバッファ２１に対するデータの読み書き（アクセス処理）が行われる時のパケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５それぞれの状態を説明する。
【００３１】
図２〜１２は、比較例のメモリコントローラのアクセス処理を説明する図（その１〜その１１）である。図２〜１２の順で、パケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５それぞれの状態が変化する。
【００３２】
図２：図２は、伝送装置１１の起動後の初期設定が行われた状態（初期設定状態）を示す。チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５は、管理部５１により初期設定が行われる。パケットバッファ２１は、１ワード毎の領域に区切られ、パケットバッファ２１の各アドレスには１ワード（例えば、１６ビット）分のデータが記憶される。パケットバッファ２１の容量は、２５６ワードである。パケットバッファ２１は、各領域を示すアドレス（ＡＤＲ）０〜２５５を有する。チェーン管理メモリ５２は、アドレス（ＡＤＲ）０〜２５５を有する。また、ユーザ数＝４とし、ユーザ１〜４をそれぞれＵＳＲ＿１〜ＵＳＲ＿４と示す。
【００３３】
パケットバッファ２１の各アドレスには、データは格納されていない。図２のパケットバッファ２１において、xxxxはデータが格納されていない空き領域を示す。
【００３４】
チェーン管理メモリ５２は、次アドレスを線状に示したチェーン構成を初期値とする。チェーン管理メモリ５２のアドレス０〜２５４には、次アドレス＝１〜２５５がそれぞれ記憶される。チェーン管理メモリ５２のアドレス２５５は、空アドレスの最終アドレスであり、次アドレス＝０を記憶している。しかし、アドレス２５５は最終アドレスであり、実際には次アドレスは無い。そのため、アドレス２５５の次アドレス＝０は実質ダミー（意味を持たない）である。
【００３５】
ユーザ管理テーブル５３において、ＵＳＲ＿１〜ＵＳＲ＿４それぞれの先頭アドレスおよび最終アドレスは０である。
【００３６】
容量管理テーブル５４において、ＵＳＲ＿１〜ＵＳＲ＿４それぞれの蓄積容量は０である。
【００３７】
空アドレス管理テーブル５５において、先頭アドレス＝０、最終アドレス＝２５５である。空アドレスのチェーン接続は、アドレス０→１→・・・→２５４→２５５となる。
【００３８】
図３：図３は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３）がパケットバッファ２１に書き込まれた状態を示す。
【００３９】
パケットバッファ２１のアドレス０〜２に、ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３がそれぞれ記憶される。
【００４０】
チェーン管理メモリ５２のアドレス０〜２に記憶される次アドレスはそれぞれ１〜３となる（ユーザ１のチェーンを更新）。
【００４１】
ユーザ管理テーブル５３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは２となる。
容量管理テーブル５４のＵＳＲ＿１の蓄積容量は３となる。
【００４２】
パケットバッファ２１のアドレス０〜２にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは３となる。よって、空アドレスのチェーン接続は、アドレス３→４→・・・→２５４→２５５となる。
【００４３】
図４：図４は、３ワード分のユーザ２のデータ（ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３）がパケットバッファ２１に書き込まれた状態を示す。
【００４４】
パケットバッファ２１のアドレス３〜５に、ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３がそれぞれ記憶される。
【００４５】
チェーン管理メモリ５２のアドレス３〜５に記憶される次アドレスはそれぞれ４〜６となる（ユーザ２のチェーンを更新）。
【００４６】
ユーザ管理テーブル５３のＵＳＲ＿２の先頭アドレスは３、最終アドレスは５となる。
容量管理テーブル５４のＵＳＲ＿２の蓄積容量は３となる。
【００４７】
パケットバッファ２１のアドレス０〜５にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは６となる。よって、空アドレスのチェーン接続は、アドレス６→７→・・・→２５４→２５５となる。
【００４８】
図５：図５は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３）がパケットバッファ２１から読み出された状態を示す。
【００４９】
パケットバッファ２１のアドレス０〜２は、ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３が読み出されて空き領域となる。すなわち、アドレス０〜２は、空アドレスである。
【００５０】
ユーザ管理テーブル５３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは０となる。
容量管理テーブル５４のＵＳＲ＿１の蓄積容量は０となる。
【００５１】
パケットバッファ２１のアドレス０〜２は空き領域となったため、空アドレス管理テーブル５５の最終アドレスは２となる。よって、空アドレスのチェーン接続は、アドレス６→７→・・・→２５４→２５５→０→１→２となる。
【００５２】
図６：図６は、３ワード分のユーザ３のデータ（ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３）がパケットバッファ２１に書き込まれた状態を示す。
【００５３】
パケットバッファ２１のアドレス６〜８に、ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３がそれぞれ記憶される。
【００５４】
チェーン管理メモリ５２のアドレス６〜８に記憶される次アドレスはそれぞれ７〜９となる（ユーザ３のチェーンを更新）。
【００５５】
ユーザ管理テーブル５３のＵＳＲ＿３の先頭アドレスは６、最終アドレスは８となる。
容量管理テーブル５４のＵＳＲ＿３の蓄積容量は３となる。
【００５６】
パケットバッファ２１のアドレス３〜８にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは９となる。よって、空アドレスのチェーン接続は、アドレス９→１０→・・・→２５４→２５５→０→１→２となる。
【００５７】
図７：図７は、３ワード分のユーザ４のデータ（ＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ３）がパケットバッファ２１に書き込まれた状態を示す。
【００５８】
パケットバッファ２１のアドレス９〜１１に、ＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ３がそれぞれ記憶される。
【００５９】
チェーン管理メモリ５２のアドレス９〜１１に記憶される次アドレスはそれぞれ１０〜１２となる（ユーザ４のチェーンを更新）。
【００６０】
ユーザ管理テーブル５３のＵＳＲ＿４の先頭アドレスは９、最終アドレスは１１となる。
【００６１】
容量管理テーブル５４のＵＳＲ＿４の蓄積容量は３となる。
パケットバッファ２１のアドレス３〜１１にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは１２となる。よって、空アドレスのチェーン接続は、アドレス１２→１３→・・・→２５４→２５５→０→１→２となる。
【００６２】
図８：図８は、３ワード分のユーザ３のデータ（ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３）がパケットバッファ２１から読み出された状態を示す。
【００６３】
パケットバッファ２１のアドレス６〜８は、ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３が読み出されて空き領域となる。すなわち、アドレス６〜８は、空アドレスである。
【００６４】
パケットバッファ２１のアドレス６〜８は空き領域となったため、チェーン管理メモリ５２のアドレス２（＝図７において空アドレス管理テーブル５５の最終アドレス）に記憶される次アドレスは６となる（空アドレスのチェーンを更新）。
【００６５】
ユーザ管理テーブル５３のＵＳＲ＿３の先頭アドレスは０、最終アドレスは０となる。
容量管理テーブル５４のＵＳＲ＿３の蓄積容量は０となる。
【００６６】
パケットバッファ２１のアドレス６〜８は空き領域となったため、空アドレス管理テーブル５５の最終アドレスは８となる。よって、空アドレスのチェーン接続は、アドレス１２→１３→・・・→２５４→２５５→０→１→２→６→７→８となる。
【００６７】
図８において、アドレス２とアドレス５の次アドレスは６であり重複している。しかし、アドレス５はユーザ２の最終アドレスであり、最終アドレスに格納している次アドレスは実質ダミー(意味を持たない)である。
【００６８】
図９：図９は、３ワード分のユーザ２のデータ（ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３）がパケットバッファ２１から読み出された状態を示す。
【００６９】
パケットバッファ２１のアドレス３〜５は、ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３が読み出されて空き領域となる。すなわち、アドレス３〜５は、空アドレスである。
【００７０】
パケットバッファ２１のアドレス３〜５は空き領域となったため、チェーン管理メモリ５２のアドレス８（＝図８において空アドレス管理テーブル５５の最終アドレス）に記憶される次アドレスは３となる（空アドレスのチェーンを更新）。
【００７１】
ユーザ管理テーブル５３のＵＳＲ＿２の先頭アドレスは０、最終アドレスは０となる。
容量管理テーブル５４のＵＳＲ＿２の蓄積容量は０となる。
【００７２】
パケットバッファ２１のアドレス３〜５は空き領域となったため、空アドレス管理テーブル５５の最終アドレスは５となる。よって、空アドレスのチェーン接続は、アドレス１２→１３→・・・→２５４→２５５→０→１→２→６→７→８→３→４→５となる。
【００７３】
図１０：図１０は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ６）がパケットバッファ２１に書き込まれた状態を示す。
【００７４】
パケットバッファ２１のアドレス１２〜１４に、ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ６がそれぞれ記憶される。
【００７５】
チェーン管理メモリ５２のアドレス１２〜１４に記憶される次アドレスはそれぞれ１３〜１５となる（ユーザ１のチェーンを更新）。
【００７６】
ユーザ管理テーブル５３のＵＳＲ＿１の先頭アドレスは１２、最終アドレスは１４となる。
【００７７】
容量管理テーブル５４のＵＳＲ＿１の蓄積容量は３となる。
パケットバッファ２１のアドレス１２〜１４にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは１５となる。よって、空アドレスのチェーン接続は、アドレス１５→１６→・・・→２５４→２５５→０→１→２→６→７→８→３→４→５となる。
【００７８】
図１１：図１１は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ５）がパケットバッファ２１から読み出された状態を示す。
【００７９】
パケットバッファ２１のアドレス１２〜１４は、ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ６が読み出されて空き領域となる。すなわち、アドレス１２〜１４は、空アドレスである。
【００８０】
パケットバッファ２１のアドレス１２〜１４は空き領域となったため、チェーン管理メモリ５２のアドレス５（＝図１０において空アドレス管理テーブル５５の最終アドレス）に記憶される次アドレスは１２となる（空アドレスのチェーンを更新）。
【００８１】
ユーザ管理テーブル５３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは０となる。
容量管理テーブル５４のＵＳＲ＿１の蓄積容量は０となる。
【００８２】
パケットバッファ２１のアドレス１２〜１４は空き領域となったため、空アドレス管理テーブル５５の最終アドレスは１４となる。よって、空アドレスのチェーン接続は、アドレス１５→１６→・・・→２５４→２５５→０→１→２→６→７→８→３→４→５→１２→１３→１４となる。
【００８３】
図１１において、アドレス５とアドレス１１の次アドレスは１２であり重複している。しかし、アドレス１１はユーザ４の最終アドレスであり、最終アドレスに格納している次アドレスは実質ダミー(意味を持たない)である。
【００８４】
図１２：図１２は、３ワード分のユーザ４のデータ（ＵＳＲ＿４−Ｄ４〜ＵＳＲ＿４−Ｄ５）がパケットバッファ２１から読み出された状態を示す。
【００８５】
パケットバッファ２１のアドレス９〜１１は、ＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ１が読み出されて空き領域となる。すなわち、アドレス９〜１１は、空アドレスである。
【００８６】
パケットバッファ２１のアドレス９〜１１は空き領域となったため、チェーン管理メモリ５２のアドレス４（＝図１１において空アドレス管理テーブル５５の最終アドレス）に記憶される次アドレスは１９となる（空アドレスのチェーンを更新）。
【００８７】
ユーザ管理テーブル５３のＵＳＲ＿４の先頭アドレスは０、最終アドレスは０となる。
容量管理テーブル５４のＵＳＲ＿４の蓄積容量は０となる。
【００８８】
パケットバッファ２１のアドレス９〜１１は空き領域となったため、空アドレス管理テーブル５５の最終アドレスは１１となる。よって、空アドレスのチェーン接続は、アドレス１５→１６→・・・→２５４→２５５→０→１→２→６→７→８→３→４→５→１２→１３→１４→９→１０→１１となる。
【００８９】
次に、パケットバッファ２１に対するデータの読み書き（アクセス処理）が行われ、さらにリードエラー発生が発生したときのパケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５それぞれの状態を説明する。
【００９０】
図１３〜１６は、比較例のリードエラー時の動作を説明する図（その１〜その４）である。図１３〜１６の順で、パケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５それぞれの状態が変化する。
【００９１】
図１３：図１３は、伝送装置１１の起動後の初期設定が行われた状態（初期設定状態）を示す。チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５は、管理部５１により初期設定が行われる。パケットバッファ２１の各アドレスには１ワード分のデータが記憶される。パケットバッファ２１の容量は、２５６ワードである。パケットバッファ２１は、各領域を示すアドレス（ＡＤＲ）０〜２５５を有する。チェーン管理メモリ５２は、アドレス（ＡＤＲ）０〜２５５を有する。また、ユーザ数＝４とし、ユーザ１〜４をそれぞれＵＳＲ＿１〜ＵＳＲ＿４と示す。
【００９２】
パケットバッファ２１の各アドレスには、データは格納されていない。図２のパケットバッファ２１において、xxxxはデータが格納されていない空き領域を示す。
【００９３】
チェーン管理メモリ５２は、次アドレスを線状に示したチェーン構成を初期値とする。チェーン管理メモリ５２のアドレス０〜２５４には、次アドレス＝１〜２５５がそれぞれ記憶される。チェーン管理メモリ５２のアドレス２５５は、空アドレスの最終アドレスであり、次アドレス＝０を記憶している。しかし、アドレス２５５は最終アドレスであり、実際には次アドレスは無い。そのため、アドレス２５５の次アドレス＝０は実質ダミー（意味を持たない）である。
【００９４】
ユーザ管理テーブル５３において、ＵＳＲ＿１〜ＵＳＲ＿４それぞれの先頭アドレスおよび最終アドレスは０である。
【００９５】
容量管理テーブル５４において、ＵＳＲ＿１〜ＵＳＲ＿４それぞれの蓄積容量は０である。
【００９６】
空アドレス管理テーブル５５において、先頭アドレス＝０、最終アドレス＝２５５である。空アドレスのチェーン接続は、アドレス０→１→・・・→２５４→２５５となる。
【００９７】
図１４：図１４は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３）がパケットバッファ２１に書き込まれた状態を示す。
【００９８】
パケットバッファ２１のアドレス０〜２に、ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３がそれぞれ記憶される。
【００９９】
チェーン管理メモリ５２のアドレス０〜２に記憶される次アドレスはそれぞれ１〜３となる（ユーザ１のチェーンを更新）。
【０１００】
ユーザ管理テーブル５３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは２となる。
容量管理テーブル５４のＵＳＲ＿１の蓄積容量は３となる。
【０１０１】
パケットバッファ２１のアドレス０〜２にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは３となる。よって、空アドレスのチェーン接続は、アドレス３→４→・・・→２５４→２５５となる。
【０１０２】
図１５：図１５は、３ワード分のユーザ２のデータ（ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３）がパケットバッファ２１に書き込まれた状態を示す。
【０１０３】
パケットバッファ２１のアドレス３〜５に、ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３がそれぞれ記憶される。
【０１０４】
チェーン管理メモリ５２のアドレス３〜５に記憶される次アドレスはそれぞれ４〜６となる（ユーザ２のチェーンを更新）。
【０１０５】
ユーザ管理テーブル５３のＵＳＲ＿２の先頭アドレスは３、最終アドレスは５となる。
容量管理テーブル５４のＵＳＲ＿２の蓄積容量は３となる。
【０１０６】
パケットバッファ２１のアドレス０〜５にデータが書き込まれたため、空アドレス管理テーブル５５の先頭アドレスは６となる。よって、空アドレスのチェーン接続は、アドレス６→７→・・・→２５４→２５５となる。
【０１０７】
図１６：図１６は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３）の読み出し時にチェーン管理メモリ５２でリードエラーが発生した場合を示す。
【０１０８】
図１６において、チェーン管理メモリ５２のアドレス１でリードエラーが発生、すなわち、チェーン管理メモリ５２のアドレス１に記憶されている次アドレスが壊れており、ユーザ１のデータのチェーン構成が壊れている。これにより、パケットバッファ２１のアドレス１に記憶されているデータＵＳＲ＿１−Ｄ２に続くデータがパケットバッファ２１のどのアドレスに記憶されているか不明となり、ユーザのデータの読み出しが出来なくなる。また、空き領域となったアドレス１に続く空き領域のアドレスが不明のため、空きアドレス管理テーブル５５の最終アドレスも不明となる。
【０１０９】
チェーン管理メモリ監視部６１は、チェーン管理メモリ５２のビット誤り（リードエラー）監視を行う。チェーン管理メモリ５２においてリードエラーが発生した場合、次アドレスが不明となる。次アドレスが不明であるためチェーン構成が壊れており、復旧するために管理部５１は、パケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５を図１３に示す初期設定状態に戻す。
【０１１０】
チェーン管理メモリ監視部６１がメモリ監視をECC（Error Correction Code）を用いて実施する場合は、１ビット誤りであれば訂正する事が可能であるが、２ビット以上の誤りの場合は訂正不可である。２ビット以上の誤りの場合、管理部５１は、パケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５を図１３に示す初期設定状態に戻して復旧させる。比較例では、初期設定状態に戻す際にパケットバッファ２１に格納されているパケットは廃棄されるという問題がある。
【０１１１】
図１７は、実施の形態の伝送装置の構成図である。
伝送装置１０１は、パケットバッファ（チェーンメモリ）１１１およびメモリコントローラ１２１を有する。
【０１１２】
メモリコントローラ１２１は、パケットバッファ１１１に書き込み先または読み出し先のアドレスを通知する。メモリコントローラ１２１は、ユーザ識別部１３１、管理部１４１、チェーン管理メモリ監視部１５１、アドレス合計部１６１、エラーアドレス以外次アドレス合計部１７１、および次アドレス算出部１８１を有する。管理部１４１は、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５を有する。また、管理部１４１は、記憶部（不図示）を有し、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５は、当該記憶部に記憶される。尚、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５は、メモリコントローラ１２１の外にあってもよい。
【０１１３】
伝送装置１０１に入力されたパケットは、パケットバッファ１１１に記憶される。パケットバッファ１１１は、リード要求に応じて、メモリコントローラ１２１から受信したアドレスに基づいて記憶されているパケットを読み出して出力する。
【０１１４】
ユーザ識別部１３１は、パケットを受信し、受信したパケットがどのユーザのパケットであるか識別する。
【０１１５】
管理部１４１は、ユーザ識別部１３１により識別されたユーザや入力されたパケットの情報（例えば、パケットのサイズ）等に基づいて、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５を読み書きする。管理部１４１は、チェーン管理メモリ１４２を用いてパケットバッファ１１１のチェーン構成を管理する。管理部１４１は、ユーザ管理テーブル１４３を用いてユーザ単位のアドレス管理を行う。管理部１４１は、容量管理テーブル１４４を用いてパケットバッファ１１１の蓄積容量を管理する。管理部１４１は、空アドレス管理テーブル１４５を用いてパケットバッファ１１１の空きアドレスを管理する。
【０１１６】
チェーン管理メモリ１４２は、パケットバッファ１１１のデータが記憶された領域のアドレスおよび空き領域のアドレス（空アドレス）のチェーン構成を示す情報を記憶する。詳細には、チェーン管理メモリ１４２は、各アドレスに、当該アドレスに対応するパケットバッファ１１１のアドレスに記憶されたデータに続くデータが記憶された領域のアドレス（次アドレス）を記憶する。尚、チェーン管理メモリ１４２は、あるアドレスに対応するパケットバッファ１１１のアドレスに記憶されたデータが最終データである場合、先頭データが記憶されたアドレスを次のアドレス（次アドレス）として記憶する。または、チェーン管理メモリ１４２は、あるアドレスに対応するパケットバッファ１１１の空き領域のアドレスに続く空き領域のアドレス（次アドレス）を記憶する。チェーン管理メモリ１４２は、管理メモリの一例である。
【０１１７】
ユーザ管理テーブル１４３は、パケットバッファ１１１のユーザ毎のデータが記憶された領域のアドレスを示す。詳細には、ユーザ管理テーブル１４３には、ユーザ、先頭アドレス、および最終アドレスが対応付けて記述される。
【０１１８】
容量管理テーブル１４４は、ユーザ毎のデータのサイズを示す。詳細には、容量管理テーブル１４４には、ユーザと蓄積容量とが対応付けて記述される。蓄積容量には、例えば、ワード数が記述される。
【０１１９】
空アドレス管理テーブル１４５は、パケットバッファ１１１のデータが記憶されていない領域のアドレスである空アドレスを示す。空アドレス管理テーブル１４５には、空アドレスの先頭アドレスおよび最終アドレスが記述される。
【０１２０】
チェーン管理メモリ監視部１５１は、チェーン管理メモリ１４２から次アドレスを読み出し、読み出した次アドレスのエラーの有無をチェックし、リードエラーを検出する。チェーン管理メモリ監視部１５１は、エラー検出部の一例である。
【０１２１】
アドレス合計部１６１は、パケットバッファ１１１のアドレスの合計値を算出する。詳細には、アドレス合計部１６１は、リードエラーが無いとき（例えば、初期設定状態）におけるチェーン管理メモリ１４２に記憶された次アドレスの合計値（次アドレス値合計）をパケットバッファ１１１のアドレスの合計値として算出する。アドレス合計部１６１は、第１の合計部の一例である。
【０１２２】
エラーアドレス以外次アドレス合計部１７１は、チェーン管理メモリ１４２のアドレスのうち、リードエラーが検出されたアドレス以外の全アドレスに記憶された次アドレスの合計値（リードエラー箇所以外の格納値の合計）を算出する。エラーアドレス以外次アドレス合計部１７１は、第２の合計部の一例である。
【０１２３】
次アドレス算出部１８１は、チェーン管理メモリ１４２のリードエラーが検出されたアドレスに記憶されていた次アドレスを算出する。詳細には、次アドレス算出部１８１は、アドレス合計部１６１により算出された合計値からエラーアドレス以外次アドレス合計部１７１により算出された合計値を減算して、リードエラー箇所の本来の値（次アドレスの訂正値）を算出する。次アドレス算出部１８１は、次アドレスの訂正値を管理部１４１に出力する。管理部１４１は、チェーン管理メモリ１４２のリードエラーが検出されたアドレスに、受信した次アドレスの訂正値を記憶する。次アドレス算出部１８１は、算出部の一例である。
【０１２４】
パケットバッファ１１１は、１ワード（例えば、１６ビット）毎の領域に区切られ、パケットバッファ１１１の各アドレスには１ワード分のデータが記憶される。パケットバッファ１１１の容量は、２５６ワードである。パケットバッファ１１１は、各領域を示すアドレス（ＡＤＲ）０〜２５５を有する。チェーン管理メモリ１４１は、アドレス（ＡＤＲ）０〜２５５を有する。入力されたパケットは、所定のサイズ（１ワード）に分割され、分割されたデータは、それぞれパケットバッファ１１１のいずれかの領域に記憶される。また、ユーザ数＝４とし、ユーザ１〜４をそれぞれＵＳＲ＿１〜ＵＳＲ＿４と示す。
【０１２５】
ここで、実施の形態においてリードエラーが発生した場合の処理について説明する。
図１８は、実施の形態のチェーン管理メモリのリードエラー時の動作を説明する図である。
【０１２６】
リードエラーの発生した場合、パケットバッファ１１１、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５は、図１８に示す状態となっている。図１８では、チェーン管理メモリ１４２のアドレス１にリードエラーが発生している。尚、パケットバッファ１１１の容量は２５６ワードである。
【０１２７】
チェーン管理メモリ１４２のアドレス０、２〜２５４、２５５には、それぞれ次アドレスとして１，３〜２５５、０が記憶されている。チェーン管理メモリ１４２のアドレス１にリードエラーが発生したため、アドレス１に記憶されている次アドレスの値は不明である。
【０１２８】
チェーン管理メモリ１４２に記憶されている次アドレスの合計は、パケットバッファ１１１の容量によって決まる。
【０１２９】
ここで、初期設定状態等におけるチェーン管理メモリ１４２で記憶している次アドレスの合計は、チェーン管理メモリ１４２内の次アドレス値に重複がないと仮定すると、下式（１）で算出される。
【０１３０】
次アドレスの合計＝ｎ＊（ｎ＋１）／２    ・・・（１）
【０１３１】
但し、ｎはパケットバッファ１１１の容量−１である。すなわち、ｎは、パケットバッファ１１１の最終アドレスである。
【０１３２】
チェーン管理メモリ１４２内の次アドレス値に重複がない場合、パケットバッファ１１１のアドレスの合計は、チェーン管理メモリ１４２で管理している次アドレスの合計と同じになる。
【０１３３】
実施の形態において、チェーン管理メモリ１４２内の次アドレスに重複はなく、チェーン管理メモリ１４２に記憶されている次アドレスの合計は固定値である。従って、チェーン管理メモリ１４２においてリードエラーが発生した場合、リードエラーが発生したアドレスに記憶されていた次アドレスは、次アドレスの合計から、リードエラーしたアドレス以外のアドレスに記憶されている次アドレスの合計を引き算することで算出できる。よって、リードエラー箇所の本来の値、すなわち、リードエラーが発生したアドレスに記憶されていた次アドレスの値は、下式（２）で算出される。
【０１３４】
リードエラー箇所の本来の値=次アドレスの合計―リードエラー箇所以外の格納値の合計    ・・・（２）
【０１３５】
実施の形態の場合、パケットバッファ１１１の容量は２５６ワードであるため、ｎ＝２５５である。よって、上式（１）より、次アドレスの合計は、次アドレスの合計＝２５５＊（２５５＋１）／２＝３２６４０となる。
【０１３６】
リードエラー箇所以外の格納値の合計は、アドレス１でリードエラーが発生しているので、アドレス１以外のアドレスに記憶されている次アドレスの合計である。図１８において、アドレス１以外の格納値、すなわちアドレス１以外のアドレス０、２〜２５５に記憶されている次アドレスの合計は、１＋３＋４＋・・・＋２５４＋２５５＋０＝３２６３８となる。
【０１３７】
よって、リードエラー箇所の本来の値、すなわちアドレス１に記憶されていた値は、上式（２）より、３２６４０−３２６３８＝２と算出され、次アドレス訂正値は２となる。算出されたアドレス１の次アドレス訂正値＝２がチェーン管理メモリ１４２のアドレス１に記憶されることにより、チェーン構成が復旧される。
【０１３８】
また、比較例のチェーン管理メモリ５２において、各ユーザおよび空アドレスの最終アドレスの次アドレスは実質ダミー（意味を持たない）である。最終アドレスであるため次アドレスは存在しない。
【０１３９】
そのため、パケットバッファ２１への書き込みおよび読み出しを繰り返すと、チェーン管理メモリ５２の各ユーザおよび空アドレスの最終アドレスの格納値が重複する場合がある。
【０１４０】
図１９は、比較例のチェーン管理メモリの例を示す図である。
図１９は、図８のパケットバッファ２１、チェーン管理メモリ５２、ユーザ管理テーブル５３、容量管理テーブル５４、および空アドレス管理テーブル５５の状態を示す。図１９において、チェーン管理メモリ５２のアドレス２とアドレス５に記憶される次アドレスは、両方とも６であり重複している。
【０１４１】
比較例のように、次アドレスの値が重複していると、チェーン管理メモリ５２に記憶された次アドレスの合計がパケットバッファ２１のアドレスの合計と一致せず、実施の形態のように次アドレスの訂正値を算出することが困難となる。
【０１４２】
そこで、実施の形態では、各ユーザ、空アドレスの各最終アドレスの格納値（次アドレス）を先頭アドレスとすることで次アドレスの重複を無くす。すなわち、最終アドレスの次アドレスを先頭アドレスとすることでチェーンがリング状となり、次アドレスの重複を無くすことが出来る。
【０１４３】
管理部１４１は、先頭アドレスと最終アドレスを、ユーザ管理テーブル１４３、空アドレス管理テーブル１４５で管理しており、ユーザ管理テーブル１４３と空アドレス管理テーブル１４５に記述された値を用いて、最終アドレスの格納値を先頭アドレスに設定する。
【０１４４】
図２０は、実施の形態のチェーン管理メモリの例を示す図である。
パケットバッファ１１１のアドレス３〜５には、それぞれユーザ２のデータＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３が記憶されている。ユーザ管理テーブル１４３に示すように、ユーザ２（ＵＳＲ＿２）の先頭アドレスは３、最終アドレスは５である。よって、ユーザ２の最後のデータが記憶される最終アドレス＝５に記憶される次アドレスは、ユーザ２の最初のデータが記憶される先頭アドレスである３となる。
【０１４５】
パケットバッファ１１１のアドレス９〜１１には、それぞれユーザ４のデータＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ３が記憶されている。ユーザ管理テーブル１４３に示すように、ユーザ４（ＵＳＲ＿４）の先頭アドレスは９、最終アドレスは１１である。よって、ユーザ４の最後のデータが記憶される最終アドレス＝１１に記憶される次アドレスは、ユーザ４の最初のデータが記憶される先頭アドレスである９となる。
【０１４６】
空アドレスのチェーン構成は、空アドレス管理テーブル１４５に示すように、先頭アドレスが１２、最終アドレスが８となっている。すなわち、空アドレスのチェーン接続は、アドレス１２→１３→・・・→２５４→２５５→０→１→２→６→７→８となっている。よって、チェーン管理メモリ１４２で管理される空アドレスの最終アドレス＝８に記憶される次アドレスは、空アドレスの先頭アドレスである１２となる。
【０１４７】
上記のように、実施の形態において、チェーン管理メモリ１４２に記憶される次アドレスは、重複しない。
【０１４８】
図２１は、実施の形態のチェーン管理メモリの更新方法のフローチャートである。
初めに、管理部１４１は、伝送装置１０１の起動後に初期設定を行う。それにより、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５は、図２２に示す初期設定状態となっている。
【０１４９】
ステップＳ５０１において、アドレス合計部１６１は、パケットバッファ（チェーンメモリ）１１１のアドレスの合計値を算出する。詳細には、アドレス合計部１６１は、チェーン管理メモリ１４２の各アドレスに記憶された次アドレスを読み出し、読み出した次アドレスの合計（次アドレス値合計）を算出し、パケットバッファ１１１のアドレスの合計値とする。アドレス合計部１６１は、読み出した次アドレスを合計して次アドレス値合計を算出しても良いし、上式（１）を用いて次アドレス値合計を算出してもよい。上述のように、次アドレス値合計は、次アドレス値合計＝ｎ＊（ｎ＋１）／２で算出される。尚、ｎ＝パケットバッファ１１１の容量（ワード数）―１であり、パケットバッファ１１１の最終アドレスである。アドレス合計部１６１は、算出した次アドレス値合計を次アドレス算出部１８１に出力する。
【０１５０】
ステップＳ５０２において、伝送装置１０１がパケットを受信または管理部１４１がパケットバッファ１１１のリード要求を受信して、チェーン管理メモリ１４１へのアクセスが発生したら、制御はステップＳ５０３に進む。
【０１５１】
ステップＳ５０３において、管理部１４１は、チェーン管理メモリ１４１へのアクセスがチェーン管理メモリ１４１への書き込み（ライト）であるか判定する。チェーン管理メモリ１４１へのアクセスがチェーン管理メモリ１４１への書き込みである場合、制御はステップＳ５０４に進む。チェーン管理メモリ１４１へのアクセスがチェーン管理メモリ１４１への書き込みでない（すなわち、チェーン管理メモリ１４１の読み出し（リード））場合、制御はステップＳ５０５に進む。
【０１５２】
ステップＳ５０４において、管理部１４１は、以下の（１）〜（４）の処理により、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５を更新する。尚、メモリコントローラ１２１は、あるユーザのデータをパケットバッファ１１１に書き込み（ライト）したとする。
【０１５３】
（１）チェーン管理メモリ１４２の更新
管理部１４１は、チェーン管理メモリ１４２において、ライトしたユーザの最終アドレスの格納値（次アドレス）をライトしたユーザの先頭アドレス（パケットバッファ１１１にライトしたユーザのデータの先頭のアドレス）に設定する。すなわち、最終アドレスに記憶される次アドレスを先頭アドレスとし、パケットバッファ１１１においてユーザのデータを記憶する領域を示すチェーン構成をリング状にする。
【０１５４】
（２）ユーザ管理テーブル１４３の更新
管理部１４１は、ユーザ管理テーブル１４３において、ライトしたユーザの先頭アドレスと最終アドレスを更新する。
【０１５５】
（３）容量管理テーブル１４４の更新
管理部１４１は、容量管理テーブル１４４において、ライトしたユーザの蓄積容量を、ライトしたワード分だけ加算する。
【０１５６】
（４）空アドレス管理テーブル１４５の更新
管理部１４１は、空アドレス管理テーブル１４５において、ライトしたアドレスを空アドレスから削除し、空アドレス管理テーブル１４５の先頭アドレスをデータをライトした後のパケットバッファ１１１の空アドレスの先頭アドレスに更新する。
【０１５７】
ステップＳ５０４の後、制御はステップＳ５０２に戻る。
ステップＳ５０５において、チェーン管理メモリ監視部１５１は、チェーン管理メモリ１４２からパケットバッファ１１１の読み出し対象のデータのアドレスの次アドレスを読み出し、エラー（リードエラー）があるかチェックする。リードエラーがある場合、制御はステップＳ５０６に進み、リードエラーが無い場合、制御はステップＳ５０９に進む。
【０１５８】
ステップＳ５０６において、エラーアドレス以外次アドレス合計部１７１は、リードエラー箇所以外の格納値の合計を算出する。詳細には、エラーアドレス以外次アドレス合計部１７１は、チェーン管理メモリ１４２のリードエラーが検出されたアドレス以外の全アドレスに記憶された次アドレスを読み出し、リードエラーが検出されたアドレス以外の全アドレスに記憶された次アドレスの合計値を算出する。エラーアドレス以外次アドレス合計部１７１は、算出した合計値（リードエラー箇所以外の格納値の合計）を次アドレス算出部１８１に出力する。
【０１５９】
ステップＳ５０７において、次アドレス算出部１８１は、リードエラー箇所の本来の値（次アドレスの訂正値）、すなわちチェーン管理メモリ１４２のリードエラーが検出されたアドレスに記憶されていた次アドレスを算出する。詳細には、次アドレス算出部１８１は、アドレス合計部１６１により算出された合計値からエラーアドレス以外次アドレス合計部１７１により算出された合計値を減算して、次アドレスの訂正値を算出する。上式（２）のように、「リードエラー箇所の本来の値（次アドレスの訂正値）＝次アドレス値合計−リードエラー箇所以外の格納値の合計」となる。
【０１６０】
ステップＳ５０８において、次アドレス算出部１８１は、算出した次アドレスの訂正値を管理部１４１に出力する。管理部１４１は、チェーン管理メモリ１４２のリードエラーが検出されたアドレスに、受信した次アドレスの訂正値を記憶する。
【０１６１】
ステップＳ５０９において、管理部１４１は、以下の（１）〜（４）の処理により、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５を更新する。尚、メモリコントローラ１２１は、リード要求に応じて、チェーン管理メモリ１４２に記憶された次アドレス、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５の内容に基づいて、あるユーザのデータをパケットバッファ１１１から読み出し（リード）たとする。
【０１６２】
（１）チェーン管理メモリ１４２の更新
管理部１４１は、チェーン管理メモリ１４２において、リードしたアドレスの最終アドレス（パケットバッファ１１１からリードしたユーザの最後のデータのアドレス）の格納値（次アドレス）を空アドレスの先頭アドレスに設定する。すなわち、リードしたアドレスの最終アドレスに記憶される次アドレスを空アドレスの先頭アドレスとし、パケットバッファ１１１において空き領域を示すチェーン構成をリング状にする。
【０１６３】
（２）ユーザ管理テーブル１４３の更新
管理部１４１は、ユーザ管理テーブル１４３において、リードしたユーザの先頭アドレスと最終アドレスを更新する。
【０１６４】
（３）容量管理テーブル１４４の更新
管理部１４１は、容量管理テーブル１４４において、リードしたユーザの蓄積容量を、リードしたデータのサイズ（ワード）分だけ減算する。
【０１６５】
（４）空アドレス管理テーブル１４５の更新
管理部１４１は、空アドレス管理テーブル１４５において、リードしたアドレスを空アドレスに追加し、パケットバッファ１１１からリードしたデータのアドレスの最終アドレスを空アドレスの最終アドレスとする。
【０１６６】
ステップＳ５０９の後、制御はステップＳ５０２に戻る。
次に、パケットバッファ１１１に対するデータの読み書き（アクセス処理）が行われる時のパケットバッファ１１１、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５それぞれの状態を説明する。実施の形態では、チェーン管理メモリ１４２に記憶される次アドレスが重複しないようになっている。
【０１６７】
図２２〜３２は、実施の形態のメモリコントローラのアクセス処理を説明する図（その１〜その１１）である。図２２〜３２の順で、パケットバッファ１１１、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５それぞれの状態が変化する。
【０１６８】
図２２〜３２において、左矢印（←）で示す部分が最終アドレスを示す。管理部１４１は、最終アドレスに記憶される次アドレスとして先頭アドレスを設定する事により、チェーンがリング状になり次アドレスの重複を防止できる。また、空アドレスのチェーン接続のために次アドレスが更新された部分を黒丸（●）で示す。
【０１６９】
図２２：図２２は、伝送装置１０１の起動後の初期設定が行われた状態（初期設定状態）を示す。チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５は、管理部１４１により初期設定が行われる。パケットバッファ１１１およびチェーン管理メモリ１４２は、それぞれアドレス（ＡＤＲ）０〜２５５を有する。パケットバッファ１１１は、１ワード毎の領域に区切られ、パケットバッファ１１１の各アドレスには１ワード分のデータが記憶される。すなわち、パケットバッファ１１１の容量は、２５６ワードである。また、ユーザ数＝４とし、ユーザ１〜４をそれぞれＵＳＲ＿１〜ＵＳＲ＿４と示す。
【０１７０】
パケットバッファ１１１の各アドレスには、データは格納されていない。図２２のパケットバッファ１１１において、xxxxはデータが格納されていない空き領域を示す。
【０１７１】
チェーン管理メモリ１４２は、次アドレスを線状に示したチェーン構成を初期値とする。チェーン管理メモリ１４２のアドレス０〜２５４には、次アドレス＝１〜２５５がそれぞれ記憶される。チェーン管理メモリ１４２のアドレス２５５は、空アドレスの最終アドレスであり、次アドレスとして先頭アドレスである０を記憶している。
【０１７２】
ユーザ管理テーブル１４３において、ＵＳＲ＿１〜ＵＳＲ＿４それぞれの先頭アドレスおよび最終アドレスは０である。
【０１７３】
容量管理テーブル１４４において、ＵＳＲ＿１〜ＵＳＲ＿４それぞれの蓄積容量は０である。
【０１７４】
空アドレス管理テーブル１４５において、先頭アドレス＝０、最終アドレス＝２５５である。
【０１７５】
図２３：図２３は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３）がパケットバッファ１１１に書き込まれた状態を示す。
【０１７６】
パケットバッファ１１１のアドレス０〜２に、ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３がそれぞれ記憶される。
【０１７７】
チェーン管理メモリ１４２のアドレス０〜１に記憶される次アドレスはそれぞれ１〜２となる（ユーザ１のチェーンを更新）。また、チェーン管理メモリ１４２のアドレス２は、ユーザ１のデータの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス２には、次アドレスとしてユーザ１のデータの先頭アドレスである０が記憶される（ユーザ１のチェーンを更新）。さらに、チェーン管理メモリ１４２のアドレス２５５は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス２５５には、次アドレスとして空アドレスの先頭アドレスである３が記憶される。
【０１７８】
ユーザ管理テーブル１４３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは２となる。
【０１７９】
容量管理テーブル１４４のＵＳＲ＿１の蓄積容量は３となる。
パケットバッファ１１１のアドレス０〜２にデータが書き込まれたため、空アドレス管理テーブル１４５の先頭アドレスは３となる。
【０１８０】
図２４：図２４は、３ワード分のユーザ２のデータ（ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３）がパケットバッファ１１１に書き込まれた状態を示す。
【０１８１】
パケットバッファ１１１のアドレス３〜５に、ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３がそれぞれ記憶される。
【０１８２】
チェーン管理メモリ１４２のアドレス３〜４に記憶される次アドレスはそれぞれ４〜５となる（ユーザ２のチェーンを更新）。また、チェーン管理メモリ１４２のアドレス５は、ユーザ２のデータの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス５には、次アドレスとしてユーザ２のデータの先頭アドレスである３が記憶される（ユーザ２のチェーンを更新）。さらに、チェーン管理メモリ１４２のアドレス２５５は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス２５５には、次アドレスとして空アドレスの先頭アドレスである６が記憶される。
【０１８３】
ユーザ管理テーブル１４３のＵＳＲ＿２の先頭アドレスは３、最終アドレスは５となる。
【０１８４】
容量管理テーブル１４４のＵＳＲ＿２の蓄積容量は３となる。
パケットバッファ１１１のアドレス０〜５にデータが書き込まれたため、空アドレス管理テーブル１４５の先頭アドレスは６となる。
【０１８５】
図２５：図２５は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３）がパケットバッファ１１１から読み出された状態を示す。
【０１８６】
パケットバッファ１１１のアドレス０〜２は、ＵＳＲ＿１−Ｄ１〜ＵＳＲ＿１−Ｄ３が読み出されて空き領域となる。すなわち、アドレス０〜２は、空アドレスである。
【０１８７】
パケットバッファ１１１のアドレス０〜２が空アドレスになったので、チェーン管理メモリ１４２のアドレス２は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス２には、次アドレスとして空アドレスの先頭アドレスである６が記憶される。また、パケットバッファ１１１のアドレス０〜２が空アドレスになったので、チェーン管理メモリ１４２のアドレス２５５（＝図２４において空アドレス管理テーブル１４５の最終アドレス）には、次アドレスとして０が記憶される。
【０１８８】
ユーザ管理テーブル１４３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは０となる。
【０１８９】
容量管理テーブル１４４のＵＳＲ＿１の蓄積容量は０となる。
パケットバッファ１１１のアドレス０〜２は空き領域となったため、空アドレス管理テーブル１４５の最終アドレスは２となる。
【０１９０】
図２６：図２６は、３ワード分のユーザ３のデータ（ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３）がパケットバッファ１１１に書き込まれた状態を示す。
【０１９１】
パケットバッファ１１１のアドレス６〜８に、ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３がそれぞれ記憶される。
【０１９２】
チェーン管理メモリ１４２のアドレス６〜７に記憶される次アドレスはそれぞれ７〜８となる（ユーザ３のチェーンを更新）。また、チェーン管理メモリ１４２のアドレス８は、ユーザ３のデータの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス８には、次アドレスとしてユーザ３のデータの先頭アドレスである６が記憶される（ユーザ３のチェーンを更新）。さらに、チェーン管理メモリ１４２のアドレス２は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス２には、次アドレスとして空アドレスの先頭アドレスである９が記憶される。
【０１９３】
ユーザ管理テーブル１４３のＵＳＲ＿３の先頭アドレスは６、最終アドレスは８となる。
【０１９４】
容量管理テーブル１４４のＵＳＲ＿３の蓄積容量は３となる。
パケットバッファ１１１のアドレス３〜８にデータが書き込まれたため、空アドレス管理テーブル１４５の先頭アドレスは９となる。
【０１９５】
図２７：図２７は、３ワード分のユーザ４のデータ（ＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ３）がパケットバッファ１１１に書き込まれた状態を示す。
【０１９６】
パケットバッファ１１１のアドレス９〜１１に、ＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ３がそれぞれ記憶される。
【０１９７】
チェーン管理メモリ１４２のアドレス９〜１０に記憶される次アドレスはそれぞれ１０〜１１となる（ユーザ４のチェーンを更新）。また、チェーン管理メモリ１４２のアドレス１１は、ユーザ４のデータの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス１１には、次アドレスとしてユーザ４のデータの先頭アドレスである９が記憶される（ユーザ４のチェーンを更新）。さらに、チェーン管理メモリ１４２のアドレス２は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス２には、次アドレスとして空アドレスの先頭アドレスである１２が記憶される。
【０１９８】
ユーザ管理テーブル１４３のＵＳＲ＿４の先頭アドレスは９、最終アドレスは１１となる。
【０１９９】
容量管理テーブル１４４のＵＳＲ＿４の蓄積容量は３となる。
パケットバッファ１１１のアドレス３〜１１にデータが書き込まれたため、空アドレス管理テーブル１４５の先頭アドレスは１２となる。
【０２００】
図２８：図２８は、３ワード分のユーザ３のデータ（ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３）がパケットバッファ１１１から読み出された状態を示す。
【０２０１】
パケットバッファ１１１のアドレス６〜８は、ＵＳＲ＿３−Ｄ１〜ＵＳＲ＿３−Ｄ３が読み出されて空き領域となる。すなわち、アドレス６〜８は、空アドレスである。
【０２０２】
パケットバッファ１１１のアドレス６〜８が空アドレスになったので、チェーン管理メモリ１４２のアドレス８は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス８には、次アドレスとして空アドレスの先頭アドレスである１２が記憶される（空アドレスのチェーンを更新）。また、パケットバッファ１１１のアドレス６〜８が空アドレスになったので、チェーン管理メモリ１４２のアドレス２（＝図２７において空アドレス管理テーブル１４５の最終アドレス）には、次アドレスとして６が記憶される（空アドレスのチェーンを更新）。
【０２０３】
ユーザ管理テーブル１４３のＵＳＲ＿３の先頭アドレスは０、最終アドレスは０となる。
【０２０４】
容量管理テーブル１４４のＵＳＲ＿３の蓄積容量は０となる。
パケットバッファ１１１のアドレス６〜８は空き領域となったため、空アドレス管理テーブル１４５の最終アドレスは８となる。
【０２０５】
図２９：図２９は、３ワード分のユーザ２のデータ（ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３）がパケットバッファ１１１から読み出された状態を示す。
【０２０６】
パケットバッファ１１１のアドレス３〜５は、ＵＳＲ＿２−Ｄ１〜ＵＳＲ＿２−Ｄ３が読み出されて空き領域となる。すなわち、アドレス３〜５は、空アドレスである。
【０２０７】
パケットバッファ１１１のアドレス３〜５が空アドレスになったので、チェーン管理メモリ１４２のアドレス５は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス５には、次アドレスとして空アドレスの先頭アドレスである１２が記憶される（空アドレスのチェーンを更新）。また、パケットバッファ１１１のアドレス３〜５が空アドレスになったので、チェーン管理メモリ１４２のアドレス８（＝図２８において空アドレス管理テーブル１４５の最終アドレス）には、次アドレスとして３が記憶される（空アドレスのチェーンを更新）。
【０２０８】
ユーザ管理テーブル１４３のＵＳＲ＿３の先頭アドレスは０、最終アドレスは０となる。
【０２０９】
ユーザ管理テーブル１４３のＵＳＲ＿２の先頭アドレスは０、最終アドレスは０となる。
【０２１０】
容量管理テーブル１４４のＵＳＲ＿２の蓄積容量は０となる。
パケットバッファ１１１のアドレス３〜５は空き領域となったため、空アドレス管理テーブル１４５の最終アドレスは５となる。
【０２１１】
図３０：図３０は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ６）がパケットバッファ１１１に書き込まれた状態を示す。
【０２１２】
パケットバッファ１１１のアドレス１２〜１４に、ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ６がそれぞれ記憶される。
【０２１３】
チェーン管理メモリ１４２のアドレス１２〜１３に記憶される次アドレスはそれぞれ１３〜１４となる（ユーザ１のチェーンを更新）。また、チェーン管理メモリ１４２のアドレス１４は、ユーザ１のデータの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス１４には、次アドレスとしてユーザ１のデータの先頭アドレスである１２が記憶される（ユーザ１のチェーンを更新）。さらに、チェーン管理メモリ１４２のアドレス５は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス５には、次アドレスとして空アドレスの先頭アドレスである１５が記憶される。
【０２１４】
ユーザ管理テーブル１４３のＵＳＲ＿１の先頭アドレスは１２、最終アドレスは１４となる。
【０２１５】
容量管理テーブル１４４のＵＳＲ＿１の蓄積容量は３となる。
パケットバッファ１１１のアドレス１２〜１４にデータが書き込まれたため、空アドレス管理テーブル１４５の先頭アドレスは１５となる。
【０２１６】
図３１：図３１は、３ワード分のユーザ１のデータ（ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ５）がパケットバッファ１１１から読み出された状態を示す。
【０２１７】
パケットバッファ１１１のアドレス１２〜１４は、ＵＳＲ＿１−Ｄ４〜ＵＳＲ＿１−Ｄ６が読み出されて空き領域となる。すなわち、アドレス１２〜１４は、空アドレスである。
【０２１８】
パケットバッファ１１１のアドレス１２〜１４が空アドレスになったので、チェーン管理メモリ１４２のアドレス１４は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス１４には、次アドレスとして空アドレスの先頭アドレスである１５が記憶される（空アドレスのチェーンを更新）。また、パケットバッファ１１１のアドレス１２〜１４が空アドレスになったので、チェーン管理メモリ１４２のアドレス５（＝図３０において空アドレス管理テーブル１４５の最終アドレス）には、次アドレスとして１２が記憶される（空アドレスのチェーンを更新）。
【０２１９】
ユーザ管理テーブル１４３のＵＳＲ＿１の先頭アドレスは０、最終アドレスは０となる。
【０２２０】
容量管理テーブル１４４のＵＳＲ＿１の蓄積容量は０となる。
パケットバッファ１１１のアドレス１２〜１４は空き領域となったため、空アドレス管理テーブル１４５の最終アドレスは１４となる。
【０２２１】
図３２：図３２は、３ワード分のユーザ４のデータ（ＵＳＲ＿４−Ｄ４〜ＵＳＲ＿４−Ｄ５）がパケットバッファ１１１から読み出された状態を示す。
【０２２２】
パケットバッファ１１１のアドレス９〜１１は、ＵＳＲ＿４−Ｄ１〜ＵＳＲ＿４−Ｄ１が読み出されて空き領域となる。すなわち、アドレス９〜１１は、空アドレスである。
【０２２３】
パケットバッファ１１１のアドレス９〜１１が空アドレスになったので、チェーン管理メモリ１４２のアドレス１１は、空アドレスの最終アドレスである。よって、チェーン管理メモリ１４２のアドレス１１には、次アドレスとして空アドレスの先頭アドレスである１５が記憶される（空アドレスのチェーンを更新）。また、パケットバッファ１１１のアドレス９〜１１が空アドレスになったので、チェーン管理メモリ１４２のアドレス１４（＝図３１において空アドレス管理テーブル１４５の最終アドレス）には、次アドレスとして９が記憶される（空アドレスのチェーンを更新）。
【０２２４】
ユーザ管理テーブル１４３のＵＳＲ＿４の先頭アドレスは０、最終アドレスは０となる。
【０２２５】
容量管理テーブル１４４のＵＳＲ＿４の蓄積容量は０となる。
パケットバッファ１１１のアドレス９〜１１は空き領域となったため、空アドレス管理テーブル１４５の最終アドレスは１１となる。
【０２２６】
上述の実施の形態において、パケットバッファ１１１をアドレス管理する方法について説明したが、パケットバッファ１１１の複数アドレス分（複数ワード分）を１つのセグメントとして、セグメントをポインタとして管理する事も可能である。
【０２２７】
図３３は、実施の形態のチェーン管理メモリの変形例を示す図である。
図３３は、変形例におけるパケットバッファ１１１、チェーン管理メモリ１４２、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５を示す。
【０２２８】
パケットバッファ１１１の容量は、６５５３６ワードである。パケットバッファ１１１の１セグメントの容量は、２５６アドレス（２５６ワード）である。各セグメントには、セグメントを識別するポインタが割り当てられる。セグメント数は２５６であり、パケットバッファ１１１は、０〜２５５の２５６個のポインタを有する。例えば、アドレス0x0000〜0x00ffの２５６個のアドレス（領域）が１つのセグメントとして管理され、ポインタ＝０が割り当てられている。
【０２２９】
チェーン管理メモリ１４２は、パケットバッファ１１１のデータが記憶された領域のポインタおよび空き領域のポインタ（空アドレス）のチェーン構成を示す情報を記憶する。詳細には、チェーン管理メモリ１４２は、各アドレスに、当該アドレスに対応するパケットバッファ１１１のポインタに記憶されたデータに続くデータが記憶された領域のポインタ（次ポインタ）を記憶する。
【０２３０】
ユーザ管理テーブル１４３は、パケットバッファ１１１のユーザ毎のデータが記憶された領域のポインタを示す。詳細には、ユーザ管理テーブル１４３には、ユーザ、先頭ポインタ、および最終ポインタが対応付けて記述される。図３３において、ユーザ数は４であり、ユーザ管理テーブル１４３には、ユーザ１〜４（ＵＳＲ＿１〜ＵＳＲ＿４）それぞれの先頭ポインタと最終ポインタが記述される。
【０２３１】
容量管理テーブル１４４は、ユーザ毎のデータのサイズを示す。詳細には、容量管理テーブル１４４には、ユーザと蓄積容量とが対応付けて記述される。蓄積容量は、例えば、セグメント数が記述される。容量管理テーブル１４４には、ユーザ１〜４（ＵＳＲ＿１〜ＵＳＲ＿４）それぞれの蓄積容量が記述される。
【０２３２】
空アドレス管理テーブル１４５は、パケットバッファ１１１のデータが記憶されていない領域のポインタである空アドレスを示す。空アドレス管理テーブル１４５には、空アドレスの先頭ポインタおよび最終ポインタが記述される。
【０２３３】
実施の形態の伝送装置によれば、パケットバッファのアドレスとチェーン管理メモリのエラーアドレス以外の格納値の合計から、エラーアドレスに記憶されている本来の値を算出できる。よって、特許文献１に記載のように前段となるフレームを識別する前方識別子（Before Code）と復旧用識別子として次々フレームが格納されたアドレスを示す情報（Next2）を記憶するメモリが必要ないため、小規模な回路構成でパケットバッファ（チェーンメモリ）のチェーン構成を復旧できる。
【０２３４】
実施の形態の伝送装置によれば、リードエラー発生時にチェーン管理メモリを初期状態に戻さないため、パケットバッファに記憶しているパケットを廃棄する必要が無く、装置運用を継続することが可能となる。
【０２３５】
次に、チェーン管理メモリに記憶されている次アドレスの合計をバンク単位で計算する他の実施の形態を説明する。
【０２３６】
図３４は、他の実施の形態の伝送装置の構成図である。
伝送装置２０１は、パケットバッファ（チェーンメモリ）２１１およびメモリコントローラ２２１を有する。
【０２３７】
メモリコントローラ２２１は、ユーザ識別部２３１、管理部２４１、チェーン管理メモリ監視部２５１、アドレス合計部２６１、エラーアドレス以外次アドレス合計部２７１、および次アドレス算出部２８１を有する。管理部２４１は、チェーン管理メモリ２４２、ユーザ管理テーブル２４３、容量管理テーブル２４４、および空アドレス管理テーブル２４５を有する。また、管理部２４１は、記憶部（不図示）を有し、ユーザ管理テーブル２４３、容量管理テーブル２４４、および空アドレス管理テーブル２４５は、当該記憶部に記憶される。
【０２３８】
パケットバッファ２１１、ユーザ識別部２３１、管理部２４１、チェーン管理メモリ監視部２５１、およびアドレス合計部２６１は、パケットバッファ１１１、ユーザ識別部１３１、管理部１４１、チェーン管理メモリ監視部１５１、およびアドレス合計部１６１とそれぞれ同様の機能を有するため説明は省略する。
【０２３９】
チェーン管理メモリ２４２は、バンク単位で分割されており、１６個のバンク（バンク１〜バンク１６）を有する。バンクｉ（ｉ＝１〜１６）は、アドレス（ｉ＊１６−１６）〜アドレス（ｉ＊１６−１）を有する。
【０２４０】
エラーアドレス以外次アドレス合計部２７１は、エラーアドレス以外のバンク単位合計部２７２−ｉ（ｉ＝１〜１６）を有する。エラーアドレス以外のバンク単位合計部２７２−ｉは、計算対象をバンクｉとし、バンクｉが有するアドレス（但し、リードエラーが発生したアドレスは除く）に記憶されている次アドレスの合計を算出する。すなわち、エラーアドレス以外のバンク単位合計部２７２−ｉは、計算対象のバンクｉのアドレスにリードエラーが発生したアドレスが含まれる場合は、計算対象のバンクｉのアドレスのうちリードエラーが発生したアドレス以外のアドレスに記憶された次アドレスの合計を算出する。例えば、エラーアドレス以外のバンク単位合計部２７２−１は、バンク１が有するアドレスにリードエラーが発生していない場合、バンク１が有するアドレス０〜１５に記憶された次アドレスの合計を算出する。エラーアドレス以外のバンク単位合計部２７２−ｉは、算出した合計値を次アドレス算出部２８１に出力する。
【０２４１】
次アドレス算出部２８１は、エラーアドレス以外のバンク単位合計部２７２−ｉそれぞれで算出された合計値を合計し、チェーン管理メモリ２４２のリードエラーが発生したアドレス以外のアドレスに記憶された次アドレスの合計（リードエラー箇所以外の格納値の合計）とする。
【０２４２】
次アドレス算出部２８１は、チェーン管理メモリ２４２のリードエラーが検出されたアドレスに記憶されていた次アドレスを算出する。詳細には、次アドレス算出部２８１は、アドレス合計部２６１により算出された合計値からリードエラー箇所以外の格納値の合計を減算して、リードエラー箇所の本来の値（次アドレスの訂正値）を算出する。次アドレス算出部２８１は、次アドレスの訂正値を管理部２４１に出力する。管理部２４１は、チェーン管理メモリ２４２のリードエラーが検出されたアドレスに、受信した次アドレスの訂正値を記憶する。
【０２４３】
図３５は、他の実施の形態のチェーン管理メモリの更新方法のフローチャートである。
ステップＳ６０１〜Ｓ６０５の処理は、図２１のステップＳ５０１〜Ｓ５０５の処理とそれぞれ同様であるため説明は省略する。
【０２４４】
ステップＳ６０６において、エラーアドレス以外のバンク単位合計部２７２−ｉは、バンクｉのアドレス（但し、リードエラーが発生したアドレスを除く）の格納値（次アドレス）の合計を算出する。すなわち、１６個のバンクそれぞれのエラーアドレス以外のアドレスの格納値の合計が並列に計算される。エラーアドレス以外のバンク単位合計部２７２−ｉは、算出した合計値を次アドレス算出部２８１に出力する。
【０２４５】
ステップＳ６０７において、次アドレス算出部２８１は、リードエラー箇所以外の格納値の合計を算出する。詳細には、次アドレス算出部２８１は、エラーアドレス以外のバンク単位合計部２７２−ｉそれぞれで算出された合計値を合計し、チェーン管理メモリ２４２のリードエラーが発生したアドレス以外のアドレスに記憶された次アドレスの合計（リードエラー箇所以外の格納値の合計）とする。
【０２４６】
ステップＳ６０８〜Ｓ６１０の処理は、図２１のステップＳ５０７〜Ｓ５０９の処理と同様であるため説明は省略する。
【０２４７】
他の実施の形態によれば、バンク毎にチェーン管理メモリ２４２の格納値の合計を並列で計算するため、処理速度を向上できる。
【０２４８】
図３６は、他の実施の形態のチェーン管理メモリのリードエラー発生時の例を示す図である。
【０２４９】
リードエラーの発生した場合、パケットバッファ２１１、チェーン管理メモリ２４２、ユーザ管理テーブル２４３、容量管理テーブル２４４、および空アドレス管理テーブル２４５は、図３６に示す状態となっている。図１８では、チェーン管理メモリ１４２のアドレス１にリードエラーが発生している。尚、パケットバッファ３１１の容量は２５６ワードである。
【０２５０】
チェーン管理メモリ２４２のアドレス０、２〜２５４、２５５には、それぞれ次アドレスとして１、３〜２５５、０が記憶されている。チェーン管理メモリ２４２のアドレス１にリードエラーが発生したため、アドレス１に記憶されている次アドレスの値は不明である。
【０２５１】
図３７は、他の実施の形態のリードエラー箇所以外の次アドレスのバンク毎の合計値を示す図である。
【０２５２】
図３６に示すように、チェーン管理メモリ２４２のアドレス１でリードエラーが発生し、チェーン管理メモリ２４２のアドレス０、２〜２５４、２５５には、それぞれ、１、３〜２５５、０が記憶されているとする。
【０２５３】
アドレス１がリードエラーであるため、アドレス０〜２５５のうちアドレス１以外のアドレスに記憶されている次アドレスをバンク毎に合計すると、図３７に示すようになる。
【０２５４】
チェーン管理メモリ２４２のバンク１（アドレス０〜１５：但し、アドレス１は除く）に記憶された次アドレス（格納値）の合計は１３４である。
【０２５５】
チェーン管理メモリ２４２のバンク２（アドレス１６〜３１）に記憶された次アドレス（格納値）の合計は３９２である。
【０２５６】
チェーン管理メモリ２４２のバンク３（アドレス３２〜４７）に記憶された次アドレス（格納値）の合計は６４８である。
【０２５７】
チェーン管理メモリ２４２のバンク４（アドレス４８〜６３）に記憶された次アドレス（格納値）の合計は９０４である。
【０２５８】
チェーン管理メモリ２４２のバンク５（アドレス６４〜７９）に記憶された次アドレス（格納値）の合計は１１６０である。
【０２５９】
チェーン管理メモリ２４２のバンク６（アドレス８０〜９５）に記憶された次アドレス（格納値）の合計は１４１６である。
【０２６０】
チェーン管理メモリ２４２のバンク７（アドレス９６〜１１１）に記憶された次アドレス（格納値）の合計は１６７２である。
【０２６１】
チェーン管理メモリ２４２のバンク８（アドレス１１２〜１２７）に記憶された次アドレスの合計は１９２８である。
【０２６２】
チェーン管理メモリ２４２のバンク９（アドレス１２８〜１４３）に記憶された次アドレス（格納値）の合計は２１８４である。
【０２６３】
チェーン管理メモリ２４２のバンク１０（アドレス１４４〜１５９）に記憶された次アドレス（格納値）の合計は２４４０である。
【０２６４】
チェーン管理メモリ２４２のバンク１１（アドレス１６０〜１７５）に記憶された次アドレス（格納値）の合計は２６９６である。
【０２６５】
チェーン管理メモリ２４２のバンク１２（アドレス１７６〜１９１）に記憶された次アドレス（格納値）の合計は２９５２である。
【０２６６】
チェーン管理メモリ２４２のバンク１３（アドレス１９２〜２０７）に記憶された次アドレス（格納値）の合計は３２０８である。
【０２６７】
チェーン管理メモリ２４２のバンク１４（アドレス２０８〜２２３）に記憶された次アドレス（格納値）の合計は３４６４である。
【０２６８】
チェーン管理メモリ２４２のバンク１５（アドレス２２４〜２３９）に記憶された次アドレス（格納値）の合計は３７２０である。
【０２６９】
チェーン管理メモリ２４２のバンク１６（アドレス２４０〜２５５）に記憶された次アドレス（格納値）の合計は３７２０である。
【０２７０】
次アドレス算出部２８１は、各バンクのエラー箇所以外の格納値の合計を算出し、算出した各バンクのエラー箇所以外の格納値の合計を合計して全バンクのエラー箇所以外の格納値の合計値を算出すると、３２６３８となる。
【０２７１】
パケットバッファ２１１の容量は２５６ワードであり、パケットバッファ２１１のアドレスの合計、すなわち、ステップＳ６０１で算出されるチェーン管理メモリ２４２の格納値の合計（次アドレス値合計）は３２６４０である。
【０２７２】
次アドレス算出部２８１は、次アドレス値合計からエラー箇所以外の格納値の合計値を減算すると、３２６４０−３２６３８＝２となり、チェーン管理メモリ２４２のアドレス１の本来の値は２と算出される。よって、次アドレスの訂正値＝２となり、リードエラーが発生したチェーン管理メモリ２４２のアドレス１に次アドレスとして２が記憶され、チェーンが復旧される。
【０２７３】
上述のパケットバッファ１１１，２１１およびメモリコントローラ１２１，２２１は、ハードウェア回路によって実現可能であるが、これに限らず、プログラムをコンピュータで実行することによって上述の処理を実現してもよい。
【０２７４】
図３８は、情報処理装置（コンピュータ）の構成図である。
実施の形態の伝送装置１０１および他の実施の形態の伝送装置２０１は、例えば、図３８に示すような情報処理装置（コンピュータ）１によっても実現可能である。
【０２７５】
情報処理装置１は、Central Processing Unit（ＣＰＵ）２、メモリ３、入力装置４、出力装置５、記憶部６、記録媒体駆動部７、及びネットワーク接続装置８を備え、それらはバス９により互いに接続されている。
【０２７６】
ＣＰＵ２は、情報処理装置１全体を制御する中央処理装置（プロセッサ）である。ＣＰＵ２は、メモリコントローラ１１１，２１１として動作する。
【０２７７】
メモリ３は、プログラム実行の際に、記憶部６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ＲＯＭ)やRandom Access Memory(ＲＡＭ)等のメモリである。ＣＰＵ２は、メモリ３を利用してプログラムを実行することにより、上述した各種処理を実行する。メモリ３は、パケットバッファ１１１，２１１、チェーン管理メモリ１４２，２４２に対応する。また、メモリ３は、ユーザ管理テーブル１４３、容量管理テーブル１４４、および空アドレス管理テーブル１４５を記憶する記憶部に対応する。
【０２７８】
入力装置４は、ユーザ又はオペレータからの指示や情報の入力、情報処理装置１で用いられるデータの取得等に用いられる。入力装置４は、例えば、キーボード、マウス、タッチパネル、カメラ、またはセンサ等である。
【０２７９】
出力装置５は、ユーザ又はオペレータへの問い合わせや処理結果を出力したり、ＣＰＵ２による制御により動作する装置である。出力装置５は、例えば、ディスプレイ、またはプリンタ等である。
【０２８０】
記憶部６は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置１は、記憶部６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０２８１】
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(ＣＤ−ＲＯＭ)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【０２８２】
ネットワーク接続装置８は、Local Area Network（ＬＡＮ）やWide Area Network（ＷＡＮ）等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インターフェースである。ネットワーク接続装置８は、通信ネットワークを介して接続された装置へデータの送信または通信ネットワークを介して接続された装置からデータを受信する。
【０２８３】
なお、情報処理装置１が図３８のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、ユーザ又はオペレータからの指示や情報の入力を行わない場合は、入力装置４を省略してもよく、ユーザ又はオペレータへの問い合わせや処理結果の出力を行わない場合は、出力装置５を省略してもよい。情報処理装置１が可搬記録媒体１０にアクセスしない場合は、記録媒体駆動部７を省略してもよい。
【０２８４】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
複数の領域に区切られたチェーンメモリを有する伝送装置に具備されるメモリコントローラであって、
前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶する管理メモリと、
前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出する第１の合計部と、
前記管理メモリから読み出されたアドレスのエラーを検出するエラー検出部と、
前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出する第２の合計部と、
前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する算出部と、
を備えるメモリコントローラ。
（付記２）
前記算出部は、前記第１の合計値から前記第２の合計値を減算することにより前記訂正値を算出する付記１記載のメモリコントローラ。
（付記３）
第１の合計部は、前記管理メモリに記憶された前記複数のアドレスの合計値を算出することにより前記第１の合計値を算出する付記１または２記載のメモリコントローラ。
（付記４）
前記管理メモリに記憶された前記複数のアドレスが重複しないように管理する管理部をさらに備える付記１乃至３のいずれか１項に記載のメモリコントローラ。
（付記５）
前記管理部は、前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリのユーザのデータを記憶した最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶した先頭の領域を示すアドレスに設定する付記４記載のメモリコントローラ。
（付記６）
前記管理部は、前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリの前記ユーザのデータを記憶していない最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶していない先頭の領域を示すアドレスに設定する付記４または５記載のメモリコントローラ。
（付記７）
複数の領域に区切られたチェーンメモリを有する伝送装置に具備されるメモリコントローラが実行する制御方法であって
前記メモリコントローラが有する管理メモリが、前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶し、
前記メモリコントローラが有する第１の合計部が、前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出し、
前記メモリコントローラが有するエラー検出部が、前記管理メモリから読み出されたアドレスのエラーを検出し、
前記メモリコントローラが有する第２の合計部が、前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出し、
前記メモリコントローラが有する算出部が、前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する
制御方法。
（付記８）
前記算出部は、前記第１の合計値から前記第２の合計値を減算することにより前記訂正値を算出する付記７記載の制御方法。
（付記９）
第１の合計部は、前記管理メモリに記憶された前記複数のアドレスの合計値を算出することにより前記第１の合計値を算出する付記７または８記載の制御方法。
（付記１０）
前記メモリコントローラが有する管理部が、前記管理メモリに記憶された前記複数のアドレスが重複しないように管理する付記７乃至９のいずれか１項に記載の制御方法。
（付記１１）
前記管理部は、前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリのユーザのデータを記憶した最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶した先頭の領域を示すアドレスに設定する付記１０記載の制御方法。
（付記１２）
前記管理部は、前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリの前記ユーザのデータを記憶していない最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶していない先頭の領域を示すアドレスに設定する付記１０または１１記載の制御方法。
（付記１３）
複数の領域に区切られたチェーンメモリを有するコンピュータに、
前記コンピュータが有する管理メモリに、前記複数の領域それぞれに続く領域を示す複数のアドレスを記憶させ、
前記複数の領域それぞれを示す複数のアドレスの第１の合計値を算出し、
前記管理メモリから読み出されたアドレスのエラーを検出し、
前記管理メモリに記憶された前記複数のアドレスのうち、前記エラーが検出されたアドレス以外の複数のアドレスの第２の合計値を算出し、
前記第１の合計値と前記第２の合計値とに基づいて、前記エラーが検出されたアドレスの訂正値を算出する
処理を実行させるプログラム。
（付記１４）
前記訂正値を算出する処理は、前記第１の合計値から前記第２の合計値を減算することにより前記訂正値を算出する付記７記載のプログラム。
（付記１５）
前記第１の合計値算出する処理は、前記管理メモリに記憶された前記複数のアドレスの合計値を算出することにより前記第１の合計値を算出する付記１３または１４記載のプログラム。
（付記１６）
前記管理メモリに記憶された前記複数のアドレスが重複しないように管理する付記１３乃至１５のいずれか１項に記載のプログラム。
（付記１７）
前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリのユーザのデータを記憶した最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶した先頭の領域を示すアドレスに設定する付記１６記載のプログラム。
（付記１８）
前記管理メモリに記憶された前記複数のアドレスにおいて、前記チェーンメモリの前記ユーザのデータを記憶していない最後の領域に続く領域を示すアドレスを前記ユーザのデータを記憶していない先頭の領域を示すアドレスに設定する付記１６または１７記載のプログラム。
【符号の説明】
【０２８５】
１０１    伝送装置
１１１    パケットバッファ
１２１    メモリコントローラ
１３１    ユーザ識別部
１４１    管理部
１４２    チェーン管理メモリ
１４３    ユーザ管理テーブル
１４４    容量管理テーブル
１４５    空アドレス管理テーブル
１５１    チェーン管理メモリ監視部
１６１    アドレス合計部
１７１    エラーアドレス以外次アドレス合計部
１８１    次アドレス算出部
２０１    伝送装置
２１１    パケットバッファ
２２１    メモリコントローラ
２３１    ユーザ識別部
２４１    管理部
２４２    チェーン管理メモリ
２４３    ユーザ管理テーブル
２４４    容量管理テーブル
２４５    空アドレス管理テーブル
２５１    チェーン管理メモリ監視部
２６１    アドレス合計部
２７１    エラーアドレス以外次アドレス合計部
２８１    次アドレス算出部
【図１】
2020004064.tif 000003
【図２】
2020004064.tif 000004
【図３】
2020004064.tif 000005
【図４】
2020004064.tif 000006
【図５】
2020004064.tif 000007
【図６】
2020004064.tif 000008
【図７】
2020004064.tif 000009
【図８】
2020004064.tif 000010
【図９】
2020004064.tif 000011
【図１０】
2020004064.tif 000012
【図１１】
2020004064.tif 000013
【図１２】
2020004064.tif 000014
【図１３】
2020004064.tif 000015
【図１４】
2020004064.tif 000016
【図１５】
2020004064.tif 000017
【図１６】
2020004064.tif 000018
【図１７】
2020004064.tif 000019
【図１８】
2020004064.tif 000020
【図１９】
2020004064.tif 000021
【図２０】
2020004064.tif 000022
【図２１】
2020004064.tif 000023
【図２２】
2020004064.tif 000024
【図２３】
2020004064.tif 000025
【図２４】
2020004064.tif 000026
【図２５】
2020004064.tif 000027
【図２６】
2020004064.tif 000028
【図２７】
2020004064.tif 000029
【図２８】
2020004064.tif 000030
【図２９】
2020004064.tif 000031
【図３０】
2020004064.tif 000032
【図３１】
2020004064.tif 000033
【図３２】
2020004064.tif 000034
【図３３】
2020004064.tif 000035
【図３４】
2020004064.tif 000036
【図３５】
2020004064.tif 000037
【図３６】
2020004064.tif 000038
【図３７】
2020004064.tif 000039
【図３８】
2020004064.tif 000040