(57)【要約】  少なくとも１つの局面は、複数のＮＡＮＤフラッシュチップとコントローラとを含むＮＡＮＤフラッシュストレージデバイスに向けられている。コントローラは、入力／出力（Ｉ／Ｏ）バスを介してデータを受信し、受信したデータを複数のＮＡＮＤフラッシュチップのうちの第１のＮＡＮＤフラッシュチップおよび複数のＮＡＮＤフラッシュチップのうちの第２のＮＡＮＤフラッシュチップに書き込むように構成される。各ＮＡＮＤフラッシュチップへの書込動作は、時間的に重ならない。コントローラは、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない第１のＮＡＮＤフラッシュチップまたは第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るように構成される。
2020524839.tif 000002
【特許請求の範囲】
【請求項１】
ＮＡＮＤフラッシュストレージデバイスであって、
複数のＮＡＮＤフラッシュチップと、
コントローラとを備え、前記コントローラは、
入力／出力（Ｉ／Ｏ）バスを介してデータを受信するように構成され、
各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、前記受信したデータを前記複数のＮＡＮＤフラッシュチップのうちの第１のＮＡＮＤフラッシュチップおよび前記複数のＮＡＮＤフラッシュチップのうちの第２のＮＡＮＤフラッシュチップに連続的に書き込むように構成され、
前記Ｉ／Ｏバスを介して読取コマンドを受信するように構成され、
前記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない前記第１のＮＡＮＤフラッシュチップまたは前記第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るように構成される、ＮＡＮＤフラッシュストレージデバイス。
【請求項２】
前記コントローラは、
前記第１のＮＡＮＤフラッシュチップを二次書込チップとして指定し、前記第２のＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、第３のＮＡＮＤフラッシュチップを一次書込チップとして指定し、第４のＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するように構成され、
各チップへの書込動作が時間的に重ならないように、前記受信したデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むように構成され、
有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするように構成され、
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、前記第１のＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第２のＮＡＮＤフラッシュチップを前記二次書込チップとして指定し、前記第３のＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定し、前記第４のＮＡＮＤフラッシュチップを前記一次書込チップとして指定するように構成される、請求項１に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項３】
前記コントローラは、
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、
第５のＮＡＮＤフラッシュチップを前記将来的な一次書込チップとして指定するように構成され、
各チップへの書込動作が時間的に重ならないように、前記Ｉ／Ｏバスを介して受信した第２のデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むように構成され、
第２の有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするように構成され、
前記第２の受信したデータの前記書き込みおよび前記第２の有効データの前記コピーに続いて、前記第２のＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第３のＮＡＮＤフラッシュチップを前記二次書込チップとして指定し、前記第４のＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定し、前記第５のＮＡＮＤフラッシュチップを前記一次書込チップとして指定するように構成される、請求項２に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項４】
前記コピー動作は、
前記有効データおよび空き空間がそれぞれ、前記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーすることと、
前記有効データおよび前記空き空間がそれぞれ、前記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な二次書込チップから前記将来的な一次書込チップにコピーバックすることと、
前記空き空間が占める前記将来的な一次書込チップおよび前記将来的な二次書込チップの前記メモリ空間を消去することとを含む、請求項２に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項５】
前記書込動作および前記コピー動作は、重なり合う期間中に実行される、請求項２に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項６】
ＮＡＮＤフラッシュストレージデバイスであって、
複数のバッファＮＡＮＤフラッシュチップと、
複数のストレージＮＡＮＤフラッシュチップと、
コントローラとを備え、前記コントローラは、
入力／出力（Ｉ／Ｏ）バスを介して入来データを受信するように構成され、
各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、前記受信した入来データを前記複数のストレージＮＡＮＤフラッシュチップのうちの第１のバッファＮＡＮＤフラッシュチップおよび前記複数のバッファＮＡＮＤフラッシュチップのうちの第１のストレージＮＡＮＤフラッシュチップに連続的に書き込むように構成され、
前記Ｉ／Ｏバスを介して読取コマンドを受信するように構成され、
前記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない前記第１のバッファＮＡＮＤフラッシュチップまたは前記第１のストレージＮＡＮＤフラッシュチップのいずれかからデータを読み取るように構成される、ＮＡＮＤフラッシュストレージデバイス。
【請求項７】
前記コントローラは、
前記第１のストレージＮＡＮＤフラッシュチップを一次書込チップとして指定し、第２のストレージＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、前記第１のバッファＮＡＮＤフラッシュチップを二次書込チップとして指定し、第２のバッファＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するように構成され、
各チップへの書込動作が時間的に重ならないように、前記受信したデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むように構成され、
有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするように構成され、
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、前記第１のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第２のストレージＮＡＮＤフラッシュチップを前記一次書込チップとして指定し、前記第１のバッファＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定し、前記第２のバッファＮＡＮＤフラッシュチップを前記二次書込チップとして指定するように構成される、請求項６に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項８】
前記コントローラは、
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、
第３のストレージＮＡＮＤフラッシュチップを前記将来的な一次書込チップとして指定するように構成され、
各チップへの書込動作が時間的に重ならないように、前記Ｉ／Ｏバスを介して受信した第２のデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むように構成され、
第２の有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするように構成され、
前記第２の受信したデータの前記書き込みおよび前記第２の有効データの前記コピーに続いて、前記第２のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第３のストレージＮＡＮＤフラッシュチップを前記一次書込チップとして指定し、前記第１のバッファＮＡＮＤフラッシュチップを前記二次書込チップとして指定し、前記第２のバッファＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定するように構成される、請求項７に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項９】
前記コピー動作は、
前記有効データおよび空き空間がそれぞれ、前記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーすることと、
前記有効データおよび前記空き空間がそれぞれ、前記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な二次書込チップから前記将来的な一次書込チップにコピーバックすることと、
前記空き空間が占める前記将来的な一次書込チップおよび前記将来的な二次書込チップの前記メモリ空間を消去することとを含む、請求項７に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項１０】
前記バッファＮＡＮＤフラッシュチップは、シングルレベルセル（ＳＬＣ）ＮＡＮＤフラッシュチップであり、
前記ストレージＮＡＮＤフラッシュチップは、トリプルレベルセル（ＴＬＣ）ＮＡＮＤフラッシュチップである、請求項６に記載のＮＡＮＤフラッシュストレージデバイス。
【請求項１１】
ＮＡＮＤフラッシュストレージデバイスをバッファリングする方法であって、
入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップと、
各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、前記受信したデータを複数のＮＡＮＤフラッシュチップのうちの第１のＮＡＮＤフラッシュチップおよび複数のＮＡＮＤフラッシュチップのうちの第２のＮＡＮＤフラッシュチップに連続的に書き込むステップと、
前記Ｉ／Ｏバスを介して読取コマンドを受信するステップと、
前記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない前記第１のＮＡＮＤフラッシュチップまたは前記第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るステップとを備える、方法。
【請求項１２】
前記第１のＮＡＮＤフラッシュチップを二次書込チップとして指定し、前記第２のＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、第３のＮＡＮＤフラッシュチップを一次書込チップとして指定し、第４のＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するステップと、
各チップへの書込動作が時間的に重ならないように、前記受信したデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むステップと、
有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするステップと、
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、前記第１のＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第２のＮＡＮＤフラッシュチップを前記二次書込チップとして指定し、前記第３のＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定し、前記第４のＮＡＮＤフラッシュチップを前記一次書込チップとして指定するステップとを備える、請求項１１に記載の方法。
【請求項１３】
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、
第５のＮＡＮＤフラッシュチップを前記将来的な一次書込チップとして指定するステップと、
各チップへの書込動作が時間的に重ならないように、前記Ｉ／Ｏバスを介して受信した第２のデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むステップと、
第２の有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするステップと、
前記第２の受信したデータの前記書き込みおよび前記第２の有効データの前記コピーに続いて、前記第２のＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第３のＮＡＮＤフラッシュチップを前記二次書込チップとして指定し、前記第３のＮＡＮＤフラッシュチップを前記さらなる二次書込チップとして指定し、前記第４のＮＡＮＤフラッシュチップを前記一次書込チップとして指定し、前記第５のＮＡＮＤフラッシュチップを前記将来的な一次書込チップとして指定するステップとを備える、請求項１２に記載の方法。
【請求項１４】
前記コピー動作は、
前記有効データおよび空き空間がそれぞれ、前記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーすることと、
前記有効データおよび前記空き空間がそれぞれ、前記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な二次書込チップから前記将来的な一次書込チップにコピーバックすることと、
前記空き空間が占める前記将来的な一次書込チップおよび前記将来的な二次書込チップの前記メモリ空間を消去することとを含む、請求項１２に記載の方法。
【請求項１５】
前記書込動作および前記コピー動作は、重なり合う期間中に実行される、請求項１２に記載の方法。
【請求項１６】
ＮＡＮＤフラッシュストレージデバイスをバッファリングする方法であって、
入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップと、
各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、前記受信した入来データを複数のストレージＮＡＮＤフラッシュチップのうちの第１のバッファＮＡＮＤフラッシュチップおよび複数のバッファＮＡＮＤフラッシュチップのうちの第１のストレージＮＡＮＤフラッシュチップに連続的に書き込むステップと、
前記Ｉ／Ｏバスを介して読取コマンドを受信するステップと、
前記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない前記第１のバッファＮＡＮＤフラッシュチップまたは前記第１のストレージＮＡＮＤフラッシュチップのいずれかからデータを読み取るステップとを備える、方法。
【請求項１７】
前記第１のストレージＮＡＮＤフラッシュチップを一次書込チップとして指定し、第２のストレージＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、前記第１のバッファＮＡＮＤフラッシュチップを二次書込チップとして指定し、第２のバッファＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するステップと、
各チップへの書込動作が時間的に重ならないように、前記受信したデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むステップと、
有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするステップと、
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、前記第１のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第２のストレージＮＡＮＤフラッシュチップを前記一次書込チップとして指定し、前記第１のバッファＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定し、前記第２のバッファＮＡＮＤフラッシュチップを前記二次書込チップとして指定するステップとを備える、請求項１６に記載の方法。
【請求項１８】
前記受信したデータの前記書き込みおよび前記有効データの前記コピーに続いて、
第３のストレージＮＡＮＤフラッシュチップを前記将来的な一次書込チップとして指定するステップと、
各チップへの書込動作が時間的に重ならないように、前記Ｉ／Ｏバスを介して受信した第２のデータを前記一次書込チップおよび前記二次書込チップに連続的に書き込むステップと、
第２の有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーするステップと、
前記第２の受信したデータの前記書き込みおよび前記第２の有効データの前記コピーに続いて、前記第２のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、前記第３のストレージＮＡＮＤフラッシュチップを前記一次書込チップとして指定し、前記第１のバッファＮＡＮＤフラッシュチップを前記二次書込チップとして指定し、前記第２のバッファＮＡＮＤフラッシュチップを前記将来的な二次書込チップとして指定するステップとを備える、請求項１７に記載の方法。
【請求項１９】
前記コピー動作は、
前記有効データおよび空き空間がそれぞれ、前記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な一次書込チップから前記将来的な二次書込チップにコピーすることと、
前記有効データおよび前記空き空間がそれぞれ、前記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、前記有効データを前記将来的な二次書込チップから前記将来的な一次書込チップにコピーバックすることと、
前記空き空間が占める前記将来的な一次書込チップおよび前記将来的な二次書込チップの前記メモリ空間を消去することとを含む、請求項１７に記載の方法。
【請求項２０】
前記バッファＮＡＮＤフラッシュチップは、シングルレベルセル（ＳＬＣ）ＮＡＮＤフラッシュチップであり、
前記ストレージＮＡＮＤフラッシュチップは、トリプルレベルセル（ＴＬＣ）ＮＡＮＤフラッシュチップである、請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は、２０１７年１１月１７日に出願された「ＮＡＮＤバッファを有するＮＡＮＤフラッシュ（登録商標）ストレージデバイス（NAND FLASH STORAGE DEVICE WITH NAND BUFFER）」と題される米国特許出願番号第１５／８１６，４４７号の利益およびそれに対する優先権を主張し、米国特許出願番号第１５／８１６，４４７号は、２０１７年６月２３日に出願された「ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイス（NAND FLASH STORAGE DEVICE WITH NAND BUFFER）」と題される米国仮特許出願番号第６２／５２４，０１６号の利益およびそれに対する優先権を主張し、これら両方の特許出願の全内容は引用によって本明細書に援用される。
【背景技術】
【０００２】
背景
ＮＡＮＤフラッシュに基づくストレージデバイスは、優れた平均レイテンシを有する。しかし、「テイルレイテンシ」と称される最悪の場合のレイテンシがはるかに長いことがある。ＮＡＮＤフラッシュストレージデバイスにおいてより予測可能なレイテンシを提供することは、ＮＡＮＤフラッシュ技術のいくつかの用途、たとえばＮＡＮＤフラッシュベースのストレージデバイスおよびスワップデバイスでは有益であり得る。スワップデバイスは、コンピューティングシステムにおいて、スワップ空間と称されることもある拡張メモリ空間としての役割を果たすことができる。スワップデバイスは、ＲＡＭの高速化とハードディスクドライブ（ＨＤＤ）またはソリッドステートドライブ（ＳＳＤ）などの代替メモリ／記憶媒体の低コスト化との間の兼ね合いを表し得る。ＮＡＮＤフラッシュに基づくＳＳＤは、ＨＤＤよりも高速であるが、ＮＡＮＤフラッシュチップの動作の仕方により、テイルレイテンシが予測不可能であるおそれがある。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
少なくとも１つの局面は、ＮＡＮＤフラッシュストレージデバイスに向けられている。上記ＮＡＮＤフラッシュストレージデバイスは、複数のＮＡＮＤフラッシュチップと、コントローラとを含む。上記コントローラは、入力／出力（Ｉ／Ｏ）バスを介してデータを受信するように構成される。上記コントローラは、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、上記受信したデータを上記複数のＮＡＮＤフラッシュチップのうちの第１のＮＡＮＤフラッシュチップおよび上記複数のＮＡＮＤフラッシュチップのうちの第２のＮＡＮＤフラッシュチップに連続的に書き込むように構成される。上記コントローラは、上記Ｉ／Ｏバスを介して読取コマンドを受信するように構成される。上記コントローラは、上記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない上記第１のＮＡＮＤフラッシュチップまたは上記第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るように構成される。
【０００４】
いくつかの実現例では、上記コントローラはさらに、上記第１のＮＡＮＤフラッシュチップを二次書込チップとして指定し、上記第２のＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、第３のＮＡＮＤフラッシュチップを一次書込チップとして指定し、第４のＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するように構成されてもよい。上記コントローラは、各チップへの書込動作が時間的に重ならないように、上記受信したデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むように構成されてもよい。上記コントローラは、有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするように構成されてもよい。上記コントローラは、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、上記第１のＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第２のＮＡＮＤフラッシュチップを上記二次書込チップとして指定し、上記第３のＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定し、上記第４のＮＡＮＤフラッシュチップを上記一次書込チップとして指定するように構成されてもよい。
【０００５】
いくつかの実現例では、上記コントローラはさらに、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、第５のＮＡＮＤフラッシュチップを上記将来的な一次書込チップとして指定するように構成されてもよい。上記コントローラは、各チップへの書込動作が時間的に重ならないように、上記Ｉ／Ｏバスを介して受信した第２のデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むように構成されてもよい。上記コントローラは、第２の有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするように構成されてもよい。上記コントローラは、上記第２の受信したデータの上記書き込みおよび上記第２の有効データの上記コピーに続いて、上記第２のＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第３のＮＡＮＤフラッシュチップを上記二次書込チップとして指定し、上記第４のＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定し、上記第５のＮＡＮＤフラッシュチップを上記一次書込チップとして指定するように構成されてもよい。
【０００６】
いくつかの実現例では、上記コピー動作は、上記有効データおよび空き空間がそれぞれ、上記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーすることを含んでもよい。上記コピー動作は、上記有効データおよび上記空き空間がそれぞれ、上記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な二次書込チップから上記将来的な一次書込チップにコピーバックすることを含んでもよい。上記コピー動作は、上記空き空間が占める上記将来的な一次書込チップおよび上記将来的な二次書込チップの上記メモリ空間を消去することを含んでもよい。
【０００７】
いくつかの実現例では、上記書込動作および上記コピー動作は、重なり合う期間中に実行される。
【０００８】
少なくとも１つの局面は、ＮＡＮＤフラッシュストレージデバイスに向けられている。上記ＮＡＮＤフラッシュストレージデバイスは、複数のバッファＮＡＮＤフラッシュチップと、複数のストレージＮＡＮＤフラッシュチップと、コントローラとを含む。上記コントローラは、入力／出力（Ｉ／Ｏ）バスを介して入来データを受信するように構成される。上記コントローラは、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、上記受信した入来データを上記複数のストレージＮＡＮＤフラッシュチップのうちの第１のバッファＮＡＮＤフラッシュチップおよび上記複数のバッファＮＡＮＤフラッシュチップのうちの第１のストレージＮＡＮＤフラッシュチップに連続的に書き込むように構成される。上記コントローラは、上記Ｉ／Ｏバスを介して読取コマンドを受信するように構成される。上記コントローラは、上記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない上記第１のバッファＮＡＮＤフラッシュチップまたは上記第１のストレージＮＡＮＤフラッシュチップのいずれかからデータを読み取るように構成される。
【０００９】
いくつかの実現例では、上記コントローラは、上記第１のストレージＮＡＮＤフラッシュチップを一次書込チップとして指定し、第２のストレージＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、上記第１のバッファＮＡＮＤフラッシュチップを二次書込チップとして指定し、第２のバッファＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するように構成されてもよい。上記コントローラは、各チップへの書込動作が時間的に重ならないように、上記受信したデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むように構成されてもよい。上記コントローラは、有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするように構成されてもよい。上記コントローラは、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、上記第１のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第２のストレージＮＡＮＤフラッシュチップを上記一次書込チップとして指定し、上記第１のバッファＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定し、上記第２のバッファＮＡＮＤフラッシュチップを上記二次書込チップとして指定するように構成されてもよい。
【００１０】
いくつかの実現例では、上記コントローラは、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、第３のストレージＮＡＮＤフラッシュチップを上記将来的な一次書込チップとして指定するように構成されてもよい。上記コントローラは、各チップへの書込動作が時間的に重ならないように、上記Ｉ／Ｏバスを介して受信した第２のデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むように構成されてもよい。上記コントローラは、第２の有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするように構成されてもよい。上記コントローラは、上記第２の受信したデータの上記書き込みおよび上記第２の有効データの上記コピーに続いて、上記第２のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第３のストレージＮＡＮＤフラッシュチップを上記一次書込チップとして指定し、上記第１のバッファＮＡＮＤフラッシュチップを上記二次書込チップとして指定し、上記第２のバッファＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定するように構成されてもよい。
【００１１】
いくつかの実現例では、上記コピー動作は、上記有効データおよび空き空間がそれぞれ、上記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーすることを含んでもよい。上記コピー動作は、上記有効データおよび上記空き空間がそれぞれ、上記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な二次書込チップから上記将来的な一次書込チップにコピーバックすることと、上記空き空間が占める上記将来的な一次書込チップおよび上記将来的な二次書込チップの上記メモリ空間を消去することとを含んでもよい。
【００１２】
いくつかの実現例では、上記バッファＮＡＮＤフラッシュチップは、シングルレベルセル（ＳＬＣ）ＮＡＮＤフラッシュチップであってもよく、上記ストレージＮＡＮＤフラッシュチップは、トリプルレベルセル（ＴＬＣ）ＮＡＮＤフラッシュチップであってもよい。
【００１３】
少なくとも１つの局面は、ＮＡＮＤフラッシュストレージデバイスをバッファリングする方法に向けられている。上記方法は、入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップを含む。上記方法は、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、上記受信したデータを複数のＮＡＮＤフラッシュチップのうちの第１のＮＡＮＤフラッシュチップおよび複数のＮＡＮＤフラッシュチップのうちの第２のＮＡＮＤフラッシュチップに連続的に書き込むステップを含む。上記方法は、上記Ｉ／Ｏバスを介して読取コマンドを受信するステップを含む。上記方法は、上記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない上記第１のＮＡＮＤフラッシュチップまたは上記第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るステップを含む。
【００１４】
いくつかの実現例では、上記方法は、上記第１のＮＡＮＤフラッシュチップを二次書込チップとして指定し、上記第２のＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、第３のＮＡＮＤフラッシュチップを一次書込チップとして指定し、第４のＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するステップを含んでもよい。上記方法は、各チップへの書込動作が時間的に重ならないように、上記受信したデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むステップを含んでもよい。上記方法は、有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするステップを含んでもよい。上記方法は、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、上記第１のＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第２のＮＡＮＤフラッシュチップを上記二次書込チップとして指定し、上記第３のＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定し、上記第４のＮＡＮＤフラッシュチップを上記一次書込チップとして指定するステップを含んでもよい。
【００１５】
いくつかの実現例では、上記方法は、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、第５のＮＡＮＤフラッシュチップを上記将来的な一次書込チップとして指定するステップを含んでもよい。上記方法は、各チップへの書込動作が時間的に重ならないように、上記Ｉ／Ｏバスを介して受信した第２のデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むステップを含んでもよい。上記方法は、第２の有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするステップを含んでもよい。上記方法は、上記第２の受信したデータの上記書き込みおよび上記第２の有効データの上記コピーに続いて、上記第２のＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第３のＮＡＮＤフラッシュチップを上記二次書込チップとして指定し、上記第４のＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定し、上記第５のＮＡＮＤフラッシュチップを上記一次書込チップとして指定するステップを含んでもよい。
【００１６】
いくつかの実現例では、上記コピー動作は、上記有効データおよび空き空間がそれぞれ、上記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーすることを含んでもよい。上記コピー動作は、上記有効データおよび上記空き空間がそれぞれ、上記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な二次書込チップから上記将来的な一次書込チップにコピーバックすることを含んでもよい。上記コピー動作は、上記空き空間が占める上記将来的な一次書込チップおよび上記将来的な二次書込チップの上記メモリ空間を消去することを含んでもよい。
【００１７】
いくつかの実現例では、上記書込動作および上記コピー動作は、重なり合う期間中に実行される。
【００１８】
少なくとも１つの局面は、ＮＡＮＤフラッシュストレージデバイスをバッファリングする方法に向けられている。上記方法は、入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップを含む。上記方法は、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、上記受信した入来データを複数のストレージＮＡＮＤフラッシュチップのうちの第１のバッファＮＡＮＤフラッシュチップおよび複数のバッファＮＡＮＤフラッシュチップのうちの第１のストレージＮＡＮＤフラッシュチップに連続的に書き込むステップを含む。上記方法は、上記Ｉ／Ｏバスを介して読取コマンドを受信するステップを含む。上記方法は、上記読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない上記第１のバッファＮＡＮＤフラッシュチップまたは上記第１のストレージＮＡＮＤフラッシュチップのいずれかからデータを読み取るステップを含む。
【００１９】
いくつかの実現例では、上記方法は、上記第１のストレージＮＡＮＤフラッシュチップを一次書込チップとして指定し、第２のストレージＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、上記第１のバッファＮＡＮＤフラッシュチップを二次書込チップとして指定し、第２のバッファＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリとして指定するステップを含む。上記方法は、各チップへの書込動作が時間的に重ならないように、上記受信したデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むステップを含む。上記方法は、有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするステップを含む。上記方法は、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、上記第１のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第２のストレージＮＡＮＤフラッシュチップを上記一次書込チップとして指定し、上記第１のバッファＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定し、上記第２のバッファＮＡＮＤフラッシュチップを上記二次書込チップとして指定するステップを含む。
【００２０】
いくつかの実現例では、上記方法は、上記受信したデータの上記書き込みおよび上記有効データの上記コピーに続いて、第３のストレージＮＡＮＤフラッシュチップを上記将来的な一次書込チップとして指定するステップを含む。上記方法は、各チップへの書込動作が時間的に重ならないように、上記Ｉ／Ｏバスを介して受信した第２のデータを上記一次書込チップおよび上記二次書込チップに連続的に書き込むステップを含む。上記方法は、第２の有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするステップを含む。上記方法は、上記第２の受信したデータの上記書き込みおよび上記第２の有効データの上記コピーに続いて、上記第２のストレージＮＡＮＤフラッシュチップをリードオンリとして指定し、上記第３のストレージＮＡＮＤフラッシュチップを上記一次書込チップとして指定し、上記第１のバッファＮＡＮＤフラッシュチップを上記二次書込チップとして指定し、上記第２のバッファＮＡＮＤフラッシュチップを上記将来的な二次書込チップとして指定するステップを含む。
【００２１】
いくつかの実現例では、上記方法は、上記有効データおよび空き空間がそれぞれ、上記将来的な二次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な一次書込チップから上記将来的な二次書込チップにコピーするステップを含む。上記方法は、上記有効データおよび上記空き空間がそれぞれ、上記将来的な一次書込チップの実質的に連続したそれぞれのメモリ空間を占めるように、上記有効データを上記将来的な二次書込チップから上記将来的な一次書込チップにコピーバックするステップを含む。上記方法は、上記空き空間が占める上記将来的な一次書込チップおよび上記将来的な二次書込チップの上記メモリ空間を消去するステップを含む。
【００２２】
いくつかの実現例では、上記バッファＮＡＮＤフラッシュチップは、シングルレベルセル（ＳＬＣ）ＮＡＮＤフラッシュチップであってもよく、上記ストレージＮＡＮＤフラッシュチップは、トリプルレベルセル（ＴＬＣ）ＮＡＮＤフラッシュチップであってもよい。
【００２３】
これらのおよび他の局面および実現例について以下で詳細に説明する。上記の情報および以下の詳細な説明は、さまざまな局面および実現例の説明的な例を含んでおり、記載されている局面および実現例の本質および特徴を理解するための概要または枠組みを提供する。図面は、さまざまな局面および実現例の説明およびさらなる理解を提供するものであり、本明細書に組み込まれて本明細書の一部を構成している。
【００２４】
添付の図面は、一定の比率に応じて描かれることを意図するものではない。さまざまな図における同様の参照番号および名称は、同様の要素を示す。分かりやすくするために、全ての構成要素が全ての図に記載されているとは限らない。
【図面の簡単な説明】
【００２５】
【図１】例示的な実現例に係る、ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスを含むコンピュータシステムの例のブロック図である。
【図２】例示的な実現例に係る、ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスの例のブロック図である。
【図３】例示的な実現例に係る、ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスを使用する方法の例を示すフローチャートである。
【図４】例示的な実現例に係る、ＮＡＮＤバッファおよびさらなるＮＡＮＤストレージを有するＮＡＮＤフラッシュストレージデバイスの例のブロック図である。
【図５】例示的な実現例に係る、ＮＡＮＤバッファおよびさらなるＮＡＮＤストレージを有するＮＡＮＤフラッシュストレージデバイスの動作の例を示す。
【図６】例示的な実現例に係る、ＮＡＮＤバッファおよびさらなるＮＡＮＤストレージを有するＮＡＮＤフラッシュストレージデバイスを使用する方法の例を示すフローチャートである。
【図７】例示的な実現例に係る、ウェアレベリングのための循環式ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスの例のブロック図である。
【図８】例示的な実現例に係る、ウェアレベリングのための循環式ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスの動作の例を示す。
【図９】例示的な実現例に係る、ウェアレベリングのための循環式ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスを使用する方法の例を示すフローチャートである。
【発明を実施するための形態】
【００２６】
詳細な説明
以下は、ＮＡＮＤバッファを有する、レイテンシが予測可能であるＮＡＮＤフラッシュストレージデバイス、およびその使用方法に関するさまざまな概念、ならびにそれらの実現例の説明である。上で紹介され、以下でさらに詳細に説明するさまざまな概念は、記載されている概念が任意の特定の実現態様に限定されるものではないので、多数の方法のいずれで実現されてもよい。具体的な実現例および用途の例は、主に説明の目的で提供されている。
【００２７】
本開示は、一般に、ＮＡＮＤバッファを有する、レイテンシが予測可能であるＮＡＮＤフラッシュストレージデバイスに関する。ストレージデバイスは、ソリッドステートドライブ（ＳＳＤ）またはスワップデバイスであってもよい。スワップデバイスは、ランダムアクセスメモリ（ＲＡＭ）の拡張機能として機能することができる二次ストレージデバイスである。メモリに保持されるデータの量がＲＡＭの容量を超えると、「ページング」と称されることもある動作時にデータの一部がスワップデバイスに移動され得る。従来は、この二次デバイスがハードディスクドライブ（ＨＤＤ）であった。しかし、ＨＤＤからのデータの読み書きはＲＡＭと比較して非常にゆっくりであるため、検索速度が重要である設定では、ＨＤＤはスワップデバイスとして非実用的になってしまう。最近のＳＳＤ、特にＮＡＮＤフラッシュベースのＳＳＤは、依然としてＲＡＭよりはゆっくりであるが、ＨＤＤと比較して速い検索時間を示す。ＮＡＮＤ  ＳＳＤも、ＲＡＭより安価である傾向があるため、ＳＳＤ容量に有利なようにＲＡＭ容量を減少させることにより、コストを節約することができる。サムソン社のＺ−ＮＡＮＤなどのさらに最近開発された低レイテンシＮＡＮＤ（ＬＬＮＡＮＤ）は、その一般的な読取レイテンシを改善する特別な回路を有して設計されている。ＬＬＮＡＮＤベースのＳＳＤは、さらに高速であるため、いくつかのサーバアプリケーションにおけるページングおよび他の一時的なデータ記憶に有用である。
【００２８】
しかし、ＮＡＮＤフラッシュＳＳＤには他の欠点がある。ＮＡＮＤ読取時間は、約数十マイクロ秒と非常に高速であるが、消去および書込動作は、各々約数ミリ秒とはるかにゆっくりである。そして、ＮＡＮＤフラッシュチップは、読取動作と書込動作とを同時に実行することができないので、消去／書込動作の後ろのキューに入れられた読取動作は、通常の２倍または３倍のレイテンシ増加を示し得る。これは、「テイルレイテンシ」と呼ばれる。ＲＡＭ内のデータをバッファリングしてＮＡＮＤフラッシュチップに書き込むことが可能であるが、オーバーヘッドは法外な費用がかかる可能性がある。たとえば、１０個のＮＡＮＤフラッシュチップを有するデバイスは、総ＮＡＮＤ容量の１０分の１に相当するＲＡＭをバッファとして必要とする。ＤＲＡＭはＮＡＮＤストレージの４倍高価であり得るので、コストオーバーヘッドは４０％であり得る。
【００２９】
したがって、本開示は、ＮＡＮＤバッファを利用してＲＡＭバッファよりも低コストオーバーヘッドでテイルレイテンシを改善することを提案する。システムは、データの各ページを２つのチップに順番に書き込む、すなわちまず第１のチップに書き込み、次いで第２のチップに書き込む、ことによって機能する。第２のチップは、ＮＡＮＤバッファであると考えられてもよい。書込動作は、時間的に重ならない。読取動作は、現在書込動作を実行していないチップによって実行することができる。したがって、読取動作は、書込動作の後ろのキューに入れられる必要がなく、ＮＡＮＤフラッシュストレージデバイスがより予測可能なレイテンシを有することが可能になる。
【００３０】
いくつかの実現例では、第１のチップ（さらに、ひいては、第２のチップ）は満杯であり、２つの新たなチップが書込バッファとして選択される。第１のチップは、リードオンリに切り換え可能であり、第１のチップが書込動作から中断なしに読取動作を実行することができるので、第２のチップに格納されたデータのコピーはもはや不要である。このとき、第２のチップは、将来的な一次書込動作のために空いている状態である。２つの新たなチップ、すなわち第３のチップおよび第４のチップ、を書き込みのために選択することができる。この場合、第４のチップがＮＡＮＤバッファであると考えられてもよい。
【００３１】
このようなシステムが機能するために、書き込みのために選択された２つの新たなチップが重複データを含むことが役立つ。したがって、新たなデータを受信する前に、まず第３のチップ上の既存のデータを第４のチップにコピーすることができる。コピー動作は、「ガベージコレクション」、すなわち無効にされた（もはや使用されていない）データが占める空間を解放するためにメモリデバイスが実行する動作、を含む。ガベージコレクションは、時間がかかる可能性があり、消去／書込動作のように、完了するまで読取動作を実行しないようにすることができる。したがって、ガベージコレクションおよびコピー動作は、最初は第４のチップのみが書き込まれていて第３のチップが読み取りに利用できるように実行される。その後、ガベージコレクションされたバージョンが第４のチップから第３のチップにコピーバックされ、その結果、第４のチップが読み取りに利用できるようになる。さらに、第３のチップと第４のチップとの間のガベージコレクションおよびコピー動作は、第１および第２のチップへの書き込みと時間的に重なる。ガベージコレクションおよびコピー動作が書込動作よりも時間がかからない限り、第３および第４のチップは、第１および第２のチップが満杯になったときに書込動作の実行を引き継ぐ準備が整っているだろう。次いで、ガベージコレクションおよびコピー動作のために新たな一対のチップが選択される。
【００３２】
このようなシステムでは、任意の所与の時点において、２つのバッファチップは２つの他のチップの中にデータの複製を含んでいる。したがって、記憶のために１０個のＮＡＮＤフラッシュチップを有するデバイスは、２つのさらなるＮＡＮＤフラッシュバッファチップを有し得る。したがって、コストオーバーヘッドは２０％であり、ＤＲＡＭバッファを使用した場合のコストオーバーヘッドの半分にすることができる。
【００３３】
ＮＡＮＤフラッシュストレージデバイスの書込帯域幅を改善するためにさらなるバッファＮＡＮＤフラッシュチップが利用されてもよい。ＮＡＮＤフラッシュストレージデバイスの書込帯域幅とは、ＮＡＮＤフラッシュストレージデバイスが所与の時間内に受信および格納することができるデータの量を指す。場合によっては、ＮＡＮＤフラッシュストレージデバイスの書込帯域幅は、ＮＡＮＤフラッシュストレージデバイスがデータを特定のＮＡＮＤフラッシュチップに書き込むのにかかる時間によって制限され得る。したがって、書込帯域幅は、より多くのバッファＮＡＮＤフラッシュチップを追加してそれらの間で書込動作を分散させることによって増加させることができる。したがって、いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイスは、書込帯域幅を改善するためにさらなるバッファチップ（すなわち、４個、６個、８個またはそれ以上）を含み得る。
【００３４】
いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイスは、ウェアレベリングを利用することができる。ＮＡＮＤフラッシュチップは、過度のビットエラーを示す前に有限回数の書込動作しか実行できない。最終的に、多くの書込動作を実行した後、ＮＡＮＤフラッシュチップは摩耗して故障し始める。ＮＡＮＤフラッシュストレージデバイスの寿命を延ばすために、ＮＡＮＤフラッシュストレージデバイスは、どのＮＡＮＤフラッシュチップが書込動作のためのバッファチップとして指定されるかを循環させることができる。この指定は、書込動作のバッファリングを少数のチップに集中させることとは対照的に、デバイス内のＮＡＮＤフラッシュチップの一部または全ての中で摩耗を均等化または実質的に均等化するように循環させることができる。このように、デバイスの多くのＮＡＮＤフラッシュチップにわたって摩耗を分散または「平均化」することができる。
【００３５】
図１は、例示的な実現例に係る、ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスを含むコンピュータシステム１００の例のブロック図である。システム１００は、コンピューティングデバイスであってもよく、たとえば、ラップトップもしくはデスクトップコンピュータなどのパーソナルコンピューティングデバイス、サーバもしくはメインフレームなどの共有コンピューティングデバイス、または、上記のもしくは他のコンピューティングデバイスの構成要素であってもよいが、これらに限定されるものではない。システム１００は、中央処理装置（ＣＰＵ）１１０などのプロセッサと、ＤＲＡＭなどのＲＡＭ１２０と、ペリフェラル・コンポーネント・インターコネクト・エクスプレス（ＰＣＩｅ）などの入力／出力（Ｉ／Ｏ）バス１３０と、長期間にわたるデータ記憶のためのハードディスクドライブ（ＨＤＤ）またはソリッドステートドライブ（ＳＳＤ）などのデータストレージデバイス１４０と、ＮＡＮＤフラッシュストレージデバイス１５０とを含む。ＲＡＭ１２０は、メインメモリであってもよく、たとえば所望の場所のメモリアドレスを伝えるアドレスバスおよび指定のメモリアドレスにデータを読み書きするために使用されるデータバスを介してＣＰＵ１１０に直接アクセス可能であってもよい。
【００３６】
いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス１５０は、スワップ空間をシステム１００に提供するスワップデバイスであってもよい。コンピューティング環境によっては、カーネルまたはオペレーティングシステムは、仮想メモリなどのメモリ／ストレージ抽象化を利用することができ、これは、ＣＰＵ１１０で実行されるアプリケーションに対して、タイプおよび場所が異なるであろう１つ以上のメモリデバイスへの透過的で一貫したアクセスを提供する。たとえば、仮想メモリは、ＣＰＵ１１０で実行されるアプリケーションが拡張メモリ空間にアクセスすることを可能にしてもよい。拡張メモリ空間は、ＲＡＭ１２０の容量を超えることがある。メモリに格納することを求められるデータがＲＡＭ１２０の容量を超えると、仮想メモリ機能はページングを実行することができ、それによって、システム１００は、ＨＤＤまたはＳＳＤなどの二次メモリデバイスにデータを格納することができる。この拡張メモリ空間はスワップ空間と称されてもよく、スワップ空間を提供するストレージデバイスはスワップデバイスと称されてもよい。
【００３７】
さまざまなタイプのメモリおよびストレージデバイスは、アクセス速度が大きく異なり、ＲＡＭは一般にＨＤＤよりもはるかに高速であり、ＮＡＮＤフラッシュは中間である。ＨＤＤのアクセス時間がゆっくりであることにより、ＨＤＤはデータへの高速アクセスを必要とする用途では非実用的である。ＮＡＮＤフラッシュストレージデバイスは、ＨＤＤよりもはるかに高速であるため、幅広い範囲の用途で有用になる。ＮＡＮＤフラッシュストレージデバイスは、ＤＲＡＭなどのいくつかの一般的なタイプのＲＡＭよりも安価であるというさらなる利点を有する。低レイテンシＮＡＮＤ（ＬＬＮＡＮＤ）などの新たなタイプのＮＡＮＤは、さらに高速であり得て、通常のＮＡＮＤが約７０マイクロ秒であるのに対して、約１０マイクロ秒の読取動作のレイテンシを示す。また、ＬＬＮＡＮＤは、プログラム（書込）動作のためのレイテンシが低く、すなわち通常のＮＡＮＤでは数ミリ秒であるのに対して、１００〜２００マイクロ秒である。しかし、書込動作は一般にプログラム動作も消去動作も含む。ＬＬＮＡＮＤは、依然として消去時間がゆっくりとしており、約５ミリ秒かかる可能性がある。さらなる課題として、ＮＡＮＤフラッシュチップまたはダイは、一般に、一度に１つの動作しか実行できない。たとえば、ＮＡＮＤフラッシュチップが書込動作の消去／プログラムシーケンスを実行している場合、完了するまではいかなる入来読取コマンドもキューに入れられる。したがって、いくつかの読取動作は、数十マイクロ秒の名目レイテンシにもかかわらず、完了するまでに最大数ミリ秒を必要とし得る。これらの外れ値レイテンシは、「テイルレイテンシ」と称される。このテイルレイテンシの期間も予測不可能性も、ＮＡＮＤフラッシュを使用する際に問題を生じさせる可能性がある。いくつかのシステムは、ＲＡＭを使用して、ＮＡＮＤフラッシュチップが書込動作を実行している間にＲＡＭが読取動作を実行できるように、書き込まれているＮＡＮＤフラッシュチップの内容をキャッシングすることができる。これについては、たとえば米国特許出願番号第１４／９３６，４８６号を参照されたい。ＲＡＭは、ＮＡＮＤフラッシュよりも高価であり得るので、いくつかの用途では受け入れがたいであろうコストオーバーヘッドを増大させる。したがって、本開示は、１つ以上のさらなるＮＡＮＤフラッシュチップを提供して、書込動作を実行しているＮＡＮＤフラッシュチップの中にあるデータのためのキャッシュを提供することを提案する。ＮＡＮＤフラッシュベースのバッファについては、図２を参照して以下でより詳細に説明する。
【００３８】
図２は、例示的な実現例に係る、ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイス２５０の例のブロック図である。ＮＡＮＤフラッシュストレージデバイス２５０は、ＮＡＮＤフラッシュストレージデバイス１５０としての役割を果たすことができる。読取動作が書込動作の後ろのキューに入れられることに関連付けられたテイルレイテンシを回避するために、ＮＡＮＤフラッシュストレージデバイス２５０は、２つのＮＡＮＤフラッシュチップ２７０ａおよび２７０ｂ（まとめて「ＮＡＮＤフラッシュチップ２７０」）を使用したダブルバッファリングを利用することができる。コントローラ２６０は、Ｉ／Ｏバス２３０を介して受信したストレージアクセスコマンドを処理することができる。コントローラ２６０は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、マイクロコントローラまたはマイクロプロセッサなどのプログラマブルロジックを含み得る。コントローラ２６０は、ＮＡＮＤフラッシュストレージデバイス２５０と一体であってもよく、またはＮＡＮＤフラッシュストレージデバイス２５０の外側にあってもよい。コントローラ２６０は、ＣＰＵ１１０がＮＡＮＤフラッシュストレージデバイス２５０のバッファリング動作を意識しなくてもよいように、またはＣＰＵ１１０自体がＮＡＮＤフラッシュストレージデバイス２５０のバッファリング動作を実行しなくてもよいように、ＮＡＮＤフラッシュストレージデバイス２５０の読取および書込動作を調整することができる。代替的に、コントローラが各動作を完了させるための低レベル作業を実行している間にこれらの動作を調整するように、ＣＰＵ１１０に依拠するより単純なコントローラを設計することも可能である。したがって、コントローラ２６０は、Ｉ／Ｏバス２３０を介してデータおよび／またはコマンドを受信し、受信したデータをまずＮＡＮＤフラッシュチップ２７０のうちの１つに書き込み、次いでもう一つのＮＡＮＤフラッシュチップ２７０に書き込むように構成される。コントローラ２６０は、時間的に重ならないように書込動作を連続的に、自律的またはＣＰＵ１１０の管理下で、実行する。そのため、任意の所与の時点において、現在書込動作を実行していないＮＡＮＤフラッシュチップ２７０は、読取動作を迅速に実行することができる。コントローラ２６０が各書込動作を実行すると、ＮＡＮＤフラッシュチップ２７０は２つとも同じデータを含み得る。コントローラ２６０は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない第１のＮＡＮＤフラッシュチップまたは第２のＮＡＮＤフラッシュチップのいずれかから読み取りを行うことによって、読取コマンドを実行することができる。このようにして、テイルレイテンシを改善することができる。
【００３９】
いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス２５０は、書込帯域幅をさらに改善するためにさらなるＮＡＮＤフラッシュチップ２７０ｃおよび２７０ｄを含み得る。たとえば、４個のＮＡＮＤフラッシュチップ２７０ａ〜２７０ｄを有するＮＡＮＤフラッシュストレージデバイス２５０は、２つのＮＡＮＤフラッシュチップ２７０、たとえばＮＡＮＤフラッシュチップ２７０ａおよび２７０ｂ、の間で書込動作を分割してもよい。ＮＡＮＤフラッシュチップ２７０ａおよび２７０ｂがそれぞれの書込動作を完了させた後、それらの書込動作はＮＡＮＤフラッシュチップ２７０ｃおよび２７０ｄで繰り返されてもよい。このようにして、ＮＡＮＤフラッシュストレージデバイス２５０の書込帯域幅を約２倍にすることができる。ＮＡＮＤフラッシュストレージデバイス２５０は、書込帯域幅をさらに増加させるためにさらなるＮＡＮＤフラッシュチップ２７０を利用してもよい。
【００４０】
いくつかの実現例では、ＮＡＮＤデバイス２５０は、各ＮＡＮＤフラッシュチップ２７０に書き込まれている間にデータを格納するためのキャッシュまたはバッファとしての役割を果たすように何らかのＲＡＭ２６５を含み得る。このＲＡＭ２６５は、ＮＡＮＤフラッシュチップ２７０の全内容をバッファリングするほどの容量を有していなくてもよく、データの１ブロックまたは１ページをバッファリングするのに十分な大きさであるだけでよい。したがって、それは、専用のＲＡＭバッファよりもはるかに小さくてもよいため、ＮＡＮＤデバイス２５０のコストオーバーヘッドに大きく寄与することはない。
【００４１】
図３は、例示的な実現例に係る、ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスを使用する方法３００の例を示すフローチャートである。ＮＡＮＤフラッシュストレージデバイスは、本明細書に記載されているＮＡＮＤフラッシュストレージデバイス１５０，２５０，４５０または７５０のうちのいずれかを含み得る。方法３００は、入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップ（段階３１０）を含む。方法３００は、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、受信したデータを第１のＮＡＮＤフラッシュチップおよび第２のＮＡＮＤフラッシュチップに連続的に書き込むステップ（段階３２０）を含む。方法は、Ｉ／Ｏバスを介して読取コマンドを受信するステップ（段階３３０）を含む。方法３００は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない第１のＮＡＮＤフラッシュチップまたは第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るステップ（段階３４０）を含む。
【００４２】
方法３００は、Ｉ／Ｏバスを介してデータを受信するステップ（段階３１０）を含む。ＮＡＮＤフラッシュストレージデバイスは、ＮＡＮＤフラッシュストレージデバイス１５０または２５０に関してそれぞれ上記したＩ／Ｏバス１３０または２３０のうちの１つなどのＩ／Ｏバスを介して書込コマンドを受信することができる。書込コマンドは、ＮＡＮＤフラッシュストレージデバイスによって格納されるデータを含み得る。
【００４３】
方法３００は、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、受信したデータを第１のＮＡＮＤフラッシュチップおよび第２のＮＡＮＤフラッシュチップに連続的に書き込むステップ（段階３２０）を含む。書込動作は、上記のＣＰＵ１１０またはコントローラ２６０などのＮＡＮＤフラッシュストレージデバイスのコントローラによって実行することができる。コントローラは、ＮＡＮＤフラッシュチップ２７０ａまたは２７０ｂなどの２つのＮＡＮＤフラッシュチップのうちの１つに対して書込動作を実行することができる。コントローラがＮＡＮＤフラッシュチップ２７０のうちの１つに対して書込動作を実行している間は、その特定のＮＡＮＤフラッシュチップは他の動作を処理することができない。したがって、コントローラは、時間的に重ならないように２つのＮＡＮＤフラッシュチップに対して連続的に書込動作を実行することになる。いくつかの実現例では、受信段階３１０および書込段階３２０は、第１および第２のＮＡＮＤフラッシュチップが一杯または実質的に一杯になるまで繰り返すことができる。いくつかの実現例では、ＮＡＮＤフラッシュチップは、低レイテンシＮＡＮＤ（ＬＬＮＡＮＤ）チップである。
【００４４】
方法は、Ｉ／Ｏバスを介して読取コマンドを受信するステップ（段階３３０）を含む。方法３００は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していない第１のＮＡＮＤフラッシュチップまたは第２のＮＡＮＤフラッシュチップのいずれかからデータを読み取るステップ（段階３４０）を含む。書込動作の実行中に、ＮＡＮＤフラッシュストレージデバイスは、Ｉ／Ｏバスを介して読取コマンドを受信してもよい。コントローラは、現在書込動作を実行していないＮＡＮＤフラッシュチップのいずれかに読取コマンドを仕向けることができる。このようにして、段階３３０および３４０は、段階３１０および３２０と同時に進むことができ、読取動作は、ゆっくりとした書込動作の後ろのキューに入れられることなく迅速に処理することができる。方法３００のこれらの段階は、さらなるデータおよび読取コマンドがＩ／Ｏバスを介して受信されると繰り返すことができる。いくつかの実現例では、各々の特定のＮＡＮＤフラッシュチップが果たす役割は循環し得て、それぞれのＮＡＮＤフラッシュチップがそれぞれの時点でそれぞれのバッファリングおよび記憶機能を実行する。異なる態様のＮＡＮＤフラッシュチップバッファリングおよび記憶の例については、図４〜図９を参照して以下で説明する。
【００４５】
図４は、例示的な実現例に係る、ＮＡＮＤバッファおよびさらなるＮＡＮＤストレージを有するＮＡＮＤフラッシュストレージデバイス４５０の例のブロック図である。ＮＡＮＤフラッシュストレージデバイス４５０は、Ｉ／Ｏバス４３０を介して受信した読取および書込コマンドを実行するためのコントローラ４６０を含む。コントローラ４６０は、ＲＡＭ４６５を含んでもよく、またはメモリバスを介してＲＡＭ４６５と通信してもよい。コントローラ４６０は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、マイクロコントローラまたはマイクロプロセッサなどのプログラマブルロジックを含み得る。コントローラ４６０は、ＮＡＮＤフラッシュストレージデバイス４５０と一体であってもよく、またはＮＡＮＤフラッシュストレージデバイス４５０の外側にあってもよい。ＮＡＮＤフラッシュストレージデバイス４５０は、２つのバッファＮＡＮＤフラッシュチップ４７０ａおよび４７０ｂ（まとめて「バッファＮＡＮＤフラッシュチップ４７０」）を含み得る。いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス４５０は、以下でさらに説明するように、さらなるバッファＮＡＮＤフラッシュチップ４７０を含み得る。いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス４５０は、ＲＡＭ４６５を使用して、Ｉ／Ｏバス４３０を介して受信したデータがバッファＮＡＮＤフラッシュチップ４７０のうちの１つ以上に書き込まれている間にこのデータをバッファリングすることができる。ＮＡＮＤフラッシュストレージデバイス４５０は、バッファＮＡＮＤフラッシュチップ４７０のメモリ容量を超えるさらなるメモリ容量を提供するストレージＮＡＮＤフラッシュチップ４７５ａ〜４７５ｅ（まとめて「ストレージＮＡＮＤフラッシュチップ４７５」）も含む。Ｉ／Ｏバス４３０を介して受信したデータは、ストレージＮＡＮＤフラッシュチップ４７５のうちの１つにコピーされる前にバッファＮＡＮＤフラッシュチップ４７０においてバッファリングされることができる。
【００４６】
いくつかの実現例では、バッファＮＡＮＤフラッシュチップ４７０は、シングルレベルセル（ＳＬＣ）ＮＡＮＤフラッシュチップまたは低レイテンシＮＡＮＤ（ＬＬＮＡＮＤ）フラッシュチップであってもよく、ストレージＮＡＮＤフラッシュチップ４７５は、マルチレベルセル（ＭＬＣ）またはトリプルレベルセル（ＴＬＣ）ＮＡＮＤフラッシュチップであってもよい。いくつかの実現例では、バッファＮＡＮＤフラッシュチップ４７０は、ストレージＮＡＮＤフラッシュチップ４７５よりも小さな容量を有し得る。いくつかの実現例では、バッファＮＡＮＤフラッシュチップ４７０のグループは、単一のストレージＮＡＮＤフラッシュチップ４７５の容量に等しい容量を有し得る。バッファＮＡＮＤフラッシュチップ４７０のグループは、まとめて単一のバッファチップとして使用可能である。
【００４７】
ＮＡＮＤフラッシュストレージデバイスの書込帯域幅は、書込動作を実行するペースが比較的ゆっくりであることにより制限される可能性がある。しかし、いくつかの実現例では、書込帯域幅は、より多くのバッファＮＡＮＤフラッシュチップ４７０を書込バッファとして指定することによって改善することができる。いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス２５０と同様に、ＮＡＮＤフラッシュストレージデバイス４５０は、さらなるバッファＮＡＮＤフラッシュチップ４７０、たとえばバッファＮＡＮＤフラッシュチップ４７０ｃおよび４７０ｄ、を含み得る。いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス４５０は、さらに多くのバッファＮＡＮＤフラッシュチップ４７０を含んでもよい。したがって、コントローラ４６０は、バッファＮＡＮＤフラッシュチップ４７０の間で書込動作を分散させて、書込帯域幅を増大させることができる。
【００４８】
ＮＡＮＤフラッシュストレージデバイス４５０は、ともすれば２つの欠点に直面する可能性がある。第１に、バッファＮＡＮＤフラッシュチップ４７０は、最終的には容量に達することになる。バッファＮＡＮＤフラッシュチップ４７０内の全てのデータがストレージＮＡＮＤフラッシュチップ４７５のうちの１つにコピーされると、バッファＮＡＮＤフラッシュチップ４７０内の全てのデータは削除され得る。バッファＮＡＮＤフラッシュチップ４７０は、消去動作を実行している間は書込動作を実行することができない。したがって、書込帯域幅は、そのバッファＮＡＮＤフラッシュチップ４７０を利用できないことによって制限される。
【００４９】
第２の考えられる欠点は、過度のビットエラーを示す前にＮＡＮＤフラッシュチップが処理できる書込動作の数が有限であることに関する。ＮＡＮＤフラッシュチップは、書込動作を処理することにより摩耗する。最終的に、多くの書込動作を実行した後、ＮＡＮＤフラッシュチップは、摩耗して故障を示し始める。
【００５０】
いくつかの実現例では、書込帯域幅が制限されるという問題は、上記のようにバッファＮＡＮＤフラッシュチップ４７０の数を増加させることによって対処することができ、ＮＡＮＤの摩耗の問題は、高い耐久性のチップをバッファＮＡＮＤフラッシュチップ４７０として使用することによって対処することができる。いくつかの実現例では、ＮＡＮＤの摩耗の問題は、入来データのためのバッファとして指定される特定のＮＡＮＤフラッシュチップを循環させることによって対処することができる。このようなウェアレベリングスキームについては、図７〜図９を参照して以下でさらに説明する。以下の図５は、ＮＡＮＤフラッシュストレージデバイス４５０の動作の例を示す。
【００５１】
図５は、例示的な実現例に係る、ＮＡＮＤバッファおよびさらなるＮＡＮＤストレージを有するＮＡＮＤフラッシュストレージデバイスの動作５００の例を示す。これらの動作は、上記のＮＡＮＤフラッシュストレージデバイス４５０などのＮＡＮＤフラッシュストレージデバイスによって実行することができる。動作５００は、入来データをバッファＮＡＮＤフラッシュチップ４７０ａおよびストレージＮＡＮＤフラッシュチップ４７５ａに書き込み、ガベージコレクションによりデータをストレージＮＡＮＤフラッシュチップ４７５ｂからバッファＮＡＮＤフラッシュチップ４７０ｂにコピーし、その後、ストレージＮＡＮＤフラッシュチップ４７５ｂにコピーバックする段階５１０を含む。動作５００は、入来データをバッファＮＡＮＤフラッシュチップ４７０ｂおよびストレージＮＡＮＤフラッシュチップ４７５ｂに書き込み、ガベージコレクションによりデータをストレージＮＡＮＤフラッシュチップ４７５ｃからバッファＮＡＮＤフラッシュチップ４７０ａにコピーし、その後、ストレージＮＡＮＤフラッシュチップ４７５ｃにコピーバックする段階５２０を含む。動作５００は、入来データをバッファＮＡＮＤフラッシュチップ４７０ａおよびストレージＮＡＮＤフラッシュチップ４７５ｃに書き込み、バッファＮＡＮＤフラッシュチップ４７０ｂがストレージＮＡＮＤフラッシュチップ４７５ｄからコピーされたデータを受信する段階５３０を含む。バッファＮＡＮＤフラッシュチップ４７０は、バッファ５８０枠によって示されている。各ＮＡＮＤフラッシュチップ４７０または４７５が現在実行している動作は、頭字語によって示されている。「ＰＷ」は、「一次書き込み」を意味し、ストレージＮＡＮＤフラッシュチップ４７５がデータを受信して書込動作を実行するように現在指定されていることを示す。「ＳＷ」は、「二次書き込み」を意味し、バッファＮＡＮＤフラッシュチップ４７０もデータを受信して書込動作を実行するように現在指定されていることを示す。「ＦＰＷ」は、「将来的な一次書き込み」を意味し、ＮＡＮＤフラッシュチップ４７５がデータを受信して書込動作を実行する将来的なサービスに備えるように指定されていることを示す。「ＦＳＷ」は、「将来的な二次書き込み」を意味し、ＮＡＮＤフラッシュチップ４７０がデータを受信して書込動作を実行する将来的なサービスに備えるように指定されていることを示す。「ＲＯ」は、「リードオンリ」を意味し、コントローラ４６０がＲＯストレージＮＡＮＤフラッシュチップ４７５に読取動作を実行するように求めるのみであることを示す。これらの符号は、任意であるに過ぎず、特定の時点でのさまざまなチップの動作を説明する目的でのみ割り当てられている。動作５００の各状態間で、各ＮＡＮＤフラッシュチップ４７０または４７５の役割は変化する。なぜなら、もう一方のＮＡＮＤフラッシュチップ４７０または４７５がデータを受信して書込動作を実行するからである。
【００５２】
段階５１０の間は、矢印によって示されるように、バッファＮＡＮＤフラッシュチップ４７０ａおよびストレージＮＡＮＤフラッシュチップ４７５ａが入来データを受信して書き込む。バッファＮＡＮＤフラッシュチップ４７０ａおよびストレージＮＡＮＤフラッシュチップ４７５ａはそれぞれ、ＳＷチップおよびＰＷチップとして同一のデータを受信して書き込む。しかし、それらは、重ならない期間中に書込動作を実行することができる。このようにして、ＰＷチップもＳＷチップも実質的に同一のデータを含み、書込動作を実行していないＮＡＮＤフラッシュチップは、比較的長時間の書込動作の完了を待つ必要なく読取コマンドに応答して迅速に読取動作を実行することができる。いくつかの実現例では、ＰＷチップおよびＳＷチップは、一杯または実質的に一杯になるまでデータを受信して書込動作を実行し続けることができる。一方、ＦＰＷストレージＮＡＮＤフラッシュチップ４７５ｂは、次の段階５２０での外部データの受信に備えて、そのデータをＦＳＷバッファＮＡＮＤフラッシュチップ４７０ｂにコピーする。コピー動作中に、ＮＡＮＤフラッシュストレージデバイス４５０は、ＦＰＷチップおよびＦＳＷチップに対してガベージコレクションを実行することができる。断片的なデータがＦＰＷチップからＦＳＷチップにコピーされる場合、それは、連続的または実質的に連続的なメモリ空間においてＦＳＷチップに書き込まれるように統合され、第２の連続的または実質的に連続的なメモリ空間において空き空間が同様に統合される。これにより、データ表現がよりコンパクトになり、次の段階５２０で書き込まれる新たなデータのための空間が最後部に残ることになる。全ての有効データがＦＰＷチップからＦＳＷチップにコピーされた後、ＦＰＷ上の空き空間は消去され、有効データはＦＳＷチップからＦＰＷチップにコピーバックされる。ＰＷチップおよびＳＷチップがそれらの書込動作を完了させ、ＦＰＷチップおよびＦＳＷチップがそれらのコピーおよびガベージコレクションを完了させると、動作５００は次の段階５２０に進むことができる。
【００５３】
段階５１０の間に（段階５２０および５３０の間にも）、ＮＡＮＤフラッシュストレージデバイス４５０は、時折、読取要求を受信してもよい。コントローラ４６０は、要求されたデータがＲＯチップにあるか、ＰＷチップまたはＳＷチップのうちの１つにあるか、ＦＰＷチップまたはＦＳＷチップのうちの１つにあるかに応じて、３つの方法のうちの１つの方法で読取要求を処理してもよい。要求されたデータがＲＯチップにある場合、コントローラ４６０は、単にＲＯチップに対して読取動作を実行して、データを返すことができ、読取動作の実行と干渉したり読取動作の実行を遅延させたりするであろう書込動作は生じない。要求されたデータがＰＷチップまたはＳＷチップにある場合、コントローラ４６０は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＰＷチップまたはＳＷチップのいずれかに対して読取動作を実行することができる。要求されたデータがＦＰＷチップまたはＦＳＷチップにある場合、コントローラ４６０は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＦＰＷまたはＦＳＷのいずれかに対して読取動作を実行することができる。すなわち、ガベージコレクションによりデータが現在ＦＰＷチップからＦＳＷチップにコピーされている場合、コントローラ４６０は、ＦＳＷチップに対して書込動作を実行しているため、ＦＰＷチップに対して読取動作を実行することができる。データがＦＳＷチップからＦＰＷチップにコピーバックされている場合、コントローラ４６０は、ＦＳＷチップに対して読取動作を実行することができる。このようにして、どのＮＡＮＤフラッシュチップが要求されたデータを含んでいるか、およびどのＮＡＮＤフラッシュチップが書込動作を実行しているかにかかわらず、ＮＡＮＤフラッシュデバイス４５０は、読取動作を書込動作の後ろのキューに入れることによって引き起こされる過度の遅延なしに、要求されたデータを読み取って返すことができる。
【００５４】
段階５２０の間は、ストレージＮＡＮＤフラッシュチップ４７５ｂがＰＷチップとして指定され、バッファＮＡＮＤフラッシュチップ４７０ｂがＳＷチップとして指定され、ストレージＮＡＮＤフラッシュチップ４７５ｃがＦＰＷチップとして指定され、バッファＮＡＮＤフラッシュチップ４７０ａがＦＳＷチップとして指定され、ストレージＮＡＮＤフラッシュチップ４７５ａがＲＯとして指定される。ＰＷチップ、ＳＷチップ、ＦＰＷチップおよびＦＳＷチップの機能は、前の段階５１０において同一名称を有するチップによって実行された機能と同様であるが、それぞれのＮＡＮＤフラッシュチップが各々の指定された役割を実行する。ＳＷチップおよびＰＷチップは、矢印によって示されるように、同一のデータを受信して書き込む。しかし、それらは、比較的長時間の書込動作の完了を待つ必要なく読取コマンドに応答して迅速に読取動作を実行することができるように、重なり合わない期間中に書込動作を実行することができる。一方、ＦＰＷチップは、次の段階５３０での外部データの受信に備えて、そのデータをＦＳＷチップにコピーする。コピー動作中、ＦＰＷチップおよびＦＳＷチップは、ガベージコレクション動作を実行することができる。ＰＷチップおよびＳＷチップがそれらの書込動作を完了させ、ＦＰＷチップおよびＦＳＷチップがそれらのコピーおよびガベージコレクションを完了させると、動作５００は次の段階５３０に進むことができる。
【００５５】
段階５３０の間は、ストレージＮＡＮＤフラッシュチップ４７５ｃがＰＷチップとして指定され、バッファＮＡＮＤフラッシュチップ４７０ａがＳＷチップとして指定され、ストレージＮＡＮＤフラッシュチップ４７５ｄがＦＰＷチップとして指定され、バッファＮＡＮＤフラッシュチップ４７０ｂがＦＳＷチップとして指定され、ストレージＮＡＮＤフラッシュチップ４７５ｂがＲＯとして指定される。ＰＷチップ、ＳＷチップ、ＦＰＷチップおよびＦＳＷチップの機能は、前の段階５１０および５２０において同一名称を有するチップによって実行された機能と同様であるが、それぞれのＮＡＮＤフラッシュチップが各々の指定された役割を実行する。ＳＷチップおよびＰＷチップは、矢印によって示されるように、同一のデータを受信して書き込む。しかし、それらは、比較的長時間の書込動作の完了を待つ必要なく読取コマンドに応答して迅速に読取動作を実行することができるように、重なり合わない期間中に書込動作を実行することができる。一方、ＦＰＷチップは、次の段階での外部データの受信に備えて、そのデータをＦＳＷチップにコピーする。コピー動作中、ＦＰＷチップおよびＦＳＷチップは、ガベージコレクション動作を実行することができる。ＰＷチップおよびＳＷチップがそれらの書込動作を完了させ、ＦＰＷチップおよびＦＳＷチップがそれらのコピーおよびガベージコレクションを完了させると、動作５００は次の段階に進むことができる。動作５００は、全てのストレージＮＡＮＤフラッシュチップ４７５が書き込まれるまでこのように進み続けることができ、全てのストレージＮＡＮＤフラッシュチップ４７５が書き込まれた時点で、動作５００は、段階５１０から開始することを繰り返すことができる。
【００５６】
図６は、例示的な実現例に係る、ＮＡＮＤバッファおよびさらなるＮＡＮＤストレージを有するＮＡＮＤフラッシュストレージデバイスを使用する方法６００の例を示すフローチャートである。方法６００は、バッファＮＡＮＤチップによって提供される記憶空間を超えるＮＡＮＤフラッシュ記憶空間を提供することができる。たとえば、方法６００は、図４を参照して上記したＮＡＮＤフラッシュストレージデバイス４５０によって実行することができる。ＮＡＮＤフラッシュストレージデバイス４５０は、バッファＮＡＮＤフラッシュチップ４７０とストレージＮＡＮＤフラッシュチップ４７５とを含み得る。方法６００は、第１のストレージＮＡＮＤフラッシュチップを一次書込（ＰＷ）チップとして指定し、第２のストレージＮＡＮＤフラッシュチップを将来的な一次書込（ＦＰＷ）チップとして指定し、第１のバッファＮＡＮＤフラッシュチップを二次書込（ＳＷ）チップとして指定し、第２のバッファＮＡＮＤフラッシュチップを将来的な二次書込（ＦＳＷ）チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリ（ＲＯ）として指定するステップを含む。方法６００は、入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップ（段階６２０）を含む。方法６００は、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、受信したデータをＰＷチップおよびＳＷチップに連続的に書き込むステップ（段階６３０）を含む。方法６００は、Ｉ／Ｏバスを介して読取コマンドを受信するステップ（段階６４０）を含む。方法６００は、読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＮＡＮＤフラッシュチップからデータを読み取るステップ（段階６５０）を含む。方法６００は、有効データをＦＰＷチップからＦＳＷチップにコピーするステップ（段階６６０）を含む。方法６００は、受信したデータの書き込みおよび有効データのコピーに続いて、第１のストレージＮＡＮＤフラッシュチップをＲＯとして指定し、第２のストレージＮＡＮＤフラッシュチップをＰＷチップとして指定し、第１のバッファＮＡＮＤフラッシュチップをＦＳＷチップとして指定し、第２のバッファＮＡＮＤフラッシュチップをＳＷチップとして指定するステップ（段階６７０）を含む。
【００５７】
方法６００は、第１のストレージＮＡＮＤフラッシュチップを一次書込チップとして指定し、第２のストレージＮＡＮＤフラッシュチップを将来的な一次書込チップとして指定し、第１のバッファＮＡＮＤフラッシュチップを二次書込チップとして指定し、第２のバッファＮＡＮＤフラッシュチップを将来的な二次書込チップとして指定し、残りのＮＡＮＤフラッシュチップをリードオンリ（ＲＯ）として指定するステップを含む。
【００５８】
方法６００は、Ｉ／Ｏバスを介してデータを受信するステップ（段階６２０）を含む。段階６２０は、上記の段階３１０と同様であり得る。
【００５９】
方法６００は、各ＮＡＮＤフラッシュチップへの書込動作が時間的に重ならないように、受信したデータをＰＷチップおよびＳＷチップに連続的に書き込むステップ（段階６３０）を含む。段階６３０は、上記の段階３２０と同様であり得る。いくつかの実現例では、受信段階６２０および書込段階６３０は、ＰＷチップおよびＳＷチップが一杯または実質的に一杯になるまで繰り返すことができる。
【００６０】
方法６００は、Ｉ／Ｏバスを介して読取コマンドを受信するステップ（段階６４０）を含む。段階６３０は、上記の段階４３０と同様であり得る。
【００６１】
方法６００は、読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＮＡＮＤフラッシュチップからデータを読み取るステップ（段階６５０）を含む。段階６５０は、上記の段階３４０と同様であり得る。実際には、要求されたデータは、ＲＯチップ、ＰＷチップもしくはＳＷチップのうちの１つ、またはＦＰＷチップもしくはＦＳＷチップのうちの１つにあってもよい。コントローラは、要求されたデータがどこにあるかに応じて、３つの方法のうちの１つの方法で読取要求を処理してもよい。要求されたデータがＰＷチップまたはＳＷチップにある場合、コントローラは、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＰＷチップまたはＳＷチップのいずれかに対して読取動作を実行することができ、方法６００は次の段階に進むことができる。要求されたデータがＲＯチップにある場合、コントローラは、単にＲＯチップに対して読取動作を実行してデータを返すことができ、読取動作の実行と干渉したり読取動作の実行を遅延させたりするであろう書込動作は生じない。要求されたデータがＦＰＷチップまたはＦＳＷチップにある場合、コントローラは、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＦＰＷまたはＦＳＷのいずれかに対して読取動作を実行することができる。すなわち、ガベージコレクションによりデータが現在ＦＰＷチップからＦＳＷチップにコピーされている場合、コントローラ４６０は、ＦＳＷチップに対して書込動作を実行しているため、ＦＰＷチップに対して読取動作を実行することができる。データがＦＳＷチップからＦＰＷチップにコピーバックされている場合、コントローラは、ＦＳＷチップに対して読取動作を実行することができる。このようにして、どのＮＡＮＤフラッシュチップが要求されたデータを含んでいるか、およびどのＮＡＮＤフラッシュチップが書込動作を実行しているかにかかわらず、ＮＡＮＤフラッシュデバイスは、読取動作を書込動作の後ろのキューに入れることによって引き起こされる過度の遅延なしに、要求されたデータを読み取って返すことができる。このように、段階６４０および６５０は、段階６２０および６３０と同時に進むことができ、読取動作は、ゆっくりとした書込動作の後ろのキューに入れられることなく迅速に処理することができる。段階６２０〜６５０は、さらなるデータおよび読取コマンドがＩ／Ｏバスを介して受信されると繰り返すことができる。
【００６２】
方法６００は、有効データをＦＰＷチップからＦＳＷチップにコピーするステップ（段階６６０）を含む。いくつかの実現例では、コピー動作中、ＦＰＷチップおよびＦＳＷチップは、ガベージコレクションを実行して、有効データおよび空き空間をそれぞれ統合することができる。たとえば、ＮＡＮＤフラッシュストレージデバイスは、まず、有効データおよび空き空間がそれぞれＦＳＷチップの実質的に連続したそれぞれのメモリ空間を占めるように、有効データをＦＰＷチップからＦＳＷチップにコピーすることができる。ＮＡＮＤフラッシュストレージデバイスは、有効データおよび空き空間がそれぞれＦＰＷチップの実質的に連続したそれぞれのメモリ空間を占めるように、有効データをＦＳＷチップからＦＰＷチップにコピーバックすることができる。ＮＡＮＤフラッシュストレージデバイスは、空き空間が占めるＦＰＷチップおよびＦＳＷチップのメモリ空間を消去することができる。段階６６０のコピー動作は、段階６２０および６３０のバッファリング動作と重なり合う期間中に実行することができる。また、コピー動作の一部として現在書込動作を実行していないＦＰＷおよびＦＳＷのいずれかによって読取コマンドを受信して実行することができる。このように、段階６６０のコピー動作は、段階６４０および６５０の読取動作と重なり合う期間中にも実行することができる。
【００６３】
方法６００は、受信したデータの書き込みおよび有効データのコピーに続いて、第１のストレージＮＡＮＤフラッシュチップをＲＯとして指定し、第２のストレージＮＡＮＤフラッシュチップをＰＷチップとして指定し、第１のバッファＮＡＮＤフラッシュチップをＦＳＷチップとして指定し、第２のバッファＮＡＮＤフラッシュチップをＳＷチップとして指定するステップ（段階６７０）を含む。方法６００のこれらの段階は、さらなるデータおよび読取コマンドがＩ／Ｏバスを介して受信されると繰り返すことができる。いくつかの実現例では、各々の特定のＮＡＮＤフラッシュチップが果たす役割は循環し得て、それぞれのＮＡＮＤフラッシュチップがそれぞれの時点でそれぞれのバッファリングおよび記憶機能を実行する。
【００６４】
図７は、例示的な実現例に係る、ウェアレベリングのために循環式ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイス７５０の例のブロック図である。ＮＡＮＤフラッシュストレージデバイス７５０は、Ｉ／Ｏバス７３０を介して受信した読取および書込コマンドを処理するためのコントローラ７６０を含む。コントローラ７６０は、ＲＡＭ７６５を含んでもよく、またはメモリバスを介してＲＡＭ７６５と通信してもよい。コントローラ７６０は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、マイクロコントローラまたはマイクロプロセッサなどのプログラマブルロジックを含み得る。コントローラ７６０は、ＮＡＮＤフラッシュストレージデバイス７５０と一体であってもよく、またはＮＡＮＤフラッシュストレージデバイス７５０の外側にあってもよい。ＮＡＮＤフラッシュストレージデバイス７５０は、ＮＡＮＤフラッシュチップ７７０ａ〜７７０ｆ（まとめて「ＮＡＮＤフラッシュチップ７７０」）を含む。いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス７５０は、より多くのまたはより少ないＮＡＮＤフラッシュチップ７７０を含んでもよい。いくつかの実現例では、ＮＡＮＤフラッシュストレージデバイス７５０は、ＲＡＭ７６５を使用して、Ｉ／Ｏバス７３０を介して受信したデータがＮＡＮＤフラッシュチップ７７０のうちの１つ以上に書き込まれている間にこのデータをバッファリングすることができる。ＮＡＮＤフラッシュストレージデバイス７５０は、バッファリングに使用されるＮＡＮＤフラッシュチップ７７０を時折変化させることによってウェアレベリングを利用することができる。たとえば、動作の第１の段階の間は、ＮＡＮＤフラッシュチップ７７０ａおよび７７０ｂは、ＮＡＮＤバッファとしての役割を果たすことができ、コントローラ７６０は、データを各ＮＡＮＤバッファに順番に書き込む。ＮＡＮＤフラッシュストレージデバイス７５０の動作の例については、図８を参照して以下でより詳細に説明する。
【００６５】
図８は、例示的な実現例に係る、ウェアレベリングを利用する循環式ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスの動作８００の例を示す。これらの動作は、上記のＮＡＮＤフラッシュストレージデバイス７５０などのＮＡＮＤフラッシュストレージデバイスによって実行することができる。動作８００は、入来データをＮＡＮＤフラッシュチップ７７０ａおよび７７０ｃに書き込みながら、ガベージコレクションによりデータをＮＡＮＤフラッシュチップ７７０ｄからＮＡＮＤフラッシュチップ７７０ｂにコピーして、その後、ＮＡＮＤフラッシュチップ７７０ｄにコピーバックする段階８１０を含む。動作８００は、入来データをＮＡＮＤフラッシュチップ７７０ｂおよび７７０ｄに書き込みながら、ガベージコレクションによりデータをＮＡＮＤフラッシュチップ７７０ｅからＮＡＮＤフラッシュチップ７７０ｃにコピーして、その後、ＮＡＮＤフラッシュチップ７７０ｅにコピーバックする段階８２０を含む。動作８００は、入来データをＮＡＮＤフラッシュチップ７７０ｃおよび７７０ｅに書き込みながら、ガベージコレクションによりデータをＮＡＮＤフラッシュチップ７７０ｆからＮＡＮＤフラッシュチップ７７０ｄにコピーして、その後、ＮＡＮＤフラッシュチップ７７０ｆにコピーバックする段階８３０を含む。各動作８００の間、二次書込および将来的な二次書込ＮＡＮＤフラッシュチップ７７０がバッファＮＡＮＤフラッシュチップであると考えられ、バッファ８８０枠によって示されている。各ＮＡＮＤフラッシュチップ７７０が現在実行している動作は、頭字語によって示されている。「ＰＷ」は、「一次書き込み」を意味し、ＮＡＮＤフラッシュチップ７７０が現在データを受信して書込動作を実行していることを示す。「ＳＷ」は、「二次書き込み」を意味し、ＮＡＮＤフラッシュチップ７７０がバッファＮＡＮＤフラッシュチップのうちの１つとして現在データを受信して書込動作を実行していることを示す。「ＦＰＷ」は、「将来的な一次書き込み」を意味し、ＮＡＮＤフラッシュチップ７７０がそのデータを将来的な二次書込チップにコピーすることによって一次書込チップとして将来的なサービスに備えていることを示す。「ＦＳＷ」は、「将来的な二次書き込み」を意味し、ＮＡＮＤフラッシュチップ７７０がＳＷバッファＮＡＮＤフラッシュチップとして将来的なサービスに備えてＦＰＷチップからデータを受信していることを示す。「ＲＯ」は、「リードオンリ」を意味し、コントローラ７６０がＲＯ  ＮＡＮＤフラッシュチップ７７０に読取動作を実行するように求めるのみであることを示す。これらの符号は、任意であるに過ぎず、動作８００の所与の段階でのさまざまなチップの機能を説明する目的でのみ割り当てられている。各チップの下の符号および利用可能なＮＡＮＤフラッシュチップ７７０を循環するバッファ８８０枠によって示されるように、動作８００の各段階の間に、各ＮＡＮＤフラッシュチップ７７０の役割は変化し得る。
【００６６】
段階８１０の間は、ＮＡＮＤフラッシュチップ７７０ａがＳＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｂがＦＳＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｃがＰＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｄがＦＰＷチップとしての役割を果たし、残りのＮＡＮＤフラッシュチップがＲＯチップとしての役割を果たす。入来データは、ＮＡＮＤフラッシュチップ７７０ａおよび７７０ｃ、すなわちＳＷチップおよびＰＷチップ、にそれぞれ書き込まれる。一方、ガベージコクレションにより、データはＮＡＮＤフラッシュチップ７７０ｄからＮＡＮＤフラッシュチップ７７０ｂに、すなわちＦＰＷチップからＦＳＷチップに、それぞれコピーされ、その後、ＮＡＮＤフラッシュチップ７７０ｂにコピーバックされる。段階８１０の間は、バッファ８８０は、ＮＡＮＤフラッシュチップ７７０ａおよび７７０ｂを含む。ＮＡＮＤフラッシュチップ７７０ｂは、ＮＡＮＤフラッシュチップ７７０ｄからデータのコピーを受信するため、少なくとも部分的に読取動作の実行には利用できない可能性があり、コピー動作に関連付けられない読取または書込動作を実行することをコントローラ７６０によって肯定的に防止することができる。ガベージコレクションは、コピー動作中に実行され得る。これは、有効データのみがコピーされ、無効データによって残されるいかなるギャップもこのプロセスで除去されることを意味する。これにより、データ表現がよりコンパクトになり、次の段階で書き込まれる新たなデータのための空間が最後部に残ることになる。いくつかの実現例では、ＮＡＮＤフラッシュチップ７７０ｂにおけるこのコンパクトな形態のデータがＮＡＮＤフラッシュチップ７７０ｄにコピーバックされてもよい。ＮＡＮＤフラッシュチップ７７０ｅおよび７７０ｆ、ならびに不図示のその他のＮＡＮＤフラッシュチップ７７０は、ＲＯチップとしての役割を果たすことができる。適時に、コントローラ７６０は、ＮＡＮＤフラッシュチップ７７０の名称を更新して、動作８００の段階８２０に進むことができる。これは、バッファＮＡＮＤフラッシュチップ７７０ａおよび７７０ｃが一杯または実質的に一杯になったときであってもよく、予め定められた回数の書込動作が実行された後であってもよく、または予め定められた時間間隔の後であってもよい。
【００６７】
段階８１０の間に（段階８２０および８３０の間にも）、ＮＡＮＤフラッシュストレージデバイス７５０は、時折、読取要求を受信してもよい。コントローラ７６０は、要求されたデータがＲＯチップにあるか、ＰＷチップまたはＳＷチップのうちの１つにあるか、ＦＰＷチップまたはＦＳＷチップのうちの１つにあるかに応じて、３つの方法のうちの１つの方法で読取要求を処理してもよい。要求されたデータがＲＯチップにある場合、コントローラ７６０は、単にＲＯチップに対して読取動作を実行して、データを返すことができ、読取動作の実行と干渉したり読取動作の実行を遅延させたりするであろう書込動作は生じない。要求されたデータがＰＷチップまたはＳＷチップにある場合、コントローラ７６０は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＰＷチップまたはＳＷチップのいずれかに対して読取動作を実行することができる。要求されたデータがＦＰＷチップまたはＦＳＷチップにある場合、コントローラ７６０は、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＦＰＷまたはＦＳＷのいずれかに対して読取動作を実行することができる。すなわち、ガベージコレクションによりデータが現在ＦＰＷチップからＦＳＷチップにコピーされている場合、コントローラ７６０は、ＦＳＷチップに対して書込動作を実行しているため、ＦＰＷチップに対して読取動作を実行することができる。データがＦＳＷチップからＦＰＷチップにコピーバックされている場合、コントローラ７６０は、ＦＳＷチップに対して読取動作を実行することができる。このようにして、どのＮＡＮＤフラッシュチップが要求されたデータを含んでいるか、およびどのＮＡＮＤフラッシュチップが書込動作を実行しているかにかかわらず、ＮＡＮＤフラッシュデバイス７５０は、読取動作を書込動作の後ろのキューに入れることによって引き起こされる過度の遅延なしに、要求されたデータを読み取って返すことができる。
【００６８】
段階８２０の間は、ＮＡＮＤフラッシュチップ７７０ｂがＳＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｃがＦＳＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｄがＰＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｅがＦＰＷチップとしての役割を果たし、残りのＮＡＮＤフラッシュチップがＲＯチップとしての役割を果たす。入来データは、ＮＡＮＤフラッシュチップ７７０ｂおよび７７０ｄに書き込まれ、ガベージコレクションにより、データは、ＮＡＮＤフラッシュチップ７７０ｅからＮＡＮＤフラッシュチップ７７０ｃにコピーされ、その後、ＮＡＮＤフラッシュチップ７７０ｅにコピーバックされる。ＮＡＮＤフラッシュチップ７７０ａは、ＲＯチップとして指定され、書込動作からの中断なしに読取動作を実行するように利用可能である。このとき、バッファ８８０は、ＮＡＮＤフラッシュチップ７７０ｂおよび７７０ｃを含む。ＮＡＮＤフラッシュチップ７７０ｃは、以前ＰＷチップとしての役割を果たしていたので、それが含んでいるデータは固有ではない。なぜなら、そのデータは以前に前のＳＷにも書き込まれていたからである。したがって、ＮＡＮＤフラッシュチップ７７０ｃは、動作の次の段階でＳＷとして指定されることに備えて、ＮＡＮＤフラッシュチップ７７０ｅから重複データを受信することができる。コピー動作中に、ＮＡＮＤフラッシュチップ７７０ｃおよび７７０ｅは、ガベージコレクション動作を実行することができる。
【００６９】
段階８３０の間は、ＮＡＮＤフラッシュチップ７７０ｃがＳＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｄがＦＳＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｅがＰＷチップとしての役割を果たし、ＮＡＮＤフラッシュチップ７７０ｆがＦＰＷチップとしての役割を果たし、残りのＮＡＮＤフラッシュチップがＲＯフラッシュチップとしての役割を果たす。入来データは、ＮＡＮＤフラッシュチップ７７０ｃおよび７７０ｅに書き込まれながら、ガベージコレクションにより、データは、ＮＡＮＤフラッシュチップ７７０ｆからＮＡＮＤフラッシュチップ７７０ｄにコピーされて、その後、ＮＡＮＤフラッシュチップ７７０ｆにコピーバックされる。ＮＡＮＤフラッシュチップ７７０ｂは、ＲＯチップとして指定され、書込動作からの中断なしに読取動作を実行するように利用可能である。このとき、バッファ８８０は、ＮＡＮＤフラッシュチップ７７０ｃおよび７７０ｄを含む。ＮＡＮＤフラッシュチップ７７０ｄは、以前ＰＷチップとしての役割を果たしていたので、それが含んでいるデータは固有ではない。なぜなら、そのデータは以前に前のＳＷにも書き込まれていたからである。したがって、ＮＡＮＤフラッシュチップ７７０ｄは、動作の後続の段階でＳＷとして指定されることに備えて、ＮＡＮＤフラッシュチップ７７０ｆから重複データを受信することができる。
【００７０】
さらなる段階は、このようにして無期限に進行して、利用可能なＮＡＮＤフラッシュチップ７７０の一部または全ての間で摩耗を分散させることができる。これらの動作を実行する際、ＮＡＮＤフラッシュストレージデバイス７５０は、データの各受信ページをＮＡＮＤフラッシュチップ７７０に二度書き込むため、受ける摩耗の量が二倍になる。しかし、摩耗が多くのＮＡＮＤフラッシュチップ７７０にわたって均一に分散されると、このさらなる摩耗の量は、許容できるものになり得る。
【００７１】
図９は、例示的な実現例に係る、ウェアレベリングのための循環式ＮＡＮＤバッファを有するＮＡＮＤフラッシュストレージデバイスを使用する方法９００の例を示すフローチャートである。たとえば、方法９００は、図７を参照して上記したＮＡＮＤフラッシュストレージデバイス７５０によって実行することができる。方法９００は、書込動作を実行することによって引き起こされる摩耗を分散させて、書込動作を少数のＮＡＮＤフラッシュチップに集中させることによって引き起こされ得る故障を回避するために、利用可能なＮＡＮＤフラッシュチップを循環して、各々を順番にバッファＮＡＮＤチップとして指定することができる。方法９００は、第１のＮＡＮＤフラッシュチップを二次書込（ＳＷ）チップとして指定し、第２のＮＡＮＤフラッシュチップを将来的な二次書込（ＦＳＷ）チップとして指定し、第３のＮＡＮＤフラッシュチップを一次書込（ＰＷ）チップとして指定し、第４のＮＡＮＤフラッシュチップを将来的な一次書込（ＦＰＷ）チップとして指定するステップ（段階９１０）を含む。方法９００は、入力／出力（Ｉ／Ｏ）バスを介してデータを受信するステップ（段階９２０）を含む。方法９００は、各チップへの書込動作が時間的に重ならないように、受信したデータをＰＷチップおよびＳＷチップに連続的に書き込むステップ（段階９３０）を含む。方法９００は、Ｉ／Ｏバスを介して読取コマンドを受信するステップ（段階９４０）を含む。方法９００は、読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＮＡＮＤフラッシュチップからデータを読み取るステップ（段階９５０）を含む。方法９００は、有効データをＦＰＷチップからＦＳＷチップにコピーするステップ（段階９６０）を含む。方法９００は、受信したデータの書き込みおよび有効データのコピーに続いて、第１のＮＡＮＤフラッシュチップをリードオンリとして指定し、第２のＮＡＮＤフラッシュチップをＳＷチップとして指定し、第３のＮＡＮＤフラッシュチップをＦＳＷチップとして指定し、第４のＮＡＮＤフラッシュチップをＰＷチップとして指定するステップ（段階９７０）を含む。
【００７２】
方法９００は、第１のＮＡＮＤフラッシュチップをＳＷチップとして指定し、第２のＮＡＮＤフラッシュチップをＦＳＷチップとして指定し、第３のＮＡＮＤフラッシュチップをＰＷチップとして指定し、第４のＮＡＮＤフラッシュチップをＦＰＷチップとして指定するステップ（段階９１０）を含む。これらの指定については、図８を参照して上記している。
【００７３】
方法９００は、Ｉ／Ｏバスを介してデータを受信するステップ（段階９２０）を含む。段階９２０は、上記の段階３１０および６１０と同様である。
【００７４】
方法９００は、各チップへの書込動作が時間的に重ならないように、受信したデータをＰＷチップおよびＳＷチップに連続的に書き込むステップ（段階９３０）を含む。段階９３０は、上記の段階３２０および６２０と同様である。いくつかの実現例では、方法９００は、段階９５０に進む前にＰＷチップおよびＳＷチップが一杯または実質的に一杯になるまで段階９２０の受信動作および段階９３０の書込動作を実行し続けてもよい。下記の段階９４０および９５０の動作は、段階９２０および９３０の動作と同時に実行することができる。
【００７５】
方法９００は、Ｉ／Ｏバスを介して読取コマンドを受信するステップ（段階９４０）を含む。段階９４０は、上記の段階３３０および６４０と同様である。
【００７６】
方法９００は、読取コマンドを受信したことに応答して、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＮＡＮＤフラッシュチップからデータを読み取るステップ（段階９５０）を含む。段階９５０は、上記の段階３４０および６５０と同様である。実際には、要求されたデータは、ＲＯチップ、ＰＷチップもしくはＳＷチップのうちの１つ、またはＦＰＷチップもしくはＦＳＷチップのうちの１つにあってもよい。コントローラは、要求されたデータがどこにあるかに応じて、３つの方法のうちの１つの方法で読取要求を処理してもよい。要求されたデータがＰＷチップまたはＳＷチップにある場合、コントローラは、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＰＷチップまたはＳＷチップのいずれかに対して読取動作を実行することができ、方法６００は次の段階に進むことができる。要求されたデータがＲＯチップにある場合、コントローラは、単にＲＯチップに対して読取動作を実行してデータを返すことができ、読取動作の実行と干渉したり読取動作の実行を遅延させたりするであろう書込動作は生じない。要求されたデータがＦＰＷチップまたはＦＳＷチップにある場合、コントローラは、読取動作が書込動作の後ろのキューに入れられないように、現在書込動作を実行していないＦＰＷまたはＦＳＷのいずれかに対して読取動作を実行することができる。すなわち、ガベージコレクションによりデータが現在ＦＰＷチップからＦＳＷチップにコピーされている場合、コントローラ４６０は、ＦＳＷチップに対して書込動作を実行しているため、ＦＰＷチップに対して読取動作を実行することができる。データがＦＳＷチップからＦＰＷチップにコピーバックされている場合、コントローラは、ＦＳＷチップに対して読取動作を実行することができる。このようにして、どのＮＡＮＤフラッシュチップが要求されたデータを含んでいるか、およびどのＮＡＮＤフラッシュチップが書込動作を実行しているかにかかわらず、ＮＡＮＤフラッシュデバイスは、読取動作を書込動作の後ろのキューに入れることによって引き起こされる過度の遅延なしに、要求されたデータを読み取って返すことができる。このように、段階９４０および９５０は、段階９２０および９３０と同時に進むことができ、読取動作は、ゆっくりとした書込動作の後ろのキューに入れられることなく迅速に処理することができる。段階９２０〜９５０は、さらなるデータおよび読取コマンドがＩ／Ｏバスを介して受信されると繰り返すことができる。
【００７７】
方法９００は、有効データをＦＰＷチップからＦＳＷチップにコピーするステップ（段階９６０）を含む。後の段階でバッファＮＡＮＤチップとしての役割を果たすように２つの新たなＮＡＮＤフラッシュチップを準備するために、方法９００は、データを一方のＮＡＮＤフラッシュチップから別のＮＡＮＤフラッシュチップにコピーすることができる。コピー元はＦＰＷチップとして指定され得て、コピー先はＦＳＷチップとして指定され得る。いくつかの実現例では、コピー動作は双方向であってもよい。すなわち、ＦＰＷチップおよびＦＳＷチップの各々が他方のデータの複製を含むようにデータをＦＰＷチップとＦＳＷチップとの間で調和させることができる。コピー動作中、ＦＳＷチップおよびＦＰＷチップは、ガベージコレクションを実行して、データおよび無効なまたはもはや必要でないデータの空き空間を統合することができる。段階９６０のコピー動作は、段階９２０および９３０のバッファリング動作と重なり合う期間中に実行することができる。また、読取コマンドは、コピー動作の一部として現在書込動作を実行していないＦＰＷおよびＦＳＷのいずれかによって受信され実行されることができる。このようにして、段階９６０のコピー動作は、段階９４０および９５０の読取動作と重なり合う期間中にも実行することができる。
【００７８】
方法９００は、受信したデータの書き込みおよび有効データのコピーに続いて、第１のＮＡＮＤフラッシュチップをリードオンリチップとして指定し、第２のＮＡＮＤフラッシュチップをＳＷチップとして指定し、第３のＮＡＮＤフラッシュチップをＦＳＷチップとして指定し、第４のＮＡＮＤフラッシュチップをＰＷチップとして指定するステップ（段階９７０）を含む。ＦＰＷチップおよびＦＳＷチップは、重複データを含むと、それぞれＰＷチップおよびＳＷチップとして引き継ぐ準備ができていることになる。バッファＮＡＮＤフラッシュチップが依然として書込動作を処理している間にコピー動作を実行することができる限り、ＮＡＮＤフラッシュストレージデバイス７７０は、遅延なしに指定を切り換えて、書込帯域幅の大幅なロスなしに書込動作を実行し続けることができる。
【００７９】
いくつかの実現例では、循環が継続し得る。たとえば、コントローラ７６０は、第５のＮＡＮＤフラッシュチップ７７０ｅをＦＰＷチップとして指定することができる。コントローラ７６０は、各チップへの書込動作が時間的に重ならないように、Ｉ／Ｏバス７３０を介して受信した第２のデータをＰＷチップおよびＳＷチップに書き込むことができる。コントローラ７６０は、第２の有効データをＦＰＷチップからＦＳＷチップにコピーすることができる。そして、第２の受信したデータの書き込みおよび第２の有効データのコピーに続いて、コントローラ７６０は、第２のＮＡＮＤフラッシュチップをリードオンリとして指定し、第３のＮＡＮＤフラッシュチップをＳＷチップとして指定し、第４のＮＡＮＤフラッシュチップをＦＳＷチップとして指定し、第５のＮＡＮＤフラッシュチップをＰＷチップとして指定し、第６のＮＡＮＤフラッシュチップをＦＰＷチップとして指定することができる。
【００８０】
本明細書は多くの具体的な実現例の詳細を含んでいるが、これらは、いずれの発明または請求の範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実現例に特有の特徴を説明するものとして解釈されるべきである。別々の実現例の文脈で本明細書に記載されている特定の特徴は、単一の実現例において組み合わせて実現することも可能である。逆に、単一の実現例の文脈で記載されているさまざまな特徴は、複数の実現例において別々にまたは任意の好適な部分的な組み合わせで実現することも可能である。さらに、特徴は、特定の組み合わせで動作するものとして上記され、最初にそのように記載されているかもしれないが、記載されている組み合わせの中の１つ以上の特徴は、場合によってはこの組み合わせから除外されてもよく、記載されている組み合わせは、部分的な組み合わせまたは部分的な組み合わせの変形例を対象としてもよい。
【００８１】
「または」への言及は、「または」を使用して記載されているいずれの語も、記載されている語のうちの１つ、２つ以上および全てのいずれも意味するように包括的なものとして解釈され得る。「第１の」、「第２の」、「第３の」などの表示は、必ずしも順序を意味することを意図しているわけではなく、一般に、同様または類似の項目または要素同士を区別するために使用しているに過ぎない。
【００８２】
本開示に記載されている実現例に対するさまざまな変形例は、当業者に容易に明らかになり、本明細書に定義されている一般的原理は、本開示の精神または範囲から逸脱することなく他の実現例に適用されてもよい。したがって、特許請求の範囲は、本明細書に示されている実現例に限定されるよう意図されるものではなく、本開示、原理、および本明細書に開示されている新規の特徴と首尾一貫した最も広い範囲を付与されることが意図されている。
【図１】
2020524839.tif 000003
【図２】
2020524839.tif 000004
【図３】
2020524839.tif 000005
【図４】
2020524839.tif 000006
【図５】
2020524839.tif 000007
【図６】
2020524839.tif 000008
【図７】
2020524839.tif 000009
【図８】
2020524839.tif 000010
【図９】
2020524839.tif 000011
【国際調査報告】
2020524839.tif 000012
2020524839.tif 000013
2020524839.tif 000014