(57)【要約】      （修正有）【課題】ホストからのタイムスタンプを用いて記憶デバイスのバックグラウンド・リフレッシュを行うための方法を提供する。【解決手段】方法は、ホストからタイムスタンプを受信する段階と、タイムスタンプを記憶デバイスに記憶する段階と、データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する前記タイムスタンプに基づいて、記憶デバイスの１つまたは複数のブロックに記憶されたデータの保持時間を判断する段階とを伴う。保持時間が閾値を超えていると判断したことに応答して、記憶デバイスは、記憶デバイスの１つまたは複数の他のブロックにデータを移す。このことは、リフレッシュ書き込みをホストからの動作とインタリーブすることを含み得る。【選択図】図５
2019106174.tif 000002
【特許請求の範囲】
【請求項１】
ホストからタイムスタンプを受信する段階と、
前記タイムスタンプを記憶デバイスに記憶する段階と、
データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する前記タイムスタンプに基づいて、前記記憶デバイスの前記１つまたは複数のブロックに記憶された前記データの保持時間を判断する段階と、
前記保持時間が閾値を超えていると判断したことに応答して、前記記憶デバイスの１つまたは複数の他のブロックに前記データを移す段階と
を備える方法。
【請求項２】
前記ホストから前記タイムスタンプを受信する段階は、前記記憶デバイスの電源をオンにしたこと、または、前記記憶デバイスが低電力状態を終えたことに応答したものである、請求項１に記載の方法。
【請求項３】
前記ホストから前記タイムスタンプを受信する段階は更に、前記記憶デバイスの電源をオンにした後、または、前記低電力状態を終えた後の最初の入出力（Ｉ／Ｏ）コマンドに応答したものである、請求項２に記載の方法。
【請求項４】
複数のスーパーブロックのそれぞれについて、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、前記所与のスーパーブロックに書き込まれた前記データの前記保持時間とを記憶する段階とを更に備える、請求項１に記載の方法。
【請求項５】
前記記憶デバイスの電源をオンにしたこと、または、前記記憶デバイスが低電力状態を終えたことに応答して、前記複数のスーパーブロックに関するデータ保持時間をスキャンする段階と、
前記複数のスーパーブロックうちの１つまたは複数の前記保持時間が閾値を超えていると判断したことに応答して、前記複数のスーパーブロックうちの前記１つまたは複数から１つまたは複数の他のスーパーブロックに前記データを移す段階と
を更に備える、請求項４に記載の方法。
【請求項６】
低電力状態になったこと、または、前記記憶デバイスの電源をオフにしたことに応答して、前記複数のスーパーブロックのそれぞれについて、前記タイムスタンプおよび前記保持時間を前記記憶デバイスの不揮発性記憶装置に記憶する段階と、
前記低電力状態を終えたこと、または、前記記憶デバイスの電源をオンにしたことに応答して、前記複数のスーパーブロックのそれぞれについて、前記不揮発性記憶装置から前記記憶デバイスの揮発性メモリに前記タイムスタンプおよび前記保持時間をロードする段階と
を更に備える、請求項４に記載の方法。
【請求項７】
前記複数のスーパーブロックのそれぞれについて、前記タイムスタンプおよび前記保持時間を前記不揮発性記憶装置に記憶する段階は、前記複数のスーパーブロックのそれぞれについて、前記記憶デバイスの１つまたは複数のシングルレベルセル（ＳＬＣ）スーパーブロックに前記タイムスタンプおよび前記保持時間を記憶する段階を含む、請求項６に記載の方法。
【請求項８】
前記データを移す段階は、
前記１つまたは複数のブロックをキューに配置して、前記１つまたは複数のブロックに記憶されたデータの保持時間が前記閾値を超えていることを示す段階と、
前記ホストからのアクセスを前記キューからの書き込みとインタリーブする段階と
を含む、請求項１に記載の方法。
【請求項９】
前記１つまたは複数のブロックを前記キューに配置する段階は、前記１つまたは複数のブロックを特定し、かつ、前記１つまたは複数のブロックに記憶されたデータの保持時間が前記閾値を超えていることを示す、フラグを設定する段階を含む、請求項８に記載の方法。
【請求項１０】
前記方法は、前記ホストからの前記アクセスを前記キューからの前記書き込みとインタリーブするための比率を調整する段階を更に備え、
前記インタリーブするための比率は、前記キュー内のブロックの保持時間、前記ホストからのコマンドの数、リフレッシュされるべきブロックの数、およびリフレッシュを行うための空き領域のうちの１つまたは複数に基づいたものである、請求項９に記載の方法。
【請求項１１】
前記タイムスタンプを受信する段階は、前記ホストからのベンダーユニークコマンドを介して前記タイムスタンプを受信する段階を含む、請求項１に記載の方法。
【請求項１２】
データを記憶するための不揮発性記憶装置と、論理回路とを備えるソリッドステートドライブ（ＳＳＤ）であって、前記論理回路は、
ホストからタイムスタンプを受信することと、
前記タイムスタンプを前記不揮発性記憶装置に記憶することと、
データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する前記タイムスタンプに基づいて、前記不揮発性記憶装置の前記１つまたは複数のブロックに記憶された前記データの保持時間を判断することと、
前記保持時間が閾値を超えていると判断したことに応答して、前記不揮発性記憶装置の１つまたは複数の他のブロックに前記データを移すこととを行う、ＳＳＤ。
【請求項１３】
前記ホストからの前記タイムスタンプの前記受信は、前記ＳＳＤの電源をオンにしたこと、または、前記ＳＳＤが低電力状態を終えたことに応答したものである、請求項１２に記載のＳＳＤ。
【請求項１４】
前記ホストからの前記タイムスタンプの前記受信は更に、前記ＳＳＤの電源をオンにした後、または、前記ＳＳＤが低電力状態を終えた後の最初の入出力（Ｉ／Ｏ）コマンドに応答したものである、請求項１２に記載のＳＳＤ。
【請求項１５】
前記論理回路は更に、複数のスーパーブロックのそれぞれについて、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、前記所与のスーパーブロックに書き込まれた前記データの前記保持時間とを記憶する、請求項１２に記載のＳＳＤ。
【請求項１６】
前記論理回路は更に、前記ＳＳＤの電源をオンにしたこと、または、前記ＳＳＤが低電力状態を終えたことに応答して、前記複数のスーパーブロックに関するデータ保持時間をスキャンすることと、
前記複数のスーパーブロックうちの１つまたは複数の前記保持時間が閾値を超えていると判断したことに応答して、前記複数のスーパーブロックうちの前記１つまたは複数から１つまたは複数の他のスーパーブロックに前記データを移すことと
を行う、請求項１５に記載のＳＳＤ。
【請求項１７】
前記ＳＳＤは、揮発性メモリを更に備え、
低電力状態になったこと、または、前記ＳＳＤの電源をオフにしたことに応答して、前記論理回路は、前記複数のスーパーブロックのそれぞれについて、前記不揮発性記憶装置に前記タイムスタンプおよび前記保持時間を記憶し、
前記低電力状態を終えたこと、または、前記ＳＳＤの電源をオンにしたことに応答して、前記論理回路は、前記複数のスーパーブロックのそれぞれについて、前記不揮発性記憶装置から前記揮発性メモリに前記タイムスタンプおよび前記保持時間をロードする、請求項１５に記載のＳＳＤ。
【請求項１８】
前記低電力状態になったこと、または、前記ＳＳＤの電源をオフにしたことに応答して、前記論理回路は、前記複数のスーパーブロックのそれぞれについて、前記記憶デバイスの１つまたは複数のシングルレベルセル（ＳＬＣ）スーパーブロックに前記タイムスタンプおよび前記保持時間を記憶する、請求項１７に記載のＳＳＤ。
【請求項１９】
前記データを移すための前記論理回路は、前記１つまたは複数のブロックをキューに配置して、前記１つまたは複数のブロックに記憶されたデータの保持時間が前記閾値を超えていることを示すことと、
前記ホストからのアクセスを前記キューからの書き込みとインタリーブすることと
を行う、請求項１５に記載のＳＳＤ。
【請求項２０】
前記１つまたは複数のブロックを前記キューに配置するための前記論理回路は、前記１つまたは複数のブロックを特定し、かつ、前記１つまたは複数のブロックに記憶されたデータの保持時間が前記閾値を超えていることを示す、フラグを設定する、請求項１９に記載のＳＳＤ。
【請求項２１】
前記論理回路は、前記ホストからの前記アクセスを前記キューからの前記書き込みとインタリーブするための比率を調整し、
前記インタリーブするための比率は、前記キュー内のブロックの保持時間、前記ホストからのコマンドの数、リフレッシュされるべきブロックの数、およびリフレッシュを行うための空き領域のうちの１つまたは複数に基づいたものである、請求項１９に記載のＳＳＤ。
【請求項２２】
前記論理回路は、前記ホストからのベンダーユニークコマンドを介して前記タイムスタンプを受信する、請求項１２に記載のＳＳＤ。
【請求項２３】
前記論理回路は、前記ＳＳＤのファームウェアを有する、請求項１２に記載のＳＳＤ。
【請求項２４】
コンピュータに請求項１から１１の何れか一項に記載の方法を実行するための動作を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本記述は概してソリッドステートドライブなどの記憶デバイスに関するものであり、より具体的な記述は、記憶デバイスにおけるシステムタイムスタンプを用いたバックグラウンドデータ・リフレッシュ技術に関するものである。
【背景技術】
【０００２】
データの記憶にソリッドステートドライブ（ＳＳＤ）を使用するシステムには、モバイル区分、クライアント区分およびエンタープライズ区分にまたがる動向がある。ＮＡＮＤ  ＳＳＤなどのソリッドステートドライブとしては、不揮発性記憶装置が挙げられる。不揮発性記憶装置とは、デバイスへの電力が遮断されてもその状態が確定的である記憶装置のことを指す。しかしながら、不揮発性記憶デバイスであってもデータ保持力は限られており、不揮発性記憶デバイスに記憶されたデータがリフレッシュされる必要があり得る。データをリフレッシュできないと、不揮発性記憶装置に記憶されたデータを消失することになり得る。
【図面の簡単な説明】
【０００３】
以下の説明には、本発明の実施形態の実装例として挙げられた例示を含む図の考察が含まれる。図面は例として解されるべきであり、限定として解されるべきではない。本明細書で使用されているように、１つまたは複数の「実施形態」または「例」への言及は、本発明の少なくとも１つの実装に含まれる特定の機能、構造および／または特性について説明するものと解されるべきである。このように、本明細書に出現する「一実施形態では」または「一例によると」などの語句は、本発明の様々な実施形態および実装について説明するものであり、必ずしも全てが同一の実施形態を指しているわけではない。しかしながら、それらは必ずしも相互排他的であるというわけでもない。 
【０００４】
【図１】一例によると、バックグラウンドデータ・リフレッシュが実装され得るＳＳＤを備えたシステムのブロック図を示している。
【０００５】
【図２】ホストからＳＳＤへのシステムクロック情報の通信の例を示したブロック図である。
【０００６】
【図３Ａ】ＳＳＤのスーパーブロックの例を示している。
【０００７】
【図３Ｂ】正確なデータリフレッシュを可能とするためにＳＳＤが記憶し得る情報の例を示した表である。
【０００８】
【図４Ａ】記憶デバイスがシステムクロック情報を受け取ることができるかどうかを含めて、どの機能が所与の記憶デバイスによりサポートされているかを特定するのに使用され得るＩｄｅｎｔｉｆｙ  Ｃｏｎｔｒｏｌｌｅｒデータ構造の例を示している。
【０００９】
【図４Ｂ】システムクロック情報がどのようにしてホストからＳｅｔ  Ｆｅａｔｕｒｅコマンドを介して記憶デバイスに送信され得るかという例を示した表である。
【００１０】
【図５】システムタイムスタンプを用いてバックグラウンド・リフレッシュを行うための方法の例を示したフローチャートである。
【００１１】
【図６】システムタイムスタンプを用いてバックグラウンド・リフレッシュを行うために記憶デバイスにより行われる方法の例を示したフローチャートである。
【００１２】
【図７】バックグラウンド・リフレッシュを可能にするシステムタイムスタンプを提供するためにホストにより行われる方法の例を示したフローチャートである。
【００１３】
【図８】バックグラウンド・リフレッシュレートを設定するための疑似コードの例である。
【００１４】
【図９】一例によると、バックグラウンドデータ・リフレッシュが実装され得るＳＳＤを備えたコンピューティングデバイスの例のブロック図である。
【００１５】
【図１０】一例によると、バックグラウンドデータ・リフレッシュが実装され得るＳＳＤを備えたモバイルデバイスの例のブロック図である。
【００１６】
以下はある特定の詳細および実装の説明である。これらは、以下に説明する実施形態のうちの幾つかまたは全てを示し得る図の説明を含むと共に、本明細書で提示する発明の概念の他の潜在的な実施形態または実装についても考察している。 
【発明を実施するための形態】
【００１７】
本明細書では、ソリッドステートドライブ（ＳＳＤ）などの不揮発性記憶デバイスにおけるバックグラウンドデータ・リフレッシュ技術について説明する。バックグラウンドデータをリフレッシュするには、保持関連のエラーまたは不具合を避けるために記憶デバイスに記憶された「コールドデータ」をリフレッシュする必要がある。コールドデータとは、記憶デバイスに記憶されているアクセス頻度の少ないデータのことである。コールドデータは、記憶デバイスの最大保持力に近いか、またはそれを超える一定の期間にわたってアクセスされることなく、記憶デバイスに記憶され得る。データをリフレッシュするには、データ消失を防ぎ得る別の場所にデータを書き込む（または同じ場所にデータを書き換える）必要がある。 
【００１８】
サーバで使用されるＳＳＤなどのエンタープライズ・ソリッドステートドライブ（ＳＳＤ）は、内部タイムクロックに依存するリフレッシュ技術を実装している。エンタープライズＳＳＤが常時電源オンになっており、かつ、データがＳＳＤブロックに書き込まれたときのタイムクロックを維持するのは普通のことである。しかしながら、モバイルなどの消費者デバイスで使用されるＳＳＤは、継続的に電源オンになっておらず、電力消費量を削減してバッテリ寿命を保つために低電力状態になることが多い。電源オフになるか、または最低電力モードにあると、記憶デバイスのコンポーネントは、タイムクロックを維持するためのコンポーネントを含めて、ほとんどが電源オフになっている。故に、ＳＳＤに記憶されたデータをリフレッシュするための既存の技術は、モバイルなどの消費者ＳＳＤにとっては有効でない。
【００１９】
内部クロックに依存する代わりにシステムクロックを使用するバックグラウンドデータ・リフレッシュ技術によって、記憶装置が電源オフになるか、または低電力状態にあるとしても、記憶デバイスに記憶されたコールドデータのリフレッシュが可能となり得る。一例によると、記憶デバイスは、データがスーパーブロックに書き込まれたときを示すために当該データを記憶しているスーパーブロックごと（または、ブロックまたはページなどの粒度ごと）にタイムスタンプ情報を維持する。記憶デバイスが電源オフまたは低電力状態になるとき、記憶デバイスは不揮発性媒体（ＮＶＭ）にタイムスタンプ情報を保存する。記憶デバイスが電源オンになるか、または、低電力状態を終えた後、記憶デバイスは、不揮発性記憶装置からタイムスタンプ情報をロードし、更には現在時刻を示すホストからタイムスタンプを受信する。既存の技術と対照的に、記憶デバイスは、デバイスが電源オフになったか、または一定の期間にわたって低電力状態にあったとしても、ホストから受信されたこの現在のタイムスタンプを使用して、データを記憶しているスーパーブロックのそれぞれにおけるデータの保持時間を正確に判断し得る。保持時間が閾値を超えている場合は、記憶デバイスがデータをリフレッシュし得る。一例によると、記憶デバイスは、それらのスーパーブロックをキューに入れること、および、当該キューからの書き込みをホストトラフィックとインタリーブすることにより、データをリフレッシュする。このように、ホストからのシステムクロックを使用するリフレッシュ技術によって、モバイルなどの消費者デバイスにおける保持時間の正確な判断が可能となり、データの消失が減少し得る。
【００２０】
一例によると、図１は、バックグラウンドデータ・リフレッシュが実装され得るＳＳＤを備えたシステムのブロック図を示している。システム１００は、ホスト１１０と結合されたソリッドステートドライブ（ＳＳＤ）１０２を含む。 
【００２１】
ホスト１１０は、ＳＳＤ１０２に接続するホスト・ハードウェア・プラットフォームを表す。ホスト１１０は、ＣＰＵ（中央処理ユニット）１２０などのプロセッサをホストプロセッサとして含む。ＣＰＵ１２０は、ＳＳＤ１０２に記憶されたデータにアクセスして当該データを読み出すか、または記憶装置１２２にデータを書き込むという要求を生成する任意のホストプロセッサを表す。係るプロセッサとしては、単一またはマルチコアのプロセッサ、コンピューティングデバイス用の一次プロセッサ、グラフィックプロセッサ、周辺プロセッサ、補足的もしくは補助的なプロセッサ、またはこれらの組み合わせが挙げられ得る。ホスト１１０はチップセット１１４を含み、チップセット１１４は、ＣＰＵ１２０と、ＳＳＤ１０２を含む、システム１００の他のコンポーネントとの間のデータの流れを制御または管理し得るハードウェアコンポーネントを表す。例えば、チップセット１１４は、ＳＳＤ１０２へのアクセスを可能にするための相互接続回路および相互接続論理回路を含み得る。一例によると、チップセット１１４は記憶コントローラを含み、当該記憶コントローラは、ＳＳＤ１０２内のコントローラ１３０から切り離されたホスト側のコントローラである。他の例を挙げると、図１はＳＳＤへのアクセスを制御するための論理回路を含むホスト内のチップセットを示している。とはいえ、ホスト１１０はチップセットを含まないこともあるし、もしそれがチップセットを含む場合は、記憶コントローラがチップセットから独立していることもある。一例によると、チップセット、記憶コントローラまたはその両方は、ＣＰＵ１２０と統合される。ホスト１１０は、システムクロックを生成するためのクロック生成装置１３２も含む。一例によると、クロック生成装置１３２は、プラットフォーム１００の動作を同期するのに使用できるようタイミング信号を作り出すための共振回路および増幅器などの回路を含む。
【００２２】
ホストは、オペレーティングシステム１１２、ファイルシステム１２４、基本入出力システム（ＢＩＯＳ）１１８、ドライバ１１６などの、ハードウェアで実行されるファームウェアおよびソフトウェア、並びに、他のファームウェアおよびソフトウェアも含む。システムが電源オンになると、ＢＩＯＳ１１８は通常、ハードウェアを初期化してオペレーティングシステム１１２をロードする役割を担う。オペレーティングシステム１１２は通常、システム１００における動作の管理、調整およびスケジューリングと、システムのリソースの共有とを担う。ファイルシステム１２４は、ソフトウェア、ファームウェアまたはその両方とインタラクトして、ＳＳＤ１０２にアクセスする。例えば、ホスト１１０は、オペレーティングシステム１１２およびファイルシステム１２４がそれを介してＳＳＤにアクセスし得るＳＳＤドライバを含み得る。ＳＳＤドライバの一例としては、インテル（登録商標）ラピッド・ストレージ・テクノロジー（ＲＳＴ）ドライバが挙げられる。システム１００は、ホストオペレーティングシステムとデータを記憶するためのＳＳＤとを備えたコンピュータシステムとして示されているが、システム１００は、ＳＰＩ（シリアル・ペリフェラル・インタフェース）記憶装置もしくはＳＰＩバスに接続された記憶装置、ＬＳＭベース（ログ構造化統合ベース）のキーバリュー・ソリューション、または３次元クロスポイントメモリベースのソリューションなどの記憶システムを代わりに含み得る。
【００２３】
ＳＳＤ１０２は、データを記憶するための不揮発性記憶装置１２２（別名：不揮発性媒体（ＮＶＭ））を含むソリッドステートドライブを表す。ＳＳＤ１０２は、ＰＣＩエクスプレス（ＰＣＩｅ）、シリアル・アドバンスト・テクノロジー・アタッチメント（ＡＴＡ）、パラレルＡＴＡおよび／またはユニバーサルシリアルバス（ＵＳＢ）インタフェースを用いてプロセッサに接続されたフラッシュベースのドライブであり得る。記憶装置１２２は、ＮＡＮＤ、ＮＯＲフラッシュ、相変化メモリ（ＰＣＭ）、スイッチを備えた相変化メモリ（ＰＣＭＳ）、または抵抗変化型メモリなどの不揮発性記憶媒体のうちの１つまたは複数を含み得る。データは、シングルレベルセル（ＳＬＣ）、トリプルレベルセル（ＴＬＣ）、クアッドレベルセル（ＱＬＣ）および／またはマルチレベルセル（ＭＬＣ）の形式で記憶され得る。ＴＬＣ、ＱＬＣおよび／またはＭＬＣのセルまたはブロックは通常、ユーザデータを記憶するために使用される。ＳＬＣのセルまたはブロックは、概して記憶密度の低下を犠牲にしてより速いアクセス速度を有するものであり、通常はユーザデータを記憶することがなく、通常はホストからアクセスできない。ＳＬＣのセルまたはブロックは、ＳＳＤの動作に関する「システムデータ」を記憶するために、ＳＳＤにより使用され得る。 
【００２４】
不揮発性記憶装置１２２に加えて、ＳＳＤ１０２は、ＤＲＡＭ１０８（などの揮発性メモリ）も含み得る。ＤＲＡＭ１０８は、ソリッドステートドライブ１０２が電源オンの（例えば、動作可能な）状態でデータを記憶し得る揮発性メモリを含む。ＤＲＡＭ１０８は、例えば、ＬＰＤＤＲ３（低電力デュアルデータレートのバージョン３、初版はＪＥＤＥＣ（電子機器技術評議会）によりリリース、ＪＥＳＤ２０９−３Ｂ、２０１３年８月、ＪＥＤＥＣ）またはＬＰＤＤＲ４（低電力ダブルデータレート（ＬＰＤＤＲ）のバージョン４、ＪＥＳＤ２０９−４、初版は２０１４年８月にＪＥＤＥＣにより公開）といったタイプのＤＲＡＭを含み得る。ＤＲＡＭは、電子機器技術評議会（ＪＥＤＥＣ）により公表されたダブルデータレート（ＤＤＲ）ＳＤＲＡＭ）のＪＥＳＤ７９Ｆ、ＤＤＲ２  ＳＤＲＡＭのＪＥＳＤ７９−２Ｆ、ＤＤＲ３  ＳＤＲＡＭのＪＥＳＤ７９−３Ｆ、またはＤＤＲ４  ＳＤＲＡＭのＪＥＳＤ７９−４Ａ（これらの基準は、ｗｗｗ．ｊｅｄｅｃ．ｏｒｇに掲載）といった基準に準拠したものであり得る。他の揮発性メモリも使用され得る。ＤＲＡＭを含まないＳＳＤ（例えば、「ＤＲＡＭレス」ＳＳＤ）もある。係る一例によると、ＳＳＤは、通常ＳＲＡＭであるＳＳＤコントローラメモリ（図示せず）を含み得る。ＤＲＡＭ１０８は、論理対物理の間接参照表または他の係る情報など、ＳＳＤ１０２の動作に関するデータを記憶するために使用され得る。 
【００２５】
ＳＳＤ１０２は、記憶装置１２２へのアクセスを制御するためのコントローラ１３０も含む。一例によると、コントローラ１３０は、記憶装置１２２へのインタフェースを含み、ホスト１１０へのインタフェースを含む。コントローラ１３０は、記憶装置１２２への書き込みおよび記憶装置１２２からの読み出しを制御するためのハードウェア論理回路である。コントローラ１３０は、シリアルＡＴＡコントローラまたは統合ドライブエレクトロニクス・コントローラなどの、インタフェースに接続された特定用途向け集積回路（ＡＳＩＣ）コントローラデバイスであり得る。別の例を挙げると、コントローラ１３０は、プロセッサなどの処理回路（図示せず）を含む。一例によると、コントローラ１３０は、単一の集積回路チップ上のシステムオンチップ（ＳｏＣ）に含まれ得る。
【００２６】
ＳＳＤ１０２はファームウェア１０４も含む。ファームウェア１０４は、変換、ガベージコレクション、ウェアレベリングといった機能など、ＳＳＤ１０２の動作および最適化のための様々な機能を実行し得る。一例によると、ファームウェア１０４は、フラッシュ変換レイヤ（ＦＴＬ）を含んでよく、当該ＦＴＬは、ファイルシステム１２４から受信された要求の論理ブロックアドレス（ＬＢＡ）など、論理アドレスの物理アドレス空間を特定する間接参照を提供するための論理回路を含む。 
【００２７】
示されている例において、ファームウェア１０４は、記憶装置１２２に記憶されたデータが消失または破損しないことを保証すべくバックグラウンド・リフレッシュを行うためのリフレッシュ論理回路１４０を含む。ＳＳＤにおいてデータをリフレッシュするための既存の技術は通常、どのデータをリフレッシュすべきかを判断するために、ＳＳＤ「通電時間」またはＳＳＤの内部にあるクロック（コントローラ１３０のＡＳＩＣタイムクロックなど）に依存する。ＳＳＤが頻繁に電源オフまたは低電力状態になるモバイルデバイスなどの幾つかのシステムにとって、係る既存の技術は、データをいつリフレッシュすべきかを判断するのに有効でない。例えば、ＳＳＤ「通電時間」は、ＳＳＤが何時間にわたって電源オンの状態にあるかを示す、ＳＳＤ（例えば、ＳＳＤのレジスタ、または、ホストからはアクセスできないＳＳＤのブロックなど、ＳＳＤの別の場所）に記憶された積算総数である。ＳＳＤ「通電時間」に依存するリフレッシュ技術では、データが記憶装置１２２に保持される時間が考慮されることはなく、デバイスが電源オフになるか、または低電力状態にある時間が考慮される。故に、係る技術では、データのリフレッシュ頻度が不十分となり、データが消失することになり得る。同様に、ＳＳＤ１０２に位置するタイムクロックに依存するリフレッシュ技術は、十分に正確でないこともある。なぜなら、クロックを含む回路は、ＳＳＤ１０２が電源オフになるか、または最低電力状態にあるとき、電源オフになるからである。
【００２８】
しかしながら、既存の技術とは違って、ＳＳＤファームウェア１０４は、ホストからの現在のタイムスタンプに基づいて、データがいつ各スーパーブロックに書き込まれたかに関する情報を維持することにより、ＳＳＤ記憶装置１２２に記憶されたデータの保持時間を正確に追跡し得る。保持時間を正確に追跡することにより、ＳＳＤファームウェア１０４は、データ消失を避けるためにデータがいつリフレッシュされるべきかをより正確に判断し得る。例えば、図２は、ホストからＳＳＤへのシステムクロック情報の通信の例を示したブロック図である。図２は、ＳＳＤ２０４と結合されたＳＳＤドライバ２０２を示している。ＳＳＤドライバは、図１に示されているホスト１１０のＳＳＤドライバ１２８と同一または同様であってよく、ＳＳＤ２０４は、図１のＳＳＤ１０２と同一または同様であってよい。ブロック２０６、２０８および２１０は、ホストからＳＳＤにタイムスタンプを通信する方法の動作を表す。示されている例によると、動作２０６、２０８および２１０は、電源がオンになったか、または低電力状態を終えた後に起こる。低電力状態は「スリープ状態」であり得る。一例によると、低電力状態は、ＳＳＤ２０４のコンポーネントの大多数（ＳＳＤコントローラ、ＤＲＡＭおよびＮＶＭなどの、基板上のディスクリートコンポーネントを含む）がオフになっている状態である（例えば、不揮発性メモリエクスプレス（ＮＶＭｅ）プロトコルでのＰＳ４、および、ＰＣＩエクスプレス（ＰＣＩｅ）プロトコルでのＬ１またはＬ１．２）。ＮＶＭｅプロトコルは、２０１７年５月１日に公開されたＮＶＭｅ規格のバージョン１．３またはＮＶＭｅ規格の別のバージョンに記載のプロトコルを指し得る。ＰＣＩｅプロトコルは、２０１０年１１月１０日に公開されたＰＣＩエクスプレス（登録商標）Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎのバージョン３．０またはＰＣＩエクスプレス（登録商標）Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎの別のバージョンに記載のプロトコルを指し得る。
【００２９】
ＳＳＤ２０４が電源オンとなった後、または、ＳＳＤ２０４が低電力状態を終えた後、ＳＳＤ２０４はブロック２０６で、ＳＳＤが初期化されてホストコマンドを受け取れる状態になっている旨をＳＳＤドライバ２０２に通知する。一例によれば、（動作２０８で）最初のＩ／Ｏコマンドを送信すると（例えば、送信した直後に）、ＳＳＤドライバ２０２は、動作２１０でＳＳＤ２０４にシステムクロック情報を（例えば、タイムスタンプの形態で）送信する。別の例を挙げると、ＳＳＤドライバ２０２は、最初のＩ／Ｏコマンドの前にＳＳＤへシステムクロック情報を送信し得る。一例によれば、デバイス（ＳＳＤ）準備のためのＰＣＩｅ／ＮＶＭｅプロトコルハンドシェイクを完了すると、システムクロック情報がそれを介して送信されるコマンドが、記憶ドライバによりトリガされる。ひとたびＳＳＤ２０４がホストからシステムクロック情報を受信すると、ＳＳＤは、ホストからの当該システムクロック情報を使用して、保持時間を正確に判断することができ、閾値を超えることにより消失または破損する恐れがあるデータをリフレッシュすることができる。例えば、ＳＳＤは、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプを記憶し得る。ホストからの現在のタイムスタンプに対して、データがいつ所与のスーパーブロックに書き込まれたかを示す当該タイムスタンプに基づいて、ＳＳＤは、当該スーパーブロックに関する保持時間を判断および記憶することもできる。一例によると、ＳＳＤが（例えば、ＳＳＤのＤＲＡＭが電源オンおよび動作可能となっている状態で）動作している間、ＳＳＤはタイムスタンプ情報および保持時間をＳＳＤの揮発性メモリに記憶し得る。
【００３０】
先ほど簡単に述べたように、ＳＳＤは、（例えば、書き込みが行われたスーパーブロックごとに）スーパーブロックの粒度に関する係る情報を追跡し得る。スーパーブロック（別名：バンド）とは、あらゆるプレーン、あらゆるダイにまたがるブロックのことである。図３Ａは、クアッドプレーンの４ＮＡＮＤダイＳＳＤに関するスーパーブロックの例を示している。図３Ａに示されている例によると、ＳＳＤは４つの異なるダイ（例えば、ダイ０、１、２および３）を有し、各ダイは４つのプレーン（例えば、０、１、２および３）を有し、各プレーンは複数のブロック（例えば、ブロック０〜ｎ）を有する。このように、示されている例によると、スーパーブロック０は、各ダイの各プレーンにブロック０を含む。それに応じて、一例によると、ＳＳＤは、各スーパーブロック（例えば、スーパーブロック０−ｎ）に関するタイムスタンプおよび保持時間を追跡し得る。図３Ｂは、正確なデータリフレッシュを可能とするためにＳＳＤが記憶し得る情報を示す表である。図３Ｂの表に示されている情報（例えば、タイムスタンプおよび保持時間）は、ＳＳＤが動作している間は揮発性メモリに記憶されてよく、ＳＳＤが電源オフになるか、または低電力モード（例えば、ＤＲＡＭが動作可能でない低電力モード）にある場合は不揮発性記憶装置に記憶されてよい。例えば、図１を参照すると、ＳＳＤ１０２のＤＲＡＭ１０８は、ＳＳＤが動作しているときにタイムスタンプ情報および保持時間情報を記憶し得る。ＤＲＡＭレスＳＳＤでは、タイムスタンプ情報および保持時間情報がＳＳＤコントローラメモリなどの別の場所に記憶され得る。次に、低電力モードまたは電源オフになる前、ＳＳＤ１０２は、ＳＳＤ記憶装置１２２にタイムスタンプ情報および保持時間情報を記憶し得る。係る一例によると、ＳＳＤ１０２は、ＳＳＤ記憶装置１２２のＳＬＣブロック（例えば、通常はホストから直接アクセスできない、予約されたＳＬＣブロックまたは「システム」ＳＬＣブロック）にタイムスタンプ情報および保持時間情報を記憶する。図３Ｂを再び参照すると、タイムスタンプおよび保持時間は秒単位であるが、他の時間粒度（例えば、分、時または日などの時間単位）も使用され得ることに留意されたい。同様に、図３Ｂの表は、スーパーブロックごとのタイムスタンプが記憶される例を示しているが、他の粒度も使用され得る。例えば、ＳＳＤは、各ブロック、または書き込みが行われたブロックもしくはスーパーブロックのみ、または他の粒度に関するタイムスタンプ情報を記憶し得る。 
【００３１】
示されている例によると、表の各項目は、スーパーブロックに書き込みが行われた時間を示す書き込みタイムスタンプを含む。ＳＳＤはまた、ホスト上のタイムクロックに基づいて現在のタイムスタンプを記憶する。図２との関連で説明されている例によると、ホストは（例えば、電源がオンになった後または低電力モードを終えた後に）ＳＳＤが初期化されてコマンドを受け取れる状態になっているという通知をＳＳＤから受信したことに応答して、ＳＳＤに現在のタイムスタンプを送信する。図３Ｂの表は（スーパーブロックごとに）現在のタイムスタンプを複数回分示しているが、ＳＳＤは、スーパーブロックごとにというよりはむしろ一度だけ、現在のタイムスタンプを記憶し得ることに留意されたい。一例によると、ＳＳＤは、スーパーブロックごとのデータ保持時間も記憶する。一例によると、データ保持時間は、現在のタイムスタンプから書き込みタイムスタンプを減算することにより計算される。 
【００３２】
現在のタイムスタンプを再び参照して、一例によると、ホストからＳＳＤに現在のタイムスタンプを通信するためにプロトコルが確立される。ＳＳＤファームウェアおよびＳＳＤドライバの両方が準拠するプロトコルを有することにより、ＳＳＤドライバはＳＳＤの予想と一致したタイムスタンプを提供することができ、ＳＳＤはホストから受信されたタイムスタンプを正しく解釈することができる。図４Ａおよび図４Ｂは、ホストからＳＳＤにタイムスタンプを通信するためのプロトコルの幾つかの機能の例を示している。 
【００３３】
図４Ａは、記憶デバイスがシステムクロック情報を受け取ることができるかどうかを含めて、どの機能が所与の記憶デバイスによりサポートされているかを特定するのに使用され得るＩｄｅｎｔｉｆｙ  Ｃｏｎｔｒｏｌｌｅｒデータ構造の例を示している。データ構造４００Ａは、不揮発性メモリエクスプレス（ＮＶＭｅ）などの記憶プロトコルといったプロトコルに使用され得る。ＮＶＭｅは、どの能力および設定が記憶コントローラ（例えば、図１のＳＳＤコントローラ１３０）に適用されるかを特定するためにホストが記憶デバイスに送信するＩｄｅｎｔｉｆｙコマンドを定義する。当該Ｉｄｅｎｔｉｆｙコマンドの受信に応答して、記憶デバイスは、１つまたは複数の機能に関する情報を含むデータ構造（例えば、Ｉｄｅｎｔｉｆｙ  Ｃｏｎｔｒｏｌｌｅｒデータ構造４００Ａ）を返すことになる。データ構造４００Ａでは、ベンダー固有の機能のために様々なバイトが予約される。示されている例によると、ベンダー固有の機能のためにバイト４０９５：３０７２が予約される。当該バイトは、システムクロック情報を受け取る機能を記憶デバイスがサポートしているかどうか特定するための１バイトを含む。バイト３０７２のビット０を論理１に設定することにより、記憶デバイスは、当該機能がサポートされていることを示し、当該ビットを論理０に設定することにより、記憶デバイスは、当該機能がサポートされていないことを示す。逆の規定も使用され得る（例えば、ある機能がサポートされていることを論理０が示し得る）。（「Ｏ／Ｍ」列の「Ｍ」で示されているように）バイトは必須のものとして示されているが、他の例によるとバイトは任意選択であり得る。
【００３４】
（例えば、データ構造４００Ａのバイト３０７２で示されているように）システムクロック情報を受け取る機能を記憶デバイスがサポートしている場合は、電源がオンになった後、または、低電力状態を終えた後などに、ある所定の回数にわたって、ホストが記憶デバイスに当該システムクロック情報を通信し得る。例えば、ホストはベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅコマンドを介してシステムクロック情報を通信し得る。 
【００３５】
図４Ｂは、システムクロック情報がどのようにしてホストからＳｅｔ  Ｆｅａｔｕｒｅコマンドを介して記憶デバイスに送信され得るかという例を示した表である。例えば、表４００Ｂは、ＮＶＭｅ  Ｓｅｔ  Ｆｅａｔｕｒｅｓコマンドの機能識別子を示している。ホストが記憶デバイスにＳｅｔ  Ｆｅａｔｕｒｅｓコマンドを送信する前に、ホストは、システムクロックにより示される通りに現在時刻を反映するよう（例えば、ＳＳＤドライバ１２８などの記憶ドライバを介して）機能識別子Ｃ０ｈを設定する。現在のタイムスタンプは、所定の日時から経過した秒数（または、ミリ秒（ｍｓ）、分または時などの時間粒度）として定義され得る。他のタイムスタンプ形式も、当該形式がプロトコルにより定義されて、ホストおよび記憶デバイスの両方に用いられる限りは、適用可能である。示されている例によると、システムクロック情報機能は、ベンダー固有の機能に含まれる（例えば、示されている例によると、ベンダー固有の機能識別子がバイトＣ０ｈ−ＦＦｈを含む）。しかしながら、他の機能識別子または他のコマンドも使用され得る。ホストは次に、機能識別子を含むコマンドを記憶デバイスに送信する。記憶デバイスは、上記のように、また以下でより詳細に説明するように、データ保持時間を判断するために現在のタイムスタンプを記憶し得る。
【００３６】
図５から図７は、システムタイムスタンプを用いてバックグラウンド・リフレッシュを行うための方法の例を示したフローチャートである。図５は、システムの観点から見たフローチャートである。当該フローチャートは、ホストおよび記憶デバイスの両方により行われる動作を含む。図６は、記憶デバイスの観点から見たフローチャートである。図７は、ホストの観点から見たフローチャートである。上述のように、不揮発性媒体においてデータをリフレッシュするための既存の技術は、頻繁に電源オフまたは低電力状態になる記憶デバイスにとっては有効でないことがある。図５から図７の方法では、データ保持時間をより正確に判断するためにホストからのタイムスタンプが使用され、故にデータリフレッシュの向上が可能となり得る。 
【００３７】
図５を参照すると、方法５００は、動作５０２でＳＳＤの電源がオンになるところから始まる。代わりに、方法５００は、ＳＳＤが低電力状態を終えた（例えば、起動する、またはより高い電力状態になる）ところからでも始まり得る。ＳＳＤは、図１のＳＳＤ１０２と同一または同様であり得る。ＳＳＤファームウェアは次に、動作５０４で、不揮発性記憶装置からＤＲＡＭにタイムスタンプ表をロードする。例えば、図１を参照すると、ＳＳＤファームウェア１０４は、ＳＳＤ記憶装置１２２からＤＲＡＭ１０８にタイムスタンプ表をロードし得る。ＳＳＤがＤＲＡＭを含まないような一例によると、ＳＳＤファームウェアは、ＳＳＤ記憶装置１２２からＳＳＤコントローラメモリにタイムスタンプ表をロードし得る。タイムスタンプ表をロードすることは、１つまたは複数のスーパーブロック（などの粒度）に関する書き込みタイムスタンプをＳＳＤ記憶装置１２２からロードすることを含み得る。ホスト側のＳＳＤドライバは次に、動作５０６で、最初のホストＩ／Ｏコマンドに関する現在のタイムスタンプを送信する。例えば、ＳＳＤドライバ１２８は、図４Ｂに示されているようなベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンドを介してタイムスタンプを送信し得る。係る一例によると、ＳＳＤドライバは、最初のホストＩ／Ｏコマンドの直後（例えば、最初の書き込みまたは読み出しなどのＩ／Ｏコマンドの後）に、ベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンドを介してタイムスタンプを送信する。一例によると、ホストは、確定的な動作が可能となるよう、最初のＩ／Ｏコマンドの直後に（例えば、最初のＩ／ＯコマンドとベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンドとの間にコマンドを挟むことなく）タイムスタンプ情報を送信する。別の例を挙げると、ＳＳＤドライバは、最初のＩ／Ｏコマンドの前にタイムスタンプを送信することができ、タイムスタンプが最初の書き込みコマンドの後に送信される場合は、最初のＩ／ＯコマンドとベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンドとの間に１つまたは複数のコマンドが挟まれ得る。ベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンド以外の他のコマンドも使用され得る。
【００３８】
ＳＳＤファームウェアは次に、動作５０８にて、表内のスーパーブロックごとの保持時間でタイムスタンプ表を更新する。例えば、ＳＳＤファームウェア１０４は、現在のタイムスタンプから書き込みタイムスタンプを減算することにより、スーパーブロックごとのデータ保持時間を計算し得る。一例によると、ＳＳＤファームウェアは、この計算されたスーパーブロックごとのデータ保持時間を記憶する。
【００３９】
１つまたは複数のスーパーブロックに関する保持時間を判断した後、ＳＳＤファームウェアは次に、動作５１０で、保持時間が閾値を超えているかどうか確認し得る。当該閾値は、ＳＳＤの特性に依存する所定の数であり得る。閾値は静的（例えば、ＳＳＤの一生を通じて同じ閾値が使用される）であってもよいし、動的（例えば、ＳＳＤが使用されるにつれて、閾値が経時的に更新され得る）であってもよい。保持時間が閾値を超えている場合は、５１０で「ＹＥＳ」の方に分岐する。ＳＳＤファームウェアは次に、動作５１２で、当該スーパーブロックをバックグラウンドデータ・リフレッシュ（ＢＤＲ）キューに移し、データが移されるべきであることを示すスーパーブロック用フラグ（例えば、ＢＤＲフラグ）を設定する。当該キューは、ファームウェア、ハードウェアまたはこれらの組み合わせで実装され得る。一例によると、スーパーブロックをＢＤＲキューに移すには、スーパーブロック用ＢＤＲフラグを設定する必要があり得る。フラグは１つのビットまたは複数のビットを含み得る。所与のスーパーブロックにあるデータが移されるべきであることを示すフラグを設定するには、当該スーパーブロックにあるデータが移されるべきであることを示す論理１または論理０または別の値にフラグを設定する必要があり得る。別の例を挙げると、スーパーブロックをＢＤＲキューに移すには、更にまたは代わりに、当該スーパーブロックを特定するための何らかの情報をキューデータ構造に記憶する必要があり得る。ＢＤＲフラグが設定（例えば、データが移されるべきであることを示す値に設定）されている場合は、５１４で「ＹＥＳ」の方に分岐する。ＳＳＤファームウェアは、５１６で、ホスト動作をＢＤＲ書き込みとインタリーブして、ＢＤＲキュー内のスーパーブロックから新しいスーパーブロックに有効データを移す。これらの動作のうちの１つまたは複数は、ガベージコレクションルーチンにより行われ得る。当該ガベージコレクションルーチンは通常、ＳＳＤファームウェア（例えば、図１のファームウェア１０４の一部）のルーチンである。例えば、ホスト動作のＢＤＲ書き込みとのインタリーブ、および、当該ＢＤＲ書き込みの実施は、ガベージコレクションルーチンにより行われ得る。
【００４０】
所与のスーパーブロックの保持時間が閾値を超えていない場合は、５１０で「ＮＯ」の方に分岐する。次にスーパーブロックがキューに配置されることはなく、ＢＤＲフラグが設定されることはなく（５１４で「ＮＯ」の方に分岐し）、動作５１８でＳＳＤが進行中のホスト動作の処理を継続する。このように、一例によると、電源を切って入れ直すたびに、ＳＳＤファームウェアは、スーパーブロックごとのデータ保持時間をスキャンする。保持時間が保持時間閾値を超えている場合は、スーパーブロックがＢＤＲキューに配置されて、データを移すガベージコレクションルーチンにより選択されることとなり、ＢＤＲフラグがファームウェアにより設定される。ファームウェアはＢＤＲフラグを確認し、もし設定されていれば、ファームウェアがガベージコレクションルーチンをトリガし、ＢＤＲキュー内のブロックが、ガベージコレクションにおいて優先され得る。ＳＳＤが低電力状態または電源オフになりそうな場合は、ＳＳＤファームウェアがＳＳＤ記憶装置１２２にタイムスタンプ情報を記憶し、その結果、ＳＳＤが起動するか、またはその電源がオンになるときに当該情報が取り出され得る。
【００４１】
一例によると、図６もまた、ホストからのタイムスタンプを用いてバックグラウンド・リフレッシュを行う方法のフローチャートである。図６の方法６００は、記憶デバイスにより行われる（例えば、図１のファームウェア１０４などのＳＳＤファームウェアにより行われる）。方法６００は、動作６０２でホスト（例えば、図１のホスト１１０）からタイムスタンプを受信するところから始まる。例えば、ファームウェアは、ホストからのタイムスタンプを含むベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンドなどのコマンドを受信し得る。ＳＳＤファームウェアは次に、動作６０４で、当該タイムスタンプを記憶デバイスに記憶する。例えば、ファームウェアはＳＳＤのＤＲＡＭ（例えば、図１のＳＳＤ１０２のＤＲＡＭ１０８）に当該タイムスタンプを記憶し得る。ホストから当該タイムスタンプを受信した後、ファームウェアは、動作６０６で、書き込みタイムスタンプに対する当該タイムスタンプに基づいて、記憶デバイスの１つまたは複数のブロックに記憶されたデータの保持時間を判断する。当該書き込みタイムスタンプは、当該データがいつ当該１つまたは複数のブロック（例えば、ブロックまたはスーパーブロックなどの記憶領域粒度）に書き込まれたかを示す。ファームウェアは、当該１つまたは複数のブロックの当該保持時間もＤＲＡＭに記憶し得る。当該保持時間が閾値を超えている場合は、ファームウェアが、動作６０８で、記憶デバイスの１つまたは複数の他のブロックに当該データを移す。例えば、ファームウェア（例えば、図１のリフレッシュ論理回路１４０）は、リフレッシュ書き込みをホスト動作とインタリーブして、ホスト動作のバックグラウンドにあるデータをリフレッシュし得る。 
【００４２】
一例によると、図７は、システムクロックに基づく現在のタイムスタンプを記憶デバイスに伝送する方法のフローチャートである。図７の方法７００は、ホスト（例えば、図１のホスト１１０のＳＳＤドライバ１２８）により行われ得る。方法７００は、動作７０２で、記憶デバイス（例えば、図１のＳＳＤ１０２）がコマンドを受信できる状態になっていることを示す通知をホストが当該記憶デバイスから受信するところから始まる。ホストは次に、動作７０４で、ベンダーユニークのＳｅｔ  Ｆｅａｔｕｒｅｓコマンドを介して、ホストのシステムクロックに基づく現在のタイムスタンプ情報を記憶デバイスに送信する。例えば、ホストは、図４Ｂで指定されているように、コマンドを介してタイムスタンプを送信し得る。しかしながら、記憶デバイスにタイムスタンプを提供するためには、他のコマンドが使用されてもよい。記憶デバイスは、当該現在のタイムスタンプを記憶し、当該現在のタイムスタンプに基づいて、記憶デバイスのブロックに記憶されたデータの保持時間を判断し得る。
【００４３】
このように、図５から図７の方法は、ホストから記憶デバイスに現在のタイムスタンプを伝送するための方法と、当該現在のタイムスタンプを用いて、記憶デバイスに記憶されたデータの保持時間を判断するための方法と、当該保持時間に基づいてバックグラウンド・リフレッシュを行うための方法とを示している。先ほど簡単に述べたように、データのリフレッシュは、リフレッシュ動作がホスト動作とインタリーブされ得るという意味で、バックグラウンドにおいて行われ得る。しかしながら、リフレッシュに起因して行わるべき書き込みの量と、ホスト動作の量とは、著しく異なり得る。故に、一例によると、記憶デバイス（例えば、ＳＳＤファームウェア）は、ホスト動作に対するリフレッシュ書き込みの比率を動的に判断し得る。例えば、リフレッシュ書き込みとホスト動作とをインタリーブするための比率は、キュー内のブロックの保持時間、ホストからのコマンドの数、リフレッシュされるべきブロックの数、および、リフレッシュを行うための空き領域（例えば、空のブロックの数）のうちの１つまたは複数に基づいたものであり得る。
【００４４】
図８は、バックグラウンド・リフレッシュレートを設定するための疑似コード８００の例である。疑似コード８００では、リフレッシュ用のバックグラウンド書き込みレートが、以下の変数、すなわち、ソースブロックから移すべき有効なユニットの割合、および、移動先として利用できる空のブロックの割合に基づいて異なることになる。ソースブロックから移すべき有効なユニットの割合は、ブロック内の有効なユニットをブロック内のユニットの総数で割ることにより求められる（ここで、ユニットの総数は、有効なブロックおよび無効なブロックの両方を含む）。空のブロックの割合は、現在の空のブロックを、割り当てられた空のブロックの総数で割ることにより求められる。（行８０２で）有効なユニットの割合が２５％未満であれば、または、空のブロックの割合が７５％よりも高ければ、それは、書き込むべきデータが減ったか、または、書き込みに利用できる領域が増えたことの表れである。そのため、行８０４から行８１０で、バックグラウンド書き込み動作に対するホスト動作の比率が４：１などの比較的高い比率に設定され得る。（行８１２で）有効なユニットの割合が５０％未満であるか、または、空のブロックの割合が５０％よりも高ければ、行８１４から行８１８で、ファームウェアがバックグラウンド書き込み動作に対するホスト動作の比率を２：１に設定し得る。（行８２０で）有効なユニットの割合が７５％未満であれば、または、空のブロックの割合が２５％よりも高ければ、行８２２から行８２６で、バックグラウンド書き込み動作に対するホスト動作の比率が１：２に設定され得る。（行８２８で）それ以外ならば、行８３０から行８３４で、バックグラウンド書き込み動作に対するホスト動作の比率が１：４に設定され得る。これらの比率は例であり、性能目標を達成してデータの破損を防ぐべくバックグラウンド・リフレッシュを行うためには、他の比率も使用され得る。例えば、４：１よりも高い比率（例えば、８：１、１６：１、３２：１またはこれよりも高い比率）が使用されてもよいし、１：４よりも低い比率（例えば、１：８、１：１６、１：３２またはこれよりも低い比率）が使用されてもよい。
【００４５】
図９は、バックグラウンドデータ・リフレッシュ技術を実装する不揮発性記憶デバイスを含むコンピューティングシステムの例のブロック図である。本明細書の任意の例によると、システム９００は、コンピューティングデバイスを表し、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、サーバ、ゲームもしくはエンターテイメントの制御システム、またはスマートフォンなどの電子デバイスであり得る。
【００４６】
システム９００はプロセッサ９１０を含み、プロセッサ９１０は、システム９００のために処理、動作管理および命令の実行を行う。プロセッサ９１０は、任意のタイプのマイクロプロセッサ、中央処理ユニット（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）もしくは処理コアなど、システム９００のために処理を行う処理ハードウェア、またはプロセッサの組み合わせを含み得る。プロセッサ９１０は、システム９００の全体的な動作を制御し、１つまたは複数のプログラム可能な汎用マイクロプロセッサもしくは専用マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、プログラム可能なコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはプログラム可能な論理デバイス（ＰＬＤ）など、または係るデバイスの組み合わせであってもよいし、それを含んでもよい。
【００４７】
一例によると、システム９００は、プロセッサ９１０に結合されたインタフェース９１２を含む。インタフェース９１２は、メモリサブシステム９２０またはグラフィックインタフェース・コンポーネント９４０などの、帯域幅のより大きな接続を必要とする、システムコンポーネント用のより高速なインタフェースまたは高スループットなインタフェースを表し得る。インタフェース９１２は、独立型コンポーネントであってもよいし、プロセッサダイに統合されてもよい、インタフェース回路を表す。インタフェース９１２は、回路としてプロセッサダイに統合されてもよいし、コンポーネントとしてシステムオンチップに統合されてもよい。もし存在するなら、グラフィックインタフェース９４０は、システム９００のユーザに視覚表示を提供するためのグラフィックコンポーネントとインタフェースする。グラフィックインタフェース９４０は、独立型コンポーネントであってもよいし、プロセッサダイまたはシステムオンチップに統合されてもよい。一例によると、グラフィックインタフェース９４０は、ユーザに出力を提供する高細精度（ＨＤ）表示を駆動し得る。一例によると、当該表示はタッチスクリーン表示を含み得る。 
【００４８】
メモリサブシステム９２０は、システム９００のメインメモリを表し、プロセッサ９１０により実行されるべきコード、または、ルーチンの実行に使用されるべきデータ値の記憶装置となる。メモリサブシステム９２０は、リードオンリメモリ（ＲＯＭ）、フラッシュメモリまたは１つまたは複数の種類のＤＲＡＭのようなランダムアクセスメモリ（ＲＡＭ）といったメモリデバイス、または係るデバイスの組み合わせなど、１つまたは複数のメモリデバイス９３０を含み得る。メモリ９３０は、特に、システム９００で命令を実行するためのソフトウェアプラットフォームを提供するオペレーティングシステム（ＯＳ）９３２を記憶およびホストする。更に、アプリケーション９３４は、メモリ９３０にあるＯＳ９３２のソフトウェアプラットフォームで実行され得る。アプリケーション９３４は、１つまたは複数の機能の実行を行うための動作可能な論理回路を独自に有するプログラムを表す。プロセス９３６は、ＯＳ９３２または１つまたは複数のアプリケーション９３４、またはこれらの組み合わせに補助的機能を提供するエージェントまたはルーチンを表す。一例によると、メモリサブシステム９２０はメモリコントローラ９２２を含み、メモリコントローラ９２２は、メモリ９３０へのコマンドを生成および発行するメモリコントローラである。メモリコントローラ９２２は、プロセッサ９１０の物理的部分またはインタフェース９１２の物理的部分であり得ることが解るであろう。例えば、メモリコントローラ９２２は、プロセッサダイまたはシステムオンチップに統合されるなどしてプロセッサ９１０を有する回路に統合された統合メモリコントローラであり得る。 
【００４９】
具体的には示されていないが、システム９００は、メモリバス、グラフィックバス、またはインタフェースバスなどといった１つまたは複数のバスまたはバスシステムをデバイス間に含み得ることが解るであろう。バスなどの信号線が、コンポーネント同士を通信可能にまたは電気的に結合してもよいし、コンポーネント同士を通信可能にかつ電気的に結合してもよい。バスは、物理通信回線、ポイントツーポイント接続、ブリッジ、アダプタまたはコントローラなどの回路、またはこれらの組み合わせを含み得る。バスとしては、例えば、システムバス、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、ＰＣＩエクスプレス（ＰＣＩｅ）、ハイパートランスポートバスもしくはインダストリ・スタンダード・アーキテクチャ（ＩＳＡ）バス、スモール・コンピュータシステム・インタフェース（ＳＣＳＩ）バス、ユニバーサルシリアルバス（ＵＳＢ）または米国電気電子学会（ＩＥＥＥ）基準９９４バスのうちの１つまたは複数が挙げられ得る。 
【００５０】
一例によると、システム９００はインタフェース９１４を含み、インタフェース９１４はインタフェース９１２に結合され得る。インタフェース９１４は、インタフェース９１２よりも低速のインタフェースであり得る。一例によると、インタフェース９１４は、独立型コンポーネントおよび集積回路を含み得るインタフェース回路を表す。一例によると、複数のユーザインタフェース・コンポーネントまたは周辺コンポーネント、またはその両方が、インタフェース９１４に結合する。ネットワークインタフェース９５０は、１つまたは複数のネットワークを介して遠隔デバイス（例えば、サーバなどのコンピューティングデバイス）と通信する能力をシステム９００に提供する。ネットワークインタフェース９５０は、イーサネット（登録商標）アダプタ、無線相互接続コンポーネント、セルラネットワーク相互接続コンポーネント、またはＵＳＢ（ユニバーサルシリアルバス）などの、有線または無線の標準ベースインタフェースまたはプロプライエタリ・インタフェースを含み得る。 
【００５１】
一例によると、システム９００は、１つまたは複数の入出力（Ｉ／Ｏ）インタフェース９６０を含む。Ｉ／Ｏインタフェース９６０は、ユーザがそれを介してシステム９００とインタラクトする１つまたは複数のインタフェースコンポーネント（例えば、オーディオ、英数字または触覚／タッチなどのインタフェース方式）を含み得る。周辺インタフェース９７０としては、具体的には上述しなかった任意のハードウェアインタフェースが挙げられ得る。周辺機器とは概して、システム９００と従属的に接続するデバイスのことを指す。従属的な接続とは、動作がそこで実行され、かつ、ユーザがそれとインタラクトする、ソフトウェアプラットフォームまたはハードウェアプラットフォーム、またはその両方をシステム９００が提供するような接続のことである。システム９００は電源９０２も含み、電源９０２はシステム９００のコンポーネントに電力を提供する。より具体的に言うと、電源９０２は通常、システム９００のコンポーネントに電力を提供する、システム９００内の１つまたは複数の電力供給装置９０４とインタフェースする。
【００５２】
一例によると、システム９００は、データを不揮発的に記憶するための記憶サブシステム９８０を含む。一例によると、ある特定のシステム実装では、記憶装置９８０の少なくともある特定のコンポーネントがメモリサブシステム９２０のコンポーネントと重複し得る。記憶サブシステム９８０は記憶デバイス９８１を含み、記憶デバイス９８１は不揮発性記憶装置９８４を含む。不揮発性記憶装置９８４は、１つまたは複数の磁気ディスク、ソリッドステートディスクまたは光学ベースのディスク、またはこれらの組み合わせといった、大量のデータを不揮発的に記憶するための任意の従来型媒体であり得る。記憶装置９８４は、コードまたは命令およびデータ９８６を永続的な状態に保つ（すなわち、システム９００への電力が遮断されても値が保持される）。通常はメモリ９３０がプロセッサ９１０に命令を提供する実行メモリまたはオペレーティングメモリであるが、総称的には記憶装置９８４が「メモリ」と見なされ得る。一方で、記憶装置９８４は不揮発性であり、メモリ９３０は揮発性メモリを含み得る（すなわち、システム９００への電力が遮断されるとデータの値または状態が不確定になる）。一例によると、記憶サブシステム９８０は、記憶デバイス９８１とインタフェースするためのホスト側コントローラ９８２と、ホストとインタフェースするための記憶装置側コントローラ９８５とを含む。一例によると、コントローラ９８２は、インタフェース９１４またはプロセッサ９１０の物理的部分であるか、または、プロセッサ９１０およびインタフェース９１４の両方にある回路または論理回路を含み得る。記憶デバイス９８１はファームウェア９８３も含み、ファームウェア９８３は、図１のファームウェア１０４に関して先ほど説明したような様々な機能を実行し得る。一例によると、記憶デバイス９８１は、図１のＳＳＤ１０２と同一または同様であり得る。係る一例によると、記憶デバイス９８１は、本明細書に記載のように、ホストからのタイムスタンプを用いてバックグラウンド・リフレッシュ技術の向上を行う。
【００５３】
図１０は、バックグラウンドデータ・リフレッシュ技術を実装する不揮発性記憶デバイスを含むモバイルデバイスの例のブロック図である。デバイス１０００は、コンピューティングタブレット、携帯電話もしくはスマートフォン、または無線対応電子書籍リーダといったモバイルデバイスなどのモバイル・コンピューティングデバイスを表す。デバイス１０００には概してコンポーネントのうちの幾つかが示されており、係るデバイスのコンポーネントが全て示されているわけではないことが解るであろう。 
【００５４】
デバイス１０００はプロセッサ１０１０を含み、プロセッサ１０１０はデバイス１０００の一次処理動作を行う。プロセッサ１０１０は、マイクロプロセッサ、アプリケーションプロセッサ、マイクロコントローラ、またはプログラム可能な論理デバイスといった処理手段など、１つまたは複数の物理デバイスを含み得る。プロセッサ１０１０により行われる処理動作は、アプリケーションおよびデバイス機能が実行されるオペレーティング・プラットフォームまたはオペレーティングシステムの実行を含む。処理動作としては、人間のユーザまたは他のデバイスによるＩ／Ｏ（入出力）に関する動作、電力管理機能に関する動作、デバイス１０００を別のデバイスに接続することに関連する動作、またはこれらの組み合わせが挙げられる。処理動作としては、オーディオＩ／Ｏまたは表示Ｉ／Ｏなどのインタフェース方式、またはこれらの組み合わせに関連する動作も挙げられ得る。プロセッサ１０１０は、メモリに記憶されたデータを実行し得る。プロセッサ１０１０は、メモリに記憶されたデータの書き込みまたは編集を行い得る。
【００５５】
一例によると、システム１０００は、１つまたは複数のセンサ１０１２を含む。センサ１０１２は、埋め込み型センサ、または外部センサへのインタフェース、またはこれらの組み合わせを表す。センサ１０１２によって、システム１０００が実装される環境またはデバイスの１つまたは複数の状態をシステム１０００が監視または検知することが可能となる。一例によると、１つまたは複数のセンサ１０１２は、プロセッサ１０１０に統合されたフロントエンド回路を介してプロセッサ１０１０に結合する。一例によると、１つまたは複数のセンサ１０１２は、システム１０００の別のコンポーネントを介してプロセッサ１０１０に結合する。 
【００５６】
一例によると、デバイス１０００はオーディオサブシステム１０２０を含み、オーディオサブシステム１０２０は、コンピューティングデバイスにオーディオ機能を提供することと関連付けられたハードウェアコンポーネント（例えば、オーディオハードウェアおよびオーディオ回路）およびソフトウェアコンポーネント（例えば、ドライバ、コーデック）を表す。オーディオ機能は、スピーカー出力またはヘッドフォン出力とマイクロフォン入力とを含み得る。係る機能用のデバイスは、デバイス１０００に統合されてもよいし、デバイス１０００に接続されてもよい。一例によると、ユーザは、プロセッサ１０１０により受信および処理されるオーディオコマンドを提供することによってデバイス１０００とインタラクトする。 
【００５７】
表示サブシステム１０３０は、ユーザに提示するための視覚表示を提供するハードウェアコンポーネント（例えば、表示デバイス）およびソフトウェアコンポーネント（例えば、ドライバ）を表す。一例によると、表示装置は、ユーザがコンピューティングデバイスとインタラクトするための触覚コンポーネントまたはタッチスクリーン要素を含む。表示サブシステム１０３０は、表示インタフェース１０３２を含み、表示インタフェース１０３２は、ユーザに表示を提供するために使用される特定のスクリーンまたはハードウェアデバイスを含む。一例によると、表示インタフェース１０３２は、表示に関連する少なくとも何らかの処理を行うための、プロセッサ１０１０（グラフィックプロセッサなど）から切り離された論理回路を含む。一例によると、表示サブシステム１０３０は、出力および入力の両方をユーザに提供するタッチスクリーンデバイスを含む。 
【００５８】
Ｉ／Ｏコントローラ１０４０は、ユーザとのインタラクションに関連するハードウェアデバイスおよびソフトウェアコンポーネントを表す。Ｉ／Ｏコントローラ１０４０は、オーディオサブシステム１０２０または表示サブシステム１０３０またはその両方の一部であるハードウェアを管理するよう動作し得る。更に、Ｉ／Ｏコントローラ１０４０は、ユーザがそれを介してシステムとインタラクトし得るデバイス１０００に接続する更なるデバイスのための接続ポイントを示している。例えば、デバイス１０００に取り付けられ得るデバイスとしては、マイクロフォンデバイス、スピーカーシステムもしくはステレオシステム、映像システムなどの表示デバイス、キーボードデバイスもしくはキーパッドデバイスといった、カードリーダなどのデバイスのような特定の用途に使用できるＩ／Ｏデバイスが挙げられ得る。 
【００５９】
一例によると、デバイス１０００は、バッテリ電源使用量、バッテリの充電、および省電力動作に関連する機能を管理する電力管理機能１０５０を含む。電力管理機能１０５０は電源１０５２からの電力を管理し、電源１０５２はシステム１０００のコンポーネントに電力を提供する 
【００６０】
メモリサブシステム１０６０は、情報をデバイス１０００に記憶するためのメモリデバイス１０６２を含む。メモリサブシステム１０６０は、不揮発性の（メモリデバイスへの電力が遮断されても状態が変わらない）メモリデバイス、または揮発性の（メモリデバイスへの電力が遮断されると状態が不確定になる）メモリデバイス、またはこれらの組み合わせを含み得る。メモリ１０６２は、アプリケーションデータ、ユーザデータ、音楽、写真または文書などのデータと、システム１０００のアプリケーションおよび機能の実行に関連するシステムデータ（長期的なものか一時的なものかは不問）とを記憶し得る。一例によると、メモリサブシステム１０６０はメモリコントローラ１０６４を含む（メモリコントローラ１０６４は、システム１０００の制御装置の一部と見なされてもよく、場合によってはプロセッサ１０１０の一部と見なされてよい）。メモリコントローラ１０６４は、メモリデバイス１０６２へのアクセスを制御するコマンドを生成および発行するためのスケジューラを含む。 
【００６１】
接続機能１０７０は、デバイス１０００の外部デバイスとの通信を可能とするためのハードウェアデバイス（例えば、無線または有線のコネクタおよび通信ハードウェア、または、有線ハードウェアおよび無線ハードウェアの組み合わせ）およびソフトウェアコンポーネント（例えば、ドライバ、プロトコルスタック）を含む。外部デバイスは、他のコンピューティングデバイス、無線アクセスポイントまたは基地局などの別個のデバイス、および、ヘッドセットまたはプリンタといったデバイスなどの周辺機器であり得る。一例によると、システム１０００は、メモリに記憶するために、または、表示デバイスに表示するために、外部デバイスとデータを交換する。交換されるデータは、データの読み出し、書き込みまたは編集をするためにメモリに記憶されるべきデータ、または、メモリに既に記憶されたデータを含み得る。 
【００６２】
接続機能１０７０としては、複数の異なるタイプの接続機能が挙げられ得る。一般化すると、デバイス１０００は、セルラ接続機能１０７２および無線接続機能１０７４と共に示されている。セルラ接続機能１０７２とは概して、ＧＳＭ（登録商標）（グローバルシステム・フォー・モバイルコミュニケーションズ）またはその改変形態もしくは派生物、ＣＤＭＡ（符号分割多重アクセス）またはその改変形態もしくは派生物、ＴＤＭ（時分割多重化）またはその改変形態もしくは派生物、ＬＴＥ（ロングタームエボリューション、別名「４Ｇ」）などのセルラサービス基準を介して提供されるなどして、無線キャリアにより提供されるセルラネットワーク接続機能のことを指す。無線接続機能１０７４とは、セルラではない無線接続機能のことを指す。無線接続機能１０７４としては、パーソナルエリアネットワーク（Ｂｌｕｅｔｏｏｔｈ（登録商標）など）、ローカルエリアネットワーク（ＷｉＦｉなど）、またはワイドエリアネットワーク（ＷｉＭａｘなど）といった無線通信、またはこれらの組み合わせが挙げられ得る。無線通信とは、変調電磁放射を用いることにより非固体媒体を介してデータを転送することを指す。有線通信は固体通信媒体を介して行われる。 
【００６３】
周辺接続１０８０は、周辺接続を行うためのハードウェアインタフェースおよびハードウェアコネクタ並びにソフトウェアコンポーネント（例えば、ドライバ、プロトコルスタック）を含む。デバイス１０００は、他のコンピューティングデバイスに対する周辺デバイス（「ｔｏ」１０８２）であり得ると共に、デバイス１０００に接続された周辺デバイス（「ｆｒｏｍ」１０８４）を有し得ることが解るであろう。デバイス１０００は一般に、デバイス１０００上のコンテンツの管理（例えば、ダウンロード、アップロード、変更、同期）などを目的として他のコンピューティングデバイスに接続する「ドッキング」コネクタを有する。更には、ドッキングコネクタによって、例えば、視聴覚機器などのシステムへのコンテンツ出力をデバイス１０００が制御することを可能にするような特定の周辺機器とデバイス１０００が接続することが可能になり得る。
【００６４】
プロプライエタリ・ドッキングコネクタなどのプロプライエタリ接続ハードウェアに加えて、デバイス１０００は、一般的なコネクタまたは標準ベースのコネクタを介して周辺接続１０８０を行い得る。一般的なタイプとしては、（複数の異なるハードウェアインタフェースのうちの何れかを含み得る）ユニバーサルシリアルバス（ＵＳＢ）コネクタ、ＭｉｎｉＤｉｓｐｌａｙＰｏｒｔ（ＭＤＰ）を含むＤｉｓｐｌａｙＰｏｒｔ、高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））またはファイヤワイヤなどのタイプが挙げられ得る。 
【００６５】
デバイス１０００は、ソリッドステートドライブ（ＳＳＤ）１０１１も含み、ＳＳＤ１０１１は、デバイス１０００の不揮発性記憶装置となる。ＳＳＤ１０１１は、図１のＳＳＤ１０２と同一または同様であり得る。係る一例によると、ＳＳＤ１０１１は、本明細書に記載のように、ホストからのタイムスタンプを用いて、バックグラウンド・リフレッシュ技術の向上を行う。
【００６６】
以下は、バックグラウンド・リフレッシュ技術を実装するための方法、装置およびシステムの例である。一例によると、ある方法が、ホストからタイムスタンプを受信する段階と、当該タイムスタンプを記憶デバイスに記憶する段階と、データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する当該タイムスタンプに基づいて、当該記憶デバイスの当該１つまたは複数のブロックに記憶された当該データの保持時間を判断する段階と、当該保持時間が閾値を超えていると判断したことに応答して、当該記憶デバイスの１つまたは複数の他のブロックに当該データを移す段階とを伴う。一例によると、当該ホストから当該タイムスタンプを受信する段階は、当該記憶デバイスの電源をオンにしたこと、または、当該記憶デバイスが低電力状態を終えたことに応答したものである。一例によると、当該ホストから当該タイムスタンプを受信する段階は更に、当該記憶デバイスの電源をオンにした後、または、当該低電力状態を終えた後の最初の書き込みコマンドに応答したものである。一例によると、当該方法は更に、複数のスーパーブロックのそれぞれについて、記憶デバイスの電源をオンにしたこと、または、記憶デバイスが低電力状態を終えたことに応答して、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、当該所与のスーパーブロックに書き込まれた当該データの保持時間とを記憶する段階と、当該複数のスーパーブロックに関するデータ保持時間をスキャンする段階と、当該複数のスーパーブロックうちの１つまたは複数の保持時間が閾値を超えていると判断したことに応答して、当該複数のスーパーブロックのうちの当該１つまたは複数から１つまたは複数の他のスーパーブロックに当該データを移す段階とを伴う。 
【００６７】
一例によると、当該方法は、低電力状態になったこと、または、当該記憶デバイスの電源をオフにしたことに応答して、当該複数のスーパーブロックのそれぞれについて、当該タイムスタンプおよび保持時間を不揮発性メモリに記憶する段階と、当該低電力状態を終えたこと、または、当該記憶デバイスの電源をオンにしたことに応答して、当該複数のスーパーブロックのそれぞれについて、当該不揮発性メモリから当該タイムスタンプおよび保持時間をロードする段階とを伴う。  一例によると、当該複数のスーパーブロックのそれぞれについて、当該タイムスタンプおよび保持時間を記憶する段階は、当該複数のスーパーブロックのそれぞれについて、当該記憶デバイスの１つまたは複数のシングルレベルセル（ＳＬＣ）スーパーブロックに当該タイムスタンプおよび保持時間を記憶する段階を伴う。一例によると、当該データを移す段階は、当該１つまたは複数のブロックをキューに配置して、当該１つまたは複数のブロックに記憶されたデータの保持時間が当該閾値を超えていることを示す段階と、当該ホストからのアクセスを当該キューからの書き込みとインタリーブする段階とを伴う。一例によると、当該１つまたは複数のブロックを当該キューに配置する段階は、当該１つまたは複数のブロックを特定し、かつ、当該１つまたは複数のブロックに記憶されたデータの保持時間が当該閾値を超えていることを示す、フラグを設定する段階を伴う。一例によると、当該方法は、当該ホストからの当該アクセスを当該キューからの当該書き込みとインタリーブするための比率を調整する段階を伴い、当該インタリーブするための比率は、当該キュー内のブロックの保持時間、当該ホストからのコマンドの数、リフレッシュされるべきブロックの数、およびリフレッシュを行うための空き領域のうちの１つまたは複数に基づいたものである。一例によると、当該タイムスタンプを受信する段階は、当該ホストからのベンダーユニークコマンドを介して当該タイムスタンプを受信する段階を伴う。
【００６８】
一例によると、ソリッドステートドライブ（ＳＳＤ）が、データを記憶するためのソリッドステート記憶装置と、論理回路とを備え、当該論理回路は、ホストからタイムスタンプを受信することと、当該タイムスタンプを当該ソリッドステート記憶装置に記憶することと、データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する当該タイムスタンプに基づいて、当該ソリッドステート記憶装置の当該１つまたは複数のブロックに記憶された当該データの保持時間を判断することと、当該保持時間が閾値を超えていると判断したことに応答して、当該記憶デバイスの１つまたは複数の他のブロックに当該データを移すこととを行う。一例によると、当該ホストからの当該タイムスタンプの当該受信は、当該ＳＳＤの電源をオンにしたこと、または、当該ＳＳＤが低電力状態を終えたことに応答したものである。一例によると、当該ホストからの当該タイムスタンプの受信は更に、当該ＳＳＤの電源をオンにした後、または、当該ＳＳＤが低電力状態を終えた後の最初の書き込みコマンドに応答したものである。一例によると、当該論理回路は更に、複数のスーパーブロックのそれぞれについて、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、当該所与のスーパーブロックに書き込まれた当該データの当該保持時間とを記憶する。
【００６９】
一例によると、当該論理回路は更に、当該記憶デバイスの電源をオンにしたこと、または、当該記憶デバイスが低電力状態を終えたことに応答して、当該複数のスーパーブロックに関するデータ保持時間をスキャンすることと、当該複数のスーパーブロックうちの１つまたは複数の当該保持時間が閾値を超えていると判断したことに応答して、当該複数のスーパーブロックうちの当該１つまたは複数から１つまたは複数の他のスーパーブロックに当該データを移すこととを行う。一例によると、当該ＳＳＤは更に、揮発性メモリを備え、低電力状態になったこと、または、当該ＳＳＤの電源をオフにしたことに応答して、当該論理回路は、当該複数のスーパーブロックのそれぞれについて、不揮発性記憶装置に当該タイムスタンプおよび保持時間を記憶し、当該低電力状態を終えたこと、または、当該ＳＳＤの電源をオンにしたことに応答して、当該論理回路は、当該複数のスーパーブロックのそれぞれについて、当該不揮発性記憶装置から当該揮発性メモリに当該タイムスタンプおよび保持時間をロードする。一例によると、当該低電力状態になったこと、または、当該ＳＳＤの電源をオフにしたことに応答して、当該論理回路は、当該複数のスーパーブロックのそれぞれについて、記憶デバイスの１つまたは複数のシングルレベルセル（ＳＬＣ）スーパーブロックに当該タイムスタンプおよび保持時間を記憶する。一例によると、当該データを移すための当該論理回路は、当該１つまたは複数のブロックをキューに配置して、当該１つまたは複数のブロックに記憶されたデータの保持時間が当該閾値を超えていることを示すことと、当該ホストからのアクセスを当該キューからの書き込みとインタリーブすることとを行う。一例によると、当該１つまたは複数のブロックを当該キューに配置するための当該論理回路は、当該１つまたは複数のブロックを特定し、かつ、当該１つまたは複数のブロックに記憶されたデータの保持時間が当該閾値を超えていることを示す、フラグを設定する。一例によると、当該論理回路は、当該ホストからの当該アクセスを当該キューからの当該書き込みとインタリーブするための比率を調整し、当該インタリーブするための比率は、当該キュー内のブロックの保持時間、当該ホストからのコマンドの数、リフレッシュされるべきブロックの数、およびリフレッシュを行うための空き領域のうちの１つまたは複数に基づいたものである。一例によると、当該論理回路は、当該ホストからのベンダーユニークコマンドを介して当該タイムスタンプを受信する。一例によると、論理回路はＳＳＤのファームウェアを備える。
【００７０】
一例によると、システムは、プロセッサと、当該プロセッサと結合された不揮発性記憶デバイスとを含む。当該不揮発性記憶デバイスは、本明細書に記載の機能を含む。一例によると、ソリッドステートドライブ（ＳＳＤ）が、データを記憶するための不揮発性記憶装置を備え、ホストからタイムスタンプを受信することと、当該タイムスタンプを当該不揮発性記憶装置に記憶することと、データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する当該タイムスタンプに基づいて、当該不揮発性記憶装置の当該１つまたは複数のブロックに記憶された当該データの保持時間を判断することと、当該保持時間が閾値を超えていると判断したことに応答して、当該不揮発性記憶装置の１つまたは複数の他のブロックに当該データを移すこととを行うための手段を備える。
【００７１】
一例によると、当該ホストからの当該タイムスタンプの当該受信は、当該ＳＳＤの電源をオンにしたこと、または、当該ＳＳＤが低電力状態を終えたことに応答したものである。一例によると、当該ホストからの当該タイムスタンプの当該受信は更に、当該ＳＳＤの電源をオンにした後、または、当該低電力状態を終えた後の最初の入出力（Ｉ／Ｏ）コマンドに応答したものである。一例によると、当該ＳＳＤは、複数のスーパーブロックのそれぞれについて、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、当該所与のスーパーブロックに書き込まれた当該データの当該保持時間とを記憶するための手段を備える。  一例によると、当該ＳＳＤは、当該ＳＳＤの電源をオンにしたこと、または、当該ＳＳＤデバイスが低電力状態を終えたことに応答して、当該複数のスーパーブロックに関するデータ保持時間をスキャンすることと、当該複数のスーパーブロックうちの１つまたは複数の当該保持時間が閾値を超えていると判断したことに応答して、当該複数のスーパーブロックうちの当該１つまたは複数から１つまたは複数の他のスーパーブロックに当該データを移すこととを行うための手段を備える。一例によると、当該ＳＳＤは更に、揮発性メモリを備え、低電力状態になったこと、または、当該ＳＳＤの電源をオフにしたことに応答して、当該複数のスーパーブロックのそれぞれについて、当該不揮発性記憶装置に当該タイムスタンプおよび保持時間を記憶することと、当該低電力状態を終えたこと、または、当該記憶デバイスの電源をオンにしたことに応答して、当該複数のスーパーブロックのそれぞれについて、当該不揮発性記憶装置から当該揮発性メモリに当該タイムスタンプおよび保持時間をロードすることとを行うための手段を備える。一例によると、当該ＳＳＤは更に、低電力状態になったこと、または、当該ＳＳＤの電源をオフにしたことに応答して、当該複数のスーパーブロックのそれぞれについて、当該ＳＳＤの１つまたは複数のシングルレベルセル（ＳＬＣ）スーパーブロックに当該タイムスタンプおよび保持時間を記憶するための手段を備える。一例によると、当該データを移すための当該手段は、当該１つまたは複数のブロックをキューに配置して、当該１つまたは複数のブロックに記憶されたデータの保持時間が当該閾値を超えていることを示すこと、および、当該ホストからのアクセスを当該キューからの書き込みとインタリーブすることである。一例によると、当該１つまたは複数のブロックを当該キューに配置するための当該手段は、当該１つまたは複数のブロックを特定し、かつ、当該１つまたは複数のブロックに記憶されたデータの保持時間が当該閾値を超えていることを示す、フラグを設定することである。一例によると、当該ＳＳＤは、当該ホストからの当該アクセスを当該キューからの当該書き込みとインタリーブするための比率を調整する手段を備え、当該インタリーブするための比率は、当該キュー内のブロックの保持時間、当該ホストからのコマンドの数、リフレッシュされるべきブロックの数、およびリフレッシュを行うための空き領域のうちの１つまたは複数に基づいたものである。一例によると、当該ＳＳＤは、当該ホストからのベ���ダーユニークコマンドを介して当該タイムスタンプを受信するための手段を備える。一例によると、コンテンツを記憶したコンピュータ可読記憶媒体を備える製品であって、当該コンピュータ可読記憶媒体は、アクセスされると、本明細書に記載のバックグラウンド・リフレッシュを行うための方法を実行する動作の実施をもたらす。
【００７２】
本明細書に示されているフロー図は、一連の様々なプロセス動作の例を提供している。フロー図は、ソフトウェアまたはファームウェアのルーチンにより実行されるべき動作と、物理的な動作とを示し得る。一例によると、あるフロー図は有限ステートマシン（ＦＳＭ）の状態を示すことができ、当該ＦＳＭは、ハードウェア、ソフトウェアまたはこれらの組み合わせで実装され得る。特定の順番または順序で示されてはいるが、別段の定めがない限り、動作の順序は修正され得る。このように、示されている実施形態は、単に例として解されるべきであり、プロセスは異なる順序で行われてよく、幾つかの動作は同時に行われてよい。更には、様々な例で１つまたは複数の動作が省略され得る。このように、各実施形態で全ての動作が必要とされるわけではない。他のプロセスフローも適用可能である。
【００７３】
様々な動作または機能は、それらが本明細書で説明されている範囲において、ソフトウェアのコード、命令、構成、データまたはこれらの組み合わせとして説明または定義され得る。コンテンツは、直接実行可能なもの（「オブジェクト」または「実行可能」な形態）、ソースコード、または差分コード（「デルタ」または「パッチ」コード）であり得る。本明細書で説明されている実施形態のソフトウェアコンテンツは、コンテンツを記憶した製品を介して提供されてもよいし、通信インタフェースを介してデータを送信するよう通信インタフェースを動作させる方法を用いて提供されてもよい。機械可読記憶媒体は、説明されている機能または動作を機械に実行させることができ、機械（例えば、コンピューティングデバイス、電子システムなど）からアクセスできる形態の情報を記憶する、記録可能／記録不可能媒体（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイスなど）などの任意のメカニズムを含む。通信インタフェースは、配線で接続された媒体、無線媒体、光媒体などのうちの何れかとインタフェースして別のデバイスと通信する、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラなどといった任意のメカニズムを含む。通信インタフェースは、構成パラメータを提供すること、または、信号を送信すること、またはその両方により、ソフトウェアコンテンツが記されたデータ信号を提供する準備を通信インタフェースにさせるよう構成され得る。通信インタフェースは、通信インタフェースに送信された１つまたは複数のコマンドまたは信号を介してアクセスされ得る。 
【００７４】
本明細書で説明されている様々なコンポーネントは、説明されている動作または機能を実行するための手段であり得る。本明細書で説明されている各コンポーネントは、ソフトウェア、ハードウェアまたはこれらの組み合わせを含む。当該コンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）など）、埋め込み型コントローラ、配線で接続された回路などとして実装され得る。 
【００７５】
本明細書で説明されているものに加えて、開示された本発明の実施形態および実装に対して、それらの範囲から逸脱することなく様々な修正がなされ得る。故に、本明細書の図および例は、例示的な意味で解釈されるべきであり、限定的な意味で解釈されるべきではない。本発明の範囲は、以下の請求項を参照することによってのみ判断されるべきである。
［他の考えられる例］
［例１］
ホストからタイムスタンプを受信する段階と、
上記タイムスタンプを記憶デバイスに記憶する段階と、
データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する上記タイムスタンプに基づいて、上記記憶デバイスの上記１つまたは複数のブロックに記憶された上記データの保持時間を判断する段階と、
上記保持時間が閾値を超えていると判断したことに応答して、上記記憶デバイスの１つまたは複数の他のブロックに上記データを移す段階と
を備える方法。 
［例２］
上記ホストから上記タイムスタンプを受信する段階は、上記記憶デバイスの電源をオンにしたこと、または、上記記憶デバイスが低電力状態を終えたことに応答したものである、例１に記載の方法。 
［例３］
上記ホストから上記タイムスタンプを受信する段階は更に、上記記憶デバイスの電源をオンにした後、または、上記低電力状態を終えた後の最初の入出力（Ｉ／Ｏ）コマンドに応答したものである、例２に記載の方法。 
［例４］
複数のスーパーブロックのそれぞれについて、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、上記所与のスーパーブロックに書き込まれた上記データの上記保持時間とを記憶する段階とを更に備える、例１に記載の方法。 
［例５］
上記記憶デバイスの電源をオンにしたこと、または、上記記憶デバイスが低電力状態を終えたことに応答して、上記複数のスーパーブロックに関するデータ保持時間をスキャンする段階と、
上記複数のスーパーブロックうちの１つまたは複数の上記保持時間が閾値を超えていると判断したことに応答して、上記複数のスーパーブロックうちの上記１つまたは複数から１つまたは複数の他のスーパーブロックに上記データを移す段階と
を更に備える、例４に記載の方法。 
［例６］
低電力状態になったこと、または、上記記憶デバイスの電源をオフにしたことに応答して、上記複数のスーパーブロックのそれぞれについて、上記タイムスタンプおよび上記保持時間を上記記憶デバイスの不揮発性記憶装置に記憶する段階と、
上記低電力状態を終えたこと、または、上記記憶デバイスの電源をオンにしたことに応答して、上記複数のスーパーブロックのそれぞれについて、上記不揮発性記憶装置から上記記憶デバイスの揮発性メモリに上記タイムスタンプおよび上記保持時間をロードする段階と
を更に備える、例４に記載の方法。 
［例７］
上記複数のスーパーブロックのそれぞれについて、上記タイムスタンプおよび上記保持時間を上記不揮発性記憶装置に記憶する段階は、上記複数のスーパーブロックのそれぞれについて、上記記憶デバイスの１つまたは複数のシングルレベルセル（ＳＬＣ）スーパーブロックに上記タイムスタンプおよび上記保持時間を記憶する段階を含む、例６に記載の方法。 
［例８］
上記データを移す段階は、上記１つまたは複数のブロックをキューに配置して、上記１つまたは複数のブロックに記憶されたデータの保持時間が上記閾値を超えていることを示す段階と、
上記ホストからのアクセスを上記キューからの書き込みとインタリーブする段階と
を含む、例１に記載の方法。 
［例９］
上記１つまたは複数のブロックを上記キューに配置する段階は、上記１つまたは複数のブロックを特定し、かつ、上記１つまたは複数のブロックに記憶されたデータの保持時間が上記閾値を超えていることを示す、フラグを設定する段階を含む、例８に記載の方法。 
［例１０］
上記方法は、上記ホストからの上記アクセスを上記キューからの上記書き込みとインタリーブするための比率を調整する段階を更に備え、上記インタリーブするための比率は、上記キュー内のブロックの保持時間、上記ホストからのコマンドの数、リフレッシュされるべきブロックの数、およびリフレッシュを行うための空き領域のうちの１つまたは複数に基づいたものである、例９に記載の方法。
［例１１］
上記タイムスタンプを受信する段階は、上記ホストからのベンダーユニークコマンドを介して上記タイムスタンプを受信する段階を含む、例１に記載の方法。 
［例１２］
データを記憶するための不揮発性記憶装置と、論理回路とを備えるソリッドステートドライブ（ＳＳＤ）であって、上記論理回路は、
ホストからタイムスタンプを受信することと、
上記タイムスタンプを上記不揮発性記憶装置に記憶することと、
データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する上記タイムスタンプに基づいて、上記不揮発性記憶装置の上記１つまたは複数のブロックに記憶された上記データの保持時間を判断することと、
上記保持時間が閾値を超えていると判断したことに応答して、上記不揮発性記憶装置の１つまたは複数の他のブロックに上記データを移すこととを行う、ソリッドステート記憶デバイス（ＳＳＤ）。 
［例１３］
上記ホストからの上記タイムスタンプの上記受信は、上記ＳＳＤの電源をオンにしたこと、または、上記ＳＳＤが低電力状態を終えたことに応答したものである、例１２に記載のＳＳＤ。 
［例１４］
上記ホストからの上記タイムスタンプの上記受信は更に、上記ＳＳＤの電源をオンにした後、または、上記ＳＳＤが低電力状態を終えた後の最初の入出力（Ｉ／Ｏ）コマンドに応答したものである、例１２に記載のＳＳＤ。 
［例１５］
上記論理回路は更に、複数のスーパーブロックのそれぞれについて、データがいつ所与のスーパーブロックに書き込まれたかを示すタイムスタンプと、上記所与のスーパーブロックに書き込まれた上記データの上記保持時間とを記憶する、例１２に記載のＳＳＤ。 
［例１６］
上記論理回路は更に、上記ＳＳＤの電源をオンにしたこと、または、上記ＳＳＤが低電力状態を終えたことに応答して、上記複数のスーパーブロックに関するデータ保持時間をスキャンすることと、
上記複数のスーパーブロックうちの１つまたは複数の上記保持時間が閾値を超えていると判断したことに応答して、上記複数のスーパーブロックうちの上記１つまたは複数から１つまたは複数の他のスーパーブロックに上記データを移すことと
を行う、例１５に記載のＳＳＤ。 
［例１７］
上記ＳＳＤは、揮発性メモリを更に備え、
低電力状態になったこと、または、上記ＳＳＤの電源をオフにしたことに応答して、上記論理回路は、上記複数のスーパーブロックのそれぞれについて、不揮発性メモリに上記タイムスタンプおよび上記保持時間を記憶し、
上記低電力状態を終えたこと、または、上記ＳＳＤの電源をオンにしたことに応答して、上記論理回路は、上記複数のスーパーブロックのそれぞれについて、上記不揮発性記憶装置から上記揮発性メモリに上記タイムスタンプおよび上記保持時間をロードする、例１５に記載のＳＳＤ。 
［例１８］
上記論理回路は、上記ＳＳＤのファームウェアを有する、例１２に記載のＳＳＤ。 
［例１９］
コンテンツを記憶したコンピュータ可読記憶媒体を備える製品であって、上記コンピュータ可読記憶媒体は、アクセスされると、
ホストからタイムスタンプを受信する段階と、
上記タイムスタンプを記憶デバイスに記憶する段階と、
データがいつ１つまたは複数のブロックに書き込まれたかを示す第２のタイムスタンプに対する上記タイムスタンプに基づいて、上記記憶デバイスの上記１つまたは複数のブロックに記憶された上記データの保持時間を判断する段階と、
上記保持時間が閾値を超えていると判断したことに応答して、上記記憶デバイスの１つまたは複数の他のブロックに上記データを移す段階と
を含む方法を実行するための動作の実施をもたらす、製品。 
［例２０］
上記ホストから上記タイムスタンプを受信する段階は、上記記憶デバイスの電源をオンにしたこと、または、上記記憶デバイスが低電力状態を終えたことに応答したものである、例１９に記載の製品。
【図１】
2019106174.tif 000003
【図２】
2019106174.tif 000004
【図３Ａ】
2019106174.tif 000005
【図３Ｂ】
2019106174.tif 000006
【図４Ａ】
2019106174.tif 000007
【図４Ｂ】
2019106174.tif 000008
【図５】
2019106174.tif 000009
【図６】
2019106174.tif 000010
【図７】
2019106174.tif 000011
【図８】
2019106174.tif 000012
【図９】
2019106174.tif 000013
【図１０】
2019106174.tif 000014
【外国語明細書】
2019106174000001.pdf