(57)【要約】  フラッシュメモリ装置の揮発性メモリ内に存在するメモリ管理データ構造を利用してフラッシュメモリを管理する。メモリ装置に電源を供給する度にメモリ管理データ構造を生成および更新する。フラッシュメモリへの書き込み動作中に、フラッシュメモリ内の特定位置を更新してフラッシュメモリの現在の状態を反映する。電源の遮断時は、電源を再度加えるとメモリ管理データ構造が再生成される。フラッシュメモリをスキャンし、フラッシュメモリの特定位置から取得した情報を利用してメモリ管理データ構造を構築する。不良ブロックデーブルは必要ではない。フラッシュメモリを管理して、比較的良好なランダム書き込み性能を供給し、電源の遮断に対応する。応用例には、（例えば、抜かれることにより）電源の障害が任意の時点で発生しうる汎用目的コンピューティング装置用のフラッシュメモリの使用が含まれる。
2009512022.tif 000002
【特許請求の範囲】
【請求項１】
メモリを管理する方法であって、
メモリ管理データ構造に従ってメモリにアクセスするステップであって、前記メモリ管理データ構造は前記メモリに関連する情報を備えるステップと、
前記メモリの指定位置を、メモリ状態に関連する情報で動的に更新するステップと、
前記メモリ管理データ構造を、メモリ状態に関連する情報で動的に更新するステップと
を含むことを特徴とする方法。
【請求項２】
前記メモリ管理データ構造を、前記メモリ内の前記指定位置に格納した前記情報に従って生成するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記メモリはフラッシュメモリを備え、
前記メモリ管理データ構造を揮発性メモリに格納し、
前記揮発性メモリに対する電源不足の後に電源を前記揮発性メモリに加える度に、前記メモリ管理データ構造を構築すること
を特徴とする請求項２に記載の方法。
【請求項４】
前記メモリは複数のブロックを備え、各ブロックは複数のページを備え、
前記メモリ内の前記指定位置は、
各ブロック内の第１の指定ページであって、夫々のブロックの各々第１の指定ページは、
夫々のブロックの状態が良好および不良のうちの１つであることおよび、
夫々のブロックは消去および未消去のうちの１つであること
を示す第１の指定ページおよび、
各ブロック内の第２の指定ページであって、夫々のブロックの各々第２の指定ページは、
夫々のブロックの論理ブロックアドレスと各ページとの間の関係、
夫々のブロックの各ページ部分の有効性状態および、
前記メモリ内のブロックを消去した回数を示すブロックシーケンス番号
を示す第２の指定ページ
を備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記メモリ管理データ構造を構築するステップをさらに備え、前記の構築動作は、
各ブロック内の各々の第１の指定ページを読み取るステップと、
前記メモリ管理データ構造を、各々の読み取った第１の指定ページ内に含まれる情報に従って構築するステップと、
各ブロック内の各々の第２の指定ページを読み取るステップと、
前記メモリ管理データ構造を、各々の読み取った第２の指定ページに含まれる情報に従って構築するステップと
を含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記第２の指定ページを、前記第２の指定ページを読み取ることを試みる前に読み取ることおよび、
前記の第１の指定ページを、前記の第２の指定ページを読み取る際にエラーが発生した場合にのみ読み取ること
を特徴とする請求項５に記載の方法。
【請求項７】
前記メモリに対する電源不足の後に電源を前記メモリに加える度に、前記メモリ管理データ構造を再構築することを特徴とする請求項５に記載の方法。
【請求項８】
前記メモリ管理データ構造は前記メモリのアクティブページを示し、アクティブページは書き込み命令に応じて書き込むべき次のページを示すことを特徴とする請求項５に記載の方法。
【請求項９】
前記アクティブページへの書き込みの際、次のアクティブページの位置を示すよう前記メモリ管理データ構造を更新するステップをさらに備え、前記の次のアクティブページは、
現在アクセスされているブロックおよび、
前記の現在アクセスされているブロックが満杯の場合、次の利用可能なブロック
のうちの１つにおける最小ページアドレスを有する消去ページを備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記メモリは複数のブロックを備え、各ブロックは複数のページを備えること、前記メモリ管理データ構造は、
前記メモリの論理ブロックアドレスとページアドレスとの間の関係および夫々のブロックの各ページ部分の有効性状態を示すデータ構造、
書き込みに利用可能な消去ブロックを示すデータ構造、
各ブロック内の有効なページの数を示すデータ構造、
書き込み命令に応じて書き込むべき次のページを示すデータ構造および、
前記メモリ内でブロックが消去された回数を示すブロックシーケンス番号を示すデータ構造
のうちの少なくとも１つを備えることを特徴とする請求項１に記載の方法。
【請求項１１】
メモリを管理する装置であって、
第２のメモリ部を管理するメモリ管理データ構造を備えるための第１のメモリ部、
各ブロックが複数のページを備える複数のブロックを備える前記第２のメモリ部および、
制御装置部であって、
前記第２のメモリ部に対するアクセスを制御して、
前記メモリ管理データ構造を構築する制御装置部
を備えることを特徴とする装置。
【請求項１２】
前記の第１のメモリ部は揮発性メモリを備えることおよび、
前記の第２のメモリ部は不揮発性メモリを備えること
を特徴とする請求項１１に記載の装置。
【請求項１３】
前記の第２のメモリ部はフラッシュメモリを備えることを特徴とする請求項１１に記載の装置。
【請求項１４】
前記の第２のメモリ部は、
各ブロック内の第１の指定ページであって、夫々のブロックの各々の第１の指定ページは、
夫々のブロックの状態が良好および不良のうちの１つであることおよび、
夫々のブロックは消去および未消去のうちの１つであること
を示す第１の指定ページおよび、
各ブロック内の第２の指定ページであって、夫々のブロックの各々の第２の指定ページは、
夫々のブロックの論理ブロックアドレスと各ページとの間の関係、
夫々のブロックの各ページ部分の有効性状態および、
前記メモリ内のブロックを消去した回数を示すブロックシーケンス番号
を示す第２の指定ページ
を備えることを特徴とする請求項１１に記載の装置。
【請求項１５】
前記制御装置部は、前記第１のメモリ部に対する電源不足の後に電源を前記第１のメモリ部に加える度に、前記第１および第２の指定ページに含まれる情報に従って前記第１のメモリ部内に前記メモリ管理データ構造を構築することを特徴とする請求項１４に記載の装置。
【請求項１６】
前記メモリ管理データ構造は、
前記第２のメモリ部の論理ブロックアドレスとページアドレスとの間の関係および夫々のブロックの各ページ部分の有効性状態を示すデータ構造、 
書き込みに利用可能な消去ブロックを示すデータ構造、
各ブロック内の有効なページの数を示すデータ構造、
書き込み命令に応じて書き込むべき次のページを示すデータ構造および、
前記メモリ内でブロックが消去された回数を示すブロックシーケンス番号を示すデータ構造
のうちの少なくとも１つを備えることを特徴とする請求項１１に記載の装置。
【請求項１７】
第２のメモリ内の指定位置に格納した情報に従って第１のメモリ内にメモリ管理データ構造を生成するステップであって、前記第１のメモリに対する電源不足の後に電源を前記第１のメモリに加える度に、前記メモリ管理データ構造を生成することを特徴とするステップ、
前記メモリ管理データ構造に従って前記第２のメモリにアクセスするステップであって、前記メモリ管理データ構造は前記第２のメモリに関連する情報を備えるステップ、
前記第２のメモリの指定位置を、第２のメモリの状態に関連する情報で動的に更新するステップおよび、
前記メモリ管理データ構造を、第２のメモリの状態に関連する情報で動的に更新するステップ
の動作を実施するコンピュータ実行可能命令を有するコンピュータ可読媒体。
【請求項１８】
前記第２のメモリは複数のブロックを備え、各ブロックは複数のページを備えること、前記のコンピュータ可読媒体は、
夫々のブロックにおける第１の指定ページを読み取るステップであって、夫々のブロックの第１の指定ページは、
夫々のブロックの状態が良好および不良のうちの１つであることおよび、
夫々のブロックは消去および未消去のうちの１つであること
を示すステップ、
各々の読み取った第１の指定ページに含まれる情報に従って前記メモリ管理データ構造を構築するステップ、
夫々のブロック内の第２の指定ページを読み取るステップであって、夫々のブロックの第２の指定ページは、
夫々のブロックの論理ブロックアドレスと各ページとの関係、
夫々のブロックの各ページ部分の有効性状態および、
前記メモリ内でブロックが消去された回数を示すブロックシーケンス番号
を示すステップおよび、
各々の読み取った第２の指定ページに含まれる情報に従って前記メモリ管理データ構造を構築するステップ
のためのコンピュータ実行可能命令をさらに有することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記メモリ管理データ構造は前記第２のメモリのアクティブページを示し、前記アクティブページは書き込み命令に応じて書き込むべき次のページを示すこと、前記コンピュータ可読媒体は
前記アクティブページへの書き込みの際、次のアクティブページの位置を示すよう前記メモリ管理データ構造を更新するステップであって、前記の次のアクティブページは、
現在アクセスされているブロックおよび、
前記の現在アクセスされているブロックが満杯の場合、次の利用可能なブロック
のうちの１つにおける最小ページアドレスを有する消去ページを備えるステップ
のためのコンピュータ実行可能命令をさらに有することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項２０】
前記第２のメモリは複数のブロックを備え、各ブロックは複数のページを備えること、前記メモリ管理データ構造は
前記第２のメモリの論理ブロックアドレスとページアドレスとの間の関係および夫々のブロックの各ページ部分の有効性状態を示すデータ構造、
書き込みに利用可能な消去ブロックを示すデータ構造、
各ブロック内の有効なページの数を示すデータ構造、
書き込み命令に応じて書き込むべき次のページを示すデータ構造および、
前記メモリ内でブロックが消去された回数を示すブロックシーケンス番号を示すデータ構造
のうち少なくとも１つを備えることを特徴とする請求項１７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の技術分野は一般に電子工学に関し、より詳細にはフラッシュメモリ装置のメモリ管理に関する。
【背景技術】
【０００２】
フラッシュメモリは一種のＥＥＰＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）である。一度に１バイト消去可能な一般的なＥＥＰＲＯＭとは異なり、一般にフラッシュメモリでは一度に１ブロックを消去する。ブロックサイズは様々なフラッシュメモリ装置で異なる。フラッシュメモリの管理はメモリ装置に固有であることがよくある。フラッシュメモリ装置は一般に小型で軽量であり、電源がない場合でも状態を維持し、電力消費量が低い。従って、フラッシュメモリは例えば、モバイル装置、バッテリ式装置、低消費電源が望ましい装置、デジタルカメラ、ＭＰ３プレイヤ、および／または小型装置等の装置に対して適切である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記装置におけるＵＳＢフラッシュメモリの使用は一般に、比較的大量のデータの連続的な書き込みを含み、比較的少量のデータをランダムに書き込む動作にはあまり効果的ではない。さらに、多くのフラッシュメモリ装置を、アプリケーションの実行中にＵＳＢインタフェースを通して他の装置に抜き差しすることができる。従って、ＵＳＢフラッシュメモリ装置は読み書き動作の途中に（例えば、抜くことにより）電源を失う恐れがある。この結果、回復不能なエラーが生じうる。
【課題を解決するための手段】
【０００４】
メモリを管理して、体裁よく電源遮断に対応し、相対的に良好なランダム書き込み性能を提供する。メモリ管理データ構造を生成して、フラッシュメモリ装置等のメモリ装置に電源を供給する度にそのメモリ管理データ構造を更新する。例示的実施形態では、メモリ管理データ構造を揮発性メモリ内に形成する。従って、メモリ管理データ構造は、電源を失うと失われ、電源が後に供給される度に再生成される。フラッシュメモリへの書き込み動作中に、フラッシュメモリ内の特定位置を更新してフラッシュメモリの現在の状態を反映する。電源の遮断時は、電源を再度加えるとメモリ管理データ構造が再生成される。フラッシュメモリをスキャンし、フラッシュメモリ内の特定位置から取得した情報を利用してメモリ管理データ構造を構築する。
【０００５】
前述および他の目的、態様および利点は、図面を参照した以下の詳細説明からより良く理解されるであろう。
【発明を実施するための最良の形態】
【０００６】
本明細書では、フラッシュメモリに適用するものとしてメモリ管理について記述する。しかし当然のことながら、本明細書で記述するメモリ管理の適用はそれに限定されない。本明細書で記述するメモリ管理を任意の適切な種類の記憶手段に適用する。その記憶手段とは例えば、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、非フラッシュメモリ、ダイナミックメモリ、揮発性メモリ、不揮発性メモリ、半導体メモリ、磁気メモリ、ハードディスクメモリ、フロッピー（登録商標）ディスクメモリ、光学メモリ、等である。
【０００７】
図１は例示的フラッシュメモリ装置１２のブロック図である。例示的フラッシュメモリ装置１２は揮発性メモリ部１４、制御装置部１６、および不揮発性メモリ部１８を備える。例示的実施形態では、不揮発性メモリ部１８はフラッシュメモリを備える。しかしながら、任意の適切なメモリを利用することができる。揮発性メモリ部１４が揮発性メモリを備える必要はなく、従って代替的実施形態では揮発性メモリ部１４は不揮発性メモリを備える。さらに、例示的実施形態では、揮発性メモリ部１４および／または不揮発性メモリ部１８はデータベースを備えることができる。フラッシュメモリ装置１２を単一のプロセッサ、または複数のプロセッサ内で実装することができる。複数のプロセッサを分散させるか、または中央に配置することができる。複数のプロセッサは、無線、有線またはそれらの組合せで通信することができる。例えば、フラッシュメモリ装置１２の制御装置部１６を複数の分散プロセッサで実装することができる。
【０００８】
以下でさらに詳細に記述するように、制御装置部１６はフラッシュメモリ部１８へのアクセスを管理する。本明細書で使用する“アクセス”という用語は、読み取り、書き込み、消去またはそれらの組合せを備える。制御装置部１６はさらに、揮発性メモリ部１４内部のメモリ管理データ構造を構築する。
【０００９】
フラッシュメモリ装置１２を、フラッシュメモリ装置１２へのアクセスを望む任意の適切な装置（アクセス装置は図１に示さず）にインタフェース２０経由で結合することができる。アクセス装置（例えば、デジタルカメラまたはＭＰ３プレイヤ）をインタフェース２０経由でメモリ制御装置部１６に結合する。インタフェース２０は例えば、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）等の任意の適切なインタフェースを備えることができる。例示的実施形態では、制御装置部１６はアクセス装置に対して透過的であり、アクセス装置は自身がフラッシュメモリ１８に直接接続していると“考える”。別の例示的実施形態では、制御装置１６はディスクメモリをエミュレートし、アクセス装置は自身がディスクに直接接続していると“考える”。インタフェース２０は無線リンク、有線リンク、またはそれらの組合せであることができる。
【００１０】
図２は、フラッシュメモリ装置の別の例示的実施形態を示すブロック図である。図２に示す構成では、フラッシュメモリ装置は複数の不揮発性メモリ部２２を備える。例示的実施形態では、フラッシュメモリ装置は不揮発性メモリ部２２の各部（２２ａ−２２ｋ）に別々にアクセスする手段を備える。別々の部分２２ａ−２２ｋは単一のチップ、別々のチップ、またはそれらの組合せ上の別々のフラッシュメモリ部を表すことができる。例示的実施形態では、不揮発性メモリ部２２の各部へのアクセスを、例えば別々の有効／無効スイッチ等の任意の適切な手段により実装することができる。不揮発性メモリ部２２の選択部分へ別々にアクセスすることにより、複数の機能を並行して実施することができる。例えば、不揮発性メモリ部２２の選択部分は、他の部分がより長時間を要する動作を実施している間に命令を受理することができる。
【００１１】
図１を再度参照する。便宜上、本明細書では不揮発性メモリ部１８もフラッシュメモリと称する。例示的実施形態では、フラッシュメモリ装置１２に電源を加えるとき、制御装置１６はフラッシュメモリ１８をスキャンする。制御装置１６はフラッシュメモリ１８のスキャンから取得した情報を利用して、揮発性メモリ部１４内にメモリ管理データ構造を構築する。制御装置部１６は、フラッシュメモリ１８のブロックおよびページの状態に関する情報を、フラッシュメモリ１８の選択ブロックの選択ページから取得する。
【００１２】
図３はフラッシュメモリ１８の図であり、ブロックおよびページに対する例示的データ構造を示す。フラッシュメモリ１８は固定数のブロックを備える。各ブロックは固定数のページを備える。図３に示すように、例示的実施形態ではフラッシュメモリ１８は“Ｎ”プラス１個のブロックを備え、各ブロックは“Ｌ”プラス１個のページを備える。各ページは固定数のバイトを備える。例示的実施形態では、フラッシュメモリ装置はフラッシュメモリ部１８当り４０９６個のブロック（４Ｋ個のブロック）を備え（即ち、Ｎ＝４０９５）、各ブロックは６４個のページを備える（即ち、Ｌ＝６３）。従って、各フラッシュメモリ部１８は２５６Ｋ個のページを備える（４Ｋ×６４）。さらに、各ページは２１１２バイトを備える（データに対して２ＫＢを指定し、メタデータに対して６４Ｂを指定）。しかしながら、様々な他の構成を想定している。
【００１３】
データをフラッシュメモリに書き込むに先立ち、メモリを消去しなければならない。より詳細には、ブロックを書き込み用に使用するに先立ち、ブロックを消去しなければならない。フラッシュメモリは一度に１ページ書き込むことができる。フラッシュメモリは一度に１ブロック消去される。従って、消去動作をブロックベースで実施し、プログラム（書き込み）動作をページベースで実施する。読み取り動作もページベースで実施する。ブロック内のページは低アドレスから高アドレスに連続的に書き込まれる。従って、図３を参照すると、ページ２に書き込む前にページ１に書き込む。ページに書き込むと、ブロック内のそれより前のページには、（そのブロックを）次に消去した後まで書き込むことはできない。以下でさらに詳細に記述するように、連続的書き込み条件を利用して消去の失敗を判定する。消去時に、フラッシュメモリセルにバイナリ値１を与える。プログラム（書き込み）時に、セルにバイナリ値０を与える。
【００１４】
図１および３を参照する。例示的実施形態では、読み取り動作はフラッシュメモリ１８からページ全体を読み取ることを含む。ページ内容を制御装置部１６のレジスタにコピーする。本例示的実施形態では、レジスタサイズは２１１２バイト（２ＫＢ＋６４バイト）である。レジスタの内容を、インタフェース２０（例えば、ＵＳＢ）経由でアクセス装置に転送することができる。レジスタの内容を全体として転送することができるか、またはその任意の部分を転送することができる。上述のように、書き込み動作を連続的なページ順序で実施する。ページには消去と消去の間に４回まで書き込むことができる。しかしながら、ページの同一部分には消去を行うまで書き込むことができない。即ち、セルには２度書き込むことはできない。例えば、（消去せずに）ゼロを１に変えることはできない。従って、メモリセルを０で書き込むと、消去を行うまでセルを１で書き込むことはできない。書き込み動作を制御装置部１６により実施する。フラッシュメモリ１８に書き込むべきデータを制御装置１６内のレジスタに置き、レジスタの内容をフラッシュメモリ１８に転送する。レジスタの内容を４回までの転送でフラッシュメモリ１８に転送することができる。従って、消去前にページに４回まで書き込むことができ、消去と消去の間で再書き込みされるページ部分はない。
【００１５】
様々な手段を使用して、フラッシュメモリ１８から読み取られているデータが正しい（例えば、破壊されていない）ことを保証することができる。例示的実施形態では、ＥＣＣと呼ばれるエラー訂正検出を読み取り動作中に利用する。任意の適切なＥＣＣのスキームを使用することができる。例示的実施形態では、ダブルビットエラー検出およびシングルビットエラー訂正のハミング符号を使用する。１ページのデータをフラッシュメモリ１８から読み取るとき、制御装置部１６によりＥＣＣをページ全体に実施する。エラーが検出されない場合、もしくは検出したエラーが訂正される場合、ページは良好であると判定される。エラーが検出されそのエラーを訂正できない場合、ページは不良であると判定される。
【００１６】
フラッシュメモリ１８から読み取ったデータが正しいことを保証する別の手段は、強いエラー検出（ｓｔｒｏｎｇ  ｅｒｒｏｒ  ｄｅｔｅｃｔｉｏｎ）と呼ばれ、ハッシュ関数を使用するスキームである。ハッシュ関数は、可変長の入力をハッシュ値と呼ばれる固定長の出力に変換する関数である。数学的制限の中で、ハッシュ関数に２つの異なる入力を与えても同一のハッシュ値とはならない。例示的実施形態では、例えば公知のＭＤ５またはＳＨＡ−１等の暗号ハッシュ関数を使用する。データをページに書き込むとき、少なくともデータの一部をハッシュ関数により操作する。本操作はデータのハッシュ化と呼ばれる。結果のハッシュ値をデータとともにページに格納する。ハッシュ値をページのメタデータ部に格納する。ハッシュ化を制御装置部１６により実施する。データをページから読み取るとき、制御装置１６はデータの書き込みに使用したものと同じハッシュ関数を用いてデータをハッシュする。結果のハッシュ値を、ページのメタデータ部に格納したハッシュ値と比較する。２つのハッシュ値が一致する場合、データは良好であると判定される。２つのハッシュ値が異なる場合、データは不良であると判定される。
【００１７】
図４はブロック内の例示的ページ指定の図である。各ブロック内のページをデータまたは要約ページのいずれかとして指定する。本明細書で記述する例示的実施形態では、図４に示すように、各ブロックの最終ページ（ページＬ）を要約ページとして指定する。全ての他のページ（ページ０からページＬ−１）をデータページとして指定する。各ブロックのデータページのうち、以下で記述するようにページ０を特別に扱う。全てのデータページは、読み取り、書き込み、および消去等の一般的な使用に対して利用可能である。各ページのページ０はブロック固有の情報を含み、各ブロックのページＬは、ブロックとそのブロック内のページとに関連する要約情報を含む。
【００１８】
図５は、ペイロード部２４とメタデータ部２６とを備えるページの例示的データ構造の図である。図５は、フラッシュメモリ内のページＬ以外の全ページに対する例示的データ構造を示す。ペイロード部２４は４つのサブページを備える。各サブページのサイズは５１２バイトである。即ち、各サブページは５１２バイトのデータを収容することができる。ペイロード部２４のサイズは２０４８バイト（２ＫＢ）である。メタデータ部２６のサイズは６４バイトである。メタデータ部２６は不良ブロックインジケータ（ＢＢＩ）部３２、ブロックシーケンス番号部３６、シール部３４、エラー訂正検出部３８、および論理ブロックアドレス（ＬＢＡ）部２８を備える。論理ブロックアドレス（ＬＢＡ）部２８はサイズが１８ビットであり、ページのＬＢＡを収容することができる。メタデータ部２６はさらに、サイズが４ビットの有効サブページ部３０を含む。有効サブページ部３０は４ビット、即ち有効性ビット１（ＶＢ１）、有効性ビット２（ＶＢ２）、有効性ビット３（ＶＢ３），有効性ビット４（ＶＢ４）を収容することができ、各ビットは夫々のサブページが有効か否かを示す。エラー検出訂正部を４つのセグメントに細分する。即ち潜在的なページ書き込み当り１セグメントである（実際には、大部分のページは１度だけしか書き込まれない）。読み取りの際は、最も直近に書き込んだ（例えば、最終の）セグメントのみが該当する。エラー検出符号はページデータおよびメタデータを対象とする。ＥＣＣはデータ、メタデータ、およびエラー検出符号を対象とする。図５に示した内容はブロックの全てのページに見られるわけではないことに留意すべきである。例えば、以下で記述するように、一部の内容はブロックのページ０にのみ見られる。
【００１９】
製造後の試験時にブロックが不良である場合、そのブロックのページ０またはページ１を印付けしてそのブロックが不良であることを示す。ＢＢＩ部３２は、ブロックの状態の表示を不良または良好として備える。ページのＢＢＩ部３２は、ブロックの最初の２ページに関係するに過ぎない。例示的実施形態では、ＢＢＩ部３２がこれら両方のページに対して全ビットバイナリ値１（ａｌｌ  ｂｉｎａｒｙ  １'ｓ）である場合、そのブロックは良好である。ブロックが不良である場合、ＢＢＩ部３２は、ページ０またはページ１のいずれかに対して全ビットバイナリ値１（ａｌｌ  ｂｉｎａｒｙ  １'ｓ）以外の値を備える。ブロックシーケンス番号部３６のサイズは３２ビットである。消去後最初にブロックに書き込む度に、（例えば、全てのブロックに渡る）グローバルシーケンス番号を増加させ、その値をブロックシーケンス番号部３６に置く。同一のブロックシーケンス番号を書き込むとき、およびその場合は、その同一のブロックシーケンス番号をブロック要約ページのメタデータに書き込む。最初または最終ブロック以外のブロックに対してはブロックシーケンス番号３６は無視される。
【００２０】
シール部３４はブロックの消去状態の表示を収容する。そのインジケータをシールと称する。シールはブロックのページ０にのみ関係する。シールは、ブロックが完全に消去されているかまたは完全には消去されていないかのいずれかを示すのに使用する特徴的なビットパターンである。消去ブロックが“シールされている”とき、その特徴的なパターンを、ＥＣＣまたはエラー検出符号３８なしにブロックのページ０のメタデータ部２６のシール部３４に書き込む。任意の適切な特徴的パターンを使用することができる。ブロックにシール後に最初に書き込むとき、シールを全ビットバイナリ値０（ａｌｌ  ｂｉｎａｒｙ  ０ｓ）に設定する。
【００２１】
図６は要約ページに対する例示的データ構造の図である。そのデータ構造は、データページに対して記述したもの（例えば、図５）と等価な全ての論理ブロックアドレス（ＬＢＡ）部および有効性ビット部４０およびメタデータ部２６を備える。ブロックの最終ページの直前のページ（ページＬ−１）に書き込むと、最終ページ（ページＬ）もブロックに関連する要約情報で書き込まれる。ブロック内の各ページに対するＬＢＡおよびブロック内の各ページに対する有効性ビットを、全てのＬＢＡおよび有効性ビット部４０に書き込む。全てのＬＢＡおよび有効性ビット部４０のサイズは１８９ビットであり、従ってブロック内の６３個のデータページ各々に対してページ当たり３バイトまで収容する。ブロックシーケンス番号を、メタデータ２６のブロックシーケンス番号部３６に書き込む。ブロックシーケンス番号を使用して、電源投入中にメモリ管理データ構造を構築する。
【００２２】
フラッシュメモリを、揮発性メモリ内に構築したメモリ管理データ構造に従って管理する。メモリ管理データ構造を、電源を加える度に再生成する。電源の障害中は、電源障害時に進行中の任意の書き込み動作を完了するために十分なエネルギー備蓄が（例えば、電気容量を通して）フラッシュメモリ装置内に存在することを想定している。電源を再度加えるまで、電源障害後に何らかの新規動作が開始されることは期待していない。メモリ管理データ構造を本明細書ではテーブルとして示す。しかしながら、本明細書で示した図および実例は例示的であって、特定の構成および／または実装を暗示するよう意図していないことを強調しておく。
【００２３】
図７は、テーブル、即ちテーブルＩとして示した例示的メモリ管理データ構造の図であり、それは論理ブロックアドレス（ＬＢＡ）をフラッシュページアドレスに関連づける。ＬＢＡはテーブルＩのアドレス指定に用いる索引であると想定しているが、明快さのためテーブルＩの一部として示してある。ＬＢＡは、アクセス装置（例えば、ＵＳＢ経由で接続したコンピュータ、デジタルカメラまたはＭＰ３プレイヤ）がメモリにアクセスするために使用するアドレスである。アクセス装置がＵＳＢ経由で４ＫＢのセグメントでメモリをアドレス指定することは珍しくはない。しかしながら、フラッシュメモリは２ＫＢのセグメントでアドレス指定可能である。テーブルＩで表すメモリ管理データ構造は４Ｋのアドレス指定可能なＬＢＡを２Ｋのアドレス指定可能なフラッシュメモリページアドレスにマップする。例示的実施形態では、テーブルＩは２５６Ｋ（２５６×１０２４）個の行を備える。テーブルＩをＬＢＡにより索引付けする。各行はＬＢＡと、対応するフラッシュメモリページアドレスとを備える。各行はさらに、各フラッシュメモリページの夫々５１２ＫＢのサブページに対する有効性ビット、ＶＢ１、ＶＢ２、ＶＢ３、およびＶＢ４を含む。
【００２４】
別の例示的メモリ管理データ構造をテーブルＩＩとして図８に示す。テーブルＩＩはどのブロックがフリーであるかを示す。フリーブロックは、消去され書き込みに利用可能なブロックである。例示的実施形態では、ブロック０はテーブルＩＩに含まれない。ブロック０は一般に、フラッシュメモリ装置の製造者により完全に良好であることが保証されている。ブロック０は１０００回まで正確に書き込みおよび消去できることも一般に保証されている。例示的実施形態では、ブロック０を一般的なデータ読み取りおよび書き込みに使用しない。例示的実施形態では、フリーブロックを、各ブロックに対するフリーブロック列内の単一ビットで示す。
【００２５】
図９は、テーブルＩＩＩとして示した例示的メモリ管理データ構造の図である。テーブルＩＩＩは各ブロック内の有効なページの数を示し、ブロックが廃棄されたかどうかを示す。ブロックが廃棄される場合、所定のビットパターンをテーブルＩＩＩのフリーインジケータ列に格納する。任意の適切なビットパターンを使用して、ブロックが廃棄されたことを示すことができる。ページは、そのページが利用可能な内容（データ）を含む場合に有効であると判定される。例えば、ページの内容（古いページ）を別のページ（新しいページ）に書き込む場合、その古いページを無効と判定する。その新しいページは有効であると判定する。ブロック内の有効なページの数を示す値は、各ブロックが６３個のデータページを含むので０から６３の間である。例示的実施形態では、新しいブロックが必要なとき、最小数の有効ページを有するブロックを消去の候補として判定する。最小数の有効ページを有するブロックを消去することで、消去時に最も多数のページを回復する。テーブルＩＩＩを使用して、ブロックが消去の候補であるかどうかを判定することもできる。例示的実施形態では、ブロックがなんらかの有効なページを含む場合、そのブロックは消去の候補ではない。幾つかの消去ブロックが留保されることを想定している。留保した消去ブロックを使用して、転送中に、ブロックを圧縮および消去する必要なく長時間の書き込みを処理することができる。また、留保した消去ブロックを使用して、フラッシュメモリ装置がほぼ満杯のときの高速なブロック再利用を回避することができる。留保した消去ブロックを使用して、フラッシュメモリ装置の寿命の間に不良となったブロックを処理することもできる。
【００２６】
図１０はテーブルＩＶとして示した例示的メモリ管理データ構造の図である。テーブルＩＶはアクティブブロックおよびアクティブページを示す。いかなる時点においても、アクティブブロック内部には、多くとも１つのアクティブブロックと多くとも１つのアクティブページが存在する。アクティブブロックは、現在アクセスされているブロックである。アクティブページはアクティブブロック内部で最初に消去されたページである。アクティブページは、書き込み命令に応じて次に書き込まれるページである。テーブルＩＶとして示したが、例示的実施形態では、アクティブブロックとアクティブページを、電源投入時のスキャン中に初期化する動的ランタイム変数として実装できることを想定している。
【００２７】
図１１はテーブルＶとして示した例示的メモリ管理データ構造の図である。テーブルＶは各ブロックに対するブロックシーケンス番号を示す。テーブルＶを、他のメモリ管理データ構造（例えば、テーブルＩ−ＩＶ）の構築中に使用する。フラッシュメモリ装置の作製時は、書き込んだブロックはない。後のブロック消去各々に対し、論理シーケンス番号を増加させ、新しく書き込んだブロックのページ０のメタデータに書き込まれる。シーケンス番号も同様にそのブロックの要約ページに、そのページが書き込まれる場合またはそのときに書き込まれる。同一のＬＢＡにマップされることを求める２つのページを電源投入時のスキャンにより検出するとき、そのシーケンス番号を使用する。この衝突を、主に最大のシーケンス番号を有するブロック内のページを選択することにより解決する。上記のようなページが複数存在する場合（同一ブロック内であることが必要）、最大のページ番号を有するものを選択する。テーブルＶは、スキャン中に発見した全ブロックのブロックシーケンス番号を備える。これにより、所与のＬＢＡに対する任意の以前に発見した候補に対してブロック番号を判定し、上述の比較を行うことができる。例示的実施形態では、テーブルＶを初期化後に廃棄する。
【００２８】
図１２は、電源投入時にブロックをスキャンする例示的プロセスのフロー図である。各ブロックを、メモリ管理データ構造を構築するプロセスの一部としてスキャンする。電源を加えるとき、フラッシュメモリ装置（例えば、フラッシュメモリ装置１２）のフラッシュメモリ（例えば、フラッシュメモリ１８））を（例えば制御装置部１６により）スキャンして、（例えば、揮発性メモリ部１４内の）メモリ管理データ構造を構築するのに必要な情報を取得する。例示的実施形態では、フラッシュメモリのブロックについての情報を取得し、廃棄されていないブロックのページについての情報を取得する。電源を加えると、またはその後の適切な時点で、例示的実施形態ではメモリ管理データ構造の構築プロセスがブロックの要約ページのスキャンにより開始し、次いで、必要に応じてブロック内の他のページをスキャンする。本順序は例であって、ブロックとページをスキャンする任意の適切な順序を使用できることを強調しておく。
【００２９】
電源を加えると、またはその後の適切な時点で、フラッシュメモリのブロックをスキャンしてメモリ管理データ構造を生成／ポピュレートする。各ブロックをスキャンして、ブロックの要約ページが良好であるかどうか（ステップ４６）、ブロックがシールされているかどうか（ステップ４８）、ブロックに不具合があるかどうか（ステップ５０）、およびブロックが消去されているかどうか（ステップ５２）を判定する。適切なデータ構造を、これら判定の各々の結果に従って生成／更新する。
【００３０】
プロセスはステップ４４でブロック１に進む。ブロック０はスキップする。ブロックの要約ページが良好かどうかをステップ４６で判定する。要約ページが良好であると判定すると（ステップ４６）、その要約ページをステップ５４でスキャンする。例示的実施形態では、要約ページを図１３に示す例示的フロー図に従ってスキャンする。要約ページのスキャンは、図１３のステップ７８で示すようにページ０に対するエントリで開始する。ステップ８０で、要約ページ内のエントリを使用してテーブルＩをポピュレートする。例示的実施形態では、テーブルＩを図１５に示す例示的プロセスに従ってポピュレートする。ステップ１１４で、要約ページ内のＬＢＡエントリに対するエントリがテーブルＩ内に存在するかどうかを判定する。ＬＢＡエントリが存在しないと判定すると（ステップ１１４）、ステップ１２０でテーブルＩを要約ページ内のＬＢＡエントリで更新する。この更新には、ブロック番号、ページ索引、および有効性ビット情報等の、ＬＢＡに関連する全ての情報のマッピングが含まれる。要約ページ内のＬＢＡエントリに対するＬＢＡエントリがテーブルＩ内に存在すると判定すると（ステップ１１４）、ステップ１１６で、関連するフラッシュメモリブロックのブロックシーケンス番号がテーブルＶで示したブロックシーケンス番号以下であるかどうかを判定する。そうならば、ステップ１２０でテーブルＩをポピュレートする。そうでなければ、ステップ１１８に示すように、プロセスは図１３のステップ８０に進む。
【００３１】
ステップ８４で、ブロック内にページがまだ存在するかどうかを判定する。ページがまだ存在する場合、プロセスはステップ８２で次のページに進む。プロセスはステップ８０に進み、上述のように図１５に示した例示的フロー図に従ってテーブルＩをポピュレートする。ページがもう存在しないと判定する場合（ステップ８４）、ステップ８６に示すようにプロセスは図１２のステップ５４に進む。ステップ６８で、スキャンすべきブロックがまだあるかどうかを判定する。スキャンすべきブロックがまだあると判定する場合（ステップ６８）、プロセスはステップ６６で次のブロックに進む。ステップ４６で、ブロックに対する要約ページが良好であるかどうかを判定する。要約ページが良好である場合、プロセスは残存するブロックがなくなるまで、上述のようにステップ５４、６８、および６６を通って進む。
【００３２】
ブロックに対する要約ページが良好でないと判定する場合（ステップ４６）、ステップ４８で、ブロックがシールされているかどうかを判定する。ページ０のメタデータ部のシール部をチェックして、ブロックがシールされているかどうかを判定する（図５を参照）。シールの特徴的なパターンが検出される場合、ブロックはシールされている。ブロックがシールされている場合、ステップ５６でブロックをフリーリストにのせる。例えばテーブルＩＩおよびテーブルＩＩＩ（図８および図９を参照）等の、各ブロックのフリー状態を示すメモリ管理データ構造を更新することによりブロックをフリーリストにのせる。ブロックがシールされていない場合（ステップ４８）、ステップ５０でブロックに不具合があるかどうかを判定する。ページ０および１の不良ブロックインジケータ（ＢＢＩ）部（図５を参照）をチェックして、ブロックに不具合があるかどうかを判定する。例示的実施形態では、ページ０および１のＢＢＩ部が全ビットバイナリ値１（ａｌｌ  ｂｉｎａｒｙ  １'ｓ）を含む場合はブロックに不具合はなく、その他の場合は全て、ブロックに不具合がある。ブロックに不具合がある場合（ステップ５０）、ブロックを廃棄し、例えばテーブルＩＩ（図８を参照）等の利用可能なブロックを示すメモリ管理データ構造をそれに応じて更新する。
【００３３】
ブロックに不具合がないと判定する場合（ステップ５０）、ステップ５２でそのブロックを消去されているかどうか判定する。ブロックは、そのブロック内の全てのビットが１である場合、消去されていると見なす。ブロックが消去されていると判定する場合（ステップ５２）、ステップ６０でそのブロックをシールし、ステップ６４でそのブロックをフリーリストにのせる。ステップ６４で、例えばテーブルＩＩおよびテーブルＩＩＩ（図８および図９を参照）等の各ブロックのフリー状態を示すメモリ管理データ構造を更新することで、ブロックをフリーリストにのせる。ブロックが消去されていないと判定する場合（ステップ５２）、ステップ６２でブロックのページをスキャンする。例示的実施形態では、ブロックを図１４に示す例示的フロー図に従ってスキャンする。
【００３４】
ステップ８８で、ブロックのスキャンをページ０で開始する。ステップ９０で、ページが良好であるかどうかを判定する。ＥＣＣおよび強いエラー検出（ｓｔｒｏｎｇ  ｅｒｒｏｒ  ｄｅｔｅｃｔｉｏｎ）アルゴリズムの結果エラーがなければ、そのページは良好であると判定する。ページが良好でないと判定する場合（ステップ９０）、ステップ９６でページが消去されている（即ち、全ビットバイナリ値１（ａｌｌ  １'ｓ）を含む）かどうかを判定する。ページが消去されていない場合（ステップ９６）、ステップ１１０でブロックを廃棄し、ステップ１１２に示すようにプロセスは図１２のステップ６２に進む。ページが消去されている場合（ステップ９６）、ステップ１０２でアクティブブロックおよびアクティブページインジケータを更新する。例示的実施形態では、アクティブブロックおよびアクティブページインジケータを図１６に示す例示的プロセスに従って更新する。ページは、それが最大ブロックシーケンス番号を有するブロック内の最初に消去されたページであり且つそのブロックが廃棄されていない場合、アクティブページとして指定される。アクティブブロックが既に指定されている場合、アクティブページを以下に記述するようにアクティブブロックから選択する。しかしながら、アクティブブロックが存在しないことも有り得る。これは、例えばブロックが満杯になった後だが、次の書き込み要求が到着する前または要約ページに書き込み可能となる前の、電源障害の結果で有り得る。いずれの場合も、最後に割り当てたブロックは完全に満杯であり、アクティブページはない。
【００３５】
ステップ１２０で、アクティブページがあるかどうかを判定する。アクティブページがない場合（ステップ１２０）、ステップ１２６で現ブロックおよびページを将来のアクティブブロックおよびアクティブページとして格納する。アクティブページが存在する場合（ステップ１２０）、ステップ１２２で、アクティブページのブロックシーケンス番号が（例えばテーブルＶにより判定された）現ブロックのシーケンス番号未満であるかどうかを判定する。そうならば、ステップ１２６で現ブロックおよびページを将来のアクティブブロックおよびアクティブページとして格納する。そうでなければ、ステップ１２４で示すように、プロセスは図１４のステップ１０２に進む。ステップ１０６で、ブロックの最終ページをスキャンしたかどうかを判定する。スキャンすべきページがまだある場合、ステップ１０４で次のページにアクセスする。プロセスはステップ９０に進み、ページが良好でない場合、上述のようにステップ９６およびステップ１０２を通って進む。
【００３６】
ステップ９０で、ページが良好であると判定する場合、ステップ９２で現ページがページ０であるかどうかを判定する。現ページがページ０である場合、ステップ９８でブロックシーケンス番号を適切なメモリ管理データ構造に記録する。例示的実施形態では、ブロックシーケンス番号をテーブルＶに記録する。ステップ１００で、適切なメモリ管理データ構造を良好なＬＢＡで更新する。例示的実施形態では、上述のようにテーブルＩを図１６に示す例示的プロセスに従って更新する。ステップ１０６で、ブロックの最終ページをスキャンしたかどうかを判定する。スキャンすべきページがまだある場合、ステップ１０４で次のページを取り出し、上述のようにプロセスはステップ９０に進む。
【００３７】
現ページがページ０でないと判定する場合（ステップ９２）、ステップ９４で、前のページが消去されているかどうかを判定する。前のページが消去されていると判定する場合（ステップ９４）、ステップ１１０でブロックを廃棄し、ステップ１１２で示すようにプロセスは図１２のステップ６２に進む。前のページが消去されていないと判定する場合（ステップ９４）、ステップ１００で適切なメモリ管理データ構造を良好なＬＢＡで更新する。例示的実施形態では、上述のようにテーブルＩを図１５に示す例示的プロセスに従って更新する。ステップ１０６で、ブロックの最終ページをスキャンしたかどうかを判定する。スキャンすべきページがまだある場合、ステップ１０４で次のページにアクセスし、上述のようにプロセスはステップ９０に進む。
【００３８】
図１２を再度参照する。ステップ５４、ステップ５８、ステップ６４またはステップ６２の結果として、ステップ６８でスキャンすべきブロックがまだあるかどうかを判定する。スキャンすべきブロックがまだある場合、上述のようにプロセスはステップ６６に進んで継続する。スキャンすべきブロックがもうないと判定する場合（ステップ６８）、廃棄したブロックを除いて現ブロックシーケンス番号を最大ブロックシーケンス番号に設定する。適切なメモリ管理データ構造（例えば、テーブルＩＩＩおよびテーブルＶ）を更新して、現ブロックのシーケンス番号の設定を反映する。ステップ７２で、現アクティブブロックのシーケンス番号が最大ブロックシーケンス番号未満であるかどうかを判定する。そうでなければ、ステップ７６で電源投入プロセスが完了する。そうならば、ステップ７４でアクティブブロックをゼロにする。即ち、アクティブブロックがないことを示すようにアクティブブロックインジケータを設定する。
【００３９】
例示的実施形態では、消去をフラッシュメモリのブロックに渡って均一に配分するよう試みる。本プロセスはウェアレべリングと呼ばれる。例示的ウェアレべリングプロセスに従って、ブロックが消去された回数を示す数字（消去回数）を各ブロックの要約ページのメタデータ部に書き込む。例示的実施形態では、ブロックがシールされているときに消去回数を要約ページに書き込む。各ブロックに対する消去回数はメモリ管理データ構造内で維持され、電源投入中にメモリ管理データ構造を構築する間に各ブロックの要約ページから回復可能である。
【００４０】
上述のように、メモリ管理の例示的実施形態を様々なコンピューティング装置と関連して記述したが、根底にある概念を、メモリを管理可能な任意のコンピューティング装置またはシステムに適用することができる。
【００４１】
本明細書で記述した様々な技術を、ハードウェアまたはソフトウェア、もしくは必要に応じて両方の組合せと関連して実装することができる。従って、メモリを管理する方法および装置、もしくはその或る態様または部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、または任意の他の機械可読記憶媒体等の有形媒体に具現化したプログラムコード（即ち、命令）の形態を取ることができ、そのプログラムコードをコンピュータ等の機械にロードして実行すると、機械はメモリ管理を実践する装置になる。プログラム可能なコンピュータ上でプログラムコードを実行する場合、コンピューティング装置は一般にプロセッサ、プロセッサが読み取り可能な記憶媒体（揮発性および不揮発性メモリおよび／または記憶要素）、少なくとも１つの入力装置、および少なくとも１つの出力装置を含む。必要に応じて、プログラム（複数）をアセンブリまたは機械語で実装することができる。いずれの場合でも、言語はコンパイラ型言語またはインタプリタ型言語であることができ、ハードウェア実装と組み合わせることができる。
【００４２】
メモリ管理の方法および装置を、電気配線またはケーブル上、光ファイバ経由、または任意の他の形態の伝送媒体経由といった、幾つかの伝送媒体上で送信されるプログラムコードの形態で具現化した通信経由で実践することもでき、プログラムコードを、ＥＰＲＯＭ、ゲートアレイ、ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）、クライアントコンピュータ、等の機械により受信およびロードおよび実行すると、その機械は本発明を実践する装置となる。汎用目的プロセッサ上で実装するときは、プログラムコードをプロセッサと結合して、本発明の機能性を起動するように動作する一意な装置を提供する。さらに、本発明と関連して使用する任意の記憶技術は常にハードウェアおよびソフトウェアの組合せであることができる。
【００４３】
メモリ管理を様々な図の例示的実施形態と関連して記述したが、当然のことながら、その実施形態から逸脱することなく、他の同様な実施形態を使用できるか、または修正および追加を記述した実施形態に行ってメモリ管理の同一機能を実施することができる。従って、本明細書で記述したメモリ管理はどの単一の実施形態にも限定されるべきではなく、添付請求項に従って広範囲に解釈されるべきである。
【図面の簡単な説明】
【００４４】
【図１】例示的フラッシュメモリ装置のブロック図である。
【図２】フラッシュメモリ装置の別の例示的実施形態のブロック図である。
【図３】ブロックおよびページを備える例示的フラッシュメモリデータ構造の図である。
【図４】ブロック内の例示的ページ指定の図である。
【図５】ページの例示的データ構造およびメタデータ構造の図である。
【図６】要約ページに対する例示的データ構造の図である。
【図７】論理ブロックアドレス（ＬＢＡ）をフラッシュページアドレスに関連付ける例示的メモリ管理データ構造の図である。
【図８】フリーブロックを示す例示的メモリ管理データ構造の図である。
【図９】ブロック内の有効なページの数を示す例示的メモリ管理データ構造の図である。
【図１０】アクティブブロックおよびアクティブページを示す例示的メモリ管理データ構造の図である。
【図１１】ブロック内のページに関連付けたページシーケンス番号を示す例示的メモリ管理データ構造の図である。
【図１２】ブロックをスキャンする例示的プロセスのフロー図である。
【図１３】要約ページをスキャンする例示的プロセスのフロー図である。
【図１４】フルブロックスキャンを実施する例示的プロセスのフロー図である。
【図１５】ＬＢＡマッピングを実施する例示的プロセスのフロー図である。
【図１６】アクティブブロックおよびアクティブページを割り当てる例示的プロセスのフロー図である。
【図１】
2009512022.tif 000003
【図２】
2009512022.tif 000004
【図３】
2009512022.tif 000005
【図４】
2009512022.tif 000006
【図５】
2009512022.tif 000007
【図６】
2009512022.tif 000008
【図７】
2009512022.tif 000009
【図８】
2009512022.tif 000010
【図９】
2009512022.tif 000011
【図１０】
2009512022.tif 000012
【図１１】
2009512022.tif 000013
【図１２】
2009512022.tif 000014
【図１３】
2009512022.tif 000015
【図１４】
2009512022.tif 000016
【図１５】
2009512022.tif 000017
【図１６】
2009512022.tif 000018
【国際調査報告】
2009512022.tif 000019
2009512022.tif 000020