JPH058455B2 - - Google Patents

Info

Publication number
JPH058455B2
JPH058455B2 JP62315454A JP31545487A JPH058455B2 JP H058455 B2 JPH058455 B2 JP H058455B2 JP 62315454 A JP62315454 A JP 62315454A JP 31545487 A JP31545487 A JP 31545487A JP H058455 B2 JPH058455 B2 JP H058455B2
Authority
JP
Japan
Prior art keywords
file
node
lock
server
inode
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
JP62315454A
Other languages
English (en)
Other versions
JPS63201864A (ja
Inventor
Uiriamu Jonson Donabon
Ametsudo Shaanngooda Ameeru
Aren Sumisu Totsudo
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPS63201864A publication Critical patent/JPS63201864A/ja
Publication of JPH058455B2 publication Critical patent/JPH058455B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/176Support for shared access to files; File sharing support
    • G06F16/1767Concurrency control, e.g. optimistic or pessimistic approaches
    • G06F16/1774Locking methods, e.g. locking methods for file systems allowing shared and concurrent access to files

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

【発明の詳細な説明】 以下にしたがつて本発明を説明する。 A 産業上の利用分野 B 従来技術 C 発明が解決しようとする問題点 D 問題点を解決するための手段 E 実施例 E1 はじめに(第2図〜第7図) E2 分散フアイル・システムにおける操作(第
1図、第8図〜第12図) E3 フアイル・アクセスの同期モード(第13
図、第14図) E4 ロツキング(第15図〜第19図) UNIXフアイル・ロツキング ロツク・テーブル ロツク待ち デツドロツク 分散型フアイル・サポート・ロツク制御 フアイル・ロツキング構造 内部の詳細 フアイル・アクセス構造ロツク(第17図、第
18図) 一例(第19図) F 発明の効果 A 産業上の利用分野 本発明は、一般に分散データ処理システム用の
オペレーテイング・システムの改良に関し、さら
に具体的には、ローカル・エリア・ネツトワーク
(LAN)または広域ネツトワーク(WAN)で相
互接続された多重プロセツサ・システム用のオペ
レーテイング・システムに関するものである。
LANまたはWANを構成するため、IBN社のシ
ステム・ネツトワーク・アーキテクチヤ(SNA)
を使用することができる。本発明にもとづくオペ
レーテイング・システムを使うと、フアイルがシ
ステム中のどこにあろうと、システム中のプロセ
ツサによつてそれらのフアイルにアクセスできる
ようになる。本発明の好ましい実施例をここでは
UNIX(ATTの商標)オペレーテイング・システ
ムの1バージヨンで実施された好ましい実施例の
形で開示するが、本発明は他の様々なオペレーテ
イング・システム中でも実施できる。 B 従来技術 1台の実計算機を複数台の計算機に見せる仮想
計算機オペレーテイング・システムが、従来技術
で知られている。こうした計算機は、それを載せ
る実計算機に非常に類似することもあり、また非
常に異なることもある。多数の仮想計算機オペレ
ーテイング・システムが開発されているが、その
中で恐らく最も広く使われているのは、IBMシ
ステム/370上で走行するVM/370であると思わ
れる。VM/370オペレーテイング・システムは、
端末から操作する複数のユーザが、様々なデイス
クの量と記憶容量をもつ完璧なシステム/370を
有するかのような錯覚を生み出す。 物理的デイスク装置は、VM/370オペレーテ
イング・システムによつて管理される。デイスク
上に存在する物理的ボリユームが様々なサイズの
仮想ボリユームに分割され、ユーザが行なうマウ
ントと呼ばれる処理によつて割り振られアクセス
される。マウントとは、物理的ボリユームを定義
してVM/370オペレーテイング・システムに付
加し、ボリユームの仮想特性、たとえばサイズ、
セキユリテイ、所有権などを定義することであ
る。 さらに、VM/370の下では、ユーザは同じロ
ーカル・プロセツサ上でまたは遠隔の別のプロセ
ツサ上でVM/370の下で走行する、他のどのオ
ペレーテイング・システムにもアクセスしそれを
使用することができる。オースチンにいるユーザ
が、VM/370の「パススルー」の呼ばれる機能
を使つて同じプロセツサ上、または、たとえば、
同じSNAネツトワークに接続されたフランスの
パリにあるプロセツサ上の別のVM/370または
MV/370オペレーテイング・システムにアクセ
スすることができる。ユーザが一度この機能を使
うと、そのユーザはその別のオペレーテイング・
システムに接続されたフアイルを処理のために使
用することができる。 この手法にはいくつかの大きな欠点がある。第
一、ユーザが「パススルー」特性を使つてローカ
ルなまたは遠隔の別のオペレーテイング・システ
ムにアクセスするとき、以前使用されていたフア
イルと操作環境とが、新しいセツシヨンが終了す
るまで使えなくなる。他のセツシヨンからのフア
イルを処理する唯一の方法は、それらのフアイル
を他のオペレーテイング・システムに送つて、両
方のデイスク上で実際にコピーを複製することで
ある。 第二に、ユーザは、アクセスしようとするすべ
てのシステムに別々に「ログ・オン」しなければ
ならない。こうすることで、システムの保全性を
保護するために必要なセキユリテイがもたらされ
るが、そのことはまたユーザにとつては大変な負
担となる。その他の背景知識については、H.M.
デイテル(Harvey M.Deitel)著の教科書「オ
ペレーテイング・システム入門(An
Introduction to Operating Systems)」、
Addison−Wesley刊(1984年)、とくにその第22
章「VM:仮想計算機オペレーテイング・システ
ム(VM:A Virtual Machine Operating
System)」を参照されたい。より詳しい考察につ
いては、H.ローリン(Harold Lorin)とH.M.デ
イテル共著の教科書「オペレーテイング・システ
ム(Operating Systems)」、Addison−Wesley
刊(1981年)、特にその第10章「仮想計算機
(Virtual Machines)」を参照されたい。 以下では、UNIXオペレーテイング・システム
の1バージヨンで本発明を実施した場合について
説明するが、本発明はUNIXオペレーテイング・
システムに類似する特徴をもつ他のオペレーテイ
ング・システムでも使用できる。UNIXオペレー
テイング・システムは、ベル研究所(Bell
Telephone Laboratories,Inc.)がデイジタ
ル・エクイツプメント社(Digital Equipment
Cororation,DEC)のミニコンピユータ用に開
発したものであるが、広範囲のミニコンピユータ
用、それに最近ではマイクロコンピユータ用のオ
ペレーテイング・システムとして広く使われてい
る。この普及の一因は、UNIXオペレーテイン
グ・システムがアセンブリ言語ではなく、やはり
ベル研究所で開発されたCプログラミング言語で
書かれており、したがつて、プロセツサの種類を
問わないことである。したがつて、様々な計算機
用にそこにC能力を与えるために書かれたコンパ
イラを使うと、UNIXオペレーテイング・システ
ムをある計算機から別の計算機に移すことが可能
になる。すなわち、UNIXオペレーテイング・シ
ステム環境用に書かれたアプリケーシヨン・プロ
グラムも、計算機間で移植可能である。UNIXオ
ペレーテイング・システムの詳細については、
「UNIXTMシステム、ユーザーズ・マニユアル、
システムV(UNIXTMSystem,User´s Manual,
System V)」、Western Electric Co.,1983年1
月刊を参照されたい。UNIXオペレーテイング・
システムについての秀れた概説が、B.W.カーニ
ンガン(Brian W.Kernighan)とロブ・パイク
(Rob Pike)の共著「ユニツクス・プログラミン
グ環境(The Unix Programming
Environment)」、Prentice−Hall、1984年刊に出
ている。UNIXオペレーテイング・システムの設
計の詳細については、M.J.バツハ(Maurice J.
Bach)著「ユニツクス・オペレーテイング・シ
ステムの設計(Design of the Unix Operating
System)」、Prentice−Hall、1986年刊に出てい
る。 ATTのベル研究所は、多数の団体にUNIXオ
ペレーテイング・システム使用のライセンスを供
与しており、現在いくつかのバージヨンである。
ATTから出た最新のバージヨンは、バージヨン
5.2である。バークレイ・バージヨンとして知ら
れるUNIXオペレーテイング・システムの別のバ
ージヨンが、カリフオルニア州立大学バークレイ
校で開発された。広く使われているMS−DOS
(マイクロソフト社の商標)およびパーソナル・
コンピユータ用のPC−DOS(IBM社の商標)オ
ペレーテイング・システムを開発したマイクロソ
フト社(Microsoft)は、XENIXの商標で知ら
れるバージヨンを出している。IBMRT PC
(RISC(縮小命令セツト・コンピユータ)技術パ
ーソナル・コンピユータ、RTとRTPCはIBM社
の商標)を1985年に発表したのに伴つて、IBM
社はAIX(拡張対話型エグゼグテイブ、AIXは
IBM社の商標)と呼ばれる新しいオペレーテイ
ング・システムを公開した。AIXは、アプリケ
ーシヨン・インターフエース・レベルでATTの
UNIXオペレーテイング・システム、バージヨン
5.2と互換性があり、UNIXオペレーテイング・
システム、バージヨン5.2に対する拡張機能を含
んでいる。AIXオペレーテイング・システムの
詳細については、「AIXオペレーテイング・シス
テム技術解説書(AIX Operating System
Technical Reference)」、第1版、IBM Corp、
1985年11月刊を参照されたい。 本発明は、具体的には、複数のプロセツサがネ
ツトワーク内で相互接続されることを特徴とす
る、分散データ処理システムに関係する。実際に
実施された形では、本発明は、IBMのシステム
ネツトワーク・アーキテクチヤ(SNA)、さらに
具体的にはSNA LU6.2拡張プログラム間通信
(APPC)で相互接続された複数のIBMRT PC上
で機能する。SNAでは、そのリンク・レベルと
して、ゼロツクス社が開発したローカル・エリ
ア・ネツトワーク(LAN)であるイーサネツト
(Ethernetはゼロツクス社の商標)またはSDLC
(同期データ・リンク制御)を使う。イーサネツ
ト・ローカル・エリア・ネツトワークを含めてロ
ーカル・エリア・ネツトワークの簡単な説明は、
L.E.ジヨーダン(Larry E.Jordan)とB.チヤー
チル(Bruce Churchill)の共著「IBM PC用の
通信ネツトワーキング(Communications and
Networking for the IBM PC)」、Robert J.
Brady(Prentice−Hall社)、1983年刊に出てい
る。コンピユータ用通信システム、特にSNAと
SDLCについてのより明確な説明は、R.J.シプサ
ー(Cypser)著「分散システム用通信アーキテ
クチヤ(Communications Architecture for
Distributed Systems)」、Addison−Wesley、
1978年刊に出てくる。ただし、本発明は、イーサ
ネツト・ローカル・エリア・ネツトワークや
IBM SNA以外のネツトワークで相互接続され
た、IBM RT PC以外の様々なコンピユータを
用いても実施できることを了解されたい。 前述のように、以下では、通信ネツトワーク中
の分散データ処理システムを対象として本発明を
説明する。この環境では、ネツトワークのあるノ
ードにある各プロセツサは、どのノードにフアイ
ルがあろうと、潜在的にそのネツトワーク内のす
べてのフアイルにアクセスすることができる。 第2図に示すように、分散ネツトワーク環境1
は、通信リンクまたは通信ネツトワーク3を介し
て接続された2つ以上のノードA,B,Cから構
成される。ネツトワーク3は上記のようなローカ
ル・エリア・ネツトワーク(LAN)でも広域ネ
ツトワーク(WAN)でもよい。後者は、システ
ムの他のノードまたはSNAネツトワークへの交
換回線または専用回線テレプロセツシング(TP)
接続を含む。ノードA,B,Cのどこにも、上記
のIBM RT PCのような処理システム10A,
10B,10Cがあり得る。こうした処理システ
ム10A,10B,10Cはそれぞれ単一ユー
ザ・システムでも複数ユーザ・システムでもよ
く、ネツトワーク3を使つてネツトワーク内の遠
隔ノードにあるフアイルにアクセスする能力をも
つ。たとえば、ローカル・ノードAにある処理シ
ステム10Aは、遠隔ノードBおよびCにあるフ
アイル5Bと5Cにアクセスできる。 遠隔ノードにアクセスする際にぶつかる問題
は、まずスタンドアロン・システムがどのように
してフアイルにアクセスするかを検討すると、よ
く理解できる。第3図に符号10で示すようなス
タンドアロン・システム内では、オペレーテイン
グ・システム11中のローカル・バツフア12を
使つて永久記憶装置2、たとえばハード・フアイ
ルやパーソナル・コンピユータ中のデイスクとユ
ーザ・アドレス空間との間で転送されるデータを
緩衝記憶する。オペレーテイング・システム11
内のローカル・バツフア12は、ローカル・キヤ
ツシユあるいはカーネル・バツフアとも呼ばれ
る。UNIXオペレーテイング・システムのカーネ
ルの詳細については、上記のカーニガン等の著書
およびバツハの著書を参照されたい。 ローカル・キヤツシユは、メモリ常駐デイスク
として理解すると最も理解しやすい。データはデ
イスク上で持つていた物理的特性を保持するが、
情報は今や媒体内に存在し、主システム記憶装置
で達成される速度に非常に近いより速いデータ転
送速度の実現に貢献している。 スタンドアロン・システム内で、カーネル・バ
ツフア12はブロツク15により識別される。こ
の番号は装置番号であり、またその装置内の論理
ブロツク番号でもある。読取りシステム・コール
16が発行されるとき、そのコールは、第4図の
ステツプ101に示すように、フアイル5のフアイ
ル記述子およびフアイル5内のバイト範囲と一緒
に発行される。オペレーテイング・システム11
はこの情報を取り出し、ステツプ102でそれを装
置番号および装置内の論理ブロツク番号に変換す
る。次に、オペレーテイング・システム11は、
ステツプ103で、装置番号および論理ブロツク番
号にもとづいてキヤツシユ12を読み取る。 デイスク2から読み取られたデータは、キヤツ
シユ・ブロツク15が必要となるまでキヤツシ
ユ・ブロツク15に保管される。その結果、処理
システム10上で走行中のアプリケーシヨン・プ
ログラム4からデイスク2から以前に読み取られ
たものと同じデータに対する読取りが続けて要求
されると、それはデイスク2からではなくてキヤ
ツシユ12からアクセスされる。キヤツシユ12
からの読み取るのは、デイスクへのアクセスほど
時間がかからない。したがつて、キヤツシユから
読み取ることにより、アプリケーシヨン・プログ
ラム4のパフオーマンスが向上する。明らかに、
アクセスしようするデータがキヤツシユに入つて
ない場合は、デイスクにアクセスしなければなら
ないが、それが必要となるのは稀である。 同様に、アプリケーシヨン・プログラム4から
書き込まれたデータは、直後デイスク2には書き
込まれず、キヤツシユ12に書き込まれる。この
ことによつても時間が節減され、アプリケーシヨ
ン・プログラムのパフオーマンスが向上する。キ
ヤツシユ12内の修正されたデータ・ブロツク
は、オペレーテイング・システム11の制御下で
周期的にデイスク2に保管される。 本発明を実施した環境であるAIXオペレーテ
イング・システムを使つたスタンドアロン・シス
テムでキヤツシユを使うと、連続する読取りおよ
び書込みデイスク操作の必要がなくなるので、シ
ステム・デイスクの全体的パフオーマンスが向上
し、アクセス時間が減少する。 第2図に示したような分散ネツトワーキグ環境
では、ローカル・ノードCにある処理システム1
0CがノードAからフアイル5Aを読み取る方式
が2通りである。1つの方式では、処理システム
10Cがフアイル5Aの全体を複写し、それがノ
ードCにあるローカル・フアイル5Cであるかの
ように読み取ることができる。このやり方でフア
イルを読み取ると、ノードCでフアイル5Aが複
写された後で、たとえばノードBにある別の処理
システム10Bがフアイル5Aを修正する場合に
問題が生じる。処理システム10Cは、フアイル
5Aに対する最近の修正にアクセスできないこと
になる。 処理システム10CがノードAにあるフアイル
5Aにアクセスするもう一つの方式は、ノードC
にある処理システム10Cが要求したとき、一度
に1つのブロツクを読み取るものである。この方
式に伴う問題は、読取りのたびにネツトワーク通
信リンク3を介してフアイルがあるノードAまで
行かなければならないことである。連続する読取
りのたびにデータを送るのは時間の浪費である。 ネツトワークを介してフアイルにアクケスする
場合、上記の2つの競合する問題が生じる。一つ
の問題は、連続する読取りを書込みのためにネツ
トワークを介してデータを送信するのに時間がか
かることである。他方、ネツトワークのトラフイ
ツクを減らすためにフアイル・データをノードに
記憶する場合、フアイルの整合性が失われるおそ
れがある。たとえば、いくつかのノードのうちの
一つがフアイルに書込みを行なつている場合、そ
のフアイルにアクセスしている他のノードが、今
書き込まれたばかりの最近の更新済みフアイルに
アクセスしていないことがある。したがつて、フ
アイルの整合性が失われ、ノードがアクセスして
いるフアイルが正しくない古くなつたものである
ことがある。本明細書中では、フアイルを永久的
に記憶している処理システムを指すのに「サー
バ」という言葉を使い、そのフアイルにアクセス
するプロセスを有する他の任意の処理システムを
指すのに「クライエント」の語を使うことにす
る。以下で説明する本発明は、分散情報管理の問
題に解決策を与える、オペレーテイング・システ
ムの一部分である。 UNIXオペレーテイングシステム環境内で分散
データ処理システムをサポートする方法は、他に
も知られている。たとえば、Sun Microsystems
はネツトワーク・フアイル・システム(NFS)
を発表し、ベル研究所は遠隔フアイル・システム
(RFS)を開発した。Sun MicrosystemsのNFS
は一連の刊行物に記載されている。たとえば、S.
R.クレイマン(Kleiman)「Vノード:Sun
UNIXにおける多重フアイル・システム・タイプ
用アーキテクチヤ(Vnodes:An Architecture
for Multiple File System Types in Sun
UNIX)」USENIX 1986年夏季国際技術会議・
展示会議事録、238−247ページ;R.サンドバー
グ(Russel Sandberg)等の「Sunネツトワー
ク・フアイル・システムの設計と実施(Design
and Implementation of the Sun Network
File System)」、UNENIX 1985年会議議事録、
119−130ページ;D.ウオールシユ(Dan Walsh)
等の「Sunネツトワーク・フアイル・システムの
概要(Overview of the Sun Network File
System)」117〜124ページ;ジヨメイ・チヤン
(Jomei Chang)の「状況モニタがNFSに対する
ネツトワーク・ロツキング・サービスをもたらす
(Status Monitor Provides Network Locking
Service for NFS)」;ジヨメイ・チヤンの「サン
ネツト(Sunnet)」、71−75ページ;B.テイラー
(Bradley Taylor)の「Sun環境における安全な
ネツトワーキング(Secure Networking in the
Sun Environment)」28−36ページ。AT&Tの
RFSも一連の刊行物に記載されている。たとえ
ば、A.P.リフキン(Andrew P.Rifkin)等の
「RFSアーキテクチヤの概要(PFS
Arcchitectural Overview)」USENIX会議議事
録、ジヨージア州アトランタ(1986年6月)、1
−12ページ;R.ハミルトン(Richard
Hamilton)等の「遠隔フアイル共用に対する管
理者の意見」、1−9ページ;T.ヒユートン
(Tom Houghton)等の「フアイル・システム・
スイツチ(File Systems Switch)」、1−2ペー
ジ;D.J.オランダー(David J.Olander)等のシ
ステムVにおけるネツトワークキング用フレーム
ワーク(A Framework for Networking in
System V)」、1−8ページ。 本発明をその中で実施する分散サービス・シス
テムの、たとえばSun MicrosystemsのNFSとは
区別される一つの特徴は、Sunの方法が基本的に
非保存型マシーンを設計するためのものであつた
ということである。もつとも具体的に言うと、分
散システム内のサーバを無状態に設計することが
できる。すなわち、サーバは、どのクライエン
ト・ノードがサーバ・フアイルをオープンした
か、クライエント・プロセスが読取り専用モード
でフアイルをオープンしたのかそれとも読取り/
書込みモードでフアイルをオープンしたのか、あ
るいはクライエントがそのフアイルのバイト範囲
にロツクをかけているかどうかを含めて、クライ
エント・ノードに関する情報を何も記憶しない。
このような実施形態をとると、クライエント・ノ
ードが故障したり、あるいはサーバ資源に対する
要求を解除したとサーボにきちんと知らせずにオ
フラインになつたときに生じる、誤り回復状況を
サーバが処理する必要がないので、サーバの設計
が簡単になる。 本発明をその中で実施する分散サービス・シス
テムの設計では、全く異なる方法が取られた。も
つと具体的に言うと、この分散サービス・システ
ムは、「状態保存型インプリメーシヨン」である
と特徴づけることができる。本明細書に記載する
「状態保存型」サーバは、誰がそのフアイルを使
つているか、およびフアイルがどのように使われ
ているかに関する情報を保持する。それには、サ
ーバが何らかの方法であるクライエントとの接触
の喪失を検出して、そのクライエントに関する蓄
積された状態情報を廃棄できるようにする必要が
ある。しかし、本明細書に記載するキヤツシユ管
理戦略は、サーバがそうした状態情報を保持しな
い限り実施できない。キヤツシユの管理は、下記
で説明するように、サーバ・フアイルをオープン
せよとの要求を発行しているクライエント・ノー
ドの数およびそうしたオープンが読取りモードで
あるそれとも書込みモードであるかによつて影響
を受ける。 C 発明が解決しようとする問題点 したがつて、ネツトワーク内でのフアイルの位
置およびパフオーマンスに関してユーザ透過性を
もたらす、通信ネツトワーク内で相互接続された
多重プロセツサ式データ処理システムをサポート
するオペレーテイング・システム用の分散サービ
ス・システムを提供することが、本発明の一般的
目的である。 本発明の第二のより具体的な目的は、デツドロ
ツクの問題を防ぐためのフアイル・アクセス制御
構造ロツク(fasロツク)を備えた分散型フアイ
ル管理システム(DFS)をもたらす手法を提供
することである。 D 問題点を解決するための手段 本発明によれば、これらの目的は、遠隔システ
ムからアクセスされる各フアイルごとにfasロツ
クを作成することにより達成される。fasロツク
は、フアイルのiノード(インデツクス・ノー
ド、フアイルの保護ビツト、種別、ポインタ等を
含むフアイル領域)をロツクする代わりにロツク
するのに使用される。こうすると、DFSがフア
イルに対するアクセスが制御し、デツドロツクの
問題の発生を回避することができる。 E 実施例 E1 はじめに 下記の開示では、物理的には異なる複数の計
算機内に存在するフアイルが、ローカル計算機
のフアイル・システムの一部分に見えるよう
に、計算機のフアイルを管理する論理が変更さ
れるという分散フアイル・システムを構築する
ときにぶつかる問題に対する解決策について説
明する。ここで説明するインプリメンテーシヨ
ンは、AIXオペレーテイング・システムのフ
アイル・システムの拡張である。このAIXオ
ペレーテイング・システムの詳細については、
前記で参照した技術解説書を参照されたい。木
構造フアイル・システム、デイレクトリ、およ
びiノードを含むフアイル・システム構成など
のAIXフアイル・システムに関する特定の知
識があるものと仮定する。UNIXオペレーテイ
ング・システムでは、個々のデイスク(または
デイスケツト、またはデイスクの区画)にフア
イル・システムが含まれる。この議論に関係の
あるフアイル・システムの基本的態様を下記に
列挙する。 (a) 個別のフアイル・システム上の各フアイル
が、そのiノード番号によつて一義的に識別
される。 (b) デイレクトリもフアイルであり、したがつ
てデイレクトリもそのiノード番号によつて
一義的に識別できる。 (c) デイレクトリは、次の形式の項目の列を含
む。 名前−iノード番号 ただし、iノード番号は、単純フアイルのi
ノード番号でも別のデイレクトリのiノード
番号でもよい。 (d) 規約により、フアイル・システムのルー
ト・デイレクトリのiノード番号は、iノー
ド番号2とする。 したがつて、ある装置のフアイル・システム内
のパス“/dir1/dir2/file”をたどるには、次
のようなステツプをとる。 1 iノード番号2で識別されるフアイル(その
装置のルート・デイクトリ)を読み取る。 2 そのデイレクトリを探索して、name=dir1
の項目を見つける。 3 dir1に関連するiノード番号で識別されるフ
アイル(これはパス中の次のデイレクトリであ
る)を読み取る。 4 そのデイレクトリを探索して、name=dir2
の項目を見つける。 5 dir2に関連するiノード番号で識別されるフ
アイル(これはパス中の次のデイレクトリであ
る)を読み取る。 6 そのデイレクトリを探索して、name=file
の項目を見つける。 7 このデイレクトリ内のフアイルに関連するi
ノード番号が、パス“/dir1/dir2/file”で
識別される単純フアイルのiノード番号であ
る。 個別のフアイル・システム上に存在するフアイ
ル・ツリーは、あるノードの集合フアイル・ツリ
ーを構築するための構成要素である。あるノード
のルート・フアイル・システムを含む特定の装置
(たとえば、ハード・フアイル区画)を装置と呼
ぶ。マウント操作の実行により、別の装置上にあ
るフアイル・ツリーをノードのフアイル・ツリー
に付加することができる。マウント操作の2つの
主要パラメータは、(1)マウントされるフアイル・
ツリーを保持する装置の名前と(2)装置のフアイ
ル・ツリーをマウントするデイレクトリへのパス
である。このデイレクトリは、すでにノードのフ
アイル・ツリーの一部分でなければならない。す
なわち、ルート・フアイル・システム内のデイレ
クトリ、または(マウント操作によつて)ノード
のフアイル・ツリーにすでに付加されたフアイ
ル・システム内のデイレクトリでなければならな
い。 マウントの実行後は、普通なら「上にマウント
された」デイレクトリを通つて流れるはずのパス
が、マウントされたフアイル・システムのルート
iノードを通つて流れる。マウント操作は、次の
ように進行する。 1 マウント点までパスをたどり、マウントされ
る装置がカバーするデイレクトリのiノード番
号と装置番号を入手する。 2 基本的に次のものを含むデータ構造を作成す
る。 (a) カバーされるデイレクトリの装置番号とi
ノード番号 (b) マウントされる装置の装置名 ノードの集合フアイル・ツリー内でのパスのた
どり方は、(a)上にマウントされたiノード(また
はもちろんパスの終点)にぶつかるまで、装置フ
アイル・ツリー内のパスをたどること、(b)マウン
ト点にぶつかるとマウント・データ構造を使つ
て、パス中で次にどの装置があるか判定するこ
と、および(c)マウント構造内で指示される装置中
のiノード2(ルートiノード)からパスをたど
り始めることからなる。 マウント・データ構造は揮発性である。すなわ
ちデイスク上に記載されない。初期プログラム・
ロード(IPL)の一部として計算機が電源投入さ
れるたびに、所期のマウントのリストを再発行し
なければならない。以上の議論では、従来の
UNIXオペレーテイング・システムがフアイル・
システム全体のマウントをどのように使つてフア
イル・ツリーを作成し、またそのようなフアイ
ル・ツリー内でどのようにパスをたどるか説明し
た。こうしたインプリメンテーシヨンは、ある装
置上に存在するフアイル・システム全体をマウン
トすることに限定されている。本明細書に記載す
る仮想フアイル・システム・コンセプトは、(1)装
置をマウントできる上にデイレクトリもマウント
できるようにすることにより、ある装置上に存在
するフアイル・システムの一部分をマウントする
こと、および(2)すでにフアイル・ツリーの一部分
になつているデイレクトリ上に、遠隔デイレクト
リまたはローカル・デイレクトリをマウントする
こと、さらに(3)すでにフアイル・ツリーの一部分
になつているフアイルの上に(遠隔またはローカ
ル)フアイルをマウントすることができるとい
う、仮想フアイル・システム・コンセプトの改良
である。 仮想フアイル・システムでは、特定の装置フア
イル・システム上で実行される操作が、ノードの
集合フアイル・ツリーの構築および使用に関する
操作からはつきり分離される。ノードの仮想フア
イル・システムは、ローカル・フアイルおよび遠
隔フアイルの両方に対するアクセスを可能にす
る。 ローカル・フアイルの管理は、遠隔フアイルの
管理よりも簡単な問題である。このため、仮想フ
アイル・システムの考察を2つの部分に分ける。
第1の部分では、ローカル操作のみについて説明
する。この部分は、遠隔操作を考察するための基
礎となる。遠隔操作にもローカル操作にも同じデ
ータ構造と操作が使われる。ローカル操作の考察
では、データおよび手順のうちスタンドアロン操
作にとつて重要な態様について説明する。遠隔操
作の考察では、遠隔操作に関連する情報を付け加
えるが、ローカル操作の部で考察したことを繰り
返さない。 第5図は、仮想フアイル・システムのデータ構
造間に存在する関係を示したものである。各マウ
ント操作で、新しい仮想フアイル・システム
(vfs)データ構造が作成される。この構造中の基
本要素は、(a)はこの仮想フアイル・システムのル
ートvノード(仮想ノード)を指すポインタ(た
とえば、ブロツク21からブロツク23への矢
印)、および(b)この仮想フアイル・システムが作
成されたときに上にマウントされたvノードを指
すポインタ(たとえば、ブロツク25からブロツ
ク24への矢印)である。 iノードをフアイル・システムとは独立なシス
テム部分で表わす必要がある場合、それはvノー
ドで表わされる。この構造の基本要素は、次のも
のである。 (a) そのvノードを含む仮想フアイル・システム
を指すポインタ(たとえば、ブロツク22から
ブロツク21への矢印)。 (b) このvノードの上にマウントされた仮想フア
イル・システムを指すポインタ(たとえば、ブ
ロツク24からブロツク25への矢印)。ただ
し、すべてのvノードが仮想フアイル・システ
ムのマウント点なのではないことに留意された
い。すなわち、空白ポインタはこのvノードが
マウント点でないことを示す。 (c) 代理iノードまたは実iノードのどちらかを
指すポインタ(たとえば、ブロツク26からブ
ロツク32への矢印)。 (d) ノード・テーブル項目を指すポインタ(これ
はフアイルが遠隔フアイルであるときだけ空白
でない)。 AIXオペレーテイング・システムは、他の
UNIXオペレーテイング・システムと同じく、シ
ステムが使用している各iノードについての情報
を含むメモリ常駐テーブルを保持する。たとえ
ば、あるフアイルをオープンするとき、デイスク
からそのiノードが読み取られ、このiノード情
報のサブセツトが若干の追加情報と共にiノー
ド・テーブルに記憶される。iノード・テーブル
項目の基本要素は、(a)フアイル・アクセス構造リ
ストの先頭を指すポインタと、(b)デイスクiノー
ドからの情報(その詳細はここでは重要ではな
い)である。 フアイル・アクセス構造は、どのノードでフア
イルがオープンになつているか、およびそれらの
オープンのモード(読取り専用または読取り/書
込み)に関する情報を記録する。フアイルがオー
プンになつている各ノードごとに別々のフアイ
ル・アクセス構造がある。この状態情報を使う
と、各クライエントがサーバ・フアイルをどのよ
うに使つているかをサーバを知ることができる。 フアイル・システムは、その上で実行される1
組の操作をサポートする。次のようにフアイル・
システム操作を実行することにより、プロセスが
フアイル・システムと対話する。 1 ユーザが(おそらく)いくつかの入力パラメ
ータをもたらす操作の一つの呼び出す。 2 フアイル・システム論理が、フアイル・シス
テムの内部データ状態を変更し得る操作を実行
する。 3 フアイル・システム論理が、おそらくは若干
の戻りパラメータを戻して、呼びし側ユーザに
戻る。 フアイル・システム上で実行できる操作は、
“vn操作”と呼ばれる。いくつかのvn操作がある
が、この考察で重要なものについて下記で説明す
る。 vn−lookup vnルツクアツプ操作では、フアイル・システ
ム内のパスをたどる際の基本的反復ステツプは、
デイレクトリ内でパス構成要素の名前を探し出
し、関連するiノード番号を使つてチエーン中の
次のフアイルを探し出すというものである。vn
ルツクアツプ操作の擬似コードを下記に示す。 ルツクアツプ機能 入力:デイレクトリのvノード・ポインタ、デイ
レクトリ中でルツクアツプすべき名前 出力:指定されたフアイル/デイレクトリを指す
vノード・ポインタ デイレクトリのvノード・ポインタをiノー
ド・ポインタに変換する; −−vノード中でポインタを使うデイレクトリ
のiノードをロツクする IF(デイレクトリ中で探索許可をもつていなけ
れば) デイレクトリiノードをアンロツクする; エラーを戻す; デイレクトリで名前を探索する; IF(見つかつたなら) 名前に対するフアイル・ハンドルを作成する; −−デイレクトリ・エントリ中で見つかつたi
ノードを使う; フアイル・ハンドルに対するvノードを指すポ
インタを得る; デイレクトリiノードをアンロツクする; vノードを指すポインタを戻す; ELSE−−見つからなかつた デイレクトリiノードをアンロツクする; エラーを戻す; vn open vn open機能は、どのオープン・モード(読
取り/書込みまたは読取り専用モード)でフアイ
ルをオープンするかを記録するフアイル・アクセ
ス構造を作成する(または、既存のフアイル・ア
クセス構造を修正する)。vnオープン操作の擬似
コードを下記に示す。 vnオープン機能 入力:オープンされるフアイルに対するvノー
ド・ポインタ オープン・フラグ(たとえば、読取り専用また
は読取り/書込み) モード作成−−作成する場合はフアイル・モー
ド・ビツト 出力:成功または失敗を示す戻りコードフアイル
のiノードを指すポインタをvノードから得
る: iノードをロツクする; IF(アクセスを許可されないなら) iノードをアンロツクする; (エラー)を返す; このクライエントのためのフアイル・アクセス
構造を得る; −−フアイル・アクセス構造がない場合は、一
つ割り振る IF(フアイル・アクセス構造を割り振ることが
できなかつたなら) iノードをアンロツクする; (エラー)を返す; フアイル・アクセス構造読取り専用、読取り/
書込み、およびテキスト・カウントを更新す
る; IF(打切りモードがセツトされているなら) フアイルを打ち切る; iノードをアンロツクする; lookuppn lookuppn操作とは、パスをたどる機能である。
その入力はパス(たとえば“/dir1/dir2/
file”)であり、その戻りコードはそのフアイル
を表わすvノードを指すポインタである。 lookuppnは一つのデイレクトリを読み取るため
vn lookupを呼び出し、次にvn lookupから戻
されたvノードがすでに上にマウントされている
かどうか検査する。vノードが上にマウントされ
ていない場合、lookuppnは同じフアイル・シス
テム中のvn lookupを呼び出す。vノードがす
でに上にマウントされている場合は、lookuppn
は上にマウントされたvノード(たとえば第5図
のブロツク24)からマウントされたフアイル・
システムの仮想フアイル・システム(たとえば第
5図のブロツク25)へとポインタをたどる。仮
想フアイル・システムから、ルートvノード(た
とえば第5図のブロツク26)へとポインタをた
どり、vノードが単純フアイルではなくデイレク
トリである場合は、その仮想フアイル・システム
のルートvノードとパス中の次の要素を構成する
名前を入力として与えて、新しいvn lookupを
発行する。lookuppn機能の擬似コードを下記に
示す。 lookuppn機能 入力:パス名 出力:指定されたフアイルに対するvノードを指
すポインタ IF(パスの最初の文字が‘/’なら) 探索すべき現vノードはユーザのルート・デイレ
クトリのvノードである; ELSE 探索すべき現vノードはユーザの現デイレクトリ
のvノードである; 繰り返す IF(パスの次の要素が“……”なら) WHILE(現vノードが仮想フイルム・システム
のルートである間) 現vノードが、仮想フアイル・システムが上にマ
ウントされるvノードとなる; IF(上にマウントされるvノードがない場合) (エラー)を戻す;−−“……”がフアイル・シ
ステムのルートを通過した vn lookupを使つて現vノード中のパス構成要
素をルツクアツプする; IF(vn lookupが構成要素を見つけたなら); 現vノードがvn lookupから戻されるvノード
になる; WHILE(現vノードが上にマウントする間) マウントされる仮想されるフアイル・システムを
表すvfs構造まで現vノードをたどる; 現vノードがマウントされるvfsのルートvノー
ドになる; ELSE−−vn lookupはフアイル構成要素を見つ
けられなかつた (エラー)を戻す;−−探索は失敗した UNTIL(追加のパス構成要素がなくなるまで); (現vノード)を戻す; あるフアイルへのパスをたどりデイレクトリを
マウントするというシナリオを用いて、その操作
を説明することにする。まず、フアイルへのパス
をたどる際に、あるアプリケーシヨン・プロセス
がフアイル“/u/dept54/status”に対するシ
ステム・コール(たとえばオープン)を発行する
ものと仮定する。この要求は、第5図に関して下
記のような形で、オペレーテイング・システムに
よつて実行される(UNIXオペレーテイング・シ
ステムと基本的に異ならない操作については、こ
こでは詳しくは説明しない)。次の仮定を設ける。
第一に、ブロツク21で表わされる仮想フアイ
ル・システムがルート仮想フアイル・システムで
ある。第二に、フアイル“/u”はvノード・ブ
ロツク24とiノード・ブロツク31で表わされ
る。第三に、以前のマウント操作で装置のフアイ
ル・システムがデイレクトリ“/u”にマウント
されている。このマウントで、ブロツク25で表
わされる仮想フアイル・システムが作成された。
第四に、関係するすべてのデイレクトリとフアイ
ルが同じ装置上にある。第五に、指示されたデイ
スクトリ内に示すデイレクトリ項目が存在する。 デイレクトリ iノード番号 名前 iノード番号 2 “u” 15 45 “dept54” 71 71 “status” 12 システム・コールを実施するコールが、そのパ
スをたどるためにlookuppnを呼び出す。
lookuppnはルート仮想フアイル・システム(ブ
ロツク21)のルートvノード(ブロツク23)
からスタートし、このvノードで表わされるデイ
レクトリ・フアイル中で名前“u”をルツクアツ
プするためにvn lookupを呼び出す。vn
lookupはそのデイレクトリ中で、名前“u”が
ブロツク31のiノード15と関連していること
を見つける。vn lookupはiノード15と関連
するvノードを指すポインタを戻さなければなら
ない。そのために、まずiノード15をiノー
ド・テーブルに入れる。次に、すでにこのvノー
ドの親仮想フアイル・システム内にvノードがあ
る(入力vノード(ブロツク23)が親仮想フア
イル・システムを指すポインタを有る)かどうか
検査する。この場合は存在するvn lookupは次
に、ルート仮想フイル・システム(ブロツク2
1)内でそのvノード(ブロツク24)を見つ
け、vノードを指すポインタを戻す。lookuppn
は、戻されたvノードが親仮想フアイル・システ
ム内で上にマウントされていることを発見する。
lookuppnは、vノード(ブロツク24)からマ
ウントされた仮想フアイル・システム(ブロツク
25)へと「上にマウントされた」そのポインタ
をたどる。lookuppnは、新しい仮想フアイル・
システム(ブロツク25)のルートvノード(ブ
ロツク26)へと「ルートvノード」ポインタを
たどる。次にlookuppnは今度はルートvノード
(ブロツク26)を指すポインタと名前“dept54”
を入力して、再びvn lookupを呼び出す。前回
と同様に、vn lookupはデイレクトリを読み取
り、その名前と関連しているiノードを見つけ、
親仮想フアイル・システム(ブロツク25)内に
このiノードに対するvノードを見つけまたは作
成し、このvノードを指すポインタを戻す。
lookuppnは、今見つけたばかりのデイレクトリ
のvノードと名前“status”を入力して、もう一
度vn lookupを呼び出す。vn lookupはデイレ
クトリを読み取り、その名前に関連するiノード
(ブロツク34)を見つけ、親仮想フアイル・シ
ステム(ブロツク25)内でこのiノードに対す
るvノード(ブロツク28)を見つけまたは作成
し、このvノードを指すポインタを戻す。システ
ム・コールを実施したコードは、次にフアイル上
で要求された操作を実行する。 次に、アプリケーシヨン・プロセスが、フアイ
ル“/u/group”をデイレクトリ“/u/foo”
の上にマウントするため、「マウント」システ
ム・コールを発行するものと仮定する。下記のシ
ナリオで、この要求がオペレーテイング・システ
ムによつてどのように実行されるかを説明する
(この場合も、UNIXオペレーテイング・システ
ムと基本的に異ならない操作は詳しくは説明しな
い)。 このシナリオでは、第6図と第7図は参照す
る。第6図は初期状態を表わし、第7図は最終状
態を表わしたものである。次の仮定を設する。ま
ず、ブロツク41で表わされる仮想フアイル・ブ
ロツクがルート仮想フアイル・ブロツクである。
第二に、関係するデイレクトリとフアイルは、す
べて同一装置上にある。第三に、下記のデイレク
トリ項目が指示したデイレクトリ内にある。 デイレクトリ iノード番号 名前 iノード番号 2 “u” 15 2 “etc” 83 15 “gorp” 92 83 “foo” 75 75 “filel” 89 マウント・システム・コールを実施するコード
は、次の操作を実行する。上にマウントされるフ
アイル“/etc/foo”へのパスをたどるため、
lookuppnを呼び出す。この操作が完了したとき、
ルート仮想フアイル・システム(ブロツク41)
は、“/etc/foo”に対するvノード(ブロツク
44)を含んでいる。このvノードは、ルート仮
想フアイル・システム(ブロツク41)を指すポ
インタと、iノード75に対するiノード・テー
ブル項目(ブロツク45)を指すポインタを有す
る。マウントされるフアイル“/etc/gorp”へ
のパスをたどるため、lookuppnを呼び出す。こ
の操作が完了したとき、ルート仮想フアイル・シ
ステム(ブロツク41)は“/etc/gorp”に対
するvノード(ブロツク49)を含んでいる。こ
のvノードは、ルート仮想フアイル・システム
(ブロツク41)を指すポインタと、iノード9
2に対するiノード・テーブル項目(ブロツク4
8)を指すポインタを有する。ここでマウント論
理は、新しい仮想フアイル・システムを作成す
る。それには、まず新しい仮想フアイル・システ
ム(ブロツク46)を作成し、次に遡つて親仮想
フアイル・システム(ブロツク46)を指すポイ
ンタと、ルートiノード(iノード92、ブロツ
ク48)を指すポインタとを有する、この仮想フ
アイル・システムに対するルートvノード(ブロ
ツク47)を作成する。「上にマウントされる」
ポインタが、ルート仮想フアイル・システム(ブ
ロツク41)内のカバーされるvノード/ブロツ
ク44)に挿入され、上にマウントされるvノー
ド(ブロツク44)を指すポインタが新しい仮想
フアイル・システムに挿入される。 E2 分散フアイル・システムにおける操作 以上、スタンドアロン操作用のデータ構造に
ついて説明した。次に第1図には、本発明をサ
ポートするオペレーテイング・システムを実施
した第2図のものと同様の分散システムが示さ
れている。以下の説明では、フアイルが永久的
に記憶されているノードを指すのに「サーバ」
という言葉を使い、そのフアイルにアクセスす
るプロセスを有する他の任意のノードを指すの
に「クライエント」の語を使うことにする。た
だし、「サーバ」の語は、一部のローカル・エ
リア・ネツトワーク・システムで使われている
ような専用サーバを意味しないことを了解され
たい。本発明をその中で実施する分散サービ
ス・システムは、システムの様々なノードで走
行しシステム内のどこにあるフアイルにでもア
クセスする、広範なアプリケーシヨンをサポー
トする、真の分散システムである。 第1図に示した分散システム用のデータ構造
を第8図に示し、そのデータ構造の構成部分を
第9A図ないし第9F図に示す。第8図を参照
すると、クライエント・ノードは、遠隔サー
ド・ノード内にあるフアイルにアクセスするこ
とができる。こうしたクライエントは、サーバ
の1つのデイレクトリをマウントすることによ
りサーバのフアイルに対するアクセス権を得
る。そのクライエント・ノードでは、遠隔マウ
ント操作によつて作成されるデータ構造が、ロ
ーカル・エンテイテイをマウントすることによ
つて作成されるデータ構造と同等である。ロー
カルの場合と同じく、間隔マウント操作で、ク
ライエント・ノード中に仮想フアイル・システ
ム(vfs、たとえばブロツク54)が作成され
る。ローカルの場合と同じく、遠隔フアイルを
含む仮想フアイル・システム中のフアイルを使
用すると、クライエント・ノード中にvノード
構造(たとえばブロツク57)が作成される。
ローカルの場合と同じく、このvノード構造は
iノード・テーブル項目(たとえばブロツク6
3)を指すポインタを有する。ただし、このi
ノード・テーブル項目は、遠隔フアイルからの
iノード情報を含まず、その代わりに代理iノ
ードを含む。この代理iノードは、遠隔iノー
ドの代理である。 サーバ・ノードでは、遠隔ノードがサーバの
フアイルをどのように使用しているかに関する
状態情報をサーバが記録できるように、ある種
のデータ構造が構築される。もつと具体的に言
うと、各サーバは、遠隔クライエントによつて
オープンになつているフアイルを保持するため
の仮想フアイル・システムとして「ダミー仮想
フアイル・システム」(たとえばブロツク71)
を有する。ダミー仮想フアイル・システムは、
サーバのフアイル・ツリーの一部ではない。遠
隔ノードによつてオープンになつている各フア
イルに対して、サーバのダミー仮想フアイル・
システム中にvノード(たとえばブロツク7
4)がある。遠隔ノードによつてオープンにな
つている各フアイルは、サーバのiノード・テ
ーブル中にiノード・テーブル項目(たとえば
ブロツク88)を有する。このiノード・テー
ブル項目は、サーバにあるローカル・プロセス
がフアイルをオープンしたために存在するテー
ブル項目と同じである。たとえば、遠隔オープ
ンのゆえにテーブル中に存在するブロツク84
は、サーバでの操作のゆえにテーブル中に存在
するブロツク88に同じ構造である。 あるクライエントとサーバがあるサーバ・フ
アイルに関して通信するとき、フアイルを識別
する方法が必要となる。これは、フアイル・ハ
ンドルによつもたらされる。クライエントの要
求が出て、サーバが特定フアイルの指定を伴つ
て回答する(たとえば遠隔ルツクアツプ要求)
とき、そのフアイルはフアイル・ハンドルで識
別される。クライエントの要求が特定フアイル
の指定を含む(たとえば遠隔オープン要求)と
き、そのフアイルはフアイル・ハンドルで識別
される。フアイル・ハンドルは、装置番号、i
ノード信号、iノード世代番号の各フイールド
を含んでいる。 フアイル・ハンドルの必要性は、次のシナリ
オからわかる。次のように仮定する。クライエ
ントがサーバに要求を出して、回答中でフアイ
ル・ハンドルを受け取る。クライエントは、そ
のフアイル・ハンドルを記憶し覚える。サーバ
での何らかの活動によつてそのフアイルが削除
され、iノード・スロツトが別のフアイル用に
再使用される。クライエントが記憶しているフ
アイル・ハンドルを使つてサーバに要求を出
す。サーバはフアイル・ハンドルを受け取り、
新しいフアイルで操作を実行する。そうなる
と、その操作は許容できないものとなるばすで
ある。 この欠点は、iノード世代番号を使うことに
よつて防止される。iノード世代番号は、iノ
ード中のフイールドとしてデイスク上に記憶さ
れる。サーバがあるフアイルを削除するとき、
そのiノード世代番号を増分する。要求がサー
バに届いたとき、フアイル・ハンドルは分離さ
れ、装置番号とiノード番号がiノードを探し
出すのに使われ、その後フアイル・ハンドルの
iノード世代番号がiノードのiノード世代番
号と比較される。両者が異なる場合、その要求
は拒否される。 クライエントが遠隔サーバ上にあるフアイル
をオープンしたいとき、ネツトワーク移送機構
を使つてサーバとの接続を確立する。このフア
イルに関する以後のトランザクシヨン(たとえ
ば、読取り、書込みなど)は、この接続上を流
れる。各ノードはノード・テーブルを含んでい
る。ノードはそのノード・テーブル内の項目
(たとえばブロツク70)を用いて、遠隔ノー
ドに対する既存の接続に関する情報を記録す
る。 ネツトワーク内の1つのノードが別のノード
に自分のために実行を要求できる操作が少数あ
る。こうした操作は、dfs操作と呼ばれる。あ
るノードが別のノードに要求を出すとき、次の
操作が行なわれる。まず、要求側ノードは、ど
のdfs操作を要求しているか指定し、その要求
に適したパラメータを運ぶメツセージを送る。
次に受取側ノードは要求を受け取つて指定され
た操作を実行する。最後に、受取側ノードは、
そのdfs操作に適した回答パラメータを運ぶメ
ツセージを送る。 ローカルノード内でフアイル・システムに対
して発行されるvn操作と、ネツトワークを介
して発行されるdfc操作の間には、緊密な関係
がある遠隔フアイルに対する典型的な操作は次
の通りである。まず、ローカル・カーネルが、
操作中のフアイルが遠隔かそれともローカルか
知らずに、vn操作を発行する。第二に、その
フアイルが遠隔ノードにあるので、フアイル・
システム・インプリメンテーシヨン・コードが
対応するdfs操作を、そのフアイルを保持する
ノードに送る。そのフアイルがローカル・フア
イルであつた場合、操作が実行され、戻りパラ
メータが戻され、タスクが完了しているはずで
あることに留意されたい。第三に、そのフアイ
ルを保持するノードがそのdfs操作要求を受け
取り、そのローカル・フアイル・システムに対
応するvn操作の実行を要求する。このvn操作
からの戻りパラメータを使つて、そのdfs操作
に対する戻りパラメータが構築される。第四
に、要求側ノードがサーバ・ノードからdfs操
作回答を受け取り、dfs操作戻りパラメータを
使つて、元のvn操作要求に対する戻りパラメ
ータを構築する。 ローカル・フアイルの上に遠隔フアイルをマ
ウントし、フアイルへのパスをたどるというシ
ナリオを用いて、この操作を説明することにす
る。第一のシナリオでは、クライエント・ノー
ド内のアプリケーシヨン・プロセスが、ローカ
ル・クライエント・フアイル“/etc/foo”の
上にサーバ・ノードのフアイル“/u/gorp”
をマウントするため、「マウント」システム・
コールを発行するものとする。この要求がどの
ように実行されるかは、次のシナリオからわか
る。このシナリオでは第10図および第11図
を参照する。第11図は初期状態を表わし、第
11図は最終状態を表わす。 ブロツク51で表わされる仮想フアイル・シ
ステム(vfs)がサーバのフアイル・ツリーの
ルート仮想フアイル・システムであり、関係す
るサーバのデイレクトリおよびフアイルはすべ
て同一装置上にある。指示されたデイレクトリ
中には次の項目が存在する。 サーバ・ノード デイレクトリ iノード番号 名 前 Iノード番号 2 “u” 15 15 “gorp” 92 92 “file2” 67 クライエント・ノード デイレクトリ iノード番号 名 前 iノード番号 2 “etc” 83 83 “foo” 75 マウント・システム・コールを実施するコー
ドが、上にマウントされるフアイル“etc/
foo”へのパスをたどるためにlookuppnを呼び
出す。この操作が完了したとき、ルート仮想フ
アイル・システム(ブロツク51)は、“etc/
foo”に対するvノード(ブロツク53)を含
んでいる。このvノードは、ルート仮想フアイ
ル・システム(ブロツク51を指すポインタ
と、iノード75に対するiノード・テーブル
項目(ブロツク61)を指すポインタを有す
る。マウントされるフアイルは遠隔ノードにあ
るため、dfsマウント要求が、マウントされる
目的物へのパスとしてパス“/u/gorp”を
通つてサーバ・ノードに発行される。 dfsマウント要求を受け取ると、サーバ・ノ
ードは、マウントされるフアイル“/u/
gorp”へのパスをたどるため、lookuppnを呼
び出す。このルツクアツプ操作が完了したと
き、サーバのルート仮想フアイル・システム
(ブロツク71)は“/u/gorp”に対するv
ノードを含んでいる。このvノードは、ルート
仮想フアイル・システムを指すポインタと、i
ノード92に対するiノード・テーブル項目を
指すポインタを有する。サーバはiノード中の
情報(装置u、iノード92)を用いて、フア
イル“/u/gorp”に対するフアイル・ハン
ドルを構築する。サーバはdfsマウント要求に
対する回答中でこのフアイル・ハンドルを戻
し、次にvノードとiノードを解除する。最後
に、クライエントはdfsマウント要求に対する
回答中でこのフアイル・ハンドルを受け取り、
次のような新しい仮想フアイル・システムを作
成するのに必要な操作を実行する。 (a) 新しい仮想フアイル・システム(ブロツ
ク54)を作成する。 (b) 遡つて親仮想フアイル・システム(ブロツ
ク54)を指すポインタとルートiノード
(ブロツク62)を指すポインタとを有する、
この仮想フアイル・システムに対するルート
vノード(ブロツク55)を作成する。この
仮想フアイル・システムのルートiノードは
遠隔フアイルであるため、ルートvノードか
ら指されるiノードは代理iノードである。
この代理iノードは、クライエントのdfsマ
ウント要求に対してサーバが戻したフアイ
ル・ハンドルを含んでいる。 (c) 「上にマウントされる」ポインタを、ルー
ト仮想フアイル・システム(ブロツク51)
内のカバーされたvノード(ブロツク53)
に挿入する。 (d) 上にマウントされるvノード(ブロツク5
3)を指すポインタを新しい仮想フアイル・
システム(ブロツク54)に挿入する。 次に、上記の遠隔マウント(クライエント
の/etc/fooの上にサーバの/u/gorpをマウ
ントする)を実行した後、クライエント・プロ
セスが、フアイル“/etc/foo/file2”に対し
て操作するためのシステム・コールを発行する
と仮定する。下記のシナリオのブロツク番号に
ついては第11図および第12図を参照された
い。第11図は初期状態を表わし、第12図は
オープン操作後のシステム状態を表わす。ま
ず、システム・コールを実施するコードが、パ
スをたどうるためにlookuppnを呼び出す。
lookuppnは、ルート仮想フアイル・システム
(ブロツク5め)のルートvノード(ブロツク
52)からスタートし、このvノードで表わさ
れるデイレクトリ・フアイル中で名前“u”を
ルツクアツプするためにvn lookupを呼び出
す。 vn lookupはそのデイレクトリ中で、名前
“u”がiノード15と関連していることを見
つける。vn lookupは、iノード15に対す
るルート仮想フアイル・システム中にvノード
とiノードを構築し、このvノードに対するポ
インタをlookuppnに戻す。 lookuppnは、今度はiノード15によつて
識別されるデイレクトリ中で名前“foo”をル
ツクアツプするために、再度vn lookupを呼
び出す。 vn lookupは指示されたデイレクトリを読
取り、名前“foo”がブロツク61中のiノー
ド75と関連していることを発見する。ルート
仮想フアイル・システム(ブロツク51)中に
は既にこのiノード(ブロツク61)に対する
vノード(ブロツク53)が存在し、したがつ
てvn lookupはこのvノードを指すポインタ
を戻す。lookuppnは、そのvノードが上にマ
ウントされていることを発見する(ブロツク5
3中の「上にマウントされた」ポインタはブロ
ツク54を指している)。しがたつて、
lookuppnは次の仮想フアイル・システム(ブ
ロツク54)へと「上にマウントされた」ポイ
ンタをたどり、その仮想フアイル・システムの
ルートvノード(ブロツク55)へとそのルー
トvノード・ポインタをたどる。次に
lookuppnはパスの次の要素(“file2”)を探す
ためにvn lookupを呼び出し、ブロツク55
を指すポインタと名前“file2”をうvn
lookupに与える。探索すべきデイレクトリは
遠隔ノードにあり、クライエントの代理iノー
ド(ブロツク62)に記憶されているフアイ
ル・ハンドルによつて識別される。vn
lookupはそのフアイルを保持するサーバにdfs
−lookupを発行し、そのデイレクトリを識別
するフアイル・ハンドルとルツクアツプすべき
名前(“file2”)を送る。サーバがdfs−lookup
を受け取ると、フアイル・ハンドルを使つて読
み取るべきデイレクトリを識別し、このデイレ
クトリ中で名前“file2”を探索するためにvn
lookupを発行する。vn lookupをデイレク
トリを読み取り、名前“file2”に関連するi
ノード番号が67であることを発見する。vn
lookupはiノード67に対するダミー仮想
フアイル・システム中でvノードとiノードを
構築し、このvノードを指すポインタを
lookuppnに戻す。dfs−lookupはvn lookup
から戻されたデータ構造中の情報を用いて、i
ノード67によつて識別されるフアイルに対す
るフアイル・ハンドルを構築する。dfs−
lookupは、dfs−lookup要求に対する回答とし
てこのフアイル・ハンドルをクライエントに戻
し、vノードとiノードを解除する。クライエ
ント中で、見つかつたフアイルに対するvノー
ド(ブロツク55)と代理iノード(ブロツク
63)が作成される。 “file2”はこのパスの最後の要素なので、
lookuppnは見つかつたvノード(ブロツク5
5)を指すポインタをその呼出し側に戻す。シ
ステム・6cxzコールを実施するコードは、次
にそのフアイルに対して要求された操作を実行
する。 E3 フアイル・アクセスの同期モード 本発明が実施される第1図に示すような分散
型サービス・システムでは、ローカル・キヤツ
シユ12A,12Bおよび12CがノードA,
BおよびCごとに存在する。フアイル5がノー
ドAのデイスク2Aに永久的に存在する場合、
サーバ・ノードAで実行されるローカル・プロ
セス13Aによるキヤツシユ12Aの使い方
は、上述のスタンドアロン・システムの場合と
同じである。しかし、ノードBおよびCでそれ
ぞれ実行される遠隔プロセス13Bおよび13
Cは、第3図に示すようにサーバ・キヤツシユ
およびクライエント・キヤツシユを使用する2
ステツプ・キヤツシユ方式によつてフアイル5
にアクセスする。サーバ・ノードはデイスク2
Aからフアイル・ブロツク5を得、それをサー
バ・キヤツシユ12Aに記憶する。クライエン
ト・ノードBはネツトワーク3を介して出て行
き、サーバ・キヤツシユ12Aからフアイル5
のブロツク5を得る。クライエント・ノードB
は、フアイル5のブロツク5を、サーバ・キヤ
ツシユ12A内に存在していた通りに、クライ
エント・キヤツシユ12Bに記憶する。クライ
エント・ノードBのユーザ・アドレス・スペー
ス14Bがフアイル5の任意のブロツクからデ
ータをシークするとき、各アクセスごとにネツ
トワーク3を介して出て行く代わりに、クライ
エント・キヤツシユ12Bがアクセスされる。
クライエント・キヤツシユ12Bを使つて遠隔
フアイル5にアクセスすると、ネツトワーク・
トラフイツクおよびオーバーヘツドを節約でき
るので、処理能力を大幅に向上させることがで
きる。 本発明のシステムおよび方法は、アプリケー
シヨン・プログラム・レベルでフアイル・アク
セス意味論を保持しながら高い処理能力を得る
ように、分散型環境でクライエント・キヤツシ
ユ12Bおよびサーバ・キヤツシユ12Aの使
用を管理するものである。これにより、スタン
ドアロン・システムで実行される既存のプログ
ラムが、何らの変更もなく分散型システムで実
行することが可能になる。フアイル・アクセス
意味論は、フアイルにアクセスしてそれを変更
するために読取りおよび書込むシステム・コー
ルを発行する様々な処理によつてオープンされ
るとき、フアイルの整合性を保持する。フアイ
ル・アクセス意味論は、任意のバイト範囲で一
度に一つの入出力動作のみが許されることを要
求し、一度入出力動作が開始すると、フアイル
の同じバイト範囲に対して他の入出力動作が優
先使用を行なうことはできない。 第13図を参照して上記の例を示す。プロセ
ス131がフアイル5のバイト範囲N1−N2に
書込みシステム・コールを発行した場合、バイ
ト範囲N1−N2全体がプロセス131によるア
クセスのために使用可能なとき、その書込みシ
ステムコールだけが実行でき、バイト範囲N1
−N2に関する読取り動作は全く実行されない。
書込みシステム・コールの実行中、フアイル5
のバイト範囲N1−N2に関する他のすべての動
作は、書込みが終了するまで延期される。バイ
トがローカル・キヤツシユ12Aに書き込まれ
るまで、書込みは終了しない。書込み要求が終
了すると、キヤツシユ12Aに書込まれたデー
タは、他のプロセス131ないし13Nのいず
れかによる後続の読取り動作に見えるようにな
る。 フアイル・アクセス意味論のもう一つの要件
は、N1−N2等のフアイル・バイト範囲(同じ
入出力動作によつてアクセスされるレコードま
たは一組の関連レコードでよい)が読取りプロ
セスから見えるとき、フアイル・バイト範囲
N1−N2は常に、この範囲に対する最後の更新
を反映する一貫した一組のデータを含まなけれ
ばならないということである。この範囲は、書
込み動作が実行されている間、アクセスのため
に使用することができない。このようにして、
プロセスによつて発行される次の読取りは書き
込まれたばかりのデータを読み取り、古い陳腐
化したデータを読み取ることはない。 第1図に示す本発明の分散型ネツトワーク環
境では、異なるアプリケーシヨン・プログラム
4Aおよび4B、プロセス131ないし13N
および231ないし23Nからの読取りおよび
書込みシステム・コールの実行が、前述のフア
イル・アクセス意味論が保持されるように同期
される。本発明のシステムおよび方法では、
種々のキヤツシユ同期モードを用いて同期を保
証する。特定のフアイル5に対して、入出力コ
ールは、アクセスのためにフアイル5をオープ
ンするプロセス131ないし13Nまたは23
1ないし23Nの位置および同期モードに応じ
て、クライエント13またはサーバAによつて
同期される。 3種類の同期モードを第14図に示し、第1
図と関連して説明する。最初のモード104は
非同期モードと呼ばれる。第14図のブロツク
107に示すように、ただ一つのクライエント
遠隔ノードCで実行されるプロセス13Cによ
る読取り/書込みアクセスのためにフアイル5
がオープンされる場合、フアイル5はこのモー
ド104で動作する。このモード104では、
制御権はすべてクライエント・ノードCにあ
る。サーバ・キヤツシユ12Aおよびクライエ
ント・キヤツシユ12Cがこれらの読取り/書
込み動作のため使用される。読取りまたは書込
み動作では、クライエント・キヤツシユ12C
から満足され得ない場合のみ、サーバ・キヤツ
シユ12Aに対するアクセスが必要となる。フ
アイル5がクライエント・ノードCのすべての
プロセス13Cによつてクローズされるとき、
または、クライエント・ノードCの他のデータ
のもつと場所が必要とされるとき、クライエン
ト12Cにある修正されたブロツクが周期的同
期動作によりサーバ12Aに書き込まれる。ま
た、フアイルが非同期モードから全同期モード
に変わるとき、修正されたブロツクがサーバに
書き込まれる。 第二のモード105は読取専
用モードである。 読取専用モード105は、第14図のブロツ
ク108に示すように、ただ一つのノードC内
のプロセス13Cからの、または複数のノード
BおよびC内のプロセス13Bおよび13Cか
らの読取り専用アクセスのためにオープンされ
るフアイル5に使用される。このモード105
では、サーバ・キヤツシユ12Aおよびクライ
エント・キヤツシユ12Bまたは12Cあるい
はその両方が使用される。読取り要求は一度に
1ブロツクまたは複数のブロツクに対して発行
される。同じクライエントBまたはCからの特
定のブロツクに対する1回おきの読取り要求は
サーバ12に行かず、その代わりに、当該のク
ライエント・キヤツシユBまたはCから読み取
られる。言い換えると、読取り動作では、クラ
インエント・キヤツシユ12Cまたは12Bか
ら満足される場合、サーバ12Aに対するアク
セスが必要でない。要するに、ノードA,Bま
たはCのいずれかにおけるプロセス13A,1
3Bまたは13Cのいずれかによる読取り専用
アクセスのためにフアイル5がオープンされる
場合は、フアイル5はモード105で動作す
る。 第三のモード106は全同期モードである。
全同期モード106は複数のフアイルA,Bで
オープンされているフアイル5のため使用さ
れ、少なくとも1つのノードが書込みアクセス
のためにフアイルをオープンしている。全同期
モード106では、クライエント・キヤツシユ
12Cまたは12Bは迂回され、サーバ・キヤ
ツシユ12Aのみが使用される。読取りおよび
書込み動作はすべてサーバ12Aで実行され
る。 第1図に示す分散型環境1では、大部分のフ
アイル5は、第14図に示す読取専用モード1
05である複数のノードA,BおよびCにおけ
るプロセス13A,13Bおよび13Cによる
読取りのみのためにオープンされたり、非同期
モード104にあるただ一つのノードでの更新
のためにオープンされる場合が多く、全同期モ
ードにある複数ノードで実行されるプロセスに
よる読取りおよび書込みアクセスのためにオー
プンされることはそれほど頻繁ではない。第1
3図に示すように、読取専用モード105およ
び非同期モード104でクライエント・キヤツ
シユ12Bを使用するため、フアイル5にアク
セスする遠隔読取り/書込み応答時間が大幅に
減少し、システムの全体的処理能力が向上す
る。 第15図に示すように、全同期モードでは、
クライエント・キヤツシユは使用されない。ク
ライエント・ノードBは、各読取りおよび書込
み動作ごとにネツトワーク3を介してサーバA
からのフアイル5にアクセスする。このモード
では読取り/書込み応答時間は増加するが、ク
ライエントは、ローカル・キヤツシユ中に、サ
ーバに存在している対応するフアイルと共に更
新されなかつたフアイル5を保持しないので、
フアイル・アクセス意味論は保持される。 3種類のモードを使用してクライエント・キ
ヤツシユの使用を管理すると、読取り/書込み
応答速度が全体として平均的に増加することと
フアイルの整合性が組み合わされて、システム
の全体的処理能力が最適になる。ある場合にク
ライエント・キヤツシユの使用で読取り/書込
み応答時間が減少し、別の場合にはクライエン
ト・キヤツシユを使用しないことでフアイル・
システムの意味論が保持される。 フアイルの同期モードは、どのノードがフア
イルをオープンするか、およびフアイルが読取
りのためにオープンされるのかそれとも書込み
のためにオープンされるのかだけでなく、フア
イルが存在する装置が生アクセス・モードでオ
ープンされるかどうかによつても決まる。装置
に対する生アクセスとは、装置2A内の第13
図に示すデータ・ブロツクLBN1がアクセスさ
れるという意味である。したがつて、装置2A
の読取りおよび書込みは、装置2Aのブロツク
LBN1に対する読取りおよび書込みとなる。ブ
ロツクがどのフアイルに属するかは関係ない。
サーバ・ノードAにある処理131ないし13
Nからの生アクセスのために装置2Aをオープ
ンすることができる。遠隔ノードBまたはCか
らの生アクセスのために装置2Aをオープンす
ることはできない。 第13図では、第3図に関連して上述したス
タンドアロン・システムと同様に、キヤツシユ
12Aは装置2AのブロツクLBN1として管理
される。サーバAは、サーバ・キヤツシユ12
Aを装置2A内の論理ブロツクLBN1として見
る。クライエントBは、フアイル5が装置2の
どこにあるか、全く知らない。クライエントB
が知つていることは、装置2A上のブロツク番
号N1にあるフアイルにアクセスしていること
だけである。クライエント・キヤツシユ12B
は、データをフアイル5の論理ブロツクN1と
して処理する。サーバ・キヤツシユ12Aで
は、データは装置2Aの論理ブロツクLBN1と
して処理される。データをこのように処理する
際、データが生装置としての装置に書き込まれ
る場合、および、装置に書き込まれたブロツク
と同じフアイルのブロツクが次に読み取られる
場合、この読取りで新たに書き込まれたデータ
が見えることをサーバは保証することができ
る。このため、フアイル・システムの意味論が
保持される。 第13図に示すように、フアイルがクライエ
ント・ノードBでアクセスされ、フアイルが非
同期モードまたは読取専用モードにある場合、
クライエント・オペレーテイング・システム1
1Bは読取りシステム・コール16におけるフ
アイル内のフアイル記述子およびバイト範囲
(フアイル記述子、N1)を装置番号および装置
内の論理ブロツク番号に変換しない。クライエ
ントは、フアイル記述子およびバイト範囲をフ
アイル・ハンドル、ノード識別子、およびフア
イル内の論理ブロツク番号に変換する。クライ
エント・キヤツシユ12Bでは、フアイル・ハ
ンドル、ノード識別子、およびフアイル内の論
理ブロツク番号によつて指定されるブロツク1
7がある。クライエント・アプリケーシヨン4
Bから読取りコール16が発行されると、読取
り要求が、フアイル内のフアイル記述子および
バイト範囲と共にオペレーテイング・システム
に送られる。オペレーテイング・システムは次
にクライエント・キヤツシユ12Bを調べる。
フアイル・ハンドル、ノード識別子、およびフ
アイル内の論理ブロツク番号がそこにある場合
は、キヤツシユ12Bを読み取り、そこにない
場合は、その読取り要求がサーバに送られる。
サーバはそこでフアイル・ハンドルおよびフア
イル内の論理ブロツク番号を取り出し、それを
装置番号および装置内の論理ブロツク番号に変
換する。この変換が必要なのは、サーバ・キヤ
ツシユ12Aは、スタンドアロン・システムの
場合と同様に、装置番号および装置内のブロツ
ク番号によつて管理されるためである。読取り
要求はサーバに送られた後、第3図と関連して
説明したスタンドアロン・システム内でその自
体のアプリケーシヨンからきた場合と同様に処
理される。 クローズされたフアイルは同期モードを持た
ない。しかし、一度フアイルがまずプロセスに
よつてオープンされると、フアイルの同期モー
ドは、第16図に示すように、以下に従つて初
期設定される。フアイルが存在する装置がクロ
ーズされている(112)、すなわち、特別な
装置としてオープンされていず、かつフアイル
が1つの遠隔ノードでの書込みアクセスのため
にオープンされている(113)場合は、フア
イルの同期モードは非同期104に初期設定さ
れる。フアイルが存在する装置がクローズされ
ており、かつフアイルが一つまたは複数のノー
ドでの読取り専用アクセスのためにオープンさ
れている(114)か、または、装置およびフ
アイルの両方が読取専用アクセスのためにオー
プンされている(115)場合は、フアイルに
同期モードは読取専用モード105である。フ
アイルが存在する装置が読取り/書込みアクセ
スのためにブロツク特別装置としてオープンさ
れており(116)、または、フアイルが複数
のノードでオープンされ、オープンの少なくと
も1つは書込みのためである場合は、フアイル
の同期モードは全同期モード106に初期設定
される。ブロツク特別装置とは、装置に対して
生アクセスがあるという意味である。 一度フアイルがあるモードに初期設定される
と、状態が変化した場合、フアイル・モードが
変わることがある。第16図の線118ないし
123に示すように、あるモードから別のモー
ドへの移行は以下の条件下で行なわれる。フア
イルが現在非同期モード104にあり、フアイ
ルがオープンされているノードの数が2以上に
なる場合124、同期モードは、線119で示
すように、全同期106に変わる。さらに、フ
アイルが存在するブロツク特別装置Dがオープ
ンされている場合(125)、同期モードは非
同期モード104から全同期モード106に変
わる。フアイルに対するクローズ動作では、そ
のクローズ動作がフアイルの最後のクローズで
なくして、フアイルが書込みのため依然として
オープンされている場合、モードの変化はな
い。しかし、クローズ動作が書込みアクセスに
対するフアイルの最後のクローズであり、残り
のすべてのオープンが読取りアクセスのためで
ある場合(83)は、新しいモードは、線12
1で示すように読取専用モード105になる。
クローズ動作がフアイルの最後のクローズであ
る場合、同期モードはない。 フアイルが現在読取専用同期モード105に
あり、フアイル・オープン動作が行なわれる場
合、そのオープンが読取りのためであれば、モ
ードの変化はない。しかし、そのオープンが書
込みのためである場合は、線120で示すよう
に、すべてのオープンが一つのクライエント・
ノードにある(127)なら、新しい同期モー
ドは非同期モード104である。さもなけれ
ば、同期モードは全同期モードである。さら
に、フアイルが存在する装置が読取り/書込み
アクセスのためにオープンである場合(13
0)、そのフアイルに対する新しい同期モード
は全同期モード106である。クローズ動作に
ついては、そのクローズがフアイルの最後のク
ローズである場合、そのフアイルに同期モード
はない。クローズ動作後に、1つまたは複数の
ノードでフアイルが依然としてオープンされて
いる場合、同期モードは変わらない。 フアイルが現在全同期モード106にあり、
そのフアイルに対して別のオープンがある場
合、またはフアイルが存在する装置がオープン
される場合は、同期モードの変更はない。フア
イルのクローズ動作後、読取り/書込みアクセ
スのためのオープンが遠隔ノードに残つてお
り、フアイルが存在するブロツク特別装置がオ
ープンされていない場合、線118を介してブ
ロツク141に示すように、同期モードは非同
期モード104に変わる。フアイルが存在する
ブロツク特別装置がオープンされておらず、線
122を介してブロツク142で示すように、
フアイルが1つまたは複数のノードで読取り専
用アクセスのためにオープンされる場合、また
は、フアイルが存在するブロツク特別装置が読
取り専用アクセスのためにオープンされ、線1
22を介してブロツク143で示すように、フ
アイルが読取り専用アクセスのためにオープン
される場合は、同期モードは全同期モード10
6から読取専用モード105に変わる。 フアイルに対するすべてのオープンおよびク
ローズ動作はサーバ・ノードで解決される。サ
ーバは、モードを変更する可能性がある動作を
実行するとき、オープンの同期モードを判定す
る。サーバはまた、同期モードの変更を行な
う。サーバがフアイルに対する新しいオープン
またはクローズを受け取るとき、フアイルに対
する同期モードの変更がトリガされることがあ
る。必要とされる同期モードが現在の同期モー
ドでない場合、サーバは、フアイルがオープン
されているすべてのクライエントに「同期モー
ド変更」遠隔手順コールを送る。フアイルが初
めてオープンされた後で、そのフアイルをオー
プンしたクライエントにフアイルのモードが知
らされる。モードが非同期モードまたは読取専
用モードのどちらかである場合、クライエント
は読取り用のクライエント・キヤツシユを使つ
て開始することができ、さらに、第13図に示
すように、モードが非同期モードの場合は、書
込み用のクライエント・キヤツシユをも使つて
開始することができる。クライエントが通信リ
ンクを介してサーバに対して読取りまたは書込
みを行なう必要はない。第15図に示すように
モードが全同期モードである場合は、クライエ
ント・キヤツシユは使用されず、クライエント
は通信リンク3を介して読取りまたは書込みを
サーバに送らねばならない。 第15図でサーバAは常にフアイル5のモー
ド151をセツトする。フアイルのモードは、
フアイルをオープンしたすべてのノードで同じ
である。サーバAはまた、どのノードがフアイ
ルをオープンしたか、およびそれらのオープン
が読取りのためかそれとも書込みのためかを知
つている。サーバAは、ノード内のどの処理1
31ないし13N,231ないし23Nがフア
イルをオープンしたかを知つている必要はな
い。第15図に示すように、サーバは上記情報
をすべてフアイル・アクセス構造リスト150
に保持する。フアイル・アクセス構造リスト1
50の各要素は、フアイルをオープンしたノー
ド152、そのノードでの読取りのためのオー
プンの数153、およびノードでの書込みのた
めのオープンの数154を含んでいる。 E4 ロツキング UNIXフアイル・ロツキング UNIXオペレーテイング・システムでは、処
理がフアイル内のバイト範囲をロツクして、他
の処理がその範囲にアクセスできないようにす
ることができる。ロツクはフアイルのバイト範
囲に適用される。フアイルの全域に渡るロツク
はフアイルをロツクし、フアイル・ロツクと呼
ぶことができる。任意のバイト範囲に渡るロツ
クは、レコード・ロツクと呼ばれることがあ
る。ただし、この開示では、レコード・ロツク
およびフアイル・ロツクを単にロツクと呼ぶこ
とにする。 このシステムでは2種類のロツクがサポート
される。すなわち、書込みロツクおよび読取り
ロツクである。書込みロツクは排他的ロツクで
ある。フアイルのある範囲が書込みロツクされ
た場合、他のロツクがその範囲に存在すること
はできない。もう一つの種類のロツク、すなわ
ち、読取りロツクは共用ロツクである。オーバ
ーラツプする任意の数の読取りロツクをフアイ
ルのあるセグメントに適用することができる。
既存の読取りロツクは他の読取りロツクを妨げ
ないが、他の書込みロツクを妨げることに留意
されたい。既存の書込みロツクは特定の範囲に
対する他のすべてのロツクを妨げる。書込みロ
ツクは、書込みアクセスでオープンされたフア
イル記述子だけに適用される。 フアイルは強制モードにあるか、または強制
モードにないかのいずれかである。強制モード
にないフアイルに対するロツクは勧告ロツクと
呼ばれる。勧告ロツクはフアイルまたはレコー
ドに対する絶対的保護をもたらさない。しか
し、勧告ロツクは、処理がロツクされたフアイ
ルまたはレコードの読取りまたは書込みを行な
うのを妨げる。勧告ロツクはlockf(2)または
fcntl(2)に対するコールの結果に影響を及ぼす
だけである。lockf(2)またはfcntl(2)を使つて、
勧告ロツクを使わなければらないのは、協働し
て勧告ロツクがアクセスしている共用フアイル
に対するロツクの状況を照会中のプロセスであ
る。勧告ロツクの利点は、それらが読取りまた
は書込み動作中にオペレーテイング・システム
のカーネルから問い合わせる必要がないという
ことである。強制ロツクは、勧告ロツクと同様
に、lockf(2)およびfcntl(2)に対する後続のコー
ルに影響を及ぼす。さらに、read(2)、write
(2)、open(2)、creat(2)、fclear(2)、ftruncate
(2)、およびshmat(2)は、それぞれ、フアイルの
読取りロツクまたは書込みロツクされた部分が
変更されないこと、およびフアイルの書込みロ
ツクされた部分がアクセスされないことを保証
しなければならない。 fcntl(2)システム・コールの異なる3つの
UNIXオペレーテイング・システム・コマンド
がロツキングに関係する。 F−GETLK fcntl(2)の引数によつて記述さ
れるロツクが呼出し側に許可されるのを妨げる
最初の既存のロツクを見つける。 F−SETLK fcntl(2)の引数によつて記述さ
れるロツクを呼出し側に許可する。既存のロツ
クが要求とインターフエースするので、ロツク
を許可できない場合は、この既存のロツクの記
述を戻す。 F−SETLKW fcntl(2)の引数によつて記述
されるロツクを呼出し側に許可する。既存のロ
ツクが要求とインターフエースするので、ロツ
クを許可できない場合は、デツドロツクの有無
を検査し、デツドロツクが生じない場合は、呼
出し側を持たせる。妨害ロツクがクリアされる
度に、カーネルは、再度妨害ロツクの有無を探
索することにより、要求されたロツクを確立し
ようと試みる。プロセスはいつまでも待つこと
ができる。単一ノード上でのフアイル・ロツク
のみに関するデツドロツクが検出されるが、複
数ノード上での複数フアイル・ロツクによるデ
ツドロツクが発生し得る。プロセスは決してデ
ツドロツクにはならないが、交互にセツトされ
る種々のフアイルに対する妨害ロツクのために
ライブ・ロツク(live−lock)になる可能性は
ある。 ロツク・テーブル ロツクはオープン・フアイルと関連するの
で、ロツク情報をオープン・フアイルに関する
情報と一緒にフアイルのiノード構造に保持す
るのが自然である。iノード構造はUNIXオペ
レーテイング・システムでは固定サイズなの
で、iノードにはロツク構造が存在するアドレ
スだけを入れて、ロツク情報は別の構造に記憶
されねばならなかつた。ロツクは、ロツク・テ
ーブルと呼ばれるカーネル・データ構造からの
一組の項目として、連係されたリストに保持さ
れる。 UNIXオペレーテイング・システムは、分散
型フアイル・システムに対するサポートを提供
しなかつた。分散型システムでは、数個のノー
ドが同じフアイルを使用することがあり得る。
あるフアイルに対するロツク・テーブルは常に
単一ノードにある。フアイルが非同期モードに
ある場合、ロツク・テーブルは(活動ノード情
報と共に)、フアイルがオープンされている単
一ノードに保持される。フアイルが読取専用モ
ードまたは全同期モードにある場合、ロツク・
テーブルはサーバに保持される。このアーキテ
クチヤには2つの重要な意味がある。第一に、
プロセスが遠隔手順コール(RPC)を使つて
ロツクをセツトまたはテストしなければならな
いことがある。これらのRPCはフアイルのサ
ーバで実行される。第二に、フアイルの同期モ
ードが変わるとき、フアイルのロツク・テーブ
ルをクライエントからサーバに、またはサーバ
からクライエントに移さなければならないこと
がある。iノード・ロツク・テーブルの項目
は、iノード・フアイルのセグメントに対する
ロツクに対応する。ロツクを表わすには、ロツ
ク・セツト項目が、ロツクされるバイトの範
囲、ロツクの種類(読取りまたは書込み)、ロ
ツクの所有者を識別する情報を含まなければな
らない。 プロセスが項目のロツクを待つているかどう
かを示すフラグをロツク項目に記憶することに
より、カーネル・データ構造の幾つかの探索が
不要になる。このフラグは、ロツク・セツト項
目の実際のインプリメンテーシヨンに含まれる
情報のもう1つの部分である。最後に、ロツ
ク・セツト項目は多分、同じフアイルに属する
項目を互いにリンクするために使用されるポイ
ンタ・フイールドを含んでいる。ロツク・セツ
トの要素を処理するための以下の動作を詳細に
調べることにより、インプリメンテーシヨンの
詳細について考察する。 (1) 特定のiノードと関連するロツク・セツト
中のロツクを繰り返す方法。 (2) あるiノードに対するロツク・セツトにロ
ツクを追加する機能。 (3) あるiノードに対するロツク・セツトから
ロツクを除去する機能。 ロツク・テーブルの項目は、ロツクを、ロツ
クされる最小のバイト範囲とそのロツクに対す
る所有者情報で表わす。ロツクの以下の属性を
戻す動作が必要である。 (1)ロツクされるセグメントの範囲 (2)ロツク
の種類(読取り、書込みまたは一時的) (3)ロ
ツク所有者 所有者があるロツクと関連しているとき問題
が生じる。ロツクの所有者は、所有者のproc
テーブルを指すポインタによつて識別される。
procテーブルとは、システム内の各活動プロ
セスに関する管理情報の集合である。procテ
ーブルに対するデータ構造ソース・コードを、
各フイールドの目的を説明する情報と共に下に
示す。 【表】 【表】 デツドロツクの検出には各ロツクの所有者用
のprocテーブルにアクセスする必要があるの
で、procテーブルはロツク要素の所有者を識
別するための有用な方法である。分散型システ
ムでは、所有者はローカル・プロセスではない
かも知れない。所有者が遠隔プロセスである場
合、所有者情報には、所有者が存在するノード
に対するノードidを含める必要がある。必要と
される情報は以下の通りである。 (1) 所有者のprocテーブルのアドレスを戻す
動作。 (2) 2人の所有者を比較し、これらの所有者が
同じプロセスである場合はTRUEを戻し、
さもない場合はFALSEを戻す動作。 (3) 所有者のノードidを戻す動作。これらの動
作は構造内のフイールド参照を使つて、指示
された動作を実行する。 ロツク待ち スタンドアロン・オペレーテイング・システ
ムでは、ロツクを確立しようと試みるプロセス
は、まず既存のロツクがクリアされるのを待た
なければならないことがある。待つ(休眠す
る)前に、そのプロセスはシステムのすべての
iノードのロツク・セツトを調べて、待つて
も、デツドロツクが生じないことを確かめねば
ならない。待機しているプロセスのprocテー
ブルが、procテーブルのW CHANフイール
ドを使つて、待つているロツク・テーブル項目
を指す。 DFSでは、待つことは容易ではない。ブロ
ツキング・ロツクを待つための2つの方法があ
る。すなわち、(1)ローカル・ロツク・セツト項
目を直接待つ方法と、(2)サーバ・ロツク・セツ
ト項目を間接に待つ方法である。直接待機は上
述のスタンドアロン待機と同じである。直接待
機は、ロツク・テーブル内で局所的に生じるロ
ツクをプロセスが待たねばならないときに使用
される。あるフアイルに対するロツク・テーブ
ルは1つのノードのみに存在することを思い起
こされない。呼出し側プロセスが同じノードに
ない場合、ロツク・テーブルはサーバ内にあ
る。ロツク・テーブルが遠隔ノード(サーバ)
内にあるフアイルのある領域をロツクしようと
試みるプロセスは、ロツクを間接的に待つ。こ
の間接待機は、サーバ内のRPCがトランザク
シヨン・プログラムを呼び出し、ロツクを待つ
ことによつて行なわれる。スタンドアロン
UNIXオペレーテイング・システムでは、ロツ
クが許可されることが可能な場合、または、待
機がデツドロツクを生じる可能性がある場合、
プロセスは決して休眠状態に入らない。分散型
システムでは、ロツク・テーブルと同じノード
に存在しないロツク要求を実行するプロセスは
常に(少なくとも一時的に)休眠状態に入る。
そのプロセスは、RPCが戻るのを待つている
間、そうしなければならない。不必要なネツト
ワーク通信を避けるために、ロツクRPCを待
つプロセスは、RPCトランザクシヨン・プロ
グラムがブロツキング・ロツクを待つているの
で待つのか、それともブロツキング・ロツクが
発見されなかつたサーバでトランザクシヨン・
プログラムが実行を終了していないので待つの
かを知らない。分散型システムでは、デツドロ
ツクは数ノードにわたる可能性がある。したが
つて、スタンドアロン環境と疑似のアーキテク
チヤを使つて、デツドロツクがない場合にのみ
プロセスが待つようにすることは、そのオーバ
ーヘツドおよび検査を行なわねばならないこと
のために、実用的ではない。本発明は、スタン
ドアロン・デツドロツク防止の分散型バージヨ
ンに付随するオーバーヘツドおよび複雑性を伴
わずにそのような能力を提供するための方法で
ある。 デツドロツク 連鎖状のプロセスが実行され、それらのプロ
セスが、既に使用中の資源を求めて競合すると
き、デツドロツクが生じる。たとえば、プロセ
ス2が支配する資源をプロセス1が待ち、プロ
セス3が支配する資源をプロセス2が待ち、以
下同様に、プロセス1が支配する資源を最後の
プロセスが待つ場合である。スタンドアロン
UNIXオペレーテイング・システムは、フアイ
ルおよびレコードのロツキングを伴うデツドロ
ツクが発生するのを防ぐ。従来は、UNIXオペ
レーテイング・システムは分散型システムをサ
ポートせず、そのようなデツドロツクの発生を
防ぐことができなかつた。防止したいデツドロ
ツクを形成する循環連鎖状プロセスは2種類の
リンクによつてリンクされる。すなわち、(1)プ
ロセスproテーブルのプロセスw chanフイー
ルドを介してロツクを指すプロセスと、(2)ロツ
クの所有者フイールドを介してプロセスを指す
ロツクである。これらのリンクをたどることに
より、循環の有無の探索を実行して、デツドロ
ツクが発生するかどうか判定することができ
る。UNIXオペレーテイング・システムは1つ
のこと(単一w chan)を待つことができる
だけであり、ロツクは1つのプロセスのみが所
有するので、連鎖の探索は難しくない。唯一の
厄介な点は間接待機の可能性である。別のノー
ドに送られたRPCからの応答をプロセスが待
つとき、間接待機が生じる。間接待機を処理す
るには、RPCを実行する前にタイマーをセツ
トして、デツドロツクが生じた場合に警報アプ
リケーシヨンが必要とされる。 分散型フアイル・サポート・ロツク制御 UNIXオペレーテイング・システム環境にお
けるフアイル・アクセス・コールは、FLOCK
と呼ばれるデータ構造を使用する。FLOCKの
構造を下に示す。 STRUCT FLOCK{ SHORT L TYPE; SHORT L WHENCE; LONG L START; LONG L LEN; SHORT L PID; SHORT L NID; }; 分散型フアイル・サポート(DFS)を実施
するためのもう1つの重要な構造はフアイル・
アクセス構造である。フアイル・アクセス構造
のソース・コードを、詳細な論理を示すための
若干の説明情報と共に下に示す。 STRUCT FILE ACCESS {/* フアイル・アクセス構造ポインタ */ STRUCT FILE ACCESS *FA
NEXT;; /* フアイル・アクセス構造フラツグ */ SHORT FA FLAG; /* フアイル・アクセス構造全ユーザ */ SHORT FA COUNT;/* フアイル・アクセス構造読取り/専用カウント */ SHORT FA OROCNT;/* フアイル・アクセス構造読取り/書込みカウン
*/ SHORT FA ORWCNT;/* フアイル・アクセス構造実行プロセス* / SHORT FA TXTCNT;/* フアイル・アクセス構造ノード構造ポインタ */ STRUCT NODE *FA NID;/* フアイル・アクセス構造ノードID */ INT FA NID;/* フアイル・アクセス構造S INODEポインタ */ STRUCT INODE *FA SIP;}; DFSは分散型環境でフアイルのロツキング
を調整するためのロツク制御サブルーチンを提
供する。詳細な論値を示すため、サブルーチン
のインターフエース・ソース・コードを下に示
す。 STRUCT FLOCK{ SHORT L TYPE; SHORT L WHENCE; LONG L START; LONG L LEN; SHORT L PID; SHORT L NID; }; DFS LOCK CONTROL(FH,LOCK
INFO,CMD, FAS FLAG) FILE HANDLE T FH; STRUCT FLOCK*LOCK INFO; SHORT CMD,FAS FLAG; RETURN(ERRNO,MODE,START,
LENGTH,NID, PID) DFSロツク制御サブルーチンは、パラメー
タFH(フアイル・ハンドル)、LOCK INFO
(FLOCK構造のポインタ(アドレス))、CMD
(実行すべきプロセス)およびFAS FLAG
(フアイル・アクセス構造フラツグ))を有す
る。フアイル・ハンドルは、コマンドが実行さ
れる対象となるフアイルを一義的に識別するた
めに必要である。LOCK INFOは、FLOCK
構造と、その中に含まれるフアイルに関するシ
ステム情報を識別するために必要である。
CMDは、すべてのロツクが除去されるまで遠
隔プロセスを待たせ、それから指定された
CMDを処理するようにセツトされる。CMSフ
イールドは、アンロツク、テスト、セツトまた
はテスト/セツト・コマンドを実行するように
セツトすることができる。FLOCK構造の1
lenおよび1 startフイールドは、コマンドが
適用されるロツク範囲を指定するのに使われ
る。FAS−FLAGは、FULLSYNC同期モード
にあるかどうか知るため、フアイル・アクセス
構造ロツク内の同期モードを調べよとサーバに
命令するようにセツトされる。フアイルが
FULLSYNC同期モードにある場合、サーバは
コマンドを実行する。しかし、そうでない場合
は、エラーが戻される。フアイル・アクセル構
造フラツグがセツトされていない場合は、フア
イルは、実行を始める前に、フアイル・アクセ
ス構造ロツクの獲得および検査を行なわない。
この検査によつて処理の前に照会が可能とな
り、デツドロツクの可能性が回避される。 フアイル・ロツキング構造 LOCKFサブルーチンは、書込み排他特権の
ためにフアイルをロツクまたはアンロツクする
のにアプリケーシヨンが使用する主なインター
フエースである。その使用法を例示するため、
このサブルーチンのインターフエース・ソー
ス・コードを下に示す。 #include<SYS/LOCKF.H> itn lockf(fildes,function,size); int fildes,function; long size; ロツクは、UNIXオペレーテイング・システ
ム下CNTL(2)によりLOCKFと同様の方法でセ
ツトまたは解除することができる。アプリケー
シヨンとLOCKFサブルーチンおよびFCNTL
サブルーチンの間の外部インターフエースは、
UNIXオペレーシヨン・システムと本発明で違
いはない。ただ、分散型環境をサポートするた
めに間隔が修正されている。 内部の詳細 遠隔フアイルがロツクされる場合は、UNIX
オペレーテイング・システムのLOCKFおよび
FCNTLシステム・コールが中断され、
RPCDFS LOCK CONTROLが実行される。
サーバ・ノードは遠隔プロセス・コールを受け
取り、ロツク要求を実行する。要求は単一レコ
ード、一組のレコードまたはフアイル全体のロ
ツクを伴うことがある。次に、サーバは、クラ
イエント代理iノードがDFS LOCK
CONTROLのRPCからの応答を待つ間に、信
号を送ることにより、クライエントが目を覚す
ように命令する。クライエントはロツクの受取
りを確認し、肯定応答を遠隔サーバに送る。サ
ーバは、クライエント代理iノードから肯定応
答を受け取つた後、ロツク・テーブルを更新す
る。サーバがDFS LOCK CONTROLの肯
定応答の受取りを確認しない場合、DFS
LOCK CONTROLはこのロツクをロツク・
テーブルから除去する。 フアイル・アクセス構造ロツク フアイル・アクセス構造ロツク、fasロツク
は、分散型フアイル・システム(DFS)でオ
ープン・フアイルに対するiノードおよび代理
iノードの使用を同期するために使われる。こ
の同期はデツドロツク状況を回避するために実
行される。デツドロツク状態は、iノードおよ
び代理iノードがロツクされた場合に発生し得
る。 スタンドアロンAIXオペレーテイング・シ
ステムは、フアイルFに対するアクセスを必要
とするシステム・コールの実行は、そのフアイ
ルに対するシステム・コールの全実行時間中に
Fに対するiノードをロツクすることにより直
列化される。DFSでは、フアイルFが遠隔ノ
ードCでオープンされている場合は、フアイル
Fを表わす代理iノードがノードCで作成され
る。したがつて、2つの資源が関係する。すな
わち、フアイルが存在するサーバ・ノードにお
ける特定のフアイルに対するiノードと、フア
イルがオープンされているクライエント・ノー
ドにおける代理iノードである。クライエント
Cで実行されるシステム・コールを直列化する
ため、各コールが実行時間中フアイルFに対す
る代理iノードがロツクされる。クライエン
ト・キヤツシユで使用可能でないデータ・ブロ
ツクを読み取るためにサーバに対するアクセス
が必要な場合、フアイルFに対するiノードも
ロツクされる。 サーバにあるフアイルFに対するiノードと
クライエントにあるフアイルFに対する代理i
ノードを各システム・コールの全実行時間中ロ
ツクすると、2つの資源を獲得する順序が常に
同じ順序で実施されない場合、デツドロツク状
況をもたらす可能性がある。一般には、代理i
ノードが最初にロツクされ、次に遠隔手順コー
ル(RPC)を介してサーバがアクセスされ、
iノードがロツクされる。しかし、上記の順序
には幾つかの例外がある。特定の条件の下で、
サーバはiノードをロツクし、次に、代理iノ
ードのロツクを必要とするクライエントに
RPCを送ることができる。 第18図に示すように、2つの動作が現在01
および02を実行している以下の状況のいずれか
一方でデツトロツクが発生する可能性がある
(01は読取り動作、02はオープン動作である)。 (a) 01がクライエント・ノードで実行されてい
る。01は代理iノードをロツクし、読取り動
作のためサーバでiノードをロツクしようと
する。 (b) 02がサーバで実行されている。02はiノー
ドをロツクし、フアイルをオープンするため
にクライエント・ノードに対してRPCを開
始する。クライエント・ノードでのRPC要
求は代理iノードを待つて、それをロツクし
てから実行される。 両方の動作が実行されており、かつ2つの同
じ資源を必要とし、それぞれ1つの資源を獲得
し、かつ他方のロツクされた資源を持つている
ので、デツドロツク状態が存在する。原因を調
べるに当たつては、サーバからクライエントに
対するRPCの実行中にデツドロツクが発生す
ることに留意されたい。サーバ上のiノードが
まずロツクされ、代理iノードをロツクしよう
とする試みがなされる。これは、代理iノード
がまずロツクされ、次にiノードをロツクする
ためにRPCを送る大部分の場合とは逆である。 上記問題の発生を防ぐため、サーボは、代理
iノードをロツクするためのRPCをクライエ
ントに出す前に、iノードをアンロツクするこ
とができる。オープン動作の実行中にiノード
をアンロツクすると、上記の問題が解決され
る。しかし、そうすると複数のオープン動作ま
たはクローズ動作あるいはその両方が同時にサ
ーバで行なわれる可能性があるので、オープ
ン・フアイルのための同期モード変更の管理が
複雑になる。第17図に示すようなもう1つの
問題が生じる可能性もある。第17図では、1
0にあるフアイルFが、20にあるクライエン
ト・ノードC−1内でのただ1つの処理によつ
て、非同期モードでオープンされている。2つ
の動作が進行中である。すなわち、20にある
C−1からのクローズ動作と、40にある別の
クライエントC−2からの、10でと同じフア
イルFに対する60でのオープン動作である。
20にあるC−1からのクローズ動作は代理i
ノード(使用カウント1を有する)をロツク
し、50での「dfsクローズ」RPCを30にあ
るサーバに送る。40にあるC−2からのオー
プン動作は70での「dfsオープン」を30に
あるサーバに送る。このRPCはサーバに到着
し、20にあるC−1からの50での「dfsク
ローズ」RPCの前に実行される。フアイルF
に対する同期モードは非同期なので、サーバは
iノードをアンロツクし、80での「dfs同期
モード変更」RPCを20にあるC−1に送り、
10にあるフアイルFが全同期モードに変更さ
れることを要求する。このRPCが20にある
C−1に到着し、代理iノードがアンロツクさ
れるのを持つ。次に、50での「dfsクローズ」
RPCがサーバに到着する。10にあるフアイ
ルFに対するiノードはサーバではロツクされ
ないので、クローズ動作がサーボで実行され、
90での「dfsクローズ肯定応答」RPCが20
にあるC−1に送られる。90での「dfsクロ
ーズ肯定応答」RPCが20にあるC−1に到
着すると、代理iノードに関する使用カウント
が減分され、使用カウントの値が0になつたの
で、代理iノードは100で解放される。これ
により、同期モード変更を20にあるC−1に
適用するための代理iノードは残らない。 この問題に対する解決策は、それを持つ前に
同期モード変更手順に代理iノードの使用カウ
ントを増分させることである。しかし、この時
点では、フアイルFはC−1でオープンされて
いず、その同期モードは全同期ではないので、
この手法はフアイル管理システムにとつて一層
の管理上の問題をもたらす。それよりも望まし
い手法は新しいロツク、すなわちフアイルに対
するアクセス・リストをアクセスまたは変更す
る動作を直列化するためのフアイル・アクセス
構造ロツク(fasロツク)を導入することであ
る。fasロツクを使用することにより、iノー
ドは重要な資源ではなくなる。2つの重要な資
源はクライエント・ノードにある代理iノード
とサーバにあるfasロツクである。デツドロツ
クを防ぐには、fasロツクの保持を必要とする
クライエント・ノードで実行中の動作が、
RPCがサーバに送られる前に、代理iノード
をアンロツクしなければならない。 サーバからクライエントに対してRPCを発
生する可能性がある動作は、サーバでの実行を
開始する前に、fasロツクを獲得しなければな
らない。UNIXオペレーテイング・システムま
たはAIXオペレーテイング・システム環境に
おける状況の例は以下の通りである。 遠隔手順コール(RPC): *DFS OPEN*DFS CREATE *DFS CLOSE*DFS GET ATTR *DFS SET ATTR*DFS LOOKUP *DFS CHNG SYNC MODE サーバ処理からのシステム・コール: *OPEN *CLOSE *CREAT *STAT *FULLSTAT *CHMOD *EXIT 上記UNIXオペレーテイング・システムおよ
びAIXオペレーテイング・システムの動作は
以下のvn動作に対応する。 *vn open vn create *vn close vn getattr *vn setattr vn lookup 一 例 vn動作実行の一例を以下に考察し、第19
図に示す。動作(オープン)はクライエイト・
ノードで実行され、何らかのローカル処理が必
要な場合は、通常通り代理iノードをロツクす
る。上記に列挙したRPCの1つ(dfsオープン)
がサーバに送られた場合、RPCが送られる前
に、代理iノードがアンロツクされる。サーボ
では、RPC要求はfasロツクをロツクするか、
あるいはfasロツクが使用中の場合はそれを待
ち、次に、フアイルFに対するiノードをロツ
クする。RPC要求がローカル・サーバ動作で
ある場合は、実行中のプロセスはfasロツクを
獲得し、次にiノードをロツクする。DFS
CHNG SYNC MODEまたはDFS GET
ATTR RPCがサーバからクライエントに送ら
れる場合、RPCが送られる前に、iノードが
アンロツクされる。したがつて、サーバは、
RPCが送られた後で、読取りおよび書込み動
作を受諾することができる。すべてのクライエ
ントからの応答メツセージを受け取ると、サー
バはiノードをロツクして、残りのローカル・
プロセスを終了する。動作がクライエント・ノ
ードで開始された場合は、そのクライエントに
肯定応答が送られる。iノードが次にアンロツ
クされ、fasロツクか解除される。 fasロツクは、iノードの使用を同期し、デ
ツドロツク動作を回避する手段を提供する。
fasロツクは、フアイルをオープンしているノ
ードに関する情報を含むフアイル・アクセス構
造リストに対するアクセスを同期する。fasロ
ツクは、プロセスがフアイルをオープンまたは
クローズするとき、またはフアイル・アクセス
構造リストが照会されているとき、ロツクされ
る。fasロツクは、フアイルが全同期モードに
あるときは、書込み動作中もロツクされる。 iノード・ロツクはサーバにあるフアイルの
データに対するアクセスを同期する。iノー
ド・ロツクは、サーバにあるフアイルに対する
読取りまたは書込み動作中ロツクされる。遠隔
手順コールが代理iノード・ロツクに対するロ
ツクを必要とする場合、サーバが遠隔手順コー
ルをクライエントに送る前に、iノード・ロツ
クがアンロツクされる。 代理iノード・ロツクはクライエント・プロ
セス内のフアイル・アクセスを同期する。クラ
イエントでの動作がフアイルにアクセスしてい
る場合、代理iノードはロツクされる。クライ
エントでの動作がfasロツクをロツクする場合
は、代理iノードがアンロツクされる。代理i
ノードはまた、遠隔手順コールがクライエント
からサーバに送られる前にアンロツクされる。 fasロツクおよびiノード・ロツクの両方が
ロツクされている場合は、iノード・ロツク
は、サーバがクライエントに対して遠隔手順コ
ールを発生する前に、アンロツクされる。この
ため、fasロツクおよび代理iノード・ロツク
がロツクできるようになる。これらのロツク
は、ロツクされたのと逆の順序でアンロツクさ
れる。 特定のオペレーテイング・システム環境にお
ける好ましい実施例に関して本発明を説明して
きたが、当業者なら気付くように、頭記の特許
請求の範囲の精神および範囲内で、変更を加え
ることにより、他の様々なオペレーテイング・
システムでも本発明を実施することができる。 F 発明の効果 以上説明したように本発明によればフアイルに
対するアクセスのリストの変更をロツクする構成
を採用しているので分散型フアイル・アクセスに
おけるロツドロツクを解消することができる。
【図面の簡単な説明】
第1図は、本発明による分散型データ処理シス
テムを示す、第1図と同様の構成図である。第2
図は、本発明をその中で機能するように設計した
通常の分散データ処理システムの構成図である。
第3図は、通常のスタンドアロン・プロセツサ・
システムの構成図である。第4図は、プロセツサ
上で走行するアプリケーシヨン・プログラムが読
取りシステム・コールを行なうとき、オペレーテ
イング・システムが実行する各ステツプの流れ図
である。第5図は、本発明をサポートするオペレ
ーテイング・システムによつて実行される、ロー
カル・ノードでフアイル操作へのパスをたどるた
めのシナリオを示す、データ構造の構成図であ
る。第6図および第7図は、オペレーテイング・
システムによつて実行される、ローカル・ノード
でのフアイル・マウント操作のシナリオの前後条
件を示す、データ構造の構成図である。第8図
は、第7図に示す分散型フアイル・システム用の
データ構造の構成図である。第9A図ないし第9
F図は、第8図に示すデータ構造の構成要素の構
成図である。第10図、第11図および第12図
は、オペレーテイング・システムが実行する、分
散型システムのローカル・ノードおよび遠隔ノー
ドでのフアイル・マウント動作のための、および
フアイルに至るパスをたどるためのシナリオを示
す、データ構造の構成図である。第13図は、第
7図に示す分散型データ処理システムの一部分を
さらに詳細に示す構成図である。第14図は、本
発明をサポートするオペレーテイング・システム
が使用する種々の同期モードを示す状態図であ
る。第15図は、同期モード動作を示す第13図
と同様な構成図である。第16図は、分散型フア
イル・システムの同期モードの一例を示す、第1
4図の状態図と同様な状態図である。第17図
は、2つのクライエント・ノードによるフアイル
に対するアクセスの制御の流れを示すダイヤフラ
ムである。第18図は、2つの動作が現在実行さ
れているときのデツドロツクを示すダイヤグラム
である。第19図は、クライエントからのオープ
ン要求の実行ステツプを示すダイヤグラムであ
る。 1……分散型データ処理システム、2A,2
B,2C……デイスク、3……ネツトワーク、4
A,4B,4C……アプリケーシヨン・プログラ
ム、5A,5B,5C……フアイル、10A,1
0B,10C……処理装置、11A,11B,1
1C……オペレーテイング・システム、12A,
12B,12C……サーバ・キヤツシユ。

