(57)【要約】      （修正有）【課題】ウェアレベリング処理を実行するフラッシュメモリ等の記憶デバイスを用いたストレージシステムで、高い信頼性と利便性を備えてデータを読み書きする。【解決手段】ホスト４は、フラッシュメモリデバイス２にデータを読み書きする。５１２バイトの論理ブロック毎に、第１保護コードＢＣが論理ブロックの末尾に付加される。各論理ブロックの先頭には第２保護コードＦＣが付加される。第１保護コードＢＣ及び第２保護コードＦＣは、論理アドレスを特定可能なデータを含むように構成される。フラッシュメモリデバイス２からデータを読み出す場合、第１保護コードＢＣから得られる論理アドレスと、第２保護コードから得られる論理アドレスとが比較される。両方の論理アドレスが一致する場合、正しいデータが読み出されたものと判定される。【選択図】図１
2010055210.tif 000002
【特許請求の範囲】
【請求項１】
受信したデータを記憶するストレージ装置と、そのストレージ装置を制御するストレージコントローラとを備えるストレージシステムであって、
前記ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、
前記ストレージ装置内に記憶されるデータのうち少なくとも前記ストレージ装置内の複数ページに跨って記憶されるデータについて、そのデータの前後両側に、そのデータの論理アドレスを特定するためのアドレスデータをそれぞれ予め対応付ける、アドレスデータ設定制御部と、
前記複数ページに跨って記憶されている前記データを読み出す場合に、前記データの前後両側にそれぞれ対応付けられている前記アドレスデータに基づいて、前記複数ページに跨って記憶されている前記データが正しいか否かを判定する判定部と、
を備えるストレージシステム。
【請求項２】
前記ストレージ装置内でデータを管理するために使用される第１論理ブロックのサイズと、前記ストレージコントローラ内でデータを管理するために使用される第２論理ブロックのサイズとは異なっており、
前記アドレスデータ設定制御部は、前記各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第１アドレスデータを当該第１論理ブロックの前後両側のうち一方の側に設定することにより、前記第１論理ブロックを前記第２論理ブロックに変換するための第１設定部を備えている、請求項１に記載のストレージシステム。
【請求項３】
前記各ページは、前記第１論理ブロックのサイズのｎ（ｎ＞２）倍のサイズに設定されており、
前記アドレスデータ設定制御部は、前記各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第２アドレスデータを、当該第１論理ブロックの前後両側のうち他方の側に設定する第２設定部をさらに備えており、
前記判定部は、前記第１アドレスデータと前記第２アドレスデータとが一致する場合に、前記複数ページに跨って記憶されている前記第２論理ブロックのデータが正しく読み出されたと判定し、前記第１アドレスデータと前記第２アドレスデータとが不一致の場合に、前記複数ページに跨って記憶されている前記第２論理ブロックのデータが誤って読み出されたと判定する、請求項２に記載のストレージシステム。
【請求項４】
前記各ページは、前記第１論理ブロックのサイズと同一に設定されており、
前記アドレスデータ設定制御部は、前記各ページのうち前記第１アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第１アドレスデータを第２アドレスデータとして前記所定ページの先頭にコピーさせる第２設定部をさらに備えており、
前記判定部は、前記第１アドレスデータと前記第２アドレスデータとが一致する場合に、前記複数ページに跨って記憶されている前記第２論理ブロックのデータが正しく読み出されたと判定し、前記第１アドレスデータと前記第２アドレスデータとが不一致の場合に、前記複数ページに跨って記憶されている前記第２論理ブロックのデータが誤って読み出されたと判定する、請求項２に記載のストレージシステム。
【請求項５】
前記各ページは、前記第１論理ブロックのサイズのｎ（ｎ＞２）倍のサイズに設定されており、
前記判定部は、前記複数ページに跨って記憶されている前記第２論理ブロックのデータを読み出す場合に、前記第２論理ブロックのデータが有する前記第１アドレスデータと、前記第２論理ブロックのデータの直前に位置する第２論理ブロックのデータが有する他の第１アドレスデータとを比較することにより、前記複数ページに跨って記憶されている前記第２論理ブロックのデータが正しく読み出されたか否かを判定する、請求項２に記載のストレージシステム。
【請求項６】
前記判定部は、前記複数ページに跨って記憶されている前記第２論理ブロックのデータに含まれている前記第１アドレスデータの値と、前記他の第１アドレスデータの値とが連続している場合に、前記第２論理ブロックのデータが正しく読み出されたと判定する、請求項５に記載のストレージシステム。
【請求項７】
前記第１設定部は、前記第１アドレスデータに加えて、前記第１論理ブロックのデータを検査するための検査用データを設定する、請求項２に記載のストレージシステム。
【請求項８】
前記ストレージ装置は、フラッシュメモリデバイスを備えて構成される、請求項１に記載のストレージシステム。
【請求項９】
前記アドレスデータ設定制御部は、前記ストレージコントローラ内に設けられている請求項１に記載のストレージシステム。
【請求項１０】
前記アドレスデータ設定制御部は、前記ストレージコントローラ及び前記ストレージ装置の両方に分散して設けられている請求項１に記載のストレージシステム。
【請求項１１】
前記第２設定部及び前記判定部は、前記ストレージ装置内に設けられている請求項４に記載のストレージシステム。
【請求項１２】
前記判定部は、前記ストレージ装置内に設けられている請求項５または請求項６に記載のストレージシステム。
【請求項１３】
前記ストレージ装置は、コントローラと、そのコントローラにより制御される記憶チップとを備えており、前記コントローラは、前記ホストコンピュータから受信したデータの論理アドレスと、前記記憶チップのページアドレス及びポインタとの対応関係を管理している、請求項１に記載のストレージシステム。
【請求項１４】
前記ストレージ装置は、フラッシュメモリデバイスとして構成されており、
前記ストレージ装置内でデータを管理するために使用される第１論理ブロックのサイズと、前記ストレージコントローラ内でデータを管理するために使用される第２論理ブロックのサイズとは異なっており、
前記アドレスデータ設定制御部は、（１）前記各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第１アドレスデータ及び当該第１論理ブロックのデータを検査するための検査用データを当該第１論理ブロックの前後両側のうち一方の側に設定することにより、前記第１論理ブロックを前記第２論理ブロックに変換するための第１設定部と、（２）前記各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第２アドレスデータを、当該第１論理ブロックの前後両側のうち他方の側に設定する第２設定部とを備えており、
前記第２設定部は、（２Ａ）前記第１論理ブロックの論理アドレスを前記第２アドレスデータとして、前記第１論理ブロックの前記他方の側に設定させるか、あるいは、（２Ｂ）前記各ページのうち前記第１アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第１アドレスデータを前記第２アドレスデータとして前記所定ページの先頭にコピーさせるか、あるいは、（２Ｃ）前記複数ページに跨って記憶されている前記第２論理ブロックの直前に位置する他の第２論理ブロックに設定されている第１アドレスデータに所定値を加えたアドレスデータを前記第２アドレスデータとして使用させる、請求項１に記載のストレージシステム。
【請求項１５】
ストレージ装置から読み出されるデータが正しいデータであることを保証するためのデータ保証方法において、
前記ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、
前記ストレージ装置内でデータを管理するために使用される第１論理ブロックのサイズと、前記ストレージ装置に入力されるデータを管理するための第２論理ブロックのサイズとは異なっており、
前記ストレージ装置への書込みが要求された場合には、前記各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第１アドレスデータを、当該第１論理ブロックの後側に設定することにより、前記第１論理ブロックを前記第２論理ブロックに変換するステップと、
前記複数ページに跨って記憶されている前記第２論理ブロックのデータを読み出す場合に、前記第２論理ブロックのデータが有する前記第１アドレスデータと、前記第２論理ブロックのデータの直前に位置する第２論理ブロックのデータが有する他の第１アドレスデータとを比較することにより、前記複数ページに跨って記憶されている前記第２論理ブロックのデータが正しく読み出されたか否かを判定するステップと、
をそれぞれ実行するデータ保証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びデータ保証方法に関する。
【背景技術】
【０００２】
ストレージシステムは、例えば、ストレージ装置と、ストレージ装置を制御するためのストレージコントローラとを備えている。ストレージ装置としては、ハードディスクドライブが使用されることが多い。企業等で長期間管理すべきデータは日々増大する。従って、ストレージ装置に搭載されるハードディスクドライブの数も増加する一方である。ハードディスクドライブは、半導体メモリのような記憶デバイスに比べて、外径寸法や重量が大きくなり、かつ、消費電力も多い。
【０００３】
そこで、近年では、ハードディスクドライブに代えて、フラッシュメモリデバイスが注目されている。フラッシュメモリデバイスは、ハードディスクドライブよりも低消費電力であり、かつ、データの読出し速度も速い。さらに、フラッシュメモリデバイスは、機械的な可動部が無いため、ハードディスクドライブよりも小型に形成でき、故障も発生しにくい。
【０００４】
フラッシュメモリデバイスにデータを書き込む場合、ブロックに記憶されているデータを一括消去し、データの消去されたブロックにデータを記憶させる。しかし、ブロック内のデータを消去するために必要な消去時間は、データを書き込む時間よりも長いため、書込み性能が低下する。また、ブロックを消去可能な回数には上限があり、上限値を超えて消去されたブロックは、信頼性が低下し、使用できなくなる。
【０００５】
そこで、フラッシュメモリデバイスでは、受信データの論理アドレスをフラッシュメモリ内の物理アドレスに変換して管理し、空いているブロックに受信データを書込む。これにより、ブロック内のデータを消去せずに受信データを書き込むことができ、書込み時の応答性能を高めることができる。また、論理アドレスと物理アドレスとの対応付けを管理することにより、特定のブロックが集中して使用される（消去される）のを防止し、フラッシュメモリ内の各ブロックが均一に使用されるように制御でき、フラッシュメモリデバイスの寿命を延ばすことができる。
【０００６】
上述のアドレス変換処理は、例えば、ウェアレベリング処理と呼ばれ、フラッシュメモリデバイス内で実行される。もしも、論理アドレスと物理アドレスとの対応関係を誤って管理した場合、所望のデータを読み出すことができず、ストレージシステムの信頼性が低下する。このため、書込先のページのアドレス情報を特定可能な保護コードを生成し、書込み対象データと保護コードとを合わせてフラッシュメモリに書き込むようにした従来技術が知られている（特許文献１）。その従来技術によれば、フラッシュメモリから読み出されるデータに付加されている保護コードから特定されるアドレス情報と、読出し対象データの論理アドレスとを比較することにより、フラッシュメモリから読み出されたデータが正しいか否かを判定することができる。
【特許文献１】特開２００８−９６３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来技術は、ページ単位で保護コードを設定するため、ページ単位でしか読み書きすることができない。つまり、従来技術は、論理ブロックの単位でデータを読み書きすることができないため、使い勝手が悪い。さらに、従来技術は、小さなサイズのデータを読み書きする場合の応答性能が低下する。
【０００８】
本発明は上述の問題点に鑑みてなされたもので、その目的は、ウェアレベリング処理が実行されるストレージ装置を用いて、高い信頼性と便利性を備えてデータを読み書きできるようにしたストレージシステム及びデータ保証方法を提供することにある。本発明のさらなる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００９】
上記課題を解決すべく、本発明の一つの観点に従うストレージシステムは、受信したデータを記憶するストレージ装置と、そのストレージ装置を制御するストレージコントローラとを備えるストレージシステムであって、ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、ストレージ装置内に記憶されるデータのうち少なくともストレージ装置内の複数ページに跨って記憶されるデータについて、そのデータの前後両側に、そのデータの論理アドレスを特定するためのアドレスデータをそれぞれ予め対応付ける、アドレスデータ設定制御部と、複数ページに跨って記憶されているデータを読み出す場合に、データの前後両側にそれぞれ対応付けられているアドレスデータに基づいて、複数ページに跨って記憶されているデータが正しいか否かを判定する判定部と、を備える。
【００１０】
第２観点では、第１観点において、ストレージ装置内でデータを管理するために使用される第１論理ブロックのサイズと、ストレージコントローラ内でデータを管理するために使用される第２論理ブロックのサイズとは異なっており、アドレスデータ設定制御部は、各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第１アドレスデータを当該第１論理ブロックの前後両側のうち一方の側に設定することにより、第１論理ブロックを第２論理ブロックに変換するための第１設定部を備えている。
【００１１】
第３観点では、第２観点において、各ページは、第１論理ブロックのサイズのｎ（ｎ＞２）倍のサイズに設定されており、アドレスデータ設定制御部は、各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第２アドレスデータを、当該第１論理ブロックの前後両側のうち他方の側に設定する第２設定部をさらに備えており、判定部は、第１アドレスデータと第２アドレスデータとが一致する場合に、複数ページに跨って記憶されている第２論理ブロックのデータが正しく読み出されたと判定し、第１アドレスデータと第２アドレスデータとが不一致の場合に、複数ページに跨って記憶されている第２論理ブロックのデータが誤って読み出されたと判定する。
【００１２】
第４観点では、第２観点において、各ページは、第１論理ブロックのサイズと同一に設定されており、アドレスデータ設定制御部は、各ページのうち第１アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第１アドレスデータを第２アドレスデータとして所定ページの先頭にコピーさせる第２設定部をさらに備えており、判定部は、第１アドレスデータと第２アドレスデータとが一致する場合に、複数ページに跨って記憶されている第２論理ブロックのデータが正しく読み出されたと判定し、第１アドレスデータと第２アドレスデータとが不一致の場合に、複数ページに跨って記憶されている第２論理ブロックのデータが誤って読み出されたと判定する。
【００１３】
第５観点では、第２観点において、各ページは、第１論理ブロックのサイズのｎ（ｎ＞２）倍のサイズに設定されており、判定部は、複数ページに跨って記憶されている第２論理ブロックのデータを読み出す場合に、第２論理ブロックのデータが有する第１アドレスデータと、第２論理ブロックのデータの直前に位置する第２論理ブロックのデータが有する他の第１アドレスデータとを比較することにより、複数ページに跨って記憶されている第２論理ブロックのデータが正しく読み出されたか否かを判定する。
【００１４】
第６観点では、第５観点において、判定部は、複数ページに跨って記憶されている第２論理ブロックのデータに含まれている第１アドレスデータの値と、他の第１アドレスデータの値とが連続している場合に、第２論理ブロックのデータが正しく読み出されたと判定する。
【００１５】
第７観点では、第２観点において、第１設定部は、第１アドレスデータに加えて、第１論理ブロックのデータを検査するための検査用データを設定する。
【００１６】
第８観点では、第１観点において、ストレージ装置は、フラッシュメモリデバイスを備えて構成される。
【００１７】
第９観点では、第１観点において、アドレスデータ設定制御部は、ストレージコントローラ内に設けられている。
【００１８】
第１０観点では、第１観点において、アドレスデータ設定制御部は、ストレージコントローラ及びストレージ装置の両方に分散して設けられている。
【００１９】
第１１観点では、第４観点において、第２設定部及び判定部は、ストレージ装置内に設けられている。
【００２０】
第１２観点では、第５観点において、判定部は、ストレージ装置内に設けられる。
【００２１】
第１３観点では、第１観点において、ストレージ装置は、コントローラと、そのコントローラにより制御される記憶チップとを備えており、コントローラは、ホストコンピュータから受信したデータの論理アドレスと、記憶チップのページアドレス及びポインタとの対応関係を管理している。
【００２２】
第１４観点では、第１観点において、ストレージ装置は、フラッシュメモリデバイスとして構成されており、ストレージ装置内でデータを管理するために使用される第１論理ブロックのサイズと、ストレージコントローラ内でデータを管理するために使用される第２論理ブロックのサイズとは異なっており、アドレスデータ設定制御部は、（１）各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第１アドレスデータ及び当該第１論理ブロックのデータを検査するための検査用データを当該第１論理ブロックの前後両側のうち一方の側に設定することにより、第１論理ブロックを第２論理ブロックに変換するための第１設定部と、（２）各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第２アドレスデータを、当該第１論理ブロックの前後両側のうち他方の側に設定する第２設定部とを備えており、第２設定部は、（２Ａ）第１論理ブロックの論理アドレスを第２アドレスデータとして、第１論理ブロックの他方の側に設定させるか、あるいは、（２Ｂ）各ページのうち第１アドレスデータを全く含まない所定ページについて、その所定ページの直前のページが含む第１アドレスデータを第２アドレスデータとして所定ページの先頭にコピーさせるか、あるいは、（２Ｃ）複数ページに跨って記憶されている第２論理ブロックの直前に位置する他の第２論理ブロックに設定されている第１アドレスデータに所定値を加えたアドレスデータを第２アドレスデータとして使用させるようになっている。
【００２３】
本発明の他の側面に係るデータ保証方法は、ストレージ装置から読み出されるデータが正しいデータであることを保証するためのデータ保証方法において、ストレージ装置では、ページ単位で、使用回数を平均化させるためのウェアレベリング処理が実行されるようになっており、ストレージ装置内でデータを管理するために使用される第１論理ブロックのサイズと、ストレージ装置に入力されるデータを管理するための第２論理ブロックのサイズとは異なっており、ストレージ装置への書込みが要求された場合には、各第１論理ブロックに記憶されるデータのそれぞれについて、当該第１論理ブロックの論理アドレスを特定するための第１アドレスデータを、当該第１論理ブロックの後側に設定することにより、第１論理ブロックを第２論理ブロックに変換するステップと、複数ページに跨って記憶されている第２論理ブロックのデータを読み出す場合に、第２論理ブロックのデータが有する第１アドレスデータと、第２論理ブロックのデータの直前に位置する第２論理ブロックのデータが有する他の第１アドレスデータとを比較することにより、複数ページに跨って記憶されている第２論理ブロックのデータが正しく読み出されたか否かを判定するステップと、をそれぞれ実行する。
【００２４】
本発明の構成要素は、その全部または一部をコンピュータプログラムとして構成できる場合がある。このコンピュータプログラムは、記録媒体に固定して譲渡等することができるほかに、インターネット等の通信ネットワークを介して伝送することもできる。また、本発明の観点は、明示されている組合せ以外にも適宜組み合わせて可能であり、そのような組合せも本発明の範囲に含まれる。
【発明を実施するための最良の形態】
【００２５】
以下、図面に基づき、本発明の実施の形態を説明する。図１は、本実施形態の全体概念を示す説明図である。より詳細な構成例は、後述の実施例で明らかにされる。図１に示す本実施形態のストレージシステムは、例えば、「アドレスデータ設定制御部」としての保護コード設定制御部１と、「ストレージ装置」としてのフラッシュメモリデバイス２と、「判定部」としてのデータ保証部３とを備える。
【００２６】
保護コード設定制御部１は、ホストコンピュータ（以下、ホスト）４から受信したデータについて、論理ブロック毎に所定の保護コードを設定するものである。保護コード設定制御部１は、少なくとも第１保護コード設定部１Ａを備える、保護コード設定制御部１は、場合によっては、第２保護コード設定部１Ｂを備えることもできる。後述の実施例では、複数の保護コード設定部１Ａ，１Ｂを備える場合と、第１保護コード設定部１Ａのみを備える場合とを、それぞれ説明する。
【００２７】
第１保護コード設定部１Ａは、ホストから受信した論理ブロックＢＬＫ毎に、第１保護コードＢＣを設定する。論理ブロックＢＬＫのサイズは、５１２バイトである。ホスト４及びフラッシュメモリデバイス２は、それぞれ５１２バイトの論理ブロックＢＬＫによって、データを管理する。第１保護コードＢＣは、例えば、アドレス情報（ＬＡ）と水平冗長検査（ＬＲＣ：：Longitudinal Redundancy check）とを備える。アドレス情報（ＬＡ）は、論理ブロックに記憶されるデータの論理アドレスから算出される情報である。ＬＲＣは、論理ブロックに記憶されるデータのエラーを検出するための情報である。
【００２８】
第１保護コードのサイズは、例えば、８バイトである。第１保護コードＢＣは、論理ブロックＢＬＫの後側に付加される。これにより、５１２バイトの論理ブロックＢＬＫは、５２０バイトの拡張論理ブロックＥＬＫとなる。論理ブロックＢＬＫは「第１論理ブロック」に該当し、拡張論理ブロックＥＬＫは「第２論理ブロック」に該当する。
【００２９】
第２保護コード設定部１Ｂは、拡張論理ブロックＥＬＫの前側に、８バイトの第２保護コードＦＣを付加する。これにより、拡張論理ブロックＥＬＫは、５２８バイトの第２拡張論理ブロックＳＥＬＫとなる。つまり、５１２バイトの論理ブロックＢＬＫの前後に８バイトずつの保護コードＦＣ，ＢＣを付加することにより、５２８バイトの第２拡張論理ブロックＳＥＬＫが生成される。
【００３０】
フラッシュメモリデバイス２は、例えば、ＮＡＮＤ型フラッシュメモリまたはＮＯＲ型フラッシュメモリとして構成される。フラッシュメモリデバイス２は、例えば、ページｅ１０，ｅ１１，ｅ１２，ｅ１３を備えている。ページサイズは、５１２バイト、または、５１２バイトのｎ倍のサイズに設定される。一方、フラッシュメモリデバイス２に書き込まれるデータのサイズは、５２０バイト（ＥＬＫの場合）または５２８バイト（ＳＥＬＫの場合）のいずれかである。従って、同一ブロックのデータが、それぞれ別々のページに記憶される可能性がある。
【００３１】
なお、図１では、説明の便宜上、同一のフラッシュメモリデバイス２に、それぞれサイズの異なる複数の拡張論理ブロックＥＬＫ，ＳＥＬＫのデータが同時に記憶されるかのように示している。しかし、実際には、一つのフラッシュメモリデバイス２には、拡張論理ブロックＥＬＫまたは第２拡張論理ブロックＳＥＬＫのいずれか一方のデータのみが記憶される。
【００３２】
図１中の左側に示す第２拡張論理ブロックＳＥＬＫの場合、前半部分のデータ及び第２保護コードＦＣはページｅ１０に記憶され、後半部分のデータ及び第１保護コードＢＣは他のページｅ１１に記憶される。ページｅ１０とｅ１１とは連続している。前半部分のデータと後半部分のデータとは、ページ境界ＰＢで隣接する複数のページｅ１０，ｅ１１に跨って記憶される。図１中の右側に示す拡張論理ブロックＥＬＫの場合、前半部分のデータはページｅ１２に記憶され、後半部分のデータはページｅ１２に隣接する別のページｅ１３に記憶される。この場合も、前半部分のデータと後半部分のデータとは、ページ境界ＰＢで隣接する複数のページｅ１２，ｅ１３に跨って記憶される。
【００３３】
フラッシュメモリデバイス２は、ウェアレベリング２Ａを適宜実行する。ウェアレベリングとは、フラッシュメモリチップの消去回数（書込み回数）を均一化させるための処理である。ウェアレベリング２Ａは、消去回数を均一化すべく、フラッシュメモリ内のあるページに書き込まれたデータを別のページに退避させる。
【００３４】
従って、例えば、ページｅ１１のデータが他のページｅ１１０（不図示）に退避されたり、ページｅ１２のデータが別のページｅ１２０（不図示）に退避される。フラッシュメモリデバイス２のコントローラ（図４のフラッシュメモリコントローラ２１０参照）は、データの論理アドレスと、そのデータが実際に格納されている物理アドレスとの対応関係を管理する。従って、フラッシュメモリデバイス２は、指定された論理アドレスのデータを、所定のページから読み出して転送することができる。
【００３５】
データ保証部は、フラッシュメモリデバイス２から正しくデータが読み出されたか否かを判断する。第２拡張論理ブロックＳＥＬＫの場合、データ保証部３は、第１保護コードＢＣから抽出される論理アドレスと第２保護コードＦＣから得られる論理アドレスとを比較し、両方の論理アドレスが一致するか否かを判定する。両方の論理アドレスが一致する場合、データ保証部３は、正しいデータが読み出されたと判定する。つまり、フラッシュメモリデバイス２から読み出されたデータは、データ保証部３によって、正しいデータであると保証される。正しいデータであると保証されたデータは、保護コード除去部１Ｃにより保護コードＢＣ，ＦＣがそれぞれ取り除かれて、ホスト４に送信される。
【００３６】
拡張論理ブロックＥＬＫの場合、データ保証部３は、リード対象データＤｎに設定されている第１保護コードＢＣ（Ｄｎ）と、リード対象データＤｎの直前のデータＤｎ−１に設定されている第１保護コードＢＣ（Ｄｎ−１）とを比較する。
【００３７】
図１中では省略されているが、ページｅ１２とｅ１３とに跨って記憶されているデータをリード対象データＤｎとすると、そのデータＤｎの直前には、別のデータＤｎ−１が記憶されている。データＤｎとデータＤｎ−１とは、論理アドレスが連続している。そこで、データ保証部３は、リード対象データＤｎの第１保護コードＢＣ（Ｄｎ）から抽出される論理アドレスと、リード対象データＤｎの直前に位置するデータＤｎ−１に設定されている第１保護コードＢＣ（Ｄｎ−１）から抽出される論理アドレスとが、連続しているか否かを判定する。両方の論理アドレスが連続している場合、つまり、ＢＣ（Ｄｎ−１）の論理アドレスよりもＢＣ（Ｄｎ）の論理アドレスの方が１つだけ大きい場合、データ保証部３は、フラッシュメモリから正しいデータが読み出されたと判定する。
【００３８】
フラッシュメモリデバイス２内でのアドレス管理にエラーが生じた場合、上述の方法でデータ保証部３は、そのエラーを検出することができる。なお、データ保証部３は、第１保護コードＢＣに含まれるＬＲＣを利用して、データのビット化けを検出できる。
【００３９】
本実施形態では、フラッシュメモリから読み出される論理ブロックＢＬＫのデータについて、その論理ブロックＢＬＫの前後にそれぞれ位置する保護コードに基づいて、そのデータが正しいか否かを判定することができる。従って、本実施例では、ウェアレベリングが実行されるフラッシュメモリデバイス２を用いた場合でも、正しいデータのみを転送することができ、信頼性を高めることができる。
【００４０】
本実施形態では、フラッシュメモリデバイス２に書き込まれるデータについて、論理ブロックＢＬＫ毎に保護コードを付加する。従って、論理ブロックＢＬＫ単位でデータを読み書きすることができ、使い勝手が向上する。以下、本実施形態を詳細に説明する。
【実施例１】
【００４１】
図２は、本実施例によるストレージシステムの全体構成を示す説明図である。このストレージシステムは、例えば、少なくとも一つのストレージコントローラ１０と、少なくとも一つの記憶デバイス搭載部２０と、少なくとも一つの保守端末３０と、少なくとも一つのホスト４０とを備えている。
【００４２】
ホスト４０は図１中のホスト４に、フラッシュメモリデバイス（以下、ＳＳＤ）２１は図１中のフラッシュメモリデバイス２にそれぞれ対応する。第１保護コード設定部１Ａ及び第２保護コード設定部１Ｂは、ストレージコントローラ１０によって実現される。
【００４３】
ホスト４０とストレージコントローラ１０とは通信経路ＣＮ１０を介して相互通信可能に接続されており、ストレージコントローラ１０と記憶デバイス搭載部２０とは通信経路ＣＮ２０を介して相互通信可能に接続されている。各通信経路ＣＮ１０，ＣＮ２０は、例えば、ＩＰ（Internet Protocol）を利用するＩＰ＿ＳＡＮや、ＦＣＰ（Fibre Channel Protocol）を利用するＦＣ＿ＳＡＮのように構成される。
【００４４】
保守端末３０は、例えば、ＬＡＮ（Local Area Network）のような通信ネットワークＣＮ３０を介して、ストレージコントローラ１０内の各ＣＨＡ１１及び各ＤＫＡ１２にそれぞれ接続されている。保守端末３０は、ストレージコントローラ１０内の各種状態に関する情報を収集して、端末画面に表示させることができる。また、保守端末３０は、ストレージコントローラ１０に各種指示を与えて、設定変更等を行うことができる。
【００４５】
ホスト４０は、例えば、サーバコンピュータやワークステーション、メインフレームコンピュータのように構成される。ホスト４０は、ストレージコントローラ１０を介して、記憶デバイス搭載部２０に記憶されたデータを利用する。
【００４６】
ストレージコントローラ１０は、ホスト４０と記憶デバイス搭載部２０に搭載されている各記憶デバイス２１，２２，２３との間のデータ授受を制御する。ストレージコントローラ１０は、例えば、複数のチャネルアダプタ１１と、複数のディスクアダプタ１２と、複数のキャッシュメモリ１３と、複数の相互接続用スイッチ１４とを備えている。以下、チャネルアダプタをＣＨＡ、ディスクアダプタをＤＫＡと呼ぶ。ストレージコントローラ１０は、各回路１１，１２，１３，１４をそれぞれ複数ずつ備えることにより、冗長性を確保し、信頼性を高めている。
【００４７】
ＣＨＡ１１は、ホスト４０とのデータ通信を制御する電子回路である。ＤＫＡ１２は、記憶デバイス２１，２２，２３とのデータ通信を制御する電子回路である。キャッシュメモリ１３は、ＣＨＡ１１とＤＫＡ１２との間でデータを受け渡すために使用される。また、キャッシュメモリ１３には、例えば、どのような記憶デバイスがどこに搭載されているかを示す情報、どの論理ボリュームがどのホスト４０に使用されているかを示す情報、その他の管理用情報や制御情報が記憶されている。
【００４８】
相互接続用スイッチ（図中、ＳＷ）１４は、各ＣＨＡ１１と各ＤＫＡ１２と各キャッシュメモリ１３とをそれぞれ相互に接続するための装置である。例えば、ライトコマンドを処理する場合、ＣＨＡ１１は、ホスト４０から受信したライトデータを、スイッチ１４を介して、キャッシュメモリ１３に転送する。ＤＫＡ１２は、スイッチ１４を介して、キャッシュメモリ１３からライトデータを読込み、記憶デバイス２１〜２３のいずれかに書き込む。逆に、リードコマンドを処理する場合、ＤＫＡ１２は、記憶デバイス２１〜２３のいずれかから読み出したデータを、スイッチ１４を介して、キャッシュメモリ１３に転送する。ＣＨＡ１１は、スイッチ１４を介して、キャッシュメモリ１３からデータを読出し、ホスト４０に送信する。
【００４９】
例えば、第１保護コードは、ＣＨＡ１１によって論理ブロックＢＬＫの後側に付加され、第２保護コードはＤＫＡ１２によって論理ブロックＢＬＫの前側に付加される。なお、各保護コードＢＣ，ＦＣを生成して論理ブロックＢＬＫに付加するための専用回路を、ストレージコントローラ１０内に設ける構成でもよい。
【００５０】
記憶デバイス搭載部２０は、複数種類の記憶デバイス２１，２２，２３をそれぞれ複数ずつ備えることができる。例えば、第１記憶デバイス２１は、ＳＳＤである。第２記憶デバイス２２は、ＳＡＳ（Serial Attached SCSI）ディスクである。第３記憶デバイス２３は、ＡＴＡ（AT Attachment）ディスクである。本発明は、ウェアレベリングの行われる記憶デバイス２１に関するものであるため、以下、ＳＳＤ２１に着目して説明する。記憶デバイス搭載部２０は、ＳＳＤ２１のみを搭載する構成でもよい。なお、書換可能であり、かつ、ウェアレベリングが実行される記憶デバイスであれば、ＳＳＤ以外の他の記憶デバイスを用いる場合にも本発明を適用することができる。
【００５１】
図２に示すように、複数のＳＳＤ２１をグループ化してＲＡＩＤグループ２５を構成することができる。ＲＡＩＤグループ２５の記憶領域を用いて、一つまたは複数の論理ボリュームを生成することができる。その論理ボリュームは、ＣＨＡ１１の有する通信ポート等に対応付けられて、ホスト４０に提供される。ホスト４０は、論理ボリュームに対して、論理アドレスを指定してデータの読み書きを要求する。
【００５２】
図３は、ＳＳＤ２１内で実行されるウェアレベリングの様子を示す説明図である。ウェアレベリングは、例えば、アイドル時等を利用して実行される。図３（１）には、ＳＳＤ２１内で使用されるアドレス管理テーブルＴ１０の構成例が示されている。この管理テーブルＴ１０は、論理ボリューム内の論理アドレスと、その論理アドレスのデータが実際に記憶されている物理アドレスとを対応付けて管理する。管理テーブルＴ１０は、図４に示すフラッシュメモリコントローラ２１０が備えている。
【００５３】
管理テーブルＴ１０は、例えば、論理アドレスを管理する欄Ｃ１０と、その論理アドレスのデータのうち先頭データの位置を管理する欄Ｃ１１と、その論理アドレスのデータのうち末尾データの位置を管理する欄Ｃ１２とを備える。先頭データの位置を管理する欄Ｃ１１は、先頭データを含むページのアドレスを特定する欄Ｃ１１Ａと、そのページ内の場所を指し示すポインタを特定する欄Ｃ１１Ｂとを備える。同様に、論理アドレスの末尾データの位置を管理する欄Ｃ１２も、末尾データを含むページのアドレスを特定する欄Ｃ１２Ａと、そのページ内の場所を指し示すポインタを特定する欄Ｃ１２Ｂとを備える。
【００５４】
図３（２）に示すように、論理アドレスＬＢＡ１０のデータは、ＳＳＤ２１のチップ２１１内において、ページｅ１０の先頭ポインタｐｓ１０から同一ページｅ１０の末尾ポインタｐｅ１０までの領域に記憶されている。チップ２１１は、５１２バイトのブロックを複数備えている。各ページは、図３に示す例では、それぞれ４個ずつのブロックから構成されている。従って、図示の例では、ページサイズは、２０４８バイトである。
【００５５】
図３（３）に示すように、フラッシュメモリコントローラ２１０は、消去回数（書込み回数）を均一化させるために、ＬＢＡ１０のデータを最初の記憶場所から別の記憶場所に移動させる。図３に示す例では、ＬＢＡ１０のデータは、ページｅ３からページｅ８に移される。この物理的記憶場所の変更は、管理テーブルＴ１０に記録される。
【００５６】
図４は、ホスト４０からＳＳＤ２１までの経路上において使用されるブロックの構成を模式的に示す説明図である。ホスト４０とＣＨＡ１１とは、５１２バイトの論理ブロックＢＬＫを用いてデータを送受信する。ライトデータは、一つまたは複数の論理ブロックＢＬＫに格納されて、ホスト４０からＣＨＡ１１に送信される。
【００５７】
ＣＨＡ１１は、受信したライトデータをキャッシュメモリ１３に転送する。ライトデータをキャッシュメモリ１３に格納する際に、各論理ブロックＢＬＫの末尾には、第１保護コードＢＣがそれぞれ付加される。キャッシュメモリ１３上で各論理ブロックＢＬＫに第１保護コードＢＣを付加する構成でもよいし、ＣＨＡ１１とキャッシュメモリ１３との間に、第１保護コードＢＣを論理ブロックＢＬＫに付加するための専用回路を設ける構成でもよい。
【００５８】
第１保護コードＢＣには、複数の情報が含まれている。一つは、論理ブロックＢＬＫの論理アドレスに基づいて生成されるアドレスデータ（ＬＡ）である。他の一つは、論理ブロックＢＬＫのデータにエラーが生じているか否かを検査するための検査用データ（ＬＲＣ）である。第１保護コードＢＣのサイズは、例えば８バイトである。５１２バイトの論理ブロックＢＬＫに８バイトの第１保護コードＢＣが付加されることにより、５２０バイトの拡張論理ブロックＥＬＫが生成される。
【００５９】
ＤＫＡ１２は、キャッシュメモリ１３から拡張論理ブロックＥＬＫのデータを受信すると、各拡張論理ブロックＥＬＫの先頭に第２保護コードＦＣをそれぞれ付加する。第２保護コードＦＣは、８バイトの論理アドレスから構成される。即ち、拡張論理ブロックＥＬＫに含まれる論理ブロックＢＬＫの論理アドレスが、第２保護コードＦＣの内容として使用される。５２０バイトの拡張論理ブロックＥＬＫに８バイトの第２保護コードＦＣが付加されることにより、５２８バイトの第２拡張論理ブロックＳＥＬＫが生成される。つまり、第２拡張論理ブロックＳＥＬＫは、５１２バイトの論理ブロックＢＬＫの前後に、８バイトずつの保護コードＦＣ，ＢＣをそれぞれ付加することで生成される。
【００６０】
ＳＳＤ２１は、フラッシュメモリコントローラ２１０と、フラッシュメモリコントローラ２１０により制御されるフラッシュメモリチップ２１１とを備える。データは、フラッシュメモリチップ２１１に記憶される。フラッシュメモリチップ２１１は、複数のページを備えている。各ページは、それぞれ１つ以上のブロックから構成される。ブロックサイズは５１２バイトである。
【００６１】
フラッシュメモリコントローラ２１０は、一つまたは複数の第２拡張論理ブロックＳＥＬＫから構成されるデータを、ＤＫＡ１２から受信する。フラッシュメモリコントローラ２１０は、第２拡張論理ブロックＳＥＬＫをフラッシュメモリチップ２１１のページに記憶させる。このように、ホスト４０から受信されたライトデータは、論理ブロックＢＬＫ毎に保護コードＢＣ，ＦＣがそれぞれ付加されて、フラッシュメモリチップ２１１の１つ以上のページに書き込まれる。
【００６２】
ホスト４０がリードコマンドを発行すると、ＣＨＡ１１は、そのリードコマンドを受信し、ＤＫＡ１２に通知する。ＤＫＡ１２は、論理アドレスを指定して、フラッシュメモリコントローラ２１０にデータの読出しを要求する。フラッシュメモリコントローラ２１０は、管理テーブルＴ１０を用いて、ＤＫＡ１２から要求されたデータをフラッシュメモリチップ２１１内のページから読み出す。
【００６３】
ＤＫＡ１２は、保護コードＢＣ，ＦＣの付加されたデータを受信すると、第１保護コードＢＣから抽出される論理アドレスと第２保護コードＦＣの示す論理アドレスとが一致するか否かを判定する。両方の論理アドレスが一致する場合、ＤＫＡ１２は、データから第２保護コードＦＣを取り除いて、キャッシュメモリ１３に転送する。ＣＨＡ１１は、キャッシュメモリ１３からデータを読込み、そのデータから第１保護コードＢＣを除去して、ホスト４０に送信する。あるいは、ＤＫＡ１２は、データから各保護コードＢＣ，ＦＣをそれぞれ取り除いて、キャッシュメモリ１３に転送することもできる。
【００６４】
図５は、各ブロックＢＬＫ，ＥＬＫ，ＳＥＬＫの構成を示す説明図である。上述の通り、ホスト４０は、５１２バイトの論理ブロックＢＬＫ単位で、ライトデータをストレージコントローラ１０に送信する（図５（ａ））。
【００６５】
図５（ｂ）に示すように、ストレージコントローラ１０は、５１２バイトの論理ブロックＢＬＫの末尾に、８バイトの第１保護コードＢＣを付加する。第１保護コードＢＣは、その論理ブロックＢＬＫの論理アドレスに基づいて生成されるアドレス情報と、その論理ブロックＢＬＫのデータから算出される検査用データとが含まれている。論理ブロックＢＬＫに第１保護コードＢＣが付加されることによって、５２０バイトの拡張論理ブロックＥＬＫが生成される。
【００６６】
図５（ｃ）に示すように、ＤＫＡ１２は、５２０バイトの拡張論理ブロックＥＬＫの先頭に、８バイトの第２保護コードＦＣを付加する。これにより、５２８バイトの第２拡張論理ブロックＳＥＬＫが生成される。第２保護コードＦＣは、拡張論理ブロックＥＬＫに含まれる論理ブロックＢＬＫの論理アドレスから構成される。
【００６７】
図６を参照してライトコマンドの処理方法を説明する。なお、フローチャート中では、便宜上、保護コードをコードと、論理ブロックをブロックと、キャッシュメモリをキャッシュと、フラッシュメモリをＦＭと、それぞれ略記する。
【００６８】
ホスト４０がライトコマンドを発行すると（Ｓ１０）、ストレージコントローラ１０は、ホスト４０から受信したライトデータについて、各論理ブロックＢＬＫ毎に、それぞれ第１保護コードＢＣを付加し、拡張論理ブロックＥＬＫに変換する（Ｓ１１）。
【００６９】
ストレージコントローラ１０は、拡張論理ブロックＥＬＫ単位のデータに変換されたライトデータを、キャッシュメモリ１３に格納し（Ｓ１２）、書込み完了をホスト４０に通知する（Ｓ１３）。ホスト４０は、その通知を受領することにより、ライト処理の完了を確認する（Ｓ１４）。
【００７０】
キャッシュメモリ１３にライトデータを格納した時点で、ライトコマンドの処理完了をホスト４０に報告することにより、ホスト４０から見た場合のライト性能を向上させることができる。このような方法を非同期処理と呼ぶ。これに対し、ライトデータをＳＳＤ２１に実際に書き込んだ時点で、ホスト４０にライト処理完了を通知する方法を同期処理と呼ぶ。いずれの方法を採用してもよい。
【００７１】
ストレージコントローラ１０は、適当なタイミングを見計らって、デステージ処理を実行する。デステージ処理とは、キャッシュメモリ１３のみ格納されているデータを、記憶デバイス（本実施例ではＳＳＤ２１である）に書き込む処理である。デステージされたデータは、ＳＳＤ２１によってバックアップされているので、キャッシュメモリ１３から消去しても構わない。
【００７２】
デステージ処理が開始されると、ＤＫＡ１２は、キャッシュメモリ１３からライトデータを読み出す（Ｓ１５）。ライトデータは、一つ以上の拡張論理ブロックＥＬＫから構成される。ＤＫＡ１２は、拡張論理ブロックＥＬＫの先頭に第２保護コードＦＣを付加して、第２拡張論理ブロックＳＥＬＫのライトデータに変換する（Ｓ１６，Ｓ１７）。ライトデータ中の各拡張論理ブロックＥＬＫに第２保護コードＦＣをそれぞれ付加した場合（S17:YES）、ＤＫＡ１２は、リトライカウンタＲＣをリセットし（Ｓ１８）、ＦＭ（つまりＳＳＤ２１）にライトデータを書き込む（Ｓ１９）。
【００７３】
ＦＭコントローラ２１０は、ＤＫＡ１２からライトデータを受信すると（Ｓ２０）、ＦＭチップ２１１のページにライトデータを書込み、管理テーブルＴ１０を更新させる（Ｓ２２）。ＦＭコントローラ２１０は、ＤＫＡ１２に書込み完了を報告する。さらに、ＦＭコントローラ２１０は、図３でも述べたように、例えば、アイドル時等の所定のタイミングを見計らって、ウェアレベリングを実行する（Ｓ３０）。
【００７４】
ＤＫＡ１２は、全ライトデータの書込みが完了したか否かを判定する（Ｓ２３）。即ち、ＤＫＡ１２は、デステージ処理が完了したか否かを判定する（Ｓ２３）。ライトデータを全てＳＳＤ２１に書き込んだ場合（S23:YES）、本処理は完了する。
【００７５】
ＦＭ（ＳＳＤ２１）への書込みが失敗した場合（S23:NO）、ＤＫＡ１２は、リトライカウンタＲＣを１つ増加させ（Ｓ２４）、所定の閾値ＴｈＲＣを超えたか否かを判定する（Ｓ２５）。リトライカウンタＲＣの値が所定の閾値ＴｈＲＣを超えるまで（S25:NO）、ＤＫＡ１２はＦＭへのライトデータ書込みに挑戦する（Ｓ１９）。リトライカウンタＲＣの値が所定の閾値ＴｈＲＣを上回ると（S25:YES）、ＤＫＡ１２は、所定のエラー訂正処理を実行する（Ｓ２６）。エラー訂正処理では、例えば、ＳＳＤ２１へアクセスするための経路を主経路から交代経路（副経路）に切り替える等の処理が行われる。
【００７６】
図７は、ストレージコントローラ１０がＳＳＤ２１にデータを書き込む様子を示す説明図である。上述の通り、ストレージコントローラ１０は、論理ブロックＢＬＫの前後に保護コードＦＣ，ＢＣをそれぞれ付加して、５２８バイトの第２拡張論理ブロックＳＥＬＫを生成する。
【００７７】
ＦＭコントローラ２１０は、ＤＫＡ１２からＳＥＬＫ単位のライトデータを受信すると、そのライトデータをＦＭチップ２１１内のページに書き込む。ＦＭコントローラ２１０は、ライトデータの論理アドレスとＦＭチップ２１１内の物理アドレスとの対応関係を、管理テーブルＴ１０に登録する。
【００７８】
図７に示す例では、データＤ０を含む論理ブロックＳＥＬＫは、ページｅ０のポインタｐｓ０からポインタｐｅ０までの範囲に記憶される。第２拡張論理ブロックＳＥＬＫは５２８バイトなので、ページ内の２つのブロックが使用される。
【００７９】
同様に、データＤ１を含む論理ブロックＳＥＬＫは、ページｅ０のポインタｐｓ１からページｅ１のポインタｐｅ１までの範囲に記憶される。なお、ページｅ０とページｅ１とは隣接している。また、各ブロックＳＥＬＫは連続して書き込まれているため、ポインタｐｅ０とポインタｐｅ１とは、同一場所を指し示している。データＤ２を含む論理ブロックＳＥＬＫは、ページｅ１のポインタｐｓ２からページｅ１のポインタｐｅ２までの範囲に記憶される。
【００８０】
図８は、リードコマンドの処理方法を説明する。ホスト４０がリードコマンドを発行すると（Ｓ４０）、ストレージコントローラ１０のＣＨＡ１１は、要求されたデータ（リードデータ）がキャッシュメモリ１３上に存在するか否かを判定する（Ｓ４１）。要求されたデータがキャッシュメモリ１３に記憶されている場合（S41:YES）、ＣＨＡ１１は、そのデータをキャッシュメモリ１３から読み出してホスト４０に送信する（Ｓ４２）。ホスト４０は、ＣＨＡ１１からデータを受信する（Ｓ４３）。
【００８１】
ホスト４０から要求されたデータがキャッシュメモリ１３上に存在しない場合（S41:NO）、ストレージコントローラ１０は、ＳＳＤ２１からデータを読み出す。まず、ＤＫＡ１２は、リトライカウンタＲＣをリセットし（Ｓ４４）、ホスト４０の要求するデータをＳＳＤ２１から読み出す（Ｓ４５）。
【００８２】
ＦＭコントローラ２１０は、ＤＫＡ１２からの指示に従って、ＦＭチップ２１１内のページからデータを読み出す（Ｓ４６）。ＦＭコントローラ２１０は、ＤＫＡ１２から指示された論理アドレスに基づいて管理テーブルＴ１０を参照することにより、要求された論理アドレスのデータがＦＭチップ２１１のどのページのどこに記憶されているかを確認する。そして、ＦＭコントローラ２１０は、ＦＭチップ２１１から読み出したデータを、ＤＫＡ１２に送信する（Ｓ４７）。
【００８３】
ＤＫＡ１２は、ＳＳＤ２１からのデータの読出しが全て完了したか否かを判定する（Ｓ４９）。完了していない場合（S49:NO）、つまり、ＳＳＤ２１からのデータ読出しに失敗した場合（S49:NO）、ＤＫＡ１２は、リトライカウンタＲＣの値を１つ増加させる（Ｓ５０）。ＤＫＡ１２は、リトライカウンタＲＣの値が所定の閾値ＴｈＲＣを超えるまで（S51:NO）、ＳＳＤ２１からのデータ読出しを試みる（Ｓ４５）。リトライカウンタＲＣの値が所定の閾値ＴｈＲＣを超えた場合（S51:YES）、ＤＫＡ１２は、例えば、交代経路への切替等のエラー訂正処理を実行する（Ｓ５２）。
【００８４】
ＳＳＤ２１からのデータ読出しに成功すると（S51:YES）、ＤＫＡ１２は、読み出したデータ中の各第２拡張論理ブロックＳＥＬＫについて、第１保護コードＢＣと第２保護コードＦＣとをそれぞれ抽出する（Ｓ５３）。ＤＫＡ１２は、第１保護コードＢＣに含まれるアドレス情報から論理アドレスを検出する（Ｓ５４）。
【００８５】
ＤＫＡ１２は、第１保護コードＢＣから得られる論理アドレス（図中、ＢＣアドレスと表記）と、第２保護コードＦＣから得られる論理アドレス（図中、ＦＣアドレスと表記）とが一致するか否かを判定する（Ｓ５５）。
【００８６】
両方の論理アドレスが一致する場合（S55:YES）、ＤＫＡ１２は、第１保護コードＢＣに含まれる検査用データ（ＬＲＣ）に基づいて、データにエラーが生じているか否かを判定する（Ｓ５６）。データにエラーが生じていない場合（S56:YES）、ＤＫＡ１２は、ＳＳＤ２１から読み出したデータに含まれる第２保護コードＦＣを除去し（Ｓ５８）、キャッシュメモリ１３に転送する（Ｓ５９）。ＣＨＡ１１は、第１保護コードＢＣが除去されたデータを、ホスト４０に送信する（Ｓ６０）。
【００８７】
一方、第１保護コードＢＣから得られる論理アドレスと第２保護コードＦＣから得られる論理アドレスとが不一致の場合もある（S55:NO）。例えば、ＳＳＤ２１内で実行されるウェアレベリングにより、論理アドレスと物理アドレスとの対応関係が正しく管理されなくなった場合等である。
【００８８】
両方の論理アドレスが不一致の場合（S55:NO）、ＤＫＡ１２は、所定のエラー訂正処理を実行する（Ｓ５７）。例えば、読出し対象の論理ボリュームがＲＡＩＤ１やＲＡＩＤ５等のような冗長性を備えている場合、ＤＫＡ１２は、コレクションコピー等を行うことにより、ホスト４０から要求されたデータを復元する（Ｓ５７）。
【００８９】
第１保護コードＢＣに含まれる検査用データによって、論理ブロック内のビットエラーが検出された場合（S56:NO）、ＤＫＡ１２は、検査用データに基づいてビットエラーを修復する（Ｓ５７）。検査用データだけではエラーを訂正できない場合、コレクションコピー等が行われる。
【００９０】
図９，図１０に基づいてリード処理の様子を説明する。図９は、ＳＳＤ２１から正常にデータを読み出すことができた場合を、図１０は、ＳＳＤ２１から誤ったデータが読み出された場合を、それぞれ示す説明図である。
【００９１】
データＤ１は、その前半部分Ｄ１ａがページｅ０に記憶され、その後半部分Ｄ１ｂがページｅ１に記憶されているものとする。同一のページに記憶されているデータは、ＳＳＤ２１内で一緒に取り扱われる。しかし、データＤ１のように、複数のページｅ０，ｅ１に跨って記憶された場合、ＳＳＤ２１内のアドレス管理エラーによって、誤ったデータが読み出される可能性がある。
【００９２】
そこで、本実施例では、論理ブロックＢＬＫの末尾に論理アドレスを特定可能な第１保護コードＢＣを付加すると共に、論理ブロックＢＬＫの先頭にも論理アドレスを特定可能な第２保護コードＦＣを付加する。
【００９３】
これにより、ＤＫＡ１２は、第１保護コードＢＣから得られる論理アドレスと第２保護コードＦＣから得られる保護コードとが一致する場合に、正しいデータがＳＳＤ２１から読み出されたと判断することができる。
【００９４】
なお、第１保護コードＢＣから得られる論理アドレスと第２保護コードＦＣから得られる論理アドレスとを比較する処理は、全ての論理ブロックについて実行することもできるし、あるいは、複数のページに跨って記憶された論理ブロックについてのみ実行することもできる。複数ページに跨って記憶された論理ブロックであることを、ＤＫＡ１２が知ることのできる場合は、可能である。
【００９５】
図９，図１０では、複数ページに跨る論理ブロックについてのみ各保護コードＢＣ，ＦＣの比較を行うかのように示している。他の論理ブロックについては、第１保護コードＢＣ内の検査用データに基づく検査のみを行うかのように示している。しかし、それは説明のための例示であって、各論理ブロックのそれぞれについて、各保護コードＢＣ，ＦＣの比較と検査用データの検査とを行うことができる。
【００９６】
図１０に示すように、ＳＳＤ２１内で論理アドレスと物理アドレスとの対応関係の管理にエラーが生じる場合が考えられる。例えば、管理テーブルＴ１０では、ページｅ１のデータがページｅ２に移されたことになっているが、実際にはそうなっておらず、ページｅ１のデータは相変わらずページｅ１に記憶されている場合が考えられる。
【００９７】
この場合において、ＤＫＡ１２が論理アドレスＬＢＡ１のデータをＦＭコントローラ２１０に要求すると、ＦＭコントローラ２１０は、ページｅ０に記憶されているデータＤ１ａと、ページｅ２に記憶されているデータとを読み出して、ＤＫＡ１２に転送する。しかし、論理アドレスＬＢＡ１の後半部分Ｄ１ｂは、ページｅ２に存在せず、ページｅ０に存在する。従って、ＤＫＡ１２に転送されたデータのうち、ページｅ２から読み出されたデータ（Ｄ１ｂに対応するデータ）は誤っている。ＤＫＡ１２は、各保護コードＦＣ，ＢＣからそれぞれ得られる論理アドレスを比較することにより、期待通りのデータが読み出されたか否かを判定できる。
【００９８】
このように構成される本実施例では、論理ブロックの前後に、論理アドレスを特定可能な保護コードＦＣ，ＢＣを付加する。従って、本実施例では、各保護コードから得られる論理アドレスを比較することにより、正しいデータが読み出されたか否かを容易に判定することができ、信頼性を高めることができる。
【００９９】
本実施例では、各論理ブロックにそれぞれ保護コードＦＣ，ＢＣを付加するため、論理ブロック単位でデータを読み出す場合でも、その論理ブロックの論理アドレスが正しいか否かを判別できる。従って、論理ブロック単位でデータを読み書きすることができ、使い勝手が向上する。
【実施例２】
【０１００】
図１１〜図１４に基づいて第２実施例を説明する。本実施例を含む以下の各実施例は、上述した第１実施例の変形例に相当する。従って、本実施例では、第１実施例との相違を中心に説明する。本実施例では、ページサイズが論理ブロックＢＬＫのサイズと同一の５１２バイトに設定されている場合の方法を説明する。なお、本実施例のフローチャートは、実施例３と共に後述する。
【０１０１】
図１１は、ストレージコントローラ１０で使用されるデータ構成とＳＳＤ２１で使用されるデータ構成との関係を示す説明図である。図１１の下側に示すように、本実施例では、一つページは一つのブロックから構成されており、５１２バイトのページサイズを有している。
【０１０２】
ＳＳＤ２１に入力されるブロックサイズは５２０バイトであり、ＳＳＤ２１内のページサイズは５１２バイトである。従って、拡張論理ブロックＥＬＫ６４個分のデータ（＝５２０×６４＝３３２８０）は、６５ページ分のデータ（＝５１２×６５＝３３２８０）に等しい。つまり、拡張論理ブロックＥＬＫ６４個毎に、拡張論理ブロックＥＬＫ間のブロック境界とページ間のページ境界とが一致する。換言すれば、５１２バイトと５２０バイトの最小公倍数に対応して、拡張論理ブロックＥＬＫの境界とページ境界とが一致する。拡張論理ブロック境界とページ境界が一致する境界を、本実施例では共通境界ＣＢと呼ぶ。本実施例では、共通境界ＣＢの直前に位置する論理ブロックの保護コードＢＣを、共通境界ＣＢの直後に位置する論理ブロックの先頭に付加する。
【０１０３】
図１２は、共通境界ＣＢ直前の論理ブロックの末尾に付加されている第１保護コードＢＣをコピーして、共通境界ＣＢ直後の論理ブロックの先頭に付加する様子を示す説明図である。
【０１０４】
図１２（ａ）に示すように、５１２バイトと５２０バイトの最小公倍数に対応して、拡張論理ブロックの境界とページ境界とは、共通境界ＣＢで一致する。図１２（ｂ）に示すように、共通境界ＣＢの直後に位置する５１２バイトのデータＤ１は、一つのページ内に収容される。つまり、共通境界ＣＢの直後のページには、データのみが記憶されており、そのデータの正否を判断するためのデータは記憶されていない。従って、ＳＳＤ２１内部でアドレス管理エラーが発生した場合に、Ｄ１のデータが読み出されても、そのデータＤ１が正しいか否かを判定することができない。
【０１０５】
そこで、本実施例では、図１２（ｃ）に示すように、共通境界ＣＢの直前に記憶されている第１保護コードＢＣを、共通境界ＣＢの直後のページの先頭にコピーさせる。換言すれば、共通境界ＣＢの直後に記憶される論理ブロックについてのみ、その先頭に前の論理ブロックの第１保護コードＢＣを付加する。このコピー処理は、ＦＭコントローラ２１０により実行される。
【０１０６】
このコピー処理により、図１３の下側に示すように、共通境界ＣＢの直後のページｅ２には、前の論理ブロックＤ０の第１保護コードＢＣ（Ｄ０）とデータＤ１の前半部分Ｄ１ａとが記憶される。更にその次のページｅ３には、データＤ１の後半部分Ｄ１ｂと第１保護コードＢＣと別のデータＤ２とがそれぞれ記憶される。
【０１０７】
ＤＫＡ１２がデータＤ１の読出しをＳＳＤ２１に指示した場合、ＦＭコントローラ２１０は、ページｅ２から、前の論理ブロックＤ０の第１保護コードＢＣ（Ｄ０）とデータＤ１ａとを読み出し、さらに、ページｅ３から、データＤ１ｂ及び第１保護コードＢＣ（Ｄ１）を読み出す。ＦＭコントローラ２１０は、論理ブロックの先頭に付加された第１保護コードＢＣ（Ｄ０）から得られる論理アドレスと、論理ブロックの末尾に付加された第１保護コードＢＣ（Ｄ１）から得られる論理アドレスとを比較する。
【０１０８】
即ち、ＦＭコントローラ２１０は、各保護コードＢＣ（Ｄ０），ＢＣ（Ｄ１）から得られる論理アドレスが正常に連続しているか否かを判定する。データＤ０とデータＤ１とは連続したデータのため、データＤ１が正常に読み出された場合、保護コードＢＣ（Ｄ０）の論理アドレスと保護コードＢＣ（Ｄ１）の論理アドレスとは連続している。両方の論理アドレスが連続している場合、ＦＭコントローラ２１０は、ＦＭチップ２１１から正しいデータを読み出せたと判断し、ＤＫＡ１２にデータを転送する。
【０１０９】
図１４は、ＳＳＤ２１内でアドレス管理エラーが発生した場合を示す。図１４の例では、管理テーブルＴ１０では、ページｅ２のデータがページｅ５に移動されたことになっているが、実際にはページｅ２のデータは移動していない。
【０１１０】
ＦＭコントローラ２１０は、ページｅ５とページｅ３とから、それぞれデータを読出し、論理アドレスが連続しているか否かを検査する。この場合、ページｅ５にデータＤ１ａは移動していないため、第１保護コードＢＣ（Ｄ１）に連続する論理アドレスを、ページｅ５のデータから得られない。従って、ＦＭコントローラ２１０は、読出しに失敗したと判定し、ＤＫＡ１２にエラーを通知する。
【０１１１】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、ページサイズと論理ブロックＢＬＫのサイズとを同一とし、共通境界ＣＢ直後に位置する論理ブロックの先頭に、前の論理ブロックの第１保護コードＢＣを付加する。従って、本実施例では、８バイトの第２保護コードＦＣが不要であり、かつ、特定の論理ブロックについてのみ複数の第１保護コードＢＣを付加するため、第１実施例に比べて、ＦＭチップ２１１の記憶領域を有効に利用できる。また、本実施例では、ＦＭコントローラ２１０がデータの信頼性を検証するため、ＤＫＡ１２の負担を増大させることなく、ストレージシステムの信頼性及び使い勝手を向上できる。
【実施例３】
【０１１２】
図１５〜図２０に基づいて第３実施例を説明する。本実施例では、各ページが複数ブロック分のサイズを有しており、かつ、読出し対象データの直前のデータに付加されている第１保護コードＢＣを利用して、読出し対象データの正否を判定する。
【０１１３】
図１５は、ライトデータをＳＳＤ２１に格納する様子を示す説明図である。本実施例でも、前記各実施例と同様に、各論理ブロックＢＬＫの末尾に第１保護コードＢＣをそれぞれ付加する。本実施例では、第１保護コードＢＣの付加されたデータをそのままＦＭチップ２１１に記憶させる。
【０１１４】
図１６は、ＳＳＤ２１からデータを正常に読み出す場合を示す説明図である。例えば、ＤＫＡ１２がデータＤ１の読出しを指示すると、ＦＭコントローラ２１０は、ページｅ０からデータＤ１の前半部分Ｄ１ａと、データＤ１の直前のデータＤ０に付加されている第１保護コードＢＣ（Ｄ０）とをそれぞれ読み出す。さらに、ＦＭコントローラ２１０は、ページｅ１からデータＤ１の後半部分Ｄ１ｂと、データＤ１に付加された第１保護コードＢＣ（Ｄ１）とをそれぞれ読み出す。
【０１１５】
ＦＭコントローラ２１０は、読出し対象データＤ１に付加されている第１保護コードＢＣ（Ｄ１）から得られる論理アドレスと、読出し対象データＤ１の直前に位置するデータＤ０に付加されている第１保護データＢＣ（Ｄ０）から得られる論理アドレスとを比較し、両方の論理アドレスが正常に連続しているか否かを判定する。ここで、正常に連続するとは、前の論理アドレスよりも後ろの論理アドレスの方が所定数だけ増加していることを意味する。
【０１１６】
図１７は、ＳＳＤ２１内でアドレス管理エラーが発生した場合を示す。例えば、管理テーブルＴ１０では、ページｅ０のデータがページｅ７に移動されたことになっているが、実際にはデータは移動していないとする。
【０１１７】
ＤＫＡ１２からデータＤ１の読出しを指示されると、ＦＭコントローラ２１０は、ページｅ７とページｅ１とからそれぞれデータを読み出す。しかし、実際にはデータは移動していないため、ページｅ７から読み出されるデータには、データＤ１の前半部分Ｄ１ａのデータも、データＤ０の第１保護コードＢＣ（Ｄ０）もいずれも含まれていない。従って、ＦＭコントローラ２１０は、比較対象の論理アドレスが正しく連続していないと判定し、ＤＫＡ１２にエラーを通知する。
【０１１８】
次に、図１８〜図２０に基づいて、本実施例及び第２実施例に係るフローチャートを説明する。即ち、第２実施例と第３実施例とは同時に実施することができる。図１８は、初期設定処理を示すフローチャートである。
【０１１９】
ストレージコントローラ１０のＤＫＡ１２は、リトライカウンタＲＣをリセットし（Ｓ７０）、ＦＭコントローラ２１０に起動を要求する（Ｓ７１）。ＦＭコントローラ２１０は、起動要求を受信すると起動処理を開始する（Ｓ７２）。ＦＭコントローラ２１０は、起動処理を終了すると、ＤＫＡ１２に通知する（Ｓ７３）。ＤＫＡ１２は、ＦＭコントローラ２１０が正常に起動したか否かを判定する（Ｓ７４）。
【０１２０】
ＦＭコントローラ２１０が正常に起動した場合（S74:YES）、ＤＫＡ１２は、ＦＭコントローラ２１０にアドレス演算用のパラメータを転送する（Ｓ７５）。ＦＭコントローラ２１０は、ＤＫＡ１２から受信したアドレス演算用のパラメータを、ＦＭコントローラ内部のメモリまたはＦＭチップ２１１に記憶させる（Ｓ７６）。アドレス演算用のパラメータとは、第１保護コードＢＣに含まれるアドレス情報（ＬＡ）から、論理アドレスを算出するために使用されるパラメータである。
【０１２１】
ＦＭコントローラ２１０が正常に起動しない場合（S74:NO）、ＤＫＡ１２は、リトライカウンタＲＣの値を１つ増加させ（Ｓ７７）、リトライカウンタＲＣの値が所定の閾値ＴｈＲＣを超えたか否かを判定する（Ｓ７８）。カウンタＲＣの値が閾値ＴｈＲＣを超えるまで（S78:NO）、ＤＫＡ１２はＦＭコントローラに起動を要求する（Ｓ７１）。カウンタＲＣの値が閾値ＴｈＲＣを超えた場合（S78:YES）、ＤＫＡ１２は、エラー訂正処理を行う（Ｓ７９）。ＤＫＡ１２は、例えば、ＳＳＤ２１から読み出せなかったデータを、コレクションコピー等によって復元する。
【０１２２】
図１９はライトコマンドを処理するフローチャートである。ＦＭコントローラ２１０は、ＤＫＡ１２からデータの書込みを指示されると、ページサイズが５１２バイトよりも大きいか否かを判定する（Ｓ９０）。つまり、ＦＭコントローラ２１０は、ページサイズが５１２バイトに設定されているか（第２実施例）、それとも５１２バイトの複数倍に設定されているか（第３実施例）を判別する（Ｓ９０）。
【０１２３】
ページサイズが５１２バイトよりも大きい場合（S90:YES）、ＦＭコントローラ２１０は、ＤＫＡ１２から受信したデータを、そのままＦＭチップ２１１内のページに書き込む（Ｓ９１）。
【０１２４】
ページサイズが５１２バイト以下の場合（S90:NO）、ＦＭコントローラ２１０は、ページ境界とブロック境界とが一致するか否かを判定する（Ｓ９２）。つまり、ＦＭコントローラ２１０は、論理ブロックの末尾がページ境界に一致するか否かを判定する。
【０１２５】
ページ境界とブロック境界とが一致する場合（S92:YES）、ＦＭコントローラ２１０は、その拡張論理ブロックに付加されている第１保護コードＢＣを抽出し（Ｓ９３）、次の拡張論理ブロックの先頭に付加する（Ｓ９４）。即ち、ＦＭコントローラ２１０は、共通境界ＣＢの直後のページの先頭に、前のページの末尾に記憶されている第１保護コードＢＣをコピーする（Ｓ９４）。
【０１２６】
そして、ＦＭコントローラ２１０は、共通境界ＣＢの直前に位置するページに、データと第１保護コードＢＣとを書き込む（Ｓ９５）。一方、対象の拡張論理ブロックＥＬＫの末尾がページ境界に一致しない場合（S92:NO）、ＦＭコントローラ２１０は、Ｓ９５に移行し、対象の拡張論理ブロックＥＬＫのデータをページに書き込む（Ｓ９５）。
【０１２７】
最後に、ＦＭコントローラ２１０は、書込み処理が完了したか否かを判定し（Ｓ９６）、書込み処理が完了するまで（S96:NO）、Ｓ９０〜Ｓ９５のステップを繰り返して実行する。
【０１２８】
図２０は、リードコマンドを処理するフローチャートである。ＦＭコントローラ２１０は、ＤＫＡ１２からデータの読出しを要求されると、読出し対象のデータを有する論理ブロックが複数ページに跨っているか否かを判定する（Ｓ１００）。
【０１２９】
読出し対象の論理ブロックが複数ページに跨っていない場合（S100:NO）、ＦＭコントローラ２１０は、読出し対象の論理ブロックのデータをＦＭチップ２１１から読み出す（Ｓ１０１）。
【０１３０】
読出し対象の論理ブロックが複数ページに跨っている場合（S100:YES）、ＦＭコントローラ２１０は、その読出し対象の論理ブロックが跨っている各ページを読み出す（Ｓ１０２）。ＦＭコントローラ２１０は、読出し対象の論理ブロックに付加されている第１保護コードＢＣを抽出し、その第１保護コードＢＣに基づいて、読出し対象の論理ブロックの論理アドレスＡｎを算出する（Ｓ１０３）。さらに、ＦＭコントローラ２１０は、読出し対象の論理ブロックの直前に位置する論理ブロックに付加されている第１保護コードＢＣを検出し、その論理アドレスＡｎ−１を算出する（Ｓ１０４）。
【０１３１】
続いて、ＦＭコントローラ２１０は、読出し対象の論理ブロックの論理アドレスＡｎと、直前の論理ブロックの論理アドレスＡｎ−１とが、正常に連続しているか否かを判定する（Ｓ１０５）。両方の論理アドレスＡｎ，Ａｎ−１が正常に連続していない場合（S105:NO）、ＦＭコントローラ２１０は、ＤＫＡ１２にエラーを通知する（Ｓ１０６）。このエラー通知を受けて、ＤＫＡ１２は、例えば、コレクションコピー等を実行し、所望のデータを取得する。
【０１３２】
ＦＭコントローラ２１０は、ＤＫＡ１２から要求されたデータの読出しが全て完了したか否かを判定する（Ｓ１０７）。要求された全データがＦＭチップ２１１から読み出されるまで（S107:NO）、Ｓ１００以下のステップが適宜繰り返される。ＤＫＡ１２から要求された全データがＦＭチップ２１１から読み出されると（S107:YES）、ＦＭコントローラ２１０は、その読み出されたデータをＤＫＡ１２に転送し（Ｓ１０８）、リード処理を終了する。
【０１３３】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、読出し対象の論理ブロックに付加されている第１保護コードＢＣと、読出し対象の論理ブロックの直前に位置する論理ブロックに付加されている第１保護コードＢＣとを比較することにより、読出し対象の論理ブロックを正しく読み出すことができたか否かを判定する。従って、本実施例では、第２保護コードＦＣを論理ブロックに付加したり（第１実施例）、共通境界ＣＢ直前の第１保護コードＢＣを共通境界ＣＢ直後のページにコピーしたり（第２実施例）する必要がない。これにより、本実施例では、比較的簡素な構成で、ＳＳＤ２１のアドレス管理エラーに対応することができ、使い勝手や信頼性を高めることができる。
【０１３４】
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０１３５】
【図１】本発明の実施形態の概念を示す説明図である。
【図２】ストレージシステムの全体構成を示す説明図である。
【図３】ウェアレベリングの概要を模式的に示す説明図である。
【図４】ホストからストレージコントローラを介してフラッシュメモリデバイスに至る、データの流れと論理ブロックの構成を示す説明図である。
【図５】論理ブロックの前後に保護コードが設定される様子を示す説明図である。
【図６】ライト処理のフローチャートである。
【図７】ライト処理の概要を示す説明図である。
【図８】リード処理のフローチャートである。
【図９】リード処理が正常に行われる場合の概要を示す説明図である。
【図１０】リード処理が正しく行われなかった場合の概要を示す説明図である。
【図１１】第２実施例に係るストレージシステムで実行される、データ書込み時の処理を示す説明図である。
【図１２】ページ境界とブロック境界とが一致した場合に、対象ページ内の保護コードを次のページの先頭にコピーする様子を示す説明図である。
【図１３】リード処理が正しく行われた場合の概要を示す説明図である。
【図１４】リード処理が正しく行われなかった場合の概要を示す説明図である。
【図１５】第３実施例に係るストレージシステムで実行される、データ書込み時の処理を示す説明図である。
【図１６】リード処理が正しく行われた場合の概要を示す説明図である。
【図１７】リード処理が正しく行われなかった場合の概要を示す説明図である。
【図１８】ＦＭコントローラを初期設定するための処理を示すフローチャートである。
【図１９】ＦＭチップにデータを書き込む処理を示すフローチャートである。
【図２０】ＦＭチップからデータを読み出す処理を示すフローチャートである。
【符号の説明】
【０１３６】
１：保護コード設定制御部、１Ａ：第１保護コード設定部、１Ｂ：第２保護コード設定部、１Ｃ：保護コード除去部、２：フラッシュメモリデバイス、２Ａ：ウェアレベリング、３：データ保証部、４：ホストコンピュータ、１０：ストレージコントローラ、１１：チャネルアダプタ、１２：ディスクアダプタ、１３：キャッシュメモリ、１４：相互接続用スイッチ、２０：記憶デバイス搭載部、２１：フラッシュメモリデバイス、２２，２３：ハードディスクドライブ、２５：ＲＡＩＤグループ、３０：保守端末、４０：ホストコンピュータ、２１０：フラッシュメモリコントローラ、２１１：フラッシュメモリチップ、ＢＣ：第１保護コード、ＦＣ：第２保護コード、ＢＬＫ：論理ブロック、ＥＬＫ：拡張論理ブロック、ＳＥＬＫ：第２拡張論理ブロック、Ｔ１０：管理テーブル
【図１】
2010055210.tif 000003
【図２】
2010055210.tif 000004
【図３】
2010055210.tif 000005
【図４】
2010055210.tif 000006
【図５】
2010055210.tif 000007
【図６】
2010055210.tif 000008
【図７】
2010055210.tif 000009
【図８】
2010055210.tif 000010
【図９】
2010055210.tif 000011
【図１０】
2010055210.tif 000012
【図１１】
2010055210.tif 000013
【図１２】
2010055210.tif 000014
【図１３】
2010055210.tif 000015
【図１４】
2010055210.tif 000016
【図１５】
2010055210.tif 000017
【図１６】
2010055210.tif 000018
【図１７】
2010055210.tif 000019
【図１８】
2010055210.tif 000020
【図１９】
2010055210.tif 000021
【図２０】
2010055210.tif 000022