(57)【特許請求の範囲】
【請求項１】
論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を格納する第１のメモリと、
（ｉ）前記論理アドレスと前記物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴと、（ｉｉ）前記第１のメタデータまたは前記第２のメタデータに依存する第３のメタデータと、（ｉｉｉ）前記第１のマッピングの変更を経時的に記録したログであるイベントログとを格納する第２のメモリと、
制御モジュールと、
を備え、
前記制御モジュールは、
前記第１のメタデータを更新し、
前記第１のメタデータを複数の部分に分割して、前記部分毎に別々の所定の時点に、前記第１のメタデータの前記部分に基づいて、前記第２のメタデータの対応する部分を更新し、
前記部分毎に別々の所定の時点とは異なる時点において、前記第３のメタデータを更新し、
前記第２のメモリの最後の電力停止が正常に行われたか否かを判断し、
前記第２のメモリの最後の電力停止が正常に行われなかった場合、前記第３のメタデータが前記第２のメモリに格納されているか否かを判断し、
前記第２のメモリから前記第１のメモリに前記第２のＬＵＴの第１の部分をアップロードした後、アップロードタイマを設定し、
前記アップロードタイマの時間に基づいて、前記イベントログに記録された情報を用いて前記第１のＬＵＴの論理−物理アドレス関連付けを更新する、又は、前記第２のメモリから前記第１のメモリに前記第２のＬＵＴの次の部分をアップロードし、
前記第３のメタデータが前記第２のメモリに格納されている場合において、前記複数の部分からなる完全なフラッシュサイクル１つ分がアップロードされていないときには、前記アップロードタイマを増分し、前記複数の部分からなる完全なフラッシュサイクル１つ分がアップロードされているときには、前記第１のＬＵＴに基づいて、前記第３のメタデータをアップロードし、さらに、前記イベントログの最後に到達していないときには、前記アップロードタイマを増分し、前記イベントログの最後に到達すると、前記第１のＬＵＴの復元を終了し、
前記第３のメタデータが前記第２のメモリに格納されていない場合において、前記イベントログの最後に到達していないときには、前記アップロードタイマを増分し、前記イベントログの最後に到達すると、前記第１のＬＵＴの復元を終了し、
前記第１のメタデータの前記部分の其々は、前記第１のＬＵＴの所定数の入力のことである、
システム。
【請求項２】
前記第１のメモリは揮発性メモリを含み、
前記第２のメモリは不揮発性メモリを含む、
請求項１に記載のシステム。
【請求項３】
前記第３のメタデータは、前記第１のメタデータまたは前記第２のメタデータに依存する情報を含み、
前記第１のメタデータまたは前記第２のメタデータに依存する情報は、ユーザデータへのポインタ、システムデータへのポインタ、メモリのブロック内のデータ量へのポインタまたは不良情報へのポインタのうち、少なくとも１つを含む、
請求項１又は請求項２に記載のシステム。
【請求項４】
前記第３のメタデータは、前記第１のＬＵＴのタイムコヒーレントなバージョンに依存している、
請求項３に記載のシステム。
【請求項５】
前記制御モジュールは、前記第１のメモリ内の前記第１のメタデータの部分を、前記第１のメモリ内の前記第１のメタデータの他の部分をバックアップしている間に更新する、
請求項１から請求項４までの何れか一項に記載のシステム。
【請求項６】
前記制御モジュールは、前記第１のメモリ内の前記第１のＬＵＴの第２の部分をバックアップしている間に、（ｉ）前記第２のメモリにユーザデータを書き込んで、（ｉｉ）前記第１のメモリ内の前記第１のＬＵＴの第１の部分を更新する、
請求項１から請求項５までの何れか一項に記載のシステム。
【請求項７】
電力ＯＮイベント中に、前記制御モジュールは、
前記第１のメモリに前記第２のメモリ内の前記第２のＬＵＴの部分をアップロードし、
前記イベントログに記録された情報に基づいて前記第１のメモリ内の前記第１のＬＵＴの部分を更新し、
前記イベントログに記録された情報には、前記システムのドライブの電力が失われる前の、（ｉ）前記物理アドレスのうち選択されたものと、（ｉｉ）前記論理アドレスとの間の前記第１のマッピングを含む前記第１のメタデータの変更が含まれる、
請求項１から請求項６までの何れか一項に記載のシステム。
【請求項８】
前記制御モジュールは、
前記第１のメタデータの部分の複数のフラッシュイベントに関するフラッシュ時間を決定し、
前記複数のフラッシュイベント間であるフラッシュ期間分待ち、
前記フラッシュ時間のうちの対応する時間において、前記第１のメモリから前記第２のメモリに前記第１のメタデータをコピーすることで、前記第１のメタデータの前記部分をフラッシュする、
請求項１から請求項７までの何れか一項に記載のシステム。
【請求項９】
論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を格納する第１のメモリと、
（ｉ）前記論理アドレスと前記物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴと、（ｉｉ）前記第１のメタデータまたは前記第２のメタデータに依存するＬＵＴ依存メタデータと、（ｉｉｉ）イベントログとを格納する第２のメモリと、
前記第１のＬＵＴの前記第１のメタデータを更新し、前記第１のメタデータを複数の部分に分割して、前記部分毎に別々の所定の時点に、前記第１のメタデータの前記部分に基づいて、前記第２のＬＵＴの前記第２のメタデータの対応する部分を更新し、電力ＯＮイベント中に、（ｉ）前記第２のメモリ内の前記第２のＬＵＴの部分を前記第１のメモリにアップロードし、（ｉｉ）前記イベントログに記録された情報に基づいて前記第１のメモリ内の前記第１のＬＵＴの部分を更新する制御モジュールと、
を備え、
前記イベントログに記録された情報には、前記電力ＯＮイベントの前に実行された、（ａ）前記物理アドレスのうち選択されたものと、（ｂ）前記論理アドレスとの間の前記第１のマッピングを含む前記第１のメタデータの更新が含まれ、
前記電力ＯＮイベント中であって、前記ＬＵＴ依存メタデータが前記第２のメモリに格納されているときに、前記制御モジュールは、前記ＬＵＴ依存メタデータを前記第２のメモリから第１のメモリにアップロードする前に、前記第２のメモリから前記第１のメモリに、少なくとも、前記複数の部分からなる完全なフラッシュサイクル１つ分をアップロードし、
前記制御モジュールは、
前記第２のメモリの最後の電力停止が正常に行われたか否かを判断し、
前記第２のメモリの最後の電力停止が正常に行われなかった場合、前記ＬＵＴ依存メタデータが前記第２のメモリに格納されているか否かを判断し、
前記第２のメモリから前記第１のメモリに前記第２のＬＵＴの第１の部分をアップロードした後、アップロードタイマを設定し、
前記アップロードタイマの時間に基づいて、前記イベントログに記録された情報を用いて前記第１のＬＵＴの論理−物理アドレス関連付けを更新する、又は、前記第２のメモリから前記第１のメモリに前記第２のＬＵＴの次の部分をアップロードし、
前記ＬＵＴ依存メタデータが前記第２のメモリに格納されている場合において、前記複数の部分からなる完全なフラッシュサイクル１つ分がアップロードされていないときには、前記アップロードタイマを増分し、前記複数の部分からなる完全なフラッシュサイクル１つ分がアップロードされているときには、前記第１のＬＵＴに基づいて、前記ＬＵＴ依存メタデータをアップロードし、さらに、前記イベントログの最後に到達していないときには、前記アップロードタイマを増分し、前記イベントログの最後に到達すると、前記第１のＬＵＴの復元を終了し、
前記ＬＵＴ依存メタデータが前記第２のメモリに格納されていない場合において、イベントログの最後に到達していないときには、前記アップロードタイマを増分し、前記イベントログの最後に到達すると、前記第１のＬＵＴの復元を終了する、
システム。
【請求項１０】
前記電力ＯＮイベント中であって、前記ＬＵＴ依存メタデータが前記第２のメモリに格納されていないときに、前記制御モジュールは、前記第２のメモリから前記第１のメモリに、前記複数の部分からなる少なくとも完全なフラッシュサイクル１つ分をアップロードする、
請求項９に記載のシステム。
【請求項１１】
前記電力ＯＮイベント中に、前記制御モジュールは、
前記システムの正常な電力停止が行われたかを判断して、正常な電力停止とは、前記第１のＬＵＴが、前記システムの最後の電力停止イベントの前に前記第２のメモリにフラッシュされることであり、
前記システムの正常な電力停止が行われたときには、（ｉ）前記第２のメタデータを前記第２のメモリから前記第１のメモリに転送し、（ｉｉ）前記イベントログにウォーク処理を行わず、
前記システムの正常な電力停止が行われなかったときには、（ｉ）前記第２のメタデータを前記第２のメモリから前記第１のメモリに転送し、（ｉｉ）前記イベントログにウォーク処理を行う、
請求項９又は請求項１０に記載のシステム。
【請求項１２】
前記制御モジュールは、ソリッドステートドライブの電力が失われる前に更新された前記複数の部分からなる少なくとも完全なフラッシュサイクル１つ分をアップロードし、
前記少なくとも完全なフラッシュサイクル１つ分は、前記第２のメモリから前記第１のメモリにアップロードされ、
前記第１のメタデータは、前記少なくとも完全なフラッシュサイクル１つ分を含み、
前記制御モジュールは、前記少なくとも完全なフラッシュサイクル１つ分の第１の部分がフラッシュされたときから、前記ソリッドステートドライブの前記電力が失われたときの前記イベントログのタイムスロットへと、前記第１のメタデータを更新するべく、前記イベントログにウォーク処理を行い、
前記電力ＯＮイベントは、前記ソリッドステートドライブの前記電力が失われた後に行われる、
請求項９に記載のシステム。
【請求項１３】
前記制御モジュールは、前記第２のＬＵＴの前記部分を前記第２のメモリから前記第１のメモリにアップロードし、
前記第１のメタデータは、前記アップロードされた部分を含み、
前記アップロードされた部分は、（ｉ）前記ＬＵＴ依存メタデータのフラッシュイベントの前、且つ、（ｉｉ）ソリッドステートドライブの電力が失われたときの前記イベントログのタイムスロットの前の、前記アップロードされた部分の少なくとも完全なフラッシュサイクル１つ分を含み、
前記制御モジュールは、前記完全なフラッシュサイクル１つ分の第１の部分のタイムスロットから、前記ソリッドステートドライブの前記電力が失われたときの前記イベントログの前記タイムスロットへと、前記第１のメタデータを更新するべく、前記イベントログにウォーク処理を行い、
前記電力ＯＮイベントは、前記ソリッドステートドライブの前記電力が失われた後に行われる、
請求項９に記載のシステム。
【請求項１４】
前記電力ＯＮイベント中に、前記制御モジュールは、
前記複数の部分からなる完全なフラッシュサイクル１つ分の第１の部分を前記第２のメモリから前記第１のメモリにアップロードし、
第１のタイムスロットから、ソリッドステートドライブの電力停止サイクルに関連付けられたタイムスロットまで、前記イベントログに記録された情報に基づく前記第１のメモリ内の前記完全なサイクル１つ分のロードおよび更新を含む、前記イベントログにウォーク処理を行い、
前記第１のタイムスロットから前記完全なサイクル１つ分のタイムスロットまで前記イベントログにウォーク処理を行っている間、前記制御モジュールは、
（ｉ）イベントログ入力を省き、
（ｉｉ）前記省いたイベントログ入力に関連付けられている前記第１のメモリの入力を更新しない、
請求項９に記載のシステム。
【請求項１５】
論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を第１のメモリに格納する段階と、
（ｉ）前記論理アドレスと前記物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴと、（ｉｉ）前記第１のメタデータまたは前記第２のメタデータに依存するＬＵＴ依存メタデータと、（ｉｉｉ）前記第１のマッピングの変更を経時的に記録したログであるイベントログとを第２のメモリに格納する段階と、
制御モジュールを通じて前記第１のメタデータを更新し、前記第１のメタデータを複数の部分に分割して、前記部分毎に別々の所定の時点に、前記第１のメタデータの前記部分に基づいて、前記第２のメタデータの対応する部分を更新する段階であって、前記部分の其々は、前記第１のＬＵＴの所定数の入力のことである段階と、
前記第２のメタデータの前記部分を前記第２のメモリから前記第１のメモリにアップロードする段階であって、前記第１のメタデータは、前記アップロードされた部分を含み、前記アップロードされた部分は、前記ＬＵＴ依存メタデータのフラッシュイベントの前の前記アップロードされた部分の少なくとも完全なフラッシュサイクル１つ分を含む段階と、
前記第２のメモリの最後の電力停止が正常に行われたか否かを判断する段階と、
前記第２のメモリの最後の電力停止が正常に行われなかった場合、前記ＬＵＴ依存メタデータが前記第２のメモリに格納されているか否かを判断する段階と、
前記第２のメモリから前記第１のメモリに前記第２のＬＵＴの第１の部分をアップロードした後、アップロードタイマを設定する段階と、
前記アップロードタイマの時間に基づいて、前記イベントログに記録された情報を用いて前記第１のＬＵＴの論理−物理アドレス関連付けを更新する、又は、前記第２のメモリから前記第１のメモリに前記第２のＬＵＴの次の部分をアップロードする段階と、
前記ＬＵＴ依存メタデータが前記第２のメモリに格納されている場合において、前記複数の部分からなる完全なフラッシュサイクル１つ分がアップロードされていないときには、前記アップロードタイマを増分し、前記複数の部分からなる完全なフラッシュサイクル１つ分がアップロードされているときには、前記第１のＬＵＴに基づいて、前記ＬＵＴ依存メタデータをアップロードし、さらに、前記イベントログの最後に到達していないときには、前記アップロードタイマを増分し、前記イベントログの最後に到達すると、前記第１のＬＵＴの復元を終了する段階と、
前記ＬＵＴ依存メタデータが前記第２のメモリに格納されていない場合において、イベントログの最後に到達していないときには、前記アップロードタイマを増分し、前記イベントログの最後に到達すると、前記第１のＬＵＴの復元を終了する段階と、
を備える、
方法。
【請求項１６】
前記第２のメモリに、前記ＬＵＴ依存メタデータを格納する段階であって、
前記ＬＵＴ依存メタデータは、前記第１のメタデータまたは前記第２のメタデータに依存しており、前記部分毎に別々の所定の時点とは異なる時点において、前記ＬＵＴ依存メタデータを更新する段階を、さらに備える、
請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ソリッドステートドライブのメタデータの格納および受信に関する。
【０００２】
［優先権情報］  本願は、２０１１年５月１８日出願の米国出願13/110,517号の優先権を主張しており、米国仮出願61/347,919号の恩恵の享受を主張するものであり、前記各出願の内容は、参照により本明細書に組み込まれる。
【背景技術】
【０００３】
本発明の理解するための背景を、一般的に説明することを目的として、背景技術を説明する。以下、背景技術の章において説明される範囲及び出願時に従来技術として認められていない側面の範囲において、本願発明者の仕事は、本開示に対して明示的に又は非明示的にも、従来技術であるとは認めていない。
【０００４】
データ格納システムは、様々な取り外し可能または取り外し不可能な格納デバイスが含むことがある。格納デバイスには、ハードディスクドライブ（ＨＤＤ）、光格納ドライブ、および、フラッシュメモリを含む取り外し可能ソリッドステートドライブ（ＳＳＤ）といった不揮発性メモリ素子および揮発性メモリ素子の両方が含まれうる。
【０００５】
格納デバイスのフラッシュメモリは、メタデータを格納することができる。メタデータは、論理から物理へのアドレス入力が含むことができ、これらを利用して、ホストからの論理アドレスをフラッシュメモリの物理アドレスに変換する。ＳＳＤの制御モジュールは、このメタデータに従って割り出した物理アドレスに基づいてフラッシュメモリ内の位置へのアクセスを行うことができる。
【０００６】
データ格納システムの動作中、フラッシュメモリに対してデータの書き込みおよび／または読み出しが行われるたびに、ＳＳＤの揮発性メモリへのメタデータの更新および格納が行われる。メタデータは、データ格納システムの電源投入時に揮発性メモリからフラッシュメモリに転送される。フラッシュメモリに転送されたメタデータは、データ格納システムへの電源が戻ったときに揮発性メモリに再ロードされる。こうすることで、ＳＳＤは、自身の論理アドレスおよび物理アドレス間のマッピングを常に更新されたものとし続けることができる。
【発明の概要】
【０００７】
システムは、論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を格納する第１のメモリと、論理アドレスと部分物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴを格納する第２のメモリと、第１のメタデータを更新し、部分第１のメタデータに基づいて、其々所定の時点に部分第２のメタデータの部分を更新する制御モジュールとを備え、該部分は、部分第２のＬＵＴの所定数の入力のことである。
【０００８】
他の特徴として、第１のメモリは揮発性メモリを含む。第２のメモリは不揮発性メモリを含む。他の特徴として、第２のメモリは、第３のメタデータを格納する。第３のメタデータは、第１のメタデータまたは第２のメタデータのうち少なくとも一方に依存している。制御モジュールは、其々所定の時点において、第３のメタデータを更新する。
【０００９】
他の特徴として、第２のメモリは、第３のメタデータを格納する。第３のメタデータは、第１のメタデータまたは第２のメタデータのうち少なくとも一方に依存している。制御モジュールは、其々所定の時点とは異なる時点において、第３のメタデータを更新する。
【００１０】
他の特徴として、制御モジュールは、所定の間隔で第３のメタデータを更新し、第３のメタデータは、前記第１のメタデータまたは前記第２のメタデータの少なくとも一方に依存しており、第３のメタデータは、ユーザデータのポインタ、システムデータのポインタ、メモリのブロックに格納されているデータ量、または不良情報のうち、少なくとも１つを含む他の特徴として、第３のメタデータは、第２のＬＵＴのタイムコヒーレントなバージョンに依存している。
【００１１】
他の特徴として、制御モジュールは、第１のメモリ内の第１のメタデータの部分を、第２のメモリ内の第１のメタデータの他の部分をバックアップしている間に更新する。制御モジュールは、第２のメモリ内の第１のＬＵＴの第２の部分をバックアップしている間に、第２のメモリにユーザデータを書き込んで、第１のメモリ内の第１のＬＵＴの第１の部分を更新する。
【００１２】
他の特徴として、電力ＯＮイベント中に、制御モジュールは、イベントログの入力に基づいて第１のメモリの部分を更新して、第１のメモリに第２のメモリの部分をアップロードして、イベントログの入力には、システムのドライブの電力が失われる前に実行された物理アドレスおよび論理アドレスのうち選択されたものの間のメタデータの変更が含まれる。
【００１３】
他の特徴として、制御モジュールは、第１のメタデータの部分のフラッシュ時間を決定して、フラッシュイベント間であるフラッシュ期間分待ち、フラッシュ時間のうちの対応する時間において、第１のメモリから第２のメモリに第１のメタデータをコピーすることで、第１のメタデータの部分をフラッシュする。
【００１４】
他の特徴として、論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を格納する第１のメモリと、論理アドレスと物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴを格納する第２のメモリと、電力ＯＮイベント中に、第２のメモリの部分を第１のメモリにアップロードして、イベントログの入力に基づいて第１のメモリの部分を更新する制御モジュールとを備え、イベントログの入力には、電力ＯＮイベントの前に実行された物理アドレスおよび前記論理アドレスのうち選択されたものの間のメタデータの更新が含まれる、システムが提供される。
【００１５】
他の特徴として、電力ＯＮイベント中であって、ＬＵＴ依存メタデータが第２のメモリに格納されていないときに、制御モジュールは、第２のメモリから第１のメモリに、少なくとも部分の完全なサイクル１つ分をアップロードする。
【００１６】
電力ＯＮイベント中であって、ＬＵＴ依存メタデータが第２のメモリに格納されているときに、制御モジュールは、ＬＵＴ依存メタデータを第２のメモリから第１のメモリにアップロードする前に、第２のメモリから第１のメモリに、少なくとも部分の完全なサイクル１つ分をアップロードする。
【００１７】
他の特徴として、電力ＯＮイベント中に、制御モジュールは、システムの正常な電力停止が行われたかを判断して、正常な電力停止とは、第１のＬＵＴが、システムの最後の電力停止イベントの前に第２のメモリにフラッシュされることであり、システムの正常な電力停止が行われたときには、第２のメタデータを第２のメモリから第１のメモリに転送して、イベントログにウォーク処理を行わず、システムの正常な電力停止が行われなかったときには、第２のメタデータを第２のメモリから第１のメモリに転送して、イベントログにウォーク処理を行う。
【００１８】
他の特徴として、制御モジュールは、ソリッドステートドライブの電力が失われる前に更新された部分の少なくとも完全なフラッシュサイクル１つをアップロードして、部分の少なくとも完全なフラッシュサイクル１つは、第２のメモリから第１のメモリにアップロードされ、第１のメタデータは、部分の少なくとも完全なフラッシュサイクル１つを含み、制御モジュールは、部分の少なくとも完全なフラッシュサイクル１つの第１の部分がフラッシュされたときから、ソリッドステートドライブの電力が失われたときのイベントログのタイムスロットへと、第１のメタデータを更新するべく、イベントログにウォーク処理を行い、電力ＯＮイベントは、ソリッドステートドライブの電力が失われた後に行われる。
【００１９】
他の特徴として、制御モジュールは、部分を第２のメモリから第１のメモリにアップロードして、第１のメタデータは、アップロードされた部分を含み、アップロードされた部分は、ＬＵＴ依存メタデータのフラッシュイベントの前の、および、ソリッドステートドライブの電力が失われたときのイベントログのタイムスロットの前の、部分の少なくとも完全なフラッシュサイクル１つを含み、制御モジュールは、部分の完全なフラッシュサイクル１つの第１の部分のタイムスロットから、ソリッドステートドライブの電力が失われたときのイベントログのタイムスロットへと、第１のメタデータを更新するべく、イベントログにウォーク処理を行い、電力ＯＮイベントは、ソリッドステートドライブの電力が失われた後に行われる。
【００２０】
他の特徴として、電力ＯＮイベント中に、制御モジュールは、部分の完全なフラッシュサイクル１つの第１の部分を第２のメモリから第１のメモリにアップロードして、イベントログの入力に基づいて、第１のメモリの部分の完全なサイクル１つのロードおよび更新を含む、ソリッドステートドライブの電力停止サイクルに関連付けられたタイムスロットまで第１のタイムスロットから、イベントログにウォーク処理を行い、第１のタイムスロットから部分の完全なサイクル１つのタイムスロットまでイベントログにウォーク処理を行っている間、制御モジュールは、イベントログ入力を省いて、省いたイベントログ入力に関連付けられている第１のメモリの入力を更新しない。
【００２１】
本開示の更なる用途分野も、以下の詳細な記載、請求項、および図面を読むことで明らかとなる。詳細な記載および具体例は、あくまで例示を目的としたものであって、本開示の範囲に限定を加えようという意図はない。
【００２２】
本開示は、以下の詳細な記載を、添付図面とともに読むことでよりよく理解される。
【図面の簡単な説明】
【００２３】
【図１】本開示におけるデータ格納システムの機能ブロック図である。
【００２４】
【図２】本開示の、割り当て時間スロット実装における全サイクルフラッシュを示すルックアップテーブル（ＬＵＴ）状態ダイアグラムである。
【００２５】
【図３】本開示の分割されたフラッシュサイクル実装に基づく一連のＬＵＴ状態を示すＬＵＴ状態ダイアグラムである。
【００２６】
【図４】本開示の分割されたフラッシュサイクル実装のタイム・コヒーレントなＬＵＴ時間を示すＬＵＴ状態ダイアグラムである。
【００２７】
【図５】本開示の分割されたフラッシュサイクル実装について、非ＬＵＴ依存のメタデータおよびＬＵＴ依存のメタデータのフラッシュタイミングを同期させたＬＵＴ状態ダイアグラムである。
【００２８】
【図６】本開示の分割されたフラッシュサイクル実装について、専用のＬＵＴ依存のメタデータのフラッシュタイミングを示すＬＵＴ状態ダイアグラムである。
【００２９】
【図７】本開示のＬＵＴを更新、バックアップする方法を示す。
【００３０】
【図８】本開示のＬＵＴを復元する方法を示す。
【発明を実施するための形態】
【００３１】
以下の記載は、本質的に例示にすぎず、本開示、用途、または利用を制限する意図はない。明瞭を期す目的から、図面における同じ参照番号は同様の部材を示すこととする。ここで「Ａ、Ｂ、およびＣ」という言い回しは、非排他的論理和を利用した、論理的（ＡまたはＢまたはＣ）という意味に捉えられたい。ある方法における各段階は、本開示の原理において順序を入れ替えて実行してもよいことと理解されたい。
【００３２】
ここでは、「モジュール」を、コードを実行する特定用途向け集積回路（ＡＳＩＣ）、電子回路、統合論理回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プロセッサ（共有、専用、グループを含む）、記載する機能を提供するのに適したその他のコンポーネント、または、システムオンチップ等におけるような上述した部材の一部または全ての組み合わせであってよい、とする。「モジュール」という用語は、プロセッサが実行するコードを格納するメモリ（共有、専用、グループを含む）も含んでよい。
【００３３】
上でも利用した「コード」という用語は、ソフトウェア、ファームウェア、および・または、マイクロコードを含んでよく、プログラム、ルーチン、機能、クラス、および／またはオブジェクトのことであってよい。上でも利用した「共有」という用語は、複数のモジュールの一部または全てのコードが、単一の（共有）プロセッサによる実行が可能であることを意味する。加えて、複数のモジュールの一部または全てのコードは、単一の（共有）メモリに格納されてもよい。上でも利用した「グループ」という用語は、単一のモジュールの一部または全てのコードが、一群のプロセッサを利用して実行可能であることを示す。加えて、単一のモジュールの一部または全てのコードが、一群のメモリに格納されてもよい。
【００３４】
ここで記載する装置および方法は、１以上のプロセッサが実行する１以上のコンピュータプログラムにより実装することができる。コンピュータプログラムには、一時的でない有形のコンピュータ可読媒体に格納されるプロセッサ実行可能命令が含まれてよい。コンピュータプログラムには、格納されているデータが含まれてよい。一時的でない有形のコンピュータ可読媒体の非制限的な例には、不揮発性メモリ、磁気ストレージ、および光ストレージがある。
【００３５】
ソリッドステートドライブ（ＳＳＤ）は、各論理ユニットおよびデータブロックのメモリにおける物理格納位置をトラックするためにルックアップテーブル（ＬＵＴ）を利用することができる。ＬＵＴは、論理アドレスによりインデックス化される物理位置を有する、アレイまたはその他の適切なデータ群のことを指してよい。ＬＵＴは、メモリに対して読み出しおよび／または書き込みを行うときに、論理アドレスを物理アドレスに変換するために利用することができる。メモリの物理位置で陳腐になった（古くなった）データは、その物理位置に更新した（新しい）データを書き込む前に、無効化することができる。ＬＵＴは、古くなったデータは無効になると修正され、更新されたデータが同じ位置に、古いデータの置き換えとして書き込まれる、または新たな物理位置に書き込まれる。
【００３６】
メモリの各書き込み処理中に、論理アドレスは物理アドレスに動的マッピングされる。動的マッピングとは、書き込み処理中に物理アドレスを論理アドレスに割り当てる処理のことである。各時間データがメモリに書き込まれ、データの論理アドレスおよび対応する物理アドレスがＬＵＴに記録される。動的マッピングによって、データの物理位置を計算する決定論的な方法がなくなる。この結果、格納済みのデータにアクセスするためには更新済みの正確なＬＵＴが必要となる。
【００３７】
ＳＳＤのＬＵＴは、ＳＳＤの電源投入時（電力ＯＮ時）に、揮発性メモリに格納され、揮発性メモリからアクセスすることができるようになる。ＬＵＴは、パフォーマンス面の観点から（つまり、アクセス時間を短くするために）揮発性メモリに格納される。ＬＵＴは、ＳＳＤの電源停止時（電源ＯＦＦ）に、揮発性メモリから不揮発性メモリに転送されてよい。ＬＵＴは、ＳＳＤがＯＦＦ状態になる前に不揮発性メモリに格納される。
【００３８】
ＳＳＤの動作中に、電力が失われると、揮発性メモリに格納されているＬＵＴの更新済みメタデータが失われることがある。電源喪失前にＬＵＴを更新してバックアップをとるためのデータ格納システムを以下に提供する。さらにこのデータ格納システムは、電源喪失時に、電源が失われた時点前の状態にＬＵＴを復元する。
【００３９】
図１に示すデータ格納システム１０は、ホスト１２とＳＳＤ１４とを含む。ホスト１２は、コンピュータ、メディアプレーヤ、形態電話、携帯情報端末、その他のＳＳＤインタフェース１５を含むデバイスであってよい。ＳＳＤ１４は、ホスト１２に着脱可能であってよい。ＳＳＤ１４の一例は、フラッシュドライブである。ホストはＳＳＤ１４のメモリに、ＳＳＤインタフェースを介してアクセスする。
【００４０】
ＳＳＤ１４は、制御モジュール１７、読み出し専用メモリ（ＲＯＭ）１８、揮発性メモリ２０、およびフラッシュ（不揮発性）メモリ２２を含む固体システム１６を含む。制御モジュール１７は、ＳＳＤ１４のソフトウェアおよびファームウェアの命令を実行する。例えば、制御モジュール１７は、ＲＯＭ１８に格納されているファームウェアの命令を実行する。制御モジュール１７は、揮発性メモリ２０に格納されている命令の読み出しおよび実行も行う。揮発性メモリ２０の一例は、ランダムアクセスメモリ（ＲＡＭ）である。
【００４１】
データ格納システム１０は、入力デバイス２４、出力デバイス２６、および、ハードディスクドライブ（ＨＤＤ）２８もさらに含んでよい。入力デバイス２４は、キーボードまたはキーパッド、マウス、タッチスクリーン、タッチパッド、マイクロフォン、および・または、その他の入力デバイスを含んでよい。出力デバイス２６は、ディスプレイ、スピーカ、および／または、その他の出力デバイスを含んでよい。
【００４２】
データ格納システム１０は、ＳＳＤ１４にデータを格納する。ＳＳＤ１４は、ＨＤＤ（ＨＤＤ２８）をエミュレートする。例えばＨＤＤ２８に格納されるデータを、ＳＳＤ１４（フラッシュメモリ２２）にも格納する、としてよい。データは、物理割り当てアドレス（ＰＡＡ）に対応する論理割り当てアドレス（ＬＡＡ）に従ってフラッシュメモリ２２に格納される。ＬＡＡとは、ホスト１２が、フラッシュメモリ２２のメモリ位置を参照する際に利用する際に利用するアドレスである。ＰＡＡは、フラッシュメモリ２２の物理位置のアドレスであり、制御モジュール１７が物理位置にアクセスする際に利用する。
【００４３】
制御モジュール１７は、ＲＯＭ１８に格納されているファームウェアに従いコマンドを処理することで、フラッシュメモリ２２に対してデータを読み書きする。例えば、ホスト１２がユーザデータをフラッシュメモリ２２のＬＡＡに書き込む場合、制御モジュール１７は、ＲＯＭ１８のファームウェアを介して、対応するＰＡＡを選択する。制御モジュール１７は、ＰＡＡにより特定されたフラッシュメモリ２２の位置にユーザデータを格納して、対応するメタデータを、揮発性メモリ２０および／またはフラッシュメモリ２２に格納する。メタデータは、ＬＡＡと対応するＰＡＡとの関係またはマッピングを示すものである。
【００４４】
メタデータは、非ＬＵＴ依存メタデータと、ＬＵＴ依存メタデータとを含む。非ＬＵＴ依存メタデータは、１以上のＬＵＴを、ＬＡＡとＰＡＡとの関連付けとともに含む。ＬＡＡをＰＡＡに関連付ける一次ＬＵＴ５０は、揮発性メモリ２０に格納されている。一次ＬＵＴ５０のバックアップ版は（バックアップまたは二次ＬＵＴ５２と称される）、フラッシュメモリ２２に格納される。一次ＬＵＴ５０は、フラッシュメモリ２２の各ＬＡＡを、割り当てられたＰＡＡと関連付けている。あるＬＡＡにＰＡＡが割り当てられていない場合、このＬＡＡは、明らかに無効なＰＡＡ値に関連付けられる。一次ＬＵＴ５０は、ＳＳＤ１４への電源停止前に揮発性メモリ２０からフラッシュメモリ２２にフラッシュされる。「フラッシュ」「フラッシュされた」「フラッシュする」等の用語は、ＬＵＴの少なくとも一部を揮発性メモリ２０からフラッシュメモリ２２にダウンロードまたはセーブすることを言う。
【００４５】
ＬＡＡとＰＡＡとの間のマッピングを提供するメタデータが、非ＬＵＴ依存メタデータと称される。ＬＵＴ依存メタデータは、非ＬＵＴ依存メタデータに依拠（dependent upon）しているメタデータのことである。ＬＵＴ依存メタデータは、さらに、それぞれ参照番号５６、５８で特定される揮発性メモリ２０およびフラッシュメモリ２２の両方に格納することができる。ＬＵＴ依存メタデータ５６、５８は、ユーザデータおよび／またはシステムデータへのポインタ、データ記述子、不良情報、メモリブロック内のデータ量（例えばフラッシュメモリ２２のブロックのデータ量）等を含む。ユーザデータとは、ホスト１２から提供されるデータのことであってよく、フラッシュメモリ２２に格納されてよい。システムデータとは、ＲＯＭ１８に格納されているファームウェアを実行する際に生成されるデータのことであってよい。データ記述子とは、例えば、あるデータがユーザデータからシステムデータかを示す情報であってよい。不良情報とは、フラッシュメモリ２２のブロック内の不良位置等であってよい。
【００４６】
アクセスイベント（読み出しイベントまたは書き込みイベント）において、ホスト１２は、フラッシュメモリ２２内の位置にアクセスするべく、ＬＡＡを制御モジュール１７に提供する。制御モジュール１７は、一次ＬＵＴ５０にアクセスして、ＬＡＡをＰＡＡに変換する。例えば、読み出しコマンドが、あるＬＡＡに関するデータを要求している場合、実際にはこのデータは、対応するＰＡＡから取得される。次に、制御モジュール１７は、フラッシュメモリ２２のＰＡＡにアクセスする。制御モジュール１７は、フラッシュメモリ２２にデータを書き込む際には、未使用ＰＡＡをＬＡＡに割り当てることができる。一次ＬＵＴ５０が、ＬＡＡとＰＡＡとの関連を反映するよう更新される。
【００４７】
揮発性メモリ２０に格納されている非ＬＵＴ依存メタデータ（一次ＬＵＴ５０）は、データ（例えばユーザデータ）がフラッシュメモリ２２に書き込まれると、更新される。データ格納システム１０の電源が停止される前に、揮発性メモリ２０に格納されているメタデータをフラッシュメモリ２２に転送（フラッシュ）する。フラッシュされるメタデータには、ＬＵＴ依存メタデータと非ＬＵＴ依存メタデータとが含まれてよい。メタデータのフラッシュは、定期的、および／または、所定の時に実行されてもよいし、データ格納システム１０および／またはＳＳＤ１４に対する電源を停止する前に実行されてもよい。
【００４８】
バックアップＬＵＴ５２およびイベントログ５４は、電源喪失の後に、一次ＬＵＴ５０をアップロードして復元するために利用される。フラッシュメモリ２２には、イベントログ５４が格納されていてよい。イベントログとは、ＬＵＴに対して行われたアドレスマッピングの変更の経時的な記録のことである。例えば一次ＬＵＴ５０は、フラッシュメモリ２２の物理アドレスへの論理アドレスのマッピングを含む。フラッシュメモリ２２のセルおよび／またはブロックにアクセスが行われると、論理−物理アドレス関連付けが変更される場合がある。イベントログ５４を利用して、経時的なアドレスマッピングの変更をトラックすることができ、これを利用して、電源喪失時（例えば停電時）に一次ＬＵＴ５０の最新状態の復元を試みることができる。イベントログ５４の各入力は、特定の時間（またはタイムスロット）について論理−物理アドレスマッピングの変更に関連付けられてよい。一例として、イベントログ５４の入力には、論理アドレスと、この論理アドレスに割り当てられた物理アドレスとが含まれてよい。イベントログ入力の例を図３および図４に示す。
【００４９】
メタデータをフラッシュする頻度は、所定のバックアップ時間、イベントログサイズ、ロードアップ（load-up）時間、および／または、復元（または再構築）時間要件に基づいて調節することができる。バックアップ時間は、メタデータ（非ＬＵＴ依存メタデータおよび／またはＬＵＴ依存メタデータ）を、揮発性メモリ２０からフラッシュメモリ２２にフラッシュするのにかかる時間である。メタデータを揮発性メモリ２０からフラッシュメモリ２２にフラッシュされる頻度が低いほど、イベントログが非ＬＵＴ依存メタデータを修復するのにかかる時間は長くなる。一次ＬＵＴ５０を修復するために必要なイベントログ入力量が多いほど、一次ＬＵＴ５０を復元するのにかかる時間も長くなる。
【００５０】
一例では、イベントログ５４のサイズを、フラッシュメモリ２２に格納されるＬＡＡ−ＰＡＡマッピングの変更の入力数としてもよいし、および／または、ＬＡＡ−ＰＡＡマッピングの変更の格納専用に利用される１以上のアレイの長さであってもよい。フラッシュメモリ２２の一部を、イベントログ５４に割り当ててよい。この部分のサイズは、イベントログ５４のサイズまたは所定の数のイベントログ入力の数と等しくなるようにすると、確実に一次ＬＵＴ５０を復元することができる。
【００５１】
ロードアップ時間とは、ＳＳＤ１４への電源投入時の、フラッシュメモリ２２から揮発性メモリ２０へのメタデータ（非ＬＵＴ依存メタデータおよびＬＵＴ依存メタデータ）の転送時間のことであってよい。復元時間には、ロードアップ時間と、「イベントログをウォークする」時間とが含まれてよい。「イベントログにウォーク処理を行う（walking the event log）」等の言い回しは、イベントログ５４の入力に従って揮発性メモリ２０のバックアップＬＵＴ５２を更新することを指す。これに関しては後で詳述する。
【００５２】
ＳＳＤ１４の電源投入処理中に、非依存および依存ＬＵＴメタデータを、フラッシュメモリ２２から揮発性メモリ２０に転送（アップロード）して、ＬＡＡとＰＡＡとの間の正常に更新された関連付けを構築する。ＳＳＤ１４の動作中に、揮発性メモリ２０に格納されているメタデータに対する変更を、イベントログ５４でトラックする。フラッシュメモリ２２に格納されているメタデータは、揮発性メモリ２０に格納されているメタデータに対する同じ変更を反映するように更新される。フラッシュメモリ２２のメタデータは、所定の時、および、ＳＳＤ１４の電源ＯＦＦ前に、分割されて更新される。例えば、フラッシュメモリ２２のメタデータを、メタデータセーブコマンドに応じて更新することができる。メタデータセーブコマンドは、ＲＯＭ１８のファームウェアに従って、定期的、および／または、所定の時に生成することができる。
【００５３】
ＳＳＤ１４の電源停止中には、制御モジュール１７が、一次ＬＵＴ５０を含む揮発性メモリ２０全体をフラッシュメモリ２２にフラッシュすることができる。ＳＳＤ１４の電源投入時に、制御モジュール１７は、バックアップＬＵＴ５２を揮発性メモリ２０にアップロードして、バックアップＬＵＴ５２のフラッシュイベント時から、イベントログ５４の最後の入力までイベントログ５４にウォーク処理を行うことで、バックアップＬＵＴを確実に最新の変更で更新するようにしてよい。
【００５４】
ＳＳＤ１４の動作中に予期せず電源が喪失すると、揮発性メモリ２０に格納されているメタデータに対する変更が失われる場合がある。フラッシュメモリ２２に格納されているメタデータは、ＳＳＤ１４の電源ＯＦＦ前には更新されないので、フラッシュメモリ２２のメタデータには、一次ＬＵＴ５０に対する最新の変更が含まれないことになる。この理由から、フラッシュメモリ２２のメタデータは少なくとも一部が古かったり、陳腐であったりすることがある。電源喪失の後の電源投入期間に、古いメタデータがフラッシュメモリ２２から揮発性メモリ２０に転送されてしまうことがある。この場合、フラッシュメモリ２２のユーザデータの割り当ておよび取得が不正確となりうる。揮発性メモリ２０内のメタデータを修正するために、制御モジュール１４がイベントログ５４のウォーク処理を行う。イベントログ５４のウォーク処理において、制御モジュールは、揮発性メモリ２０に格納されているメタデータを更新する。
【００５５】
ＳＳＤ１４は、さらにアップロードタイマ６０を含んでよい。アップロードタイマ６０は、イベントログ５４のウォーク処理で利用されてよい。アップロードタイマ６０は、イベントログ５４のウォーク処理中のイベントログ５４の現在の入力のこと、またはこれを指すものであってよい。このことはさらに図８の方法を参照しながら説明する。
【００５６】
図１および図２を参照すると、ルックアップテーブル（ＬＵＴ）状態ダイアグラム１００が、割り当てられたタイムスロット実装ごとの全サイクルフラッシュを示している。「全サイクルフラッシュ」とは、少なくとも一度ＬＵＴの各入力をフラッシュすることを称する。ＬＵＴ状態ダイアグラム１００は、タイムスロット１から１４を含む様々な時点における、一次ＬＵＴ５０およびイベントログ５４'の状態例を示している。時間は、タイムスロット１からタイムスロット１４へと進む。一次ＬＵＴ５０の状態例が、各タイムスロット１から１４について示されている。タイムスロット１１−１４の入力は、タイムスロット１０中に電力が失われないことを条件とした入力例として示されている。もしもタイムスロット１０中に電力が失われる場合には、タイムスロット１１から１４が存在しなくなる。
【００５７】
図示されている一次ＬＵＴ５０は、６個の入力１０４を含むが、一次ＬＵＴ５０は任意の数の入力を含むことができる。６個の入力それぞれ１０４には、ＬＡＡおよびＰＡＡが関連付けられている。ＬＡＡは、番号１から６で表され、テーブルの一列１０６に示されている。ＰＡＡは、タイムスロット１から１４におけるそれぞれの一次ＬＵＴ５０の入力として示されている。例えばＰＡＡは、タイムスロット１では１、２、７、４、５、６として示されている。同様に、タイムスロット１０では、ＰＡＡは、１０、１４、１５、１６、５、１３となっている。ＰＡＡがＬＡＡについて更新されると、一次ＬＵＴ５０の対応する入力も、この更新を反映するよう変更される。例えばタイムスロット２では、第２ＬＡＡについてのＰＡＡが２から８へと更新されている。
【００５８】
一次ＬＵＴ５０の入力は、フラッシュメモリ２２に、定期的、および／または、所定の時にフラッシュされてよい。一次ＬＵＴ５０は、フラッシュイベントごとに、揮発性メモリ２０からフラッシュメモリ２２にその全体がフラッシュされてよい。図２には３つのフラッシュイベントＡ−Ｃが示されている。
【００５９】
一例として電力投入時に、ＰＡＡ１−６で一次ＬＵＴ５０を始動する。タイムスロット１で、ＬＡＡ３についてＰＡＡ３をＰＡＡ７で置き換える。次に、タイムスロット２で、ＬＡＡ２についてＰＡＡ８でＰＡＡ２を置き換える。タイムスロット１から１４各々について１以上の入力を更新することができる。第１のフラッシュＦＬＵＳＨ  Ａでは、一次ＬＵＴがＰＡＡ入力１、２、３、４、５、６を有している。第２のフラッシュＦＬＵＳＨ  Ｂでは、一次ＬＵＴがＰＡＡ入力１０、８、１２、９、５、および１１を有している。第３のフラッシュＦＬＵＳＨ  Ｃでは、一次ＬＵＴが、ＰＡＡ入力１８、１４、１５、１７、５、および１３を有している。
【００６０】
タイムスロット１０中に電力が喪失すると（破線１１０で示されている）、一次ＬＵＴ５０は、ＳＳＤ１４の次の電力ＯＮ時に復元されてよい。最後にセーブした一次ＬＵＴのバージョン（１０、８、１２、９、５、および１１）を、フラッシュメモリ２２から揮発性メモリ２０にアップロードすることができる。制御モジュール１７は、イベントログ５４'を、一次ＬＵＴ５０が最後にセーブされた時点からタイムスロット１０までウォークして、一次ＬＵＴ５０を再構築する。一次ＬＵＴ５０は、イベントログ５４'における各入力に従って更新される。イベントログ５４'のウォーク処理の最終結果が、電力が喪失したときに存在している入力を有する一次ＬＵＴになる（たとえば１０、１４、１５、１６、５、１３）。
【００６１】
１つのフラッシュイベント中に一次ＬＵＴ全体をバックアップすることで、ホスト１２の処理は中断される。ホスト１２からフラッシュメモリ２２への書き込みは、バックアップＬＵＴ５２の更新中に中断される。ホスト１２を中断することで、一次ＬＵＴ５０をフラッシュしてバックアップＬＵＴ５２全体を更新する間に、一次ＬＵＴ５０が修正されないようにしている。制御モジュール１７は、分割フラッシュを実行することで、フラッシュイベント中のホスト１２の中断時間を最小限に抑えることができる。分割フラッシュの例は、図３から図８を参照して後で詳述する。
【００６２】
図１および図３のＬＵＴ状態ダイアグラム１２０は、分割されたフラッシュサイクル実装に基づくＬＵＴ状態シーケンスを示している。分割されたフラッシュとは、フラッシュイベント中に、一次ＬＵＴ５０の一部からバックアップＬＵＴ５２へとフラッシュすることを称する。分割される部分には、一次ＬＵＴ５０の１以上の入力が含まれていて良い。一次ＬＵＴ５０を任意の数の分割部分に分割することができ、各部分の頻度および更新順序は調節可能である。
【００６３】
ＬＵＴ状態ダイアグラム１２０は、タイムスロット１から１４を含む様々な時間における一次ＬＵＴ５０の状態を示す。一次ＬＵＴ５０は、６個の入力１０４を含むものとして示されている。６入力それぞれには、ＬＡＡとＰＡＡとが関連付けられている。ＬＡＡは、番号１から６で表され、テーブルの一列１０６に示されている。ＰＡＡは、タイムスロット１−１４それぞれにおける一次ＬＵＴ５０として示されている。
【００６４】
図３のＬＵＴ状態ダイアグラム１２０は、図２の状態ダイアグラム１００に類似しているが、ＬＵＴ状態ダイアグラム１２０は、分割されたフラッシュイベントを含んでいる。図示されている各分割フラッシュイベントは、一次ＬＵＴ５０の１／３をフラッシュメモリ２２へとフラッシュすることを含んでいる。４つのフラッシュイベント完了後の図３の一次ＬＵＴ５０は、２つのフラッシュイベント完了後の図２の一次ＬＵＴ５０と同じである（つまり、図２のＦＬＵＳＨ  Ｂと、図３のＦＬＵＳＨ  Ｄとが、１０、８、１２、９、５、１１という一次ＬＵＴ入力を有している）。
【００６５】
分割されたフラッシュイベントＦＬＵＳＨ  Ａ−Ｇは、それぞれタイムスロットの間に示されている。図示の実装例では、フラッシュイベントが、各２つのタイムスロットの組について行われている（または２つのタイムスロットごとに１回フラッシュイベントを行っている）。各フラッシュイベントにおいて６つの一次ＬＵＴ入力のうち２つがフラッシュされている。例えば、フラッシュイベントＦＬＵＳＨ  Ａでは、ＬＡＡ１、２およびＰＡＡ１、２を有する部分をフラッシュしている。これにより、フラッシュメモリにはフラッシュされた部分の更新されたバックアップが提供される。
【００６６】
一次ＬＵＴ５０を分割フラッシュすることによって、フラッシュイベント中のホストのパフォーマンスが瞬間的に落ちることを防止することができる。全サイクルフラッシュを、複数の小さいサイズの、または分割されたフラッシュイベントに分解することで、各フラッシュイベントにおいてホストが中断する時間を低減させたり、なくしたりすることができる。さらに、より少ないフラッシュ部分でホストの平均スループットを維持することができるようになり、同時に、ホストのパフォーマンス低下を最小限に抑えることができるようになる。図３の実装例において各部分をフラッシュする頻度は、図２の実装例において全サイクルまたは全ＬＵＴをフラッシュする頻度よりも多い。
【００６７】
フラッシュされる部分に関連付けられていない論理および物理アドレスへのホスト書き込み要求は、フラッシュイベント中に行うことができる。例えば、バックアップＬＵＴ５２の各部分は、バックアップＬＵＴの他の部分のＬＡＡおよび／またはＰＡＡにメタデータを書き込み、ユーザデータをフラッシュメモリ２２に書き込んでいる間に更新することができる。言い換えると、対応するバックアップＬＵＴ入力が、フラッシュイベントによる更新を受けていないフラッシュメモリ２２のＬＡＡおよび／または対応するＰＡＡにはデータを書き込むことができる。例えば、フラッシュメモリ２２のＬＡＡおよびＰＡＡ３−６には、フラッシュイベントＦＬＵＳＨ  Ａ中にも書き込みができる。
【００６８】
フラッシュされる部分に関連する論理および物理アドレスへのホスト書き込み要求は、その部分がフラッシュされている間中断される。ホスト１２は、フラッシュイベントの間にバックアップ中であるフラッシュメモリ２２のＬＡＡおよび／またはＰＡＡには書き込みができない。こうすることで、ＬＡＡおよびＰＡＡのマッピング関連付けをバックアップＬＵＴ５２でバックアップしている間は、一定のＬＡＡおよびＰＡＡをフラッシュメモリ２２に書き込めなくなる。
【００６９】
例えばタイムスロット１０で電力が喪失すると（破線１１０で示す）、一次ＬＵＴ５０を再構築する。一次ＬＵＴ５０は、次の電力ＯＮイベント中に、バックアップＬＵＴ５２とイベントログ５４'とに基づいて再構築される。制御モジュール１７が、イベントログ５４'をウォークすることなくフラッシュメモリ２２から揮発性メモリ２０に、セーブされている部分をアップロードした場合には、結果生じるＬＵＴは、それぞれ異なる時点の入力の組み合わせとなる（例えば、ＦＬＵＳＨ  Ｃ、Ｄ、Ｅの入力１０、８、１２、９、５、６）。このＬＵＴは、どのタイムスロットも正確に表していない（つまり、ＬＵＴはタイムコヒーレントではない）。
【００７０】
タイムコヒーレントではないＬＵＴは、ＬＵＴ依存メタデータの再構築プロセスで利用できない。この問題を解決するために、一次ＬＵＴ５０の更新された入力の履歴および／またはフラッシュされた部分の履歴を、イベントログ５４'経由で維持しておく。制御モジュールは、復元アルゴリズムに基づいてイベントログ５４'を利用して、タイムコヒーレントに一次ＬＵＴ５０を再構築する。一次ＬＵＴ５０は、一次ＬＵＴ５０を利用する前にＬＵＴ依存メタデータを再構築するためにタイムコヒーレント状態に更新される。復元アルゴリズムは、フラッシュメモリ２２に格納されていて、電力ＯＮイベント中に揮発性メモリ２０にアップロードされてもよいし、および／または、ＲＯＭ１８に格納されてもよい。復元アルゴリズムは、復元モジュール１７により実行される。
【００７１】
一次ＬＵＴ５０の再構築においては、バックアップＬＵＴ５２が揮発性メモリ２０にアップロードされ、一次ＬＵＴ５０が提供される。バックアップＬＵＴ５２の各部分は、それぞれ異なるタイムスロットでフラッシュされるので、これら部分は、それぞれ異なる時点のＬＵＴのそれぞれ異なる部分の状態を表している。この結果、一次ＬＵＴ５０は、最初にアップロードされた時点ではタイムコヒーレントではない。一次ＬＵＴ５０の状態をタイムコヒーレント状態に変更するために、制御モジュール１７は、イベントログ５４'にウォーク処理を行い、一次ＬＵＴ５０の入力を更新する。イベントログ５４'は、フラッシュメモリ２２に格納されていてよく、前の変更の順序で、ＬＡＡ−ＰＡＡ関連付けの変更を含んでいる。一次ＬＵＴ５０の入力は、イベントログ５４'に従って変更されるので、電力が喪失する前に入力が更新された順序で変更される。イベントログ５４'の各入力は、特定のＬＡＡに対して新たなＰＡＡを含む。新たなＰＡＡは、対応するタイムスロットにおいて一次ＬＵＴ５０の対応する更新された状態で示される。
【００７２】
図２および図３は、一次ＬＵＴ入力（または非ＬＵＴ依存メタデータ）のフラッシュを示している。非ＬＵＴ依存メタデータに加えて、ＬＵＴ依存メタデータ（または時変メタデータ）もまた、ＳＳＤ１４の動作中にフラッシュされる。ＬＵＴ依存メタデータのフラッシュイベントの例を図５および図６に示す。ＬＵＴ依存メタデータは、電力喪失後に復元することができ、イベントログ５４'をウォークすることを含んでよい。
【００７３】
イベントログ５４'はウォーク処理を受けることで揮発性メモリ２０のタイムコヒーレントなＬＵＴを構築した後で、ＬＵＴ依存メタデータを復元することができる。タイムコヒーレントなＬＵＴは、イベントログ５４'のウォーク処理の開始時間を決定して少なくとも分割部分サイクル全体をアップロードすることで、構築される。制御モジュール１７は、開始時間からイベントログをウォーク処理することで、ＬＵＴ依存メタデータをアップロードする前に、揮発性メモリ２０にタイムコヒーレントなＬＵＴを提供する。タイムコヒーレントなＬＵＴは、イベントログ５４'の少なくとも分割部分サイクル全体にウォーキング処理をしたとき提供される。一例としては、この開示時間がＦＬＵＳＨ  Ｃに関連付けられていてよい。イベントログのウォーク処理をＦＬＵＳＨ  Ｅに関連付けられている時間まで行うと、一次ＬＵＴ５０をタイムコヒーレントな状態とすることができる。
【００７４】
イベントログ５４'のウォーク処理中に、制御モジュール１７は、イベントログ５４'の入力に基づいて、および／または、バックアップＬＵＴ５２の分割部分に基づいて、一次ＬＵＴ５０の入力を更新する。一次ＬＵＴ５０の入力は、これら入力がイベントログ５４'で前に更新された順序で更新される。ひとたびタイムコヒーレントなＬＵＴが構築されると、タイムコヒーレントなＬＵＴが構築された後のイベントログの各入力に基づいてＬＵＴ依存メタデータを更新することができる。例えば、タイムコヒーレントなＬＵＴがＦＬＵＳＨ  Ｅという時点に構築されたとすると、制御モジュール１７は、ＦＬＵＳＨ  Ｅの後からイベントログ５４'に対するウォーク処理を続けて、一次ＬＵＴ入力およびＬＵＴ依存メタデータを修正する。
【００７５】
図１および図４のＬＵＴ状態ダイアグラム１５０は、分割されたフラッシュサイクル実装のためのタイムコヒーレントなＬＵＴ時間を示している。ＬＵＴ状態ダイアグラム１５０は、タイムスロット１から１４を含む様々な時点における一次ＬＵＴ５０の状態を示している。図示されている一次ＬＵＴ５０は、６個の入力１０４を含むが、一次ＬＵＴ５０は任意の数の入力を含むことができる。６個の入力それぞれ１０４には、ＬＡＡおよびＰＡＡが関連付けられている。ＬＡＡは、番号１から６で表され、テーブルの一列１０６に示されている。
【００７６】
非ＬＵＴ依存メタデータを、分割されたＬＵＴのフラッシュの助けを得てフラッシュする方法は幾つかある。方法はいずれも、それぞれに一次ＬＵＴ５０の再構築プロセスに影響を及ぼす可能性がある。図４は、６つの入力を有する一次ＬＵＴのＬＵＴ依存メタデータを復元するためにタイムコヒーレントなＬＵＴを提供するために格納されるＬＵＴ分割部分およびイベントログ入力の最大数を示す。
【００７７】
ＬＵＴ依存メタデータがフラッシュイベントの完全なサイクル１つおきに（または、５個のフラッシュ分割部分ごとに）復元される、と仮定すると、イベントログ入力のうち、少なくとも５つの分割されたフラッシュイベント（または全サイクルの分割部分を二倍したものから１を引いた数）がセーブされることになる。言い換えると、ＦＬＵＳＨ  Ａ−Ｅという部分は、ＦＬＵＳＨ  ＡからＦＬＵＳＨ  Ｅの間のタイムスロットにおいて、一次ＬＵＴ変更を含むフラッシュメモリ２２にセーブされる。ＦＬＵＳＨ  Ａ−Ｅの後であって、電力が喪失したときのタイムスロット（タイムスロット１０）の前の一次ＬＵＴの変更もフラッシュメモリ２２にセーブする。５つの分割された入力の格納は、３個の部分を有するＬＵＴテーブルの「最悪のケース」の例として考えることができよう。分割された入力の数は、ＬＵＴ依存メタデータが最後にフラッシュされたときに基づいて、５未満であってよい。
【００７８】
制御モジュール１７は、再構築アルゴリズムおよび／または再構築ファームウェアを利用して、イベントログ５４'のウォーク処理を開始する開始点としてＦＬＵＳＨ  Ａに戻ることができる。制御モジュール１７は、ＦＬＵＳＨ  Ａの部分をフラッシュメモリ２２から揮発性メモリ２０にアップロードしてから、タイムスロット１からイベントログ５４'にウォーク処理を行い、一次ＬＵＴ５０の入力を修正することができる。ＦＬＵＳＨ  Ａは、イベントログの最後または電力が喪失したときから、２つの完全フラッシュサイクル後から１つの分割部分を引いた時となる。フラッシュアルゴリズムは、ＳＳＤ１４の処理中に、フラッシュメモリ２２の２つの全サイクルから少なくとも１つの部分を差し引いた分を格納するものであってよい。フラッシュアルゴリズムは、フラッシュメモリ２２に格納されていて、電力ＯＮイベント中に揮発性メモリ２０にアップロードされてもよいし、および／または、ＲＯＭ１８に格納されてもよい。
【００７９】
ＦＬＵＳＨ  Ａの部分のアップロードに続いて、制御モジュール１７が、イベントログ５４'のウォーク処理を行って、次の変更（タイムスロット１、２におけるＬＡＡ２、３からＰＡＡ８、７へのアドレス変更の関連付け）をロードアップ（load up）する。次に、イベントログ５４'内にウォーク処理を行ってタイムスロット４、３におけるＬＡＡ１、４からＰＡＡ１０、９へのアドレス変更の関連付けを見つけて、ＦＬＵＳＨ  Ｂの部分をアップロードする。各部分がアップロードされ、一次ＬＵＴ５０への変更がイベントログ５４'に基づいて実行されると、一次ＬＵＴ５０（またはＲＡＭ）の入力が上書きされる。全サイクルを完了するために、一次ＬＵＴ５０のＦＬＵＳＨ  Ｃに対する部分を上書きする。この時点では（破線１５２で示されている）、一次ＬＵＴ５０がタイムコヒーレントとなっており、１０、８、７、９、５、６という入力値を有する。
【００８０】
タイムコヒーレントなＬＵＴに基づいてＬＵＴ依存メタデータを復元することができる。ＬＵＴ依存メタデータはさらに、ＦＬＵＳＨ  Ｃの時点またはＦＬＵＳＨ  Ｃに隣接する、またはその後のタイムスロットから始まるイベントログ入力に基づいて更新されてもよい。ＬＵＴ依存メタデータは、例えばタイムスロット５からタイムスロット１０のイベントログ５４'にウォーク処理を行うことで更新することができる。
【００８１】
ＦＬＵＳＨ  ＤおよびＥの各部分は、イベントログ５４'の残りにウォーク処理を行って一次ＬＵＴ５０を更新している間は、アップロードされない。例えば、ＦＬＵＳＨ  ＤおよびＥの各部分は、ＦＬＵＳＨ  ＤおよびＥの前のタイムスロットに関するイベントログ５４'から得られたＦＬＵＳＨ  ＤおよびＥに関するアドレスとしてはアップロードされない（例えばタイムスロット２、３、４、および６が、ＦＬＵＳＨ  ＤおよびＥに反映させる変更を提供している）。この理由から、ＦＬＵＳＨ  ＤおよびＥをアップロードするという処理は、イベントログ５４'のウォーク処理と重複する場合がある。
【００８２】
ＬＵＴ依存メタデータが存在しない場合には、電力ＯＮイベント中に、分割部分の完全なフラッシュサイクルを１つだけセーブ、アップロードする。例えばＦＬＵＳＨ  Ｃ、Ｄ、およびＥは、タイムスロット１０で電力が失われたときには、既に電力ＯＮイベント中に格納、アップロードされていてよい。これにより、一次ＬＵＴを再構築するフラッシュ部分の完全なサイクル１つが提供される。ＦＬＵＳＨ部分Ｃより前のフラッシュ部分（ＦＬＵＳＨ  Ａ、Ｂ）は、ＬＵＴ依存メタデータが存在していない場合には不要である。
【００８３】
図１および図５のＬＵＴ状態ダイアグラム１６０は、分割されたフラッシュサイクル実装について、非ＬＵＴ依存のメタデータおよびＬＵＴ依存のメタデータのフラッシュタイミングを同期させたＬＵＴ状態ダイアグラムである。ＬＵＴ状態ダイアグラム１６０は、タイムスロット１−１４を含む様々な時点における一次ＬＵＴ５０の状態を示す。一次ＬＵＴ５０は、６つの入力１０４を含むものとして示されている。６つの入力１０４それぞれに、ＬＡＡとＰＡＡとが関連付けられている。ＬＡＡは、番号１から６で表され、テーブルの一列１０６に示されている。
【００８４】
ＬＵＴ依存メタデータ（ボックス１６２で示す）は、各分割されたフラッシュイベント中にフラッシュされる。ＬＵＴ依存メタデータをフラッシュイベントごとにフラッシュすることで、制御モジュール１７は、一次ＬＵＴ５０の復元中の部分の完全なフラッシュサイクル１つだけ戻って参照することで、タイムコヒーレントなＬＵＴを提供することができる。ＬＵＴ依存メタデータは、例えばＦＬＵＳＨ  Ｅの部分の時点で利用可能となるので、タイムコヒーレントなＬＵＴを構築することができる。タイムコヒーレントなＬＵＴは、ＦＬＵＳＨ  ＣからＦＬＵＳＨ  Ｅという部分をロードして、ＦＬＵＳＨ  Ｃからイベントログ５４'の最後まで（または電源喪失に関連付けられたイベントログ入力まで）イベント５４'にウォーク処理を行うことで、構築することが可能である。
【００８５】
図１および図６のＬＵＴ状態ダイアグラム１７０は、分割されたフラッシュサイクル実装について、専用の依存メタデータのフラッシュタイミングを示すＬＵＴ状態ダイアグラムである。ＬＵＴ状態ダイアグラム１７０は、タイムスロット１−１４を含む様々な時点における一次ＬＵＴ５０の状態を示す。一次ＬＵＴ５０は、６つの入力１０４を含むものとして示されている。６つの入力１０４それぞれに、ＬＡＡとＰＡＡとが関連付けられている。ＬＡＡは、番号１から６で表され、テーブルの一列１０６に示されている。
【００８６】
図６の実装例は、排他的時間にＬＵＴ依存メタデータをフラッシュすることを含んでいる（ボックス１７２参照）。ＬＵＴ依存メタデータは、一次ＬＵＴ５０（または非ＬＵＴ依存メタデータ）の特定のＬＡＡとＰＡＡとのアドレス関連付け（または、タイムスロット６の行３から６における関連付け）がフラッシュされず、一次ＬＵＴ５０の他のＬＡＡとＰＡＡとのアドレス関連付け（例えば、タイムスロット６の行１および２における関連付け）がフラッシュされたようなとき、フラッシュされてよい。または、非ＬＵＴ依存メタデータおよびＬＵＴ依存メタデータにそれぞれのフラッシュ時間を与えても良い。一例では、非ＬＵＴ依存メタデータを、ＬＵＴ依存メタデータのフラッシュ前または後にフラッシュしてもよい。非ＬＵＴ依存メタデータまたはＬＵＴ依存メタデータに専用のフラッシュ時間を与えることにより、各フラッシュを行う時間が低減される。
【００８７】
示した実装例では、制御モジュール１７が、再構築アルゴリズムを利用してＦＬＵＳＨ  Ａの部分から一次ＬＵＴ５０の再構築を始めることで、ＦＬＵＳＨ  ＤによりタイムコヒーレントなＬＵＴが構築される。これにより、ＦＬＵＳＨ  Ｄの時点から始まるＬＵＴ依存メタデータを再構築するためのタイムコヒーレントなＬＵＴが提供される。ＦＬＵＳＨ  Ｄは、電力（または電力サイクル）が喪失してから一番最近に行ったＬＵＴ依存メタデータのフラッシュのことである。
【００８８】
別の実装例では、ＬＵＴ依存メタデータがフラッシュメモリ２２に存在しているとき、ＬＦＵＳＨ  Ａ−Ｃの各部分が、同じ期間および／または同時にアップロードされてよい。イベントログ５４'は、ＦＬＵＳＨ  Ａの時点であって、ＦＬＵＳＨ  Ａ−Ｃの部分のアップロードの後に、ウォーク処理を行われて良い。一次ＬＵＴは、部分ＦＬＵＳＨ  Ａ−Ｃをアップロードした当初は不正確であるかもしれないが、イベントログ５４'のウォーク処理によって、ＦＬＵＳＨ  Ｃの時点からタイムコヒーレントなＬＵＴが提供され、一次ＬＵＴ５０の入力が補正されて、タイムスロット１０で復元されたＬＵＴが提供される。イベントログ５４'は、上述したように、特定の時間の論理−物理アドレスマッピングに対する変更を含んでいる。イベントログのウォーク処理には、イベントログ５４'の入力で、一次ＬＵＴ５０の入力を更新する（または置き換える）ことが含まれる。ＬＵＴ依存メタデータの値は、一次ＬＵＴ５０における更新された入力に基づいて更新されてよい。更新された値には、ユーザデータおよび／またはシステムデータへのポインタ、データ記述子、不良情報、メモリブロック内のデータ量等を含む。
【００８９】
時間およびリソースを節約するための別の実装例として、一次ＬＵＴ５０を再構築するときにイベントログの入力を省く、というものがある。例えば図６では、ＦＬＵＳＨ  Ａの部分のアップロードの後に、タイムスロット１の変更を省いてもよい。ＦＬＵＳＨ  Ｂの部分のアップロードによってＬＡＡ３が上書きされ、ＰＡＡが３から７に変更されるので、タイムスロット１に関する変更は省くことができる。別の例として、枠で囲った領域１８０も省くことができるが、これは、この部分がＦＬＵＳＨ  ＢおよびＦＬＵＳＨ  Ｃにより説明がつくからである。
【００９０】
電力損失前であってＬＵＴ依存メタデータを最後にフラッシュしたとき以降に更新されたイベントログ入力は、省くことができない。例えばタイムスロット７−１０中に更新されたイベントログ入力を省くことができないが、これは、ＬＵＴ依存メタデータが、タイムスロット７−１０それぞれにおける一次ＬＵＴ５０の変更に基づいて更新されることがあるからである。これらイベントログ入力のいずれかを省いた場合、結果生じるＬＵＴ依存メタデータが全ての変更を反映せず、不正確になる場合がある。
【００９１】
図１のデータ格納システム１０は、幾つもの方法で実行することが可能であり、例示的な方法として図７および図８の方法が挙げられる。図７は、ＬＵＴを更新、バックアップする方法を示している。以下の処理は、主に図１、および図５−図６を参照して説明されるが、処理を変更して、本開示の他の実装例に応用することも容易である。処理は繰り返し実行することができる。方法は２００から始まる。
【００９２】
２０４で、制御モジュール１７は、ＬＵＴフラッシュ時間を決定する。ＬＵＴフラッシュ時間とは、バックアップＬＵＴ５２に一次ＬＵＴ５０の一部分を次にフラッシュする時間のことであってよい。制御モジュール１７は、定期的なフラッシュ間隔またはフラッシュ期間に基づいてフラッシュ時間を決定することができる。フラッシュ期間とは、分割されたフラッシュイベントの間の時間のことを指す。フラッシュ時間および／またはフラッシュ期間は、完全なフラッシュサイクル１つにおけるＬＵＴの分割部分の数、起動復元時間、最大ホスト待ち時間等に基づいて決定されてよい。
【００９３】
起動復元時間とは、電源が喪失した後であって、電力ＯＮイベント中に、一次ＬＵＴ５０を復元する時間のことである。フラッシュ期間が長くなると、一次ＬＵＴ５０を復元するためにイベントログ５４にセーブする入力数も多くなる。一次ＬＵＴ５０を復元するために処理が必要なイベントログ５４の入力数が増えると、起動復元時間も長くなる。さらに、フラッシュ期間が長くなると、フラッシュを行う機会が減る。フラッシュを行う頻度が少なくなると、一回のフラッシュイベントにフラッシュする一次ＬＵＴ５０の入力数が増えたり、および／または、一次ＬＵＴ５０を復元するために処理するイベントログ５４の入力数が増えたりする。１つのフラッシュイベント中にフラッシュする一次ＬＵＴ５０の入力数が多くなると、あるフラッシュイベント中に生じうるホスト待ち時間（または、ホストが停止する時間）も長くなる。
【００９４】
２０４では、ＬＵＴ依存メタデータのフラッシュ時間および／またはフラッシュ期間も決定されてよい。ＬＵＴ依存メタデータのフラッシュ時間および／またはフラッシュ期間は、非ＬＵＴ依存メタデータのフラッシュ時間および／またはフラッシュ期間に基づいて決定されてよい。例えば、ＬＵＴ依存メタデータのフラッシュ時間は、非ＬＵＴ依存メタデータのフラッシュ時間と同じに設定されても、異なるように設定されてもよい。
【００９５】
２０６で、制御モジュール１７は、処理２０８の前に、非ＬＵＴ依存メタデータのフラッシュ期間および／またはＬＵＴ依存メタデータのフラッシュ期間を待ってよい。２０８で、制御モジュール１７は、フラッシュする１以上のＬＵＴ部分、および／または、ＬＵＴ依存メタデータをフラッシュするか否か、を判断してよい。制御モジュール１７は、一定の順序で一次ＬＵＴ５０の各部分を循環してよく、前にフラッシュした部分に基づいて次にフラッシュする部分を決定してよい。
【００９６】
２１０で、制御モジュール１７は、選択した部分および／またはＬＵＴ依存メタデータをフラッシュする。ＬＵＴ依存メタデータは、図５に示すように、非ＬＵＴ依存メタデータがフラッシュされたときにフラッシュされてよい。２１２で、図６の実装例に基づいて、制御モジュール１７は、一次ＬＵＴ５０の全ての部分がフラッシュされたかを判断する。処理２１４は、全ての部分のフラッシュが終了したところで実行され、さもなくば処理２２０が実行される。
【００９７】
処理２１４で、制御モジュール１７は、フラッシュすべきＬＵＴ依存メタデータがあるかを判断する。処理２１６は、フラッシュすべきＬＵＴ依存メタデータがあるときに行われ、ないときには処理２２０が実行される。２１６で、制御モジュール１７は、処理２１８の前にＬＵＴ依存メタデータのフラッシュ期間を待つ。処理２１８では、ＬＵＴ依存メタデータをフラッシュする。
【００９８】
２２０で、制御モジュール１７は、電力停止要求があるかを判断する。処理２２２は、電力停止要求を受けたときに実行され、受けていない場合には制御モジュール１７は処理２０４に戻る。２２２で、電力停止イベント前に、ＬＵＴ部分全てを揮発性メモリ２０からフラッシュメモリ２２にフラッシュして、バックアップＬＵＴ５２を更新する。２２４で、ＳＳＤ１４の電力をＯＦＦにする。方法は２２６で終了してよい。
【００９９】
図８は、ＬＵＴを復元する方法を示す。以下の処理は、図１、図５から図６の実装に関するものであるが、これら処理は本開示の他の実装例に利用可能なように変更することも容易である。処理は繰り返し実行することができる。方法は３００から始まる。
【０１００】
３０２で、ＳＤＤ１４の電源をＯＮにする。３０４で、制御モジュール１７は、ＳＳＤ１４の電力が正常に停止されたかを判断する。ＳＳＤ１４は、ＳＳＤ１４の電源停止前に一次ＬＵＴ５０全体のフラッシュメモリ５２へのフラッシュ（ダウンロード）が完了して、ダウンロードの後に一次ＬＵＴになんら変更がなかったときに、正常に停止されたと判断する。制御モジュール１７は、イベントログ５４の入力の、バックアップＬＵＴ５２の入力との比較に基づいて、正常な電力停止が行われたかを判断する。例えば、イベントログ５４の最後の所定数の入力（例えばフラッシュされた部分の完全な１サイクルに関連付けられている入力数）が、バックアップＬＵＴ５２に反映されているとき、ＳＳＤ１４の正常な電源停止が行われたということでよい。処理３０６は、ＳＳＤ１４が正常電力停止したときに行われ、さもなくば処理３１０が実行される。
【０１０１】
３０６で、制御モジュール１７は、非ＬＵＴ依存メタデータおよびＬＵＴ依存メタデータを、フラッシュメモリ２２から揮発性メモリ２０にアップロードする。方法は３０８で終了してよい。
【０１０２】
３１０で、制御モジュール１７は、ＬＵＴ依存メタエータが存在しているかを判断する。処理３１２は、ＬＵＴ依存メタデータがないときに実行され、あるときには処理３２０を実行する。
【０１０３】
３１２で、制御モジュール１７は、バックアップＬＵＴ５２の第１の部分をアップロードして、第１（アップロード）部分が最後にフラッシュされた時点からイベントログ５４のウォーク処理を開始する。第１の部分とは、イベントログ５４の最後から、少なくとも完全な１つのフラッシュサイクル分前の部分のこととする。３１３で、アップロードタイマ６０は、イベントログ５４の現在の入力を指し示すために設定、または利用されてよい。アップロードタイマ６０の最初のアップロード時間は、第１の部分の時間および／または、第１の部分に隣接する、またはその後のタイムスロットに対応していてよい。
【０１０４】
３１４で、一次ＬＵＴ５０の論理−物理アドレス関連付けを、アップロード時間について、イベントログ５４に基づいて更新する、および／または、次のＬＵＴ部分を、フラッシュメモリ２２から揮発性メモリ２０にアップロードする。３１６で、制御モジュール１７は、イベントログ５４の最後に到達したかを判断する。イベントログ５４の最後に到達していない場合には、処理３１７を実行し、到達した場合には、処理３１８を実行する。３１７で、アップロード時間を増分して、次のタイムスロットまたはフラッシュ部分の時間を参照させるようにする。
【０１０５】
処理３２０で、制御モジュール１７は、電力が喪失する前に最後にＬＵＴ依存メタデータがフラッシュされた時間（またはタイムスロット）を判断する。この時点は、最後の依存メタデータタイムスロットとして称される場合がある。３２２で、制御モジュール１７は、最後の依存メタデータタイムスロットの前の、少なくとも完全なフラッシュサイクル１つ分であるタイムスロットを決定する。このタイムスロットは、完全なフラッシュサイクルタイムスロットと称される場合がある。
【０１０６】
３２４で、制御モジュール１７は、完全なフラッシュサイクルタイムスロットの前の最初の部分をアップロードして、完全なフラッシュサイクルタイムスロットでイベントログ５４のウォーク処理を始めてよい。３２５で、アップロードタイマ６０を利用、セットすることで、イベントログ５４の現在の入力を指し示す。アップロードタイマ６０の最初のアップロード時間は、第１の部分の時間および／または第１の部分に隣接する、またはその後のタイムスロットに対応していてよい。３２６で、一次ＬＵＴ５０の論理−物理アドレス関連付けを、アップロード時間について、イベントログ５４に基づいて更新する、および／または、次のＬＵＴ部分を、フラッシュメモリ２２から揮発性メモリ２０にアップロードする。
【０１０７】
３２８で、制御モジュール１７は、複数の部分からなる完全なサイクル１つをアップロードしたかを判断する。処理３２７は、部分の完全なサイクル１つがアップロードされていない場合に行われ、アップロードされている場合には処理３２０が実行される。タイムコヒーレントなＬＵＴは、部分の完全なサイクル１つがアップロードされ、制御モジュール１７が第１の部分から、部分の完全なサイクル１つまで、イベントログ５４にウォーク処理を行ったところで、揮発性メモリ２０に存在することになる。例えば図６では、第１の部分がＦＬＵＳＨ  Ａに関連付けられていてよく、最後の部分がＦＬＵＳＨ  Ｃに関連付けられていてよい。ＦＬＵＳＨ  Ａの時点からＦＬＵＳＨ  Ｃの時点までイベントログ５４にウォーク処理を行った結果得られる一次ＬＵＴ５０がタイムコヒーレントなＬＵＴとなる。
【０１０８】
３３０で、ＬＵＴ依存メタデータを、タイムコヒーレントなＬＵＴに基づいてアップロードする。３３２で、制御モジュール１７は、イベントログ５４の最後に到達したかを判断する。処理３３４は、イベントログ５４の最後に到達していないときに実行され、到達した場合には方法は３３６で終了してよい。３３４で、制御モジュール１７は、一次ＬＵＴ５０内の論理−物理アドレス関連付けを、イベントログ５４に基づいて更新して、および／または、イベントログ５４に基づいてＬＵＴ依存メタデータを更新する。３３５で、アップロードタイマ６０を増分する。
【０１０９】
図７および図８における上述した処理は、例示を意図しており、処理は、連続して実行してもよいし、同期させてもよいし、同時に行っても良いし、重複する期間に継続実行も可能であり、用途に応じては別の順序で行うこともできる。
【０１１０】
上述した実装例により、ＲＡＭにＬＵＴが格納される。ＬＵＴのデータは、電力が失われると消去され、および／または、失われる。ＬＵＴのデータを復元するために、上述した実装例は、不揮発性メモリにバックアップＬＵＴおよびイベントログを維持する。バックアップＬＵＴは、電力が失われる前に定期的に更新されてよい。ＬＵＴは、バックアップＬＵＴおよびイベントログに基づいてＲＡＭに復元される。ＬＵＴは、イベントログにウォーク処理を行うことで電力喪失前にＬＵＴの最新の状態でＲＡＭに復元される。これにより、ＬＵＴのバックアップを取る間に不揮発性メモリにデータを書き込むことに関するホスト待ち時間を最小限にすることができる。ＬＵＴに対するバックアップおよび復元に加えて、他のメタデータ（ＬＵＴ依存メタデータ）をバックアップして復元することもできる。
【０１１１】
本開示について広義の教義を様々な形態で実装することができる。従って、本開示では特定の例が含まれているとしても、本開示の真の範囲は、これに限定はされず、他の変形例も図面、明細書、および以下の請求項を読むことで明らかとなる。
［項目１］
論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を格納する第１のメモリと、
上記論理アドレスと上記物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴを格納する第２のメモリと、
上記第１のメタデータを更新し、上記第１のメタデータに基づいて、其々所定の時点に上記第２のメタデータの部分を更新する制御モジュールと
を備え、
上記部分は、上記第２のＬＵＴの所定数の入力のことである、システム。
［項目２］
上記第１のメモリは揮発性メモリであり、
上記第２のメモリは不揮発性メモリである、項目１に記載のシステム。
［項目３］
上記制御モジュールは、所定の間隔で第３のメタデータを更新し、
上記第３のメタデータは、上記第１のメタデータまたは上記第２のメタデータの少なくとも一方に依存しており、
上記第３のメタデータは、ユーザデータのポインタ、システムデータのポインタ、メモリのブロックに格納されているデータ量、または不良情報のうち、少なくとも１つを含む、項目１に記載のシステム。
［項目４］
上記第３のメタデータは、上記第２のＬＵＴのタイムコヒーレントなバージョンに依存している、項目３に記載のシステム。
［項目５］
上記制御モジュールは、上記第２のメタデータを更新したときに基づいて上記第３のメタデータを更新する、項目３に記載のシステム。
［項目６］
上記制御モジュールは、上記第１のメモリ内の上記第１のメタデータの部分を、上記第２のメモリ内の上記第１のメタデータの他の部分をバックアップしている間に更新する、項目１に記載のシステム。
［項目７］
上記制御モジュールは、上記第２のメモリ内の上記第１のＬＵＴの第２の部分をバックアップしている間に、上記第２のメモリにユーザデータを書き込んで、上記第１のメモリ内の上記第１のＬＵＴの第１の部分を更新する、項目１に記載のシステム。
［項目８］
電力ＯＮイベント中に、上記制御モジュールは、イベントログの入力に基づいて上記第１のメモリの部分を更新して、上記第１のメモリに上記第２のメモリの部分をアップロードして、
上記イベントログの上記入力には、上記システムのドライブの電力が失われる前に実行された上記物理アドレスおよび上記論理アドレスのうち選択されたものの間のメタデータの変更が含まれる、項目１に記載のシステム。
［項目９］
上記制御モジュールは、上記第１のメタデータの部分のフラッシュ時間を決定して、フラッシュイベント間であるフラッシュ期間分待ち、上記フラッシュ時間のうちの対応する時間において、上記第１のメモリから上記第２のメモリに上記第１のメタデータをコピーすることで、上記第１のメタデータの上記部分をフラッシュする、項目１に記載のシステム。
［項目１０］
論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を格納する第１のメモリと、
上記論理アドレスと上記物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴを格納する第２のメモリと、
電力ＯＮイベント中に、上記第２のメモリの部分を上記第１のメモリにアップロードして、イベントログの入力に基づいて上記第１のメモリの部分を更新する制御モジュールと
を備え、
上記イベントログの上記入力には、上記電力ＯＮイベントの前に実行された上記物理アドレスおよび上記論理アドレスのうち選択されたものの間のメタデータの更新が含まれる、システム。
［項目１１］
上記電力ＯＮイベント中であって、ＬＵＴ依存メタデータが上記第２のメモリに格納されていないときに、上記制御モジュールは、上記第２のメモリから上記第１のメモリに、少なくとも上記部分の完全なサイクル１つ分をアップロードする、項目１０に記載のシステム。
［項目１２］
上記電力ＯＮイベント中に、上記制御モジュールは、
上記システムの正常な電力停止が行われたかを判断して、正常な電力停止とは、上記第１のＬＵＴが、上記システムの最後の電力停止イベントの前に上記第２のメモリにフラッシュされることであり、
上記システムの正常な電力停止が行われたときには、上記第２のメタデータを上記第２のメモリから上記第１のメモリに転送して、上記イベントログにウォーク処理を行わず、
上記システムの正常な電力停止が行われなかったときには、上記第２のメタデータを上記第２のメモリから上記第１のメモリに転送して、上記イベントログにウォーク処理を行う、項目１０に記載のシステム。
［項目１３］
上記制御モジュールは、ソリッドステートドライブの電力が失われる前に更新された上記部分の少なくとも完全なフラッシュサイクル１つをアップロードして、
上記部分の上記少なくとも完全なフラッシュサイクル１つは、上記第２のメモリから上記第１のメモリにアップロードされ、上記第１のメタデータは、上記部分の上記少なくとも完全なフラッシュサイクル１つを含み、
上記制御モジュールは、上記部分の上記少なくとも完全なフラッシュサイクル１つの第１の部分がフラッシュされたときから、上記ソリッドステートドライブの上記電力が失われたときの上記イベントログのタイムスロットへと、上記第１のメタデータを更新するべく、上記イベントログにウォーク処理を行い、
上記電力ＯＮイベントは、上記ソリッドステートドライブの上記電力が失われた後に行われる、項目１０に記載のシステム。
［項目１４］
上記制御モジュールは、上記部分を上記第２のメモリから上記第１のメモリにアップロードして、上記第１のメタデータは、上記アップロードされた部分を含み、上記アップロードされた部分は、ＬＵＴ依存メタデータのフラッシュイベントの前の、および、ソリッドステートドライブの電力が失われたときの上記イベントログのタイムスロットの前の、上記部分の少なくとも完全なフラッシュサイクル１つを含み、
上記制御モジュールは、上記部分の上記完全なフラッシュサイクル１つの第１の部分のタイムスロットから、上記ソリッドステートドライブの上記電力が失われたときの上記イベントログの上記タイムスロットへと、上記第１のメタデータを更新するべく、上記イベントログにウォーク処理を行い、
上記電力ＯＮイベントは、上記ソリッドステートドライブの上記電力が失われた後に行われる、項目１０に記載のシステム。
［項目１５］
上記電力ＯＮイベント中に、上記制御モジュールは、
上記部分の完全なフラッシュサイクル１つの第１の部分を上記第２のメモリから上記第１のメモリにアップロードして、
上記イベントログの入力に基づいて、上記第１のメモリの上記部分の上記完全なサイクル１つのロードおよび更新を含む、ソリッドステートドライブの電力停止サイクルに関連付けられたタイムスロットまで第１のタイムスロットから、上記イベントログにウォーク処理を行い、
上記第１のタイムスロットから上記部分の上記完全なサイクル１つのタイムスロットまで上記イベントログにウォーク処理を行っている間、上記制御モジュールは、イベントログ入力を省いて、上記省いたイベントログ入力に関連付けられている上記第１のメモリの入力を更新しない、項目１０に記載のシステム。
［項目１６］
論理アドレスと物理アドレスとの間の第１のマッピングを含む第１のメタデータを有する第１のルックアップテーブル（ＬＵＴ）を第１のメモリに格納する段階と、
上記論理アドレスと上記物理アドレスとの間の第２のマッピングを含む第２のメタデータを有する第２のＬＵＴを第２のメモリに格納する段階と、
制御モジュールを通じて上記第１のメタデータを更新し、上記第１のメタデータに基づいて、其々所定の時点に上記第２のメタデータの部分を更新する段階と
を備え、
上記部分は、上記第２のＬＵＴの所定数の入力のことである、方法。
［項目１７］
上記第２のメモリに、第３のメタデータを格納する段階をさらに備え、
上記第３のメタデータは、上記第１のメタデータまたは上記第２のメタデータのうち少なくとも一方に依存しており、
上記其々所定の時点において、上記第３のメタデータを更新する段階をさらに備える、項目１６に記載の方法。
【図１】
0005850048.tif 000002
【図２】
0005850048.tif 000003
【図３】
0005850048.tif 000004
【図４】
0005850048.tif 000005
【図５】
0005850048.tif 000006
【図６】
0005850048.tif 000007
【図７】
0005850048.tif 000008
【図８】
0005850048.tif 000009