(57)【特許請求の範囲】
【請求項１】
複数の半導体記憶ドライブが接続され、情報処理装置から論理アドレスが指定されて書き込みが要求されたデータを前記半導体記憶ドライブへ書き込む半導体記憶制御装置であって、
前記データは、１つ以上の所定の単位の第１データを有し、
前記論理アドレスと、前記半導体記憶ドライブにおいて前記データが各々書き込まれる位置を示す物理アドレスと、所定の数の前記第１データ、および、前記所定の数の前記第１データを用いて計算され当該所定の数の前記第１データの誤りを訂正するために使われる冗長情報から構成される誤り訂正符号に対応する各前記半導体記憶ドライブの記憶領域の組を識別する識別情報と、の対応関係を示す第１テーブルを記憶する第１テーブル記憶領域を、前記半導体記憶ドライブの諸元の情報を用いて構築する構築部と、
前記論理アドレスが指定された前記第１データの書き込みを要求する書き込みコマンドを一時的に記憶するデータバッファと、
前記データバッファに記憶された前記第１データが前記所定の数に到達した場合、前記所定の数の前記第１データを用いて、前記冗長情報を算出する冗長情報算出部と、
前記データバッファに記憶された前記第１データが前記所定の数に到達した場合、書き込み対象となる前記組を識別する前記識別情報を決定する決定部と、
前記データバッファに記憶された前記第１データが前記所定の数に到達した場合、前記決定部により決定された前記識別情報により識別される前記組に対して、前記データバッファに記憶された前記所定の数の前記第１データおよび前記冗長情報算出部により算出された前記冗長情報から構成される前記誤り訂正符号の書き込みを行う書き込み制御部と、
前記書き込み制御部による書き込みが行われる前記所定の数の前記第１データごとに、前記論理アドレスと、前記書き込み制御部によって当該第１データが書き込まれた何れかの前記半導体記憶ドライブの前記物理アドレスと、前記決定部により決定された前記識別情報とを対応付けて得られる前記第１テーブルを前記第１テーブル記憶領域に記憶させるテーブル制御部と、
前記半導体記憶ドライブから前記データ及び前記冗長情報のうち少なくとも一方を読み出す制御部であって、所定の単位毎の第２データを前記半導体記憶ドライブから読み出し、当該第２データに誤りがある場合、前記第１テーブルを参照して、当該第２データと関連付けられた他の第２データ及び前記冗長情報を読み出して、前記他の第２データ及び前記冗長情報を用いて、前記第２データを復元する読み出し制御部と、
複数の前記半導体記憶ドライブのうち少なくとも１つの第１半導体記憶ドライブが第２半導体記憶ドライブに変更された場合、当該第２半導体記憶ドライブの諸元の情報を用いて、所定の条件に基づいて、前記第１半導体記憶ドライブに記憶されたデータを前記第２半導体ドライブに復元するか否かを決定する第２決定部と、を備え、
前記読み出し制御部は、前記第１半導体記憶ドライブに記憶されたデータを前記第２半導体ドライブに復元すると決定された場合、前記第１テーブルを参照して、前記第１半導体記憶ドライブに記憶された所定の単位毎の第２データと関連付けられた他の第２データ及び前記冗長情報を読み出して、前記他の第２データ及び前記冗長情報を用いて、前記第２データを復元し、
前記書き込み制御部は、復元された前記第２データを前記第２半導体記憶ドライブに書き込み、
前記テーブル制御部は、前記書き込み制御部が前記第１半導体記憶ドライブに書き込んだ前記第２データの物理アドレスを前記第１テーブル記憶領域に記憶させることにより、前記第１テーブルを更新する
ことを特徴とする半導体記憶制御装置。
【請求項２】
前記第１テーブルは、前記論理アドレスと、前記識別情報と、前記論理アドレスに対応する前記第１データが書き込まれる前記記憶領域を有する前記半導体記憶ドライブに割り当てられたドライブ番号と、前記論理アドレスに対応する前記第１データが書き込まれる、前記記憶領域内のページ領域を識別するページ番号とが対応付けられた第１アドレス変換テーブル、および、前記識別情報と、前記組に属する各前記半導体記憶ドライブの前記記憶領域を識別するブロック番号と、が対応付けられた第２アドレス変換テーブルから構成され、
前記テーブル制御部は、前記書き込み制御部による書き込みが行われる前記所定の数の前記第１データごとに、前記論理アドレスと、前記決定部により決定された前記識別情報と、前記書き込み制御部によって当該第１データが書き込まれた何れかの前記半導体記憶ドライブに対応する前記ドライブ番号と、前記書き込み制御部によって当該第１データが書き込まれた何れかの前記半導体記憶ドライブの前記記憶領域内の前記ページ領域を識別する前記ページ番号と、を対応付けて前記第１アドレス変換テーブルに記憶させる
ことを特徴とする請求項１に記載の半導体記憶制御装置。
【請求項３】
前記諸元の情報は、ブロックサイズを少なくとも示し、
前記構築部は、更に、前記第２半導体記憶ドライブの諸元の情報によって示されるブロックサイズが、前記他の第２データが記憶されている他の半導体記憶ドライブのブロックサイズと異なる場合、前記第１半導体記憶ドライブの第１物理アドレス及び前記第２半導体記憶ドライブの第２物理アドレスの対応関係を示す第２テーブルを記憶する第２テーブル記憶領域を構築し、
前記第２半導体記憶ドライブの諸元の情報によって示されるブロックサイズが、前記他の第２データが記憶されている他の半導体記憶ドライブのブロックサイズと異なる場合、各前記ブロックサイズに応じて、前記第１物理アドレスを前記第２物理アドレスに変換する第１変換部を更に備え、
前記テーブル制御部は、前記第１テーブル記憶領域に記憶されている前記第１物理アドレスと前記第２物理アドレスとを対応付けた前記第２テーブルを前記第２テーブル記憶領域に記憶させる
ことを特徴とする請求項１に記載の半導体記憶制御装置。
【請求項４】
前記諸元の情報は、ページサイズを少なくとも示し、
前記構築部は、更に、前記第２半導体記憶ドライブの諸元の情報によって示されるページサイズが、前記他の第２データが記憶されている他の半導体記憶ドライブのページサイズと異なる場合、前記第１半導体記憶ドライブの第１物理アドレス及び前記第２半導体記憶ドライブの第２物理アドレスの対応関係を示す第２テーブルを記憶する第２テーブル記憶領域を構築し、
前記第２半導体記憶ドライブの諸元の情報によって示されるページサイズが、前記他の第２データが記憶されている他の半導体記憶ドライブのページサイズと異なる場合、各前記ページサイズに応じて、前記第１物理アドレスを前記第２物理アドレスに変換する第１変換部を更に備え、
前記テーブル制御部は、前記第１テーブル記憶領域に記憶されている前記第１物理アドレスと前記第２物理アドレスとを対応付けた前記第２テーブルを前記第２テーブル記憶領域に記憶させる
ことを特徴とする請求項３に記載の半導体記憶制御装置。
【請求項５】
前記所定の単位は、ページであり、
前記第１データは、ページ毎のデータである、
ことを特徴とする請求項１に記載の半導体記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶制御装置に関する。
【背景技術】
【０００２】
従来より、ＨＤＤ（Hard Disk Drive）等の記憶装置の故障によるデータの損失を防ぐ手段として、複数のＨＤＤを組み合わせて仮想的な１台のＨＤＤを構成し、複数のＨＤＤで誤り訂正符号を構成することで、ＨＤＤ単位の故障に対応するＲＡＩＤ５（Redundant Array of Inexpensive Disks）等の記憶方式が広く利用されている。具体的には、ＲＡＩＤ５では、複数のデータ（パリティグループという）に対して誤り訂正符号（パリティ）を付与して、複数のデータ及びパリティを複数のＨＤＤに分散して各々記憶させる。
【０００３】
しかし、ＲＡＩＤ５のような記憶方式では、ＨＤＤに記憶されたデータの一部のブロックを書き換える際には、新しいパリティを計算するために、新たなデータをＨＤＤに書き込む前に、既に記憶されている古いデータ及びパリティを読み出す必要がある。これをライトペナルティと呼ぶ。このライトペナルティのオーバーヘッドが性能の低下をもたらすという課題がある。この課題を解決する方法の１つとして、ログ構造化ファイルシステムを採用することにより、小ブロックの書き込みを複数バッファリングして、パリティグループのサイズに達した時点で、パリティを計算し同時にＨＤＤに書き込みを行なう方法がある。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】喜連川  優著  「ストレージネットワーキング技術」，オーム社
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年では、このようなＨＤＤの代わりにＮＡＮＤ  Ｆｌａｓｈメモリ等の半導体記憶装置を使ってＲＡＩＤの技術を適用させることが考えられている。このような半導体記憶装置は、ブロック単位で消去を行うため、ブロック消去型半導体記憶装置と呼ばれる。ブロック消去型半導体記憶装置では、ページ単位での書き換えができず、ブロック全体に対して消去を行った後に、先頭ページから順にデータの書き込みを行なう必要がある。一方、ＨＤＤの上位装置からＨＤＤへデータの書き込みが要求される際には、ブロックやページとは無関係に、セクタアドレスが指定される。そのため、ブロック消去型半導体記憶装置を記憶媒体とするＳＳＤ（Solid State Drive）で、データの書き込みを効率化させる方法の１つとして、書き込みが要求されたデータを、セクタアドレスの順とは無関係に、到着順に順次ページに連続的に書き込み、書き込んだブロックの番号及びページ番号と、セクタアドレスとの対応関係をＳＳＤで別途管理する方法がある。
【０００６】
しかし、この方法は、ＳＳＤ単独で利用する場合には効率が良いが、複数のＳＳＤを組み合わせてＲＡＩＤ５，ＲＡＩＤ６等を構成する場合には、ライトペナルティによる性能の劣化と、パリティの更新頻度が高いこととによってブロック消去型半導体記憶装置の寿命を低下させる恐れがある。
【０００７】
本発明の一観点は、上記に鑑みてなされたものであって、ライトペナルティ及びパリティの更新頻度を低減して、半導体記憶装置の寿命の低下を防止可能な半導体記憶制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態の半導体記憶制御装置は、複数の半導体記憶ドライブが接続され、情報処理装置から論理アドレスが指定されて書き込みが要求されたデータを前記半導体記憶ドライブへ書き込む半導体記憶制御装置であって、前記データは、１つ以上の所定の単位の第１データを有し、前記論理アドレスと、前記半導体記憶ドライブにおいて前記データが各々書き込まれる位置を示す物理アドレスと、所定の数の前記第１データ、および、前記所定の数の前記第１データを用いて計算され当該所定の数の前記第１データの誤りを訂正するために使われる冗長情報から構成される誤り訂正符号に対応する各前記半導体記憶ドライブの記憶領域の組を識別する識別情報と、の対応関係を示す第１テーブルを記憶する第１テーブル記憶領域を、前記半導体記憶ドライブの諸元の情報を用いて構築する構築部と、前記論理アドレスが指定された前記第１データの書き込みを要求する書き込みコマンドを一時的に記憶するデータバッファと、前記データバッファに記憶された前記第１データが前記所定の数に到達した場合、前記所定の数の前記第１データを用いて、前記冗長情報を算出する冗長情報算出部と、前記データバッファに記憶された前記第１データが前記所定の数に到達した場合、書き込み対象となる前記組を識別する前記識別情報を決定する決定部と、前記データバッファに記憶された前記第１データが前記所定の数に到達した場合、前記決定部により決定された前記識別情報により識別される前記組に対して、前記データバッファに記憶された前記所定の数の前記第１データおよび前記冗長情報算出部により算出された前記冗長情報から構成される前記誤り訂正符号の書き込みを行う書き込み制御部と、前記書き込み制御部による書き込みが行われる前記所定の数の前記第１データごとに、前記論理アドレスと、前記書き込み制御部によって当該第１データが書き込まれた何れかの前記半導体記憶ドライブの前記物理アドレスと、前記決定部により決定された前記識別情報と、を対応付けて得られる前記第１テーブルを前記第１テーブル記憶領域に記憶させるテーブル制御部と、前記半導体記憶ドライブから前記データ及び前記冗長情報のうち少なくとも一方を読み出す制御部であって、所定の単位毎の第２データを前記半導体記憶ドライブから読み出し、当該第２データに誤りがある場合、前記第１テーブルを参照して、当該第２データと関連付けられた他の第２データ及び前記冗長情報を読み出して、前記他の第２データ及び前記冗長情報を用いて、前記第２データを復元する読み出し制御部と、複数の前記半導体記憶ドライブのうち少なくとも１つの第１半導体記憶ドライブが第２半導体記憶ドライブに変更された場合、当該第２半導体記憶ドライブの諸元の情報を用いて、所定の条件に基づいて、前記第１半導体記憶ドライブに記憶されたデータを前記第２半導体ドライブに復元するか否かを決定する第２決定部と、を備え、前記読み出し制御部は、前記第１半導体記憶ドライブに記憶されたデータを前記第２半導体ドライブに復元すると決定された場合、前記第１テーブルを参照して、前記第１半導体記憶ドライブに記憶された所定の単位毎の第２データと関連付けられた他の第２データ及び前記冗長情報を読み出して、前記他の第２データ及び前記冗長情報を用いて、前記第２データを復元し、前記書き込み制御部は、復元された前記第２データを前記第２半導体記憶ドライブに書き込み、前記テーブル制御部は、前記書き込み制御部が前記第１半導体記憶ドライブに書き込んだ前記第２データの物理アドレスを前記第１テーブル記憶領域に記憶させることにより、前記第１テーブルを更新することを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】第１実施形態のＲＡＩＤコントローラのハードウェア構成を例示する図。
【図２】ＲＡＩＤコントローラの機能的構成を例示する図。
【図３】１段目アドレス変換テーブル及び２段目アドレス変換テーブルを例示する図。
【図４】冗長情報が付加された書き込み対象データを例示する図。
【図５】管理テーブルを新たに構築する処理の手順を示すフローチャート。
【図６】ＳＳＤに書き込みを行う処理の手順を示すフローチャート。
【図７】ＳＳＤからデータの読み出しを行う処理の手順を示すフローチャート。
【図８】誤り訂正符号を構成するためのＳＳＤの変更に係るフローチャート。
【図９】第２実施形態の物理アドレスの変換を場合分けした９通りの例を示す図。
【図１０】ＲＡＩＤコントローラの機能的構成を例示する図。
【図１１】書き込みタイミング制御部が管理する情報を例示する図。
【図１２】変換制御部７２ａの内部構成を例示する図。
【図１３】ブロック番号変換部７２ｂが行う変換を説明するための図。
【図１４】ページ番号変換部が行う変換を説明するための図。
【図１５】書き込みタイミングを制御する処理の手順を示すフローチャート。
【図１６】データを代替ＳＳＤに復元する処理の手順を示すフローチャート。
【図１７】処理Ａの手順を示すフローチャート。
【図１８】処理Ｂの手順を示すフローチャート。
【図１９】処理Ｅの手順を示すフローチャート。
【図２０】処理Ｃの手順を示すフローチャート。
【図２１】処理Ｄの手順を示すフローチャート。
【図２２】一変形例に係るデータを読み出す処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１０】
[第１の実施の形態]
まず、本実施の形態に係る半導体記憶制御装置のハードウェア構成について図１を用いて説明する。本実施の形態の半導体記憶制御装置であるＲＡＩＤコントローラ５０には、サーバ１００と複数の半導体記憶装置（ＳＳＤ）６０がそれぞれインタフェースを介して接続される。インタフェースとは、Fibre ChannelやSAS、iSCSI等である。ＲＡＩＤコントローラ５０は、サーバ通信部５１と、コントローラ５２と、デバイス制御部５３と、メモリ５４とを有する。また、図示しないが、ＲＡＩＤコントローラ５０には、システムプログラムを記憶する不揮発メモリが搭載される。更に、ＲＡＩＤコントローラ５０には、情報を表示する表示部が接続されても良い。
【００１１】
サーバ通信部５１は、コントローラ５２の制御の下、サーバ１００との通信を制御する。メモリ５４は、電源の投入時に実行されるプログラムや各種データを記憶する。コントローラ５２は、ＣＰＵ（Central Processing Unit）により構成され、電源の投入時にメモリ５４からプログラムを読み出してこれを実行し、当該プログラムに従って、不揮発メモリに記憶された各種システムプログラムをメモリ５４に転送し、メモリ５４上でシステムプログラムを実行することにより、ＲＡＩＤコントローラ５０全体を制御して、各種機能を実現させる。具体的には、コントローラ５２は、サーバ通信部５１を介して、サーバ１００から送信されたコマンドを受信し、解釈する。コントローラ５２は、当該コマンドに応じて、ＳＳＤ６０へのデータの書き込みやＳＳＤ６０からのデータの読み出しを制御する。デバイス制御部５３は、コントローラ５２の制御の下、ＳＳＤ６０へのデータの書き込みやＳＳＤ６０からのデータの読み出しを行う。
【００１２】
ＳＳＤ６０は、半導体ドライブと、当該半導体ドライブの制御を行う制御回路とを含み、誤り訂正回路を含む。半導体ドライブは、リムーバブル（可搬）で、１以上の半導体記憶素子を有する装置であり、例えば、半導体記憶素子であるＮＡＮＤ型のフラッシュメモリが複数用いられて構成された記憶装置である。ＮＡＮＤ型のフラッシュメモリ等の半導体記憶素子は、ランダムな読み書きができず、ページと呼ばれる単位で読み書きが可能で、複数ページがまとまってブロックと呼ばれる単位の記憶領域を構成する。ここでは、１ページ４KB、６４ページで１ブロックとする。１つの半導体記憶素子はこのブロックが複数集まって構成される。このような半導体記憶素子が複数集まって１つのＳＳＤ６０が構成される。このようなＳＳＤ６０は、ＲＡＩＤコントローラ５０に対して着脱自在に装着される。従って、ＲＡＩＤコントローラ５０の初期構成時やＲＡＩＤコントローラ５０に既に装着されたＳＳＤ６０の故障時にユーザが所望のＳＳＤ６０をＲＡＩＤコントローラ５０に対して装着可能である。尚、複数のＳＳＤ６０を識別するために、各ＳＳＤ６０にはドライブ番号が割り当てられている。
【００１３】
ここで、複数のＳＳＤ６０により誤り訂正符号（ＲＡＩＤ）を構成する方法について説明する。本実施の形態においては、複数のＳＳＤ６０のうち１つを、冗長情報を書き込むためのＳＳＤとし、他の所定の数のＳＳＤ６０を、ホストから書き込みが要求されたデータを書き込むためのＳＳＤとして、これらのＳＳＤ６０の各ブロックを１つの組として誤り訂正符号を構成して、ページ単位での書き込みを行なう。即ち、本実施の形態の基本構成においては、ＲＡＩＤコントローラ５０は、書き込みが要求されたデータについて、所定の単位であるページ毎のデータと、所定の数のデータ（第１データ）を用いて計算され当該所定の数のデータの誤りを訂正するために用いられる冗長情報（上述のパリティに相当する）とを異なるＳＳＤ６０に各々書き込む。所定の数のデータ及び冗長情報により誤り訂正符号が構成される。誤り訂正符号としては、例えば、パリティ符号を用いる。
【００１４】
ここで、ＳＳＤ６０への書き込み方式について説明する。従来より、ＮＡＮＤ型の半導体記憶素子では、追記方式が採用されている。サーバ１００から指定された論理アドレス（Logical Block Address:LBA）とは無関係に、消去済みのブロックにページ単位（例えば、４ＫＢ）でデータの書き込みをページの順に行ない、書き込みを行なった物理的な記憶位置を示す物理アドレス（Physical Block Address:PBA）と論理アドレスとの対応関係を記憶して、これを用いてデータの読み出しを行う。この方式を追記方式と呼ぶ。この追記方式では、書き込みの前に、ブロックを消去する必要がある。ブロックの消去とは、ブロックを構成する全てのビットの値を「１」にすることである。ＳＳＤ６０では、このような消去をブロック単位で行ない、消去済みのブロックに対してページ単位で書き込みを行う。即ち、ＮＡＮＤ型の半導体記憶素子を用いたＳＳＤ６０においては、消去済みのブロックのうち書き込みがまだ行われていないページに対して順次書き込みが可能であり、既に書き込みが行なわれたページに対する上書きが不可能である。また、サーバ１００からの要求に応じたデータの書き込みは、サーバ１００で用いられるセクタアドレス等の論理アドレス（Logical Block Address:LBA）で指定される。一方、サーバ１００へのデータや冗長情報の書き込みは、ＳＳＤ６０の物理的な記憶位置（物理アドレス（Physical Block Address:PBA）という）により、論理アドレスとは無関係に、ページの昇順に書き込みが行なわれる。尚、サーバ１００上で取り扱うデータの単位はセクタであり、このセクタのサイズ（セクタサイズ）とページサイズとは異なる場合がある。この論理アドレスと物理アドレスとの対応関係は、後述する管理テーブルに記憶される。そして、データの書き込み要求において指定された論理アドレスが再度指定されて新たなデータの書き込みがサーバ１００から要求されると、ＲＡＩＤコントローラ５０は、ＳＳＤ６０において消去済みのブロックの書き込みがまだ行なわれていないページに対して新たなデータの書き込みを行う。このとき、当該論理アドレスに対応して前回書き込みが行われたページを無効にして、新たなデータの書き込みが行われたページを有効にする。またこのとき、ＲＡＩＤコントローラ５０は、上述した誤り訂正符号を構成しながら新たなデータ及び冗長情報の書き込みを行なう。
【００１５】
次に、ＲＡＩＤコントローラ５０の機能的構成について図２を用いて説明する。ＲＡＩＤコントローラ５０は、上述したサーバ通信部５１及びデバイス制御部５３の機能に加え、バッファ制御部７１と、アドレス変換部７２と、管理テーブル構築部７３と、データバッファ７５と、管理テーブル記憶部８０とを有する。バッファ制御部７１と、アドレス変換部７２と、管理テーブル構築部７３とは、コントローラ５２がプログラムを実行することとにより実現される。管理テーブル７６は、管理テーブル記憶部８０に記憶される。データバッファ７５と管理テーブル記憶部８０とは、図１のメモリ５４に記憶される。
【００１６】
サーバ通信部５１は、サーバ通信部５１を介したサーバ１００との通信を制御する。サーバ通信部５１は、サーバ１００から送信されたコマンドを受信する。サーバ通信部５１は、受信したコマンドによって論理アドレスが指定されたデータの書き込みが要求されている場合、当該コマンド（ｗｒｉｔｅコマンドという）を後述のバッファ制御部７１に送る。また、サーバ通信部５１は、サーバ１００から送信されたコマンドによって論理アドレスが指定されたデータの読み出しが要求されている場合、当該コマンド（ｒｅａｄコマンドという）をバッファ制御部７１に送る。
【００１７】
バッファ制御部７１は、サーバ通信部５１を介してサーバ１００から受信されたコマンドやデータをデータバッファ７５に一時的に記憶させる。本実施の形態においては、バッファ制御部７１は、サーバ１００から受信されたコマンドによって論理アドレスが指定されたデータの書き込みが要求されている場合、当該データを論理アドレスと対応付けて先着順にデータバッファ７５に記憶させる。そして、バッファ制御部７１は、データバッファ７５に記憶させたデータであって、１ストライプ分の誤り訂正符号を生成するための対象となるデータが揃ったときに、１ストライプ分の誤り訂正符号を生成するための対象となるデータを用いて冗長情報を計算して、当該データ及び当該冗長情報のＳＳＤ６０への書き込みを要求するｗｒｉｔｅコマンドをデバイス制御部５３に送る。尚、当該要求に応じて書き込みが終ったデータについて、バッファ制御部７１は、後に読み出しの要求がある場合に備えて、データバッファ７５中に保持させるようにしても良いし、データバッファ７５から削除するようにしても良い。
【００１８】
ここで、ストライプについて説明する。上述したように、本実施の形態においては、サーバ１００から書き込みが要求されたデータについては、ページ単位の所定の数のデータ及び冗長情報により誤り訂正符号を構成して、各データ及び冗長情報が各々異なるＳＳＤ６０へ書き込まれる。この誤り訂正符号を構成する各ＳＳＤ６０の各ブロックのそれぞれ１ページが集められた１組のデータの集合をストライプという。一方、ストライプ番号とは、誤り訂正符号を構成する各ＳＳＤ６０のブロックの組に対して付与される識別番号である。本実施の形態においては、フリーブロックが新規に割当てられる時に、誤り訂正符号を構成する各ＳＳＤ６０のブロックの組が、各ＳＳＤ６０で同時に、選択される。当該組に対して未使用のストライプ番号が割当てられる。そして当該ストライプ番号が割り当てられた組に属する各ＳＳＤ６０の各ブロックにおいてそれぞれ１ページずつページ単位のデータが書き込まれるため、この各ページの組が、１ストライプとなる。
【００１９】
上述したデータバッファ７５に記憶させたデータであって、１ストライプ分の誤り訂正符号を生成するための対象となるデータが揃ったときとは、即ち、所定の数のデータが揃ったときである。
【００２０】
管理テーブル構築部７３は、管理テーブル７６を構築する。具体的には、管理テーブル構築部７３は、管理テーブル７６を新たに構築する際、誤り訂正符号の構成に関する指示に応じて、ＲＡＩＤコントローラ５０に接続され且つ誤り訂正符号を構成するためのＳＳＤ６０の諸元の情報を収集し、ＳＳＤ６０の諸元に適合した管理テーブル７６を構築する。諸元の情報とは、ブロックサイズの情報、ブロック数の情報及びページサイズの情報を有する。誤り訂正符号の構成に関する指示は、例えば、サーバ通信部５１を介してサーバ１００から送信される。具体的にどのようにして管理テーブル構築部７３が管理テーブル７６を構築するのかについては動作欄で詳述する。
【００２１】
管理テーブル７６は、論理アドレス及び物理アドレスの対応関係を示すと共に、データ及び冗長情報を関連付けるための識別情報を示す情報である。管理テーブル７６は、例えば、１段目アドレス変換テーブル７６ａ及び２段目アドレス変換テーブル７６ｂを有する。本実施の形態において識別情報は、上述したストライプ番号に相当する。図３は、１段目アドレス変換テーブル７６ａ及び２段目アドレス変換テーブル７６ｂのデータ構成を例示する図である。尚、同図では、ＲＡＩＤコントローラ５０に接続されるＳＳＤ６０の数は４つであり、各ＳＳＤ６０の有するブロックサイズやページサイズは同じである場合の例が示されているが、本実施の形態においてはこれに限定されるものではない。
【００２２】
１段目アドレス変換テーブル７６ａは、論理アドレスをキーとする情報であり、論理アドレスと、当該論理アドレスに対応するデータが書き込まれたブロックの属する組に割り当てられたストライプ番号と、当該データが書き込まれたブロックを有するＳＳＤ６０に割り当てられたドライブ番号と、当該ブロック内で当該データが書き込まれたページを識別するためのページ番号とが対応付けられた情報である。尚、同図に示される１段目アドレス変換テーブル７６ａでは、１列目に論理アドレスが示されており、これと、ストライプ番号と、ドライブ番号及びページ番号とが並列に対応付けられていることが示されているが、この１段目アドレス変換テーブル７６ａの行が論理アドレスから機械的に決定できれば、論理アドレスの列は省略されても構わない。また、ページサイズがセクタサイズよりも大きい場合、ページ内において論理アドレスに対応するセクタの位置を特定するためのビット幅の分だけ、論理アドレスの下位ビットを除いた上位ビットをキーとして１段目アドレス変換テーブル７６ａを参照すれば良い。例えば、セクタサイズが512byteであり、ページサイズが2048byteである場合には、ページ内において論理アドレスに対応するセクタの位置を特定するのに2ビット必要であるため、論理アドレスがNビット幅である場合には論理アドレスの上位(N-2)ビットをキーとして１段目アドレス変換テーブル７６ａを参照すれば良い。
【００２３】
２段目アドレス変換テーブル７６ｂは、ストライプ番号をキーとする情報であり、誤り訂正符号を構成する各ＳＳＤ６０の各ブロックの組に割り当てられたストライプ番号と、当該組に属する各ＳＳＤ６０の各ブロックを識別するためのブロック番号と、有効／無効フラグとが対応付けられた情報である。図３の例では、各ＳＳＤ６０のドライブ番号に対応付けられてブロック番号が記憶される。有効／無効フラグとは、各組に属するブロックのうち少なくとも１つ以上は有効データを保持しているか（有効であるか）否か（無効であるか）を示す情報である。また、２段目アドレス変換テーブル７６ｂのストライプ番号には、書き込みの対象を示すポインタがセットされる。当該ポインタが適宜更新されて、２段目アドレス変換テーブル７６ｂのストライプ番号の順に誤り訂正符号を構成する各ブロックに書き込みが行なわれることになる。
【００２４】
このような１段目アドレス変換テーブル７６ａに記憶されている論理アドレスに対応するストライプ番号に対応付けられているドライブ番号及びページ番号と、２段目アドレス変換テーブル７６ｂに記憶されている当該ストライプ番号に対応付けられている当該ドライブ番号に対応するブロック番号とによって、当該論理アドレスに対応するデータが書き込まれているＳＳＤ６０のブロックのページが特定される。即ち、ドライブ番号によって特定されるＳＳＤ６０におけるブロック番号及びページ番号が物理アドレスに相当し、論理アドレス及び物理アドレスの対応関係が管理テーブル７６に記憶されていることになる。
【００２５】
アドレス変換部７２は、サーバ通信部５１からｒｅａｄコマンドを受け取る。アドレス変換部７２は、受け取ったｒｅａｄコマンドで指定された論理アドレスを用いて管理テーブル７６を参照し、当該ｒｅａｄコマンドで読み出しが要求されたデータが書き込まれているＳＳＤ６０のドライブ番号、ブロック番号及びページ番号を特定する。そして、アドレス変換部７２は、特定した当該ドライブ番号、ブロック番号及びページ番号によって指定されるデータの読み出しを要求するｒｅａｄコマンドをデバイス制御部５３に送る。また、サーバ通信部５１からｒｅａｄコマンドにより読み出されたデータのエラーが検出されて当該データを復元する際に、管理テーブル７６を参照して、当該データに対応付けられて記憶されている論理アドレスを用いて、当該データと誤り訂正符号を構成する他のデータ及び冗長情報がそれぞれ記憶されている各ＳＳＤ６０のドライブ番号、ブロック番号及びページ番号を特定する。そして、アドレス変換部７２は、特定した各ＳＳＤ６０のドライブ番号、ブロック番号及びページ番号によって指定されるデータの読み出しを要求するｒｅａｄコマンドをデバイス制御部５３に送る。
【００２６】
デバイス制御部５３は、バッファ制御部７１からｗｒｉｔｅコマンドを受け取ると、１ストライプ分の誤り訂正符号を構成する各データ及び冗長情報を書き込む対象のストライプ番号を決定する。そして、デバイス制御部５３は、各データ及び冗長情報を書き込む対象のＳＳＤ６０を決定し、決定した各ＳＳＤ６０に当該各データ及び冗長情報を各々書き込む。この書き込みにおいて、デバイス制御部５３は、対応するＳＳＤ６０の消去済みのブロックのうち書き込みがまだ行なわれていないページ毎に書き込みの位置を順次示すよう追記ポインタを設定する。そして、デバイス制御部５３は、追記ポインタによって示される位置のページに書き込み対象データを書き込む。デバイス制御部５３は、その後、書き込みを行なったページに続く次のページであって書き込みがまだ行われていないページの位置を示すよう追記ポインタを更新する。従って、追記ポインタは順次次の書き込み位置を示すようにその値が変化する。例えば、追記ポインタは、各チャネルにおいて15ビットの物理アドレスによりブロックが識別され、ブロック内に64ページある場合、合計15+6=21ビットで構成される。
【００２７】
ここで、書き込み対象データ及び冗長情報のデータ構成について説明する。デバイス制御部５３は、書き込み対象データ自体の誤りを検出して訂正するための誤り訂正符号（ページＥＣＣという）及びｗｒｉｔｅコマンドによって指定された論理アドレスを当該書き込み対象データに付加する。尚、ページＥＣＣには、データの誤りを検出するＣＲＣ符号等の符号と、データの誤りを訂正するＥＣＣ符号等の符号とが含まれるものとする。ページＥＣＣにＣＲＣ符号も含む理由は、ＥＣＣ符号によりデータの誤りを訂正できない場合は誤訂正の可能性もあるからである。図４は、冗長情報が付加された書き込み対象データを例示する図である。上述のように決定された各ＳＳＤ６０において、デバイス制御部５３は、このようなページＥＣＣ及び論理アドレスを付加した書き込み対象データを、上述のように決定された各ＳＳＤ６０内の追記ポインタにより示されるページの記憶される記憶領域に書き込む。尚、書き込み対象データはページ単位の大きさであるが、ＳＳＤ６０のページサイズは、書き込み対象データにページＥＣＣ及び論理アドレスが付加された全体の大きさに相当するものとする。
【００２８】
図３の説明に戻る。デバイス制御部５３は、このような書き込みを行なった後、各データが書き込まれた各ＳＳＤ６０のドライブ番号及びページ番号を、当該各データに対応付けられた論理アドレスと共に、当該データの書き込みに際して決定したストライプ番号と対応付けた情報である１段目アドレス変換テーブル７６ａを管理テーブル記憶部８０に記憶させる。また、デバイス制御部５３は、誤り訂正符号を構成する各データ及び冗長情報を各々書き込んだブロックのブロック番号を各ＳＳＤ６０のドライブ番号と対応付けた情報である２段目アドレス変換テーブル７６ｂを管理テーブル記憶部８０に記憶させる。
【００２９】
また、デバイス制御部５３は、アドレス変換部７２からｒｅａｄコマンドを受け取ると、当該ｒｅａｄコマンドによって指定されたＳＳＤ６０のドライブ番号、ブロック番号及びページ番号のページからデータを読み出して、読み出したデータをサーバ通信部５１に送る。尚、デバイス制御部５３は、ＳＳＤ６０から読み出した当該データに誤りがある場合、これを検出して当該データを復元する。
【００３０】
また、デバイス制御部５３は、誤り訂正符号を構成する複数のＳＳＤ６０のうち少なくとも１つが故障で他のＳＳＤに変更される場合に、故障したＳＳＤ（変更前ＳＳＤという）に記憶されたデータを代替ＳＳＤに復元する。これは、新しいＳＳＤがＲＡＩＤコントローラ５０に追加で接続された場合や、または、スペアとしてＲＡＩＤコントローラ５０に予め接続されていて、故障したＳＳＤ６０の代替として使用される場合もある。以降、故障したＳＳＤ６０の代替のＳＳＤを代替ＳＳＤと呼ぶ。この場合、ＲＡＩＤコントローラ５０は、誤り訂正符号を構成する複数のＳＳＤ６０のうちのうち少なくとも１つが代替ＳＳＤに変更されることを、例えばサーバ通信部５１を介したサーバ１００からの指示により検知するようにしても良いし、新たな代替ＳＳＤが追加で接続された際の当該代替ＳＳＤとの通信により検知するようにしても良い。そして、デバイス制御部５３は、代替ＳＳＤの諸元の情報を用いて、当該代替ＳＳＤが所定の条件を満たすか否かを確認して、当該代替ＳＳＤが所定の条件を満たす場合に、変更前ＳＳＤに記憶されたデータを代替ＳＳＤに復元すると決定する。この場合、デバイス制御部５３は、２段目アドレス変換テーブル７６ｂを参照して、変更前ＳＳＤに書き込まれていた全てのデータを、誤り訂正符号を用いて各々復元してこれらを代替ＳＳＤに書き込む。
【００３１】
次に、本実施の形態に係るＲＡＩＤコントローラ５０の行う処理の手順について説明する。まず、ＲＡＩＤコントローラ５０が管理テーブル７６を新たに構築する処理の手順について図５を用いて説明する。ＲＡＩＤコントローラ５０は、自身に接続されているＳＳＤ６０のそれぞれからＳＳＤ６０の諸元(ブロックサイズ、ブロック数、ページサイズ)の情報を取得する（ステップＳ１）。本実施の形態では、ＲＡＩＤコントローラ５０に接続される複数のＳＳＤ６０間でブロックサイズ及びページサイズがそれぞれ等しいことを前提としている。そのため、ＲＡＩＤコントローラ５０は、ＳＳＤ６０から取得した諸元の情報を用いて、ＳＳＤ６０間でブロックサイズ及びページサイズが一致することを確認する（ステップＳ２）。ＳＳＤ６０間でブロックサイズ及びページサイズが一致しない場合には（ステップＳ３：ＮＯ）、警告を表示部に表示させる（ステップＳ４）。ＲＡＩＤコントローラ５０に接続される複数のＳＳＤ６０間でブロックサイズ及びページサイズが一致する場合には（ステップＳ３：ＹＥＳ）、ＲＡＩＤコントローラ５０は、次に、誤り訂正符号の構成に関する指示を受け付ける（ステップＳ５）。例えば、５つのＳＳＤ６０がＲＡＩＤコントローラ５０に接続されている場合、そのうちの１つをスペアとし、残りの４つで誤り訂正符号を構成するという指示をＲＡＩＤコントローラ５０は受け付ける。即ち、この場合、誤り訂正符号を構成するために用いるＳＳＤ６０の数は５つであり、誤り訂正符号を構成する際に１つの組となるデータの数である所定の数は４つであると指示される。
【００３２】
そして、ＲＡＩＤコントローラ５０は、当該指示に応じて、誤り訂正符号を構成するためのデータが記憶されたＳＳＤ６０を決定する。ＲＡＩＤコントローラ５０は、決定したＳＳＤ６０から取得した諸元の情報を用いて、ＳＳＤ６０に記憶可能なセクタ数を決定する（ステップＳ６）。尚、各ＳＳＤ６０内のフリーブロックを確保するためのコンパクションに係るコストを軽減すべく、ＲＡＩＤコントローラ５０は、ＳＳＤ６０に記憶可能な最大のセクタ数より小さいセクタ数を決定するようにしても良い。
【００３３】
次に、ＲＡＩＤコントローラ５０は、ステップＳ６で決定したセクタ数分の行を有する１段目アドレス変換テーブル７６ａを生成してメモリ５４の記憶領域に記憶させることにより、１段目アドレス変換テーブル７６ａを記憶する記憶領域を構築する（ステップＳ７）。尚、ＲＡＩＤコントローラ５０は、ページサイズがセクタサイズより大きい場合、１ページには、連続する複数のセクタに対応するデータが記憶されるとして、ステップＳ６で決定したセクタ数を、ページサイズをセクタサイズで割った数の行を有する１段目アドレス変換テーブル７６ａをメモリ５４に生成するようにしても良い。
【００３４】
そして、ＲＡＩＤコントローラ５０は、ページサイズと、ブロックサイズと、ステップＳ５で受け付けた指示による誤り訂正符号の構成と、ステップＳ６で決定したセクタ数とを用いて、誤り訂正符号を構成する各ブロックの組の全ての数である総ストライプ数を決定する。例えば、ページサイズが4KBであり、ブロックサイズがNbであり、誤り訂正符号を構成する際にデータを書き込むＳＳＤ６０が４つ且つ冗長情報を書き込むためのＳＳＤ６０が１つであり、ステップＳ６で決定したセクタ数がNtsとすると、「総ストライプ数＝Nts/((4KB/512B)*4*Nb)」となる。ＲＡＩＤコントローラ５０は、このようにして決定した総ストライプ数分の行を有する２段目アドレス変換テーブル７６ｂを生成してメモリ５４の記憶領域に記憶させることにより、２段目アドレス変換テーブル７６ｂを記憶する記憶領域を構築する（ステップＳ８）。ＲＡＩＤコントローラ５０は、各行に対応する各組に属するブロックは有効データを保持していない（無効である）ことを示すように有効／無効フラグをセットして、２段目アドレス変換テーブル７６ｂの初期化を行う。また、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂの先頭の行に、書き込みの対象となるポインタをセットする。このポインタは、ストライプ番号に対応して誤り訂正符号を構成する各ブロックに書き込み可能なページがなくなった場合に、次のストライプ番号にセットされることになり、２段目アドレス変換テーブル７６ｂにセットされたストライプ番号の順に、誤り訂正符号を構成する各ブロックへの書き込みが行なわれることになる。
【００３５】
次に、サーバ１００からのｗｒｉｔｅコマンドに応じてＲＡＩＤコントローラ５０がＳＳＤ６０に書き込み対象データの書き込みを行う処理の手順について図６を用いて説明する。ＲＡＩＤコントローラ５０は、論理アドレスが指定されたデータの書き込みを要求するｗｒｉｔｅコマンドをサーバ１００から受信すると（ステップＳ２０：ＹＥＳ）、当該データ（書き込み対象データ）を論理アドレスと対応付けてデータバッファ７５に記憶させる（ステップＳ２１）。そして、ＲＡＩＤコントローラ５０は、データバッファ７５に記憶されたデータであって、１ストライプ分の誤り訂正符号を生成するための対象となるデータが揃ったか否か、即ち、データバッファ７５に記憶されたデータが所定の数に達したか否かを判断する（ステップＳ２２）。ステップＳ２２の判断結果が否定的である場合（ステップＳ２２：ＮＯ）、ステップＳ２０に戻り、ＲＡＩＤコントローラ５０は、論理アドレスが指定されたデータの書き込みを要求する新たなｗｒｉｔｅコマンドのサーバ１００からの受信を待機する。そして、新たなｗｒｉｔｅコマンドが受信されて新たなデータがデータバッファ７５に記憶され、データバッファ７５に記憶されたデータであって、１ストライプ分の誤り訂正符号を生成するための対象となるデータが揃ったときに、ステップＳ２２の判断結果が肯定的となる。この場合（ステップＳ２２：ＹＥＳ）、ＲＡＩＤコントローラ５０は、データバッファ７５に記憶された各データについて、オフセットが等しい位置のバイト同士で排他的論理和(ＸＯＲ)を計算し、この値を、上述のオフセットが等しい位置の値として含む冗長情報（パリティ）を計算する（ステップＳ２３）。
【００３６】
次に、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域においてポインタがセットされているストライプ番号に対応する各ブロックにおいて書き込み可能なページがあるか否かを判断する（ステップＳ２４）。当該判断結果が肯定的である場合（ステップＳ２４：ＹＥＳ）、ＲＡＩＤコントローラ５０は、現在ポインタがセットされている記憶領域に記憶されているストライプ番号を書き込み対象のストライプ番号として決定して、ステップＳ２６に進む。一方、ステップＳ２４の判断結果が否定的である場合（ステップＳ２４：ＮＯ）、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂにおいて新たなストライプ番号を決定する（ステップＳ２５）。そして、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域において当該新たなストライプ番号が記憶される記憶領域にポインタを更新して、ステップＳ２６に進む。ステップＳ２６では、ＲＡＩＤコントローラ５０は、データバッファ７５に記憶されたデータ毎に以下の処理を行う。ＲＡＩＤコントローラ５０は、処理対象のデータについて、書き込みを行なう対象のＳＳＤ６０を決定する。そして、ＲＡＩＤコントローラ５０は、ステップＳ２６で決定したＳＳＤ６０に当該処理対象のデータを書き込む（ステップＳ２７）。
【００３７】
そして、ＲＡＩＤコントローラ５０は、ステップＳ２７で処理対象のデータを書き込んだＳＳＤ６０のドライブ番号、当該ＳＳＤ６０内のブロックのブロック番号及び当該ブロック内のページのページ番号を取得する（ステップＳ２８）。ＲＡＩＤコントローラ５０は、当該処理対象のデータに対応付けられた論理アドレスと、ストライプ番号、ドライブ番号及びページ番号を対応付けて２段目アドレス変換テーブル７６ｂに記憶させる（ステップＳ２９）。尚、ステップＳ２５で新たなストライプ番号を決定した場合には（ステップＳ３０：ＹＥＳ）、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂにおいて当該新たなストライプ番号に対応する行に、当該処理対象のデータが書き込まれたＳＳＤ６０のドライブ番号において当該データが書き込まれたブロックのブロック番号を記憶させる。ＲＡＩＤコントローラ５０は、ブロック番号が記憶された行に対応する各組に属するブロックのうち少なくとも１つ以上有効データを保持していることを示すように有効／無効フラグを更新する（ステップＳ３１）。ステップＳ２４の判断結果が肯定的であり、ステップＳ２５で新たなストライプ番号を決定していない場合には（ステップＳ３０：ＮＯ）、ＲＡＩＤコントローラ５０は、ステップＳ３１の処理を行わない。そして、データバッファ７５に記憶されたデータについて、以上のステップＳ２６〜Ｓ３１の処理を行っていないデータがある場合（ステップＳ３２：ＮＯ）、ＲＡＩＤコントローラ５０は、当該データを処理対象として、ステップＳ２６〜Ｓ３１を行う。
【００３８】
データバッファ７５に記憶された全てのデータに対して、以上のステップＳ２６〜Ｓ３１の処理を行った場合（ステップＳ３２：ＹＥＳ）、ＲＡＩＤコントローラ５０は、次に、ステップＳ２３で計算した冗長情報を書き込むＳＳＤ６０を決定し（ステップＳ３３）、決定したＳＳＤ６０に冗長情報を書き込む（ステップＳ３４）。尚、ステップＳ２５で新たなストライプ番号を決定した場合には（ステップＳ３５：ＹＥＳ）、ＲＡＩＤコントローラ５０は、ステップＳ３４で冗長情報を書き込んだＳＳＤ６０のドライブ番号、当該ＳＳＤ６０内のブロックのブロック番号及び当該ブロック内のページのページ番号を取得する（ステップＳ３６）。そして、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂにおいて当該新たなストライプ番号に対応する行に、当該冗長情報が書き込まれたＳＳＤ６０のドライブ番号において当該冗長情報が書き込まれたブロックのブロック番号を記憶させる（ステップＳ３７）。
【００３９】
次に、サーバ１００からのｒｅａｄコマンドに応じてＲＡＩＤコントローラ５０がＳＳＤ６０からデータの読み出しを行う処理の手順について図７を用いて説明する。尚、ここでは、読み出し対象のデータのサイズは、ページサイズと同等であるとする。ＲＡＩＤコントローラ５０は、サーバ１００から送信されたｒｅａｄコマンドを受信すると（ステップＳ５０）、当該ｒｅａｄコマンドにより指定された論理アドレスを使って管理テーブル７６の１段目アドレス変換テーブル７６ａを参照し、当該変更前ブロックアドレスに対応して記憶されたストライプ番号、ＳＳＤ６０のドライブ番号及びページ番号を読み出して、これらを特定する（ステップＳ５１）。次いで、ＲＡＩＤコントローラ５０は、ステップＳ５１で特定したストライプ番号を用いて２段目アドレス変換テーブル７６ｂを参照して、ステップＳ５１で特定したドライブ番号に対応して記憶されているブロック番号を読み出して、これを特定する（ステップＳ５２）。そして、ＲＡＩＤコントローラ５０は、ステップＳ５１で特定したドライブ番号が割り当てられたＳＳＤ６０に対して、ステップＳ５２で特定したブロック番号のブロックのうち、ステップＳ５１で特定したページ番号のページからのデータの読み出しを要求する（ステップＳ５３）。この要求に応じて、当該ＳＳＤ６０からデータが読み出されて、ＲＡＩＤコントローラ５０に渡される。この結果、ＲＡＩＤコントローラ５０は、読み出し対象のデータを得る。
【００４０】
この読み出し対象のデータの正当性は、データに付加されたページＥＣＣで担保される。即ち、ＲＡＩＤコントローラ５０は、読み出したデータに付加されたページＥＣＣを使って、当該データの誤りを検出してこれを訂正することが可能である。この場合、ＲＡＩＤコントローラ５０は、誤りのないデータを得ることができ（ステップＳ５４：ＹＥＳ）、これをｒｅａｄコマンドの応答としてサーバ１００に送信することができる。しかし、ページＥＣＣで訂正できない誤りがある場合、ＲＡＩＤコントローラ５０に故障が生じて、データに異常が発生している可能性がある。このような場合には（ステップＳ５４：ＮＯ）、ＲＡＩＤコントローラ５０は、データの読み出し時に使った論理アドレスを用いてステップＳ５１で特定したストライプ番号を用いて２段目アドレス変換テーブル７６ｂを参照して、ステップＳ５１で特定したドライブ番号以外のドライブ番号に対応付けられたブロック番号を特定し（ステップＳ５５）、特定したブロック番号及びステップＳ５１で特定したページ番号によって特定されるページに書き込まれた他のデータ及び冗長情報の読み出しを各ＳＳＤ６０に要求する。この要求に応じて、各ＳＳＤ６０からデータ及び冗長情報が各々読み出されて、ＲＡＩＤコントローラ５０に渡される。この結果、ＲＡＩＤコントローラ５０は、読み出し対象のデータと誤り訂正符号を構成していた他のデータ及び冗長情報を得る（ステップＳ５６）。そして、ＲＡＩＤコントローラ５０は、当該他のデータ及び冗長情報を用いて、排他的論理和(ＸＯＲ)を計算して、訂正できない誤りがあったデータの復元を行う（ステップＳ５７）。この結果、ＲＡＩＤコントローラ５０は、読み出し対象のデータについて、復元されたデータを得る。得られた読み出し対象のデータについて、ＲＡＩＤコントローラ５０は、ｒｅａｄコマンドの応答としてサーバ１００に送信する（ステップＳ５８）。
【００４１】
次に、誤り訂正符号を構成する複数のＳＳＤ６０のうち少なくとも１つが故障で他のＳＳＤに変更される場合に、ＲＡＩＤコントローラ５０が、変更前ＳＳＤに記憶されたデータを代替ＳＳＤに復元する処理の手順について図８を用いて説明する。ＲＡＩＤコントローラ５０は、まず、代替ＳＳＤの諸元の情報（ブロック数、ブロックサイズ、ページサイズ）を取得する（ステップＳ７０）。ＲＡＩＤコントローラ５０は、ステップＳ７０で取得した諸元の情報を用いて、代替ＳＳＤが所定の条件を満たしているか否かを確認する（ステップＳ７１）。本実施の形態においては、ブロックサイズ及びページサイズは、誤り訂正符号を構成する複数のＳＳＤ６０において全て同一であることを前提としているため、代替ＳＳＤのブロックサイズ及びページサイズが、誤り訂正符号を構成する他のＳＳＤ６０のブロックサイズ及びページサイズと同一である及び代替ＳＳＤのブロック数が誤り訂正符号を構成する他のＳＳＤ６０のブロック数以上である場合に所定の条件を満たすものとして、ＲＡＩＤコントローラ５０は、ステップＳ７１の処理を行う。即ち、ＲＡＩＤコントローラ５０は、ステップＳ７０で取得したブロックサイズ及びページサイズが、誤り訂正符号を構成する他のＳＳＤ６０のブロックサイズ及びページサイズと同一であるか否かを確認する。また、ＲＡＩＤコントローラ５０は、ステップＳ７０で取得したブロック数が、誤り訂正符号を構成する他のＳＳＤ６０のブロック数以上であるか否かを確認する。尚、ステップＳ７０で取得したブロック数が、誤り訂正符号を構成する他のＳＳＤ６０のブロック数より小さい場合であっても、２段目アドレス変換テーブル７６ｂに記憶されている総ストライプ数(ブロック数よりは少ない)以上である場合もブロック数に関する条件を満たしているとしても良い。
【００４２】
そして、ＲＡＩＤコントローラ５０は、代替ＳＳＤが所定の条件を満たしていることを確認できなかった場合（ステップＳ７２：ＮＯ）、エラーであるとして処理を終了する。一方、ＲＡＩＤコントローラ５０は、代替ＳＳＤが所定の条件を満たしていることを確認した場合（ステップＳ７２：ＹＥＳ）、変更前ＳＳＤに記憶されたデータを代替ＳＳＤに復元すると決定する。そして、ＲＡＩＤコントローラ５０は、１段目アドレス変換テーブル７６ａが記憶されている記憶領域及び２段目アドレス変換テーブル７６ｂが記憶されている記憶領域において、変更前ＳＳＤのドライブ番号を、代替ＳＳＤに割り当てられたドライブ番号に変更する。そして、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶されているストライプ番号のうち、有効であることを示す有効／無効フラグが対応付けられているストライプ番号において変更前ＳＳＤに書き込まれていた全てのデータを、誤り訂正符号を用いて各々復元してこれらを代替ＳＳＤに書き込む。具体的には、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶されているストライプ番号のうち、先頭から順に、有効であることを示す有効／無効フラグが対応付けられているストライプ番号を処理対象として、当該処理対象のストライプ番号に対応付けられている各ＳＳＤ６０のドライブ番号に対応するブロック番号を各々取得して（ステップＳ７３）、以下の処理を繰り返す。ＲＡＩＤコントローラ５０は、代替ＳＳＤのフリーブロックを確保して当該ブロックのブロック番号を取得する（ステップＳ７４）。そして、ＲＡＩＤコントローラ５０は、ステップＳ７３で取得した各ＳＳＤ６０のうち、変更前ＳＳＤ以外のＳＳＤ６０に対応するブロック番号のブロックにおいてページ順にページ単位で有効データ又は冗長情報を読み出して、当該データ及び冗長情報を用いて、排他的論理和(ＸＯＲ)を計算して、変更前ＳＳＤに書き込まれていたデータを復元して、代替ＳＳＤにおいてステップＳ７４で確保したフリーブロックに当該データを書き込む（ステップＳ７５）。次いで、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域において当該処理対象のストライプ番号に対応する行に、代替ＳＳＤのドライブ番号に対応するブロック番号として、ステップＳ７４で取得したブロック番号を記憶させることにより、２段目アドレス変換テーブル７６ｂを更新する（ステップＳ７６）。以上の処理を、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶されているストライプ番号のうち、有効であることを示す有効／無効フラグが対応付けられているストライプ番号の全てに対して行うと（ステップＳ７７：ＹＥＳ）、処理を終了する。
【００４３】
以上のように、本実施の形態によれば、ライトペナルティ及びパリティの更新頻度を低減して、半導体記憶装置であるＳＳＤの寿命の低下を防止可能になる。
【００４４】
また、本実施の形態によれば、誤り訂正符号の構成に関する指示に応じて、ＲＡＩＤコントローラ５０に接続されたＳＳＤ６０のうち誤り訂正符号を構成するためのＳＳＤ６０の諸元の情報を用いて、管理テーブル７６を構築することで、ＳＳＤ６０のうち誤り訂正符号を構成するためのＳＳＤ６０が故障等によって代替ＳＳＤに変更されても、データを代替ＳＳＤに移動させて、管理テーブル７６を再構築することが可能になる。このため、ＳＳＤ６０の故障に拠らず、サーバ１００からの要求に応じたデータの読み出しを高い精度で行うことが可能になり、極めて高い信頼性を実現することができる。
【００４５】
[第２の実施の形態]
次に、半導体記憶制御装置の第２の実施の形態について説明する。なお、上述の第１の実施の形態と共通する部分については、同一の符号を使用して説明したり、説明を省略したりする。
【００４６】
上述の第１の実施の形態においては、誤り訂正符号を構成する複数のＳＳＤ６０において、ブロックサイズ及びページサイズは全て同一であることを前提とした。しかし、ブロックサイズやページサイズがそれぞれ同じであるＳＳＤ６０を揃えて誤り訂正符号を構成したとしても、後に故障が発生してＳＳＤ６０から代替ＳＳＤへの変更が必要になった際に、ブロックサイズやページサイズが同じＳＳＤ６０を入手できるとは限らない。このため、本実施の形態においては、複数のＳＳＤのうちブロックサイズ及びページサイズのうち少なくとも一方が異なるＳＳＤが含まれていても誤り訂正符号を構成可能にするＲＡＩＤコントローラ５０の構成について説明する。
【００４７】
ここで、まず、ブロックサイズやページサイズが異なる代替ＳＳＤが誤り訂正符号を構成するためにＲＡＩＤコントローラ５０に接続された場合に必要となる変換について説明する。上述の第１の実施の形態で説明した１段目アドレス変換テーブル７６ａを記憶する記憶領域及び２段目アドレス変換テーブル７６ｂを記憶する記憶領域は、誤り訂正符号を構成するためのＳＳＤ６０のブロックサイズ及びページサイズに基づいて静的に構築される。このため、この構築時のブロックサイズやページサイズと異なるブロックサイズやページサイズの代替ＳＳＤがＲＡＩＤコントローラ５０に接続され誤り訂正符号を構成するために用いられるとすると、１段目アドレス変換テーブル７６ａが記憶されている記憶領域及び２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶されている、代替ＳＳＤに変更される前のＳＳＤ６０（変更前ＳＳＤ）の物理アドレスを、代替ＳＳＤの物理アドレスに変換する必要がある。
【００４８】
この物理アドレスの変換は、ブロックサイズ及びページサイズのそれぞれについて、変更前ＳＳＤの値が代替ＳＳＤの値より大きい場合、等しい場合及び小さい場合の３通りがあるため、合計で９通りの場合分けがある。
【００４９】
ここで、１段目アドレス変換テーブル７６ａ及び２段目アドレス変換テーブル７６ｂにより特定されるブロックを変更前ブロックと呼び、そのブロック番号を変更前ブロック番号と呼び、代替ＳＳＤのブロックを代替ブロックと呼び、そのブロック番号を代替ブロック番号と呼ぶことにする。同様に、１段目アドレス変換テーブル７６ａ及び２段目アドレス変換テーブル７６ｂにより特定されるページを変更前ページと呼び、そのページ番号を変更前ページ番号と呼び、代替ＳＳＤのページを代替ページと呼び、そのページ番号を代替ページ番号と呼ぶことにする。また、１段目アドレス変換テーブル７６ａを記憶する記憶領域及び２段目変換テーブル７６ｂを記憶する記憶領域の構築の前提となっているブロックサイズ及びページサイズをそれぞれ変更前ブロックサイズ及び変更前ページサイズと呼ぶことにし、代替ＳＳＤのブロックサイズ及びページサイズをそれぞれ代替ブロックサイズ及び代替ページサイズと呼ぶことにする。
【００５０】
図９は、物理アドレスの変換を場合分けした９通りの例を示す図である。同図では、ブロックサイズ及びページサイズが異なる例としてそれぞれ一方が他方の2倍である例を示しており、以下の説明でも、その例について説明するが、一方が他方の２のべき乗であれば、２倍でなくても良い。尚、この９通りの場合分けには、ブロックサイズ及びページサイズが等しい場合も含まれているが（図中２行２列目参照）、この場合は上述の第１の実施の形態と同様であるため、ここではその説明を省略する。
【００５１】
まず、代替ページサイズ及び変更前ページサイズが等しく、代替ブロックサイズが変更前ブロックサイズより大きい場合について説明する（図中１行２列目参照）。この場合、２つの変更前ブロックが１つの代替ブロックに収まるため、変更前ブロックと代替ブロックとを２対１で対応させる。なお、代替ブロックの数が変更前ブロックの数以上である場合には、変更前ブロックと代替ブロックを１対１に対応させて、代替ブロック内のページを余らせるようにしても良く、この場合には、変換は不要である。
【００５２】
次に、代替ページサイズ及び変更前ページサイズが等しく、代替ブロックサイズが変更前ブロックサイズより小さい場合について説明する（図中３行２列目参照）。この場合、１つの変更前ブロックを２つの代替ブロックに分割する、即ち、変更前ブロックと代替ブロックとを１対２に対応させる。
【００５３】
次に代替ページサイズが変更前ページサイズより小さく、代替ブロックサイズ及び変更前ブロックサイズが等しい場合について説明する（図中２行１列目参照）。この場合、１つの変更前ページを２つの代替ページに分割する。
【００５４】
次に、代替ページサイズが変更前ページサイズより大きく、代替ブロックサイズ及び変更前ブロックサイズが等しい場合について説明する（図中２行３列目参照）。この場合、２つの変更前ページを１つの代替ページに合併させる。このため、２ページ分の書き込みが１回で行われる必要があり、書き込みタイミングの調整が必要となる。
【００５５】
次に、代替ページサイズが変更前ページサイズより小さく、代替ブロックサイズが変更前ブロックサイズより大きい場合について説明する（図中１行１列目参照）。この場合、２つの変更前ブロックが１つの代替ブロックに収まり、１つの変更前ページを２つの代替ページに分割する。
【００５６】
次に、代替ページサイズが変更前ページサイズより大きく、代替ブロックサイズが変更前ブロックサイズより大きい場合について説明する（図中１行３列目参照）。この場合、２つの変更前ブロックが１つの代替ブロックに収まり、連続する２つの変更前ページが１つの代替ページに合併される。このため、２ページ分の書き込みが１回で行われる必要があり、書き込みタイミングの調整が必要となる。
【００５７】
次に、代替ページサイズが変更前ページサイズより小さく、代替ブロックサイズが変更前ブロックサイズより小さい場合について説明する（図中３行１列目参照）。この場合、１つの変更前ブロックが２つの代替ブロックに分割され、１つの変更前ページも２つの代替ページに分割する。
【００５８】
次に、代替ページサイズが変更前ページサイズより大きく、代替ブロックサイズが変更前ブロックサイズより小さい場合について説明する（図中３行３列目参照）。この場合、１つの変更前ブロックが２つの代替ブロックに分割され、連続する２つの変更前ページが１つの代替ページに合併される。このため、２ページ分の書き込みが１回で行われる必要があり、書き込みタイミングの調整が必要となる。
【００５９】
次に、以上のような物理アドレスの変換を行うための本実施の形態に係るＲＡＩＤコントローラ５０の機能的構成について図１０を用いて説明する。本実施の形態においては、ＲＡＩＤコントローラ５０の有するバッファ制御部７１は、書き込みタイミング制御部７１ａを有し、アドレス変換部７２は、変換制御部７２ａを有し、管理テーブル７６は、３段目アドレス変換テーブル７６ｃを更に有する。
【００６０】
上述の第１の実施の形態においては、バッファ制御部７１は、サーバ通信部５１からｗｒｉｔｅコマンドを受け取り、データバッファ７５に記憶させたデータが１ストライプ分の誤り訂正符号を構成可能に揃ったときに、１ストライプ分の誤り訂正符号を構成可能なデータ及び当該データの誤りを訂正するために用いられる冗長情報のＳＳＤ６０への書き込みを要求するｗｒｉｔｅコマンドをデバイス制御部５３に送った。一方、本実施の形態においては、代替ＳＳＤのページサイズ(代替ページサイズ)が変更前ページサイズより大きい場合には、複数ストライプ分の書き込みを一括して行う必要があるため、バッファ制御部７１の有する書き込みタイミング制御部７１ａは、代替ＳＳＤのページサイズに応じた数のストライプ分の誤り訂正符号を生成するための対象となるデータが揃うまで、データをデータバッファ７５にバッファリングさせて、データバッファ７５に記憶させたデータであって当該数のストライプ分の誤り訂正符号を生成するための対象となるデータが揃ったときに、当該数のストライプ分の誤り訂正符号を生成するための対象となるデータ及び当該データの誤りを訂正するために用いられる冗長情報のＳＳＤ６０への書き込みを要求するｗｒｉｔｅコマンドをデバイス制御部５３に送る。
【００６１】
この書き込みタイミング制御部７１ａは、図１１に示されるように、データバッファ７５上に、データや冗長情報をページ単位で記憶するデータ格納バッファ、冗長情報の格納位置を指すパリティ格納ポインタ、データの格納位置を示すデータ格納ポインタ及び１回の書き込みで同時に書き込みを行うストライプ数を示す書き込み単位情報を管理して、データ及び冗長情報をＳＳＤ６０へ書き込むタイミングを制御する。具体的な制御の方法については後述の動作欄で説明する。
【００６２】
管理テーブル構築部７３は、誤り訂正符号を構成するためのＳＳＤ６０が変更される場合、代替ＳＳＤのブロックサイズ及びページサイズのうち少なくとも一方が変更前ＳＳＤであるＳＳＤ６０のものと異なる場合、３段目アドレス変換テーブル７６ｃを記憶する記憶領域を構築して、管理テーブルを再構築する。３段目アドレス変換テーブル７６ｃは、代替ＳＳＤのブロックサイズが変更前ＳＳＤであるＳＳＤ６０のものと異なる場合、その代替ＳＳＤ専用に物理アドレスを変換するために、変更前ＳＳＤの変更前ブロック及び代替ＳＳＤの代替ブロックの対応関係を示す情報である。３段目アドレス変換テーブル７６ｃを記憶する記憶領域を構築する具体的な方法について後述の動作欄で説明する。
【００６３】
アドレス変換部７２の変換制御部７２ａは、３段目アドレス変換テーブル７６ｃを参照して、変更前ＳＳＤの変更前ブロック番号及び変更前ページ番号を代替ＳＳＤ用に補正して代替ブロック番号及び代替ページ番号に変換する。
【００６４】
図１２は、変換制御部７２ａの内部構成を例示する図である。変換制御部７２ａは、ブロック番号変換部７２ｂと、ページ番号変換部７２ｃとを有する。ブロック番号変換部７２ｂは、１段目アドレス変換テーブル７６ａ及び２段目アドレス変換テーブル７６ｂにより得られたブロック番号（変更前ブロック番号）及びページ番号(変更前ページ番号)を用いて、代替ブロック番号及び中間ページ番号に変換してこれを出力する。ページ番号変換部７２ｃは、ブロック番号変換部７２ｂが出力した代替ブロック番号及び中間ページ番号を用いて、代替ページ番号に変換してこれを出力する。
【００６５】
ここで、ブロック番号変換部７２ｂが行う変換について図１３を用いて説明する。この変換は、変更前ブロックサイズ及び代替ブロックサイズの大小関係により異なる。変更前ブロックサイズが代替ブロックサイズより大きい場合には、１つの変更前ブロックを複数の代替ブロックに分割する、即ち、変更前ブロック及び代替ブロックを１対２に対応させるため、ブロック分割数(変更前ブロックサイズを代替ブロックサイズで割った商)を「2^N」とすると、変更前ブロック番号をキーとして2^N列の「変更前>代替型」の３段目アドレス変換テーブル７６ｃを記憶する記憶領域が構築され、この記憶領域には、変更前ブロックの変更前ブロック番号及び代替ブロックの代替ブロック番号の対応関係が記憶される。ブロック番号変換部７２ｂは、変更前ブロック番号をキーとして３段目アドレス変換テーブル７６ｃを参照して、変更前ページ番号の上位Nビットで列を選択し、代替ブロック番号を取得してこれを出力する。また、ブロック番号変換部７２ｂは、変更前ページ番号から上位Nビットを削除した下位ビットを中間ページ番号として出力する。
【００６６】
一方、変更前ブロックサイズが代替ブロックサイズより小さい場合には、複数の変更前ブロックが１つの代替ブロックに収まる。この場合に構築される「物理>論理型」の３段目アドレス変換テーブル７６ｃを記憶する記憶領域では、ある変更前ブロックが割当てられる代替ブロックの代替ブロック番号と、その代替ブロックの先頭からのオフセットとが記憶される。ブロック番号変換部７２ｂは、変更前ブロック番号をキーとして３段目アドレス変換テーブル７６ｃを参照して、変更前ページ番号の上位Nビットで列を選択し、代替ブロック番号及びオフセットを取得してこれを出力する。また、ブロック番号変換部７２ｂは、変更前ページ番号にオフセットを加えることにより中間ページ番号を取得してこれを出力する。
【００６７】
また、変更前ブロックサイズと代替ブロックサイズとが等しい場合には、３段目アドレス変換テーブル７６ｃは生成されず、ブロック番号変換部７２ｂによる変換は不要であり、ブロック番号変換部７２ｂは、変更前ブロック番号をそのまま代替ブロック番号として出力し、変更前ページ番号を中間ページ番号として出力する。
【００６８】
次に、ページ番号変換部７２ｃが行う変換について図１４を用いて説明する。この変換は、変更前ページサイズ及び代替ページサイズの大小関係により異なる。変更前ページサイズが代替ページサイズより大きい場合には、ページ分割数(変更前ページサイズを代替ページサイズで割った商)を「2^M」とすると、ページ番号変換部７２ｃは、ブロック番号変換部７２ｂが出力した中間ページ番号を左にMビットシフトして、割当てられた複数ページの先頭のページのページ番号を取得しこれを代替ページ番号として出力する。
【００６９】
一方、変更前ページサイズが代替ページサイズより小さい場合には、ページ分割数(代替ページサイズを変更前ページサイズで割った商)を2^Mとすると、ページ番号変換部７２ｃは、ブロック番号変換部７２ｂが出力した中間ページ番号を右にMビットシフトして割当てられた代替ページ番号を取得し、中間ページ番号の下位Mビットにより、取得した代替ページ番号の代替ページ内の位置を特定するためのオフセットを取得して、当該代替ページ番号及びオフセットを出力する。
【００７０】
次に、本実施の形態に係るＲＡＩＤコントローラ５０が行う処理の手順について説明する。まず、ＲＡＩＤコントローラ５０が、書き込みタイミング制御部７１ａの機能により、データ及び冗長情報をＳＳＤ６０へ書き込むタイミングを制御する処理の手順について図１５を用いて説明する。まず、書き込みタイミング制御部７１ａは、書き込み単位情報がストライプ数「１」を示すように設定し、パリティ格納ポインタがデータ格納バッファの先頭を指すように設定し、冗長情報の値を「０」に設定し、データ格納ポインタがデータ格納バッファの２番目のページを指すように設定することにより、パリティ格納ポインタ、データ格納ポインタ及び書き込み単位情報を初期化する（ステップＳ９０）。そして、書き込みタイミング制御部７１ａは、サーバ通信部５１からｗｒｉｔｅコマンドを受け取ると、当該ｗｒｉｔｅコマンドによって書き込みが要求されたデータをデータ格納ポインタによって示される格納位置に記憶させると共に、冗長情報（初期状態では「０」である）との排他的論理和を計算してこれをパリティ格納ポインタによって示される格納位置に記憶させ、データ格納ポインタを１つインクリメントする（ステップＳ９１）。そして、書き込みタイミング制御部７１ａは、データ格納バッファに記憶されたデータであって、１ストライプ分の誤り訂正符号を生成するための対象となるデータが揃う度に、即ち、データ格納バッファに記憶されたデータが所定の数の倍数に達する度に（ステップＳ９２：ＹＥＳ）、書き込み単位情報によって示されるストライプ数を参照し、データバッファ７５に記憶されているデータ数が当該ストライプ数に達しているか否かを判断し、当該データ数が当該ストライプ数に達していたら（ステップＳ９３：ＹＥＳ）、当該ストライプ数の誤り訂正符号を生成するための対象となるデータ及び当該データの誤りを訂正するために用いられる冗長情報のＳＳＤ６０への書き込みを要求するｗｒｉｔｅコマンドをデバイス制御部５３に送り、パリティ格納ポインタがデータ格納バッファの先頭を指すように初期化し、冗長情報も初期化して「０」として記憶させ、データ格納ポインタがデータ格納バッファの２番目のページを指すように初期化する（ステップＳ９４）。一方、データバッファ７５に記憶されているデータ数が、書き込み単位情報によって示されるストライプ数に達していなかったら（ステップＳ９３：ＮＯ）、書き込みタイミング制御部７１ａは、データ格納ポインタによって示される格納位置をパリティ格納ポインタが指すようにパリティ格納ポインタを設定し、パリティ格納ポインタによって示される格納位置に冗長情報として初期化した「０」を記憶させ、データ格納ポインタを１インクリメントする（ステップＳ９５）。
【００７１】
次に、ＲＡＩＤコントローラ５０が、変更前ＳＳＤに記憶されたデータを代替ＳＳＤに復元する処理の手順について図１６を用いて説明する。ＲＡＩＤコントローラ５０は、管理テーブル構築部７３の機能により、代替ＳＳＤの諸元の情報（ブロック数、ブロックサイズ、ページサイズ）を取得する（ステップＳ１００）。尚、代替ＳＳＤの容量が、誤り訂正符号を構成するための他のＳＳＤ６０より小さい場合は、当該代替ＳＳＤを用いて誤り訂正符号を再構成することは不可能であるため、代替ＳＳＤの容量が他のＳＳＤ６０以上であるか否かを確認する処理は必要であるが、図１６ではその確認の処理を省略してある。次に、ＲＡＩＤコントローラ５０は、ステップＳ１００で取得したブロックサイズ（代替ブロックサイズ）及びページサイズ（代替ページサイズ）のそれぞれを変更前ＳＳＤのブロックサイズである変更前ブロックサイズ及び変更前ＳＳＤのページサイズである変更前ページサイズと比較する。また、ＲＡＩＤコントローラ５０は、ステップＳ１００で取得したブロック数が、誤り訂正符号を構成する他のＳＳＤ６０のブロック数以上であるか否かを確認する（ステップＳ１０１）。尚、ステップＳ１００で取得したブロック数が、誤り訂正符号を構成する他のＳＳＤ６０のブロック数より小さい場合であっても、２段目アドレス変換テーブル７６ｂに記憶されている総ストライプ数(ブロック数よりは少ない)以上である場合もブロック数に関する条件を満たしているとしても良い。代替ブロックサイズ及び代替ページサイズのうち少なくとも一方が比較対象と異なる場合には（ステップＳ１０２：ＮＯ）、ＲＡＩＤコントローラ５０は、３段目アドレス変換テーブル７６ｃを生成する処理Ａを行なってから、ステップＳ１０３に進む。当該処理Ａの手順については後述する。代替ブロックサイズ及び代替ページサイズの双方が比較対象と等しい場合には（ステップＳ１０２：ＹＥＳ）、ＲＡＩＤコントローラ５０は、当該処理Ａを行わずに、ステップＳ１０３に進む。
【００７２】
ステップＳ１０３では、ＲＡＩＤコントローラ５０は、変更前ブロックサイズと代替ブロックサイズとの大小関係を比較し、変更前ブロックサイズが代替ブロックサイズより大きい場合には、処理Ｂを行ない、変更前ブロックサイズと代替ブロックサイズとが等しい場合には処理Ｃを行ない、変更前ブロックサイズが代替ブロックサイズより小さい場合には処理Ｄを行なう。
【００７３】
次に、３段目アドレス変換テーブル７６ｃを生成する処理Ａの手順について図１７を用いて説明する。ＲＡＩＤコントローラ５０は、代替ＳＳＤのページサイズ(代替ページサイズ)と、変更前ページサイズとの大小関係を比較して（ステップＳ１１０）、変更前ページサイズより代替ページサイズが大きい場合には(ステップＳ１１１：ＹＥＳ)、代替ページサイズを変更前ページサイズで割った値(商)を示す書き込み単位情報をデータバッファ７５に記憶させて（ステップＳ１１２）、ステップＳ１１３に進む。変更前ページサイズより代替ページサイズが等しいか小さい場合 (ステップＳ１１１：ＮＯ)も、ステップＳ１１３に進む。ステップＳ１１３では、ＲＡＩＤコントローラ５０は、変更前ブロックサイズと代替ブロックサイズとの大小関係を比較し、変更前ブロックサイズが代替ブロックサイズより小さい場合には、「変更前<代替型」の３段目アドレス変換テーブル７６ｃを生成してメモリ５４の記憶領域に記憶させることにより、３段目アドレス変換テーブル７６ｃを記憶する記憶領域を構築する（ステップＳ１１４）。変更前ブロックサイズが代替ブロックサイズより大きい場合には、「変更前>代替型」の３段目アドレス変換テーブル７６ｃを生成してメモリ５４の記憶領域に記憶させることにより、３段目アドレス変換テーブル７６ｃを記憶する記憶領域を構築する（ステップＳ１１５）。尚、変更前ブロックサイズと代替ブロックサイズと等しい場合には、３段目アドレス変換テーブル７６ｃの生成は不要である。この場合、変更前ブロック番号はそのまま代替ブロック番号と等しくなる。
【００７４】
次に、変更前ブロックサイズが代替ブロックサイズより大きい場合に行う処理Ｂの手順について図１８を用いて説明する。この場合、上述したように、「変更前>代替型」の３段目アドレス変換テーブル７６ｃがメモリ５４に記憶されている。ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶されているストライプ番号のうち、有効であることを示す有効／無効フラグが対応付けられているストライプ番号を先頭から順に、処理対象のストライプ番号として以下の処理を行う（ステップＳ１２０）。まず、ＲＡＩＤコントローラ５０は、処理対象のストライプ番号と対応付けられている変更前ＳＳＤのドライブ番号に対応付けられているブロック番号（変更前ブロック番号）を取得して（ステップＳ１２１）、当該変更前ブロック番号を３段目アドレス変換テーブル７６ｃが記憶されている記憶領域に記憶させる。次に、ＲＡＩＤコントローラ５０は、代替ＳＳＤにおいて、変更前ブロックサイズを代替ブロックサイズで割った商の個数分のフリーブロックを確保し、それらのブロックのブロック番号を取得して、これらのブロック番号を３段目アドレス変換テーブル７６ｃの変更前ブロック番号に対応する代替ブロック番号として、３段目アドレス変換テーブル７６ｃが記憶されている記憶領域に各々記憶させる（ステップＳ１２２）。次に、ＲＡＩＤコントローラ５０は、処理対象のストライプ番号と対応付けられている変更前ＳＳＤ以外の他のＳＳＤ６０のドライブ番号に各々対応付けられているブロック番号のブロックの先頭のページから順にページ単位でデータ又は冗長情報を読み出し、代替ＳＳＤに復元するデータを計算する処理Ｅを行う。以上の処理を処理対象となる全てのストライプ番号に対してＲＡＩＤコントローラ５０は行う。ＲＡＩＤコントローラ５０がこれを行い終えると（ステップＳ１２４:ＹＥＳ）、変更前ＳＳＤに記憶されたデータが全て代替ＳＳＤに復元される。
【００７５】
次に、代替ＳＳＤに復元するデータを計算する処理Ｅについて図１９を用いて説明する。ＲＡＩＤコントローラ５０は、図１８のステップＳ１２３で読み出したデータ又は冗長情報を用いて、排他的論理和を計算して、変更前ＳＳＤに記憶されたページ単位のデータを計算する（ステップＳ１３０）。次に、ＲＡＩＤコントローラ５０は、変更前ページサイズと代替ページサイズとの大小関係を比較して（ステップＳ１３１）、変更前ページサイズが代替ページサイズより大きい場合、ステップＳ１３０で計算したデータを、代替ＳＳＤにおいて確保したフリーブロック内で書き込みがまだ行われていないページの先頭から順に複数ページ(変更前ページサイズを代替ページサイズで割った商のページ数)に渡り連続して書き込む（ステップＳ１３２）。尚、フリーブロック内で書き込みがまだ行われていないページは、上述した追記ポインタにより示されるようにすれば良い。
【００７６】
一方、変更前ページサイズと代替ページサイズとが等しい場合、変更前ページが代替ページに１対１に対応するため、ＲＡＩＤコントローラ５０は、ステップＳ１３０で計算したデータを、代替ＳＳＤにおいて確保したフリーブロック内で書き込みがまだ行われていないページの先頭に書き込む（ステップＳ１３３）。一方、変更前ページサイズが代替ページサイズより小さい場合、ステップＳ１３０で計算した１ページ分のデータだけでは代替ページに満たないので、ＲＡＩＤコントローラ５０は、代替ページを満たすページ分のデータが揃うまで当該データをデータバッファ７５にバッファリングさせて、代替ページを満たすページ分のデータが揃ったときに当該データを、代替ＳＳＤにおいて確保したフリーブロック内で書き込みがまだ行われていないページに書き込む（ステップＳ１３４）。以上の処理を処理対象となる全てのストライプ番号に対してＲＡＩＤコントローラ５０は行う。ＲＡＩＤコントローラ５０がこれを行い終えると（ステップＳ１３５:ＹＥＳ）、変更前ＳＳＤに記憶されたデータが全て代替ＳＳＤに復元される。
【００７７】
次に、変更前ブロックサイズと代替ブロックサイズとが等しい場合に行う処理Ｃの手順について図２０を用いて説明する。この場合、上述したように、３段目アドレス変換テーブル７６ｃは生成されず、変更前ブロック番号はそのまま代替ブロック番号と等しくなる。また、この場合、ＲＡＩＤコントローラ５０は、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶されたストライプ番号に対応付けられた変更前ＳＳＤのドライブ番号を代替ＳＳＤのドライブ番号に予め変更しても良い。ステップＳ１２０は上述した処理Ｂの場合と同様である。ステップＳ１４０では、ＲＡＩＤコントローラ５０は、代替ＳＳＤにおいてフリーブロックを１つ確保し、そのブロック番号を、２段目アドレス変換テーブル７６ｂが記憶されている記憶領域に記憶された処理対象のストライプ番号に対応付けられた代替ＳＳＤのブロック番号として記憶させる（ステップＳ１４１）。ステップＳ１２３は上述した処理Ｂの場合と同様である。処理Ｅは上述した通りである。以上の処理を処理対象となる全てのストライプ番号に対してＲＡＩＤコントローラ５０は行う。ＲＡＩＤコントローラ５０がこれを行い終えると（ステップＳ１２４:ＹＥＳ）、変更前ＳＳＤに記憶されたデータが全て代替ＳＳＤに復元される。
【００７８】
次に、変更前ブロックサイズが代替ブロックサイズより小さい場合に行う処理Ｄの手順について図２１を用いて説明する。この場合、上述したように、「物理>論理型」の３段目アドレス変換テーブル７６ｃがメモリ５４に記憶されている。ステップＳ１２０〜Ｓ１２１は上述した処理Ｂの場合と同様である。ここでは、複数の変更前ブロックが１つの代替ブロックに割当てられるため、代替ＳＳＤで１つのフリーブロックを確保した場合、そのブロックに対して、複数のストライプ番号に対応して復元されるデータが書き込まれることになる。即ち、１つのストライプ番号に対応して復元されたデータが代替ＳＳＤの１つのブロックに書き込まれたとしても、当該ブロック内で書き込みがまだ行われていないページが残っており、ＲＡＩＤコントローラ５０は、当該ページに他のストライプ番号に対応して復元されるデータを書き込むことになる。このため、ステップＳ１５０では、ＲＡＩＤコントローラ５０は、ストライプ番号に対応してデータが復元される代替ＳＳＤで確保されたフリーブロックにおいて書き込みがまだ行われていないページが残っているか又は１つ前の処理対象のストライプ番号に対応して復元されたデータの書き込みにより、書き込みがまだ行われていないページがなくなったかを判断する。代替ＳＳＤで確保されたフリーブロックにおいて書き込みがまだ行われていないページがなくなった場合（ステップＳ１５０：ＮＯ）、ＲＡＩＤコントローラ５０は、代替ＳＳＤにおいて新たなフリーブロックを１つ確保し、当該フリーブロックのブロック番号（代替ブロック番号）を取得して（ステップＳ１５２）、ステップＳ１５３に進む。このブロックには先頭のページから書き込みを行なうため、ＲＡＩＤコントローラ５０は、オフセットを「０」として取得する。尚、一番初めに処理対象のストライプ番号に対応してデータが復元される場合も、ＲＡＩＤコントローラ５０は、ステップＳ１５２の処理を行う。一方、書き込みがまだ行われていないページの残っているブロックがある場合（ステップＳ１５０：ＹＥＳ）、ＲＡＩＤコントローラ５０は、当該ブロックのブロック番号（代替ブロック番号）を取得して、当該ブロックにおいて書き込みがまだ行われていない先頭のページのページ番号を取得して、これをオフセットとして取得して（ステップＳ１５１）、ステップＳ１５３に進む。ステップＳ１５３では、ＲＡＩＤコントローラ５０は、代替ブロック番号及びオフセットを、ステップＳ１２１で取得したブロック番号（変更前ブロック番号と対応付けて３段目アドレス変換テーブル７６ｃが記憶されている記憶領域に記憶させる。ステップＳ１２３は上述した処理Ｂの場合と同様である。以上の処理を処理対象となる全てのストライプ番号に対してＲＡＩＤコントローラ５０は行う。ＲＡＩＤコントローラ５０がこれを行い終えると（ステップＳ１２４）、変更前ＳＳＤに記憶されたデータが全て代替ＳＳＤに復元される。
【００７９】
このように、第２の実施の形態によれば、ブロックサイズ及びページサイズのうち少なくとも一方が他のＳＳＤと異なる代替ＳＳＤを用いても誤り訂正符号を構成することが可能になる。
【００８０】
以上説明した通り、第１から第２の実施の形態によれば、ライトペナルティ及びパリティの更新頻度を低減して、半導体記憶装置であるＳＳＤの寿命の低下を防止可能になる。
【００８１】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。また、以下に例示するような種々の変形が可能である。
【００８２】
上述した各実施の形態において、ＲＡＩＤコントローラ５０で実行される各種プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また当該各種プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供するように構成しても良い。
【００８３】
上述した各実施の形態において、ＲＡＩＤコントローラ５０は、管理テーブル７６の初期化を行う際、誤り訂正符号の構成に関する指示を受け付けるようにしたが、これに限らず、誤り訂正符号の構成に関して予め定められた方法に基づいて、１段目アドレス変換テーブル７６ａ及び２段目アドレス変換テーブル７６ｂを生成するようにしても良い。
【００８４】
上述した各実施の形態において、ＲＡＩＤコントローラ５０は、読み出し対象のデータにエラーがあった場合に、当該データが書き込まれたブロック（エラーブロックという）全体の修復を行うようにしても良い。図２２は、本変形例に係るデータを読み出す処理の手順を示すフローチャートである。ステップＳ５１〜Ｓ５５は上述の第１の実施の形態と同様である。ステップＳ５５の後、ステップＳ６０では、ＲＡＩＤコントローラ５０は、エラーの発生した読み出し対象のデータが書き込まれていたＳＳＤ６０において新たなフリーブロックを確保する。そして、ＲＡＩＤコントローラ５０は、ステップＳ５５で特定したブロック番号によって特定されるブロックに書き込まれた他のデータ及び冗長情報の読み出しをページ順に各ＳＳＤ６０に要求する。この要求に応じて、各ＳＳＤ６０からページ順に各データ及び冗長情報が読み出されて、ＲＡＩＤコントローラ５０に渡される。この結果、ＲＡＩＤコントローラ５０は、誤り訂正符号を構成していたデータのうち、エラーブロックに書き込まれていたデータを除く他のデータ及び冗長情報を得る（ステップＳ６１）。そして、ＲＡＩＤコントローラ５０は、当該他のデータ及び冗長情報を用いて、排他的論理和(ＸＯＲ)を計算して、訂正できない誤りがあったデータの復元を行い、当該データをステップＳ６０で確保したフリーブロックに書き込む（ステップＳ６２）。そして、ＲＡＩＤコントローラ５０は、エラーブロックに書き込まれていた有効データ全てについてページ順にステップＳ６１〜Ｓ６２の処理を行い、当該処理が終了すると（ステップＳ６３：ＹＥＳ）、ステップＳ５８では、読み出しが要求されたデータであり復元が行われたデータをｒｅａｄコマンドの応答としてサーバ１００に送信する。
【００８５】
このように、読み出し対象のデータにエラーがあった場合、当該データが書き込まれたブロックに書き込まれた有効データ全体を新たなフリーブロックに移動させることにより、当該有効データの読み出しの際のエラーを防止することが可能になる。
【００８６】
上述の各実施の形態においては、所定の単位として、ページを取り扱ったが、これに限らない。また、ＳＳＤ６０の物理的な記憶位置を示す物理アドレスとして、ブロック番号及びページ番号を取り扱ったが、これに限らない。
【００８７】
上述の各実施の形態においては、ＲＡＩＤコントローラ５０は、サーバ１００から書き込みが要求されたデータがページサイズより大きい場合にはこれをページ単位で複数に分割して、分割したページ単位のデータを所定の数用いて、１ストライプ分の誤り訂正符号を構成するようにすれば良い。また、ＲＡＩＤコントローラ５０は、サーバ１００から指定された論理アドレスを用いて、分割した各データに対する論理アドレスを割り当てるようにして、当該論理アドレス及び当該各データを書き込んだ物理アドレスの対応関係を管理テーブル７６に記憶させるようにすれば良い。
【００８８】
尚、ログ構造化ファイルシステムでは、小ブロックの書き込み毎にはパリティを計算する必要がないため、ライトペナルティが発生しないという利点がある。しかし、この方式では、ファイルシステムの構造が規定されてしまうため、ユーザは所望のファイルシステムを選択できないという欠点がある。
【００８９】
上述の各実施の形態においては、管理テーブル７６は行を有する例を記載したが、行の対象となる各データの対応付けがされていれば他の形式でも良い。例えば、管理テーブル７６はリスト形式で表現されていても良い。
【符号の説明】
【００９０】
５０  ＲＡＩＤコントローラ
５１  サーバ通信部
５２  コントローラ
５３  デバイス制御部
５４  メモリ
７０  サーバ通信制御部
７１  バッファ制御部
７１ａ  タイミング制御部
７２  アドレス変換部
７２ａ  変換制御部
７２ｂ  ブロック番号変換部
７２ｃ  ページ番号変換部
７３  管理テーブル構築部
７４  デバイス制御部
７５  データバッファ
７６  管理テーブル
７６ａ  １段目アドレス変換テーブル
７６ｂ  ２段目アドレス変換テーブル
７６ｃ  ３段目アドレス変換テーブル
８０  管理テーブル記憶部
１００  サーバ
【図１】
0005388976.tif 000002
【図２】
0005388976.tif 000003
【図３】
0005388976.tif 000004
【図４】
0005388976.tif 000005
【図５】
0005388976.tif 000006
【図６】
0005388976.tif 000007
【図７】
0005388976.tif 000008
【図８】
0005388976.tif 000009
【図９】
0005388976.tif 000010
【図１０】
0005388976.tif 000011
【図１１】
0005388976.tif 000012
【図１２】
0005388976.tif 000013
【図１３】
0005388976.tif 000014
【図１４】
0005388976.tif 000015
【図１５】
0005388976.tif 000016
【図１６】
0005388976.tif 000017
【図１７】
0005388976.tif 000018
【図１８】
0005388976.tif 000019
【図１９】
0005388976.tif 000020
【図２０】
0005388976.tif 000021
【図２１】
0005388976.tif 000022
【図２２】
0005388976.tif 000023