(57)【特許請求の範囲】
【請求項１】
不揮発性メモリと、
ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理するための論物変換テーブルと、
前記ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する無効データ管理ログと、
前記ホスト装置から無効な論理アドレスのデータを完全削除する命令を受信すると、前記受信した命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換え、ブロック消去する場合、前記ブロック消去の対象となった第１物理ブロックに対応する物理アドレスを前記無効データ管理ログから削除する制御部と、
を備えることを特徴とする不揮発性記憶装置。
【請求項２】
前記無効データ管理ログは、使用中ブロックであるアクティブブロック中の無効データ、未使用ブロックであるフリーブロック中の無効データを含む無効データを管理することを特徴とする請求項１に記載の不揮発性記憶装置。
【請求項３】
前記制御部は、ＮＡＮＤ整理時に前記ブロック消去を実行することを特徴とする請求項１または請求項２に記載の不揮発性記憶装置。
【請求項４】
前記制御部は、前記無効データ管理ログから収集した無効データのサイズと前記フリーブロックのサイズの合計が所定値以上となった場合に前記ＮＡＮＤ整理を実行することを特徴とする請求項３に記載の不揮発性記憶装置。
【請求項５】
揮発性メモリをさらに備え、
前記制御部は、前記受信した命令に含まれる論理アドレスに対応する物理アドレスによる削除領域が物理ブロックの消去単位に満たない領域を含む場合、前記領域に対応する物理アドレスを有する第２物理ブロックに含まれる有効データを前記揮発性メモリに読み出し、前記第２物理ブロックをブロック消去後、前記第２物理ブロックに含まれる物理アドレスを前記無効データ管理ログから削除する
請求項１乃至請求項４の何れか１項に記載の不揮発性記憶装置。
【請求項６】
前記不揮発性メモリは、データが消去された消去状態を示す閾値電圧分布と、前記消去状態を示す閾値電圧分布よりも高い閾値電圧分布であってデータが書き込まれた書き込み状態を示す１以上の閾値電圧分布とにより１以上の数のビットのデータを記憶するメモリセルを複数配列してなり、物理アドレスを指定することによりリードおよびライトが行われ、
前記制御部は、前記消去動作において、前記消去状態を示す閾値電圧分布に対応する第１の閾値電圧に書き換えることと、前記消去状態を示す閾値電圧分布よりも高い第２の閾値電圧に書き換えることとを少なくとも１回行うことを特徴とする請求項１乃至請求項５の何れか１項に記載の不揮発性記憶装置。
【請求項７】
前記不揮発性メモリは、データが消去された消去状態を示す閾値電圧分布と、前記消去状態を示す閾値電圧分布よりも高い閾値電圧分布であってデータが書き込まれた書き込み状態を示す１以上の閾値電圧分布とにより１以上の数のビットのデータを記憶するメモリセルを複数配列してなり、物理アドレスを指定することによりリードおよびライトが行われ、
前記制御部は、前記上書き動作において、前記消去状態を示す閾値電圧分布よりも高い第３の閾値電圧に書き換えることを特徴とする請求項１乃至請求項５の何れか１項に記載の不揮発性記憶装置。
【請求項８】
前記第３の閾値電圧は、メモリセルの書き込み状態のうち最も高い閾値電圧分布に対応することを特徴とする請求項７に記載の不揮発性記憶装置。
【請求項９】
不揮発性メモリの制御方法であって、
ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理するための論物変換テーブルと、前記ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する無効データ管理ログを管理し、
前記ホスト装置から無効な論理アドレスのデータを完全削除する命令を受信した場合、前記受信した命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換え、
ブロック消去する場合、前記ブロック消去の対象となった第１物理ブロックに対応する物理アドレスを前記無効データ管理ログから削除する
不揮発性メモリの制御方法。
【請求項１０】
前記ホストは、前記命令に、上書きと消去と上書きおよび消去との何れを実行するかを指定可能であることを特徴とする請求項９に記載の不揮発性メモリの制御方法。
【請求項１１】
前記命令に、上書き回数、消去回数、上書きおよび消去の繰り返し回数を指定可能であることを特徴とする請求項１０に記載の不揮発性メモリの制御方法。
【請求項１２】
前記命令に、消去ベリファイの有無、ソフトプログラムの有無を指定可能であることを特徴とする請求項１０に記載の不揮発性メモリの制御方法。
【請求項１３】
ＮＡＮＤ整理時に前記ブロック消去を実行することを特徴とする請求項９乃至請求項１２の何れか１項に記載の不揮発性メモリの制御方法。
【請求項１４】
前記無効データ管理ログから収集した無効データのサイズと前記フリーブロックのサイズの合計が所定値以上となった場合に前記ＮＡＮＤ整理を実行する請求項１３に記載の不揮発性メモリの制御方法。
【請求項１５】
前記受信した命令に含まれる論理アドレスに対応する物理アドレスによる削除領域が物理ブロックの消去単位に満たない領域を含む場合、前記領域に対応する物理アドレスを有する第２物理ブロックに含まれる有効データを読み出し、
前記第２物理ブロックを消去後、前記第２物理ブロックに含まれる物理アドレスを前記無効データ管理ログから削除し、
前記読み出した有効データを前記不揮発性メモリへ書き込む
請求項９乃至請求項１４の何れか１項に記載の不揮発性メモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性記憶装置及び不揮発性メモリの制御方法に関する。
【背景技術】
【０００２】
ホスト装置のオペレーティングシステム（ＯＳ）上において、データが削除される処理が実行された場合、ＯＳ上でのデータの管理情報が削除されるだけで、不揮発性記憶装置では実際にはデータが削除されないようにする方式がある。この方式では、不揮発性記憶装置としてＨＤＤ（Hard  Disk  Drive）が採用されている場合、ＯＳ上でのデータ削除のたびに不揮発性記憶装置上で削除処理が行われないので、削除処理が行われない分、動作のパフォーマンスが向上する。
【０００３】
しかしながら、この方式によれば、ＯＳ上では削除したはずの無効データが、不揮発性記憶装置上では、まだ有効なデータであると認識されている。
【０００４】
この問題に対し、近年、不揮発性記憶装置に対してＯＳにとって不要な記憶領域をＯＳから不揮発性記憶装置に対し削除通知として通知できる方式が開発されてきている。不揮発性記憶装置側では、削除通知によって通知された記憶領域を削除することができる。しかし、不揮発性記憶装置では、削除通知によって通知された記憶領域のデータそのものを消去処理によって消去するとは限らず、そのデータ自体が残っている場合がある。このため、ユーザによって削除されていたデータであっても、不揮発性記憶装置を分解し、内部の不揮発性メモリを解析することによって、暗号化されていないユーザデータや、暗号強度の弱いユーザデータを復元されてしまう恐れがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１２８９９８号公報
【特許文献２】米国特許出願公開第１２／７７５７６７号明細書
【非特許文献】
【０００６】
【非特許文献１】ATA/ATAPI Command Set-2 (ACS-2) d2015r6 Feb.22.2011  ９８ページ目〜９９ページ目、５０ページ目http://www.t13.org/Documents/UploadedDocuments/docs2011/d2015r6-ATAATAPI_Command_Set_-_2_ACS-2.pdf
【非特許文献２】http://www.zdnet.com/blog/storage/mac-fail-ssd-security/1293
【非特許文献３】9th USENIX Conference on File and Storage Technologies (FAST '11), 2011."Reliably Erasing Data From Flash-Based Solid State Drives"Michael Wei, Laura M. Grupp, Frederick E. Spada, Steven Swanson Feb.16, 2011 http://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の一つの実施形態は、削除済のデータを解読困難にする不揮発性記憶装置及び不揮発性メモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一つの実施形態によれば、不揮発性記憶装置は、ホスト装置の外部記憶装置として機能する。不揮発性記憶装置は、リード及びライト可能な不揮発性メモリと、論物変換テーブルと、無効データ管理ログと、制御部とを備える。論物変換テーブルは、ホスト装置が指定する論理アドレスと前記不揮発性メモリの物理アドレスとの対応を示す論物変換情報を管理する。無効データ管理ログは、ホスト装置にとって無効なデータであって、前記不揮発性メモリで消去されずに保持されているデータである無効データの論物変換情報を管理する。制御部は、ホスト装置から無効な論理アドレスのデータを完全削除する命令を受信すると、前記受信した命令に含まれる論理アドレスに対応する物理アドレスを前記無効データ管理ログから抽出し、抽出した前記不揮発性メモリ上の物理アドレスのデータを消去または上書きし、この命令に含まれる論理アドレスと物理アドレスとの対応関係を無効にするよう前記論物変換テーブルを書き換える。
【図面の簡単な説明】
【０００９】
【図１】図１は、コンピュータシステムの機能構成例を示すブロック図である。
【図２】図２は、コンピュータシステムの外観的構成を示す図である。
【図３】図３は、コンピュータシステムの他の外観的構成を示す図である。
【図４】図４は、ＳＳＤの機能構成例を示すブロック図である。
【図５】図５は、ＮＡＮＤメモリチップの機能構成例を示すブロック図である。
【図６】図６は、ＮＡＮＤメモリチップに含まれる１個のプレーンの構成例を示す回路図である。
【図７】図７は、４値データ記憶方式でのしきい値分布を示す図である。
【図８】図８は、下位ページの書き込みの際のしきい値分布を示す図である。
【図９】図９は、上位ページの書き込みの際のしきい値分布を示す図である。
【図１０】図１０は、ＳＳＤの管理情報を示す図である。
【図１１】図１１は、ＬＢＡとＳＳＤの管理単位との関係を示す図である。
【図１２】図１２は、ＬＢＡから物理アドレスを特定する手順を示すフローチャートである。
【図１３】図１３は、無効データログを示す図である。
【図１４】図１４は、ＳＳＤの読み出し動作例を示すフローチャートである。
【図１５】図１５は、ＳＳＤの読み出し動作例を示すフローチャートである。
【図１６】図１６は、ＳＳＤの書き込み動作例を示すフローチャートである。
【図１７】図１７は、ＳＳＤの書き込み動作例を示すフローチャートである。
【図１８】図１８は、ＳＳＤの書き込み動作例を示すフローチャートである。
【図１９】図１９は、トラック管理領域へトラック書き込みを行う場合の概略を示す概念図である。
【図２０】図２０は、トラック管理領域へトラック書き込みを行う場合の動作手順を示すフローチャートである。
【図２１】図２１は、クラスタ管理領域へトラック書き込みを行う場合の概略を示す概念図である。
【図２２】図２２は、クラスタ管理領域へトラック書き込みを行う場合の動作手順を示すフローチャートである。
【図２３】図２３は、トラック管理領域へクラスタ書き込みを行う場合の概略を示す概念図である。
【図２４】図２４は、トラック管理領域へクラスタ書き込みを行う場合の動作手順を示すフローチャートである。
【図２５】図２５は、クラスタ管理領域へクラスタ書き込みを行う場合の概略を示す概念図である。
【図２６】図２６は、クラスタ管理領域へクラスタ書き込みを行う場合の動作手順を示すフローチャートである。
【図２７】図２７は、ＮＡＮＤ整理を行う場合の動作手順を示すフローチャートである。
【図２８】図２８は、ＮＡＮＤ整理対象リストを示す図である。
【図２９】図２９は、削除処理Ａと削除処理Ｂを選択させるホストからの命令の一例を示す図である。
【図３０】図３０は、削除通知を受信したときのＳＳＤの動作例を示すフローチャートである。
【図３１】図３１は、削除通知バッファを示す図である。
【図３２】図３２は、削除通知を受信したときのＳＳＤの動作例を示すフローチャートである。
【図３３】図３３は、削除処理Ａを実行するときのＳＳＤの動作例を示すフローチャートである。
【図３４】図３４は、削除処理Ｂを実行するときのＳＳＤの動作例を示すフローチャートである。
【図３５】図３５は、トラック単位データ無効化処理手順を示すフローチャートである。
【図３６】図３６は、クラスタ単位データ無効化処理手順を示すフローチャートである。
【図３７】図３７は、トラック単位完全消去処理手順を示すフローチャートである。
【図３８】図３８は、クラスタ単位完全消去処理手順を示すフローチャートである。
【図３９】図３９は、消去対象一時リストを示す図である。
【図４０】図４０は、セクタ単位完全消去処理手順を示すフローチャートである。
【図４１】図４１は、削除処理Ａと削除処理Ｂを選択させるホストからの命令の他の例を示す図である。
【図４２】図４２は、削除処理Ｂを概念的に示す図である。
【図４３】図４３は、消去ベリファイを行った際の閾値分布を示す図である。
【図４４】図４４は、ソフトプログラムを行った際の閾値分布を示す図である。
【図４５】図４５は、難読化のための消去処理の一例を行う際の閾値分布を示す図である。
【図４６】図４６は、難読化のための消去処理の他の例を行う際の閾値分布を示す図である。
【図４７】図４７は、難読化のための上書き破壊処理の一例を行う際の閾値分布を示す図である。
【図４８】図４８は、難読化のための上書き破壊処理の他の例を行う際の閾値分布を示す図である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、実施形態にかかる不揮発性記憶装置及び不揮発性メモリの制御方法を詳細に説明する。なお、これら実施形態により本発明が限定されるものではない。
【００１１】
（第１の実施形態）
まず、不揮発性記憶装置としてのＳＳＤ（Solid State Drive）２を用いた情報処理装置の全体構成について説明する。図１に情報処理装置の一例としてのコンピュータシステム１の構成を示す。本コンピュータシステム１は、不揮発性記憶装置としてのＳＳＤ２と、ホスト装置（以下、単にホストという）３と、ＳＳＤ２とホスト３とを結ぶメモリインタフェース１９とから構成されている。ＳＳＤ２はインターフェース１９を介してホスト３に接続されている。本実施の形態では、インターフェース１９として、ＡＴＡ（Advanced Technology Attachment）インターフェースを用いるが、ＵＳＢ（Universal Serial Bus）など他のインターフェースであってもよい。ＣＰＵ（制御回路）４がホスト３における中央演算処理装置であり、ホスト３における種々の演算及び制御はＣＰＵ４によって行われる。ＣＰＵ４はサウスブリッジ７を介してＳＳＤ２や、ＤＶＤ−ＲＯＭなどの光学ドライブ１０の制御を行う。ＣＰＵ４は、ノースブリッジ５を介して、メインメモリ６の制御を行う。メインメモリ６は、例えば、ＤＲＡＭで構成されている。
【００１２】
ユーザは、キーボード１４やマウス１５などの入力装置を通してホスト３の制御を行い、キーボード１４やマウス１５からの信号はＵＳＢ（Universal Serial Bus）コントローラ１３及びサウスブリッジ７を介してＣＰＵ４で処理される。ＣＰＵ４は、ノースブリッジ５及び表示コントローラ８を介してディスプレイ（表示装置）９に画像データやテキストデータなどを送る。ユーザは、ディスプレイ９を介してホスト３からの画像データやテキストデータなどを視認することができる。
【００１３】
ＣＰＵ４は、ＢＩＯＳ（Basic Input/Output System）−ＲＯＭ１１に格納されたＢＩＯＳを実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。その他、ＣＰＵ４は、サウスブリッジ７を介してＬＡＮ（Local Area Network）コントローラ１２を制御する。
【００１４】
メインメモリ６は、ＣＰＵ４の作業用メモリとして機能し、ＯＳ（Operating System）１６を格納する記憶領域を含んでいる。ＯＳ１６は、一般的に知られているように、ホスト３の入出力装置を管理し、ディスクやメモリを管理し、ソフトウェアがホスト３のハードウェアを利用可能にするための制御を行うなど、ホスト３全体を管理するプログラムである。ＯＳ１６は、ホスト３が電源オフとなっている時は、ＳＳＤ２のＮＡＮＤ型フラッシュメモリ２４に格納されているが、ホスト３の起動時又はプログラム起動時に、ＮＡＮＤ型フラッシュメモリ２４からＤＲＡＭ６にロードされる。
【００１５】
次に、コンピュータシステム１の構成例について説明する。コンピュータシステム１は、例えば、デスクトップコンピュータやノートブック型のポータブルコンピュータとして実現し得る。図２は、コンピュータシステム１としてのデスクトップコンピュータの概略図である。
【００１６】
デスクトップコンピュータ１は、コンピュータ本体１８、ディスプレイ９、キーボード１４、及びマウス１５などを備えている。コンピュータ本体１８は、主要なハードウェアが搭載されたマザーボード１７、ＳＳＤ２、及び電源装置４などを備えている。ＳＳＤ２は、ＳＡＴＡケーブルを介してマザーボード１７に物理的に接続され、マザーボード１７上に実装されたサウスブリッジ７を介して、同じくマザーボード１７上に実装されたＣＰＵ４に電気的に接続されている。電源装置４は、デスクトップコンピュータ１で使用される各種電源電圧を発生し、電源ケーブルを介してマザーボード１７やＳＳＤ２などに電源を供給する。
【００１７】
図３は、コンピュータシステム１としてのポータブルコンピュータの概略図である。ポータブルコンピュータ１は、コンピュータ本体２１、及びディスプレイユニット２２から構成されている。ディスプレイユニット２２は、例えばＬＣＤ（Liquid Crystal Display）で構成される表示装置９が組み込まれている。ディスプレイユニット２２は、コンピュータ本体２１に対し、この本体２１の上面が露出される開放位置と本体２１の上面を覆う閉塞位置との間を回動自由に取り付けられている。本体２１は薄い箱形の筐体を有しており、その上面には、電源スイッチ２３、キーボード１４、タッチパッド２０等が配置されている。また、本体２１も、デスクトップコンピュータと同様に、ＳＳＤ２、マザーボード、及び電源装置などを備えている。
【００１８】
なお、本実施形態を適用する情報処理装置としては、コンピュータシステム１の他に、スチルカメラ或いはビデオカメラなどの撮像装置などであってもよいし、ゲーム機器やカーナビゲーションシステムなどであってもよい。
【００１９】
図４に不揮発性記憶装置としてのＳＳＤ２のブロック図を示す。ＳＳＤ２は、不揮発性半導体メモリとしてのＮＡＮＤ型フラッシュメモリ（以下ＮＡＮＤメモリと略す）２４と、ＡＴＡインターフェース１９を介してホスト３との信号の送受信を行うＩＦＣ（インターフェースコントローラ）３０と、ＩＦＣ３０とＮＡＮＤメモリ２４との中間バッファとして機能するキャシュメモリ（ＣＭ）３２を有するＲＡＭ（Random  Access  Memory）２５と、ＮＡＮＤメモリ２４およびＲＡＭ２５の管理、制御、およびＩＦＣ３０の制御を司るＳＳＤコントローラ（ＳＳＤＣ）２６と、これら構成要素を接続するバス２９とを備える。
【００２０】
ＲＡＭ２５としては、ＤＲＡＭ（Dynamic  Random  Access  Memory）のほかに、ＳＲＡＭ（Static  Random  Access  Memory）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＰＲＡＭ（Phase  Change  Random  Access  Memory）などを採用することができる。
【００２１】
ＲＡＭ２５は、ホスト３とＮＡＮＤメモリ２４間でのデータ転送用キャッシュとして機能するキャッシュメモリ（ＣＭ）３２を有する。また、ＲＡＭ２５は、管理情報３１を記憶するためのメモリおよび作業領域用メモリとして機能する。ＲＡＭ２５で管理される管理情報３１（管理テーブル）は、ＮＡＮＤメモリ２４に記憶されている各種管理テーブルが起動時などに展開されたものであり、定期的あるいは電源断時にＮＡＮＤメモリ２４に退避保存される。また、ＲＡＭ２５では、削除通知コマンドバッファ４１，無効データログ６０、ＮＡＮＤ整理対象リスト８０が管理されている。これらの詳細は、後述する。
【００２２】
ＳＳＤＣ２６は、ＮＡＮＤメモリ２４に記憶されたシステムプログラム（ファームウエア）を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト３からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト３−ＮＡＮＤメモリ２４間のデータ転送制御、ＲＡＭ２５およびＮＡＮＤメモリ２４に記憶された各種管理情報３１の更新、管理などを実行する。
【００２３】
ホスト３はＳＳＤ１０に対し、リード要求またはライト要求を発行する際には、ＡＴＡインタフェース１９を介して論理アドレスとしてのＬＢＡ（Logical  Block  Addressing）を入力する。ＬＢＡは、セクタ（サイズ：例えば５１２Ｂ）に対して０からの通し番号をつけた論理アドレスである。
【００２４】
ＩＦＣ３０は、ホスト３からの読み出し命令、書き込み命令、その他命令およびデータを受信し、受信した命令やデータをＳＳＤＣ２６に送信したり、ＳＳＤＣ２６の制御によりＲＡＭ２５にデータを送信したりする機能を持つ。
【００２５】
［ＮＡＮＤメモリ構成］
ＮＡＮＤメモリ２４は、１以上の個数のＮＡＮＤメモリチップ２７よりなる。ＮＡＮＤメモリ２４は、ホスト３によって指定されたユーザデータを記憶したり、ＲＡＭ２５で管理される管理情報をバックアップ用に記憶したりする。ＮＡＮＤメモリ２４は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。ＮＡＮＤメモリ２４のメモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（Metal Oxide Semiconductor Field Effect Transistor）から構成される。
【００２６】
積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（浮遊ゲート電極）、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。本実施形態では、個々のメモリセルが上位ページ及び下位ページを使用しての２bit/cellの４値記憶方式の書き込み方式である場合について説明するが、１bit/cellの２値記憶、あるいは３bit/cell以上の多値記憶方式の書き込み方式を採用してもよい。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、ＭＯＮＯＳ（Metal-Oxide-Nitride-Oxide-Silicon）型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。ＭＯＮＯＳ型のメモリセルトランジスタについても同様に、１ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開２０１０−１６１１９９号公報や特開２０１１−２９５８６号公報に記述されるような３次元的にメモリセルが配置された半導体記憶媒体であってもよい。
【００２７】
図５は、ＮＡＮＤメモリチップ２７の構成を示している。ＮＡＮＤメモリチップ２７は、データを記憶するメモリセルをマトリックス状に配置してなるメモリセルアレイ３３を備えている。メモリセルアレイ３３は複数のビット線と複数のワード線と共通ソース線を含み、ビット線とワード線の交点に電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。
【００２８】
メモリセルアレイ３３には、ビット線を制御するためのビット線制御回路３４、及びワード線電圧を制御するためのワード線制御回路３６が接続されている。ビット線制御回路３４は、ビット線を介してメモリセルアレイ３３中のメモリセルのデータを読み出す一方、ビット線を介してメモリセルアレイ３３中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行う。
【００２９】
ビット線制御回路３４には、カラムデコーダ３５、データ入出力バッファ３９及びデータ入出力端子３９ａが接続されている。メモリセルアレイ３３から読み出されたメモリセルのデータは、ビット線制御回路３４、データ入出力バッファ３９を介してデータ入出力端子３９ａから外部へ出力される。また、外部からデータ入出力端子３９ａに入力された書き込みデータは、データ入出力バッファ３９を介して、カラムデコーダ３５によってビット線制御回路３４に入力され、指定されたメモリセルへの書き込みが行われる。
【００３０】
また、メモリセルアレイ３３、ビット線制御回路３４、カラムデコーダ３５、データ入出力バッファ３９、及びワード線制御回路３６は、制御回路３７に接続されている。制御回路３７は、制御信号入力端子３８に入力される制御信号に従い、メモリセルアレイ３３、ビット線制御回路３４、カラムデコーダ３５、データ入出力バッファ３９、及びワード線制御回路３６を制御するための制御信号及び制御電圧を発生させる。ＮＡＮＤメモリチップ２７のうち、メモリセルアレイ３３以外の部分をまとめてＮＡＮＤＣ２８と呼ぶことにする。
【００３１】
図６は、図５に示すメモリセルアレイ３３の構成を示している。メモリセルアレイ３３はＮＡＮＤセル型メモリセルアレイであり、複数のＮＡＮＤセルを含んで構成されている。１つのＮＡＮＤセルは、直列接続されたメモリセルからなるＭＳ（メモリストリング）と、その両端に接続される選択ゲートＳ１、Ｓ２とにより構成されている。選択ゲートＳ１はビット線ＢＬに接続され、選択ゲートＳ２はソース線ＳＲＣに接続されている。同一のロウに配置されたメモリセルＭＣの制御ゲートはワード線ＷＬ0〜ＷＬm-1に共通接続されている。また、第１の選択ゲートＳ１はセレクト線ＳＧＤに共通接続され、第２の選択ゲートＳ２はセレクト線ＳＧＳに共通接続されている。
【００３２】
メモリセルアレイ３３は、１または複数のプレーンを含んでおり、プレーンは複数のブロックを含んでいる。各ブロックは、複数のＮＡＮＤセルにより構成され、このブロック単位でデータが消去される。
【００３３】
また、１つのワード線に接続された複数のメモリセルは、１物理セクタを構成する。この物理セクタ毎にデータが書き込まれ、読み出される。１物理セクタには４値の場合、例えば２ページ分のデータが記憶される。
【００３４】
リード動作、プログラムベリファイ動作及びプログラム動作時において、ＳＳＤＣ２６から受信した物理アドレスに応じて、１本のワード線が選択され、１物理セクタ（２ページ分）が選択される。この２ページの切り替えは物理アドレスによって行われる。
【００３５】
４値ＮＡＮＤメモリは、１つのメモリセルにおける閾値電圧が、４通りの分布を持ち得るように構成されている。図７は、４値ＮＡＮＤセル型フラッシュメモリのメモリセルに記憶される２ビットの４値データ（データ“１１”、“１０”、“０１”、“００”）とメモリセルの閾値電圧分布との関係を示している。なお、図７において、ＶＡ、ＶＢ、ＶＣは４つのデータを読み出す場合に選択ワード線に印加される電圧であり（電圧ＶＡは０Ｖである）、ＶＡＶ、ＶＢＶ、ＶＣＶは、各閾値電圧分布への書き込みを行う場合において、書き込みが完了したかどうかを確認するために印加されるベリファイ電圧を示している。また、Ｖreadは、データの読み出しを行う場合に、ＮＡＮＤセル中の非選択メモリセルに対し印加され、その保持データに拘わらず当該非選択メモリセルを導通させる読み出し電圧を示している。さらに、Ｖｅｖは、メモリセルのデータを消去する場合において、その消去が完了したか否かを確認するためメモリセルに印加される消去ベリファイ電圧であり、負の値を有する。Ｖｅｖの大きさは、隣接メモリセルの干渉の影響を考慮して決定される。上述の各電圧の大小関係は、Ｖｅｖ＜ＶＡ＜ＶＡＶ＜ＶＢ＜ＶＢＶ＜ＶＣ＜ＶＣＶ＜Ｖreadである。
【００３６】
なお、消去ベリファイ電圧Ｖｅｖは前述の通り負の値であるが、実際に消去ベリファイ動作においてメモリセルＭＣの制御ゲートに印加される電圧は、負の値ではなく、ゼロ又は正の値である。すなわち、実際の消去ベリファイ動作においては、メモリセルＭＣのバックゲートに正の電圧を与え、メモリセルＭＣの制御ゲートには、ゼロ又はバックゲート電圧より小さい正の値の電圧を印加している。換言すれば、消去ベリファイ電圧Ｖｅｖは、等価的に負の値を有する電圧である。
【００３７】
ブロック消去後のメモリセルの閾値電圧分布Ｅは、その上限値も負の値であり、データ“１１”が割り当てられる。また、書き込み状態のデータ“０１”、“１０”、“００”のメモリセルは、それぞれ正の閾値電圧分布Ａ、Ｂ、Ｃを有する（Ａ、Ｂ、Ｃの下限値も正の値である）。データ“０１”の閾値電圧分布Ａが最も電圧値が低く、データ“００”の閾値電圧分布Ｃが最も電圧値が高く、データ“１０”の閾値電圧分布Ｂは、データ“０１”とデータ“００”の中間の電圧値を有する。なお、図７に示す閾値電圧分布はあくまでも一例であって、本発明はこれに限定されるものではない。例えば、図７では閾値電圧分布Ａ，Ｂ，Ｃは全て正の閾値電圧分布であるとして説明したが、閾値電圧分布Ａが負の電圧の分布であり、閾値電圧分布Ｂ、Ｃが正の電圧の分布であるような場合も、本発明の範囲に含まれる。また、閾値電圧分布Ｅが正の値であってもよい。
【００３８】
１つのメモリセルの２ビットデータは、下位ページデータと上位ページデータからなり、下位ページデータと上位ページデータは別々の書き込み動作、つまり２回の書き込み動作により、メモリセルに書き込まれる。データ“＊＠”と標記するとき、＊は上位ページデータを、＠は下位ページデータを表している。
【００３９】
まず、下位ページデータの書き込みを、図８を参照して説明する。全てのメモリセルは、消去状態の閾値電圧分布Ｅを有し、データ“１１”を記憶しているものとする。図８に示すように、下位ページデータの書き込みを行うと、メモリセルの閾値電圧分布Ｅは、下位ページデータの値（“１”、或いは“０”）に応じて、２つの閾値電圧分布（Ｅ、Ｂ´）に分けられる。すなわち、下位ページデータの値が“１”の場合には、消去状態の閾値電圧分布Ｅを維持する。
【００４０】
一方、下位ページデータの値が“０”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Ｖｔｈを所定量だけ上昇させる。具体的には、ベリファイ電位ＶＢＶ´を設定し、このベリファイ電圧ＶＢＶ´以上の閾値電圧となるまで書き込み動作が繰り返される。その結果、メモリセルは、書き込み状態（データ“１０”）に変化する。なお、データ“１０”の閾値電圧分布Ｂ´は、隣接セルへの書き込み動作の影響のため、データ“１１”に比べ広い分布となっている。
【００４１】
次に、上位ページデータの書き込みを、図９を参照して説明する。上位ページデータの書き込みは、チップの外部から入力される書き込みデータ（上位ページデータ）と、メモリセルに既に書き込まれている下位ページデータとに基づいて行われる。
【００４２】
即ち、図９に示すように、上位ページデータの値が“１”の場合には、メモリセルのトンネル酸化膜に高電界がかからないようにし、メモリセルの閾値電圧Ｖｔｈの上昇を防止する。その結果、データ“１１”（消去状態の閾値電圧分布Ｅ）のメモリセルは、データ“１１”をそのまま維持し、データ“１０”（閾値電圧分布Ｂ´）のメモリセルは、データ“１０”をそのまま維持する。ただし、上述のベリファイ電圧ＶＢＶ´よりも大きい正規のベリファイ電圧ＶＢＶを用いて閾値電圧分布の下限値を調整し、これにより閾値電圧分布の幅を狭めた閾値電圧分布Ｂを形成する。
【００４３】
一方、上位ページデータの値が“０”の場合には、メモリセルのトンネル酸化膜に高電界を印加し、フローティングゲート電極に電子を注入して、メモリセルの閾値電圧Ｖｔｈを所定量だけ上昇させる。その結果、データ“１１”（消去状態の閾値電圧分布Ｅ）のメモリセルは、閾値電圧分布Ａのデータ“０１”に変化し、データ“１０”のメモリセルは、閾値電圧分布Ｃのデータ“００”に変化する。このとき、ベリファイ電圧ＶＡＶ、ＶＣＶが用いられて、閾値電圧分布Ａ、Ｃの下限値が調整される。
【００４４】
以上が、一般的な４値記憶方式におけるデータ書き込み方式の一例である。３ビット以上の多ビット記憶方式においても、上記の動作に更に上位のページデータに応じ、閾値電圧分布を８通りに分割する動作が加わるのみであるので、基本的な動作は同様である。
【００４５】
［ＳＳＤ動作説明］
図４を用いてＳＳＤの動作について説明する。ＳＳＤ２はホスト３から命令を受信すると、ＩＦＣ３０がその命令を受信し、受信した命令をＳＳＤＣ２６に送信する。ＳＳＤＣ２６は受信した命令を処理する。命令にはたとえば論理アドレスとしてのＬＢＡが含まる。ＳＳＤＣ２６は適宜ホスト３より受信したＬＢＡを、管理情報３１を参照することで、物理アドレスに変換する。物理アドレスビットの一部をＮＡＮＤメモリチップ２７の制御信号入力端子３８（図５参照）に入力することで、ＮＡＮＤメモリチップ内のページが特定される。
【００４６】
図１０にＳＳＤ２で使用する管理情報３１の構成を示す。これらの管理情報３１は、前述したように、ＮＡＮＤメモリ２４で不揮発記憶されている。ＮＡＮＤメモリ２４で記憶された管理情報がＳＳＤ２の起動時にＲＡＭ２５に展開されて使用される。ＲＡＭ２５上の管理情報３１は、定期的あるいは電源断時にＮＡＮＤメモリ２４に退避保存される。ＲＡＭ４０がＭＲＡＭやＦｅＲＡＭなどのような不揮発ＲＡＭである場合には、この管理情報はＲＡＭ２５にのみ記憶されるようにしてもよく、この場合はこの管理情報はＮＡＮＤメモリ２４には記憶されない。
【００４７】
図１０に示すように、管理情報は、フリーブロックテーブル５０と、アクティブブロックテーブル５１と、トラックテーブル（トラック単位の論物変換テーブル）５２と、クラスタテーブル（クラスタ単位の論物変換テーブル）５３とを含む。
【００４８】
ＬＢＡは、図１１に示すように、論理セクタ（サイズ：例えば５１２Ｂ）に対して０からの通し番号をつけた論理アドレスである。本実施形態においては、ＳＳＤ１０の論理アドレス（ＬＢＡ）の管理単位として、ＬＢＡの下位（ｓ＋１）ビット目から上位のビット列で構成されるクラスタアドレスと、ＬＢＡの下位（ｓ＋ｔ＋１）ビットから上位のビット列で構成されるトラックアドレスとを定義する。
【００４９】
すなわち、セクタは、ホスト３からの最小アクセス単位である。クラスタは、ＳＳＤ内部で「小さなデータ」を管理する管理単位であり、セクタサイズの２以上の自然数倍がクラスタサイズとなるように定められる。また、トラックは、ＳＳＤ内部で「大きなデータ」を管理する管理単位であり、クラスタサイズの２以上の自然数倍がトラックサイズとなるように定められる。したがって、トラックアドレスはＬＢＡをトラックサイズで割ったものであり、トラック内アドレスはＬＢＡをトラックサイズで割った余りであり、クラスタアドレスはＬＢＡをクラスタサイズで割ったものであり、クラスタ内アドレスはＬＢＡをクラスタサイズで割った余りである。
【００５０】
以下の説明では、便宜上、トラックのサイズは１物理ブロックに記録可能なデータのサイズに等しい（物理ブロックにＥＣＣ回路で行う誤り訂正の冗長ビットが含まれる場合はこれを除いたサイズ）とし、クラスタのサイズは１物理ページに記録可能なデータのサイズに等しい（物理ページにＥＣＣ回路で行う誤り訂正の冗長ビットが含まれる場合はこれを除いたサイズ）とする。
【００５１】
なお、管理情報のデータサイズを少なく抑えかつＳＳＤの高性能を実現するためには、このように、ＬＢＡを論理セクタの２以上の自然数倍である複数の管理単位で管理することが望ましいが、単一の管理単位で管理するようにしたり、論理セクタで直接管理するようにしたりしても本発明の本質には影響しない。
【００５２】
物理アドレスは物理ブロックＩＤおよび物理ブロック内アドレスを含む。物理ブロックＩＤの特定により、ＮＡＮＤメモリチップおよびブロックが特定される。
【００５３】
フリーブロックテーブル（ＦＢテーブル）５０は、ＮＡＮＤメモリ２４に書き込みを行うときに書き込み用に新規に割り当てることのできるＮＡＮＤメモリの用途未割り当てのブロック（フリーブロック：ＦＢ）のＩＤを管理する。フリーブロックには、有効データは保存されていない。フリーブロックは、完全フリーブロックと、追記可能フリーブロックとを含む。完全フリーブロックは、再利用のために消去動作を行う必要があるフリーブロックであり、消去動作の実行後は、ブロックの先頭に位置するページから書き込むことが可能である。追記可能フリーブロックは、未書き込みのページが残っており、消去動作を実行することなく再利用が可能であり、残りの未書き込みのページに書き込むことが可能である。フリーブロックテーブル５０では、ブロックＩＤ毎に消去回数およびブロック内追記アドレスＣＯＦＦを管理している。ブロック内追記アドレスＣＯＦＦは、ブロック内で追記可能なページの先頭アドレスを示しており、ＣＯＦＦ＝NULLの場合は、追記不可能な完全フリーブロックであり、ＣＯＦＦ＝有効値の場合は、追記可能フリーブロックである。ＣＯＦＦの値が大きいほど追記可能な領域が少ない。
【００５４】
アクティブブロックテーブル（ＡＢテーブル）５１は、用途が割り当てられたブロックであるアクティブブロック（ＡＢ）を管理する。また、ブロックＩＤ毎に消去回数およびブロック内追記アドレスＣＯＦＦを管理している。ＣＯＦＦ＝有効値の場合は、アクティブブロックであっても、ブロック内追記アドレスＣＯＦＦから追記が可能である。
【００５５】
トラックテーブル５２は、トラックアドレスと、このトラックアドレスに対応するトラックデータが記憶されるブロックＩＤとの対応関係を管理する。トラックアドレス毎に無効フラグを管理する。
【００５６】
クラスタテーブル５３は、クラスタアドレスと、このクラスタアドレスに対応するクラスタデータが記憶されるブロックＩＤと、このクラスタアドレスに対応するクラスタデータが記憶されるブロック内アドレスとの対応関係を管理する。クラスタアドレス毎に無効フラグを管理する。
【００５７】
アクティブブロックテーブル５１に登録されているブロック（アクティブブロック）は、少なくともＳＳＤＣ２６にとっては有効なデータを保持していることになる。フリーブロックテーブル５０は論理アドレス（ＬＢＡ）に結び付けられていない物理ブロックをリストとして管理している。フリーブロックテーブル５０に登録されているブロック（フリーブロック）は、有効なデータを保持していないことになる。
【００５８】
[アドレス正引き手順]
つぎに、図１２を用いてＳＳＤ２においてＬＢＡから物理アドレスを特定する手順（アドレス正引き手順）について説明する。以下の、手順は、ＳＳＤＣ２６によって実行される。ホスト３は、ライト命令やリード命令をＳＳＤ２に実行させる際、ＬＢＡ（先頭ＬＢＡ）および論理セクタ長を含むコマンドをＳＳＤ２に出力する。ＬＢＡ（先頭ＬＢＡ）および論理セクタ長が指定されたとき、それが示すＬＢＡ領域ＡＲＥＡinitは始端がコマンドよって指定されたＬＢＡであり、末端が（指定ＬＢＡ＋論理セクタ長−１）の連続したＬＢＡ領域となる。
【００５９】
ＳＳＤＣ２６はＡＲＥＡinitをトラック単位に分解し、分解後の各部分であるトラック単位のＬＢＡ領域ＡＲＥＡsubに対し、図１２に示す処理を実行する。まず、ＳＳＤＣ２６はＡＲＥＡsubの先頭ＬＢＡからトラックアドレスＡＤ０ＴＲを計算する（ステップＳ１２０１）。ＳＳＤＣ２６はトラックアドレスＡＤ０ＴＲをトラックテーブル５２から検索し、ＡＤ０ＴＲに対応するブロックＩＤ（ＩＤ０１ｐｈｙｓ）およびトラックＡＤ０ＴＲの無効フラグＦ０１ｉｎｖを取得する（ステップＳ１２０２）。無効フラグＦ０１ｉｎｖがtrueである場合には、トラックＡＤ０ＴＲ内は対応する物理アドレスを持たないことになり、これを「トラックＡＤ０ＴＲは未書き込み状態である」とする（ステップＳ１２０４）。無効フラグＦ０１ｉｎｖがfalseである場合には、ブロックＩＤ（ＩＤ０１ｐｈｙｓ）が有効な値であるかどうかが判定される（ステップＳ１２０５）。ブロックＩＤ（＝ＩＤ０１ｐｈｙｓ）が有効な値である場合には、ＩＤ０１ｐｈｙｓがアクティブブロックテーブル５１から検索され（ステップＳ１２０６）、ＩＤ０１ｐｈｙｓの先頭位置からトラック内アドレス分シフトした位置により、指定されたＬＢＡに対応するメモリセル位置および上位/下位ビットが特定され、物理的位置が特定される（ステップＳ１２０７）。この場合は、トラック単位のＬＢＡ領域ＡＲＥＡsubに対応するＮＡＮＤメモリ上の物理的な位置の特定にはクラスタテーブル５３を必要とせず、このようなＬＢＡ領域を「トラック管理されている」という。
【００６０】
ステップＳ１２０５において、ブロックＩＤ（ＩＤ０１ｐｈｙｓ）が無効な値の場合には、ＳＳＤＣ２６は、トラック単位のＬＢＡ領域ＡＲＥＡsubをさらにクラスタ単位に分解し、分解後の各部分であるクラスタ単位のＬＢＡ領域ＡＲＥＡsubsubに対し、以下の処理を実行する。ＳＳＤＣ２６はＡＲＥＡsubsubの先頭ＬＢＡからクラスタアドレスＡＤ０ＣＬを計算し、クラスタテーブル５３からＡＤ０ＣＬを検索し、対応するブロックＩＤ（ＩＤ０２ｐｈｙｓ）と対応するブロック内アドレスＡ０２ｉｎｔを取得する（ステップＳ１２０８）。クラスタテーブル５３からクラスタアドレスＡＤ０ＣＬが見つからなかった場合には（ステップＳ１２０９：Ｎｏ）、クラスタＡＤ０ＣＬ内は対応する物理アドレスを持たないことになり、これを「クラスタＡＤ０ＣＬは未書き込み状態である」とする（ステップＳ１２１０）。クラスタアドレスＡＤ０ＣＬが見つかった場合は（ステップＳ１２０９：Ｙｅｓ）、ブロックＩＤ（ＩＤ０２ｐｈｙｓ）とブロック内アドレスＡ０２ｉｎｔの指定するページの先頭位置からクラスタ内アドレス分シフトした位置がクラスタ単位のＬＢＡ領域ＡＲＥＡsubsubに対応する物理的な位置となる（ステップＳ１２１１）。ＡＲＥＡsubsubに対応するＮＡＮＤメモリ上の物理的な位置はトラックテーブル５２のみからは特定できず、クラスタテーブル５３の参照を必要とすることになり、このようなＬＢＡ領域を「クラスタ管理されている」という。
【００６１】
[無効データログ]
図１３にＲＡＭ２５で管理される無効データログ６０の詳細を示す。無効データログ６０は、トラックテーブル５２およびクラスタテーブル５３でＬＢＡ領域に関連付けられていない物理アドレスのうち、ホスト３にとっては無効であるが、ユーザデータ実体がＮＡＮＤメモリ２４上にまだ消去されずに保持されているデータである無効データの物理アドレスを管理する。無効データは、たとえばフリーブロックに保持されているデータであり、またトラックテーブル５２において無効フラグがtrueになっているデータや、クラスタ管理であるにも関わらずクラスタテーブル５３に含まれないデータである。無効データログ６０により無効データを管理することにより、データが無効データになった後であっても、ホスト３が任意にデータ実体の消去が可能になり、ユーザデータのセキュリティが向上する。
【００６２】
無効データログ６０は、トラック単位の無効データのログを管理するトラック管理無効データログ６１と、クラスタ単位で無効データのログを管理するクラスタ管理無効データログ６２を含む。トラック管理無効データログ６１では、無効データについて、ブロックＩＤとトラックアドレスとの対応を管理する。クラスタ管理無効データログ６２では、無効データについて、ブロックＩＤおよびブロック内アドレスとクラスタアドレスとの対応と、整理済みフラグとの対応を管理する。
【００６３】
どのような無効データであっても容易にデータ実体の消去を実現する観点では、無効データログ６０は全ての無効データを管理することが望ましい。一方、ＳＳＤ２の速度性能向上の観点では、実体の消去の必要のないデータのＬＢＡ領域をホスト３から通知をうけることで、通知されたＬＢＡ領域を無効データログ６０から削除して無効データログの容量を削減するようにすることもできる。無効データログ６０は、ＳＳＤＣ２６によって、適宜ＮＡＮＤメモリ２４にバックアップされる。また、無効データログ６０は、大部分をＮＡＮＤメモリ２４に保持するようにして、無効データログ６０の一部のみをＲＡＭ２５に保持しておくようにしてもよい。
【００６４】
[読み出し動作]
つぎに、図１４、図１５を用いてＳＳＤ２における読み出し動作を説明する。図１４に示すように、ＳＳＤ２がホスト３から読み出し命令を受信した場合は（ステップＳ１３０１）、ＳＳＤＣ２６がこの読み出し命令をＲＡＭ２５上の読み出し命令待ち行列に追加し（ステップＳ１３０２）、読み出し命令を受理した旨をホスト３に返信する。なお、ＳＳＤ２は、ホスト３に応答を返信しなくてもよい。読み出し命令待ち行列にはホスト３から受信したＬＢＡおよび論理セクタ長も含まれており、それが示すＬＢＡ領域ＡＲＥＡinitは、始端が指定されたＬＢＡであり、末端が（指定されたＬＢＡ＋論理セクタ長−１）の連続したＬＢＡ領域となる。
【００６５】
図１５に示すように、ＳＳＤＣ２６は読み出し命令待ち行列を常時監視し続け、実行可能な読み出し命令があれば（ステップＳ１４０１：Ｙｅｓ）、前述したアドレス正引き手順を利用して、ＡＲＥＡinitをトラック管理のＡＲＥＡsubやクラスタ管理のＡＲＥＡsubsubの部分領域に分解し、それらが対応する物理アドレスを特定する（ステップＳ１４０２）。以下の読み出し動作は、これら各部分領域それぞれについて行われる。ＳＳＤＣ２６は、物理アドレスを特定した部分領域が未書き込み領域であるか否かを判定し（ステップＳ１４０３）、未書き込み領域である場合は、ＮＡＮＤメモリ２４に対して読み出し動作を行わず、たとえば０で埋め尽くされている０-fillデータを読み出したデータとみなしてホスト３に送信する（ステップＳ１４０４）。未書き込み領域でない部分領域に関しては、ＳＳＤＣ２６は部分領域の物理アドレスに対し、ＮＡＮＤメモリ２４から読み出しを行い（ステップＳ１４０５）、読み出したデータをＩＦＣ３０を介してホスト３に送信する（ステップＳ１４０６）。なお、ＮＡＮＤメモリ２４から読み出したデータは、いったんＲＡＭ２５に書き込み、ＲＡＭ２５に書き込んだデータをホスト３に送信するようにしてもよい。
【００６６】
[書き込み動作]
つぎに、図１６、図１７を用いてＳＳＤ２における書き込み動作を説明する。図１６に示すように、ＳＳＤ２がホスト３から書き込み命令を受信した場合は（ステップＳ１５０１）、ＳＳＤＣ２６がこの書き込み命令をＲＡＭ２５上の読み出し命令待ち行列に追加し（ステップＳ１５０２）、書き込み命令を受理した旨をホスト３に返信する。なお、ＳＳＤ２は、ホスト３に応答を返信しなくてもよい。書き込み命令待ち行列にはホスト３から受信したＬＢＡおよび論理セクタ長も含まれており、それが示すＬＢＡ領域ＡＲＥＡinitは、始端が指定されたＬＢＡであり、末端が（指定されたＬＢＡ＋論理セクタ長−１）の連続したＬＢＡ領域となる。
【００６７】
図１７に示すように、ＳＳＤＣ２６は書き込み命令待ち行列を常時監視し続け、実行可能な書き込み命令があれば（ステップＳ１６０１：Ｙｅｓ）、ホスト３に書き込み可能であることを通知する。なお、この通知を行わないようにしてもよい。ＳＳＤＣ２６は、図１８に示すように、書き込み命令で指定されたＬＢＡ領域ＡＲＥＡinitをトラック単位で区切り、その各区画をトラック区画ＡＲＥＡwsとする（ステップＳ１６０２）。以下、ステップＳ１６０３以降はＡＲＥＡwsのそれぞれに対して行うものとする。
【００６８】
ＳＳＤＣ２６はトラック区画ＡＲＥＡwsをアドレス正引き変換する（ステップＳ１６０３）。ＳＳＤＣ２６はトラック区画ＡＲＥＡwsがトラックサイズに一致するか否かを判定し（ステップＳ１６０４）、トラックサイズに一致する場合は、ステップＳ１６０６に、トラックサイズ未満である場合はステップＳ１６０５に手順を移行する。図１８に示すように、トラック区画ＡＲＥＡwsが、トラックサイズ未満であるトラック端数部分はステップＳ１６０５へ移行し、そうでない部分はステップＳ１６０６に移行することになる。
【００６９】
ステップＳ１６０５の場合は、ＡＲＥＡwsのＬＢＡ領域をクラスタ単位の区画で区切り、区切った区画をクラスタ区画ＡＲＥＡwsclとする（ステップＳ１６０５）。クラスタ区画ＡＲＥＡwsclがクラスタサイズ未満である場合（セクタ数がクラスタサイズ未満の端数である場合）は、クラスタテーブル５３によりクラスタ区画ＡＲＥＡwsclが所属するクラスタの物理アドレスを取得して、このクラスタに含まれる全データをＮＡＮＤメモリ２４からＲＡＭ２５に読み出し、ホスト３から受信したＡＲＥＡwsclのデータを、ＮＡＮＤメモリ２４から読み出したデータに対してＲＡＭ２５上で上書きしてこれをクラスタ区画ＡＲＥＡwsclのデータとする。こうすることで、クラスタ区画ＡＲＥＡwsclがクラスタサイズ未満である場合でも、そのデータサイズをクラスタサイズに一致させることができる。
【００７０】
さらに、ステップＳ１６０６、Ｓ１６０７においては、ステップＳ１６０３の正引き変換結果をもとに、トラック区画ＡＲＥＡwsが現在トラック管理されているかクラスタ管理されているかを判定し、トラック管理のＡＲＥＡsubとクラスタ管理のＡＲＥＡsubsubに分類する。この結果、トラック管理されているＬＢＡ領域（以下トラック管理領域という）へのトラック書き込みを行うステップＳ１６０８、クラスタ管理されているＬＢＡ領域（以下クラスタ管理領域という）へのトラック書き込みを行うステップＳ１６０９、トラック管理領域へのクラスタ書き込みを行うステップＳ１６１０、クラスタ管理領域へのクラスタ書き込みを行うステップＳ１６１１のいずれかに手順が移行される。
【００７１】
[Ｓ１６０８：トラック管理領域へのトラック書き込み]
図１９にトラック管理領域へトラック書き込みを行う場合の概略を示す。トラックアドレスＡＲＥＡwsを持つトラックが、最初は、ブロック（ブロックＩＤ＝ID18physold）に書き込まれてトラック管理されている。このトラックＡＲＥＡwsが更新され新たなトラックデータが書き込まれたとする。ＳＳＤＣ２６は、フリーブロック（ブロックＩＤ＝ID18free）を取得し、このフリーブロックに新たなトラックデータを書き込み、このブロックをアクティブブロックとする。旧トラックデータが書き込まれていたブロック（ブロックＩＤ＝ID18physold）は、フリーブロックとされ、ブロックＩＤ＝ID18physoldおよびトラックアドレスＡＲＥＡwsがトラック単位無効データログ６１に追加される。
【００７２】
図２０にトラック管理領域へトラック書き込みを行う場合の詳細手順を示す。ＳＳＤＣ２６はフリーブロックテーブル５０を読み出し、フリーブロックのブロックＩＤ（ID18free）を取得する（ステップＳ１８０１）。フリーブロック数がフリーブロック数のクライテリア（下限値）NMF以下である場合は後述するＮＡＮＤ整理を行い（ステップＳ１８０３）、その後でフリーブロックのブロックＩＤ（ID18free）を取得する（ステップＳ１８０４）。ＮＡＮＤメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル５０の消去回数が少なく、ＣＯＦＦ＝NULLのブロックを優先して割り当てるのが望ましく、ＣＯＦＦ＝NULLのブロックが存在しない場合は、ＣＯＦＦが大きい順に優先して割り当てるのが望ましい。また、フリーブロック数のクライテリアNMFは後述するＮＡＮＤ整理に必要なフリーブロック数以上であることが望ましく、不良ブロック発生時にＳＳＤ２が動作不能になることを防止するために、ある程度のマージンをもたせて設定しておくことがさらに望ましい。
【００７３】
ＳＳＤＣ２６は取得したブロックＩＤ（ID18free）のフリーブロックを消去し、消去したフリーブロック（＝ID18free）にホスト３から受信したトラックデータを書き込む（ステップＳ１８０５）。ＳＳＤＣ２６はトラック管理無効データログ６１およびクラスタ管理無効データログ６２からブロックＩＤ（＝ID18free）を検索し、ブロックＩＤ（＝ID18free）のエントリ（該当行）を全て削除する（ステップＳ１８０６）。ＳＳＤＣ２６は、ブロックＩＤ（ID18free）、その消去回数、およびＣＯＦＦ＝NULLをアクティブブロックテーブル５１に追加し、さらにブロックＩＤ（ID18free）のエントリをフリーブロックテーブル５０から削除する（ステップＳ１８０７）。
【００７４】
ＳＳＤＣ２６はトラック区画ＡＲＥＡwsのトラックが現在対応しているブロックＩＤ（＝ID18physold）をトラックテーブル５２から取得する（ステップＳ１８０８）。さらに、ＳＳＤＣ２６は、トラックテーブル５２のトラック区画ＡＲＥＡwsの物理ブロックＩＤをID18freeに書き換え、また無効フラグはfalseとする（ステップＳ１８０９）。ＳＳＤＣ２６は、ブロックＩＤ（ID18physold）をアクティブブロックテーブル５１から検索し（ステップＳ１８１０）、存在する場合は、ブロックＩＤ（ID18physold）のエントリをアクティブブロックテーブル５１から削除し、ブロックＩＤ（ID18physold）、消去回数、およびＣＯＦＦ＝NULLをフリーブロックテーブル５０に追加する（ステップＳ１８１１）。さらに、ＳＳＤＣ２６は、トラック単位無効データログ６１にブロックＩＤ＝ID18physoldおよびトラックアドレスＡＲＥＡwsを追加する（ステップＳ１８１２）。
【００７５】
[Ｓ１６０９：クラスタ管理領域へのトラック書き込み]
図２１にクラスタ管理領域へトラック書き込みを行う場合の概略を示す。トラックＡＲＥＡws内の各クラスタ（クラスタアドレス＝A19CL）が、最初は、複数のブロック（ブロックＩＤ＝ID19physold）に分散記憶されて、クラスタ管理されている。このトラックＡＲＥＡwsが更新され新たなトラックデータが書き込まれたとする。ＳＳＤＣ２６は、フリーブロック（ブロックＩＤ＝ID19free）を取得し、このフリーブロックに新たなトラックデータを書き込み、このブロックをアクティブブロックとする。旧クラスタデータ（クラスタアドレス＝A19CL）が無効となり、新トラックデータ（トラックアドレス＝ＡＲＥＡws）が有効となるよう管理テーブルが書き換えられる。ブロックＩＤ＝ID19physoldおよびクラスタアドレスA19CLがクラスタ単位無効データログ６２に追加される。
【００７６】
図２２に、クラスタ管理領域へトラック書き込みを行う場合の詳細手順を示す。ＳＳＤＣ２６はフリーブロックテーブル５０を読み出し、フリーブロックのブロックＩＤ（ID19free）を取得する（ステップＳ１９０１）。フリーブロック数がフリーブロック数のクライテリアNMF以下である場合は後述するＮＡＮＤ整理を行い（ステップＳ１９０３）、その後でフリーブロックのブロックＩＤ（ID19free）を取得する（ステップＳ１９０４）。ＮＡＮＤメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル５０の消去回数が少なく、ＣＯＦＦ＝NULLのブロックを優先して割り当てるのが望ましく、ＣＯＦＦ＝NULLのブロックが存在しない場合は、ＣＯＦＦが大きい順に優先して割り当てるのが望ましい。
【００７７】
ＳＳＤＣ２６は取得したブロックＩＤ（ID19free）のフリーブロックを消去し、消去したフリーブロック（ID19free）にホスト３から受信したトラックデータを書き込む（ステップＳ１９０５）。ＳＳＤＣ２６はトラック管理無効データログ６１およびクラスタ管理無効データログ６２からブロックＩＤ（ID19free）を検索し、このブロックＩＤ（ID19free）のエントリを全て削除する（ステップＳ１９０６）。ＳＳＤＣ２６は、ブロックＩＤ（ID19free）、その消去回数、およびＣＯＦＦ＝NULLをアクティブブロックテーブル５１に追加し、さらにブロックＩＤ（ID19free）のエントリをフリーブロックテーブル５０から削除する（ステップＳ１９０７）。
【００７８】
ＳＳＤＣ２６は、トラック区画ＡＲＥＡws内の全てのクラスタについて、クラスタアドレスA19clおよび対応する物理ブロックＩＤ（＝ID19physold）を、クラスタテーブル５３をもとに全て取得する（ステップＳ１９０８）。ＳＳＤＣ２６は、トラックテーブル５２のトラックアドレスＡＲＥＡwsの物理ブロックＩＤをID19freeに書き換え、無効フラグ＝falseとする（ステップＳ１９０９）。ＳＳＤＣ２６は、クラスタテーブルからクラスタアドレスA19clをすべて検索し、該当行を全て削除する（ステップＳ１９１０）。
【００７９】
ＳＳＤＣ２６は、ブロックＩＤ（＝ID19physold）をクラスタテーブル５３から検索する（ステップＳ１９１１）。ブロックＩＤ（＝ID19physold）がクラスタテーブル５３に存在する場合は（ステップＳ１９１２：Ｙｅｓ）、ＳＳＤＣ２６は、クラスタ単位無効データログ６２に、ブロックＩＤ＝ID19physold、ブロック内アドレス、クラスタアドレスA19cl、 整理済みフラグ＝falseを全て追加する（ステップＳ１９１５）。また、ブロックＩＤ（＝ID19physold）がクラスタテーブル５３に存在しない場合は（ステップＳ１９１２：Ｎｏ）、ブロックＩＤ（＝ID19physold）がアクティブブロックテーブル５１に存在するか否かを検索し（ステップＳ１９１３）、存在しない場合は、処理を終了する。ステップＳ１９１３において、ブロックＩＤ（＝ID19physold）がアクティブブロックテーブル５１に存在する場合は、ブロックＩＤ（＝ID19physold）、その消去回数、およびブロックＩＤ（＝ID19physold）のブロックの現在のブロック内追記アドレスＣＯＦＦをフリーブロックテーブル５０に追加し、さらにブロックＩＤ（＝ID19physold）のエントリをアクティブブロックテーブル５１から削除し（ステップＳ１９１４）、その後、ステップＳ１９１５の処理を実行する。
【００８０】
[Ｓ１６１０：トラック管理領域へのクラスタ書き込み]
図２３にトラック管理領域へクラスタ書き込みを行う場合の概略を示す。トラックアドレスＡＲＥＡwsを持つトラックが、最初は、ブロック（ブロックＩＤ＝ID20physold）に書き込まれてトラック管理されている。このトラックＡＲＥＡws中のクラスタ（クラスタアドレス＝ＡＲＥＡwscl）が更新され新たなクラスタデータが書き込まれたとする。ＳＳＤＣ２６は、フリーブロック（ブロックＩＤ＝ID20free）または追記可能ブロック（ブロックＩＤ＝ID20ad）を取得し、取得したブロックに新たなクラスタデータを書き込む。トラックデータ（トラックアドレス＝ＡＲＥＡws）が書き込まれていたブロック（ブロックＩＤ＝ID20physold）内の全てのクラスタは、この後トラック管理からクラスタ管理に移行され、ブロックＩＤ＝ID20physold、ブロック内アドレスおよびクラスタアドレス（＝ＡＲＥＡwscl）がクラスタ単位無効データログ６２に追加される。
【００８１】
図２４に、トラック管理領域へクラスタ書き込みを行う場合の手順を示す。ＳＳＤＣ２６はアクティブブロックテーブル５１およびフリーブロックテーブル５０からブロック内追記アドレスＣＯＦＦがNULLでないブロック、すなわち追記可能ブロックを検索する（ステップＳ２００１）。追記可能ブロックが存在する場合、ＳＳＤＣ２６は追記可能ブロックのブロックＩＤ＝ID20adを取得し（ステップＳ２００２）、ブロックＩＤ（＝ID20ad）のブロック内アドレス＝ＣＯＦＦを追記開始位置とし、ブロック内アドレス＝ＣＯＦＦからクラスタ区画ＡＲＥＡwsclに対応するクラスタデータを追記する（ステップＳ２００３）。追記されたブロックがフリーブロックである場合は、ＳＳＤＣ２６はブロックＩＤ＝ID20adのエントリをアクティブブロックテーブル５１に追加して、フリーブロックテーブル５０からブロックＩＤ＝ID20adのエントリを削除する。ＳＳＤＣ２６は、アクティブブロックテーブル５１において、ブロック内追記アドレスＣＯＦＦを追記したクラスタサイズ分だけインクリメントする。ブロック内追記アドレスＣＯＦＦがブロックサイズを超過した場合は（ブロックＩＤ（＝ID20ad）の全セルが書き込まれてこれ以上追記できなくなった場合）、ＳＳＤＣ２６は、ブロックＩＤ（＝ID20ad）のＣＯＦＦ＝NULLとしてアクティブブロックテーブル５１を書き換える（ステップＳ２００４）。その後、手順はステップＳ２０１２に移行される。なお、ＮＡＮＤメモリの消去回数を低減する観点では、追記可能ブロックの検索の優先順位はアクティブブロックを先に検索し、後でフリーブロックを検索するのが望ましい。
【００８２】
ステップＳ２００１において、追記可能ブロックが存在しない場合、ＳＳＤＣ２６はフリーブロックテーブル５０を読み出し、フリーブロックのブロックＩＤ（＝ID20free）を取得する（ステップＳ２００５）。フリーブロック数がフリーブロック数のクライテリアNMF以下である場合は（ステップＳ２００６）、後述するＮＡＮＤ整理を行い（ステップＳ２００７）、その後でフリーブロックのブロックＩＤ（＝ID20free）を取得する（ステップＳ２００８）。ＮＡＮＤメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル５０のＣＯＦＦ＝NULLのブロックを優先して割り当てるのが望ましく、ＣＯＦＦ＝NULLのブロックが存在しない場合は、ＣＯＦＦが大きい順に優先して割り当てるのが望ましい。
【００８３】
ＳＳＤＣ２６は取得したブロックＩＤ（＝ID20free）のブロックを消去し、この消去したブロックにホスト３から受信したクラスタデータを書き込む（ステップＳ２００９）。ＳＳＤＣ２６はトラック管理無効データログ６１およびクラスタ管理無効データログ６２からブロックＩＤ（＝ID20free）を検索し、このブロックＩＤ（＝ID20free）のエントリを全て削除する（ステップＳ２０１０）。また、ＳＳＤＣ２６は、ブロックＩＤ（＝ID20free）、その消去回数、およびＣＯＦＦ＝書き込んだクラスタサイズとしてアクティブブロックテーブル５１に追加し、さらにブロックＩＤ（ID20free）のエントリをフリーブロックテーブル５０から削除する（ステップＳ２０１１）。
【００８４】
ＳＳＤＣ２６は、トラック区画ＡＲＥＡwsのトラックが現在対応しているブロックＩＤ（＝ID20physold）をトラックテーブル５２から取得する（ステップＳ２０１３）。ＳＳＤＣ２６は、クラスタアドレス＝ＡＲＥＡwscl、ブロックＩＤ＝ID20adまたはID20free、ブロック内アドレス＝実際に書き込んだブロック内アドレス、無効フラグ＝falseとしたエントリをクラスタテーブル５３に追加する（ステップＳ２０１３）。また、ＳＳＤＣ２６は、トラック区画ＡＲＥＡwsで指定されるトラックに含まれるクラスタのうち、クラスタ区画ＡＲＥＡwsclで指定されるクラスタを除く全てのクラスタをクラスタテーブル５３に追加する。このとき、ブロックＩＤ＝ID20physoldとし、無効フラグ＝falseとする（Ｓ２０１４）。ＳＳＤＣ２６は、トラックテーブル５２において、トラック区画ＡＲＥＡwsで指定されるトラックに対応するブロックＩＤをNULLに書き換える（ステップＳ２０１５）。ステップＳ２０１３〜Ｓ２０１５の処理により、トラック区画ＡＲＥＡwsに属する全データはトラック管理からクラスタ管理に移行することになる。
【００８５】
ＳＳＤＣ２６は、クラスタ単位無効データログ６２にブロックＩＤ＝ID20physold、ブロック内アドレスおよびクラスタアドレス（＝ＡＲＥＡwscl）を含むエントリを追加する（ステップＳ２０１６）。
【００８６】
[Ｓ１６１１：クラスタ管理領域へのクラスタ書き込み]
図２５にクラスタ管理領域へクラスタ書き込みを行う場合の概略を示す。トラックＡＲＥＡws内の各クラスタは、最初は、複数のブロックに分散記憶されて、クラスタ管理されている。トラックＡＲＥＡws内のクラスタＡＲＥＡwsclは、最初は、ブロック（ブロックＩＤ＝ID21physold）に書き込まれている。このクラスタＡＲＥＡwsclが更新され新たなクラスタデータが書き込まれたとする。ＳＳＤＣ２６は、フリーブロック（ブロックＩＤ＝ID21free）または追記可能ブロック（ブロックＩＤ＝21ad）を取得し、取得したブロックに新たなクラスタデータを書き込む。ブロック（ブロックＩＤ＝ID18physold）内の旧クラスタデータが無効となり、ブロック（ブロックＩＤ＝ID21freeまたは21ad）内の新クラスタデータが有効となるよう管理テーブルが書き換えられる。ブロックＩＤ＝ID21physoldおよびクラスタアドレスＡＲＥＡwsclがクラスタ単位無効データログ６２に追加される。
【００８７】
図２６に、トラック管理領域へクラスタ書き込みを行う場合の手順を示す。ＳＳＤＣ２６はアクティブブロックテーブル５１およびフリーブロックテーブル５０からブロック内追記アドレスＣＯＦＦがNULLでない追記可能ブロックを検索する（ステップＳ２１０１）。追記可能ブロックが存在する場合、ＳＳＤＣ２６は追記可能ブロックのブロックＩＤ＝ID21adを取得し（ステップＳ２１０２）、ブロックＩＤ（＝ID21ad）のブロック内アドレス＝ＣＯＦＦを追記開始位置とし、ブロック内アドレス＝ＣＯＦＦからクラスタ区画ＡＲＥＡwsclに対応するクラスタデータを追記する（ステップＳ２１０３）。追記されたブロックがフリーブロックである場合は、ＳＳＤＣ２６はブロックＩＤ＝ID20adのエントリをアクティブブロックテーブル５１に追加して、フリーブロックテーブル５０からブロックＩＤ＝ID20adのエントリを削除する。ＳＳＤＣ２６は、アクティブブロックテーブル５１において、ブロック内追記アドレスＣＯＦＦを追記したクラスタサイズ分だけインクリメントする。ブロック内追記アドレスＣＯＦＦがブロックサイズを超過した場合（ブロックＩＤ（＝ID21ad）の全セルが書き込まれてこれ以上追記できなくなった場合）、ＳＳＤＣ２６は、ブロックＩＤ（＝ID21ad）のＣＯＦＦ＝NULLとしてアクティブブロックテーブル５１を書き換える。（ステップＳ２１０４）なお、ＮＡＮＤメモリの消去回数を低減する観点では、追記可能ブロックの検索の優先順位はアクティブブロックを先に検索し、後でフリーブロックを検索するのが望ましい。
【００８８】
ステップＳ２１０１において、追記可能ブロックが存在しない場合、ＳＳＤＣ２６はフリーブロックテーブル５０を読み出し、フリーブロックのブロックＩＤ（＝ID21free）を取得する（ステップＳ２１０５）。フリーブロック数がフリーブロック数のクライテリアNMF以下である場合は（ステップＳ２１０６）、後述するＮＡＮＤ整理を行い（ステップＳ２１０７）、その後でフリーブロックのブロックＩＤ（＝ID21free）を取得する（ステップＳ２１０８）。ＮＡＮＤメモリの消去回数低減のためには、フリーブロックの確保はフリーブロックテーブル５０のＣＯＦＦ＝NULLのブロックを優先して割り当てるのが望ましく、ＣＯＦＦ＝NULLのブロックが存在しない場合は、ＣＯＦＦが大きい順に優先して割り当てるのが望ましい。
【００８９】
ＳＳＤＣ２６は取得したブロックＩＤ（＝ID21free）のブロックを消去し、この消去したブロックにホスト３から受信したクラスタデータを書き込む（ステップＳ２１０９）。ＳＳＤＣ２６はトラック管理無効データログ６１およびクラスタ管理無効データログ６２からブロックＩＤ（＝ID21free）を検索し、このブロックＩＤ（＝ID21free）のエントリを全て削除する（Ｓ２１１０）。また、ＳＳＤＣ２６は、ブロックＩＤ（ID21free）、その消去回数、およびＣＯＦＦ＝書き込んだクラスタサイズとしてアクティブブロックテーブル５１に追加し、さらにブロックＩＤ（ID21free）のエントリをフリーブロックテーブル５０から削除する（ステップＳ２１１１）。
【００９０】
ＳＳＤＣ２６は、クラスタ区画ＡＲＥＡwsclのクラスタが現在対応しているブロックＩＤ（＝ID21physold）をクラスタテーブル５３から取得する（ステップＳ２１１２）。ＳＳＤＣ２６は、クラスタアドレスＡＲＥＡwsclについて、クラスタアドレス＝クラスタ区画ＡＲＥＡwscl、ブロックＩＤ＝ID21adまたはID21free、ブロック内アドレス＝実際に書き込んだブロック内アドレス、無効フラグ＝falseとなるようにクラスタテーブル５３を書き換える（ステップＳ２１１３）。なお、ステップＳ２１１３において、クラスタテーブルにクラスタアドレス＝ＡＲＥＡwsclが存在しない場合は、エントリを追加する。
【００９１】
ＳＳＤＣ２６は、クラスタテーブル５３において、ブロックＩＤ＝ID21physoldを検索する（ステップＳ２１１４）。クラスタテーブル５３にブロックＩＤ＝ID21physoldが存在する場合は（ステップＳ２１１５：Ｙｅｓ）、クラスタ単位無効データログ６２に、ブロックＩＤ＝ID21physold、クラスタ区画ＡＲＥＡwsclで指定されるクラスタデータが書き込まれていたブロック内アドレス、クラスタアドレス＝ＡＲＥＡwscl、整理済みフラグ＝ｆａｌｓｅを追加する（ステップＳ２１１８）。また、ＳＳＤＣ２６は、クラスタテーブル５３にブロックＩＤ＝ID21physoldが存在しない場合は（ステップＳ２１１５：Ｎｏ）、ブロックＩＤ＝ID21physoldをアクティブブロックテーブル５１から検索し（ステップＳ２１１６）、ブロックＩＤ＝ID21physoldがアクティブブロックテーブル５１に存在しない場合は、処理を終了する。また、ＳＳＤＣ２６は、アクティブブロックテーブル５１にブロックＩＤ＝ID21physoldが存在する場合は、ブロックＩＤ＝ID21physold、その消去回数、およびＣＯＦＦ＝ID21physoldのＣＯＦＦとしたエントリをフリーブロックテーブル５０に追加し、ブロックＩＤ＝ID21physoldのエントリをアクティブブロックテーブル５１から削除する（ステップＳ２１１７）。その後、ステップＳ２１１８の手順を実行する。
【００９２】
[ＮＡＮＤ整理]
ＳＳＤの全ＬＢＡの容量は、ＮＡＮＤメモリ２４の全容量よりも小さく設計されているため、書き込み動作がトラック単位で書き込まれ続ける限りはフリーブロックが枯渇することはない。一方、クラスタ単位の書き込みが多数発生した場合、クラスタデータが書き込まれていたＮＡＮＤメモリのページが無効データとなり、無効データが蓄積していくにつれてフリーブロックサイズ（＝ＮＡＮＤメモリ容量−無効データ−管理情報）が枯渇する。ＮＡＮＤ整理を行えば、無効データを削減することでフリーブロックを新たに確保することができる。
【００９３】
図２７にＮＡＮＤ整理のフローチャートを示す。ＳＳＤＣ２６は、クラスタ単位無効データログ６２を読み出して、収集したクラスタ単位無効データの合計サイズと現在のフリーブロックサイズの合計がＮＡＮＤ整理のクライテリアNMFよりも大きくなるようクラスタ単位無効データを収集する（ステップＳ２２０１〜Ｓ２２０８）。なお、収集したクラスタ単位無効データの合計サイズ＋現在のフリーブロックサイズ＞クライテリアNMFであればＮＡＮＤ整理により十分量のフリーブロックが確保できるが、ＮＡＮＤ整理の発生頻度を削減して速度性能を高めるためには、（合計サイズ＋現在のフリーブロックサイズ＞NMF＋マージン）であることが望ましい。
【００９４】
無効データを収集する際、収集した無効データの属するブロックに含まれる全ての有効無効クラスタをＮＡＮＤ整理対象リスト８０に加える。ＮＡＮＤ整理対象リスト８０は、図２８に示すように、ＮＡＮＤ整理対象のブロックを管理するものであり、クラスタ単位無効データログ６２から収集した無効クラスタに関する情報（ブロックＩＤ、ブロック内アドレス、無効クラスタアドレス、未整理フラグ）を登録する。
【００９５】
具体的には、ＳＳＤＣ２６は、クラスタ単位無効データログ６２の行を更新するための変数Ｃ２２ｃｏｌと、収集したクラスタ単位無効データの合計サイズを計算するための変数Ｓ２０を初期化し（ステップＳ２２０１）、クラスタ単位無効データログ６２のＣ２２ｃｏｌ行を読み出し、ブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）および整理済みフラグを取得し（ステップＳ２２０２）、その整理済みフラグがtrueである場合は（ステップＳ２２０３）、変数Ｃ２２ｃｏｌを＋１して（ステップＳ２２０４）、次の行のブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）および整理済みフラグを取得する（ステップＳ２２０２）。整理済みフラグがtrueである場合、ＳＳＤＣ２６はブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）がＮＡＮＤ整理対象リスト８０に登録されているか否かを判定し（ステップＳ２２０５）、登録されている場合は、変数Ｃ２２ｃｏｌを＋１して（ステップＳ２２０４）、次の行のブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）および整理済みフラグを取得する（ステップＳ２２０２）。ブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）がＮＡＮＤ整理対象リスト８０に登録されていない場合、ＳＳＤＣ２６はクラスタ単位無効データログ６２から、ブロックＩＤ＝ＩＤ２２ｐｈｙｓである全ての行の情報を収集し、収集した情報であるブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）、ブロック内アドレスＡ２２int、クラスタアドレスＡ２２cl、未整理フラグ＝trueをＮＡＮＤ整理対象リスト８０に登録する（ステップＳ２２０６）。つぎに、ＳＳＤＣ２６は、ステップＳ２２０６で収集した全ての無効クラスタのサイズを計算し、前回計算した合計サイズＳ２０に加算する（ステップＳ２２０７）。つぎに、ＳＳＤＣ２６は、計算した無効クラスタの合計サイズＳ２０＋現在のフリーブロックサイズの合計がＮＡＮＤ整理のクライテリアNMFより大きいか否かを判定し（ステップＳ２２０８）、このステップＳ２２０８の判定がＹｅｓとなるまで、変数Ｃ２２ｃｏｌを＋１して（ステップＳ２２０４）、上述した無効クラスタの収集を繰り返す。
【００９６】
ステップＳ２２０８の判定がＹｅｓとなると、ＳＳＤＣ２６は、ＮＡＮＤ整理対象リスト８０の行を更新するための変数Ｃ２２２ｃｏｌを初期化し（ステップＳ２２０９）、ＮＡＮＤ整理対象リスト８０のＣ２２２ｃｏｌ行を読み出し、そのブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）および未整理フラグを取得し（ステップＳ２２１０）、その未整理フラグがtrueでないは（ステップＳ２２１１）、変数Ｃ２２２ｃｏｌを＋１して（ステップＳ２２１２）、次の行の情報を取得する（ステップＳ２２１０）。整理フラグがtrueである場合、ＳＳＤＣ２６は、クラスタテーブル５３からブロックＩＤ（＝ＩＤ２２ｐｈｙｓ）を検索し、このブロックに含まれる全ての有効なクラスタをＮＡＮＤメモリ２４からＲＡＭ２５に読み出し（ステップＳ２２１３）、読み出したデータを追記可能ブロックに追記する（ステップＳ２２１４〜Ｓ２２１７）か、フリーブロックに書き込む（ステップＳ２２１８〜Ｓ２２２１）。追記可能ブロックに書き込む手順は、図２４のステップＳ２００２〜Ｓ２００４または、図２６のステップＳ２１０２〜Ｓ２１０４と同じであり、またフリーブロックに書き込む手順は、図２４のステップＳ２００８〜Ｓ２０１１、図２６のステップＳ２１０８〜Ｓ２１１１と同じであり、重複する説明は省略する。
【００９７】
ＳＳＤＣ２６は、書き込んだ全クラスタがそれぞれの書き込み先の物理アドレスに対応するよう、クラスタテーブル５３を書き換える（ステップＳ２２２２）。すなわち、書き込んだ全クラスタについて、ブロックＩＤ＝ID22adまたはID22free、ブロック内アドレス＝実際に書き込んだブロック内アドレス、無効フラグ＝falseとなるようにクラスタテーブル５３を書き換える。ＳＳＤＣ２６は、ＮＡＮＤ整理対象となったブロック（＝ＩＤ２２ｐｈｙｓ）をフリーブロックテーブル５０に追加し、さらにこのブロックをアクティブブロックテーブル５１から削除する（ステップＳ２２２３）。ＳＳＤＣ２６は、ＮＡＮＤ整理したクラスタについて、整理済みフラグ＝ｔｒｕｅとなるようクラスタ単位無効データログ６２を書き換える（ステップＳ２２２４）。ＳＳＤＣ２６は、ＮＡＮＤ整理対象リスト８０において、ＮＡＮＤ整理したブロックに対し、未整理フラグ＝falseと書き換える（ステップＳ２２２５）。ＮＡＮＤ整理対象リスト８０の最終行までの処理が終わってＮＡＮＤ整理が完了すると（ステップＳ２２２６）、ＳＳＤＣ２６は、ＮＡＮＤ整理対象リスト８０をクリア（消去）する（ステップＳ２２２７）。
【００９８】
［削除通知］
次に削除通知について説明する。削除通知は、ホスト３のＯＳ１６でデータの削除が行われた場合に、ホスト３から不揮発性記憶装置２に対して送信される命令である。削除通知の例として、たとえば、INCITS ATA/ATAPI Command Set-2（ＡＣＳ−２）で記述されているData Set Management Command(通称トリム（ＴＲＩＭ）コマンド)があげられる（文献１参照）。これは、ＯＳ１６上でデータが削除された場合、ＬＢＡおよび論理セクタ数に関するデータ（LBA Range Entry）をメモリシステムに通知することにより、以後不揮発性記憶装置２上で、指定されたＬＢＡから論理セクタ数分のＬＢＡ領域を空き領域として扱うことができる方式である。削除通知により、ＳＳＤ２はフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、Data Set Management Commandだけでなく、たとえばベンダー独自のコマンドなどその他コマンドによって実現してもよい。
【００９９】
文献２〜３にあるように、ＬＢＡ領域に対する削除通知の処理は、不揮発性メモリに保存されたデータそのものを消去するとは限らない。たとえば、管理情報３１を書き換え、ユーザデータの実体は消去しないことによって削除通知処理は実現される。このような削除通知処理を、以後、削除処理Ａという。ユーザによって削除されていたデータであっても、ＳＳＤ２を分解し内部の不揮発性メモリ２４を解析することによって、ユーザデータを解析されてしまう恐れがある（文献４）。本実施形態においては、当該削除通知処理において、該当するデータを解析困難な状態にする。このような削除通知処理を、以後、削除処理Ｂという。削除処理ＢはＮＡＮＤメモリ２４に対するアクセスが比較的多く発生することにより、削除処理Ａよりも処理に時間がかかりかつＮＡＮＤメモリ２４の信頼性を劣化させる恐れがあるため、ＳＳＤ２は削除処理Ｂだけでなく削除処理Ａも処理可能であることが望ましい。
【０１００】
本実施形態においては、たとえば、ＳＳＤ２はホスト３からの命令に応じて、削除処理Ａと削除処理Ｂを任意に選択可能であるとする。本実施形態では、図２９に示すように、たとえば、ＡＣＳ−２のData Set Management Commandにおいて、入力パラメータであるFeatureのビット０が１でビット１が０であるとき（ｂｉｔ１：０＝１）には、当該LBA Range Entryに対して削除処理Ａが割り当てられ、ビット０が１でビット１が１であるとき（ｂｉｔ１：０＝３）には、当該LBA Range Entryに対して削除処理Ｂが割り当てられるようにする。もちろん、削除処理Ａと削除処理Ｂの割り当ては他のパラメータに従って行ってもよいし、削除処理Ａと削除処理Ｂとで別々のコマンド番号を割り当てることにしてもよい。
【０１０１】
図３０に、削除通知コマンド受信時の動作手順を示す。ＳＳＤ２がホスト３から削除通知を受信した場合は（ステップＳ２６０１）、ＳＳＤＣ２６は、この削除通知命令を図３１に示す削除通知バッファ４０の削除通知コマンドバッファ４１に追加し、命令を受理した旨の応答をホスト３に返信する。応答をホスト３に返信しなくてもよい。
【０１０２】
一方、ＳＳＤＣ２６は削除通知コマンドバッファ４１を監視し、一定条件を満たした時、削除通知コマンドバッファ４１を整理する。一定条件とは、
・削除通知コマンドを受信した直後、
・削除通知コマンドバッファ４１が満杯になった場合、または削除通知コマンドバッファ４１の使用容量が所定値を上回った場合、
・ホスト３から最後にコマンドを受信してから一定時間以上経過した場合
・スタンバイ状態やアイドル状態に移行するためのコマンドをホスト３から受信した場合
・削除通知コマンドバッファを整理するためのコマンドをホスト３から受信した場合
などがあげられる。
【０１０３】
図３２は、削除通知コマンドバッファ４１にバァファリングされた削除コマンドについての処理手順を示すものである。ＳＳＤＣ２６は、削除通知コマンドバッファ４１にバァファリングされた削除通知コマンドのFeatureのビット１を判定し、Featureのビット１が０であるときは、削除処理Ａへ移行し、Featureのビット１が１であるときは、削除処理Ｂへ移行する。（ステップＳ２７０１）
【０１０４】
削除処理Ａの場合、ＳＳＤＣ２６は、各LBA Range Entryをトラック単位に分解し、LBA Range Entryにトラックサイズ分全て包含されているトラックアドレス（端数トラックでないトラックのアドレス）をデータ無効化用トラック管理テーブル４２に追加する。なお、重複しているトラックはテーブル４２に追加しない（ステップＳ２７０２）。その後、ＳＳＤＣ２６は、テーブル４２に追加されなかった各トラック（図１８に示す端数トラック）をクラスタ単位に分解し、LBA Range Entryにクラスタサイズ分全て包含されているクラスタのアドレスをデータ無効化用クラスタ管理テーブル４３に追加する。なお、重複しているクラスタはテーブル４３に追加しない（ステップＳ２７０３）。テーブル４３に追加されなかった各クラスタ（端数クラスタ）は、クラスタ未満の単位でないと管理できなく、処理速度が優先される削除処理Ａにおいては、当該クラスタに対しては何もしないのが望ましい。なお、テーブル４３に追加されなかった各クラスタを論理セクタ単位に分解し、データ無効化用セクタ管理テーブル４４に追加してもよい。なお、重複しているセクタはテーブル４４に追加しない（ステップＳ２７０４）。本実施形態では、データ無効化用セクタ管理テーブル４４は削除通知バッファ４１に含まれず、ステップＳ２７０４が実行されないものとする。
【０１０５】
削除処理Ｂの場合、各LBA Range Entryをトラック単位に分解し、LBA Range Entryにトラックサイズ分全て包含されているトラックのアドレスを完全消去用トラック管理テーブル４５に追加する。なお、重複しているトラックはテーブル４５に追加しない（ステップＳ２７０５）。次に、テーブル４５に追加されなかった各トラック（図１８に示す端数トラック）をクラスタ単位に分解し、LBA Range Entryにクラスタサイズ分全て包含されているクラスタのアドレスを完全消去用クラスタ管理テーブル４６に追加する。なお、重複しているクラスタはテーブル４６に追加しない（ステップＳ２７０６）。次に、テーブル４６に追加されなかった各クラスタ（端数クラスタ）を論理セクタ単位に分解し、完全消去用セクタ管理テーブル４７に追加する。なお、重複しているセクタはテーブル４７に追加しない（ステップＳ２７０７）。なお、処理速度優先や余分なＮＡＮＤメモリ２４のブロック消去を抑制するためにクラスタ単位未満のセクタ単位については削除処理Ｂを行わないようにしてもよいが、その場合、削除処理Ｂのコマンドプロトコルの仕様にクラスタ未満の単位のデータ消去は保証しない旨が記述されているのが望ましい。
【０１０６】
最後に、ＳＳＤＣ２６は、処理の終わった削除通知コマンドを、削除通知コマンドバッファ４１から削除する（ステップＳ２７０８）。
【０１０７】
ＳＳＤＣ２６は、データ無効化用トラック管理テーブル４２とデータ無効化用クラスタ管理テーブル４３（とデータ無効化用セクタ管理テーブル４４）を監視して、一定条件を満たした時、図３３に示す、データ無効化用トラック管理テーブル４２とデータ無効化用クラスタ管理テーブル４３（とデータ無効化用セクタ管理テーブル４４）の整理、すなわちトラック単位データの無効化処理（ステップＳ２Ａ０１）と、クラスタ単位データ無効化処理（ステップＳ２Ａ０２）を含む削除処理Ａの実体処理を実行する。
【０１０８】
また、ＳＳＤＣ２６は、完全消去用トラック管理テーブル４５、完全消去用クラスタ管理テーブル４６、および完全消去用セクタ管理テーブル４７を監視し、一定条件を満たした時、図３４に示す、完全消去用トラック管理テーブル４５、完全消去用クラスタ管理テーブル４６、および完全消去用セクタ管理テーブル４７の整理、すなわちトラック単位完全消去処理（ステップＳ２Ｂ０１）と、クラスタ単位完全消去処理（ステップＳ２Ｂ０２）と、セクタ単位完全消去処理（ステップＳ２Ｂ０３）とを含む削除処理Ｂの実体処理を実行する。
【０１０９】
一定条件とは、たとえば、
・テーブル４２〜４７が満杯になった場合、またはテーブル４２〜４７の使用容量が所定値を上回った場合、
・ホスト３から最後にコマンドを受信してから一定時間以上経過した場合、
・スタンバイ状態やアイドル状態に移行するためのコマンドをホスト３から受信した場合、
・テーブル４２〜４４を整理するためのコマンドをホスト３から受信した場合、
・テーブル４５〜４７を整理するためのコマンドをホスト３から受信した場合（この場合については後で詳述する）
などがあげられる。
【０１１０】
[トラック単位データ無効化処理]
図３５にデータ無効化用トラック管理テーブル４２の処理手順（トラック単位データ無効化処理手順）を示す。ＳＳＤＣ２６はテーブル４２が空である時、処理を終了する。ＳＳＤＣ２６は、テーブル４２の現在行（エントリ）を管理する変数であるＸ１Ｃｏｌを１にセットする（ステップＳ２８０２）。ＳＳＤＣ２６は、変数Ｘ１Ｃｏｌがテーブル４２の行数を超過するまで（ステップＳ２８１０）、変数Ｘ１Ｃｏｌをインクリメントしながら（ステップＳ２８０９）、テーブル４２の各行について以下のように該当トラックの無効化処理を行う。
【０１１１】
ＳＳＤＣ２６は、テーブル４２の現在行からトラックアドレスを読み出して変数Ａ１ＴＲに代入し（ステップＳ２８０３）、トラックテーブル５２からトラックアドレスＡ１ＴＲを検索し（ステップＳ２８０４）、トラックアドレスＡ１ＴＲが存在する場合はトラックＡ１ＴＲに対応する物理ブロックをフリーブロックテーブル５０に追加してアクティブブロックテーブル５１から削除し（ステップＳ２８０６）、該当行の情報をトラック単位無効データログ６１に追加し、トラックテーブル５２の該当行の無効フラグをtrueに書き換える（ステップＳ２８０７）。トラックアドレスＡ１ＴＲがトラックテーブル５２に存在しない場合は、ＳＳＤＣ２６は当該トラックＡ１ＴＲ内の全クラスタをデータ無効化用クラスタ管理テーブル４３に追加する（ステップＳ２８０８）。全行の処理を完了したら（ステップＳ２８１０）、テーブル４２を空にして処理を終了する（ステップＳ２８１１）。ＳＳＤＣ２６は、ＮＡＮＤ整理以外に、データ無効化処理によってもフリーブロックを確保することができる。
【０１１２】
[クラスタ単位データ無効化処理]
図３６にデータ無効化用クラスタ管理テーブル４３の処理手順（クラスタ単位データ無効化処理手順）を示す。ＳＳＤＣ２６はテーブル４３が空である時、処理を終了する。ＳＳＤＣ２６はテーブル４３の現在行（エントリ）を、変数Ｘ２Ｃｏｌを１にセットする（ステップＳ２９０１）。ＳＳＤＣ２６は、変数Ｘ２Ｃｏｌがテーブル４３の行数を超過するまで（ステップＳ２９０９）、変数Ｘ２Ｃｏｌをインクリメントしながら（ステップＳ２９０８）、テーブル４３の各行について以下のように該当クラスタの無効化処理を行う。
【０１１３】
ＳＳＤＣ２６はテーブル４３の現在行を参照し、クラスタアドレスを読み出しこれを変数Ａ２ＣＬに代入する（ステップＳ２９０２）。ＳＳＤＣ２６はクラスタテーブル５３からクラスタアドレス＝Ａ２ＣＬを検索し、該当行のブロックＩＤを取得して、取得したブロックＩＤを変数ＢＬＫ２Ｔに代入する（ステップＳ２９０３）。ＳＳＤＣ２６は該当行の情報（ブロックＩＤ＋ブロック内アドレス＋クラスタアドレス＋整理済みフラグ＝false）をクラスタ単位無効データログ６２に追加し、この該当行をクラスタテーブル５３から削除する（ステップＳ２９０４）。
【０１１４】
ＳＳＤＣ２６はブロックＩＤ（＝ＢＬＫ２Ｔ）をクラスタテーブル５３から検索し（ステップＳ２９０５）、見つからないブロックについては有効なデータを全く持っていないと考えられるため（ステップＳ２９０６）、ブロックＩＤ＝ＢＬＫ２Ｔをフリーブロックテーブル５０に追加してアクティブブロックテーブル５１から削除する（ステップＳ２９０７）。全行の処理を完了したら（ステップＳ２９０９）、テーブル４３を空にして処理を終了する（ステップＳ２９１０）。ＳＳＤＣ２６は、ＮＡＮＤ整理以外に、データ無効化処理によってもフリーブロックを確保することができる。
【０１１５】
[トラック単位完全消去処理]
図３７に完全消去用トラック管理テーブル４５に関する処理手順（トラック単位完全消去処理手順）を示す。ＳＳＤＣ２６はテーブル４５が空である時、処理を終了する。ＳＳＤＣ２６は、テーブル４５の現在行を管理する変数であるＸ４Ｃｏｌを１にセットする（ステップＳ３００２）。ＳＳＤＣ２６は、変数Ｘ４Ｃｏｌがテーブル４５の行数を超過するまで（ステップＳ３０１３）、変数Ｘ４Ｃｏｌをインクリメントしながら（ステップＳ３０１２）、テーブル４５の各行について以下のように該当トラックの無効化処理を行う。
【０１１６】
ＳＳＤＣ２６は、テーブル４５の現在行からトラックアドレスを読み出して変数Ａ４ＴＲに代入し（ステップＳ３００３）、トラックテーブル５２からトラックアドレスＡ４ＴＲを検索し（ステップＳ３００４）、トラックアドレスＡ４ＴＲが存在する場合は（ステップＳ３００５：Ｙｅｓ）、トラックＡ４ＴＲに対応する物理ブロックをフリーブロックテーブル５０に追加し、またトラックＡ４ＴＲに対応する物理ブロックをアクティブブロックテーブル５１から削除する（ステップＳ３００６）。また、ＳＳＤＣ２６は、トラックテーブル５２の該当行の情報（トラックアドレス＋ブロックＩＤ）をトラック単位無効データログ６１に追加し、トラックテーブル５２の該当行の無効フラグをtrueに書き換える（ステップＳ３００７）。トラックテーブル５２にトラックアドレスＡ４ＴＲが存在しない場合は（ステップＳ３００５：Ｎｏ）、ＳＳＤＣ２６は当該トラック内の全クラスタを完全消去用クラスタ管理テーブル４６に追加する（ステップＳ３００８）。
【０１１７】
現段階では、完全消去対象のデータは消去されていないため、以下で消去処理を行う。ＳＳＤＣ２６はトラック単位無効データログ６１からトラックアドレス＝Ａ４ＴＲが登録された行を全て抽出する（ステップＳ３００９）。ＳＳＤＣ２６は、抽出された行に登録されている全てのブロックＩＤについて、トラックテーブル５２に登録されているか否かをそれぞれ検索し、トラックテーブル５２から見つかった場合は、このブロックは有効なデータを保持していることになるため、消去処理を行わず、そのまま保持する。ＳＳＤＣ２６は、該当行全てのブロックＩＤについて、トラックテーブル５２から見つからなかった場合は、今度は該当行全てのブロックＩＤについて、それぞれクラスタテーブル５３から検索し、見つかった場合は、該当クラスタ全てをＲＡＭ２５に読み出して、取得したフリーブロックに書き込んでバックアップし、その後、当該ブロックを消去する。これに伴い、フリーブロックテーブル５０、アクティブブロックテーブル５１などの管理テーブルを更新する（ステップＳ３０１０）。一方、ＳＳＤＣ２６は、トラックアドレス＝Ａ４ＴＲに対応付けられたブロックＩＤがトラックテーブル５２にもクラスタテーブル５３にも見つからなかった場合も、このブロックＩＤを持つ当該ブロックを消去する（ステップＳ３０１０）。このように、有効データをバックアップしてから該当ブロックを消去するステップＳ３０１０の手順は、図３８のステップＳ３１１１−１、Ｓ３１１１−２、Ｓ３１１３、Ｓ３１１８〜Ｓ３１２３に同様の手順が詳細に示されている。
【０１１８】
ステップＳ３０１０の処理を行うことによって、現在有効なデータは保持されつつ、完全消去対象の論理アドレスに対応する現在だけでなく過去に書き込まれたデータも削除することが可能となる。本実施形態における有効データの退避方法は実施形態の一つであり、有効データの退避方法は他にもさまざまな種類が存在し、本発明は本実施形態に限定されるものではないことはもちろんである。
【０１１９】
ＳＳＤＣ２６は処理を終えた行をトラック単位無効データログ６１から削除する（ステップＳ３０１１）。ＳＳＤＣ２６は、全行の処理を完了したら（ステップＳ３０１３）、テーブル４２を空にして処理を終了する（ステップＳ３０１４）。ＳＳＤＣ２６は、データ無効化処理と同様に、完全消去処理によってもフリーブロックを確保することができる。
【０１２０】
なお、トラック単位完全消去処理においてブロック消去した場合、書き込みプロセス（図１７、図２０、図２２、図２４、図２６）やＮＡＮＤ整理プロセス（図２７）において再度ブロック消去が行われることを防ぐために、フリーブロックテーブル５０に消去済みフラグの項目をもうけて、ブロック消去したら消去済みフラグをtrueに書き換えて、以後消去済みフラグがtrueであるフリーブロックは消去を行わないようにしてもよい。フリーブロックがアクティブブロックになると、消去済みフラグはFalseにリセットされる。これは以後のクラスタ単位完全消去処理やセクタ単位完全消去処理についても同様である。
【０１２１】
[クラスタ単位完全消去処理]
図３８に完全消去用クラスタ管理テーブル４６に関する処理手順（クラスタ単位完全消去処理手順）を示す。ＳＳＤＣ２６はテーブル４６の現在行を管理する変数であるＸ５Ｃｏｌを１にセットする（ステップＳ３１０１）。ＳＳＤＣ２６は、変数Ｘ５Ｃｏｌが末尾に到達するまで（ステップＳ３１２７）、変数Ｘ５Ｃｏｌをインクリメントしながら（ステップＳ３１０３）、テーブル４６の各行について以下のように該当クラスタの無効化処理を行う。
【０１２２】
ＳＳＤＣ２６はテーブル４６の現在行を参照し、クラスタアドレスを読み出しこれを変数Ａ５ＣＬに代入する（ステップＳ３１０２）。ＳＳＤＣ２６はクラスタテーブル５３からクラスタアドレス＝Ａ５ＣＬを検索し、該当行のブロックＩＤを取得してBLK51Tに代入する（ステップＳ３１０４）。ＳＳＤＣ２６は、クラスタテーブル５３の該当行の情報（ブロックＩＤ＋ブロック内アドレス＋クラスタアドレス＋整理済みフラグ＝false）をクラスタ単位無効データログ６２に追加し、この該当行をクラスタテーブル５３から削除する（ステップＳ３１０５）。
【０１２３】
ＳＳＤＣ２６はブロックＩＤ＝BLK51Tをクラスタテーブル５３から検索し（ステップＳ３１０６）、ブロックＩＤ＝BLK51Tがクラスタテーブル５３に見つからなかった場合は、このブロックについては、他に有効なデータを全く持っていないと考えられるため、ブロックＩＤ＝BLK51Tのブロックをフリーブロックテーブル５０に追加して、さらにブロックＩＤ＝BLK51Tのブロックをアクティブブロックテーブル５１から削除する（ステップＳ３１０８）。その後、ＳＳＤＣ２６は、クラスタ単位無効データログ６２からクラスタアドレス＝Ａ５ＣＬを検索し、該当行の情報を図３９に示す消去対象一時リスト１００に全て追加する（ステップＳ３１０９）。また、ブロックＩＤ＝BLK51Tがクラスタテーブル５３から見つかった場合も（ステップＳ３１０７：Ｙｅｓ）、ステップＳ３１０９の処理を実行する。消去対象一時リスト１００は、消去対象のクラスタを一時的に管理するリストであり、ブロックＩＤ、ブロック内アドレス、クラスタアドレスＡ５ＣＬが登録される。
【０１２４】
ＳＳＤＣ２６は消去対象一時リスト１００の現在行を管理する変数であるＹ５Ｃｏｌを１にセットする（ステップＳ３１１０）。ＳＳＤＣ２６は消去対象一時リスト１００の末尾に到達するまで（Ｓ３１２５）、Ｙ５Ｃｏｌをインクリメントしながら（ステップＳ３１１２）、消去対象一時リスト１００の各行について以下のようにして該当クラスタの完全削除処理を行う。
【０１２５】
ＳＳＤＣ２６は、消去対象一時リスト１００のＹ５Ｃｏｌ行を読み出し、該当クラスタの属するブロックＩＤ＝BLK52Tを取得し（ステップＳ３１１１）、以下のようにしてブロックBLK52Tに含まれる無効データ以外の有効データをバックアップした後（ステップＳ３１１１−１〜３１２２）、ブロックＩＤ＝BLK52Tのブロックを消去することでブロックBLK52Tに含まれる無効データを消去する（ステップＳ３１２３）。
【０１２６】
つまり、ＳＳＤＣ２６はブロックＩＤ＝BLK52Tをトラックテーブル５２から検索し、ブロックＩＤ＝BLK52Tのブロックであって、無効フラグ＝falseで、トラックアドレスが有効値のエントリがトラックテーブル５２において見つかった場合は、ブロックBLK52Tは有効なデータを保持していることになるため、以下のステップをスキップしてトラックデータをそのまま保持する（ステップＳ３１１１−１：Ｙｅｓ）。なお、このトラックをＲＡＭ２５に読み出してＮＡＮＤメモリ２４の別のブロックに書き込むようにしてもよいが、ＮＡＮＤメモリ２４への余分な書き込みが発生するので、望ましくない。
【０１２７】
ブロックＩＤ＝BLK52Tのブロックがトラックテーブル５２において見つからなかった場合は（ステップＳ３１１１−１：Ｎｏ）、ＳＳＤＣ２６はブロックＩＤ＝BLK52Tのブロックをクラスタテーブル５３から検索する（ステップＳ３１１１−２）。すなわち、クラスタテーブルにおいて、ブロックＩＤ＝BLK52Tのブロックであって、無効フラグ＝falseで、クラスタアドレスが有効値のエントリを検索する。ブロックＩＤ＝BLK52Tのブロックがクラスタテーブル５３において見つからなかった場合は（ステップＳ３１１１−２：Ｎｏ）、ブロックＩＤ＝BLK52Tのブロックのデータを保持する必要がないため、ステップＳ３１２３に移行してブロックBLK52Tを消去する。
【０１２８】
ブロックＩＤ＝BLK52Tのブロックがクラスタテーブル５３において見つかった場合は（ステップＳ３１１１−２：Ｙｅｓ）、ＳＳＤＣ２６は、ブロックＩＤ＝BLK52Tのブロックに含まれる有効クラスタを全てＮＡＮＤメモリ２４からＲＡＭ２５上に読み出して（ステップＳ３１１３）、読み出したクラスタをＮＡＮＤメモリ２４のブロックに追記する（ステップＳ３１１４〜Ｓ３１１７）か、ＮＡＮＤメモリ２４のブロックに新規書き込みする（ステップＳ３１１８〜Ｓ３１２１）。
【０１２９】
具体的には、ＳＳＤＣ２６は、アクティブブロックテーブル５１およびフリーブロックテーブル５０のブロック内追記アドレスＣＯＦＦを参照することで、追記可能ブロックが存在するか否かを判定して、追記可能ブロックが存在するか否かを判定し（ステップＳ３１１４）、追記可能ブロックが存在しない場合は、手順をステップＳ３１１８に移行する。追記可能ブロックが存在する場合、ＳＳＤＣ２６は、追記可能ブロックのブロックＩＤ（＝ID31ad）を取得し（ステップＳ３１１５）、このブロックのブロック内追記アドレスＣＯＦＦから、ＲＡＭ２５に読み出したクラスタデータを追記する（ステップＳ３１１６）。ＳＳＤＣ２６は、追記可能ブロックとしてアクティブブロックを用いた場合は、ブロック内追記アドレスＣＯＦＦ＝ＣＯＦＦ＋クラスタサイズ合計となるように、アクティブブロックテーブル５１のブロックＩＤ（＝ID31ad）のエントリを更新する。また、追記可能ブロックとしてフリーブロックを用いた場合は、フリーブロックテーブル５０からブロックＩＤ（＝ID31ad）のエントリを削除し、アクティブブロックテーブル５１にブロックＩＤ（＝ID31ad）のエントリを追加する（ステップＳ３１１７）。その後、手順をステップＳ３１２２に移行される。
【０１３０】
ステップＳ３１１８においては、ＳＳＤＣ２６は、フリーブロックテーブル５０からフリーブロックのブロックＩＤ（＝ID31free）を取得し、この取得したフリーブロックを消去した後、このフリーブロックにＲＡＭ２５に読み出したクラスタデータを書き込む（ステップＳ３１１９）。ＳＳＤＣ２６はトラック管理無効データログ６１およびクラスタ管理無効データログ６２からブロックＩＤ（＝ID31free）を検索し、このブロックＩＤ（＝ID31free）のエントリを全て削除する（ステップＳ３１２０）。ＳＳＤＣ２６は、ブロックＩＤ＝ID31free、消去回数、ブロック内追記アドレスＣＯＦＦ＝クラスタサイズ合計を含む情報をアクティブブロックテーブル５１に登録し、またブロックＩＤ（＝ID31free）のエントリをフリーブロックテーブル５０から削除する（ステップＳ３１２１）。その後、手順をステップＳ３１２２に移行される。
【０１３１】
ステップＳ３１２２においては、ＳＳＤＣ２２は、追記可能ブロックまたは新規フリーブロックに書き込んだ全クラスタについて、管理情報３１を書き換える。具体的には、ＳＳＤＣ２６は、ブロックＩＤ（＝ID31freeまたはID31ad）、ブロック内アドレス、無効フラグ＝falseとなるようにクラスタテーブル５３を書き換える。
【０１３２】
ステップＳ３１２３では、ＳＳＤＣ２６は、ブロックＩＤ＝BLK52Tのブロックを消去する。また、ブロックＩＤ＝BLK52T、その消去回数、ブロック内追記アドレスＣＯＦＦ＝初期値（未書き込み状態）をフリーブロックテーブル５０に追加し、ブロックＩＤ（＝BLK52T）のエントリをアクティブブロックテーブル５１から削除する。以上のような処理によって、現在有効なデータを別ブロックに退避してからブロック消去を行う。これにより、現在有効なデータを保持しつつ無効データの消去が可能となる。本実施形態における有効データの退避方法は実施形態の一つであり、有効データの退避方法は他にもさまざまな種類が存在し、本発明は本実施形態に限定されるものではないことは勿論である。
【０１３３】
つぎに、ＳＳＤＣ２６はクラスタ単位無効データログ６２からブロックＩＤ＝BLK52Tを検索し、該当行全てに対し、クラスタアドレス＝NULL、ブロックＩＤ＝NULLと書き換えることで、消去済みの無効データが重複して消去されることを防ぐ（ステップＳ３１２４）。ＳＳＤＣ２６は消去対象一時リスト１００の全行を処理し終えたら（ステップＳ３１２５）、消去対象一時リスト１００をクリアする（ステップＳ３１２６）。ＳＳＤＣ２６は、完全消去用クラスタ管理テーブル４６の全行を処理し終えたら（ステップＳ３１２７）、完全消去用クラスタ管理テーブル４６をクリアする（ステップＳ３１２８）。ＳＳＤＣ２６はクラスタ単位無効データログ６２からクラスタアドレス＝NULLを検索して該当行を全て削除する（ステップＳ３１２８）。ＳＳＤＣ２６は、データ無効化処理と同様に、完全消去処理によってもフリーブロックを確保することができる。
【０１３４】
[セクタ単位完全消去処理]
図４０に、完全消去用セクタ管理テーブル４７の処理手順（セクタ単位完全消去処理手順）を示す。ＳＳＤＣ２６はテーブル４７が空である時は（ステップＳ３２０１：Ｙｅｓ）、処理を終了する。ＳＳＤＣ２６はテーブル４７の現在行を管理する変数であるＸ６Ｃｏｌを１にセットする（ステップＳ３２０２）。ＳＳＤＣ２６は、変数Ｘ６Ｃｏｌが末尾に到達するまで（ステップＳ３２１５）、変数Ｘ６Ｃｏｌをインクリメントしながら（ステップＳ３２０４）、テーブル４７の各行について以下のように該当セクタの消去処理を行う。
【０１３５】
ＳＳＤＣ２６はテーブル４７の現在行を参照し、そのＬＢＡを読み出しこれを変数Ａ６ＬＢＡに代入する（ステップＳ３２０３）。Ａ６ＬＢＡが有効値であるとき（ステップＳ３２０５：Ｎｏ）、ＳＳＤＣ２６は、Ａ６ＬＢＡからＡ６ＬＢＡが所属するクラスタアドレスＡ６ＣＬを計算し（ステップＳ３２０６）、さらにテーブル４７から同一クラスタＡ６ＣＬに属するその他のセクタ（ＬＢＡ＝Ａ６ＬＢＡｓｕｂ）を検索する（ステップＳ３２０７）。つぎに、ＳＳＤＣ２６は、Ａ６ＬＢＡが属するクラスタＡ６ＣＬのデータをＮＡＮＤメモリ２４よりＲＡＭ２５に読み出し（このデータをＤＡＴＡ３２００と呼ぶ；ステップＳ３２０８）、ＤＡＴＡ３２００のうち完全消去用セクタ管理テーブル４７に属するセクタ（Ａ６ＬＢＡおよびＡ６ＬＢＡｓｕｂ）のみ０-fillデータで埋める（ステップＳ３２０９）。これにより、無効セクタデータのみがＤＡＴＡ３２００から消去される。なお、０-fillデータ以外の任意のデータで、完全消去用セクタ管理テーブル４７に属するセクタ（Ａ６ＬＢＡおよびＡ６ＬＢＡｓｕｂ）を埋めるようにしてもよい。
【０１３６】
ＳＳＤＣ２６は、クラスタアドレスＡ６ＣＬを完全消去用クラスタ管理テーブル４６に追加し（ステップＳ３２１０）、前述したクラスタ単位完全消去処理を行うことで、完全消去セクタＡ６ＬＢＡおよびＡ６ＬＢＡｓｕｂを含むクラスタＡ６ＣＬのデータが完全消去される（ステップＳ３２１１）。ＳＳＤＣ２６は、ＲＡＭ２５に記憶しているＤＡＴＡ３２００をＮＡＮＤメモリ２４に書き込んで、管理テーブルを書き換える（ステップＳ３２１２〜ステップＳ３２１３）。これにより、クラスタＡ６ＣＬのうち、有効なデータが保持されることになる。具体的には、クラスタアドレスＡ６ＣＬおよびＤＡＴＡ３２００の書き込み先の物理アドレスをクラスタテーブル５３に追加し（ステップＳ３２１２）、書き込み先の物理アドレスを含むブロックをアクティブブロックテーブル５１に登録し、書き込み先の物理アドレスを含むブロックをフリーブロックテーブル５０から削除する（ステップＳ３２１３）。
【０１３７】
ＳＳＤＣ２６は、テーブル４７からクラスタＡ６ＣＬに属するＬＢＡを検索し、該当行全てにNULLを記入する（ステップＳ３２１４）。これは、同一クラスタについて余分な消去を行うのを防ぐためである。ＳＳＤＣ２６は、完全消去用セクタ管理テーブル４７の全行の処理が完了すると（ステップＳ３２１５）、完全消去用セクタ管理テーブル４７をクリアする（ステップＳ３２１６）。ＳＳＤＣ２６は、データ無効化処理と同様に、完全消去処理によってもフリーブロックを確保することができる。
【０１３８】
前述のように、削除処理Ａの実体処理（図３３）および削除処理Ｂの実体処理（図３４）は種々の条件に従って行われる。削除処理Ｂの実体処理は、バックグラウンドで適宜行うことも可能であるが、削除済みユーザデータのセキュリティ上の観点で、ホスト３からの求めに応じて削除処理Ｂの実体処理を強制的に行うようにすることが望ましい。たとえば、図４１に示すように、ＡＣＳ−２のData Set Management Commandにおいて、入力パラメータであるFeatureのビット０が０でビット１が１である（ｂｉｔ１：０＝２）コマンド（削除処理Ｂ実行コマンド）をＳＳＤ２がホスト３から受信した場合は、ＳＳＤＣ２６は削除処理Ｂの実体処理を開始し、完了したときコマンドの完了通知をホスト３に送信するようにしてよい。
【０１３９】
あるいは、削除処理Ｂ実行コマンドを受信したら削除処理Ｂの実体処理を開始してコマンドの完了通知をホスト３に送信し、バックグラウンドで削除処理Ｂの実体処理を行うようにしてもよい（オフライン処理）。その場合は、ホスト３は削除処理Ｂの実体処理の進行状況を把握できることが望ましい。例えば、ＡＣＳ−２の25h READ LOG DMA EXT、B0h/D0h SMART READ DATA、Boh/D5h SMART READ LOGなどのコマンドをホスト３がＳＳＤ２に送信することで、削除処理Ｂの実体処理の進捗状況（完了度（％）など）を含むデータをＳＳＤＣ２６がホスト３に送信するようにしてもよい。もちろん、削除処理Ｂの実体処理開始コマンドの割り当ては他のパラメータに従って行ってもよいし、ベンダー独自のコマンドなど他のコマンドを割り当ててもよい。
【０１４０】
以上のようにして、図４２に示すように、削除処理Ｂを通じて、削除処理Ｂの対象となるＬＢＡ領域のデータの実体そのものが消去される。消去されるのは、当該ＬＢＡ領域が論物変換テーブルで対応している有効なデータだけでなく（図４２のＡ）、当該ＬＢＡ領域が過去に論物変換テーブルで対応していてデータの実体がまだ残っているアクティブブロック中の無効なデータ（図４２のＢ）や、当該ＬＢＡ領域が過去に論物変換テーブルで対応していてデータの実体はまだ残っているフリーブロック中の無効なデータ（図４２のＣ）も削除される。削除処理の対象となるＬＢＡ領域に属さないＬＢＡ領域の有効データについては、他ブロックにコピーされて保護される。
【０１４１】
図９に示したＥレベルの分布の形状から消去前のデータを解析されることを防止する観点において、本実施形態で行われるブロック消去処理は、前述した消去ベリファイ（図４３）やソフトプログラム（図４４）を行うことによって、Ｅレベル状態の閾値分布が狭くなるようにすることが望ましい。ソフトプログラムとは、ブロック消去後に読み出しを行い、Vspよりも閾値が小さいセルに対して若干の書き込みを行うことにより、Ｅレベル分布の下方の裾広がりを抑制する動作のことである。
【０１４２】
解析困難度をさらに向上させるという観点では、図４５に示すように、消去を行い、いったんＥレベルより高い閾値に書き込みを行い、再度消去を行うようにすることが望ましく、さらにこの処理を複数回繰り返すようにしてもよい。ただし、難読性が向上する反面、速度性能が低下する。
【０１４３】
また、図４６に示すように、消去を行い、いったんＥレベルより高い閾値に書き込みを行い、その後は消去を行わないようにしてもよい。
【０１４４】
難読性や速度性能をユーザが自由にカスタマイズできるようにするという観点では、上書きと消去と上書きおよび消去との何れを実行するか、上書き回数、消去回数、上書きおよび消去の繰り返し回数、消去ベリファイやソフトプログラムの有無は、削除処理Ｂのコマンド内で指定できることが望ましい。たとえば、ＡＣＳ−２のData Set Management Commandにおいて、入力パラメータであるＬＢＡビットをそれらの設定用に割り当ててもよい。
【０１４５】
このように第１の実施形態によれば、ＳＳＤ２は、ホスト装置にとって無効なデータであって、ＮＡＮＤメモリで消去されずに保持されているデータである無効データの論物変換情報を無効データログによって管理するようにしているので、ホストがデータ消去を明示的に指定するコマンドを発行すれば、このコマンドで指定されたデータが消去される。これにより、ホストが指定したデータの難読性を向上させることができ、セキュリティ強度が向上する。また、ACS-2に規定されているSecurity Erase Unitコマンドなどを使用して全ブロックまたは全フリーブロックを一括消去する場合に比べて一度に消去する消去ブロック数を低減させることができるため、ブロックの消去回数を低減させることができＳＳＤの信頼性悪化を抑制することができるとともに、データ消去時の処理時間を減らすことが可能になる。
【０１４６】
（第２の実施形態）
第２の実施の形態では、削除処理Ｂを行うとき、ブロック消去を行うのではなく、図７に示すように、消去状態を示す閾値電圧分布Ｅよりも高いベリファイ電圧をブロック全体に印加することで、ブロック全体を閾値電圧分布Ａまたは閾値電圧分布Ｂまたは閾値電圧分布Ｃに書き込むことで、ブロック全体を上書きしてデータを破壊するようにしてもよい。この上書き破壊の際の閾値電圧分布としては、図４７に示すように、最も高い閾値電圧分布ＣまたはＣレベルよりも高い閾値電圧分布を選択した方が、より難読性を向上させることが可能である。
【０１４７】
また、上書き破壊は、ブロック全体ではなく、削除処理Ｂの対象データを含むページに対してのみ行うようにしてもよい。また、効果は低くなるが、上書き破壊するデータとしてＣレベルよりも低い閾値電圧分布を選択してもよく、例えば、図４８に示すように、上書き破壊データとしてＢレベルを採用し、ＥレベルおよびＡレベルのデータに対してはＢレベルのデータを書き込み、ＢレベルおよびＣレベルのデータに対しては書き込みを行わないようにして難読性を高めてもよい。
【０１４８】
第２の実施形態では、ブロック消去ではなく上書き破壊によって削除処理Ｂを行うようにしているので、ブロック消去回数が削減され、ＳＳＤの長寿命化に寄与する。
【０１４９】
（第３の実施形態）
ＯＳ１６上において、各ファイルのプロパティの属性に、オプションとして「保護データ」という項目をつけるようにしてもよい。この「保護データ」という項目にチェックが入っているファイルを削除した場合は、削除処理Ｂ用のトリムコマンドが送信され、ここにチェックが入っていないファイルを削除した場合は削除処理Ａ用のトリムコマンドが送信される。ＯＳ１６のファイルなどユーザ独自のデータでないファイルは削除処理Ｂを行っても、ＳＳＤ２の性能と書き込み効率が犠牲になるだけで利点が少ないので、この第３の実施形態の処理を行うことで、削除処理Ｂの対象ファイルを限定することができる。また、ファイルを右クリックした際に表示されるポップアップメニューに、「削除」の他に「安全な削除」のメニューを追加し、「削除」を選んだ場合は通常のデータ無効化による削除、「安全な削除」を選んだ場合は、データ消去を伴うようにＯＳ１６を設定するようにしてもよい。
【０１５０】
また、ホストから、安全な削除を指定されたにも関わらずファイルを消去できなかった場合は、Read LogやSMART READ DATAやREAD SMART LOGにより、削除できなかったＬＢＡのリスト、削除できなかったエラー回数などをＳＳＤ２がホストに送信し、ユーザが削除できなかったＬＢＡを管理可能なようにしてもよい。
【０１５１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５２】
１  コンピュータシステム、２  ＳＳＤ、３  ホスト、２４  ＮＡＮＤ 型フラッシュメモリ、２５  ＲＡＭ、４０  削除通知バッファ、４１  削除通知コマンドバッファ、４２  データ無効化用トラック管理テーブル、４３  データ無効化用クラスタ管理テーブル、４４  データ無効化用セクタ管理テーブル、４５  完全消去用トラック管理テーブル、４６  完全消去用クラスタ管理テーブル、４７  完全消去用セクタ管理テーブル、６０  無効データログ、６１  トラック管理無効データログ、６２  クラスタ管理無効データログ、８０  整理対象リスト、１００  消去対象一時リスト。
【図１】
0005659178.tif 000002
【図２】
0005659178.tif 000003
【図３】
0005659178.tif 000004
【図４】
0005659178.tif 000005
【図５】
0005659178.tif 000006
【図６】
0005659178.tif 000007
【図７】
0005659178.tif 000008
【図８】
0005659178.tif 000009
【図９】
0005659178.tif 000010
【図１０】
0005659178.tif 000011
【図１１】
0005659178.tif 000012
【図１２】
0005659178.tif 000013
【図１３】
0005659178.tif 000014
【図１４】
0005659178.tif 000015
【図１５】
0005659178.tif 000016
【図１６】
0005659178.tif 000017
【図１７】
0005659178.tif 000018
【図１８】
0005659178.tif 000019
【図１９】
0005659178.tif 000020
【図２０】
0005659178.tif 000021
【図２１】
0005659178.tif 000022
【図２２】
0005659178.tif 000023
【図２３】
0005659178.tif 000024
【図２４】
0005659178.tif 000025
【図２５】
0005659178.tif 000026
【図２６】
0005659178.tif 000027
【図２７】
0005659178.tif 000028
【図２８】
0005659178.tif 000029
【図２９】
0005659178.tif 000030
【図３０】
0005659178.tif 000031
【図３１】
0005659178.tif 000032
【図３２】
0005659178.tif 000033
【図３３】
0005659178.tif 000034
【図３４】
0005659178.tif 000035
【図３５】
0005659178.tif 000036
【図３６】
0005659178.tif 000037
【図３７】
0005659178.tif 000038
【図３８】
0005659178.tif 000039
【図３９】
0005659178.tif 000040
【図４０】
0005659178.tif 000041
【図４１】
0005659178.tif 000042
【図４２】
0005659178.tif 000043
【図４３】
0005659178.tif 000044
【図４４】
0005659178.tif 000045
【図４５】
0005659178.tif 000046
【図４６】
0005659178.tif 000047
【図４７】
0005659178.tif 000048
【図４８】
0005659178.tif 000049