(57)【要約】【課題】Ｉ／Ｏ性能を改善することができる計算機システムを実現する。【解決手段】計算機システムは、書き込むべき第１のデータを識別するための第１の論理アドレスと前記第１のデータの長さとを指定するライト要求をストレージデバイスに送信する。計算機システムは、不良ブロックを除くブロックの中から前記第１のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第１のブロックおよび前記第１のデータが書き込まれた前記第１のブロック内の第１の物理記憶位置の双方を示す第１の物理アドレスと、前記第１の論理アドレスとを、前記ストレージデバイスから受信する。計算機システムは、論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングする。【選択図】図２０
2019082817.tif 000002
【特許請求の範囲】
【請求項１】
各々が複数のブロックを含む複数の不揮発性メモリダイを備えるストレージデバイスを制御する計算機システムであって、
メモリと、
前記メモリに電気的に接続され、前記メモリに格納されたコンピュータプログラムを実行するように構成されたプロセッサとを具備し、
前記プロセッサは、
書き込むべき第１のデータを識別するための第１の論理アドレスと前記第１のデータの長さとを指定するライト要求を前記ストレージデバイスに送信し、
不良ブロックを除くブロックの中から前記第１のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第１のブロックおよび前記第１のデータが書き込まれた前記第１のブロック内の第１の物理記憶位置の双方を示す第１の物理アドレスと、前記第１の論理アドレスとを、前記ストレージデバイスから受信し、
論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングするように構成されている、計算機システム。
【請求項２】
前記プロセッサは、
前記第１のテーブルを参照して前記第１の論理アドレスにマッピングされている前記第１の物理アドレスを取得し、
前記第１の物理アドレスを指定するリード要求を前記ストレージデバイスに送信するように構成されている請求項１記載の計算機システム。
【請求項３】
前記プロセッサは、
前記ストレージデバイスによって前記第１のデータが旧物理記憶位置から新物理記憶位置にコピーされた後、前記第１の論理アドレスと、前記旧物理記憶位置を示す第２の物理アドレスと、前記新物理記憶位置を示す第３の物理アドレスとを前記ストレージデバイスから受信し、
前記第１のテーブルを参照して前記第１の論理アドレスにマッピングされている現在の物理アドレスを取得し、
前記第２の物理アドレスが前記取得された現在の物理アドレスに一致する場合、前記第１のテーブルを更新して前記第１の論理アドレスに前記第３の物理アドレスをマッピングし、
前記第２の物理アドレスが前記取得された現在の物理アドレスに一致しない場合、前記第１のテーブルを更新せずに前記現在の物理アドレスを維持するように構成されている請求項１記載の計算機システム。
【請求項４】
前記プロセッサは、前記第１のテーブルを更新して前記第１の論理アドレスに前記第３の物理アドレスをマッピングした後、前記第２の物理アドレスを指定する第１のコマンドを前記ストレージデバイスに送信することによって前記第２の物理アドレスに対応するデータを無効化すべきことを前記ストレージデバイスに指示するように構成されている請求項３記載の計算機システム。
【請求項５】
前記プロセッサは、前記第１のデータが、前記ストレージデバイスに既に書き込まれている旧データの更新データである場合、前記第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングした後、前記旧データに対応する物理アドレスを指定する第１のコマンドを前記ストレージデバイスに送信することによって、前記旧データを無効化すべきことを前記ストレージデバイスに指示するように構成されている請求項１記載の計算機システム。
【請求項６】
前記プロセッサは、前記第１のデータが、前記ストレージデバイスに既に書き込まれている旧データの更新データであり、且つ前記旧データが複数の論理アドレスによって参照されている重複データである場合、前記第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングした後、前記旧データに対応する物理アドレスを指定する第１のコマンドを前記ストレージデバイスに送信することによって、前記旧データを参照している論理アドレスの数を示す参照カウントを減らすべきことを前記ストレージデバイスに指示するように構成されている請求項１記載の計算機システム。
【請求項７】
前記計算機システムは前記参照カウントを保持していない請求項６記載の計算機システム。
【請求項８】
複数の不揮発性メモリダイを備え且つ異なる不揮発性メモリダイに属するブロックそれぞれを各々が含む複数の並列単位を管理するように構成されたストレージデバイスを制御する計算機システムであって、
メモリと、
前記メモリに電気的に接続され、前記メモリに格納されたコンピュータプログラムを実行するように構成されたプロセッサとを具備し、
前記プロセッサは、
書き込むべき第１のデータを識別するための第１の論理アドレスと前記第１のデータの長さとを指定するライト要求を前記ストレージデバイスに送信し、
書き込み対象の一つの並列単位に含まれる不良ブロック以外のブロックの中から前記第１のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第１のブロックおよび前記第１のデータが書き込まれた前記第１のブロック内の第１の物理記憶位置の双方を示す第１の物理アドレスと、前記第１の論理アドレスとを、前記ストレージデバイスから受信し、
論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングするように構成されている、計算機システム。
【請求項９】
前記ライト要求は、前記第１の論理アドレスと、前記複数の並列単位内の一つの並列単位を示す第１のブロックアドレスとを指定し、
前記書き込み対象の前記一つの並列単位は、前記指定された第１のブロックアドレスを有する並列単位である請求項８記載の計算機システム。
【請求項１０】
前記プロセッサは、
前記第１のテーブルを参照して前記第１の論理アドレスにマッピングされている前記第１の物理アドレスを取得し、
前記第１の物理アドレスを指定するリード要求を前記ストレージデバイスに送信するように構成されている請求項８記載の計算機システム。
【請求項１１】
前記プロセッサは、
前記ストレージデバイスによって前記第１のデータが旧物理記憶位置から新物理記憶位置にコピーされた後、前記第１の論理アドレスと、前記旧物理記憶位置を示す第２の物理アドレスと、前記新物理記憶位置を示す第３の物理アドレスとを前記ストレージデバイスから受信し、
前記第１のテーブルを参照して前記第１の論理アドレスにマッピングされている現在の物理アドレスを取得し、
前記第２の物理アドレスが前記取得された現在の物理アドレスに一致する場合、前記第１のテーブルを更新して前記第１の論理アドレスに前記第３の物理アドレスをマッピングし、
前記第２の物理アドレスが前記取得された現在の物理アドレスに一致しない場合、前記第１のテーブルを更新せずに前記現在の物理アドレスを維持するように構成されている請求項８記載の計算機システム。
【請求項１２】
前記プロセッサは、前記第１のテーブルを更新して前記第１の論理アドレスに前記第３の物理アドレスをマッピングした後、前記第２の物理アドレスを指定する第１のコマンドを前記ストレージデバイスに送信することによって前記第２の物理アドレスに対応するデータを無効化すべきことを前記ストレージデバイスに指示するように構成されている請求項１１記載の計算機システム。
【請求項１３】
各々が複数のブロックを含む複数の不揮発性メモリダイを備えるストレージデバイスを制御する計算機システムによって実行される制御方法であって、
書き込むべき第１のデータを識別するための第１の論理アドレスと前記第１のデータの長さとを指定するライト要求を前記ストレージデバイスに送信することと、
不良ブロックを除くブロックの中から前記第１のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第１のブロックおよび前記第１のデータが書き込まれた前記第１のブロック内の第１の物理記憶位置の双方を示す第１の物理アドレスと、前記第１の論理アドレスとを、前記ストレージデバイスから受信することと、
論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングすることとを具備する制御方法。
【請求項１４】
前記第１のテーブルを参照して前記第１の論理アドレスにマッピングされている前記第１の物理アドレスを取得することと、
前記第１の物理アドレスを指定するリード要求を前記ストレージデバイスに送信することとをさらに具備する請求項１３記載の制御方法。
【請求項１５】
前記ストレージデバイスによって前記第１のデータが旧物理記憶位置から新物理記憶位置にコピーされた後、前記第１の論理アドレスと、前記旧物理記憶位置を示す第２の物理アドレスと、前記新物理記憶位置を示す第３の物理アドレスとを前記ストレージデバイスから受信することと、
前記第１のテーブルを参照して前記第１の論理アドレスにマッピングされている現在の物理アドレスを取得することと、
前記第２の物理アドレスが前記取得された現在の物理アドレスに一致する場合、前記第１のテーブルを更新して前記第１の論理アドレスに前記第３の物理アドレスをマッピングすることと、
前記第２の物理アドレスが前記取得された現在の物理アドレスに一致しない場合、前記第１のテーブルを更新せずに前記現在の物理アドレスを維持することとをさらに具備する請求項１３記載の制御方法。
【請求項１６】
前記第１のテーブルを更新して前記第１の論理アドレスに前記第３の物理アドレスをマッピングした後、前記第２の物理アドレスを指定する第１のコマンドを前記ストレージデバイスに送信することによって前記第２の物理アドレスに対応するデータを無効化すべきことを前記ストレージデバイスに指示することをさらに具備する請求項１５記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを含むストレージデバイスを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるストレージデバイスが広く普及している。このようなストレージデバイスの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。データセンターのサーバのような計算機システムにおいて利用されるストレージデバイスにおいては、高いＩ／Ｏ性能が求められている。このため、最近では、ホスト側とストレージデバイス側との間の新たなインタフェースが提案され始めている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、不揮発性メモリに含まれる不良ブロックの数が増加すると、ストレージデバイス側では、不良ブロックを他のブロックに置換するための置換情報の量の増大、この置換の処理に起因するリード遅延時間の増加が引き起こされる場合がある。このことは、システム全体のＩ／Ｏ性能を低下させる要因とる場合がある。
【０００５】
本発明が解決しようとする課題は、Ｉ／Ｏ性能を改善することができる計算機システムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、各々が複数のブロックを含む複数の不揮発性メモリダイを備えるストレージデバイスを制御する計算機システムは、メモリと、前記メモリに電気的に接続され、前記メモリに格納されたコンピュータプログラムを実行するように構成されたプロセッサとを具備する。前記プロセッサは、書き込むべき第１のデータを識別するための第１の論理アドレスと前記第１のデータの長さとを指定するライト要求を前記ストレージデバイスに送信する。前記プロセッサは、不良ブロックを除くブロックの中から前記第１のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第１のブロックおよび前記第１のデータが書き込まれた前記第１のブロック内の第１の物理記憶位置の双方を示す第１の物理アドレスと、前記第１の論理アドレスとを、前記ストレージデバイスから受信する。前記プロセッサは、論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第１のテーブルを更新して前記第１の論理アドレスに前記第１の物理アドレスをマッピングする。
【図面の簡単な説明】
【０００７】
【図１】ホストとメモリシステム（フラッシュストレージデバイス）との関係を示すブロック図。
【図２】フラッシュストレージデバイスとホストとの間の役割分担とを説明するための図。
【図３】フラッシュストレージデバイスの構成例を示すブロック図。
【図４】Ｉｎ−Ｄｒｉｖｅ−ＧＣ  ＡＰＩ用のコマンドを示す図。
【図５】スーパーブロックＡＰＩ用のコマンドを示す図。
【図６】フラッシュストレージデバイスに設けられたフラッシュＩ／Ｏ制御回路と複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図７】複数のブロックの集合によって構築されるスーパーブロック（並列単位）の構成例を示す図。
【図８】スーパーブロックのブロックアドレスとこのスーパーブロックを構成する複数のブロックそれぞれのブロックアドレスとの関係を説明するための図。
【図９】ある不揮発性メモリダイに属する不良ブロックそれぞれをこの不揮発性メモリダイの他のブロックそれぞれによって置換する動作を説明するための図。
【図１０】不良ブロックを置換することなく、スーパーブロック内の非不良ブロックの中から書き込み先ブロックを選択する動作を説明するための図。
【図１１】フラッシュストレージデバイスに適用されるライトコマンドを説明するための図。
【図１２】図１１のライトコマンドに対するレスポンスを説明するための図。
【図１３】フラッシュストレージデバイスに適用されるＴｒｉｍコマンドを説明するための図。
【図１４】不良ブロックを有するスーパーブロックにデータを書き込む動作を示す図。
【図１５】図１２のレスポンスに含まれる物理アドレスの構成例を示す図。
【図１６】スーパーブロックのブロックアドレスとこのスーパーブロックに含まれる各ブロックのブロックアドレスとの関係を示す図。
【図１７】論理アドレスとデータのペアをブロック内のページに書き込む動作を説明するための図。
【図１８】データをブロック内のページのユーザデータ領域に書き込み、このデータの論理アドレスをこのページの冗長領域に書き込む動作を説明するための図。
【図１９】複数のデータ部とこれらデータ部から算出される消失訂正符号とを不良ブロックを有するスーパーブロックに書き込む動作を説明するための図。
【図２０】ホスト内のフラッシュトランスレーション部とフラッシュストレージデバイス内のライト動作制御部との関係を示すブロック図。
【図２１】ホストとフラッシュストレージデバイスとによって実行されるライト動作およびリード動作を説明するためのブロック図。
【図２２】ホストとフラッシュストレージデバイスとによって実行される書き込み動作処理のシーケンスを示すシーケンスチャート。
【図２３】すでに書き込まれているデータに対する更新データを書き込むデータ更新動作を示す図。
【図２４】フラッシュストレージデバイスによって管理されるブロック管理テーブルを更新する動作を説明するための図。
【図２５】ホストによって管理されるルックアップテーブル（論理物理アドレス変換テーブル）を更新する動作を説明するための図。
【図２６】無効化すべきデータに対応する物理アドレスを示すホストからの通知に応じてブロック管理テーブルを更新する動作を説明するための図。
【図２７】フラッシュストレージデバイスに適用されるリードコマンドを説明するための図。
【図２８】フラッシュストレージデバイスによって実行されるリード動作を説明するための図。
【図２９】ホストとフラッシュストレージデバイスとによって実行されるリード処理のシーケンスを示すシーケンスチャート。
【図３０】フラッシュストレージデバイスに適用されるガベージコレクション（ＧＣ）制御コマンドを説明するための図。
【図３１】フラッシュストレージデバイスに適用される強制ガベージコレクション（ＧＣ）コマンドを説明するための図。
【図３２】フラッシュストレージデバイスからホストに送信されるアドレス更新通知を説明するための図。
【図３３】フラッシュストレージデバイスによって実行されるガベージコレクション（ＧＣ）動作の手順を示すシーケンスチャート。
【図３４】ガベージコレクション（ＧＣ）のために実行されるデータコピー動作の例を説明するための図。
【図３５】図３４のデータコピー動作の結果に基づいて更新されるホストのルックアップテーブルの内容を説明するための図。
【図３６】ライトコマンドに対するレスポンスとＧＣ用コールバック処理（アドレス更新通知）との関係を説明するための図。
【図３７】ホストによって実行されるルックアップテーブル更新処理の手順を示すフローチャート。
【図３８】参照カウントを管理するためのブロック管理テーブルの構成例を示す図。
【図３９】フラッシュストレージデバイスに適用されるデュプリケートコマンドを説明するための図。
【図４０】ホストとフラッシュストレージデバイスとによって実行される参照カウントインクリメント／デクリメント処理を示すシーケンスチャート。
【図４１】フラッシュストレージデバイスによって実行されるスーパーブロック割り当て処理の手順を示すフローチャート。
【図４２】スーパーブロック内の全ての非不良ブロックがこのスーパーブロックの先頭から連続して論理的に配置されるようにアクセス対象ブロックのアドレスを変換するアドレス変換動作を説明するための図。
【図４３】アドレス変換動作のために使用される不良情報管理テーブルとアドレス変換の例を説明するための図。
【図４４】ホスト内のフラッシュトランスレーション部とフラッシュストレージデバイス内の不良ブロックトランスレーション部との関係を示すブロック図。
【図４５】ホスト（計算機システム）の構成例を示すブロック図。
【図４６】フラッシュストレージデバイスを内蔵するホストの構成例を示す図。
【図４７】ホストによって実行される書き込み動作の手順を示すフローチャート。
【図４８】ホストによって実行されるリード動作の手順を示すフローチャート。
【図４９】ホストによって実行される参照カウントインクリメント／デクリメント処理の手順を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態を説明する。  
【０００９】
まず、図１を参照して、ホストとメモリシステムとの関係を説明する。
【００１０】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【００１１】
ホスト（ホストデバイス）２は、複数のフラッシュストレージデバイス３を制御するように構成されている。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成された計算機システムによって実現される。この計算機システムはサーバであってもよい。
【００１２】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバのような計算機システムにケーブルまたはネットワークを介して接続されてもよい、ストレージアレイは、このストレージアレイ内の複数のストレージ（例えば複数のフラッシュストレージデバイス３）を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホストとして機能してもよい。
【００１３】
以下では、サーバのような計算機システムがホスト２として機能する場合を例示して説明する。
【００１４】
ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この内部相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１５】
ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
【００１６】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５１を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１７】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１８】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１９】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
【００２０】
従来型ＳＳＤにおいては、ＮＡＮＤ型フラッシュメモリのブロック／ページの階層構造はＳＳＤ内のフラッシュトランスレーション層（ＦＴＬ）によって隠蔽されている。つまり、従来型ＳＳＤのＦＴＬは、（１）論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための機能、（３）ＮＡＮＤ型フラッシュメモリのガベージコレクション（ＧＣ）を実行する機能、等を有している。論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスとの間のマッピングは、ホストからは見えない。ＮＡＮＤ型フラッシュメモリのブロック／ページ構造もホストからは見えない。
【００２１】
一方、ホストにおいても、一種のアドレス変換（アプリケーションレベルアドレス変換）が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーション用の論理アドレスそれぞれとＳＳＤ用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、ＳＳＤ用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更するための一種のＧＣ（アプリケーションレベルＧＣ）が実行される場合がある。
【００２２】
しかし、ホストおよびＳＳＤがそれぞれアドレス変換テーブルを有するという冗長な構成（ＳＳＤは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する）においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とＳＳＤ側のアドレス変換とを含む２重のアドレス変換は、システム全体のＩ／Ｏ性能を低下させる要因にもなる。
【００２３】
さらに、ホスト側のアプリケーションレベルＧＣは、ＳＳＤへのデータ書き込み量を実際のユーザデータ量の数倍（例えば２倍）程度に増やす要因となる。このようなデータ書き込み量の増加は、ＳＳＤのライトアンプリフィケーションを増加させてはいないが、システム全体のストレージ性能を低下させ、またＳＳＤの寿命も短くする。
【００２４】
そこで、本実施形態では、ＦＴＬの役割はホスト２とフラッシュストレージデバイス３との間で分担される。ホスト２は論理物理アドレス変換テーブルとして機能するルックアップテーブルを管理するが、書き込みに使用すべきブロックおよびページは、ホスト２ではなく、フラッシュストレージデバイス３によって決定することができる。また、ＧＣも、ホスト２ではなく、フラッシュストレージデバイス３によって実行することができる。以下では、ホスト２に移されたＦＴＬ機能をグローバルＦＴＬと称する。
【００２５】
また、フラッシュストレージデバイス３は、書き込み／読み出し速度を上げるために、各々が複数のブロック（複数の物理ブロック）から構成される複数の並列単位（複数のスーパーブロック）を管理する。フラッシュストレージデバイス３は、ある並列単位内の複数のブロックに対する書き込み動作および読み出し動作を並列に実行することができる。
【００２６】
しかし、ＮＡＮＤ型フラッシュメモリダイにはいくつかの不良ブロックが含まれるため、並列度を確保するため並列単位内の各不良ブロックを他のブロックで置き換えることが行われる場合がある。しかし、一つのＮＡＮＤ型フラッシュメモリダイ当たりに含まれる不良ブロックの数が増加すると、置き換えの管理のための情報量が増大する可能性がある。
【００２７】
一つの並列単位に含まれるブロックの数が６４である場合を例にとると、並列単位を示すブロックアドレスから数学的規則で各ブロックのブロックアドレスを生成するケースにおいては、６４個のブロック中の１５番目のブロックをブロックアドレス２０４９のブロックで置き換える場合、１５番目を表現するために少なくとも６ビット、２０４９を表現するために１２ビットが必要である。置き換えるべきブロック数が多い場合にはそれに比例した情報量が必要である。置き換えるべきブロックの数を１６個までとした場合には、１８ｂｉｔ×１６  ＝  ２９４ｂｉｔの情報が、並列単位毎に必要となる。
【００２８】
また、データリード動作においては、置き換え情報を使用して、不良ブロックを示すアドレスを置換先ブロックを示すアドレスに変換するためのアドレス変換を実行することが必要となる。このため、不良ブロックの数が増加すると、置き換え情報の増大に伴ってこのアドレス変換処理に要する時間が増えるので、リードレイテンシが増大する。
【００２９】
そこで、ホスト２からのデータを書き込むための書き込み動作においては、フラッシュストレージデバイス３は、書き込み対象の並列単位内の不良ブロックを避けてこの並列単位内の非不良ブロックの中から書き込み先ブロックを選択し、この書き込み先ブロック内の書き込み先位置を決定する。ホスト２からのデータは、この書き込み先位置に書き込まれる。そして、フラッシュストレージデバイス３は、この書き込み先ブロックおよびこの書き込み先ブロック内の書き込み位置の双方を示す物理アドレスをホスト２に通知する。これにより、ホスト２は、実際にデータが書き込まれたブロックとこのブロック内の書き込み先位置を認識できるので、このデータをリードする必要がある場合には、この物理アドレスを指定するリード要求をフラッシュストレージデバイス３に送信することができる。フラッシュストレージデバイス３は、このリード要求によって指定される物理アドレスに基づいて、上述の選択したブロック内の書き込み先位置からデータをリードすることができる。したがって、フラッシュストレージデバイス３では、アドレス変換処理が不要となり、リードレイテンシを低減することができる。
【００３０】
ホスト２のグローバルＦＴＬは、ストレージサービスを実行する機能、ルックアップテーブル（ＬＵＴ）を管理する機能、ウェアー制御機能、高可用性を実現するための機能、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能、等を有していてもよい。
【００３１】
一方、フラッシュストレージデバイス３は、ローレベルアブストラクション（ＬＬＡ）を実行することができる。ＬＬＡはＮＡＮＤ型フラッシュメモリのアブストラクションのための機能である。ＬＬＡは、データ配置を補助する機能等を含む。データ配置を補助する機能には、ユーザデータの書き込み先位置（ブロックアドレス、このブロック内の位置）を決定する機能、ユーザデータが書き込まれたこの書き込み先位置を示す物理アドレスを上位階層（ホスト２）に通知する機能、ガベージコレクションのためのコピー元ブロックとコピー先ブロックとを決定する機能、有効データのコピー先位置を上位階層（ホスト２）に通知する機能、等を含む。また、ＬＬＡは、フラッシュストレージデバイス３のリソース管理をドメイン（ＱｏＳドメイン）毎に実行するＱｏＳ制御機能も有している。
【００３２】
ＱｏＳ制御機能には、ＱｏＳドメイン毎にアクセス単位（データの粒度）を決める機能が含まれる。アクセス単位は、ホスト２がライト／リードすることが可能な最小データサイズ（データの粒度）を示す。フラッシュストレージデバイス３は単一、あるいは複数のアクセス単位（データの粒度）をサポートしており、ホスト２は、フラッシュストレージデバイス３が複数のアクセス単位をサポートしている場合にはＱｏＳドメイン毎に、使用すべきアクセス単位（データの粒度）をフラッシュストレージデバイス３に指示することができる。
【００３３】
また、ＱｏＳ制御機能には、ＱｏＳドメイン間の性能干渉をできるだけ防ぐための機能が含まれている。この機能は、基本的には、安定したレイテンシを保つための機能である。
【００３４】
これを実現するために、フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリ内を複数の領域（複数のＱｏＳドメイン）に論理的に分割してもよい。一つの領域（一つのＱｏＳドメイン）は一つ以上の並列単位（スーパーブロック）を含む。各並列単位（スーパーブロック）はある一つの領域（ＱｏＳドメイン）のみに属する。
【００３５】
図２は、フラッシュストレージデバイス３とホスト２とを含むシステム全体の階層構造を表している。
【００３６】
ホスト（サーバ）２においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス４０１が実行される。仮想マシンサービス４０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション４０２が実行される。
【００３７】
また、ホスト（サーバ）２においては、複数のユーザアプリケーション４０２に対応する複数のＩ／Ｏサービス４０３が実行される。これらＩ／Ｏサービス４０３には、ＬＢＡベースのブロックＩ／Ｏサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各Ｉ／Ｏサービス４０３は、論理アドレスそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル（ＬＵＴ）を含む。ここで、論理アドレスとは、アクセス対象のデータを識別可能な識別子（タグ）を意味する。この論理アドレスは、論理アドレス空間上の位置を指定する論理ブロックアドレス（ＬＢＡ）であってもよいし、キー・バリュー・ストアのキーであってもよいし、ファイル名のようなファイル識別子であってもよい。
【００３８】
ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。
【００３９】
キー・バリュー・ストアサービスにおいては、論理アドレス（キーのようなタグ）それぞれとこれら論理アドレス（つまり、キーのようなタグ）に対応するデータが格納されているフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。このＬＵＴにおいては、タグと、このタグによって識別されるデータが格納されている物理アドレスと、このデータのデータ長との対応関係が管理されてもよい。
【００４０】
各エンドユーザは、使用すべきアドレッシング方法（ＬＢＡ、キー・バリュー・ストアのキー、ファイル識別子、等）を選択することができる。
【００４１】
これら各ＬＵＴは、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３の物理アドレスそれぞれに変換する。つまり、これら各ＬＵＴは、フラッシュストレージデバイス３用の論理アドレスを物理アドレスに変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合（マージ）されたテーブルである。
【００４２】
ホスト（サーバ）２においては、上述のＱｏＳドメイン毎にＩ／Ｏサービス４０３が存在する。あるＱｏＳドメインに属するＩ／Ｏサービス４０３は、対応するＱｏＳドメイン内のユーザアプリケーション４０２によって使用される論理アドレスそれぞれと対応するＱｏＳドメインに割り当てられた領域の物理アドレスそれぞれとの間のマッピングを管理する。
【００４３】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、ホスト（サーバ）２およびフラッシュストレージデバイス３の各々に存在するＩ／Ｏキュー５００を介して実行される。これらＩ／Ｏキュー５００も、複数のＱｏＳドメインに対応する複数のキューグループに分類されていてもよい。
【００４４】
フラッシュストレージデバイス３は、複数のＱｏＳドメインに対応する複数のライトバッファ（ＷＢ）６０１、複数のＱｏＳドメインに対応する複数のガベージコレクション（ＧＣ）機能６０２、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０３を含む。
【００４５】
図３は、フラッシュストレージデバイス３の構成例を示す。
【００４６】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００４７】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００４８】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００４９】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなフラッシュＩ／Ｏ制御回路１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。
【００５０】
ＮＡＮＤ型フラッシュメモリ５は、複数のＮＡＮＤ型フラッシュメモリダイを含む。コントローラ４は、上述の複数の並列単位（パラレルユニット）を管理する。各並列単位は、異なるＮＡＮＤ型フラッシュメモリダイにそれぞれ属する複数のブロック（複数の物理ブロック）を含むブロックグループであるスーパーブロックによって実現される。コントローラ４は、各並列単位（スーパーブロック）に含まれる複数のブロックに対する書き込み動作、読み出し動作を並列に実行することができる。複数の並列単位（スーパーブロック）の各々は、固有のスーパーブロックアドレス（第１のブロックアドレス）を有する。各不揮発性メモリダイ内の複数のブロックの各々は固有のブロックアドレス（第２のブロックアドレス）を有する。各並列単位（スーパーブロック）に含まれるべきブロックそれぞれのブロックアドレスは、各並列単位のスーパーブロックから数学的規則に基づいて定められる。
【００５１】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、フラッシュＩ／Ｏ制御回路１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、フラッシュＩ／Ｏ制御回路１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００５２】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってよい。ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
【００５３】
ＣＰＵ１２は、ホストインタフェース１１、フラッシュＩ／Ｏ制御回路１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００５４】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３として機能することができる。これらライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３においては、図２に示すシステム構成を実現するためのアプリケーションプログラムインタフェース（ＡＰＩ）が実装されている。
【００５５】
ライト動作制御部２１は、書き込むべきデータ（ユーザデータ）を識別するための論理アドレス（タグ）を指定するライト要求（ライトコマンド）をホスト２から受信する。ライトコマンドを受信した場合、ライト動作制御部２１は、まず、不良情報管理テーブル３３を参照して、書き込み対象の並列単位（スーパーブロック）に含まれる不良でないブロック（非不良ブロック）の中から一つのブロックを書き込み先ブロックとして選択する。不良情報管理テーブル３３は、各並列単位（スーパーブロック）に含まれるブロック毎に使用可能または使用不可能を示す少なくとも１ビットの情報を保持する不良情報を保持する。各スーパーブロックに対応する不良情報は、各スーパーブロックに含まれるブロックの数と同数のビットを含むビットマップであってもよい。ライト動作制御部２１は、書き込み対象の並列単位（スーパーブロック）に対応する不良情報（不良情報管理テーブル３３）を参照することにより、書き込み対象の並列単位内の各ブロックが不良ブロックまたは非不良ブロックのいずれであるかを認識することができる。
【００５６】
なお、不良情報は上述のビットマップに限定されず、例えば、各ブロックの消去回数（プログラム／イレーズサイクルの数）を示す情報を不良情報として代用してもよい。この場合、コントローラ４は、ある閾値以上の消去回数を有するブロックを不良ブロックであると判定してもよい。
【００５７】
不良ブロックは使用不可能なブロックであり、「バッドブロック」としても参照される。不良情報によって示される不良ブロック（バッドブロック）には、ＮＡＮＤ型フラッシュメモリの製造過程で発生する不良ブロック（プライマリー不良ブロック）が含まれてもよいし、フラッシュストレージデバイス３の使用開始後に発生する不良ブロック（グロウン不良ブロック）が含まれてもよいし、これらプライマリー不良ブロックとグロウン不良ブロックの双方が含まれてもよい。
【００５８】
ライト動作制御部２１は、選択した書き込み先ブロック内の書き込み先位置（ページ、およびこのページ内の位置）を決定する。次いで、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部２１は、ホスト２からのデータのみならず、このデータとこのデータの論理アドレス（タグ）の双方を書き込み先ブロックに書き込むことができる。
【００５９】
そして、ライト動作制御部２１は、指定された論理アドレス（タグ）と、書き込み先ブロックおよび書き込み先位置の双方を示す物理アドレスとをホスト２に返す。
【００６０】
この場合、この物理アドレスは、ダイ識別子と、物理ブロックアドレス（第２のブロックアドレス）と、オフセットとによって表されてもよい。ダイ識別子は、各不揮発性メモリダイに固有の識別子である。この物理アドレスに含まれるダイ識別子は、書き込み先ブロックが属する不揮発性メモリダイのダイ識別子を示す。物理ブロックアドレスは、各不揮発性メモリダイ内の複数のブロックそれぞれを識別するためのブロックアドレス（ブロック番号）である。この物理アドレスに含まれるブロックアドレスは、この書き込み先ブロックのブロックアドレスを示す。オフセットは、ブロック内オフセットである。この物理アドレスに含まれるオフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット（オフセット値）を示す。このオフセットは、書き込み先位置が属するページのページアドレスと、書き込み先位置に対応するページ内オフセットとによって表されてもよい。
【００６１】
あるいは、この物理アドレスは、スーパーブロックアドレス（第１のブロックアドレス）と、オフセットとによって表されてもよい。スーパーブロックアドレスは各スーパーブロックに固有のブロックアドレスである。この物理アドレスに含まれるスーパーブロックアドレスは、書き込み対象のスーパーブロックのスーパーブロックアドレスを示す。オフセットは、書き込み対象のスーパーブロックの先頭から書き込み先位置までのオフセット（オフセット値）を示す。このオフセットは、書き込み先ブロックが属する不揮発性メモリダイのダイ識別子と、書き込み先位置が属するページのページアドレスと、書き込み先位置に対応するページ内オフセットとによって表されてもよい。
【００６２】
物理アドレスは「フラッシュアドレス」としても参照される。
【００６３】
なお、ライトコマンドは、論理アドレス（タグ）を指定するだけでなく、スーパーブロックアドレスを指定してもよい。スーパーブロックアドレスを指定するライトコマンドを受信した場合、ライト動作制御部２１は、複数のスーパーブロックの中から、ライトコマンドによって指定されたスーパーブロックアドレスを有するスーパーブロックを書き込み対象の並列単位（書き込み先スーパーブロック）として選択する。
【００６４】
リード動作制御部２２は、物理アドレス（リード対象のブロックおよびこのブロック内のリード対象の位置を示す）を指定するリード要求（リードコマンド）をホスト２から受信した場合、この物理アドレスに基づいて、リード対象のブロック内のリード対象の位置からデータをリードする。
【００６５】
ＧＣ動作制御部２３は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクションを実行する場合、このガベージコレクションのためのコピー元ブロック（ＧＣソースブロック）およびコピー先ブロック（ＧＣデスティネーションブロック）をＮＡＮＤ型フラッシュメモリ５内の多数のブロックから選択する。これらＧＣソースブロックおよびＧＣデスティネーションブロックの各々はスーパーブロックであってもよいし、物理ブロックであってもよい。
【００６６】
ＧＣ動作制御部２３は、通常、複数のコピー元ブロック（ＧＣソースブロック）と、一つ以上のコピー先ブロック（ＧＣデスティネーションブロック）とを選択する。コピー元ブロック（ＧＣソースブロック）を選択するための条件（ＧＣポリシー）は、ホスト２によって指定されてもよい。例えば、有効データ量が最も少ないブロックをコピー元ブロック（ＧＣソースブロック）として優先的に選択するというＧＣポリシーが使用されてもよいし、別のＧＣポリシーが使用されてもよい。このように、コピー元ブロック（ＧＣソースブロック）およびコピー先ブロック（ＧＣデスティネーションブロック）の選択は、ホスト２ではなく、フラッシュストレージデバイス３のコントローラ４（ＧＣ動作制御部２３）によって実行される。コントローラ４は、各ブロック管理テーブルを使用して、各ブロックの有効データ量を管理してもよい。
【００６７】
有効データ／無効データの管理は、ブロック管理テーブル３２を使用して実行されてもよい。このブロック管理テーブル３２は、例えば、スーパーブロック毎に存在してもよい。あるスーパーブロックに対応するブロック管理テーブル３２においては、このスーパーブロック内の各ブロックのデータそれぞれの有効／無効を示すビットマップフラグが格納されている。ここで、有効データとは、ＬＵＴから参照されているデータ（すなわち論理アドレスから最新のデータとして紐付けられているデータ）であって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。
【００６８】
ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内に格納されている有効データを書き込むべきコピー先ブロック（ＧＣデスティネーションブロック）内の位置（コピー先位置）を決定し、有効データをコピー先ブロック（ＧＣデスティネーションブロック）のこの決定された位置（コピー先位置）にコピーする。この場合、ＧＣ動作制御部２３は、有効データとこの有効データの論理アドレスの双方を、コピー先ブロック（ＧＣデスティネーションブロック）にコピーしてもよい。ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）に対応するブロック管理テーブル３２を参照することによってＧＣソースブロック内の有効データを特定してもよい。あるいは、別の実施形態では、ホスト２が、ＧＣソースブロックとＧＣデスティネーションブロックとを指定してもよい。これらＧＣソースブロックとＧＣデスティネーションブロックはスーパーブロックであってもよいし、物理ブロックであってもよい。
【００６９】
そして、ＧＣ動作制御部２３は、コピーされた有効データの論理アドレス（タグ）と、
コピーされた有効データの旧物理記憶位置を示す物理アドレスと、コピーされた有効データの新物理記憶位置を示す物理アドレスとをホスト２に通知する。
【００７０】
本実施形態では、上述したように、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）とホスト２からの論理アドレス（タグ）の双方を書き込み先ブロックに書き込むことができる。このため、ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内の各データの論理アドレスをこのコピー元ブロック（ＧＣソースブロック）から容易に取得することができるので、コピーされた有効データの論理アドレスをホスト２に容易に通知することができる。
【００７１】
フラッシュＩ／Ｏ制御回路１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、リードバッファ（ＲＢ）３０、ライトバッファ（ＷＢ）３１、ブロック管理テーブル３２、不良情報管理テーブル３３の格納のために使用される。なお、これらリードバッファ（ＲＢ）３０、ライトバッファ（ＷＢ）３１、ブロック管理テーブル３２、不良情報管理テーブル３３は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。
【００７２】
次に、フラッシュストレージデバイス３とホスト２との間のソフトウェアインタフェースとして使用されるＡＰＩについて説明する。本実施形態では、このＡＰＩは、２種類のＡＰＩ（イン・ドライブ・ＧＣ（Ｉｎ−Ｄｒｉｖｅ−ＧＣ）ＡＰＩ、スーパーブロックＡＰＩに大別される。
【００７３】
Ｉｎ−Ｄｒｉｖｅ−ＧＣ−ＡＰＩは、フラッシュストレージデバイス３が単独でガベージコレクション（ＧＣ）を実行することを前提としたコマンド群を含む。これらコマンド群には、ベーシックコマンドとして、ライトコマンド（Write without Physical Address）、リードコマンド（Read with Physical Address）、トリムコマンド（Trim）、デュプリケーションコマンド（Duplicate）、アドレス更新通知（Address Update Notification (Device Initiated)）、強制ＧＣコマンド（Forced Garbage-Collection）、ＧＣ制御コマンド（Garbage Collection Control）、等が含まれてもよい。
【００７４】
ライトコマンド（Write without Physical Address）は、書き込むべきユーザデータを識別する論理アドレス（タグ）を指定し、書き込み先の物理アドレスを指定しないライトコマンドである。
【００７５】
リードコマンド（Read with Physical Address）は、リード対象の物理記憶位置（物理ブロック、物理ブロック内のリード対象位置）を示す物理アドレスを指定するリードコマンドである。
【００７６】
トリムコマンド（Trim）は、無効にすべきデータの物理アドレスを指定し、この物理アドレスに対応するデータを無効化すべきことをストレージデバイス３に指示するコマンドである。なお、ホスト２が、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能をサポートしている場合には、トリムコマンド（Trim）は、あるデータを参照している論理アドレスの数を示す参照カウントを減らすべきことをストレージデバイス３に指示するコマンドとして使用される。デュプリケーションコマンド（Duplicate）は、あるデータを参照している論理アドレスの数を示す参照カウントを増やすべきことをストレージデバイス３に指示するコマンドとして使用される。
【００７７】
アドレス更新通知（Address Update Notification (Device Initiated)）は、フラッシュストレージデバイス３によってＧＣのためのデータコピー動作が実行された後に、コピーされたデータ（有効データ）の論理アドレス、この有効データの旧物理記憶位置、この有効データの新物理記憶位置をフラッシュストレージデバイス３がホスト２に通知するために使用される。
【００７８】
強制ＧＣコマンド（Forced Garbage-Collection）は、フラッシュストレージデバイス３にＧＣを強制的に実行させるためのコマンドである。
【００７９】
ＧＣ制御コマンド（Garbage Collection Control）は、ＧＣを開始するための条件等をフラッシュストレージデバイス３に指示するためのコマンドである。
【００８０】
図４は、Ｉｎ−Ｄｒｉｖｅ−ＧＣ−ＡＰＩ用の各コマンドのパラメータと返値の例を示している。
【００８１】
図４において、「Host：」のラベルに後続して記載されている内容は対応するコマンドによって指定されるパラメータであり、「Device：」のラベルに後続して記載されている内容はこのコマンドに対するレスポンスに含まれるパラメータ（返値）である。
【００８２】
ライトコマンド（Write without Physical Address）は、ユーザアドレス、長さ、データ、ＱｏＳドメイン識別子を含んでもよい。ユーザアドレスは、書き込むべきデータを識別するための論理アドレス（タグ）である。ユーザアドレスの例には、ＬＢＡ、キー・バリュー・ストアのキー、ファイル識別子、等が含まれる。
【００８３】
ライトコマンドに対するレスポンスは、ステータス（成功／失敗）、ユーザアドレス、フラッシュアドレス（物理アドレス）、長さ、残り書き込み可能データ量（distance-to-block-boundary）を含んでもよい。残り書き込み可能データ量（distance-to-block-boundary）はオプショナルな返値であり、データが書き込まれたスーパーブロックに書き込み可能な残りデータ量を示す。残り書き込み可能データ量（distance-to-block-boundary）は、上述のデータの粒度の倍数で表されてもよい。データは不良ブロックの前後の２つの非不良ブロックに跨がって書き込まれる場合がある。このため、ライトコマンドに対するレスポンスは、各セットがユーザアドレス、フラッシュアドレス（物理アドレス）、長さを含む複数のセットを含んでもよい。
【００８４】
リードコマンド（Read with Physical Address）は、フラッシュアドレス、長さを含んでもよい。リードコマンド（Read with Physical Address）は、各セットがフラッシュアドレス、長さを含む複数のセットを含んでもよい。リードコマンドに対するレスポンスは、ステータス、ユーザアドレス、長さ、データを含んでもよい。リードコマンドに対するレスポンスは、各セットがユーザアドレス、長さを含む複数のセットを含んでもよい、
トリムコマンド（Trim）／デュプリケーションコマンド（Duplicate）は、フラッシュアドレス、長さ、参照カウントの増減量（reference-count-to-add-or-subtract）を含んでもよい。トリムコマンド（Trim）／デュプリケーションコマンド（Duplicate）は、各セットがフラッシュアドレス、長さ、参照カウントの増減量を含む複数のセットを含んでもよい。
【００８５】
アドレス更新通知（Address Update Notification (Device Initiated)）は、フラッシュストレージデバイス３によってホスト２に通知される出力パラメータとして、ユーザアドレス、旧フラッシュアドレス、新フラッシュアドレス、参照カウント、長さを含んでもよい。例えば、フラッシュストレージデバイス３は旧物理記憶位置から新物理記憶位置にデータをコピーした後、アドレス更新通知（Address Update Notification (Device Initiated)）をホスト２に送信する。このアドレス更新通知（Address Update Notification (Device Initiated)）には、そのデータのユーザアドレス、そのデータの旧物理記憶位置を示す旧フラッシュアドレス、そのデータの新物理記憶位置を示す新フラッシュアドレス、このデータを参照している論理アドレスの数を示す参照カウント、このデータの長さが含まれてもよい。アドレス更新通知（Address Update Notification (Device Initiated)）は、各セットがユーザアドレス、旧フラッシュアドレス、新フラッシュアドレス、参照カウント、長さを含む複数のセットを含んでもよい。
【００８６】
強制ＧＣコマンド（Forced Garbage-Collection）は、ＱｏＳドメイン識別子、ソーススーパーブロックアドレス（オプショナル）を含んでもよい。
【００８７】
ＧＣ制御コマンド（Garbage Collection Control）は、最大データ数（maximum-number-of-data）、ＱｏＳドメイン識別子、ＧＣの方法（ポリシー）を含んでいてもよい。
【００８８】
スーパーブロックＡＰＩは、ホスト２が論理アドレス（タグ）とスーパーブロックを指定し、フラッシュストレージデバイスがこのスーパーブロック内の書き込み先ブロックとこの書き込み先ブロック内の書き込み先位置を決定することを前提としたコマンド群を含む。これらコマンド群には、ベーシックコマンドとして、ライトコマンド（Write without Page Address）、リードコマンド（Read with Physical Address）、スーパーブロック解放コマンド（Release Super Block to Unused Super Block Pool）、スーパーブロック割り当てコマンド（Allocate Super Block and Open Write Buffer with Block Healing）、クローズ・スーパーブロックコマンド（Close Super Block and Write Buffer）、スーパーブロック情報コマンド（Super Block Information）、非コピーデータ設定コマンド（Set Data not to be Copied）、データコピーコマンド（Data Copy without Page Address）、等を含む。
【００８９】
ライトコマンド（Write without Page Address）は、論理アドレス（タグ）とスーパーブロックアドレスを指定するライトコマンドである。リードコマンドはＩｎ−Ｄｒｉｖｅ−ＧＣ−ＡＰＩ用のリードコマンドと同じである。スーパーブロック解放コマンド（Release Super Block to Unused Super Block Pool）は、既に割り当てられているスーパーブロックを解放するためのコマンドである。スーパーブロック割り当てコマンド（Allocate Super Block and Open Write Buffer with Block Healing）は、スーパーブロックの割り当てを要求するコマンドである。スーパーブロック割り当てコマンド（Allocate Super Block and Open Write Buffer with Block Healing）は、並列アクセス可能なブロックの数を示す並列数を指定するパラメータを含んでいてもよい。スーパーブロック情報コマンド（Super Block Information）は、特定のスーパーブロックに関する情報を取得するためのコマンドである。非コピーデータ設定コマンド（Set Data not to be Copied）は、スーパーブロック内のコピーすべきでないデータを指定するためのコマンドである。データコピーコマンド（Data Copy without Page Address）は、ＧＣのためにデータをコピーするためのコマンドである。これらコマンドのパラメータと返値の例は図５に示されている。図５においても、「Host：」のラベルに後続して記載されている内容は対応するコマンドによって指定されるパラメータを示し、「Device：」のラベルに後続して記載されている内容はこのコマンドに対するレスポンスに含まれるパラメータ（返値）を示す。
【００９０】
図６は、フラッシュＩ／Ｏ制御回路１３と複数のＮＡＮＤ型フラッシュメモリダイとの関係を示す。
【００９１】
ＮＡＮＤ型フラッシュメモリ５は、図６に示すように、複数のＮＡＮＤ型フラッシュメモリダイを含む。各ＮＡＮＤ型フラッシュメモリダイは、複数のブロック（物理ブロック）ＢＬＫを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、最小の並列動作単位として機能する。ＮＡＮＤ型フラッシュメモリダイは、「ＮＡＮＤ型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図６においては、フラッシュＩ／Ｏ制御回路１３に１６個のチャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５が接続されており、これらチャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５の各々に、同数（例えばチャンネル当たり１個のダイ）のＮＡＮＤ型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。
【００９２】
コントローラ４は、チャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５を介してＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５を制御する。コントローラ４は、チャンネルＣｈ０、Ｃｈ１、…Ｃｈ１５を同時に駆動することができる。
【００９３】
図６の構成例においては、最大１６個のＮＡＮＤ型フラッシュメモリダイを並列動作させることができる。
【００９４】
本実施形態では、コントローラ４は、各々が複数のブロックＢＬＫから構成される複数の並列単位（スーパーブロック）を管理する。スーパーブロックは、これに限定されないが、異なるチャンネルに接続されたＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５から一つずつ選択される計１６個のブロックＢＬＫを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１５に対応する３２個のプレーンから一つずつ選択される計３２個のブロックＢＬＫを含んでいてもよい。
【００９５】
図７には、一つのスーパーブロックＳＢが、ＮＡＮＤ型フラッシュメモリダイ＃０〜＃１４から一つずつ選択される計１６個のブロックＢＬＫから構成される場合が例示されている。スーパーブロックＳＢに対する書き込み動作においては、データは、ＮＡＮＤ型フラッシュメモリダイ＃０に属するブロックＢＬＫのページＰ０、ＮＡＮＤ型フラッシュメモリダイ＃１に属するブロックＢＬＫのページＰ０、…ＮＡＮＤ型フラッシュメモリダイ＃１５に属するブロックＢＬＫのページＰ０、ＮＡＮＤ型フラッシュメモリダイ＃０に属するブロックＢＬＫのページＰ１、ＮＡＮＤ型フラッシュメモリダイ＃２に属するブロックＢＬＫのページＰ１、…ＮＡＮＤ型フラッシュメモリダイ＃１５に属するブロックＢＬＫのページＰ１、…という順序で書き込まれる。
【００９６】
図８は、スーパーブロックＳＢのブロックアドレス（スーパーブロックアドレス）とこのスーパーブロックＳＢを構成する複数のブロック（物理ブロック）それぞれのブロックアドレスとの関係を示す。
【００９７】
スーパーブロックＳＢに含まれるべきブロック（物理ブロック）それぞれのブロックアドレスは、このスーパーブロックＳＢのブロックアドレス（スーパーブロックアドレス）からある数学的規則に基づいて定められる。
【００９８】
例えば、スーパーブロックＳＢのスーパーブロックアドレスに所定の四則演算を施すことによって得られる値を、このスーパーブロックＳＢに含まれるべき各ブロックのブロックアドレスとして決定してもよい。あるいは、スーパーブロックＳＢのスーパーブロックアドレスを表す複数ビットに所定のビット反転または所定のビットシフトを施すことによって得られる値を、このスーパーブロックＳＢに含まれるべき各ブロックのブロックアドレスとして決定してもよい。
【００９９】
図８では、図示の簡単化のために、スーパーブロックＳＢのスーパーブロックアドレスと同じブロックアドレスを有するブロックそれぞれによってこのスーパーブロックＳＢが構成される場合が例示されている。
【０１００】
すなわち、スーパーブロックアドレス０を有するスーパーブロックＳＢ０は、ＮＡＮＤ型フラッシュメモリダイ＃０（Ｄｉｅ＃０）に含まれるブロックアドレス０のブロックＢＬＫ０、ＮＡＮＤ型フラッシュメモリダイ＃１（Ｄｉｅ＃１）に含まれるブロックアドレス０のブロックＢＬＫ０、ＮＡＮＤ型フラッシュメモリダイ＃２（Ｄｉｅ＃２）に含まれるブロックアドレス０のブロックＢＬＫ０、…、ＮＡＮＤ型フラッシュメモリダイ＃１５（Ｄｉｅ＃１５）に含まれるブロックアドレス０のブロックＢＬＫ０によって構成される。
【０１０１】
同様に、スーパーブロックアドレス１０００を有するスーパーブロックＳＢ１０００は、ＮＡＮＤ型フラッシュメモリダイ＃０（Ｄｉｅ＃０）に含まれるブロックアドレス１０００のブロックＢＬＫ１０００、ＮＡＮＤ型フラッシュメモリダイ＃１（Ｄｉｅ＃１）に含まれるブロックアドレス１０００のブロックＢＬＫ１０００、ＮＡＮＤ型フラッシュメモリダイ＃２（Ｄｉｅ＃２）に含まれるブロックアドレス１０００のブロックＢＬＫ１０００、…、ＮＡＮＤ型フラッシュメモリダイ＃１５（Ｄｉｅ＃１５）に含まれるブロックアドレス１０００のブロックＢＬＫ１０００によって構成される。
【０１０２】
各Ｄｉｅには、幾つかの不良ブロックが含まれる場合がある。通常、不良ブロックの数はＤｉｅ毎に異なる。
【０１０３】
図９においては、各Ｄｉｅに含まれる各不良ブロックを同じＤｉｅに属する他のブロックで置き換える処理が示されている。
【０１０４】
図９においては、各Ｄｉｅが２０４８個のブロックＢＬＫを含んでおり、Ｄｉｅ＃０が１００個の不良ブロックを含み、Ｄｉｅ＃１が不良ブロックを含まず、Ｄｉｅ＃２が２０個の不良ブロックを含み、そしてＤｉｅ＃１５が３０個の不良ブロックを含む場合が想定されている。
【０１０５】
Ｄｉｅ＃０においては、例えば、不良ブロックＢＬＫ１はＤｉｅ＃０の非不良ブロックＢＬＫ１９４８で置換され、不良ブロックＢＬＫ５はＤｉｅ＃０の非不良ブロックＢＬＫ１９４９で置換される。このようにして、Ｄｉｅ＃０の先頭から合計１９４８（＝２０４８−１００）個のブロックのみが利用可能状態となり、Ｄｉｅ＃０の残りのブロックＢＬＫ１９４８〜ＢＬＫ２０４７は利用できない。
【０１０６】
このため、たとえＤｉｅ＃１が不良ブロックを含まない場合であっても、Ｄｉｅ＃１のブロックＢＬＫ１９４８〜ＢＬＫ２０４７はスーパーブロックの構築のために利用できなくなる。よって、構築可能なスーパーブロックＳＢの数は、最も不良ブロックの多いＤｉｅ＃０内の非不良ブロックの数までに制限されてしまう。
【０１０７】
図１０は、各不良ブロックを置換することなく、あるスーパーブロックＳＢ内の非不良ブロックの中から書き込み先ブロックを選択する動作を示す。
【０１０８】
図１０では、図示の簡単化のために、あるスーパーブロック（ここでは、スーパーブロックＳＢ５）が、８個のブロック、つまり、Ｄｉｅ＃０内のブロックＢＬＫ５、Ｄｉｅ＃１内のブロックＢＬＫ５、Ｄｉｅ＃２内のブロックＢＬＫ５、Ｄｉｅ＃３内のブロックＢＬＫ５、Ｄｉｅ＃４内のブロックＢＬＫ５、Ｄｉｅ＃５内のブロックＢＬＫ５、Ｄｉｅ＃６内のブロックＢＬＫ５、およびＤｉｅ＃７内のブロックＢＬＫ５によって構成されている場合が例示されている。
【０１０９】
本実施形態では、各スーパーブロックに対応する不良情報管理テーブル３３が設けられている。スーパーブロックＳＢ５用の不良情報管理テーブル３３においては、ブロック毎に使用可能または使用不可能を示す１ビットの情報を含む不良情報（ビットマップ）が保持されている。不良情報（ビットマップ）においては、“０”は非不良ブロックを表し、“１”は不良ブロックを表す。
【０１１０】
図１０では、Ｄｉｅ＃１内のブロックＢＬＫ５、Ｄｉｅ＃４内のブロックＢＬＫ５、Ｄｉｅ＃５内のブロックＢＬＫ５が不良ブロックである場合が想定されている。
【０１１１】
コントローラ４は、Ｄｉｅ＃１内のブロックＢＬＫ５をＤｉｅ＃１内の他のブロックで置き換える処理、Ｄｉｅ＃４内のブロックＢＬＫ５をＤｉｅ＃４内の他のブロックで置き換える処理、Ｄｉｅ＃５内のブロックＢＬＫ５をＤｉｅ＃５内の他のブロックで置き換える処理を実行しない。代わりに、コントローラ４は、スーパーブロックＳＢ５用の不良情報管理テーブル３３を参照して、スーパーブロックＳＢ５に含まれる非不良ブロック（Ｂここでは、Ｄｉｅ＃０内のブロックＢＬＫ５、Ｄｉｅ＃２内のブロックＢＬＫ５、Ｄｉｅ＃３内のブロックＢＬＫ５、Ｄｉｅ＃６内のブロックＢＬＫ５、Ｄｉｅ＃７内のブロックＢＬＫ５）の中から一つのブロックを書き込み先ブロックとして選択する。コントローラ４は、この書き込み先ブロック内の書き込み先位置を決定し、ホスト２からのライトデータをこの書き込み先ブロック内の書き込み先位置に書き込む。そして、コントローラ４は、この書き込み先ブロックおよびこの書き込み先位置の双方を示す物理アドレスをホスト２に通知する。
【０１１２】
これにより、ホスト２は、実際にライトデータが書き込まれたブロック（書き込み先ブロック）とこのブロック内の書き込み先位置を認識できるので、このデータをリードする必要がある場合には、この通知された物理アドレスを指定するリード要求（リードコマンド）をフラッシュストレージデバイス３に送信することができる。つまり、まず、ホスト２は、書き込むべきデータを識別する論理アドレス（タグ）を含むライト要求（ライトコマンド）をフラッシュストレージデバイス３に送信する。ホスト２は、不良ブロックを除くブロックの中から書き込み先ブロックとして選択されたブロックおよびこのブロック内の書き込み先位置（物理記憶位置）の双方を示す物理アドレスと、このデータの論理アドレス（タグ）とをフラッシュストレージデバイス３から受信する。そして、ホスト２は、論理アドレス（タグ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するホスト２上のルックアップテーブル（ＬＵＴ）を更新して、このデータを識別する論理アドレス（タグ）に、受信した物理アドレスをマッピングする。このデータをリードすることが必要となった場合、ホスト２は、ホスト２上のルックアップテーブル（ＬＵＴ）を参照して、このデータの論理アドレス（タグ）にマッピングされている物理アドレスを取得し、取得した物理アドレスを指定するリード要求（リードコマンド）をフラッシュストレージデバイス３に送信する。
【０１１３】
このように、本実施形態では、書き込み対象のスーパーブロック内の不良ブロックをこの不良ブロックが属するＤｉｅ内の他のブロックで置換することなく、このスーパーブロックに対するデータ書き込みおよび読み出し動作を正常に実行することができる。よって、たとえ不良ブロックの数が増えても、大量の置き換え情報を管理する必要はない。また、置換処理のためのアドレス変換処理も不要であるので、リードレイテンシを低減することができる。さらに、基本的には、各Ｄｉｅに属するブロックの数と同数のスーパーブロックを構築することができるので、たとえ不良ブロックの数が増えても、ほとんど全ての非不良ブロックを利用することが可能となる。
【０１１４】
図１１は、フラッシュストレージデバイス３に適用されるライトコマンド（Write without Physical Address）を示す。
【０１１５】
このライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、上述したように、コマンドＩＤ、ＱｏＳドメインＩＤ、ユーザアドレス、長さ、等を含んでもよい。
【０１１６】
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
【０１１７】
ＱｏＳドメインＩＤは、データが書き込まれるべきＱｏＳドメインを一意に識別可能な識別子である。あるエンドユーザからのライト要求に応じてホスト２から送信されるライトコマンドは、このエンドユーザに対応するＱｏＳドメインを指定するＱｏＳドメインＩＤを含んでもよい。ネームスペースＩＤがＱｏＳドメインＩＤとして扱われてもよい。
【０１１８】
ユーザアドレスは、データを識別する論理アドレス（タグ）であり、例えば、ＬＢＡ、キー、ファイル識別子がこれに相当する。
【０１１９】
長さは、書き込まれるべきライトデータの長さを示す。長さは、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１２０】
図１２は、図１１のライトコマンドに対するレスポンスを示す。
【０１２１】
このレスポンスは、ユーザアドレス、フラッシュアドレス、長さ、残り書き込み可能データ量（ｄｉｓｔａｎｃｅ−ｔｏ−ｂｌｏｃｋ−ｂｏｕｎｄａｒｙ）を含む。
【０１２２】
ユーザアドレスは、図１１のライトコマンドに含まれていたユーザアドレスである。
【０１２３】
フラッシュアドレスは、図１１のライトコマンドに応じてデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置の物理アドレスを示す。
【０１２４】
本実施形態では、この物理アドレスは、例えば、ダイ識別子と、ブロックアドレスと、オフセット（ブロック内オフセット）との組み合わせ、または、スーパーブロックアドレスと、オフセット（スーパーブロック内のオフセット）との組み合わせによって指定される。
【０１２５】
長さは、書き込まれたライトデータの長さを示す。長さは、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１２６】
残り書き込み可能データ量（ｄｉｓｔａｎｃｅ−ｔｏ−ｂｌｏｃｋ−ｂｏｕｎｄａｒｙ）は、データ書き込みを行ったスーパーブロックに対してさらに書き込むことが可能なデータ量を示す。
【０１２７】
図１３は、フラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０１２８】
このＴｒｉｍコマンドは、コマンドＩＤ、フラッシュアドレス、長さ、参照カウントの減少量（reference-count-to- subtract）を含む。
【０１２９】
コマンドＩＤはこのコマンドがＴｒｉｍコマンドであることを示すＩＤ（コマンドコード）であり、ＴｒｉｍコマンドにはＴｒｉｍコマンド用のコマンドＩＤが含まれる。
【０１３０】
フラッシュアドレスは、無効化すべきデータ（参照カウントを減らすべきデータ）が格納されている最初の物理記憶位置を示す。本実施形態では、このフラッシュアドレスは、ダイ識別子と、ブロックアドレスと、オフセット（ブロック内オフセット）との組み合わせ、または、スーパーブロックアドレスと、オフセット（スーパーブロック内のオフセット）との組み合わせによって指定される。
【０１３１】
長さは、無効化すべきデータ（参照カウントを減らすべきデータ）の長さを示す。この長さ（データ長）は、バイトによって指定されてもよい。
【０１３２】
コントローラ４は、複数のスーパーブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）をブロック管理テーブル３２を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すフラッシュアドレスを含むＴｒｉｍコマンドをホスト２から受信した場合、コントローラ４は、ブロック管理テーブル３２を更新して、Ｔｒｉｍコマンドに含まれるフラッシュアドレスに対応する物理記憶位置のデータに対応するフラグ（ビットマップフラグ）を無効を示す値に変更する。
【０１３３】
重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能をサポートするケースにおいては、ブロック管理テーブル３２では、複数のスーパーブロックの各々に含まれるデータに対応する参照カウントが管理される。参照カウントの減少量は、参照カウントを減らすべき量を示す。
【０１３４】
次に、図１４を参照して、不良ブロックを有するスーパーブロックにデータを書き込む動作について説明する。
【０１３５】
ここでは、図示を簡単化するために、ある一つのスーパーブロックＳＢ０が４つのブロックＢＬＫ０（Ｄｉｅ＃０）、ＢＬＫ０（Ｄｉｅ＃１）、ＢＬＫ０（Ｄｉｅ＃２）、ＢＬＫ０（Ｄｉｅ＃３）から構成され、その中でＢＬＫ０（Ｄｉｅ＃２）が不良ブロックであることが想定されている。
【０１３６】
コントローラ４は、不良ブロックを避けるように、ブロックＢＬＫ０（Ｄｉｅ＃０）のページ０、ブロックＢＬＫ０（Ｄｉｅ＃１）のページ０、ブロックＢＬＫ０（Ｄｉｅ＃３）のページ０、ブロックＢＬＫ０（Ｄｉｅ＃０）のページ１、ブロックＢＬＫ０（Ｄｉｅ＃１）のページ１、ブロックＢＬＫ０（Ｄｉｅ＃３）のページ１、…という順序でデータを書き込む。
【０１３７】
ページサイズが１６Ｋバイト（１６ＫＢ）であり、データの粒度が４Ｋバイト（４ＫＢ）である場合には、最初の１６Ｋバイトデータ（Ｄ１〜Ｄ４）は、ブロックＢＬＫ０（Ｄｉｅ＃０）のページ０に書き込まれる。続く１６Ｋバイトデータ（Ｄ５〜Ｄ８）は、ブロックＢＬＫ０（Ｄｉｅ＃１）のページ０に書き込まれる。ＢＬＫ０（Ｄｉｅ＃２）に対する書き込みはスキップされ、続く１６Ｋバイトデータ（Ｄ９〜Ｄ１２）は、ブロックＢＬＫ０（Ｄｉｅ＃３）のページ０に書き込まれる。
【０１３８】
図１５は、図１２のレスポンスに含まれる物理アドレスの構成例を示す。
【０１３９】
物理アドレスは、図１５の上部に示すように、書き込み先ブロックとして選択したブロックが属するダイのダイ識別子と、その選択したブロックに対応するブロックアドレスと、その選択したブロックの先頭から書き込み先位置までのオフセットとから構成される。選択したブロックの先頭から書き込み先位置までのオフセットは、ページアドレスとページ内オフセットとを含む。
【０１４０】
または、図１５の下部に示すように、物理アドレスは、書き込み先ブロックが属するスーパーブロックに対応するブロックアドレス（スーパーブロックアドレス）と、スーパーブロックの先頭から書き込み先位置までのオフセットとから構成される。スーパーブロックの先頭から書き込み先位置までのオフセットは、ダイ識別子、ページアドレス、ページ内オフセットを含む。
【０１４１】
図１６は、スーパーブロックのスーパーブロックアドレス（第１のブロックアドレス）とこのスーパーブロックに含まれる各ブロックのブロックアドレス（第２のブロックアドレス）との関係を示す。
【０１４２】
説明を簡単にするために、スーパーブロックＳＢ０、ＳＢ１、ＳＢ２は、それぞれ４つのブロックから構成されている場合を想定する。
【０１４３】
スーパーブロックＳＢ０は、ブロック８０、ブロック８１、ブロック８２、およびブロック８３を含む。これらブロック８０、ブロック８１、ブロック８２、およびブロック８３の各々は、スーパーブロックＳＢ０のスーパーブロックアドレス（第１のブロックアドレス）から数学的規則に基づいて定められるブロックアドレス（第２のブロックアドレス）を含む。ブロック８１が不良ブロックである場合には、ホスト２からデータは、ブロック８０、ブロック８２、ブロック８３から選択される書き込み先ブロックに書き込まれる。このため、不良ブロック８１の第２のブロックアドレス（不良ブロック８１が属するダイのダイ識別子）はホスト２にはリターンされない。
【０１４４】
スーパーブロックＳＢ１は、ブロック８４、ブロック８５、ブロック８６、およびブロック８７を含む。これらブロック８４、ブロック８５、ブロック８６、およびブロック８７の各々は、スーパーブロックＳＢ１のスーパーブロックアドレス（第１のブロックアドレス）から数学的規則に基づいて定められるブロックアドレス（第２のブロックアドレス）を含む。ブロック８６およびブロック８７が不良ブロックである場合には、ホスト２からデータは、ブロック８４、ブロック８５から選択される書き込み先ブロックに書き込まれる。このため、不良ブロック８６の第２のブロックアドレス（不良ブロック８６が属するダイのダイ識別子）、および不良ブロック８７の第２のブロックアドレス（不良ブロック８７が属するダイのダイ識別子）は、ホスト２にはリターンされない。
【０１４５】
スーパーブロックＳＢ２は、ブロック８８、ブロック８９、ブロック９０、およびブロック９１を含む。これらブロック８８、ブロック８９、ブロック９０、およびブロック９１の各々は、スーパーブロックＳＢ２のスーパーブロックアドレス（第１のブロックアドレス）から数学的規則に基づいて定められるブロックアドレス（第２のブロックアドレス）を含む。ブロック８８が不良ブロックである場合には、ホスト２からデータは、ブロック８９、ブロック９０、およびブロック９１から選択される書き込み先ブロックに書き込まれる。このため、不良ブロック８８の第２のブロックアドレス（不良ブロック８８が属するダイのダイ識別子）はホスト２にはリターンされない。
【０１４６】
図１７、図１８は、論理アドレスとデータのペアをブロック内のページに書き込む動作を示す。
【０１４７】
各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは１６ＫＢ＋アルファである。
【０１４８】
コントローラ４は、４ＫＢユーザデータとこの４ＫＢユーザデータに対応する論理アドレス（例えばＬＢＡ）との双方を書き込み先ブロックＢＬＫに書き込む。この場合、図１７に示すように、各々がＬＢＡと４ＫＢユーザデータとを含む４つのデータセットが同じページに書き込まれてもよい。ブロック内オフセットは、セット境界を示してもよい。
【０１４９】
あるいは、図１８に示されているように、４つの４ＫＢユーザデータがページ内のユーザデータ領域に書き込まれ、これら４つの４ＫＢユーザデータに対応する４つのＬＢＡがこのページ内の冗長領域に書き込まれてもよい。
【０１５０】
図１９を用いて、複数のデータ部とこれらデータ部から算出される消失訂正符号とを不良ブロックを有するスーパーブロックに書き込む動作を説明する。
【０１５１】
ＲＡＩＤの仕組みをスーパーブロック内の複数のブロックを使用して実現するために、コントローラ４は、図１９に示すように、一つのスーパーブロックに含まれる複数のブロックに属し且つ同じページアドレスをそれぞれ有する複数のページに跨がって、複数のデータ部とこれら複数のデータ部から算出される１以上の消失訂正符号とを書き込む。複数のブロックに属し且つ同じページアドレスをそれぞれ有する複数のページは、スーパーページとして参照される。
【０１５２】
図１９の上部には、スーパーブロックＳＢ０において、スーパーページにデータおよびで消失訂正符号が書き込まれていることが示されている。スーパーページは、ＢＬＫ０（Ｄｉｅ＃０）のページ０、ＢＬＫ０（Ｄｉｅ＃１）のページ０、ＢＬＫ０（Ｄｉｅ＃２）のページ０、ＢＬＫ０（Ｄｉｅ＃３）のページ０、ＢＬＫ０（Ｄｉｅ＃４）のページ０、ＢＬＫ０（Ｄｉｅ＃５）のページ０、ＢＬＫ０（Ｄｉｅ＃６）のページ０、ＢＬＫ０（Ｄｉｅ＃７）のページ０から構成される。
【０１５３】
データは、非不良ブロックであるＢＬＫ０（Ｄｉｅ＃０）、ＢＬＫ０（Ｄｉｅ＃２）、ＢＬＫ０（Ｄｉｅ＃３）、ＢＬＫ０（Ｄｉｅ＃４）の各ページ０に書き込まれる。
【０１５４】
消失訂正符号の例は、リードソロモン符号、パリティ、等を含む。消失訂正符号は、非不良ブロック内のページに書き込まれる。また、消失訂正符号は、各不良ブロック内のページに予め定めた値（例えば、オール“０”のビット列、またはオール“１”のビット列）が格納されているものとして算出される。
【０１５５】
図１９の上部に示す例では、２つの消失訂正符号がスーパーブロックＳＢ０のスーパーページに書き込まれた場合が例示されている。２つの消失訂正符号は、最後の２つの非不良ブロック内のページに書き込まれる。図１９の上部に示す例では、最後のブロックであるＢＬＫ０（Ｄｉｅ＃７）が非不良ブロックであり、最後から２番目のブロックであるＢＬＫ０（Ｄｉｅ＃６）が不良ブロックであり、最後から３番目のブロックであるＢＬＫ０（Ｄｉｅ＃５）が非不良ブロックであるので、２つの消失訂正符号は、ＢＬＫ０（Ｄｉｅ＃５）のページ０と、ＢＬＫ０（Ｄｉｅ＃７）のページ０に書き込まれる。
【０１５６】
エンコード処理においては、コントローラ４は、ＢＬＫ０（Ｄｉｅ＃０）に書き込まれるデータ部と、不良ブロックであるＢＬＫ０（Ｄｉｅ＃０）に書き込まれると仮定される予め定めた値と、ＢＬＫ０（Ｄｉｅ＃２）に書き込まれるデータ部と、ＢＬＫ０（Ｄｉｅ＃３）に書き込まれるデータ部と、ＢＬＫ０（Ｄｉｅ＃４）に書き込まれるデータ部と、ＢＬＫ０（Ｄｉｅ＃６）に書き込まれると仮定される予め定めた値とに基づいて、２つの消失訂正符号を算出する。
【０１５７】
これにより、スーパーブロック内における不良ブロック／非不良ブロックのパターンに関係なく、エンコードのための同じ演算によって消失訂正符号を容易に算出することができる。
【０１５８】
また、コントローラ４は、各不良ブロック内のページには予め定めた値が格納されているものとして、消失訂正符号を使用した復号処理を行う。
【０１５９】
図１９の下部に示す例では、スーパーブロックＳＢ１を構成する最後のブロックであるＢＬＫ１（Ｄｉｅ＃７）が不良ブロックであり、最後から２番目のブロックであるＢＬＫ１（Ｄｉｅ＃６）が不良ブロックであり、最後から３番目のブロックであるＢＬＫ１（Ｄｉｅ＃５）が非不良ブロックであるので、２つの消失訂正符号は、ＢＬＫ１（Ｄｉｅ＃５）のページ０と、ＢＬＫ１（Ｄｉｅ＃６）のページ０に書き込まれる。
【０１６０】
次に、図２０を用いてホスト２内のフラッシュトランスレーション部２Ａとフラッシュストレージデバイス３内のライト動作制御部２１との関係を説明する。
【０１６１】
ホスト２側では、フラッシュトランスレーション部２Ａは、データの書き込みを行う場合、このデータを識別するＴａｇ（例えば、ＬＢＡ）を含むライトコマンドをフラッシュストレージデバイス３に送信する。なお、スーパーブロック用のＡＰＩを使用する場合には、フラッシュトランスレーション部２Ａは、データを識別するＴａｇ（例えば、ＬＢＡ）と、並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）のブロックアドレスとを指定するライトコマンド（Write without Page Address）をフラッシュストレージデバイス３に送信する。並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）は一つのスーパーブロックによって実現されているので、並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）のブロックアドレスは、このスーパーブロックのスーパーブロックアドレスである。
【０１６２】
フラッシュストレージデバイス３側は、ライト動作制御部２１、フラッシュＩ／Ｏ制御回路１３、不良情報管理テーブル３３、ＮＡＮＤ型フラッシュメモリダイから構成されている。また、フラッシュストレージデバイス３内ではスーパーブロック毎に使用可能または使用不可能を示す少なくとも１ビットの情報を保持する不良情報が、不良情報管理テーブル３３で管理されている。
【０１６３】
ホスト２側から、書き込むべきデータを識別するための情報であるＴａｇ（例えば、ＬＢＡ）を含むライト要求を受信した場合、ライト動作制御部２１は、不良情報管理テーブル３３の不良情報を参照して一つのスーパーブロックに含まれる非不良ブロックの中から一つのブロックを書き込み先ブロックとして選択し、データが書き込まれるべき選択したブロック内の書き込み先位置（書き込み先ページ、このページ内のオフセット）を決定する。
【０１６４】
なお、並列単位のブロックアドレス（スーパーブロックアドレス）を指定するライトコマンドをホスト２から受信した場合、ライト動作制御部２１は、この指定されたブロックアドレス（スーパーブロックアドレス）を有するスーパーブロックに含まれる非不良ブロックの中から書き込み先ブロックを選択し、データが書き込まれるべき選択したブロック内の書き込み先位置（書き込み先ページ、このページ内のオフセット）を決定する。
【０１６５】
そして、ライト動作制御部２１は、書き込み先ブロックが属するダイのダイ識別子（Ｄｉｅ  ＩＤ）、書き込み先ブロックのブロックアドレス（Ｒａｗ  Ｂｌｏｃｋ）、書き込み先ページ（Ｒａｗ  Ｐａｇｅ）、書き込み先ページ内のオフセット（Ｏｆｆｓｅｔ）を指定する書き込み指示をフラッシュＩ／Ｏ制御回路１３に送信する。
【０１６６】
また、ライト動作制御部２１は、書き込み先ブロックおよび書き込み先位置の双方を表すフラッシュアドレス（Ｄｉｅ  ＩＤ、Ｒａｗ  Ｂｌｏｃｋ、Ｒａｗ  Ｐａｇｅ、Ｏｆｆｓｅｔ）と、Ｔａｇ（例えば、ＬＢＡ）とを、ホスト２に通知する。
【０１６７】
書き込み指示を受信したフラッシュＩ／Ｏ制御回路１３は、書き込み指示に基づいて、書き込み先位置にデータを書き込む。
【０１６８】
ホスト２側では、フラッシュトランスレーション部２Ａは、フラッシュストレージデバイス３からフラッシュアドレス（Ｄｉｅ  ＩＤ、Ｒａｗ  Ｂｌｏｃｋ、Ｒａｗ  Ｐａｇｅ、Ｏｆｆｓｅｔ）と、Ｔａｇ（例えば、ＬＢＡ）とを受信すると、ホスト２で管理されているＬＵＴを更新する。このとき、フラッシュアドレス（Ｄｉｅ  ＩＤ、Ｒａｗ  Ｂｌｏｃｋ、Ｒａｗ  Ｐａｇｅ、Ｏｆｆｓｅｔ）と、Ｔａｇ（例えば、ＬＢＡ）とが対応付けられる。
【０１６９】
フラッシュトランスレーション部２Ａは、リード要求を行う場合、フラッシュアドレス（Ｄｉｅ  ＩＤ、Ｒａｗ  Ｂｌｏｃｋ、Ｒａｗ  Ｐａｇｅ、Ｏｆｆｓｅｔ）を指定するリード要求をフラッシュストレージデバイス３に送信する。
【０１７０】
フラッシュストレージデバイス３側では、フラッシュアドレス（Ｄｉｅ  ＩＤ、Ｒａｗ  Ｂｌｏｃｋ、Ｒａｗ  Ｐａｇｅ、Ｏｆｆｓｅｔ）を指定するリード要求をホスト２から受信した場合、フラッシュＩ／Ｏ制御回路１３は、フラッシュアドレスに基づいて、データをリードする。リード対象のブロックはＤｉｅ  ＩＤとＲａｗ  Ｂｌｏｃｋとによって特定される。リード対象のページは、Ｒａｗ  Ｐａｇｅによって特定される。リード対象のページ内のリード対象位置は、Ｏｆｆｓｅｔによって特定される。
【０１７１】
次に、図２１を用いてホスト２とフラッシュストレージデバイス３とによって実行されるライト動作およびリード動作を説明する。
【０１７２】
＜ライト動作＞
（１）ライトコマンドの受信
フラッシュストレージデバイス３においては、ホスト２から受信される、ＬＢＡを含むライトコマンド、およびデータは、フラッシュストレージデバイス３内のライトバッファ３１に一時的に格納される。
【０１７３】
（２）不良情報の参照
ライト動作制御部２１は、不良情報管理テーブル３３で管理されている不良情報を参照して、書き込み対象のスーパーブロックに含まれる非不良ブロックの中から一つのブロックを書き込み先ブロックとして選択し、書き込み先ブロック内の書き込み先位置を決定する。
【０１７４】
（３）書き込み指示
ライト動作制御部２１は、書き込み先ブロックと書き込み先ブロック内の書き込み先位置を決定すると、書き込み先ブロックと書き込み先ブロックの双方を示すフラッシュアドレス（Ｒａｗアドレス）を指定する書き込み指示をライトバッファ３１を介してフラッシュＩ／Ｏ制御回路１３に送信する。ここで、Ｒａｗアドレスには、ＤｉｅＩＤ、Ｒａｗ  Ｂｌｏｃｋ、Ｒａｗ  Ｐａｇｅ、Ｏｆｆｓｅｔが含まれる。Ｒａｗアドレスを受信したフラッシュＩ／Ｏ制御回路１３は、Ｒａｗアドレスに基づいて、書き込み先ブロックとして選択されたブロック内の書き込み先位置にライトデータを書き込む。
【０１７５】
（４）ホストへの書き込み先の通知
ライト動作制御部２１は、Ｒａｗアドレスと、ＬＢＡとをホスト２に通知する。これにより、ホスト２は、ＬＵＴを更新してこのＲａｗアドレスをこのＬＢＡにマッピングすることができる。
【０１７６】
＜リード動作＞
（１１）ＬＢＡの通知
リードパーサ２Ｂは、ＬＢＡを含むリードコマンドを受信すると、ＬＢＡをフラッシュトランスレーション部２Ａに通知する。
【０１７７】
（１２）Ｒａｗアドレスの取得
フラッシュトランスレーション部２Ａは、リードパーサ２ＢからＬＢＡを受信すると、ＬＵＴを参照し、受信したＬＢＡに対応するＲａｗアドレスを取得し、取得したＲａｗアドレスをリードパーサ２Ｂに返す。これにより、リードパーサ２Ｂは、Ｒａｗアドレスを取得でき、ＬＢＡを含むリードコマンドを、Ｒａｗアドレスを含むリードコマンドに変換することができる。
【０１７８】
（１３）リード指示
リードパーサ２Ｂは、Ｒａｗアドレスを含むリードコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３においては、Ｒａｗアドレスを含むリードコマンドを受信したフラッシュＩ／Ｏ制御回路１３は、Ｒａｗアドレスに基づいて、データをリードし、リードデータをリードバッファ３０に送信する。リードバッファ３０ではリードデータが一時的に記憶される。
【０１７９】
（１４）リードデータのホストへの送信
リードバッファ３０で一時的に記憶されたリードデータは、ホスト２に送信される。
【０１８０】
図２２のシーケンスチャートは、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み動作処理の手順を示す。
【０１８１】
ホスト２は、ＱｏＳドメインＩＤ、ユーザアドレス（論理アドレス）、ライトデータ、長さを含むライトコマンド（Write without Physical Address）をフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、一つのスーパーブロック（書き込み対象のスーパーブロック）に含まれる非不良ブロックの中から一つのブロックを書き込み先ブロックとして選択し、選択したブロック内の書き込み先位置を決定する（ステップＳ１１）。ステップＳ１１では、この書き込み対象のスーパーブロックは、ＱｏＳドメインＩＤによって特定されるＱｏＳドメインに属しているスーパーブロックであってもよい。このＱｏＳドメインに複数のスーパーブロックが属している場合には、これら複数のスーパーブロックの一つが書き込み対象のスーパーブロックとして選択される。
【０１８２】
コントローラ４は、ホスト２から受信されるライトデータを書き込み先位置に書き込む（ステップＳ１２）。ステップＳ１２では、コントローラ４は、ユーザアドレス（例えばＬＢＡ）とライトデータの双方を書き込み先ブロックの書き込みも先位置に書き込む。
【０１８３】
コントローラ４は、ブロック管理テーブル３２を更新して、書き込まれたデータに対応するビットマップフラグ（つまり、このデータが書き込まれた物理記憶位置の物理アドレスに対応するビットマップフラグ）を０から１に変更する（ステップＳ１３）。例えば、図２３に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ１１のページ１のオフセット＋０〜＋３に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図２４に示されているように、ブロックＢＬＫ１１用のブロック管理テーブルにおいては、ページ１のオフセット＋０〜＋３に対応するビットマップフラグそれぞれが０から１に変更される。
【０１８４】
コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（ステップＳ１４）。レスポンスには、ユーザアドレス、物理アドレス（フラッシュアドレス）、長さが含まれる。例えば、図２３に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ１１のページ１のオフセット＋０〜＋３に対応する物理記憶位置に書き込まれたならば、ＬＢＡｘ、フラッシュアドレス（ブロックＢＬＫ１１が属するダイのダイ識別子、ブロックＢＬＫ１１のブロックアドレス、ページアドレス（＝１）、ページ内オフセット（＝＋０））、長さ（＝４）を含むレスポンスがコントローラ４からホスト２に送信される。フラッシュアドレスは、ブロックアドレス、ページアドレス、ページ内オフセットの組み合わせによって表現されるが、以下の説明では、フラッシュアドレスの説明を簡単化するために、フラッシュアドレス内のダイ識別子の説明については省略することとする。
【０１８５】
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴを更新して、書き込まれたライトデータに対応するユーザアドレスそれぞれにフラッシュアドレス（物理アドレス）をマッピングする（ステップＳ２１）。図２５に示されているように、ＬＵＴは、複数のユーザアドレス（論理アドレス）それぞれに対応する複数のエントリを含む。あるユーザアドレス（例えばあるＬＢＡ）に対応するエントリには、このＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレスが格納される。図２３に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ１１のページ１のオフセット＋０〜＋３に対応する物理記憶位置に書き込まれたならば、図２５に示されているように、ＬＵＴが更新されて、ＬＢＡｘに対応するエントリにＢＬＫ１１、ページ１、オフセット＋０が格納され、ＬＢＡｘ＋１に対応するエントリにＢＬＫ１１、ページ１、オフセット＋１が格納され、ＬＢＡｘ＋２に対応するエントリにＢＬＫ１１、ページ１、オフセット＋２が格納され、ＬＢＡｘ＋３に対応するエントリにＢＬＫ１１、ページ１、オフセット＋３が格納される。
【０１８６】
この後、ホスト２は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する。図２３に示されているように、以前のデータがブロックＢＬＫ０のページ０のオフセット＋０、オフセット＋１、オフセット＋２、オフセット＋３に対応する位置に格納されている場合には、図２６に示すように、フラッシュアドレス（ブロックアドレス（＝ＢＬＫ０）、ページアドレス（＝ページ０）、ページ内オフセット（＝＋０））、長さ（＝４）を指定するＴｒｉｍコマンドがホスト２からフラッシュストレージデバイス３に送信される。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック管理テーブル３２を更新する（ステップＳ１５）。ステップＳ１５においては、図２６に示すように、ブロックＢＬＫ０用のブロック管理テーブルにおいて、ページ０のオフセット＋０〜＋３に対応するビットマップフラグそれぞれが１から０に変更される。
【０１８７】
図２７は、フラッシュストレージデバイス３に適用されるリードコマンド（Read with Physical Address）を示す。
【０１８８】
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、フラッシュアドレス、長さ、転送先ポインタを含む。
【０１８９】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
【０１９０】
フラッシュアドレスは、データが読み出されるべき最初の物理記憶位置のフラッシュアドレス（物理アドレス）を示す。長さは、リードすべきデータの長さを示す。
【０１９１】
転送先ポインタは、読み出されたデータが転送されるべきホスト２内のメモリ上の位置を示す。
【０１９２】
一つのリードコマンドは、フラッシュアドレス（物理アドレス）と長さの組を複数指定することができる。
【０１９３】
ここで、リードコマンドに、フラッシュアドレスおよび長さの組が２組以上含まれていてもよい。２組以上のフラッシュアドレスおよび長さの組が含まれる場合としては、データの書き込みを行ったスーパーブロックに不良ブロックが存在したため、ライトデータが不良ブロックを挟む２つのブロックに書き込まれた場合が想定される。
【０１９４】
図２８は、リード動作を示す。
【０１９５】
ここでは、ブロックアドレス（＝ＢＬＫ２）、ページアドレス（＝ページ１）、ページ内オフセット（＝＋１）、長さ（＝３）を指定するリードコマンドがホスト２から受信された場合が想定されている。フラッシュストレージデバイス３のコントローラ４は、ブロックアドレス（＝ＢＬＫ２）、ページアドレス（＝ページ１）、ページ内オフセット（＝＋１）、長さ（＝３）に基づいて、ＢＬＫ２からデータｄ１〜ｄ３をリードする。この場合、コントローラ４は、ＢＬＫ２のページ１から１ページサイズ分のデータをリードし、このリードデータからデータｄ１〜データｄ３を抽出する。次いで、コントローラ４は、データｄ１〜データｄ３を、転送先ポインタによって指定されるホストメモリ上に転送する。
【０１９６】
図２９のシーケンスチャートは、ホスト２とフラッシュストレージデバイス３とによって実行されるリード処理の手順を示す。
【０１９７】
ホスト２は、ホスト２によって管理されているＬＵＴを参照して、ユーザアプリケーションからのリード要求に含まれるユーザアドレス（論理アドレス）をフラッシュアドレスに変換する。そして、ホスト２は、このフラッシュアドレス、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０１９８】
フラッシュストレージデバイス３のコントローラ４がリードコマンドをホスト２から受信した時、コントローラ４は、このリードコマンドによって指定されたフラッシュアドレスに基づいて、リード対象のブロック、リード対象のページ、リード対象のページ内位置を決定する（ステップＳ３１）。コントローラ４は、フラッシュアドレス、長さによって規定されるデータをＮＡＮＤ型フラッシュメモリ５からリードし（ステップＳ３２）、このリードデータをホスト２に送信する。
【０１９９】
図３０は、フラッシュストレージデバイス３に適用されるガベージコレクション（ＧＣ）制御コマンドを示す。
【０２００】
ＧＣ制御コマンドは、コマンドＩＤ、ポリシー（ＧＣの方法）、ＱｏＳドメインＩＤ、最大データ数（maximum-number-of-data）、等を含んでもよい。
【０２０１】
コマンドＩＤはこのコマンドがＧＣ制御コマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ制御コマンドにはＧＣ制御コマンド用のコマンドＩＤが含まれる。
【０２０２】
ポリシー（ＧＣの方法）は、ＧＣ候補ブロック（ＧＣソースブロック）を選択するための条件（ＧＣポリシー）を指定するパラメータである。フラッシュストレージデバイス３のコントローラ４は、複数のＧＣポリシーをサポートしている。
【０２０３】
コントローラ４によってサポートされているＧＣポリシーには、有効データ量が少ないブロックを優先的にＧＣ候補ブロック（ＧＣソースブロック）として選択するというポリシー（Ｇｒｅｅｄｙ）が含まれてもよい。
【０２０４】
また、コントローラ４によってサポートされているＧＣポリシーには、低い更新頻度を有するデータ（コールドデータ）が集められているブロックを、高い更新頻度を有するデータ（ホットデータ）が集められているブロックよりも優先的にＧＣ候補ブロック（ＧＣソースブロック）として選択するというポリシーが含まれていてもよい。
【０２０５】
さらに、ＧＣポリシーは、ＧＣ開始条件を指定してもよい。ＧＣ開始条件は、例えば、残りフリーブロックの個数を示してもよい。
【０２０６】
コントローラ４は、有効データを含むスーパーブロック群をアクティブブロックリストによって管理しており、ＧＣを実行する場合には、ＧＣ制御コマンドによって指定されたＧＣポリシーに基づいて、アクティブブロックリストによって管理されているスーパーブロック群から一つ以上のＧＣ候補スーパーブロック（ＧＣソースブロック）を選択してもよい。
【０２０７】
ＱｏＳドメインＩＤは、ＧＣが施されるべきＱｏＳドメインを指定するパラメータである。コントローラ４は、ＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するスーパーブロック群、つまりこのＱｏＳドメインに対応するアクティブブロックリストから、一つ以上のＧＣ候補スーパーブロック（ＧＣソースブロック）を選択する。
【０２０８】
最大データ数は、ＧＣを実行する際にコピーされるデータ量の上限値を示す。つまり、ＧＣ動作は、最大データ数を超えて実行されない。
【０２０９】
コントローラ４は、ＱｏＳドメインに対応する残りフリーブロックの数がポリシーによって指定される閾値以下になった場合に、ＧＣを開始してもよい。
【０２１０】
図３１は、フラッシュストレージデバイス３に適用される強制ＧＣコマンド（Forced Garbage-Collection）を示す。
【０２１１】
強制ＧＣコマンドは、コマンドＩＤ、ＱｏＳドメインＩＤ、スーパーブロックアドレス、等を含んでもよい。この強制ＧＣコマンドを受信した時、コントローラは、即座にＧＣを実行する。
【０２１２】
図３２は、フラッシュストレージデバイス３からホスト２に送信されるアドレス更新通知（Address Update Notification (Device Initiated)）を示す。
【０２１３】
アドレス更新通知は、フラッシュストレージデバイス３において、ＧＣ動作が実行されたことによって変更されたデータの格納位置をホスト２に通知するためのものである。ユーザアドレス、旧フラッシュアドレス、新フラッシュアドレス、参照カウント、長さ、等を含んでいてもよい。
【０２１４】
ユーザアドレスは、コピーされたデータを識別するアドレスである。
【０２１５】
旧フラッシュアドレスは、コピーされたデータが格納されている旧物理記憶位置の物理アドレス（旧物理アドレス）を示す。
【０２１６】
新フラッシュアドレスは、コピーされたデータが格納されている新物理記憶位置の物理アドレス（新物理アドレス）を示す。
【０２１７】
参照カウントは、コピーされたデータを参照しているユーザアドレスの数を示す。
【０２１８】
長さは、コピーされたデータの長さを示す。
【０２１９】
図３３のシーケンスチャートは、フラッシュストレージデバイス３によって実行されるＧＣ動作の手順を示す。
【０２２０】
フラッシュストレージデバイス３のコントローラ４は、ホスト２によって指定されたＱｏＳドメインに属するスーパーブロック群から、有効データと無効データとが混在する一つ以上のＧＣソースブロック（ＧＣソーススーパーブロック）を選択する（ステップＳ４１）。次いで、コントローラ４は、このＱｏＳドメインに属するフリーブロック群（フリースーパーブロック群）から一つ以上のフリーブロック（フリースーパーブロック）を選択し、選択したフリーブロックをＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）として割り当てる（ステップＳ４２）。
【０２２１】
コントローラ４は、ＧＣソースブロック（ＧＣソーススーパーブロック）内の全ての有効データをＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）にコピーする（ステップＳ４３）。ステップＳ４３では、コントローラ４は、ＧＣソースブロック（ＧＣソーススーパーブロック）内の有効データのみならず、この有効データとこの有効データに対応するユーザアドレス（論理アドレス）の双方を、ＧＣソースブロック（ＧＣソーススーパーブロック）からＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）にコピーする。これにより、ＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）内にデータとユーザアドレス（論理アドレス）とのペアを保持することができる。
【０２２２】
そして、コントローラ４は、コピーされた有効データ毎に、ユーザアドレス（論理アドレス）、旧フラッシュアドレス、新フラッシュアドレス、長さを、アドレス更新通知を使用してホスト２に通知する（ステップＳ４４）。
【０２２３】
ホスト２がこのアドレス更新通知を受信した時、ホスト２は、ホスト２によって管理されているＬＵＴを更新して、コピーされた各有効データに対応するユーザアドレス（論理アドレス）に新フラッシュアドレスをマッピングする（ステップＳ５１）。
【０２２４】
図３４は、ＧＣのために実行されるデータコピー動作の例を示す。
【０２２５】
図３４では、ＧＣソースブロック（ここではブロックＢＬＫ５０）のページ１のオフセット＋０に対応する位置に格納されている有効データ（ＬＢＡ＝１０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ１００）のページ０のオフセット＋０に対応する位置にコピーされ、ＧＣソースブロック（ここではブロックＢＬＫ５０）のページ２のオフセット＋２に対応する位置に格納されている有効データ（ＬＢＡ＝２０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ１００）のページ０のオフセット＋１に対応する位置にコピーされた場合が想定されている。この場合、コントローラ４は、｛ＬＢＡ１０、旧フラッシュアドレス（ＢＬＫ５０、ページ１、オフセット（＝＋０））、新フラッシュアドレス（ＬＢＡ１００、ページ０、オフセット（＝＋０））、長さ（＝１）｝、｛ＬＢＡ２０、旧フラッシュアドレス（ＢＬＫ５０、ページ２、オフセット（＝＋２））、新フラッシュアドレス（ＬＢＡ１００、ページ０、オフセット（＝＋１））、長さ（＝１）｝をホスト２に通知する（アドレス更新通知）。
【０２２６】
図３５は、図３４のデータコピー動作の結果に基づいて更新されるホスト２のＬＵＴの内容を示す。
【０２２７】
このＬＵＴにおいては、ＬＢＡ１０に対応するフラッシュアドレス（ブロックアドレス、ページアドレス、およびオフセット（ページ内オフセット））は、ＢＬＫ５０、ページ１、オフセット（＝＋０）から、ＢＬＫ１００、ページ０、オフセット（＝＋０）に更新される。同様に、ＬＢＡ２０に対応するフラッシュアドレス（ブロックアドレス、ページアドレス、およびオフセット（ページ内オフセット））は、ＢＬＫ５０、ぺージ２、オフセット（＝＋２）から、ＢＬＫ１００、ページ０、オフセット（＝＋１）に更新される。
【０２２８】
ＬＵＴが更新された後、ホスト２は、ＢＬＫ５０、ページ１、オフセット（＝＋０）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ５０のページ１のオフセット（＝＋０）に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト２は、ＢＬＫ５０、ページ２、オフセット（＝＋２）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ５０のページ２のオフセット（＝＋２）に対応する位置に格納されているデータを無効化してもよい。
【０２２９】
図３６は、ライトコマンドに対するレスポンスとＧＣ用コールバック処理（アドレス更新通知）との関係を示す。
【０２３０】
コントローラ４があるユーザアドレス（論理アドレス）に対応する有効データをコピーしている間に、このユーザアドレスを指定するライトコマンドがホスト２から受信されるというケースが起こる場合がある。
【０２３１】
図３６では、図３４のデータコピー動作（ＬＢＡ１０に対応するデータコピー動作）の実行中に、ＬＢＡ１０を指定するライトコマンドがホスト２から受信された場合が想定されている。
【０２３２】
コントローラ４は、ホスト２から受信されるライトデータを書き込み先ブロックに書き込む（ここではＢＬＫ３のページ０のオフセット＋０に対応する位置に書き込まれる）。そして、コントローラ４は、｛ＬＢＡ１０、ＢＬＫ３、ページ０、オフセット（＝＋０）｝を、ライトコマンドに対するレスポンスとしてホスト２に返す。
【０２３３】
ホスト２は、ＬＵＴを更新して、ＬＢＡ１０に対応するブロックアドレス、ページアドレス、オフセット（ページ内オフセット）を、ＢＬＫ５０、ページ１、オフセット（＋０）から、ＢＬＫ３、ページ０、オフセット（＋０）に変更する。
【０２３４】
もしこの後に、ＬＢＡ１０の新フラッシュアドレスがコントローラ４からホスト２に通知されたならば、ＬＢＡ１０に対応する最新データが格納されている位置を示すブロックアドレス、ページアドレスおよびオフセット（ＢＬＫ３、ページ０、オフセット（＋０））が、ＬＢＡ１０に対応する新フラッシュアドレス（ここでは、ＢＬＫ１００、ページ０、オフセット（＝＋０））に誤って変更されてしまう可能性がある。
【０２３５】
本実施形態では、コントローラ４は、ＬＢＡ１０、新フラッシュアドレス（ＢＬＫ１００、ページ０、オフセット（＝＋０））、長さ＝１のみならず、旧フラッシュアドレス（ＢＬＫ５０、ページ１、オフセット（＝＋０））もホスト２に通知することができる（アドレス更新通知）。ホスト２は、旧フラッシュアドレス（ＢＬＫ５０、ページ１、オフセット（＝＋０））が、ＬＵＴによってＬＢＡ１０に現在マッピングされているブロックアドレス、ページアドレス、オフセットに一致しない場合には、ＬＵＴを更新しない。これにより、ＬＢＡ１０に対応する最新データが格納されている位置を示すブロックアドレス、ページアドレスおよびオフセット（ＢＬＫ３、ページ０、オフセット（＋０））が、ＬＢＡ１０に対応する新フラッシュアドレス（ここでは、ＢＬＫ１００、ページ０、オフセット（＝＋０））に誤って変更されてしまうことを防止することができる。
【０２３６】
図３７のフローチャートは、ホスト２によって実行されるＬＵＴ更新処理の手順を示す。
【０２３７】
ホスト２は、アドレス更新通知を受信したならば（ステップＳ１０１のＹＥＳ）、旧フラッシュアドレスをＬＵＴ上の現在の物理アドレスと比較する（ステップＳ１０２）。比較した結果、旧フラッシュアドレスと、現在の物理アドレスとが一致するならば（ステップＳ１０３のＹＥＳ）、ホスト２は、ユーザアドレスに対応する現在の物理アドレスを、新フラッシュアドレスに更新する（ステップＳ１０４）。次に、ホスト２は、Ｔｒｉｍコマンドをフラッシュストレージデバイスに送信し、旧フラッシュアドレスに対応する位置に格納されているデータを無効化する（ステップＳ１０５）。
【０２３８】
他方、旧フラッシュアドレスと、現在の物理アドレスとが一致しないならば（ステップＳ１０６のＮＯ）、ホスト２は、ユーザアドレスに対応する現在の物理アドレスを維持する（ステップＳ１０６）。これにより、アドレス更新通知により通知された最新データが格納されている位置を示すブロックアドレス、ページアドレスおよびオフセットが、新フラッシュアドレスに誤って変更されてしまうことを防止することができる。
【０２３９】
図３８では、ブロックＢＬＫ１用のブロック管理テーブルが例示されている。
【０２４０】
ブロックＢＬＫ１用のブロック管理テーブルは、ブロックＢＬＫ１のページアドレスおよびページ内オフセットの組のそれぞれに対応する複数のエントリを含む。
【０２４１】
例えば、ページ０、オフセット＋０に対応するエントリには、ブロックＢＬＫ１のページ０、オフセット＋０に対応する位置に格納されている４ＫＢデータに対応する参照カウントが格納される。同様に、ページ０、オフセット＋１に対応するエントリには、ブロックＢＬＫ１のページ０、オフセット＋１に対応する位置に格納されている４ＫＢデータに対応する参照カウントが格納される。
【０２４２】
参照カウントが１以上であるデータは有効データであり、参照カウントが０のデータは無効データである。
【０２４３】
フラッシュストレージデバイス３は、ホスト２から受信されるデュプリケートコマンド／Ｔｔｉｍコマンドに基づいて、参照カウントをインクリメント／デクリメントする。
【０２４４】
図３９は、参照カウントの管理のためにフラッシュストレージデバイス３に適用されるデュプリケートコマンドを示す。
【０２４５】
デュプリケートコマンドは、ある物理アドレス（ブロックアドレス、ページアドレス、ページ内オフセット）に格納されているデータの参照カウントを増やすことをフラッシュストレージデバイス３に要求するコマンドである。
【０２４６】
このデュプリケートコマンドは、コマンドＩＤ、フラッシュアドレス、長さ、等を含んでもよい。
【０２４７】
コマンドＩＤはこのコマンドがデュプリケートコマンドであることを示すＩＤ（コマンドコード）であり、デュプリケートコマンドにはデュプリケートコマンド用のコマンドＩＤが含まれる。
【０２４８】
フラッシュアドレスは、参照カウントを増やすべきデータが格納されている最初の物理記憶位置を示す。
【０２４９】
長さは、参照カウントを増やすべきデータの長さを示す。
【０２５０】
コントローラ４は、参照カウントを増やすべきデータが格納されている物理記憶位置を示すブロックアドレス、ページアドレス、ページ内オフセットを含むデュプリケートコマンドをホスト２から受信した場合、ブロック管理テーブル３２を更新して、デュプリケートコマンドに含まれるブロック番号、ページ番号、ページ内オフセットに対応する物理記憶位置のデータに対応する参照カウントを増やす。
【０２５１】
図４０のシーケンスチャートは、参照カウントインクリメント／デクリメント処理を示す。
【０２５２】
フラッシュストレージデバイス３のコントローラ４がホスト２からデュプリケートコマンドを受信した時、コントローラ４は、デュプリケートコマンドによって指定されるフラッシュアドレス（ブロックアドレス、ページアドレス、オフセット（ページ内オフセット））に対応する参照カウント、つまり、このブロックアドレス、ページアドレス、オフセットによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置に格納されているデータに対応する参照カウントを、例えば１だけ、増やす（ステップＳ６１）。この場合、コントローラ４は、デュプリケートコマンドによって指定されるブロックアドレスを有するブロックに対応するブロック管理テーブル３２を更新する。このブロック管理テーブル３２の更新では、デュプリケートコマンドによって指定される物理記憶位置に対応するブロック管理テーブル３２内のエントリに格納されている参照カウントが、例えば１だけ、増やされる。デュプリケートコマンドによって指定される長さが２以上の場合には、デュプリケートコマンドによって指定されるページアドレスおよびオフセットに対応する参照カウントのみならず、このページアドレスおよびオフセットに後続する幾つかのページアドレスおよびオフセットに対応する参照カウントも、例えば１だけ、増やされる。
【０２５３】
フラッシュストレージデバイス３のコントローラ４がホスト２からＴｒｉｍコマンドを受信した時、コントローラ４は、Ｔｒｉｍコマンドによって指定されるフラッシュアドレス（ブロックアドレス、ページアドレス、オフセット（ページ内オフセット））に対応する参照カウント、つまり、このブロックアドレス、ページアドレス、オフセットによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置に格納されているデータに対応する参照カウントを、例えば１だけ、減らす（ステップＳ６２）。この場合、コントローラ４は、Ｔｒｉｍコマンドによって指定されるブロックアドレスを有するブロックに対応するブロック管理テーブル３２を更新する。このブロック管理テーブル３２の更新では、Ｔｒｉｍコマンドによって指定されるページアドレスおよびオフセットに対応するブロック管理テーブル３２内のエントリに格納されている参照カウントが、例えば１だけ、減らされる。Ｔｒｉｍコマンドによって指定される長さが２以上の場合には、Ｔｒｉｍコマンドによって指定されるページアドレスおよびオフセットに対応する参照カウントのみならず、このオフセットに後続する幾つかのページアドレスおよびオフセットに対応する参照カウントも、例えば１だけ、減らされる。
【０２５４】
ＧＣにおいては、コントローラ４は、ＧＣソースブロックに対応するブロック管理テーブルを参照して、サイズが４ＫＢであるデータ単位で、ＧＣソースブロック内のデータが有効データであるか無効データであるかを判定する。コントローラ４は、参照カウントが０であるデータは無効データであると判定し、参照カウントが１以上であるデータは有効データであると判定する。そして、コントローラ４は、有効データ（参照カウントが１以上のデータ）とこの有効データに対応する論理アドレスをＧＣソースブロック（ＧＣソーススーパーブロック）からＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）にコピーする。
【０２５５】
より詳しくは、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクションを実行する場合、ガベージコレクションのためのＧＣソースブロック（ＧＣソーススーパーブロック）およびＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）を選択する。コントローラ４は、ＧＣソースブロック（ＧＣソーススーパーブロック）内に格納されている、参照カウントが１以上の第１のデータ（有効データ）と第１のデータの論理アドレスの双方をＧＣデスティネーションブロック（ＧＣデスティネーションスーパーブロック）にコピーする。そして、コントローラ４は、第１のデータのユーザアドレス（論理アドレス）と、第１のデータのコピー先物理記憶位置（新物理記憶位置）の物理アドレスと、第１のデータのコピー元物理記憶位置（旧物理記憶位置）の物理アドレスとを、ホスト２に通知する。
【０２５６】
図４１のフローチャートは、フラッシュストレージデバイス３によって実行されるスーパーブロック割り当て処理の手順を示す。
【０２５７】
ホスト２からのスーパーブロック割当て要求（並列単位割り当て要求）を受信すると（ステップＳ７１のＹＥＳ）、コントローラ４は、この割当て要求によって指定された並列数以上の非不良ブロックを含むスーパーブロックを選択する（ステップＳ７２）。
【０２５８】
次に、コントローラ４は、選択したスーパーブロックをホスト２に割当てる（ステップＳ７３）。
【０２５９】
続いて、ホスト２からのライト要求を受信すると（ステップＳ７４のＹＥＳ）、コントローラ４は、ライトデータを、この割当てたスーパーブロック内の非不良ブロックに書き込む（ステップＳ７５）。そして、コントローラ４は、レスポンスをホストに返す（ステップＳ７６）。
【０２６０】
次に、図４２を用いてスーパーブロック内の全ての非不良ブロックがこのスーパーブロックの先頭から連続して論理的に配置されるようにアクセス対象ブロックのアドレスを変換するアドレス変換動作を説明する。
【０２６１】
図４２には、スーパーブロックＳＢ５が、ＢＬＫ５（Ｄｉｅ＃０）、ＢＬＫ５（Ｄｉｅ＃１）、ＢＬＫ５（Ｄｉｅ＃２）、ＢＬＫ５（Ｄｉｅ＃３）、ＢＬＫ５（Ｄｉｅ＃４）、ＢＬＫ５（Ｄｉｅ＃５）、ＢＬＫ５（Ｄｉｅ＃６）、ＢＬＫ５（Ｄｉｅ＃７）から構成され、その中で、ＢＬＫ５（Ｄｉｅ＃２）、ＢＬＫ５（Ｄｉｅ＃５）が不良ブロックであることが示されている。また、ＢＬＫ５（Ｄｉｅ＃０）、ＢＬＫ５（Ｄｉｅ＃１）、ＢＬＫ５（Ｄｉｅ＃２）、ＢＬＫ５（Ｄｉｅ＃３）、ＢＬＫ５（Ｄｉｅ＃４）、ＢＬＫ５（Ｄｉｅ＃５）、ＢＬＫ５（Ｄｉｅ＃６）、ＢＬＫ５（Ｄｉｅ＃７）は、それぞれブロック番号（ブロックアドレス）０、１、２、３、４、５、６、７によって外部から指定されるものとする。
【０２６２】
アドレス変換は、スーパーブロックＳＢ５内の６個の非不良ブロック（ＢＬＫ５（Ｄｉｅ＃０）、ＢＬＫ５（Ｄｉｅ＃１）、ＢＬＫ５（Ｄｉｅ＃３）、ＢＬＫ５（Ｄｉｅ＃４）、ＢＬＫ５（Ｄｉｅ＃６）、ＢＬＫ５（Ｄｉｅ＃７））がブロック番号０〜６のブロックとして扱われるように実行される。
【０２６３】
アドレス変換動作が実行されると、ＢＬＫ５（Ｄｉｅ＃０）、ＢＬＫ５（Ｄｉｅ＃１）、ＢＬＫ５（Ｄｉｅ＃２）、ＢＬＫ５（Ｄｉｅ＃３）、ＢＬＫ５（Ｄｉｅ＃４）のそれぞれのブロック番号は、それぞれ１→１、２→３、３→４、４→６、５→７に変換される。このアドレス変換動作により、スーパーブロックＳＢ５の先頭から始まる連続したオフセットアドレス内に不良ブロックのブロック番号が含まれないようにすることができる。よって、このアドレス変換動作により、スーパーブロックＳＢ５内の全ての非不良ブロックがこのスーパーブロックＳＢ５の先頭から連続して論理的に配置されるので、スーパーブロックＳＢ５をあたかも不良ブロックを含まない小サイズのスーパーブロック（６個の非不良ブロックのみから構成されるスーパーブロック）であるかのように扱うことができる。この結果、長いデータであっても、このデータの物理記憶位置を、その開始物理記憶位置を示す一つの物理アドレスと一つの長さとの組み合わせのみによって表現することが可能となる。
【０２６４】
次に、図４３を用いてアドレス変換動作のために使用される不良情報管理テーブル３３とアドレス変換の例を説明する。なお、図４３において、ブロック番号は１６進数で表されている。
【０２６５】
不良情報管理テーブル３３は、先頭から（ブロック番号が小さいほうから）見つけた不良ブロック数の累計を示している。図４３には、不良情報管理テーブル３３のブロック番号が４、９のブロックが不良ブロックであることが示されている。この場合、不良情報管理テーブル３３には、ブロック番号０に対応する位置、ブロック番号１に対応する位置、ブロック番号２に対応する位置、ブロック番号３に対応する位置に“０”が格納され、ブロック番号４に対応する位置、ブロック番号５に対応する位置、ブロック番号６に対応する位置、ブロック番号７に対応する位置、ブロック番号８に対応する位置に“１”が格納され、ブロック番号９に対応する位置、ブロック番号Ａに対応する位置、ブロック番号Ｂに対応する位置、ブロック番号Ｃに対応する位置、ブロック番号Ｄに対応する位置に“１”が格納される。つまり、格納されている数値が変化した部分に対応するブロック番号のブロックが不良ブロックであることを示す。
【０２６６】
なお、不良情報管理テーブル３３のブロック番号Ｅ、およびＦに対応する位置には、ありえない数値が格納される。もし、ブロック当たりの不良情報のビット数が２ｂｉｔであるならば、ブロック番号Ｅ、およびＦに対応する位置には“３”が格納される。
【０２６７】
また、アドレス変換動作が実行されると、アクセス対象のブロックのブロック番号は、このブロックのブロック番号と不良ブロック数の累計との和に変換される。例えば、ブロック番号０〜３については、不良ブロックの累計が“０”であるため、ブロック番号は不変である。
【０２６８】
一方、例えば、アクセス対象のブロックのブロック番号が４である場合には、このブロック番号は＋１され、ブロック番号“５”に変換される。このため、書き込み対象のブロックのブロック番号が４である場合には、データは、実際にはブロック番号“５”のブロックに書き込まれる。コントローラ４は、ブロック番号４をデータ書き込み先ブロックの物理アドレスとしてホスト２に通知する。ブロック番号４をリード対象ブロックの物理アドレスとて指定するリード要求を受信した場合には、このブロック番号４はブロック番号“５”に変換されるので、コントローラ４は、ブロック番号“５”のブロックからデータをリードする。
【０２６９】
同様に、アクセス対象のブロックのブロック番号が５である場合には、このブロック番号は＋１され、ブロック番号“６”に変換される。このため、書き込み対象のブロックのブロック番号が５である場合には、データは、実際にはブロック番号“６”のブロックに書き込まれる。コントローラ４は、ブロック番号５をデータ書き込み先ブロックの物理アドレスとしてホスト２に通知する。ブロック番号５をリード対象ブロックの物理アドレスとて指定するリード要求を受信した場合には、このブロック番号５はブロック番号“６”に変換されるので、コントローラ４は、ブロック番号“６”のブロックからデータをリードする。
【０２７０】
図４４は、ホスト２内のフラッシュトランスレーション部２Ａとフラッシュストレージデバイス３内の不良ブロックトランスレーション部２４との関係を示す。
【０２７１】
ホスト２側では、フラッシュトランスレーション部２Ａは、データの書き込みを行う場合、このデータを識別するＴａｇ（例えば、ＬＢＡ）を含むライトコマンドをフラッシュストレージデバイス３に送信する。なお、スーパーブロック用のＡＰＩを使用する場合には、フラッシュトランスレーション部２Ａは、データを識別するＴａｇ（例えば、ＬＢＡ）と、並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）のブロックアドレスとを指定するライトコマンド（Write without Page Address）をフラッシュストレージデバイス３に送信する。並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）は一つのスーパーブロックによって実現されているので、並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）のブロックアドレスは、このスーパーブロックのスーパーブロックアドレスである。
【０２７２】
フラッシュストレージデバイス３側は、不良ブロックトランスレーション部２４、フラッシュＩ／Ｏ制御回路１３、不良情報管理テーブル３３、ＮＡＮＤ型フラッシュメモリダイから構成されている。また、フラッシュストレージデバイス３内ではスーパーブロック毎に使用可能または使用不可能を示す少なくとも２ビットの情報を保持する不良情報が、不良情報管理テーブル３３で管理されている。
【０２７３】
ホスト２側から、書き込むべきデータを識別するための情報であるＴａｇ（例えば、ＬＢＡ）を含むライト要求を受信した場合、不良ブロックトランスレーション部２４は、不良情報を参照して、書き込み対象のスーパーブロックに含まれる全ての非不良ブロックが書き込み対象のスーパーブロックの先頭から連続して論理的に配置されるようにアクセス対象ブロックのアドレスを変換するアドレス変換を実行することによって、書き込み対象のスーパーブロック内の非不良ブロックを書き込み先ブロックとして選択し、選択されたブロック内の書き込み先位置（書き込み先ページ、このページ内のオフセット）を決定する。
【０２７４】
なお、並列単位のブロックアドレス（スーパーブロックアドレス）を指定するライトコマンドをホスト２から受信した場合、不良ブロックトランスレーション部２４は、不良情報を参照して、この指定されたブロックアドレス（スーパーブロックアドレス）を有するスーパーブロックを書き込み対象のスーパーブロックとして選択する。
【０２７５】
そして、不良ブロックトランスレーション部２４は、書き込み先ブロックが属するダイのダイ識別子（Ｄｉｅ  ＩＤ）、書き込み先ブロックのブロックアドレス（Ｒａｗ  Ｂｌｏｃｋ）、書き込み先ページ（Ｒａｗ  Ｐａｇｅ）、書き込み先ページ内のオフセット（Ｏｆｆｓｅｔ）を指定する書き込み指示をフラッシュＩ／Ｏ制御回路１３に送信する。
【０２７６】
また、不良ブロックトランスレーション部２４は、アドレス変換前のアクセス対象ブロックおよび書き込み先位置の双方を示す物理アドレスと、Ｔａｇ（例えば、ＬＢＡ）とを、ホスト２に通知する。この物理アドレスは、書き込み先のスーパーブロックを示す並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）と、このスーパーブロック内のオフセット（Ｏｆｆｓｅｔ）とによって表されてもよい。書き込み先のスーパーブロックを示す並列単位（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ）は、書き込み先のスーパーブロックのスーパーブロックアドレスである。
【０２７７】
書き込み指示を受信したフラッシュＩ／Ｏ制御回路１３は、書き込み指示に基づいて、書き込み先位置にデータを書き込む。
【０２７８】
ホスト２側では、フラッシュトランスレーション部２Ａは、物理アドレス（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ、Ｏｆｆｓｅｔ）と、Ｔａｇ（例えば、ＬＢＡ）とを受信すると、ホスト２で管理されているＬＵＴを更新し、受信した物理アドレスを受信したＴａｇ（例えば、ＬＢＡ）にマッピングする。
【０２７９】
フラッシュトランスレーション部２Ａは、リード要求を行う場合、物理アドレス（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ、Ｏｆｆｓｅｔ）を指定するリード要求をフラッシュストレージデバイス３に送信する。
【０２８０】
フラッシュストレージデバイス３側では、物理アドレス（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ、Ｏｆｆｓｅｔ）を指定するリード要求をホスト２から受信した場合、不良ブロックトランスレーション部２４は、上述のアドレス変換を実行して、物理アドレス（Ｐａｒａｌｌｅｌ  Ｕｎｉｔ、Ｏｆｆｓｅｔ）を、ダイ識別子（Ｄｉｅ  ＩＤ）、ブロックアドレス（Ｒａｗ  Ｂｌｏｃｋ）、ページアドレス（Ｒａｗ  Ｐａｇｅ）、ページ内のオフセット（Ｏｆｆｓｅｔ）に変換する。そして、不良ブロックトランスレーション部２４は、ダイ識別子（Ｄｉｅ  ＩＤ）、ブロックアドレス（Ｒａｗ  Ｂｌｏｃｋ）、ページアドレス（Ｒａｗ  Ｐａｇｅ）、ページ内のオフセット（Ｏｆｆｓｅｔ）を指定する書き込み指示をフラッシュＩ／Ｏ制御回路１３に送信する。フラッシュＩ／Ｏ制御回路１３は、ダイ識別子（Ｄｉｅ  ＩＤ）、ブロックアドレス（Ｒａｗ  Ｂｌｏｃｋ）、ページアドレス（Ｒａｗ  Ｐａｇｅ）、ページ内のオフセット（Ｏｆｆｓｅｔ）に基づいて、データをリードする。
【０２８１】
図４５は、ホスト２（計算機システム）の構成例を示す。
【０２８２】
このホスト２（計算機システム）は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２８３】
プロセッサ１０１は、この計算機システムの各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のフラッシュストレージデバイス３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３、ドライバ４４、等を含む。ここで、ファイルシステム４３にはフラッシュストレージマネージャ４５が含まれる。なお、このフラッシュストレージマネージャ４５は、ファイルシステム４３ではなく、ドライバ４４に含まれていてもよい。
【０２８４】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２８５】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２８６】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のフラッシュストレージデバイス３が複数のコネクタ１０７Ａにそれぞれ接続されてもよい。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、またはＲＡＩＤコントローラ等である。
【０２８７】
ＥＣ１０８は、計算機システムの電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて計算機システムをパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。
【０２８８】
フラッシュストレージマネージャ４５は、上述のフラッシュトランスレーション部２Ａとして機能するプログラムモジュールである。フラッシュストレージマネージャ４５は、ユーザアドレス（論理アドレス）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理する上述のＬＵＴを有する。ユーザアドレス（論理アドレス）としてＬＢＡが使用される場合には、フラッシュストレージマネージャ４５はドライバ４４内に設けられてもよい。
【０２８９】
フラッシュストレージマネージャ４５は、書き込むべきデータ（ライトデータ）を識別するためのユーザアドレス（論理アドレス）とこのライトデータの長さとを指定するライトコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージマネージャ４５は、不良ブロックを除くブロックの中からフラッシュストレージデバイス３によって選択された書き込み先ブロックおよび書き込み先ブロック内の書き込み先位置の双方を示す物理アドレスと、上述のユーザアドレス（論理アドレス）とをフラッシュストレージデバイス３から受信し、ＬＵＴを更新してこのユーザアドレス（論理アドレス）にこの物理アドレスをマッピングする。受信する物理アドレスは、詳しくは、書き込み対象の一つの並列単位に含まれる不良ブロック以外のブロックの中からライトデータのための書き込み先ブロックとしてフラッシュストレージデバイス３によって選択された書き込み先ブロックおよびこのライトデータが書き込まれた書き込み先ブロック内の物理記憶位置の双方を示す。
【０２９０】
また、フラッシュストレージマネージャ４５は、ＬＵＴを参照して、リード対象のデータに対応するユーザアドレス（論理アドレス）にマッピングされている物理アドレスを取得し、この物理アドレスを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０２９１】
図４６は、フラッシュストレージデバイス３を内蔵するホスト（計算機システム）２の構成例を示す。
【０２９２】
この計算機システムは、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のフラッシュストレージデバイス３は筐体２０１内に配置されても良い。この場合、各フラッシュストレージデバイス３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２９３】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２９４】
図４７のフローチャートは、ホスト（計算機システム）２によって実行される書き込み動作の手順を示す。
【０２９５】
ホスト２のプロセッサ１０１は、メインメモリ１０２に格納されたコンピュータプログラム（ここでは、フラッシュストレージマネージャ４５等）を実行することによって以下の手順を実行する。
【０２９６】
すなわち、プロセッサ１０１は、ライトコマンドを送信する必要があるか否かを判定し（ステップＳ２０１）、ライトコマンドを送信する必要があるならば（ステップＳ２０１のＹＥＳ）、ユーザアドレス、フラッシュアドレス、長さを指定するライトコマンドをフラッシュストレージデバイス３に送信する（ステップＳ２０２）。
【０２９７】
その後、プロセッサ１０１は、フラッシュストレージデバイス３からの書き込み動作完了のレスポンス（ユーザアドレス、フラッシュアドレス、長さを含む）を受信したならば（ステップＳ２０３のＹＥＳ）、ＬＵＴを更新する（ステップＳ２０４）。そして、プロセッサ１０１は、旧データに対応する物理アドレスを指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して記旧データを無効化すべきこと（または旧データを参照している論理アドレスの数を示す参照カウントを減らすべきこと）をフラッシュストレージデバイス３に指示する（ステップＳ２０５）。
【０２９８】
図４８のフローチャートは、ホスト２によって実行されるリード動作の手順を示す。
【０２９９】
プロセッサ１０１は、リードコマンドを送信する必要があるか否かを判定し（ステップＳ３０１）、リードコマンドを送信する必要があるならば（ステップＳ３０１のＹＥＳ）、フラッシュアドレス、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する（ステップＳ３０２）。
【０３００】
その後、プロセッサ１０１は、リードデータを受信したか否かを判定し（ステップＳ３０３）、リードデータを受信したならば（ステップＳ３０３のＹＥＳ）、動作は完了する。
【０３０１】
図４９のフローチャートは、ホスト２によって実行される参照カウントインクリメント／デクリメント処理の手順を示す。
【０３０２】
プロセッサ１０１は、旧データの参照数を増やすためのデュプリケーションコマンドを送信する必要があるか否かを判定し（ステップＳ４０１）、デュプリケーションコマンドを送信する必要があるならば（ステップＳ４０１のＹＥＳ）、デュプリケーションコマンドをフラッシュストレージデバイス３に送信する（ステップＳ４０２）。
【０３０３】
また、プロセッサ１０１は、旧データの参照数を減らすためのＴｒｉｍコマンドを送信する必要があるか否かを判定し（ステップＳ４０３）、Ｔｒｉｍコマンドを送信する必要があるならば（ステップＳ４０３のＹＥＳ）、Ｔｒｉｍコマンドをフラッシュストレージデバイス３に送信する（ステップＳ４０４）。
【０３０４】
以上説明したように、本実施形態によれば、ホスト（計算機システム）２は、ライトデータを識別するための論理アドレスを指定するライト要求をストレージデバイス３に送信し、不良ブロックを除くブロックの中からライトデータのための書き込み先ブロックとしてストレージデバイス３によって選択された書き込み先ブロックおよびライトデータが書き込まれた書き込み先ブロック内の物理記憶位置の双方を示す物理アドレスと、この論理アドレスとを、ストレージデバイス３から受信する。そして、ホスト（計算機システム）２は、ＬＵＴを更新して、受信した物理アドレスを受信した論理アドレスにマッピングする。したがって、不良ブロック以外の物理記憶位置を直接的に示す物理アドレスをホスト（計算機システム）２のＬＵＴによって管理することができるので、ホスト（計算機システム）２は、必要に応じて、この物理記憶位置を直接的に示す物理アドレスを指定するリード要求をストレージデバイス３に送信することができる。この結果、ストレージデバイス３側では、不良ブロックをこの不良ブロックが属するダイ内の他のブロックで置換することなく、不良ブロック以外のブロックに対するデータ書き込みおよび読み出し動作を正常に実行することができる。よって、たとえ不良ブロックの数が増えても、大量の置き換え情報を管理する必要はない。また、置換処理のためのアドレス変換処理も不要であるので、リードレイテンシを低減することができる。よって、システム全体のＩ／Ｏ性能を向上することが可能となる。
【０３０５】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０３０６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３０７】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…ＧＣ動作制御部。
【図１】
2019082817.tif 000003
【図２】
2019082817.tif 000004
【図３】
2019082817.tif 000005
【図４】
2019082817.tif 000006
【図５】
2019082817.tif 000007
【図６】
2019082817.tif 000008
【図７】
2019082817.tif 000009
【図８】
2019082817.tif 000010
【図９】
2019082817.tif 000011
【図１０】
2019082817.tif 000012
【図１１】
2019082817.tif 000013
【図１２】
2019082817.tif 000014
【図１３】
2019082817.tif 000015
【図１４】
2019082817.tif 000016
【図１５】
2019082817.tif 000017
【図１６】
2019082817.tif 000018
【図１７】
2019082817.tif 000019
【図１８】
2019082817.tif 000020
【図１９】
2019082817.tif 000021
【図２０】
2019082817.tif 000022
【図２１】
2019082817.tif 000023
【図２２】
2019082817.tif 000024
【図２３】
2019082817.tif 000025
【図２４】
2019082817.tif 000026
【図２５】
2019082817.tif 000027
【図２６】
2019082817.tif 000028
【図２７】
2019082817.tif 000029
【図２８】
2019082817.tif 000030
【図２９】
2019082817.tif 000031
【図３０】
2019082817.tif 000032
【図３１】
2019082817.tif 000033
【図３２】
2019082817.tif 000034
【図３３】
2019082817.tif 000035
【図３４】
2019082817.tif 000036
【図３５】
2019082817.tif 000037
【図３６】
2019082817.tif 000038
【図３７】
2019082817.tif 000039
【図３８】
2019082817.tif 000040
【図３９】
2019082817.tif 000041
【図４０】
2019082817.tif 000042
【図４１】
2019082817.tif 000043
【図４２】
2019082817.tif 000044
【図４３】
2019082817.tif 000045
【図４４】
2019082817.tif 000046
【図４５】
2019082817.tif 000047
【図４６】
2019082817.tif 000048
【図４７】
2019082817.tif 000049
【図４８】
2019082817.tif 000050
【図４９】
2019082817.tif 000051