半導体記憶装置
【課題】不揮発性半導体記憶素子内のブロックの消去回数を減少させるとともに、書き込み効率の向上を実現する。
【解決手段】コントローラ10は、複数のデータを第一の単位で第一の記憶領域11に記憶する第一の処理と、第一の管理単位で第四の記憶領域14に記憶する第二の処理と、第一の記憶領域11から出力されるデータを、第二の管理単位で第三の記憶領域13に記憶する第三の処理と、第四の記憶領域14内の第三の単位の領域を選択し、選択された領域を第二の記憶領域12に移動する第四の処理と、第四の記憶領域14内のデータを選択して第二の単位の空き領域を持つ第三の単位の領域にコピーし、第三の単位の領域を第二の記憶領域12に割り当てる第五の処理と、第二の記憶領域12内のデータを選択し、選択されたデータを第二の記憶領域12において第二の単位の空き領域を持つ第三の単位の領域にコピーする第六の処理と、を実行する。
【解決手段】コントローラ10は、複数のデータを第一の単位で第一の記憶領域11に記憶する第一の処理と、第一の管理単位で第四の記憶領域14に記憶する第二の処理と、第一の記憶領域11から出力されるデータを、第二の管理単位で第三の記憶領域13に記憶する第三の処理と、第四の記憶領域14内の第三の単位の領域を選択し、選択された領域を第二の記憶領域12に移動する第四の処理と、第四の記憶領域14内のデータを選択して第二の単位の空き領域を持つ第三の単位の領域にコピーし、第三の単位の領域を第二の記憶領域12に割り当てる第五の処理と、第二の記憶領域12内のデータを選択し、選択されたデータを第二の記憶領域12において第二の単位の空き領域を持つ第三の単位の領域にコピーする第六の処理と、を実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不揮発性半導体メモリを備えた半導体記憶装置に関する。
【背景技術】
【0002】
NAND型フラッシュメモリのように、不揮発性半導体メモリには、データを記憶させる場合に、ブロックと呼ばれる単位で一度データを消去してからその後に書き込みを行うものがあったり、ページと呼ばれる単位で読み出し/書き込みを行うものがあったり、消去/読み出し/書き込みの単位が固定されていたりするものがある。
【0003】
一方、パーソナルコンピュータ等のホスト機器がハードディスクをはじめとする二次記憶装置に対してデータの読み出し/書き込みを行う単位は、セクタと呼ばれる。セクタは、不揮発性半導体メモリの消去/読み出し/書き込みの単位とは独立に定められる。
【0004】
例えば、不揮発性半導体メモリのブロックの大きさ(ブロックサイズ)は、512キロバイト、ページの大きさ(ページサイズ)は、4キロバイトであるのに対して、ホスト機器のセクタの大きさ(セクタサイズ)は、512バイトのように定められる。
【0005】
このように、不揮発性半導体メモリの消去/読み出し/書き込みの単位は、ホスト機器の読み出し/書き込みの単位よりも大きい場合がある。
【0006】
ここで、このような不揮発性半導体メモリを用いてハードディスクのようなパーソナルコンピュータの二次記憶装置を構成する場合、ホスト機器としてのパーソナルコンピュータからのセクタサイズのデータは、不揮発性半導体メモリのブロックサイズ、ページサイズに適合させてそれに書き込む必要がある。
【0007】
また、NAND型フラッシュメモリ等のフラッシュメモリは、データの書き込みに先立って行うブロックの消去回数の増加に応じてメモリセルの劣化が進行していく性質を有するため、不揮発性半導体メモリの全てのメモリセルの消去回数が概ね等しくなるように、データ更新箇所を不揮発性半導体メモリ内で均等に分散させるウェアレベリングと呼ばれる処理が行われる。
【0008】
例えば、ホスト機器から指定される二次記憶装置の論理アドレスを、データ更新箇所を示す不揮発性半導体メモリの物理アドレスにアドレス変換することでデータ更新箇所を均等に分散させる。
【0009】
一方で、大容量の二次記憶装置において上記アドレス変換を行う場合、データ管理の単位が小さいサイズ(例えば、ページサイズ)であると、論理アドレスと物理アドレスとの対応表(アドレス変換テーブル、管理テーブル)が大きくなってしまい、二次記憶装置のコントローラの主記憶メモリに納まらなくなり、アドレス変換が高速にできなくなるという問題がある。そのため、二次記憶装置内のデータ管理の単位は、例えば、ブロックサイズ等、ページサイズよりも大きな単位とする必要がある。
【0010】
このような問題を改善するために、データを保存したブロック(データブロック)にログブロックと呼ばれる別のブロックを対応付けて設ける技術が知られている(例えば、特許文献1を参照)。
【0011】
この技術は、データの書き込みをログブロックの空きページに対して行い、ログブロックの空きページがなくなった時またはログブロックエリアが足りなくなった時に、ログブロックに記憶されたデータをデータブロックに反映し、書き込み効率の向上を図るものである。
【0012】
しかし、この技術の問題点は、データブロックとログブロックとが一対一の対応となるために、同時に更新可能なブロック数がログブロック数に限定されることにある。
【0013】
即ち、小さなサイズのデータ書き込みが多数のブロックに対して行われると、ログブロックに空きページが多数ある状況でデータブロックに反映することになり、結果として、書き込み効率が向上しなくなる。
【0014】
また、ブロックの消去回数を抑制するために、ブロックサイズよりも小さな単位であるページサイズ等でデータを管理し、更新されたページサイズのデータを別の消去済みのブロックに追記していく(追加的に書き込んでいく)、といった方式が取られることがある。
【0015】
この場合、更新されたページサイズのデータは、別のブロックに書き込まれるため、元々記憶されていた領域のデータは無効データとなるが、その無効データを含むブロック内に有効データが存在する場合にはそのブロック内のデータを消去して再利用することができない。
【0016】
なぜなら、消去はブロック単位で行う必要があるため、同一のブロック内に有効データが記憶されている場合には、その有効データの消去を防止するため、その有効データを他のブロックに書き直すまではブロック内のデータの消去を行えないからである。
【0017】
このような無効データの存在により、有効データの量よりも多くの不揮発性半導体メモリの記憶領域が必要となる。
【0018】
しかしながら、二次記憶装置内のデータの更新が進むと、無効データの量が増加するため、無効データ及び有効データを含めたデータ容量が大きくなり、これら全てを不揮発性半導体メモリの記憶領域に記憶しきれなくなる場合がある。
【0019】
そこで、無効データを削除する目的で、複数のブロック内の有効データを集めて未使用のブロックに書き直す処理(コンパクション)が行われる(例えば、特許文献2を参照)。
【先行技術文献】
【特許文献】
【0020】
【特許文献1】特開2002−366423号公報
【特許文献2】特開2005−222550号公報
【発明の概要】
【0021】
本発明の例に係わる半導体記憶装置は、半導体記憶装置に対するアクセス単位である第一の単位以下でデータの書き込みを行う半導体記憶素子内に設定される第一の記憶領域と、第二の単位でデータの書き込みを行い、前記第二の単位の二以上の自然数倍である第三の単位でデータの消去を行う不揮発性半導体記憶素子内に設定される第二、第三、及び第四の記憶領域と、複数のデータを前記第一の単位で前記第一の記憶領域に記憶する第一の処理と、前記第一の記憶領域から出力されるデータを、前記第一の単位の二以上の自然数倍かつ前記第三の単位よりも小さい第一の管理単位で前記第四の記憶領域に記憶する第二の処理と、前記第一の記憶領域から出力されるデータを、前記第一の管理単位の二以上の自然数倍である第二の管理単位で前記第三の記憶領域に記憶する第三の処理と、前記第四の記憶領域内の前記第三の単位の領域を選択し、前記選択された領域を前記第二の記憶領域に移動する第四の処理と、前記第四の記憶領域内のデータを選択して前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーし、前記第三の単位の前記領域を前記第二の記憶領域に割り当てる第五の処理と、前記第二の記憶領域内のデータを選択し、前記選択されたデータを前記第二の記憶領域において前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーする第六の処理と、を実行するコントローラとを備える。
【図面の簡単な説明】
【0022】
【図1】第一の基本構成を示す図である。
【図2】第二の基本構成を示す図である。
【図3】キャッシュ管理テーブルを示す図である。
【図4】ページ管理テーブルを示す図である。
【図5】ページ管理テーブルを示す図である。
【図6】ブロック管理テーブルを示す図である。
【図7】物理ブロック管理テーブルを示す図である。
【図8】物理ブロック管理テーブルを示す図である。
【図9】第一の記憶部へのデータ蓄積処理を示すフローチャートである。
【図10】第一の記憶部からのデータ出力処理を示すフローチャートである。
【図11】第一の記憶部からのデータ出力処理を示すフローチャートである。
【図12】第一の記憶部から第二の記憶部へのデータ転送の様子を示す図である。
【図13】第一の記憶部から第三の記憶部へのデータ転送を示す図である。
【図14】第一の記憶部から第三の記憶部へのデータ転送を示す図である。
【図15】第二の記憶部から第三の記憶部へのデータ転送を示すフローチャートである。
【図16】第二の記憶部から第三の記憶部へのデータ転送の条件を示す図である。
【図17】システム例を示す図である。
【図18】システム例を示す図である。
【図19】コンパクションの例を示す図である。
【図20】第一の実施形態の構成を示す図である。
【図21】キャッシュ管理テーブルを示す図である。
【図22】ページ管理テーブルを示す図である。
【図23】ブロック管理テーブルを示す図である。
【図24】ページFIFO管理テーブルを示す図である。
【図25】物理ブロック管理テーブルを示す図である。
【図26】第四の記憶部でのFIFO処理を示すフローチャートである。
【図27】処理P1を示すフローチャートである。
【図28】コンパクションの処理例1を示すフローチャートである。
【図29】コンパクションの処理例2を示すフローチャートである。
【図30】第二の実施形態の構成を示す図である。
【図31】トラック管理テーブルを示す図である。
【図32】トラックFIFO管理テーブルを示す図である。
【図33】物理ブロック管理テーブルを示す図である。
【図34】第五の記憶部でのFIFO処理を示すフローチャートである。
【図35】コンパクションの処理例1を示すフローチャートである。
【図36】コンパクションの処理例2を示すフローチャートである。
【図37】第三の実施形態の構成を示す図である。
【図38】第四の記憶部でのFIFO処理を示すフローチャートである。
【図39】処理P1を示すフローチャートである。
【図40】第四の記憶部の状態を示す図である。
【図41】第二の記憶部から第三の記憶部へのデータ転送処理及びコンパクション処理の例を示すフローチャートである。
【図42】第二の記憶部の状態を示す図である。
【図43】第二の記憶部の状態を示す図である。
【図44】第二の記憶部の状態を示す図である。
【図45】第二の記憶部の状態を示す図である。
【図46】第二の記憶部の状態を示す図である。
【図47】データの管理単位の一例を説明するための図である。
【図48】クラスタ管理テーブルを示す図である。
【図49】第四の記憶部でのFIFO処理を示すフローチャートである。
【図50】SSDの例を示す図である。
【図51】ブロックの構成例を示す図である。
【図52】メモリセルトランジスタの閾値分布を示す図である。
【図53】ドライブ制御回路の構成例を示す図である。
【図54】プロセッサの構成例を示す図である。
【図55】ポータブルコンピュータの例を示す図である。
【図56】ポータブルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【0023】
以下、図面を参照しながら、本発明を実施するための最良の形態について説明する。
【0024】
[I.書き込み効率の向上を実現する半導体記憶装置]
1. 概要
本発明の実施形態に係る半導体記憶装置は、ホスト機器からのセクタ単位の入力データを第一の記憶部に書き込み、ここで、そのデータが「小さな単位(第一の管理単位)」として管理すべきデータか、または、「大きな単位(第二の管理単位)」として管理すべきデータかを識別し、「小さな単位」として管理すべきデータを第二の記憶部に、「大きな単位」として管理すべきデータを第三の記憶部に書き込むことを特徴とする。
【0025】
また、本発明の実施形態に係る半導体記憶装置は、第二の記憶部に書き込まれた「小さな単位」のデータを統合して、一つの「大きな単位」のデータにし、これを第三の記憶部に書き込むことを特徴とする。
【0026】
「大きな単位」は、「小さな単位」の自然数倍の大きさとする。それぞれの「小さな単位」のデータにおいては、複数のセクタ単位のデータが論理アドレス順に連続して配列されている。同様に、それぞれの「大きな単位」のデータにおいては、複数のセクタ単位のデータが論理アドレス順に連続して配列されている。
【0027】
即ち、本実施形態に係る半導体記憶装置は、狭い論理アドレス範囲に属する複数のセクタ単位のデータ(細粒度データ)を「小さな単位」のデータとして第二の記憶部に記憶し、広い論理アドレス範囲に属する複数のセクタ単位のデータ(粗粒度データ)を「大きな単位」のデータとして第三の記憶部に記憶する。
【0028】
また、第二の記憶部に一定量の「小さな単位」のデータが蓄積された時点で、本実施形態に係る半導体記憶装置は、そのデータを「大きな単位」のデータに統合し、この「大きな単位」のデータを第三の記憶部に記憶する(デフラグメンテーション)。
【0029】
例えば、「小さな単位」、「大きな単位」の大きさが、NAND型フラッシュメモリのページサイズ、ブロックサイズとそれぞれ等しい場合を考える。即ち、第一の記憶部にセクタ単位(第一の単位)のデータを書き込み、第二の記憶部にページ単位(第二の単位)のデータを書き込み、第三の記憶部にブロック単位(第三の単位)のデータを書き込む場合を考える。
【0030】
この場合、ホスト機器から半導体記憶装置に入力されるセクタサイズのデータは、最初に、第一の記憶部に書き込まれる。第一の記憶部に書き込まれたデータは、そのデータ数またはデータ量に基づいて、第二の記憶部に書き込むか、または、第三の記憶部に書き込むかが決定される。
【0031】
即ち、第一の記憶部に書き込まれたデータが第一の条件を満たす場合は、そのデータは「大きな単位」として管理され、第三の記憶部の各ブロックにブロック単位のデータとして記憶する。この場合、書き込みに伴ってブロック単位のデータを消去しても書き込み効率は悪くならない。
【0032】
一方、第一の記憶部に書き込まれたデータが第一の条件を満たさない場合は、そのデータは「小さな単位」として管理され、第二の記憶部の各ページにページ単位のデータとして記憶する。この場合、ページ単位のデータの追記を行うことで、ブロック単位のデータの消去を減らすことができる。
【0033】
第二の記憶部に書き込まれたページ単位に等しい「小さな単位」のデータは、更に、第二の条件に基づいて選択され、第二の条件に基づいて選択されたデータを含む複数のデータを統合して「大きな単位」のデータとし、これを第三の記憶部の各ブロックにブロック単位のデータとして記憶する。
【0034】
第一の条件は、例えば、データ数により規定される。
【0035】
即ち、第一の記憶部に蓄積されたデータの数が所定の閾値に達する場合にはそのデータを第三の記憶部に転送し、第一の記憶部に蓄積されたデータの数が所定の閾値に達しない場合にはそのデータを第二の記憶部に転送する。
【0036】
また、これに代えて、第一及び第二の記憶部に蓄積されたデータの合計数が所定の閾値に達するか否かを判定してもよい。即ち、その合計数が所定の閾値に達する場合にはそのデータを第三の記憶部に転送し、その合計数が所定の閾値に達しない場合にはそのデータを第二の記憶部に転送する。
【0037】
第二の条件は、例えば、書き込み順序または有効データ数により規定される。
【0038】
前者の場合、第二の記憶部に割り当てられた各ブロックから検出された、書き込み順序が最も古いブロック内のデータから順次選択し、選択されたデータを第三の記憶部に転送する。
【0039】
後者の場合、第二の記憶部に割り当てられた各ブロックについて、ブロック内の有効なページ単位のデータの論理アドレスをブロック単位のサイズにアラインした論理アドレス範囲内に、いくつのページ単位の有効データが第二の記憶部に記憶されているかを合計し、その合計値が最大であるブロック内の有効データを第三の記憶部に転送する。
【0040】
尚、「論理アドレスを所定サイズ(ページ単位のサイズ、ブロック単位のサイズ等)にアラインする」とは、論理アドレスを所定サイズで割り算した時の剰余が0になるアドレスに切り下げることを意味する。例えば論理アドレスAをサイズSにアラインしたアドレスは、(A−(AをSで割った余り))となる。同様に、「所定サイズにアラインされた論理アドレス範囲」とは、論理アドレスを所定サイズにアラインしたアドレスから所定サイズ分の範囲を意味する。
【0041】
本実施形態に係る半導体記憶装置によれば、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止することができる。
【0042】
特に、本実施形態の効果は、消去/読み出し/書き込みの単位が固定される不揮発性半導体記憶素子(例えば、NAND型フラッシュメモリ)で半導体記憶装置を構成し、パーソナルコンピュータ等の二次記憶装置(SSD: Solid State Drive)として使用した場合に最も顕著に表われる。
【0043】
このような半導体記憶装置は、大容量化の傾向にあり、また、大容量化が複数ビットを一つのメモリセルに記憶させるMLC(Multi Level Cell)技術により実現されるような場合には、実効的な書き込み速度を維持するために、消去/読み出し/書き込みの単位が大きくなる傾向があるからである。
【0044】
また、パーソナルコンピュータ等は「小さな単位」で二次記憶装置上のデータを更新する場合が多く、これをブロック等の「大きな単位」のみで管理すると、更新データ量に対するデータ消去量が大きくなり、書き込み効率が低下し、メモリセルの劣化が早まるからである。
【0045】
本実施形態のように、ホスト機器からの入力データを「小さな単位」と「大きな単位」とに分けて、それぞれを異なる記憶部に書き込めば、そのような問題が発生する可能性を低減させることが可能となる。
【0046】
即ち、半導体記憶装置内部で「小さな単位」と「大きな単位」という二つの管理単位を併用することで、ホスト機器からの書き込みデータ量に対して不揮発性半導体記憶素子のデータ消去量を最適化し、書き込み効率の向上を実現する。
【0047】
2. 実施形態
本発明の実施形態について説明する。
【0048】
まず、本実施形態に関連する概念として書き込み効率について述べる。
【0049】
NAND型フラッシュメモリ等のフラッシュメモリのメモリセルの劣化に関しては、ホスト機器側からの書き込みデータ量に対して必要なフラッシュメモリのブロック単位のデータの消去量が重要なファクターとなる。
【0050】
本実施形態では、このデータ消去量のことを「書き込み効率の値」と呼ぶことにする。
【0051】
書き込みデータ量に対するブロック単位のデータの消去量が小さければ、書き込み効率の値が小さくなり相対的にメモリセルの劣化の進行が遅くなる。これを、書き込み効率が良くなるとする。逆に、ブロック単位のデータの消去量が大きければ、書き込み効率の値が大きくなる。これを、書き込み効率が悪くなるとする。
【0052】
つまり、フラッシュメモリのメモリセルの劣化を防ぐためには、ブロック単位のデータの消去量を小さくし、書き込み効率を良くすることが重要になる。
【0053】
フラッシュメモリを用いた半導体記憶装置において書き込み効率が悪くなる例を示す。
【0054】
この例では、フラッシュメモリのブロック単位のサイズを512キロバイト、ページ単位のサイズを4キロバイト、ホスト機器のセクタ単位のサイズを512バイト、データ管理の単位をブロック単位と同じ512キロバイトと仮定する。
【0055】
ここで、ブロック単位と同じ大きさのデータXがフラッシュメモリに記憶されている状態で、論理アドレスがデータXの論理アドレスの範囲に含まれる1セクタの大きさのデータYが更新された時の処理を考える。
【0056】
データXは、フラッシュメモリのブロックB1内の全体に記憶されているとする。
【0057】
まず、ブロックB1からデータXを一時保存エリアに読み出し、データXの一部についてホスト機器からのデータYの更新を行い、最新データを作成する。そして、ブロックB1とは異なるブロックB2のデータを消去し、ブロックB2内に最新データを書き込む。
【0058】
この処理では、上述のように、512バイトのデータYを書き込むために、512キロバイトのデータXをブロックB1から読み出し、更に、最新データをブロックB2に書き込むために、ブロックB2内の512キロバイトのデータを消去する必要がある。
【0059】
従って、ホスト機器からの書き込みデータ量に対して、フラッシュメモリ内での消去量が大きく、書き込み効率が非常に悪い。
【0060】
この例での書き込み効率の値は、512キロバイト/512バイト=1024となる。
【0061】
通常、NAND型フラッシュメモリでは、ブロックの消去処理及び書き込み処理に多くの時間を費やすため、書き込み効率が悪いということは、ホスト機器からのデータ書き込み量に対して、ブロック単位のデータの消去や、データを消去したブロックへの書き込みが多いことを表し、フラッシュメモリの速度性能を悪くすることを同時に意味する。
【0062】
(1) 基本構成
図1は、本実施形態に係る半導体記憶装置の第一の基本構成を示している。
【0063】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶しておくもので、そのデータは、セクタ単位(第一の単位)ごとに第一の記憶部11に書き込まれる。第一の記憶部11は、例えば、DRAM(Dynamic Random Access Memory)等の揮発性半導体記憶素子から構成される。
【0064】
第一の記憶部11を構成する揮発性半導体記憶素子内における読出し/書き込みの物理的な単位は、セクタ単位以下であるとする。ホスト機器は、セクタ単位の論理アドレスを用いて半導体記憶装置に対するアクセスを行う(LBA:Logical Block Addressing)ため、第一の記憶部11は、セクタ単位で入力データの管理を行う。
【0065】
第二の記憶部12は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子の複数のブロックから構成される。第三の記憶部13は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子の複数のブロックから構成される。
【0066】
第二及び第三の記憶部12,13は、それぞれ別々の不揮発性半導体記憶素子(メモリチップ)から構成される。それぞれのメモリチップは互いに異なる性能を備えていても良く、例えば、互いに異なる書き込み速度、互いに異なる記憶容量を備えていても良い。例えば、第二の記憶部12がSLC(Single Level Cell)技術を用いたNAND型フラッシュメモリから構成され、第三の記憶部13がMLC(Multi Level Cell)技術を用いたNAND型フラッシュメモリから構成されていても良い。
【0067】
不揮発性半導体記憶素子内において、一括して読出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。
【0068】
一つのブロックは、複数のページから構成されている。また、本実施形態に係る不揮発性半導体記憶素子は、同一のページに対する再書き込みは、そのページを含むブロック全体を消去した後でなければ不可能であるという性質を有している。
【0069】
従って、更新データ(新データ)がホスト装置から入力された場合、ブロック内に元々記憶されていた、新データと同一の論理アドレスを有する旧データは、無効データとして取り扱われる。新データは、旧データに対して優先度が高い有効データとして取り扱われ、旧データは、新データを参照することにより無視される無効データとして取り扱われる。
【0070】
以下、簡略化のため、半導体記憶装置内部でのデータの管理単位である「小さな単位(第一の管理単位)」の大きさがページ単位のサイズ(1ページに記憶可能なデータ量)と等しく、「大きな単位(第二の管理単位)」の大きさがブロック単位のサイズ(1ブロックに記憶可能なデータ量)と等しい場合について説明する。「小さな単位」はセクタの自然数倍の大きさの単位とする。
【0071】
尚、データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC:Error Checking/Correcting Code、内部制御用フラグ等)が含まれないものとする。
【0072】
通常、NAND型フラッシュメモリ等の不揮発性半導体記憶素子を含むシステムでは、主データに対して冗長データが付加された状態で読み出し、書き込みが行われるが、簡略化のため、上述のように定義する。
【0073】
第二の記憶部12は、第一の記憶部11から転送されるデータを、ページ単位に等しい「小さな単位」ごとに記憶する。第三の記憶部13は、第一の記憶部11または第二の記憶部12から転送されるデータを、ブロック単位に等しい「大きな単位」ごとに記憶する。
【0074】
第二の記憶部12の容量は、一部の「小さな単位」で更新されたデータのみを管理すればよいため、第三の記憶部13の容量よりも小さくて構わない。
【0075】
以下の説明では、一つのブロック単位のデータは、一つのブロック内の全体に記憶されるものとし、一つのページ単位のデータは、一つのページ内の全体に記憶されるものとする。それぞれのブロックは複数のページによって構成され、複数のページ単位のデータが1つのブロックに記憶されるものとする。
【0076】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態においてコントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、またはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれるものである。
【0077】
コントローラ10は、論理アドレスでアクセスされるデータが第一乃至第三の記憶部11,12,13の何処に記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル及び物理ブロック管理テーブルを主記憶メモリ内に備える。
【0078】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0079】
図2は、本実施形態に係る半導体記憶装置の第二の基本構成を示している。
【0080】
第二の基本構成は、図1の第一の基本構成と比べると、以下の点が相違している。
【0081】
第二及び第三の記憶部12,13は、不揮発性半導体記憶素子22内に配置される。第一の記憶部11を構成する揮発性半導体記憶素子は、例えばDRAMとし、第二及び第三の記憶部12,13を構成する不揮発性半導体記憶素子22は、例えばNAND型フラッシュメモリとする。
【0082】
第二及び第三の記憶部12,13は、不揮発性半導体記憶素子22内の記憶領域を共有して形成され、コントローラ10が不揮発性半導体記憶素子22内のブロックを第二の記憶部12、または、第三の記憶部13に割り当てる。第二及び第三の記憶部12,13に対するブロックの割り当ては固定的ではなく、コントローラ10の制御下で動的に変更される。第二及び第三の記憶部12,13は、複数の不揮発性半導体記憶素子(メモリチップ)に亘って形成されていても良い。コントローラ10は、複数の不揮発性半導体記憶素子内の全ブロックを抽象的に1つの記憶領域として取り扱っても良い。
【0083】
コントローラ10は、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、及び物理ブロック管理テーブルを主記憶メモリ内に備える。
【0084】
図1及び図2において、半導体記憶装置への電源供給がない状態では、これらの管理テーブルは不揮発性半導体記憶素子内に保持されている。コントローラ10は、電源供給時に各管理テーブルを主記憶メモリに展開し、ホスト機器から指定される論理アドレス空間と、不揮発性半導体記憶素子上での物理的なデータ記憶位置とを対応させるためのアドレス変換を行う。
【0085】
・ キャッシュ管理テーブル
図3は、キャッシュ管理テーブルの構成例を示している。
【0086】
キャッシュ管理テーブルは、図1及び図2の第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【0087】
第一の記憶部11の1ページ単位の領域一つに対して1エントリとする。
【0088】
エントリ数は、第一の記憶部11に収まるページ単位のデータ数、即ち、(第一の記憶部11の全容量)/(ページ単位のサイズ)以下とする。
【0089】
各エントリには、ページ単位のデータの論理アドレス、第一の記憶部11の物理アドレス、及び、対応するページ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【0090】
各エントリに対応付けて、データを一時的に記憶するためのページ単位の領域を第一の記憶部11内に用意し、その領域の物理アドレスを各エントリに格納する。ページ単位の領域が連続的に配置されている等、エントリに対応する領域の物理アドレスが固定的であれば、物理アドレスをエントリ内に格納する必要はない。
【0091】
キャッシュ管理テーブルにおいて、第一の記憶部11の各ページ単位の領域は、更にセクタ単位の領域に分割され、各セクタ単位の領域内のデータの状態を、セクタフラグの値を「有」または「無」にすることで示す。
【0092】
セクタフラグが「有」の領域には、ホスト機器からの有効データが記憶されている。これに対し、セクタフラグが「無」の領域には、ホストから書き込まれた最新のデータが記憶されておらず、無効な領域となる。また、エントリ内の全てのセクタフラグが「無」のエントリは、未使用のエントリとみなす。
【0093】
尚、上記キャッシュ管理テーブルの構成は、各エントリに論理アドレスを割り当てるフルアソシアティブと呼ばれる管理方法を元にしているが、n−wayセットアソシアティブ等の方法で、第一の記憶部11における論理アドレスと物理アドレスの対応を管理してもよい。
【0094】
・ ページ管理テーブル
図4は、ページ管理テーブルの構成例を示している。
【0095】
ページ管理テーブルは、図1及び図2の第二の記憶部12に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0096】
第二の記憶部12の1ページ単位の領域一つに対して1エントリとする。
【0097】
エントリ数は、第二の記憶部12に収まるページ単位のデータ数、即ち、(第二の記憶部12の全容量)/(ページ単位のサイズ)以下とする。
【0098】
各エントリには、ページ単位のデータの論理アドレスと第二の記憶部12の物理アドレスとが関連付けられている。
【0099】
例えば、論理アドレスAの1ページ単位分のデータは、物理アドレスAにより指定される第二の記憶部12のブロック0の1番目のページに記憶され、論理アドレスCの1ページ単位分のデータは、物理アドレスCにより指定される第二の記憶部12のブロック1の2番目のページに記憶される。無効なエントリは、エントリの有効・無効を示すフラグを用意する、無効な論理アドレスや物理アドレスをエントリに記憶する等の手段で表現する。
【0100】
図5は、ページ管理テーブルの別の例を示している。図5におけるページ管理テーブルについては、後述する。
【0101】
・ ブロック管理テーブル
図6は、ブロック管理テーブルの構成例を示している。
【0102】
ブロック管理テーブルは、図1及び図2の第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【0103】
第三の記憶部13の1ブロック単位の領域一つに対して1エントリとする。
【0104】
エントリ数は、第三の記憶部13に収まるブロック単位のデータ数、即ち、(第三の記憶部13の全容量)/(ブロック単位のサイズ)以下とする。
【0105】
各エントリは論理アドレス順に配列されている。ブロック単位のデータの論理アドレスに対応して、第三の記憶部13内のブロックを指定する物理アドレスが、各エントリに関連付けられている。無効なエントリは、エントリの有効・無効を示すフラグを用意する、無効な物理アドレスをエントリに記憶する等の手段で表現する。
【0106】
・ 物理ブロック管理テーブル
図7及び図8は、物理ブロック管理テーブルの構成例を示している。
【0107】
図7の物理ブロック管理テーブルは、第一の基本構成に使用され、図1の第二の記憶部12及び第三の記憶部13のブロックの使用状況(使用/未使用)を管理する。第二の記憶部12の物理ブロック管理テーブルには、図7(a)に示すように、空き状況へのポインタが記憶され、ブロック内のページの空き状況も管理する。
【0108】
また、図7(b)に示すように、記憶領域の節約のため、第三の記憶部13の物理ブロック管理テーブルについては、ページの空き状況を管理しない。
【0109】
図8の物理ブロック管理テーブルは、第二の基本構成に使用され、図2の不揮発性半導体記憶素子22内の各々の記憶領域(ブロック)を、第二の記憶部12として使用するか、第三の記憶部13として使用するか、または、未使用(内部に有効データが存在しない)か、を管理する。記憶領域が第二の記憶部12として使用される場合、物理ブロック管理テーブルは、ページの空き状況を関連付けて管理する。
【0110】
第二及び第三の記憶部12,13の1ブロック(物理ブロック)に対して1エントリとする。
【0111】
エントリ数は、データエリアとして使用可能なブロック数以下とする。
【0112】
各エントリには、物理アドレスと、それにより指定されるブロックの使用状況を記憶し、第二の記憶部12に使用されるブロックについては、ページの空き状況を管理する。
【0113】
また、ページの空き状況として、各ページについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0114】
各々のページに対するデータ書き込み順序について、不揮発性半導体記憶素子が、ページへの書き込みを物理アドレス昇順での追記しか行えない場合には、ブロック内においてデータの追記が可能な空きページ位置を記憶することでページの空き状況を管理する。
【0115】
第二の記憶部12としてのブロック内のページの空き状況としては、例えば、ブロック内の空きページを管理する、図4に示すデータ構造が採用され得る。
【0116】
本実施形態では、ページの空き状況を物理ブロック管理テーブルに記憶しているが、図5に示すように、ページ管理テーブルを、第二の記憶部12で使用する物理ブロック単位に分割し、論理アドレスとページの空き状況を同時に記憶することによって、ブロック内のページの空き状況をページ管理テーブルに記憶してもよい。
【0117】
以上の説明では、簡略化のため、第二の記憶部12におけるデータの記憶の単位(「小さな単位(第一の管理単位)」)をページ単位とし、第三の記憶部13におけるデータの記憶の単位(「大きな単位(第二の管理単位)」)をブロック単位としているが、管理単位の設定はこれに限られない。
【0118】
重要な点は、ハードディスクドライブ(磁気ディスク装置)の代替品として二次記憶装置を構成するNAND型フラッシュメモリ等の不揮発性半導体記憶素子では、消去/読み出し/書き込みの単位が固定されている、ということにある。
【0119】
例えば、ページを分割して管理して、第二の記憶部12で使用される「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0120】
或いは、複数のページを合わせて管理して、第二の記憶部12で使用される「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0121】
同様に、ブロックを分割して管理して、第三の記憶部13で使用される「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0122】
或いは、複数のブロックを合わせて管理して、第三の記憶部13で使用される「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしてもよい。
【0123】
第二及び第三の記憶部12,13における消去の単位は、同じ(例えば、ブロックサイズ)でもよいし、また、複数のブロックを同時に消去する等、異なっていてもよい。
【0124】
(2) 処理方法
図1及び図2のコントローラ10が行う処理について説明する。
【0125】
A. 第一の記憶部へのデータ蓄積処理
図9は、第一の記憶部11へのデータ蓄積処理を示している。
【0126】
ホスト機器からの入力データは、最初に第一の記憶部11に書き込まれ、かつ、そのデータは、第一の記憶部11に一定期間蓄積される。この時、図3のキャッシュ管理テーブルが更新される。
【0127】
1. コントローラ10は、入力データの論理アドレスを、ページ単位に等しい「小さな単位」のサイズでアラインする(ステップST1)。
【0128】
2. コントローラ10は、ページ単位のサイズでアラインされた論理アドレス範囲に対応するエントリを、キャッシュ管理テーブルから検索する(ステップST2)。
【0129】
3. コントローラ10は、第一の記憶部11内に対応するエントリが存在するか否かを判断する(ステップST3)。第一の記憶部11内に対応するエントリが存在する場合、コントローラ10はこのエントリを選択し、処理はステップST8に進む。第一の記憶部11内に対応するエントリが存在しない場合、処理はステップST4に進む。
【0130】
4. コントローラ10は、キャッシュ管理テーブル内を検索し、未使用のエントリが存在するか否かを判断する(ステップST4)。未使用のエントリが検出された場合、処理はステップST6に進む。未使用のエントリが検出されない場合、処理はステップST5に進む。
【0131】
5. コントローラ10は、次に説明する「第一の記憶部からのデータ出力処理」を実行する。これにより、データは第一の記憶部11から第二の記憶部12及び第三の記憶部13に出力される。(ステップST5)。
【0132】
その結果、出力されたデータに対応するキャッシュ管理テーブル内のエントリは未使用として設定される。同時に、このエントリ内のセクタフラグは、全て「無」として設定される。これらの設定を終えた後、処理はステップST4に戻る。
【0133】
6. コントローラ10は、ホスト機器からの入力データのために、未使用のエントリを選択する(ステップST6)。
【0134】
7. コントローラ10は、入力データの論理アドレスをページ単位のサイズにアラインすることで得られた論理アドレスを、選択されたエントリに設定する(ステップST7)。即ち、コントローラ10は、選択されたエントリを、入力データに対応するエントリとする。
【0135】
8. コントローラ10は、入力データの論理アドレスと、選択したエントリの論理アドレス及び物理アドレスから、データを書き込むための物理アドレスを決定する。コントローラ10は、その物理アドレスが指定する記憶領域に入力データを書き込む指示を、第一の記憶部11を含む不揮発性半導体記憶素子に対して与える(ステップST8)。
【0136】
更に、コントローラ10は、ページ単位の領域内でデータが書き込まれた位置に対応するセクタフラグを、「有」として設定する。
【0137】
ホスト機器からの入力データがページサイズよりも大きい等の理由で、キャッシュ管理テーブルの複数のエントリを必要とする場合もあるが、その場合、コントローラ10は、上記処理の繰り返しによって複数のエントリを更新する。
【0138】
B. 第一の記憶部からのデータ出力処理
図10及び図11を参照しつつ第一の記憶部11からのデータ出力処理について説明する。
【0139】
コントローラ10は、第一の記憶部11からの出力候補となるページ単位のデータを選択し、第一の条件に従って、そのデータを第二の記憶部12または第三の記憶部13に転送する。第一の条件は、例えば、データ数により規定される。
【0140】
具体的には、コントローラ10が下記の処理a.または処理b.を実行する。
【0141】
a. コントローラ10は、第一の記憶部11内のデータを数え、そのデータをブロック単位に等しい「大きな単位」で管理するか、または、ページ単位に等しい「小さな単位」で管理するかを決定する。
【0142】
1. コントローラ10は、出力候補となるページ単位(「小さな単位」)のデータの論理アドレスLAを、ブロック単位(「大きな単位」)のサイズでアラインする(ステップST1)。
【0143】
2. コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれるエントリ数を、図3のキャッシュ管理テーブルを検索することによって数え上げる(ステップST2)。
【0144】
例えば、図12の例によれば、ブロック単位のサイズでアラインされた論理アドレス範囲X内に含まれるエントリ数は、LA1,LA4,LA6の3つとなる。
【0145】
3. コントローラ10は、エントリ数が所定の閾値以上であるか否かを判断する。所定の閾値は、例えば、一つのブロック単位(「大きな単位」)の領域内に収まるページ単位(「小さな単位」)のデータ総数の50%として設定しても良い(ステップST3)。
【0146】
エントリ数が所定の閾値未満である場合、コントローラ10は、その論理アドレス範囲内に含まれる個々のデータを、ページ単位に等しい「小さな単位」のデータとして、第二の記憶部12に転送する。
【0147】
エントリ数が所定の閾値以上である場合、コントローラ10は、その論理アドレス範囲内に含まれる複数のデータを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する。
【0148】
・「小さな単位」の場合(図10のフローチャート及び図12を参照)
コントローラ10は、第一の記憶部11からの出力候補となるデータを選択し、選択されたデータを、第二の記憶部12にページ単位のデータとして転送する。図10のステップST4以降を参照する。
【0149】
ここでは、第一の記憶部11から一つのページ単位のデータが転送される場合の処理について説明する。複数のページ単位のデータが転送される場合は、下記の処理が繰り返される。
【0150】
4. コントローラ10は、図4のページ管理テーブルを検索し、第一の記憶部11から転送されてくる書き込みデータと同じ論理アドレスLAを持つエントリが存在するか否かを判断する(ステップST4)。
【0151】
そのようなエントリが検出された場合、コントローラ10はこのエントリを選択し、処理はステップST9に進む。そのようなエントリが検出されなかった場合、処理はステップST5に進む。
【0152】
5. コントローラ10は、ページ管理テーブルに未使用のエントリが存在するか否かを判断する(ステップST5)。
【0153】
未使用のエントリが検出された場合、処理はステップST7に進む。未使用のエントリが検出されなかった場合、処理はステップST6に進む。
【0154】
6. コントローラ10は、「第二の記憶部から第三の記憶部へのデータ転送処理」を実行する(ステップST6)。その結果、出力されたデータに対応するエントリは、未使用として設定される。コントローラ10は、利用可能な未使用のエントリを確保し、処理はステップST5に戻る。
【0155】
7. コントローラ10は、未使用のエントリを、書き込みデータの行き先として選択する(ステップST7)。
【0156】
8. コントローラ10は、選択されたエントリに、ページ単位の書き込みデータの論理アドレスを設定する(ステップST8)。選択されたエントリは、書き込みデータに対応するエントリとして取り扱われることになる。
【0157】
9. コントローラ10は、選択されたエントリ内における書き込み位置を決定する(ステップST9)。書き込み位置の決定について、以下詳細に説明する。
【0158】
9−1. コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、第二の記憶部12内で使用されている、書き込み可能な状態の空きページを有するブロックを選択する。そのようなブロックが検出された場合、コントローラ10は、書き込みデータの行き先として、そのブロック内の空きページを選択する(ステップST9−1)。
【0159】
ページ単位でのデータの書き込みにおいて、第二の記憶部12を構成する不揮発性半導体記憶素子が、ページへの書き込みを物理アドレス昇順での追記しか行えない場合、コントローラ10は、データの追記が可能な空きページを選択する。
【0160】
第二の記憶部12内で使用されているブロック中に空きページが検出された場合、処理はステップST10に進む。第二の記憶部12内で使用されているブロック中に空きページが検出されなかった場合、処理はステップST9−2に進む。
【0161】
9−2. コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、未使用のブロックが存在するか否かを判断する(ステップST9−2)。未使用のブロックが検出された場合、処理はステップST9−4に進む。未使用のブロックが検出されなかった場合、処理はステップST9−3に進む。
【0162】
9−3. コントローラ10は、「第二の記憶部から第三の記憶部へのデータ転送処理」を行い、未使用のブロックを生成する(ステップST9−3)。未使用のブロックを生成した後、処理はステップST9−2に戻る。
【0163】
9−4. コントローラ10は、第二の記憶部12用に未使用のブロックを取得する(ステップST9−4)。
【0164】
9−5. コントローラ10は、取得した未使用のブロックに対応する図7または図8の物理ブロック管理テーブルのエントリを、「第二の記憶部12(使用)」に更新する。第二の基本構成(図8)の場合、コントローラ10は、ページの空き状況を記憶する領域を確保し、その領域をエントリに関連付ける(ステップST9−5)。
【0165】
9−6. コントローラ10は、取得した未使用のブロック内のデータを消去する指示を不揮発性半導体記憶素子に対して与え、ページの空き状況をすべて「書き込み可能」な状態に更新する。コントローラ10は、ブロック内の空きページの一つを、書き込みデータの行き先として選択する(ステップST9−6)。
【0166】
以上により、書き込み位置の決定処理を完了する。
【0167】
10. コントローラ10は、ページ単位のデータを構成するセクタ単位のデータ全てが、第一の記憶部11に存在するか否かを判断する(ステップST10)。
【0168】
コントローラ10は、図3のキャッシュ管理テーブル中の、書き込みデータに対応するエントリのセクタフラグを走査する。セクタフラグが全て「有」の場合、処理はステップST12に進む。セクタフラグに一つでも「無」がある場合、処理はステップST11に進む。
【0169】
11. セクタフラグに一つでも「無」がある場合、セクタ単位のデータが第一の記憶部11に揃っていないことを表す。コントローラ10は、セクタフラグ「無」のセクタ位置に対応する不足データを、第二の記憶部12及び第三の記憶部13の少なくとも一方から読み出す(ステップST11)。
【0170】
コントローラ10は、第二の記憶部12からの不足データの読み出しを試みる。
【0171】
コントローラ10は、セクタ単位のデータの論理アドレスをページ単位のサイズでアラインし、アラインされた論理アドレスをもってページ管理テーブルを検索する。
【0172】
エントリが検出された場合、コントローラ10は、エントリに記録されている物理アドレスに対応するページ単位のデータに含まれる不足データを読み出す。エントリが検出されなかった場合、コントローラ10は、第三の記憶部13からの不足データの読み出しを試みる。
【0173】
コントローラ10は、セクタ単位のデータの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレスをもってブロック管理テーブルを検索する。
【0174】
エントリが検出された場合、コントローラ10は、エントリに記録されている物理アドレスに対応するブロック単位のデータに含まれる不足データを読み出す。
【0175】
第二の記憶部12、または、第三の記憶部13から読み出された不足データは、第一の記憶部11の作業領域、または、コントローラ10の主記憶メモリ等に一時的に記憶されるが、特にこれに限定されることはない。
【0176】
12. ページ単位のデータを構成する全てのセクタ単位のデータを揃えた後、コントローラ10は、そのページ単位のデータを第二の記憶部12内で書き込みデータの行き先として選択された空きページに書き込む指示を、不揮発性半導体記憶素子に与える。コントローラ10は、物理ブロック管理テーブルの対応するページの空き状況を、「書き込み済み」(記憶領域が有効データで満たされている)である状態に更新する(ステップST12)。
【0177】
ページ単位のデータを書き込んだ後、コントローラ10は、ページ管理テーブルの選択されたエントリに、書き込みデータの論理アドレスと、書き込みデータの行き先であるページの物理アドレスとを登録する。
【0178】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ10は、その物理アドレスを上書きする。古い物理アドレスが指し示すページに記憶されていた旧データは、無効データとなる。
【0179】
13. コントローラ10は、図3のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される(ステップST13)。
【0180】
続いて、コントローラ10は、図7または図8の物理ブロック管理テーブルと、図4のページ管理テーブルとを走査し、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【0181】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ページ管理テーブルではそのブロック内のページを指し示す物理アドレスが存在しないブロックに対応するエントリが、「未使用」として設定される。図8の構成の場合は、ページの空き状況を記憶する領域が解放される。
【0182】
・「大きな単位」の場合(図11のフローチャート、図13、及び図14を参照)
コントローラ10は、第一の記憶部11からの出力候補となるデータを選択し、選択されたデータを、第三の記憶部13にブロック単位のデータとして転送する。図11のステップST4’以降を参照する。
【0183】
4’ コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、未使用のブロックを取得する。コントローラ10は、確保された未使用のブロックを、第三の記憶部13に割り当てる(ステップST4’)。
【0184】
コントローラ10は、物理ブロック管理テーブルの確保された未使用のブロックに対応するエントリを「第三の記憶部13(使用)」に更新し、確保された未使用のブロック内のデータを消去する指示を、不揮発性半導体記憶素子に与える。
【0185】
「大きな単位」のサイズがブロック単位のサイズ未満である場合、コントローラ10は、第三の記憶部13内で使用されており、「書き込み可能」な状態の「大きな単位」の空き領域を有するブロックを、「小さな単位」の場合と同様に選択しても良い。
【0186】
5’ コントローラ10は、ブロック単位のデータを構成するセクタ単位のデータ全てが、第一の記憶部11に存在するか否かを判断する(ステップST5’)。
【0187】
具体的には、コントローラ10は、図3のキャッシュ管理テーブルが、ブロック単位のサイズの論理アドレス範囲内に含まれるページ単位のデータに対応する全てのエントリを含むか否かを判断し、同時に、これらのエントリのセクタフラグが全て「有」であるか否かを判断する。
【0188】
ブロック単位のデータを構成するセクタ単位のデータが全て第一の記憶領域11に揃っている場合、処理はステップST7’に進む。論理アドレス範囲内に含まれるページ単位のデータに対応するエントリが一つでも検出されない場合、及び、セクタフラグが一つでも「無」である場合の少なくとも一方が成立するならば、処理はステップST6’に進む。
【0189】
6’ コントローラ10は、キャッシュ管理テーブルに含まれないページ位置、及びセクタフラグが「無」であるセクタ位置に対応する不足データを、第二の記憶部12及び第三の記憶部13の少なくとも一方から読み出す(ステップST6’)。
【0190】
コントローラ10は、図13に示すように、第二の記憶部12からの不足データの読み出しを試みる。
【0191】
コントローラ10は、セクタ単位のデータの論理アドレスをページ単位のサイズでアラインし、アラインされた論理アドレスをもってページ管理テーブルを検索する。
【0192】
エントリが検出された場合、コントローラ10は、エントリに記録されている物理アドレスに対応するページ単位のデータに含まれる不足データを読み出す。
【0193】
エントリが検出されなかった場合、コントローラ10は、図14に示すように、第三の記憶部13からの不足データの読み出しを試みる。
【0194】
コントローラ10は、セクタ単位のデータの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレスをもってブロック管理テーブルを検索する。コントローラ10は、エントリに記録されている物理アドレスに対応するブロック単位のデータに含まれる不足データを読み出す。
【0195】
第二の記憶部12、または、第三の記憶部13から読み出された不足データは、第一の記憶部11の作業領域、または、コントローラ10の主記憶メモリ等に一時的に記憶されるが、これらに特に限定されることはない。
【0196】
7’ ブロック単位のデータを構成する全てのセクタ単位のデータを揃えた後、コントローラ10は、そのブロック単位のデータを第三の記憶部13内で書き込みデータの行き先として選択された空きブロックに書き込む指示を、不揮発性半導体記憶素子に与える(ステップST7’)。
【0197】
ブロック単位のデータを書き込んだ後、コントローラ10は、そのブロック単位のデータの論理アドレス範囲に対応するブロック管理テーブルのエントリに、書き込みデータの行き先であるブロックの物理アドレスを登録する。
【0198】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ10は、その物理アドレスに対して上書きする。古い物理アドレスが指し示すブロックに記憶されていた旧データは、無効データとなる。
【0199】
8’ コントローラ10は、図3のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される(ステップST8’)。
【0200】
続いて、コントローラ10は、図7または図8の物理ブロック管理テーブルと図6のブロック管理テーブルとを走査し、内部のブロック単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【0201】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ブロック管理テーブルではそのブロックを指し示す物理アドレスが存在しないブロックに対応する物理ブロック管理テーブルのエントリが、「未使用」として設定される。
【0202】
同様に、ブロック単位のサイズを有する書き込みデータの論理アドレス範囲に含まれる論理アドレスに対応するエントリが、図4または図5のページ管理テーブルに存在する場合、そのエントリが無効化される。これは、第二の記憶部12に記憶されていたデータの第三の記憶部13への転送に基づいて、第二の記憶部12に記憶されていたデータが参照されないように無効化する処理である。
【0203】
更に、第二の記憶部12について、コントローラ10は、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定する。図8の構成の場合は、ページの空き状況を記憶する領域が解放される。
【0204】
b. コントローラ10は、第一及び第二の記憶部11,12内のデータを数え、そのデータをブロック単位に等しい「大きな単位」で管理するか、または、ページ単位に等しい「小さな単位」で管理するかを決定する。
【0205】
この場合、コントローラ10は、図3のキャッシュ管理テーブル、及び、図4または図5のページ管理テーブルを検索し、出力候補となるデータの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲に含まれるエントリ数を、第一及び第二の記憶部11,12について数え上げ合計する。
【0206】
エントリ数の合計が所定の閾値、例えば、一つのブロック単位(「大きな単位」)の領域内に収まるページ単位(「小さな単位」)のデータ総数の50%以上である場合、出力候補のデータは「大きな単位」で管理され、エントリ数の合計が所定の閾値未満である場合、出力候補のデータは「小さな単位」で管理される(ステップST1→ステップST2→ステップST3)。
【0207】
・「小さな単位」の場合(図10のフローチャート参照)
コントローラ10は、第一の記憶部11から出力されたデータを、上述のa.の場合と同様に、ページ単位のデータとして第二の記憶部12に記憶する。第一の記憶部11から出力されたデータを第二の記憶部12に書き込んだ後、上述のa.の場合と同様に、図3のキャッシュ管理テーブルを更新し、書き込みデータに対応するエントリを無効化する。更に、図4または図5のページ管理テーブル、及び、図7または図8の物理ブロック管理テーブルを更新する(ステップST4〜ステップST13)。
【0208】
・「大きな単位」の場合(図11のフローチャート参照)
コントローラ10は、第一の記憶部11から出力されたデータを、上述のa.の場合と同様に、ブロック単位のデータとして第三の記憶部13に記憶する。第一の記憶部11から出力されたデータを第三の記憶部13に書き込んだ後、上述のa.の場合と同様に、図3のキャッシュ管理テーブルを更新し、書き込みデータに対応するエントリを無効化する。更に、図4または図5のページ管理テーブル、図6のブロック管理テーブル、及び、図7または図8の物理ブロック管理テーブルを更新する(ステップST4’〜ステップST8’)。
【0209】
尚、図11のフローチャートにおいて、ステップST4’は、ステップST7’の直前に配置されていても良い。この場合、コントローラ10は、第三の記憶部13に書き込むべきデータを決定した後に、「未使用」のブロックを第三の記憶部13に割り当てることとしても良い。
【0210】
C. 第二の記憶部から第三の記憶部へのデータ転送処理
図15を参照しつつ、第二の記憶部12から第三の記憶部13へのデータ転送処理について説明する。
【0211】
第二の記憶部12の容量は第三の記憶部13の容量よりも小さく設定されることが多いため、第二の記憶部12に所定量のデータが蓄積されたら(ページ単位に等しい「小さな単位」のデータによって占有されるブロック数が、第二の記憶部12の容量として定められた許容範囲を超えたら)、コントローラ10は、第二の条件の下で、第二の記憶部12からの追い出しブロックを選択する。
【0212】
コントローラ10は、追い出しブロック内に記憶されているページ単位に等しい「小さな単位」の各データを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する。
【0213】
換言すれば、コントローラ10は、ページ単位に等しい「小さな単位」から、ブロック単位に等しい「大きな単位」へと、データ管理単位を切り替える。この処理の際、「大きな単位」のサイズの論理アドレス範囲内に含まれる、断片化された複数の「小さな単位」のデータが第一、第二、及び第三の記憶部11,12,13から集められ、ブロック単位のデータへの統合が行われる(デフラグメンテーション)。
【0214】
第二の条件は、書き込み順序または有効データ数により規定される。具体的には、コントローラ10が下記の処理a.または処理b.を実行する。
【0215】
a. コントローラ10は、第二の記憶部12に割り当てられているブロックの内、最も古くに書き込みが行われたブロックを選択する。選択されたブロック内に含まれるページ単位の各データは、ブロック単位のデータへと統合され、第三の記憶部13に書き込まれることになる。この場合、コントローラ10は、第二の記憶部12内のブロックの書き込み順序を管理する。書き込み順序に関する情報は、例えば、コントローラ10の内部、不揮発性半導体記憶素子の内部、または他の記憶部の内部に記憶される。
【0216】
b. コントローラ10は、第二の記憶部12内の各ブロックに関して、ブロック内のページ単位(「小さな単位」)の有効データの論理アドレスをブロック単位(「大きな単位」)のサイズでアラインすることによって得られた論理アドレス範囲内において、第二の記憶部12に記憶されているページ単位のデータ数を合計する。コントローラ10は、合計値が最大であるブロックを選択する。選択されたブロック内の各有効データは、ブロック単位のデータへと統合され、第三の記憶部13に書き込まれる(ステップST1〜ステップST8)。
【0217】
以下では、b.の場合について説明する。
【0218】
1. 例えば、図16に示すように、コントローラ10は、第二の記憶部12に割り当てられている各ブロックについて、ページ単位の有効データに関連付けられた論理アドレスLAを、ブロック単位のサイズでアラインする(ステップST1)。
【0219】
2. コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲毎に、第二の記憶部12に記憶されている有効データを数える(ステップST2)。ブロック単位のサイズの論理アドレス範囲X1,X2,X3内の有効データ数は、それぞれ、3個、2個、1個となる。
【0220】
3. コントローラ10は、第二の記憶部12の各ブロックについて、ステップST2で数えた有効データ数の合計を計算する(ステップST3)。コントローラ10は、論理アドレスが重複する有効データについて二重にカウントを実行することはしない。
【0221】
第二の記憶部12のブロックY1に関して、ブロックY1内の有効データはa1,a4である。有効データa1は、ブロック単位のサイズの論理アドレス範囲X1に含まれる。論理アドレス範囲X1において、第二の記憶部12に記憶されている有効データはa1,a2,a3の3個となる。
【0222】
有効データa4は、ブロック単位のサイズの論理アドレス範囲X2に含まれる。論理アドレス範囲X2において、第二の記憶部12に記憶されている有効データはa4,a6の2個となる。
【0223】
結果として、第二の記憶部12のブロックY1に関して、物理アドレス範囲Y1内の有効データa1,a4を含む論理アドレス範囲X1,X2内の有効データ数の合計は、5個となる。
【0224】
ブロックY2に関して、物理アドレス範囲Y2内の有効データa2,a3を含む論理アドレス範囲X1内の有効データ数の合計は、3個となる。
【0225】
ブロックY3に関して、物理アドレス範囲Y3内の有効データa6,a9を含む論理アドレス範囲X2,X3内の有効データ数の合計は、3個となる。
【0226】
4. コントローラ10は、ステップST3で計算した合計が最大であるブロック内に記憶されている有効データを含む、ブロック単位のサイズの論理アドレス範囲内の有効データを選択する(ステップST4)。
【0227】
図16の場合、合計が最大である物理アドレス範囲Y1内の有効データを含む、ブロック単位のサイズの論理アドレス範囲X1,X2内の有効データa1,a2,a3,a4,a6が、第三の記憶部13に書き込まれることになる。
【0228】
以下の説明では、選択されたブロック内のページ単位のデータを一つのブロック単位のデータへと統合し、そのブロック単位のデータを第三の記憶部13に書き込む処理を示す。以下の処理は、選択されたブロック内のページ単位の全てのデータが第三の記憶部13に書き込まれるまで、繰り返される。
【0229】
5. コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、書き込みデータの行き先として「未使用」のブロックを取得する。この「未使用」のブロックは、第三の記憶部13に割り当てられる。コントローラ10は、図7または図8の物理ブロック管理テーブルにおいて、確保された「未使用」のブロックに対応するエントリを、「第三の記憶部13(使用)」に更新し、確保された「未使用」のブロック内のデータを消去する指示を、不揮発性半導体記憶素子に与える(ステップST5)。
【0230】
6. コントローラ10は、ページ単位のデータを統合してブロック単位のデータとする。具体的には、コントローラ10は、ページ単位のデータの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データを、第一、第二、及び第三の記憶部11,12,13から集める(ステップST6)。
【0231】
コントローラ10は、図3のキャッシュ管理テーブルを検索する。ブロック単位のサイズでアラインされた論理アドレス範囲に含まれるページ単位のデータの論理アドレスに対応するエントリが検出された場合、コントローラ10は、そのエントリにおいてセクタフラグ「有」であるセクタ単位のデータを全て、第一の記憶部11から読み出す。
【0232】
第一の記憶部11から読み出されなかった有効データを含む論理アドレス範囲に関して、コントローラ10は、図4または図5のページ管理テーブルを検索する。論理アドレス範囲に関連付けられたページ単位のデータの論理アドレスに対応するエントリが検出された場合、コントローラ10は、そのエントリに記録された物理アドレスに対応するページ単位のデータに含まれており、第一の記憶部11から読み出されなかった有効データを、第二の記憶部12から読み出す。
【0233】
第一及び第二の記憶部11,12から読み出されなかった有効データを含む論理アドレス範囲のデータに関して、コントローラ10は、図6のブロック管理テーブルを検索する。ブロック単位のサイズでアラインされた論理アドレスに対応するエントリを検出した後、コントローラ10は、そのエントリに記録された物理アドレスに対応するブロック単位のデータに含まれており、第一及び第二の記憶部11,12から読み出されなかった有効データを、第三の記憶部13から読み出す。
【0234】
第一、第二、及び第三の記憶部11,12,13の少なくとも1つから読み出された有効データの一時的な行き先は、第一の記憶部11の作業領域、または、コントローラ10の主記憶メモリ等とするが、特にこれに限定されることはない。
【0235】
7. ブロック単位のデータを構成するセクタ単位のデータを全て揃えた後、コントローラ10は、そのブロック単位のデータを、書き込みデータの行き先として選択された空きブロックに書き込む指示を、不揮発性半導体記憶素子に与える(ステップST7)。
【0236】
図15のフローチャートにおいて、ステップST5は、ステップST7の直前に配置されていても良い。この場合、コントローラ10は、第三の記憶部13に書き込むべきデータを決定した後に、「未使用」のブロックを第三の記憶部13に割り当てることとしても良い。
【0237】
ブロック単位のデータを書き込んだ後、コントローラ10は、そのブロック単位のデータの論理アドレス範囲に対応するブロック管理テーブルのエントリに、書き込みデータの行き先であるブロックの物理アドレスを登録する。
【0238】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ10は、その物理アドレスに対して上書きする。古い物理アドレスが指し示すブロックに記憶されていた旧データは、無効データとなる。
【0239】
8. コントローラ10は、第一、第二、及び第三の記憶部11,12,13から集められた書き込みデータに対応するエントリを、無効化する(ステップST8)。
【0240】
コントローラ10は、図3のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される。
【0241】
続いて、コントローラ10は、図7または図8の物理ブロック管理テーブルと図6のブロック管理テーブルとを走査し、内部のブロック単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【0242】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ブロック管理テーブルではそのブロックを指し示す物理アドレスが存在しないブロックに対応する物理ブロック管理テーブルのエントリが、「未使用」として設定される。
【0243】
同様に、ブロック単位のサイズを有する書き込みデータの論理アドレス範囲に含まれる論理アドレスに対応するエントリが、図4または図5のページ管理テーブルに存在する場合には、そのエントリが無効化される。これは、第二の記憶部12に記憶されていたデータの第三の記憶部13への転送に基づいて、第二の記憶部12に記憶されていたデータが参照されないように無効化にする処理である。
【0244】
更に、第二の記憶部12について、コントローラ10は、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定する。図8の構成の場合は、ページの空き状況を記憶する領域が解放される。
【0245】
D. その他
第一の記憶部11から第二及び第三の記憶部12,13の少なくとも一方へのデータ転送処理、及び、第二の記憶部12から第三の記憶部13へのデータ転送処理は、上述の説明の場合の他、ホスト機器から指示された所定時期に行うことも可能である。
【0246】
例えば、半導体記憶装置がキャッシュフラッシュコマンドを受信した場合、コントローラ10は、第一の条件に従い、第一の記憶部11から第二及び第三の記憶部12,13の少なくとも一方へのデータ転送処理を実行する。
【0247】
(3) システム例
図17は、第二の基本構成に対応するシステム例を示している。
【0248】
ホスト機器31は、本実施形態に係る半導体記憶装置32との間で、データ転送を実行する。ホスト機器31は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータである。半導体記憶装置32は、例えば、ホスト機器31に搭載される、二次記憶装置としてのSSDである。
【0249】
半導体記憶装置32は、第一、第二、及び第三の記憶部11,12,13と、これらの記憶部を制御するコントローラ10とを備える。第一の記憶部11は、DRAM等の揮発性半導体記憶素子21内に配置され、第二及び第三の記憶部12,13は、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22内に配置される。
【0250】
コントローラ10は、CPUと主記憶メモリ(プログラム、管理情報、及び作業領域を格納する)とを有する。コントローラ10は、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、及び物理ブロック管理テーブルに基づいて、論理アドレスを物理アドレスに変換し、第一、第二、及び第三の記憶部11,12,13におけるデータの記憶位置を管理する。
【0251】
ホスト機器31からのデータは、ホストI/F(インターフェース)23を介して、半導体記憶装置32に入力される。ホスト機器31は、セクタ単位で半導体記憶装置32へのアクセスを実行する。
【0252】
図18は、ホスト機器31からのデータの流れを示している。
【0253】
上述の処理方法で説明したように、ホスト機器31からのデータは、第一の記憶部11に記憶され、その後、第一の条件に従い、第二の記憶部12、または、第三の記憶部13に転送されることとなる。更に、第二の記憶部12に記憶されたデータは、第二の条件に従い、第三の記憶部13に転送される。
【0254】
第二の記憶部12のブロックと第三の記憶部13のブロックとは、一対一の対応関係を有している訳ではない。物理ブロック管理テーブルに基づいて、不揮発性半導体記憶素子22内の複数のブロックの一部は第二の記憶部12として使用され、他の一部は、第三の記憶部13として使用される。
【0255】
(4) 動作例
本実施形態に係る動作例を、図18を参照しつつ、書き込み効率を比較することによって説明する。同時に、管理テーブルのサイズに関する考察を行う。
【0256】
A. 書き込み効率の比較
以下の説明では、揮発性半導体記憶素子21がDRAMであり、不揮発性半導体記憶素子22がNAND型フラッシュメモリであると想定する。NAND型フラッシュメモリのブロック単位のサイズは512キロバイトであり、ページ単位のサイズは4キロバイトであり、ホスト機器のセクタ単位のサイズは512バイトであると想定する。第一の条件で規定される所定の閾値(「データ数」または「データ量」)は、NAND型フラッシュメモリのブロック単位のサイズの50%(256キロバイト)であると想定とする。
【0257】
ブロック単位のデータXが第三の記憶部13に記憶されている状態で、ブロック単位のデータXの論理アドレス範囲内に含まれる1セクタ単位のデータYが更新され、その後、データYが第二の記憶部12、または、第三の記憶部13に書き込まれ、不揮発のデータとされる処理を考える。
【0258】
データYが第二の記憶部12、または、第三の記憶部13に記憶された時点で、ホスト機器31から見て、ブロック単位のデータXの論理アドレス範囲に含まれる1セクタ単位のデータYが、更新された状態となる。
【0259】
a. 動作例1
第一の記憶部11にデータが全く存在しない初期状態において、データYが第一の記憶部11に書き込まれると、結果として、データYを含むブロック単位のサイズの論理アドレス範囲(データXの論理アドレス範囲と等しい)において、セクタ単位のデータY(512バイト)のみが第一の記憶部11に存在することになる。コントローラ10は、キャッシュ管理テーブルを検索することによって、データ量を検出することができる。
【0260】
この512バイトの大きさは、第一の条件で規定される所定の閾値である256キロバイトよりも小さい。
【0261】
コントローラ10は、第一の記憶部11に記憶されているデータYを、データYの論理アドレスをページ単位のサイズでアラインすることによって得られた論理アドレス範囲に亘るページ単位のデータ(以下、データPとして参照される)として、第二の記憶部12に転送する。
【0262】
セクタ単位のデータYのサイズは、ページ単位のサイズよりも小さいので、ページ単位のデータPを揃えるためには、不足データを、例えば、第三の記憶部13から読み出す必要がある。
【0263】
コントローラ10は、データPの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレス(データXの論理アドレスと等しい)をもって、ブロック管理テーブルを検索する。
【0264】
論理アドレスに対応するエントリが検出された場合、コントローラ10は、データXが記憶されている物理アドレスを調べる。
【0265】
コントローラ10は、第三の記憶部13のデータXから、データPの論理アドレス範囲に対応するページ単位のデータを揮発性半導体記憶素子21上に読み出し、そこにデータYを上書きすることによって、データPのイメージを生成する。
【0266】
コントローラ10は、セクタ単位のデータYを含むページ単位のデータPを、第二の記憶部12の空きページに書き込み、キャッシュ管理テーブル、ページ管理テーブル、及びブロック管理テーブルを更新する。第二の記憶部12に書き込まれたデータYは、不揮発のデータとなる。
【0267】
データYと同じサイズのデータが連続して書き込まれる場合、1ブロックは128ページで構成されるから、半導体記憶装置32は、128セクタのデータ更新(128ページの書き込み)に対して、1ブロックのデータ消去を行うことになる。
【0268】
この場合、書き込み効率は、512キロバイト/(512バイト×128)=8となり、本実施形態を用いない場合(512キロバイト/512バイト=1024)より向上する。この例では、1セクタ単位のデータ更新であるが、1ページ単位のデータ更新にすれば、更に書き込み効率が向上する。
【0269】
既述された特許文献の技術では、データブロックとログブロックとが一対一に対応するため、例えば、それぞれ異なるブロックに属する128セクタのデータ更新が行われると、128ブロックのデータ消去が必要になる。
【0270】
これに対し、本実施形態では、第二の記憶部12のブロックと第三の記憶部13のブロックとは、一対一の対応関係を有している訳ではない。従って、異なるブロックに記憶された複数のセクタ単位のデータが更新される場合であっても、更新データを第二の記憶部12の同じブロック内に記憶させることが可能であり、この場合のデータ消去量は、1ブロック単位のサイズとなる。
【0271】
b. 動作例2
データYの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲(データXの論理アドレス範囲と等しい)内に含まれるデータとして、384キロバイトの更新データが、既に第一の記憶部11に書き込まれている初期状態を想定する。
【0272】
この初期状態において、データXの論理アドレス範囲内に含まれており、かつ、第一の記憶部11には記憶されていないセクタ単位のデータYが、第一の記憶部11に書き込まれると、データXの論理アドレス範囲にはデータYを含む(384キロバイト+512バイト)のデータが存在することになる。コントローラ10は、キャッシュ管理テーブルを検索することによって、データ量を検出することができる。
【0273】
この(384キロバイト+512バイト)の大きさは、第一の条件で規定される所定の閾値である256キロバイト以上である。
【0274】
コントローラ10は、第一の記憶部11に記憶されている、データYを含む(384キロバイト+512バイト)のデータを、データYの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲に亘るブロック単位のデータ(以下、データBとして参照される)として、第三の記憶部13に転送する。
【0275】
セクタ単位のデータYのサイズは、ブロック単位のサイズよりも小さいので、ブロック単位のデータBを揃えるためには、不足データを、例えば、第三の記憶部13から読み出す必要がある。
【0276】
コントローラ10は、データBの論理アドレス(データXの論理アドレスと等しい)をもってブロック管理テーブルを検索し、データXが記憶されている物理アドレスを検出する。コントローラ10は、第三の記憶部13からデータXを揮発性半導体記憶素子21上に読み出し、そこにデータYを上書きすることによって、データBのイメージを生成する。
【0277】
コントローラ10は、「未使用」のブロックのデータを消去し、その消去された「未使用」のブロックを第三の記憶部13に割り当てる。セクタ単位のデータYを含むブロック単位のデータBは、このブロックに書き込まれる。キャッシュ管理テーブル及びブロック管理テーブルが更新される。これにより、第三の記憶部13に書き込まれたセクタ単位のデータYは、不揮発のデータとなる。
【0278】
この場合、半導体記憶装置32は、約384キロバイト(384キロバイト+512バイト)のデータ更新に対して、1ブロックのデータ消去を行うことになる。
【0279】
従って、書き込み効率は、512キロバイト/384キロバイト=1.33となり、約384キロバイトのデータをセクタごとに更新する場合(512キロバイト/512バイト=1024)より向上する。
【0280】
この例では、約384キロバイトのデータ更新であるが、これを1ブロック単位のサイズである512キロバイトに近付ければ、更に書き込み効率が向上する。
【0281】
B. 管理テーブルのサイズ
不揮発性半導体記憶素子を「小さな単位」で管理すれば、コントローラ10は、ホスト機器31からのデータサイズまたはデータ量によらずデータ書き込み位置の詳細な制御を実行でき、書き込み効率は向上すると考えられる。しかしながら、アドレス変換の実行に必要な管理データが大きくなり、コントローラ10の処理効率が悪くなる可能性がある。
【0282】
一方、本実施形態では「小さな単位」と「大きな単位」という2つの管理単位が採用されている。これらのデータ管理分解能に応じた管理テーブルによって、コントローラ10は、「小さな単位」で管理されるデータ個数の増大を抑制する。従って、本実施形態に係る半導体記憶装置32は、管理テーブルのサイズの増大を抑制し、かつ、高い書き込み効率を実現することが可能である。
【0283】
(5) その他
第二及び第三の記憶部12,13に関して、本実施形態の処理に加えて、以下の処理を行っても良い。
【0284】
A. 第二の記憶部のコンパクション
第二の記憶部12の無効データ数が増え、「書き込み可能」な状態のページが無いブロックが増えた場合、図19に示すように、コントローラ10は、有効データのみを集めて、これらの有効データを「未使用」のブロックにコピーしても良い。
【0285】
結果として、元々有効データが記憶されていたブロックを解放することが可能となり、第二の記憶部12内の無効データ数が減少し、「未使用」のブロック数が増加する。有効データを集めて「未使用」のブロック(コンパクションブロック)にコピーすることに由来し、この処理を第二の記憶部12のコンパクションと呼ぶ。
【0286】
コンパクションによって、更に書き込み効率を向上させることが可能な場合がある。しかしながら、本実施形態では同様の場合に、第二の記憶部12から第三の記憶部13へのデータ転送処理によってコンパクションの代用が可能であるため、コンパクションは補助的な処理となる。
【0287】
例えば、コントローラ10は、第二の記憶部12についてブロックごとに「小さな単位」の無効データ数を計算する。コントローラ10は、無効データ数が多いブロックを降順で連続的に選択し、選択されたブロック内の有効データを、消去された「未使用」のブロックにコピーする。有効データで満たされたブロックは、第二の記憶部12に割り当てられる。
【0288】
コンパクションは、例えば、第二の記憶部12に含まれる無効データの合計が、所定の閾値よりも大きくなった場合に実行される。
【0289】
B. 第三の記憶部のコンパクション
第三の記憶部13のコンパクションは、第三の記憶部13におけるデータ管理単位(「大きな単位」)のサイズが、ブロック単位のサイズ未満である場合に適用可能になる。
【0290】
第三の記憶部13の無効データ数が増え、「書き込み可能」な状態のページが無いブロックが増えた場合、図19に示すように、コントローラ10は、有効データのみを集めて、これらの有効データを「未使用」のブロックにコピーしても良い。
【0291】
結果として、元々データが記憶されていたブロックを解放することが可能となり、第三の記憶部13内の無効データ数が減少し、「未使用」のブロック数が増加する。有効データを集めて「未使用」のブロック(コンパクションブロック)にコピーすることに由来し、この処理を第三の記憶部13のコンパクションと呼ぶ。
【0292】
例えば、コントローラ10は、第三の記憶部13についてブロックごとに「大きな単位」の無効データ数を計算する。コントローラ10は、無効データ数が多いブロックを降順で連続的に選択し、選択されたブロック内の有効データを、消去された「未使用」のブロックにコピーする。有効データで満たされたブロックは、第三の記憶部13に割り当てられる。
【0293】
コンパクションは、例えば、第三の記憶部13に含まれる無効データの合計が、所定の閾値よりも大きくなった場合に実行される。
【0294】
3. まとめ
本実施形態によれば、以下の構成により、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止できる。
【0295】
・ 記憶場所の振り分け
半導体記憶装置は、第一の単位以下で書き込みを行う揮発性半導体記憶素子に形成された第一の記憶部と、第二の単位で書き込みを行い、第三の単位で消去を行う不揮発性半導体記憶素子に形成された第二及び第三の記憶部と、以下の処理を実行するコントローラとを有する。第一の単位は半導体記憶装置に対するアクセス単位であり、第三の単位は第二の単位の二以上の自然数倍の大きさである。
【0296】
コントローラは、複数のデータを第一の単位で第一の記憶部に記憶する第一の処理と、第一の記憶部から出力されたデータを第一の管理単位で第二の記憶部に記憶する第二の処理と、第一の記憶部から出力されたデータを第二の管理単位で第三の記憶部に記憶する第三の処理とを実行する。第一の管理単位は第一の単位の二以上の自然数倍の大きさであり、かつ、第三の単位よりも小さく、第二の管理単位は第一の管理単位の二以上の自然数倍の大きさである。
【0297】
・ 第二の記憶部から第三の記憶部へのデータ転送(デフラグメンテーション)
コントローラは、更に、第二の記憶部から出力される第一の管理単位のデータを選択する第四の処理と、選択されたデータを含むデータを第二の管理単位で第三の記憶部に記憶する第五の処理とを実行する。
【0298】
・ メモリの共有
第二の記憶部と第三の記憶部は、同一の不揮発性半導体記憶素子を共有し、コントローラは、第三の単位の領域を、第二及び第三の記憶部の各々に割り当てる。
【0299】
・ 振り分け条件1(第一の記憶部内のデータ数)
コントローラは、第一の記憶部から出力されるデータの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第一の記憶部に記憶されているデータを数え、データ数が所定の閾値未満である場合は第二の処理を実行し、データ数が所定の閾値以上である場合は第三の処理を実行する。
【0300】
・ 振り分け条件2(第一及び第二の記憶部内のデータ数)
コントローラは、第一の記憶部から出力されるデータの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第一及び第二の記憶部に記憶されているデータを数え、データ数が所定の閾値未満である場合は第二の処理を実行し、データ数が所定の閾値以上である場合は第三の処理を実行する。
【0301】
・ デフラグメンテーション発動条件
コントローラは、第二の記憶部に記憶されている複数の有効データ及び無効データによって占有される第三の単位の領域の数が許容範囲を超えた場合に、第四及び第五の処理を実行する。
【0302】
・ デフラグメンテーション条件1(古いデータ)
第四の処理において、コントローラは、第二の記憶部内で書き込まれた順序が最も古い第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【0303】
・ デフラグメンテーション条件2(有効データ)
第四の処理において、コントローラは、第二の記憶部における第三の単位の領域それぞれについて、有効データの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第二の記憶部に記憶されている有効データを数え、第二の記憶部における第三の単位の領域それぞれについてその有効データ数を合計し、合計が最も大きい第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【0304】
・ デフラグメンテーション条件3(無効データ)
第四の処理において、コントローラは、第二の記憶部における第三の単位の各領域について無効データを数え、無効データ数が最も小さい第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【0305】
・ 第二の記憶部のデータ管理単位:小
第二の単位は、第一の管理単位の二以上の自然数倍の大きさである。
【0306】
・ 第二の記憶部のデータ管理単位:大
第一の管理単位は、第二の単位の二以上の自然数倍の大きさであり、かつ、第三の単位は、第一の管理単位の二以上の自然数倍の大きさである。
【0307】
・ 第三の記憶部のデータ管理単位:小
第三の単位は、第二の管理単位の二以上の自然数倍の大きさである。
【0308】
・ 第三の記憶部のデータ管理単位:大
第二の管理単位は、第三の単位の二以上の自然数倍の大きさである。
【0309】
・ 第二の記憶部の無効化
第二の処理において、コントローラは、第二の記憶部における第二の単位の空き領域に第一の管理単位の新データを書き込み、新データの論理アドレスが旧データの論理アドレスに対応する場合、第二の記憶部に記憶されていた旧データを無効化し、新データを、旧データに対して優先度が高い有効データとして取り扱い、旧データを、新データを参照することにより無視される無効データとして取り扱う。
【0310】
・ 第二の記憶部のコンパクション
コントローラは、第二の記憶部における無効データ数が許容値を超えたか否かを判断し、第二の記憶部における第三の単位の各領域について無効データを数え、無効データ数が大きい第三の単位の領域から順次有効データを選択し、選択された有効データを、第三の単位の空いている第一の領域に書き直し、選択された有効データを書き込んだ後に第1の領域を第二の記憶部に割り当て、選択された有効データを第一の領域に書き直すことによって有効データを持たなくなった第三の単位の第二の領域を、第二の記憶部から解放する。
【0311】
・ 第三の記憶部の無効化
第三の処理において、コントローラは、第三の記憶部における第三の単位の空き領域に第二の管理単位の新データを書き込み、新データの論理アドレスが旧データの論理アドレスに対応する場合、第三の記憶部に記憶されていた旧データを無効化し、新データを、旧データに対して優先度が高い有効データとして取り扱い、旧データを、新データを参照することにより無視される無効データとして取り扱う。
【0312】
・ 第三の記憶部のコンパクション
コントローラは、第三の記憶部における無効データ数が所定の閾値を超えたか否かを判断し、第三の記憶部における第三の単位の各領域について第二の管理単位の無効データを数え、無効データ数が大きい第三の単位の領域から順次有効データを選択し、選択された第二の管理単位の有効データを、第三の記憶部における第三の単位の空き領域に書き直し、第三の単位の領域を解放する。第二の管理単位は第三の単位よりも小さいとする。
【0313】
4. 適用例
本実施形態に係る半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるSSDに適用可能である。その場合の具体例については、後述する。
【0314】
5. むすび
本実施形態によれば、消去/読み出し/書き込みの単位が固定される不揮発性半導体記憶素子を使用する半導体記憶装置において、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止することができる。
【0315】
本発明は、上述の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で、各構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成できる。例えば、上述の実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【0316】
[II.消去回数の増加を抑制する半導体記憶装置]
1. 概要
第I節で述べたコンパクションは、無効データの消去に基づく記憶領域の有効活用に優れている。しかしながら、コンパクションは、同一のデータを他のブロックに書き直むというコピー動作を必要とするため、コンパクションの対象となった有効データに対して直ちに更新が行われると、ブロックの消去回数が増加するという副作用が生じる。
【0317】
コンパクションにより新たに使用中となるブロック内には有効データが詰まった状態となっているが、コンパクションの対象となったデータが更新されると、そのデータは無効データとなる。また、ブロック内の無効データが増えれば、再び、そのブロック内の有効データがコンパクションの対象となるため、結果として、ブロックの消去回数が増加することがある。
【0318】
以上の構成によれば、コンパクションの対象とするデータは、更新頻度の低いデータとすることが望ましく、データを選別する手段が必要となる。
【0319】
このような知見に基づいて、各実施形態では、更新頻度の高いデータと更新頻度の低いデータとを区別する手段を設け、更新頻度の低いデータをコンパクションの対象とすることで、コンパクションの対象となったデータに対して直ちに更新が行われることを防止する。この構成によれば、ブロックの消去回数が減少し、メモリセルの劣化が防止される。
【0320】
具体的構成としては、以下の記憶部が規定される。
・ 第一の単位以下でデータの読み出し/書き込みが可能な揮発性半導体記憶素子内の第一の記憶部
・ 第二の単位でデータの読み出し/書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、第一の単位の自然数倍の大きさである「小さな単位(第一の管理単位)」でデータを管理する第二の記憶部
・ 第二の単位でデータの読み出し/書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、「小さな単位」の二以上の自然数倍、かつ、第三の単位の自然数倍の大きさである「大きな単位(第二の管理単位)」でデータを記憶する第三の記憶部
・ 第二の単位でデータの読み出し/書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、第一の単位の自然数倍の大きさである「小さな単位」でデータを管理する第四の記憶部
第四の記憶部は、更新頻度の高いデータと更新頻度の低いデータとを区別する手段として使用される。概略的には、第I節で述べた基本構成に加え、更新頻度の高いデータと更新頻度の低いデータとを区別するための第四の記憶部が設けられた構成となる。
【0321】
第一の単位の複数のデータは、第一の記憶部に書き込まれ、その後、第三または第四の記憶部に書き込まれる。第四の記憶部は、FIFO(First-In First-Out)構造を有する。第四の記憶部内の「使用中」の第三の単位の領域の数が許容範囲よりも大きくなった場合に、第二の記憶部で最も古い割り当て順序を備える第三の単位の領域内に記憶されており、かつ、第三の条件を満たす有効データは、「大きな単位」で第四の記憶部に転送される。
【0322】
また、第三の条件を満たさない有効データが残った第二の記憶部内で最も古い割り当て順序を備える第三の単位の領域は、第二の記憶部に移動される。第二の記憶部内の「使用中」の第三の単位の領域の数が許容範囲よりも大きくなり第四の条件が満たされた場合には、第二の記憶部内の有効データを選択し、第三の単位の空き領域にコピーする。有効データの詰まった第三の単位の領域は、第二の記憶領域に割り当てられる(コンパクション)。
【0323】
ここで、第二の記憶部におけるコンパクションの対象が更新頻度の低いデータとなる原理は、以下の通りである。
【0324】
第四の記憶部は、第三の単位のFIFOの構造を有するため、第四の記憶部に入力されたデータは、一定期間、第四の記憶部内に留まることになる。このため、更新頻度の高いデータは、第四の記憶部内で更新される。データが更新されると、旧データは無効データとなり、更新データが新たに第四の記憶部に入力されるため、更新頻度の高いデータは第四の記憶部内に留まり、第四の記憶部から出力されることはない。
【0325】
第二の記憶部内の有効データをコンパクションの対象とし、第四の記憶部内の有効データをコンパクションの対象としないことで、更新頻度の低いデータをコンパクションの対象とすることができ、結果として、コンパクションの副作用であるブロックの消去回数増加を抑制できる。
【0326】
2. 実施形態
(1) 第一の実施形態
図20は、第一の実施形態に係る半導体記憶装置を示している。
【0327】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で読み出し及び書き込みがされる。第一の記憶部11は、例えば、DRAM等の揮発性半導体記憶素子から構成される。
【0328】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22内部において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部12は、ページ単位に等しい「小さな単位」でデータを記憶する。
【0329】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【0330】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【0331】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0332】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部12,13,14へと割り当てられる。
【0333】
第三の記憶部13には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【0334】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三の記憶部13の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0335】
第二、第三、及び第四の記憶部12,13,14は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22の一以上のブロックから構成される。
【0336】
データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC、内部制御用フラグ等)が含まれないものとする。
【0337】
通常、NAND型フラッシュメモリ等の不揮発性半導体記憶素子を含むシステムでは、主データに対して冗長データが付加された状態で読み出し、書き込みが行われるが、簡略化のため、上述のように定義する。
【0338】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態においてコントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0339】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0340】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部11,12,13,14のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、ページFIFO管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ10の主記憶メモリ内に展開される。
【0341】
・ キャッシュ管理テーブル
図21は、キャッシュ管理テーブルの構成例を示している。
【0342】
キャッシュ管理テーブルは、図20の第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【0343】
第一の記憶部11の1ページ単位の領域一つに対して1エントリとする。
【0344】
エントリ数は、第一の記憶部11に収まるページ単位のデータ数、即ち、(第一の記憶部11の全容量)/(ページ単位のサイズ)以下とする。
【0345】
各エントリには、ページ単位のデータの論理アドレス、第一の記憶部11の物理アドレス、及び、対応するページ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【0346】
各エントリに対応付けて、データを一時的に記憶するためのページ単位の領域を第一の記憶部11内に用意し、その領域の物理アドレスを各エントリに格納する。ページ単位の領域が連続的に配置されている等、エントリに対応する領域の物理アドレスが固定的であれば、物理アドレスをエントリ内に格納する必要はない。
【0347】
キャッシュ管理テーブルにおいて、第一の記憶部11の各ページ単位の領域は、更にセクタ単位の領域に分割され、各セクタ単位の領域内のデータの状態を、セクタフラグの値を「有」または「無」にすることで示す。
【0348】
セクタフラグが「有」の領域には、ホスト機器からの有効データが記憶されている。これに対し、セクタフラグが「無」の領域には、ホスト機器から書き込まれた最新のデータが記憶されておらず、無効な領域となる。また、エントリ内の全てのセクタフラグが「無」のエントリは、未使用のエントリとみなす。
【0349】
尚、上記キャッシュ管理テーブルの構成は、各エントリに論理アドレスを割り当てるフルアソシアティブと呼ばれる管理方法を元にしているが、n−wayセットアソシアティブ等の方法で、第一の記憶部11における論理アドレスと物理アドレスとの対応を管理してもよい。
【0350】
・ ページ管理テーブル
図22は、ページ管理テーブルの構成例を示している。
【0351】
ページ管理テーブルは、図20の第二及び第四の記憶部12,14に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0352】
第二及び第四の記憶部12,14の1ブロックに対して1エントリとする。
【0353】
エントリ数は、第二及び第四の記憶部12,14に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけの余裕を持たせた数、即ち、[(第二及び第四の記憶部12,14の全容量)/(ブロック単位のサイズ)]に余裕を持たせた数とする。
【0354】
各エントリには、第二の記憶部12または第四の記憶部14に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のページ単位のデータの論理アドレスが記録されている。
【0355】
また、ページの空き状況として、各ページについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0356】
・ ブロック管理テーブル
図23は、ブロック管理テーブルの構成例を示している。
【0357】
ブロック管理テーブルは、図20の第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【0358】
第三の記憶部13の1ブロック単位の領域一つに対して1エントリとする。
【0359】
エントリ数は、第三の記憶部13に収まるブロック単位のデータ数、即ち、(第三の記憶部13の全容量)/(ブロック単位のサイズ)以下とする。
【0360】
各エントリは論理アドレス順に配列されている。ブロック単位のデータの論理アドレスに対応して、第三の記憶部13内のブロックを指定する物理アドレスが、各エントリに関連付けられている。
【0361】
・ ページFIFO管理テーブル
図24は、ページFIFO管理テーブルの構成例を示している。
【0362】
ページFIFO管理テーブルは、図20の第四の記憶部14に割り当てられたブロック内のデータを管理する。
【0363】
第四の記憶部14の1ブロックに対して1エントリとする。
【0364】
エントリ数は、第四の記憶部14に収まるブロック数、即ち、(第四の記憶部14の全容量)/(ブロック単位のサイズ)とする。
【0365】
第四の記憶部14は、ページFIFO管理テーブルを使用することで、ブロック単位のFIFO(First-In First-Out)構造を伴って管理される。
【0366】
新たに第四の記憶部14に割り当てられた(入力された)ブロックに対応するエントリは、ページFIFO管理テーブルの先頭(入口側)に追加され、元々ページFIFO管理テーブルに登録されていたエントリは、一つずつ後方にシフトする。
【0367】
エントリ数が許容範囲を超えた場合、ページFIFO管理テーブルの末端(出口側)のエントリに関連付けられている最も古い割り当て順序を有するブロックは、第四の記憶部14から出力される。
【0368】
・ 物理ブロック管理テーブル
図25は、物理ブロック管理テーブルの構成例を示している。
【0369】
物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。
【0370】
第二、第三、及び第四の記憶部12,13,14の1ブロック(物理ブロック)に対して1エントリとする。エントリ数は、データエリアとして使用可能なブロック数とする。
【0371】
各エントリは、ブロックの物理アドレスと関連付けられており、また、ブロックの使用状況(記憶領域(ブロック)が第二、第三、及び第四の記憶部として使用されている(使用)か、または、使用されていない(未使用)か)を記憶する。
【0372】
図20のコントローラ10によって実行される処理フローについて説明する。
【0373】
コントローラ10は、ホスト機器からのセクタ単位(第一の単位)のデータを、最初に第一の記憶部11に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第I節で述べた「A.第一の記憶部へのデータ蓄積処理」を適用することができる。
【0374】
コントローラ10は、第一の記憶部11に蓄積されたデータを、所定の条件に従い、「小さな単位(第一の管理単位)」で管理すべきか、または、「大きな単位(第二の管理単位)」で管理すべきか、を判断する。所定の条件は、第I節で述べた「B.第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【0375】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0376】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、かつ、ブロック単位の自然数倍のサイズである。
【0377】
本実施形態では、説明の簡略化のため、管理テーブルで使用される各単位を、下記の通りであると想定する。
【0378】
即ち、第二及び第四の記憶部12,14のデータ管理単位である「小さな単位」のサイズは、ページ単位(第二の単位)のサイズと等しく、第三の記憶部13のデータ管理単位である「大きな単位」のサイズは、ブロック単位(第三の単位)のサイズと等しい。
【0379】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0380】
或いは、複数のページを合わせて管理して、「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0381】
同様に、ブロックを分割して管理して、第三の記憶部13で使用される「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0382】
或いは、複数のブロックを合わせて管理して、「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしてもよい。
【0383】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<「小さな単位」<ページ単位(第二の単位)<ブロック単位(第三の単位)≦「大きな単位」と設定することが可能である。
【0384】
第一の記憶部11に蓄積されたデータを「小さな単位」で管理する場合には、ページ単位のデータを第四の記憶部14に転送する。第一の記憶部11に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部13に転送する。
【0385】
このデータ出力処理については、第I節で述べた「B.第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第I節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部14となる。
【0386】
A. 第四の記憶部のFIFO処理
第四の記憶部14は、既に述べたように、ブロック単位のFIFO構造を有する。図26は、第四の記憶部14でのFIFO処理を示している。
【0387】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、ページ追記用物理ブロックと称する)に対応するページ管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、ページ単位に等しい「小さな単位」のデータとして、ページ追記用物理ブロック内の書き込み可能なページに記憶する(ステップST1)。
【0388】
コントローラ10は、キャッシュ管理テーブルを検索し、出力対象に決まったページ単位のデータを構成するセクタ単位のデータが、第一の記憶部11内に全て存在するか否かを判断する。
【0389】
第一の記憶部11内に全てのセクタ単位のデータが存在しない場合、コントローラ10は、第二、第三、及び第四の記憶部12,13,14から、不足データを集める。
【0390】
ページ単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ10は、そのページ単位のデータを書き込む指示を、不揮発性半導体記憶素子22に与える。
【0391】
2. コントローラ10は、ページ管理テーブルにおいて、内部にページ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二及び第四の記憶部12,14内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【0392】
3. コントローラ10は、ページ追記用物理ブロック内に空きページが存在するか否かを判断する(ステップST3)。空きページが検出されなかった場合、処理はステップST4に進む。空きページが検出された場合、処理はステップST1に戻る。
【0393】
4. コントローラ10は、ページFIFO管理テーブルのエントリを一つずつ後方にシフトし、ページ追記用物理ブロックの物理アドレスを、ページFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、ページ追記用ブロックは、第四の記憶部14に割り当てられる。
【0394】
5. コントローラ10は、ページFIFO管理テーブルの末端のエントリに関連付けられており、ページFIFO管理テーブルから溢れている最も古い割り当て順序を備えたブロックに対して、以下の処理P1を実行する(ステップST5)。
【0395】
B. 処理P1
図27は、処理P1のフローチャートを示している。
【0396】
1. コントローラ10は、図22のページ管理テーブルを検索し、第四の記憶部14から溢れたブロックの物理アドレスが記録されているエントリを検出する(ステップST1)。
【0397】
2. コントローラ10は、エントリに記録されているページ単位のデータの論理アドレスを特定する(ステップST2)。各々の論理アドレスに対して、以下の処理が適用される。
【0398】
3. コントローラ10は、ページ単位のデータの論理アドレスを、ブロック単位に等しい「大きな単位」のサイズでアラインし、ページ管理テーブル内について、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる論理アドレスを数える(ステップST3)。
【0399】
ここで、「論理アドレスを所定サイズ(ページサイズ、ブロックサイズ等)にアラインする」とは、論理アドレスを所定サイズで割り算した時の剰余が0になるアドレスに切り下げることを意味する。例えば論理アドレスAをサイズSにアラインしたアドレスは、(A−(AをSで割った余り))となる。「所定サイズにアラインされた論理アドレス範囲」とは、論理アドレスを所定サイズにアラインしたアドレスから所定サイズ分の範囲を意味する。
【0400】
コントローラ10が、ページFIFO管理テーブルに含まれる物理アドレスを備えたエントリ内の論理アドレスだけを限定して数える場合、第四の記憶部14内に記憶されているページ単位のデータ数が取得されることになる。一方、コントローラ10がエントリを限定しない場合、第二及び第四の記憶部12,14内に記憶されているページ単位のデータ数が取得されることになる。コントローラ10は、いずれの条件も選択可能である。
【0401】
4. コントローラ10は、ステップST3で数えた論理アドレス数が、所定の閾値以上であるか否かを判断する(第三の条件)。所定の閾値は、例えば、一つのブロック単位(「大きな単位」)の領域内に収まるページ単位(「小さな単位」)のデータ総数の50%に設定されていても良い(ステップST4)。
【0402】
ステップST3で数えた論理アドレス数が、所定の閾値未満である場合、処理はステップST5に進む。ステップST3で数えた論理アドレス数が、所定の閾値以上である場合、処理はステップST6に進む。
【0403】
5. コントローラ10は、ページ単位のデータに対して、何も実行しない。即ち、ページ単位のデータは、第四の記憶部14から溢れたブロック内に留まる(ステップST5)。
【0404】
6. コントローラ10は、ページ単位のデータを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する(ステップST6)。
【0405】
コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集めることによって、ページ単位のデータをブロック単位のデータへと統合する(デフラグメンテーション)。
【0406】
ブロック単位のデータを構成する有効データが揃った後、コントローラ10は、そのブロック単位のデータを第三の記憶部13の空きブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0407】
7. コントローラ10は、第一、第二、第三、及び第四の記憶部11,12,13,14について、書き込みデータの論理アドレス範囲内に含まれるデータを、無効化する(ステップST7)。
【0408】
ブロック内の全てのデータが無効データになった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する。
【0409】
8. コントローラ10は、エントリ内の全ての論理アドレスが処理されたか否かを判断する(ステップST8)。エントリ内の全ての論理アドレスが処理された場合、この処理は終了する。エントリ内の全ての論理アドレスが処理されていない場合、処理はステップST3に戻る。
【0410】
処理P1を終了した後にあっても、第四の記憶部14から溢れたブロック内に有効データが残っている場合、コントローラ10は、物理ブロック管理テーブルにおいてそのブロックに対応するエントリを、「第二の記憶部12(使用)」に設定する。
【0411】
第四の記憶部14から第二の記憶部12へのデータ転送に際して、コントローラ10はページFIFO管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体素子22に対するデータの読み出し/書き込み指示を要しない(移動処理)。
【0412】
ページ追記用物理ブロック内に空きページがなくなると、コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、そのブロックが新たにページ追記用物理ブロックとして割り当てられる。コントローラ10はページ管理テーブルの未使用のエントリを検索する。ページ追記用物理ブロックに対応する物理アドレスは、その未使用のエントリに記録される。
【0413】
第四の記憶部14からのブロックの移動に伴って、第二の記憶部12内のページ単位で管理されるブロックの数が増加する。第二の記憶部12のブロック数が許容範囲、即ち、第二の記憶部12の容量として定められた所定のブロック数を超える場合、コントローラ10は、以下の手順で、コンパクション、または、第二の記憶部12から第三の記憶部13へのデータ転送処理を実行する。
【0414】
C.処理例1
図28は、処理例1のフローチャートを示している。
【0415】
1. コントローラ10は、ページ管理テーブルを走査し、第二の記憶部12内においてページ単位に等しい「小さな単位」で記憶されているデータ数(論理アドレス数)を数える(ステップST1)。
【0416】
ステップST1では、ページFIFO管理テーブルに物理アドレスが含まれるエントリと、ページ追記用物理ブロックに対応するエントリとに関しては、走査の対象としない。即ち、コントローラ10は、第二の記憶部12のみを走査する。
【0417】
2. コントローラ10は、第二の記憶部12に記憶されているページ単位の有効データの総数が、所定の閾値以下であるか否かを判断する(第四の条件)。所定の閾値は、例えば、第二の記憶部12に収まるページ単位のデータ数とすれば良い(ステップST2)。
【0418】
有効データの総数が所定の閾値よりも大きい場合には、コンパクションを行っても第二の記憶部12のブロック数を許容範囲にまで減らすことはできないので、処理はステップST3に進む。有効データの総数が所定の閾値以下である場合には、処理はステップST6に進む。
【0419】
3. コントローラ10は、所定の条件に基づいて、第二の記憶部12内の有効データを選択し、選択されたデータをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13へ転送する(ステップST3)。所定の条件は、例えば、第I節で述べた「C.第二の記憶部から第三の記憶部へのデータ転送処理」の第二の条件と実質的に同じであっても良い。
【0420】
コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集めることで、ページ単位の有効データをブロック単位のデータへと統合する(デフラグメンテーション)。
【0421】
ブロック単位のデータを構成する有効データを揃えた後、コントローラ10は、そのブロック単位のデータを第三の記憶部13の空きブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0422】
4. コントローラ10は、書き込みデータの論理アドレス範囲内に含まれる、第一、第二、第三、及び第四の記憶部11,12,13,14に記憶されていたデータを、無効化する。ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST4)。
【0423】
5. コントローラ10は、第二の記憶部12内のブロック数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST5)。
【0424】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理は終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0425】
6. コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、ページ管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST6)。
【0426】
7. コントローラ10は、第二の記憶部12において、有効データ数が小さいブロックから順番に、ページ単位の有効データを選択する(ステップST7)。選択された有効データはコンパクションブロックにコピーされ、ページ管理テーブルのコンパクションブロックに対応するエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される。
【0427】
コントローラ10は、物理ブロック管理テーブルのエントリを「第二の記憶部12(使用)」に更新することで、有効データが詰まったコンパクションブロックを、第二の記憶部12に割り当てる。
【0428】
ステップST7(コンパクション)に際して、コピーされるデータの論理アドレス範囲内に含まれる最新の有効データを第一の記憶部11から読み出し、コピーされるデータを最新データで上書きしても良い。コピーされるデータに取り込まれた第一の記憶部11内のセクタ単位のデータは、無効化される。
【0429】
8. コントローラ10は、第二の記憶部12において、コピーされたデータと同じ論理アドレスを有するデータを無効化する。ブロック内の全てのデータが無効データになった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST8)。
【0430】
9. コントローラ10は、第二の記憶部12内のブロック数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST9)。
【0431】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理を終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST6に戻る。
【0432】
D.処理例2
図29は、処理例2のフローチャートを示している。
【0433】
1. コントローラ10は、ページ管理テーブルを走査し、ページ単位に等しい「小さな単位」で記憶されている有効データ数(論理アドレス数)が少ない方から順番に、二つのブロックを選択する(ステップST1)。
【0434】
ステップST1では、ページFIFO管理テーブルに物理アドレスが含まれるエントリと、ページ追記用物理ブロックに対応するエントリとに関しては、走査の対象としない。即ち、コントローラ10は、第二の記憶部12のみを走査する。
【0435】
2. コントローラ10は、ページ単位の有効データの総数が、所定の閾値(例えば、第三の単位に格納される第二の単位の数)以下であるか否かを判断する(第四の条件)(ステップST2)。
【0436】
有効データの総数が所定の閾値よりも大きい場合には、コンパクションを行っても第二の記憶部12のブロック数を許容範囲にまで減らすことはできないので、処理はステップST3に進む。有効データの総数が所定の閾値以下である場合には、処理はステップST6に進む。
【0437】
3. コントローラ10は、所定の条件に基づいて、第二の記憶部12内の有効データを選択し、選択されたデータをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13へ転送する(ステップST3)。所定の条件は、例えば、第I節で述べた「C.第二の記憶部から第三の記憶部へのデータ転送処理」の第二の条件と実質的に同じであっても良い。
【0438】
コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集めることによって、ページ単位の有効データをブロック単位のデータへと統合する(デフラグメンテーション)。
【0439】
ブロック単位のデータを構成する有効データを揃えた後、コントローラ10は、そのブロック単位のデータを第三の記憶部13の空きブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0440】
4. コントローラ10は、書き込みデータの論理アドレス範囲内に含まれる第一、第二、第三、及び第四の記憶部11,12,13,14に記憶されていたデータを、無効化する。ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST4)。
【0441】
5. コントローラ10は、第二の記憶部12内のブロックの数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST5)。
【0442】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理は終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0443】
6. コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、ページ管理テーブルから未使用のエントリを確保する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST6)。
【0444】
7. コントローラ10は、第二の記憶部12において、有効データ数が小さいブロックから順番に、ページ単位の有効データを選択する(ステップST7)。選択された有効データはコンパクションブロックにコピーされ、ページ管理テーブルのコンパクションブロックに対応するエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される。
【0445】
コントローラ10は、物理ブロック管理テーブルのエントリを「第二の記憶部12(使用)」に更新することで、有効データが詰まったコンパクションブロックを、第二の記憶部12に割り当てる。
【0446】
ステップST7(コンパクション)に際して、コピーされるデータの論理アドレス範囲内に含まれる最新の有効データを、第一の記憶部11からも読み出し、コピーされるデータを最新データで上書きしても良い。コピーされるデータに取り込まれた第一の記憶部11内のセクタ単位のデータは、無効化される。
【0447】
8. コントローラ10は、第二の記憶部12において、コピーされたデータと同じ論理アドレスを有するデータを無効化する。ブロック内の全てのデータが無効データになった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST8)。
【0448】
9. コントローラ10は、第二の記憶部12内のブロック数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST9)。
【0449】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理を終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST6に戻る。
【0450】
処理例2のステップST1では、有効データ数が少ない方から順番に二つのブロックが選択されているが、この数は二つに限定されず、二つ以上のブロックが選択されても良い。また、処理例2のステップST2における「所定の閾値」は、選択されたブロック数よりも一つ少ないブロックに収まるページ単位のデータ数以下であれば良い。
【0451】
(2) 第二の実施形態
図30は、第二の実施形態に係る半導体記憶装置を示している。
【0452】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0453】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、かつ、ブロック単位は、「大きな単位」の二以上の自然数倍のサイズである。
【0454】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0455】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<「小さな単位」<ページ単位(第二の単位)<「大きな単位」<ブロック単位(第三の単位)と設定することが可能である。
【0456】
第二の実施形態では、「大きな単位」としてトラック単位が使用される。トラック単位はページ単位の二以上の自然数倍のサイズであり、かつ、ブロック単位はトラック単位の二以上の自然数倍のサイズである。
【0457】
トラック単位の使用に伴って、ブロック管理テーブルの代わりに、トラック管理テーブル及びトラックFIFO管理テーブルを用いたデータ管理が行われる。
【0458】
また、第一の実施形態と同様、説明の簡略化のため、「小さな単位」としてページ単位を使用する。しかしながら、「小さな単位」としてクラスタ単位を使用しても良い。クラスタ単位はセクタ単位の二以上の自然数倍のサイズであり、かつ、ページ単位はクラスタ単位の二以上の自然数倍のサイズである。クラスタ単位を使用するデータ管理については後述する。
【0459】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で書き込みされる。第一の記憶部11は、例えば、DRAM等の揮発性半導体記憶素子に含まれる。
【0460】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍の大きさである。第二の記憶部12は、ページ単位に等しい「小さな単位」でデータを記憶する。
【0461】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、トラック単位に等しい「大きな単位」でデータを記憶する。
【0462】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【0463】
第五の記憶部15は、不揮発性半導体記憶素子22の複数のブロックから構成され、トラック単位に等しい「大きな単位」でデータを記憶する。
【0464】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0465】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、第四、及び第五の記憶部12,13,14,15へと割り当てられる。
【0466】
第三及び第五の記憶部13,15には、第三及び第五の記憶部13,15の記憶容量の合計が、半導体記憶装置の製品仕様としての記憶容量よりも大きくなるような記憶容量(例えば、半導体記憶装置の製品仕様としての記憶容量よりも1〜5%程度大きい容量)が割り当てられる。
【0467】
第三及び第五の記憶部13,15の間で容量の割合に制約はないが、例えば、第三の記憶部13の記憶容量は半導体記憶装置の製品仕様としての記憶容量と同じとし、第五の記憶部15の記憶容量は第三の記憶部13の記憶容量の1〜5%程度となるように設定される。
【0468】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三及び第五の記憶部13,15の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0469】
第二、第三、第四、及び第五の記憶部12,13,14,15は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22の一以上のブロックから構成される。
【0470】
第二の実施形態では、第一の実施形態で述べた第一、第二、第三、及び第四の記憶部11,12,13,14に加え、更に、第五の記憶部15として一以上のブロックが割り当てられた構成となっている。
【0471】
第一の実施形態と同様に、データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC、内部制御用フラグ等)が含まれないものとする。
【0472】
コントローラ10は、データ管理を行うためのプログラムを動作させる。コントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0473】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0474】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、第四、及び第五の記憶部11,12,13,14,15のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、トラック管理テーブル、ページFIFO管理テーブル、トラックFIFO管理テーブル、及び物理ブロック管理テーブルを備える。
【0475】
・ キャッシュ管理テーブル
図30のキャッシュ管理テーブルは、第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【0476】
キャッシュ管理テーブルの構成は、第一の実施形態と同様であり、図21に示す通りである。キャッシュ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0477】
・ ページ管理テーブル
図30のページ管理テーブルは、第二及び第四の記憶部12,14に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0478】
ページ管理テーブルの構成は、第一の実施形態と同様であり、図22に示す通りである。ページ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0479】
・ トラック管理テーブル
図31は、トラック管理テーブルの構成例を示している。
【0480】
トラック管理テーブルは、図30の第三及び第五の記憶部13,15に記憶されるデータを、トラック単位に等しい「大きな単位」で管理する。
【0481】
第三及び第五の記憶部13,15の1ブロックに対して1エントリとする。
【0482】
エントリ数は、第三及び第五の記憶部13,15に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけのだけの余裕を持たせた数、即ち、[(第三及び第五の記憶部13,15の全容量)/(ブロック単位のサイズ)]に余裕を持たせた数とする。
【0483】
各エントリには、第三及び第五の記憶部13,15に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のトラック単位のデータの論理アドレスが記憶されている。
【0484】
また、トラック単位の領域内のページの空き状態として、各ページについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために、無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0485】
この例では、ブロック単位でエントリが構成されているが、データの論理アドレスからブロックの物理アドレスの検索を高速に行うために、トラック管理テーブルのエントリは、論理アドレス順に配列されたトラック単位で構成されていても良い。
【0486】
・ ページFIFO管理テーブル
図30のページFIFO管理テーブルは、第四の記憶部14に割り当てられたブロック内のデータを管理する。
【0487】
ページFIFO管理テーブルの構成は、第一の実施形態と同様であり、図24に示す通りである。ページFIFO管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0488】
・ トラックFIFO管理テーブル
図32は、トラックFIFO管理テーブルの構成例を示している。
【0489】
トラックFIFO管理テーブルは、第五の記憶部15に割り当てられたブロック内のデータを管理する。
【0490】
第五の記憶部15の1ブロックに対して1エントリとする。エントリ数は、第五の記憶部15に収まるブロック数、即ち、(第五の記憶部の全容量)/(ブロック単位のサイズ)とする。
【0491】
第五の記憶部15は、トラックFIFO管理テーブルを使用することで、ブロック単位のFIFO(First-In First-Out)構造を伴って管理される。
【0492】
新たに第五の記憶部15に割り当てられた(入力された)ブロックに対応するエントリは、トラックFIFO管理テーブルの先頭(入口側)に追加され、元々トラックFIFO管理テーブルに登録されていたエントリは、一つずつ後方にシフトする。
【0493】
エントリ数が許容範囲を超えた場合、トラックFIFO管理テーブルの末端(出口側)のエントリに関連付けられている最も古い割り当て順序を有するブロックは、第五の記憶部15から出力される。
【0494】
・ 物理ブロック管理テーブル
図33は、物理ブロック管理テーブルの構成例を示している。
【0495】
物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。
【0496】
1ブロック(物理ブロック)に対して1エントリとする。エントリ数は、データエリアとして使用可能なブロック数とする。各エントリは、ブロックの物理アドレスと関連付けられており、また、ブロックの使用状況(記憶領域(ブロック)が第二、第三、第四、及び第五の記憶部として使用されている(使用)か、または、使用されていない(未使用)か)を記憶する。
【0497】
図30のコントローラ10によって実行される処理フローについて説明する。
【0498】
第一の記憶部11に記憶されているデータは「小さな単位」と「大きな単位」とに分類され、「小さな単位」のデータは第四の記憶部14に出力される。第四の記憶部14のFIFO処理に関する動作は、第一の実施形態と同じである。
【0499】
即ち、第四の記憶部14でのFIFO処理に関しては、図26のフローチャートと同じである。第四の記憶部14から溢れたブロックに適用される処理に関しては、図27のフローチャートと実質的に同じである(ただし、「大きな単位」のデータの行き先は第五の記憶部15である)。
【0500】
この構成により、図28または図29のフローチャートに示すように、第二の記憶部12におけるコンパクションの対象は第四の記憶部14から出力された更新頻度の低いデータのみとなり、消去回数が減少することでメモリセルの劣化が防止される。
【0501】
ただし、第二の実施形態では、第一の記憶部11から「大きな単位」として出力されると決まったデータ、及び、第二及び第四の記憶部12,14から「大きな単位」として出力されると決まったデータについても、更新頻度の高いデータと更新頻度の低いデータとに分割される。原則として、更新頻度の低いデータのみをコンパクションの対象とする技術について、説明する。
【0502】
本実施形態では、「大きな単位」として、ブロック単位よりも小さいサイズのトラック単位が使用される。第三及び第五の記憶部13,15におけるデータ管理は、トラック単位で行われる。即ち、第三及び第五の記憶部13,15内のデータ管理単位はブロック単位(最小消去単位)よりも小さいサイズであるため、ブロック内に無効データが生成され、これによりコンパクション処理を行う必要が生じる。
【0503】
ここで、更新頻度の高いデータと更新頻度の低いデータとは互いに区別され、コンパクションの効率を向上させるために、第三の記憶部13の前段に、ブロック単位のFIFO構造を有する第五の記憶部15が配置される。
【0504】
第一の記憶部11から「大きな単位」として出力されると決まったデータ、及び、第二及び第四の記憶部12,14から「大きな単位」として出力されると決まったデータが、第五の記憶部15におけるFIFO処理の対象とされる場合の動作について説明する。
【0505】
A. 第五の記憶部15のFIFO処理
図34は、第五の記憶部15でのFIFO処理を示している。説明を簡略化するため、第一の記憶部11から「大きな単位」として出力されると決まったデータについて、詳細に検討する。
【0506】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、トラック追記用物理ブロックと称する)に対応するトラック管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、トラック単位に等しい「大きな単位」のデータとして、トラック追記用物理ブロック内の書き込み可能なトラック単位の領域に記憶する(ステップST1)。
【0507】
コントローラ10は、キャッシュ管理テーブルを検索し、出力対象に決まったトラック単位のデータを構成するセクタ単位のデータが、第一の記憶部11内に全て存在するか否かを判断する。
【0508】
第一の記憶部11内に全てのセクタ単位のデータが存在しない場合、コントローラ10は、第二、第三、第四、及び第五の記憶部12,13,14,15から、不足データを集める。
【0509】
トラック単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ10は、そのトラック単位のデータをトラック追記用物理ブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0510】
2. コントローラ10は、トラック管理テーブルにおいて、内部にトラック単位のデータが書き込まれたトラック単位の領域(複数のページ)に対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二、第三、第四、及び第五の記憶部12,13,14,15内に既に書き込まれていた、同一論理アドレス範囲内に含まれる旧データは無効データとなる。
【0511】
3. コントローラ10は、トラック追記用物理ブロック内にトラック単位の空き領域(複数の空きページ)が存在するか否かを判断する(ステップST3)。複数の空きページが検出されなかった場合、処理はステップST4に進む。複数の空きページが検出された場合、処理はステップST1に戻る。
【0512】
4. コントローラ10は、トラックFIFO管理テーブルのエントリを一つずつ後方にシフトし、トラック追記用物理ブロックの物理アドレスを、トラックFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、トラック追記用物理ブロックは、第四の記憶部14に割り当てられる。
【0513】
5.コントローラ10は、物理ブロック管理テーブルにおいて、ブロックに対応するエントリを「第三の記憶部13(使用)」に更新する。(ステップST5)。
【0514】
第五の記憶部15から第三の記憶部13へのデータ転送に際して、コントローラ10は、トラックFIFO管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体素子22に対するデータの読み出し/書き込み指示を要しない(移動処理)。
【0515】
B. 処理例1
図35は、処理例1のフローチャートを示している。
【0516】
1. コントローラ10は、物理ブロック管理テーブルを検索することによって、未使用のブロックを取得する。未使用のブロック内のデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、トラック管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST1)。
【0517】
2. コントローラ10は、トラック管理テーブルを走査することで、有効データ数が小さいブロックから順番に、トラック単位の有効データを選択する。選択された有効データはコンパクションブロックにコピーされ、トラック管理テーブルのコンパクションブロックに関連付けられたエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される(ステップST2)。
【0518】
トラック管理テーブルの走査に際して、トラックFIFO管理テーブルに物理アドレスが含まれるエントリと、トラック追記用物理ブロックに対応するエントリに関しては走査の対象とされない。即ち、第三の記憶部13は走査の対象とされ、第五の記憶部15については走査の対象とされない。
【0519】
ステップST2(コンパクション)に際して、コピーされるデータの論理アドレス範囲内に含まれる有効データが、第一、第二、及び第四の記憶部11,12,14から読み出され、コピーされるデータが有効データで上書きされても良い。コンパクションに巻き込まれた第一、第二、及び第四の記憶部11,12,14内の有効データは、無効化される。
【0520】
3. ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST3)。
【0521】
4. コントローラ10は、第三の記憶部13内のブロック数が、第三の記憶部13の記憶容量として定められた所定のブロック数以下であるか否かを判断する(ステップST4)。
【0522】
第三の記憶部13内のブロックの数が第三の記憶部13の記憶容量として定められた所定のブロック数以下である場合には、処理を終了する。第三の記憶部13内のブロックの数が第三の記憶部13の記憶容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0523】
C. 処理例2
第三の記憶部13内のブロックを単純に使用するだけでは、コンパクションが行えない場合がある。具体的には、半導体記憶装置の製品仕様としての記憶容量が、第三の記憶部13の記憶容量よりも大きく、第三及び第五の記憶部13,15の合計の記憶容量よりも小さい場合に、コンパクションが行えない場合がある。
【0524】
このような状況は、製品仕様としての記憶容量を、半導体記憶装置内部のNAND型フラッシュメモリの全容量にできるだけ近付けたいという要求から生じることがある。
【0525】
この場合に、第三の記憶部13内に存在する無効データの合計サイズ(記憶容量)がブロック単位のサイズに達しない時は、第三の記憶部13内で何度コンパクションを行っても、新たに空きブロックを生成することはできない。
【0526】
従って、このような状態になった時は例外的に、第三の記憶部13と第五の記憶部15との双方を対象としてコンパクションを行う(第五の条件)。
【0527】
図36は、処理例2のフローチャートを示している。
【0528】
1. コントローラ10は、物理ブロック管理テーブルを検索することによって、未使用のブロックを取得する。未使用のブロック内のデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、トラック管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST1)。
【0529】
2. コントローラ10は、トラック管理テーブルを走査することで、有効データ数が小さいブロックから順番に、トラック単位の有効データを選択する。選択された有効データはコンパクションブロックにコピーされ、トラック管理テーブルのコンパクションブロックに関連付けられたエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される(ステップST2)。
【0530】
トラック管理テーブルの走査に際して、トラックFIFO管理テーブルに物理アドレスが含まれるエントリに関しても走査の対象とされる。即ち、第三及び第五の記憶部13,15が走査の対象とされる。
【0531】
ステップST2(コンパクション)に際しては、コピーされるデータの論理アドレス範囲内に含まれる有効データが、第一、第二及び第四の記憶部11,12,14から読み出され、コピーされるデータが有効データで上書きされても良い。コンパクションに巻き込まれた第一、第二、及び第四の記憶部11,12,14内のデータは、無効化される。
【0532】
3. ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST3)。
【0533】
4. コントローラ10は、コンパクションブロックをトラックFIFO管理テーブルの先頭に追加する(ステップST4)。これは、第五の記憶部15内の無効データを減らすことが必要なためである。
【0534】
第五の記憶部15内の無効データが減れば、第三の記憶部13内の無効データが増加する。従って、上述の処理例1に示した通り、第三の記憶部13のみを対象としたコンパクションが適用され、これにより第三の記憶部13内の有効データが集められ、第三の記憶部13内に空きのブロックを生成することができる。
【0535】
5. コントローラ10は、第三及び第五の記憶部13,15内のブロック数が、第三及び第五の記憶部13,15の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST5)。
【0536】
第三及び第五の記憶部13,15内のブロック数が第三及び第五の記憶部13,15の容量として定められた所定のブロック数以下である場合には、処理を終了する。第三及び第五の記憶部13,15内のブロック数が第三及び第五の記憶部13,15の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0537】
処理例1及び2の各ステップST1において、第一の実施形態の処理例2(図29)と同様に、トラック単位の有効データ数が最も少ない二つ以上のブロックが選択され、この有効データがコンパクションブロックにコピーされても良い。
【0538】
第二の実施形態では、コントローラ10が、第二の記憶部12、第三の記憶部13、第四の記憶部14、及び第五の記憶部15に記憶領域(複数のブロック)を割り当てることにより、不揮発性半導体記憶素子内部のデータ管理が行われるが、これに限定されるものではない。
【0539】
例えば、第四の記憶部14を設定することなく、第二の記憶部12、第三の記憶部13、及び第五の記憶部15によるデータ管理を行うこととしても良い。別の方法では、第二の記憶部12、第四の記憶部14を設定することなく、第三の記憶部13、及び第五の記憶部15によるデータ管理を行うこととしても良い。
【0540】
(3) 第三の実施形態
第三の実施形態は、実装コスト及び検証コストを下げることを目的とした、第二及び第四の記憶部12,14におけるデータ管理設定に関連する。
【0541】
図37は、第三の実施形態に係る半導体記憶装置を示している。
【0542】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で書き込みがされる。第一の記憶部11は、DRAM等の揮発性半導体記憶素子に含まれる。
【0543】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22内部において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部12は、ページ単位に等しい「小さな単位」でデータを記憶する。
【0544】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【0545】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【0546】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0547】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部12,13,14へと割り当てられる。
【0548】
第三の記憶部13には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【0549】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三の記憶部13の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0550】
第二、第三、及び第四の記憶部12,13,14は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22の一以上のブロックから構成される。
【0551】
データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC、内部制御用フラグ等)が含まれないものとする。
【0552】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態において、コントローラ10が実現する各機能は、ハードウェア、及びソフトウェア、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0553】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0554】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部11,12,13,14のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、ページFIFO管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ10の主記憶メモリ内に展開される。
【0555】
・ キャッシュ管理テーブル
図37のキャッシュ管理テーブルは、第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。有効データの管理は、セクタ単位で実行される。
【0556】
キャッシュ管理テーブルの構成は、第一の実施形態と同様であり、図21に示す通りである。キャッシュ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0557】
・ ページ管理テーブル
図37のページ管理テーブルは、第二及び第四の記憶部12,14に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0558】
ページ管理テーブルの構成は、第一の実施形態と同様であり、図22に示す通りである。ページ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0559】
・ ブロック管理テーブル
図37のブロック管理テーブルは、第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【0560】
ブロック管理テーブルの構成は、第一の実施形態と同様であり、図23に示す通りである。ブロック管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0561】
・ ページFIFO管理テーブル
図37のページFIFO管理テーブルは、第四の記憶部14に割り当てられたブロック内のデータを管理する。
【0562】
ページFIFO管理テーブルの構成は、第一の実施形態と同様であり、図24に示す通りである。ページFIFO管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0563】
・ 物理ブロック管理テーブル
図37の物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。
【0564】
物理ブロック管理テーブルの構成は、第一の実施形態と同様であり、図25に示す通りである。物理ブロック管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0565】
図37のコントローラ10によって実行される処理フローについて説明する。
【0566】
コントローラ10は、ホスト機器からのセクタ単位(第一の単位)のデータを、最初に第一の記憶部11に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第I節で述べた「A.第一の記憶部へのデータ蓄積処理」を適用することができる。
【0567】
コントローラ10は、第一の記憶部11に蓄積されたデータを、所定の条件に従い、「小さな単位(第一の管理単位)」で管理すべきか、または、「大きな単位(第二の管理単位)」で管理すべきか、を判断する。所定の条件は、第I節で述べた「B.第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【0568】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0569】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、同時に、ブロック単位の自然数倍のサイズである。
【0570】
本実施形態では、説明の簡略化のため、管理テーブルで使用される各単位を、下記の通りであると想定する。
【0571】
即ち、第二及び第四の記憶部12,14のデータ管理単位である「小さな単位」のサイズは、ページ単位(第二の単位)のサイズと等しく、第三の記憶部13のデータ管理単位である「大きな単位」のサイズは、をブロック単位(第三の単位)のサイズと等しい。
【0572】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0573】
或いは、複数のページを合わせて管理して、「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0574】
同様に、ブロックを分割して管理して、「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0575】
或いは、複数のブロックを合わせて管理して、「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしても良い。
【0576】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<「小さな単位」<ページ単位(第二の単位)<ブロック単位(第三の単位)≦「大きな単位」と設定することが可能である。
【0577】
第一の記憶部11に蓄積されたデータを「小さな単位」で管理する場合には、ページ単位のデータを第四の記憶部14に転送する。第一の記憶部11に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部13に転送する。
【0578】
このデータ出力処理については、例えば、第I節で述べた「B.第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第I節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部14となる。
【0579】
A. 第四の記憶部のFIFO処理
第四の記憶部14は、既に述べたように、ブロック単位のFIFO構造を有する。図38は、第四の記憶部14でのFIFO処理を示している。
【0580】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、ページ追記用物理ブロックと称する)に対応するページ管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、ページ単位に等しい「小さな単位」のデータとして、ページ追記用物理ブロック内の書き込み可能なページに記憶する(ステップST1)。
【0581】
2. コントローラ10は、ページ管理テーブルにおいて、内部にページ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二及び第四の記憶部12,14内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【0582】
3. コントローラ10は、ページ追記用物理ブロック内に空きページが存在するか否かを判断する(ステップST3)。空きページが検出されなかった場合、処理はステップST4に進む。空きページが検出された場合、処理はステップST1に戻る。
【0583】
4. コントローラ10は、ページFIFO管理テーブルのエントリを一つずつ後方にシフトし、ページ追記用物理ブロックの物理アドレスを、ページFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、ページ追記用物理ブロックは、第四の記憶部14に割り当てられる。
【0584】
5. コントローラ10は、物理アドレスがページFIFO管理テーブルに記録されている、第四の記憶部14の全てのブロックに対して、以下の処理P1を行う(ステップST5)。
【0585】
処理P1は、コンパクションを採用している点で第一及び第二の実施形態と異なる。これは、第四の記憶部14においてブロックの使用効率が悪い場合について有効である。書き込み動作の増加を抑制するため、有効データの多いブロックについてはコンパクションの対象から除外される。
【0586】
B. 処理P1
図39は、処理P1のフローチャートを示している。図40は、処理P1を実行中の第四の記憶部14内のブロックの状態を示している。各ブロックは、複数のページから構成されている。各ページは、ページ管理テーブル中のページ利用状況を参照することにより、「有効」、「無効」、「空き」を含む三つの状態のいずれか一つに設定されている。
【0587】
1. コントローラ10は、ページFIFO管理テーブルに記録されている物理アドレスをもってページ管理テーブルを検索することで、第四の記憶部14内の全てのブロックについて、各ブロックに記憶されている有効データを数える(ステップST1)。
【0588】
2. コントローラ10は、ステップST1で数えた有効データ数が、所定の閾値以上であるブロックが存在するか否かを判断する。所定の閾値は、例えば、一つのブロック単位(「大きな単位」)の領域に記憶可能なページ単位(「小さな単位」)のデータ総数の50%に設定しても良い(ステップST2)。
【0589】
有効データ数が、所定の閾値以上のブロックが検出された場合、処理はステップST3に進む。そのようなブロックが検出されなかった場合、処理はステップST4に進む。
【0590】
3. コントローラ10は、有効データ数が所定の閾値以上のブロックを、第二の記憶部12へ移動する(ステップST3)。即ち、そのブロックの物理アドレスに関して、コントローラ10は、ページFIFO管理テーブルのエントリを無効化し、物理ブロック管理テーブルのエントリを「第二の記憶部12(使用)」に更新する。
【0591】
第四の記憶部14から第二の記憶部12へのデータ転送に際して、コントローラ10は、ページFIFO管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体記憶素子22に対するデータの読み出し/書き込み指示を要しない(移動処理)。
【0592】
4. コントローラ10は、第四の記憶部14において、古い割り当て順序を持つブロックから順番に有効データを選択する。選択された有効データは、消去された未使用ブロック(コンパクションブロック)にコピーされる。コントローラ10は、有効データで満たされたコンパクションブロックを、第二の記憶部12に割り当てる。(ステップST4)。
【0593】
5. コントローラ10は、第四の記憶部14において、コピーされたデータと同じ論理アドレス範囲を持つデータを無効化する。ブロック内の全てのデータが無効になった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST5)。
【0594】
ページ追記用物理ブロック内に空きページがなくなると、コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、そのブロックが新たにページ追記用物理ブロックとして割り当てられる。コントローラ10は、ページ管理テーブルの未使用のエントリを検索する。ページ追記用物理ブロックに対応する物理アドレスは、その未使用のエントリに記録される。
【0595】
第四の記憶部14からのブロックの移動に伴って、第二の記憶部12内のページ単位で管理されるブロックの数が増加する。第二の記憶部12のブロック数が許容範囲、即ち、第二の記憶部12の容量として定められた所定のブロック数を超える場合、コントローラ10は、以下の手順で、コンパクション、または、第二の記憶部12から第三の記憶部13へのデータ転送処理を実行する。
【0596】
尚、第一の実施形態と異なり、処理P1は第三の記憶部13へのデータ転送処理(デフラグメンテーション)を含まない。これは、第四の記憶部14から第二の記憶部12へのデータ転送処理を簡略化する。
【0597】
C.処理例
図41は、処理例のフローチャートを示している。図42乃至図46は、図41の処理を実行中の第二の記憶部12内のブロックの状態を示している。図42乃至図46に示されている通り、第二の記憶部12におけるブロックの割り当て順序が、コントローラ10によって管理されている。
【0598】
各ブロックは、複数のページから構成されている。各ページは、ページ管理テーブル中のページ利用状況を参照することにより、「有効」、「無効」、「空き」を含む三つの状態のいずれか一つに設定されている。
【0599】
1. 上記処理P1に従い、コントローラ10は、第四の記憶部14から第二の記憶部12へデータを転送する(ステップST1)。
【0600】
2. コントローラ10は、第二の記憶部内12のブロック数が、許容範囲を超えているか否かを判断する。許容範囲は、第二の記憶部12の容量として定められた所定のブロック数としても良い(ステップST2)。
【0601】
ブロック数が許容範囲を超えていない場合には、処理を終了する。ブロック数が許容範囲を超えている場合には、処理はステップST3に進む。
【0602】
3. コントローラ10は、特定範囲内の複数のブロックに記憶されている有効データ数(論理アドレス数)を、ページ管理テーブルを参照することにより数え、その特定範囲内に記憶されている有効データの総数が所定の閾値よりも大きいか否かを判断する(ステップST3)。
【0603】
特定範囲は、例えば、第二の記憶部12において隣接する2つのブロックを含んでいる。「隣接するブロック」とは、割り当て順序が連続する複数のブロックを意味する。図42の「窓」は、この特定範囲内のブロックを示している。「窓」の開始位置は、割り当て順序が最も古いブロックを含むように設定される。
【0604】
ステップST3における所定の閾値は、特定範囲内に含まれる複数のブロックの半数のブロックに記憶可能なページ単位のデータ総数としても良い。図42は、特定範囲内に含まれる二つのブロックを示しており、所定の閾値は、二つのブロックの半分である一つのブロックに記憶可能なページ単位のデータ総数に設定されている。
【0605】
有効データ数が所定の閾値よりも大きい場合には、処理はステップST4に進む。有効データ数が所定の閾値以下である場合には、処理はステップST7に進み、コントローラ10は、現在の「窓」に対してデフラグメンテーション及びコンパクションを実行する(図43及び図44)。
【0606】
4. コントローラ10は、より古い側からより新しい側へ、「窓」をシフトさせる(ステップST4)。具体的には、コントローラ10は、第二の記憶部12において、最も古い割り当て順序を持つブロック側から、最も新しい割り当て順序を持つブロック側へ、「窓」を一つずつシフトさせる。
【0607】
5. コントローラ10は、「窓」が第二の記憶部12において最も新しい割り当て順序を持つブロックを越えたか否かを判断する(ステップST5)。「窓」が最も新しい割り当て順序を持つブロックを越えた場合には、処理はステップST6に進む。「窓」が最も新しい割り当て順序を持つブロックを越えていない場合には、処理はステップST3に戻る。
【0608】
6. コントローラ10は、最も古い割り当て順序を持つブロック内の全ての有効データを選択し、選択された有効データをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する(デフラグメンテーション)(ステップST6)。ステップST6は、コントローラ10が第二の記憶部12内部でコンパクション対象を検出できなかった場合に実行される。
【0609】
図45に示される通り、最も古い割り当て順序を持つブロックに記憶されている有効データの論理アドレスをブロック単位(「大きな単位」)のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データが、第一、第二、第三、及び第四の記憶部11,12,13,14から集められる。
【0610】
コントローラ10は、ブロック単位のデータを第三の記憶部13に書き込む指示を、不揮発性半導体記憶素子22に与える。ブロック単位のデータを書き込んだ後、コントローラ10は最も古い割り当て順序を持つブロックを解放し、処理はステップST2に戻る。「窓」の位置は開始位置に初期化される。
【0611】
7. コントローラ10は、物理ブロック管理テーブルを検索し、未使用のブロック(コンパクションブロック)を取得する(ステップST7)。この未使用のブロックはコンパクション用に供される。ステップST7で要求される未使用のブロック数は、特定範囲に含まれるブロックの半数である。図44では、一つの未使用のブロックがコンパクション用に供される。コントローラ10は、未使用のブロック内のデータを消去する指示を、不揮発性半導体記憶素子22に与える。
【0612】
8. コントローラ10は、「窓」内に記憶されている有効データを順次選択する。「窓」内に記憶されている全ての有効データが処理されてしまった場合、「窓」よりも新しい側に位置するブロックに記憶されている有効データが、割り当て順序の順番で更に選択される(ステップST8)。
【0613】
9. コントローラ10は、選択された有効データの論理アドレスをブロック単位(「大きな単位」)のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データ数が、第二及び第四の記憶部12,14において所定の閾値以上である否かを判断する(ステップST9)。ステップST9における所定の閾値は、一つのブロック単位(「大きな単位」)の領域内に記憶可能なページ単位(「小さな単位」)のデータ総数の50%に設定されていても良い。
【0614】
有効データの総数が所定の閾値未満の場合には、処理はステップST10に進む。有効データの総数が所定の閾値以上の場合には、処理はステップ11に進む。
【0615】
10. コントローラ10は、図44に示される通り、選択された有効データを、コンパクションブロックにコピーする(書き直す)(ステップST10)。コピーされた有効データの論理アドレスは、ページ管理テーブルにおいてコンパクションブロックに関連付けられたエントリに新たに登録される。第二の記憶部12に割り当てられたブロックに関連付けられたエントリに元々登録されていた、コピーされた有効データの論理アドレスは、ページ管理テーブルにおいて無効化される。
【0616】
11. コントローラ10は、図43に示す通り、ブロック単位(「大きな単位」)のサイズでアラインされた論理アドレス範囲に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集め、選択された有効データをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する(デフラグメンテーション)(ステップST11)。
【0617】
12. コントローラ10は、ステップST10でのコンパクション、または、ステップST11でのデフラグメンテーションによって、内部の全てのデータが無効になったブロックを解放する(ステップST12)。コントローラ10は、図46に示される通り、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する。
【0618】
13. コントローラ10は、コンパクションブロックがページ単位の有効データで満たされたか否かを判断する(ステップST13)。コンパクションブロックが有効データで満たされていない場合には、処理はステップST8に戻る。コンパクションブロックが有効データで満たされている場合には、処理はステップST14に進む。
【0619】
ただし、ステップST8で全ての有効データが選択されてもコンパクションブロックを有効データで満たすことができない場合には、処理はステップST14に進む。この場合、空きページを持つコンパクションブロックが第二の記憶部12に割り当てられることがある。
【0620】
14. コントローラ10は、図44に示される通り、第二の記憶部12内の「窓」の直前にコンパクションブロックを挿入する(ステップST14)。即ち、コンパクションブロックは「窓」よりも古い側に挿入され、これにより、第二の記憶部12に新たに割り当てられたブロックが再びコンパクションの対象とされることを防ぐことができる。
【0621】
ページ管理テーブル及び物理ブロック管理テーブルを更新した後、処理はステップST2に戻る。処理がステップST2に戻り、新たなコンパクション処理が発動する時、図46に示される通り、「窓」の位置は現在の位置に保持される。
【0622】
本処理例では、コントローラ10は、特定範囲(「窓」)に対してのみ、コンパクションが適用可能であるか否かを判断することによって、コンパクション対象を検出するための検索処理が簡略化され、かつ、実装コスト及び検証コストの低減が可能となる。
【0623】
特定範囲に含まれるブロックの数は2つに限定されない。コントローラ10は、3つ以上のブロックを特定範囲として定義しても良い。コントローラ10は、特定範囲の有効データ数が、特定範囲に含まれるブロックの数から1を減じたブロックに記憶可能なページ単位のデータ数よりも多いか否かを判断しても良い。
【0624】
3. 適用例
上記実施形態に係る半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるSSD(Solid State Drive)に適用可能である。その場合の具体例については、後述する。
【0625】
4. むすび
第一、第二、及び第三の実施形態に係る半導体記憶装置は、更新頻度の低いデータをコンパクション処理の対象とし、これにより不揮発性半導体記憶素子内のブロックの消去回数を減少させる。更に第I節で述べたように、半導体記憶装置は、「大きな単位」と「小さな単位」という二つの管理単位を併用することにより、書き込み効率の向上を実現する。
【0626】
本発明は、上述の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で、各構成要素を変形して具体化できる。また、上述の実施の形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成できる。例えば、上述の実施の形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施の形態の構成要素を適宜組み合わせてもよい。
【0627】
[III.データ管理単位と読み出し/書き込み/消去単位との関係]
1. 概要
以上、第I節及び第II節に係る半導体記憶装置についてそれぞれ説明がなされた。本節では、上述の説明で使用された第一、第二、及び第三の単位、並びに、「小さな単位」及び「大きな単位」について、具体的に説明する。
【0628】
第一の単位は、第一の記憶部11を含む揮発性または不揮発性半導体記憶素子に関してのデータ入力及び出力単位の少なくとも一方として規定される。第一の記憶部11は、第一の単位以下でデータの読み出し/書き込みを行う。第一の単位は、例えば、セクタ単位であって良い。パーソナルコンピュータ等のホスト機器は、セクタ単位で半導体記憶装置へのアクセスを実行する。
【0629】
第二の単位は、第二、第三、第四、及び第五の記憶部12,13,14,15を含む不揮発性半導体記憶素子内における、最小のデータ読み出し及び書き込み単位の少なくとも一方として規定される。
【0630】
第三の単位は、第二、第三、第四または第五の記憶部12,13,14,15を含む不揮発性半導体記憶素子内における、最小のデータ消去単位として規定される。
【0631】
第二、第三、第四及び第五の記憶部12,13,14,15がNAND型フラッシュメモリ内に設定される場合、第二の単位はページ単位であり、第三の単位はブロック単位である。
【0632】
第二及び第三の単位は、不揮発性半導体記憶素子内に設定される第二、第三、第四、及び第五の記憶部12,13,14,15に対する読み出し/書き込み/消去単位として物理的に規定される。
【0633】
一方、半導体記憶装置におけるデータ管理単位(「小さな単位」及び「大きな単位」)は、不揮発性半導体記憶素子における物理的な読み出し/書き込み/消去単位に一致していても良いし、異なっていても良い。
【0634】
以下の実施形態では、第二及び第四の記憶部12,14に対するデータ管理単位である「小さな単位」は、クラスタ単位である。クラスタ単位はセクタサイズの自然数倍のサイズであり、かつ、ページ単位はクラスタ単位の二以上の自然数倍のサイズである。クラスタ単位は、ホスト機器のフィルシステムで使用されるファイル管理単位と等しいサイズであっても良い。
【0635】
2. 実施形態
本発明の実施形態について説明する。
【0636】
図47は、本実施形態に係る半導体記憶装置を示している。
【0637】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で書き込みがされる。第一の記憶部11は、例えば、DRAM等の揮発性半導体記憶素子内部に設定される。
【0638】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22内部において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部12は、クラスタ単位に等しい「小さな単位」でデータを記憶する。
【0639】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【0640】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、クラスタ単位に等しい「小さな単位」でデータを記憶する。
【0641】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0642】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部12,13,14へと割り当てられる。
【0643】
第三の記憶部13には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【0644】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三の記憶部13の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0645】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。本実施形態において、コントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、または、ソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0646】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0647】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部11,12,13,14のどこに記憶されているかを管理するために、キャッシュ管理テーブル、クラスタ管理テーブル、ブロック管理テーブル、クラスタFIFO管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ10の主記憶メモリ内に展開される。
【0648】
・ キャッシュ管理テーブル
図47のキャッシュ管理テーブルは、第一の記憶部11に記憶されるデータを、クラスタ単位に等しい「小さな単位」で管理する。有効データの管理は、セクタ単位で実行される。
【0649】
キャッシュ管理テーブルの構成は、第II節の第一の実施形態で図21として示される通りである。ただし、本実施形態では、第一の記憶部11の1クラスタ単位の領域一つに対して1エントリとする。
【0650】
エントリ数は、第一の記憶部11に収まるクラスタ単位のデータ数、即ち、(第一の記憶部11の全容量)/(クラスタ単位のサイズ)以下とする。
【0651】
各エントリには、クラスタ単位のデータの論理アドレス、第一の記憶部11の物理アドレス、及び、対応するクラスタ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【0652】
・ クラスタ管理テーブル
図47のクラスタ管理テーブルは、第二の記憶部12及び第四の記憶部14に記憶されるデータを、クラスタ単位に等しい「小さな単位」で管理する。クラスタ単位は、セクタ単位の自然数倍のサイズであり、かつ、ページ単位は、クラスタ単位の二以上の自然数倍のサイズである。
【0653】
図48は、クラスタ管理テーブルの構成例を示している。
【0654】
第二及び第四の記憶部12,14の1ブロックに対して1エントリが割り当てられる。
【0655】
エントリ数は、第二及び第四の記憶部12,14に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけの余裕を持たせた数、即ち、[(第二及び第四の記憶部12,14の全容量)/(ブロック単位のサイズ)]に余裕を持たせた数とする。
【0656】
各エントリには、第二の記憶部12または第四の記憶部14に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のクラスタ単位のデータの論理アドレスが記憶されている。
【0657】
図48では、ページ単位がクラスタ単位の二倍のサイズであると想定している。クラスタの空き状況として、各クラスタについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0658】
尚、ページ境界を満たさないクラスタ単位のデータが第四の記憶部14に書き込まれる場合、同一ページ内のクラスタ単位の残りの領域に対応するクラスタの空き状況は、「書き込み不可」である状態に設定される。クラスタ単位の残りの領域が有効データを記憶していなくても、データ書き込み単位はページ単位であり不揮発性半導体記憶素子22はその残りの領域を使用することはできないため、コントローラ10は、残りの領域を無効データとして取り扱う。
【0659】
・ ブロック管理テーブル
図47のブロック管理テーブルは、第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。ブロック管理テーブルの構成については、第II節の第一の実施形態で図23として示される通りである。
【0660】
・ クラスタFIFO管理テーブル
図47のクラスタFIFO管理テーブルは、第四の記憶部14に割り当てられたブロック内のデータを管理する。クラスタFIFO管理テーブルの構成については、第II節の第一の実施形態で図24として示される通りである。
【0661】
・ 物理ブロック管理テーブル
図47の物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。物理ブロック管理テーブルの構成については、第II節の第一の実施形態で図25として示される通りである。
【0662】
図47のコントローラ10によって実行される処理フローについて説明する。
【0663】
コントローラ10は、ホスト機器からのセクタ単位(第一の単位)のデータを、最初に第一の記憶部11に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第I節で述べた「A.第一の記憶部へのデータ蓄積処理」を適用することができる。
【0664】
コントローラ10は、第一の記憶部11に蓄積されたデータを、所定の条件に従い、「小さな単位(第一の管理単位)」で管理すべきか、または、「大きな単位(第二の管理単位)」で管理すべきか、を判断する。所定の条件は、第I節で述べた「B.第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【0665】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0666】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、同時に、ブロック単位の自然数倍のサイズである。
【0667】
本実施形態では、第二及び第四の記憶部12,14のデータ管理単位である「小さな単位」は、セクタ単位の二以上の自然数倍のサイズであり、かつ、ページ単位は、「小さな単位」の二以上の自然数倍のサイズである。この関係を満たす「小さな単位」をクラスタ単位と称する。説明の簡略化のため、第三の記憶部13のデータ管理単位である「大きな単位」は、ブロック単位のサイズと等しいとする。
【0668】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<クラスタ単位(「小さな単位」)<ページ単位(第二の単位)<ブロック単位(第三の単位)≦「大きな単位」と設定することが可能である。
【0669】
第一の記憶部11に蓄積されたデータを「小さな単位」で管理する場合には、クラスタ単位のデータを第四の記憶部14に転送する。第一の記憶部11に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部13に転送する。
【0670】
このデータ出力処理については、第I節で述べた「B.第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第I節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部14となる。クラスタ単位のサイズはページ単位のサイズよりも小さいため、複数のクラスタ単位のデータが巻き込まれて第四の記憶部14へ転送されても良い。
【0671】
A. 第四の記憶部のFIFO処理
第四の記憶部14は、既に述べたように、ブロック単位のFIFO構造を有する。図49は、第四の記憶部14でのFIFO処理を示している。
【0672】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、クラスタ追記用物理ブロックと称する)に対応するクラスタ管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、クラスタ単位に等しい「小さな単位」のデータとして、クラスタ追記用物理ブロック内の書き込み可能なクラスタ単位の領域に書き込む(ステップST1)。
【0673】
コントローラ10は、キャッシュ管理テーブルを検索し、出力対象に決まったクラスタ単位のデータを構成するセクタ単位のデータが、第一の記憶部11内に全て存在するか否かを判断する。
【0674】
第一の記憶部11内に全てのセクタ単位のデータが存在しない場合、コントローラ10は、第二、第三、及び第四の記憶部12,13,14から、不足データを集める。
【0675】
ページ単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ10は、そのクラスタ単位のデータを書き込む指示を、不揮発性半導体記憶素子22に与える。ステップST1での書き込み処理において、同一ページに記憶可能な複数のクラスタ単位のデータは共に書き込まれることが望ましい。
【0676】
2. コントローラ10は、クラスタ管理テーブルにおいて、内部にクラスタ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二及び第四の記憶部12,14内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【0677】
3. コントローラ10は、クラスタ追記用物理ブロック内に、クラスタ単位の空き領域が存在するか否かを判断する(ステップST3)。クラスタ単位の空き領域が検出されなかった場合、処理はステップST4に進む。クラスタ単位の空き領域が検出された場合、処理はステップST1に戻る。
【0678】
4. コントローラ10は、クラスタFIFO管理テーブルのエントリを一つずつ後方にシフトし、クラスタ追記用物理ブロックの物理アドレスを、クラスタFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、クラスタ追記用物理ブロックは、第四の記憶部14に割り当てられる。
【0679】
5. コントローラ10は、クラスタFIFO管理テーブルに物理アドレスが記録されている、第四の記憶部14内の全てのブロックに対して、処理P1を実行する(ステップST5)。
【0680】
処理P1は、第II節で述べた図39の「B.処理P1」と実質的に同じであっても良い。ただし、有効データはクラスタ単位で管理される。
【0681】
3. むすび
半導体記憶装置におけるデータ管理単位(「小さな単位」及び「大きな単位」)は、不揮発性半導体記憶素子における物理的な読み出し/書き込み/消去単位に一致していても良いし、異なっていても良い。
【0682】
半導体記憶装置は、以下のデータ管理単位を採用しても良い。二つのデータ管理単位は、「大きな単位」のサイズが「小さな単位」のサイズの二以上の自然数倍であるという関係を満たすものとする。
【0683】
(1) 「小さな単位」のサイズはページ単位のサイズに等しく、「大きな単位」のサイズはブロック単位のサイズに等しい。
【0684】
(2) 「小さな単位」のサイズはページ単位のサイズに等しく、「大きな単位」のサイズはブロック単位よりも小さいトラック単位に等しい。
【0685】
(3) 「小さな単位」のサイズはページ単位よりも小さいクラスタ単位に等しく、「大きな単位」のサイズはブロック単位に等しい。
【0686】
(4) 「小さな単位」のサイズはページ単位よりも小さいクラスタ単位に等しく、「大きな単位」のサイズはブロック単位よりも小さいトラック単位に等しい。
【0687】
当然ながら、半導体記憶装置は、例えば、不揮発性半導体記憶素子の仕様(ページ単位のサイズ、または、ブロック単位のサイズ)、または、ホスト機器のファイル管理単位に基づき、上記複数の実施形態で説明された一定の関係を満たす他のデータ管理単位を採用しても良い。
【0688】
[IV.適用例]
上記複数の実施形態に示された半導体記憶装置に係る適用例について説明する。
【0689】
これら半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるSSDに適用される。
【0690】
図50は、SSDの構成例を示している。
【0691】
SSD100は、データ保存用の複数のNAND型フラッシュメモリ(NANDメモリ)10、データキャッシュ用または作業領域用のDRAM101、フラッシュメモリ10及びDRAM101を制御するドライブ制御回路102、及び電源回路103を備えている。
【0692】
上記実施形態の第一の記憶部11は、DRAM101内に設定されていても良い。DRAM101内に設定される第一の記憶部11は、NANDメモリ10に対するライトキャッシュとして機能する。ドライブ制御回路102は、上記実施形態のコントローラ10を構成していても良い。
【0693】
ドライブ制御回路102は、SSD100の外部に設けられる状態表示用LEDを制御するための制御信号を出力する。DRAM21の代わりに、FeRAM(Ferro electric Random Access Memory)、MRAM(Magnetic Random Access Memory)、NOR型フラッシュメモリを使用しても良い。即ち、第一の記憶領域11は、NANDメモリ10よりも高い書き込み速度を持つ不揮発性ランダムアクセスメモリ内に設定されていても良い。
【0694】
SSD100は、ATAインターフェース(ATA I/F)を介して、パーソナルコンピュータ等のホスト機器との間でデータを送受信する。SSD100は、RS232Cインターフェース(RS232C I/F)を介して、デバッグ用機器との間でデータを送受信する。
【0695】
電源回路104は、外部電源を受け、この外部電源を用いて複数の内部電源を生成する。これらの内部電源は、SSD100内の各部に供給される。電源回路103は、外部電源の立ち上がりを検知して、パワーオンリセット信号を生成する。パワーオンリセット信号は、ドライブ制御回路102に送られる。
【0696】
NANDメモリ10は、複数のブロックから構成されている。それぞれのブロックは、データ消去の最小単位である。図51は、NANDメモリ10内の一つのブロックの構成例を示している。
【0697】
各ブロックは、X方向に沿って順に配列された(m+1)個のNANDストリングを備えている(mは、0以上の整数)。(m+1)個のNANDストリングにそれぞれ含まれる選択トランジスタST1は、ドレインがビット線BL0〜BLmに接続され、ゲートが選択ゲート線SGDに共通接続されている。選択トランジスタST2は、ソースがソース線SLに共通接続され、ゲートが選択ゲート線SGSに共通接続されている。
【0698】
各メモリセルトランジスタMTは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタMTは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。
【0699】
メモリセルトランジスタMTは、1ビットを記憶するように構成されていても良い(SLC:Single Level Cell)し、2ビット以上のデータを記憶するように構成されていても良い(MLC:Multi Level Cell)。
【0700】
各NANDストリングにおいて、(n+1)個のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。即ち、複数のメモリセルトランジスタMTは、隣接するもの同士で拡散領域(ソース領域若しくはドレイン領域)を共有するような形でY方向に直列接続される。
【0701】
最もドレイン側に位置するメモリセルトランジスタMTから順に、制御ゲート電極がワード線WL0〜WLnにそれぞれ接続されている。従って、ワード線WL0に接続されたメモリセルトランジスタMTのドレインは選択トランジスタST1のソースに接続され、ワード線WLnに接続されたメモリセルトランジスタMTのソースは選択トランジスタST2のドレインに接続されている。
【0702】
ワード線WL0〜WLnは、第三の単位内のNANDストリング間で、メモリセルトランジスタMTの制御ゲート電極を共通に接続している。つまり、第三の単位内において同一行にあるメモリセルトランジスタMTの制御ゲート電極は、同一のワード線WLに接続される。この同一のワード線WLに接続される(m+1)個のメモリセルトランジスタMTはページとして取り扱われ、このページごとに読み出し/書き込みが行われる。
【0703】
ビット線BL0〜BLmは、第三の単位間で、選択トランジスタST1のドレインを共通に接続している。つまり、複数の第三の単位間内において同一列にあるNANDストリングは、同一のビット線BLに接続される。
【0704】
上記各実施形態における第二、第三、第四、及び第五の記憶部12,13,14,15は、(複数の)NANDメモリ10内に設定されている。複数の記憶部の各々は、複数のNANDメモリ10に亘って設定されていても良い。別な場合では、複数の記憶部の各々は、別々のNANDメモリ10内に設定されていても良い。更に、それぞれのNANDメモリ10は異なる性能を有していても良い。例えば、第四の記憶部14がSLC型NANDメモリ内に設定され、他の記憶部がMLC型NANDメモリ内に設定される等しても良い。
【0705】
複数のNANDメモリ10は、ドライブ制御回路102に並列接続されている。並列接続されるNANDメモリ10のブロックは同時に消去されても良く、SSD100における最小の消去単位である拡張ブロック単位を構成していても良い。並列接続されるNANDメモリ10の複数のページは同時に書き込み及び読み出しされても良く、SSD100における最小の書き込み/読み出し単位である拡張ページ単位を構成していても良い。
【0706】
メモリセルトランジスタMTは、浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型等、電荷蓄積層としての窒化膜界面に電子をトラップさせることで閾値調整可能な構造であっても良い。MONOS構造のメモリセルトランジスタMTについても同様に、1ビットを記憶するように構成されていても良いし、2ビット以上のデータを記憶するように構成されていても良い。
【0707】
図52は、1個のメモリセルトランジスタに2ビットの記憶を行う4値データ記憶方式での閾値分布の例を示している。
【0708】
4値データ記憶方式では、上位ページデータ“x”と下位ページデータ“y”で定義される4値データ“xy”の何れか一つをメモリセルに保持可能である。4値データは、“11”、“01”、“00”、及び“10”である。データ“11”(消去状態)は、メモリセルトランジスタMTの閾値電圧が負の状態である。
【0709】
下位ページデータの書き込み動作においては、下位ページデータ“y”の書き込みによって、データ“11”が選択的にデータ“10”にプログラムされる。上位ページデータの書き込み前において、データ“10”の閾値分布は、データ“01”とデータ“00”の閾値分布の中間程度に位置しており、上位ページデータの書き込み後の閾値分布よりブロードであっても良い。
【0710】
上位ページデータの書き込み動作においては、上位ページデータ“x”の書き込みによって、データ“11”が選択的にデータ“01”にプログラムされ、データ“10”が選択的にデータ“00”にプログラムされる。
【0711】
多値データ記憶法式を適用する場合、メモリセルトランジスタMTの閾値分布を細かく制御する必要があり、メモリセルトランジスタMTの劣化の影響を受け易い。従って、半導体記憶装置内の不揮発性半導体記憶素子が多値データ記憶法式を採用する場合、書き込み効率を向上させ、消去回数の増加を抑制することは特に有効である。
【0712】
また、図52に示すように、下位ページデータのみ書き込まれた状態の閾値分布と上位ページデータまで書き込み済みの状態の閾値分布とが異なる場合、上位ページのプログラム実行途中に電源断等が発生すると、既に書き込み済みの下位ページのデータが破壊される可能性がある。
【0713】
この問題に対応するため、「小さな単位」のデータが追記的に書き込まれる第四の記憶部14については、擬似SLCブロックによって構成されていても良い。擬似SLCブロックは、下位ページのみをデータ書き込みに使用するブロックのことである。この設定は下位ページデータの破壊を防止する。更に、下位ページのプログラムは細かい制御を必要としないため、書き込み速度が向上する。
【0714】
第四の記憶部14が擬似SLCブロックによって構成される場合、第二の記憶部12において、擬似SLCブロックと通常ブロック(MLCブロック)とが互いに混在することになる。擬似SLCブロックの記憶容量は、MLCブロックの記憶容量の半分である。従って、第二の記憶部12のコンパクション処理では、擬似SLCブロック内の有効データがMLCブロックにコピーされる。
【0715】
図53は、ドライブ制御回路の構成例を示している。
【0716】
ドライブ制御回路102は、データアクセス用バス104、第1の回路制御用バス105、及び第2の回路制御用バス106を備えている。
【0717】
第1の回路制御用バス105には、ドライブ制御回路102全体を制御するプロセッサ107が接続されている。また、第1の回路制御用バス105には、各管理プログラム(FW:firmware)のブート用プログラムが格納されたブートROM108がROMコントローラ109を介して接続されている。また、第1の回路制御用バス105には、電源回路103からのパワーオンリセット信号を受けて、リセット信号及びクロック信号を各部に供給するクロックコントローラ110が接続されている。
【0718】
第2の回路制御用バス106は、第1の回路制御用バス105に接続されている。第2の回路制御用バス106には、状態表示用LEDにステータス表示用信号を供給するパラレルIO(PIO)回路111、RS232Cインターフェースを制御するシリアルIO(SIO)回路112が接続されている。
【0719】
ATAインターフェースコントローラ(ATAコントローラ)113、第1のECC(Error Check and Correct)回路114、NANDコントローラ115、及びDRAMコントローラ119は、データアクセス用バス104と第1の回路制御用バス105との両方に接続されている。ATAコントローラ113は、ATAインターフェースを介してホスト装置との間でデータを送受信する。データアクセス用バス104には、データ作業領域として使用されるSRAM120がSRAMコントローラ121を介して接続されている。
【0720】
NANDコントローラ115は、4つのNANDメモリ10とのインターフェース処理を行うNAND I/F118、第2のECC回路117、及びNANDメモリ−DRAM間のアクセス制御を行うDMA転送制御用DMAコントローラ116を備えている。
【0721】
図54は、プロセッサの構成例を示している。
【0722】
プロセッサ107は、データ管理部122、ATAコマンド処理部123、セキュリティ管理部124、ブートローダ125、初期化管理部126、デバッグサポート部127を備えている。
【0723】
データ管理部122は、NANDコントローラ115、第1のECC回路114を介して、NANDメモリ−DRAM間のデータ転送、NANDチップに関する各種機能を制御する。
【0724】
ATAコマンド処理部123は、ATAコントローラ113、及びDRAMコントローラ119を介して、データ管理部122と協動してデータ転送処理を行う。セキュリティ管理部124は、データ管理部122及びATAコマンド処理部123と協動して各種のセキュリティ情報を管理する。ブートローダ125は、パワーオン時、各管理プログラム(FW)をNANDメモリ10からSRAM120にロードする。
【0725】
初期化管理部126は、ドライブ制御回路102内の各コントローラ及び回路の初期化を行う。デバッグサポート部127は、外部からRS232Cインターフェースを介して供給されたデバッグ用データを処理する。
【0726】
図55は、SSDを搭載したポータブルコンピュータの例を示している。
【0727】
ポータブルコンピュータ200は、本体201と、表示ユニット202とを備えている。表示ユニット202は、ディスプレイハウジング203と、このディスプレイハウジング203に収容された表示装置204とを備えている。
【0728】
本体201は、筐体205と、キーボード206と、ポインティングデバイスであるタッチパッド207とを備えている。筐体205内部には、メイン回路基板、ODD(Optical Disk Device)ユニット、カードスロット、SSD100等が収容されている。
【0729】
カードスロットは、筐体205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部208が設けられている。ユーザは、この開口部208を通じて筐体205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0730】
SSD100は、従来のHDDの置き換えとして、ポータブルコンピュータ200内部に実装された状態として使用しても良いし、ポータブルコンピュータ200が備えるカードスロットに挿入した状態で、追加デバイスとして使用しても良い。
【0731】
図56は、SSDを搭載したポータブルコンピュータのシステム構成例を示している。
【0732】
ポータブルコンピュータ200は、CPU301、ノースブリッジ302、主記憶メモリ303、ビデオコントローラ304、オーディオコントローラ305、サウスブリッジ309、BIOS−ROM310、SSD100、ODDユニット311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)311、及びネットワークコントローラ312等を備えている。
【0733】
CPU301は、ポータブルコンピュータ200の動作を制御するために設けられたプロセッサであり、SSD100から主記憶メモリ303にロードされるオペレーティングシステム(OS)を実行する。ODDユニット311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも一つの処理の実行を可能にした場合に、CPU301は、それらの処理の実行をする。
【0734】
CPU301は、BIOS−ROM310に格納されたシステムBIOS(Basic Input Output System)を実行する。システムBIOSは、ポータブルコンピュータ200内のハードウェア制御のためのプログラムである。
【0735】
ノースブリッジ302は、CPU301のローカルバスとサウスブリッジ309との間を接続するブリッジデバイスである。ノースブリッジ302には、主記憶メモリ303をアクセス制御するメモリコントローラも内蔵されている。
【0736】
ノースブリッジ302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ304との通信、及びオーディオコントローラ305との通信を実行する機能を有している。
【0737】
主記憶メモリ303は、プログラムやデータを一時的に記憶し、CPU301の作業領域として機能する。主記憶メモリ303は、例えば、DRAMから構成される。
【0738】
ビデオコントローラ304は、ポータブルコンピュータ200のディスプレイモニタ(LCD)317として使用される表示ユニットを制御するビデオ再生コントローラである。
【0739】
オーディオコントローラ305は、ポータブルコンピュータ200のスピーカ319を制御するオーディオ再生コントローラである。
【0740】
サウスブリッジ309は、LPC(Low Pin Count)バス上の各デバイス、及びPCI(Peripheral Component Interconnect)バス上の各デバイスを制御する。サウスブリッジ309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインターフェースを介して制御する。
【0741】
ポータブルコンピュータ200は、セクタ単位でSSD100へのアクセスを行う。ATAインターフェースを介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がSSD100に入力される。
【0742】
サウスブリッジ309は、BIOS−ROM310、及びODDユニット311をアクセス制御するための機能も有している。
【0743】
EC/KBC311は、電力管理のためのエンベデッドコントローラと、キーボード(KB)314及びタッチパッド207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0744】
EC/KBC311は、ユーザによるパワーボタンの操作に応じてポータブルコンピュータ200の電源をON/OFFする機能を有している。ネットワークコントローラ312は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0745】
上記実施形態の半導体記憶装置は、SSDに限らず、例えば、SD(登録商標)カードに代表されるメモリカードとして構成することも可能である。半導体記憶装置をメモリカードとして構成する場合、ポータブルコンピュータに限らず、携帯電話、PDA(Personal Digital Assistant)、デジタルスチルカメラ、デジタルビデオカメラ等、各種電子機器に対して適用可能である。
【産業上の利用可能性】
【0746】
本発明の半導体記憶装置は、SSD等のパーソナルコンピュータの二次記憶装置及びSD(登録商標)カード等のメモリカードに有効である。
【技術分野】
【0001】
本発明は、不揮発性半導体メモリを備えた半導体記憶装置に関する。
【背景技術】
【0002】
NAND型フラッシュメモリのように、不揮発性半導体メモリには、データを記憶させる場合に、ブロックと呼ばれる単位で一度データを消去してからその後に書き込みを行うものがあったり、ページと呼ばれる単位で読み出し/書き込みを行うものがあったり、消去/読み出し/書き込みの単位が固定されていたりするものがある。
【0003】
一方、パーソナルコンピュータ等のホスト機器がハードディスクをはじめとする二次記憶装置に対してデータの読み出し/書き込みを行う単位は、セクタと呼ばれる。セクタは、不揮発性半導体メモリの消去/読み出し/書き込みの単位とは独立に定められる。
【0004】
例えば、不揮発性半導体メモリのブロックの大きさ(ブロックサイズ)は、512キロバイト、ページの大きさ(ページサイズ)は、4キロバイトであるのに対して、ホスト機器のセクタの大きさ(セクタサイズ)は、512バイトのように定められる。
【0005】
このように、不揮発性半導体メモリの消去/読み出し/書き込みの単位は、ホスト機器の読み出し/書き込みの単位よりも大きい場合がある。
【0006】
ここで、このような不揮発性半導体メモリを用いてハードディスクのようなパーソナルコンピュータの二次記憶装置を構成する場合、ホスト機器としてのパーソナルコンピュータからのセクタサイズのデータは、不揮発性半導体メモリのブロックサイズ、ページサイズに適合させてそれに書き込む必要がある。
【0007】
また、NAND型フラッシュメモリ等のフラッシュメモリは、データの書き込みに先立って行うブロックの消去回数の増加に応じてメモリセルの劣化が進行していく性質を有するため、不揮発性半導体メモリの全てのメモリセルの消去回数が概ね等しくなるように、データ更新箇所を不揮発性半導体メモリ内で均等に分散させるウェアレベリングと呼ばれる処理が行われる。
【0008】
例えば、ホスト機器から指定される二次記憶装置の論理アドレスを、データ更新箇所を示す不揮発性半導体メモリの物理アドレスにアドレス変換することでデータ更新箇所を均等に分散させる。
【0009】
一方で、大容量の二次記憶装置において上記アドレス変換を行う場合、データ管理の単位が小さいサイズ(例えば、ページサイズ)であると、論理アドレスと物理アドレスとの対応表(アドレス変換テーブル、管理テーブル)が大きくなってしまい、二次記憶装置のコントローラの主記憶メモリに納まらなくなり、アドレス変換が高速にできなくなるという問題がある。そのため、二次記憶装置内のデータ管理の単位は、例えば、ブロックサイズ等、ページサイズよりも大きな単位とする必要がある。
【0010】
このような問題を改善するために、データを保存したブロック(データブロック)にログブロックと呼ばれる別のブロックを対応付けて設ける技術が知られている(例えば、特許文献1を参照)。
【0011】
この技術は、データの書き込みをログブロックの空きページに対して行い、ログブロックの空きページがなくなった時またはログブロックエリアが足りなくなった時に、ログブロックに記憶されたデータをデータブロックに反映し、書き込み効率の向上を図るものである。
【0012】
しかし、この技術の問題点は、データブロックとログブロックとが一対一の対応となるために、同時に更新可能なブロック数がログブロック数に限定されることにある。
【0013】
即ち、小さなサイズのデータ書き込みが多数のブロックに対して行われると、ログブロックに空きページが多数ある状況でデータブロックに反映することになり、結果として、書き込み効率が向上しなくなる。
【0014】
また、ブロックの消去回数を抑制するために、ブロックサイズよりも小さな単位であるページサイズ等でデータを管理し、更新されたページサイズのデータを別の消去済みのブロックに追記していく(追加的に書き込んでいく)、といった方式が取られることがある。
【0015】
この場合、更新されたページサイズのデータは、別のブロックに書き込まれるため、元々記憶されていた領域のデータは無効データとなるが、その無効データを含むブロック内に有効データが存在する場合にはそのブロック内のデータを消去して再利用することができない。
【0016】
なぜなら、消去はブロック単位で行う必要があるため、同一のブロック内に有効データが記憶されている場合には、その有効データの消去を防止するため、その有効データを他のブロックに書き直すまではブロック内のデータの消去を行えないからである。
【0017】
このような無効データの存在により、有効データの量よりも多くの不揮発性半導体メモリの記憶領域が必要となる。
【0018】
しかしながら、二次記憶装置内のデータの更新が進むと、無効データの量が増加するため、無効データ及び有効データを含めたデータ容量が大きくなり、これら全てを不揮発性半導体メモリの記憶領域に記憶しきれなくなる場合がある。
【0019】
そこで、無効データを削除する目的で、複数のブロック内の有効データを集めて未使用のブロックに書き直す処理(コンパクション)が行われる(例えば、特許文献2を参照)。
【先行技術文献】
【特許文献】
【0020】
【特許文献1】特開2002−366423号公報
【特許文献2】特開2005−222550号公報
【発明の概要】
【0021】
本発明の例に係わる半導体記憶装置は、半導体記憶装置に対するアクセス単位である第一の単位以下でデータの書き込みを行う半導体記憶素子内に設定される第一の記憶領域と、第二の単位でデータの書き込みを行い、前記第二の単位の二以上の自然数倍である第三の単位でデータの消去を行う不揮発性半導体記憶素子内に設定される第二、第三、及び第四の記憶領域と、複数のデータを前記第一の単位で前記第一の記憶領域に記憶する第一の処理と、前記第一の記憶領域から出力されるデータを、前記第一の単位の二以上の自然数倍かつ前記第三の単位よりも小さい第一の管理単位で前記第四の記憶領域に記憶する第二の処理と、前記第一の記憶領域から出力されるデータを、前記第一の管理単位の二以上の自然数倍である第二の管理単位で前記第三の記憶領域に記憶する第三の処理と、前記第四の記憶領域内の前記第三の単位の領域を選択し、前記選択された領域を前記第二の記憶領域に移動する第四の処理と、前記第四の記憶領域内のデータを選択して前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーし、前記第三の単位の前記領域を前記第二の記憶領域に割り当てる第五の処理と、前記第二の記憶領域内のデータを選択し、前記選択されたデータを前記第二の記憶領域において前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーする第六の処理と、を実行するコントローラとを備える。
【図面の簡単な説明】
【0022】
【図1】第一の基本構成を示す図である。
【図2】第二の基本構成を示す図である。
【図3】キャッシュ管理テーブルを示す図である。
【図4】ページ管理テーブルを示す図である。
【図5】ページ管理テーブルを示す図である。
【図6】ブロック管理テーブルを示す図である。
【図7】物理ブロック管理テーブルを示す図である。
【図8】物理ブロック管理テーブルを示す図である。
【図9】第一の記憶部へのデータ蓄積処理を示すフローチャートである。
【図10】第一の記憶部からのデータ出力処理を示すフローチャートである。
【図11】第一の記憶部からのデータ出力処理を示すフローチャートである。
【図12】第一の記憶部から第二の記憶部へのデータ転送の様子を示す図である。
【図13】第一の記憶部から第三の記憶部へのデータ転送を示す図である。
【図14】第一の記憶部から第三の記憶部へのデータ転送を示す図である。
【図15】第二の記憶部から第三の記憶部へのデータ転送を示すフローチャートである。
【図16】第二の記憶部から第三の記憶部へのデータ転送の条件を示す図である。
【図17】システム例を示す図である。
【図18】システム例を示す図である。
【図19】コンパクションの例を示す図である。
【図20】第一の実施形態の構成を示す図である。
【図21】キャッシュ管理テーブルを示す図である。
【図22】ページ管理テーブルを示す図である。
【図23】ブロック管理テーブルを示す図である。
【図24】ページFIFO管理テーブルを示す図である。
【図25】物理ブロック管理テーブルを示す図である。
【図26】第四の記憶部でのFIFO処理を示すフローチャートである。
【図27】処理P1を示すフローチャートである。
【図28】コンパクションの処理例1を示すフローチャートである。
【図29】コンパクションの処理例2を示すフローチャートである。
【図30】第二の実施形態の構成を示す図である。
【図31】トラック管理テーブルを示す図である。
【図32】トラックFIFO管理テーブルを示す図である。
【図33】物理ブロック管理テーブルを示す図である。
【図34】第五の記憶部でのFIFO処理を示すフローチャートである。
【図35】コンパクションの処理例1を示すフローチャートである。
【図36】コンパクションの処理例2を示すフローチャートである。
【図37】第三の実施形態の構成を示す図である。
【図38】第四の記憶部でのFIFO処理を示すフローチャートである。
【図39】処理P1を示すフローチャートである。
【図40】第四の記憶部の状態を示す図である。
【図41】第二の記憶部から第三の記憶部へのデータ転送処理及びコンパクション処理の例を示すフローチャートである。
【図42】第二の記憶部の状態を示す図である。
【図43】第二の記憶部の状態を示す図である。
【図44】第二の記憶部の状態を示す図である。
【図45】第二の記憶部の状態を示す図である。
【図46】第二の記憶部の状態を示す図である。
【図47】データの管理単位の一例を説明するための図である。
【図48】クラスタ管理テーブルを示す図である。
【図49】第四の記憶部でのFIFO処理を示すフローチャートである。
【図50】SSDの例を示す図である。
【図51】ブロックの構成例を示す図である。
【図52】メモリセルトランジスタの閾値分布を示す図である。
【図53】ドライブ制御回路の構成例を示す図である。
【図54】プロセッサの構成例を示す図である。
【図55】ポータブルコンピュータの例を示す図である。
【図56】ポータブルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【0023】
以下、図面を参照しながら、本発明を実施するための最良の形態について説明する。
【0024】
[I.書き込み効率の向上を実現する半導体記憶装置]
1. 概要
本発明の実施形態に係る半導体記憶装置は、ホスト機器からのセクタ単位の入力データを第一の記憶部に書き込み、ここで、そのデータが「小さな単位(第一の管理単位)」として管理すべきデータか、または、「大きな単位(第二の管理単位)」として管理すべきデータかを識別し、「小さな単位」として管理すべきデータを第二の記憶部に、「大きな単位」として管理すべきデータを第三の記憶部に書き込むことを特徴とする。
【0025】
また、本発明の実施形態に係る半導体記憶装置は、第二の記憶部に書き込まれた「小さな単位」のデータを統合して、一つの「大きな単位」のデータにし、これを第三の記憶部に書き込むことを特徴とする。
【0026】
「大きな単位」は、「小さな単位」の自然数倍の大きさとする。それぞれの「小さな単位」のデータにおいては、複数のセクタ単位のデータが論理アドレス順に連続して配列されている。同様に、それぞれの「大きな単位」のデータにおいては、複数のセクタ単位のデータが論理アドレス順に連続して配列されている。
【0027】
即ち、本実施形態に係る半導体記憶装置は、狭い論理アドレス範囲に属する複数のセクタ単位のデータ(細粒度データ)を「小さな単位」のデータとして第二の記憶部に記憶し、広い論理アドレス範囲に属する複数のセクタ単位のデータ(粗粒度データ)を「大きな単位」のデータとして第三の記憶部に記憶する。
【0028】
また、第二の記憶部に一定量の「小さな単位」のデータが蓄積された時点で、本実施形態に係る半導体記憶装置は、そのデータを「大きな単位」のデータに統合し、この「大きな単位」のデータを第三の記憶部に記憶する(デフラグメンテーション)。
【0029】
例えば、「小さな単位」、「大きな単位」の大きさが、NAND型フラッシュメモリのページサイズ、ブロックサイズとそれぞれ等しい場合を考える。即ち、第一の記憶部にセクタ単位(第一の単位)のデータを書き込み、第二の記憶部にページ単位(第二の単位)のデータを書き込み、第三の記憶部にブロック単位(第三の単位)のデータを書き込む場合を考える。
【0030】
この場合、ホスト機器から半導体記憶装置に入力されるセクタサイズのデータは、最初に、第一の記憶部に書き込まれる。第一の記憶部に書き込まれたデータは、そのデータ数またはデータ量に基づいて、第二の記憶部に書き込むか、または、第三の記憶部に書き込むかが決定される。
【0031】
即ち、第一の記憶部に書き込まれたデータが第一の条件を満たす場合は、そのデータは「大きな単位」として管理され、第三の記憶部の各ブロックにブロック単位のデータとして記憶する。この場合、書き込みに伴ってブロック単位のデータを消去しても書き込み効率は悪くならない。
【0032】
一方、第一の記憶部に書き込まれたデータが第一の条件を満たさない場合は、そのデータは「小さな単位」として管理され、第二の記憶部の各ページにページ単位のデータとして記憶する。この場合、ページ単位のデータの追記を行うことで、ブロック単位のデータの消去を減らすことができる。
【0033】
第二の記憶部に書き込まれたページ単位に等しい「小さな単位」のデータは、更に、第二の条件に基づいて選択され、第二の条件に基づいて選択されたデータを含む複数のデータを統合して「大きな単位」のデータとし、これを第三の記憶部の各ブロックにブロック単位のデータとして記憶する。
【0034】
第一の条件は、例えば、データ数により規定される。
【0035】
即ち、第一の記憶部に蓄積されたデータの数が所定の閾値に達する場合にはそのデータを第三の記憶部に転送し、第一の記憶部に蓄積されたデータの数が所定の閾値に達しない場合にはそのデータを第二の記憶部に転送する。
【0036】
また、これに代えて、第一及び第二の記憶部に蓄積されたデータの合計数が所定の閾値に達するか否かを判定してもよい。即ち、その合計数が所定の閾値に達する場合にはそのデータを第三の記憶部に転送し、その合計数が所定の閾値に達しない場合にはそのデータを第二の記憶部に転送する。
【0037】
第二の条件は、例えば、書き込み順序または有効データ数により規定される。
【0038】
前者の場合、第二の記憶部に割り当てられた各ブロックから検出された、書き込み順序が最も古いブロック内のデータから順次選択し、選択されたデータを第三の記憶部に転送する。
【0039】
後者の場合、第二の記憶部に割り当てられた各ブロックについて、ブロック内の有効なページ単位のデータの論理アドレスをブロック単位のサイズにアラインした論理アドレス範囲内に、いくつのページ単位の有効データが第二の記憶部に記憶されているかを合計し、その合計値が最大であるブロック内の有効データを第三の記憶部に転送する。
【0040】
尚、「論理アドレスを所定サイズ(ページ単位のサイズ、ブロック単位のサイズ等)にアラインする」とは、論理アドレスを所定サイズで割り算した時の剰余が0になるアドレスに切り下げることを意味する。例えば論理アドレスAをサイズSにアラインしたアドレスは、(A−(AをSで割った余り))となる。同様に、「所定サイズにアラインされた論理アドレス範囲」とは、論理アドレスを所定サイズにアラインしたアドレスから所定サイズ分の範囲を意味する。
【0041】
本実施形態に係る半導体記憶装置によれば、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止することができる。
【0042】
特に、本実施形態の効果は、消去/読み出し/書き込みの単位が固定される不揮発性半導体記憶素子(例えば、NAND型フラッシュメモリ)で半導体記憶装置を構成し、パーソナルコンピュータ等の二次記憶装置(SSD: Solid State Drive)として使用した場合に最も顕著に表われる。
【0043】
このような半導体記憶装置は、大容量化の傾向にあり、また、大容量化が複数ビットを一つのメモリセルに記憶させるMLC(Multi Level Cell)技術により実現されるような場合には、実効的な書き込み速度を維持するために、消去/読み出し/書き込みの単位が大きくなる傾向があるからである。
【0044】
また、パーソナルコンピュータ等は「小さな単位」で二次記憶装置上のデータを更新する場合が多く、これをブロック等の「大きな単位」のみで管理すると、更新データ量に対するデータ消去量が大きくなり、書き込み効率が低下し、メモリセルの劣化が早まるからである。
【0045】
本実施形態のように、ホスト機器からの入力データを「小さな単位」と「大きな単位」とに分けて、それぞれを異なる記憶部に書き込めば、そのような問題が発生する可能性を低減させることが可能となる。
【0046】
即ち、半導体記憶装置内部で「小さな単位」と「大きな単位」という二つの管理単位を併用することで、ホスト機器からの書き込みデータ量に対して不揮発性半導体記憶素子のデータ消去量を最適化し、書き込み効率の向上を実現する。
【0047】
2. 実施形態
本発明の実施形態について説明する。
【0048】
まず、本実施形態に関連する概念として書き込み効率について述べる。
【0049】
NAND型フラッシュメモリ等のフラッシュメモリのメモリセルの劣化に関しては、ホスト機器側からの書き込みデータ量に対して必要なフラッシュメモリのブロック単位のデータの消去量が重要なファクターとなる。
【0050】
本実施形態では、このデータ消去量のことを「書き込み効率の値」と呼ぶことにする。
【0051】
書き込みデータ量に対するブロック単位のデータの消去量が小さければ、書き込み効率の値が小さくなり相対的にメモリセルの劣化の進行が遅くなる。これを、書き込み効率が良くなるとする。逆に、ブロック単位のデータの消去量が大きければ、書き込み効率の値が大きくなる。これを、書き込み効率が悪くなるとする。
【0052】
つまり、フラッシュメモリのメモリセルの劣化を防ぐためには、ブロック単位のデータの消去量を小さくし、書き込み効率を良くすることが重要になる。
【0053】
フラッシュメモリを用いた半導体記憶装置において書き込み効率が悪くなる例を示す。
【0054】
この例では、フラッシュメモリのブロック単位のサイズを512キロバイト、ページ単位のサイズを4キロバイト、ホスト機器のセクタ単位のサイズを512バイト、データ管理の単位をブロック単位と同じ512キロバイトと仮定する。
【0055】
ここで、ブロック単位と同じ大きさのデータXがフラッシュメモリに記憶されている状態で、論理アドレスがデータXの論理アドレスの範囲に含まれる1セクタの大きさのデータYが更新された時の処理を考える。
【0056】
データXは、フラッシュメモリのブロックB1内の全体に記憶されているとする。
【0057】
まず、ブロックB1からデータXを一時保存エリアに読み出し、データXの一部についてホスト機器からのデータYの更新を行い、最新データを作成する。そして、ブロックB1とは異なるブロックB2のデータを消去し、ブロックB2内に最新データを書き込む。
【0058】
この処理では、上述のように、512バイトのデータYを書き込むために、512キロバイトのデータXをブロックB1から読み出し、更に、最新データをブロックB2に書き込むために、ブロックB2内の512キロバイトのデータを消去する必要がある。
【0059】
従って、ホスト機器からの書き込みデータ量に対して、フラッシュメモリ内での消去量が大きく、書き込み効率が非常に悪い。
【0060】
この例での書き込み効率の値は、512キロバイト/512バイト=1024となる。
【0061】
通常、NAND型フラッシュメモリでは、ブロックの消去処理及び書き込み処理に多くの時間を費やすため、書き込み効率が悪いということは、ホスト機器からのデータ書き込み量に対して、ブロック単位のデータの消去や、データを消去したブロックへの書き込みが多いことを表し、フラッシュメモリの速度性能を悪くすることを同時に意味する。
【0062】
(1) 基本構成
図1は、本実施形態に係る半導体記憶装置の第一の基本構成を示している。
【0063】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶しておくもので、そのデータは、セクタ単位(第一の単位)ごとに第一の記憶部11に書き込まれる。第一の記憶部11は、例えば、DRAM(Dynamic Random Access Memory)等の揮発性半導体記憶素子から構成される。
【0064】
第一の記憶部11を構成する揮発性半導体記憶素子内における読出し/書き込みの物理的な単位は、セクタ単位以下であるとする。ホスト機器は、セクタ単位の論理アドレスを用いて半導体記憶装置に対するアクセスを行う(LBA:Logical Block Addressing)ため、第一の記憶部11は、セクタ単位で入力データの管理を行う。
【0065】
第二の記憶部12は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子の複数のブロックから構成される。第三の記憶部13は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子の複数のブロックから構成される。
【0066】
第二及び第三の記憶部12,13は、それぞれ別々の不揮発性半導体記憶素子(メモリチップ)から構成される。それぞれのメモリチップは互いに異なる性能を備えていても良く、例えば、互いに異なる書き込み速度、互いに異なる記憶容量を備えていても良い。例えば、第二の記憶部12がSLC(Single Level Cell)技術を用いたNAND型フラッシュメモリから構成され、第三の記憶部13がMLC(Multi Level Cell)技術を用いたNAND型フラッシュメモリから構成されていても良い。
【0067】
不揮発性半導体記憶素子内において、一括して読出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。
【0068】
一つのブロックは、複数のページから構成されている。また、本実施形態に係る不揮発性半導体記憶素子は、同一のページに対する再書き込みは、そのページを含むブロック全体を消去した後でなければ不可能であるという性質を有している。
【0069】
従って、更新データ(新データ)がホスト装置から入力された場合、ブロック内に元々記憶されていた、新データと同一の論理アドレスを有する旧データは、無効データとして取り扱われる。新データは、旧データに対して優先度が高い有効データとして取り扱われ、旧データは、新データを参照することにより無視される無効データとして取り扱われる。
【0070】
以下、簡略化のため、半導体記憶装置内部でのデータの管理単位である「小さな単位(第一の管理単位)」の大きさがページ単位のサイズ(1ページに記憶可能なデータ量)と等しく、「大きな単位(第二の管理単位)」の大きさがブロック単位のサイズ(1ブロックに記憶可能なデータ量)と等しい場合について説明する。「小さな単位」はセクタの自然数倍の大きさの単位とする。
【0071】
尚、データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC:Error Checking/Correcting Code、内部制御用フラグ等)が含まれないものとする。
【0072】
通常、NAND型フラッシュメモリ等の不揮発性半導体記憶素子を含むシステムでは、主データに対して冗長データが付加された状態で読み出し、書き込みが行われるが、簡略化のため、上述のように定義する。
【0073】
第二の記憶部12は、第一の記憶部11から転送されるデータを、ページ単位に等しい「小さな単位」ごとに記憶する。第三の記憶部13は、第一の記憶部11または第二の記憶部12から転送されるデータを、ブロック単位に等しい「大きな単位」ごとに記憶する。
【0074】
第二の記憶部12の容量は、一部の「小さな単位」で更新されたデータのみを管理すればよいため、第三の記憶部13の容量よりも小さくて構わない。
【0075】
以下の説明では、一つのブロック単位のデータは、一つのブロック内の全体に記憶されるものとし、一つのページ単位のデータは、一つのページ内の全体に記憶されるものとする。それぞれのブロックは複数のページによって構成され、複数のページ単位のデータが1つのブロックに記憶されるものとする。
【0076】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態においてコントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、またはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれるものである。
【0077】
コントローラ10は、論理アドレスでアクセスされるデータが第一乃至第三の記憶部11,12,13の何処に記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル及び物理ブロック管理テーブルを主記憶メモリ内に備える。
【0078】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0079】
図2は、本実施形態に係る半導体記憶装置の第二の基本構成を示している。
【0080】
第二の基本構成は、図1の第一の基本構成と比べると、以下の点が相違している。
【0081】
第二及び第三の記憶部12,13は、不揮発性半導体記憶素子22内に配置される。第一の記憶部11を構成する揮発性半導体記憶素子は、例えばDRAMとし、第二及び第三の記憶部12,13を構成する不揮発性半導体記憶素子22は、例えばNAND型フラッシュメモリとする。
【0082】
第二及び第三の記憶部12,13は、不揮発性半導体記憶素子22内の記憶領域を共有して形成され、コントローラ10が不揮発性半導体記憶素子22内のブロックを第二の記憶部12、または、第三の記憶部13に割り当てる。第二及び第三の記憶部12,13に対するブロックの割り当ては固定的ではなく、コントローラ10の制御下で動的に変更される。第二及び第三の記憶部12,13は、複数の不揮発性半導体記憶素子(メモリチップ)に亘って形成されていても良い。コントローラ10は、複数の不揮発性半導体記憶素子内の全ブロックを抽象的に1つの記憶領域として取り扱っても良い。
【0083】
コントローラ10は、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、及び物理ブロック管理テーブルを主記憶メモリ内に備える。
【0084】
図1及び図2において、半導体記憶装置への電源供給がない状態では、これらの管理テーブルは不揮発性半導体記憶素子内に保持されている。コントローラ10は、電源供給時に各管理テーブルを主記憶メモリに展開し、ホスト機器から指定される論理アドレス空間と、不揮発性半導体記憶素子上での物理的なデータ記憶位置とを対応させるためのアドレス変換を行う。
【0085】
・ キャッシュ管理テーブル
図3は、キャッシュ管理テーブルの構成例を示している。
【0086】
キャッシュ管理テーブルは、図1及び図2の第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【0087】
第一の記憶部11の1ページ単位の領域一つに対して1エントリとする。
【0088】
エントリ数は、第一の記憶部11に収まるページ単位のデータ数、即ち、(第一の記憶部11の全容量)/(ページ単位のサイズ)以下とする。
【0089】
各エントリには、ページ単位のデータの論理アドレス、第一の記憶部11の物理アドレス、及び、対応するページ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【0090】
各エントリに対応付けて、データを一時的に記憶するためのページ単位の領域を第一の記憶部11内に用意し、その領域の物理アドレスを各エントリに格納する。ページ単位の領域が連続的に配置されている等、エントリに対応する領域の物理アドレスが固定的であれば、物理アドレスをエントリ内に格納する必要はない。
【0091】
キャッシュ管理テーブルにおいて、第一の記憶部11の各ページ単位の領域は、更にセクタ単位の領域に分割され、各セクタ単位の領域内のデータの状態を、セクタフラグの値を「有」または「無」にすることで示す。
【0092】
セクタフラグが「有」の領域には、ホスト機器からの有効データが記憶されている。これに対し、セクタフラグが「無」の領域には、ホストから書き込まれた最新のデータが記憶されておらず、無効な領域となる。また、エントリ内の全てのセクタフラグが「無」のエントリは、未使用のエントリとみなす。
【0093】
尚、上記キャッシュ管理テーブルの構成は、各エントリに論理アドレスを割り当てるフルアソシアティブと呼ばれる管理方法を元にしているが、n−wayセットアソシアティブ等の方法で、第一の記憶部11における論理アドレスと物理アドレスの対応を管理してもよい。
【0094】
・ ページ管理テーブル
図4は、ページ管理テーブルの構成例を示している。
【0095】
ページ管理テーブルは、図1及び図2の第二の記憶部12に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0096】
第二の記憶部12の1ページ単位の領域一つに対して1エントリとする。
【0097】
エントリ数は、第二の記憶部12に収まるページ単位のデータ数、即ち、(第二の記憶部12の全容量)/(ページ単位のサイズ)以下とする。
【0098】
各エントリには、ページ単位のデータの論理アドレスと第二の記憶部12の物理アドレスとが関連付けられている。
【0099】
例えば、論理アドレスAの1ページ単位分のデータは、物理アドレスAにより指定される第二の記憶部12のブロック0の1番目のページに記憶され、論理アドレスCの1ページ単位分のデータは、物理アドレスCにより指定される第二の記憶部12のブロック1の2番目のページに記憶される。無効なエントリは、エントリの有効・無効を示すフラグを用意する、無効な論理アドレスや物理アドレスをエントリに記憶する等の手段で表現する。
【0100】
図5は、ページ管理テーブルの別の例を示している。図5におけるページ管理テーブルについては、後述する。
【0101】
・ ブロック管理テーブル
図6は、ブロック管理テーブルの構成例を示している。
【0102】
ブロック管理テーブルは、図1及び図2の第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【0103】
第三の記憶部13の1ブロック単位の領域一つに対して1エントリとする。
【0104】
エントリ数は、第三の記憶部13に収まるブロック単位のデータ数、即ち、(第三の記憶部13の全容量)/(ブロック単位のサイズ)以下とする。
【0105】
各エントリは論理アドレス順に配列されている。ブロック単位のデータの論理アドレスに対応して、第三の記憶部13内のブロックを指定する物理アドレスが、各エントリに関連付けられている。無効なエントリは、エントリの有効・無効を示すフラグを用意する、無効な物理アドレスをエントリに記憶する等の手段で表現する。
【0106】
・ 物理ブロック管理テーブル
図7及び図8は、物理ブロック管理テーブルの構成例を示している。
【0107】
図7の物理ブロック管理テーブルは、第一の基本構成に使用され、図1の第二の記憶部12及び第三の記憶部13のブロックの使用状況(使用/未使用)を管理する。第二の記憶部12の物理ブロック管理テーブルには、図7(a)に示すように、空き状況へのポインタが記憶され、ブロック内のページの空き状況も管理する。
【0108】
また、図7(b)に示すように、記憶領域の節約のため、第三の記憶部13の物理ブロック管理テーブルについては、ページの空き状況を管理しない。
【0109】
図8の物理ブロック管理テーブルは、第二の基本構成に使用され、図2の不揮発性半導体記憶素子22内の各々の記憶領域(ブロック)を、第二の記憶部12として使用するか、第三の記憶部13として使用するか、または、未使用(内部に有効データが存在しない)か、を管理する。記憶領域が第二の記憶部12として使用される場合、物理ブロック管理テーブルは、ページの空き状況を関連付けて管理する。
【0110】
第二及び第三の記憶部12,13の1ブロック(物理ブロック)に対して1エントリとする。
【0111】
エントリ数は、データエリアとして使用可能なブロック数以下とする。
【0112】
各エントリには、物理アドレスと、それにより指定されるブロックの使用状況を記憶し、第二の記憶部12に使用されるブロックについては、ページの空き状況を管理する。
【0113】
また、ページの空き状況として、各ページについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0114】
各々のページに対するデータ書き込み順序について、不揮発性半導体記憶素子が、ページへの書き込みを物理アドレス昇順での追記しか行えない場合には、ブロック内においてデータの追記が可能な空きページ位置を記憶することでページの空き状況を管理する。
【0115】
第二の記憶部12としてのブロック内のページの空き状況としては、例えば、ブロック内の空きページを管理する、図4に示すデータ構造が採用され得る。
【0116】
本実施形態では、ページの空き状況を物理ブロック管理テーブルに記憶しているが、図5に示すように、ページ管理テーブルを、第二の記憶部12で使用する物理ブロック単位に分割し、論理アドレスとページの空き状況を同時に記憶することによって、ブロック内のページの空き状況をページ管理テーブルに記憶してもよい。
【0117】
以上の説明では、簡略化のため、第二の記憶部12におけるデータの記憶の単位(「小さな単位(第一の管理単位)」)をページ単位とし、第三の記憶部13におけるデータの記憶の単位(「大きな単位(第二の管理単位)」)をブロック単位としているが、管理単位の設定はこれに限られない。
【0118】
重要な点は、ハードディスクドライブ(磁気ディスク装置)の代替品として二次記憶装置を構成するNAND型フラッシュメモリ等の不揮発性半導体記憶素子では、消去/読み出し/書き込みの単位が固定されている、ということにある。
【0119】
例えば、ページを分割して管理して、第二の記憶部12で使用される「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0120】
或いは、複数のページを合わせて管理して、第二の記憶部12で使用される「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0121】
同様に、ブロックを分割して管理して、第三の記憶部13で使用される「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0122】
或いは、複数のブロックを合わせて管理して、第三の記憶部13で使用される「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしてもよい。
【0123】
第二及び第三の記憶部12,13における消去の単位は、同じ(例えば、ブロックサイズ)でもよいし、また、複数のブロックを同時に消去する等、異なっていてもよい。
【0124】
(2) 処理方法
図1及び図2のコントローラ10が行う処理について説明する。
【0125】
A. 第一の記憶部へのデータ蓄積処理
図9は、第一の記憶部11へのデータ蓄積処理を示している。
【0126】
ホスト機器からの入力データは、最初に第一の記憶部11に書き込まれ、かつ、そのデータは、第一の記憶部11に一定期間蓄積される。この時、図3のキャッシュ管理テーブルが更新される。
【0127】
1. コントローラ10は、入力データの論理アドレスを、ページ単位に等しい「小さな単位」のサイズでアラインする(ステップST1)。
【0128】
2. コントローラ10は、ページ単位のサイズでアラインされた論理アドレス範囲に対応するエントリを、キャッシュ管理テーブルから検索する(ステップST2)。
【0129】
3. コントローラ10は、第一の記憶部11内に対応するエントリが存在するか否かを判断する(ステップST3)。第一の記憶部11内に対応するエントリが存在する場合、コントローラ10はこのエントリを選択し、処理はステップST8に進む。第一の記憶部11内に対応するエントリが存在しない場合、処理はステップST4に進む。
【0130】
4. コントローラ10は、キャッシュ管理テーブル内を検索し、未使用のエントリが存在するか否かを判断する(ステップST4)。未使用のエントリが検出された場合、処理はステップST6に進む。未使用のエントリが検出されない場合、処理はステップST5に進む。
【0131】
5. コントローラ10は、次に説明する「第一の記憶部からのデータ出力処理」を実行する。これにより、データは第一の記憶部11から第二の記憶部12及び第三の記憶部13に出力される。(ステップST5)。
【0132】
その結果、出力されたデータに対応するキャッシュ管理テーブル内のエントリは未使用として設定される。同時に、このエントリ内のセクタフラグは、全て「無」として設定される。これらの設定を終えた後、処理はステップST4に戻る。
【0133】
6. コントローラ10は、ホスト機器からの入力データのために、未使用のエントリを選択する(ステップST6)。
【0134】
7. コントローラ10は、入力データの論理アドレスをページ単位のサイズにアラインすることで得られた論理アドレスを、選択されたエントリに設定する(ステップST7)。即ち、コントローラ10は、選択されたエントリを、入力データに対応するエントリとする。
【0135】
8. コントローラ10は、入力データの論理アドレスと、選択したエントリの論理アドレス及び物理アドレスから、データを書き込むための物理アドレスを決定する。コントローラ10は、その物理アドレスが指定する記憶領域に入力データを書き込む指示を、第一の記憶部11を含む不揮発性半導体記憶素子に対して与える(ステップST8)。
【0136】
更に、コントローラ10は、ページ単位の領域内でデータが書き込まれた位置に対応するセクタフラグを、「有」として設定する。
【0137】
ホスト機器からの入力データがページサイズよりも大きい等の理由で、キャッシュ管理テーブルの複数のエントリを必要とする場合もあるが、その場合、コントローラ10は、上記処理の繰り返しによって複数のエントリを更新する。
【0138】
B. 第一の記憶部からのデータ出力処理
図10及び図11を参照しつつ第一の記憶部11からのデータ出力処理について説明する。
【0139】
コントローラ10は、第一の記憶部11からの出力候補となるページ単位のデータを選択し、第一の条件に従って、そのデータを第二の記憶部12または第三の記憶部13に転送する。第一の条件は、例えば、データ数により規定される。
【0140】
具体的には、コントローラ10が下記の処理a.または処理b.を実行する。
【0141】
a. コントローラ10は、第一の記憶部11内のデータを数え、そのデータをブロック単位に等しい「大きな単位」で管理するか、または、ページ単位に等しい「小さな単位」で管理するかを決定する。
【0142】
1. コントローラ10は、出力候補となるページ単位(「小さな単位」)のデータの論理アドレスLAを、ブロック単位(「大きな単位」)のサイズでアラインする(ステップST1)。
【0143】
2. コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれるエントリ数を、図3のキャッシュ管理テーブルを検索することによって数え上げる(ステップST2)。
【0144】
例えば、図12の例によれば、ブロック単位のサイズでアラインされた論理アドレス範囲X内に含まれるエントリ数は、LA1,LA4,LA6の3つとなる。
【0145】
3. コントローラ10は、エントリ数が所定の閾値以上であるか否かを判断する。所定の閾値は、例えば、一つのブロック単位(「大きな単位」)の領域内に収まるページ単位(「小さな単位」)のデータ総数の50%として設定しても良い(ステップST3)。
【0146】
エントリ数が所定の閾値未満である場合、コントローラ10は、その論理アドレス範囲内に含まれる個々のデータを、ページ単位に等しい「小さな単位」のデータとして、第二の記憶部12に転送する。
【0147】
エントリ数が所定の閾値以上である場合、コントローラ10は、その論理アドレス範囲内に含まれる複数のデータを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する。
【0148】
・「小さな単位」の場合(図10のフローチャート及び図12を参照)
コントローラ10は、第一の記憶部11からの出力候補となるデータを選択し、選択されたデータを、第二の記憶部12にページ単位のデータとして転送する。図10のステップST4以降を参照する。
【0149】
ここでは、第一の記憶部11から一つのページ単位のデータが転送される場合の処理について説明する。複数のページ単位のデータが転送される場合は、下記の処理が繰り返される。
【0150】
4. コントローラ10は、図4のページ管理テーブルを検索し、第一の記憶部11から転送されてくる書き込みデータと同じ論理アドレスLAを持つエントリが存在するか否かを判断する(ステップST4)。
【0151】
そのようなエントリが検出された場合、コントローラ10はこのエントリを選択し、処理はステップST9に進む。そのようなエントリが検出されなかった場合、処理はステップST5に進む。
【0152】
5. コントローラ10は、ページ管理テーブルに未使用のエントリが存在するか否かを判断する(ステップST5)。
【0153】
未使用のエントリが検出された場合、処理はステップST7に進む。未使用のエントリが検出されなかった場合、処理はステップST6に進む。
【0154】
6. コントローラ10は、「第二の記憶部から第三の記憶部へのデータ転送処理」を実行する(ステップST6)。その結果、出力されたデータに対応するエントリは、未使用として設定される。コントローラ10は、利用可能な未使用のエントリを確保し、処理はステップST5に戻る。
【0155】
7. コントローラ10は、未使用のエントリを、書き込みデータの行き先として選択する(ステップST7)。
【0156】
8. コントローラ10は、選択されたエントリに、ページ単位の書き込みデータの論理アドレスを設定する(ステップST8)。選択されたエントリは、書き込みデータに対応するエントリとして取り扱われることになる。
【0157】
9. コントローラ10は、選択されたエントリ内における書き込み位置を決定する(ステップST9)。書き込み位置の決定について、以下詳細に説明する。
【0158】
9−1. コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、第二の記憶部12内で使用されている、書き込み可能な状態の空きページを有するブロックを選択する。そのようなブロックが検出された場合、コントローラ10は、書き込みデータの行き先として、そのブロック内の空きページを選択する(ステップST9−1)。
【0159】
ページ単位でのデータの書き込みにおいて、第二の記憶部12を構成する不揮発性半導体記憶素子が、ページへの書き込みを物理アドレス昇順での追記しか行えない場合、コントローラ10は、データの追記が可能な空きページを選択する。
【0160】
第二の記憶部12内で使用されているブロック中に空きページが検出された場合、処理はステップST10に進む。第二の記憶部12内で使用されているブロック中に空きページが検出されなかった場合、処理はステップST9−2に進む。
【0161】
9−2. コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、未使用のブロックが存在するか否かを判断する(ステップST9−2)。未使用のブロックが検出された場合、処理はステップST9−4に進む。未使用のブロックが検出されなかった場合、処理はステップST9−3に進む。
【0162】
9−3. コントローラ10は、「第二の記憶部から第三の記憶部へのデータ転送処理」を行い、未使用のブロックを生成する(ステップST9−3)。未使用のブロックを生成した後、処理はステップST9−2に戻る。
【0163】
9−4. コントローラ10は、第二の記憶部12用に未使用のブロックを取得する(ステップST9−4)。
【0164】
9−5. コントローラ10は、取得した未使用のブロックに対応する図7または図8の物理ブロック管理テーブルのエントリを、「第二の記憶部12(使用)」に更新する。第二の基本構成(図8)の場合、コントローラ10は、ページの空き状況を記憶する領域を確保し、その領域をエントリに関連付ける(ステップST9−5)。
【0165】
9−6. コントローラ10は、取得した未使用のブロック内のデータを消去する指示を不揮発性半導体記憶素子に対して与え、ページの空き状況をすべて「書き込み可能」な状態に更新する。コントローラ10は、ブロック内の空きページの一つを、書き込みデータの行き先として選択する(ステップST9−6)。
【0166】
以上により、書き込み位置の決定処理を完了する。
【0167】
10. コントローラ10は、ページ単位のデータを構成するセクタ単位のデータ全てが、第一の記憶部11に存在するか否かを判断する(ステップST10)。
【0168】
コントローラ10は、図3のキャッシュ管理テーブル中の、書き込みデータに対応するエントリのセクタフラグを走査する。セクタフラグが全て「有」の場合、処理はステップST12に進む。セクタフラグに一つでも「無」がある場合、処理はステップST11に進む。
【0169】
11. セクタフラグに一つでも「無」がある場合、セクタ単位のデータが第一の記憶部11に揃っていないことを表す。コントローラ10は、セクタフラグ「無」のセクタ位置に対応する不足データを、第二の記憶部12及び第三の記憶部13の少なくとも一方から読み出す(ステップST11)。
【0170】
コントローラ10は、第二の記憶部12からの不足データの読み出しを試みる。
【0171】
コントローラ10は、セクタ単位のデータの論理アドレスをページ単位のサイズでアラインし、アラインされた論理アドレスをもってページ管理テーブルを検索する。
【0172】
エントリが検出された場合、コントローラ10は、エントリに記録されている物理アドレスに対応するページ単位のデータに含まれる不足データを読み出す。エントリが検出されなかった場合、コントローラ10は、第三の記憶部13からの不足データの読み出しを試みる。
【0173】
コントローラ10は、セクタ単位のデータの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレスをもってブロック管理テーブルを検索する。
【0174】
エントリが検出された場合、コントローラ10は、エントリに記録されている物理アドレスに対応するブロック単位のデータに含まれる不足データを読み出す。
【0175】
第二の記憶部12、または、第三の記憶部13から読み出された不足データは、第一の記憶部11の作業領域、または、コントローラ10の主記憶メモリ等に一時的に記憶されるが、特にこれに限定されることはない。
【0176】
12. ページ単位のデータを構成する全てのセクタ単位のデータを揃えた後、コントローラ10は、そのページ単位のデータを第二の記憶部12内で書き込みデータの行き先として選択された空きページに書き込む指示を、不揮発性半導体記憶素子に与える。コントローラ10は、物理ブロック管理テーブルの対応するページの空き状況を、「書き込み済み」(記憶領域が有効データで満たされている)である状態に更新する(ステップST12)。
【0177】
ページ単位のデータを書き込んだ後、コントローラ10は、ページ管理テーブルの選択されたエントリに、書き込みデータの論理アドレスと、書き込みデータの行き先であるページの物理アドレスとを登録する。
【0178】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ10は、その物理アドレスを上書きする。古い物理アドレスが指し示すページに記憶されていた旧データは、無効データとなる。
【0179】
13. コントローラ10は、図3のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される(ステップST13)。
【0180】
続いて、コントローラ10は、図7または図8の物理ブロック管理テーブルと、図4のページ管理テーブルとを走査し、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【0181】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ページ管理テーブルではそのブロック内のページを指し示す物理アドレスが存在しないブロックに対応するエントリが、「未使用」として設定される。図8の構成の場合は、ページの空き状況を記憶する領域が解放される。
【0182】
・「大きな単位」の場合(図11のフローチャート、図13、及び図14を参照)
コントローラ10は、第一の記憶部11からの出力候補となるデータを選択し、選択されたデータを、第三の記憶部13にブロック単位のデータとして転送する。図11のステップST4’以降を参照する。
【0183】
4’ コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、未使用のブロックを取得する。コントローラ10は、確保された未使用のブロックを、第三の記憶部13に割り当てる(ステップST4’)。
【0184】
コントローラ10は、物理ブロック管理テーブルの確保された未使用のブロックに対応するエントリを「第三の記憶部13(使用)」に更新し、確保された未使用のブロック内のデータを消去する指示を、不揮発性半導体記憶素子に与える。
【0185】
「大きな単位」のサイズがブロック単位のサイズ未満である場合、コントローラ10は、第三の記憶部13内で使用されており、「書き込み可能」な状態の「大きな単位」の空き領域を有するブロックを、「小さな単位」の場合と同様に選択しても良い。
【0186】
5’ コントローラ10は、ブロック単位のデータを構成するセクタ単位のデータ全てが、第一の記憶部11に存在するか否かを判断する(ステップST5’)。
【0187】
具体的には、コントローラ10は、図3のキャッシュ管理テーブルが、ブロック単位のサイズの論理アドレス範囲内に含まれるページ単位のデータに対応する全てのエントリを含むか否かを判断し、同時に、これらのエントリのセクタフラグが全て「有」であるか否かを判断する。
【0188】
ブロック単位のデータを構成するセクタ単位のデータが全て第一の記憶領域11に揃っている場合、処理はステップST7’に進む。論理アドレス範囲内に含まれるページ単位のデータに対応するエントリが一つでも検出されない場合、及び、セクタフラグが一つでも「無」である場合の少なくとも一方が成立するならば、処理はステップST6’に進む。
【0189】
6’ コントローラ10は、キャッシュ管理テーブルに含まれないページ位置、及びセクタフラグが「無」であるセクタ位置に対応する不足データを、第二の記憶部12及び第三の記憶部13の少なくとも一方から読み出す(ステップST6’)。
【0190】
コントローラ10は、図13に示すように、第二の記憶部12からの不足データの読み出しを試みる。
【0191】
コントローラ10は、セクタ単位のデータの論理アドレスをページ単位のサイズでアラインし、アラインされた論理アドレスをもってページ管理テーブルを検索する。
【0192】
エントリが検出された場合、コントローラ10は、エントリに記録されている物理アドレスに対応するページ単位のデータに含まれる不足データを読み出す。
【0193】
エントリが検出されなかった場合、コントローラ10は、図14に示すように、第三の記憶部13からの不足データの読み出しを試みる。
【0194】
コントローラ10は、セクタ単位のデータの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレスをもってブロック管理テーブルを検索する。コントローラ10は、エントリに記録されている物理アドレスに対応するブロック単位のデータに含まれる不足データを読み出す。
【0195】
第二の記憶部12、または、第三の記憶部13から読み出された不足データは、第一の記憶部11の作業領域、または、コントローラ10の主記憶メモリ等に一時的に記憶されるが、これらに特に限定されることはない。
【0196】
7’ ブロック単位のデータを構成する全てのセクタ単位のデータを揃えた後、コントローラ10は、そのブロック単位のデータを第三の記憶部13内で書き込みデータの行き先として選択された空きブロックに書き込む指示を、不揮発性半導体記憶素子に与える(ステップST7’)。
【0197】
ブロック単位のデータを書き込んだ後、コントローラ10は、そのブロック単位のデータの論理アドレス範囲に対応するブロック管理テーブルのエントリに、書き込みデータの行き先であるブロックの物理アドレスを登録する。
【0198】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ10は、その物理アドレスに対して上書きする。古い物理アドレスが指し示すブロックに記憶されていた旧データは、無効データとなる。
【0199】
8’ コントローラ10は、図3のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される(ステップST8’)。
【0200】
続いて、コントローラ10は、図7または図8の物理ブロック管理テーブルと図6のブロック管理テーブルとを走査し、内部のブロック単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【0201】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ブロック管理テーブルではそのブロックを指し示す物理アドレスが存在しないブロックに対応する物理ブロック管理テーブルのエントリが、「未使用」として設定される。
【0202】
同様に、ブロック単位のサイズを有する書き込みデータの論理アドレス範囲に含まれる論理アドレスに対応するエントリが、図4または図5のページ管理テーブルに存在する場合、そのエントリが無効化される。これは、第二の記憶部12に記憶されていたデータの第三の記憶部13への転送に基づいて、第二の記憶部12に記憶されていたデータが参照されないように無効化する処理である。
【0203】
更に、第二の記憶部12について、コントローラ10は、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定する。図8の構成の場合は、ページの空き状況を記憶する領域が解放される。
【0204】
b. コントローラ10は、第一及び第二の記憶部11,12内のデータを数え、そのデータをブロック単位に等しい「大きな単位」で管理するか、または、ページ単位に等しい「小さな単位」で管理するかを決定する。
【0205】
この場合、コントローラ10は、図3のキャッシュ管理テーブル、及び、図4または図5のページ管理テーブルを検索し、出力候補となるデータの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲に含まれるエントリ数を、第一及び第二の記憶部11,12について数え上げ合計する。
【0206】
エントリ数の合計が所定の閾値、例えば、一つのブロック単位(「大きな単位」)の領域内に収まるページ単位(「小さな単位」)のデータ総数の50%以上である場合、出力候補のデータは「大きな単位」で管理され、エントリ数の合計が所定の閾値未満である場合、出力候補のデータは「小さな単位」で管理される(ステップST1→ステップST2→ステップST3)。
【0207】
・「小さな単位」の場合(図10のフローチャート参照)
コントローラ10は、第一の記憶部11から出力されたデータを、上述のa.の場合と同様に、ページ単位のデータとして第二の記憶部12に記憶する。第一の記憶部11から出力されたデータを第二の記憶部12に書き込んだ後、上述のa.の場合と同様に、図3のキャッシュ管理テーブルを更新し、書き込みデータに対応するエントリを無効化する。更に、図4または図5のページ管理テーブル、及び、図7または図8の物理ブロック管理テーブルを更新する(ステップST4〜ステップST13)。
【0208】
・「大きな単位」の場合(図11のフローチャート参照)
コントローラ10は、第一の記憶部11から出力されたデータを、上述のa.の場合と同様に、ブロック単位のデータとして第三の記憶部13に記憶する。第一の記憶部11から出力されたデータを第三の記憶部13に書き込んだ後、上述のa.の場合と同様に、図3のキャッシュ管理テーブルを更新し、書き込みデータに対応するエントリを無効化する。更に、図4または図5のページ管理テーブル、図6のブロック管理テーブル、及び、図7または図8の物理ブロック管理テーブルを更新する(ステップST4’〜ステップST8’)。
【0209】
尚、図11のフローチャートにおいて、ステップST4’は、ステップST7’の直前に配置されていても良い。この場合、コントローラ10は、第三の記憶部13に書き込むべきデータを決定した後に、「未使用」のブロックを第三の記憶部13に割り当てることとしても良い。
【0210】
C. 第二の記憶部から第三の記憶部へのデータ転送処理
図15を参照しつつ、第二の記憶部12から第三の記憶部13へのデータ転送処理について説明する。
【0211】
第二の記憶部12の容量は第三の記憶部13の容量よりも小さく設定されることが多いため、第二の記憶部12に所定量のデータが蓄積されたら(ページ単位に等しい「小さな単位」のデータによって占有されるブロック数が、第二の記憶部12の容量として定められた許容範囲を超えたら)、コントローラ10は、第二の条件の下で、第二の記憶部12からの追い出しブロックを選択する。
【0212】
コントローラ10は、追い出しブロック内に記憶されているページ単位に等しい「小さな単位」の各データを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する。
【0213】
換言すれば、コントローラ10は、ページ単位に等しい「小さな単位」から、ブロック単位に等しい「大きな単位」へと、データ管理単位を切り替える。この処理の際、「大きな単位」のサイズの論理アドレス範囲内に含まれる、断片化された複数の「小さな単位」のデータが第一、第二、及び第三の記憶部11,12,13から集められ、ブロック単位のデータへの統合が行われる(デフラグメンテーション)。
【0214】
第二の条件は、書き込み順序または有効データ数により規定される。具体的には、コントローラ10が下記の処理a.または処理b.を実行する。
【0215】
a. コントローラ10は、第二の記憶部12に割り当てられているブロックの内、最も古くに書き込みが行われたブロックを選択する。選択されたブロック内に含まれるページ単位の各データは、ブロック単位のデータへと統合され、第三の記憶部13に書き込まれることになる。この場合、コントローラ10は、第二の記憶部12内のブロックの書き込み順序を管理する。書き込み順序に関する情報は、例えば、コントローラ10の内部、不揮発性半導体記憶素子の内部、または他の記憶部の内部に記憶される。
【0216】
b. コントローラ10は、第二の記憶部12内の各ブロックに関して、ブロック内のページ単位(「小さな単位」)の有効データの論理アドレスをブロック単位(「大きな単位」)のサイズでアラインすることによって得られた論理アドレス範囲内において、第二の記憶部12に記憶されているページ単位のデータ数を合計する。コントローラ10は、合計値が最大であるブロックを選択する。選択されたブロック内の各有効データは、ブロック単位のデータへと統合され、第三の記憶部13に書き込まれる(ステップST1〜ステップST8)。
【0217】
以下では、b.の場合について説明する。
【0218】
1. 例えば、図16に示すように、コントローラ10は、第二の記憶部12に割り当てられている各ブロックについて、ページ単位の有効データに関連付けられた論理アドレスLAを、ブロック単位のサイズでアラインする(ステップST1)。
【0219】
2. コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲毎に、第二の記憶部12に記憶されている有効データを数える(ステップST2)。ブロック単位のサイズの論理アドレス範囲X1,X2,X3内の有効データ数は、それぞれ、3個、2個、1個となる。
【0220】
3. コントローラ10は、第二の記憶部12の各ブロックについて、ステップST2で数えた有効データ数の合計を計算する(ステップST3)。コントローラ10は、論理アドレスが重複する有効データについて二重にカウントを実行することはしない。
【0221】
第二の記憶部12のブロックY1に関して、ブロックY1内の有効データはa1,a4である。有効データa1は、ブロック単位のサイズの論理アドレス範囲X1に含まれる。論理アドレス範囲X1において、第二の記憶部12に記憶されている有効データはa1,a2,a3の3個となる。
【0222】
有効データa4は、ブロック単位のサイズの論理アドレス範囲X2に含まれる。論理アドレス範囲X2において、第二の記憶部12に記憶されている有効データはa4,a6の2個となる。
【0223】
結果として、第二の記憶部12のブロックY1に関して、物理アドレス範囲Y1内の有効データa1,a4を含む論理アドレス範囲X1,X2内の有効データ数の合計は、5個となる。
【0224】
ブロックY2に関して、物理アドレス範囲Y2内の有効データa2,a3を含む論理アドレス範囲X1内の有効データ数の合計は、3個となる。
【0225】
ブロックY3に関して、物理アドレス範囲Y3内の有効データa6,a9を含む論理アドレス範囲X2,X3内の有効データ数の合計は、3個となる。
【0226】
4. コントローラ10は、ステップST3で計算した合計が最大であるブロック内に記憶されている有効データを含む、ブロック単位のサイズの論理アドレス範囲内の有効データを選択する(ステップST4)。
【0227】
図16の場合、合計が最大である物理アドレス範囲Y1内の有効データを含む、ブロック単位のサイズの論理アドレス範囲X1,X2内の有効データa1,a2,a3,a4,a6が、第三の記憶部13に書き込まれることになる。
【0228】
以下の説明では、選択されたブロック内のページ単位のデータを一つのブロック単位のデータへと統合し、そのブロック単位のデータを第三の記憶部13に書き込む処理を示す。以下の処理は、選択されたブロック内のページ単位の全てのデータが第三の記憶部13に書き込まれるまで、繰り返される。
【0229】
5. コントローラ10は、図7または図8の物理ブロック管理テーブルを検索し、書き込みデータの行き先として「未使用」のブロックを取得する。この「未使用」のブロックは、第三の記憶部13に割り当てられる。コントローラ10は、図7または図8の物理ブロック管理テーブルにおいて、確保された「未使用」のブロックに対応するエントリを、「第三の記憶部13(使用)」に更新し、確保された「未使用」のブロック内のデータを消去する指示を、不揮発性半導体記憶素子に与える(ステップST5)。
【0230】
6. コントローラ10は、ページ単位のデータを統合してブロック単位のデータとする。具体的には、コントローラ10は、ページ単位のデータの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データを、第一、第二、及び第三の記憶部11,12,13から集める(ステップST6)。
【0231】
コントローラ10は、図3のキャッシュ管理テーブルを検索する。ブロック単位のサイズでアラインされた論理アドレス範囲に含まれるページ単位のデータの論理アドレスに対応するエントリが検出された場合、コントローラ10は、そのエントリにおいてセクタフラグ「有」であるセクタ単位のデータを全て、第一の記憶部11から読み出す。
【0232】
第一の記憶部11から読み出されなかった有効データを含む論理アドレス範囲に関して、コントローラ10は、図4または図5のページ管理テーブルを検索する。論理アドレス範囲に関連付けられたページ単位のデータの論理アドレスに対応するエントリが検出された場合、コントローラ10は、そのエントリに記録された物理アドレスに対応するページ単位のデータに含まれており、第一の記憶部11から読み出されなかった有効データを、第二の記憶部12から読み出す。
【0233】
第一及び第二の記憶部11,12から読み出されなかった有効データを含む論理アドレス範囲のデータに関して、コントローラ10は、図6のブロック管理テーブルを検索する。ブロック単位のサイズでアラインされた論理アドレスに対応するエントリを検出した後、コントローラ10は、そのエントリに記録された物理アドレスに対応するブロック単位のデータに含まれており、第一及び第二の記憶部11,12から読み出されなかった有効データを、第三の記憶部13から読み出す。
【0234】
第一、第二、及び第三の記憶部11,12,13の少なくとも1つから読み出された有効データの一時的な行き先は、第一の記憶部11の作業領域、または、コントローラ10の主記憶メモリ等とするが、特にこれに限定されることはない。
【0235】
7. ブロック単位のデータを構成するセクタ単位のデータを全て揃えた後、コントローラ10は、そのブロック単位のデータを、書き込みデータの行き先として選択された空きブロックに書き込む指示を、不揮発性半導体記憶素子に与える(ステップST7)。
【0236】
図15のフローチャートにおいて、ステップST5は、ステップST7の直前に配置されていても良い。この場合、コントローラ10は、第三の記憶部13に書き込むべきデータを決定した後に、「未使用」のブロックを第三の記憶部13に割り当てることとしても良い。
【0237】
ブロック単位のデータを書き込んだ後、コントローラ10は、そのブロック単位のデータの論理アドレス範囲に対応するブロック管理テーブルのエントリに、書き込みデータの行き先であるブロックの物理アドレスを登録する。
【0238】
新たな物理アドレスを登録するよりも以前に、選択されたエントリに物理アドレスが既に登録されていた場合、コントローラ10は、その物理アドレスに対して上書きする。古い物理アドレスが指し示すブロックに記憶されていた旧データは、無効データとなる。
【0239】
8. コントローラ10は、第一、第二、及び第三の記憶部11,12,13から集められた書き込みデータに対応するエントリを、無効化する(ステップST8)。
【0240】
コントローラ10は、図3のキャッシュ管理テーブルを更新する。書き込みデータに対応するエントリは無効化され、ホスト機器からの入力データのために解放される。
【0241】
続いて、コントローラ10は、図7または図8の物理ブロック管理テーブルと図6のブロック管理テーブルとを走査し、内部のブロック単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定するための、解放処理を実行する。
【0242】
具体的には、物理ブロック管理テーブルで「使用」と設定されているにもかかわらず、ブロック管理テーブルではそのブロックを指し示す物理アドレスが存在しないブロックに対応する物理ブロック管理テーブルのエントリが、「未使用」として設定される。
【0243】
同様に、ブロック単位のサイズを有する書き込みデータの論理アドレス範囲に含まれる論理アドレスに対応するエントリが、図4または図5のページ管理テーブルに存在する場合には、そのエントリが無効化される。これは、第二の記憶部12に記憶されていたデータの第三の記憶部13への転送に基づいて、第二の記憶部12に記憶されていたデータが参照されないように無効化にする処理である。
【0244】
更に、第二の記憶部12について、コントローラ10は、内部の全てのページ単位のデータが無効データになった「使用」ブロックを、「未使用」ブロックに設定する。図8の構成の場合は、ページの空き状況を記憶する領域が解放される。
【0245】
D. その他
第一の記憶部11から第二及び第三の記憶部12,13の少なくとも一方へのデータ転送処理、及び、第二の記憶部12から第三の記憶部13へのデータ転送処理は、上述の説明の場合の他、ホスト機器から指示された所定時期に行うことも可能である。
【0246】
例えば、半導体記憶装置がキャッシュフラッシュコマンドを受信した場合、コントローラ10は、第一の条件に従い、第一の記憶部11から第二及び第三の記憶部12,13の少なくとも一方へのデータ転送処理を実行する。
【0247】
(3) システム例
図17は、第二の基本構成に対応するシステム例を示している。
【0248】
ホスト機器31は、本実施形態に係る半導体記憶装置32との間で、データ転送を実行する。ホスト機器31は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータである。半導体記憶装置32は、例えば、ホスト機器31に搭載される、二次記憶装置としてのSSDである。
【0249】
半導体記憶装置32は、第一、第二、及び第三の記憶部11,12,13と、これらの記憶部を制御するコントローラ10とを備える。第一の記憶部11は、DRAM等の揮発性半導体記憶素子21内に配置され、第二及び第三の記憶部12,13は、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22内に配置される。
【0250】
コントローラ10は、CPUと主記憶メモリ(プログラム、管理情報、及び作業領域を格納する)とを有する。コントローラ10は、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、及び物理ブロック管理テーブルに基づいて、論理アドレスを物理アドレスに変換し、第一、第二、及び第三の記憶部11,12,13におけるデータの記憶位置を管理する。
【0251】
ホスト機器31からのデータは、ホストI/F(インターフェース)23を介して、半導体記憶装置32に入力される。ホスト機器31は、セクタ単位で半導体記憶装置32へのアクセスを実行する。
【0252】
図18は、ホスト機器31からのデータの流れを示している。
【0253】
上述の処理方法で説明したように、ホスト機器31からのデータは、第一の記憶部11に記憶され、その後、第一の条件に従い、第二の記憶部12、または、第三の記憶部13に転送されることとなる。更に、第二の記憶部12に記憶されたデータは、第二の条件に従い、第三の記憶部13に転送される。
【0254】
第二の記憶部12のブロックと第三の記憶部13のブロックとは、一対一の対応関係を有している訳ではない。物理ブロック管理テーブルに基づいて、不揮発性半導体記憶素子22内の複数のブロックの一部は第二の記憶部12として使用され、他の一部は、第三の記憶部13として使用される。
【0255】
(4) 動作例
本実施形態に係る動作例を、図18を参照しつつ、書き込み効率を比較することによって説明する。同時に、管理テーブルのサイズに関する考察を行う。
【0256】
A. 書き込み効率の比較
以下の説明では、揮発性半導体記憶素子21がDRAMであり、不揮発性半導体記憶素子22がNAND型フラッシュメモリであると想定する。NAND型フラッシュメモリのブロック単位のサイズは512キロバイトであり、ページ単位のサイズは4キロバイトであり、ホスト機器のセクタ単位のサイズは512バイトであると想定する。第一の条件で規定される所定の閾値(「データ数」または「データ量」)は、NAND型フラッシュメモリのブロック単位のサイズの50%(256キロバイト)であると想定とする。
【0257】
ブロック単位のデータXが第三の記憶部13に記憶されている状態で、ブロック単位のデータXの論理アドレス範囲内に含まれる1セクタ単位のデータYが更新され、その後、データYが第二の記憶部12、または、第三の記憶部13に書き込まれ、不揮発のデータとされる処理を考える。
【0258】
データYが第二の記憶部12、または、第三の記憶部13に記憶された時点で、ホスト機器31から見て、ブロック単位のデータXの論理アドレス範囲に含まれる1セクタ単位のデータYが、更新された状態となる。
【0259】
a. 動作例1
第一の記憶部11にデータが全く存在しない初期状態において、データYが第一の記憶部11に書き込まれると、結果として、データYを含むブロック単位のサイズの論理アドレス範囲(データXの論理アドレス範囲と等しい)において、セクタ単位のデータY(512バイト)のみが第一の記憶部11に存在することになる。コントローラ10は、キャッシュ管理テーブルを検索することによって、データ量を検出することができる。
【0260】
この512バイトの大きさは、第一の条件で規定される所定の閾値である256キロバイトよりも小さい。
【0261】
コントローラ10は、第一の記憶部11に記憶されているデータYを、データYの論理アドレスをページ単位のサイズでアラインすることによって得られた論理アドレス範囲に亘るページ単位のデータ(以下、データPとして参照される)として、第二の記憶部12に転送する。
【0262】
セクタ単位のデータYのサイズは、ページ単位のサイズよりも小さいので、ページ単位のデータPを揃えるためには、不足データを、例えば、第三の記憶部13から読み出す必要がある。
【0263】
コントローラ10は、データPの論理アドレスをブロック単位のサイズでアラインし、アラインされた論理アドレス(データXの論理アドレスと等しい)をもって、ブロック管理テーブルを検索する。
【0264】
論理アドレスに対応するエントリが検出された場合、コントローラ10は、データXが記憶されている物理アドレスを調べる。
【0265】
コントローラ10は、第三の記憶部13のデータXから、データPの論理アドレス範囲に対応するページ単位のデータを揮発性半導体記憶素子21上に読み出し、そこにデータYを上書きすることによって、データPのイメージを生成する。
【0266】
コントローラ10は、セクタ単位のデータYを含むページ単位のデータPを、第二の記憶部12の空きページに書き込み、キャッシュ管理テーブル、ページ管理テーブル、及びブロック管理テーブルを更新する。第二の記憶部12に書き込まれたデータYは、不揮発のデータとなる。
【0267】
データYと同じサイズのデータが連続して書き込まれる場合、1ブロックは128ページで構成されるから、半導体記憶装置32は、128セクタのデータ更新(128ページの書き込み)に対して、1ブロックのデータ消去を行うことになる。
【0268】
この場合、書き込み効率は、512キロバイト/(512バイト×128)=8となり、本実施形態を用いない場合(512キロバイト/512バイト=1024)より向上する。この例では、1セクタ単位のデータ更新であるが、1ページ単位のデータ更新にすれば、更に書き込み効率が向上する。
【0269】
既述された特許文献の技術では、データブロックとログブロックとが一対一に対応するため、例えば、それぞれ異なるブロックに属する128セクタのデータ更新が行われると、128ブロックのデータ消去が必要になる。
【0270】
これに対し、本実施形態では、第二の記憶部12のブロックと第三の記憶部13のブロックとは、一対一の対応関係を有している訳ではない。従って、異なるブロックに記憶された複数のセクタ単位のデータが更新される場合であっても、更新データを第二の記憶部12の同じブロック内に記憶させることが可能であり、この場合のデータ消去量は、1ブロック単位のサイズとなる。
【0271】
b. 動作例2
データYの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲(データXの論理アドレス範囲と等しい)内に含まれるデータとして、384キロバイトの更新データが、既に第一の記憶部11に書き込まれている初期状態を想定する。
【0272】
この初期状態において、データXの論理アドレス範囲内に含まれており、かつ、第一の記憶部11には記憶されていないセクタ単位のデータYが、第一の記憶部11に書き込まれると、データXの論理アドレス範囲にはデータYを含む(384キロバイト+512バイト)のデータが存在することになる。コントローラ10は、キャッシュ管理テーブルを検索することによって、データ量を検出することができる。
【0273】
この(384キロバイト+512バイト)の大きさは、第一の条件で規定される所定の閾値である256キロバイト以上である。
【0274】
コントローラ10は、第一の記憶部11に記憶されている、データYを含む(384キロバイト+512バイト)のデータを、データYの論理アドレスをブロック単位のサイズでアラインすることによって得られた論理アドレス範囲に亘るブロック単位のデータ(以下、データBとして参照される)として、第三の記憶部13に転送する。
【0275】
セクタ単位のデータYのサイズは、ブロック単位のサイズよりも小さいので、ブロック単位のデータBを揃えるためには、不足データを、例えば、第三の記憶部13から読み出す必要がある。
【0276】
コントローラ10は、データBの論理アドレス(データXの論理アドレスと等しい)をもってブロック管理テーブルを検索し、データXが記憶されている物理アドレスを検出する。コントローラ10は、第三の記憶部13からデータXを揮発性半導体記憶素子21上に読み出し、そこにデータYを上書きすることによって、データBのイメージを生成する。
【0277】
コントローラ10は、「未使用」のブロックのデータを消去し、その消去された「未使用」のブロックを第三の記憶部13に割り当てる。セクタ単位のデータYを含むブロック単位のデータBは、このブロックに書き込まれる。キャッシュ管理テーブル及びブロック管理テーブルが更新される。これにより、第三の記憶部13に書き込まれたセクタ単位のデータYは、不揮発のデータとなる。
【0278】
この場合、半導体記憶装置32は、約384キロバイト(384キロバイト+512バイト)のデータ更新に対して、1ブロックのデータ消去を行うことになる。
【0279】
従って、書き込み効率は、512キロバイト/384キロバイト=1.33となり、約384キロバイトのデータをセクタごとに更新する場合(512キロバイト/512バイト=1024)より向上する。
【0280】
この例では、約384キロバイトのデータ更新であるが、これを1ブロック単位のサイズである512キロバイトに近付ければ、更に書き込み効率が向上する。
【0281】
B. 管理テーブルのサイズ
不揮発性半導体記憶素子を「小さな単位」で管理すれば、コントローラ10は、ホスト機器31からのデータサイズまたはデータ量によらずデータ書き込み位置の詳細な制御を実行でき、書き込み効率は向上すると考えられる。しかしながら、アドレス変換の実行に必要な管理データが大きくなり、コントローラ10の処理効率が悪くなる可能性がある。
【0282】
一方、本実施形態では「小さな単位」と「大きな単位」という2つの管理単位が採用されている。これらのデータ管理分解能に応じた管理テーブルによって、コントローラ10は、「小さな単位」で管理されるデータ個数の増大を抑制する。従って、本実施形態に係る半導体記憶装置32は、管理テーブルのサイズの増大を抑制し、かつ、高い書き込み効率を実現することが可能である。
【0283】
(5) その他
第二及び第三の記憶部12,13に関して、本実施形態の処理に加えて、以下の処理を行っても良い。
【0284】
A. 第二の記憶部のコンパクション
第二の記憶部12の無効データ数が増え、「書き込み可能」な状態のページが無いブロックが増えた場合、図19に示すように、コントローラ10は、有効データのみを集めて、これらの有効データを「未使用」のブロックにコピーしても良い。
【0285】
結果として、元々有効データが記憶されていたブロックを解放することが可能となり、第二の記憶部12内の無効データ数が減少し、「未使用」のブロック数が増加する。有効データを集めて「未使用」のブロック(コンパクションブロック)にコピーすることに由来し、この処理を第二の記憶部12のコンパクションと呼ぶ。
【0286】
コンパクションによって、更に書き込み効率を向上させることが可能な場合がある。しかしながら、本実施形態では同様の場合に、第二の記憶部12から第三の記憶部13へのデータ転送処理によってコンパクションの代用が可能であるため、コンパクションは補助的な処理となる。
【0287】
例えば、コントローラ10は、第二の記憶部12についてブロックごとに「小さな単位」の無効データ数を計算する。コントローラ10は、無効データ数が多いブロックを降順で連続的に選択し、選択されたブロック内の有効データを、消去された「未使用」のブロックにコピーする。有効データで満たされたブロックは、第二の記憶部12に割り当てられる。
【0288】
コンパクションは、例えば、第二の記憶部12に含まれる無効データの合計が、所定の閾値よりも大きくなった場合に実行される。
【0289】
B. 第三の記憶部のコンパクション
第三の記憶部13のコンパクションは、第三の記憶部13におけるデータ管理単位(「大きな単位」)のサイズが、ブロック単位のサイズ未満である場合に適用可能になる。
【0290】
第三の記憶部13の無効データ数が増え、「書き込み可能」な状態のページが無いブロックが増えた場合、図19に示すように、コントローラ10は、有効データのみを集めて、これらの有効データを「未使用」のブロックにコピーしても良い。
【0291】
結果として、元々データが記憶されていたブロックを解放することが可能となり、第三の記憶部13内の無効データ数が減少し、「未使用」のブロック数が増加する。有効データを集めて「未使用」のブロック(コンパクションブロック)にコピーすることに由来し、この処理を第三の記憶部13のコンパクションと呼ぶ。
【0292】
例えば、コントローラ10は、第三の記憶部13についてブロックごとに「大きな単位」の無効データ数を計算する。コントローラ10は、無効データ数が多いブロックを降順で連続的に選択し、選択されたブロック内の有効データを、消去された「未使用」のブロックにコピーする。有効データで満たされたブロックは、第三の記憶部13に割り当てられる。
【0293】
コンパクションは、例えば、第三の記憶部13に含まれる無効データの合計が、所定の閾値よりも大きくなった場合に実行される。
【0294】
3. まとめ
本実施形態によれば、以下の構成により、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止できる。
【0295】
・ 記憶場所の振り分け
半導体記憶装置は、第一の単位以下で書き込みを行う揮発性半導体記憶素子に形成された第一の記憶部と、第二の単位で書き込みを行い、第三の単位で消去を行う不揮発性半導体記憶素子に形成された第二及び第三の記憶部と、以下の処理を実行するコントローラとを有する。第一の単位は半導体記憶装置に対するアクセス単位であり、第三の単位は第二の単位の二以上の自然数倍の大きさである。
【0296】
コントローラは、複数のデータを第一の単位で第一の記憶部に記憶する第一の処理と、第一の記憶部から出力されたデータを第一の管理単位で第二の記憶部に記憶する第二の処理と、第一の記憶部から出力されたデータを第二の管理単位で第三の記憶部に記憶する第三の処理とを実行する。第一の管理単位は第一の単位の二以上の自然数倍の大きさであり、かつ、第三の単位よりも小さく、第二の管理単位は第一の管理単位の二以上の自然数倍の大きさである。
【0297】
・ 第二の記憶部から第三の記憶部へのデータ転送(デフラグメンテーション)
コントローラは、更に、第二の記憶部から出力される第一の管理単位のデータを選択する第四の処理と、選択されたデータを含むデータを第二の管理単位で第三の記憶部に記憶する第五の処理とを実行する。
【0298】
・ メモリの共有
第二の記憶部と第三の記憶部は、同一の不揮発性半導体記憶素子を共有し、コントローラは、第三の単位の領域を、第二及び第三の記憶部の各々に割り当てる。
【0299】
・ 振り分け条件1(第一の記憶部内のデータ数)
コントローラは、第一の記憶部から出力されるデータの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第一の記憶部に記憶されているデータを数え、データ数が所定の閾値未満である場合は第二の処理を実行し、データ数が所定の閾値以上である場合は第三の処理を実行する。
【0300】
・ 振り分け条件2(第一及び第二の記憶部内のデータ数)
コントローラは、第一の記憶部から出力されるデータの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第一及び第二の記憶部に記憶されているデータを数え、データ数が所定の閾値未満である場合は第二の処理を実行し、データ数が所定の閾値以上である場合は第三の処理を実行する。
【0301】
・ デフラグメンテーション発動条件
コントローラは、第二の記憶部に記憶されている複数の有効データ及び無効データによって占有される第三の単位の領域の数が許容範囲を超えた場合に、第四及び第五の処理を実行する。
【0302】
・ デフラグメンテーション条件1(古いデータ)
第四の処理において、コントローラは、第二の記憶部内で書き込まれた順序が最も古い第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【0303】
・ デフラグメンテーション条件2(有効データ)
第四の処理において、コントローラは、第二の記憶部における第三の単位の領域それぞれについて、有効データの論理アドレスを第二の管理単位にアラインすることで論理アドレス範囲を計算し、論理アドレス範囲内に含まれ、かつ、第二の記憶部に記憶されている有効データを数え、第二の記憶部における第三の単位の領域それぞれについてその有効データ数を合計し、合計が最も大きい第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【0304】
・ デフラグメンテーション条件3(無効データ)
第四の処理において、コントローラは、第二の記憶部における第三の単位の各領域について無効データを数え、無効データ数が最も小さい第三の単位の領域を検出し、その第三の単位の領域に記憶されている第一の管理単位の各有効データを選択する。
【0305】
・ 第二の記憶部のデータ管理単位:小
第二の単位は、第一の管理単位の二以上の自然数倍の大きさである。
【0306】
・ 第二の記憶部のデータ管理単位:大
第一の管理単位は、第二の単位の二以上の自然数倍の大きさであり、かつ、第三の単位は、第一の管理単位の二以上の自然数倍の大きさである。
【0307】
・ 第三の記憶部のデータ管理単位:小
第三の単位は、第二の管理単位の二以上の自然数倍の大きさである。
【0308】
・ 第三の記憶部のデータ管理単位:大
第二の管理単位は、第三の単位の二以上の自然数倍の大きさである。
【0309】
・ 第二の記憶部の無効化
第二の処理において、コントローラは、第二の記憶部における第二の単位の空き領域に第一の管理単位の新データを書き込み、新データの論理アドレスが旧データの論理アドレスに対応する場合、第二の記憶部に記憶されていた旧データを無効化し、新データを、旧データに対して優先度が高い有効データとして取り扱い、旧データを、新データを参照することにより無視される無効データとして取り扱う。
【0310】
・ 第二の記憶部のコンパクション
コントローラは、第二の記憶部における無効データ数が許容値を超えたか否かを判断し、第二の記憶部における第三の単位の各領域について無効データを数え、無効データ数が大きい第三の単位の領域から順次有効データを選択し、選択された有効データを、第三の単位の空いている第一の領域に書き直し、選択された有効データを書き込んだ後に第1の領域を第二の記憶部に割り当て、選択された有効データを第一の領域に書き直すことによって有効データを持たなくなった第三の単位の第二の領域を、第二の記憶部から解放する。
【0311】
・ 第三の記憶部の無効化
第三の処理において、コントローラは、第三の記憶部における第三の単位の空き領域に第二の管理単位の新データを書き込み、新データの論理アドレスが旧データの論理アドレスに対応する場合、第三の記憶部に記憶されていた旧データを無効化し、新データを、旧データに対して優先度が高い有効データとして取り扱い、旧データを、新データを参照することにより無視される無効データとして取り扱う。
【0312】
・ 第三の記憶部のコンパクション
コントローラは、第三の記憶部における無効データ数が所定の閾値を超えたか否かを判断し、第三の記憶部における第三の単位の各領域について第二の管理単位の無効データを数え、無効データ数が大きい第三の単位の領域から順次有効データを選択し、選択された第二の管理単位の有効データを、第三の記憶部における第三の単位の空き領域に書き直し、第三の単位の領域を解放する。第二の管理単位は第三の単位よりも小さいとする。
【0313】
4. 適用例
本実施形態に係る半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるSSDに適用可能である。その場合の具体例については、後述する。
【0314】
5. むすび
本実施形態によれば、消去/読み出し/書き込みの単位が固定される不揮発性半導体記憶素子を使用する半導体記憶装置において、ホスト機器からのデータサイズまたはデータ量にかかわらず、書き込み効率の向上を図り、性能劣化及び寿命短縮を防止することができる。
【0315】
本発明は、上述の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で、各構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成できる。例えば、上述の実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【0316】
[II.消去回数の増加を抑制する半導体記憶装置]
1. 概要
第I節で述べたコンパクションは、無効データの消去に基づく記憶領域の有効活用に優れている。しかしながら、コンパクションは、同一のデータを他のブロックに書き直むというコピー動作を必要とするため、コンパクションの対象となった有効データに対して直ちに更新が行われると、ブロックの消去回数が増加するという副作用が生じる。
【0317】
コンパクションにより新たに使用中となるブロック内には有効データが詰まった状態となっているが、コンパクションの対象となったデータが更新されると、そのデータは無効データとなる。また、ブロック内の無効データが増えれば、再び、そのブロック内の有効データがコンパクションの対象となるため、結果として、ブロックの消去回数が増加することがある。
【0318】
以上の構成によれば、コンパクションの対象とするデータは、更新頻度の低いデータとすることが望ましく、データを選別する手段が必要となる。
【0319】
このような知見に基づいて、各実施形態では、更新頻度の高いデータと更新頻度の低いデータとを区別する手段を設け、更新頻度の低いデータをコンパクションの対象とすることで、コンパクションの対象となったデータに対して直ちに更新が行われることを防止する。この構成によれば、ブロックの消去回数が減少し、メモリセルの劣化が防止される。
【0320】
具体的構成としては、以下の記憶部が規定される。
・ 第一の単位以下でデータの読み出し/書き込みが可能な揮発性半導体記憶素子内の第一の記憶部
・ 第二の単位でデータの読み出し/書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、第一の単位の自然数倍の大きさである「小さな単位(第一の管理単位)」でデータを管理する第二の記憶部
・ 第二の単位でデータの読み出し/書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、「小さな単位」の二以上の自然数倍、かつ、第三の単位の自然数倍の大きさである「大きな単位(第二の管理単位)」でデータを記憶する第三の記憶部
・ 第二の単位でデータの読み出し/書き込みを行い、第三の単位でデータの消去を行う不揮発性半導体記憶素子内の複数の第三の単位の領域から構成され、第一の単位の自然数倍の大きさである「小さな単位」でデータを管理する第四の記憶部
第四の記憶部は、更新頻度の高いデータと更新頻度の低いデータとを区別する手段として使用される。概略的には、第I節で述べた基本構成に加え、更新頻度の高いデータと更新頻度の低いデータとを区別するための第四の記憶部が設けられた構成となる。
【0321】
第一の単位の複数のデータは、第一の記憶部に書き込まれ、その後、第三または第四の記憶部に書き込まれる。第四の記憶部は、FIFO(First-In First-Out)構造を有する。第四の記憶部内の「使用中」の第三の単位の領域の数が許容範囲よりも大きくなった場合に、第二の記憶部で最も古い割り当て順序を備える第三の単位の領域内に記憶されており、かつ、第三の条件を満たす有効データは、「大きな単位」で第四の記憶部に転送される。
【0322】
また、第三の条件を満たさない有効データが残った第二の記憶部内で最も古い割り当て順序を備える第三の単位の領域は、第二の記憶部に移動される。第二の記憶部内の「使用中」の第三の単位の領域の数が許容範囲よりも大きくなり第四の条件が満たされた場合には、第二の記憶部内の有効データを選択し、第三の単位の空き領域にコピーする。有効データの詰まった第三の単位の領域は、第二の記憶領域に割り当てられる(コンパクション)。
【0323】
ここで、第二の記憶部におけるコンパクションの対象が更新頻度の低いデータとなる原理は、以下の通りである。
【0324】
第四の記憶部は、第三の単位のFIFOの構造を有するため、第四の記憶部に入力されたデータは、一定期間、第四の記憶部内に留まることになる。このため、更新頻度の高いデータは、第四の記憶部内で更新される。データが更新されると、旧データは無効データとなり、更新データが新たに第四の記憶部に入力されるため、更新頻度の高いデータは第四の記憶部内に留まり、第四の記憶部から出力されることはない。
【0325】
第二の記憶部内の有効データをコンパクションの対象とし、第四の記憶部内の有効データをコンパクションの対象としないことで、更新頻度の低いデータをコンパクションの対象とすることができ、結果として、コンパクションの副作用であるブロックの消去回数増加を抑制できる。
【0326】
2. 実施形態
(1) 第一の実施形態
図20は、第一の実施形態に係る半導体記憶装置を示している。
【0327】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で読み出し及び書き込みがされる。第一の記憶部11は、例えば、DRAM等の揮発性半導体記憶素子から構成される。
【0328】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22内部において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部12は、ページ単位に等しい「小さな単位」でデータを記憶する。
【0329】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【0330】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【0331】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0332】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部12,13,14へと割り当てられる。
【0333】
第三の記憶部13には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【0334】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三の記憶部13の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0335】
第二、第三、及び第四の記憶部12,13,14は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22の一以上のブロックから構成される。
【0336】
データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC、内部制御用フラグ等)が含まれないものとする。
【0337】
通常、NAND型フラッシュメモリ等の不揮発性半導体記憶素子を含むシステムでは、主データに対して冗長データが付加された状態で読み出し、書き込みが行われるが、簡略化のため、上述のように定義する。
【0338】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態においてコントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0339】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0340】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部11,12,13,14のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、ページFIFO管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ10の主記憶メモリ内に展開される。
【0341】
・ キャッシュ管理テーブル
図21は、キャッシュ管理テーブルの構成例を示している。
【0342】
キャッシュ管理テーブルは、図20の第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【0343】
第一の記憶部11の1ページ単位の領域一つに対して1エントリとする。
【0344】
エントリ数は、第一の記憶部11に収まるページ単位のデータ数、即ち、(第一の記憶部11の全容量)/(ページ単位のサイズ)以下とする。
【0345】
各エントリには、ページ単位のデータの論理アドレス、第一の記憶部11の物理アドレス、及び、対応するページ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【0346】
各エントリに対応付けて、データを一時的に記憶するためのページ単位の領域を第一の記憶部11内に用意し、その領域の物理アドレスを各エントリに格納する。ページ単位の領域が連続的に配置されている等、エントリに対応する領域の物理アドレスが固定的であれば、物理アドレスをエントリ内に格納する必要はない。
【0347】
キャッシュ管理テーブルにおいて、第一の記憶部11の各ページ単位の領域は、更にセクタ単位の領域に分割され、各セクタ単位の領域内のデータの状態を、セクタフラグの値を「有」または「無」にすることで示す。
【0348】
セクタフラグが「有」の領域には、ホスト機器からの有効データが記憶されている。これに対し、セクタフラグが「無」の領域には、ホスト機器から書き込まれた最新のデータが記憶されておらず、無効な領域となる。また、エントリ内の全てのセクタフラグが「無」のエントリは、未使用のエントリとみなす。
【0349】
尚、上記キャッシュ管理テーブルの構成は、各エントリに論理アドレスを割り当てるフルアソシアティブと呼ばれる管理方法を元にしているが、n−wayセットアソシアティブ等の方法で、第一の記憶部11における論理アドレスと物理アドレスとの対応を管理してもよい。
【0350】
・ ページ管理テーブル
図22は、ページ管理テーブルの構成例を示している。
【0351】
ページ管理テーブルは、図20の第二及び第四の記憶部12,14に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0352】
第二及び第四の記憶部12,14の1ブロックに対して1エントリとする。
【0353】
エントリ数は、第二及び第四の記憶部12,14に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけの余裕を持たせた数、即ち、[(第二及び第四の記憶部12,14の全容量)/(ブロック単位のサイズ)]に余裕を持たせた数とする。
【0354】
各エントリには、第二の記憶部12または第四の記憶部14に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のページ単位のデータの論理アドレスが記録されている。
【0355】
また、ページの空き状況として、各ページについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0356】
・ ブロック管理テーブル
図23は、ブロック管理テーブルの構成例を示している。
【0357】
ブロック管理テーブルは、図20の第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【0358】
第三の記憶部13の1ブロック単位の領域一つに対して1エントリとする。
【0359】
エントリ数は、第三の記憶部13に収まるブロック単位のデータ数、即ち、(第三の記憶部13の全容量)/(ブロック単位のサイズ)以下とする。
【0360】
各エントリは論理アドレス順に配列されている。ブロック単位のデータの論理アドレスに対応して、第三の記憶部13内のブロックを指定する物理アドレスが、各エントリに関連付けられている。
【0361】
・ ページFIFO管理テーブル
図24は、ページFIFO管理テーブルの構成例を示している。
【0362】
ページFIFO管理テーブルは、図20の第四の記憶部14に割り当てられたブロック内のデータを管理する。
【0363】
第四の記憶部14の1ブロックに対して1エントリとする。
【0364】
エントリ数は、第四の記憶部14に収まるブロック数、即ち、(第四の記憶部14の全容量)/(ブロック単位のサイズ)とする。
【0365】
第四の記憶部14は、ページFIFO管理テーブルを使用することで、ブロック単位のFIFO(First-In First-Out)構造を伴って管理される。
【0366】
新たに第四の記憶部14に割り当てられた(入力された)ブロックに対応するエントリは、ページFIFO管理テーブルの先頭(入口側)に追加され、元々ページFIFO管理テーブルに登録されていたエントリは、一つずつ後方にシフトする。
【0367】
エントリ数が許容範囲を超えた場合、ページFIFO管理テーブルの末端(出口側)のエントリに関連付けられている最も古い割り当て順序を有するブロックは、第四の記憶部14から出力される。
【0368】
・ 物理ブロック管理テーブル
図25は、物理ブロック管理テーブルの構成例を示している。
【0369】
物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。
【0370】
第二、第三、及び第四の記憶部12,13,14の1ブロック(物理ブロック)に対して1エントリとする。エントリ数は、データエリアとして使用可能なブロック数とする。
【0371】
各エントリは、ブロックの物理アドレスと関連付けられており、また、ブロックの使用状況(記憶領域(ブロック)が第二、第三、及び第四の記憶部として使用されている(使用)か、または、使用されていない(未使用)か)を記憶する。
【0372】
図20のコントローラ10によって実行される処理フローについて説明する。
【0373】
コントローラ10は、ホスト機器からのセクタ単位(第一の単位)のデータを、最初に第一の記憶部11に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第I節で述べた「A.第一の記憶部へのデータ蓄積処理」を適用することができる。
【0374】
コントローラ10は、第一の記憶部11に蓄積されたデータを、所定の条件に従い、「小さな単位(第一の管理単位)」で管理すべきか、または、「大きな単位(第二の管理単位)」で管理すべきか、を判断する。所定の条件は、第I節で述べた「B.第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【0375】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0376】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、かつ、ブロック単位の自然数倍のサイズである。
【0377】
本実施形態では、説明の簡略化のため、管理テーブルで使用される各単位を、下記の通りであると想定する。
【0378】
即ち、第二及び第四の記憶部12,14のデータ管理単位である「小さな単位」のサイズは、ページ単位(第二の単位)のサイズと等しく、第三の記憶部13のデータ管理単位である「大きな単位」のサイズは、ブロック単位(第三の単位)のサイズと等しい。
【0379】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0380】
或いは、複数のページを合わせて管理して、「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0381】
同様に、ブロックを分割して管理して、第三の記憶部13で使用される「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしてもよい。
【0382】
或いは、複数のブロックを合わせて管理して、「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしてもよい。
【0383】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<「小さな単位」<ページ単位(第二の単位)<ブロック単位(第三の単位)≦「大きな単位」と設定することが可能である。
【0384】
第一の記憶部11に蓄積されたデータを「小さな単位」で管理する場合には、ページ単位のデータを第四の記憶部14に転送する。第一の記憶部11に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部13に転送する。
【0385】
このデータ出力処理については、第I節で述べた「B.第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第I節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部14となる。
【0386】
A. 第四の記憶部のFIFO処理
第四の記憶部14は、既に述べたように、ブロック単位のFIFO構造を有する。図26は、第四の記憶部14でのFIFO処理を示している。
【0387】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、ページ追記用物理ブロックと称する)に対応するページ管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、ページ単位に等しい「小さな単位」のデータとして、ページ追記用物理ブロック内の書き込み可能なページに記憶する(ステップST1)。
【0388】
コントローラ10は、キャッシュ管理テーブルを検索し、出力対象に決まったページ単位のデータを構成するセクタ単位のデータが、第一の記憶部11内に全て存在するか否かを判断する。
【0389】
第一の記憶部11内に全てのセクタ単位のデータが存在しない場合、コントローラ10は、第二、第三、及び第四の記憶部12,13,14から、不足データを集める。
【0390】
ページ単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ10は、そのページ単位のデータを書き込む指示を、不揮発性半導体記憶素子22に与える。
【0391】
2. コントローラ10は、ページ管理テーブルにおいて、内部にページ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二及び第四の記憶部12,14内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【0392】
3. コントローラ10は、ページ追記用物理ブロック内に空きページが存在するか否かを判断する(ステップST3)。空きページが検出されなかった場合、処理はステップST4に進む。空きページが検出された場合、処理はステップST1に戻る。
【0393】
4. コントローラ10は、ページFIFO管理テーブルのエントリを一つずつ後方にシフトし、ページ追記用物理ブロックの物理アドレスを、ページFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、ページ追記用ブロックは、第四の記憶部14に割り当てられる。
【0394】
5. コントローラ10は、ページFIFO管理テーブルの末端のエントリに関連付けられており、ページFIFO管理テーブルから溢れている最も古い割り当て順序を備えたブロックに対して、以下の処理P1を実行する(ステップST5)。
【0395】
B. 処理P1
図27は、処理P1のフローチャートを示している。
【0396】
1. コントローラ10は、図22のページ管理テーブルを検索し、第四の記憶部14から溢れたブロックの物理アドレスが記録されているエントリを検出する(ステップST1)。
【0397】
2. コントローラ10は、エントリに記録されているページ単位のデータの論理アドレスを特定する(ステップST2)。各々の論理アドレスに対して、以下の処理が適用される。
【0398】
3. コントローラ10は、ページ単位のデータの論理アドレスを、ブロック単位に等しい「大きな単位」のサイズでアラインし、ページ管理テーブル内について、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる論理アドレスを数える(ステップST3)。
【0399】
ここで、「論理アドレスを所定サイズ(ページサイズ、ブロックサイズ等)にアラインする」とは、論理アドレスを所定サイズで割り算した時の剰余が0になるアドレスに切り下げることを意味する。例えば論理アドレスAをサイズSにアラインしたアドレスは、(A−(AをSで割った余り))となる。「所定サイズにアラインされた論理アドレス範囲」とは、論理アドレスを所定サイズにアラインしたアドレスから所定サイズ分の範囲を意味する。
【0400】
コントローラ10が、ページFIFO管理テーブルに含まれる物理アドレスを備えたエントリ内の論理アドレスだけを限定して数える場合、第四の記憶部14内に記憶されているページ単位のデータ数が取得されることになる。一方、コントローラ10がエントリを限定しない場合、第二及び第四の記憶部12,14内に記憶されているページ単位のデータ数が取得されることになる。コントローラ10は、いずれの条件も選択可能である。
【0401】
4. コントローラ10は、ステップST3で数えた論理アドレス数が、所定の閾値以上であるか否かを判断する(第三の条件)。所定の閾値は、例えば、一つのブロック単位(「大きな単位」)の領域内に収まるページ単位(「小さな単位」)のデータ総数の50%に設定されていても良い(ステップST4)。
【0402】
ステップST3で数えた論理アドレス数が、所定の閾値未満である場合、処理はステップST5に進む。ステップST3で数えた論理アドレス数が、所定の閾値以上である場合、処理はステップST6に進む。
【0403】
5. コントローラ10は、ページ単位のデータに対して、何も実行しない。即ち、ページ単位のデータは、第四の記憶部14から溢れたブロック内に留まる(ステップST5)。
【0404】
6. コントローラ10は、ページ単位のデータを、ブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する(ステップST6)。
【0405】
コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集めることによって、ページ単位のデータをブロック単位のデータへと統合する(デフラグメンテーション)。
【0406】
ブロック単位のデータを構成する有効データが揃った後、コントローラ10は、そのブロック単位のデータを第三の記憶部13の空きブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0407】
7. コントローラ10は、第一、第二、第三、及び第四の記憶部11,12,13,14について、書き込みデータの論理アドレス範囲内に含まれるデータを、無効化する(ステップST7)。
【0408】
ブロック内の全てのデータが無効データになった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する。
【0409】
8. コントローラ10は、エントリ内の全ての論理アドレスが処理されたか否かを判断する(ステップST8)。エントリ内の全ての論理アドレスが処理された場合、この処理は終了する。エントリ内の全ての論理アドレスが処理されていない場合、処理はステップST3に戻る。
【0410】
処理P1を終了した後にあっても、第四の記憶部14から溢れたブロック内に有効データが残っている場合、コントローラ10は、物理ブロック管理テーブルにおいてそのブロックに対応するエントリを、「第二の記憶部12(使用)」に設定する。
【0411】
第四の記憶部14から第二の記憶部12へのデータ転送に際して、コントローラ10はページFIFO管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体素子22に対するデータの読み出し/書き込み指示を要しない(移動処理)。
【0412】
ページ追記用物理ブロック内に空きページがなくなると、コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、そのブロックが新たにページ追記用物理ブロックとして割り当てられる。コントローラ10はページ管理テーブルの未使用のエントリを検索する。ページ追記用物理ブロックに対応する物理アドレスは、その未使用のエントリに記録される。
【0413】
第四の記憶部14からのブロックの移動に伴って、第二の記憶部12内のページ単位で管理されるブロックの数が増加する。第二の記憶部12のブロック数が許容範囲、即ち、第二の記憶部12の容量として定められた所定のブロック数を超える場合、コントローラ10は、以下の手順で、コンパクション、または、第二の記憶部12から第三の記憶部13へのデータ転送処理を実行する。
【0414】
C.処理例1
図28は、処理例1のフローチャートを示している。
【0415】
1. コントローラ10は、ページ管理テーブルを走査し、第二の記憶部12内においてページ単位に等しい「小さな単位」で記憶されているデータ数(論理アドレス数)を数える(ステップST1)。
【0416】
ステップST1では、ページFIFO管理テーブルに物理アドレスが含まれるエントリと、ページ追記用物理ブロックに対応するエントリとに関しては、走査の対象としない。即ち、コントローラ10は、第二の記憶部12のみを走査する。
【0417】
2. コントローラ10は、第二の記憶部12に記憶されているページ単位の有効データの総数が、所定の閾値以下であるか否かを判断する(第四の条件)。所定の閾値は、例えば、第二の記憶部12に収まるページ単位のデータ数とすれば良い(ステップST2)。
【0418】
有効データの総数が所定の閾値よりも大きい場合には、コンパクションを行っても第二の記憶部12のブロック数を許容範囲にまで減らすことはできないので、処理はステップST3に進む。有効データの総数が所定の閾値以下である場合には、処理はステップST6に進む。
【0419】
3. コントローラ10は、所定の条件に基づいて、第二の記憶部12内の有効データを選択し、選択されたデータをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13へ転送する(ステップST3)。所定の条件は、例えば、第I節で述べた「C.第二の記憶部から第三の記憶部へのデータ転送処理」の第二の条件と実質的に同じであっても良い。
【0420】
コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集めることで、ページ単位の有効データをブロック単位のデータへと統合する(デフラグメンテーション)。
【0421】
ブロック単位のデータを構成する有効データを揃えた後、コントローラ10は、そのブロック単位のデータを第三の記憶部13の空きブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0422】
4. コントローラ10は、書き込みデータの論理アドレス範囲内に含まれる、第一、第二、第三、及び第四の記憶部11,12,13,14に記憶されていたデータを、無効化する。ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST4)。
【0423】
5. コントローラ10は、第二の記憶部12内のブロック数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST5)。
【0424】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理は終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0425】
6. コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、ページ管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST6)。
【0426】
7. コントローラ10は、第二の記憶部12において、有効データ数が小さいブロックから順番に、ページ単位の有効データを選択する(ステップST7)。選択された有効データはコンパクションブロックにコピーされ、ページ管理テーブルのコンパクションブロックに対応するエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される。
【0427】
コントローラ10は、物理ブロック管理テーブルのエントリを「第二の記憶部12(使用)」に更新することで、有効データが詰まったコンパクションブロックを、第二の記憶部12に割り当てる。
【0428】
ステップST7(コンパクション)に際して、コピーされるデータの論理アドレス範囲内に含まれる最新の有効データを第一の記憶部11から読み出し、コピーされるデータを最新データで上書きしても良い。コピーされるデータに取り込まれた第一の記憶部11内のセクタ単位のデータは、無効化される。
【0429】
8. コントローラ10は、第二の記憶部12において、コピーされたデータと同じ論理アドレスを有するデータを無効化する。ブロック内の全てのデータが無効データになった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST8)。
【0430】
9. コントローラ10は、第二の記憶部12内のブロック数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST9)。
【0431】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理を終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST6に戻る。
【0432】
D.処理例2
図29は、処理例2のフローチャートを示している。
【0433】
1. コントローラ10は、ページ管理テーブルを走査し、ページ単位に等しい「小さな単位」で記憶されている有効データ数(論理アドレス数)が少ない方から順番に、二つのブロックを選択する(ステップST1)。
【0434】
ステップST1では、ページFIFO管理テーブルに物理アドレスが含まれるエントリと、ページ追記用物理ブロックに対応するエントリとに関しては、走査の対象としない。即ち、コントローラ10は、第二の記憶部12のみを走査する。
【0435】
2. コントローラ10は、ページ単位の有効データの総数が、所定の閾値(例えば、第三の単位に格納される第二の単位の数)以下であるか否かを判断する(第四の条件)(ステップST2)。
【0436】
有効データの総数が所定の閾値よりも大きい場合には、コンパクションを行っても第二の記憶部12のブロック数を許容範囲にまで減らすことはできないので、処理はステップST3に進む。有効データの総数が所定の閾値以下である場合には、処理はステップST6に進む。
【0437】
3. コントローラ10は、所定の条件に基づいて、第二の記憶部12内の有効データを選択し、選択されたデータをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13へ転送する(ステップST3)。所定の条件は、例えば、第I節で述べた「C.第二の記憶部から第三の記憶部へのデータ転送処理」の第二の条件と実質的に同じであっても良い。
【0438】
コントローラ10は、ブロック単位のサイズでアラインされた論理アドレス範囲内に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集めることによって、ページ単位の有効データをブロック単位のデータへと統合する(デフラグメンテーション)。
【0439】
ブロック単位のデータを構成する有効データを揃えた後、コントローラ10は、そのブロック単位のデータを第三の記憶部13の空きブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0440】
4. コントローラ10は、書き込みデータの論理アドレス範囲内に含まれる第一、第二、第三、及び第四の記憶部11,12,13,14に記憶されていたデータを、無効化する。ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST4)。
【0441】
5. コントローラ10は、第二の記憶部12内のブロックの数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST5)。
【0442】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理は終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0443】
6. コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、ページ管理テーブルから未使用のエントリを確保する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST6)。
【0444】
7. コントローラ10は、第二の記憶部12において、有効データ数が小さいブロックから順番に、ページ単位の有効データを選択する(ステップST7)。選択された有効データはコンパクションブロックにコピーされ、ページ管理テーブルのコンパクションブロックに対応するエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される。
【0445】
コントローラ10は、物理ブロック管理テーブルのエントリを「第二の記憶部12(使用)」に更新することで、有効データが詰まったコンパクションブロックを、第二の記憶部12に割り当てる。
【0446】
ステップST7(コンパクション)に際して、コピーされるデータの論理アドレス範囲内に含まれる最新の有効データを、第一の記憶部11からも読み出し、コピーされるデータを最新データで上書きしても良い。コピーされるデータに取り込まれた第一の記憶部11内のセクタ単位のデータは、無効化される。
【0447】
8. コントローラ10は、第二の記憶部12において、コピーされたデータと同じ論理アドレスを有するデータを無効化する。ブロック内の全てのデータが無効データになった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST8)。
【0448】
9. コントローラ10は、第二の記憶部12内のブロック数が、第二の記憶部12の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST9)。
【0449】
第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数以下である場合には、処理を終了する。第二の記憶部12内のブロック数が第二の記憶部12の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST6に戻る。
【0450】
処理例2のステップST1では、有効データ数が少ない方から順番に二つのブロックが選択されているが、この数は二つに限定されず、二つ以上のブロックが選択されても良い。また、処理例2のステップST2における「所定の閾値」は、選択されたブロック数よりも一つ少ないブロックに収まるページ単位のデータ数以下であれば良い。
【0451】
(2) 第二の実施形態
図30は、第二の実施形態に係る半導体記憶装置を示している。
【0452】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0453】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、かつ、ブロック単位は、「大きな単位」の二以上の自然数倍のサイズである。
【0454】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0455】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<「小さな単位」<ページ単位(第二の単位)<「大きな単位」<ブロック単位(第三の単位)と設定することが可能である。
【0456】
第二の実施形態では、「大きな単位」としてトラック単位が使用される。トラック単位はページ単位の二以上の自然数倍のサイズであり、かつ、ブロック単位はトラック単位の二以上の自然数倍のサイズである。
【0457】
トラック単位の使用に伴って、ブロック管理テーブルの代わりに、トラック管理テーブル及びトラックFIFO管理テーブルを用いたデータ管理が行われる。
【0458】
また、第一の実施形態と同様、説明の簡略化のため、「小さな単位」としてページ単位を使用する。しかしながら、「小さな単位」としてクラスタ単位を使用しても良い。クラスタ単位はセクタ単位の二以上の自然数倍のサイズであり、かつ、ページ単位はクラスタ単位の二以上の自然数倍のサイズである。クラスタ単位を使用するデータ管理については後述する。
【0459】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で書き込みされる。第一の記憶部11は、例えば、DRAM等の揮発性半導体記憶素子に含まれる。
【0460】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍の大きさである。第二の記憶部12は、ページ単位に等しい「小さな単位」でデータを記憶する。
【0461】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、トラック単位に等しい「大きな単位」でデータを記憶する。
【0462】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【0463】
第五の記憶部15は、不揮発性半導体記憶素子22の複数のブロックから構成され、トラック単位に等しい「大きな単位」でデータを記憶する。
【0464】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0465】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、第四、及び第五の記憶部12,13,14,15へと割り当てられる。
【0466】
第三及び第五の記憶部13,15には、第三及び第五の記憶部13,15の記憶容量の合計が、半導体記憶装置の製品仕様としての記憶容量よりも大きくなるような記憶容量(例えば、半導体記憶装置の製品仕様としての記憶容量よりも1〜5%程度大きい容量)が割り当てられる。
【0467】
第三及び第五の記憶部13,15の間で容量の割合に制約はないが、例えば、第三の記憶部13の記憶容量は半導体記憶装置の製品仕様としての記憶容量と同じとし、第五の記憶部15の記憶容量は第三の記憶部13の記憶容量の1〜5%程度となるように設定される。
【0468】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三及び第五の記憶部13,15の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0469】
第二、第三、第四、及び第五の記憶部12,13,14,15は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22の一以上のブロックから構成される。
【0470】
第二の実施形態では、第一の実施形態で述べた第一、第二、第三、及び第四の記憶部11,12,13,14に加え、更に、第五の記憶部15として一以上のブロックが割り当てられた構成となっている。
【0471】
第一の実施形態と同様に、データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC、内部制御用フラグ等)が含まれないものとする。
【0472】
コントローラ10は、データ管理を行うためのプログラムを動作させる。コントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0473】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0474】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、第四、及び第五の記憶部11,12,13,14,15のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、トラック管理テーブル、ページFIFO管理テーブル、トラックFIFO管理テーブル、及び物理ブロック管理テーブルを備える。
【0475】
・ キャッシュ管理テーブル
図30のキャッシュ管理テーブルは、第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。また、有効データの管理は、セクタ単位で実行される。
【0476】
キャッシュ管理テーブルの構成は、第一の実施形態と同様であり、図21に示す通りである。キャッシュ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0477】
・ ページ管理テーブル
図30のページ管理テーブルは、第二及び第四の記憶部12,14に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0478】
ページ管理テーブルの構成は、第一の実施形態と同様であり、図22に示す通りである。ページ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0479】
・ トラック管理テーブル
図31は、トラック管理テーブルの構成例を示している。
【0480】
トラック管理テーブルは、図30の第三及び第五の記憶部13,15に記憶されるデータを、トラック単位に等しい「大きな単位」で管理する。
【0481】
第三及び第五の記憶部13,15の1ブロックに対して1エントリとする。
【0482】
エントリ数は、第三及び第五の記憶部13,15に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけのだけの余裕を持たせた数、即ち、[(第三及び第五の記憶部13,15の全容量)/(ブロック単位のサイズ)]に余裕を持たせた数とする。
【0483】
各エントリには、第三及び第五の記憶部13,15に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のトラック単位のデータの論理アドレスが記憶されている。
【0484】
また、トラック単位の領域内のページの空き状態として、各ページについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために、無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0485】
この例では、ブロック単位でエントリが構成されているが、データの論理アドレスからブロックの物理アドレスの検索を高速に行うために、トラック管理テーブルのエントリは、論理アドレス順に配列されたトラック単位で構成されていても良い。
【0486】
・ ページFIFO管理テーブル
図30のページFIFO管理テーブルは、第四の記憶部14に割り当てられたブロック内のデータを管理する。
【0487】
ページFIFO管理テーブルの構成は、第一の実施形態と同様であり、図24に示す通りである。ページFIFO管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0488】
・ トラックFIFO管理テーブル
図32は、トラックFIFO管理テーブルの構成例を示している。
【0489】
トラックFIFO管理テーブルは、第五の記憶部15に割り当てられたブロック内のデータを管理する。
【0490】
第五の記憶部15の1ブロックに対して1エントリとする。エントリ数は、第五の記憶部15に収まるブロック数、即ち、(第五の記憶部の全容量)/(ブロック単位のサイズ)とする。
【0491】
第五の記憶部15は、トラックFIFO管理テーブルを使用することで、ブロック単位のFIFO(First-In First-Out)構造を伴って管理される。
【0492】
新たに第五の記憶部15に割り当てられた(入力された)ブロックに対応するエントリは、トラックFIFO管理テーブルの先頭(入口側)に追加され、元々トラックFIFO管理テーブルに登録されていたエントリは、一つずつ後方にシフトする。
【0493】
エントリ数が許容範囲を超えた場合、トラックFIFO管理テーブルの末端(出口側)のエントリに関連付けられている最も古い割り当て順序を有するブロックは、第五の記憶部15から出力される。
【0494】
・ 物理ブロック管理テーブル
図33は、物理ブロック管理テーブルの構成例を示している。
【0495】
物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。
【0496】
1ブロック(物理ブロック)に対して1エントリとする。エントリ数は、データエリアとして使用可能なブロック数とする。各エントリは、ブロックの物理アドレスと関連付けられており、また、ブロックの使用状況(記憶領域(ブロック)が第二、第三、第四、及び第五の記憶部として使用されている(使用)か、または、使用されていない(未使用)か)を記憶する。
【0497】
図30のコントローラ10によって実行される処理フローについて説明する。
【0498】
第一の記憶部11に記憶されているデータは「小さな単位」と「大きな単位」とに分類され、「小さな単位」のデータは第四の記憶部14に出力される。第四の記憶部14のFIFO処理に関する動作は、第一の実施形態と同じである。
【0499】
即ち、第四の記憶部14でのFIFO処理に関しては、図26のフローチャートと同じである。第四の記憶部14から溢れたブロックに適用される処理に関しては、図27のフローチャートと実質的に同じである(ただし、「大きな単位」のデータの行き先は第五の記憶部15である)。
【0500】
この構成により、図28または図29のフローチャートに示すように、第二の記憶部12におけるコンパクションの対象は第四の記憶部14から出力された更新頻度の低いデータのみとなり、消去回数が減少することでメモリセルの劣化が防止される。
【0501】
ただし、第二の実施形態では、第一の記憶部11から「大きな単位」として出力されると決まったデータ、及び、第二及び第四の記憶部12,14から「大きな単位」として出力されると決まったデータについても、更新頻度の高いデータと更新頻度の低いデータとに分割される。原則として、更新頻度の低いデータのみをコンパクションの対象とする技術について、説明する。
【0502】
本実施形態では、「大きな単位」として、ブロック単位よりも小さいサイズのトラック単位が使用される。第三及び第五の記憶部13,15におけるデータ管理は、トラック単位で行われる。即ち、第三及び第五の記憶部13,15内のデータ管理単位はブロック単位(最小消去単位)よりも小さいサイズであるため、ブロック内に無効データが生成され、これによりコンパクション処理を行う必要が生じる。
【0503】
ここで、更新頻度の高いデータと更新頻度の低いデータとは互いに区別され、コンパクションの効率を向上させるために、第三の記憶部13の前段に、ブロック単位のFIFO構造を有する第五の記憶部15が配置される。
【0504】
第一の記憶部11から「大きな単位」として出力されると決まったデータ、及び、第二及び第四の記憶部12,14から「大きな単位」として出力されると決まったデータが、第五の記憶部15におけるFIFO処理の対象とされる場合の動作について説明する。
【0505】
A. 第五の記憶部15のFIFO処理
図34は、第五の記憶部15でのFIFO処理を示している。説明を簡略化するため、第一の記憶部11から「大きな単位」として出力されると決まったデータについて、詳細に検討する。
【0506】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、トラック追記用物理ブロックと称する)に対応するトラック管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、トラック単位に等しい「大きな単位」のデータとして、トラック追記用物理ブロック内の書き込み可能なトラック単位の領域に記憶する(ステップST1)。
【0507】
コントローラ10は、キャッシュ管理テーブルを検索し、出力対象に決まったトラック単位のデータを構成するセクタ単位のデータが、第一の記憶部11内に全て存在するか否かを判断する。
【0508】
第一の記憶部11内に全てのセクタ単位のデータが存在しない場合、コントローラ10は、第二、第三、第四、及び第五の記憶部12,13,14,15から、不足データを集める。
【0509】
トラック単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ10は、そのトラック単位のデータをトラック追記用物理ブロックに書き込む指示を、不揮発性半導体記憶素子22に与える。
【0510】
2. コントローラ10は、トラック管理テーブルにおいて、内部にトラック単位のデータが書き込まれたトラック単位の領域(複数のページ)に対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二、第三、第四、及び第五の記憶部12,13,14,15内に既に書き込まれていた、同一論理アドレス範囲内に含まれる旧データは無効データとなる。
【0511】
3. コントローラ10は、トラック追記用物理ブロック内にトラック単位の空き領域(複数の空きページ)が存在するか否かを判断する(ステップST3)。複数の空きページが検出されなかった場合、処理はステップST4に進む。複数の空きページが検出された場合、処理はステップST1に戻る。
【0512】
4. コントローラ10は、トラックFIFO管理テーブルのエントリを一つずつ後方にシフトし、トラック追記用物理ブロックの物理アドレスを、トラックFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、トラック追記用物理ブロックは、第四の記憶部14に割り当てられる。
【0513】
5.コントローラ10は、物理ブロック管理テーブルにおいて、ブロックに対応するエントリを「第三の記憶部13(使用)」に更新する。(ステップST5)。
【0514】
第五の記憶部15から第三の記憶部13へのデータ転送に際して、コントローラ10は、トラックFIFO管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体素子22に対するデータの読み出し/書き込み指示を要しない(移動処理)。
【0515】
B. 処理例1
図35は、処理例1のフローチャートを示している。
【0516】
1. コントローラ10は、物理ブロック管理テーブルを検索することによって、未使用のブロックを取得する。未使用のブロック内のデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、トラック管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST1)。
【0517】
2. コントローラ10は、トラック管理テーブルを走査することで、有効データ数が小さいブロックから順番に、トラック単位の有効データを選択する。選択された有効データはコンパクションブロックにコピーされ、トラック管理テーブルのコンパクションブロックに関連付けられたエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される(ステップST2)。
【0518】
トラック管理テーブルの走査に際して、トラックFIFO管理テーブルに物理アドレスが含まれるエントリと、トラック追記用物理ブロックに対応するエントリに関しては走査の対象とされない。即ち、第三の記憶部13は走査の対象とされ、第五の記憶部15については走査の対象とされない。
【0519】
ステップST2(コンパクション)に際して、コピーされるデータの論理アドレス範囲内に含まれる有効データが、第一、第二、及び第四の記憶部11,12,14から読み出され、コピーされるデータが有効データで上書きされても良い。コンパクションに巻き込まれた第一、第二、及び第四の記憶部11,12,14内の有効データは、無効化される。
【0520】
3. ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST3)。
【0521】
4. コントローラ10は、第三の記憶部13内のブロック数が、第三の記憶部13の記憶容量として定められた所定のブロック数以下であるか否かを判断する(ステップST4)。
【0522】
第三の記憶部13内のブロックの数が第三の記憶部13の記憶容量として定められた所定のブロック数以下である場合には、処理を終了する。第三の記憶部13内のブロックの数が第三の記憶部13の記憶容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0523】
C. 処理例2
第三の記憶部13内のブロックを単純に使用するだけでは、コンパクションが行えない場合がある。具体的には、半導体記憶装置の製品仕様としての記憶容量が、第三の記憶部13の記憶容量よりも大きく、第三及び第五の記憶部13,15の合計の記憶容量よりも小さい場合に、コンパクションが行えない場合がある。
【0524】
このような状況は、製品仕様としての記憶容量を、半導体記憶装置内部のNAND型フラッシュメモリの全容量にできるだけ近付けたいという要求から生じることがある。
【0525】
この場合に、第三の記憶部13内に存在する無効データの合計サイズ(記憶容量)がブロック単位のサイズに達しない時は、第三の記憶部13内で何度コンパクションを行っても、新たに空きブロックを生成することはできない。
【0526】
従って、このような状態になった時は例外的に、第三の記憶部13と第五の記憶部15との双方を対象としてコンパクションを行う(第五の条件)。
【0527】
図36は、処理例2のフローチャートを示している。
【0528】
1. コントローラ10は、物理ブロック管理テーブルを検索することによって、未使用のブロックを取得する。未使用のブロック内のデータを消去した後、このブロックはコンパクションブロックに割り当てられる。コントローラ10は、トラック管理テーブルから未使用のエントリを検索する。コンパクションブロックの物理アドレスは、その未使用のエントリに関連付けられる(ステップST1)。
【0529】
2. コントローラ10は、トラック管理テーブルを走査することで、有効データ数が小さいブロックから順番に、トラック単位の有効データを選択する。選択された有効データはコンパクションブロックにコピーされ、トラック管理テーブルのコンパクションブロックに関連付けられたエントリ内の論理アドレスは、コピーされたデータの論理アドレスに更新される(ステップST2)。
【0530】
トラック管理テーブルの走査に際して、トラックFIFO管理テーブルに物理アドレスが含まれるエントリに関しても走査の対象とされる。即ち、第三及び第五の記憶部13,15が走査の対象とされる。
【0531】
ステップST2(コンパクション)に際しては、コピーされるデータの論理アドレス範囲内に含まれる有効データが、第一、第二及び第四の記憶部11,12,14から読み出され、コピーされるデータが有効データで上書きされても良い。コンパクションに巻き込まれた第一、第二、及び第四の記憶部11,12,14内のデータは、無効化される。
【0532】
3. ブロック内の全てのデータが無効になった場合、コントローラ10は、そのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST3)。
【0533】
4. コントローラ10は、コンパクションブロックをトラックFIFO管理テーブルの先頭に追加する(ステップST4)。これは、第五の記憶部15内の無効データを減らすことが必要なためである。
【0534】
第五の記憶部15内の無効データが減れば、第三の記憶部13内の無効データが増加する。従って、上述の処理例1に示した通り、第三の記憶部13のみを対象としたコンパクションが適用され、これにより第三の記憶部13内の有効データが集められ、第三の記憶部13内に空きのブロックを生成することができる。
【0535】
5. コントローラ10は、第三及び第五の記憶部13,15内のブロック数が、第三及び第五の記憶部13,15の容量として定められた所定のブロック数以下であるか否かを判断する(ステップST5)。
【0536】
第三及び第五の記憶部13,15内のブロック数が第三及び第五の記憶部13,15の容量として定められた所定のブロック数以下である場合には、処理を終了する。第三及び第五の記憶部13,15内のブロック数が第三及び第五の記憶部13,15の容量として定められた所定のブロック数よりも大きい場合には、処理はステップST1に戻る。
【0537】
処理例1及び2の各ステップST1において、第一の実施形態の処理例2(図29)と同様に、トラック単位の有効データ数が最も少ない二つ以上のブロックが選択され、この有効データがコンパクションブロックにコピーされても良い。
【0538】
第二の実施形態では、コントローラ10が、第二の記憶部12、第三の記憶部13、第四の記憶部14、及び第五の記憶部15に記憶領域(複数のブロック)を割り当てることにより、不揮発性半導体記憶素子内部のデータ管理が行われるが、これに限定されるものではない。
【0539】
例えば、第四の記憶部14を設定することなく、第二の記憶部12、第三の記憶部13、及び第五の記憶部15によるデータ管理を行うこととしても良い。別の方法では、第二の記憶部12、第四の記憶部14を設定することなく、第三の記憶部13、及び第五の記憶部15によるデータ管理を行うこととしても良い。
【0540】
(3) 第三の実施形態
第三の実施形態は、実装コスト及び検証コストを下げることを目的とした、第二及び第四の記憶部12,14におけるデータ管理設定に関連する。
【0541】
図37は、第三の実施形態に係る半導体記憶装置を示している。
【0542】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で書き込みがされる。第一の記憶部11は、DRAM等の揮発性半導体記憶素子に含まれる。
【0543】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22内部において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部12は、ページ単位に等しい「小さな単位」でデータを記憶する。
【0544】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【0545】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、ページ単位に等しい「小さな単位」でデータを記憶する。
【0546】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0547】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部12,13,14へと割り当てられる。
【0548】
第三の記憶部13には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【0549】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三の記憶部13の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0550】
第二、第三、及び第四の記憶部12,13,14は、例えば、NAND型フラッシュメモリ等の不揮発性半導体記憶素子22の一以上のブロックから構成される。
【0551】
データのサイズを表す第一、第二、及び第三の単位について、これらにはホスト機器からの主データに対して半導体記憶装置内で付加される冗長データ(ECC、内部制御用フラグ等)が含まれないものとする。
【0552】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。尚、本実施形態において、コントローラ10が実現する各機能は、ハードウェア、及びソフトウェア、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、またはソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0553】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0554】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部11,12,13,14のどこに記憶されているかを管理するために、キャッシュ管理テーブル、ページ管理テーブル、ブロック管理テーブル、ページFIFO管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ10の主記憶メモリ内に展開される。
【0555】
・ キャッシュ管理テーブル
図37のキャッシュ管理テーブルは、第一の記憶部11に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。有効データの管理は、セクタ単位で実行される。
【0556】
キャッシュ管理テーブルの構成は、第一の実施形態と同様であり、図21に示す通りである。キャッシュ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0557】
・ ページ管理テーブル
図37のページ管理テーブルは、第二及び第四の記憶部12,14に記憶されるデータを、ページ単位に等しい「小さな単位」で管理する。
【0558】
ページ管理テーブルの構成は、第一の実施形態と同様であり、図22に示す通りである。ページ管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0559】
・ ブロック管理テーブル
図37のブロック管理テーブルは、第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。
【0560】
ブロック管理テーブルの構成は、第一の実施形態と同様であり、図23に示す通りである。ブロック管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0561】
・ ページFIFO管理テーブル
図37のページFIFO管理テーブルは、第四の記憶部14に割り当てられたブロック内のデータを管理する。
【0562】
ページFIFO管理テーブルの構成は、第一の実施形態と同様であり、図24に示す通りである。ページFIFO管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0563】
・ 物理ブロック管理テーブル
図37の物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。
【0564】
物理ブロック管理テーブルの構成は、第一の実施形態と同様であり、図25に示す通りである。物理ブロック管理テーブルについては、既に第一の実施形態で説明したので、ここではその説明を省略する。
【0565】
図37のコントローラ10によって実行される処理フローについて説明する。
【0566】
コントローラ10は、ホスト機器からのセクタ単位(第一の単位)のデータを、最初に第一の記憶部11に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第I節で述べた「A.第一の記憶部へのデータ蓄積処理」を適用することができる。
【0567】
コントローラ10は、第一の記憶部11に蓄積されたデータを、所定の条件に従い、「小さな単位(第一の管理単位)」で管理すべきか、または、「大きな単位(第二の管理単位)」で管理すべきか、を判断する。所定の条件は、第I節で述べた「B.第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【0568】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0569】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、同時に、ブロック単位の自然数倍のサイズである。
【0570】
本実施形態では、説明の簡略化のため、管理テーブルで使用される各単位を、下記の通りであると想定する。
【0571】
即ち、第二及び第四の記憶部12,14のデータ管理単位である「小さな単位」のサイズは、ページ単位(第二の単位)のサイズと等しく、第三の記憶部13のデータ管理単位である「大きな単位」のサイズは、をブロック単位(第三の単位)のサイズと等しい。
【0572】
しかしながら、ページを分割して管理して、「小さな単位」がセクタ単位の自然数倍のサイズとなるように、かつ、ページ単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0573】
或いは、複数のページを合わせて管理して、「小さな単位」がページ単位の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「小さな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0574】
同様に、ブロックを分割して管理して、「大きな単位」が「小さな単位」の二以上の自然数倍のサイズとなるように、かつ、ブロック単位が「大きな単位」の二以上の自然数倍のサイズとなるようにしても良い。
【0575】
或いは、複数のブロックを合わせて管理して、「大きな単位」がブロック単位の二以上の自然数倍のサイズとなるようにしても良い。
【0576】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<「小さな単位」<ページ単位(第二の単位)<ブロック単位(第三の単位)≦「大きな単位」と設定することが可能である。
【0577】
第一の記憶部11に蓄積されたデータを「小さな単位」で管理する場合には、ページ単位のデータを第四の記憶部14に転送する。第一の記憶部11に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部13に転送する。
【0578】
このデータ出力処理については、例えば、第I節で述べた「B.第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第I節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部14となる。
【0579】
A. 第四の記憶部のFIFO処理
第四の記憶部14は、既に述べたように、ブロック単位のFIFO構造を有する。図38は、第四の記憶部14でのFIFO処理を示している。
【0580】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、ページ追記用物理ブロックと称する)に対応するページ管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、ページ単位に等しい「小さな単位」のデータとして、ページ追記用物理ブロック内の書き込み可能なページに記憶する(ステップST1)。
【0581】
2. コントローラ10は、ページ管理テーブルにおいて、内部にページ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二及び第四の記憶部12,14内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【0582】
3. コントローラ10は、ページ追記用物理ブロック内に空きページが存在するか否かを判断する(ステップST3)。空きページが検出されなかった場合、処理はステップST4に進む。空きページが検出された場合、処理はステップST1に戻る。
【0583】
4. コントローラ10は、ページFIFO管理テーブルのエントリを一つずつ後方にシフトし、ページ追記用物理ブロックの物理アドレスを、ページFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、ページ追記用物理ブロックは、第四の記憶部14に割り当てられる。
【0584】
5. コントローラ10は、物理アドレスがページFIFO管理テーブルに記録されている、第四の記憶部14の全てのブロックに対して、以下の処理P1を行う(ステップST5)。
【0585】
処理P1は、コンパクションを採用している点で第一及び第二の実施形態と異なる。これは、第四の記憶部14においてブロックの使用効率が悪い場合について有効である。書き込み動作の増加を抑制するため、有効データの多いブロックについてはコンパクションの対象から除外される。
【0586】
B. 処理P1
図39は、処理P1のフローチャートを示している。図40は、処理P1を実行中の第四の記憶部14内のブロックの状態を示している。各ブロックは、複数のページから構成されている。各ページは、ページ管理テーブル中のページ利用状況を参照することにより、「有効」、「無効」、「空き」を含む三つの状態のいずれか一つに設定されている。
【0587】
1. コントローラ10は、ページFIFO管理テーブルに記録されている物理アドレスをもってページ管理テーブルを検索することで、第四の記憶部14内の全てのブロックについて、各ブロックに記憶されている有効データを数える(ステップST1)。
【0588】
2. コントローラ10は、ステップST1で数えた有効データ数が、所定の閾値以上であるブロックが存在するか否かを判断する。所定の閾値は、例えば、一つのブロック単位(「大きな単位」)の領域に記憶可能なページ単位(「小さな単位」)のデータ総数の50%に設定しても良い(ステップST2)。
【0589】
有効データ数が、所定の閾値以上のブロックが検出された場合、処理はステップST3に進む。そのようなブロックが検出されなかった場合、処理はステップST4に進む。
【0590】
3. コントローラ10は、有効データ数が所定の閾値以上のブロックを、第二の記憶部12へ移動する(ステップST3)。即ち、そのブロックの物理アドレスに関して、コントローラ10は、ページFIFO管理テーブルのエントリを無効化し、物理ブロック管理テーブルのエントリを「第二の記憶部12(使用)」に更新する。
【0591】
第四の記憶部14から第二の記憶部12へのデータ転送に際して、コントローラ10は、ページFIFO管理テーブル及び物理ブロック管理テーブルを更新するのみであり、不揮発性半導体記憶素子22に対するデータの読み出し/書き込み指示を要しない(移動処理)。
【0592】
4. コントローラ10は、第四の記憶部14において、古い割り当て順序を持つブロックから順番に有効データを選択する。選択された有効データは、消去された未使用ブロック(コンパクションブロック)にコピーされる。コントローラ10は、有効データで満たされたコンパクションブロックを、第二の記憶部12に割り当てる。(ステップST4)。
【0593】
5. コントローラ10は、第四の記憶部14において、コピーされたデータと同じ論理アドレス範囲を持つデータを無効化する。ブロック内の全てのデータが無効になった場合、コントローラ10はそのブロックを解放し、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する(ステップST5)。
【0594】
ページ追記用物理ブロック内に空きページがなくなると、コントローラ10は、物理ブロック管理テーブルを検索することによって未使用のブロックを取得する。未使用のブロックのデータを消去した後、そのブロックが新たにページ追記用物理ブロックとして割り当てられる。コントローラ10は、ページ管理テーブルの未使用のエントリを検索する。ページ追記用物理ブロックに対応する物理アドレスは、その未使用のエントリに記録される。
【0595】
第四の記憶部14からのブロックの移動に伴って、第二の記憶部12内のページ単位で管理されるブロックの数が増加する。第二の記憶部12のブロック数が許容範囲、即ち、第二の記憶部12の容量として定められた所定のブロック数を超える場合、コントローラ10は、以下の手順で、コンパクション、または、第二の記憶部12から第三の記憶部13へのデータ転送処理を実行する。
【0596】
尚、第一の実施形態と異なり、処理P1は第三の記憶部13へのデータ転送処理(デフラグメンテーション)を含まない。これは、第四の記憶部14から第二の記憶部12へのデータ転送処理を簡略化する。
【0597】
C.処理例
図41は、処理例のフローチャートを示している。図42乃至図46は、図41の処理を実行中の第二の記憶部12内のブロックの状態を示している。図42乃至図46に示されている通り、第二の記憶部12におけるブロックの割り当て順序が、コントローラ10によって管理されている。
【0598】
各ブロックは、複数のページから構成されている。各ページは、ページ管理テーブル中のページ利用状況を参照することにより、「有効」、「無効」、「空き」を含む三つの状態のいずれか一つに設定されている。
【0599】
1. 上記処理P1に従い、コントローラ10は、第四の記憶部14から第二の記憶部12へデータを転送する(ステップST1)。
【0600】
2. コントローラ10は、第二の記憶部内12のブロック数が、許容範囲を超えているか否かを判断する。許容範囲は、第二の記憶部12の容量として定められた所定のブロック数としても良い(ステップST2)。
【0601】
ブロック数が許容範囲を超えていない場合には、処理を終了する。ブロック数が許容範囲を超えている場合には、処理はステップST3に進む。
【0602】
3. コントローラ10は、特定範囲内の複数のブロックに記憶されている有効データ数(論理アドレス数)を、ページ管理テーブルを参照することにより数え、その特定範囲内に記憶されている有効データの総数が所定の閾値よりも大きいか否かを判断する(ステップST3)。
【0603】
特定範囲は、例えば、第二の記憶部12において隣接する2つのブロックを含んでいる。「隣接するブロック」とは、割り当て順序が連続する複数のブロックを意味する。図42の「窓」は、この特定範囲内のブロックを示している。「窓」の開始位置は、割り当て順序が最も古いブロックを含むように設定される。
【0604】
ステップST3における所定の閾値は、特定範囲内に含まれる複数のブロックの半数のブロックに記憶可能なページ単位のデータ総数としても良い。図42は、特定範囲内に含まれる二つのブロックを示しており、所定の閾値は、二つのブロックの半分である一つのブロックに記憶可能なページ単位のデータ総数に設定されている。
【0605】
有効データ数が所定の閾値よりも大きい場合には、処理はステップST4に進む。有効データ数が所定の閾値以下である場合には、処理はステップST7に進み、コントローラ10は、現在の「窓」に対してデフラグメンテーション及びコンパクションを実行する(図43及び図44)。
【0606】
4. コントローラ10は、より古い側からより新しい側へ、「窓」をシフトさせる(ステップST4)。具体的には、コントローラ10は、第二の記憶部12において、最も古い割り当て順序を持つブロック側から、最も新しい割り当て順序を持つブロック側へ、「窓」を一つずつシフトさせる。
【0607】
5. コントローラ10は、「窓」が第二の記憶部12において最も新しい割り当て順序を持つブロックを越えたか否かを判断する(ステップST5)。「窓」が最も新しい割り当て順序を持つブロックを越えた場合には、処理はステップST6に進む。「窓」が最も新しい割り当て順序を持つブロックを越えていない場合には、処理はステップST3に戻る。
【0608】
6. コントローラ10は、最も古い割り当て順序を持つブロック内の全ての有効データを選択し、選択された有効データをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する(デフラグメンテーション)(ステップST6)。ステップST6は、コントローラ10が第二の記憶部12内部でコンパクション対象を検出できなかった場合に実行される。
【0609】
図45に示される通り、最も古い割り当て順序を持つブロックに記憶されている有効データの論理アドレスをブロック単位(「大きな単位」)のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データが、第一、第二、第三、及び第四の記憶部11,12,13,14から集められる。
【0610】
コントローラ10は、ブロック単位のデータを第三の記憶部13に書き込む指示を、不揮発性半導体記憶素子22に与える。ブロック単位のデータを書き込んだ後、コントローラ10は最も古い割り当て順序を持つブロックを解放し、処理はステップST2に戻る。「窓」の位置は開始位置に初期化される。
【0611】
7. コントローラ10は、物理ブロック管理テーブルを検索し、未使用のブロック(コンパクションブロック)を取得する(ステップST7)。この未使用のブロックはコンパクション用に供される。ステップST7で要求される未使用のブロック数は、特定範囲に含まれるブロックの半数である。図44では、一つの未使用のブロックがコンパクション用に供される。コントローラ10は、未使用のブロック内のデータを消去する指示を、不揮発性半導体記憶素子22に与える。
【0612】
8. コントローラ10は、「窓」内に記憶されている有効データを順次選択する。「窓」内に記憶されている全ての有効データが処理されてしまった場合、「窓」よりも新しい側に位置するブロックに記憶されている有効データが、割り当て順序の順番で更に選択される(ステップST8)。
【0613】
9. コントローラ10は、選択された有効データの論理アドレスをブロック単位(「大きな単位」)のサイズでアラインすることによって得られた論理アドレス範囲内に含まれる有効データ数が、第二及び第四の記憶部12,14において所定の閾値以上である否かを判断する(ステップST9)。ステップST9における所定の閾値は、一つのブロック単位(「大きな単位」)の領域内に記憶可能なページ単位(「小さな単位」)のデータ総数の50%に設定されていても良い。
【0614】
有効データの総数が所定の閾値未満の場合には、処理はステップST10に進む。有効データの総数が所定の閾値以上の場合には、処理はステップ11に進む。
【0615】
10. コントローラ10は、図44に示される通り、選択された有効データを、コンパクションブロックにコピーする(書き直す)(ステップST10)。コピーされた有効データの論理アドレスは、ページ管理テーブルにおいてコンパクションブロックに関連付けられたエントリに新たに登録される。第二の記憶部12に割り当てられたブロックに関連付けられたエントリに元々登録されていた、コピーされた有効データの論理アドレスは、ページ管理テーブルにおいて無効化される。
【0616】
11. コントローラ10は、図43に示す通り、ブロック単位(「大きな単位」)のサイズでアラインされた論理アドレス範囲に含まれる有効データを、第一、第二、第三、及び第四の記憶部11,12,13,14から集め、選択された有効データをブロック単位に等しい「大きな単位」のデータとして、第三の記憶部13に転送する(デフラグメンテーション)(ステップST11)。
【0617】
12. コントローラ10は、ステップST10でのコンパクション、または、ステップST11でのデフラグメンテーションによって、内部の全てのデータが無効になったブロックを解放する(ステップST12)。コントローラ10は、図46に示される通り、物理ブロック管理テーブルにおけるそのブロックの状態を、「使用」から「未使用」に設定する。
【0618】
13. コントローラ10は、コンパクションブロックがページ単位の有効データで満たされたか否かを判断する(ステップST13)。コンパクションブロックが有効データで満たされていない場合には、処理はステップST8に戻る。コンパクションブロックが有効データで満たされている場合には、処理はステップST14に進む。
【0619】
ただし、ステップST8で全ての有効データが選択されてもコンパクションブロックを有効データで満たすことができない場合には、処理はステップST14に進む。この場合、空きページを持つコンパクションブロックが第二の記憶部12に割り当てられることがある。
【0620】
14. コントローラ10は、図44に示される通り、第二の記憶部12内の「窓」の直前にコンパクションブロックを挿入する(ステップST14)。即ち、コンパクションブロックは「窓」よりも古い側に挿入され、これにより、第二の記憶部12に新たに割り当てられたブロックが再びコンパクションの対象とされることを防ぐことができる。
【0621】
ページ管理テーブル及び物理ブロック管理テーブルを更新した後、処理はステップST2に戻る。処理がステップST2に戻り、新たなコンパクション処理が発動する時、図46に示される通り、「窓」の位置は現在の位置に保持される。
【0622】
本処理例では、コントローラ10は、特定範囲(「窓」)に対してのみ、コンパクションが適用可能であるか否かを判断することによって、コンパクション対象を検出するための検索処理が簡略化され、かつ、実装コスト及び検証コストの低減が可能となる。
【0623】
特定範囲に含まれるブロックの数は2つに限定されない。コントローラ10は、3つ以上のブロックを特定範囲として定義しても良い。コントローラ10は、特定範囲の有効データ数が、特定範囲に含まれるブロックの数から1を減じたブロックに記憶可能なページ単位のデータ数よりも多いか否かを判断しても良い。
【0624】
3. 適用例
上記実施形態に係る半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるSSD(Solid State Drive)に適用可能である。その場合の具体例については、後述する。
【0625】
4. むすび
第一、第二、及び第三の実施形態に係る半導体記憶装置は、更新頻度の低いデータをコンパクション処理の対象とし、これにより不揮発性半導体記憶素子内のブロックの消去回数を減少させる。更に第I節で述べたように、半導体記憶装置は、「大きな単位」と「小さな単位」という二つの管理単位を併用することにより、書き込み効率の向上を実現する。
【0626】
本発明は、上述の実施形態に限定されるものではなく、その要旨を逸脱しない範囲で、各構成要素を変形して具体化できる。また、上述の実施の形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成できる。例えば、上述の実施の形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施の形態の構成要素を適宜組み合わせてもよい。
【0627】
[III.データ管理単位と読み出し/書き込み/消去単位との関係]
1. 概要
以上、第I節及び第II節に係る半導体記憶装置についてそれぞれ説明がなされた。本節では、上述の説明で使用された第一、第二、及び第三の単位、並びに、「小さな単位」及び「大きな単位」について、具体的に説明する。
【0628】
第一の単位は、第一の記憶部11を含む揮発性または不揮発性半導体記憶素子に関してのデータ入力及び出力単位の少なくとも一方として規定される。第一の記憶部11は、第一の単位以下でデータの読み出し/書き込みを行う。第一の単位は、例えば、セクタ単位であって良い。パーソナルコンピュータ等のホスト機器は、セクタ単位で半導体記憶装置へのアクセスを実行する。
【0629】
第二の単位は、第二、第三、第四、及び第五の記憶部12,13,14,15を含む不揮発性半導体記憶素子内における、最小のデータ読み出し及び書き込み単位の少なくとも一方として規定される。
【0630】
第三の単位は、第二、第三、第四または第五の記憶部12,13,14,15を含む不揮発性半導体記憶素子内における、最小のデータ消去単位として規定される。
【0631】
第二、第三、第四及び第五の記憶部12,13,14,15がNAND型フラッシュメモリ内に設定される場合、第二の単位はページ単位であり、第三の単位はブロック単位である。
【0632】
第二及び第三の単位は、不揮発性半導体記憶素子内に設定される第二、第三、第四、及び第五の記憶部12,13,14,15に対する読み出し/書き込み/消去単位として物理的に規定される。
【0633】
一方、半導体記憶装置におけるデータ管理単位(「小さな単位」及び「大きな単位」)は、不揮発性半導体記憶素子における物理的な読み出し/書き込み/消去単位に一致していても良いし、異なっていても良い。
【0634】
以下の実施形態では、第二及び第四の記憶部12,14に対するデータ管理単位である「小さな単位」は、クラスタ単位である。クラスタ単位はセクタサイズの自然数倍のサイズであり、かつ、ページ単位はクラスタ単位の二以上の自然数倍のサイズである。クラスタ単位は、ホスト機器のフィルシステムで使用されるファイル管理単位と等しいサイズであっても良い。
【0635】
2. 実施形態
本発明の実施形態について説明する。
【0636】
図47は、本実施形態に係る半導体記憶装置を示している。
【0637】
第一の記憶部11は、ホスト機器からのデータを一時的に記憶する。そのデータは、第一の記憶部11内部において、セクタ単位(第一の単位)以下で書き込みがされる。第一の記憶部11は、例えば、DRAM等の揮発性半導体記憶素子内部に設定される。
【0638】
第二の記憶部12は、不揮発性半導体記憶素子22の複数のブロックから構成される。不揮発性半導体記憶素子22内部において、一括して読み出し/書き込みの行われる単位がページ(第二の単位)であり、一括して消去の行われる単位がブロック(第三の単位)である。ブロック単位は、ページ単位の自然数倍のサイズである。第二の記憶部12は、クラスタ単位に等しい「小さな単位」でデータを記憶する。
【0639】
第三の記憶部13は、不揮発性半導体記憶素子22の複数のブロックから構成され、ブロック単位に等しい「大きな単位」でデータを記憶する。
【0640】
第四の記憶部14は、不揮発性半導体記憶素子22の複数のブロックから構成され、クラスタ単位に等しい「小さな単位」でデータを記憶する。
【0641】
第一の記憶部11の記憶容量は、不揮発性半導体記憶素子22の1ブロック単位のサイズよりも大きく、不揮発性半導体記憶素子22の記憶容量は、半導体記憶装置(例えば、SSD)の製品仕様としての記憶容量よりも大きいと想定する。
【0642】
不揮発性半導体記憶素子22の記憶容量は、以下の通りに、第二、第三、及び第四の記憶部12,13,14へと割り当てられる。
【0643】
第三の記憶部13には、半導体記憶装置の製品仕様としての記憶容量と同じ、または、それを超える記憶容量が割り当てられる。
【0644】
第二及び第四の記憶部12,14には、不揮発性半導体記憶素子22の記憶容量から第三の記憶部13の記憶容量を差し引いた残りの記憶容量が割り当てられる。第二及び第四の記憶部12,14それぞれの記憶容量、及び、それらの割合に制限はない。
【0645】
コントローラ10は、CPUと主記憶メモリとを備え、データ管理を行うためのプログラムを動作させることができる。本実施形態において、コントローラ10が実現する各機能は、ハードウェア、及びソフトウェアのいずれか、または両者の組み合わせとして実現することができる。このような機能が、ハードウェアとして実現されるか、または、ソフトウェアとして実現されるかは、具体的な実施態様、または、システム全体に課される設計制約に依存する。
【0646】
コントローラ10の主記憶メモリが、DRAM等の揮発性半導体記憶素子で構成される場合は、第一の記憶部11を、コントローラ10の主記憶メモリ内に配置しても良い。
【0647】
コントローラ10は、ホスト機器から論理アドレスでアクセスされるデータが第一、第二、第三、及び第四の記憶部11,12,13,14のどこに記憶されているかを管理するために、キャッシュ管理テーブル、クラスタ管理テーブル、ブロック管理テーブル、クラスタFIFO管理テーブル、及び物理ブロック管理テーブルを備える。これらの管理テーブルは、半導体記憶装置の動作中にコントローラ10の主記憶メモリ内に展開される。
【0648】
・ キャッシュ管理テーブル
図47のキャッシュ管理テーブルは、第一の記憶部11に記憶されるデータを、クラスタ単位に等しい「小さな単位」で管理する。有効データの管理は、セクタ単位で実行される。
【0649】
キャッシュ管理テーブルの構成は、第II節の第一の実施形態で図21として示される通りである。ただし、本実施形態では、第一の記憶部11の1クラスタ単位の領域一つに対して1エントリとする。
【0650】
エントリ数は、第一の記憶部11に収まるクラスタ単位のデータ数、即ち、(第一の記憶部11の全容量)/(クラスタ単位のサイズ)以下とする。
【0651】
各エントリには、クラスタ単位のデータの論理アドレス、第一の記憶部11の物理アドレス、及び、対応するクラスタ単位の領域内の有効データの位置を表すセクタフラグが関連付けられている。
【0652】
・ クラスタ管理テーブル
図47のクラスタ管理テーブルは、第二の記憶部12及び第四の記憶部14に記憶されるデータを、クラスタ単位に等しい「小さな単位」で管理する。クラスタ単位は、セクタ単位の自然数倍のサイズであり、かつ、ページ単位は、クラスタ単位の二以上の自然数倍のサイズである。
【0653】
図48は、クラスタ管理テーブルの構成例を示している。
【0654】
第二及び第四の記憶部12,14の1ブロックに対して1エントリが割り当てられる。
【0655】
エントリ数は、第二及び第四の記憶部12,14に収まるブロック数に対して、更に処理の中間状態のブロックを登録できるだけの余裕を持たせた数、即ち、[(第二及び第四の記憶部12,14の全容量)/(ブロック単位のサイズ)]に余裕を持たせた数とする。
【0656】
各エントリには、第二の記憶部12または第四の記憶部14に割り当てられたブロックの物理アドレスが関連付けられている。また、各エントリには、ブロック内のクラスタ単位のデータの論理アドレスが記憶されている。
【0657】
図48では、ページ単位がクラスタ単位の二倍のサイズであると想定している。クラスタの空き状況として、各クラスタについて、「書き込み可能」(記憶領域が空いている)である状態と、「書き込み不可」(一度旧データを書き込んだが、別の記憶領域に新データが書き直されたために記憶領域が無効となっている)である状態とを、それぞれ区別できるようにしておく。
【0658】
尚、ページ境界を満たさないクラスタ単位のデータが第四の記憶部14に書き込まれる場合、同一ページ内のクラスタ単位の残りの領域に対応するクラスタの空き状況は、「書き込み不可」である状態に設定される。クラスタ単位の残りの領域が有効データを記憶していなくても、データ書き込み単位はページ単位であり不揮発性半導体記憶素子22はその残りの領域を使用することはできないため、コントローラ10は、残りの領域を無効データとして取り扱う。
【0659】
・ ブロック管理テーブル
図47のブロック管理テーブルは、第三の記憶部13に記憶されるデータを、ブロック単位に等しい「大きな単位」で管理する。ブロック管理テーブルの構成については、第II節の第一の実施形態で図23として示される通りである。
【0660】
・ クラスタFIFO管理テーブル
図47のクラスタFIFO管理テーブルは、第四の記憶部14に割り当てられたブロック内のデータを管理する。クラスタFIFO管理テーブルの構成については、第II節の第一の実施形態で図24として示される通りである。
【0661】
・ 物理ブロック管理テーブル
図47の物理ブロック管理テーブルは、不揮発性半導体記憶素子22のブロックの使用状況を管理する。物理ブロック管理テーブルの構成については、第II節の第一の実施形態で図25として示される通りである。
【0662】
図47のコントローラ10によって実行される処理フローについて説明する。
【0663】
コントローラ10は、ホスト機器からのセクタ単位(第一の単位)のデータを、最初に第一の記憶部11に書き込み、そのデータを一定期間蓄積する。このデータ蓄積処理については、例えば、第I節で述べた「A.第一の記憶部へのデータ蓄積処理」を適用することができる。
【0664】
コントローラ10は、第一の記憶部11に蓄積されたデータを、所定の条件に従い、「小さな単位(第一の管理単位)」で管理すべきか、または、「大きな単位(第二の管理単位)」で管理すべきか、を判断する。所定の条件は、第I節で述べた「B.第一の記憶部からのデータ出力処理」における第一の条件と実質的に同じであっても良い。
【0665】
「小さな単位」は、ページ単位の自然数倍のサイズである。または、ページ単位は、「小さな単位」の自然数倍のサイズである。
【0666】
「大きな単位」は、「小さな単位」の二以上の自然数倍のサイズであり、同時に、ブロック単位の自然数倍のサイズである。
【0667】
本実施形態では、第二及び第四の記憶部12,14のデータ管理単位である「小さな単位」は、セクタ単位の二以上の自然数倍のサイズであり、かつ、ページ単位は、「小さな単位」の二以上の自然数倍のサイズである。この関係を満たす「小さな単位」をクラスタ単位と称する。説明の簡略化のため、第三の記憶部13のデータ管理単位である「大きな単位」は、ブロック単位のサイズと等しいとする。
【0668】
上記単位間の関係は、例えば、セクタ単位(第一の単位)<クラスタ単位(「小さな単位」)<ページ単位(第二の単位)<ブロック単位(第三の単位)≦「大きな単位」と設定することが可能である。
【0669】
第一の記憶部11に蓄積されたデータを「小さな単位」で管理する場合には、クラスタ単位のデータを第四の記憶部14に転送する。第一の記憶部11に蓄積されたデータを「大きな単位」で管理する場合には、ブロック単位のデータを第三の記憶部13に転送する。
【0670】
このデータ出力処理については、第I節で述べた「B.第一の記憶部からのデータ出力処理」と実質的に同様である。ただし、第I節とは異なり、「小さな単位」のデータの行き先は、第四の記憶部14となる。クラスタ単位のサイズはページ単位のサイズよりも小さいため、複数のクラスタ単位のデータが巻き込まれて第四の記憶部14へ転送されても良い。
【0671】
A. 第四の記憶部のFIFO処理
第四の記憶部14は、既に述べたように、ブロック単位のFIFO構造を有する。図49は、第四の記憶部14でのFIFO処理を示している。
【0672】
1. コントローラ10は、追記的にデータを書き込むために準備されたブロック(以下、クラスタ追記用物理ブロックと称する)に対応するクラスタ管理テーブルのエントリを参照する。コントローラ10は、第一の記憶部11から出力されたデータを、クラスタ単位に等しい「小さな単位」のデータとして、クラスタ追記用物理ブロック内の書き込み可能なクラスタ単位の領域に書き込む(ステップST1)。
【0673】
コントローラ10は、キャッシュ管理テーブルを検索し、出力対象に決まったクラスタ単位のデータを構成するセクタ単位のデータが、第一の記憶部11内に全て存在するか否かを判断する。
【0674】
第一の記憶部11内に全てのセクタ単位のデータが存在しない場合、コントローラ10は、第二、第三、及び第四の記憶部12,13,14から、不足データを集める。
【0675】
ページ単位のデータを構成する全てのセクタ単位のデータが揃った後、コントローラ10は、そのクラスタ単位のデータを書き込む指示を、不揮発性半導体記憶素子22に与える。ステップST1での書き込み処理において、同一ページに記憶可能な複数のクラスタ単位のデータは共に書き込まれることが望ましい。
【0676】
2. コントローラ10は、クラスタ管理テーブルにおいて、内部にクラスタ単位のデータが書き込まれたページに対応するエントリに記録された論理アドレスを更新する(ステップST2)。第二及び第四の記憶部12,14内に既に書き込まれていた、同一論理アドレス範囲に含まれる旧データは、無効データとなる。
【0677】
3. コントローラ10は、クラスタ追記用物理ブロック内に、クラスタ単位の空き領域が存在するか否かを判断する(ステップST3)。クラスタ単位の空き領域が検出されなかった場合、処理はステップST4に進む。クラスタ単位の空き領域が検出された場合、処理はステップST1に戻る。
【0678】
4. コントローラ10は、クラスタFIFO管理テーブルのエントリを一つずつ後方にシフトし、クラスタ追記用物理ブロックの物理アドレスを、クラスタFIFO管理テーブルの先頭のエントリに加える(ステップST4)。結果として、クラスタ追記用物理ブロックは、第四の記憶部14に割り当てられる。
【0679】
5. コントローラ10は、クラスタFIFO管理テーブルに物理アドレスが記録されている、第四の記憶部14内の全てのブロックに対して、処理P1を実行する(ステップST5)。
【0680】
処理P1は、第II節で述べた図39の「B.処理P1」と実質的に同じであっても良い。ただし、有効データはクラスタ単位で管理される。
【0681】
3. むすび
半導体記憶装置におけるデータ管理単位(「小さな単位」及び「大きな単位」)は、不揮発性半導体記憶素子における物理的な読み出し/書き込み/消去単位に一致していても良いし、異なっていても良い。
【0682】
半導体記憶装置は、以下のデータ管理単位を採用しても良い。二つのデータ管理単位は、「大きな単位」のサイズが「小さな単位」のサイズの二以上の自然数倍であるという関係を満たすものとする。
【0683】
(1) 「小さな単位」のサイズはページ単位のサイズに等しく、「大きな単位」のサイズはブロック単位のサイズに等しい。
【0684】
(2) 「小さな単位」のサイズはページ単位のサイズに等しく、「大きな単位」のサイズはブロック単位よりも小さいトラック単位に等しい。
【0685】
(3) 「小さな単位」のサイズはページ単位よりも小さいクラスタ単位に等しく、「大きな単位」のサイズはブロック単位に等しい。
【0686】
(4) 「小さな単位」のサイズはページ単位よりも小さいクラスタ単位に等しく、「大きな単位」のサイズはブロック単位よりも小さいトラック単位に等しい。
【0687】
当然ながら、半導体記憶装置は、例えば、不揮発性半導体記憶素子の仕様(ページ単位のサイズ、または、ブロック単位のサイズ)、または、ホスト機器のファイル管理単位に基づき、上記複数の実施形態で説明された一定の関係を満たす他のデータ管理単位を採用しても良い。
【0688】
[IV.適用例]
上記複数の実施形態に示された半導体記憶装置に係る適用例について説明する。
【0689】
これら半導体記憶装置は、例えば、ノートブック型コンピュータ等のパーソナルコンピュータの二次記憶装置として使用されるSSDに適用される。
【0690】
図50は、SSDの構成例を示している。
【0691】
SSD100は、データ保存用の複数のNAND型フラッシュメモリ(NANDメモリ)10、データキャッシュ用または作業領域用のDRAM101、フラッシュメモリ10及びDRAM101を制御するドライブ制御回路102、及び電源回路103を備えている。
【0692】
上記実施形態の第一の記憶部11は、DRAM101内に設定されていても良い。DRAM101内に設定される第一の記憶部11は、NANDメモリ10に対するライトキャッシュとして機能する。ドライブ制御回路102は、上記実施形態のコントローラ10を構成していても良い。
【0693】
ドライブ制御回路102は、SSD100の外部に設けられる状態表示用LEDを制御するための制御信号を出力する。DRAM21の代わりに、FeRAM(Ferro electric Random Access Memory)、MRAM(Magnetic Random Access Memory)、NOR型フラッシュメモリを使用しても良い。即ち、第一の記憶領域11は、NANDメモリ10よりも高い書き込み速度を持つ不揮発性ランダムアクセスメモリ内に設定されていても良い。
【0694】
SSD100は、ATAインターフェース(ATA I/F)を介して、パーソナルコンピュータ等のホスト機器との間でデータを送受信する。SSD100は、RS232Cインターフェース(RS232C I/F)を介して、デバッグ用機器との間でデータを送受信する。
【0695】
電源回路104は、外部電源を受け、この外部電源を用いて複数の内部電源を生成する。これらの内部電源は、SSD100内の各部に供給される。電源回路103は、外部電源の立ち上がりを検知して、パワーオンリセット信号を生成する。パワーオンリセット信号は、ドライブ制御回路102に送られる。
【0696】
NANDメモリ10は、複数のブロックから構成されている。それぞれのブロックは、データ消去の最小単位である。図51は、NANDメモリ10内の一つのブロックの構成例を示している。
【0697】
各ブロックは、X方向に沿って順に配列された(m+1)個のNANDストリングを備えている(mは、0以上の整数)。(m+1)個のNANDストリングにそれぞれ含まれる選択トランジスタST1は、ドレインがビット線BL0〜BLmに接続され、ゲートが選択ゲート線SGDに共通接続されている。選択トランジスタST2は、ソースがソース線SLに共通接続され、ゲートが選択ゲート線SGSに共通接続されている。
【0698】
各メモリセルトランジスタMTは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタMTは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。
【0699】
メモリセルトランジスタMTは、1ビットを記憶するように構成されていても良い(SLC:Single Level Cell)し、2ビット以上のデータを記憶するように構成されていても良い(MLC:Multi Level Cell)。
【0700】
各NANDストリングにおいて、(n+1)個のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。即ち、複数のメモリセルトランジスタMTは、隣接するもの同士で拡散領域(ソース領域若しくはドレイン領域)を共有するような形でY方向に直列接続される。
【0701】
最もドレイン側に位置するメモリセルトランジスタMTから順に、制御ゲート電極がワード線WL0〜WLnにそれぞれ接続されている。従って、ワード線WL0に接続されたメモリセルトランジスタMTのドレインは選択トランジスタST1のソースに接続され、ワード線WLnに接続されたメモリセルトランジスタMTのソースは選択トランジスタST2のドレインに接続されている。
【0702】
ワード線WL0〜WLnは、第三の単位内のNANDストリング間で、メモリセルトランジスタMTの制御ゲート電極を共通に接続している。つまり、第三の単位内において同一行にあるメモリセルトランジスタMTの制御ゲート電極は、同一のワード線WLに接続される。この同一のワード線WLに接続される(m+1)個のメモリセルトランジスタMTはページとして取り扱われ、このページごとに読み出し/書き込みが行われる。
【0703】
ビット線BL0〜BLmは、第三の単位間で、選択トランジスタST1のドレインを共通に接続している。つまり、複数の第三の単位間内において同一列にあるNANDストリングは、同一のビット線BLに接続される。
【0704】
上記各実施形態における第二、第三、第四、及び第五の記憶部12,13,14,15は、(複数の)NANDメモリ10内に設定されている。複数の記憶部の各々は、複数のNANDメモリ10に亘って設定されていても良い。別な場合では、複数の記憶部の各々は、別々のNANDメモリ10内に設定されていても良い。更に、それぞれのNANDメモリ10は異なる性能を有していても良い。例えば、第四の記憶部14がSLC型NANDメモリ内に設定され、他の記憶部がMLC型NANDメモリ内に設定される等しても良い。
【0705】
複数のNANDメモリ10は、ドライブ制御回路102に並列接続されている。並列接続されるNANDメモリ10のブロックは同時に消去されても良く、SSD100における最小の消去単位である拡張ブロック単位を構成していても良い。並列接続されるNANDメモリ10の複数のページは同時に書き込み及び読み出しされても良く、SSD100における最小の書き込み/読み出し単位である拡張ページ単位を構成していても良い。
【0706】
メモリセルトランジスタMTは、浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型等、電荷蓄積層としての窒化膜界面に電子をトラップさせることで閾値調整可能な構造であっても良い。MONOS構造のメモリセルトランジスタMTについても同様に、1ビットを記憶するように構成されていても良いし、2ビット以上のデータを記憶するように構成されていても良い。
【0707】
図52は、1個のメモリセルトランジスタに2ビットの記憶を行う4値データ記憶方式での閾値分布の例を示している。
【0708】
4値データ記憶方式では、上位ページデータ“x”と下位ページデータ“y”で定義される4値データ“xy”の何れか一つをメモリセルに保持可能である。4値データは、“11”、“01”、“00”、及び“10”である。データ“11”(消去状態)は、メモリセルトランジスタMTの閾値電圧が負の状態である。
【0709】
下位ページデータの書き込み動作においては、下位ページデータ“y”の書き込みによって、データ“11”が選択的にデータ“10”にプログラムされる。上位ページデータの書き込み前において、データ“10”の閾値分布は、データ“01”とデータ“00”の閾値分布の中間程度に位置しており、上位ページデータの書き込み後の閾値分布よりブロードであっても良い。
【0710】
上位ページデータの書き込み動作においては、上位ページデータ“x”の書き込みによって、データ“11”が選択的にデータ“01”にプログラムされ、データ“10”が選択的にデータ“00”にプログラムされる。
【0711】
多値データ記憶法式を適用する場合、メモリセルトランジスタMTの閾値分布を細かく制御する必要があり、メモリセルトランジスタMTの劣化の影響を受け易い。従って、半導体記憶装置内の不揮発性半導体記憶素子が多値データ記憶法式を採用する場合、書き込み効率を向上させ、消去回数の増加を抑制することは特に有効である。
【0712】
また、図52に示すように、下位ページデータのみ書き込まれた状態の閾値分布と上位ページデータまで書き込み済みの状態の閾値分布とが異なる場合、上位ページのプログラム実行途中に電源断等が発生すると、既に書き込み済みの下位ページのデータが破壊される可能性がある。
【0713】
この問題に対応するため、「小さな単位」のデータが追記的に書き込まれる第四の記憶部14については、擬似SLCブロックによって構成されていても良い。擬似SLCブロックは、下位ページのみをデータ書き込みに使用するブロックのことである。この設定は下位ページデータの破壊を防止する。更に、下位ページのプログラムは細かい制御を必要としないため、書き込み速度が向上する。
【0714】
第四の記憶部14が擬似SLCブロックによって構成される場合、第二の記憶部12において、擬似SLCブロックと通常ブロック(MLCブロック)とが互いに混在することになる。擬似SLCブロックの記憶容量は、MLCブロックの記憶容量の半分である。従って、第二の記憶部12のコンパクション処理では、擬似SLCブロック内の有効データがMLCブロックにコピーされる。
【0715】
図53は、ドライブ制御回路の構成例を示している。
【0716】
ドライブ制御回路102は、データアクセス用バス104、第1の回路制御用バス105、及び第2の回路制御用バス106を備えている。
【0717】
第1の回路制御用バス105には、ドライブ制御回路102全体を制御するプロセッサ107が接続されている。また、第1の回路制御用バス105には、各管理プログラム(FW:firmware)のブート用プログラムが格納されたブートROM108がROMコントローラ109を介して接続されている。また、第1の回路制御用バス105には、電源回路103からのパワーオンリセット信号を受けて、リセット信号及びクロック信号を各部に供給するクロックコントローラ110が接続されている。
【0718】
第2の回路制御用バス106は、第1の回路制御用バス105に接続されている。第2の回路制御用バス106には、状態表示用LEDにステータス表示用信号を供給するパラレルIO(PIO)回路111、RS232Cインターフェースを制御するシリアルIO(SIO)回路112が接続されている。
【0719】
ATAインターフェースコントローラ(ATAコントローラ)113、第1のECC(Error Check and Correct)回路114、NANDコントローラ115、及びDRAMコントローラ119は、データアクセス用バス104と第1の回路制御用バス105との両方に接続されている。ATAコントローラ113は、ATAインターフェースを介してホスト装置との間でデータを送受信する。データアクセス用バス104には、データ作業領域として使用されるSRAM120がSRAMコントローラ121を介して接続されている。
【0720】
NANDコントローラ115は、4つのNANDメモリ10とのインターフェース処理を行うNAND I/F118、第2のECC回路117、及びNANDメモリ−DRAM間のアクセス制御を行うDMA転送制御用DMAコントローラ116を備えている。
【0721】
図54は、プロセッサの構成例を示している。
【0722】
プロセッサ107は、データ管理部122、ATAコマンド処理部123、セキュリティ管理部124、ブートローダ125、初期化管理部126、デバッグサポート部127を備えている。
【0723】
データ管理部122は、NANDコントローラ115、第1のECC回路114を介して、NANDメモリ−DRAM間のデータ転送、NANDチップに関する各種機能を制御する。
【0724】
ATAコマンド処理部123は、ATAコントローラ113、及びDRAMコントローラ119を介して、データ管理部122と協動してデータ転送処理を行う。セキュリティ管理部124は、データ管理部122及びATAコマンド処理部123と協動して各種のセキュリティ情報を管理する。ブートローダ125は、パワーオン時、各管理プログラム(FW)をNANDメモリ10からSRAM120にロードする。
【0725】
初期化管理部126は、ドライブ制御回路102内の各コントローラ及び回路の初期化を行う。デバッグサポート部127は、外部からRS232Cインターフェースを介して供給されたデバッグ用データを処理する。
【0726】
図55は、SSDを搭載したポータブルコンピュータの例を示している。
【0727】
ポータブルコンピュータ200は、本体201と、表示ユニット202とを備えている。表示ユニット202は、ディスプレイハウジング203と、このディスプレイハウジング203に収容された表示装置204とを備えている。
【0728】
本体201は、筐体205と、キーボード206と、ポインティングデバイスであるタッチパッド207とを備えている。筐体205内部には、メイン回路基板、ODD(Optical Disk Device)ユニット、カードスロット、SSD100等が収容されている。
【0729】
カードスロットは、筐体205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部208が設けられている。ユーザは、この開口部208を通じて筐体205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0730】
SSD100は、従来のHDDの置き換えとして、ポータブルコンピュータ200内部に実装された状態として使用しても良いし、ポータブルコンピュータ200が備えるカードスロットに挿入した状態で、追加デバイスとして使用しても良い。
【0731】
図56は、SSDを搭載したポータブルコンピュータのシステム構成例を示している。
【0732】
ポータブルコンピュータ200は、CPU301、ノースブリッジ302、主記憶メモリ303、ビデオコントローラ304、オーディオコントローラ305、サウスブリッジ309、BIOS−ROM310、SSD100、ODDユニット311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)311、及びネットワークコントローラ312等を備えている。
【0733】
CPU301は、ポータブルコンピュータ200の動作を制御するために設けられたプロセッサであり、SSD100から主記憶メモリ303にロードされるオペレーティングシステム(OS)を実行する。ODDユニット311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも一つの処理の実行を可能にした場合に、CPU301は、それらの処理の実行をする。
【0734】
CPU301は、BIOS−ROM310に格納されたシステムBIOS(Basic Input Output System)を実行する。システムBIOSは、ポータブルコンピュータ200内のハードウェア制御のためのプログラムである。
【0735】
ノースブリッジ302は、CPU301のローカルバスとサウスブリッジ309との間を接続するブリッジデバイスである。ノースブリッジ302には、主記憶メモリ303をアクセス制御するメモリコントローラも内蔵されている。
【0736】
ノースブリッジ302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ304との通信、及びオーディオコントローラ305との通信を実行する機能を有している。
【0737】
主記憶メモリ303は、プログラムやデータを一時的に記憶し、CPU301の作業領域として機能する。主記憶メモリ303は、例えば、DRAMから構成される。
【0738】
ビデオコントローラ304は、ポータブルコンピュータ200のディスプレイモニタ(LCD)317として使用される表示ユニットを制御するビデオ再生コントローラである。
【0739】
オーディオコントローラ305は、ポータブルコンピュータ200のスピーカ319を制御するオーディオ再生コントローラである。
【0740】
サウスブリッジ309は、LPC(Low Pin Count)バス上の各デバイス、及びPCI(Peripheral Component Interconnect)バス上の各デバイスを制御する。サウスブリッジ309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインターフェースを介して制御する。
【0741】
ポータブルコンピュータ200は、セクタ単位でSSD100へのアクセスを行う。ATAインターフェースを介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がSSD100に入力される。
【0742】
サウスブリッジ309は、BIOS−ROM310、及びODDユニット311をアクセス制御するための機能も有している。
【0743】
EC/KBC311は、電力管理のためのエンベデッドコントローラと、キーボード(KB)314及びタッチパッド207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0744】
EC/KBC311は、ユーザによるパワーボタンの操作に応じてポータブルコンピュータ200の電源をON/OFFする機能を有している。ネットワークコントローラ312は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0745】
上記実施形態の半導体記憶装置は、SSDに限らず、例えば、SD(登録商標)カードに代表されるメモリカードとして構成することも可能である。半導体記憶装置をメモリカードとして構成する場合、ポータブルコンピュータに限らず、携帯電話、PDA(Personal Digital Assistant)、デジタルスチルカメラ、デジタルビデオカメラ等、各種電子機器に対して適用可能である。
【産業上の利用可能性】
【0746】
本発明の半導体記憶装置は、SSD等のパーソナルコンピュータの二次記憶装置及びSD(登録商標)カード等のメモリカードに有効である。
【特許請求の範囲】
【請求項1】
半導体記憶装置に対するアクセス単位である第一の単位以下でデータの書き込みを行う半導体記憶素子内に設定される第一の記憶領域と、
第二の単位でデータの書き込みを行い、前記第二の単位の二以上の自然数倍である第三の単位でデータの消去を行う不揮発性半導体記憶素子内に設定される第二、第三、及び第四の記憶領域と、
複数のデータを前記第一の単位で前記第一の記憶領域に記憶する第一の処理と、
前記第一の記憶領域から出力されるデータを、前記第一の単位の二以上の自然数倍かつ前記第三の単位よりも小さい第一の管理単位で前記第四の記憶領域に記憶する第二の処理と、
前記第一の記憶領域から出力されるデータを、前記第一の管理単位の二以上の自然数倍である第二の管理単位で前記第三の記憶領域に記憶する第三の処理と、
前記第四の記憶領域内の前記第三の単位の領域を選択し、前記選択された領域を前記第二の記憶領域に移動する第四の処理と、
前記第四の記憶領域内のデータを選択して前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーし、前記第三の単位の前記領域を前記第二の記憶領域に割り当てる第五の処理と、
前記第二の記憶領域内のデータを選択し、前記選択されたデータを前記第二の記憶領域において前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーする第六の処理と、
を実行するコントローラと、
を具備することを特徴とする半導体記憶装置。
【請求項2】
前記コントローラは、前記第二の処理において、
前記第一の管理単位のデータを構成し、かつ、前記第一の記憶領域内に記憶されていないデータを前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記第一の記憶領域内に記憶されているデータと、前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第一の管理単位のデータへと統合する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項3】
前記コントローラは、前記第三の処理において、
前記第二の管理単位のデータを構成し、かつ、前記第一の記憶領域内に記憶されていないデータを前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記第一の記憶領域内に記憶されているデータと、前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第二の管理単位のデータへと統合する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項4】
前記コントローラは、前記不揮発性半導体記憶素子を構成する前記第三の単位の複数の領域を、前記第二、第三、及び第四の記憶領域それぞれに割り当てることを特徴とする請求項1に記載の半導体記憶装置。
【請求項5】
前記コントローラは、前記第一の記憶領域に空き領域が存在しないと判断した場合に、前記第二及び第三の処理の少なくとも一方を実行することを特徴とする請求項1に記載の半導体記憶装置。
【請求項6】
前記コントローラは、前記第一の処理において、
前記第一の単位のデータの論理アドレスを前記第一の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲に対応するエントリが前記第一の記憶領域内に存在するか否かを判断し、
前記エントリが存在すると判断した場合に、前記第一の単位のデータを前記第一の記憶領域内の前記エントリに対応する領域に記憶する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項7】
前記コントローラは、
前記第一の処理において、前記エントリが存在しないと判断した場合に、未使用のエントリが前記第一の記憶領域内に存在するか否かを判断し、
前記未使用のエントリが前記第一の記憶領域内に存在しないと判断した場合に、前記第二及び第三の処理の少なくとも一方を実行する、ことを特徴とする請求項6に記載の半導体記憶装置。
【請求項8】
前記コントローラは、
前記第一の記憶領域から出力されるべきデータの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲内に含まれ、かつ、前記第一の記憶領域内に記憶されている前記第一の管理単位のデータを計数し、
計数された前記第一の管理単位のデータの合計が所定の閾値未満である場合に、前記第二の処理を実行し、
計数された前記第一の管理単位のデータの合計が所定の閾値以上である場合に、前記第三の処理を実行する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項9】
前記コントローラは、前記第四の記憶領域における割り当て順序を、前記第三の単位のFIFO構造で管理することを特徴とする請求項1に記載の半導体記憶装置。
【請求項10】
前記コントローラは、
前記第四の記憶領域内の複数の有効及び無効データによって占有される前記第三の単位の領域の合計が許容範囲を超える場合に、前記第四及び第五の処理の少なくとも一方を実行する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項11】
前記コントローラは、前記第四の処理において、
有効データの合計が所定の閾値以上である前記第三の単位の領域を選択し、
前記第三の単位の前記選択された領域を、前記第四の記憶領域から、前記第二の記憶領域に割り当てる、
ことを特徴とする請求項10に記載の半導体記憶装置。
【請求項12】
前記コントローラは、前記第五の処理において、
前記第四の処理を実行した後、最も古い割り当て順序を持つ前記第三の単位の領域から順番に、前記第四の記憶領域内の有効データを連続して選択する、
ことを特徴とする請求項11に記載の半導体記憶装置。
【請求項13】
前記コントローラは、
前記第二の記憶領域から出力されるべき前記第一の管理単位の有効データを選択し、前記選択された有効データを含むデータを、前記第二の管理単位で前記第三の記憶領域に記憶する第七の処理を、更に実行することを特徴とする請求項1に記載の半導体記憶装置。
【請求項14】
前記コントローラは、前記第七の処理において、
前記選択されたデータの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲に含まれるデータを前記第一、第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記選択されたデータと、前記第一、第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第二の管理単位のデータへと統合する、
ことを特徴とする請求項13に記載の半導体記憶装置。
【請求項15】
前記コントローラは、
前記第二の記憶領域内の複数の有効及び無効データによって占有される前記第三の単位の領域の合計が許容範囲を超える場合に、前記第六及び第七の処理の少なくとも一方を実行する、
ことを特徴とする請求項13に記載の半導体記憶装置。
【請求項16】
前記コントローラは、
前記第二の記憶領域内において、前記第三の単位の複数の領域を含む窓の範囲内で前記第一の管理単位の有効データを計数し、
前記窓内の有効データの合計が所定の閾値を超える場合は、前記第二の記憶領域において古い割り当て順序側から新しい割り当て順序側へ窓をシフトし、
前記窓内の有効データの合計が所定の閾値以下である場合は、前記窓内の有効データに対して、前記第六及び第七の処理の少なくとも一方を実行する、
ことを特徴とする請求項15に記載の半導体記憶装置。
【請求項17】
前記所定の閾値は、前記窓内の前記第三の単位の領域より一つ少ない前記第三の単位の領域内に記憶可能なデータの合計に等しいことを特徴とする請求項16に記載の半導体記憶装置。
【請求項18】
前記コントローラは、前記第七の処理において、
前記窓内の有効データの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲内に含まれ、かつ、前記第二及び第四の記憶領域内に記憶されている有効データの合計を計数し、
計数された有効データの合計が所定の閾値以上の場合に、前記第七の処理の対象として有効データを選択する、
ことを特徴とする請求項16に記載の半導体記憶装置。
【請求項19】
前記コントローラは、前記第六の処理において、
前記第七の処理を実行した後、前記窓内の前記第三の単位の複数の領域から前記第二の記憶領域内において新しい割り当て順序側へと順番に、連続して有効データを選択する、
ことを特徴とする請求項16に記載の半導体記憶装置。
【請求項20】
前記コントローラは、前記第六の処理において、
有効データによって書き込まれた前記第三の単位の領域を、前記窓よりも古い割り当て順序側に挿入する、
ことを特徴とする請求項19に記載の半導体記憶装置。
【請求項21】
前記コントローラは、前記窓が前記第二の記憶領域において最も新しい割り当て順序側に到達する場合に、
最も古い割り当て順序を持つ前記第三の単位の領域内の前記第一の管理単位の全ての有効データを選択し、
前記選択された有効データを含むデータを、前記第二の管理単位で前記第三の記憶領域に記憶する、
ことを特徴とする請求項20に記載の半導体記憶装置。
【請求項22】
前記コントローラは、前記第二の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第一の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項4に記載の半導体記憶装置。
【請求項23】
前記コントローラは、前記第四の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第一の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項4に記載の半導体記憶装置。
【請求項24】
前記コントローラは、前記第三の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第二の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項4に記載の半導体記憶装置。
【請求項25】
前記第二の単位のサイズは、前記第一の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項26】
前記第一の管理単位のサイズは、前記第二の単位のサイズの二以上の自然数倍であり、かつ、前記第三の単位のサイズは、前記第一の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項27】
前記第二の管理単位のサイズは、前記第三の単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項28】
前記第二の管理単位のサイズは、前記第二の単位のサイズの二以上の自然数倍であり、かつ、前記第三の単位のサイズは、前記第二の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項29】
前記第一の管理単位のサイズは、前記第二の単位のサイズに等しいことを特徴とする請求項1に記載の半導体記憶装置。
【請求項30】
前記第二の管理単位のサイズは、前記第三の単位のサイズに等しいことを特徴とする請求項1に記載の半導体記憶装置。
【請求項31】
前記揮発性半導体記憶素子はDRAMであり、前記不揮発性半導体記憶素子はNAND型フラッシュメモリであることを特徴とする請求項1に記載の半導体記憶装置。
【請求項32】
前記不揮発性半導体記憶素子は、一つのメモリセルに複数ビットのデータをプログラム可能な前記第三の単位の複数のMLC(Multi Level Cell)領域を含むことを特徴とする請求項1に記載の半導体記憶装置。
【請求項33】
前記不揮発性半導体記憶素子は、一つのメモリセルに複数ビットのデータをプログラム可能な前記第三の単位の複数のMLC(Multi Level Cell)領域と、一つのメモリセルに単一ビットのデータをプログラム可能な複数のSLC(Single Level Cell)領域と、を含み、
前記コントローラは、前記複数のSLC領域を前記第四の記憶領域に割り当て、前記複数のMLC領域を前記第三の記憶領域に割り当てる、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項34】
前記コントローラは、
前記第四の処理において、前記第一の管理単位の有効データを記憶している前記SLC領域を、前記第四の記憶領域から前記第二の記憶領域に移動し、
前記第二の記憶領域内において、前記複数のSLC領域に記憶されている前記第一の管理単位の有効データを選択し、
前記選択された有効データを、前記第二の記憶領域において前記第二の単位の複数の空き領域を持つ前記MLC領域にコピーする、
ことを特徴とする請求項33に記載の半導体記憶装置。
【請求項1】
半導体記憶装置に対するアクセス単位である第一の単位以下でデータの書き込みを行う半導体記憶素子内に設定される第一の記憶領域と、
第二の単位でデータの書き込みを行い、前記第二の単位の二以上の自然数倍である第三の単位でデータの消去を行う不揮発性半導体記憶素子内に設定される第二、第三、及び第四の記憶領域と、
複数のデータを前記第一の単位で前記第一の記憶領域に記憶する第一の処理と、
前記第一の記憶領域から出力されるデータを、前記第一の単位の二以上の自然数倍かつ前記第三の単位よりも小さい第一の管理単位で前記第四の記憶領域に記憶する第二の処理と、
前記第一の記憶領域から出力されるデータを、前記第一の管理単位の二以上の自然数倍である第二の管理単位で前記第三の記憶領域に記憶する第三の処理と、
前記第四の記憶領域内の前記第三の単位の領域を選択し、前記選択された領域を前記第二の記憶領域に移動する第四の処理と、
前記第四の記憶領域内のデータを選択して前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーし、前記第三の単位の前記領域を前記第二の記憶領域に割り当てる第五の処理と、
前記第二の記憶領域内のデータを選択し、前記選択されたデータを前記第二の記憶領域において前記第二の単位の空き領域を持つ前記第三の単位の領域にコピーする第六の処理と、
を実行するコントローラと、
を具備することを特徴とする半導体記憶装置。
【請求項2】
前記コントローラは、前記第二の処理において、
前記第一の管理単位のデータを構成し、かつ、前記第一の記憶領域内に記憶されていないデータを前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記第一の記憶領域内に記憶されているデータと、前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第一の管理単位のデータへと統合する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項3】
前記コントローラは、前記第三の処理において、
前記第二の管理単位のデータを構成し、かつ、前記第一の記憶領域内に記憶されていないデータを前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記第一の記憶領域内に記憶されているデータと、前記第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第二の管理単位のデータへと統合する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項4】
前記コントローラは、前記不揮発性半導体記憶素子を構成する前記第三の単位の複数の領域を、前記第二、第三、及び第四の記憶領域それぞれに割り当てることを特徴とする請求項1に記載の半導体記憶装置。
【請求項5】
前記コントローラは、前記第一の記憶領域に空き領域が存在しないと判断した場合に、前記第二及び第三の処理の少なくとも一方を実行することを特徴とする請求項1に記載の半導体記憶装置。
【請求項6】
前記コントローラは、前記第一の処理において、
前記第一の単位のデータの論理アドレスを前記第一の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲に対応するエントリが前記第一の記憶領域内に存在するか否かを判断し、
前記エントリが存在すると判断した場合に、前記第一の単位のデータを前記第一の記憶領域内の前記エントリに対応する領域に記憶する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項7】
前記コントローラは、
前記第一の処理において、前記エントリが存在しないと判断した場合に、未使用のエントリが前記第一の記憶領域内に存在するか否かを判断し、
前記未使用のエントリが前記第一の記憶領域内に存在しないと判断した場合に、前記第二及び第三の処理の少なくとも一方を実行する、ことを特徴とする請求項6に記載の半導体記憶装置。
【請求項8】
前記コントローラは、
前記第一の記憶領域から出力されるべきデータの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲内に含まれ、かつ、前記第一の記憶領域内に記憶されている前記第一の管理単位のデータを計数し、
計数された前記第一の管理単位のデータの合計が所定の閾値未満である場合に、前記第二の処理を実行し、
計数された前記第一の管理単位のデータの合計が所定の閾値以上である場合に、前記第三の処理を実行する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項9】
前記コントローラは、前記第四の記憶領域における割り当て順序を、前記第三の単位のFIFO構造で管理することを特徴とする請求項1に記載の半導体記憶装置。
【請求項10】
前記コントローラは、
前記第四の記憶領域内の複数の有効及び無効データによって占有される前記第三の単位の領域の合計が許容範囲を超える場合に、前記第四及び第五の処理の少なくとも一方を実行する、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項11】
前記コントローラは、前記第四の処理において、
有効データの合計が所定の閾値以上である前記第三の単位の領域を選択し、
前記第三の単位の前記選択された領域を、前記第四の記憶領域から、前記第二の記憶領域に割り当てる、
ことを特徴とする請求項10に記載の半導体記憶装置。
【請求項12】
前記コントローラは、前記第五の処理において、
前記第四の処理を実行した後、最も古い割り当て順序を持つ前記第三の単位の領域から順番に、前記第四の記憶領域内の有効データを連続して選択する、
ことを特徴とする請求項11に記載の半導体記憶装置。
【請求項13】
前記コントローラは、
前記第二の記憶領域から出力されるべき前記第一の管理単位の有効データを選択し、前記選択された有効データを含むデータを、前記第二の管理単位で前記第三の記憶領域に記憶する第七の処理を、更に実行することを特徴とする請求項1に記載の半導体記憶装置。
【請求項14】
前記コントローラは、前記第七の処理において、
前記選択されたデータの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲に含まれるデータを前記第一、第二、第三、及び第四の記憶領域の少なくとも一つから読み出し、
前記選択されたデータと、前記第一、第二、第三、及び第四の記憶領域の少なくとも一つから読み出されたデータとを、前記第二の管理単位のデータへと統合する、
ことを特徴とする請求項13に記載の半導体記憶装置。
【請求項15】
前記コントローラは、
前記第二の記憶領域内の複数の有効及び無効データによって占有される前記第三の単位の領域の合計が許容範囲を超える場合に、前記第六及び第七の処理の少なくとも一方を実行する、
ことを特徴とする請求項13に記載の半導体記憶装置。
【請求項16】
前記コントローラは、
前記第二の記憶領域内において、前記第三の単位の複数の領域を含む窓の範囲内で前記第一の管理単位の有効データを計数し、
前記窓内の有効データの合計が所定の閾値を超える場合は、前記第二の記憶領域において古い割り当て順序側から新しい割り当て順序側へ窓をシフトし、
前記窓内の有効データの合計が所定の閾値以下である場合は、前記窓内の有効データに対して、前記第六及び第七の処理の少なくとも一方を実行する、
ことを特徴とする請求項15に記載の半導体記憶装置。
【請求項17】
前記所定の閾値は、前記窓内の前記第三の単位の領域より一つ少ない前記第三の単位の領域内に記憶可能なデータの合計に等しいことを特徴とする請求項16に記載の半導体記憶装置。
【請求項18】
前記コントローラは、前記第七の処理において、
前記窓内の有効データの論理アドレスを前記第二の管理単位にアラインすることで論理アドレス範囲を計算し、
前記論理アドレス範囲内に含まれ、かつ、前記第二及び第四の記憶領域内に記憶されている有効データの合計を計数し、
計数された有効データの合計が所定の閾値以上の場合に、前記第七の処理の対象として有効データを選択する、
ことを特徴とする請求項16に記載の半導体記憶装置。
【請求項19】
前記コントローラは、前記第六の処理において、
前記第七の処理を実行した後、前記窓内の前記第三の単位の複数の領域から前記第二の記憶領域内において新しい割り当て順序側へと順番に、連続して有効データを選択する、
ことを特徴とする請求項16に記載の半導体記憶装置。
【請求項20】
前記コントローラは、前記第六の処理において、
有効データによって書き込まれた前記第三の単位の領域を、前記窓よりも古い割り当て順序側に挿入する、
ことを特徴とする請求項19に記載の半導体記憶装置。
【請求項21】
前記コントローラは、前記窓が前記第二の記憶領域において最も新しい割り当て順序側に到達する場合に、
最も古い割り当て順序を持つ前記第三の単位の領域内の前記第一の管理単位の全ての有効データを選択し、
前記選択された有効データを含むデータを、前記第二の管理単位で前記第三の記憶領域に記憶する、
ことを特徴とする請求項20に記載の半導体記憶装置。
【請求項22】
前記コントローラは、前記第二の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第一の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項4に記載の半導体記憶装置。
【請求項23】
前記コントローラは、前記第四の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第一の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項4に記載の半導体記憶装置。
【請求項24】
前記コントローラは、前記第三の記憶領域に割り当てられた前記第三の単位の領域の内で、前記第二の管理単位のデータが全て無効化された前記第三の単位の領域を解放することを特徴とする請求項4に記載の半導体記憶装置。
【請求項25】
前記第二の単位のサイズは、前記第一の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項26】
前記第一の管理単位のサイズは、前記第二の単位のサイズの二以上の自然数倍であり、かつ、前記第三の単位のサイズは、前記第一の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項27】
前記第二の管理単位のサイズは、前記第三の単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項28】
前記第二の管理単位のサイズは、前記第二の単位のサイズの二以上の自然数倍であり、かつ、前記第三の単位のサイズは、前記第二の管理単位のサイズの二以上の自然数倍であることを特徴とする請求項1に記載の半導体記憶装置。
【請求項29】
前記第一の管理単位のサイズは、前記第二の単位のサイズに等しいことを特徴とする請求項1に記載の半導体記憶装置。
【請求項30】
前記第二の管理単位のサイズは、前記第三の単位のサイズに等しいことを特徴とする請求項1に記載の半導体記憶装置。
【請求項31】
前記揮発性半導体記憶素子はDRAMであり、前記不揮発性半導体記憶素子はNAND型フラッシュメモリであることを特徴とする請求項1に記載の半導体記憶装置。
【請求項32】
前記不揮発性半導体記憶素子は、一つのメモリセルに複数ビットのデータをプログラム可能な前記第三の単位の複数のMLC(Multi Level Cell)領域を含むことを特徴とする請求項1に記載の半導体記憶装置。
【請求項33】
前記不揮発性半導体記憶素子は、一つのメモリセルに複数ビットのデータをプログラム可能な前記第三の単位の複数のMLC(Multi Level Cell)領域と、一つのメモリセルに単一ビットのデータをプログラム可能な複数のSLC(Single Level Cell)領域と、を含み、
前記コントローラは、前記複数のSLC領域を前記第四の記憶領域に割り当て、前記複数のMLC領域を前記第三の記憶領域に割り当てる、
ことを特徴とする請求項1に記載の半導体記憶装置。
【請求項34】
前記コントローラは、
前記第四の処理において、前記第一の管理単位の有効データを記憶している前記SLC領域を、前記第四の記憶領域から前記第二の記憶領域に移動し、
前記第二の記憶領域内において、前記複数のSLC領域に記憶されている前記第一の管理単位の有効データを選択し、
前記選択された有効データを、前記第二の記憶領域において前記第二の単位の複数の空き領域を持つ前記MLC領域にコピーする、
ことを特徴とする請求項33に記載の半導体記憶装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図51】
【図52】
【図53】
【図54】
【図55】
【図56】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図51】
【図52】
【図53】
【図54】
【図55】
【図56】
【公開番号】特開2010−250846(P2010−250846A)
【公開日】平成22年11月4日(2010.11.4)
【国際特許分類】
【出願番号】特願2010−134863(P2010−134863)
【出願日】平成22年6月14日(2010.6.14)
【分割の表示】特願2009−535161(P2009−535161)の分割
【原出願日】平成20年12月25日(2008.12.25)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成22年11月4日(2010.11.4)
【国際特許分類】
【出願日】平成22年6月14日(2010.6.14)
【分割の表示】特願2009−535161(P2009−535161)の分割
【原出願日】平成20年12月25日(2008.12.25)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]