(57)【特許請求の範囲】
【請求項１】
バッファ内の複数の領域のうちの指定された領域にデータを書き込む書込手段と、
前記複数の領域のうちの指定された領域からデータを読み出す読出手段と、
前記書込手段に対してデータを書き込むべき領域を指定し、前記読出手段に対してデータを読み出すべき領域を指定する指定手段と、
前記指定手段が行った指定が、指定されるべきではない領域の指定である誤指定であるか否かを判定する判定手段と、
前記判定手段が誤指定であると判定した回数を示す第１のカウンタと、
前記判定手段が誤指定であると判定した後に行われかつ前記判定手段が誤指定ではないと判定した指定である復旧処理中の指定が行われた回数と前記複数の領域の個数との差、を示す第２のカウンタと、
前記判定手段が誤指定であると判定した場合に、前記第１のカウンタの示す回数と前記第２のカウンタの示す差とが同一になるまで、前記復旧処理中の指定が行われるごとに当該復旧処理中の指定によって指定された領域を示す情報を記憶する指定領域記憶手段と、
前記第１のカウンタの示す回数と前記第２のカウンタの示す差とが同一になったときに、前記指定領域記憶手段が記憶している前記情報が示していない領域を、前記判定手段によって誤指定であると判定された指定が行われた際に指定されるべきであった領域として検出する復旧処理手段と
を備えるバッファメモリ装置。
【請求項２】
前記復旧処理手段は、検出した領域を前記指定手段に通知し、
前記指定手段は、前記復旧処理手段から通知された領域を指定の対象に加える
請求項１記載のバッファメモリ装置。
【請求項３】
前記複数の領域のそれぞれが前記書込手段によってデータが書き込まれかつ当該データが前記読出手段によって読み出されていないデータ格納領域であるか否かを示す情報を記憶する格納記憶手段を備え、
前記判定手段は、前記指定手段が指定した領域に前記書込手段がデータを書き込むときは、当該指定された領域がデータ格納領域であると前記格納記憶手段が記憶している前記情報が示す場合に、当該指定は誤指定であると判定し、前記指定手段が指定した領域から前記読出手段がデータを読み出すときは、当該指定された領域がデータ格納領域ではないと前記情報が示す場合に、当該指定は誤指定であると判定する
請求項１または２記載のバッファメモリ装置。
【請求項４】
バッファを有するバッファメモリ装置に、当該バッファにデータをバッファリングさせるバッファリング方法であって、
前記バッファ内の複数の領域のうちのデータを書き込むべき領域およびデータを読み出すべき領域の指定が、指定されるべきではない領域の指定である誤指定であるか否かを判定する判定ステップと、
誤指定であると判定された指定の回数が、誤指定であると判定された指定の後に行われかつ誤指定ではないと判定された指定である復旧処理中の指定の行われた回数と前記複数の領域の個数との差と同一になるまで、当該復旧処理中の指定が行われるごとに当該復旧処理中の指定によって指定された領域を示す情報の記憶を更新する指定領域記憶ステップと、
前記回数が前記差と同一になったときに、前記指定領域記憶ステップによって更新されている前記情報が示していない領域を、誤指定であると判定された指定が行われた際に指定されるべきであった領域として検出する復旧処理ステップと
を備えるバッファリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトエラーにより使用できなくなったバッファを復旧する技術に関する。
【背景技術】
【０００２】
近年、半導体デバイスの微細化、高集積化、及び、低電圧化等が進み、半導体デバイスにソフトエラーが発生する確率が高くなってきている。
【０００３】
ここで、ソフトエラーとは、ハードウェアに異常が見られない一過性の不良をいう。例えば、メモリに記憶されているデータが書き換えられていたようなエラーであって、そのメモリ素子には異常がなく、データを再度書き込めば正常に動作するようなエラーである。
【０００４】
パケットを転送するスイッチ等の通信装置は、受信したパケットをバッファメモリに蓄積し、ＱｏＳ（Quality of Service）等を考慮した順序でパケットをバッファメモリから読み出して送出している（特許文献１等参照）。
【０００５】
このような通信装置において、受信したパケットをバッファメモリに書込む際にソフトエラーが発生した場合は、未だ送出していないパケットに上書きしてしまう場合等が生じ得る。また、バッファメモリからパケットを読み出す際にソフトエラーが発生した場合は、一度送出したパケットを再送出してしまう場合等が生じ得る。
【０００６】
このようなソフトエラーは、いつ起こるか分からず、また、発生頻度もそう多くはない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−２４０７１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、上述のような通信装置等に搭載されているメモリ素子及びＦＰＧＡ（Field Programmable Gate Array）等にソフトエラーが発生した場合には、通信に少なからず影響を及ぼすこととなる。
【０００９】
そこで、本発明は、バッファメモリを用いた装置において、バッファメモリへのデータの読み書き時にソフトエラーが発生した場合に、発生したソフトエラーに起因する不都合を回避することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するバッファメモリ装置は、バッファ内の複数の領域のうちの指定された領域にデータを書き込む書込手段と、前記複数の領域のうちの指定された領域からデータを読み出す読出手段と、前記書込手段に対してデータを書き込むべき領域を指定し、前記読出手段に対してデータを読み出すべき領域を指定する指定手段と、前記指定手段が行った指定が、指定されるべきではない領域の指定である誤指定であるか否かを判定する判定手段と、前記判定手段が誤指定であると判定した回数を示す第１のカウンタと、前記判定手段が誤指定であると判定した後に行われかつ前記判定手段が誤指定ではないと判定した指定である復旧処理中の指定が行われた回数と前記複数の領域の個数との差、を示す第２のカウンタと、前記判定手段が誤指定であると判定した場合に、前記第１のカウンタの示す回数と前記第２のカウンタの示す差とが同一になるまで、前記復旧処理中の指定が行われるごとに当該復旧処理中の指定によって指定された領域を示す情報を記憶する指定領域記憶手段と、前記第１のカウンタの示す数と前記第２のカウンタの示す数とが同一になったときに、前記指定領域記憶手段が記憶している前記情報が示していない領域を、前記判定手段によって誤指定であると判定された指定が行われた際に指定されるべきであった領域として検出する復旧処理手段と、を有する。
【発明の効果】
【００１１】
上記構成のバッファメモリ装置は、バッファメモリへのデータの読み書き時にソフトエラーが発生した場合に、発生したソフトエラーに起因する不都合を回避することができる。
【図面の簡単な説明】
【００１２】
【図１】パケット転送装置の機能的構成の例を示すブロック図である。
【図２】パケットバッファ及びテーブル等の関連を示す図である。
【図３】パケットの書込み及び読み出しの処理を示す図である。
【図４】エラーアドレスが発生した場合を示す図である。
【図５】エラーアドレスを検出する方法を示す図である。
【図６】復旧処理部が復旧処理の開始を依頼された時の、各テーブルの状態を示す図である。
【図７】復旧処理が開始されて、優先制御部が送信部にパケットを送信させたときの各テーブルの状態を示す図である。
【図８】復旧処理部が復旧処理を終了した時の、各テーブルの状態を示す図である。
【図９】パケット転送装置がパケットを受信した場合の処理のフローチャートである。
【図１０】パケット転送装置のパケットの送信処理及び復旧処理のフローチャートである。
【図１１】エラーアドレスが検出されたらパケットを破棄する場合の処理のフローチャートである。
【発明を実施するための形態】
【００１３】
＜実施形態＞
実施形態のバッファメモリ装置は、バッファメモリをアクセスする際に、アクセスしようとするアドレスが本来アクセスすべきではないアドレス（以下、「エラーアドレス」という。）であることを検出する。
【００１４】
また、実施形態のバッファメモリ装置は、当該バッファメモリ装置の処理を止めることなく、エラーアドレスに変わってしまった元のアドレスを見つけて再び使用する。
【００１５】
例えば、バッファメモリを複数の領域に分割し、それぞれの領域を空き領域としてキューを用いて管理するようなバッファ管理方法である。具体的には、メモリを使用するアプリケーションにキューの先頭からアドレスを取り出して渡す。アプリケーションが使用した後に、そのアドレスを返却してもらってキューの最後尾につなぐ。
【００１６】
このようなバッファ管理方法においては、キューの先頭から取り出した空き領域のアドレスがエラーアドレスであると分かった場合は、そのエラーアドレスをアプリケーションには渡さずに廃棄する。
【００１７】
しかし、エラーアドレスがソフトエラーによって起こった場合には、領域自体にハード的な問題がないにもかかわらず、エラーアドレスに変わってしまった元のアドレスが指す領域は使用されなくなってしまう。元のアドレスが、キューにつながっていないからである。
【００１８】
実施形態のバッファメモリ装置は、このようなエラーアドレスに変わってしまった元のアドレスを見つけ出し、見つけ出したアドレスが指している領域を再度使用できるようにするものである。
【００１９】
通常、バッファメモリはそのサイズに限度があることから、エラーによって使用できなくなる領域は少ないほうがよい。ソフトエラーによってエラーアドレスとなった場合には、そのエラーアドレスの元のアドレスが指す領域は正常に動作するメモリであるにもかかわらず使用されておらず、バッファメモリを有効に活用できていないこととなる。
【００２０】
実施形態のバッファメモリ装置においては、このような一時的なエラーが生じたバッファメモリを再度使用することが可能となる。
【００２１】
以下、スイッチ等のパケット転送装置で用いられているバッファメモリ装置を例に説明する。
【００２２】
＜機能＞
以下、図１を用いて、パケット転送装置１００の機能について説明する。
【００２３】
図１は、パケット転送装置１００の機能的構成の例を示すブロック図である。
【００２４】
パケット転送装置１００は、受信したパケットをバッファメモリに蓄積し、ＱｏＳ等を考慮した順序でパケットをバッファメモリから読み出して送信する。すなわち、スイッチ等が通常有する転送機能を有するが、図１においては、バッファメモリに関係する機能部を中心に記載している。また、図１において、点線矢印はパケットの流れを示す。
【００２５】
パケット転送装置１００は、受信部１１０、空領域管理部１２０、優先制御部１３０、送信部１４０、復旧処理部１５０、パケットバッファ１６０、及び、バッファ使用状態テーブル１６１、空領域管理テーブル１２１、送信順管理テーブル１３１、復旧テーブル１５１、復旧カウンタ１５２及びエラーカウンタ１５３を有する。
【００２６】
受信部１１０は、パケット１０を受信し、パケットバッファ１６０に記憶させる機能を有する。パケット１０を記憶させるパケットバッファ１６０内のアドレスを、受信部１１０は空領域管理部１２０から取得する。
【００２７】
また、送信部１４０は、パケットバッファ１６０に記憶されているパケット１１を読み出して送信する機能を有する。パケット１１を読み出すパケットバッファ１６０内のアドレスを、送信部１４０は優先制御部１３０から渡される。
【００２８】
尚、パケット転送装置１００は、複数の送受信ポートを備え、受信ポートの数の受信部１１０を有し、又、送信ポートの数の送信部１４０を有する。実施形態では、説明の便宜上、１つの受信部１１０及び１つの送信部１４０を用いて説明する。
【００２９】
空領域管理部１２０は、パケットバッファ１６０内の空き領域を管理する機能を有する。空領域管理部１２０は、空領域管理テーブル１２１を用いて空き領域を管理する。
【００３０】
また、優先制御部１３０は、バッファ使用状態テーブル１６１に記憶されているパケットを、どのような順序で送信するかを管理する機能を有する。パケットを送信する順序は、各パケットが属する通信に保障すべき帯域等に応じて優先制御部１３０が定める。優先制御部１３０は、送信順管理テーブル１３１を用いてパケットの送信順を管理する。
【００３１】
空領域管理部１２０及び優先制御部１３０が、それぞれ空領域管理テーブル１２１及び送信順管理テーブル１３１を用いてパケットバッファ１６０を使用する方法については、＜パケットバッファの使用方法＞の項で説明する。
【００３２】
また、空領域管理部１２０及び優先制御部１３０は、パケットバッファ１６０を使用する際に、エラーアドレスを検出する機能を有する。空領域管理部１２０及び優先制御部１３０が、エラーアドレスを検出する方法については、＜エラーアドレス検出方法＞の項で説明する。
【００３３】
復旧処理部１５０は、エラーアドレスとなった元のアドレス（以下、単に「元のアドレス」という。）を見つけ出して、空き領域とする処理（以下、「復旧処理」という。）を実行する機能を有する。復旧処理部１５０は、空領域管理部１２０又は優先制御部１３０が、エラーアドレスを検出した場合に通知を受けて、復旧処理を開始する。復旧処理は、主に優先制御部１３０と連携して行う。復旧処理については、＜復旧方法＞の項で説明する。
【００３４】
パケットバッファ１６０は、パケットを一時的に記憶するメモリであり、ＲＡＭ（Random Access Memory）等で構成される。
【００３５】
バッファ使用状態テーブル１６１は、パケットバッファ１６０の使用状態を記憶しておくテーブルである。
【００３６】
復旧テーブル１５１、復旧カウンタ１５２及びエラーカウンタ１５３は、復旧処理において復旧処理部１５０によって使用されるテーブルである。
【００３７】
ここで、パケットバッファ１６０、バッファ使用状態テーブル１６１、復旧テーブル１５１、復旧カウンタ１５２及びエラーカウンタ１５３について、図２を用いて説明する。
【００３８】
図２は、パケットバッファ１６０及びテーブル等の関連を示す図である。
【００３９】
パケットバッファ１６０は、所定サイズの領域に分割されている（以下、分割された１領域を「分割領域」という。）。実施形態では、パケットバッファ１６０は１６個の分割領域で構成されているものとする。以下、それぞれの領域を、パケットバッファ［１］〜パケットバッファ[１６]といい、添字の「１」〜「１６」をそれぞれ領域の番号とする。
【００４０】
バッファ使用状態テーブル１６１は、パケットバッファ１６０の分割領域の数と同じ１６個の配列、例えば、ビット配列を有する。以下、この配列の要素を、バッファ使用状態テーブル［１］〜バッファ使用状態テーブル［１６］という。バッファ使用状態テーブル１６１の配列の要素の番号は、パケットバッファ１６０の分割領域の番号と対応している。
【００４１】
バッファ使用状態テーブル[１]が「１」の場合は、パケットバッファ[１]にパケットが記憶されていることを示す。一方、「０」の場合は、パケットバッファ[１]は空領域であることを示す。バッファ使用状態テーブル[２]〜バッファ使用状態テーブル［１６］も同様である。
【００４２】
また、復旧テーブル１５１も、パケットバッファ１６０の分割領域の数と同じ１６個の配列、例えば、ビット配列を有する。以下、この配列の要素を、復旧テーブル［１］〜復旧テーブル［１６］という。復旧テーブル１５１の配列の要素の番号は、パケットバッファ１６０の分割領域の番号と対応している。
【００４３】
復旧テーブル１５１は復旧処理において使用され、復旧テーブル[１]が「１」の場合は、パケットバッファ[１]が復旧処理中に使用されたことを示す。一方、「０」の場合は、パケットバッファ[１]が復旧処理中に未だ使用されていないことを示す。すなわち、元のアドレスである可能性があることを示す。復旧テーブル[２]〜復旧テーブル［１６］も同様である。
【００４４】
復旧処理が開始される時は、復旧テーブル［１］〜復旧テーブル［１６］にそれぞれ「０」が初期値として設定される。
【００４５】
エラーカウンタ１５３及び復旧カウンタ１５２は復旧処理において使用される。
【００４６】
エラーカウンタ１５３は、検出されたエラーアドレスの数を記憶しておく機能を有する。エラーアドレスの検出回数は、空領域管理部１２０又は優先制御部１３０がエラーアドレスを検出したときに設定する。
【００４７】
復旧カウンタ１５２は、復旧テーブル［１］〜復旧テーブル［１６］のうち、「１」が設定されている配列の要素の数を示す。復旧カウンタ１５２の数は、復旧処理部１５０が設定する。
【００４８】
エラーカウンタ１５３及び復旧カウンタ１５２は、それぞれパケットバッファ１６０の分割領域の数を記憶できるだけのサイズを備える。例えば、分割領域の数が１６個である場合は、４ビットより大きなサイズであればよい。
【００４９】
復旧カウンタ１５２には、復旧処理が開始される時に分割領域の数、「１６」が初期値として設定される。エラーカウンタ１５３には、パケット転送装置１００が起動された時、又は、復旧処理が終了した時に「０」が設定される。尚、復旧処理が開始された時は、エラーカウンタ１５３に「１」が設定されている。
【００５０】
＜パケットバッファの使用方法＞
以下、空領域管理部１２０及び優先制御部１３０が、それぞれ空領域管理テーブル１２１及び送信順管理テーブル１３１を用いてパケットバッファ１６０を使用する方法について図３を用いて説明する。
【００５１】
図３は、パケットの書込み及び読み出しの処理を示す図である。
【００５２】
空領域管理テーブル１２１及び送信順管理テーブル１３１は、それぞれパケットバッファ１６０の分割領域の数分の配列を有し、ＦＩＦＯ（First In First Out）方式でパケットバッファ１６０のアドレスを管理する。実施形態では、パケットバッファ１６０の分割領域のアドレスは、分割領域の番号で示すものとする。
【００５３】
空領域管理テーブル１２１及び送信順管理テーブル１３１のそれぞれの配列の要素には、パケットバッファ１６０の分割領域のアドレス、すなわち、分割領域の番号が設定される。従って、実施形態では、それぞれの配列の要素は、パケットバッファ１６０の分割領域の数を記憶できるだけのサイズを備える。
【００５４】
以下、空領域管理テーブル１２１の配列の要素を、空領域管理テーブル［１］〜空領域管理テーブル［１６］という。また、送信順管理テーブル１３１の配列の要素を、送信順管理テーブル［１］〜送信順管理テーブル［１６］という。尚、空領域管理テーブル［１］及び送信順管理テーブル［１］が、それぞれの配列の先頭である。
【００５５】
空領域管理テーブル１２１はＦＩＦＯ方式であることから、空領域管理テーブル［１］が読み出されたら、空領域管理テーブル［２］〜空領域管理テーブル［１６］に設定されている内容が、空領域管理テーブル［１］〜空領域管理テーブル［１５］に設定される。従って、常に、空領域管理テーブル［１］が読み出される。送信順管理テーブル１３１も同様である。
【００５６】
実線矢印は、データの流れを示し、流れるデータは矩形中に示す。点線矢印は、パケットの流れを示す。図４〜図６においても同様である。
【００５７】
まず、受信部１１０がパケット１０を受信すると、空領域管理部１２０は空領域管理テーブル[１]に設定されているアドレス「３」を読み出して受信部１１０に渡す。
【００５８】
アドレス「３」を受け取った受信部１１０は、パケットバッファ[３]に受信したパケットを記憶させる。
【００５９】
受信部１１０にアドレス「３」を渡した空領域管理部１２０は、アドレス「３」と、受信したパケット１０の送信順を決定するのに必要な情報等とを優先制御部１３０に渡す。優先制御部１３０は、アドレス「３」に記憶されたパケットの送信順を決定して送信順管理テーブル１３１に登録する。
【００６０】
また、優先制御部１３０は、パケットを送信するタイミングがきたら、送信するパケットが記憶されているパケットバッファ１６０のアドレス、すなわち、送信順管理テーブル［１］に設定されているアドレス「９」を読み出して送信部１４０に渡す。
【００６１】
アドレス「９」を受け取った送信部１４０は、パケットバッファ[９]からパケット１１を読み出して送信する。
【００６２】
送信部１４０にアドレス「９」を渡した優先制御部１３０は、アドレス「９」を空領域管理部１２０に空き領域として返却する。
【００６３】
空き領域の返却を受けた空領域管理部１２０は、空領域管理テーブル１２１の末尾にアドレス「９」を登録する。
【００６４】
パケット転送装置１００は、受信したパケットを一旦パケットバッファ１６０の空き領域に記憶し、送信する順番がきたパケットを読み出して送信したら、送信したパケットが記憶されていた分割領域を空き領域とすることを繰り返して、パケットを転送している。
【００６５】
尚、空領域管理部１２０と優先制御部１３０とは、並行して動作している。
【００６６】
＜エラーアドレス検出方法＞
以下、空領域管理部１２０及び優先制御部１３０が、エラーアドレスを検出する方法について、図４及び図５を用いて説明する。
【００６７】
まず、図４を用いて、エラーアドレスが発生した場合を説明する。図４は、エラーアドレスが発生した場合を示す図である。
【００６８】
空領域管理部１２０がパケット１０を受信すると、空領域管理部１２０は空領域管理テーブル[１]に設定されているアドレスを読み出して受信部１１０に渡す。しかし、空領域管理テーブル[１]に設定されているアドレス「３」がソフトエラーによって別のアドレス、例えば、送信順管理テーブル［２］に設定されているアドレス「６」に書き換えられていたとする。
【００６９】
この場合、空領域管理部１２０は、アドレス「６」を受信部１１０に渡すこととなる。
【００７０】
アドレス「６」を受け取った受信部１１０は、パケットバッファ[６]に受信したパケットを記憶させる。パケットバッファ[６]に記憶されていたパケット、すなわち、まだ送信していないパケットは上書きされ消えることになる。
【００７１】
そして、優先制御部１３０は、パケットバッファ[６]に記憶されているはずのパケットを送信するタイミングがきたら、送信順管理テーブル［１］に設定されているアドレス「６」を読み出して送信部１４０に渡す。
【００７２】
アドレス「６」を受け取った送信部１４０は、パケットバッファ[６]からパケット１１を読み出して送信する。しかし、送信するパケットは、送信するはずであったパケットとは異なるものとなっている。
【００７３】
また、優先制御部１３０は、パケットを送信するタイミングがきたら、送信順管理テーブル［１］に設定されているアドレスを読み出して送信部１４０に渡す。しかし送信順管理テーブル[１]に設定されているアドレス「９」がソフトエラーによって別のアドレス、例えば、アドレス「１５」に書き換えられていたとする。
【００７４】
この場合、優先制御部１３０は、アドレス「１５」を送信部１４０に渡すこととなる。
【００７５】
アドレス「１５」を受け取った送信部１４０は、パケットバッファ[１５]からパケット１１を読み出して送信する。しかし、送信するパケットは、送信するはずであったパケットとは異なるもの、例えば、以前に送信したパケット又は意味のないデータとなっている。
【００７６】
更に、送信部１４０にアドレス「１５」を渡した優先制御部１３０は、アドレス「１５」を空領域管理部１２０に空き領域として返却する。
【００７７】
空き領域の返却を受けた空領域管理部１２０は、空領域管理テーブル１２１の末尾にアドレス「１５」を登録する。すなわち、空領域管理テーブル１２１には、アドレス「１５」が２つ登録されていることとなる。さらに、ソフトエラーで書き換えられた元のアドレス「３」及び「９」は、空領域管理テーブル１２１に登録されることはなく、バッファメモリ［３］及びバッファメモリ［９］は、使用されないことになる。
【００７８】
次に、図５を用いて、エラーアドレスの検出方法を説明する。図５は、エラーアドレスを検出する方法を示す図である。一点鎖線の矢印は、参照を示す。
【００７９】
空領域管理部１２０がパケット１０を受信すると、空領域管理部１２０は空領域管理テーブル[１]に設定されているアドレス、例えばアドレス「６」を読み出して受信部１１０に渡す。この際、空領域管理部１２０は、読み出したアドレスが、エラーアドレスでないことを確認し、エラーアドレスでない場合のみ受信部１１０に渡す。
【００８０】
エラーアドレスでないことの確認は、空領域管理部１２０がバッファ使用状態テーブル１６１を参照し、以下のように行う。
【００８１】
空領域管理部１２０は、バッファ使用状態テーブル１６１の配列の要素のうち、読み出したアドレスの番号に対応する要素を参照し、その要素に「０」が設定されている場合は、エラーアドレスではないと判断する。また、空領域管理部１２０は、その要素に「１」が設定されている場合は、エラーアドレスであると判断する。
【００８２】
例えば、読み出したアドレスが「６」の場合は、バッファ使用状態テーブル［６］を参照し、「１」が設定されているので、アドレス「６」はエラーアドレスであると判断する。
【００８３】
空領域管理テーブル[１]から読み出したアドレスがエラーアドレスであると判断した場合、空領域管理部１２０は、読み出したアドレスを破棄して、再度、空領域管理テーブル[１]からアドレスを読み出す。
【００８４】
例えば、空領域管理部１２０は、読み出したアドレスが「２」の場合は、バッファ使用状態テーブル［２］を参照して「０」が設定されていれば、アドレス「２」はエラーアドレスでないと判断し、受信部１１０に渡す。また、空領域管理部１２０は、バッファ使用状態テーブル［２］に「１」を設定する。
【００８５】
優先制御部１３０は、パケットを送信するタイミングがきたら、送信順管理テーブル［１］に設定されているアドレスを読み出して送信部１４０に渡す。この際も、優先制御部１３０は、読み出したアドレスが、エラーアドレスでないことを確認し、エラーアドレスでない場合のみ送信部１４０に渡す。
【００８６】
エラーアドレスでないことの確認は、優先制御部１３０がバッファ使用状態テーブル１６１を参照し、以下のように行う。
【００８７】
優先制御部１３０は、バッファ使用状態テーブル１６１の配列の要素のうち、読み出したアドレスの番号に対応する要素を参照し、その要素に「１」が設定されている場合は、エラーアドレスではないと判断する。読み出したアドレスの番号に対応するパケットバッファ１６０の分割領域に、送信すべきパケットが記憶されているからである。
【００８８】
また、優先制御部１３０は、その要素に「０」が設定されている場合は、エラーアドレスであると判断する。読み出したアドレスの番号に対応するパケットバッファ１６０の分割領域に、送信すべきパケットが記憶されていないからである。
【００８９】
例えば、読み出したアドレスが「１５」の場合は、バッファ使用状態テーブル［１５］を参照し、「０」が設定されているので、アドレス「１５」はエラーアドレスであると判断する。
【００９０】
送信順管理テーブル[１]から読み出したアドレスがエラーアドレスであると判断した場合、優先制御部１３０は、読み出したアドレスを廃棄し、次のパケットを送信するために送信順管理テーブル[１]からアドレスを読み出す。
【００９１】
例えば、優先制御部１３０は、読み出したアドレスが「６」の場合は、バッファ使用状態テーブル［６］を参照して「１」が設定されているので、アドレス「６」はエラーアドレスでないと判断し、送信部１４０に渡す。また、優先制御部１３０は、バッファ使用状態テーブル［６］に「０」を設定し、アドレス「６」を空領域管理部１２０に返却する。
【００９２】
このように、空領域管理部１２０及び優先制御部１３０は、アドレスがエラーアドレスであるか否かを判断し、エラーアドレスではないアドレスのみを受信部１１０又は送信部１４０に渡すことで、パケットバッファの上書きによりパケットを喪失すること、及び、同じパケットを複数回送信すること等を回避することができる。
【００９３】
但し、ソフトエラーによってエラーアドレスとなった元のアドレス、例えば、アドレス「３」及びアドレス「９」は、空領域管理テーブル１２１に登録されることはなく、バッファメモリ［３］及びバッファメモリ［９］は、使用されないままである。
【００９４】
そこで、ソフトエラーによってエラーアドレスとなった元のアドレス見つけ出して空領域管理テーブル１２１に登録する処理を以下に説明する。
【００９５】
＜復旧方法＞
以下、ソフトエラーによってエラーアドレスとなった元のアドレス、例えば、アドレス「３」を見つけ出して空領域管理テーブル１２１に登録する処理を、図６〜図８を用いて説明する。
【００９６】
復旧処理は、大きく分けて２つのフェーズに分かれる。１つ目は、エラーアドレスとなった元のアドレスを探索する処理（以下、「探索処理」という。）であり、２つ目は、エラーアドレスとなった元のアドレスを空き領域として返却する処理である。
【００９７】
空領域管理部１２０又は優先制御部１３０は、パケットバッファ１６０の分割領域を指すアドレスが、エラーアドレスであると判断した場合、すなわち、エラーアドレスを検出した場合は、復旧処理部１５０に復旧処理の開始を依頼する。復旧処理の開始を復旧処理部１５０に依頼する前に、空領域管理部１２０又は優先制御部１３０は、エラーカウンタ１５３に「１」を設定する。
【００９８】
但し、復旧処理部１５０が復旧処理を実行中の場合は、空領域管理部１２０又は優先制御部１３０は、復旧処理部１５０に復旧処理の開始を依頼せずに、エラーカウンタ１５３をカウントアップする。
【００９９】
図６は、復旧処理部１５０が復旧処理の開始を依頼された時の、各テーブルの状態を示す図である。
【０１００】
空領域管理部１２０は空領域管理テーブル[１]に設定されているアドレス、例えばアドレス「６」を読み出し、バッファ使用状態テーブル［６］に「１」が設定されているので、アドレス「６」はエラーアドレスであると判断する。
【０１０１】
エラーアドレスを検出した空領域管理部１２０は、エラーカウンタ１５３を「１」にカウントアップし、復旧処理部１５０に復旧処理の開始を依頼する。図６は、この時の各テーブルの状態である。
【０１０２】
ソフトエラーにより「６」に書き換えられた元のアドレスは「３」である。
【０１０３】
送信順管理テーブル１３１は、送信順管理テーブル［１］〜［５］に、「９」、「６」、「１３」、「１４」、「１」が順に設定されている。図６には図示していないが、パケットバッファ［１］、［６］、［９］、［１３］、［１４］の５つの分割領域に未送信のパケットが記憶されている。
【０１０４】
従って、バッファ使用状態テーブル１６１は、バッファ使用状態テーブル［１］、［６］、［９］、［１３］、［１４］の５要素に「１」が設定されている。
【０１０５】
エラーカウンタ１５３は、空領域管理部１２０によって「１」が設定されている。
【０１０６】
復旧カウンタ１５２は、初期値「１６」が設定され、復旧テーブル１５１は、配列の要素すべてに「０」が設定されている。
【０１０７】
次に、復旧処理が開始されて、優先制御部１３０が送信部１４０にパケットを送信させたときの各テーブルの状態を図７に示す。図７の白抜き矢印の左側に、復旧処理の開始後、最初に優先制御部１３０が送信部１４０にパケットを送信させたときの各テーブルの状態を示し、白抜き矢印の右側に、２回目に優先制御部１３０が送信部１４０にパケットを送信させたときの各テーブルの状態を示す。
【０１０８】
まず、復旧処理の開始後、優先制御部１３０が最初にパケットを送信させる場合を説明する（白抜き矢印の左側の図参照）。
【０１０９】
優先制御部１３０は、送信順管理テーブル［１］からアドレス「９」を読み出し、読み出したアドレス「９」を送信部１４０に渡す。アドレス「９」を送信部１４０に渡した優先制御部１３０は、バッファ使用状態テーブル［９］に「０」を設定し（バッファ使用状態テーブル１６１の斜線部分参照）、アドレス「９」を空き領域として空領域管理部１２０に返却する。
【０１１０】
優先制御部１３０は、復旧処理中であるので、更に、復旧処理部１５０にアドレス「９」を通知する。復旧処理中であるか否かは、空領域管理部１２０及び優先制御部１３０が参照可能な領域に復旧処理部１５０が立てた復旧処理中である旨を示すフラグを参照することで検知するものとする。
【０１１１】
通知を受けた復旧処理部１５０は、復旧テーブル［９］に「１」を設定し（復旧テーブル１５１の斜線部分参照）、復旧カウンタ１５２に設定されている値「１６」から１を減算して「１５」とする。但し、既に復旧テーブル［９］に「１」が設定されていた場合は、復旧カウンタ１５２に設定されている値から１を減算する処理は行わない。
【０１１２】
次に、復旧処理の開始後、優先制御部１３０が２回目にパケットを送信させる場合を説明する（白抜き矢印の右側の図参照）。
【０１１３】
送信順管理テーブル［１］からアドレス「６」を読み出し、読み出したアドレス「６」を送信部１４０に渡した優先制御部１３０は、バッファ使用状態テーブル［６］に「０」を設定し（バッファ使用状態テーブル１６１の斜線部分参照）、アドレス「６」を空き領域として空領域管理部１２０に返却する。
【０１１４】
復旧処理中であるので、優先制御部１３０は、復旧処理部１５０にアドレス「６」を通知する。
【０１１５】
通知を受けた復旧処理部１５０は、復旧テーブル［６］に「１」を設定し（復旧テーブル１５１の斜線部分参照）、復旧カウンタ１５２に設定されている値「１５」から１を減算して「１４」とする。
【０１１６】
このように、復旧処理のうちの探索処理が行われていく。
【０１１７】
以下、探索処理が終了するタイミング、及び、エラーアドレスとなった元のアドレスを空き領域として返却する処理を説明する。
【０１１８】
図８は、復旧処理部１５０が復旧処理を終了した時の、各テーブルの状態を示す図である。図８の白抜き矢印の右側に、優先制御部１３０が、復旧処理の最後となるパケットを送信させたときの各テーブルの状態、すなわち、復旧処理終了時の各テーブルの状態を示す。また、白抜き矢印の左側には、優先制御部１３０が、復旧処理を終了させることとなるパケットの１つ前のパケットを送信させたときの各テーブルの状態を示す。
【０１１９】
探索処理を終了するタイミングは、復旧処理部１５０が復旧カウンタ１５２に設定されている値を１減算した時に、復旧カウンタ１５２に設定されている減算後の値とエラーカウンタ１５３に設定されている値とが同じ値であるときである。
【０１２０】
すなわち、パケットバッファ１６０の分割領域の数から、復旧処理中に使用された分割領域の数を引いた値が、エラーアドレスの数と同じになった場合に、探索処理を終了する。
【０１２１】
まず、優先制御部１３０が、復旧処理終了の１つ前のパケットを送信させる場合を説明する（白抜き矢印の左側の図参照）。
【０１２２】
優先制御部１３０は、送信順管理テーブル［１］からアドレス「７」を読み出し、読み出したアドレス「７」を送信部１４０に渡す。アドレス「７」を送信部１４０に渡した優先制御部１３０は、バッファ使用状態テーブル［７］に「０」を設定し（バッファ使用状態テーブル１６１の斜線部分参照）、アドレス「７」を空き領域として空領域管理部１２０に返却する。
【０１２３】
復旧処理中であるので、優先制御部１３０は、復旧処理部１５０にアドレス「７」を通知する。
【０１２４】
通知を受けた復旧処理部１５０は、復旧カウンタ１５２に設定されている値「３」から１を減算して「２」とし、復旧テーブル［７］に「１」を設定する（復旧テーブル１５１の斜線部分参照）。
【０１２５】
次に、復旧処理を終了させることとなるパケットを送信させる場合を説明する（白抜き矢印の右側の図参照）。
【０１２６】
送信順管理テーブル［１］からアドレス「４」を読み出し、読み出したアドレス「４」を送信部１４０に渡した優先制御部１３０は、バッファ使用状態テーブル［４］に「０」を設定し（バッファ使用状態テーブル１６１の斜線部分参照）、アドレス「４」を空き領域として空領域管理部１２０に返却する。
【０１２７】
復旧処理中であるので、優先制御部１３０は、復旧処理部１５０にアドレス「４」を通知する。
【０１２８】
通知を受けた復旧処理部１５０は、復旧テーブル［４］に「１」を設定し（復旧テーブル１５１の斜線部分参照）、復旧カウンタ１５２に設定されている値「２」から１を減算して「１」とする。
【０１２９】
復旧処理部１５０は、エラーカウンタ１５３に設定されている値「１」と復旧カウンタ１５２に設定されている値「１」とが同じ値となったので、探索処理を終了する。
【０１３０】
探索処理を終了した復旧処理部１５０は、復旧テーブル１５１を検索し、「０」が設定されている配列の要素を見つける。「０」が設定されている配列の要素の番号「３」を、空き領域として空領域管理部１２０に返却する。すなわち、「０」が設定されている配列の要素の番号は、復旧処理中に使用されなかった分割領域の番号、言い換えれば、エラーアドレスとなった元のアドレスを示すからである。
【０１３１】
実施形態では、エラーアドレスは１回のみ検出された場合を説明した。復旧処理中に空領域管理部１２０又は優先制御部１３０がエラーアドレスを検出した場合には、空領域管理部１２０又は優先制御部１３０はエラーカウンタ１５３に設定されている値に１を加算する処理を行う。実行中の復旧処理において、エラーアドレスとなった複数個の元のアドレスを見つけることが可能となる。
【０１３２】
＜動作＞
以下、実施形態のパケット転送装置１００の動作について図９及び図１０を用いて説明する。
【０１３３】
図９は、パケット転送装置１００がパケットを受信した場合の処理のフローチャートである。
【０１３４】
受信部１１０は、パケット１０を受信すると（ステップＳ１００）、受信したパケット１０を記憶させるためのパケットバッファ１６０の分割領域のアドレスを空領域管理部１２０に要求する。
【０１３５】
要求を受けた空領域管理部１２０は、空領域管理テーブル[１]に設定されているアドレスを読み出す（ステップＳ１１０）。
【０１３６】
アドレスを読み出した空領域管理部１２０は、読み出したアドレスが指す分割領域が使用中であるか否か、すなわち、読み出したアドレスがエラーアドレスか否かを判断する。
【０１３７】
エラーアドレスか否かの判断は、バッファ使用状態テーブル１６１を参照して判断する。バッファ使用状態テーブル１６１の配列の要素の番号が読み出したアドレスと同じである要素に「１」が設定されている場合は、エラーアドレスであると判断する（＜エラーアドレス検出方法＞の項参照）。
【０１３８】
エラーアドレスではないと判断した場合（ステップＳ１２０：Ｎｏ）、空領域管理部１２０は、読み出したアドレスが指す分割領域を使用中とする（ステップＳ１３０）。具体的には、バッファ使用状態テーブル１６１の配列の要素の番号が読み出したアドレスと同じである要素に「１」を設定する。
【０１３９】
読み出したアドレスが指す分割領域を使用中とした空領域管理部１２０は、読み出したアドレス及びパケット１０から取り出した所定の情報を優先制御部１３０に渡す（ステップＳ１４０）。
【０１４０】
その後、空領域管理部１２０は、読み出したアドレスを受信部１１０に渡す。
【０１４１】
アドレスを渡された受信部１１０は、渡されたアドレスが指す分割領域に、受信したパケット１０を記憶させる（ステップＳ１５０）。
【０１４２】
受信したパケットを記憶させた受信部１１０は、次のパケットを受信する（ステップＳ１００）。
【０１４３】
一方、読み出したアドレスがエラーアドレスであると判断した場合（ステップＳ１２０：Ｙｅｓ）、空領域管理部１２０は、エラーカウンタ１５３に設定されている値に１を加算する（ステップＳ１６０）。この時、エラーカウンタ１５３には「１」が設定されていることになる。エラーカウンタ１５３には「０」が設定されているからである。
【０１４４】
次に、空領域管理部１２０は、復旧処理中であるか否かを、空領域管理部１２０が参照可能な領域にあるフラグを参照することで検知する（ステップＳ１７０）。
【０１４５】
復旧処理中でない場合は（ステップＳ１７０：Ｎｏ）、空領域管理部１２０は、復旧処理部１５０に復旧処理の開始を依頼する（ステップＳ１８０）。
【０１４６】
復旧処理部１５０に復旧処理の開始を依頼した空領域管理部１２０は、エラーアドレスを廃棄して、新しいアドレスを空領域管理テーブル[１]から読み出す（ステップＳ１１０）。
【０１４７】
一方、復旧処理中である場合（ステップＳ１７０：Ｙｅｓ）は、エラーアドレスを廃棄して、新しいアドレスを空領域管理テーブル[１]から読み出す（ステップＳ１１０）。この時、エラーカウンタ１５３には「２」以上の値が設定されている。
【０１４８】
次に、図１０を用いて、パケット転送装置１００がパケットを送信する場合の処理、及び、元のアドレスを探索して復旧する処理について説明する。
【０１４９】
図１０は、パケット転送装置１００のパケットの送信処理及び復旧処理のフローチャートである。点線矢印は、データの流れを示す。
【０１５０】
優先制御部１３０は、次に送信するパケットが記憶されているアドレスを送信順管理テーブル［１］から読み出す（ステップＳ２００）。
【０１５１】
アドレスを読み出した優先制御部１３０は、読み出したアドレスが指す分割領域に未送信のパケットが記憶されているか否か、すなわち、読み出したアドレスがエラーアドレスか否かを判断する。
【０１５２】
エラーアドレスか否かの判断は、バッファ使用状態テーブル１６１を参照して判断する。バッファ使用状態テーブル１６１の配列の要素の番号が読み出したアドレスと同じである要素に「０」が設定されている場合は、エラーアドレスであると判断する（＜エラーアドレス検出方法＞の項参照）。
【０１５３】
エラーアドレスではないと判断した場合（ステップＳ２１０：Ｙｅｓ）、優先制御部１３０は、読み出したアドレスを送信部１４０に渡す。
【０１５４】
アドレスを渡された送信部１４０は、渡されたアドレスからパケットを読み出して送信する（ステップＳ２２０）。
【０１５５】
アドレスを送信部１４０に渡した優先制御部１３０は、渡したアドレスが指す分割領域を未使用とする（ステップＳ２３０）。具体的には、優先制御部１３０は、バッファ使用状態テーブル１６１の配列の要素の番号が渡したアドレスと同じである要素に「０」を設定する。
【０１５６】
渡したアドレスが指す分割領域を未使用とした優先制御部１３０は、渡したアドレスを空き領域として空領域管理部１２０に返却する（ステップＳ２４０）。
【０１５７】
次に、優先制御部１３０は、復旧処理中であるか否かを、優先制御部１３０が参照可能な領域にあるフラグを参照することで検知する（ステップＳ２５０）。
【０１５８】
復旧処理中でない場合（ステップＳ２５０：Ｎｏ）、優先制御部１３０は、次に送信するパケットが記憶されているアドレスを送信順管理テーブル［１］から読み出す（ステップＳ２００）。
【０１５９】
一方、復旧処理中である場合（ステップＳ２５０：Ｙｅｓ）、優先制御部１３０は、送信部１４０に渡したアドレスを復旧処理部１５０に通知する（ステップＳ２６０）。
【０１６０】
アドレスを通知した優先制御部１３０は、次に送信するパケットが記憶されているアドレスを送信順管理テーブル［１］から読み出す（ステップＳ２００）。
【０１６１】
ステップＳ２１０において、読み出したアドレスに未送信のパケットが記憶されていない、すなわち、エラーアドレスであると判断した場合（ステップＳ２１０：Ｎｏ）、優先制御部１３０は、エラーカウンタ１５３に設定されている値に１を加算する（ステップＳ２７０）。
【０１６２】
次に、優先制御部１３０は、復旧処理中であるか否かを検知する（ステップＳ２８０）。
【０１６３】
復旧処理中でない場合は（ステップＳ２８０：Ｎｏ）、優先制御部１３０は、復旧処理部１５０に復旧処理の開始を依頼する（ステップＳ２９０）。この時、エラーカウンタ１５３には「１」が設定されている
復旧処理部１５０に復旧処理の開始を依頼した優先制御部１３０は、次に送信するパケットが記憶されているアドレスを送信順管理テーブル［１］から読み出す（ステップＳ２００）。
【０１６４】
一方、復旧処理中である場合（ステップＳ２９０：Ｙｅｓ）は、次に送信するパケットが記憶されているアドレスを送信順管理テーブル［１］から読み出す（ステップＳ２００）。この時、エラーカウンタ１５３には「２」以上の値が設定されている。
【０１６５】
空領域管理部１２０又は優先制御部１３０から復旧処理の開始を依頼された復旧処理部１５０は、復旧テーブル１５１の配列の全要素に「０」を設定し、復旧カウンタ１５２に「１６」を設定する（ステップＳ３００）。
【０１６６】
復旧処理部１５０は、優先制御部１３０からアドレスを通知されると（ステップＳ３１０）、通知されたアドレスが記憶済みであるかを判断する（ステップＳ３２０）。
【０１６７】
具体的には、復旧処理部１５０は、復旧テーブル１５１の配列の要素の番号が通知されたアドレスと同じである要素に「０」が設定されている場合は記憶されていないと判断し、「１」が設定されている場合は記憶されていると判断する。
【０１６８】
通知されたアドレスが記憶済みでない場合（ステップＳ３２０：Ｎｏ）、復旧処理部１５０は、アドレスを記憶する。具体的には、復旧処理部１５０は、復旧テーブル１５１の配列の要素の番号が通知されたアドレスと同じである要素に「１」を設定する。
【０１６９】
通知されたアドレスを記憶した復旧処理部１５０は、復旧カウンタ１５２に設定されている値から「１」を減算する（ステップＳ３４０）。
【０１７０】
復旧カウンタ１５２に設定されている値から「１」を減算した復旧処理部１５０、復旧カウンタ１５２に設定されている値とエラーカウンタ１５３に設定されている値とが同じ値であるか否かを判断する（ステップＳ３５０）。
【０１７１】
また、同様に、通知されたアドレスが記憶済みであると判断した（ステップＳ３２０：Ｎｏ）復旧処理部１５０は、復旧カウンタ１５２に設定されている値とエラーカウンタ１５３に設定されている値とが同じ値であるか否かを判断する（ステップＳ３５０）。
【０１７２】
同じであると判断した場合（ステップＳ３５０：Ｙｅｓ）、復旧処理部１５０は、復旧テーブル１５１を検索し、「０」が設定されている配列の要素を見つけ、その要素の番号を、空き領域として空領域管理部１２０に返却する（ステップＳ３６０）。
【０１７３】
エラーアドレスとなった元のアドレスを空き領域として空領域管理部１２０に返却した１５０は、エラーカウンタ１５３に「０」を設定し（ステップＳ３７０）、復旧処理を終了する。
【０１７４】
＜補足＞
以上、本発明の実施形態について説明したが、本発明は上記形態に限らず、以下のようにしてもよい。
（１）実施形態では、受信したパケットを記憶させるために空領域管理テーブル[１]から読み出したアドレスがエラーアドレスであった場合には、エラーアドレスではないアドレスが読み出されるまで、アドレスを読み出していた（図９参照）。
【０１７５】
空領域管理テーブル[１]から読み出したアドレスがエラーアドレスであった場合には、次のパケットを受信することとしてもよい。すなわち、受信したパケットを記憶させるためのアドレスがエラーアドレスであった場合には、エラーアドレスと共に、そのエラーアドレスに記憶させようとしていたパケットも廃棄する（図１１のルート４００参照）。
【０１７６】
送信されてくるパケットをより多く受信するためである。空領域管理テーブル[１]からエラーアドレスではないアドレスが読み出されるまでアドレスを読み出すということは、読み出したアドレスがエラーアドレスであるかを判断する処理を繰り返すこととなり、受信できないパケットが増える可能性があるからである。
（２）実施形態では、復旧処理中に、優先制御部１３０が使用した分割領域のアドレスを復旧処理部１５０に通知することとしているが、空領域管理部１２０が行ってもよく、又、双方が行ってもよい。
（３）実施形態では、パケットをバッファに記憶する場合を説明したが、パケット以外のデータをバッファに読み書きする場合であってもよい。また、データは、固定長である必要はなく、可変長であってもよい。
（４）パケット転送装置１００は、図１の各構成要素の全部又は一部を、コンピュータのプログラムで実現してもよいし、その他どのような形態で実施してもよい。
【０１７７】
コンピュータプログラムの場合、メモリカード、ＣＤ−ＲＯＭなどいかなる記録媒体に書き込まれたものをコンピュータに読み込ませて実行させる形にしてもよいし、ネットワークを経由してプログラムをダウンロードして実行させる形にしてもよい。
【符号の説明】
【０１７８】
１０  １１  パケット
１００  パケット転送装置（バッファメモリ装置）
１１０  受信部（書込手段）
１２０  空領域管理部（指定手段、判定手段）
１２１  空領域管理テーブル
１３０  優先制御部（指定手段、判定手段）
１３１  送信順管理テーブル
１４０  送信部（読出手段）
１５０  復旧処理部（復旧処理手段）
１５１  復旧テーブル（指定領域記憶手段）
１５２  復旧カウンタ（第２のカウンタ）
１５３  エラーカウンタ（第１のカウンタ）
１６０  パケットバッファ
１６１  バッファ使用状態テーブル（格納記憶手段）
【図１】
0005430369.tif 000002
【図２】
0005430369.tif 000003
【図３】
0005430369.tif 000004
【図４】
0005430369.tif 000005
【図５】
0005430369.tif 000006
【図６】
0005430369.tif 000007
【図７】
0005430369.tif 000008
【図８】
0005430369.tif 000009
【図９】
0005430369.tif 000010
【図１０】
0005430369.tif 000011
【図１１】
0005430369.tif 000012