JPH11506552A - pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システムのファイルをアクセスする方法 - Google Patents

pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システムのファイルをアクセスする方法

Info

Publication number
JPH11506552A
JPH11506552A JP8522964A JP52296496A JPH11506552A JP H11506552 A JPH11506552 A JP H11506552A JP 8522964 A JP8522964 A JP 8522964A JP 52296496 A JP52296496 A JP 52296496A JP H11506552 A JPH11506552 A JP H11506552A
Authority
JP
Japan
Prior art keywords
fifo
pipe
control block
open
server
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.)
Ceased
Application number
JP8522964A
Other languages
English (en)
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.)
Tandem Computers Inc
Original Assignee
Tandem Computers Inc
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 Tandem Computers Inc filed Critical Tandem Computers Inc
Publication of JPH11506552A publication Critical patent/JPH11506552A/ja
Ceased legal-status Critical Current

Links

Classifications

    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00—Arrangements for program control, e.g. control units
    • G06F9/06—Arrangements 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/46—Multiprogramming arrangements
    • G06F9/54—Interprogram communication
    • G06F9/544—Buffers; Shared memory; Pipes
    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; COUNTING
    • G06F—ELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10—File systems; File servers

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

Abstract

(57)【要約】 pipes及びfifosを含んでいる、Posixファイル・システムをインプリメントする緩結合されたマルチプロセッサ。パイプ・サーバ(214)及びパイプ・ライブラリは、一緒に、Posixによって要求された完全なfifoセマンティクスをインプリメントしかつこれらのケイパビリティをPosixインターフェイスを用いているあらゆるプロセスに提供する。

Description

