(57)【要約】  ストレージ装置は、消去上限回数の異なる複数の領域を含み、複数の領域に含まれる消去単位領域ごとに書き込み完了順序を示すシーケンス番号を関係づけた第１の管理データと、各書き込み間隔と各書き込み先領域との関係を示す第２の管理データとを記憶する。ストレージ装置は、書き込み対象データを書き込む場合に、第１の管理データに基づいて、書き込み対象データの書き込みの発生時点におけるシーケンス番号と第１の管理データの消去単位領域に対応するシーケンス番号との差分により書き込み対象データの書き込み間隔を算出し、第２の管理データに基づいて、書き込み対象データの書き込み間隔に対応する書き込み先領域を選択し、選択された書き込み先領域に、書き込み対象データを書き込み、１つの消去単位領域分の書き込みが完了した場合にシーケンス番号を変更する。
2016088234.tif 000002
【特許請求の範囲】
【請求項１】
消去上限回数の異なる複数の領域を含む記憶部と、  前記複数の領域に含まれる消去単位領域ごとに書き込み完了順序を示すシーケンス番号を関係づけた第１の管理データと、各書き込み間隔と各書き込み先領域との関係を示す第２の管理データと、論理アドレスと前記消去単位領域とを関係づけたアドレス変換データと、を記憶する管理記憶部と、  書き込み対象データを前記記憶部に書き込む場合に、前記アドレス変換データに基づいて、前記書き込み対象データの前記論理アドレスに対応する前記消去単位領域を求め、前記第１の管理データに基づいて、前記書き込み対象データの書き込み発生時点における前記シーケンス番号と前記第１の管理データの前記消去単位領域に対応する前記シーケンス番号との差分により前記書き込み対象データの書き込み間隔を算出し、前記第２の管理データに基づいて、前記書き込み対象データの書き込み間隔に対応する前記書き込み先領域を選択する選択部と、  前記選択部によって選択された前記書き込み先領域に、前記書き込み対象データを書き込み、１つの消去単位領域分の書き込みが完了した場合に前記シーケンス番号を変更する書き込み部と、を具備する、ストレージ装置。
【請求項２】
前記各書き込み間隔に対応する書き込み回数を示すヒストグラムデータを生成するヒストグラム生成部と、  前記ヒストグラムデータに基づいて、前記複数の領域のうち消去上限回数の多い第１の領域に書き込まれたデータ量が前記第１の領域の実効容量に相当するように、前記第１の領域に対応する書き込み間隔の境界値を求め、前記境界値を前記第２の管理データに設定する境界設定部と、をさらに具備する請求項１のストレージ装置。
【請求項３】
前記第１の管理データは、前記消去単位領域ごとに、消去回数を関係づけており、  前記複数の領域のデータ容量と、前記複数の領域の前記消去上限回数と、前記第１の管理データの前記消去回数とに基づいて、前記複数の領域に対して測定期間に書き込み可能な第１のデータ量を算出し、前記ヒストグラムデータに基づいて、前記測定期間に書き込まれた第２のデータ量を算出し、前記第２のデータ量が前記第１のデータ量よりも多い場合に、アラートを出力する寿命判定部、をさらに具備する請求項２のストレージ装置。
【請求項４】
前記ヒストグラムデータに基づいて、前記複数の領域に対応する書き込み間隔の範囲に、２以上の書き込み回数のピークがあるか否か判断し、前記２以上の書き込み回数のピークを含む領域を、２以上の分割領域に分割し、前記２以上の分割領域に対応する書き込み間隔を前記第２の管理データに設定する領域設定部、をさらに具備する請求項２のストレージ装置。
【請求項５】
前記第１の管理データは、前記消去単位領域ごとに、消去回数を関係づけており、  前記複数の領域の前記消去上限回数と、前記第１の管理データの前記消去回数とに基づいて、前記複数の領域に含まれる各消去単位領域の消耗度を算出し、一時的に、前記消耗度の高い消去単位領域に対する書き込みと前記消耗度の低い消去単位領域に対する書き込みとを交換するウェアレベリング部、をさらに具備する請求項１のストレージ装置。
【請求項６】
消去上限回数の異なる複数の領域を含む記憶部を備えるストレージ装置に、前記複数の領域に含まれる消去単位領域ごとに書き込み完了順序を示すシーケンス番号を関係づけた第１の管理データと、各書き込み間隔と各書き込み先領域との関係を示す第２の管理データと、論理アドレスと前記消去単位領域とを関係づけたアドレス変換データと、を記憶することと、  書き込み対象データを前記記憶部に書き込む場合に、前記アドレス変換データに基づいて、前記書き込み対象データの前記論理アドレスに対応する前記消去単位領域を求め、前記第１の管理データに基づいて、前記書き込み対象データの書き込み発生時点における前記シーケンス番号と前記第１の管理データの前記消去単位領域に対応する前記シーケンス番号との差分により前記書き込み対象データの書き込み間隔を算出し、前記第２の管理データに基づいて、前記書き込み対象データの書き込み間隔に対応する前記書き込み先領域を選択することと、  選択された前記書き込み先領域に、前記書き込み対象データを書き込み、１つの消去単位領域分の書き込みが完了した場合に前記シーケンス番号を増加することと、を具備する、ストレージ装置の制御方法。
【請求項７】
コンピュータを、  消去上限回数の異なる複数の領域を含む記憶部を備えるストレージ装置に、前記複数の領域に含まれる消去単位領域ごとに書き込み完了順序を示すシーケンス番号を関係づけた第１の管理データと、各書き込み間隔と各書き込み先領域との関係を示す第２の管理データと、論理アドレスと前記消去単位領域とを関係づけたアドレス変換データと、を記憶する制御部と、  書き込み対象データを前記記憶部に書き込む場合に、前記アドレス変換データに基づいて、前記書き込み対象データの前記論理アドレスに対応する前記消去単位領域を求め、前記第１の管理データに基づいて、前記書き込み対象データの書き込み発生時点における前記シーケンス番号と前記第１の管理データの前記消去単位領域に対応する前記シーケンス番号との差分により前記書き込み対象データの書き込み間隔を算出し、前記第２の管理データに基づいて、前記書き込み対象データの書き込み間隔に対応する前記書き込み先領域を選択する選択部と、  前記選択部によって選択された前記書き込み先領域に、前記書き込み対象データを書き込み、１つの消去単位領域分の書き込みが完了した場合に前記シーケンス番号を変更する書き込み部と、して機能させためのプログラムを記憶するコンピュータ読み取り可能な不揮発性記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】  本実施形態は、異なる特性の不揮発性半導体メモリを含むストレージ装置、ストレージ装置の制御方法、及びプログラムを記憶するコンピュータ読み取り可能な不揮発性記憶媒体に関する。
【背景技術】
【０００２】  不揮発性半導体メモリの一例として、ＮＡＮＤ型フラッシュメモリがある。ＮＡＮＤ型フラッシュメモリには、ＳＬＣ（Single Level Cell）、ＭＬＣ（Multi Level Cell）、ｅＭＬＣ（enterprise MLC）等のような種別がある。異なる種別のＮＡＮＤ型フラッシュメモリは異なる特性を持つ。例えば、異なる種別のＮＡＮＤ型フラッシュメモリの消去上限回数は異なる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】  本実施形態は、異なる特性の不揮発性半導体メモリの寿命を長くするストレージ装置、ストレージ装置の制御方法、及びプログラムを記憶するコンピュータ読み取り可能な不揮発性記憶媒体を提供する。
【課題を解決するための手段】
【０００４】  本実施形態のストレージ装置は、記憶部と、管理記憶部と、選択部と、書き込み部とを含む。記憶部は、消去上限回数の異なる複数の領域を含む。管理記憶部は、複数の領域に含まれる消去単位領域ごとに書き込み完了順序を示すシーケンス番号を関係づけた第１の管理データと、各書き込み間隔と各書き込み先領域との関係を示す第２の管理データと、論理アドレスと消去単位領域とを関係づけたアドレス変換データと、を記憶する。選択部は、書き込み対象データを記憶部に書き込む場合に、アドレス変換データに基づいて、書き込み対象データの論理アドレスに対応する消去単位領域を求め、第１の管理データに基づいて、書き込み対象データの書き込み発生時点におけるシーケンス番号と第１の管理データの消去単位領域に対応するシーケンス番号との差分により書き込み対象データの書き込み間隔を算出し、第２の管理データに基づいて、書き込み対象データの書き込み間隔に対応する書き込み先領域を選択する。書き込み部は、選択部によって選択された書き込み先領域に、書き込み対象データを書き込み、１つの消去単位領域分の書き込みが完了した場合にシーケンス番号を変更する。
【図面の簡単な説明】
【０００５】
【図１】図１は、第１の実施形態に係るストレージ装置を備えた計算機システムの構成を例示するブロック図である。
【図２】図２は、書き込み先頭テーブルの一例を示すデータ構造図である。
【図３】図３は、ＮＡＮＤブロックテーブルの一例を示すデータ構造図である。
【図４】図４は、アドレス変換テーブルの一例を示すデータ構造図である。
【図５】図５は、ヒストグラムテーブルの一例を示すデータ構造図である。
【図６】図６は、境界テーブルの一例を示すデータ構造図である。
【図７】図７は、追記書き込み処理の一例を示すフローチャートである。
【図８】図８は、読み出し処理の一例を示すフローチャートである。
【図９】図９は、コンパクション処理の一例を示すフローチャートである。
【図１０】図１０は、コンパクション処理の具体例を示すフローチャートである。
【図１１】図１１は、通常コンパクション及び移動コンパクションの例を示すフローチャートである。
【図１２】図１２は、書き込み先頭テーブルとＮＡＮＤブロックテーブルのシーケンス番号と書き込み対象データの書き込み発生時点におけるシーケンス番号との更新処理の一例を示すフローチャートである。
【図１３】図１３は、制御用データの一例を示すデータ構造図である。
【図１４】図１４は、ＮＡＮＤブロックテーブルを更新する処理の一例を示すフローチャートである。
【図１５】図１５は、種別選択処理の一例を示すフローチャートである。
【図１６】図１６は、ヒストグラム生成処理の一例を示すフローチャートである。
【図１７】図１７は、ヒストグラムテーブルの補正の一例を示すグラフである。
【図１８】図１８は、境界設定処理の一例を示すフローチャートである。
【図１９】図１９は、ヒストグラムと、インデックスＩ，Ｊとの関係の例を示すグラフである。
【図２０】図２０は、各種別に対する書き込み寿命判定処理の一例を示すフローチャートである。
【図２１】図２１は、特定の種別に対する書き込み寿命判定処理の一例を示すフローチャートである。
【図２２】図２２は、第２の実施形態に係るストレージ装置を備えた計算機システムの構成を例示するブロック図である。
【図２３】図２３は、疑似種別設定処理の一例を示すフローチャートである。
【図２４】図２４は、疑似種別の一例を示すグラフである。
【図２５】図２５は、疑似種別が設定されたＮＡＮＤブロックテーブルの一例を示すデータ構造図である。
【図２６】図２６は、疑似種別が設定された境界テーブルの一例を示すデータ構造図である。
【図２７】図２７は、疑似種別が設定された書き込み先頭テーブルの一例を示すデータ構造図である。
【図２８】図２８は、種別間ウェアレベリング処理の一例を示すフローチャートである。
【発明を実施するための形態】
【０００６】  以下、図面を参照して、発明の実施形態について説明する。なお、以下の説明において、略又は実質的に同一の構成要素及び機能については、同一符号を付し、説明を省略するか又は必要に応じて説明を行う。
【０００７】  本実施形態においては、複数の不揮発性メモリが異なる種別の場合を例として説明するが、複数の不揮発性メモリが同じ種別で異なる特性を持つ場合であっても同様に適用可能である。換言すれば、本実施形態は、１以上の不揮発性メモリで消去上限回数の異なる領域が発生する場合に適用可能である。消去上限回数が多い領域ほど、この領域の書き換え寿命は長くなる。
【０００８】  本実施形態において、不揮発性メモリの種別としては、例えば、上述のように、ＳＬＣ、ＭＬＣ、ｅＭＬＣなどがある。
【０００９】  本実施形態では、消去上限回数が異なる不揮発性メモリを、特性が異なる不揮発性メモリとして説明する。しかしながら、不揮発性メモリの特性は、例えば、High Endurance、Read Intensiveなどを意味するとしてもよい。
【００１０】  本実施形態では、種別が異なる場合であっても特性が同じであれば、同じ種別として扱うことができる。
【００１１】  本実施形態に係るストレージ装置は、不揮発性メモリの各消去単位領域に対する書き込み（又は更新）完了順序を示すシーケンス番号を少ないデータ量で管理し、書き込み対象データの書き込みの発生時点におけるシーケンス番号と、当該書き込み対象データを含む消去単位領域に対する書き込みの完了した時点におけるシーケンス番号とに基づいて書き込み間隔を算出し、書き込み間隔に基づいて異なる種別の不揮発性メモリの中から書き込み対象データの書き込み先領域を選択する。
【００１２】  書き込み間隔に対応する不揮発性メモリの種別を選択するために、本実施形態に係るストレージ装置は、各書き込み間隔に対応する書き込み回数を示すヒストグラムを生成し、生成されたヒストグラムに基づいて種別を選択するためのしきい値（境界値）を設定し、書き込み間隔がしきい値を超えるか否かを判断する。
【００１３】  本実施形態において、不揮発性メモリの消去単位領域ごとにシーケンス番号が管理される場合を例として説明する。しかしながら、消去単位領域ではなく、例えば書き込み単位領域の２つ以上の集合、消去単位領域の２つ以上の集合などのように、他の領域サイズでシーケンス番号が管理されてもよい。
【００１４】  本実施形態においては、不揮発性メモリの消去単位領域がどの種別であるか管理されている。そして、不揮発性メモリの消去単位領域の種別ごとに消去上限回数が管理されている。更には、不揮発性メモリの消去単位領域ごとに消去回数が管理されている。
【００１５】  本実施形態において、シーケンス番号は、不揮発性メモリの１消去単位領域分に対する書き込みが完了するごとにインクリメントされる（整数型の変数の値が１ずつ増加される）通し番号である。
【００１６】  本実施形態においては、書き込み間隔として、書き込み対象データの書き込みが発生した場合のシーケンス番号と、書き込み対象データが前に書き込まれた消去単位領域に対応するシーケンス番号との差分であるシーケンス番号差分が用いられる。本実施形態において、書き込み対象データの書き込みが発生した場合のシーケンス番号は、例えば、消去単位領域に対する書き込みが完了するごとに変更される最新のシーケンス番号である。
【００１７】  本実施形態において、不揮発性メモリは、例えば、ＮＡＮＤ型フラッシュメモリなどのような不揮発性半導体メモリとする。しかしながら、不揮発性メモリは、例えば、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random Access Memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase change Random Access Memory：相変化メモリ）、ＲｅＲＡＭ（Resistive Random Access Memory：抵抗変化型メモリ）、又は、ＦｅＲＡＭ（Ferroelectric Random Access Memory：強誘電体メモリ）などのメモリでもよい。
【００１８】  ＮＡＮＤ型フラッシュメモリにおいて、書き込み単位領域はページと称し、消去単位領域はブロックと称する。ブロックは、複数のページを含む。
【００１９】［第1の実施形態］  図１は、第１の実施形態に係るストレージ装置を備えた計算機システムの構成を例示するブロック図である。
【００２０】  計算機システム１は、異なる種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃを含むストレージ装置２と、ストレージ装置２へアクセスする１以上のホスト装置３と、を備える。
【００２１】  ストレージ装置２は、ホストインタフェース４、制御部５、メモリ１４、ＮＡＮＤインタフェース２１、記憶部２２，２３、を備える。
【００２２】  記憶部２２は、異なる種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃを備える。
【００２３】  記憶部２３は、異なる種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリ２３Ａ〜２３Ｃを備える。
【００２４】  ストレージ装置２は、記憶部２２と記憶部２３とにより二重化されている。具体的には、記憶部２２のＮＡＮＤ型フラッシュメモリ２２Ａと記憶部２３のＮＡＮＤ型フラッシュメモリ２３Ａには、同じデータが書き込まれる。ＮＡＮＤ型フラッシュメモリ２２ＢとＮＡＮＤ型フラッシュメモリ２３Ｂには、同じデータが書き込まれる。ＮＡＮＤ型フラッシュメモリ２２ＣとＮＡＮＤ型フラッシュメモリ２３Ｃには、同じデータが書き込まれる。したがって、記憶部２２と記憶部２３とのうちの一方が故障しても、ストレージ装置２は正常に動作可能である。
【００２５】  ＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａは、消去上限回数が多い（書き込み耐性が高い）種別Ａであるとする。例えば、種別ＡはＳＬＣとする。
【００２６】  ＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂは、消去上限回数が中程度（書き込み耐性が中程度）の種別Ｂであるとする。例えば、種別ＢはｅＭＬＣとする。
【００２７】  ＮＡＮＤ型フラッシュメモリ２２Ｃ，２３Ｃは、消去上限回数が少ない（書き込み耐性が低い）種別Ｃであるとする。例えば、種別ＣはＭＬＣとする。
【００２８】  本実施形態においては、ストレージ装置２が３種別のＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃを備える場合を例示している。しかしながら、ストレージ装置２は１、２、又は、４以上の種別のＮＡＮＤ型フラッシュメモリを備えるとしてもよい。
【００２９】  本実施形態において、記憶部２２は、それぞれの種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリを１つ以上含み、記憶部２３は、それぞれの種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリを１つ以上含むとする。それぞれの種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリの数は、種別Ａ〜Ｃの間で異なるとしてもよい。
【００３０】  メモリ１４は、不揮発性メモリである。メモリ１４は、書き込み先頭テーブル１５、ＮＡＮＤブロックテーブル１６、アドレス変換テーブル１７、シーケンス番号１８、ヒストグラムテーブル１９、境界テーブル２０、を記憶する。
【００３１】  書き込み先頭テーブル１５は、種別Ａ〜Ｃごとに、追記形式によりデータが書き込まれる先頭のブロック及び先頭のページを管理する。
【００３２】  ＮＡＮＤブロックテーブル１６は、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの各ブロックの情報を管理する。例えば、ＮＡＮＤブロックテーブル１６は、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃのブロックごとに、シーケンス番号を記憶する。同じブロックに対して、複数回の書き込み完了があった場合には、ＮＡＮＤブロックテーブル１６は、このブロックにおいて最大のシーケンス番号、すなわち、このブロックにおいて最も新しい書き込み完了時のシーケンス番号を記憶する。
【００３３】  アドレス変換テーブル１７は、ホスト装置３の論理アドレスを、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃにおける実際のデータ書き込み位置を示す物理アドレスに変換するための情報である。
【００３４】  本実施形態において、例えば、ホスト装置３の論理アドレスは、セクタ単位（例えば５１２バイト）で割り当てられている。ページデータの論理アドレスは、ＮＡＮＤ型フラッシュメモリのページ単位（例えば４０９６バイト）で割り当てられている。ページデータの論理アドレスは、例えば、ホスト装置３の論理アドレスを８（＝４０９６／５１２）で割って求められる。
【００３５】  シーケンス番号１８は、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの１ブロック分の書き込みが完了するごとにインクリメントされる。シーケンス番号１８は、最も大きい、最新のシーケンス番号である。
【００３６】  例えば、ブロックに対応するシーケンス番号が小さい場合、このブロックに含まれるデータの書き込みは古い。ブロックに対応するシーケンス番号が大きい場合、このブロックに含まれるデータの書き込みは新しい。書き込み対象データの書き込みが発生した場合のシーケンス番号１８と、書き込み対象データが書き込まれているブロックに対する書き込み完了時点のシーケンス番号との差分であるシーケンス番号差分は、書き込み間隔を示す。
【００３７】  例えば、シーケンス番号差分が大きい場合には、書き込み間隔は長いと判断される。例えば、シーケンス番号差分が小さい場合には、書き込み間隔は短いと判断される。
【００３８】  ヒストグラムテーブル１９は、シーケンス番号差分を階級とし、シーケンス番号差分に対応するページ単位の書き込みの発生した回数を示す書き込み回数（サンプル数）を度数とし、シーケンス番号差分と書き込み回数との関係を示すヒストグラムを表す。
【００３９】  境界テーブル２０は、シーケンス番号１８と、書き込み対象データが書き込まれているブロックに対応するシーケンス番号との差分であるシーケンス番号差分に基づいて、種別を選択するために用いられる境界値を含む。
【００４０】  制御部５は、書き込み部６、読み出し部７、コンパクション部８、種別制御部９、を備える。制御部５の各機能は、コンピュータ読み取り可能な不揮発性の記憶媒体３２に記憶された制御プログラム３３を、コンピュータが読み出して実行することで実現されてもよい。
【００４１】  書き込み部６は、ホストインタフェース４を介してホスト装置３からの書き込み要求と書き込み対象データと論理アドレスとを受け、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃのうち、種別選択部１０で選択されたいずれかの種別のＮＡＮＤ型フラッシュメモリに、ＮＡＮＤインタフェース２１を介して、追記形式で書き込み対象データを書き込む。より具体的に説明すると、書き込み部６は、ホスト装置３からの書き込みデータをページデータに分割し、種別選択部１０からページデータの書き込み先の種別の情報を受け、ページデータを選択された種別のＮＡＮＤ型フラッシュメモリに追記形式で書き込む。
【００４２】  書き込み部６は、書き込み後、ＮＡＮＤブロックテーブル１６の有効ブロック数を書き込みにより増えた分と古くなり減った分だけ、アドレス変換テーブル１７を書き込んだ不揮発性メモリのアドレスに、書き込み先頭テーブル１５を新たな空きの領域を指すように更新し、ホスト装置３に応答を返す。更に、書き込み部６は、１ブロック分の書き込みが完了するごとに、ＮＡＮＤブロックテーブル１６において、書き込みが完了されたブロック番号とシーケンス番号１８との関係づけ、シーケンス番号１８の値に１を加算する。
【００４３】  読み出し部７は、ホストインタフェース４を介してホスト装置３から読み出し要求と論理アドレスの情報とを受け、アドレス変換テーブル１７に基づいて論理アドレスを物理アドレスに変換し、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃにおける物理アドレスの示すデータを、ＮＡＮＤインタフェース２１を介して読み出す。そして、読み出し部７は、読み出されたデータを、ホストインタフェース４を介してホスト装置３に送る。
【００４４】  本実施形態では、ホスト装置３とストレージ装置２との間のデータの受け渡しはホストインタフェース４を経由して行われ、ストレージ装置２において制御部５とＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃとの間のデータの受け渡しはＮＡＮＤインタフェース２１を経由して行われる。
【００４５】  コンパクション部８は、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃに追記形式で書き込むための空き容量がなくなった場合に、複数のブロックをまとめて空き領域を生成する。
【００４６】  種別制御部９は、追記形式で書き込まれる種別の選択を制御する。種別制御部９は、種別選択部１０、ヒストグラム生成部１１、境界設定部１２、寿命判定部１３、を備える。
【００４７】  種別選択部１０は、書き込み対象データの書き込み時に算出されるシーケンス番号差分が境界テーブル２０の境界値を超えるか否かの判断に基づいて、追記書き込みによりデータが書き込まれる種別を選択する。より具体的には、まず、種別選択部１０は、アドレス変換テーブル１７に基づいて、論理アドレスに対応する書き込み対象データが書き込まれているブロックを求める。次に、種別選択部１０は、ＮＡＮＤブロックテーブル１６に基づいて、求められたブロックに対する書き込み完了時のシーケンス番号を求め、ブロックに対する書き込み完了時のシーケンス番号とシーケンス番号１８との差分によるシーケンス番号差分を求める。そして、種別選択部１０は、境界テーブル２０に基づいて、書き込み先として、シーケンス番号差分が小さいほど消去可能回数が大きいブロックを選択し、シーケンス番号差分が大きいほど消去可能回数が小さいブロックを選択する。
【００４８】  ヒストグラム生成部１１は、境界テーブル２０の生成に必要なヒストグラムテーブル１９を生成する。例えば、ヒストグラム生成部１１は、算出されたシーケンス番号差分を区分けした各範囲に対して、ページ単位の書き込み回数を集計し、シーケンス番号差分の範囲を階級とし、書き込み回数を度数とするヒストグラムテーブル１９を生成する。ヒストグラム生成部１１は、ホスト装置３からの書き込み時にヒストグラムテーブル１９を更新する。
【００４９】  境界設定部１２は、ヒストグラム生成部１１により生成されたヒストグラムテーブル１９に基づいて、種別Ａ〜Ｃの選択に用いられる境界値を算出し、境界テーブル２０に境界値を設定する。例えば、境界設定部１２は、ヒストグラムテーブル１９に基づいて、各ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの種別Ａ，Ｂに書き込まれたデータ量が種別Ａ，Ｂの実効容量に相当するように、シーケンス番号差分の境界値を求め、境界値を境界テーブル２０に設定する。
【００５０】  寿命判定部１３は、メモリ１４に記憶されたヒストグラムテーブル１９に基づいて、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃに対する実際の書き込み量を算出し、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの書き込み寿命を判定する。本実施形態において、寿命とは、メモリの使用可能期間とする。具体例として、寿命判定部１３は、種別Ａ〜Ｃのデータ容量と、種別Ａ〜Ｃの消去上限回数と、各ブロックの消去回数とに基づいて、種別Ａ〜Ｃに対して測定期間に書き込み可能なデータ量を算出する。寿命判定部１３は、ヒストグラムテーブル１９に基づいて、測定期間に種別Ａ〜Ｃに書き込まれたデータ量を算出する。そして、寿命判定部１３は、種別Ａ〜Ｃに対して、測定期間に書き込まれたデータ量が測定期間に書き込み可能なデータ量よりも多い場合に、アラートを出力する。
【００５１】  図２は、書き込み先頭テーブル１５の一例を示すデータ構造図である。
【００５２】  書き込み先頭テーブル１５は、種別Ａ〜Ｃごとに、追記形式により書き込まれる先頭のブロック番号及び先頭のページ番号を含む。この書き込み先頭テーブル１５を用いることで、種別が選択されれば、次に追記式の書き込み先となるブロック及びページを決定することができる。
【００５３】  図３は、ＮＡＮＤブロックテーブル１６の一例を示すデータ構造図である。
【００５４】  ＮＡＮＤブロックテーブル１６は、ブロック番号（ブロックアドレス）と、対応するブロックの有効ページ数（ブロックに書き込まれている有効状態のページデータの数）、シーケンス番号、消去回数、種別、消去上限回数とを互いに関係づけている。ブロック番号は、ブロックサイズの記憶領域ごとに割り当てられる。ページデータは、ページサイズのデータである。ページデータの書き込まれていないブロックのシーケンス番号には、−１が設定される。ＮＡＮＤブロックテーブル１６では、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの全ブロックに対する情報がエントリされている。
【００５５】  ここでの取り扱いを例示すると、第一に「ＮＡＮＤブロックテーブル１６の有効ページ数は、ブロック番号の示すブロックに対してページデータが書き込まれた場合に更新される」、第二に「シーケンス番号は、ブロック番号の示すブロックに対して書き込みが完了するごとに更新される」、第三に「消去回数は、ブロック番号の示すブロックに対する消去が発生するごとに更新される」というものが挙げられる。更には、例えば、種別と消去上限回数とは、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの特性に応じて予め設定されるようになっている。
【００５６】  図４は、アドレス変換テーブル１７の一例を示すデータ構造図である。
【００５７】  アドレス変換テーブル１７は、ページデータの論理アドレスと、対応するブロック番号及びページ番号とを互いに関係づけている。図４のアドレス変換テーブル１７のエントリは、ページサイズ単位である。ブロック番号及びページ番号は、物理アドレスに相当する。アドレス変換テーブル１７を用いて、ページデータの論理アドレスが、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃにおける書き込み先又は読み出し先のブロック番号及びページ番号に変換される。
【００５８】  図５は、ヒストグラムテーブル１９の一例を示すデータ構造図である。
【００５９】  ヒストグラムテーブル１９は、シーケンス番号差分と、このシーケンス番号差分に対応する書き込み回数（サンプル数）とを関係づけている。ヒストグラムの階級としてシーケンス番号差分をそのまま用いた場合には、各シーケンス番号差分に対する書き込み回数が少なくなり、ヒストグラムの特徴が現れにくくなる。このため、ヒストグラムの階級としてシーケンス番号差分を適当な範囲でまとめ、このシーケンス番号差分の範囲ごとに書き込み回数が集計される。シーケンス番号差分の範囲は、シーケンス番号差分／Ｄと表記される。シーケンス番号差分／Ｄは、ストレージ装置２の特徴と用途に応じて適宜に変更が可能である。
【００６０】  ヒストグラムテーブル１９におけるシーケンス番号差分／Ｄの数の最大値は、種別ＡのＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａと種別ＢのＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂとに含まれるブロック数に基づいて設定される。
【００６１】  図６は、境界テーブル２０の一例を示すデータ構造図である。
【００６２】  境界テーブル２０は、種別Ａ〜Ｃを選択するためのシーケンス番号差分の境界値を含む。この境界テーブル２０の境界値に基づいて、書き込み対象データを書き込む種別が選択される。図６では、種別Ａ，Ｂの境界値として、種別Ａ，Ｂの上限値が設定されている。種別Ｃに対応する−１は上限値が設定されないことを意味する。これにより、書き込み対象データの算出されたシーケンス番号差分が０〜２００００００の場合には種別Ａが選択され、シーケンス番号差分が２０００００１〜６００００００の場合には種別Ｂのブロックが選択され、シーケンス番号差分が６０００００１以上の場合には種別Ｃのブロックが選択される。
【００６３】  次に、本実施形態に係るストレージ装置２の各種処理について説明する。
【００６４】  図７は、第１の実施形態に係るストレージ装置２による追記書き込み処理の一例を示すフローチャートである。
【００６５】  ステップ０７０１において、書き込み部６は、ホスト装置３より、書き込み要求、論理アドレス、及び書き込み対象データを受信する。
【００６６】  ステップ０７０２において、書き込み部６は、書き込み対象のデータをページデータに分割する。
【００６７】  ステップ０７０３において、種別選択部１０は、ページデータを書き込む種別を選択する。
【００６８】  ステップ０７０４において、書き込み部６は、種別選択部１０によって選択された種別と、メモリ１４に記憶されている書き込み先頭テーブル１５とに基づいて、ページデータを書き込むＮＡＮＤ型フラッシュメモリのブロック番号とページ番号とを決定する。
【００６９】  ステップ０７０５において、書き込み部６は、決定されたブロック番号とページ番号に対応するページに、ページデータを追記形式で書き込む。
【００７０】  ステップ０７０６において、書き込み部６は、書き込み先頭テーブル１５に対して、選択された種別に対応する書き込み先頭のブロック番号及びページ番号を更新し、１ブロック分の書き込みが完了した場合には、ＮＡＮＤブロックテーブル１６における決定されたブロック番号に対応するシーケンス番号を更新し、シーケンス番号１８に１を加える。
【００７１】  ステップ０７０７において、書き込み部６は、全てのページデータの書き込みが終了したか否か判断する。全てのページデータの書き込みが終了していない場合、処理はステップ０７０３へ戻る。全てのページデータの書き込みが終了した場合、処理はステップ０７０８へ進む。
【００７２】  ステップ０７０８において、書き込み部６は、ＮＡＮＤブロックテーブル１６に対して、ページデータが書込まれたブロックを示すブロック番号に対応する有効ページ数を更新し、書き込みの際に消去が実行された場合には消去回数を更新する。
【００７３】  ステップ０７０９において、書き込み部６は、アドレス変換テーブル１７に対して、ページデータの論理アドレスと書き込み先のブロック番号及びページ番号とを設定する。
【００７４】  ステップ０７１０において、書き込み部６は、ホスト装置３に応答を返信する。
【００７５】  この図７の処理において、書き込み先頭テーブル１５、ＮＡＮＤブロックテーブル１６、アドレス変換テーブル１７の更新の順序は、適宜に変更してもよく、並列に実行されてもよい。
【００７６】  図８は、読み出し部７による読み出し処理の一例を示すフローチャートである。
【００７７】  ステップ０８０１において、読み出し部７は、ホスト装置３より、読み出し要求、及び論理アドレスを受信する。
【００７８】  ステップ０８０２において、読み出し部７は、読み出し要求に基づいて読み出しを行う対象（範囲）をページサイズに分割する。
【００７９】  ステップ０８０３において、読み出し部７は、メモリ１４に記憶されているアドレス変換テーブル１７と論理アドレスとに基づいて、論理アドレスに対応するブロック番号及びページ番号から、読み出し対象のページデータを読み出す。
【００８０】  ステップ０８０４において、読み出し部７は、読み出し対象の全てのページデータが読み出されたか否か判断する。全てのページデータが読み出されていない場合、処理はステップ０８０３へ戻る。全てのページデータが読み出された場合、処理はステップ０８０５へ進む。
【００８１】  ステップ０８０５において、読み出し部７は、ホスト装置３に応答及び読み出し対象データを返信する。
【００８２】  図９は、コンパクション部８によるコンパクション処理の一例を示すフローチャートである。以下では、コンパクション対象の種別をＸと記す。種別Ｘは、種別Ａ〜Ｃのいずれかに相当する。
【００８３】  ステップ０９０１において、コンパクション部８は、例えば種別ＡのＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａに対するコンパクション処理を実行する。
【００８４】  ステップ０９０２において、コンパクション部８は、例えば種別ＢのＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂに対するコンパクション処理を実行する。
【００８５】  ステップ０９０３において、コンパクション部８は、例えば種別ＣのＮＡＮＤ型フラッシュメモリ２２Ｃ，２３Ｃに対するコンパクション処理を実行する。
【００８６】  この図９の処理において、各種別Ａ〜Ｃに対応するコンパクション処理の実行順序は、適宜に変更が可能である。
【００８７】  このように、コンパクション処理は、種別Ａ〜Ｃごとに実行される。
【００８８】  図１０は、コンパクション処理の具体例を示すフローチャートである。この図１０の処理において、種別Ｘ＋１は、種別Ｘのブロックに書き込まれていたページデータを移動する場合の、移動先のブロックの種別とする。
【００８９】  ステップ１００１において、コンパクション部８は、ＮＡＮＤブロックテーブル１６を参照して、種別Ｘであり、かつ、有効ページ数がゼロのブロック数を算出する。
【００９０】  ステップ１００２において、コンパクション部８は、算出されたブロック数が所定の数以上か否かを判断する。算出されたブロック数が所定の数以上の場合、処理は終了する。算出されたブロック数が所定の数に満たない場合、処理はステップ１００３へ進む。
【００９１】  ステップ１００３において、コンパクション部８は、ＮＡＮＤブロックテーブル１６を参照して、種別Ｘであり有効ページ数がゼロでないブロックのうち、最も古いシーケンス番号を検索する。
【００９２】  ステップ１００４において、コンパクション部８は、シーケンス番号１８と検索された最も古いシーケンス番号との差分であるシーケンス番号差分を算出する。
【００９３】  ステップ１００５において、コンパクション部８は、算出されたシーケンス番号差分が、境界テーブル２０における種別Ｘに対応する範囲に含まれるか否かを判断する。シーケンス番号差分が、境界テーブル２０の種別Ｘに対応する範囲に含まれる場合、処理はステップ１００６へ進む。シーケンス番号差分が、境界テーブル２０の種別Ｘに対応する範囲に含まれない場合、処理はステップ１００７へ進む。
【００９４】  ステップ１００６において、コンパクション部８は、種別Ｘ内での通常コンパクションを実行する。
【００９５】  ステップ１００７において、コンパクション部８は、種別Ｘから種別Ｘ＋１へ書き込み先の種別を切り替える移動コンパクションを実行する。
【００９６】  図１１は、通常コンパクション（図１０のステップ１００６）及び移動コンパクション（図１０のステップ１００７）の例を示すフローチャートである。
【００９７】  まず、通常コンパクションについて説明する。
【００９８】  ステップ１１０１ａにおいて、コンパクション部８は、ＮＡＮＤブロックテーブル１６を参照し、種別Ｘであり、有効ページ数がゼロではなく、シーケンス番号が古い複数のブロックｂを選択する。シーケンス番号が古い複数のブロックｂの選択方法としては、例えば、シーケンス番号が小さいブロックを順に所定の数だけ選択してもよく、相対的にシーケンス番号が小さいブロックのグループの中から任意のブロックを選択してもよい。
【００９９】  ステップ１１０２ａにおいて、コンパクション部８は、種別Ｘであり、有効ページ数がゼロであり、消去回数が少ないブロックｃを選択する。消去回数が少ないブロックｃの選択方法としては、消去回数が最も少ないブロックを選択してもよく、相対的に消去回数が少ないブロックのグループの中から任意のブロックを選択してもよい。
【０１００】  ステップ１１０３において、コンパクション部８は、複数のブロックｂにおける有効状態のページデータをブロックｃへ移動する。
【０１０１】  ステップ１１０４において、コンパクション部８は、ＮＡＮＤブロックテーブル１６に対して、移動されたページデータに対応する情報を更新する。具体的には、コンパクション部８は、ＮＡＮＤブロックテーブル１６に対して、移動対象ページデータが書き込まれていた元のブロックｂに対応するブロック番号に関係づけられている有効ページ数を更新し、元のブロックｂに対する消去が実行された場合には消去回数を更新する。また、コンパクション部８は、ＮＡＮＤブロックテーブル１６に対して、移動対象ページデータが新たに書き込まれた移動先のブロックｃに対応するブロック番号に関係づけられている有効ページ数を更新する。
【０１０２】  ステップ１１０５において、コンパクション部８は、元のブロックｂに対応するシーケンス番号を、移動先のブロックｃに対応するシーケンス番号として設定する。なお、このステップ１１０５は、ステップ１１０４に含まれていてもよい。例えば、複数の元のブロックｂに対応する複数のシーケンス番号がある場合には、最も大きいシーケンス番号が移動先のブロックｃに対応するシーケンス番号として設定される。
【０１０３】  ステップ１１０６において、コンパクション部８は、後述する制御用データに基づいて、アドレス変換テーブル１７を更新する。具体的には、コンパクション部８は、アドレス変換テーブル１７において、移動対象ページデータの論理アドレスに対して、移動先を示すブロック番号及びページ番号を設定する。
【０１０４】  次に、移動コンパクションについて説明する。
【０１０５】  ステップ１１０１ｂにおいて、コンパクション部８は、ＮＡＮＤブロックテーブル１６を参照し、種別Ｘであり、有効ページ数がゼロではなく、シーケンス番号差分が境界テーブル２０の種別Ｘに対応する境界値を超える複数のブロックｂを選択する。例えば、コンパクション部８は、種別Ｘであり、有効ページ数がゼロではなく、シーケンス番号差分が境界値を超えるブロックが多数存在する場合には、シーケンス番号差分が相対的に大きいブロックを優先して選択してもよく、又は、無作為に所定の数だけ選択してもよい。
【０１０６】  ステップ１１０２ｂにおいて、コンパクション部８は、種別Ｘ＋１であり、有効ページ数がゼロであり、消去回数が少ないブロックｃを選択する。
【０１０７】  その後の処理は、上記ステップ１１０３からステップ１１０６と同様であるため、説明を省略する。
【０１０８】  図１２は、書き込み先頭テーブル１５とＮＡＮＤブロックテーブル１６のシーケンス番号とシーケンス番号１８との更新処理（図７のステップ０７０６）の一例を示すフローチャートである。
【０１０９】  ステップ１２０１において、書き込み部６は、書き込み先頭テーブル１５において、選択された種別に対応するページ番号に１を加える。
【０１１０】  ステップ１２０２において、書き込み部６は、選択された種別に対応するページ番号が所定数（例えば１ブロックに含まれるページ数）以上か否かを判断する。ページ番号が所定数以上の場合、処理はステップ１２０３へ進む。ページ番号が所定数に満たない場合、処理は終了する。
【０１１１】  ステップ１２０３において、書き込み部６は、ページデータが書き込まれたブロックに関する制御用データを生成する。
【０１１２】  ステップ１２０４において、書き込み部６は、選択された種別と書き込み先頭テーブル１５とに基づいて決定されたブロック番号の示す領域に、生成された制御用データを書き込む。例えば、書き込み部６は、決定されたブロック番号の示すブロックの最後のページに、制御用データを書き込む。
【０１１３】  ステップ１２０５において、書き込み部６は、ＮＡＮＤブロックテーブル１６に対して、決定されたブロック番号に対応するシーケンス番号に、シーケンス番号１８を設定する。
【０１１４】  ステップ１２０６において、書き込み部６は、シーケンス番号１８に１を加える。
【０１１５】  ステップ１２０７において、書き込み部６は、選択された種別であり、有効ページ数がゼロであり、消去回数が少ないブロックを選択する。消去回数が少ないブロックの選択方法としては、例えば、消去回数が最も少ないブロックを選択してもよく、相対的に消去回数が少ないブロックのグループの中から任意のブロックを選択してもよい。
【０１１６】  ステップ１２０８において、書き込み部６は、ステップ１２０７において選択されたブロックのブロック番号と、当該選択されたブロックの先頭のページ番号（例えばゼロ）とを、書き込み先頭テーブル１５の選択された種別に対して、設定する。
【０１１７】  図１３は、制御用データの一例を示すデータ構造図である。制御用データ２４は、上記のコンパクション処理、及び書き込み先頭テーブル更新処理において用いられる。この図１３では、ＮＡＮＤ型フラッシュメモリ２２Ａに書込まれている制御用データ２４を例示しているが、他のＮＡＮＤ型フラッシュメモリ２２Ｂ，２２Ｃ，２３Ａ〜２３Ｃに書き込まれている制御用データも同様である。
【０１１８】  制御用データ２４は、ブロックごとに生成される。ブロックには、複数のページデータｄ１〜ｄＮが書き込まれる。制御用データ２４は、このブロックに含まれている複数のページデータｄ１〜ｄＮの論理アドレスと、このブロックに対する書き込み完了に対応するシーケンス番号とを含む。例えば、シーケンス番号は、制御用データ２４の最後の領域に配置される。しかしながら、制御用データ２４におけるシーケンス番号の配置位置は適宜に変更が可能である。
【０１１９】  図１４は、ＮＡＮＤブロックテーブル１６を更新する処理（図７のステップ０７０８又は図１１のステップ１１０４）の一例を示すフローチャートである。
【０１２０】  この図１４の処理は、追記書き込み又はコンパクション処理に基づいて発生するＮＡＮＤブロックテーブル１６の更新処理である。
【０１２１】  ステップ１４０１において、書き込み部６又はコンパクション部８は、アドレス変換テーブル１７を参照し、追記書き込みにより、又は、コンパクション処理による移動によって、無効になったページデータの複数のブロック番号を決定する。
【０１２２】  ステップ１４０２において、書き込み部６又はコンパクション部８は、ＮＡＮＤブロックテーブル１６において、決定されたブロック番号に対応する有効ページ数を、無効になったページデータの数だけ減らす。
【０１２３】  ステップ１４０３において、書き込み部６又はコンパクション部８は、有効ページ数がゼロになったブロックがある場合に、この有効ページ数がゼロになったブロックを消去し、ＮＡＮＤブロックテーブル１６において、有効ページ数がゼロになったブロックのブロック番号に対応する消去回数に、１を加える。
【０１２４】  ステップ１４０４において、書き込み部６又はコンパクション部８は、追記書き込みされる、又は、コンパクション処理により移動されるページデータを書き込む複数のブロックのブロック番号を決定する。
【０１２５】  ステップ１４０５において、書き込み部６又はコンパクション部８は、ＮＡＮＤブロックテーブル１６において、決定されたブロック番号に対応する有効ページ数を、書き込み対象又は移動対象のページデータの数だけ増やす。
【０１２６】  以下で、本実施形態の特徴を具体的に説明する。
【０１２７】  本実施形態では、シーケンス番号差分に基づいて、書き込み先の種別が選択される。
【０１２８】  図１５は、種別選択部１０による種別選択処理の一例を示すフローチャートである。
【０１２９】  ステップ１５０１において、種別選択部１０は、アドレス変換テーブル１７を参照し、書き込み対象のページデータが書き込まれているＮＡＮＤ型フラッシュメモリのブロック番号を検索する。
【０１３０】  ステップ１５０２において、種別選択部１０は、アドレス変換テーブル１７において、書き込み対象ページデータのブロック番号が未定義か否か判断する。
【０１３１】  書き込み対象ページデータのブロック番号が未定義の場合は、処理はステップ１５０３へ進む。書き込み対象ページデータのブロック番号が未定義ではない場合は、処理はステップ１５０４へ進む。
【０１３２】  ステップ１５０３において、種別選択部１０は、消去上限回数が最も少ない種別Ｃを選択する。アドレス変換テーブル１７においてアドレス変換のための情報が未定義の書き込み対象ページデータは新規データである。新規の書き込み対象ページデータの書き込み間隔は長いとみなし、種別選択部１０は、書き込み間隔の長いデータの記憶に適している種別Ｃを選択する。
【０１３３】  ステップ１５０４において、種別選択部１０は、ＮＡＮＤブロックテーブル１６を参照し、検索されたブロック番号に対応するシーケンス番号を決定する。
【０１３４】  ステップ１５０５において、種別選択部１０は、シーケンス番号１８と、決定されたシーケンス番号との差分であるシーケンス番号差分を算出し、シーケンス番号差分をヒストグラム生成部１１へ送る。なお、ヒストグラム生成部１１の負荷を下げるため、Ｍ回のシーケンス番号差分の算出に対して、シーケンス番号差分の送信を１回に間引いてもよい。
【０１３５】  ステップ１５０６において、種別選択部１０は、境界テーブル２０の境界値に基づいて、算出されたシーケンス番号差分に対応する種別を決定する。
【０１３６】  ステップ１５０７において、種別選択部１０は、決定された種別のＮＡＮＤ型フラッシュメモリをページデータの書き込み先として選択する。
【０１３７】  上記の種別選択処理において用いられる境界テーブル２０の境界値は、ヒストグラム生成部１１によるヒストグラム生成処理及び境界設定部１２による境界設定処理によって設定される。以下では、図１６乃至図１９を参照して、ヒストグラム生成処理及び境界設定処理について説明する。
【０１３８】  図１６は、ヒストグラム生成処理の一例を示すフローチャートである。
【０１３９】  ステップ１６０１において、ヒストグラム生成部１１は、メモリ１４に記憶されているヒストグラムテーブル１９を初期化する。
【０１４０】  ステップ１６０２において、ヒストグラム生成部１１は、ヒストグラムテーブル１９の総書き込み数（総サンプル数）をゼロに設定し、開始時シーケンス番号をメモリ１４に記憶する。
【０１４１】  ステップ１６０３において、ヒストグラム生成部１１は、シーケンス番号差分を種別選択部１０から受ける。
【０１４２】  ステップ１６０４において、ヒストグラム生成部１１は、受けたシーケンス番号差分に対応する書き込み回数に１を加え、総書き込み回数に１を加える。例えば、ヒストグラム生成部１１は、シーケンス番号差分をヒストグラムの階級幅（階級範囲）Ｄで割り算した値であるシーケンス番号差分／Ｄの属する範囲に対応する書き込み回数を加算し、さらに、総書き込み回数を加算する。
【０１４３】  ステップ１６０５において、ヒストグラム生成部１１は、所定の測定時間が経過したか否かを判断する。所定の測定時間が経過した場合、処理はステップ１６０６へ進む。所定の測定時間が経過していない場合、処理はステップ１６０３へ戻る。
【０１４４】  ステップ１６０６において、ヒストグラム生成部１１は、終了時シーケンス番号をメモリ１４に記憶する。
【０１４５】  ステップ１６０７において、ヒストグラム生成部１１は、測定期間Ｓ＝（終了時シーケンス番号−開始時シーケンス番号）を計算する。
【０１４６】  ステップ１６０８において、ヒストグラム生成部１１は、階級幅Ｄと測定期間Ｓとに基づいて、ヒストグラムテーブル１９を補正する。例えば、ヒストグラム生成部１１は、測定時間Ｓ経過後に、ヒストグラムテーブル１９のｉ番目のエントリの書き込み回数に、（ｉ＋０．５）×Ｄ／Ｓを乗算し、ヒストグラムテーブル１９を補正する。ｉの値が大きいほど、シーケンス番号差分／Ｄが大きいエントリである。
【０１４７】  図１７は、ヒストグラムテーブル１９の補正の一例を示すグラフである。
【０１４８】  ヒストグラムテーブル１９では、シーケンス番号差分が階級幅Ｄによりスケーリングされている。スケーリングされたシーケンス番号差分であるシーケンス番号差分／Ｄに対する書き込み回数がカウントされる。この図１７では、ヒストグラムテーブル１９のシーケンス番号差分／Ｄを階級（横軸）とし、書き込み回数を度数（縦軸）としている。シーケンス番号差分／Ｄの小さいデータは、書き込み間隔が短い。シーケンス番号差分／Ｄの大きいデータは、書き込み間隔が長い。測定期間Ｓが短いため、書き込み間隔の短いデータは、１つのデータで多数回の書き込みがカウントされる。書き込み間隔の長いデータは、１つのデータで少ない書き込み回数がカウントされる。そこで、本実施形態では、ヒストグラムテーブル１９の各エントリの書き込み回数に（ｉ＋０．５）×Ｄ／Ｓを乗算して書き込み間隔毎のデータ量に変換する。測定時間Ｓ内において、ｉの値が小さいほど、この（ｉ＋０．５）×Ｄ／Ｓの値は小さい。ｉの値が大きいほど、この（ｉ＋０．５）×Ｄ／Ｓの値も大きくなる。したがって、ｉの値が小さいほど書き込み回数に小さい値が乗算され、ｉの値が大きいほど書き込み回数に大きい値が乗算される。
【０１４９】  図１８は、境界設定処理の一例を示すフローチャートである。
【０１５０】  図１９は、ヒストグラムと、インデックスＩ，Ｊとの関係の例を示すグラフである。
【０１５１】  ステップ１８０１において、境界設定部１２は、種別ＡのＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａの実効容量を求める。例えば、実効容量とは、ＮＡＮＤ型フラッシュメモリに無理なく余裕のある状態で記憶可能なデータ量であるとする。
【０１５２】  ステップ１８０２において、境界設定部１２は、ヒストグラムテーブル１９の書き込み回数を、ヒストグラムの最小の階級（最小のシーケンス番号差分／Ｄ）側からシーケンス番号差分／Ｄが大きくなる方向で順に加算し、この加算値と書き込みのページサイズとを掛け算した積算値を求め、積算値が種別Ａの実効容量を超えるシーケンス番号差分／Ｄの値であるインデックスＩを求める。
【０１５３】  ステップ１８０３において、境界設定部１２は、インデックスＩとＤとに基づいて計算される（Ｉ−１）×Ｄを、境界テーブル２０の種別Ａに対する境界値とする。
【０１５４】  ステップ１８０４において、境界設定部１２は、種別ＢのＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂの実効容量を求める。
【０１５５】  ステップ１８０５において、境界設定部１２は、ヒストグラムテーブル１９の書き込み回数をシーケンス番号差分／ＤのＩ側からシーケンス番号差分／Ｄが大きくなる方向へ順に加算し、この加算値と書き込みのページサイズとを掛け算した積算値を求め、積算値が種別Ｂの実効容量を超えるシーケンス番号差分／Ｄの値であるインデックスＪを求める。
【０１５６】  ステップ１８０６において、境界設定部１２は、インデックスＪとＤとに基づいて計算される（Ｊ−１）×Ｄを、境界テーブル２０の種別Ｂに対する境界値とする。
【０１５７】  ステップ１８０７において、境界設定部１２は、上限が設定されないことを意味する−１を、境界テーブル２０の種別Ｃに関係づける。
【０１５８】  例えば、各種のＮＡＮＤ型フラッシュメモリの実効容量は、物理容量の２／３以上、３／４以下のいずれかの値に設定される。例えば、種別ＡのＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａの物理容量が１００００００ギガバイトの場合、実効容量は６６６６６６ギガバイト以上、７５００００ギガバイト以下となる。例えば、種別ＢのＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂの物理容量が２００００００ギガバイトの場合、実効容量は１３３３３３３ギガバイト以上、１５０００００ギガバイト以下となる。
【０１５９】  ヒストグラムテーブル１９のエントリは、例えばページ単位でカウントされるが、種別選択部１０からヒストグラム生成部１１へのＭ回分の送信が１回に間引かれている場合には、Ｍページ分でカウントされる。
【０１６０】  図２０は、寿命判定部１３による各種別Ａ〜Ｃに対する書き込み寿命判定処理の一例を示すフローチャートである。
【０１６１】  ステップ２００１において、寿命判定部１３は、例えば種別ＡのＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａに対する書き込み寿命を判定する。
【０１６２】  ステップ２００２において、寿命判定部１３は、例えば種別ＢのＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂに対する書き込み寿命を判定する。
【０１６３】  ステップ２００３において、寿命判定部１３は、例えば種別ＣのＮＡＮＤ型フラッシュメモリ２２Ｃ，２３Ｃに対する書き込み寿命を判定する。
【０１６４】  図２１は、特定の種別に対する書き込み寿命判定処理の一例を示すフローチャートである。以下では、書き込み寿命判定処理の対象となる種別をＸと記す。種別Ｘは、種別Ａ〜Ｃのいずれかに相当する。
【０１６５】  ステップ２１０１において、寿命判定部１３は、例えばＮＡＮＤブロックテーブル１６を参照し、種別ＸのＮＡＮＤ型フラッシュメモリのデータ容量と、種別Ｘの消去上限回数と、ＮＡＮＤブロックテーブル１６における種別Ｘのブロックの消去回数に基づいて、ヒストグラム生成のための測定期間Ｓに種別ＸのＮＡＮＤ型フラッシュメモリに書き込み可能なデータ量を算出する。
【０１６６】  ステップ２１０２において、寿命判定部１３は、ヒストグラムテーブル１９に基づいて、種別ＸのＮＡＮＤ型フラッシュメモリに測定期間Ｓ内に実際に書き込まれたデータ量を算出する。例えば、寿命判定部１３は、ヒストグラムテーブル１９の種別Ｘに対応する範囲の書き込み回数を加算し、この加算値とページサイズとを掛け算することで、種別ＸのＮＡＮＤ型フラッシュメモリに実際に書き込まれたデータ量を算出する。
【０１６７】  ステップ２１０３において、寿命判定部１３は、測定期間Ｓ内に種別ＸのＮＡＮＤ型フラッシュメモリに実際に書き込まれたデータ量が、測定期間Ｓに種別ＸのＮＡＮＤ型フラッシュメモリに書き込み可能なデータ量よりも多いか否か判断する。
【０１６８】  実際に書き込まれたデータ量が書き込み可能なデータ量より多い場合には、処理はステップ２１０４に進む。
【０１６９】  実際に書き込まれたデータ量が書き込み可能なデータ量以下の場合には、処理は終了する。
【０１７０】  ステップ２１０４において、寿命判定部１３は、測定期間Ｓ内に種別ＸのＮＡＮＤ型フラッシュメモリに実際に書き込まれたデータ量と、測定期間Ｓに種別ＸのＮＡＮＤ型フラッシュメモリに書き込み可能なデータ量との差分を追加すべき種別Ｘの物理容量とし、追加すべき種別Ｘの物理容量とアラート通知とをホスト装置３に返す。
【０１７１】  以上説明した本実施形態においては、データの書き込み時に書き込み間隔を示すシーケンス番号差分が算出され、シーケンス番号差分に応じてデータが書き込まれる種別が決定される。書き込み間隔の短いデータは、消去上限回数の多い種別ＡのＮＡＮＤ型フラッシュメモリ２２Ａ，２３Ａに書き込まれる。書き込み間隔が中程度のデータは、消去上限回数が中程度の種別ＢのＮＡＮＤ型フラッシュメモリ２２Ｂ，２３Ｂに書き込まれる。書き込み間隔の長いデータは、消去上限回数が少ない種別ＣのＮＡＮＤ型フラッシュメモリ２２Ｃ，２３Ｃに書き込まれる。
【０１７２】  したがって、本実施形態においては、種別Ａ〜ＣのＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの書き込み寿命を延ばすことができる。
【０１７３】  本実施形態においては、種別が３以上の場合であっても、書き込み間隔と消去上限回数とを整合させて書き込み先のＮＡＮＤ型フラッシュメモリを選択することができる。
【０１７４】  本実施形態において、シーケンス番号差分はブロック単位で管理される。シーケンス番号差分は、シーケンス番号１８と、データが書き込まれているブロックの書き込みが完了した時点のシーケンス番号との差分である。ブロックに対する書き込み完了時のシーケンス番号は、例えばＮＡＮＤブロックテーブル１６で管理される。本実施形態の制御のために必要なデータ量のほとんどは、ＮＡＮＤブロックテーブル１６のデータ量となる。例えば、ページデータごとの書き込み回数をカウントし、ページデータの書き込み回数からページデータの書き込み頻度を算出し、この書き込み頻度に基づいてページデータの書き込み先を決定する方法を比較例とする。本実施形態は、この比較例よりも少ない記憶容量でデータの書き込み先を選択することができる。例えば、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃのブロックサイズが４メガバイトのであり、記憶部２２，２３が１００テラバイトの記憶容量を持つ場合、本実施形態では５００メガバイト程度で各種データ１５〜２０を管理することができる。これに対して、比較例のようにページデータの書き込み回数をカウントする場合には、データを管理するために少なくとも１００ギガバイト程度の記憶容量が必要になる。
【０１７５】  本実施形態においては、シーケンス番号差分に基づいて書き込み先の種別が選択されるため、データの書き込み回数をカウントした後に書き込み頻度を算出する比較例よりも、状況の変化を早く検出することができ、迅速に対応することができる。
【０１７６】  本実施形態においては、シーケンス番号差分と書き込み回数との関係を示すヒストグラムが生成され、シーケンス番号差分の小さい側から書き込み回数を加算していくことで、ＮＡＮＤ型フラッシュメモリの実効容量分に対応する境界値を求めることができる。求められた境界値とシーケンス番号差分に基づいて書き込み先の種別を選択することにより、ＮＡＮＤ型フラッシュメモリに実効容量相当のデータを書き込むことができる。
【０１７７】  本実施形態においては、シーケンス番号差分に対する書き込み回数のヒストグラムに基づいて、各種別のＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃに書き込み可能なデータ量と、実際に書き込まれたデータ量とを比較することができる。したがって、メモリ容量の不足量を出力することができ、新たなＮＡＮＤ型フラッシュメモリを迅速に追加することができる。
【０１７８】  本実施形態において、シーケンス番号１８は、ブロックの書き込みが完了した場合に増加される。しかしながら、シーケンス番号１８は、例えば所定の値からブロックの書き込みが完了した場合に減少されてもよい。換言すれば、シーケンス番号１８に対しては、ブロックの書き込み順序を認識可能な変更が行われればよい。
【０１７９】［第２の実施形態］  本実施形態においては、上記第１の実施形態に係るストレージ装置の変形例について説明する。
【０１８０】  本実施形態においては、ある種別に複数のＮＡＮＤ型フラッシュメモリが備えられている場合に、この種別の複数のＮＡＮＤ型フラッシュメモリがほぼ同じタイミングで寿命となることを防止するストレージ装置について説明する。
【０１８１】  また、本実施形態においては、種別間でウェアレベリングを行うストレージ装置について説明する。
【０１８２】  図２２は、第２の実施形態に係るストレージ装置を備えた計算機システムの構成を例示するブロック図である。
【０１８３】  計算機システム２６は、ストレージ装置２７を備える。ストレージ装置２７は、制御部２８を備える。制御部２８は、種別制御部２９を備える。種別制御部２９は、上記第１の実施形態の種別制御部９と同様の構成に加えて、疑似種別設定部３０、種別間ウェアレベリング部３１を備える。
【０１８４】  疑似種別設定部３０は、ある種別のＮＡＮＤ型フラッシュメモリの一部に対して、新たに疑似的な種別を設定する。例えば、疑似種別設定部３０は、ヒストグラムテーブル１９に基づいて、種別Ａ〜Ｃに対応するシーケンス番号差分の範囲に、２以上の書き込み回数のピークがあるか否か判断し、２以上の書き込み回数のピークを含む種別を、２以上の分割領域に分割し、２以上の分割領域に対応するシーケンス番号差分を境界テーブル２０に設定する。
【０１８５】  種別間ウェアレベリング部３１は、異なる種別のＮＡＮＤ型フラッシュメモリの間で、ウェアレベリングを実行する。例えば、種別間ウェアレベリング部３１は、種別Ａ〜Ｃの消去上限回数とＮＡＮＤブロックテーブル１６とに基づいて、種別Ａ〜Ｃに含まれる各ブロックの消耗度を算出し、一時的に、消耗度の高いブロックに長い書き込み間隔の種別を設定し、消耗度の低いブロックに短い書き込み間隔の種別を設定する。
【０１８６】  図２３は、疑似種別設定部３０による疑似種別設定処理の一例を示すフローチャートである。
【０１８７】  ステップ２３０１において、疑似種別設定部３０は、ヒストグラムテーブル１９に基づいて、種別Ａ〜Ｃに対応するシーケンス番号差分／Ｄの範囲ごとに、書き込み回数のピークを検索する。
【０１８８】  ステップ２３０２において、疑似種別設定部３０は、種別Ａ〜Ｃに対応する範囲のうちの少なくとも１つの範囲に、ピークが２つ以上あるか否かを判断する。
【０１８９】  種別Ａ〜Ｃに対応する範囲のいずれにも、２以上のピークがない場合、処理は終了する。
【０１９０】  種別Ａ〜Ｃに対応する範囲のいずれかに、ピークが２つ以上ある場合、処理はステップ２３０３へ進む。
【０１９１】  ステップ２３０３において、疑似種別設定部３０は、ピークが２つ以上ある種別に対して、疑似種別設定が有効か否かを判断する。
【０１９２】  例えば、疑似種別設定部３０は、ピークの数、ピークが２つ以上ある種別のＮＡＮＤ型フラッシュメモリの数、又は、ピークが２つ以上ある種別の書き込み上限回数に達する早さ、を確認し、疑似種別設定が有効であるか否かを判断する。より詳しい例を説明すると、疑似種別設定部３０は、ピークが２つ以上ある種別に対して複数のＮＡＮＤ型フラッシュメモリを備えており、かつ、ピークが２つ以上ある種別に対する書き込み量が他の種別の書き込み量より多く、ピークが２つ以上ある種別が他の種別よりも早く書き込み上限回数に達すると判断された場合に、疑似種別設定が有効であると判断する。
【０１９３】  疑似種別設定が有効であると判断された場合、処理はステップ２３０４へ進む。疑似種別設定が有効でないと判断された場合、処理は終了する。
【０１９４】  ステップ２３０４において、疑似種別設定部３０は、疑似種別設定が有効と判断された種別を、書き込み回数の２つのピークがそれぞれ異なる種別に対応するように、分割し、ＮＡＮＤブロックテーブル１６、境界テーブル２０、書き込み先頭テーブル１５に対して、分割により新しく増えた種別を疑似種別として設定する。
【０１９５】  図２４は、疑似種別の一例を示すグラフである。この図２４は、種別Ｂに対して、疑似種別設定が有効と判断された場合を例として示している。
【０１９６】  ヒストグラムテーブル１９の示すヒストグラムでは、種別Ｂに対応するシーケンス番号差分／Ｄの範囲に、２つのピークが存在する。
【０１９７】  疑似種別設定部２７は、例えば、種別Ｂに対応するシーケンス番号差分／Ｄの範囲のうち、書き込み回数の極小値となるシーケンス番号差分／Ｄの値を境界値とし、種別Ｂを、疑似種別Ａ’と種別Ｂとに分割する。
【０１９８】  疑似種別設定部２７は、ＮＡＮＤブロックテーブル１６におけるブロック番号と種別と消去回数、疑似種別Ａ’の境界値などに基づいて、ＮＡＮＤブロックテーブル１６、境界テーブル２０、書き込み先頭テーブル１５に疑似種別Ａ’の情報を設定し、ＮＡＮＤブロックテーブル１６、境界テーブル２０、書き込み先頭テーブル１５を更新する。
【０１９９】  例えば、疑似種別設定部２７は、変更前の種別Ｂのブロックのうち、消去回数の多いグループのブロックに対して疑似種別Ａ’を設定し、消去回数の少ないグループのブロックに対して種別Ｂを維持する。
【０２００】  図２５は、疑似種別が設定されたＮＡＮＤブロックテーブル１６の一例を示すデータ構造図である。
【０２０１】  ＮＡＮＤブロックテーブル１６では、変更前の種別Ｂが、疑似種別Ａ’と変更後の種別Ｂとに分割されている。
【０２０２】  疑似種別Ａ’に対応するシーケンス番号差分は、種別Ａに対応するシーケンス番号差分と種別Ｂに対応するシーケンス番号差分との間になる。このため、疑似種別Ａ’のブロックの消去回数は、種別Ａのブロックの消去回数と種別Ｂのブロックの消去回数との間の値となる可能性が高くなる。
【０２０３】  ＮＡＮＤブロックテーブル１６では、種別Ｂであったブロック番号１００００００〜１９９９９９９が、疑似種別Ａ’に変更されている。
【０２０４】  図２６は、疑似種別が設定された境界テーブル２０の一例を示すデータ構造図である。
【０２０５】  境界テーブル２０には、種別Ａ’に関するエントリが追加される。
【０２０６】  境界テーブル２０には、種別Ａ’の境界値（上限値）として、４００００００が設定されている。この境界テーブル２０を用いて、書き込み対象のページデータの書き込みの際に算出されたシーケンス番号差分が２０００００１〜４００００００の場合に、ページデータの書き込み先種別Ａ’が選択される。
【０２０７】  図２７は、疑似種別が設定された書き込み先頭テーブル１５の一例を示すデータ構造図である。
【０２０８】  書き込み先頭テーブル１５には、種別Ａ’に関するエントリが追加される。
【０２０９】  書き込み先頭テーブル１５は、種別Ａ’に対する書き込みを、ブロック番号１００００００のページ番号０に対して行うことを示している。
【０２１０】  図２８は、種別間ウェアレベリング部３１による種別間ウェアレベリング処理の一例を示すフローチャートである。
【０２１１】  ステップ２８０１において、種別間ウェアレベリング部３１は、ＮＡＮＤブロックテーブル１６を参照し、各ブロックの消去回数／消去上限回数で定義される消耗度を算出する。
【０２１２】  ステップ２８０２において、種別間ウェアレベリング部３１は、異なる種別間で消耗度の差が大きいか否かを判断する。例えば、種別間ウェアレベリング部３１は、種別毎の消耗度の最大値を比較し、消耗度の最大値の差が予め設定されたしきい値を超えるか否かにより、消耗度の差の大きさを判断する。例えば、種別間ウェアレベリング部３１は、種別毎の消耗度の平均値を計算し、消耗度の平均値の差が予め設定されたしきい値を超えるか否かにより、消耗度の差の大きさを判断してもよい。
【０２１３】  種別間で消耗度の差が小さい場合、処理は終了する。
【０２１４】  種別間で消耗度の差が大きい場合、処理はステップ２８０３へ進む。
【０２１５】  ステップ２８０３において、種別間ウェアレベリング部３１は、ＮＡＮＤブロックテーブル１６における消耗度が最も高いエントリＨを検索する。
【０２１６】  ステップ２８０４において、種別間ウェアレベリング部３１は、ＮＡＮＤブロックテーブル１６における消耗度が最も低いエントリＬを検索する。
【０２１７】  ステップ２８０５において、種別間ウェアレベリング部３１は、ＮＡＮＤブロックテーブル１６のエントリＨの種別とエントリＬの種別とを交換する。
【０２１８】  ステップ２８０６において、種別間ウェアレベリング部３１は、所定の時間が経過するのを待つ。
【０２１９】  ステップ２８０７において、種別間ウェアレベリング部３１は、ＮＡＮＤブロックテーブル１６のエントリＨの種別とエントリＬの種別を元に戻す。そして、処理は終了する。
【０２２０】  上記の種別間ウェアレベリング処理において、処理の順序は適宜に変更してもよい。例えば、ステップ２８０３とステップ２８０４の順序は入れ替えてもよく、並列に実行されてもよい。
【０２２１】  以上説明した本実施形態においては、シーケンス番号差分と書き込み回数との関係を示すヒストグラムが生成される。このヒストグラムにおいてある種別に対応する範囲が２以上のピークを持ち、２以上のピークを持つ種別を分離することが統計的に適している場合に、新たに疑似種別が設定され、同一種別であったブロックが、異なる種別に細分化される。このように、種別の数を増加することにより、同時期に交換が必要になるＮＡＮＤ型フラッシュメモリの数を減らすことができる。
【０２２２】  本実施形態においては、シーケンス番号差分が同程度のデータが、同一種別のＮＡＮＤ型フラッシュメモリに書き込まれる。
【０２２３】  なお、上記の疑似種別設定処理において、ある種別においてヒストグラムのピークが２以上ある場合には、この種別に属する１つのＮＡＮＤ型フラッシュメモリの複数の領域（例えばブロック）が複数の種別に分割されてもよく、この種別に属する複数のＮＡＮＤ型フラッシュメモリが複数の種別に分割されてもよい。例えば、１つのＮＡＮＤ型フラッシュメモリの一部の領域に対して疑似種別が設定され、他の領域は元の種別が維持されてもよい。１つのＮＡＮＤ型ブラッシュメモリ内でシーケンス番号差分が同じデータを同じ領域に集めることにより、コンパクションの効率を増すことができ、コンパクションの最適化を行うことができる。
【０２２４】  本実施形態においては、種別間ウェアレベリング処理によって、種別の異なるＮＡＮＤ型フラッシュメモリ間で、消耗度が高いブロックの種別と、消耗度が低いブロックの種別とが一時的に交換される。これにより、消耗度が高いブロックに長い書き込み間隔のデータが割り当てられ、消耗度が低いブロックに短い書き込み間隔のデータが割り当てられ、疑似種別を含めた異なる種別のブロックの間で消耗度を均一にすることができ、ＮＡＮＤ型フラッシュメモリ２２Ａ〜２２Ｃ，２３Ａ〜２３Ｃの寿命を延ばすことができる。
【０２２５】  上記の各実施形態において、各テーブル１５〜１７，１９，２０は適宜組み合わせることができ、又は、分割することができる。
【０２２６】  本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【図１】
2016088234.tif 000003
【図２】
2016088234.tif 000004
【図３】
2016088234.tif 000005
【図４】
2016088234.tif 000006
【図５】
2016088234.tif 000007
【図６】
2016088234.tif 000008
【図７】
2016088234.tif 000009
【図８】
2016088234.tif 000010
【図９】
2016088234.tif 000011
【図１０】
2016088234.tif 000012
【図１１】
2016088234.tif 000013
【図１２】
2016088234.tif 000014
【図１３】
2016088234.tif 000015
【図１４】
2016088234.tif 000016
【図１５】
2016088234.tif 000017
【図１６】
2016088234.tif 000018
【図１７】
2016088234.tif 000019
【図１８】
2016088234.tif 000020
【図１９】
2016088234.tif 000021
【図２０】
2016088234.tif 000022
【図２１】
2016088234.tif 000023
【図２２】
2016088234.tif 000024
【図２３】
2016088234.tif 000025
【図２４】
2016088234.tif 000026
【図２５】
2016088234.tif 000027
【図２６】
2016088234.tif 000028
【図２７】
2016088234.tif 000029
【図２８】
2016088234.tif 000030
【国際調査報告】
2016088234.tif 000031
2016088234.tif 000032
2016088234.tif 000033
2016088234.tif 000034