(57)【要約】【課題】不揮発性半導体メモリに対して、書込み時の並列度を確保して転送能力を維持しつつ、ブロック間での消去回数の平準化を行うことを可能とする。【解決手段】並列書き込み可能なプレーンＰ０〜Ｐ７にそれぞれ対応するフリーブロックリストの識別子「０」〜「７」を所定の順序に並べた順序列を含む順序規則を作成する。この順序規則と、順序規則の順序列上の位置を示す位置情報とに従いフリーブロックリストを選択して、選択したフリーブロックリストからフリーブロックを取得する。フリーブロックを取得したら、位置情報を、次のフリーブロックリストに対応する位置情報に更新する。フリーブロックリストの選択を、順序規則の巡回的な繰り返しにより行うことで、順序規則の順序上の度の位置からフリーブロックリストの選択を開始しても、最大で８並列の書き込みが可能なフローチャートブロックを選択できる。【選択図】図８
2011180773.tif 000002
【特許請求の範囲】
【請求項１】
データ消去の単位であるブロックを複数含む記憶領域を複数備え、異なる該記憶領域に含まれる該ブロックに対して並列書き込み可能に構成された不揮発性メモリと、
有効データが記憶されていない前記ブロックであるフリーブロックを示す情報のリストを前記記憶領域毎に保持する管理部と、
フリーブロックリストの順序を定めるための情報である順序規則を保持する順序規則保持部と、
前記順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶する位置情報記憶部と、
前記位置情報で示される位置に対応する前記リストを選択するリスト選択部と、
前記リスト選択部で選択された前記リストから前記フリーブロックを選択するブロック選択部と、
前記ブロック選択部で選択された前記フリーブロックに対してデータを書き込む書込部と、
前記リスト選択部により前記リストが選択された後に、前記位置情報記憶部に記憶される前記位置情報を、次に選択する前記リストの位置を示す位置情報に更新する更新部と
を有する
ことを特徴とするメモリシステム。
【請求項２】
前記ブロック選択部は、
前記フリーブロックの選択を行う際に、該ブロック選択部に定められた所定の条件を満たしている場合に、該フリーブロックの選択をスキップし、
前記更新部は、
さらに、前記ブロック選択部により前記フリーブロックの選択がスキップされた場合に前記位置情報の更新を行う
ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記ブロック選択部は、
前記リスト選択部により前記リストが選択された回数を前記リスト毎に計数し、前記リスト選択部で前記リストの選択を行う際に、選択された前記リストについて計数された該回数が閾値以上である場合に、該選択されたリストに従った前記フリーブロックの選択をスキップする
ことを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記ブロック選択部は、
前記更新部が前記位置情報を更新した回数を計数し、計数された該回数が閾値以上になった場合に、前記フリーブロックの選択をスキップする
ことを特徴とする請求項２に記載のメモリシステム。
【請求項５】
前記位置情報記憶部は、
複数の異なる順序規則を用いて生成される長周期順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶する
ことを特徴とする請求項２に記載のメモリシステム。
【請求項６】
前記リスト選択部は、
前記複数の順序規則と前記位置情報とを用いた演算により、前記リストの選択を行う
ことを特徴とする請求項５に記載のメモリシステム。
【請求項７】
前記順序規則保持部は、
予め作成された前記長周期順序規則を保持し、
前記リスト選択部は、
前記順序規則保持部に保持される前記長周期順序規則を参照して、前記リストを選択する
ことを特徴とする請求項５に記載のメモリシステム。
【請求項８】
前記リスト選択部は、
乱数を用いて動的に前記長周期順序規則を生成し、生成した該長周期順序規則を用いて前記リストを選択する
ことを特徴とする請求項５に記載のメモリシステム。
【請求項９】
データ消去の単位であるブロックを複数含む記憶領域を複数備え、異なる該記憶領域に含まれる該ブロックに対して並列書き込み可能に構成された不揮発性メモリと、
有効データが記憶されていない前記ブロックであるフリーブロックを示す情報のリストを前記記憶領域毎に保持する管理部と、
フリーブロックリストの順序を定めるための情報である順序規則を保持する順序規則保持部と、
前記順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶する位置情報記憶部と、
前記位置情報で示される位置に対応する前記リストを選択するリスト選択部と、
前記リスト選択部で選択された前記リストから前記フリーブロックを選択するブロック選択部と、
前記ブロック選択部で選択された前記フリーブロックに対してデータを書き込む書込部と、
前記リスト選択部により前記リストが選択された後に、前記位置情報記憶部に記憶される前記位置情報を、次に選択する前記リストの位置を示す位置情報に更新する更新部と
を有し、
前記位置情報記憶部は、
複数の異なる順序規則を用いて生成される長周期順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶する
ことを特徴とするメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリを備えたメモリシステムに関する。
【背景技術】
【０００２】
コンピュータなどに用いられる外部記憶装置として、ＮＡＮＤフラッシュメモリといった不揮発性半導体メモリを記憶媒体としたＳＳＤ(Solid State Drive)が注目されている。ＳＳＤは、機械的動作が含まれないため、従来から用いられる磁気ディスク装置と比べて耐衝撃性、ランダム読み出し動作、消費電力などの点で有利である。
【０００３】
一方、ＮＡＮＤフラッシュメモリの単体での書込み速度は、磁気ディスク装置と比較して低速である。そのため、ＳＳＤでは、複数のＮＡＮＤフラッシュメモリのチップを並列アクセス可能なように接続したり、ＮＡＮＤフラッシュメモリ自体もチップ内で複数の領域に同時に書き込みを可能にするなどの構成を適用し、転送性能を向上させている（例えば特許文献１参照）。
【０００４】
ＳＳＤの実用上のデータ転送速度を向上させるためには、上述のように構成したハードウェアの並列性を最大限に生かす必要がある。そのため、ホストから受信した書き込みデータを一時的に蓄積するバッファメモリを用意し、十分な量のデータがバッファメモリに溜まってからデータを分割して、ＮＡＮＤフラッシュメモリ内の複数のチップに対して並列的に書き込む。
【０００５】
ＮＡＮＤフラッシュメモリの記憶領域は、ブロックと呼ばれる単位に分割され、ＮＡＮＤフラッシュメモリに対するデータの書き込みは、このブロック単位で行われる。すなわち、ＮＡＮＤフラッシュメモリに対するデータの書き込みは、ブロック内のデータを一括消去してから、当該ブロックに対して新しいデータを所定の順序で書き込むことで行われる。
【０００６】
ところで、ＮＡＮＤフラッシュメモリは、最大消去回数に制約があるという性質を持つ。例えば、あるブロックの消去回数が所定以上になると、そのブロックは疲弊してデータを記憶できなくなる。この疲弊によりデータを記憶できなくなったブロックが増加すると、ＳＳＤ全体としてデータの記憶容量が減少し、所定の表記容量を提供できなくなった時点で故障となる。ＳＳＤ全体としての寿命を延ばすためには、全体のブロックを満遍なく使用して、消去回数を平準化する機構が必要となる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２１１２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
このように、実用的にＳＳＤを利用するためには、アクセス時、特に書き込み時の並列度を確保して転送能力を維持すると共に、ブロック間での消去回数の平準化を行う必要がある。これら書き込み時の並列度の確保と、ブロック間での消去回数の平準化には、データをどのブロックに書き込むかという、ブロック割当方法が大きく関わっている。
【０００９】
例えばハードディスクのように、アドレスに対して物理的な記憶領域を固定的に割り当てる方法をＳＳＤに適用することを考えると、ＳＳＤでは、アドレスに対してブロックが固定的に割り当てられることになる。この場合、次の２つの問題が生じる。
【００１０】
第１の問題は、特定のアドレスに書かれたデータを繰り返し上書きを行った場合に生じる問題である。この場合、当該アドレスに対応するブロックにおいて、データの一括消去と書き込みが繰り返されることになり、当該ブロックのみ消去回数が増加してしまい、当該ブロックの寿命が他のブロックよりも短くなってしまう。
【００１１】
第２の問題は、並列書き込みできない１または複数のブロックに割り当てられた異なるアドレスに対して、複数の書き込みデータを受信した場合に生じる問題である。この場合、データは、ブロックに対して逐次的に書き込まれることになり、転送能力が劣化してしまう。
【００１２】
本発明は、上記に鑑みてなされたものであって、不揮発性半導体メモリに対して、書込み時の並列度を確保して転送能力を維持しつつ、ブロック間での消去回数の平準化を行うことが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するために、第１の発明は、データ消去の単位であるブロックを複数含む記憶領域を複数備え、異なる記憶領域に含まれるブロックに対して並列書き込み可能に構成された不揮発性メモリと、有効データが記憶されていないブロックであるフリーブロックを示す情報のリストを記憶領域毎に保持する管理部と、フリーブロックリストの順序を定めるための情報である順序規則を保持する順序規則保持部と、順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶する位置情報記憶部と、位置情報で示される位置に対応するリストを選択するリスト選択部と、リスト選択部で選択されたリストからフリーブロックを選択するブロック選択部と、ブロック選択部で選択されたフリーブロックに対してデータを書き込む書込部と、リスト選択部によりリストが選択された後に、位置情報記憶部に記憶される位置情報を、次に選択するリストの位置を示す位置情報に更新する更新部とを有することを特徴とする。
【００１４】
また、第２の発明は、データ消去の単位であるブロックを複数含む記憶領域を複数備え、異なる記憶領域に含まれるブロックに対して並列書き込み可能に構成された不揮発性メモリと、有効データが記憶されていないブロックであるフリーブロックを示す情報のリストを記憶領域毎に保持する管理部と、フリーブロックリストの順序を定めるための情報である順序規則を保持する順序規則保持部と、順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶する位置情報記憶部と、位置情報で示される位置に対応するリストを選択するリスト選択部と、リスト選択部で選択されたリストからフリーブロックを選択するブロック選択部と、ブロック選択部で選択されたフリーブロックに対してデータを書き込む書込部と、リスト選択部によりリストが選択された後に、位置情報記憶部に記憶される位置情報を、次に選択するリストの位置を示す位置情報に更新する更新部とを有し、位置情報記憶部は、複数の異なる順序規則を用いて生成される長周期順序規則に基づいて定まる各フリーブロックリストの順番を示す位置情報を記憶することを特徴とする。
【発明の効果】
【００１５】
本発明に係るメモリシステムは、不揮発性半導体メモリに対して、書込み時の並列度を確保して転送能力を維持しつつ、ブロック間での消去回数の平準化を行うことが可能であるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】各実施形態のメモリシステムを適用可能なコンピュータ例の略線図。
【図２】本発明の各実施形態に適用可能なＳＳＤの構成例を示すブロック図。
【図３】チップの一例の構成をより詳細に示す略線図。
【図４】アドレスとブロックとの関連付けについて説明するための略線図。
【図５】本発明の各実施形態によるデータの書き込み処理例のフローチャート。
【図６】順序規則を説明するための略線図。
【図７】バンク・チップ・プレーン構成を説明するための略線図。
【図８】並列書込みが可能なフリーブロックの選択処理例を示すフローチャート。
【図９】複数の物理的なブロックを常に纏めて使用する例を示す略線図。
【図１０】所定周期のアドレスの書き込みを行う例を示す略線図。
【図１１】第２の実施形態の順序規則の作成方法の概略的なフローチャート。
【図１２】小周期を並べて新たな順序規則を作成する例を示す略線図。
【図１３】第２の実施形態の所定周期のアドレスによる書き込み例の略線図。
【図１４】プレーン数が多い場合の第２の実施形態の順序規則例を示す略線図。
【図１５】バンク・チップ・プレーン構成の順序規則の例を示す略線図。
【図１６】２進乱数系列を用いて順序規則を算出する例を示す略線図。
【図１７】第３の実施形態の第１方法の順序規則をスキップする処理を示す一例のフローチャート。
【図１８】第３の実施形態の第１方法の順序規則をスキップした例を示す略線図。
【図１９】第３の実施形態の第２方法の順序規則をスキップする処理を示す一例のフローチャート。
【図２０】第３の実施形態の第２方法の順序規則をスキップした例を示す略線図。
【図２１】第３の実施形態の第２方法の順序規則をスキップした別の例を示す略線図。
【図２２】第３の実施形態の変形例による順序規則の例を示す略線図。
【発明を実施するための形態】
【００１７】
＜本発明の各実施形態に共通する構成＞
以下に、本発明に係るメモリシステムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本発明が限定されるものではない。図１は、本発明の各実施形態に係るメモリシステムを適用可能なコンピュータ２００の一例の外観を示す。図１に例示されるコンピュータ２００は、携帯可能なように小型軽量に構成された、所謂ポータブルコンピュータである。コンピュータ２００は、本体２０１と、表示ユニット２０２とを備える。表示ユニット２０２は、ディスプレイハウジング２０３と、このディスプレイハウジング２０３に収容された表示装置２０４とを備える。
【００１８】
本体２０１は、筐体２０５と、キーボード２０６と、ポインティングデバイスであるタッチパッド２０７とを備える。筐体２０５内部には、メイン回路基板、ＯＤＤ(Optical Disk Drive)ユニット、カードスロット、ＳＳＤ１００などが収容される。メイン回路基板は、ＣＰＵ(Central Processing Unit)やＲＯＭ(Read Only Memory)、ＲＡＭ(Random Access Memory)といった、このコンピュータ２００の主要な部品が搭載される。ＯＤＤユニットは、ＣＤ(Compact Disk)やＤＶＤ(Digital Versatile Disk)といった光ディスクに対するデータの読み書きを行う。
【００１９】
カードスロットは、筐体２０５の周壁に隣接して設けられる。周壁には、カードスロットに対向する開口部２０８が設けられる。ユーザは、この開口部２０８を通じて筐体２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【００２０】
ＳＳＤ(Solid State Drive)１００は、書き換え可能な不揮発性半導体メモリを用いた記憶装置である。ＳＳＤ１００は、従来のＨＤＤ(Hard Disk Drive)の置き換えとして、例えばＯＳ(Operating System)や各種プログラムなどを記憶するために、コンピュータ２００内部に実装された状態として使用することができる。これに限らず、ＳＳＤ１００は、コンピュータ２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【００２１】
図２は、本発明の各実施形態に適用可能なＳＳＤ１００の一例の構成を示す。ＳＳＤ１００は、概略的には、コントローラ部１３０、インタフェース部１２０、バッファメモリ１２１および不揮発性メモリ部１２２を有する。これらコントローラ部１３０、インタフェース部１２０、バッファメモリ１２１および不揮発性メモリ部１２２は、バス１１０などの信号線で接続され、互いにデータのやりとりを行うことができるようにされている。
【００２２】
インタフェース部１２０は、ホスト機器との通信を行う。上述した図１およびこの図２の例では、ホスト機器としてコンピュータ２００が接続されている。以下では、コンピュータ２００をホスト機器２００として記述する。インタフェース部１２０は、ホスト機器２００からのリード、ライト、フラッシュなどのコマンドを受付け、コントローラ部１３０にコマンド受信を通知する。また、インタフェース部１２０は、コントローラ部１３０からの指示に従い、ホスト機器２００との間でデータを送受信する。
【００２３】
バッファメモリ１２１は、ＤＲＡＭ(Dynamic RAM)などの揮発性メモリで構成される。バッファメモリ１２１は、インタフェース部１２０がホスト機器２００と送受信を行うデータや、不揮発性メモリ部１２２に対して読出しや書込みを行うデータを一時的に格納する。これに限らず、ＳＳＤ１００における各種の管理情報をバッファメモリ１２１に格納してもよい。
【００２４】
不揮発性メモリ部１２２は、書き換え可能で、電源を遮断しても記憶内容が消去されないメモリであって、例えばホスト機器２００から送信されたユーザデータが格納される。これに限らず、不揮発性メモリ部１２２は、ユーザデータ以外にも、例えばＳＳＤ１００における各種管理用の情報を格納することもできる。
【００２５】
不揮発性メモリ部１２２は、不揮発性メモリによる記憶媒体であるＮＡＮＤフラッシュメモリのチップ１２３、１２３、…と、ＮＡＮＤフラッシュメモリの制御を行うＮＡＮＤコントローラ（図示しない）とを有する。各チップ１２３、１２３、…は、独立してアクセス制御が可能な記憶領域であるプレーンをそれぞれ複数、持つことができる。図３は、不揮発性メモリ部１２２のチップ１２３の一例の構成をより詳細に示す。この例では、チップ１２３は、プレーン＃０およびプレーン＃１の２のプレーンを有し、各プレーンは、所定の記憶容量を有する複数のブロック＃０、＃１、…、＃ｎを有する。
【００２６】
このブロックは、チップ１２３における物理的な記憶領域としての物理ブロックであって、チップ１２３のデータ消去の単位である。なお、複数の物理ブロックを纏めて１の論理ブロックとして扱う形態も存在する。この場合は、この論理ブロックがデータ消去の単位となる。以下では、これら物理ブロックと論理ブロックとを、単にブロックとして統一的に表現する。
【００２７】
チップ１２３のあるブロックにデータを書き込む際には、ブロック単位で当該ブロックからデータを消去して、新しいデータを当該ブロックに書き込む。したがって、チップ１２３に対するデータの書き込みは、実質的にはブロック単位で行われる。
【００２８】
ＮＡＮＤフラッシュメモリのチップ１２３において、各プレーン同士は、チップ内で並列的にアクセス可能な構成となっている。例えば、図３の左側に（ａ）として例示されるように、番号が＃０とされたチップ１２３において、プレーン＃０に属するブロック＃０と、プレーン＃１に属するブロック＃２には、並列アクセスが可能である。一方、図３の右側に（ｂ）として例示されるように、同じ番号＃０のチップ１２３において、プレーン＃０に属するブロック＃０およびブロック＃２には、並列アクセスができない。
【００２９】
ＮＡＮＤフラッシュメモリにおいて、総記憶容量は、ホスト機器２００に対して提供する記憶容量よりも多くの容量を用意する。そのため、ある時点では、有効なデータが記憶されているブロックと記憶されていないブロックとが存在する。有効なデータが記憶されていないブロックを、フリーブロックと呼ぶ。また、有効なデータが記憶されているブロックを、アクティブブロックと呼ぶ。
【００３０】
説明は図２に戻り、コントローラ部１３０は、ブロック管理部１３１、データ読出部１３２、データ書込部１３３、データ管理部１３４およびＮＡＮＤドライバ１３５の各機能を有する。コントローラ部１３０は、インタフェース部１２０を介したホスト機器２００との通信の制御や、バッファメモリ１２１および不揮発性メモリ部１２２に格納するデータの管理と読み書きの制御などを行う。
【００３１】
コントローラ部１３０が有する各機能は、回路として組み込まれたＳｏＣ(System On a Chip)として構成することができる。これに限らず、コントローラ部１３０のハードウェアとして汎用プロセッサを用い、これらの機能を汎用プロセッサ上で動作するソフトウェアで実現してもよい。
【００３２】
コントローラ部１３０において、データ管理部１３４は、ホスト機器２００との間で使用される、データの記憶位置を示すアドレスと、不揮発性メモリ部１２２における実際の記憶領域であるブロック位置との対応関係を管理する。アドレスとブロックとの関係は、データの書き込み時に動的に関連付けられる。
【００３３】
図４を用いて、データ管理部１３４におけるアドレスとブロックとの関連付けについて説明する。例えば、図４の左側に（ａ）として例示されるように、ホスト機器２００から指定されるデータのアドレスがアドレスＡ０、Ａ１、…とされ、不揮発性メモリ部１２２におけるあるプレーンのブロック位置がブロックＢ０、Ｂ１、…とされているものとする。また、１のアドレスで指定されるデータのサイズは、１のブロックの記憶容量と等しいものとする。
【００３４】
ここで、アドレスＡ１に有効なデータが記憶されており、不揮発性メモリ部１２２においてアドレスＡ１として実際に使用されている記憶領域がブロックＢ１である場合について考える。この場合、ブロックＢ１がアクティブブロックであり、例えば隣のブロックＢ２がフリーブロックである。
【００３５】
この図４（ａ）の状態において、ホスト機器２００からアドレスＡ１のデータを上書きするコマンドを受信したものとする。同一のアドレス上のデータを上書きする場合、ブロック単位でデータの上書き処理が行われる。データ管理部１３４は、フリーブロック（ブロックＢ２とする）を１個確保し、確保したフリーブロックに対してホスト機器２００から受信したデータを書き込む。フリーブロックに対してデータを書き込んだら、ホスト機器２００から指定されたアドレスＡ１と、データを実際に書き込んだブロックＢ２とを関連付ける。
【００３６】
その結果、図４の右側に（ｂ）として例示するように、ブロックＢ２がアクティブブロックとなる。また、上書き前にアドレスＡ１のデータが記憶されていたブロックＢ１では、記憶データが無効とされるため、ブロックＢ１がフリーブロックとなる。このように、ＳＳＤにおいては、同じアドレスＡ１として指定されたデータであっても、実際の記憶領域として使用されるブロックは、データの書き込み毎に変化する。
【００３７】
説明は図２に戻り、データ読出部１３２は、不揮発性メモリ部１２２からのデータの読み出しを制御する。データ書込部１３３は、不揮発性メモリ部１２２に対するデータの書き込みを制御する。ＮＡＮＤドライバ１３５は、データ読出部１３２やデータ書込部１３３の要求に従い、不揮発性メモリ部１２２からデータ読み出しや書き込みを行うように、不揮発性メモリ部１２２が有するＮＡＮＤコントローラ（図示しない）の制御を行う。
【００３８】
ブロック管理部１３１は、フリーブロック管理部１４０およびフリーブロック選択部１５０を有し、不揮発性メモリ部１２２におけるフリーブロックの管理と、データ書き込み時に使用するフリーブロックの選択とを行う。フリーブロック管理部１４０は、有効データが記憶されていないブロックであるフリーブロックを示す情報であるフリーブロックリストを保持し、管理する。例えば、不揮発性メモリ部１２２のフリーブロックを管理する構造体として、フリーブロックリスト１４１0、１４１1、…、１４１m、…、１４１nをプレーン毎に保持する。不揮発性メモリ部１２２のフリーブロックは、当該フリーブロックが属するプレーンに対応するフリーブロックリスト１４１mにより、フリーブロック管理部１４０で管理される。
【００３９】
なお、フリーブロックリスト１４１mは、フリーブロック管理部１４０が管理するフリーブロックリスト１４１0〜１４１nのうち、任意のフリーブロックリストを表すものとする。
【００４０】
フリーブロックリスト１４１mは、例えば、各フリーブロックに対応するブロック識別子を含むブロック情報をノードとして、フリーブロックリストに繋ぐ形態をとることができる。フリーブロックリストにフリーブロックを繋ぐ順序は、単純なＦＩＦＯ(First In First Out)としてもよいし、フリーブロックの消去回数でソートした順番で繋いでもよい。また、並列書込みを行わない複数のプレーンについては、１個のフリーブロックリストで纏めてフリーブロックを管理してもよい。
【００４１】
フリーブロック選択部１５０は、不揮発性メモリ部１２２に対するデータの書き込み時に、本発明による順序規則に従い不揮発性メモリ部１２２のフリーブロックを選択する。フリーブロック選択部１５０は、順序規則演算部１５１、位置情報更新部１５２、順序規則保持部１５３および位置情報記憶部１５４を有する。
【００４２】
順序規則保持部１５３は、順序規則を保持する。順序規則とは、フリーブロックリストの順序を定めるための情報であり、テーブル形式や演算形式などにより定義される。順序規則を、テーブル形式や演算形式以外の他の形式で定義してもよい。順序規則保持部１５３は、例えば、図示されない記憶装置や記憶領域の一部によって構成されていてもよい。順序規則演算部１５１は、順序規則に基づいて順序列を演算する。順序列は、順序規則に基づいて生成されるフリーブロックリストの順序を表す情報である。例えば、順序列は、フリーブロックリストの識別子が順番に並べられた情報である。順序列と、後述する位置情報とからフリーブロックリストを選択する。
【００４３】
位置情報記憶部１５４は、位置情報を記憶する。位置情報は、順序規則に従いフリーブロックリストの順序列を作成した場合の順序列上の位置を示す情報である。換言すれば、位置情報は、順序規則に基づいて定まる各フリーブロックリストの順番を示す情報である。位置情報更新部１５２は、位置情報記憶部１５４に記憶される位置情報の更新を行う。例えば、位置情報更新部１５２は、順序規則演算部１５１でフリーブロックリストが選択された後に、位置情報を、次に選択するフリーブロックリストを示す位置に更新する。
【００４４】
次に、本発明の各実施形態によるデータの書き込み処理について、図５のフローチャートを用いて概略的に説明する。本発明の各実施形態では、データ書き込み時の転送能力を確保するため、ホスト機器２００から受信した書き込みデータを一時的にバッファメモリ１２１に格納する。そして、バッファメモリ１２１に十分な量のデータが格納されてから、バッファメモリ１２１から書き込みデータを読み出して複数のフリーブロックに対して並列書き込みを行う。
【００４５】
図５において、インタフェース部１２０がホスト機器２００からライトコマンドを待機し、ライトコマンドを受信すると（ステップＳ１０）、インタフェース部１２０は、コントローラ部１３０に対してライトコマンドの受信を通知する（ステップＳ１１）。ライトコマンドは、書き込みデータを書き込むアドレスを示す情報を含む。
【００４６】
このライトコマンド受信の通知を受けて、次のステップＳ１２で、コントローラ部１３０のデータ書込部１３３は、バッファメモリ１２１上にホスト機器２００から送信される書き込みデータを受信する領域を確保する。そして、データ書込部１３３は、バッファメモリ１２１上に確保した当該領域に対してホスト機器２００から送信された書き込みデータを受信するように、インタフェース部１２０に対して指示を出す。次のステップＳ１３で、インタフェース部１２０は、ホスト機器２００から送信された書き込みデータを受信して、受信した書き込みデータを、ステップＳ１２でバッファメモリ１２１上に確保された領域に格納する。
【００４７】
次のステップＳ１４で、データ書込部１３３は、バッファメモリ１２１上に格納された書き込みデータのデータ量を確認し、バッファメモリ１２１上に所定量の書き込みデータが格納されたか否かを判定する。若し、バッファメモリ１２１に格納された書き込みデータのデータ量が所定量未満であれば、処理はステップＳ１０に戻され、ホスト機器２００からのコマンド待機状態とされる。
【００４８】
一方、ステップＳ１４で、バッファメモリ１２１に所定量の書き込みデータが格納されたと判定されたら、処理はステップＳ１５に移行される。ステップＳ１５で、データ書込部１３３は、バッファメモリ１２１に格納された書き込みデータを書き込むために必要なフリーブロック数を計算する。
【００４９】
次のステップＳ１６で、データ書込部１３３は、ステップＳ１５で計算された必要数のフリーブロックを、フリーブロック管理部１４０に対して要求する。フリーブロックがフリーブロック管理部１４０に要求されると、処理は、本発明の各実施形態における特徴である、ステップＳ１７に移行される。ステップＳ１７では、データ書込部１３３からの要求を受けて、フリーブロック管理部１４０は、要求された数の並列書き込みが可能なフリーブロックの組をフリーブロックリスト１４１0、１４１1、…、１４１m、…、１４１nから抽出する。そして、抽出されたフリーブロックを示す情報をデータ書込部１３３に返す。
【００５０】
次のステップＳ１８で、データ書込部１３３は、バッファメモリ１２１上の書き込みデータを、フリーブロック管理部１４０から取得した情報に示されるフリーブロックに対して並列書き込みを行うように、ＮＡＮＤドライバ１３５に要求する。次のステップＳ１９で、ＮＡＮＤドライバ１３５は、不揮発性メモリ部１２２が有する図示されないＮＡＮＤコントローラを制御して、データ書込部１３３から要求された書き込みデータの並列書き込みを実行する。
【００５１】
ステップＳ１９でフリーブロックに対する書き込みデータの書き込みが行われると、次のステップＳ２０で、データ書込部１３３は、書き込んだデータのアドレスとブロックとの対応関係を全てデータ管理部１３４に登録する。次のステップＳ２１で、データ管理部１３４は、登録前すなわちステップＳ１９によるデータの書き込み前に、書き込みデータの書き込みを指示されたアドレスに関連付けられていたアクティブブロックをフリーブロックとしてフリーブロック管理部１４０に通知する。
【００５２】
次のステップＳ２２で、フリーブロック管理部１４０は、ステップＳ２１にてデータ管理部１３４から通知されたフリーブロックが属するプレーンに対応するフリーブロックリスト１４１mを特定し、特定されたフリーブロックリスト１４１mに対して、データ管理部１３４から通知されたフリーブロックを繋ぐ。
【００５３】
＜第１の実施形態＞
次に、本発明の第１の実施形態について説明する。以降では、本第１の実施形態の特徴であるフリーブロック選択処理（図５のステップＳ１７）について詳細に述べる。
【００５４】
フリーブロック管理部１４０が並列書き込みが可能なフリーブロックの組を選択する際には、フリーブロック管理部１４０が管理するフリーブロックリスト１４１0、１４１1、…、１４１m、…、１４１nの中から所定の順序規則に従いフリーブロックリスト１４１mを選択し、選択したフリーブロックリスト１４１mからフリーブロックを取得する。
【００５５】
順序規則は、順序規則に基づき演算された順序列に示される順にフリーブロックリスト１４１0、１４１1、…、１４１m、…、１４１nからフリーブロックリスト１４１mを選択すれば、並列書込み可能な組のフリーブロックが取得できる規則であることが望ましい。
【００５６】
一例として、図６に示されるように、不揮発性メモリ部１２２の有するチップ数が４であって、各チップ＃０〜チップ＃３内のプレーン数が２の場合について考える。この場合、全体としてプレーンＰ０〜プレーンＰ７の８のプレーンが存在し、それら８のプレーン間では、全て並列書込みが可能である。この場合、各プレーンからフリーブロックを１個ずつ選択すれば、最大で８並列での書き込みが可能である。
【００５７】
なお、図６において、それぞれの升はブロックを示し、升中の数字は、ブロックに動的に対応付けられたアドレスを表す。また、図中の矢印は、データのブロックに対する書き込み方向またはフリーブロックの取得方向を示す。これらは、特に記載のない限り、以降の同様の図について共通である。
【００５８】
例えば、プレーンＰ０〜Ｐ７にそれぞれ対応するフリーブロックリスト１４１m、１４１m+1、…、１４１m+7に対して「０」から「７」までの識別子を対応付けて所定の順序に並べ、式（１）のような、識別子の列で表現される長さ８の順序規則を作る。順序規則は、例えば予め作成し、順序規則テーブル１５３に保持しておく。
｛０，１，２，３，４，５，６，７｝    …（１）
【００５９】
この式（１）に示される順序規則を巡回的に繰り返せば、どの位置からフリーブロックリストの選択を開始したとしても、最大で８並列の書き込みが可能なフリーブロックを選択できる。例えば、順序規則上の識別子「４」で示される位置からフリーブロックリストの選択が始まった場合、式（２）に示されるように、識別子「４」の位置から選択を開始し、識別子「７」の位置から識別子「０」の位置に巡回的に戻り、さらに識別子「３」の位置まで順次、フリーブロックリストを選択すればよい。
｛４，５，６，７，０，１，２，３｝    …（２）
【００６０】
次に、並列書き込みが可能なプレーンの組に制約がある場合について考える。このような場合、並列書き込みのできないプレーン同士の順序規則における順序列上の距離ができる限り離れるように、順序規則を作成すればよい。
【００６１】
一例として、図７に示されるように、不揮発性メモリ部１２２の有するチップ数が４であり、各チップ１２３、１２３、…内のプレーン数が２であって、各チップ１２３、１２３、…は、２個ずつ組で２個のバンク３００1（バンクＢ０）およびバンク３００2（バンクＢ１）を構成している場合について考える。以下では、このような構成を、バンク・チップ・プレーン構成と呼ぶ。バンク・チップ・プレーン構成では、同じバンクに属するチップは並列書込みできない制約がある。したがって、この場合の最大並列度、すなわち並列書き込みが可能な最大のブロック数は、４となる。
【００６２】
なお、図７において、各チップ１２３、１２３、…は、バンク内でチップＣ０、Ｃ１として区別されており、各チップ１２３、１２３、…内のプレーンは、プレーンＰ０、Ｐ１として区別される。
【００６３】
図７において、各プレーンを、「Ｂ（バンク番号）Ｃ（バンク内チップ番号）Ｐ（チップ内プレーン番号）」と表記する。例えば、バンクＢ０に属するチップＣ０内のプレーンＰ０は、「Ｂ０Ｃ０Ｐ０」と表記される。このとき、例えば下記の式（３）に示す順序規則を作ることが考えられる。式（３）に示される順序規則では、それぞれのバンクで１のチップを選択することで、最大で４並列の書き込みを実現している。
｛Ｂ０Ｃ０Ｐ０，Ｂ０Ｃ０Ｐ１，Ｂ１Ｃ０Ｐ０，Ｂ１Ｃ０Ｐ１，Ｂ０Ｃ１Ｐ０，Ｂ０Ｃ１Ｐ１，Ｂ１Ｃ１Ｐ０，Ｂ１Ｃ１Ｐ１｝    …（３）
【００６４】
この式（３）の順序規則では、プレーンＰ０からフリーブロックの取得が始まる場合には、最大で４並列書き込み可能にフリーブロックを取得することができる。例えば、プレーンＢ１Ｃ０Ｐ０からフリーブロックの取得を開始する場合、プレーンＢ１Ｃ０Ｐ０、プレーンＢ１Ｃ０Ｐ１、プレーンＢ０Ｃ０Ｐ０、プレーンＢ０Ｃ０Ｐ１の順にフリーブロックを取得できる。
【００６５】
一方、プレーンＰ１から始まる場合には、並列書き込み可能なフリーブロックを、３並列までしか取得できない。例えば、プレーンＢ０Ｃ０Ｐ１からフリーブロックの取得を開始する場合、プレーンＢ０Ｃ０Ｐ１、プレーンＢ１Ｃ０Ｐ０、プレーンＢ１Ｃ０Ｐ１の順に取得したフリーブロックは並列書き込みが可能である。しかしながら、次のプレーンＢ０Ｃ１Ｐ０は、最初に選択を行ったプレーンＢ０Ｃ０Ｐ１と同一のバンクの異なるチップのプレーンであるため、当該プレーンＢ０Ｃ１Ｐ０に属するフリーブロックは、プレーンＢ０Ｃ０Ｐ１から取得したフリーブロックと並列書き込みができない。
【００６６】
この並列書込み可能なプレーンの組に制約がある場合のように、常に最大並列度でのフリーブロック取得が可能な順序規則とはならない場合がある。
【００６７】
次に、本第１の実施形態によるフリーブロック取得処理について、より詳細に説明する。図８は、ブロック管理部１３１による並列書込みが可能なフリーブロックの一例の選択処理を示すフローチャートである。この図８のフローチャートによる処理は、上述した図５のフローチャートにおけるステップＳ１７の処理に対応するものである。なお、以下の説明において、図５のステップＳ１６でデータ書込部１３３から要求された必要数ｒのフリーブロックが要求されたものとする。また、順序規則は、予め所定の順序規則に決められているものとする。
【００６８】
先ず、ブロック管理部１３１は、位置情報記憶部１５４から位置情報Ｐｏｓを取得して（ステップＳ３０）、取得した位置情報Ｐｏｓで示される位置のフリーブロックリスト１４１mからフリーブロック選択を開始した場合の最大並列度ｑを計算する（ステップＳ３１）。
【００６９】
最大並列度ｑは、上述した並列書き込みが可能なプレーンの組に対する制約と、フリーブロック選択処理を開始する位置とに依存する。換言すれば、最大並列度ｑは、不揮発性メモリ部１２２におけるチップ１２３、１２３、…の構成や、上述したバンクなどによる各チップ１２３、１２３、…の運用に依存する。
【００７０】
この制約や運用に関する情報は、ブロック管理部１３１が有する図示されないＲＯＭ(Read Only Memory)や、不揮発性メモリ部１２２に予め記憶しておくことができる。これに限らず、当該制約や運用をホスト機器２００側から動的に設定できる場合は、ホスト機器２００からインタフェース部１２０を介して供給されてもよい。ブロック管理部１３１は、位置情報Ｐｏｓと、当該制約や運用を示す情報とに基づき、最大並列度ｑを計算する。
【００７１】
次のステップＳ３２で、ブロック取得数ｒｂおよびリスト選択回数ｉがそれぞれ０に初期化され、処理がステップＳ３３に移行される。
【００７２】
ステップＳ３３では、ブロック管理部１３１は、順序規則演算部１５１に位置情報Ｐｏｓを渡す。順序規則演算部１５１は、フリーブロック管理部１４０に管理されているフリーブロックリスト１４１1、１４１2、…、１４１m、…、１４１nから、位置情報Ｐｏｓと、順序規則テーブル１５３に保持された所定の順序規則とに従い、リスト選択回数ｉに対応する１のフリーブロックリスト１４１mを選択する。以下、特に記載のない限り、このリスト選択回数ｉに対応するフリーブロックリスト１４１mを、フリーブロックリストＬ(ｉ)と記述する。選択されたこのフリーブロックリストＬ(ｉ)は、ブロック管理部１３１に返される。
【００７３】
ブロック管理部１３１は、順序規則演算部１５１から返されたフリーブロックリストＬ(ｉ)にフリーブロックが残っているか否かを調べる。調べた結果、若し、当該フリーブロックリストＬ(ｉ)にフリーブロックが残っていないと判断されたら、処理はステップＳ３７に移行される。この場合には、当該フリーブロックリストＬ(ｉ)からフリーブロックを取得できないことになる。
【００７４】
一方、ステップＳ３４で、当該フリーブロックリストＬ(ｉ)にフリーブロックが残っていると判断されたら、処理はステップＳ３５に移行される。ステップＳ３５では、フリーブロック選択部１５０がフリーブロックリストＬ(ｉ)からフリーブロックＢ(ｉ)を選択する。ブロック管理部１３１は、選択された当該フリーブロックＢ（ｉ）を取得する。そして、次のステップＳ３６で、ブロック管理部１３１は、ブロック取得数ｒｂを１だけ増加させる。次のステップＳ３７で、フリーブロック選択部１５０は、リスト選択回数ｉを１だけ増加させてリスト選択回数を計数する。
【００７５】
次のステップＳ３８で、位置情報更新部１５２は、位置情報記憶部１５４に保持されている位置情報Ｐｏｓを、順序規則による順序列上の次の位置を示す位置情報Ｐｏｓに更新する。このとき、当該次の位置が順序規則による順序列の最終位置を超えた場合には、次の位置を順序規則による順序列の先頭に設定する。
【００７６】
処理はステップＳ３９に移行され、ブロック管理部１３１は、ブロック取得数ｒｂが要求されたフリーブロック必要数ｒに達したか否かを判定する。若し、達したと判定されたら、図８のフローチャートによる一連の処理が終了され、処理が図５のステップＳ１８に移行される。
【００７７】
一方、ステップＳ３９で、ブロック取得数ｒｂがフリーブロック必要数ｒに達していないと判定されたら、処理はステップＳ４０に移行される。ステップＳ４０で、ブロック管理部１３１は、リスト選択回数ｉが最大並列度ｑに達したか否かを判定する。若し、達していないと判定したら、処理はステップＳ３３に戻され、次のフリーブロックリストＬ(ｉ)に関する処理が行われる。
【００７８】
一方、リスト選択回数ｉが最大並列度ｑに達したと判定した場合には、図８のフローチャートによる一連の処理が終了され、処理が図５のステップＳ１８に移行される。すなわち、この場合には、取得したフリーブロック数は要求された必要数に達していない一方で、フリーブロック管理部１４０に管理されるフリーブロックリスト１４１1、１４１2、…、１４１m、…、１４１nから、これ以上、並列書き込みが可能な組のフリーブロックが取得できない。そのため、フリーブロックの選択処理を終了させる。
【００７９】
このように、本第１の実施形態によれば、示される順にフリーブロックリストを選択すれば並列書き込みが可能なフリーブロックの組が取得できるように、順序規則を作成している。そのため、ホスト機器から特定のアドレスに対しての書き込みが繰り返された場合でも、順序規則に従いフリーブロックを取得していくことで、プレーン間でのブロック取得回数の偏りが抑制され、特定のブロックに消去回数が集中することを避けることができる。
【００８０】
また、複数の異なるアドレスへの書き込みデータがバッファメモリに蓄積された場合に、特定のプレーンへの書き込み集中を避け、できる限り多くの複数のプレーンに対して並列書込みを行うことができるため、転送性能を良好に維持することが可能である。
【００８１】
なお、上述では、フリーブロックやアクティブブロックなど管理単位がチップ固有の物理的なブロックであるものとして説明したが、これはこの例に限定されない。例えば、図９に例示されるように、複数の物理的なブロックを常に纏めて使用する場合、当該複数のブロックを纏めた論理的なブロックを管理単位としてよい。
【００８２】
図９において、バンク、チップおよびプレーンの構成は、上述した図７の構成と同様である。一方、図９では、バンクＢ０およびバンクＢ１の各バンク内において、チップＣ０およびチップＣ１の番号が対応するプレーン同士が纏められて管理されている。バンクＢ０の例では、チップＣ０のプレーンＰ０と、チップＣ１のプレーンＰ０とが纏められて、プレーンＰ０’として管理される。同様に、チップＣ０のプレーンＰ１と、チップＣ１のプレーンＰ１とが纏められて、プレーンＰ１’として管理される。
【００８３】
この場合、バンクＢ０のプレーンＰ０’およびプレーンＰ１’と、バンクＢ１のプレーンＰ０’およびプレーンＰ１’とで、４並列の書き込みが可能である。これらバンクＢ０のプレーンＰ０’およびプレーンＰ１’と、バンクＢ１のプレーンＰ０’およびプレーンＰ１’とに対して、順序規則を適用することができる。
【００８４】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。本第２の実施形態では、できる限り多くの並列書き込みが可能な組のフリーブロックが取得できる順序で、全てのフリーブロックリストを一度ずつ並べた順序規則を、順序規則の小周期と定義する。そして、この小周期を所定の順序で並べることで、より長周期の新たな順序規則を作成する。
【００８５】
上述した第１の実施形態で示したフリーブロック選択方法では、書き込みデータのアドレスのパターンによっては、フリーブロック数およびアクティブブロック数に、フリーブロックリスト間で偏りが生じる可能性がある。これは、あるアドレスＡを上書きした際に、書き込み前にアドレスＡに対応付けられていたアクティブブロックＢ１と、書き込むために取得したフリーブロックＢ２とが、同じプレーンに属しているとは限らないからである。
【００８６】
より具体的には、これらアクティブブロックＢ１とフリーブロックＢ２とが異なるプレーンに属していた場合、フリーブロックリストにおけるフリーブロック数は、アクティブブロックＢ１が属していたプレーンに対応するフリーブロックリストでは１個増加し、フリーブロックＢ２が属していたプレーンに対応するフリーブロックリストでは１個減少する。
【００８７】
一般的な利用方法では書き込むアドレスが確率的に分散するため、フリーブロックリスト間でのフリーブロック数の偏りはそれほど大きくならないと考えられる。しかし、上述の第１の実施形態で示した順序規則では、書込み要求のアドレスに特定のパターンが存在する場合に、特定のフリーブロックリストにフリーブロックが集中し、他のフリーブロックリストでフリーブロックが枯渇する場合が起こり得る。この場合、ブロック管理部１３１でフリーブロックの選択を行う際の並列度が下がり、転送性能が劣化する。
【００８８】
例えば、ＳＳＤ１００がホスト機器２００に提供する容量全てに対して先頭アドレスから書込みを行った場合（全面シーケンシャルライトと呼ぶ）、ある特定周期のアドレスに対応するアクティブブロックが特定プレーンに集中する。図１０（ａ）を用いて説明すると、プレーン数が８の場合、アドレスが「ブロックサイズ×８」に対応するアクティブブロックがプレーン０に集中する。図１０（ａ）の例では、例えばアドレスＡ０、Ａ８、Ａ１６、…に対応するアクティブブロックがプレーンＰ０に集中する。これは、他のプレーンについても同様である。
【００８９】
ここで、アドレスが「ブロックサイズ×８」となる書込みを繰り返した場合について考える。この場合、書き込みに使用されるフリーブロック（図中に斜線を付して示す）は、プレーンＰ０〜Ｐ７の全プレーンから選択される。一方、書き込み後に解放されるアクティブブロックは、プレーンＰ０に集中する。したがって、図１０（ｂ）に例示されるように、アクティブブロックが解放された後のフリーブロックも、プレーンＰ０に集中することになる。
【００９０】
このように、特定プレーンに属するアクティブブロックに対応付けられたアドレスに周期性が存在すると、その周期でアドレスを上書きする書き込みパターンに対して、書き込み時の並列度の確保や、ブロック間での消去回数の平準化を実現することが困難になるおそれがある。
【００９１】
本第２の実施形態は、上述した第１の実施形態による順序規則に対し、できるだけ周期性を弱めるように、あるいは、周期が大きくなるように変更を施す。図１１は、本第２の実施形態による順序規則の作成方法の例を概略的に示すフローチャートである。
【００９２】
先ず、上述した第１の実施形態と同様にして順序規則を作成し、これを小周期とする（ステップＳ５０）。次に、ステップＳ５０で作成された小周期内で順序規則による順序を一部入れ替えて、他の小周期を作成する（ステップＳ５１）。最後に、ステップＳ５０で作成された小周期と、ステップＳ５１で作成された他の小周期とを所定の順序で複数並べて新たな順序規則とする（ステップＳ５２）。この新たな順序規則は、元の順序規則に対してより周期の長い、長周期順序規則である。つまり、長周期順序規則は、複数の異なる小周期の順序規則に基づいて生成される。
【００９３】
ここで、ステップＳ５２では、小周期および他の小周期をそれぞれ複数回使用してもよいし、同じ小周期を複数回連続的に使用してもよい。また、ステップＳ５１において、小周期内でフリーブロックリストを入れ替えて作成できる他の小周期は多数存在するが、ステップＳ５２で新しい順序規則を作成する際に、考え得る全ての小周期を使用する必要はない。
【００９４】
次に、本第２の実施形態を、より具体的な例を用いて説明する。先ず、第１の例として、並列書き込みが可能なプレーン数が２の場合について説明する。なお、以下では適宜、プレーンをプレーンＰｘ（ｘは０以上の整数）または単にＰｘ、アドレスをアドレスＡｘまたは単にＡｘのように記述する。
【００９５】
図１２（ａ）を参照し、並列書き込みが可能なプレーン数が２の場合、順序規則の小周期は、次に小周期Ａおよび小周期Ｂとして示される２種類がある。各小周期の順序規則は、例えば予め作成して順序規則テーブル１５３に保持しておくことができる。
小周期Ａ：｛Ｐ０，Ｐ１｝
小周期Ｂ：｛Ｐ１，Ｐ０｝
【００９６】
これら小周期Ａおよび小周期Ｂを並べて、新しい順序規則を作る。図１２（ｂ）は、小周期Ａおよび小周期Ｂをそれぞれ４回ずつ使用し、８個の小周期により長さ１６の順序規則を作成した例を示す。図１２（ｃ）を参照し、この場合の順序規則は、式（４）のようになる。位置情報更新部１５２は、この小周期Ａおよび小周期Ｂを並べた新しい順序規則に従い位置情報を更新する。
｛Ｐ０，Ｐ１，  Ｐ１，Ｐ０，  Ｐ１，Ｐ０，  Ｐ０，Ｐ１，  Ｐ１，Ｐ０，  Ｐ０，Ｐ１，  Ｐ０，Ｐ１，  Ｐ１，Ｐ０｝    …（４）
【００９７】
この式（４）による順序規則に従い、上述した全面シーケンシャルライトを行った場合、各ブロックに対してアドレスが図１３（ａ）に例示されるように割り当てられる。すなわち、各プレーンＰ０およびＰ１の先頭のブロックには、順序規則に従いプレーンＰ０、プレーンＰ１の順序でアドレスＡ０、Ａ１が割り当てられる。次のブロックには、プレーンＰ１、プレーンＰ０の順序でアドレスＡ２、Ａ３が割り当てられる。以降、順序規則に従い、順次アドレスＡ４、Ａ５、…が割り当てられる。
【００９８】
この後に、アドレスが「ブロックサイズ×ｋ」となる周期的な書込みを行った場合の例を、図１３（ｂ）、図１３（ｃ）および図１３（ｄ）に示す。図１３（ｂ）はｋ＝２の場合の例、図１３（ｃ）はｋ＝４の場合の例、図１３（ｄ）はｋ＝８の場合の例である。
【００９９】
ｋ＝２の場合、全面シーケンシャルライト時に割り当てられたアドレスのうちアドレスＡ０、Ａ２、Ａ４、…に対応するブロックが解放される。ｋ＝４の場合、全面シーケンシャルライト時に割り当てられたアドレスのうちアドレスＡ０、Ａ４、Ａ８、…に対応するブロックが解放される。また、ｋ＝８の場合、全面シーケンシャルライト時に割り当てられたアドレスのうちアドレスＡ０、Ａ８、Ａ１６、…に対応するブロックが解放される。
【０１００】
ｋ＝２、ｋ＝４およびｋ＝８のそれぞれについて、解放されるブロックが属するプレーンで示すと、下記の式（５）〜式（７）のようになる。
ｋ＝２：｛Ｐ０，Ｐ１，Ｐ１，Ｐ０，Ｐ１，Ｐ０，Ｐ０，Ｐ１，…｝    …（５）
ｋ＝４：｛Ｐ０，Ｐ１，Ｐ１，Ｐ０，…｝    …（６）
ｋ＝８：｛Ｐ０，Ｐ１，…｝    …（７）
【０１０１】
これら式（５）〜式（７）に示されるように、並列書き込みが可能なプレーン数の倍数の周期で書き込みを行っても、書き込み前のアクティブブロックが特定のプレーンに偏ることが抑制される。但し、アドレスの周期が順序規則の長さの倍数となった場合（この例の場合、ｋ＝１６）には、書き込み前のアクティブブロックが特定のプレーンに偏る現象が発生する。
【０１０２】
次に、順序規則演算部１５１における順序規則の演算方法について説明する。順序規則演算部１５１の形態としては、予め作成された順序規則を保持したテーブルを用いるテーブル方式と、演算により順序規則を算出する演算方式との２種類が考えられる。
【０１０３】
テーブル方式は、順序規則を持つ小周期を並べて作成した新たな順序規則を順序規則テーブルに予め保持しておく。順序規則演算部１５１は、フリーブロックリスト選択の際に、この順序規則テーブル１５３上で、位置情報Ｐｏｓが示す順序規則における順序列上の位置を参照し、フリーブロックリストの識別子を検索する。
【０１０４】
演算方式は、順序規則演算部１５１が、位置情報Ｐｏｓから演算によりフリーブロック識別子を生成して順序規則を作成する方法である。例えば前記のプレーン数が２、長さが１６の順序規則の例では、下記の式（８）に例示する演算でプレーンを決定できる。
【０１０５】
なお、式（８）は、プログラム言語として一般的に用いられるＣ言語の記法に準じて演算手順を記述している。なお、Ｃ言語では２進数表記はできないが、式（８）においては、仮に"0b"を接頭辞として付加することにより、その後に連なる"0"および"1"が２進数を表すものとしている。例えば、"0b10010110"は、１６進表記の"0x96"と同等となる。式（８）において、コロン（：）で区切られて各行の先頭に記述される数字は、行番号を表す。行番号「１」〜「５」で示される５行を、纏めて式（８）とする。ダブルスラッシュ（//）の後は、各行の説明である。
【０１０６】
１：pattern = 0b10010110; // 小周期の順序を表す２進数
２：y = pos / 2; // 何番目の小周期か
３：x = pos % 2 // 小周期の中で何番目か
４：period_id = ( pattern >> y ) & 0b1; // どの小周期を使用するか
５：plane_id = period_id ^ x; // 小周期識別子と小周期内での順序との排他的論理和    …（８）
【０１０７】
式（８）において、値posは、位置情報を表す値であり、０から１５までの値をとる。値period_idは、小周期を表す値であり、値が０で小周期Ａ、値が１で小周期Ｂを表すものとする。また、値plane_idは、その順序で選択すべきプレーンの番号を表す。また、式（８）の例では、小周期Ａおよび小周期Ｂにおける順序規則は、５行目の式で表される。
【０１０８】
次に、並列書き込みが可能なプレーンの数が多い場合について説明する。並列書き込みが可能なプレーン数が多い場合、順序を入れ替えた小周期の数も多数となる。このとき、小周期を組み合わせて順序規則を作る際に、考え得る全ての小周期を使用する必要は無い。また、フリーブロックリストの選択開始位置が小周期の途中である場合、フリーブロックリストの選択を異なる小周期を跨いで行う可能性がある。このような場合でもできるだけ並列度を大きく維持できるように小周期を選択し、並べることが望ましい。
【０１０９】
一例として、プレーン数が８で、プレーン間に並列書き込みに対する制約が無い場合について考える。この場合、考え得る小周期の数は、８！個存在することになる。
【０１１０】
これらのうち、例えば、下記の式（９）および式（１０）で示される小周期（プレーンに対応するフリーブロックリストの識別子で示す）を式（９）、式（１０）の順に並べると、式（９）で示される小周期から式（１０）で示される小周期へと跨いでフリーブロックリストの選択を行う際に、プレーンＰ７のフリーブロックリストを連続して選択することになる。そのため、この２つの小周期を跨ぐような並列書き込みが可能なブロックの組を選択することができない。
｛０，１，２，３，４，５，６，７｝    …（９）
｛７，０，１，２，３，４，５，６｝    …（１０）
【０１１１】
そこで、連続して選択される位置におけるフリーブロックリストの識別子が同一にならないように、小周期を選択して並べる。これにより、フリーブロックリストの選択の際に小周期を跨ぐような場合でも、並列書き込みが可能なフリーブロックの組を選択できるようになる。
【０１１２】
例えば、下記の式（１１）および式（１２）で示される小周期について考える。式（１２）で示される順序規則は、式（１１）で示される順序規則に対して、順序を７だけ進めたものと考えることができる。これら式（１１）および式（１２）で示される小周期を、式（１１）、式（１２）の順に並べると、連続して選択が行われる式（１１）の末尾の識別子と、式（１２）の先頭の識別子とが異なるので、式（１１）による小周期から式（１２）による小周期へと跨ぐ場合であっても、並列書き込みが可能なフリーブロックの組を選択することができる。それと共に、小周期を跨ぐ場合でも、並列度が７で並列書き込みが可能なフリーブロックの組を選択することが可能である。
｛０，１，２，３，４，５，６，７｝    …（１１）
｛１，２，３，４，５，６，７，０｝    …（１２）
【０１１３】
図１４は、プレーン数が８（プレーンＰ０〜プレーンＰ７）で、プレーン間に並列書き込みに対する制約が無い場合の順序規則の例を示す。プレーンＰ０〜Ｐ７のそれぞれには、異なるフリーブロックリストの識別子Ｐ０〜Ｐ７が対応付けられている。図１４の例では、識別子Ｐ０を先頭とし、識別子Ｐ７を末尾とする順序規則｛Ｐ０，Ｐ１，Ｐ２，Ｐ３，Ｐ４，Ｐ５，Ｐ６，Ｐ７｝による小周期Ａと、当該小周期Ａに対して順序規則上の順序を７ずつ進めた小周期Ｂ、Ｃ、…、Ｈとを並べて、新たな順序規則を作成する。順序規則の異なる小周期を並べることで、特定のプレーンへのフリーブロックの集中を抑制できる。
【０１１４】
図１４の例では、新たな順序規則は、各小周期Ａ〜Ｈがそれぞれ４回ずつ繰り返して並べられ、全体として小周期数が３２、長さが２５６とされている。このように、同じ小周期を複数回、繰り返して並べてもよい。同じ小周期が繰り返される範囲内では、８並列で書き込みが可能とされる。
【０１１５】
さらに、異なる小周期を跨いでフリーブロックリストの選択が行われる際の並列度が最大になるように、各小周期Ａ〜Ｈを並べるとより好ましい。図１４の例では、異なる小周期が隣接する場合において、フリーブロックリストの選択順に、小周期の順序規則における順序が７ずつ進むように各小周期の順序規則が作成されている。この場合、フリーブロックリストの選択の際に小周期を跨ぐ場合でも、並列度が７で並列書込み可能な組を選択すること可能である。
【０１１６】
次に、上述の第１の実施形態において図７を用いて説明した、バンク・チップ・プレーン構成で並列書き込みに制約がある場合に、本第２の実施形態を適用した例について説明する。この場合、上述したように、フリーブロックの取得を開始するプレーンによって、最大並列度が変化する。
【０１１７】
図１５は、バンク・チップ・プレーン構成における順序規則の例を示す。図１５の例では、バンク数が４（Ｂ０〜Ｂ３）、バンク内のチップ数が２（Ｃ０、Ｃ１）、チップ内のプレーン数が２（Ｐ０、Ｐ１）となっており、総プレーン数が１６である。ここで、同一バンク内の異なるチップに対して並列書き込みができないという制約があるため、最大の並列書き込み数は、８となる。
【０１１８】
なお、図１５において、各プレーンに対応するフリーブロックリストの識別子を、バンク番号、チップ番号およびプレーン番号を組み合わせて、「Ｂ０Ｃ０Ｐ０」のように表現する。
【０１１９】
図１５の例では、小周期内においてプレーン番号、バンク番号、チップ番号の順で変更を行って各小周期の順序規則を作成することで、できるだけ並列度を高くしている。例えば、小周期Ａは、順序規則が｛Ｂ０Ｃ０Ｐ０，Ｂ０Ｃ０Ｐ１，Ｂ１Ｃ０Ｐ０，Ｂ１Ｃ０Ｐ１，Ｂ２Ｃ０Ｐ０，Ｂ２Ｃ０Ｐ１，Ｂ３Ｃ０Ｐ０，Ｂ３Ｃ０Ｐ１，Ｂ０Ｃ１Ｐ０，Ｂ０Ｃ１Ｐ１，Ｂ１Ｃ１Ｐ０，Ｂ１Ｃ１Ｐ１，Ｂ２Ｃ１Ｐ０，Ｂ２Ｃ１Ｐ１，Ｂ３Ｃ１Ｐ０，Ｂ３Ｃ１Ｐ１｝となる。
【０１２０】
この図１５に例示される順序規則では、図７を用いて説明した例と同様に、プレーンＰ０からフリーブロックの取得が始まる場合には、８並列での書き込みが可能である。一方、プレーンＰ１からフリーブロックの取得が始まる場合には、同一のバンク内の異なるチップのプレーンＰ０とプレーンＰ１とに対して並列書き込みができないという制約のため、７並列の書き込みに制限される。
【０１２１】
この小周期Ａのバンク番号およびチップ番号を変えずにプレーン番号のみを入れ替えた小周期Ｂを用意する。さらに、周期的なアドレスへの書込みで特定のバンクにフリーブロックが偏ることを防ぐために、小周期Ａおよび小周期Ｂに対してそれぞれバンクの順序を入れ替えた小周期Ｃ〜小周期Ｈを用意する。このとき、バンク順が異なる小周期を跨ぐ場合に並列度が５または６に制限されるため、バンク番号の順番が同じ小周期を連続させて、新たな順序規則を作成する。具体的には、小周期Ａと、当該小周期Ａとバンク番号の順序が同じ小周期Ｂとが連続される。同様に、小周期Ｃおよび小周期Ｄ、小周期Ｅおよび小周期Ｆ、小周期Ｇおよび小周期Ｈがそれぞれ連続される。
【０１２２】
上述では、テーブル方式または演算方式により、小周期を所定の回数だけ並べた順序規則を予め作成しておくように説明したが、これはこの例に限定されない。例えば、順序規則を、乱数を用いて動的に算出する形態も可能である。
【０１２３】
図１６は、２進乱数系列を用いて順序規則を算出する例を示す。図１６の例では、２進乱数系列を用いて、各小周期で乱数の値が０であれば小周期Ａ、乱数の値が１であれば小周期Ｂとして順序規則を算出している。順序規則を乱数系列に従い算出する場合、乱数系列が擬似乱数であれば、順序規則の長さは「擬似乱数の周期×プレーン数」となる。したがって、特定プレーンに属するアクティブブロックに対応付けられたアドレスに周期性がある場合でも、当該アドレスのアクティブブロックの特定プレーンに集中する周期が非常に長くなり、問題にはならない。
【０１２４】
順序規則を乱数を用いて算出する場合でも、順序規則演算部１５１の形態としては、上述と同様に、テーブル方式と演算方式とが考えられる。テーブル方式では、例えば、順序規則テーブル１５３において乱数表を順序規則として保持すればよい。
【０１２５】
演算方式の場合には、順序規則演算部１５１において乱数演算器を用意し、どの小周期を使用するかの演算に乱数を用いるようにすればよい。例えば下記の式（１３）に例示する演算で、乱数に基づきプレーンを決定できる。なお、式（１３）の方式および各値の意味は、上述した式（８）と共通であるので、ここでの説明を省略する。
【０１２６】
１：y = pos / 2; // 何番目の小周期か
２：x = pos % 2 // 小周期の中で何番目か
３：period_id = rand() & 0b1; // 乱数に基づき使用する小周期を決定
４：plane_id = period_id ^ x; // 小周期識別子と小周期内での順序との排他的論理和    …（１３）
【０１２７】
このように、本第２の実施形態によれば、順序規則を持つ小周期を所定の順序で並べて、より周期の長い新たな順序規則を作成している。そのため、ホスト機器からの書き込みのアドレスに周期性が存在する場合であっても、フリーブロックリスト間でのフリーブロック数およびアクティブブロック数の偏りを抑制することができる。また、本第２の実施形態では、小周期を並べる際に、できる限り並列度が大きくなるように工夫しているため、転送能力も確保できる。
【０１２８】
＜第３の実施形態＞
次に、本発明の第３の実施形態について説明する。上述した第２の実施形態では、フリーブロックリストの選択時に参照される順序規則自体を長周期化することで、フリーブロックリスト選択時の順序規則の周期性を弱めている。ここで、フリーブロックリスト選択時の順序規則の周期性を弱める、あるいは、順序規則の長周期化を行うことが目的であれば、位置情報の更新方法に変更を加えることでも当該目的を達成できる。
【０１２９】
本第３の実施形態は、所定の条件に合致する場合に、順序規則内のある順序をスキップすることで上述の目的を達成する。順序規則をスキップする条件としては、様々な条件が適用可能である。以下では、位置情報の更新数が所定数に達した時点で順序規則をスキップする第１の方法と、各プレーン毎に、フリーブロック取得数が所定数に達したらスキップする第２の方法とについて説明する。順序規則をスキップする条件は、例えばフリーブロック選択部１５０に対して予め定められているものとする。
【０１３０】
先ず、第１の方法である、位置情報の更新数が所定数に達した時点で順序規則をスキップする方法について、図１７のフローチャートを用いて説明する。この図１７のフローチャートは、上述した図５のフローチャートにおけるステップＳ１７の処理に対応するものであって、第１の実施形態で説明した図８のフローチャートに対し、スキップ処理が追加されている点が異なる。
【０１３１】
なお、図１７のフローチャートにおいて、ある時点の位置情報の更新数を位置情報更新数ｔＰｏｓとし、その初期値を０とする。順序規則のスキップを行うか否かを判定する位置情報更新数ｔＰｏｓの閾値を、予め決められた値であるスキップ閾値ｓＰｏｓとする。また、図５のステップＳ１６でデータ書込部１３３から必要数ｒのフリーブロックが要求され、順序規則は、予め所定の順序規則に決められているものとする。
【０１３２】
先ず、ブロック管理部１３１は、位置情報記憶部１５４から位置情報Ｐｏｓを取得して（ステップＳ６０）、取得した位置情報Ｐｏｓで示される位置のフリーブロックリスト１４１mからフリーブロックの選択を開始した場合の最大並列度ｑを計算する（ステップＳ６１）。最大並列度ｑの計算方法は、図８のステップＳ３１で説明した方法と共通であるので、ここでの詳細な説明は省略する。
【０１３３】
次のステップＳ６２で、ブロック管理部１３１は、ブロック取得数ｒｂおよびリスト選択回数ｉをそれぞれ０に初期化し、処理をステップＳ６３に移行させる。ステップＳ６３では、順序規則演算部１５１は、ブロック管理部１３１から渡された位置情報Ｐｏｓと所定の順序規則とに従い、フリーブロック管理部１４０に管理されているフリーブロックリスト１４１1、１４１2、…、１４１m、…、１４１nから１のフリーブロックリストＬ(ｉ)を選択して、ブロック管理部１３１に返す。
【０１３４】
ブロック管理部１３１は、順序規則演算部１５１から返されたフリーブロックリストＬ(ｉ)にフリーブロックが残っているか否かを調べる。若し、調べた結果、当該フリーブロックリストＬ(ｉ)にフリーブロックが残っていないと判断されたら、処理はステップＳ６７に移行される。
【０１３５】
一方、ステップＳ６４で、当該フリーブロックリストＬ(ｉ)にフリーブロックが残っていると判断されたら、処理はステップＳ６５に移行される。ステップＳ６５は、フリーブロック選択部１５０は、フリーブロックリストＬ(ｉ)からフリーブロックＢ(ｉ)を選択する。ブロック管理部１３１は、選択された当該フリーブロックＢ(ｉ)を取得する。次のステップＳ６６で、ブロック管理部１３１は、ブロック取得数ｒｂを１だけ増加させる。さらに、次のステップＳ６７で、フリーブロック選択部１５０がリスト選択回数ｉを１だけ増加させてリスト選択回数ｉを計数する。
【０１３６】
次のステップＳ６８で、位置情報記憶部１５４は、位置情報記憶部１５４に保持されている位置情報Ｐｏｓを、順序規則による順序列上の次の位置を示す位置情報Ｐｏｓに更新する。このとき、当該次の位置が順序規則による順序列の最終位置を超えた場合には、次の位置を順序規則による順序列の先頭に設定する。
【０１３７】
位置情報Ｐｏｓが更新されると、処理はステップＳ６９に移行され、フリーブロック選択部１５０が位置情報更新数ｔＰｏｓを１だけ増加させる。そして、次のステップＳ７０で、フリーブロック選択部１５０は、位置情報更新数ｔＰｏｓがスキップ閾値ｓＰｏｓ以上であるか否かを判定する。
【０１３８】
若し、位置情報更新数ｔＰｏｓがスキップ閾値ｓＰｏｓ以上であると判定したら、処理はステップＳ７１に移行され、位置情報更新部１５２により位置情報更新数ｔＰｏｓが０に初期化され、処理がステップＳ６７に戻される。このステップＳ７０における判定で処理がステップＳ６７に戻されることで、位置情報更新数ｔＰｏｓに基づく順序規則のスキップが実行される。
【０１３９】
一方、ステップＳ７０で、位置情報更新数ｔＰｏｓがスキップ閾値ｓＰｏｓ未満であると判定されたら、処理はステップＳ７２に移行される。ステップＳ７２で、ブロック管理部１３１は、ブロック取得数ｒｂが要求されたフリーブロック必要数ｒに達したか否かを判定する。若し、達したと判定されたら、図１７のフローチャートによる一連の処理が終了され、処理が図５のステップＳ１８に移行される。
【０１４０】
一方、ブロック取得数ｒｂがフリーブロック必要数ｒに達していないと判定されたら、処理はステップＳ７３に移行される。ステップＳ７３で、ブロック管理部１３１は、リスト選択回数ｉが最大並列度ｑに達したか否かを判定する。若し、達していないと判定されたら、処理はステップＳ６３に戻され、次のフリーブロックリストＬ(ｉ)に関する処理が行われる。
【０１４１】
一方、リスト選択回数ｉが最大並列度ｑに達したと判定された場合には、図１７のフローチャートによる一連の処理が終了され、処理が図５のステップＳ１８に移行される。
【０１４２】
図１８は、上述の図１７のフローチャートによる処理に従い、順序規則上でのスキップを行った例を示す。図１８において、プレーン数が８であって、８並列に書き込みが可能とされている。元となる順序規則は、小周期｛０，１，２，３，４，５，６，７｝のみを繰り返す順序列となっている。図１８は、スキップ閾値ｓＰｏｓを３２ブロックとし、位置情報更新数ｔＰｏｓが３２となった場合に、位置情報Ｐｏｓを次の位置に更新して順序規則をスキップする例である。
【０１４３】
図１８の例では、元の順序規則の順序列における３２番目のプレーンＰ７からフリーブロックが取得されたら、次の３３番目のプレーンＰ０からのフリーブロックの取得がスキップされる。それと共に、位置情報更新数ｔＰｏｓが０に初期化されて位置情報更新数ｔＰｏｓの累積が再開され、再び位置情報更新数ｔＰｏｓが３２になったら、位置情報Ｐｏｓを次の位置に更新して順序規則をスキップする。この場合、元の順序規則の順序列における６６番目のプレーンＰ１からのフリーブロックの取得がスキップされる。
【０１４４】
より具体的には、先ず、元の順序規則の順序列における３２番目で、プレーンＰ７からフリーブロックを取得した際に、位置情報更新数ｔＰｏｓが３２となり、図１７のフローチャートにおいて処理がステップＳ７０からステップＳ７１を介してステップＳ６７に戻される。そして、ステップＳ６８で位置情報Ｐｏｓが更新され、ステップＳ６９〜ステップＳ７３の処理を経て、処理がステップＳ６３に戻される。このように、ステップＳ７０の判定によりフリーブロックの取得を行わずに位置情報Ｐｏｓが更新され、順序規則がスキップされる。
【０１４５】
なお、スキップ発生の回数をフリーブロックリスト間で平準化するために、スキップ閾値ｓＰｏｓを順序規則の長さの倍数にすると、好ましい。すなわち、スキップ閾値ｓＰｏｓを順序規則の長さの倍数にした場合、順序規則の長さ分のフリーブロックの取得が行われたら、次の１プレーンをスキップして、その次のプレーンから、再び順序規則の長さ分のフリーブロックの取得を行う。これにより、スキップ位置で順序規則が１プレーン分ずれることになり、ブロック間での消去回数が平準化される。
【０１４６】
これに対して、スキップ閾値ｓＰｏｓを順序規則の長さの倍数−１とすると、特定のフリーブロックリストでのみスキップが発生することになり、好ましくない。
【０１４７】
次に、本第３の実施形態における第２の方法である、各プレーン毎に、フリーブロック取得数が所定数に達した時点で順序規則をスキップする方法について、図１９のフローチャートを用いて説明する。この図１９のフローチャートによる処理は、上述した第１の方法による図１７のフローチャートによる処理に対して、スキップ処理を行うタイミングが異なる以外は、略共通である。すなわち、この第２の方法においては、プレーン毎にスキップの発生回数を制御するために、順序規則をスキップする条件の判定を、プレーン毎に実行する。
【０１４８】
なお、図１９のフローチャートにおいて、フリーブロックリストＬ毎に定義されたスコア増加値ｗ[Ｌ]単位で増加する値をブロック取得スコアｔ[Ｌ]とし、ブロック取得スコアｔ[Ｌ]に対する閾値をスキップ閾値ｓ[Ｌ]とする。これらスコア増加値ｗ[Ｌ]、ブロック取得スコアｔ[Ｌ]およびスキップ閾値ｓ[Ｌ]は、ブロック管理部１３１において、プレーン毎に保持される。
【０１４９】
先ず、ブロック管理部１３１は、位置情報記憶部１５４から位置情報Ｐｏｓを取得して（ステップＳ８０）、取得した位置情報Ｐｏｓで示される位置のフリーブロックリスト１４１mからフリーブロック選択を開始した場合の最大並列度ｑを計算する（ステップＳ８１）。最大並列度ｑの計算方法は、図８のステップＳ３１で説明した方法と共通であるので、ここでの詳細な説明は省略する。
【０１５０】
次のステップＳ８２で、ブロック取得数ｒｂおよびリスト選択回数ｉがそれぞれ０に初期化され、処理がステップＳ８３に移行される。ステップＳ８３で、順序規則演算部１５１は、ブロック管理部１３１から渡された位置情報Ｐｏｓと所定の順序規則とに従い、フリーブロック管理部１４０に管理されているフリーブロックリスト１４１1、１４１2、…、１４１m、…、１４１nから１のフリーブロックリストＬ(ｉ)を選択して、ブロック管理部１３１に返す。
【０１５１】
次のステップＳ８４で、フリーブロック選択部１５０は、ブロック取得スコアｔ[Ｌ(ｉ)]とスキップ閾値ｓ[Ｌ(ｉ)]とを比較し、ブロック取得スコアｔ[Ｌ(ｉ)]がスキップ閾値ｓ[Ｌ(ｉ)]以上であるか否かを判定する。若し、ブロック取得スコアｔ[Ｌ(ｉ)]がスキップ閾値ｓ[Ｌ(ｉ)]以上であると判定されたら、ステップＳ９３でブロック取得スコアｔ[Ｌ(ｉ)]からスキップ閾値ｓ[Ｌ(ｉ)]を減じた値が新たなブロック取得スコアｔ[Ｌ(ｉ)]とされて、処理がステップＳ８９に移行される。この、ブロック取得スコアｔ[Ｌ(ｉ)]がスキップ閾値ｓ[Ｌ(ｉ)]以上であると判定された場合に処理をステップＳ８９に移行させる処理により、フリーブロックリストＬ(ｉ)に対応するプレーンにおいて、順序規則がスキップされる。
【０１５２】
一方、ステップＳ８４で、ブロック取得スコアｔ[Ｌ(ｉ)]がスキップ閾値ｓ[Ｌ(ｉ)]未満であると判定されたら、処理はステップＳ８５に移行される。ステップＳ８５で、ブロック管理部１３１は、順序規則演算部１５１から返されたフリーブロックリストＬ(ｉ)にフリーブロックが残っているか否かを調べる。若し、調べた結果、当該フリーブロックリストＬ(ｉ)にフリーブロックが残っていないと判断されたら、処理はステップＳ８９に移行される。
【０１５３】
一方、ステップＳ８５で、当該フリーブロックリストＬ(ｉ)にフリーブロックが残っていると判断されたら、処理はステップＳ８６に移行され、フリーブロック選択部１５０によりフリーブロックリストＬ(ｉ)からフリーブロックＢ(ｉ)が選択され、ブロック管理部１３１により当該フリーブロックＢ(ｉ)が取得される。
【０１５４】
次のステップＳ８７で、ブロック取得数ｒｂが１だけ増加される。さらに次のステップＳ８８で、フリーブロック選択部１５０は、ブロック取得スコアｔ[Ｌ(ｉ)]にスコア増加値ｗ[Ｌ(ｉ)]を加算した値を新たなブロック取得スコアｔ[Ｌ(ｉ)]とする。そして、処理はステップＳ８９に移行され、フリーブロック選択部１５０は、リスト選択回数ｉを１だけ増加させてリスト選択回数ｉを計数する。
【０１５５】
次のステップＳ９０で、位置情報更新部１５２は、位置情報記憶部１５４に保持されている位置情報Ｐｏｓを、順序規則による順序列上の次の位置を示す位置情報Ｐｏｓに更新する。このとき、当該次の位置が順序規則による順序列の最終位置を超えた場合には、次の位置を順序規則による順序列の先頭に設定する。
【０１５６】
位置情報Ｐｏｓが更新されると、処理はステップＳ９１に移行され、ブロック管理部１３１は、ブロック取得数ｒｂが要求されたフリーブロック必要数ｒに達したか否かを判定する。若し、達したと判定されたら、図１９のフローチャートによる一連の処理が終了され、処理が図５のステップＳ１８に移行される。
【０１５７】
一方、ステップＳ９１で、ブロック取得数ｒｂがフリーブロック必要数ｒに達していないと判定されたら、処理はステップＳ９２に移行され、ブロック管理部１３１により、リスト選択回数ｉが最大並列度ｑに達したか否かが判定される。若し、達していないと判定されたら、処理はステップＳ８３に戻され、次のフリーブロックリストＬ(ｉ)に関する処理が行われる。
【０１５８】
一方、リスト選択回数ｉが最大並列度ｑに達したと判定された場合には、図１９のフローチャートによる一連の処理が終了され、処理が図５のステップＳ１８に移行される。
【０１５９】
なお、複数のフリーブロックリストＬが同じ値のスコア増加値ｗ[Ｌ]とスキップ閾値ｓ[Ｌ]とを持つ場合、ブロック取得スコアｓ[Ｌ]の初期値も同じ値（例えば０）とすると、当該複数のフリーブロックリストのスキップが同じタイミングで発生するため、好ましくない。そのため、ブロック取得スコアｓ[Ｌ]の初期値は、フリーブロックリストＬ毎に異なる値を設定しておくとよい。
【０１６０】
図２０は、上述の図１９のフローチャートによる処理に従い、順序規則上でのスキップを行った例を示す。図２０（ａ）は、各プレーンＰ０〜Ｐ７に対して設定されたブロック取得スコアｔ[Ｌ]の初期値と、スコア増加値ｗ[Ｌ]と、スキップ閾値ｓ[Ｌ]とを示す。図２０（ｂ）は、上述した図１８と同様に、プレーン数が８であって、８並列に書き込みが可能とされ、元となる順序規則は、小周期｛０，１，２，３，４，５，６，７｝のみを繰り返す順序列となっている例である。
【０１６１】
図２０（ａ）の例において、スコア増加値ｗ[Ｌ]を１で固定的とし、スキップ閾値ｓ[Ｌ]をプレーン毎に可変としている。したがって、ブロック取得スコアｔ[Ｌ]は、そのプレーンでのフリーブロック取得数を示し、スキップ閾値ｓ[Ｌ]は、順序規則のスキップを発生させる、そのプレーンにおけるフリーブロック取得数を示す。
【０１６２】
また、図２０（ａ）の例では、プレーンＰ６でのみスキップ閾値ｓ[Ｌ]を８とし、他のプレーンでは、スキップ閾値ｓ[Ｌ]を３２としている。そのため、図２０（ｂ）に例示されるように、プレーンＰ６は他のプレーンに対してスキップの発生頻度を高くすることができる。図２０（ｂ）の例では、プレーンＰ６において、小周期が１６回繰り返されるうちスキップが２回、発生している。一方、他のプレーンでは、スキップの発生回数は、１回以下となっている。
【０１６３】
さらに、ブロック取得スコアｔ[Ｌ]の初期値は、プレーン毎に異なる値を設定することができる。図２０（ａ）の例では、各プレーンＰ０〜Ｐ７において、スキップ閾値ｓ[Ｌ]（＝３２）をプレーン数（＝８）で割った値（＝４）ずつ、ブロック取得スコアｔ[Ｌ]の初期値をずらしている。これにより、プレーンＰ６を除いた７個のプレーンでは、４小周期ずつスキップの発生がずれることになる。例えば、図２０（ｂ）の例では、プレーンＰ０においてブロック取得スコアｔ[Ｌ]の２８に対して５小周期目でスキップが発生し、プレーンＰ１においてブロック取得スコアｔ[Ｌ]の２４に対して９小周期目でスキップが発生している。同様に、プレーンＰ２においてブロック取得スコアｔ[Ｌ]の２０に対して１３小周期目でスキップが発生している。
【０１６４】
図２１は、上述の図２０の例とは逆に、スキップ閾値ｓ[Ｌ]を固定的とし、スコア増加値ｗ[Ｌ]をプレーン毎に可変とした場合の例である。図２１（ａ）に例示されるように、スキップ閾値ｓ[Ｌ]が１００に固定的とされ、スコア増加値ｗ[Ｌ]については、プレーンＰ６のみが２５とされ、他のプレーンでは３とされている。また、ブロック取得スコアｔ[Ｌ]は、スキップ閾値ｓ[Ｌ]（＝１００）をプレーン数（＝８）で割った値（＝１２．５）を基準に、初期値をずらしている。この場合には、スコア増加値ｗ[Ｌ]が大きいほど、スキップの発生頻度が高くなることが分かる。
【０１６５】
このように、本第３の実施形態によれば、複雑で長い順序規則を持たなくても、フリーブロックリストの選択における周期性を弱めたり、長周期化することが可能である。
【０１６６】
また、例えば特定のプレーンのみ総ブロック数やフリーブロック数が小さい場合に、スキップ閾値ｓ[Ｌ]を小さく設定したり、スコア増加値ｗ[Ｌ]を大きく設定することで、フリーブロック取得の頻度を抑えることが可能である。これにより、ブロック毎の消去回数の平準化や、プレーン毎の残りフリーブロック数の平準化といった効果が期待できる。
【０１６７】
＜第３の実施形態の変形例＞
次に、本発明の第３の実施形態の変形例について説明する。本第３の実施形態の変形例は、上述した第２の実施形態と第３の実施形態とを組み合わせた例である。図２２は、上述した図１５の例で用いた、バンク数が４、バンク内のチップ数が２、チップ内のプレーン数が２となっており、総プレーン数が１６であるバンク・チップ・プレーン構成を本第３の実施形態の変形例に適用した例である。
【０１６８】
上述した第２の実施形態における図１５の例では、バンク順を入れ替えた小周期も順序規則に含めたため、順序規則が非常に長く複雑になっていた。これに対し、図２２に例示される、本第３の実施形態の変形例による順序規則は、バンク順入れ替えの効果をスキップにより実現しているため、順序規則自体は２個の小周期Ａおよび小周期Ｂを組み合わせた簡単なものとなっている。
【０１６９】
より具体的には、上述の第２の実施形態において図１５を用いて説明した通り、順序規則演算部１５１は、小周期内においてプレーン番号、バンク番号、チップ番号の順で変更を行って各小周期の順序規則を作成する。小周期Ａの順序規則は、例えば｛Ｂ０Ｃ０Ｐ０，Ｂ０Ｃ０Ｐ１，Ｂ１Ｃ０Ｐ０，Ｂ１Ｃ０Ｐ１，Ｂ２Ｃ０Ｐ０，Ｂ２Ｃ０Ｐ１，Ｂ３Ｃ０Ｐ０，Ｂ３Ｃ０Ｐ１，Ｂ０Ｃ１Ｐ０，Ｂ０Ｃ１Ｐ１，Ｂ１Ｃ１Ｐ０，Ｂ１Ｃ１Ｐ１，Ｂ２Ｃ１Ｐ０，Ｂ２Ｃ１Ｐ１，Ｂ３Ｃ１Ｐ０，Ｂ３Ｃ１Ｐ１｝となる。また、小周期Ｂは、小周期Ａのバンク番号およびチップ番号を変えずにプレーン番号のみを入れ替えて作成する。
【０１７０】
これら小周期Ａおよび小周期Ｂを、既に説明したように、順序規則演算部１５１によりテーブル方式、演算方式、乱数を用いた方式などにより取得した順番に並べて、新たな順序規則を作成する。これにより、小周期数が８で、長さが１２８の順序規則が作成される。
【０１７１】
一方、上述の第３の実施形態の第１または第２の方法により、フリーブロックを例えば１２８ブロック取得する毎に順序規則をスキップするように設定する。こうすることで、順序規則のスキップ毎にバンク順入れ替えの効果を得ることができる。
【０１７２】
以上説明したように、本発明によれば、ホスト機器から特定のアドレスに対しての書込みが繰り返された場合に、プレーン間でのフリーブロック取得回数の偏りが抑制され、特定のブロックに消去回数が集中することを避けることができる。
【０１７３】
また、できる限り多くのプレーンに対して並列書き込みを行うようにしているため、複数の異なるアドレスへの書込みデータがバッファメモリに蓄積された場合に、特定のプレーンへの書き込みが集中することが抑制され、転送性能を良好に維持することができる。
【０１７４】
さらに、小周期を並べて順序規則を長周期化しているので、ホスト機器からの書き込みのアドレスに周期性が存在する場合であっても、フリーブロックリスト間でのフリーブロック数およびアクティブブロック数の偏りを抑制することができる。また、小周期を並べる際に、できる限り並列度が大きくなるように工夫しているため、転送能力も確保できる。
【符号の説明】
【０１７５】
１００  ＳＳＤ
１２０  インタフェース部
１２１  バッファメモリ
１２２  不揮発性メモリ部
１２３  チップ
１３０  コントローラ部
１３１  ブロック管理部
１３２  データ読出部
１３３  データ書込部
１３４  データ管理部
１３５  ＮＡＮＤドライバ
１４０  フリーブロック管理部
１４１1〜１４１n  フリーブロックリスト
１５０  フリーブロック選択部
１５１  順序規則演算部
１５２  位置情報更新部
１５３  順序規則テーブル
１５４  位置情報記憶部
【図１】
2011180773.tif 000003
【図２】
2011180773.tif 000004
【図３】
2011180773.tif 000005
【図４】
2011180773.tif 000006
【図５】
2011180773.tif 000007
【図６】
2011180773.tif 000008
【図７】
2011180773.tif 000009
【図８】
2011180773.tif 000010
【図９】
2011180773.tif 000011
【図１０】
2011180773.tif 000012
【図１１】
2011180773.tif 000013
【図１２】
2011180773.tif 000014
【図１３】
2011180773.tif 000015
【図１４】
2011180773.tif 000016
【図１５】
2011180773.tif 000017
【図１６】
2011180773.tif 000018
【図１７】
2011180773.tif 000019
【図１８】
2011180773.tif 000020
【図１９】
2011180773.tif 000021
【図２０】
2011180773.tif 000022
【図２１】
2011180773.tif 000023
【図２２】
2011180773.tif 000024