複数のブロックを有し、1つ1つのブロックが複数のストレージグループを有するNANDメモリチップであって、それぞれのブロック内のストレージ量は最少消去可能単位である、NANDメモリチップのプログラミングを制御するためのコントローラを動作させる方法において、1つ1つが前記NANDメモリチップの前記複数のブロックの何れかに記憶されることになっているデータグループの、第1の複数のデータグループを一時ストレージに記憶させる段階と、索引表内で、前記一時ストレージ中のそれぞれのデータグループを、それが記憶されることになる前記NANDメモリチップの前記ブロックのグループに対して索引付ける段階と、前記一時ストレージから、前記NANDメモリチップの同じブロックと関連付けられている前記データグループを、同じプログラミング動作で、前記NANDメモリチップの前記同じブロックへプログラムする段階と、前記一時ストレージから、プログラムされてしまった前記データグループを削除する段階と、前記索引表から、前記一時ストレージから削除された前記データグループについての索引を削除する段階と、から成る方法。それぞれのブロックは、複数のページを備え、それぞれのグループはページである、請求項1に記載の方法。前記プログラムする段階に先立って、前記同じブロックの前記ページを消去する、請求項2に記載の方法。前記索引付ける段階は、前記一時ストレージへ書き込まれるデータグループの論理アドレス対物理アドレスの表を作成する段階を含んでいる、請求項1に記載の方法。前記プログラムする段階は、前記一時ストレージからの前記データグループを全てプログラムする、請求項1に記載の方法。前記データグループを削除する段階は、前記一時ストレージから前記データグループを全て削除する、請求項5に記載の方法。前記索引表から削除する段階は、前記索引を全て削除する、請求項6に記載の方法。前記プログラムする段階は、前記一時ストレージから、前記NANDメモリの前記同じブロック向けのデータグループを全てプログラムする、請求項1に記載の方法。前記データグループを削除する段階は、プログラムされてしまった前記データグループのみを削除する段階と、ガベージコレクションステップを遂行して前記一時ストレージの残りの前記データグループをひとまとめにする段階を更に含んでいる、請求項8に記載の方法。前記索引表から削除する段階は、プログラムされた前記データグループについての前記索引のみを削除する段階と、ガベージコレクションステップを遂行して前記索引表の残りの前記索引をひとまとめにする段階を更に含んでいる、請求項9に記載の方法。図3を参照すると、本発明の方法で動作するNANDメモリコントローラ10のブロックレベル図が示されている。コントローラ10は、アドレスバス14、データバス16、及びコントロールバス18の様な周知のバスを通して、NANDメモリ集積回路チップ12とインターフェースし、その動作を制御している。NANDメモリ10について典型的には、アドレスバス14とデータバス16は同一物であり、即ちアドレスとデータは同じバスを介して伝送されている。本発明はメモリコントローラ10を動作させるための方法ではあるが、本発明は、メモリモジュールとして一体にパッケージ化されているか或いはなおのこと一体に集積化されているコントローラ10とNANDメモリチップ12を備えるメモリデバイスを動作させるのに使用することもできる。コントローラ10は、更に、揮発性メモリ30とインターフェースし、それに接続されている。その場合、アドレスバス14、データバス16、及びコントロールバス18も揮発性メモリ30へ接続されている。コントローラ10は、PATAパラレルATAコマンドプロトコル又はSATAシリアルATAコマンドプロトコルの様な周知のプロトコルを通してホストデバイス20とインターフェースしている。以上に説明されている様に、本発明は、ブロックベースの不揮発性メモリシステムにおけるランダム書き込み性能を改善するという課題を、併合動作の遂行頻度を減らすことによって解決している。先に論じられている様に、NANDメモリチップ12の性質のせいで、データを或るブロックの事前に書き込まれている単数又は複数のページへ書き込むためには、最初にブロック全体を消去しなくてはならない。本発明の方法では、新しいデータのページがデータブロックの事前に書き込まれているページへ書き込まれようとする場合、データブロック全体を消去するのではなしに、新しいデータのページは最初に一時ブロック内の次に利用できるページへ書き込まれる。先行技術同様、一時ブロックはNANDメモリチップ12内に在る。しかしながら、それぞれの一時ブロックにデータブロックが関連付けられていた先行技術とは違い、本発明の方法を用いれば、当該データブロックと関連付けられているページのみを同じ一時ブロックへ書き込むことができ、同じ一時ブロック内のそれぞれのページは、異なるデータブロックに記憶されることになっているデータを記憶することになる。こうして、それぞれの一時ブロックを利用して、新しいデータのページをデータブロックへ書き込まなくてはならなくなる前に異なるデータブロック向けの多くのデータページを記憶させることができる。従って、一時ブロックに保存される複数ページに対して1の比を用いて併合動作の頻度を小さくすることができる。例えば、図4に示されている様に、一時ブロック992のページ0はデータブロック0に記憶されることになっているデータを記憶することができる。同じ一時ブロック992内で、ページ1がデータブロック2に記憶されることになっている新しいデータを記憶することもできる。最後に、一時ブロック992内で、ページ2がデータブロック4に記憶されることになっているデータを記憶することもできる。こうして、先行技術とは違い、同じ一時ブロック内のページが異なるデータブロック宛てのデータを記憶することができる。また、データブロック例えばデータブロック0には一時ブロック992内のデータページ例えばページ0が既に記憶されることになっているが、そのデータブロック0に記憶されることになる新しいデータのページ例えばページ1を、一時ブロック993の様な異なる一時ブロックが記憶することもできる。換言すると、同じデータブロックに記憶されることになっているページを異なる一時ブロックに記憶させることができるということである。本発明の方法では、新しいデータページがデータブロックに記憶されようとしていて、当該場所が消去されていないと判定されると、新しいデータページは一時ブロックの集合体内の次に利用できるページに記憶される。こうして、一時ブロックは、データブロックへ書き込まれようとする新しいデータのページのログを維持する。一時ブロック内のデータページとデータブロック内の記憶されるべき最終目的地の間の相関を追跡するために、索引表が作成される。索引付けは、物理アドレスによる又は論理アドレスによるなど多数の異なるやり方で行うことができる。一例が図5に示されている。図5は、物理アドレス索引表を示している。索引表のそれぞれの行は、一時ブロックに記憶されているデータのページを表現しており、ページが一時的に記憶されている物理アドレスとデータページの最終目的地のページアドレスに関する情報を保有している。これらのアドレスは、以下に説明されているブロックアドレス又はページアドレスの形態をとることができる。論理ページ番号は、最終的にこの新しいデータのページで更新されることになる、データブロック内のページのことである。論理ブロックNo.は、新しいデータのページが最終的に書き込まれることになる、データブロック内のブロック番号のことである。物理ブロックアドレスは、新しいデータのページが保留されている一時ブロックの物理アドレスのことである。物理ページアドレスとは、新しいデータをデータブロックへ更新するのに先立って、新しいデータを保留している一時ブロック内の物理ページアドレスのことである。本発明の方法では、新しいデータページが、ホストデバイス20からNANDメモリコントローラ10によって受信される。コントローラ10は、新しいデータのページが書き込まれようとするデータブロック内の場所をチェックして、当該場所が消去済みのメモリセルを保有しているか或いは事前に書き込まれているデータを保有しているかを判定する。その場所が消去済みのメモリセルを保有していた場合、新しいデータのページは当該場所へ書き込まれる。また一方、その場所が事前に書き込まれているデータを保有していた場合、新しいデータのページは、一時ブロック内の次に利用できる消去済みページへ書き込まれる。コントローラ10は、次いで、新しいデータページがどこに書き込まれようとしているかについて、新しいデータページの論理アドレス及び新しいデータページが一時的に書き込まれることになる関連の物理アドレスを含め、索引表を更新する。NANDメモリデバイスの動作で慣行的な他の表及び当業者に周知されている他の表、例え論理ブロック対物理ブロックのマッピングや一時ブロック番号対物理ブロックのマッピングなど、も同様に維持され更新されなくてはならない。それぞれの一時ブロックには固有データブロックが関連付けられていないため、先在データのある場所宛ての新しいデータの累積ページ数ははるかに大きくなることであろう。その結果、併合動作の頻度は小さくなる。256のページを有する一時ブロックなら、1つの一時ブロックが、256の異なるデータブロック宛ての256のページを記憶することもできるし、データブロック当たり複数ページを記憶することもできる。8つの一次ブロックがあれば、それら8つの一時ブロックがバッファ又は記憶区域として働くことのできる異なるデータブロックは2048という多さになろう。更に、これらの一時ブロックが128のデータブロックのために働いている場合、それぞれのデータブロックは、併合動作を遂行させなくてはならなくなる前に、平均16ページを一時ブロック内に累積させることができる。対照的に、先行技術では、一時ブロック1つがバッファとして働けるのはたった1つのデータブロックに対してであり、一時ブロック8つではバッファとして働けるのはたった8つの異なるデータブロックに対してである。当然ながらトレードオフは索引表作成の必要性である。索引表は、揮発性メモリ30に記憶させてもよいし、なおのことNANDメモリ12そのものに記憶させてもよい。索引表を揮発性メモリに記憶させることの利点は検索の速さである。不都合は揮発性であること、即ち、不意に電源が切れた場合にデータが失われてしまうことである。新しいデータのページを一時ブロックからデータブロックへ併合するという動作は、日和見的に、NANDチップ12のリソースの要求が静まっているときに行われてもよいし、又は確定的に、指定された間隔で又は指定された事象時に行われてもよい。日和見的併合の場合は、併合動作はホストコマンドへの何らの遅延も引き起こすことなく遂行されることになろう。併合動作中、コントローラ10は、一時ブロックから、同じデータブロックに記憶されることになる新しいデータのページを全て集め、それら新しいデータページを同じブロックからの差し替えられないデータページと併合し、それらを消去済みのデータブロックへ書き込む。次いで原データブロックは消去され、新しいデータのページ及び関連付けられているデータ、例えばブロック番号、物理アドレス、及び論理アドレスなどが、次いで一時ブロック及び索引表から削除される。併合動作は、2通りのやり方のうちの1つで起こる。1つの方式では、一時ブロック内のページは全てデータブロックへ書き込まれる。これに続けて、一時ブロック及び索引表の全てが消去される。この方式では、一時ブロック内に記憶されているページ数が多いために、併合動作は長時間かかることになろう。2つ目の方式では、併合動作は、一度に1つのデータブロック又は数個のデータブロックだけを更新する。この動作方式では、同じデータブロック宛てのページであって、複数の異なる一時ブロック内に記憶されている場合もあるその様なページが、一時ブロックから選択されて、単数又は複数の同じデータブロックへ書き込まれる。とはいえ、この手法では、一時ブロックからのデータのページどれもが併合動作によってデータブロックへ書き込まれるとは限らないため、書き込まれたページしか一時ブロックから消去されないはずである。しかしながら、それぞれの一時ブロックはデータの塊でもあり、これは当該ブロック内のデータ全てがひと塊に消去されなくてはならないことを意味しているため、いわゆるガベージコレクション動作が行われる必要がある。ガベージコレクション動作は当技術では周知されており、この動作では、同じ一時ブロック内の未併合のデータページが一時ブロックの完全消去済みブロックへ転送されて、一時ブロックを消去できるようになる。加えて、索引付け表では同様に、併合動作中に書き込まれたデータのページを参照するエントリがパージされるはずである。従って、たった1つ又は数個のデータブロックについてのページしか併合しない2番目の技法は、長ったらしい連続した併合動作こそ必要ないが、追加的な後続のガベージコレクションプロセスがまさしく要求され、追加のオーバーヘッドが発生する。新しいデータページがデータブロックへ併合される前に、コントローラ10へ読み出し要求がなされれば、コントローラ10は、ホストデバイス20によって読み出し要求の一部として供給された論理アドレスを使用して、新しいデータのページの場所を索引表から読み出す。論理アドレスが索引表の中に含まれていなければ、それは、データがデータブロックの中にあり、差し替えられていないということを示しており、コントローラ10は論理アドレスを使用し、データブロックを探してデータのページを読み出す。上記から分かる様に、一時ブロックは新しいデータのページ1つ1つを保存しており、どれか1つの特定のデータブロックと関連付けられているのではないため、本発明の方法を用いれば、一時ブロックは、1つ又はそれ以上の併合動作を遂行させなくてはならなくなる前に、より多くの新しいデータのページを保留することができる。加えて、併合動作があった場合、同じ併合動作で同じ一時ブロックから記憶させることのできるページは先行技術に比べ多くなる。