Files-11は、 Digital Equipment CorporationのRSX-11、IAS、およびOpenVMSオペレーティングシステムで使用されているファイルシステムです。レコード指向のI/O、リモートネットワークアクセス、およびファイルバージョニングをサポートしています。オリジナルのODS-1レイヤーはフラットファイルシステムですが、ODS-2バージョンは階層型ファイルシステムであり、アクセス制御リストをサポートしています。
Files-11は、 TOPS-20やRSTS/Eといった以前のDigital Equipment Corporationのオペレーティングシステムで使用されていたファイルシステムと似ているが、それらよりもはるかに高度なものである。
Files-11のオリジナル版であるODS-1では、ユーザーアカウントごとに1つのディレクトリを割り当てるという、基本的な非階層型ディレクトリ構造が採用されていました。各ユーザーアカウントは2つの数字(ペア)で表され、それぞれに1つのディレクトリが関連付けられていました。これはRSTS/Eファイルシステムに類似していました。プログラム実行ファイルやOS自体などの特別なシステムファイルは、予約済みのシステムアカウントのディレクトリに格納されていました。[project,programmer]
これは、永続的な記憶容量が限られていたPDP-11システムには適していましたが、より大容量のハードドライブを搭載したVAXシステムでは、より柔軟なファイル保存方法が必要でした。そのため、VMSで導入されたFiles-11のODS-2バージョンは、特に階層的なディレクトリ構造を提供しました。
「Files-11」とは、ディスク上構造(ODS)レベル1から5までの5つの独立したファイルシステムの総称です。
ODS-1はRSX-11 OSで使用されるフラットファイルシステムであり、RSXとの互換性のために古いVMSシステムでもサポートされていましたが、VMS自体をサポートするために使用されたことはありませんでした。現在ではODS-2とODS-5にほぼ置き換えられています。
ODS-2は、VMSのオリジナルファイルシステムです。ODS-1と比較すると、階層型ファイルシステムです。
ODS-3とODS-4は、ODSレベルの名称で呼ばれることは稀ですが、それぞれCD-ROM ISO 9660およびHigh SierraフォーマットのファイルシステムをサポートするFiles-11です。
ODS-5は、 Alpha、IA-64、x86-64プラットフォームで利用可能なODS-2の拡張版で、非ASCII文字を含むファイル名の大文字小文字の区別をサポートする機能と、階層型ディレクトリのサポート機能の強化が追加されています。元々は「NT Affinity」プロジェクトの一環として、 Microsoft Windowsやその他の非VMSシステムへのファイル配信を目的としていましたが、ユーザーディスクやインターネットサーバーでも使用されています。

Files-11ファイルシステム内のすべてのファイルとディレクトリは、1つ以上の親ディレクトリ内に格納され、最終的にはルートディレクトリ、つまりマスターファイルディレクトリ(下記参照)の下に配置されます。したがって、ファイルシステムは有向非巡回グラフ(DAG)構造で構成されています。
この例では(右を参照)、はと のFile 2両方のディレクトリにエントリを持っています。つまり、両方のディレクトリに同時に存在します。一方のディレクトリから削除しても、もう一方のディレクトリからも削除されるまでは、そのディレクトリに存在し続けます。これは、UNIXのハードリンクの概念に似ていますが、ハードリンクが設定されていないディスク(ODS-5 ディスクでのみ利用可能で、しかもディスクでハードリンクが有効になっている場合のみ)では、ファイルが実際に削除されないように注意する必要があります。Dir 2Dir 3
稼働中のVMSシステムは、それぞれが完全かつ独立したファイルシステムを持つ1つ以上のオンラインディスクにアクセスできます。これらはローカルストレージである場合もあれば、クラスタ構成の場合はリモートシステムと共有されるストレージである場合もあります。