Claims (1)

  1. 【特許請求の範囲】 1 サーバー・データ処理装置にフアイル・デー
    タを常駐させ、複数のクライエント・データをア
    クセスできるようにした分散型データ処理システ
    ムにおいて、 現にどのフアイルがオープンされているか、及
    びそれらのオープンのモード(読取り専用かまた
    は読取り/書込みか)に関するリストへのアクセ
    スと同期して該リストをロツクする第1のロツク
    手段と、 上記サーバー・データ処理装置上の上記リスト
    の先頭を指すポインタを含むフアイル・データへ
    のアクセスと同期して該フアイル・データをロツ
    クする第2のロツク手段と、 上記複数のクライエント・データ処理装置のう
    ちの1つにおいて、上記フアイル・データを識別
    するための情報を含むフアイルへのアクセスと同
    期して該フアイルをロツクする第3のロツク手段
    とを有することを特徴とする分散型データ処理シ
    ステム。
JP62315454A 1987-02-13 1987-12-15 分散型データ処理システム Granted JPS63201864A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US1490087A 1987-02-13 1987-02-13
US014900 1987-02-13

Publications (2)

Publication Number Publication Date
JPS63201864A JPS63201864A (ja) 1988-08-19
JPH058455B2 true JPH058455B2 (ja) 1993-02-02

