(57)【特許請求の範囲】
【請求項１】
複数の半導体ディスクによりデータを記録する半導体ディスク装置において、
複数の半導体ディスクによりミラーリング構成を成し、
一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、
バックグラウンドにて一の半導体ディスクの一のアドレスのセクタエラーを検出しセクタエラーが検出されたときは前記一のアドレスに対応した他の半導体ディスクのアドレスのデータを読み出して前記一の半導体ディスクの前記一のアドレスに上書きするベリファイ動作を全ての半導体ディスクの全アドレスについて行うようにし、
前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類に基づいて設定するインターバル設定手段を備え、前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたことを特徴とする半導体ディスク装置。
【請求項２】
前記インターバル設定手段は、
半導体ディスクの記録方式の種類とウェアレベリングの種類を格納するディスクテーブルと、
所定のエリアごとに最後に書き込みがあった日時を格納する書換えテーブルと、
セクタエラーの発生日時を記録するセクタエラー記録テーブルと、
所定の期間のセクタエラー回数に応じた補正値を格納するインターバル補正テーブルを、半導体ディスクごとに備え、
前記半導体ディスクの記録方式の種類によりデフォルトインターバルを設定し、前記補正値により前記デフォルトインターバルを補正してインターバルを設定し、ウェアレベリングの種類および所定の期間の書換えの有無により前記補正後のインターバルをさらに調整するようにしたことを特徴とする請求項１記載の半導体ディスク装置。
【請求項３】
前記補正後のインターバルの調整は、前記補正後のインターバルごとに行うベリファイ動作を、ウェアレベリングの種類および所定の期間中の書換えの有無に応じて設定したスキップ回数分、スキップすることによって調整するようにしたことを特徴とする請求項２記載の半導体ディスク装置。
【請求項４】
所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、
前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、
当該判定結果に基づいて、ベリファイを実施するようにしたことを特徴とする請求項１または請求項１記載の半導体ディスク装置。
【請求項５】
前記ベリファイ実施有無判定手段は、前記アクセス回数集計テーブルを参照し当該時間帯のアクセス回数により当該時間帯のベリファイを実施するか否かを設定しておくベリファイ実施有無設定テーブルを設け、
前記ベリファイ実施有無設定テーブルの設定値に基づいてベリファイを実施するようにしたことを特徴とする請求項４記載の半導体ディスク装置。
【請求項６】
複数の半導体ディスクによりデータを記録する半導体ディスク装置において、
複数の半導体ディスクによりミラーリング構成を成し、
一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行い、前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、
前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたことを特徴とする半導体ディスク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性の複数の半導体ディスクによりデータを記録する半導体ディスク装置のアクセス制御技術に関するものである。
【背景技術】
【０００２】
半導体ディスク装置は、一般に、記録媒体としてＮＡＮＤフラッシュメモリ等を用い、その記録方式としては１つのセルに１ビットを記録するシングルレベルセル（以下、「ＳＬＣ」という）方式、１セルに複数のビットを記録するマルチレベルセル（以下、「ＭＬＣ」という）方式がある。
【０００３】
近年では、容量単価を安くするために、ＳＬＣ方式ではなく、ＭＬＣ方式を採用する傾向がある。
【０００４】
図１６にＮＡＮＤフラッシュメモリの信頼性特性を示す。同図に示したように、データの書き込みを行ってから時間が経過するに従ってエラーレイトは上昇し、書換え回数が多いほどエラーレイトは高くなる傾向がある。
【０００５】
また、ＳＬＣ方式よりもＭＬＣ方式の方が高いエラーレイトとなるが、特に、ＭＬＣ方式ではデータを書き込んでから１年程度経過した後のエラーレイトが急激に上昇する傾向がある。
【０００６】
この対策として、書換え回数を各メモリブロックで平準化することにより特定のブロックの書換え回数が多くなることを避けるウェアレベリング技術を採用したり、エラー訂正符号（以下、「ＥＣＣ」という）を用いてある程度のエラーレイトをカバーするようにしている。
【０００７】
しかしながら、このような技術を採用しても、十分な信頼性を得られず、訂正できずにセクタエラーとなる場合があった。
【０００８】
この半導体ディスク装置の信頼性の問題を解消するために、分散データ・ガーディングとも呼ばれるＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）レベル５のディスクアレイを半導体ディスクにて構成し、記録データを修復するために冗長コードとしてパリティを全ての半導体ディスクに分散して保存し、セクタエラー発生時にパリティ計算にて元のデータを復元して保持し、セクタエラーとなった半導体ディスクへの書込みを行う技術はあった（例えば、特許文献１参照）。
【０００９】
また、定期的にディスク全面にわたってリードしたデータを再び書込む、リフレッシュ動作を行い、記録したデータの劣化を防止する技術はあった。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１０−１５１９５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、上記従来のＲＡＩＤ５による半導体ディスク装置では、データの書き込み時に、パリティを算出して生成する必要があるほか、パリティ生成のために所定のデータブロックを一旦半導体ディスクから読み出さなければならず、オーバーヘッドが大きくなるという問題があった。
【００１２】
また、定期的にリフレッシュ動作を行う技術では、リフレッシュ動作を行うことにより、半導体ディスクへの書込み回数が増え、早く装置寿命となってしまうという問題や、リフレッシュ動作の実施によりミッションクリティカルな処理をも遅延させてしまうという問題があった。
【課題を解決するための手段】
【００１３】
本発明は、前述の課題を解決するため次の構成を採用する。すなわち、複数の半導体ディスクによりデータを記録する半導体ディスク装置において、複数の半導体ディスクによりミラーリング構成を成し、一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにした。
【００１４】
或いはさらに、前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、  前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにした。
【００１５】
或いはさらに、所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、当該判定結果に基づいて、ベリファイを実施するようにした。
【発明の効果】
【００１６】
本発明の半導体ディスク装置によれば、以上のように構成したので、高信頼性を維持し、処理量およびオーバーヘッドを少なくすることができる。或いはさらに、ベリファイを実施する頻度を必要最小限とすることができ、システムへの処理負荷を必要最小限にすることができる。或いは、さらにベリファイ動作の実施によるディスクアクセスの遅延の発生を最小限とすることができ、ミッションクリティカルな処理の遅延の発生を防止することができる。
【図面の簡単な説明】
【００１７】
【図１】実施例１の半導体ディスク装置の構成図である。
【図２】実施例１の半導体ディスク装置のリード動作フローチャート図である。
【図３】実施例１の半導体ディスク装置のベリファイ動作フローチャート図である。
【図４】実施例２の半導体ディスク装置の構成図である。
【図５】実施例２の半導体ディスク装置の各フラグの説明図である。
【図６】実施例２の半導体ディスク装置の各テーブルの例示図である。
【図７】実施例２の半導体ディスク装置の１台のベリファイ動作フローチャート図である。
【図８】実施例２の各半導体ディスク装置のインターバル補正動作フローチャート図である。
【図９】実施例２の半導体ディスク装置のインターバル補正テーブルの例示図である。
【図１０】実施例２の半導体ディスク装置のベリファイ動作フローチャート図である。
【図１１】実施例３の半導体ディスク装置の構成図である。
【図１２】実施例３の半導体ディスク装置のアクセス回数集計テーブルの例示図である。
【図１３】実施例３の半導体ディスク装置のアクセス回数集計テーブル更新動作フローチャート図である。
【図１４】実施例３の半導体ディスク装置のベリファイ動作フローチャート図である。
【図１５】実施例３の半導体ディスク装置のベリファイ実施可否設定テーブルの例示図である。
【図１６】ＮＡＮＤフラッシュメモリの信頼性特性を説明する図である。
【発明を実施するための形態】
【００１８】
以下、本発明に係わる実施の形態例を、図面を用いて説明する。図面に共通する要素には同一の符号を付す。なお、以下の説明では、便宜上、２台の半導体ディスクによるミラーリング制御を例として説明するが、３台以上の半導体ディスクによるミラーリング制御であってもよい。
【実施例１】
【００１９】
（構成）
実施例１の半導体ディスク装置では、簡単な処理でオーバーヘッドの少ないＲＡＩＤ１のミラーリングを２台の半導体ディスクにより構成するとともに、運用中に定期的にリード動作を基本とした全面ベリファイ動作を行い、全てのセクタエラーを事前に検出して修復しておくことにより、リード動作におけるセクタエラーの修復不可とならないようにしている。
【００２０】
図１に実施例１の半導体ディスク装置１の構成図を示す。同図に示したように、実施例１の半導体ディスク装置１は、ＣＰＵやメモリを含んだ装置全体を制御し、オペレーティングシステム（以下、「ＯＳ」という）やアプリケーションプログラム（以下、「ＡＰ」という）などのプログラムを実行する制御部２と、２台の半導体ディスクをＲＡＩＤ１にてミラーリングの機能を実現するミラーコントローラ５と、ミラーコントローラ５や図示していない他のコントローラと接続するＰＣＩなどの制御部バス６と、ミラーコントローラ５と２台の半導体ディスク３ａ、３ｂと接続するためのＩＤＥ（Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）などのディスクＩ／Ｆバス４ａ、４ｂを備える。
【００２１】
なお、ミラーコントローラ５は、制御ＬＳＩを実装し、ミラーリング制御をＬＳＩ内部のファームで実現する構成としてもよいし、制御部２内で動作するミラーコントローラドライバにて実現する構成としてもよい。
【００２２】
（動作）
以上の構成により、実施例１の半導体ディスク装置１は以下のように動作する。なお、ミラーリング制御の基本動作としては、複数のディスクに同じデータを書き込む「ライト動作」、任意のディスクからデータをリードする「リード動作」、一方のディスクの故障を検出した場合に当該ディスクへのアクセスを停止して他方の正常なディスクからのみアクセスを行う「縮退動作」、故障したディスクを新しいディスクに交換した後に正常なディスクからデータをコピーしてもとの状態に戻す「リビルド動作」があるが、これらの動作はハードディスクドライブ（ＨＤＤ）により構成したＲＡＩＤ１の動作と同様であるので、簡略化のためにその詳細な説明は省略する。
【００２３】
次に、図２のリード動作のフローチャートを用いて、リードによりセクタエラーが検出された場合のセクタエラー修復動作を説明する。
【００２４】
まず、リードは２台の半導体ディスク３ａ、３ｂのいずれか任意の半導体ディスクを選択し（ステップＳ０１）、選択した半導体ディスク、本例では半導体ディスク３ａへのリードを行い（ステップＳ０２）、その応答がセクタエラーかどうか判断し（ステップＳ０３）、セクタエラーがなければリードしたデータを図示しない上位装置へ転送して（ステップＳ０６）、本処理を終了する。
【００２５】
一方、セクタエラーがあった場合は、選択した半導体ディスク３ａのリードしたセクタにＥＣＣで訂正できないビットエラーがあるため、まず、選択しなかった半導体ディスク３ｂから当該セクタのデータをリードし（ステップＳ０４）、そのデータをセクタエラー応答した半導体ディスク３ａに書き込み（ステップＳ０５）、既にリードしたデータを上位に転送して（ステップＳ０６）、本処理を終了する。
【００２６】
以上のセクタエラー修復動作は、ＯＳやＡＰによるリード時だけでなく、後述のベリファイ動作においても実施するのがよい。
【００２７】
次に、図３の動作フローチャート図を用いて実施例１の半導体ディスク装置のベリファイ動作を説明する。まず、半導体ディスクのアドレスＡｄｒを先頭アドレス、すなわち"０"とする（ステップＳ１１）。
【００２８】
そして、半導体ディスク３ａに対してベリファイコマンドを実行し（ステップＳ１２）、セクタエラー応答がないか確認し（ステップＳ１３）、セクタエラーがあった場合は半導体ディスク３ｂからデータを読み出し（ステップＳ１４）、そのデータを半導体ディスク３ａに書き込む（ステップＳ１５）。
【００２９】
同様に、半導体ディスク３ｂに対してベリファイコマンドを実行し、セクタエラー応答がないか確認し、セクタエラーがあった場合は半導体ディスク３ａからデータを読み出し、そのデータを半導体ディスク３ｂに書き込む（ステップＳ１６〜Ｓ１９）。
【００３０】
アドレスＡｄｒに対するベリファイが半導体ディスク３ａおよび半導体ディスク３ｂについて終了すると、アドレスＡｄｒが半導体ディスクの最終アドレスかどうか判定し（ステップＳ２０）、最終アドレスでなければアドレスＡｄｒをインクリメントし（ステップＳ２１）、ステップＳ１２に戻り、以降同様に半導体ディスクのベリファイを行う。一方、アドレスＡｄｒが最終アドレスのときは本ベリファイ動作を終了する。
【００３１】
なお、以上のベリファイ動作は半導体ディスク装置の動作中にバックグランドで行うが、例えば、１日一回など定期的に実施し、その際にベリファイ動作によるディスクアクセスは、ＯＳやＡＰからのアクセスが数秒程度の一定時間ないような空き時間に実行するようにすればよい。
【００３２】
また、故障した半導体ディスクを新しい半導体ディスクに交換した後に正常な半導体ディスクからデータをコピーしてもとの状態に戻す「リビルド」の際に始めてコピー元になる半導体ディスクについてもベリファイ動作を行い、セクタエラーを検出することによりリード時のセクタエラー修復動作が失敗するリスクを減らすことができる。
【００３３】
以上のように、バックグラウンドにてリード動作を基本としたベリファイ動作を行うようにしたので、従来技術のように全面の書込み動作を伴うリフレッシュ動作を行った場合のように寿命が短くなることもない。
【００３４】
（実施例１の効果）
以上の実施例１の半導体ディスク装置によれば、複数の半導体ディスクによりデータを記録する半導体ディスク装置において、複数の半導体ディスクによりミラーリング構成を成し、一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにしたので、高信頼性を維持したままで、処理量およびオーバーヘッドも少なくすることができる。
【実施例２】
【００３５】
（構成）
実施例２の半導体ディスク装置では、簡単な処理でオーバーヘッドの少ないＲＡＩＤ１により半導体ディスクのミラーリング構成を形成するとともに、ベリファイ動作によるシステムへの処理負荷をさらに少なくするために、ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備えた構成としている。
【００３６】
図４に実施例２の半導体ディスク装置の構成図を示す。同図に示したように、実施例２の半導体ディスク装置は、ミラーコントローラ５に、インターバル設定手段として、詳細後述のディスクテーブル１１と、書換えテーブル１２と、セクタエラー記録テーブル１３と、インターバル補正テーブル１４と、を新たに設けた構成となっている。その他の構成は、実施例１の半導体ディスク装置の構成と同様であるので、簡略化のためにその詳細な説明は省略する。
【００３７】
図５（ａ）にディスクテーブル１１の構成を示す。同図に示したように、ディスクテーブル１１は、半導体ディスクごとに、半導体ディスク装置の記録方式を示す図５（ｂ）の項番をメモリフラグに、搭載するウェアレベリングの種類を示す図５（ｃ）の項番をウェアレベリングフラグに格納できる構成となっている。
【００３８】
前記メモリフラグには、半導体ディスクの記録方式、すなわちＳＬＣ方式かＭＬＣ方式かに分け、ＭＬＣ方式の場合はビット／セルの種類により、２ビット／セルの場合はＭＬＣ２、３ビット／セルの場合はＭＬＣ３、・・・、ｘビット／セルの場合はＭＬＣｘとして、それぞれ対応する項番を格納する。
【００３９】
なお、図５（ｂ）右欄のベリファイ実施時のデフォルトインターバルは記録方式ごとのベリファイ実施ンターバルの基準値であり、高密度の記録方式ほどインターバル時間を短くするように設定し、ＳＬＣ方式のときは１００秒とし、２ビット／セルのＭＬＣ方式のときは５０秒、３ビット／セルのＭＬＣ方式のときは２５秒、そしてｘビット／セルのＭＬＣ方式の場合は１００秒／ｘのインターバルでベリファイを実施することを示す。
【００４０】
また、インターバル補正テーブル１４は、図９に示したように、所定の期間、本例では１ヶ月および１年間に発生したセクタエラー回数に応じてデフォルトインターバルを補正する補正値を格納する。
【００４１】
ところで、ウェアレベリングとは、半導体ディスク装置の特定のアドレスに書換えが集中した場合でも実際のメモリに対しては特定のブロックに書換えが集中しないようにする書換え回数を平準化するアルゴリズムであり、ＡＰデータなどのように運用中に書換えの行われているメモリブロックのみを対象にして平準化を行うダイナミックウェアレベリングと、ＯＳプログラムなどのようにインストール以降書換えられないようなメモリブロックも含めて平準化を行うスタティックウェアレベリングがある。
【００４２】
前記ウェアレベリングフラグには、それぞれの半導体ディスク装置が搭載する上記ウェアレベリングの種類に基づき図５（ｃ）のテーブルに従ってそれぞれ対応する項番を格納する。
【００４３】
なお、図５（ｃ）右欄のベリファイ実施頻度の調整値は、前述のデフォルトインターバルをインターバル補正テーブル１４にて補正したものを、さらにウェアレベリングの種類によりどのように調整するかを示している。例えば、スタティックウェアレベリングではあまり書換えられないエリアの平準化を行う場合であるので、ベリファイ実施頻度を少なくしインターバルを長くし、本例では１０倍としスキップ回数Ｎｓを１０としている。
【００４４】
図６（ａ）に実施例２の半導体ディスク装置の書換えテーブル１２の例示図を示す。同図に示したように、書換えテーブル１２は、半導体ディスク３ａ、３ｂそれぞれについて、半導体ディスクの全領域をエリアＮｏ．１〜ｎのように半導体ディスクのメモリブロックの書換え単位に分割し、それぞれのエリアごとに最後に書き込みがあった日時を保持する。
【００４５】
なお、メモリブロックの書換え単位は、使用するメモリや半導体ディスクの方式により１６ＫＢ〜１２８ＫＢとするが一般的であるが、その他の書換え単位としても勿論よい。
【００４６】
また、書換えテーブル１２は、頻繁に更新されるテーブルであるため、通常はプログラム用メモリ中に実装し、運用終了時に半導体ディスク上のファイルに保存し、次の起動時にプログラム用メモリにロードするようにするのがよい。
【００４７】
図６（ｂ）に実施例２の半導体ディスク装置のセクタエラー記録テーブル１３の構成図を示す。同図に示したように、セクタエラー記録テーブル１３は、半導体ディスク３ａ、３ｂそれぞれについて、ｍ個の記録を保持できるテーブルを用意し、セクタエラーが発生した場合にその発生日時を順次保持する。
【００４８】
なお、セクタエラー記録テーブル１３は、頻繁には更新されないテーブルであるので、図４の構成図では便宜上半導体ディスクとは別の構成として示しているが半導体ディスク上のファイルとして実装してもよい。
【００４９】
（動作）
以上の構成により実施例２の半導体ディスク装置は、以下のように動作する。まず、初期設定として、図５（ｂ）、（ｃ）により半導体ディスクの記録方式及びウェアレベリングに対応する項番をディスクテーブル１１に設定する。なお、この設定はオペレータが専用の設定用ツールによりあらかじめ設定するようにしてもよいし、起動時に制御部２にて記憶方式等の設定をリードして設定するようにしてもよい。
【００５０】
また、初期設定として、書換えテーブル１２の最終更新日時及びセクタエラー記録テーブル１３のセクタエラー発生日時は、日時が指定されていないことを示すため、「０」などの値を書き込んでおく。
【００５１】
そして、運用中の書換えテーブル１２の更新は、ＯＳやＡＰからの半導体ディスクへの書込みがあったときに、該当するエリアに更新日時を書き込む。
【００５２】
そして、運用中のセクタエラー記録テーブル１３の更新は、ＯＳやＡＰからのリード動作によりセクタエラーを検出したときまたはベリファイ動作によりセクタエラーを検出した場合にセクタエラー記録テーブル１３に発生日時を追加する。
【００５３】
そして、セクタエラー記録テーブル１３がフルになった場合はＮｏ．１からサイクリックにテーブルを使用し、直近のセクタエラーの発生日時の情報が残るようにする。
【００５４】
次に、実施例２のベリファイ動作について、図７のベリファイ動作フローチャートを用いて以下詳細に説明する。なお、このベリファイ動作は半導体ディスク３ａと半導体ディスク３ｂそれぞれ独立して動作させる。
【００５５】
運用を開始すると、まず、半導体ディスク毎に、それまでのベリファイ実施の際にファイルとして半導体ディスクに保存されたベリファイを行うアドレスを示す「ベリファイアドレス」とそれまでに実施されたベリファイの回数を示す「ベリファイカウンタ」を読み出し、レジスタＡｄｒとレジスタｃｎｔに格納する（ステップＳ３１）。
【００５６】
なお、最初のシステム構成時のベリファイアドレスは半導体ディスクの先頭領域を示す「０」であり、ベリファイ回数も「０」のため、Ａｄｒ＝０、ｃｎｔ＝０と設定される。
【００５７】
次に、詳細後述のベリファイを行うインターバルの設定を実施し（ステップＳ３２）、次に、アドレスＡｄｒについて詳細後述のベリファイを実施し（ステップＳ３３）、Ａｄｒをインクリメントする（ステップＳ３４）。
【００５８】
そして、Ａｄｒが半導体ディスク装置の最終アドレスを超えた場合は（ステップＳ３５）、初期値の「０」に戻し、ｃｎｔをインクリメントする（ステップＳ３６）。
【００５９】
そして、運用を終了する場合は（ステップＳ３７）、Ａｄｒとｃｎｔの値をそれぞれ半導体ディスク装置の「ベリファイアドレス」と「ベリファイカウンタ」に保存して終了する（ステップＳ３８）。
【００６０】
一方、運用を継続する場合は、直近のステップＳ３２のインターバル設定から所定の時間経過したかどうかを確認し、所定の時間を経過していると判定した場合は（ステップＳ３９）、ステップＳ３２に戻り、インターバル設定を最新の状態にし、以降同様に行う。ステップＳ３９にて所定の時間を経過していないと判定した場合は、ステップＳ３３に戻り、ベリファイ動作を継続して実施し、以降同様に行う。
【００６１】
なお、前記所定の時間は例えば２４時間などの時間とし、連続運用を行う装置でも、１日ごとにインターバル設定を更新する。
【００６２】
次に、前述ステップＳ３２のインターバル設定の詳細な動作を図８の動作フローチャートを用いて説明する。まず、ディスクテーブル１１のメモリフラグ、すなわち半導体ディスクの記録方式を示す項番に対応する図５（ｂ）のデフォルトインターバルを取得する（ステップＳ４１）。
【００６３】
例えば、２ビット／セルのＭＬＣの場合で項番が"２"の場合では、デフォルトインターバルとしてＴｃ＝５０秒を取得する。
【００６４】
次に、セクタエラー記録テーブル１３を参照し、直近１ヶ月と１年のセクタエラー回数を集計する（ステップＳ４２）。
【００６５】
そして、インターバルを図９のインターバル補正テーブル１４に従って補正し、当該半導体ディスク装置の最終的なインターバル時間を決定する（ステップＳ４３）。
【００６６】
例えば、セクタエラー記録テーブル１３を参照した結果、２０１０年１０月現在、図６（ｂ）の半導体ディスク３ａのように、直近１ヶ月にセクタエラーが１回発生し、１年間に４回セクタエラーが発生していた場合では、前述のデフォルトインターバルＴｃを１／２にし、Ｔｃ＊＝２５秒と補正する。
【００６７】
次に、以上のように補正されたインターバルＴｃ＊ごとに実施するベリファイの詳細動作を図１０の動作フローチャートを用いて説明する。まず、ステップＳ４３で設定した当該半導体ディスク装置のインターバル時間Ｔｃ＊（＝２５秒）の間、ウェイトする（ステップＳ５１）。
【００６８】
次に、ディスクテーブル１１のウェアレベリングフラグを参照しウェアレベリングを確認し、ウェアレベリング無しの場合や（ステップＳ５２）、ダイナミックウェアレベリングで且つ書換えテーブル１２を参照しＡｄｒを含むエリアの書換えが例えば最近１年間行われていない場合は（ステップＳ５３）、ステップＳ５５のベリファイの実動作に進む。
【００６９】
また、ダイナミックウェアレベリングで且つ書換えテーブル１２を参照し例えば最近１年に書換えが行われている場合やスタティックウェアレベリングの場合は、ベリファイの実動作をインターバルＴｃ間ごとの図５（ｃ）のスキップ回数Ｎｓ回数ごとに一回行うようにするために、ｃｎｔの値をスキップ回数Ｎｓで割った余りが０かどうか調べ（ステップＳ５４）、０の場合はステップＳ５５のベリファイの実動作に進み、０以外の場合は処理を終了する。
【００７０】
なお、ステップＳ５５〜Ｓ５８のベリファイの実動作とセクタエラー時の動作は実施例１の図３のステップＳ１２〜Ｓ１５またはステップＳ１６〜Ｓ１９と同様であるので簡略化のためにその説明を省略する。
【００７１】
（実施例２の効果）
以上の実施例２の半導体ディスク装置によれば、ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたので、実施例１の効果に加え、ベリファイを実施する頻度を必要最小限とすることができ、システムへの処理負荷を必要最小限にすることができる。
【実施例３】
【００７２】
（構成）
実施例３の半導体ディスク装置では、図１１の構成図に示したように、実施例１の構成に、ベリファイ実施有無判定手段として、所定の時間間隔の半導体ディスクのリードおよびライトのアクセス回数を格納するアクセス回数集計テーブル２１と、当該アクセス回数集計テーブル２１に基づいて当該時間帯にてベリファイを実施するか実施ないかを判定して当該判定結果を格納するベリファイ実施有無設定テーブル２２と、を新たに設け、ベリファイ実施有無設定テーブル２２の前記判定結果に基づいてベリファイを実施する構成としている。その他の構成は、実施例１の構成と同様であるので、その詳細な説明は省略する。
【００７３】
図１２はアクセス回数集計テーブル２１の構成例を示す図である。同図に示したように、アクセス回数集計テーブル２１は、曜日ごとに１０分毎のアクセス回数を保持できる構成となっている。なお、上記時間間隔は１０分より短くしてもよいし、逆に長くしても勿論よい。また、アクセス回数集計テーブル２１は、頻繁に更新やリードを行わないため、半導体ディスク上のファイルとして実装してもよい。
【００７４】
図１５は、ベリファイ実施有無設定テーブル２２の構成例を示す図である。同図に示したように、ベリファイ実施が可能な時間帯・曜日を「○」で示し、不可の時間帯・曜日を「×」として格納できるようになっている。なお、"○"を"１"とし「×」を"０"、或いはその逆にして格納するようにしてもよい。
【００７５】
（動作）
以上の構成により、実施例３の半導体ディスク装置は、以下のように動作する。この動作を図１３のアクセス回数集計テーブル２１の更新動作フローチャートおよび図１４のベリファイ動作の動作フローチャートを用いて以下詳細に説明する。
【００７６】
まず、図１３に示したように、装置起動後、アクセス回数集計を行う時間間隔となる１０分間、ウェイトし（ステップＳ６１）、この間の半導体ディスク（３ａ、３ｂ）へのアクセス回数を計数する（ステップＳ６２）。なお、単位時間あたりの半導体ディスクへのアクセス回数の計数は、汎用ＯＳではライブラリ等でファイルアクセス回数の計数機能として提供されているので、当該機能を用いればよい。
【００７７】
そして、１０分間のアクセス回数をアクセス回数集計テーブル２１の該当する時刻・曜日の欄に格納して更新する（ステップＳ６３）。なお、アクセス回数集計テーブル２１の該当する欄を更新する際に、例えば、今回の計数回数は１／４し、該当する欄にすでに格納されていた値を３／４にし、これらを加算して当該欄に上書きするようにすれば、直近の１週間前のアクセス回数にてスムージングすることができる。
【００７８】
或いは、アクセス回数集計テーブル２１を当該月分格納できる構成とし、今回の計数回数は１／４し、該当する欄にすでに格納されていた値を３／４にし、これらを加算して当該欄に上書きするようにすれば、直近の１月前のアクセス回数にてスムージングすることができる。
【００７９】
次に、アクセス回数集計テーブル２１を用いて、ベリファイ実施タイミングを調整する動作について図１４の動作フローチャートを用いて以下説明する。
【００８０】
まず、アクセス回数集計テーブル２１より、どの時間帯でベリファイ実施が可能か否かの判定結果を格納するベリファイ実施有無設定テーブル２２を作成する（ステップＳ７１）。
【００８１】
すなわち、図１２のアクセス回数集計テーブル２１から、例えば上位２０％に入る最小のアクセス回数を求めて基準回数Ｎｍとして、この基準回数Ｎｍ以上をベリファイ実施不可の「×」としその他を「○」としてベリファイ実施有無設定テーブル２２を作成する。図１５の例では、アクセス回数集計テーブル２１から基準回数Ｎｍが９００回として求められ、当該基準回数９００回にてベリファイ実施可否を判定して当該判定結果を「○」「×」にて格納した例となっている。
【００８２】
なお、基準回数Ｎｍは半導体ディスク装置の運用条件などで調整し、セクタエラー発生が少なくなる運用条件では、例えば上位３０％に入る最小のアクセス回数を基準回数Ｎｍとしてベリファイ実施可否を判定するようにし、ベリファイ実施頻度を少なくするのがよい。
【００８３】
そして、１０分毎の区切りの時間までウェイトした後（ステップＳ７２）、現在、ベリファイ未実施の状態で「○」の時間帯になった場合は（ステップＳ７３）、ベリファイ動作を起動する（ステップＳ７４）。なお、ステップＳ７４のベリファイ動作は、図３にて説明した実施例１の半導体装置のベリファイ動作と同様に行うようにすればよい。一方、ベリファイ動作中で「×」の時間帯になった場合は（ステップＳ７５）、ベリファイ動作を終了する（ステップＳ７６）。
【００８４】
そして、運用終了でないときは（ステップＳ７８）、ベリファイ実施可否設定テーブル１５を作成してから所定の期間、例えば２４時間経過した場合は、ステップＳ７１に戻り、再度ベリファイ実施可否設定テーブル１５の作成を行い、以下同様に行い、一方、所定の期間を経過していないときは、ステップＳ７２に戻り、１０分間ごとのベリファイ実施可否設定テーブル１５に基づいたベリファイ実施動作を繰り返す。ステップＳ７８にて運用終了と判定したときは、本処理を終了する。
【００８５】
なお、以上の実施例の説明では、実施例１の半導体ディスク装置の構成にアクセス回数集計テーブル２１を設けた例を説明したが、図４の実施例２の半導体ディスクの構成にアクセス回数集計テーブル２１およびベリファイ実施有無設定テーブル２２を設け、ベリファイ実施インターバルを、半導体ディスクの記録方式、書換えた回数、搭載するウェアレベリングの種類に基づいて調整するとともに、所定の時間ごとのアクセス回数によりベリファイ実施の有無をさらに調整するようにしてもよい。
【００８６】
また、以上の実施例の説明では、ベリファイ実施可否設定テーブル１５を設けるように説明したが、ベリファイ実施可否設定テーブル１５を設けることなく、アクセス回数集計テーブル２１に基づいて、都度該当する時間帯のアクセス回数が基準回数Ｎｍより多いかどうかを判定してベリファイ実施の可否を判定するようにしてもよい。
【００８７】
（実施例３の効果）
以上の実施例３の半導体ディスク装置によれば、所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、当該判定結果に基づいて、ベリファイを実施するようにしたので、ベリファイ動作の実施によるＯＳやＡＰからのディスクアクセスの遅延の発生を最小限とすることができる。
【００８８】
《その他の変形例》
なお、以上の実施例の説明では、ＮＡＮＤフラッシュメモリを用いた半導体ディスク装置を例として説明したが、書込みにより寿命が短くなりリードエラーが発生し易いその他の不揮発性メモリを使用したディスク装置にも本発明を適用することができる。
【産業上の利用可能性】
【００８９】
以上述べたように、本発明は不揮発性の複数の半導体ディスクによりデータを記録する半導体ディスク装置に広く用いることができる。
【符号の説明】
【００９０】
１    半導体ディスク装置
２    制御部
３ａ、３ｂ  半導体ディスク
４ａ、４ｂ  ディスクＩ／Ｆ＃１、＃２
５    ミラーコントローラ
１１  ディスクテーブル
１２  書換えテーブル
１３  セクタエラー記録テーブル
１４  インターバル補正テーブル
２１  アクセス回数集計テーブル
２２  ベリファイ実施有無設定テーブル
【図１】
0005678628.tif 000002
【図２】
0005678628.tif 000003
【図３】
0005678628.tif 000004
【図４】
0005678628.tif 000005
【図５】
0005678628.tif 000006
【図６】
0005678628.tif 000007
【図７】
0005678628.tif 000008
【図８】
0005678628.tif 000009
【図９】
0005678628.tif 000010
【図１０】
0005678628.tif 000011
【図１１】
0005678628.tif 000012
【図１２】
0005678628.tif 000013
【図１３】
0005678628.tif 000014
【図１４】
0005678628.tif 000015
【図１５】
0005678628.tif 000016
【図１６】
0005678628.tif 000017