JP2724256B2 - コンピュータシステム - Google Patents

コンピュータシステム

Info

Publication number
JP2724256B2
JP2724256B2 JP3196061A JP19606191A JP2724256B2 JP 2724256 B2 JP2724256 B2 JP 2724256B2 JP 3196061 A JP3196061 A JP 3196061A JP 19606191 A JP19606191 A JP 19606191A JP 2724256 B2 JP2724256 B2 JP 2724256B2
Authority
JP
Japan
Prior art keywords
file
service
namespace
name
names
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 - Fee Related
Application number
JP3196061A
Other languages
English (en)
Other versions
JPH04233654A (ja
Inventor
チャールズ パイク ロバート
エル.トンプソン ケニス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AT&T Corp
Original Assignee
AT&T Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AT&T Corp filed Critical AT&T Corp
Publication of JPH04233654A publication Critical patent/JPH04233654A/ja
Application granted granted Critical
Publication of JP2724256B2 publication Critical patent/JP2724256B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F2003/0697Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers device management, e.g. handlers, drivers, I/O schedulers

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、概して電算システム
(コンピュータシステム)に関し、さらに詳細には分散
型電算システム、すなわちシステムの構成要素が通信媒
体によって接続されているような電算システムに関す
る。
【0002】
【従来の技術】コンピュータシステムにおいてプログラ
ムの実行に利用可能なエンティティの多くは、名前、す
なわち、アドレスではないがそれによって指定されるエ
ンティティを検索するためにプログラムによって使用さ
れる識別子を有する。コンピュータシステムのオペレー
ティングシステムは、ユーザがエンティティに名前を付
けることを可能にし、名前とエンティティの間の関係を
追跡し、ユーザが名前によってエンティティを検索する
ことを可能にするような構成要素を有する。
【0003】ファイルは、そのような名前の付けられた
エンティティの一例である。オペレーティングシステム
のファイルシステム要素によって、ユーザは、ファイル
に文字列からなる名前を与え、その文字列からなる名前
を用いてファイルを検索することができる。その他の名
前の付けられたエンティティには、端末やプリンタなど
の装置(デバイス)がある。エンティティを検索するた
めにプログラムが使用する名前の集合を、そのプログラ
ムが実行される「名前空間」という。オペレーティング
システムによって、名前空間の編成の仕方が決定され
る。ある場合には、名前空間は平坦である。すなわち、
すべての名前が単一のレベル上にある。別の場合には、
オペレーティングシステムは名前を階層へと編成する。
階層的な編成の一般的な形は、単一の木構造である。名
前空間におけるすべての名前は、単一のルートを有する
木構造へと編成される。この木構造の内部ノードの名前
はディレクトリを表し、葉ノードの名前は普通のエンテ
ィティを表す。このような木構造においてエンティティ
またはディレクトリを検索するために、プログラムは、
そのエンティティもしくはディレクトリの名前および木
構造のルートとそのエンティティもしくはディレクトリ
との間のすべてのディレクトリの名前とを指定するか、
または、そのエンティティもしくはディレクトリの名前
およびプロセスの現在のディレクトリ(カレントディレ
クトリ)とそのエンティティもしくはディレクトリとの
間のすべてのディレクトリの名前とを指定する。エンテ
ィティを検索するのに必要な名前の組合せをそのエンテ
ィティの「パス名」という。
【0004】分散システムの設計における1つの問題
は、名前空間をいかに定義するかである。1つの方法
は、アメーバ(Amoeba)分散システムの例に示されるよう
に、単にこの問題を無視することである。アメーバシス
テムは、マレンダ(Mullender)他「Amoeba−1990年
代の分散オペレーティングシステム(Amoeba-A Distribu
ted Operating System for the 1990's)」、IEEE Compu
ter(1990年5月)、に記載されているが、このオ
ペレーティングシステムは名前空間を定義しない。その
代わり、このシステムには、名前サーバという構成要素
を含めることができる。名前サーバが名前空間を定義す
る。
【0005】オペレーティングシステムが名前空間を定
義している場合、いくつかの方法がとられている。この
方法については、カマー(Comer)、ドロムズ(Droms)およ
びマーター(Murtagh)「ティルデ命名方式の実験的実装
(An Experimental Implementation of the Tilde Namin
g System)」、Computing Systems、第3巻第4号、米国
カリフォルニア州バークレイのカリフォルニア大学出版
(1991年)第487〜515ページに、さらに詳細
な説明がある。1つの方法は、分散システムにおけるす
べての名前を単一の全システム的な名前の階層に含める
ことである。場合によっては、名前の階層に、その名前
によって表されるエンティティがあるシステム構成要素
の名前を含めることもある。この方法に関する1つの難
しさは、名前空間の大きさである。普通のプログラムは
2、3の名前しか使わないのに、プログラムやユーザは
巨大な階層に対処しなければならない。さらに、システ
ム構成要素の名前が名前の階層に含まれる場合には、ユ
ーザまたはプログラムは、求めているエンティティがい
ずれの構成要素に含まれるものかを知らなければならな
い。明らかに、これらの難しさの程度は、分散システム
の規模が拡大するほど、増大する。
【0006】大きさの問題は、名前空間を分割すること
によって対処されてきた。名前空間を分割する1つの方
法は、プロセッサまたはワークステーションごとに行う
ものである。名前空間を分割するもう1つの方法は、ユ
ーザごとに行うものである。
【0007】ユーザによる分割も、プロセッサによる分
割も、コンピュータシステムにおいてプログラムを実行
するエンティティはプロセスであり、ユーザやマシンで
はないという事実には対処していない。名前空間を除く
すべての点において、プログラムが実行される環境は、
それを実行するプロセスの環境である。例えば、プログ
ラムが一時変数を生成すると、その変数は、そのプログ
ラムを実行しているプロセスの環境の一部であり、それ
にアクセスできるのは、そのプロセスだけである。しか
し、プログラムが一時ファイル(テンポラリファイル)
を作成すると、そのファイルは、プロセスが実行されて
いる名前空間の一部となるが、これは、その名前空間
が、全システム的な名前空間か、あるプログラムに対す
る名前空間か、またはあるユーザに対する名前空間かを
問わない。
【0008】一般に、同じ名前空間で実行中の2つのプ
ロセスによって使用される同じ名前は同じエンティティ
を指すという事実のために、名前付け上の重大な問題が
起こる。例えば、一時ファイルのようなエンティティ
が、真に単一のプロセスのみに関係しているならば、プ
ロセスは、そのエンティティに対して、名前空間内で一
意的な名前を生成しなければならない。2つのプロセス
が異なる名前空間を持っていれば、そのような一意的な
名前を生成する必要性およびそれらの使用から生じる複
雑さが避けられる。プロセスごとの名前空間が無いこと
によって生じる困難は、分散システムに限らないが、プ
ロセスが走っている名前空間の大きさが拡大するほど明
らかに厳しくなるので、分散システムによって与えられ
る名前空間が大きくなるほど、その困難も増大する。
【0009】
【発明が解決しようとする課題】従って、各プロセスが
名前の独立した階層(名前空間)を持ち、かつプロセス
どうしが、異なるプロセッサ上で実行中でも、互いに他
のプロセスの名前空間を利用することを許すことによ
り、大規模なシステムにおいても、効率的に名前を管理
することができる分散オペレーティングシステムを実現
することが所望される。
【0010】
【課題を解決するための手段】ここに開示する本発明の
1つの特徴は、次の構成要素によって特徴付けられるマ
ルチプロセスオペレーティングシステムである。すなわ
ち、その構成要素は、1つ以上の名前空間と、各名前空
間に関係付けられたプロセスの集合と、プロセスに関係
付けられた名前空間において名前の意味を変更する名前
空間変更手段と、プロセスの現在の名前空間との関係を
終了させそのプロセスを新たに作成した名前空間に関係
付ける新名前空間作成手段である。名前空間変更手段お
よび新名前空間作成手段は、いずれのプロセスにも利用
可能である。
【0011】その他の本発明の特徴には次のものが含ま
れる。すなわち、名前の単一の木構造からなるプロセス
ごとの名前空間、単一の木構造内での名前の意味を変更
する名前空間変更手段、名前の意味の変更記録を保持す
るコンパクト手段、エンティティがファイルによって表
されファイルに対する操作がエンティティを管理するよ
うなサービス、プロセスの名前空間のルートに結合よう
な所定のファイル木構造を与えるオペレーティングシス
テムのルートサービス、ファイル操作をファイルプロト
コルに変換するオペレーティングシステムのマウントサ
ービス、マウントサービスによって与えられるファイル
プロトコルの集合にすべて応答するプロトコルサービ
ス、および、プロセスごとにエンティティを管理するフ
ァイルを与えるサービスなどである。さらに、本発明の
特徴には、キーボードからコマンドを入力するための改
良された方法、および、あるローカルプロセッサに存在
するサービスによって与えられるファイルへのアクセス
をリモートプロセッサ上で実行中のプロセスに与える方
法も含まれる。
【0012】
【実施例】実施例において用いる参照番号は、2つの部
分を有する。すなわち、下位2桁の数字は、1つの図面
内での番号であり、残りの桁は、図面番号である。従っ
て、例えば、参照番号115によって特定される項目は
図1に最初に現れる。
【0013】以下の好ましい実施例の詳細な説明は、本
発明が具体化されるプラン9(Plan9)オペレーティング
システムの概要から開始する。概要に続いて、プラン9
の次のような内容、すなわち、プラン9がプロセスに対
する名前空間を作成する方法、プラン9のウィンドウシ
ステム、および、CPUコマンド、についてさらに詳細
に説明する。
【0014】[プラン9オペレーティングシステムの概
要:図7] プラン9は、種々のコンピュータおよびネットワーク上
に実装される汎用のマルチユーザ可搬分散システムであ
る。
【0015】プラン9は、サービスファンクションに従
って分割される。CPUサーバは、計算能力を大規模な
マルチプロセッサに(過負荷がかからないように)集中
する。ファイルサーバは、記憶のための格納場所を提供
する。端末は、ウィンドウシステムを動作させるための
ビットマップスクリーンおよびマウスを備えた専用のコ
ンピュータをシステムの各ユーザに与える。計算および
ファイル格納のサービスを共有することにより、プログ
ラマのグループに共同意識を与え、費用を償却し、かつ
管理・運営を集中化し、従って、その単純化を行う。
【0016】各部分は、単一のプロトコルによって通信
を行う。このプロトコルは、適切なネットワークによっ
て提供される信頼性のあるデータトランスポート層上に
構築され、各サービスを、ルートを有するファイル木構
造として定義する。ファイルとは通常考えられないサー
ビスに対しても、統一された設計によって、顕著かつ有
益な単純化が可能となる。各プロセスは、ローカルなフ
ァイルの名前空間を有する。この名前空間は、プロセス
が使用しているすべてのサービスへの連結を含み、それ
によってそれらのサービスに関するファイルへの連結も
含む。端末の最も重要な仕事の1つは、名前空間に見え
るサービスによってシステム全体を表現するようなビュ
ー(概観、view)をユーザがカスタマイズするのをサポ
ートすることである。
【0017】有効に利用するために、本システムは、C
PUサーバ、ファイルサーバ、および、端末を必要とす
る。このシステムは、部門別かまたはそれより大きな単
位のコンピュータセンタのレベルでサービスを与えるこ
とを意図したものである。CPUサーバおよびファイル
サーバは、大規模なマシンであり、調節された電源を有
する空調付きの機械室に収容することが望ましい。
【0018】以降、プラン9の基本的な構成要素を述べ
る。名前空間およびその使用方法を説明し、さらにプラ
ン9の概念が種々の問題にいかにして適用できるかを例
示する普通でないサービスの例をいくつか提示する。
【0019】[CPUサーバ] いくつかのコンピュータがプラン9のCPUサービスを
与える。製品のCPUサーバは、4個の25MHzのM
IPSプロセッサおよび128メガバイトのメモリを有
し、ディスクは無く、ファイルサーバへの毎秒20メガ
バイトのDMA接続を行うシリコン・グラフィクス(Sil
icon Graphics)社のパワー・シリーズ(Power Series)マ
シンである。また、これは、端末およびプラン9以外の
システムに接続するためにデータキット(Datakit)およ
びイーサネット(Ethernet)のコントローラも備えてい
る。オペレーティングシステムは、forkおよびexecシス
テムコールに基づくプロセスならびに大部分はリモート
のファイルサーバによって決定されるファイルの通常の
ビュー(view)を与える。CPUサーバへの接続がひとた
び確立すると、ユーザは、通常どおりに見える環境の下
で、コマンドインタプリタにコマンドをタイプ入力する
ことができる。
【0020】CPUサーバは、コンパイル、テキスト処
理などのアプリケーションを実行する。CPUサーバ
は、それ自体の外部記憶装置を持たず、それがアクセス
する永久ファイルはすべてリモートのサーバによって与
えられる。ユーザのプロセスによって与えられるサービ
スまたはアクティブなプロセスを集めたイメージなどの
名前空間の一時的な部分はローカルに存在し得るが、C
PUサーバがリブートされるとそれらは消滅する。普通
の端末どうしがそれらのタスクに対して交換可能である
ように、プラン9のCPUサーバどうしは、それらのタ
スク、すなわち処理に対して交換可能である。
【0021】[ファイルサーバ] プラン9のファイルサーバは、すべての永久ファイルを
保持する。現在のファイルサーバは、2つのプロセッ
サ、64メガバイトのメモリ、600メガバイトの磁気
ディスク、および300ギガバイト相当の追記型(WO
RM)光ディスクユニットを備えたもう1つのシリコン
・グラフィックスのコンピュータである。このファイル
サーバは、毎秒20メガバイトのDMAリンクを通して
プラン9のCPUサーバに接続され、また通常のネット
ワークを通して端末などのマシンに接続される。
【0022】ファイルサーバは、クライアントに対し、
ディスク、ブロックまたはファイルのアレイなどではな
くファイルシステムを提示する。ファイルは、木構造の
分岐の標識となる斜線(スラッシュ)で区切られた構成
要素によって命名され、入出力のためにバイトレベルで
アドレス指定可能である。サーバにおけるファイルの位
置は、クライアントには見えない。真のファイルシステ
ムは、WORMに存在し、磁気ディスクの2レベルのキ
ャッシュおよびRAMを通してアクセスされる。最近利
用されたファイルの内容は、RAMに存在して、高速リ
ンクを介するDMAによりCPUサーバに迅速に送られ
る。この転送は、ローカルメモリほどは速くないが通常
のディスクよりはるかに高速である。磁気ディスクは、
WORMに対するキャッシュとして作用すると同時に、
RAMに対するバックアップ媒体として作用する。高速
リンクについては、クライアントがデータをキャッシュ
する必要がない。その代わり、ファイルサーバがそのす
べてのクライアントに対しキャッシュ処理を集中化し
て、分散されたキャッシュの問題を回避している。
【0023】[端末] ここではプラン9に対する標準の端末をGnot(ノット)
と称する。Gnotは、限定地域で設計されたマシンであ
り、数百台が製造された。この端末のハードウェアは、
ディスクの無いワークステーションのようであり、4〜
8メガバイトのメモリ、25MHzの68020プロセ
ッサ、1画素あたり2ビットで1024×1024画素
の画面、キーボード、およびマウスを備えている。この
端末は、外部記憶装置も拡張バスも無い。これは、端末
であって、ワークステーションではないからである。毎
秒2メガビットのパケット交換分散ネットワークによっ
て、端末がCPUサーバおよびファイルサーバに接続さ
れる。コンパイルのような用途には帯域幅が狭いが、端
末を意図した目的(ウィンドウシステム、つまりプラン
9の他の部分への多重化インタフェースを与えること)
には十分すぎるほどである。
【0024】ワークステーションとは異なり、Gnotは、
コンパイルを扱わない。これは、CPUサーバによって
行われる。端末では、CPUサーバのオペレーティング
システムを単一のさらに小型のプロセッサ用にビットマ
ップ・グラフィックスのサポートを付けて変更したもの
を実行させ、これを用いてウィンドウシステムおよびテ
キストエディタなどのプログラムを実行させる。ファイ
ルは、標準のファイルサーバによって端末ネットワーク
接続を介して与えられる。
【0025】旧式のキャラクタ端末のように、すべての
Gnotは、ローカルにもファイルサーバ上にも独自の記憶
装置を持っていないので、同等である。この端末は高価
ではないので、研究センタの各人が2台(1台は職場
に、もう1台は自宅に)持つことができる。自宅に居て
Gnotで仕事をしている人は、職場と全く同じシステムを
見ることになる。これは、ファイルおよび処理資源がす
べて効率的に共有・保守できるように職場に残っている
からである。
【0026】[ネットワーク] プラン9は、構成要素を接続する種々のネットワークを
有する。CPUサーバとファイルサーバはDMAコント
ローラを介して通信を行う。これは、例えばコンピュー
タセンタまたは部門ごとの処理資源の規模に対して実際
的であるにすぎない。さらに離れたマシンどうしは、イ
ーサネットまたはデータキットなどの通常のネットワー
クで接続される。端末またはCPUサーバは、性能面を
考慮しなければ、遠隔のファイルサーバを全く透過的に
利用することができる。データキットネットワークは全
国的な範囲にわたるので、プラン9のシステムは、大規
模に構築することができる。費用を低く抑えるために、
Gnotは、標準の電話線および単一チップインタフェース
を用いる安価なネットワークを使用する。(処理効率
は、毎秒約120キロバイトとかなり高い。)端末は単
に通信を仲介する(ファイルサーバに接続するようにC
PUサーバに指示はするが、結果としての通信には関与
しない)だけなので、端末に対する比較的低い帯域幅
も、システムの全体的な性能には影響がない。
【0027】図7は、プラン9の構成要素およびトポロ
ジー(位相幾何学的配置表現)を示す図である。プラン
9のシステム701は、ファイルサーバ705、CPU
703、およびGnot711からなる。CPU703およ
びファイルサーバ705のクラスタ717、およびGnot
711のクラスタ719は、全国的な長距離通信ネット
ワーク715によって接続されている。クラスタ719
内のGnot711は、LANなどの分散ネットワーク71
3によって接続され、クラスタ717内のファイルサー
バ705およびCPU703は、高速DMAリンク70
9によって接続されている。
【0028】[名前空間] プラン9には2種類の名前空間がある。すなわち、ネッ
トワーク上の種々のサーバの名前のグローバル(広域)
空間およびプロセッサから見えるファイルおよびサーバ
のローカル(局所)空間である。データキットに接続さ
れているマシンおよびサーバの名前は、階層的であり、
例えば、nj/mh/astro/helixというように、(大まか
に)地域を、そして建物、部門、部門におけるマシンを
定義する。ネットワークによって、そのマシンに対する
命名がなされるので、グローバル名の命名の問題は、プ
ラン9において直接扱う必要はない。しかし、プラン9
の基本的な作用として、ネットワークサービスをプロセ
スごとにローカル名前空間に結び付けることがあげられ
る。このローカル名前空間のきめ細かい管理は、カスタ
マイズ可能性、透過性、および異種混交性の問題に取り
組むのに使用される。
【0029】プラン9のサービスと通信するためのプロ
トコルは、ファイル指向であり、すべてのサービスはフ
ァイルシステムを実現しなければならない。つまり、ロ
ーカルであれリモートであれ、各サービスは、サーバの
名前空間という階層へと集められるファイル状のオブジ
ェクトの集合へと配列される。ファイルサーバにとって
は、これは自明な要求である。他のサービスについて
は、仮想的にならなければならない場合がある。例え
ば、印字(プリント)サービスであれば、プロセスが印
字されるべきファイルを生成する場所のディレクトリと
して実現される。その他の例は以下の節で説明するの
で、僅かな間、ネットワーク中に分散する普通のファイ
ルサーバの集合のみを考えることにする。
【0030】プログラムがあるプラン9のサービスを
(ネットワーク固有の、プラン9自体の外部にある機構
を用いて)呼び出すと、プログラムは、そのサービスの
名前空間のルートに接続される。通常、ローカルオペレ
ーティングシステムによってファイル指向のシステムコ
ールの集合へと仲介されるようなプロトコルを用いて、
プログラムは、前記の名前空間におけるファイルに対
し、オープン、作成、削除、読出し、および書込みを行
うことによって、サービスにアクセスする。
【0031】ネットワーク上で利用可能なサービスの集
合から、プラン9のユーザは、所望のものを、例えば、
個人のファイルが存在するファイルサーバ、おそらく
は、データが蓄えられている他のファイルサーバ、また
はグループの計画のためのソフトウェアが書かれている
部門のファイルサーバ、を選択する。それらの種々のサ
ービスの名前空間は、attachというプラン9の基本的な
オペレータによって、収集されてユーザ自身の個人の名
前空間に連結される。ユーザの名前空間は、使用中のサ
ービスのすべての空間の合併によって形成される。ロー
カル名前空間は、各ユーザに対し、一般には端末ごと
に、ローカルオペレーティングシステムによって作られ
る。名前空間は、プロセスごとのレベルで変更可能であ
るが、実際には、ログイン時に作られ、そのユーザのす
べてのプロセスによって共有される。
【0032】システムにログインするには、端末におい
て、いずれのファイルサーバに接続するべきかを端末に
命令する。端末は、サーバを呼び出し、ユーザを認証し
(以下参照)、さらにそのサーバからオペレーティング
システムをロードする。次に、端末は、ユーザの個人の
ディレクトリにあるprofileというファイルを読む。pro
fileには、いずれのサービスがデフォルトで使用される
べきか、またそれらをローカル名前空間のいずれの場所
に結び付けるべきかを定義するコマンドが、入ってい
る。例えば、使用されるべき主なファイルサーバは、ロ
ーカル名前空間のルート(/)に結び付けられ、プロセ
スファイルシステムは、ディレクトリ/procに結び付け
られる。その後、プロファイルは、ウィンドウシステム
を開始させるのが一般的である。
【0033】ウィンドウシステムにおける各ウィンドウ
内で、ローカルにコマンドを実行する場合に使用される
コマンドインタプリタが、profileによって作られた名
前空間において解釈されるファイル名を用いて、実行さ
れる。コンパイルなどの演算集約的なアプリケーション
については、ユーザは、コマンドを実行させるためにC
PUサーバを(自動的に、または名前によって)選択す
るコマンドcpuを走らせる。cpuとタイプした後、ユーザ
には、コマンドインタプリタからの正規のプロンプトが
見える。しかし、そのコマンドインタプリタは、cpuコ
マンド自体と同じ名前空間(ディレクトリも同じ現在の
ディレクトリ)にあるCPUサーバ上で実行されてい
る。端末は、その名前空間の記述をCPUサーバに送
り、そのCPUサーバにおいて、同一の名前空間を作っ
て、端末によって作られたシステムのカスタマイズされ
たビューを、CPUサーバ上にあるものと同じにする。
(名前空間の記述は、名前空間それ自体以外で使用され
ることが多いので、CPUサーバは、可能であれば、端
末による仲介を要求せずに高速リンクを使用する。)cp
uコマンドは、後続のコマンドの効率に影響を与えるだ
けであり、利用可能なサービスやそれらアクセス方法に
は無関係である。
【0034】サービスを見つけるサービスも含めて、プ
ラン9において利用可能なサービスの大きなカタログが
あるが、使用法およびこの設計の可能性を説明するに
は、2、3のサービスで十分である。
【0035】[プロセスファイルシステム] ローカルサービスの一例は、「プロセスファイルシステ
ム」であり、これによって、ファイル指向インタフェー
スによるプロセスの実行の検査およびデバッグが可能と
なる。
【0036】プロセスファイルシステムのルートは、慣
例どおりディレクトリ/procに結び付ける。(プラン9
において慣例は重要である。名前空間は、いやおうなし
に作られるが、多くのプログラムは、名前空間がある形
式を持つことを必要とするような慣例的な名前を有す
る。プログラム/bin/rc(コマンドインタプリタ)がい
ずれのサーバから来るかは重要ではないが、そのプログ
ラムは、それを要求するコマンドによってアクセス可能
となるようにこの名前を持たなければならない。)結び
付けた後は、ディレクトリ/procそれ自体に、システム
におけるローカルプロセスごとに、そのプロセス固有の
数的識別子と同じ名前の1つのサブディレクトリが含ま
れる。(リモートのCPUサーバで走っているプロセス
も見えるようにすることができる。これは、後述す
る。)各サブディレクトリには、そのプロセスのビュー
を実現するファイルの集合が含まれる。例えば、/proc/
77/memには、プロセス番号77の仮想メモリのイメージ
が入っている。プラン9の/procにより、他のファイル
を通して他の関数が実現される。ここで、各プロセスに
対して与えられるファイルのリストを掲げる。プロセス
イメージの仮想メモリ。ファイルにおけるオフセット
は、そのプロセスにおける仮想アドレスに対応する。プ
ロセスの制御動作。このファイルに(writeシステムコ
ールによって)送られたメッセージによって、プロセス
は、実行の停止、終了、再開などを行う。プログラムの
発生源であるファイル。これは、一般に、対象のプロセ
スのシンボルテーブルを調べるためにデバッガによって
使用されるが、名前は別としてすべての点においてオリ
ジナル・ファイルである。従って、そのプログラムを新
たに起動するように、コマンド・インタプリタに対し
「/proc/77/text」とタイプ入力することもできる。適
切な許可を有するプロセスであれば、他のプロセスのノ
ート(note)ファイルを書いて、プロセス間通信のため
に非同期メッセージをそれに送ることができる。システ
ムは、このファイルを、例えばプロセスがゼロで割ると
いうような誤動作をする場合に、(毒入りの)メッセー
ジを送るためにも使用する。プロセス状態の固定フォー
マットのASCII表現。これには、そのプロセスが実
行される元のファイルの名前、それが消費したCPU時
間、現在の状態などが含まれる。
【0037】状態(status)ファイルは、異種混交性およ
び可搬性がシステムの機能のためにファイルサーバ・モ
デルによっていかに処理され得るかを説明するものであ
る。cat /proc/*/statusというコマンドによって、シス
テムにおけるすべてのプロセスの状態が(読むことは可
能であるが幾分見にくく)表示される。実際に、プロセ
ス状態コマンドpsは、そのように集められたASCII
テキストを書式化したものである。psに対するデータ源
は、1ページの長さであり、マシンを問わず完全な可搬
性がある。いくつか種類の異なるマシンのプロセスに対
するファイルが/procに入っている場合でも、同様の実
装が有効である。
【0038】/procが与えるサービスが、多様ではあっ
ても、プロセスの概念を全くファイルのようにしている
わけではないことは重要である。例えば、プロセスを終
了させるために、そのプロセス・ファイルを削除しよう
としても無駄であり、プロセス・ファイルを生成するこ
とによって、新たなプロセスを開始することもできな
い。ファイルは、プロセスの有効なビュー(active vie
w)を与えるが、ファイルを文字どおり表すわけではな
い。サービスをファイルシステムとして設計する場合、
この区別が重要である。
【0039】[プラン9のサービスのアーキテクチャの
概要:図1] 既に述べたように、サービスは、ファイルシステムとし
て実施される、つまり、プラン9のオペレーティングシ
ステムによってコンピュータ上で実行中のプロセスにと
っては、サービスはファイルの集合として映る。プロセ
スは、サービスによって与えられる「ファイル」にファ
イル読出し操作を行うことによって、サービスからデー
タを得ることができ、それらの「ファイル」にファイル
書込み操作を行うことによって、サービスにデータを与
えることができる。プロセス・サービスによって与えら
れる「ファイルシステム」について既に詳細に説明した
ように、サービスは、実際にファイルを保持する必要は
なく、プロセスによるファイル操作への要求に対し、単
に、それらを保持しているかのように反応するだけでよ
い。例えば、プロセスがサービスによって保持されてい
るある「ファイル」を読む場合、サービスは、その「フ
ァイル」を読むプロセスにデータを与えなければならな
い。
【0040】サービスとプロセスとの間の関係の概要を
図1に示す。サービスのアーキテクチャ101は、プロ
セスが1つ以上のサービス123にアクセスするために
ファイルシステムをいかに使用するかを示している。プ
ロセス102は、Gnot711またはCPU703のいず
れかにおいて実行中であり、サービスは、プロセス10
2が実行中のプロセッサに対して局所的に実施されるこ
ともあれば、ファイルサーバ705のような遠隔の装置
において実施されることもある。
【0041】図1に示したように、各サービスは、その
サービスを使用するプロセッサ102に1つ以上のファ
イルの木構造を与える。ファイルの木構造は、データ・
ファイル131とディレクトリ・ファイル127および
129とから成り立つ。ディレクトリ・ファイルは、フ
ァイルのリストが入っているファイルである。ディレク
トリ・ファイルに掲げられたファイルは、ディレクトリ
・ファイルかデータ・ファイルのいずれかである。ファ
イル木構造125(a)から分かるように、データ・フ
ァイル131B、CおよびDが、ファイル木構造の
「葉」であるのに対し、ディレクトリ・ファイル129
は、その木構造が分岐する点を占める。木構造全体の根
元には、単一のルート・ディレクトリ・ファイル127
がある。サービス123中の各ファイルは、ファイル名
を有する。好ましい実施例では、ファイル名は、文字列
である。
【0042】プロセス102は、プラン9のオペレーテ
ィングシステムによって与えられるファイルシステム関
数へのコールによって、サービス123中のファイルに
アクセスする。関数には主な種類が2つある。ファイル
・ロケータ関数(FL)113はファイルを検索する。
ファイル・アクセス関数(FA)111は、ファイル・
ロケータ関数113によってファイルが検索された後
に、そのファイルをアクセスする。ファイル・ロケータ
関数113へのコールは、矢印107で表し、ファイル
・アクセス関数111へのコールは、矢印105によっ
て表す。
【0043】前述のように、プラン9の各プロセス10
2は、名前空間に関係付けられている。プロセス102
の名前空間により、サービス123によって与えられる
いずれのファイルにプロセス12がアクセスできるかが
決定される。好ましい実施例におけるプロセス102の
名前空間は、ファイル木構造125および(または)そ
れらの木構造の下位木構造から構成される単一のファイ
ル木構造117からなる。このように、ファイル・ロケ
ータ関数113によって維持・使用される名前空間11
5(o)は、プロセス102(a)に対する名前空間で
ある。図1から分かるように、プロセス102(a)の
名前空間には、サービス123(a)からの125
(a)およびサービス123(k)からのファイル木構
造125(k)を含むファイル木構造117(o)が入
っているが、サービス123(b)からのファイル木構
造125(b)は含んでいない。ファイル木構造117
(o)は、プロセス102のファイル木構造117
(o)のディレクトリ・ファイル「X」を木構造125
(a)のルートと同じにし、かつファイル木構造117
(o)のディレクトリ・ファイル「Y」をファイル木構
造125(k)のルートと同じにすることによって、構
成されている。「X」および「Y」それ自体がいかにし
て名前空間115(o)に存在するようになったかの詳
細は後述する。
【0044】名前空間115(o)において、ファイル
は、パス名によって検索される。パス名は、検索すべき
ファイルの名前、およびそのファイルの元のファイル木
構造における検索開始点からそのファイルまでのすべて
のディレクトリ・ファイルの名前を含むファイル名リス
トである。そのファイルの元のファイル木構造における
検索開始点をワーキング・ディレクトリという。従っ
て、ワーキング・ディレクトリが、ディレクトリ・ファ
イルXならば、前記のパス名は、A/Cである。A/C
における文字「/」は、パス名における名前を区切る役
目をする。さらに、任意のファイルは、その完全なパス
名(すなわち、ルート・ディレクトリを表す文字
「/」、ルート・ディレクトリとそのファイルとの間の
すべてのディレクトリ名、およびそのファイル名)を指
定することによって検索することができる。それらのフ
ァイル名も「/」によって区切られる。従って、名前空
間115(o)におけるファイルCの完全なパス名は、
/X/A/Cである。
【0045】プラン9においては、多数のプロセス10
2が、1つの名前空間を共有する。ある名前空間を共有
するプロセス102によって、1つのプロセス・グルー
プ103が構成される。従って、プロセス・グループ1
03(o)に所属するプロセスは、ファイル木構造11
7(o)によって定義される名前空間115(o)を共
有し、一方、プロセス・グループ103(z)内のプロ
セスは、名前空間115(z)を共有する。プロセス
は、プラン9において、システム・コール「fork」によ
って生成される。新たに生成されたプロセス102は、
その「fork」システム・コールを行ったプロセス102
と同じ名前空間115に関係付けられた状態を維持する
ので、そのforkシステム・コールを行ったプロセス10
2と同じプロセス・グループに属する。プロセス102
がシステム・コール「forkpgrp」を行うと、新たなプロ
セス・グループが確立される。このコールは、引数を1
つだけ持つ。すなわち、新たなプロセス・グループがプ
ロセス102の古い名前空間105のコピーを受け取る
か、または最小限のデフォルトの名前空間105を受け
取るかを示すフラグである。システム・コールを実行す
ることによって、そのシステム・コールを行っているプ
ロセス102は新たなプロセス・グループに置かれる。
forkpgrpシステム・コールによって、プロセス102に
対し新たな名前空間115が確立されると、新たな名前
空間115における変化は、そのforkpgrpシステム・コ
ールを行っているプロセス102が以前に所属していた
プロセス・グループ103の古い名前空間には、影響を
与えない。
【0046】プロセス・グループ103に属するプロセ
スは、そのプロセス・グループに対する名前空間115
を変更することができる。これを行うには、プロセス
は、2つの名前空間修正関数のうちの1つを使用する。
第1の関数は、「bind(結合)」であり、その名前空間
に既に存在する名前を新たなパス名によって指定される
ファイルと同じにする。bindの実行後は、古いパス名に
よって指定されたファイルへの参照は、新たなパス名に
よって指定されるファイルへの参照へと変換される。例
えば、名前空間115(o)においてAというルートを
有する下位木構造をその名前空間においてHというルー
トを有する下位木構造で置き換える場合には、名前空間
115(o)における「bind("/Y/H","/X/A")」とい
うシステム・コールが使用される。このbindの後、パス
名/X/A/Kは、下位木構造HのファイルKを参照す
ることになる。
【0047】第2の関数は、「mount」であり、名前空
間に既にある名前をサービス123のルートと同じにす
るものである。詳細は後述するが、サービスのルート
は、小さい整数のファイル記述子(ファイル・ディスク
リプタ)によって表される。従って、マウント関数「mo
unt(FD,"/X")」によって、ファイル木構造117
(o)のディレクトリ名「X」は、サービス123
(a)のファイル木構造125(a)のルートと同じに
なる。マウントした後は、パス名/X/Aによってファ
イル木構造125(a)のファイルAが参照される。
【0048】プラン9における「mount」および「bin
d」の更なる改良点は、パス名どうしの間またはファイ
ル記述子とパス名との間に3種類の異なる関係を指定で
きることである。第1の関係は、置換である。この関係
が指定された場合、新たな名前またはファイル記述子に
よって参照されるものが、すべて古い名前によって参照
されるものに置き代わる。第2および第3の関係によ
り、結合ディレクトリと称するものが確立される。結合
ディレクトリが確立されると、bind関数において使用さ
れる古い名前と新たな名前は、共にディレクトリ・ファ
イルを示さなければならず、またmountコマンドにおけ
る古い名前は、ディレクトリ・ファイルを示さなければ
ならないが、他方、ファイル記述子は、サービス123
中のファイル木構造のルートを示さなければならない。
bindまたはmountの作用は、新旧のディレクトリ・ファ
イルの結合体である新たなディレクトリを確立すること
である。関係beforeによって、古いディレクトリの前に
新たなディレクトリが探査されるような結合ディレクト
リが確立され、もう1つの関係afterによって、古いデ
ィレクトリの後に新たなディレクトリが探査されるよう
な結合ディレクトリが確立される。従って、結合コマン
ド「bind("/Y/H","/X/A",BEFORE)」により、ファイル
I、J、KがファイルBおよびCより先行するようなデ
ィレクトリが確立され、ファイル・ロケータ関数113
がパス名/X/A/Cに応答する場合、その関数は、ま
ずディレクトリHを通って探査し、次にディレクトリA
を通って探査することになる。ロケータ関数がファイル
を求めてディレクトリを探査する順序をこのように決定
することにより、結合ディレクトリは、UNIXのよう
なオペレーティングシステムにおけるリスト探査によっ
て与えられる制御と同じ種類の制御を与える。
【0049】名前空間の配置を変えずにファイルの位置
を特定するファイル・ロケータ関数113は、引数とし
てパス名を取り、ファイル記述子を返す。ここにおい
て、ファイル記述子は、ファイルを参照するためにファ
イル・アクセス関数において使用される小さい整数であ
る。ファイル・ロケータ関数113には、パス名によっ
て指定されたディレクトリ・ファイルをプロセス102
のワーキング・ディレクトリに変更する「chdir」、お
よびパス名によって指定されたファイルを開く「open」
が含まれる。「chdir」および「open」は、ワーキング
・ディレクトリのファイルおよび開かれたファイルに対
するファイル記述子をそれぞれ返す。さらに、「creat
e」関数は、パス名において指定されたファイルが生成
されると言う点を除けば、「open」と同様に作用する。
そして、ファイル・アクセス関数105は、ファイルの
読出し・書込み、ファイルの状態の設定・獲得、および
ファイルのクローズを行う場合に、ファイル・ロケータ
関数によって与えられるファイル記述子を使用する。
【0050】アーキテクチャ101において、ファイル
システム109は、プロセス102によって行われるフ
ァイル・アクセス・コール105およびファイル・ロケ
ータ・コール107をサービス・ファイル操作要求に変
換する。各サービス・ファイル操作要求によって、サー
ビス123に、そのファイル木構造125のうちの1つ
にあるファイルに対してある操作を実行することを要求
する。このような要求には2種類ある:矢印119で示
したサービス・ファイル・アクセス要求、および矢印1
21で示したシステム・ファイル・ロケータ要求であ
る。あるサービス123に対する要求119および12
1は、関数呼び出し(ファンクション・コール)の形式
を取り、他のサービス123に対しては、要求はファイ
ル・プロトコルの形式を取る。関数読出しの場合、ファ
イルは、ファイル名またはファイル記述子(descripto
r)によって表され;ファイル・プロトコルの場合、フ
ァイルは、ファイル名またはファイル識別子(identifi
er)によって表される。以降の説明のために、ファイル
記述子およびファイル識別子をファイル指定子(specif
ier)という用語に包括する。
【0051】ファイルシステム109において、プロセ
ス102によって使用されるファイル記述子は、サービ
ス123によって与えられるファイル・ハンドルqidに
関係付けられる。この関係付けは、ファイル記述子のフ
ァイル識別子への関係付け、およびファイル識別子のqi
dへの関係付けによって、直接的または間接的に行われ
る。プロセス102によって使用されるファイル記述子
とqidとの間に関係付けがある場合、プロセス102
は、qidによって表されるファイルへの接続(connectio
n)があると称する。同様に、サービス123におい
て、qidは、1つ以上のファイル指定子に関係付けられ
ている。所与のqidに関係付けられたファイル指定子を
有するシステム・ファイル要求を発生させるファイルシ
ステム・コール105によって、qidによって指定され
るファイルに対してファイル操作が行われることにな
る。
【0052】ファイルを名前、すなわちサービス123
におけるqidではなく、名前、すなわちファイル指定子
によって表すことの利点は、異なるサービスによって、
名前およびqidの間に異なる関係を確立することができ
ることである。例えば、前記のプロセス・サービスなど
のサービスにおいては、すべてのプロセスによって使用
されるファイル名がファイルの単一の集合を示すことが
有益であり;詳細に後述する予定の8.5ウィンドウ・
サービスのような他のサービスでは、各プロセスによっ
て使用されるファイル名は、そのプロセス固有のファイ
ル集合を示す。結果として、アーキテクチャ101にお
けるファイル名は、Cなどのプログラミング言語におけ
る変数の性質と類似の性質を有する。ファイル名のある
ものは、グローバルな静的変数名に似ている;グローバ
ルな静的変数名が、その変数名が現れるすべてのコード
において同一のメモリ位置を示すように、プロセス・サ
ービスによって与えられるようなファイル名は、すべて
のプロセスにおいて同じファイルを示す。ファイル名の
中には、局所的変数名に似たものがある;局所的変数名
が、プロシージャの呼び出しの度に異なるメモリ位置を
示すように、8.5サーバによって与えられるようなフ
ァイル名は、各プロセスにおいて異なるファイルを示
す。ファイル名がいずれの性質を有するかは、勿論、そ
のファイルを与えるサービス123によって決定され
る。変数について用いられる用語との類似性により、サ
ービス123が、そのファイルのインスタンスを与える
と言える。従って、プロセス・サービスにより、そのフ
ァイルの各々の単一のインスタンスが与えられ、そのサ
ービスによって与えられるファイルの1つへの接続を有
するプロセス102は、そのファイルへの接続を有する
他のすべてプロセス102と同じファイルにアクセスす
ることができる。一方、ウィンドウ・サービスは、その
ファイル木構造のルートとの接続を確立する各プロセス
102に対し、そのファイル木構造におけるファイルの
別個のインスタンスを与え;ウィンドウ・サービスによ
って与えられるファイルとの接続を有するプロセス10
2は、そのファイルの多数のインスタンスの1つへの接
続を有する。
【0053】各サービス123は、次の種類のサービス
・ファイル・ロケータ要求121を処理することができ
る。attach:指定されたサービス123におけるファイ
ル木構造のルートに対するファイル指定子が与えられる
と、そのルートに対するqidをファイルシステム109
に返す。walk:所与の名前を有するファイルを求めてフ
ァイル指定子によって指定されたディレクトリ・ファイ
ルを探査し、かつ求めるファイルが見つかった場合、そ
のファイルのqidにファイル指定子を関係付けて、そのq
idを返す。create:ファイル指定子によって指定された
ディレクトリ・ファイルに新たなファイルを生成し、そ
のファイルに指定された名前を与え、そのファイル指定
子を新たなファイルに対するqidに関係付け、さらにそ
のqidを返す。remove:ファイル指定子によって指定さ
れたファイルをサーバから削除し、ファイル指定子をqi
dから切り放し、さらに削除中のファイルの名前を返
す。
【0054】さらに、各サービスは、次の種類のサービ
ス・ファイル・アクセス要求を処理することができる。
open:ファイル・アクセス操作のために、ファイル指定
子によって指定されたファイルを準備し、そのファイル
指定子に関係付けられたqidを返す。clone:ファイルを
表す第1のファイル指定子およびファイルをまだ表して
いない第2のファイル指定子が与えられた場合、第2の
ファイル指定子を第1のファイル指定子に関係付けられ
たファイルに関係付ける。read:ファイル指定子、その
ファイルにおけるオフセット、および総数が与えられた
場合、オフセットで始まる総数で指定された数のバイト
を読み出す。write:ファイル指定子、そのファイルに
おけるオフセット、総数、およびデータが与えられた場
合、オフセットで始まる総数で指定された数のバイトに
データを書き込む。clunk:ファイル指定子が与えられ
た場合、ファイル指定子とそのファイルとの間の関係付
けを終了させる。stat:ファイル指定子およびファイル
状態情報を得るためにサービスによって必要とされる情
報が与えられた場合、そのファイルの状態を返す。wsta
t:ファイル指定子およびファイルの状態を変更するた
めにサービスによって必要とされる情報が与えられた場
合、そのファイルの状態を変更する。
【0055】すべてのサービス123は、前記の操作を
実施できなければならないが、操作が、実際には、全く
作用しなかったり、エラーを生じたりする場合もある。
例えば、サービス123が、プリンタで、書込み専用
「ファイル」しか実施できない場合には、読出し操作に
よってエラーを生じることになる。
【0056】カーネル・サービスおよびプロトコル・サ
ービス:図2プラン9の好ましい実施例には、2種類の
サービスがある。カーネル・サービスは、サービス・フ
ァイル操作要求205および207が、プラン9のカー
ネル関数の呼び出しによって実施されるサービスであ
る。プロトコル・サービスは、サービス・ファイル操作
要求205および207が、プラン9のファイル・プロ
トコルによって実施されるサービスである。プロトコル
・サービスにおいて、各サービス・ファイル操作要求
は、プロセス102のためにプロトコル・サービスに対
して送られる往信メッセージ(tmessage)によって開始
される。プロトコル・サービスは、その往信メッセージ
に対し、プロトコル・サービスからそのプロセスに返さ
れる情報を入れた返信メッセージ(rmessage)によって
応答する。プロトコル・サービスに対するサービス・フ
ァイル操作要求を構成する往信メッセージおよび返信メ
ッセージは、トランザクション(処理)と称する。例え
ば、プロトコル・サービスに対するサービス・ファイル
・リード操作要求は、次のようなリード往信メッセージ
(tread)およびリード返信メッセージ(rread)からな
るリード・トランザクションである。 tread: 型指定子、ファイル識別子、タグ、オフセッ
ト、総数 rread: 型指定子、ファイル識別子、タグ、総数、デー
タ ファイル識別子は、ファイルシステム109におけるフ
ァイル記述子、およびファイルシステム109およびプ
ロトコル・サービスにおけるqidに関係付けられてい
る。treadメッセージには、このメッセージがリード往
信メッセージであることを示す型指定子、ファイル識別
子、このメッセージを識別するタグ、読出しを開始する
べきファイル内のオフセット、およびバイト数が、含ま
れる。rreadメッセージには、このメッセージがリード
返信メッセージであることを示す型指定子、ファイル識
別子、このメッセージを識別するタグ、実際に読み出さ
れるバイト数、およびデータそのものが、含まれる。読
出しの結果、エラーとなった場合、プロトコル・サービ
ス209は、rreadメッセージの代わりに、エラー・メ
ッセージを返す。それは次のような形式である。rerro
r: 型指定子、タグ、エラー・メッセージ文字列
【0057】各プロトコル・サービス209は、先に掲
げたサービス・ファイル操作要求のそれぞれに対応する
トランザクションを実行できなければならない。プロト
コル・サービス209に求められることは、これだけで
あるから、プロトコル・サービス209は、マウント・
サービス203が実行しているプロセッサのアーキテク
チャと完全に異なるアーキテクチャを有するプロセッサ
上に実現しても良い。プロトコル・サービス209を使
用するために必要なことは、それによってプロトコルが
送受信され得るようなプロトコル・サービス209への
接続だけである。さらに、好ましい実施例では、プロト
コルによって送りかつ戻されるデータは、所与のファイ
ル木構造を与えるすべてのプロトコル・サービス209
によって使用される所定の書式を有する。従って、プロ
セス102は、このプロセス102がその上で実行中の
マシンの種類またはプロトコル・サービス209がその
上で実行中のマシンの種類にかかわらず、所与のファイ
ル木構造を与える任意のプロトコル・サービスを使用す
ることができる。
【0058】図2において、プロトコル・サービス(P
S)209は、前記のサービス・ファイル・ロケータ要
求およびサービス・ファイル・アクセス要求に対応する
ファイル・プロトコルを伴うファイル・ロケータ・トラ
ンザクション205およびファイル・アクセス・トラン
ザクション207を実行する。特殊なカーネル・サービ
スであるマウント・サービス203が、サービス・ファ
イル・ロケータ要求を指定する関数コール217および
サービス・ファイル・アクセス要求を指定する関数コー
ル219をファイルシステム109から受信する。次
に、マウント・サービス203は、これらの関数コール
に応じて、プロトコル・サービス209により対応する
トランザクションを行う。このトランザクションを行う
ために、マウント・サービス203は、多数の通信サー
ビス215を利用する。このような通信サービスには、
2種類ある:ネットワーク通信サービス(NS)214
およびプロセス間通信サービス(IPS)216であ
る。ネットワーク通信サービスは、プロセス102が実
行中のCPUにネットワークを介して接続されている遠
隔のプロトコル・サーバ213との通信にネットワーク
を利用するものである。プロセス間通信サービス216
は、局所的なプロトコル・サーバ211との通信にプロ
セス間通信システムを利用するものである。好ましい実
施例において、IPS216によって使用されているプ
ロセス間通信システムは、UNIXオペレーティングシ
ステムにおけるものと同様のパイプ・システムである。
通信サービス215が、プロトコル・サーバ209に接
続されると、このことが、ファイル記述子によって表さ
れる。「マウント」システム・コールで使用されるの
は、このようなファイル記述子である。
【0059】括弧内の参照番号によって分かるように、
ネットワーク通信サービス215は、図7の分散ネット
ワーク713、長距離ネットワーク715、およびDM
Aネットワーク705を使用することができる。局所的
プロトコル・サービス211は、Gnot711に対する
8.5サービスのようなサービスの場合もあり、さらに
は、プロセス間通信手段によって所与のプロセス102
と通信を行う別のプロセス102の場合もある。既に指
摘したように、プロトコル・サービス209とマウント
・サービス203のようなカーネル・サービスとの間の
区別は、位置ではなく、プロトコル・サービス209が
トランザクションをマウント・サービス203によって
行うという点に過ぎない。次の8.5サービスの説明で
詳細に示すとおり、プロトコル・サービス209に関す
るこの特徴の利点は、局所的なプロセッサ上を走ってい
るプロセス102および図7のCPUのような遠隔のプ
ロセッサ上を走っているプロセス102が、共に同一の
プロトコル・サービス209を使用できることである。
【0060】プラン9のファイル操作の実施以下におい
て、プラン9のファイル操作の実施例を説明する。最初
に、ファイルを表すために使用されるデータ構造体なら
びにそのデータ構造体とプロセス102およびサービス
123との関係を説明し、次に、プロセスの名前空間1
15を表すために使用されるデータ構造体、そして最後
に、典型的なファイル操作の例を説明する。
【0061】プロセス102とファイルとの間の接続の
表現:図3〜5プロセス102が接続を有する先のファ
イルは、チャネル・データ構造体によって表される。あ
るファイルに対するチャネル・データ構造体は、少なく
とも、そのファイルを与えているサービス123を指定
し、かつサービス123によって与えられるqidを、プ
ロセス102がそのファイルを示すために使用するファ
イル記述子に関係付ける。サービス123がプロトコル
・サービス209である場合には、そのチャネルは、さ
らに、そのファイル・プロトコルにおけるファイルに対
して使用されるファイル識別子およびプロトコル・ファ
イルに対するプロトコル・チャネルを、ファイル記述子
に関係付ける。
【0062】図3において、チャネル・データ構造体3
01は、次の構成要素を有する。すなわち、ロック30
3:1つ以上のプロセスが同時にチャネル301にアク
セスを有することを防ぐ。参照指数(ref)307:
チャネルが他のカーネル・データ構造体によって指し示
されたかどうかを示す。ネクスト/オフセット・フィー
ルド309:チャネル301が使用されていない場合、
このフィールドは、使用されていないチャネル301の
リストに格納されていて、さらにこの場合、使用されて
いない次のチャネル301を示す;チャネル301によ
って表されるファイルがアクセスされている場合、この
フィールドは、そのファイルへの現在のオフセットを示
す。カーネル・サービス情報(KSINFO)311:
チャネル301によって表されるファイルを与えるカー
ネル・サービスを指定する情報が、次の2つのフィール
ドに収容される---種類313:このフィールドによ
り、チャネル301によって表されるファイルがアクセ
スされる手段としてのカーネル・サービスが指定され;
プロトコル・サービス209に対しては、種類フィール
ド313によってマウント・サービス203が指定され
る;装置(DEV)315:このフィールドにより、カ
ーネル・サービスによって表される特定の装置が指定さ
れ;マウント・サービス203の場合は、装置フィール
ド315により、チャネル301によって表されるファ
イルを与えるプロトコル・サービス209が指定され
る。アクセス情報(AINFO)317:ファイル・ア
クセスを行うために必要な情報が、次の3つのフィール
ドに収容される---モード319:チャネルによって表
されるファイルがいかにアクセスされるかを示す;フラ
グ319:ファイルに関する状態情報を収容する;qi
d323:ファイルを与えるサービスが、そのファイル
に割り当てたqidである。マウント情報(MINF
O):チャネル301によって表されるファイルのパス
名に影響を及ぼすbindおよびmountに関する情報がどこ
にあるかを示す。mountptr327:bindおよびmountに
関する情報があるデータ構造体へのポインタである。mo
untid329:mountptr327によって示されるデータ
構造体の識別子である。ファイル識別子(FID)33
1:マウント・サービス203がチャネル301によっ
て表されるファイルを与えているプロトコル・サービス
209に与えるファイル識別子であり、かつそのファイ
ルが接続されている限り、プロトコル・サービス209
がそのファイルに対するqid323に関係付けるファイ
ル識別子である;好ましい実施例において、チャネル3
01が生成されたとき、ファイル識別子331は、各チ
ャネル301に対し固有の値に設定される。補助情報3
33:装置の種類313によって意味が変わる情報。プ
ロトコル・サービス情報(PSINFO)335:チャ
ネル301によって表されるファイルを与えているプロ
トコル・サービスにファイル・プロトコルがいかにして
送られるかを示す情報である。プロトコル・チャネル
(PCHAN)337:現在のチャネル構造体によって
表されるファイルに関するトランザクションのために使
用される通信サービス215を表すチャネル構造体30
1へのポインタである。mqid339:チャネル30
1によって表されるファイルを収容しているプロトコル
・サービスにおけるファイル木構造のルート・ディレク
トリのqidである。
【0063】各プロセス102は、そのプロセスが接続
を有する先のファイルの集合に関係付けられている。こ
のファイルの集合には、プロセス102の祖先(以前の
代のプロセス)によって確立された接続の接続先であ
り、かつプロセス102が「fork」システム・コールに
よって生成されたときに、それによって「継承」された
ファイル、およびプロセス102自体によって確立され
た接続の接続先のファイルが、含まれる。この関係付け
は、図4に示したデータ構造体401によって達成され
る。さらに、データ構造体401は、前記の集合に属す
る各ファイルを、プロセス102がそのファイルを参照
するために使用するファイル記述子に関係付ける。
【0064】データ構造体401へのアクセスするため
の開始点は、プロセス102に対するユーザ・データ構
造体403である。ユーザ・データ構造体403におけ
るポインタ411は、ファイル記述子の配列(FDA)
413を示す。ファイル記述子の配列413は、ファイ
ル記述子(FD)417によってインデックス付けされ
たチャネル401へのポインタの配列である。あるファ
イルが、プロセス102に接続されたファイルの集合に
属する場合、そのファイルに対するファイル記述子に対
応する配列413におけるエントリ(FDAE)415
には、そのファイルに対するチャネル構造体301への
ポインタ423が入る。このようなチャネル構造体は、
図4においてファイル・チャネル構造体419として現
れる。プロセス102が接続される接続先のファイルの
集合に対応するファイル・チャネル419の集合があ
る。好ましい実施例において、ファイル記述子の配列4
13は、100の要素を有するので、各プロセス102
は、100のファイルに接続することができる。
【0065】既に指摘したように、「bind」、「moun
t」、「chdir」および「open」などのファイル・ロケー
タ関数は、引数としてパス名を取り、そのファイルに対
するファイル記述子417を返す。さらに詳細に後述す
るように、パス名の解釈を目的とするファイル・チャネ
ル419へのアクセスが、プロセス102のファイル木
構造のルートに対するファイル・チャネル419へのユ
ーザ・データ構造体403におけるポインタ、およびプ
ロセス102のワーキング・ディレクトリに対するファ
イル・チャネルへのもう1つのポインタ409によって
与えられる。パス名の解釈において使用されるユーザ・
データ構造体403のもう1つの構成要素は、要素(E
LEM)405であり、これには、現在解釈されている
パス名を構成する名前のリストにある名前が入ってい
る。
【0066】ファイル・チャネル419によって表され
るファイルが、プロトコル・サービス209によって与
えられると、ファイル・チャネル419は、通信サービ
スを介するプロトコル・サービス209との接続を表す
プロトコル・チャネルに関係付けられる。プロトコル・
チャネルは、チャネル構造体301を用いても実施され
る。プロトコル・チャネルとして作用するチャネル構造
体301において、種類フィールド313によって、プ
ロセス間通信サービス216またはネットワーク・サー
ビス214(好ましい実施例においては、パイプ・サー
ビスまたはDATAKITネットワーク通信サービス)
のいずれかが指定される。フィールド327、329お
よび337は、プロトコル・チャネルにおいては無意味
である。プロトコル・チャネルによって表される接続が
プロセス102によって開かれた場合、プロトコル・チ
ャネルへのポインタが、プロセス102に対するファイ
ル記述子の配列413に配置され、さらにプロトコル・
チャネルが、それに対応するファイル記述子を受け取
る。局所的なプロトコル・サービスへのパイプによる接
続は、そのパイプ生成しているパイプ・システム・コー
ルがプロセス102によって実行されたときに、開か
れ、遠隔のプロトコル・サービス209へのDATAK
IT接続による接続は、srvサービス中にその遠隔の
プロトコル・サービス209を表すファイルが開かれた
ときに、開かれる。
【0067】実施例においてファイル・チャネル419
をプロトコル・チャネルならびにtmessageおよびrmessa
geを表すデータ構造体に関係付けるために使用されるデ
ータ構造体501を図5に示す。前記のように、ファイ
ル・チャネル419のPCHANフィールド337は、
プロトコル・チャネル517を示すが、このプロトコル
・チャネルは、チャネル構造体301を用いて実施され
る。tmessageおよびrmessageを表すデータ構造体は、マ
ウント・サービス配列(MNTA)502を用いて、そ
の位置が特定される。この配列には、すべてのファイル
・チャネル419に対して、プロトコル・サービス20
9によって与えられるファイルを表すエントリ(MNT
E)503が存在する。各エントリ503には、1つの
識別子および2つのポインタ---エントリ503に対応
するファイル・チャネル419へのポインタおよびマウ
ント・サービス・キュー(待ち行列)の構造体(MNT
Q)509へのポインタ---が含まれる。一方、ファイ
ル・チャネル419は、装置フィールド315の情報の
一部として、エントリ503に対する識別子を含む。マ
ウント・サービス・キューの構造体509には、ファイ
ル・チャネル419が属するプロシージャを表すデータ
構造体、プロトコル・サービス209への接続とファイ
ル・チャネル419によって表されるファイルを含むフ
ァイル木構造125とを表すプロトコル・チャネル51
7へのポインタ515、およびメッセージ520の待ち
行列へのポインタ519が含まれる。この待ち行列にあ
るメッセージは、勿論、プロトコル・サービス209へ
のファイルを収容したtmessageおよびプロトコル・サー
ビス209からのrmessageである。従って、マウント・
サービスの待ち行列509によって、メッセージの待ち
行列が、プロトコル・チャネル517およびプロセス1
02に関係付けられる。
【0068】各メッセージ520は、少なくともマウン
ト・サービス・ヘッダ(MNTHDR)521から構成
される。ファイル・チャネル419によって表されるフ
ァイルおよびプロセスの組み合わせに対し1つ以上の未
解決のメッセージが存在することがあるので、マウント
・サービス・ヘッダ521には、ファイル・チャネル4
19によって表されるプロセスとファイルの組み合わせ
に対する他のメッセージへのヘッダにヘッダ521を連
結するポインタ527および529が含まれる。マウン
ト・サービス・ヘッダ521は、さらに、ファイル・チ
ャネル419が所属するプロセスに対するプロセス・デ
ータ構造体へのポインタを含む。
【0069】メッセージ520が、rmessageである場
合、そのメッセージのデータ以外の部分は、rhdr525
に置かれ、tmessageである場合は、受信されたメッセー
ジのデータ以外の部分は、thdr523に置かれる。この
ように、これらのフィールドには、メッセージの型、マ
ウント・サービス203がファイルに関係付けたファイ
ル識別子、および必要に応じたその他の情報が、含まれ
る。例えば、メッセージがライト往信(twrite)メッセ
ージの場合、thdr523には、そのメッセージの型、そ
のファイルのファイル識別子、書き込むべきバイト数、
および書込み開始位置のオフセットが含まれる。さら
に、thdr523およびrhdr525には、そのメッセージ
によって送信または受信されるデータを収容するマウン
ト・バッファ533へのポインタ531が含まれる。
【0070】メッセージ720は、引数としてファイル
・チャネル419に対応するエントリ503およびマウ
ント・ヘッダ521を取る関数によって送信される。こ
の関数は、エントリ503を用いてプロトコル・チャネ
ル517の位置の特定し、マウント・ヘッダ521によ
って指定されたメッセージ520が、プロトコル・チャ
ネル517によって指定された接続に出力される。送信
と同時に、そのメッセージを送信中のプロセス102
は、応答を求めて待機する。応答は、受信されると、メ
ッセージ520に置かれ、プロセス102が起こされ、
このプロセスによって、メッセージ520が読まれる。
実施例においては、メッセージ内のタグを用いて、適切
なマウント・ヘッダのデータ構造体521の位置を特定
する。プラン9において所与のファイル・チャネル41
9に対する構造体の位置を特定する役の関数は、その役
を果たすべく、所与のファイル・チャネル419へのポ
インタ505が入っているエントリ503を発見するま
でマウント・サービスの配列502を逐一あたってい
く。ファイル・チャネルは、その装置フィールド315
に対応するエントリ503に対する識別子を入れている
という事実によって識別することが可能である。
【0071】以上のように、図3から図5に示したデー
タ構造により、ファイルに対するファイル記述子を有す
るプロセス102は、そのファイルに対して読出しおよ
び書込みなどのファイル・アクセス関数を実行すること
ができる。しかし、これだけでは、ファイル・ロケータ
関数を実行するには不十分である。なぜなら、これらの
関数には、ファイル記述子だけでなくパス名も関係する
からである。
【0072】名前空間115の表現:図6、8および9
前記のように、新しいプロセス102の名前空間115
は、そのプロセス102の親から継承されるか、親の名
前空間を継承しないプロセス102に対しプラン9が利
用できるようにした「控え」の名前空間から作られるか
のいずれかである。プロセス102の名前空間115が
「控え」の名前空間からいかにして作られるかを図6に
概念的に示した。図6の「控え」の名前空間601は、
単一レベルのファイルを有するルート・ディレクトリ6
03を与えるカーネル・サービスであるルート・サービ
スによって、与えられる。ルート・ディレクトリ603
およびファイル605および615は、他のサービス1
23に属するファイル木構造125のルートが結合され
る可能性のある場所として作用するだけである。実施例
では、ファイル605〜615の集合は、サービスの種
類を機能によって分けるのに役立つ。ファイル名は、機
能に次のように対応する。dev605:サービスが結合
される主な場所である。I/O関数を与えるサービスお
よびその他の種々雑多な機能を有するサービスは、すべ
てdev605に結合される。boot607:プラン9が実
施されているCPUをブートするサービスが結合される
場所である。fd609:プロセスの接続されたファイ
ルに対する複製のファイル記述子を与えるサービスが結
合される場所である。proc610:プラン9のプロセス
に付いての情報を与えるサービスが結合される場所であ
る。env611:プロセス102に対する環境ファイル
を与えるサービスが結合される場所である。環境ファイ
ルは、UNIXの環境変数と同じ機能を果たす。bin6
13:プロセス102によって実行されるプログラムの
ファイルを収容するサービスが結合される場所である。
そして、srv615:プロセス102が利用できるプロ
トコル・ザーバ209に対するプロトコル・チャネル5
17を表すファイルを与えるサービスが結合される場所
である。
【0073】プラン9には、控えの木構造601におけ
るファイル名に結合できる組み込みサービスの集合があ
る。これらのサービスには、プロセス102によって実
行されるプラン9のカーネル関数によってのみ結合でき
るものと、プロセス102によって実行される任意の関
数によって結合できるものとがある。プラン9のパス名
において、組み込みサービスの名前には、その前に文字
「#」が付く。カーネル関数によってのみ結合され得る
組み込みサービスは、次のとおりである。すなわち、#
/:控えの木構造601を与えるカーネル・ルート・サ
ービス、#:プロセス間通信のためにUNIX風のパイ
プを与えるカーネル・パイプ・サービス、および#M:
プロトコル・サービス209に関するトランザクション
を処理するマウント・サービス603である。尚、カー
ネルは、ルート・サービスをプロセス102の名前空間
のルートに結合する。
【0074】プロセス102によって実行される任意の
関数によって結合できる組み込みサービスには、次のも
のがある。#b:ブート・サービス。このサービスは、
ファイルを幾つか有し、このファイルに書き込まれる
と、このファイルによってカーネルは所与のアドレスに
分岐させられ、またこのファイルにより、カーネルは仮
想メモリの所与の位置に書き込むことができる。ブート
・サービスは、概してboot607に結合される。#b:
ビット・サービス。このサービスは、ビット・マップ・
スクリーンおよびマウスを表すファイルを有する。ビッ
ト・サービスは、概してdev605に結合される。#
c:コンソール・サービス。このサービスは、システム
・コンソールを表すファイルを有し、概してdev605
に結合される。#d:複製サービス。このサービスによ
って与えられるファイルは、プロセス102に属する接
続されたファイルに対するファイル記述子であるような
名前を有する。複製サービスは、概してfd609に結合
される。#e:環境サービス。このサービスによって与
えられるファイルは、概してenv611に結合される。
#kname:datakitサービス。このサービスによっ
て与えられるファイルは、nameによって表されるda
takitハードウェア上の会話を表す。このサービスは、
概してdev605に結合される。#p:プロセス・サー
ビス。これは、概してproc610に結合される。#
s:サービス登録サービス。このサービスによって与え
られるファイルは、プロトコル・サービス209に接続
され既に開いているプロトコル・チャネル517を表
す。
【0075】プラン9の実施例において、その名前空間
115を継承しなかったプロセス102がGnot711に
おいて走り始めると、Gnot711上で実行中のカーネル
が、bind処理を実行する。このbind処理によって、前記
の名前空間115には、木構造617として示した形式
が与えられる。木構造609における名前にサービスが
結合されていた場合、この事実は、「=」の後にそのサ
ービス名を付けることによって示される。bind処理によ
って結合ディレクトリが生成された場合、この事実は、
「=」に続く括弧内にその結合ディレクトリの構成要素
をリストとして載せることによって示される。このリス
トは、それらの構成要素が探査される順番になってい
る。木構造617は、bindおよびmountの処理からなる
次のような手順で生成されたものである。bind:ルート
・サービスによって与えられる木構造を、プロセス10
2によって解釈されたパス名におけるルートを表す
「/」に結合する。「/」への参照は、ここでは「/」
603への参照として解釈される。mount(FD,"/",MAFT
ER,""):マウント・サービス203に属するプロトコ
ル・チャネル517を「/」にマウントし、これによっ
て、ルート・サービスのルートおよびプロトコル・チャ
ネル517によって表されるプロトコル・サービス20
9のルートからアクセス可能なファイルから成る結合デ
ィレクトリを生成する。プラン9においては、このプロ
トコル・サービス209によって、デフォルト・ファイ
ルサーバ705内にデフォルトのファイル木構造125
が与えられる。bind("/68020/bin","/bin",MREPL):
デフォルトのファイル木構造125におけるディレクト
リ/68020/binをルートとして持つような木構造を控えの
ファイル木構造601における名前bin613に結合す
る。ディレクトリ/68020/binには、Gnot711(実施例
では、モトローラ社の68020プロセッサを有する)
のための実行可能なコードが入っている。bind("/lib/
rc","/bin",MAFTER):デフォルトの木構造125にお
ける/lib/rcをルートとして持つような木構造を名前bin
613に結合する。ディレクトリ/68020/binは既にbin
613に結合されているので、MAFTERが指定されてい
る。結果として、ディレクトリ/68020/binがディレクト
リ/lib/rcより先に探査されるような結合ディレクトリ
となる。bind("#c","/dev",MREPL):コンソール・サ
ービス#cによって与えられる木構造を名前dev605
に結合する。最後に、bind("#d","/fd",MREPL):複製
サービス#dによって与えられる木構造を控えの木構造
601における名前fdに結合する。
【0076】これらの結合の結果として、プロセッサ1
02は、#M1が接続される先のプロトコル・サービス
209のディレクトリ/68020/binにある「cc」というフ
ァイルをパス名「/bin/cc」によって参照することがで
き、また同じプロトコル・サービス209の/lib/rcに
ある「pwd」というファイルをパス名「/bin/pwd」によ
って参照することができる。勿論、これは、ディレクト
リ/68020/binにファイル「pwd」が無い場合である。同
様に、サービス#cによって与えられるファイル「pi
d」ならば、パス名「/dev/pid」によって参照すること
ができ、またサービス#dによって与えられるファイル
「0」であれば、パス名「/fd/0」によって参照するこ
とができる。
【0077】従って、プラン9のプロセスに対する名前
空間には、名前空間115における名前に対して実行さ
れたbind処理およびmount処理のすべての記録が入って
いなければならない。ここでは、この記録をマウント・
テーブルと称する。本実施例のマウント・テーブルは、
ファイルに対するファイル・チャネル419が、そのフ
ァイルに対するパス名を明示的に表すという事実を利用
している。従って、bindおよびmountの処理記録は、bin
d処理またはmount処理で使用された古いパス名によって
表されるファイルを表すファイル・チャネル419と、
bind処理で使用された新たなパス名によって指定される
ファイルを表すファイル・チャネル419またはmount
で処理で使用されたファイル記述子に対応するファイル
・チャネル419との間に関係を確立することによっ
て、作ることも可能である。勿論、これらのファイル・
チャネル419は、すべて、現在のプロセス・グループ
103がその名前空間を受け継いだ元のプロセス・グル
ープ103の中のいくつかのプロセス102に接続され
ているか、または現在のプロセス・グループ103の中
のいくつかのプロセス102によって接続されているよ
うなファイルを表す。
【0078】図8において、マウント・テーブルの構成
要素は、マウント・テーブル配列802から位置が特定
され、配列802は、ユーザ・データ構造体403から
位置が特定される。図8に示したように、ユーザ構造体
403は、プロセス(PROC)のデータ構造体825
へのポインタ824を含む。各プロセス102は、ユー
ザ構造体403およびプロセス・データ構造体825を
持つ。ポインタ824は、そのプロセス102のプロセ
ス・データ構造体へのユーザ構造体403のポインタで
ある。プロセス・データ構造体825は、さらにマウン
ト・サービス・キューの構造体509におけるポインタ
511によっても示され、かつそれ自体に、プロセス・
グループ(PRGRP)の構造体827へのポインタを
含んでいる。構造体827は、プロセス102が属する
プロセス・グループ103を表す。最終的に、プロセス
・グループ構造体827に、マウント・テーブル配列8
02へのポインタ829が含まれることによって、ユー
ザの構造体403が属するプロセス102に対するマウ
ント・テーブル801の位置づけが可能となる。
【0079】マウント・テーブル配列802は、新たな
パス名またはファイル記述子が結合される古いパス名の
それぞれに対する要素(MTE)からなる。所与のマウ
ント・テーブル配列のエントリ803は、2つのポイン
タからなる。ポインタ805は、古いパス名によって指
定されるファイルを表すファイル・チャネル・データ構
造体419へのポインタである。マウント・テーブル8
01との関係から、このようなデータ構造体419を左
手チャネル(LCHAN)と称する。ポインタ807
は、マウント構造体809へのポインタである。各マウ
ント構造体809は、bindまたはmountの1回の処理結
果を表す。マウント構造体809の内容には、次のもの
が含まれる。参照フィールド(ref)811:これ
は、マウント・テーブル配列のエントリ803によって
示されるもの以外の左手チャネルが、マウント構造体を
使用しているかどうかを示す。終端フィールド813:
これは、マウント構造体809が、結合ディレクトリを
定義するマウント構造体809のリストの最後であるか
どうかを示す。マウント識別子フィールド815:これ
は、このマウント構造体809に対する固有の識別子で
あり、従って、マウント構造体809によって表される
bindまたはmountの処理の結果に対する識別子でもあ
る。ポインタ817:マウント構造体809が、結合デ
ィレクトリを定義しているマウント構造体809のリス
トの一部であり、かつそのリストの最後のマウント構造
体809でない場合、ポインタ817は、そのリストの
次のマウント構造体を示す。ポインタ819:このポイ
ンタは、新たなパス名によって(または、mountの場合
には、ファイル記述子によって)指定されるファイルを
表すファイル・チャネル419を示す。マウント・テー
ブルの関係から、このようなファイル・チャネルを右手
チャネル(RCHAN)804と称する。
【0080】以上から分かるように、各マウント・テー
ブル・エントリ803によって、左手チャネル802と
1つ以上の右手チャネル804との間の関係が確立され
る。さらに、mountまたはbind処理のためにそのパス名
の意味が変更されたファイルを表すファイル・チャネル
419においては、マウント・ポインタ(mountptr)フ
ィールド327が、そのmountまたはbind処理を表すマ
ウント構造体809を示し、さらにマウント識別子(mo
untid)フィールド329には、そのマウント構造体8
09のマウント識別子815が入る。さらに、プロトコ
ル・サーバ209によって与えられるファイルを表すフ
ァイル・チャネル419は、そのファイルを与えるプロ
トコル・サービス209への接続に対するプロトコル・
チャネル517へのポインタをフィールド337に含
む。
【0081】また、図8において、「mount」および「b
ind」処理のreplace、before、およびafterの各オプシ
ョンが、マウント・テーブル801によりいかにして実
施され得るかを説明する。replaceオプションが付いた
場合、新たなパス名を表す右手チャネル804を示すマ
ウント構造体809は、単にマウント構造体809のリ
ストの代わりをする。beforeオプションは、そのマウン
ト構造体809をマウント構造体809のリストの先頭
に追加するが、マウント構造体809のリストがない場
合には、エラーを発生する。afterオプションを付ける
と、そのマウント構造体809が、前記リストの最後に
追加される。この時も、そのリストがない場合には、エ
ラーとなる。結合ディレクトリが探査される場合、前記
リストの最初のマウント構造体809によって示される
右手チャネル804によって表されるディレクトリから
探査される。次に探査されるべきディレクトリは、その
リストの2番目のマウント構造体809によって示され
る右手チャネル804によって表されるディレクトリと
いうふうに、探査される。従って、左手チャネル802
(a)が、パス名/Mを表し、かつ右手チャネル804
(a)が、/Mに結合されたサービス123から1番目
のルート・ディレクトリを表し、かつ右手チャネル80
4(b)が、/Mに結合されたサービス123から2番
目のルート・ディレクトリを表すならば、「chdir("/M
/.")」のようなファイル・ロケータ関数は、「O」を
求めて、最初は1番目のディレクトリを探査し、それが
そこで発見できない場合は、2番目のディレクトリを探
査する。
【0082】前述のように、プロセス102が、システ
ム・コール「forkpgrp」を実行すると、必ず、プロセス
102に対する新たな名前空間115が生成される。
「forkpgrp」は、引数を1つだけ取る。この引数が、0
以外の値を持つときは、forkgrpを実行しているプロセ
ス102に対する既存の名前空間115は、新たな名前
空間115にコピーしてはならない。この引数が値0を
有する場合、その既存の名前空間は、コピーされるべき
ものである。「forkgrp」に「0」でない引数を付けて
実行すると、forkgrpは、単に、プロセス102に対す
る新たなプロセス・グループ構造体827および新たな
マウント・テーブル配列802を作るだけである。そし
て、新たな名前空間115を定義するbindおよびmount
処理に必要とされるようなマウント・テーブル・エント
リ803が、生成される。引数「0」を付けてforkpgrp
が実行されると、その「forkpgrp」システム・コールを
実行中のプロセス102に対するマウント・テーブル配
列802におけるマウント・テーブル配列のエントリ8
03が、新たなマウント・テーブル配列802へとコピ
ーされる。これが行われると、所与のマウント・テーブ
ル・エントリ803によって示される各左手チャネル8
02におけるrefフィールド307およびそのエント
リによって示される各マウント構造体809におけるr
efフィールド811がインクリメントされる。以上か
ら明らかなように、本実施例においてはマウント・テー
ブル801を実施しているので、プロセスに対し新たな
名前空間105を生成することは、比較的効率的かつ安
価な作業である。
【0083】図9において、チャネル構造体301を長
い長方形で表した。チャネル構造体301のラベルは、
そのチャネル構造体301によって表されるファイルの
パス名を示す。第1のマウント・テーブル配列エントリ
803(b)により、ルート「/」上のbindおよびmoun
t操作の結果が記録される。ルート「/」を表すLCH
AN802(b)が、エントリ803(b)および2つ
のマウント構造体809(c)および(d)を介して2
つの右手チャネルに接続されている。これらの右手チャ
ネルのうち、804(c)は、カーネル・ルート・サー
ビスによって与えられるファイル木構造のルートに対す
るもので、804(d)は、#M1が接続されている先
のプロトコル・サービス209によって与えられるファ
イル木構造のルートに対するものである。右手チャネル
804(d)におけるmchanポインタ337は、ルート
への接続を表すプロトコル・チャネル517を示す。
【0084】第2のマウント・テーブル配列エントリ8
03(c)によって、左手チャネル802(c)によっ
て表される、#/bin上のbind操作の結果が記録される。
チャネル802(c)は、2つの右手チャネル---#M1/6
8020/binを表す804(e)および#M1/lib/rcを表す8
04(f)---に接続されている。右手チャネル804
(d)および(e)によって表されるファイルは、#M
1の接続先のプロトコル・サービス209によって与え
られるので、前記の右手チャネルは、共に、サービス2
09への接続を与えるプロトコル・チャネル517への
mchanポインタ337を含む。さらに、左手チャネル8
02(c)によって表されるファイルのパス名#/binに
は、パス名#/が含まれる。そのディレクトリ・ファイル
は、右手チャネル804(c)によって表される。従っ
て、左手チャネル802(c)のマウント・ポインタ
(mountptr)フィールド327には、右手チャネル80
4(c)を示すマウント構造体809(c)へのポイン
タが入る。
【0085】マウント・テーブル901の残りの部分か
ら分かるように、右手チャネル804によって表される
構成要素を含むパス名を表すマウント・テーブル901
における1つ1つのファイル・チャネル419に、その
構成要素を表す右手チャネル804を示すマウント構造
体809へのmountptrフィールド327におけるポイン
タが、含まれる。従って、#/を含むパス名を有するファ
イルをいずれも表すような左手チャネル802(c)、
802(d)および802(e)は、すべてマウント構
造体809(c)を示す。一方、#M1を含むパス名を有
するファイルを双方とも表すような右手チャネル804
(e)および804(f)は、すべてマウント構造体8
09(d)を示す。勿論、mountptrフィールド327
が、マウント構造体809を示すときは、チャネル30
1におけるmountidフィールド329が、そのマウント
構造体809に対するマウント識別子に設定される。
【0086】残りのエントリ803(d)および803
(e)によって、カーネル・ルート・サービス#/によっ
て与えられる「控え」のディレクトリ「dev」および「f
d」への組み込みカーネル・サービスの結合が、記録さ
れる。この場合、各エントリ803によって、控えのデ
ィレクトリを表す左手チャネル802は、組み込みカー
ネル・サービスを表す右手チャネル804に関係付けら
れる。組み込みカーネル・サービスは、プロトコル・サ
ービスではないので、右手チャネルは、プロトコル・チ
ャネル517へのポインタは持っていない。
【0087】名前空間115におけるパス名の分析:図
10および11前記のとおり、マウント・テーブル80
1は、プラン9のファイル・チャネル419は、いずれ
も、そのファイル・チャネル419によって表されるフ
ァイルのパス名を明示的に表すという事実を利用してい
る。プラン9のオペレーティングシステムに、「bin
d」、「mount」、「chdir」および「open」などのファ
イル・ロケータ関数において、パス名が提示されると、
オペレーティングシステムは、そのパス名によって指定
されたファイルを表すファイル・チャネル419を得る
ことによって、そのパス名を分析して、そのファイル・
チャネル419へのポインタを返す。プロセス102の
ファイル木構造117は、サービス123によって与え
られるファイル木構造で構成されるので、パス名の分析
には、マウント・テーブル801および各サービス12
3が応答するサービス要求が、共に関与する。これらの
特別なサービス要求は、walkサービス・ファイル・ロケ
ータ要求であり、場合によっては、attachサービス・フ
ァイル・ロケータ要求である。
【0088】パス名を分析するプラン9のカーネル関数
を(チャネルへの名前として)「namec」と称する。こ
の関数の流れ図を図10に示す。コールの端子1003
に示したように、namecが引数として取るものは、パス
名、namecを用いるシステム・コールが必要とするファ
イル・アクセスの種類のコード、およびnamecによって
開かれるファイルがいかにして開かれるべきかを示すコ
ードである。namecは、チャネルへのポインタを返す。n
amecは、パス名の最初の文字は特に処理するが、そのほ
かは、パス名を、文字「/」によって区切られた名前の
リストとして、扱う。名前の各々を要素と称する。
【0089】namecの最初の部分(1067)では、パ
ス名が始まる点を表すチャネル301を得る。そのチャ
ネルを得る要領は、そのパス名の始まり方による。始ま
り方には3つの可能性がある。パス名が、完全なパス名
の場合、そのパス名は、「/」で始まる。パス名が、組
み込みカーネル・サービスによって与えられるファイル
を示し、かつそのサービスが、もう1つのファイル名に
まだ結合されていない場合、「#」で始まる。パス名が
ワーキング・ディレクトリで始まる場合、ファイル名で
始まる。
【0090】パス名が、「/」で始まる場合、判断ブロ
ック1005の分岐yが取られ、ルートに対するファイ
ル・チャネル419の内容が、チャネル301「ncha
n」にコピーされる(1009)。前記のように、ルー
トのファイル・チャネル419は、そのプロセスに対す
るユーザ・データ構造体403から位置を特定すること
ができる。
【0091】パス名が他のもので始まる場合、ブロック
1005の分岐nが取られ、ブロック1007におい
て、最初の要素を検査して、それが「#」かどうかを判
断する。「#」ならば、「#」に続く文字によって指定
されるカーネル組み込みサービスによって、attachサー
ビス・ファイル・ロケータ要求が実行される。attachロ
ケータ要求の結果は、組み込みサービスによって与えら
れるファイル木構造125のルートを表すチャネル30
1である。所与のサービスがattach要求を処理する要領
は、そのサービスによる。例えば、ルート・サービスに
対するattach関数は、包括的なattach関数であるdevatt
achを呼び出す。devattachは、引数として組み込みサー
ビスの名前、この場合は「/」、を取る。devattach
は、新たなチャネル・データ構造体301を獲得し、qi
dフィールド323をルートを指定する値に設定し、さ
らに型フィールド315を引数「/」から得た値に設定
する。最初の要素が、「/」でも「#」でもない場合、
そのパス名はワーキング・ディレクトリで始まる。そこ
で、ブロック1013において、ワーキング・ディレク
トリを表すファイル・チャネル419をnchanにコピー
する。このファイル・チャネルは、プロセスに対するユ
ーザ・データ構造体403から位置を特定することがで
きる。
【0092】1069で示した次の段階では、nchanに
よって表されるファイルに対するパス名が、bindまたは
mountの関数コールにおいて古いパス名として使用され
たかどうかを調べる。まず、パス名の最初の要素を得
る。これを行う関数により、構造体403におけるフィ
ールドELEM405を次の要素であるファイル名に設
定する。その上で、プロセス102に対するユーザ・デ
ータ構造体403からプロセス・グループ103に対す
るマウント・テーブル配列802の位置を特定する。各
マウント・テーブル・エントリ803に対する左手チャ
ネル802を次々にnchanと比較してゆき、nchanに「等
しい」ものが見つかるまで続ける。ここで言う「等し
い」とは、2つのチャネル301が同じサービス123
における同じファイルを表す、すなわち、それらが、そ
れらの型フィールド313、devフィールド315、お
よびqidフィールド323に等しい値を有するというこ
とである。
【0093】該当する左手チャネル802が見つからな
い場合、判断ブロック1019の分岐nが取られ、見つ
かった場合、分岐yが取られて、nchanに等しい左手チ
ャネル802を有するエントリ803によって示される
右手チャネル804の内容をnchanにコピーする(10
21)。その上で、nchanにおけるmountptrフィールド
327を、それが右手チャネル804を示すマウント構
造体809を示すように、設定し、さらにmountidフィ
ールド329をマウント構造体809のmountidの値に
設定する。従って、パス名がbindまたはmountのコール
において古いパス名として使用された場合、nchanは、
この時点で、右手チャネル804によって表されるファ
イルを表す。それ以外の場合は、nchanは不変である。
【0094】図10の10Bにおいて、namecの一部1
071は、パス名の残りの各要素を調べるループ102
5からなる。このループを通過する度に、「walk」カー
ネル関数へのコールが行われる。このコールにおいて使
用される引数は、nchan、現在の要素(ブロック102
9)、および現在の名前がそのファイルを表す左手チャ
ネル802を持つことができるか(これは、カーネル組
み込みサービス名の場合に限って不可能である)どうか
を示すフラグである。さらに詳細に後述するが、walk関
数は、要素によって指定されたファイルを表すチャネル
301を返す。ブロック1031において、そのチャネ
ル(図10ではtchanで示す)をnchanに割り当てる。そ
して、次の要素をパス名から得る(ブロック103
3)。前のように、USER構造体403にあるELE
Mフィールド405を次の要素に設定する。ループが終
了すると、パス名の最後の要素が処理されるべく残る。
【0095】最後の要素を処理する要領は、いずれのシ
ステム・コールがnamecを呼び出したかによる。それがc
reateシステム・コールの場合、最後の要素は、新たな
ファイルの名前を表し、それ以外の場合は、アクセスす
るべきファイルを表す。いずれのシステム・コールがna
mecを呼び出したかは、アクセス・モード引数によって
示され、判断ブロック1055に示したように、以降の
処理は、その引数に依存する。尚、ブロック1057に
示すように、アクセス・モード引数により、ファイルの
生成が指示されている場合、最後の要素およびtchanを
用いてcreateサービス・ファイル要求を行う。ただし、
この時、tchanは、新たなファイルが生成されるべきデ
ィレクトリに対するファイル・チャネル419のコピー
である。結果的に、tchanは、その型フィールド313
およびdevフィールド315に、ディレクトリおよびqid
フィールド323におけるそのディレクトリに対するqi
dを含むサービス123を指定する値を収容する。creat
eサービス・ファイル要求の結果として、新たなファイ
ルがm生成され、その名前として最後の要素が割り当て
られ、さらに、tchanのqidフィールドが、新たなファイ
ルのqidに設定される。
【0096】namecを呼び出したシステム・コールがcre
ate以外である場合、最後の要素は、既に存在するファ
イルの名前である。この場合も、最後の要素を用いてwa
lk関数を呼び出し、tchanを得る。このtchanは、最後の
要素によって参照される(1059)ファイルを表す。
その上で、tchanのフィールドをnamecのアクセス・モー
ドおよびオープン・モードの引数により要求されるとお
りに設定し(1061)、さらにtchanをnchanにコピー
する(1063)。戻り端子1065に示したように、
パス名引数において指定されたファイルを表すチャネル
301としてnchanが返される。
【0097】図11の開始端子1103において、walk
は、チャネル・データ構造体301、パス名の一要素、
およびその要素へのマウントが有効かどうかを示すフラ
グを取る。チャネル・データ構造体301は、その要素
の名前を有するファイルを求めて探査するべきディレク
トリを表す。そのディレクトリか、またはそのチャネル
・データ構造体によって表されるディレクトリと結合し
たディレクトリにおいて、その要素の名前が発見された
場合、この関数は、そのパス名の要素によって指定され
るファイルを表すチャネル・データ構造体301を返
す。
【0098】そのアルゴリズムは、およそ次のとおりで
ある。まず、引数として使用されるチャネル301の型
フィールド313および装置フィールド315によって
指定されるサービスに対し、walkファイル・サービス要
求を行う。このwalkファイル・サービス要求には、引数
として使用される要素が含まれる。このファイル・サー
ビス要求は、成功した場合、その要素によって指定され
るファイルに対するチャネル301を返す。その上で、
マウント・テーブル308の検査によって、walk要求に
よって返されたチャネル301が、左手チャネル802
かどうかを判断し、そうでない場合、walk要求によって
返されたチャネルは、walk関数によって返される。そで
ある場合、その左手チャネル802に対応する右手チャ
ネル804をwalk関数によって返されることになってい
るチャネル301にコピーし、さらにチャネル301の
mountptrフィールドおよびmountidフィールドを、左手
チャネル802を示すマウント・テーブル配列エントリ
803によって示されるマウント・データ構造体809
の要求に合わせて設定する。
【0099】ファイル・サービスが、要素によって指定
される名前を有するファイルをチャネルによって指定さ
れたディレクトリにおいて発見できない場合、walkファ
イル・サービス要求は、成功しない。このようなことが
起こる理由は2つある。すなわち、そのディレクトリに
別な名前が結合されているか、または要素に対応するフ
ァイルがそのディレクトリに存在しないかである。
【0100】前記の第1の場合、別の名前が結合された
ときに、mountptr327およびmountid329により、
生成されたマウント構造体809を指定し、さらにその
マウント構造体809によって示される右手チャネル8
04において指定されるサービスについて、walkサービ
ス・ファイル要求を再び試みる。そのwalkサービス・フ
ァイル要求が、成功した場合、処理を既に説明したよう
に続ける。失敗した場合、やはり、前記のいずれの可能
性もある。ここでは、要素に対応するファイルがそのデ
ィレクトリに存在しないという問題を仮定する。この場
合も2つの可能性がある。すなわち、ファイルが実際に
存在しないか、または探査されたディレクトリが結合デ
ィレクトリの一部であり、かつその結合ディレクトリの
一部である他のディレクトリが依然として探査されてい
ない可能性がある。ファイルが実際に存在しない場合に
は、実際に探査されたディレクトリに対するマウント構
造体809における終端フィールド813によって、マ
ウント構造体809がその結合ディレクトリを構成する
マウント構造体809のリストの最後のものであること
が示されるはずである。そうでなければ、マウント構造
体809におけるネクスト・フィールド817が、結合
ディレクトリにおける次のディレクトリに対するマウン
ト構造体809を示すことになり、その次のマウント構
造体から、探査するべき右手チャネル804を決定する
ことができる。この場合、次のマウント構造体によって
示される右手チャネル804を用いて、walkサービス・
ファイル・ロケータ要求を繰り返す。
【0101】詳細には、ブロック1105において、最
初は、これがサービス・ファイル・ロケータ要求を行う
1回目であることを示すフラグを設定し、引数として与
えられたチャネルをcchanにコピーする。ブロック11
07において、cchanおよび要素を用いてwalkサービス
・ファイル・ロケータ要求を行う。そのサービスがこの
要求に応じて実行する動作は、そのサービスに依存す
る。その2つの例を説明する。ルート・サービスでは、
walk要求に応じて、cchanがルート・サービスのルート
のために予約されているqidフィールド323に特別な
値を持っているかどうかを判断し、さらに、持っている
場合、要素がルート・サービスにより「控え」として与
えられる名前のうちの1つであるかどうかを判断する。
後者の場合、cchanのqidフィールド323を、前記の控
えの名前に対し予約された特別な値に設定する。前記以
外の場合、walkサービス・ファイル・ロケータ要求は失
敗する。
【0102】マウント・サービス203は、walk要求に
対し次のように応答する。前記のように、プロトコル・
サービス209によって与えられるファイルを表すチャ
ネル301のdevフィールド315の一部に、マウント
・サービス配列エントリ503を指定する識別子が含ま
れる。その識別子を用いて、マウント・サービス203
は、プロトコル・サービス209に対するプロトコル・
チャネル517に対するマウント・サービスの待ち行列
509の位置を特定し、walkサービス・ファイル・ロケ
ータ要求に必要なtmessageに対するマウント・ヘッダ5
21を割り当て、さらにチャネルから得たファイル識別
子および要素をtmessageに配置する。プロトコル・サー
ビス209が、チャネルからのファイル識別子によって
指定されたディレクトリにおける要素によって指定され
る名前の付いたファイルを有する場合、プロトコル・サ
ービス209は、ファイルに対するqidが入ったrmassag
eを返し、そのqidは、cchanのqidフィールド323に置
かれる。
【0103】walk要求が成功した場合、チャネル301
がmountまたはbind操作の結果ではないことを示すよう
に、cchanのフラグ321が設定される(1119)。
次に、walk要求が2回以上行われたかどうかを判断する
(1121)。2回以上行われた場合、引数として受け
取ったチャネルは、返されたものではないことになり、
その引数として受け取ったチャネルは、閉じられる(1
123)。このクローズ操作によって、そのチャネルの
refフールドにある計数が、デクリメントされるが、こ
の時、そのrefフィールドが値0を有する場合、clunkサ
ービス要求がそのチャネルのdevフィールド315によ
って示されるサービスに送られ、さらにチャネル構造体
301がフリー・リストに返される。walk要求が行われ
たのが、これでまだ一回目である場合、このステップは
省略される。次に、判断ブロック1133において、cc
hanが、他の構成要素が結合されている可能性のあるパ
ス名の構成要素を表すかどうかを判断する。この状態
は、「#」以外の構成要素に対して成立し、かつwalkの
「mountok」引数によって示される。マウントされた構
成要素があり得ない場合、マウント・テーブル801を
調べる必要はなく、cchanはそのまま返される(113
5)。そうでない場合、cchanに等しい左手チャネル8
02を求めて、マウント・テーブル801を調べ、該当
する左手チャネル802を発見した場合、左手チャネル
802に対応する右手チャネル804の値を、右手チャ
ネル804を示すマウント構造体809に対するマウン
ト・ポインタおよびマウント識別子と共に、cchanにコ
ピーする。cchanをこのように変更して返す(ブロック
1137〜1143)。
【0104】walkサービス要求ブロック1107に戻
り、その要求が失敗した場合、まず、cchanが、mountま
たはbind要求の結果であるかどうかを判断する。そうで
あるならば、探査に失敗したのであり、結合子「B」の
ように、walk関数は、失敗を示す0を返す(端子114
9)。ブロック1145および1147において、walk
要求が2回以上行われた場合、cchanをクローズする。
次に、cchanのマウント・ポインタ・フィールド327
を用いて、マウント構造体809の位置を特定する(ブ
ロック111)。マウント構造体809の終端フィール
ド813により、そのマウント構造体809が、結合デ
ィレクトリを定義するマウント構造体809のリストの
最後にあることが示されている場合、その探査は失敗し
たのであり、walkは、結合子Bにおいて終了する。そう
でない場合、現在のマウント構造体809のネクスト・
ポインタ817の方が先であるから、次のマウント構造
体809によって示される右手チャネル804を一時的
なチャネルtchanにコピーする(ブロック1115)。
次に、tchanにおけるmountptrフィールド327を、次
のマウント構造体809を示すように設定し(ブロック
1125)、tchanをcchanにコピーし(1127)、fi
rstを0に設定し、さらに、結合子「D」によって示し
たように、ブロック1107において、walkサービス要
求を繰り返す。結合子Dによって定義されるループ11
31は、ブロック1107におけるwalk要求が成功する
か、または要素に対応するファイルが発見されなかった
ことが明かとなるまで、繰り返される。
【0105】ファイル・ロケータ操作の実施 プラン9における名前の分析が分かったので、「ope
n」、「bind」および「mount」などのファイル・ロケー
タ・システム・コールの実施は容易である。まず、open
システム・コールは、パス名、動作モードを指定する整
数を引数として取り、オープンされたファイルのファイ
ル記述子417を返す。このシステム・コールは、最初
に、現在はチャネル301を示していないファイル記述
子配列413の要素415の位置を確認する。その要素
の番号が、新たに開かれたファイルに対するファイル記
述子である。次に、システム・コールは、namecを呼び
出す。この時の引数は、パス名、オープンを指定するア
クセス・モード指定子、およびオープンを行うモードで
ある。前記のように、namecは、パス名を分析し、パス
名によって示されたサービスがパス名によって指定され
たファイルにある処理を行うことを指定し、かつその時
点でチャネル301が当該ファイルを表すファイル・チ
ャネル419であるように設定されたフィールドを備え
たチャネル301を返す。openシステム・コールは、そ
のファイル・チャネル419へのポインタをファイル記
述子配列の要素415に置いて、そのファイル記述子を
返す。
【0106】好ましい実施例における「bind」システム
・コールは、引数として、新たなパス名へのポインタ、
古いパス名へのポインタ、およびそのbindがreplace、b
eforeまたはafterのオプションを付けて行われているか
どうかを示すフラグを取る。このシステム・コールは、
このbindが、成功した場合は「1」の値を、失敗した場
合は「0」の値を有する整数を返す。このシステム・コ
ールは、bindとmountの両方を行う「bindmount」と称す
るカーネル関数を呼び出す。「bind」または「mount」
システム・コールによって与えられるフラグによって、
いずれを行うべきかが示される。「bind」システム・コ
ールが示されると、bindmountは、第1のパス名を付け
てnamecを呼び出して、第1のパス名によって指定され
たファイルを表す第1のチャネル301を得る。次に、
第2のパス名を付けてnamecを呼び出して、第2のパス
名によって指定されたファイルを表す第2のチャネル3
01を得る。次の段階で、カーネル・マウント関数を呼
び出す。この関数は、bind操作の必要に応じてマウント
・テーブル801を配置し直す。
【0107】図12において長方形1203で示したよ
うに、カーネル・マウント関数は、引数として、古いチ
ャネル、新たなチャネル、およびフラグを取り、bindま
たはmountの結果得られたマウント構造体809のマウ
ント識別子を返す。フラグは、bindまたはmountのシス
テム・コールのオプション・フラグから設定される。現
在の場合、古いチャネルに対する実際の引数は、第1の
チャネル301であり、新たなチャネルに対する実際の
引数は、第2のチャネル301である。
【0108】このアルゴリズムの最初のステップは、引
数として受け取ったチャネル301についてbindまたは
mountの処理を実行することができるかどうか判断する
ことである(1205)。両方のチャネルが、同じファ
イルを指定している(すなわち、同じqid323を持
つ)場合、または古いチャネルが、ディレクトリでない
ファイルを表し、かつフラグによってreplace以外のオ
プションが指定されている場合、処理は許されない。処
理が許されない場合、1207において、エラーとな
る。次に、既に説明したように、マウント・テーブル8
01を探査して、古いチャネルが既にマウント・テーブ
ル801にある左手チャネル802に等しいかどうかを
判断する。等しい場合、新たなマウント・テーブル・エ
ントリ803は全く必要ないので、ブロック1211は
省略することができる。等しくない場合には、ブロック
1211において、空のマウント・テーブル・エントリ
803を入手して、そのエントリ803のポインタ80
5を古いチャネルを示すように設定する。
【0109】次に、新たなチャネル301のフラグ・フ
ィールド321を、そのチャネルが右手チャネル804
であることを示すCMOUNTを示すように設定する(121
3)。また、フラグ・フィールド321により、CREATE
オプションを示すこともできる。このオプションは、右
手チャネル804によって表されるディレクトリにファ
イルを生成しても良いことを指定する。このオプション
が指定されると、新たなチャネル301のフラグ・フィ
ールド321が、CMOUNTオプションだけでなくCREATEオ
プションも示すように設定される(1215、121
7)。ここで、マウント関数は、新たなマウント構造体
809を入手して、古いチャネルに対応する左手チャネ
ル802に対するマウント・テーブル・エントリを新た
なチャネル301から作られている右手チャネル804
に連結する。新たなマウント構造体におけるポインタ8
19が、新たなチャネル301を示すように設定される
(1219)。
【0110】結合子「A」に続いて、switch文1221
において、フラグ引数がreplace,before、またはafter
のオプションのいずれかを示すかどうかによって、3つ
の分岐の中の1つを指定する。before分岐1223の場
合、ブロック1221において、検査により、別のディ
レクトリが既に左手チャネル802に結合されているか
どうかを判断する。結合されていない場合、結合ディレ
クトリは不可能であり、beforeオプションはエラーであ
る(1231)。そのようなディレクトリが既に存在す
る場合、replaceオプション1225の場合にように処
理が継続する。replaceオプションにおいては、、古い
チャネル301と同等の左手チャネル802に対応する
マウント構造体809のリストの先頭に、新たなマウン
ト構造体809が置かれる(1233)。replaceオプ
ション1225が使用されている場合、新たなマウント
構造体809における終端フィールド813が、リスト
の最後を示すように設定される(1234)。afterオ
プション1227においては、最終的に、ステップ12
35において再び検査を行い、結合ディレクトリが可能
かどうかを判断し、そうでない場合、エラー1237と
なる。可能ならば、ブロック1239で示したように、
マウント構造体809のリストの末尾に新たなマウント
構造体809が置かれる。次に、mountは、新たなマウ
ント構造体809に属するマウント識別子を返す。bind
mountを続けると、この関数は、新旧のチャネル301
をクローズし、それらのうち、マウント・テーブルにも
追加されず、フリー・チャネルのリスト以外には使用さ
れないものを返す。
【0111】システム・マウント関数コールは、新たな
パス名引数がないという点で、システム結合関数コール
とは異なる。その代わり、新たなパス名引数は、オープ
ン・プロトコル・チャネル517を表すファイル記述子
417である引数によって置き換えられている。そのよ
うなファイル記述子417を得る方法は、さらに詳細に
後述する。さらに、システム・マウント関数コールは、
マウントされているプロトコル・サービス209へと渡
されるデータからなる引数を含む。そのフラグに応じ
て、bindmountは、最初にファイル記述子417および
ファイル記述子配列413を用いて、ファイル記述子引
数によって指定されたプロトコル・チャネル517の位
置を特定する。
【0112】次に、プロトコル・チャネル517を用い
てマウント・サービス・アタッチ処理を実行する。アタ
ッチ処理において最初に行うことは、使用されていない
マウント・サービス配列要素503の位置を特定するこ
とである。これが終わると、既に説明した包括的なdeva
ttach処理を実行する。ただし、これを呼び出すのに使
用する引数は、マウント・サービス203を指定する
「M」である。devattachは、その型フィールド313
がマウント・サービス203を指定するように設定され
たチャネル構造体301を返す。そのマウント・サービ
ス203に対するアタッチ関数は、そのチャネルのdev
フィールド315を使用されていないマウント・サービ
ス配列要素503に対する識別子の値に設定し、さらに
前記の使用されていない要素のポインタ505を、それ
がチャネル構造体を示すように、設定する。次に、プロ
トコル・チャネル引数を用いて、引数によって指定され
たプロトコル・チャネル517に対しマウント・サービ
ス・キュー構造体509によって表されるメッセージ・
キューが既に存在するかどうかを判断する。存在しない
場合、割り当てられている。ここで、devattachによっ
て返されたチャネル301に対する識別子およびプロト
コル・サービス209に渡されるはずであった引数が入
ったattach往信メッセージ(tmassage)が送られる。返
信メッセージが戻ったとき、それには、プロトコル・サ
ービス209におけるファイル木構造125のルートに
対するqidが入っている。このqidは、devattachによっ
て返されたチャネル301のqidフィールド323およ
びmqidフィールド339へとコピーされ、さらに、メッ
セージ・キューが属するプロトコル・チャネル517へ
のポインタが、pchanフィールド337にコピーされ
る。次に、マウント・サービス・アタッチ処理の結果得
られたチャネルは、新たなチャネル301引数としてマ
ウント関数に与えられる。bindmount関数についてmount
が指定されると、bindmountは、ファイル記述子配列4
13のプロトコル・チャネル517をクローズし、さら
にファイル記述子配列413からそれを削除することに
よって、終了する。
【0113】オープン・プロトコル・チャネル517の
獲得:図13 マウント・システム・コールの引数は、オープン・プロ
トコル・チャネルのファイル記述子417が含まれる。
プロトコル・チャネル517は、プロトコル・サービス
209への接続であるファイルを表すチャネル301で
ある。好ましい実施例において、接続は、ローカル・プ
ロトコル・サービス211がメッセージを送受信する手
段であるパイプにおけるファイル、または通信システム
を介した遠隔のプロトコル・サービス213との会話を
表すファイルのいずれも良い。実施例においては、パイ
プにおけるファイルに対するファイル記述子は、そのパ
イプを生成する「pipe」システム・コールによって与え
られる。通信システムを介する会話を表すファイルに対
するファイル記述子は、次のようにして獲得される。ま
ず、「dial」関数が呼び出される。この関数は、その会
話を表すファイルを含むディレクトリのパス名を返す。
次に、その会話を表すファイルのパス名が、「open」関
数で用いられ、そのopen関数は、その会話を表すファイ
ルに対するファイル記述子を返す。
【0114】プロトコル・チャネル517が表す接続の
対象であるプロトコル・サービス209をプロセッサ1
02によってsrv615に登録することにより、プロト
コル・チャネル517を一般的な用途に使用できるよう
にすることができる。すべてのサービスについて言える
ことであるが、srv615は、それがファイルとして管
理する資源を提供する。従って、プロトコル・サービス
209をsrv615に登録するためには、そのプロトコ
ル・サービス209を表すファイルをsrvによって表さ
れるディレクトリに生成し、さらにその生成したファイ
ルへの接続を表すファイルに対するファイル記述子を書
けばよい。
【0115】勿論、システム生成関数を呼び出せば、sr
vへのファイル生成要求が発生することになり、srvは、
この生成要求に応じて、そのファイルに対するディレク
トリ・エントリを作り、ディレクトリ・エントリに対す
るqidを生成されたファイルに対するチャネル301の
フィールド323に置き、さらにディレクトリ・エント
リへのポインタを補助フィールド333に置く。同様
に、システム・ライト・処理の実行も、srvへのファイ
ル書込み要求を発生する結果となり、srvは、この書込
み要求に応じて、ファイル記述子によって指定されるプ
ロトコル・チャネル517へのポインタをプロトコル・
サービス209へのディレクトリ・エントリに置く。プ
ロトコル・サービス209を表すファイルの名前を用い
て、オープン・システム・コールを行うと、結果的に発
生するsrv615に対するオープン・ファイル要求によ
って、srv615は、プロトコル・サービス209に対
するプロトコル・チャネル517を返すことになる。そ
して、openにより、既に述べたファイル記述子417と
共にプロトコル・チャネル517が与えられ、マウント
・システム・コールにおいて、そのファイル記述子41
7を使用することもできる。
【0116】図13において、srv615によって維持
されているディレクトリは、ディレクトリ・エントリ1
303の木構造からなる。各ディレクトリ・エントリ1
303は、情報1305および多数のポインタからな
る。これらのポインタによって、ディレクトリ・エント
リ1303が1つの木構造へと組織される。この木構造
の各レベルに1つ以上のディレクトリ・エントリ130
3があり、所与のレベルのエントリ1303は、内側の
ノード、すなわち木構造の次に低いレベルの点、または
プロトコル・サービス209を表す葉ノードのいずれか
である。以下において、内側のノードを「親」と称す
る。所与の親を有するエントリ1303は、次ポインタ
1311および後ポインタ1313によって子リスト1
310へと接続される。さらに、所与の子リスト131
0の各エントリ1303は、その親エントリ1303へ
のポインタ1309を有する。親エントリ1303は、
さらに子リスト1310における最初のエントリ130
3へのポインタ1307も有する。葉ノードは、その葉
ノードによって表されるプロトコル・サービス209へ
の接続を表すプロトコル・チャネル517へのポインタ
1314を持つことがある。さらに、エントリ1303
が、チャネル301によって表される場合、そのチャネ
ル301の補助フィールド333には、そのチャネルに
よって表されるエントリ1303へのポインタ1302
が収容される。
【0117】ディレクトリ情報1305は、次のフィー
ルドからなる。名前1315:プロトコル・サービス2
09が登録されている場合、それを特定するために使用
される名前である。qid1317:そのディレクトリを
表すチャネル301におけるディレクトリ・エントリ1
303を表すqidである。type1319およびdev132
1:これらによりsrv615を指定する。モード132
3:エントリ1303によって表されるディレクトリが
開かれている場合、そのオープン・モードを示すように
設定される。atime1325:いつエントリ1303が
割り当てられたかを示す。mtime1327:いつエント
リ1303の親が割り当てられたか、またはエントリ1
303が親ならば、最後に子が生成された時間を示す。
長さ1329:エントリ1303が親ならば、子のエン
トリ1303の数を表す。uid1331:そのエントリ
1303を所有するユーザを命名する文字列値である。
gid1333:uidにおいて特定されるユーザが所属する
グループを識別する文字列値である。
【0118】以上、プラン9のオペレーティングシステ
ムにより、プロセスごとの名前空間がどのように実施さ
れるか、その名前空間がbindおよびmount処理によりど
のように変更できるか、ファイルの位置を特定するため
に名前空間をどのように利用できるか、さらにそのよう
に特定されたファイルに対してファイル処理をどのよう
に実行できるかについて、詳細に示した。以下におい
て、プロセスごとの名前空間にとり特に有利な2つの用
途を調べる。
【0119】プラン9のウィンドウシステム:図14〜
23ウィンドウシステムとは、オペレーティングシステ
ムの下で実行中のプロセス102にグラフィックス端末
上のウィンドウを与え、かつキーボードまたはマウスの
ような指示装置からウィンドウへの入力に応答するよう
な、オペレーティングシステムのサブシステムである。
Xウィンドウのような従来技術のウィンドウシステム
は、大きく且つ複雑なシステムである。プラン9がプロ
セスに利用可能な関数をファイル木構造として定義し、
さらにプラン9のプロセス102がそれ自体の名前空間
115を定義できることから、Xウィンドウなどの従来
技術のウィンドウシステムとほぼ同じ機能を備えながら
も、それより相当少ないコードしか必要としないような
ウィンドウシステムを構築することが可能となった。現
在のところ好ましい実施例は、Xウィンドウの大きさの
1/10以下である。さらに、プラン9のウィンドウシ
ステムの設計で使用される原理は、他のオペレーティン
グシステムに対する異なるウィンドウシステムの設計に
も使用することができる。以降、はじめにプラン9のウ
ィンドウシステムの概要を提示し、その上で、その効率
の原因となるシステムのある側面をさらに詳細に説明す
る。
【0120】プラン9のウィンドウシステムの概要:図
14および15 プラン9の端末、すなわちGnot711には、キーボー
ド、グラフィック・ディスプレイ(graphics displa
y)、およびマウスが含まれる。これらの装置は、カー
ネル・サービス#bおよび#cをディレクトリ/dev61
9に結合することにより、プラン9のプロセス102の
名前空間115にまとめてもよい。そのような結合を実
行すると、/dev/mouseはマウスを示し、/dev/consはキ
ーボードを示し、/dev/bitbltはグラフィック・ディス
プレイを示す。これらのファイルを開き、リードおよび
ライト処理を適切に行うことにより、グラフィック操作
を行うことができる。例えば、マウスの動きは、/dev/m
ouseへのリード処理によって決定され、/dev/bitbltに
書き込むことによってグラフィック・ディスプレイ上に
表示が生成される。
【0121】プラン9のウィンドウシステムは、プロト
コル・サービス209として実施される。ウィンドウ・
プロトコル・サービスは、Gnot711上にウィンドウを
有するファイルのインスタンスをプロセス102に与え
る。プロセスは、ウィンドウ・サービスによって与えら
れたファイルを読み・書きすることによって、ウィンド
ウを制御する。ウィンドウ・サービスは、ファイル/dev
/mouse、/dev/consおよび/dev/bitbltを含む名前空間を
有するプロセスの集合によって実施される。さらに詳細
に後述するように、これらのファイルをいかなるサービ
ス123によって与えてもよい。必要なことは、そのフ
ァイルに対するリードまたはライト処理が、結果的に、
端末に表示されたウィンドウからデータを読んだり、端
末に表示されたウィンドウにデータを書いたりすること
になるということだけである。最も一般的には、それら
のファイルは、カーネル・サービス#bおよび#cによ
って与えられるか、または問題のウィンドウ・プロトコ
ル・サービスがそのクライアントであるような別のウィ
ンドウプロトコル・サービスによって与えられ、さらに
それらのファイルによって制御されるウィンドウが、Gn
ot711において表示される。
【0122】ウィンドウ・サービスは、プロトコル・サ
ービス209であるため、リードおよびライト処理は、
マウント・サービス203に至る。マウント・サービス
203では、それらの処理をウィンドウ・サービスへの
往信メッセージ(tmassage)に変換し、そのウィンドウ
・サービスから返信メッセージ(rmessage)に入ったデ
ータが戻るのを待つ。そのデータが、マウント・サービ
ス203に戻ると、そのデータは、リードまたはライト
処理を行ったプロセス102に返される。ウィンドウ・
サービスは、tmessageに応じて、それらのtmessageをウ
ィンドウ・サービスの名前空間の一部であるファイル/d
ev/mouse、/dev/consおよび/dev/bitbltに対するリード
およびライトへと変換する。これらのリードおよびライ
トへの応答は、rmessageに変換されて、マウント・サー
ビス203に返される。このように、ウィンドウ・サー
ビスは、その名前空間におけるファイル/dev/mouse、/d
ev/consおよび/dev/bitbltを複数のプロセス102の間
で効率的に多重化する。または、換言すれば、ウィンド
ウ・サービスは、プロセス102に仮想端末の集合を与
える。
【0123】図15において、ルート1502は、次の
ファイルからなるディレクトリである。bitblt150
3:このファイルに書き込むと、プロセス102に対す
るウィンドウにおけるグラフィック表示が変化し、この
ファイルから読み出すと、プロセス102に対するウィ
ンドウにおける表示に関する情報が返される。cons15
05:このファイルのリードにより、Gnot711に接続
されたキーボードからの入力を獲得し、このファイルへ
のライトによって、文字がカーソル位置の表示に出力さ
れる。hold1507:このファイルにより、cons150
5からのリードにおいて得られた新たな行の文字に対し
プロセス102がいかに応答するべきかを示す。mouse
1509:このファイルのリードにより、Gnot711に
接続されたマウスからの入力を得る。nbmouse511:
このファイルのリードによって、同様にマウスからの入
力を得るが、マウスの状態に変化は待たない。rcons1
513:このファイルのリードによって、Gnot711に
接続されたキーボードから未処理の入力を得る。snarf
1515:このファイルは、ウィンドウ間のデータ転送
に使用される;ライトによって、ウィンドウからsnarf
ファイルにデータが書き込まれ;リードによって、snar
fファイルのデータがウィンドウに読み込まれる。
【0124】プロセス102が、その名前空間における
ファイル木構造1501をマウントする度に、プロセス
102は、ファイル木構造1501の新たなインスタン
スを受け取る、すなわち、そのファイル木構造1501
におけるファイルのインスタンスは、そのマウント処理
を行ったプロセス102から結果的に生じる接続を介し
てしかアクセスできない。サービス123の概要におい
て指摘したように、ファイル木構造1501がプロセス
102の名前空間においてマウントされる度に、ウィン
ドウ・サービスは、ファイル木構造1501の新たなイ
ンスタンスを与えることができる。これは、ウィンドウ
・サービスによってプロセス102に与えられるファイ
ルを表すチャネル301が、ウィンドウ・サービスによ
って与えられるqidによって、そのファイルを識別する
からである。従って、1つのプロセス102に対するフ
ァイル/dev/bitbltは、別のプロセス102に対するフ
ァイル/dev/bitbltとは異なるqidを有するのであり、プ
ロセス102によるそのファイルへのライトは、そのプ
ロセス102に対するファイル/dev/bitbltのみに対す
るライトである。
【0125】図14において、ウィンドウ・サービス1
405は、その名前空間にカーネル・サービス#b14
11および#c1419によって与えられるファイルを
有す、かつプロセスP102(a)〜P102(n)の
集合にGnot711上のウィンドウを与えている。各プロ
セスP102は、パイプ1403によってウィンドウ・
サービス1405に接続されている。前記のように、ウ
ィンドウ・サービス1405によって与えられるファイ
ルに対する処理は、ウィンドウ・サービス1405とプ
ロセス102との間のパイプ1403上のtmessageおよ
びrmessage205および207となる。ウィンドウ・サ
ービス1405によって与えられるファイルは、図14
において1406として現れる。プロセス102がサー
ビス1405によって与えられるファイル木構造150
2をマウントする度に、そのプロセスは、ファイル14
06におけるスロット1407を受け取る。このスロッ
トは、サービス1405によってプロセス102に与え
られるファイル1409(0..k)の完全な集合を含む。
従って、スロット1407(a)は、プロセス102
(a)に対するファイル1409(0..k)のインスタン
スからなる。
【0126】ウィンドウ・サービス1405により、所
与のプロセス102に対するファイル1409について
のファイル処理を指定するメッセージ205および20
7が、カーネル・サービス#b1411およびカーネル
・サービス#c1417によって与えられるファイルに
ついての処理を指定する関数コール217および219
へと変換される。#bが/dev605に結合されると、/d
ev/mouse1413に関するリード関数コール1412
は、マウス1423から入力を獲得し、一方、/dev/bit
blt1415に関するリード/ライト関数コール142
5は、表示1427を制御する。同様に、#cが/dev60
5に結合されると、/dev/consに関するリード関数コール
1429は、キーボード1431から入力を得る。
【0127】ファイルシステム1406の実施:図18
および19 好ましい実施例において、ウィンドウ・サービス140
5がプロセス102に与えるファイル木構造1501に
おけるファイルのインスタンスの実施および位置づけ
に、図18のデータ構造体1801を使用する。プロト
コル・サービス209によって与えられるファイルが開
かれている場合、マウント・サービス203によってプ
ロトコル・サービス209に送られるオープンtmessage
は、ファイル識別子(FID)331を含む。このオー
プンtmessageに応じて、プロトコル・サービス209
は、そのファイル識別子331を、プロトコル・サービ
ス209がファイルを識別するために内部的に使用する
qid323に関係付ける。プロトコル・サービス209
によって返されるオープンrmessageは、そのqidを含
み、さらにプロトコル・サービス209によってそれに
関係付けられたfid331およびqid323は、共に、そ
のオープン・ファイルを表すチャネル301に含まれ
る。
【0128】まず、ファイル配列1803であるが、フ
ァイル配列1803は、プロトコル・サービス209に
よって現在与えられているファイルのすべてのインスタ
ンスに対するエントリ1805を収容する。所与のイン
スタンスのエントリ1805は、そのインスタンスのフ
ァイル識別子によって示される。各エントリ1805
は、3つのフィールドからなる。ビジー・フィールド1
807:エントリ1805が使用中かどうかを示す。フ
ィールド1809:インスタンスがオープンかどうかを
示す。ファイル・ポインタ・フィールド1811:イン
スタンスに対するファイル構造体1813を指し示す。
ファイル構造体1813は、次のフィールドからなる。
ビジー1815:インスタンスがビジーかどうかを示
す。ファイル型1817:ファイルが、ファイル木構造
1501におけるファイルのいずれであるかを示す。ス
ロット1819:ファイルがいずれのスロット1407
に属するかを示す値である。所与のファイル木構造15
01のすべてのファイルに対するファイル構造体181
3は、スロット1819に同じ値を有する。最後に、記
述ポインタ(dptr)1821:ディレクトリ木構造15
01に存在し得るファイルの記述子の配列におけるエン
トリ1823を指し示す。
【0129】ファイル型1817およびスロット181
9は、インスタンスのqid323を生成するために、共
に連結される。記述子エントリ(DE)1823は、3つ
のフィールドを有する。文字列名1825:ファイル木
構造1501における名前の1つである。ファイル型値
1827:名前に対応するファイル型であり、ファイル
型(ftype)フィールド1817と同じ値を有する。そ
して、許可フィールド1829:ファイルをどのように
使用できるかを示す。
【0130】スロット1819の可能な値は、それぞ
れ、そのスロットによって表されるファイル木構造15
01へのtmessageによって制御される表示1427中の
ウィンドウを表すデータ構造体に対応する。ウィンドウ
のデータ構造体1903を図19に示す。構造体190
3は、次の種類の情報を含む。refフィールド190
5:スロット1819の値に相当するファイル木構造1
501があるかどうかを示す。ビジー1907:ウィン
ドウ・データ構造体1903が現在使用中かどうかを示
す。スロット1909:ウィンドウ1903が対応する
スロット値。wdesc1911:構造体1903によって
表されるウィンドウを記述する情報である。フレーム記
述1913:wdesc1911によって指定されたウィン
ドウのいずれの部分が現在表示されているかを記述する
情報。qh1914:テキスト1915における文字への
ポインタ。テキスト1915は、ウィンドウに表示され
るべきテキストを収容する。rawbuf1917:キーボー
ド1431からウィンドウへの生の(未処理の)入力を
収容するバッファ。コンソール・ライト情報1919:
ファイルcons1505を指定するtwriteメッセージで受
信した情報。コンソール・リード情報1921:ファイ
ルcons1505を指定するtreadメッセージに応じて送
られるべき情報。マウス・リード情報:ファイルmouse
1509を指定するtreadメッセージに応じて送られる
べき情報。リード・キュー・ポインタ(rqpr)192
5:スロットによって表されるファイル木構造1501
におけるファイルを指定するtreadメッセージの待ち行
列を示す。ライト・キュー・ポインタ(wqpr)192
7:スロットによって表されるファイル木構造1501
におけるインスタンスを指定するtwriteメッセージの待
ち行列を示す。kbdc1929:そのウィンドウにとって
重要なキーボードの文字を収容する。send1931:ウ
ィンドウにおける変更のためにrmessageを送信らなけれ
ばならないことを示すフラグ。ウィンドウ状態193
3:ウィンドウの現在の状態を示す情報。そして、ビッ
ト・リード情報1935:ウィンドウのビット・マップ
からビットを読み出すために必要な情報。
【0131】ファイル木構造1501に対するファイル
・ロケータ処理ウィンドウ・サービス1405は、プロ
トコル・サービス209として、マウント・サービス2
03からtmessageを受け取ると、このtmessageに対し、
マウント・サービス203に返すrmessageによって応答
する。以下において、ウィンドウ・サービス1405が
tmessageのいくつかに応答する方法をを説明し、マウン
ト・サービス203とプロトコル・サービス209との
間の相互作用をプロトコル・サービス209から見た例
を与える。
【0132】tmessageによって指定される処理を2つあ
げれば、attachおよびwalkファイル・ロケータ処理であ
る。まず、attach処理については、既に述べたとおり、
マウント・システム・コールの実行の結果、マウント・
サービス203により、そのファイル記述子417がマ
ウント・システム・コールにおいて使用されたプロトコ
ル・チャネルによって表されるプロトコル・サービス2
09にattach返信メッセージが送られる。好ましい実施
例では、マウント・システム・コールは、さらに、マウ
ント・サービス203がattach往信メッセージに入れて
プロトコル・サービス209に送るデータを含む。プロ
トコル・サービス209が、ウィンドウ・サービス14
05ならば、そのデータには、スロット数が含まれる。
ウィンドウ・サービス1405は、このattach往信メッ
セージに応じて、attach往信メッセージに含まれるファ
イル識別子に対するエントリ1805を発見し、ビジー
1807を1に、オープン1809を0にそれぞれ設定
する。次に、ウィンドウ・サービス1405は、インス
タンスにファイル構造体1813を割り当て、スロット
・フィールド1819をルート・ディレクトリを指定す
る値に設定し、さらにdptr1821をルート1502に
対するディレクトリ・エントリ1823を示すように設
定する。ウィンドウ・サービス1405によって返され
るattach返信メッセージには、ftype1817およびス
ロット1819から作られたqid323が含まれる。最
後に、スロットに関係付けられたウィンドウ1905に
おける参照カウンタがインクリメントされる。
【0133】既に述べたとおり、パス名の分析時に呼び
出されたチャネル301がプロトコル・サービス209
におけるファイルを表すときに、walk往信メッセージが
生成される。この往信メッセージによって、プロトコル
・サービス209におけるディレクトリに対するファイ
ル識別子331およびそのディレクトリにおけるファイ
ルの名前が指定される。返信メッセージにより、その名
前によって指定されたインスタンスのqidが、返され
る。この時、往信メッセージにおけるファイル識別子3
31が、返されたqidに関係付けられる。好ましい実施
例において、ウィンドウ・サービス1405は、walk往
信メッセージに応じて、ファイル識別子331に対する
エントリ1805の位置を特定して、その名前を見る。
その名前が、ルート1502を示す「.」ならば、エン
トリ1805内のファイル・ポインタ1811によって
示されるファイルは、そのルート・ディレクトリを記述
する。この場合、そのファイル1813におけるqid3
23が、返信メッセージに入れて返され、そうでない場
合、その名前に対応する同じフィールド1825を有す
る記述エントリ1823が見つかるまで、ファイル記述
の配列が探査される。エントリ1823からのftypeフ
ィールド1827の値およびディレクトリに対するファ
イル1813からのスロット1819の値が、保存され
る。次に、現在使用されているすべてのファイル構造体
1813が、探査され、保存されたスロット値をスロッ
ト1819に、保存されたファイル型の値をftypeフィ
ールド1817にそれぞれ持つものが求められる。見つ
かった場合、それらの保存された値は、qid323とし
て返され、見つからなかった場合は、新たなファイル構
造体1813が割り当てられて、ftypeフィールド18
17が保存されたファイル型の値から設定され、スロッ
ト1819が保存されたスロット値から設定され、dptr
1821がその名前を持っていたファイル記述の配列の
エントリを示すように設定され、ビジーが1に設定さ
れ、ファイル識別子331に対するエントリ1805の
fptr1811が新たなファイル構造体を示すように設定
される。そして、保存されたスロットおよびftypeの値
は、qid323として返される。
【0134】ウィンドウ・サービス1405の内部構
造:図16〜19および図21 好ましい実施例においては、ウィンドウ・サービス14
05は、プラン9のオペレーティングシステムの下で実
行する3つのプロセス102によって実施される。図1
6において、ウィンドウ・サービス1405(0)にあた
るこれら3つのプロセス102、ならびにカーネル・サ
ービス#b1411、#c1419およびウィンドウ・
サービス1405のクライアント(依頼主)であるプロ
セス102に対する関係を説明する。クライアントであ
るプロセス102は、図16において、CP1615
(0)、CP1615(1)、および第2のウィンドウ・サー
ビス1405(1)を構成する3つのプロセスとして現れ
るが、これは、また、ウィンドウ・サービス1405
(0)のクライアントでもあり、かつそれ自体が、図16
には示していないクライアントを有する。このように、
図16には、3つのレベルの端末サービスが存在する。
すなわち、カーネル・サービス#bおよび#cによって
与えられる実端末サービス、ウィンドウ・サービス14
05(0)によってそのクライアントに与えられる第1水
準の仮想端末サービス、およびウィンドウ・サービス1
405(1)によってそのクライアントに与えられる第2
水準の仮想端末サービスである。さらに詳細に後述する
が、各水準の端末サービスは、異なる名前背景(NC)
1621に対応する。例えば、名前背景1621(0)に
おいては、ファイル名「mouse」は、カーネル・サービ
ス1411によって与えられるmouseファイルを示し;
名前背景1621(1)においては、ファイル名「mouse」
は、ウィンドウ・サービス1405(0)によって与えら
れるファイル木構造1501のうちの1つにあるファイ
ルを示し;名前背景1621(2)においては、ファイル
名「mouse」は、ウィンドウ・サービス1405(1)によ
って与えられるファイル木構造1501のうちの1つに
あるファイルを示す。
【0135】まず、ウィンドウ・サービス1405(0)
については、ウィンドウ・サービス1405(0)を構成
する3つのプロセスは、主プロセス1613(0)、マウ
ス従プロセス(MS)1603(0)、およびキーボード
従プロセス(KS)1605(0)である。主プロセス1
613(0)は、ウィンドウ・サービス1405(0)のクラ
イアントからパイプ1607(0)を介して往信メッセー
ジを受信し、この往信メッセージに応じて、返信メッセ
ージをパイプ1606(0)を介してクライアントに与え
る。往信メッセージおよび返信メッセージは、図16で
は205(0)および207(0)として現れる。往信
メッセージが、#b1411および#c1419によっ
て与えられるファイルに対する処理を必要とする場合、
主プロセス1613(0)は、プラン9のリードおよびラ
イトのシステム・コールを用いて必要な処理を行う。前
記のとおり、プラン9のオペレーティングシステムは、
ファイルシステム・コールをファイル・サービス#bま
たは#cに適合する種類の要求217および219へと
自動的に変換する。
【0136】マウス従プロセス1603(0)およびキー
ボード従プロセス1605(0)が、必要なのは、#b1
411によって与えられるmouseファイルまたは#c1
419によって与えられるconsファイルに対するファイ
ル・リード処理を行うプロセス102が、そのファイル
から読み出されるべき実際のデータがない限り、ブロッ
クするからである。主プロセス1613(0)は、そのク
ライアントからの往信メッセージに常に応答できなけれ
ばならないので、ブロックすることはできず、従って、
#bにおけるmouseファイルまたは#cにおけるconsフ
ァイルに対し、リード処理を直接行うことはできない。
これらのリードは、それぞれマウス従プロセス1603
(0)およびキーボード従プロセス1605(0)によって行
われる。これら2つの従プロセスは、共に、主プロセス
1613(0)のクライアントである。マウス従プロセス
1603(0)の処理は、両者に典型的である。マウス従
プロセス1603(0)は、これが#b1411によって
与えられるファイルmouseに対してプラン9のシステム
・リード・コールを行うときのループを単に実行し、さ
らにウィンドウ・サーバ1405(0)によって与えられ
るファイル木構造1501にうちの1つにあるファイル
mouseに対してプラン9のシステム・ライト・コールを
行う。好ましい実施例における慣例により、マウス従プ
ロセス1603(0)およびキーボード従プロセス160
5(0)によって書き込まれるファイル木構造1501
は、常に、スロット1407(0)を持つものである。勿
論、プラン9のオペレーティングシステムは、ファイル
システム・コールを#bによって適切な要求215に与
えられたmouseファイルに、ファイルシステム・コール
をパイプ1607を介して主プロセス1613に送られ
るwrite往信メッセージにウィンドウ・サーバ1405
(0)によって与えられるmouseファイルに自動的に変換す
る;主プロセス1613は、そのwrite往信メッセージ
に、他のクライアントからの往信メッセージと同じよう
に応答する。
【0137】以上より明らかなように、マウス従プロセ
ス1603(0)は、2つの異なる名前背景1621に存
在するmouseファイルに対してファイル処理を行ってい
る。リード処理は、名前背景1621(0)にあるmouseフ
ァイルに対するものであり、一方ライト処理は、名前背
景1621(1)にあるmouseファイルに対するものであ
る。この状態は、マウス従プロセス1603(0)におい
て、プラン9のopen、forkpgrp、およびmountの処理を
用いることによって達成される。これを行う方法を図1
7に示した。関数mkslave1701を用いて、マウス従
プロセス1603(0)およびキーボード従プロセス16
05(0)の両方を作る。この関数は、2つの引数---パス
名、および各リード処理の時に読むべきバイト数を指定
する計数---を持ち、それが生成した従プロセスのプロ
セス識別子(pid)を返す。
【0138】mkslave1701は、主プロセス1613
(0)によって、引数「/dev/mouse」および「10」を付
けて呼び出される。主プロセス1613(0)は、その中
でカーネル・サービス#b1411がカーネル・ルート
・ファイル・サービスによって与えられるファイル/dev
に結合されているような名前空間115を有するので、
パス名「/dev/mouse」は分析されて、カーネル・サービ
ス#b1411によって与えられるファイル「mouse」
を表すチャネル301を指定するファイル記述子417
となる。この事実は、図17の最上部にある表記「名前
背景1621(0)」によって示される。主プロセス16
13(0)は、マウス従プロセス1603(0)を生成するた
めにmkslave1701を使用する時点で、既にパイプ1
607(0)生成し、かつウィンドウ・サービス1405
(0)をsrvに登録している。ウィンドウ・サービス140
5(0)を表すsrvのファイルに書き込まれるファイル記述
子は、パイプ1607(0)によって表されるファイルに
対するファイル記述子のうちの1つである。このファイ
ル記述子は、以下において「cfd」と称するが、ウィ
ンドウ・サービス1405(0)のクライアントが往信メ
ッセージを書き込むファイルを表す。
【0139】mkslave1701が最初に行うことは、パ
ス名引数荷よって指定されたファイルを開くことである
(1705)。依然として名前背景1621(0)にある
ので、そのファイルは、#b1411によって与えられ
るファイル「mouse」である。オープン処理の結果とし
て、ファイル記述子fd1は、この時点で、#bのファ
イル「mouse」を表す。次に、fork関数を含んだswitch
文がくる(1707)。このfork関数は、親プロセス1
613(0)の背景のコピーを有し、従ってfd1のコピ
ーを有する新たな子プロセス102を生成する。その子
プロトコル・サービス209は、また親プロセス161
3(0)と同じ名前空間105を有する。このswithc文に
は3つの分岐がある。第1の分岐1709は、fork関数
の実行中の発生するエラーを処理する。第2の分岐17
13は、親プロセス1613(0)によって実行される
が、子プロセス1603(0)によっては実行されないよ
うなコードである。ブロック1737および1739に
よって示したように、このコードは、fd1の親プロセ
ス1613(0)のコピーをクローズし、子プロセス16
03(0)のpidであるpidを返す。
【0140】switch文の第3の分岐1715は、子プロ
セス1603(0)によってのみ実行されるコードであ
る。まず、子プロセス1603(0)に新たな名前空間1
05を与えるために「forkpgrp」が実行される。forkgr
pが引数「0」と共に呼び出されるので、その新たな名
前空間は、親プロセス1613の名前空間105のコピ
ーである。次に、システム・マウント処理が、行われる
(1721)。このマウントは、cfd---これは、ウ
ィンドウ・サービス1405(0)のクライアントによっ
て使用されるパイプ1607(0)の最後を表す---を、BE
FOREオプションを用いて、新たな名前空間105におけ
るディレクトリ/devに結合する。マウント処理の結果と
して、サービス1405(0)のファイル1406のスロ
ット0にあるファイル木構造1501は、/devに結合さ
れていて、/dev/consなどのファイルへの参照は、この
時点で、ファイル1406のスロット0におけるファイ
ルconsへの参照となる。しかし、プロセス1603(0)
の名前空間105は変化し、「cfd」は/devにマウン
トされているので、オープン・システム・コールにおけ
るパス名引数は、この時点で、サービス#b1411
におけるファイル「mouse」ではなく、サービス140
5(0)のスロット0のファイル木構造にあるファイル「m
ouse」と分析される。この名前背景の変化を図17にブ
ロック1717に続く波線によって示した。ブロック1
717において、名前背景1621(0)は、名前背景1
621(1)から分離される。
【0141】オープン・システム・コールによって返さ
れたファイル記述子417は、「fd2」に割り当てら
れる。従って、この時点で、fd1は、サービス141
1におけるファイル「mouse」を表し、fd2は、サー
ビス1405(0)のスロット0にあるファイル「mouse」
を表す。switch1707の第3の分岐の残りの部分は、
マウス従プロセス1603が、fd1を用いてリード・
システム・コールを行うループ1735であり、それ
は、サービス#b1411におけるmouseファイルを読
み(1725)、さらにfd2およびサービス#b14
11におけるmouseファイルから受け取ったデータを用
いてライト・システム・コールを行い、そのデータをサ
ービス1405(0)のスロット0にあるmouseファイルに
書き込む(1733)。書込みが失敗の場合、すなわ
ち、サービス#b1411から受け取っただけのデータ
をサービス1405(0)に書き込むことができない場
合、このプロセスは、出る(1731)。キーボード従
プロセス1605(0)も全く同じようにして生成される
が、mkslave1701の呼び出しでは、パス名として「/
dev/rcons」を指定し、バイト長として「1」を指定す
る点が異なる。従って、キーボード従プロセス1605
によるfd1に対する各リードは、キーボードから1文
字を読み、プロセス1605によるfd2に対する各ラ
イトは、スロット0にあるファイル木構造1501の
「rcons」ファイルに1文字を書き込む。ここでは「rco
ns」が使用されるので、ウィンドウ・サービス1405
(0)は、文字を、ちょうどそれらがキーボードから入力
されたとおりに受け取る。
【0142】mkslave関数によって、プラン9における
ファイル・アクセス処理、ならびに「fork」および「fo
rkpgrp」システム・コールのセマンティックス(意味と
動作の関係)の基本的な意義がいくつか説明される。ま
ず、ファイル・アクセス処理では、パス名ではなくファ
イル記述子417によってファイルを参照する;代わっ
て、ファイル記述子がチャネルを参照し、そして、チャ
ネル301が所与のファイルを表す限り、そのチャネル
を参照するファイル記述子を使用するファイル・アクセ
ス処理は、所与のファイルをアクセスすることになる。
さらに、「fork」が新たなプロセス102を生成する
と、その新たなプロセス102は、古いプロセス102
の背景のコピーを受け取る。この背景にはファイル記述
子配列413が含まれる;従って、新たなプロセス10
2は、そのforkシステム・コールを実行したプロセス1
02に対し開かれていた任意のファイルに対してファイ
ル・アクセス処理を行うことができる。最後に、「fork
pgrp」は、新たな名前空間115を生成するとき、fork
pgrpを実行しているプロセス102に対し新たなマウン
ト・テーブル801を生成するに過ぎない;そのプロセ
ス102に対するファイル記述子配列413は、不変の
ままである。このようなことから、mkslave1703を
実行するプロセス102は、同じパス名を用いて、カー
ネル・サービス#c1419のファイル「rcons」およ
びウィンドウ・サービス1405のファイル「rcons」
を開くことができる。さらに詳細に後述するように、フ
ァイル・アクセス処理、「fork」および「forkpgrp」の
セマンティックスにより、サービスの再帰的な生成も可
能である、すなわち、サービスは、クライアントとし
て、それ自体の別のインスタンスを持つことができる。
【0143】また、パイプ1607(0)は、主プロセス
1613(0)をそのクライアント1615(0および1)お
よびウィンドウ・サービス1405(1)に接続する。パ
イプ1607は、主プロセス1613(0)によって生成
されたので、主プロセス1613(0)は、それが返信メ
ッセージを書き込む先のパイプ1607(0)内のファイ
ルを表すサービス・ファイル記述子1617(0)を有す
る。各クライアント・プロセスは、そのクライアントが
往信メッセージを書き込む先のパイプ1607(0)内の
ファイルを表すクライアント・ファイル記述子1619
(0)を有する。クライアント・プロセスは、主プロセス
1613(0)によって、生成され、かつクライアント・
ファイル記述子1619(0)が与えられている。Gnot711
のユーザが画面127において新たなウィンドウを要求
する度に、新たなクライアント・プロセスが、生成され
る。好ましい実施例において、新たなウィンドウは、マ
ウス1423を用いて画面1427上のメニューからそ
の選択肢を選ぶことによって、要求される。
【0144】マウス1423によってメニューから新た
なウィンドウを選択すると、結果として、マウス従プロ
セス1603(0)が、サービス#b1411によって与
えられるmouseファイルに対するリードを完了し、そのm
ouseファイルから読み出したデータをサービス1405
(0)のスロット0にあるmouseファイルに書き込む。結果
的に、主プロセス1613(0)へのパイプ1607(0)上
に往信メッセージが発生し、この往信メッセージに応じ
て、主プロセス1613(0)は、新たなウィンドウに対
しウィンドウ構造体1903を位置付けて用意する。次
に、主プロセス1613(0)は、引数として新たなウィ
ンドウに対するスロットを用いて関数「spawn」を呼び
出す。spawnは、クライアント・プロセス1615を生
成し、引数において指定されたスロットに対するウィン
ドウ・サービス1405(0)におけるファイル木構造1
501をクライアント・プロセス1615の名前空間1
05の一部とし、さらに新たなクライアント・プロセス
1615におけるシェル・プログラムを実行する。
【0145】図21において、spawn関数2101は、
まず同期パイプをオープンする(2105)。同期パイ
プの目的は、新たなクライアント・プロセス1615が
走るまで、主プロセス1613(0)が進まないことを確
実にするためである。次に、switch文におけるforkシス
テム・コールを実行することによって、クライアント・
プロセス1615が生成される(2107)。forkに関
しエラーがあった場合、分岐2109が取られ、エラー
を示す値−1が返される。forkが成功した場合、主プロ
セス1613(0)が、分岐2113に示したように進行
する;synchパイプを読み(2115)、子に対するpid
を返す(2117)。新たなクライアント・プロセス1
615がsynchパイプにデータを置くまで、主プロセス
1613(0)は、リードを完了できないので、主プロセ
ス1613は、新たなクライアント・プロセス1615
が走るまでは、戻らない。
【0146】分岐2107は、新たなクライアント・プ
ロセスがどのように進むかを示す。まず、新たなクライ
アント・プロセス1615は、forkpgrpを実行すること
によって、新たな名前空間を得る(2119)。引数
「0」が使用されるので、その新たな名前空間は、主プ
ロセス1613の名前空間のコピーである。そこで、ク
ライアント・プロセス1615は、主プロセス1613
(0)が実行を継続できるように、synchパイプへのライト
を行う(2121)。次に、プロセス1615は、ウィ
ンドウ・サービス1405(0)からファイル木構造15
01をマウントするべき標準の場所を示すパス名にcd
f1619(0)をマウントする。これを行うために使用
されるマウント・システム・コールは、引数としてスロ
ット数を含む(2123)。前記のように、クライアン
ト・プロセス1615におけるマウント・システム・コ
ールの結果として、attach往信メッセージがパイプ16
07(0)を介してウィンドウ・サービス1405(0)に送
られる;ウィンドウ・サービス1405(0)が、このatt
ach往信メッセージに応じて、スロット数によって指定
されたスロットにおけるファイル木構造1501のルー
トに対するqidを返し、そのqidが、cfd1619によっ
て指定されるチャネル301に置かれる(勿論、クライ
アント・プロセス1615は、生成されたときに、cfd
1619の新たなコピーが与えられた)。次に、bindシ
ステム・コールを用いて、ファイル木構造1501がマ
ウントされた先のパス名を/devに結合する(212
5)。「BEFORE」オプションを使用するので、/dev/mou
seのようなパス名は、この時、スロット数によって指定
されるスロットにあるファイル木構造1501における
ファイル「mouse」へと分析される。
【0147】次に、synchパイプに対するファイル記述
子によって表されるファイル、パイプ1606(0)のサ
ービス端、および標準I/Oがクローズされる(ブロッ
ク2127、2129、2131)。プラン9の慣例に
より、あるプロセスに属する標準I/Oに対するファイ
ルは、ファイル記述子0および1を有する;従って、ス
テップ2131においてこれらのファイルをクローズす
ることにより、それらの記述子は、以降の用途に確実に
使用できるようになる。次に、読み出すために/dev/con
sを開く(2133)。このオープン・システム・コー
ルによって、walk往信メッセージが発生し、これによ
り、ファイル2406の適切なスロットに/dev/consに
対するファイル木構造1813が生成され、さらに前記
コールによりopen往信メッセージが発生し、これによっ
て、1に設定されているファイルに対するエントリ18
05に対するファイル1809が開かれる。openは、ク
ライアント・プロセス1615に対するファイル記述子
配列413の最初からファイル記述子417を捜し始め
るので、openによって返されるファイル記述子は、ファ
イル記述子0となり、/dev/consは、標準入力ファイル
として作用することになる。続いて、openシステム・コ
ールは、読むために/dev/consをオープンする;結果は
既に説明したとおりであるが(2135)、openによっ
て返されるファイル記述子417は、ファイル記述子1
となり、/dev/consは、標準出力ファイルとして作用す
る点が異なる。ステップ2137において、ファイル記
述子1がオープンされるので、ファイル記述子2---こ
れは、慣例により標準エラー・ファイルを表す---がフ
ァイル記述子1と同じファイルを表すことになり、エラ
ー・メッセージが、/dev/consに出力される。最後に、
シェル・プログラム---プラン9のユーザ・インタフェ
ースを与えるーーーが、実行される(2139)。
【0148】ここで、新たなクライアント・プロセス1
615が、ウィンドウ・サービス1405に対するプロ
グラムを実行すると、結果は、ウィンドウ・サービス1
405(0)のクライアントである新たなウィンドウ・サ
ービス1405(1)である。ウィンドウ・サービス14
05(1)は、ウィンドウ・サービス1405(0)と同じ構
成要素を有し、その従プロセスおよびクライアント・プ
ロセスにパイプ1607(1)によって接続されている。
ウィンドウ・サービス1405(1)は、ウィンドウ・サ
ービス1405(0)と全く同様に作用するが、新たなク
ライアント・プロセス1615(1)の名前空間105に
設けられている、すなわち、/dev/mouseまたは/dev/con
sなどのパス名は新たなクライアント・プロセス161
5に属するサービス1405(0)のスロット1407に
あるファイル木構造1501におけるファイルを指す点
が異なる。従って、これらのファイルに対するリードお
よびライトは、カーネル・サービス#bおよび#cの代
わりに、ウィンドウ・サービス1405(0)へのパイプ
1607(0)を介する往信メッセージを発生する結果と
なる。そして、ウィンドウ・サービス1405(0)が、
ウィンドウ・サービス1405(1)からの往信メッセー
ジに応じて、カーネル・サービス#bおよび#cへの要
求を生成する。
【0149】主プロセス1613の内部構造:図20 図20において、主プロセス1613は、クライアント
・プロセス1615、マウス従プロセス1603、およ
びキーボード従プロセス1605からの往信メッセージ
205および207を処理し、それらの往信メッセージ
に応じて、ウィンドウ・データ構造体1903を更新す
る。そして、#b1411および#c1419によって
与えられるファイルに対するファイル・アクセス・シス
テム・コールにおいてウィンドウ・データ構造体190
3の情報を使用する。好ましい実施例において、主プロ
セス1613は、次の主な構成要素を含む。I/O関数
2019:ウィンドウ・サービス1405のクライアン
ト、マウス従プロセス1603およびキーボード従プロ
セス1605からの往信メッセージ205および207
に応答する。マウス制御タスク2008:I/O関数2
019がマウス従プロセス1603から受信する往信メ
ッセージを処理するタスク。キーボード制御タスク20
09:I/O関数2019がキーボード従プロセス16
05から受信した往信メッセージを処理するタスク。ウ
ィンドウ制御タスク2005:ウィンドウ・データ構造
体1903のデータをマウス1423からの入力の要求
どおりに更新するタスク。各ウィンドウ1903(0・・n)
に対応する端末制御タスク2015(0..n):キーボード
制御2009およびウィンドウ制御2005からの入力
の要求どおりに対応するウィンドウ2013の状態を変
更し、そのウィンドウが属するクライアント・プロセス
1615に要求どおりの返信メッセージを送り、さらに
変更したとおりにウィンドウを表示するために、#b1
411および#c1419によって与えられたファイル
にライト処理を行う。
【0150】主プロセス1613のタスク構成要素は、
ウィンドウ1903の状態を変更する事象に応じて主プ
ロセス1613が計画して走らせる主プロセス1613
の内部のエンティティである。従って、これらのタスク
は、プロセスの一般的性質をいくつか有するが、プラン
9のプロセス102ではない。特に、それらは、すべ
て、名前空間105も含めて主プロセス1613の背景
を共有する。タスクのスケジュリング規則は次のとおり
である。すなわち、あるタスクが責任を有する資源の状
態を変更するI/O関数2019において、メッセージ
が受信されると、直ちに、そのタスクが、実行予定のキ
ュウーに配置され、そのキュウーが空の場合は、直ちに
I/O関数2019が実行される。
【0151】構成要素2001の処理は、およそ次のと
おりである。I/O関数2019は、往信メッセージを
得るために、パイプ1607のサービス・ファイル記述
子1617によって指定されるファイルを読む。往信メ
ッセージが、ファイル位置づけ処理を指定した場合、I
/O関数2019は、そのメッセージ自体を処理して、
適切な返信メッセージを返す。前記の往信メッセージ
が、ファイル・アクセス処理を指定した場合、I/O関
数2019は、そのメッセージを送ったプロセスに属す
るウィンドウ構造体1903(i)を見つけ、その構造体
1903の情報を矢印2019で示したように更新し
て、端末制御2015(i)を走らせる予定をする。端末
制御タスク2015(i)が走る場合、ウィンドウ190
3(i)を矢印2023および2025で示したように更
新し、その更新により必要とされる動作を行う。そのよ
うな動作の例としては、矢印207によって示したよう
なウィンドウ1903(i)が属するプロセスへの返信メ
ッセージがある。この返信メッセージは、パイプ160
7にあるクライアント・ファイル記述子1619によっ
て表されるファイルに書き込まれる。もう1つの例は、
矢印219によって示したような、ウィンドウ1903
(i)に対応する画面1427におけるウィンドウを再描
画する#b1411および#c1419へのライト処理
である。少し時間をおいて、I/O関数2019は、実
行を再開し、パイプ1607から新たに往信メッセージ
を読む。
【0152】マウス従プロセス1603およびキーボー
ド従プロセス1605からメッセージを受信するのは、
特殊な場合である。メッセージがマウス従プロセス16
03からのもでであれば、I/O関数2019は、その
メッセージをグローバルな記憶装置のマウス・メッセー
ジ2002に書き込み、マウス制御タスク2008を予
定する。そのタスク2008が、走ると、マウス・メッ
セージ2002をマウス・データ2006に変換し、さ
らにウィンドウ制御2005を予定に入れる。ウィンド
ウ制御2005は、マウス・データ2006を調べて、
現在のウィンドウ2013を決定する。現在のウィンド
ウ2013とは、マウス1423からデータを受信した
ときにカーソルが位置していた画面1427上のウィン
ドウに対応するウィンドウ構造体1903のことであ
る。マウス・データ2006が、現在のウィンドウ20
13と一致しない画面1427内のウィンドウを示す場
合、ウィンドウ制御2005は、マウス・データ200
6によって指定される画面1427内のウィンドウに対
応するウィンドウ構造体1903を新たな現在のウィン
ドウ2013とする。そして、現在のウィンドウ201
3をマウス・メッセージによって要求されるように更新
して、その新たな現在のウィンドウに対する端末制御2
015を予定する。端末制御2015が実行すると、端
末制御2015は、画面を再描画するライト処理を行
い、必要なメッセージをマウス従プロセス1603に送
る。メッセージが、キーボード従プロセス1605から
のものである場合、I/O関数2019は、マウス従プ
ロセスで示したように進むが、新たに入力された文字が
グローバルな記憶装置のKBDC2004に書き込まれて、
キーボード制御2009が予定される点が異なる。キー
ボード制御2009が走ると、現在のウィンドウ201
3を変更し、現在のウィンドウ2013に対する端末制
御2015を予定する。端末制御2015は、既に説明
した処理を行う。
【0153】[詳細な例:保持ファイル1507に対す
る処理:図22および23] ウィンドウ・サービス1405によって与えられるファ
イル木構造1501の「保持」ファイル1507は、対
話的なプログラムのための文字入力インタフェースの改
良を実施する場合に、使用する。このようなインタフェ
ースにおける典型的な問題部分は、この改良によって解
決される。このようなインタフェースにおいては、行の
端を示すのに使用される行終端コード(一般に、改行ま
たは復帰)は、3つの異なる機能を有する。すなわち、
一連のテキストを表示する場合、それをどのように行に
分割するかを指定する;対話的なプログラムに入力され
ている場合、最後の行の終端子と現在の行の終端子との
間のテキストの文字列が送られるべきことを指定する;
および、コマンド行インタフェースの場合、最後の行の
終端子と現在の行の終端子との間のテキストの文字列が
実行されるべきことを指定する。従って、典型的な対話
型ユーザ・インタフェースにおいては、ユーザが、行終
端コードを使用する場合、その行に関しては終了してお
り、その行は、そのユーザが行終端コードを使用したと
きのままの状態で、表示され、送られ、そして実行され
る。
【0154】この構造に本質的な問題は明白であり、従
来の技術は、その幾つかを特殊な文字によって解決して
きた。こうして、表示のために改行を阻止するべく特殊
文字を用いることがあり、コマンド行インタフェースで
は、コマンド行の入力が次の行へと続くことを示すため
に別な特殊文字をたいてい使用する。これまで解決され
てこなかったものは、行が行終端文字に応じて対話型プ
ログラムに送られるという事実から起こる問題である。
その結果、対話型プログラムでは、行終端コードを入力
するまでは、その行を編集することが許されるが、一
方、僅かに編集プログラムにおいては、行を入力し、行
終端コードを入力した後に、入力済みの行に戻って編集
することが一般に許される。この問題に有効な解決策と
言えば、ファイルから入力を読み出すような対話型プロ
グラムを設計し、入力ファイルをエディタを用いて生成
したうえで、そのファイルを対話型プログラムに与える
ことぐらいであった。必要であり、かつウィンドウ・サ
ービス1405によって与えられるものは、ユーザが指
定するまでは入力中の文字列が送られないようにする方
法である。
【0155】ウィンドウ・サービス1405では、この
問題を次のように扱う。第1のモードにおいて、行終端
コードにより、これまでのように行が送られるようにす
る。第2のモードにおいて、端末においてキーを叩くこ
とにより入力されると、そのモードに入ったときから出
るまでの間に入力文字が、そのモードから出た時点で送
られる。ここでは、第2のモードを保持モードと称す
る。好ましい実施例において、保持モードからは、入っ
たときに使用したものと同じキーを叩くことによって出
る。さらに、好ましい実施例において使用されるカーソ
ルおよびウィンドウの境界線の形によって、そのウィン
ドウが現在、保持モードにあるかどうかを示す。好まし
い実施例では、カーソルは矢印である。保持モードにお
けるカーソルは、中抜きの矢印であり、その他の場合
は、ベタの矢印である。
【0156】図22において、ウィンドウ構造体190
3におけるウィンドウ記述情報には、現在のカーソルに
対するビット・マップを示すcursorpフィールド220
3が含まれる。qh1914は、テキスト1915におけ
る現在位置を示すポインタであり、代わりに、ウィンド
ウ・データ構造体1903(i)によって表されるウィン
ドウに表示されているテキストを収容している。
【0157】cons read info1921は、3つのフィー
ルドからなり、ウィンドウ構造体1903(i)に対応す
るファイル木構造1501にあるファイルconsおよびrc
onsに対するリードを指定する最も最近のtreadメッセー
ジからの情報を格納する。それらのフィールドは、次の
とおりである。rtag2205:メッセージからのタグを
収容する。rfid2207:メッセージからのfidを収容
する。rcnt2209:メッセージからの計数であり、読
み出すべき文字数を指定する。RQPTR1927は、優先
するtreadを満たすために実行されるべき未解決のリー
ドの待ち行列を指し示す。この待ち行列の各要素221
3は、それが対応するtreadメッセージからのrtag、rfi
dおよびrcntを持つ。KBDC1929は、キーボードから
読み出されるべき最後の文字を収容し、hold2211
は、ウィンドウ1903(i)が保持モードかどうかを示
すフラグである。
【0158】保持モードは、treadメッセージに応じて
データを送るために使用されるので、好ましい実施例に
おいてtreadメッセージが処理される様子を最初に説明
する。好ましい実施例において、I/O関数2019
が、rconsまたはconsに対するリードを指定するtreadメ
ッセージを受信すると、I/O関数2019は、qid3
23を用いて、rconsまたはconsが入っているファイル
木構造1501に対するスロットを確認したうえで、そ
のスロットに対応するウィンドウ構造体1903の所在
を特定する。次に、図23の流れ図2333で示したよ
うに、treadメッセージからのtagをウィンドウ構造体1
903(k)のrtag2205に、同じくそのメッセージか
らのfidをrfid2207に、計数をrcnt2209に、そ
れぞれ書き込む(2335)。ここで、I/O関数20
19が、スケジュラを呼び出すと、これが、タスク20
08、2005、2009または2015のうち、タス
クの待ち行列において次に実行するべきものを実行させ
る(2337)。
【0159】端末制御2015(k)が、次に走ると、流
れ図2313に示した処理を行う。rfid2207は、0
に等しくないので(2325)、新たなtreadメッセー
ジを受信する。結果的に、新たなrqe2213を生成し
(2317)、rtag2205、rfid2207、およびrc
nt2209からのフィールドを0に設定し、新たなrqe
2213を待ち行列の最後に置く。cons read info19
19に示されたリード処理に対するリード・キューにお
けるエントリを作ると、端末制御2015(k)は、次
に、リード・キューが空かどうかを判断し、空ならば、
待ち行列の最初のエントリ2213を処理する(232
5)。流れ図2323に示したように、エントリを処理
する要領は、ウィンドウ1903(k)が保持モードにあ
ることをhold2211が示しているかどうかに依存す
る。ウィンドウ1903(k)が保持モードにあることをh
old2211が示している場合、リード処理において送
られた文字数をエントリ2213におけるrcntの最小値
に設定し、テキスト1915の最後とqh1914によっ
て現在印が付けられている位置との間の文字、すなわ
ち、qh1914によって印が付けられている位置とテキ
スト1915の最後との間の行終端文字の数は単に無視
する。そのうえで、エントリ2213からのtagおよびf
id、および文字が入ったrreadメッセージをウィンドウ
1903(k)が属するプロセスに送る。最後に、最後に
送られた文字に続くテキスト1915を示すようにqhを
更新し、要求待ち行列の次の要素を示すようにRQPTR1
925を更新する。
【0160】hold2211が、ウィンドウ1903(k)
が保持モードでないことを示す場合、制御はブロック2
326に戻る。ここで、nをrcntの最小値に設定する
と、次の改行からqh1914によって区別される位置ま
での文字の数、すなわちnにより、qhから次の改行文字
までのテキスト1915にある文字のみの数が指定され
る。これらが、このとき、ブロック2329において送
られる文字である。そして、qh1914を、次の改行文
字に続く文字を示すように更新する。
【0161】実施例においては、エスケープ・キーを叩
いて保持モードに入り、再びエスケープ・キーを叩くこ
とによって出る。このように、エスケープ・キーは、保
持モードと行終端子により行が送られるモード(以降、
非保持モードと称する)との間でトグル・スイッチとし
て作用する。流れ図2301は、エスケープ・キーに応
じてholdフィールド2211がどのように設定・解除さ
れるかを示す。前記のように、キーボード従プロセス1
605は、文字を受信すると、ウィンドウ・サービス1
405のスロット0のファイルrconsへのライトを行
う。このライトの結果、twriteメッセージが主プロセス
1613によって受信される。I/O関数2019が、
スロット0のrconsへのtwriteメッセージの処理を行う
べく、KBDC2004に文字を置き、キーボード制御タス
ク2009を予定する。キーボード制御2009は、KB
DC2004の内容を現在のウィンドウ2013のKEYBDC
1929に書き込み、現在のウィンドウ2013に対応
する端末制御2015を実行するべきタスクの待ち行列
に配置した後、スケジュラを呼び出す。少し時間をおい
て、ウィンドウ制御タスク2005が走る;これが走る
と、そのウィンドウ構造体1903にあるKEYBDC192
9を調べるコードを実行する。このコードに対する流れ
図を図23の2301に示す。ブロック2303におい
て、KEYBDC1929からKBDC1929を取り出す。判断
ブロック2305において、それを検査し、それがエス
ケープ文字ならば、hold2211を反転し(230
7)、hold2211の新たな値によって要求されるとお
りにカーソルを設定し(2309)、さらに新たな値の
要求どおりに画面の境界線を設定する(2311)。実
施例では、流れ図2301、2313、および2314
が、この順に端末制御2015によって実行される。こ
られの流れ図の実行後、端末制御2015は、エスケー
プ・キーの入力結果がGnot711のユーザに直ちに見え
るように、ウィンドウ2013を再描画する。
【0162】ウィンドウ・サービス1405の好ましい
実施例により、クライアント・プロセス1615に対
し、そのプロセス1615に対応するウィンドウ構造体
1903におけるhold2211を設定する方法が与えら
れる。これを行うために、クライアント・プロセス16
15は、保持ファイル1507に対しクローズ・システ
ム・コールを実行する。クローズ・システム・コールの
結果、tclunkメッセージが発生する。I/O関数201
9は、このtclunkメッセージに応じて、対応するウィン
ドウ構造体1903のhold2211を設定する。また、
実施例により、リードまたはライト処理が無意味である
ようなファイルに対し、それらの処理がどのように扱わ
れるかの例も提供される。すなわち、I/O関数201
9は、hold1507を指定するtreadメッセージを受信
すると、返されるデータの長さが0であるようなrread
メッセージを返す。同様に、I/O関数2019は、前
記のファイルに対するtwriteメッセージを受信すると、
書き込まれるデータの長さが0であるようなrwriteメッ
セージを返す。
【0163】CPUコマンドの実施:図24〜26 図7において、プラン9のオペレーティングシステム
は、Gnot端末711の他に高性能CPU703およびフ
ァイルサーバ705を含む分散型システム701におい
て実施されている。Gnot端末711内部のプロセッサ上
ではいかなるプログラムを実行してもよいが、Gnotプロ
セッサは、エディタまたはデバッガなどの対話型プログ
ラムを実行させるように使用し、高性能CPU703
は、コンパイラまたはデータ・ベース・システムなどの
処理集約型のプログラムの実行に使用する方が概して効
率的である。そのために、シェルを走らせているGnot端
末711のユーザは、CPUコマンドを使用する。
【0164】CPUコマンドは、オプションの引数として
CPU703の名前を取る。引数が与えられない場合
は、デフォルトのCPU703が選ばれる。タイプする
かマウスによって選択することによって、CPUコマンド
が入力されると、そのCPUコマンドが入力されたウィン
ドウが、CPUコマンドにおいて選択されたCPU703
で走っているプロセス102に対するウィンドウとな
る。プロセス102は、シェル・プログラムを実行して
いるので、ユーザは、そのCPU703において、単に
プログラム名をシェルに指定するだけで、他のプログラ
ムを実行することができる。CPUコマンドが実施される
様式の重要な意義は、CPU703上を走行中のプロセ
ス102が、Gnot711上のCPUコマンドを実行したプ
ロセス102の名前空間115とほぼ同じ名前空間11
5を有する点にある。所与のパス名は、Gnot711上を
走っているプロセス102においてそうであるように、
CPU703上を走っているプロセス102における同
じファイルへと分析される。異なるのは、位置の変更に
よって必要になるものだけである。例えば、プロセス・
サービスにおけるファイルは、Gnot711上の情報では
なく、CPU703上の情報を含む。
【0165】図24に、CPUコマンドの実行の前と後に
おけるシステム701の構成要素の間の関係の概略を示
す。2401と記した図の部分は、実行前の関係を示
す。CPU2403(a)(これは、Gnot711のCPU
でもよい)は、ユーザ・プロセス2405(a)を走らせ
ている。ファイルシステム109(a)によって、ユーザ
・プロセス2405(a)は、ネットワーク713、71
5および709からなるネットワーク2409を介し
て、ファイル・サービス705の1つであるファイル・
サービス2411のファイルに対し、読み書きを行って
いる。また、ユーザ・プロセス2405(a)は、ファイ
ルシステム109(a)を用いて、ウィンドウ・サービス
1405によって与えられるファイルに対する処理を行
っていて、これによって、ディスプレイ、キーボード、
およびマウス2407(a)(この場合、Gnot711のデ
ィスプレイ、キーボード、およびマウス)を制御してい
る。CPU703の1つであるCPU2403(b)は、
ユーザ・プロセス2405(a)とシステムの他の構成要
素との間の相互作用に関するものは何も持っていない。
【0166】ユーザ・プロセス2405(a)は、CPUコマ
ンドを受信する時点で、シェル・プログラムを走らせて
いる。このCPUコマンドに応じて、シェル・プログラム
は、名前空間も含めてユーザ・プロセス2405(a)と
同じ環境を有する子プロセスを生成し、他のプロセスが
終了するまで、それ自体停止する。さらに詳細に後述す
るように、子プロセスは、CPUサービス(CPUS)241
3を設定する。CPUサービス2413が、メッセージを
プロセッサ2403(b)に送ると、結果として、プロセ
ッサ2403(b)にプロセス2405(b)が生成される。
このように、CPUコマンドの実行後、ユーザ・プロセス
2405(a)は、CPU2403(a)での走行を止めてお
り、ユーザ・プロセス2405(b)が、プロセッサ24
03(b)上で走っている。ユーザ・プロセス2405(b)
は、ファイル・サービス109(b)によって、ファイル
を読み書きしている。ユーザ・プロセス2405(b)
は、ユーザ・プロセス2405(a)が持つものとほぼ同
じ名前空間115を有するので、読み書きされているフ
ァイルは、ファイル・サービス2411によって与えら
れるファイルおよびCPU2403(a)上で実行したサ
ービス123によって与えられるファイルである。勿
論、これらのファイルには、ウィンドウ・サービス14
05によって与えられるファイルも含まれる。CPU2
403(a)上に配置されたサービス123によって与え
られるファイルに対する処理は、CPUサービス241
3によって扱われる。ユーザ・プロセス2405(b)
が、CPU2403(a)上のサービスによって与えられ
るファイルに対する処理を指定すると、ファイルシステ
ム109(b)により、ネットワーク2409を介してCPU
サービス2413に行く往信メッセージへと変換され
る。ここで、CPUサービス2413は、CPU2403
(a)においてそのファイルに対し往信メッセージで指定
された処理をファイルシステム109(a)を用いて実行
し、その結果を返信メッセージによって返す。従って、
ユーザ・プロセス2405(b)の観点からすれば、CPUサ
ービス2413は、ユーザ・プロセス2405(a)の名
前空間115からユーザ・プロセス2405(b)にファ
イルを与えるサービスである。
【0167】CPUサービス2413の実施:図25およ
び26 図2413に、CPUサービス2413の好ましい実施例
の概要を示す。ウィンドウ・サービス1405に加え、
CPUサービス2413により、プラン9のサービス12
3の簡潔性、柔軟性および能力が例示される。CPUサー
ビス2413は、多数の成分プロセス102を有する。
成分プロセスの名前空間115には、ユーザ・プロセス
2405の名前空間115のコピーも含まれる。通信プ
ロセスは、ファイルシステム109(b)からCPUパイ
プ2501を介して往信メッセージを受信して、そのメ
ッセージをサービス・パイプ(SERVP)2505に書き
込む。マルチプレクサ・プロセス(MPX)2507
は、サービス・パイプ2505を読み、往信メッセージ
に応じて、CPUサービスのファイルシステム2523に
あるファイルに対して処理を行う。ファイルシステム2
523には、ユーザ・プロセス2405(b)がプロセッ
サ2403(b)に置かれたサービス123において開い
た各ファイル2513に対応するサービス・ファイル2
521がある。処理の結果発生する返信メッセージは、
CPUパイプ2501を介してファイルシステム109
(b)に返される。
【0168】オープン・ファイル2513へのファイル
・アクセス処理は、オープン・ファイル・プロセス25
11によって行われる。各オープン・ファイル2513
に対しオープン・ファイル・プロセス2511がある;
オープン・ファイル・プロセス2511は、それがその
ファイルに関するファイル・アクセス往信メッセージを
マルチプレクサ・プロセス2507から受信する手段で
あるような別個のパイプ2509を有し、さらに各プロ
セス2511は、サービス・パイプ2505に接続され
ている。各プロセス2511は、さらにそのデータの一
部として、そのオープン・ファイル2513に対するフ
ァイル記述子2517を有する。マルチプレクサ250
7からのファイル・アクセス往信メッセージに応じて、
ファイル記述子2517を用いて、そのオープン・ファ
イル2513に対するアクセス処理を行った後、プロセ
ス2511は、往信メッセージの結果をオープン・ファ
イル・プロセス2511からの返信メッセージとして、
サービス・パイプ2505に書き込む。マルチプレクサ
・プロセス2507は、その往信メッセージに応じて、
単にそれをCPUパイプ2501に書き込む。さらに詳
細に後述するように、その処理を実行するために各プロ
セス2511および2507によって必要とされる情報
は、プロセス2511の各々に対するサービス・データ
構造体(SRVD)2519およびマルチプレクサ・プ
ロセス2525に対するサービス・データ構造体251
5に収容される。
【0169】図26に、サービス・データ構造体262
3、およびCPUサービス・ファイルシステム2523に
おけるファイルを表すのに使用されるデータ構造体を詳
細に示す。まず、サービス・データ構造体2623であ
るが、フィールド2625は、サービス・データ構造体
2623が属するプロセスがファイル処理を実行するた
めに用いるプロシージャへのポインタから成る。MPX SR
Vデータ2525の場合、サービス・ファイル要求の各
々にプロシージャがある。リードおよびライト以外のす
べての要求に対するプロシージャは、ファイルシステム
2523に対する処理を行う。リードおよびライトに対
するプロシージャは、ファイルのオープン・ファイル・
プロセス2511に対するパイプ2509にライト処理
を行うことによって、リードまたはライトされているフ
ァイル2513に対応するオープン・ファイル・プロセ
ス2511に処理を渡す。オープン・ファイルSRVデー
タ2519の場合、リードおよびライト処理に対するプ
ロシージャしかなく、これらのプロシージャは、単に、
オープン・ファイル・プロセス2511に対するFD2
517によって指定されたファイルに適切な処理を行
い、応答として受信した返信メッセージをサービス・パ
イプ2505に書き込むだけである。
【0170】SRVD2623のその他の内容は、次のとお
りである。RFD2627:SRVD2623が属するプロセ
スがメッセージを読むために使用するファイル記述子。
WFD2629:メッセージを書くために使用されるファ
イル記述子。DSIZE2631:DATA2637の大きさ。t
hdr2633:往信メッセージがRFD2627に基づきプ
ロセスによって読まれたときの往信メッセージのヘッダ
を収容する。rhdr2633:返信メッセージがWFD26
29に基づいてプロセスによって書かれたときの返信メ
ッセージのヘッダを収容する。DATA2637:往信メッ
セージまたは返信メッセージのデータを収容する。
【0171】MPX SRVD2515においては、WFD262
9は、MPX2507によって読まれるメッセージが書き
込まれる先のサービス・パイプ2505におけるファイ
ルのファイル記述子であり(すなわち、MPX2507は
メッセージをそれ自体に書く)、WFD2629は無効で
ある。OF SRVD2529においては、RFD2627は、オ
ープン・ファイル・プロセス2511がメッセージを読
む読出し元のパイプ2509におけるファイルのファイ
ル記述子であり、WFD2629は、オープン・ファイル
・プロセス2511がメッセージを書き込む先のサービ
ス・パイプ2505におけるファイルのファイル記述子
である。
【0172】続いて、CPUサービス・ファイルシステム
2523に付いてであるが、このファイルシステムは、
図26の2523に示したデータ構造体を用いて実施さ
れる。CPUサービス2413によって与えられる各CPUサ
ービス・ファイル2521(i)は、CPU2403(a)上
で実行中のサービスによってプロセッサ2403(b)上
で動作中のユーザ・プロセス2405(b)に与えられる
ファイル2513(i)に対応する。各CPUサービス・ファ
イル2521(i)は、ファイル・ポインタ配列(FPA)2
603内にエントリを有する。各エントリ2605(i)
は、ファイル2513(i)に関する往信メッセージ要求
処理においてファイルシステム109によって与えられ
るfid331によってインデックスが与えられる。この
エントリにおけるフィールドは、次のとおりである。FP
2607:ファイル・エントリ2615へのポインタで
あり、エントリ2615は、サービス・ファイル252
1に対応するオープン・ファイル2513(i)に関する
情報からなる。FD2609:オープン・ファイル251
3(i)のファイル記述子。OFPPID2611:オープン・
ファイル2513(i)およびサービス・ファイル252
1(i)に対応するオープン・ファイル・プロセス251
1(i)に対するプロセス識別子。最後に、オープン・フ
ァイル・プロセス・パイプ(OFPP)2613:パイプ2
509(i)に対するファイル記述子の配列。ファイル・
エントリ2615は、オープン・ファイル2513(i)
に関する情報を収容する。この情報は、ファイル251
3(i)の所在を特定するファイルシステム109からのw
alk要求の過程で得られる。FNAMEP2617は、ファイ
ル2513(i)のパス名である文字列FNAME2691への
ポインタである。QID323、DEV315、およびTYPE3
13は、ファイル2513(i)に対するチャネル301
からの対応する値である。REF2621は、ファイル・
エントリ2615が再利用可能かどうかを示す参照カウ
ンタである。実施例において、ファイル・ポインタ配列
2603、およびファイル・エントリ2615の配列
は、CPUサービス2413が処理を開始したときに生成
される。
【0173】CPUサービス2413の動作 CPUサービス2413の処理の例を、attach、walk、ope
n、およびclunkの各要求によって与えられる。attach要
求により、サービス123によって与えられるファイル
木構造が、そのattach要求をしているプロセス102に
利用できるようになる。attach要求に対する往信メッセ
ージには、アタッチされているサービス123のルート
に対するfid331が含まれる。attachが成功ならば、
返信メッセージには、そのルートに対するqid323お
よびfid331が含まれる。CPUサービス2413の場
合、このサービスによって与えられるファイル木構造
は、ユーザ・プロセス2405(a)に属するファイル木
構造である。MPXプロセス2507は、往信メッセージ
を受信すると、MPXプロセス2507のMPX SRVD251
5において指定されるattach関数を呼び出す。この関数
は、fid331に対応するFPACE2603を生成する。FP
ACE2603において、フィールド2609、261
1、および2613は、すべて、空値を有する。次に、
attach関数が、ルート「/」に関するstat要求をする
と、これにより、ユーザ・プロセス2405の名前空間
115のqid323が返される。ここで、この関数は、
ファイル・エントリ2615を生成し、「/」をファイ
ル名2619に、qidをqid323にそれぞれ配置し、参
照カウントを1に設定する。その後、SRVD2525のth
dr2633にあるqid323をルートのqid323に設定
する。最後に、関数「srveply」を呼び出すと、これ
が、qidが入った返信メッセージを生成して、これをサ
ービス・パイプ2505に書き込む。MPXプロセス25
07は、この返信メッセージを受信すると、それをcpu
パイプ2501に書く。
【0174】walk要求の往信メッセージには、ディレク
トリに対するqid323に関係付けられたfid331およ
びそのディレクトリ内のファイルの名前が含まれる。wa
lkが、成功した場合、fid331は、提示されたファイ
ルに関係付けられ、さらに提案されたファイルに対する
qid323が、fid331と共に返信メッセージで返され
る。MPXプロセス2507は、walk往信メッセージを受
信すると、SRVD2515において指定されるwalk関数を
呼び出す。walk関数は、fid311に対応するFPAE26
05の所在を特定し、さらにFPAE2605のファイル・
エントリ2615の所在を特定する。次に、往信メッセ
ージにおける名前によって指定されたファイルのパス名
を生成するために、その指定されたファイルの名前をFN
AME2619に入っているパス名に追加する。そのうえ
で、stat要求を行って、そのパス名で指定されるファイ
ルの状態情報を得る。次に、REF2621が実行され
る。REF2621が、値1を有する場合、提示されたフ
ァイルに対して、ファイル・エントリ2615を使用す
ることができる。この場合、stat要求によって獲得した
qid、dev、およびtypeの値が、ファイル・エントリ26
15のフィールド323、315および313に書き込
まれ、FNAME2619が、そのファイルのパス名に設定
され、さらにMPX SRVD2515のthdr2633における
323が、そのファイルの対するqidに設定される。REF
2621が、1を越える値を有する場合、新たなファイ
ル・エントリ2615が割り当てられ、そのフィールド
およびthdr2633が、前記のように設定され、さらに
FP2607が、新たなファイル・エントリ2615を示
すように設定される。そのうえで、返信メッセージが、
fid331およびqid323と共に返される。
【0175】open要求の往信メッセージには、開かれる
ファイルのfid331および開かれたファイルのモード
を示す値が含まれる。返信メッセージには、開かれたフ
ァイルのfid331およびqid323が含まれる。open関
数は、open往信メッセージに応じてMPXプロセス250
7によって実行され、fid331を用いて適切なファイ
ル・ポインタ配列エントリ(FPAE)2605の所在を特
定し、FPAE2605に対するファイル・エントリ261
5の所在を特定し、さらにFNAME2619にあるパス名
およびモードの値を用いてopenシステム・コールを行
う。このコールは、そのファイルのファイル記述子を返
す。次に、そのオープン・ファイルに対しパイプ250
9が生成される。そのオープン・ファイルのファイル記
述子が、FPAE2605のFDフィールド2609に置か
れ、さらにパイプ2509に対するファイル記述子が、
オープン・ファイル・プロセス・パイプ(OFPP)261
3に置かれる。次に、開かれたファイルに対応するオー
プン・ファイル・プロセス2511が、生成され、さら
にそのSERVD2519構造体が、オープン・ファイル・
プロセスがパイプ2509から読み出し、サービス・パ
イプ2505に書き込むように、設定される。オープン
・ファイル・プロセスのプロセス識別子が、オープン・
ファイル・プロセスpidフィールド(OFPPID)2611
に置かれる。このうえで、thdr2633のqidフィール
ドが、ファイル・エントリ2615から設定され、その
fidおよびqidが、返信メッセージに入れられて返され
る。
【0176】clunk要求により、サービス123は、fid
331とqid323との間の関係付けを止めるように要
求される。この要求の往信メッセージには、fid331
が含まれる。返信メッセージは、単にそのfidを返す。c
lunk関数は、マルチプレクサ・プロセスによって実行さ
れ、fid331を用いて、適切なFPAE2605の所在を
特定する。そのエントリを見つけると、フィールドOFPP
ID2611において指定されるオープン・ファイル・プ
ロセス2511を終了させ、オープン・ファイル・プロ
セス2511が読み出していたパイプ2509にあるフ
ァイルをクローズし、フィールドFD2609にあるファ
イル記述子によって指定されるオープン・ファイルをク
ローズし、さらにフィールド2609、2611および
2613を、そのファイルが使用されていないことを示
すように設定する。次に、ファイル・エントリ2615
のREF2621をデクリメントし、デクリメントされた
フィールドが値0を有するならば、FNAME2619を解
放し、さらにFPAE2605のファイル・ポインタ260
7を0に設定する。最後に、fid331と共に返信メッ
セージを返す。
【0177】CPUサービス2413とユーザ・プロセ
ス2405(b)との接続 ユーザ・プロセス2405(a)が、シェル・コマンドを
実行すると、そのユーザ・プロセス2405(a)と同じ
名前空間を有する子プロセス102が生成される。生成
された子プロセス102は、最初に、カーネル環境サー
ビスによって与えられるファイル木構造にある「cpudi
r」と称するファイルを生成し、その現在のワーキング
・ディレクトリ(これは、ユーザ・プロセス2405
(a)のそれである)の名前をそのファイルに書き込む。
次に、このプロセスは、ダイヤル関数においてCPUコマ
ンドで指定されたCPU703の名前を使用する。ダイ
ヤル関数は、ユーザ・プロセス2405(a)(これも、
子プロセスを使用する)のユーザを求めてネットワーク
2409経由で指定されたCPU703を呼び出し、こ
の呼び出しの終了と同時に、指定されたCPU703
(図24では、CPU2403(b)と示した)への接続
を与える。このうえで、サービス・パイプ2505、お
よびCPUサービス・ファイルシステム2523に対する
データ構造体が、生成される。最後に、通信プロセス
が、生成され、かつそのネットワーク接続に対するファ
イル記述子に接続され、さらにマルチプレクサ・プロセ
ス2507が、生成され、かつサービス・パイプ250
5およびCPUパイプ2501に接続される。勿論、通信
サービス2503は、CPUパイプ2501についてリー
ドを行うので、この時点で、CPUサービス2413は、
ユーザ・プロセス2405(a)からの入力を待ってい
る。
【0178】CPU2403(b)において、ネットワー
ク2409への接続を傾聴し、かつネットワーク240
9に接続された他のエンティティから呼をCPU240
3(b)が受信したときに応答するようなプロセス102
が存在する。そのプロセスは、子プロセス102を開始
することによって、ユーザ・プロセス2405(a)から
の呼に応答する。子プロセス102は、ネットワーク接
続を表すファイルのパス名を入手し、さらに引数0を付
けてforkpgrpを行って、新たな名前空間115を得る。
つぎに、子プロセス102は、/dev/userがコールを行
ったユーザの名前を収容するように、その新たな名前空
間115を設定し、/srv/bootを開いてデフォルト・フ
ァイル・サービス2411のルートへの接続に対するフ
ァイル記述子を獲得し、さらに「/」を「#/」および
ファイル・サービス2411によって与えられるファイ
ル木構造のルートへと結合する。そして、子プロセス1
02は、/dev/userにあるユーザ名を用いて子プロセス
102のワーキング・ディレクトリをユーザのワーキン
グ・ディレクトリとし、標準入力、標準出力、および標
準エラーを、それらがネットワーク接続へと接続される
ように、設定する。さらに、結合処理をいくつか行う。
その終了時には、/binは、CPU2403(b)によって
実行できるコードを収容するディレクトリに変わり、/b
inは、シェル・プログラムのコードを収容する/lib/rc
に結合されていて、さらにカーネル・サービスは、控え
のファイル木構造601における適切な位置に結合され
ている。この時点で、子プロセス102は、分岐してユ
ーザ・プロセス2405(b)を生成する。このユーザ・
プロセス2405(b)は、子プロセス102の名前空間
115を受け継いでいる。
【0179】ユーザ・プロセス2405(b)は、ユーザ
・プロセス2405(b)の名前空間115の設定の仕上
げを行うCPUサーブと称するプログラムの名前をシェル
・プログラムに与えて、これを実行する。次に、ユーザ
・プロセス2405(b)が、replaceオプション付きのシ
ステム・マウント・コールを行うと、ディレクトリ「/m
nt/term」が、ネットワーク接続を表すファイル記述子
にマウントされる。/mnt/termは、キーボード、マウス
およびディスプレイがそれによって制御されるようなフ
ァイルに対して使用される、ユーザ・プロセス2405
(b)の名前空間におけるディレクトリである。
【0180】マウントの結果として、このとき「/mnt/t
erm」には、ユーザ・プロセス2405(a)の名前空間1
15にあるファイルが含まれる。これらのファイルに
は、ディレクトリ/fd609が含まれる。このディレク
トリのファイルは、値として、ユーザ・プロセス240
5(a)によって現在使用されているファイル記述子を有
する。従って、ファイル/fd/0、/fd/1、および/fd/2
は、ユーザ・プロセス2405(a)の標準入力、標準出
力、および標準エラーに対するファイル記述子を収容す
る。ユーザ・プロセス2405(a)は、ウィンドウ・サ
ービス1405を使用中であり、そのウィンドウ・サー
ビス1405によって与えられるファイルconsを/dev/c
onsに結合しているので、標準入力、標準出力、および
標準エラーに対するファイル記述子は、ウィンドウ・サ
ービス1405によって与えられるファイルconsを指定
する。次に、ユーザ・プロセス2405(b)は、それ自
体の標準入力、出力、およびエラーをクローズし、それ
によってファイル記述子0、1、および2を解放し、そ
して直ちに、/fd/0、/fd/1、および/fd/2における識別
子によって指定されるファイルを開く。従って、ユーザ
・プロセス2405(b)における標準入力、出力、およ
びエラーに対するリードおよびライトにより、ユーザ・
プロセス2405(a)におけるcons---代わって、端末2
407(a)におけるキーボードおよびディスプレイを表
す---に対するリードおよびライトが発生する結果とな
る。
【0181】同様に、マウントの結果として、/mnt/ter
mは、ディレクトリ/mnt/term/envを含み、さらに、これ
が、ファイル「cpudir」を含むが、ファイルcpudirは、
ユーザ・プロセス2405(a)のワーキング・ディレク
トリを収容するように、ユーザ・プロセス2405(a)
によって設定されたものである。次に、ユーザ・プロセ
ス2405(b)は、/mnt/term/env/cpudirを開き、それ
を読み、さらにディレクトリ変更コマンドを指定してシ
ェルを実行する。ディレクトリ変更コマンドにおいて、
「cpudir」から読み出した値が、引数として使用され
る。その結果、ユーザ・プロセス2405(a)の現在の
ディレクトリにおいて、新たなシェルが走り始める。次
に、この新たなシェルは、ユーザが定義したスクリプト
を実行する。このスクリプトは、ユーザがシェルを実行
する度に走らされ、ユーザ・プロセス2405(b)の名
前空間をさらにユーザ向きに変更することができる。一
般に、シェル・スクリプトは、次の内容を行うシステム
結合コールの実行をもたらすシェル・コマンド含む。 bind("/mnt/term/mnt/8.5","/dev/",AFTER) bind("/mnt/term/mnt/8.5/cons","/dev/cons",REPLACE) 最初の結合コールによって、8.5にあるファイル(ウィ
ンドウ・サービス1405によってユーザ・プロセス2
405(a)に与えられるファイル)が、/devに結合さ
れ;AFTERオプションが使用されているので、そのディ
レクトリが探査される前に、以前に結合されていたすべ
てのディレクトリが、ウィンドウ・サービス1405に
よって与えられるファイルを求めて探査される。2番目
の結合コールによって、ウィンドウ・サービス1405
によって与えられるファイルconsが、/dev/consに結合
される。/dev/cons自体が、以前にカーネル・サービス
#cを/devに結合した結合処理の結果である。従って、
/devは、ウィンドウ・サービス1405によって与えら
れるファイルconsが結合されている先のファイルであ
る。REPLACEが使用されているので、パス名/dev/cons
は、以降、ウィンドウ・サービス1405によってユー
ザ・プロセス2405(a)に与えられたファイルconsを
示すことになる。consからのリードにより、端末240
7(a)のキーボードにおいて入力されたデータを受信す
るようになり、一方、consへのライトにより、端末24
07(a)の画面上にデータを表示するようになる。
【0182】以上の説明は、本発明の一実施例に関する
もので、この技術分野の当業者であれば、本発明の種々
の変形例が考えられるが、それらはいずれも本発明の技
術的範囲に包含される。
【0183】尚、特許請求の範囲に記載した参照番号
は、発明の容易なる理解のためで、その技術的範囲を制
限するように解釈されるべきではない。
【0184】
【発明の効果】以上述べたように、本発明のオペレーテ
ィングシステムによれば、各プロセスが、独立した階層
(名前空間)を持ち、かつ、プロセスどうしが、異なる
プロセッサ上で実行中でも、互いに他のプロセスの名前
空間を利用することができるので、分散型システムのよ
うな大規模なシステムにおいても効率的に名前を管理す
ることができる。
【図面の簡単な説明】
【図1】本発明のオペレーティングシステムによって与
えられるプロセスごとの名前空間の概要を示す図であ
る。
【図2】本オペレーティングシステムにおけるマウント
・サービスおよびプロトコル・サービスの概要を示す図
である。
【図3】チャネル・データ構造体の線図である。
【図4】オープン・ファイルを位置づけるために使用さ
れるデータ構造体の線図である。
【図5】プロトコル・サービスとの間でプロトコルの受
け渡しに使用されるデータ構造体の線図である。
【図6】ルート・サービスによって与えられるファイル
木構造およびある結合操作、およびマウント操作が行わ
れた後のファイル木構造の線図である。
【図7】本発明のオペレーティングシステムが実施され
る分散システムの線図である。
【図8】本発明のマウント・テーブルの線図である。
【図9】図6の第2のファイル構造に対するマウント・
テーブルの線図である。
【図10】10Aおよび10Bは、好ましい実施例にお
けるnamec関数の流れ図である。
【図11】11Aおよび11Bは、好ましい実施例にお
けるwalk関数の流れ図である。
【図12】12Aおよび12Bは、好ましい実施例にお
けるmount関数の流れ図である。
【図13】好ましい実施例においてプロトコル・サービ
スを登録するために使用されるデータ構造体の線図であ
る。
【図14】本発明のオペレーティングシステムと共に用
いられるウィンドウ・サービスの概要を示す図である。
【図15】ウィンドウ・サービスによって与えられるフ
ァイル木構造の線図である。
【図16】ウィンドウ・サービスの構造の概要を示す図
である。
【図17】ウィンドウ・サービスにおいて実行されるmk
slave関数の流れ図である。
【図18】ウィンドウ・サービスによって与えられるフ
ァイル木構造の実施例の線図である。
【図19】ウィンドウサービスで利用されるウィンドウ
・データ構造体の線図である。
【図20】ウィンドウ・サービスの一部の内部構造の線
図である。
【図21】ウィンドウ・サービスにおいて実行されるsp
awn関数の流れ図である。
【図22】保持モードの好ましい実施例にとって重要な
ウィンドウ・データ構造体のある部分の線図である。
【図23】好ましい実施例において保持モードに対して
行われた処理のある部分の流れ図である。
【図24】CPUコマンドの作用の概要を示す図であ
る。
【図25】CPUサービスの内部データ構造体を示す線
図である。
【図26】CPUサービスによって用いられるデータ構
造体を示す線図である。
【符号の説明】
101 サービスのアーキテクチャ 102 プロセス 103 プロセス・グループ 113 ファイル・ロケータ関数 111 ファイル・アクセス関数 115 名前空間 117、125 ファイル木構造 123 サービス 127、129 ルート・ディレクトリ・ファイル 131 データ・ファイル
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ケニス エル.トンプソン アメリカ合衆国 07023 ニュージャー ジィ、ワッチャング、リッジ ロード 336 (56)参考文献 UKUUG,UNIX−THE LE GEND EVOLVES PROCE EDINGS OF THE SUMM ER 1990 UKUUG CONFER ENCE:Rob Pike Dave Presotto,Ken Tomp son,Howard Trkkey ”Plan9 from Bell Labs"

Claims (21)

    (57)【特許請求の範囲】
  1. 【請求項1】 マルチプロセスオペレーティングシステ
    ムを実行するコンピュータシステムにおいて、該マルチ
    プロセスオペレーティングシステムは、プログラムを実
    行する複数のプロセスと一つ以上の名前空間とを作成
    し、各プロセスはそれぞれ一つの現在の名前空間に対応
    し、一つのプロセスに対応する名前空間はプログラムを
    実行する際に該一つのプロセスがプログラムの実行時に
    参照可能な前記コンピュータシステム内のエンティティ
    の名前の集合であり、前記コンピュータシステムは、 任意のプロセスが該プロセスの現在の名前空間とは異な
    る新しい名前空間を作成して現在の名前空間と置換する
    ためにプログラムの実行時に使用可能な新名前空間作成
    手段を前記オペレーティングシステム内に有することを
    特徴とするコンピュータシステム。
  2. 【請求項2】 前記新しい名前空間内の名前の集合が名
    前からなる単一の木構造に編成されることを特徴とする
    請求項1のシステム。
  3. 【請求項3】 任意のプロセスが該プロセスの現在の名
    前空間内の任意の名前と現在の名前空間内の別の名前と
    の結合を変更するためにプログラムの実行時に使用可能
    な現名前空間変更手段をさらに有することを特徴とする
    請求項1のシステム。
  4. 【請求項4】 前記マルチプロセスオペレーティングシ
    ステムは、プログラムを実行しているプロセスが前記現
    名前空間変更手段を使用しているときには特殊モードに
    入らないことを特徴とする請求項3のシステム。
  5. 【請求項5】 前記現名前空間変更手段は、名前空間内
    の第1名前をエンティティの名前の集合に関連づけるこ
    とにより該第1名前の結合を変更することを特徴とする
    請求項3のシステム。
  6. 【請求項6】 前記第1名前に関連づけられている名前
    の集合は名前空間内に既に存在する名前の集合であるこ
    とを特徴とする請求項5のシステム。
  7. 【請求項7】 前記現名前空間変更手段は、前記第1名
    前をエンティティの名前の別の集合に関連づけることに
    より該第1名前の結合を変更することを特徴とする請求
    項5のシステム。
  8. 【請求項8】 前記現名前空間変更手段が前記第1名前
    を前記別の集合に関連づける場合、前記第1名前に現在
    関連づけられている名前の集合を前記別の集合で置き換
    えるか、または、前記別の集合を前記第1名前に現在関
    連づけられている名前の集合と結合することを特徴とす
    る請求項7のシステム。
  9. 【請求項9】 前記現名前空間変更手段が前記別の集合
    を前記第1名前に現在関連づけられている名前の集合と
    結合する場合、前記現名前空間変更手段は、前記第1名
    前に現在関連づけられている名前が前記別の集合内の名
    前に対してどのように並べられるべきかに関する、プロ
    グラムを実行中のプロセスによる指定に応答して、該指
    定に従って名前を並べることを特徴とする請求項8のシ
    ステム。
  10. 【請求項10】 前記第1名前に現在関連づけられてい
    る名前の集合は前記現在の名前空間に付加されることを
    特徴とする請求項7のシステム。
  11. 【請求項11】 名前の集合は木構造を有し、前記現名
    前空間変更手段は前記第1名前を該木構造のルートに関
    連づけることを特徴とする請求項10のシステム。
  12. 【請求項12】 名前の集合を提供し、該名前の集合に
    よって表されるエンティティの集合に対する操作を実行
    するサービス手段を前記オペレーティングシステム内に
    さらに有することを特徴とする請求項10のシステム。
  13. 【請求項13】 前記サービス手段によって提供される
    名前の集合によって表されるエンティティの集合は、該
    名前の集合を自己の名前空間に付加する各プロセスごと
    に固有のものであることを特徴とする請求項12のシス
    テム。
  14. 【請求項14】 前記サービス手段は複数のサービス手
    段のうちの一つであり、 各サービス手段は、該サービス手段によって提供される
    名前の集合によって表されるエンティティを制御するた
    めに同一の操作の集合を使用することを特徴とする請求
    項12のシステム。
  15. 【請求項15】 前記複数のサービス手段のうちのいく
    つかはプロトコルサービス手段であり、 プロセスとプロトコルサービス手段の間の通信は、すべ
    てのプロトコルサービス手段に対して同一のプロトコル
    によることを特徴とする請求項14のシステム。
  16. 【請求項16】 前記コンピュータシステムは、通信手
    段によって接続されたコンポーネントを含む分散コンピ
    ューティングシステムで動作し、 プロトコルサービス手段のうちのいくつかは、前記プロ
    セスを実行中のコンポーネントとは異なるリモートコン
    ポーネント上に位置し、 前記プロセスと、前記リモートコンポーネント上に位置
    するプロトコルサービス手段の間の通信は前記通信手段
    によることを特徴とする請求項15のシステム。
  17. 【請求項17】 前記新しい名前空間内の名前の集合が
    名前からなる単一の木構造に編成されることを特徴とす
    る請求項3のシステム。
  18. 【請求項18】 前記オペレーティングシステムは、ス
    タブ木構造として編成されたあらかじめ定義された名前
    の集合を前記現名前空間変更手段に提供し、前記現名前
    空間変更手段は該スタブ木構造を前記単一の木構造のル
    ートに結合することを特徴とする請求項17のシステ
    ム。
  19. 【請求項19】 前記新名前空間作成手段を使用する際
    に、プログラムを実行中のプロセスは、前記新名前空間
    作成手段が該プロセスの現在の名前空間からの名前を含
    む新しい名前空間を作成することまたは空の新しい名前
    空間を作成することを指定し、前記新名前空間作成手段
    が該プロセスによって指定されたように応答することを
    特徴とする請求項1のシステム。
  20. 【請求項20】 前記オペレーティングシステムは、プ
    ロセスがプログラムの実行時に使用可能な、エンティテ
    ィをプロセスからアクセス可能にする手段をさらに有
    し、 一つのエンティティがプロセスからのアクセス可能性を
    獲得した場合、該アクセス可能性は該プロセスの新しい
    名前空間の作成によっては影響を受けないことを特徴と
    する請求項1のシステム。
  21. 【請求項21】 ファイル名を有し、該ファイル名を有
    するファイルに対する操作に応答してサービス手段によ
    って制御されるエンティティを表すファイルの集合を提
    供する一つ以上のサービス手段と、 プロセスの名前空間内の名前を有するファイルを該プロ
    セスからアクセス可能にし、アクセス可能なファイルに
    対する操作を実行する、プロセスからアクセス可能なフ
    ァイル操作手段と、 ファイル名を名前空間内の名前に関連づけることによっ
    て該名前の結合を変更する現名前空間変更手段とをさら
    に有することを特徴とする請求項1のシステム。
JP3196061A 1990-07-11 1991-07-11 コンピュータシステム Expired - Fee Related JP2724256B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US55121890A 1990-07-11 1990-07-11
US551218 1990-07-11
US70265191A 1991-05-17 1991-05-17
US702651 1991-05-17

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP9221547A Division JPH10124376A (ja) 1990-07-11 1997-08-18 コンピュータシステムでキャラクタコード列からなる入力を変換して出力する方法

Publications (2)

Publication Number Publication Date
JPH04233654A JPH04233654A (ja) 1992-08-21
JP2724256B2 true JP2724256B2 (ja) 1998-03-09

Family

ID=27069681

Family Applications (2)

Application Number Title Priority Date Filing Date
JP3196061A Expired - Fee Related JP2724256B2 (ja) 1990-07-11 1991-07-11 コンピュータシステム
JP9221547A Pending JPH10124376A (ja) 1990-07-11 1997-08-18 コンピュータシステムでキャラクタコード列からなる入力を変換して出力する方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP9221547A Pending JPH10124376A (ja) 1990-07-11 1997-08-18 コンピュータシステムでキャラクタコード列からなる入力を変換して出力する方法

Country Status (7)

Country Link
US (1) US5623666A (ja)
EP (1) EP0466486B1 (ja)
JP (2) JP2724256B2 (ja)
AU (1) AU649455B2 (ja)
CA (1) CA2046723C (ja)
DE (1) DE69129479T2 (ja)
ES (1) ES2116276T3 (ja)

Families Citing this family (145)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5826017A (en) * 1992-02-10 1998-10-20 Lucent Technologies Apparatus and method for communicating data between elements of a distributed system using a general protocol
CA2110243C (en) * 1992-12-31 1998-08-11 Philip Steven Winterbottom Apparatus and methods for making a portion of a first name space available as a portion of a second name space
CA2121612A1 (en) * 1993-05-21 1994-11-22 Chung-Hwa Herman Rao Methods and apparatus for making and using distributed applications
US7174352B2 (en) * 1993-06-03 2007-02-06 Network Appliance, Inc. File system image transfer
US5963962A (en) * 1995-05-31 1999-10-05 Network Appliance, Inc. Write anywhere file-system layout
US6138126A (en) * 1995-05-31 2000-10-24 Network Appliance, Inc. Method for allocating files in a file system integrated with a raid disk sub-system
JP3541039B2 (ja) * 1993-08-03 2004-07-07 サン・マイクロシステムズ,インコーポレイテッド コンピュータアプリケーションのためのフレキシブル多重プラットフォームパーティショニング
FR2715486B1 (fr) * 1994-01-21 1996-03-29 Alain Nicolas Piaton Procédé de comparaison de fichiers informatiques.
US6418484B1 (en) * 1994-06-17 2002-07-09 Sun Microsystems, Inc. Method of remotely executing computer processes
US7424731B1 (en) 1994-10-12 2008-09-09 Touchtunes Music Corporation Home digital audiovisual information recording and playback system
US8661477B2 (en) 1994-10-12 2014-02-25 Touchtunes Music Corporation System for distributing and selecting audio and video information and method implemented by said system
WO1996012255A1 (fr) 1994-10-12 1996-04-25 Technical Maintenance Corporation Systeme de reproduction audio-visuelle numerique intelligent
US7188352B2 (en) * 1995-07-11 2007-03-06 Touchtunes Music Corporation Intelligent digital audiovisual playback system
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
JP3335801B2 (ja) * 1995-07-05 2002-10-21 株式会社日立製作所 異種ファイルへのアクセスを可能とする情報処理システム及びその制御方法
US6487580B1 (en) * 1995-09-25 2002-11-26 International Business Machines Corporation Method and system for managing concurrently executable computer processes
JP3738787B2 (ja) * 1995-10-19 2006-01-25 富士ゼロックス株式会社 資源管理装置及び資源管理方法
US5941943A (en) * 1996-06-17 1999-08-24 International Business Machines Corporation Apparatus and a method for creating isolated sub-environments using host names and aliases
US5805786A (en) * 1996-07-23 1998-09-08 International Business Machines Corporation Recovery of a name server managing membership of a domain of processors in a distributed computing environment
FR2753868A1 (fr) 1996-09-25 1998-03-27 Technical Maintenance Corp Procede de selection d'un enregistrement sur un systeme numerique de reproduction audiovisuel et systeme pour mise en oeuvre du procede
US5909542A (en) * 1996-11-20 1999-06-01 Cfi Proservices, Inc. Distributed computing system for executing intercommunicating applications programs
JPH10240603A (ja) * 1997-02-27 1998-09-11 Fuji Xerox Co Ltd ファイル管理装置及びファイル転送方法
US6678724B2 (en) * 1997-03-12 2004-01-13 Microsoft Corporation Common namespace for internet and local filesystem objects
US5946685A (en) * 1997-06-27 1999-08-31 Sun Microsystems, Inc. Global mount mechanism used in maintaining a global name space utilizing a distributed locking mechanism
US6044465A (en) * 1997-07-07 2000-03-28 International Business Machines Corporation User profile storage on and retrieval from a non-native server domain for use in a client running a native operating system
US7574727B2 (en) 1997-07-23 2009-08-11 Touchtunes Music Corporation Intelligent digital audiovisual playback system
FR2769165B1 (fr) 1997-09-26 2002-11-29 Technical Maintenance Corp Systeme sans fil a transmission numerique pour haut-parleurs
US6173293B1 (en) * 1998-03-13 2001-01-09 Digital Equipment Corporation Scalable distributed file system
US6654881B2 (en) * 1998-06-12 2003-11-25 Microsoft Corporation Logical volume mount manager
US6119131A (en) * 1998-06-12 2000-09-12 Microsoft Corporation Persistent volume mount points
US6496839B2 (en) 1998-06-12 2002-12-17 Microsoft Corporation Persistent names for logical volumes
US6487577B1 (en) * 1998-06-29 2002-11-26 Intel Corporation Distributed compiling
FR2781582B1 (fr) 1998-07-21 2001-01-12 Technical Maintenance Corp Systeme de telechargement d'objets ou de fichiers pour mise a jour de logiciels
US8028318B2 (en) 1999-07-21 2011-09-27 Touchtunes Music Corporation Remote control unit for activating and deactivating means for payment and for displaying payment status
FR2781591B1 (fr) * 1998-07-22 2000-09-22 Technical Maintenance Corp Systeme de reproduction audiovisuelle
FR2781593B1 (fr) 1998-07-22 2001-01-12 Technical Maintenance Corp Telecommande pour systeme de reproduction audiovisuelle numerique intelligent
FR2781580B1 (fr) 1998-07-22 2000-09-22 Technical Maintenance Corp Circuit de commande de son pour systeme de reproduction audiovisuelle numerique intelligent
US6219028B1 (en) * 1998-08-19 2001-04-17 Adobe Systems Incorporated Removing a cursor from over new content
US6467050B1 (en) 1998-09-14 2002-10-15 International Business Machines Corporation Method and apparatus for managing services within a cluster computer system
US6405217B1 (en) * 1998-09-21 2002-06-11 Microsoft Corporation State-based implementation of transactions on a file system
US6230190B1 (en) * 1998-10-09 2001-05-08 Openwave Systems Inc. Shared-everything file storage for clustered system
US6236999B1 (en) * 1998-11-05 2001-05-22 Bea Systems, Inc. Duplicated naming service in a distributed processing system
US6581088B1 (en) 1998-11-05 2003-06-17 Beas Systems, Inc. Smart stub or enterprise javaTM bean in a distributed processing system
US6571274B1 (en) * 1998-11-05 2003-05-27 Beas Systems, Inc. Clustered enterprise Java™ in a secure distributed processing system
US6385643B1 (en) 1998-11-05 2002-05-07 Bea Systems, Inc. Clustered enterprise Java™ having a message passing kernel in a distributed processing system
US8726330B2 (en) 1999-02-22 2014-05-13 Touchtunes Music Corporation Intelligent digital audiovisual playback system
US6546415B1 (en) 1999-05-14 2003-04-08 Lucent Technologies Inc. Network management system using a distributed namespace
FR2796482B1 (fr) 1999-07-16 2002-09-06 Touchtunes Music Corp Systeme de gestion a distance d'au moins un dispositif de reproduction d'informations audiovisuelles
US6629127B1 (en) * 1999-07-26 2003-09-30 Microsoft Corporation Methods and systems for processing HTTP requests
US7634453B1 (en) 1999-08-13 2009-12-15 Storage Technology Corporation Distributed file data location
US6553387B1 (en) * 1999-11-29 2003-04-22 Microsoft Corporation Logical volume configuration data management determines whether to expose the logical volume on-line, off-line request based on comparison of volume epoch numbers on each extents of the volume identifiers
US6684231B1 (en) * 1999-11-29 2004-01-27 Microsoft Corporation Migration of friendly volumes
FR2805377B1 (fr) * 2000-02-23 2003-09-12 Touchtunes Music Corp Procede de commande anticipee d'une selection, systeme numerique et juke-box permettant la mise en oeuvre du procede
FR2805060B1 (fr) 2000-02-16 2005-04-08 Touchtunes Music Corp Procede de reception de fichiers lors d'un telechargement
FR2805072B1 (fr) * 2000-02-16 2002-04-05 Touchtunes Music Corp Procede d'ajustement du volume sonore d'un enregistrement sonore numerique
DE10018327A1 (de) * 2000-04-13 2001-10-25 Sep Elektronik Gmbh Mehrprozess-Anwendungsmanagement
US7080078B1 (en) * 2000-05-09 2006-07-18 Sun Microsystems, Inc. Mechanism and apparatus for URI-addressable repositories of service advertisements and other content in a distributed computing environment
FR2808906B1 (fr) 2000-05-10 2005-02-11 Touchtunes Music Corp Dispositif et procede de gestion a distance d'un reseau de systemes de reproduction d'informations audiovisuelles
US6721880B1 (en) 2000-05-31 2004-04-13 Lucent Technologies Inc. Method and apparatus for maintaining configuration information in a computing environment
FR2811175B1 (fr) * 2000-06-29 2002-12-27 Touchtunes Music Corp Procede de distribution d'informations audiovisuelles et systeme de distribution d'informations audiovisuelles
AU2001269548A1 (en) * 2000-06-29 2002-01-08 Inus Technology Inc. Modeling method for discrete event system using event flow chart
FR2811114B1 (fr) 2000-06-29 2002-12-27 Touchtunes Music Corp Dispositif et procede de communication entre un systeme de reproduction d'informations audiovisuelles et d'une machine electronique de divertissement
US6498937B1 (en) 2000-07-14 2002-12-24 Trw Inc. Asymmetric bandwidth wireless communication techniques
US6886004B2 (en) * 2000-08-24 2005-04-26 Red Hat, Inc. Method and apparatus for atomic file look-up
FR2814085B1 (fr) 2000-09-15 2005-02-11 Touchtunes Music Corp Procede de divertissement base sur les jeux concours a choix multiples
WO2002057917A2 (en) 2001-01-22 2002-07-25 Sun Microsystems, Inc. Peer-to-peer network computing platform
US7058629B1 (en) * 2001-02-28 2006-06-06 Oracle International Corporation System and method for detecting termination of an application instance using locks
US7069317B1 (en) 2001-02-28 2006-06-27 Oracle International Corporation System and method for providing out-of-band notification of service changes
US6892205B1 (en) 2001-02-28 2005-05-10 Oracle International Corporation System and method for pre-compiling a source cursor into a target library cache
US7444335B1 (en) 2001-02-28 2008-10-28 Oracle International Corporation System and method for providing cooperative resource groups for high availability applications
NL1018008C1 (nl) * 2001-05-07 2002-11-08 Jean-Luc Rochet Werkwijze en systeem voor het uitvoeren van gepersonifieerde interactieve geautomatiseerde elektronisch marketing van de leverancier van marketingdiensten.
US6718327B1 (en) * 2001-08-31 2004-04-06 Openwave Systems Inc. Fault-tolerant queue with autonomous client operation
US7444393B2 (en) * 2001-10-30 2008-10-28 Keicy K. Chung Read-only storage device having network interface, a system including the device, and a method of distributing files over a network
JP2003208343A (ja) * 2002-01-10 2003-07-25 Ricoh Co Ltd ファイル作成・閲覧方法、ファイル作成方法、ファイル閲覧方法、ファイル構造及びプログラム
JP3862588B2 (ja) * 2002-04-11 2006-12-27 キヤノン株式会社 通信装置及びその制御方法
US8103589B2 (en) 2002-09-16 2012-01-24 Touchtunes Music Corporation Digital downloading jukebox system with central and local music servers
US9646339B2 (en) 2002-09-16 2017-05-09 Touchtunes Music Corporation Digital downloading jukebox system with central and local music servers
US7822687B2 (en) * 2002-09-16 2010-10-26 Francois Brillon Jukebox with customizable avatar
US10373420B2 (en) 2002-09-16 2019-08-06 Touchtunes Music Corporation Digital downloading jukebox with enhanced communication features
US8584175B2 (en) 2002-09-16 2013-11-12 Touchtunes Music Corporation Digital downloading jukebox system with user-tailored music management, communications, and other tools
US8332895B2 (en) 2002-09-16 2012-12-11 Touchtunes Music Corporation Digital downloading jukebox system with user-tailored music management, communications, and other tools
US11029823B2 (en) 2002-09-16 2021-06-08 Touchtunes Music Corporation Jukebox with customizable avatar
US8151304B2 (en) 2002-09-16 2012-04-03 Touchtunes Music Corporation Digital downloading jukebox system with user-tailored music management, communications, and other tools
US7502370B2 (en) 2003-01-21 2009-03-10 Nextio Inc. Network controller for obtaining a plurality of network port identifiers in response to load-store transactions from a corresponding plurality of operating system domains within a load-store architecture
US7174413B2 (en) * 2003-01-21 2007-02-06 Nextio Inc. Switching apparatus and method for providing shared I/O within a load-store fabric
US7493416B2 (en) 2003-01-21 2009-02-17 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US7917658B2 (en) * 2003-01-21 2011-03-29 Emulex Design And Manufacturing Corporation Switching apparatus and method for link initialization in a shared I/O environment
US8102843B2 (en) * 2003-01-21 2012-01-24 Emulex Design And Manufacturing Corporation Switching apparatus and method for providing shared I/O within a load-store fabric
US7836211B2 (en) * 2003-01-21 2010-11-16 Emulex Design And Manufacturing Corporation Shared input/output load-store architecture
US7188209B2 (en) * 2003-04-18 2007-03-06 Nextio, Inc. Apparatus and method for sharing I/O endpoints within a load store fabric by encapsulation of domain information in transaction layer packets
US8032659B2 (en) * 2003-01-21 2011-10-04 Nextio Inc. Method and apparatus for a shared I/O network interface controller
US7457906B2 (en) * 2003-01-21 2008-11-25 Nextio, Inc. Method and apparatus for shared I/O in a load/store fabric
US7046668B2 (en) * 2003-01-21 2006-05-16 Pettey Christopher J Method and apparatus for shared I/O in a load/store fabric
US8346884B2 (en) 2003-01-21 2013-01-01 Nextio Inc. Method and apparatus for a shared I/O network interface controller
US7698483B2 (en) * 2003-01-21 2010-04-13 Nextio, Inc. Switching apparatus and method for link initialization in a shared I/O environment
US7953074B2 (en) 2003-01-21 2011-05-31 Emulex Design And Manufacturing Corporation Apparatus and method for port polarity initialization in a shared I/O device
US7512717B2 (en) 2003-01-21 2009-03-31 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US7103064B2 (en) * 2003-01-21 2006-09-05 Nextio Inc. Method and apparatus for shared I/O in a load/store fabric
US7219183B2 (en) * 2003-01-21 2007-05-15 Nextio, Inc. Switching apparatus and method for providing shared I/O within a load-store fabric
US7617333B2 (en) * 2003-01-21 2009-11-10 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US7664909B2 (en) 2003-04-18 2010-02-16 Nextio, Inc. Method and apparatus for a shared I/O serial ATA controller
US7827156B2 (en) * 2003-02-26 2010-11-02 Microsoft Corporation Issuing a digital rights management (DRM) license for content based on cross-forest directory information
JP4022764B2 (ja) * 2003-06-26 2007-12-19 日本電気株式会社 情報処理装置、ファイル管理方法およびプログラム
JP4278452B2 (ja) * 2003-08-04 2009-06-17 株式会社日立製作所 計算機システム
US7380246B2 (en) * 2003-12-15 2008-05-27 Lenovo (Singapore) Pte. Ltd. Method and system of accessing at least one target file in a computer system with an operating system with file locking implemented with byte-range locking
US20050131960A1 (en) * 2003-12-15 2005-06-16 Reed Benjamin C. Method and system of accessing at least one target file in a computer system with an operating system with file locking implemented at file-open time
US8463748B1 (en) * 2004-02-05 2013-06-11 Emc Corporation File system quiescing
US7275071B2 (en) * 2004-02-27 2007-09-25 Scientific-Atlanta, Inc. Method of distributing content information over a broadcast file system
US7230520B2 (en) * 2004-05-03 2007-06-12 Dell Products L.P. Method and apparatus for RF access to system ID and fault information
US20060074940A1 (en) * 2004-10-05 2006-04-06 International Business Machines Corporation Dynamic management of node clusters to enable data sharing
JP4038216B2 (ja) * 2005-05-10 2008-01-23 ファナック株式会社 シーケンスプログラム編集装置
US7797273B2 (en) * 2006-03-27 2010-09-14 Emoze Ltd. System and a method for reliable symmetric data synchronization
US9171419B2 (en) 2007-01-17 2015-10-27 Touchtunes Music Corporation Coin operated entertainment system
US9330529B2 (en) 2007-01-17 2016-05-03 Touchtunes Music Corporation Game terminal configured for interaction with jukebox device systems including same, and/or associated methods
US9953481B2 (en) 2007-03-26 2018-04-24 Touchtunes Music Corporation Jukebox with associated video server
DE102007026242A1 (de) * 2007-05-30 2008-12-11 Carad Beteiligungen Gmbh Datenspeichereinrichtung
US8332887B2 (en) 2008-01-10 2012-12-11 Touchtunes Music Corporation System and/or methods for distributing advertisements from a central advertisement network to a peripheral device via a local advertisement server
US10290006B2 (en) 2008-08-15 2019-05-14 Touchtunes Music Corporation Digital signage and gaming services to comply with federal and state alcohol and beverage laws and regulations
WO2010005569A1 (en) 2008-07-09 2010-01-14 Touchtunes Music Corporation Digital downloading jukebox with revenue-enhancing features
US8806611B2 (en) * 2008-12-02 2014-08-12 At&T Intellectual Property I, L.P. Message administration system
US10564804B2 (en) 2009-03-18 2020-02-18 Touchtunes Music Corporation Digital jukebox device with improved user interfaces, and associated methods
US9292166B2 (en) 2009-03-18 2016-03-22 Touchtunes Music Corporation Digital jukebox device with improved karaoke-related user interfaces, and associated methods
US10719149B2 (en) 2009-03-18 2020-07-21 Touchtunes Music Corporation Digital jukebox device with improved user interfaces, and associated methods
CN106056367A (zh) 2009-03-18 2016-10-26 踏途音乐公司 娱乐服务器及相关的社交网络系统
US8683576B1 (en) * 2009-09-30 2014-03-25 Symantec Corporation Systems and methods for detecting a process to establish a backdoor connection with a computing device
CN105374380A (zh) 2010-01-26 2016-03-02 踏途音乐公司 具有改进的用户界面的数字点播设备和相关方法
US9342072B2 (en) * 2010-09-24 2016-05-17 Fisher-Rosemount Systems, Inc. Methods and apparatus to display process control device information
US8725978B2 (en) * 2011-06-30 2014-05-13 Red Hat, Inc. Using symbol information for categorization of dynamic memory allocations
US8719539B2 (en) * 2011-06-30 2014-05-06 Red Hat, Inc. Using heuristics for field types of a structure to categorize dynamic memory allocations
US20130067346A1 (en) * 2011-09-09 2013-03-14 Microsoft Corporation Content User Experience
CA2971002A1 (en) 2011-09-18 2013-03-21 Touchtunes Music Corporation Digital jukebox device with karaoke and/or photo booth features, and associated methods
US11151224B2 (en) 2012-01-09 2021-10-19 Touchtunes Music Corporation Systems and/or methods for monitoring audio inputs to jukebox devices
JP5567069B2 (ja) * 2012-06-11 2014-08-06 株式会社三菱東京Ufj銀行 データベースサーバ
US9092455B2 (en) 2012-07-17 2015-07-28 Microsoft Technology Licensing, Llc Image curation
US10346422B2 (en) * 2012-10-18 2019-07-09 International Business Machines Corporation Use of proxy objects for integration between a content management system and a case management system
US20140114864A1 (en) 2012-10-22 2014-04-24 International Business Machines Corporation Case management integration with external content repositories
WO2015070070A1 (en) 2013-11-07 2015-05-14 Touchtunes Music Corporation Techniques for generating electronic menu graphical user interface layouts for use in connection with electronic devices
US9276938B2 (en) * 2013-11-27 2016-03-01 General Electric Company Cross-enterprise workflow
KR102533342B1 (ko) 2014-03-25 2023-05-17 터치튠즈 뮤직 컴퍼니, 엘엘씨 향상된 사용자 인터페이스를 가지는 디지털 주크박스 장치 및 관련 방법
US10678412B2 (en) 2014-07-31 2020-06-09 Microsoft Technology Licensing, Llc Dynamic joint dividers for application windows
US10254942B2 (en) 2014-07-31 2019-04-09 Microsoft Technology Licensing, Llc Adaptive sizing and positioning of application windows
US10592080B2 (en) 2014-07-31 2020-03-17 Microsoft Technology Licensing, Llc Assisted presentation of application windows
US9836464B2 (en) 2014-07-31 2017-12-05 Microsoft Technology Licensing, Llc Curating media from social connections
KR102263357B1 (ko) * 2017-04-19 2021-06-11 한국전자통신연구원 분산 파일시스템 환경에서 사용자 수준 dma i/o를 지원하는 시스템 및 그 방법
US11941104B2 (en) * 2020-12-03 2024-03-26 Red Hat, Inc. Utilizing extended file attributes for working directory

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4525780A (en) * 1981-05-22 1985-06-25 Data General Corporation Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information
US5060150A (en) * 1987-01-05 1991-10-22 Motorola, Inc. Process creation and termination monitors for use in a distributed message-based operating system
US4853843A (en) * 1987-12-18 1989-08-01 Tektronix, Inc. System for merging virtual partitions of a distributed database
US5032979A (en) * 1990-06-22 1991-07-16 International Business Machines Corporation Distributed security auditing subsystem for an operating system
US5237680A (en) * 1990-09-27 1993-08-17 Sun Microsystems, Inc. Method for incremental rename propagation between hierarchical file name spaces

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
UKUUG,UNIX−THE LEGEND EVOLVES PROCEEDINGS OF THE SUMMER 1990 UKUUG CONFERENCE:Rob Pike Dave Presotto,Ken Tompson,Howard Trkkey "Plan9 from Bell Labs"

Also Published As

Publication number Publication date
EP0466486B1 (en) 1998-05-27
JPH04233654A (ja) 1992-08-21
AU649455B2 (en) 1994-05-26
US5623666A (en) 1997-04-22
ES2116276T3 (es) 1998-07-16
DE69129479D1 (de) 1998-07-02
EP0466486A3 (en) 1993-08-11
DE69129479T2 (de) 1998-11-05
EP0466486A2 (en) 1992-01-15
JPH10124376A (ja) 1998-05-15
CA2046723A1 (en) 1992-01-12
AU8033491A (en) 1992-01-16
CA2046723C (en) 1998-11-24

Similar Documents

Publication Publication Date Title
JP2724256B2 (ja) コンピュータシステム
JP2779587B2 (ja) コンピュータシステムに用いる名前スペースの一部分を別の名前スペースの一部分として利用可能にするための装置及びその方法
JP3439337B2 (ja) ネットワーク管理システム
US6499036B1 (en) Method and apparatus for data item movement between disparate sources and hierarchical, object-oriented representation
US6314460B1 (en) Method and apparatus for analyzing a storage network based on incomplete information from multiple respective controllers
US5724512A (en) Methods and apparatus for storage and retrieval of name space information in a distributed computing system
Pike et al. Plan 9 from bell labs
US20030093420A1 (en) Method and system for retrieving sharable information using a hierarchically dependent directory structure
JPH04246742A (ja) 異なるファイル・システムにまたがる記憶管理システム
JPH11224196A (ja) リモート・オブジェクト・アクセス
JPS62119664A (ja) コンピユ−タ ネツトワ−ク内での遠隔プロセス実行法
JPH058455B2 (ja)
JP4060890B2 (ja) 階層化ドライバ入出力システム内の複数ドライバによる入出力要求の再処理を可能にするファイル・システム・プリミティブ
Zwaenepoel et al. Perseus: Retrospective on a portable operating system
JPH08153010A (ja) 情報処理方法及び装置及びシステム
Forin et al. Parallel processing with Agora
Benkiran et al. A communication system architecture for the office
Abécassis YOODA: Handling Distribution Through OODBMS
Lamberts et al. Paragon parallel programming environment on sun workstations
Tag et al. Design of an object-oriented distributed system: experience with CSA
Liao et al. The THUDSOS distributed operating system
Zhou et al. Berkeley, California 94720
JPH0756743A (ja) モジュ−ル管理方法および装置
Juhász et al. JGrid design document
JPH06250920A (ja) 情報処理装置の最適化方法

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

Free format text: PAYMENT UNTIL: 20081128

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20081128

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20091128

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20101128

Year of fee payment: 13

LAPS Cancellation because of no payment of annual fees