(57)【特許請求の範囲】
【請求項１】
記憶装置に対するアクセス時に取得したデータを記憶するキャッシュメモリと、
不揮発性メモリと、
前記キャッシュメモリ内に記憶されているデータにおいて、前記不揮発性メモリに退避するデータか否かの情報、および前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を記憶する管理テーブルと、
前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、前記不揮発性メモリに退避するデータか否かの情報、および前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を前記管理テーブルに記憶させる管理手段と、
停電発生時に、前記管理テーブルに記憶されている、前記不揮発性メモリに退避するデータか否かの情報及び前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報に基づき、前記キャッシュメモリに記憶されているデータのうち前記不揮発性メモリに退避するデータを、優先順位に従って優先度の高いデータから優先度の低いデータへ順番に前記不揮発性メモリに書き込む処理を実行する停電処理部と、を有する退避処理装置。
【請求項２】
前記管理手段は、前記退避の優先順位を決定するための情報として、少なくとも、前記上位装置からのコピー命令に基づき記憶装置間のデータのコピー処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記停電処理部は、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、コピー処理を実行した際に取得したデータの前記不揮発性メモリへの書込み順序の優先度を低くすることを特徴とする請求項１に記載の退避処理装置。
【請求項３】
前記管理手段は、前記退避の優先順位を決定するための情報として、少なくとも、前記上位装置からの読み出し命令に基づき記憶装置からのデータの読み出し処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記停電処理部は、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、読み出し処理を実行した際に取得したデータの前記不揮発性メモリへの書込みを行わないことを特徴とする請求項２に記載の退避処理装置。
【請求項４】
前記管理手段は、前記退避の優先順位を決定するための情報として、少なくとも、前記上位装置から、前記記憶装置の特定の記憶アドレスへのアクセス命令に基づき、取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記停電処理部は、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、前記記憶装置の特定の記憶アドレスへのアクセス命令に基づき取得したデータを前記不揮発性メモリへ複数回書込みを行なうことを特徴とする請求項１から３のいずれかに記載の退避処理装置。
【請求項５】
記憶装置に対するアクセス時に取得したデータを記憶するキャッシュメモリと、不揮発性メモリと、前記キャッシュメモリ内に記憶されているデータにおいて、前記不揮発性メモリに退避するデータか否かの情報、および前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を記憶する管理テーブルとを有する処理装置が、
前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、前記不揮発性メモリに退避するデータか否かの情報、および前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を前記管理テーブルに記憶し、
停電発生時に、前記管理テーブルに記憶されている、前記不揮発性メモリに退避するデータか否かの情報及び前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報に基づき、前記キャッシュメモリに記憶されているデータのうち前記不揮発性メモリに退避するデータを、優先順位に従って優先度の高いデータから優先度の低いデータへ順番に前記不揮発性メモリに書き込む処理を実行することを特徴とする退避処理方法。
【請求項６】
前記処理装置が更に、
前記退避の優先順位を決定するための情報を前記管理テーブルに記憶する際、退避の優先順位を決定するための情報として、少なくとも、前記上位装置からのコピー命令に基づき記憶装置間のデータのコピー処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶し、
前記キャッシュメモリへのデータ記憶に際し、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、コピー処理を実行した際に取得したデータの前記不揮発性メモリへの書込み順序の優先度を低くすることを特徴とする請求項５に記載の退避処理方法。
【請求項７】
記憶装置に対するアクセス時に取得したデータを記憶するキャッシュメモリと、不揮発性メモリと、前記キャッシュメモリ内に記憶されているデータにおいて、前記不揮発性メモリに退避するデータか否かの情報、および前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を記憶する管理テーブルとを有する処理装置に、
前記キャッシュメモリへのデータ記憶に際し、データの種別に応じて、前記不揮発性メモリに退避するデータか否かの情報、および前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を前記管理テーブルに記憶させ、
停電発生時に、前記管理テーブルに記憶されている、前記不揮発性メモリに退避するデータか否かの情報及び前記不揮発性メモリに退避するデータの退避の優先順位を決定するための情報に基づき、前記キャッシュメモリに記憶されているデータのうち前記不揮発性メモリに退避するデータを、優先順位に従って優先度の高いデータから優先度の低いデータへ順番に前記不揮発性メモリに書き込む処理を実行させることを特徴とする退避処理プログラム。
【請求項８】
前記処理装置に更に、
前記退避の優先順位を決定するための情報を前記管理テーブルに記憶する際、退避の優先順位を決定するための情報として、少なくとも、前記上位装置からのコピー命令に基づき記憶装置間のデータのコピー処理を実行した際に取得したデータを識別する情報を前記管理テーブルに記憶させ、
前記キャッシュメモリへのデータ記憶に際し、前記管理テーブルを参照し、前記キャッシュメモリに記憶されているデータのうち、コピー処理を実行した際に取得したデータの前記不揮発性メモリへの書込み順序の優先度を低くさせることを特徴とする請求項７に記載の退避処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、退避処理装置に関し、例えば、ＲＡＩＤ装置の停電発生に伴う、バックアップ処理に要する処理時間を短縮する退避処理装置等に関する。
【背景技術】
【０００２】
複数のＨＤＤ（Hard  Disk  Drive）を組み合わせ、高速・大容量・高信頼性に優れたディスクシステムを構築する技術としてＲＡＩＤ（Redundant  Arrays  of  Independent（Inexpensive）Disks）が広く知られている。
【０００３】
一般に、ＲＡＩＤ装置は、その上位装置（例えば、ホストコンピュータ、以下、ホストとする）からのデータアクセスに要する処理時間を短縮するために、キャッシュメモリを用いたユーザデータのリード・ライトが行われている。
【０００４】
このキャッシュメモリには、通常、ＤＲＡＭ（Dynamic  Random  Access  Memory）・ＳＲＡＭ（Static  Random  Access  Memory）といった半導体の記憶装置が利用されている。
【０００５】
そして、ＲＡＩＤ装置は、ホストからユーザデータのリード要求を受け付けた場合に、キャッシュメモリ（以下、単にキャッシュとする）からユーザデータを検索し、リード要求に対応するユーザデータを取得したら、取得したキャッシュデータをホストに通知する。
【０００６】
一方、キャッシュからユーザデータを取得しなかった場合、ハードディスク装置（以下、単にディスクとする）に記憶されているユーザデータを取得し、キャッシュに書込みを行う。
【０００７】
また、ユーザデータのライト要求を受け付けた場合には、キャッシュにユーザデータを記憶した時点で、ライト処理が完了した旨をホストへ通知する。その後、所定の条件を満たした時点で、キャッシュに記憶したユーザデータをディスクに記憶する。
【０００８】
ところで、上述したキャッシュは、揮発性の半導体の記憶装置が利用されていることから、キャッシュへの電源供給がなくなれば、キャッシュのユーザデータが消去されてしまう。このため、停電発生時には、キャッシュ上の全データを不揮発性の記憶装置(例：ＮＡＮＤフラッシュ、コンパクトフラッシュ（登録商標）等)に退避させ、バックアップする必要がある。
【０００９】
例えば、図１４に示すように、停電発生時に、ＲＡＩＤ装置２０は、キャッシュ２４に記憶されているキャッシュデータ２４ａを、リードデータおよびライトデータを区別することなく、ＮＡＮＤフラッシュ２３に退避させる。
【００１０】
また、停電が発生すると、ＲＡＩＤ装置２０への電力供給が、ＰＳＵ（Power  Supply
Unit）２８からＳＣＵ（System  Capacity  Unit）２７に切替えられ、ＲＡＩＤ装置２０は、ＳＣＵ２７に蓄えられている電力を使用して、上述した退避処理を行う。
【００１１】
なお、停電発生時のライトバック（ライトデータのハードディスクへの書込み）処理を効率的に行うとともに、停電時の省電力化を図る技術（例えば、特許文献１参照）や、ディスクのアクセス情報に基づき、論理ディスク装置における物理ディスク装置への再配置を行う技術が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平９−３３０２７７号公報
【特許文献２】特開２００６−５９３７４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、上述した従来の技術では、全てのキャッシュデータをバックアップの対象としており、バックアップ処理に、必要以上の処理時間が掛かってしまう場合があった。
【００１４】
例えば、図１４に示したキャッシュ２４に、膨大なキャッシュデータ２４ａが記憶されている状況で、ＲＡＩＤ装置２０に停電が発生した場合、バックアップ処理に、必要以上の処理時間が掛かってしまう場合があった。
【００１５】
この場合、ＳＣＵ２７の電力供給時間内に、キャッシュデータ２４ａのＮＡＮＤフラッシュ２３への退避が完了せず、一部のキャッシュデータが消失してしまう場合がある。
【００１６】
開示の技術は、上記に鑑みてなされたものであって、バックアップに要する処理時間を短縮する退避処理装置等を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本技術は、上記従来の課題に鑑み、キャッシュメモリへのデータ記憶に際し、データの種別に応じて、不揮発性メモリに退避するデータか否かの情報、および不揮発性メモリに退避するデータの退避の優先順位を決定するための情報を管理テーブルに記憶させる管理手段と、停電発生時に、管理テーブルに記憶されている、不揮発性メモリに退避するデータか否かの情報及び不揮発性メモリに退避するデータの退避の優先順位を決定するための情報に基づき、キャッシュメモリに記憶されているデータのうち不揮発性メモリに退避するデータを、優先順位に従って優先度の高いデータから優先度の低いデータへ順番に不揮発性メモリに書き込む処理を実行する停電処理部とを設けたものである。
【発明の効果】
【００１８】
本願技術によれば、停電発生におけるキャッシュメモリのバックアップに要する処理時間を短縮し、バックアップ速度を向上させる事ができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】本実施の形態に示すＲＡＩＤ装置の構成を示す機能ブロック図である。
【図２】本実施の形態のＮＡＮＤフラッシュのデータ構造の一例を示す図である。
【図３】本実施の形態に示すキャッシュメモリのデータ構造の一例を示す図である。
【図４】本実施の形態に示すＦＰＧＡの構成を示す機能ブロック図である。
【図５】本実施の形態に示すバックアップ管理テーブルのデータ構造の一例を示す図である。
【図６】本実施の形態に示す不良ブロック管理テーブルのデータ構造の一例を示す図である。
【図７】本実施の形態に示すバックアップ完了フラグのデータ構造の一例を示す図である。
【図８】本実施の形態の退避処理装置において、通電時における処理を示すフローチャートである。
【図９】本実施の形態の退避処理装置において、停電時の処理を示すフローチャートである。
【図１０】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図１１】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図１２】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図１３】本実施の形態の退避処理装置において、停電時の処理を説明する説明図である。
【図１４】従来技術を説明するための図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示する退避処理装置、退避処理方法およびストレージシステムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００２１】
次に、本実施の形態に示すＲＡＩＤ装置（Redundant  Arrays  of  Independent（Inexpensive）Disks）について説明する。図１は、本実施の形態に示すＲＡＩＤ装置の構成を示す機能ブロック図である。
【００２２】
図１において、ＲＡＩＤ装置２００は、複数の上位装置（例えば、ホストコンピュータＡ、Ｂ、Ｃ・・・以下、単にホストとする）からの要求に応じて、ＨＤＤ（Hard  Disk  Drive）に記憶されている各種ユーザデータやプログラムデータの伝送を行う。また、ＲＡＩＤ装置２００は、停電発生時には、バックアップに必要とされるキャッシュデータをＮＡＮＤ型メモリに退避する処理を実行する。
【００２３】
また、ＲＡＩＤ装置２００は、ＣＭ（Controller  Module）２０１と、ＰＳＵ（Power  Supply  Unit）２０２と、ＨＤＤ（Hard  Disk  Drive）２０３ａ〜２０３ｚとを有する。
【００２４】
ＣＭ２０１は、キャッシュメモリの管理や、ホストとのインターフェース制御や、各ＨＤＤの制御を行う制御部で、ＮＡＮＤフラッシュ２０１ａと、キャッシュ２０１ｂ、ＦＰＧＡ（Field  Programmable  Gate  Array）２０１ｃと、ＲｏＣ（ＲＡＩＤ−ｏｎ−Ｃｈｉｐ）２０１ｄと、ＳＣＵ（Super  Capacitor  Unit）２０１ｅと、Ｅｘｐ（エキスパンダ）２０１ｆとを有する。
【００２５】
ＮＡＮＤフラッシュ２０１ａは、ＲＡＩＤ装置２００に停電が発生した場合に、キャッシュ２０１ｂに記憶されているキャッシュデータがバックアップされるＮＡＮＤ型メモリである。
【００２６】
なお、ＮＡＮＤフラッシュ２０１ａは、ブロック単位でアクセスされる構造を有し、シーケンシャルライトにて、キャッシュ２０１ｂのキャッシュデータが書込まれる。
【００２７】
図２は、本実施の形態のＮＡＮＤフラッシュ２０１ａのデータ構造を示す図である。図２のＮＡＮＤフラッシュ２０１ａは、複数のブロックａ０１〜ａ２０を有している。
【００２８】
このブロックａ０１〜ａ２０は、各々キャッシュデータを記憶するデータ領域であり、ブロックごとに、キャッシュデータが書込まれる。なお、本実施の形態のＮＡＮＤフラッシュ２０１ａの１ブロック当たりのデータ領域は、４Ｍｂｙｔｅとする。
【００２９】
そして、このブロックａ０１〜ａ２０のうち、ブロックａ０１〜ａ０１８は、キャッシュ２０１ｂのキャッシュデータがバックアップされるデータ格納領域である。また、ブロックａ１９、ａ２０は、Ｄｉｒｔｙか否かを示す情報や、ＮＡＮＤフラッシュ２０１ａが有する不良ブロックを示す情報などが記憶される不良ブロック管理テーブル２１３Ｂ格納領域である。この不良ブロック管理テーブル２１３Ｂ格納領域（ブロックａ１９．ａ２０）は、ＲｏＣ２０１ｄによって各種データが管理されている。
【００３０】
次に、図１のキャッシュ２０１ｂについて説明する。キャッシュ２０１ｂは、ホストとＨＤＤ２０３ａ〜２０３ｚとの間で転送が行われるユーザデータを一時的に記憶するキャッシュメモリである。なお、上述してきたようにキャッシュ２０１ｂに記憶されているユーザデータをキャッシュデータとする。
【００３１】
図３は、本実施の形態に示すキャッシュメモリのデータ構造の一例を示す図である。図３に示したキャッシュ２０１ｂは、キャッシュデータを一時的に記憶する複数のテーブルｂ０１〜ｂ１０を有している。
【００３２】
なお、図３に示した各テーブルｂ０１〜ｂ１０は、４Ｍｂｙｔｅのユーザデータを保存する容量を有している。また、このユーザデータは６４ｋＢのデータ長単位で、ＲｏＣ２０１ｄに管理されるものとする。
【００３３】
また、ユーザデータの一例としては、リードデータとライトデータが挙げられる。「リードデータ」は、ＨＤＤ２０３ａ〜２０３ｚのいずれかに記憶されているユーザデータを読み出したデータを一時記憶したものである。
【００３４】
ホストからＲＡＩＤ装置２００にユーザデータのリード要求があった場合、ＣＭ２０１は、キャッシュ２０１ｂ内の各テーブルｂ０１〜ｂ１０から、リード要求に対応するユーザデータがキャッシュデータを取得できた場合は、取得したキャッシュデータをホストに出力する。
【００３５】
一方、キャッシュ２０１ｂからキャッシュデータを取得できなかった場合、ＣＭ２０１は、ＨＤＤ２０３ａ等から、リード要求に対応するユーザデータを取得し、取得したユーザデータをキャッシュ２０１ｂに複製する。このように、ＨＤＤ２０３ａ等から、リード要求に対応するユーザデータを取得することを以下、「ステージング」とする。
【００３６】
上記したように、リードデータは、ＨＤＤ２０３ａ〜ＨＤＤ２０３ｚから取得したデータであるので、キャッシュ２０１ｂから、キャッシュデータがなくなったとしても、ＨＤＤ２０３ａ〜ＨＤＤ２０３ｚからの再取得が可能なデータである。
【００３７】
一方、「ライトデータ」は、ホストからＲＡＩＤ装置２００へ書込み要求があったユーザデータがキャッシュメモリに一時的に記憶されたものであり、所定の条件を満たした後、各ＨＤＤに書込まれる。このため、ライトデータは、ＨＤＤ２０３ａ〜２０３ｚのいずれにも書き込まれていないデータの可能性がある。
【００３８】
次に、図１の説明に戻り、ＦＰＧＡ２０１ｃについて説明する。ＦＰＧＡ２０１ｃは、所定のプログラムによって制御される集積回路を示し、ＤＭＡ（Direct  Memory  Access）エンジンを有する。
【００３９】
このＤＭＡエンジンとは、ＣＰＵ(Central  Processing  Unit)を介さずに装置とＲＡＭ（Random  Access  Memory）間でデータ転送を行う方式を示し、本実施の形態では、停電時にキャッシュデータをＮＡＮＤフラッシュ２０１ａに退避・復元するために必要な機能を付加したＤＭＡをＦＰＧＡ２０１ｃに搭載している。
【００４０】
なお、ＤＭＡエンジンの一例として、停電時に、キャッシュデータを退避するライトＤＭＡ(ＴＲＮ)、退避データをキャッシュ２０１ｂに戻すリードＤＭＡ(ＲＣＶ)、ＮＡＮＤフラッシュ２０１ａのイレースやチェックを行うためのコマンド発行ＤＭＡ(ＵＣＥ)等が挙げられる。そして、このＤＭＡは、ＲｏＣ２０１ｄの命令によって、ハードウェア的にデータを転送する。
【００４１】
このＦＰＧＡ２０１ｃについて図を用いて説明する。図４は、本実施の形態に示すＦＰＧＡの構成を示す機能ブロック図である。ＦＰＧＡ２０１ｃは、停電発生時、キャッシュ２０１ｂの所定データをＮＡＮＤフラッシュ２０１ａに退避させる処理を実行する。また、ＦＰＧＡ２０１は、復電時、停電時にＮＡＮＤフラッシュ２０１ａへ退避させたデータをキャッシュ２０１ｂに戻す。
【００４２】
そして、ＦＰＧＡ２０１ｃは、ＩＦ（Interface）制御部２１１と、アクセスコントローラ２１２と、アクセス管理テーブル２１３と、ＴＲＮ２１４と、ＩＦ制御部２１５とを有する。
【００４３】
ＩＦ制御部２１１は、図１に示したＲｏＣ２０１ｄとＴＲＮ２１４との各種データのやり取りや、このＲｏＣ２０１ｄと後述するアクセスコントローラ２１２との各種データのやり取りを制御するインターフェースである。
【００４４】
アクセスコントローラ２１２は、ＩＦ制御部２１１を介して、アクセス管理テーブル２１３と、ＲｏＣ２０１ｄとの各種データのやり取りを制御する制御部である。
【００４５】
アクセス管理テーブル２１３は、バックアップ管理テーブル２１３ａと、上述した不良ブロックを管理する不良ブロック管理テーブル２１３ｂとを有する。まず、バックアップ管理テーブル２１３ａのデータ構造について説明する。
【００４６】
図５は、バックアップ管理テーブル２１３ａのデータ構造の一例を示す図である。このバックアップ管理テーブル２１３ａは、図５に示されるように、キャッシュ２０１ｂの各テーブルｂ０１〜ｂ１０の各々に対応する複数の３ｂｉｔフラグｃ０１〜ｃ１０を有する。
【００４７】
この３ｂｉｔフラグの各々のビットは、［２］ビットめ、［１］ビットめ、［０］ビットめの３ビットからなり、各々、停電時に、対応するテーブルに記憶されたデータに対し、どのような処理を行なうかを識別するためのフラグであり、本実施の形態における各ビットのフラグは、以下の意味を持つ。
【００４８】
まず、３ビットフラグの［２］ビットめは、２重書込み（Ｄｕａｌ）を行なうか否かを示すビットである。次に、［１］ビットめは、優先度を示すフラグで、フラグが立つもの（即ち１が記憶されているもの）が、立たないものの優先度が低い（Ｓｔａｙ）ことを示す。更に、［０］ビットめは、バックアップをスキップするかを判断するフラグで、「１」が立っていれば、停電時、バックアップを行わなくともよいことを示している。
【００４９】
このバックアップ管理テーブル２１３ａは、ＲｏＣ２０１ｄによって管理される。
【００５０】
次に、図４に示した不良ブロック管理テーブル２１３ｂについて説明する。不良ブロック管理テーブル２１３ｂは、図２に示したＮＡＮＤフラッシュ２０１ａの劣化によるライト失敗（Program  Fail）、消去失敗（Erace  Fail）、リード不可（Load  Fail）が発生する不良ブロックを管理するテーブルで、上述したＩｎｖａｌｉｄＴａｂｌｅに相当する。そして、ＲｏＣ２０１ｄのファームウェアにて各データが管理される。
【００５１】
具体的に図を用いて説明する。図６は、本実施の形態に示す不良ブロック管理テーブル２１３ｂのデータ構造の一例を示す図である。本実施の形態における不良ブロック管理テーブル２１３ｂは、ＮＡＮＤフラッシュの各ブロックａ０１〜ａ２０に対応した、項目ｃ０１〜ｃ２０を有する。この項目は、各々「Ｄｉｒｔｙ」「Ｉｎｖａｌｉｄ」を識別するフラグを有する。
【００５２】
「Ｄｉｒｔｙ」フラグは、バックアップ時に、ユーザデータの転送エラーが発生し、ＮＡＮＤフラッシュ２０１ａへの書込みが正常に終了しなかったか否かを識別するフラグである。
【００５３】
そして、図６に示すようにフラグ１が立っている場合は、Ｄｉｒｔｙな状態を示し、フラグ０の場合は、正常にユーザデータの転送が終了した場合を示す。
【００５４】
「Ｉｎｖａｌｉｄ」フラグは、各ＮＡＮＤフラッシュ２０１ａのブロックが「不良ブロック」であることを識別するためのフラグである。このフラグに「１」が格納されている項目に対応するＮＡＮＤフラッシュ２０１ａのブロックは、バックアップに使用することができないことを示している。
【００５５】
次に、図４の説明に戻り、ＴＲＮ２１４について説明する。ＴＲＮ２１４は、キャッシュ２０１ｂのユーザデータを退避するＤＭＡを示し、メイン制御部２１４ａと、リード部２１４ｂと、エラー制御部２１４ｃと、データバッファ部２１４ｄ１と、ＣＲＣ生成部２１４ｄ２と、ＮＡＮＤライト制御部２１４ｅとを有する。
【００５６】
メイン制御部２１４ａは、不良ブロック管理テーブル２１３ｂに記憶されているＩｎｖａｌｉｄフラグや、Ｄｉｒｔｙフラグの更新を行う処理部である。
【００５７】
このメイン制御部２１４ａは、アドレス指定部２１４ａ１、Ｉｎｖａｌｉｄ判定部２１４ａ２、及び、Ｄｉｒｔｙ更新部２１４ａ３を有する。
【００５８】
アドレス指定部２１４ａ１は、不良ブロック管理テーブル２１３ｂのアドレス管理を行なう。また、Ｉｎｖａｌｉｄ判定部２１４ａ２は、不良ブロック管理テーブル２１３ｂに記憶されている各項目のＩｎｖａｌｉｄフラグを元に対象となるＮＡＮＤフラッシュ２０１ａのブロックが不良か否かを判定する。更に、Ｄｉｒｔｙ更新部２１４ａ３は、不良ブロック管理テーブル２１３ｂに記憶されている各項目のＤｉｒｔｙフラグを更新する。
【００５９】
また、メイン制御部２１４ａは、停電発生時に、キャッシュ２０１ｂのリード開始をリード部２１４ｂに要求する制御も行なう。
【００６０】
次に、リード部２１４ｂは、停電発生時に、キャッシュ２０１ｂのデータの少なくとも一部を、ＮＡＮＤフラッシュ２０１ａへ退避させる制御部である。
【００６１】
このリード部２１４ｂは、フラグ判定部２２０と、キャッシュアドレス管理部２２１と、リード制御部２２２とを有する。
【００６２】
フラグ判定部２２０は、図５に示すように、バックアップ完了テーブル２２０ａを有する。このバックアップ完了テーブル２２０ａは、図７に示されるように、［０］［１］［２］の３ｂｉｔで形成されている。
【００６３】
各々のビットは、それぞれ１回目のバックアップ各々のバックアップ処理が完了したかを示すフラグである。
【００６４】
フラグ判定部２２０は、停電時、種類の異なる３回のデータ読み出しを、後述するリード制御部２２２に指示する。
【００６５】
１回目のバックアップ処理は、バックアップ管理テーブル２１３ａ内の３ｂｉｔフラグの［１］ビットめ（Ｓｔａｙ）及び［０］ビットめ（ｓｋｉｐ）に「０」が格納されている３ｂｉｔフラグに対応した、キャッシュ２０１ｂのブロックに記憶されているデータのバックアップ処理である。即ち、１回目のバックアップ処理は、優先順位が低くなく、スキップ対象ではないキャッシュ２０１ｂのブロックのデータを、ＮＡＮＤフラッシュ２０１ａへ退避させる処理を行なうものである。
【００６６】
また、２回目のバックアップ処理は、バックアップ管理テーブル２１３ａ内の３ｂｉｔフラグの［１］ビットめ（Ｓｔａｙ）に「１」が格納されている３ｂｉｔフラグに対応した、キャッシュ２０１ｂのブロックに記憶されているデータのバックアップ処理である。即ち、２回目のバックアップ処理は、キャッシュ２０１ｂのブロックのデータを、ＮＡＮＤフラッシュ２０１ａへ退避させる処理を行なうものである。
【００６７】
更に、３回目のバックアップ処理は、バックアップ管理テーブル２１３ａ内の３ｂｉｔフラグの［２］ビットめ（Ｄｕａｌ）に「１」が格納されている３ｂｉｔフラグに対応した、キャッシュ２０１ｂのブロックに記憶されているデータのバックアップ処理である。３回目のバックアップされるデータは、１回目のバックアップ処理にて既にＮＡＮＤフラッシュ２０１ａに退避されているデータであるので、２度書込みがなされることにとなる。
【００６８】
キャッシュアドレス管理部２２１は、キャッシュデータのキャッシュ２０１ｂにおける位置を示すキャッシュアドレスを管理し、管理しているキャッシュアドレスをフラグ判定部２２０に出力する処理部である。
【００６９】
リード制御部２２２は、フラグ判定部２２０が指示するキャッシュ２０１ｂの各テーブルのキャッシュデータの読み出しを行なう。読み出したデータは、エラー制御部２１４ｃ、データバッファ制御部２１４ｄ１へ出力する。
【００７０】
エラー制御部２１４ｃは、転送エラーが発生した場合、転送エラーが発生したＮＡＮＤブロックを識別するアドレスをメイン制御部２１４ａに通知する。メイン制御部２１４ａのＤｉｒｔｙ更新分２１４ａ３は、この通知を受信すると、不良ブロック管理テーブル２１３ｂのＤｉｒｔｙフラグの更新を要求する。
【００７１】
データバッファ部２１４ｄ１は、リード制御部２２２から入力されたキャッシュデータのデータを化け防止のために、ＸＯＲ（排他的論理和）演算を行って、パリティデータを生成し、キャッシュデータにＸＯＲパリティを付加する。
【００７２】
ＣＲＣ生成部２１４ｄ２は、ＣＲＣ(Cyclical  Redundancy  Check)とＡＩＤ(AreaID)からなる冗長ビットをユーザデータに付加して、付加したユーザデータを保持するためのバッファを有し、そのバッファに記憶されているユーザデータをＮＡＮＤライト制御部２１４ｅに出力する。
【００７３】
ＮＡＮＤライト制御部２１４ｅは、ＮＡＮＤフラッシュ２０１ａの各ブロックが識別されるアドレスを有し、さらに、ＩＦ制御部２１５を介して、ＣＲＣ生成部２１４ｄ２から出力されたユーザデータをＮＡＮＤフラッシュ２０１ａに出力し、書込みを行う。
【００７４】
さらに、ＮＡＮＤライト制御部２１４ｅは、キャッシュデータをＮＡＮＤフラッシュ２０１ａに書込む際に、転送エラーが発生し、書込みに失敗した場合、対応するブロックの識別データをエラー制御部２１４ｃに出力する。
【００７５】
ＩＦ制御部２１５は、ＴＲＮ２１４とＮＡＮＤフラッシュ２０１ａとの各種データのやり取りを制御するインターフェースである。
【００７６】
図１に示したＳＣＵ（Super  Capacitor  Unit）２０１ｅについて補足する。ＳＣＵ２０１ｅは、大容量コンデンサを示し、ＲＡＩＤ装置２００に停電が発生した際に、バッテリーフリーで、ＲｏＣ２０１ｄに電力を供給する。なお、充電された電力を供給するため、ＰＳＵ２０２とは異なり、供給する電力には、限りがあるものとする。
【００７７】
ＳＣＵ２０１ｅは、「電気二重層」(導体に絶縁体をはさみ、電圧をかけると電荷が蓄積する)を利用して物理的に電荷の蓄電を行っている。したがって、化学的に蓄電するバッテリーに比べて充電や、放電による劣化が少なく、電荷の移動速度で充電が行われる。
【００７８】
ＥＸＰ（エキスパンダ）２０１ｆは、ＲｏＣ２０１ｄとＨＤＤ２０３ａ〜ＨＤＤ２０３ｚとの間で送受信されるユーザデータを中継する処理部である。
【００７９】
ＰＳＵ（Power  Supply  Unit）２０２は、外部からＲＡＩＤ装置２００へ電力を供給する為の装置で、外部からの電力供給がなくなる、即ち、停電が発生した場合、ＲＡＩＤ装置２００への電力の供給が停止してしまう。この停電時は、ＳＣＵ２０１ｅが放電することにより、ＲＡＩＤ装置２００へ電力が供給される。
【００８０】
ＨＤＤ２０３ａ〜ＨＤＤ２０３ｚは、ＲＡＩＤグループを構成し、高速性や安全性のレベルに応じて、データが振り分けられており、ユーザデータの書込みやプログラムを記憶する記憶媒体（ディスク）等を有する。
【００８１】
次に、本実施の形態のＲＡＩＤ装置の通電時の処理について図８を用いて説明する。
【００８２】
まず、本実施の形態のＲＡＩＤ装置２００のＲｏＣ２０１ｄは、図示しないホストからのリクエストを受信する（ステップＳ１００１）と、リクエストの内容がリード要求か否かを判定する（Ｓ１００２）。
【００８３】
Ｓ１００２にて、ホストから受信したリクエストがリード要求であった場合、ＲｏＣ２０１ｄは、ＰＳＵ２０２のリード要求に含まれるＨＤＤ２０３ａ〜２０３ｚ内のアクセス位置を示すディスクアドレスを取得する。そしてＲｏＣ２０１ｄは、このディスクアドレスに対応するデータが、キャッシュ２０１ｂ内の各テーブルｂ０１〜ｂ１０に記憶されているか検索を行う（ステップＳ１００３）。
【００８４】
ここで、ＲｏＣ２０１ｄは、ホストから要求されているデータを、キャッシュ２０１ｂのテーブルｂ０１〜１０のいずれかから取得できた場合（ステップＳ１００４、Ｙｅｓ）、処理をステップＳ１００８へ移行する。
【００８５】
一方、キャッシュ２０１ｂからリードデータを取得しなかった場合（ステップＳ１００４、Ｎｏ）、ＲｏＣ２０１ｄは、キャッシュ２０１ｂにホストからのリクエストに含まれるディスクアドレスのデータを記憶する為のテーブルを確保する（ステップＳ１００５）。具体的には、ＲｏＣ２０１ｄは、キャッシュ２０１ｂ内のテーブルｂ０１〜ｂ１０に、リクエストに含まれるディスクアドレスのデータを記憶する容量分のデータを記憶するだけの空きテーブル（キャッシュデータが入っていないテーブル）が存在すれば、それを確保する。もし、空きテーブルが存在しなければ、ＲｏＣ２０１ｄは、各テーブルｂ０１〜ｂ１０に記憶されているキャッシュデータのうち、記憶した時間が長いデータを記憶したテーブルのデータを、開放して空きテーブルを作ることにより、テーブルの確保を行なう。また、テーブルの開放にあたり、開放するテーブルに対応するバックアップ管理テーブル２１３ａの３ｂｉｔフラグを全てのビットを「０」に更新する。
【００８６】
そして、ＲｏＣ２０１ｄは、ＦＰＧＡ２０１ｃに対し、該ステージングの対象となるテーブルを通知する（Ｓ１００６）。この通知を受信したＦＰＧＡ２０１ｃのメイン制御部２１４ａは、キャッシュアドレス管理部２２１は、対象テーブルに対応したバックアップ管理テーブル２１３ａの３ｂｉｔフラグの［０］ｂｉｔめ、即ち、ｓｋｉｐフラグを「１」に更新する。
【００８７】
その後、ＲｏＣ２０１ｄは、ステージング処理を行なう（Ｓ１００７）。
【００８８】
このステージング処理は、具体的には、まず、ＲｏＣ２０１ｄが、Ｅｘｐ２０１ｆを介して、ＨＤＤ２０３ａ〜ＨＤＤ２０３ｚからリード要求に含まれていたディスクアドレスのデータを取得する。そして、ＲｏＣ２０１ｄは、キャッシュ２０１ｂの確保領域に、取得したデータをコピーすることにより実行される。
【００８９】
そして、ＲｏＣ２０１ｄは、取得したデータをホストへ送信し、ステップＳ１００１の処理へ移行する。
【００９０】
なお、ＲｏＣ２０１ｄは、Ｓ１００２の、リード要求の判定処理において、ＰＳＵ２０２から受信したリクエストが、リード要求でなかった場合（Ｓ１００２：ＮＯ）、このリクエストがライト要求かを判定する（Ｓ１００９）。
【００９１】
この処理で、Ｙｅｓ、即ち、ライト要求であると判定した場合（Ｓ１００９：Ｙｅｓ）、ＲｏＣ２０１ｄは、キャッシュ２０１ｂにライト要求に含まれるアドレスと同一アドレスのデータが格納されていないか確認する（Ｓ１０１０）。
【００９２】
ここで、キャッシュデータがないと判定された場合（Ｓ１０１０：Ｎｏ）、ＲｏＣ２０１ｄは、キャッシュ２０１ｂのキャッシュ領域の確保処理を行なう（Ｓ１０１１）。この処理は、前述したＳ１００５の処理と同様であるので、説明を省略する。
【００９３】
次に、ＲｏＣ２０１ｄは、ライト要求が、構成情報などを含む特定領域への書込みかを確認する（Ｓ１０１２）。この確認において、特定領域への書込みであると判断した場合、ＲｏＣ２０１ｄは、ＦＰＧＡ２０１ｃへ通知を行なう（Ｓ１０１３）。この通知を受信したＦＰＧＡ２０１ｃのメイン制御部２１４ａは、キャッシュアドレス管理部２２１に、バックアップ管理テーブル２１３ａのキャッシュ確保領域となったテーブルに対応する３ｂｉｔフラグの［２］ビットめ（Ｄｕａｌ）のフラグを「１」に更新させる。
【００９４】
そしてＲｏＣ２０１ｄは、キャッシュ確保領域となったキャッシュ２０１ｂのテーブルに対し、ＰＳＵ２０２から、Ｗｒｉｔｅ要求に続けて送られてくるデータを記憶する（Ｓ１０１４）。
【００９５】
そして、ＲｏＣ２０１ｄは、Ｅｘｐ２０１ｆを制御し、ホストからＷｒｉｔｅ要求に続けて送られてくるデータを、ＨＤＤ２０３ａ〜２０３ｚのうち、Ｗｒｉｔｅ要求に含まれるディスクアドレスに対して書込みを行なう（Ｓ１０１６）。
【００９６】
なお、Ｓ１０１０の処理において、Ｗｒｉｔｅ要求に含まれるディスクアドレスに含まれるデータが、既にキャッシュ２０１ｂに存在した場合、ＲｏＣ２０１ｄは、キャッシュ２０１ｂに存在するデータを、ホストからＷｒｉｔｅ要求に続けて送られてくるデータに更新し（Ｓ１０１５）、Ｓ１０１６の処理に移行する。
【００９７】
ＲｏＣ２０１ｄは、Ｓ１０１６の処理が完了すると、Ｓ１００１の処理へ移行する。
【００９８】
更に、ＲｏＣ２０１ｄは、Ｓ１００９の処理において、受信したリクエストがライト要求でもないと判断した場合、受信したリクエストがコピー要求か否かを判定する（Ｓ１０１７）。
【００９９】
ここで、ＲｏＣ２０１ｄは、受信したリクエストがコピー要求でもないと判断した場合（Ｓ１０１７：Ｎｏ）、その他、リクエストに応じた処理を行い（Ｓ１０２３）、Ｓ１００１の処理へ移行する。
【０１００】
また、ＲｏＣ２０１ｄは、受信したリクエストがコピー要求であると判断した場合（Ｓ１０１７：Ｙｅｓ）、コピー元となるデータが、キャッシュ２０１ｂのテーブルｂ０１〜ｂ１０のいずれかに記憶されているか、確認する（Ｓ１０１８）。
【０１０１】
ここで、コピー元となるデータがキャッシュ２０１ｂのテーブルｂ０１〜ｂ１０のいずれにも記憶されていない場合（Ｓ１０１８：Ｎｏ）、キャッシュ２０１ｂのキャッシュ領域を確保する処理を行なう（Ｓ１０１９）。この処理は、前述のＳ１００５の同様の処理であるので、説明を省略する。
【０１０２】
そして、ＲｏＣ２０１ｄは、コピー要求に基づきステージング処理を行ったことを、ＦＰＧＡ２０１ｃへ通知する（Ｓ１０２０）。この通知を受信したＦＰＧＡ２０１ｃのメイン制御部２１４ａは、キャッシュアドレス管理部２２１に、バックアップ管理テーブル２１３ａのキャッシュ確保領域となったテーブルに対応する３ｂｉｔフラグの［１］ビットめ（Ｓｔａｙ）のフラグを「１」に更新させる。
【０１０３】
次にＲｏＣ２０１ｄは、Ｅｘｐ２０３を制御して、コピー要求で指定されているコピー元のＨＤＤのデータを読み出し、領域確保したキャッシュ２０１ｂのテーブルに書き込む（Ｓ１０２１）。
【０１０４】
そしてＲｏＣ２０１ｄは、Ｅｘｐ２０３を制御して、キャッシュ２０１に書き込まれたコピー元データをコピー先のＨＤＤへ書込むことによりコピー処理を行なう（Ｓ１０２２）。
【０１０５】
なお、ＲｏＣ２０１ｄは、Ｓ１０１８の処理において、コピー元となるデータがキャッシュ２０１ｂのテーブルｂ０１〜ｂ１０のいずれかに記憶されていると判定した場合は、Ｓ１０１９〜Ｓ１０２１のステージングに関する処理を行うこと無く、上記したＳ１０２２の処理へ移行する。
【０１０６】
ＲｏＣ２０１ｄは、Ｓ１０２２の処理を完了すると、Ｓ１００１の処理へと移行する。以上のように、ＲｏＣ２０１ｄ、及び、ＦＰＧＡ２０１ｃの処理により、バックアップテーブル２１３ａの各３ｂｉｔフラグｃ０１〜ｃ１０は、以下のようなステータスとなる。
【０１０７】
まず、構成情報などが入っている様な重要な領域のキャッシュ２０１ｂのテーブルに対応するバックアップテーブル２１３ａの［２］ｂｉｔ（Ｄｕａｌ）めは「１」となる。即ち、このテーブルに記憶されているデータは、停電時のバックアップ時に、二重書き込みの対象となる。
【０１０８】
また、コピー命令に基づき、ステージングを行ったキャッシュ２０１ｂのテーブルに対応するバックアップテーブル２１３ａの［１］ｂｉｔ（Ｓｔａｙ）めが「１」となる。再度コピーをやり直す際に、キャッシュ２０１ｂにデータが存在している方が、コピー元のデータを保存しているＨＤＤの負荷を軽くできる。よってコピー元のデータは、キャッシュ２０１ｂに保存されていることが好ましい。しかし、そもそもコピー命令の場合、コピー元データは、ＨＤＤ２０３ａ〜２０３ｚのいずれかに存在しており、データが無くなってしまうことがないので、その他の領域のデータより優先度を低くする。
【０１０９】
更に、ｒｅａｄ命令に基づき、ステージングを行ったキャッシュ２０１ｂのテーブルに対応するバックアップ管理テーブル２１３ａの［０］ｂｉｔ（Ｓｋｉｐ）めが「１」となる。ｒｅａｄ命令の対象データは、ＨＤＤ２０３ａ〜２０３ｚのいずれかに存在しており、データが無くなってしまうことがない。加えて、Ｒｅａｄ命令は、Ｃｏｐｙ命令のように、復電直後に再度同じ命令が繰り返されることがなく、Ｒｅａｄ命令にて取得したデータがキャッシュ２０１ｂに無いことで、復電時に負荷増加してしまう可能性も少ない。
【０１１０】
よって、本実施の形態において、Ｒｅａｄ命令を取得した対象データは、バックアップの必要性が小さいとして、Ｓｋｉｐ、即ち、バックアップを行わないこととしている。
【０１１１】
なお、上記ＲｏＣ２０１ｄの処理を行った結果、バックアップ管理テーブル２１３ａの全ビットが「０」を示している３ｂｉｔフラグは、Ｗｒｉｔｅ命令に基づくデータをキャッシングしていることを示す。Ｗｒｉｔｅ命令に基づくデータは、ホストから受信したデータであり、停電のタイミングによっては、ＨＤＤ２０３ａ〜２０３ｚのいずれかに格納される前のデータも含まれている可能性がある。よって、停電時には、ＨＤＤ２０３ａ〜２０３ｚより、優先度を高めてバックアップされる必要がある。
【０１１２】
よって、後述する停電時の処理において、このＷｒｉｔｅ命令は、二重バックアップ対象とされている構成情報などの特定情報と共にＮＡＮＤフラッシュ２０１ａへのバックアップが行われる。
【０１１３】
次に、これまで説明してきたキャッシュ２０１ｂと、バックアップ管理テーブル２１３ａと、不良ブロック管理テーブル２１３ｂと、ＮＡＮＤフラッシュ２０１ａを用いて、停電発生時に、ＲＡＩＤ装置２００で行われる処理について図９以降の図を用いて説明する。
【０１１４】
なお、本実施の形態において、停電が起きる直前の、キャッシュ２０１ｂ、バックアップ管理テーブル２１３ａ、ＦＰＧＡフラッシュ２０１ａ、不良ブロック管理テーブル２１３ｂ、及びバックアップ完了フラグ２２０ａの状態について、図１０を用いて、補足説明する。
【０１１５】
なお、図１０の状態は、あくまで一例であり、通電時は、キャッシュ２０１ｂに記憶されたデータの内容は、随時更新されており、停電直前に、必ず図１０になるというわけではない。
【０１１６】
まず、上記処理によって、バックアップ管理テーブル２１３ａの各３ｂｉｔフラグｃ０１〜ｃ１０は、対応するキャッシュ２０１ｂの各テーブルｂ０１〜ｂ１０に記憶されたデータの種別に応じて、内容が決定している。
【０１１７】
本実施の形態の場合、図１０に示すように、キャッシュ２０１ｂのテーブルｂ０１に構成情報が記憶されているため、対応する３ｂｉｔテーブルｃ０１の［２］ｂｉｔめ（Ｄｕａｌ）には「１」が格納されている。
【０１１８】
また、Ｃｏｐｙ命令に基づき取得された、テーブルｂ０４及びｂ１０のデータに対応する３ｂｉｔフラグｃ０４，ｃ１０の「１」ｂｉｔめのフラグ（Ｓｔａｙ）には「１」が格納されている。
【０１１９】
更に、Ｒｅａｄ命令に基づき取得された、テーブルｂ０２及びｂ０８のデータに対応する３ｂｉｔフラグｃ０２，ｃ０８の「０」ｂｉｔめのフラグ（Ｓｋｉｐ）には「１」が格納されている。
【０１２０】
また、ＦＰＧＡフラッシュ２０１の不良管理テーブル２１３ｂの項目ｄ０５の［Ｉｎｖａｌｉｄ］フラグには「１」が格納されている。即ち、この項目ｄ０５に対応するＦＰＧＡ２０１ａのブロックａ０５は、不良ブロックであることを示している。
【０１２１】
以上の状態で、停電が検出した場合（図９：Ｓ２００１）、ＣＭ２０１の各構成要素は、ＳＣＵ２０１ｅからの電源供給により稼働し、以下の処理を行なう。
【０１２２】
まず、ＦＰＧＡ２０１ｃは、リード制御部２２２に、バックアップ管理テーブル２１３ａの３ｂｉｔフラグｃ０１〜ｃ１０のうち、［１］ｂｉｔめ（Ｓｔａｙ）、［０］ｂｉｔめ（Ｓｋｉｐ）が共に「１」ではないものに対応する、キャッシュ２０１ｂのデータをＮＡＮＤフラッシュへ書き込む（Ｓ２００２）。
具体的には、ＦＰＧＡ２０１ｃの各構成要素が、以下の処理を行なう。
【０１２３】
まず、メイン制御部２１４ａは、リード制御部２２２に、バックアップ管理テーブル２１３ａの３ｂｉｔフラグｃ０１〜ｃ１０のうち、［１］ｂｉｔめ（Ｓｔａｙ）、［０］ｂｉｔめ（Ｓｋｉｐ）が共に「１」ではないものに対応する、キャッシュ２０１ｂのデータを読出させる。
【０１２４】
本実施の形態の場合、バックアップ管理テーブルｃ０１，ｃ０３，ｃ０５，ｃ０６，ｃ０７，及びｃ０９が該当するので、リード制御部２２２は、キャッシュ２０１ｂのテーブルｂ０１、ｂ０３、ｂ０５、ｂ０６、ｂ０７、及びｂ０９のデータを読み出す。
【０１２５】
リード制御部２２２で読み出されたデータは、ＣＲＣ制御部２１４ｄ２を経由することにより、ＣＲＣコードが付与される。そしてＣＲＣコードが付与されたデータは、図１１に示されるように、ＮＡＮＤライト制御部２１４ｅによって随時、ＮＡＮＤフラッシュ２０１ａのＩｎｖａｌｉｄフラグが立っている項目に対応しないブロック（図１１では、ブロックａ０５以外）のブロックに書き込まれる。なお、この際、ＣＲＣコード付与と共に、読み出し元であるキャッシュ２０１ｂのテーブル名（ｂ０１など）を付与しても良い。このようにすれば、復電時、キャッシュの復元を行なう際に、ＦＰＧＡ２０１ｃは、この付与されたテーブル名を参照して、キャッシュ２０１ｂの各テーブルｂ０１〜ｂ１０の各々に、停電時に格納されていたデータと同じデータを再格納させることが可能となる。
【０１２６】
この際、ＮＡＮＤライト制御部２１４ｅは、ＮＡＮＤフラッシュ２０１ａのブロックに書き込みを行う度に、書き込んだデータに付随するＣＲＣコードを使い、エラー検証を行なう。
【０１２７】
ここで、書き込んだデータにエラーがあると判定された場合、ＮＡＮＤライト制御部２１４ｅは、先に書き込んだブロックの次のブロックへの再書込みを行なう。
【０１２８】
即ち、図１１に示されるように、キャッシュ２０１ｂのテーブルｂ０９のデータをＮＡＮＤフラッシュ２０１ａのブロックａ０７に記憶させ、検証でエラーが検出された場合、ＮＡＮＤライト制御部２１４ｅは、次のブロックａ０８に再書き込みを行なう。
【０１２９】
なお、この再書き込みにあたり、ＮＡＮＤライト制御部２１４ｅは、メイン制御部２１４ａへ、エラーがあったブロックを通知する。これをうけたメイン制御部２１４ａのＤｉｒｔｙ更新分２１４ａ３の項目ｄ０５のＤｉｒｔｙフラグに対し、「１」を格納する。
【０１３０】
以上のような処理により、本実施の形態では、構成情報を含むテーブルｂ０１、及び、Ｒｅａｄ命令、Ｃｏｐｙ命令によらないキャッシュデータを格納しているテーブルｂ０３、ｂ０５〜ｂ０７，ｂ０９のデータが、ＮＡＮＤフラッシュ２０１ａのブロックａ０１〜ａ０４、ａ０６，ａ０８に記憶される。
【０１３１】
なおこの処理が完了すると、メイン制御部２１４ａは、バックアップ完了テーブル２２０ａの［０］（１ｓｔ）Ｂｉｔめのフラグを「１」にする。
【０１３２】
次に、ＦＰＧＡ２０１ｃは、リード制御部２２２に、バックアップ管理テーブル２１３ａの３ｂｉｔフラグｃ０１〜ｃ１０のうち、［１］ｂｉｔめ（Ｓｔａｙ）が「１」であるものに対応する、キャッシュ２０１ｂのデータをＮＡＮＤフラッシュへ書き込む（Ｓ２００３）。
【０１３３】
即ち、この処理は、［１］ｂｉｔめ（Ｓｔａｙ）、［０］ｂｉｔめ（Ｓｋｉｐ）が共に「１」ではないものに対応する、キャッシュ２０１ｂのデータの書込みのあとに行われることになる。
【０１３４】
具体的には、ＦＰＧＡ２０１ｃの各構成要素が、以下の処理を行なう。
【０１３５】
まず、メイン制御部２１４ａは、リード制御部２２２に、バックアップ管理テーブル２１３ａの３ｂｉｔフラグｃ０１〜ｃ１０のうち、［１］ｂｉｔめ（Ｓｔａｙ）が「１」となっているものに対応する、キャッシュ２０１ｂのデータを読出させる。
【０１３６】
本実施の形態の場合、図１２に示すように、バックアップ管理テーブルｃ０４，ｃ１０が該当するので、リード制御部２２２は、キャッシュ２０１ｂのテーブルｂ０４、ｂ１０のデータを読み出す。
【０１３７】
リード制御部２２２で読み出されたデータは、ＣＲＣ制御部２１４ｄ２を経由することにより、ＣＲＣコードを付与され、図１２に示されるように、ＮＡＮＤライト制御部２１４ｅによって随時、ＮＡＮＤフラッシュ２０１ａのＩｎｖａｌｉｄフラグが立っている項目に対応しないブロックのブロックに書き込まれる。
【０１３８】
この際も、ＮＡＮＤライト制御部２１４ｅは、ＮＡＮＤフラッシュ２０１ａのブロックに書き込みを行う度に、書き込んだデータに付随するＣＲＣコードを使い、エラー検証を行なう。
【０１３９】
ここで、書き込んだデータにエラーがあると判定された場合、ＮＡＮＤライト制御部２１４ｅは、先に書き込んだブロックの次のブロックへの再書込みを行なう。
【０１４０】
以上のような処理により、本実施の形態では、Ｃｏｐｙ命令によって取得されたテーブルｂ０４、ｂ１０のデータが、ＮＡＮＤフラッシュ２０１ａのブロックａ０９〜ａ１０に記憶される。
【０１４１】
なおこの処理が完了すると、メイン制御部２１４ａは、バックアップ完了テーブル２２０ａの［１］（２ｎｄ）Ｂｉｔめのフラグを「１」にする。
【０１４２】
更に、ＦＰＧＡ２０１ｃは、リード制御部２２２に、バックアップ管理テーブル２１３ａの３ｂｉｔフラグｃ０１〜ｃ１０のうち、［２］ｂｉｔめ（Ｄｕａｌ）が「１」であるものに対応する、キャッシュ２０１ｂのデータをＮＡＮＤフラッシュへ書き込む（Ｓ２００４）。このデータは、Ｓ２００２にて書き込んだものデータであるので、再度書込みを行なう処理である。
【０１４３】
具体的には、ＦＰＧＡ２０１ｃの各構成要素が、以下の処理を行なう。
【０１４４】
まず、メイン制御部２１４ａは、リード制御部２２２に、バックアップ管理テーブル２１３ａの３ｂｉｔフラグｃ０１〜ｃ１０のうち、［２］ｂｉｔめ（Ｄｕａｌ）が「１」となっているものに対応する、キャッシュ２０１ｂのデータを読出させる。
【０１４５】
本実施の形態の場合、図１３に示すように、バックアップ管理テーブルｃ０１が該当するので、リード制御部２２２は、キャッシュ２０１ｂのテーブルｂ０１のデータを読み出す。
【０１４６】
リード制御部２２２で読み出されたデータは、ＣＲＣ制御部２１４ｄ２を経由することにより、ＣＲＣコードを付与され、図１３に示されるように、ＮＡＮＤライト制御部２１４ｅによって随時、ＮＡＮＤフラッシュ２０１ａのＩｎｖａｌｉｄフラグが立っている項目に対応しないブロックのブロックに書き込まれる。
【０１４７】
この際も、ＮＡＮＤライト制御部２１４ｅは、ＮＡＮＤフラッシュ２０１ａのブロックに書き込みを行う度に、書き込んだデータに付随するＣＲＣコードを使い、エラー検証を行なう。
【０１４８】
ここで、書き込んだデータにエラーがあると判定された場合、ＮＡＮＤライト制御部２１４ｅは、先に書き込んだブロックの次のブロックへの再書込みを行なう。
【０１４９】
以上のような処理により、本実施の形態では、構成情報などが格納される特定アドレスのデータが格納されたテーブルｂ０１のデータが、ＮＡＮＤフラッシュ２０１ａのブロックａ０１２に記憶される。
【０１５０】
なおこの処理が完了すると、メイン制御部２１４ａは、バックアップ完了テーブル２２０ａの［１］（２ｎｄ）Ｂｉｔめのフラグを「１」にし、バックアップ処理を完了する。
【０１５１】
なお、この処理では、Ｓｋｉｐフラグに「１」が格納された３ｂｉｔフラグｃ０２，ｃ０８に対応するキャッシュｂ０１のテーブルｂ０２，ｂ０８に格納されたデータは、ＮＡＮＤフラッシュ２０１ａへの格納は行われない。即ち、これらのデータのバックアップは行われない。
【０１５２】
以上のように、本実施の形態では、停電発生時にキャッシュデータをＮＡＮＤフラッシュ２０１ａへバックアップする際、３ｂｉｔフラグに基づいて、キャッシュデータのバックアップの優先順位及びバックアップの可否の判定を行っている。
【０１５３】
このように構成することで、停電時、構成情報などの重要情報や、Ｗｒｉｔｅデータ等のＨＤＤ２０３ａ〜２０３ｚのいずれにも記憶されない可能性があるデータを、先にＮＡＮＤフラッシュ２０１ａへ格納させることが可能となる。上記したようにＳＣＵ２０１ｅは、一時的にしか電力を供給できないため、先にバックアップを行なうほうが、データのバックアップの確実性が増すことになる。即ち、本実施の形態では、重要なデータほど優先的にバックアップされることとなる。
【０１５４】
更に、特に重要なデータに対しては、他のデータのバックアップのあと、二重書き込みを行なうことにより、より確実なバックアップを可能としている。なお、本実施の携帯において、二重書き込みは、Ｃｏｐｙ命令など、バックアップ優先度が低いデータの格納迄終わったあとに、２回目の書込みを行っている。これは、停電発生から早い時点で、かつ、一度はＣＲＣによる書込みチェックを行った上でデータをＮＡＮＤフラッシュ２０１ａに格納させており、１回である程度確実に保存が出来ているため、２回目書き込みは、万が一、そのデータが消失した場合の保険として格納させるものであるていどの意味合いがあるためである。
【０１５５】
なお、本実施の形態では、ＦＰＧＡ２０１ｃの処理によりバックアップ処理を行っている。これは、ＦＰＧＡ２０１ｃの高速性と省電力性によるものである。しかしながら、ＳＣＵ２０１ｅの電力容量に余裕があれば、Ｒｏｃ２０１ｄが所定プログラムを実行することによって上記してきたバックアップ処理を実現しても良い。
【符号の説明】
【０１５６】
２００  ＲＡＩＤ装置
２０１  ＣＭ
２０１ａ  ＮＡＮＤフラッシュ
２０１ｂ  キャッシュ
２０１ｃ  ＦＰＧＡ
２０１ｄ  ＲｏＣ
２０１ｅ  ＳＣＵ
２０１ｆ  Ｅｘｐ
２０２  ＰＳＵ
２０３ａ〜２０３ｚ  ＨＤＤ
２１１、２１５  ＩＦ制御部
２１２  アクセスコントローラ
２１３  アクセス管理テーブル
２１３ａ  バックアップ管理テーブル
２１３ｂ  不良ブロック管理テーブル（ＢＭ）
２１４  ＴＲＮ
２１４ａ  メイン制御部
２１４ｂ  リード部
２１４ｃ  エラー制御部
２１４ｄ１  データバッファ部
２１４ｄ２  ＣＲＣ生成部
２１４ｅ  ＮＡＮＤライト制御部
２２０ａ  バックアップ完了フラグ
【図１】
0005691311.tif 000002
【図２】
0005691311.tif 000003
【図３】
0005691311.tif 000004
【図４】
0005691311.tif 000005
【図５】
0005691311.tif 000006
【図６】
0005691311.tif 000007
【図７】
0005691311.tif 000008
【図８】
0005691311.tif 000009
【図９】
0005691311.tif 000010
【図１０】
0005691311.tif 000011
【図１１】
0005691311.tif 000012
【図１２】
0005691311.tif 000013
【図１３】
0005691311.tif 000014
【図１４】
0005691311.tif 000015