以下、本発明の幾つかの実施の形態を、図面を参照しながら詳細に説明する。
<第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個の物理ページが4セクタ(2048バイト)のユーザ領域と64バイトの冗長領域で構成され、1個の物理ブロックが64個の物理ページで構成されているNAND型フラッシュメモリを用いる。
図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には、論理アドレス情報、ブロックステータス(フラグ)等の物理ブロック毎で管理される情報が書き込まれる(なお、後述する第2の実施の形態では、更に、各物理ページの共通冗長領域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の実施の形態では、分割冗長領域70に、論理セクタ領域と物理セクタ領域との対応関係を管理するための情報が書き込まれる。
このように、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は、8個の論理ゾーンと8個の物理ゾーンを形成し、対応関係にある論理ゾーンと物理ゾーンの組毎に、論理ブロックと物理ブロックの対応関係を管理する場合の例を示している。この例では、LBA#0−#2047999からなる2048000個の論理セクタ領域を、8192個の物理ブロックからなるフラッシュメモリ2側の記憶領域に割り当てている。
アドレスが連続する256個の論理セクタ領域をまとめたものを論理ブロックとし、この論理ブロックに通し番号を付している。以下、論理ブロックに付した通し番号を論理ブロック番号(LBN)と言う。例えば、LBA#0−#255の256個の論理セクタ領域は、LBN#0の論理ブロックに属し、LBA#256−#511の256個の論理セクタ領域はLBN#1の論理ブロックに属している。このように、LBA#0−#2047999の2048000個の論理セクタ領域は、LBN#0−#7999の8000個の論理ブロックのいずれかに属している。
更に、この論理ブロックを複数個まとめたものを論理ゾーンとし、この論理ゾーンに通し番号を付している。以下、論理ゾーンに付した通し番号を論理ゾーン番号(LZN)と言う。この例では、8個の論理ゾーン(LZN#0−#7)が形成され、それぞれの論理ゾーンは、LBNが連続する1000個の論理ブロックから構成されている。尚、LBNが連続する論理ブロックを、異なる論理ゾーンに順次振り分けるようにして論理ゾーンを形成してもよい。例えば、LBN#0の論理ブロックはLZN#0の論理ゾーンに、LBN#1の論理ブロックはLZN#1の論理ゾーンに、LBN#2の論理ブロックはLZN#2の論理ゾーンにという順番でLZN#7の論理ゾーンまで振り分けていく。以下同様に、LBN#8の論理ブロックをLZN#0の論理ゾーンに、LBN#9の論理ブロックをLZN#1の論理ゾーンに、LBN#10の論理ブロックをLZN#2の論理ゾーンに振り分けていく。
一方、フラッシュメモリ2側は、8192個の物理ブロックにより、8個の物理ゾーンが形成されている。8192個の物理ブロックには、固有の物理ブロックアドレス(PBA)が付されている。又、8個の物理ゾーンには、通し番号を付されている。以下、物理ゾーンに付された通し番号を、物理ゾーン番号(PZN)と言う。各物理ゾーンは、PBAが連続する物理ブロックが1024個で構成されている。尚、PBAが連続しない物理ブロックで物理ゾーンを形成するようにしてもよい。
論理ゾーンと物理ゾーンの対応関係については、物理ゾーンのPZNと、当該PZNと同じ値のLZNを有する論理ゾーンとを対応させている。つまり、PZN#0の物理ゾーンに対してLZN#0の論理ゾーンが対応し、PZN#1の物理ゾーンに対してLZN#1の論理ゾーンが対応する。
尚、論理ブロックと物理ブロックとの対応関係は、通常、アドレス変換テーブルによって管理される。このアドレス変換テーブルは、論理ブロックと物理ブロックとの対応関係を記述したテーブルであり、各物理ブロックの冗長領域26に記憶されている論理アドレス情報に基づいて作成される。このアドレス変換テーブルを作成するときは、作成対象の物理ゾーンに含まれる物理ブロックの冗長領域26から論理アドレス情報が順次読み出され、読み出された論理アドレス情報に基づいて論理ブロックと物理ブロックとの対応関係が順次記述される。また、対応関係にある論理ブロック内の領域と物理ブロック内の領域を管理するために、論理セクタ領域と物理セクタ領域60の対応関係を示したセクタ情報テーブルが作成される(なお、後述の第2の実施形態では、論理ページ(後述)と物理ページの対応関係を示したページ情報テーブルが作成される)。
尚、フラッシュメモリ内の物理ブロックには、出荷時から不良である先天性の不良ブロックが含まれている。更に、出荷時に良品の物理ブロックであっても、使用開始後に劣化して不良ブロックになる物理ブロック(後天性の不良ブロック)もある。従って、本実施の形態では、論理ゾーンに含まれる論理ブロックの数は1000個であるのに対し、物理ゾーンに含まれる物理ブロックの数は1024個としている。
第1の実施の形態では、論理ブロックに含まれる256個の論理セクタ領域と物理ブロックに含まれる256個の物理セクタ領域60との対応関係をセクタ単位で管理している。1個の物理ページに複数個の物理セクタ領域60が含まれている。第1の実施の形態におけるNAND型フラッシュメモリは、各物理ページに対するデータの書き込みを物理セクタ領域60毎に分けて実行することのできるNAND型フラッシュメモリである。例えば、図2に示したように、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セクタ分の論理アドレスが連続するデータが、一連のデータに対応する。尚、論理アクセス領域が複数個の論理ブロックに跨っている場合は、論理ブロック毎に一連のデータは分割される。例えば、論理アクセス領域が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)」と言う。又、LBAの下位iビット(例えば、i=8のときは下位8ビット)を除いた、LBAの上位側のビットが、前述したLBN(論理ブロック番号)に対応する。従って、セクタ数レジスタR2及びLBAレジスタR3に書き込まれた情報に基づいて判別されるLBAが連続する範囲において、LBAのLBNに対応する部分のビットが示す値が同一であれば、論理アクセス領域は複数個の論理ブロックに跨っていない。
次に、論理ブロックに含まれる256個の論理セクタ領域と物理ブロックに含まれる256個の物理セクタ領域60との対応関係をセクタ単位で管理するために、各物理セクタ領域60に対応する分割冗長領域70に書き込まれる情報について、図4を参照して説明する。図4は、PSN#0−#255の物理セクタ領域60に書き込まれているデータのLSNと、分割冗長領域70に書き込まれているスタート論理セクタ番号(SLSN)及びセクタカウント(SCNT)との対応関係を示している。スタート論理セクタ番号(SLSN)及びセクタカウント(SCNT)は、一連のデータと対応する論理アクセス領域を特定(識別)するための情報であり、一連のデータ毎に設定され、一連のデータが書き込まれた物理セクタ領域60に対応する分割冗長領域70に書き込まれる。また、物理ブロック内のPSN#0−#255の物理セクタ領域60には、PSNが小さい方から順番に一連のデータに書き込まれる。以下、物理ブロック内の物理セクタ領域60に最初に書き込まれた一連のデータを「1番目の一連のデータ」と言い、2番目に書き込まれた一連のデータを「2番目の一連のデータ」と言い、以下同様に、n番目に書き込まれた一連のデータを「n番目の一連のデータ」と言う。
SLSNは、論理アクセス領域の先頭領域に対応する論理セクタ番号(LSN)を表す情報であり、SCNTは、論理アクセス領域のセクタ数を表す情報である。従って、各一連のデータに対して設定されたSLSNとSCNTは、一連のデータの先頭データに対応する論理セクタ番号(LSN)と、一連のデータのセクタ数をそれぞれ表す。SLSN及びSCNTは、論理セクタ領域と物理セクタ領域60の対応関係を示したセクタ情報テーブルを作成するときに利用される。以下、SLSNとSCNTの組を、「SLSN/SCNT」と表す。
分割冗長領域70には、SLSN/SCNTを複数個書込むことが可能であり、一連のデータの書込みに応じて、SLSN/SCNTが累積的に書込まれる。具体的には、例えば、分割冗長領域70に書込めるSLSN/SCNTの最大組数がX組(Xは2以上の整数)に設定されている場合、今回の書き込み処理で書き込まれる一連のデータ(以下、「今回の一連のデータ」と言う。)に対応した分割冗長領域70には、今回の一連のデータに対応するSLSN/SCNTと共に、直近(X−1)回前までの書き込み処理で書き込まれた一連のデータに対応するSLSN/SCNTが書き込まれる。より具体的には、一連のデータが書き込まれる物理セクタ領域と対応する分割冗長領域70には、その一連のデータに対応するSLSN/SCNTと共に、直近(X−1)回前までの書き込み処理でそれぞれ書き込まれた一連のデータに対応するSLSN/SCNTが書き込まれる。つまり、各分割冗長領域70には、最大X組のSLSN/SCNTが書き込まれる。一連のデータを書き込むときに、その書き込み先の物理ブロックに既に書き込まれている一連のデータの個数が(X−1)個よりも少ない場合には、分割冗長領域70に書き込まれるSLSN/SCNTの組数は、X組(分割冗長領域70に書込めるSLSN/SCNTの最大組数)よりも少なくなる。
図4の例で言えば、各分割冗長領域70に3個のSLSN/SCNTを書込むことが可能である。このため、各分割冗長領域70には、今回の一連のデータに対応するSLSN/SCNT(以下、SLSN/SCNT#0)と、前回(1回前)の書き込み処理で書き込まれた一連のデータ(以下、「1回前の一連のデータ」と言う。)に対応するSLSN/SCNT(以下、SLSN/SCNT#1)と、前々回(2回前)の書き込み処理で書き込まれた一連のデータ(以下、「2回前の一連のデータ」と言う。)に対応するSLSN/SCNT(以下、SLSN/SCNT#2)とが書き込まれる。この結果、例えば、PBA#7の物理ブロックに対する3回目の書き込み処理で書き込まれる一連のデータ(3番目の一連のデータ)の場合、その一連のデータが書き込まれる物理セクタ領域と対応する分割冗長領域70には、その一連のデータ(3番目の一連のデータ)に対応するSLSN/SCNTであるSLSN/SCNT#0“#5/5”(SLSNが#5でSCNTが5であることを表す。)と共に、1回前の一連のデータ(2番目の一連のデータ)に対応するSLSN/SCNTであるSLSN/SCNT#1“#0/3”と、2回前の一連のデータ(1番目の一連のデータ)に対応するSLSN/SCNTであるSLSN/SCNT#2“#3/10”が書き込まれる。なお、2回前の書き込み処理よりも前の書き込み処理で書き込まれた一連のデータに対応したSLSN/SCNTは、今回の一連のデータが書き込まれる物理セクタ領域と対応する分割冗長領域70には書込まれない。なぜなら、この例では、分割冗長領域70に書込めるSLSN/SCNTの最大組数(X)を3組に設定しているためである。
尚、一連のデータは、物理ブロック内のPSNが小さい方の物理セクタ領域60から順番に書き込まれる。従って、一連のデータを書き込むときは、書き込み先の物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭(データが書き込まれていない物理セクタ領域60の中でPSNが一番小さい物理セクタ領域60)の検索が行われ、検出された物理セクタ領域60から順番に一連のデータが書き込まれる。例えば、図4に示したように、1番目の一連のデータのセクタ数が10セクタで、2番目の一連のデータのセクタ数が3セクタで、3番目の一連のデータのセクタ数が5セクタで、4番目の一連のデータのセクタ数が8セクタで、5番目の一連のデータのセクタ数が8セクタで、6番目の一連のデータのセクタ数が12セクタの場合、1番目の一連のデータは、PSN#0−#9の物理セクタ領域60に書き込まれ、2番目の一連のデータは、PSN#10−#12の物理セクタ領域60に書き込まれ、3番目の一連のデータはPSN#13−#17の物理セクタ領域60に書き込まれ、4番目の一連のデータはPSN#18−#25の物理セクタ領域60に書き込まれ、5番目の一連のデータはPSN#26−#33の物理セクタ領域60に書き込まれ、6番目の一連のデータはPSN#34−#45の物理セクタ領域60に書き込まれる。
また、一連のデータの書き込み処理で、論理アクセス領域が属する論理ブロックに対応する物理ブロックが無い場合、又は論理アクセス領域が属する論理ブロックに対応する物理ブロックに一連のデータを書き込むことができない場合は、空きブロック(データが書き込まれていない物理ブロック)の検索が行われ、検出された空きブロックに一連のデータが書き込まれる。論理アクセス領域が属する論理ブロックに対応する物理ブロックに一連のデータを書き込むことができない場合としては、空き領域(データが書き込まれていない物理セクタ領域60)が無い場合や、空き領域のセクタ数が一連のデータのセクタ数より少ない場合などが挙げられる。
図4に示した例では、PBA#7の物理ブロックに6つの一連のデータが保存されている。この6つの一連のデータの書き込み処理について具体的に説明をする。尚、図4に示した例で、D#zは、LSN#zの論理セクタ領域と対応するデータを示している(zは0〜255の整数)。例えば、D#3は、LSN#3の論理セクタ領域と対応するデータを示している。
(1番目の一連のデータの書き込み処理)。
まず、ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に3が、セクタ数レジスタR2に10が書き込まれる。メモリコントローラ3は、LBAレジスタR3に書き込まれたLBA#3とセクタ数レジスタR2に書き込まれた値10とから、この一連のデータの書き込み先として指示された領域がLBA#3−#12の範囲(つまり、LBA#3を先頭としLBA#12を末尾とした10セクタ分の範囲)であり、この領域がLBN#0の論理ブロックに含まれ、複数の論理ブロックに跨っていないと判断する。即ち、この一連のデータは単一の物理ブロックに書き込まれると判断する。
LBN#0の論理ブロックは、LZN#0の論理ゾーンに属し、LZN#0の論理ゾーンはPZN#0の物理ゾーンに割り当てられている。メモリコントローラ3は、LBN#0の論理ブロックに対応する物理ブロックが無いため、PZN#0の物理ゾーンから空ブロックを検索し、例えば、空きブロックとしてPBA#7の物理ブロックを検出する。尚、LBN#0の論理ブロックのデータが物理ブロックに既に保存されており、当該物理ブロックに10セクタ分のデータを書き込む領域が存在する場合には、空きブロック検索は行なわず、当該物理ブロックのデータが書き込まれていない物理セクタ領域60に、この一連のデータが書き込まれる。
次に、この一連のデータを物理セクタ領域60に書き込む際に分割冗長領域70に書き込むスタート論理セクタ番号(SLSN)及びセクタカウント(SCNT)について説明する。まず、LBAレジスタR3に書き込まれたLBAの下位8ビットから、SLSNに対応する値#3が求められ、セクタ数レジスタR2に書き込まれた値から、SCNTに対応する値10が求められる。
メモリコントローラ3は、PBA#7の物理ブロック内のPSN#0の物理セクタ領域60から一連のデータの書き込みを開始する。LBA#3−#12の領域に書き込むことが指示された一連のデータは、PSN#0−#9の物理セクタ領域60に書き込まれる。この際、PSN#0−#9の物理セクタ領域60に対応する全ての分割冗長領域70には、SLSN/SCNT#0として“#3/10”(SLSNが#3でSCNTが10であることを表す。)が書き込まれる。このSLSN/SCNT#0に基づいて、この一連のデータに対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#3−#12の論理セクタ領域であることが分かる。
(2番目の一連のデータの書き込み処理)。
ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に0が、セクタ数レジスタR2に3が書き込まれる。メモリコントローラ3は、LBAレジスタR3に書き込まれたLBA#0とセクタ数レジスタR2に書き込まれた値3とから、この一連のデータの書き込み先として指示された領域のLBAが#0−#2であり、この領域がLBN#0の論理ブロックに含まれ、複数の論理ブロックに跨っていないと判断する。また、論理ブロックと物理ブロックの対応関係を記述したアドレス変換テーブルに基づいて、LBN#0の論理ブロックがPBA#7の物理ブロックに対応していることを判別する。
続いて、PBA#7の物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭を検索する空きセクタ領域検索が行われる。この空きセクタ領域検索の終了後、メモリコントローラ3は、物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭であるPSN#10の物理セクタ領域60から一連のデータの書き込みを開始する。従って、LBA#0−#2の領域に書き込むことが指示された一連のデータは、PBA#7の物理ブロックのPSN#10−#12の物理セクタ領域60に書き込まれる。
この一連のデータを物理セクタ領域60に書き込む際に、分割冗長領域70に書き込む情報については、LBAレジスタR3に書き込まれたLBAの下位8ビットから、SLSNに対応する値#0が求められ、セクタ数レジスタR2に書き込まれた値から、SCNTに対応する値3が求められる。PBA#7の物理ブロック内のPSN#10−#12の物理セクタ領域60に一連のデータを書き込む際に、PSN#10−#12の物理セクタ領域60に対応する全ての分割冗長領域70に、SLSN/SCNT#0として“#0/3”が書き込まれる。このSLSN/SCNT#0に基づいて、この一連のデータに対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#0−#2の論理セクタ領域であることが分かる。
今回の一連のデータは、2番目の一連のデータなので、PSN#10−#12の物理セクタ領域60に対応する全ての分割冗長領域70には、2番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報と共に、前回の書き込み処理で書き込まれた1番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報が書き込まれる。つまり、PSN#10−#12の物理セクタ領域60に対応する全ての分割冗長領域70には、SLSN/SCNT#0として2番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報である“#0/3”が書き込まれ、SLSN/SCNT#1として1番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報である“#3/10”が書き込まれる。このSLSN/SCNT#1に基づいて、1回前の一連のデータに対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#3−#12の論理セクタ領域であることが分かる。
(3番目の一連のデータの書き込み処理)。
ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に5が、セクタ数レジスタR2に5が書き込まれる。メモリコントローラ3は、この一連のデータの書き込み先として指示された領域のLBAが#5−#9であり、この領域がLBN#0の論理ブロックに含まれ、LBN#0の論理ブロックがPBA#7の物理ブロックに対応していることを判別する。
続いて、PBA#7の物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭を検索する空きセクタ領域検索が行われる。この空きセクタ領域検索の終了後、メモリコントローラ3は、LBA#5−#9の領域に書き込むことが指示された一連のデータを、PBA#7の物理ブロックのPSN#13−#17の物理セクタ領域60に書き込む。
今回の一連のデータは、3番目の一連のデータなので、PSN#13−#17の物理セクタ領域60に対応する全ての分割冗長領域70には、3番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報と共に、前回の書き込み処理で書き込まれた2番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報と、前々回の書き込み処理で書き込まれた1番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報とが書き込まれる。つまり、PSN#13−#17の物理セクタ領域60に対応する全ての分割冗長領域70には、SLSN/SCNT#0として、3番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報である“#5/5”が書き込まれ、SLSN/SCNT#1として、2番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報である“#0/3”が書き込まれ、SLSN/SCNT#2として、1番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報である“#3/10”が書き込まれる。このSLSN/SCNT#0に基づいて、今回の一連のデータ(3番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#5−#9の論理セクタ領域であることが分かる。このSLSN/SCNT#1に基づいて、1回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#0−#2の論理セクタ領域であることが分かる。このSLSN/SCNT#2に基づいて、2回前の一連のデータ(1番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#3−#12の論理セクタ領域であることが分かる。
(4番目の一連のデータの書き込み処理)。
ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に10が、セクタ数レジスタR2に8が書き込まれる。メモリコントローラ3は、この一連のデータの書き込み先として指示された領域のLBAが#10−#17であり、この領域がLBN#0の論理ブロックに含まれ、LBN#0の論理ブロックがPBA#7の物理ブロックに対応していることを判別する。
続いて、PBA#7の物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭を検索する空きセクタ領域検索が行われる。この空きセクタ領域検索の終了後、メモリコントローラ3は、LBA#10−#17の領域に書き込むことが指示された一連のデータを、PBA#7の物理ブロックのPSN#18−#25の物理セクタ領域60に書き込む。
PSN#18−#25の物理セクタ領域60に対応する全ての分割冗長領域70には、SLSN/SCNT#0として、今回の一連のデータ(4番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#10/8”が書き込まれ、SLSN/SCNT#1として、1回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#5/5”が書き込まれ、SLSN/SCNT#2として、2回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#0/3”が書き込まれる。このSLSN/SCNT#0に基づいて、今回の一連のデータ(4番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#10−#17の論理セクタ領域であることが分かる。このSLSN/SCNT#1に基づいて、1回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#5−#9の論理セクタ領域であることが分かる。このSLSN/SCNT#2に基づいて、2回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#0−#2の論理セクタ領域であることが分かる。
(5番目の一連のデータの書き込み処理)。
ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に13が、セクタ数レジスタR2に8が書き込まれる。メモリコントローラ3は、この一連のデータの書き込み先として指示された領域のLBAが#13−#20であり、この領域がLBN#0の論理ブロックに含まれ、LBN#0の論理ブロックがPBA#7の物理ブロックに対応していることを判別する。
続いて、PBA#7の物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭を検索する空きセクタ領域検索が行われる。この空きセクタ領域検索の終了後、メモリコントローラ3は、LBA#13−#20の領域に書き込むことが指示された一連のデータを、PBA#7の物理ブロックのPSN#26−#33の物理セクタ領域60に書き込む。
PSN#26−#33の物理セクタ領域60に対応する全ての分割冗長領域70には、SLSN/SCNT#0として、今回の一連のデータ(5番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#13/8”が書き込まれ、SLSN/SCNT#1として、1回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#10/8”が書き込まれ、SLSN/SCNT#2として、2回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#5/5”が書き込まれる。このSLSN/SCNT#0に基づいて、今回の一連のデータ(5番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#13−#20の論理セクタ領域であることが分かる。このSLSN/SCNT#1に基づいて、1回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#10−#17の論理セクタ領域であることが分かる。このSLSN/SCNT#2に基づいて、2回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#5−#9の論理セクタ領域であることが分かる。
(6番目の一連のデータの書込み処理)。
ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に7が、セクタ数レジスタR2に12が書き込まれる。メモリコントローラ3は、この一連のデータの書き込み先として指示された領域のLBAが#7−#18であり、この領域がLBN#0の論理ブロックに含まれ、LBN#0の論理ブロックがPBA#7の物理ブロックに対応していることを判別する。
続いて、PBA#7の物理ブロック内のデータが書き込まれていない物理セクタ領域60の先頭を検索する空きセクタ領域検索が行われる。この空きセクタ領域検索の終了後、メモリコントローラ3は、LBA#7−#18の領域に書き込むことが指示された一連のデータを、PBA#7の物理ブロックのPSN#34−#45の物理セクタ領域60に書き込む。
PSN#34−#45の物理セクタ領域60に対応する全ての分割冗長領域70には、SLSN/SCNT#0として、今回の一連のデータ(6番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#7/12”が書き込まれ、SLSN/SCNT#1として、1回前の一連のデータ(5番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#13/8”が書き込まれ、SLSN/SCNT#2として、2回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#10/8”が書き込まれる。このSLSN/SCNT#0に基づいて、今回の一連のデータ(6番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#7−#18の論理セクタ領域であることが分かる。このSLSN/SCNT#1に基づいて、1回前の一連のデータ(5番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#13−#20の論理セクタ領域であることが分かる。このSLSN/SCNT#2に基づいて、2回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセス領域が、LBN#0の論理ブロック内のLSN#10−#17の論理セクタ領域であることが分かる。
以上の流れにより、PBA#7の物理ブロックに、6つの一連のデータが保存されたことになる。この時点において、データが書き込まれている末尾の物理セクタ領域60は、PSN#45の物理セクタ領域60である。
なお、図4に示した例では、累積的に書き込むSLSN/SCNTの最大組数(X)を3組(X=3)としたため、今回の一連のデータに対応する論理アクセス領域を特定(識別)する情報(SLSN/SCNT#0)、1回前の一連のデータに対応する論理アクセス領域を特定(識別)する情報(SLSN/SCNT#1)及び、2回前の一連のデータに対応する論理アクセス領域を特定(識別)する情報(SLSN/SCNT#2)を分割冗長領域70に書き込んでいるが、累積的に書き込むSLSN/SCNTの最大組数(X)を2組(X=2)とした場合には、2回前の一連のデータに対応する論理アクセス領域を特定(識別)する情報(SLSN/SCNT#2)は書き込まれない。一方、例えば、累積的に書き込むSLSN/SCNTの最大組数(X)を4組(X=4)とした場合には、更に、3回前の書き込み処理で書き込まれた一連のデータに対応する論理アクセス領域を特定(識別)する情報(SLSN/SCNT#3)も書き込まれる。
また、一連のデータに対応する論理アクセス領域を特定(識別)する情報として、論理アクセス領域の先頭領域に対応する論理セクタ番号(LSN)を表す情報と論理アクセス領域の末尾領域に対応する論理セクタ番号(LSN)を表す情報を用いるようにしてもよい。
<<空きセクタ領域検索>>。
空きセクタ領域検索については、二分木検索又は二分木検索とセクタポインタ情報を組み合わせた検索を用いる。
「セクタポインタ情報」は、一連のデータの末尾データが書き込まれる物理セクタ領域60のPSNを示す情報であり、一連のデータが書き込まれる物理セクタ領域60と対応する分割冗長領域70に書き込まれる。例えば、図4のPSN#0−#9の物理セクタ領域60と対応する分割冗長領域70には、セクタポインタ情報として#9を示す情報が書き込まれ、PSN#10−#12の物理セクタ領域60と対応する分割冗長領域70には、セクタポインタ情報として#12を示す情報が書き込まれ、以下同様に、PSN#34−#45の物理セクタ領域60と対応する分割冗長領域70には、セクタポインタ情報として#45を示す情報が書き込まれる。
検索を開始する時には、検索範囲の先頭を示す先頭位置情報と末尾を示す末尾位置情報が設定される。本実施の形態では、先頭位置情報として#0が設定され、末尾位置情報として#256(PSNの最大値+1)が設定される。
検索では、先頭位置情報として設定されている値と末尾位置情報として設定されている値の中間点を算出し、PSNの値が算出した値に一致する物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。ここで、分割冗長領域70に有効なセクタポインタ情報が書き込まれていた場合は、セクタポインタ情報として書き込まれていた値を新たな先頭位置情報として設定する。一方、分割冗長領域70に有効なセクタポインタ情報が書き込まれていなかった場合は、算出した値を新たな末尾位置情報として設定する。先頭位置情報として設定されている値と末尾位置情報として設定されている値の差が1になったとき、PSNの値が末尾位置情報として設定されている値に一致した物理セクタ領域60が、データが書き込まれていない物理セクタ領域60の先頭に対応する。
例えば、図4では、最初にPSN#128の物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。この分割冗長領域70には有効なセクタポインタ情報が書き込まれていないので、末尾位置情報として#128を設定する。次に、PSN#64の物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。この分割冗長領域70には有効なセクタポインタ情報が書き込まれていないので、末尾位置情報として#64を設定する。次に、PSN#32の物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。この分割冗長領域70にはセクタポインタ情報として#33が書き込まれているので、先頭位置情報として#33を設定する。次に、PSN#48の物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。この分割冗長領域70には有効なセクタポインタ情報が書き込まれていないので、末尾位置情報として#48を設定する。次に、PSN#40の物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。この分割冗長領域70にはセクタポインタ情報として#45が書き込まれているので、先頭位置情報として#45を設定する。次に、PSN#46の物理セクタ領域60と対応する分割冗長領域70からセクタポインタ情報を読み出す。この分割冗長領域70には有効なセクタポインタ情報が書き込まれていないので、末尾位置情報として#46を設定する。ここで、先頭位置情報として設定されている値と末尾位置情報として設定されている値の差が1になったので、PSN#46の物理セクタ領域60が、データが書き込まれていない物理セクタ領域60の先頭に対応する。
尚、先頭位置情報として設定されている値と末尾位置情報として設定されている値の差が1になったとき、PSNの値が先頭位置情報として設定されている値に一致した物理セクタ領域60が、データが書き込まれている物理セクタ領域60の末尾に対応する。
<<セクタ情報テーブルの作成処理>>。
ところで、各物理ブロックに記憶されているデータを読み出す場合、ホストシステム4により、コマンドレジスタR1に読み出しコマンドのコマンドコードが書き込まれ、LBAレジスタR3及びセクタ数レジスタR2に、読み出すデータが記憶されている領域に対応するLBA(セクタ数レジスタR2に書き込まれた値が1の場合)又はLBAが連続する範囲(セクタ数レジスタR2に書き込まれた値が2以上の場合)を指示する情報が書き込まれる。
コマンドレジスタR1に読み出しコマンドのコマンドコードが書き込まれたとき、メモリコントローラ3は、LBAレジスタR3及びセクタ数レジスタR2に書き込まれた情報に基づいて論理アクセス領域を判別する。つまり、アクセス対象の論理ブロック及び論理セクタ領域を判別する。更に、メモリコントローラ3は、アクセス対象の論理ブロックに対応する物理ブロックと、アクセス対象の論理セクタ領域に対応する物理セクタ領域60を判別しなければならない。
論理ブロックと物理ブロックの対応関係については、上述のアドレス変換テーブルに基づいて判別することができる。メモリコントローラ3は、論理セクタ領域と物理セクタ領域60の対応関係については、分割冗長領域70に書き込まれているSLSN/SCNTに基づいて、論理セクタ領域と物理セクタ領域60の対応関係を記述したセクタ情報テーブルを作成し、このセクタ情報テーブルに基づいて論理セクタ領域と物理セクタ領域60の対応関係を判別する。
セクタ情報テーブルを作成するときは、マイクロプロセッサ6によって、ワークエリア8に、LSN#0−#255に対応するPSNを書き込む領域(以下、「セクタ情報テーブル作成領域」と言う。)が確保される。
セクタ情報テーブル作成領域は、LSN#0−#255の各LSNに関連付けられた有効フラグを設定する領域とPSNを書き込む領域とで構成されている。有効フラグを設定する領域には、テーブル作成を開始する前に、PSNを書き込む領域に書き込まれている値が無効であることを示す情報(例えば論理値“0”)が設定される。テーブル作成が開始されると、各LSNに関連付けられたPSNを書き込む領域には、それぞれのLSNに対応するPSNが書き込まれ、PSNが書き込まれた領域に対応する有効フラグは、書き込まれたPSNが有効であることを示す情報(例えば論理値“1”)に変更される。
このテーブル作成処理では、作成対象の物理ブロックに対して後から書き込まれた一連のデータ側から、一連のデータと論理アクセス領域との対応関係が識別され、一連のデータが書き込まれている物理セクタ領域60のPSNと論理アクセス領域に含まれる論理セクタ領域のLSNから、LSNとPSNの対応関係が判別される。このLSNとPSNの対応関係に基づいて、セクタ情報テーブル作成領域に対するPSNの書き込みが行われる。
図4に示したように、6つの一連のデータが書き込まれているPBA#7の物理ブロックのセクタ情報テーブルを作成する場合には、最後に書き込まれた6番目の一連のデータから最初に書き込まれた1番目の一連のデータに向かう順番で、各一連のデータに対応するLSNとPSNの対応関係の判別と、セクタ情報テーブル作成領域に対するPSNの書き込みが行われる。
また、6番目の一連のデータが書き込まれている物理セクタ領域60に対応する分割冗長領域70には、6番目の一連のデータに対応するSLSN/SCNTがSLSN/SCNT#0として書き込まれ、5番目の一連のデータに対応するSLSN/SCNTがSLSN/SCNT#1として書き込まれ、4番目の一連のデータに対応するSLSN/SCNTがSLSN/SCNT#2として書き込まれている。3番目の一連のデータが書き込まれている物理セクタ領域60に対応する分割冗長領域70には、3番目の一連のデータに対応するSLSN/SCNTがSLSN/SCNT#0として書き込まれ、2番目の一連のデータに対応するSLSN/SCNTがSLSN/SCNT#1として書き込まれ、1番目の一連のデータに対応するSLSN/SCNTがSLSN/SCNT#2として書き込まれている。従って、例えば、データが書き込まれている末尾の物理セクタ領域60であるPSN#45の物理セクタ領域60に対応する分割冗長領域70と、3番目の一連のデータが書き込まれている物理セクタ領域60の末尾であるPSN#17の物理セクタ領域60に対応する分割冗長領域70とから、SLSN/SCNT#0−#2をそれぞれ読み出すことにより、6番目の一連のデータから1番目の一連のデータまでの各一連のデータに対応するSLSN/SCNTを求めることができる。
図5を参照して、各一連のデータに対応するLSNとPSNの対応関係の判別と、セクタ情報テーブル作成領域に対するPSNの書き込みについて説明する。
PSN#45の物理セクタ領域60に対応する分割冗長領域70に書き込まれているSLSN/SCNT#0(#7/12)に基づいて、6番目の一連のデータに対応する論理アクセス領域がLSN#7−#18の論理セクタ領域であり、6番目の一連のデータが12セクタのデータであることが分かる。更に、6番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#45なので、6番目の一連のデータがPSN#34−#45の物理セクタ領域60に書き込まれていることが分かる。従って、LSN#7−#18に対してPSN#34−#45が対応することが分かる。
このLSNとPSNの対応関係に基づいて、図5(A)に示したように、LSN#7−#18に対応するPSNを書き込む領域に#34−#45が順番に書き込まれ、LSN#7−#18に対応する有効フラグが“0”から“1”に変更される。
PSN#45の物理セクタ領域60に対応する分割冗長領域70に書き込まれているSLSN/SCNT#1(#13/8)に基づいて、5番目の一連のデータに対応する論理アクセス領域がLSN#13−#20の論理セクタ領域であり、5番目の一連のデータが8セクタのデータであることが分かる。更に、5番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#33なので、5番目の一連のデータがPSN#26−#33の物理セクタ領域60に書き込まれていることが分かる。従って、LSN#13−#20に対してPSN#26−#33が対応することが分かる。
LSN#13−#18に対応する有効フラグは、既に“1”に変更されているので、このLSNとPSNの対応関係に基づいて、図5(A)に示したようにLSN#19−#20に対応するPSNを書き込む領域に#32−#33が順番に書き込まれ、LSN#19−#20に対応する有効フラグが“0”から“1”に変更される。
PSN#45の物理セクタ領域60に対応する分割冗長領域70に書き込まれているSLSN/SCNT#2(#10/8)に基づいて、4番目の一連のデータに対応する論理アクセス領域がLSN#10−#17の論理セクタ領域であり、4番目の一連のデータが8セクタのデータであることが分かる。更に、4番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#25なので、4番目の一連のデータがPSN#18−#25の物理セクタ領域60に書き込まれていることが分かる。従って、LSN#10−#17に対してPSN#18−#25が対応することが分かる。
LSN#10−#17に対応する有効フラグは、既に“1”に変更されているので、このLSNとPSNの対応関係に基づくPSNの書き込みは行われない。
次に、6番目の一連のデータが12セクタであり、5番目の一連のデータと4番目の一連のデータがそれぞれ8セクタであり、6番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#45なので、3番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#17(=45−12−8−8)であることが分かる。
PSN#17の物理セクタ領域60に対応する分割冗長領域70に書き込まれているSLSN/SCNT#0(#5/5)に基づいて、3番目の一連のデータに対応する論理アクセス領域がLSN#5−#9の論理セクタ領域であり、3番目の一連のデータが5セクタのデータであることが分かる。更に、3番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#17なので、3番目の一連のデータがPSN#13−#17の物理セクタ領域60に書き込まれていることが分かる。従って、LSN#5−#9に対してPSN#13−#17が対応することが分かる。
LSN#7−#9に対応する有効フラグは、既に“1”に変更されているので、このLSNとPSNの対応関係に基づいて、図5(B)に示したようにLSN#5−#6に対応するPSNを書き込む領域に#13−#14が順番に書き込まれ、LSN#5−#6に対応する有効フラグが“0”から“1”に変更される。
PSN#17の物理セクタ領域60に対応する分割冗長領域70に書き込まれているSLSN/SCNT#1(#0/3)に基づいて、2番目の一連のデータに対応する論理アクセス領域がLSN#0−#2の論理セクタ領域であり、2番目の一連のデータが3セクタのデータであることが分かる。更に、2番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#12なので、2番目の一連のデータがPSN#10−#12の物理セクタ領域60に書き込まれていることが分かる。従って、LSN#0−#2に対してPSN#10−#12が対応することが分かる。
このLSNとPSNの対応関係に基づいて、図5(B)に示したようにLSN#0−#2に対応するPSNを書き込む領域に#10−#12が順番に書き込まれ、LSN#0−#2に対応する有効フラグが“0”から“1”に変更される。
PSN#17の物理セクタ領域60に対応する分割冗長領域70に書き込まれているSLSN/SCNT#2(#3/10)に基づいて、1番目の一連のデータに対応する論理アクセス領域がLSN#3−#12の論理セクタ領域であり、1番目の一連のデータが10セクタのデータであることが分かる。更に、1番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNが#9なので、1番目の一連のデータがPSN#0−#9の物理セクタ領域60に書き込まれていることが分かる。従って、LSN#3−#12に対してPSN#0−#9が対応することが分かる。
LSN#5−#12に対応する有効フラグは、既に“1”に変更されているので、このLSNとPSNの対応関係に基づいて、図5(B)に示したようにLSN#3−#4に対応するPSNを書き込む領域に#0−#1が順番に書き込まれ、LSN#3−#4に対応する有効フラグが“0”から“1”に変更される。
尚、3番目の一連のデータの末尾データが書き込まれている物理セクタ領域60のPSNである#17から3番目の一連のデータから1番目の一連のデータまでの3つの一連のデータのセクタ数の総和(5+3+10=18)を引くと−1(つまり負の数)になるため、1番目の一連のデータより前に書き込まれた一連のデータは無いことが分かる。
以上が、第1の実施形態についての説明である。
第1の実施形態によれば、一連のデータが書き込まれる場合、その一連のデータが書き込まれる物理セクタ領域と対応する分割冗長領域70に、その一連のデータに対応するSLSN/SCNTと共に、直近(X−1)回前までの書き込み処理でそれぞれ書き込まれた一連のデータに対応するSLSN/SCNTが書き込まれる。これにより、或る一つの分割冗長領域70を参照すれば、その分割冗長領域70に対応する物理セクタ領域に書き込まれている一連のデータと、この一連のデータの書き込み処理を基準として直近(X−1)回前までの書き込み処理でそれぞれ書き込まれた一連のデータとについて、一連のデータと論理アクセス領域との対応関係を把握することができ、更に、この対応関係に基づいて論理セクタ領域と物理セクタ領域の対応関係を把握することができる。つまり、累積的に書き込まれたSLSN/SCNTに基づいて、論理セクタ領域と物理セクタ領域の対応関係を示すセクタ情報テーブルを効率良く作成することができる。
また、第1の実施形態によれば、セクタ情報テーブルを作成するときに、作成対象の物理ブロックに最後に書き込まれた一連のデータを判別し、この一連のデータが書き込まれている物理セクタ領域に対応する分割冗長領域70に書き込まれている最大X組のSLSN/SCNTに基づいて、その最後に書き込まれた一連のデータ及びこの一連のデータの書き込み処理を基準として直近(X−1)回前までの書き込み処理でそれぞれ書き込まれた(X−1)個の一連のデータ(つまり最大X個の一連のデータ)と論理アクセス領域の対応関係が識別される。この処理で上記対応関係を識別することができない一連のデータが残った場合には、残った一連のデータの中で最後に書き込まれた一連のデータを識別し、この一連のデータが書き込まれている物理セクタ領域に対応する分割冗長領域70に書き込まれている最大X組のSLSN/SCNTに基づいて、その一連のデータを含む最大X個の一連のデータについて、一連のデータと論理アクセス領域の対応関係を識別する。このような処理を、上記対応関係を識別することができない一連のデータが無くなるまで繰返す。
言い換えれば、セクタ情報テーブルを作成するときに、作成対象の物理ブロックに書き込まれている一連のデータは、1個又は複数個のグループにグループ分けされる。ここで、グループ内で最後に書き込まれた一連のデータが記憶されている物理セクタ領域に対応する分割冗長領域70に記憶されている最大X組のSLSN/SCNTに基づいて、そのグループに含まれる一連のデータと論理アクセス領域の対応関係が全て識別できるようにグループ分けが行われる。より具体的に言えば、グループに含まれる一連のデータと論理アクセス領域の対応関係が全て識別でき、他のグループに含まれる一連のデータと論理アクセス領域の対応関係が識別できないようにグループ分けが行われる。又、このグループ分けは、セクタ情報テーブルの作成対象の物理ブロックに最後に書き込まれた一連のデータの方から行われる。
このようにグループ分けすることにより、SLSN/SCNTの読出し元となる分割冗長領域70の数を、上記のグループの数にすることができる。
更に、一連のデータと論理アクセス領域の対応関係に基づいて、一連のデータが記憶されている物理セクタ領域と対応する論理セクタ領域が識別される。ここで、同じ論理セクタ領域に対応する物理セクタ領域が複数個存在する場合には、後から書き込まれた一連のデータに関する物理セクタ領域と論理セクタ領域の対応関係が優先される。別の言い方をすれば、後から書き込まれた一連のデータに関する一連のデータと論理アクセス領域の対応関係が優先される。具体的には、対応する論理アクセス領域が同一又は重複する一連のデータが複数存在する場合には、同じLSNに対応するPSNが複数存在する。このような場合は、後から書き込まれた一連のデータが記憶されている物理セクタ領域のPSNが先にセクタ情報テーブルに書き込まれ、そのPSNと同じLSNに対応する別のPSNで上書きされることが無い。従って、作成されたセクタ情報テーブルを参照すれば、それぞれの論理セクタ領域に対応する最新のデータが記憶されている物理セクタ領域が分かる。
<第2の実施の形態>。
以下、本発明の第2の実施形態を説明する。その際、第1の実施形態との相違点を主に説明し、第1の実施形態との共通点については説明を省略或いは簡略する。
第2の実施の形態では、ページ単位(1個の物理ページを構成する複数個の物理セクタ領域単位)で論理ブロックに含まれる論理セクタ領域(例えば256個の論理セクタ領域)と物理ブロックに含まれる物理セクタ領域(例えば256個の物理セクタ領域)との対応関係を管理する。
図6は、LBN#0の論理ブロックと対応関係にあるPBA#24の物理ブロックに保存されている一連のデータを示している。以下の説明で、各物理ブロック内の物理ページに付けた通し番号を物理ページ番号(PPN)と言う。又、各論理ブロック内の論理セクタ領域を1個の物理ページに含まれるユーザ領域25のセクタ数単位でまとめたものを論理ページとし、この論理ページに付けた通し番号を論理ページ番号(LPN)と言う。また、図6において、D#zは、LSN#zの論理セクタ領域と対応するデータを示している(例えば、D#4は、LSN#4の論理セクタ領域と対応するデータを示している)。
本実施の形態では、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が小さい方から順番に割り当てられる。
図6に示した1番目の一連のデータは、書き込み先として指示された領域のLBAが#4−#26であり、この領域は、LBN#0の論理ブロック内のLSN#4−#26の論理セクタ領域に対応する。従って、PPN#0の物理ページには、LPN#1の論理ページに対応するデータが書き込まれ、PPN#1の物理ページには、LPN#2の論理ページに対応するデータが書き込まれ、PPN#2の物理ページには、LPN#3の論理ページに対応するデータが書き込まれ、PPN#3の物理ページには、LPN#4の論理ページに対応するデータが書き込まれ、PPN#4の物理ページには、LPN#5の論理ページに対応するデータが書き込まれ、PPN#5の物理ページには、LPN#6の論理ページに対応するデータが書き込まれる。ここで、各論理ページ内でLSNが一番小さい論理セクタ領域(LSN#4,#8,#12・・・の論理セクタ領域)に対応するデータは、第1物理セクタ領域60aに書き込まれる。各論理ページ内でLSNが2番目に小さい論理セクタ領域(LSN#5,#9,#13・・・の論理セクタ領域)に対応するデータは、第2物理セクタ領域60bに書き込まれる。各論理ページ内でLSNが3番目に小さい論理セクタ領域(LSN#6,#10,#14・・・の論理セクタ領域)に対応するデータは、第3物理セクタ領域60cに書き込まれる。各論理ページ内でLSNが一番大きい論理セクタ領域(LSN#7,#11,#15・・・の論理セクタ領域)に対応するデータは、第4物理セクタ領域60dに書き込まれる。
また、3番目の一連のデータは、書き込み先として指示された領域のLBAが#14−#27であり、この領域は、LBN#0の論理ブロック内のLSN#14−#27の論理セクタ領域に対応する。ここで、LPN#3の論理ページに対応するデータについては、LSN#14−#15の論理セクタ領域に対応するデータだけがホストシステムから与えられる。このような場合に、この物理ブロック内にLSN#12−#13の論理セクタ領域に対応するデータが記憶されている場合は、この物理ブロック内に記憶されているLSN#12−#13の論理セクタ領域に対応するデータ(複数存在する場合には、後から書き込まれた方のデータ)が第1物理セクタ領域60aと第2物理セクタ領域60bに複写される。つまり、PPN#2の物理ページの第1物理セクタ領域60aに記憶されているLSN#12の論理セクタ領域に対応するデータが、PPN#9の物理ページの第1物理セクタ領域60aに複写され、PPN#2の物理ページの第2物理セクタ領域60bに記憶されているLSN#13の論理セクタ領域に対応するデータが、PPN#9の物理ページの第2物理セクタ領域60bに複写される。
また、4番目の一連のデータは、書き込み先として指示された領域のLBAが#0−#13であり、この領域は、LBN#0の論理ブロック内のLSN#0−#13の論理セクタ領域に対応する。ここで、LPN#3の論理ページに対応するデータについては、LSN#12−#13の論理セクタ領域に対応するデータだけがホストシステムから与えられる。このような場合も上記と同様に、PPN#9の物理ページの第3物理セクタ領域60cに記憶されているLSN#14の論理セクタ領域に対応するデータが、PPN#16の物理ページの第3物理セクタ領域60cに複写され、PPN#9の物理ページの第4物理セクタ領域60dに記憶されているLSN#15の論理セクタ領域に対応するデータが、PPN#16の物理ページの第4物理セクタ領域60dに複写される。
このような複写処理を行うことにより、各論理ページ内の一部の論理セクタ領域に対応するデータが抜けている一連のデータが書き込まれる場合でも、物理ページ単位で後から書き込まれたデータを有効なデータとして取り扱うことができる。
次に、図7を参照して、論理ブロックに含まれる論理ページと物理ブロックに含まれる物理ページとの対応関係の管理について説明する。本実施形態では、アクセス対象の論理ページ(一連のデータの先頭データに対応する論理セクタ領域が属する論理ページから一連のデータの末尾データに対応する論理セクタ領域が属する論理ページまでの1個または複数個の論理ページ)を論理アクセスページと言う。また、一連のデータの先頭データに対応する論理セクタ領域が属する論理ページのLPNをスタート論理ページ番号(SLPN)で表し、論理アクセスページに含まれる論理ページの個数をページカウンタ(PCNT)で表す。SLPN及びPCNTの組を「SLPN/PCNT」と表す。
本実施の形態では、SLPN/PCNTは、分割冗長領域70ではなく共通冗長領域50に累積的に書き込まれる。このため、共通冗長領域50のサイズを、第1の実施形態での共通冗長領域50より大きくし(例えば、共通冗長領域50のサイズを、8バイトから16バイトに変更し)、各分割冗長領域70のサイズを、第1の実施形態での分割冗長領域70より小さくする(例えば、各分割冗長領域70のサイズを、14バイトから12バイトに変更する)。また、一つの物理ページに対応した共通冗長領域50に書込むことができるSLPN/PCNTの最大組数X´(X´は1以上の整数)を、図7に例示するように、X´=5とする。
スタート論理ページ番号(SLPN)及びページカウンタ(PCNT)は、一連のデータと対応する論理アクセスページを特定(識別)するための情報であり、一連のデータ毎に設定される。一連のデータが書き込まれた物理ページに対応する共通冗長領域50には、SLPN/PCNTが累積的に書き込まれ、各一連のデータに対して設定されたSLPN/PCNTに基づいて、論理ページと物理ページの対応関係を示したページ情報テーブルが作成される。
第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ビットに対応する。
次に、スタート論理ページ番号(SLPN)及びページカウント(PCNT)の求め方を説明する。本実施の形態で用いたNAND型フラッシュメモリでは、LBAレジスタR3に書き込まれたLBAの下位8ビットが、一連のデータの先頭データに対応する論理セクタ領域のLSNに対応する。更に、このLSNの上位6ビットの値が、一連のデータの先頭データに対応する論理セクタ領域が属する論理ページのLPNであるSLPNの値に対応する。つまり、一連のデータの先頭データに対応する論理セクタ領域が属する論理ページのLPNがSLPNに対応する。
また、一連のデータの末尾データに対応する論理セクタ領域のLSNは、LBAの下位8ビットに対応するLSNにセクタ数レジスタR2に書き込まれたセクタ数の値を足し、1を引いた値に対応する。この値が255以下であれば、一連のデータは1個の物理ブロックに属している。更に、この8ビットの値の上位6ビットの値が一連のデータの末尾データに対応する論理セクタ領域が属する論理ページのLPNであるエンド論理ページ番号(ELPN)に対応する。つまり、一連のデータの末尾データに対応する論理セクタ領域が属する論理ページのLPNがELPNに対応する。このELPNからSLPNを引き、1を足すことによってPCNTが求められる。
尚、LSNにセクタ数レジスタR2に書き込まれたセクタ数の値を足し、1を引いた値が256以上の場合、論理アクセスページが複数個の論理ブロックに跨っているため、この一連のデータは論理ブロック毎に分割され、最初の論理ブロックに対応する一連のデータのエンド論理ページ番号(ELPN)は、論理ブロック内の末尾の論理ページのLPNである#63に対応する。
論理アクセスページが属する論理ブロックのLBNは、LBAレジスタR3に書き込まれたLBAからLSNを示すビット(本実施の形態では下位8ビット)を除いた上位側のビットの値に対応する。尚、論理アクセス領域が2個の論理ブロックに跨っている場合は、LBAからLSNを示すビットを除いた上位側のビットによって与えられる値に、1を足して得られた値が、2個目の論理ブロックのLBNに対応する。
LBAレジスタR3に書き込まれたLBAに基づいて求められたLBNに対応するPBAは、アドレス変換テーブルを用いて求められる。一連のデータの書き込みは、求めたPBAに対応する物理ブロック内のデータが書き込まれていない先頭の物理ページから開始される。
尚、以下の2つのいずれかに該当する場合には、空きブロック検索が行われ、空きブロック検索で求められた物理ブロックに一連のデータが書き込まれる。
(1)求めたLBNの論理ブロックに対応する物理ブロックがない場合。
(2)求めたLBNの論理ブロックに対応する物理ブロックは存在するが、当該論理ブロック内にデータを書き込むために十分な空き領域(データが書き込まれていない物理ページ)が無い場合。
一連のデータは、物理ブロック内の先頭側の物理ページから末尾側の物理ページに向かって順次書き込まれていく。即ち、メモリコントローラ3は、PPNの値の小さい物理ページから順に一連のデータを書き込んでいく。
また、一連のデータが書き込まれた物理ページの共通冗長領域50には、その一連のデータに関するSLPN/PCNTの値が書き込まれる。
図6に示した例では、PBA#24の物理ブロックに4つの一連のデータが保存されている。この4つの一連のデータの書き込み処理について、具体的に説明をする。なお、SLPN/PCNTの累積的な書込みについては、後に、図7を参照して説明する。
(1番目の一連のデータの書き込み処理)。
まず、ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に4が、セクタ数レジスタR2に23が書き込まれる。メモリコントローラ3は、LBAレジスタR3に書き込まれたLBA#4とセクタ数レジスタR2に書き込まれた値23とから、この一連のデータの書き込み先として指示された領域がLBA#4−#26の範囲(つまり、LBA#4を先頭としLBA#26を末尾とした23セクタ分の範囲)であり、この領域がLBN#0の論理ブロックに含まれ、複数の論理ブロックに跨っていないと判断する。即ち、一連のデータは単一の物理ブロックに保存されると判断する。
LBN#0の論理ブロックは、LZN#0の論理ゾーンに属し、LZN#0の論理ゾーンはPZN#0の物理ゾーンに割り当てられている。メモリコントローラ3は、LBN#0の論理ブロックに対応する物理ブロックが無いため、PZN#0の物理ゾーンから空ブロックを検索し、例えば、空きブロックとしてPBA#24の物理ブロックを検出する。尚、LBN#0の論理ブロックに対応するデータが保存されている物理ブロックが既にあり、この物理ブロックに、この一連のデータを書き込むことができる場合には、空きブロック検索は行なわず、この物理ブロックのデータが書き込まれていない物理ページに、この一連のデータが書き込まれる。
次に、この一連のデータに対応する論理アクセスページついて説明する。LBAレジスタR3に書き込まれたLBAの下位8ビットの値と、このLBAの下位8ビットにセクタ数レジスタR2に書き込まれた値を足し、1を引いた値とから、この一連のデータがLSN#4−#26の論理セクタ領域に対応することが分かる。ここで、この8ビットのLSNの上位6ビットがLPNに対応するので、LSN#4の論理セクタ領域が属する論理ページのLPNが#1であり、LSN#26の論理セクタ領域が属する論理ページのLPNが#6であることが分かる。従って、この一連のデータに対応する論理アクセスページは、LPNが#1−#6の論理ページに対応する。また、この論理アクセスページを特定(識別)するための情報であるSLPN/PCNTは“#1/6”になる。
メモリコントローラ3は、LSN#4−#26の論理セクタ領域に対応する一連のデータを、PBA#24の物理ブロック内のPPN#0の物理ページの第1の物理セクタ領域60aからPPN#5の物理ページの第3の物理セクタ領域60cまでの領域、つまり、PSN#0−#22の物理セクタ領域60に書き込む。
(2番目の一連のデータの書き込み処理)。
ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に0が、セクタ数レジスタR2に12が書き込まれる。メモリコントローラ3は、LBAレジスタR3に書き込まれたLBA#0とセクタ数レジスタR2に書き込まれた値12とから、この一連のデータの書き込み先として指示された領域がLBA#0−#11の範囲であり、この領域がLBN#0の論理ブロックに含まれ、複数の論理ブロックに跨っていないと判断する。即ち、一連のデータは単一の物理ブロックに保存されると判断する。
また、メモリコントローラ3は、論理ブロックと物理ブロックの対応関係を記述したアドレス変換テーブルに基づいて、LBN#0の論理ブロックがPBA#24の物理ブロックに対応していることを判別する。続いて、PBA#24の物理ブロック内のデータが書き込まれていない物理ページの先頭を検索する空きページ検索が行われる。空きページ検索の終了後、物理ブロック内のデータが書き込まれていない物理ページの先頭であるPPN#6の物理ページから、この一連のデータの書き込みが開始される。
次に、この一連のデータに対応する論理アクセスページについて説明する。LBAレジスタR3に書き込まれたLBAの下位8ビットの値と、このLBAの下位8ビットにセクタ数レジスタR2に書き込まれた値を足し、1を引いた値とから、この一連のデータがLSN#0−#11の論理セクタ領域に対応することが分かる。ここで、この8ビットのLSNの上位6ビットがLPNに対応するので、LSN#0の論理セクタ領域が属する論理ページのLPNが#0であり、LSN#11の論理セクタ領域が属する論理ページのLPNが#2であることが分かる。従って、この一連のデータに対応する論理アクセスページは、LPNが#0−#2の論理ページに対応する。また、この論理アクセスページを特定(識別)するための情報であるSLPN/PCNTは“#0/3”になる。
メモリコントローラ3は、LSN#0−#11の論理セクタ領域に対応する一連のデータを、PBA#24の物理ブロック内のPPN#6の物理ページの第1の物理セクタ領域60aからPPN#8の物理ページの第4の物理セクタ領域60dまでの領域、つまり、PSN#24−#35の物理セクタ領域60に書き込む。
(3番目の一連のデータの書き込み処理)。
まず、ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に14が、セクタ数レジスタR2に14が書き込まれる。メモリコントローラ3は、LBAレジスタR3に書き込まれたLBA#14とセクタ数レジスタR2に書き込まれた値14とから、この一連のデータの書き込み先として指示された領域がLBA#14−#27の範囲であり、この領域がLBN#0の論理ブロックに含まれ、複数の論理ブロックに跨っていないと判断する。即ち、一連のデータは単一の物理ブロックに保存されると判断する。
また、メモリコントローラ3は、論理ブロックと物理ブロックの対応関係を記述したアドレス変換テーブルに基づいて、LBN#0の論理ブロックがPBA#24の物理ブロックに対応していることを判別する。続いて、PBA#24の物理ブロック内のデータが書き込まれていない物理ページの先頭を検索する空きページ検索が行われる。空きページ検索の終了後、物理ブロック内のデータが書き込まれていない物理ページの先頭であるPPN#9の物理ページから、この一連のデータの書き込みが開始される。
次に、この一連のデータに対応する論理アクセスページについて説明する。LBAレジスタR3に書き込まれたLBAの下位8ビットの値と、このLBAの下位8ビットにセクタ数レジスタR2に書き込まれた値を足し、1を引いた値とから、この一連のデータがLSN#14−#27の論理セクタ領域に対応することが分かる。ここで、この8ビットのLSNの上位6ビットがLPNに対応するので、LSN#14の論理セクタ領域が属する論理ページのLPNが#3であり、LSN#27の論理セクタ領域が属する論理ページのLPNが#6であることが分かる。従って、この一連のデータに対応する論理アクセスページは、LPNが#3−#6の論理ページに対応する。また、この論理アクセスページを特定(識別)するための情報であるSLPN/PCNTは“#3/4”になる。
メモリコントローラ3は、LSN#14−#24の論理セクタ領域に対応する一連のデータを、PBA#24の物理ブロック内のPPN#9の物理ページの第3の物理セクタ領域60cからPPN#12の物理ページの第4の物理セクタ領域60dまでの領域、つまり、PSN#38−#51の物理セクタ領域60に書き込む。
尚、PPN#9の物理ページにLPN#3の論理ページに対応するデータ(LSN#14−#15の論理セクタ領域に対応するデータ)を書き込む際に、LPN#3の論理ページに対応するデータが書き込まれているPPN#2の物理ページの第1の物理セクタ領域60aと第2の物理セクタ領域60bに記憶されているデータが、PPN#9の物理ページの第1の物理セクタ領域60aと第2の物理セクタ領域60bには、それぞれ複写される。
また、このように一連のデータの先頭データ又は末尾データが書き込まれる物理ページに、この一連のデータより前に書き込まれた一連のデータに含まれているデータを複写する場合、複写するデータが書き込まれている物理ページのPPNは、後述するページ情報テーブルを参照することにより求められる。
(4番目の一連のデータの書き込み処理)。
まず、ホストシステム4により、コマンドレジスタR1に書き込みコマンドのコマンドコードが、LBAレジスタR3に0が、セクタ数レジスタR2に14が書き込まれる。メモリコントローラ3は、LBAレジスタR3に書き込まれたLBA#0とセクタ数レジスタR2に書き込まれた値14とから、この一連のデータの書き込み先として指示された領域がLBA#0−#13の範囲であり、この領域がLBN#0の論理ブロックに含まれ、複数の論理ブロックに跨っていないと判断する。即ち、一連のデータは単一の物理ブロックに保存されると判断する。
また、メモリコントローラ3は、論理ブロックと物理ブロックの対応関係を記述したアドレス変換テーブルに基づいて、LBN#0の論理ブロックがPBA#24の物理ブロックに対応していることを判別する。続いて、PBA#24の物理ブロック内のデータが書き込まれていない物理ページの先頭を検索する空きページ検索が行われる。空きページ検索の終了後、物理ブロック内のデータが書き込まれていない物理ページの先頭であるPPN#13の物理ページから、この一連のデータの書き込みが開始される。
次に、この一連のデータに対応する論理アクセスページについて説明する。LBAレジスタR3に書き込まれたLBAの下位8ビットの値と、このLBAの下位8ビットにセクタ数レジスタR2に書き込まれた値を足し、1を引いた値とから、この一連のデータがLSN#0−#13の論理セクタ領域に対応することが分かる。ここで、この8ビットのLSNの上位6ビットがLPNに対応するので、LSN#0の論理セクタ領域が属する論理ページのLPNが#0であり、LSN#13の論理セクタ領域が属する論理ページのLPNが#3であることが分かる。従って、この一連のデータに対応する論理アクセスページは、LPNが#0−#3の論理ページに対応する。また、この論理アクセスページを特定(識別)するための情報であるSLPN/PCNTは“#0/4”になる。
メモリコントローラ3は、LSN#0−#13の論理セクタ領域に対応する一連のデータを、PBA#24の物理ブロック内のPPN#13の物理ページの第1の物理セクタ領域60aからPPN#16の物理ページの第2の物理セクタ領域60bまでの領域、つまり、PSN#52−#65の物理セクタ領域60に書き込む。
尚、PPN#16の物理ページにLPN#3の論理ページに対応するデータ(LSN#12−#13の論理セクタ領域に対応するデータ)を書き込む際に、LPN#3の論理ページに対応するデータが書き込まれているPPN#9の物理ページの第3の物理セクタ領域60cと第4の物理セクタ領域60dに記憶されているデータが、PPN#16の物理ページの第3の物理セクタ領域60cと第4の物理セクタ領域60dには、それぞれ複写される。
また、LPN#3の論理ページに対応するデータは、PPN#2の物理ページとPPN#9の物理ページに書き込まれているが、後述するページ情報テーブルを参照して、LPN#3の論理ページに対応するデータが書き込まれる物理ページのPPNを求めれば、LPN#3の論理ページに対応する新しい方のデータが書き込まれている物理ページのPPNが求められる。
以上のように、一連のデータは、物理ブロック内のPPNが小さい方の物理ページから順番に書き込まれる。従って、一連のデータを書き込むときは、後述の空きページ検索、すなわち、書き込み先の物理ブロック内のデータが書き込まれていない物理ページの先頭(データが書き込まれていない物理ページの中でPPNが一番小さい物理ページ)の検索が行われ、検出された物理ページから順番に一連のデータが書き込まれる。
<<空きページ検索>>。
空きページ検索については、二分木検索又は二分木検索とセクタポインタ情報を組み合わせた検索を用いる。
「ページポインタ情報」は、一連のデータの末尾データが書き込まれる物理ページのPPNを示す情報であり、一連のデータが書き込まれる物理ページと対応する共通冗長領域50に書き込まれる。例えば、図6のPPN#0−#5の物理ページと対応する共通冗長領域50には、ページポインタ情報として#5を示す情報が書き込まれ、PPN#6−#8の物理ページと対応する共通冗長領域50には、ページポインタ情報として#8を示す情報が書き込まれ、以下同様に、PSN#13−#16の物理ページと対応する共通冗長領域50には、ページポインタ情報として#16を示す情報が書き込まれる。
検索を開始する時には、検索範囲の先頭を示す先頭位置情報と末尾を示す末尾位置情報が設定される。本実施の形態では、先頭位置情報として#0が設定され、末尾位置情報として#64(PPNの最大値+1)が設定される。
検索では、先頭位置情報として設定されている値と末尾位置情報として設定されている値の中間点を算出し、PPNの値が算出した値に一致する物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。ここで、共通冗長領域50に有効なページポインタ情報が書き込まれていた場合は、ページポインタ情報として書き込まれていた値を新たな先頭位置情報として設定する。一方、共通冗長領域50に有効なページポインタ情報が書き込まれていなかった場合は、算出した値を新たな末尾位置情報として設定する。先頭位置情報として設定されている値と末尾位置情報として設定されている値の差が1になったとき、PPNの値が末尾位置情報として設定されている値に一致した物理ページが、データが書き込まれていない物理ページの先頭に対応する。
例えば、図6では、最初にPPN#32の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50には有効なページポインタ情報が書き込まれていないので、末尾位置情報として#32を設定する。次に、PPN#16の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50には有効なページポインタ情報が書き込まれていないので、末尾位置情報として#32を設定する。次に、PPN#16の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50にはページポインタ情報として#16が書き込まれているので、先頭位置情報として#16を設定する。次に、PPN#24の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50には有効なページポインタ情報が書き込まれていないので、末尾位置情報として#24を設定する。次に、PPN#20の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50には有効なページポインタ情報が書き込まれていないので、末尾位置情報として#20を設定する。次に、PPN#18の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50には有効なページポインタ情報が書き込まれていないので、末尾位置情報として#18を設定する。次に、PPN#17の物理ページと対応する共通冗長領域50からページポインタ情報を読み出す。この共通冗長領域50には有効なページポインタ情報が書き込まれていないので、末尾位置情報として#17を設定する。ここで、先頭位置情報として設定されている値(PPN#16)と末尾位置情報として設定されている値(PPN#17)の差が1になったので、PPN#17の物理ページが、データが書き込まれていない物理ページの先頭に対応する。
尚、先頭位置情報として設定されている値と末尾位置情報として設定されている値の差が1になったとき、PPNの値が先頭位置情報として設定されている値に一致した物理ページが、データが書き込まれている物理ページの末尾に対応する。
<<SLPN/PCNTの累積的な書込み>>。
図7に示した例では、PBA#25の物理ブロックに8つの一連のデータが保存されている。図7を参照して、SLPN/PCNTの累積的な書き込み処理について説明をする。
共通冗長領域50には、SLPN/PCNTを複数組書込むことが可能であり、一連のデータの書込みに応じて、SLPN/PCNTが累積的に書込まれる。具体的には、例えば、共通冗長領域50に書込めるSLPN/PCNTの最大組数がX´組(X´は2以上の整数)に設定されている場合、今回の一連のデータが書き込まれる物理ページに対応した共通冗長領域50には、今回の一連のデータに対応したSLPN/PCNT及び直近(X´−1)回前までの書き込み処理で書き込まれた一連のデータに対応したSLPN/PCNTが書き込まれる。より具体的には、一連のデータが書き込まれる場合、その一連のデータが書き込まれる物理ページと対応する共通冗長領域50には、その一連のデータに対応するSLPN/PCNTと共に、直近(X´−1)回前までの書き込み処理でそれぞれ書き込まれた一連のデータに対応するSLPN/PCNTが書き込まれる。つまり、各共通冗長領域50には、最大X´組のSLPN/PCNTが書き込まれる。一連のデータを書き込むときに、その書き込み先の物理ブロックに既に書き込まれている一連のデータの個数が(X´−1)個よりも少ない場合には、共通冗長領域50に書き込まれるSLPN/PCNTの組数は、X´組(分割冗長領域70に書込めるSLPN/PCNTの最大組数)よりも少なくなる。
図7の例で言えば、各共通冗長領域50に5個のSLPN/PCNTを書込むことが可能である。このため、各共通冗長領域50には、今回の書き込み処理で書き込まれる一連のデータ(以下、「今回の一連のデータ」と言う。)に対応するSLPN/PCNT(以下、SLPN/PCNT#0)と、1回前の書き込み処理で書き込まれた一連のデータ(以下、「1回前の一連のデータ」と言う。)に対応するSLPN/PCNT(以下、SLPN/PCNT#1)と、2回前の書き込み処理で書き込まれた一連のデータ(以下、「2回前の一連のデータ」と言う。)に対応するSLPN/PCNT(以下、SLPN/PCNT#2)と、3回前の書き込み処理で書き込まれた一連のデータ(以下、「3回前の一連のデータ」と言う。)に対応するSLPN/PCNT(以下、SLPN/PCNT#3)と、4回前の書き込み処理で書き込まれた一連のデータ(以下、「4回前の一連のデータ」と言う。)に対応するSLPN/PCNT(以下、SLPN/PCNT#4)とが書き込まれる。この結果、例えば、PBA#25の物理ブロックに対する5回目の書き込み処理で一連のデータ(5番目の一連のデータ)が書き込まれる場合、その一連のデータが書き込まれる物理セクタ領域と対応する共通冗長領域50には、その一連のデータに対応するSLPN/PCNTであるSLPN/PCNT#0“#7/2”(SLPNが#7でPCNTが2であることを表す。)と共に、1回前の一連のデータ(4番目の一連のデータ)に対応するSLPN/PCNTであるSLPN/PCNT#1“#5/4”と、2回前の一連のデータ(3番目の一連のデータ)に対応するSLPN/PCNTであるSLPN/PCNT#2“#9/4”と、3回前の一連のデータ(2番目の一連のデータ)に対応するSLPN/PCNTであるSLPN/PCNT#3“#0/2”と、4回前の一連のデータ(1番目の一連のデータ)に対応するSLPN/PCNTであるSLPN/PCNT#4“#3/4”とが書き込まれる。なお、4回前の書き込み処理よりも前の回の書き込み処理で書き込まれた一連のデータに対応したSLPN/PCNTは、今回の一連のデータが書き込まれる物理ページと対応する共通冗長領域50には書込まれない。なぜなら、この例では、共通冗長領域50に書込めるSLPN/PCNTの最大組数(X´)を5組に設定しているためである。
図7に示した例では、PBA#25の物理ブロックに8つの一連のデータが保存されているが、それぞれの一連のデータについて、SLPN/PCNTの書込みを説明すると、以下の通りである(なお、一連のデータの書込み処理については、図6を参照して詳細に説明しているので、以下の説明では、その点は省略或いは簡略する)。
(1番目の一連のデータの書き込み処理)
論理アクセスページがLPN#3−#6の論理ページに対応する1番目の一連のデータは、PPN#0−#3の物理ページに書き込まれる。この際、PPN#0−#3の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として“#3/4”が書き込まれる。
(2番目の一連のデータの書き込み処理)
今回の書き込み処理で書き込まれる一連のデータは、2番目の一連のデータなので、今回の一連のデータが書き込まれるPPN#4−#5の物理ページに対応する全ての共通冗長領域50には、2番目の一連のデータに対応する論理アクセスページを特定(識別)する情報と共に、1回前の一連のデータ(1番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報が書き込まれる。つまり、PPN#4−#5の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として2番目の一連のデータに対応する論理アクセスページを特定(識別)する情報である“#0/2”が書き込まれ、SLPN/PCNT#1として1番目の一連のデータに対応する論理アクセスページを特定(識別)する情報である“#3/4”が書き込まれる。
(3番目の一連のデータの書き込み処理)
今回の書き込み処理で書き込まれる一連のデータは、3番目の一連のデータなので、今回の一連のデータが書き込まれるPPN#6−#9の物理ページに対応する全ての共通冗長領域50には、3番目の一連のデータに対応する論理アクセス領域を特定(識別)する情報と共に、1回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報と、2回前一連のデータ(1番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報とが書き込まれる。つまり、PPN#6−#9の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として、3番目の一連のデータに対応する論理アクセスページを特定(識別)する情報である“#9/4”が書き込まれ、SLPN/PCNT#1として、2番目の一連のデータに対応する論理アクセスページを特定(識別)する情報である“#0/2”が書き込まれ、SLPN/PCNT#2として、1番目の一連のデータに対応する論理アクセスページを特定(識別)する情報である“#3/4”が書き込まれる。
(4番目の一連のデータの書き込み処理)
今回の一連のデータが書き込まれるPSN#10−#13の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として、今回の一連のデータ(4番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#5/4”が書き込まれ、SLPN/PCNT#1として、1回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#9/4”が書き込まれ、SLPN/SCNT#2として、2回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#0/2”が書き込まれ、SLPN/SCNT#3として、3回前の一連のデータ(1番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#3/4”が書き込まれる。
(5番目の一連のデータの書き込み処理)
今回の一連のデータが書き込まれるPSN#14−#15の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として、今回の一連のデータ(5番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#7/2”が書き込まれ、SLPN/PCNT#1として、1回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#5/4”が書き込まれ、SLPN/SCNT#2として、2回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#9/4”が書き込まれ、SLPN/SCNT#3として、3回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#0/2”が書き込まれ、SLPN/SCNT#4として、4回前の一連のデータ(1番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#3/4”が書き込まれる。
(6番目の一連のデータの書き込み処理)
今回の一連のデータが書き込まれるPSN#16−#17の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として、今回の一連のデータ(6番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#10/2”が書き込まれ、SLPN/PCNT#1として、1回前の一連のデータ(5番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#7/2”が書き込まれ、SLPN/PCNT#2として、2回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#5/4”が書き込まれ、SLPN/SCNT#3として、3回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#9/4”が書き込まれ、SLPN/SCNT#4として、4回前の一連のデータ(2番目の一連のデータ)に対応する論理アクセス領域を特定(識別)する情報である“#0/2”が書き込まれる。
(7番目の一連のデータの書き込み処理)
今回の一連のデータが書き込まれるPSN#18−#19の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として、今回の一連のデータ(7番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#4/2”が書き込まれ、SLPN/PCNT#1として、1回前の一連のデータ(6番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#10/2”が書き込まれ、SLPN/PCNT#2として、2回前の一連のデータ(5番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#7/2”が書き込まれ、SLPN/PCNT#3として、3回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#5/4”が書き込まれ、SLPN/SCNT#4として、4回前の一連のデータ(3番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#9/4”が書き込まれる。
(8番目の一連のデータの書き込み処理)
今回の一連のデータが書き込まれるPSN#20−#22の物理ページに対応する全ての共通冗長領域50には、SLPN/PCNT#0として、今回の一連のデータ(8番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#12/3”が書き込まれ、SLPN/PCNT#1として、1回前の一連のデータ(7番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#4/2”が書き込まれ、SLPN/PCNT#2として、2回前の一連のデータ(6番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#10/2”が書き込まれ、SLPN/PCNT#3として、3回前の一連のデータ(5番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#7/2”が書き込まれ、SLPN/PCNT#4として、4回前の一連のデータ(4番目の一連のデータ)に対応する論理アクセスページを特定(識別)する情報である“#5/4”が書き込まれる。
以上の流れにより、PBA#25の物理ブロックに、8つの一連のデータが保存されたことになる。この時点において、データが書き込まれている末尾の物理ページは、PPN#22の物理ページである。
なお、図7に示した例では、累積的に書き込むSLPN/PCNTの最大組数(X´)を5組(X´=5)としたため、SLPN/PCNT#0−#4を共通冗長領域50に書き込んでいるが、累積的に書き込むSLPN/PCNTの最大組数(X´)を2組(X´=2)とした場合には、SLPN/PCNT#2−#4は書き込まれない。一方、例えば、累積的に書き込むSLPN/PCNTの最大組数(X´)を6組(X´=6)とした場合には、更に、5回前の一連のデータに対応する論理アクセスページを特定(識別)する情報(SLPN/PCNT#5)も書き込まれる。
また、一連のデータに対応する論理アクセスページを特定(識別)する情報として、論理アクセスページの先頭ページに対応する論理ページ番号(LPN)を表す情報と論理アクセスページの末尾ページに対応する論理ページ番号(LPN)を表す情報を用いるようにしてもよい。
<<ページ情報テーブルの作成処理>>。
各物理ブロックにアクセスするときには、物理ブロックに含まれる物理ページとこの物理ブロックと対応する論理ブロックに含まれる論理ページとの対応関係を示すページ情報テーブルが作成される。例えば、コマンドレジスタR1に読み出しコマンドのコマンドコードが書き込まれたとき、メモリコントローラ3は、LBAレジスタR3及びセクタ数レジスタR2に書き込まれた情報に基づいて、読み出すデータが記憶されている領域に対応するLBA(セクタ数レジスタR2に書き込まれた値が1の場合)又はLBAが連続する範囲(セクタ数レジスタR2に書き込まれた値が2以上の場合)を判別し、更に、アクセス対象の論理ブロック及び論理ページを判別する。次に、メモリコントローラ3は、アクセス対象の論理ブロックに対応する物理ブロックをアドレス変換テーブルに基づいて判別し、更に、アクセス対象の論理ページに対応する物理ページをページ情報テーブルに基づいて判別する。
ページ情報テーブルを作成するときは、マイクロプロセッサ6によって、ワークエリア8に、LPN#0−#63に対応するPPNを書き込む領域(以下、「ページ情報テーブル作成領域」と言う。)が確保される。
ページ情報テーブル作成領域は、LPN#0−#63の各LPNに関連付けられた有効フラグを設定する領域とPPNを書き込む領域とで構成されている。有効フラグを設定する領域には、テーブル作成を開始する前に、PPNを書き込む領域に書き込まれている値が無効であることを示す情報(例えば論理値“0”)が設定される。テーブル作成が開始されると、各LPNに関連付けられたPPNを書き込む領域には、それぞれのLPNに対応するPPNが書き込まれ、PPNが書き込まれた領域に対応する有効フラグは、書き込まれたPPNが有効であることを示す情報(例えば論理値“1”)に変更される。
このテーブル作成処理では、作成対象の物理ブロックに対して後から書き込まれた一連のデータ側から、一連のデータと論理アクセスページとの対応関係が識別され、一連のデータが書き込まれている物理ページのPPNと論理アクセスページに含まれる論理ページのLPNから、LPNとPPNの対応関係が判別される。このLPNとPPNの対応関係に基づいて、ページ情報テーブル作成領域に対するPPNの書き込みが行われる。
図7に示したように、8つの一連のデータが書き込まれているPBA#25の物理ブロックのページ情報テーブルを作成する場合には、最後に書き込まれた8番目の一連のデータから最初に書き込まれた1番目の一連のデータに向かう順番で、各一連のデータに対応するLPNとPPNの対応関係の判別と、ページ情報テーブル作成領域に対するPPNの書き込みが行われる。
また、8番目の一連のデータが書き込まれている物理ページに対応する共通冗長領域50には、8番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#0として書き込まれ、7番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#1として書き込まれ、6番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#2として書き込まれ、5番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#3として書き込まれ、4番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#4として書き込まれている。3番目の一連のデータが書き込まれている物理ページに対応する共通冗長領域50には、3番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#0として書き込まれ、2番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#1として書き込まれ、1番目の一連のデータに対応するSLPN/PCNTがSLPN/PCNT#2として書き込まれている。従って、例えば、データが書き込まれている末尾の物理ページであるPPN#22の物理ページに対応する共通冗長領域50からSLPN/PCNT#0−#4を読み出し、3番目の一連のデータが書き込まれている物理ページの末尾であるPPN#9の物理ページに対応する共通冗長領域50からSLPN/PCNT#0−#2を読み出すことにより、8番目の一連のデータから1番目の一連のデータまでの各一連のデータに対応するSLPN/PCNTを求めることができる。
図8を参照して、各一連のデータに対応するLPNとPPNの対応関係の判別と、ページ情報テーブル作成領域に対するPPNの書き込みについて説明する。
PPN#22の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#0(#12/3)に基づいて、8番目の一連のデータに対応する論理アクセスページがLPN#12−#14の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが3ページなので、8番目の一連のデータが3ページの物理ページに跨って書き込まれていることが分かる。更に、8番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#22なので、8番目の一連のデータがPPN#20−#22の物理ページに書き込まれていることが分かる。従って、LPN#12−#14に対してPPN#20−#22が対応することが分かる。
このLPNとPPNの対応関係に基づいて、図8(A)に示したように、LPN#12−#14に対応するPPNを書き込む領域に#20−#22が順番に書き込まれ、LPN#12−#14に対応する有効フラグが“0”から“1”に変更される。
PPN#22の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#1(#4/2)に基づいて、7番目の一連のデータに対応する論理アクセスページがLPN#4−#5の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが2ページなので、7番目の一連のデータが2ページの物理ページに跨って書き込まれていることが分かる。更に、7番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#19なので、7番目の一連のデータがPPN#18−#19の物理ページに書き込まれていることが分かる。従って、LPN#4−#5に対してPPN#18−#19が対応することが分かる。
このLPNとPPNの対応関係に基づいて、図8(A)に示したように、LPN#4−#5に対応するPPNを書き込む領域に#18−#19が順番に書き込まれ、LPN#4−#5に対応する有効フラグが“0”から“1”に変更される。
PPN#22の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#2(#10/2)に基づいて、6番目の一連のデータに対応する論理アクセス領域がLPN#10−#11の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが2ページなので、6番目の一連のデータが2ページの物理ページに跨って書き込まれていることが分かる。更に、6番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#17なので、6番目の一連のデータがPPN#16−#17の物理ページに書き込まれていることが分かる。従って、LPN#10−#11に対してPPN#16−#17が対応することが分かる。
このLPNとPPNの対応関係に基づいて、図8(A)に示したように、LPN#10−#11に対応するPPNを書き込む領域に#16−#17が順番に書き込まれ、LPN#10−#11に対応する有効フラグが“0”から“1”に変更される。
PPN#22の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#3(#7/2)に基づいて、5番目の一連のデータに対応する論理アクセス領域がLPN#7−#8の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが2ページなので、5番目の一連のデータが2ページの物理ページに跨って書き込まれていることが分かる。更に、5番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#15なので、5番目の一連のデータがPPN#14−#15の物理ページに書き込まれていることが分かる。従って、LPN#7−#8に対してPPN#14−#15が対応することが分かる。
このLPNとPPNの対応関係に基づいて、図8(A)に示したように、LPN#7−#8に対応するPPNを書き込む領域に#14−#15が順番に書き込まれ、LPN#7−#8に対応する有効フラグが“0”から“1”に変更される。
PPN#22の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#4(#5/4)に基づいて、4番目の一連のデータに対応する論理アクセス領域がLPN#5−#8の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが4ページなので、4番目の一連のデータが4ページの物理ページに跨って書き込まれていることが分かる。更に、4番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#13なので、4番目の一連のデータがPPN#10−#13の物理ページに書き込まれていることが分かる。従って、LPN#5−#8に対してPPN#10−#13が対応することが分かる。
LPN#5−#8のうちLPN#5,#7−#8に対応する有効フラグが、既に“1”に変更されているので、このLPNとPPNの対応関係に基づいて、図8(A)に示したように、LPN#6に対応するPPNを書き込む領域に#11が書き込まれ、LPN#6に対応する有効フラグが“0”から“1”に変更される(LPN#5,#7−#8に対応する有効フラグは、既に“1”に変更されているので、LPN#5,#7−#8に対応するPPN#10,#12−#13の書き込みは行われない)。
次に、3番目の一連のデータの末尾データが書き込まれている物理ページのPPNを特定(識別)する。図7に示した例では、8番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#22で、8番目の一連のデータが3ページの物理ページに跨って書き込まれ、7番目、6番目及び5番目の一連のデータがそれぞれ2ページの物理ページに跨って書き込まれ、4番目の一連のデータが4ページの物理ページに跨って書き込まれているので、3番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#9(=22−3−2−2−2−4)であることが分かる。
PPN#9の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#0(#9/4)に基づいて、3番目の一連のデータに対応する論理アクセス領域がLPN#9−#12の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが4ページなので、3番目の一連のデータが4ページの物理ページに跨って書き込まれていることが分かる。更に、3番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#9なので、3番目の一連のデータがPPN#6−#9の物理ページに書き込まれていることが分かる。従って、LPN#9−#12に対してPPN#6−#9が対応することが分かる。
LPN#9−#12のうちLPN#10−12に対応する有効フラグが、既に“1”に変更されているので、このLPNとPPNの対応関係に基づいて、図8(B)に示したようにLPN#9に対応するPPNを書き込む領域に#6が書き込まれ、LPN#9に対応する有効フラグが“0”から“1”に変更される。
PPN#9の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#1(#0/2)に基づいて、2番目の一連のデータに対応する論理アクセス領域がLPN#0−#1の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが2ページなので、2番目の一連のデータが2ページの物理ページに跨って書き込まれていることが分かる。更に、2番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#5なので、2番目の一連のデータがPPN#4−#5の物理ページに書き込まれていることが分かる。従って、LPN#0−#1に対してPPN#4−#5が対応することが分かる。
このLPNとPPNの対応関係に基づいて、図8(B)に示したようにLPN#0−#1に対応するPPNを書き込む領域に#4−#5が順番に書き込まれ、LPN#0−#1に対応する有効フラグが“0”から“1”に変更される。
PPN#9の物理ページに対応する共通冗長領域50に書き込まれているSLPN/PCNT#2(#3/4)に基づいて、1番目の一連のデータに対応する論理アクセス領域がLPN#3−#6の論理ページであることが分かる。また、論理アクセスページに含まれる論理ページが4ページなので、1番目の一連のデータが4ページの物理ページに跨って書き込まれていることが分かる。更に、1番目の一連のデータの末尾データが書き込まれている物理ページのPPNが#3なので、1番目の一連のデータがPPN#0−#3の物理ページに書き込まれていることが分かる。従って、LPN#3−#6に対してPPN#0−#3が対応することが分かる。
LPN#3−#6のうちLPN#4−6に対応する有効フラグが、既に“1”に変更されているので、このLPNとPPNの対応関係に基づいて、図8(B)に示したようにLPN#3に対応するPPNを書き込む領域に#0が書き込まれ、LPN#3に対応する有効フラグが“0”から“1”に変更される。
尚、SLPN/PCNT#2に対応する一連のデータがPPN#0−#3の物理ページに書き込まれているので、この一連のデータより前に書き込まれた一連のデータは無く、PPN#9の物理ページに対応する共通冗長領域50には、SLPN/PCNT#3−#4が書き込まれていないことが分かる。
以上が、第2の実施形態についての説明である。
第2の実施形態によれば、一連のデータが書き込まれる場合、その一連のデータが書き込まれる物理ページと対応する共通冗長領域50に、その一連のデータに対応するSLPN/PCNTと共に、直近(X´−1)回前までの書き込み処理でそれぞれ書き込まれた一連のデータに対応するSLPN/PCNTが書き込まれる。これにより、或る一つの共通冗長領域50を参照すれば、その共通冗長領域50に対応する物理ページに書き込まれている一連のデータと、この一連のデータの書き込み処理を基準として直近(X´−1)回前までの書き込み処理でそれぞれ書き込まれた一連のデータとについて、一連のデータと論理アクセスページとの対応関係を把握することができ、更に、この対応関係に基づいて論理ページと物理ページの対応関係を把握することができる。つまり、累積的に書き込まれたSLPN/PCNTに基づいて、論理ページと物理ページの対応関係を示すページ情報テーブルを効率良く作成することができる。
また、第2の実施形態によれば、ページ情報テーブルを作成するときに、作成対象の物理ブロックに最後に書き込まれた一連のデータを判別し、この一連のデータが書き込まれている物理ページに対応する共通冗長領域50に書き込まれている最大X´組のSLPN/PCNTに基づいて、その最後に書き込まれた一連のデータ及びこの一連のデータの書き込み処理を基準として直近(X´−1)回前までの書き込み処理でそれぞれ書き込まれた(X´−1)個の一連のデータ(つまり最大X´個の一連のデータ)と論理アクセスページの対応関係が識別される。この処理で上記対応関係を識別することができない一連のデータが残った場合には、残った一連のデータの中で最後に書き込まれた一連のデータを識別し、この一連のデータが書き込まれている物理ページに対応する共通冗長領域50に書き込まれている最大X´組のSLPN/PCNTに基づいて、その一連のデータを含む最大X´個の一連のデータについて、一連のデータと論理アクセスページの対応関係を識別する。このような処理を、上記対応関係を識別することができない一連のデータが無くなるまで繰返す。
言い換えれば、ページ情報テーブルを作成するときに、作成対象の物理ブロックに書き込まれている一連のデータは、1個又は複数個のグループにグループ分けされる。ここで、グループ内で最後に書き込まれた一連のデータが記憶されている物理ページに対応する共通冗長領域50に記憶されている最大X´組のSLPN/PCNTに基づいて、そのグループに含まれる一連のデータと論理アクセスページの対応関係が全て識別できるようにグループ分けが行われる。より具体的に言えば、グループに含まれる一連のデータと論理アクセス領域の対応関係が全て識別でき、他のグループに含まれる一連のデータと論理アクセス領域の対応関係が識別できないようにグループ分けが行われる。又、このグループ分けは、セクタ情報テーブルの作成対象の物理ブロックに最後に書き込まれた一連のデータの方から行われる。
このようにグループ分けすることにより、SLPN/PCNTの読出し元となる共通冗長領域50の数を、上記のグループの数にすることができる。
更に、一連のデータと論理アクセスページの対応関係に基づいて、一連のデータが記憶されている物理ページと対応する論理ページが識別される。ここで、同じ論理ページに対応する物理ページが複数個存在する場合には、後から書き込まれた一連のデータに関する物理ページと論理ページの対応関係が優先される。別の言い方をすれば、後から書き込まれた一連のデータに関する一連のデータと論理アクセスページの対応関係が優先される。具体的には、対応する論理アクセスページが同一又は重複する一連のデータが複数存在する場合には、同じLPNに対応するPPNが複数存在する。このような場合は、後から書き込まれた一連のデータが記憶されている物理ページのPPNが先にページ情報テーブルに書き込まれ、そのPPNと同じLPNに対応する別のPPNで上書きされることが無い。従って、作成されたページ情報テーブルを参照すれば、それぞれの論理ページに対応する最新のデータが記憶されている物理ページが分かる。
以上、本発明の幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
例えば、上記の実施の形態では、論理ブロックに含まれる論理セクタ領域と物理ブロックとに含まれる物理セクタ領域の数は一致していた。しかしながら、論理ブロックに含まれる論理セクタ領域の数を物理ブロックに含まれる物理セクタ領域の数より少なくしてもよい。こうすることで、論理ブロックに含まれる全ての論理セクタ領域に対応するデータを物理ブロックに保存した後であっても、そのデータの書き替えデータを、当該物理ブロックの空き領域(データが書き込まれていない物理セクタ領域又は物理ページ)にデータを保存することができる。これにより効率的なデータの書き換えが可能となる。例えば、論理ブロックに含まれる論理セクタ領域の数と、物理ブロックに含まれる物理セクタ領域の数を、共に2のべき乗で与えられる数にする場合には、論理ブロックに含まれる論理セクタ領域の数を128とし、物理ブロックに含まれる物理セクタ領域の数を256とする。
また、上述した第1(又は第2)の実施形態では、一連のデータに対応する複数の分割冗長領域70(又は複数の共通冗長領域50)の全てに、SLSN/SCNT(又はSLPN/PCNT)が書込まれた。それに代えて、例えば、一連のデータに対応する複数の分割冗長領域70(又は複数の共通冗長領域50)のうちの1以上の特定の(例えば末尾の)分割冗長領域70(又は共通冗長領域50)のみに、SLSN/SCNT(又はSLPN/PCNT)が書込まれてもよい。
また、上述した第1(又は第2)の実施形態では、一連のデータの末尾のデータが記憶されている物理セクタ領域(又は物理ページ)に対応した分割冗長領域70(又は共通冗長領域50)からSLSN/SCNT(又はSLPN/PCNT)が読み出されるが、一連のデータが記憶されている他の物理セクタ領域(又は物理ページ)からSLSN/SCNT(又はSLPN/PCNT)が読み出されてもよい。