以下、本発明の幾つかの実施の形態を、図面を参照しながら詳細に説明する。
<第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個の論理ブロックのいずれかに属している。
更に、この論理ブロックを複数個まとめたものを論理ゾーンとし、この論理ゾーンに通し番号を付している。以下、論理ゾーンに付した通し番号を論理ゾーン番号(LZN)と言う。図3の例では、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の論理ゾーンに振り分けていく。このようにして、1000個の論理ブロックからなる8個の論理ゾーンが形成される。
また、図3の例では、論理ゾーンは形成するが、物理ゾーンは形成しない。そして、どの論理ゾーンであるかに関わらず、各論理ゾーンに対して、全範囲の物理ブロックを割り当てている。従って、論理ゾーンは単なるアドレス変換テーブルの作成単位であり、どの論理ブロックがどの物理ブロックに割り当てられても良い。
このアドレス変換テーブルは、論理ブロックと物理ブロックとの対応関係を記述したテーブルであり、各論理ゾーンに割り当てられている論理ブロックのグループ単位で作成される。このアドレス変換テーブルは、フラッシュメモリ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が小さいほうから順番に)一連のデータが書き込まれていく。従って、一連のデータを書き込むときには、物理ブロック内のデータが書き込まれている物理セクタ領域の末尾の検索が行われる。そして、その末尾の物理セクタ領域60の次の物理セクタ領域60から一連のデータが順次書き込まれていく。言い換えれば、物理ブロック内のデータが書き込まれていない先頭の物理セクタ領域から一連のデータが順次書き込まれていく。
本実施形態では、一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に、論理セクタ領域と物理セクタ領域60の対応関係を示す情報(以下、「セクタ管理情報」と言う)、例えば、論理セクタ領域と物理セクタ領域60の対応関係を示すテーブルを書き込んでいる。つまり、セクタ管理情報は、ホストシステム4から書き込み指示と共に与えられる一連のデータと同様に、ユーザ領域25(物理セクタ領域60)に書き込まれる。従って、物理ブロック内のデータが書き込まれている物理セクタ領域60の末尾を検索し、その物理セクタ領域60からセクタ管理情報を読み出すことにより、論理セクタ領域と物理セクタ領域60の対応関係を把握することができる。本実施形態では、セクタ管理情報は、例えば、256個の論理セクタ領域の論理セクタ番号にそれぞれ対応する256個のレコードを有するテーブルである(例えば、後述の図5(A)参照)。
尚、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60には、論理セクタ領域と物理セクタ領域60の対応関係に関する最新のセクタ管理情報を保存しておく必要がある。従って、一連のデータを書き込む際には、その一連のデータを書き込む物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60からセクタ管理情報を読み出し、このセクタ管理情報を更新した最新のセクタ管理情報を、その一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に書き込む。このセクタ管理情報の更新では、書き込む一連のデータに対応する部分について、読み出されたセクタ管理情報の内容が更新される。尚、物理セクタ領域60にセクタ管理情報を書き込む場合、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に記憶されているデータがセクタ管理情報であるか否かを判別可能にするために、本実施形態では、セクタ管理情報の書込み先の物理セクタ領域60に対応する分割冗長領域70に、セクタ管理情報が書き込まれたことを意味するフラグ(以下、「管理フラグ」と言う)を書き込む。これにより、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に対応した分割冗長領域70に、管理フラグが記憶されていれば、その末尾の物理セクタ領域60に記憶されているデータは、セクタ管理情報であり、管理フラグが記憶されていなければ、その末尾の物理セクタ領域60に記憶されているデータは、一連のデータの末尾データであることがわかる。
また、同一の物理ブロックに複数の一連のデータを連続的に書き込むような場合には、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60からセクタ管理情報を読み出さずに、ワークエリア8に保持されている、論理セクタ領域と物理セクタ領域60の対応関係に関する情報を、そのまま使用するようにしてもよい。
また、物理ブロック内に書き込まれている全てのデータが、先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)で各物理セクタ領域60に格納されている場合には、一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に、セクタ管理情報を書き込まないようにしてもよい。そして、このように物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60にセクタ管理情報が書き込まれていない場合、つまり、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60に一連のデータの末尾データが書き込まれている場合、その物理ブロックには先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)でデータが格納されていると判断して、論理セクタ領域と物理セクタ領域60の対応関係を把握する。
ホストシステム4から与えられる書き込み指示と共に与えられる複数セクタ領域分のデータを書き込み先の物理ブロック内の空きセクタ領域に全て書き込むことができない場合には、その物理ブロック内の最後尾の物理セクタ領域60の1セクタ領域前の物理セクタ領域60まで、ホストシステム4から与えられるデータを書き込み、最後尾の物理セクタ領域60には、その時点での論理セクタ領域と物理セクタ領域60の対応関係を示すセクタ管理情報を書き込む。残りのデータについては、別の物理ブロックを新たに割り当て、その物理ブロック内の物理セクタ領域60に書き込み、残りのデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60に、その時点での論理セクタ領域と物理セクタ領域60の対応関係を示すセクタ管理情報を書き込む。このように1個の論理ブロックに対して2個の物理ブロックが割り当てられたような場合、後から割り当てられた物理ブロック(2個目の物理ブロック)には、2個の物理ブロックを合わせた論理セクタ領域と物理セクタ領域60の対応関係を示すセクタ管理情報、つまり、1個目の物理ブロック内の論理セクタ領域と物理セクタ領域60の対応関係を示す情報を含めたセクタ管理情報が書き込まれる。尚、1個目の物理ブロックにおいて、一連のデータの末尾データが書き込まれた物理セクタ領域60の次の物理セクタ領域60が、1個目の物理ブロックの最後尾の物理セクタ領域60の1セクタ前の物理セクタ領域60である場合、次の一連のデータは、その最後尾の物理セクタ領域60からではなく、2個目の物理ブロックの先頭の物理セクタ領域60から書き込む。
上述のようにホストシステム4から与えられる書き込み指示と共に与えられる複数セクタ領域分のデータを、書き込み先の物理ブロック(1個目の物理ブロック)内の空きセクタ領域に全て書き込むことができない場合には、その物理ブロック(1個目の物理ブロック)に書き込むことができなかったデータは、新たに割り当てた物理ブロック(2個目の物理ブロック)に書き込まれる。このような場合、新たに割り当てた物理ブロック(2個目の物理ブロック)に書き込まれる先頭データが先頭の論理セクタ領域に対応することはないので、新たに割り当てた物理ブロック(2個目の物理ブロック)に対する書き込み処理では、必ずセクタ管理情報が書き込まれる。従って、ホストシステム4から与えられる書き込み指示と共に与えられる複数セクタ領域分のデータを、2個の物理ブロックに跨って書き込む場合には、1個目の物理ブロックの最後尾の物理セクタ領域60にセクタ管理情報を書き込まなくてもよい。物理ブロックから各物理セクタ領域60に格納されているデータを読み出すときには、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60からセクタ管理情報を読み出し、このセクタ管理情報に基づいて論理セクタ領域と物理セクタ領域60の対応関係を把握する。
以下、図4乃至図6を参照して、本実施形態での書き込みの具体例を説明する。なお、一連のデータは、前述したように、PSNが小さい方から順番に書き込まれるが、以下、n番目(nは自然数)に書き込まれる一連のデータを「第nの一連のデータ」と言う。
まず、ホストシステム4からの第1の書き込み指示から、論理アクセス領域として、LBA#0−#15の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#0−#15の論理セクタ領域)を特定する。また、この論理アクセス領域が属する論理ブロックと対応する物理ブロックが無いため、この論理ブロックに対して新たな物理ブロックを割り当てる。この物理ブロックには未だデータが書き込まれていないため、物理ブロック内のデータが書き込まれていない先頭の物理セクタ領域60として、物理ブロック内の先頭の物理セクタ領域60(PSN#0の物理セクタ領域60)を特定する。この先頭の物理セクタ領域60(PSN#0の物理セクタ領域60)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LSN#0−#15の16個の論理セクタ領域に対応する第1の一連のデータが、PSN#0−#15の16個の物理セクタ領域60に書き込まれる(図4(A)参照)。この書き込み処理を開始するときに、一連のデータの先頭データに対応する論理セクタ領域のLSNの値と、この先頭データが書き込まれる物理セクタ領域のPSNの値が一致しているため、この書き込み処理で、先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)で一連のデータが書き込まれる判断することができる。
この段階では、物理ブロック内に書き込まれている全てのデータが、先頭の論理セクタ領域(LSN#0の論理セクタ領域)に対応するデータからLSNの小さい順で各物理セクタ領域60に格納されている。つまり、物理ブロック内のデータが書き込まれている全ての物理セクタ領域60で、物理セクタ領域60のPSNとその物理セクタ領域60に記憶されているデータに対応した論理セクタ領域のLSNとが同じ番号である。従って、第1の一連のデータの末尾データが記憶されている物理セクタ領域60(PSN#15の物理セクタ領域60)の次の物理セクタ領域60(PSN#16の物理セクタ領域60)に、セクタ管理情報を書き込まない。
次に、ホストシステム4からの第2の書き込み指示から、論理アクセス領域として、LBA#16−#31の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#16−#31の論理セクタ領域)を特定する。また、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60として、PSN#15の物理セクタ領域60を特定する。特定された末尾の物理セクタ領域60(PSN#15の物理セクタ領域60)の次の物理セクタ領域60(PSN#16の物理セクタ領域60)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LSN#16−#31の16個の論理セクタ領域に対応する第2の一連のデータが、PSN#16−#31の16個の物理セクタ領域60に書き込まれる(図4(A)参照)。この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#15の物理セクタ領域60)にセクタ管理情報が書き込まれていないため、この時点で、物理ブロック内の物理セクタ領域60に先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)で一連のデータが書き込まれていると判断することができる。更に、この書き込み処理で書き込まれる一連のデータの先頭データに対応する論理アクセス領域のLSNの値と、この先頭データが書き込まれる物理セクタ領域のPSNの値が一致しているため、この一連のデータを書き込んだ後も、この状態が維持されると判断することができる。
この段階でも、物理ブロック内のデータが書き込まれている全ての物理セクタ領域60で、物理セクタ領域60のPSNとその物理セクタ領域60に記憶されているデータに対応した論理セクタ領域のLSNとが同じ番号である。従って、第2の一連のデータの末尾データが記憶されている物理セクタ領域60(PSN#31の物理セクタ領域60)の次の物理セクタ領域60(PSN#32の物理セクタ領域60)にも、セクタ管理情報を書き込まない。
次に、ホストシステム4からの第3の書き込み指示から、論理アクセス領域として、LBA#48−#79の32個の論理セクタ領域(LBN#0の論理ブロック内のLSN#48−#79の論理セクタ領域)を特定する。また、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60として、PSN#31の物理セクタ領域60を特定する。特定された末尾の物理セクタ領域60(PSN#31の物理セクタ領域60)の次の物理セクタ領域60(PSN#32の物理セクタ領域60)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LSN#48−#79の32個の論理セクタ領域に対応する第3の一連のデータが、PSN#32−#63の32個の物理セクタ領域60に書き込まれる(図4(A)参照)。この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#31の物理セクタ領域60)にセクタ管理情報が書き込まれていないため、この時点で、物理ブロック内の物理セクタ領域60に先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)で一連のデータが書き込まれていると判断することができる。しかし、この書き込み処理で書き込まれる一連のデータの先頭データに対応する論理アクセス領域のLSNの値と、この先頭データが書き込まれる物理セクタ領域のPSNの値が一致していないため、この一連のデータを書き込んだ後は、この状態が維持されないと判断することができる。
この段階になって、物理ブロック内のデータが書き込まれている全ての物理セクタ領域60の一部(すなわち、第3の一連のデータが記憶されているPSN#32−#63の32個の物理セクタ領域60)で、物理セクタ領域60のPSNとその物理セクタ領域60に記憶されているデータに対応した論理セクタ領域のLSNとが異なる番号となる。この場合、メモリコントローラ3が、物理ブロック内のデータが書き込まれている全ての物理セクタ領域60(PSN#0−#63の物理セクタ領域60)と論理セクタ領域との対応関係を示すセクタ管理情報#0を作成する。ここでは、第3の一連のデータを書き込む前の末尾の物理セクタ領域60(PSN#31の物理セクタ領域60)に、セクタ管理情報が書き込まれていないため(その末尾の物理セクタ領域60に対応した分割冗長領域70に管理フラグが書き込まれていないため)、新規にセクタ管理情報を作成する。具体的には、ワークエリア8上にLSN#0−255にそれぞれ対応する256個のレコードを有するテーブル作成領域を確保し、このテーブル作成領域にPSNを書き込んでいく。セクタ管理情報#0の場合には、図5(A)に示すように、LSN#48−79に対応した32個のレコードに、第3の一連のデータが書き込まれた32個の物理セクタ領域60に対応するPSN#32−#63を書き込む。また、第3の一連のデータの先頭データが書き込まれているPSN#32の物理セクタ領域60よりも前の物理セクタ領域60には先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番でデータが格納されていると判断して、LSN#0−#31に対応した32個のレコードに、PSN#0−31を書き込む。これにより、セクタ管理情報#0の作成が完了する。メモリコントローラ3は、作成したセクタ管理情報#0を、第3の一連のデータの末尾データが書き込まれている物理セクタ領域60(PSN#63の物理セクタ領域60)の次の物理セクタ領域60(PSN#64の物理セクタ領域60)に書き込む。また、セクタ管理情報#0が書き込まれた物理セクタ領域60(PSN#64の物理セクタ領域60)に対応した分割冗長領域70に、管理フラグを書き込む。
尚、後述するように、一度でもセクタ管理情報を書き込んだ物理ブロックについては、その物理ブロックに一連のデータを書き込む都度に、一連のデータの末尾データが書き込まれている物理セクタ領域60の次の物理セクタ領域60に、セクタ管理情報を書き込む。
次に、ホストシステム4からの第4の書き込み指示から、論理アクセス領域として、LBA#16−#47の32個の論理セクタ領域(LBN#0の論理ブロック内のLSN#16−#47の論理セクタ領域)を特定する。また、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60として、PSN#64の物理セクタ領域60を特定する。特定された末尾の物理セクタ領域60(PSN#64の物理セクタ領域60)の次の物理セクタ領域60(PSN#65の物理セクタ領域60)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LSN#16−#47の32個の論理セクタ領域に対応する第4の一連のデータが、PSN#65−#96の32個の物理セクタ領域60に書き込まれる(図4(A)参照)。この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#64の物理セクタ領域60)にセクタ管理情報が書き込まれているため、この時点で、物理ブロック内の物理セクタ領域60に先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)で一連のデータが書き込まれていないと判断することができる。
また、第4の一連のデータが書き込まれる前の末尾の物理セクタ領域60(PSN#64の物理セクタ領域60)に、セクタ管理情報#0が書き込まれているため(その末尾の物理セクタ領域60に対応した分割冗長領域70に管理フラグが書き込まれているため)、セクタ管理情報#0を読み出し、セクタ管理情報#0に基づいてセクタ管理情報#1を作成する。つまり、第4の一連のデータに対応する部分について、セクタ管理情報#0の内容を更新する。具体的には、図5(B)に示すように、セクタ管理情報#0における、LSN#16−#47に対応するレコードに、第4の一連のデータが書き込まれた32個の物理セクタ領域60に対応したPSN#65−#96を書き込むことで、セクタ管理情報#1を作成する。作成したセクタ管理情報#1を、第4の一連のデータの末尾データが書き込まれている物理セクタ領域60(PSN#96の物理セクタ領域60)の次の物理セクタ領域60(PSN#97の物理セクタ領域60)に書き込む。また、セクタ管理情報#1が書き込まれた物理セクタ領域60(PSN#97の物理セクタ領域60)に対応した分割冗長領域70に、管理フラグを書き込む。
以後、同様にして、第5〜第8の一連のデータ及びセクタ管理情報#2〜#5がそれぞれ同一の物理ブロックに書き込まれる。
すなわち、LBA#0−#31の32個の論理セクタ領域(LBN#0の論理ブロック内のLSN#0−#31の論理セクタ領域)に対応する第5の一連のデータを、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#97の物理セクタ領域60)の次の物理セクタ領域60(PSN#98の物理セクタ領域60)から書き込む(図4(A)及び図4(B)参照)。また、第5の一連のデータが書き込まれる前の末尾の物理セクタ領域60(PSN#97の物理セクタ領域60)に書き込まれているセクタ管理情報#1に基づいて、セクタ管理情報#2を作成する。具体的には、図5(C)に示すように、セクタ管理情報#1における、LSN#0−#31に対応するレコードに、第5の一連のデータが書き込まれた32個の物理セクタ領域60に対応したPSN#98−129を書き込むことで、セクタ管理情報#2を作成する。作成したセクタ管理情報#2を、第5の一連のデータの末尾データが書き込まれている物理セクタ領域60(PSN#129の物理セクタ領域60)の次の物理セクタ領域60(PSN#130の物理セクタ領域60)に書き込む。
次に、LBA#16−#31の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#16−#31の論理セクタ領域)に対応した第6の一連のデータを、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#130の物理セクタ領域60)の次の物理セクタ領域60(PSN#131の物理セクタ領域60)から書き込む(図4(B)参照)。また、第6の一連のデータが書き込まれる前の末尾の物理セクタ領域60(PSN#130の物理セクタ領域60)に書き込まれているセクタ管理情報#2に基づいて、セクタ管理情報#3を作成する。具体的には、図6(A)に示すように、セクタ管理情報#2における、LSN#16−#31に対応するレコードに、第6の一連のデータが書き込まれた16個の物理セクタ領域60に対応したPSN#131−146を書き込むことで、セクタ管理情報#3を作成する。作成したセクタ管理情報#3を、第6の一連のデータの末尾データが書き込まれている物理セクタ領域60(PSN#146の物理セクタ領域60)の次の物理セクタ領域60(PSN#147の物理セクタ領域60)に書き込む。
次に、LBA#64−#79の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#64−#79の論理セクタ領域)に対応する第7の一連のデータを、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#147の物理セクタ領域60)の次の物理セクタ領域60(PSN#148の物理セクタ領域60)から書き込む(図4(B)参照)。また、第7の一連のデータが書き込まれる前の末尾の物理セクタ領域60(PSN#147の物理セクタ領域60)に書き込まれているセクタ管理情報#3に基づいて、セクタ管理情報#4を作成する。具体的には、図6(B)に示すように、セクタ管理情報#3における、LSN#64−#79に対応するレコードに、第7の一連のデータが書き込まれた16個の物理セクタ領域60に対応したPSN#148−163を書き込むことで、セクタ管理情報#4を作成する。作成したセクタ管理情報#4を、第7の一連のデータの末尾データが書き込まれている物理セクタ領域60(PSN#163の物理セクタ領域60)の次の物理セクタ領域60(PSN#164の物理セクタ領域60)に書き込む。
次に、LBA#80−#95の16個の論理セクタ領域(LBN#0の論理ブロック内のLSN#80−#95の論理セクタ領域)に対応する第8の一連のデータを、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#164の物理セクタ領域60)の次の物理セクタ領域60(PSN#165の物理セクタ領域60)から書き込む(図4(B)参照)。また、第8の一連のデータが書き込まれる前の末尾の物理セクタ領域60(PSN#164の物理セクタ領域60)に書き込まれているセクタ管理情報#4に基づいて、セクタ管理情報#5を作成する。具体的には、図6(C)に示すように、セクタ管理情報#4における、LSN#80−#95に対応するレコードに、第8の一連のデータが書き込まれた16個の物理セクタ領域60に対応したPSN#165−#180を書き込むことで、セクタ管理情報#5を作成する。作成したセクタ管理情報#5を、第8の一連のデータの末尾データが書き込まれている物理セクタ領域60(PSN#180の物理セクタ領域60)の次の物理セクタ領域60(PSN#181の物理セクタ領域60)に書き込む。
さて、この後、物理ブロックから各物理セクタ領域60に格納されているデータを読み出すときには、メモリコントローラ3は、物理ブロック内のデータが書き込まれている末尾の物理セクタ領域60(PSN#181の物理セクタ領域60)からセクタ管理情報#5を読み出し、このセクタ管理情報#5に基づいて論理セクタ領域と物理セクタ領域60の対応関係を把握する。ここでは、PSN#181の物理セクタ領域60に書き込まれているセクタ管理情報#5が、論理セクタ領域と物理セクタ領域60の最新の対応関係を示しているため、そのセクタ管理情報#5を参照するだけで、論理セクタ領域と物理セクタ領域60の最新の対応関係を把握することができる。つまり、本実施形態によれば、効率的に、論理セクタ領域と物理セクタ領域60の対応関係を把握することができる。
尚、もし、第1の一連のデータが書き込まれてから第3の一連のデータが書き込まれる前までの間に(つまりセクタ管理情報が全く書き込まれていない場合に)、物理ブロックからデータを読み出すときには、メモリコントローラ3は、先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番でデータが格納されていると判断して、論理セクタ領域と物理セクタ領域60の対応関係を把握することができる。
以上が、第一の実施形態の説明である。
なお、セクタ管理情報は、前述したような、論理セクタ領域と物理セクタ領域60の対応関係を示すテーブルであることが好ましいが、一変形例として、物理ブロックに書き込まれているそれぞれの一連のデータの先頭データに対応する論理セクタ領域の論理セクタ番号であるスタート論理セクタ番号(以下、「SLSN」と言う)とその一連のデータが書き込まれるセクタ領域数(先頭データが書き込まれるセクタ領域から末尾データが書き込まれるセクタ領域までのセクタ領域の個数であるセクタカウント値、以下、「SCNT」と言う)とを示す情報であってもよい。更に、これらの情報に、それぞれの一連のデータの先頭データが書き込まれる物理セクタ領域の物理セクタ番号(PSN)を示す情報を加えてもよい。このような情報が書き込まれている場合には、この情報に基づいて、論理セクタ領域と物理セクタ領域60の対応関係を示すテーブルが作成される。
例えば、図7(A)〜(F)に、セクタ管理情報#0〜#5のそれぞれの変形例であるセクタ管理情報#0´〜#5´をそれぞれ示す。セクタ管理情報#0´〜#5´において、第nのSLSN及びSCNTの組は、第nの一連のデータに対応する。尚、物理ブロック内の物理セクタ領域60に先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LSNの順番)で一連のデータが書き込まれている部分については、複数個の一連のデータに対応する部分を1つにまとめた情報にしてもよい。例えば、第1−2の一連のデータに対応する部分を1つにまとめて、SLSNが#0、SCNTが32としてもよい。
この変形例では、論理セクタ領域と物理セクタ領域60の最新の対応関係を示すテーブルは、最新のセクタ管理情報に基づいて作成される。具体的には、後から書き込まれた一連のデータに対応する論理セクタ領域と物理セクタ領域60の対応関係を優先して、LSN#0−#255の256個の論理セクタ番号に対応したレコードに物理セクタ番号(PSN)を書き込んでいく。尚、論理セクタ領域と物理セクタ領域60の対応関係は、SLPN及びSCNTの組に基づいて把握する。
例えば、セクタ管理情報#5´に基づいて、図6(C)に示したような対象テーブルが作成される。このテーブル作成では、それぞれの一連のデータに対応する論理セクタ領域と物理セクタ領域60の対応関係に基づいて、各レコードに物理セクタ番号(PSN)を書き込んでいく。この物理セクタ番号(PSN)の書き込みは、先に書き込まれた一連のデータに対応する方から順番に行われ、書き込み先のレコードに既に物理セクタ番号(PSN)が書き込まれていても、後から物理セクタ番号(PSN)を上書きする。従って、後から書き込まれた一連のデータに対応する論理セクタ領域と物理セクタ領域60の対応関係を優先したテーブルが作成される。
<第2の実施形態>。
以下、本発明の第2の実施形態を説明する。その際、第1の実施形態との相違点を主に説明し、第1の実施形態との共通点については説明を省略或いは簡略する。
第2の実施形態では、論理ブロック内の論理セクタ領域を先頭から順番に1個の物理ページ60に含まれるユーザ領域25の容量と等しいセクタ数単位でまとめたものを論理ページとして取り扱い、ページ単位(1個の物理ページに含まれるユーザ領域25の容量と等しいセクタ数単位)で論理ブロックに含まれる論理ページと物理ブロックに含まれる物理ページとの対応関係を管理する。以下の説明で、各物理ブロック内の物理ページに付けた通し番号を物理ページ番号(PPN)と言う。又、各論理ブロック内の論理ページに付けた通し番号を論理ページ番号(LPN)と言う。
本実施形態では、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が小さいほうから順番に)一連のデータが書き込まれていく。従って、一連のデータを書き込むときには、物理ブロック内のデータが書き込まれている物理ページの末尾の検索が行われる。そして、その末尾の物理ページの次の物理ページから一連のデータが順次書き込まれていく。言い換えれば、物理ブロック内のデータが書き込まれていない先頭の物理ページから一連のデータが順次書き込まれていく。
本実施形態では、一連のデータの末尾データが書き込まれた物理ページの次の物理ページに、論理ページと物理ページの対応関係を示す情報(以下、「ページ管理情報」と言う)、例えば、論理ページと物理ページの対応関係を示すテーブルを書き込んでいる。つまり、ページ管理情報は、ホストシステム4から書き込み指示と共に与えられる一連のデータと同様に、物理ページのユーザ領域25に書き込まれる。従って、物理ブロック内のデータが書き込まれている物理ページの末尾の検索し、その物理ページからページ管理情報を読み出すことにより、論理ページと物理ページの対応関係を把握することができる。本実施形態では、ページ管理情報は、例えば、64個の論理ページの論理ページ番号にそれぞれ対応する64個のレコードを有するテーブルである(例えば、後述の図9(A)参照)。
尚、物理ブロック内のデータが書き込まれている末尾の物理ページには、論理ページと物理ページの対応関係に関する最新のページ管理情報を保存しておく必要がある。従って、一連のデータを書き込む際には、その一連のデータを書き込む物理ブロック内のデータが書き込まれている末尾の物理ページからページ管理情報を読み出し、このページ管理情報を更新した最新のページ管理情報を、その一連のデータの末尾データが書き込まれた物理ページの次の物理ページに書き込む。このページ管理情報の更新では、書き込む一連のデータに対応する部分について、読み出されたページ管理情報の内容が更新される。尚、物理ページにページ管理情報を書き込む場合、物理ブロック内のデータが書き込まれている末尾の物理ページに記憶されているデータがページ管理情報であるか否かを判別可能にするために、本実施形態では、ページ管理情報の書込み先の物理ページの共通冗長領域50に、ページ管理情報が書き込まれたことを意味するフラグ(以下、「管理フラグ」と言う)を書き込む。これにより、物理ブロック内のデータが書き込まれている末尾の物理ページの共通冗長領域50に、管理フラグが記憶されていれば、その末尾の物理ページに記憶されているデータは、ページ管理情報であり、管理フラグが記憶されていなければ、その末尾の物理ページに記憶されているデータは、一連のデータの末尾データであることがわかる。
また、同一の物理ブロックに複数の一連のデータを連続的に書き込むような場合には、物理ブロック内のデータが書き込まれている末尾の物理ページからページ管理情報を読み出さずに、ワークエリア8に保持されている、論理ページと物理ページの対応関係に関する情報を、そのまま使用するようにしてもよい。
また、物理ブロック内に書き込まれている全てのデータが、先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)で各物理ページに格納されている場合には、一連のデータの末尾データが書き込まれた物理ページの次の物理ページに、ページ管理情報を書き込まないようにしてもよい。そして、このように物理ブロック内のデータが書き込まれている末尾の物理ページにページ管理情報が書き込まれていない場合、つまり、物理ブロック内のデータが書き込まれている末尾の物理ページに一連のデータの末尾データが書き込まれている場合、その物理ブロックには先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)でデータが格納されていると判断して、論理ページと物理ページの対応関係を把握する。
ホストシステム4から与えられる書き込み指示と共に与えられる複数ページ分のデータを書き込み先の物理ブロック内の空きページに全て書き込むことができない場合には、その物理ブロック内の最後尾の物理ページの1ページ前の物理ページまで、ホストシステム4から与えられるデータを書き込み、末尾の物理ページには、その時点での論理ページと物理ページの対応関係を示すページ管理情報を書き込む。残りのデータについては、別の物理ブロックを新たに割り当て、その物理ブロック内の物理ページに書き込み、残りのデータの末尾データが書き込まれた物理ページの次の物理ページに、その時点での論理ページと物理ページの対応関係を示すページ管理情報を書き込む。このように1個の論理ブロックに対して2個の物理ブロックが割り当てられたような場合、後から割り当てられた物理ブロック(2個目の物理ブロック)には、2個の物理ブロックを合わせた論理ページと物理ページの対応関係を示すページ管理情報、つまり、1個目の物理ブロック内の論理ページと物理ページの対応関係を示す情報を含めたページ管理情報が書き込まれる。尚、1個目の物理ブロックにおいて、一連のデータの末尾データが書き込まれた物理ページの次の物理ページが、1個目の物理ブロックの最後尾の物理ページの1ページ前の物理ページである場合、次の一連のデータは、その最後尾の物理ページからではなく、2個目の物理ブロックの先頭の物理ページから書き込む。
物理ブロックから各物理ページに格納されているデータを読み出すときには、物理ブロック内のデータが書き込まれている末尾の物理ページからページ管理情報を読み出し、このページ管理情報に基づいて論理ページと物理ページの対応関係を把握する。
以下、図8乃至図10を参照して、本実施形態での書き込みの具体例を説明する。なお、一連のデータは、前述したように、PPNが小さい方から順番に書き込まれるが、以下、n番目(nは自然数)に書き込まれる一連のデータを「第nの一連のデータ」と言う。また、以下の説明では、アクセス対象の論理ページ(一連のデータの先頭データに対応する論理セクタ領域が属する論理ページから一連のデータの末尾データに対応する論理セクタ領域が属する論理ページまでの1個または複数個の論理ページ)を「論理アクセスページ」と言う。また、この具体例では、図8(A)に示すように、論理ブロックにPBA#7の物理ブロックが割り当てられているとする。
まず、ホストシステム4からの第1の書き込み指示から、論理アクセスページとして、LBN#0の論理ブロック内のLPN#0−#7の8個の論理ページを特定する。また、LBN#0の論理ブロックに対応する物理ブロックが無いため、LBN#0の論理ブロックに対応してPBA#7の物理ブロックが割り当てる。この物理ブロックには未だデータが書き込まれていないため、物理ブロック内のデータが書き込まれていない先頭の物理ページとして、PBA#7の物理ブロック内の先頭の物理ページ(PPN#0の物理ページ)を特定する。この先頭の物理ページ(PPN#0の物理ページ)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LPN#0−#7の8個の論理ページに対応する第1の一連のデータが、PPN#0−#7の8個の物理ページに書き込まれる(図8(A)参照)。この書き込み処理を開始するときに、一連のデータの先頭データに対応する論理ページのLPNの値と、この先頭データが書き込まれる物理ページのPPNの値が一致しているため、この書き込み処理で、先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)で一連のデータが書き込まれる判断することができる。
この段階では、PBA#7の物理ブロック内に書き込まれている全てのデータが、先頭の論理ページ(LPN#0の論理ページ)に対応するデータからLPNの小さい順で各物理ページに格納されている。従って、第1の一連のデータの末尾データが記憶されている物理ページ(PPN#7の物理ページ)の次の物理ページ(PPN#8の物理ページ)に、ページ管理情報を書き込まない。
次に、ホストシステム4からの第2の書き込み指示から、論理アクセスページとして、LBN#0の論理ブロック内のLPN#8−#15の8個の論理ページを特定する。また、LBN#0の論理ブロックと対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#7の物理ページを特定する。特定された末尾の物理ページ(PPN#7の物理ページ)の次の物理ページ(PPN#8の物理ページ)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LPN#8−#15の8個の論理ページに対応する第2の一連のデータが、PPN#8−#15の8個の物理ページに書き込まれる(図8(A)参照)。この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#7の物理ページ)にページ管理情報が書き込まれていないため、この時点で、物理ブロック内の物理ページに先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)で一連のデータが書き込まれていると判断することができる。更に、この書き込み処理で書き込まれる一連のデータの先頭データに対応する論理ページのLPNの値と、この先頭データが書き込まれる物理ページのPPNの値が一致しているため、この一連のデータを書き込んだ後も、この状態が維持されると判断することができる。
この段階でも、PBA#7の物理ブロック内のデータが書き込まれている全ての物理ページで、物理ページのPPNとその物理ページに記憶されているデータに対応した論理ページのLPNとが同じ番号である。従って、第2の一連のデータの末尾データが記憶されている物理ページ(PPN#15の物理ページ)の次の物理ページ(PPN#16の物理ページ)にも、ページ管理情報を書き込まない。
次に、ホストシステム4からの第3の書き込み指示から、論理アクセスページとして、LBN#0の論理ブロック内のLPN#16−#31の16個の論理ページを特定する。また、LBN#0の論理ブロックと対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#15の物理ページを特定する。特定された末尾の物理ページ(PPN#15の物理ページ)の次の物理ページ(PPN#16の物理ページ)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LPN#16−#31の16個の論理ページに対応する第3の一連のデータが、PPN#16−#31の16個の物理ページに書き込まれる(図8(A)参照)。この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#15の物理ページ)にページ管理情報が書き込まれていないため、この時点で、物理ブロック内の物理ページに先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)で一連のデータが書き込まれていると判断することができる。更に、この書き込み処理で書き込まれる一連のデータの先頭データに対応する論理ページのLPNの値と、この先頭データが書き込まれる物理ページのPPNの値が一致しているため、この一連のデータを書き込んだ後も、この状態が維持されると判断することができる。
この段階でも、PBA#7の物理ブロック内のデータが書き込まれている全ての物理ページで、物理ページのPPNとその物理ページに記憶されているデータに対応した論理ページのLPNとが同じ番号である。従って、第3の一連のデータの末尾データが記憶されている物理ページ(PPN#31の物理ページ)の次の物理ページ(PPN#32の物理ページ)にも、ページ管理情報を書き込まない。
次に、ホストシステム4からの第4の書き込み指示から、論理アクセスページとして、LBN#0の論理ブロック内のLPN#48−#63の16個の論理ページを特定する。また、LBN#0の論理ブロックに対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#31の物理ページを特定する。特定された末尾の物理ページ(PPN#31の物理ページ)の次の物理ページ(PPN#32の物理ページ)から、ホストシステム4から与えられた一連のデータを書き込む。この結果、LPN#48−#63の16個の論理ページに対応する第4の一連のデータが、PPN#32−#47の16個の物理ページに書き込まれる(図8(A)参照)。この書き込み処理を開始するときに、物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#31の物理ページ)にページ管理情報が書き込まれていないため、この時点で、物理ブロック内の物理ページに先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)で一連のデータが書き込まれていると判断することができる。しかし、この書き込み処理で書き込まれる一連のデータの先頭データに対応する論理ページのLPNの値と、この先頭データが書き込まれる物理ページのPPNの値が一致していないため、この一連のデータを書き込んだ後は、この状態が維持されないと判断することができる。
この段階になって、PBA#7の物理ブロック内のデータが書き込まれている全ての物理ページの一部(すなわち、第4の一連のデータが記憶されているPPN#32−#47の16個の物理ページ)で、物理ページのPPNとその物理ページに記憶されているデータに対応した論理ページのLPNとが異なる番号となる。この場合、メモリコントローラ3が、物理ブロック内のデータが書き込まれている全ての物理ページ(PPN#0−#47の物理ページ)と論理ページとの対応関係を示すページ管理情報#0を作成する。ここでは、第4の一連のデータを書き込む前の末尾の物理ページ(PPN#31の物理ページ)に、ページ管理情報が書き込まれていないため(その末尾の物理ページの共通冗長領域50に管理フラグが書き込まれていないため)、新規にページ管理情報を作成する。具体的には、ワークエリア8上にLPN#0−63にそれぞれ対応する64個のレコードを有するテーブル作成領域を確保し、このテーブル作成領域にPPNを書き込んでいく。ページ管理情報#0の場合には、図9(A)に示すように、LPN#48−63に対応した16個のレコードに、第4の一連のデータが書き込まれた16個の物理ページに対応するPPN#32−#47を書き込む。また、第4の一連のデータの先頭データが書き込まれているPPN#32の物理ページよりも前の物理ページには先頭の論理ページに対応するデータから論理ページの順番でデータが格納されていると判断して、LPN#0−#31に対応した32個のレコードに、PPN#0−31を書き込む。これにより、ページ管理情報#0の作成が完了する。メモリコントローラ3は、作成したページ管理情報#0を、第4の一連のデータの末尾データが書き込まれている物理ページ(PPN#47の物理ページ)の次の物理ページ(PPN#48の物理ページ)に書き込む。また、ページ管理情報#0が書き込まれた物理ページ(PPN#48の物理ページ)の共通冗長領域50に、管理フラグを書き込む。
尚、後述するように、一度でもページ管理情報を書き込んだ物理ブロックについては、その物理ブロックに一連のデータを書き込む都度に、一連のデータの末尾データが書き込まれている物理ページの次の物理ページに、ページ管理情報を書き込む。
次に、ホストシステム4からの第5の書き込み指示から、論理アクセスページとして、LBN#0の論理ブロック内のLPN#32−#47の16個の論理ページを特定する。また、LBN#0の論理ブロックに対応するPBA#7の物理ブロック内のデータが書き込まれている末尾の物理ページとして、PPN#48の物理ページを特定する。特定された末尾の物理ページ(PPN#48の物理ページ)の次の物理ページ(PPN#49の物理ページ)から、ホストシステム4から与えられた一連のデータを書き込む。
しかし、ここでは、ホストシステム4から与えられた一連のデータをPBA#7の物理ブロック内の空きページに全て書き込むことはできない。なぜなら、ホストシステム4かから与えられる一連のデータは、16ページ分のデータであるのに対し、PBA#7の物理ブロック内の空きページの数は、PPN#49−#63の15ページと、1ページ不足するからである。更に、物理ブロック内のデータが書き込まれている末尾の物理ページ(PSN#48の物理ページ)にページ管理情報が書き込まれているため、この時点で、物理ブロック内の物理セクタ領域60に先頭の論理セクタ領域に対応するデータから論理セクタ領域の順番(LPNの順番)で一連のデータが書き込まれていないと判断することができる。従って、ページ管理情報を書き込む物理ページを考慮すれば2ページ不足していると判断することができる。
そこで、この場合、PBA#7の物理ブロック内の最後尾の物理ページ(PPN#63の物理ページ)の1ページ前の物理ページ(PPN#62の物理ページ)まで、ホストシステム4から与えられるデータを書き込む。PBA#7の物理ブロック内の最後尾の物理ページ(PPN#63の物理ページ)には、その時点での論理ページと物理ページの対応関係を表すページ管理情報#1を書き込む。残りのデータについては、図8(B)に示すように、LBN#0の論理ブロックに別の物理ブロック(PBA#16の物理ブロック)を新たに割り当て、そのPBA#16の物理ブロック内の先頭の物理ページ(PPN#0の物理ページ)から書き込み、残りのデータの末尾データが書き込まれた物理ページ(PPN#1の物理ページ)の次の物理ページ(PPN#2の物理ページ)に、その時点での論理ページと物理ページの対応関係を表すページ管理情報#2を書き込む。この結果、ホストシステム4から与えられた16ページ分の一連のデータのうち、14ページ分の一連のデータが、PBA#7の物理ブロック内のPPN#49−#62の物理ページに第5の一連のデータとして書き込まれ(図8(A)参照)、残りの2ページ分の一連のデータが、PBA#16の物理ブロック内のPPN#0−#1の物理ページに第6の一連のデータとして書き込まれる(図8(B)参照)。尚、上述のようにPBA#7の物理ブロック内の空きページに、ホストシステム4から書き込み指示と共に与えられる全てのデータを書き込むことができない場合、その全てのデータを新たに割り当てたPBA#16の物理ブロックに書き込むようにしてもよい。
尚、前述したページ管理情報#1及び#2は、それぞれ、以下のようにして作成される。
すなわち、第5の一連のデータが書き込まれる前の末尾の物理ページ(PPN#48の物理ページ)に、ページ管理情報#0が書き込まれているため(その末尾の物理ページの共通冗長領域50に管理フラグが書き込まれているため)、ページ管理情報#0を読み出し、ページ管理情報#0に基づいてページ管理情報#1を作成する。具体的には、図9(B)に示すように、ページ管理情報#0における、LPN#32−#45に対応するレコードに、第5の一連のデータが書き込まれた14個の物理ページ60に対応したPPN#49−62を書き込むことで、ページ管理情報#1を作成する。尚、作成されたページ管理情報#1は、第5の一連のデータの末尾データが書き込まれている物理ページ(PPN#62の物理ページ)の次の物理ページ(PPN#63の物理ページ)に書き込まれ、ページ管理情報#1が書き込まれた物理ページ(PPN#63の物理ページ)の共通冗長領域50には、管理フラグが書き込まれる。
また、ページ管理情報#2については、ワークエリア8に保持されているページ管理情報#1を用いて作成する。具体的には、図10(A)に示すように、ページ管理情報#1における、LPN#46−#47に対応するレコードに、第6の一連のデータが書き込まれた2個の物理ページ60に対応したPPN#0−1を書き込む。また、それらLPN#46−#47に対応するレコード以外の全てのレコードに、旧ブロックフラグ(図では、「旧ブロックF」と記載する)を書き込む。旧ブロックフラグは、各レコードに書き込まれているPPNが、旧ブロック(本具体例ではPBA#7の物理ブロック)内の物理ページのPPNであるか、又は新ブロック(本具体例ではPBA#16の物理ブロック)内の物理ページのPPNであるかを判断するための情報である。つまり、旧ブロックフラグが書き込まれているレコードに書き込まれているPPNは、旧ブロック(本具体例ではPBA#7の物理ブロック)内の物理ページのPPNであると判断される。つまり、ページ管理情報#2を参照することで、LPN#46−#47の論理ページに対応するデータは、新ブロック(本具体例ではPBA#16の物理ブロック)に書き込まれているが、他の論理ページに対応するデータは、旧ブロックに書き込まれていることがわかる。尚、以上のようにして作成されたページ管理情報#2は、第6の一連のデータの末尾データが書き込まれている物理ページ(新ブロック内のPPN#1の物理ページ)の次の物理ページ(新ブロック内のPPN#2の物理ページ)に書き込まれ、ページ管理情報#2が書き込まれた物理ページ(新ブロック内のPPN#2の物理ページ)の共通冗長領域50には、管理フラグが書き込まれる。
尚、本具体例において、PBA#7の物理ブロックとPBA#16の物理ブロックが同一の論理ブロック(LBN#0の論理ブロック)に対応することは、これらの物理ブロックに書き込まれている論理アドレス情報を参照することにより判断することができる。また、これらの物理ブロックの新旧関係を判断するために、先頭物理ページの共通冗長領域50に新旧関係を判断するためシリアル番号を書き込むようにすることが好ましい。また、新ブロックの先頭物理ページの共通冗長領域50や、ページ管理情報が書き込まれた物理ページの共通冗長領域50に、旧ブロックのPBAを書き込むようにしてもよい。このようにすれば、それらの共通冗長領域50を参照することにより、旧ブロックのPBAを把握することができる。
以後、ホストシステム4から一連のデータの与えられた場合には、新ブロックであるPBA#16の物理ブロックに、その一連のデータと、最新のページ管理情報とが書き込まれる。
例えば、LBA#0−#15の16個の論理ページに対応する第7の一連のデータを、PBA#16の物理ブロック内のデータが書き込まれている末尾の物理ページ(PPN#2の物理ページ)の次の物理ページ(PPN#3の物理ページ)から書き込む。また、第7の一連のデータが書き込まれる前の末尾の物理ページ(PPN#2の物理ページ)に書き込まれているページ管理情報#2に基づいて、ページ管理情報#3を作成する。具体的には、図10(B)に示すように、ページ管理情報#2における、LPN#0−#15に対応するレコードに、第7の一連のデータが書き込まれた16個の物理ページに対応したPPN#3−18を書き込み、且つ、それらLPN#0−#15に対応するレコードに書き込まれている旧ブロックフラグを消去する。このようにして作成されたページ管理情報#3を、第7の一連のデータの末尾データが書き込まれている物理ページ(PPN#18の物理ページ)の次の物理ページ(PPN#19の物理ページ)に書き込む。
さて、この後、論理ブロックに割り当てられた旧ブロック又は新ブロックからデータを読み出すときには、メモリコントローラ3は、新ブロック内のデータが書き込まれている末尾の物理ページ(PPN#19の物理ページ)からページ管理情報#3を読み出し、このページ管理情報#3に基づいて論理ページと物理ページの対応関係を把握する。ここでは、新ブロック内のPPN#3の物理ページに書き込まれているページ管理情報#3が、論理ページと物理ページの最新の対応関係を示しているため、そのページ管理情報#3を参照するだけで、論理ページと物理ページの最新の対応関係を把握することができる。具体的には、LPN#0−#15及び#46−#47の論理ページに対応したデータは、新ブロックに書き込まれており、他の論理ページに対応したデータは、旧ブロックに書き込まれていることを把握することができる。つまり、本実施形態によれば、効率的に、論理ページと物理ページの対応関係を把握することができる。
尚、もし、第1の一連のデータが書き込まれてから第4の一連のデータが書き込まれる前までの間に(つまりページ管理情報が全く書き込まれていない場合に)、物理ブロック(旧ブロック又は新ブロック)からデータを読み出すときには、メモリコントローラ3は、先頭の論理ページに対応するデータから論理ページの順番でデータが格納されていると判断して、論理ページと物理ページの対応関係を把握することができる。
以上が、第二の実施形態の説明である。
なお、ページ管理情報は、前述したような、論理ページと物理ページの対応関係を示すテーブルであることが好ましいが、一変形例として、物理ブロックに書き込まれているそれぞれの一連のデータの先頭データに対応する論理ページのLPN(以下、「SLPN」と言う)と、その一連のデータが書き込まれるページ数(先頭データが書き込まれるページから末尾データが書き込まれるページまでのページの個数であるページカウント値、以下、「PCNT」と言う)と、その一連のデータが書き込まれる物理ページが属する物理ブロックを示す情報であってもよい。更に、それぞれの一連のデータの先頭データが書き込まれる物理ページの物理ページ番号(PPN)を示す情報を加えてもよい。このような情報が書き込まれている場合には、この情報に基づいて、論理ページと物理ページの対応関係を示すテーブルが作成される。
例えば、図11(A)〜(D)に、ページ管理情報#0〜#3のそれぞれの変形例であるページ管理情報#0´〜#3´をそれぞれ示す。ページ管理情報#0´〜#3´において、第nのSLPN及びPCNTの組は、第nの一連のデータに対応する。また、新ブロックに書き込まれたページ管理情報#2´及び3´において、旧ブロックに書き込まれている一連のデータに対応するSLPN及びPCNTの組には、旧ブロックフラグが関連付けられる。尚、物理ブロック内の物理ページに先頭の論理ページに対応するデータから論理ページの順番(LPNの順番)で一連のデータが書き込まれている部分については、複数個の一連のデータに対応する部分を1つにまとめた情報にしてもよい。例えば、第1−3の一連のデータに対応する部分を1つにまとめて、SLPNが#0、PCNTが32としてもよい。
この変形例では、論理ページと物理ページの最新の対応関係を示すテーブルは、最新のページ管理情報に基づいて作成される。具体的には、後から書き込まれた一連のデータに対応する論理ページと物理ページの対応関係を優先して、LPN#0−#63の64個の論理ページ番号(LPN)に対応したレコードに物理ページ番号(PPN)を書き込んでいく。尚、論理ページと物理ページの対応関係は、SLPN及びPCNTの組に基づいて把握する。
例えば、ページ管理情報#3´に基づいて、図10(B)に示したようなテーブルが作成される。このテーブル作成では、それぞれの一連のデータに対応する論理ページと物理ページの対応関係に基づいて、各レコードに物理ページ番号(PPN)を書き込んでいく。この物理ページ番号(PPN)の書き込みは、先に書き込まれた一連のデータに対応する方から順番に行われ、書き込み先のレコードに既に物理ページ番号(PPN)が書き込まれていても、後から物理ページ番号(PPN)を上書きする。従って、後から書き込まれた一連のデータに対応する論理ページと物理ページの対応関係を優先したテーブルが作成される。
以上、本発明の幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
例えば、上記の実施の形態では、論理ブロックに含まれる論理セクタ領域と物理ブロックとに含まれる物理セクタ領域の数は一致していた。しかしながら、論理ブロックに含まれる論理セクタ領域の数を物理ブロックに含まれる物理セクタ領域の数より少なくしてもよい。こうすることで、論理ブロックに含まれる全ての論理セクタ領域に対応するデータを物理ブロックに保存した後であっても、そのデータの書き替えデータを、当該物理ブロックの空き領域(データが書き込まれていない物理セクタ領域又は物理ページ)にデータを保存することができる。これにより効率的なデータの書き換えが可能となる。例えば、論理ブロックに含まれる論理セクタ領域の数と、物理ブロックに含まれる物理セクタ領域の数を、共に2のべき乗で与えられる数にする場合には、論理ブロックに含まれる論理セクタ領域の数を128とし、物理ブロックに含まれる物理セクタ領域の数を256とする。
また、例えば、電源遮断により、セクタ管理情報(ページ管理情報)を書き込む前に書き込み処理が終了してしまうことがあり得るので、セクタ管理情報を書き込んだ物理セクタ領域60に対応する分割冗長領域70(ページ管理情報を書き込んだ物理ページの共通冗長領域50)には、書き込み処理が正常終了したことを示す終了マークを書き込むことが好ましい。また、セクタ管理情報(ページ管理情報)を書き込む必要のない場合(物理ブロック内のデータが書き込まれている全ての物理セクタ領域60(物理ページ)が、その物理ブロックに対応する論理ブロック内の論理セクタ領域(論理ページ)と先頭から順番に対応している場合)には、一連のデータの末尾データが書き込まれた物理セクタ領域60に対応する分割冗長領域70(一連のデータの末尾データが書き込まれた物理ページの共通冗長領域50)に、この終了マークを書き込む。