(57)【要約】【課題】複数のＳＳＤを用いて冗長化したストレージ装置において、半導体メモリのブロック故障によるデータの冗長性喪失をより早期に回復する技術を提供すること。【解決手段】ＳＳＤは、半導体メモリに格納されるデータの物理アドレスと論理アドレスとの対応関係を記憶し、コントローラからデータの読み書き要求を受信すると（ステップＳ１〜Ｓ２）、該要求の示す論理アドレスにアクセスし（ステップＳ３）、アクセスが失敗すると（ステップＳ４でＮｏ）、該領域を含む故障ブロックに格納されたデータの論理アドレスのリストをコントローラに送信し（ステップＳ６〜Ｓ８）、コントローラは、受信した論理アドレスを未修復論理アドレスとして記憶し（ステップＳ９）、未修復論理アドレスの修復データを冗長情報に基づいて生成してその書き込み要求をＳＳＤに送信し（ステップＳ１０）、ＳＳＤは、他のブロックに修復データを書き込む（ステップＳ１１）。【選択図】      図８
2014041524.tif 000002
【特許請求の範囲】
【請求項１】
複数のブロックから構成される記憶領域を有する半導体メモリと、
前記半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係を記憶したアドレス対応情報記憶部と、
上位装置からデータの読み込みまたは書き込みの要求を受信すると、該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行する読み書き処理部と、
前記物理アドレスの示す領域に対する前記読み書き処理部によるアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信する故障論理アドレスリスト送信部と、
前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込むよう前記読み書き処理部に通知する修復データ処理部と、
を備えた半導体記憶装置。
【請求項２】
前記修復データ処理部は、前記故障ブロックを代替可能な他のブロック（代替ブロック）を選定し、前記アクセスに失敗したデータの修復データが前記上位装置から受信されると、該修復データを前記代替ブロックに書き込むよう前記読み書き処理部に通知し、
前記故障論理アドレスリスト送信部は、前記故障ブロックに格納されており未だ代替ブロックに格納されていないデータの論理アドレスのリスト（代替論理アドレスリスト）を前記故障論理アドレスリストとして前記上位装置に送信し、
前記修復データ処理部は、前記代替論理アドレスリストに含まれる論理アドレスの修復データが前記上位装置から受信されると、前記代替ブロックに該修復データを書き込むよう前記読み書き処理部に通知することを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
請求項１または請求項２に記載の複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを制御する冗長化制御部と、
前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得する故障論理アドレスリスト取得部と、
前記故障論理アドレスリスト取得部によって取得された故障論理アドレスリストに含まれる論理アドレスを記憶する未修復論理アドレスリスト記憶部と、
前記未修復論理アドレスリスト記憶部に記憶される論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信する修復部と、
を備えたストレージ制御装置。
【請求項４】
前記故障論理アドレスリスト取得部は、前記故障論理アドレスリストとして、前記代替論理アドレスリストを前記半導体記憶装置から取得することを特徴とする請求項３に記載のストレージ制御装置。
【請求項５】
請求項１または請求項２に記載の複数の半導体記憶装置と、
請求項３または請求項４に記載のストレージ制御装置と、
を備えたストレージ装置。
【請求項６】
複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係をアドレス対応情報記憶部に記憶し、
上位装置からデータの読み込みまたは書き込みの要求を受信すると、
該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、
特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行し、
前記物理アドレスの示す領域に対するアクセスが失敗すると、
該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信し、
前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む、半導体記憶装置制御方法。
【請求項７】
半導体メモリをそれぞれ搭載して請求項６に記載の半導体記憶装置制御方法により制御される複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを実行する際に、
前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、
該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得して未修復論理アドレスリストとして記憶し、
前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、
該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信する、ストレージ制御方法。
【請求項８】
半導体記憶装置は、
複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係をアドレス対応情報記憶部に記憶しておき、
ストレージ制御装置からデータの読み込みまたは書き込みの要求を受信すると、
該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、
特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行し、
前記物理アドレスの示す領域に対するアクセスが失敗すると、
該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記ストレージ制御装置に送信し、
前記ストレージ制御装置は、
前記半導体記憶装置から受信される前記故障論理アドレスリストを未修復論理アドレスリストとして記憶し、
前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、
該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信し、
前記半導体記憶装置は、
前記修復データを受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む、ストレージ制御方法。
【請求項９】
複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係を記憶したアドレス対応情報記憶部を用いて、
上位装置からデータの読み込みまたは書き込みの要求を受信する読み書き要求受信ステップと、
該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行する読み書き実行ステップと、
前記物理アドレスの示す領域に対するアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信する故障論理アドレスリスト送信ステップと、
前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む修復データ書き込みステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【請求項１０】
半導体メモリおよび請求項９に記載のコンピュータ・プログラムを実行する制御装置を搭載した複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを要求する読み書き要求ステップと、
前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得する故障論理アドレスリスト取得ステップと、
前記故障論理アドレスリストに含まれる論理アドレスを未修復論理アドレスリストとして記憶し、前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成する修復データ生成ステップと、
該論理アドレスに対する前記修復データの書き込み要求を前記半導体記憶装置に送信する修復データ書き込み要求ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体メモリを搭載した複数の半導体記憶装置を用いて冗長化されたストレージ装置において、半導体メモリの故障したブロックに含まれるデータを修復する技術に関する。
【背景技術】
【０００２】
一般に、ストレージ装置では、高性能化およびデータ保全などの観点から、複数の記憶装置を用いた冗長化構成が採用されている。このような冗長化構成を実現する技術としては、ＲＡＩＤ（Redundant Arrays of Inexpensive/Independent Disks）がよく知られている。このようなＲＡＩＤ構成における記憶装置としては、ＨＤＤ（Hard Disk Drive）が用いられてきた。
【０００３】
近年、ＲＡＩＤ構成における記憶装置として、ＳＳＤ（Solid State Drive）を用いたストレージ装置が知られている（例えば、特許文献１参照）。ＳＳＤとは、フラッシュメモリ等の半導体メモリを用いた半導体記憶装置であり、ＨＤＤよりもランダムアクセスが高速である。
【０００４】
代表的なＳＳＤは、ＮＡＮＤ型フラッシュメモリを搭載する。このようなＳＳＤでは、データの消去は、ＮＡＮＤ型フラッシュメモリの記憶領域を構成するブロックの単位で実行される。また、データの書き込みは、データが消去されたブロックに対して、ページ単位で追記されることにより行われる。ブロックのデータサイズは、ＳＳＤの種別によって異なる。
【０００５】
また、このようなＳＳＤを用いたストレージ装置は、ＳＳＤに対するデータの書き込みアドレスを、ブロックにおける物理アドレスとは無関係に論理アドレスで指定する。このとき、ＳＳＤは、空きページのあるブロックに、データを割り当てる。そのため、ストレージ装置が、連続した論理アドレスのデータをＳＳＤに書き込んだとしても、それらのデータが同じブロックに連続して書き込まれるとは限らない。また、ストレージ装置は、あるブロックに格納されたデータがどの論理アドレスのデータであるかを判断することは出来ない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１６５０６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載されたストレージ装置は、ＲＡＩＤを構成するあるＳＳＤにおいてあるブロックが故障すると、そのブロックに格納されたデータに対応する論理アドレスにアクセスしたときに、その故障を検出することになる。そこで、このようなストレージ装置は、故障したブロックを含むＳＳＤ以外の他のＳＳＤに格納された冗長情報を用いて、そのデータを修復する。
【０００８】
このとき、故障したブロックには、アクセスされた論理アドレス以外の他の論理アドレスのデータが格納されている可能性がある。しかしながら、このようなストレージ装置は、故障したブロックに含まれる他の論理アドレスのデータについては、その論理アドレスがアクセスされるまでデータ破損を検出することができない。つまり、そのようなデータは、破損しているにも関わらず、すぐに修復されない。このため、このような未修復のデータは、既に冗長性が失われている。したがって、このようなストレージ装置は、このような未修復のデータを検出する前に、そのデータの冗長情報を格納する他のＳＳＤが故障すると、データロストを生じてしまう。
【０００９】
本発明は、上述の課題を解決するためになされたもので、複数の半導体記憶装置を用いて冗長化したストレージ装置において、半導体記憶装置の記憶領域を構成するブロックの故障によるデータの冗長性喪失をより早期に回復し、データロストを防ぐ技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の半導体記憶装置は、複数のブロックから構成される記憶領域を有する半導体メモリと、前記半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係を記憶したアドレス対応情報記憶部と、上位装置からデータの読み込みまたは書き込みの要求を受信すると、該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行する読み書き処理部と、前記物理アドレスの示す領域に対する前記読み書き処理部によるアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信する故障論理アドレスリスト送信部と、前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込むよう前記読み書き処理部に通知する修復データ処理部と、を備える。
【００１１】
また、本発明のストレージ制御装置は、複数の前記半導体記憶装置に冗長化されて格納されるデータに対する読み書きを制御する冗長化制御部と、前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得する故障論理アドレスリスト取得部と、前記故障論理アドレスリスト取得部によって取得された故障論理アドレスリストに含まれる論理アドレスを記憶する未修復論理アドレスリスト記憶部と、前記未修復論理アドレスリスト記憶部に記憶される論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信する修復部と、を備える。
【００１２】
また、本発明のストレージ装置は、複数の前記半導体記憶装置と、前記ストレージ制御装置とを備える。
【００１３】
また、本発明の半導体記憶装置制御方法は、複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係をアドレス対応情報記憶部に記憶し、上位装置からデータの読み込みまたは書き込みの要求を受信すると、該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行し、前記物理アドレスの示す領域に対するアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信し、前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む。
【００１４】
また、本発明のストレージ制御方法は、半導体メモリをそれぞれ搭載して上述の半導体記憶装置制御方法により制御される複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを実行する際に、前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得して未修復論理アドレスリストとして記憶し、前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信する。
【００１５】
また、本発明の他のストレージ制御方法は、半導体記憶装置は、複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係をアドレス対応情報記憶部に記憶しておき、ストレージ制御装置からデータの読み込みまたは書き込みの要求を受信すると、該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行し、前記物理アドレスの示す領域に対するアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記ストレージ制御装置に送信し、前記ストレージ制御装置は、前記半導体記憶装置から受信される前記故障論理アドレスリストを未修復論理アドレスリストとして記憶し、前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信し、前記半導体記憶装置は、前記修復データを受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む。
【００１６】
また、本発明のコンピュータ・プログラムは、複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係を記憶したアドレス対応情報記憶部を用いて、上位装置からデータの読み込みまたは書き込みの要求を受信する読み書き要求受信ステップと、該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行する読み書き実行ステップと、前記物理アドレスの示す領域に対するアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信する故障論理アドレスリスト送信ステップと、前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む修復データ書き込みステップと、をコンピュータ装置に実行させる。
【００１７】
また、本発明の他のコンピュータ・プログラムは、上述のコンピュータ・プログラムを実行する制御装置を搭載した複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを要求する読み書き要求ステップと、前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得する故障論理アドレスリスト取得ステップと、前記故障論理アドレスリストに含まれる論理アドレスを未修復論理アドレスリストとして記憶し、前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成する修復データ生成ステップと、該論理アドレスに対する前記修復データの書き込み要求を前記半導体記憶装置に送信する修復データ書き込み要求ステップと、をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明の効果】
【００１８】
本発明は、複数の半導体記憶装置を用いて冗長化したストレージ装置において、半導体記憶装置の記憶領域を構成するブロックの故障によるデータの冗長性喪失をより早期に回復し、データロストを防ぐ技術を提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施の形態としてのストレージ装置の構成を示すブロック図である。
【図２】本発明の第１の実施の形態としての半導体記憶装置（ＳＳＤ）の機能ブロック図である。
【図３】本発明の第１の実施の形態における論理アドレスの一例を説明するための模式図である。
【図４】本発明の第１の実施の形態における半導体メモリの各ブロックに格納されるデータの一例を説明するための模式図である。
【図５】本発明の第１の実施の形態におけるアドレス対応情報記憶部に格納される情報の一例を説明する図である。
【図６】本発明の第１の実施の形態としてのストレージ制御装置（コントローラ）の機能ブロック図である。
【図７】本発明の第１の実施の形態における未修復論理アドレスリスト記憶部に登録される情報の一例を説明する図である。
【図８】本発明の第１の実施の形態としてのストレージ装置の動作を説明するフローチャートである。
【図９】本発明の第１の実施の形態としてのストレージ装置のデータ修復動作を説明するフローチャートである。
【図１０】本発明の第１の実施の形態における半導体メモリの各ブロックに格納されるデータの他の一例を説明するための模式図である。
【図１１】本発明の第１の実施の形態におけるアドレス対応情報記憶部に格納される情報の他の一例を説明する図である。
【図１２】本発明の第２の実施の形態としてのストレージ装置の構成を示すブロック図である。
【図１３】本発明の第２の実施の形態としての半導体記憶装置（ＳＳＤ）の機能ブロック図である。
【図１４】本発明の第２の実施の形態における代替論理アドレスリストの一例を説明する図である。
【図１５】本発明の第２の実施の形態としてのストレージ制御装置（コントローラ）の機能ブロック図である。
【図１６】本発明の第２の実施の形態としてのストレージ装置の動作を説明するフローチャートである。
【図１７】本発明の第２の実施の形態としてのストレージ装置のデータ修復動作を説明するフローチャートである。
【図１８】（ａ）〜（ｄ）は、本発明の第２の実施の形態における未修復論理アドレスリストの一例を説明する図である。
【図１９】本発明の第２の実施の形態における半導体メモリの各ブロックに格納されるデータの他の一例を説明するための模式図である。
【図２０】本発明の第２の実施の形態におけるアドレス対応情報記憶部に格納される情報の他の一例を説明する図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２１】
（第１の実施の形態）
本発明の第１の実施の形態としてのストレージ装置１の構成を図１に示す。
【００２２】
図１において、ストレージ装置１は、複数のＳＳＤ１０と、コントローラ２０とを含む。ＳＳＤ１０は、本発明の半導体記憶装置の一実施形態を構成する。コントローラ２０は、本発明のストレージ制御装置の一実施形態を構成する。図１において、複数のＳＳＤ１０は、１つ以上の冗長化構成部を構成している。１つの冗長化構成部は、例えばＲＡＩＤ（Redundant Arrays of Inexpensive/Independent Disks）等の技術により、データを冗長化して記憶するための複数のＳＳＤ１０からなる。以下、１つ以上の冗長化構成部をまとめて記憶部１００とも記載する。
【００２３】
また、ストレージ装置１は、１つ以上のホスト装置９に接続されている。ホスト装置９は、ストレージ装置１に対してデータの読み書きを要求する装置である。ホスト装置９は、ＣＰＵ（Central Processing Unit）と、ＲＡＭ（Random Access Memory）と、ＲＯＭ（Read Only Memory）と、ハードディスクドライブ等の記憶装置とを備えたコンピュータ装置であってもよい。
【００２４】
なお、図１には、３つの冗長化構成部を示しているが、本発明のストレージ装置に備えられる半導体記憶装置が構成する冗長化構成部の数を限定するものではない。また、図１には、２つのホスト装置９を示しているが、本発明のストレージ装置が接続されるホスト装置の数を限定するものではない。
【００２５】
ＳＳＤ１０の構成を図２に示す。
【００２６】
図２において、ＳＳＤ１０は、半導体メモリ１１と、アドレス対応情報記憶部１２と、読み書き処理部１３と、故障論理アドレスリスト送信部１４と、修復データ処理部１５とを備える。ここで、ＳＳＤ１０は、半導体メモリ１１を構成する１つ以上の不揮発性の半導体メモリチップと、ＣＰＵと、ＲＡＭと、ＲＯＭと、上位装置との通信を行うインタフェースとを搭載している。アドレス対応情報記憶部１２は、半導体メモリ１１の記憶領域の一部によって構成される。読み書き処理部１３、故障論理アドレスリスト送信部１４および修復データ処理部１５は、ＲＯＭに記憶されたコンピュータ・プログラムをＲＡＭに読み込んで実行するＣＰＵと、インタフェースとによって構成される。なお、ＳＳＤ１０に搭載されるハードウェア構成およびＳＳＤ１０の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
【００２７】
半導体メモリ１１は、例えば、ＮＡＮＤ型フラッシュメモリチップによって構成され、その記憶領域は、複数のブロックから構成される。１つのブロックは、複数のページから構成される。ＮＡＮＤ型フラッシュメモリの場合、データの読み書きはページ単位で行われ、消去はブロック単位で行われる。図２の例では、半導体メモリ１１の記憶領域は、Ｎ（Ｎは１以上の整数）個のブロックからなり、ｉ番目のブロックをブロック＃ｉとも記載している。また、１つのブロックは、４ページから構成されている。なお、図２に示したブロック数およびページ数は、本発明における半導体メモリの記憶領域を構成するブロック数および各ブロックを構成するページ数を限定するものではない。
【００２８】
アドレス対応情報記憶部１２は、ホスト装置９が用いるデータの論理アドレスと、半導体メモリ１１上の記憶領域においてそのデータが格納される領域の物理アドレスとの対応関係を記憶している。
【００２９】
ここで、論理アドレスは、ホスト装置９によって指定され、記憶装置の記憶領域におけるアクセス位置を論理的に識別するための情報である。論理アドレスは、例えば、ＬＢＡ（Logical Block Address）によって表される。ＬＢＡが示すデータの一例を、図３に示す。図３において、＃００〜＃ＮＭは、ＬＢＡの一例を表している。また、図３において、Ａ０〜Ａ３、Ｂ０〜Ｂ３、Ｃ０〜Ｃ３、および、Ｄ０〜Ｄ３は、各ＬＢＡが示すデータの一例を表している。
【００３０】
また、物理アドレスは、ＳＳＤ１０の記憶領域における物理的な記憶位置を表す。例えば、物理アドレスは、ブロック番号およびページ番号の組み合わせによって表される。半導体メモリ１１がＮＡＮＤ型フラッシュメモリである場合、書き込み対象のデータは、後述の読み書き処理部１３によって、その論理アドレスとは無関係に空いているページに書き込まれる。また、以前に書き込みが指定された論理アドレスと同一の論理アドレスに対する書き込みの場合、その論理アドレスに対応付けられていた物理アドレスのデータが無効化され、新たな空きページに新たなデータが書き込まれる。そして、その論理アドレスには、新たな空きページの物理アドレスが対応付けられる。したがって、半導体メモリ１１の各ブロックは、論理アドレスの連続しないデータを格納しているケースも多くなる。また、アドレス対応情報記憶部１２に記憶される情報は、読み書き処理部１３によって、書き込みが行われるたびに更新される。
【００３１】
図４に、半導体メモリ１１の各ブロックに格納されるデータの一例を示す。図４では、図３に示した論理アドレスの示すデータが各ブロックの各ページに格納されている。例えば、論理アドレス＃０２の示すデータＡ２は、ブロック＃０の１ページ目に記憶されている。また、論理アドレス＃１３の示すデータＢ３は、ブロック＃０の２ページ目に記憶されている。
【００３２】
また、図４の例に対応するアドレス対応情報記憶部１２に記憶される情報の一例を、図５に示す。図５の各行は、各ブロックの示す領域に格納されるデータの論理アドレスを示している。例えば、図５の１行目は、ブロック＃０には、論理アドレス＃０２、＃１３、＃２１、＃３０の示す各データが格納されていることを示している。また、２行目は、ブロック＃Ｎには、論理アドレス＃Ｎ０、＃Ｎ１の示す各データが格納されていることを示している。
【００３３】
このようなアドレス対応情報記憶部１２に記憶される情報は、後述の読み書き処理部１３によって、読み書き処理対象の論理アドレスに対応する物理アドレスを特定する際に参照される。また、アドレス対応情報記憶部１２に記憶される情報は、後述の故障論理アドレスリスト送信部１４によって、故障ブロックのブロック番号に対応する論理アドレスを取得する際にも参照される。なお、アドレス対応情報記憶部１２に記憶される情報は、論理アドレスから物理アドレスに変換可能かつ物理アドレスのブロック番号から論理アドレスに変換可能なデータ構造であれば、図５に一例を示したデータ構造以外の形式であってもよい。
【００３４】
読み書き処理部１３は、コントローラ２０からの読み込みまたは書き込みの要求に含まれる論理アドレスに対応する物理アドレスを特定する。そして、読み書き処理部１３は、特定した物理アドレスの示す半導体メモリ１１の記憶領域にアクセスして、その要求の示す処理を実行する。例えば、書き込みの場合、読み書き処理部１３は、アドレス対応情報記憶部１２を参照することにより、空きページの物理アドレスを選定して書き込みを実行し、該当する論理アドレスおよび物理アドレスを対応付けてアドレス対応情報記憶部１２を更新する。そして、読み書き処理部１３は、書き込みの完了をコントローラ２０に通知する。また、読み込みの場合、読み書き処理部１３は、アドレス対応情報記憶部１２を参照することにより、該当する論理アドレスに対応する物理アドレスを特定して読み込みを実行する。そして、読み書き処理部１３は、読み込んだデータをコントローラ２０に送信する。
【００３５】
また、読み書き処理部１３は、物理アドレスの示す領域に対するアクセスが失敗すると、その物理アドレスの示す領域を含むブロックを故障ブロックと判定する。そして、読み書き処理部１３は、コントローラ２０に対してエラー応答を送信する。また、読み書き処理部１３は、故障ブロックと判定したブロック番号を記憶しておいてもよい。故障ブロックとして記憶されたブロックは、以降、書き込み対象から除外される。
【００３６】
故障論理アドレスリスト送信部１４は、物理アドレスの示す領域に対する読み書き処理部１３によるアクセスが失敗すると、故障論理アドレスリストをコントローラ２０に送信する。ここで、故障論理アドレスリストとは、故障ブロックに格納されているデータの論理アドレスのリストである。例えば、故障論理アドレスリスト送信部１４は、アドレス対応情報記憶部１２を参照することにより故障ブロックのブロック番号に対応する論理アドレスを、故障論理アドレスリストとして取得可能である。
【００３７】
また、故障論理アドレスリスト送信部１４は、コントローラ２０からの故障論理アドレスリストの取得要求に応じて、故障論理アドレスリストを送信してもよい。あるいは、故障論理アドレスリスト送信部１４は、読み書き処理部１３によってコントローラ２０に送信される前述のエラー応答に、故障論理アドレスリストを含めて送信してもよい。
【００３８】
修復データ処理部１５は、故障論理アドレスリストに含まれる論理アドレスの修復データをコントローラ２０から受信すると、故障ブロックとは異なる他のブロックを選定する。そして、修復データ処理部１５は、選定したブロックに、受信した修復データを書き込むよう読み書き処理部１３に通知する。
【００３９】
次に、コントローラ２０の構成を図６に示す。
【００４０】
コントローラ２０は、冗長化制御部２１と、故障論理アドレスリスト取得部２２と、未修復論理アドレスリスト記憶部２３と、修復部２４とを備える。ここで、コントローラ２０は、ホスト装置９との通信を行うホストインタフェースと、ＳＳＤ１０との通信を行うデバイスインタフェースと、ＣＰＵと、ＲＡＭと、ＲＯＭとを搭載している。冗長化制御部２１は、ホストインタフェースと、デバイスインタフェースと、ＲＯＭに記憶されたコンピュータ・プログラムをＲＡＭに読み込んで実行するＣＰＵとによって構成される。故障論理アドレスリスト取得部２２および修復部２４は、デバイスインタフェースと、ＲＯＭに記憶されたコンピュータ・プログラムをＲＡＭに読み込んで実行するＣＰＵとによって構成される。未修復論理アドレスリスト記憶部２３は、ＲＡＭによって構成される。なお、コントローラ２０に搭載されるハードウェア構成およびコントローラ２０の各機能ブロックを構成するハードウェア構成は、上述の構成に限定されない。
【００４１】
冗長化制御部２１は、複数のＳＳＤ１０に冗長化されて格納されるデータの読み書きを制御する。
【００４２】
具体的には、冗長化制御部２１は、データの書き込み要求をホスト装置９から受信すると、そのデータと、そのデータを含む情報から算出される冗長情報とを、１つの冗長化構成部を構成する複数のＳＳＤ１０に分散して記憶させる。例えば、冗長化制御部２１は、ＲＡＩＤ技術を用いて、データおよび冗長情報の書き込みを行ってもよい。例えば、冗長化制御部２１は、書き込み対象のデータを所定数受信するまで該当するデータおよびその論理アドレスを一時記憶し、所定数の書き込み対象データが揃うと、それらのデータから冗長情報を算出するようにしてもよい。この場合、冗長化制御部２１は、それらのデータおよび冗長情報の書き込み先としてそれぞれ異なるＳＳＤ１０を決定し、各データの書き込み要求を、それぞれ決定したＳＳＤ１０に対して送信するようにすればよい。そして、冗長化制御部２１は、各データの論理アドレスと該データの格納先のＳＳＤ１０との対応関係、冗長情報の算出に用いたデータの組み合わせ、および、冗長情報の格納先のＳＳＤ１０等を記憶しておくようにする。
【００４３】
また、冗長化制御部２１は、データに対する読み込み要求をホスト装置９から受信すると、該当するデータを格納したＳＳＤ１０に対して、データの読み込み要求を送信する。例えば、冗長化制御部２１は、読み込み要求に含まれる論理アドレスに基づいて、該当するデータが格納されたＳＳＤ１０を特定する。そして、冗長化制御部２１は、特定したＳＳＤ１０に対して、論理アドレスを指定した読み込み要求を送信すればよい。
【００４４】
また、冗長化制御部２１は、ＳＳＤ１０に送信した書き込み要求に対して、書き込み完了通知またはエラー応答をＳＳＤ１０から受信する。また、冗長化制御部２１は、ＳＳＤ１０に送信した読み込み要求に対して、読み込み対象データまたはエラー応答をＳＳＤ１０から受信する。
【００４５】
故障論理アドレスリスト取得部２２は、冗長化制御部２１によってＳＳＤ１０からエラー応答が受信されると、故障論理アドレスリストをＳＳＤ１０から取得する。ここで、故障論理アドレスリストとは、前述のように、ＳＳＤ１０における故障ブロックに格納されていたデータの論理アドレスのリストである。また、故障ブロックとは、前述のように、読み込みまたは書き込みのためのアクセスに失敗した物理アドレスの領域を含むブロックである。
【００４６】
また、故障論理アドレスリスト取得部２２は、ＳＳＤ１０からエラー応答を受信すると、故障論理アドレスリストの取得要求をＳＳＤ１０に対して送信することにより、故障論理アドレスリストを取得してもよい。あるいは、故障論理アドレスリスト取得部２２は、ＳＳＤ１０からのエラー応答として、故障論理アドレスリストを含むエラー応答を取得してもよい。故障論理アドレスリスト取得部２２は、取得した故障論理アドレスリストに含まれる論理アドレスを、未修復論理アドレスリスト記憶部２３に登録する。
【００４７】
未修復論理アドレスリスト記憶部２３は、故障論理アドレスリストに含まれている論理アドレスのうち、後述の修復部２４によって未だ修復されていない論理アドレス（未修復論理アドレスリスト）を保持する。未修復論理アドレスリストの一例を図７に示す。図７において、各行は、エラー応答の受信時毎に、故障論理アドレスリスト取得部２２によって受信された故障論理アドレスリストを示している。図７の例では、各故障論理アドレスリストには、リスト番号が付与されている。
【００４８】
修復部２４は、未修復論理アドレスリストに含まれる論理アドレスの示すデータを修復する。修復部２４は、該当するデータを、その冗長情報に基づいて修復可能である。例えば、修復部２４は、該当する論理アドレスのデータの冗長情報を算出する際に用いられた他のデータと、冗長情報とをそれぞれ他のＳＳＤ１０から読み出すことにより、それらの情報を用いて、該当するデータを修復した修復データを生成すればよい。そして、修復部２４は、該当する論理アドレスの示すデータが格納されていたＳＳＤ１０に対して、修復データの書き込み要求を送信する。そして、修復部２４は、修復データの書き込みが完了した論理アドレスを、未修復論理アドレスリストから順次削除していくようにすればよい。
【００４９】
以上のように構成されたストレージ装置１の動作について、図８を参照して説明する。
【００５０】
なお、図８において、左図はＳＳＤ１０の動作を示し、右図はコントローラ２０の動作を示し、左右を結ぶ破線の矢印はデータの流れを表すものとする。
【００５１】
まず、コントローラ２０の冗長化制御部２１は、ホスト装置９から、記憶部１００に対するデータの書き込みまたは読み込みの要求を受信する（ステップＳ１）。
【００５２】
次に、冗長化制御部２１は、ステップＳ１で受信された要求が示す論理アドレスに対する書き込みまたは読み込みの要求を、ＳＳＤ１０に送信する（ステップＳ２）。
【００５３】
このとき、冗長化制御部２１は、書き込み要求であれば、例えばＲＡＩＤ等により冗長情報を生成し、該当するデータおよび冗長情報の書き込み先として異なるＳＳＤ１０を決定して、決定した各ＳＳＤ１０に対して該当するデータおよび冗長情報の書き込み要求を送信すればよい。また、冗長化制御部２１は、読み込み要求であれば、該当するデータの格納先として記憶しておいたＳＳＤ１０に対して、該当するデータの読み込み要求を送信すればよい。
【００５４】
次に、要求を受信したＳＳＤ１０の読み書き処理部１３は、アドレス対応情報記憶部１２を参照することにより、該当する論理アドレスに対応する物理アドレスを特定し、特定した物理アドレスの示す半導体メモリ１１の領域にアクセスする（ステップＳ３）。
【００５５】
次に、読み書き処理部１３は、アクセスが成功したか否かを判断する（ステップＳ４）。
【００５６】
ここで、アクセスに成功した場合、読み書き処理部１３は、アクセスした領域に対する読み書き処理を実行し、処理結果をコントローラ２０に送信する（ステップＳ５）。そして、ストレージ装置１は、動作を終了する。
【００５７】
一方、ステップＳ４において、物理アドレスの示す領域に対するアクセスに失敗した場合、読み書き処理部１３は、該当する領域を含むブロックを故障ブロックと判定し、エラー応答を、コントローラ２０に送信する（ステップＳ６）。
【００５８】
次に、エラー応答を受信したコントローラ２０の故障論理アドレスリスト取得部２２は、
ＳＳＤ１０に対して、故障論理アドレスリストの取得要求を送信する（ステップＳ７）。
【００５９】
次に、故障論理アドレスリストの取得要求を受信したＳＳＤ１０の故障論理アドレスリスト送信部１４は、アドレス対応情報記憶部１２を参照することにより、故障ブロックのブロック番号に対応する論理アドレスのリストを、故障論理アドレスリストとしてコントローラ２０に送信する（ステップＳ８）。
【００６０】
次に、故障論理アドレスリストを受信したコントローラ２０の修復部２４は、故障論理アドレスリストに含まれる論理アドレスを未修復論理アドレスリストに登録する（ステップＳ９）。
【００６１】
次に、修復部２４は、未修復論理アドレスリストに含まれる論理アドレスについて修復データを生成し、修復データをＳＳＤ１０に書き込む（ステップＳ１０〜Ｓ１１）。ステップＳ１０〜Ｓ１１の詳細については後述する。
【００６２】
以上で、ストレージ装置１は、動作を終了する。
【００６３】
なお、以上の動作において、ＳＳＤ１０の故障論理アドレスリスト送信部１４は、コントローラ２０からの故障論理アドレスリスト取得要求に応じて故障論理アドレスリストを送信する（ステップＳ７〜Ｓ８）ものとして説明した。この他、故障論理アドレスリスト送信部１４は、ステップＳ６で送信されるエラー応答に故障論理アドレスリストを含めるようにしてもよい。この場合、ストレージ装置１は、ステップＳ７〜Ｓ８の動作を省略可能である。
【００６４】
次に、ステップＳ１０〜Ｓ１１の動作の詳細について、図９を参照して説明する。
【００６５】
図９では、修復部２４は、未修復論理アドレスリストに含まれる各論理アドレスについて、以下のステップＳ２１〜Ｓ２５の処理を実行する。
【００６６】
ここでは、まず、修復部２４は、この論理アドレスの示すデータについて、冗長情報を用いて、修復データを生成する（ステップＳ２１）。例えば、前述のように、修復部２４は、アクセスに失敗したデータの冗長情報と、その冗長情報の算出時に用いられた他のデータとを、それぞれ他のＳＳＤ１０から取得し、取得した冗長情報および他のデータを用いて修復データを生成すればよい。
【００６７】
次に、修復部２４は、修復データの書き込み要求を、この論理アドレスの示すデータが格納されていたＳＳＤ１０に対して送信する（ステップＳ２２）。
【００６８】
次に、修復データの書き込み要求を受信したＳＳＤ１０の修復データ処理部１５は、故障ブロックとは異なる他のブロックの空きページを選定する。そして、読み書き処理部１３は、選定されたブロックに修復データを書き込む（ステップＳ２３）。このとき、読み書き処理部１３は、修復データの論理アドレスに対して新たに選定した物理アドレスを対応付けてアドレス対応情報記憶部１２を更新する。そして、読み書き処理部１３は、修復データの書き込み完了をコントローラ２０に通知する。
【００６９】
次に、修復データの書き込み完了を通知されたコントローラ２０の修復部２４は、未修復論理アドレスリストからこの論理アドレスを削除する（ステップＳ２４）。
【００７０】
次に、修復部２４は、未修復論理アドレスリストに他の論理アドレスが残っているか否かを判断する（ステップＳ２５）。
【００７１】
未修復論理アドレスリストに他の論理アドレスが残っていれば、修復部２４は、その論理アドレスについて、ステップＳ２１〜Ｓ２５の処理を実行する。
【００７２】
未修復論理アドレスリストに他の論理アドレスが残っていなければ、ストレージ装置１は、ステップＳ１０〜Ｓ１１の動作を終了する。
【００７３】
以上で、ステップＳ１０〜Ｓ１１における動作の詳細な説明を終了する。
【００７４】
なお、ステップＳ２３において、修復データの書き込み先として選定したブロックへのアクセスに失敗した場合、ストレージ装置１は、そのブロックを故障ブロックと判定し、新たに判定した故障ブロックについてもステップＳ６〜Ｓ１１の動作を実行すればよい。
【００７５】
次に、ストレージ装置１の動作の具体例について説明する。なお、ＳＳＤ１０の半導体メモリ１１の各ブロックには、図４に一例を示したデータが格納されており、アドレス対応情報記憶部１２には、図５に一例を示した情報が記憶されているものとする。
【００７６】
図４では、半導体メモリ１１のブロック＃０には、論理アドレス＃０２、＃１３、＃２１、＃３０のそれぞれ示すデータＡ２、Ｂ３、Ｃ１、Ｄ０が格納されている。この状態で、ブロック＃０が故障したことを想定する。
【００７７】
このとき、ホスト装置９が、論理アドレス＃０２の示すデータの読み込みをストレージ装置１に要求したとする（ステップＳ１）。
【００７８】
そこで、コントローラ２０の冗長化制御部２１は、論理アドレス＃０２に対する読み込み要求を、論理アドレス＃０２の示すデータが格納されたＳＳＤ１０に対して送信する（ステップＳ２）。
【００７９】
次に、ＳＳＤ１０の読み書き処理部１３は、論理アドレス＃０２に対応する物理アドレスを含むブロック＃０にアクセスするが、失敗する（ステップＳ３、Ｓ４でＮｏ）。
【００８０】
そこで、読み書き処理部１３は、エラー応答をコントローラ２０に送信する（ステップＳ６）。
【００８１】
次に、コントローラ２０の故障論理アドレスリスト取得部２２は、故障論理アドレスリストの取得要求を、ＳＳＤ１０に送信する（ステップＳ７）。
【００８２】
次に、ＳＳＤ１０の故障論理アドレスリスト送信部１４は、図５に示したアドレス対応情報記憶部１２から、ブロック＃０に対応する論理アドレスリスト「＃０２、＃１３、＃２１、＃３０」を取得し、これらを故障論理アドレスリストとして、コントローラ２０に送信する（ステップＳ８）。
【００８３】
次に、修復部２４は、故障論理アドレスリスト「＃０２、＃１３、＃２１、＃３０」を、未修復論理アドレスリストに登録する。これにより、図７に示した未修復論理アドレスリストが生成される。
【００８４】
次に、修復部２４は、未修復論理アドレスリストに含まれる論理アドレス＃０２の示すデータの冗長情報、および、その冗長情報を算出するために用いられた他のデータを他のＳＳＤ１０から取得し、修復データ“Ａ２”を生成する（ステップＳ２１）。
【００８５】
次に、修復部２４は、論理アドレスリスト＃０２の修復データ“Ａ２”の書き込み要求を、ＳＳＤ１０に送信する（ステップＳ２２）。
【００８６】
次に、ＳＳＤ１０の修復データ処理部１５は、論理アドレス＃０２の修復データ“Ａ２”の格納先として、故障したブロック＃００以外で空きページのあるブロックとして、ブロック＃１を選定したとする。そこで、読み書き処理部１３は、ブロック＃１に、論理アドレスリスト＃０２の修復データ“Ａ２”を書き込む（ステップＳ２３）。また、読み書き処理部１３は、アドレス対応情報記憶部１２を更新する。
【００８７】
そして、修復部２４は、未修復論理アドレスリストから、論理アドレス＃０２を削除する（ステップＳ２４）。
【００８８】
同様にして、コントローラ２０の修復部２４は、未修復論理アドレスリストに未だ残っている論理アドレス＃１３の修復データ“Ｂ３”を生成する。そして、ＳＳＤ１０の修復データ処理部１５は、論理アドレス＃１３の書き込み先としてブロック＃１を選定したとする。そこで、読み書き処理部１３は、修復データ“Ｂ３”をブロック＃１に書き込む。そして、修復部２４は、未修復論理アドレスリストから、論理アドレス＃１３を削除する（ステップＳ２１〜Ｓ２４）。
【００８９】
続いて、コントローラ２０の修復部２４は、未修復論理アドレスリストに未だ残っている論理アドレス＃２１の修復データ“Ｃ１”を生成する。そして、ＳＳＤ１０の修復データ処理部１５は、論理アドレス＃２１の書き込み先としてブロック＃２を選定したとする。そこで、読み書き処理部１３は、修復データ“Ｃ１”をブロック＃２に書き込む。そして、修復部２４は、未修復論理アドレスリストから、論理アドレス＃２１を削除する（ステップＳ２１〜Ｓ２４）。
【００９０】
続いて、コントローラ２０の修復部２４は、未修復論理アドレスリストに未だ残っている論理アドレス＃３０の修復データ“Ｄ０”を生成する。そして、ＳＳＤ１０の修復データ処理部１５は、論理アドレス＃３０の書き込み先としてブロック＃２を選定したとする。そこで、読み書き処理部１３は、修復データ“Ｄ０”をブロック＃２に書き込む。そして、修復部２４は、未修復論理アドレスリストから、論理アドレス＃３０を削除する（ステップＳ２１〜Ｓ２４）。これにより、未修復論理アドレスリストは、空となる。
【００９１】
そして、未修復論理アドレスリストが空になったので（ステップＳ２５でＹｅｓ）、ストレージ装置１は、動作を終了する。これにより、故障ブロック＃０に格納されていたデータは、図１０に示すように他のブロックに格納され修復された。また、アドレス対応情報記憶部１２に記憶される情報は、図１１に示すように更新された。
【００９２】
以上で、ストレージ装置１の動作の具体例の説明を終了する。
【００９３】
次に、本発明の第１の実施の形態の効果について述べる。
【００９４】
本発明の第１の実施の形態としてのストレージ装置は、複数の半導体記憶装置を用いて冗長化したストレージ装置において、半導体記憶装置の記憶領域を構成するブロックの故障によるデータの冗長性喪失をより早期に回復し、データロストを防ぐことができる。
【００９５】
その理由は、ＳＳＤ（半導体記憶装置）の読み書き処理部が、コントローラ（ストレージ制御装置）からの書き込みまたは読み込み要求による物理アドレスの示す領域へのアクセスに失敗すると、その物理アドレスを含むブロックを故障ブロックと判定し、故障論理アドレスリスト送信部が、故障ブロックに格納されるデータの論理アドレスのリストをコントローラに送信するからである。そして、コントローラの修復部が、ＳＳＤから取得した故障論理アドレスの修復データを冗長情報を用いて生成し、修復データをＳＳＤに書き込むからである。これにより、本実施の形態のストレージ装置は、故障ブロックを検出した時点で、故障したブロックに含まれる全てのデータの論理アドレスを取得できるので、それらの論理アドレスに対するホスト装置からのアクセスを待つことなく、故障論理アドレスリストの示す破損データを早期に修復可能となる。その結果、ストレージ装置１は、データの冗長性を維持し、データロストを防ぐことができる。
【００９６】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００９７】
本発明の第２の実施の形態としてのストレージ装置２の構成を図１２に示す。図１２において、ストレージ装置２は、本発明の第１の実施の形態としてのＳＳＤ１０に替えてＳＳＤ３０と、コントローラ２０に替えてコントローラ４０とを備える。複数のＳＳＤ３０は、本発明の第１の実施の形態と同様に、１つ以上の冗長化構成部を構成し、１つの冗長化構成部は、ＲＡＩＤ等によりデータを冗長化するための複数のＳＳＤ３０により構成される。また、ストレージ装置２は、本発明の第１の実施の形態と同様に、ホスト装置９に接続されている。
【００９８】
次に、ＳＳＤ３０の構成を図１３に示す。図１３において、ＳＳＤ３０は、本発明の第１の実施の形態としてのＳＳＤ１０に対して、故障論理アドレスリスト送信部１４に替えて故障論理アドレスリスト送信部３４と、修復データ処理部１５に替えて修復データ処理部３５とを備え、さらに、代替論理アドレスリスト記憶部３６を備える点が異なる。
【００９９】
修復データ処理部３５は、コントローラ４０から、アクセスに失敗したデータの修復データを受信すると、故障ブロックを代替可能な代替ブロックを選定する。そして、修復データ処理部３５は、代替ブロックに対して修復データの書き込みを行うよう、読み書き処理部１３に通知する。また、修復データ処理部３５は、その故障ブロックに格納されておりまだ代替ブロックに格納されていないデータの論理アドレス（代替論理アドレス）のリストを、後述の代替論理アドレスリスト記憶部３６に登録する。すなわち、代替論理アドレスリストとは、故障ブロックに格納されていたデータのうち、故障検出時にアクセスに失敗したデータ以外のデータの論理アドレス（代替論理アドレス）のリストである。
【０１００】
代替論理アドレスリスト記憶部３６は、代替論理アドレスリストを記憶する。代替論理アドレスリスト記憶部３６は、過去に検出された故障ブロックにおける代替論理アドレスを蓄積していてもよい。例えば、代替論理アドレスリストは、故障ブロックの検出の度に、新たな代替論理アドレスが末尾に追加されていくものであってもよい。このような代替論理アドレスリストの一例を図１４に示す。図１４の各行は、代替論理アドレスを示している。この例では、各代替論理アドレスには、代替論理アドレスリストに追加された順にリスト番号が付与されている。
【０１０１】
故障論理アドレスリスト送信部３４は、故障論理アドレスリストを含む情報として、代替論理アドレスリスト記憶部３６に記憶された代替論理アドレスリストをコントローラ４０に送信する。ここで、故障論理アドレスリスト送信部３４は、コントローラ４０からの故障論理アドレスリストの取得要求に応じて、代替論理アドレスリストを送信してもよい。
【０１０２】
次に、コントローラ４０の構成を図１５に示す。図１５において、コントローラ４０は、本発明の第１の実施の形態としてのコントローラ２０に対して、故障論理アドレスリスト取得部２２に替えて故障論理アドレスリスト取得部４２と、修復部２４に替えて修復部４４とを備える点が異なる。
【０１０３】
故障論理アドレスリスト取得部４２は、故障論理アドレスリストを含む情報として、上述の代替論理アドレスリストをＳＳＤ３０から取得する。例えば、故障論理アドレスリスト取得部４２は、故障論理アドレスリストの取得要求をＳＳＤ３０に送信することにより、代替論理アドレスリストを取得してもよい。そして、故障論理アドレス取得部４２は、取得した代替論理アドレスリストに含まれる論理アドレスを、未修復論理アドレスリスト記憶部２３に登録する。
【０１０４】
修復部４４は、ＳＳＤ３０に送信した読み込み要求に対してエラー応答が受信されると、要求対象の論理アドレスに対応するデータの修復データを生成し、修復データの書き込み要求をＳＳＤ３０に送信する。また、修復部４４は、故障論理アドレスリスト取得部４２によって未修復論理アドレスリストに代替論理アドレスが登録されると、代替論理アドレスの示すデータを順次修復し、代替論理アドレスの修復データの書き込み要求をＳＳＤ３０に順次送信する。
【０１０５】
このとき、ＳＳＤ３０から受信される代替論理アドレスリストに、過去の代替論理アドレスが古い方から昇順に蓄積されているとすると、未修復論理アドレスリストにも、過去の代替論理アドレスが古い方から昇順に登録されることになる。ここで、過去の代替論理アドレスの示すデータには、既に修復済みのものもある。そこで、この場合、修復部４４は、未修復論理アドレスリストに含まれる論理アドレスのうち、読み込みに失敗した論理アドレスは未修復であり、読み込みに成功した論理アドレスは修復済みであると判断してもよい。具体的には、例えば、修復部４４は、未修復論理アドレスリストの末尾から降順に、該論理アドレスの示すデータの読み込みを実行していく。そして、修復部４４は、読み込みに失敗した論理アドレスについて、修復データの生成と書き込みを順次実行していき、読み込みに成功した論理アドレスよりも先頭側の論理アドレスは、既に修復が完了していると判断してよい。
【０１０６】
以上のように構成されたストレージ装置２の動作について、図１６を参照して説明する。
【０１０７】
なお、図１６において、左図はＳＳＤ３０の動作を示し、右図はコントローラ４０の動作を示し、左右を結ぶ破線の矢印はデータの流れを示すものとする。
【０１０８】
まず、ストレージ装置２は、ステップＳ１〜Ｓ６まで本発明の第１の実施の形態と同様に動作することにより、対象の論理アドレスに対応する物理アドレスの領域に対するアクセスに失敗した場合は、ＳＳＤ３０からコントローラ４０にエラー応答が送信される。
【０１０９】
次に、コントローラ４０の修復部４４は、アクセスに失敗したデータの冗長情報に基づいて、修復データを生成する（ステップＳ３１）。例えば、前述のように、修復部４４は、アクセスに失敗したデータの冗長情報と、その冗長情報の算出時に用いられた他のデータとを、それぞれ他のＳＳＤ３０から取得し、取得した冗長情報および他のデータを用いて修復データを生成すればよい。
【０１１０】
次に、修復部４４は、アクセスに失敗した論理アドレスに対する修復データの書き込み要求をＳＳＤ３０に送信する（ステップＳ３２）。
【０１１１】
次に、書き込み要求を受信したＳＳＤ３０の修復データ処理部３５は、故障ブロックを代替可能な他の代替ブロックを選定する。そして、読み書き処理部１３は、選定された代替ブロックに修復データを書き込む（ステップＳ３３）。このとき、読み書き処理部１３は、修復データの論理アドレスに対して、代替ブロックにおける物理アドレスを対応付けてアドレス対応情報記憶部１２を更新する。
【０１１２】
次に、修復データ処理部３５は、故障ブロックに格納されているデータのうち、未だ代替ブロックに格納されていないデータの論理アドレス（代替論理アドレス）を代替論理アドレスリスト記憶部３６に登録する（ステップＳ３４）。
【０１１３】
次に、コントローラ４０の故障論理アドレスリスト取得部４２は、故障論理アドレスリストの取得要求をＳＳＤ３０に送信する（ステップ３５）。
【０１１４】
次に、ＳＳＤ３０の故障論理アドレスリスト送信部３４は、代替論理アドレスリストをコントローラ４０に送信する（ステップＳ３６）。
【０１１５】
次に、代替論理アドレスリストを受信したコントローラ４０の修復部４４は、代替論理アドレスリストに含まれる代替論理アドレスを、未修復論理アドレスリストに登録する（ステップＳ３７）。
【０１１６】
次に、修復部４４は、未修復論理アドレスリストに含まれる論理アドレスについて修復データを生成し、修復データをＳＳＤ３０に書き込む（ステップＳ３８〜Ｓ３９）。ステップＳ３８〜Ｓ３９の詳細については後述する。
【０１１７】
以上で、ストレージ装置２は、動作を終了する。
【０１１８】
次に、ステップＳ３８〜Ｓ３９の動作の詳細について、図１７を参照して説明する。なお、ここでは、未修復論理アドレスリストには、過去に検出された故障ブロックにおける代替論理アドレスが、故障検出時期の昇順に含まれているものとする。
【０１１９】
図１７では、コントローラ４０の修復部４４は、未修復論理アドレスリストの末尾から降順に各論理アドレスについて、以下の動作を行う。
【０１２０】
ここでは、まず、修復部４４は、該当する論理アドレスの示すデータの読み込み要求をＳＳＤ３０に送信する（ステップＳ４１）。
【０１２１】
次に、ＳＳＤ３０の読み書き処理部１３は、該当する論理アドレスに対応する物理アドレスの示す領域に対してアクセスし、処理結果をコントローラ４０に送信する（ステップＳ４２）。
【０１２２】
次に、コントローラ４０の修復部４４は、該当する論理アドレスの示すデータの読み込みに成功したか否かを判断する（ステップＳ４３）。
【０１２３】
ここで、該当する論理アドレスの読み込みに失敗したと判断した場合、修復部４４は、ステップＳ２１〜Ｓ２２まで、本発明の第１の実施の形態と同様に動作することにより、この論理アドレスのデータの修復データを生成してＳＳＤ３０に書き込みを要求する。
【０１２４】
次に、ＳＳＤ３０の読み書き処理部１３は、修復データを代替ブロックに書き込む（ステップＳ４４）。
【０１２５】
次に、コントローラ４０の修復部４４は、修復が完了したこの論理アドレスを、未修復論理アドレスリストの末尾から削除する（ステップＳ２４）。
【０１２６】
そして、修復部４４は、未修復論理アドレスリストに未だ論理アドレスが残っていれば（ステップＳ２５でＮｏ）、未修復論理アドレスリストの末尾の論理アドレスについて、ステップＳ４１〜Ｓ４３、Ｓ２１〜Ｓ２２、Ｓ４４、Ｓ２４の動作を繰り返す。
【０１２７】
一方、未修復論理アドレスリストが既に空であると判断した場合（ステップＳ２５でＹｅｓ）、修復部４４は、動作を終了する。
【０１２８】
また、ステップＳ４３において、該当する論理アドレスの示すデータの読み込みに成功したと判断した場合、修復部４４は、未修復アドレスリストを空にして（ステップＳ４５）、動作を終了する。つまり、修復部４４は、未修復論理アドレスリストのその時点での末尾の論理アドレスの示すデータの読み込みに成功した場合、その時点での未修復論理アドレスリストに含まれる論理アドレスは、既に前回以前の故障検出時に修復済みであると判断可能となる。
【０１２９】
以上で、ステップＳ３８〜Ｓ３９における動作の詳細な説明を終了する。
【０１３０】
次に、ストレージ装置２の動作の具体例について説明する。なお、ＳＳＤ３０の半導体メモリ１１の各ブロックには、図４に一例を示したデータが格納されており、アドレス対応情報記憶部１２には、図５に一例を示した情報が記憶されているものとする。
【０１３１】
図４では、ブロック＃０には、論理アドレス＃０２、＃１３、＃２１、＃３０のそれぞれ示すデータＡ２、Ｂ３、Ｃ１、Ｄ０が格納されている。この状態で、ブロック＃０が故障したことを想定する。
【０１３２】
このとき、ホスト装置９が、論理アドレス＃０２の示すデータの読み込みをストレージ装置２に要求したとする（ステップＳ１）。
【０１３３】
次に、コントローラ４０の冗長化制御部２１は、論理アドレス＃０２に対する読み込み要求を、論理アドレス＃０２の示すデータが格納されたＳＳＤ３０に対して送信する（ステップＳ２）。
【０１３４】
次に、ＳＳＤ３０の読み書き処理部１３は、論理アドレス＃０２に対応する物理アドレスを含むブロック＃０にアクセスするが、失敗する（ステップＳ３、Ｓ４でＮｏ）。
【０１３５】
そこで、読み書き処理部１３は、エラー応答をコントローラ４０に送信する（ステップＳ６）。
【０１３６】
次に、コントローラ４０の修復部４４は、論理アドレス＃０２の示すデータについて、その冗長情報および関連する他のデータを他のＳＳＤ３０からそれぞれ取得して、修復データ“Ａ２”を生成する（ステップＳ３１）。
【０１３７】
次に、修復部４４は、論理アドレス＃０２の修復データ“Ａ２”の書き込み要求を、ＳＳＤ３０に送信する（ステップＳ３２）。
【０１３８】
次に、ＳＳＤ３０の修復データ処理部３５は、故障ブロック＃０の代替ブロック＃１を選定する。そして、読み書き処理部１３は、論理アドレス＃０２の修復データ“Ａ２”を、代替ブロック＃１に書き込む（ステップＳ３３）。このとき、修復部４４は、アドレス対応情報記憶部１２を更新する。
【０１３９】
次に、ＳＳＤ３０の修復データ処理部３５は、故障したブロック＃０に含まれる論理アドレスのうち、修復データの書き込みが完了した論理アドレス＃０２以外の＃３０、＃２１、＃１３を、代替論理アドレスリスト記憶部３６に追加して登録する（ステップＳ３４）。ここでは、代替論理アドレスリストに、既に＃Ｎ０、＃Ｎ１が登録されていたものとする。これにより、図１４に示した代替論理アドレスリストが生成される。
【０１４０】
次に、コントローラ４０の故障論理アドレスリスト取得部４２は、故障論理アドレスリストの取得要求を、ＳＳＤ３０に送信する（ステップＳ３５）。
【０１４１】
次に、ＳＳＤ３０の故障論理アドレスリスト送信部３４は、図１４に示した代替論理アドレスリスト「＃Ｎ０、＃Ｎ１、＃３０、＃２１、＃１３」を、コントローラ４０に送信する（ステップＳ３６）。
【０１４２】
次に、修復部４４は、受信した代替論理アドレスリストの論理アドレス「＃Ｎ０、＃Ｎ１、＃３０、＃２１、＃１３」を、未修復論理アドレスリストに登録する（ステップＳ３７）。これにより、図１８（ａ）に示す未修復論理アドレスリストが生成される。
【０１４３】
次に、修復部４４は、未修復論理アドレスリストの末尾の論理アドレス＃１３に対する読み込みを行う（ステップＳ４１〜Ｓ４２）が、この論理アドレス＃１３のデータは未だ修復されていないので、読み込みに失敗する（ステップＳ４３でＮｏ）。
【０１４４】
そこで、修復部４４は、論理アドレス＃１３の示すデータの冗長情報、および、その冗長情報を算出するために該当するデータと共に用いられた他のデータを他のＳＳＤ３０から取得し、修復データ“Ｂ３”を生成する。そして、ＳＳＤ３０の読み書き処理部１３は、修復データ“Ｂ３”を代替ブロック＃１に書き込む。そして、修復部４４は、未修復論理アドレスリストの末尾から、論理アドレス＃１３を削除する（ステップＳ２１〜Ｓ２２、Ｓ４４、ステップＳ２４）。これにより、未修復論理アドレスリストは、図１８（ｂ）に示す状態となる。
【０１４５】
続いて、コントローラ４０の修復部４４は、図１８（ｂ）の未修復論理アドレスリストの末尾の論理アドレス＃２１に対する読み込みが失敗したと判断する（ステップＳ４１、Ｓ４２、Ｓ４３でＮｏ）。そこで、修復部４４は、論理アドレス＃２１の修復データ“Ｃ１”を生成する。そして、ＳＳＤ３０の読み書き処理部１３は、修復データ“Ｃ１”を代替ブロック＃１に書き込む。そして、修復部４４は、未修復論理アドレスリストの末尾から、論理アドレス＃２１を削除する（ステップＳ２１〜Ｓ２２、Ｓ４４、Ｓ２４）。これにより、未修復論理アドレスリストは、図１８（ｃ）に示す状態となる。
【０１４６】
続いて、コントローラ４０の修復部４４は、図１８（ｃ）の未修復論理アドレスリストの末尾の論理アドレス＃３０に対する読み込みが失敗したと判断する（ステップＳ４１、Ｓ４２、Ｓ４３でＮｏ）。そこで、修復部４４は、論理アドレス＃３０の修復データ“Ｄ０”を生成する。そして、ＳＳＤ３０の読み書き処理部１３は、修復データ“Ｄ０”を代替ブロック＃１に書き込む。そして、修復部４４は、未修復論理アドレスリストの末尾から、論理アドレス＃３０を削除する（ステップＳ２１〜Ｓ２２、Ｓ４４、Ｓ２４）。これにより、未修復論理アドレスリストは、図１８（ｄ）に示す状態となる。
【０１４７】
続いて、コントローラ４０の修復部４４は、図１８（ｄ）の未修復論理アドレスリストの末尾の論理アドレス＃Ｎ１に対する読み込みが成功したと判断する（ステップＳ４１、Ｓ４２、Ｓ４３でＹｅｓ）。そこで、修復部４４は、未修復論理アドレスリストを空にして（ステップＳ４５）、動作を終了する。
【０１４８】
以上の動作により、故障ブロック＃０に格納されていたデータは、図１９に示すように代替ブロック＃１に格納され修復された。また、アドレス対応情報記憶部１２に記憶される情報は、図２０に示すように更新された。
【０１４９】
以上で、ストレージ装置２の動作の具体例の説明を終了する。
【０１５０】
次に、本発明の第２の実施の形態の効果について述べる。
【０１５１】
本発明の第２の実施の形態としてのストレージ装置は、複数の半導体記憶装置を用いて冗長化したストレージ装置において、半導体記憶装置の記憶領域を構成するブロックの故障によるデータの冗長性喪失をより早期に回復し、データロストを防ぐことができる。
【０１５２】
その理由は、ＳＳＤ（半導体記憶装置）の読み書き処理部が、コントローラ（ストレージ制御装置）からの読み込み要求による物理アドレスの示す領域へのアクセスに失敗すると、アクセスに失敗したデータの修復データをコントローラから受信して代替ブロックに格納し、故障ブロックに格納されるデータのうち修復された論理アドレス以外の論理アドレスのリストを、代替論理アドレスリストに登録するからである。そして、故障論理アドレスリスト送信部が、代替論理アドレスリストを、故障論理アドレスリストとしてコントローラに送信するからである。そして、コントローラの修復部が、ＳＳＤから取得した代替論理アドレスリストに含まれる論理アドレスの修復データを、冗長情報を用いて生成し、修復データをＳＳＤに書き込むからである。これにより、本実施の形態のストレージ装置は、アクセスに失敗したデータを修復した時点で、アクセスに失敗したデータと同じ故障ブロックに格納されていた他の全てのデータの論理アドレス（故障論理アドレス）を取得できるので、それらの故障論理アドレスに対するホスト装置からのアクセスを待つことなく、故障論理アドレスの示す破損データを早期に修復可能となる。その結果、ストレージ装置は、データの冗長性を維持し、データロストを防ぐことができる。
【０１５３】
なお、上述した本発明の各実施の形態において、修復部は、未修復論理アドレスリストを用いて故障ブロックに含まれる全データの修復を行うものとして説明したが、未修復論理アドレスのデータ構造は、上述した形式に限らず、ＳＳＤから取得した故障論理アドレスリストに含まれる論理アドレスと、各論理アドレスのデータが修復済みであるか否かを判断可能な形式であればよい。
【０１５４】
また、上述した本発明の各実施の形態のストレージ装置は、ホスト装置からの読み込み要求時に検出される故障ブロックに格納されるデータを修復する具体例を中心に説明したが、各実施の形態は、ホスト装置からの書き込み要求時に検出される故障ブロックに対しても適用可能である。
【０１５５】
また、上述した本発明の各実施の形態において、半導体記憶装置（ＳＳＤ）は、ＮＡＮＤ型フラッシュメモリを備える例を中心に説明したが、各実施の形態は、その他の半導体メモリを備える半導体記憶装置にも適用可能である。
【０１５６】
また、上述した本発明の各実施の形態において、ストレージ装置は、複数の半導体記憶装置（ＳＳＤ）を用いてＲＡＩＤにより冗長化構成を採用する例を中心に説明したが、各実施の形態は、ＲＡＩＤに限らず、複数の半導体記憶装置を用いてその他の技術により冗長化構成を採用するストレージ装置にも適用可能である。
【０１５７】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した半導体記憶装置およびストレージ制御装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておき、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１５８】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０１５９】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【０１６０】
また、上述した各実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
複数のブロックから構成される記憶領域を有する半導体メモリと、
前記半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係を記憶したアドレス対応情報記憶部と、
上位装置からデータの読み込みまたは書き込みの要求を受信すると、該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行する読み書き処理部と、
前記物理アドレスの示す領域に対する前記読み書き処理部によるアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信する故障論理アドレスリスト送信部と、
前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込むよう前記読み書き処理部に通知する修復データ処理部と、
を備えた半導体記憶装置。
（付記２）
前記故障論理アドレスリスト送信部は、前記故障論理アドレスリストの取得要求を前記上位装置から受信すると、前記故障論理アドレスリストを前記上位装置に送信することを特徴とする付記１に記載の半導体記憶装置。
（付記３）
前記故障論理アドレスリスト送信部は、前記物理アドレスの示す領域に対するアクセスが失敗した際に前記読み書き処理部によって前記上位装置に送信されるエラー応答に、前記故障論理アドレスリストを含めることを特徴とする付記１に記載の半導体記憶装置。
（付記４）
前記修復データ処理部は、前記故障ブロックを代替可能な他のブロック（代替ブロック）を選定し、前記アクセスに失敗したデータの修復データが前記上位装置から受信されると、該修復データを前記代替ブロックに書き込むよう前記読み書き処理部に通知し、
前記故障論理アドレスリスト送信部は、前記故障ブロックに格納されており未だ代替ブロックに格納されていないデータの論理アドレスのリスト（代替論理アドレスリスト）を前記故障論理アドレスリストとして前記上位装置に送信し、
前記修復データ処理部は、前記代替論理アドレスリストに含まれる論理アドレスの修復データが前記上位装置から受信されると、前記代替ブロックに該修復データを書き込むよう前記読み書き処理部に通知することを特徴とする付記１から付記３のいずれか１つに記載の半導体記憶装置。
（付記５）
付記１から付記４のいずれか１つに記載の複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを制御する冗長化制御部と、
前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得する故障論理アドレスリスト取得部と、
前記故障論理アドレスリスト取得部によって取得された故障論理アドレスリストに含まれる論理アドレスを記憶する未修復論理アドレスリスト記憶部と、
前記未修復論理アドレスリスト記憶部に記憶される論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信する修復部と、
を備えたストレージ制御装置。
（付記６）
前記故障論理アドレスリスト取得部は、前記半導体記憶装置に対する前記データの読み書き要求に応じたエラー応答を受信すると、前記故障論理アドレスリストの取得要求を前記半導体記憶装置に送信することにより、前記故障論理アドレスリストを取得することを特徴とする付記５に記載のストレージ制御装置。
（付記７）
前記故障論理アドレスリスト取得部は、前記半導体記憶装置に対する前記データの読み書き要求に応じたエラー応答として、前記故障論理アドレスリストを含むエラー応答を受信することを特徴とする付記５に記載のストレージ制御装置。
（付記８）
前記故障論理アドレスリスト取得部は、前記故障論理アドレスリストとして、前記代替論理アドレスリストを前記半導体記憶装置から取得することを特徴とする付記５から付記７のいずれか１つに記載のストレージ制御装置。
（付記９）
付記１から付記４のいずれか１つに記載の複数の半導体記憶装置と、
付記５から付記８のいずれか１つに記載のストレージ制御装置と、
を備えたストレージ装置。
（付記１０）
複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係をアドレス対応情報記憶部に記憶し、
上位装置からデータの読み込みまたは書き込みの要求を受信すると、
該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、
特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行し、
前記物理アドレスの示す領域に対するアクセスが失敗すると、
該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信し、
前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む、半導体記憶装置制御方法。
（付記１１）
半導体メモリをそれぞれ搭載して付記１０に記載の半導体記憶装置制御方法により制御される複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを実行する際に、
前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、
該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得して未修復論理アドレスリストとして記憶し、
前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、
該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信する、ストレージ制御方法。
（付記１２）
半導体記憶装置は、
複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係をアドレス対応情報記憶部に記憶しておき、
ストレージ制御装置からデータの読み込みまたは書き込みの要求を受信すると、
該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、
特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行し、
前記物理アドレスの示す領域に対するアクセスが失敗すると、
該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記ストレージ制御装置に送信し、
前記ストレージ制御装置は、
前記半導体記憶装置から受信される前記故障論理アドレスリストを未修復論理アドレスリストとして記憶し、
前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成し、
該論理アドレスに対する修復データの書き込み要求を前記半導体記憶装置に送信し、
前記半導体記憶装置は、
前記修復データを受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む、ストレージ制御方法。
（付記１３）
複数のブロックから構成される記憶領域を有する半導体メモリに格納されるデータの物理アドレスと、前記データの論理アドレスとの対応関係を記憶したアドレス対応情報記憶部を用いて、
上位装置からデータの読み込みまたは書き込みの要求を受信する読み書き要求受信ステップと、
該要求に含まれる論理アドレスに対応する物理アドレスを、前記アドレス対応情報記憶部を参照することにより特定し、特定した物理アドレスの示す領域にアクセスして該要求の示す処理を実行する読み書き実行ステップと、
前記物理アドレスの示す領域に対するアクセスが失敗すると、該領域を含むブロック（故障ブロック）に格納されていたデータの論理アドレスのリスト（故障論理アドレスリスト）を前記上位装置に送信する故障論理アドレスリスト送信ステップと、
前記故障論理アドレスリストに含まれる論理アドレスの修復データを前記上位装置から受信すると、前記故障ブロックとは異なる他のブロックを選定して、選定したブロックに前記修復データを書き込む修復データ書き込みステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
（付記１４）
半導体メモリおよび付記１３に記載のコンピュータ・プログラムを実行する制御装置を搭載した複数の半導体記憶装置に冗長化されて格納されるデータに対する読み書きを要求する読み書き要求ステップと、
前記半導体記憶装置において前記データの論理アドレスに対応する物理アドレスの領域に対するアクセスが失敗すると、該領域を含む前記故障ブロックの前記故障論理アドレスリストを前記半導体記憶装置から取得する故障論理アドレスリスト取得ステップと、
前記故障論理アドレスリストに含まれる論理アドレスを未修復論理アドレスリストとして記憶し、前記未修復論理アドレスリストに含まれる論理アドレスの示すデータを、該データの冗長情報に基づいて修復することにより修復データを生成する修復データ生成ステップと、
該論理アドレスに対する前記修復データの書き込み要求を前記半導体記憶装置に送信する修復データ書き込み要求ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【符号の説明】
【０１６１】
１、２    ストレージ装置
９  ホスト装置
１０、３０    ＳＳＤ
１１    半導体メモリ
１２    アドレス対応情報記憶部
１３    読み書き処理部
１４、３４    故障論理アドレスリスト送信部
１５、３５    修復データ処理部
３６  代替論理アドレスリスト記憶部
２０、４０    コントローラ
２１    冗長化制御部
２２、４２    故障論理アドレスリスト取得部
２３    未修復論理アドレスリスト記憶部
２４、４４    修復部
【図１】
2014041524.tif 000003
【図２】
2014041524.tif 000004
【図３】
2014041524.tif 000005
【図４】
2014041524.tif 000006
【図５】
2014041524.tif 000007
【図６】
2014041524.tif 000008
【図７】
2014041524.tif 000009
【図８】
2014041524.tif 000010
【図９】
2014041524.tif 000011
【図１０】
2014041524.tif 000012
【図１１】
2014041524.tif 000013
【図１２】
2014041524.tif 000014
【図１３】
2014041524.tif 000015
【図１４】
2014041524.tif 000016
【図１５】
2014041524.tif 000017
【図１６】
2014041524.tif 000018
【図１７】
2014041524.tif 000019
【図１８】
2014041524.tif 000020
【図１９】
2014041524.tif 000021
【図２０】
2014041524.tif 000022