【発明の詳細な説明】 pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システム のファイルをアクセスする方法発明の分野 本発明は、プロセス間通信(IPC)に関する。以下に説明する、ある一定の プロセス間オペレーションの理解は、本発明を理解するために必要である。 発明の背景 ティストによってのみ最初は好まれたけれども、コンピュータ・サイエンスの学 生及び他の非常に技術的に熟練したコンピュータ・ユーザは、商用プログラミン りかつそれらと一緒に彼らの開発した選好をキャリーするときに大きく成長して 製造者の義務である。 イプ)とfifos(ファイフォ)である。pipesとfifosは、協同プ ロセスが互いの識別を知らないで互いに通信するために用いうるデータのメモリ は、プログラムの動的、ラン−タイム実施例である。プロセスがメモリにロード されかつ実行されると同時に、プログラムは、ディスクまたはテープのような記 ーティング・システムである:多くのプロセスは、本質的に同時に実行すること ができる。)pipesとfifosの両方は、通常のファイル・システム呼出 しを介してアクセスされるファイル・システム・オブジェクトである。pipe sとfifosは、そのデータがトランジエントである:一度データがpipe とfifoから読み出されると、そのデータは、再び読み取ることができないと いう点で正規のファイル・システムとは異なる。 pipesとfifosの間の重要な違いは、fifosは、通常のファイル ・システム・ファイル・ファイル・ネームを有するがpipesは、有さないと いうことである。その結果、fifosに対してファイル・システム・ファイル ・ネームを必要とする多くのオペレーションは、fifosに作用するがpip esに作用しない。 よって別のプロセスを生成することができる。fork()システム呼出しの結 果は、それがそれ自体に固有なプロセス識別番号を有するinter alia 以外の、古いプロセスのコピーである新しいプロセスの生成である。それ自体の コピーを生成するプロセスの手順は、“フォーキング(forking)”と呼ばれる。 フォーキングでは、古いプロセスは、“ペアレント(親)”と呼ばれかつ新しい プロセスは、“チャイルド(子)”と呼ばれる。勿論、ペアレントは、多くのチ ルドレンを有することができるが、子は、一つの親だけを有する。 pipeは、pipe()システム呼出しを用いて生成されかつオープンされ る。プロセスにおいてオープンされたpipesは、フォーキングによりチャイ ルドプロセス(child processes)に伝搬される。一つ以上のフォークの後、pi pe()を呼出したプロセスの派生の全て、並びにプロセスそれ自体は、pip eを用いて通信することができる。 fifoは、mkfifo()(‘make fifo’と発音する)システム呼出し を用いて生成される。このシステム・エントリ・ポイントへの呼出しは、ファイ ル・システムにおいてfifoに対するエントリを生成する。fifoの生成後 、十分な許可(sufficient permission)を有するあらゆるプロセスがファイルを オープン(即ち、open())しうる。その結果、共通の祖先を共有しないプ ロセスは、fifoを用いて通信することができる。 ング・システムであった:最初、ディジタル・イクイップメント・コーポレーシ ョンのPDP−11、後に、メインフレーム、そして更に後でマイクロコンピュ ータにおいて人気急騰なマイクロプロセッサ。今日でさえも、ほんの一握りの 従来技術のインプリメンテーションでは、pipesとfifosは、同じc puで走っている二つのプロセス間でのみ確立することができた。例えば、カリ フォルニア州マウンテン・ビューのサン・マイクロシステムからのネットワーク ・ファイル・システム(Network File System(NFS)) は、同じマシンにおいてのみ他のプロセスと通信するプロセスを許容する。 分散型pipes及びfifosのインプリメンテーションは、ユーザの期待 以下を実行する高い機会にスタンドする(stand)。 更にまた、分散型pipes及びfifosのインプリメンテーションは、エ ラー回復をかなり複雑にする。発明の目的および概要 ションで見出されるpipes及びfifosのを透過的に支持するマルチプロ セッサのUNIXライク・オペレーティング・システムである。 本発明のこれら及び他の目的は、以下の開示を読むことにより当業者に容易に 明らかであろう。 従って、以下に、別のプロセスに知らせることが所望するあらゆるプロセスは 、制御プロセッサによって保守されたプロセッサ間ロック(lock)に対するアービ ト ティング・システムのマルチプロセッサ・インプリメンテーションを記述する。 所望プロセッサがプロセッサ間ロックを獲得することに成功したならば、次い でプロセッサは、信号を−−所定のシーケンスで−−各プロセッサに知らせる。 所望プロセッサは、プロセッサ間ロックを次に解放する。 所望プロセッサがプロセッサ間ロックを獲得するのに失敗したならば、所望プ ロセッサは、再びアービトレーションにエンターする前に遅延する。一般的に、 所望プロセッサは、それがアービトレーションに再エンターすべく待っている間 にプロセッサ間ロックを必要としないようなそのようなプロセスを走らせる。 信号が送付される各プロセッサは、もしあれば、そのプロセッサの適切なプロ セスへ信号を送付する。 各受信プロセッサは、一度それが入力信号を受け取ったならば、他のプロセッ サとは非同期で動作する。各受信プロセッサのプリ−またはポスト−信号作用は 、他のプロセッサの作用であり必要がなくかつそれらに協調されない。 プロセッサ間ロックを獲得していない信号プロセッサの故障では、特定の分散 型データ構造の一貫性を保証するために何の回復も必要ない。プロセッサ間ロッ クを獲得している信号プロセッサの故障では、制御プロセッサが受信プロセッサ の全てに信号を知らせる機能を支配する。 制御プロセッサの故障では、生存プロセッサは、どの生存プロセッサが制御プ ロセッサを相続するかを決定すべく所定の手順に従う。図面の簡単な説明 図1は、本発明のマルチプロセッサ・システムがfifoをオープンするため にプロセスによる呼出しに応じて引き受ける一連の事象の概略表現である。 図2は、本発明によるpipeサーバ内及びプロセス内のソフトウェアの層を 示す。 図3は、本発明のfifoファイル・システムにおけるvnodesを概略的 に示す。 図4は、特定状態におけるfifoデータ構造の表現である。 図7は、fifoのオープン要求に対する状態トランザクション図である。 図8は、fifoの読取り要求に対する状態トランザクション図である。 図9は、fifoの書き込み要求に対する状態トランザクション図である。実施例 この特許出願の出願人によって供給されるOSSファイル・システム(OSS File System)は、ポータブル・オペレーティング・システム・イ ンターフェイス・パートI(Portable Operating Syst em Interface,Part I (ここで参考文献として採り入れら れる“Posix,”International Standard ISO/IEC 9945-1: 1990; IEEE Std 1003 .1-1990))において特定されたようなPosixファイル・システムをインプ リメントする。OSS File Systemは、この特許出願の出願人の製 品のコンピュータ・システム・アーキテクチャの緩結合型かつ真の分散型アーキ テクチャを完全に利用すべく設計されている。従って、OSS File Sy stemは、分散型pipes及びfifosの概念を支持する。 この特許出願の出願人から入手可能な総括ExpandネットワークのPos ixファイル・システム・ディレクトリに登録されたfifoの単一の例が存在 する。その結果、ネットワークの一つのノードにおけるプロセスは、別のプロセ スがfifoに書き込んだデータを読み取る。換言すると、Expandネット ワークにわたり互いに通信することを望むPosixプロセスは、fifoを使 用しうる。 本発明は、プロセス自体が異なるcpusで走ることができるけれども、単一 ノードで走っているPosixプロセスに対してだけpipesを支持する。総括設計 本発明のパイプ・サーバ及びパイプ・ライブラリは、Posixプロセスに対 してPosix標準によって要求される完全なfifoセマンティクスを一緒に インプリメントする。本発明は、Posixインターフェイスを用いるあらゆる プロセスへこれらのfifoケイパビリティを供給する。 パイプ・サーバは、本発明を実施しているマルチプロセッサ・システムの各c puで走行するのが好ましいシステムプロセスである。パイプ・サーバは、局所 的に配置されたpipes及びfifosに対して、即ち、そのメモリ常駐、先 入れ先出しデータ・キューが興味のあるプロセス(ここでは、パイプ・サーバ) と同じcpuに配置されるpipes及びfifosに対して制御データ構造を 保守する。プロセッサ間メッセージ・インターフェイスを用いて、パイプ・サー バは、パイプ・サーバのcpuに対してローカル(局所)であるpipes及び fifosへのアクセスを望んでいる遠隔プロセスに対してI/Oサービスを供 給する。(遠隔プロセスは、興味のあるプロセスが走行している以外のcpuで 走行するプロセスである。ここでは再び興味のあるプロセスは、パイプ・サーバ である。) 本発明の分散型pipes及びfifosを潜在的にアクセスするあらゆるプ ロセス及び全てのパイプ・サーバは、パイプ・ライブラリを採り入れる。プロセ スが、プロセスのcpuに対してローカルでないpipeまたはfifoを−− Posix特定方法で−−アクセスすることを求めるならば、プロセスのパイプ ・ライブラリ・コードは、プロセッサ間メッセージ・インターフェイスの伝送に 対して対応メッセージに要求Posix機能を変換する。メッセージは、そのc puに対してpipeまたはfifoがローカルであるパイプ・サーバへ送られ る。パイプ・ライブラリ・コードのプロセッサ間メッセージ・インターフェイス を用いて、このパイプ・サーバは、遠隔プロセスに対する要求I/Oサービスを 供給する。 しかしながら、プロセスが要求しているプロセスのcpuに対してローカルな pipeまたはfifoへのPosixアクセスを要求するならば、このパイプ ・ライブラリは、ユーザプロセスのコンテキストにおける完全なPosix要求 を実行する。同様に、パイプ・サーバは、ローカルpipeまたはfifoに対 してPosixサービスを要求しているメッセージを受け取るパイプ・サーバは 、パイプ・ライブラリを用いて、それ自体のコンテキストにおいるその要求を実 行する。パイプ・ライブラリ・コードは、ローカルpipe及びfifoデータ 制御構造を保守し、かつ本発明のpipes及びfifosを潜在的にアクセス しているパイプ・サーバ及びあらゆるローカルプロセスは、それぞれパイプ・ラ イブラリを包含する。 本発明の更なるコンポーネントは、ネーム・サーバである。ネーム・サーバは 、fifosに対するネーム分解(name resolution)を行う。ネーム・サーバは 、また、サーバがパスネーム分解(pathname resolution)を実行するときにfi foの全ての必要な機密検査も実行する。ネーム・サーバが実行する機密検査は 、他のPosixファイルで実行されたそれらの機密検査とまったく同じである 。 各Posixファイル・システムは、関連ネーム・サーバを有する。Fifo File Systemの編成 図2は、本発明によるユーザプロセス216及びパイプ・サーバ214内のソ フトウェアの層を示す。ほとんどの場合に層は、下の層からのサービスだけを要 求するけれども、各層は、すぐ上またはすぐ下の層からのサービスを要求しうる 。所与の層に対して、次に低い層へのインターフェイスは、ここでは、“より低 いインターフェイス(lower interface)”と称されかつ次に高い層へのインター フェイスは、“より高いインターフェイス(higher interface)”と称される。各 層は、層がその発信者(caller)についてなしうるしかつ発信者が層についてなし うる全ての想定を特定するよく定義されたインターフェイスを供給する。インタ ーフェイスは、一組のデータ型(data types)及び一組の呼出し可能機能(callabl e functions)を含む。パラメータに加えて、インターフェイスの機能は、汎用状 態(global state)、例えば、機能を用いる間中、発信者が所有しなければならな いセマフォ(semaphores)についての規則を含みうる。 そのインターフェイスに加えて、各層は、個人データ構造及び機能を含みうる 。モジュール性を保証するために、これらの個人データ構造及び機能は、層内で のみ用いられうる。 プロセス216のようなプロセスは、一般的にデータベース、ワードプロセッ サまたはファイル・システム・バックアップ・プログラムのようなアプリケーシ ョン・プログラムである。オペレーティング・システム・エントリ・ポイント( 例えば、Posix open())への呼出しは、ユーザが書き込むコード2 00で生ずる。このユーザ・コード200は、システム・エントリ・ポイントに 対してプログラム・フレンドリー・インターフェイスを供給しているライブラリ を介して直接的または間接的にPosixファイル・システム・インターフェイ スを用いてpipes及びfifos(並びに他のファイル型)のオペレーショ ンを実行する。ユーザ・コード200は、本発明の一部ではない。 本発明は、ユーザ・アプリケーション・コード200にファイル・システム・ インターフェイス204を供給する、仮想ファイル・システム(Virtual File System)、VFS、を含む。このインターフェイス204は 、ユーザに一貫性のある、ファイル・システム−独立方法で多くの型のファイル ・システムにおけるファイルをアクセスさせる。好ましい実施例では、それは、 ユーザプロセスによって要求されるケイパビリティを支持しているあらゆるファ イル・システム・インターフェイスであることができるけれども、ファイル・シ ステム・インターフェイス204のより高いインターフェイスは、Posixフ ァイル・システム・インターフェイスである。Posixファイル・システムは 、正規のファイル(即ち、ファイル・システムによって課せられる更なる構造を 有さない、バイトのランダムにアクセス可能なシーケンスであるファイル)、p ipes、fifos及び特別なファイル(即ち、それを通ってプロセスがディ スク・ドライブ、端子、等のようなハードウェア機器をアクセスすることができ るようなファイル)を支持する。 そのタスクを達成するために、VFSは、層206及び208のようなソフト ウェアのより低いレベルのファイル・システム−独立層を呼出す。VFSインタ ーフェイス204は、より低い、ファイル・システム−ディペンデント層が用い る重要なデータ構造を含む。 好ましい実施例では、これらのデータ構造は、Posixファイル・システム ハイアー・インターフェイスの部分ではなくかつユーザ・コードは、これらのデ ータ構造を参照または使用しないであろう。これらのVFSデータ構造は、Po sixオープン・ブロック、vnode及び種々のセマフォ(全て図示省略)を 含む。Posixオープン・ブロックは、オープン・ファイルのオープン状態に ついての情報を包含する。ファイル・システム−ディペンデント層がこのブロッ クを拡張しうると同時に、VFSインターフェイス204それ自体は、ファイル ・システム−ディペンデント拡張を変更しない。 Vnodesは、VFSにおけるpipe(パイプ)またはfifoを表して いるパア−ファイル情報を包含する。Posixオープン・ブロックのように、 vnodeは、VFSが無視するファイル・システム−ディペンデント拡張を包 含することができる。各ファイル・システムは、VFSがファイル・システム− ディペンデント・オペレーションを実行するために用いる完全なvnodeオペ レーション(VOP)機能の組(図示省略)をインプリメントする。好ましい実 施例では、例えば、fifo_ops層206は、pipes及びfifosに 対するVOP機能を定義する。 VFSインターフェイス204は、VFSデータ構造へのアクセスを同期する ために有用なセマフォを含む。 好ましい実施例では、VFSインターフェイス204は、また、vnodes 及びPosixオープン・ブロックで動作するための機能も供給する。例えば、 VFSは、ハッシュ・リスト及びvnodesを効率的に見出すためにハッシュ ・リストを用いる他のものにvnodesを加える機能を供給する。 fifo ops層206は、VFSがfifoまたはpipeに対するファ イル・システム−ディペンデント・オペレーションを要求するために用いるVO Pインターフェイスを支持する。fifo ops機能のそれぞれは、単一pi peまたはfifoで動作する。それゆえに、ほとんどの機能は、入力パラメー タとしてvnode及びPosixオープン・ブロックを受け取る。しかしなが ら、fifo ops機能は、更なるパラメータを取ることができる。例えば、 fifo読み取りは、読み取るための多数のバイト及び読み取られるデータを記 憶するためのロケーションを必要とする。 各機能は、Posix完了コード及び好ましくは基礎を成しているオペレーテ ィング・システム(ここでは、この特許出願の出願人から入手可能なGuard ian)に対する完了コードを戻す。 fifo ops層206の責務(responsibilities)は、pipe制御ブロッ クを操作すべく基礎を成しているpipe制御ブロック・インターフェイス層2 10を要求すること;Posixオープン・ブロック及びvnodes(セマフ ォを有するPosixオープン・ブロックへのアクセスを同期することを含んで いる)に対するfifoファイル・システム拡張を操作すること;pipe制御 ブロック・インターフェイス210が対応pipe制御ブロックが行ってしまっ たこと示した後でfifoファイル識別子を除去すべくファイル・システムに関 連付けられたネーム・サーバを要求すること;pipe制御ブロック・インター フェイス210がこれらの回数が更新されるべきであるということを示すときに アクセス、オープンfifosの状態変化及び変更回数アトリビュートを更新す ることをネーム・サーバに要求すること;かつオープンであるfifoに対する pipe制御ブロックが去ったならばオープン要求をリトライすることをVFS 層204に要求している表示を戻すことを含む。これらの責務は、以下に更に説 明する。 fifo fs層208は、Posixオープン・ブロック及びvnodeデ ータ構造のファイル・システム−ディペンデント部分を設定するために必要な全 ての機能を含む。例えば、fifo fs層210は、Posixオープン・ブ ロック・データ構造のファイル・システム−ディペンデント部分の長さを戻す機 能を含む。 pipe制御ブロック・インターフェイス層210は、pipe制御ブロック (以下に説明する)でのオペレーションに対する要求の概念をインプリメントす る。ローカル要求は、要求しているプロセスのcpuのpipe制御ブロックを アクセスする。pipe制御ブロック・インターフェイス層210は、直接的に パイプ制御ボロックops層212を呼出す。 あるローカル要求の性能は、シーケンスで複数回pipe制御ブロックops 層212の呼出しを必要とする。層212の各呼出しは、ここでは、“pib operation(ピブ・オペレーション)”と称される。“Pib”は、“ pipe制御ブロック”の略語である。例えば、pipe制御ブロックからの読 取りのようなローカル・ブロッキング要求に対して、pipeブロック制御イン ターフェイス層210は、pibオペレーション間をブロックする。これは、以 下に更に説明する。 比較において、遠隔要求は、別のcpuのpipe制御ブロックをアクセスす る。要求プロセスにおけるpipe制御ブロック・インターフェイス層210は 、その遠隔cpu上のパイプ・サーバ214へメッセージにおける要求を送り、 かつそのpipeサーバのpipe制御ブロック・インターフェイス・層210 は、を要求メッセージ読取りかつその遠隔cpuのpipe制御ブロックops 層218を呼出す。 pipe制御ブロック・インターフェイス層210がpipe制御ブロックo ps層212へ供給するケイパビリティは、次のものを含む(これらのケイパビ リティは、pipe制御ブロックops層212をパイプ・サーバ214のコン テキストまたはユーザプロセス216のコンテキストで走らせる。):要求に関 連付けられたデータを読み取ること;要求に応答すること;及び要求を継続する こと。パイプ・サーバでは、データは、メッセージから読み取られかつ応答は、 メッセージとしてパッケージされると同時に、ユーザプロセスでは、データは、 発信者のデータ・バッファから読み取られかつ応答は、発信者のデータ・バッフ ァへ移動される。ブロックされた要求を継続するときに、ブロックされていない 要求は、パイプ・サーバにおける実行可能リストに置かれかつブロックされたユ ーザプロセスは、目覚めさせられる。 pipe制御ブロック・インターフェイス層210は、また、それによりパイ プ・サーバ214がユーザプロセス216によって送られた要求を読み取ること ができる機能も供給する。 pipe制御ブロック・インターフェイス層210がpibオペレーション間 でブロックされている間にプロセスが信号を受け取ったならば、インターフェイ ス層210は、pipe制御ブロックops層212が顕著な要求(outstanding request)を取り消すことを要求する。そのpipe制御ブロック・インターフ ェイス層210が要求に応答すべくパイプ・サーバ214を待機している間にプ ロセス216が信号を受け取ったならば、インターフェイス層210は、パイプ ・サーバ214が顕著な要求を取り消すことを要求する。 pipe制御ブロックops層は、pipe制御ブロック・インターフェイス 層210のより低いインターフェイスを支持するために必要なノン−ブロッキン グ・オペレーションをインプリメントする。オペレーションは、パイプ・サーバ 214にそのブロッキングなしでそれらを実行させるためにノン−ブロキングで ある。pib ops層212における機能は、パラメータとして(以下に説明 する)オペレーション・データ構造を取る。このオペレーション・データ構造は 、要求しているプロセスが実行することを望むpibオペレーションを完全に記 述している。 pipe制御ブロック・インターフェイス層210は、pib ops層21 2における(潜在的ファースト−イン−エ−シーケンス(first-in-a-sequence)) ノン−ブロッキング・オペレーションを呼出すことによって要求を実行すること を開始する。このpibオペレーションの後、pipe制御ブロックops層2 12は、pibオペレーションに対するPosix(及びGuardian)完 了コード、もしあれば、呼出すべき次のオペレーションの表示、及び発信者がそ の次のオペレーションを呼出す前にブロックすべきかどうかの表示を戻す。 上記したように、pipe制御ブロックops層212は、顕著な要求を取り 消すことを支持する。Fifo File Systemにおけるvnodes Posixファイル・システムは、fifosに対するディレクトリ・エント リを支持するがpipesに対しては支持しない。ディスク・ファイルに対する ディレクトリ・エントリのように、fifosディレクトリ・エントリは、fi foが生成されてからその最後のリンクが除去されるまで続く。 例えば、ファイルに対するアクセス許可を設定するPosix chmod ()システム呼出しのような、あるシステム呼出しは、fifoに対するディレ クトリ・エントリに影響を及ぼす。他のシステム呼出しは、fifoが表す資源 に影響を及ぼす。fifoに書き込むためのシステム呼出しは、例えば、fif oのメモリー常駐データ・キューにあるデータを加える。fifoのディレクト リ・エントリを包含するファイル・システム(例えば、PosixまたはNFS ファイル・システム)は、ディレクトリー影響オペレーションを実行しなければ ならない。fifoファイル・システムそれ自体は、fifo資源それ自体に影 響を及ぼすオペレーションを実行しなければならいない。これら二つの型のオペ レーションを支持するために、本発明は、ディレクトリ・エントリ・オペレーシ ョンに対して一つ、fifoでのオペレーションに対して一つの、二つのvno des(以下に説明する)を割り当てる。 図3は、本発明のfifoファイル・システムにおけるvnodesを概略的 に示す。これらのvnodesは、好ましくはブート・アップの間に、cpuに 割り当てられかつ初期化される拡張セグメントである、Posixエクステンデ ィド・セグメント(Posix Extended Segment (PXS) )36において生成される。PXS36は、cpuのユーザプロセス及びシステ ムプロセスによって共有される(vnodesのような)制御ブロックを含む。 好ましくは、PXS306は、固定長ヘッダ及びプールを含みかつシステム・デ ータ空間に記憶された絶対ポインタを介して捜出可能である。PXSプールは、 Posixオープン・ブロック、pipe制御ブロック、pipe表(pipe 制御ブロック(へのポインタ)の表))、及びvnodesを記憶するために用 いられる。 図3は、Posixファイル・システム・ディレクトリ(図示省略)に存在す るfifoを表すために必要な二つのvnodes302、304を示す。fi fo vnode302は、Posix vnode304がディレクトリ−影 響オペレーションを可能にする間にオペレーションがfifo資源に影響を及ぼ すことができるようにする。これらのvnodesは、初めてcpuのプロセス がオープンするかまたはfifoを用いるPXS306で生成される。同じcp uのfifoの後続のオープンまたは使用は、これらの同じvnodesを参照 する。別のcpuのfifoをオープンするためのシステム呼出しは、他のcp uのそれに対してローカルなvnodesのコピーを生成または参照する。cp uの最後のユーザが(close()システム呼出しを用いて)fifoをクロ ーズ(close)する場合には、vnodeデータ構造が破壊される。 VFSは、fifo ops層206において適当な機能を実行することによ ってfifo資源でオペレーションを実行する。例えば、fifoでPosix write()システム呼出しを実行する場合には、VFSは、fifo o ps層206のfifo ops writeオペレーションを呼出す。fif o ops writeオペレーションは、発信者がfifoに書き込むことを 望んでいるデータを移送するための責務を有する。fifo ops writ e及びopen、close、read及びwriteのような他のfifo opsオペレーションは、以下に完全に説明される。 pipeまたはfifoを参照すべきcpuでの第1のプロセスは、vnod es302、304を生成する。cpuでの後続のプロセスは、基準計数(refer ence count)を増分することによって既存のvnodes302、304を用い る。cpuでの最後のプロセスがpipeまたはfifoのvnodesを用い て停止する場合には、そのプロセスは、vnodes302、304を自由にす る。プロセスにそれ自体のcpuでの特定のfifoに対するfifo vno de302を効率的に見出させるために、fifoのfifo識別子からfif oのvnodeにハッシュド・マップする(hased mapping)。ハッシング機能は 、特定のfifoのfifo vnode302が発信者のcpuに存在するこ とを示す。 fifo vnodeデータ構造302は、pipes及びfifosの両方 を表しかつ次の情報を含むのが好ましい:fifoのディレクトリ・エントリに 対するvnode304へのポインタ(この参照は、pipesに対してNUL Lである);fifo vnode302がfifoまたはpipeを表すかを 示しているフラグ;fifoのファイル・システムに対するネーム・サーバのフ ァンドル(phandle);及びfifo vnode302が表すpipeまたはf ifoに対するpipe制御ブロック(以下に説明する)を有するパイプ・サー バのファンドル。ファンドルは、一定である必要はないが、プロセスに対して、 独自な、プロセッサ間識別子である。例えば、サービスに対するバックアッププ ロセスが行われるならば、サービスに対するファンドルは、変更しうる。 一つのパラメータで命名されたファイルについての状態情報を得てかつその情 報を別のパラメータによってポイントされる領域に書込む、Posix sta t()システム呼出しの呼出しを考慮する。このオペレーションは、fifoに 対するディレクトリ・エントリに影響を及ぼす。fifoに対するvnodes 302、304がローカルcpuに既に存在しかつ、従って、stat()シス テム呼出しが新しいものの構築を要求するのではなく既存のvnodes302 、304を参照すると想定する。statオペレーションを実行することにおい て、VFSは、fifo opsデータ構造308を介してfifo ops機 能getattr()を呼出す。fifo opsデータ構造308は、fif o資源に影響を及ぼしているPosix機能を対応しているファイル・システム −ディペンデント機能に関連付ける。 状態情報を戻すことに加えて、fifo ops getattrオペレーシ ョンは、fifoに対するディレクトリ・エントリを有するタイムス属性情報を パーマネント(永続)的に記憶しなければならない。この情報を記憶するために 、fifo ops getattrオペレーションは、通常のvnodeイン ターフェイスを用いてPosix setattrオペレーションを呼出す。P osix opsデータ構造310は、fifoファイル・エントリに影響を及 ぼしているPosix機能を対応しているファイル−システム−ディペンデント 機能に関連付ける。 この設計は、特定のfifoファイルを含むファイル・システムのインプリメ ンテーションからfifoファイル・システムのインプリメンテーションを分離 する。fifoファイル・システムは、特別のファイルのディレクトリ・エント リでのオペレーションを実行するためにどの種類のファイル・システムが特定の fifoファイルを含むかということを知る必要がない。Data Structures アクティブpipes及びfifosは、制御ブロックまたは“pipe制御 ブロッグ”によって表される。パイプを生成しかつオープンするためにさもなけ ればオープンしないfifoをオープンするかまたはpipe()を呼出す各プ ロセスは、pipe制御ブロックの生成をもたらす。各そのようなオープニング プロセスは、pipeのクライアントと呼ばれかつpipe制御ブロック・デー タ構造に対応クライアント・データ構造を有する。他のものの中で、クライアン ト・データ構造は、各クライアントプロセスがpipeまたはfifoを用いて いる方法を記述する。フォーキングに含まれたオープン・ファイル複製のために 、クライアントプロセスのフォーキングの結果は、pipeまたはfifoのク ライアントとしてのチャイルド(子)プロセスの追加である。 上述したように、クライアントプロセスは、フォークの結果としてオープン・ ファイルを共有するであろう。本発明によれば、オープン・ファイルを共有して いるクライアントプロセスは、同じcpuに存在する必要がない。しかしながら 、共有されたオープン・ファイルの属性を変更することは、全ての共有プロセス に 影響を及ぼさなければならない。pipes及びfifosで、変更の対象であ る重要な共有属性は、pipeのI/Oかノン−ブロッキングであるかどうかを 示しているフラグである。pipes及びfifosの共有オープンを支持する ために、本発明を実施しているシステムは、オープン制御ブロックで共有するこ とができるオープン・ファイルの属性を記憶する。オープン・ファイルを共有し ている全てのクライアントプロセスは、好ましくはクライアント・データ構造を 介して、同じオープン制御ブロックを参照する。 本発明は、プロセスが独自のオープン識別子で実行する各オープンをラベル付 けする。opens以外のpipeまたはfifoの使用は、使用がオープン以 外であることを示す単一の、リバーズド・オープン識別子を有する。本発明は、 単一のPosixシステム呼出しを介してpipeまたはfifoのノン−オー プン使用を強制するので、単一のプロセスが、所与の時間においてpipeまた はfifoの一つのノン−オープン使用をせいぜい有しうる規則の施行(強制) は、容易である。結果は、クライアントプロセス識別子及びオープン識別子から なるペアがpipeまたはfifoの特定の使用を独自に定義するということで ある。プロセスのためにpipe制御ブロックをアクセスすべき全ての要求は、 そのようなペアを含む。 Posixファイル・システムは、pipeまたはfifoのvnodes3 02、304を捜し出すためにpipeまたはfifoに対してfifoファイ ル識別子を用いる。これらのvnodes302、304は、ハッシュ表によっ て捜し出すことが可能である。これは、fifoファイル識別子がExpand (拡張)ネットワーク内で固有でなければならないということを要求する。また 、pipe制御ブロックops層212は、pipe制御ブロックを捜し出すた めにfifo識別子を用いる。従って、fifo識別子は、pipe表にpip e制御ブロックのcpu番号及びブロックのインデックスを含む。 pipeまたはfifoに対するvnodes302、304は、多くのcp u’sで存在しうる。pipe制御ブロックを含んでいるcpuの故障は、これ らのvnodesに影響を及ぼさないであろう。従って、VFS機能は、故障し ているcpuがそのブロックを削除する後でも−−pipe制御ブロックを参照 することを継続しうる。cpuが再スタートした後に新しいpipe制御ブロッ クが同じcpuで生成されるならば異常(病理学的)条件が結果として生ずる。 この問題を解決するために、本発明は、fifo識別子がpipe制御ブロック 生成の全ての場合に対して固有であるということを必要とする。本発明は、fi fo識別子に固有なシーケンス番号を加えることによってこの必要事項を達成す る。 pipeまたはfifoに対するpipe制御ブロックは、単一cpuで存在 する。そのcpuのpipe制御ブロックops層212は、pipe制御ブロ ックを生成する。そのような生成の後、pipe制御ブロックopsオープン ()機能は、新しいpipe制御ブロックを識別するfifo識別子を生成する 。新しいfifo識別子は、先のcpu故障の前に生成されたものでさえも、既 存のfifo識別子と異ならなければならない。この必要事項を充たすために、 本発明は、pipeサーバがその汎用データ構造を初期化した後にだけ実行する ようにpipe制御ブロックops層212を制限する。換言すると、cpuの 故障の後、pipeサーバは、あらゆるfifo識別子が生成される前にそのc puで初期化されなければならない。cpuデス(deaths)及びリスタート(resta rt)間で生成されたfifo識別子に対する固有なシーケンス番号を生成するた めに、pipeサーバのファンドルは、固有なシーケンス番号の一部になる。プ ロセスのファンドルは、cpuアップ(ups)及びダウン(downs)間で固有である。 また、pipeサーバのファンドルは、システム番号及びpipe制御ブロック のシステム及びcpuと同じであるpipeサーバのcpuを含むのが好ましい 。 要するに、pipeまたはfifoに対するfifo識別子は、pipeサー バ・ファンドル、pipe制御ブロックに対するpipe表インデックス及び最 後のcpuロード以来のpipe制御ブロックに対するシーケンス番号を含む。 シーケンス番号は、32ビット数であるのが好ましい。 本発明は、pipeセマフォ、割り当てセマフォ及びposixオープン・ブ ロック・セマフォを含んでいる、PXS306に多数のセマフォを保守する。 pipeサーバ及びシステム・ライブラリは、pipe及びfifoデータ構 造へのアクセスを同期すべくpipeセマフォを用いる。セマフォは、pipe 表、pipe制御ブロック、クライアント及びオペレーション・データ構造、及 びレディー(ready)リストを含んでいる、pipes及びfifosに関連付け られた全てのデータ構造を保護する。結果として、いつでも一つのプロセスだけ が、所与のcpuでpipe制御ブロックをアクセスすることができかつプロセ スは、ブロッキングの前にセマフォを諦めなければならない。 割り当てセマフォは、PXSセグメントにおけるメモリの割り当て及び割り当 て解除を同期する。割り当てセマフォは、また、PXSセグメントにおけるデー タ構造の使用を同期する。 プロセスは、Posixオープン・ブロック・データ構造へのアクセスを同期 すべくPosixオープン・ブロック・セマフォを用いる。 PXS306プールは、また、pipeオペレーション・データ構造、pip eインターリム・データ・バッファ及びpipeレディー・リストを含んでいる 、多数のデータ構造も含む。pipeサーバは、サービスに対する要求を読み取 るべくpipeオペレーション・データ構造を用いかつpipe制御ブロックに 関連付けられたデータ・バッファがそのときに十分な空間を有していないならば データ・バッファに読み取るべくpipeインターリム・データ・バッファを用 いる。pipeレディー・リストは、実行すべきpipeサーバに対するブロッ クされていないpipe制御ブロックops層212オペレーションのリストで ある。pipe制御ブロックops層212は、このリストにエントリを加えか つこのリストからエントリを削除する。 好ましい実施例では、pipe制御ブロック・データ構造は、次の情報を含む :システム番号、cpu番号、pipe制御ブロック番号(即ち、pipe表の インデックス)及びシーケンス番号を含む、pipe制御ブロックの固有の識別 子、fifo識別子;pipe制御ブロックがfifoを記述するかどうかを示 しているフラグ;クライアント・カウント、Posix open()及びfo rk()システム呼出しへの呼出しによりpipe制御ブロックを現在用いてい るクライアントの合計数;クライアント読取りカウント、読取りまたは読取り/ 書込みアクセスに対してpipe制御ブロックを用いている現行クライアントの 合計数;クライアント書込みカウント、書込みまたは読取り/書込みアクセスに 対してpipe制御ブロックを用いている現行クライアントの合計数;クライア ント・リスト、現行クライアントのリスト(このリストにおける各エントリは、 プロセスによるpipe制御ブロックのアクティブ使用を表す。例えば、プロセ スがopen()を呼出す場合には、エントリは、クライアント・リストに加え られる。このリストのエントリは、クライアント・データ構造である。);pi pe制御ブロック・バッファ・ポインタ、PXS306に割り当てられたFIF Oデータ・バッファへのポインタ;pipe制御ブロック・バッファにおける現 行データのバウンダリー、最初及び最後のインデックス;オープン−ウェイター ・ヘッド、別の型のオープナー、例えば、書込み専用アクセクを有するオープナ ーを待機している読取り専用アクセスを有するオープナー、を待機しているオー プン・オペレーションのリストにおける最初のエントリ;書込み−ウェイター・ ヘッド、pipe制御ブロック_バッファへの書込みを待機している書込みオペ レーションのリストにおける第1のエントリ(pipe control bl ock_bufferがオペレーションのときにフルであったので書込みがブロ ックされる。);読取り−ウェイター・ヘッド:pipe control b lock_bufferからの読取ることを待機している読取りオペレーション のリストにおける第1のエントリ(パイプ制御ブロック・バッファが空なので読 取りがブロックされた。);ネーム・サーバ・ブロック・ポインタは、(pip esに用いられない)ネーム・サーバー関連情報をポイントする;ディレクトリ ・エントリ・ファイル識別子、fifoのディレクトリ・エントリに対するファ イル識別子;fifoファイル識別子、pipeまたはfifoに対するfif oファイル・システム・ファイル識別子;pipe制御ブロックのpipe制御 ブロック番号のこの使用を識別するための固有のシーケンス番号(このシーケン ス番号は、fifo識別子の複製である。);(pipesによって用いられな い)アクセス時間のローカル・コピー;アクセス時間のネーム・サーバの最後の コピー;(pipesによって用いられない)fifoまたはpipeの変更時 間のローカル・コピー;fifoまたはpipeの変更時間のネーム・サーバの 最後のコピー;pipeまたはfifoの生成時間のローカル・コピー; (p ipesによって用いられない)pipeまたはfifoの生成時間のネーム・ サーバの最後のコピー;及び次のオープン識別子、クライアント構造に対するオ ープン識別子を割り当てるためのカウンタ。 クライアント構造は、pipeまたはfifoの単一使用を記述しかつPXS 306に割り当てられる。好ましい実施例では、クライアント・データ構造は、 次の情報を含む:pipeまたはfifoを使用するユーザ・プロセスのファン ドル;クライアントが属するpipe制御ブロックのpipe制御ブロック識別 子;クライアント構造がオープンを表すならば、オープンの属性を含んでいるオ ープン制御ブロックへのポインタ(属性は、オープン識別子、fifoまたはp ipeファイル記述子を共有しているプロセスが共有しうる固有の識別子;オー プン制御フラグ;及びオープンを共有しているクライアントのカウントを含む。 一つのクライアントがオープン・フラグ を変更するならば、オープンを共有し ている全ての他のクライアントは、変更が分かる。);成功裏に実行された最後 のfifo機能のシーケンス番号;成功裏に取り消された最後のfifo機能の シーケンス番号;及びブロックされた要求をキューするために用いられるオペレ ーション構造。 オペレーション・データ構造は、pipeまたはfifoの要求の状態を完全 に記述する。pipe制御ブロックops層212における全ての機能は、オペ レーション・データ構造を用いる。パイプ・ライブラリまたはパイプ・サーバそ れ自体は、オペレーション・データ構造を初期化することができる。 好ましい実施例では、オペレーション・データ構造は、次の情報を含む:オペ レーション要求型、このデータ構造によって記述されるオペレーションの型(値 は、OPEN、READ、WRITE、CLOSE、等。);及びオペレーショ ン状態、INIT、BLOCKED、READY、及びDONEの一つ。 オペレーション・データ構造に含まれるのが好ましい次の情報は、所与のオペ レーションをクライアントに関連付ける:ファイル識別子、このオペレーション が実行されるpipe制御ブロックを識別するfifo識別子部分;オペレーシ ョンを初期化したプロセスのプロセス識別子;上記情報が与えられたクライアン トを独自に識別するためのオープン識別子;要求シーケンス番号、各呼出しに対 してfifo ops層206によって生成されたシーケンス番号。(これは、 取り消しを識別しかつクライアントからの要求を複製するために用いられる。) ;及びオペレーションがシステム・ライブラリからローカル的に実行されるかど うかということを示しているフラグ。 オペレーション・データ構造に含まれるのが好ましい次の情報は、種々のリス トのこのオペレーション構造を連鎖する:このオペレーションが属するリストを 識別している、オペレーション・リスト型(即ち、ブロックされたオープナー、 リーダー、ライターまたはレディー・リスト);リストのヘッドにおけるオペレ ーション・データ構造へのポインタ;及びこのオペレーションが属するリストに おいて連鎖された次のオペレーション・データ構造へのポインタ。 オペレーション・データ構造に含まれるのが好ましい次の情報は、要求及び応 答情報を記憶する。これらのフィールドは、ライブラリまたはパイプ・サーバに よって充填されうる:パイプ・サーバが初期制御情報を読み取った後に充填する メッセージid;要求データの長さ;要求データへのポインタ(ライブラリがこ のオペレーションを実行するならば、ライブラリは、write()オペレーシ ョンでユーザのバッファを充填するためにこのフィールドを用いる);応答制御 の最大長;(ローカル・オペレーションに対してライブラリが充填する)応答制 御バッファへのポインタ;(ローカル・オペレーションに対してライブラリが充 填する)応答データ・バッファへのポインタ及び応答データの最大長)。 ネーム・サーバ・ブロックは、ネット・サーバー特定情報を記憶しかつまたP XS306に割り当てられる。上記したように、pipe制御ブロック・データ 構造は、これらの一つを指し示す(ポイントする)。好ましい実施例では、ネー ム・サーバ・ブロック・データ構造は、次の情報を含む:pipeサーバでペン ディングされている“I am OK”メッセージを有する主要ネーム・サーバ のファンドル;その主要ファンドルが上記提案されたように記憶されるネーム・ サーバ・プロセス(主要及びバックアップ)ペアのよく知られたネーム;ペンデ ィングしている“I am OK”メッセージのメッセージ識別子;pipeサ ーバによりこのブロックに供給されるタグ;この特定ネーム・サーバで登録され た多数のアクティブfifosのレファレンス(基準)カウント(計数);及び ネーム・サーバの次のブロックへのポインタ。 図4は、fifoが二つのプロセスによってオープンされた場合のある一定の fifoデータ構造を図示する。各オープンは、Posixオープン・ブロック 402、404の生成を結果として生ずる。fifoに対する各Posixオー プン・ブロック402、404は、fifoファイルシステムにおけるfifo に対してfifo vnode406を参照する。fifo vnodeは、f ifo識別子及びディレクトリ・エントリvnodeポインタを含む。fifo vnode406におけるfifo識別子は、pipe制御ブロック410を参 照するために用いられる。図は、また、pipe制御ブロック410、クライア ント・データ構造416、420及びオペレーション・データ構造418、42 2の間の関係も示す。The Name Server 各fifoは、単一Posixファイル・システムに登録される。fifoを 含んでいるファイル・システムに対するネーム・サーバは、以下に説明する複数 のサービスをfifoのユーザに供給することができる。 ネーム・サーバは、ファイル・システムのディレクトリ・トリーにおけるfi foに対するvnode情報及びディレクトリ・エントリを保守する。この情報 は、ファイル・システムに対するPXINODE及びPXLINKファイルに記 憶される。PXINODEファイルは、ディレクトリ及びファイルのinode s(アイノード)を記述する。PXINODE記録は、Posix<sys/s tat.h>statデータ構造の一部であるPosix−定義フィールドを含 む。PXINODE記録のフィールド(好ましくは、st_modeフィールド )は、inodeがfifoを記述するということを示す。 プロセスは、Posix mkfifo()呼出しを実行することによってフ ァイル・システムにfifoを登録する。プロセスがPosix unlink ()呼出しを用いてfifoへの最後のリンクを除去する場合、ファイル・シス テムからのfifoの削除が結果である。 ネーム・サーバは、また、access()、chmod、chown()、 link()、mkfifo()、pathconf()、rename()、 unlink()及びutime()を含んでいるPosixディレクトリ・エ ントリ・オペレーションも実行する。ネーム・サーバは、また、ネーム分解及び 許可検査も行う。 ネーム・サーバは、fifoのpipe制御ブロックを生成しかつプロセスが アンオーブンfifoをオープンする場合にpipe制御ブロックのfifo識 別子をリターンすべくpipeサーバに要求する。ネーム・サーバは、このfi fo識別子を含むファイル識別子を構築しかつネットワーク分解を実行している 発信者にファイル識別子をリターンする。 pipeサーバへの要求が顕著である時間中、ネーム・サーバは、同じfif oを含んでいる他のネーム分解要求をブロックする。pipeサーバがfifo 識別子で応答する場合、ネーム・サーバは、ブロックされた要求をブロック解除 しかつブロックされた要求に対する応答において新しく生成されたファイル識別 子を含む。 ネーム・サーバは、fifoに対するpipe制御ブロックが破壊された場合 にオープンfifoに関連付けられたファイル識別子を削除する。これは、fi foを用いている最後のプロセスがそれを閉じてかつ‘last close(最後のクロ ーズ)’要求をネーム・サーバに送る場合に生じる。pipe制御ブロックは、 また、pipe制御ブロックを含んでいるcpuが故障する場合に破壊され、そ こでネーム・サーバは、pipe制御ブロックのcpuを監視しなければならな い。 ネーム・サーバは、fifoの時間属性を永続的に記憶する。これらの時間は 、fifoがオープンである間に、pipe制御ブロックにおいてキャッシュさ れる。ネーム・サーバは、それがfifoを閉じるために最後のプロセスから‘ last close’メッセージを受け取る場合に、時間を更新する。 オープンfifoでPosix utime()オペレーションを処理する場 合、ネーム・サーバは、キャッシュされた時間を含むpipe制御ブロックに対 するpipeサーバに新しい時間を送る。 ネーム・サーバは、それがパス・ネーム分解を実行する場合に、fifoで全 ての必要な機密検査を実行する。fifoで実行される検査は、ディスク・ファ イルで実行されるものとまったく同じである。The System Library fifo ops層206、pipe制御ブロック・インターフェイス層21 0及びpipe制御ブロックops層212は、興味のある(問題の)fifo に対するpipe制御ブロックがユーザ・プロセスと同じcpuにあるならば、 ユーザ・プロセスのコンテキストにおいて完全に実行される。これは、局所実行 (local execution)である。 pipe制御ブロックが別のcpuにあるならば、pipe制御ブロック・イ ンターフェイス層210は、pipe制御ブロックを含むcpuのパイプ・サー バ214にオペレーション・データ構造を含んでいる要求を送る。これは、遠隔 実行(remote execution)である。遠隔実行では、パイプ・サーバ214は、オペ レーション・データ構造を用いて要求の受け取りによりpipe制御ブロックo ps層212を実行する。 pipe制御ブロック・インターフェイス機能及びpipe制御ブロックop s層機能は、入力パラメータとしてオペレーション・データ構造を取る。好まし い実施例では、オペレーション・データ構造は:実行されるべき要求;要求が局 所かまたは遠隔か;fifo識別子、プロセス識別子及び関連pipe制御ブロ ック、クライアント・ブロック及びオープンを独自に識別するオープン識別子; fifo ops機能の全ての呼出しによりPosixオープン・ブロックのカ ウンタから得られた、要求シーケンス番号(取り消されるべき要求は、そのシー ケンス番号によって識別される。);及び応答に対する位置を特定する。 fifo ops層206は、pipe制御ブロック・インターフェイス22 0からのリターン状態を検査しかつそれがネーム・サーバに時間更新メッセージ または‘last close’メッセージを送ることが必要かどうかを決定する。メッセ ージを送る必要があるならば、fifo ops層206は、メッセージをアセ ンブルしかつ送る。 fifo ops層206は、pipe制御ブロックで要求を実行すべく、こ こで“PerformRequest()”と呼ばれる、pipe制御ブロック ・インターフェイス機能を呼出す。局所実行の間中、ユーザ・プロセス内で走行 しているインターフェイス機能PerformRequestは、一つ異常のノ ン−ブロッキングpibオペレーションを実行すべくpipe制御ブロックop s層212を呼出す。要求がブロックするならば(例えば、fifo read ()要求は、データがpipe制御ブロックに書き込まれるまでブロックする) 、pipe制御ブロック・インターフェイス210は、待機する。遠隔実行の間 中、インターフェイス機能PerformRequestは、パイプ・サーバに 要求を送りかつそれが応答するまでブロックする。 PerformRequestの段階の一般的シーケンス次のようである:P erformRequestは、パイプ・セマフォを介してパイプ・サーバにア クセスを同期する。実行が局所であれば、PerformRequestは、p ibオペレーションを呼出すために、ここで“RequestMyCpu()” と呼ばれる、別の機能を呼出す。実行が遠隔であれば、PerformRequ estは、パイプ・サーバにオペレーション・データ構造を用いている要求を送 るべくここで“RequestOtherCpu()”と呼ばれる機能を呼出す 。PerformRequestは、次いで、完了すべく、局所または遠隔の、 要求を待機する。 要求がブロックされている間に信号が入力されるならば、PerformRe questは、要求を取り消す。 成功裏の完了により、Performは、ユーザに応答をリターンする。 要求がブロックする場合には、pipe制御ブロックops層212は、呼出 すべくブロックされた状態及び次のオペレーションをリターンする。Reque stMyCPUは、次いで、LPIPEまたはLSIG信号事象を待機する。L PIPE事象は、パイプ・サーバまたはpipe制御ブロックops層機能を実 行している別のユーザ・プロセスから生成される。例えば、pipe制御ブロッ ク読取りオペレーションがブロックする場合、RequestMyCpu()は 、待機する。後で、パイプ・サーバにおいて走行しているpipe制御ブロック 書込みオペレーションまたはユーザ・プロセスは、ブロックされた読取りを継続 すべくLPIPE事象を生成する。事象を受け取った後、RequestMyC p u()は、要求における次のpipe制御ブロック・オペレーションを呼出す。 LSIG事象は、信号の受け取りにより生成されかつブロックされた要求は、取 り消される。 RequestOtherCpu()は、要求を取り消すべくパイプ・サーバ からの応答またはLSIG事象のいずれかを待つ。 ペンディング要求を取り消すために、pipe制御ブロック・インターフェイ ス層210は、オペレーション制御情報及び取り消されるべき要求のシーケンス 番号を含む取り消しオペレーション・データ構造を設定する。RequestM yCpu()は、pipe制御ブロック取り消しオペレーションを呼出しかつR equestOtherCpu()は、パイプ・サーバにメッセージを送る。The Pipe Server パイプ・サーバは、pipes及びfifosに対する遠隔オペレーションを 支持するシステム・プロセスである。パイプ・サーバ214は、pipe制御ブ ロック・インターフェイス要求を支持しているメッセージ・インターフェイスを 、異なるcpusにおいて走行しているユーザ・プロセスに供給する。 その主ループにおいて、パイプ・サーバ214は、次のように進行するのが好 ましい:パイプ・サーバ214は、pibオペレーションに対する次の要求を得 るために通信インターフェイスを読取る。パイプ・サーバ214は、次いで、パ イプ・セマフォを用いてシステム・ライブラリに同期する。サーバ214は、次 いで、要求されたpibオペレーションを実行する。pibオペレーションは、 fifo識別子、プロセス識別子及びオープン識別子を用いてクライアント・プ ロセスを識別することを含む。pibオペレーションは、また、pipe制御ブ ロック及びpipeまたはfifoのバッファも更新しかつ割り当てる。pib オペレーションは、次いで、LPIPE事象を用いて、ブロックされた状態にあ るローカル・ユーザ・プロセスを目覚めさせ(起動し)、後のプロセッシングに 対するレディー・リストにブロックされていない遠隔オペレーティングを移動し かつパイプ・サーバに対するLPIPE事象を生成する。pibオペレーション は、要求がブロックされるべきであるならば、待ちリストの一つにオペレーショ ンをキューし、オペレーションがブロックされなくなった場合に実行されるべき オペレーション・データ構造において実行されるべき次のpibオペレーション を設定し、次の要求に対する通信リンクを傍聴すべくループの最上部にリターン する。pibオペレーションは、要求が成功裏に完了するならば要求しているユ ーザ・プロセスに応答メッセージを送る。 パイプ・サーバ214について、pipe制御ブロック・インターフェイス層 210は、pibオペレーションに対して二つのサービスを供給するのが好まし い:read()サービス及びdo()サービス。read()サービスは、通 信リンクに入力する要求を読取るかまたはレディー・リストに連鎖されたオペレ ーションをデキューする(dequeues)。do()サービスは、オペレーション・デ ータ構造を用いて、基礎を成しているpipe制御ブロックops層212を呼 出す。 pipe制御ブロックops層212がブロックされる場合には、層212は 、do()機能にブロックされた状態をリターンする。次いでパイプ・サーバ2 14は、LPIPE事象を待つかまたは、好ましくはレティー・リストから、別 のオペレーションを実行しなければならない。上述したように、pipe制御ブ ロックops層212は、別のユーザ・プロセスのコンテキストにおいて走行す ることにより、層212がオペレーションをブロック解除しかつブロック解除さ れたオペレーションをレディー・リストに連鎖させる場合に、LPIPE事象を 生成する。パイプ・サーバ214は、次いで、レディー・リストにオペレーショ ンをデキューする。 パイプ・サーバ214は、レディー・リストに連鎖されるオペレーションをデ スキューするだけである。パイプ・サーバ214は、ブロック解除になることに よって実行されるべき次のオペレーションを呼出す。 パイプ・サーバ214が扱う要求の一つは、サービスを取り消すべき要求であ る。取り消し要求は、取り消されるべき対応している要求の前にサービスに到達 する。このアウト−オブ−シーケンス到達を検出するために、システム・パイプ ・ライブラリは、パイプ・サーバ214に送られた全ての要求にシーケンス番号 を含む。取り消し要求は、取り消されるべき要求のシーケンス番号を含む。全て のクライアント・データ構造は、最後に取り消された要求のシーケンス番号と共 に処理された最後の要求のシーケンス番号を追跡する。 パイプ・サーバ214は、cpusのいずれかがダウンするときを決定すべく 一部分、各pipe制御ブロックの全ての遠隔クライアントのcpusを監視す る。サーバ214は、二つの段階でcpuダウン・メッセージを処理する。第1 の段階では、デッドcpuのユーザ・プロセスを表している全てのクライアント ・データ構造は、それらがブロックされていないかまたは部分的に完了されたオ ペレーションでないならば、即ち、顕著な応答が存在しないならば、それらのp ipe制御ブロックから削除される。ブロックされたかまたは部分的に完了され たユーザ要求は、それらの顕著な要求に応答する次のオペレーションを実行すべ く設定される。遠隔ユーザ・プロセスからのブロックされたオペレーションは、 レディー・リストにキューされかつローカル・ユーザ・プロセスは、LPIPE 事象によって目覚めさせられる。 第2の段階では、次のpipe制御ブロック機能は、レディー・リストに加え られかつまたLPIPE事象の結果として目覚めるシステム・パイプ・ライブラ リによって実行されたオペレーションに対してパイプ・サーバ214の主要ルー プから実行される。このオペレーションは、顕著な要求に応答しかつそれ以上ク ライアントが残っていないならば関連クライアント・データ構造及びpipe制 御ブロック構造の割り当てを解除する。 fifoをサービスしている全てのネーム・サーバは、fifoをサーブして いるパイプ・サーバで顕著な“I am OK”メッセージを有する。ネーム・ サーバが(cpuデスまたはそれ自体のプロセス・デスにより)いかなる理由に 対して死ぬならば、基礎を成しているオペレーティング・システムのメッセージ ・システムは、このメッセージを取り消す。この取り消しメッセージは、ネーム ・サーバ・プロセス・ペアの少なくとも一つのメンバーがデッドであるパイプ・ サーバに対する表示としてサーブする。 この取り消しメッセージを受け取ることによりパイプ・サーバは、以下に説明 するアクションを取る。パイプ・サーバは、ネーム・サーバ・プロセス・ペアが まだアクティブであるかどうかを決定すべくファドルによってDCTルックアッ プを実行する。ネーム・サーバ・ファドルがバックアップ・テークオーバーによ り変更されたならば、ネーム・サーバ・ブロックは、変更を反映すべく更新され る。パイプ・サーバが主要ネーム・サーバから別の“I am OK”メッセー ジを得るまで、それは、タイマを用いてDCTをポーリングする。全てのタイマ ・ポップおいて、パイプ・サーバは、ネーム・サーバ状態においてなんらかの変 更が存在するかどうかをチェックすべくDCTルックアップを実行する。 DCTルックアップが失敗したならば、これは、主要及びバックアップ・ネー ム・サーバの両方がデッドであるということを提案する。全てのfifoオペレ ーションは、このネーム・サーバ・プロセス・ペアで登録されたfifoに対し て終了される。これらのオペレーションの終了は、2段階クライアント・デス(t wo-step client death)・プロセッシングにおいて記述されたものと同じ方法で 扱われる。 ある一定の情況では、cpu−ダウン・プロセッシングの後、パイプ・サーバ 及びネーム・サーバは、fifo識別子に関して同期から出る(get out of sync )ことができる。このpipe制御ブロックに関連付けられた全てのクライアン トがデッドcpuにあったので、pipe制御ブロックは、削除されるという情 況を考慮する。この場合には、なんのメッセージもfifo識別子マッピングを 削除すべくネーム・サーバに送られない。この情況を修正するために、リトライ 機構は、open()のときに用いられる:pipe制御ブロックopen() は、pipe制御ブロックがもはや存在しないということを検出しかつfifo open()にそのような表示をリターンする。fifo open()は、 fifoとfifo識別子の間でマッピングを削除すべく求めているネーム・サ ーバにメッセージを送る。fifo open()は、ルックアップから開始し て、open()をリトライすべき表示をリターンする。Times Updates for Pipes and Fifos pipes及びfifosの両方は、3回関連属性(three time related attr ibutes)、atime,ctime及びmtimeを有する。atimeは、最 後にpipeまたはfifoに対するデータがアクセスされたことを反映する。 ctimeは、最後にpipeまたはfifoが変更されたことを反映する。m timeは、最後にデータがpipeまたはfifoに書き込まれたことを反映 する。 pipe()システム・コールは、新しいpipeのpipe制御ブロックに おいてこれらのタイムス(times)に対する初期値を含む。後で、pipeの他の Posixシステム・コールは、タイムスを変更する。pipeオープンを有す る最後のプロセスがPosix close()システム・コールを実行する場 合、pipe制御ブロックは、除去されかつタイムスは、失われる。システムは 、pipeに対するタイムスを永続的に記憶しない。 Posix mkfifo()システム・コールは、Posixファイル・シ ステムに新しいfifoを加える。ファイル・システムに対するネーム・サーバ は、そのデータベースにfifoを登録する。ネーム・サーバがfifoを登録 する場合、それは、fifoのタイムス属性に対する初期値を含む。fifoの タイムスは、fifoへの最後のリンクが除去されるまでネーム・サーバのデー タベースに残る。データベースがディスク・ファイルに保持されるので、システ ムが停止しかつ開始する場合にデータベースにおけるタイムスは、持続する。 性能最適化として、fifoに対するタイムスは、fifoがオープンである 間にそのpipe制御ブロックにキャッシュされる。このキャッシングは、タイ ムに影響を及ぼす各機能に対してそのデータベースにおけるタイムスを更新する ことをネーム・サーバに要求する必要を回避する。fifoファイル・システム は、次の情況におけるfifoのタイムスのネーム・サーバの永続コピーを更新 する:fifoでのposix stat()及びfstat()オペレーショ ンの間中、Posix標準によって要求されたように;fifoの最後のオープ ナーによるPosix close()の間中、fifoのpipe制御ブロッ ク及びpipe制御ブロック内のキャッシュされたタイムスが破壊されるので; キャッシュされたタイムスを5分以上遅れるようにさせるオペレーションの間中 (これは、pipe制御ブロックのcpuが故障した場合にpipe制御ブロッ クにおいてキャッシュされたものとどうにか同期するネーム・サーバによって維 持されたタイムスを維持することを試みる);かつオープンしていないfifo がオープンされた後、キャッシュされたタイムスを送らせる第1のオペレーショ ンの間中(これは、5分が経過する前にpipe制御ブロックのcpuが失敗す る場合に、ネーム・サーバに維持されたタイムスにfifoが用いられたことを 反映させることを試みる。)。 表Iは、pipeまたはfifoに対する時間を変更する各システム・コール についての情報を示す。それは、それらの時間を変更することなくpipes及 びfifosに動作する機能もリストする。表の‘argument’カラムは 、その経路を供給することによってfifoを識別しかつファイル記述子(fd )を供給することによってpipeまたはfifoを識別するコールを示す。表 の時間カラムでは、‘p’は、pipe制御ブロックの時間のキャッシュされた コピーを更新する機能を示す。‘u’は、pipe制御ブロックまたはディスク のいずれかにおける時間を更新する機能を示す。‘w’は、fifoに対して時 間のネーム・サーバ永続コピーを更新する機能を示す。 一般に、Posixは、pipeまたはfifoの時間属性は、成功裏のファ イル・システム・オペレーションの後でのみ更新されるということを要求する。 分散型システムではこの規則は、従うことができない。特に、パイプ・サーバが 読取りのようなオペレーションを完了し、かつfifoの時間を更新したならば 、オペレーションの結果がクライアント・プロセスに到達するという保証はない 。結果がクライアントに到達しないならばい、Pipe Serverがpip e制御ブロックに記憶された時間属性を更新するけれども、オペレーションは、 本当に失敗する。 それらが5分以上遅れるときにはいつでもfifoの時間属性のネーム・サー バのコピーを更新することをインプリメントするために、ネーム・サーバに送ら れた時間の最後の値は,pipe制御ブロックに記憶される。 fifoの時間属性を変更しかつ時間に対するネーム・サーバの値を5分以上 送らせるpibオペレーションは、ネーム・サーバの時間を更新すべく新しい時 間及び表示をリターンする。fifo ops層206は、新しい時間を有する ネーム・サーバにメッセージを送る。CPU デェス故障 pipes及びfifosのインプリメントは、ネーム・サーバ、パイプ・サ ーバ及びシステム・ライブラリ・コードの統合を要求する。cpuが故障した場 合のこれらのコンポーネントのアクティビティは、以下に説明する。アクティビ ティの設計の基本は、上記したように、pipe制御ブロックの例が固有のfi fo識別子によって認識されるという事実である。 fifoのpipe制御ブロックを含んでいるパイプ・サーバが死ぬ場合、ネ ーム・サーバは、その表からpipe制御ブロックを識別するために用いたfi fo識別子を削除する。ネーム・サーバは、第1のopen()としてfifo の次のPosix open()を処理する。 パイプ・サーバ及びネーム・サーバは、常に同じシステムにあるということに 注目する。 pipeまたはfifoのクライアントを含んでいるcpuが死ぬ場合または パイプ・サーバがcpuとのネットワーク通信を緩める場合、パイプ・サーバは 、pipe制御ブロックのクライアントのオープンに関連付けられたあらゆる資 源を自由にし、クライアントがpipe制御ブロックの最後のリーダであったな らばブロックされた書込みオペレーションを継続しかつ他のクライアントがpi peまたはfifoオープンを有していないならばpipe制御ブロックを自由 にする。ブロックされたオペレーションが継続される場合、write()を実 行しているクライアントは、POSIX EPIPEエラー及びPOSIX S IGPIPE信号を受け取る。 パイプ・サーバは、システム・メッセージを用いてネーム・サーバのcpuを 監視せず、それは、ネーム・サーバの死(デェス)を認識すべく前に記述したア ルゴリズムを用いる。 プライマリまたはバックアップ・ネーム・サーバの一つが死ぬならば、パイプ ・サーバは、事実を思い出しかつ普通に全ての要求をプロセスすることを継続す る。プライマリ及びバックアップ・ネーム・サーバ・プロセスの両方が失敗した 場合、パイプ・サーバは、EPIPEGONEをリターンする全てのペンディン グ・オペレーションを完了しかつ全てのデッド・ネーム・サーバで登録されたf ifoに関連付けられた資源を自由にする。これは、fifoのpipe制御ブ ロック及び全てのアクティブ・クライアント・データ構造を含む。 手短に言えば、そのcpuが故障する場合、そのネーム・サーバが故障する場 合及びそのパイプ・サーバがそのクライアントの全てとのネットワーク通信を緩 める場合に、pipeまたはfifoに対するpipe制御ブロックは、除去さ れる。これらの情況のいずれかにおいて、Posixライブラリ・コードは、p ipeまたはfifoに対するファイル記述子のフューチャ(未来)またはアウ トスタンディング(顕著な)オペレーションを有する次の挙動(ビヘ―ビィア) をもたらす:Writesは、SIGPIPE信号及びEPIPEエラーを得る し、かつ全てのオペレーションは、EPIPEGONE信号を得る。 ネットワーク通信がパイプ・サーバとクライアントの間で失われた場合、パイ プ・サーバは、pipe制御ブロックからクライアントを削除する。パイプ・サ ーバが到達不能である間、システム・ライブラリは、エラーENET_DOWN をリターンする。パイプ・サーバが再び到達可能になった場合、それは、エラー EOPEN_LOSTを有する応答をリターンする。The VFS layer 入力としてパスネームを与えた場合、lookup()機能は、あらゆる必要 な許可チェックを実行しかつオープンされるファイルに対するvnodeを見出 すかまたは構築すべく十分な情報をリターンする。ファイルが発信者のcpuの プロセスにより既にオープンであるならば、ファイルに対するvnodeは、フ ァイルに対して既に存在する。lookup()機能は、便利な呼出し可能イン ターフェイスをネーム・サーバに供給する。それは、パス分解及び機密チェック を実行するネーム・サーバである。fifoの場合には、lookup()は、 次の情報をリターンするのが好ましい:fifoを含むfifoファイル・シス テムのファイル・システム識別子;fifoのfifoファイル識別子(発信者 が未オープン・ファイルのlookup()を呼出す場合、ネーム・サーバは、 fifoに対するfifo識別子及びpipe制御ブロックを生成することをパ イプ・サーバに要求する。ネーム・サーバは、ファイル識別子においてfifo 識別子を含む。);fifoを含んでいるPosixファイル・システムのファ イル・システム識別子;及びfifoのディレクトリ・エントリに対するPos ixファイル識別子。 好ましい実施例では、全てのfifo vnodesは、ハッシュ・チェイン に記憶されかつfifoファイル・システム識別子及びfifoファイル識別子 を含んでいるキーを用いて効率的に捜し出すことができる。それゆえに、loo kup()を呼出した後、ファイル・システムは、fifo vnodeが既に 存在するかを効率的に決定することができる。 fifo vnodeがそのpipe制御ブロックが削除された後で存在し続 けるということに注目することは、重要である。例えば、別のcpuのクライア ントがfifoオープンを有する間にpipe制御ブロックのcpuは、故障し うる。これは、二つの情況に導くことができる:一つは、ネーム・サーバは、p ipe制御ブロックが去ってしまったということを知りかつそのfifo識別子 を削除する。この場合にlookup()が呼出されたとき、ネーム・サーバは 、fifoがオープンでないと考える。それは、fifoに対する固有のfif o識別子及びpipe制御ブロックを生成することをパイプ・サーバに要求する 。ネーム・サーバは、VFS層に新しいfifoファイル識別子をリターンする lookup()に新しい、固有のfifo識別子をリターンする。fifoフ ァイル識別子が新しいので、VFS層は、ハッシュ・チェインで新しいファイル 識別子を有するvnodeを見出さない。vnodeを捜し出すことに失敗した ことにより、VFS層は、それを割り当てる。fifoのオリジナル・vnod eを用いているクライアントは、それらがそれを用いることを試みかつそれが参 照するpipe制御ブロックが去ってしまった場合、それをクリーン・アップす る。 第2の場合は、ネーム・サーバがpipe制御ブロックが去ったことを知らず かつそのfifo識別子を覚えているときである。この場合にlookup() が呼出されたとき、ネーム・サーバは、去ってしまったpipe制御ブロックに 対するファイル識別子をリターンする。VFS層は、fifo vnodeを見 出すかまたは割り当てる。後で、fifo ops層がfifoをオープンする ことを試みる場合、それは、エラーを得る。他のプロセスがそれを用いておらず かつその表からfifoのファイル識別子を削除することをネーム・サーバに知 らせるならば、そのときにfifo ops層は、fifo vnodeを削除 する。次に、VFS層は、lookup()を再び試みる。 posix lookup()機能は、fifoのディレクトリ情報に対する posix vnode304を構築すべく十分な情報をリターンするというこ とに注目する。fifoに関連付けられたposix vnode304は、f ifoのディレクトリ・エントリのオペレーションのために用いられる。 上記したように、未オープン・ファイルのオープンの間にlookup()が 呼び出される場合、パイプ・サーバは、fifoに対するpipe制御ブロック を生成する。更に、パイプ・サーバは、lookup()の発信者がfifoを 用いているということを示すためにクライアント・ブロック・クライアントを生 成する。fifo ops層206は、pipe制御ブロックの第2の識別オペ レーションとしてopen()を完了する。open()を実行するために用い られるオペレーション・データ構造は、fifoのファイル識別子から抽出され た、固有のfifo識別子を含むのが好ましい;基礎を成しているオペレーティ ング・システムのオープナーのプロセス識別子;及び資源がオープンでないとい うことを示している予約されたオープン識別子(NOT_OPEN)。 シングル・プロセスは、二度以上fifoをオープンすることができるけれど も、それは、一度に一つのPosix open()コールだけを実行すること ができる。open()が失敗したならば、クライアント・データ構造は、自由 にされる。open()が成功するならば、クライアントは、NOT_OPEN 以外のオープン識別子に関連付けられる。新しいオープン識別子は、fifoの 他のオープナーによって用いられない。これは、シングル・クライアント・プロ セスがそのオープン識別子が特別な値NOT_OPENに等しい二つ以上のクラ イアントを有さないということを保証する。換言すると、トリプレット(fif o識別子、クライアント・プロセス識別子、オープン識別子)は、常にクライア ントを独自に識別する。The Fifo Fs Layer fifo fs層208では、関数allocate_vnode()は、f ifo vnodeを割り当てる。それは、また、fifoのディレクトリ・エ ントリに関連付けられた‘shadow’ Posix vnodeを割り当て る。特定のファイル・システム内の第1のvnodeを割り当てるならば、それ は、また、vnode_vfs構造も割り当てる。関数は、割り当てセマフォの 保護の下で実行されるべきである。 (以下のコード例では、‘fsid’、‘fid’、‘dirEntryVp ’、‘pib’、‘pob’は、それぞれファイル・システム識別子、ファイル 識別子、ディレクトリ・エントリvnodeポインタ、pipe制御ブロック、 Posixオープン・ブロックの短縮形である。) 上記したように、ネーム・サーバは、lookup()プロセッシングの間に 未オープンfifoに対するクライアント・ブロック及びpipe制御ブロック 及びを生成することをパイプ・サーバに要求する。エラーがfifo open ()を有する成功裏のlookup()に続くことからPosixライブラリ・ コードを妨害する場合には、fifo fs client_open関数は、 既に割り当てられたpipe制御ブロック資源を自由にする。 fifo fs関数pob_lenは、Posixオープン・ブロックにfi foファイル・システム−ディペンデント拡張の長さをリターンする。この関数 は、割り当てセマフォの保護の下で実行される。 fifo fs関数free_vnodeは、fifo vnodeを自由に する。この関数は、vnodeが使用中でないときにだけ呼び出される。 fifo fs関数emTobInfo及びemTnodeInfoは、それ ぞれPosixオープン・ブロック内に含まれたtob構造に記憶された情報及 びvnode内に含まれたtnode構造内に含まれた全ての情報をリターンす る。これら二つの関数は、cpuへのプロセスの移行が起動されるcpuで実行 される。 fifo fs emVnodeAlloc関数は、移行プロセスによってパ スされたvnode及びtnode infoを取りかつvnodeを構築し、 vnode_vfs構造を捜し出すかまたは構築しかつvnodeにvnode ops構造を装着する。この全ては、vnodeセマフォの保護の下で行われ る。関数は、割り当てられたvnodeへポインタをリターンする。 そして、fifo fs emSharablePob関数は、移行cpuか ら受け取ったtob及びtnode情報及び共有可能であるためにチェックされ るpobへのポインタを取る。共有されるべきpobが見出されたならば、関数 は、pobが共有可能であるかどうかの表示をリターンする。 図5及び図6は、それぞれfifo及びpipeの要求に対する状態遷移図で ある。fifo ops層206は、オペレーション・データ構造を設定しかつ パラメータとして割込み可能性フラグ及びオペレーション・データ構造で要求を 実行するpipe制御ブロック・インターフェイスPeformRequest 関数を呼出す。fifo ops層206は、実行される関数に基づきオペレー ション・データ構造におけるオペレーション型を設定しかつINITにオペレー ション状態データ構造を設定する。例えば、fifo read()に対して、 オペレーションの型及び状態は、それぞれREAD及びINITである。それら の間で、オペレーション・データ構造の型及び状態構成要素は、実行のためのp ipe制御ブロック・オペレーションを定義する。 PerformRequest関数は、要求されたpipe制御ブロック・オ ペレーションの実行がローカル(局所)かまたはリモート(遠隔)かを決定する 。所与の時間においてかつ所与のクライアントに対して、要求されたオペレーシ ョンの型及びオペレーション・データ構造の状態構成要素は、要求されたオペレ ーションを実行している関数の状態を反映する。この関数は、実行が遠隔である ならば遠隔cpuの関連パイプ・サーバにオペレーション構造を含んでいるメッ セージを送る。 局所実行では、pipe制御ブロック・オペレーションからのリターン状態は 、PerformRequestが次のpipe制御ブロック・オペレーション を駆動することが必要かどうかを反映する。pipe制御ブロック・オペレーシ ョンが完了することができないならば、ソフトウェアは、ブロックされたものに オペレーション・データ構造の状態を変更しかつブロックされた状態の表示をリ ターンする。この場合には、パイプ・サーバは、他の要求をサービスする。ブロ ックされた関数は、次のpipe制御ブロック・オペレーションを再開する前に LPIPEまたはLSIG事象を待つ。 LPIPE事象は、パイプ・サーバによってまたは局所的にpipe制御ブロ ック・オペレーションを実行している別のプロセスのコンテキストから生成する ことができる。パイプ・サーバに対してLPIPE事象を生成する前に、全ての ブロックされたオペレーションは、レディー状態(実行可能状態(ready state) )に設定されかつレディー・リストに連鎖される。局所pibオペレーションに 対するLPIPE事象を生成する前に、ソフトウェアは、オペレーション・デー タ構造の状態をREADYに変更する。 オペレーションがブロックされたまたはレディー状態である間に局所実行がL SIG事象によって割り込まれたならば、RequestMyCpuは、取り消 しオペレーションを実行するために新しいオペレーション・データ構造を設定す る。局所実行では、取り消しは、即に実行される。遠隔実行では、LSIG事象 は、待機を充たしかつ取り消しオペレーション・データ構造を有するメッセージ は、パイプ・サーバに送られる。取り消しオペレーションは、BLOCKEDま たはREADY状態におけるペンディング・オペレーションを取り消しかつ次い でfifo ops関数を完了するPerformRequestに取り消され た状態を戻す。 pipe制御ブロック・オペレーションがBLOCKEDまたはREADY状 態にある間にネーム・サーバ・ペアが死ぬならば、次のオペレーションは、cp u−ダウン・クリーンアップ・オペレーションを行うために設定されかつオペレ ーション状態は、READYに設定される。cpu−ダウン・クリーンアップ関 数が実行される場合、それは、必要なリターン情報でペンディングPerfom Request関数を完了する。pipeを表しているpipe制御ブロックは 、pipesがいかなるネーム・サーバにも登録されていないときにはこのファ ッションで決して遷移しない。 pib ops層212によって好ましくは支持された種々のfifoオペレ ーションを以下に説明する: パイプ・サーバだけがpipeの生成を呼出しかつネーム・サーバからのfi fo生成メッセージに応じてfifo ops機能性(関数性)を呼出す。pi peの生成に対する要求のプロセッシングにおいて、fifo ops層206 は、pipe制御ブロック及びクライアント・データ構造に対する空間を割り当 てかつ固有のシーケンス番号を生成する。次いで、fifo ops層206は 、(オープン・オペレーションの間にクライアントを識別するための後の使用に 対して)lookupを初期化したプロセスのプロセス識別子を記憶する。オー プン識別子に対して、fifo ops層206は、特別のNOT_OPEN識 別子を記憶する。 Fifo Open: Fifo openは、lookupの成功裏の実行 後に呼び出される。fifo openは、それぞれOPEN及びINITであ るそのオペレーション型及び状態でオペレーション・データ構造を設定する。F ifo opensは、局所的または遠隔的に実行することができる。遠隔実行 の場合には、RequestOtherCpu()は、関連パイプ・サーバにオ ペレーション・データ構造を含んでいるメッセージを送る。 open要求は、第1がopen要求が新しい構造の割り当て後にブロックす べきかどうかを決定し、第2が第1のオペレーションがブロックされない場合に 実行する、二つのpibオペレーションに分割されるのが好ましい。成功裏にP erformRequest()を実行した後、fifo open()関数は 、Posix openブロック・データ構造にPerformRequest ()によってリターンされたopen識別子を記憶する。 open要求は、fifosに対してだけである。pipesに対しては、o penは、pipeの生成の一部である。 fifo openが割り込まれかつペンディング・オペレーションが取り消 されるならば、次のオペレーションは、取り消しpibオペレーションを実行す る。 図7は、fifoのopen要求に対する状態遷移図である。 Open Pib Operation,First Division: 上記したopen pibオペレーションの第1の分割は、その固有なシーケン ス番号及びpipe制御ブロック番号を有するfifo識別子を用いてpipe 制御ブロックを見出す。オペレーションがfifo識別子において固有のシーケ ンス番号を有するpipe制御ブロックを見出すことができないならば、ope nオペレーションは、基礎を成しているソフトウェアは、再び試みるべきである ということを示しているエラーをリターンする。このエラーを検出しかつ割り当 てられたであろう全てのデータ構造をクリーンアップした後、fifo ope nは、再び試みる。そのようなクリーニング・アップは、パイプ・サーバがpi pe制御ブロックを削除する場合に必要であろうし、かつネーム・サーバは、そ の表からマップしているfifo識別子を削除することを知らせることができな い。 固有のシーケンス番号を有するpipe制御ブロックを見出すことにより、p ib・openオペレーションの第1の分割は、fifosに対して要求される 特別のプロセスを実行する。このプロトコルは、クライアントに関連付けられた open制御ブロックにおけるopenに対してopenフラグを記憶すること ;open制御ブロックにおけるopenに対してopen識別子を生成しかつ 記憶すること;I/Oが、I/Oをブロックするためにopensを実行するf ifosに対してノン−ブロッキングであるということを示しているフラグをク リアすること(別のプロセスが書込みのためにfifoをオープンするまでfi fo openが読取りだけのためにfifoをオープンしているならば(及び その逆もまたしかり)、第1の分割は、ブロックするのが好ましい。);及びノ ン−ブロッキングI/Oに対するopensを実行しているfifosに対する 遅延なしで完了しかつリターンし、I/Oがプロセスにおいてノン−ブロッキン グであるということを示しているフラグを設定することを含む。ノン−ブロッキ ング読取りアクセスに対して、第1の分割は、成功裏にリターンする。全てのプ ロセスが読取りアクセスに対するfifo openを有さない場合にノン−ブ ロッキング書込みアクセスに対して、オープンpibオペレーションは、要求し たI/Oが存在しないかまたは関数(機能)を実行することができない機器(デ バイス)を参照するということを示しているエラーをリターンする。 オペレーションがブロックするならば、オペレーション・データ構造の状態は 、BLOCKEDになる;実行される次の関数は、第2の分割open pib オペレーションとして設定され、かつオペレーションは、pipe制御ブロック のopen waiter list(オープン・ウェイタ・リスト)に連鎖さ れ、openオペレーションのリストは、別の型のオープナーを待っている。 open pibオペレーションの第1の分割がこのオペレーションが属する クライアントに対してcpu−ダウン要求を受け取る場合にfifo open オペレーションがBLOCKEDまたはREADYであるならば、オペレーショ ンの状態は、READYに設定されかつ次のオペレーションは、クリーンアップ であるべく設定される。ブロックされた要求がブロック解除されかつオペレーシ ョンの状態がREADYであるときの通常の場合には、次のオペレーションは、 第2の分割open pibオペレーションである。 Open Pib Operation,Second Division: 上記した第2の分割open pibオペレーションは、第1の分割open pibオペレーションがブロック解除する場合に実行する。成功裏にオープンし た後、この第2のopenオペレーションは、完了を待っている全てのブロック されたopenオペレーションを起こす。完了の前に、第2の分割open p ibオペレーションは、ブロック解除された局所オペレーションの全てに対する LPIPE事象を生成し、ブロック解除された遠隔オペレーションをレディー・ リストに連鎖しかつパイプ・サーバに対するLPIPE事象を生成する。[1: 14.2.2] 成功裏の完了により、fifo openは、呼び出しプロセスにオープン識 別子をリターンしかつオペレーションの状態は、COMPLETEDとして設定 される。他のオープナーが実行で見出されないならば、オペレーションは、再び ブロックしうる。この条件は、LPIEPE事象を受け取ることと走らせるため にスケジュールされることの間の時間遅延の結果である。また、時間遅延は、プ ロセスがpipeセマフォを獲得することを試みる場合に生じうる。 Pipe Create: 本発明では、pipe()へのコールは、局所p ipe制御ブロックを生成する。発信者のcpuに対してローカルであるパイプ ・サーバは、このpipe制御ブロックを保守する責務がある。pipe生成オ ペレーションは、決してブロックせずかつ成功裏の完了によりリーダ及びライタ ーとの関連に対して二つのオープン識別子をリターンする。 pipe生成オペレーションは、pipe制御ブロック・データ構造、二つの クライアント・データ構造及びクライアント・データ構造に関連付けられた二つ のオープン制御ブロックを割り当てる。pipe生成オペレーションは、また、 対応する二つのオープン制御ブロックにおける記憶のために二つのオープン識別 子を生成する。オペレーションは、pipeリーダであるべく一つのクライアン トをかつpipeライターであるべく他のものを設定する。 Fifo Fork: 上述したように、親プロセスは、fork()システ ム・コールを用いて子プロセスを生成する。その生成により、子は、親のオープ ン・ファイルの全てを承継する。全てのpipeまたはfifoファイル記述子 に対して親は、オープンを有し、子は、間接的にfifo・フォーク・オペレー ションを呼出す。fifo・フォーク・オペレーションは、pipe制御ブロッ ク・インターフェイス層210を介してフォークopen pibオペレーショ ンを実行するためにINITに設定されたその状態及びFORK_OPENのオ ペレーション型でオペレーション・データ構造を設定する。 fork()コールがcpusをスパンしかつ、子のcpuのpipeまたは fifoに対してfifo vnodeが存在しないならば、fifoフォーク ・オペレーションは、fifo vnodeを生成する。新しいfifo vn odeは、fifo識別子を介してpipeまたはfifoのpipe制御ブロ ックを参照する。子は、子のcpuにこのfifo vnodeを生成するため にfifoフォーク・オペレーションを呼出さなければならない。 fork()システム・コールが子に対する新しいPosixオープン・ブロ ックの生成を結果として生ずるならば、fifoフォーク・オペレーションは、 子のcpuのfifo vnodeデータ構造の基準計数をバンプする(ぶつけ る)。発信者は、fork()が新しいPosixオープン・ブロックの生成を 要求したかどうかを特定しなければならない。 Fork Open Pib Operation:フォークopen pi bオペレーションは、決してブロックしない。オペレーションは、二つの機能( 関数)を実行する: 第1に、機能(関数)は、子プロセスに対してpipe制 御ブロックにクライアント・エントリを追加する。これが共有型オープンである という事実を反映するために、発信者は、親のPosixオープン・ブロックで 見出されたオープン識別子を供給する。第2に、機能(関数)は、この共有型オ ープン識別子を新しいクライアント・エントリに記憶する。この新しいクライア ントのオープン制御ブロックへのポインタは、オペレーション・データ構造に設 けられたオープン識別子を有する既に存在しているオープン制御ブロックをポイ ントする。 このpipe制御ブロック・オペレーションの間に状態遷移がない。それは、 一段階オペレーションである。 Fifo Close: fifo close機能(関数)は、発信者によ ってfifoまたはpipeの特定の使用に関連付けられたあらゆる資源を自由 にする。これは、クローズpibオペレーションを駆動する、CLOSE及びI NITにそれぞれ設定されたオペレーション型及び状態でオペレーション・デー タ構造を設定する。オペレーション制御情報は、発信者のfifo識別子、プロ セス識別子及びオープン識別子を用いて設定される。fifoクローズ要求は、 状態トランザクションがないシングル−ステップ・オペレーションである。 対応pibオペレーションを完了した後、fifoクローズは、それ自体のc puのfifoのfifo vnodeにおける使用計数を減分する。この使用 計数がゼロに落ちたならば、fifoクローズは、fifoのディレクトリ・エ ントリに対してfifo vnode及びPosix vnodeを自由にする 。pipesに対して、fifo vnodeに関連したPosix vnod eが存在しない。 fifoクローズは、このクローズがfifoの最後のクローズであったかど うかを見るためにクローズpibオペレーションの応答をチェックする。そうで あれば、オペレーションは、このfifo識別子を保持しているネーム・サーバ にfifo‘last close’メッセージを送る。fifoクローズ・メ ッセージの受け取りにより、ネーム・サーバは、その表からpipe制御ブロッ クfifo識別子を除去する。ネーム・サーバへのメッセージは、また、pip e制御ブロックからの最終時間(final times)も含む。 Close Pib Operation: クローズpibオペレーション は、fifoのpipe制御ブロックに発信者のfifoの使用を登録するクラ イアント・リスト・エントリを自由にする。オペレーションは、また、fifo のpipe制御ブロックの基準計数を減分する。発信者がfifoのpipe制 御ブロックの最後のユーザであるならば、オペレーションは、pipe制御ブロ ックを自由にしかつfifoクローズ・メッセージをネーム・サーバに送ること ができるように十分な情報で応答する。 リターニングの前に、pipe制御ブロック・クローズ・オペレーションは、 全てのブロックされたリーダをブロック解除しかつ全てのライターは、クローズ される。ブロック解除は、BLOCKEDからREADYにオペレーション状態 を変更しかつ遠隔オペレーションをレディー・リストに移動した後で局所プロセ スに対しかつパイプ・サーバに対してLPIPE事象を生成する。 Fifo Fcntl: fifo fcntl関数は、オープンpipeま たはfifoに制御関数をインプリメントする。表IIは、各Posix fc ntl()システム・コールに対してfifo fcntlによって取られたア クションを示す。 pipes及びfifosに対して変更することができる唯一の状態フラグは 、ノン−ブロッキング・フラグである。 fifo fcntlオペレーションは、ほとんどのコマンドに対して一定の 情報をリターンする。これに対する例外は、openの属性をgetかつset する(得て設定する)F_GETFL及びF_SETFLコマンドである。op enは、異なるcpusにおけるプロセスによって共有されうるので、これらの 属性は、open制御ブロックに記憶される。発信者は、fifo識別子、クラ イアントのプロセス識別子及び対応pipe制御ブロックops fcntlオ ペレーションへのopen制御ブロックを独自に識別すべくopen識別子を供 給しなければならない。 PerformRequest()は、fcntlpibオペレーションを実 行すべくパイプ・サーバにメッセージを送るRequestoOtherCpu ()を実行する。オペレーション型及び状態は、それぞれFCNTL及びINI Tに設定される。 Fcntl Pib Operation: このオペレーションは、所与の プロセス識別子及びオープン識別子に対するopenの属性を設定しかつ検索す る。これは、fcntl()システム・コールのF_SETFL及びF_GET FLを用いて行われる。このpipe制御ブロックopsオペレーションは、決 してブロックしない一段階オペレーションである。従って、状態遷移が存在しな い。 fifoまたはpipeが割り当て解除されたならばF_GETFLコマンド は、失敗しかつerrnoをEPIPEGONEに設定する。pipeまたはf ifoのpipe制御ブロックに対して責務があるパイプ・サーバが死ぬならば 、この割り当て解除は、発生しうる。ユーザが定義されていないフラグ(EBA DFLAG)を設定することを試みるかまたはpipeまたはfifoのpip e制御ブロックが去っていったならば(EPIPEGONE)、F_SETFL コマンドは、失敗する。 Fifo Read: fifo読取り関数は、pipeまたはfifoから データを読取りかつ発信者にそれをリターンする。いかなるデータ読取りもfi foから除去される。fifo読取りオペレーションは、pipeまたはfif oが読取りのためにオープン(open)であるということを必要とする。fifo読 取り関数が発信者にあらゆるデータを転送するならば、オペレーションは、転送 された多数のバイトをリターンする−−信号が読取りを割り込んでも。 初期読取りpibオペレーションがブロックされなければならないならば、f ifo読取りに対するPerformRequest()は、マルチ−ステップ ・オペレーションでありうる。信号がfifo読取りを割り込む場合には、pi bオペレーションは、取り消されるべきでありかつ次に取り消しpibオペレー ションが実行する。 Read Pib Operation: 要求したものよりも少ないバイト コードを含んでいるノン−エンプティ・pipeまたはfifoの読取りpib オペレーションは、pipeまたはfifoにおいて利用可能なあらゆるデータ をリターンする。 エンプティ・pipeまたはfifoの読取りpibオペレーションは、プロ セスが書込みのためのpipeまたはfifo openを有していないならば 、EOFを示すべく第1の値(0)をリターンする。さもなければ、オペレーシ ョンは、第2の値(−1)をリターンしかつノン−ブロッキングI/Oに対する openフラグが設定されたならばerrnoをEAGAINに設定する。 クライアントがノン−ブロッキングI/O openフラグ・クリアでオープ ンされかつpipe制御ブロックにおいて読取るべきデータが存在しなかったな らば、関数は、実行されるべき次のオペレーションを設定しかつクライアントは 、pipe制御ブロックの読取り待ちリストに加えられる。さもなければ、関数 は、あるデータが書き込まれるかまたは書込みのためにpipe openを有 する全てのプロセスによってpipeがクローズされるまでブロックする。この 地点では、読取りオペレーションは、ゼロでありうる、実際に読み取られた多数 のバイトをリターンする。 あるバイトまたは全てのバイトを成功裏に読み取った後、読取りpibオペレ ーションは、pipe制御ブロック・バッファへの書込みを待っている全てのブ ロックされた書込みオペレーションを起こす。リターンする前に、読取りオペレ ーションは、全てのブロック解除された局所オペレーションにLPIPE事象を 送り、ブロック解除された遠隔オペレーションをレディー・リストに連鎖しかつ PIPE事象をパイプ・サーバに送る。 オペレーションがブロックされたまたはレディー状態にありfifo読取りが このオペレーションが属するクライアントに対するcpu−ダウン要求を受け取 る場合においてまたはネーム・サーバ・プロセス・ペアが死ぬ(fifosに対 してのみ)場合において、オペレーションの状態は、READYに変更されかつ 次のオペレーションは、クリーンアップpibオペレーションであるべく設定さ れる。通常の場合には、ブロックされた要求がブロック解除されかつ状態がレデ ィーに設定された場合、次のpibオペレーションは、現行オペレーション、即 ち、読取りpibオペレーションと同じである。 図8は、fifoの読取り要求に対する状態トランザクション図である。 Fifo Write: fifo書込み関数は、fifoまたはpipeに データを書込む。データは、pipeまたはfifoの終りに書き込まれかつp ipeまたはfifoの既存のデータの全てが読み取られた後でのみ読み取られ る。fifo書込みオペレーションは、同じpipeに書込みを行っている他の プロセスからのデータでPIPE_BUFよりも大きくない書込み要求(即ち、 pipeを書込む場合にアトミック的に書込むことができる最大数のバイト)を インターリーブしない。fifo書込みオペレーションは、他のプロセスからの 書込みで任意のバウンダリのPIPE_BUFよりも大きい書込みをインターリ ーブする。信号がpipeまたはfifoにあるデータを転送した書込みに割り 込むならば、fifo書込みオペレーションは、それが実際に転送した多数のバ イトをリターンする。いかなるリーダによってもオープンでないpipeまたは fifoへ書込むことをプロセスが試みるならば、プロセスは、EPIPEエラ ーまたはSIGPIPE信号を受け取る。プロセスが局所pipe制御ブロック への書込みを試みている場合には、プロセスは、それ自体に信号を送る。プロセ スがパイプ・サーバを介して遠隔pipe制御ブロックに書き込んでいる場合に は、パイプ・サーバは、エラーで発信者の要求に応答する。もう一度、プロセス は、それ自体に信号を送る。 fifo書込みに対するPerformRequest()は、マルチ−ステ ップ・オペレーションでありうる。初期書込みpibオペレーションは、ブロッ クできる。fifo書込みが割り込まれかつオペレーションが取り消される場合 には、取り消しpibオペレーションは、次を実行する。fifo書込みは、I NITオペレーション状態及びWRITEオペレーション型でオペレーション・ データ構造を設定する。 Write Pib Operation: ノン−ブロッキングI/Oに対 するフラグがクリアであれば、pipe制御ブロック書込み要求は、発信者のプ ロセスをブロックさせうるが、通常の完了では、オペレーションは、発信者が要 求した全てのデータを転送する。ノン−ブロッキングI/Oに対するフラグが設 定されたならば、書込みオペレーションは、次の判断ツリーをトラバースする: 発信者がPIPE_BUFよりも大きくないデータを書込むことを望みかつpi peまたはfifoがデータに対するルームを有するならば、オペレーションは 、データを転送する。発信者がPIPE_BUFよりも大きくないデータを書込 むことを望みかつpipeまたはfifoがデータに対するルームを有さないな らば、オペレーションは、いかなるデータも転送せずかつEAGAINに設定さ れたerrnoで第1の値(−1)をリターンする。発信者がPIPE_BUF よりも大きいデータを書込むことを望みかつpipeまたはfifoが少なくと も1バイトに対するルームを有するならば、オペレーションは、完了の前に少な くとも1バイトを転送する。発信者がPIPE_BUFよりも大きいデータを書 込むことを望みかつpipeまたはfifoがいかなるデータに対するルームも 有さないならば、オペレーションは、EAGAINに設定されたerrnoでエ ラー−1をリターンする。 あるバイトまたは全てのバイトを成功裏に書き込んだ後、書込みpibオペレ ーションは、pipeバッファからの読取りを待っている全てのブロックされた 読取りオペレーションを起こす。書込みオペレーションは、全てのブロック解除 された局所オペレーションに対してLPIPE事象を生成し、ブロック解除され た遠隔オペレーションをレディー・リストに連鎖しかつパイプ・サーバに対して LPIPE事象を生成する。 fifo書込みがこのオペレーションが属するクライアントに対してcpu− ダウン要求を受け取る場合にオペレーションがブロックされるかまたはレディー であるならば、またはネーム・サーバ・プロセス・ペアが死ぬ場合にオペレーシ ョンがブロックされるかまたはレディーであるならば、オペレーションの状態は 、READYになりかつ書込みpibオペレーションは、次のオペレーションと してクリーンアップpibオペレーションを設定する。通常の場合には、ブロッ クされた要求がブロック解除されかつオペレーション状態がレディーである場合 、次のオペレーションは、現行オペレーション、即ち、書込みpibオペレーシ ョンを同じである。 図9は、fifoの書込み要求に対する状態遷移図である。 Fifo Getattr: fifo getattr関数は、pipeまたはfifoに対する(上述し た)statデータ構造を充たすために必要な情報を収集する。fifosに対 して、ネーム・サーバは、そのデータベースにおけるstatデータ構造のフィ ールドの全てを保守する。更に、fifoのpipe制御ブロックは、stat データ構造の回数に関連したフィールドを含む。fifo getattr関数 は、リターンする前にネーム・サーバにfifoのpipe制御ブロックに記憶 された時間を送ることの責務を有する。 statデータ構造は、inode、fifoファイル・システム内の各pi peを表すべく生成された固有の番号;fifoを含んでいるデバイスに対する 識別子;fifoに対する多数のリンク;fifoの所有者のユーザ識別子;フ ァイルのグループのグループ識別子、pipeデータ・バッファにおける読取り に対して利用可能な多数のバイト、fifoの最後のアクセスの時間、fifo の最後のデータ変更の時間及びfifoに対する最後のファイル状態変更の時間 を含むのが好ましい。 fifo getattr関数は、変更時間、inode、デバイス識別子、 多数のリンク、ユーザ識別子及びfifoのグループ識別子を供給する。get attr pibオペレーションは、残りの情報を充たす。 Getattr Pib Operation: この関数は、アクティブp ipes及びfifosに対するpipe制御ブロックに記憶された回数をリタ ーンする。この関数は、また、アクセス、変更及び変更回数の値も設定する。発 信者のcpuのライブラリまたはパイプ・サーバ(発信者が他のcpuにいるな らば)は、getattr pibオペレーションを呼出すことができる。 Fifo Setattr: fifo setattr vnodeオペレ ーションは、fifoの種々のディレクトリ属性を設定する。アクティブfif osに対して、アクセス、変更及び状態変更回数は、fifoのpipe制御ブ ロックでキャッシュされる。pipe制御ブロックがcpuに対して局所であれ ば、PerformRequest()は、局所的にsetattr pibオ ペレーションを呼出し、さもなければそれは、遠隔メッセージの回数をpipe 制御ブロックを制御しているパイプ・サーバに送る。この場合には、パイプ・サ ーバは、setattr pibオペレーションを呼出すことのよってメッセー ジで送られた回数を更新する。 Setattr Pib Operation: この関数は、新しい回数を 反映すべくpipe制御ブロックにおけるキャッシュされた回数を更新する。こ の関数は、pipe制御ブロックの3つの回数全てを変更することができる。 Fifo Pathconf: fifoに対して、fifo pathco nf関数は、命令されたファイルまたはディレクトリに関連付けられた構成可能 な制限またはオプションの現行値を決定するためのアプリケーションに対する方 法を供給する。関数は、fifoのディレクトリ・エントリに対するPosix pathconf()関数を常に呼出す。 pipeに対して、fifo pathconf関数は、次の命名された構成 可能制限またはオプションを支持するのが好ましい:_PC_LINK_MAX (pipeへの最大数のリンクは、常に0である);_PC_PIPE_BUF (リターンされた値は、unistd.hで常に定義される);かつ_PC_C HOWN_RESTRICTED(リターンされた値は、常に−1であり、オペ レーションが制限されることを示している)。 Fifo Seek: この関数は、常に失敗しかつEPIPEにerrno を設定する。 Fifo Em Shareopen: この関数は、移行cpuから受け取 った情報でターゲットcpuのtob及びtnode情報を取る。関数は、受け 取った情報でターゲットcpuのtob及びtnodeを更新する。この関数は 、要求構造を設定した後にexec migrate pibオペレーションを 呼出す。 Fifo Em Openmigrate: この関数は、要求構造を設定し た後にexec migrate pibオペレーションを呼出す。 Exec Migrate Pib Operation: この関数は、新 しいクライアント・ブロックを割り当てかつ移行クライアントからこの新しいク ライアント構造に全ての関連情報をコピーする。exec migrate p ibオペレーションは、また、新しいクライアント・ブロックを移行クライアン トのopen制御ブロックにポイントする。close pibオペレーション がそのクライアントに対して実行される場合に移行クライアントは、削除される 。これは、ワン−ショット(単発)・オペレーションである。 勿論、上記教示の変形は、当業者に対して容易に明らかであろう。例えば、サ ーバのネームは、本発明のオペレーションに影響を及ぼすことなく容易に変更す ることができる。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,DE, DK,ES,FR,GB,GR,IE,IT,LU,M C,NL,PT,SE),CA,JP (72)発明者 マーティー スリニヴァサ ディー アメリカ合衆国 カリフォルニア州 95131 サンホセ ゴールデンレイク ロ ード 1410 (72)発明者 ユーザス アレン エム アメリカ合衆国 カリフォルニア州 94024 ロスアルトス サフォーク コー ト 1101 (72)発明者 トム ゲアリー エフ アメリカ合衆国 カリフォルニア州 95117 サンホセ パンダ プレイス 3845 (72)発明者 グプタ ミノー アメリカ合衆国 カリフォルニア州 94539 フリーモント デブラム コモン 43309 (72)発明者 ストレーリス エリック ジー アメリカ合衆国 カリフォルニア州 94706 アルバニー オードウェイ スト リート 1107