Family

ID=21768447

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62315454A Granted JPS63201864A (ja) 1987-02-13 1987-12-15 分散型データ処理システム

Country Status (4)

Country Link
EP (1) EP0278313B1 (ja)
JP (1) JPS63201864A (ja)
BR (1) BR8800610A (ja)
DE (1) DE3850978T2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2748525B2 (ja) * 1989-04-05 1998-05-06 日本電気株式会社 データ引き渡し装置
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
DE69029760T2 (de) * 1989-05-15 1997-07-17 Ibm Dateiverriegelung in einem verteilten Dateisystem
DE69032649T2 (de) * 1989-08-01 1999-05-06 Silicon Graphics Inc., Mountain View, Calif. 94039 Dateiveränderungsmonitor für rechner-, betriebs- und dateiverwaltungssysteme
DE10016337B4 (de) * 2000-03-31 2004-05-27 Dis Informationssysteme Gmbh Verfahren und Vorrichtung zur Erzeugung und Verarbeitung von Daten durch einen aktiven Strukturbaum
US7213103B2 (en) 2004-04-22 2007-05-01 Apple Inc. Accessing data storage systems without waiting for read errors
US7523146B2 (en) 2005-06-21 2009-04-21 Apple Inc. Apparatus and method for peer-to-peer N-way synchronization in a decentralized environment
US8495015B2 (en) 2005-06-21 2013-07-23 Apple Inc. Peer-to-peer syncing in a decentralized environment
US7797670B2 (en) 2006-04-14 2010-09-14 Apple Inc. Mirrored file system
US7860826B2 (en) 2006-08-04 2010-12-28 Apple Inc. Method and system for using global equivalency sets to identify data during peer-to-peer synchronization
US7657769B2 (en) 2007-01-08 2010-02-02 Marcy M Scott N-way synchronization of data
US10614039B2 (en) 2017-04-04 2020-04-07 International Business Machines Corporation Testing of lock managers in computing environments
WO2020231392A1 (en) * 2019-05-10 2020-11-19 Futurewei Technologies, Inc. Distributed virtual file system with shared page cache
US11740977B2 (en) * 2020-01-27 2023-08-29 EMC IP Holding Company LLC Efficient deduplication based file movement for load balancing in a scaled-out backup system
CN115292264B (zh) * 2022-07-27 2026-02-17 苏州元脑智能科技有限公司 一种文件的锁操作方法、装置、设备和存储介质

