(57)【特許請求の範囲】
【請求項１】
少なくとも1回の更新操作を実行することによって、第１ブロックのデジタルデータ（６０１）を更新する方法であって、前記更新操作は全体として成功あるいは失敗となり、前記更新する方法において、
前記第１ブロックのデジタルデータに対する前記更新操作であって、全体として成功あるいは失敗となる前記更新操作の全てに共通する第１のトランザクション識別子（ＴＩＤ）を活性化するステップ（７０１）と、
前記第１ブロックのデジタルデータに対する前記更新操作であって、全体として成功あるいは失敗となる前記更新操作の全てを実行するステップ（７０３）と、
論理フラッシュメモリ装置（１１０１）内のメモリ位置の状態インジケータを前記メモリ位置に対して書込み処理が行われていることを示す値に設定するステップ（７０４）と、
更新された前記第１ブロックのデジタルデータを前記第１のトランザクション識別子に関連づける値と共に、前記更新された第１ブロックのデジタルデータを前記論理フラッシュメモリ装置（１１０１）の前記メモリ位置に記憶するステップ（７０７）と、
前記状態インジケータを前記メモリ位置に対して書込み済みであることを示す値に設定するステップ（７０８）と、
前記第１のトランザクション識別子を非活性化するステップ（７１０）とをこの順番通りに備えることを特徴とする方法。
【請求項２】
請求項１に記載の方法において、
第１のトランザクション識別子を活性化する前記ステップ（７０１）が、活性化されたトランザクション識別子のメモリ位置に割り当てられた不揮発性メモリ位置（８５０）に前記第１のトランザクション識別子を記憶するサブステップを備えることを特徴とする方法。
【請求項３】
請求項２に記載の方法において、
第１のトランザクション識別子を活性化する前記ステップ（７０１）が、
ａ）活性化されたトランザクション識別子のメモリ位置に割り当てられた第１の不揮発性メモリ位置（５０１）の内容のコピーを作業領域メモリ（５０３）に読み込むサブステップ（５５１）と、
ｂ）活性化されるべき第１のトランザクション識別子（６０４）と共に前記作業領域メモリ（５０３）に読み込まれるコピーを補い完全なものにして更新コピーを生成するサブステップ（５５２）と、
ｃ）第２の不揮発性メモリ位置（５０２）の状態インジケータ（５２２）を、前記メモリ位置に対して書込処理が行われていることを示す第１の値に設定するサブステップ（５５３）と、
ｄ）前記第２の不揮発性メモリ位置（５０２）のデータブロック識別子（５２１）が、前記第１の不揮発性メモリ位置（５０１）の対応するデータブロック識別子（５１１）と同一になるように設定を行うサブステップ（５５４）と、
ｅ）前記更新コピーを前記第２の不揮発性メモリ位置（５０２）に書き込むサブステップ（５５５）と、
ｆ）前記第２の不揮発性メモリ位置（５０２）の前記状態インジケータ（５２２）を、前記メモリ位置が有効データを含むことを示す第２の値に設定するサブステップ（５５６）と、
ｇ）アドレスマッピング実体を更新し、前記第２の不揮発性メモリ位置（５０２）の前記データブロック識別子（５２１）を前記第２の不揮発性メモリ位置（５０２）の物理アドレスに関連付けるサブステップ（５５７）と、
ｈ）前記第１の不揮発性メモリ位置（５０１）の状態インジケータ（５１２）を、前記メモリ位置が無効データを含んでいることを示す第３の値に設定するサブステップとからなることを特徴とする方法。
【請求項４】
請求項３に記載の方法において、
前記サブステップｅ）が、前記更新済みのコピーと共に、前記第１の不揮発性メモリ位置（５０１）の対応する周期的インジケータ値から１だけ進んだ周期的インジケータ値を前記第２の不揮発性メモリ位置（５０２）に書き込むサブステップを備えることを特徴とする方法。
【請求項５】
請求項２に記載の方法において、
前記第１のトランザクション識別子を非活性化する前記ステップ（７１０）が、活性化しているトランザクション識別子のメモリ位置に割り当てられた前記不揮発性メモリ位置（８５０）から前記第１のトランザクション識別子を削除するサブステップを備えることを特徴とする方法。
【請求項６】
請求項５に記載の方法において、
前記第１のトランザクション識別子を削除する前記サブステップが、
ａ）活性化されているトランザクション識別子のメモリ位置に割り当てられた第２の不揮発性メモリ位置（５０２）の内容のコピーを作業領域メモリ（５０３）に読み込むサブステップ（５５１）と、
ｂ）非活性化されるべき第１のトランザクション識別子を作業領域メモリ（５０３）に読み込まれたコピーから削除して更新コピーを生成するサブステップ（５５２）と、
ｃ）第３の不揮発性メモリ位置の状態インジケータを、前記メモリ位置に対して書込みが行われていることを示す第１の値に設定するサブステップ（５５３）と、
ｄ）前記第３の不揮発性メモリ位置のデータブロック識別子が、前記第２の不揮発性メモリ位置（５０２）の対応するデータブロック識別子と同一になるように設定を行うサブステップ（５５４）と、
ｅ）前記更新コピーを前記第３の不揮発性メモリ位置に書き込むサブステップ（５５５）と、
ｆ）前記第３の不揮発性メモリ位置の前記状態インジケータを、前記メモリ位置が有効データを含むことを示す第２の値に設定するサブステップ（５５６）と、
ｇ）アドレスマッピング実体を更新し、前記第３の不揮発性メモリ位置の前記データブロック識別子を前記第３の不揮発性メモリ位置の物理アドレスに関連付けるサブステップ（５５７）と、
ｈ）前記第２の不揮発性メモリ位置（５０２）の状態インジケータ（５２２）を、前記メモリ位置が無効データを含んでいることを示す第３の値に設定するサブステップ（５５８）とからなることを特徴とする方法。
【請求項７】
請求項６に記載の方法において、
前記サブステップｅ）が、前記更新コピーと共に、前記第２の不揮発性メモリ位置（５０２）の対応する周期的インジケータ値から１だけ進んだ周期的インジケータ値を前記第３の不揮発性メモリ位置に書き込むサブステップを備えることを特徴とする方法。
【請求項８】
請求項２に記載の方法において、
前記第１のトランザクション識別子を非活性化する前記ステップ（７１０）が、前記第１のトランクザクション識別子を非活性化中のトランザクション識別子のメモリ位置に割り当てられた不揮発性メモリ位置に記憶するサブステップを備えることを特徴とする方法。
【請求項９】
請求項１に記載の方法において、
更新操作を実行し、更新した第１ブロックのデジタルデータを記憶する前記ステップが、
ａ）更新されるデータのメモリ位置に割り当てられた第１の不揮発性メモリ位置の内容のコピーを作業領域メモリに読み込むサブステップ（７０２）と、
ｂ）前記作業領域メモリに読まれたコピーを更新して更新コピーを生成するサブステップ（７０３）と、
ｃ）第２の不揮発性メモリ位置の状態インジケータを、前記メモリ位置に対して書込みが行われていることを示す第１の値に設定するサブステップ（７０４）と、
ｄ）前記第２の不揮発性メモリ位置のデータブロック識別子が、前記第１の不揮発性メモリ位置の対応するデータブロック識別子と同一になるように設定を行うサブステップ（７０５）と、
ｅ）前記活性化された第１のトランザクション識別子を前記第２の不揮発性メモリ位置に書き込むサブステップ（７０６）と、
ｆ）前記更新コピーを前記第２の不揮発性メモリ位置に書き込むサブステップ（７０７）と、
ｇ）前記第２の不揮発性メモリ位置の前記状態インジケータを、前記メモリ位置が、一貫して成功あるいは失敗となる複数の更新操作の一部として更新されたデータを含むことを示す第２の値に設定するサブステップ（７０８）と、
ｈ）一貫して成功あるいは失敗となる前記複数の更新操作の全てが実行されたかどうかをチェックし、全てが実行されていない場合、前記ステップａ）からの処理を再び開始し、前記ステップｃ）、ｄ）、ｅ）、ｆ）及びｇ）において、異なる第２の不揮発性メモリ位置を関係させるサブステップ（７０９）とからなることを特徴とする方法。
【請求項１０】
請求項９に記載の方法において、
ｉ）アドレスマッピング実体を更新し、不揮発性メモリ位置の各データブロック識別子を前記不揮発性メモリ位置の物理アドレスに関連付けるサブステップ（７１１）と、
ｊ）前記サブステップａ）の対象であった各不揮発性メモリ位置の状態インジケータを、前記メモリ位置が無効データを含んでいることを示す第３の値に設定するサブステップ（７１２）と、
ｋ）各第２の不揮発性メモリ位置の前記状態インジケータを、前記メモリ位置が有効データを含むことを示す第４の値に設定するサブステップ（７１３）とをさらに備えることを特徴とする方法。
【請求項１１】
請求項１に記載の方法において、
一貫して成功あるいは失敗となる更新操作全てに共通する第１のトランザクション識別子を活性化する前記ステップ（７０１）と、前記第１のトランザクション識別子を非活性化する前記ステップ（７１０）との間のステップとして、
前記第１ブロックのデータに関係する前記更新操作と共に、一貫して成功あるいは失敗となり、前記第１ブロックのデータ以外の他のブロックのデータに関係する更新操作を実行するステップ（７０３）と、
各更新ブロックのデータを前記第１のトランザクション識別子に関連付ける値と共に、各更新ブロックのデジタルデータを論理フラッシュメモリ装置に記憶するステップ（７０７）とをさらに備えることを特徴とする方法。
【請求項１２】
請求項１に記載の方法において、
一貫して成功あるいは失敗となり、前記第１ブロックのデータに関係する更新操作の全てを実行する前記ステップが、前記第１のトランザクション識別子（ＴＩＤ＃Ａ）に関係する更新操作の対象として第１ブロックのデータの第１の部分（Ａ１）を選択するサブステップを備えることを特徴とする方法。
【請求項１３】
請求項１２に記載の方法において、
前記第１ブロックのデータ（８００）に関係すると共に、一貫して成功あるいは失敗となるが、前記第１のトランザクション識別子（ＴＩＤ＃Ａ）に関連した更新操作に関して必ずしも一貫して成功あるいは失敗となる必要のない複数の更新操作に共通する第２のトランザクション識別子（ＴＩＤ＃Ｂ）を活性化するステップと、
前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）に関連する更新操作の対象として、前記第１の部分（Ａ1）と重ならない前記第１ブロックのデータの第２の部分（Ｂ1）を選択するステップと、
前記第１ブロックのデータに関係し、前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）に関連付けられると共に、一貫して成功あるいは失敗となる更新操作全てを実行するステップと、
前記第１のトランザクション識別子（ＴＩＤ＃Ａ）の１つに関連付けられると共に、前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）に関連付けられた更新操作の前に完了する更新操作の更新結果（Ａ２）を、前記第２のトランザクション識別子に関連付けられた更新操作の作用を受けるデータブロックのコピーに転送するステップと、
前記更新された第１ブロックのデータを前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）に関連付ける値と共に、前記更新された第１ブロックのデジタルデータを論理フラッシュメモリ装置に記憶するステップと、
前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）を非活性化するステップとをさらに備えることを特徴とする方法。
【請求項１４】
請求項１３に記載の方法において、
前記更新された第１ブロックのデータを前記第１のトランザクション識別子（ＴＩＤ＃Ａ）に関連付ける値と共に、前記更新された第１ブロックのデジタルデータを論理フラッシュメモリ装置に記憶するステップと、前記更新された第１ブロックのデータを前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）に関連付ける値と共に、前記更新された第１ブロックのデジタルデータを論理フラッシュメモリ装置に記憶するステップとが、
ａ）第１の不揮発性メモリ位置（８１０）の状態インジケータを、前記メモリ位置に対して書込みが行われていることを示す第１の値（Ｗ）に設定するサブステップと、
ｂ）前記第１のトランザクション識別子（ＴＩＤ＃Ａ）の１つに関連付けられ、前記第１のトランザクション識別子の他の１つに関連した更新操作の前に完了する更新操作によって生じた更新コピーを、前記第１の不揮発性メモリ位置（８１０）に書込むサブステップと、
ｃ）前記サブステップｂ）で書き込まれた更新コピーを生成した更新操作に関連する第１のトランザクション識別子（ＴＩＤ＃Ａ）を、前記第１の不揮発性メモリ位置（８１０）に書込むサブステップと、
ｄ）前記第１の不揮発性メモリ位置（８１０）の前記状態インジケータを、前記メモリ位置が、一貫して成功あるいは失敗となる複数の更新操作の一部として更新されたデータを含むことを示す第２の値（Ｔ）に設定するサブステップと、
ｅ）前記サブステップｂ）で書き込まれた更新コピーを生成した更新操作に関連する第１のトランザクション識別子（ＴＩＤ＃Ａ）を非活性化するサブステップと、
ｆ）そこから更新処理の対象としてのブロックデータがとられた前記不揮発性メモリ位置（８００）の状態インジケータを、前記メモリ位置が無効なデータを含んでいることを示す第３の値（Ｄ）に設定するサブステップと、
ｇ）第１の不揮発性メモリ位置（８１０）の前記状態インジケータを、前記メモリ位置が有効データを含むことを示す第４の値（Ｖ）に設定するサブステップと、
ｈ）第２の不揮発性メモリ位置（８２０）の状態インジケータを、前記メモリ位置に対して書込みが行われていることを示す第１の値（Ｗ）に設定するサブステップと、
ｉ）前記第２のトランザクション識別子（ＴＩＤ＃Ｂ）の中で活性化中の残りの１つに関連付けられた更新操作によって生成された更新コピーを前記第２の不揮発性メモリ位置（８２０）に書込むサブステップと、
ｊ）前記サブステップｉ）で書込まれた更新コピーを生成した更新操作に関連する第２のトランザクション識別子（ＴＩＤ＃Ｂ）も前記第２の不揮発性メモリ位置（８２０）に書き込むサブステップと、
ｋ）前記第２の不揮発性メモリ位置（８２０）の前記状態インジケータを、前記メモリ位置が、一貫して成功あるいは失敗となる複数の更新操作の一部として更新されたデータを含むことを示す第２の値（Ｔ）に設定するサブステップと、
ｌ）前記サブステップｉ）で書き込まれた更新コピーを生成した更新操作に関連する第２のトランザクション識別子（ＴＩＤ＃Ｂ）を非活性化するサブステップと、
ｍ）前記第１の不揮発性メモリ位置（８１０）の前記状態インジケータを、前記メモリ位置が無効なデータを含んでいることを示す第３の値（Ｄ）に設定するサブステップと、
ｎ）前記第２の不揮発性メモリ位置（８２０）の前記状態インジケータを、前記メモリ位置が有効データを含むことを示す第４の値（Ｖ）に設定するサブステップとを備えることを特徴とする方法。
【請求項１５】
請求項１に記載の方法において、論理フラッシュメモリ装置に基づくファイルシステムでシステム故障から復旧する方法が、
活性化されているトランザクション識別子のリスト（８５０）から、前記システム故障が発生した時に何れのトランザクション識別子が活性化されているかをチェックするステップと、
前記システム故障発生時に活性化されていた１つのトランザクション識別子に関連付ける値を含むデータブロックの位置を見つけるために物理メモリ位置をチェックし、そのようなデータブロックを含む各不揮発性メモリ位置の状態インジケータを前記メモリ位置が無効データを含むことを示す値に設定するステップとからなることを特徴とする方法。
【請求項１６】
請求項１５に記載の方法において、
同一のデータブロック識別子（６０２）がデータブロック対内の各データブロックに出現し、
前記データブロック対内のどのデータブロックも前記システム故障発生時に活性化されていた１つのトランザクション識別子に関連付けられず、
前記データブロック対内の第１ブロックのデータが、前記メモリ位置が有効データを含むことを示す状態インジケータ（６０３）を有するメモリ位置に記憶され、
前記データブロック対内の第２ブロックのデータが、前記メモリ位置が一貫して成功あるいは失敗となる複数の更新操作の一部として更新されたデータを含むことを示す状態インジケータ（６０３）を有するメモリ位置に記憶される、データブロック対の位置を見つけるために、物理メモリ位置をチェックするステップと、
１対のデータブロック内の第１ブロックのデータを含む各不揮発性メモリ位置の状態インジケータ（６０３）を、前記メモリ位置が無効データを含むことを示す値（Ｄ）に設定するステップと、
１対のデータブロック内の第２ブロックのデータを含む各不揮発性メモリ位置の状態インジケータ（６０３）を、前記メモリ位置が有効データを含むことを示す値（Ｖ）に設定するステップとを含むことを特徴とする方法。
【請求項１７】
請求項１５に記載の方法において、
前記システム故障発生時に活性化されていた１つのトランザクション識別子に関連付けられてなく、
メモリ位置が一貫して成功あるいは失敗となる複数の更新操作の一部として更新されたデータを含むことを示す状態インジケータ（６０３）を有する前記メモリ位置に記憶される、データブロックの位置を見つけるために物理メモリ位置をチェックするステップと、
そのようなデータブロックを含む各不揮発性メモリ位置の状態インジケータ（６０３）を、前記メモリ位置が有効データを含むことを示す値（Ｖ）に設定するステップとを含むことを特徴とする方法。
【請求項１８】
請求項１５に記載の方法において、
活性化されているトランザクション識別子（８５０）のリストから、システム故障発生時に何れのトランザクション識別子が活性化されていたかをチェックする前記ステップが、
ａ）活性化されているトランザクション識別子のリスト及びそのメモリ位置が有効データを含むことを示す状態インジケータを有する、論理フラッシュメモリ装置の全ての不揮発性メモリ位置を発見するサブステップと、
ｂ）１つの不揮発性メモリ位置だけが前記サブステップａ）で発見された場合、前記メモリ位置に含まれる活性化されているトランザクション識別子のリストを、活性化されているトランザクション識別子の有効リストとして選択するサブステップと、
ｃ）１つ以上の不揮発性メモリ位置が前記サブステップａ）で発見された場合、前記発見された不揮発性メモリ位置の１つに含まれる活性化されているトランザクション識別子リストを、活性化されているトランザクション識別子の有効リストとして選択するサブステップとからなることを特徴とする方法。
【請求項１９】
請求項１８に記載の方法において、
前記サブステップｃ）が、
ｃ１）前記発見された各不揮発性メモリ位置から周期的インジケータの値を読み出すサブステップと、
ｃ２）周期的インジケータの最高値に関連付けられる活性化されているトランザクション識別子の有効リストとして、前記発見された不揮発性メモリ位置に含まれる活性化されているトランザクション識別子リストを選択するサブステップとからなることを特徴とする方法。
【請求項２０】
少なくとも1回の更新操作を実行することにより第１ブロックのデジタルデータを更新する装置であって、前記更新操作は全体として成功あるいは失敗となり、前記装置は、
論理フラッシュメモリ装置（１１０１）と、
前記第１ブロックのデジタルデータに対する前記更新操作であって、全体として成功あるいは失敗となる前記更新操作の全てに共通する第１のトランザクション識別子を活性化する手段(１１０２、１１０３、１１０４及び１１０５)と、
前記第１ブロックのデジタルデータに対する前記更新操作であって、全体として成功あるいは失敗となる前記更新操作の全てを実行する手段(１１０２、１１０３，１１０４，１１０５)と、
更新された前記第１ブロックのデジタルデータを前記第１のトランザクション識別子に関連付ける値と共に、前記更新された第１ブロックのデジタルデータを前記論理フラッシュメモリ装置（１１０１）に記憶する手段(１１０２、１１０３，１１０４，１１０５)と、
前記第１のトランザクション識別子を非活性化する手段(１１０２、１１０３，１１０４，１１０５)とからなり、
前記更新された第１ブロックのデジタルデータを前記論理フラッシュメモリ装置に記憶する手段（１１０２、１１０３、１１０４、１１０５）は、
前記論理フラッシュメモリ装置（１１０１）内のメモリ位置の状態インジケータを前記メモリ位置に対して書込み処理が行われていることを示す値に設定し、
前記第１のトランザクション識別子を非活性化する前に、前記状態インジケータを前記メモリ位置に対して書込み済みであることを示す値に設定するように構成されることを特徴とする装置。
【請求項２１】
請求項２０に記載の装置において、
前記論理フラッシュメモリ装置（１１０１）が、物理的に分離した少なくとも２つのメモリ装置からなり、前記少なくとも２つのメモリ装置が論理的に一体となるメモリ装置を構成することを特徴とする装置。
【請求項２２】
請求項２１に記載の装置において、
前記物理的に分離した少なくとも２つのメモリ装置が、固体フラッシュメモリと磁気ディスクドライブとを含むことを特徴とする装置。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明は、一般的には、一貫して成功あるいは失敗となる数段階の下位レベル操作からなる更新処理の技術に関する。特に、本発明は、トランザクション実行時にメモリアドレス変換層を利用する技術に関する。
【０００２】
（背景技術）
トランザクション実行の概念は、データの保全性（整合性）と特定のビジネスルールへ従うことが一番の関心事であるファイルシステム保守の分野で幅広く用いられている。一例として、銀行業務用途が挙げられる。この場合、口座ファイルにすべての口座と各口座の現在有効残高が記載され、別の口座記帳ファイルに実行された全ての口座記帳処理が記載される。ここで、口座記帳ファイルに新規の記録が生じ、ある口座に対して、またはその口座からある金額の払込みがなされたことを記述したとする。しかし、口座ファイルに対しては対応する更新処理がなされなかったとする。その結果は、ファイルシステムにおけるデータ保全性（整合性）への侵害となる。すなわち、口座ファイルから読み出された口座の残高と、口座記帳ファイルの記録から得られた残高とが食い違う。この種の矛盾は、通常、取引の整合性侵害として知られている。他の危機的状況例として、いわゆるビジネスルール侵害があり、これは、特定用途向けルールに違反することを意味する。例えば、承認を得るため既に停止されている口座に記帳がなされた場合などである。
【０００３】
トランザクションの概念は、ファイルシステムのデータに変化を起こさせる全ての下位レベル操作をひとまとめにし、それら操作が一貫して成功か失敗の何れかになる１つのエンティティを生じることを意味する。これら下位レベルの操作は更新操作としても知られている。トランザクションは、通常、連続する３つの段階に分けられる。すなわち、トランザクションの開始、データの更新、及びトランザクションのコミット（確定）の３段階である。致命的なシステムの故障（例えば、システムリセット）が生じる場合、トランザクションをコミットする段階に達しているかいないかによって、全ての更新操作が実行されるか、あるいはデータに対する変更が全くなされないかの何れかになる。コミット段階が既に開始している時に致命的なシステム故障が起これば、コミット段階は中断され、次のシステム起動時に終了する。トランザクションがコミット段階に至る前に致命的な故障が発生すれば、そのトランザクションの全記録は次のシステム起動時に自動的に削除される。
【０００４】
トランザクション機構は、通常、ロールバックトランザクションとして知られる後退復帰動作をサポートしている。これは、更新段階で生成されたすべての更新操作を、コミット処理により確定させるのではなく、取り消す事を意味する。
【０００５】
図１は、トランザクションを実行するのに用いられる従来の簡易ファイルシステムを示す。制御部１０１は、ログファイル１０２とデータベースファイル１０３の両方を管理している。制御部１０１は、トランザクションを構成する操作を矢印１０４に従いまずログファイル１０２に書き込む。全ての操作が首尾よくログファイル１０２に書き込まれた後、制御部１０１はそれらの上書処理を行う。すなわち、データベースファイル１０３に対応する変更を加える。この処理は、矢印１０５に従いログファイル１０２からデータベースファイル１０３へ変更の転送を行う処理として見ることができる。
【０００６】
図１のログファイル構成と、データベースファイル１０３における直通非トランザクション志向型のデータ更新とを較べると、前者はファイル書込み操作量が倍となり、後者には無いファイルの読み込み操作を取り入れているのがわかる。このようなファイルシステムのローディングは、特に、毎日のトランザクション数が少なくとも数十万から数百万にも上る銀行業務用途のような大規模なシステムにある種の弊害をもたらすことは明らかである。
【０００７】
（発明の開示）
本発明は、図１の従来構成におけるよりファイルシステムへのローディング量を減らしてトランザクションを実行する方法と装置とを提供することを目的とする。また、本発明は、確実に、かつ経済的にトランザクションを実行する方法と装置とを提供することを目的とする。さらに、本発明は、単位時間ごとのトランザクション数を考慮に入れて容易に規模拡張できる方法と装置とを提供することを目的とする。
【０００８】
本発明の目的は、フラッシュメモリ、またはデータ記憶装置として同様に機能する装置を用い、ペイロードデータ内容及び上記データ記憶装置のメモリアドレス情報に対して一定の順番で処理を実行することにより達成される。
【０００９】
本発明に係わるデジタルデータの第１ブロックを更新する方法は、データの第１ブロックに関係すると共に、一貫して成功あるいは失敗となる更新操作全てに共通する第１の識別子を起動するステップと、データの第１ブロックに関係すると共に、一貫して成功あるいは失敗となる更新操作全てを実行するステップと、更新されたデータの第１ブロックを前記第１の識別子に関連づける値と共に前記更新されたデジタルデータの第１ブロックを論理フラッシュメモリ装置に記憶するステップと、前記第１の識別子の動作を停止するステップとをこの順番通りに備えることを特徴とする。
【００１０】
本発明は、論理フラッシュメモリ装置に基づくファイルシステムにおいてシステム故障を復旧する方法にも適用される。本方法は、システム故障発生時にいずれの識別子が起動していたかを、起動中の識別子リストからチェックするステップと、データブロックをシステム故障発生時に起動していた識別子に関連づける数値を含むデータブロックの場所を見出すために物理メモリ位置をチェックし、そのようなデータブロックを含む各不揮発性メモリ位置の状態インジケータを、前記メモリ位置が無効データを含むことを示す値に設定するステップとを備えることを特徴とする。
【００１１】
また、本発明は、論理フラッシュメモリ装置と、データの第１ブロックに関連すると共に、一貫して成功あるいは失敗となる更新操作全てに共通する第１の識別子を起動する手段と、データの第１ブロックに関係すると共に、一貫して成功あるいは失敗となる更新操作全てを実行する手段と、更新されたデータの第１ブロックを前記第１の識別子に関連づける値と共に、前記更新されたデジタルデータの第１ブロックを論理フラッシュメモリ装置に記憶する手段と、前記第１の識別子の動作を停止する手段とを備えることを特徴とする装置にも適用される。
【００１２】
フラッシュメモリに典型的な第１の特徴は、物理メモリ位置が使い捨て可能なことにある。他の特徴は、前記第１の特徴から導かれる１つの結果であるが、１セットのアクセスルールを用いて個別にアクセス可能なブロックでメモリが構成されることである。本発明によると、トランザクションによりその内容が更新されるペイロードデータの未更新及び更新バーションを格納するために多数のブロックが用いられる。そして、前記ブロックのアドレス及びヘッダ情報を用い、ある任意の時点においてどのブロックが最も有効なバージョンのペイロードデータを含んでいるかを宣言する。
【００１３】
フラッシュメモリの概念は、論理的フラッシュメモリ装置やＬＦＭＤを網羅するよう拡大解釈可能である。すなわち、フラッシュメモリの前記特徴に従って動作するよう構成された任意のメモリ手段も含めて考えることができる。フラッシュメモリの前記特徴とは、格納データをブロックに構成すること、ブロックへの１回限りの書込み特性、及び、ブロックにおけるデータの状態を示す状態インジケータである。ＬＦＭＤの一般的な定義には、少なくとも２つの物理的に分離された記憶場所（メモリ位置）を用いてデータの論理統合ブロックを記憶するハイブリッドソリューションも含まれる。
【００１４】
例えば、従来の磁気ディスクドライブ、またはスタティックＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）は、ＬＦＭＤの様に動作するよう構成される場合がある。フラッシュメモリの特徴であるフル・エミュレーションは、通常磁気ディスクドライブには必要とされない。すなわち、データブロックの物理的消去は、通常磁気ディスクドライブで実行されることはない。磁気ディスクドライブと実際の固体フラッシュメモリとの組み合わせは、ハイブリッドソリューションには有利な機構となる。例えば、データブロックのヘッダ（または、状態インジケータ等、ヘッダの一部）がフラッシュメモリに記憶され、このブロックの残り部分、特にデータペイロードが、磁気ディスクドライブに記憶されるような場合である。２つの物理的に分離された位置を用いるにもかかわらず、そのデータブロックは論理的に一体となる。本発明は、ＬＦＭＤが物理的にフラッシュ技術に基づいているかどうかにかかわらず、全てのＬＦＭＤに等しく適用できる。
【００１５】
本発明に付与された特徴として、更新可能な最小データ単位のフェイルセーフ（危険防止）原子的更新手順が提供される。このようなデータ単位は、限られた数の許容値を有する状態インジケータを伴うヘッダフィールドを備える。更新されたデータ単位の状態インジケータは、更新されたデータがそこに書き込まれた場合に対応するペイロードデータの有効性を示すように変更される。その後、対応する古いデータ単位の状態インジケータは、古いペイロードデータが廃止されたことを示すように変更される。
【００１６】
特定のトランザクション識別子は、対応するトランザクションが実行中であることを示すよう、一時的に記憶される。前記トランザクションの一部分をなす全ての更新操作には、同一のトランザクション識別子、あるいは、明らかにそれと関連する識別子が付される。全ての更新操作が実行された後、一時的記憶領域からトランザクション識別子を除去するか、あるいは、トランザクションの終了を示すマークを付けることによって、トランザクションはコミット（確定）される。
【００１７】
単一の更新可能なブロック内に格納されたデータの非オーバーラップ部分に作用する多重並列トランザクションに関しても、各並列トランザクションごとに更新されるデータに対して個別の一時記憶場所を割り当てることによりサポート可能となる。並列更新操作はそれぞれ一時記憶場所内で実行され、その一時記憶場所における操作実行が終了して初めて実際の記憶場所であるメモリ位置が更新される。
【００１８】
本発明は、トランザクションを非常に低い階層レベルで（ファイルシステムで）取り扱うことを可能にすると共に、さらに多くの利点を提供する。高次階層レベルを表しファイルシステムをデータ記憶に使用する用途では、実際のトランザクション処理がどのように実行されているかを知る必要が無い。トランザクション処理のファイルシステムレベルでの実行は、上位レベル用途での実行から独立しているので、そのトランザクション処理の実現を強固にすると共に、異なる種類の用途にも容易に適応可能になる。続いて、上位階層レベルでは、下位部分の全てが完結するか、全てが完結しないかのいずれかになる原則に依存する、より複雑な操作からなる。
【００１９】
本発明の特徴と考えられる新規な特徴は、特に添付の特許請求の範囲に示される。しかしながら、本発明それ自体は、その構成及び動作方法に関して、さらなる目的及び効果と共に、添付図面に関連づけて示す以下の特定の実施形態の詳細説明から最良の理解が得られるものである。
【００２０】
（発明を実施するための最良の形態）
図１は従来技術の説明で既に論じられており、以下の実施形態に伴う本発明の説明は図２乃至１２に注目する。
【００２１】
本発明を十分理解するために、フラッシュメモリ及び論理的に類似した構成及び動作を有する他の装置の既知特徴を最初に手短に説明する。フラッシュメモリのデータは、最初にメモリの全論理ブロックを消去しないかぎり、通常同一の物理メモリ位置に更新することができない。ブロックレべルの消去後、消去されたブロック内の全ビットは通常１である共通の第１定数値を持つ。このブロック内の各ビットは、その値を通常０である第２の定数値に変更することにより、個別に１回書き込まれる。その後、ビットの値を変更するには、再びそのブロック全体を消去する以外に方法はない。
【００２２】
図２はフラッシュメモリ装置２０１の概略を示し、ここでフラッシュメモリ装置２０１はフラッシュメモリ消去ブロック、すなわちＦＭＥＢに分割されている。通常、数的に大きな正の整数Ｍで表されるＭ個のＦＭＥＢがあり、そのうち４個（２０２、２０３、２０４及び２０５）が図２で別々に示されている。１つのＦＭＥＢが最小論理メモリ単位であり、メモリ装置の他の部分とは関係なく消去可能となる。１つのＦＭＥＢのサイズはメモリ装置のタイプによって異なるが、キロバイトをｋＢで表すと、通常４ｋＢから６４ｋＢである。
【００２３】
各ＦＭＥＢは、１つ以上の論理データブロック、すなわちＬＤＢから構成される。図２では、第１のＦＭＥＢ２０２がＮ個のＬＤＢに分割されている様子が示され、そのうち５個（２０６、２０７、２０８、２０９及び２１０）が別々に示されている。１つのＬＤＢが論理フラッシュデータブロック装置において更新可能な最小データ単位となる。概念上、ハードディスクドライブの１つのデータセクタに相当する。各ＬＤＢは、ＬＤＢヘッダ、すなわち図２で２１１として示されるＬＤＢＨと、ペイロードデータ、すなわち頭字語ＬＤＢＤで知られるＬＤＢデータ部２１２にさらに分割される。前者は、特に、ＬＤＢ識別子フィールド２１３と状態フィールド２１４とからなり、ＬＤＢ識別子フィールド２１３の内容は、各ＬＤＢを明確に識別するのに用いられ、状態フィールド２１４は、対応する物理的記憶領域のデータの有効性を示す。
【００２４】
ＬＤＢ内のビットの値は一度しか書き込めないので、ＬＤＢにおけるペイロードデータの任意更新処理は、最近のブロックレベルでの消去がなされて以来タッチされていない「汚れていない」すなわち「クリーンな（変更無しの）」メモリ位置にＬＤＢ全体を書き込むことによってのみ可能となる。古い記憶場所については、対応する値をＬＤＢＨ内の状態インジケータに付与することにより、ダーティ（変更済み）であると宣言がなされる。
【００２５】
ＬＤＢが少なくとも２つの物理的に分離された位置に記憶され得ることは既に示唆した通りである。論理的な観点から見ると、物理的変換に適した論理を設けてデータブロックを論理的に１つの実体として現出させる限りは、物理的記憶のフォーマットが問題になることはない。このような変換及びそれらの実際的なインプリメンテーション（実用化）は、当業者にとって公知なものである。
【００２６】
図３は、論理物理フラッシュメモリアドレス変換層、すなわちＬＴＰＴＬの概略を示す。ＬＴＰＴＬは一種の変換テーブルであり、物理メモリ位置アドレスを各ＬＤＢ識別子に関連づける。あるＬＤＢの読み込みが必要な場合、このシステムはＬＴＰＴＬを参照し、その特定ＬＤＢを現在含む物理的メモリアドレスを得る。この手順は、論理物理アドレスマッピング、すなわちＬＰＡＭとして知られている。ＬＤＢの更新は、物理的フラッシュメモリにおけるその位置が変わることを意味する。対応する変更はＬＴＰＴＬにおいてなされ、新しい物理的記憶アドレスが更新されたＬＤＢを含む新しい記憶場所を指し示す。
【００２７】
メモリ装置は、上記したように、その物理的インプリメンテーション（実装）が実際のフラッシュ技術に基づいているかどうか、あるいはデータブロックの物理的記憶が１つ以上の異なる位置に生じるかどうかにかかわらず、図２及び３に関して説明した原理に従って動作する。
【００２８】
図４は、データの更新をフラッシュメモリ内の「適所で」行う既知の方法を示す。第１のステップで、ＦＭＥＢ４０１全体の内容は、通常はランダムアクセスメモリ、すなわちＲＡＭである揮発性メモリ４０２に読み込まれる。このようなメモリは、制限なくビット値の変換を前後に（往復方向に）繰返し実行できるので、第２のステップでは、ＲＡＭ４０２内のデータが更新される。第３のステップでは、元のＦＭＥＢ位置が消去され、第４のステップでは、更新されたデータがその元のフラッシュメモリ位置に書き戻される。第３または第４のステップのいずれかで致命的エラーが発生する場合、有効データは揮発性のメモリだけに存在しているため失われる可能性がある。図４の方法の他の欠点としては、書込時消去（erase-on-write）タイプの更新処理は、通常かなり非効率なものとなり、フラッシュメモリの寿命を早める恐れがある。
【００２９】
図５（ａ）及び（ｂ）はＬＤＢのフェイルセーフ原子的更新手順を示す。すなわち、１つのＬＤＢサイズの２つの物理メモリ位置５０１及び５０２が示される。ここで、少なくとも「未使用」、「書込み済み」、「有効」、「ダーティ（変更済み）」及び「ブロークン（破壊）」といった状態を示すように、１セットの許容値がＬＤＢＨ内の状態フィールドに対して既に定義されているものとする。これらの状態のうち、「ブロークン（破壊）」状態は、対応する物理メモリ位置が正常に機能しておらず、使用すべきではないことを意味する。この「ブロークン（破壊）」状態は、メモリ装置の一般的な使用に関するものであり、本発明にとってなんら重要ではない。さらに、作業領域として利用できる揮発性メモリ５０３を図５に示してある。
【００３０】
現在第１のメモリ位置５０１に存在しているＬＤＢのペイロード部に格納されているデータを更新する第１のステップ５５１は、揮発性メモリ５０３にペイロード部を読み込むものである。揮発性メモリ５０３におけるデータの更新は、次のステップ５５２を構成する。ここまでのところ、本方法は図４の従来の非フェイルセーフ方法に類似しているが、更新されたデータが同一の物理メモリ位置に書き込まれず、新メモリ位置５０２に書き込まれるところが異なる。周到に設計された一連の連続ステップは、たとえ予期せぬシステム故障の後であってもデータの有効なコピーを常に確実に使用可能にするように動作する。
【００３１】
ステップ５５３では、第２のメモリ位置５０２の状態インジケータフィールド５２２が「未使用」から「書込み済み」に変更される。ステップ５５４では、ＬＤＢ識別子が、第１のメモリ位置５０１のＬＤＢ識別子フィールド５１１から第２のメモリ位置５０２のＬＤＢ識別子フィールド５２１にコピーされる。ＬＤＢ識別子は、ステップ５５１で既にペイロードデータと共に第１のメモリ位置から読み込まれているか、あるいはそれ以外の場所（例えば、ＬＴＰＴＬ）から既に取得されているとすれば、第１のメモリ位置から実際に読込む動作がステップ５５４ではもはや必要ないことは言うまでもない。しかし、概念上、新メモリ位置５０２を準備する手順の一部が旧メモリ位置５０１から直接ＬＤＢ識別子をコピーすることであると考えるのが一番手っ取り早い。次いで、ステップ５５５では、更新されたペイロードデータが新メモリ位置５０２のペイロードデータフィールド５２３に書き込まれる。なお、ステップ５５４及びステップ５５５の相互順位関係は、本発明の適用性に特に影響を与えることなく変更することができる。
【００３２】
そして、ＬＤＢ識別子及び更新されたペイロードデータ双方の新メモリ位置５０２への書込みが首尾よく終了した場合のみ、新メモリ位置５０２の対応するフィールド５２２にある状態インジケータが「書込み済み」から「有効」に変更される。その後、論理物理フラッシュメモリアドレスマッピングをステップ５５７で更新し、（新旧メモリ位置の両識別子フィールド５１１及び５２１において現在同一である）ＬＤＢ識別子を新物理メモリ位置５０２に関連づける。そして、ステップ５５８では、旧メモリ位置５０１の対応するフィールド５１２における状態インジケータを「有効」から「ダーティ（変更済み）」に変更する。その後少し間をおいて、ステップ５５９に入り、旧メモリ位置が属するＦＭＥＢ（図示せず）が消去され、同時に旧メモリ位置５０１の対応するフィールド５１２における状態インジケータが「ダーティ（変更済み）」から「未使用」に変更される。
【００３３】
論理物理フラッシュメモリアドレスマッピングが更新されるステップの順序関係は重要でないが、更新されたペイロードデータが新メモリ位置に書き込まれるステップの後、かつ、旧メモリ位置が消去されるステップの前か、あるいは少なくとも更新されたペイロードデータが次回の処理に利用される前に実行されるのが最も有効である。以下、論理物理フラッシュメモリアドレスマッピングの更新ステップの位置に関して考慮すべき事柄について述べる。
【００３４】
図５（ａ）及び（ｂ）に示した方法のトランザクション処理に対する適応性は、通常、不揮発性フラッシュメモリで利用可能なデータのコピーがそれら各瞬間に存在するかどうかに関わる。以下の状態テーブルは、図５（ｂ）に示した各ステップ後の状態インジケータの値を示す。
【００３５】
【表１】
0005160006.tif 000002
【００３６】
予期せぬ致命的な故障から復旧するための一般的な原則は、データが有効であることを示すＬＤＢ状態インジケータのメモリ位置からデータを選ぶことである。しかし、表１によると、ステップ５５６の終了後、かつ、ステップ５５８の開始前に短い間隔があり、その間に、両メモリ位置は有効なデータを備えていると主張するが、新メモリ位置のデータは更新され、旧メモリ位置のデータは更新されない。この様な状況から復旧するために取られる簡単な原則は、ＬＤＢ識別子が等しくなるメモリ位置から１つ無作為に選択して他を捨てること、すなわち、その状態インジケータを「有効」から「ダーティ（変更済み）」に変更することである。その結果、旧メモリ位置が有効として選ばれる場合、未更新データが引き続き有効とみなされ、更新の試みが全くなされなかったとみなされる。一方、新メモリ位置が選ばれる場合、試みられた更新処理が成功したとみなされる。
【００３７】
なお、「有効＋有効」の状況を処理する方法もあり、これは上記の無作為選択よりも若干複雑であるが、無作為選択の不明確さを最大限の決定論に置き換えるものである。この場合、ＬＤＢは、年代順の周期的インジケータとして機能する多数のビットからなるという特徴によって特定される。最も単純な周期的インジケータ例としては、２ビットで構成されるものがある。この例では、ＬＤＢがフラッシュメモリに書き込まれる度に、インジケータビットの値がその周期パターンに従い前の値から前進する、すなわち、最も端的には、００から０１、１０、１１を介して００に至る等（あるいは、単一ビット値の毎回の変化が好まれる場合には、００から０１、１１、１０を介して００に至る等）のパターンに従う。同一のＬＤＢの２つのコピーがメモリで発見された場合、周期的インジケータビットを比較することにより、いずれが古くいずれが新しいかを容易に見分けることができる。この場合、特定数のビットを有する周期的インジケータの有用性は、同一のＬＤＢの旧コピーに「ダーティ（変更済み）」が付されるか、あるいはインジケータ値のこの周期が切れる前に消去されるという仮定に基づいている。周期的インジケータの数が増えるほど、値の周期は長くなり、周期的インジケータ値を見ることにより明らかとなる「ＬＤＢ履歴」も長くなる。
表１において、有効に読めるデータからのメモリ位置は下線及び太字体で強調されている。
【００３８】
フェイルセーフ原子的更新手順の上記説明に基づいて、１つのフラッシュメモリ・トランザクションの実施形態を説明する。ここでは、システムにおける各ＬＤＢのＬＤＢヘッダにさらなるフィールドが付加されているものとする。図６はＬＤＢ６０１の概略を示し、そのヘッダ部は、ＬＤＢ識別子フィールド６０２と、ＬＤＢ状態インジケータフィールド６０３と、トランザクション識別子フィールド６０４とからなる。さらに、ＬＤＢ状態インジケータフィールド６０３の許容値が、「未使用」、「書込み済み」、「トランザクション書込み済み」、「有効」、「ダーティ（更新済み）」及び「ブロークン（破壊）」の各状態に対応していると仮定する。なお、ここでは、「トランザクション書込み済み」の状態が上述したものに付加されている。さらに、システムは概念上その処理時にトランザクション識別子の選択肢を持ち、各トランザクション識別子はある時点において使用中（「起動中」）であるか、開放されている（「作動していない」）かのいずれかになるように、少なくとも１つのＬＤＢが起動ＬＤＢのメモリ位置として割り当てられているとする。この特定のＬＤＢをＬＤＢ＃Ｔと称する。
【００３９】
次に、図７を参照すると、ステップ７０１ではトランザクション識別子を起動し、１つのトランザクションを開始する。すなわち、これまで起動されていないトランザクション識別子を選択してＬＤＢ＃Ｔに書き込む。この特定トランザクション識別子を＃ＴＩＤと称する。この書込みは、図５（ａ）及び（ｂ）に関して上述したフェイルセーフ原子的更新手順を用いることによって実行される。＃ＴＩＤの起動が首尾よく行われたら、このトランザクションが開始したものと考えることができる。
【００４０】
トランザクション識別子起動の概念は本発明全体にとって重要であるが、それをＬＤＢ＃Ｔに書き込むことが唯一可能な具体的インプリメンテーション（実現法）ではない。本発明のコンテキストにおいて、トランザクション識別子を起動することは、トランザクション識別子をある第１の状態にし、たとえシステム故障の後であっても確実にその第１の状態からこのトランザクション識別子を復旧できるような全ての手順を意味すると考えられる。同様に、あるトランザクション識別子の動作を停止するとは、トランザクション識別子を、たとえシステム故障の後であっても明確に前記第１の状態から区別できるある第２の状態にすることを意味している。この様に、起動されているがその後まだ動作が停止されていない全てのトランザクション識別子が起動中のトランザクション識別子として指定されてもよい。
【００４１】
フラッシュメモリ・トランザクションのコンテキストにおいて、実際のデータ更新処理は多数の更新操作からなり、各更新操作はそれぞれ単一のＬＤＢに関係している。ステップ７０２では、あるＬＤＢ識別子、ＬＤＢ＃Ｘによって識別されるＬＤＢの内容が第１のフラッシュメモリ位置から揮発性作業領域メモリに読み込まれ、ステップ７０３では、そのペイロードデータ部に含まれるデータが更新される。ステップ７０４では、新しい第２のフラッシュメモリ位置の状態インジケータフィールドが「未使用」から「書込み済み」に変更され、ステップ７０５では、ＬＤＢ＃Ｘが第２のメモリ位置のＬＤＢ識別子フィールドに書き込まれる。そして、ステップ７０６では、＃ＴＩＤが第２のメモリ位置のトランザクション識別子フィールドに書き込まれ、ステップ７０７では、更新されたデータが第２のメモリ位置のペイロードデータ部に書き込まれる。ここで、ステップ７０５、７０６、及び７０７は、互いに異なる順序であってもよい。第２のメモリ位置が首尾よく正しいＬＤＢ識別子（ＬＤＢ＃Ｘ）、トランザクション識別子（＃ＴＩＤ）及び更新されたペイロードデータを備えた後、その状態インジケータフィールドの値は、ステップ７０８で「書込み済み」から「トランザクション書込み済み」に変更される。
【００４２】
ステップ７０９では、終了したＬＤＢの更新操作がフラッシュメモリ・トランザクションの最後の操作であったかをチェックする。ステップ７０９における判定が否定的である場合、現行トランザクションのコンテキストにおいて実行されるべき他のＬＤＢ更新操作が残っていることを意味するので、開始地点は前回と異なるＬＤＢであるという例外付きで手順がステップ７０２に戻され、その更新結果は前回と異なる第２のメモリ位置に書き込まれる。一方、ステップ７０９における判定が肯定的である場合、現行トランザクションに関連したデータ更新が終了したことを意味するので、トランザクションはコミット段階に進むことができる。
【００４３】
図７に示すフラッシュメモリ・トランザクションのコミット段階は、＃ＴＩＤがＬＤＢ＃Ｔから除去されるステップ７１０で構成される。フェイルセーフ原子的更新手順はその除去の実行にも用いられる。なお、この時点で、このトランザクションに関連して更新された全ての旧メモリ位置は、それらの状態インジケータフィールドによって未だ有効と宣言されている。そのため、このトランザクションは、ステップ７１１、７１２、７１３及び７１４で構成されるループで動作を継続する。ステップ７１１では、論理物理フラッシュメモリアドレスマッピングが更新され、ＬＤＢ識別子ＬＤＢ＃Ｘを新物理メモリ位置に関連づける。フェイルセーフ原子的更新手順に関連して前述したように、他の方法ステップに関連するアドレスマッピング更新ステップの実際の位置が問題になることはない。次いで、ステップ７１２では、ＬＤＢ＃Ｘとして知られた古い未更新バーションのデータブロックを収容する第１のメモリ位置の状態インジケータが「有効」から「ダーティ（更新済み）」に変更される。
【００４４】
ステップ７１３では、ＬＤＢ＃Ｘとして知られた新しい更新バージョンのデータブロックを収容する、対応する第２メモリ位置の状態インジケータが「トランザクション書込み済み」から「有効」に変更される。ここで、同一のトランザクション識別子が再利用される場合を除き、ステップ７１３を系統立てて実行する必要はない。なお、ステップ７１３が遅延されて実行される場合については後述する。次いで、ステップ７１４では、コミット（確定）されたトランザクションに関連する全てのＬＤＢがステップ７１１、７１２及び７１３でなされた変更を受けているかどうかがチェックされる。判定が否定的である場合、ステップ７１１に戻り他の第１及び第２メモリ位置対を処理することを意味し、ステップ７１４における判定が肯定的である場合、このトランザクション処理が完了したことを意味する。
【００４５】
以下に示す状態テーブルは、図７に示す各ステップ後の新旧メモリ位置における状態インジケータの値を示している。省略して、Ｕが「未使用」、Ｗが「書込み済み」、Ｔが「トランザクション書込み済み」、Ｖが「有効」及びＤが「ダーティ（更新済み）」として使用されている。
【００４６】
【表２】
0005160006.tif 000003
【００４７】
表２において、いつでも有効データが利用可能なメモリ位置は太字体及び下線で強調されている。ここで、トランザクション処理の原則に照らして、データの有効性を分析してみる。
１つのトランザクションの全更新操作は、全て成功あるいは失敗のいずれかになることは前述した通りである。これら２つの二者択一を分けるボーダーラインとなるのがトランザクションのコミット段階である。図７において、ステップ７１０はコミットステップをなす。
【００４８】
トランザクションがステップ７１０に達する前、すなわち、トランザクション識別子＃ＴＩＤが起動中のトランザクション識別子に割り当てられたメモリ位置から除去される前に致命的エラーが発生する場合、基本的に、全てのＬＤＢ更新が正しく実行されたかどうか不確かである。それゆえ、唯一理にかなって取りえる１つの手段は、トランザクションを後退復帰させること、すなわち、全更新操作を無効にすることである。言い換えると、致命的エラー発生後の次のシステム起動時に、このような物理メモリ位置の全てが以下の２つの判定基準の１つを満たす場合はダーティ（変更済み）という判定が付される。２つの判定基準とは以下の通りである。
【００４９】
・それら状態インジケータフィールドの値が「書込み済み」の状態を示す。
・それら状態インジケータフィールドの値が「トランザクション書込み済み」の状態を示し、それらトランザクション識別子フィールドに現れたトランザクション識別子が起動中のトランザクション識別子に割当てられたメモリ位置にも出現している。
【００５０】
ダーティとして宣言される物理メモリ位置によっては、それらＬＤＢ識別子フィールドの値が他の（古い）物理メモリ位置の対応するフィールドにも出現するという判定基準を満たす場合もある。しかしながら、種々の理由で、そのような特徴がダーティとして宣言される物理メモリ位置の信頼性を保証するものではないことがわかる。それら理由のうち最も重要な点は、旧物理メモリ位置が消去されるまでどれだけの間その状態にとどまるのかが通常予測できないことである。バックグランドクリーンアップルーチンはフラッシュメモリの状態を継続的に監視し、データブロックを周辺に移動させてＦＭＥＢを消去することによって記憶空間を開放するよう試みる。付け加えて言えば、動作の初期段階でシステムの故障が発生する場合もある。そのような初期段階では、実行される第１のトランザクションがフラッシュメモリに書き込まれるべき「新」コピーを生じる前にクリーン（変更無し）であったため、ＬＤＢの「旧」コピーは存在していない。
【００５１】
一方、ステップ７１０が完了した後、すなわち、起動中のトランザクション識別子に割り当てられたメモリ位置からトランザクション識別子＃ＴＩＤが除去された後にシステムの致命的エラーが発生する場合、全てのＬＤＢ更新が正しく実行されたことは確かである。そのため、トランザクションが首尾よく実行され、次のシステム起動時には、更新されたＬＤＢが「新」メモリ位置から読み込まれることを確実に宣言できる。この場合、それら物理メモリ位置全てが以下の３つの判定基準を満たす場合はダーティ（更新済み）という判定が付される。３つの判定基準とは以下の通りである。
【００５２】
・それらＬＤＢ識別子フィールドの値が他の（新）物理メモリ位置の対応フィールドにも出現する。
・それら状態インジケータフィールドの値が「有効」の状態を示す。
・同一のＬＤＢ識別子を有する他の（新）物理メモリ位置のトランザクション識別子フィールドに現れるトランザクション識別子が、起動中のトランザクション識別子に割り当てられたメモリ位置に出現することはない。
【００５３】
さらに、それら物理メモリ位置全てが以下の２つの判定基準を満たす場合は有効という判定が付される。２つの判定基準とは以下の通りである。
・それら状態インジケータフィールドの値が「トランザクション書込み済み」の状態を示す。
・それらトランザクション識別子フィールドに現れるトランザクション識別子が、起動中のトランザクション識別子に割り当てられたメモリ位置に出現することはない。
【００５４】
それらトランザクション識別子フィールドに記憶される同一のＴＩＤが次回に起動されるか、あるいはこれら特定ブロックが新規更新処理を受けるかの何れかの状態になるまで、「トランザクション書込み済み」ブロックを「有効」に変更する上記ステップを延期することができる。
【００５５】
システムがステップ７１０を実行している間に致命的なエラーが発生すればどうなるかを分析するにあたり、図５（ａ）及び（ｂ）に関連して説明したフェイルセーフ原子的更新処理の説明に触れる必要がある。そこで、予期せぬ故障からの復旧のためのルールを付与したので、ほとんどの場合、不確定性が派生する可能性はない。しかしながら、新旧物理メモリ位置が共に有効として示されていて、それら新旧いずれかのメモリ位置を無作為に選択するような場合に限り、致命的エラーの瞬間にフラッシュメモリが置かれている状態を判断し、次回の起動時に中断されたトランザクションを後退復帰させるか、あるいはコミット（確定）するかの選択肢を決定することができない。ＬＤＢ＃Ｔを更新する場合、このような「有効＋有効」の状況においては、例えば、そこに記憶されているトランザクション識別子の数が少ない（多い）メモリ位置を常時選択することにより、ステップ７１０が終了したと解釈される可能性がより高く（低く）なると規定できる。本願の優先日時点において、上記偶発性を排除すべくＬＤＢ＃Ｔ更新処理の一部として周期的インジケータを使用することが最も有効な方法だと考えられる。
【００５６】
次に、本発明が並列トランザクションにも利用可能であることを述べる。トランザクション処理の基本原理の１つに、２つの並列トランザクションが全く同一の論理データ領域を並行して（パラレルに）更新することができないということがある。しかしながら、トランザクションのコミット段階が連続して（シリアルに）発生する限り、すなわち、並列トランザクションの一方がコミット段階にない場合のみ並列トランザクションの他方のコミット段階が始まるような場合に限り、２つ以上の並列トランザクションは、ＬＤＢのオーバーラップしていない部分を並行して（パラレルに）更新することができる。
【００５７】
説明を簡潔にするため、単一ＬＤＢについての並列トランザクションの結果についてだけ述べる。とは言っても、多数のＬＤＢを更新する場合に並列トランザクションを適用することを除外するものではない。以下、そのような場合をも網羅すべく平易に一般化して説明する。
【００５８】
図８、９、および１０は、フラッシュメモリを用いて並列トランザクションを実行するための装置及び方法を示す。図８において、旧物理メモリ位置８００、複数の新物理メモリ位置及び複数の揮発性（ＲＡＭ）メモリバッファが示されている。並列トランザクションを処理するために、単一のＬＤＢに影響を及ぼす並列トランザクションと同数の新物理メモリ位置及び揮発性メモリバッファを備えると都合がよい。ここで、並列トランザクションの数が３であり、３つの新物理メモリ位置８１０、８２０及び８３０と、３つの揮発性メモリバッファ８４１、８４２及び８４３とが存在するとする。この３つの並列トランザクションは、それぞれトランザクション識別子ＴＩＤ＃Ａ、ＴＩＤ＃Ｂ及びＴＩＤ＃Ｃに関連付けられる。一般的に、正の整数Ｎによって並列トランザクション数は示される。ＬＤＢの構成は上記と同一である。すなわち、ＬＤＢヘッダ部には、ＬＤＢ識別子用のフィールド、ＬＤＢ状態インジケータ用のフィールド、そしてトランザクション識別子用のフィールドがある。ここで、並列更新の対象となるＬＤＢをＬＤＢ＃Ｘとする。ここで、並列トランザクションの実行開始時のＴＩＤフィールドの内容は問題にならないので、それをＴＩＤ＃？で示すとする。
【００５９】
ただし、並列トランザクションがかなり異なった時間に起動され、そのうちの一部が比較的早期に完了となってそれらに割り当てられていたリソースが開放されるような場合には、並列トランザクションと同数の新物理メモリ位置及び揮発性メモリバッファを揃えるという必要条件を消去することができる。同様に、揮発性メモリバッファのサイズも、各揮発性メモリバッファが、この揮発性メモリバッファを用いる特定トランザクションが更新処理できるデータビットを入れられるだけの大きさに最適化される。特に、揮発性メモリバッファは、更新すべきＬＤＢのヘッダフィールド用の格納空間を備える必要がなく、この事は図面上にて対応部分を破線で描くことにより強調されている。実際には、更新処理の過程で新データが旧データにとって代わる各ステップ毎に新しいメモリ位置を用いるようにすれば、揮発性メモリバッファが全く無かったとしてもトランザクションを実現させる事は可能である。しかしながら、このような「新規から新規への」更新は、データが論理フラッシュメモリ装置から比較的大きなブロックにある揮発性作業メモリ領域に読み込まれ、全ての更新処理が揮発性作業メモリ領域にて行われ、更新されたブロックが再びフラッシュに書き込まれるといった場合のソリューションに比べ、通常かなり非効率なものとなる。
【００６０】
ＬＤＢ＃Ｘの未更新コピー内にあり、あるトランザクションＴＩＤ＃ｉが更新可能なデータビットがｉ１（ｉ＝Ａ，Ｂ，Ｃ）とマークされる。ここで、並列トランザクションがほぼ同時に開始されるとする。しかし、これは拘束条件ではなく、一方のトランザクションが、他方が開始される前にかなり長い時間先に進んでいたとしても差し支えない。この例で、並列トランザクション処理は、起動中のトランザクション識別子８５０のメモリ位置にトランザクション識別子ＴＩＤ＃Ａ、ＴＩＤ＃Ｂ及びＴＩＤ＃Ｃを書き込むことによって始まる。そして、データの更新は、旧物理メモリ位置８００からＬＤＢ＃Ｘを読み出し、割り当てられた全ての揮発性メモリバッファ８４１、８４２及び８４３に読み込むことによって始まる。図９（ａ）は読込み動作後の状態を示す。この段階では、トランザクションが同時に開始された状態なので、まだ更新処理はなされていない。
【００６１】
並列トランザクション中の各トランザクションは、揮発性メモリバッファの１つに関連付けられたデータ区間だけを更新できる。そこで、ＴＩＤＡ＃がバッファ８４１のＡビットを更新し、ＴＩＤ＃Ｂがバッファ８４２のＢビットを更新し、ＴＩＤ＃Ｃがバッファ８４３のＣビットを更新すると仮定する。この時、新物理メモリ位置８１０、８２０及び８３０の内容には何の変化も無い。
【００６２】
図９（ｂ）は、並列トランザクションのうちで最速のトランザクション（例えば、ＴＩＤ＃Ａ）が、対応する揮発性メモリバッファ８４１で実行されるべき全ての更新処理を終了したばかりの状態を示す。ここでは、全Ａ１ビットが更新済みＡ２ビットに置き換えられている。そして、その揮発性メモリバッファの内容は、単一トランザクションに関連して前述した方法ステップに従って、対応する新フラッシュメモリ位置８１０に書き込まれる。すなわち、図９（ｂ）は、状態識別子を「未使用」から「書込み済み」に変更し、ＬＤＢ識別子ＬＤＢ＃Ｘ及びトランザクション識別子ＴＩＤ＃Ａをしかるべきヘッダフィールドに書き込むことによって、書込み動作がどのようにして開始したかを示している。
【００６３】
図９（ｃ）は、第１の揮発性メモリバッファ８４１の内容がどのようにして対応する新フラッシュメモリ位置８１０に書き込まれたかを示す。つけ加えて言えば、図９（ｃ）は並列トランザクション処理の重要な一部をなす１ステップを示しており、そこでは、第１のトランザクションによってなされる更新Ａ１→Ａ２が、他の揮発性メモリバッファ８４２及び８４３にもコピーされる。そして、完了した新フラッシュメモリ位置８１０の状態識別子が「書込み済み」から「トランザクション書込み済み」に変更される。
【００６４】
図９（ｄ）は、並列トランザクション処理におけるさらなる２つの展開ステップを示す。ここでは、起動中のトランザクション識別子８５０のメモリ位置から完了したトランザクションＴＩＤ＃Ａの識別子を除去し、旧物理メモリ位置８００の状態インジケータを「有効」から「ダーティ（更新済み）」に変更し、完了した新物理メモリ位置の状態インジケータを「トランザクション書込み済み」から「有効」に変更することによって、この完了トランザクションＴＩＤ＃Ａがコミット（確定）される。同時に、二番目に速いトランザクションＴＩＤ＃Ｂは揮発性バッファ８４２での更新が全てなされた段階に達し、状態識別子を「未使用」から「書込み済み」に変更し、ＬＤＢ識別子ＬＤＢ＃Ｘ及びトランザクション識別子ＴＩＤ＃Ｂをしかるべきヘッダフィールドに書き込むことによって対応するフラッシュメモリ位置８２０への書込みを開始する。
【００６５】
図１０（ａ）及び（ｂ）は、図９（ｃ）及び（ｄ）にそれぞれ示したステップの繰返しを示すが、各図の状態に固有の例外は以下の通りである。
・図１０（ａ）において、第２のフラッシュメモリ位置８２０への書込みが終了となり、Ｂ１→Ｂ２の更新が残りの揮発性メモリバッファにコピーされる（ここで、括弧でくくられたバッファ８４１がこの段階で最も有効に割当て解除されている）。
・図１０（ｂ）において、トランザクションＴＩＤ＃Ｂがコミット（確定）され、（既に有効となっている物理メモリ位置８１０をダーティ（更新済み）にし、）第３のフラッシュメモリ位置８３０への書込みが始まるように、最後のトランザクションＴＩＤ＃Ｃが揮発性メモリバッファ８４３における更新を終了する。
【００６６】
図１０（ｃ）は図１０（ａ）に示したステップの繰り返しを示すが、それ固有の例外として、第３のフラッシュメモリ位置８３０への書込みが終了となっても、他の全ての揮発性メモリバッファがこの段階で最も有効に割当て解除されているので、Ｃ１→Ｃ２の更新が他のいずれの揮発性メモリバッファにもコピーされることはない。図１０（ｄ）においては、識別子ＴＩＤ＃Ｃを起動中のトランザクション識別子８５０のメモリ位置から除去し、対応する識別子を「トランザクション書込み済み」から「有効」に変更し、既に有効となっている物理メモリ位置８２０を「ダーティ（更新済み）」とマークすることにより、完了したトランザクションＴＩＤ＃Ｃがコミット（確定）される。
【００６７】
原子的更新処理に関して先述したように、ＬＴＰＴＬテーブルを更新してＬＤＢの最新有効コピーを指し示すステップの位置は重要ではないが、前記最新有効コピーがフラッシュメモリに書き込まれた後、かつ、無効の旧コピーが削除される前に位置づけされるのが最も有効である。
【００６８】
上述した手順がトランザクション処理の原則に準拠しているかは、並列トランザクションのコミット段階を個別に分析することにより容易に確認できる。最終的なシステムエラー以前に起動中のトランザクション識別子８５０のメモリ位置から識別子が削除されたトランザクションは、次のシステム起動時にもコミット（確定）された状態のままとなる。なぜなら、それらトランザクションによって更新されたデータを有するフラッシュメモリ位置が「有効」状態で検出されるためである。そして、識別子が未だ起動中として記憶されているそれらトランザクション全てを後退復帰させる。
【００６９】
本発明の実施形態のこれまでの説明においては、論理フラッシュメモリ装置から旧ＬＤＢを読み出すステップの後、かつ、全面的に更新された新バージョンをフラッシュに書き込む前に、データの全更新処理が揮発性の作業メモリ領域において実行されるものと仮定してきた。以下では、完全を期して、本発明の他の実施形態を図１１（ａ）から（ｆ）を参照して説明する。この実施形態においては、フラッシュメモリに対する書込み動作として、いわゆる連鎖式書込み動作が用いられる。説明を簡略化するために、単一で非並列型のトランザクションについてのみ検討するが、同一の原理が並列トランザクションにも適していると考えて差し支えない。
【００７０】
図１１（ａ）は、起動段階における旧物理メモリ位置１０００と、２つの新物理メモリ位置１０１０、１０２０とを示す。この起動段階では、最初の更新時に先頭のデータから揮発性作業メモリ領域（図示せず）への読み込みが行われる。そして、図１１（ｂ）に示すステップにおいて、ＴＩＤ＃Ｙとして知られたトランザクションによってなされる最初の更新処理が準備完了状態となり、部分的に更新されているＬＤＢの第１の新物理メモリ位置１０１０への書込み動作が始まる。ここで再び、ヘッダフィールドが先ず書き込まれ、その状態インジケータの値が「書込み済み」になると仮定する。次いで、図１１（ｃ）に示すステップにおいて、部分的に更新されたコピーの書込みが終了し、その状態インジケータが「トランザクション書込み済み」に変更される。同時に、第２の更新処理が終了に近づいて、第２の新物理メモリ位置１０２０への書込みが始まる。
【００７１】
図１１（ｄ）は、完全に更新されたコピーの書込みが終了し、その状態インジケータも「トランザクション書込み済み」に変更されるステップを示す。図１１（ｅ）は、このトランザクションがコミット（確定）されずにいる内に、部分的に更新されたバージョンのうちで古い方の状態インジケータがどのようにして「ダーティ（更新済み）」に変更されるかを示す。そして、次のステップで、起動中のトランザクション識別子（図示せず）のメモリ位置からＴＩＤ＃Ｙを除去することにより、このトランザクションのコミット処理が行われる。このコミット処理は、ただ１つの更新バージョンのデータが「トランザクション書込み済み」の状態に置かれている段階で実行されなければならない。なぜならば、多数の更新バージョンがコミットされずに残されると、システムエラーがコミット処理の直後に発生した場合、その状態におかれた多数の更新バージョンが次の起動時における曖昧さの原因となってしまうからである。そして、図１１（ｆ）に示す最終ステップにおいて、第２の新物理メモリ位置１０２０が現在有効データを有し、その他の物理メモリ位置がダーティ（更新済み）となるように状態インジケータの更新がなされる。
【００７２】
なお、連鎖式書込み操作の場合に、物理メモリ位置の状態インジケータを変更する順番は、他にもいくつか代わりの順番が考えられる。例えば、第２の新物理メモリ位置１０２０への書込みが始まる前であっても、第１の新物理メモリ位置１０１０における部分的に更新されたコピーの状態を「ダーティ（更新済み）」に変更することができる。すなわち、この場合、図１１（ｃ）における状態インジケータは、上から下へ、Ｖ、Ｄ及びＷの順であって、かつ、続く全ステップにおいて第１の新物理メモリ位置が「ダーティ（更新済み）」のままとなる。他の可能性としては、第２の新物理メモリ位置１０２０への書込みが始まった後、しかしその状態が「書込み済み」から「トランザクション書込み済み」に変更される前に、第１の新物理メモリ位置１０１０において部分的に更新されたコピーの状態を「ダーティ（更新済み）」に変更することも考えられる。すなわち、第１の新物理メモリ位置が、図１１（ｄ）、（ｅ）及び（ｆ）において「ダーティ（更新済み）」になることを意味する。
【００７３】
並列トランザクションと関連して前述した一般的手法は、連鎖式書込み操作の処理法の無駄を省くのに役立つＲＡＭ搭載のフラッシュメモリ書込みキャッシュを実装するのに利用できる。これは、トランザクションＴＩＤ＃ＸがＬＤＢ＃Ｘを最初に更新している時には何時でも、ＬＤＢＤ＃Ｘのフラッシュコピーが既にＲＡＭに読み込まれていて、部分的に更新されたバージョンがキャッシュにしか書き込まれない事を意味する。すなわち、現在同一のＬＤＢを更新している他のトランザクションが無かったとしても、データはフラッシュメモリからＲＡＭバッファに読み込まれる。このＬＤＢを他のトランザクションが同時に更新した場合には、並列トランザクション処理のプロセスが直接適用される。１つのトランザクション実行中であるがそのコミット段階の前に行われる書込みキャッシュ処理は、データの保全性（整合性）の観点から見て安全である。特に、トランザクションのコンテキストにおいて、ＬＤＢに対してなされる通常の更新がほんの１ビットか１バイト分だけの場合、上記書込みキャッシュ処理はファイルシステムの処理能力を著しく向上させることができる。
【００７４】
図１２は本発明の他の実施形態に関わる装置構成１１００の概略を示す。ここで、フラッシュメモリ１１０１は、読取り書込み部１１０３を介して作業領域ＲＡＭ１１０２に連結されている。読取り書込み部１１０３は二者間で実際のデータ転送を実行し、アドレスマッピングブロック１１０４を用いて論理データブロック識別子をフラッシュの物理メモリ位置に対してマッピングする。そして、プログラム実行ブロック１１０５がメモリ１１０６から読み込まれた、および/または、入出力インターフェース１１０７を介して得られた指示を実行することによりその動作を制御する。バックグラウンドクリーンアップ部１１０８はフラッシュメモリ１１０１の状態を既知の方法で維持する。
【００７５】
上述した本発明の好適実施形態は、他の形態や代わりの実施形態に対する本発明の適用性に制限を加えるものであってはならず、それら他の形態も前述の説明に鑑みて添付の特許請求の範囲内に入ることは当業者にとって明らかである。例えば、トランザクション識別子が更新されたＬＤＢと共にフラッシュメモリに記憶されると述べてあったとしても、その更新ＬＤＢをあるトランザクション識別子に明確に関連づける他の更新ＬＤＢ値と共に記憶しても同様の結果を得ることができる。
【図面の簡単な説明】
【図１】  従来のファイルシステム更新を示す。
【図２】  フラッシュメモリにおける既知の階層概念を示す。
【図３】  既知のアドレス変換層を示す。
【図４】  既知のデータ更新方法を示す。
【図５】  （ａ）はフェイルセーフ原子的更新動作のための装置を示し、（ｂ）はフェイルセーフ原子的更新動作のための方法を示す。
【図６】  本発明に関連して使用可能なデータブロック構成を示す。
【図７】  フラッシュメモリ・トランザクションを実行する方法を示す。
【図８】  並列フラッシュメモリ・トランザクションを実行する構成を示す。
【図９】  （ａ）から（ｄ）は並列フラッシュメモリ・トランザクションを実行する方法を示す。（その１）
【図１０】  （ａ）から（ｄ）は並列フラッシュメモリ・トランザクションを実行する方法を示す。（その２）
【図１１】  （ａ）から（ｆ）は連鎖式書込操作でフラッシュメモリ・トランザクションを実行する方法を示す。
【図１２】  本発明の１つの実施形態による装置を示す。
【図１】
0005160006.tif 000004
【図２】
0005160006.tif 000005
【図３】
0005160006.tif 000006
【図４】
0005160006.tif 000007
【図５】
0005160006.tif 000008
【図６】
0005160006.tif 000009
【図７】
0005160006.tif 000010
【図８】
0005160006.tif 000011
【図９】
0005160006.tif 000012
【図１０】
0005160006.tif 000013
【図１１】
0005160006.tif 000014
【図１２】
0005160006.tif 000015