Claims (1)

  1. 【特許請求の範囲】 1.プロセッサ間通信リンクによって結合された複数のプロセッサを有している コンピュータ・システムにおいて、該複数のプロセッサの各プロセッサは、メモ リ、ファイルをアクセスする方法を有しており、該方法は、 第1の、ファイル・システム・インプリメンテーション−インディペンデント ・インターフェイスにおける第1の機能を呼出すことによって、ファイルに関す るサービスを要求し; 前記サービスを供給するファイル・システムを決定しかつ第2の、ファイル・ システム・インプリメンテーション−ディペンデント機能を呼出すことによって 前記ファイル・システムの前記サービスを要求し; 前記ファイルに対する前記サービスを供給する前記複数のプロセッサのプロセ ッサを決定しかつ前記プロセッサ間通信リンクを用いて前記ファイルに対する前 記サービスを要求し;かつ 前記プロセッサで前記ファイルに対する前記サービスを実行する段階を具備す ることを特徴とする方法。
JP8522964A 1995-01-23 1996-01-23 pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システムのファイルをアクセスする方法 Ceased JPH11506552A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US37707695A 1995-01-23 1995-01-23
US46345895A 1995-06-05 1995-06-05
US08/377,076 1995-06-05
US08/463,458 1995-06-05
PCT/US1996/000855 WO1996023317A1 (en) 1995-01-23 1996-01-23 A method for accessing a file in a multi-processor computer system using pipes and fifos

