(57)【要約】【課題】信頼性の向上を図ることができるメモリシステムを実現する。【解決手段】メモリシステムは、不揮発性メモリ内の複数のブロックそれぞれの消耗度を管理する。メモリシステムは、書き込むべき第１のデータに必要なデータ保持期間を指定するパラメータを含むライト要求をホストから受信する。メモリシステムは、消耗度から推定されるデータ保持期間が前記指定されたデータ保持期間以上の第１のブロックを前記複数のブロックから選択する。前記メモリシステムは、前記第１のデータを前記第１のブロックに書き込む。【選択図】図１１
2019086970.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数のブロックそれぞれの消耗度を管理し、
書き込むべき第１のデータに必要なデータ保持期間を指定するパラメータを含むライト要求を前記ホストから受信し、
消耗度から推定されるデータ保持期間が前記指定されたデータ保持期間以上の第１のブロックを前記複数のブロックから選択し、
前記第１のデータを前記第１のブロックに書き込むように構成されている、メモリシステム。
【請求項２】
前記複数のブロックそれぞれの消耗度は前記複数のブロックそれぞれの消去回数によって表される請求項１記載のメモリシステム。
【請求項３】
前記複数のブロックそれぞれの消耗度は前記複数のブロックそれぞれの消去時間によって表される請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、消耗度から推定されるデータ保持期間が前記指定されたデータ保持期間以上のブロックの中で、より短いデータ保持期間に対応する消耗度を有するブロックを前記第１のブロックとして優先的に選択するように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、
前記複数のブロックそれぞれの消耗度に基づいて前記複数のブロックを複数のデータ保持期間に対応する複数のブロックグループに分類し、
前記指定されたデータ保持期間に一致するデータ保持期間を有する第１のブロックグループに分類されているブロックが存在する場合、前記第１のブロックグループに分類されたブロックを前記第１のブロックとして選択し、
前記第１のブロックグループに分類されたブロックが存在しない場合、前記指定されたデータ保持期間よりも長いデータ保持期間を有する第２のブロックグループに分類されているブロックを前記第１のブロックとして選択するように構成されている請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、
前記第１のブロックの消耗度により推定されるデータ保持期間が前記指定されたデータ保持期間と同じである場合、第１のプログラム動作によって前記第１のデータを前記第１のブロックに書き込み、
前記第１のブロックの消耗度により推定されるデータ保持期間が前記指定されたデータ保持期間よりも長い場合、前記第１のプログラム動作よりも前記第１のブロックのメモリセル群に充電する電荷量が少ない第２のプログラム動作によって前記第１のデータを前記第１のブロックに書き込む請求項１記載のメモリシステム。
【請求項７】
不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリ内の複数のブロックそれぞれの消耗度を管理することと、
書き込むべき第１のデータに必要なデータ保持期間を指定するパラメータを含むライト要求をホストから受信することと、
消耗度から推定されるデータ保持期間が前記指定されたデータ保持期間以上の第１のブロックを前記複数のブロックから選択することと、
前記第１のデータを前記第１のブロックに書き込むことを具備する制御方法。
【請求項８】
前記複数のブロックそれぞれの消耗度は前記複数のブロックそれぞれの消去回数によって表される請求項７記載の制御方法。
【請求項９】
前記複数のブロックそれぞれの消耗度は前記複数のブロックそれぞれの消去時間によって表される請求項７記載の制御方法。
【請求項１０】
前記選択することは、消耗度から推定されるデータ保持期間が前記指定されたデータ保持期間以上のブロックの中で、より短いデータ保持期間に対応する消耗度を有するブロックを前記第１のブロックとして優先的に選択することを含む請求項７記載の制御方法。
【請求項１１】
前記複数のブロックそれぞれの消耗度に基づいて前記複数のブロックを複数のデータ保持期間に対応する複数のブロックグループに分類することをさらに具備し、
前記選択することは、
前記指定されたデータ保持期間に一致するデータ保持期間を有する第１のブロックグループに分類されているブロックが存在する場合、前記第１のブロックグループに分類されたブロックを前記第１のブロックとして選択することと、
前記第１のブロックグループに分類されたブロックが存在しない場合、前記指定されたデータ保持期間よりも長いデータ保持期間を有する第２のブロックグループに分類されているブロックを前記第１のブロックとして選択することとを含む請求項７記載の制御方法。
【請求項１２】
前記書き込むことは、
前記第１のブロックの消耗度により推定されるデータ保持期間が前記指定されたデータ保持期間と同じである場合、第１のプログラム動作によって前記第１のデータを前記第１のブロックに書き込むことと、
前記第１のブロックの消耗度により推定されるデータ保持期間が前記指定されたデータ保持期間よりも長い場合、前記第１のプログラム動作よりも前記第１のブロックのメモリセル群に充電する電荷量が少ない第２のプログラム動作によって前記第１のデータを前記第１のブロックに書き込むこととを含む請求項７記載の制御方法。
【発明の詳細な説明】
【背景技術】
【０００１】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００２】
ＳＳＤのようなメモリシステムにおいては、その信頼性の向上を図るための技術が求められている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−７０３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、信頼性の向上を図ることができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００５】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、前記不揮発性メモリ内の複数のブロックそれぞれの消耗度を管理する。前記コントローラは、書き込むべき第１のデータに必要なデータ保持期間を指定するパラメータを含むライト要求を前記ホストから受信する。前記コントローラは、消耗度から推定されるデータ保持期間が前記指定されたデータ保持期間以上の第１のブロックを前記複数のブロックから選択する。前記コントローラは、前記第１のデータを前記第１のブロックに書き込む。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】第１実施形態のメモリシステムに設けられたＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図３】複数のブロックの集合によって構築されるスーパーブロック（並列単位）の構成例を示す図。
【図４】第１実施形態のメモリシステムによって実行される消去動作のシーケンスを示すタイミングチャート。
【図５】第１実施形態のメモリシステムによって実行される書き込み動作を示す図。
【図６】第１実施形態のメモリシステムによって管理されるブロック消耗度管理テーブルの例を示す図。
【図７】第１実施形態のメモリシステムによって管理されるブロック消耗度管理テーブルの別の例を示す図。
【図８】第１実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図９】図８のライトコマンドの受信に応答して第１実施形態のメモリシステムによって実行されるデータ書き込み処理シーケンスを示す図。
【図１０】ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在する場合における、第１実施形態のメモリシステムによって実行される、書き込み先ブロックの選択の仕方を示す図。
【図１１】ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在する場合における、第１実施形態のメモリシステムによって実行される、書き込み先ブロックの選択の仕方を示す図。
【図１２】ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在する場合における、第１実施形態のメモリシステムによって実行される、図１１に示すものとは別の書き込み先ブロックの選択の仕方を示す図。
【図１３】ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在しない場合における、第１実施形態のメモリシステムによって実行される、書き込み先ブロックの選択の仕方を示す図。
【図１４】ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在しない場合における、第１実施形態のメモリシステムによって実行される、書き込み先ブロックの選択の仕方を示す図。
【図１５】ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在しない場合における、第１実施形態のメモリシステムによって実行される、選択されたブロックへの消耗低減プログラムモードによるデータの書き込み動作を示す図。
【図１６】第１実施形態のメモリシステムによって実行される、消耗低減プログラムモードによるデータの書き込み動作の際の閾値電圧レベルについて説明するための図。
【図１７】第１実施形態のメモリシステムによって実行される、ブロックを消耗度に基づいて分類する手順を示すフローチャート。
【図１８】第１実施形態のメモリシステムによって実行される、消耗度に基づいて書き込み先ブロックを選択し、選択したブロックにデータを書き込む動作の手順を示すフローチャート。
【図１９】第１実施形態のメモリシステムによって実行される、消耗度に基づいて書き込み先ブロックを選択し、消耗低減プログラムモードにより選択したブロックにデータを書き込む動作の手順を示すフローチャート。
【図２０】第１実施形態のメモリシステムによって実行される、ブロックを消去回数に基づいて分類する手順を示すフローチャート。
【図２１】第１実施形態のメモリシステムによって実行される、消去回数に基づいて書き込み先ブロックを選択し、選択したブロックにデータを書き込む動作の手順を示すフローチャート。
【図２２】第１実施形態のメモリシステムによって実行される、消去回数に基づいて書き込み先ブロックを選択し、消耗低減プログラムモードにより選択したブロックにデータを書き込む動作の手順を示すフローチャート。
【図２３】第１実施形態のメモリシステムによって実行される、ブロックを消去時間に基づいて分類する手順を示すフローチャート。
【図２４】第１実施形態のメモリシステムによって実行される、消去時間に基づいて書き込み先ブロックを選択し、選択したブロックにデータを書き込む動作の手順を示すフローチャート。
【図２５】第１実施形態のメモリシステムによって実行される、消去時間に基づいて書き込み先ブロックを選択し、消耗低減プログラムモードにより選択したブロックにデータを書き込む動作の手順を示すフローチャート。
【図２６】第２実施形態に係るメモリシステム（フラッシュストレージデバイス）の構成例を示すブロック図。
【図２７】第２実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図２８】図２７のライトコマンドに対するレスポンスを説明するための図。
【図２９】第２実施形態のメモリシステムに適用されるＴｒｉｍコマンドを説明するための図。
【図３０】ホストと第２実施形態のメモリシステムとによって実行されるデータ書き込み処理シーケンスを示す図。
【図３１】ホストと第１または第２のメモリシステムとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【０００７】
以下、図面を参照して、実施形態を説明する。
【０００８】
（第１実施形態）
まず、図１を参照して、第１実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【０００９】
このメモリシステムは、不揮発性メモリにデータを書き込みし、不揮発性メモリからデータを読み込むように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリを備えたフラッシュストレージデバイス３として実現されている。フラッシュストレージデバイス３は、ソリッドステートドライブ（ＳＳＤ）として実現されてもよいし、メモリカードとして実現されてもよい。
【００１０】
情報処理システム１は、ホスト（ホストデバイス）２と、フラッシュストレージデバイス３とを含む。ホスト２は、フラッシュストレージデバイス３をアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをフラッシュストレージデバイス３に保存するストレージサーバ（サーバ）であってもよいし、パーソナルコンピュータであってもよい。
【００１１】
フラッシュストレージデバイス３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。フラッシュストレージデバイス３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１２】
ホスト２とフラッシュストレージデバイス３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００１３】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００１４】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００１５】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢ０〜Ｂｍ−１は、最小の消去単位として機能する。ブロックは、「物理ブロック」、または「消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００１６】
ブロックＢ０〜Ｂｍ−１は限られた消去回数を有している。消去回数は、プログラム／消去サイクル（Ｐｒｏｇｒａｍ／Ｅｒａｓｅ  ｃｙｃｌｅｓ）の数によって表されてもよい。あるブロックの一つのプログラム／消去サイクル（Ｐｒｏｇｒａｍ／Ｅｒａｓｅ  ｃｙｃｌｅｓ）は、このブロック内の全てのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作（プログラム動作）とを含む。
【００１７】
第１実施形態では、コントローラ４は、ブロックの集合を各々が含む複数のスーパーブロックを管理してもよく、スーパーブロックの単位で消去動作を実行してもよい。したがって、スーパーブロックは、実際上、消去単位として機能することがある。よって、同じスーパーブロックに含まれるブロックそれぞれの消去回数を同じになる。
【００１８】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。
【００１９】
ＮＡＮＤ型フラッシュメモリ５は、図２に示すように、複数のＮＡＮＤ型フラッシュメモリダイを含む。各ＮＡＮＤ型フラッシュメモリダイは、複数のブロック（物理ブロック）ＢＬＫを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、最小の並列動作単位として機能する。ＮＡＮＤ型フラッシュメモリダイは、「ＮＡＮＤ型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図２においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５が接続されており、これらチャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５の各々に、同数（例えばチャンネル当たり１個のダイ）のＮＡＮＤ型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。
【００２０】
コントローラ４は、チャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５を介してＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５を制御する。コントローラ４は、チャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５を同時に駆動することができる。
【００２１】
図２の構成例においては、最大１６個のＮＡＮＤ型フラッシュメモリダイを並列動作させることができる。
【００２２】
第１実施形態では、コントローラ４は、各々が複数のブロックＢＬＫから構成される複数の並列単位（スーパーブロック）を管理することができる。スーパーブロックは、これに限定されないが、異なるチャンネルに接続されたＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５から一つずつ選択される計１６個のブロックＢＬＫを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５に対応する３２個のプレーンから一つずつ選択される計３２個のブロックＢＬＫを含んでいてもよい。
【００２３】
図３には、一つのスーパーブロックＳＢが、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５から一つずつ選択される計１６個のブロックＢＬＫから構成される場合が例示されている。スーパーブロックＳＢに対する書き込み動作においては、データは、ＮＡＮＤ型フラッシュメモリダイ＃０に属するブロックＢＬＫのページＰ０、ＮＡＮＤ型フラッシュメモリダイ＃１に属するブロックＢＬＫのページＰ０、…ＮＡＮＤ型フラッシュメモリダイ＃１５に属するブロックＢＬＫのページＰ０、ＮＡＮＤ型フラッシュメモリダイ＃０に属するブロックＢＬＫのページＰ１、ＮＡＮＤ型フラッシュメモリダイ＃２に属するブロックＢＬＫのページＰ１、…ＮＡＮＤ型フラッシュメモリダイ＃１５に属するブロックＢＬＫのページＰ１、…という順序で書き込まれる。
【００２４】
次に、図１のコントローラ４の構成について説明する。
【００２５】
コントローラ４は、複数のチャンネル（例えば１６個のチャンネル）を介して複数のＮＡＮＤ型フラッシュメモリチップに電気的に接続される。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５（複数のＮＡＮＤ型フラッシュメモリチップ）を制御する。
【００２６】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、フラッシュストレージデバイス３をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）ＬＢＡ（logical block address(addressing)）が使用され得る。
【００２７】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータがライトされたＮＡＮＤフラッシュメモリ５内の最新の物理記憶位置を示す。アドレス変換テーブル（ＬＵＴ３２）は、フラッシュストレージデバイス３の電源オン時にＮＡＮＤフラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００２８】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【００２９】
ブロック管理には、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、ブロックそれぞれの消耗を均一化するための動作である。ガベージコレクションは、データを書き込むことが可能なフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかの対象ブロック内の有効データを別のブロックにコピーする。ここで、有効データとは、ＬＵＴ３２から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)であって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。
【００３０】
そして、ガベージコレクションは、ルックアップテーブル（ＬＵＴ）３２を更新して、コピーされた有効データの論理アドレスそれぞれを移動先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックはその消去後に再利用することが可能となる。
【００３１】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００３２】
ホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、アンマップ（ＵＮＭＡＰ）／トリム（Ｔｒｉｍ）コマンド、等）を受信する。
【００３３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答して、ＮＡＮＤ型フラッシュメモリ５に格納されている制御プログラム（ファームウェア）をＤＲＡＭ６上にロードし、このファームウェアを実行することによって様々な処理を行う。このＣＰＵ１２は、例えば、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００３４】
ＣＰＵ１２は、消去回数モニタ部２１、消去時間モニタ部２２、ブロック分類部２３、ライト動作制御部２４および消耗低減処理部２５として機能することができる。
【００３５】
消去回数モニタ部２１は、ＮＡＮＤ型フラッシュメモリ５の複数のブロックそれぞれの消去回数を監視する。消去回数は、上述したようにプログラム／消去サイクル（Ｐｒｏｇｒａｍ／Ｅｒａｓｅ  ｃｙｃｌｅｓ）の数によって表されてもよい。
【００３６】
消去時間モニタ部２２は、ＮＡＮＤ型フラッシュメモリ５の複数のブロックそれぞれの消去時間を監視する。あるブロックの消去時間とは、このブロックに対する消去動作が完了するまでに要する時間を意味する。
【００３７】
消去時間モニタ部２２は、ＮＡＮＤインタフェース１３内に含まれる消去時間測定部１３Ａから、各ブロックの消去時間を取得してもよい。
【００３８】
図４のタイミングチャートは、あるＮＡＮＤ型フラッシュメモリダイ内のあるブロック（物理ブロック）に対する消去動作シーケンスの例を示す。ＮＡＮＤインタフェース１３は、イレーズセットアップコマンド“６０ｈ”、消去動作が実行されるべきブロックを指定するアドレス、イレーズ開始コマンド“Ｄ０ｈ”を、あるチャンネル内のＩＯバスを介してこのＮＡＮＤ型フラッシュメモリダイに送出する。そして、ＮＡＮＤインタフェース１３は、このＮＡＮＤ型フラッシュメモリダイのレディー／ビジー信号（ＲＹ／ＢＹ）を監視し、消去動作の完了を待つ。このＮＡＮＤ型フラッシュメモリダイにおいてブロックの消去動作が実行されている間は、このＮＡＮＤ型フラッシュメモリダイはビジー状態に維持される。ＮＡＮＤ型フラッシュメモリダイがビジー状態の期間は、レディー／ビジー信号（ＲＹ／ＢＹ）は、例えば、ロウレベルに維持される。消去時間測定部１３Ａは、ＮＡＮＤ型フラッシュメモリダイがブロックの消去動作によってビジー状態に維持されている時間（ｔＢＥＲＡＳＥ）を、このブロックの消去時間として測定してもよい。この場合、消去時間測定部１３Ａは、消去動作シーケンスにおいてレディー／ビジー信号（ＲＹ／ＢＹ）がロウレベルに維持されている時間を測定し、測定された時間を消去時間モニタ部２２に報告してもよい。
【００３９】
ＮＡＮＤ型フラッシュメモリダイは、ブロックの消去動作が成功したか否かを検証するためのベリファイ動作を実行する。消去およびベリファイ動作は、消去動作が成功するか、あるいは消去およびベリファイ動作のループ回数が設定された最大ループ回数に達するまで繰り返される。消去およびベリファイ動作が完了すると、ＮＡＮＤ型フラッシュメモリダイは、レディー状態に戻る。この時、レディー／ビジー信号（ＲＹ／ＢＹ）は、例えば、ロウレベルからハイレベルに戻る。ＮＡＮＤ型フラッシュメモリダイがレディー状態になると、ＮＡＮＤインタフェース１３は、ステータスリードコマンド“７０ｈ”を、ＩＯバスを介してＮＡＮＤ型フラッシュメモリチップに送出する。消去動作が成功したならば、成功を示すステータス（ｐａｓｓステータス）がＮＡＮＤ型フラッシュメモリダイからＮＡＮＤインタフェース１３に通知される。一方、消去動作が成功しなかったならば、失敗を示すステータス（ｆａｉｌステータス）がＮＡＮＤ型フラッシュメモリダイからＮＡＮＤインタフェース１３に通知される。
【００４０】
あるいは、コントローラ４は、レディー／ビジー信号（ＲＹ／ＢＹ）を使用せずに、消去時間（ｔＢＥＲＡＳＥ）を測定してもよい。この場合、コントローラ４は、消去動作の間、ＮＡＮＤ型フラッシュメモリダイチップにステータスリードコマンドを繰り返し発行することでポーリングを行ってもよい。
【００４１】
ブロック分類部２３は、複数のブロックそれぞれの消耗度に基づいて複数のブロックを複数のデータ保持期間に対応する複数のブロックグループに分類する。あるブロックの消耗度とは、このブロックに含まれるメモリセル群の消耗の程度を意味する。ブロックそれぞれの消耗度は、これらブロックの消去回数（プログラム／イレーズサイクルの数）によって表されてもよい。あるブロックの消耗が進めにつれて、このブロックの消去時間（ｔＢＥＲＡＳＥ）は増加する。このため、ブロックそれぞれの消耗度は、これらブロックの消去時間（ｔＢＥＲＡＳＥ）によって表されてもよい。ブロックの消耗度が大きいと、このブロック内の各メモリセルにチャージされた電荷がリークし易くなる場合がある。このため、ブロックの消耗度が大きいほど、このブロックに対応するデータ保持期間（つまりこのブロック内の各メモリセルがデータを保持可能な期間）は短くなる。
【００４２】
ブロックそれぞれの消耗度が消去回数（プログラム／イレーズサイクルの数）によって表されるケースにおいては、ブロック分類部２３は、複数のブロックそれぞれの消去回数に基づいて複数のブロックを複数のデータ保持期間に対応する複数のブロックグループに分類してもよい。
【００４３】
ブロックそれぞれの消耗度が消去時間によって表されるケースにおいては、ブロック分類部２３は、複数のブロックそれぞれの消去時間に基づいて複数のブロックを複数のデータ保持期間に対応する複数のブロックグループに分類してもよい。さらに、ブロック分類部２３は、複数のブロックそれぞれの消去回数および消去時間の双方に基づいて複数のブロックを複数のデータ保持期間に対応する複数のブロックグループに分類してもよい。
【００４４】
第１実施形態では、ブロック毎に消耗度（例えば、消去回数、消去時間）を監視する動作および消耗度（例えば、消去回数、消去時間）に基づいてブロックを分類する動作は、物理ブロックの単位で実行されてもよい。
【００４５】
なお、フラッシュストレージデバイス３がスーパーブロックの単位で書き込み動作、読み出し動作、消去動作を行う構成である場合においては、ブロック毎に消耗度（例えば、消去回数、消去時間）を監視する動作および消耗度（例えば、消去回数、消去時間）に基づいてブロックを分類する動作は、複数の物理ブロックを含む並列単位（スーパーブロック）の単位で実行されてもよい。同じ並列単位（スーパーブロック）を構成するブロック（物理ブロック）の消去動作は並列に実行されるため、これらブロック（物理ブロック）は同じ消去回数を有する。また、ある並列単位（スーパーブロック）の消去時間としては、この並列単位（スーパーブロック）を構成するブロックそれぞれの消去時間から求められる代表値を使用し得る。この代表値は、これらブロックそれぞれの消去時間の平均値であってもよい。
【００４６】
ライト動作制御部２４は、書き込むべきデータ（ライトデータ）に必要なデータ保持期間（data retention term）を指定するパラメータを含むライト要求（ライトコマンド）をホスト２から受信する。このライト要求を受信した場合、ライト動作制御部２４は、消耗度から推定されるデータ保持期間が指定されたデータ保持期間以上のブロックをＮＡＮＤ型フラッシュメモリ５に含まれる複数のブロックから書き込み先ブロックとして選択し、このライトデータを選択したブロック（書き込み先ブロック）に書き込む。
【００４７】
ライト動作制御部２４は、消耗度から推定されるデータ保持期間がライト要求（ライトコマンド）により指定されたデータ保持期間以上のブロックの中で、より短いデータ保持期間に対応する消耗度を有するブロックを、書き込み先ブロックとして優先的に選択することもできる。これにより、例えば、１年のデータ保持期間を必要とするデータの書き込みのために、１０年以上のデータ保持期間に対応する低消耗度のブロックが無駄に使用されることを防ぐことができる。換言すれば、１０年のデータ保持期間を必要とするデータを書き込むためのライト要求のために、この１０年以上のデータ保持期間に対応する低消耗度のブロックを消費せずに維持しておくことができる。
【００４８】
その場合、ライト動作制御部２４は、ライト要求（ライトコマンド）により指定されたデータ保持期間に一致するデータ保持期間を有するブロックグループに分類されているブロックが存在する場合、そのブロックグループに分類されたブロックを、書き込み先ブロックとして選択してもよい。また、ライト動作制御部２４は、ライト要求（ライトコマンド）により指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在しない場合、そのデータ保持期間よりも長いデータ保持期間を有するブロックグループに分類されているブロックを、書き込み先ブロックとして選択してもよい。
【００４９】
また、ライト動作制御部２４は、選択されたブロックの消耗度により推定されるデータ保持期間がライト要求（ライトコマンド）により指定されたデータ保持期間と同じである場合、第１のプログラム動作によって、データ（ライトデータ）を選択されたブロック（書き込み先ブロック）に書き込む。他方、ライト動作制御部２４は、選択されたブロック（書き込み先ブロック）の消耗度により推定されるデータ保持期間がライト要求（ライトコマンド）によりデータ保持期間よりも長い場合、第２のプログラム動作によってデータ（ライトデータ）を選択されたブロック（書き込み先ブロック）に書き込む。
【００５０】
ここで、第１のプログラム動作とは、通常のプログラムモードによる書き込み動作（プログラム動作）を意味し、第２のプログラム動作とは、第１のブロックのメモリセル群に充電する電荷量が少ないプログラムモード（以下、消耗低減プログラムモードと称する）による書き込み動作（プログラム動作）を意味する。消耗低減プログラムモードによるデータの書き込みを実行することで、通常のプログラムモードによるデータの書き込み動作を実行する場合と比べて、メモリセル群に印加されるプログラム電圧を下げること、またはメモリセル群にプログラム電圧が印可される回数を減らすことができるため、メモリセル群に加わるストレスを低減させることができる。したがって、メモリセル群の消耗を低減させることができ、フラッシュストレージデバイスを長寿命化することができる。
【００５１】
なお、ライトデータを書き込むべき書き込み先ブロックを選択する処理においては、この書き込み先ブロックは、有効データを含まないフリーブロックのグループから選択されてもよい。もし別のライトデータの書き込みのために選択された書き込み先ブロックが既に存在する場合には、ライトデータを書き込むべき書き込み先ブロックは、この既に存在する書き込みブロックとフリーブロックのグループの中から選択されてもよい。
【００５２】
また、フラッシュストレージデバイス３がスーパーブロックの単位で書き込み動作、読み出し動作、消去動作を行う構成である場合においては、ライト動作制御部２４は、消耗度から推定されるデータ保持期間が指定されたデータ保持期間以上のスーパーブロックを複数のスーパーブロック（例えば、有効データを含まないフリースーパーブロックのグループ）から書き込み先ブロック（書き込み先スーパーブロック）として選択し、このライトデータを選択したスーパーブロックに書き込めばよい。
【００５３】
消耗低減処理部２５は、第１のプログラム動作よりもメモリセル群に充電する電荷量が少ない第２のプログラム動作（消耗低減プログラムモードによるプログラム動作）によってデータを書き込み先ブロックに書き込むための処理を実行する。
【００５４】
図１のＤＲＡＭインタフェース１４は、ＤＲＡＭ６をアクセス制御するように構成されたＤＲＡＭコントローラである。ＤＲＡＭ６の記憶領域は、ライトバッファ（ＷＢ）３１、ルックアップテーブル（ＬＵＴ）３２、およびシステム管理情報３３を格納するために利用される。システム管理情報３３は、ホストによって指定されたデータ保持期間以上のデータ保持期間を有する書き込み先ブロックの選択のために必要な様々な管理情報を含む。例えば、システム管理情報３３は、後述するブロック消耗度管理テーブル３３Ａ、ブロック消耗度管理テーブル３３Ａ’を含む。さらに、システム管理情報３３は、ブロック情報を含む。ブロック情報には、ＮＡＮＤ型フラッシュメモリ５内のブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）が含まれる。
【００５５】
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１、ルックアップテーブル（ＬＵＴ）３２、システム管理情報３３の格納のために使用される。なお、これらライトバッファ（ＷＢ）３１、ルックアップテーブル（ＬＵＴ）３２、システム管理情報３３は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。
【００５６】
次に、ホスト２の構成について説明する。
【００５７】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３等が含まれる。
【００５８】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびフラッシュストレージデバイス３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００５９】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。
【００６０】
アプリケーションソフトウェアレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをフラッシュストレージデバイス３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、フラッシュストレージデバイス３に送出する。フラッシュストレージデバイス３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【００６１】
図５は、第１実施形態のフラッシュストレージデバイス３によって実行されるデータの書き込み動作を示す。
【００６２】
各ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックプール５１と称されるリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックプール５２と称されるリストによって管理される。
【００６３】
第１実施形態では、コントローラ４は、消耗度から推定されるデータ保持期間がライト要求（ライトコマンド）により指定されるデータ保持期間以上であるデータ保持期間を有するブロックを、ホスト２から受信されたデータの書き込み先ブロックとしてフリーブロックプール５２内のブロックから選択する。この場合、コントローラ４は、まず、選択されたブロックに対して消去動作を実行し、これによってこのブロックを、書き込み可能な消去状態にする。現在の書き込み先ブロックの全体がホスト２からのデータで満たされると、コントローラ４は、現在の書き込み先ブロックをアクティブブロックプール５１に移動する。
【００６４】
ここで、図５には、フリーブロックプール５２から書き込み先ブロックを選択することを示しているが、必ずしもこれに限られない。上述したように、以前のライト要求（ライトコマンド）により指定されるデータ保持期間を有するブロックが既に書き込み先ブロックとして選択されていて、まだ有効データで満たされていない場合には、フリーブロックプール５２内のブロックから書き込み先ブロックが新たに選択されない場合もある。例えば、既に、以前のホスト２からのデータに対して書き込み先ブロックとして選択されているブロックが、今回のライト要求（ライトコマンド）により指定されるデータ保持期間を満たすブロックであるならば、このブロックが、今回のライト要求によって書き込まれるべき新たなライトデータに対する書き込み先ブロックとして選択され、選択されたブロックにこの新たなライトデータが書き込まれることがある。
【００６５】
また、書き込み先ブロックとして既に選択されており、且つ有効データで満たされていないブロックが複数個存在する状態もあり得る。例えば、ライト要求（ライトコマンド）によって１年がデータ保持期間として指定され、１年のデータ保持期間を有するブロックが書き込み先ブロックとして選択され後、この１年のデータ保持期間を有するブロックが有効データで満たされる前に、ライト要求（ライトコマンド）によって５年がデータ保持期間として指定され、この５年のデータ保持期間を有するブロックが書き込み先ブロックとして選択され、その５年のデータ保持期間を有するブロックも有効データで満たされていない場合である。
【００６６】
アクティブブロックプール５１内のあるブロック内の有効データの一部が、データ更新等によって無効化され、無効データ量が所定値以下に低下すると、そのブロックはガベージコレクションの対象となる。ガベージコレクションにより、このブロック内の有効データの全てが別のブロック（フリーブロック）にコピーされることによってこのブロック内の有効データのすべて無効化されると、コントローラ４は、このブロックをフリーブロックプール５２に移動する。
【００６７】
図６は、ブロック消耗度管理テーブル３３Ａを示す。
【００６８】
ブロック消耗度管理テーブル３３Ａは、システム管理情報３３の一部であり、複数の消耗度に対応する複数のブロックグループを管理する。
【００６９】
ブロック消耗度管理テーブル３３Ａは、複数の消耗度に対応する複数のエントリを含む。これらエントリの各々は、消耗度フィールドと、ブロックアドレスフィールドと、推定されるデータ保持期間フィールドとを含んでもよい。消耗度フィールドは、ブロックの消耗の程度によってレベル分けされたブロックの消耗のレベルを保持する。なお、消耗度が小さいほうが消耗のレベルが小さいことを意味する。図６の例では、ブロックの消耗度は、ブロックの消去回数によって表されており、ブロックの消去回数によってレベル分けされている。
【００７０】
ブロックアドレスフィールドは、ＮＡＮＤ型フラッシュメモリ５に含まれる複数のブロック（物理ブロック）それぞれに対応する複数のブロックアドレスを保持する。図６の例では、ブロックアドレスは、個々のブロックに対して、“＃１”、“＃２”、“＃３”、…と示されている。このブロックアドレスは、ダイ番号とチップ内ブロック番号との組み合わせによって表現されてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃０内のブロックＢＬＫ０のブロックアドレス“＃０”を（Ｄｉｅ＃０，ＢＬＫ０）と表現されてもよい。同様に、ＮＡＮＤ型フラッシュメモリダイ＃０内のブロックＢＬＫ１のブロックアドレス“＃２”を（Ｄｉｅ＃０，ＢＬＫ１）と、ＮＡＮＤ型フラッシュメモリダイ＃０内のブロックＢＬＫ２のブロックアドレス“＃３”を（Ｄｉｅ＃０，ＢＬＫ２）、…、ＮＡＮＤ型フラッシュメモリダイ＃０内のブロックＢＬＫｎのブロックアドレス“＃ｎ＋１”を（Ｄｉｅ＃０，ＢＬＫｎ）と表現されてもよい。
【００７１】
図６の例では、レベル１（消去回数が０〜５００回）のブロックは、ブロックアドレスが“＃１０”、“＃１１”、“＃２３”、“＃３０”、…であることが示されている。同様に、レベル２（消去回数が５００〜１０００回）のブロックは、ブロックアドレスが“＃９”、“＃１６”、“＃２２”、“＃２９”、…であること、レベル３（消去回数が１０００〜１５００回）のブロックは、ブロックアドレスが“＃７”、“＃８”、“＃２１”、“＃２８”、…であること、…、レベル１０（消去回数が９５００〜１００００回）のブロックは、ブロックアドレスが“＃１”、“＃１２”、…であることが示されている。
【００７２】
推定されるデータ保持期間フィールドは、消耗度に基づいて推定されるデータ保持期間を保持する。図６の例では、データ保持期間は、ブロックの消去回数に基づいて推定されている。
【００７３】
図６の例では、レベル１（消去回数０〜５００回）のブロックについて推定されるデータ保持期間は“１０年”であることが示されている。同様に、レベル２（消去回数５００〜１０００回）のブロックについて推定されるデータ保持期間は“５年”であることが示され、レベル３（消去回数１０００〜１５００回）のブロックについて推定されるデータ保持期間は“１年”であることが示され、…、レベル１０（消去回数９５００〜１００００回）のブロックについて推定されるデータ保持期間は“１週間”であることが示さている。
【００７４】
図７は、図６とは別のブロック消耗度管理テーブル３３Ａ’を示す。
【００７５】
ブロック消耗度管理テーブル３３Ａ’は、システム管理情報３３の一部であり、各消耗度の範囲に対応するブロックのブロックアドレスを管理する。図６のブロック消耗度管理テーブル３３Ａとの違いは、消耗度がブロックの消去時間で表され、ブロックのデータ保持期間が消去時間によって推定されていることである。
【００７６】
ブロック消耗度管理テーブル３３Ａ’は、ブロック消耗度管理テーブル３３Ａと同様に、複数のエントリを含み、これらエントリの各々は、消耗度フィールドと、ブロックアドレスフィールドと、推定されるデータ保持期間フィールドとを含んでもよい。消耗度フィールドは、ブロックの消耗の程度によってレベル分けされたブロックの消耗のレベルを保持する。図７の例では、上述したようにブロックの消耗度は、ブロックの消去時間によって表されており、ブロックの消去時間によってレベル分けされている。
【００７７】
ブロックアドレスフィールドは、ＮＡＮＤ型フラッシュメモリ５に含まれる複数のブロックそれぞれに対応する複数のブロックアドレスを保持する。
【００７８】
推定されるデータ保持期間フィールドは、消耗度に基づいて推定されるデータ保持期間を保持する。図７の例では、データ保持期間は、ブロックの消去時間に基づいて推定されている。
【００７９】
なお、図６には、ブロックが一定の消耗度の範囲毎にレベル分けされて、消耗度毎にブロックアドレスが管理されているが、ＮＡＮＤ型フラッシュメモリ内のすべてのブロックの消耗度が小さい（または大きい）ほうから順に並べて、ブロックアドレスを管理してもよい。
【００８０】
図７の例では、レベル１（消去時間ｔ１〜ｔ２ｓｅｃ）のブロックについて推定されるデータ保持期間は“１０年”であることが示されている。同様に、レベル２（消去時間ｔ２〜ｔ３ｓｅｃ）のブロックについて推定されるデータ保持期間は“５年”であることが示され、レベル３（消去時間ｔ３〜ｔ４ｓｅｃ）のブロックについて推定されるデータ保持期間は“１年”であることが示され、…、レベル１０（消去時間ｔ１０〜ｔ１１ｓｅｃ）のブロックについて推定されるデータ保持期間は“１週間”であることが示さている。
【００８１】
なお、図７には、ブロックが一定の消耗度の範囲毎にレベル分けされて、消耗度毎にブロックアドレスが管理されているが、ＮＡＮＤ型フラッシュメモリ内のすべてのブロックのブロックアドレスのリストを、消耗度が小さい（または大きい）ほうから順に並べて、管理してもよい。
【００８２】
第１実施形態のフラッシュストレージデバイス３は、ブロック消耗度管理テーブル３３Ａ、ブロック消耗度管理テーブル３３Ａ’のいずれか一方のみを備えていてもよく、両方を備えていてもよい。両方を備えている場合でも、フラッシュストレージデバイス３のコントローラ４は、消去回数のみに基づいてブロックの消耗度の判断およびホスト２から指定されてデータ保持期間を満たすブロックの選択動作を実行してもよく、消去時間のみに基づいてブロックの消耗度の判断、およびホスト２から指定されてデータ保持期間を満たすブロックの選択動作を実行してもよい。また、コントローラ４は、消去回数および消去時間の両方に基づいて、ブロックの消耗度の判断およびホスト２から指定されてデータ保持期間を満たすブロックの選択動作を実行してもよい。
【００８３】
図８は、フラッシュストレージデバイス３に適用されるライトコマンドの例を示す。
【００８４】
このライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、開始ＬＢＡを指定するパラメータ、長さ（論理ブロックの数）を指定するパラメータ、必要なデータ保持期間を示すパラメータ、等を含んでもよい。
【００８５】
開始ＬＢＡ（開始論理アドレス）は、書き込まれるべきデータの最初のＬＢＡを示す。
【００８６】
長さは、書き込まれるべきデータの長さ（書き込まれるべきデータに対応する論理ブロックの数）を示す。
【００８７】
必要なデータ保持期間（required-data-retention term）は、書き込まれるべきデータに必要なデータ保持期間を示す。必要なデータ保持期間の例は、１週間、２週間、１か月、２か月、４か月、６か月、８か月、１年、５年、１０年等である。
【００８８】
図９のシーケンスチャートは、図８のライトコマンドの受信に応答して第１実施形態のフラッシュストレージデバイス３によって実行されるデータ書き込み処理を示す。
【００８９】
ホスト２は、ＬＢＡ、データ長、必要なデータ保持期間を含むライトコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラ４は、消耗度から推定されるデータ保持期間が、ホスト２（ライトコマンドの必要なデータ保持期間）によって指定されるデータ保持期間以上のブロックを選択する（ステップＳ１０１）。続いて、コントローラ４は、選択されたブロックに、書き込まれるべきデータを書き込む（ステップＳ１０２）。そして、コントローラ４は、ＬＵＴ３２を更新して、書き込まれたデータのＬＢＡに、そのデータの書き込まれたＮＡＮＤ型フラッシュメモリ５の物理記憶位置を示す物理アドレスをマッピングする（ステップＳ１０３）。
【００９０】
その後、コントローラ４は、ホスト２に書き込み完了のレスポンスを返す（ステップＳ１０４）。ここで、レスポンスには、ステータス（成功／失敗）が含まれる。
【００９１】
図１０〜図１２は、ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在する場合におけるフラッシュストレージデバイス３によって実行される、書き込み先ブロックの選択の仕方を示す。
【００９２】
図１０〜図１２では、消耗度がレベル１〜レベル１０の１０段階にグループ分けされて管理されていることが想定されている。なお、消耗度が小さい（レベルが低い）ほど、データ保持期間は長い。また、消耗度が大きい（レベルが高い）ほど、データ保持期間は短い。また、ブロック３０１〜３０３の消耗度は、消耗度＝レベル１（データ保持期間は１０年）に相当し、ブロック３０４〜３０７の消耗度は、消耗度＝レベル２（データ保持期間は５年）に相当し、ブロック３０８〜３１１の消耗度は、消耗度＝レベル３（データ保持期間は１年）に相当し、ブロック３１２〜３１５の消耗度は、消耗度＝レベル４（データ保持期間は８か月）に相当し、ブロック３１６〜３１８の消耗度は、消耗度＝レベル５（データ保持期間は６か月）に相当し、ブロック３１９〜３２２の消耗度は、消耗度＝レベル６（データ保持期間は４か月）に相当し、ブロック３２３〜３２６の消耗度は、消耗度＝レベル７（データ保持期間は２か月）に相当し、ブロック３２７〜３２９の消耗度は、消耗度＝レベル８（データ保持期間は１か月）に相当し、ブロック３３０〜３３２の消耗度は、消耗度＝レベル９（データ保持期間は２週間）に相当し、ブロック３３３〜３３５の消耗度は、消耗度＝レベル１０（データ保持期間は１週間）に相当する。
【００９３】
ここで、図１１に示すように、ホスト２によって書き込まれるべきデータのデータ保持期間として“１年”が指定されたとする。ホスト２によって指定された書き込まれるべきデータのデータ保持期間である“１年”以上の推定されるデータ保持期間を有するブロックは、消耗度＝レベル１のグループに属するブロック３０１〜３０３、消耗度＝レベル２のグループに属するブロック３０４〜３０７、消耗度＝レベル３のグループに属するブロック３０８〜３１１である。コントローラ４は、これらのブロック３０１〜３１１の中から書き込み先ブロックを選択する。
【００９４】
他方、コントローラ４は、図１２に示すように書き込み先ブロックを選択することもできる。
【００９５】
ホスト２によって書き込まれるべきデータのデータ保持期間として“１年”が指定された場合、コントローラ４は、消耗度により推定されるデータ保持期間がホスト２によって指定されたデータ保持期間以上のブロックの中で、より短いデータ保持期間に対応する消耗度を有するブロックを書き込み先ブロックとして優先的に選択する。図１２の例では、ホスト２によって指定された書き込まれるべきデータのデータ保持期間である“１年”以上の推定されるデータ保持期間を有するブロックの中で、より短いデータ保持期間に対応する消耗度を有するブロックは、推定されるデータ保持期間が“１年”である消耗度＝レベル３のグループに属するブロック３０８〜３１１である。コントローラ４は、これらのブロック３０８〜３１１の中から書き込み先ブロックを選択する。
【００９６】
図１３〜図１４は、ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在しない場合における、フラッシュストレージデバイス３によって実行される、書き込み先ブロックの選択の仕方を示す。
【００９７】
図１３に示すように、ホスト２から指定されたデータ保持期間である“１年”に一致するデータ保持期間を有するブロックのグループ（消耗度＝レベル３のグループ）に属するブロックが存在しない場合、コントローラ４は、指定されたデータ保持期間よりも長いデータ保持期間を有するブロックのグループに属するブロックから書き込み先ブロックを選択する。図１３では、ホスト２によって指定されたデータ保持期間“１年”に一致する消耗度＝レベル３のグループの次に長いデータ保持期間（データ保持期間５年）を有するブロックのグループ（消耗度＝レベル２のグループ）に属するブロック３０４〜３０７が存在するため、図１４に示すように、コントローラ４は、それらのブロック３０４〜３０７の中から書き込み先ブロックを選択する。もし、データ保持期間が５年である消耗度を有するブロックのグループ（消耗度＝レベル２のグループ）に属するブロック３０４〜３０７も存在しなければ、コントローラ４は、その次に長いデータ保持期間（データ保持期間１０年）を有するブロックのグループ（消耗度＝レベル１のグループ）に属するブロック３０１〜３０３の中から書き込み先ブロックを選択する。
【００９８】
図１５は、ライトコマンドによって指定されたデータ保持期間に一致するデータ保持期間を有するブロックが存在しない場合における、フラッシュストレージデバイス３によって実行される、選択されたブロックへの消耗低減プログラムモードによるデータの書き込み動作を示す。
【００９９】
指定されたデータ保持期間“１年”よりも長いデータ保持期間“５年”を有するブロックが書き込み先ブロックとして選択された場合、図１４のケースでは、コントローラ４は、第１のプログラム動作（通常のプログラムモード）によってライトデータを書き込み先ブロックに書き込む。
【０１００】
一方、図１５のケースでは、コントローラ４は、プログラムモードを、通常のプログラムモードから消耗低減プログラムモードに切り替えて、消耗低減プログラムモードによってライトデータを書き込み先ブロックに書き込む。消耗低減プログラムモードでは、書き込み先ブロック内のメモリセル群に充電する電荷量は通常のプログラムモードよりも少ない。したがって、書き込み動作（プログラム動作）によってメモリセル群に加わるストレスを低く抑えることが可能となり、一回の書き込み動作（プログラム動作）当たりの書き込み先ブロックの消耗量を低減することができる。プログラム動作では、各メモリセルは複数のステートのいずれか１つに対応する閾値電圧に設定される。メモリセルに充電する電荷量が少ない場合には、ステート間の閾値電圧間のマージンが狭くなるので、データリテンションエラーが発生しやすくなり、この結果、メモリセルのデータ保持期間が短くなる。しかし、図１５のケースでは、選択された書き込み先ブロックは、指定されたデータ保持期間“１年”よりも遙かに長いデータ保持期間“５年”を有している低消耗度のブロックであるので、消耗低減プログラムモードによる書き込み動作が実行されても、指定されたデータ保持期間“１年”を十分に満たすことができる。
【０１０１】
図１６は、フラッシュストレージデバイス３によって実行される、消耗低減プログラムモードによるデータの書き込み動作の際の閾値電圧レベルについて示す。
【０１０２】
図１６には、マルチレベルセル（ＭＬＣ）に対応する４つの閾値電圧レベルと２ビットデータとの関係の例が示されている。
【０１０３】
各メモリセルは、４つのステート（一つの消去ステート、および３つのプログラムステート）のいずれかに設定される。これら４つのステートは、互いに異なる閾値電圧レベルを有している。ここで、４つのステートには、２ビットデータ“１１”、“０１”、“００”、“１０”がマッピングされてもよい。
【０１０４】
図１６の上部には、通常のプログラムモードで書き込み動作が実行された場合における４つのステートそれぞれの閾値電圧レベルについて示されている。読み出し動作においては、“１１”、“０１”、“００”、“１０”ステートを互いに分離するための３つの電圧ＶＡ１、ＶＢ１、ＶＣ１のいずれかが読み出し電圧として使用される。なお、電圧ＶＲ１は読み出し動作において非選択ワード線に印加される電圧であり、電圧ＶＲ１は保持データに関係なくメモリセルをオンさせることが可能な電圧に設定されている。
【０１０５】
他方、図１６の下部には、消耗低減プログラムモードで書き込み動作が実行された場合における４つのステートそれぞれの閾値電圧レベルについて示されている。４つのステートは、“１１”、“０１”、“００”、“１０”ステートを互いに分離するための３つの電圧ＶＡ２（＜ＶＡ１）、ＶＢ２（＜ＶＢ１）、ＶＣ２（＜Ｖｃ１）のいずれかが読み出し電圧として使用される。なお、電圧ＶＲ２（＜ＶＲ１）は読み出し動作において非選択ワード線に印加される電圧であり、電圧ＶＲ２は保持データに関係なくメモリセルをオンさせることが可能な電圧に設定されている。
【０１０６】
消耗低減プログラムモードでは、通常のプログラムモードに比べ、メモリセル群に印加されるプログラム電圧を下げること、またはメモリセル群にプログラム電圧が印可される回数を減らすことができる。これにより、データ書き込み動作によるメモリセル群の消耗を低減させることができ、フラッシュストレージデバイス３を長寿命化することができる。
【０１０７】
図１７のフローチャートは、ブロックを消耗度に基づいて分類する手順を示す。ここでは、説明を簡単にするために、ＮＡＮＤ型フラッシュメモリ５に含まれるブロックは、消耗度＝レベル１のグループ、消耗度＝レベル２のグループ、消耗度＝レベル３のグループ、消耗度＝レベル４のグループに分類されるものとする。
【０１０８】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に含まれる各ブロックの消耗度を監視する（ステップＳ２０１）。そして、コントローラ４は、ある一つのブロックを選択する（ステップＳ２０２）。
【０１０９】
以後のステップＳ２０３〜Ｓ２０９において、ステップＳ２０２で選択されたブロックの消耗度に基づいて、選択されたブロックのグループ分けが実行される。
【０１１０】
コントローラ４は、選択されたブロックの消耗度がレベル１に対応するか否かを判定する（ステップＳ２０３）。選択されたブロックの消耗度がレベル１に対応するならば（ステップＳ２０３のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル１のグループに分類する（ステップＳ２０４）。
【０１１１】
選択されたブロックの消耗度がレベル１に対応しないならば（ステップＳ２０３のＮＯ）、コントローラ４は、選択されたブロックの消耗度がレベル２に対応するか否かを判定する（ステップＳ２０５）。選択されたブロックの消耗度がレベル２に対応するならば（ステップＳ２０５のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル２のグループに分類する（ステップＳ２０６）。
【０１１２】
選択されたブロックの消耗度がレベル２に対応しないならば（ステップＳ２０５のＮＯ）、コントローラ４は、選択されたブロックの消耗度がレベル３に対応するか否かを判定する（ステップＳ２０７）。選択されたブロックの消耗度がレベル３に対応するならば（ステップＳ２０７のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル３のグループに分類する（ステップＳ２０８）。
【０１１３】
選択されたブロックの消耗度がレベル３に対応しないならば（ステップＳ２０７のＮＯ）、コントローラ４は、選択されたブロックを消耗度＝レベル４のグループに分類する（ステップＳ２０９）。
【０１１４】
図１８のフローチャートは、消耗度に基づいて書き込み先ブロックを選択し、選択したブロックにデータを書き込む動作の手順を示す。
【０１１５】
書き込むべきデータに必要なデータ保持期間を指定するパラメータを含むライトコマンドがホスト２から受信されると（ステップＳ３０１のＹＥＳ）、コントローラ４は、必要なデータ保持期間を満たす消耗度を有するブロックを探し（ステップＳ３０２）、必要なデータ保持期間を満たすブロックが存在するか否かを判定する（ステップＳ３０３）。必要なデータ保持期間を満たす消耗度を有するブロックとは、その消耗度により推定されるデータ保持期間がライトコマンドによって指定されたデータ保持期間以上であるブロックのことである。
【０１１６】
必要なデータ保持期間を満たす消耗度を有するブロックが存在しなければ（ステップＳ３０３のＮＯ）、コントローラ４は、ホスト２にエラーを返す（ステップＳ３１５）。必要なデータ保持期間を満たす消耗度を有するブロックが存在しなければ、ホスト２により指定されるデータ保持期間を満たすブロックに書き込むべきデータを書き込むことができないため、書き込むべきデータに必要なデータ保持期間を確保することができない。したがって、その旨をホスト２にエラーとして返す。
【０１１７】
必要なデータ保持期間を満たす消耗度を有するブロックが存在するならば（ステップＳ３０３のＹＥＳ）、コントローラ４は必要なデータ保持期間と一致するデータ保持期間に対応する消耗度を有するブロックが存在するか否かを判定する（ステップＳ３０４）。
【０１１８】
必要なデータ保持期間と一致するデータ保持期間に対応する消耗度を有するブロックが存在するならば（ステップＳ３０４のＹＥＳ）、コントローラ４は、必要なデータ保持期間と一致するデータ保持期間に対応する消耗度を有するブロックを選択する（ステップＳ３０５）。例えば、ライトコマンドにより指定されるデータ保持期間と一致するデータ保持期間に対応する消耗度がレベル３である場合、コントローラ４は、レベル３の消耗度を有するブロックが存在するか否かを判定し、レベル３の消耗度を有するブロックが存在するならば、レベル３の消耗度を有するブロックを選択する。
【０１１９】
そして、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ３０６）。
【０１２０】
必要なデータ保持期間と一致するデータ保持期間に対応する消耗度を有するブロックが存在しないならば（ステップＳ３０４のＮＯ）、コントローラ４は、必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消耗度のブロックが存在するか否か判定する（ステップＳ３０７）。必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消耗度のブロックが存在するならば（ステップＳ３０７のＹＥＳ）、コントローラ４は、必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消耗度のブロックを選択する（ステップＳ３０８）。
【０１２１】
例えば、ライトコマンドにより指定されるデータ保持期間と一致するデータ保持期間に対応する消耗度がレベル３であり、レベル３の消耗度を有するブロックが存在しない場合に、コントローラ４は、レベル３の消耗度により推定されるデータ保持期間よりも１レベル長いデータ保持期間を有するブロック、即ち、レベル２の消耗度を有するブロックが存在するか否かを判定し、レベル２の消耗度を有するブロックが存在するならば、レベル２の消耗度を有するブロックを書き込み先ブロックとして選択する。
【０１２２】
そして、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ３０９）。
【０１２３】
必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消耗度のブロックが存在しないならば（ステップＳ３０７のＮＯ）、コントローラ４は、必要なデータ保持期間よりも２レベル長いデータ保持期間に対応する消耗度のブロックが存在するか否かを判定する。そして、必要なデータ保持期間よりも２レベル長いデータ保持期間に対応する消耗度のブロックが存在しなければ、コントローラ４は、必要なデータ保持期間よりも３レベル長いデータ保持期間に対応する消耗度のブロックが存在するか否かを判定する。このように、コントローラ４は、判定したレベルの消耗度を有するブロックが存在しなければ、その判定したレベルよりも１レベル長いデータ保持期間に対応する消耗度のブロックが存在するか否かを判定していく。これは、必要なデータ保持期間以上のデータ保持期間に対応する消耗度を有するブロックの中で、できるだけ短いデータ保持期間に対応する消耗度を有するブロックを優先的に書き込み先ブロックとして選択するためである。
【０１２４】
例えば、ライトコマンドにより指定されるデータ保持期間と一致するデータ保持期間に対応する消耗度はレベル３である場合において、コントローラ４は、レベル３の消耗度を有するブロックが存在するか否かを判定し、レベル３の消耗度を有するブロックが存在しないならばレベル２の消耗度を有するブロックが存在するか否かの判定を実行する。
【０１２５】
そして、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消耗度のブロックが存在するか否かが判定され（ステップＳ３１０）、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消耗度のブロックが存在するならば（ステップＳ３１０のＹＥＳ）、コントローラ４は、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消耗度のブロックを書き込み先ブロックとして選択する（ステップＳ３１１）。
【０１２６】
コントローラ４は、選択されたブロックに書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ３１２）。
【０１２７】
最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消耗度のブロックが存在しないならば（ステップＳ３１０のＮＯ）、コントローラ４は、最も長いデータ保持期間に対応する消耗度のブロックを書き込み先ブロックとして選択する（ステップＳ３１３）。そして、コントローラ４は、選択されたブロックに書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ３１４）。例えば、ライトコマンドにより指定されるデータ保持期間と一致するデータ保持期間に対応する消耗度はレベル３であり、レベル３およびレベル２の消耗度を有するブロックが存在しない場合には、コントローラ４は、ライトコマンドにより指定されるデータ保持期間以上のデータ保持期間に対応する消耗度を有するブロックの中で最も長いデータ保持期間に対応する消耗度を有するブロックであるレベル１の消耗度を有するブロックを書き込み先ブロックとして選択する。
【０１２８】
図１９のフローチャートは、消耗度に基づいて書き込み先ブロックを選択し、消耗低減プログラムモードにより選択したブロックにデータを書き込む動作の手順を示す。
【０１２９】
図１９のフローチャートは、図１８のフローチャートにおけるステップＳ３０９をステップＳ４０９、ステップＳ３１２をステップＳ４１２、ステップＳ３１４をステップＳ４１４に変更されたフローチャートである。
【０１３０】
必要なデータ保持期間と一致するデータ保持期間に対応する消耗度を有するブロックが書き込み先ブロックとして選択された場合には（ステップＳ３０３〜Ｓ３０５）、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ３０６）。
【０１３１】
他方、必要なデータ保持期間と一致するデータ保持期間に対応する消耗度を有するブロックが存在しないため、指定されたデータ保持期間よりも長いデータ保持期間に対応する消耗度を有するブロックが書き込み先ブロックとして選択された場合（ステップＳ３０８、ステップＳ３１１、ステップＳ３１３）、コントローラ４は、選択されたブロックに書き込むべきデータを、消耗低減プログラムモードで書き込む（ステップＳ４０９、ステップＳ４１２、ステップＳ４１４）。
【０１３２】
図２０のフローチャートは、ブロックを消去回数に基づいて分類する手順を示す。ブロックの消耗度はブロックの消去回数に基づいて判断することができるため、ブロックの消去回数に基づいてブロックが分類される動作が実行されてもよい。なお、消去回数が多いほど消耗度が大きくなり、消去回数が少ないほど消耗度が小さくなる。
【０１３３】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に含まれる各ブロックの消去回数を監視する（ステップＳ５０１）。そして、コントローラ４は、ある一つのブロックを選択する（ステップＳ５０２）。
【０１３４】
以後のステップＳ５０３〜Ｓ５０９において、ステップＳ５０２で選択されたブロックの消去回数に基づいて、選択されたブロックのグループ分けが実行される。
【０１３５】
コントローラ４は、選択されたブロックの消去回数がレベル１に対応するか否かを判定する（ステップＳ５０３）。選択されたブロックの消去回数がレベル１に対応するならば（ステップＳ５０３のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル１のグループに分類する（ステップＳ５０４）。
【０１３６】
選択されたブロックの消去回数がレベル１に対応しないならば（ステップＳ５０３のＮＯ）、コントローラ４は、選択されたブロックの消去回数がレベル２に対応するか否かを判定する（ステップＳ５０５）。選択されたブロックの消去回数がレベル２に対応するならば（ステップＳ５０５のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル２のグループに分類する（ステップＳ５０６）。
【０１３７】
選択されたブロックの消去回数がレベル２に対応しないならば（ステップＳ５０５のＮＯ）、コントローラ４は、選択されたブロックの消去回数がレベル３に対応するか否かを判定する（ステップＳ５０７）。選択されたブロックの消去回数がレベル３に対応するならば（ステップＳ５０７のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル３のグループに分類する（ステップＳ５０８）。
【０１３８】
選択されたブロックの消去回数がレベル３に対応しないならば（ステップＳ５０７のＮＯ）、コントローラ４は、選択されたブロックを消耗度＝レベル４のグループに分類する（ステップＳ５０９）。
【０１３９】
図２１のフローチャートは、消去回数に基づいて書き込み先ブロックを選択し、選択したブロックにデータを書き込む動作の手順を示す。
【０１４０】
書き込むべきデータに必要なデータ保持期間を指定するパラメータを含むライトコマンドがホスト２から受信されると（ステップＳ６０１のＹＥＳ）、コントローラ４は、ブロック消耗度管理テーブル３３Ａを参照し、必要なデータ保持期間を満たす消去回数を有するブロックを探し（ステップＳ６０２）、必要なデータ保持期間を満たす消去回数を有するブロックが存在するか否かを判定する（ステップＳ６０３）。必要なデータ保持期間を満たす消去回数を有するブロックとは、消去回数により推定されるデータ保持期間がライトコマンドによって指定されたデータ保持期間以上であるブロックのことである。
【０１４１】
必要なデータ保持期間を満たす消去回数を有するブロックが存在しなければ（ステップＳ６０３のＮＯ）、コントローラ４は、ホスト２にエラーを返す（ステップＳ６１５）。
【０１４２】
必要なデータ保持期間を満たす消去回数を有するブロックが存在するならば（ステップＳ６０３のＹＥＳ）、コントローラ４は必要なデータ保持期間と一致するデータ保持期間に対応する消去回数を有するブロックが存在するか否かを判定する（ステップＳ６０４）。
【０１４３】
必要なデータ保持期間と一致するデータ保持期間に対応する消去回数を有するブロックが存在するならば（ステップＳ６０４のＹＥＳ）、コントローラ４は、必要なデータ保持期間と一致するデータ保持期間に対応する消去回数を有するブロックを選択する（ステップＳ６０５）。そして、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ６０６）。
【０１４４】
必要なデータ保持期間と一致するデータ保持期間に対応する消去回数を有するブロックが存在しないならば（ステップＳ６０４のＮＯ）、コントローラ４は、必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去回数のブロックが存在するか否か判定する（ステップＳ６０７）。必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去回数のブロックが存在するならば（ステップＳ６０７のＹＥＳ）、コントローラ４は、必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去回数のブロックを選択する（ステップＳ６０８）。そして、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ６０９）。
【０１４５】
必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去回数のブロックが存在しないならば（ステップＳ６０７のＮＯ）、コントローラ４は、必要なデータ保持期間よりも２レベル長いデータ保持期間に対応する消去回数のブロックが存在するか否かを判定する。そして、コントローラ４は、必要なデータ保持期間よりも２レベル長いデータ保持期間に対応する消去回数のブロックが存在しなければ、必要なデータ保持期間よりも３レベル長いデータ保持期間に対応する消去回数のブロックが存在するか否かを判定する。このように、コントローラ４は、判定したレベルの消去回数を有するブロックが存在しなければ、その判定したレベルよりも１レベル長いデータ保持期間に対応する消去回数のブロックが存在するか否かを判定していく。これは、必要なデータ保持期間以上のデータ保持期間に対応する消去回数を有するブロックの中で、できるだけ短いデータ保持期間に対応する消去回数を有するブロックを優先的に書き込み先ブロックとして選択するためである。
【０１４６】
そして、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去回数のブロックが存在するか否かが判定され（ステップＳ６１０）、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去回数のブロックが存在するならば（ステップＳ６１０のＹＥＳ）、コントローラ４は、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去回数のブロックを書き込み先ブロックとして選択する（ステップＳ６１１）。そして、コントローラ４は、選択されたブロックに書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ６１２）。
【０１４７】
最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去回数のブロックが存在しないならば（ステップＳ６１０のＮＯ）、コントローラ４は、最も長いデータ保持期間に対応する消去回数のブロックを書き込み先ブロックとして選択する（ステップＳ６１３）。コントローラ４は、選択されたブロックに書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ６１４）。
【０１４８】
図２２のフローチャートは、消去回数に基づいて書き込み先ブロックを選択し、消耗低減プログラムモードにより選択したブロックにデータを書き込む動作の手順を示す。
【０１４９】
図２２のフローチャートは、図２１のフローチャートにおけるステップＳ６０９をステップＳ７０９、ステップＳ６１２をステップＳ７１２、ステップＳ６１４をステップＳ７１４に変更されたフローチャートである。
【０１５０】
必要なデータ保持期間と一致するデータ保持期間に対応する消去回数を有するブロックが書き込み先ブロックとして選択された場合には（ステップＳ６０３〜Ｓ６０５）、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ６０６）。
【０１５１】
他方、必要なデータ保持期間と一致するデータ保持期間に対応する消去回数を有するブロックが存在しないため、指定されたデータ保持期間よりも長いデータ保持期間に対応する消去回数を有するブロックが書き込み先ブロックとして選択された場合（ステップＳ６０８、ステップＳ６１１、ステップＳ６１３）、コントローラ４は、選択されたブロックに書き込むべきデータを、消耗低減プログラムモードで書き込む（ステップＳ７０９、ステップＳ７１２、ステップＳ７１４）。
【０１５２】
図２３のフローチャートは、ブロックを消去時間に基づいて分類する手順を示す。ブロックの消耗度はブロックの消去時間に基づいて判断することができるため、ブロックの消去時間に基づいてブロックが分類される動作が実行されてもよい。なお、消去時間が長いほど消耗度が大きくなり、消去時間が短いほど消耗度が小さくなる。
【０１５３】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に含まれる各ブロックの消去時間を監視する（ステップＳ８０１）。そして、コントローラ４は、ある一つのブロックを選択する（ステップＳ８０２）。
【０１５４】
以後のステップＳ８０３〜Ｓ８０９において、ステップＳ８０２で選択されたブロックの消去時間に基づいて、選択されたブロックのグループ分けが実行される。
【０１５５】
コントローラ４は、選択されたブロックの消去時間がレベル１に対応するか否かを判定する（ステップＳ８０３）。選択されたブロックの消去時間がレベル１に対応するならば（ステップＳ８０３のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル１のグループに分類する（ステップＳ８０４）。
【０１５６】
選択されたブロックの消去時間がレベル１に対応しないならば（ステップＳ８０３のＮＯ）、コントローラ４は、選択されたブロックの消去時間がレベル２に対応するか否かを判定する（ステップＳ８０５）。選択されたブロックの消去時間がレベル２に対応するならば（ステップＳ８０５のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル２のグループに分類する（ステップＳ８０６）。
【０１５７】
選択されたブロックの消去時間がレベル２に対応しないならば（ステップＳ８０５のＮＯ）、コントローラ４は、選択されたブロックの消去時間がレベル３に対応するか否かを判定する（ステップＳ８０７）。選択されたブロックの消去時間がレベル３に対応するならば（ステップＳ８０７のＹＥＳ）、コントローラ４は、選択されたブロックを消耗度＝レベル３のグループに分類する（ステップＳ８０８）。
【０１５８】
選択されたブロックの消去時間がレベル３に対応しないならば（ステップＳ８０７のＮＯ）、コントローラ４は、選択されたブロックを消耗度＝レベル４のグループに分類する（ステップＳ８０９）。
【０１５９】
図２４のフローチャートは、消去時間に基づいて書き込み先ブロックを選択し、選択したブロックにデータを書き込む動作の手順を示す。
【０１６０】
書き込むべきデータに必要なデータ保持期間を指定するパラメータを含むライトコマンドがホスト２から受信されると（ステップＳ９０１のＹＥＳ）、コントローラ４は、ブロック消耗度管理テーブル３３Ａ’を参照し、必要なデータ保持期間を満たす消去時間を有するブロックを探し（ステップＳ９０２）、必要なデータ保持期間を満たす消去時間を有するブロックが存在するか否かを判定する（ステップＳ９０３）。必要なデータ保持期間を満たす消去時間を有するブロックとは、消去時間により推定されるデータ保持期間がライトコマンドによって指定されたデータ保持期間以上であるブロックのことである。
【０１６１】
必要なデータ保持期間を満たす消去時間を有するブロックが存在しなければ（ステップＳ９０３のＮＯ）、コントローラ４は、ホスト２にエラーを返す（ステップＳ９１５）。
【０１６２】
必要なデータ保持期間を満たす消去時間を有するブロックが存在するならば（ステップＳ９０３のＹＥＳ）、コントローラ４は必要なデータ保持期間と一致するデータ保持期間に対応する消去時間を有するブロックが存在するか否かを判定する（ステップＳ９０４）。
【０１６３】
必要なデータ保持期間と一致するデータ保持期間に対応する消去時間を有するブロックが存在するならば（ステップＳ９０４のＹＥＳ）、コントローラ４は、必要なデータ保持期間と一致するデータ保持期間に対応する消去時間を有するブロックを選択する（ステップＳ９０５）。そして、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ９０６）。
【０１６４】
必要なデータ保持期間と一致するデータ保持期間に対応する消去時間を有するブロックが存在しないならば（ステップＳ９０４のＮＯ）、コントローラ４は、必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去時間のブロックが存在するか否か判定する（ステップＳ９０７）。必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去時間のブロックが存在するならば（ステップＳ９０７のＹＥＳ）、コントローラ４は、必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去時間のブロックを選択する（ステップＳ９０８）。そして、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ９０９）。
【０１６５】
必要なデータ保持期間よりも１レベル長いデータ保持期間に対応する消去時間のブロックが存在しないならば（ステップＳ９０７のＮＯ）、必要なデータ保持期間よりも２レベル長いデータ保持期間に対応する消去時間のブロックが存在するか否かを判定する。そして、必要なデータ保持期間よりも２レベル長いデータ保持期間に対応する消去時間のブロックが存在しなければ、必要なデータ保持期間よりも３レベル長いデータ保持期間に対応する消去時間のブロックが存在するか否かを判定する。このように、判定したレベルの消去時間を有するブロックが存在しなければ、その判定したレベルよりも１レベル長いデータ保持期間に対応する消去時間のブロックが存在するか否かを判定していく。これは、必要なデータ保持期間以上のデータ保持期間に対応する消去時間を有するブロックの中で、できるだけ短いデータ保持期間に対応する消去時間を有するブロックを優先的に書き込み先ブロックとして選択するためである。
【０１６６】
そして、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去時間のブロックが存在するか否かが判定され（ステップＳ９１０）、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去時間のブロックが存在するならば（ステップＳ９１０のＹＥＳ）、コントローラ４は、最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去時間のブロックを書き込み先ブロックとして選択する（ステップＳ９１１）。そして、コントローラ４は、選択されたブロックに書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ９１２）。
【０１６７】
最も長いデータ保持期間よりも１レベル短いデータ保持期間に対応する消去時間のブロックが存在しないならば（ステップＳ９１０のＮＯ）、コントローラ４は、最も長いデータ保持期間に対応する消去時間のブロックを書き込み先ブロックとして選択する（ステップＳ９１３）。コントローラ４は、選択されたブロックに書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ９１４）。
【０１６８】
図２５のフローチャートは、消去時間に基づいて書き込み先ブロックを選択し、消耗低減プログラムモードにより選択したブロックにデータを書き込む動作の手順を示す。
【０１６９】
図２５のフローチャートは、図２４のフローチャートにおけるステップＳ９０９をステップＳ１００９、ステップＳ９１２をステップＳ１０１２、ステップＳ９１４をステップＳ１０１４に変更されたフローチャートである。
【０１７０】
必要なデータ保持期間と一致するデータ保持期間に対応する消去時間を有するブロックが書き込み先ブロックとして選択された場合には（ステップＳ９０３〜Ｓ９０５）、コントローラ４は、選択されたブロックに、書き込むべきデータを通常のプログラムモードにより書き込む（ステップＳ９０６）。
【０１７１】
他方、必要なデータ保持期間と一致するデータ保持期間に対応する消去時間を有するブロックが存在しないため、指定されたデータ保持期間よりも長いデータ保持期間に対応する消去時間を有するブロックが書き込み先ブロックとして選択された場合（ステップＳ９０８、ステップＳ９１１、ステップＳ９１３）、コントローラ４は、選択されたブロックに書き込むべきデータを消耗低減プログラムモードで書き込む（ステップＳ１００９、ステップＳ１０１２、ステップＳ１０１４）。
【０１７２】
（第２実施形態）
第１実施形態においては、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理を行うルックアップテーブル（ＬＵＴ）３２がフラッシュストレージデバイス３内に設けられていた。第２実施形態においては、ホスト２が、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理を行うルックアップテーブル（ＬＵＴ）３２Ａを有しており、フラッシュストレージデバイス３にはルックアップテーブル（ＬＵＴ）３２は存在しない。
【０１７３】
以下、第１実施形態と異なる点のみを説明する。
【０１７４】
図２６は、第２実施形態に係るメモリシステムを含む情報処理システム１の構成例を示す。
【０１７５】
第１実施形態との違いは、フラッシュストレージデバイス３内には、ＬＵＴ３２が無く、その代わりに、ホスト２のフラッシュストレージマネージャ４４内にＬＵＴ３２Ａがあることである。
【０１７６】
ＬＵＴ３２Ａでは、論理アドレスそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングが管理される。ＬＵＴ３２Ａにおいては、論理アドレスはデータを識別する識別子（タグ）であり、この論理アドレス（タグ）は、ＬＢＡであってもよいし、キー・バリュー・ストアのキーであってもよいし、ファイル名のようなファイル識別子であってもよい。ＬＵＴ３２Ａはフラッシュストレージマネージャ４４によって管理されており、ＬＵＴ３２Ａの更新もフラッシュストレージマネージャ４４によって行われる。
【０１７７】
また、フラッシュストレージデバイス３内のシステム管理情報３３には、第１実施形態と同様に、ブロック消耗度管理テーブル３３Ａ、ブロック消耗度管理テーブル３３Ａ’、ブロック情報が含まれる。ブロック情報には、上述したように、ＮＡＮＤ型フラッシュメモリ５内のブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）が含まれる。
【０１７８】
図２７は、第２実施形態のフラッシュストレージデバイス３に適用されるライトコマンドを示す。
【０１７９】
このライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、ＱｏＳドメインＩＤを指定するパラメータ、論理アドレスを指定するパラメータ、長さを指定するパラメータ、必要なデータ保持期間を指定するパラメータ、等を含んでもよい。
【０１８０】
ＱｏＳドメインＩＤは、データを書き込むべきＱｏＳドメインを一意に識別可能な識別子である。あるエンドユーザからのライト要求に応じてホスト２から送信されるライトコマンドは、このエンドユーザに対応するＱｏＳドメインを指定するＱｏＳドメインＩＤを含んでもよい。ネームスペースＩＤがＱｏＳドメインＩＤとして扱われてもよい。
【０１８１】
論理アドレスは、書き込むべきデータを識別するタグであり、例えば、ＬＢＡ、キー・バリュー・ストアのキー、ファイル識別子がこれに相当する。
【０１８２】
長さは、書き込むべきライトデータの長さを示す。長さは、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１８３】
必要なデータ保持期間は、書き込むべきデータに必要なデータ保持期間（例えば、１週間、２週間、１か月、２か月、４か月、６か月、８か月、１年、５年、１０年等）を示す。
【０１８４】
図２８は、図２７のライトコマンドに対するレスポンスを示す。  
【０１８５】
このレスポンスは、論理アドレス、物理アドレス、長さを含む。  
【０１８６】
論理アドレスは、図２７のライトコマンドに含まれていた論理アドレスである。
【０１８７】
物理アドレスは、図２７のライトコマンドに応じてデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置の物理アドレスを示す。
【０１８８】
長さは、書き込まれたライトデータの長さを示す。長さは、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１８９】
図２９は、第２実施形態のフラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０１９０】
このＴｒｉｍコマンドは、物理アドレス、長さを含む。
【０１９１】
物理アドレスは、無効化すべきデータ（参照カウントを減らすべきデータ）が格納されている最初の物理記憶位置を示す。
【０１９２】
長さは、無効化すべきデータ（参照カウントを減らすべきデータ）の長さを示す。この長さ（データ長）は、バイトによって指定されてもよい。
【０１９３】
コントローラ４は、ブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）を管理する。無効にすべきデータが格納されている物理記憶位置を示す物理アドレスを含むＴｒｉｍコマンドをホスト２から受信した場合、コントローラ４は、システム管理情報３３の一部であるブロック情報を更新して、Ｔｒｉｍコマンドに含まれる物理アドレスに対応する物理記憶位置のデータに対応するフラグ（ビットマップフラグ）を、無効を示す値に変更する。
【０１９４】
図３０のシーケンスチャートは、図２７のライトコマンドの受信に応答してホスト２とフラッシュストレージデバイス３とによって実行されるデータ書き込み処理を示す。
【０１９５】
ホスト２は、ＱｏＳドメインＩＤ、論理アドレス、ライトデータ、長さ、必要なデータ保持期間を含むライトコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、消耗度により推定されるデータ保持期間がホスト２によって指定されたデータ保持期間以上のブロックを選択し（ステップＳ１１０１）、選択されたブロック内の書き込み位置を決定し、この選択されたブロック内の書き込み位置にライトデータを書き込む（ステップＳ１１０２）。
【０１９６】
続いて、コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（ステップＳ１１０３）。レスポンスには、論理アドレス、物理アドレス、長さが含まれる。物理アドレスは、選択されたブロックとこの選択されたブロック内の書き込み位置の双方を指定する。この物理アドレスは、選択されたブロックを示すブロックアドレスと、書き込み位置を示すブロック内オフセットとによって表現されてもよい。
【０１９７】
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴ３２Ａを更新して、書き込まれたライトデータに対応する論理アドレスに物理アドレスをマッピングする（ステップＳ１１０４）。
【０１９８】
この後、ホスト２は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する。
【０１９９】
フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック情報を更新する（ステップＳ１１０５）。ブロック情報の更新とは、システム管理情報３３の一部であるブロック情報を更新して、Ｔｒｉｍコマンドに含まれる物理アドレスに対応する物理記憶位置のデータに対応するフラグ（ビットマップフラグ）を、無効を示す値に変更することである。
【０２００】
図３１は、フラッシュストレージデバイス３を内蔵するホスト２の構成例を示す。
【０２０１】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のフラッシュストレージデバイス３は筐体２０１内に配置されてもよい。この場合、各フラッシュストレージデバイス３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２０２】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２０３】
以上説明したように、第１および第２実施形態によれば、書き込むべきデータに必要なデータ保持期間を指定するパラメータを含むライト要求がホスト２から受信された場合、消耗度から推定されるデータ保持期間がホスト２によって指定されたデータ保持期間以上のブロックが書き込み先ブロックとして選択され、この選択されたブロックにデータが書き込まれる。これにより、異なるデータ保持期間を指定するライト要求それぞれが混在される環境においては、異なる消耗度を有する複数のブロックを、必要なデータ保持期間が異なる複数種のデータに対して最適に配分することが可能となる。例えば、５年のデータ保持期間が必要なデータのライト要求に対しては低消耗度のブロックを書き込み先ブロックとして割り当て、１か月のデータ保持期間が必要なデータのライト要求に対しては比較的大消耗度のブロックを書き込み先ブロックとして割り当てることができる。
【０２０４】
また、第１および第２実施形態によれば、消耗度から推定されるデータ保持期間が指定されたデータ保持期間以上のブロックの中で、より短いデータ保持期間に対応する消耗度を有するブロックが優先的に書き込み先ブロックとして選択される。このため、ホスト２から指定されたデータ保持期間が短いデータを書き込む場合に、必要以上のデータ保持期間を有するブロックをそのデータの書き込みに使用してしまい、ホスト２から指定されたデータ保持期間が長いデータの書き込みを実行する際に、ホスト２から指定されたデータ保持期間以上のデータ保持期間に対応する消耗度を有するブロックが不足してしまうという事態を防ぐことができる。したがって、異なる消耗度を有する複数のブロックを、必要なデータ保持期間が異なる複数種のデータに対してより最適に配分することが可能となる。
【０２０５】
さらに、書き込み先ブロックとして選択されたブロックの消耗度により推定されるデータ保持期間がホスト２により指定されたデータ保持期間よりも長い場合、通常のプログラムモードによるプログラム動作よりも選択されたブロックのメモリセル群に充電する電荷量が少ない消耗低減モードによるプログラム動作によってデータを選択されたブロックに書き込むことができる。これにより、通常のプログラムモードによるプログラム動作を実行する場合と比べて、メモリセル群の消耗を低減させることができ、フラッシュストレージデバイス３を長寿命化することができる。
【０２０６】
よって、第１および第２実施形態によれば、信頼性の向上を図ることができるメモリシステムを提供することができる。
【０２０７】
なお、第１および第２実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、第１および第２実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２０８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２０９】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…消去回数モニタ部、２２…消去時間モニタ部、２３…ブロック分類部、２４…ライト動作制御部、２５…消耗低減処理部。
【図１】
2019086970.tif 000003
【図２】
2019086970.tif 000004
【図３】
2019086970.tif 000005
【図４】
2019086970.tif 000006
【図５】
2019086970.tif 000007
【図６】
2019086970.tif 000008
【図７】
2019086970.tif 000009
【図８】
2019086970.tif 000010
【図９】
2019086970.tif 000011
【図１０】
2019086970.tif 000012
【図１１】
2019086970.tif 000013
【図１２】
2019086970.tif 000014
【図１３】
2019086970.tif 000015
【図１４】
2019086970.tif 000016
【図１５】
2019086970.tif 000017
【図１６】
2019086970.tif 000018
【図１７】
2019086970.tif 000019
【図１８】
2019086970.tif 000020
【図１９】
2019086970.tif 000021
【図２０】
2019086970.tif 000022
【図２１】
2019086970.tif 000023
【図２２】
2019086970.tif 000024
【図２３】
2019086970.tif 000025
【図２４】
2019086970.tif 000026
【図２５】
2019086970.tif 000027
【図２６】
2019086970.tif 000028
【図２７】
2019086970.tif 000029
【図２８】
2019086970.tif 000030
【図２９】
2019086970.tif 000031
【図３０】
2019086970.tif 000032
【図３１】
2019086970.tif 000033