<本発明の各実施形態に共通する構成>
以下に、本発明に係るメモリシステムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本発明が限定されるものではない。図1は、本発明の各実施形態に係るメモリシステムを適用可能なコンピュータ200の一例の外観を示す。図1に例示されるコンピュータ200は、携帯可能なように小型軽量に構成された、所謂ポータブルコンピュータである。コンピュータ200は、本体201と、表示ユニット202とを備える。表示ユニット202は、ディスプレイハウジング203と、このディスプレイハウジング203に収容された表示装置204とを備える。
本体201は、筐体205と、キーボード206と、ポインティングデバイスであるタッチパッド207とを備える。筐体205内部には、メイン回路基板、ODD(Optical Disk Drive)ユニット、カードスロット、SSD100などが収容される。メイン回路基板は、CPU(Central Processing Unit)やROM(Read Only Memory)、RAM(Random Access Memory)といった、このコンピュータ200の主要な部品が搭載される。ODDユニットは、CD(Compact Disk)やDVD(Digital Versatile Disk)といった光ディスクに対するデータの読み書きを行う。
カードスロットは、筐体205の周壁に隣接して設けられる。周壁には、カードスロットに対向する開口部208が設けられる。ユーザは、この開口部208を通じて筐体205の外部から追加デバイスをカードスロットに挿抜することが可能である。
SSD(Solid State Drive)100は、書き換え可能な不揮発性半導体メモリを用いた記憶装置である。SSD100は、従来のHDD(Hard Disk Drive)の置き換えとして、例えばOS(Operating System)や各種プログラムなどを記憶するために、コンピュータ200内部に実装された状態として使用することができる。これに限らず、SSD100は、コンピュータ200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
図2は、本発明の各実施形態に適用可能なSSD100の一例の構成を示す。SSD100は、概略的には、コントローラ部130、インタフェース部120、バッファメモリ121および不揮発性メモリ部122を有する。これらコントローラ部130、インタフェース部120、バッファメモリ121および不揮発性メモリ部122は、バス110などの信号線で接続され、互いにデータのやりとりを行うことができるようにされている。
インタフェース部120は、ホスト機器との通信を行う。上述した図1およびこの図2の例では、ホスト機器としてコンピュータ200が接続されている。以下では、コンピュータ200をホスト機器200として記述する。インタフェース部120は、ホスト機器200からのリード、ライト、フラッシュなどのコマンドを受付け、コントローラ部130にコマンド受信を通知する。また、インタフェース部120は、コントローラ部130からの指示に従い、ホスト機器200との間でデータを送受信する。
バッファメモリ121は、DRAM(Dynamic RAM)などの揮発性メモリで構成される。バッファメモリ121は、インタフェース部120がホスト機器200と送受信を行うデータや、不揮発性メモリ部122に対して読出しや書込みを行うデータを一時的に格納する。これに限らず、SSD100における各種の管理情報をバッファメモリ121に格納してもよい。
不揮発性メモリ部122は、書き換え可能で、電源を遮断しても記憶内容が消去されないメモリであって、例えばホスト機器200から送信されたユーザデータが格納される。これに限らず、不揮発性メモリ部122は、ユーザデータ以外にも、例えばSSD100における各種管理用の情報を格納することもできる。
不揮発性メモリ部122は、不揮発性メモリによる記憶媒体であるNANDフラッシュメモリのチップ123、123、…と、NANDフラッシュメモリの制御を行うNANDコントローラ(図示しない)とを有する。各チップ123、123、…は、独立してアクセス制御が可能な記憶領域であるプレーンをそれぞれ複数、持つことができる。図3は、不揮発性メモリ部122のチップ123の一例の構成をより詳細に示す。この例では、チップ123は、プレーン#0およびプレーン#1の2のプレーンを有し、各プレーンは、所定の記憶容量を有する複数のブロック#0、#1、…、#nを有する。
このブロックは、チップ123における物理的な記憶領域としての物理ブロックであって、チップ123のデータ消去の単位である。なお、複数の物理ブロックを纏めて1の論理ブロックとして扱う形態も存在する。この場合は、この論理ブロックがデータ消去の単位となる。以下では、これら物理ブロックと論理ブロックとを、単にブロックとして統一的に表現する。
チップ123のあるブロックにデータを書き込む際には、ブロック単位で当該ブロックからデータを消去して、新しいデータを当該ブロックに書き込む。したがって、チップ123に対するデータの書き込みは、実質的にはブロック単位で行われる。
NANDフラッシュメモリのチップ123において、各プレーン同士は、チップ内で並列的にアクセス可能な構成となっている。例えば、図3の左側に(a)として例示されるように、番号が#0とされたチップ123において、プレーン#0に属するブロック#0と、プレーン#1に属するブロック#2には、並列アクセスが可能である。一方、図3の右側に(b)として例示されるように、同じ番号#0のチップ123において、プレーン#0に属するブロック#0およびブロック#2には、並列アクセスができない。
NANDフラッシュメモリにおいて、総記憶容量は、ホスト機器200に対して提供する記憶容量よりも多くの容量を用意する。そのため、ある時点では、有効なデータが記憶されているブロックと記憶されていないブロックとが存在する。有効なデータが記憶されていないブロックを、フリーブロックと呼ぶ。また、有効なデータが記憶されているブロックを、アクティブブロックと呼ぶ。
説明は図2に戻り、コントローラ部130は、ブロック管理部131、データ読出部132、データ書込部133、データ管理部134およびNANDドライバ135の各機能を有する。コントローラ部130は、インタフェース部120を介したホスト機器200との通信の制御や、バッファメモリ121および不揮発性メモリ部122に格納するデータの管理と読み書きの制御などを行う。
コントローラ部130が有する各機能は、回路として組み込まれたSoC(System On a Chip)として構成することができる。これに限らず、コントローラ部130のハードウェアとして汎用プロセッサを用い、これらの機能を汎用プロセッサ上で動作するソフトウェアで実現してもよい。
コントローラ部130において、データ管理部134は、ホスト機器200との間で使用される、データの記憶位置を示すアドレスと、不揮発性メモリ部122における実際の記憶領域であるブロック位置との対応関係を管理する。アドレスとブロックとの関係は、データの書き込み時に動的に関連付けられる。
図4を用いて、データ管理部134におけるアドレスとブロックとの関連付けについて説明する。例えば、図4の左側に(a)として例示されるように、ホスト機器200から指定されるデータのアドレスがアドレスA0、A1、…とされ、不揮発性メモリ部122におけるあるプレーンのブロック位置がブロックB0、B1、…とされているものとする。また、1のアドレスで指定されるデータのサイズは、1のブロックの記憶容量と等しいものとする。
ここで、アドレスA1に有効なデータが記憶されており、不揮発性メモリ部122においてアドレスA1として実際に使用されている記憶領域がブロックB1である場合について考える。この場合、ブロックB1がアクティブブロックであり、例えば隣のブロックB2がフリーブロックである。
この図4(a)の状態において、ホスト機器200からアドレスA1のデータを上書きするコマンドを受信したものとする。同一のアドレス上のデータを上書きする場合、ブロック単位でデータの上書き処理が行われる。データ管理部134は、フリーブロック(ブロックB2とする)を1個確保し、確保したフリーブロックに対してホスト機器200から受信したデータを書き込む。フリーブロックに対してデータを書き込んだら、ホスト機器200から指定されたアドレスA1と、データを実際に書き込んだブロックB2とを関連付ける。
その結果、図4の右側に(b)として例示するように、ブロックB2がアクティブブロックとなる。また、上書き前にアドレスA1のデータが記憶されていたブロックB1では、記憶データが無効とされるため、ブロックB1がフリーブロックとなる。このように、SSDにおいては、同じアドレスA1として指定されたデータであっても、実際の記憶領域として使用されるブロックは、データの書き込み毎に変化する。
説明は図2に戻り、データ読出部132は、不揮発性メモリ部122からのデータの読み出しを制御する。データ書込部133は、不揮発性メモリ部122に対するデータの書き込みを制御する。NANDドライバ135は、データ読出部132やデータ書込部133の要求に従い、不揮発性メモリ部122からデータ読み出しや書き込みを行うように、不揮発性メモリ部122が有するNANDコントローラ(図示しない)の制御を行う。
ブロック管理部131は、フリーブロック管理部140およびフリーブロック選択部150を有し、不揮発性メモリ部122におけるフリーブロックの管理と、データ書き込み時に使用するフリーブロックの選択とを行う。フリーブロック管理部140は、有効データが記憶されていないブロックであるフリーブロックを示す情報であるフリーブロックリストを保持し、管理する。例えば、不揮発性メモリ部122のフリーブロックを管理する構造体として、フリーブロックリスト1410、1411、…、141m、…、141nをプレーン毎に保持する。不揮発性メモリ部122のフリーブロックは、当該フリーブロックが属するプレーンに対応するフリーブロックリスト141mにより、フリーブロック管理部140で管理される。
なお、フリーブロックリスト141mは、フリーブロック管理部140が管理するフリーブロックリスト1410〜141nのうち、任意のフリーブロックリストを表すものとする。
フリーブロックリスト141mは、例えば、各フリーブロックに対応するブロック識別子を含むブロック情報をノードとして、フリーブロックリストに繋ぐ形態をとることができる。フリーブロックリストにフリーブロックを繋ぐ順序は、単純なFIFO(First In First Out)としてもよいし、フリーブロックの消去回数でソートした順番で繋いでもよい。また、並列書込みを行わない複数のプレーンについては、1個のフリーブロックリストで纏めてフリーブロックを管理してもよい。
フリーブロック選択部150は、不揮発性メモリ部122に対するデータの書き込み時に、本発明による順序規則に従い不揮発性メモリ部122のフリーブロックを選択する。フリーブロック選択部150は、順序規則演算部151、位置情報更新部152、順序規則保持部153および位置情報記憶部154を有する。
順序規則保持部153は、順序規則を保持する。順序規則とは、フリーブロックリストの順序を定めるための情報であり、テーブル形式や演算形式などにより定義される。順序規則を、テーブル形式や演算形式以外の他の形式で定義してもよい。順序規則保持部153は、例えば、図示されない記憶装置や記憶領域の一部によって構成されていてもよい。順序規則演算部151は、順序規則に基づいて順序列を演算する。順序列は、順序規則に基づいて生成されるフリーブロックリストの順序を表す情報である。例えば、順序列は、フリーブロックリストの識別子が順番に並べられた情報である。順序列と、後述する位置情報とからフリーブロックリストを選択する。
位置情報記憶部154は、位置情報を記憶する。位置情報は、順序規則に従いフリーブロックリストの順序列を作成した場合の順序列上の位置を示す情報である。換言すれば、位置情報は、順序規則に基づいて定まる各フリーブロックリストの順番を示す情報である。位置情報更新部152は、位置情報記憶部154に記憶される位置情報の更新を行う。例えば、位置情報更新部152は、順序規則演算部151でフリーブロックリストが選択された後に、位置情報を、次に選択するフリーブロックリストを示す位置に更新する。
次に、本発明の各実施形態によるデータの書き込み処理について、図5のフローチャートを用いて概略的に説明する。本発明の各実施形態では、データ書き込み時の転送能力を確保するため、ホスト機器200から受信した書き込みデータを一時的にバッファメモリ121に格納する。そして、バッファメモリ121に十分な量のデータが格納されてから、バッファメモリ121から書き込みデータを読み出して複数のフリーブロックに対して並列書き込みを行う。
図5において、インタフェース部120がホスト機器200からライトコマンドを待機し、ライトコマンドを受信すると(ステップS10)、インタフェース部120は、コントローラ部130に対してライトコマンドの受信を通知する(ステップS11)。ライトコマンドは、書き込みデータを書き込むアドレスを示す情報を含む。
このライトコマンド受信の通知を受けて、次のステップS12で、コントローラ部130のデータ書込部133は、バッファメモリ121上にホスト機器200から送信される書き込みデータを受信する領域を確保する。そして、データ書込部133は、バッファメモリ121上に確保した当該領域に対してホスト機器200から送信された書き込みデータを受信するように、インタフェース部120に対して指示を出す。次のステップS13で、インタフェース部120は、ホスト機器200から送信された書き込みデータを受信して、受信した書き込みデータを、ステップS12でバッファメモリ121上に確保された領域に格納する。
次のステップS14で、データ書込部133は、バッファメモリ121上に格納された書き込みデータのデータ量を確認し、バッファメモリ121上に所定量の書き込みデータが格納されたか否かを判定する。若し、バッファメモリ121に格納された書き込みデータのデータ量が所定量未満であれば、処理はステップS10に戻され、ホスト機器200からのコマンド待機状態とされる。
一方、ステップS14で、バッファメモリ121に所定量の書き込みデータが格納されたと判定されたら、処理はステップS15に移行される。ステップS15で、データ書込部133は、バッファメモリ121に格納された書き込みデータを書き込むために必要なフリーブロック数を計算する。
次のステップS16で、データ書込部133は、ステップS15で計算された必要数のフリーブロックを、フリーブロック管理部140に対して要求する。フリーブロックがフリーブロック管理部140に要求されると、処理は、本発明の各実施形態における特徴である、ステップS17に移行される。ステップS17では、データ書込部133からの要求を受けて、フリーブロック管理部140は、要求された数の並列書き込みが可能なフリーブロックの組をフリーブロックリスト1410、1411、…、141m、…、141nから抽出する。そして、抽出されたフリーブロックを示す情報をデータ書込部133に返す。
次のステップS18で、データ書込部133は、バッファメモリ121上の書き込みデータを、フリーブロック管理部140から取得した情報に示されるフリーブロックに対して並列書き込みを行うように、NANDドライバ135に要求する。次のステップS19で、NANDドライバ135は、不揮発性メモリ部122が有する図示されないNANDコントローラを制御して、データ書込部133から要求された書き込みデータの並列書き込みを実行する。
ステップS19でフリーブロックに対する書き込みデータの書き込みが行われると、次のステップS20で、データ書込部133は、書き込んだデータのアドレスとブロックとの対応関係を全てデータ管理部134に登録する。次のステップS21で、データ管理部134は、登録前すなわちステップS19によるデータの書き込み前に、書き込みデータの書き込みを指示されたアドレスに関連付けられていたアクティブブロックをフリーブロックとしてフリーブロック管理部140に通知する。
次のステップS22で、フリーブロック管理部140は、ステップS21にてデータ管理部134から通知されたフリーブロックが属するプレーンに対応するフリーブロックリスト141mを特定し、特定されたフリーブロックリスト141mに対して、データ管理部134から通知されたフリーブロックを繋ぐ。
<第1の実施形態>
次に、本発明の第1の実施形態について説明する。以降では、本第1の実施形態の特徴であるフリーブロック選択処理(図5のステップS17)について詳細に述べる。
フリーブロック管理部140が並列書き込みが可能なフリーブロックの組を選択する際には、フリーブロック管理部140が管理するフリーブロックリスト1410、1411、…、141m、…、141nの中から所定の順序規則に従いフリーブロックリスト141mを選択し、選択したフリーブロックリスト141mからフリーブロックを取得する。
順序規則は、順序規則に基づき演算された順序列に示される順にフリーブロックリスト1410、1411、…、141m、…、141nからフリーブロックリスト141mを選択すれば、並列書込み可能な組のフリーブロックが取得できる規則であることが望ましい。
一例として、図6に示されるように、不揮発性メモリ部122の有するチップ数が4であって、各チップ#0〜チップ#3内のプレーン数が2の場合について考える。この場合、全体としてプレーンP0〜プレーンP7の8のプレーンが存在し、それら8のプレーン間では、全て並列書込みが可能である。この場合、各プレーンからフリーブロックを1個ずつ選択すれば、最大で8並列での書き込みが可能である。
なお、図6において、それぞれの升はブロックを示し、升中の数字は、ブロックに動的に対応付けられたアドレスを表す。また、図中の矢印は、データのブロックに対する書き込み方向またはフリーブロックの取得方向を示す。これらは、特に記載のない限り、以降の同様の図について共通である。
例えば、プレーンP0〜P7にそれぞれ対応するフリーブロックリスト141m、141m+1、…、141m+7に対して「0」から「7」までの識別子を対応付けて所定の順序に並べ、式(1)のような、識別子の列で表現される長さ8の順序規則を作る。順序規則は、例えば予め作成し、順序規則テーブル153に保持しておく。
{0,1,2,3,4,5,6,7} …(1)
この式(1)に示される順序規則を巡回的に繰り返せば、どの位置からフリーブロックリストの選択を開始したとしても、最大で8並列の書き込みが可能なフリーブロックを選択できる。例えば、順序規則上の識別子「4」で示される位置からフリーブロックリストの選択が始まった場合、式(2)に示されるように、識別子「4」の位置から選択を開始し、識別子「7」の位置から識別子「0」の位置に巡回的に戻り、さらに識別子「3」の位置まで順次、フリーブロックリストを選択すればよい。
{4,5,6,7,0,1,2,3} …(2)
次に、並列書き込みが可能なプレーンの組に制約がある場合について考える。このような場合、並列書き込みのできないプレーン同士の順序規則における順序列上の距離ができる限り離れるように、順序規則を作成すればよい。
一例として、図7に示されるように、不揮発性メモリ部122の有するチップ数が4であり、各チップ123、123、…内のプレーン数が2であって、各チップ123、123、…は、2個ずつ組で2個のバンク3001(バンクB0)およびバンク3002(バンクB1)を構成している場合について考える。以下では、このような構成を、バンク・チップ・プレーン構成と呼ぶ。バンク・チップ・プレーン構成では、同じバンクに属するチップは並列書込みできない制約がある。したがって、この場合の最大並列度、すなわち並列書き込みが可能な最大のブロック数は、4となる。
なお、図7において、各チップ123、123、…は、バンク内でチップC0、C1として区別されており、各チップ123、123、…内のプレーンは、プレーンP0、P1として区別される。
図7において、各プレーンを、「B(バンク番号)C(バンク内チップ番号)P(チップ内プレーン番号)」と表記する。例えば、バンクB0に属するチップC0内のプレーンP0は、「B0C0P0」と表記される。このとき、例えば下記の式(3)に示す順序規則を作ることが考えられる。式(3)に示される順序規則では、それぞれのバンクで1のチップを選択することで、最大で4並列の書き込みを実現している。
{B0C0P0,B0C0P1,B1C0P0,B1C0P1,B0C1P0,B0C1P1,B1C1P0,B1C1P1} …(3)
この式(3)の順序規則では、プレーンP0からフリーブロックの取得が始まる場合には、最大で4並列書き込み可能にフリーブロックを取得することができる。例えば、プレーンB1C0P0からフリーブロックの取得を開始する場合、プレーンB1C0P0、プレーンB1C0P1、プレーンB0C0P0、プレーンB0C0P1の順にフリーブロックを取得できる。
一方、プレーンP1から始まる場合には、並列書き込み可能なフリーブロックを、3並列までしか取得できない。例えば、プレーンB0C0P1からフリーブロックの取得を開始する場合、プレーンB0C0P1、プレーンB1C0P0、プレーンB1C0P1の順に取得したフリーブロックは並列書き込みが可能である。しかしながら、次のプレーンB0C1P0は、最初に選択を行ったプレーンB0C0P1と同一のバンクの異なるチップのプレーンであるため、当該プレーンB0C1P0に属するフリーブロックは、プレーンB0C0P1から取得したフリーブロックと並列書き込みができない。
この並列書込み可能なプレーンの組に制約がある場合のように、常に最大並列度でのフリーブロック取得が可能な順序規則とはならない場合がある。
次に、本第1の実施形態によるフリーブロック取得処理について、より詳細に説明する。図8は、ブロック管理部131による並列書込みが可能なフリーブロックの一例の選択処理を示すフローチャートである。この図8のフローチャートによる処理は、上述した図5のフローチャートにおけるステップS17の処理に対応するものである。なお、以下の説明において、図5のステップS16でデータ書込部133から要求された必要数rのフリーブロックが要求されたものとする。また、順序規則は、予め所定の順序規則に決められているものとする。
先ず、ブロック管理部131は、位置情報記憶部154から位置情報Posを取得して(ステップS30)、取得した位置情報Posで示される位置のフリーブロックリスト141mからフリーブロック選択を開始した場合の最大並列度qを計算する(ステップS31)。
最大並列度qは、上述した並列書き込みが可能なプレーンの組に対する制約と、フリーブロック選択処理を開始する位置とに依存する。換言すれば、最大並列度qは、不揮発性メモリ部122におけるチップ123、123、…の構成や、上述したバンクなどによる各チップ123、123、…の運用に依存する。
この制約や運用に関する情報は、ブロック管理部131が有する図示されないROM(Read Only Memory)や、不揮発性メモリ部122に予め記憶しておくことができる。これに限らず、当該制約や運用をホスト機器200側から動的に設定できる場合は、ホスト機器200からインタフェース部120を介して供給されてもよい。ブロック管理部131は、位置情報Posと、当該制約や運用を示す情報とに基づき、最大並列度qを計算する。
次のステップS32で、ブロック取得数rbおよびリスト選択回数iがそれぞれ0に初期化され、処理がステップS33に移行される。
ステップS33では、ブロック管理部131は、順序規則演算部151に位置情報Posを渡す。順序規則演算部151は、フリーブロック管理部140に管理されているフリーブロックリスト1411、1412、…、141m、…、141nから、位置情報Posと、順序規則テーブル153に保持された所定の順序規則とに従い、リスト選択回数iに対応する1のフリーブロックリスト141mを選択する。以下、特に記載のない限り、このリスト選択回数iに対応するフリーブロックリスト141mを、フリーブロックリストL(i)と記述する。選択されたこのフリーブロックリストL(i)は、ブロック管理部131に返される。
ブロック管理部131は、順序規則演算部151から返されたフリーブロックリストL(i)にフリーブロックが残っているか否かを調べる。調べた結果、若し、当該フリーブロックリストL(i)にフリーブロックが残っていないと判断されたら、処理はステップS37に移行される。この場合には、当該フリーブロックリストL(i)からフリーブロックを取得できないことになる。
一方、ステップS34で、当該フリーブロックリストL(i)にフリーブロックが残っていると判断されたら、処理はステップS35に移行される。ステップS35では、フリーブロック選択部150がフリーブロックリストL(i)からフリーブロックB(i)を選択する。ブロック管理部131は、選択された当該フリーブロックB(i)を取得する。そして、次のステップS36で、ブロック管理部131は、ブロック取得数rbを1だけ増加させる。次のステップS37で、フリーブロック選択部150は、リスト選択回数iを1だけ増加させてリスト選択回数を計数する。
次のステップS38で、位置情報更新部152は、位置情報記憶部154に保持されている位置情報Posを、順序規則による順序列上の次の位置を示す位置情報Posに更新する。このとき、当該次の位置が順序規則による順序列の最終位置を超えた場合には、次の位置を順序規則による順序列の先頭に設定する。
処理はステップS39に移行され、ブロック管理部131は、ブロック取得数rbが要求されたフリーブロック必要数rに達したか否かを判定する。若し、達したと判定されたら、図8のフローチャートによる一連の処理が終了され、処理が図5のステップS18に移行される。
一方、ステップS39で、ブロック取得数rbがフリーブロック必要数rに達していないと判定されたら、処理はステップS40に移行される。ステップS40で、ブロック管理部131は、リスト選択回数iが最大並列度qに達したか否かを判定する。若し、達していないと判定したら、処理はステップS33に戻され、次のフリーブロックリストL(i)に関する処理が行われる。
一方、リスト選択回数iが最大並列度qに達したと判定した場合には、図8のフローチャートによる一連の処理が終了され、処理が図5のステップS18に移行される。すなわち、この場合には、取得したフリーブロック数は要求された必要数に達していない一方で、フリーブロック管理部140に管理されるフリーブロックリスト1411、1412、…、141m、…、141nから、これ以上、並列書き込みが可能な組のフリーブロックが取得できない。そのため、フリーブロックの選択処理を終了させる。
このように、本第1の実施形態によれば、示される順にフリーブロックリストを選択すれば並列書き込みが可能なフリーブロックの組が取得できるように、順序規則を作成している。そのため、ホスト機器から特定のアドレスに対しての書き込みが繰り返された場合でも、順序規則に従いフリーブロックを取得していくことで、プレーン間でのブロック取得回数の偏りが抑制され、特定のブロックに消去回数が集中することを避けることができる。
また、複数の異なるアドレスへの書き込みデータがバッファメモリに蓄積された場合に、特定のプレーンへの書き込み集中を避け、できる限り多くの複数のプレーンに対して並列書込みを行うことができるため、転送性能を良好に維持することが可能である。
なお、上述では、フリーブロックやアクティブブロックなど管理単位がチップ固有の物理的なブロックであるものとして説明したが、これはこの例に限定されない。例えば、図9に例示されるように、複数の物理的なブロックを常に纏めて使用する場合、当該複数のブロックを纏めた論理的なブロックを管理単位としてよい。
図9において、バンク、チップおよびプレーンの構成は、上述した図7の構成と同様である。一方、図9では、バンクB0およびバンクB1の各バンク内において、チップC0およびチップC1の番号が対応するプレーン同士が纏められて管理されている。バンクB0の例では、チップC0のプレーンP0と、チップC1のプレーンP0とが纏められて、プレーンP0’として管理される。同様に、チップC0のプレーンP1と、チップC1のプレーンP1とが纏められて、プレーンP1’として管理される。
この場合、バンクB0のプレーンP0’およびプレーンP1’と、バンクB1のプレーンP0’およびプレーンP1’とで、4並列の書き込みが可能である。これらバンクB0のプレーンP0’およびプレーンP1’と、バンクB1のプレーンP0’およびプレーンP1’とに対して、順序規則を適用することができる。
<第2の実施形態>
次に、本発明の第2の実施形態について説明する。本第2の実施形態では、できる限り多くの並列書き込みが可能な組のフリーブロックが取得できる順序で、全てのフリーブロックリストを一度ずつ並べた順序規則を、順序規則の小周期と定義する。そして、この小周期を所定の順序で並べることで、より長周期の新たな順序規則を作成する。
上述した第1の実施形態で示したフリーブロック選択方法では、書き込みデータのアドレスのパターンによっては、フリーブロック数およびアクティブブロック数に、フリーブロックリスト間で偏りが生じる可能性がある。これは、あるアドレスAを上書きした際に、書き込み前にアドレスAに対応付けられていたアクティブブロックB1と、書き込むために取得したフリーブロックB2とが、同じプレーンに属しているとは限らないからである。
より具体的には、これらアクティブブロックB1とフリーブロックB2とが異なるプレーンに属していた場合、フリーブロックリストにおけるフリーブロック数は、アクティブブロックB1が属していたプレーンに対応するフリーブロックリストでは1個増加し、フリーブロックB2が属していたプレーンに対応するフリーブロックリストでは1個減少する。
一般的な利用方法では書き込むアドレスが確率的に分散するため、フリーブロックリスト間でのフリーブロック数の偏りはそれほど大きくならないと考えられる。しかし、上述の第1の実施形態で示した順序規則では、書込み要求のアドレスに特定のパターンが存在する場合に、特定のフリーブロックリストにフリーブロックが集中し、他のフリーブロックリストでフリーブロックが枯渇する場合が起こり得る。この場合、ブロック管理部131でフリーブロックの選択を行う際の並列度が下がり、転送性能が劣化する。
例えば、SSD100がホスト機器200に提供する容量全てに対して先頭アドレスから書込みを行った場合(全面シーケンシャルライトと呼ぶ)、ある特定周期のアドレスに対応するアクティブブロックが特定プレーンに集中する。図10(a)を用いて説明すると、プレーン数が8の場合、アドレスが「ブロックサイズ×8」に対応するアクティブブロックがプレーン0に集中する。図10(a)の例では、例えばアドレスA0、A8、A16、…に対応するアクティブブロックがプレーンP0に集中する。これは、他のプレーンについても同様である。
ここで、アドレスが「ブロックサイズ×8」となる書込みを繰り返した場合について考える。この場合、書き込みに使用されるフリーブロック(図中に斜線を付して示す)は、プレーンP0〜P7の全プレーンから選択される。一方、書き込み後に解放されるアクティブブロックは、プレーンP0に集中する。したがって、図10(b)に例示されるように、アクティブブロックが解放された後のフリーブロックも、プレーンP0に集中することになる。
このように、特定プレーンに属するアクティブブロックに対応付けられたアドレスに周期性が存在すると、その周期でアドレスを上書きする書き込みパターンに対して、書き込み時の並列度の確保や、ブロック間での消去回数の平準化を実現することが困難になるおそれがある。
本第2の実施形態は、上述した第1の実施形態による順序規則に対し、できるだけ周期性を弱めるように、あるいは、周期が大きくなるように変更を施す。図11は、本第2の実施形態による順序規則の作成方法の例を概略的に示すフローチャートである。
先ず、上述した第1の実施形態と同様にして順序規則を作成し、これを小周期とする(ステップS50)。次に、ステップS50で作成された小周期内で順序規則による順序を一部入れ替えて、他の小周期を作成する(ステップS51)。最後に、ステップS50で作成された小周期と、ステップS51で作成された他の小周期とを所定の順序で複数並べて新たな順序規則とする(ステップS52)。この新たな順序規則は、元の順序規則に対してより周期の長い、長周期順序規則である。つまり、長周期順序規則は、複数の異なる小周期の順序規則に基づいて生成される。
ここで、ステップS52では、小周期および他の小周期をそれぞれ複数回使用してもよいし、同じ小周期を複数回連続的に使用してもよい。また、ステップS51において、小周期内でフリーブロックリストを入れ替えて作成できる他の小周期は多数存在するが、ステップS52で新しい順序規則を作成する際に、考え得る全ての小周期を使用する必要はない。
次に、本第2の実施形態を、より具体的な例を用いて説明する。先ず、第1の例として、並列書き込みが可能なプレーン数が2の場合について説明する。なお、以下では適宜、プレーンをプレーンPx(xは0以上の整数)または単にPx、アドレスをアドレスAxまたは単にAxのように記述する。
図12(a)を参照し、並列書き込みが可能なプレーン数が2の場合、順序規則の小周期は、次に小周期Aおよび小周期Bとして示される2種類がある。各小周期の順序規則は、例えば予め作成して順序規則テーブル153に保持しておくことができる。
小周期A:{P0,P1}
小周期B:{P1,P0}
これら小周期Aおよび小周期Bを並べて、新しい順序規則を作る。図12(b)は、小周期Aおよび小周期Bをそれぞれ4回ずつ使用し、8個の小周期により長さ16の順序規則を作成した例を示す。図12(c)を参照し、この場合の順序規則は、式(4)のようになる。位置情報更新部152は、この小周期Aおよび小周期Bを並べた新しい順序規則に従い位置情報を更新する。
{P0,P1, P1,P0, P1,P0, P0,P1, P1,P0, P0,P1, P0,P1, P1,P0} …(4)
この式(4)による順序規則に従い、上述した全面シーケンシャルライトを行った場合、各ブロックに対してアドレスが図13(a)に例示されるように割り当てられる。すなわち、各プレーンP0およびP1の先頭のブロックには、順序規則に従いプレーンP0、プレーンP1の順序でアドレスA0、A1が割り当てられる。次のブロックには、プレーンP1、プレーンP0の順序でアドレスA2、A3が割り当てられる。以降、順序規則に従い、順次アドレスA4、A5、…が割り当てられる。
この後に、アドレスが「ブロックサイズ×k」となる周期的な書込みを行った場合の例を、図13(b)、図13(c)および図13(d)に示す。図13(b)はk=2の場合の例、図13(c)はk=4の場合の例、図13(d)はk=8の場合の例である。
k=2の場合、全面シーケンシャルライト時に割り当てられたアドレスのうちアドレスA0、A2、A4、…に対応するブロックが解放される。k=4の場合、全面シーケンシャルライト時に割り当てられたアドレスのうちアドレスA0、A4、A8、…に対応するブロックが解放される。また、k=8の場合、全面シーケンシャルライト時に割り当てられたアドレスのうちアドレスA0、A8、A16、…に対応するブロックが解放される。
k=2、k=4およびk=8のそれぞれについて、解放されるブロックが属するプレーンで示すと、下記の式(5)〜式(7)のようになる。
k=2:{P0,P1,P1,P0,P1,P0,P0,P1,…} …(5)
k=4:{P0,P1,P1,P0,…} …(6)
k=8:{P0,P1,…} …(7)
これら式(5)〜式(7)に示されるように、並列書き込みが可能なプレーン数の倍数の周期で書き込みを行っても、書き込み前のアクティブブロックが特定のプレーンに偏ることが抑制される。但し、アドレスの周期が順序規則の長さの倍数となった場合(この例の場合、k=16)には、書き込み前のアクティブブロックが特定のプレーンに偏る現象が発生する。
次に、順序規則演算部151における順序規則の演算方法について説明する。順序規則演算部151の形態としては、予め作成された順序規則を保持したテーブルを用いるテーブル方式と、演算により順序規則を算出する演算方式との2種類が考えられる。
テーブル方式は、順序規則を持つ小周期を並べて作成した新たな順序規則を順序規則テーブルに予め保持しておく。順序規則演算部151は、フリーブロックリスト選択の際に、この順序規則テーブル153上で、位置情報Posが示す順序規則における順序列上の位置を参照し、フリーブロックリストの識別子を検索する。
演算方式は、順序規則演算部151が、位置情報Posから演算によりフリーブロック識別子を生成して順序規則を作成する方法である。例えば前記のプレーン数が2、長さが16の順序規則の例では、下記の式(8)に例示する演算でプレーンを決定できる。
なお、式(8)は、プログラム言語として一般的に用いられるC言語の記法に準じて演算手順を記述している。なお、C言語では2進数表記はできないが、式(8)においては、仮に"0b"を接頭辞として付加することにより、その後に連なる"0"および"1"が2進数を表すものとしている。例えば、"0b10010110"は、16進表記の"0x96"と同等となる。式(8)において、コロン(:)で区切られて各行の先頭に記述される数字は、行番号を表す。行番号「1」〜「5」で示される5行を、纏めて式(8)とする。ダブルスラッシュ(//)の後は、各行の説明である。
1:pattern = 0b10010110; // 小周期の順序を表す2進数
2:y = pos / 2; // 何番目の小周期か
3:x = pos % 2 // 小周期の中で何番目か
4:period_id = ( pattern >> y ) & 0b1; // どの小周期を使用するか
5:plane_id = period_id ^ x; // 小周期識別子と小周期内での順序との排他的論理和 …(8)
式(8)において、値posは、位置情報を表す値であり、0から15までの値をとる。値period_idは、小周期を表す値であり、値が0で小周期A、値が1で小周期Bを表すものとする。また、値plane_idは、その順序で選択すべきプレーンの番号を表す。また、式(8)の例では、小周期Aおよび小周期Bにおける順序規則は、5行目の式で表される。
次に、並列書き込みが可能なプレーンの数が多い場合について説明する。並列書き込みが可能なプレーン数が多い場合、順序を入れ替えた小周期の数も多数となる。このとき、小周期を組み合わせて順序規則を作る際に、考え得る全ての小周期を使用する必要は無い。また、フリーブロックリストの選択開始位置が小周期の途中である場合、フリーブロックリストの選択を異なる小周期を跨いで行う可能性がある。このような場合でもできるだけ並列度を大きく維持できるように小周期を選択し、並べることが望ましい。
一例として、プレーン数が8で、プレーン間に並列書き込みに対する制約が無い場合について考える。この場合、考え得る小周期の数は、8!個存在することになる。
これらのうち、例えば、下記の式(9)および式(10)で示される小周期(プレーンに対応するフリーブロックリストの識別子で示す)を式(9)、式(10)の順に並べると、式(9)で示される小周期から式(10)で示される小周期へと跨いでフリーブロックリストの選択を行う際に、プレーンP7のフリーブロックリストを連続して選択することになる。そのため、この2つの小周期を跨ぐような並列書き込みが可能なブロックの組を選択することができない。
{0,1,2,3,4,5,6,7} …(9)
{7,0,1,2,3,4,5,6} …(10)
そこで、連続して選択される位置におけるフリーブロックリストの識別子が同一にならないように、小周期を選択して並べる。これにより、フリーブロックリストの選択の際に小周期を跨ぐような場合でも、並列書き込みが可能なフリーブロックの組を選択できるようになる。
例えば、下記の式(11)および式(12)で示される小周期について考える。式(12)で示される順序規則は、式(11)で示される順序規則に対して、順序を7だけ進めたものと考えることができる。これら式(11)および式(12)で示される小周期を、式(11)、式(12)の順に並べると、連続して選択が行われる式(11)の末尾の識別子と、式(12)の先頭の識別子とが異なるので、式(11)による小周期から式(12)による小周期へと跨ぐ場合であっても、並列書き込みが可能なフリーブロックの組を選択することができる。それと共に、小周期を跨ぐ場合でも、並列度が7で並列書き込みが可能なフリーブロックの組を選択することが可能である。
{0,1,2,3,4,5,6,7} …(11)
{1,2,3,4,5,6,7,0} …(12)
図14は、プレーン数が8(プレーンP0〜プレーンP7)で、プレーン間に並列書き込みに対する制約が無い場合の順序規則の例を示す。プレーンP0〜P7のそれぞれには、異なるフリーブロックリストの識別子P0〜P7が対応付けられている。図14の例では、識別子P0を先頭とし、識別子P7を末尾とする順序規則{P0,P1,P2,P3,P4,P5,P6,P7}による小周期Aと、当該小周期Aに対して順序規則上の順序を7ずつ進めた小周期B、C、…、Hとを並べて、新たな順序規則を作成する。順序規則の異なる小周期を並べることで、特定のプレーンへのフリーブロックの集中を抑制できる。
図14の例では、新たな順序規則は、各小周期A〜Hがそれぞれ4回ずつ繰り返して並べられ、全体として小周期数が32、長さが256とされている。このように、同じ小周期を複数回、繰り返して並べてもよい。同じ小周期が繰り返される範囲内では、8並列で書き込みが可能とされる。
さらに、異なる小周期を跨いでフリーブロックリストの選択が行われる際の並列度が最大になるように、各小周期A〜Hを並べるとより好ましい。図14の例では、異なる小周期が隣接する場合において、フリーブロックリストの選択順に、小周期の順序規則における順序が7ずつ進むように各小周期の順序規則が作成されている。この場合、フリーブロックリストの選択の際に小周期を跨ぐ場合でも、並列度が7で並列書込み可能な組を選択すること可能である。
次に、上述の第1の実施形態において図7を用いて説明した、バンク・チップ・プレーン構成で並列書き込みに制約がある場合に、本第2の実施形態を適用した例について説明する。この場合、上述したように、フリーブロックの取得を開始するプレーンによって、最大並列度が変化する。
図15は、バンク・チップ・プレーン構成における順序規則の例を示す。図15の例では、バンク数が4(B0〜B3)、バンク内のチップ数が2(C0、C1)、チップ内のプレーン数が2(P0、P1)となっており、総プレーン数が16である。ここで、同一バンク内の異なるチップに対して並列書き込みができないという制約があるため、最大の並列書き込み数は、8となる。
なお、図15において、各プレーンに対応するフリーブロックリストの識別子を、バンク番号、チップ番号およびプレーン番号を組み合わせて、「B0C0P0」のように表現する。
図15の例では、小周期内においてプレーン番号、バンク番号、チップ番号の順で変更を行って各小周期の順序規則を作成することで、できるだけ並列度を高くしている。例えば、小周期Aは、順序規則が{B0C0P0,B0C0P1,B1C0P0,B1C0P1,B2C0P0,B2C0P1,B3C0P0,B3C0P1,B0C1P0,B0C1P1,B1C1P0,B1C1P1,B2C1P0,B2C1P1,B3C1P0,B3C1P1}となる。
この図15に例示される順序規則では、図7を用いて説明した例と同様に、プレーンP0からフリーブロックの取得が始まる場合には、8並列での書き込みが可能である。一方、プレーンP1からフリーブロックの取得が始まる場合には、同一のバンク内の異なるチップのプレーンP0とプレーンP1とに対して並列書き込みができないという制約のため、7並列の書き込みに制限される。
この小周期Aのバンク番号およびチップ番号を変えずにプレーン番号のみを入れ替えた小周期Bを用意する。さらに、周期的なアドレスへの書込みで特定のバンクにフリーブロックが偏ることを防ぐために、小周期Aおよび小周期Bに対してそれぞれバンクの順序を入れ替えた小周期C〜小周期Hを用意する。このとき、バンク順が異なる小周期を跨ぐ場合に並列度が5または6に制限されるため、バンク番号の順番が同じ小周期を連続させて、新たな順序規則を作成する。具体的には、小周期Aと、当該小周期Aとバンク番号の順序が同じ小周期Bとが連続される。同様に、小周期Cおよび小周期D、小周期Eおよび小周期F、小周期Gおよび小周期Hがそれぞれ連続される。
上述では、テーブル方式または演算方式により、小周期を所定の回数だけ並べた順序規則を予め作成しておくように説明したが、これはこの例に限定されない。例えば、順序規則を、乱数を用いて動的に算出する形態も可能である。
図16は、2進乱数系列を用いて順序規則を算出する例を示す。図16の例では、2進乱数系列を用いて、各小周期で乱数の値が0であれば小周期A、乱数の値が1であれば小周期Bとして順序規則を算出している。順序規則を乱数系列に従い算出する場合、乱数系列が擬似乱数であれば、順序規則の長さは「擬似乱数の周期×プレーン数」となる。したがって、特定プレーンに属するアクティブブロックに対応付けられたアドレスに周期性がある場合でも、当該アドレスのアクティブブロックの特定プレーンに集中する周期が非常に長くなり、問題にはならない。
順序規則を乱数を用いて算出する場合でも、順序規則演算部151の形態としては、上述と同様に、テーブル方式と演算方式とが考えられる。テーブル方式では、例えば、順序規則テーブル153において乱数表を順序規則として保持すればよい。
演算方式の場合には、順序規則演算部151において乱数演算器を用意し、どの小周期を使用するかの演算に乱数を用いるようにすればよい。例えば下記の式(13)に例示する演算で、乱数に基づきプレーンを決定できる。なお、式(13)の方式および各値の意味は、上述した式(8)と共通であるので、ここでの説明を省略する。
1:y = pos / 2; // 何番目の小周期か
2:x = pos % 2 // 小周期の中で何番目か
3:period_id = rand() & 0b1; // 乱数に基づき使用する小周期を決定
4:plane_id = period_id ^ x; // 小周期識別子と小周期内での順序との排他的論理和 …(13)
このように、本第2の実施形態によれば、順序規則を持つ小周期を所定の順序で並べて、より周期の長い新たな順序規則を作成している。そのため、ホスト機器からの書き込みのアドレスに周期性が存在する場合であっても、フリーブロックリスト間でのフリーブロック数およびアクティブブロック数の偏りを抑制することができる。また、本第2の実施形態では、小周期を並べる際に、できる限り並列度が大きくなるように工夫しているため、転送能力も確保できる。
<第3の実施形態>
次に、本発明の第3の実施形態について説明する。上述した第2の実施形態では、フリーブロックリストの選択時に参照される順序規則自体を長周期化することで、フリーブロックリスト選択時の順序規則の周期性を弱めている。ここで、フリーブロックリスト選択時の順序規則の周期性を弱める、あるいは、順序規則の長周期化を行うことが目的であれば、位置情報の更新方法に変更を加えることでも当該目的を達成できる。
本第3の実施形態は、所定の条件に合致する場合に、順序規則内のある順序をスキップすることで上述の目的を達成する。順序規則をスキップする条件としては、様々な条件が適用可能である。以下では、位置情報の更新数が所定数に達した時点で順序規則をスキップする第1の方法と、各プレーン毎に、フリーブロック取得数が所定数に達したらスキップする第2の方法とについて説明する。順序規則をスキップする条件は、例えばフリーブロック選択部150に対して予め定められているものとする。
先ず、第1の方法である、位置情報の更新数が所定数に達した時点で順序規則をスキップする方法について、図17のフローチャートを用いて説明する。この図17のフローチャートは、上述した図5のフローチャートにおけるステップS17の処理に対応するものであって、第1の実施形態で説明した図8のフローチャートに対し、スキップ処理が追加されている点が異なる。
なお、図17のフローチャートにおいて、ある時点の位置情報の更新数を位置情報更新数tPosとし、その初期値を0とする。順序規則のスキップを行うか否かを判定する位置情報更新数tPosの閾値を、予め決められた値であるスキップ閾値sPosとする。また、図5のステップS16でデータ書込部133から必要数rのフリーブロックが要求され、順序規則は、予め所定の順序規則に決められているものとする。
先ず、ブロック管理部131は、位置情報記憶部154から位置情報Posを取得して(ステップS60)、取得した位置情報Posで示される位置のフリーブロックリスト141mからフリーブロックの選択を開始した場合の最大並列度qを計算する(ステップS61)。最大並列度qの計算方法は、図8のステップS31で説明した方法と共通であるので、ここでの詳細な説明は省略する。
次のステップS62で、ブロック管理部131は、ブロック取得数rbおよびリスト選択回数iをそれぞれ0に初期化し、処理をステップS63に移行させる。ステップS63では、順序規則演算部151は、ブロック管理部131から渡された位置情報Posと所定の順序規則とに従い、フリーブロック管理部140に管理されているフリーブロックリスト1411、1412、…、141m、…、141nから1のフリーブロックリストL(i)を選択して、ブロック管理部131に返す。
ブロック管理部131は、順序規則演算部151から返されたフリーブロックリストL(i)にフリーブロックが残っているか否かを調べる。若し、調べた結果、当該フリーブロックリストL(i)にフリーブロックが残っていないと判断されたら、処理はステップS67に移行される。
一方、ステップS64で、当該フリーブロックリストL(i)にフリーブロックが残っていると判断されたら、処理はステップS65に移行される。ステップS65は、フリーブロック選択部150は、フリーブロックリストL(i)からフリーブロックB(i)を選択する。ブロック管理部131は、選択された当該フリーブロックB(i)を取得する。次のステップS66で、ブロック管理部131は、ブロック取得数rbを1だけ増加させる。さらに、次のステップS67で、フリーブロック選択部150がリスト選択回数iを1だけ増加させてリスト選択回数iを計数する。
次のステップS68で、位置情報記憶部154は、位置情報記憶部154に保持されている位置情報Posを、順序規則による順序列上の次の位置を示す位置情報Posに更新する。このとき、当該次の位置が順序規則による順序列の最終位置を超えた場合には、次の位置を順序規則による順序列の先頭に設定する。
位置情報Posが更新されると、処理はステップS69に移行され、フリーブロック選択部150が位置情報更新数tPosを1だけ増加させる。そして、次のステップS70で、フリーブロック選択部150は、位置情報更新数tPosがスキップ閾値sPos以上であるか否かを判定する。
若し、位置情報更新数tPosがスキップ閾値sPos以上であると判定したら、処理はステップS71に移行され、位置情報更新部152により位置情報更新数tPosが0に初期化され、処理がステップS67に戻される。このステップS70における判定で処理がステップS67に戻されることで、位置情報更新数tPosに基づく順序規則のスキップが実行される。
一方、ステップS70で、位置情報更新数tPosがスキップ閾値sPos未満であると判定されたら、処理はステップS72に移行される。ステップS72で、ブロック管理部131は、ブロック取得数rbが要求されたフリーブロック必要数rに達したか否かを判定する。若し、達したと判定されたら、図17のフローチャートによる一連の処理が終了され、処理が図5のステップS18に移行される。
一方、ブロック取得数rbがフリーブロック必要数rに達していないと判定されたら、処理はステップS73に移行される。ステップS73で、ブロック管理部131は、リスト選択回数iが最大並列度qに達したか否かを判定する。若し、達していないと判定されたら、処理はステップS63に戻され、次のフリーブロックリストL(i)に関する処理が行われる。
一方、リスト選択回数iが最大並列度qに達したと判定された場合には、図17のフローチャートによる一連の処理が終了され、処理が図5のステップS18に移行される。
図18は、上述の図17のフローチャートによる処理に従い、順序規則上でのスキップを行った例を示す。図18において、プレーン数が8であって、8並列に書き込みが可能とされている。元となる順序規則は、小周期{0,1,2,3,4,5,6,7}のみを繰り返す順序列となっている。図18は、スキップ閾値sPosを32ブロックとし、位置情報更新数tPosが32となった場合に、位置情報Posを次の位置に更新して順序規則をスキップする例である。
図18の例では、元の順序規則の順序列における32番目のプレーンP7からフリーブロックが取得されたら、次の33番目のプレーンP0からのフリーブロックの取得がスキップされる。それと共に、位置情報更新数tPosが0に初期化されて位置情報更新数tPosの累積が再開され、再び位置情報更新数tPosが32になったら、位置情報Posを次の位置に更新して順序規則をスキップする。この場合、元の順序規則の順序列における66番目のプレーンP1からのフリーブロックの取得がスキップされる。
より具体的には、先ず、元の順序規則の順序列における32番目で、プレーンP7からフリーブロックを取得した際に、位置情報更新数tPosが32となり、図17のフローチャートにおいて処理がステップS70からステップS71を介してステップS67に戻される。そして、ステップS68で位置情報Posが更新され、ステップS69〜ステップS73の処理を経て、処理がステップS63に戻される。このように、ステップS70の判定によりフリーブロックの取得を行わずに位置情報Posが更新され、順序規則がスキップされる。
なお、スキップ発生の回数をフリーブロックリスト間で平準化するために、スキップ閾値sPosを順序規則の長さの倍数にすると、好ましい。すなわち、スキップ閾値sPosを順序規則の長さの倍数にした場合、順序規則の長さ分のフリーブロックの取得が行われたら、次の1プレーンをスキップして、その次のプレーンから、再び順序規則の長さ分のフリーブロックの取得を行う。これにより、スキップ位置で順序規則が1プレーン分ずれることになり、ブロック間での消去回数が平準化される。
これに対して、スキップ閾値sPosを順序規則の長さの倍数−1とすると、特定のフリーブロックリストでのみスキップが発生することになり、好ましくない。
次に、本第3の実施形態における第2の方法である、各プレーン毎に、フリーブロック取得数が所定数に達した時点で順序規則をスキップする方法について、図19のフローチャートを用いて説明する。この図19のフローチャートによる処理は、上述した第1の方法による図17のフローチャートによる処理に対して、スキップ処理を行うタイミングが異なる以外は、略共通である。すなわち、この第2の方法においては、プレーン毎にスキップの発生回数を制御するために、順序規則をスキップする条件の判定を、プレーン毎に実行する。
なお、図19のフローチャートにおいて、フリーブロックリストL毎に定義されたスコア増加値w[L]単位で増加する値をブロック取得スコアt[L]とし、ブロック取得スコアt[L]に対する閾値をスキップ閾値s[L]とする。これらスコア増加値w[L]、ブロック取得スコアt[L]およびスキップ閾値s[L]は、ブロック管理部131において、プレーン毎に保持される。
先ず、ブロック管理部131は、位置情報記憶部154から位置情報Posを取得して(ステップS80)、取得した位置情報Posで示される位置のフリーブロックリスト141mからフリーブロック選択を開始した場合の最大並列度qを計算する(ステップS81)。最大並列度qの計算方法は、図8のステップS31で説明した方法と共通であるので、ここでの詳細な説明は省略する。
次のステップS82で、ブロック取得数rbおよびリスト選択回数iがそれぞれ0に初期化され、処理がステップS83に移行される。ステップS83で、順序規則演算部151は、ブロック管理部131から渡された位置情報Posと所定の順序規則とに従い、フリーブロック管理部140に管理されているフリーブロックリスト1411、1412、…、141m、…、141nから1のフリーブロックリストL(i)を選択して、ブロック管理部131に返す。
次のステップS84で、フリーブロック選択部150は、ブロック取得スコアt[L(i)]とスキップ閾値s[L(i)]とを比較し、ブロック取得スコアt[L(i)]がスキップ閾値s[L(i)]以上であるか否かを判定する。若し、ブロック取得スコアt[L(i)]がスキップ閾値s[L(i)]以上であると判定されたら、ステップS93でブロック取得スコアt[L(i)]からスキップ閾値s[L(i)]を減じた値が新たなブロック取得スコアt[L(i)]とされて、処理がステップS89に移行される。この、ブロック取得スコアt[L(i)]がスキップ閾値s[L(i)]以上であると判定された場合に処理をステップS89に移行させる処理により、フリーブロックリストL(i)に対応するプレーンにおいて、順序規則がスキップされる。
一方、ステップS84で、ブロック取得スコアt[L(i)]がスキップ閾値s[L(i)]未満であると判定されたら、処理はステップS85に移行される。ステップS85で、ブロック管理部131は、順序規則演算部151から返されたフリーブロックリストL(i)にフリーブロックが残っているか否かを調べる。若し、調べた結果、当該フリーブロックリストL(i)にフリーブロックが残っていないと判断されたら、処理はステップS89に移行される。
一方、ステップS85で、当該フリーブロックリストL(i)にフリーブロックが残っていると判断されたら、処理はステップS86に移行され、フリーブロック選択部150によりフリーブロックリストL(i)からフリーブロックB(i)が選択され、ブロック管理部131により当該フリーブロックB(i)が取得される。
次のステップS87で、ブロック取得数rbが1だけ増加される。さらに次のステップS88で、フリーブロック選択部150は、ブロック取得スコアt[L(i)]にスコア増加値w[L(i)]を加算した値を新たなブロック取得スコアt[L(i)]とする。そして、処理はステップS89に移行され、フリーブロック選択部150は、リスト選択回数iを1だけ増加させてリスト選択回数iを計数する。
次のステップS90で、位置情報更新部152は、位置情報記憶部154に保持されている位置情報Posを、順序規則による順序列上の次の位置を示す位置情報Posに更新する。このとき、当該次の位置が順序規則による順序列の最終位置を超えた場合には、次の位置を順序規則による順序列の先頭に設定する。
位置情報Posが更新されると、処理はステップS91に移行され、ブロック管理部131は、ブロック取得数rbが要求されたフリーブロック必要数rに達したか否かを判定する。若し、達したと判定されたら、図19のフローチャートによる一連の処理が終了され、処理が図5のステップS18に移行される。
一方、ステップS91で、ブロック取得数rbがフリーブロック必要数rに達していないと判定されたら、処理はステップS92に移行され、ブロック管理部131により、リスト選択回数iが最大並列度qに達したか否かが判定される。若し、達していないと判定されたら、処理はステップS83に戻され、次のフリーブロックリストL(i)に関する処理が行われる。
一方、リスト選択回数iが最大並列度qに達したと判定された場合には、図19のフローチャートによる一連の処理が終了され、処理が図5のステップS18に移行される。
なお、複数のフリーブロックリストLが同じ値のスコア増加値w[L]とスキップ閾値s[L]とを持つ場合、ブロック取得スコアs[L]の初期値も同じ値(例えば0)とすると、当該複数のフリーブロックリストのスキップが同じタイミングで発生するため、好ましくない。そのため、ブロック取得スコアs[L]の初期値は、フリーブロックリストL毎に異なる値を設定しておくとよい。
図20は、上述の図19のフローチャートによる処理に従い、順序規則上でのスキップを行った例を示す。図20(a)は、各プレーンP0〜P7に対して設定されたブロック取得スコアt[L]の初期値と、スコア増加値w[L]と、スキップ閾値s[L]とを示す。図20(b)は、上述した図18と同様に、プレーン数が8であって、8並列に書き込みが可能とされ、元となる順序規則は、小周期{0,1,2,3,4,5,6,7}のみを繰り返す順序列となっている例である。
図20(a)の例において、スコア増加値w[L]を1で固定的とし、スキップ閾値s[L]をプレーン毎に可変としている。したがって、ブロック取得スコアt[L]は、そのプレーンでのフリーブロック取得数を示し、スキップ閾値s[L]は、順序規則のスキップを発生させる、そのプレーンにおけるフリーブロック取得数を示す。
また、図20(a)の例では、プレーンP6でのみスキップ閾値s[L]を8とし、他のプレーンでは、スキップ閾値s[L]を32としている。そのため、図20(b)に例示されるように、プレーンP6は他のプレーンに対してスキップの発生頻度を高くすることができる。図20(b)の例では、プレーンP6において、小周期が16回繰り返されるうちスキップが2回、発生している。一方、他のプレーンでは、スキップの発生回数は、1回以下となっている。
さらに、ブロック取得スコアt[L]の初期値は、プレーン毎に異なる値を設定することができる。図20(a)の例では、各プレーンP0〜P7において、スキップ閾値s[L](=32)をプレーン数(=8)で割った値(=4)ずつ、ブロック取得スコアt[L]の初期値をずらしている。これにより、プレーンP6を除いた7個のプレーンでは、4小周期ずつスキップの発生がずれることになる。例えば、図20(b)の例では、プレーンP0においてブロック取得スコアt[L]の28に対して5小周期目でスキップが発生し、プレーンP1においてブロック取得スコアt[L]の24に対して9小周期目でスキップが発生している。同様に、プレーンP2においてブロック取得スコアt[L]の20に対して13小周期目でスキップが発生している。
図21は、上述の図20の例とは逆に、スキップ閾値s[L]を固定的とし、スコア増加値w[L]をプレーン毎に可変とした場合の例である。図21(a)に例示されるように、スキップ閾値s[L]が100に固定的とされ、スコア増加値w[L]については、プレーンP6のみが25とされ、他のプレーンでは3とされている。また、ブロック取得スコアt[L]は、スキップ閾値s[L](=100)をプレーン数(=8)で割った値(=12.5)を基準に、初期値をずらしている。この場合には、スコア増加値w[L]が大きいほど、スキップの発生頻度が高くなることが分かる。
このように、本第3の実施形態によれば、複雑で長い順序規則を持たなくても、フリーブロックリストの選択における周期性を弱めたり、長周期化することが可能である。
また、例えば特定のプレーンのみ総ブロック数やフリーブロック数が小さい場合に、スキップ閾値s[L]を小さく設定したり、スコア増加値w[L]を大きく設定することで、フリーブロック取得の頻度を抑えることが可能である。これにより、ブロック毎の消去回数の平準化や、プレーン毎の残りフリーブロック数の平準化といった効果が期待できる。
<第3の実施形態の変形例>
次に、本発明の第3の実施形態の変形例について説明する。本第3の実施形態の変形例は、上述した第2の実施形態と第3の実施形態とを組み合わせた例である。図22は、上述した図15の例で用いた、バンク数が4、バンク内のチップ数が2、チップ内のプレーン数が2となっており、総プレーン数が16であるバンク・チップ・プレーン構成を本第3の実施形態の変形例に適用した例である。
上述した第2の実施形態における図15の例では、バンク順を入れ替えた小周期も順序規則に含めたため、順序規則が非常に長く複雑になっていた。これに対し、図22に例示される、本第3の実施形態の変形例による順序規則は、バンク順入れ替えの効果をスキップにより実現しているため、順序規則自体は2個の小周期Aおよび小周期Bを組み合わせた簡単なものとなっている。
より具体的には、上述の第2の実施形態において図15を用いて説明した通り、順序規則演算部151は、小周期内においてプレーン番号、バンク番号、チップ番号の順で変更を行って各小周期の順序規則を作成する。小周期Aの順序規則は、例えば{B0C0P0,B0C0P1,B1C0P0,B1C0P1,B2C0P0,B2C0P1,B3C0P0,B3C0P1,B0C1P0,B0C1P1,B1C1P0,B1C1P1,B2C1P0,B2C1P1,B3C1P0,B3C1P1}となる。また、小周期Bは、小周期Aのバンク番号およびチップ番号を変えずにプレーン番号のみを入れ替えて作成する。
これら小周期Aおよび小周期Bを、既に説明したように、順序規則演算部151によりテーブル方式、演算方式、乱数を用いた方式などにより取得した順番に並べて、新たな順序規則を作成する。これにより、小周期数が8で、長さが128の順序規則が作成される。
一方、上述の第3の実施形態の第1または第2の方法により、フリーブロックを例えば128ブロック取得する毎に順序規則をスキップするように設定する。こうすることで、順序規則のスキップ毎にバンク順入れ替えの効果を得ることができる。
以上説明したように、本発明によれば、ホスト機器から特定のアドレスに対しての書込みが繰り返された場合に、プレーン間でのフリーブロック取得回数の偏りが抑制され、特定のブロックに消去回数が集中することを避けることができる。
また、できる限り多くのプレーンに対して並列書き込みを行うようにしているため、複数の異なるアドレスへの書込みデータがバッファメモリに蓄積された場合に、特定のプレーンへの書き込みが集中することが抑制され、転送性能を良好に維持することができる。
さらに、小周期を並べて順序規則を長周期化しているので、ホスト機器からの書き込みのアドレスに周期性が存在する場合であっても、フリーブロックリスト間でのフリーブロック数およびアクティブブロック数の偏りを抑制することができる。また、小周期を並べる際に、できる限り並列度が大きくなるように工夫しているため、転送能力も確保できる。