JP3476973B2 - 分散コンピューティングシステム - Google Patents

分散コンピューティングシステム

Info

Publication number
JP3476973B2
JP3476973B2 JP21127995A JP21127995A JP3476973B2 JP 3476973 B2 JP3476973 B2 JP 3476973B2 JP 21127995 A JP21127995 A JP 21127995A JP 21127995 A JP21127995 A JP 21127995A JP 3476973 B2 JP3476973 B2 JP 3476973B2
Authority
JP
Japan
Prior art keywords
file
token
write
server
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP21127995A
Other languages
English (en)
Other versions
JPH0991185A (ja
Inventor
ハー ハーマン ラオ チュン
エイチ.スカーラ アンドレア
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AT&T Corp
Original Assignee
AT&T Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AT&T Corp filed Critical AT&T Corp
Publication of JPH0991185A publication Critical patent/JPH0991185A/ja
Application granted granted Critical
Publication of JP3476973B2 publication Critical patent/JP3476973B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/164File meta data generation
    • G06F16/166File name conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/184Distributed file systems implemented as replicated file system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)
  • Hardware Redundancy (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータシス
テムに関し、特に、緩く接続された分散システムにおけ
る動作の同期に関する。
【0002】
【従来の技術】元来、コンピュータシステムは、単一の
プロセッサと、ファイルを記憶するディスクドライブの
ような大容量記憶装置とから構成された。プロセッサの
ユーザはそれぞれプロセッサに接続された端末を有し、
そのプロセッサを使用してファイルにアクセスすること
ができた。このようなシステムでは、すべてのアクセス
はシステムの単一のプロセッサを通じてのものであり、
システムには与えられたファイルの単一のコピーのみが
存在した。プロセッサ、メモリ、および大容量記憶装置
(例えばディスクドライブ)の価格が低下するにつれ
て、このようなシングルプロセッサシステムは分散シス
テムによって置き換えられている。分散システムには、
ネットワークへと接続されたいくつものローカルなプロ
セッサおよび記憶装置がある。このような分散システム
の簡単な例としては、各ユーザがパーソナルコンピュー
タまたはワークステーションを有し、ワークステーショ
ンにファイルを提供するファイルサーバがあり、ワーク
ステーションがローカルエリアネットワークによって相
互におよびファイルサーバに接続されたものがある。も
ちろん、このような分散システムはそれ自体、より大き
な分散システムの要素となることもあり、その場合に
は、他のシングルプロセッサシステムおよび分散システ
ムが、ローカルエリアネットワークまたは電話システム
のような広域ネットワークによって接続される。
【0003】このような分散システムの利点には、ロバ
ストネス(頑強さ)および速度が改善されることがあ
る。ロバストネスの改善は、システムを構成する要素の
数から生じる。例えば、1つのワークステーションが故
障しても、ネットワーク上の他のワークステーションが
役に立たなくなることはない。さらに、各ワークステー
ションは固有のファイルシステムを有し、そのため、シ
ステムにはファイルの複数のコピーが存在することがあ
る。ファイルの1つのコピーが使用不能になった場合、
他のワークステーションからコピーを使用可能である。
速度の改善は、ユーザがローカルな処理能力および他人
と共有していないローカルな記憶装置を有するというこ
とから生じる。
【0004】ファイルのローカルなコピーは分散システ
ムのロバストネスおよび速度を改善するが、書き込み可
能なファイルのローカルなコピーは1つの主要な欠点を
有する。それらのコピーの相互の一貫性を保つことが困
難であるという欠点である。理想的には、分散システム
におけるファイル操作の意味規則(セマンティクス)
は、プロセスのグループがプロセッサを共有するような
システムにおけるものと同一であろう。例えば、UNI
Xオペレーティングシステムでは(UNIXはX/OP
EN財団の商標である)、プロセスがデータをファイル
に書き込むとき、他のプロセスは、最初のプロセスによ
る書き込みが完了するまで、そのファイルからデータを
読み出すことも、そのファイルにデータを書き込むこと
もできない。これは、読み出しプロセスがファイルをオ
ープンしたのが、書き込みプロセスがシステムコールを
実行する前か後かにかかわらず成り立つ。
【0005】利用可能な分散システムはローカルコピー
の問題を「キャッシュ」によって処理している。サーバ
にファイルの単一の主コピー(マスタコピー)があり、
そのファイルを使用しているワークステーションはその
ファイルの一部または全部を含むキャッシュを有する。
キャッシュされたコピーにおける変化はマスタコピーに
は即時には反映されず、その逆もそうであるため、キャ
ッシュされたコピーは相互にあるいは主コピーと矛盾す
ることがある。その結果、あるワークステーションによ
るファイルの読み出しが他のワークステーションによる
書き込みの後にあっても、その読み出しは、キャッシュ
されたコピーを使用しているため、書き込みの結果を見
ないことがある。
【0006】キャッシュを使用するシステムのファイル
操作の意味規則は一貫性の欠如を反映している。このよ
うなシステムの一例は、アール.サンドバーグ(R. Sand
berg)他、「Sun Network File Systemの設計と実装(Des
ign and Implementation ofthe Sun Network File Syst
em)」、Proceedings of Summer Usenix(1985年6
月)第119〜130ページ、に記載されたSun Networ
k File System(NFS)である。NFSでは、与えら
れたファイルはファイルサーバに存在する。ワークステ
ーションはその与えられたファイルのコピーを含むキャ
ッシュを有することが可能である。キャッシュ内のコピ
ーは、そのコピーがキャッシュにロードされた後3秒間
はファイルサーバ内のコピーと同一であると仮定され
る。キャッシュされたディレクトリデータは、フェッチ
された後30秒間は有効であると仮定される。
【0007】もう1つの例は、エム.カザー(M. Kaza
r)、「アンドリューファイルシステムにおける同期とキ
ャッシュの問題(Synchronization and caching issues
in theandrew file system)」、Proceedings of Winter
Usenix(1988年)に記載されたアンドリューファ
イルシステムである。アンドリューファイルシステム
は、ファイルシステムコールが完了した後、そのファイ
ルシステムコールの結果は、2つの重要な例外を除い
て、ネットワークのどこでも即時に見えることを保証す
る。第1の例外は、書き込みシステムコールの場合、フ
ァイルに書き込まれた新しいデータは、そのファイルに
書き込みをしているプロセスがファイルを閉じるまで
は、主コピーには実際には書き込まれないことである。
第2の例外は、ファイルのキャッシュされたコピーは、
プロセスがそのファイルをオープンするときに主コピー
との一貫性が検査されるだけである。従って、2つのプ
ロセスがファイルを共有するとき、あるワークステーシ
ョンで実行中の第1のプロセスは、他のワークステーシ
ョンで実行中の第2のプロセスによって書き込まれたデ
ータを、第2のプロセスがそのファイルをクローズした
後に第1のプロセスがそれをオープンするまでは、見な
いことになる。
【0008】
【発明が解決しようとする課題】ファイルの複数のコピ
ーを許容するがファイルシステムの意味規則はファイル
の単一のコピーのものであるような分散システムが必要
とされている。本発明の目的は、このような分散システ
ムを実現することである。
【0009】
【課題を解決するための手段】本発明の分散システムで
は、いくつかのファイルが「複製ファイル」として指定
される。複製ファイルは、分散システム内に複数のコピ
ーが存在して、各コピーが他のコピーと完全に同等であ
るようなファイルである。ファイルが完全に同等である
とは、いずれのコピーへのアクセスも、そのファイルの
ただ1つのローカルコピーのみが存在しすべてのアクセ
スプロセスが同一のホスト上で実行される場合のアクセ
スと同一の結果となることである。こうして、本発明の
分散システムは、プロセスが同一のホストで実行される
ようなシステム上の単一のファイルへのアクセスのファ
イルシステム意味規則と、ファイルのローカルコピーと
の利点を合わせ持っている。
【0010】本発明のもう1つの特徴は、複製ファイル
のコピーに対する書き込み操作を同期する技術にある。
分散システムホストの要素システムが、複製ファイルを
変更する操作を、複製ファイルのコピーに対して実行す
るときはいつでも、同一の操作を指定するメッセージ
が、その複製ファイルのコピーを有する他のすべての要
素システムに送られる。すべてのメッセージは同一のチ
ャネルを通じて移動するため、操作の順序はすべてのコ
ピーに対して同一である。書き込み操作は、基本書き込
み操作であることも可能であり、あるいは、複製ファイ
ルに含まれるデータに関する操作の指定であることも可
能である。
【0011】もう1つの特徴は、複製ファイルに対する
順次読み出し操作が書き込み操作と同期していることで
あり、その結果、シングルプロセッサシステムにおける
通常のファイルに対して実行される読み出し操作と同一
の意味規則を有することになる。
【0012】順次読み出し操作と書き込み操作の同期
は、各複製ファイルに対する読み出しトークンおよび書
き込みトークンと、分散システムの各要素内のトークン
サーバとを使用する分散同期システムによって実現され
る。複製ファイルに対して書き込み操作を実行するシス
テムの要素は書き込みトークンを有していなければなら
ず、順次読み出し操作を実行する要素は、読み出しトー
クンまたは書き込みトークンを有していなければならな
い。要素がトークンを取得するには、その要素のトーク
ンサーバが他の要素のトークンサーバにそのトークンを
要求する。トークンサーバは、未完了の書き込み操作を
指定するすべてのメッセージを他の要素から受信した後
にのみそのトークンを受信する。その結果、書き込み操
作はすべてのローカルコピーに対して同じ順序で実行さ
れ、順次読み出し操作はすべてのコピーに対して同じ結
果を有する。
【0013】本発明の同期システムのもう1つの特徴
は、複製ファイルの各ローカルコピーに対する7個のロ
ックを使用して実装されることである。これらのロック
は、標準的なオペレーティングシステムの共有ロックお
よび排他ロックを使用して順に実装される。
【0014】本発明のさらにもう1つの特徴は、複製フ
ァイルへのアクセスのトランザクション的同期をサポー
トするために使用することができることである。
【0015】本発明の利点は、複製ファイルを保守する
ために必要な操作が、分散システムのユーザレベルで実
装可能であることにある。その結果、本発明は、特殊な
ハードウェアや特殊なオペレーティングシステムを必要
としない。好ましい実施の形態は、ユーザレベルのバッ
クアップファイルシステムの変更として実装される。
【0016】
【発明の実施の形態】
[ライブラリを使用したインタフェースの変更:図2]
既に説明したように、コンピュータシステムは層化され
ている。各層は隣の上位層へのインタフェースを提供す
る。上位層は、下位層のインタフェースによって要求さ
れるように下位層が実行する操作を指定する。上位層が
下位層によって要求されるインタフェースに従っていな
い場合、上位層と下位層の間にアダプタ層を追加しなけ
ればならない。アダプタ層の目的は、上位層によって期
待されるインタフェースに従ってなされる操作指定を、
下位層のインタフェースによって要求される操作指定に
変換することである。この技術を使用して、例えば、M
SDOSオペレーティングシステムを実行しているPC
が、ユーザには、UNIXオペレーティングシステムを
実行しているコンピュータであるかのように見えるよう
にすることが可能である。
【0017】アダプタ層が多くのアプリケーションプロ
グラムによって要求されるとき、これはライブラリルー
チンのセットとして実装されることが多い。その名前か
らわかるように、ライブラリルーチンは、コンピュータ
システムのサブシステムのメーカが、そのコンピュータ
システムのユーザに対して、アプリケーションプログラ
ムとともに使用するように提供するルーチンのことであ
る。図2に、どのようにしてライブラリルーチンがアダ
プタ層をなすように使用されるかを示す。ユーザプログ
ラム201は、次の層(この場合には、システムルーチ
ンのセット)へのインタフェース206を有する。しか
し、ユーザプログラム201が使用されるコンピュータ
システムのシステムルーチンは、インタフェース213
を有する。インタフェース206とインタフェース21
3の相違は、図2では、インタフェースを表す線の形の
相違によって表されている。アダプタ層はライブラリル
ーチン207からなり、ユーザプログラム201によっ
て要求される隣の上位層に対するインタフェース206
と、システムルーチン205によって要求される隣の下
位層に対するインタフェース213とを有する。インタ
フェースは実際にはファンクション(関数)呼出しから
なり、ライブラリルーチン207内のルーチンは、イン
タフェース206によって要求されるファンクション呼
出し203に応答して、インタフェース213によって
要求されるファンクション呼出しを生成し、ファンクシ
ョン呼出し203によって指定される操作を実行するこ
とによって動作する。システムルーチン215は、終了
すると、その実行の結果を矢印211で示されるように
ライブラリルーチン207に返し、続いてライブラリル
ーチン211はその結果を復帰205によって示される
ようにユーザプログラム201に返す。
【0018】[動的リンクライブラリルーチンを使用し
たインタフェースの再定義]インタフェースを再定義す
るためのライブラリルーチンの有用性は、従来のシステ
ムでは、ユーザプログラム201に対する実行可能コー
ドが生成されるときにユーザプログラム201にリンク
されなければならないということによって制限されてい
た。この場合のリンクとは、ユーザプログラム201に
おけるライブラリルーチンの呼出しが、ライブラリルー
チン207のコピー内のライブラリルーチンの位置に関
係づけられるプロセスをいう。リンクは実行可能コード
が生成されるときに行われなければならなかったため、
実行可能コードのコピーしか有しないユーザは、あるラ
イブラリルーチン207の他のライブラリルーチン20
7のセットと置換することは不可能であった。
【0019】現在ではコンピュータシステムは発展して
きており、ライブラリルーチンはユーザプログラムに動
的にリンクすることが可能である。このようなコンピュ
ータシステムでは、リンクは、ユーザプログラムを実行
するプロセスが実行前にコンピュータシステムのメモリ
にロードされるときに行われる。動的リンクにより、ユ
ーザプログラムのオブジェクトコードを変更せずに、あ
るライブラリルーチンのセットを他のセットと置換する
ことが可能であり、それによって、ユーザプログラムが
動作するシステムの挙動を変えることが可能である。動
的リンクについての説明は、「共有ライブラリ(Shared
Libraries)」、Sun Microsystems, Inc.、米国カリフォ
ルニア州マウンテン・ビュー(1988年5月)、に記
載されている。
【0020】図3に、どのようにして動的リンクを使用
してシステムの挙動を変えるかを示す。システム1(3
01)において、ユーザプロセス306はアプリケーシ
ョンプログラム309を実行しており、これに、オペレ
ーティングシステムライブラリ1(315)が動的にバ
インドされている。オペレーティングシステムライブラ
リ1(315)は、コール311および復帰313によ
って示されるアプリケーションプログラム309へのイ
ンタフェースを提供し、カーネルサーバ305へのコー
ル317およびカーネルサーバ305からの復帰319
を使用してコール311によって指定される操作を実行
する。システム2では、ユーザプロセス306は同じア
プリケーションプログラム309を実行し同じカーネル
サーバ305を使用しているが、こちらでは、オペレー
ティングシステムライブラリ2(321)によってオペ
レーティングシステムライブラリ1(315)が置換さ
れている。オペレーティングシステムライブラリ2(3
21)は、オペレーティングシステムライブラリ1(3
15)が行うすべてのことを行う。すなわち、システム
301を、システム301のように挙動するが副次的効
果323も生成するシステム303へと変換するのに必
要なことは、オペレーティングシステムライブラリ2
(321)をオペレーティングシステムライブラリ1
(315)の代わりにユーザプログラム309に動的に
リンクすることだけである。
【0021】[動的リンクライブラリを使用したユーザ
レベル名前空間の作成]さらに、図4に、どのようにし
て動的リンクオペレーティングシステムライブラリ40
3を使用してユーザレベル名前空間405を作成し、ど
のようにしてユーザレベル名前空間405を使用して副
次的効果323を制御するかを示す。ファンクション、
ファイルおよびデバイスのようなコンピュータシステム
におけるエンティティはプログラムにおいて名前によっ
て呼ばれ、プログラムで使用される名前をその名前によ
って表されるエンティティに関係づけることはコンピュ
ータシステムの名前空間の機能である。従来のコンピュ
ータシステムでは、ユーザプログラムによって使用され
る名前空間はオペレーティングシステムによって作成さ
れ保守されている。システム401では、オペレーティ
ングシステムライブラリ403がユーザプロセス409
に対する1つ以上のユーザレベル名前空間405を作成
し保守する。ユーザレベル名前空間405がライブラリ
ルーチン403によって使用されることを可能にする1
つの方法は、カーネルサーバ305によってユーザプロ
グラム309に提供されるファイルシステムとは挙動、
構造、またはその両方において異なるユーザレベルの論
理ファイルシステムを作成することである。その後、こ
の論理ファイルシステムを使用して、副次的効果323
を制御する。例えば、システム401がバックアップフ
ァイルシステムである場合、副次的効果323は、バッ
クアップファイルシステムを生成するために要求される
ものであり、ユーザレベル名前空間405は、カーネル
サーバ305によって提供されるファイルシステムにお
けるどのファイルがバックアップファイルシステムにバ
ックアップされるべきかを指定することが可能である。
図4から明らかなように、ユーザレベル名前空間405
はユーザプロセス409の環境の一部である。
【0022】[ユーザレベルバックアップファイルシス
テムの概観:図5〜図6]上記の動的リンクライブラリ
およびユーザレベル名前空間を使用して、アプリケーシ
ョンプログラムを実行しているアプリケーションプロセ
スによって変更されたファイルのうち選択したもののみ
を自動的にバックアップするユーザレベルバックアップ
ファイルシステムを形成することが可能である。図5
に、そのようなユーザレベルバックアップファイルシス
テム501を示す。システム501は、2つのコンピュ
ータシステムによって実装される。主システム511で
は、アプリケーションプロセス503が実行され、バッ
クアップシステム513では、アプリケーションプロセ
ス503によって変更されたファイルのバックアップコ
ピーが保守される。主システム511およびバックアッ
プシステム513は通信媒体によって接続され、これに
よって、主システム511で実行されているプロセスか
らのメッセージをバックアップシステム513で実行さ
れているプロセスへ送ることができる。
【0023】主システム511上のシステム501の要
素は、アプリケーションプロセス503およびカーネル
サーバ305(a)である。カーネルサーバ305
(a)は主システム511にファイルシステムを提供す
る。図5において、ファイルシステムは主システム51
1に対してローカルなディスク307(a)によって表
されているが、これは他のシステム上に位置するリモー
トファイルシステムでも全くかまわない。いずれの場合
にも、カーネルサーバ305(a)は、アプリケーショ
ンプロセス503からのコール317に応答して、提供
するファイルシステムに対するファイル操作を実行し、
結果319をプロセス503に返し、自分自身必要な操
作をディスク307(a)に対して実行する。アプリケ
ーションプロセス503は、動的リンク可能ライブラリ
を使用して、カーネルサーバ305(a)とともにファ
イル操作を実行する。主システム511では、このライ
ブラリは、lib.3d(507)と呼ばれる新たなラ
イブラリによって置換されている。ライブラリ507
は、いくつかのファイルを変更するファイル操作を指定
するコール311に応答して、カーネルサーバ305へ
の適当なコール317を提供するだけでなく、バックア
ップメッセージ512をバックアップシステム513に
送る。変更の結果バックアップメッセージ512を送る
ことになるファイルはフロントエンド複製ツリー(FR
T)505で指定される。複製ツリー505は、矢印5
06で示されるように、lib.3d(507)内のル
ーチンによって保守され使用される。このようにして、
複製ツリー505は、変更の結果システム513上のバ
ックアップファイルを変更することになるファイルから
なるユーザレベル論理ファイルシステムを定義する。
【0024】バックアップシステム513上のシステム
501の要素は、バックエンドサーバ515、ユーザレ
ベルプロセス、ならびにカーネルサーバ305(b)お
よびディスク307(b)であり、バックアップシステ
ム513のための標準的なファイルシステムサーバおよ
びディスクドライブである。カーネルサーバ305
(b)はバックエンドサーバ515にファイルシステム
を提供する。図5では、ファイルシステムのためのデー
タはローカルディスク307(b)上に記憶されてい
る。しかし、これはリモートシステムに記憶することも
可能である。バックエンドサーバ515は、カーネルサ
ーバ305(b)へのコール317によってファイル操
作を実行し、そのコールの結果をサーバ305(b)か
ら受け取る。バックエンドサーバ515はバックエンド
マップ517を保守する。バックエンドマップ517
は、フロントエンド複製ツリー505によって指定され
るファイルを、バックアップとして使用されるバックア
ップシステム513のファイルシステム内のファイル上
にマップする。カーネルサーバ305(a)によって生
成されるファイルシステムとカーネルサーバ305
(b)によって生成されるファイルシステムが同一の名
前空間を有するような実施の形態では、バックエンドマ
ップ517は不要となる。
【0025】どのようにしてシステム501が動作する
かは図6から明らかとなる。図6には、ファイルを変更
するライブラリ507内のルーチン601の形式の一般
的概略が示されている。ルーチン名603およびこのル
ーチンがとる引数605は、ライブラリ507によって
置換されたライブラリ内のファイル操作を実行するため
に使用される関数の名前および引数と同一である。その
結果、アプリケーションプログラム509におけるこの
ルーチンの呼出しはルーチン601を呼び出す。必要な
準備を実行した後、ルーチン601はカーネルサーバ3
05(a)に、ルーチン601によって置換されたルー
チンと同じファイル操作を実行させる。この操作が成功
した場合、ルーチン613は、変更されたファイルの名
前とともに関数613を呼び出し、変更されたファイル
がバックアップされるべきであるということをフロント
エンド複製ツリー505が示しているかどうかを判定す
る。フロントエンド複製ツリーがそのように示している
場合、関数615は引数617によりメッセージ512
をバックアップシステム513へ送る。メッセージ51
2は、バックアップシステム513が、サーバ305
(a)によって提供されるファイルシステム上でちょう
ど実行されたのと全く同じ操作をバックアップファイル
システムに対して実行するよう要求する。このメッセー
ジを送った後、ルーチン601は復帰する。これは、フ
ァイルがフロントエンド複製ツリー505内になかった
場合、または、関数607によって指定される操作が成
功しなかった場合も同様である。図6で611とラベル
されているコードのセクションは、副次的効果(この場
合はメッセージ512)を指定する。ここで注意すべき
ルーチン601の特徴は、メッセージ512がバックア
ップシステム513に送られるのはファイル操作が主シ
ステム511で成功した場合のみであるということであ
る。これは、不成功の操作はバックアップする必要がな
いためである。
【0026】システム501には一般的に2つのクラス
のファイル操作がある。フロントエンド複製ツリー50
5およびバックエンドマップ517によって実装された
ユーザレベル名前空間405を変更するものとそうでな
いものである。第2のクラスの操作の一例は、フロント
エンド複製ツリー505に指定されたファイルへの書き
込みである。lib.3d(507)内の書き込みファ
ンクションは、lib.3dによって置換されたライブ
ラリ内の書き込みファンクションと同じインタフェース
を有する。好ましい実施の形態では、これは、引数とし
て、ファイルを指定するためにカーネルサーバ305
(a)によって使用される整数のファイルディスクリプ
タと、書き込むデータを含むバッファへのポインタと、
書き込むデータのサイズを示す整数とをとる。lib.
3d内の書き込みファンクションは、カーネルサーバ3
05(a)が、ファイルディスクリプタによって指定さ
れるファイルに対してシステム書き込みファンクション
を実行することを要求し、その操作が成功した場合、こ
のファンクションは、そのファイルディスクリプタによ
って指定されるファイルがフロントエンド複製ツリー5
05内に存在するかどうかを検査する。存在する場合、
ファンクションはバックアップシステム513内のバッ
クエンドサーバ515へ書き込みメッセージ512を送
り復帰する。このメッセージは、カーネルサーバ305
(a)によってちょうど書き込まれたファイルを指定
し、カーネルサーバ305(a)によって提供されるフ
ァイルシステム内のシステム書き込み操作によってちょ
うど実行された書き込み操作を全く同様にバックアップ
ファイルシステムにおいて実行するのに必要な情報を含
む。バックエンドサーバ515は、このメッセージを受
け取ると、バックエンドマップ517を使用して、カー
ネルサーバ305(b)がバックアップファイルに対し
て使用するファイルディスクリプタを判定してから、カ
ーネルサーバ305(b)によって提供されるシステム
書き込みファンクションを使用して、このメッセージに
よって提供されるデータおよび位置の情報を用いてバッ
クアップファイルに対して書き込み操作を実行する。
【0027】ユーザレベル名前空間405を変更する操
作の簡単な場合はファイル削除である。lib.3dに
よって提供される削除ファンクションは、まずカーネル
サーバ305(a)にファイルを削除するよう要求す
る。この削除が終了すると、削除ファンクションは、削
除されたファイルに関する情報をフロントエンド複製ツ
リー505から削除することが必要かどうかを検査す
る。それが必要な場合、ファンクションはその情報を削
除する。次に、ファンクションは、削除に必要なメッセ
ージをバックエンドサーバ515へ送り復帰する。バッ
クエンドサーバ515は、このメッセージを受け取る
と、バックエンドマップ517内でそのファイルを見つ
け、カーネルサーバ305(b)にそのファイルを削除
するよう要求するとともに、この削除によって要求され
る操作をバックエンドマップ517に対して実行する。
【0028】より複雑な例は名前変更である。カーネル
サーバ305(a)によって提供されるファイルシステ
ム内のファイルの名前変更がユーザレベル名前空間40
5において引き起こす結果には3つの可能性がある。
【0029】1.そのファイルの古い名前がユーザレベ
ル名前空間405の一部であり、新しい名前もまたユー
ザレベル名前空間405の一部である場合、そのファイ
ルはユーザレベル名前空間405内にとどまる。 2.そのファイルの古い名前はユーザレベル名前空間4
05の一部でないが、新しい名前はユーザレベル名前空
間405の一部である場合、そのファイルはユーザレベ
ル名前空間405に追加される。 3.そのファイルの古い名前はユーザレベル名前空間4
05の一部であるが、新しい名前はユーザレベル名前空
間405の一部でない場合、そのファイルはユーザレベ
ル名前空間405から削除される。
【0030】第1の場合、lib.3dの名前変更ファ
ンクションは、カーネルサーバ305(a)に、そのフ
ァイルシステムにおける名前変更を行うよう要求する。
次に、このファンクションは、名前変更されたファイル
がユーザレベル名前空間405内にあるかどうかを検査
し、ユーザレベル名前空間405内にある場合、名前変
更ファンクションは、その変更を反映するようにフロン
トエンド複製ツリー505を変更し、バックエンドサー
バ515における名前変更を要求するメッセージをバッ
クエンドサーバ515へ送り、復帰する。このメッセー
ジはもちろん、旧パス名および新パス名を含む。バック
エンドサーバ515は、このメッセージを受信すると、
カーネルサーバ305(b)に名前変更を要求する。
【0031】第2の場合、名前変更ファンクションは、
サーバ305(a)に名前変更を要求し、前のように、
名前変更されたファイルがユーザレベル名前空間405
内にあるかどうかを検査するが、今度は、ファンクショ
ンは、名前変更されたファイルをフロントエンド複製ツ
リー505から削除し、メッセージをバックエンドサー
バ515へ送り、復帰する。バックエンドサーバ515
へのメッセージは、そのファイルに対する削除メッセー
ジである。このメッセージに応答して、バックエンドサ
ーバ515はカーネルサーバ305(b)にバックアッ
プファイルを削除させる。
【0032】第3の場合も、前のように、名前変更ファ
ンクションは名前変更を要求するが、今度は、2つのメ
ッセージを送らなければならない。第1のメッセージ
は、ユーザレベル名前空間405へ移動されたファイル
の名前を有するファイルをバックアップシステム513
内に作成することを要求する。バックエンドサーバ51
5はこのメッセージに応答してカーネルサーバ305
(b)がそのファイルを作成することを要求し、バック
エンドマップ517内にそのファイルのエントリを作成
する。その後、名前変更ファンクションはユーザレベル
名前空間405に移動されたファイルの現在の内容とと
もに書き込みメッセージを送る。バックエンドサーバ5
15はこの書き込みメッセージに応答して、カーネルサ
ーバ305(b)によって、バックアップシステム51
3内のバックアップファイルにその内容を書き込む。
【0033】以上のことからわかるように、主システム
511内のカーネルサーバ305(a)によって実行さ
れる単一の操作は、バックエンドサーバ505がカーネ
ルサーバ305(b)に一連の操作を実行させることを
要求する。さらに理解されるように、lib.3d(5
07)内のファンクションによって実行される操作の最
後には、バックエンドマップ517およびフロントエン
ド複製ツリー505は常に同じ状態になる。
【0034】[好ましい実施の形態の実装:図7〜図1
1]図7に、ユーザレベルバックアップファイルシステ
ムの好ましい実施の形態701の詳細ブロック図を示
す。この好ましい実施の形態は、一方のプロセッサがU
NIXオペレーティングシステムのSunOS4.1バージ
ョンを実行しており他方のプロセッサがUNIXオペレ
ーティングシステムのMIPS4.5バージョンを実行
しているシステムにおいて実装された。システム701
には要素の2つのグループがある。一方のグループの要
素はバックアップファイル操作を実行し、他方のグルー
プの要素はシステム701をフォールトトレラントにす
る。以下の説明では、まず、バックアップファイル操作
を実行する要素について説明し、その後で、フォールト
トレランスを提供する要素について説明する。
【0035】主システム511から始めると、アプリケ
ーションプロセス503は、アプリケーションプログラ
ム509、動的リンク可能ライブラリlib.3d(5
07)、およびフロントエンド複製ツリー505を有す
る。ライブラリ507のファンクションはファイル操作
の副次的効果としてバックアップファイル操作を実行す
る。システム501において、ファイル操作は、カーネ
ルサーバ305(a)によって実行される。ライブラリ
507内のファンクションによって生成されるメッセー
ジは、パイプ710によってバックアップシステム51
3へ運ばれる。パイプ710は、パイププロセス711
によってアプリケーションプロセス503に提供され、
パイププロセス711自体、パイプ709によってアプ
リケーションプロセス503と通信する。以下でさらに
詳細に説明するように、パイププロセス711は、バッ
クアップシステム513上にバックアップを作成するす
べてのアプリケーションプロセス503によって使用さ
れる単一のパイプ710を提供する。
【0036】次に、好ましい実施の形態におけるバック
アップシステム513において、バックエンドサーバ5
15は2つのプロセス、すなわち、バックエンドログプ
ロセス(BLP)716およびシステムコールエンジン
(SYSCALL ENG)715に分かれる。いずれ
もカーネルサーバ305(b)を使用してファイル操作
を実行する。バックアップファイルに加えて、カーネル
サーバ305(b)によって保守されるファイルシステ
ムはログファイル703(b)を含む
【0037】動作は以下の通りである。アプリケーショ
ンプロセス503は、初期化されると、パイプ710を
指定するファイル識別子をパイププロセス711から取
得する。アプリケーションプログラム509の実行の結
果、ファイル操作が実行されると、lib.3d(50
7)内のその操作に対するファンクションは、カーネル
サーバ305(a)によって提供されるファイルシステ
ムに対して、カーネルサーバ305(a)にそのファン
クションを実行させ、さらに、パイプ710を通じてメ
ッセージをバックアップシステム513に送る。このメ
ッセージは、バックアップシステム513に到着する
と、バックアップログプロセス716によって受け取ら
れる。バックアップログプロセス716は、カーネルサ
ーバ305(b)によって提供されるファイルシステム
内のログファイル703(b)内にそのメッセージをロ
グする。ログファイル703(b)がメッセージを有す
るときにはいつでも、そのメッセージは、到着順に、シ
ステムコールエンジンプロセス715によって読み出さ
れる。好ましい実施の形態では、バックエンドマップ5
17はシステムコールエンジンプロセス715に属す
る。システムコールエンジンプロセス715は、メッセ
ージを読み出すと、カーネルサーバ305(b)に、そ
のメッセージによって要求されるファイル操作を実行さ
せ、システムコールエンジンプロセス715自信は、そ
のメッセージによって要求されるようにバックエンドマ
ップ517を保守する。
【0038】[システム701のフォールトトレラント
動作]システムのフォールトトレラント動作には、故障
が検出され、検出された故障に応じてシステムが動作を
継続することができるようになっていることが要求され
る。好ましい実施の形態では、故障の検出およびその故
障への応答は、WatchDという、分散システムをフ
ォールトトレラントにするためのユーザレベルのシステ
ムによって扱われる。WatchDについての詳細は、
ワイ.フアン(Y. Huang)、シー.キンタラ(C. Kintal
a)、「ソフトウェア実装フォールトトレラント:技術と
経験(Software Implemented Fault Tolerance: Technol
ogies andExperiences)」、第23回フォールトトレラ
ントコンピューティングに関する国際会議(23rd Intern
ational Conference on Fault Tolerant Computing)、
フランス国ツールーズ、1993年6月22〜24日、
に記載され、また、米国特許出願第07/954,54
9号(発明者:ワイ.フアン(Y. Huang)、出願日:19
92年9月30日)の主題ともなっている。本発明の説
明のためには、WatchDシステムが、libftと
いうライブラリと、分散システムの各ノード上の1つの
モニタプロセスとを含むことを理解していればよい。l
ibftは、WatchDにプロセスを登録する操作、
自動バックアップ用にメモリの領域を指定する操作、お
よび、そのメモリ領域に対してチェックポイント操作を
実行する操作などを実行するルーチンを含む。モニタプ
ロセスは、WatchDに登録されたユーザプロセスを
モニタするとともに、相互をモニタする。モニタは、登
録されているプロセスが故障したと判定すると、そのプ
ロセスを再起動する。プロセスは、libftファンク
ションによって再起動されたときに何が起きたかを判定
することが可能である。分散システムの1つのノード上
のユーザプロセスをモニタする間、モニタは、重要デー
タ(これもまたlibftファンクションを使用して定
義される)のコピーを分散システムの他のノードへ移動
することが可能である。そのモニタのノードが故障する
と、他のノード上のモニタがその故障を検出し、重要デ
ータの現在のコピーを使用して当該他のノード上でユー
ザプロセスを再起動する。故障したノードが復旧する
と、そのノードのモニタは、他のノードからの重要情報
を使用してユーザプロセスを再起動し、ユーザプロセス
が再起動されたことを示すメッセージを送る。他のノー
ドのモニタは、そのメッセージを受け取ると、当該他の
ノードで実行されているユーザプロセスを終了する。一
般に、WatchDモニタはリング構成で配置され、各
モニタはリングにおける隣のモニタをモニタする。リン
グ内のノードの数およびユーザプロセスの重要データの
コピーを受け取るモニタの数は、WatchDに登録さ
れたユーザプロセスを再起動することができなくなる前
に分散システムのいくつのノードが故障しなければなら
ないかを決定する。
【0039】好ましい実施の形態では、主システム51
1およびバックアップシステム513はそれぞれWat
chDモニタを有する。これらのモニタとシステム70
1の要素の間の関係は、破線矢印721で示されてい
る。主システム511のモニタはモニタ717である。
破線矢印721で示されるように、モニタ717は、パ
イププロセス711、フロントエンドログプロセス70
5、およびシステム513内のモニタ719を監視す
る。モニタ719は、モニタ717、システムコールエ
ンジンプロセス715、およびバックエンドログプロセ
ス716を監視する。
【0040】図7に示されるように、システム701
は、フロントエンドログプロセス705、パイププロセ
ス711、システムコールエンジン715、バックエン
ドログプロセス716における故障、およびシステム5
13の故障を処理することができる。この設計は、フォ
ールトトレランスを与えるシステム701の2つの部分
を有し、2つの主要な目的を有する。
【0041】・パフォーマンスに関して、回復のオーバ
ヘッドが少ないことを保証する。 ・故障および回復がアプリケーションに透過的であり、
実行中のアプリケーションが停止しないことを保証す
る。
【0042】回復手続きは、WatchDがシステムに
おける最も信頼性のある要素であるという仮定に基づ
く。その理由は、WatchDは非常に単純なタスクを
実行し、故障後に自己回復が可能であるためである。
【0043】以下では、バックアップシステム513の
故障からの回復について詳細に説明し、他のプロセスの
故障からの回復についても概観する。バックアップシス
テム513の故障から始めると、このような場合、シス
テム701は以下のように動作する。モニタ717は、
システム513の故障を検出すると、パイププロセス7
11に通知する。パイププロセス711はフロントエン
ドログプロセス705を作成し、パイプ710のファイ
ルディスクリプタをフロントエンドログプロセス705
へのパイプ707のファイルディスクリプタで置換す
る。アプリケーションプロセス503によって使用され
るメッセージファンクションは、パイプ710の故障を
検出すると、パイププロセス711にパイプの新しいフ
ァイルディスクリプタを要求する。パイププロセス71
1は、フロントエンドログプロセス705に接続された
パイプ707のファイルディスクリプタをそのメッセー
ジファンクションに与え、メッセージファンクションに
よって送られたメッセージは、バックエンドログプロセ
ス716ではなくフロントエンドログプロセス705へ
行く。フロントエンドログプロセス705は、そのメッ
セージを受け取ると、そのメッセージを主システム51
1内のログファイル703(a)に入れる。
【0044】好ましい実施の形態では、メッセージファ
ンクションはパイプ710の故障を以下のように検出す
る。プロセス503はTCP/IPプロトコルを使用し
てパイプ710を通じてメッセージを送る。このプロト
コルでは、前のメッセージが受け取られた場合に限り次
のメッセージを送ることができる。従って、ライブラリ
ルーチン507内のファンクションによって使用される
メッセージファンクションは、2つのメッセージ、すな
わち、実際のメッセージおよびダミーのメッセージを送
ることによってパイプ710を通じてメッセージを送
る。メッセージファンクションがダミーメッセージを送
ることができる場合、実際のメッセージは到着したこと
になる。システム513が故障すると、パイプ710を
通じて送られたメッセージは到着せず、ダミーメッセー
ジを送ることはできない。
【0045】バックアップファイルシステム513が回
復すると、モニタ719は、システムコールエンジン7
15およびバックエンドログプロセス716を再起動
し、モニタ717に通知する。モニタ717はパイププ
ロセス711に通知し、パイププロセス711は、パイ
プ710のファイルディスクリプタを取得してフロント
エンドログプロセス705を終了させる。バックエンド
ログプロセス716は、システム513において再起動
されると、カーネルサーバ305(a)からログファイ
ル703(a)のコピーを取得し、それをログファイル
703(b)に付加する。続いて、システムコールエン
ジン715は、ログファイル703(b)内のメッセー
ジの実行を再開する。
【0046】lib.3dによって使用されるメッセー
ジファンクションは、パイプ707のファイルディスク
リプタを取得したのと同じようにパイプ710のファイ
ルディスクリプタを取得する。次にメッセージファンク
ションは、パイプ707のファイルディスクリプタを使
用してメッセージを送ることを試み、この試みが失敗す
ると、メッセージファンクションは再びパイププロセス
711にパイプファイルディスクリプタを要求する。メ
ッセージファンクションはパイプ710のファイルディ
スクリプタを受け取り、再びバックエンドに接続され
る。
【0047】残りの故障シナリオは以下のように扱われ
る。
【0048】・パイププロセス711が故障した場合。 モニタ717が、故障を検出し、サーバを再起動する。
新たに再起動されたプロセスは、WatchDによって
保存されたプロセス状態からパイプ710への接続を取
得する。他のプロセスはこの故障および回復について全
く知らない。
【0049】・システムコールエンジン715が故障し
た場合。 モニタ719が、故障を検出し、システムコールエンジ
ン715を再起動する。libftによって提供される
チェックポイントおよび回復のファンクションによっ
て、新たに再起動されたシステムコールエンジン715
は、外部ファイルから、前にチェックポイントしたステ
ータスに回復することができる。他のプロセスはこの故
障および回復について全く知らない。
【0050】・バックエンドログプロセス716が故障
した場合。 モニタ719が、故障を検出し、バックエンドログプロ
セス716を再起動する。今度も、プロセス716は、
チェックポイントファイルからステータスを復元する。
さらに、モニタ719は、モニタ717に、バックエン
ドログプロセス716が再起動されたことを通知し、続
いてモニタ717は、パイププロセス711に通知す
る。次に、プロセス711は、パイプ710を、新しい
バックエンドログプロセス716に接続する。各アプリ
ケーションの次の書き込みは失敗し、lib.3dはパ
イププロセス711から新たな接続を取得する。
【0051】・フロントエンドログプロセス705が故
障した場合。 フロントエンドログプロセス705は、システム513
の故障の期間中にのみ存在する。モニタ717は、フロ
ントエンドログプロセス705の故障を検出すると、パ
イププロセス711に通知する。続いて、パイププロセ
ス711は、フロントエンドログプロセス705を再起
動し、それにパイプ708を再接続する。アプリケーシ
ョンプログラム509の次の書き込みは失敗し、li
b.3d内のメッセージ送信ファンクションは、パイプ
プロセス711から新たなパイプ708のファイルディ
スクリプタを取得する。
【0052】[ユーザレベル名前空間405の実装:図
8〜図11]ユーザレベル名前空間405は、カーネル
サーバ305(a)によってアプリケーションプロセス
503に提供されるファイルシステムからのファイルの
任意のセットを指定するために使用することができる。
図8に、カーネルサーバ305(a)によって提供され
るファイルシステムの名前空間801と、ユーザレベル
バックアップファイルシステム701内のユーザレベル
名前空間405の間の関係を示す。
【0053】名前空間801において、ファイル名はツ
リー(木)に配置される。図8のツリーの葉をなすファ
イル(B,D,E,G,I,M,N)はデータまたはプ
ログラムを含む。残りのファイルは他のファイルのリス
トである。このようなファイルはディレクトリと呼ばれ
る。名前空間801内の任意のファイルは、カーネルサ
ーバ305(a)に対して、パス名によって指定するこ
とが可能である。パス名は、ルート「/」で始まり、ル
ートからそのパス名によって指定されているファイルの
名前までのすべてのファイルの名前を含む。従って、フ
ァイルDのパス名は/A/C/Dであり、ファイルLの
パス名は/J/K/Lである。
【0054】ユーザレベルバックアップファイルシステ
ム701は、バックアップすべきファイルを、そのファ
イルを含む名前空間801のサブツリーを指定すること
によって指定する。次に、サブツリー内のファイルを変
更するようなファイルに対する操作が、バックアップシ
ステム513内のバックアップファイルに対して実行さ
れる。図8では、3つのサブツリー、803(a)、8
03(b)、および803(c)がバックアップすべき
ものとして選択されている。その結果、名前空間801
内のデータファイルD、E、G、I、M、またはNへの
変更の結果として、そのデータファイルに対するバック
アップファイルへの変更が行われ、ディレクトリC、
F、H、およびLへの変更も同様にそれらのバックアッ
プファイルへの変更を引き起こす。サブツリー内のすべ
てのファイルがバックアップされるため、バックアップ
すべきファイルは、ユーザレベル名前空間405ではそ
のサブツリーのルートであるディレクトリのパス名によ
って指定することが可能である。こうして、サブツリー
803(a)はユーザレベル名前空間405ではパス名
/A/C(805(a))によって指定される。
【0055】もちろん、ユーザレベル名前空間405
は、カーネルサーバ305(b)によってシステムコー
ルエンジン715に提供されるファイルシステムにもマ
ップされなければならない。これはバックエンドマップ
517によって行われる。図9に示したように、バック
エンドマップ517は、ユーザレベル名前空間405に
おける各オープンファイルに対するエントリ901を含
む。このエントリは2つの部分を有する。ユーザレベル
名前空間情報903は、ユーザレベル名前空間405に
おけるファイルを指定し、バックアップシステム情報9
05は、カーネルサーバ305(b)によって提供され
るファイルシステムにおいて、ユーザレベル名前空間情
報によって指定されたファイルに対応するファイルを指
定する。
【0056】バックエンドマップ517により、カーネ
ルサーバ305(b)がバックエンドログプロセス71
6およびシステムコールエンジン715に提供するファ
イルシステムの名前空間907のサブツリーに、名前空
間801のサブツリーをマップすることが可能となる。
このマッピングは、名前空間801のサブツリーのルー
トのパス名を、名前空間907の対応するサブツリーの
ルートのパス名にマップすることによって行われる。ル
ートのパス名は、サブツリー内ではファイルのパス名の
プレフィクスと呼ばれる。こうして、サブツリー803
(a)におけるパス名はプレフィクス/A/Cを有し、
サブツリー803(a)内のファイルEのパス名はEと
なる。名前空間907では、名前空間801のプレフィ
クス/A/Cを名前空間907のプレフィクス/Zにマ
ップすることによって、サブツリー909はサブツリー
803(a)に対応するようになる。マッピングをした
後は、名前空間801においてパス名/A/C/Eによ
って指定されるファイルの変更の結果、名前空間907
においてパス名/Z/Eによって指定されるファイルの
変更が行われることになる。
【0057】[フロントエンド複製ツリー505の詳
細:図10]好ましい実施の形態では、ユーザレベル名
前空間405はフロントエンド複製ツリー505として
実装される。図10に、フロントエンド複製ツリー50
5の詳細を示す。フロントエンド複製ツリー505の2
つの主要な要素は、RTREE1015およびファイル
ディスクリプタ(FD)キャッシュ1027である。R
TREE1015は、バックアップすべきファイルから
なるサブツリー803のルートのパス名の連結リストで
ある。ファイルディスクリプタキャッシュ1027は、
ファイルディスクリプタをデバイスおよびiノード識別
子に関係づける配列である。この実装の形式は、UNI
Xオペレーティングシステムによって提供されるファイ
ルシステムがファイルを3通りの方法で、すなわち、パ
ス名によって、整数のファイルディスクリプタによっ
て、および、ファイルが存在するデバイスの識別子とU
NIXファイルシステムテーブル内のそのファイルに対
するエントリ(iノード)とによって、指定することの
結果である。ファイルのファイルディスクリプタは、そ
のファイルをオープンしたプロセスに対してのみ、か
つ、そのプロセスがそのファイルをオープンしている間
にのみ有効である。UNIXファイルシステムテーブル
では、パス名とデバイスおよびiノードとの間、ならび
に、デバイスおよびiノードと現在のファイルディスク
リプタとの間の変換は可能であるが、パス名と現在のフ
ァイルディスクリプタとの間の直接の変換はできない。
【0058】さらに詳細に説明すると、MAXTRY1
003およびINIT1005は、フロントエンド複製
ツリー505を初期化する際に使用される。MAXTR
Y1003は、初期化ファンクションが、バックアップ
システム513へのパイプ710の設定を試みてあきら
めるまでの回数を示す。INIT1005は、パイプが
設定されたかどうかを示す。RPLOP配列1009
は、複製ツリー505に対して実行可能な操作の名前1
011の配列である。
【0059】RTREE PTR1013は、RTRE
Eリスト1015の第1要素へのポインタである。RT
REEリスト1015は、複製ツリー803ごとに1要
素1017を含む連結リストである。各要素1017
は、複製ツリー803のルートのパス名1021、パス
名1021の長さ1019、およびこの連結リストにお
ける次の要素へのポインタ1023を含む。接続サーバ
1025は、バックアップシステム513へのパイプ7
10の、名前空間801におけるパス名である。
【0060】FDキャッシュ1027は、ファイルディ
スクリプタキャッシュエントリ1029の配列である。
この配列には、アプリケーションプロセス503に利用
可能なファイルディスクリプタと同じ数だけ、エントリ
1029がある。FDキャッシュ1027内の与えられ
たファイルディスクリプタに対するエントリのインデッ
クスはそのファイルディスクリプタである。エントリ1
029は、そのエントリが現在有効であるかどうかを示
し、かつ、そのファイルがオープンであった間に子プロ
セスを作成したかどうかをも示すステータスフラグを含
む。また、エントリ1029は、主システム511にお
いてそのファイルが存在するデバイスの識別子1101
と、主システム511におけるそのファイルのiノード
の識別子1103とを含む。RTREE1015内のエ
ントリによって指定されるサブツリー803には、現在
オープンのファイルごとに有効なエントリ1029が存
在する。
【0061】[バックエンドマップ517の詳細]バッ
クエンドマップ517は2つの部分、すなわち、パス名
マップ1113およびオープン複製ファイルリスト11
17を有する。パス名マップ1113は単に、主システ
ム511の名前空間801内のパス名を、バックアップ
システム513の名前空間907内のパス名にマップす
る。マップ内の各エントリ1115は、フロントエンド
パス名1118とバックエンドパス名1119の間の関
係を確立する。パス名マップ1113には、フロントエ
ンド名前空間907内のサブツリー803のルートを、
名前空間907内のサブツリーのルートにマップするエ
ントリが含まれる。バックエンドパス名1119はバッ
クエンドシステム情報905の一部である。好ましい実
施の形態では、これらのマッピングは、システム設定フ
ァイルで指定される。
【0062】オープン複製ファイルリスト1117は、
アプリケーションプロセス503が複製ツリー803に
おいて現在オープンしている各ファイルに対するエント
リ1120を含む。エントリ1120内のユーザレベル
名前空間情報903は、フロントエンドファイル識別子
(FFID)1105およびフロントエンドパス名(F
P)1106を含む。フロントエンドファイル識別子1
105は、主システム511内のファイルに対するデバ
イス識別子およびiノード識別子からなる。フロントエ
ンドパス名1106は、フロントエンドプレフィクス
(FPR)1107およびサブツリーパス名1108に
分けられる。フロントエンドプレフィクス(FPR)1
107は、フロントエンド名前空間801における当該
ファイルのサブツリーに対するプレフィクスである。サ
ブツリーパス名1108は、サブツリーにおけるファイ
ルのパス名である。エントリ1120内のバックアップ
システム情報905は、バックエンドファイルディスク
リプタ1111からなる。バックエンドファイルディス
クリプタ1111は、カーネルサーバ305(b)によ
って提供されるファイルシステムにおける当該ファイル
のファイルディスクリプタである。好ましい実施の形態
では、バックエンドマップ517は、フロントエンドフ
ァイル識別子1105およびフロントエンドパス名11
06のいずれによってもアクセス可能なハッシュテーブ
ルとして実装される。
【0063】[データ構造体505および517に関す
る操作]以下では、どのようにしてデータ構造体505
および517を作成するか、および、これらのデータ構
造体がさまざまなファイル操作によってどのように影響
を受けるかを説明する。好ましい実施の形態では、アプ
リケーションプロセス503は、Kornシェルを使用
するUNIXオペレーティングシステム上で時刻され
る。Kornシェルによれば、プロセスは、当該プロセ
スがKornシェルを呼び出すときにはいつも実行され
るファイルを指定するENV変数を設定することが可能
である。アプリケーションプロセス503においてEN
V変数によって指定されるファイルは、アプリケーショ
ンプロセス503が、フロントエンド複製テーブル50
5を構成し初期化するのに必要な情報を含む。いったん
作成されると、テーブル505は、アプリケーションプ
ロセス503のアドレス空間の一部となり、UNIXオ
ペレーティングシステムのforkシステムコールで作
成されそれによって親の環境を継承する、アプリケーシ
ョン503の任意の子プロセスに利用可能となる。他
方、execシステムコールは、子プロセスに新しい環
境を与える。execシステムコールで作成されるアプ
リケーションプロセス503の子プロセスにフロントエ
ンド複製ツリー505が利用できるようにするため、l
ib.3dは、フロントエンド複製ツリー505を新し
いプロセスのENV変数にコピーするexecファンク
ションを有する。これにより、その新しいプロセスは、
親のアドレス空間を継承していなくても、フロントエン
ド複製ツリー505を利用することができる。他の実施
の形態では、execによって作成される子プロセスに
フロントエンド複製ツリー505を渡すために、名前付
きパイプまたは外部ファイルを使用することも可能であ
る。
【0064】ファイル操作の説明に進むと、第1のファ
イル操作はmount(マウント)操作である。UNI
Xオペレーティングシステムでは、mountはファイ
ルシステムからの名前のツリーを、オペレーティングシ
ステムの名前空間に追加する。好ましい実施の形態で
は、lib.3dで実装されるmountのバージョン
は、フロントエンド名前空間801のサブツリーが複製
ツリー805としてユーザレベル名前空間405に追加
されるモードを有する。mountがこのモードで使用
されるとき、パス名引数は、ユーザレベル名前空間40
5に追加されるサブツリー803のルートのパス名であ
る。ファンクションは、そのパス名に対する複製ツリー
エントリ1017を作成し、そのエントリを複製ツリー
1015に追加することによって、サブツリー803を
ユーザレベル名前空間405に追加する。また、指定さ
れたパス名を有する複製ツリーエントリ1017を複製
ツリー1015から削除するumount(マウント解
除)操作もある。
【0065】アプリケーションプロセス503が複製ツ
リー805内のファイルに対してオープン操作を実行す
ると、lib.3d内のオープンファンクションは、新
たにオープンされるファイルに対するファイルディスク
リプタキャッシュエントリ1029を作成し、オープン
メッセージをバックエンドログプロセス716へ送る。
このオープンメッセージは、オープンしたファイルの主
システム511におけるパス名、デバイス識別子、およ
びiノード識別子を含む。このメッセージがシステムコ
ールエンジン715によって実行されると、その結果、
バックエンドマップ517内にエントリ901が作成さ
れる。パス名マップ1113を使用して、主システム5
11内のオープンされているファイルに対応するバック
エンドシステム513内のファイルが発見され、対応す
るファイルに対するファイルディスクリプタがバックエ
ンドファイルディスクリプタ1111に入れられる。
【0066】ファイルがオープンされると、主システム
511におけるファイル操作は、そのファイルを識別す
るファイルディスクリプタを使用する。バックアップシ
ステム513内のバックアップファイルに対する対応す
る操作に対するメッセージは、デバイス識別子およびi
ノード識別子を使用してファイルを識別する。このよう
なメッセージを実行するためには、システムコールエン
ジン715は、メッセージで指定されるデバイスおよび
iノードに対するオープン複製ファイルリスト1117
内のエントリ1119にアクセスするだけでよい。この
エントリは、バックアップシステム513における操作
を実行するのに必要なファイルディスクリプタ1111
を含む。
【0067】アプリケーションプロセス503が複製ツ
リー505内のファイルをクローズすると、lib.3
dのクローズファンクションは、ステータスフィールド
1033から、子プロセスがそのファイルを使用してい
るかどうかを判断する。どの子プロセスも使用していな
い場合、クローズファンクションは、複製ツリー505
内のそのファイルに対するファイルディスクリプタキャ
ッシュエントリ1029を無効にし、デバイス識別子お
よびiノード識別子を含むクローズメッセージをバック
アップシステム513へ送る。システムコールエンジン
715は、このメッセージを実行するとき、デバイス識
別子およびiノード識別子を使用してこのファイルに対
するエントリ1119を見つける。続いて、このファイ
ルを識別するためにバックエンドファイルディスクリプ
タ1111を使用して、バックアップシステム513内
のファイルをクローズし、最後に、オープン複製ファイ
ルリスト1117からエントリ1119を削除する。
【0068】[ユーザレベルバックアップファイルシス
テムを使用した複製ファイルの実装:図13]バックア
ップファイルシステム501は、アプリケーションプロ
セス503のフロントエンド複製ツリー505において
指定される、主システム511からの各ファイルの現在
のコピーが、バックアップシステム513上に存在する
ことが保証されるという点で有効である。しかし、主シ
ステム511からのファイルのコピーを変更するバック
アップシステム513における操作の結果は、主システ
ム511内のファイルには反映されない。実際に、この
ことは、主システム511しか、バックアップシステム
513上にバックアップされているファイルを変更する
ことができないことを意味する。
【0069】ファイルが複製ファイルである場合に必要
とされるように、主システム511およびバックアップ
システム513がいずれもファイルのコピーを変更する
ことができるためには、各システムは、互いのシステム
上でなされる変更をバックアップしなければならない。
すなわち、2つのシステムは、複製ファイルのコピーに
対する操作に関してピアでなければならない。図5に関
していえば、2つのシステム511および513はそれ
ぞれ、他方のシステムへのバックアップメッセージのた
めのチャネル512と、バックエンドサーバ515とを
有していなければならない。さらに、ファイルを変更し
たいシステム上のプロセスは、lib.3d(507)
と、ファイルが複製ファイルとしてリストされたフロン
トエンド複製ツリー505を有していなければならな
い。さらに、複製ファイルのコピーの変更が両方のシス
テムにおいて同じ順序で起こること、および、複製ファ
イルのローカルコピーに対する読み出し操作が、複製フ
ァイルのリモートコピーでなされた書き込みを考慮に入
れて提供されることを確実にするため、同期システムが
要求される。
【0070】図13に、2つのピアホスト1302
(A)および1302(B)ならびに複製ファイル13
25を有する分散システム1301の概観を示す。各ホ
ストはカーネルサーバ305(図示せず)および大容量
記憶装置を有する。大容量記憶装置は、ここでは、ホス
ト1302(A)に対してはディスク307(a)であ
り、ホスト1302(B)に対してはディスク307
(b)である。各ディスクは複製ファイル1325の同
一のコピーを有する。ホスト1302(A)上のコピー
はコピー1325(A)であり、ホスト1302(B)
上のコピーはコピー1325(B)である。さらに、各
ホスト1302は、バックエンドサーバ515を有し、
他方のホスト1302からバックアップメッセージを受
け取ることができる。ホスト1302(A)における3
つのプロセス1309(A,1..3)はlib.3dコ
ード507を含み、ファイル1325を複製ファイルと
して指定するフロントエンド複製ツリー505を有す
る。ホスト1302(B)上の1つのプロセス1309
(B,1)はコード506およびそのようなフロントエ
ンド複製ツリーを有する。各ホスト1302は互いにバ
ックアップとして機能するため、プロセス1309
(A,1..3)が書き込み操作(すなわち、ホスト13
02(A)上の複製ファイル1325のコピー1325
(A)を変更する操作)を実行するごとに、その書き込
み操作の結果、バックアップメッセージ512(A)が
生じ、ホスト1302(B)上のバックエンドサーバ5
15(B)はこれに応答して、複製ファイルのコピー1
325(B)に対して同じ書き込み操作を実行する。プ
ロセス1309(B,1)がコピー1325(B)に対
して書き込み操作を実行すると、この書き込み操作の結
果バックアップメッセージ512(B)が生じ、バック
エンドサーバ515(A)はこれに応答して、コピー1
325(A)に対して同じ書き込み操作を実行する。バ
ックアップメッセージ512は、送信された順にメッセ
ージが到着することを保証するチャネルを通じて送ら
れ、その結果、コピー1325(A)および1325
(B)に対する書き込み操作は同じ順序で行われる。こ
のようなチャネルを実装する1つの方法は、TCP/I
Pを通じてバックアップメッセージ512を送ることで
ある。
【0071】もちろん、バックエンドサーバ513は、
プロセス1309が複製ファイル1325(A)に対し
て書き込み操作を実行するのと同時に複製ファイル13
25(B)に対して書き込み操作を実行するわけではな
い。その結果、ファイル1325(B)に対する読み出
し操作は、ファイル1325(A)に対する同時の読み
出し操作と異なる結果となる可能性がある。ある場合に
は、これは異ならないが、他の場合には異なることがあ
る。その結果、システム1301には、複製ファイル1
325に対する2種類の読み出し操作が可能である。第
1の読み出し操作は「アトミック読み出し」操作であ
る。アトミック読み出し操作は、複製ファイル1325
のコピーに一貫性がある必要がないときに使用される。
この操作は単に、複製ファイル1325のローカルコピ
ーに対する現在の書き込み操作が終了するまで待機して
からそのローカルコピーを読み出す。第2の読み出し操
作は「順次読み出し」操作である。この操作は、複製フ
ァイル1325のコピーに一貫性がなければならない場
合に使用され、従って、読み出されている複製ファイル
のコピーは、その複製ファイルの他のすべてのコピーと
一貫性があるように、複製ファイルに対する書き込み操
作と同期している。
【0072】書き込み操作と順次読み出し操作の同期
は、複製ファイル1325に対する2つのトークン、す
なわち、書き込みトークン1327および読み出しトー
クン1328によって実現される。書き込みトークン1
327を有するホスト1302は、複製ファイルのロー
カルコピーに対する読み出し操作または書き込み操作を
実行することが可能である。読み出しトークン1328
を有するホスト1302は、ローカルコピーに対する読
み出し操作を実行することは可能であるが、書き込み操
作を実行することはできない。いずれのトークンも有し
ないホスト1302は、アトミック読み出し操作のみ実
行可能である。ホスト1302は、必要なトークンを有
しない場合、他のホスト1302にそのトークンを要求
する。他のいずれかのホスト1302で書き込み操作が
未完了である場合、最後の書き込みバックアップメッセ
ージ512を送った後に、バックアップメッセージ51
2のために使用したチャネルにトークンを送る。このよ
うにトークンを送ることによって、ホスト1302は、
複製ファイル1325のすべてのローカルコピーにおい
て書き込み操作が同じ順序で起こること、および、複製
ファイル1325の同一のローカルコピーに対して順次
読み出しが実行されることを保証する。
【0073】与えられた瞬間にはただ1つのホスト13
02のみが書き込みトークン1327を有し、その瞬間
には、他のすべてのホスト1302はトークンを有しな
い。いずれのホストも書き込みトークン1327を有し
ない場合、すべてのホストは読み出しトークン1328
を有する。読み出しトークンおよび書き込みトークンの
いずれも有しないホスト1302はいずれかを要求する
ことが可能である。書き込みトークンを有するホスト
は、読み出しトークンまたは書き込みトークンのいずれ
かを与えることが可能である。読み出しトークンを有す
るホストは書き込みトークンを要求または授与すること
が可能である。
【0074】システム1301が3つ以上のホスト13
02を有するとき、書き込み操作は、書き込みトークン
1327を有しないすべてのホスト1302へ同報され
る。トークンの要求およびトークンの授与もまたすべて
のホスト1302に同報される。同報は、要求および授
与の信頼性のある同報順序を提供する信頼性のある同報
パッケージを使用して行われる。このようなパッケージ
の一例は、コーネル大学によって提供されているISI
Sである。ISISは、「故障がある場合の信頼性のあ
る通信(Reliable Communication in the Presence of F
ailures)」、ACM Transactions on Computer Systems,
5, 1、1987年2月、第47〜76ページ、に記載さ
れている。読み出しトークン1328の場合、読み出し
トークンを授与することができる唯一のホスト1302
は、書き込みトークンを有するホストである。その結
果、読み出しトークンを授与するメッセージが複数存在
することはない。書き込みトークン1327の場合、書
き込みトークン1327を有する単一のホスト1302
が存在するか、または、すべてのホストが読み出しトー
クン1328を有する。前者の場合、書き込みトークン
1327を授与するメッセージはただ1つ存在する。後
者の場合、要求中のホスト1302は、書き込みトーク
ン1327を実際に有する前に、読み出しトークン13
28を有するすべてのホスト1302から授与メッセー
ジを受け取らなければならない。
【0075】プロセス1309が自己のホスト1302
上の複製ファイル1325のコピーに書き込みをするた
めには、2つの条件が満たされなければならない。 ・このプロセスが実行されているホスト1302は、複
製ファイルに対する書き込みトークン1327を有して
いなければならない。 ・ホスト1302内の複製ファイル1325のコピーに
対する他のホスト1302からの未完了の書き込み操作
があってはならない。
【0076】ホスト1302は、書き込みトークン13
27を有しない場合、他のホストに書き込みトークン1
327を要求しなければならない。他のホスト1302
はバックアップメッセージ512において書き込みトー
クン1327を送り、それによって、第2の条件が満た
されること、すなわち、受信側ホスト1302は最後の
バックアップメッセージ512で指定される変更が完了
するまで複製ファイル1325のコピーを変更しないこ
とを保証する。
【0077】好ましい実施の形態では、書き込みトーク
ン1327を使用した同期は、各ホスト1302上のト
ークンサーバ1311と、トークンファイル1307
と、バックアップメッセージ512を受信した順序で送
出するチャネルとによって実現される。トークンファイ
ル1307は、ホスト1302上にコピーを有する各複
製ファイル1325に対する領域を有する。標準的なオ
ペレーティングシステムのロッキングサブシステムで
は、ファイルの領域をロックすることが可能である。2
種類のロックがある。排他ロックでは、ただ1つのプロ
セスのみがそのファイルにアクセスすることが可能であ
る。共有ロックでは、任意数のプロセスがアクセスする
ことができる。一般に、プロセスは、領域に書き込むた
めにはその領域に排他ロックを有し、領域から読み出す
ためには共有ロックを有していなければならない。好ま
しい実施の形態では、トークンファイル1307におけ
る複製ファイル1325の領域に対するオペレーティン
グシステムロックを使用して、その複製ファイル132
5に対する書き込み操作と順次読み出し操作を同期させ
るために使用されるトークンを実現する。
【0078】例えば、好ましい実施の形態では、書き込
みトークンは、複製ファイル1325の領域に対するオ
ペレーティングシステムロックから形成される書き込み
トークンロックとして実現される。トークンサーバ13
11は、書き込みトークンを有することを示すメッセー
ジを受け取ると、書き込みトークンロックを獲得する。
トークンサーバ1311が書き込みトークンロックを有
する限り、ホスト1302上で実行中のプロセス130
9は、複製ファイルのローカルコピーに対するアトミッ
ク読み出し操作、順次読み出し操作、または書き込み操
作のロックを獲得することができる。これらのロックも
また、トークンファイル1307におけるオペレーティ
ングシステムロックを使用して実現される。
【0079】他のホスト1302が書き込みトークンを
要求すると、トークンサーバ1311は書き込みトーク
ンロックを解放し、トークンなしロック(他のロックと
同様に実現される)を獲得する。トークンサーバ131
1がトークンなしロックを有する限り、ホストシステム
1302において複製ファイル1325に書き込むこと
が可能な唯一のプロセスはバックエンドサーバ515で
ある。もちろん、バックエンドサーバ515は、現在書
き込みトークン1327を有するホスト1302からの
バックアップメッセージ512に応答する。
【0080】システム1301の動作は以下の通りであ
る。ユーザレベルバックアップファイルシステム501
の説明で既に述べたように、lib.3d(507)
は、複製ファイルに対する操作を実行するアプリケーシ
ョンプロセス509のコードに静的にまたは動的にバイ
ンドされる。その後、ファイルがフロントエンド複製ツ
リー505において複製ファイルとして指定される。シ
ステム1301で使用されるlib.3d(507)の
バージョンは、標準的なI/Oライブラリ書き込みルー
チンを、図12に示す書き込み操作で置き換える。第3
行のget_write_token()関数1201は、関連するホス
トのトークンサーバ1311に書き込みトークン132
7を要求する。そのホストのトークンサーバ1311が
書き込みトークン1327を有する場合、この関数は直
ちに復帰する。トークンサーバ1311は、書き込みト
ークン1327を有していない場合、他のホストに要求
し、書き込みトークンが到着すると復帰する。トークン
サーバ1311が書き込みトークン1327を有する
と、プロセス1309は第4行で書き込みシステムコー
ルsyscall(SYS_write, fildes, buf, nbyte)を実行す
る。その後、システム501の説明で述べたように、関
数は、フロントエンド複製ツリー505から、ファイル
が複製されているかどうかを判断する。複製されている
場合、書き込みメッセージ512が他のホスト1302
に送られ、書き込みトークンは解放される(120
3)。書き込みトークン1327は、同じようにして、
複製ファイル1325を変更するいずれのホスト130
2上の書き込み操作に対しても、獲得されなければなら
ない。その結果、すべての変更は複製ファイル1325
のすべてのコピーに対して行われ、すべての変更は同じ
順序で行われる。
【0081】[同期の詳細な実装:図14]好ましい実
施の形態では、与えられたホスト1302上の複製ファ
イル1325のコピーに属するロックファイル1307
の領域は、書き込み操作に関連する2つのロックを有す
る。第1のロックは、書き込みトークン1327がホス
ト1302上にあるかどうかを示し、第2のロックは、
複製ファイル1325のコピーが、当該ホスト1302
上のプロセス1309による書き込みに利用可能である
かどうかを示す。図14に、好ましい実施の形態におい
てこれら2つのロックをどのようにして使用するかを示
す。図の擬似コード1401は今度もlib.3d(5
07)の書き込み操作に対するものである。ロックを含
む領域は変数TOKEN_REGION(1403)によって表さ
れ、これは2つのフィールドを有する。ロックのSTATE
は、書き込みトークン1327がホスト1302上にあ
るかどうかを示し、ロックのTOKENは、プロセス130
9が書き込みを実行することができるかどうかを示す。
STATEによって表されるロックは、トークン1327が
他のホスト1302上にあるとき、ローカルトークンサ
ーバ1311によって排他ロックされたまま保持され
る。
【0082】擬似コード1401によって記述される動
作は以下の通りである。第3行に示されるように、ロッ
ク1403を含むトークンファイル1307の領域が関
数fd2tokenによって検索される。この関数は、複製ファ
イル1325のローカルコピーのファイルディスクリプ
タをとり、領域1403を返す。次のステップで、複製
ファイル1325に対する書き込みトークン1327が
ローカルホスト1302内にあるかどうかを判定する。
これは、第4行で、領域1403のSTATEフィールドの
非ブロッキング共有ロックを要求することによって行わ
れる。このロックが取得可能である場合、書き込みトー
クン1327はローカルホスト1302上にある。この
ロックが取得可能でない場合、擬似コード1401は、
トークンサーバ1311が他のホスト1302上の対応
するトークンサーバにトークン1327を要求するメッ
セージを送り、そのトークンを提供するメッセージが返
るのを待機するようにする関数(図示せず)を呼び出
す。第4行では、書き込みトークン1327がローカル
ホスト1302上にあるかどうかを複数のプロセス13
09が判定できるように、共有ロックの取得を試みる。
【0083】書き込みトークン1327がローカルに利
用可能となると、次のステップへ進む。第6行に示され
るように、領域1403のSTATEフィールドに対しても
う1つのロック要求がなされる。今度はこれはブロッキ
ングであり、コード1401を実行しているプロセス1
309は、STATEに対する共有ロックを取得することが
できるまで(すなわち、書き込みトークン1327がロ
ーカルに利用可能になるまで)待機し(第6行)、その
後、TOKENに対する排他ロックを獲得するまでブロック
する。プロセス1309が排他ロックを受け取ると、実
際に書き込みシステムコールがなされ、メッセージ51
2が、複製ファイル1325のローカルコピーへの書き
込みの内容とともに、他方のホスト1302へ送られ
る。これが行われると、領域1403はロック解除さ
れ、書き込み操作が終了する。
【0084】もちろん、ローカルホスト1302上で複
製ファイル1325に対する書き込みを試みている他の
いずれのプロセス1309も、STATEに対する共有ロッ
クを有し、TOKENに対する排他ロックを待機しているプ
ロセスの待ち行列に入ることができる。書き込みを完了
したプロセス1309がTOKEN_REGIONをロック解除する
と、待ち行列における次のこのようなプロセスがTOKEN
に対する排他ロックを取得し書き込み操作を実行するこ
とができる。さらに、ローカルトークンサーバ1311
が、他のトークンサーバ1311から複製ファイル13
25に対する書き込みトークン1327を要求するメッ
セージ512を受け取ると、ローカルトークンサーバ1
311はSTATEに対する排他ロックを要求する。ローカ
ルトークンサーバ1311は、STATEに対する共有ロッ
クを有するすべてのプロセス1309が書き込み操作を
完了した後にのみ、その排他ロックを受け取る。ローカ
ルトークンサーバは、STATEに対する排他ロックを受け
取ると、書き込み操作によって生成されたメッセージが
他のホスト1302に送られたのと同じチャネルによっ
て、そのことを知らせるメッセージを他のホスト130
2へ送る。チャネルに入れられたメッセージは、送られ
た順序で到着し、その結果、他のホスト1302上のト
ークンサーバ1311は、当該他のホスト1302上の
バックエンドサーバ515が、トークン1325を有し
ていたホスト1302からのすべての書き込みメッセー
ジ512を処理した後にのみ、STATEに対する排他ロッ
クを解放する。
【0085】他のホスト1302上で実行される順次読
み出し操作と書き込み操作の同期は、書き込みトークン
1327に関して説明したのとほぼ同様に、読み出しト
ークン1328によって達成される。順次読み出しを実
行するプロセス1309は、読み出しトークン1328
または書き込みトークン1327がホスト1302上に
あるかどうかを示すトークンファイル1307の一部に
対する共有ロックを取得することをまず試みる、li
b.3d(507)内のコードを実行する。この試みが
失敗した場合、プロセス1309は、トークンサーバ1
311が読み出しトークン1328を他のホスト130
2から取得することを要求する。トークンは、書き込み
トークン1327について説明したのと同様にして取得
される。次に、プロセス1309は、そのトークンを表
す領域に対する排他ロックを取得することを試み、読み
出しトークン1328がホスト1302に到着するまで
ブロッキングする。トークンが到着すると、プロセス1
309は、複製ファイル1325のローカルコピーに対
する共有ロックを要求する。プロセス1309は、その
ローカルコピーが他のプロセス1309によって実行さ
れているローカル書き込み操作に対する排他ロックでな
く、かつ、バックアップメッセージ512に応答してバ
ックアップサーバ515によって実行されているリモー
ト書き込み操作に対する排他ロックでもない場合にの
み、その共有ロックを受け取ることができる。
【0086】既に示したように、書き込みトークン13
27を有するトークンサーバ1311は読み出しトーク
ン1328を授与することができる。書き込みトークン
1327を有するトークンサーバ1311が要求を受け
取った場合、複製ファイルに対する書き込み操作が終了
するのを待ち、複製ファイルのローカルコピーに対する
ロックを排他ロックから共有ロックに変更し、書き込み
バックアップメッセージ512のために使用しているチ
ャネルによって読み出しトークンを送る。このことすべ
てにより、読み出しトークン1328は、最後の書き込
みバックアップメッセージ512の後に、要求側ホスト
1302に到着する。
【0087】[複製ファイルに対する状態マシン:図1
5]ホスト1302内のアプリケーションプロセス13
09、トークンサーバ1311、およびバックエンドサ
ーバ515の協力ならびにホスト1302間でのトーク
ンサーバ1311の協力は、プロセス1309、トーク
ンサーバ1311、およびバックエンドサーバ515を
状態マシンとして考察することによってより良く理解さ
れる。与えられた複製ファイル1325に関して、これ
らの各マシンの状態は、そのファイルに対する書き込み
トークン1327および読み出しトークン1328に依
存し、トークンがホスト1302間を移動するにつれて
変化する。
【0088】アプリケーションプロセス1309は、複
製ファイル1325に関して4つの状態を有する。
【0089】1.操作なし状態。この状態では、アプリ
ケーションプロセス1309は、複製ファイル1325
のローカルコピーに対するいかなる種類のロックも有し
ておらず、従って、ローカルコピーに対する読み出し操
作も書き込み操作を実行することができない。
【0090】2.アトミック読み出し状態。この状態で
は、プロセス1309はローカルコピーに対する共有ロ
ックのみを有し、従って、アトミック読み出し操作のみ
を実行することができる。
【0091】3.順次読み出し状態。この状態では、複
製ファイル1325に対する読み出しトークン1328
または書き込みトークン1327がホスト1302にあ
り、プロセス1309はローカルコピーに対する共有ロ
ックを有し、従って、アトミック読み出しのみならず順
次読み出し操作を実行することができる。
【0092】4.書き込み状態。この状態では、複製フ
ァイル1325に対する書き込みトークン1327がホ
スト1302にあり、プロセス1309はローカルコピ
ーに対する排他ロックを有し、従って、順次読み出しお
よびアトミック読み出し操作のみならず書き込み操作を
実行することができる。書き込み操作は、複製ファイル
1325の他のコピーでバックアップされる。
【0093】状態の説明から明らかなように、ある状態
から他の状態への遷移には、トークンおよびロックの獲
得および喪失が伴う。例えば、操作なし状態から順次読
み出し状態への遷移は、ホスト1302における読み出
しトークン1328の獲得およびプロセス1309によ
る共有ロックの獲得を要求する。
【0094】バックエンドサーバ515を実現するプロ
セスの状態は、アプリケーションプロセス1309の状
態1および4と密接に関係している。
【0095】1.操作なし状態。この状態では、バック
エンドサーバ515は、複製ファイル1325のローカ
ルコピーに対するいかなる種類のロックも有しておら
ず、従って、ローカルコピーに対する読み出し操作も書
き込み操作を実行することができない。
【0096】2.書き込み状態。この状態では、バック
エンドサーバ515は、複製ファイル1325のローカ
ルコピーに対する排他ロックを有し、従って、ローカル
コピーに書き込みをすることができる。
【0097】以上のことからわかるように、状態変化
は、ホスト1302間のトークンの移動によって引き起
こされる。
【0098】最も複雑な場合は、トークンサーバ131
1(A)および(B)を実現するプロセスの場合であ
る。トークンサーバ1311は、ホスト1302(A)
と(B)の間でトークンを渡すために相互に協力しなけ
ればならない。図15は、2つのトークンサーバ131
1に対する状態図である。図15において、各状態は番
号1501、1502、...、1506を有する。状態
遷移は矢印で示される。矢印の参照番号の最後の2桁
は、その矢印で示される遷移がなされる始状態および終
状態を示す。従って、矢印1531は、状態1503か
ら状態1501への遷移を示す。各状態遷移は、トーク
ンサーバ1311で受け取られるメッセージの結果であ
り、これにより、メッセージが他のトークンサーバ13
11に送られることもある。
【0099】図15において、与えられた遷移に対して
受け取られるメッセージは、その遷移の矢印のそばに斜
体字で示され、送られるメッセージはブロック体で示さ
れる。例えば、矢印1531で示される遷移は、他のト
ークンサーバ1311からのTSgetRtokenTS(斜体)メ
ッセージの結果である。また、この遷移は、他のトーク
ンサーバへのTSgrantRtokenRP_TS(ブロック体)メッセ
ージを生成する。メッセージの名前は、メッセージの始
点、宛先、内容、およびそのメッセージがとる経路を示
す。例えば、TSgrantRtokenRP_TS(ブロック体)は、バ
ックアップメッセージ512のために使用されるチャネ
ルを通じて送られなければならない(RP_)、一方のト
ークンサーバ(第1のTS)から他方のトークンサーバ
(第2のTS)への読み出しトークン授与(grantRtoke
n)メッセージである。同様に、TSgetRtokenTS(斜体)
は、一方のトークンサーバから他方のトークンサーバへ
の読み出しトークン要求メッセージであるが、このメッ
セージは、バックアップメッセージ用のチャネルを通じ
て送られる必要はない。
【0100】図15の概観からはじめると、まず、3つ
の主要な状態がある。
【0101】・書き込みトークン状態1503。この状
態では、ローカルホスト1302は書き込みトークン1
327を有し、プロセス1309は複製ファイル132
5のローカルコピーに対するすべての読み出し操作およ
び書き込み操作を実行することが可能であり、トークン
サーバ1311は読み出しトークンおよび書き込みトー
クンの両方を授与することが可能である。
【0102】・読み出しトークン状態1501。この状
態では、ローカルホスト1302は読み出しトークンの
みを有し、プロセス1309は複製ファイル1325の
ローカルコピーに対するすべての読み出し操作を実行す
ることができるがローカルコピーへの書き込みはでき
ず、トークンサーバ1311は書き込みトークン132
7の要求または授与をすることができる。
【0103】・トークンなし状態1505。この状態で
は、ローカルホスト1302はトークンを有さず、プロ
セス1309は複製ファイル1325のローカルコピー
に対するアトミック読み出し操作のみを実行することが
可能であり、バックエンドサーバ515のみが複製ファ
イル1325のローカルコピーに書き込むことが可能で
あり、トークンサーバ1311は、読み出しトークンま
たは書き込みトークンの要求のみをすることが可能であ
る。
【0104】図15における始状態は読み出しトークン
状態1501である。アプリケーションプロセス130
9が読み出しトークン状態1501の間に書き込み操作
を試みると、状態遷移1512が起こる。トークンサー
バ1311はプロセス1309からAPgetWtokenTS(斜
体)要求を受け取り、この要求に応答して、他のホスト
1302のトークンサーバ1311へTSgetWtokenTS
(ブロック体)メッセージを送る。ここで、ローカルト
ークンサーバ1311は、読み出しトークン・書き込み
トークン待機(RwaitW)状態1502において、他のト
ークンサーバから書き込みトークンを授与するTSgrantW
tokenTS(斜体)メッセージを受け取るまで待機する。
状態の名前が示しているように、ローカルホストは、書
き込みトークンを待っている間、読み出しトークンを保
持する。TSgrantWtokenTS(斜体)メッセージを受け取
ると、遷移1523が起こり、トークンサーバ1311
は書き込みトークン状態1503に入り、ローカルホス
ト1302に書き込みトークン1327が来る。ここ
で、書き込みトークンに対する要求を生じた書き込み操
作が実行され、その結果、複製ファイル1325のロー
カルコピーに書き込みが行われ、他のホスト1302へ
書き込みバックアップメッセージ512が送られる。
【0105】もちろん、いずれのトークンサーバ131
1も書き込みトークン1327を有さず、それぞれが他
方から書き込みトークン1327を要求する可能性もあ
る。その場合、状態1502においてタイブレークアル
ゴリズム(状態遷移1522によって表されている)が
実行され、いずれのホスト1302が書き込みトークン
1327を受け取るかが決定される。このアルゴリズム
は、一方のホストが一次ホストとして指定され、他方の
ホストが二次ホストとして指定されることを要求する。
一次ホストは、他方のホスト1302からの要求に応答
して、その要求を無視して状態1503を続行する。二
次ホストはトークンなし・書き込みトークン待機(Nwai
tW)状態1504への遷移1524を行う。
【0106】トークンサーバ1311は、状態1503
にあるとき、書き込みトークン1327を有し、要求中
のトークンサーバ1311へ書き込みトークン1327
または読み出しトークン1328のいずれかを提供する
ことができる。読み出しトークン1328に対する要求
に応答して、矢印1531で示される遷移が起こる。TS
getRtokenTS(斜体)メッセージに応答して、トークン
サーバ1311は書き込みトークン1327を放棄し、
要求中のトークンサーバ1311へTSgrantRtokenRP_TS
(ブロック体)メッセージを送るが、読み出しトークン
1328は保持する。その結果、いずれのトークンサー
バ1311も読み出しトークンを有し、状態1501に
あることになる。
【0107】要求が、書き込みトークン1327に対す
るものであるとき、矢印1535で示される遷移が起こ
る。TSgetWtokenTS(斜体)要求に応答して、トークン
サーバ1311は自己のトークンを放棄し、メッセージ
512のために使用されるチャネルを通じてTSgrantWto
kenRP_TS(ブロック体)メッセージをバックエンドサー
バへ送り、トークンサーバ1311は状態1505に入
る。状態1505は、状態1501から遷移1515に
よって到達することもある。この遷移は、状態1501
にあるトークンサーバ1311がTSgetWtokenTS(斜
体)メッセージを受け取り、それに応答して今遷移15
35について説明したように動作するときに起こる。た
だし、トークンサーバ1311のホストは書き込みをし
ているのではないので、メッセージ512のチャネルを
通じてバックエンドサーバへメッセージを送る必要はな
い。
【0108】ローカルホスト1302上のアプリケーシ
ョンプロセス1309が複製ファイル1325のローカ
ルコピーに対する読み出し操作または書き込み操作を実
行しようと試みるまで、トークンサーバ1311は状態
1505にとどまる。読み出し操作の場合、この試みの
結果、遷移1556が起こり、プロセス1309からの
APgetRtokenTS(斜体)メッセージがトークンサーバ1
311によって受け取られ、トークンサーバ1311は
これに応答して他方のトークンサーバ1311へTSgetR
tokenTS(ブロック体)メッセージを送る。次に、トー
クンサーバ1311は、トークンなし・読み出しトーク
ン待機(NwaitR)状態1506に入り、読み出しトーク
ン1328を待機する。待機中、書き込みトークン13
27に対するローカル要求は待ち行列に入れる。このト
ークンを授与するTSgrantRtokenRP_TS(斜体)メッセー
ジがメッセージ512のチャネルを通じて到着すると、
結果として、読み出しトークン状態1501への遷移1
561が起こる。
【0109】アプリケーションプロセス1309が複製
ファイルに対する書き込み操作を試みた場合、結果とし
て遷移1554が起こる。この遷移において、トークン
サーバ1311はAPgetWtokenTS(斜体)メッセージに
応答して、TSgetWtokenTS(ブロック体)メッセージを
他方のトークンサーバ1311へ送り、その結果、状態
1504に入る。次に、トークンサーバは、状態150
4において、他方のトークンサーバ1311からのTSgr
antWtokenRP_TS(斜体)メッセージを待機する。このメ
ッセージが送られるチャネルは、バックエンドサーバ5
15へのメッセージ512のためのものである。TSgran
tWtokenRP_TS(斜体)メッセージが到着すると、状態1
503への遷移1543が起こる。
【0110】[同期の実装:図1、図16、図17]好
ましい実施の形態では、同期は、複製ファイル1325
の各ローカルコピーに対する7個のロックのセットによ
って実装される。図16に、ロックの種類、ロックを有
しなければならないシステム1301の要素、および、
ロックの意味のリストである。ロック1601、160
3、および1605は、それぞれ、プロセス1309が
複製ファイル1325のローカルコピーに対してアトミ
ック読み出し操作、順次読み出し操作、および書き込み
操作を実行するために有しなければならないロックであ
る。ロック1607は、ローカルバックエンドサーバ5
15が複製ファイル1325のローカルコピーに書き込
みをするために有しなければならないロックである。ロ
ック1609、1611、および1613は、現在ロー
カルホスト1302にある複製ファイル1325に対す
るトークンによって要求されるように、ローカルトーク
ンサーバ1311によって要求される。例えば、ローカ
ルホスト1302が書き込みトークンを有し、その書き
込みトークンに対する要求を受け取った場合、ローカル
トークンサーバ1311は、書き込みトークンロック1
609を解放し、トークンなしロック1613を獲得す
る。
【0111】図17に、ロックの意味規則を示す。図1
6の各ロックに対する行および列がある。行と列の交点
にxがある場合、相異なる要求者がその行のロックとそ
の列のロックとを同時に保有することはできない。例え
ば、トークンサーバ1311がトークンなしロック16
13を保有している場合、ローカルホスト1302にト
ークンがないという状況に対して要求されるとおり、プ
ロセス1309は、順次読み出しロック1603または
ローカル書き込みロック1605を有することはない。
【0112】好ましい実施の形態では、図16のロック
は、UNIXオペレーティングシステムのSunOSオペレ
ーティングシステムまたはSystem V Release 4のような
オペレーティングシステムによって提供される共有ロッ
クおよび排他ロックにより実装される(SunOSはSun Mic
rosystems, Inc.の商標である)。オペレーティングシ
ステムによって提供されるロックにより、プロセスは、
ファイルのバイトに対する共有ロックまたは排他ロック
を取得することができる。さらに、このバイトは、他の
ファイルに対するロックを表すために使用することも可
能である。こうして、好ましい実施の形態では、図16
のロックは、トークンファイル1327において、トー
クンファイル1327内のバイト列を各複製ファイル1
325に割り当て、複製ファイルのバイト列内のバイト
を使用して複製ファイルのロックを表現することによっ
て実装される。複製ファイル1325に対するバイト列
はスロットと呼ばれる。好ましい実施の形態では、各ス
ロットは3バイトを有する。図16の各ロックはスロッ
トのバイトに対するロックの組合せによって表現され
る。
【0113】図1に、好ましい実施の形態において使用
される組合せを示す。第1列は、システム1301内の
複製ファイル1325のローカルコピーに対して使用さ
れるロックのリストである。第2列は、どの種類のオペ
レーティングシステムロックが使用されるかを示す。R
は共有ロック、Wは排他ロック、およびNLはロックな
しを示す。残りの列は、スロットのバイトを示す。バイ
トごとの列内のダッシュは、第2列で指定されるOSロ
ックがそのバイトに対して獲得されていることを示す。
こうして、プロセス1309は複製ファイル1325の
ローカルコピーに対するアトミック読み出しロック16
01を獲得しているとき、オペレーティングシステムは
複製ファイル1325に対するスロットのバイト0に共
有ロックを有する。同様に、プロセス1309がローカ
ルコピーに対する書き込みロック1605を獲得してい
るとき、オペレーティングシステムはスロットのバイト
1および2に共有ロックを有し、バイト0に排他ロック
を有する。
【0114】OSロックのこのマッピングは、システム
1301のロックに対する図17の衝突テーブルを実現
する。衝突しているシステム1301のロックは、衝突
しているOSロックおよび重複したオフセットにマップ
され、一方、衝突していないシステム1301のロック
は、衝突していないOSロックまたは重複しないオフセ
ットにマップされる。好ましい実施の形態では、このマ
ッピングはSLEVEと呼ばれる同期ツールによって自
動的に生成される。(エイ.スカーラ(A. Skarra)、
「SLEVE:イベント同期のための意味規則ロック(S
LEVE: Semantic Locking for EVEnt synchronizatio
n)」、Proceedings of Ninth International Conferenc
e on Data Engineering(1993年)参照。)
【0115】[複製ファイルに対する高水準操作の実
行]複製ファイルの各ローカルコピーが同様のすべての
他のコピーと等価であるということの重要な結果とし
て、上記の書き込み操作と全く同様にして高水準の操作
を扱うことができる。書き込み操作では、書き込みトー
クン1327を有するホスト1302が複製ファイル1
325のローカルコピーに対する書き込みを実行し、そ
の後、その書き込みおよび書き込まれるデータを指定す
るメッセージを他のホスト1302へ送り、そこで、バ
ックエンドサーバ515が、メッセージに指定された書
き込み操作を、当該他のホスト1302内の複製ファイ
ル1325のローカルコピーに対して実行する。全く同
じことを高水準操作、例えば、2つの複製ファイルに関
するソート(整列)・マージ(併合)を行う場合にも行
うことができる。複製ファイルはすべてのホスト130
2において等価であるため、書き込みトークン1327
を有するホスト1302は以下のように進むことが可能
である。ソート・マージを行いその操作に伴うすべての
書き込みに対する書き込みバックアップメッセージ51
2を送る代わりに、ホスト1302は、ローカルコピー
に対してソート・マージを実行してから、そのソート・
マージ操作を指定するメッセージ512を他のホスト1
302へ送ることが可能である。複製ファイル1325
は他のすべてのホスト1302上で等価であるため、こ
の指定されたソート・マージ操作の結果はすべてのホス
ト1302上で同一となる。このアプローチの利点は、
ソート・マージ操作の指定を送ることは、書き込みトー
クンを有するホスト1302上のソート・マージの結果
生じるすべての書き込み操作を他のホスト1302へ送
るよりもずっと少ない時間およびネットワーク資源しか
必要としないことである。
【0116】さらに詳細に説明すると、高水準操作は以
下のような状況で使用することができる。各ホスト13
02が2つの複製ファイル、すなわち、ソートされたマ
スタリストファイルおよび更新ファイルを有する。マス
タリストファイルへの更新は更新ファイルに対して行わ
れ、ソート・マージ操作が更新ファイルおよびマスタリ
ストファイルに対して周期的に実行されて新たなマスタ
リストファイルが生成される。その後更新ファイルは削
除され、再作成されて、このサイクルが再開される。更
新ファイルに対する更新は、上記のような書き込み操作
を使用して行われる。従って、ソート・マージ操作の時
刻が来ると、すべてのホスト1302は同一の更新ファ
イルおよびマスタリストファイルを有する。書き込みト
ークンを有するホスト1302はそれ自身ソート・マー
ジ操作を実行してから、書き込みバックアップメッセー
ジ512を送る場合と全く同様にしてソート・マージ操
作の指定を有するメッセージ512を他の各ホスト13
02へ送る。この指定は、ソート・マージ操作のコード
であることも可能であるが、この操作は反復して実行さ
れるため、この指定は一般には、ソート・マージが更新
ファイルおよびマスタリストファイルに対して実行され
ることを指定するコマンドラインである。次に、ソート
・マージが他の各ホスト1302に対して実行される。
同様に進行して、書き込みトークンを有するホスト13
02は更新ファイルを削除し再作成して、同じ操作を指
定するメッセージを他のホスト1302へ送る。もちろ
ん、操作の指定は任意のレベルのものが可能である。例
えば、上記の例では、更新ファイルのソート・マージな
らびに削除および再作成をすべてシェルスクリプトにお
いて指定することが可能であり、操作指定は、そのシェ
ルスクリプトとするか、または、他のすべてのホスト1
302がそのシェルスクリプトのコピーを有する場合に
は、そのシェルスクリプトを呼び出すために使用するコ
マンドラインとすることも可能である。
【0117】[複製ファイルへのアクセスのトランザク
ション的同期]説明したように、複製ファイルシステム
は、ファイルへの単一のアクセスに対する複製ファイル
間の一貫性を保証する。また、複製ファイルシステム
は、ファイルへのトランザクション的アクセスに対する
一貫性を保証するためにも使用することができる。トラ
ンザクションとは、単一アクセスのシーケンスからなる
単一の論理アクションである。トランザクションの例は
以下の通りである。ファイルf内の各レコードrは、プ
ログラムPがrを読み出した回数を記憶する属性readnu
mを含むと仮定する。Pは以下の擬似コードにおいてrea
dnumをインクリメントする。ただし、関数のパラメータ
リストは省略してある。
【0118】for every r in f read(f); increment_readnum(); write(f);
【0119】Pのいくつかのインスタンスが並行して実
行されるときには、アクセスレベルの同期だけではfの
レコードにおける一貫性を保証するのに十分ではない。
あるPがrを読み出した直後は、Pがreadnumをインク
リメントしrをfに書き込むまでは、他のプログラムは
rの読み出しまたは書き込みを行うべきではない。読み
出し−インクリメント−書き込みのシーケンスは、アト
ミック単位として同期すべきrに対する単一の論理アク
ション(すなわち、トランザクション)である。
【0120】別個のトランザクション機構がない場合、
プログラマは、オペレーティングシステムのロックプリ
ミティブを用いてこのようなシーケンスに対するトラン
ザクション同期の孤立性を実装することができる。プロ
グラマは単にシーケンスをexclusive_lock(f)...unlock
(f)のようなプリミティブでくくるだけである。一般の
場合、計算は複数のファイルに関係し、プログラムは、
孤立性を保証するときに複数のロックを要求しなければ
ならない。例えば、計算が2つのファイルf1およびf
2の内容に依存し、一方、その結果は他のファイルf3
に記憶される。 read(f1); read(f2); computation(); write(f3); そして、プログラムは以下のようにこのシーケンスをロ
ック要求で囲む。 share_lock(f1); share_lock(f2); exclusive_lock(f
3) ... unlock(f3); unlock(f2); unlock(f1); しかし、プロセスが一時に複数のロックを要求すると、
デッドロックが起こる可能性がある。同期プロトコル
を、トランザクション機構によって与えるか、または、
オペレーティングシステムロックを使用するアプリケー
ションによって定義するかによって、デッドロックを防
止するかまたは検出して解決するかしなければならな
い。
【0121】既存のオペレーティングシステムはローカ
ルエリアネットワーク内の(リモート)ファイルをロッ
クするプリミティブをサポートしている。しかし、分散
環境では、高い通信コストのためにロックは効果であ
り、特にデッドロック検出は大域的アルゴリズムを必要
とするため、より困難である。現在利用可能なオペレー
ティングシステムのロックプリミティブは、分散環境に
おけるトランザクション的同期を十分にサポートしてい
ない。
【0122】ここで説明した複製ファイルシステムは、
ローカルエリアネットワークまたは広域ネットワークに
わたる複製ファイルにアクセスするプログラムシーケン
スのデッドロックのないトランザクション的同期をサポ
ートするTXというサービスを提供する。複製ファイルシ
ステムは、並列プロセスを同期させるために必要なメッ
セージの数を最小にするプロトコルを実現する。
【0123】好ましい実施の形態では、複製ファイルシ
ステムは、管理する各ファイルfごとに現シーケンス番
号(curSeqNf)を生成する。複製ファイルシステムは、
プロセスが複製ツリー505にfを作成するとき(また
はこの複製ツリー505にfを移動するとき)にcurSeq
Nfを0に初期化し、プロセスがwrite()操作でfを変更
するときcurSeqNfをインクリメントする。プロセスP
は、fに対する読み出しトークンまたは書き込みトーク
ンを獲得することの一部としてcurSeqNfを受け取る。こ
の値は大域的(グローバル)である。すなわち、curSeq
Nfは、fへの変更に係るプロセスがPに対してローカル
であるかリモートであるかにかかわらず、そのすべての
変更を反映する。
【0124】TXを使用するために、プロセスPはフラグ
O_TXで複製ファイルfをオープンする。Pが最初にfの
読み出しまたは書き込みをするとき、TXはcurSeqNfを局
所変数locSeqNfに保存する。Pが次にfの読み出しまた
は書き込みをするとき、TXはlocSeqNfをcurSeqNfと比較
する。これらが等しくない場合、その間に他のプロセス
がfを変更したことになり、TXはエラーを返す。そうで
ない場合、TXはオペレーティングシステムのreadまたは
writeファンクションを呼び出し、その結果を返す。
【0125】複製ファイルシステムは、デッドロックを
避けるために、複製するファイル全体の順序を定義す
る。TXファンクションが複数のトークンを要求すると
き、事前に定義された順序に従ってその要求を行う。
【0126】[インタフェース]TXの制御構造は、UN
IXインタフェースopen/close/read/writeの名前およ
び返値を保ったまま再定義し拡張する関数インタフェー
ス内にカプセル化される。TXは、errnoに対する新たな
値としてETXを定義する。これは、トランザクション的
同期によるエラーを意味する。また、TXは2つの新たな
関数readtx()およびwritetx()を定義する。これらは、
ファイルの集合にアクセスし、型fd_set*(システムコ
ールselectの場合と同様)およびtx_t*のパラメータを
有する。ただし、struct txt {char *buf; int nbyt
e;}である。プログラムは、読み出しまたは書き込みを
するファイルに対してfd_setにセットされたビットによ
り関数を呼び出し、ETXエラー復帰の場合、関数は、fd_
setにおいて、curSeqNが変化しているファイル以外のす
べてのビットをクリアする。インタフェースおよび擬似
コードは以下の通りである。
【0127】・open(char *path; int flags; mode_t m
ode) flagsがO_TXを含む場合、局所変数locSeqNpathを0に初
期化し、O_TXをflagsから削除する。システムコールope
nを呼び出し、その結果を返す。
【0128】・read(int fd; char *buf; int nbyte) fdでオープンしたファイルfに対する読み出しトークン
を取得する。fdに対してO_TXがセットされていない場
合、システムコールreadを呼び出し、読み出しトークン
を解放し、復帰する。それ以外の場合、locSeqNf=0で
あれば、curSeqNfをlocSeqNfに代入する。locSeqNf≠cu
rSeqNfの場合、errno = ETXとセットし、そうでない場
合、システムコールreadを呼び出す。読み出しトークン
を解放し復帰する。
【0129】・write(int fd; char *buf; int nbyte) fdでオープンしたファイルfに対する書き込みトークン
を取得する。fdに対してO_TXがセットされていない場
合、fのローカルコピーに対するシステムコールwrite
を呼び出し、それが成功した場合、その更新をリモート
コピーへ送り、書き込みトークンを解放し、復帰する。
それ以外の場合、locSeqNf=0であれば、curSeqNfをlo
cSeqNfに代入する。locSeqNf≠curSeqNfの場合、errno
= ETXとセットし、そうでない場合、上記のようにfの
コピーを更新し、O_TXの場合、locSeqNf(およびcurSeq
Nf)をインクリメントする。書き込みトークンを解放し
復帰する。
【0130】・readtx(fd_set *readfds; struct tx_t
*txp) セットされた各ビットreadfds[fd]に対して、複製ファ
イルシステムによって定義される順序で、fdでオープン
されたファイルfに対する読み出しトークンを取得し、
fdに対してO_TXがセットされている場合、次のことを実
行する。locSeqNf=0の場合、fを_nullとマークし、
それ以外の場合、locSeqNf≠curSeqNfであれば、fを変
更ありとマークする。いずれかのfが変更ありの場合、
errno =ETXとセットし、*readfdsにおいて、変更された
ファイルに対するビット以外のすべてのビットをクリア
する。いずれのfにも変更がない場合、各ファイルfに
対して、システムコールreadを呼び出し、fが_nullで
ある場合にはcurSeqNfをlocSeqNfに代入する。すべての
トークンを解放し復帰する。この関数は、いずれかのフ
ァイルが変更ありの場合にはいずれのファイルも読み出
さず、それ以外の場合にはすべてのファイルを読み出
す。
【0131】・writetx(fd_set *depends_on, *writefd
s; struct tx_t *txp) セットされた各ビットdepends_on[fd]またはwritefds[f
d]に対して、それぞれ、複製ファイルシステムによって
定義される順序で、fdでオープンされたファイルfに対
する読み出しトークンまたは書き込みトークンを取得
し、fdに対してO_TXがセットされている場合、次のこと
を実行する。locSeqNf≠0かつ≠locSeqNf≠curSeqNf
ある場合、fを変更ありとマークする。いずれかのfが
変更ありの場合、errno = ETXとセットし、*depends_on
または*writefdsにおいて、変更されたファイルに対す
るビット以外のすべてのビットをクリアする。いずれの
fにも変更がない場合、*writefds内の各fdに対してシ
ステムコールwriteを呼び出す。これが成功した場合、
fのリモートコピーへその更新を送り、O_TXがセットさ
れている場合、locSeqNfをcurSeqNf+1とセットする
(そしてcurSeqNfをインクリメントする)。すべてのト
ークンを解放し復帰する。この関数は、いずれかのファ
イルが変更ありの場合には書き込みを実行せず、それ以
外の場合にはすべての書き込みを実行する。
【0132】・resettx(fd_set *fds) セットされた各ビットfds[fd]に対して、fdでオープン
されているファイルfに対するlocSeqNfを0に再初期化
する。
【0133】[使用法]TXはアプリケーションが定義す
る再試行プロトコルをサポートする。例示のために、新
しい各レコードとの新しいトランザクションを開始する
アクセスについての上記の例を想起すると、TXを使用す
る擬似コードは、ファイルf内の各レコードrに対して
以下のようになる。 if(fd = open(f, O_RDWR O_TX)) < 0 exit; FD_ZERO(&fdset); FD_SET(fd, &fdset); for every r in f resettx(&fdset); for (try = TRY_NUM; try > 0; try--) { if read(fd, buf, nbyte) < 0 exit; increment_readnum(); if write(fd, buf, nbyte) >= 0 break; if errno != ETX exit; /* そうでなければリセットし再試行する。*/ /* いずれか他のプロセスがread()以降にfを変更した。*/ resettx(&fdset); }
【0134】プログラムは、新たな読み出し−インクリ
メント−書き込みのシーケンスを開始するごとにresett
x()でlocSeqNfを再初期化する。これは、このシーケン
スが、fの(前の)状態に依存しない単一の論理アクシ
ョンから構成されるためである。
【0135】これに対して、ファイルf1、f2および
f3に関する第2の例に対してTXを使用する擬似コード
は、readtx()またはwritetx()の失敗後に再試行すると
きにのみ、locSeqNf1もしくはlocSeqNf2またはその両方
をリセットする。
【0136】 /* O_TXフラグとともに、fd1〜fd3でf1〜f3をオープンする。*/ /* バッファでtx_t配列を初期化する。*/ FD_ZERO(&readset); FD_ZERO(&writeset); for (try = TRY_NUM; try > 0; try--) { FD_SET(fd1, &readset); FD_SET(fd2, &readset); if readtx(&readset, txp) < 0 { if errno != ETX exit; resettx(&readset); continue; } Computation(); FD_SET(fd3, &writeset); if writetx(&readset, &writeset, txp) >= 0 break; if errno != ETX exit; /* そうでなければリセットし再試行する。*/ /* いずれか他のプロセスがread()以降にf1またはf2を変更した。*/ resettx(&fdset); }
【0137】プログラムが後でファイルに対してresett
x()を呼び出さずにf1、f2またはf3にアクセスす
る場合、他のプロセスがこの間にそのファイルを変更し
ていれば、アクセスは失敗する。
【0138】[応用]TXは、データベースシステムで使
用される楽観的な、タイムスタンプに基づくアルゴリズ
ムに類似した一種のトランザクション的同期をサポート
する。楽観的方式では、トランザクションはデータを読
み出してタイムスタンプを記録し、計算を行い、データ
ベース更新のリストを作成する。コミット点において、
トランザクションは、その更新をタイムスタンプととも
にデータベースシステムへ送る。更新とタイムスタンプ
の組合せがトランザクション同期の孤立性を満足する場
合、データベースはそのトランザクションをコミットす
る。そうでない場合、トランザクションは中断する(そ
して再始動される)。
【0139】これに対して、悲観的な、ロックに基づく
方式では、トランザクションTは各読み出しまたは書き
込みの前に、オブジェクトに対する許可(すなわち、ロ
ック)を取得する。ロックは、他のトランザクションに
よるそのオブジェクトにおける変更を排除する。そのロ
ック要求が他のトランザクションのロックと衝突した場
合、Tはそれ以上の計算を行わず、単に、他のトランザ
クションがそのロックを解放するまで待機する。悲観的
アプローチは、中断および再始動によって作業が失われ
ることが少ないため、トランザクションがデータベース
オブジェクトに対して集中的な長期間の計算を実行する
ようなアプリケーションに対しては良好である。
【0140】楽観的方式は、オペレーティングシステム
の領域では重要な効果を有する。オペレーティングシス
テムは通常いくつかのアプリケーションに同時にサービ
スするため、オペレーティングシステムによって制御さ
れる資源への公平なアクセスを各アプリケーションに提
供することに注意しなければならない。楽観的方式はロ
ックを待たないため、アプリケーションが資源へのアク
セスを拒否される可能性は小さい。
【0141】[結論]以上では、どのようにして、ユー
ザレベルのバックアップファイルシステムを改良して、
複製ファイルを有する分散システムを生成するかについ
て説明した。複製ファイルのローカルコピーに対して実
行される順次読み出し操作および書き込み操作は、ただ
1つのコピーが存在するファイルに対する読み出し操作
および書き込み操作と同じ意味規則を有する。この意味
規則は、分散システムの要素上のトークンサーバによっ
て管理される読み出しトークンおよび書き込みトークン
を使用する分散同期システムによって実現される。好ま
しい実施の形態では、分散同期システムは、複製ファイ
ルの各ローカルコピーに対する7個のロックによって実
現される。さらにこれらのロックは、3バイトのベクト
ルに対する標準的なオペレーティングシステムロックを
使用して実装される。
【0142】上記で説明したのは、発明者が現在知って
いるユーザレベルの複製ファイルシステムを有する分散
システムを実現する最適な形態であるが、多くの変形例
が可能である。特に、本発明の原理は、上記のユーザレ
ベルバックアップファイルシステムとは関係のないシス
テムでも使用可能である。例えば、ここで開示した同期
技術は、複製ファイルを指定すること、または、ファイ
ルバックアップ操作を実行することのために使用される
技術とはほとんど独立であり、実際、複製ファイルに対
する操作を同期させること以外の目的で使用することも
可能である。さらに、同期は、好ましい実施の形態で使
用したロックプロトコル以外の方法でも実現可能であ
る。
【0143】
【発明の効果】以上述べたごとく、本発明によれば、複
製ファイルを保守するために必要な操作が、分散システ
ムのユーザレベルで実装可能となる。その結果、本発明
は、特殊なハードウェアや特殊なオペレーティングシス
テムを必要としない。好ましい実施の形態は、ユーザレ
ベルのバックアップファイルシステムの変更として実装
される。
【図面の簡単な説明】
【図1】好ましい実施の形態における同期を実現するた
めに使用されるロックの実装の図である。
【図2】ライブラリがユーザプログラムに対するインタ
フェースを再定義する方法の概観を示す図である。
【図3】動的リンクライブラリがオペレーティングシス
テムインタフェースを再定義するために使用可能である
ことを示す図である。
【図4】動的リンクライブラリがユーザレベル名前空間
を提供するために使用可能であることを示す図である。
【図5】動的リンクライブラリを使用したユーザレベル
バックアップファイルシステムの概略図である。
【図6】動的リンクライブラリ内のルーチンの概略図で
ある。
【図7】ユーザレベルバックアップファイルシステムの
好ましい実施の形態の概略図である。
【図8】カーネルサーバ305(a)によって提供され
る名前空間とユーザレベル名前空間の間の関係を示す図
である。
【図9】ユーザレベル名前空間とカーネルサーバ305
(b)によって提供される名前空間の間の関係を示す図
である。
【図10】フロントエンド複製ツリー505の詳細図で
ある。
【図11】バックエンドマップ517の詳細図である。
【図12】複製ファイルに対する同期システムの一部の
擬似コードを示す図である。
【図13】同期システムのトークン機構のブロック図で
ある。
【図14】好ましい実施の形態におけるwriteシス
テムコールを置換するコールの擬似コードを示す図であ
る。
【図15】2要素システムを有する分散システムにおい
て複製ファイルに対する操作の同期を示す状態図であ
る。
【図16】好ましい環境で使用されるロックのテーブル
の図である。
【図17】図16のロックの意味規則のテーブルの図で
ある。
【符号の説明】
201 ユーザプログラム 203 ファンクション呼出し 205 復帰 206 インタフェース 207 ライブラリルーチン 209 ファンクション呼出し 211 復帰 213 インタフェース 215 システムルーチン 301 システム1 305 カーネルサーバ 306 ユーザプロセス 307 ディスク 309 アプリケーションプログラム(ユーザプログラ
ム) 311 コール 313 復帰 315 オペレーティングシステムライブラリ1 317 コール 319 復帰 321 オペレーティングシステムライブラリ2 323 副次的効果 401 システム 403 オペレーティングシステムライブラリ 405 ユーザレベル名前空間 409 ユーザプロセス 501 ユーザレベルバックアップファイルシステム 503 アプリケーションプロセス 505 フロントエンド複製ツリー(FRT) 507 lib.3dライブラリ 509 アプリケーションプログラム 511 主システム 512 バックアップメッセージ 513 バックアップシステム 515 バックエンドサーバ 517 バックエンドマップ 601 ルーチン 603 ルーチン名 605 引数 701 ユーザレベルバックアップファイルシステム 703 ログファイル 709 パイプ 710 パイプ 711 パイププロセス 715 システムコールエンジン(SYSCALL E
NG) 716 バックエンドログプロセス(BLP) 717 モニタ 719 モニタ 801 名前空間 803 サブツリー 901 エントリ 903 ユーザレベル名前空間情報 905 バックアップシステム情報 1003 MAXTRY 1005 INIT 1009 RPLOP配列 1013 RTREE PTR 1015 RTREE 1025 接続サーバ 1027 ファイルディスクリプタキャッシュ 1105 フロントエンドファイル識別子(FFID) 1106 フロントエンドパス名(FP) 1107 フロントエンドプレフィクス(FPR) 1108 サブツリーパス名 1111 バックエンドファイルディスクリプタ 1113 パス名マップ 1117 オープン複製ファイルリスト 1118 フロントエンドパス名 1119 バックエンドパス名 1301 分散システム 1302 ピアホスト 1307 トークンファイル 1309 プロセス 1311 トークンサーバ 1325 複製ファイル 1327 書き込みトークン 1328 読み出しトークン
フロントページの続き (72)発明者 アンドレア エイチ.スカーラ アメリカ合衆国,07928 ニュージャー ジー,チャタム,オーチャード ロード 26 (56)参考文献 特開 平2−309445(JP,A) 前川守他編,分散オペレーティングシ ステム UNIXの次にくるもの,日 本,共立出版株式会社,1991年12月25 日,p.159−163 (58)調査した分野(Int.Cl.7,DB名) G06F 12/00

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】 分散データ処理システムの第1要素上で
    実行されるプロセスが複製ファイルに対して実行するフ
    ァイル変更操作を同期させる方法において、 前記複製ファイルは1個のコピーを前記第1要素の大容
    量ドライブに有し、他のコピーを前記分散データ処理シ
    ステムの他の要素の大容量ドライブに有し、前記複製フ
    ァイルはそれぞれ同一であり、 (A) 前記ファイル変更操作を実行するために要求さ
    れる書き込みトークンが前記第1要素内にあるかどうか
    を判断するステップと、 (B) 前記書き込みトークンが前記第1要素内にある
    場合、前記書き込みトークンが利用可能になるまで待機
    して利用可能になると前記ファイル変更操作を実行し、
    前記書き込みトークンが前記第1要素内にない場合、前
    記第1要素内のトークンサーバが前記分散データ処理シ
    ステム内の前記他の要素に前記書き込みトークンを要求
    するステップと、 (C) 前記書き込みトークンが前記他の要素から到着
    したとき、前記書き込みトークンが利用可能になると前
    記ファイル変更操作を実行するファイル変更操作実行ス
    テップと、 (D) 前記ファイル変更操作の通知メッセージを前記
    他の要素に、前記通知メッセージを受信した順に伝達す
    るチャネルによって送信するステップと、 (E) 前記トークンサーバにおいて、前記通知メッセ
    ージの送信時に用いられたのと同じチャネルを使用し
    て、前記ファイル変更操作の完了後に、前記他の要素へ
    の前記書き込みトークンに対する要求に応答するステッ
    プと、 からなることを特徴とする、分散データ処理システムの
    第1要素上で実行されるプロセスが複製ファイルに対し
    て実行するファイル変更操作を同期させる方法。
  2. 【請求項2】 前記ファイル変更操作実行ステップ
    (C)が、 (C1) 前記ファイル変更操作によって要求される前
    記複製ファイルの前記1個のコピーに対するロックを取
    得するまでファイル変更操作の実行を停止し、その後前
    記ファイル変更操作を実行するステップと、 (C2) 前記ファイル変更操作を実行した後に、前記
    1個のコピーに対する前記ロックを解放するステップと
    を有することを特徴とする請求項1記載の方法。
  3. 【請求項3】 (F) 前記他の要素が前記書き込みト
    ークンを取得し、対応する前記複製ファイルの前記他の
    コピーに対するファイル変更操作を実行するまで待機
    し、その後前記複製ファイルの前記他のコピーの順次読
    み出し操作を実行するステップをさらに含むことを特徴
    とする請求項1記載の方法。
JP21127995A 1994-07-29 1995-07-28 分散コンピューティングシステム Expired - Lifetime JP3476973B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US28268394A 1994-07-29 1994-07-29
US282683 1994-07-29

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2003020368A Division JP2003263355A (ja) 1994-07-29 2003-01-29 分散システム内に複製ファイルを生成する装置

Publications (2)

Publication Number Publication Date
JPH0991185A JPH0991185A (ja) 1997-04-04
JP3476973B2 true JP3476973B2 (ja) 2003-12-10

Family

ID=23082665

Family Applications (2)

Application Number Title Priority Date Filing Date
JP21127995A Expired - Lifetime JP3476973B2 (ja) 1994-07-29 1995-07-28 分散コンピューティングシステム
JP2003020368A Pending JP2003263355A (ja) 1994-07-29 2003-01-29 分散システム内に複製ファイルを生成する装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2003020368A Pending JP2003263355A (ja) 1994-07-29 2003-01-29 分散システム内に複製ファイルを生成する装置

Country Status (4)

Country Link
EP (1) EP0694839B1 (ja)
JP (2) JP3476973B2 (ja)
CA (1) CA2152528C (ja)
DE (1) DE69522394T2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6859821B1 (en) * 1999-07-19 2005-02-22 Groove Networks, Inc. Method and apparatus for prioritizing data change requests and maintaining data consistency in a distributed computer system equipped for activity-based collaboration
US6446113B1 (en) * 1999-07-19 2002-09-03 Groove Networks, Inc. Method and apparatus for activity-based collaboration by a computer system equipped with a dynamics manager
US6941510B1 (en) * 2000-06-06 2005-09-06 Groove Networks, Inc. Method and apparatus for efficient management of XML documents
WO2009147704A1 (ja) * 2008-06-04 2009-12-10 株式会社 アテナテレコムラボ テーブルとテーブル項目の平行編集プログラム
GB0908041D0 (en) * 2009-05-11 2009-06-24 True Blue Logic Ltd Improvements in and relating to replicated file servers
US9235595B2 (en) 2009-10-02 2016-01-12 Symantec Corporation Storage replication systems and methods
WO2015033451A1 (ja) * 2013-09-06 2015-03-12 株式会社日立製作所 分散ストレージシステム及びそのデータアクセス方法
US10740298B2 (en) * 2016-10-12 2020-08-11 Microsoft Technology Licensing, Llc File synchronization with reduced conflicts in computing systems
US11650974B2 (en) * 2020-07-01 2023-05-16 Sap Se Cross-system process control framework

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175851A (en) * 1989-05-15 1992-12-29 International Business Machines Corporation System and method for controlling client machine access to a portion of a file with a variable length

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
前川守他編,分散オペレーティングシステム UNIXの次にくるもの,日本,共立出版株式会社,1991年12月25日,p.159−163

Also Published As

Publication number Publication date
JPH0991185A (ja) 1997-04-04
EP0694839A3 (en) 1998-02-04
DE69522394T2 (de) 2002-05-23
EP0694839B1 (en) 2001-08-29
DE69522394D1 (de) 2001-10-04
JP2003263355A (ja) 2003-09-19
CA2152528A1 (en) 1996-01-30
CA2152528C (en) 2000-04-18
EP0694839A2 (en) 1996-01-31

Similar Documents

Publication Publication Date Title
US5689706A (en) Distributed systems with replicated files
US5991771A (en) Transaction synchronization in a disconnectable computer and network
US5175852A (en) Distributed file access structure lock
Kazar et al. DEcorum File System Architectural Overview.
US5878434A (en) Transaction clash management in a disconnectable computer and network
US6145094A (en) Transaction locks for high availability
US5202971A (en) System for file and record locking between nodes in a distributed data processing environment maintaining one copy of each file lock
US7865485B2 (en) Multi-threaded write interface and methods for increasing the single file read and write throughput of a file server
US5572709A (en) Using dynamically-linked libraries to add side effects to operations
EP0278312B1 (en) Distributed file and record locking
US20030217058A1 (en) Lock-free file system
US5968134A (en) Distributed pipes and fifos in a multiprocessor
CA2413434A1 (en) Data management application programming interface for a parallel file system
EP0839352A1 (en) Transaction log management in a disconnectable computer and network
US20170091215A1 (en) Write-back cache transaction replication to object-based storage
Carter et al. Khazana: An infrastructure for building distributed services
JP3476973B2 (ja) 分散コンピューティングシステム
EP0278313B1 (en) Distributed file management system
Shrivastava et al. Structuring fault-tolerant object systems for modularity in a distributed environment
Welch A comparison of the Vnode and Sprite file system architectures
Rao et al. A transparent service for synchronized replication across loosely-connected file systems
EP0839351B1 (en) Transaction clash management in a disconnectable computer and network
Skarra et al. A file system interface for concurrent access
Zhang et al. Cross-Partition Protocols in a Distributed File Service
Hastings Transactional distributed shared memory

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080926

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080926

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090926

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100926

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110926

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110926

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120926

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120926

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130926

Year of fee payment: 10

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term