Also Published As

Publication number Publication date
EP0278313A3 (en) 1990-10-31
EP0278313B1 (en) 1994-08-10
JPS63201864A (ja) 1988-08-19
DE3850978T2 (de) 1995-03-09
BR8800610A (pt) 1988-09-27
DE3850978D1 (de) 1994-09-15
EP0278313A2 (en) 1988-08-17

Similar Documents

Publication Publication Date Title
US5175852A (en) Distributed file access structure lock
US4887204A (en) System and method for accessing remote files in a distributed networking environment
JP4738908B2 (ja) ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法
JP4583377B2 (ja) ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報のユニットに対する関係および階層の同期サービスを実現するシステムおよび方法
US5202971A (en) System for file and record locking between nodes in a distributed data processing environment maintaining one copy of each file lock
JP4394643B2 (ja) アイテムベースのストレージプラットフォームにおけるデータモデリングのためのシステムおよび方法
CA2110243C (en) Apparatus and methods for making a portion of a first name space available as a portion of a second name space
US5001628A (en) Single system image uniquely defining an environment for each user in a data processing system
US7401104B2 (en) Systems and methods for synchronizing computer systems through an intermediary file system share or device
EP0278312B1 (en) Distributed file and record locking
JP4583376B2 (ja) ハードウェア/ソフトウェアインタフェースシステムにより管理可能な情報のユニットに対する同期処理サービスを実現するシステムおよび方法
Purdy et al. Integrating an object server with other worlds
JP2007521533A (ja) アプリケーションプログラムをアイテムベースのストレージプラットフォームとインターフェースするためのシステムおよび方法
PL176975B1 (pl) Sposób skutecznego buforowania zbiorów w systemie zbiorów rozproszonych
JPH058455B2 (ja)
JP4583375B2 (ja) 同期スキーマの実装のためのシステム
JP4580390B2 (ja) ハードウェア/ソフトウェアインターフェイスシステムによって管理可能な情報単位の拡張および継承のためのシステムおよび方法
JP4394644B2 (ja) データの編成、検索、および共有のためのストレージプラットフォーム
Borghoff Catalogue of distributed file/operating systems
Jelić et al. Implementation of Data Management Service Overlay in Distributed Cloud
JP4923140B2 (ja) データベース並行編集方式
bin Uzayr et al. Knex and bookshelf
KR101109390B1 (ko) 하드웨어/소프트웨어 인터페이스 시스템에 의해 관리가능한 정보의 단위들에 대한 동기화 서비스를 제공하는시스템 및 방법
JPH0668733B2 (ja) データ処理システム及び方法
JP5543901B2 (ja) データベース並行編集方式