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

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

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

C:\Windowsでは、、などの複数のドライブを持つことができますが、D:\Unixではルートが1つしかありません。特別な理由がありますか?

答え1

UnixファイルシステムはWindowsよりも数年前にあるため、「Windowsはなぜ各デバイスに別々の指定子を使用するのですか?」という質問を再現できます。

階層ファイルシステムの利点は、すべてのファイルまたはディレクトリをルートディレクトリのサブディレクトリとして見つけることができることです。データを新しいデバイスまたはネットワークデバイスに移動する必要がある場合、ファイルシステムの場所は同じままであり、アプリケーションに違いはありません。

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

答え2

これは、部分的には歴史的な理由によるものであり、部分的にはより合理的だからです。

マルチプレックスシステム

マルチプレックスシステム初めて紹介します階層ファイルシステム今日私たちが知っているように、ディレクトリにはディレクトリを含めることができます。引用する「セカンダリストレージ用の汎用ファイルシステム」著者:RC DaleyとPG Neumann:

この記事の第2部では、システムを柔軟に使用できるファイル階層を紹介します。この構造には、多様性を保証するのに十分な機能が含まれています。 (…)

理解を容易にするために、ファイル構造はファイルツリーと考えることができ、そのいくつかはディレクトリです。つまり、1つの例外を除いて、すべてのファイル(たとえば、すべてのディレクトリ)は、正確に1つのディレクトリにある正確に1つのブランチを直接指す自分を探します。例外は、ツリーの下部にあるルートディレクトリまたはルートです。ディレクトリのルートを明示的に指していませんが、ファイルシステムに知られている仮想分岐は暗黙的にルートを指しています。 (…)

いつでもユーザーはディレクトリ(作業ディレクトリと呼ばれる)で作業していると言われます。彼は単にエントリ名を指定することで、作業ディレクトリ内のエントリが指すファイルに効果的にアクセスできます。複数のユーザーが同時に同じ作業ディレクトリを持つことができます。

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

Multicsはまた、単一のストレージプールの原則に従います。この記事では、この部分について詳しく説明しません。単一のストレージプールは、当時のハードウェアとほぼ一致していました。少なくとも、ユーザーが興味を持っているリムーバブル記憶装置はなかった。 Multicsには別々のバックアップストレージプールがありますが、これはユーザーにとって透過的です。

Unix

Unix は Multics から多くのインスピレーションを得ていますが、Multics の目標はシンプルであるのに対し、Multics の目標は柔軟性です。

単層ファイルシステムはUnixに適しています。 Multicsと同様に、ストレージプールは通常ユーザーに拘束されません。しかし、リムーバブルデバイスが存在し、Unixは通過します。mountそしてumountコマンド(「スーパーユーザー」、つまり管理者用に予約済み)が存在する「UNIX時分割システム」、Dennis RitchieとKen Thompsonは次のように説明しています。

ファイルシステムのルートは常に同じデバイスに保存されますが、ファイルシステム階層全体がそのデバイスにある必要はありません。既存の汎用ファイルの名前と関連するストレージボリューム(ディスクパッケージなど)には、独自のディレクトリ階層を含む別々のファイルシステムを持つ必要がある特殊ファイルの名前という2つのパラメータを持つマウントシステム要求があります。マウントの効果は、古い汎用ファイルへの参照をリムーバブルボリューム上のファイルシステムのルートディレクトリへの参照に変更することです。実際、マウントは階層ツリー(一般ファイル)の葉をまったく新しいサブツリー(リムーバブルボリュームに格納されている階層)に置き換えます。一度マウントすると、リムーバブルボリュームのファイルと永続ファイルシステムのファイルとの間に事実上違いはありません。たとえば、インストールでは、ルートディレクトリはあるディスクドライブの小さなパーティションにあり、ユーザーファイルを含む他のドライブはシステム初期化シーケンスによってマウントされます。マウント可能なファイルシステムは、対応する特殊ファイルを作成することによって作成されます。ユーティリティを使用して空のファイルシステムを作成したり、既存のファイルシステムを単にコピーしたりできます。

階層ファイルシステムは、複数のストレージデバイスを管理する複雑さをカーネルに集中化できるという利点もあります。これはカーネルがより複雑ですが、すべてのアプリケーションがより簡単であることを意味します。カーネルはハードウェアデバイスに興味があるはずですが、ほとんどのアプリケーションはそうではないので、これはより自然なデザインです。

Windows

Windowsの祖先は2つの系譜にさかのぼります。仮想管理システム、元々設計されたオペレーティングシステムVAXミニコンピュータ、そしてCP/M、初期Intelマイクロコンピュータ用に設計されたオペレーティングシステムです。

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

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

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

Windows は DOS や VMS 方式との互換性を維持するため、関連性が低い場合でもドライブ文字の概念を維持します。今日、Windowsでは内部的に以下を使用しています。ノースカロライナ大学道(もともと開発されたMicrosoftとIBMの提供オペレーティングシステム/2、関連先祖を含む)。これは上級ユーザーのために予約されていますが、おそらく履歴の重さのために、Windowsは次のインストールを許可します。再分析ポイント

答え3

単一のディレクトリツリーの使用にはセキュリティ上の問題はありません。

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

それはただその背後に隠れた天才の一部に過ぎません。Unixデザイン

答え4

* nixとWindowsの両方に対応するドライバがインストールされています。 Windowsでは、デフォルトでは、アルファベットの昇順でソートされたマウントポイントに自動的にインストールされます。これらのデフォルト値は次のとおりです。

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

各マウントポイントはディレクトリです。

* nixでは、マウントポイントはユーザーによって決定されます。たとえば、あるパーティションをとしてマウントし、/別のパーティションを/home。したがって、Windows用語/homeと同じ独立したドライブです。E:

Windowsと*nixの両方の場合、マウントポイントは別々のディレクトリです。唯一の違いは *nix ではこれらの個別ディレクトリが のサブディレクトリであるのに対し/C:Windows では各マウントポイント/My Computer

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

外部ドライブは、両方のシステムにほぼ同じ方法で取り付けられます。たとえば、D:Windowsと/mnt/cdromLinuxがあります。これらはすべて同じディレクトリであり、実際に違いを見ることはできません。 WindowsでCDROMをドライブに挿入すると、D:Linuxと同様にディスクがマウントされます。

関連情報