OpenVMSクラスタ構成では、非プライベートディスクはクラスタ内のすべてのノード間で共有されます(図1参照)。この構成では、2つのシステムディスクはネットワーク経由で両方のノードからアクセスできますが、プライベートディスクは共有されません。プライベートディスクは、そのマシン上の特定のユーザーまたはプロセスのみが使用できるようにマウントされます。クラスタ全体でのファイルへのアクセスは、ファイルシステムの不可欠な部分であるOpenVMS分散ロックマネージャによって管理されます。
複数のディスクを組み合わせて、単一の大きな論理ディスク(ボリュームセット)を構成できます。また、データセキュリティの向上や読み取りパフォーマンスの高速化のために、ディスクを自動的に複製してシャドウセットを作成することも可能です。
ディスクは、物理名または(より一般的には)ユーザー定義の論理名によって識別されます。たとえば、ブートデバイス(システムディスク)の物理名は ですが、通常は論理名$3$DKA100で参照されます。SYS$SYSDEVICE
各ディスク上のファイルシステム(ODS-1を除く)は階層構造になっています。完全なファイル名は、ノード名、ユーザー名とパスワード、デバイス名、ディレクトリ、ファイル名、ファイルタイプ、バージョン番号で構成され、形式は次のとおりです。
NODE"accountname password"::device:[directory.subdirectory]filename.type;ver
例えば、 は、現在のデフォルトディスクのディレクトリ にある[DIR1.DIR2.DIR3]FILE.EXTの最新バージョンを指します。FILE.EXT[DIR1.DIR2.DIR3]
DIR1はマスターファイルディレクトリ(MFD)、つまりルートディレクトリのサブディレクトリであり、DIR2は のサブディレクトリですDIR1。ディスクの MFD は で識別されます[000000]。
ファイル名のほとんどの部分は省略できます。省略した場合、それらは現在のデフォルトファイル指定から取得されます。デフォルトファイル指定は、ノード、デバイス名、ディレクトリのデフォルト値のセットを提供することで、他のオペレーティングシステムの「現在のディレクトリ」の概念に取って代わります。すべてのプロセスには、ディスク名とディレクトリを含むデフォルトファイル指定があり、ほとんどのVMSファイルシステムルーチンは、ファイルタイプも含むデフォルトファイル指定を受け入れます。TYPEたとえば、コマンドは.LISファイルタイプとしてデフォルトで「 」を使用するため、拡張子のないコマンドはTYPE Fファイル を開こうとしますF.LIS。
すべてのファイルにはバージョン番号があり、同じファイル名の他のバージョンが存在しない場合はデフォルトで 1 になります (存在する場合は、最も大きいバージョンより 1 大きいバージョンになります)。ファイルが保存されるたびに、既存のバージョンを上書きするのではなく、同じ名前でバージョン番号がインクリメントされた新しいファイルが作成されます。古いバージョンは、DELETEまたはコマンドを使用して明示的に削除できますPURGE。また、オプションで、ファイルのバージョン制限(で設定SET FILE/VERSION_LIMIT) に達したときに、ファイルの古いバージョンを自動的に削除することもできます。そのため、古いバージョンは上書きされず、ディスク上に保持され、いつでも取得できます。バージョン番号のアーキテクチャ上の制限は 32767 です。バージョン管理の動作は、不要な場合は簡単に上書きできます。特に、データベースなど、直接更新されるファイルは、明示的にプログラムされない限り、新しいバージョンを作成しません。
ODS-2 では、サブディレクトリのレベルは 8 レベルに制限され、ファイル名は最大 39.39 文字 (ファイル名に 39 文字、拡張子に 39 文字) まで、大文字の英数字 (アンダースコア、ダッシュ、ドル記号を含む) のみ使用できます。ODS-5 では、文字セットが小文字とその他のほとんどの印刷可能な ASCII 文字、ISO Latin-1およびUnicode文字に拡張され、ファイル名の最大長が長くなり、サブディレクトリのレベルが無制限になります。ODS-2 では許可されていない文字を使用する ODS-5 ファイルのパス名を作成する場合、下位互換性を維持するために特別な "^" 構文が使用されます。たとえば、ODS-5 ディスク上のファイル " "は" "とfile.tar.gz;1表記されます。ファイル名は " " で、拡張子は " " です。file^.tar.gzfile.tar.gz
アクセス制御はユーザー識別コード(UIC)に基づいて行われます。UICはユーザー番号とグループ番号で構成され、グループ番号はプロジェクト番号とも呼ばれます。ログインしているユーザーにはUICが割り当てられ、ファイルはUICによって所有されます。
RSX-11 および IAS では、アクセス制御は 4 つの権限グループによって管理されます: [ 1 ] [ 2 ] [ 3 ] [ 4 ]
そして、4つのパーミッションビット:
「システム」アクセスは、UICグループ番号が8進数で10以下、または10進数で8以下のユーザーに適用されます。「所有者」と「グループ」はファイルの所有者とそのユーザーのユーザーグループに適用され、「ワールド」はその他のすべてのユーザーに適用されます。
VMSにおける4つのパーミッションビットは以下のとおりです。
拡張権限ではなく、実行権限を付与する。
MAXSYSGROUP「システム」アクセスは、UICグループ番号がシステムパラメータ(通常は8または10の8進数)以下のすべてのユーザーに適用されます。また、5番目のパーミッションビットである「制御」は、保護などのファイルメタデータを変更するアクセス権限を決定するために使用されます。このグループは明示的に設定することはできません。システムとオーナーに対しては常に設定され、グループやワールドに対しては決して設定されません。
ファイルセキュリティは、4つのシステム権限によっても影響を受けます。これらの権限を持つユーザーは、アクセス制御を上書きすることができます。
BYPASS: ユーザーは、ファイル保護に関係なく、すべてのファイルに対して暗黙的に読み書き可能アクセス権を持ちます。READALL: ユーザーは暗黙的にすべてのファイルへのRアクセス権を持つ。SYSPRV: ユーザーはシステム保護に基づいてファイルにアクセスできます。GRPPRV: ユーザーの UIC グループがファイルのグループと一致する場合、システム保護に基づいてユーザーにファイルへのアクセス権限が付与されます。VMS 4.0 では、ACLベースのアクセス制御が追加されました。ACL を使用すると、ユーザーまたはグループごとに追加の権限を割り当てることができます。たとえば、Web サーバーの UIC に特定のディレクトリ内のすべてのファイルへの読み取りアクセス権を付与できます。ACL は継承としてマークすることができ、ディレクトリ ファイルの ACL がその配下のすべてのファイルに適用されます。ACL はコマンドを使用して変更されEDIT/ACL、識別子/アクセス ペアの形式をとります。たとえば、ACL エントリは次のようになります。
(IDENTIFIER=HTTP$SERVER、ACCESS=READ+EXECUTE)
ユーザーがHTTP$SERVERファイルを読み込んで実行できるようにする。
論理名は、ディスク、ディレクトリ、ファイルを参照したり、その他のプログラム固有の情報を含めたりできるシステム変数です。たとえば、論理名SYS$SYSDEVICEにはシステムのブートデバイスが含まれます。論理名は通常、単一のディレクトリまたはディスクを参照します。たとえば、SYS$LOGIN:はユーザーのログイン(ホーム)ディレクトリ(または複数のディレクトリ)です。これらの論理名は、SYS$LOGIN:[DIR]FILE実際のディスク名として使用することはできません。は有効なファイル指定ではありません。ただし、で定義される隠蔽された論理名は、DEFINE/TRANSLATION=CONCEALEDそのように使用できます。これらのルートディレクトリは、ディレクトリ指定の末尾に「.」を付けて定義されるため、
$ DEFINE/TRANS=CONCEAL HOME DISK$USERS:[ユーザー名.]
使用できるようになりますHOME:[DIR]FILE。より一般的なのは、任意のディスクまたは任意のディレクトリに配置されている可能性のある、アプリケーション ソフトウェアに関連付けられた特定のディレクトリを指す単純な論理値です。したがって、論理値 ABC_EXE はアプリケーション ABC の実行可能プログラムのディレクトリを指し、ABC_TEMP は同じアプリケーションの一時ファイルのディレクトリを指す可能性があります。このディレクトリは、ABC_EXE と同じディスクの同じディレクトリ ツリーにある場合もあれば、別のディスクのどこか (別のディレクトリ ツリー内) にある場合もあります。
Unixと同様に、VMSは論理名、、およびを介してアクセスされるいくつかの標準入力および出力チャネルを定義しています。[ 5 ]SYS$INPUTSYS$OUTPUTSYS$ERRORSYS$COMMAND
論理名には、POSIXオペレーティングシステムにはそれとほぼ同等の機能は存在しません。Unix環境変数に似ていますが、コマンドシェルやアプリケーションプログラムではなく、ファイルシステムによって展開されます。使用する前に定義する必要があるため、システム起動コマンドファイルやユーザーログインコマンドファイルで多くの論理名を定義するのが一般的です。VMSでは、論理名は他の論理名を参照でき(ネスト制限は最大10)、既存のファイル名を検索するための名前のリストを含めることができます。よく参照される論理名には、次のようなものがあります。
論理名の概念をサポートする、DEC以外のオペレーティングシステムで最も近いのは、コマンドを介して動作するAmigaOSです。TRIPOSの移植版であるAmigaOSASSIGNのディスクオペレーティングシステム、AmigaDOSは、DECのオペレーティングシステムといくつかの類似点があります。たとえば、物理デバイス名は、最初のフロッピーディスクの場合はDF0:、3番目のCD-ROMドライブの場合はCDROM2:などのパターンに従います。ただし、システムは接続されている任意のドライブから起動できるため、オペレーティングシステムは、使用するブートデバイスを自動的に参照するためにSYS:割り当てを作成します。LIBS:、PREFS:、C:、S:などの他の割り当ても作成され、それ自体がSYS:から参照されます。もちろん、ユーザーは独自の割り当てを作成および削除することもできます。
レコード管理サービス(RMS)は、VMSオペレーティングシステムの構造化I/Oレイヤーです。RMSは、レコードベースおよびインデックス付きデータベースファイルなどの構造化ファイルを管理するための包括的なプログラムサポートを提供します。VMSファイルシステムは、RMSと連携して、単純なバイトストリームを超えてファイルアクセスを拡張し、さまざまなリッチファイルタイプに対するOSレベルのサポートを可能にします。VMSファイルシステム内の各ファイルは、一連のレコードを含むデータベースと考えることができ、各レコードには1つ以上の個別のフィールドがあります。たとえば、テキストファイルは、改行文字で区切られたレコード(行)のリストです。RMSは、レコード指向ファイルシステムの例です。
RMSによって定義されているレコードフォーマットは4種類あります。
レコードへのアクセス方法、つまりファイルから既存のレコードを取得する方法は4つあります。
ディスクレベルでは、ODSはファイルシステムをブロックの配列として表現します。ブロックは、1つの物理ディスク(ボリューム)上の連続する512バイトです。ディスクブロックはクラスタ単位で割り当てられます(当初は連続する3ブロックでしたが、ディスクサイズが大きくなるにつれてクラスタ数も増加しました)。ディスク上のファイルは理想的には完全に連続している必要があります。つまり、ファイルを含むブロックは連続している必要がありますが、ディスクの断片化によって、ファイルが不連続なクラスタに配置される必要がある場合があり、その場合、断片はエクステントと呼ばれます。ディスクは他のディスクと組み合わせてボリュームセットを形成し、そのディスクセットのどこにでもファイルを保存できますが、ディスクサイズが大きくなるにつれて、単一の物理ディスクの管理の方が簡単になったため、ボリュームセットの使用は減少しています。
Files-11 ディスク (またはボリューム セット) 上のすべてのファイルには、一意のファイル識別子(FID) が付与されています。FID は、ファイル番号(NUM)、ファイル シーケンス番号(SEQ)、および相対ボリューム番号(RVN) の 3 つの番号で構成されます。NUM はINDEXF.SYS、ファイルのメタデータがファイル内のどこにあるかを示します (下記参照)。SEQ は、ファイルが削除され、同じ INDEXF.SYS エントリを再利用して別のファイルが作成されるときにインクリメントされる世代番号です (これにより、古いファイルへの参照が誤って新しいファイルを指すことがなくなります)。RVN は、ボリューム セットを使用している場合にファイルが格納されているボリューム番号を示します。
ODSボリュームの構造的なサポートは、ディレクトリファイルによって提供されます。ディレクトリファイルとは、MVSのVSAMカタログやUnixファイルシステムおよびNTFSのディレクトリと同様に、ファイル名、ファイルバージョン番号、およびそれらに関連付けられたFIDのリストを含む特殊なファイルです。ディレクトリ構造のルートにはマスターファイルディレクトリ(MFD)があり、ボリューム上のすべてのファイルが(直接的または間接的に)含まれています。
この図は、3つのファイルを含むディレクトリの例と、各ファイル名がINDEXF.SYSエントリにどのようにマッピングされるかを示しています(各INDEXFエントリにはより詳細な情報が含まれていますが、ここでは最初の数項目のみを示しています)。
ODS ファイルシステムの最上位レベルには、マスター ファイル ディレクトリ(MFD) があり、これにはすべての最上位ディレクトリ ファイル (MFD 自体を含む) と、ファイルシステム情報を格納するために使用されるいくつかのシステム ファイルが含まれます。ODS-1 ボリュームでは、2 レベルのディレクトリ構造が使用されます。各ユーザー識別コード(UIC)には、 の形式の関連付けられたユーザー ファイル ディレクトリ[GROUP.USER](UFD) があります。ODS-2 以降のボリュームでは、MFD の下のディレクトリのレイアウトは自由形式ですが、ディレクトリのネストに制限があります (ODS-2 では 8 レベル、ODS-5 では無制限)。マルチ ボリューム セットでは、MFD は常に最初のボリュームに格納され、すべてのボリュームのサブ ディレクトリが含まれます。
ODS MFDには、以下のシステムファイルが存在します。
INDEXF.SYS;1—インデックスファイルBITMAP.SYS;1—ストレージビットマップファイルBADBLK.SYS;1—不良ブロックファイル000000.DIR;1— MFDディレクトリファイル自体CORIMG.SYS;1—コアイメージファイルVOLSET.SYS;1—ボリュームセットリストファイル(ODS-2/5のみ)CONTIN.SYS;1—継続ファイル(ODS-2/5のみ)BACKUP.SYS;1—バックアップログファイル(ODS-2/5のみ)BADLOG.SYS;1—保留中の不良ブロック(ODS-2/5のみ)SECURITY.SYS;1—ボリュームセキュリティプロファイル(ODS-2/5のみ)QUOTA.SYS;1—クォータファイル(オプション、ODS-2/5でのみ利用可能)GPT.SYS;1— GUIDパーティショニングテーブル(GPT)(OpenVMS I64 EFIブート構造、OpenVMS Alphaではオプション)ファイルシステムの実装自体は、これらのファイルを名前ではなくファイルIDで参照することに注意してください。ファイルIDの値は常に同じです。したがって、INDEXF.SYSは常に と を持つファイルNUM = 1ですSEQ = 1。
インデックスファイルには、Files-11ボリュームセットに関する最も基本的な情報が含まれています。
INDEXF.SYSには、従来の構成と、GUIDパーティションテーブル(GPT)構造を持つディスクで使用されるGPT.SYSの構成の2種類があります。
従来の構成では、ブロック1はブートブロックであり、VMSオペレーティングシステムをロードするために使用されるプライマリブートストラップイメージの場所が含まれています。これは常にディスク上の論理ブロック0に配置され、ハードウェアファームウェアが読み取れるようになっています。このブロックは、システムボリューム(ブート不可能なボリューム)以外でも常に存在します。
ブートブロックの後にプライマリホームブロックが続きます。ここには、ボリューム名、インデックスファイルの残りの部分を構成するエクステントの場所、ボリューム所有者のUIC、およびボリューム保護情報が含まれます。通常、ボリュームが失われたり破損したりした場合に復旧できるように、セカンダリホームブロックと呼ばれるホームブロックの追加コピーが複数存在します。
GPT.SYS を使用するディスクでは、GPT.SYS にはブートブロック(マスターブートレコード(MBR))に相当するものが含まれており、プライマリホームブロックは存在しません。GPT ベースのディスクに存在するホームブロックはすべて代替ホームブロックです。これらの構造は INDEXF.SYS には含まれておらず、INDEXF.SYS ファイルのブロックは使用されません。
インデックスファイルの残りの部分は、ボリューム上に存在するファイルに割り当てられたエクステントを記述するファイルヘッダーと、所有者UIC、ACL、保護情報などのファイルメタデータで構成されます。各ファイルは1つ以上のファイルヘッダーで記述されます。ファイルのエクステント数が多い場合は、複数のファイルヘッダーが必要になることがあります。ファイルヘッダーは固定長のブロックですが、固定長セクションと可変長セクションの両方を含みます。
可能であれば、ヘッダーのマップセクションとACLセクションはプライマリヘッダー内に完全に格納されます。ただし、ACLが長すぎる場合、またはファイルにエクステントが多すぎる場合は、プライマリヘッダーにそれらを格納するのに十分なスペースがありません。この場合、オーバーフロー情報を格納するために拡張ヘッダーが割り当てられます。
ヘッダーのレイアウトINDEXF.SYS。
ファイルヘッダーは、4つのオフセット(IDOFFSET、MPOFFSET、ACOFFSET、ROFFSET)で始まります。固定長ヘッダーの後の領域のサイズは(マップ領域やACL領域など)可変であるため、これらの追加領域の位置を特定するためにオフセットが必要です。各オフセットは、ファイルヘッダーの先頭からその領域の先頭までの16ビットワード数です。
ファイルに複数のヘッダーが必要な場合、拡張セグメント番号(SEGNUM)には、INDEXF.SYS の最初のエントリの 0 から始まるこのヘッダーのシーケンス番号が含まれます。
STRUCLEVには、ファイルシステムの現在の構造レベル(上位バイト)とバージョン(下位バイト)が格納されています。ODS-2は構造レベル2です。バージョン番号の増加は、古いソフトウェアでは無視できる下位互換性のある変更を示します。構造レベル自体の変更は互換性がありません。
W_FID (ファイル、シーケンス、相対ボリューム番号に対応する3つの値、FID_NUM、FID_SEQ、FID_RVNを含む)には、このファイルのIDが格納されます。EXT_FID(これも3つの値で構成される)には、次の拡張ヘッダーが存在する場合、その位置が格納されます。これらの値の両方において、RVNは「現在の」ボリュームを表すために0に指定されています(0は通常、有効なRVNではありません)。
FILECHARには、ファイルの処理方法や整理方法に影響を与えるいくつかのフラグが含まれています。
ACCMODEは、ファイルにアクセスするためにプロセスが実行されている必要がある特権レベルを表します。VMSでは、ユーザー、スーパーバイザー、実行、カーネルの4つの特権レベルが定義されています。読み取り、書き込み、実行、削除といった各アクセスタイプは、2ビットの整数としてエンコードされます。
FILEPROTには、ファイルに対する任意アクセス制御情報が格納されています。これは、システム、所有者、グループ、ワールドの4つのグループ(それぞれ4ビット)に分かれています。ビット0は読み取りアクセス、1は書き込みアクセス、2は実行アクセス、3は削除アクセスに対応します。ビットを設定すると、特定のグループへのアクセスが拒否され、ビットをクリアするとアクセスが許可されます。
ファイルヘッダーが拡張ヘッダーの場合、BACKLINKにはプライマリヘッダーのファイルIDが含まれます。そうでない場合は、ファイルのプライマリエントリを含むディレクトリファイルのファイルIDが含まれます。
BITMAP.SYSBADBLK.SYSVOLSET.SYSCONTIN.SYSQUOTA.SYSSECURITY.SYSGPT.SYS