(57)【特許請求の範囲】
【請求項１】
トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で更新する一つ以上のファイルの内容を、
当該更新が既存のファイルの内容の変更の場合には、該既存のファイルの内容を変更する代わりにバッファ領域上に用意された該既存のファイルと同じ内容を持つ複製ファイルの内容を変更したものをもとの既存のファイルと併存させる形でファイルシステムの管理する記憶装置へ書き込み、
当該更新が新規のファイルの作成の場合には、バッファ領域上に作成された該新規のファイルを前記記憶装置に書き込む処理を行う第１のステップと、
前記トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上でファイルに対して行った全ての更新動作を記憶した更新リストを、ファイルシステムの管理する記憶装置に書き込む処理を行う第２のステップと、
前記内容と前記更新リストの双方の書き込み処理が成功した場合に、前記トランザクションをコミットしたものと確定し、前記内容と前記更新リストのいずれかの書き込みが失敗した場合に、前記トランザクションをアボートする第３のステップとを有することを特徴とするトランザクション管理方法。
【請求項２】
前記更新リストを書き込む処理は、前記ファイルの内容を書き込む処理が正常に完了した後に行い、
前記更新リストの書き込み処理が成功した場合に、前記内容と前記更新リストの双方の書き込み処理が成功したと判断し、
前記更新リストを書き込む処理が行われなかったか、前記更新リストの書き込み処理が失敗した場合に、前記内容と前記更新リストのいずれかの書き込み処理が失敗したと判断することを特徴とする請求項１に記載のトランザクション管理方法。
【請求項３】
前記更新リストを書き込む処理は、前記ファイルの内容を書き込む処理と共に行い、該更新リストを書き込む際に、該更新リストに前記ファイルの内容が正常に書き込まれたか否かを判断するための情報を含ませ、
前記ファイル内容を書き込む処理および前記更新リストを書き込む処理が正常に完了したか、書き込まれた該更新リストに含まれる前記情報により前記ファイルの内容が正常に書き込まれていると判断される場合に、前記内容と前記更新リストの双方の書き込む処理が成功したと判断し、
前記更新リストが書き込まれなかったか、書き込まれた前記更新リストに含まれる前記情報により前記ファイルの内容が正常に書き込まれていないと判断される場合に、前記内容と前記更新リストのいずれかの書き込み処理が失敗したと判断することを特徴とする請求項１に記載のトランザクション管理方法。
【請求項４】
複数のトランザクションがコミット処理を開始した順番を管理しておき、
前記トランザクションについての前記ファイルの内容および前記更新リストの書き込み処理が双方とも成功したかいずれかが失敗したかの判断を、管理された前記順番で該トランザクションの直前のトランザクションがコミットかアボートかが確定した後に行い、
前記内容と前記更新リストのいずれかの書き込み処理が失敗した場合に、前記トランザクションをアボートすると共に、少なくとも該トランザクションが更新したファイルを参照あるいは更新した現在コミット処理中の他のトランザクションをアボートすることを特徴とする請求項１に記載のトランザクション管理方法。
【請求項５】
前記内容と前記更新リストのいずれかの書き込み処理が失敗した場合に、更に、当該書き込み処理の失敗に係る前記トランザクションが更新したファイルを参照あるいは更新した現在処理中であってまだコミット処理を開始していない他のトランザクションをもアボートすることを特徴とする請求項４に記載のトランザクション管理方法。
【請求項６】
前記ファイルの内容は、スレーブファイルシステムの管理する記憶装置に書き込む処理を行い、
前記更新リストに関する情報を、マスターファイルシステムの管理する記憶装置に書き込む処理を行い、
前記マスターファイルシステムは、各トランザクションがその処理開始時からコミット時までに一つ以上のファイルに対して行った更新が、トランザクション単位で全て有効になるか全て無効になるかいずれかの状態にしかならないことを保証するための処理を行い、
前記スレーブファイルシステムは、前記トランザクションが前記マスターファイルシステムにおいてコミットされた場合に、前記内容と前記更新リストの双方の書き込み処理が成功したと判断し、
前記スレーブファイルシステムは、前記トランザクションが前記マスターファイルシステムにおいてアボートされた場合に、前記内容と前記更新リストのいずれかの書き込み処理が失敗したと判断することを特徴とする請求項１に記載のトランザクション管理方法。
【請求項７】
ファイルシステムの管理するファイルをアクセスして処理を行うトランザクションを管理するトランザクション管理装置であって、
トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で更新する一つ以上のファイルの内容を、当該更新が既存のファイルの内容の変更の場合には、該既存のファイルの内容を変更する代わりにバッファ領域上に用意された該既存のファイルと同じ内容を持つ複製ファイルの内容を変更したものをもとの既存のファイルと併存させる形でファイルシステムの管理する記憶装置へ書き込み、当該更新が新規のファイルの作成の場合には、バッファ領域上に作成された該新規のファイルを前記記憶装置へ書き込む処理と、前記トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上でファイルに対して行った全ての更新動作を記憶した更新リストを、前記記憶装置に書き込む処理とを行う第１の処理手段と、
前記内容と前記更新リストの双方の書き込み処理が成功した場合に、前記トランザクションをコミットしたものと確定し、前記内容と前記更新リストのいずれかの書き込みが失敗した場合に、前記トランザクションをアボートする第２の処理手段とを備えたことを特徴とするトランザクション管理装置。
【請求項８】
ファイルシステムの管理するファイルをアクセスして処理を行うトランザクションを管理するトランザクション管理装置であって、
複数のトランザクションがコミット処理を開始した順番を管理する手段と、
コミット処理を開始したあるトランザクションが、ファイルをアクセスする処理を開始してからコミット処理を開始するまでの間に、バッファ領域上で更新した一つ以上のファイルの内容を、前記ファイルシステムの管理する記憶装置に書き込む処理を行う手段と、
管理された前記順番で前記あるトランザクションの直前のトランザクションがコミットかアボートかが確定した後に、前記書き込む処理が成功していれば前記あるトランザクションをコミットしたものと確定し、そうでない場合には前記あるトランザクション、および少なくとも該あるトランザクションが更新したファイルを参照あるいは更新した現在コミット処理中のトランザクションをアボートする手段とを備えたことを特徴とするトランザクション管理装置。
【請求項９】
マスターファイルシステムとスレーブファイルシステムを含む複数のファイルシステムがそれぞれ管理するファイルをアクセスして処理を行うトランザクションを管理するトランザクション管理装置であって、
トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で更新する一つ以上のファイルであって前記スレーブファイルシステムの管理するファイルの内容を、当該更新が既存のファイルの内容の変更の場合には、該既存のファイルの内容を変更する代わりにバッファ領域上に用意された該既存のファイルと同じ内容を持つ複製ファイルの内容を変更したものをもとの既存のファイルと併存させる形で前記スレーブファイルシステムの管理する記憶装置に書き込み、当該更新が新規のファイルの作成の場合には、バッファ領域上に作成された該新規のファイルを前記記憶装置に書き込む処理を行う第１の処理手段と、
前記トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で前記スレーブファイルシステムの管理するファイルに対して行った全ての更新動作を記憶した更新リストを、前記マスターファイルシステムの管理する記憶装置を利用して書き込む処理を行う第２の処理手段と、
前記マスターファイルシステムの管理する記憶装置に対する前記トランザクションの全ての更新動作に係る書き込み処理が正常に行われたと判断される場合に、前記トランザクションのコミットを確定し、それ以外の場合に、前記トランザクションをアボートする手段と、前記スレーブファイルシステムにおいて、前記マスターファイルシステムにおける前記トランザクションのコミットの確定もしくはアボートに従って、前記トランザクションのコミットの確定もしくはアボートを行う第３の処理手段とを備えたことを特徴とするランザクション管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ファイルに対する操作要求を受けてファイルの更新を行うトランザクション管理方法及びトランザクション管理装置に関する。
【０００２】
【従来の技術】
一般に情報システムでは、端末装置やネットワークなどから受取った処理要求に対して、必要な処理を実行し、その結果を返す、という一纏まりの処理が行われる。このように、なんらかの手段で起動された一纏まりの処理を実行する流れを「トランザクション」と呼ぶ。また、このような情報処理を「トランザクション処理」と呼び、トランザクション処理を行うシステムを「トランザクション処理システム」と呼ぶ。
【０００３】
トランザクション処理システムでは、トランザクションの処理の過程で様々なファイルやデータへのアクセスを行う。ファイルやデータへのアクセスとは、「参照」すなわちファイルやデータの読み出しや、「更新」すなわち既存のファイルやデータの書き換えや、「作成」すなわち新しいファイルやデータの書き込みや、「削除」すなわち既存のファイルやデータを消去する処理である。なお、ファイルやデータの更新と作成と削除を総称して、更新と呼ばれることもある。
【０００４】
ファイルやデータの更新等は、いわゆるＡＣＩＤ性を満たすように実行される必要がある。ＡＣＩＤ性とは、トランザクションが持つ以下に説明する原子性（Ａｔｏｍｉｃｉｔｙ）、一貫性（Ｃｏｎｓｉｓｔｅｎｃｙ）、隔離性（Ｉｓｏｌａｔｉｏｎ）、耐久性（Ｄｕｒａｂｉｌｉｔｙ）の４つの性質の総称である。
【０００５】
原子性（Ａｔｏｍｉｃｉｔｙ）とは、トランザクションの処理結果をコミット（Ｃｏｍｍｉｔ）かアボート（Ａｂｏｒｔ）かのいずれかの状態に決定することである。すなわち、トランザクションによるファイルやデータの更新等を永続的なものにするのがコミットであり、変更を取り消して元に戻すのがアボートである。トランザクションの処理結果をコミットかアボートかの状態に決定する処理を「コミット処理」と呼ぶ。
【０００６】
一貫性（Ｃｏｎｓｉｓｔｅｎｃｙ）とは、トランザクションによるファイルやデータの更新等を行った結果、必ず一貫性のとれた状態になることを保証することである。
【０００７】
隔離性（Ｉｓｏｌａｔｉｏｎ）とは、複数のトランザクションを並行に実行した場合でも、各トランザクションを単独で実行した場合と同じ処理結果になることを保証することである。直列可能性（Ｓｅｒｉａｌｉｚａｂｉｌｉｔｙ）とも呼ぶこともある。
【０００８】
耐久性（Ｄｕｒａｂｉｌｉｔｙ）とは、コミットしたトランザクションの処理結果は、ハードディスク装置などの安定記憶装置に書き込まれて、処理結果が障害等によって紛失しないことを保証することである。
【０００９】
トランザクション処理を行う場合、トランザクションがアクセスするファイルやデータは、ファイルシステムやデータベース管理システムによって管理する。上記のようなＡＣＩＤ性を備えたデータベース管理システムやファイルシステムは、トランザクショナルであると言う。通常、多くのデータベース管理システムはトランザクショナルであるので、データベース管理システムを用いれば、上記のＡＣＩＤ性を満たしたデータの管理を伴うトランザクション処理が可能になる。
【００１０】
一方、多くの計算機のオペレーティングシステムの提供するファイルシステムはトランザクショナルではなく、上記のＡＣＩＤ性を完全には満たしていない。ファイルシステムは、通常、バッファ記憶を利用する。具体的には、バッファ記憶にファイルをキャッシュしておくことで、ハードディスク装置などの安定記憶装置から読み出す頻度を下げたり、あるいはハードディスク装置のシーク時間が最小になるように読み出しや書き込みの順序を制御したり、あるいはアプリケーションプログラムからの書き込みを一度バッファ記憶に書き込むことで見かけ上の応答時間を短くしたりする最適化を行っている。そのため、ファイルシステムでは、トランザクションのＡＣＩＤ性を満たすことは難しい。
【００１１】
ただし、個々のファイル単位では、同期書き込みによってファイルが必ずハードディスク装置に書き込まれることを保証したり、あるいはＳＹＮＣ命令によって指定したファイルのバッファ領域にあるデータをハードディスクに強制的に書き込む手段を提供している。これらの手段を使ってアプリケーションプログラムを作成することで、限られた範囲で疑似的にトランザクションのＡＣＩＤ性の一部を満たすことはできる。
【００１２】
【発明が解決しようとする課題】
複数のファイルを更新するような処理をトランザクションとして実行するシステムを作成する場合、既存の計算機のオペレーティングシステムのファイルシステムはトランザクショナルではないのでＡＣＩＤ性を保証できない。
【００１３】
一方、データベース管理システムを用いればトランザクショナルな処理を行えるが、データベース管理システムは例えば関係データモデルのような特別なデータモデルに従ったデータの管理を必要とし、ファイルのように自由度が高く柔軟なデータの扱いが出来ない。
【００１４】
また、通常のファイルシステムでも、同期書き込みやＳＹＮＣ命令によって、ファイルをハードディスクに書き込むような制御は可能であるが、これらの操作は単一のファイルを対象にしたものであり、トランザクションが同時に複数のファイルを更新するような場合のＡＣＩＤ性の保証はできない。
【００１５】
本発明は、上記事情を考慮してなされたもので、トランザクショナルでないファイルシステムを用いて、トランザクショナルなファイルシステムを実現することの可能なトランザクション管理方法及びトランザクション管理装置を提供することを目的とする。
【００１６】
また、本発明は、ファイルシステムの持つファイルのバッファリングあるいはキャッシュの管理や、ハードディスク装置のシークを最小にするスケジューリングなど、性能を向上させるために実装されている機能を犠牲にせず、出来る限りそれらの効果を引き出しながら、トランザクショナルなファイルシステムを実現することの可能なトランザクション管理方法及びトランザクション管理装置を提供することを目的とする。
【００１７】
さらに、本発明は、複数のトランザクションが同じファイルをアクセスする場合の排他制御に伴うロック待ちによって、トランザクションの実行がブロックする期間を短くすることのできるコミット処理方式を実現することの可能なトランザクション管理方法及びトランザクション管理装置を提供することを目的とする。
【００１８】
さらに、本発明は、複数のファイルシステムの管理するファイルを更新するトランザクションの処理を可能にするトランザクション管理方法及びトランザクション管理装置を提供することを目的とする。
【００１９】
また、本発明は、トランザクショナルなファイルシステムが存在する場合に、トランザクショナルでないファイルシステムを組み合わせて用いるトランザクション処理を実現可能にするトランザクション管理方法及びトランザクション管理装置を提供することを目的とする。
【００２０】
【課題を解決するための手段】
本発明に係るトランザクション管理方法は、トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で更新する一つ以上のファイルの内容（新たに作成されたファイルの内容および／または既存のファイルの変更された内容）を、当該更新が既存のファイルの内容の変更の場合には、該既存のファイルの内容を変更する代わりにバッファ領域上に用意された該既存のファイルと同じ内容を持つ複製ファイルの内容を変更したものをもとの既存のファイルと併存させる形でファイルシステムの管理する記憶装置へ書き込み、当該更新が新規のファイルの作成の場合には、バッファ領域上に作成された該新規のファイルを前記記憶装置に書き込む処理を行う第１のステップと、前記トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上でファイルに対して行った全ての更新動作（ファイルの作成、ファイルの内容の変更（これをファイルの更新と称する場合がある）、ファイルの削除のいずれもこの更新動作に相当する）を記憶した更新リストを、ファイルシステムの管理する記憶装置に書き込む処理を行う第２のステップと、前記内容と前記更新リストの双方の書き込み処理が成功した場合に、前記トランザクションをコミットしたものと確定し、前記内容と前記更新リストのいずれかの書き込みが失敗した場合に、前記トランザクションをアボートする第３のステップとを有することを特徴とする。
【００２１】
本発明では、更新されたファイルの内容に加えて上記のような更新リストをファイルシステムを介して記憶装置に書き込み、内容を書き込んでいても対応する更新リストの書き込みが成功していなければ、そのトランザクションをアボートすることにより、一つのトランザクションがその処理開始時からコミット時までに一つまたは複数のファイルに対して行った更新の全てが有効になる（コミット）か、全てが無効になる（アボート）か、いずれかの状態にしかならない（システムに障害が起きた場合でも、一つのトランザクションが行った更新のうち一部分だけが有効になり残りが無効になるということはあり得ない）ことを保証できる。このトランザクション管理方法によれば、トランザクションのＡＣＩＤ性をそれ自体では備えていないファイルシステム（例えば多くの既存の計算機のオペレーティングシステムが提供するファイルシステム）を用いて、トランザクションのＡＣＩＤ性を実現できる。
【００２２】
好ましくは、前記更新リストを書き込む処理は、前記ファイルの内容を書き込む処理が正常に完了した後に行い、前記更新リストの書き込み処理が成功した場合に、前記内容と前記更新リストの双方の書き込み処理が成功したと判断し、前記更新リストを書き込む処理が行われなかったか、前記更新リストの書き込み処理が失敗した場合に、前記内容と前記更新リストのいずれかの書き込み処理が失敗したと判断するようにしてもよい。
【００２３】
好ましくは、前記更新リストを書き込む処理は、前記ファイルの内容を書き込む処理と共に行い、該更新リストを書き込む際に、該更新リストに前記ファイルの内容が正常に書き込まれたか否かを判断するための情報を含ませ、前記ファイル内容を書き込む処理および前記更新リストを書き込む処理が正常に完了したか、書き込まれた該更新リストに含まれる前記情報により前記ファイルの内容が正常に書き込まれていると判断される場合に、前記内容と前記更新リストの双方の書き込む処理が成功したと判断し、前記更新リストが書き込まれなかったか、書き込まれた前記更新リストに含まれる前記情報により前記ファイルの内容が正常に書き込まれていないと判断される場合に、前記内容と前記更新リストのいずれかの書き込み処理が失敗したと判断するようにしてもよい。
これによれば、更新あるいは作成したファイルの書き出しと更新リストの書き出しを同時に行うことで、記憶装置への書き込み完了の待ち合わせを減らせるので、コミット処理の時間が短くできる。これは、ファイルの内容がバッファに滞在する時間を短くすることで、必要なバッファ量を減らす効果も持つ。
【００２４】
好ましくは、複数のトランザクションがコミット処理を開始した順番を管理しておき、前記トランザクションについての前記ファイルの内容および前記更新リストの書き込み処理が双方とも成功したかいずれかが失敗したかの判断を、管理された前記順番で該トランザクションの直前のトランザクションがコミットかアボートかが確定した後に行い、前記内容と前記更新リストのいずれかの書き込み処理が失敗した場合に、前記トランザクションをアボートすると共に、少なくとも該トランザクションが更新（作成もしくは内容変更）したファイルを参照あるいは更新した現在コミット処理中の他のトランザクションをアボートするようにしてもよい。
【００２５】
これによって、並列的に動作する複数のトランザクションのコミット処理が可能になる。また、複数のトランザクションのコミット処理を非同期に並列に実行できるので、ベースとなるファイルシステムによるバッファリングやファイル書き出しのスケジューリングの効果を活かすことが出来、ファイルシステムやディスク装置の性能を引き出すことができる。
【００２６】
好ましくは、前記内容と前記更新リストのいずれかの書き込み処理が失敗した場合に、更に、当該書き込み処理の失敗に係る前記トランザクションが更新したファイルを参照あるいは更新した現在処理中であってまだコミット処理を開始していない他のトランザクションをもアボートするようにしてもよい。
【００２８】
また、好ましくは、あるトランザクションがコミット処理を開始したら、該あるトランザクションが更新（作成もしくは内容更新）したファイルの内容を他のトランザクションによって書き換えられないように待避（例えば名前を変えて保存）した後、該ファイルに対する排他制御を解除して他のトランザクションが更新動作を行えるようにし、前記あるトランザクションについての前記ファイルの内容を書き込む処理は、前記待避しておいた内容を書き込むものであるようにしてもよい。
【００２９】
好ましくは、前記ファイルの内容は、スレーブファイルシステムの管理する記憶装置に書き込む処理を行い、前記更新リストに関する情報を、マスターファイルシステムの管理する記憶装置に書き込む処理を行い、前記マスターファイルシステムは、各トランザクションがその処理開始時からコミット時までに一つ以上のファイルに対して行った更新が、トランザクション単位で全て有効になるか全て無効になるかいずれかの状態にしかならないことを保証するための処理を行い、前記スレーブファイルシステムは、前記トランザクションが前記マスターファイルシステムにおいてコミットされた場合に、前記内容と前記更新リストの双方の書き込み処理が成功したと判断し、前記スレーブファイルシステムは、前記トランザクションが前記マスターファイルシステムにおいてアボートされた場合に、前記内容と前記更新リストのいずれかの書き込み処理が失敗したと判断するようにしてもよい。
これによって、トランザクションのＡＣＩＤ性をそれ自体では備えていないファイルシステムをスレーブとして用い、ＡＣＩＤ性を備えているファイルシステムをマスターとして用いて、複数のファイルシステムにまたがってトランザクションのＡＣＩＤ性を実現できる。また、複数のファイルシステムを使うトランザクションの処理が可能になる。
【００３０】
また、本発明に係るトランザクション管理装置は、ファイルシステムの管理するファイルをアクセスして処理を行うトランザクションを管理するトランザクション管理装置であって、トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で更新（作成もしくは内容変更）する一つ以上のファイルの内容を、当該更新が既存のファイルの内容の変更の場合には、該既存のファイルの内容を変更する代わりにバッファ領域上に用意された該既存のファイルと同じ内容を持つ複製ファイルの内容を変更したものをもとの既存のファイルと併存させる形でファイルシステムの管理する記憶装置に書き込み、当該更新が新規のファイルの作成の場合には、バッファ領域上に作成された該新規のファイルを前記記憶装置へ書き込む処理と、前記トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上でファイルに対して行った全ての更新動作（作成、内容変更、削除）を記憶した更新リストを、前記記憶装置に書き込む処理とを行う第１の処理手段と、前記内容と前記更新リストの双方の書き込み処理が成功した場合に、前記トランザクションをコミットしたものと確定し、前記内容と前記更新リストのいずれかの書き込みが失敗した場合に、前記トランザクションをアボートする第２の処理手段とを備えたことを特徴とする。
【００３１】
また、本発明に係るトランザクション管理装置は、ファイルシステムの管理するファイルをアクセスして処理を行うトランザクションを管理するトランザクション管理装置であって、複数のトランザクションがコミット処理を開始した順番を管理する手段と、コミット処理を開始したあるトランザクションが、ファイルをアクセスする処理を開始してからコミット処理を開始するまでの間に、バッファ領域上で更新（作成もしくは内容変更）した一つ以上のファイルの内容を、前記ファイルシステムの管理する記憶装置に書き込む処理を行う手段と、管理された前記順番で前記あるトランザクションの直前のトランザクションがコミットかアボートかが確定した後に、前記書き込む処理が成功していれば前記あるトランザクションをコミットしたものと確定し、そうでない場合には前記あるトランザクション、および少なくとも該あるトランザクションが更新（作成もしくは内容変更）したファイルを参照あるいは更新した現在コミット処理中のトランザクションをアボートする手段とを備えたことを特徴とする。
【００３２】
好ましくは、前記トランザクションが更新したファイルを参照あるいは更新した現在コミット処理中のトランザクションをアボートするのに加えて、前記トランザクションが更新したファイルを参照あるいは更新した現在処理中であってまだコミット処理を開始していないトランザクションもアボートするようにしてもよい。
【００３３】
また、本発明に係るトランザクション管理装置は、マスターファイルシステムとスレーブファイルシステムを含む複数のファイルシステムがそれぞれ管理するファイルをアクセスして処理を行うトランザクションを管理するトランザクション管理装置であって、トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で更新（作成もしくは内容変更）する一つ以上のファイルであって前記スレーブファイルシステムの管理するファイルの内容を、当該更新が既存のファイルの内容の変更の場合には、該既存のファイルの内容を変更する代わりにバッファ領域上に用意された該既存のファイルと同じ内容を持つ複製ファイルの内容を変更したものをもとの既存のファイルと併存させる形で前記スレーブファイルシステムの管理する記憶装置に書き込み、当該更新が新規のファイルの作成の場合には、バッファ領域上に作成された該新規のファイルを前記記憶装置に書き込む処理を行う第１の処理手段と、前記トランザクションが処理を開始してから該トランザクションがコミットするまでの間に該トランザクションがバッファ領域上で前記スレーブファイルシステムの管理するファイルに対して行った全ての更新動作（作成、内容変更、削除）を記憶した更新リストを、前記マスターファイルシステムの管理する記憶装置を利用して書き込む処理を行う第２の処理手段と、前記マスターファイルシステムの管理する記憶装置に対する前記トランザクションの全ての更新動作に係る書き込み処理が正常に行われたと判断される場合に、前記トランザクションのコミットを確定し、それ以外の場合に、前記トランザクションをアボートする手段と、前記スレーブファイルシステムにおいて、前記マスターファイルシステムにおける前記トランザクションのコミットの確定もしくはアボートに従って、前記トランザクションのコミットの確定もしくはアボートを行う第３の処理手段とを備えたことを特徴とする。
【００３４】
この「前記トランザクションの全ての更新動作に係る書き込み処理」には、  （１）トランザクションが更新したマスターファイルシステム内のファイルの内容（書き換えたり、新しく作成したりしたもの）、
（２）スレーブファイルシステムの更新リスト、
（３）マスターファイルシステムが本発明を使っているのならばマスターファイルシステムの更新リスト、
の書き込み処理が相当する。
【００３５】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
【００３６】
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための（あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための）プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【００３７】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【００３８】
（第１の実施形態）
図１に、本発明の第１の実施形態に係るトランザクショナルファイルシステムの構成例を示す。
【００３９】
図１に示されるように、トランザクショナルファイルシステム１は、トランザクション管理部３、ファイル管理部４、トランザクショナルでないファイルシステム５から構成される。
【００４０】
ファイルシステム５は、バイト列という非常に基本的なデータを、名前を付けて管理する。ファイルシステム５の管理するバイト列のデータをファイルと呼ぶ。ファイルは例えばハードディスク等の安定記憶装置（図示せず）に記憶される。なお、安定記憶装置とは、例えば、ハードディスク等の、電源を切っても記憶した内容が消えない記憶装置を指す。
【００４１】
なお、ファイルシステム５自体としては通常の（トランザクショナルでない）ファイルシステムを利用して構わない。
【００４２】
アプリケーション２は、ファイルシステム５の管理するファイルに対して、その中にデータを新しく書き込んだり、既に書き込まれているデータを読み出したりする、というような基本的な操作が可能である。アプリケーション２により実行されるトランザクションは、トランザクショナルファイルシステム１に指示を出すことで開始し、トランザクショナルファイルシステム１からコミットまたはアボートを受け取ることで終了する。
【００４３】
トランザクショナルファイルシステム１は、概略的には、トランザクションを実行するアプリケーションプログラム２から指示を受け、個々のトランザクションについてファイルシステム５の管理する１または複数のファイルの操作を行い、各トランザクションについて順次コミット処理を行うものであり、後述するように、トランザクション管理部３およびファイル管理部４（トランザクション管理装置）、によってトランザクショナルな処理を実現している。
【００４４】
さて、トランザクションを実行するアプリケーションプログラム２は、トランザクションの開始時に「トランザクション識別子」を取得し、それ以降において、トランザクショナルファイルシステム１へファイルのアクセスを要求する場合には、自分のトランザクション識別子を一緒に提示するものとする。これによって、トランザクショナルファイルシステム１は、どのトランザクションがどのファイル（のどのバージョン）を操作（更新・作成・削除）しているかを把握する。
【００４５】
このトランザクション識別子は、同時に実行中のトランザクション間で重ならなければ、どのような識別子でも構わない。図１は、トランザクションマネージャを使わない場合の構成例で、この場合には、トランザクション管理部３がトランザクション識別子を発行するように実施することも出来るし、アプリケーションプログラム２が他のアプリケーションプログラムと重ならないトランザクション識別子を自分で発行するように実施することもできる。もちろん、図１の構成にトランザクションマネージャを追加して、そのトランザクションマネージャがトランザクション識別子を発行するように実施することもできる。
【００４６】
トランザクション管理部３は、コミット管理表３１を用いて、トランザクションのコミット処理を管理する。コミット処理は、前述したように、トランザクションの処理結果をコミットかアボートかのいずれかの状態に決定する処理である。
【００４７】
図２に、トランザクション管理部３の管理するコミット管理表３１の一例を示す。この例のコミット管理表３１は、コミットシーケンス番号と、そのコミット処理を行っているトランザクションのトランザクション識別子と、そのトランザクションの状態との３つ組の情報を持っている。
【００４８】
コミット処理は、コミット処理を開始したいトランザクションを実行しているアプリケーションプログラム２が、トランザクション管理部３にコミット処理の開始の要求を伝えることによって、開始される。このときに、トランザクション管理部３は、「コミットシーケンス番号」と呼ぶ順序番号を発行する。トランザクション管理部３は、このコミットシーケンス番号を用いて、トランザクションのコミット処理がコミットシーケンス番号の順に完了してアプリケーションプログラム２に通知されるように制御を行う。
【００４９】
トランザクションの状態には、そのトランザクションがコミット処理を実行中であることを示す「ＣＯＭＭＩＴＩＮＧ」、そのトランザクションがコミットしたことを示す「ＣＯＭＭＩＴ」、そのトランザクションがアボートしたことを示す「ＡＢＯＲＴ」の３つがある。ここで、「ＣＯＭＭＩＴ」と「ＡＢＯＲＴ」は、それぞれコミットあるいはアボートが確定するとともに、コミットの確定またはアボートの確定を呼出し元のアプリケーションプログラム２には通知したが、後で説明する更新リストの削除などの「後処理」がまだ完了していないことを示すものである。
【００５０】
後処理が完了すれば、そのエントリ自体がコミット管理表３１から削除される。
【００５１】
ファイル管理部４は、トランザクションを実行するアプリケーションプログラム２からの指示に従って、ファイルシステム５の管理下のファイルに対するアクセスを行う。
【００５２】
ここでは、ファイル管理部４は、図３に示すような関係で、アプリケーションプログラム２から見えるファイル名と、実際にファイルシステム５上で管理しているファイル名とを対応付けているものとする。すなわち、実際に下位のトランザクショナルでないファイルシステム５に記録されるファイル名は、アプリケーションプログラム２から見えるファイル名に、バージョン番号を付けたものになっている。
【００５３】
また、ファイル管理部４では、ファイルの排他制御を行う。すなわち、あるトランザクションによってあるファイルが操作対象とされた場合には、そのファイルをロックして、他のトランザクションによる操作を不可とする。また、あるファイルに対するロック解除のタイミングは、本実施形態では、そのファイルを操作対象としているトランザクションのコミット処理が開始された時点としており、非常に早い時点でのロック解除を可能としている。
【００５４】
アプリケーションプログラム２からファイル管理部４に指示された操作対象ファイルがロックされていなければ、ファイル管理部４はファイルシステム５にアクセスし（そのファイルはそのトランザクションのためにロックする）、ロックされていれば、必要な制御を行う（例えば、アクセスを拒否しアプリケーション２に暫く待った後にあらためて指示を出して貰うようにする、あるいはそのトランザクションをロック解除待ちの行列に投入する等）。
【００５５】
なお、ファイルは、ファイルシステム５のハードディスク等の安定記憶装置内のファイルが直接更新等されるのではなく、一旦ファイル管理部４のバッファ記憶上で更新等され、コミット処理において一括して、ファイル管理部４のバッファ記憶（図示せず）からファイルシステム５のハードディスク等の安定記憶装置に書き戻されるものとする。または、コミット処理以前における適当な（１回もしくは複数回の）タイミングにおいてもファイル管理部４のバッファ記憶（図示せず）からファイルシステム５のハードディスク等の安定記憶装置に書き戻されるものとする。なお、ファイル管理部４はバッファ記憶を持たず、ファイルシステム５が持つバッファ記憶を使うように実施することもできる。
【００５６】
本実施形態では、トランザクションがファイルに対して行う操作として、更新（書き換え）と作成と削除を例にとる。以下では、ファイルに対する更新と新規作成と削除のそれぞれについて説明する。
【００５７】
まず、ファイルの更新について説明する。
【００５８】
ここでは、トランザクショナルファイルシステム１は、ファイルの内容を書き換える更新の処理において、書き換える前のファイルをコピーした新しいバージョンのファイルを作成し、当該新しいバージョンのファイルの中を書き換えるものとする。すなわち、書き換える前のファイルを待避させた状態にして、そのコピーに対して書き換えを行ったファイルを新しいバージョンとする。
【００５９】
より具体的には、例えば、トランザクションを実行しているアプリケーションプログラム２がＦ１０２５という名前のファイルを更新しようとしたとする。ファイル管理部４は、アプリケーションプログラム２からファイル管理部４を通じて指示されたファイル（Ｆ１０２５）のその時点での最新バージョン（Ｆ１０２５＃３２とする）がファイル管理部４のバッファ記憶に存在するならば、Ｆ１０２５＃３２をコピーして作成したＦ１０２５＃３３をそのトランザクションによる更新対象として使用するようにしている（このトランザクションがコミットされたときに、このＦ１０２５＃３３が、新たな最新バージョンとなる）。また、最新バージョンのファイルＦ１０２５＃３２がファイル管理部４のバッファ記憶上になければ、Ｆ１０２５＃３２をファイルシステム５のハードディスク等の安定記憶装置からファイル管理部４のバッファ記憶にコピーして作成したＦ１０２５＃３３をそのトランザクションによる更新対象とする。
【００６０】
このように新しいバージョンのファイルを作成して更新することで、トランザクションのアボート時には簡単にファイルを元に戻すことが出来る。
【００６１】
より具体的には、トランザクションの処理が終了し、コミット処理が始まった場合、コミット処理中のファイル更新処理において（コミットかアボートかが確定する前に）、ファイル管理部４のバッファ記憶上で行われたファイルに対する更新の結果（上記の例の場合、Ｆ１０２５＃３３）を、ファイルシステム５のハードディスク等の安定記憶装置に書き戻し（この時点でファイルシステム５にはＦ１０２５＃３２とＦ１０２５＃３３が存在する）、そして、トランザクションがコミットかアボートかが確定した後に、必要な後処理を行う。
【００６２】
ファイルを更新したトランザクションがコミットした場合、後処理ではファイルシステム５とファイル管理部４の古いバージョンのファイルＦ１０２５＃３２を消去すればよい。逆に、トランザクションがアボートしたならば、ファイルシステム５とファイル管理部４の（コミットしたならば新しいバージョンになるはずであった）ファイルＦ１０２５＃３３を消去すればよい。
【００６３】
次に、ファイルの作成について説明する。
【００６４】
新しいファイルを作成する場合は、バージョン番号が「ＮＥＷ」という特殊なファイル名で作成する。例えば、トランザクションを実行しているアプリケーションプログラム２がＦ７００９という名前のファイルを新規に作成することを指示した場合、ファイル管理部４は、Ｆ７００９＃ＮＥＷという名前のファイルを作成する（なお、このファイルもまずはファイル管理部４のバッファ記憶上に作成される）。
【００６５】
このようにバージョン番号ではなく特殊な名前付けをするのは、作成したトランザクションが障害で中断した場合、それが作成したファイルを検出して削除できるようにするためである。例えば、Ｆ７００９＃０などの通常のバージョン番号を付けたファイル名で作成すると、それが正しいファイルなのか、作成途中で障害が発生して残っているファイルなのかが判断出来ない。
【００６６】
トランザクションの処理が終了し、コミット処理が始まった場合、コミット処理中のファイル更新処理において、ファイル管理部４のバッファ記憶上のＦ７００９＃ＮＥＷを、ファイルシステム５のハードディスク等の安定記憶装置に書き戻し（この時点でファイルシステム５とファイル管理部４にＦ７００９＃ＮＥＷが存在する）、そして、トランザクションがコミットかアボートかが確定した後に、必要な後処理を行う。ファイルを作成したトランザクションがコミットした場合、後処理ではファイルシステム５とファイル管理部４のＦ７００９＃ＮＥＷＦ７００９＃０という正しいバージョン番号のファイル名に変更する。逆に、トランザクションがアボートしたならば、ファイルシステム５とファイル管理部４からＦ７００９＃ＮＥＷを消去すればよい。
【００６７】
次に、ファイルの削除について説明する。
【００６８】
あるファイル（Ｆ５０２１＃９７とする）を削除する場合は、トランザクションの処理においては、Ｆ５０２１＃９７を削除することを記憶（もしくは予約）しておく。そして、トランザクションの処理が終了し、コミット処理が始まった場合、ファイルを作成したトランザクションがコミットしたならば、後処理においてファイルシステム５（とファイル管理部４にもあればそこ）からＦ５０２１＃９７を消去する。
【００６９】
なお、上記各処理においては、さらに、リカバリー処理のための手順が行われるが、これについては後で詳しく説明する。
【００７０】
さて、ファイル管理部４は、更新管理表４１によって、どのトランザクションがどのファイルについてどのような操作（更新・作成・削除）を行ったかを管理している。図４に、更新管理表４１の一例を示す。図４に例示する更新管理表は、トランザクション識別子と、そのトランザクションが行ったファイルの更新の履歴情報との対応を管理している。
【００７１】
更新情報には、例えば、次に示すような情報を記録する。
既存のファイルを更新して書き換えた場合には、例えば、
ＵＰＤ  Ｆ１０２５＃３２  Ｆ１０２５＃３３
のように、更新を示すＵＰＤというキーワードと、更新前のファイル名と、更新後のファイル名の組が記録される。
【００７２】
新しいファイルの作成の場合には、例えば、
ＮＥＷ  Ｆ７００９＃ＮＥＷ
のように、作成を示すＮＥＷというキーワードと、作成したファイルの名前の組が記録される。
【００７３】
既存のファイルを削除した場合には、例えば、
ＲＥＭ  Ｆ５０２１＃９７
のように、削除を示すＲＥＭというキーワードと、削除したファイルの名前が記録される。
【００７４】
次に、複数のトランザクション間に渡る全体的なコミット処理について説明する。
【００７５】
図５に、トランザクショナルファイルシステム１におけるコミット処理の流れの一例を示す。
【００７６】
まず、各々のトランザクションは、それぞれ、所望の（１または複数の）ファイルについて更新・作成・削除のうちの所望の操作を行う。なお、あるトランザクションがファイルに対して更新や削除の操作を行う場合には、そのトランザクションは対象とする全てのファイルにロックをかけているものとする。
【００７７】
さて、あるトランザクションがその処理を終了し、コミット処理を開始する場合には、まず、トランザクショナルファイルシステム１は、そのトランザクションに対してコミットシーケンス番号を発行する（ステップＳ１）。全てのコミット処理要求は、そのコミット開始の時点においてコミットシーケンス番号で順序付けされる。
【００７８】
次に、そのトランザクションが対象とする全ファイルについて、それらの排他制御に用いていたロックを外して、それらのファイルを他のトランザクションがアクセスしても良い状態にする（ステップＳ２）。ここで、トランザクショナルファイルシステム１では、ファイルを書き換える場合は新しいバージョンを作成するものとしているので、この時点でロックを外しても、コミットするトランザクションが更新したり作成したファイルの内容を、他のトランザクションに上書きされることはない（ことが保証される）。
【００７９】
次に、そのトランザクションが対象とする全ファイルについて、ファイル更新処理を行う（ステップＳ３）。
ファイル更新処理では、更新した新しいバージョンのファイルに該当するものと、新たに作成したファイル（バージョン番号がＮＥＷになっているもの）に該当するものを、ファイルシステム５の管理するハードディスク等の安定記憶装置に書き出す処理を行う。
このファイルの内容についての書き出し処理が正常に完了すれば、さらに、後で説明する更新リストをファイルシステム５の管理するハードディスク等の安定記憶装置に書き出す処理を行う。
【００８０】
この更新リストについての書き出し処理が完了すれば、コミットシーケンス番号が自分より小さなトランザクションのコミット処理がすべて完了するのを待つ（ステップＳ４）。
【００８１】
それらのコミット処理が完了すれば、このトランザクションもコミットし、その旨を呼出し元のアプリケーションプログラム２に伝える。
【００８２】
なお、当該トランザクションが起動している唯一のトランザクションである場合、あるいは複数のトランザクションが起動しているが当該トランザクションが現在コミット処理中のトランザクションのうちで最も小さいコミットシーケンス番号を持つものである場合には、上記の更新リストを書き出す処理の正常終了によって、ただちにコミットが確定し、コミットを呼出し元のアプリケーションプログラム２に伝えることができる。
【００８３】
この時点で、次のコミットシーケンス番号を持つトランザクションもコミットかアボートかを確定して良い状態になる。つまり、トランザクションはコミットシーケンス番号順に、コミットかアボートかの確定を行う。
【００８４】
コミットが確定した後、後処理を行う（ステップＳ５）。
後処理では、更新したファイルの古いバージョンのファイルに該当するものと、削除が指示されたファイルに該当するものを、ファイルシステム５（とファイル管理部４）から削除するとともに、新しく作成したファイルのバージョン番号がＮＥＷになっているものがあればそれを０に変更する。
そして、それらが完了すれば、更新リストを削除することができる（この時点で更新リストを削除する方法もあるが、本実施形態ではコミットが確定した場合には後述するようにこの時点では削除せず、後続する最初のコミットされたトランザクションのコミット処理が終了した後に削除するものとする）。
【００８５】
一方、上記のファイルを書き出す処理が正常に完了しなかった場合、またはそれが正常に完了したが更新リストを書き出す処理が正常に完了しなかった場合には、アボートが確定する。アボートした場合には、後処理で、ファイル更新処理でファイルシステム５に書き戻した、更新した新しいバージョンのファイルに該当するものと、新たに作成したファイルに該当するものを削除し（ファイル管理部４の対応するファイルも削除し）、それらが完了すれば、更新リストを削除する。
【００８６】
図５で分かるように、コミット処理はコミットシーケンス番号でシリアライズされるが、その順序で待ち合わせをしなければならないのは、コミットかアボートかを確定する時点だけである。従って、複数のトランザクションのファイル更新処理や後処理は並行して実行することができる。これらの処理では複数のファイルをファイルシステム５のハードディスク等の安定記憶装置に書き出す処理が必要になるので、同時に並行に複数の書き出し要求がファイルシステム５に出されると、ファイルシステム５の側で、ハードディスク等のシーク時間が小さくなるような書き出し順序のスケジューリングなどの最適化を行うことが出来る。これにより、ファイルシステム５およびハードディスク等の性能を引き出して活かすことが出来る。
【００８７】
次に、ある１つのトランザクションに着目してコミット処理について説明する。
【００８８】
図６に、本実施形態のファイル更新処理と後処理の流れの一例を示す。
【００８９】
ここでは、図４のトランザクション識別子４９８のトランザクションを例にとって説明する。
【００９０】
図４の例のトランザクションは、Ｆ１０２５とＦ３４７９の更新、Ｆ７００９の作成、Ｆ５０２１の削除を行うものである。このトランザクションが更新等の処理を終えた時点では、例えば、ファイル管理部４のバッファ記憶内に、Ｆ１０２５＃３２、Ｆ１０２５＃３３、Ｆ７００９＃ＮＥＷ、Ｆ３４７９＃５２、Ｆ３４７９＃５３のファイルが記憶され、ファイルシステム５内に、Ｆ１０２５＃３２、Ｆ５０２１＃９７、Ｆ３４７９＃５２のファイルが記憶されている。
【００９１】
あるトランザクションについて、コミット処理が開始されると、コミットシーケンス番号を得た後、まず、ロックの解除を行う。
【００９２】
上記の例の場合には、Ｆ１０２５、Ｆ３４７９、Ｆ７００９、Ｆ５０２１のファイルのロックが解除される。この時点で、他のトランザクションはこれらのファイルにアクセスすることが可能になる。例えば、他のトランザクションがＦ１０２５を更新する場合、Ｆ１０２５＃３４が新たに作成され、他のトランザクションは一旦バッファ記憶上のＦ１０２５＃３４を更新することになる。従って、トランザクション識別子４９８のトランザクションがコミット処理に入った時点で、Ｆ１０２５＃３３以前のバージョンの内容は不変となる。
【００９３】
同様に、Ｆ１０２５＃３４を更新した他のトランザクションが「ＣＯＭＭＩＴＩＮＧ」となれば（トランザクション識別子４９８のトランザクションが依然として「ＣＯＭＭＩＴＩＮＧ」であっても）、さらに他のトランザクションはＦ１０２５＃３５を更新することができる。それ以降も同様に、次々とＦ１０２５の更新をすることができる。
【００９４】
さて、その後、このトランザクションが更新して書き換えた新しいバージョンのファイルや新しく作成したファイルを、ファイルシステム５のハードディスク等の安定記憶装置へ書き出す処理を、全ての該当するファイルに対して並行して実行する。図４の例の場合、ファイルシステム５内に、Ｆ１０２５＃３３、Ｆ３４７９＃５３、Ｆ７００９＃ＮＥＷのファイルが書き戻される。
【００９５】
全てのファイルの書き出しが完了すれば、「更新リスト」を作成して、これをファイルシステム５のハードディスク等の安定記憶装置へ書き出す。
【００９６】
更新リストは、このトランザクションによるファイルシステム５に対する更新情報を持っているファイルである。
【００９７】
図７に、更新リストの一例を示す。また、図７には、図４の例に対応する内容を例示する。
【００９８】
この例の場合、ファイル名は＃４９８で、このトランザクションのコミットシーケンス番号の頭に＃を付けた名前のファイルとして記録する。
【００９９】
更新リストの最初には、４という数字が入っている。これは、この更新リスト内の更新情報の数を示している。この数字は、リカバリ時に更新リスト自身が正しく書き込まれたものかどうかを判断するのに使用する。この判断を可能とする他の方法としては、更新リスト全体のチェックサムのような情報を持たせる方法もある。
【０１００】
更新リストの残りの部分は、更新管理表４１の更新情報と同じものである。この情報があれば、ファイルシステム５中のどのファイルを残してどのファイルを消せば一貫性のある状態に出来るかがわかる。
【０１０１】
更新リストがファイルシステム５のハードディスク等の安定記憶装置に書き出されれば、当該トランザクションについて、コミットまたはアボートを確定してよい状態になる。
【０１０２】
コミットシーケンス番号が小さなトランザクションのコミットが確定したことを確認した後に、アプリケーションプログラム２にコミット完了を知らせ、続いて、後処理を開始する。
【０１０３】
コミットした場合の後処理は、更新リストの中に記録されている、更新して書き換えた古いバージョンのファイルと、削除を指示されたファイルを、実際にファイルシステム５から消去する処理を、全ての対象となるファイルに対して並行して行う。さらに、新しく作成したファイルのバージョン番号がＮＥＷになっているので、これを０に変更する処理を行う。
【０１０４】
図４の例の場合、ファイルシステム５から、Ｆ１０２５＃３２、Ｆ５０２１＃９７、Ｆ３４７９＃５２のファイルが削除され、Ｆ７００９＃ＮＥＷがＦ７００９＃０にされる。この結果、ファイルシステム５には、上記ファイルについては、Ｆ１０２５＃３３、Ｆ３４７９＃５３、Ｆ７００９＃０のファイルが格納された状態になる。
【０１０５】
以上の処理が全て完了すれば、更新リストは不要である。
【０１０６】
ただし、本実施形態では、コミットシーケンス番号が自分より大きなコミット処理が行われている場合は、次のコミットシーケンス番号のトランザクションのコミットが確定するのを待って、更新リストを削除するものとする。コミットシーケンス番号が自分より大きなコミット処理がまだ起動されていないならば、その時点で更新リストを削除して構わない。更新リストが消えれば、コミット処理を終了する。
【０１０７】
上記のような更新リストの削除条件は、リカバリ時に、残っている更新リストの中で最もコミットシーケンス番号が小さな更新リストに対応するトランザクションは正しくコミットしたものであるという前提でリカバリ処理を開始できるようにするためである。
【０１０８】
ところで、前述したように、あるトランザクションがコミット処理に入ったならば、直ちに、それが対象としたファイルのロックを解除するので、この時点で他のトランザクションはそのファイルにアクセス可能となる。従って、コミット未確定にかかるファイルをもとに次々の他のトランザクションが更新を行うことが生じうる。
【０１０９】
例えば、トランザクション＃１が１０２５＃３２を変更して新バージョンのファイルＦ１０２５＃３３が作成されたが、トランザクション＃１がまだ「ＣＯＭＭＩＴＩＮＧ」の状態にあるときに、トランザクション＃２が１０２５＃３３を変更して新バージョンのファイルＦ１０２５＃３４が作成され、同様に、トランザクション＃１とトランザクション＃２がまだ「ＣＯＭＭＩＴＩＮＧ」の状態にあるときに、トランザクション＃３が１０２５＃３４を変更して新バージョンのファイルＦ１０２５＃３５が作成されるということが発生し得る。
【０１１０】
この場合、トランザクション＃２はトランザクション＃１のコミット確定を前提として処理をしており、同様に、トランザクション＃３はトランザクション＃１とトランザクション＃２のコミット確定を前提として処理をしていることになる。言い換えると、その前提が満たされないと、トランザクションはアボートとなってしまう。例えば、トランザクション＃１のアボートが確定した場合には、その時点で、トランザクション＃２とトランザクション＃３のアボートが確定してしまう。
【０１１１】
そこで、あるトランザクションがアボートした場合、このトランザクションと同じファイルを更新もしくは削除しているコミット処理中のトランザクションを同時にアボートするようにしてもよい。
例えば、トランザクション＃１〜＃３が「ＣＯＭＭＩＴＩＮＧ」の場合、トランザクション＃１のアボートが確定した時点で、ファイル管理部４のバッファ記憶内やファイルシステム５にＦ１０２５＃３２〜Ｆ１０２５＃３５のファイルが記憶されているものとした場合に、トランザクション＃１のアボートによる後処理において、一括してＦ１０２５＃３３〜Ｆ１０２５＃３５を削除するようにしてもよい。
【０１１２】
また、一括アボートを実現する方法としては、他の方法も考えられる。
【０１１３】
例えば、あるトランザクションのアボートが確定した場合に、そのトランザクションと同じファイルを更新もしくは削除している「ＣＯＭＭＩＴＩＮＧ」のトランザクションだけでなく、さらに同じファイルを更新もしくは削除しているコミット処理に入る前の処理中のトランザクションをも同時にアボート（無効に）するようにしてもよい。
【０１１４】
あるいは、あるトランザクションのアボートが確定した場合に、そのトランザクションと同じファイルを更新もしくは削除している「ＣＯＭＭＩＴＩＮＧ」のトランザクションだけでなく、コミット処理中の全てのトランザクションを同時にアボート（無効に）してしまうようにしてもよい。
【０１１５】
あるいは、あるトランザクションのアボートが確定した場合に、起動中の全てのトランザクション（コミット処理前とコミット処理中の全トランザクション）を一旦アボート（無効に）してしまい、あらためて処理を再開するようにしてもよい。
【０１１６】
以上の一括アボートは、ほとんどアボートが生じないと想定されるシステムには特に有効である。
【０１１７】
次に、リカバリ処理について説明する。
【０１１８】
計算機の障害などで再起動したときには、リカバリ処理を行う。これは、コミット処理の途中であったトランザクションの状態を、コミットかアボートかに確定する処理である。
【０１１９】
図８に、本実施形態のトランザクショナルファイルシステム１におけるリカバリ処理の手順の一例を示す。
【０１２０】
図８に示すように、リカバリ処理は、ファイルシステム５に残っている更新リストを探して、それらが正しくコミットしたものかどうかを判断して、必要な処理を進めて行く。図７に示したように、本実施形態のトランザクショナルファイルシステム１では、コミットシーケンス番号の頭に＃をつけたファイル名で更新リストを記録している。それゆえ、リカバリ時にファイルシステム５に残っている全ての更新リストをみつけて、それをコミットシーケンス番号順に並べるのは容易である。
【０１２１】
先に延べたように、更新リストが残っていた場合、コミットシーケンス番号が最小の更新リストは正しくコミットしたものである。そこで、最小のコミットシーケンス番号を持つ更新リストから初めて、順に更新リストを見て行き、その更新リストに従って必要な後処理を実行して行く。
【０１２２】
すなわち、処理の開始時においては、更新リストの残っている最小のコミットシーケンス番号をｎとし、その更新リストをＵn とする（ステップＳ１１）。また、ステップＳ１７で次の更新リスト（すなわちＵn+1 ）がある場合には、ステップＳ１８においてｎを１増加する。
【０１２３】
次に、更新リストＵｎが正しい形式か否かを調べる（ステップＳ１２）。
【０１２４】
例えば、更新リストの最初に記録された情報によって、更新リストが正しい状態でないことがわかったり、あるいは更新リストのコミットシーケンス番号が連続していないことが分かれば、それ以降は正しくコミットしていないことが分かる。
【０１２５】
なお、本実施形態では、上記のように更新リストが残っていた場合においてコミットシーケンス番号が最小の更新リストは正しくコミットしたものであるようになっている。
【０１２６】
次に、ステップＳ１２において更新リストＵｎが正しい形式であると判断された場合には、更新リストＵｎ内の更新情報に従ってファイルシステムが正しく更新されているか否かを調べる（ステップＳ１３）。正しく更新されていないと判断された場合には、更新リストＵｎ内の更新情報に従ってファイルシステムを更新する（ステップＳ１４）。
【０１２７】
ファイルシステムの更新が成功した場合（ステップＳ１５）およびステップＳ１３において正しく更新されていると判断された場合には、後処理を行った後に、更新リストＵｎを削除する（ステップＳ１６）。そして、次の更新リストがあれば（ステップＳ１７）、ステップＳ１２に戻って次の更新リストに対する処理を行う。
【０１２８】
しかして、上記繰り返し処理の中で、ステップＳ１２において更新リストＵｎが正しい形式でないと判断された場合、ステップＳ１５においてファイルシステムの更新が成功しなかったと判断された場合およびステップＳ１７において次の更新リストはないと判断された場合には、ループ処理を抜けてステップＳ１９に移り、残っている全ての更新リストによるファイルの更新を取り消して、更新リストを削除する。
【０１２９】
例えば、図４に例示したトランザクションにおいて、更新リストＵｎが正しい形式である場合に、更新リストが図７のようであり、それらファイルについて、ファイルシステム５内に、Ｆ１０２５＃３３、Ｆ３４７９＃５３、Ｆ７００９＃０のファイルが格納された状態であれば、ファイルシステム５が正しく更新されているので、更新リストを削除すればよい。一方、ファイルシステム５内に、Ｆ１０２５＃３２、Ｆ１０２５＃３３、Ｆ５０２１＃９７、Ｆ７００９＃ＮＥＷ、Ｆ３４７９＃５２、Ｆ３４７９＃５３のファイルが格納された状態であれば、ファイルシステム５が正しく更新されていないので、上記のように正しく更新する。
【０１３０】
さて、これまでの手順によって、更新リストに基づいたリカバリ処理は終了する。
【０１３１】
ただし、トランザクションによる更新をファイルシステム５には書き込んだが、更新リストが書き込まれる前に障害が発生したような場合には、これまでの手順では回収されないファイルが残る。このようなファイルの存在は、次のそのファイルを使用する時点で検出できる。すなわち、通常、新しいファイルを使用開始する場合、そのファイルのバージョンは１つだけ存在するはずである。それが、複数あった場合は、過去にトランザクションが更新しようとしたが、障害で中断されたものであると判断できる。その結果、複数のバージョンのうち、最もバージョン番号の小さなものだけを残して、それ以外は削除して構わない。新しく作成するファイルに関しても同様で、次に同じ名前で新しいファイルを作成しようとした時点で検出可能である。
【０１３２】
このように、次にそのファイルを使用する時点で回収を行う方式は、再起動時のリカバリ処理の負荷を軽減する働きを持つ。他の実施方式としては、再起動時に上記のリカバリ処理を行った後、ファイルシステム５中に複数のバージョンが残っているファイルと、バージョン番号がＮＥＷになっているファイルとを検索し、それらの後始末を行う方式も可能である。
【０１３３】
以下では、ファイルの排他制御のバリエーションについて説明する。
【０１３４】
これまで説明した例では、トランザクションがファイルをアクセスした時点で新しいバージョンのファイルを作成することによって、旧バージョンのファイルを待避することとし、これに基づいた排他制御を行ったが、本実施形態において、ファイルを待避するタイミングは、上記の例のタイミング以降で且つコミット処理でのロック解除のタイミングまでの間の様々なタイミングで行うことが可能である。
【０１３５】
以下では、バリエーションの一つとして、あるトランザクションがコミット処理に入った直後にファイルを待避する例について説明する。
【０１３６】
ここでは、あるトランザクションがファイルシステム５内のファイル（Ａとする）を更新する場合、バッファ記憶上にコピーした同名のファイルＡを更新する。
【０１３７】
トランザクションがＡの更新等を終了し、コミット処理に入り、コミットシーケンス番号を発行した後に、バッファ記憶上のファイルＡをコピーしたファイル（別の名前で管理するものとする）を作成し、ロックを解除し、一方を待避用とし、他方を次のトランザクションによる更新用とする。
【０１３８】
コミット処理におけるファイル更新処理では、待避用とした更新後のファイルＡをファイルシステム５に書き戻す。なお、ファイルシステム５には、ファイルシステム５の機能によりまたはファイル管理部４の機能により、更新前のファイルＡも例えば名前を変えて保存・管理されるものとする。
【０１３９】
そして、トランザクションがコミットした場合には、更新前のファイルＡを削除し、アボートした場合には、更新後のファイルＡを削除する。
【０１４０】
同じファイルを次々と更新した複数のトランザクションが同時にコミット処理中となっている場合には、複数バージョンのファイルが存在し得るが、基本的には同様の処理を行えばよい。
【０１４１】
以上のように本発明によれば、トランザクションのＡＣＩＤ性をそれ自体では備えていないファイルシステムを用いて、トランザクションのＡＣＩＤ性を実現することができる。また、複数のトランザクションのコミット処理を非同期に並列に実行できる。その他、ファイルシステムやディスク装置の性能を引き出すことができる、ロック待ちでブロックする期間を短くできる、トランザクションの並行性をあげてシステム全体の性能を向上させることができる、などの様々な効果を得ることができる。
【０１４２】
（第２の実施形態）
第１の実施形態では、図６で説明したように、ファイル更新処理において、更新したファイルや作成したファイルの書き出しが完了したことを確認した後で、更新リストの書き出しを行っている。本実施形態では、図９に示すように、更新リストの書き出しを、更新したファイルや作成したファイルの書き出しと同じタイミングで行うことによって、ファイル更新処理の時間を短縮するようにしたものである。
【０１４３】
以下では、第１の実施形態と相違する点を中心に説明する。
【０１４４】
第１の実施形態では、更新したファイル・作成したファイルの書き出しを待ち合わせることで、更新リストに書かれているファイルが必ず正しくファイルシステム５中に存在することを保証できた。これに対して、同時に書き出しを行うと、これを保証する新たな手段が必要になる。その手段として、本実施形態では、図１０に示すように更新リストを拡張する。
【０１４５】
この更新リストは、図７の更新リストに加えて、ＵＰＤおよびＮＥＷで新しく作成するファイルが正しくファイルシステム５に書き出されたかどうかを検証するのに必要な情報を持っている。本実施形態では、ファイルのサイズとチェックサムを持っている。図１０の例では、ＵＰＤで更新されるＦ１０２５＃３３というファイルのサイズは１５２１８バイトで、その内容のチェックサムは１６進数でＤ７５Ｅであることを示している。
【０１４６】
本実施形態において、後処理の手順は、第１の実施形態と基本的には同様である。異なる点は、リカバリ処理のときの判定条件である。すなわち、本実施形態のリカバリ処理時には、更新リストが正しく残っていても、その中に書かれた新しいファイルのサイズとチェックサムがあっていなければ、この更新リストに対応するトランザクションは正しくコミットしていないと判断するようにすれば、後は第１の実施形態と同じである。
【０１４７】
（第３の実施形態）
次に、第３の実施の形態について説明する。
【０１４８】
トランザクションを処理するアプリケーションプログラム２が、複数のファイルシステム中のファイルを更新するようなシステムも存在する。このようなシステムにおいては、トランザクショナルなファイルシステムが１つあれば、本発明を適用することで、他のトランザクショナルでないファイルシステムも簡単にトランザクショナルにすることができる。本実施形態では、このような場合について説明する。
【０１４９】
図１１に示すように、トランザクションを実行するアプリケーションプログラム２が複数のファイルシステム中のファイルを更新する場合、トランザクショナルなファイルシステムを１つマスターファイルシステム（１１）として用いる。このマスターファイルシステム１１は、本発明を適用して第１の実施形態や第２の実施形態のように実装したものでも良いし、その他の手法を用いて実装したものでも構わない。ここでは、マスターファイルシステムを本発明の第１の実施形態で実装した例を使って説明する。このとき、スレーブファイルシステム１２は、図１２に示すように、通常のトランザクショナルでないファイルシステム１５と、ファイル管理部１４とから構成される。なお、図１１のトランザクション管理部１３および図１２のファイル管理部１４の役割は、図１の構成のトランザクション管理部３およびファイル管理部４と同様である。
【０１５０】
図１２のファイル管理部１４は、図１３に示す手順でコミット処理を行う。この処理の流れは、基本的には図６に示す第１の実施形態のコミット処理と同じである。異なる点は、第１の実施形態では更新したファイルや作成したファイルの書き出し先と同じファイルシステム５上に更新リストを書き出していたが、本実施形態では、更新リストをマスターファイルシステム１１に書き込む点が異なる。スレーブファイルシステムの更新リストを、同じトランザクションのマスターファイルシステムへの更新したファイルや作成したファイルの書き出しと同じ扱いで書き出す。
【０１５１】
すなわち、ファイルの内容については、マスターファイルシステム１１とスレーブファイルシステム１２のそれぞれにおいて自身で管理するファイルシステム１５に書き込むが、更新リストについては、マスターファイルシステム１１とスレーブファイルシステム１２のいずれにおいてもマスターファイルシステム１１の管理するファイルシステム１５に書き込む。
【０１５２】
そして、マスターファイルシステム１１では、例えば、自身の更新リストの、自身で管理するファイルシステム１５への書き込みが全て正常に完了し、かつ、先行する必要な全てのトランザクションがコミットした場合に、当該トランザクションのコミットを確定し、それ以外の場合に、当該トランザクションのアボートが確定する。マスターファイルシステムでコミットが確定すれば、マスターファイルシステムに書かれたスレーブファイルシステムの更新リストも正しく書き出されていることが保証できる。各々のスレーブファイルシステム１２は、当該トランザクションがマスターファイルシステム１１においてコミットされた場合に、（ファイルの内容の書き込みと）更新リストの書き込みが成功した（あるいはコミットした）と判断し、アボートされた場合に、例えば、更新リストの書き込みが失敗した（あるいはアボートした）と判断する。
【０１５３】
このようにすることで、マスターファイルシステム１１が正常にコミットすれば、更新リストも正しく残り、逆にマスターファイルシステム１１がアボートすれば、更新リストは残らない。
【０１５４】
このような性質を利用すると、リカバリが発生した時の処理も簡単になる。すなわち、マスターファイルシステム１１に残っている全てのスレーブファイルシステムの更新リストは正しくコミットしたもであるので、その中に記録されている更新を全て反映させて構わない。
【０１５５】
このリカバリ処理で回収できないファイルに関しては、第１の実施形態と同じく、次にそのファイルをアクセスするときなどに検出して回収することができる。
【０１５６】
なお、上記では、全スレーブファイルシステム１２の更新リストをマスターファイルシステム１１の管理するファイルシステム１５に書き込むようにしたが、その代わりに、全部または一部のスレーブファイルシステム１２について、更新リストを自身の管理するファイルシステム１５に書き込み、そのようなスレーブファイルシステム１２からマスターファイルシステム１１に、更新リストの書き込みを正常に完了した旨（あるいは、その更新リストへのアクセス方法を示す情報）を通知して、マスターファイルシステムはその情報を自身の更新リストに記入するようにしてもよい。
【０１５７】
なお、以上では、ファイルを更新等するのに用いるバッファ記憶がファイル管理部４内にあるものとして説明したが、このバッファ記憶は、ファイルシステム５内にあってもよいし、それら以外のところにあっても構わない。
【０１５８】
なお、以上の各機能は、ソフトウェアとしても実現可能である。
【０１５９】
また、本実施形態は、コンピュータに所定の手段を実行させるための（あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための）プログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【０１６０】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【０１６１】
【発明の効果】
本発明によれば、あるトランザクションが処理を開始してからそれがコミットするまでの間にトランザクションがバッファ領域上で更新したファイルの内容をその更新を後で取り消すことが可能な形でトランザクショナルでないファイルシステムの管理する記憶装置に書き込む処理を行い、この処理開始からコミットまでの間トランザクションがバッファ領域上でファイルに対して行った全ての更新動作を記憶した更新リストをトランザクショナルでないファイルシステムに書き込む処理を行い、それら２つの書き込み処理がいずれも成功した場合にトランザクションをコミットしたものと確定するようにしたので、トランザクショナルでないファイルシステムをベースにしてトランザクショナルなファイルシステムを実現することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るトランザクショナルファイルシステムの構成例を示す図
【図２】コミット管理表の一例を示す図
【図３】バージョン管理可能なファイル名の構造の一例を示す図
【図４】更新管理表の一例を示す図
【図５】複数のトランザクション間に渡る全体的なコミット処理の流れの一例を示す図
【図６】１つのトランザクションにおけるコミット処理の流れの一例を示す図
【図７】更新リストの一例を示す図
【図８】更新リストの他の例を示す図
【図９】リカバリ処理の流れの一例を示す図
【図１０】１つのトランザクションにおけるコミット処理の流れの他の例を示す図
【図１１】同実施形態に係るマスターファイルシステムとスレーブファイルシステムからなるトランザクショナルファイルシステムの構成例を示す図
【図１２】図１１のスレーブファイルシステムの構成例を示す図
【図１３】１つのトランザクションにおけるコミット処理の流れのさらに他の一例を示す図
【符号の説明】
１…トランザクショナルファイルシステム
２…アプリケーションプログラム
３，１３…トランザクション管理部
３１…コミット管理表
４，１４…ファイル管理部
４１…更新管理表
５，１５…ファイルシステム
１１…マスターファールシステム
１２…スレーブファールシステム
【図１】
0003785004.tif 000002
【図２】
0003785004.tif 000003
【図３】
0003785004.tif 000004
【図４】
0003785004.tif 000005
【図５】
0003785004.tif 000006
【図６】
0003785004.tif 000007
【図７】
0003785004.tif 000008
【図８】
0003785004.tif 000009
【図９】
0003785004.tif 000010
【図１０】
0003785004.tif 000011
【図１１】
0003785004.tif 000012
【図１２】
0003785004.tif 000013
【図１３】
0003785004.tif 000014