(57)【特許請求の範囲】
【請求項１】
フラッシュメモリと、
ホストからアクセスコマンドを受信し、論理アドレスと前記フラッシュメモリの物理アドレスとの対応関係を表す論物変換情報を基に、前記受信したアクセスコマンドで指定されている論理アドレスに対応した物理アドレスに従う領域にアクセスするコントローラと
を有し、
前記論物変換情報は、第１の変換情報と第２の変換情報で構成され、
前記コントローラは、起動の際に前記第１の変換情報を復元し、前記第１の変換情報を復元した後にアクセスコマンド受信可能となり、アクセスコマンド受信可能となった後に、前記第２の変換情報を復元し、
前記フラッシュメモリは、領域単位でアクセスが行われ複数の領域を含んだ領域群単位で消去が行われるフラッシュメモリであり、
前記第２の変換情報は、論理的な領域と物理的な領域との対応関係を表す情報であり、
前記第１の変換情報は、論理的な領域群と物理的な領域群との対応関係を表す情報である、
フラッシュメモリモジュール。
【請求項２】
請求項１記載のフラッシュメモリモジュールであって、
前記フラッシュメモリは、ページ単位でアクセスが行われブロック単位で消去が行われるフラッシュメモリであり、
前記フラッシュメモリは、複数の物理ブロックを有し、
各物理ブロックは、複数の物理ページを有し、
前記第１の変換情報は、論理ブロックと物理ブロックとの対応関係を表すブロックマッピング情報であり、
前記第２の変換情報は、論理ページと物理ページとの対応関係を表すページマッピング情報であり、
前記ページマッピング情報は、一以上の論理ブロック毎に復元される情報であり、
前記コントローラは、消去状態の物理ブロックである空き物理ブロックに初めてユーザデータを書き込む場合、そのユーザデータの他に、その空き物理ブロックが割り当てられる論理ブロックのＩＤを含んだデータであるブロックメタデータをその空き物理ブロックに書き込み、
前記コントローラは、物理ブロック内の或るユーザデータを更新する場合、更新後のユーザデータの他に、前記更新後のユーザデータのライト先の論理ページのＩＤを含んだデータであるページメタデータを、前記或るユーザデータが格納されている物理ページとは別の物理ページに書き込み、
前記コントローラは、前記起動の際に、前記フラッシュメモリが有する各物理ブロックから前記ブロックメタデータを読み込んで前記ブロックマッピング情報を復元し、
前記コントローラは、
（Ｗ）アクセスコマンド受信可能となった後、前記ホストからライトコマンドを受信した場合、
（ｗ１）前記受信したライトコマンドで指定されている論理アドレスを基にライト先論理ブロック及びライト先論理ページを特定し、
（ｗ２）前記ブロックマッピング情報を基に、前記ライト先論理ブロックに対応する物理ブロックを特定し、
（ｗ３）前記ライト先論理ブロックに対応した有効なページマッピング情報があるか否かを判断し、
（ｗ４）前記（ｗ３）の判断の結果が否定的の場合、前記ライト先論理ブロックに対応する物理ブロック内の物理ページから前記ページメタデータを読み込んで、前記ライト先論理ブロックに対応した前記ページマッピング情報を作成し、
（ｗ５）前記受信したライトコマンドの対象のユーザデータと、前記ライト先論理ページのＩＤを含んだページメタデータとを、前記ライト先論理ブロックに対応する物理ブロック内の物理ページ又は前記ライト先論理ブロックに対応付けられる別の物理ブロック内の物理ページに格納し、前記ライト先論理ブロックに対応したページマッピング情報を更新し、
（Ｒ）アクセスコマンド受信可能となった後、前記ホストからリードコマンドを受信した場合、
（ｒ１）前記受信したリードコマンドで指定されている論理アドレスを基にリード元論理ブロック及びリード元論理ページを特定し、
（ｒ２）前記リード元論理ブロックに対応する物理ブロックを前記ブロックマッピング情報を基に特定し、
（ｒ３）前記リード元論理ブロックに対応した有効なページマッピング情報があるか否かを判断し、
（ｒ４）前記（ｒ３）の判断の結果が否定的の場合、前記リード元論理ブロックに対応する物理ブロック内の物理ページから前記ページメタデータを読み込んで、前記リード元論理ブロックに対応した前記ページマッピング情報を作成し、
（ｒ５）前記ライト先論理ブロックに対応した前記ページマッピング情報を基に、前記ライト先論理ページに対応する物理ページを特定し、特定した物理ページからユーザデータを読み出す、
フラッシュメモリモジュール。
【請求項３】
請求項２記載のフラッシュメモリモジュールであって、
前記コントローラは、前記ブロックメタデータを格納する際、前記ブロックメタデータの、物理ページに格納される部分と共にＥＣＣ（Error Correcting Code）も格納し、
前記コントローラは、前記ページメタデータを格納する際、前記ページメタデータの他にＥＣＣも格納し、
前記コントローラは、前記ブロックメタデータの読み込みの際、前記ブロックメタデータの各部分と共に読込まれたＥＣＣを用いて各部分のエラーの有無を判断し、
前記コントローラは、前記ページメタデータの読み込みの際、そのページメタデータと共に読み込まれたＥＣＣを用いてそのページメタデータのエラーの有無を判断する、
フラッシュメモリモジュール。
【請求項４】
請求項２記載のフラッシュメモリモジュールであって、
一以上の物理ブロックでマスタ領域と追記領域が構成されており、
前記マスタ領域に前記ブロックメタデータが格納され、前記追記領域に前記ページメタデータが格納される、
フラッシュメモリモジュール。
【請求項５】
請求項４記載のフラッシュメモリモジュールであって、
前記コントローラは、各論理ページについて、更新後のユーザデータではないユーザデータを、前記マスタ領域に属する物理ページに書き込み、更新後のユーザデータと、その更新後のユーザデータのライト先論理ページのＩＤを含んだ前記ページメタデータとを、前記追記領域に属する物理ページに書き込む、
フラッシュメモリモジュール。
【請求項６】
請求項１記載のフラッシュメモリモジュールであって、
前記第２の変換情報は、一以上の領域群毎に復元される情報である、
フラッシュメモリモジュール。
【請求項７】
請求項６記載のフラッシュメモリモジュールであって、
前記領域群はブロックであり、
前記コントローラは、前記ホストからアクセスコマンドを受信し、そのアクセスコマンドで指定されている論理アドレスを基に特定されたブロックについて有効な前記第２の変換情報が無い場合に、そのブロックを含む一以上のブロックについて前記第２の変換情報を復元する、
フラッシュメモリモジュール。
【請求項８】
請求項７記載のフラッシュメモリモジュールであって、
一以上の物理ブロックで、マスタ領域と追記領域が構成されており、
前記コントローラは、
（Ｘ）前記追記領域にユーザデータを書き込む際に、前記第２の変換情報を復元するのに必要な情報も前記追記領域に書き込み、
（Ｙ）前記マスタ領域にユーザデータを書き込む際に、前記第１の変換情報を復元するのに必要な情報も前記マスタ領域に書き込む、
フラッシュメモリモジュール。
【請求項９】
請求項６記載のフラッシュメモリモジュールであって、
前記コントローラは、各一以上の物理的な領域群に、その一以上の物理的な領域群が割り当てられる一以上の論理的な領域群を表す情報を含んだ第１の管理情報を格納し、
前記コントローラは、物理的な領域群における物理的な領域に、その物理的な領域に割り当てられる論理的な領域を表す情報を含んだ第２の管理情報を格納し、
前記コントローラは、各一以上の物理的な領域群から第１の管理情報を読み込んで、前記第１の変換情報を復元し、
前記コントローラは、一以上の論理的な領域群について、第２の管理情報が格納されている各物理的な領域から第２の管理情報を読み込んで、その一以上の論理的な領域群に対応する前記第２の変換情報を復元する、
フラッシュメモリモジュール。
【請求項１０】
請求項９記載のフラッシュメモリモジュールであって、
前記コントローラは、前記第１の管理情報を格納する際、前記第１の管理情報の、物理的な領域に格納される部分と共にＥＣＣ（Error Correcting Code）も格納し、
前記コントローラは、前記第２の管理情報を格納する際、前記第２の管理情報の他にＥＣＣも格納し、
前記コントローラは、前記第１の管理情報の読み込みの際、前記第１の管理情報の各部分と共に読込まれたＥＣＣを用いて各部分のエラーの有無を判断し、
前記コントローラは、前記第２の管理情報の読み込みの際、その第２の管理情報と共に読み込まれたＥＣＣを用いてその第２の管理情報のエラーの有無を判断する、
フラッシュメモリモジュール。
【請求項１１】
請求項１記載のフラッシュメモリモジュールであって、
前記コントローラは、前記ホストからアクセスコマンドを受信した場合に前記第２の変換情報を復元する、
フラッシュメモリモジュール。
【請求項１２】
請求項１記載のフラッシュメモリモジュールであって、
前記フラッシュメモリは、一以上の物理ブロックから構成され、
前記コントローラは、メモリに接続され、
前記コントローラは、起動の際に、前記物理ブロックから論理アドレスを読み出し、前記論理アドレスと前記論理アドレスに対応する物理アドレスと、を前記第１の変換情報として前記メモリに格納する、
フラッシュメモリモジュール。
【請求項１３】
請求項１２記載のフラッシュメモリモジュールであって、
前記コントローラは、起動の際に、前記物理ブロックから前記論理アドレスを読み出し、前記論理アドレス及び前記メモリの開始アドレス値から前記論理アドレスの格納場所に対応する第一のアドレス値を算出し、
前記コントローラは、前記メモリに格納した論理ブロックアドレスと前記開始アドレス値から第二のアドレス値を算出し、
前記コントローラは、前記第一のアドレス値と、前記第二のアドレス値と、が一致することを確認する、
フラッシュメモリモジュール。
【請求項１４】
ホストからアクセスコマンドを受信し、論理アドレスとフラッシュメモリの物理アドレスとの対応関係を表す論物変換情報を基に、前記受信したアクセスコマンドで指定されている論理アドレスに対応した物理アドレスに従う領域にアクセスするフラッシュメモリモジュールの制御方法であり、
起動の際に、前記論物変換情報のうちの第１の変換情報を復元し、
前記第１の変換情報を復元した後に前記ホストに対してアクセスコマンド受信可能を通知し、
アクセスコマンド受信可能を通知した後に、前記論物変換情報のうちの第２の変換情報を復元し、
前記フラッシュメモリは、領域単位でアクセスが行われ複数の領域を含んだ領域群単位で消去が行われるフラッシュメモリであり、
前記第２の変換情報は、論理的な領域と物理的な領域との対応関係を表す情報であり、
前記第１の変換情報は、論理的な領域群と物理的な領域群との対応関係を表す情報である、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリを有するモジュールに関する。
【背景技術】
【０００２】
フラッシュメモリの大容量及び低価格化が進んでいることから、フラッシュメモリの適用が広がりつつある。特に、性能及び電力等の点で優れていることから、これらの要件を重視するモジュール（例えばストレージシステム或いは小型モバイル機器）について、急速な広がりを見せている。
【０００３】
フラッシュメモリは、複数のフラッシュメモリチップ（以下、チップ）を有し、各チップが、複数の物理ブロックを有する。物理ブロックが、複数の物理ページで構成されている。物理ブロックも物理ページも物理的な記憶領域である。例えば、データの読み書きはページ単位で行われ、データの消去のブロック単位で行われる。
【０００４】
フラッシュメモリ、特に、大容量のＮＡＮＤ型フラッシュメモリは、以下の２つの特徴がある。
【０００５】
一つは、既に書き込まれている物理ページに新たにデータを上書きすることができず、その物理ページに新たにデータを書き込むためには、その物理ページを含んだ物理ブロックに対して消去処理を行っておく必要があることである。消去処理が施された物理ブロックには、その先頭から順に一定サイズでデータが書き込まれる。以上のように、フラッシュメモリには、読み書きの大きさ及び順序についての制約がある。
【０００６】
もう一つは、ウェアアウト現象である。ウェアアウト現象とは、消去処理が或る程度の回数以上に繰り返されたことが原因で情報を保持できなくなる現象である。高頻度で書き込みされた場合、消去回数が上限に達しやすい。特に、特定の領域への書き込みが集中した場合、その領域を含んだ物理ブロックが早く寿命に達する。
【０００７】
これらの課題に対し、例えば特許文献１に、フラッシュメモリを制御するコントローラが読み書きの大きさ及び順序制約を隠蔽する技術が開示されている。特許文献１によれば、フラッシュメモリ内にデータを追記するための領域が設けられている。また、例えば特許文献２に、書き込み先を分散させることでフラッシュメモリの寿命を延ばす技術が開示されている。
【０００８】
これらの技術では、ホストがアクセス先を指定するために用いる論理アドレスを格納先フラッシュメモリアドレス（物理アドレス）に対応づけるための情報（論物変換情報）を持つ必要がある。ホストから読み書きされるデータと同様、この論物変換情報も不揮発にしておかないと、データを正しく記憶することができない。例えば特許文献３には、この論物変換情報をユーザデータと共に格納すると共に、格納されたデータから元の論物変換情報を復元する技術が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−０６４２５１号公報
【特許文献２】特開２００７−２６５２６５号公報
【特許文献３】特開平０８−０７７０７４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
一般に、フラッシュメモリモジュールは、電源が投入された場合に起動し、起動の際に、論物変換情報を復元する。論物変換情報の復元には、管理情報ユニットが必要である。管理情報ユニットは、例えば、物理ページの冗長領域に書き込まれる情報ユニットであり、その物理ページがどの物理ブロックに含まれておりどの論理ブロック内のどの論理ページに対応するかを表す。
【００１１】
前述の技術によれば、論物変換情報を復元することができるものの、復元のために、全ての管理情報ユニットを読む必要がある。このため、論物変換情報の復元に長い時間を要する。例えば、フラッシュメモリの容量を２５６ＧＢ（ギガバイト）とし、物理ページのサイズを４ｋＢ（キロバイト）とした場合、６４Ｍ（メガ）個（２５６ＧＢ÷４ｋＢ）の物理ページからそれぞれ管理情報ユニットを読み出す必要がある。読み出しに要する時間は、一般に一物理ページあたり１００μs（マイクロ秒）程度であるから、６,４００秒程度の時間を論物変換情報の復元に要することになる。これは、ハードディスクの起動に要する時間（例えば１０秒程度）に比べると非常に大きい。フラッシュメモリがより大容量になれば、その分、起動に要する時間が延びると考えられる。
【００１２】
本発明の目的は、フラッシュメモリモジュールの起動に要する時間を抑えることにある。
【課題を解決するための手段】
【００１３】
論物変換情報を、第１の変換情報と第２の変換情報とで構成する。フラッシュメモリモジュールのコントローラは、起動の際に第１の変換情報を復元し、第１の変換情報を復元した後にホストからアクセスコマンドの受信が可能となり、アクセスコマンド受信可能となった後に、第２の変換情報を復元する。
【発明の効果】
【００１４】
本発明により、フラッシュメモリモジュールの起動に要する時間を抑えることができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明の一実施形態に係るフラッシュメモリモジュールの構成を示す。
【図２】図２は、チップ５内部の構成を示す。
【図３Ａ】図３Ａは、初期状態における物理ブロック＃ｐの状態を示す。
【図３Ｂ】図３Ｂは、物理ブロック＃ｐに対して新たにデータが書き込まれた後の状態の一例を示す。
【図３Ｃ】図３Ｃは、マージ動作が行われた後の物理ブロック＃ｐの状態を示す。
【図４】図４は、モジュール制御データ６の構成を示す。
【図５】図５は、モジュール制御機能７の構成を示す。
【図６】図６は、揮発メモリ３内のテーブル６１及び６２とチップアレイ４内の物理ブロックの状態との対応関係の一例を示す。
【図７】図７は、ブロックマッピングテーブル６１の構成の一例を示す。
【図８】図８は、ページマッピングテーブル６２の構成の一例を示す。
【図９】図９は、物理ブロック５１へのデータ格納方式の一例を示す。
【図１０】図１０は、物理ページ５２の構成の詳細の一例を示す。
【図１１】図１１は、ブロックメタデータ５１５の構成の一例を示す。
【図１２】図１２は、ページメタデータ５２６の構成の一例を示す。
【図１３】図１３は、ホストリードサービス機能７１によって行われる処理の流れの一例を示す。
【図１４】図１４は、ホストライトサービス機能７２によって行われる処理の流れの一例を示す。
【図１５】図１５は、ページマッピングテーブル再構成機能７４によって行われる処理の流れの一例を示す。
【図１６】図１６は、電源オン機能７５によって行われる処理の流れの一例を示す。
【図１７】図１７は、初期化機能７６によって行われる処理の流れの一例を示す。
【図１８】図１８は、ホストライトサービス機能７２のＳ７２６における、コントローラ２とチップアレイ４との間のやりとりの一例を示す。
【図１９】図１９は、ホストライトサービス機能のＳ７２８〜Ｓ７３０における、コントローラ２とチップアレイ４との間でのやりとりの一例を示す。
【図２０】電源オン機能７５についてのＳ７５２、及び、ページマップ再構成機能７４についてのＳ７４３における、コントローラ２とチップアレイ４との間でのやりとりの一例を示す。
【図２１】本発明の一実施形態での論理アドレスと論理ブロック／論理ページとの対応関係の一例を示す。
【発明を実施するための形態】
【００１６】
以下、添付図面を参照して、本発明の一実施形態に係るフラッシュメモリモジュールが適用されたフラッシュメモリモジュールを説明する。ただし、本実施形態は、本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【００１７】
図１は、本発明の一実施形態に係るフラッシュメモリモジュールの構成を示す。
【００１８】
フラッシュメモリモジュール１は、フラッシュメモリコントローラ（以下、コントローラ）２、揮発メモリ３、チップアレイ（一以上のフラッシュメモリ）４、フラッシュメモリバス８、及びホストインターフェース９を有する。フラッシュメモリモジュール１は、例えば３．５インチや２．５インチのハードディスクドライブと同じ形状でも良いし、より大型であったり小型であったりしてもよい。
【００１９】
チップアレイ４は、複数のフラッシュメモリチップ（以下、チップ）５で構成されている。
【００２０】
コントローラ２は、チップアレイ４を制御すると共に、ホスト１１との通信を制御する。例えば、コントローラ２は、フラッシュメモリ制御ソフトウェア（コンピュータプログラム）を実行するプロセッサと、チップ５に対するデータの読み書きを行うメモリコントローラと、ホスト１１とのデータのやり取りを行うホストインターフェースコントローラとを有する。図１では、コントローラ２は、一つのＬＳＩ（Large Scale Integration）で構成されているが、たとえばプロセッサが外付けになっているなど、複数のＩＣ（Integrated Circuit）チップで構成されていてもよい。コントローラ２が持つフラッシュメモリモジュール制御機能（以下、モジュール制御機能）７については後述する。
【００２１】
揮発メモリ３は、コントローラ２が扱う情報のうち高速にアクセスする必要のある情報を格納するために用いられる。具体的には、例えば、前述のフラッシュメモリ制御ソフトウェアや、それが使うためのフラッシュメモリモジュール制御データ（以下、モジュール制御データ）６がある。モジュール制御データ６の詳細については後述する。揮発メモリ３は、例えばＤＲＡＭ（Dynamic Random Access Memory）である。なお、高速にアクセスできれば、揮発メモリ３に代えて不揮発メモリなど他種の記憶媒体が採用されても良い。
【００２２】
チップ５は、ホスト１１から読み書きされる情報を格納するために用いられる。また、制御に必要な情報のうち、不揮発であるべきデータも格納する。詳しくは後述する。
【００２３】
フラッシュメモリバス８は、コントローラ２とチップ５を接続するために用いられる。図１では、一つのフラッシュメモリバス８に複数のチップ５が接続されているが、他の接続方式が採用されても良い。
【００２４】
ホストインターフェース９は、フラッシュメモリモジュール１をホスト１１に接続し、情報のやりとりを行うために用いられる。ホストインターフェース９としては、例えば、ＳＡＴＡ（Serial ATA）、ＳＡＳ（Serial Attached SCSI）、ＦＣ（Fibre Channel）などのストレージインターフェースが採用されても良いし、PCI-Express等のＩ／Ｏ系インターフェースが採用されても良い。
【００２５】
フラッシュメモリモジュール１は、ストレージシステムに設けられても良い。この場合、ストレージシステムは、複数のフラッシュメモリモジュール１を有する。二以上のメモリモジュール１でＲＡＩＤグループが構成される。ＲＡＩＤグループを基に論理ボリュームが形成される。このケースでは、ホスト１１は、ストレージシステムが有するコントローラ（以下、ストレージコントローラ）であっても良いし、ストレージシステムに接続されているホストコンピュータであっても良い。前者の場合、ストレージコントローラは、ホストコンピュータからのＩ／Ｏコマンドに従うアクセス先論理アドレスを、その論理アドレスを管理するフラッシュメモリモジュール１に送信し、その論理アドレスに対応する物理ブロックにアクセスすることができる。
【００２６】
また、フラッシュメモリモジュール１は、ＳＳＤ（Solid State Drive）や、可搬型のフラッシュメモリモジュールであっても良い。この場合、ホスト１１は、コンピュータであってよい。
【００２７】
図２は、チップ５内部の構成を示す。なお、図２以降の図面では、物理ブロックが「ＰＢ」、物理ページが「ＰＰ」、論理ブロックが「ＬＢ」、論理ページが「ＬＰ」とそれぞれ略記されることがある。
【００２８】
チップ５は、複数の物理ブロック５１で構成される。物理ブロック５１は、複数の物理ページ５２で構成される。
【００２９】
チップ５は、読み込み、書き込み及び消去の３つのインターフェースを持つ。具体的には、以下の通りである。
【００３０】
（読み込み）物理ページ５２全体、あるいは、物理ページ５２の一部からデータを読み込むことが可能である。
【００３１】
（書き込み）物理ブロック５１の先頭から順に、空き物理ページ（消去済みであり何も書かれていない物理ページ）５２にデータを書き込むことが可能である。具体的には、例えば、物理ページ＃１のみにデータが書き込まれている物理ブロック５１に対して、物理ページ＃２への書き込みが可能であるが、物理ページ＃１にデータを上書きすることはできない。また、物理ページ＃２をスキップして物理ページ＃３にデータを書き込むことはできない。
【００３２】
（消去）物理ブロック５１の単位でデータの消去が可能である。即ち、物理ブロック５１内の一部分だけを消去し、未書き込み状態にすること（つまり空きブロックとすること）はできない。
【００３３】
一般に、物理ブロックの大きさ、物理ページの大きさ、及び、ホスト１１からの読み書きの単位の大きさは異なっている。例えば、図２１に示すように、物理ブロックは２５６ｋＢ、物理ページは２ｋＢ、ホスト１１からの読み書きされる単位の大きさ（アクセスのサイズ）は５１２Ｂである。すなわち、ホスト１１から指定され得る論理アドレスの範囲毎に、論理ブロックが割り当てられており、論理ブロックに、物理ブロックが割り当てられる。一個の論理ブロックに一個以上の物理ブロックが割り当てられて良いが、本実施形態では、一個の論理ブロックに一個の物理ブロックが割り当てられるとする。物理ブロックは、複数の物理ページで構成されている。論理ブロックを構成する各論理ページに、その論理ブロックに割り当てられている物理ブロック内の物理ページが割り当てられている。コントローラ２は、ホスト１１からのアクセスコマンドで指定されている論理アドレスを基に所定の演算を行うことで、アクセス先の論理ページを特定し、モジュール制御データ６を基に、アクセス先論理ページに対応した物理ページを特定することができる。
【００３４】
このため、書き込みについて、ホスト１１からのアクセスのサイズとチップ５への書き込み単位／消去単位（ページ／ブロック）の大きさとの差を埋めるための仕掛けが必要となる。
【００３５】
図３Ａ〜図３Ｃが、チップ５のページ／ブロックのサイズとホスト１１からのアクセスのサイズとの差を隠蔽するためのコントローラ２の動作の例を示す。なお、図３Ａ〜図３Ｃには、物理ブロック番号（ＰＢ＃）がｐの物理ブロック５１が例示されているが、他の物理ブロック５１も同様の構成である。以下、ＰＢ＃がｐの物理ブロック５１を、「物理ブロック＃ｐ」と言う。
【００３６】
物理ブロック＃ｐ内の複数の物理ページ５２が、マスタ領域と追記領域に分けられている。つまり、物理ブロック＃ｐには、マスタ領域に属する物理ページ５２と、追記領域に属する物理ページ５２とがある。各物理ページ５２に書かれているデータは、論理ページの番号（ＬＰ＃）を用いて管理されている。
【００３７】
図３Ａは、初期状態における物理ブロック＃ｐの状態を示す。
【００３８】
初期状態では、物理ページ＃１（物理ページ番号（ＰＰ＃が１の物理ページ）から物理ページ＃ａまでの各物理ページ５２に、論理ページ＃１（ＬＰ＃が１の論理ページ）から論理ページ＃ａまでのデータがそれぞれ書き込まれている。また、残りの物理ページ５２（すなわち、物理ページ＃（ａ＋１）から物理ページ＃ｎ）については、まだデータが書き込まれていない状態（消去状態）になっている。
【００３９】
図３Ｂは、物理ブロック＃ｐに対して新たにデータが書き込まれた後の状態の一例を示す。
【００４０】
この例では、物理ページ＃（ａ＋１）に、論理ページ＃ａに書き込まれるべきデータが格納されており、物理ページ＃ｎに、論理ページ＃２に書き込まれるべきデータが格納されている。このようにして、物理ブロック＃ｐの大きさよりも小さい書き込み単位での要求に対して、物理ブロック＃ｐを消去することなく（厳密には、物理ブロック＃ｐに対して消去処理を行うことなく）、物理ブロック＃ｐにデータを追記することが可能となっている。
【００４１】
ただし、図３Ｂの例によれば、追記領域の最後の物理ページ＃ｎにまでデータが書き込まれているため、物理ブロック＃ｐに書き込み可能な物理ページが存在しない。そこで、コントローラ２は、追記されたデータをマスタ領域に反映させるマージ動作（リクラメーション）を行う。マージ動作では、コントローラ２は、物理ブロック＃ｐから各論理ページの最新データを読み込み、物理ブロック＃ｐに対する消去処理を行った後に、マスタ領域の先頭物理ページから順に、その物理ページに対応する論理ページについての最新データを書き込む。なお、データの書き込みは、先頭物理ページから末端物理ページに順次に行われるため、同一の論理ページに対応する最新のデータは、末端物理ページ又は末端物理ページに最も近い物理ページに存在することになる。
【００４２】
図３Ｃは、マージ動作が行われた後の物理ブロック＃ｐの状態を示す。
【００４３】
マスタ領域の先頭物理ページから順にデータが書き込まれており、追記領域を構成する全ての物理ページが消去状態になっている。マスタ領域の先頭物理ページ＃１〜末端物理ページ＃ａは、論理ページ＃１〜＃ａに対応している。従って、例えば、物理ページ＃１には、マージ動作前の物理ページ＃１に書き込まれていたデータ（最新データ）が再び書き込まれている。論理ページ＃１のデータが更新されていないためである。物理ページ＃２には、論理ページ＃２の最新データ（追記領域に書き込まれていたデータ）が書き込まれている。
【００４４】
なお、マージ動作でのデータの書込み先は、同一の物理ブロック＃ｐであることに代えて、他の空きブロック（消去状態の物理ブロック）とされても良い。具体的には、例えば、物理ブロック＃ｐ内の、各論理ページに対応する各最新データが、空きブロックにコピーされ、その後に、物理ブロック＃ｐに対して消去処理が行われて良い。
【００４５】
図４は、モジュール制御データ６の構成を示す。
【００４６】
モジュール制御データ６は、チップアレイ４へのアクセスの制御に使用されるデータである。モジュール制御データ６は、論理ブロックと物理ブロックの対応関係を表す情報を含んだブロックマッピングテーブル６１と、論理ページと物理ページの対応関係を表す情報を含んだページマッピングテーブル６２とを含む。テーブル６１及び６２については後に詳述する。なお、テーブル６１及び６２が有する情報は、テーブル以外の形式で管理されてもよい。
【００４７】
図５は、モジュール制御機能７の構成を示す。
【００４８】
モジュール制御機能７は、例えば、コントローラ２が有するプロセッサ（典型的にマイクロプロセッサ）で実行されるソフトウェア（コンピュータプログラム）である。以下、機能７が行う処理は、実際には、ソフトウェアを実行するプロセッサが行う。モジュール制御機能７の少なくとも一部が、ハードウェア回路で実現されても良い。モジュール制御機能７は、ホストリードサービス機能７１、ホストライトサービス機能７２、ページマッピングテーブル再構成機能７４、電源オン機能７５及び初期化機能７６を有する。機能７１〜７６については後に詳述する。
【００４９】
図６は、揮発メモリ３内のテーブル６１及び６２とチップアレイ４内の物理ブロックの状態との対応関係の一例を示す。
【００５０】
本実施形態では、ホスト１１から指定された論理アドレスを基に論理ブロック番号及び論理ページ番号が特定され、特定された論理ブロック番号及び論理ページ番号に対応する物理ページに対してアクセスが行われる。具体的には、例えば、ホスト１１からフラッシュメモリモジュール１へのアクセスが、ＳＣＳＩにおけるＬＢＡ（Logical Block Address）を用いて行われる場合、ＬＢＡをブロック内マスタ領域の容量で割ることにより得られた商が、論理ブロック番号であり、その余りをページ容量で割ることにより得られた商が、論理ページ番号である。
【００５１】
ブロックマッピングテーブル６１は、論理ブロック番号６１１と物理ブロック番号６１２の対応関係を表す情報を有する。このテーブル６１を参照することにより、ホスト１１から指定された論理アドレスに対応するアクセス先領域がどの物理ブロック５１に存在するかを求めることができる。
【００５２】
ページマッピングテーブル６２は、例えば、論理ブロック毎に存在する。ページマッピングテーブル６２は、論理ページ番号６２１と物理ページ番号６２２の対応関係を表す情報を有する。このテーブル６２を参照することにより、ホスト１１から指定された論理アドレスに対応するアクセス先領域がどの物理ページに存在するかを求めることができる。
【００５３】
物理ブロック５１には、その物理ブロック５１が割り当てられている論理ブロックの論理ブロック番号５１７が格納される。物理ページ５２（例えばそのユーザ領域）には、ホスト１１から直接読み書きされるデータ（いわゆるユーザデータ）５２３が格納される。また、その物理ページ５２（例えばその冗長領域）には、その物理ページ５２に対応する論理ページ番号５２８が格納される。
【００５４】
具体的には、例えば、各物理ページ５２の冗長領域に、その物理ページ５２に対応する論理ページの番号５２８を含んだメタデータが格納される。本実施形態で言う「メタデータ」とは、ホスト１１から直接読み書きされるデータではないが管理上保持しておくことが必要なデータのことである。メタデータは、例えば管理情報ユニットである。
【００５５】
また、例えば、先頭物理ページ＃ｉの冗長領域に格納されるメタデータは、先頭物理ページ＃ｉに対応する論理ページの番号５２８の他に、その先頭物理ページ＃ｉを有する物理ブロック５１が割り当てられている論理ブロックの論理ブロック番号５１７を含んでいても良い。
【００５６】
図７は、ブロックマッピングテーブル６１の構成の一例を示す。
【００５７】
このテーブル６１は、前述したように、論理ブロック番号６１１と物理ブロック番号６１２の対応関係（ブロック対応関係）を表す情報を有する。このテーブル６１は、フラッシュメモリモジュール１の電源が投入された際に作成され、ホスト１１からの読み書きの際に参照される。このテーブル６１は、ブロック対応関係が変わった場合に更新される。ブロック対応関係は、例えば、消去回数の偏りを抑えるためのウェアレベリング処理が行われた場合に変わる。また、ブロック対応関係は、いずれかの物理ブロック５１に対してマージ動作が行われた場合や、ページマッピングテーブル６２を再構成した場合に変わり得る。
【００５８】
ブロックマッピングテーブル６１は、論理ブロック番号６１１毎に、対応する物理ブロック番号６１２と、ページマッピングテーブル６２が存在するか否かを示すページマッピングテーブル存在フラグ６１３とを有する。論理ブロックについて有効なページマッピングテーブル６２が存在する場合、その論理ブロックの番号６１１に対応したフラグ６１３の値は「Ｙ」であり、そうでない場合、そのフラグ６１３の値は「Ｎ」である。なお、フラグ６１３の値は、例えば、対応する論理ブロックに割り当てられる物理ブロックが別の物理ブロックに変更された場合（つまりマージ動作が行われた場合）、「Ｙ」から「Ｎ」に変更される。このため、対応する論理ブロックその別の物理ブロックが割り当てられたから初めてその論理ブロックに対してアクセスが行われる場合には、その論理ブロックについてのページマッピングテーブル６２が再構成されることになる。
【００５９】
図８は、ページマッピングテーブル６２の構成の一例を示す。
【００６０】
このテーブル６２は、前述したように、論理ページ番号６２１と物理ページ番号６２２の対応関係（ページ対応関係）を表す情報を有する。前述のブロックマッピングテーブル６１は、フラッシュメモリモジュール１の電源が投入された際に作成されるが、このテーブル６２は、フラッシュメモリモジュール１の電源が投入された際ではなく、フラッシュメモリモジュール１の電源が投入された後、論理アドレスを基に特定された論理ブロックが初めてのアクセス先である場合に作成される。テーブル６２は、ホスト１１からのデータの読み書きの際に参照され、ホスト１１からのデータの書き込みやマージ動作の際に更新される。テーブル６２は、論理ページ番号６１１毎に、対応する物理ページ番号６１２を持つ。また、テーブル６２は、追記領域を構成する複数の物理ページのうちの最後にデータを追記した物理ページの番号（最後尾追記物理ページ番号）６２３も持つ。
【００６１】
図９は、物理ブロック５１へのデータ格納方式の一例を示す。
【００６２】
前述したように、物理ブロック５１に含まれる複数の物理ページ５２は、マスタ領域に属する物理ページ５２と、追記領域に属する物理ページ５２である。各物理ページ５２が、メタデータ５２１が格納される領域（冗長領域）と、ユーザ領域とを有し、ユーザ領域が、複数のデータ５２３がそれぞれ格納される複数のデータ領域（例えばセクタ）５２３を有する。
【００６３】
以下、マスタ領域内のメタデータの集合、すなわち、マスタ領域に属する物理ページ５２のメタデータ５２１の集合を、「ブロックメタデータ」５１５と言う。一方、追記領域内の個々のメタデータ５２１、すなわち、追記領域に属する物理ページ５２のメタデータ５２１を、「ページメタデータ」５２６と言う。なお、マスタ領域内のメタデータ領域の合計容量が、格納すべきブロックメタデータ５１５の容量より大きい場合、ブロックメタデータ５１５の格納のためにマスタ領域内の少なくとも一つの物理ページ５２が用いられなくて良い。
【００６４】
図１０は、物理ページ５２の構成の詳細の一例を示す。
【００６５】
物理ページ５２は、メタデータ５２１が格納されるメタデータ領域と、メタデータ５２１のＥＣＣ（Error Correcting Code）５２２が格納されるＥＣＣ領域と、複数のデータ５２３がそれぞれ格納される複数のデータ領域と、それぞれのデータのＥＣＣ５２４が格納されるＥＣＣ領域とを有する。
【００６６】
メタデータ領域は、図９に示したように、その領域を含んだ物理ページ５２がマスタ領域に属する場合には、ブロックメタデータ５１５の一部を格納し、その物理ページ５２が追記領域に属する場合には、ページメタデータ５２６を格納する。
【００６７】
メタデータ５２１（具体的には、ブロックメタデータ５１５の一部、又は、ページメタデータ５２６）に対してＥＣＣ５２２を設けることで、メタデータ５２１のみを読み込んだ場合にも、そのメタデータ５２１の妥当性（即ち、誤りが発生しているかどうか）を判定することができる。
【００６８】
図１１は、ブロックメタデータ５１５の構成の一例を示す。
【００６９】
ブロックメタデータ５１５は、物理ブロック５１に対応する論理ブロックの番号５１７を有する。
【００７０】
図１２は、ページメタデータ５２６の構成の一例を示す。
【００７１】
ページメタデータ５２６は、追記領域内の物理ページ５２に対応する論理ページの番号５２８を有する。尚、マスタ領域内の物理ページ５２については、対応する論理ページの番号は一意に定まるので、対応する論理ページ番号５２８が、マスタ領域内のメタデータ領域に格納される必要はない。
【００７２】
図１３は、ホストリードサービス機能７１によって行われる処理の流れの一例を示す。
【００７３】
本機能７１は、ホスト１１からコントローラ２がリード要求を受けた時に呼び出され、要求されたデータがチップアレイ４上のどの場所に格納されているかを特定すると共に、データをホスト１１に転送する。以下、順を追って処理内容を説明する。
【００７４】
ホスト１１からリード要求を受けると、機能７１が、論理ブロック番号と論理ページ番号を求める（Ｓ７１１）。具体的には、例えば、機能７１は、ホスト１１から指定された論理アドレスがＬＢＡ等のリニアアドレスの場合、論理アドレスを論理ブロック容量で割ることにより得られた商を論理ブロック番号とし、余りを論理ページ容量で割ることにより得られた商を論理ページ番号とすることができる。以下、Ｓ７１１で特定された論理ブロック番号及び論理ページ番号を、「リード元論理ブロック番号」及び「リード元論理ページ番号」と言う。
【００７５】
次に、機能７１は、揮発メモリ３上のブロックマッピングテーブル６１を参照し、リード元論理ブロック番号６１１に対応する物理ブロック番号（リード元物理ブロック番号）６１２を求める（Ｓ７１２）。
【００７６】
次に、機能７１は、リード元論理ブロックに対応した有効なページマッピングテーブル６２が揮発メモリ３上に存在するかどうかを調べる（Ｓ７１３）。具体的には、例えば、機能７１は、ブロックマッピングテーブル６１を参照し、リード元論理ブロック番号に対応するフラグ６１３が「Ｙ」であるかどうかを調べる。有効なページマッピングテーブル６２が存在しない場合（Ｓ７１３：ＮＯ）、機能７１は、再構成機能７４を呼び出す。それにより、リード元論理ブロックに対応した有効なページマッピングテーブル６２が構成される。そして、Ｓ７１５に進む。なお、Ｓ７１３において、有効なページマッピングテーブル６２が存在する場合（Ｓ７１３：ＹＥＳ）、Ｓ７１５に進む。
【００７７】
機能７１は、リード元論理ブロックに対応するページマッピングテーブル６２を参照し、リード元論理ページ番号６２１に対応する物理ページ番号（リード元物理ページ番号）６２２を求める（Ｓ７１５）。以上により、ホスト１１から要求されたデータのリード元物理ブロックとリード元物理ページが判明する。
【００７８】
次に、機能７１は、判明したリード元物理ブロック内の判明したリード元物理ページからデータを読み込み（Ｓ７１６）、読み込んだデータをホスト１１に応答する（Ｓ７１７）。
【００７９】
以上の処理により、ホスト１１からリード要求を受けた場合、アクセス先として、まず、大まかな格納場所であるリード元物理ブロック５１が特定され、その後、必要に応じて、論理ページと物理ページの対応関係を表すページマッピングテーブル６２が構成されて、リード元物理ページ６２が特定される。このため、詳細な論物対応関係を表す情報、すなわち、論理ページと物理ページの対応関係を表すテーブル６２を予め作成しておく必要がない。また、ブロックマッピングテーブル６１やページマッピングテーブル６２は揮発メモリ３上に格納されている。これらにアクセスするのに要する時間はフラッシュメモリへのアクセスに要する時間に比べ短いため、リード性能の悪化を抑えることができる。
【００８０】
図１４は、ホストライトサービス機能７２によって行われる処理の流れの一例を示す。
【００８１】
本機能７２は、ホスト１１からライト要求を受けた時に呼び出され、要求されたデータを適切な場所に格納する。以下、順を追って処理内容を説明する。
【００８２】
ホスト１１からライト要求を受けると、機能７２は、ライト要求で指定されている論理アドレスを基に論理ブロック番号（ライト先論理ブロック番号）と論理ページ番号（ライト先論理ページ番号）を求める（Ｓ７２１）。
【００８３】
次に、機能７２は、ブロックマッピングテーブル６１を参照し、ライト先論理ブロック番号に対応する物理ブロック番号（ライト先物理ブロック番号）を求める（Ｓ７２２）。
【００８４】
そして、機能７２は、ライト先論理ブロック番号に対応したフラグ６１３を参照し、その論理ブロック番号に対応した有効なページマッピングテーブル６２が存在するかどうかを調べる（Ｓ７２３）。そのテーブル６２が存在しない場合（Ｓ７２３：ＮＯ）、機能７２は、再構成機能７４を呼び出す。それにより、ライト先論理ブロックに対応したページマッピングテーブル６２が作成される。そして、Ｓ７２５に進む。
【００８５】
機能７２は、ライト先物理ブロックに消去済ページ（空き物理ページ）が十分存在するかどうかを調べる（Ｓ７２５）。具体的には、例えば、機能７２は、ライト先論理ページに対応したページマッピングテーブル６２の最後尾追記物理ページ番号６２３を参照する。そして、機能７２は、そのページ番号６２３と物理ページ番号の最大値（末端物理ページの番号）とを比較することで、ライト先物理ブロック内の空き物理ページの数を調べる。機能７２は、ホスト１１からのライト要求に従うデータ（ライトデータ）の量が、特定された空き物理ページ数に相当する容量を超えているかどうかを判断する。
【００８６】
Ｓ７２５の判断の結果が肯定的の場合、すなわち、消去済ページが十分存在する場合（Ｓ７２５：ＹＥＳ）、機能７２は、ホスト１１から受け取ったライトデータを、ページメタデータ５２６と共に消去済ページに書き込む（Ｓ７２６）。ページメタデータ５２６には、Ｓ７２１で求められた論理ページ番号が含まれる。なお、Ｓ７３２又は７４とＳ７２５との間に、機能７２は、ライト先論理ページ番号と同じ番号の物理ページ（つまりマスタ領域内の対応する物理ページ）にデータが格納済みか否かを判断し、格納済みと判断された場合に、Ｓ７２５の判断を行ってもよい。格納済みと判断されなかった場合、機能７２は、ホスト１１から受け取ったライトデータを、ライト先論理ページ番号と同じ番号の物理ページに書き込むことができる。ライト先物理ブロックへの初めての書き込みであれば、機能７２は、ライトデータとともにブロックメタデータ５１５をその物理ブロックに書き込んでよい。
【００８７】
Ｓ７２６の後、機能７２は、ライト先論理ブロックに対応するページマッピングテーブル６２を更新する（Ｓ７２７）。具体的には、例えば、機能７２は、ライト先論理ページ番号を有するエントリ（テーブル６２内のエントリ）の物理ページ番号６２２を、Ｓ７２６でのライト先物理ページの番号に更新し、且つ、最後尾追記物理ページ番号６２３を、Ｓ７２６での最後のライト先の物理ページの番号に更新する。そして、Ｓ７３４に進む。
【００８８】
一方、Ｓ７２５にて、消去済ページが十分になかった場合には（Ｓ７２５：ＮＯ）、マージ動作が行われる。すなわち、機能７２は、ライト先物理ブロック（以下、元の物理ブロック）に存在するデータ（論理ページに対応した一以上のデータのうちの最新データ）を読み込み、ホスト１１から受け取ったライトデータと併せて、マスタ領域に書き込むべきデータの集合を生成する（Ｓ７２８）。次に、機能７２は、未使用の物理ブロック（空き物理ブロック）を一つ選ぶ（Ｓ７２９）。この時、機能７２は、チップアレイ４上の物理ブロック間で消去回数の偏りを抑制するよう、あまり消去が行われていない物理ブロックを選ぶ等の選択方法を取っても良い。そして、機能７２は、Ｓ７２８で生成したデータを、選択した物理ブロックに、ブロックメタデータ５１５と共に書き込む（Ｓ７３０）。そのブロックメタデータ５１５は、元の物理ブロックが割り当てられた論理ブロックの番号（ライト先論理ブロック番号）を含む。そして、機能７２は、ライト先論理ブロックに対応するページマッピングテーブル６２を更新する（Ｓ７３１）。具体的には、例えば、機能７２は、全ての論理ページ６２１に対応する物理ページ６２２がマスタ領域を指すように更新し、且つ、最後尾追記物理ページ番号６２３を、追記領域の先頭物理ページの番号に更新する。次に、機能７２は、ブロックマッピングテーブル６１を更新する（Ｓ７３２）。具体的には、例えば、機能７２は、ライト先論理ブロック番号６１１に対応する物理ブロック番号６１２を、Ｓ７３０で書き込んだ新たな物理ブロック（Ｓ７２９で選択された物理ブロック）の番号を指すように更新する。次に、機能７２は、元の物理ブロック５１のデータを消去する（Ｓ７３３）。そして、Ｓ７３４に進む。
【００８９】
最後に、機能７２は、書き込みが完了したことをホスト１１に応答する（Ｓ７３４）。
【００９０】
以上の処理により、コントローラ２は、ホスト１１からライト要求を受けた場合に、まず大まかな格納場所であるライト先物理ブロック５１を特定することができる。そして、コントローラ２は、必要に応じて、論理ページと物理ページの対応関係を表すマッピングテーブル６２を作成し、適切な場所にデータを格納することができる。また、論理ブロックと物理ブロックの対応関係が変化する場合と、論理ページと物理ページの対応関係が変化する場合のそれぞれにおいて、コントローラ２は、ライトデータをフラッシュメモリに書き込むことに加えて、ライト先論理ブロック及びライト先論理ページがどれであるかを示す情報をメタデータとして書き込むことができる。このため、余分なアクセスを発生させることなく、論物変換のための情報をフラッシュメモリへと書き込むことができる。このため、電源が供給されなくなるなどの要因により揮発メモリ３が揮発し、ブロックマッピングテーブル６１やページマッピングテーブル６２が揮発したとしても、フラッシュメモリに書かれたメタデータ（ブロックメタデータ及びページメタデータ）からテーブル６１及び６２を復元することができる。なお、復元は、例えば、ブロックマッピングテーブル６１のみしておき、その後に、ライトアクセス及びリードアクセスに応じて、必要に応じて、ページマッピングテーブル６２が復元されてよい。
【００９１】
図１５は、ページマッピングテーブル再構成機能７４によって行われる処理の流れの一例を示す。
【００９２】
本機能７４は、論理ブロックに対応するページマッピングテーブル６２が揮発メモリ３上に存在しない場合に呼び出され、フラッシュメモリ上のページメタデータ５２６を基にページマッピングテーブル６２を作成する。以下、順を追って処理内容を説明する。
【００９３】
機能７４は、呼び出されると、まず、呼び出された論理ブロック（リード元論理ブロック又はライト先論理ブロック）に対応するページマッピングテーブル６２について、論理ページがマスタ領域の物理ページ５２を指すように初期化する（Ｓ７４１）。具体的には、例えば、機能７４は、先頭の論理ページが先頭の物理ページを指すように、２番目の論理ページが２番目の物理ページを指すようにし、以下の論理ページについても同様に処理する。
【００９４】
次に、機能７４は、追記領域内の全ての物理ページ５２について（Ｓ７４２）、まず、ページメタデータ５２６を読み込み、そのメタデータ５２６内の論理ページ番号５２８を取得する（Ｓ７４３）。また、機能７４は、読み込んだページメタデータ５２６について、ＥＣＣをチェックすることで、そのメタデータ５２６が正しいことを確認する（メタデータ５２６のエラーの有無を判断する）（Ｓ７４４）。そのメタデータ５２６が正しくない場合には、ＥＣＣを用いてそのメタデータ５２６が訂正される。データのリード元の物理ページが消去済のページであった場合は、既に追記領域内の全物理ページからページメタデータを読んだことになるので、Ｓ７４７へ進む。データのリード元の物理ページが消去済ページでない場合、その物理ページには追記されたデータが存在するので、機能７４は、Ｓ７４３で特定された論理ページ番号を有するエントリ（ページマッピングテーブル６２内のエントリ）について、そのリード元の物理ページの番号を、Ｓ７４３で特定された論理ページ番号に対応する物理ページ番号６２２として書き込む（Ｓ７４６）。機能７４は、以上の処理を、追記領域の他の物理ページ５２に対しても繰り返し（Ｓ７４２）、終了した場合にはＳ７４７へ進む。
【００９５】
ページマッピングテーブル６２の物理ページ番号６２２の更新が終了すると、最後に、機能７４は、最後尾追記物理ページ番号６２３を、最新データが書き込まれていた最後の物理ページの番号に更新する（Ｓ７４７）。
【００９６】
以上の手順により、ある指定された論理ブロック内の各論理ページについて、追記されたデータがある場合には、最新のデータが追記されている物理ページが対応付けられ、追記されたデータがない場合には、マスタ領域の物理ページが対応付けられる。この結果、一つのブロックについてページの論物対応関係を再構成（作成）することができる。本処理では追記領域のページメタデータ５２６のみを読めば良いため、復元のためのオーバヘッドを小さくすることが期待できる。
【００９７】
尚、機能７４は、既に説明してあるように、ページマッピングテーブル６２が作成されていない論理ブロックへのアクセスが発生した場合に、ホストリードサービス機能７１やホストライトサービス機能７２によって呼び出される。ただし、要求がなくても、コントローラ２の処理能力に余裕がある時など、適切なタイミングで、図１５に示す処理が実行されてもよい。
【００９８】
図１６は、電源オン機能７５によって行われる処理の流れの一例を示す。
【００９９】
本機能７５は、フラッシュメモリモジュール１の電源投入時に呼び出され、フラッシュメモリ上のメタデータからブロックマッピングテーブル６１を作成する。以下、順を追って処理内容を説明する。
【０１００】
電源が投入されると、まず、機能７５は、全ての物理ブロック５１に対し、Ｓ７５２〜Ｓ７５４の処理を行う。すなわち、機能７５は、各物理ブロック５１からブロックメタデータ５１５を読み出し、そのメタデータ５１５から論理ブロック番号５１７を抽出する（Ｓ７５２）。次に、機能７５は、読み込んだブロックメタデータ５１５について、ＥＣＣをチェックすることで、そのメタデータ５１５が正しいことを確認する（Ｓ７５３）。そして、機能７５は、ブロックマッピングテーブル６１における、Ｓ７５２で読み込んだ論理ブロック番号６１１に対応するエントリに、メタデータ５１５のリード元の物理ブロックの番号６１２を書き込む（Ｓ７５４）。以上の処理を、他の物理ブロック５１に対しても繰り返し（Ｓ７５１）、終了した場合にはＳ７５５へ進む。
【０１０１】
次に、機能７５は、ブロックマッピングテーブル６１の全てのエントリのページマッピングテーブル存在フラグ６１３を「Ｎ」、即ち非存在を表す値を設定する（Ｓ７５５）。
【０１０２】
最後に、機能７５は、ホスト１１にＩ／Ｏを受け付けられる状態になったことを伝える（Ｓ７５６）。
【０１０３】
以上の手順により、フラッシュメモリモジュール１内の全ての論理ブロックについて、対応する物理ブロックが判明する。この結果、ブロックの論物対応関係を、フラッシュメモリに格納された情報から復元することができる。尚、本処理では、マスタ領域に格納されたブロックメタデータ５１５のみを読めば良く、ホスト１１から受け取ったデータやページメタデータ５２６等は読み出す必要がない。このため、復元のためのオーバヘッドを小さくすることができる。その結果、起動に要する時間を抑えることができ、それ故、ホスト１１に対し、短い時間でＩ／Ｏ受付可能を伝えることができる。
【０１０４】
図１７は、初期化機能７６によって行われる処理の流れの一例を示す。
【０１０５】
本機能７６は、初めてフラッシュメモリモジュール１が使われるとき、或いは既に格納されているデータを消去し、再度未使用状態に戻す際に用いられる。以下、順を追って処理内容を説明する。
【０１０６】
機能７６は、呼び出されると、まず、全ての物理ブロック５１に対して消去処理を行う（Ｓ７６１）。
【０１０７】
機能７６は、未処理の論理ブロックのうちの一つの論理ブロックについて、未使用の物理ブロック（空き物理ブロック）５１を選ぶ（Ｓ７６３）。
【０１０８】
次に、機能７６は、ブロックメタデータ５１５とそのＥＣＣとを生成する（Ｓ７６４）。ブロックメタデータ５１５には、今回の処理で扱われている上記一つの論理ブロックの番号が格納される。
【０１０９】
次に、機能７６は、生成したブロックメタデータ５１５とデータとを、マスタ領域の物理ページ５２に格納する（Ｓ７６５）。ここでいう「データ」は、ＨＤＤのフォーマットなどで用いられるような、一定の値でよい。
【０１１０】
最後に、機能７６は、今回処理を行った論理ブロックに対応するブロックマッピングテーブル６１のエントリについて、物理ブロック番号６１２を、Ｓ７６３で選んだ物理ブロック５１の番号に更新する（Ｓ７６６）。
【０１１１】
機能７６は、以上のＳ７６３〜Ｓ７６６を、全ての論理ブロックについて繰り返す（Ｓ７６２）。
【０１１２】
以上の処理により、全ての論理ブロックに対し、対応する物理ブロック５１が割り当てられると共に、割り当てられた物理ブロック５１に、その物理ブロック５１に対応する論理ブロックの番号を含んだブロックメタデータ５１５が格納される。その結果、以後のホストコ１１からのアクセスを適切に処理することができるようになる。また、電源オン時に論物変換の情報をフラッシュメモリ４上から正しく復元することができるようになる。
【０１１３】
図１８は、ホストライトサービス機能７２のＳ７２６における、コントローラ２とチップアレイ４との間のやりとりの一例を示す。
【０１１４】
コントローラ２は、書き込みコマンドと共に、物理ページ５２に書き込むデータを送信する。書き込むデータには、ページメタデータ５２６及びそのＥＣＣ５２２、ホストから送られたデータ５２３及びそのＥＣＣ５２４が含まれる。
【０１１５】
ここで、全てのメタデータ書き込みは、ホストから送られたデータの書き込みに付随して行われるため、メタデータ書き込みは、フラッシュメモリの書き込みの性能や、書き込み回数による寿命に実質的に影響を与えない。
【０１１６】
図１９は、ホストライトサービス機能のＳ７２８〜Ｓ７３０における、コントローラ２とチップアレイ４との間でのやりとりの一例を示す。
【０１１７】
この図では、物理ブロックａが元の物理ブロック、物理ブロックｂが新たに使われることになった物理ブロックである。
【０１１８】
まず、物理ブロックａの中の最新データが格納されている物理ページ６から最新データが読みだされる。これがＳ７２８で行われる動作に対応する。
【０１１９】
そして、物理ブロックｂ内の物理ページ５２（マスタ領域内の物理ページ６２）に対する書き込みコマンドと共に、その物理ページ５２に書き込むデータが送信される。データには、ブロックメタデータ５１５の一部及びそのＥＣＣ５２２と、ホスト１１から送られたデータ５２３及びそのＥＣＣ５２４とが含まれる。これがＳ７３０に対応する。
【０１２０】
ここで、全てのメタデータ書き込みは、ホスト１１から送られたデータの書き込みに付随して行われるため、メタデータ書き込みは、フラッシュメモリの書き込みの性能や、書き込み回数による寿命に実質的に影響を与えない。
【０１２１】
図２０は、電源オン機能７５についてのＳ７５２、及び、ページマップ再構成機能７４についてのＳ７４３における、コントローラ２とチップアレイ４との間でのやりとりの一例を示す。
【０１２２】
電源が投入されると、まず、物理ブロック５１から、ブロックメタデータ５１５が読み出される。具体的には、マスタ領域の物理ページ５２から、メタデータ５２１及びそのＥＣＣ５２２が読み出される。これが、全ての物理ブロック５１について繰り返される。以上が、電源オン機能７５のＳ７５２に対応する。そして、読み出し及び構築が終わると、ホスト１１に対し、Ｉ／Ｏ受付可能であることが通知される。
【０１２３】
その後、ホスト１１からアクセス要求（Ｉ／Ｏ要求）を受け取ると、そのアクセス要求で指定されている論理アドレスを基に特定された物理ブロック５１から、ページメタデータ５２６が読み出される。具体的には、追記領域内の物理ページ５２から、メタデータ５２１及びそのＥＣＣ５２２が読み出される。これが、追記領域内の物理ページ５２について繰り返される。以上が、ページマップ再構成機能７４のＳ７４３に対応する。
【０１２４】
ここで、電源投入時にはブロックメタデータ５１５のみ、即ちマスタ領域内のメタデータ５２１のみが読み出され、ページメタデータ５２６は読み出されない。このため、起動に要する時間が抑えられ、それ故、短い時間でホスト１１へＩ／Ｏ受付可能であることを通知できる。
【０１２５】
また、ホスト１１からアクセス要求を受け、そのアクセス要求で指定されている論理アドレスを基に特定された論理ブロックに対応するページマッピングテーブル６２が存在しない場合に、ページメタデータ５２６のみが読み出され、テーブル６２が作成される。このため、最低限の読み込みで、論物変換のための情報を復元することが可能である。
【０１２６】
上述した実施形態によれば、フラッシュメモリの通常動作時の書き込み性能への影響を抑えつつ、起動に要する時間を抑えることができる。
【０１２７】
以上、本発明の一つの実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１２８】
なお、ページマッピングテーブル６２は、論理ブロック毎に代えて、複数の論理ブロック毎に用意されても良い。例えば、コントローラ２は、アクセスコマンドを受信した場合、アクセスコマンドで指定されている論理アドレスを基に特定されるアクセス先論理ブロックと次の論理ブロックとに対応するページマッピングテーブル６２を作成しても良い。
【０１２９】
また、二以上の物理ブロックで一つのマスタ領域と一つの追記領域が構成されても良い。例えば、第１の物理ブロックがマスタ領域であり第２の物理ブロックが追記領域であっても良い。
【０１３０】
ブロックマッピングテーブル６１は、揮発メモリ３上に構築されるが、その構築方法には、複数の方法が考えられる。
【０１３１】
一つ目は、揮発メモリ３に物理ブロック番号６１２を格納し、アクセスの際に物理ブロック番号６１２を求めるために、揮発メモリ３上のアドレス値（address）を計算するというものである。論理ブロック番号６１１から、ブロックマッピングテーブル６１の揮発メモリ３上の開始アドレス値（start address）に、ブロックマッピングテーブル６１の１エントリ分の構成情報のバイト数と論理ブロック番号６１１を掛けた値を加えて求まる。このアドレス値は一意に計算される。ホストからリード又はライト要求を受けた場合、このアドレス値を用いて揮発メモリ３にアクセスし、物理ブロック番号６１２とフラグ６１３の情報を得ることができる。この方法では、参照時間を短くできる特徴がある。
【０１３２】
二つ目には、一つ目の方式の、ブロックマッピングテーブル６１の揮発メモリ３に、論理ブロック番号６１１と物理ブロック番号６１２とフラグ６１３の情報を格納しておく方法である。一つ目の方式で論理ブロック番号６１１から計算したアドレス値が正しいことを、揮発メモリ３に格納してある論理ブロック番号６１１と比較して確認することができ、コントローラ２の論理のエラーや、揮発メモリ３のソフトエラー等を検出でき信頼性向上に効果がある。
【０１３３】
三つ目には、論理ブロック番号６１１と物理ブロック番号６１２とフラグ６１３の情報を、揮発メモリ３に格納し、使用している論理ブロックの数の分だけ、ブロックマッピングテーブル６１を構築する方法である。物理ブロックに論理ブロック番号６１２が格納されていなければ、使用していないものと判断する。この方法では、使用している論理ブロック分の容量のブロックマッピングテーブル６１を構築すれば良く、ブロックマッピングテーブル６１の容量を削減できる効果がある。
【０１３４】
また、図１３のＳ７１２に関して、物理ブロック番号６１２の求め方には、ブロックマッピングテーブル６１の構築方法により複数の方法がある。例えば、リード元論理ブロック番号６１１から計算により、ブロックマッピングテーブル６１のアドレスを求め、格納してある物理ブロック番号６１２を求める方法がある。他にはブロックマッピングテーブル６１にリード元論理ブロック番号６１１の値も格納しておき、計算が正しいことを確認もする方法がある。またはリード元論理ブロック番号６１１と物理ブロック番号６１２の値のペアをブロックマッピングテーブル６１に格納しておき、リード元論理ブロック番号６１１で、ブロックマッピングテーブル６１内を検索し、対応する物理ブロック番号６１２を求める方法などである。
【０１３５】
また、図１４のＳ７２２に関して、物理ブロック番号６１２の求め方には、ブロックマッピングテーブル６１の構築方法により複数の方法がある。ライト先論理ブロック番号から計算により、ブロックマッピングテーブル６１のアドレスを求め、格納してある物理ブロック番号を求める方法や、さらにブロックマッピングテーブル６１にライト先論理ブロック番号の値も格納しておき、計算が正しいことを確認もする方法や、またはライト先論理ブロック番号と物理ブロック番号の値のペアをブロックマッピングテーブル６１に格納しておき、ライト先論理ブロック番号で、ブロックマッピングテーブル６１内を検索し、対応する物理ブロック番号を求める方法などである。
【０１３６】
図１６のＳ７５４における、ブロックマッピングテーブル６１の構築の際、ブロックマッピングテーブル６１に書き込むデータには、ブロックマッピングテーブル６１の構成方法により、複数の方法がある。
【０１３７】
一つ目は、メタデータ５１５から抽出した論理ブロック番号５１７を元に、計算してブロックマッピングテーブル６１のアドレスを求め、物理ブロック番号６１１を格納する方法である。
【０１３８】
二つ目は、一つ目に加えさらに、計算したアドレスの確認用に論理ブロック番号５１７もブロックマッピングテーブル６１に格納する方法である。
【０１３９】
三つ目は、メタデータ５１５を読み出した物理ブロック５１の順番に、論理ブロック番号５１７と物理ブロック番号６１１のペアを格納する方法である。物理ブロック５１に論理ブロック番号５１７が格納されていない場合、つまり物理ブロック５１が使用されていない場合は、ブロックマッピングテーブル６１に論理ブロック番号５１７も物理ブロック番号６１１も格納しない。
【符号の説明】
【０１４０】
１：フラッシュメモリモジュール
【図１】
0005525605.tif 000002
【図２】
0005525605.tif 000003
【図３Ａ】
0005525605.tif 000004
【図３Ｂ】
0005525605.tif 000005
【図３Ｃ】
0005525605.tif 000006
【図４】
0005525605.tif 000007
【図５】
0005525605.tif 000008
【図６】
0005525605.tif 000009
【図７】
0005525605.tif 000010
【図８】
0005525605.tif 000011
【図９】
0005525605.tif 000012
【図１０】
0005525605.tif 000013
【図１１】
0005525605.tif 000014
【図１２】
0005525605.tif 000015
【図１３】
0005525605.tif 000016
【図１４】
0005525605.tif 000017
【図１５】
0005525605.tif 000018
【図１６】
0005525605.tif 000019
【図１７】
0005525605.tif 000020
【図１８】
0005525605.tif 000021
【図１９】
0005525605.tif 000022
【図２０】
0005525605.tif 000023
【図２１】
0005525605.tif 000024