(57)【特許請求の範囲】
【請求項１】
ソリッドステートディスク（ＳＳＤ）アクセス方法であって、
ＳＳＤに対するデータ書き込み命令を受信するステップであって、前記ＳＳＤがＮ個の物理チャンネルとキャッシュとを含み、前記物理チャンネルのそれぞれにフラッシュメモリがマウントされ、前記キャッシュが複数のストライプを含み、前記ストライプのそれぞれがＮ個のセクタを含み、Ｎが３以上の整数であるステップと、
前記データ書き込み命令に付加される書き込み待ちデータの論理ブロックアドレス（ＬＢＡ）に対応する第１ストライプと第１セクタとを特定するステップと、
前記キャッシュに前記第１ストライプが存在する場合に、前記書き込み待ちデータを前記第１セクタのデータとして前記キャッシュに書き込むステップと、
前記キャッシュに前記第１ストライプが存在しない場合に、前記第１ストライプを作成し、前記書き込み待ちデータを前記第１セクタのデータとして前記キャッシュに書き込むステップと、を含むことを特徴とするＳＳＤアクセス方法。
【請求項２】
前記データ書き込み命令に付加される書き込み待ちデータのＬＢＡに対応する前記第１ストライプと前記第１セクタとを特定するステップは、
前記第１ストライプのインデックスを
【数１】
0006823734.tif 000011
で特定することと、
前記第１セクタの識別子をｓｅｃｔｏｒ＿ｉｄ＝ＬＢＡ％Ｎ１で特定することと、を含み、
Ｎ１は、１つのストライプにおける、ユーザデータを格納するためのセクタの数を示し、Ｎ１は、１より大きくＮより小さい整数であり、
【数２】
0006823734.tif 000012
は、小数点以下の切り捨て演算子を示し、％は、モジュロ演算子を示すことを特徴とする請求項１に記載の方法。
【請求項３】
第２ストライプにおけるユーザデータセクタごとに、当該セクタのデータがフラッシュメモリに記憶された場合に、当該セクタのデータを前記フラッシュメモリから読み取って前記キャッシュに書き込むステップと、
前記キャッシュに格納された前記第２ストライプの全てのユーザデータセクタのデータに対してチェック演算を行って前記第２ストライプのチェックデータセクタのチェックデータを取得し、当該チェックデータを前記キャッシュに書き込むステップと、
前記キャッシュに格納された前記第２ストライプの全てのセクタのデータをフラッシュメモリに書き込むステップと、を更に含むことを特徴とする請求項１に記載の方法。
【請求項４】
セクタに対応する論理チャンネルを特定することと、
当該論理チャンネルに対応する物理チャンネルを検索することと、
前記キャッシュに格納された当該セクタのデータを当該物理チャンネルにマウントされた前記フラッシュメモリに書き込むこととにより、
前記キャッシュに格納された当該セクタのデータをフラッシュメモリに書き込むステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項５】
当該セクタに対応する論理チャンネルを特定することは、
当該セクタがユーザデータを格納するためのユーザデータセクタであるときに、当該ユーザデータセクタに対応する論理チャンネルの識別子ｄ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄを
【数３】
0006823734.tif 000013
で特定することと、
当該セクタがチェックデータを格納するためのチェックデータセクタであるときに、当該チェックデータセクタに対応する論理チャンネルの識別子ｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄをｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄ＝ｓｔｒｉｐ＿ｉｎｄｅｘ％Ｎで特定することと、を含み、
ｓｅｃｔｏｒ＿ｉｄは、当該セクタの識別子を示し、ｓｔｒｉｐ＿ｉｎｄｅｘは、当該セクタの所在するストライプのインデックスを示し、％は、モジュロ演算子を示すことを特徴とする請求項４に記載の方法。
【請求項６】
前記ＳＳＤに対するデータ読み取り命令を受信するステップと、
前記データ読み取り命令に付加される読み取り待ちデータのＬＢＡに対応する第３ストライプと第３セクタとを特定するステップと、
前記キャッシュに前記第３ストライプが存在し、且つ前記第３セクタのデータが前記キャッシュに記憶された場合に、前記キャッシュから前記第３セクタのデータを前記読み取り待ちデータとして読み取るステップと、
前記キャッシュに前記第３ストライプが存在し、且つ前記第３ストライプにおける前記第３セクタのデータがフラッシュメモリに格納された場合に、前記第３セクタに対応するフラッシュメモリから前記第３セクタのデータを前記読み取り待ちデータとして読み取るステップと、
前記キャッシュに前記第３ストライプが存在しない場合に、前記第３セクタに対応するフラッシュメモリから前記第３セクタのデータを前記読み取り待ちデータとして読み取るステップと、を更に含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記Ｎ物理チャンネルの１つが失効したことが検出されたときに、前記キャッシュにおける旧ストライプに対して以下のステップを実行することを更に含み、前記以下のステップは、
当該ストライプのうちの失効セクタ以外の他のセクタのデータを前記フラッシュメモリから読み取るステップであって、当該失効セクタが前記失効した物理チャンネルにバインディングされた論理チャンネルに対応するセクタであるステップと、
読み出されたデータを用いて前記失効セクタのデータを回復するステップと、
回復されたデータを前記失効セクタのデータとして前記キャッシュに書き込むステップと、
当該ストライプにおけるそれぞれのユーザデータセクタのＬＢＡに基づいて当該ＬＢＡに対応する新ストライプと新ユーザデータセクタとを特定するステップであって、当該新ストライプにおけるセクタの数が前記ＳＳＤにおける有効物理チャンネルの数に等しいステップと、
当該ユーザデータセクタのデータが前記キャッシュに記憶された場合に、当該ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転するステップと、
当該ユーザデータセクタのデータが前記フラッシュメモリに記憶された場合に、当該ユーザデータセクタのデータを前記フラッシュメモリから読み取って前記キャッシュに書き込んだ後、当該ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転するステップと、を含むことを特徴とする請求項１に記載の方法。
【請求項８】
ソリッドステートディスク（ＳＳＤ）であって、
複数のストライプ（前記ストライプのそれぞれがＮ個のセクタを含み、Ｎが３以上の整数である）を含むキャッシュと、
Ｎ個の物理チャンネルと、
それぞれの前記物理チャンネルにマウントされたフラッシュメモリと、
コントローラと、
機器の実行可能な指令が記憶された機器読み取り可能な記憶媒体と、を備え、
前記コントローラは、前記機器の実行可能な指令を読み取って実行することにより、
前記ＳＳＤに対するデータ書き込み命令を受信することと、
前記データ書き込み命令に付加される書き込み待ちデータの論理ブロックアドレス（ＬＢＡ）に対応する第１ストライプと第１セクタとを特定することと、
前記キャッシュに前記第１ストライプが存在する場合に、前記書き込み待ちデータを前記第１セクタのデータとして前記キャッシュに書き込むことと、
前記キャッシュに前記第１ストライプが存在しない場合に、前記第１ストライプを作成し、前記書き込み待ちデータを前記第１セクタのデータとして前記キャッシュに書き込むことと、を実行させることを特徴とするＳＳＤ。
【請求項９】
前記データ書き込み命令に付加される書き込み待ちデータのＬＢＡに対応する前記第１ストライプと前記第１セクタとを特定する際には、前記コントローラは、更に、前記機器の実行可能な指令により、
前記第１ストライプのインデックスを
【数４】
0006823734.tif 000014
で特定することと、
前記第１セクタの識別子をｓｅｃｔｏｒ＿ｉｄ＝ＬＢＡ％Ｎ１で特定することと、を実行させ、
Ｎ１は、１つのストライプにおける、ユーザデータを格納するためのセクタの数を示し、Ｎ１は、１より大きくＮより小さい整数であり、
【数５】
0006823734.tif 000015
は、小数点以下の切り捨て演算子を示し、％は、モジュロ演算子を示すことを特徴とする請求項８に記載のＳＳＤ。
【請求項１０】
前記コントローラは、更に、前記機器の実行可能な指令により、
第２ストライプにおけるユーザデータセクタごとに、当該セクタのデータがフラッシュメモリに記憶された場合に、当該セクタのデータを前記フラッシュメモリから読み取って前記キャッシュに書き込むことと、
前記キャッシュに格納された前記第２ストライプの全てのユーザデータセクタのデータに対してチェック演算を行って前記第２ストライプのチェックデータセクタのチェックデータを取得し、当該チェックデータを前記キャッシュに書き込むことと、
前記キャッシュに格納された前記第２ストライプの全てのセクタのデータをフラッシュメモリに書き込むことと、を実行させることを特徴とする請求項８に記載のＳＳＤ。
【請求項１１】
前記コントローラは、更に、前記機器の実行可能な指令で、
セクタに対応する論理チャンネルを特定することと、
当該論理チャンネルに対応する物理チャンネルを検索することと、
前記キャッシュに格納された当該セクタのデータを当該物理チャンネルにマウントされた前記フラッシュメモリに書き込むこととにより、
前記キャッシュに格納された当該セクタのデータをフラッシュメモリに書き込むことを実行させることを特徴とする請求項８に記載のＳＳＤ。
【請求項１２】
当該セクタに対応する論理チャンネルを特定する際には、前記コントローラは、更に、前記機器の実行可能な指令により、
当該セクタがユーザデータを格納するためのユーザデータセクタであるときに、当該ユーザデータセクタに対応する論理チャンネルの識別子ｄ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄを
【数６】
0006823734.tif 000016
で特定することと、
当該セクタがチェックデータを格納するためのチェックデータセクタであるときに、当該チェックデータセクタに対応する論理チャンネルの識別子ｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄを
ｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄ＝ｓｔｒｉｐ＿ｉｎｄｅｘ％Ｎで特定することと、を実行させ、
ｓｅｃｔｏｒ＿ｉｄは、当該セクタの識別子を示し、ｓｔｒｉｐ＿ｉｎｄｅｘは、当該セクタの所在するストライプのインデックスを示し、％は、モジュロ演算子を示すことを特徴とする請求項１１に記載のＳＳＤ。
【請求項１３】
前記コントローラは、更に、前記機器の実行可能な指令により、
前記ＳＳＤに対するデータ読み取り命令を受信することと、
前記データ読み取り命令に付加される読み取り待ちデータのＬＢＡに対応する第３ストライプと第３セクタとを特定することと、
前記キャッシュに前記第３ストライプが存在し、且つ前記第３セクタのデータが前記キャッシュに記憶された場合に、前記キャッシュから前記第３セクタのデータを前記読み取り待ちデータとして読み取ることと、
前記キャッシュに前記第３ストライプが存在し、且つ前記第３ストライプにおける前記第３セクタのデータがフラッシュメモリに格納された場合に、前記第３セクタに対応するフラッシュメモリから前記第３セクタのデータを前記読み取り待ちデータとして読み取ることと、
前記キャッシュに前記第３ストライプが存在しない場合に、前記第３セクタに対応するフラッシュメモリから前記第３セクタのデータを前記読み取り待ちデータとして読み取ることと、を実行させることを特徴とする請求項８に記載のＳＳＤ。
【請求項１４】
前記コントローラは、更に、前記機器の実行可能な指令により、
前記Ｎ物理チャンネルの１つが失効したことが検出されたときに、前記キャッシュにおける旧ストライプに対して以下のステップを実行することを実行させ、前記以下のステップは、
当該ストライプのうちの失効セクタ以外の他のセクタのデータを前記フラッシュメモリから読み取るステップであって、当該失効セクタが前記失効した物理チャンネルにバインディングされた論理チャンネルに対応するセクタであるステップと、
読み出されたデータを用いて前記失効セクタのデータを回復するステップと、
回復されたデータを前記失効セクタのデータとして前記キャッシュに書き込むステップと、
当該ストライプにおけるそれぞれのユーザデータセクタのＬＢＡに基づいて当該ＬＢＡに対応する新ストライプと新ユーザデータセクタとを特定するステップであって、当該新ストライプにおけるセクタの数が前記ＳＳＤにおける有効物理チャンネルの数に等しいステップと、
当該ユーザデータセクタのデータが前記キャッシュに記憶された場合に、当該ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転するステップと、
当該ユーザデータセクタのデータが前記フラッシュメモリに記憶された場合に、当該ユーザデータセクタのデータを前記フラッシュメモリから読み取って前記キャッシュに書き込んだ後、当該ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転するステップと、を含むことを特徴とする請求項８に記載のＳＳＤ。
【発明の詳細な説明】
【背景技術】
【０００１】
［関連出願の相互引用］
本願は、出願日が２０１７年４月１４日であり、出願番号が２０１７１０２４４７９３．５であり、発明名称が「ソリッドステートディスクアクセス方法及び装置」である中国特許出願の優先権を主張し、当該出願の全文が引用により本願に組み込まれる。
【０００２】
ＳＳＤ（Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｉｓｋ、ソリッドステートディスク）は、主にコントローラとフラッシュメモリ（Ｆｌａｓｈ）とによって構成される。現在、ＳＳＤは、より高速なデータ読み書き速度が与えられるように、一般的にマルチチャンネル並行技術が採用されている。具体的に、コントローラは、複数の物理チャンネル（Ｃｈａｎｎｅｌ）を用いて複数のフラッシュメモリを並行に操作する。
【図面の簡単な説明】
【０００３】
【図１】本発明の実施例に示す、ストライプ化技術が採用されていない場合とストライプ化技術が採用されている場合とのデータ記憶対比模式図である。
【図２】本発明の実施例に示すＳＳＤの構造模式図である。
【図３】本発明の実施例に示すＳＳＤアクセス方法のフローチャートである。
【図４】本発明の実施例に示すデータ書き込み命令を受信した後の書き込み操作のフローチャートである。
【図５】本発明の実施例に示すストライプエージング操作のフローチャートである。
【図６】本発明の実施例に示すデータ読み取り命令を受信した後の読取操作のフローチャートである。
【図７】本発明の実施例に示す物理チャンネルの失効時のデータ回復および移転操作のフローチャートである。
【図８】本発明の実施例に示すＳＳＤアクセス装置の所在するＳＳＤのハードウェア構造模式図である。
【図９】本発明の実施例に示すＳＳＤアクセス装置の１種の構造模式図である。
【図１０】本発明の実施例に示すＳＳＤアクセス装置のもう１種の構造模式図である。
【発明を実施するための形態】
【０００４】
ここで、例示的な実施例を詳細に説明する。その例示は、図面に示される。以下の記述は、図面に係る際、別途示さない限り、異なる図面における同じ符号が同じ又は類似する要素を示す。以下の例示的な実施例に記述される実施形態が本発明と一致する全ての実施形態を代表するわけではない。逆に、それらは、単に添付する特許請求の範囲に詳細に記述されるような、本発明の幾つかの態様に一致する装置及び方法の例である。
【０００５】
本発明で使用される用語は、単に特定の実施例を記述する目的であり、本発明を制限するためのものではない。本発明及び添付する特許請求の範囲で使用される単数形式の「一種」、「前記」及び「当該」も、文脈から他の意味を明瞭で分かる場合でなければ、複数の形式を含むことを意図する。理解すべきことは、本文で使用される用語「および/または」が、１つまたは複数の関連する列挙項目を含む如何なる或いは全ての可能な組み合わせを指す。
【０００６】
理解すべきことは、本発明において第１、第２、第３等という用語を用いて各種の情報を記述するが、これらの情報は、これらの用語に限定されるものではない。これらの用語は、単に同一のタイプの情報同士を区分するために用いられる。例えば、本発明の範囲を逸脱しない限り、第１情報が第２情報と呼称されてもよく、類似的に、第２情報が第１情報と呼称されてもよい。これは、コンテキストに依存する。例えば、ここで使用される言葉「場合」は、「…とき」や「…ときに」あるいは「特定の状況に応じて」として解釈されてもよい。
【０００７】
マルチチャンネル並行技術の使用により、データ読み書きの並行実行が可能であるが、実際の応用にデータ読み書きが必ずしも連続的とは限らず、ほとんどの場合にランダムな読み書きである。このように、同一の物理チャンネルにマウントされたフラッシュメモリへ同時にアクセスすると、アクセスの衝突になってしまう。上記アクセス衝突問題を解決する手法は、主にデータをストライプ化することである。ストライプ化技術は、データ読み書きの負荷を各物理チャンネルにマウントされたフラッシュメモリへ自動的に均一化させる技術である。
【０００８】
図１に示すように、ストライプ化技術の使用により、データを複数の所定大きさのサブデータに分割し、それらを異なる物理チャンネルにマウントされたフラッシュメモリにそれぞれ記憶可能である。これにより、データ並行読み書きが図られ、アクセス衝突が効果的に回避される。
【０００９】
また、フラッシュメモリは、先に消去（ｅｒａｓｅ）しないと書き込み（ｐｒｏｇｒａｍ）できない特性を有する。消去の最小単位は、ブロック（Ｂｌｏｃｋ）であり、読み書きの最小単位は、ページ（Ｐａｇｅ）であり、１つのブロックは、複数のページを含んでもよい。したがって、フラッシュメモリにおけるデータを変更する際には、直接既存データを新データで上書きすることができず、全ブロックにおけるデータを読み取ってメモリに保存し、メモリにおいて変更すべきデータを新データに更新し、全ブロックにおけるデータを消去し、メモリにおける変更後のデータを当該ブロックに書き込む必要がある。このように、ＳＳＤの書き込み拡大（Ｗｒｉｔｅ Ａｐｐｌｉｃａｔｉｏｎ）問題が生じる。例えば、１つのブロックにおける１０２４個のページが全部書き尽くされたと仮定すれば、その中の１つのページにおけるデータを変更する必要がある場合に、当該ページの所属するブロックにおける全てのデータをメモリに読み取って当該ページにおけるデータを変更し、その後フラッシュメモリにおける当該ブロックの全てのデータを消去し、メモリにおける変更後のデータを当該ブロックに書き込む必要はある。その際の書き込み拡大倍率は、１０２４となる。
【００１０】
ＳＳＤには書き込み拡大倍率が非常に大きいという問題が存在するため、ＳＳＤの性能および使用寿命が影響されてしまう。
【００１１】
上記問題を解決すべく、本発明の以下の実施例は、ＳＳＤアクセス方法、および当該方法に適用可能な装置を提供する。図２に示すように、本発明の実施例のＳＳＤは、コントローラ２０１、キャッシュ（Ｃａｃｈｅ）２０２、３つ以上の物理チャンネル２０４、およびそれぞれの物理チャンネル２０４にマウントされたフラッシュメモリ（Ｆｌａｓｈ）２０３を備える。キャッシュ２０２は、メモリ中で区分された記憶空間であってもよい。本発明の実施例のＳＳＤは、マルチチャンネル並行技術およびストライプ化技術を用いてデータ読み書きを行ってもよい。
【００１２】
これに基づくと、図３に示すように、本発明の実施例のＳＳＤアクセス方法は、以下のステップを含む。
【００１３】
ステップＳ３０１では、データ書き込み命令を受信し、当該データ書き込み命令に付加される書き込み待ちデータのＬＢＡ（Ｌｏｇｉｃａｌ Ｂｌｏｃｋ Ａｄｄｒｅｓｓ、論理ブロックアドレス）に対応する第１ストライプと第１セクタとを特定する。
【００１４】
それぞれのストライプは、３つ以上のセクタを含んでもよく、且つそれぞれのストライプに含まれるセクタの数がＳＳＤにおける物理チャンネル数に等しく、ＳＳＤにおけるフラッシュメモリの数にも相当する。例えば、ＳＳＤにおける物理チャンネル数が４であるときに、それぞれのストライプは、４個のセクタを含む。
【００１５】
ステップＳ３０２では、キャッシュに第１ストライプが存在するか否かを判断し、そうであれば、ステップＳ３０３を実行し、そうでなければ、ステップＳ３０４を実行する。
【００１６】
ステップＳ３０３では、書き込み待ちデータを第１セクタのデータとしてキャッシュに書き込む。
【００１７】
ステップＳ３０４では、第１ストライプを作成し、書き込み待ちデータを第１セクタのデータとしてキャッシュに書き込む。
【００１８】
本発明の上記実施例の方法では、ＳＳＤにキャッシュ２０２が設けられ、ＳＳＤがデータ書き込み命令を受信した後、更に書き込み待ちデータをキャッシュ２０２に格納する。このように、変更頻度の高いホットスポットデータについて、当該ホットスポットデータがキャッシュ２０２に格納可能であるため、単にキャッシュ２０２におけるデータを変更すればよく、フラッシュメモリ２０３に対する消去・書き込みを繰り返す必要がなくなり、これにより書き込み拡大倍率が低減される。
【００１９】
以下では、上記ＳＳＤアクセス方法を詳細に記述する。ＳＳＤは、冗長のチェックデータを算出することでフォールトトレラントメカニズムを供給できる。その原理としては、キャッシュの各ストライプにおけるユーザデータに対してチェック演算を行ってチェックデータを取得し、チェックデータを一定のルールに従って異なる物理チャンネルにマウントされたフラッシュメモリに分散させる。このように、ある物理チャンネルが失効したときに、例えば、当該物理チャンネルに障害が発生し、または当該物理チャンネルにマウントされたフラッシュメモリに障害が発生したときに、データ回復を実現できる。また、ストライプにおけるあるセクタのデータ読取に失敗したときにも、データ回復を実現できる。
【００２０】
メモリ中で１つの記憶空間をキャッシュとして区分してもよい。当該記憶空間は、あるストライプのあるセクタのデータをキャッシュし、且つ当該ストライプの記録情報を記憶する。
【００２１】
本発明の実施例では、セクタ（ｓｅｃｔｏｒ）大きさをストライプ深度、物理チャンネル数Ｎをストライプ幅としてもよい。即ち、それぞれのストライプは、Ｎ個のセクタを含む。フォールトトレラントメカニズムが供給されるように、それぞれのストライプのＮ個のセクタは、ユーザデータを格納するためのＮ１個のユーザデータセクタと、チェックデータを格納するためのＮ２個のチェックデータセクタとを含む。Ｎ１＋Ｎ２＝Ｎ、Ｎ１＞Ｎ２を満たす。例えば、１つのセクタの大きさは、４Ｋビットであってもよい。
【００２２】
１つの例示では、それぞれのストライプ（ｓｔｒｉｐ）におけるＮ個のセクタを０から番号付け、順にセクタ０、セクタ１、セクタ２、…、セクタＮ−１とし、且つ最後Ｎ２個のセクタをチェックデータセクタとして固定使用してもよい。
【００２３】
これに基づくと、本発明の実施例のＳＳＤアクセス方法は、以下の内容を含む。
データ書き込み
図４に示すように、ＳＳＤは、ホスト（Ｈｏｓｔ）から送信されたデータ書き込み命令を受信した後、書き込み操作を以下のように実行する。
【００２４】
ステップＳ４０１では、ホストから送信されたデータ書き込み命令を受信した後、当該データ書き込み命令に付加される書き込み待ちデータのＬＢＡに対応する第１ストライプと第１セクタとを特定する。
【００２５】
ＬＢＡに対応する第１ストライプのインデックスｓｔｒｉｐ＿ｉｎｄｅｘと第１セクタの識別子ｓｅｃｔｏｒ＿ｉｄとを特定する算出方法は、数式（１）及び数式（２）を参照してもよい。
【００２６】
【数１】
0006823734.tif 000002
【００２７】
【数２】
0006823734.tif 000003
【００２８】
ただし、
【００２９】
【数３】
0006823734.tif 000004
【００３０】
は、小数点以下の切り捨て演算子を示し、％は、モジュロ演算子を示す。
数式（１）により、各ＬＢＡは、異なるストライプに配分可能である。そして、ＬＢＡの初期値から、Ｎ１個ずつの連続するＬＢＡは、同一のストライプに配分可能である。
【００３１】
Ｎ１＝４であるときに、数式（１）と数式（２）に応じて算出された各ＬＢＡに対応するストライプのインデックスとセクタの識別子は、表１に示される。
【００３２】
【表１】
0006823734.tif 000005
【００３３】
ステップＳ４０１における書き込み待ちデータのＬＢＡが１４であると仮定すれば、数式（１）と数式（２）に応じて、当該書き込み待ちデータに対応する第１ストライプのインデックス：３および第１セクタの識別子：２は、特定される。
【００３４】
ステップＳ４０２では、キャッシュに第１ストライプが存在するか否かを判断し、そうであれば、ステップＳ４０３を実行し、そうでなければ、ステップＳ４０６を実行する。
【００３５】
例えば、メモリに複数のＨａｓｈバケット（ｂｕｃｋｅｔ）を予め作成してもよく、それぞれのＨａｓｈバケットが複数のストライプのインデックスと記録情報のキャッシュアドレスを格納する。これにより、ステップＳ４０２においてキャッシュに第１ストライプが存在するか否かを判断する方法は、以下のようになる。
【００３６】
第１ストライプのインデックスおよび物理チャンネル数Ｎに対してハッシュ演算を行い、ハッシュ演算結果をバケットＩＤ（識別子）とし、メモリにおいて当該バケットＩＤでマークされるＨａｓｈバケットを検索する。例えば、第１ストライプのインデックスとＮとの和に対してＣＲＣ３２（Ｃｙｃｌｉｃ Ｒｅｄｕｎｄａｎｃｙ Ｃｈｅｃｋ、巡回冗長検査）演算を行ってから、演算結果の下位１８ビットをバケットＩＤとする。
【００３７】
検索されたＨａｓｈバケットに第１ストライプのインデックスが存在するか否かを判断し、存在すれば、キャッシュに第１ストライプが存在すると特定し、当該Ｈａｓｈバケットから第１ストライプの記録情報キャッシュアドレスを取得してもよい。そうでなければ、キャッシュに第１ストライプが存在しないと特定する。
【００３８】
ステップＳ４０３では、キャッシュに第１セクタのデータが格納されたか否かを判断し、そうであれば、ステップＳ４０４を実行し、そうでなければ、ステップＳ４０５を実行する。
【００３９】
第１ストライプの記録情報キャッシュアドレスが取得された後、キャッシュにおいて第１ストライプの記録情報を検索し、当該取得された記録情報に基づいて、キャッシュに第１セクタのデータが格納されたか否かを判断してもよい。ストライプエージング時にキャッシュに格納された当該ストライプのデータをフラッシュメモリに書き込み可能であり、当該ストライプにおけるあるセクタのデータを変更する必要があるときにキャッシュへ当該セクタの変更後の新データを書き込む。したがって、キャッシュには、これらのセクタの変更後のデータ（最新データとも称する）が格納され、フラッシュメモリには、当該セクタの変更前のデータ（旧データとも称する）が格納される。よって、セクタのデータがキャッシュに格納されたかそれともフラッシュメモリに格納されたかを容易に判断するために、当該ストライプの記録情報には、対応する第１識別子と第２識別子をそれぞれのセクタへ設置してもよい。第１識別子と第２識別子は、連携してキャッシュおよびフラッシュメモリにおけるデータ記憶状況を表してもよい。例えば、セクタの第１識別子が有効、第２識別子が有効であるときに、キャッシュとフラッシュメモリとのいずれにも当該セクタのデータが記憶されたことは、表せる。しかし、キャッシュに記憶されたのが当該セクタの最新データであり、フラッシュメモリに記憶されたのが当該セクタの旧データである可能性はある。セクタの第１識別子が有効、第２識別子が無効であるときに、キャッシュに当該セクタのデータが記憶されたが、フラッシュメモリに当該セクタのデータが存在しないことは、表せる。セクタの第１識別子が無効、第２識別子が有効であるときに、キャッシュに当該セクタのデータが存在せず、フラッシュメモリに当該セクタのデータが記憶されたことは、表せる。セクタの第１識別子が無効、第２識別子が無効であるときに、キャッシュとフラッシュメモリとの何れにも当該セクタのデータが存在しないことは、表せる。
【００４０】
その中、ストライプにおけるあるセクタのデータがキャッシュに記憶されたときに、当該ストライプの記録情報には、当該セクタのデータがキャッシュに位置するキャッシュアドレスを記録する。
【００４１】
このように、ステップＳ４０３において第１セクタの第１識別子が有効であるか否かを判断してもよい。そうであれば、キャッシュに第１セクタのデータが格納されたと特定する。
【００４２】
ステップＳ４０４では、キャッシュに格納された第１セクタのデータを書き込み待ちデータとして更新する。その際、当該書き込み待ちデータは、第１セクタの最新データとなる。
【００４３】
例えば、ステップＳ４０４において、キャッシュに格納された第１セクタのデータを書き込み待ちデータに更新する方式は、以下のようになってもよい。つまり、書き込み待ちデータをキャッシュに書き込み、第１ストライプの記録情報に記録された第１セクタのデータのキャッシュアドレスを、当該書き込み待ちデータがキャッシュに書き込まれたキャッシュアドレスとして更新し、第１セクタに対応する第１識別子を有効として維持する。また、後で空きアドレスに他のデータが書き込まれるように、第１セクタの更新前のデータのキャッシュアドレスを当該空きアドレスとして記録してもよい。
【００４４】
例えば、キャッシュに格納された更新前データをＤａｄａ Ａ、Ｄａｄａ ＡのキャッシュアドレスをＡｄｄｒ Ａ、当該書き込み待ちデータをＤａｄａ Ｂと仮定すれば、ステップＳ４０４において、キャッシュに格納された第１セクタのデータＤａｄａ Ａを書き込み待ちデータＤａｄａ Ｂに更新する方式は、下記のようになってもよい。つまり、Ｄａｄａ Ｂをキャッシュに書き込み、キャッシュアドレスがＡｄｄｒ Ｂであり、第１ストライプの記録情報に記録された第１セクタのデータのキャッシュアドレスをＡｄｄｒ ＡからＡｄｄｒ Ｂに更新し、また、第１セクタの更新前データＤａｄａ ＡのキャッシュアドレスＡｄｄｒ Ａを空きアドレスとして記録してもよい。このように、引き続きＡｄｄｒ Ａに他のデータを書き込むことは容易になる。
【００４５】
第１ストライプにおける第１セクタのデータが頻繁に変更されると、上記ステップＳ４０１からステップＳ４０４を繰り返し実行する。ステップＳ４０４が実行されるたびに、キャッシュに格納された第１セクタのデータを更新する。更新前データは、その際、無効データとして見なされ、後で他のデータで上書きされることを待機する。第１ストライプエージングに至るとき、キャッシュに格納された第１ストライプのデータをフラッシュメモリに書き込む。具体的な方法は、図５を参照すればよく、ここで繰り返し説明しない。
【００４６】
ステップＳ４０５では、書き込み待ちデータを第１セクタのデータとしてキャッシュに書き込んでもよい。また、第１ストライプの記録情報に第１セクタのデータのキャッシュアドレスを当該書き込み待ちデータのキャッシュアドレスとして記録し、第１セクタの第１識別子を有効にセットしてもよい。
【００４７】
ステップＳ４０６では、第１ストライプを作成し、書き込み待ちデータを第１セクタのデータとしてキャッシュに書き込んでもよい。また、第１ストライプの記録情報に第１セクタのデータのキャッシュアドレスを当該書き込み待ちデータのキャッシュアドレスとして記録し、第１セクタの第１識別子を有効にセットしてもよい。
【００４８】
例えば、ストライプを作成する手順は、下記のようになってもよい。当該ストライプに対応するＨａｓｈバケットに、当該ストライプのインデックスと記録情報のキャッシュアドレスを記録し、当該ストライプにおける、それぞれのセクタに対応する論理チャンネルを算出して当該ストライプの記録情報に記録し、当該ストライプの記録情報にそれぞれのセクタの第１識別子と第２識別子とをともに無効にセットする。
【００４９】
数式（３）に応じてチェックデータセクタに対応する論理チャンネルの識別子ｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄを算出してもよい。
【００５０】
【数４】
0006823734.tif 000006
【００５１】
数式（４）に応じてユーザデータセクタに対応する論理チャンネルの識別子ｄ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄを算出してもよい。
【００５２】
【数５】
0006823734.tif 000007
【００５３】
ｓｅｃｔｏｒ＿ｉｄは、セクタの識別子を示し、ｓｔｒｉｐ＿ｉｎｄｅｘは、セクタの所在するストライプのインデックスを示し、％は、モジュロ演算子を示す。
【００５４】
ＳＳＤにおける論理チャンネルの総数が物理チャンネルの総数と同じであってもよい。初期時に、論理チャンネルと物理チャンネルとが１対１の対応関係を有してもよい。例えば、初期時に、論理チャンネル０が物理チャンネル０に対応し、論理チャンネル１が物理チャンネル１に対応し、それを持って類推してもよい。その後、ＳＳＤにおける物理チャンネルが失効する可能性がある。例えば、物理チャンネル自身に障害が発生し、あるいは当該チャンネルにマウントされたフラッシュメモリに障害が発生する。その際、失効した物理チャンネルに元々対応する論理チャンネルは、他の正常の物理チャンネルとは対応関係を確立してもよい。論理チャンネルと物理チャンネルとの間の対応関係は、チャンネルマッピング表に保存可能である。
【００５５】
数式（３）から分かるように、異なるストライプにおいて、チェックデータセクタに対応する論理チャンネルが全ての論理チャンネルに均一に分散されてもよい。このように、異なるストライプにおけるチェックデータが均一に全ての物理チャンネルにマウントされたフラッシュメモリに分散される。これにより、全てのチェックデータが同一物理チャンネルにマウントされたフラッシュメモリに格納されることによって当該フラッシュメモリの使用寿命へ影響を与えてしまうことは、有効に回避できる。
【００５６】
数式（３）と数式（４）から分かるように、同一ストライプにおけるそれぞれのセクタに対応する論理チャンネルも、全ての論理チャンネルに均一に分散されてもよい。これにより、ＳＳＤの並行アクセス能力が向上する。
【００５７】
図４に示す方法によると、ＳＳＤは、ホストから送信されたデータ書き込み命令を受信した後、先に書き込み待ちデータをキャッシュに格納してもよい。このように、変更頻度の高いホットスポットデータについて、単にキャッシュにおけるデータを変更すればよく、フラッシュメモリに対する消去・書き込みを繰り返す必要がなくなり、これによりＳＳＤの書き込み拡大倍率が低減される。
【００５８】
ストライプエージング
また、キャッシュに何れか１つのストライプを作成した後、当該ストライプのインデックスをエージング連結リストに追加する。エージング連結リストにおけるそれぞれのストライプは、対応する優先度を有する。ストライプに対応する優先度は、キャッシュの記憶空間の大きさ、データ読み取り／書き込み命令数、ストライプ使用頻度、ストライプ直近使用時間、ストライプ有効データ量等のパラメータのうちの１つまたは複数の組み合わせに関連する。例えば、使用頻度が高いストライプの優先度は、低くされる。このように、よく変更される必要のあるデータをできるだけキャッシュに格納することが確保され、フラッシュメモリに対する消去・書き込み回数の低減も容易になる。例えば、エージング連結リストから１つの最も高い優先度のストライプを周期的に選択してエージングを行う。
【００５９】
あるストライプに対してエージングを行う必要が生じるとき、即ち、キャッシュにおける当該ストライプのデータをフラッシュメモリへ書き込むとき、ＳＳＤで実行されるステップは、図５に示され、以下のステップを含む。
【００６０】
ステップＳ５０１では、第２ストライプにおけるユーザデータセクタごとに、当該セクタのデータが当該セクタに対応するフラッシュメモリに記憶された場合に、当該セクタのデータをフラッシュメモリから読み取ってキャッシュに書き込む。
【００６１】
例えば、第２ストライプにおけるユーザデータセクタごとに、当該セクタの第１識別子が無効、第２識別子が有効である場合は、当該セクタのデータがフラッシュメモリに記憶されたことを意味する。当該セクタに対応するＬＢＡを特定し、アドレス変換表から当該ＬＢＡに対応するＰＢＡ（Ｐｈｙｓｉｃａｌ Ｂｌｏｃｋ Ａｄｄｒｅｓｓ、物理ブロックアドレス）を検索し、検索されたＰＢＡに基づいて当該セクタのデータをフラッシュメモリから読み取ってキャッシュに書き込んでもよい。また、更に、当該ユーザデータセクタの第１識別子を有効にセットし、第２ストライプの記録情報に当該ユーザデータセクタのデータのキャッシュアドレスを記録してもよい。ただし、セクタに対応するＬＢＡを特定する方式は、下記のようになってもよい。つまり、ストライプのインデックスとセクタの識別子が既知である場合に、数式（１）と数式（２）に応じて当該セクタに対応するＬＢＡを算出する。
【００６２】
このように、ステップＳ５０１の実行が完成された後、第２ストライプにおけるそれぞれのユーザデータセクタのデータは、いずれもキャッシュに格納される。
【００６３】
ステップＳ５０２では、キャッシュに格納された第２ストライプの全てのユーザデータセクタのデータに対してチェック演算を行ってチェックデータを取得し、当該チェックデータを第２ストライプのチェックデータセクタのデータとしてキャッシュに書き込む。その際、第２ストライプにおけるそれぞれのセクタ（ユーザデータセクタとチェックデータセクタを含む）のデータは、何れもキャッシュに格納される。
【００６４】
これで、ストライプにおけるデータをフラッシュメモリへ書き込む際、ストライプにおけるユーザデータに基づいてチェックデータを算出してもよい。
【００６５】
ステップＳ５０３では、キャッシュに格納された第２ストライプのそれぞれのセクタのデータをフラッシュメモリに書き込む。具体的に、第２ストライプにおけるそれぞれのセクタについて、当該セクタに対応する論理チャンネルを特定し、当該論理チャンネルに対応する物理チャンネルを検索し、当該セクタのデータをキャッシュから読み取って当該物理チャンネルにマウントされたフラッシュメモリに書き込み、書き込みの完成後、ＬＢＡとＰＢＡとの対応関係をアドレス変換表に記録する。ＬＢＡは、ストライプのインデックスとセクタの識別子が既知である場合に、数式（１）と数式（２）に応じて取得可能であり、ＰＢＡは、データ書き込みの完成後で分かることができる。例えば、ＰＢＡは、フラッシュメモリのブロック、ページにおけるデータのシフト位置を認識できる。
【００６６】
キャッシュに格納された第２ストライプのそれぞれのセクタのデータをフラッシュメモリに書き込んだ後、キャッシュにおける第２ストライプを削除してもよい。例えば、第２ストライプを削除する方法は、具体的に下記のようになってもよい。つまり、Ｈａｓｈバケットに記録された第２ストライプのインデックスと記録情報のキャッシュアドレスを削除し、第２ストライプの記録情報を削除する。また、更に、後で他のデータを書き込むことが容易になるように、これらのデータのキャッシュアドレスを空きアドレスとして記録してもよい。
【００６７】
図５に示す方法によると、あるストライプのエージング時に、当該ストライプにおけるユーザデータとチェックデータとをともにフラッシュメモリに書き込む。
【００６８】
データ読取
図６に示すように、ホストから送信されたデータ読み取り命令が受信された後、ＳＳＤで実行される読取操作は、下記のようになる。
【００６９】
ステップＳ６０１では、ホストから送信されたデータ読み取り命令を受信した後、当該データ読み取り命令に付加される読み取り待ちデータのＬＢＡに対応する第３ストライプと第３セクタとを特定する。
【００７０】
ステップＳ６０１では、数式（１）と数式（２）に応じてＬＢＡに対応する第３ストライプと第３セクタとを特定してもよい。
【００７１】
ステップＳ６０２では、キャッシュに第３ストライプが存在するか否かを判断し、存在すれば、ステップＳ６０３を実行し、そうでなければ、ステップＳ６０６を実行する。
【００７２】
例えば、メモリに複数のＨａｓｈバケットを予め作成してもよく、それぞれのＨａｓｈバケットが複数のストライプのインデックスと記録情報のキャッシュアドレスを格納する。このように、ステップＳ６０２においてキャッシュに第３ストライプが存在するか否かを判断する具体的な方法は、下記のようになる。
【００７３】
第３ストライプのインデックスと物理チャンネル数Ｎとに対してハッシュ演算を行い、ハッシュ演算結果をバケットＩＤとし、メモリにおいて当該バケットＩＤでマークされるＨａｓｈバケットを検索する。例えば、第３ストライプのインデックスとＮとの和に対してＣＲＣ３２演算を行い、その後演算結果の下位１８ビットをバケットＩＤとする。
【００７４】
検索されたＨａｓｈバケットに第３ストライプのインデックスが存在するか否かを判断し、存在すれば、キャッシュに第３ストライプが存在すると特定し、当該Ｈａｓｈバケットから第３ストライプの記録情報のキャッシュアドレスを取得してもよい。そうでなければ、キャッシュに第３ストライプが存在しないと特定する。
【００７５】
ステップＳ６０３では、第３セクタのデータがキャッシュに記憶されたか否かを判断する。そうであれば、ステップＳ６０４を実行し、そうでなければ、第３セクタのデータがフラッシュメモリに格納されたことを意味するため、ステップＳ６０６を実行する。
【００７６】
第３ストライプの記録情報のキャッシュアドレスが取得された後、キャッシュにおいて第３ストライプの記録情報を検索し、当該第３ストライプの記録情報に基づいて第３セクタのデータがキャッシュに記憶されたか否かを判断してもよい。例えば、当該第３ストライプの記録情報に記録された第３セクタの第１識別子が有効である場合に、第３セクタのデータがキャッシュに記憶されたと判断する。そうでなければ、第３セクタのデータがフラッシュメモリに記憶されたと判断する。しかし、第３セクタのデータがフラッシュメモリに記憶されたか否かは、第３ストライプの記録情報に記録された第３セクタの第２識別子に基づいて判断可能である。例えば、第３ストライプの記録情報に記録された第３セクタの第２識別子が有効である場合に、第３セクタのデータがフラッシュメモリに記憶されたと判断する。そうでなければ、フラッシュメモリに第３セクタのデータが記憶されていないと判断する。このような場合に、読み取り障害が発生する恐れがあり、ホストへ報告する必要がある可能性は存在する。
【００７７】
ステップＳ６０４では、キャッシュから第３セクタのデータを読み取った後、ステップＳ６０５を実行する。
【００７８】
例えば、第３ストライプの記録情報から第３セクタのデータのキャッシュアドレスを取得する。このように、当該キャッシュアドレスに基づいて第３セクタのデータを読み取る。
【００７９】
ステップＳ６０５では、読み出されたデータをホストへ返信する。
ステップＳ６０６では、フラッシュメモリから第３セクタのデータを読み取り、その後、ステップＳ６０５を実行する。
【００８０】
フラッシュメモリからデータを読み取る方式は、下記のようになってもよい。つまり、データのＬＢＡに基づいて、アドレス変換表から当該ＬＢＡに対応するＰＢＡを検索し、検索されたＰＢＡに基づいてフラッシュメモリからデータを読み取る。
【００８１】
１つの例示によると、ステップＳ６０６においてフラッシュメモリから第３セクタのデータを読み取ることに失敗した場合に、第３ストライプのうち、第３セクタ以外の他のセクタのデータをフラッシュメモリから読み取り、読み出された他のセクタのデータを用いて第３セクタのデータを回復してホストへ返信する。
【００８２】
図６に示す方法によると、データの読み取り時、キャッシュに読み取り待ちデータが存在する場合に、キャッシュから当該データを読み取り、キャッシュに読み取り待ちデータが存在しない場合に、フラッシュメモリから当該データを読み取ってもよい。このように、キャッシュからデータを読み取る速度がより高速であるため、より高速のデータ読み書き速度をユーザへ供給可能である。
【００８３】
物理チャンネル失効時のデータ回復および移転
ＳＳＤの信頼性が向上されるように、ある物理チャンネルが失効したときに、サービスを中断せずに、失効した物理チャンネルにマウントされたフラッシュメモリに記憶されたデータを回復し、且つ、失効前のストライプ（以下、旧ストライプとも称する）におけるデータを新ストライプに移転する必要はある。データ回復および移転が完成された旧ストライプを特定するために、旧ストライプにおいてデータ回復および移転を完成した後、当該旧ストライプのインデックスをストライプ回復（ｓｔｒｉｐ_ｒｅｃｏｖｅｒ）表に記録してもよい。
【００８４】
例えば、図７に示すように、ある物理チャンネルの失効が検出されたときに、キャッシュにおけるそれぞれの旧ストライプに対して以下のステップを実行する。
【００８５】
ステップＳ７０１では、当該旧ストライプのうちの失効セクタ以外の他のセクタのデータをフラッシュメモリから読み取り、読み出されたデータ（ユーザデータとチェックデータを含む）を用いて失効セクタのデータを回復し、回復されたデータを失効セクタのデータとしてキャッシュに書き込む。
【００８６】
旧ストライプにおけるセクタの数が失効前の物理チャンネル数に等しい。ある物理チャンネルが失効したときに、当該物理チャンネルにバインディングされた論理チャンネルに対応するセクタも相応に失効する。その際、ＳＳＤにおける有効物理チャンネルの数に基づいて新たなストライプとセクタを再特定してもよい。
【００８７】
仮に、失効前、ＳＳＤにおける物理チャンネル数をＮとすれば、その際のストライプが旧ストライプと呼ばれ、それぞれの旧ストライプのＮ個のセクタは、Ｎ１個のユーザデータセクタとＮ２個のチェックデータセクタを含む。
【００８８】
ある物理チャンネルが失効した後、ＳＳＤにおける物理チャンネル数がＮ−１であり、その際のストライプが新ストライプと呼ばれ、それぞれの新ストライプのＮ−１個のセクタは、Ｎ１−１個のユーザデータセクタと、Ｎ２個のチェックデータセクタを含んでもよい。その際、読み書きデータ操作を実行するときに、Ｎ１−１に準じてＬＢＡに対応する新ストライプと新セクタとを特定してもよい。
【００８９】
ステップＳ７０２では、当該旧ストライプにおけるそれぞれの旧ユーザデータセクタについて、当該旧ユーザデータセクタのＬＢＡに基づいて当該ＬＢＡに対応する新ストライプと新ユーザデータセクタとを特定してもよい。当該旧ユーザデータセクタのデータがキャッシュに記憶された場合に、当該旧ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転してもよい。当該旧ユーザデータセクタのデータがフラッシュメモリに記憶された場合に、当該ユーザデータセクタのデータをフラッシュメモリから読み取ってキャッシュに書き込み、当該旧ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転してもよい。
【００９０】
それから、旧ストライプのデータ移転の完成後、当該旧ストライプを削除し、当該旧ストライプのインデックスをｓｔｒｉｐ_ｒｅｃｏｖｅｒ表に記録してもよい。
【００９１】
例えば、数式（１）と数式（２）に応じて、ＬＢＡに対応する新ストライプと新ユーザデータセクタを特定する。
【００９２】
当該旧ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転する方式は、下記のようになってもよい。つまり、当該新ストライプの記録情報に、当該新ユーザデータセクタのデータのキャッシュアドレスを当該旧ユーザデータセクタのデータのキャッシュアドレスとして記録する。
【００９３】
明らかに、ステップＳ７０２では、当該旧ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転する前に、キャッシュに当該新ストライプが存在するか否かを判断する必要もある。存在しない場合に、当該新ストライプを先に作成し、その後、当該旧ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転する必要がある。
【００９４】
失効前よりも、失効後の物理チャンネル数が減っている。新ストライプにおけるセクタ数は、旧ストライプにおけるセクタ数よりも少なくなる。したがって、１つの新ストライプにおけるユーザデータは、１つまたは２つの旧ストライプからのものである。この１つまたは２つの旧ストライプは、当該新ストライプに関連する旧ストライプと呼称されてもよい。
【００９５】
実際の実施過程に、何れかの新ストライプが作成された後、当該新ストライプをエージング連結リストに追加してもよい。データ回復および移転過程において、エージング連結リストに旧ストライプも新ストライプも存在する。旧ストライプと新ストライプを容易に区別するために、エージング連結リストにそれぞれのストライプに対応するＳＳＤモードをマークしてもよい。旧ストライプに対応するのが失効前のＳＳＤモードであり、例えば、失効前のＳＳＤモードがＮ１＋Ｎ２モードである。新ストライプに対応するのが失効後のＳＳＤモードであり、例えば、失効後のＳＳＤモードが（Ｎ１−１）＋Ｎ２モードである。所定の周期に達するとき、エージング連結リストから優先度の最も高い新ストライプを選択してエージングを行い、旧ストライプについてエージングを行う必要がない。なお、ある新ストライプに対してエージングを行う必要があるとき、当該新ストライプに関連する旧ストライプがデータ回復および移転を完成したか否かを先に判断する必要がある。データ回復および移転が完成されてから初めて当該新ストライプに対してエージングを行い、当該新ストライプのデータをフラッシュメモリに書き込む。データ回復および移転が完成されていない場合に、一旦当該新ストライプに対してエージングを行わず、関連する旧ストライプに対してデータ回復を行った後、旧ストライプのデータを新ストライプに移転する。これにより、旧ストライプのデータが破壊されてデータを回復できないことは、回避可能である。
【００９６】
ただし、ある新ストライプに関連する旧ストライプを特定する方法は、下記のようになってもよい。つまり、数式（１）に応じて当該新ストライプのインデックスが既知である場合に、当該新ストライプに対応するＬＢＡ範囲を特定し、当該ＬＢＡ範囲中の最小値について、数式（１）に応じて対応する第１旧ストライプのインデックスを特定し、当該ＬＢＡ範囲中の最大値について、数式（１）に応じて対応する第２旧ストライプのインデックスを特定し、第１旧ストライプのインデックスと第２旧ストライプのインデックスとが同じである場合に、当該新ストライプに関連する旧ストライプが１つしかなく、即ち、第１旧ストライプ（つまり、第２旧ストライプ）であると特定し、第１旧ストライプのインデックスと第２旧ストライプのインデックスとが異なり、且つ両者の差分が１である場合に、当該新ストライプに関連する旧ストライプが２つあり、それぞれ第１旧ストライプと第２旧ストライプであると特定する。
【００９７】
データ回復および移転過程に、ＳＳＤがホストから送信されたデータ読み取り命令を受信すると、当該データ読み取り命令に付加される読み取り待ちデータのＬＢＡに対応する新ストライプを特定する。キャッシュに当該新ストライプが存在しない場合に、以下のステップを実行する。
【００９８】
当該ＬＢＡに対応する旧ストライプと旧セクタとを特定する。
キャッシュに当該旧ストライプが存在する場合に、当該旧セクタに対応する論理チャンネルにバインディングされた物理チャンネルが正常であるとき、キャッシュまたはメモリから当該旧セクタのデータを読み取ってホストに返信し、当該旧セクタに対応する論理チャンネルにバインディングされた物理チャンネルが失効したとき、当該旧ストライプのデータに対してデータ回復および移転を行う。
【００９９】
キャッシュに当該旧ストライプが存在しない場合に、当該旧セクタに対応する論理チャンネルにバインディングされた物理チャンネルが正常であるとき、アドレス変換表から当該ＬＢＡに対応するＰＢＡを検索し、当該ＰＢＡに基づいてフラッシュメモリからデータを読み取ってホストに返信し、当該旧セクタに対応する論理チャンネルにバインディングされた物理チャンネルが失効したとき、当該旧ストライプのデータに対してデータ回復および移転を行う。
【０１００】
上記データ回復および移転方法により、物理チャンネルが失効したときに、失効した物理チャンネルにマウントされたフラッシュメモリに記憶されたデータに対して回復を行い、失効前のストライプにおけるデータを新ストライプへ移転することができるため、サービスの継続性が保証され、ＳＳＤのフォールトトレラント能力が向上し、サービスの高可用性（ＨＡ）が向上し、且つ、データ回復および移転過程に、ＳＳＤがデータ読み書きを正常に実行可能であり、新旧ストライプが並行に存在可能である。
【０１０１】
上記ＳＳＤアクセス方法の実施例に対応し、本発明は、ＳＳＤアクセス装置の実施例を更に提供する。
【０１０２】
本発明のＳＳＤアクセス装置の実施例は、ＳＳＤに適用可能である。ハードウェア実装から言えば、図８は、本発明のＳＳＤアクセス装置の所在するＳＳＤの１種のハードウェア構造模式図である。当該ＳＳＤは、コントローラ１０、３つ以上の物理チャンネル２０、各物理チャンネル２０にマウントされたフラッシュメモリ３０、バス４０、および機器読み取り可能な記憶媒体５０を備える。ただし、機器読み取り可能な記憶媒体５０から１つの記憶空間をキャッシュ７０として区画してもよいが、これに限定されず、キャッシュ７０は、他の実施形態もあり得る。コントローラ１０は、機器読み取り可能な記憶媒体５０における機器の実行可能な指令を読み取ることにより、上述したＳＳＤアクセス方法を実行可能である。コントローラ１０は、例えば、ＣＰＵ等のプロセッサであってもよい。実の実施中に、当該ＳＳＤの実際の機能に基づき、他のハードウェアを備えてもよいが、ここで繰り返し説明しない。
【０１０３】
本文における機器読み取り可能な記憶媒体５０は、如何なる電気的なもの、磁気的なもの、光学的なものまたは他の物理的記憶装置であってもよく、情報（例えば、実行可能な指令、データ等）を含むか記憶可能である。例えば、機器読み取り可能な記憶媒体は、揮発性メモリ或いは不揮発性メモリ、例えば、ＲＡＭ（Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ、ランダムアクセスメモリ）、フラッシュメモリ、記憶ドライバ（例えば、ハードディスクドライバ）、如何なるタイプの記憶ディスク、または上記１種或いは複数種の組み合わせであってもよい。
【０１０４】
本発明のＳＳＤアクセス装置６０の実施例は、ソフトウェアにて実現されてもよく、ハードウェアまたはソフト・ハードウェアの組み合わせの方式にて実現されてもよい。ソフトウェアによる実現を例とすると、１つの論理意味での装置は、所在するＳＳＤのコントローラ１０が機器読み取り可能な記憶媒体５０における機器の実行可能な指令を読み取って実行することで形成されるものである。
【０１０５】
図９を参照すると、本発明の実施例のＳＳＤアクセス装置６０は、受信手段６０１および読み書き手段６０２を備える。
【０１０６】
受信手段６０１は、ＳＳＤに対するデータ書き込み命令を受信し、データ書き込み命令に付加される書き込み待ちデータのＬＢＡに対応する第１ストライプと第１セクタとを特定する。ＳＳＤがＮ個の物理チャンネルとキャッシュとを含み、それぞれの物理チャンネルにメモリがマウントされ、キャッシュが複数のストライプを含み、それぞれのストライプがＮ個のセクタを含み、Ｎが３以上の整数である。
【０１０７】
読み書き手段６０２は、キャッシュに第１ストライプが存在する場合に、書き込み待ちデータを第１セクタのデータとしてキャッシュに書き込み、キャッシュに第１ストライプが存在しない場合に、第１ストライプを作成し、書き込み待ちデータを第１セクタのデータとしてキャッシュに書き込む。
【０１０８】
受信手段６０１は、具体的に、以下の数式に応じてＬＢＡに対応するストライプのインデックスｓｔｒｉｐ＿ｉｎｄｅｘとセクタ識別子ｓｅｃｔｏｒ＿ｉｄとを特定する。
【０１０９】
【数６】
0006823734.tif 000008
【０１１０】
Ｎ１は、１つのストライプにおける、ユーザデータを格納するためのセクタの数を示し、Ｎ１は、１より大きくＮより小さい整数であり、
【０１１１】
【数７】
0006823734.tif 000009
【０１１２】
は、小数点以下の切り捨て演算子を示し、％は、モジュロ演算子を示す。
図１０に示すように、上記ＳＳＤアクセス装置６０は、算出手段６０３を更に備える。
【０１１３】
読み書き手段６０２は、第２ストライプにおけるユーザデータセクタごとに、当該セクタのデータがフラッシュメモリに記憶された場合に、当該セクタのデータをフラッシュメモリから読み取ってキャッシュに書き込む。
【０１１４】
算出手段６０３は、キャッシュに格納された第２ストライプの全てのユーザデータセクタのデータに対してチェック演算を行い、第２ストライプのチェックデータセクタのチェックデータを取得する。
【０１１５】
読み書き手段６０２は、算出手段６０３で算出された第２ストライプのチェックデータセクタのチェックデータをキャッシュに書き込むとともに、キャッシュに格納された第２ストライプの全てのセクタのデータをフラッシュメモリに書き込む。
【０１１６】
読み書き手段６０２は、更に、以下の方式でキャッシュに格納された第２ストライプのセクタのデータをフラッシュメモリに書き込む。
【０１１７】
つまり、当該セクタに対応する論理チャンネルを特定し、当該論理チャンネルに対応する物理チャンネルを検索し、キャッシュに格納された当該セクタのデータを当該物理チャンネルにマウントされたフラッシュメモリに書き込む。
【０１１８】
当該セクタに対応する論理チャンネルを特定することは、
当該セクタがユーザデータを格納するためのユーザデータセクタであるときに、当該ユーザデータセクタに対応する論理チャンネルの識別子ｄ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄを
【０１１９】
【数８】
0006823734.tif 000010
【０１２０】
で特定することと、
当該セクタがチェックデータを格納するためのチェックデータセクタであるときに、当該チェックデータセクタに対応する論理チャンネルの識別子ｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄをｐ＿ｌｏｇｉｃ＿ｃｈａｎｎｅｌ＿ｉｄ＝ｓｔｒｉｐ＿ｉｎｄｅｘ％Ｎで特定することとを含む。
【０１２１】
ｓｅｃｔｏｒ＿ｉｄは、セクタ識別子を示し、ｓｔｒｉｐ＿ｉｎｄｅｘは、セクタの所在するストライプのインデックスを示し、％は、モジュロ演算子を示す。
【０１２２】
受信手段６０１は、更に、ＳＳＤに対するデータ読み取り命令を受信し、データ読み取り命令に付加される読み取り待ちデータのＬＢＡに対応する第３ストライプと第３セクタとを特定する。
【０１２３】
読み書き手段６０２は、更に、キャッシュが第３ストライプに存在し、且つ第３セクタのデータがキャッシュに記憶された場合に、キャッシュから第３セクタのデータを読み取り待ちデータとして読み取り、キャッシュに第３ストライプが存在し、且つ第３ストライプにおける第３セクタのデータがフラッシュメモリに格納した場合に、または、キャッシュに第３ストライプが存在しない場合に、第３セクタに対応するフラッシュメモリから第３セクタのデータを読み取り待ちデータとして読み取る。
【０１２４】
図１０に示すように、上記ＳＳＤアクセス装置６０は、以下の手段を更に備える。
検出手段６０４は、物理チャンネルの状態を検出する。
【０１２５】
回復移転手段６０５は、Ｎ個の物理チャンネルの１つが失効したと検出手段６０４によって検出されたときに、キャッシュにおける旧ストライプに対して以下のステップを実行する。
【０１２６】
当該旧ストライプのうちの失効セクタ以外の他のセクタのデータをフラッシュメモリから読み取る。ただし、当該失効セクタは、前記失効した物理チャンネルにバインディングされた論理チャンネルに対応するセクタである。
【０１２７】
読み出されたデータを用いて失効セクタのデータを回復する。
回復されたデータを失効セクタのデータとしてキャッシュに書き込む。
【０１２８】
当該ストライプにおけるそれぞれのユーザデータセクタのＬＢＡに対して当該ＬＢＡに対応する新ストライプと新ユーザデータセクタとを特定する。ただし、新ストライプにおけるセクタ数は、ＳＳＤにおける有効物理チャンネル数に等しい。
【０１２９】
当該ユーザデータセクタのデータがキャッシュに記憶された場合に、当該ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転する。
【０１３０】
当該ユーザデータセクタのデータがフラッシュメモリに記憶された場合に、当該ユーザデータセクタのデータをフラッシュメモリから読み取ってキャッシュに書き込み、当該ユーザデータセクタのデータを当該新ストライプにおける当該新ユーザデータセクタに移転する。
【０１３１】
上記装置における各手段の機能及び作用の実現手順は、上記方法の対応ステップの実現手順を詳細に参照すればよいため、ここで繰り返し説明しない。
【０１３２】
装置実施例は、方法実施例に基本的に対応するため、その関連箇所が方法実施例部分の説明を参照すればよい。上述した装置実施例は、単に例示であり、その中、分離部品として説明される手段が物理的に分離されるものであってもよくでなくてもよい。また、手段として表示される部品は、物理手段であってもでなくてもよい。更に、それらの手段は、１箇所に位置してもよく、複数のネットワークセルに分散してもよい。実際の需要に応じてその中の一部または全部のモジュールを選択して本実施例の目的を果たすことが可能である。当業者は、進歩性に値する労働をせずに、理解して実施可能である。
【０１３３】
説明すべきことは、本文に、第１と第２等のような関係用語は、単に１つの実体や操作を別の実体や操作と区分させるために用いられ、これらの実体や操作の間になんらかの実際的な関係や順序が存在するとは必ずしも要求やヒントすることではない。用語「含む」、「備える」またはほかの何れかの同義語が非排他的含有をカバーすることを狙う。このように、一シリーズの要素を有する手順、方法、物品または機器は、それらの要素を有するだけではなく、明確に挙げられていない他の要素も有し、またはこのような手順、方法、物品または機器に固有の要素も有する。更なる制限がない限り、語句「１つの…を含む」で限定される要素は、前記要素を有する手順、方法、物品または機器に他の同じ要素を更に有することをあえて排除しない。
【０１３４】
以上では、本発明の実施例に供される方法と装置を詳細に説明した。本文では、具体的な例を用いて本発明の原理及び実施形態を説明したが、以上の実施例の説明が単に本発明の方法およびその要旨を容易に理解するために用いられる。それとともに、当業者であれば、本発明の思想に基づいて具体的な実施形態及び応用範囲を変更可能である。したがって、本明細書の内容は、本発明に対する制限として理解されるべきではない。
【図１】
0006823734.tif 000017
【図２】
0006823734.tif 000018
【図３】
0006823734.tif 000019
【図４】
0006823734.tif 000020
【図５】
0006823734.tif 000021
【図６】
0006823734.tif 000022
【図７】
0006823734.tif 000023
【図８】
0006823734.tif 000024
【図９】
0006823734.tif 000025
【図１０】
0006823734.tif 000026