(57)【要約】【課題】仮想ブロックを形成して複数個のフラッシュメモリに並行したデータの書き込みや読み出しを行うように構成されたフラッシュメモリシステムにおいて、仮想ブロックの管理及び仮想ブロックに対するアクセスを効率良く行うことができるように仮想ブロックを形成する。【解決手段】メモリコントローラは、互いに異なるフラッシュメモリに属する同じアドレスの物理ブロックを複数個結合させた暫定仮想ブロックを複数個形成し、複数個の暫定仮想ブロックから不良の物理ブロックが含まれる暫定仮想ブロックを抽出し、抽出された複数個の暫定仮想ブロック間で不良の物理ブロックと良品の物理ブロックとを交換することにより、不良の物理ブロックが含まれていない第２の暫定仮想ブロックを形成し、抽出されなかった暫定仮想ブロック及び上記第２の暫定仮想ブロックを管理対象とする。【選択図】図１８
2010092200.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムから与えられる指示情報に基づいて、物理ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
互いに異なるフラッシュメモリに属する複数個の物理ブロックを仮想的に結合した仮想ブロックを形成する仮想ブロック形成手段と、
前記仮想ブロック形成手段により形成されたそれぞれの仮想ブロックに含まれる物理ブロックを管理する第１の仮想ブロック管理手段と、
ホストシステムから与えられるセクタ単位のアドレスが割り当てられている論理セクタ領域を複数個集めた論理ブロックと前記仮想ブロックとの対応関係を管理するアドレス管理手段とを備え、
前記仮想ブロック形成手段は、互いに異なるフラッシュメモリに属する同じアドレスの物理ブロックを複数個結合させた暫定仮想ブロックを複数個形成する暫定仮想ブロック形成手段と、前記暫定仮想ブロック形成手段により形成された複数個の前記暫定仮想ブロックから不良の物理ブロックが含まれる前記暫定仮想ブロックを抽出する抽出手段と、前記抽出手段により抽出された複数個の前記暫定仮想ブロック間で不良の物理ブロックと良品の物理ブロックとを交換することにより、不良の物理ブロックが含まれていない第２の暫定仮想ブロックを形成する第２の暫定仮想ブロック形成手段と、前記抽出手段により抽出されなかった前記暫定仮想ブロック及び前記第２の暫定仮想ブロック形成手段により形成された前記第２の暫定仮想ブロックを前記第１の仮想ブロック管理手段によって管理される前記仮想ブロックとして設定する設定手段とを有することを特徴とするメモリコントローラ。
【請求項２】
前記第１の仮想ブロック管理手段は、前記仮想ブロックに含まれる物理ブロックを示す情報である仮想ブロック情報が保持されている仮想ブロック管理テーブルに基づいて、前記仮想ブロックに含まれる物理ブロックを管理し、
前記仮想ブロック管理テーブルには、前記第２の暫定仮想ブロックに関する前記仮想ブロック情報だけが保持されていることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記仮想ブロックに含まれるいずれか１個以上の物理ブロックが不良化したときに、不良化した物理ブロックが属する前記仮想ブロックの使用を禁止する第２の仮想ブロック管理手段と、
第２の仮想ブロック管理手段により使用が禁止された前記仮想ブロックを保留仮想ブロックとして管理する保留仮想ブロック管理手段と、
前記保留仮想ブロック管理手段により管理されている複数個の前記保留仮想ブロック間で、不良化した物理ブロックと良品の物理ブロックとを交換することにより、不良化した物理ブロックが含まれていない前記仮想ブロックを再形成し、再形成された前記仮想ブロックの使用を解禁する第３の仮想ブロック管理手段とを備え、
前記第３の仮想ブロック管理手段により再形成された前記仮想ブロックに関する前記仮想ブロック情報が前記仮想ブロック管理テーブルに追加されることを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
前記保留仮想ブロック管理手段は、前記保留仮想ブロックに含まれる良品の物理ブロックの個数をフラッシュメモリ毎に集計した値を集計値として保持することを特徴とする請求項３に記載のメモリコントローラ。
【請求項５】
前記第３の仮想ブロック管理手段は、フラッシュメモリ毎の前記集計値が全て所定値以上になったときに前記仮想ブロックの再形成を行うことを特徴とする請求項４に記載のメモリコントローラ。
【請求項６】
請求項１乃至５のいずれか１項に記載のメモリコントローラと、このメモリコントローラにより制御される複数個のフラッシュメモリを備えるフラッシュメモリシステム。
【請求項７】
ホストシステムから与えられる指示情報に基づいて、物理ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
互いに異なるフラッシュメモリに属する複数個の物理ブロックを仮想的に結合した仮想ブロックを形成する仮想ブロック形成ステップと、
前記仮想ブロック形成ステップにより形成されたそれぞれの仮想ブロックに含まれる物理ブロックを管理する第１の仮想ブロック管理ステップと、
ホストシステムから与えられるセクタ単位のアドレスが割り当てられている論理セクタ領域を複数個集めた論理ブロックと前記仮想ブロックとの対応関を管理するアドレス管理ステップとを備え、
前記仮想ブロック形成ステップは、互いに異なるフラッシュメモリに属する同じアドレスの物理ブロックを複数個結合させた暫定仮想ブロックを複数個形成する暫定仮想ブロック形成ステップと、前記暫定仮想ブロック形成ステップにより形成された複数個の前記暫定仮想ブロックから不良の物理ブロックが含まれる前記暫定仮想ブロックを抽出する抽出ステップと、前記抽出ステップにより抽出された複数個の前記暫定仮想ブロック間で不良の物理ブロックと良品の物理ブロックとを交換することにより、不良の物理ブロックが含まれていない第２の暫定仮想ブロックを形成する第２の暫定仮想ブロック形成ステップと、前記抽出ステップにより抽出されなかった前記暫定仮想ブロック及び前記第２の暫定仮想ブロック形成ステップにより形成された前記第２の暫定仮想ブロックを前記第１の仮想ブロック管理ステップによって管理される前記仮想ブロックとして設定する設定ステップとを有することを特徴とするフラッシュメモリの制御方法。
【請求項８】
前記第１の仮想ブロック管理ステップでは、前記仮想ブロックに含まれる物理ブロックを示す情報である仮想ブロック情報が保持されている仮想ブロック管理テーブルに基づいて前記仮想ブロックに含まれる物理ブロックを管理し、
前記仮想ブロック管理テーブルには、前記第２の暫定仮想ブロックに関する前記仮想ブロック情報だけが保持されていることを特徴とする請求項７に記載のフラッシュメモリの制御方法。
【請求項９】
前記仮想ブロックに含まれるいずれか１個以上の物理ブロックが不良化したときに、不良化した物理ブロックが属する前記仮想ブロックの使用を禁止する第２の仮想ブロック管理ステップと、
第２の仮想ブロック管理ステップにより使用が禁止された前記仮想ブロックを保留仮想ブロックとして管理する保留仮想ブロック管理ステップと、
前記保留仮想ブロック管理ステップにより管理されている複数個の前記保留仮想ブロック間で、不良化した物理ブロックと良品の物理ブロックとを交換することにより、不良化した物理ブロックが含まれていない前記仮想ブロックを再形成し、再形成された前記仮想ブロックの使用を解禁する第３の仮想ブロック管理ステップとを備え、
前記第３の仮想ブロック管理ステップにより再形成された前記仮想ブロックに関する前記仮想ブロック情報が前記仮想ブロック管理テーブルに追加されることを特徴とする請求項８に記載のフラッシュメモリの制御方法。
【請求項１０】
前記保留仮想ブロック管理ステップでは、前記保留仮想ブロックに含まれる良品の物理ブロックの個数をフラッシュメモリ毎に集計した値を集計値として保持することを特徴とする請求項９に記載のフラッシュメモリの制御方法。
【請求項１１】
前記第３の仮想ブロック管理ステップは、フラッシュメモリ毎の前記集計値が全て所定値以上になったときに前記仮想ブロックの再形成を行うことを特徴とする請求項１０に記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
フラッシュメモリを記憶媒体として用いた記憶装置は、特許文献１に記載されているように、記憶装置が接続されるホストシステムの動作速度とフラッシュメモリの動作速度（書き込み速度又は読み出し速度）との違いを吸収するために、フラッシュメモリに書き込まれるデータ又はフラッシュメモリから読み出されたデータを保持するためのバッファメモリを備えている。
【０００３】
更に、このような記憶装置では、ホストシステム側から見た実質的な動作速度を向上させるために、複数個のフラッシュメモリに対して並行したデータの書き込みや読み出しを行っている場合が多い。例えば、特許文献２には、異なるフラッシュメモリ内の物理ブロックを仮想的に結合した仮想ブロックを形成し、この仮想ブロック単位で、複数個のフラッシュメモリに対して並行したデータの書き込みや読み出しを行う技術が開示されている。
【０００４】
【特許文献１】特開２００３−２３３５２９号公報
【特許文献２】国際公開第２００２／０４６９２９号パンフレット
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従って、仮想ブロックを形成して複数個のフラッシュメモリに対して並行したデータの書き込みや読み出しを行うフラッシュメモリシステムが含まれる記憶装置では、仮想ブロックの管理及び仮想ブロックに対するアクセスを効率良く行うことができるように仮想ブロックを形成する必要がある。
【０００６】
そこで、本発明は、仮想ブロックを形成して複数個のフラッシュメモリに並行したデータの書き込みや読み出しを行うように構成されたフラッシュメモリシステムにおいて、仮想ブロックの管理及び仮想ブロックに対するアクセスを効率良く行うことができるように仮想ブロックを形成することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の第１の観点に従うメモリコントローラは、ホストシステムから与えられる指示情報に基づいて、物理ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
互いに異なるフラッシュメモリに属する複数個の物理ブロックを仮想的に結合した仮想ブロックを形成する仮想ブロック形成手段と、
前記仮想ブロック形成手段により形成されたそれぞれの仮想ブロックに含まれる物理ブロックを管理する第１の仮想ブロック管理手段と、
ホストシステムから与えられるセクタ単位のアドレスが割り当てられている論理セクタ領域を複数個集めた論理ブロックと前記仮想ブロックとの対応関係を管理するアドレス管理手段とを備える。前記仮想ブロック形成手段は、互いに異なるフラッシュメモリに属する同じアドレスの物理ブロックを複数個結合させた暫定仮想ブロックを複数個形成する暫定仮想ブロック形成手段と、前記暫定仮想ブロック形成手段により形成された複数個の前記暫定仮想ブロックから不良の物理ブロックが含まれる前記暫定仮想ブロックを抽出する抽出手段と、前記抽出手段により抽出された複数個の前記暫定仮想ブロック間で不良の物理ブロックと良品の物理ブロックとを交換することにより、不良の物理ブロックが含まれていない第２の暫定仮想ブロックを形成する第２の暫定仮想ブロック形成手段と、前記抽出手段により抽出されなかった前記暫定仮想ブロック及び前記第２の暫定仮想ブロック形成手段により形成された前記第２の暫定仮想ブロックを前記第１の仮想ブロック管理手段によって管理される前記仮想ブロックとして設定する設定手段とを有する。
【０００８】
本発明の第２の観点に従うメモリコントローラは、前記第１の観点において、前記第１の仮想ブロック管理手段が、前記仮想ブロックに含まれる物理ブロックを示す情報である仮想ブロック情報が保持されている仮想ブロック管理テーブルに基づいて、前記仮想ブロックに含まれる物理ブロックを管理する。前記仮想ブロック管理テーブルには、前記第２の暫定仮想ブロックに関する前記仮想ブロック情報だけが保持されている。
【０００９】
本発明の第３の観点に従うメモリコントローラは、前記第２の観点において、
前記仮想ブロックに含まれるいずれか１個以上の物理ブロックが不良化したときに、不良化した物理ブロックが属する前記仮想ブロックの使用を禁止する第２の仮想ブロック管理手段と、
第２の仮想ブロック管理手段により使用が禁止された前記仮想ブロックを保留仮想ブロックとして管理する保留仮想ブロック管理手段と、
前記保留仮想ブロック管理手段により管理されている複数個の前記保留仮想ブロック間で、不良化した物理ブロックと良品の物理ブロックとを交換することにより、不良化した物理ブロックが含まれていない前記仮想ブロックを再形成し、再形成された前記仮想ブロックの使用を解禁する第３の仮想ブロック管理手段とを備える。前記第３の仮想ブロック管理手段により再形成された前記仮想ブロックに関する前記仮想ブロック情報が、前記仮想ブロック管理テーブルに追加される。
【００１０】
本発明の第４の観点に従うメモリコントローラは、前記第３の観点において、前記保留仮想ブロック管理手段は、前記保留仮想ブロックに含まれる良品の物理ブロックの個数をフラッシュメモリ毎に集計した値を集計値として保持する。
【００１１】
本発明の第５の観点に従うメモリコントローラは、前記第４の観点において、前記第３の仮想ブロック管理手段は、フラッシュメモリ毎の前記集計値が全て所定値以上になったときに前記仮想ブロックの再形成を行う。
【００１２】
本発明の第６の観点に従うメモリコントローラは、前記第１乃至第５の観点のいずれかに従うメモリコントローラと、このメモリコントローラにより制御される複数個のフラッシュメモリとを備える。
【００１３】
本発明の第７の観点に従うフラッシュメモリの制御方法は、ホストシステムから与えられる指示情報に基づいて、物理ブロック単位で記憶データの消去が行われるフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
互いに異なるフラッシュメモリに属する複数個の物理ブロックを仮想的に結合した仮想ブロックを形成する仮想ブロック形成ステップと、
前記仮想ブロック形成ステップにより形成されたそれぞれの仮想ブロックに含まれる物理ブロックを管理する第１の仮想ブロック管理ステップと、
ホストシステムから与えられるセクタ単位のアドレスが割り当てられている論理セクタ領域を複数個集めた論理ブロックと前記仮想ブロックとの対応関を管理するアドレス管理ステップとを備える。前記仮想ブロック形成ステップは、互いに異なるフラッシュメモリに属する同じアドレスの物理ブロックを複数個結合させた暫定仮想ブロックを複数個形成する暫定仮想ブロック形成ステップと、前記暫定仮想ブロック形成ステップにより形成された複数個の前記暫定仮想ブロックから不良の物理ブロックが含まれる前記暫定仮想ブロックを抽出する抽出ステップと、前記抽出ステップにより抽出された複数個の前記暫定仮想ブロック間で不良の物理ブロックと良品の物理ブロックとを交換することにより、不良の物理ブロックが含まれていない第２の暫定仮想ブロックを形成する第２の暫定仮想ブロック形成ステップと、前記抽出ステップにより抽出されなかった前記暫定仮想ブロック及び前記第２の暫定仮想ブロック形成ステップにより形成された前記第２の暫定仮想ブロックを前記第１の仮想ブロック管理ステップによって管理される前記仮想ブロックとして設定する設定ステップとを有する。
【００１４】
本発明の第８の観点に従うフラッシュメモリの制御方法は、前記第７の観点において、前記第１の仮想ブロック管理ステップでは、前記仮想ブロックに含まれる物理ブロックを示す情報である仮想ブロック情報が保持されている仮想ブロック管理テーブルに基づいて前記仮想ブロックに含まれる物理ブロックを管理する。前記仮想ブロック管理テーブルには、前記第２の暫定仮想ブロックに関する前記仮想ブロック情報だけが保持されている。
【００１５】
本発明の第９の観点に従うフラッシュメモリの制御方法は、前記第８の観点において、
前記仮想ブロックに含まれるいずれか１個以上の物理ブロックが不良化したときに、不良化した物理ブロックが属する前記仮想ブロックの使用を禁止する第２の仮想ブロック管理ステップと、
第２の仮想ブロック管理ステップにより使用が禁止された前記仮想ブロックを保留仮想ブロックとして管理する保留仮想ブロック管理ステップと、
前記保留仮想ブロック管理ステップにより管理されている複数個の前記保留仮想ブロック間で、不良化した物理ブロックと良品の物理ブロックとを交換することにより、不良化した物理ブロックが含まれていない前記仮想ブロックを再形成し、再形成された前記仮想ブロックの使用を解禁する第３の仮想ブロック管理ステップとを備える。前記第３の仮想ブロック管理ステップにより再形成された前記仮想ブロックに関する前記仮想ブロック情報が、前記仮想ブロック管理テーブルに追加される。
【００１６】
本発明の第１０の観点に従うフラッシュメモリの制御方法は、前記第９の観点において、前記保留仮想ブロック管理ステップでは、前記保留仮想ブロックに含まれる良品の物理ブロックの個数をフラッシュメモリ毎に集計した値を集計値として保持する。
【００１７】
本発明の第１１の観点に従うフラッシュメモリの制御方法は、前記第１０の観点において、前記第３の仮想ブロック管理ステップでは、フラッシュメモリ毎の前記集計値が全て所定値以上になったときに前記仮想ブロックの再形成を行う。
【発明の効果】
【００１８】
本発明によれば、仮想ブロックを形成して複数個のフラッシュメモリに並行したデータの書き込みや読み出しを行うように構成されたフラッシュメモリシステムにおいて、仮想ブロックの管理及び仮想ブロックに対するアクセスを効率良く行うことができるように仮想ブロックを形成することができる。
【発明を実施するための最良の形態】
【００１９】
図１は、本発明の一実施形態に係るフラッシュメモリシステム１を概略的に示すブロック図である。本実施形態のフラッシュメモリシステム１では、記憶媒体として複数個のフラッシュメモリを使用している。更に、互いに異なるフラッシュメモリに属する複数個の物理ブロックで仮想ブロックを形成している。
【００２０】
図１に示すように、フラッシュメモリシステム１は、フラッシュメモリ２と、フラッシュメモリ２を制御するメモリコントローラ３とで構成されている。尚、図１では、複数個のフラッシュメモリを、「フラッシュメモリ２」として図示している。以下の説明では、複数個のフラッシュメモリ２を総称して「フラッシュメモリ２」と言うことがある。以下、各機能ブロックについて説明する。
【００２１】
ホストインターフェースブロック７は、ホストシステム４との間でデータ、アドレス情報、ステータス情報、外部コマンド等の授受を行う。外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。ホストシステム４よりフラッシュメモリシステム１に供給されるデータ等は、ホストインターフェースブロック７を入口としてフラッシュメモリシステム１の内部（例えば、バッファ９）に取り込まれる。また、フラッシュメモリシステム１からホストシステム４に供給されるデータ等は、ホストインターフェースブロック７を出口としてホストシステム４に供給される。
【００２２】
ＳＲＡＭ（Static Random Access Memory）８は、揮発性の記憶素子であり、フラッシュメモリ２の制御に必要なデータを一時的に格納するために使用される。例えば、不良ブロックテーブル、アドレス変換テーブル及び空きブロックテーブル等は、ＳＲＡＭ８上で作成又は更新される。ここで、不良ブロックテーブルは、不良ブロックを示す情報を保持するテーブルである。アドレス変換テーブルは、論理ブロックと仮想ブロック（又は物理ブロック）との対応関係を示したテーブルである。空きブロックテーブルは、消去状態の仮想ブロック（又は物理ブロック）又は有効なデータが書き込まれていない仮想ブロック（又は物理ブロック）を検索するためのテーブルである。これらのテーブルは、フラッシュメモリ２に保存してもよいが、これらのテーブルを格納するために、ＦｅＲＡＭ（Ferroelectric Random Access Memory）等の不揮発性ＲＡＭ（Random Access Memory）を用いるようにしてもよい。
【００２３】
ＲＯＭ１２は、不揮発性の記憶素子である。ＲＯＭ１２には、フラッシュメモリ２の制御に必要なファームウェアが格納されている。なお、起動時に必要な最低限のファームウェアだけがＲＯＭ１２に格納され、その他のファームウェアはフラッシュメモリ２に格納されるようにしてもよい。
【００２４】
バッファ９は、ホストシステム４から与えられたデータやフラッシュメモリ２から読み出されたデータが一時的に格納される揮発性の記憶素子である。本本実施形態では、この揮発性の記憶素子としてＤＲＡＭ（Dynamic Random Access Memory）を用いている。このバッファ９の詳細については後述する。
【００２５】
フラッシュメモリインターフェースブロック１０は、ＲＯＭ１２又はフラッシュメモリ２にファームウェアとして格納されているシーケンスコード（各種の処理を規定したコード）を読み込み、読込んだシーケンスコードに従って、フラッシュメモリ２に対する各種の処理を実行する。このシーケンスコードは、フラッシュメモリインターフェースブロック１０が実行するシーケンス処理毎に設定されたコードセットであり、それぞれのコードセットが複数個のコードで構成されている。このシーケンスコードに基づいて実行される処理では、フラッシュメモリインターフェースブロック１０とフラッシュメモリ２との間で、データ、アドレス情報、ステータス情報、内部コマンド等の授受が、内部バス１４を介して行なわれる。ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、メモリコントローラ３から与えられる内部コマンドに従って動作する。尚、フラッシュメモリ２にファームウェアとして格納されているシーケンスコードについては、処理の実行前にフラッシュメモリ２から読み出されＳＲＡＭ８に格納される。
【００２６】
ＥＣＣブロック１１は、フラッシュメモリ２に書き込むデータに付加される誤り訂正符号（ＥＣＣ：Error-Correcting Code））を生成するとともに、読み出したデータに付加されている誤り訂正符号に基づいて、読み出したデータに含まれる誤りを検出・訂正する。
【００２７】
マイクロプロセッサ６は、ＲＯＭ１２又はフラッシュメモリ２にファームウェアとして格納されているプログラムコードを読み込み、読み込んだプログラムコードに従って、メモリコントローラ３の全体の動作を制御する。このプログラムコードは、マイクロプロセッサ６の動作を規定したプログラムであり、マイクロプロセッサ６は、読込んだプログラムコードに基づいて、フラッシュメモリ２に対するアクセスを制御する。尚、フラッシュメモリ２にファームウェアとして格納されているプログラムコードについては、起動時にフラッシュメモリ２から読み出されＳＲＡＭ８に格納される。
【００２８】
フラッシュメモリ２は、ＮＡＮＤ型フラッシュメモリであり、レジスタと、複数のメモリセルが配列されたメモリセルアレイを備えている。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。ここで、メモリセル群は、複数のメモリセルが直列に接続されたものである。各ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、レジスタから選択されたメモリセルへのデータの書き込み、又は選択されたメモリセルからレジスタへのデータの読み出しが行われる。尚、一般的に使用されているＮＡＮＤ型フラッシュメモリには、ＳＬＣ（single level cell）タイプのメモリセルで構成されているものと、ＭＬＣ（multi level cell）タイプのメモリセルで構成されているものとがある。
【００２９】
ＮＡＮＤ型フラッシュメモリでは、データの読み出し及び書き込みはページ（物理ページ）単位で行われ、データの消去は複数のページ（物理ページ）で構成されたブロック（物理ブロック）単位で行われる。尚、物理ページは、主にホストシステム４から与えられるユーザーデータが書き込まれるユーザー領域と、付加データが記憶される冗長領域とで構成されている。一般的に使用されているＮＡＮＤ型フラッシュメモリには、ユーザー領域の容量が４セクタ（２０４８バイト）や８セクタ（４０９６バイト）のものがある。冗長領域については、メーカー、メモリセルのタイプ（ＳＬＣ又はＭＬＣ）及び物理ページの容量等の違いによりその容量が異なり、種々の容量のものがある。また、１個の物理ブロックを構成する物理ページの個数については、６４個のものや１２８個のもの等がある。本実施形態では、１個の物理ページのユーザー領域の容量が８セクタ（４０９６バイト）で、１個の物理ブロックが６４個の物理ページで構成されているＮＡＮＤ型フラッシュメモリを用いた場合について説明する。
【００３０】
冗長領域に書き込まれる付加データとしては、誤り訂正符号（ＥＣＣ：Error-Correcting Code）、論理アドレス情報、ブロックステータス（フラグ）等がある。論理アドレス情報は、その物理ブロックに割り当てられた論理ブロックを示す情報であり、この情報に基づいて物理ブロックと論理ブロックの対応関係が判別される。ブロックステータス（フラグ）は、物理ブロックの良否を示すフラグであり、このブロックステータス（フラグ）に基づいて、正常にデータの書き込み等を行うことができない物理ブロックである不良ブロックが判別される。尚、不良ブロックには、出荷時から不良である初期不良の物理ブロック（以下、「初期不良ブロック」と言う）と、使用開始後に劣化して不良ブロックになった後発不良の物理ブロック（以下、「後発不良ブロック」と言う）があり、初期不良ブロックについては、不良ブロックであることを示すブロックステータス（フラグ）がメーカーによって予め書き込まれている。また、この初期不良ブロックを示すブロックステータス（フラグ）を、ユーザー領域に書き込んでいるメーカーもある。後発不良ブロックの判断基準については、設計の際に設計者が適宜設定することができる。例えば、書き込み又は消去が行われた際にフラッシュメモリから出力される処理ステータスがフェイルであった場合、読み出されたデータに予め定められた閾値以上の誤りが含まれていた場合、又はこれらの組合せ等により、後発不良理ブロックであるとの判断が行われてもよい。
【００３１】
本実施形態では、図２に示すように、８個のフラッシュメモリ２ａ〜２ｈが並行してアクセスされるように、つまり、並行してデータの書き込みや読み出しが行われるようにフラッシュメモリインターフェース１０が構成されている。８個のフラッシュメモリ２ａ〜２ｈに書き込まれるデータは、時分割でバッファ９から出力され、ラッチ回路２１ａ〜２１ｈを介して、フラッシュメモリ２ａ〜２ｈに供給される。８個のフラッシュメモリ２ａ〜２ｈから読み出されるデータは、ラッチ回路２１ａ〜２１ｈを介して、時分割でバッファ９に入力される。尚、バッファ９のホストシステム４側のデータ入出力と、バッファ９のフラッシュメモリ２ａ〜２ｈ側のデータ入出力についても、時分割で動作するように回路が構成されている。
【００３２】
上記のように８個のフラッシュメモリ２ａ〜２ｈに並行してアクセスする際に、メモリコントローラ３は、互いに異なるフラッシュメモリ２ａ〜２ｈに属する８個の物理ブロックを1個の仮想ブロックとして取り扱い、この仮想ブロックに対して1個の論理ブロックを割り当てている。この仮想ブロックは、例えば、図３に示したような仮想ブロック管理テーブルにより管理されている。仮想ブロック管理テーブルは、図３に示すように、仮想ブロックに付けられた通し番号である仮想ブロック番号（ＶＢＮ）と、それぞれの仮想ブロックを構成する物理ブロックの物理ブロックアドレス（ＶＢＡ）との対応関係を示している。この仮想ブロック管理テーブルを参照することにより、例えば、ＶＢＮ＃０の仮想ブロックは、
フラッシュメモリ２ａ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｂ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｃ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｄ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｅ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｆ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｇ内のＰＢＡ＃０の物理ブロックと
フラッシュメモリ２ｈ内のＰＢＡ＃０の物理ブロックと
で構成されていることが分かる。それぞれの仮想ブロックを構成する物理ブロックのＰＢＡは、同一でなくてもよいが、仮想ブロックの管理等を考慮すれば、同じＰＢＡの物理ブロックで仮想ブロックが構成されることが好ましい。但し、ＰＢＡが同一の８個の物理ブロック（互いに異なるフラッシュメモリ２ａ〜２ｈに属する物理ブロック）の中に不良ブロックが含まれている場合には、その不良ブロックに代えて、別の物理ブロック（ＰＢＡが異なる物理ブロック）が割り当てられる。例えば、フラッシュメモリ２ｃ内のＰＢＡ＃７の物理ブロックが不良ブロックの場合には、このＰＢＡ＃７の物理ブロックに代えて、ＰＢＡ＃１０１６の物理ブロックがＶＢＮ＃７の仮想ブロックに割り当てられる。
【００３３】
尚、それぞれの仮想ブロックに割り当てられているフラッシュメモリ２ａ〜２ｈに属する８個の物理ブロックについては、その物理ブロックが不良ブロックにならない限り他の物理ブロックに変更されないことが好ましい。また、仮想ブロック管理テーブルには、予め定められている同一のＰＢＡの物理ブロックだけで構成された仮想ブロック以外の仮想ブロックについてだけ、その仮想ブロックを構成する物理ブロックのＰＢＡを記述するようにしても良い。つまり、図３に示した、ＶＢＮ＃７の仮想ブロックやＶＢＮ＃１５の仮想ブロックのような仮想ブロックについてだけ、その仮想ブロックを構成する物理ブロックのＰＢＡを仮想ブロック管理テーブルに記述するようにしても良い。
【００３４】
ホストシステム４側のアドレス空間は、セクタ（５１２バイト）単位で分割した領域（以下、「論理セクタ領域」と言う）に付けた通番であるＬＢＡ（Logical Block Address）で管理されている。メモリコントローラ３内で行われるアドレス管理では、複数個の論理セクタ領域で論理ブロックが形成され、この論理ブロックに対して、仮想ブロックが割り当てられる。本実施形態では、１個の物理ブロックが、５１２セクタのユーザー領域で構成されており、１個の仮想ブロックが、８個の物理ブロックで形成されている。このため、ＬＢＡが連続する４０９６個の論理セクタ領域をまとめたものが論理ブロックとされ（例えば、ＬＢＡ＃０〜＃４０９５の４０９６個の論理セクタ領域がＬＢＮ＃０の論理ブロックとされる）、この論理ブロックに対して、仮想ブロックが割り当てられる。この論理論理ブロックと仮想ブロックとの対応関係は、論理ブロックに付けられた通し番号である論理ブロック番号（ＬＢＮ）と仮想ブロックの仮想ブロック番号（ＶＢＮ）との対応関係を示したアドレス変換テーブルで管理されている。図４は、アドレス変換テーブルの一例であり、このアドレス変換テーブルには、例えば、ＬＢＮ＃０の論理ブロックにＶＢＮ＃１１の仮想ブロックが割り当てられ、ＬＢＮ＃１の論理ブロックにＶＢＮ＃０の仮想ブロックが割り当てられていることが示されている。尚、ここでは、論理ブロックに含まれる領域の容量と、仮想ブロックに含まれ記憶領域（ユーザー領域）の容量を同じにしたが、論理ブロックに含まれる領域の容量を仮想ブロックに含まれ記憶領域（ユーザー領域）の容量よりも小さくしても良い。
【００３５】
本実施形態では、ホストシステム４から与えられるデータは、一旦、バッファ９に格納される。メモリコントローラ３は、バッファ９に格納されているデータをフラッシュメモリ２に書き込む必要が生じたときに、フラッシュメモリ２へのデータの書き込みを実行する。メモリコントローラ３は、バッファ９に格納されているデータをフラッシュメモリ２に書き込むときには、論理ブロックと仮想ブロックの対応関係に基づいて、書き込み先の仮想ブロックを特定する。なお、それぞれの論理ブロックと対応関係にある仮想ブロックは、アドレス変換テーブルに基づいて特定される。また、それぞれの仮想ブロックを構成する物理ブロックは、仮想ブロック管理テーブルに基づいて特定される。そして、メモリコントローラ３は、このようにして特定された互いに異なるフラッシュメモリ２ａ〜２ｈに属する物理ブロック対して並行してデータの書き込みを行う。
【００３６】
メモリコントローラ３は、バッファ９に格納されているデータをフラッシュメモリ２に書き込むときに、書き込むデータに対応する論理ブロックに仮想ブロックが割り当てられていない場合、又はその論理ブロックと対応関係にある仮想ブロックを構成する物理ブロック内にデータを書き込むための空き領域（データが書き込まれていない物理ページ）が無い場合には、その論理ブロックに対してデータが書き込まれていない仮想ブロック（以下、データが書き込まれていない仮想ブロックを「空き仮想ブロック」と言う）を新たに割り当てる。つまり、このような場合、メモリコントローラ３は、空き仮想ブロックの検索を行い、検出された空き仮想ブロックを、書き込むデータに対応する論理ブロックに新たに割り当てる。
【００３７】
尚、それぞれの仮想ブロックを構成する８個の物理ブロックについては予め定められているので、空き仮想ブロックの検索も仮想ブロック単位で行われる。この検索は、例えば、図５に示したような検索テーブルを用いて行われる。この検索テーブルでは、各ビットに１個の仮想ブロックが割り当てられている。そして、各ビットの論理値（“０”又は“１”）は、そのビットに割り当てられている仮想ブロックが空き仮想ブロックであるか否かを示している。例えば、空き仮想ブロックが論理値の“１”に割り当てられている場合について説明する（この場合、図５で、１番上の行の８ビットに下位ビット側から順番にＶＢＮ＃０〜＃７の仮想ブロックが割り当てられているとすれば、ＶＢＮ＃７の仮想ブロックは空き仮想ブロックであるが、ＶＢＮ＃０〜＃６の仮想ブロックは空き仮想ブロックではない）。空き仮想ブロックの検索では、論理値が“１”のビットの検索が検索テーブル上で行われる。また、空き仮想ブロックにデータが書き込まれたときは、その仮想ブロックに対応する検索テーブル上のビットの論理値が“１”から“０”に変更される。一方、データが格納されていた仮想ブロックが空き仮想ブロックになったときは、その仮想ブロックに対応する検索テーブル上のビットの論理値が“０”から“１”に変更される。
【００３８】
次に、仮想ブロック内の仮想ページについて説明する。メモリコントローラ３は、仮想ブロックが複数の仮想ページで構成されているものとして、仮想ブロック内の仮想ページを管理している。尚、仮想ブロック内の仮想ページと物理ブロック内の物理ページとの対応関係は予め定められている。つまり、それぞれの仮想ブロック内の仮想ページに付けられた通し番号（それぞれの仮想ブロック内での通し番号）である仮想ページ番号（ＶＰＮ）と、それぞれの物理ブロック内の物理ページに付けられた通し番号（それぞれの物理ブロック内での通し番号）である物理ページ番号（ＰＰＮ）との対応関係は予め定められている。図６は、本実施形態における仮想ページと物理ページとの対応関係を示している。それぞれの仮想ページは、８個の物理ページで構成されている。例えば、ＶＰＮ＃０の仮想ページは８個のフラッシュメモリ２ａ〜２ｈ内のＰＰＮ＃０の物理ページで構成され、ＶＰＮ＃１の仮想ページは８個のフラッシュメモリ２ａ〜２ｈ内のＰＰＮ＃１の物理ページで構成され、以下同様に、ＶＰＮ＃６３の仮想ページは８個のフラッシュメモリ２ａ〜２ｈ内のＰＰＮ＃６３の物理ページで構成されている。
【００３９】
また、メモリコントローラ３は、論理ブロック内の論理セクタ領域を複数個まとめた領域（複数セクタの領域）を論理ページとして管理している。つまり、論理ブロックは複数個の論理ページで構成され、論理ページは複数個の論理セクタ領域で構成されている。本実施形態では、６４個の論理セクタ領域をまとめた６４セクタの領域が１個の論理ページとして管理されている。メモリコントローラ３は、論理ページと仮想ページとの対応関係を、論理ブロック内の論理ページに付けられた通し番号（それぞれの論理ブロック内での通し番号）である論理ページ番号（ＬＰＮ）と、仮想ブロック内の仮想ページに付けられた通し番号（それぞれの仮想ブロック内での通し番号）である仮想ページ番号（ＶＰＮ）との対応関係を示すページ情報テーブルに基づいて把握する。図７は、ページ情報テーブルの一例であり、例えば、ＬＰＮ＃０の論理ページがＶＰＮ＃０の仮想ページに対応し、ＬＰＮ＃１の論理ページがＶＰＮ＃１の仮想ページに対応することを示している。また、この論理ページと仮想ページとの対応関係を管理するため、それぞれの仮想ページを構成する８個の物理ページの冗長領域には、これらの物理ページに書き込まれたデータに対応する論理ページのＬＰＮが書き込まれるようにすることが好ましい。尚、仮想ページと、その仮想ページを構成する物理ページとの対応関係は予め定められているので、８個の物理ページのうち、いずれか１個の物理ページの冗長領域にだけＬＰＮを書き込むようにしてもよい。
【００４０】
本実施形態では、１個の物理ページのユーザー領域が８個のセクタ領域（第１〜８セクタ領域）に分割されて使用されている。ここで、仮想ページを構成するそれぞれの物理ページに含まれる第１〜８セクタ領域と、それぞれの論理ページに含まれる６４個の論理セクタ領域との対応関係について説明する。図８に示したように１個の論理ブロックは、ＬＰＮ＃０〜＃６３の論理ページで構成されており、それぞれ論理ページには６４個の論理セクタ領域が含まれている。ここで、説明の便宜のため、それぞれ論理ページに含まれている論理セクタ領域に、その論理ページ内での通し番号を付ける。以下、この通し番号をセクタ番号（ＳＮ）と言う。図９は、それぞれ論理ページに含まれているＳＮ＃０〜＃６３の論理セクタ領域と、それぞれの物理ページに含まれる第１〜８セクタ領域との対応関係を示している。仮想ページは、８個のフラッシュメモリ２ａ〜２ｈにそれぞれ属する８個の物理ページで構成されている。本実施形態では、ＳＮ＃０の論理セクタ領域がフラッシュメモリ２ａに属する物理ページ内の第１セクタ領域に対応し、ＳＮ＃１の論理セクタ領域がフラッシュメモリ２ｂに属する物理ページ内の第１セクタ領域に対応し、以下同様に、ＳＮ＃２〜＃７の論理セクタ領域がフラッシュメモリ２ｃ〜２ｈに属するそれぞれの物理ページページ内の第１セクタ領域に対応している。続いて、ＳＮ＃８の論理セクタ領域がフラッシュメモリ２ａに属する物理ページ内の第２セクタ領域に対応し、ＳＮ＃９の論理セクタ領域がフラッシュメモリ２ｂに属する物理ページ内の第２セクタ領域に対応し、以下同様に、ＳＮ＃１０〜＃１５の論理セクタ領域がフラッシュメモリ２ｃ〜２ｈに属するそれぞれの物理ページページ内の第２セクタ領域に対応している。このようにして、ＳＮ＃０〜＃６３の論理セクタ領域が、８個の物理ページ内の第１〜８セクタ領域に対応している。
【００４１】
次に、本実施形態におけるバッファ９について説明する。本実施形態では、論理ページと同じ容量の領域に分割して、バッファ９上の領域を使用している。以下、論理ページと同じ容量に分割された領域を「バッファページ」と言い、バッファページに付けられた通し番号をバッファページ番号（ＢＰＮ）と言う。
【００４２】
図１０は、本実施形態のバッファ９（図１０（ａ））及びバッファ９上の領域を管理するためのバッファ管理テーブル（図１０（ｂ））を示している。バッファ９はＢＰＮ＃０〜＃３１のバッファページで構成され、ＢＰＮ＃０〜＃１５のバッファページは書き込み用のバッファページに、ＢＰＮ＃１６〜＃３１のバッファページは読み出し用のバッファページに割り当てられている。つまり、ＢＰＮ＃０〜＃１５のバッファページには、ホストシステム４から与えられたデータが格納され、ＢＰＮ＃１６〜＃３１のバッファページには、フラッシュメモリ２から読み出されたデータが格納される。それぞれのバッファページに格納されているデータに対応する論理ページは、バッファ管理テーブルで管理されている。つまり、バッファページに格納されるデータは、バッファ管理テーブルに基づいて論理ページ単位で管理されている。
【００４３】
このバッファ管理テーブルには、それぞれのバッファページに格納されているデータに対応する論理ページを示す情報（例えば、論理ページのＬＰＮ及びその論理ページが属する論理ブロックのＬＢＮを示す情報）が書き込まれている。言い換えれば、それぞれのバッファページに割り当てられている論理ページを示す情報が書き込まれている。例えば、図１０（ｂ）のバッファ管理テーブルには、ＢＰＮ＃０のバッファページに、ＬＢＮ＃０の論理ブロックに属するＬＰＮ＃４の論理ページが割り当てられていることが示されている。更に、ＢＰＮ＃１のバッファページには、ＬＢＮ＃２の論理ブロックに属するＬＰＮ＃０の論理ページが割り当てられ、ＢＰＮ＃２のバッファページには、ＬＢＮ＃０の論理ブロックに属するＬＰＮ＃５の論理ページが割り当てられていることが示されている。尚、ＢＰＮ＃４及びＢＰＮ７のバッファページには、いずれの論理ページも割り当てられておらず、空き領域になっている。
【００４４】
ホストシステム４から与えられるデータをバッファ９に格納するときには、そのデータに対応する論理ページが割り当てられているバッファページの有無が判断される。そのデータに対応する論理ページが割り当てられているバッファページが有る場合には、そのバッファページにホストシステム４から与えられるデータが格納される。従って、ホストシステム４から与えられるデータと同じ論理ページに対応する旧データ（更新前のデータ）がバッファページに格納されている場合に、旧データに対してホストシステム４から与えられるデータが上書きされる。
【００４５】
ホストシステム４から与えられるデータに対応する論理ページが割り当てられているバッファページが無い場合には、空き領域になっているバッファページ（以下、空き領域になっているバッファページを「空きバッファページ」と言う）に、そのデータに対応する論理ページが新たに割り当てられる。そして、そのデータに対応する論理ページが新たに割り当てられたバッファページに、そのデータが書き込まれる。また、新たに割り当てられた論理ページが属する論理ブロックのＬＢＮ及びその論理ページのＬＰＮを示す情報が、バッファ管理テーブル上の、その論理ページが割り当てられた空きバッファページに対応する箇所に書き込まれる。
【００４６】
メモリコントローラ３は、それぞれのバッファページの優先順位を管理している。この優先順位管理では、書き込み用のバッファページ（ＢＰＮ＃０〜＃１５のバッファページ）の優先順位と、読み出し用のバッファページ（ＢＰＮ＃１６〜＃３１のバッファページ）の優先順位とが別々に管理されている。書き込み用のバッファページは、バッファページにデータが書き込まれたときに、そのバッファページの優先順位が最上位になるように、優先順位が管理されている。つまり、この優先順位管理では、データが書き込まれた時点が現在時刻に近い方から遠い方に向かって、優先順位が順次低くなっていく。従って、現在時刻から最も近い時点にデータが書き込まれたバッファページの優先順位が最上位になり、現在時刻から最も遠い時点にデータが書き込まれたバッファページの優先順位が最下位になる。読み出し用のバッファページは、バッファページに格納されているデータがホストシステム４から読み出されたときに（バッファページに格納されているデータがホストシステム４に供給されたときに）、そのバッファページの優先順位が最上位になるように、優先順位が管理されている。つまり、この優先順位管理では、データが読み出された時点が現在時刻に近い方から遠い方に向かって、優先順位が順次低くなっていく。従って、現在時刻から最も近い時点にデータが読み出されたバッファページの優先順位が最上位になり、現在時刻から最も遠い時点にデータが読み出されたバッファページの優先順位が最下位になる。
【００４７】
本実施形態における書き込み用のバッファページの管理では、常に所定個数の空きバッファページが存在するようにバッファページの管理が行われている。従って、空きバッファページに論理ページが新たに割り当てられ、空きバッファページの個数が減少するときは、減少する個数と同じ個数のバッファページを新たな空きバッファページにするために、バッファページからフラッシュメモリ２へのデータの書き込みが行われる。このデータ書き込みでは、優先順位が低いバッファページの方から順番に、バッファページからフラッシュメモリ２へのデータの書き込みが行われる。例えば、２個のバッファページを新たな空きバッファページにする場合には、優先順位が下位側から１番目と２番目のバッファページに格納されているデータがフラッシュメモリ２に書き込まれ、これらのバッファページが新たな空きバッファページになる。また、バッファ管理テーブル上の新たに空きバッファページになったバッファページに対応する箇所には、対応する論理ページが存在しないことを示す情報が書き込まれる。
【００４８】
このような書き込み用のバッファページの管理が行われているため、通常の動作状態においては、新たな空きバッファページを確保するときにだけ、書き込み用のバッファページからフラッシュメモリ２へのデータの書き込みが行われる。従って、頻繁に書き換えられる論理ページに割り当てられているバッファページ（頻繁に書き換えられる論理ページに対応するデータが格納されているバッファページ）については、優先順位は常に上位側にあるため、通常の動作状態においては、バッファページ上でデータの書き換えが行われ、バッファページに格納されているデータをフラッシュメモリ２に退避する必要が生じたときにだけ、バッファページからフラッシュメモリ２へのデータの書き込みが行われる。例えば、ホストシステム４がシャットダウンされるときには、書き込み用のバッファページに格納されているデータがフラッシュメモリ２に書き込まれる。
【００４９】
本実施形態における読み出し用のバッファページの管理では、優先順位が低いバッファページの方から順番に、格納されているデータの置き換えが行われる。尚、空きバッファページが存在する場合には、その空きバッファページにフラッシュメモリ２から読み出されたデータが保存されるため、空きバッファページが存在しないときの動作について説明する。
【００５０】
ホストシステム４から読み出しを指示するアクセス指示が与えられた場合、メモリコントローラ３は、そのアクセス指示で指定されたアクセス対象の領域が属する論理ページに対応するデータが、書き込み用のバッファページ又は読み出し用のバッファページに格納されているか否かを、バッファ管理テーブルに基づいて判断する。アクセス対象の領域が属する論理ページに対応するデータが、いずれかのバッファページに格納されている場合には、そのバッファページに格納されているデータがホストシステム４に供給される。尚、アクセス対象の領域が属する論理ページに対応するデータが、書き込み用のバッファページと読み出し用のバッファページの双方に格納されている場合は、書き込み用のバッファページに格納されているデータが優先される。
【００５１】
アクセス対象の領域が属する論理ページに対応するデータが、いずれのバッファページにも格納されていない場合には、その論理ページに対応するデータがフラッシュメモリ２から読み出され、優先順位が最下位の読み出し用のバッファページに格納される。そして、その読み出し用のバッファページに格納されたデータがホストシステム４に供給される。また、その読み出し用のバッファページに格納されたデータに対応する論理ページが属する論理ブロックのＬＢＮ及びその論理ページのＬＰＮを示す情報が、バッファ管理テーブル上の、その読み出し用のバッファページに対応する箇所に書き込まれる。尚、その読み出し用のバッファページに格納されたデータがホストシステム４に供給されることにより、その読み出し用のバッファページの優先順位が最上位に変更される。
【００５２】
例えば、ホストシステム４から与えられた読み出しを指示するアクセス指示で指定されたアクセス対象の領域が属する論理ページが、ＬＢＮ＃３の論理ブロックに属するＬＰＮ＃７の論理ページであったときに、その論理ページ対応するデータが、いずれのバッファページにも格納されていない場合には、その論理ページに対応するデータがフラッシュメモリ２から読み出され、優先順位が最下位の読み出し用のバッファページに格納される。このとき、優先順位が最下位の読み出し用のバッファページがＢＰＮ＃２０のバッファページであった場合には、ＢＰＮ＃２０のバッファページに、ＬＢＮ＃３の論理ブロックに属するＬＰＮ＃７の論理ページに対応するデータが格納される。また、ＢＰＮ＃２０のバッファページに、ＬＢＮ＃３の論理ブロックに属するＬＰＮ＃７の論理ページに対応するデータが格納されることにより、バッファ管理テーブル上の、ＢＰＮ＃２０のバッファページに対応する箇所に、その論理ページが属する論理ブロックのＬＢＮである＃３と、その論理ページのＬＰＮである＃７を示す情報が書き込まれる。尚、ＢＰＮ＃２０のバッファページに格納されているデータがホストシステム４に供給されることにより、ＢＰＮ＃２０のバッファページの優先順位が最上位に変更される。
【００５３】
次に、ホストシステム４から供給されるデータをバッファ９に格納する動作、及びバッファ９に格納されているデータをフラッシュメモリ２に書き込む動作について具体的に説明する。例えば、ホストシステム４から書き込みを指示するアクセス指示が与えられ、そのアクセス指示で指定されたＬＢＡの範囲が、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃８〜＃１１に対応する場合について説明する。つまり、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃８〜＃１１の論理ページに対応するデータがホストシステム４から供給され、そのデータが書き込み用のバッファページに格納される場合について説明する。尚、以下の説明では、２個の空きバッファページが常に存在するように書き込み用のバッファページの管理が行われているものとして説明する。
【００５４】
書き込みを指示するアクセス指示が与えられたときに、メモリコントローラ３は、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃８〜＃１１の論理ページに割り当てられている書き込み用のバッファページが存在するか否かを判断する。図１０（ｂ）に示したように、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃８の論理ページがＢＰＮ＃３のバッファページに、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃９の論理ページがＢＰＮ＃５のバッファページに割り当てられている場合、ＬＰＮ＃８の論理ページに対応するデータはＢＰＮ＃３のバッファページに、ＬＰＮ＃９の論理ページに対応するデータはＢＰＮ＃５のバッファページに格納される。また、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃１０の論理ページとＬＰＮ＃１１の論理ページに割り当てられている書き込み用のバッファページが存在しない場合、これらの論理ページに対応するデータは、空きバッファページであるＢＰＮ＃４のバッファページとＢＰＮ＃７のバッファページに格納される。つまり、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃１０の論理ページにＢＰＮ＃４のバッファページが割り当てられ、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃１１の論理ページにＢＰＮ＃７のバッファページが割り当てられる。
【００５５】
本実施形態のメモリコントローラ３は、ホストシステム４から供給されるデータの格納先のバッファページを管理するために、格納先管理テーブルを備えている。図１１（ａ）は、この格納先管理テーブルの一例であり、格納先のバッファページを示すＢＰＮを設定するための１６個のエントリーを備えている。これらのエントリーに格納先のバッファページを示すＢＰＮが順次設定され、ポインタによって指定されているエントリーに設定されているＢＰＮに基づいて、ホストシステム４から供給されるデータの格納先のバッファページが選択される。
【００５６】
ＬＢＮ＃１の論理ブロック内のＬＰＮ＃８〜＃１１の論理ページに対応するデータは、ホストシステム４からＬＰＮの順番で供給される。従って、ホストシステム４から最初に供給される１論理ページ分のデータ（ＬＰＮ＃８の論理ページに対応するデータ）はＢＰＮ＃３のバッファページに、２番目に供給される１論理ページ分のデータ（ＬＰＮ＃９の論理ページに対応するデータ）はＢＰＮ＃５のバッファページに、３番目に供給される１論理ページ分のデータ（ＬＰＮ＃１０の論理ページに対応するデータ）はＢＰＮ＃４のバッファページに、４番目に供給される１論理ページ分のデータ（ＬＰＮ＃１１の論理ページに対応するデータ）はＢＰＮ＃７のバッファページに格納されるように格納先管理テーブルの設定が行われる。つまり、図１１（ａ）に示したように、＃４のエントリーにＢＰＮとして＃３が設定され、＃５のエントリーにＢＰＮとして＃５が設定され、＃６のエントリーにＢＰＮとして＃４が設定され、＃７のエントリーにＢＰＮとして＃７が設定される。このようにエントリーに格納先のバッファページを示すＢＰＮを設定するときには、ポインタにより指定されているエントリーから順番にＢＰＮの設定が行われる。従って、図１１（ａ）に示したように、ポインタにエントリーを指定する番号として＃４が設定される場合には、＃４のエントリーからＢＰＮの設定が行われる。尚、ポインタに設定されている番号は、１論理ページ分のデータがバッファページに格納される毎に次の番号に進められる。
【００５７】
本実施形態のメモリコントローラ３は、ホストシステム４から供給されるデータをバッファ９に格納する処理と、バッファ９に格納されているデータをフラッシュメモリ２に書き込む処理とを並行して実行する。つまり、バッファ９へのデータ入力（ホストシステム４から供給されるデータのデータ入力）とバッファ９からのデータ出力（フラッシュメモリ２に供給するデータのデータ出力）とが時分割で実行される。ここでは、空きバッファページであったＢＰＮ＃４のバッファページとＢＰＮ＃７のバッファページにホストシステム４から供給されるデータ格納されるため、新たに２個の空きバッファページを確保しなければならない。そこで、優先順位が最下位のバッファページ（書き込み用のバッファページ）と下位側から２番目のバッファページ（書き込み用のバッファページ）に格納されているデータをフラッシュメモリ２に書き込む処理が実行される。
【００５８】
優先順位が最下位のバッファページがＢＰＮ＃６のバッファページで、下位側から２番目のバッファページがＢＰＮ＃９のバッファページであった場合には、ＢＰＮ＃６のバッファページとＢＰＮ＃９のバッファページを空きバッファページにするために、ＢＰＮ＃６のバッファページとＢＰＮ＃９のバッファページに格納されているデータをフラッシュメモリ２に書き込む処理が実行される。尚、バッファページに、そのバッファページに対応する論理ページ内の全ての論理セクタ領域に対応するデータが格納されている場合には、バッファページに格納されているデータが、そのままフラッシュメモリ２に書き込まれる。一方、論理ページ内の一部の論理セクタ領域に対応するデータが、そのバッファページに格納されていないときには、その一部の論理セクタ領域に対応するデータがフラッシュメモリ２から読み出され、読み出されたデータにより、そのバッファページに格納されていないデータが補充される。但し、その一部の論理セクタ領域に対応するデータがフラッシュメモリ２にも格納されていない場合には、バッファページに格納されていないデータの補充は行われない。このように一部の論理セクタ領域に対応するデータが、フラッシュメモリ２から読み出されたデータにより補充される場合には、補充が行われた後にバッファページに格納されているデータが、フラッシュメモリ２に書き込まれる。
【００５９】
本実施形態のメモリコントローラ３は、書き込み処理の際に、フラッシュメモリ２に供給するデータの格納元のバッファページを管理するために、格納元管理テーブルを備えている。図１１（ｂ）は、この格納元管理テーブルの一例であり、格納元のバッファページを示すＢＰＮを設定するための１６個のエントリーを備えている。これらのエントリーに格納元のバッファページを示すＢＰＮが順次設定され、ポインタによって指定されているエントリーに設定されているＢＰＮに基づいて、フラッシュメモリ２に供給されるデータの格納元のバッファページが選択される。
【００６０】
ＢＰＮ＃６のバッファページとＢＰＮ＃９のバッファページに格納されているデータをフラッシュメモリ２に書き込む処理を実行する場合には、図１１（ｂ）に示したように、＃１のエントリーにＢＰＮとして＃６が設定され、＃２のエントリーにＢＰＮとして＃９が設定される。格納元のバッファページを示すＢＰＮを設定するときにも、ポインタにより指定されているエントリーから順番にＢＰＮの設定が行われる。従って、図１１（ｂ）に示したように、ポインタにエントリーを指定する番号として＃１が設定される場合には、＃１のエントリーからＢＰＮの設定が行われる。尚、ポインタに設定されている番号は、１論理ページ分のデータがバッファページからフラッシュメモリ２に供給される毎に次の番号に進められる。
【００６１】
バッファ９に格納されているデータがフラッシュメモリ２に書き込まれ、ホストシステム４から供給されるデータがバッファ９に格納されることにより、いずれかのバッファページについて、論理ページとの対応関係が変化した場合には、バッファ管理テーブルの更新が行われる。ここでは、空きバッファページであったＢＰＮ＃４のバッファページとＢＰＮ＃７のバッファページが、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃１０の論理ページとＬＰＮ＃１１の論理ページに割り当てられる。また、ＢＰＮ＃６のバッファページとＢＰＮ＃９のバッファページが空きバッファページになる。従って、この変更に対応したバッファ管理テーブルの更新が行われる。
【００６２】
このバッファ管理テーブルの更新では、図１２に示したように、ＢＰＮ＃４のバッファページに対応する個所に書き込まれている空きバッファページを示す情報（ＮＡ）が、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃１０の論理ページ示す情報に変更される。ＢＰＮ＃７のバッファページに対応する個所に書き込まれている空きバッファページを示す情報（ＮＡ）が、ＬＢＮ＃１の論理ブロック内のＬＰＮ＃１１の論理ページ示す情報に変更される。ＢＰＮ＃６のバッファページ及びＢＰＮ＃９のバッファページに対応する個所は、空きバッファページを示す情報（ＮＡ）に変更される。
【００６３】
次に、それぞれ仮想ブロックを構成する物理ブロックを設定する方法について説明する。本実施形態では、まず、互いに異なるフラッシュメモリ２ａ〜２ｂに属するＰＢＡが同一の８個の物理ブロックで暫定的に仮想ブロックを構成する。つまり、フラッシュメモリ２ａ〜２ｂのいずれかに属するＰＢＡ＃０の物理ブロック８個でＶＢＮ＃０の仮想ブロックが構成され、ＰＢＡ＃１の物理ブロック８個でＶＢＮ＃１の仮想ブロックが構成され、以下同様にしてフラッシュメモリ２ａ〜２ｂ内の先頭から末尾までの物理ブロックで仮想ブロックが構成される。以下、このようにして構成された暫定的な仮想ブロックを「暫定仮想ブロック」と言う。
【００６４】
このようにして構成された暫定仮想ブロックについて、それぞれの暫定仮想ブロックを構成する８個の物理ブロックの中に不良ブロックが含まれているか否かが判断され、８個の物理ブロックの中に１個以上の不良ブロックが含まれている暫定仮想ブロックが抽出される。この抽出処理で抽出されなかった暫定仮想ブロックについては、実際に使用可能な仮想ブロックとして確定される。ここで確定された仮想ブロックについては、ＰＢＡが同一の８個の物理ブロックで構成されている。
【００６５】
上記の抽出処理で抽出された暫定仮想ブロックについては、それぞれの暫定仮想ブロックを構成する８個の物理ブロックの中に少なくとも１個の不良ブロックが含まれている。これらの暫定仮想ブロックのうち、一部の暫定仮想ブロックを実際に使用可能な仮想ブロックにするため、暫定仮想ブロック間で不良ブロックと良品ブロックとを交換する暫定仮想ブロックの組み換えが行われる。この暫定仮想ブロックの組み換えを、図１３を参照して説明する。図１３は、上記の抽出処理で抽出された暫定仮想ブロックを示しており、不良ブロックに該当する物理ブロックのＰＢＮは鉤括弧（「」）で括られている。この例では、ＶＢＮ＃７の暫定仮想ブロックに属するフラッシュメモリ２ｃ内のＰＢＡ＃７の物理ブロック、ＶＢＮ＃１５の暫定仮想ブロックに属するフラッシュメモリ２ｆ内のＰＢＡ＃１５の物理ブロック、ＶＢＮ＃１０１の暫定仮想ブロックに属するフラッシュメモリ２ｂ内のＰＢＡ＃１０１の物理ブロック等が不良ブロックとして示されている。
【００６６】
本実施形態では、ＶＢＮが小さい暫定仮想ブロックに属する不良ブロックから優先的に良品ブロックと交換される。一方、この不良ブロックと良品ブロックとの交換で、良品ブロックを提供する側になる暫定仮想ブロックは、ＶＢＮが大きい側の暫定仮想ブロックが優先的に選択される。また、この不良ブロックと良品ブロックとの交換は、同一のフラッシュメモリチップ内で行われる。つまり、ラッシュメモリ２ａ内の不良ブロックはラッシュメモリ２ａ内の良品ブロックと交換され、ラッシュメモリ２ｂ内の不良ブロックはラッシュメモリ２ｂ内の良品ブロックと交換され、以下同様にして、ラッシュメモリ２ｈ内の不良ブロックはラッシュメモリ２ｈ内の良品ブロックと交換される。
【００６７】
図１３に示した例では、ＶＢＮ＃７の暫定仮想ブロックに属するフラッシュメモリ２ｃ内のＰＢＡ＃７の物理ブロック（不良ブロック）が、ＶＢＮ＃１０１６の暫定仮想ブロックに属するフラッシュメモリ２ｃ内のＰＢＡ＃１０１６の物理ブロック（良品ブロック）と交換される。この交換により、ＶＢＮ＃７の暫定仮想ブロックが実際に使用可能な仮想ブロックになる。次に、ＶＢＮ＃１５の暫定仮想ブロックに属するフラッシュメモリ２ｆ内のＰＢＡ＃１５の物理ブロック（不良ブロック）が、ＶＢＮ＃１０１６の暫定仮想ブロックに属するフラッシュメモリ２ｆ内のＰＢＡ＃１０１６の物理ブロック（良品ブロック）と交換される。この交換により、ＶＢＮ＃１５の暫定仮想ブロックが実際に使用可能な仮想ブロックになる。この不良ブロックと良品ブロックとの交換は、交換を行っても暫定仮想ブロックを実際に使用可能な仮想ブロックにすることができなくなるまで続けられる。そして、この不良ブロックと良品ブロックとの交換により、良品ブロックの提供を受けた暫定仮想ブロック（その暫定仮想ブロックに属していた不良ブロックが他の暫定仮想ブロックに属していた不良ブロックと交換されることにより、実際に使用することができるようになった暫定仮想ブロック）が、実際に使用可能な仮想ブロックとして確定される。
【００６８】
実際に使用可能な仮想ブロックとして確定されなかった暫定仮想ブロックについては、使用しない仮想ブロック（以下、「保留仮想ブロック」と言う）として管理される。この保留仮想ブロックは、図１４に示したような保留仮想ブロック管理テーブルで管理（登録）されている。この保留仮想ブロック管理テーブルには、保留仮想ブロックとして管理される仮想ブロックのＶＢＮを示す情報と、それぞれの保留仮想ブロックに属する良品ブロックのＰＢＡを示す情報が記載されている。図１４に示した保留仮想ブロック管理テーブルには、＃６９０、＃７４０、＃７７３、＃８６２、＃９００、＃９９７及び＃７７３の番号を示す情報が、保留仮想ブロックのＶＢＮを示す情報として記載されている。従って、この保留仮想ブロック管理テーブルを参照することにより、ＶＢＮ＃６９０、＃７４０、＃７７３、＃８６２、＃９００、＃９９７及び＃７７３の仮想ブロックが保留仮想ブロックであることが分かる。また、それぞれの保留仮想ブロックに属する良品ブロックのＰＢＡを示す情報が、その良品ブロックが属する保留仮想ブロックに関連付けて記載されている。尚、それぞれの保留仮想ブロックに属する不良ブロック（その保留仮想ブロックに初めから属していた不良ブロックと、不良ブロックと良品ブロックとの交換により、その保留仮想ブロックに属するようになった不良ブロックを含む）については、不良ブロックであることを示す情報（ＤＢ）が記載される。
【００６９】
また、保留仮想ブロック管理テーブルに登録されている保留仮想ブロックに属する良品ブロックの個数をフラッシュメモリチップ毎（フラッシュメモリ２ａ〜２ｈについて）に集計した集計値がメモリコントローラ３によって保持される。例えば、図１４に示したような７個の保留仮想ブロックが保留仮想ブロック管理テーブルに登録されているときに、良品ブロックの個数をフラッシュメモリチップ毎に集計した場合について説明する。
【００７０】
フラッシュメモリ２ａについては、ＶＢＮ＃６９０、＃７４０及び＃７７３の保留仮想ブロックに属する物理ブロックが良品ブロックなので、フラッシュメモリ２ａに関する良品ブロックの集計値は３個になる。フラッシュメモリ２ｂについては、ＶＢＮ＃６９０、＃７４０及び＃７７３及び＃９００の保留仮想ブロックに属する物理ブロックが良品ブロックなので、フラッシュメモリ２ｂに関する良品ブロックの集計値は４個になる。以下同様に、フラッシュメモリ２ｃに関する良品ブロックの集計値は４個になり、フラッシュメモリ２ｄに関する良品ブロックの集計値は５個になり、フラッシュメモリ２ｅに関する良品ブロックの集計値は０個になり、フラッシュメモリ２ｆに関する良品ブロックの集計値は２個になり、フラッシュメモリ２ｇに関する良品ブロックの集計値は４個になり、フラッシュメモリ２ｈに関する良品ブロックの集計値は３個になる。ここで、フラッシュメモリチップ毎の良品ブロックの集計値の最小値が０個でなければ、保留仮想ブロック間で不良ブロックと良品ブロックとの交換を行うことにより、実際に使用可能な仮想ブロックを再構成することができる。
【００７１】
また、使用されていた仮想ブロックに属するいずれかの物理ブロックが不良ブロックになった場合には、その仮想ブロックが保留仮想ブロックとして、保留仮想ブロック管理テーブルに追加登録される。保留仮想ブロック管理テーブルに保留仮想ブロックが追加登録されたときには、フラッシュメモリチップ毎の良品ブロックの集計値が更新される。この更新の結果、フラッシュメモリチップ毎の良品ブロックの集計値の最小値が１個以上になった場合、この例では、フラッシュメモリ２ｅに関する良品ブロックの集計値が１個以上になった場合、保留仮想ブロック間で不良ブロックと良品ブロックとの交換を行うことにより、実際に使用可能な仮想ブロックを再構成することができる。
【００７２】
保留仮想ブロック間で不良ブロックと良品ブロックとの交換を行うことにより、実際に使用可能な仮想ブロックを再構成した場合には、その再構成された仮想ブロックの登録（保留仮想ブロック管理テーブルへの登録）が取消される。この登録の取消では、登録が取消された仮想ブロックに関する情報が、保留仮想ブロック管理テーブルから削除される。
【００７３】
尚、仮想ブロックの再構成は、保留仮想ブロック管理テーブルに登録されている保留仮想ブロックに関するフラッシュメモリチップ毎の良品ブロックの集計値のうち、一番小さい集計値が１個以上になったときに、逐次行っても良いが、その集計値に対して閾値を設定し、その集計値が閾値以上になったときに仮想ブロックの再構成を行うようにしてもよい。
【００７４】
ここで、保留仮想ブロック管理テーブルに登録されている保留仮想ブロックに関するフラッシュメモリチップ毎の良品ブロックの集計値のうち、一番小さい集計値が閾値以上になったときには、それぞれのフラッシュメモリチップ毎の良品ブロックの集計値は、いずれも閾値以上になる。従って、フラッシュメモリ２ａの集計値、フラッシュメモリ２ｂの集計値、フラッシュメモリ２ｃの集計値、フラッシュメモリ２ｄの集計値、フラッシュメモリ２ｅの集計値、フラッシュメモリ２ｆの集計値、フラッシュメモリ２ｇの集計値及びフラッシュメモリ２ｈの集計値のうちで一番小さい集計値が閾値以上になったか否かを判断することと、これの集計値が全て閾値以上になったか否かを判断することは、実質的に同じことを判断しているこことになる。例えば、閾値が“５”であり、フラッシュメモリ２ｅの集計値が一番小さい場合に、フラッシュメモリ２ｅの集計値が５以上になったときには、他の集計値はフラッシュメモリ２ｅの集計値以上なので、当然、他の集計値も５以上になっている。
【００７５】
例えば、閾値を“５”とした場合の実際の処理では、メモリコントローラ３は、フラッシュメモリ２ａの集計値からフラッシュメモリ２ｈの集計値までの８個の集計値から一番小さい集計値を見つけ、その集計値が閾値である“５”
以上であるか否かを判断して仮想ブロックの再構成を実行するか否かを決定してもよいが、フラッシュメモリ２ａの集計値からフラッシュメモリ２ｈの集計値までの８個の集計値を、閾値である“５”と順次比較していき、８個の集計値が全て５以上であったときに仮想ブロックの再構成を実行してもよい。
【００７６】
次に、バッファ９の構成について詳細に説明する。本実施形態では、論理ページの容量を仮想ページに含まれるユーザー領域と同じ容量とし、論理ページ単位でバッファ９に格納されるデータを管理している。つまり、本実施形態では、１個の仮想ページに含まれるユーザー領域の容量が６４セクタであるため、バッファ９が６４セクタの領域が含まれるバッファページに分割され、それぞれのバッファページに格納されるデータに対応する論理ページが管理されている。
【００７７】
図１５は、１個のバッファページに含まれる６４セクタの領域を示している。この６４セクタの領域には、論理ページに含まれるＳＮ＃０〜＃６３の論理セクタ領域が、ＳＮの順番で割り当てられている。つまり、バッファページ内の先頭領域から末尾領域に向かって、ＳＮ＃０〜＃６３の論理セクタ領域が、ＳＮの順番で割り当てられている。尚、それぞれ論理ページは、ホストシステム４側で管理されているアドレス空間のＬＢＡが連続する６４セクタの領域が対応している。従って、ＬＢＡ＃ｎ〜＃（ｎ＋６３）が対応している論理ページの場合、この論理ページ内のＳＮ＃０の論理セクタ領域はＬＢＡ＃ｎに対応し、ＳＮ＃１の論理セクタ領域はＬＢＡ＃（ｎ＋１）に対応し、以下同様にＳＮ＃６３の論理セクタ領域はＬＢＡ＃（ｎ＋６３）に対応する。
【００７８】
図１６は、ＢＰＮ＃０〜＃１５のバッファページに格納されているデータを示している。メモリコントローラ３は、論理ページが割り当てられたバッファページ内の領域にホストシステム４から与えられた書き込みデータ（ＷＤ）が格納されているか否かをセクタ単位で管理している。例えば、図１６に示したＢＰＮ＃０のバッファページの場合、ＳＮ＃０〜＃３の論理セクタ領域、ＳＮ＃１２〜＃１５の論理セクタ領域、ＳＮ＃４４〜＃４７の論理セクタ領域及びＳＮ＃６０〜＃６３の論理セクタ領域に対応するバッファページ内の領域には書き込みデータ（ＷＤ）が格納されていない。この書き込みデータ（ＷＤ）が格納されているか否かの管理については、例えば、それぞれのビットが６４セクタの領域のいずれかに対応する６４ビットの情報を保持し、それぞれのビットの論理値（“０”又は“１”）で書き込みデータ（ＷＤ）が格納されているか否かを示すようにすればよい。
【００７９】
また、フラッシュメモリ２に対するデータの書き込みが仮想ページ単位で行われるため、フラッシュメモリ２に格納されているデータの更新は、論理ページ単位で行われる。つまり、論理ページ単位で旧データが新データに置き換えられる。従って、バッファページからフラッシュメモリ２内の仮想ページへのデータの書き込みを行うときには、バッファページ内の書き込みデータ（ＷＤ）が格納されていない領域に、更新されないデータが補充される。そして、このデータ補充が完了した後に、バッファページから仮想ページへのデータの書き込みが実行される。
【００８０】
例えば、ＢＰＮ＃３のバッファページに格納されている書き込みデータ（ＷＤ）を仮想ページに書き込む場合について説明する。図１６に示した例では、ＢＰＮ＃３のバッファページ内のＳＮ＃０〜＃３の論理セクタ領域及びＳＮ＃６０〜＃６３の論理セクタ領域に対応する領域には書き込みデータ（ＷＤ）が格納されていない。従って、ＢＰＮ＃３のバッファページに割り当てられている論理ページに対応するデータがフラッシュメモリ２から読み出され、この読み出されたデータのうち、ＳＮ＃０〜＃３の論理セクタ領域に対応するデータ及びＳＮ＃６０〜＃６３の論理セクタ領域に対応する読み出しデータ（ＲＤ）が、それぞれの読み出しデータ（ＲＤ）に対応するバッファページ内の領域に格納される。そして、図１７に示したように、ＢＰＮ＃３のバッファページ内のＳＮ＃０〜＃３の論理セクタ領域及びＳＮ＃６０〜＃６３の論理セクタ領域に対応する領域に、読み出しデータ（ＲＤ）が格納された後に、ＢＰＮ＃３のバッファページに格納されている書き込みデータ（ＷＤ）及び読み出しデータ（ＲＤ）がフラッシュメモリ２に書き込まれる。
【００８１】
次に、図１８を参照して、バッファページ内の書き込みデータ（ＷＤ）が格納されていない領域に、更新されないデータを効率良く補充する方法について説明する。ホストシステム４から書き込みを指示するアクセス指示が与えられたときに、そのアクセス指示で指定されたアクセス対象の領域が属する論理ページが割り当てられているバッファページが無いとき（そのアクセス指示で指定されたアクセス対象のＬＢＡに対応する論理ページに割り当てられているバッファページが無いとき）、空きバッファページに対してその論理ページが新たに割り当てられる。ここでは、アクセス対象の領域が属する論理ページ（論理ページＡ）が、空きバッファページであるＢＰＮ＃４のバッファページに割り当てられる。
【００８２】
ホストシステム４から与えられる論理ページＡに対応する書き込みデータ（ＷＤ）は、図１８（ａ）に示したように、ＢＰＮ＃４のバッファページに格納される。この処理に並行して、フラッシュメモリ２に格納されている論理ページＡに対応するデータが読み出され、この読み出しデータ（ＲＤ）は、図１８（ｂ）に示したように、空きバッファページであるＢＰＮ＃７のバッファページに格納される。つまり、論理ページＡに対応する新データである書き込みデータ（ＷＤ）は、ＢＰＮ＃４のバッファページに格納され、論理ページＡに対応する旧データである読み出しデータ（ＲＤ）は、ＢＰＮ＃７のバッファページに格納される。
【００８３】
図１８（ａ）に示した例では、論理ページＡに対応する書き込みデータ（ＷＤ）は、ＳＮ＃１２〜＃４７の論理セクタ領域に対応する領域には格納されているが、ＳＮ＃０〜＃１１の論理セクタ領域及びＳＮ＃４８〜＃６３の論理セクタ領域に対応する領域には格納されていない。このため、ＳＮ＃０〜＃１１の論理セクタ領域及びＳＮ＃４８〜＃６３の論理セクタ領域に対応する領域には、論理ページＡに対応する旧データである読み出しデータ（ＲＤ）が格納される。この論理ページＡに対応する旧データである読み出しデータ（ＲＤ）は、ＢＰＮ＃７のバッファページに格納されているので、ＢＰＮ＃７のバッファページからＢＰＮ＃４のバッファページへのデータ転送により、ＳＮ＃０〜＃１１の論理セクタ領域及びＳＮ＃４８〜＃６３の論理セクタ領域に対応する領域に、論理ページＡに対応する旧データである読み出しデータ（ＲＤ）が格納される。つまり、このデータ転送では、図１８（ｃ）に示したように、ＢＰＮ＃７のバッファページのＳＮ＃０〜＃１１の論理セクタ領域及びＳＮ＃４８〜＃６３の論理セクタ領域に対応する領域に格納されている読み出しデータ（ＲＤ）が、ＢＰＮ＃４のバッファページのＳＮ＃０〜＃１１の論理セクタ領域及びＳＮ＃４８〜＃６３の論理セクタ領域に対応する領域に転送される。
【００８４】
尚、旧データである読み出しデータ（ＲＤ）のデータ転送については、アクセス指示で指定されるアクセス対象の領域が属する論理ページが変わった後に行うことが好ましい。つまり、論理ページＡに対応するデータの書き込みを指示するアクセス指示が与えられている間は、このデータ転送を行わずに、論理ページＡ以外の論理ページに対応するデータの書き込みを指示するアクセス指示が与えられた後に、このデータ転送を開始するようにすることが好ましい。また、上記の説明では、読み出しデータ（ＲＤ）の格納先のバッファページから、書き込みデータ（ＷＤ）の格納先のバッファページにデータ転送を行ったが、書き込みデータ（ＷＤ）の格納先のバッファページから、読み出しデータ（ＲＤ）の格納先のバッファページにデータ転送を行った方が、データ転送するデータの容量が小さい場合には、書き込みデータ（ＷＤ）の格納先のバッファページから、読み出しデータ（ＲＤ）の格納先のバッファページにデータ転送を行うようにしてもよい。例えば、図１８（ａ）に示した例で、ＢＰＮ＃４のバッファページに格納された書き込みデータ（ＷＤ）の容量が３２セクタ未満の場合には、ＢＰＮ＃４のバッファページからＢＰＮ＃７のバッファページにデータ転送（書き込みデータ（ＷＤ）を転送するデータ転送）を行うようにしてもよい。このようにＢＰＮ＃４のバッファページからＢＰＮ＃７のバッファページにデータ転送が行われた場合には、データ転送が完了した後に、論理ページＡをＢＰＮ＃７のバッファページに割り当てる割り当ての変更が行われる。
【００８５】
このように、書き込みデータ（ＷＤ）の格納先のバッファページと読み出しデータ（ＲＤ）の格納先のバッファページに同じ論理ページに対応するデータを格納する処理を並行して行い、その後、書き込みデータ（ＷＤ）の格納先のバッファページと読み出しデータ（ＲＤ）の格納先のバッファページとの間でデータ転送を行うことにより、バッファページ内の書き込みデータ（ＷＤ）が格納されていない領域に、更新されないデータを効率良く補充することができる。言い換えれば、このデータ転送により、旧データの１部が新データで置き換えられた更新データが効率良く作成される。更に、書き込みデータ（ＷＤ）の格納先のバッファページに格納されたデータのセクタ数（容量）をカウントし、そのセクタ数がバッファページに含まれる領域のセクタ数（容量）の１／２以上であるか否かを判断し、１／２以上である場合には、読み出しデータ（ＲＤ）の格納先のバッファページから書き込みデータ（ＷＤ）の格納先のバッファページへのデータ転送を行い、１／２未満である場合には、書き込みデータ（ＷＤ）の格納先のバッファページから読み出しデータ（ＲＤ）の格納先のバッファページへのデータ転送を行うことにより、更に効率が向上する。
【００８６】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。例えば、仮想ブロック管理テーブル、バッファ管理テーブル、格納先管理テーブル、格納元管理テーブル及び保留仮想ブロック管理テーブルの構成については、それぞれのテーブルで管理している情報を管理することができる範囲で適宜変更することができる。また、仮想ブロックを構成する物理ブロックの個数や、論理ページ内の論理セクタ領域と仮想ページを構成する物理ページ内のセクタ領域との対応関係は適宜設定することができる。また、保留仮想ブロック管理テーブルに登録されている保留仮想ブロックについて、仮想ブロックの再構成を実行するときの条件についても適宜設定することができる。
【図面の簡単な説明】
【００８７】
【図１】本発明の一実施形態によるフラッシュメモリシステムの概略構成を示すブロック図である。
【図２】８個のフラッシュメモリとバッファとの間のデータ入出力を説明するための図である。
【図３】仮想ブロック管理テーブルの構成例を示す図である。
【図４】アドレス変換テーブルの構成例を示す図である。
【図５】検索テーブルの構成例を示す図である。
【図６】仮想ページと物理ページとの対応関係を示す図である。
【図７】ページ情報テーブルの構成例を示す図である。
【図８】論理ページと論理セクタ領域を説明するための図である。
【図９】仮想ページを構成する物理ページ内のセクタ領域と論理ページ内の論理セクタ領域との対応関係を示す図である。
【図１０】バッファ及びバッファ管理テーブルの構成例を示す図である。
【図１１】格納先管理テーブルと格納元管理テーブルの構成例を示す図である。
【図１２】バッファ管理テーブルの更新を説明するための図である。
【図１３】暫定仮想ブロックの組み換えを説明するための図である。
【図１４】保留仮想ブロック管理テーブルの構成例を示す図である。
【図１５】バッファページを説明するための図である。
【図１６】バッファを説明するための図である。
【図１７】バッファページに格納されているデータを示す図である。
【図１８】バッファページ間のデータ転送を説明するための図である。
【符号の説明】
【００８８】
１…フラッシュメモリシステム、２…フラッシュメモリ、３…メモリコントローラ、６…マイクロプロセッサ
【図１】
2010092200.tif 000003
【図２】
2010092200.tif 000004
【図３】
2010092200.tif 000005
【図４】
2010092200.tif 000006
【図５】
2010092200.tif 000007
【図６】
2010092200.tif 000008
【図７】
2010092200.tif 000009
【図８】
2010092200.tif 000010
【図９】
2010092200.tif 000011
【図１０】
2010092200.tif 000012
【図１１】
2010092200.tif 000013
【図１２】
2010092200.tif 000014
【図１３】
2010092200.tif 000015
【図１４】
2010092200.tif 000016
【図１５】
2010092200.tif 000017
【図１６】
2010092200.tif 000018
【図１７】
2010092200.tif 000019
【図１８】
2010092200.tif 000020