以下、本発明の幾つかの実施の形態を、図面を参照しながら詳細に説明する。
<第1の実施形態>
図1は、本発明の第1の実施形態に係るフラッシュメモリシステム1を概略的に示すブロック図である。
図1に示すように、フラッシュメモリシステム1は、フラッシュメモリ2と、それを制御するメモリコントローラ3とで構成されている。
フラッシュメモリシステム1は、外部バス13を介してホストシステム4と接続されている。ホストシステム4は、ホストシステム4の全体の動作を制御するためのCPU(Central Processing Unit)、フラッシュメモリシステム1との情報の授受を担うコンパニオンチップ等から構成されている。ホストシステム4は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
メモリコントローラ3は、図1に示すように、マイクロプロセッサ6と、ホストインターフェースブロック7と、ワークエリア8と、バッファ9と、フラッシュメモリインターフェースブロック10と、ECC(Error Collection Code)ブロック11と、ROM(Read Only Memory)12とから構成される。メモリコントローラ3は、内部バス14を介してフラッシュメモリ2と接続されている。これら機能ブロックによって構成されるメモリコントローラ3は、一つの半導体チップ上に集積される。以下、各機能ブロックについて説明する。
ホストインターフェースブロック7は、ホストシステム4との間でデータ、アドレス情報、ステータス情報、外部コマンド等の授受を行なう。外部コマンドとは、ホストシステム4がフラッシュメモリシステム1に対して処理の実行を指示するためのコマンドである。ホストシステム4よりフラッシュメモリシステム1に供給されるデータ等は、ホストインターフェースブロック7を入口としてフラッシュメモリシステム1の内部(例えば、バッファ9)に取り込まれる。また、フラッシュメモリシステム1からホストシステム4に供給されるデータ等は、ホストインターフェースブロック7を出口としてホストシステム4に供給される。
ホストインターフェースブロック7は、コマンドレジスタR1、セクタ数レジスタR2及びLBAレジスタR3を備えている。コマンドレジスタR1、セクタ数レジスタR2及びLBAレジスタR3には、ホストシステム4から与えられる情報が書き込まれる。コマンドレジスタR1には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタR2にはアクセス対象領域のセクタ数が書き込まれる。LBAレジスタR3には、アクセス対象領域の先頭のLBA(Logical Block Address)(後述)が書き込まれる。
ワークエリア8は、フラッシュメモリ2の制御に必要なデータを一時的に格納する作業領域であり、複数のSRAM(Static Random Access Memory)セルによって構成されている。ワークエリア8には、例えば、論理ブロックと物理ブロックとの対応関係を示したアドレス変換テーブル(後述)等が記憶される。
バッファ9は、フラッシュメモリ2から読み出したデータを、ホストシステム4が受け取り可能な状態となるまで保持する。また、バッファ9は、フラッシュメモリ2に書き込むデータを、フラッシュメモリ2が書き込み可能な状態となるまで保持する。
フラッシュメモリインターフェースブロック10は、内部バス14を介して、フラッシュメモリ2との間でデータ、アドレス情報、ステータス情報、内部コマンド等の授受を行う。ここで、内部コマンドとは、メモリコントローラ3がフラッシュメモリ2に処理の実行を指示するためのコマンドであり、フラッシュメモリ2は、メモリコントローラ3から与えられる内部コマンドに従って動作する。
ECCブロック11は、フラッシュメモリ2に書き込むデータに付加される誤り訂正符号(ECC:Error Collection Code)を生成するとともに、読み出したデータに付加されている誤り訂正符号に基づいて、読み出したデータに含まれる誤りを検出・訂正する。
ROM12は、マイクロプロセッサ6による処理の手順を定義するプログラムを格納する不揮発性の記憶素子である。例えば、アドレス変換テーブルの作成等の処理手順を定義するプログラムが格納されている。
マイクロプロセッサ6は、ROM12に記憶されているプログラムに従って、メモリコントローラ3の全体の動作を制御する。例えば、マイクロプロセッサ6は、ROM12から読み出した各種処理を定義したコマンドセットに基づいてフラッシュメモリインターフェースブロック10に処理を実行させる。
フラッシュメモリ2はNAND型フラッシュメモリからなる。NAND型フラッシュメモリは、レジスタと、複数のメモリセルが2次元的に配列されたメモリセルアレイを備えている。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。ここで、メモリセル群は、複数のメモリセルが直列に接続されたものである。各ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、レジスタから選択されたメモリセルへのデータの書き込み又は選択されたメモリセルからレジスタへのデータの読み出しが行われる。
NAND型フラッシュメモリでは、データ読み出し動作及びデータ書き込み動作はページ(物理ページ)単位で行われ、データ消去動作はブロック(物理ブロック)単位で行われる。物理ブロックは、複数のページ(物理ページ)で構成される。例えば、1個の物理ページは、所定サイズ(例えば2048バイト)のユーザ領域と、所定サイズ(例えば64バイト)の冗長領域とで構成され、1個の物理ブロックが、所定個数(例えば64個)の物理ページで構成されている。ユーザ領域は、ホストシステム4から与えられるデータを記憶するための領域であり、所定個数(例えば4個)の物理セクタ領域(512バイト単位の記憶領域)で構成されている。冗長領域は、誤り訂正符号(ECC:Error Collection Code)、論理アドレス情報、ブロックステータス(フラグ)等の付加データを記憶するための領域である。
図2は、本実施形態で用いるNAND型フラッシュメモリの1個の物理ページに含まれる記憶領域を示している。
ユーザ領域25は、ホストシステム4から与えられるデータを記憶するための領域である。冗長領域26は、誤り訂正符号(ECC:Error Collection Code)、論理アドレス情報、ブロックステータス(フラグ)等の付加データを記憶するための領域である。
本実施形態では、図2に示すようにユーザ領域25は、1セクタ(例えば512バイト)の物理セクタ領域60(60a−60d)に分割して使用される。冗長領域26は、所定サイズ(例えば8バイト)の共通冗長領域50と、所定サイズ(例えば14バイト)の分割冗長領域70(70a−70d)に分割して使用される。各物理ブロックの先頭物理ページに対応した共通冗長領域50には、論理アドレス情報、ブロックステータス(フラグ)等の物理ブロック毎で管理される情報が書き込まれる。
4個の物理セクタ領域60a−60dと4個の分割冗長領域70a−70dは、1対1の対応関係が予め設定されている。本実施形態では、物理セクタ領域60aが分割冗長領域70aに、物理セクタ領域60bが分割冗長領域70bに、物理セクタ領域60cが分割冗長領域70cに、物理セクタ領域60dが分割冗長領域70dに、それぞれ対応している。分割冗長領域70a−70dには、対応関係にある物理セクタ領域60a−60dに記憶されるデータに付加される誤り訂正符号等の物理セクタ領域60(60a−60d)毎で管理される情報が書き込まれる。
このように、1個の物理ページがmセクタのユーザ領域で構成され、1個の物理ブロックがn個の物理ページで構成されているNAND型フラッシュメモリでは、1個の物理ブロックは、m×n個の物理セクタ領域(1セクタ単位の領域)で構成されているNAND型フラッシュメモリとして取り扱うこともできる。つまり、本実施形態で用いたNAND型フラッシュメモリの場合には、256個の物理セクタ領域(1セクタ単位の領域)で構成されているNAND型フラッシュメモリとして取り扱うことができる。以下の説明で、物理ブロック内の物理セクタ領域に付けた通し番号を物理セクタ番号(PSN)と言う。例えば、1個の物理ブロックが256個の物理セクタ領域で構成されている場合、各物理ブロック内の256個の物理セクタ領域には、PSNとして#0−#255が付与される。
論理アドレス情報は、物理ブロックと論理ブロックの対応関係を判別するための情報である。従って、記憶データが消去された物理ブロックのような、対応する論理ブロックの無い物理ブロックについては、その冗長領域26に(先頭物理ページに対応した共通冗長領域50に)、論理アドレス情報は格納されていない。
ブロックステータス(フラグ)は、物理ブロックの良否を示すフラグである。尚、初期不良の物理ブロックについては、不良ブロック(正常にデータの書き込み等を行うことができない物理ブロック)であることを示すブロックステータス(フラグ)が製造メーカによって書き込まれている。また、この初期不良の物理ブロックを示すブロックステータス(フラグ)を、ユーザ領域に書き込んでいる製造メーカもある。
ホストシステム4側のアドレス空間は、セクタ(512バイト)単位で分割した領域(以下、論理セクタ領域と言う)に付けた通番であるLBA(Logical Block Address)で管理されている。又、メモリコントローラ内で行われるアドレス管理では、複数個の論理セクタ領域で論理ブロックが形成され、この論理ブロックに対して、1個又は複数個の物理ブロックが割り当てられる。
本実施形態では、図3に示したようにLBAが連続する256個の論理セクタ領域をまとめたものを論理ブロックとし、この論理ブロックに通し番号を付している。以下、論理ブロックに付した通し番号を論理ブロック番号(LBN)と言う。例えば、LBA#0−#255の256個の論理セクタ領域は、LBN#0の論理ブロックに属し、LBA#256−#511の256個の論理セクタ領域はLBN#1の論理ブロックに属している。このように、LBA#0−#2047999の2048000個の論理セクタ領域は、LBN#0−#7999の8000個の論理ブロックのいずれかに属している。
更に、この論理ブロックを複数個まとめた論理グループが形成されている。以下、論理グループに付けられた通し番号を論理グループ番号(LGN)と言う。図3の例では、LBNが連続する論理ブロックを、異なる論理グループに順次振り分けるようにして論理グループを形成する。例えば、LBN#0の論理ブロックはLGN#0の論理グループに、LBN#1の論理ブロックはLGN#1の論理グループに、LBN#2の論理ブロックはLGN#2の論理グループにという順番でLGN#7の論理グループまで振り分けていく。以下同様に、LBN#8の論理ブロックをLGN#0の論理グループに、LBN#9の論理ブロックをLGN#1の論理グループに、LBN#10の論理ブロックをLGN#2の論理グループに振り分けていく。このようにして、1000個の論理ブロックからなる8個の論理グループが形成される。
この論理グループは単なるアドレス変換テーブルの作成単位であり、どの論理ブロックがどの物理ブロックに割り当てられても良い。
このアドレス変換テーブルは、論理ブロックと物理ブロックとの対応関係を記述したテーブルであり、全ての論理ブロックと物理ブロックとの対応関係を含むテーブルであってもよいが、本実施形態では、論理グループ単位でテーブルが作成される。このアドレス変換テーブルは、フラッシュメモリ2内に保存される。また、対応関係にある論理ブロック内の領域と物理ブロック内の領域を管理するために、論理セクタ領域と物理セクタ領域60の対応関係が後述する方法によって把握される(なお、後述の第2の実施形態では、論理ページ(後述)と物理ページの対応関係が把握される)。
尚、フラッシュメモリ内の物理ブロックには、出荷時から不良である先天性の不良ブロックが含まれている。更に、出荷時に良品の物理ブロックであっても、使用開始後に劣化して不良ブロックになる物理ブロック(後天性の不良ブロック)もある。従って、本実施形態では、8000個の論理ブロックに対し、8192個の物理ブロックを割り当てている。
第1の実施形態では、論理ブロックに含まれる256個の論理セクタ領域と物理ブロックに含まれる256個の物理セクタ領域60との対応関係をセクタ単位で管理している。1個の物理ページに4個の物理セクタ領域60が含まれている。第1の実施形態におけるNAND型フラッシュメモリは、各物理ページに対するデータの書き込みを物理セクタ領域60毎に分けて実行することのできるNAND型フラッシュメモリである。つまり、1個の物理ページに含まれる4個の物理セクタ領域60に対するデータの書き込みを4回に分けて実行することができる。
第1の実施形態の書き込み処理では、ホストシステム4によって、コマンドレジスタR1に、書き込みコマンドを示すコマンドコードが書き込まれ、セクタ数レジスタR2に、書き込むデータのセクタ数が書き込まれ、LBAレジスタR3には、書き込みを開始する先頭データに対応するLBAが書き込まれる。セクタ数レジスタR2及びLBAレジスタR3に書き込まれた情報に基づいて、アクセス対象の領域である論理アクセス領域が判別され、その論理アクセス領域が含まれる論理ブロックに対応する物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭から、ホストシステム4から与えられるデータが書き込まれる。
セクタ数レジスタR2及びLBAレジスタR3に書き込まれた情報に基づいて判別される論理アクセス領域が複数個の論理ブロックに跨っている場合は、データの書き込み先になる物理ブロックも複数個になる。従って、論理アクセス領域が複数個の論理ブロックに跨っている場合は、論理アクセス領域が属する論理ブロック毎に領域を分割してデータの書き込み処理が行われる。例えば、論理アクセス領域が2個の論理ブロック(第1の論理ブロックと第2の論理ブロック)に跨っている場合は、第1の論理ブロックに対応する物理ブロックに対する書き込み処理と、第2の論理ブロックに対応する物理ブロックに対する書き込み処理とが行われる。第1の論理ブロックに属する論理アクセス領域に対して書き込むことが指示されたデータについては、第1の論理ブロックに対応する物理ブロック内のデータが書き込まれていない物理セクタ領域60に書き込まれる。第2の論理ブロックに属する論理アクセス領域に対して書き込むことが指示されたデータについては、第2の論理ブロックに対応する物理ブロック内のデータが書き込まれていない物理セクタ領域60に書き込まれる。
以下の説明で、ホストシステム4から与えられる情報(つまり、コマンドレジスタR1、セクタ数レジスタR2及びLBAレジスタR3に書き込まれる情報)に基づいて実行される1セクタ又は複数セクタのデータの書き込み処理において、書き込まれるデータを、「一連のデータ」と言う。例えば、セクタ数レジスタR2に書き込まれた値がnの場合(nは1以上の整数)、nセクタ分のLBAが連続するデータが、一連のデータに対応する。尚、論理アクセス領域が複数個の論理ブロックに跨っている場合は、論理ブロック毎に一連のデータは分割される。例えば、論理アクセス領域が2個の論理ブロック(第1の論理ブロックと第2の論理ブロック)に跨っている場合に、第1の論理ブロックに属する論理アクセス領域のセクタ数がpセクタで、第2の論理ブロックに属する論理アクセス領域のセクタ数がqセクタであれば、セクタ数レジスタR2に書き込まれた値がn(n=p+q)であっても、一連のデータは、pセクタの一連のデータとqセクタの一連のデータとに分割される。
ホストシステム4は、書き込むデータのアドレス又は読み出すデータのアドレスをLBAで指示する。つまり、セクタ数レジスタR2及びLBAレジスタR3に書き込まれた情報に基づいて判別されるLBA(セクタ数レジスタR2に書き込まれた値が1の場合)、又は、LBAが連続する範囲(セクタ数レジスタR2に書き込まれた値が2以上の場合)が、書き込むデータの書き込み先を指示するアドレス又は読み出すデータの読み出し元を指示するアドレスになる。
ここで、1個の論理ブロックに含まれる論理セクタ領域の個数が2i個(例えば、i=8のときは256個)の場合、LBAの下位iビット(例えば、i=8のときは下位8ビット)が、論理ブロック内の論理セクタ領域に付けた通し番号に対応する。以下、論理ブロック内の論理セクタ領域に付けた通し番号を、「論理セクタ番号(LSN)」と言う。それに対し、物理ブロック内の物理セクタ領域60に付けた通し番号を、「物理セクタ番号(PSN)」と言う。又、LBAの下位iビット(例えば、i=8のときは下位8ビット)を除いた、LBAの上位側のビットが、前述したLBN(論理ブロック番号)に対応する。従って、セクタ数レジスタR2及びLBAレジスタR3に書き込まれた情報に基づいて判別される論理アクセス領域(LBAが連続する範囲)内の先頭の論理セクタ領域と末尾の論理セクタ領域のLBAのLBNに対応する部分のビットが示す値が同一であれば、論理アクセス領域は複数個の論理ブロックに跨っていない。
以下、本実施形態での書き込みの概要を説明する。
メモリコントローラ3は、ホストシステム4から与えられる書き込み指示(書き込みコマンド及び書き込み先のアドレス)に従って、この書き込み指示と共に与えられる一連のデータを、フラッシュメモリ2に書き込む。この書き込み処理では、書き込み先の論理セクタ領域が属する論理ブロックが特定され、その論理ブロックに対応する物理ブロック(又は、この論理ブロックに対して新たに割り当てた物理ブロック)に、一連のデータが書き込まれる。物理ブロック内の物理セクタ領域60には、先頭から順番に(つまりPSNが小さいほうから順番に)一連のデータが書き込まれていく。従って、メモリコントローラ3が一連のデータを書き込むときには、物理ブロック内のデータが書き込まれている物理セクタ領域の末尾の検索が行われる。そして、その末尾の物理セクタ領域60の次の物理セクタ領域60から一連のデータが順次書き込まれていく。言い換えれば、物理ブロック内のデータが書き込まれていない先頭の物理セクタ領域から一連のデータが順次書き込まれていく。
本実施形態では、一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に、論理セクタ領域と物理セクタ領域60の対応関係を示す情報(以下、「セクタ管理情報」と言う)、例えば、論理セクタ領域と物理セクタ領域60の対応関係を示すテーブルが書き込まれる。つまり、セクタ管理情報は、ホストシステム4から書き込み指示と共に与えられる一連のデータと同様に、ユーザ領域25(物理セクタ領域60)に書き込まれる。従って、物理ブロック内のデータが書き込まれている物理セクタ領域60の末尾を検索し、その物理セクタ領域60からセクタ管理情報を読み出すことにより、メモリコントローラ3は論理セクタ領域と物理セクタ領域60の対応関係を把握することができる。本実施形態におけるセクタ管理情報は、例えば、256個の論理セクタ領域の論理セクタ番号にそれぞれ対応する256個のレコードを有するテーブルである(例えば、後述の図5(A)参照)。
本実施形態では、一連のデータを書き込む際に、その一連のデータを書き込む物理ブロック内の物理セクタ領域60にセクタ管理情報を書き込むか否かを決定するために、一連のデータの先頭データに対応する論理セクタ領域(以下、「第1の論理セクタ領域」と言う)が、その一連のデータを書き込む物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域(以下、「第2の論理セクタ領域」と言う)に後続する領域であるか否かが判断される。この判断で、第1の論理セクタ領域が第2の論理セクタ領域に後続する領域であると判断された場合は、セクタ管理情報の書き込みが行われない。一方、第1の論理セクタ領域が第2の論理セクタ領域に後続する領域ではないと判断された場合は、セクタ管理情報の書き込みが行われる。つまり、第1の論理セクタ領域のLSNが第2の論理セクタ領域のLSNの次の番号であれば、セクタ管理情報の書き込みが行われない。一方、第1の論理セクタ領域のLSNが第2の論理セクタ領域のLSNの次の番号でなければ、セクタ管理情報の書き込みが行われる。尚、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報の場合には、上記の判断を行わず、セクタ管理情報の書き込みが行われる。
従って、セクタ管理情報を書き込まれていない物理ブロックの場合、その物理ブロック内の先頭の物理セクタ領域60からデータが書き込まれている末尾の物理セクタ領域60までの複数個の物理セクタ領域60に対して、先頭の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域以降の論理セクタ領域が、LSNの順番で割り当てられている(以下、このような状態を「LSNが連続する論理セクタ領域が割り当てられている状態」と言う)。
例えば、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60がPSN#63の物理セクタ領域60であり、物理ブロック内のPSN#0〜#63の物理セクタ領域60にLSN#8〜#71の論理セクタ領域に対応するデータがLSNの順番で書き込まれているような場合には、その物理ブロックにセクタ管理情報が書き込まれていない。
実際の書き込み処理では、一連のデータを書き込む際に次の2つの判断が行われる。
まず、書き込み先の物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータが、一連のデータとして書き込まれたデータであるか又はセクタ管理情報として書き込まれたデータであるかの判断が行われる。ここで、末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報である場合には、既に「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されていないため、次の判断は行われない。
次に、末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報でない場合には、末尾の物理セクタ領域60の次の物理セクタ領域60に書き込まれるデータ(今回の書き込み処理で書き込む一連のデータの先頭データ)に対応する論理セクタ領域のLSNが、末尾の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNの次の番号であるか否かの判断が行われる。末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報でない場合、既に書き込まれているデータについては、「LSNが連続する論理セクタ領域が割り当てられている状態」になっているので、今回の書き込み処理で一連のデータ書き込んだときに、その状態が維持できるか否かが問題になる。ここで、今回の書き込み処理で書き込む一連のデータの先頭データに対応する論理セクタ領域のLSNが、データが書き込まれている末尾の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNの次の番号であれば、この一連のデータを書き込んだ後も、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持される。従って、今回の書き込み処理で書き込む一連のデータの先頭データに対応する論理セクタ領域のLSNが、データが書き込まれている末尾の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNの次の番号であれば、セクタ管理情報の書き込みは行われない。
本実施の形態では、物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNを判別するために、図4に示したように一連のデータの先頭データを書き込んだ物理セクタ領域60に対応する分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSNを書き込むようにしている。従って、少なくとも物理ブロック内の先頭の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNについては、先頭の物理セクタ領域60に対応する分割冗長領域70に書き込まれている。
上記判断を行う際には、先頭の物理セクタ領域60に書き込まれているデータに対応する論理セクタ領域のLSNとデータが書き込まれている末尾の物理セクタ領域60のPSNに基づいて、データが書き込まれている末尾の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNが求められる。具体的には、例えば、先頭の物理セクタ領域60に書き込まれてデータに対応する論理セクタ領域のLSNの値に、データが書き込まれている末尾の物理セクタ領域のPSNの値を加えることにより、データが書き込まれている末尾の物理セクタ領域に記憶されているデータに対応する論理セクタ領域のLSNが求められる。尚、メモリコントローラ3が、一連のデータの末尾データを書き込んだ物理セクタ領域60に対応する分割冗長領域70に、その物理セクタ領域60に書き込まれたデータに対応する論理セクタ領域のLSNを書き込むようにしてもよい。
本実施形態では、書き込み処理が電源遮断等により書き込み途中で終了した場合を検知するため、一連のデータの末尾データが書き込まれた物理セクタ領域60に対応する分割冗長領域70に、書き込み処理が正常に終了したことを示す情報である終了マークが書き込まれる。但し、セクタ管理情報が書き込まれる場合には、セクタ管理情報が書き込まれた物理セクタ領域60に対応する分割冗長領域70、つまり、一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に対応した分割冗長領域70に、終了マークが書き込まれる。このようにすることにより、一連のデータの書き込みが終了した後、電源遮断等によりセクタ管理情報を書き込む前に書き込み処理が終了してしまったような場合に、メモリコントローラ3がセクタ管理情報を書き込まない場合に該当していると誤認することを回避することができる。
尚、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されていない場合、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータは、論理セクタ領域と物理セクタ領域60の対応関係に関する最新のセクタ管理情報でなければならない。従って、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されていない物理ブロックに対して一連のデータを書き込む際には、セクタ管理情報の更新が行われる。更新されたセクタ管理情報は、その一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に書き込まれる。このセクタ管理情報の更新では、書き込む一連のデータに対応する部分について、セクタ管理情報の内容が更新される。尚、本実施形態では、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報であるか否かを判別可能にするために、セクタ管理情報が書き込まれた物理セクタ領域60に対応する分割冗長領域70に、セクタ管理情報が書き込まれたことを意味するフラグ(以下、「管理フラグ」と言う)が書き込まれる。これにより、メモリコントローラ3は、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に対応した分割冗長領域70に、管理フラグが記憶されているか否かにより、その末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報であるか否かを判断することができる。
また、同一の物理ブロックに複数の一連のデータが連続的に書き込まれるような場合、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60からセクタ管理情報を読み出さずに、ワークエリア8に保持されているセクタ管理情報が、そのまま使用されるようにしてもよい。
ホストシステム4から書き込み指示と共に与えられるデータの容量が、書き込み先の物理ブロック(1個目の物理ブロック)内の空きセクタ領域の容量より大きい場合、メモリコントローラ3は、その物理ブロック内の最後尾の物理セクタ領域60の1セクタ前の物理セクタ領域60まで、ホストシステム4から与えられるデータを書き込み、最後尾の物理セクタ領域60には、その時点での論理セクタ領域と物理セクタ領域60の対応関係を示すセクタ管理情報を書き込む。残りのデータについては、新たに割り当てられた別の物理ブロック(2個目の物理ブロック)内の物理セクタ領域60に書き込まれる。つまり、1個目の物理ブロックの先頭の物理セクタ領域60から最後尾の物理セクタ領域60まで、論理ブロック内の各論理セクタ領域に対応するデータが全てLSNの順番で書き込まれる場合(先頭の論理セクタ領域に対応するデータからLSNの順番で書き込まれる場合)を除き、最後尾の物理セクタ領域60にはセクタ管理情報が書き込まれる。
尚、一連のデータを書き込む際に、1個目の物理ブロック内の空きセクタ領域が最後尾の物理セクタ領域60だけの場合、その最後尾の物理セクタ領域60には一連のデータが書き込まれず、2個目の物理ブロックの先頭の物理セクタ領域60から一連のデータの書き込みが開始される。
以下、図4及び図5を参照して、本実施形態での書き込み処理の具体例を説明する。なお、一連のデータは、前述したように、PSNが小さい方から順番に書き込まれる。以下の説明では、n番目(nは自然数)に書き込まれる一連のデータを「第nの一連のデータ」と言う。
まず、ホストシステム4から与えられる第1の書き込み指示に基づいて、論理アクセス領域として、LBA#16−#31の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#16−#31の論理セクタ領域)が特定される。また、この論理アクセス領域が属する論理ブロックと対応する物理ブロックが無いため、この論理ブロックに対して新たな物理ブロックが割り当てられる。この物理ブロックには未だデータが書き込まれていないため、物理ブロック内のデータが書き込まれていない先頭の物理セクタ領域60として、物理ブロック内の先頭の物理セクタ領域60(PSN#0の物理セクタ領域60)が特定される。この先頭の物理セクタ領域60(PSN#0の物理セクタ領域60)から、第1の書き込み指示に対応する第1の一連のデータの書き込み処理が開始される。この結果、LSN#16−#31の16個の論理セクタ領域に対応する第1の一連のデータが、PSN#0−#15の16個の物理セクタ領域60に書き込まれる。また、第1の一連のデータの先頭データが書き込まれた物理セクタ領域60(PSN#0の物理セクタ領域60)に対応した分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSN(LSN#16−#31の16個の論理セクタ領域のうちの先頭の論理セクタ領域のLSN)の値“#16”が書き込まれる(図4(A)参照)。
第1の一連のデータは、この物理ブロックに書き込まれる最初の一連のデータであるため、第1の一連のデータが書き込まれた段階では、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されている。このため、第1の一連のデータの末尾データが書き込まれた物理セクタ領域60(PSN#15の物理セクタ領域60)の次の物理セクタ領域60に、セクタ管理情報は書き込まれず、PSN#15の物理セクタ領域60に対応した分割冗長領域70に、終了マーク(EM(End Mark))が書き込まれる。
次に、ホストシステム4から与えられる第2の書き込み指示に基づいて、論理アクセス領域として、LBA#32−#47の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#32−#47の論理セクタ領域)が特定される。また、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60として、PSN#15の物理セクタ領域60が特定される。特定された末尾の物理セクタ領域60(PSN#15の物理セクタ領域60)の次の物理セクタ領域60(PSN#16の物理セクタ領域60)から、第2の書き込み指示に対応する第2の一連のデータの書き込みが開始される。この結果、LSN#32−#47の16個の論理セクタ領域に対応する第2の一連のデータが、PSN#16−#31の16個の物理セクタ領域60に書き込まれる。また、第2の一連のデータの先頭データが書き込まれている物理セクタ領域60(PSN#16の物理セクタ領域60)に対応した分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSN(LSN#32−#47の16個の論理セクタ領域のうちの先頭の論理セクタ領域のLSN)の値“#32”が書き込まれる(図4(A)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#15の物理セクタ領域60)に記憶されているデータがセクタ管理情報であるか否かが判断される。PSN#15の物理セクタ領域60に記憶されているデータはセクタ管理情報でないため、第1の論理セクタ領域(第2の一連のデータの先頭データに対応する論理セクタ領域)のLSNが、第2の論理セクタ領域(データが書き込まれている末尾の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域)のLSNの次の番号であるか否かが判断される。具体的には、先頭の物理セクタ領域60に対応した分割冗長領域70に書き込まれているLSNの値“#16”に、データが書き込まれている末尾の物理セクタ領域60のPPNの値“#15”を加えた値である“#31”が、第2の論理セクタ領域のLSN として求められる。一方、第1の論理セクタ領域のLSNは“#32”なので、第1の論理セクタ領域のLSNは第2の論理セクタ領域のLSNの次の番号であると判断される。このように第1の論理セクタ領域のLSNが第2の論理セクタ領域のLSNの次の番号である場合、一連のデータを書き込んだ後も、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持される。
この書き込み処理では、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されるため、第2の一連のデータの末尾データが書き込まれた物理セクタ領域60(PSN#31の物理セクタ領域60)の次の物理セクタ領域60にセクタ管理情報は書き込まれず、PSN#31の物理セクタ領域60に対応した分割冗長領域70に、終了マークが書き込まれる。
図4(A)に示すように、ホストシステム4から与えられる第3の書き込み指示と第4の書き込み指示にそれぞれ対応する第3の一連のデータと第4の一連のデータについても、第2の一連のデータと同様の書き込み処理が実行される。
次に、ホストシステム4から与えられる第5の書き込み指示に基づいて、論理アクセス領域として、LBA#0−#31の32個の論理セクタ領域(LBN#0の論理ブロック内のLSN#0−#31の論理セクタ領域)が特定される。また、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60として、PSN#95の物理セクタ領域60が特定される。特定された末尾の物理セクタ領域60(PSN#95の物理セクタ領域60)の次の物理セクタ領域60(PSN#96の物理セクタ領域60)から、第5の書き込み指示に対応する第5の一連のデータの書き込みが開始される。この結果、LSN#0−#31の32個の論理セクタ領域に対応する第5の一連のデータが、PSN#96−#127の32個の物理セクタ領域60に書き込まれる。また、第5の一連のデータの先頭データが書き込まれた物理セクタ領域60(PSN#96の物理セクタ領域60)に対応した分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSN(LSN#96−#127の32個の論理セクタ領域のうちの先頭の論理セクタ領域のLSN)の値“#96”が書き込まれる(図4(A)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#31の物理セクタ領域60)に記憶されているデータがセクタ管理情報であるか否かが判断される。PSN#31の物理セクタ領域60に記憶されているデータはセクタ管理情報でないため、第1の論理セクタ領域(第5の一連のデータの先頭データに対応する論理セクタ領域)のLSNが、第2の論理セクタ領域(データが書き込まれている末尾の物理セクタ領域60に記憶されているデータ対応する論理セクタ領域)のLSNの次の番号であるか否かが判断される。具体的には、先頭の物理セクタ領域60に対応した分割冗長領域70に書き込まれているLSNの値“#16”に、データが書き込まれている末尾の物理セクタ領域のPPNの値“#95”を加えた値である“#111”が、第2の論理セクタ領域のLSNとして求められる。一方、第1の論理セクタ領域のLSN
は“#0”なので、第1の論理セクタ領域のLSNは第2の論理セクタ領域のLSNの次の番号でないと判断される。このように第1の論理セクタ領域のLSNが第2の論理セクタ領域のLSNの次の番号でない場合、一連のデータを書き込んだ後は、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されない。
この書き込み処理では、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されないため、メモリコントローラ3は、第5の一連のデータの書き込みが終了したときに物理ブロックに記憶されている有効なデータに関する物理セクタ領域60と論理セクタ領域との対応関係を示すセクタ管理情報#0を作成する。ここでは、第5の一連のデータを書き込む前のデータが書き込まれている末尾の物理セクタ領域60(PSN#95の物理セクタ領域60)に記憶されているデータはセクタ管理情報でないため(PSN#95の物理セクタ領域60に対応した分割冗長領域70に管理フラグが書き込まれていないため)、新規にセクタ管理情報が作成される。具体的には、ワークエリア8上にLSN#0−255にそれぞれ対応する256個のレコードを有するテーブル作成領域が確保され、このテーブル作成領域の各レコードにPSNが書き込まれる。図5(A)に示したようなセクタ管理情報#0を作成する場合には、まず、第1〜4の一連のデータとしてPSN#0−#95の物理セクタ領域60に書き込まれたLSN#16−#111の論理セクタ領域に対応するデータに関するPSNの書き込みが行われる。つまり、LSN#16−#111に対応したレコードに、#0−#95の番号(PSNの値)が書き込まれる。次に、第5の一連のデータとしてPSN#96−#127の物理セクタ領域60に書き込まれるLSN#0−31の論理セクタ領域に対応するデータに関するPSNの書き込みが行われる。つまり、LSN#0−31に対応したレコードに#96−#127の番号(PSNの値)が書き込まれる。この際、LSN#16−31に対応したレコードには、#112−#127の番号(PSNの値)が上書きされ、有効なデータに関する物理セクタ領域60と論理セクタ領域との対応関係だけが残る。つまり、無効なデータに関する物理セクタ領域60と論理セクタ領域との対応関係は、有効なデータに関する物理セクタ領域60と論理セクタ領域との対応関係で上書きされる。これにより、図5(A)に示したようなセクタ管理情報#0の作成処理が完了する。
メモリコントローラ3は、作成したセクタ管理情報#0を、第5の一連のデータの末尾データが書き込まれた物理セクタ領域60(PSN#127の物理セクタ領域60)の次の物理セクタ領域60(PSN#128の物理セクタ領域60)に書き込む。また、セクタ管理情報#0が書き込まれた物理セクタ領域60(PSN#128の物理セクタ領域60)に対応した分割冗長領域70に、図示しない管理フラグと、前述した終了マークとが書き込まれる(図4(B)参照)。
尚、一度でもセクタ管理情報が書き込まれた物理ブロックについては、その物理ブロックに一連のデータが書き込まれる毎にセクタ管理情報が書き込まれる。なぜなら、一度でもセクタ管理情報が書き込まれた物理ブロックは、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されていないからである。
次に、ホストシステム4から与えられる第6の書き込み指示に基づいて、論理アクセス領域として、LBA#16−#31の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#16−#31の論理セクタ領域)が特定される。また、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60として、PSN#128の物理セクタ領域60が特定される。特定された末尾の物理セクタ領域60(PSN#128の物理セクタ領域60)の次の物理セクタ領域60(PSN#129の物理セクタ領域60)から、第6の書き込み指示に対応する第6の一連のデータの書き込みが開始される。この結果、LSN#16−#31の16個の論理セクタ領域に対応する第6の一連のデータが、PSN#129−#144の16個の物理セクタ領域60に書き込まれる。また、第6の一連のデータの先頭データが書き込まれた物理セクタ領域60(PSN#129の物理セクタ領域60)に対応した分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSN(LSN#16−#31の16個の論理セクタ領域のうちの先頭の論理セクタ領域のLSN)の値“#31”が書き込まれる(図4(B)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#128の物理セクタ領域60)に記憶されているデータがセクタ管理情報であるか否かが判断される。PSN#128の物理セクタ領域60に対応した分割冗長領域70に管理フラグが書き込まれているため、PSN#128の物理セクタ領域60に記憶されているデータがセクタ管理情報であると判断される。この判断は、この時点で、「LSNが連続する論理セクタ領域が割り当てられている状態」が維持されていないことを意味する。
従って、第6の一連のデータの書き込みが終了したときの物理セクタ領域60と論理セクタ領域との対応関係を示すセクタ管理情報#1が作成される。このセクタ管理情報#1は、セクタ管理情報#0に基づいて作成される。つまり、この作成処理では、第6の一連のデータに対応する部分について、セクタ管理情報#0の内容が更新される。尚、ワークエリア8上にセクタ管理情報#0が保持されていない場合には、セクタ管理情報#1を作成するために、セクタ管理情報#0がPSN#128の物理セクタ領域60からワークエリア8に読み出される。
具体的には、図5(B)に示すように、セクタ管理情報#0における、LSN#16−#31に対応するレコードに、第6の一連のデータが書き込まれた16個の物理セクタ領域60に対応したPSNが書き込まれる。つまり、セクタ管理情報#1の作成処理では、セクタ管理情報#0のLSN#16−#31に対応するレコードに、#129−#144の番号(PSNの値)が上書きされる。作成されたセクタ管理情報#1は、第6の一連のデータの末尾データが書き込まれた物理セクタ領域60(PSN#144の物理セクタ領域60)の次の物理セクタ領域60(PSN#145の物理セクタ領域60)に書き込まれる。また、セクタ管理情報#1が書き込まれた物理セクタ領域60(PSN#145の物理セクタ領域60)に対応した分割冗長領域70に、図示しない管理フラグと前述した終了フラグとが書き込まれる。
以後、同様にして、ホストシステム4から与えられる第7及び第8の書き込み指示にそれぞれ対応する第7及び第8の一連のデータ並びにセクタ管理情報#2及び#3がそれぞれ同一の物理ブロックに書き込まれる。
すなわち、LBA#80−#95の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#80−#95の論理セクタ領域)に対応する第7の一連のデータが、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#145の物理セクタ領域60)の次の物理セクタ領域60(PSN#146の物理セクタ領域60)以降の16個の物理セクタ領域60(PSN#146−161の物理セクタ領域60)に書き込まれる(図4(B)参照)。また、第7の一連のデータの先頭データが書き込まれた物理セクタ領域60(PSN#146の物理セクタ領域60)に対応した分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSN(LSN#80−#95の16個の論理セクタ領域のうちの先頭の論理セクタ領域のLSN)の値“#80”が書き込まれる。また、第7の一連のデータが書き込まれる前のデータが書き込まれている末尾の物理セクタ領域60(PSN#145の物理セクタ領域60)に記憶されているセクタ管理情報#1に基づいて、セクタ管理情報#2が作成される。具体的には、図5(C)に示すように、セクタ管理情報#1における、LSN#80−#95に対応するレコードに、第7の一連のデータが書き込まれた16個の物理セクタ領域60に対応したPSNである#146−161が上書きされる。このようにして作成されたセクタ管理情報#2は、第7の一連のデータの末尾データが書き込まれた物理セクタ領域60(PSN#161の物理セクタ領域60)の次の物理セクタ領域60(PSN#162の物理セクタ領域60)に書き込まれる。また、セクタ管理情報#2が書き込まれた物理セクタ領域60(PSN#162の物理セクタ領域60)に対応した分割冗長領域70に、図示しない管理フラグと前述した終了フラグとが書き込まれる。
次に、LBA#96−#127の32個の論理セクタ領域(LBN#0の論理ブロック内のLSN#96−#127の論理セクタ領域)に対応した第8の一連のデータが、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#162の物理セクタ領域60)の次の物理セクタ領域60(PSN#163の物理セクタ領域60)以降の32個の物理セクタ領域60(PSN#163−194の物理セクタ領域60)に書き込まれる(図4(B)参照)。また、第8の一連のデータの先頭データが書き込まれた物理セクタ領域60(PSN#163の物理セクタ領域60)に対応した分割冗長領域70に、その先頭データに対応する論理セクタ領域のLSN(LSN#96−#127の32個の論理セクタ領域のうちの先頭の論理セクタ領域のLSN)の値“#96”が書き込まれる。また、第8の一連のデータが書き込まれる前のデータが書き込まれている末尾の物理セクタ領域60(PSN#162の物理セクタ領域60)に記憶されているセクタ管理情報#2に基づいて、セクタ管理情報#3が作成される。具体的には、図5(D)に示すように、セクタ管理情報#2における、LSN#96−#127に対応するレコードに、第8の一連のデータが書き込まれた32個の物理セクタ領域60に対応したPSNである#163−194が上書きされる。このようにして作成されたセクタ管理情報#3は、第8の一連のデータの末尾データが書き込まれた物理セクタ領域60(PSN#194の物理セクタ領域60)の次の物理セクタ領域60(PSN#195の物理セクタ領域60)に書き込まれる。また、セクタ管理情報#3が書き込まれた物理セクタ領域60(PSN#195の物理セクタ領域60)に対応した分割冗長領域70に、図示しない管理フラグと前述した終了フラグとが書き込まれる。
さて、この後、物理ブロックから各物理セクタ領域60に格納されているデータを読み出すときには、メモリコントローラ3は、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#195の物理セクタ領域60)からセクタ管理情報#3を読み出し、このセクタ管理情報#3に基づいて論理セクタ領域と物理セクタ領域60の対応関係を把握する。ここでは、PSN#195の物理セクタ領域60に書き込まれているセクタ管理情報#3が、論理セクタ領域と物理セクタ領域60の最新の対応関係を示しているため、メモリコントローラ3は、そのセクタ管理情報#5を参照するだけで、論理セクタ領域と物理セクタ領域60の最新の対応関係を把握することができる。つまり、本実施形態によれば、効率的に、論理セクタ領域と物理セクタ領域60の対応関係を把握することができる。
尚、第1の一連のデータが書き込まれてから第5の一連のデータが書き込まれる前までの間に(つまりセクタ管理情報が全く書き込まれていない場合に)、物理ブロックからデータを読み出すときには、メモリコントローラ3は、物理ブロック内の先頭の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域(LSN#16の論理セクタ領域)以降の論理セクタ領域に対応するデータがLSNの順番で、この物理ブロック内の物理セクタ領域60に書き込まれていると判断して、論理セクタ領域と物理セクタ領域60の対応関係を把握する。また、物理ブロック内の先頭の物理セクタ領域60に記憶されているデータに対応する論理セクタ領域のLSNについては、先頭の物理セクタ領域60に対応した分割冗長領域70に書き込まれているLSNにより把握される。
以上が、第一の実施形態の説明である。
なお、セクタ管理情報は、前述したような、論理セクタ領域と物理セクタ領域60の対応関係を示すテーブルであることが好ましいが、一変形例として、物理ブロックに書き込まれているそれぞれの一連のデータの先頭データに対応する論理セクタ領域の論理セクタ番号であるスタート論理セクタ番号(以下、「SLSN」と言う)と、その先頭データが書き込まれている物理セクタ領域60の物理セクタ番号であるスタート物理セクタ番号(以下、「SPSN」と言う)と、その一連のデータのセクタ数(以下、「SCNT」と言う)とを示す情報であってもよい。このような情報が書き込まれている場合には、この情報に基づいて、論理セクタ領域と物理セクタ領域60の対応関係を示すテーブルが作成される。
例えば、図6(A)〜(D)は、セクタ管理情報#0〜#3のそれぞれの変形例であるセクタ管理情報#0´〜#3´をそれぞれ示している。セクタ管理情報#0´〜#3´において、第nのSLSN、SPSN及びSCNTの組は、第nの一連のデータに対応する。尚、物理ブロック内の先頭の物理セクタ領域60からLSNの順番でデータが書き込まれている部分については、複数個の一連のデータに対応する部分が、1つの情報としてまとめられてもよい。例えば、第1乃至第4の一連のデータに対応する部分が、SLSNが#16、SPSNが#0、SCNTが96というような1つの情報にまとめられてもよい。
この変形例では、論理セクタ領域と物理セクタ領域60の最新の対応関係を示すテーブルは、最新のセクタ管理情報に基づいて作成される。この作成処理では、後から書き込まれた一連のデータに対応する論理セクタ領域と物理セクタ領域60の対応関係が優先されるようにして、LSN#0−#255の256個の論理セクタ番号に対応したレコードに物理セクタ番号(PSN)が書き込まれていく。つまり、各レコードに書き込まれる物理セクタ番号(PSN)については、後から書き込まれた一連のデータに対応する物理セクタ番号(PSN)の方が上書きされるようにすればよい。尚、論理セクタ領域と物理セクタ領域60の対応関係は、SLSN、SPSN及びSCNTの組に基づいて把握される。
例えば、セクタ管理情報#3´に基づいて、図5(D)に示したようなテーブルが作成される。このテーブル作成処理では、それぞれの一連のデータに対応する論理セクタ領域と物理セクタ領域60の対応関係に基づいて、各レコードに物理セクタ番号(PSN)が書き込まれていく。この物理セクタ番号(PSN)の書き込みは、先に書き込まれた一連のデータに対応する方から順番に行われ、書き込み先のレコードに既に物理セクタ番号(PSN)が書き込まれていても、後から物理セクタ番号(PSN)が上書きされる。従って、後から書き込まれた一連のデータに対応する論理セクタ領域と物理セクタ領域60の対応関係を優先したテーブルが作成される。
<第2の実施形態>
以下、本発明の第2の実施形態を説明する。その際、第1の実施形態との相違点を主に説明し、第1の実施形態との共通点については説明を省略或いは簡略する。
第2の実施形態では、論理ブロック内の論理セクタ領域を先頭から順番に1個の物理ページ60に含まれるユーザ領域25の容量と等しいセクタ数単位でまとめたものを論理ページとして取り扱い、ページ単位(1個の物理ページに含まれるユーザ領域25の容量と等しいセクタ数単位)で論理ブロックに含まれる論理ページと物理ブロックに含まれる物理ページとの対応関係を管理する。以下の説明で、各物理ブロック内の物理ページに付けた通し番号を物理ページ番号(PPN)と言う。又、各論理ブロック内の論理ページに付けた通し番号を論理ページ番号(LPN)と言う。尚、複数個の物理ブロックを集めたグループを構成し、このグループに対して1個の論理ブロックを割り当てるような場合には、複数個の物理ページに対して1個の論理ページを割り当てるようにしてもよい。この場合、論理ページの容量は、複数個の物理ページに含まれるユーザ領域25の容量と等しくなる。
本実施形態では、1個の物理ページが4セクタ(2048バイト)のユーザ領域25で構成され(1個の物理ページに4個の物理セクタ領域60含まれ)、1個の物理ブロックが64個の物理ページで構成されているNAND型フラッシュメモリを用いる。尚、図2に示したように、各物理ページに含まれる4個の物理セクタ領域60については、先頭から順番に(カラムアドレスが小さい方から順番に)、第1物理セクタ領域60a、第2物理セクタ領域60b、第3物理セクタ領域60c、第4物理セクタ領域60dと言う。ここで、PPN#0の物理ページに含まれる第1物理セクタ領域60aがPSN#0の物理セクタ領域に対応し、PPN#0の物理ページに含まれる第2物理セクタ領域60bがPSN#1の物理セクタ領域に対応し、PPN#0の物理ページに含まれる第3物理セクタ領域60cがPSN#2の物理セクタ領域に対応し、PPN#0の物理ページに含まれる第4物理セクタ領域60dがPSN#3の物理セクタ領域に対応する。PPN#1の物理ページに含まれる第1物理セクタ領域60a、第2物理セクタ領域60b、第3物理セクタ領域60c及び第4物理セクタ領域60dには、PSN#4−#7の物理セクタ領域がそれぞれ対応し、以下同様の対応関係で、PPN#63の物理ページに含まれる第1物理セクタ領域60a、第2物理セクタ領域60b、第3物理セクタ領域60c及び第4物理セクタ領域60dには、PSN#252−#255の物理セクタ領域がそれぞれ対応する。
また、各論理ページには4個の論理セクタ領域が含まれる。LPN#0の論理ページには、LSN#0−#3の論理セクタ領域が含まれ、LPN#1の論理ページには、LSN#4−#7の論理セクタ領域が含まれ、以下同様に順次割り当てられ、LPN#63の論理ページには、LSN#252−#255の論理セクタ領域が含まれる。各論理ページに含まれる4個の論理セクタ領域は、各物理ページに含まれる4個の物理セクタ領域(第1物理セクタ領域60a、第2物理セクタ領域60b、第3物理セクタ領域60c及び第4物理セクタ領域60d)に対して、LSNが小さい方から順番に割り当てられる。
第2の実施形態では、論理ページと物理ページとの対応関係は変化するが、物理ページ内の4個の物理セクタ領域60と論理ページ内の4個の論理セクタ領域の相対的な関係は変化しない。従って、第2の実施形態では、論理ページと物理ページとの対応関係を管理することにより、論理ブロックに含まれる256個の論理セクタ領域と物理ブロックに含まれる256個の物理セクタ領域60との対応関係を管理することができる。つまり、本実施形態のように、1個の物理ページに4個の物理セクタ領域60が含まれる場合であれば、PSNの下位2ビットとLSNの下位2ビットが常に一致するように物理セクタ領域60と論理セクタ領域との対応関係が定められている。即ち、下位2ビットが00のLSNに対応したデータは、第1物理セクタ60aに保存され、下位2ビットが01のLSNに対応したデータは第2物理セクタ60bに保存され、下位2ビットが10のLSNに対応したデータは第3物理セクタに保存され、下位2ビットが11のLSNに対応したデータは第4物理セクタに保存される。尚、論理ページ番号(LPN)は、8ビットのLSNの上位6ビットに対応し、物理ページ番号は8ビットのPSNの上位6ビットに対応する。
以下、本実施形態での書き込みの概要を説明する。
メモリコントローラ3は、ホストシステム4から与えられる書き込み指示(書き込みコマンド及び書き込み先のアドレス)に従って、この書き込み指示と共に与えられる一連のデータを、フラッシュメモリ2に書き込む。この書き込み処理では、書き込み先の論理ページが属する論理ブロックが特定され、その論理ブロックに対応する物理ブロック(又は、この論理ブロックに対して新たに割り当てた物理ブロック)に、一連のデータが書き込まれる。物理ブロック内の物理ページには、先頭から順番に(つまりPPNが小さいほうから順番に)一連のデータが書き込まれていく。従って、メモリコントローラ3が一連のデータを書き込むときには、物理ブロック内のデータが書き込まれている物理ページの末尾の検索が行われる。そして、その末尾の物理ページの次の物理ページから一連のデータが順次書き込まれていく。言い換えれば、物理ブロック内のデータが書き込まれていない先頭の物理ページから一連のデータが順次書き込まれていく。
本実施形態では、一連のデータの末尾データが書き込まれた物理ページの次の物理ページに、論理ページと物理ページの対応関係を示す情報(以下、「ページ管理情報」と言う)、例えば、論理ページと物理ページの対応関係を示すテーブルが書き込まれる。つまり、ページ管理情報は、ホストシステム4から書き込み指示と共に与えられる一連のデータと同様に、物理ページのユーザ領域25に書き込まれる。従って、物理ブロック内のデータが書き込まれている物理ページの末尾の検索し、その物理ページからページ管理情報を読み出すことにより、メモリコントローラ3は、論理ページと物理ページの対応関係を把握することができる。本実施形態におけるページ管理情報は、例えば、64個の論理ページの論理ページ番号にそれぞれ対応する64個のレコードを有するテーブルである(例えば、後述の図8(A)参照)。
本実施形態では、一連のデータを書き込む際に、その一連のデータを書き込む物理ブロック内の物理ページにページ管理情報を書き込むか否かを決定するために、一連のデータの先頭データに対応する論理ページ(以下、「第1の論理ページ」と言う)が、その一連のデータを書き込む物理ブロック内のデータが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページ(以下、「第2の論理ページ」と言う)に後続する領域であるか否かが判断される。この判断で、第1の論理ページが第2の論理ページに後続する領域であると判断された場合は、ページ管理情報の書き込みが行われない。一方、第1の論理ページが第2の論理ページに後続する領域ではないと判断された場合は、ページ管理情報の書き込みが行われる。つまり、第1の論理ページのLPNが第2の論理ページのLPNの次の番号であれば、ページ管理情報の書き込みは行われない。一方、第1の論理ページのLPNが第2の論理ページのLPNの次の番号でなければ、ページ管理情報の書き込みが行われる。尚、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータがページ管理情報の場合には、上記の判断を行わず、ページ管理情報の書き込みが行われる。
従って、ページ管理情報を書き込まれていない物理ブロックの場合、その物理ブロック内の先頭の物理ページからデータが書き込まれている末尾の物理ページまでの複数個の物理ページに対して、先頭の物理ページに記憶されているデータに対応する論理ページ以降の論理ページが、LPNの順番で割り当てられている(以下、このような状態を「LPNが連続する論理ページが割り当てられている状態」と言う)。
例えば、物理ブロック内のデータが書き込まれている末尾の物理ページがPPN#42の物理ページであり、物理ブロック内のPPN#0〜#42の物理ページにLPN#8〜#50の論理ページに対応するデータがLPNの順番で書き込まれているような場合には、その物理ブロックにページ管理情報が書き込まれていない。
実際の書き込み処理では、一連のデータを書き込む際に次の2つの判断が行われる。
まず、書き込み先の物理ブロック内のデータが書き込まれている末尾の物理ページに記憶されているデータが、一連のデータとして書き込まれたデータであるか又はページ管理情報として書き込まれたデータであるかの判断が行われる。ここで、末尾の物理ページに記憶されているデータがページ管理情報である場合には、既に「LPNが連続する論理ページが割り当てられている状態」が維持されていないため、次の判断は行われない。
次に、末尾の物理ページに記憶されているデータがページ管理情報でない場合には、末尾の物理ページの次の物理ページに書き込まれるデータ(今回の書き込み処理で書き込む一連のデータの先頭データ)に対応する論理ページのLPNが、末尾の物理ページに記憶されているデータに対応する論理ページのLPNの次の番号であるか否かの判断が行われる。末尾の物理ページに記憶されているデータがページ管理情報でない場合、既に書き込まれているデータについては、「LPNが連続する論理ページが割り当てられている状態」になっているので、今回の書き込み処理で一連のデータ書き込んだときに、その状態が維持できるか否かが問題になる。ここで、今回の書き込み処理で書き込む一連のデータの先頭データに対応する論理ページのLPNが、データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページのLPNの次の番号であれば、この一連のデータを書き込んだ後も、「LPNが連続する論理ページが割り当てられている状態」が維持される。従って、今回の書き込み処理で書き込む一連のデータの先頭データに対応する論理ページのLPNが、データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページのLPNの次の番号であれば、ページ管理情報の書き込みは行われない。
本実施の形態では、物理ページに記憶されているデータに対応する論理ページのLPNを判別するために、図7に示したように一連のデータの先頭データを書き込んだ物理ページに対応する共通冗長領域50に、その先頭データに対応する論理ページのLPNを書き込むようにしている。従って、少なくとも物理ブロック内の先頭の物理ページに記憶されているデータに対応する論理ページのLPNについては、先頭の物理ページに対応する共通冗長領域50に書き込まれている。
上記判断を行う際には、先頭の物理ページに書き込まれているデータに対応する論理ページのLPNとデータが書き込まれている末尾の物理ページのPPNに基づいて、データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページのLPNが求められる。具体的には、例えば、先頭の物理ページに書き込まれてデータに対応する論理ページのLPNの値に、データが書き込まれている末尾の物理ページのPPNの値を加えることにより、データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページのLPNが求められ。尚、メモリコントローラ3が一連のデータの末尾データを書き込んだ物理ページに対応する共通冗長領域50に、その物理ページに記憶されているデータに対応する論理ページのLPNを書き込むようにしてもよい。
本実施形態では、書き込み処理が電源遮断等により書き込み途中で終了した場合を検知するために、一連のデータの末尾データが書き込まれた物理ページに対応する共通冗長領域50に、書き込み処理が正常に終了したことを示す情報である終了マークが書き込まれる。但し、ページ管理情報が書き込まれる場合には、ページ管理情報が書き込まれた物理ページに対応する共通冗長領域50、つまり、一連のデータの末尾データが書き込まれた物理ページの次の物理ページに対応した共通冗長領域50に、終了マークが書き込まれる。このようにすることにより、一連のデータの書き込みが終了した後、電源遮断等によりページ管理情報を書き込む前に書き込み処理が終了してしまったような場合に、メモリコントローラ3がページ管理情報を書き込まない場合に該当していると誤認することを回避することができる。
尚、「LPNが連続する論理ページが割り当てられている状態」が維持されていない場合、物理ブロック内のデータが書き込まれている末尾の物理ページに記憶されているデータは、論理ページと物理ページの対応関係に関する最新のページ管理情報でなければならない。従って、「LPNが連続する論理ページが割り当てられている状態」が維持されていない物理ブロックに対して一連のデータを書き込む際には、ページ管理情報の更新が行われる。更新されたページ管理情報は、その一連のデータの末尾データが書き込まれた物理ページの次の物理ページに書き込まれる。このページ管理情報の更新では、書き込む一連のデータに対応する部分について、ページ管理情報の内容が更新される。尚、本実施形態では、物理ブロック内のデータが書き込まれている末尾の物理ページに記憶されているデータがページ管理情報であるか否かを判別可能にするために、ページ管理情報が書き込まれた物理ページに対応した共通冗長領域50に、ページ管理情報が書き込まれたことを意味するフラグ(以下、「管理フラグ」と言う)が書き込まれる。これにより、メモリコントローラ3は、物理ブロック内のデータが書き込まれている末尾の物理ページに対応した共通冗長領域50に、管理フラグが記憶されているか否かにより、その末尾の物理ページに記憶されているデータがページ管理情報であるか否かを判断することができる。
また、同一の物理ブロックに複数の一連のデータが連続的に書き込まれるような場合、物理ブロック内のデータが書き込まれている末尾の物理ページからページ管理情報を読み出さずに、ワークエリア8に保持されているページ管理情報が、そのまま使用されるようにしてもよい。
ホストシステム4から書き込み指示と共に与えられるデータの容量が、書き込み先の物理ブロック(1個目の物理ブロック)内の空きページの容量より大きい場合、メモリコントローラ3は、その物理ブロック内の最後尾の物理ページの1ページ前の物理ページまで、ホストシステム4から与えられるデータを書き込み、最後尾の物理ページには、その時点での論理ページと物理ページの対応関係を示すページ管理情報を書き込む。残りのデータについては、新たに割り当てられた別の物理ブロック(2個目の物理ブロック)内の物理ページに書き込まれる。つまり、1個目の物理ブロックの先頭の物理ページから最後尾の物理ページまで、論理ブロック内の各論理ページに対応するデータが全てLPNの順番で書き込まれる場合(先頭の論理ページに対応するデータからLPNの順番で書き込まれる場合)を除き、最後尾の物理ページにはページ管理情報が書き込まれる。
尚、一連のデータを書き込む際に、1個目の物理ブロック内の空きページが最後尾の物理ページだけの場合、その最後尾の物理ページには一連のデータが書き込まれず、2個目の物理ブロックの先頭の物理ページから一連のデータの書き込が開始される。
物理ブロックから各物理ページに格納されているデータを読み出すときに、メモリコントローラ3は、物理ブロック内のデータが書き込まれている末尾の物理ページからページ管理情報を読み出し、このページ管理情報に基づいて論理ページと物理ページの対応関係を把握する。
以下、図7乃至図9を参照して、本実施形態での書き込み処理の具体例を説明する。なお、一連のデータは、前述したように、PPNが小さい方から順番に書き込まれる。以下の説明では、n番目(nは自然数)に書き込まれる一連のデータを「第nの一連のデータ」と言う。また、アクセス対象の論理ページ(一連のデータの先頭データに対応する論理セクタ領域が属する論理ページから一連のデータの末尾データに対応する論理セクタ領域が属する論理ページまでの1個または複数個の論理ページ)を「論理アクセスページ」と言う。また、この具体例では、図7(A)に示すように、LBN#0の論理ブロックに対してPBA#7の物理ブロックが割り当てられる。
まず、ホストシステム4から与えられる第1の書き込み指示に基づいて、論理アクセスページとして、LBN#0の論理ブロック内のLPN#8−#15の8個の論理ページが特定される。また、LBN#0の論理ブロックに対応する物理ブロックが無いため、LBN#0の論理ブロックに対してPBA#7の物理ブロックが割り当てられる。この物理ブロックには未だデータが書き込まれていないため、物理ブロック内のデータが書き込まれていない先頭の物理ページとして、PBA#7の物理ブロック内の先頭の物理ページ(PPN#0の物理ページ)が特定される。この先頭の物理ページ(PPN#0の物理ページ)から、第1の書き込み指示に対応する第1の一連のデータの書き込み処理が開始される。この結果、LPN#8−#15の8個の論理ページに対応する第1の一連のデータが、PPN#0−#7の8個の物理ページに書き込まれる。また、第1の一連のデータの先頭データが書き込まれた物理ページ(PPN#0の物理ページ)に対応した共通冗長領域50に、その先頭データに対応する論理ページのLPN(LPN#8−#15の8個の論理ページのうちの先頭の論理ページのLPN)の値“#8”が書き込まれる(図7(A)参照)。
第1の一連のデータは、この物理ブロックに書き込まれる最初の一連のデータであるため、第1の一連のデータが書き込まれた段階では、「LPNが連続する論理ページが割り当てられている状態」が維持されている。このため、第1の一連のデータの末尾データが書き込まれた物理ページ(PPN#7の物理ページ)の次の物理ページにページ管理情報は書き込まれず、PPN#7の物理ページに対応する共通冗長領域50に、終了マーク(EM(End Mark))が書き込まれる。
次に、ホストシステム4から与えられる第2の書き込み指示に基づいて、論理アクセスページとして、LBN#0の論理ブロック内のLPN#16−#23の8個の論理ページが特定される。また、LBN#0の論理ブロックと対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#7の物理ページが特定される。特定された末尾の物理ページ(PPN#7の物理ページ)の次の物理ページ(PPN#8の物理ページ)から、第2の書き込み指示に対応する第2の一連のデータの書き込が開始される。この結果、LPN#16−#23の8個の論理ページに対応する第2の一連のデータが、PPN#8−#15の8個の物理ページに書き込まれる。また、第2の一連のデータの先頭データが書き込まれている物理ページ(PPN#8の物理ページ)に対応した共通冗長領域50に、その先頭データに対応する論理ページのLPN(LPN#16−#23の8個の論理ページのうちの先頭の論理ページのLPN)の値“#16”が書き込まれる(図7(A)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#7の物理ページ)に記憶されているデータがページ管理情報であるか否かが判断される。PPN#7の物理ページに記憶されているデータはページ管理情報でないため、第1の論理ページ(第2の一連のデータの先頭データに対応する論理ページ)のLPNが、第2の論理ページ(データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページ)のLPNの次の番号であるか否かが判断される。具体的には、先頭の物理ページに対応した共通冗長領域50に書き込まれているLPNの値“#8”に、データが書き込まれている末尾の物理ページのPPNの値“#7”を加えた値である“#15”が第2の論理ページのLPNとして求められる。一方、第1の論理ページのLPN
は“#16”なので、第1の論理ページのLPNは第2の論理ページのLPNの次の番号であると判断される。このように第1の論理ページのLPNが第2の論理ページのLPNの次の番号である場合、一連のデータを書き込んだ後も、「LPNが連続する論理ページが割り当てられている状態」が維持される。
この書き込み処理では、「LPNが連続する論理ページが割り当てられている状態」が維持されるため、第2の一連のデータの末尾データが書き込まれた物理ページ(PPN#15の物理ページ)の次の物理ページにページ管理情報は書き込まれず、PPN#15の物理ページに対応した共通冗長領域50に、終了マークが書き込まれる。
図7(A)に示すように、ホストシステム4から与えられる第3の書き込み指示と第4の書き込み指示にそれぞれ対応する第3の一連のデータと第4の一連のデータについても、第2の一連のデータと同様の書き込み処理が実行される。
次に、ホストシステム4から与えられる第5の書き込み指示に基づいて、論理アクセスページとして、LBN#0の論理ブロック内のLPN#0−#7の8個の論理ページが特定される。また、LBN#0の論理ブロックと対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#47の物理ページが特定される。特定された末尾の物理ページ(PPN#47の物理ページ)の次の物理ページ(PPN#48の物理ページ)から、第5の書き込み指示に対応する第5の一連のデータの書き込みが開始される。この結果、LPN#0−#7の8個の論理ページに対応する第5の一連のデータが、PPN#48−#55の8個の物理ページに書き込まれる。また、第5の一連のデータの先頭データが書き込まれた物理ページ(PPN#48の物理ページ)に対応した共通冗長領域50に、その先頭データに対応する論理ページのLPN(LPN#0−#7の8個の論理ページのうちの先頭の論理ページのLPN)の値“#0”が書き込まれる(図7(A)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#47の物理ページ)に記憶されているデータがページ管理情報であるか否かが判断される。PPN#47の物理ページに記憶されているデータはページ管理情報でないため、第1の論理ページ(第5の一連のデータの先頭データに対応する論理ページ)のLPNが、第2の論理ページ(データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページ)のLPNの次の番号であるか否かが判断される。具体的には、先頭の物理ページに対応した共通冗長領域50に書き込まれているLPNの値“#8”に、末尾の物理ページのPPNの値“#47”を加えた値である“#55”が第2の論理ページのLPNとして求められる。一方、第1の論理ページのLPN
は“#0なので、第1の論理ページのLPNは第2の論理ページのLPNの次の番号でないと判断される。このように第1の論理ページのLPNが第2の論理ページのLPNの次の番号でない場合、一連のデータを書き込んだ後は、「LPNが連続する論理ページが割り当てられている状態」が維持されない。
この書き込み処理では、「LPNが連続する論理ページが割り当てられている状態」が維持されないため、メモリコントローラ3は、第5の一連のデータの書き込みが終了したときに物理ブロックに記憶されている有効なデータに関する物理ページ(PPN#0−#55の物理ページ)と論理ページとの対応関係を示すページ管理情報#0を作成する。ここでは、第5の一連のデータを書き込む前のデータが書き込まれている末尾の物理ページ(PPN#47の物理ページ)に記憶されているデータはページ管理情報でないため(PPN#47の物理ページに対応した共通冗長領域50に管理フラグが書き込まれていないため)、新規にページ管理情報が作成される。具体的には、ワークエリア8上にLPN#0−#63にそれぞれ対応する64個のレコードを有するテーブル作成領域が確保され、このテーブル作成領域の各レコードにPPNが書き込まれる。図8(A)に示したようなページ管理情報#0を作成する場合には、まず、第1〜4の一連のデータとしてPPN#0−#47の物理ページに書き込まれたLPN#8−#55の論理ページに対応するデータに関するPPNの書き込みが行われる。つまり、LPN#8−#55に対応したレコードに、PPN#0−#47の番号(PPNの値)が書き込まれる。次に、第5の一連のデータとしてPPN#48−#54の物理ページに書き込まれるLPN#0−#7の論理ページに対応するデータに関するPPNの書き込みが行われる。つまり、LPN#0−#7に対応したレコードに、PPN#48−#54の番号(PPNの値)が書き込まれる。これにより、図8(A)に示したようなページ管理情報#0の作成処理が完了する。
メモリコントローラ3は、作成したページ管理情報#0を、第5の一連のデータの末尾データが書き込まれた物理ページ(PPN#55の物理ページ)の次の物理ページ(PPN#56の物理ページ)に書き込む。また、ページ管理情報#0が書き込まれた物理ページ(PPN#56の物理ページ)に対応した共通冗長領域50に、図示しない管理フラグと、前述した終了マークとが書き込まれる(図7(A)参照)。
尚、一度でもページ管理情報が書き込まれた物理ブロックについては、その物理ブロックに一連のデータが書き込まれる毎にページ管理情報が書き込まれる。なぜなら、一度でもページ管理情報が書き込まれた物理ブロックは、「LPNが連続する論理ページが割り当てられている状態」が維持されていないからである。
次に、ホストシステム4から与えられる第6の書き込み指示に基づいて、論理アクセスページとして、LBN#0の論理ブロック内のLPN#8−#15の8個の論理ページが特定される。また、LBN#0の論理ブロックに対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#56の物理ページが特定される。
しかし、PBA#7の物理ブロック内の空きページはPPN#57−#63の7個の物理ページだけなので、メモリコントローラ3は、ホストシステム4から与えられた第6の書き込み指示に基づく8個の論理ページに対応するデータを、全てPBA#7の物理ブロック内の空きページに書き込むことができない。
また、物理ブロック内のデータが書き込まれている末尾の物理ページ(PSN#56の物理ページ)に記憶されているデータはページ管理情報なので、既に、「LPNが連続する論理ページが割り当てられている状態」が維持されていない。従って、メモリコントローラ3は、物理ブロック内の最後尾の物理ページにページ管理情報を書き込まなければならない。
このため、第6の書き込み指示に基づく8個の論理ページに対応するデータは、6個の論理ページに対応するデータを含む第6の一連のデータと2個の論理ページに対応するデータを含む第7の一連のデータに分割される。
まず、第6の一連のデータの書き込み処理について説明する。第6の一連のデータは、PBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページ(PSN#56の物理ページ)の次の物理ページ(PSN#56の物理ページ)から、最後尾の物理ページ(PPN#63の物理ページ)の1ページ前の物理ページ(PPN#62の物理ページ)までの6個の物理ページに書き込まれる。PBA#7の物理ブロック内の最後尾の物理ページ(PPN#63の物理ページ)には、第6の一連のデータの書き込みが終了した時点での論理ページと物理ページの対応関係を示すページ管理情報#1が書き込まれる。また、ページ管理情報#1が書き込まれた最後尾の物理ページ(PPN#63の物理ページ)に対応した共通冗長領域50には、図示しない管理フラグと、前述した終了マークとが書き込まれる。
次に、第7の一連のデータの書き込み処理について説明する。図7(B)に示すように、LBN#0の論理ブロックに別の物理ブロック(PBA#16の物理ブロック)が新たに割り当てられ、そのPBA#16の物理ブロック内の先頭の物理ページ(PPN#0の物理ページ)から第7の一連のデータが書き込まれる。また、第7の一連のデータの末尾データが書き込まれた物理ページ(PPN#1の物理ページ)に対応した共通冗長領域50には、終了マークが書き込まれる。
この結果、ホストシステム4から与えられた8個の論理ページに対応するデータのうち、先頭から6個目までの論理ページに対応するデータは、PBA#7の物理ブロック内のPPN#57−#62の物理ページに第6の一連のデータとして書き込まれ(図7(A)参照)、残りの2個の論理ページに対応するデータは、PBA#16の物理ブロック内のPPN#0−#1の物理ページに第7の一連のデータとして書き込まれる(図7(B)参照)。
尚、メモリコントローラ3は、上述のようにPBA#7の物理ブロック内の空きページに、ホストシステム4から書き込み指示と共に与えられる全てのデータを書き込むことができない場合、その全てのデータを新たに割り当てたPBA#16の物理ブロックに書き込むようにしてもよい。
また、ホストシステム4から与えられる書き込み指示で指定される書き込み先の論理ページの個数が、書き込み先の物理ブロック内のデータが書き込まれていない物理ページの個数以上の場合、物理ブロック内の最後尾の物理ページにはホストシステム4から与えられるデータではなくページ管理情報が書き込まれる。最後尾の物理ページに記憶されているデータがページ管理情報でない場合、物理ブロックの先頭の物理ページから最後尾の物理ページまで、論理ブロック内の各論理ページに対応するデータが全てLPNの順番で書き込まれている(先頭の論理ページに対応するデータからLPNの順番で書き込まれている)と判断されるからである。
従って、物理ブロック内の最後尾の物理ページまでホストシステム4から与えられるデータ(一連のデータ)を書き込んでも、「LPNが連続する論理ページが割り当てられている状態」が維持される場合には、最後尾の物理ページにページ管理情報ではなくホストシステム4から与えられるデータ(一連のデータ)が書き込まれる。
また、1個の論理ブロックに2個の物理ブロックが割り当てられている場合、2個目の物理ブロックには、1個目の物理ブロックと2個目の物理ブロックを合わせたページ管理情報が保存されていることが好ましい。但し、2個目の物理ブロック内で、「LPNが連続する論理ページが割り当てられている状態」が維持されていれば、2個目の物理ブロックにページ管理情報が保存されていなくてもよい。2個目の物理ブロックにページ管理情報が保存されていない場合には、1個目の物理ブロックに関するページ管理情報に基づいて、1個目の物理ブロックと2個目の物理ブロックを合わせたページ管理情報が作成される。
前述したページ管理情報#1は、以下のようにして作成される。
すなわち、第6の一連のデータが書き込まれる前のデータが書き込まれている末尾の物理ページ(PPN#56の物理ページ)に、ページ管理情報#0が書き込まれているため(データが書き込まれている末尾の物理ページに対応した共通冗長領域50に管理フラグが書き込まれているため)、ワークエリア8にページ管理情報#0が保持されていない場合には、PPN#56の物理ページからページ管理情報#0が読み出される。ページ管理情報#1は、読み出されたページ管理情報#0に基づいて作成される。この作成処理では、図8(B)に示すように、ページ管理情報#0における、LPN#8−#13に対応するレコードに、第6の一連のデータが書き込まれる6個の物理ページ60に対応したPPN#57−#62が上書きされる。
なお、前述したように、PBA#16の物理ブロックには、2ページ分のデータである第7の一連のデータが書き込まれるが、このPBA#16の物理ブロックには、初めて一連のデータが書き込まれたため、第7の一連のデータの末尾データが書き込まれた物理ページ(PPN#1の物理ページ)の次の物理ページにページ管理情報を書込まないと判断し、PPN#1の物理ページに対応した共通冗長領域50に、終了マークを書込む。
次に、ホストシステム4から与えられる第7の書き込み指示に基づいて、論理アクセスページとして、LBN#0の論理ブロック内のLPN#16−#23の8個の論理ページが特定される。また、LBN#0の論理ブロックと対応するPBA#16の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#1の物理ページが特定される。特定された末尾の物理ページ(PPN#1の物理ページ)の次の物理ページ(PPN#2の物理ページ)から、第7の書き込み指示に対応する第8の一連のデータの書き込み処理が開始される。この結果、LPN#16−#23の8個の論理ページに対応する第8の一連のデータが、PPN#2−#9の8個の物理ページに書き込まれる。また、第8の一連のデータの先頭データが書き込まれた物理ページ(PPN#2の物理ページ)に対応した共通冗長領域50に、その先頭データに対応する論理ページのLPN(LPN#16−#23の8個の論理ページのうちの先頭の論理ページのLPN)の値“#16”が書き込まれる(図7(B)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#1の物理ページ)に記憶されているデータがページ管理情報であるか否かが判断される。PPN#1の物理ページに記憶されているデータはページ管理情報でないため、第1の論理ページ(第8の一連のデータの先頭データに対応する論理ページ)のLPNが、第2の論理ページ(データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページ)のLPNの次の番号であるか否かが判断される。ここで、第1の論理ページのLPNの値は“#16”であり、第2の論理ページのLPNの値は“#15”であるため、第1の論理ページのLPNは第2の論理ページのLPNの次の番号であると判断される。このため、第8の一連のデータの末尾データが書き込まれた物理ページ(PPN#9の物理ページ)の次の物理ページにページ管理情報は書き込まれず、PPN#9の物理ページに対応した共通冗長領域50に、終了マークが書き込まれる。
次に、ホストシステム4から与えられる第8の書き込み指示に基づいて、論理アクセスページとして、LBN#0の論理ブロック内のLPN#0−#7の8個の論理ページが特定される。また、LBN#0の論理ブロックと対応するPBA#16の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#9の物理ページが特定される。特定された末尾の物理ページ(PPN#9の物理ページ)の次の物理ページ(PPN#10の物理ページ)から、第8の書き込み指示に対応する第9の一連のデータの書き込みが開始される。ここでは、図7(B)に示したように、LPN#0−#7の8個の論理ページに対応する第9の一連のデータが、PPN#10−#17の8個の物理ページに書き込まれる。また、第9の一連のデータの先頭データが書き込まれている物理ページ(PPN#10の物理ページ)に対応した共通冗長領域50に、その先頭データに対応する論理ページのLPN(LPN#0−#7の8個の論理ページのうちの先頭の論理ページのLPN)の値“#0”が書き込まれる(図7(B)参照)。
この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#9の物理ページ)に記憶されているデータがページ管理情報であるか否かが判断される。PPN#9の物理ページに記憶されているデータはページ管理情報でないため、第1の論理ページ(第9の一連のデータの先頭データに対応する論理ページ)のLPNが、第2の論理ページ(データが書き込まれている末尾の物理ページに記憶されているデータに対応する論理ページ)のLPNの次の番号であるか否かが判断される。ここで、第1の論理ページのLPNの値は“#0”であり、第2の論理ページのLPNの値“は#23”であるため、第1の論理ページのLPNは第2の論理ページのLPNの次の番号ではないと判断される。
従って、第9の一連のデータの書き込み処理では、「LPNが連続する論理ページが割り当てられている状態」が維持されないため、メモリコントローラ3は、ページ管理情報#2を作成する。PBA#16の物理ブロックは、LBN#0の論理ブロックに対応する2個目の物理ブロックである。そのため、メモリコントローラ3は、1個目の物理ブロックの最後尾の物理ページに書き込まれているページ管理情報#1に基づいて、ページ管理情報#2を作成する。
第9の一連のデータを書き込む際に作成されるページ管理情報#2の作成処理を、図9を参照して説明する。ページ管理情報#2の基礎となるページ管理情報#1の各レコードに記載されているPPNは、1個目の物理ブロック内の物理ブロックに対応するPPNであるため、PPNが書き込まれている各レコードに、1個目の物理ブロックであることを示す情報である旧ブロックフラグ(図では、「旧ブロックF」と記載する)が書き込まれる。次に、第7及び8の一連のデータとしてPPN#0−#9の物理ページに書き込まれたLPN#14−#23の論理ページに対応するデータに関して、ページ管理情報#1の内容が更新される。つまり、LPN#14−#23に対応したレコードに、PPN#0−#9の番号(PPNの値)が上書きされ、番号(PPNの値)が上書きされたレコードに記載されている旧ブロックフラグは消去される。次に、第9の一連のデータとしてPPN#10−#17の物理ページに書き込まれるLPN#0−#7の論理ページに対応するデータに関して、ページ管理情報#1の内容が更新される。つまり、LPN#0−#7に対応したレコードに、PPN#10−#17の番号(PPNの値)が上書きされ、番号(PPNの値)が上書きされたレコードに記載されている旧ブロックフラグは消去される。
旧ブロックフラグは、各レコードに書き込まれているPPNが、1個目の物理ブロック(本具体例ではPBA#7の物理ブロック)内の物理ページのPPNであるか、又は2個目の物理ブロック(本具体例ではPBA#16の物理ブロック)内の物理ページのPPNであるかを判断するための情報である。つまり、旧ブロックフラグが書き込まれているレコードに書き込まれているPPNは、1個目の物理ブロック(本具体例ではPBA#7の物理ブロック)内の物理ページのPPNであると判断される。つまり、ページ管理情報#2を参照することで、LPN#0−#7及びLPN#14−#23の論理ページに対応するデータは、2個目の物理ブロック(本具体例ではPBA#16の物理ブロック)に書き込まれているが、他の論理ページに対応するデータは、2個目の物理ブロックに書き込まれていることがわかる。尚、以上のようにして作成されたページ管理情報#2は、第9の一連のデータの末尾データが書き込まれた物理ページ(2個目の物理ブロック内のPPN#17の物理ページ)の次の物理ページ(2個目の物理ブロック内のPPN#18の物理ページ)に書き込まれ、ページ管理情報#2が書き込まれた物理ページ(2個目の物理ブロック内のPPN#18の物理ページ)に対応した共通冗長領域50には、図示しない管理フラグと前述した終了マークが書き込まれる。
尚、本具体例において、PBA#7の物理ブロック(1個目の物理ブロック)とPBA#16の物理ブロック(2個目の物理ブロック)が同一の論理ブロック(LBN#0の論理ブロック)に対応することは、これらの物理ブロックに書き込まれている論理アドレス情報を参照することにより判断することができる。また、これらの物理ブロックの新旧関係を判断(1個目の物理ブロックか2個目の物理ブロックを判断)するために、メモリコントローラ3が、先頭物理ページに対応した共通冗長領域50に新旧関係を判断するためシリアル番号を書き込むようにすることが好ましい。また、新ブロック(2個目の物理ブロック)の先頭物理ページに対応した共通冗長領域50や、ページ管理情報が書き込まれた物理ページに対応した共通冗長領域50に、メモリコントローラ3が、旧ブロック(1個目の物理ブロック)のPBAを書き込むようにしてもよい。このようにすれば、それらの共通冗長領域50を参照することにより、旧ブロック(1個目の物理ブロック)のPBAを把握することができる。
さて、この後、同じ論理ブロックに割り当てられた1個目の物理ブロック又は2個目の物理ブロックからデータを読み出すときには、メモリコントローラ3は、2個目の物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#18の物理ページ)からページ管理情報#2を読み出し、このページ管理情報#2に基づいて論理ページと物理ページの対応関係を把握する。ここでは、新ブロック内のPPN#18の物理ページに書き込まれているページ管理情報#2が、論理ページと物理ページの最新の対応関係を示しているため、そのページ管理情報#2を参照するだけで、論理ページと物理ページの最新の対応関係を把握することができる。具体的には、LPN#0−#7及びLPN#14−#23の論理ページに対応したデータは、2個目の物理ブロックに書き込まれており、他の論理ページに対応したデータは、1個目の物理ブロックに書き込まれていることが把握される。つまり、本実施形態によれば、効率的に、論理ページと物理ページの対応関係を把握することができる。
尚、第1の一連のデータが書き込まれてから第5の一連のデータが書き込まれる前までの間に(つまりページ管理情報が全く書き込まれていない場合に)、物理ブロックからデータを読み出すときには、メモリコントローラ3は、物理ブロック内の先頭の物理ページに記憶されているデータに対応する論理ページ(LPN#8の論理ページ)以降の論理ページに対応するデータがLPNの順番で書き込まれていると判断して、論理ページと物理ページの対応関係を把握する。また、物理ブロック内の先頭の物理ページに記憶されているデータに対応する論理ページのLSNについては、先頭の物理ページに対応した共通冗長領域50に書き込まれているLSNにより把握される。
また、第7の一連のデータが書き込まれてから第9の一連のデータが書き込まれる前までの間に(つまり、1個目の物理ブロックにページ管理情報が書き込まれているが2個目の物理ブロックにページ管理情報が全く書き込まれていない場合に)、物理ブロック(1個目の物理ブロック又は2個目の物理ブロック)からデータを読み出すときには、メモリコントローラ3は、1個目の物理ブロックに書き込まれているページ管理情報に基づいて、1個目の物理ブロックと2個目の物理ブロックを合わせたページ管理情報を作成する。この作成処理では、2個目ブロックに記憶されているデータに対応する部分について、1個目の物理ブロックに書き込まれているページ管理情報の内容が更新される。この際、2個目ブロックブロックに関しては、LPN14の論理ページに対応するデータからLPNの順番でデータが格納されていると判断して、論理ページと物理ページの対応関係を把握される。
以上が、第二の実施形態の説明である。
なお、ページ管理情報は、前述したような、論理ページと物理ページの対応関係を示すテーブルであることが好ましいが、一変形例として、物理ブロックに書き込まれているそれぞれの一連のデータの先頭データに対応する論理ページの論理ページ番号であるスタート論理ページ番号(以下、「SLPN」と言う)と、その先頭データが書き込まれている物理ページの物理ページ番号であるスタート物理ページ番号(以下、「SPPN」と言う)と、その一連のデータが書き込まれるページ数(先頭データが属する論理ページから末尾データが属する論理ページまでの論理ページの個数であるページカウント値、以下、「PCNT」と言う)と、その一連のデータが書き込まれる物理ブロックを示す情報(1個目の物理ブロック又は2個目の物理ブロックを示す情報)であってもよい。このような情報が書き込まれている場合には、この情報に基づいて、論理ページと物理ページの対応関係を示すテーブルが作成される。
例えば、図10(A)〜(C)は、ページ管理情報#0〜#2のそれぞれの変形例であるページ管理情報#0´〜#2´をそれぞれ示している。ページ管理情報#0´〜#2´において、第nのSLPN、SPPN及びPCNTの組は、第nの一連のデータに対応する。また、2個目の物理ブロックに書き込まれたページ管理情報#2´において、2個目の物理ブロックに書き込まれている一連のデータに対応するSLPN、SPPN及びPCNTの組には、旧ブロックフラグが関連付けられる。尚、物理ブロック内の先頭の物理ページからLPNの順番でデータが書き込まれている部分については、複数個の一連のデータに対応する部分が、1つの情報としてまとめられてもよい。例えば、第1乃至第4の一連のデータに対応する部分が、SLPNが#8、SPPNが#0、PCNTが48というような1つの情報にまとめられてもよい。
この変形例では、論理ページと物理ページの最新の対応関係を示すテーブルは、最新のページ管理情報に基づいて作成される。この作成処理では、後から書き込まれた一連のデータに対応する論理ページと物理ページの対応関係が優先されるようにして、LPN#0−#63の64個の論理ページ番号(LPN)に対応したレコードに物理ページ番号(PPN)が書き込まれていく。つまり、各レコードに書き込まれる物理ページ番号(PPN)については、後から書き込まれた一連のデータに対応する物理ページ番号(PPN)の方が上書きされるようにすればよい。尚、論理ページと物理ページの対応関係は、SLPN、SPPN及びPCNTの組に基づいて把握される。
例えば、ページ管理情報#2´に基づいて、図9に示したようなテーブルが作成される。このテーブル作成処理では、それぞれの一連のデータに対応する論理ページと物理ページの対応関係に基づいて、各レコードに物理ページ番号(PPN)が書き込まれていく。この物理ページ番号(PPN)の書き込みは、先に書き込まれた一連のデータに対応する方から順番に行われ、書き込み先のレコードに既に物理ページ番号(PPN)が書き込まれていても、後から物理ページ番号(PPN)が上書きされる。従って、後から書き込まれた一連のデータに対応する論理ページと物理ページの対応関係を優先したテーブルが作成される。
以上、本発明の幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
例えば、上記の実施の形態では、論理ブロックに含まれる論理セクタ領域と物理ブロックとに含まれる物理セクタ領域の数は一致していた。しかしながら、論理ブロックに含まれる論理セクタ領域の数を物理ブロックに含まれる物理セクタ領域の数より少なくしてもよい。こうすることで、論理ブロックに含まれる全ての論理セクタ領域に対応するデータを物理ブロックに保存した後であっても、そのデータの書き替えデータを、当該物理ブロックの空き領域(データが書き込まれていない物理セクタ領域又は物理ページ)に保存することができる。これにより効率的なデータの書き換えが可能となる。例えば、論理ブロックに含まれる論理セクタ領域の数と、物理ブロックに含まれる物理セクタ領域の数を、共に2のべき乗で与えられる数にする場合には、論理ブロックに含まれる論理セクタ領域の数を128とし、物理ブロックに含まれる物理セクタ領域の数を256とする。
また、上記の実施の形態では、書き込み処理が正常に終了したことを示す終了マークが分割冗長領域70又は共通冗長領域50に書き込まれていたが、管理フラグ、論理セクタ番号又は論理ページ番号にこの終了マークの役割をさせるようにしてもよい。
つまり、セクタ管理情報(又はページ管理情報)が書き込まれない場合にだけ、一連のデータの末尾データが書き込まれた物理セクタ領域60(又は物理ページ)に対応する分割冗長領域70(又は共通冗長領域50)に、その末尾データに対応する論理セクタ領域(又は論理ページ)の論理セクタ番号(又は論理ページ番号)が書き込まれるようにすればよい。セクタ管理情報(又はページ管理情報)が書き込まれる場合には、一連のデータの末尾データが書き込まれた物理セクタ領域60(又は物理ページ)に対応する分割冗長領域70(又は共通冗長領域50)に論理セクタ番号(又は論理ページ番号)が書き込まれず、セクタ管理情報(又はページ管理情報)が書き込まれた物理セクタ領域60(又は物理ページ)に対応する分割冗長領域70(又は共通冗長領域50)に管理フラグが書き込まれる。このようにすれば、書き込み処理が正常に終了したときにだけ、分割冗長領域70(又は共通冗長領域50)に管理フラグ又は論理セクタ番号(又は論理ページ番号)が書き込まれる。また、セクタ管理情報(又はページ管理情報)が書き込まれない場合には、データが書き込まれている末尾の物理セクタ領域60(又は物理ページ)に記憶されているデータに対応する論理セクタ領域(又は論理ページ)の論理セクタ番号(又は論理ページ番号)が、データが書き込まれている末尾の物理セクタ領域60(又は物理ページ)に対応する分割冗長領域70(又は共通冗長領域50)に記憶されているため、第2の論理セクタ領域の論理セクタ番号を容易に求めることができる。尚、このようにした場合には、一連のデータの先頭データが書き込まれた物理セクタ領域60(又は物理ページ)に対応する分割冗長領域70(又は共通冗長領域50)に、その先頭データに対応する論理セクタ領域(又は論理ページ)の論理セクタ番号(又は論理ページ番号)は書き込まれる必要がなくなるため、その先頭データに対応する論理セクタ領域(又は論理ページ)の論理セクタ番号(又は論理ページ番号)は書き込まれない。