(57)【特許請求の範囲】
【請求項１】
データを一時保存するための揮発メモリと不揮発メモリを有するコントローラが、該揮発メモリに保持するデータを該不揮発メモリに退避するバックアップ方法であって、
前記コントローラが、
冗長構成をとる第１コントローラと第２コントローラであって、前記第１コントローラおよび前記第２コントローラと１対１の対応関係で接続された冗長構成をとる第１バックアップユニットおよび第２バックアップユニットから停電時に電力が供給され、
前記揮発メモリ内に保持するデータを、前記不揮発メモリにおける所定のデータ格納単位である単位データごとに前記不揮発メモリ内の指定した領域に転送すると共に、前記転送される複数の前記単位データをパリティ演算することによってパリティデータを生成し、
該揮発メモリに格納されたデータの前記単位データごとの複数の部分に対応する複数の周期冗長検査コードを生成し、
前記生成した複数の周期冗長検査コードの各々に基づいて、前記不揮発メモリに転送されたデータの誤りの有無を、前記単位データごとに確認し、
前記不揮発メモリに転送されたデータに誤りがあった場合、誤りが確認された単位データに対応するパリティデータによって該誤りが確認されたデータを復元できるかを判別し、
前記パリティデータによって、該誤りが確認されたデータを復元できない場合には、該揮発メモリに保持されたデータを不揮発メモリ内の前記指定した領域とは異なる領域に転送する
ことを特徴とするバックアップ方法。
【請求項２】
前記コントローラは、前記停電時に前記揮発メモリ内に保持する前記データを前記単位データごとに前記不揮発メモリ内の指定した領域に転送する、
ことを特徴とする請求項１に記載のバックアップ方法。
【請求項３】
前記コントローラは、前記生成したパリティデータを前記不揮発メモリへ転送することを特徴とする請求項１または請求項２に記載のバックアップ方法。
【請求項４】
データを蓄積するためのディスクアレイ装置と、
前記ディスクアレイ装置へのアクセスが可能な制御装置と、を有するディスクアレイシステムであって、
前記制御装置は、
冗長構成をとる第１制御装置と第２制御装置であって、前記第１制御装置および前記第２制御装置と１対１の対応関係で接続された冗長構成をとる第１バックアップユニットおよび第２バックアップユニットから停電時に電力が供給され、
前記第１制御装置および前記第２制御装置はそれぞれ、
前記ディスクアレイ装置のデータを一時保存するための揮発メモリと、
不揮発メモリと、
コントローラ
とを有し、
前記コントローラは、
前記揮発メモリ内に保持するデータを、前記不揮発メモリにおける所定のデータ格納単位である単位データごとに前記不揮発メモリ内の指定した領域に転送すると共に、前記転送される複数の前記単位データをパリティ演算することによってパリティデータを生成し、
該揮発メモリに格納されたデータの前記単位データごとの複数の部分に対応する複数の周期冗長検査コードを生成し、
前記生成した複数の周期冗長検査コードの各々に基づいて、前記不揮発メモリに転送されたデータの誤りの有無を、前記単位データごとに確認し、
前記不揮発メモリに転送されたデータに誤りがあった場合、誤りが確認された単位データに対応するパリティデータによって該誤りが確認されたデータを復元できるかを判別し、
前記パリティデータによって、該誤りが確認されたデータを復元できない場合には、該揮発メモリに格納されたデータを不揮発メモリ内の前記指定した領域とは異なる領域に転送する
ことを特徴とするディスクアレイシステム。
【請求項５】
前記コントローラは、前記停電時に前記揮発メモリ内に保持する前記データを前記単位データごとに前記不揮発メモリ内の指定した領域に転送することを特徴とする請求項４記載のディスクアレイシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＡＩＤに代表されるディスクアレイ装置のバックアップ制御に関する。
【背景技術】
【０００２】
ＲＡＩＤは、停電などのシステム外部から電力供給ができなくなった場合に備えてバックアップユニット（バッテリー）を有している。停電が発生した場合、コントローラモジュールに搭載する揮発メモリに保持しているデータを保護するため、ＲＡＩＤはバックアップユニットから揮発メモリに電力供給する。ＲＡＩＤが停電から復旧するまでの間、バックアップユニットが揮発メモリに電力を供給し続ける。これにより揮発メモリはデータを保持し続ける。【０００３】
しかしながらバックアップユニットの電力容量には限りがある。そのため揮発メモリのデータ保証は、バックアップユニットの電気容量に左右される。バックアップユニットの容量を増大すれば、それに応じてデータ保証の信頼度を増すことはできる。しかしながらＲＡＩＤがバックアップユニットの数を増やすと、コストの増大、ＲＡＩＤ装置の大型化といった問題が新たに発生する。また停電から復旧後、バックアップユニットを再充電するまでの間、データのバックアップを保証できないため、ＲＡＩＤはライトスルー状態となる。その結果ＲＡＩＤの処理能力が著しく低下するといった問題もある。なおライトスルー状態とは、コントローラモジュールがディスクにデータを書き込めたら、ホストにその旨完了の報告をする処理状態のことである。【０００４】
ＲＡＩＤシステムのバックアップ制御に関して以下の特許文献が存在する。
【特許文献１】特開２００５−３３２４７１号公報
【特許文献２】特開平６−３０９２３４号公報
【特許文献３】特開２０００−３５７０５９号公報
【特許文献４】特開平８−２２０１９８号公報
【発明の開示】
【０００５】
（発明が解決しようとする課題）
そこで本発明に係るバックアップ方法は、ＲＡＩＤシステムが停電した場合であっても、バックアップユニットの電力容量を増やさずに、コントローラモジュールに搭載する揮発メモリが保持するデータを保証することを目的とする。
（課題を解決するための手段）
本実施例に係るバックアップ方法の１つの観点によれば、データを一時保存するための揮発メモリと不揮発メモリを有するコントローラが、該揮発メモリに保持するデータを該不揮発メモリに退避するバックアップ方法であって、前記コントローラが、冗長構成をとる第１コントローラと第２コントローラであって、前記第１コントローラおよび前記第２コントローラと１対１の対応関係で接続された冗長構成をとる第１バックアップユニットおよび第２バックアップユニットから停電時に電力が供給され、前記揮発メモリ内に保持する前記データを、前記不揮発メモリにおける所定のデータ格納単位である単位データごとに前記不揮発メモリ内の指定した領域に転送すると共に、前記転送される複数の前記単位データをパリティ演算することによってパリティデータを生成し、揮発メモリに格納された前記データの前記単位データごとの複数の部分に対応する複数の周期冗長検査コードを生成し、前記生成した複数の周期冗長検査コードの各々に基づいて、前記不揮発メモリに転送されたデータの誤りの有無を、前記単位データごとに確認し、前記不揮発メモリに転送されたデータに誤りがあった場合、誤りが確認された単位データに対応するパリティデータによって該誤りが確認されたデータを復元できるかを判別し、前記パリティデータによって、該誤りが確認されたデータを復元できない場合には、該データを不揮発メモリ内の前記指定した領域とは異なる領域に転送することを特徴とする。
（発明の効果）
本実施例に係るバックアップ方法によれば、停電発生時、不揮発メモリに保持するデータを高速に不揮発メモリに退避できるので、ＲＡＩＤシステムのデータを確実に保証することができる。
【図面の簡単な説明】
【０００６】
【図１】本実施例に係るディスクアレイ装置１００の構成図である。
【図２】本実施例に係るＦＰＧＡ１１４のハードブロック図である
【図３】本実施例に係る不揮発メモリ１１５の構成を示す図である。
【図４】本実施例に係る不揮発メモリ１１５に係るＢａｎｋ３０５〜３０８の詳細図である。
【図５】本実施例に係る不揮発メモリ１１５の小エリア５０１の構成図である。
【図６】本実施例に係るＰａｇｅ６００の構成図である。
【図７】本実施例に係るスペアセクタ７００の構成図である
【図８】本実施例に係るＤｉｅ３１３のハード構成図である。
【図９】本実施例に係る不良管理テーブル２１８の一例である
【図１０】本実施例に係るエリア（ＡＲＥＡ）０〜エリア（ＡＲＥＡ）１０２３の概念図である。
【図１１】本実施例に係るデータ転送部２０２の処理フローチャートである。
【符号の説明】
【０００７】
１００…ディスクアレイ装置
１０１…電源ユニット
１０２…電源ユニット
１０３…バックアップユニット
１０４…バックアップユニット
１０５…コントローラモジュール（ＣＭ）
１０６…コントローラモジュール（ＣＭ）
１０７…ディスク
１０８…ディスク
１０９…ディスク
１１０…ディスク
１１１…制御回路
１１２…ＣＰＵ
１１３…不揮発メモリ
１１４…ＦＰＧＡ
１１５…不揮発メモリ
１１６…ＤＥポート
１１７…制御回路
１１８…ＣＰＵ
１１９…揮発メモリ
１２０…ＦＰＧＡ
１２１…不揮発メモリ
１２２…ＤＥポート
２０１…通信部
２０２…データ転送部
２０３…データ転送部
２０４…データ書き戻し部
２０５…通信情報管理部
２０６…テーブル管理部
２０７…テーブル管理部
２０８…転送制御部
２０９…転送制御部
２１０…メモリ制御部
２１１…メモリ制御部
２１２…データ変換制御部
２１３…データ変換制御部
２１４…ＰＣＩ−Ｘインターフェース
２１５…バッファ
２１６…バッファ
２１７…バッファ
２１８…不良管理テーブル
２１９…不良管理テーブル
２２０…レジスタ
【発明を実施するための最良の形態】
【０００８】
［１．ディスクアレイ装置１００］
図１は本実施例に係るディスクアレイ装置１００の構成図である。【０００９】
ディスクアレイ装置１００は電源ユニット（ｐｏｗｅｒ  ｓｕｐｐｌｙ  ｕｎｉｔ）１０１、１０２、バックアップユニット（ｂａｃｋｕｐ  ｕｎｉｔ）１０３、１０４、ＣＭ（ｃｏｎｔｒｏｌｌｅｒ  ｍｏｄｕｌｅ）１０５、１０６、ディスク（ｄｉｓｋ）１０７、１０８、１０９、１１０から構成されている。【００１０】
ＣＭ１０５、１０６はホストコンピュータ（図示せず）からの書き込み／読み出し命令により、ディスク１０７〜１１０にアクセスし、データの書き込み／読み出しを実行する。【００１１】
［１．１．電源ユニット１０１、１０２］
外部電源（ｅｘｔｅｒｎａｌ  ｓｏｕｒｃｅ）は電源ユニット１０１、１０２を介して、ディスクアレイ装置１００に電力を供給する。ディスクアレイ装置１００は電源ユニット１０１、１０２の二つのＡＣ／ＤＣ電源ユニットを有している。これは一方の電源ユニットが故障してもディスクアレイ装置１００に外部電源から電力を供給するためである。つまりディスクアレイ装置１００は電源ユニット１０１、１０２の冗長構成をとることによって、ディスクアレイ装置１００は電源ユニットにおける障害に対応することができる。また電源ユニット１０１、１０２はスタンバイ電源とシステム電源を生成している。スタンバイ電源はディスクアレイ装置１００を起動するために必要最小限の電力を供給する５Ｖ（ボルト）の電源である。システム電源はディスクアレイ装置１００を運転するために必要な電力を供給する１２Ｖ（ボルト）電源である。ディスクアレイ装置１００が通常運用していない場合は電力を削減するため、電源ユニット１０１、１０２はスタンバイ電源のみ出力し、ディスクアレイ装置１００は待機状態となっている。ディスクアレイ装置１００が通常運用時である場合、電源ユニット１０１、１０２はスタンバイ電源とシステム電源を出力する。そして電源ユニット１０１、１０２はバックアップユニット１０３、１０４に外部電源から電力を供給し、充電している。【００１２】
［１．１．１．停電発生時］
停電が発生して外部電源からディスクアレイ装置１００への電力供給がなくなると、電源ユニット１０１はシステム電源を断つことをＣＭ１０５に通知する。同様に電源ユニット１０２はシステム電源を断つことをＣＭ１０６に通知する。【００１３】
ＣＭ１０５、１０６それぞれに搭載する制御回路（ｃｏｎｔｒｏｌ  ｃｉｒｃｕｉｔ）１１１、１１７は、電源ユニット１０１、１０２に外部電源から供給がないことを判別する。そして制御回路１１１、１１７は、ＣＰＵ１１２、１１８に停電状態であることを通知する電源ユニット１０１、１０２の電圧低下に伴い、バックアップユニット１０３、１０４から電力供給される。バックアップユニット１０３はＣＭ１０５に電力を供給し、バックアップユニット１０４はＣＭ１０６に電力を供給する。【００１４】
ＣＭ１０５は、バックアップユニット１０３から供給される電力を用いて、停電発生時に揮発メモリ１１３が保持するデータを不揮発メモリ１１５に退避する。同様にしてＣＭ１０６は、バックアップユニット１０４から供給される電力を用いて、停電発生時に揮発メモリ１１９が保持するデータを不揮発メモリ１２１に退避する。【００１５】
［１．２．バックアップユニット１０３、１０４］
またディスクアレイ装置１００は、バックアップユニット１０３、１０４も冗長構成をとっている。本実施例におけるバックアップユニット１０３はＣＭ１０５に電力を供給する。バックアップユニット１０３はＣＭ１０６に電力を供給しない。また本実施例におけるバックアップユニット１０４はＣＭ１０６に電力を供給する。バックアップユニット１０４はＣＭ１０５に電力を供給しない。本実施例におけるディスクアレイ装置１００では、バックアップユニット１０３がＣＭ１０５に電力を供給し、バックアップユニット１０４がＣＭ１０６に電力を供給する。これはバックアップユニット１０３、１０４それぞれがＣＭ１０５、１０６に供給する電力量は大きい。つまりバックアップユニット１０３、１０４の双方がＣＭ１０５、１０６に電力を供給する構成にすると以下の問題ある。バックアップユニット１０３、１０４のいずれか一方のバックアップユニットが故障してＣＭ１０５、１０６に電力供給できなくなると、残りのバックアップユニット１つだけではＣＭ１０５、１０６の両方に一度に十分に電力を供給できない。その結果ＣＭ１０５、１０６の両方が電力不足で揮発メモリ１１３、１１９に保持するデータを不揮発メモリ１１５、１２１に退避できなくなってしまう。そのため本実施例ではバックアップユニット１０３、１０４のいずれかが故障しても残りのバックアップユニットが対応するＣＭに確実に電力を供給できるように、バックアップユニット１０３、１０４とＣＭ１０５、１０６は１対１の対応関係に接続する。【００１６】
バックアップユニット１０３、１０４はコンデンサであり、一度に多くの電力を放出できる。またバックアップユニット１０３、１０４はコンデンサであり、バックアップユニット１０３、１０４は、再充電を短時間で行うことができる。具体的にはディスクアレイ装置１００は、バックアップユニット１０３、１０４の充電量が０％の状態から満充電の状態まで２分以内で充電することができる。本実施例のディスクアレイ装置１００がバックアップユニット１０３、１０４を再充電する場合、バックアップユニット１０３を充電した後、バックアップユニット１０４を充電する。つまりディスクアレイ装置１００は、バックアップユニット１０３を充電する間の時間と、１０４を充電する時間とが重ならないように制御する。ディスクアレイ装置１００はコンデンサであるバックアップユニット１０３、１０４を急速充電するため、ディスクアレイ装置１００がバックアップユニット１０３、１０４それぞれを充電する時間が重なると、電源ユニット１０１、１０２それぞれがバックアップユニット１０３、１０４それぞれに供給する電流が許容量を超えてしまうおそれがあるからである。もちろんディスクアレイ装置１００が充電する順序は、バックアップユニット１０３からでもバックアップユニット１０４からでもよい。【００１７】
また仮にディスクアレイ装置１００が鉛蓄バッテリー、ニッケル水素バッテリー、又はリチウムイオンバッテリーで同じ電気容量を充電する場合には、鉛蓄バッテリーの充電量が０％の状態から満充電の状態まで数時間かかってしまう。したがって上記二次バッテリーに比べて、再充電にかかる時間が短いコンデンサをバックアップユニット１０３、１０４に適用することによって、ディスクアレイ装置１００はライトスルー状態で実行する時間帯を大幅に低減することができる。【００１８】
［２．ＣＭ１０５、１０６］
本実施例に係るＣＭ１０５は制御回路１１１、ＣＰＵ（ｃｅｎｔｒａｌ ｐｒｏｃｅ
ｓｓｉｎｇｕｎｉｔ）１１２、揮発メモリ（ｖｏｌａｔｉｌｅ ｍｅｍｏｒｙ）１１３、
ＦＰＧＡ（Ｆｉｅｌｄ Ｐｒｏｇｒａｍｍａｂｌｅ Ｇａｔｅ Ａｒｒａｙ）１１４、不
揮発メモリ（ｎｏｎｖｏｌａｔｉｌｅ ｍｅｍｏｒｙ）１１５、ＤＥポート（ＤＥ ｐｏ
ｒｔ）１１６から構成されている。なおＤＥはドライブエンクロージャーの略称である。
同様にしてＣＭ１０６は制御回路１１７、ＣＰＵ１１８、揮発メモリ１１９、ＦＰＧＡ１
２０、不揮発メモリ１２１、ＤＥポート１２２から構成されている。なお具体的には、本
実施例において揮発メモリ１１３、１１９はキャッシュメモリであり、不揮発メモリ１１
５、１２１はＮＡＮＤ型フラッシュメモリである。
【００１９】
揮発メモリ１１３、１１９はキャッシュメモリに限らず、電力供給を断つと記憶内容が失われるメモリであればあればよい。同様に不揮発メモリ１１５、１２１もフラッシュメモリに限られることはなく、電力供給を断っても記憶内容を失わないメモリであればよい。【００２０】
［２．１．制御回路１１１、１１７］
通常運転時、外部電源は電源ユニット１０１、１０２を介してそれぞれ、制御回路１１１、１１７に電力を供給する。電源ユニット１０１、１０２はスタンバイ電源とシステム電源を生成している。また停電時には、外部電源は、電源ユニット１０１、１０２に電力を供給できない。そのためバックアップユニット１０３、１０４はそれぞれ、制御回路１１１、１１９に電力を供給する。ＣＭ１０５、１０６を構成する搭載ユニット（制御回路１１１、１１７、ＣＰＵ１１２、１１８、揮発メモリ１１３、１１９、ＦＰＧＡ１１４、１２０、不揮発メモリ１１５、１２１、ＤＥポート１１６、１２２）は電源ラインに接続されており、電源ラインによって電力供給されている。【００２１】
停電が発生して外部電源からディスクアレイ装置への電力供給がなくなると、電源ユニット１０１、１０２が生成するスタンバイ電源、システム電源がなくなる。これにより一定時間経つと、電源ラインの電圧は１２Ｖよりも低下する。それに伴ってＣＭ１０５、１０６の電圧も低下する。【００２２】
電源ユニット１０１、１０２はＣＭ１０５、１０６にシステム電源の電力供給を断つことを通知する。制御回路１１１は、ＣＭ１０５内の電圧が１１Ｖ以下になった場合、ＣＰＵ１１２に停電状態である旨を通知する電源ユニット１０１、１０２の電圧低下に伴い、バックアップユニット１０３、１０４から電力供給される。同様に制御回路１１７は、ＣＭ１０６内の電圧が１１Ｖ以下になった場合、ＣＰＵ１１８に停電状態である旨を通知する電源ユニット１０１、１０２の電圧低下に伴い、バックアップユニット１０３、１０４から電力供給される。バックアップユニット１０３、１０４からの電力供給を開始するタイミングは、ＣＭ１０５、１０６内の電圧が一定の閾値以下になったときである。この電圧の値（閾値）は、ディスクアレイ装置１００が必要とする電力量に応じて変えることが可能である。【００２３】
［２．２．ＣＰＵ１１２、１１８］
ＣＰＵ１１２は、ＣＭ１０５が実行する処理を制御するユニットである。同様にＣＰＵ１１８も、ＣＭ１０５が実行する処理を制御するユニットである。ＣＰＵ１１２は、ＤＥポート１１６を介して、ホストコンピュータから書き込み命令のあったデータをディスク１０７〜１１０に書き込む制御を行う。ＣＰＵ１１２がデータを書き込む先は、ホストコンピュータからの書き込み命令に応じて、ディスク１０７〜１１０のすべての場合もあれば、ディスク１０７〜１１０のうちの一部分の場合もある。またＣＰＵ１１２は、ＤＥポート１１６を介して、ホストコンピュータから読み出し命令のあったデータをディスク１０７〜１１０から読み出す制御を行う。同様にしてＣＰＵ１１８は、ＤＥポート１２２を介して、ホストコンピュータから書き込み命令のあったデータをディスク１０７〜１１０に書き込む制御を行う。ＣＰＵ１１８がデータを書き込む先は、ホストコンピュータからの書き込み命令に応じて、ディスク１０７〜１１０のすべての場合もあれば、ディスク１０７〜１１０のうちの一部分の場合もある。またＣＰＵ１１８は、ＤＥポート１２２を介して、ホストコンピュータから読み出し命令のあったデータをディスク１０７〜１１０から読み出す制御を行う。【００２４】
本実施例において、ＣＭ１０５とＣＭ１０６は冗長構成になっている。本実施例ではＣＭ１０５とＣＭ１０６は主従の関係になっている。本実施例では例えばＣＭ１０５がマスターであり、ＣＭ１０６がスレーブである。ＣＭ１０５とＣＭ１０６が正常に稼動している場合、ＣＭ１０５がディスク１０７〜１１０にデータを書き込み、またはディスク１０７〜１１０からデータを読み出す。そしてＣＭ１０５はＣＭ１０６と同期をとり、ＣＭ１０５が処理したデータをＣＭ１０６に通知して、揮発メモリ１１９にコピーする。【００２５】
ＣＭ１０５が故障した場合、ＣＰＵ１０２は、ＣＭ１０５が故障の旨をＣＰＵ１１８に通知して、ＣＭ１０６はディスク１０７〜１１０へデータの書き込む処理、またはディスク１０７〜１１０からデータを読み出す処理をする。【００２６】
またＣＰＵ１１２は、制御回路１１１からディスクアレイ装置１００が停電である旨の通知を受けると、揮発メモリ１１３に保持されているデータの退避処理を制御する。ＣＰＵ１１２は、ＦＰＧＡ１１４の通信部２０１に揮発メモリ１１３内のデータを不揮発メモリ１１５に退避することを指示する。同様にＣＰＵ１１８は、制御回路１１７からディスクアレイ装置１００が停電である旨の通知を受けると、揮発メモリ１１９に保持されているデータの退避処理を制御する。ＣＰＵ１１８は、ＦＰＧＡ１２０の通信部２０１に揮発メモリ１１９内のデータを不揮発メモリ１２１に退避することを指示する。ＣＰＵ１１２は、ＦＰＧＡ１１４を制御して揮発メモリ１１３のデータを不揮発メモリ１１５に退避する。同様にしてＣＰＵ１１８はＦＰＧＡ１２０を制御して揮発メモリ１１９のデータを不揮発メモリに退避する。【００２７】
［２．３．揮発メモリ１１３、１１９］
揮発メモリ１１３は、ホストコンピュータから書き込み命令のあったデータ、又はホストコンピュータから読み出し命令のあったデータを一時的に保持する。ＣＭ１０５は、揮発メモリ１１３にデータを書き込んだ段階で、ホストコンピュータに完了応答する。ＣＭ１０５は揮発メモリ１１３を有することによって、ホストコンピュータの動作とは非同期に揮発メモリ１１３上のデータをディスク１０７〜１１０に書き込むいわゆるライトバック動作を行うことができ、高速にデータ処理をすることができる。【００２８】
同様にしてＣＭ１０６も、揮発メモリ１１９にデータを書き込んだ段階で、ホストコンピュータに完了応答する。ＣＭ１０６は揮発メモリ１１９を有することによって、ライトバック動作するとこができ高速にデータ処理することができる。［２．４．ＦＰＧＡ１１４、１２０］
図２は本実施例に係るＦＰＧＡ１１４のハードブロック図である。【００２９】
ＦＰＧＡ１１４は、通信部（ＰＣＬ）２０１、データ転送部（ＴＲＮ）２０２、２０３、データ書き戻し部（ＲＣＶ）２０４、通信情報管理部（ＤＱＲ）２０５、テーブル管理部（ＴＢＭ）２０６、２０７、転送制御部（ＵＣＥ）２０８、２０９、メモリ制御部（ＯＮＣ）２１０、２１１、データ変換制御部（ＮＦＣ）２１２、２１３から構成されている。ＦＰＧＡ１２０も同様の構成をしている。以下、ＦＰＧＡ１１４のハード構成について説明する。【００３０】
［２．４．１．通信部（ＰＣＬ）２０１］
通信部２０１は、ＰＣＩ−Ｘインターフェース２１４の制御を行う。そして通信部２０１は、ＣＰＵ１１２とＦＰＧＡ１１４のデータ転送の制御を行う。ＦＰＧＡ１１４は、ＰＣＩ−Ｘインターフェース２１４を用いて、ＣＰＵ１１２とデータの転送を行う。通信部２０１は、ＣＰＵ１１２とＦＰＧＡ１１４との間でのデータ転送で発生したエラーを検出する。また通信部２０１は、ＣＰＵ１１２から揮発メモリ１１３内のデータを不揮発メモリ１１５に退避する指示を受信する。【００３１】
また通信部２０１はレジスタ２２０を有している。レジスタ２２０には、ＦＰＧＡ１１４が処理するデータ、ＦＰＧＡ１１４が実行する処理の設定事項などが格納されている。ＦＰＧＡ１１４は、これらのデータ（ＦＰＧＡ１１４が処理するデータ、ＦＰＧＡ１１４が実行する処理の設定事項等）を用いてＣＰＵ１１２と不揮発メモリ１１５とのデータ転送を制御する。本実施例では、通信部２０１は、ＰＣＩ−Ｘインターフェース２１４の制御を行っているが、ＰＣＩ−Ｘインターフェース２１４の他にＰＣＩ−ｅｘｐｒｅｓｓなど他のもの、方法であってもよい。【００３２】
［２．４．２．データ転送部（ＴＲＮ）２０２、２０３］
ＣＭ１０５への電力供給が外部電源からバックアップユニット１０３に切り替わった場合、データ転送部２０２、２０３は揮発メモリ１１３に保持するデータを不揮発メモリ１１５に転送制御を実行する。データ転送部２０２、２０３は通信部２０１を介して、ＣＰＵ１１２からデータ退避の指示を受信し、データ転送部２０２、２０３はデータの転送制御を実行する。【００３３】
データ転送部２０２は、バッファ２１５を有している。同様にデータ転送部２０３は、バッファ２１６を有している。データ転送部２０２は、揮発メモリ１１３が保持するデータを、バッファ２１５を介してデータ変換部２１２に転送する。同様にデータ転送部２０３は、揮発メモリ１１３が保持するデータを、バッファ２１６を介してデータ変換部２１３に転送する。【００３４】
またデータ転送部２０２は、パリティデータとＣＲＣデータを生成する。同様にデータ転送部２０３も、パリティデータとＣＲＣデータを生成する。パリティデータは、不揮発メモリ１１５にデータを格納する所定の単位（Ｐａｇｅ）である７つのＰａｇｅデータの排他的論理和（ＥＸＯＲ）を計算したデータである。本実施例でいう「Ｐａｇｅ」は、不揮発メモリ１１５上でデータを管理するためのデータの単位である。そしてＰａｇｅデータは、そのＰａｇｅ単位の大きさのデータである。より具体的には、Ｐａｇｅデータは図４中に示す「Ｐａｇｅ」に格納されるデータである。本実施例においてＰａｇｅデータは２ｋＢｙｔｅである。【００３５】
データ転送部２０２は、ＣＰＵ１１２からＰＣＩ−Ｘインターフェース２１４を介して受信するＰａｇｅデータをバッファ２１５に一時的に保持する。続いてデータ転送部２０２は、ＣＰＵ１１２から受信する次のＰａｇｅデータを受信し、バッファ２１５に保持しているＰａｇｅデータと次のＰａｇｅデータの排他的論理和を計算して中間結果を算出する。データ転送部２０２は、算出した中間結果をバッファ２１５に保持する。さらにデータ転送部２０２はＣＰＵ１１２からＰａｇｅデータを受信し、そのＰａｇｅデータとバッファ２１５に保持する中間結果との排他的論理和を計算し、新たな中間結果を算出する。データ転送部２０２はバッファ２１５に保持する新たな中間結果に更新する。以下同様にしてデータ転送部２０２が受信するＰａｇｅデータと中間結果の排他的論和を計算してゆき、結果として７つのＰａｇｅデータの排他的論理和であるパリティデータを算出する。データ転送部２０３もデータ転送部２０２と同様の手順によりパリティデータを算出する。【００３６】
またデータ転送部２０２はＣＰＵ１１２から受信するＰａｇｅデータ内の４つのｍａｉｎデータの整合性をチェックするためのＣＲＣデータを生成する。同様にデータ転送部２０３もＣＰＵ１１２から受信するＰａｇｅデータ内の４つのｍａｉｎデータの整合性をチェックするためのＣＲＣデータを生成する。本実施例においてＣＲＣデータは２Ｂｙｔｅの大きさであり、ｍａｉｎデータに付加してＰａｇｅデータとして管理する。ＣＲＣデータは、データ転送部２０２、２０３がＰａｇｅデータ単位で演算して生成するデータである。ＣＲＣデータは、対応するＰａｇｅデータの転送においてエラーが発生しているか否かを示すデータである。つまりＣＲＣデータは、Ｐａｇｅデータ内の４つのｍａｉｎデータの整合性をチェックするためのデータである。なお［２．５．３．１．Ｐａｇｅ６００］において、図６を用いてＰａｇｅ６００の構成を説明する。【００３７】
また本実施例において、ＦＰＧＡ１１４は２つのデータ転送部２０２、２０３を有している。これは揮発メモリ１１３に保持するデータをより高速に、短時間で不揮発メモリ１１５に退避することを実現するためである。【００３８】
図１１は本実施例に係るデータ転送部（ＴＲＮ）２０２の処理フローチャートである。【００３９】
データ転送部２０２は、通信情報管理部２０５に格納される設定値の中から転送長と揮発性メモリのアドレスを読み出す。そしてデータ転送部２０２は、テーブル管理部２０６内の不良管理テーブル２１８のポインタから、データを書き込むエリアを指定する（ステップS１１０１）。データ転送部２０２が指定するエリアは図１０に示す論理エリア１００１内のエリア０〜アリア５８５のいずれかである。【００４０】
そしてデータ転送部２０２は、テーブル管理部２０６に格納される不良管理テーブル２１８を参照して、ステップＳ１１０１で指定したエリアにデータを書き込み可能であるか否かを判別する（ステップＳ１１０２）。不良管理テーブル２１８はＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２で構成されている。Ｄｉｒｔｙフラグ９０１は、メモリチップ３０１、３０２の１０２４個の「エリア」それぞれにおける「デバイス（ハード自身）壊れ以外のエラー」の有無を識別するフラグである。Ｄｉｒｔｙフラグ９０１の「１」は「デバイス（ハード自身）壊れ以外のエラー」があることを示し、「０」は「デバイス（ハード自身）壊れ以外のエラー」がないことを示す。「デバイス（ハード自身）壊れ以外のエラー」は、ＦＰＧＡ１１４がデータの書き込みを失敗（エラー）しても、書き込みをリトライすれば成功する可能性があるエラーのことである。【００４１】
Ｉｎｖａｌｉｄフラグ９０２は、メモリチップ３０１、３０２の１０２４個の「エリア」それぞれにおける「デバイス（ハード自身）壊れに起因するエラー」の有無を識別するフラグである。Ｉｎｖａｌｉｄフラグ９０２の「１」は「デバイス（ハード自身）壊れに起因するエラー」があることを示し、「０」は「デバイス（ハード自身）壊れに起因するエラー」がないことを示す。「デバイス（ハード自身）壊れに起因するエラー」は、ＦＰＧＡ１１４がデータの書き込みをリトライしても成功する可能性がないエラーのことである。指定したエリアに対応するＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２のいずれかが「１」である場合、データ転送部２０２はその指定したエリアにデータを書き込みできないと判別する。指定したエリアに対応するＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２のいずれもが「０」である場合、データ転送部２０２はその指定したエリアにデータを書き込みできると判別する。【００４２】
データ転送部２０２が、指定したエリアにデータを書き込みできないと判別する場合（ステップＳ１１０２  ＮＯ）、データ転送部２０２は再び不良管理テーブル２１８を参照してデータを書き込むエリアを新たに指定する（ステップＳ１１０１）。本実施例では、書き込みできないと判別したエリアの「次のエリア」を指定する。「次のエリア」とは、書き込みできないと判別したエリアを示すＡＩＤをインクリメントした結果の「エリア」のことである。本実施例ではエリアは「数」であり、インクリメントするとは、「１」付加することである。【００４３】
データ転送部２０２が、指定したエリアにデータを書き込めると判別する場合（ステップＳ１１０２  ＹＥＳ）、データ転送部２０２はバッファ２１５を介してデータ変換部２１２に転送して、不揮発メモリ１１５にデータを書き込む。本実施例においてデータ転送部２０２は、「Ｐａｇｅ」単位でデータを揮発メモリ１１５に書き込む。換言すればデータ転送部２０２はＰａｇｅデータを不揮発メモリ１１５の指定したエリアに書き込んでいく。より詳細には、Ｄｉｅ３１３〜３２０を構成するステートマシンが、データ転送部２０２が転送するＰａｇｅデータを不揮発メモリアレイに格納する。なお図８がＤｉｅ３１３の具体的な構成図である。Ｄｉｅ３１３〜３２０は、それぞれ２個のデータバッファ（データバッファ８０５、８０６）を有しており、Ｄｉｅ３１３〜３２０のステートマシンは、これらデータバッファを介して、データ転送部２０２が転送するＰａｇｅデータを不揮発メモリアレイ不揮発メモリアレイに格納する。【００４４】
そしてデータ転送部２０２は、そのＰａｇｅデータの書き込みにおいてエラーが発生したか否かを判別する（ステップＳ１１０４）。データ転送部２０２は、Ｄｉｅ３１３〜３２０のステートマシンからのエラー通知を受信したか否かによってエラーの発生の有無を判別している。またデータ転送部２０２は、通信部２０１からのエラー通知を受信して、不揮発メモリ１１３とＦＰＧＡ１１４間でのエラーを検出する。【００４５】
データ転送部２０２が「エラーなし」と判別する場合（ステップＳ１１０４  ＮＯ）には、不良管理テーブル２１８の指定したエリアに対応するＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２それぞれを「０」とする（ステップＳ１１０５）。ここでデータ転送部２０２が、指定したエリアにＰａｇｅデータを書き込み開始した時点では、指定したエリアに対応するＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２はそれぞれ「０」である。そのためＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２の変更はない。【００４６】
データ転送部２０２は、不揮発メモリ１１５に書き込んだＰａｇｅデータがその指定したエリアに書き込む最後のＰａｇｅデータであるか否かを判別する（ステップＳ１１０６）。データ転送部２０２が最後のＰａｇｅデータでないと判別する場合には（ステップＳ１１０６  ＮＯ）、データ転送部２０２は次のＰａｇｅデータを指定したエリアに書き込む（ステップ１１０３）。データ転送部２０２が「次のＰａｇｅデータ」を書き込む領域（「Ｐａｇｅ」）は、指定したエリア内において直前に書き込み完了したＰａｇｅデータを格納するために用いたデータバッファとは異なるデータバッファに対応付けられた領域（「Ｐａｇｅ」）である。データバッファはＤｉｅ３１３〜３２０が有するデータバッファである。データ転送部２０２が最後のＰａｇｅデータであると判別する場合には（ステップＳ１１０６  ＹＥＳ）、データ転送部２０２は処理を終了する。【００４７】
ステップＳ１１０６において、データ転送部２０２が「エラーあり」と判別する場合（ステップＳ１１０４  ＹＥＳ）には、さらにそのエラーしたデータが復元可能か否かを判別する（ステップＳ１１０７）。データ転送部２０２はエラーデータが復元可能か否かを、パリティデータ、ＣＲＣデータを用いてデータを復元可能か否かによって判別する。データ転送部２０２は、エラーデータが復元可能か否かの判別を、Ｐａｇｅデータが構成するストライプ中にすでにエラーデータ（他のＰａｇｅデータ）があるか否かによって判別する。ストライプの具体的な構成例は図５に示すストライプ５０１、５０２である。データ転送部２０２がエラーデータを復元可能であれば（ステップＳ１１０７  ＹＥＳ）、データ転送部２０２は、他の領域（交換エリア１００２）にＣＰＵ１１２から指示で書き込み開始した最初のデータから再び書き戻さなくてすむ。つまりデータ転送部２０２がエラーの復元可能か否かを判別することにより、復元可能なエラーを含む領域に書き込むデータを退避する交換エリアの領域を設ける必要がないので、交換エリア１００２の容量を削減することができる。【００４８】
データ転送部２０２がエラーデータを復元可能と判別する場合には（ステップＳ１１０７  ＹＥＳ）、データ転送部２０２はＣＲＣデータを壊して復元可能なエラーをマーキングしておく。ここでデータ転送部２０２は不良管理テーブル２１８を更新しない。データ転送部２０２は、データを書き戻すときに不良管理テーブル２１８を更新する（ステップＳ１１０８）。Ｄｉｒｔｙフラグ９０１、又はＩｎｖａｌｉｄフラグ９０２のいずれかを「１」にするかは、次のとおりである。エラーが不揮発メモリ１１５のハード自体の壊れに因るものでないのであれば、データ転送部２０２は指定したエリアのＤｉｒｔｙフラグ９０１を「１」とする。エラーが不揮発メモリ１１５のハード自体の壊れに因るものであれば、データ転送部２０２は指定したエリアのＩｎｖａｌｉｄフラグ９０２を「１」とする。そしてデータ転送部２０２はそのＰａｇｅデータが最後のＰａｇｅデータであるか否かを判別する（ステップＳ１１０６）。【００４９】
またデータ転送部２０２がエラーデータを復元不可能と判別する場合も（ステップＳ１１０７  ＮＯ）、データ転送部２０２は不良管理テーブル２１８の指定したエリアに対応するＤｉｒｔｙフラグ９０１、又はＩｎｖａｌｉｄフラグ９０２のいずれかを「１」とする（ステップＳ１１０９）。Ｄｉｒｔｙフラグ９０１、又はＩｎｖａｌｉｄフラグ９０２のいずれかを「１」にするかは、上記と同じ基準である。そしてデータ転送部２０２は交換エリア１００２内のエリアを新たに指定する（ステップ１１１０）。データ転送部２０２は、テーブル管理部２０６に格納される不良管理テーブル２１８を参照して、ステップＳ１１１０で指定したエリアにデータを書き込み可能であるか否かを判別する（ステップＳ１１１１）。【００５０】
データ転送部２０２が、指定したエリアにデータを書き込みできないと判別する場合（ステップＳ１１１１  ＮＯ）、データ転送部２０２は再び不良管理テーブル２１８を参照してデータを書き込むエリアを新たに指定する（ステップＳ１１１０）。【００５１】
データ転送部２０２が、指定したエリアにデータを書き込めると判別する場合（ステップＳ１１１１  ＹＥＳ）、データ転送部２０２はバッファ２１５を介してデータ変換部２１２に転送して、不揮発メモリ１１５にデータを書き込む（ステップＳ１１１２）。ここでもデータ転送部２０２は、そのＰａｇｅデータの書き込みにおいてエラーが発生したか否かを判別し、ステップ１１０４〜１１０９と同等の処理をする（不図示）。具体的にはデータ転送部２０２が「エラーなし」と判別する場合には、不良管理テーブル２１８の指定したエリアに対応するＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２それぞれを「０」とする。データ転送部２０２が「エラーあり」と判別する場合には、さらにそのエラーしたデータが復元可能か否かを判別する。データ転送部２０２がエラーデータを復元可能と判別する場合には、データ転送部２０２はＣＲＣデータを壊して復元可能なエラーをマーキングしておく。データ転送部２０２は不良管理テーブル２１８を更新しない。データ転送部２０２は、データを書き戻すときに不良管理テーブル２１８を更新する。またデータ転送部２０２がエラーデータを復元不可能と判別する場合も、データ転送部２０２は不良管理テーブル２１８の指定したエリアに対応するＤｉｒｔｙフラグ９０１、又はＩｎｖａｌｉｄフラグ９０２のいずれかを「１」とする。Ｄｉｒｔｙフラグ９０１、又はＩｎｖａｌｉｄフラグ９０２のいずれかを「１」にするかは、上記と同じ基準である。そしてデータ転送部２０２は交換エリア１００２内のエリアを再び指定する。【００５２】
データ転送部２０２は、不揮発メモリ１１５に書き込んだＰａｇｅデータがその指定したエリアに書き込む最後のＰａｇｅデータであるか否かを判別する（ステップＳ１１１３）。データ転送部２０２が最後のＰａｇｅデータでないと判別する場合には（ステップＳ１１１３  ＮＯ）、データ転送部２０２は次のＰａｇｅデータを指定したエリアに書き込む（ステップ１１１２）。データ転送部２０２が最後のＰａｇｅデータであると判別する場合には（ステップＳ１１１３  ＹＥＳ）、データ転送部２０２は処理を終了する。【００５３】
［２．４．３．データ書き戻し部（ＲＣＶ）２０４］
データ書き戻し部２０４は、復電時に不揮発メモリ１１５から揮発メモリ１１３にデータを転送する制御を行う。【００５４】
ディスクアレイ装置１００が復電すると、ＣＰＵ１１２は、ＦＰＧＡ１１４（より具体的にはＦＰＧＡ１１４内のデータ書き戻し部２０４）に対して、不揮発メモリ１１５に退避したデータを揮発メモリ１１３に書き戻すことを指示する。そしてデータ書き戻し部２０４はＣＰＵ１１２から指示を受信して、データ書き戻し部２０４はデータの転送制御（不揮発メモリ１１５から揮発メモリ１１３へのデータ転送制御）を実行する。【００５５】
データ書き戻し部２０４はバッファ２１７を有している。データ書き戻し部２０４は、不揮発メモリ１１５が保持するデータを、バッファ２１７を介して通信部２０１に転送する。そして通信部２０１は、ＣＰＵ１１２を介して、そのデータを揮発メモリ１１３に転送する。【００５６】
またデータ書き戻し部２０４は、不揮発メモリ１１５からメモリ制御部２１０、２１１、及びデータ変換制御部２１２、２１３を介して受信するＰａｇｅデータのエラーを検出する。データ書き戻し部２０４はＣＲＣデータをチェックして、データ転送部２０２、２０３が不揮発メモリ１１５に書き込んだデータとデータ書き戻し部２０４が読み出したデータとの整合性をチェックする。データ書き戻し部２０４がＣＲＣデータのチェックにおいてエラーを検出した場合、検出したエラーデータを対応するパリティデータを用いて復元できるか判別する。データ書き戻し部２０４がエラーデータをパリティデータを用いて復元できると判別する場合には、データ書き戻し部２０４はエラーデータに対応するパリティデータを用いてそのエラーデータを復元する。【００５７】
ここでＣＲＣデータはＰａｇｅデータ毎にデータ転送部２０２、２０３が生成するデータである。データ書き戻し部２０４がＣＲＣデータのチェックにおいてエラーを検出するということは、データ書き戻し部２０４が不揮発メモリ１１５から読み出したデータはデータ転送部２０２、２０３が不揮発メモリ１１５に書き込んだデータと整合性がとれていないということであるからである。【００５８】
［２．４．４．通信情報管理部（ＤＱＲ）２０５］
通信情報管理部２０５は、データ転送部２０２、２０３、及びデータ書き戻し部２０４の処理制御に使用する通信情報を保持する。データ転送部２０２、２０３、及びデータ書き戻し部２０４は、通信情報管理部２０５から通信情報を読み出して、それぞれの処理制御を実行する。【００５９】
通信情報は、処理を実行するために発行するコマンド、揮発メモリ１１３と不揮発メモリ１１５におけるメモリアドレス、揮発メモリ１１３と不揮発メモリ１１５との間で一度に転送するデータ量（転送長：ｔｒａｎｓｆｅｒ  ｌｅｎｇｔｈ）、揮発性メモリのアドレス（メモリアドレス）から構成されている。【００６０】
転送長（一度に転送するデータ量）は、揮発メモリ１１３と不揮発メモリ１１５との関係を考慮してＦＰＧＡ１１４を用いて設定することができる情報である。【００６１】
データ転送部２０２、２０３、及びデータ書き戻し部２０４はそれぞれ、不良管理テーブル２１８、２１９を参照して、順々に領域毎にデータの書き込み又はデータの読み出しを行う。ＡＩＤはエリア毎に付加する「エリア」を識別するＩＤである。これにより「ＦＰＧＡ１１４がアクセスする領域の抜け」を防止することができる。「ＦＰＧＡ１１４がアクセスする領域の抜け」とは、データ転送部２０２、２０３、及びデータ書き戻し部２０４がアクセスする領域の順番が、予め定められた順番でないことである。データ転送部２０２、２０３はＡＩＤの初期値を設定し、ＣＰＵ１１２が発行するコマンドに応じて、ＡＩＤの初期値をインクリメントしてＡＩＤを生成する。データ転送部２０２、２０３は生成したＡＩＤを不揮発メモリ１１５のＵｓｅｒ領域に格納する。Ｕｓｅｒ領域は、図７に示すスペアセクタ７００を構成するＵｓｅｒ領域７０６と同等の領域である。【００６２】
［２．４．５．テーブル管理部（ＴＢＭ）２０６、２０７］
テーブル管理部２０６は、不良管理テーブル２１８の制御を行う。【００６３】
不良管理テーブル２１８は、ＦＰＧＡ１１４が「エリア」へのデータ書き込み、及び「エリア」からのデータ読み出しの可否を判別するために、ＦＰＧＡ１１４（データ転送部２０２、データ書き戻し部２０４）が参照するテーブルである。【００６４】
本実施例において不良管理テーブル２１８で管理するエラーの発生した領域はエリアで識別する領域である。換言すれば、ＣＰＵ１１２からの１回の指示に基づきＦＰＧＡ１１４が不揮発メモリ１１５にデータを書き込む「エリア」内において、ＦＰＧＡ１１４（データ転送部２０２、データ書き戻し部２０４）がエラーを検出した場合、テーブル管理部２０６はその領域内にエラーがあることを示すフラグを不良管理テーブル２１８に書き込む。なお「エリア」の構成については、［２．５．２．不揮発メモリ１１５の構成２］で説明する。【００６５】
［２．４．５．１．不良管理テーブル２１８］
図９は本実施例にかかる不良管理テーブル２１８の一例である。【００６６】
不良管理テーブル２１８はＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２から構成されている。テーブル管理部２０６が不良管理テーブル２１８によって管理する「エリア」はメモリチップ３０１、３０２の１０２４個の「エリア」である。【００６７】
Ｄｉｒｔｙフラグ９０１は、メモリチップ３０１、３０２の１０２４個の「エリア」それぞれにおける「デバイス（ハード自身）壊れ以外のエラー」の有無を識別するフラグである。Ｄｉｒｔｙフラグ９０１の「１」は「デバイス（ハード自身）壊れ以外のエラー」があることを示し、「０」は「デバイス（ハード自身）壊れ以外のエラー」がないことを示す。「デバイス（ハード自身）壊れ以外のエラー」は、ＦＰＧＡ１１４がデータの書き込みを失敗（エラー）しても、書き込みをリトライすれば成功する可能性があるエラーのことである。【００６８】
Ｉｎｖａｌｉｄフラグ９０２は、メモリチップ３０１、３０２の１０２４個の「エリア」それぞれにおける「デバイス（ハード自身）壊れに起因するエラー」の有無を識別するフラグである。Ｉｎｖａｌｉｄフラグ９０２の「１」は「デバイス（ハード自身）壊れに起因するエラー」があることを示し、「０」は「デバイス（ハード自身）壊れに起因するエラー」がないことを示す。「デバイス（ハード自身）壊れに起因するエラー」は、ＦＰＧＡ１１４がデータの書き込みをリトライしても成功する可能性がないエラーのことである。【００６９】
同様にテーブル管理部２０７も、不揮発メモリ１１５においてデータの読み出し、データの書き込みのエラーが発生した領域を示す不良管理テーブル２１９の制御を行う。テーブル管理部２０７が不良管理テーブル２１９によって管理する「エリア」はメモリチップ３０３、３０４の１０２４個の「エリア」である。そして不良管理テーブル２１９もＤｉｒｔｙフラグ９０１とＩｎｖａｌｉｄフラグ９０２に相当するＤｉｒｔｙフラグとＩｎｖａｌｉｄフラグから構成される。【００７０】
［２．４．６．転送制御部（ＵＣＥ）２０８、２０９］
転送制御部２０８、２０９は、不揮発メモリ１１５へのコマンド（ＣＭＤ）発行制御を行う。本実施例において転送制御部の数は転送制御部２０８、２０９の２つであり、これは不揮発メモリ１１５へデータを転送するバス（ｂｕｓ）の数と対応している。【００７１】
停電時に、転送制御部２０８はテーブル管理部２０６の不良管理テーブル２１８を不揮発メモリ１１５に書き込む。同様に停電時に、転送制御部２０９はテーブル管理部２０７の不良管理テーブル２１８を不揮発メモリ１１５に書き込む。【００７２】
転送制御部２０８、２０９のそれぞれが不良管理テーブル２１８、２１９を書き込む領域は、不揮発メモリ１１５においてデータの書き込み回数が他の領域に比べて多く保証されている領域である。【００７３】
また復電時に、転送制御部２０８は不揮発メモリ１１５に保持する不良管理テーブル２１８をテーブル管理部２０６に読み出す制御を行う。同様に復電時に、転送制御部２０９は不揮発メモリ１１５に保持する不良管理テーブル２１９をテーブル管理部２０７に読み出す制御を行う。【００７４】
［２．４．７．メモリ制御部（ＯＮＣ）２１０、２１１］
メモリ制御部２１０、２１１は不揮発メモリ１１５のインターフェースの制御を行う。メモリ制御部２１０、２１１は、不揮発メモリ１１５へデータの書き込み、不揮発メモリ１１５からデータの読み出しを行う。メモリ制御部２１０、２１１は、不揮発メモリ１１５の処理を制御することによって、不揮発メモリ１１５へデータの書き込み、不揮発メモリ１１５からデータの読み出しを行う。【００７５】
［２．４．８．データ変換制御部（ＮＦＣ）２１２、２１３］
データ変換制御部２１２、２１３は、不揮発メモリ１１５のＩＰの制御を行う。データ変換制御部２１２、２１３は、揮発メモリ１１３と不揮発メモリ１１５のデータの整合性をとる処理を実行する。データ変換制御部２１２は、データ転送部２０２からデータを受信すると、データを不揮発メモリ１１５に格納可能な形式に変換してメモリ制御部２１０へ転送する。またデータ変換制御部２１２は、メモリ制御部２１０からデータを受信すると、データを揮発メモリ１１３に格納可能な形式に変換してデータ書き戻し部２０４に転送する。同様にしてデータ変換制御部２１３は、データ転送部２０３からデータを受信すると、データを不揮発メモリ１１５に格納可能な形式に変換してメモリ制御部２１１へ転送する。またデータ変換制御部２１３は、メモリ制御部２１１からデータを受信すると、データを揮発メモリ１１３に格納可能な形式に変換してデータ書き戻し部２０４に転送する。【００７６】
［２．５．不揮発メモリ１１５、１２１］
次に本実施例において、揮発メモリ１１３が保持しているデータを退避するための不揮発メモリ１１５、１２１について説明する。【００７７】
本実施例に係るＦＰＧＡ１１４は、ＣＰＵ１１２の指示によって、揮発メモリ１１３が保持するデータを不揮発メモリ１１５に退避する。ＦＰＧＡ１２０は、ＣＰＵ１１８の指示によって、揮発メモリ１１９が保持するデータを不揮発メモリ１２１に退避する。【００７８】
不揮発メモリ１１５は、停電時に揮発メモリ１１３が保持するデータを退避して格納する記憶媒体である。同様に不揮発メモリ１２１は、停電時に揮発メモリ１１９が保持するデータを退避して格納する記憶媒体である。不揮発メモリ１１５はＦＰＧＡ１１４に接続している。揮発メモリ１１３、ＦＰＧＡ１１４はＣＰＵ１１２に接続している。不揮発メモリ１１５は不良管理テーブルを有している。不良管理テーブルが格納されている領域は、不揮発メモリ１１５においてデータの書き込み回数が他の領域に比べて多く保証されている領域である。この不良管理テーブルを格納しておく領域は、図４に示す「Ｂｌｏｃｋ０」である。データ転送部２０２が、テーブル管理部２０６に格納する不良管理テーブル２１８を不揮発メモリ１１５に転送して、メモリチップ３０１、３０２の「Ｂｌｏｃｋ０」に格納する。同様にデータ転送部２０３も、テーブル管理部２０７に格納する不良管理テーブル２１９を不揮発メモリ１１５に転送して、メモリチップ３０３、３０４の「Ｂｌｏｃｋ０」に格納する。【００７９】
同様に不揮発メモリ１２１はＦＰＧＡ１２０に接続している。揮発メモリ１１９、ＦＰＧＡ１２０はＣＰＵ１１８に接続している。不揮発メモリ１１９は不良管理テーブルを有している。不揮発メモリ１２１の構成は不揮発メモリ１１５の構成と同等である。以下、不揮発メモリ１１５の構成について詳細について説明する。【００８０】
［２．５．１．不揮発メモリ１１５の構成１］
図３は本実施例に係る不揮発メモリ１１５の構成を示す図である。【００８１】
不揮発メモリ１１５は、メモリチップ３０１、３０２、３０３、３０４から構成されている。メモリチップ３０１、３０２、３０３、３０４は、不揮発メモリ１１５に格納するデータを分割して管理する単位である。【００８２】
メモリチップ３０１は、Ｂａｎｋ３０５、３０６から構成されている。同様にメモリチップ３０２は、Ｂａｎｋ３０７、３０８から構成されている。メモリチップ３０３は、Ｂａｎｋ３０９、３１０から構成されている。メモリチップ３０４は、Ｂａｎｋ３１１、３１２から構成されている。【００８３】
Ｂａｎｋ３０５〜３１２も、不揮発メモリ１１５にデータを分割して管理する単位である。以下図４を用いて、不揮発メモリ１１５の一部（メモリチップ３０１、３０２：Ｂａｎｋ３０５〜３０８）の詳細の構成を説明する。図４は本実施例に係る不揮発メモリ１１５に係るＢａｎｋ３０５〜３０８の詳細図である。なおメモリチップ３０３、３０４（Ｂａｎｋ３０９〜３１２）はメモリチップ３０１、３０２（Ｂａｎｋ３０５〜３０８）と同等の構成であるあるため説明を省略する。【００８４】
Ｂａｎｋ３０５は、Ｄｉｅ３１３、３１４から構成されている。Ｄｉｅ３１３はＢｌｏｃｋ０〜Ｂｌｏｃｋ２０４７までの２０４８個のＢｌｏｃｋから構成されている。Ｄｉｅ３１４もＢｌｏｃｋ０〜Ｂｌｏｃｋ２０４７までの２０４８個のＢｌｏｃｋから構成されている。そしてＤｉｅ３１３、３１４のＢｌｏｃｋ０〜Ｂｌｏｃｋ２０４７はそれぞれＰａｇｅ０〜Ｐａｇｅ６３までの６４個のＰａｇｅから構成されている。「Ｄｉｅ」、「Ｂｌｏｃｋ」、及び「Ｐａｇｅ」も不揮発メモリにおいてデータを格納する領域の単位である。「Ｄｉｅ」が、不揮発メモリ１１５において物理的に分離したデータを格納する単位（ハード構成の単位）である。本実施例において、「Ｐａｇｅ」は２ｋＢｙｔｅである。図６はＤｉｅ３１３のハード構成の図である。Ｄｉｅ３１３の不揮発メモリアレイ８１０は図４に記載の２０４８個の「Ｂｌｏｃｋ０〜Ｂｌｏｃｋ２０４７」である。そのため不揮発メモリ１１５は不揮発メモリアレイを１６個備えている。そしてＤｉｅ３１３〜３２０それぞれが２つのデータバッファ（図６に記載のデータバッファ８０５、８０６など）を備えているので、不揮発メモリ１１５は３２個のデータバッファを備えている。そしてＤｉｅ３１３のステートマシン８０７がＦＰＧＡ１１４から転送されたデータ（Ｐａｇｅデータ）を不揮発メモリアレイ８１０に格納する。他のＤｉｅ３１４〜３２０もステートマシンを有しており、それらのステートマシンがＤｉｅ３１４〜３２０それぞれが備える不揮発メモリアレイに、ＦＰＧＡ１１４から転送されたデータ（Ｐａｇｅデータ）を格納する。【００８５】
同様にＢａｎｋ３０６は、Ｄｉｅ３１５、３１６から構成されている。Ｄｉｅ３１５、３１６もまたそれぞれ、Ｂｌｏｃｋ０〜Ｂｌｏｃｋ２０４７までの２０４８個のＢｌｏｃｋから構成されている。そしてＤｉｅ３１５、３１６のＢｌｏｃｋ０〜Ｂｌｏｃｋ２０４７はそれぞれＰａｇｅ０〜Ｐａｇｅ６３までの６４個のＰａｇｅから構成されている。【００８６】
同様にＢａｎｋ３０７は、Ｄｉｅ３１７、３１８から構成されている。Ｄｉｅ３１７、３１８もまたそれぞれ、Ｂｌｏｃｋ０〜Ｂｌｏｃｋ２０４７までの２０４８個のＢｌｏｃｋから構成されている。そしてＤｉｅ３１７、３１８のＢｌｏｃｋ０〜Ｂｌｏｃｋ２０４７はそれぞれＰａｇｅ０〜Ｐａｇｅ６３までの６４個のＰａｇｅから構成されている。【００８７】
同様にＢａｎｋ３０８は、Ｄｉｅ３１９、３２０から構成されている。Ｄｉｅ３１９、３２０もまたそれぞれ、Ｂｌｏｃｋ０〜Ｂｌｏｃｋ２０４７までの２０４８個のＢｌｏｃｋから構成されている。そしてＤｉｅ３１９、３２０のＢｌｏｃｋ０〜Ｂｌｏｃｋ２０４７はそれぞれＰａｇｅ０〜Ｐａｇｅ６３までの６４個のＰａｇｅから構成されている。【００８８】
［２．５．２．不揮発メモリ１１５の構成２］
またＦＰＧＡ１１４がデータを書き込む単位での不揮発メモリ１１５の構成について説明する。不揮発メモリ１１５の一部（メモリチップ３０１、３０２）は１０２４個の「エリア」から構成されている。つまり不揮発メモリ１１５は２０４８個の「エリア」から構成されている。「エリア」は、ＣＰＵ１１２からの１回の指示によって、ＦＰＧＡ１１４が不揮発メモリ１１５にデータを書き込む領域である。ＦＰＧＡ１１４は不良管理テーブル２１８、２１９によって「エリア」を識別して管理する。【００８９】
本実施例において、この「エリア」は１６個の「Ｂｌｏｃｋ」で構成されている。１６個の「Ｂｌｏｃｋ」はメモリチップ３０１、３０２（Ｄｉｅ３１３〜３２０）が備える１６個のデータバッファ（図６に記載のデータバッファ８０５、８０６など）それぞれを介して不揮発メモリ１１５に格納されるデータの「Ｂｌｏｃｋ」である。換言すれば、「エリア」は、不揮発メモリ１１５が備える異なるデータバッファを介して、不揮発メモリ１１５に転送される一定量のデータを格納する領域である。ＦＰＧＡ１１４は揮発メモリ１１３から不揮発メモリ１１５へ「エリア」単位でデータの転送制御を行う。本実施例ではＣＰＵ１１２がＦＰＧＡ１１４に「エリア」ごとにデータ転送を指示する。【００９０】
そして不揮発メモリ１１５の「エリア（ＡＲＥＡ）」は、「論理エリア（ＬＯＧＩＣＡＬ  ＡＲＥＡ）」と「交換エリア（ＲＥＰＬＡＣＥＭＥＮＴ  ＡＲＥＡ）」から構成されている。【００９１】
図１０は本実施例に係る不揮発メモリ１１５のメモリチップ３０１、３０２における「エリア（ＡＲＥＡ）０〜エリア（ＡＲＥＡ）１０２３」の概念図である。本実施例では、論理エリア（ＬＯＧＩＣＡＬ  ＡＲＥＡ）１００１は、エリア０〜エリア５８５から構成され、交換エリア（ＲＥＰＬＡＣＥＭＥＮＴ  ＡＲＥＡ）１００２はエリア５８６〜エリア１０２３から構成されている。メモリチップ３０３、３０４も「論理エリア」と「交換エリア」から構成される。【００９２】
ＦＰＧＡ１１４は、揮発メモリ１１３が保持するデータを不揮発メモリ１１５の論理エリア（ＬＯＧＩＣＡＬ  ＡＲＥＡ）１００１に退避する（データ転送する）。ＦＰＧＡ１１４が、論理エリア１００１を構成するエリア（エリア０〜エリア５８５）のうちある特定のエリアにデータを書き込んでいる途中、ＦＰＧＡ１１４がデータの書き込みで発生したエラーデータを復元することができないと判別した場合、ＦＰＧＡ１１４は交換エリア１００２を構成するエリア５８６〜エリア１０２３のいずれかのエリアに、その特定のエリアに書き込む予定であったデータを再び書き直す。ＦＰＧＡ１１４は、ＦＰＧＡ１１４が生成するパリティデータによって復元できるか否かによって、「エラーデータの復元可否の判別」する。なお［２．４．２．データ転送部（ＴＲＮ）２０２、２０３］で記載したように、ＦＰＧＡ１１４のデータ転送部２０２、２０３がパリティデータを生成する。【００９３】
同様にＦＰＧＡ１１４は、メモリチップ３０３、３０４における「エリア」においても、メモリチップ３０１、３０２における「エリア（ＡＲＥＡ）０〜エリア（ＡＲＥＡ）１０２３」にデータを書き込む基準で、揮発メモリ１１３に保持データを書き込む。「書き込む基準」とは、「エラーデータの復元可否の判別」、「エラーデータを復元不可能と判別する場合には、交換エリアに書き直す」ことを意味する。【００９４】
［２．５．３．小エリア５０１］
図５は本実施例に係る不揮発メモリ１１５の小エリア５０１の構成図である。【００９５】
小エリア５０１は、１６個の「Ｐａｇｅ」から構成される。小エリア５０１の大きさは３２ｋＢｙｔｅである。なお不揮発メモリ１１５の各「エリア」は６４個の小エリア（小エリア５０１など）から構成されている。【００９６】
また小エリア５０１の１６個の「Ｐａｇｅ」に格納されるＰａｇｅデータ５０４〜５１０、５１２〜５１８、及びパリティデータ５１１、５１９は、ストライプ５０２、５０３を構成している。ストライプ５０２はＰａｇｅデータ５０４〜５１０、及びパリティデータ５１１から構成される。同様にストライプ５０３はＰａｇｅデータ５１２〜５１８、及びパリティデータ５１９から構成される。【００９７】
ストライプ５０２は、Ｐａｇｅデータ５０４〜５１０、及びパリティデータ５１１により、いわゆる（７＋１）のＲＡＩＤ５の構成になっている。ストライプ５０２は、ＣＰＵ１１２からの１回の指示によって、ＦＰＧＡ１１４が不揮発メモリ１１５にデータを書き込む領域（「エリア」）内の「Ｐａｇｅ」に格納するＰａｇｅデータ５０４〜５１０、及びパリティデータ５１１で構成されている。またストライプ５０２は、物理的に分離した単位を示す「Ｄｉｅ３１３〜３２０」それぞれにおける所定の「Ｐａｇｅ」に格納するＰａｇｅデータでＲＡＩＤ５を構成するストライプである。つまりストライプ５０２を構成するＰａｇｅデータ５０４〜５１０、及びパリティデータ５１１を格納する「Ｐａｇｅ」それぞれは、物理的に（ハード構成としては）分離している。【００９８】
ここで同一のハード構成上の「Ｐａｇｅ」に格納するＰａｇｅデータによりストライプを形成した場合を考える。そのストライプにおける２つ以上のＰａｇｅデータがエラーする確率に比べて、ストライプ５０２を構成するＰａｇｅデータ５０４〜５１０、及びパリティデータ５１１のうち２つ以上がエラーする確率は低い。ストライプ５０２を構成するＰａｇｅデータ５０４〜５１０、及びパリティデータ５１１を格納する「Ｐａｇｅ」が物理的に分離しているからである。【００９９】
特に不揮発メモリ１１５がＮＡＮＤ型フラッシュメモリである場合は、ハード構成として分離したＤｉｅ単位で、データの書き込み失敗などのエラーが発生しやすい。そのため上記したように異なる「Ｄｉｅ」に属する「Ｐａｇｅ」に格納するＰａｇｅデータによってＲＡＩＤ５のストライプを構成したほうが有益である。【０１００】
またストライプ５０２を構成するＰａｇｅデータ５０４〜５１０、及びパリティデータ５１１は、不揮発メモリ１１５が備える複数のデータバッファであって異なるデータバッファを介して転送されるデータである。【０１０１】
同様にストライプ５０３もＰａｇｅデータ５１２〜５１８、及びパリティデータ５１９により、（７＋１）のＲＡＩＤ５の構成になっている。ストライプ５０３も、ＣＰＵ１１２からの１回の指示によって、ＦＰＧＡ１１４が不揮発メモリ１１５にデータを書き込む領域（「エリア」）内の「Ｐａｇｅ」に格納するＰａｇｅデータ５１２〜５１８、及びパリティデータ５１９で構成されている。またストライプ５０３は、物理的に分離した単位を示す「Ｄｉｅ３１３〜３２０」それぞれにおける所定の「Ｐａｇｅ」に格納するＰａｇｅデータでＲＡＩＤ５を構成するストライプである。【０１０２】
［２．５．３．１．Ｐａｇｅ６００］
図６は本実施例に係るＰａｇｅ６００の構成図である。Ｐａｇｅ６００は、図４、５に示す「Ｐａｇｅ」と同等の領域であり、不揮発メモリ１１５内の領域である。Ｐａｇｅ６００は、メインセクタ（ｍａｉｎ−ｓｅｃｔｏｒ）６０１〜６０４、及びスペアセクタ（ｓｐａｒｅ−ｓｅｃｔｏｒ）６０５〜６０８から構成される。【０１０３】
メインセクタ（ｍａｉｎ−ｓｅｃｔｏｒ）６０１〜６０４それぞれには、Ｐａｇｅデータ本来のユーザ情報など示すｍａｉｎデータが格納される。本実施例ではＰａｇｅ６００には４つのｍａｉｎデータが格納される。ｍａｉｎデータの大きさは、５１２Ｂｙｔｅである。スペアセクタ（ｓｐａｒｅ−ｓｅｃｔｏｒ）６０５〜６０８それぞれは、ｍａｉｎデータの整合性などに関するｓｐａｒｅデータなどが格納される。本実施例ではＰａｇｅ６００には４つのｓｐａｒｅデータが格納される。ｓｐａｒｅデータの大きさは、１６Ｂｙｔｅである。【０１０４】
［２．５．３．２．スペアセクタ７００］
図７は本実施例に係るスペアセクタ７００の構成図である。スペアセクタ７００は図６に記載のスペアセクタ６０５〜６０８と同等の領域であり、不揮発メモリ１１５内の領域である。スペアセクタ７００は、Ｉｎｖａｌｉｄ領域７０１、論理セクタ（Ｌｏｇｉｃａｌ−ｓｅｃｔｏｒ）７０２、Ｒｅｓｅｒｖｅ領域７０３、７０５、ＥＣＣ領域７０４、Ｕｓｅｒ領域７０６から構成される。【０１０５】
Ｉｎｖａｌｉｄ領域７０１には、スペアセクタ７００に対応するメインセクタが不揮発メモリ１１５の工場出荷時に不良か否かを情報が格納されている。【０１０６】
論理セクタ（Ｌｏｇｉｃａｌ−ｓｅｃｔｏｒ）７０２は、スペアセクタ７００を識別する情報が格納されている。Ｒｅｓｅｒｖｅ領域７０３、７０５は、予備の空き領域である。ＥＣＣ領域７０４には、不揮発メモリ１１５において生成するＥＣＣデータを格納する領域である。ＥＣＣデータは、ｍａｉｎデータのビットエラーを訂正するためのデータである。Ｕｓｅｒ領域７０６には、ＣＲＣデータまたはＡＩＤデータが格納される。【０１０７】
［２．５．４．Ｄｉｅ３１３〜３２０］
図８は本実施例に係るＤｉｅ３１３のハード構成図である。他のＤｉｅ３１４〜３２０もＤｉｅ３１３と同様のハード構成である。【０１０８】
Ｄｉｅ３１３は、図８における点線で囲まれた部分である。Ｄｉｅ３１３は、ホストインタフェース（Ｈｏｓｔ  Ｉｎｔｅｒｆａｃｅ）８０１を介して、ＦＰＧＡ１１４とデータの転送を行う。【０１０９】
Ｄｉｅ３１３は、レジスタ（Ｉｎｔｅｒｎａｌ  Ｒｅｇｉｓｔｅｒｓ）８０２、バッファメモリ（Ｂｕｆｆｅｒ  ＲＡＭ）８０３、ステートマシン（Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）８０７、エラー訂正回路（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｌｏｇｉｃ）８０９、不揮発メモリアレイ８１０から構成される。バッファメモリ８０３はブートバッファ（Ｂｏｏｔ  ＲＡＭ）８０４、データバッファ（Ｄａｔａ  ＲＡＭ）８０５、８０６から構成される。またステートマシン８０７は、ブート・ローダ（Ｂｏｏｔ  ｌｏａｄｅｒ）８０８を保持している。ブート・ローダ８０８は、Ｄｉｅ３１３がデータの転送制御を開始するに際して、レジスタ８０２から制御プログラムをステートマシン８０７に読み込んでＤｉｅ３１３を起動するプログラムである。【０１１０】
レジスタ８０２には、アドレス、コマンド、コンフィグ（設定情報）などが格納されている。ステートマシン８０７は、レジスタ８０２からこれらアドレス、コマンド、コンフィグを読み出して転送制御を行う。アドレスは不揮発メモリアレイ８１０におけるデータのアドレスである。コマンドはＤｉｅ３１３がデータの転送制御に際して発行する命令コマンドである。【０１１１】
不揮発メモリアレイ８１０は、図４に示す２０４８個の「Ｂｌｏｃｋ」から構成されており、データの記憶部である。そしてＤｉｅ３１３は、図４のＤｉｅ３１３に属するＢｌｏｃｋ０、Ｂｌｏｃｋ２、Ｂｌｏｃｋ４、Ｂｌｏｃｋ６、・・・、Ｂｌｏｃｋ２０４６（不揮発メモリアレイ８１０の一部分）に、データバッファ８０５を介して、データを格納する。またＤｉｅ３１３は、図４のＤｉｅ３１３に属するＢｌｏｃｋ１、Ｂｌｏｃｋ３、Ｂｌｏｃｋ５、Ｂｌｏｃｋ７、・・・、Ｂｌｏｃｋ２０４７に、データバッファ８０６を介して、データを格納する。このことは、偶数番のＢｌｏｃｋに対してＤｉｅ３１３は、データバッファ８０５を介して、データを格納することを意味する。奇数番のＢｌｏｃｋに対してＤｉｅ３１３は、データバッファ８０６を介して、データを格納することを意味する。【０１１２】
Ｄｉｅ３１３はデータバッファ８０５、８０６の２つのバッファを用いて不揮発メモリアレイ８１０にデータを格納している。Ｄｉｅ３１３は、データバッファ８０５、８０６内に図４に示す「Ｐａｇｅ」単位でデータを保持する。そしてＤｉｅ３１３のステートマシン８０７は、データバッファ８０５、８０６を介して、不揮発メモリアレイ８１０にデータを転送する。換言すれば、Ｄｉｅ３１３は「Ｐａｇｅ」単位でデータバッファ８０５、８０６を介して不揮発メモリアレイ８１０にデータを転送する。【０１１３】
ステートマシン８０７は、データバッファ８０５を介して、不揮発メモリアレイ８１０にデータを転送すると共に、ステートマシン８０７は次に不揮発メモリアレイ８１０に転送するデータをデータバッファ８０６に保持する。これによりＤｉｅ３１３は効率的に不揮発メモリアレイ８１０にデータを格納することができる。ここで「次に不揮発メモリアレイ８１０に転送するデータ」とは、「ステートマシン８０７が、データバッファ８０５に保持するデータを不揮発メモリアレイ８１０に転送完了した後に、続いてステートマシン８０７が、不揮発メモリアレイ８１０に転送するデータ」のことである。そしてステートマシン８０７が、データバッファ８０６を介して、不揮発メモリアレイ８１０にデータを転送すると共に、ステートマシンは不揮発メモリアレイ８１０に転送するデータをデータバッファ８０５に保持する。【０１１４】
他のＤｉｅ３１４〜３２０も、それぞれデータバッファ８０５、８０６に相当するデータバッファ、及び不揮発メモリアレイ８１０に相当する不揮発メモリアレイを備えている。そしてＤｉｅ３１４〜３２０もそれぞれ、それぞれが備えているデータバッファを用いて、データを「Ｐａｇｅ」単位で、Ｄｉｅ３１４〜３２０それぞれが有する不揮発メモリアレイに転送する。【０１１５】
不揮発メモリ１１５は、図５に示すように物理的に分離した単位を示す「Ｄｉｅ３１３〜３２０」それぞれにおける所定の「Ｐａｇｅ」に格納するＰａｇｅデータ、パリティデータによりＲＡＩＤ５のストライプ（ストライプ５０２、５０３など）を構成する。つまり不揮発メモリ１１５は物理的に異なるデータバッファを介して転送するデータ（Ｐａｇｅデータ）を冗長化（ＲＡＩＤ５の構成）する。不揮発メモリ１１５が、所定のデータ単位でＲＡＩＤ５のストライプ（ストライプ５０２、５０３など）を構成することによって、ストライプ（ストライプ５０２、５０３など）内で１つのデータ（Ｐａｇｅデータ）がエラーしても復元できる。これにより不揮発メモリ１１５内におけるデータの冗長構成からＦＰＧＡ１１４がエラーデータを復元できる場合には、ＦＰＧＡ１１４は揮発メモリ１１３から不揮発メモリ１１５にデータを転送する過程でエラーが発生しても、ＣＰＵ１１２の命令により転送開始したデータをはじめから新たに書き戻すことなく、データ（約２ＭＢｙｔｅのデータ）を不揮発メモリ１１５に転送することができる。ＦＰＧＡ１１４がデータを不揮発メモリ１１５に書き込み完了した後に、エラーしたデータを復元すればよいからである。【０１１６】
またブートバッファ８０４は、Ｄｉｅ３１３を起動するための情報を一次的に保持しておく記憶領域である。またエラー訂正回路８０９は、Ｄｉｅ３１３において転送のエラーがあったデータを訂正する回路である。【０１１７】
以上ことは、次のように換言することができる。不揮発メモリ１１５は複数のデータバッファを備えている。そしてそれぞれのデータバッファに対して不揮発メモリ１１５の領域（データを格納する領域）が割り当てられている。【０１１８】
ＦＰＧＡ１１４は、ＣＰＵ１１２から指示によって、一定量のデータを連続して不揮発メモリ１１５に書き込む（格納する）。ＣＰＵ１１２からの１回の指示によって、ＦＰＧＡ１１４が不揮発メモリ１１５により多くのデータを書き込むほうが、ＦＰＧＡ１１４が不揮発メモリ１１５にデータを書き込む時間は短くてすむ。ＦＰＧＡ１１４が不揮発メモリ１１５により多くのデータを書き込むために、ＣＰＵ１１２からのＦＰＧＡ１１４への指示が少なくてよいからである。【０１１９】
一方で、１回の指示によって、ＦＰＧＡ１１４が不揮発メモリ１１５により多くのデータを書き込むほど、データの書き込みの過程でエラーが発生する確率が高くなる。データの書き込みの過程でエラーが発生した場合、ＦＰＧＡ１１４は、再びその指示により、データを最初から書き直す。そのためエラーの発生により書き戻しが多くなればそれに伴い、ＦＰＧＡ１１４がデータを不揮発メモリ１１５に書き込む（退避する）の多くの時間がかかる。さらにデータの書き込み途中でエラーが発生して、再びＦＰＧＡ１１４が不揮発メモリ１１５の元の領域にデータを書き戻す場合には、ＣＰＵ１１２からの指示で不揮発メモリ１１５に書き込み始めたデータであって書き込みの成功したデータを不揮発メモリ１１５から削除した上で、再び書き戻しを行わなければならない。そのためＦＰＧＡ１１４が不揮発メモリ１１５からエラー発生以前に書き込みの成功したデータを削除（イレース）する時間もかかる。なおＣＰＵからの指示が複数回ある場合には、ＦＰＧＡ１１４はその指示ごとにデータの書き込み管理を行う。ＦＰＧＡ１１４は一定のデータ量ごとに不揮発メモリ１１５にデータを書き込む。エラーが発生した場合に、ＦＰＧＡ１１４は、エラーの発生したその一定のデータ量の範囲において、書き込みが成功したデータを削除する。【０１２０】
そのため本実施例では、ＦＰＧＡ１１４がＣＰＵ１１２から指示によって、不揮発メモリ１１５に連続して書き込むデータにおいて、一定のデータ単位（ストライプ５０２、５０３などのストライプ単位）で冗長構成とする。つまりＦＰＧＡ１１４は不揮発メモリ１１５に転送する一定のデータ量ごとにパリティデータを生成し、データを不揮発メモリ１１５に格納すると共にパリティデータも不揮発メモリ１１５に格納する。【０１２１】
ＦＰＧＡ１１４がＣＰＵ１１２から指示によって、連続して一定量のデータを不揮発メモリ１１５に書き込む。そしてＦＰＧＡ１１４がデータを不揮発メモリ１１５へ書き込む過程でエラーが発生しても、ＦＰＧＡ１１４がパリティデータによって、そのエラーデータを復元できる場合には、ＦＰＧＡ１１４はＣＰＵ１１２から指示で書き込み開始した最初のデータから再び書き戻さない。ＦＰＧＡ１１４は、エラー検出後も続けてＣＰＵ１１２から指示があった残りのデータを不揮発メモリ１１５に書き込む。【０１２２】
ＦＰＧＡ１１４が、データを不揮発メモリ１１５へ書き込む過程で発生したエラーがパリティデータを用いて復元できないと判別する場合には、ＦＰＧＡ１１４は、不揮発メモリ１１５の別の領域（本実施例は図１０に記載の「交換エリア１００２」など）に、再びデータを最初から書き直す。【０１２３】
これよりディスクアレイ装置１００は、ＦＰＧＡ１１４がＣＰＵ１１２から指示によって、不揮発メモリ１１５に連続して書き込むデータの量を減らさずに、データの書き込み途中におけるエラーに起因するデータの書き直しを減らすことができる。さらにディスクアレイ装置１００は、エラー発生以前に書き込みの成功したデータを削除（イレース）する時間も削減できる。ディスクアレイ装置１００はディスクコントローラ１０５の揮発メモリ１１３に保持するデータを不揮発メモリ１１５により高速に退避することができる。【０１２４】
ＦＰＧＡ１１４は、不揮発メモリ１１５が備える当該複数のデータバッファを介して、それぞれのデータバッファに割り当てられた不揮発メモリ１１５の領域（データを格納する領域）にデータを格納する。【０１２５】
［２．６．ＤＥポート１１６、１２２］
ＤＥポート１１６はディスク１０７〜１１０に接続されている。同様にＤＥポート１２２もディスク１０７〜１１０に接続されている。【０１２６】
ＤＥポート１１６は、ＤＥ（ドライブエンクロージャー）を拡張するためのポートである。本実施例ではＤＥポート１１６は、最大９個のＤＥをカスケード接続で多段接続することができる。１つのＤＥには例えば６本のディスクを接続することができる。そのためＤＥポート１１６は、ＤＥを介して、最大で１２０本のディスクを接続することができる。本実施例では代表して、ＤＥポート１１６に接続されるディスク１０７〜１１０を記載している。
［２．７．ディスクアレイ装置１００の復旧］
ディスクアレイ装置１００が停電から復旧すると、ＦＰＧＡ１１４は不揮発メモリ１１５に退避したデータを揮発メモリ１１３に書き戻す。より具体的には、データ書き戻し部２０４が不揮発メモリ１１５に退避したデータを揮発メモリ１１３に書き戻す。ＣＰＵ１１２は、データ書き戻し部２０４に対して、不揮発メモリ１１５に退避したデータを揮発メモリ１１３に書き戻すことを指示する。データ書き戻し部２０４は、不揮発メモリ１１５が保持するデータを、バッファ２１７を介して通信部２０１に転送する。そして通信部２０１は、ＣＰＵ１１２を介して、そのデータを揮発メモリ１１３に転送する。【０１２７】
データ書き戻し部２０４がデータを不揮発メモリ１１５から揮発メモリ１１３に転送完了した後、テーブル管理部２０６は不良管理テーブル２１８のＤｉｒｔｙフラグ９０１をリセットする（Ｄｉｒｔｙフラグ９０１を構成するフラグすべて「０」に戻す）。同様にテーブル管理部２０７は不良管理テーブル２１９のＤｉｒｔｙフラグをリセットする。これにより本実施例におけるディスクアレイ装置１００は不揮発メモリ１１５の資源（容量）を有効に用いることが可能である。Ｄｉｒｔｙフラグが「１」であったエリアは、不揮発メモリ１１５のハード自体の壊れ以外に起因してデータ転送部２０２、２０３がデータの書き込みをエラーした領域である。つまりＤｉｒｔｙフラグが「１」であったエリアは、データ転送部２０２、２０３がデータを再び書き込みトライすれば、書き込むことができる領域である。そのため停電から復旧した段階でテーブル管理部２０６、２０７がＤｉｒｔｙフラグを「１」にリセットしておくことによって、再び停電が発生した場合、データ転送部２０２、２０３はＤｉｒｔｙフラグが「１」であったエリアにもデータを書き込む（退避する）ことができる。
【産業上の利用可能性】
【０１２８】
本実施例によるバックアップ方法は、ディスクアレイ装置にバックアップ方法である。したがって、本実施例によるバックアップ方法は、停電が発生した場合に、コントローラモジュールが搭載する揮発メモリ内のデータを退避するうえで極めて有用である。
【図１】
0005466953.tif 000002
【図２】
0005466953.tif 000003
【図３】
0005466953.tif 000004
【図４】
0005466953.tif 000005
【図５】
0005466953.tif 000006
【図６】
0005466953.tif 000007
【図７】
0005466953.tif 000008
【図８】
0005466953.tif 000009
【図９】
0005466953.tif 000010
【図１０】
0005466953.tif 000011
【図１１】
0005466953.tif 000012