Publications (1)

Publication Number Publication Date
JPH11506552A true JPH11506552A (ja) 1999-06-08

Family

ID=27007666

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8522964A Ceased JPH11506552A (ja) 1995-01-23 1996-01-23 pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システムのファイルをアクセスする方法

Country Status (5)

Country Link
US (1) US5968134A (ja)
EP (1) EP0806051A4 (ja)
JP (1) JPH11506552A (ja)
CA (1) CA2210147A1 (ja)
WO (1) WO1996023317A1 (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6345312B1 (en) * 1997-08-28 2002-02-05 International Business Machines Corporation Selectively dummying a data pipe transparent to a writer application
JP2001508214A (ja) * 1997-10-29 2001-06-19 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ブロック編制データ転送同期化方法及びシステム
US6237035B1 (en) * 1997-12-18 2001-05-22 International Business Machines Corporation System and method for preventing duplicate transactions in an internet browser/internet server environment
TW571599B (en) * 1999-09-27 2004-01-11 Qualcomm Inc Method and system for querying attributes in a cellular communications system
US6651074B1 (en) * 1999-12-20 2003-11-18 Emc Corporation Method and apparatus for storage and retrieval of very large databases using a direct pipe
US6185615B1 (en) * 2000-02-25 2001-02-06 Sun Microsystems, Inc. Method and system for consolidating related partial operations into a transaction log
US6965960B2 (en) * 2000-03-01 2005-11-15 Realtek Semiconductor Corporation xDSL symbol processor and method of operating same
US6877160B2 (en) * 2000-11-30 2005-04-05 International Business Machines Corporation Method, apparatus and program storage device for enabling the reading of data from a named pipe while minimizing the use of system resources
US6970892B2 (en) * 2001-02-16 2005-11-29 Stratus Technologies Bermuda Ltd Implementing standards-based file operations in proprietary operating systems
US7035908B1 (en) * 2001-07-26 2006-04-25 Lsi Logic Corporation Method for multiprocessor communication within a shared memory architecture
US7251747B1 (en) 2001-09-20 2007-07-31 Ncr Corp. Method and system for transferring data using a volatile data transfer mechanism such as a pipe
US7155458B1 (en) * 2002-04-05 2006-12-26 Network Appliance, Inc. Mechanism for distributed atomic creation of client-private files
US20060059174A1 (en) * 2004-09-16 2006-03-16 International Business Machines Corporation Apparatus, system, and method for locating an application compatible with a file
US7904906B2 (en) * 2004-11-23 2011-03-08 Stratus Technologies Bermuda Ltd. Tracking modified pages on a computer system
US8996821B1 (en) * 2004-12-15 2015-03-31 Emc Corporation Methods and systems for providing resource sharing through file descriptor isomorphism
US7536662B2 (en) * 2006-06-27 2009-05-19 Atrenta, Inc. Method for recognizing and verifying FIFO structures in integrated circuit designs
GB2472057B (en) * 2009-07-23 2016-01-27 Ibm Method to implement a robust cluster FIFO with the coupling facility for record based communication
GB2472060B (en) * 2009-07-23 2016-01-27 Ibm Systems and methods to implement posix compliant cluster fifo with coupling device
CN103685399B (zh) * 2012-09-17 2018-03-23 腾讯科技(深圳)有限公司 一种登录类Unix虚拟容器的方法、装置和系统
US8924443B2 (en) * 2012-10-05 2014-12-30 Gary Robin Maze Document management systems and methods
US10073721B2 (en) * 2014-08-20 2018-09-11 The Florida International University Board Of Trustees Non-blocking writes to file data
US10585861B2 (en) * 2016-02-12 2020-03-10 Red Hat, Inc. Overlay-based file tagging using virtual file systems

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5971562A (ja) * 1982-10-18 1984-04-23 Hitachi Ltd 時分割計算機システムの制御方式
US4694396A (en) * 1985-05-06 1987-09-15 Computer X, Inc. Method of inter-process communication in a distributed data processing system
US4833651A (en) * 1986-07-24 1989-05-23 National Semiconductor Corporation High-speed, asynchronous, No-Fall-Through, first-in-first out memory with high data integrity
US5206951A (en) * 1987-08-21 1993-04-27 Wang Laboratories, Inc. Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types
US5253342A (en) * 1989-01-18 1993-10-12 International Business Machines Corporation Intermachine communication services
GB9012970D0 (en) * 1989-09-22 1990-08-01 Ibm Apparatus and method for asynchronously delivering control elements with pipe interface
US5247616A (en) * 1989-10-23 1993-09-21 International Business Machines Corporation Computer system having different communications facilities and data transfer processes between different computers
US5265250A (en) * 1990-03-29 1993-11-23 At&T Bell Laboratories Apparatus and methods for performing an application-defined operation on data as part of a system-defined operation on the data
US5287453A (en) * 1990-09-18 1994-02-15 Bull Hn Information Systems, Inc. Fast remote file access facility for distributing file access requests in a closely coupled computer system
US5329619A (en) * 1992-10-30 1994-07-12 Software Ag Cooperative processing interface and communication broker for heterogeneous computing environments
US5787300A (en) * 1993-11-10 1998-07-28 Oracle Corporation Method and apparatus for interprocess communications in a database environment
US5724512A (en) * 1995-04-17 1998-03-03 Lucent Technologies Inc. Methods and apparatus for storage and retrieval of name space information in a distributed computing system

Also Published As

Publication number Publication date
EP0806051A4 (en) 2006-09-20
WO1996023317A1 (en) 1996-08-01
CA2210147A1 (en) 1996-08-01
US5968134A (en) 1999-10-19
EP0806051A1 (en) 1997-11-12

Similar Documents

Publication Publication Date Title
US7634514B2 (en) Synchronizing file system directories
US5968134A (en) Distributed pipes and fifos in a multiprocessor
AU707393B2 (en) System and method for space efficient object locking
US5574903A (en) Method and apparatus for handling request regarding information stored in a file system
US7584222B1 (en) Methods and apparatus facilitating access to shared storage among multiple computers
JP3974892B2 (ja) 管理されるファイルシステムフィルタのモデルとアーキテクチャのための方法、システムおよびコンピュータ可読媒体
US6442564B1 (en) Facilitating workload management by using a location forwarding capability
EP0747832A2 (en) Customer information control system and method in a loosely coupled parallel processing environment
US6862595B1 (en) Method and apparatus for implementing a shared message queue using a list structure
US5999976A (en) Parallel file system and method with byte range API locking
CN101819577A (zh) 维护文件系统客户端目录高速缓存的方法、系统和装置
JPH11327919A (ja) オブジェクト指向割込みシステム用の方法およびデバイス
KR20070049155A (ko) 파일 서버 재초기화 장치, 방법 및 컴퓨터 프로그램
AU2004279166A8 (en) Method and system for transacted file operations over a network
US5682507A (en) Plurality of servers having identical customer information control procedure functions using temporary storage file of a predetermined server for centrally storing temporary data records
US5790868A (en) Customer information control system and method with transaction serialization control functions in a loosely coupled parallel processing environment
US5630133A (en) Customer information control system and method with API start and cancel transaction functions in a loosely coupled parallel processing environment
US8156507B2 (en) User mode file system serialization and reliability
US6799172B2 (en) Method and system for removal of resource manager affinity during restart in a transaction processing system
JP3476973B2 (ja) 分散コンピューティングシステム
Spector et al. High performance distributed transaction processing in a general purpose computing environment
Cahill et al. Supporting the Amadeus platform on UNIX
van Moolenbroek Multimedia support for MINIX 3
Meumann et al. MINIX for a Distributed Database System

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051129

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20051129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060411

A313 Final decision of rejection without a dissenting response from the applicant

Free format text: JAPANESE INTERMEDIATE CODE: A313

Effective date: 20060828

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20061003