Linux のファイルシステムが単一のディレクトリツリーとして設計されているのはなぜですか?

Linux のファイルシステムが単一のディレクトリツリーとして設計されているのはなぜですか?

Linux が単一のディレクトリ ツリーとして設計されている理由を説明できる人はいますか?

Windows では、、、などの複数のドライブを使用できますC:\D:\、Unix ではルートは 1 つだけです。何か特別な理由があるのでしょうか?

答え1

Unix ファイル システムは Windows より何年も前から存在しているため、この質問は「なぜ Windows はデバイスごとに別々の指定子を使用するのか」と言い換えられるかもしれません。

階層型ファイルシステムの利点は、任意のファイルまたはディレクトリをルート ディレクトリの子として見つけることができることです。データを新しいデバイスまたはネットワーク デバイスに移動する必要がある場合、ファイルシステム内の場所はそのままにしておくことができ、アプリケーションは違いを認識しません。

OS が静的で、I/O 要件が高いアプリケーションがあるシステムがあるとします。/usr を読み取り専用でマウントし、/opt (アプリケーションがそこに存在する場合) を SSD ドライブに配置できます。ファイルシステムの階層は変更されません。Windows では、特に C:\Program Files\ の下に常駐するアプリケーションの場合、これははるかに困難です。

答え2

これは部分的には歴史的な理由によるものであり、部分的にはこの方法の方が理にかなっているためです。

マルチクス

マルチクスを導入した最初のオペレーティングシステムでした階層型ファイルシステム今日知られているように、ディレクトリを格納できるディレクトリがあります。「二次ストレージ用の汎用ファイルシステム」RC Daley と PG Neumann 著:

論文の第 2 章では、システムの柔軟な使用を可能にするファイルの階層構造について説明します。この構造には、汎用性を保証するのに十分な機能が含まれています。(…)

理解しやすいように、ファイル構造は、一部のファイルがディレクトリであるファイルのツリーとして考えることができます。つまり、1 つの例外を除いて、各ファイル (たとえば、各ディレクトリ) は、1 つのディレクトリ内の 1 つのブランチによって直接参照されます。例外は、ツリーのルートにあるルート ディレクトリ、つまりルートです。ルートは、どのディレクトリからも明示的に参照されませんが、ファイル システムに認識されている架空のブランチによって暗黙的に参照されます。(…)

ユーザーは、いつでも、作業ディレクトリと呼ばれる 1 つのディレクトリで操作していると見なされます。ユーザーは、エントリ名を指定するだけで、作業ディレクトリ内のエントリによって実際にポイントされるファイルにアクセスできます。複数のユーザーが同時に同じ作業ディレクトリを持つことができます。

他の多くの側面と同様に、Multics は柔軟性を追求しました。ユーザーはファイルシステムのサブツリー内で作業し、残りを無視しても、ディレクトリを利用してファイルを整理することができます。ディレクトリはアクセス制御にも使用されました。READ 属性により、ユーザーはディレクトリ内のファイルを一覧表示でき、EXECUTE 属性により、ユーザーはそのディレクトリ内のファイルにアクセスできました (これは、他の多くの機能と同様に、UNIX にも引き継がれました)。

Multics は、単一のストレージ プールを持つという原則にも従いました。この論文では、この点については詳しく説明されていません。単一のストレージ プールは、当時のハードウェアによく合っていました。取り外し可能なストレージ デバイスはなく、少なくともユーザーが気にするようなものはありませんでした。Multics には別のバックアップ ストレージ プールがありましたが、これはユーザーには見えませんでした。

ユニックス

Unix は Multics から多くのインスピレーションを得ましたが、Multics が柔軟性を重視していたのに対し、Unix はシンプルさを重視していました。

単一の階層型ファイルシステムはUnixによく適していました。Multicsと同様に、ストレージプールは通常ユーザーにとって重要ではありませんでした。しかし、取り外し可能なデバイスがあり、Unixはそれらをユーザーに公開しました。mountそしてumountコマンド(「スーパーユーザー」、つまり管理者専用)「UNIX タイムシェアリング システム」デニス・リッチーとケン・トンプソンは次のように説明しています。

ファイルシステムのルートは常に同じデバイスに保存されますが、ファイルシステム階層全体がこのデバイスに存在する必要はありません。マウント システム要求には、既存の通常ファイルの名前と、関連するストレージ ボリューム (ディスク パックなど) が独自のディレクトリ階層を含む独立したファイルシステムの構造を持つ必要がある特殊ファイルの名前という 2 つの引数があります。マウントの効果は、これまで通常ファイルだった参照が、リムーバブル ボリューム上のファイルシステムのルート ディレクトリを参照するようにすることです。実際、マウントは階層ツリーのリーフ (通常ファイル) をまったく新しいサブツリー (リムーバブル ボリュームに保存されている階層) に置き換えます。マウント後は、リムーバブル ボリューム上のファイルと永続的なファイルシステム内のファイルの間には、事実上区別がなくなります。たとえば、当社のインストールでは、ルート ディレクトリはディスク ドライブの 1 つの小さなパーティション上に存在し、ユーザーのファイルを含むもう 1 つのドライブは、システム初期化シーケンスによってマウントされます。マウント可能なファイルシステムは、対応する特殊ファイルに書き込むことによって生成されます。空のファイル システムを作成するためのユーティリティ プログラムが用意されており、既存のファイル システムをコピーすることもできます。

階層型ファイルシステムには、複数のストレージ デバイスを管理する複雑さをカーネルに集中させるという利点もあります。つまり、カーネルはより複雑になりますが、結果としてすべてのアプリケーションはよりシンプルになります。カーネルはハードウェア デバイスを考慮する必要がありますが、ほとんどのアプリケーションは考慮しないため、これはより自然な設計です。

ウィンドウズ

Windows の起源は 2 つの系統に遡ります。仮想マシン、もともとはヴァックスミニコンピュータ、そしてCP/M初期の Intel マイクロコンピュータ向けに設計されたオペレーティング システム。

VMSには分散階層型ファイルシステムがあり、ファイル-11ファイル11では、ファイルへのフルパスノード名、そのノードのアカウント指定、デバイス名、ディレクトリツリーパス、ファイル名、ファイルタイプ、バージョン番号が含まれています。VMSには強力な論理名特定のディレクトリへのショートカットを定義できる機能により、ユーザーはディレクトリの「実際の」場所を気にする必要がほとんどなくなります。

CP/M は、64kB の RAM とフロッピー ドライブを搭載したコンピュータ用に設計されたため、シンプルさが重視されました。ディレクトリはありませんでしたが、ファイル参照にはドライブ表示 (A:またはB:) を含めることができます。

いつMS-DOS2.0 ではディレクトリが導入されましたが、CP/M に準拠した MS-DOS 1 と互換性のある構文で導入されました。そのため、パスは 1 文字の名前を持つドライブをルートとしていました。(また、/VMS および CP/M ではコマンド ライン オプションを開始するためにスラッシュ文字が使用されていたため、ディレクトリの区切り文字として別​​の文字を使用する必要がありました。このため、DOS およびそれ以降の Windows ではバックスラッシュが使用されていますが、一部の内部コンポーネントではスラッシュもサポートされています)。

WindowsはDOSやVMSとの互換性を維持していたため、重要性が薄れてもドライブ文字の概念は維持されていました。今日、Windowsは内部的にノースカロライナ大学パス(もともと開発されたマイクロソフトとIBMによるOS/2、関連する祖先)。これはパワーユーザー向けですが(おそらく歴史の重みのため)、Windowsではマウントが可能です。再解析ポイント

答え3

単一のディレクトリ ツリーを持つことによるセキュリティ上の懸念はありません。

Unix を設計した人たちは、特定のリソースがどの物理デバイスに含まれているかをユーザーが知る必要のあるオペレーティング システムの経験が豊富でした。オペレーティング システムの目的の 1 つは、実際のハードウェア上に抽象マシンを作成することであるため、リソースを物理的な位置でアドレス指定するのを省く方がはるかに簡単だと考え、すべてを単一の名前ツリーにまとめることにしました。

これは、Unixの設計

答え4

*nix と Windows はどちらもドライブをマウントします。Windows では、これらはマウント ポイントに自動的にマウントされ、デフォルトではアルファベットの昇順になります。これらのデフォルトは次のとおりです。

  • A:およびB:=> フロッピー
  • C:=> 最初のハードドライブの最初のパーティション
  • D:=> 他のパーティションが存在しない場合は、次のパーティション、または次のハード ドライブまたは CD/DVD ドライブ。

これらのマウント ポイントはそれぞれディレクトリです。

*nix では、マウント ポイントはユーザーが決定します。たとえば、1 つのパーティションを としてマウントし/、別のパーティションを としてマウントします/home。つまり、は別のドライブであり、 Windows の と/home同等になります。E:

Windows と *nix のどちらの場合も、マウント ポイントは別々のディレクトリです。唯一の違いは、*nix ではこれらの別々のディレクトリが のサブディレクトリであるの/に対し、C:Windows ではすべてのマウント ポイントが の直下にマウントされる/ことMy Computerです。

ユーザーの観点から見ると、主な利点はマウントが完全に透過的であることです。ディレクトリが/home実際に別のパーティションにあることを知る必要はありません。通常のディレクトリとして使用できます。代わりに、DOSでは、マウントポイントの名前で明示的に呼び出す必要があります。E:\home

外付けドライブは、両方のシステムでほぼ同じ方法でマウントされます。たとえば、D:Windows 用と/mnt/cdromLinux 用です。これらはそれぞれディレクトリであり、違いはよくわかりません。Windows で CDROM をドライブに挿入すると、ディスクはD:Linux と同じようにマウントされます。

関連情報