簡単に言えば、物理的なファイルシステムのバッキングがある場合にのみ機能します/dev
(そして、最新のLinuxディストリビューションを使用している場合は、おそらくそうではありません)。
長い答えは次のとおりです。
これはすべて、すべてがファイルであるという元のUNIX哲学に戻っています。この哲学は、UNIXを多用途にした理由の一部です。なぜなら、物理ハードウェアと直接やり取りするためにアプリケーションに特別なコードを持たなくても、ユーザー空間からデバイスと直接やり取りできるからです。
もともとは、/dev
デバイスファイルを置く有名な名前を持つ別のディレクトリでした。UNIXシステムの中にはまだこのアプローチを採用しているものがあり(OpenBSDはまだそうだと思います)、システムが実際に持っていないデバイス用のデバイスファイル(たとえば、すべてのファイル可能なすべてのディスク上の可能なパーティション)。これにより、メモリの容量と起動時の時間が節約されますが、ディスク容量が少し増えますが、初期のシステムは一般にメモリが非常に制約され、高速ではないため、トレードオフになります。これは一般に、「静的」と呼ばれます/dev
。
最新のLinuxシステム(そしてFreeBSDとおそらく最新バージョンのSolarisも信じています)/dev
は、カーネル(またはSystemdを使用している場合はudev、カーネルがほとんど何もしないと信頼していないため)によって設定された一時的なインメモリファイルシステムです。 。これにより、メモリ(通常は数MB未満)と非常に小さい処理オーバーヘッドを犠牲にして、ディスク領域を節約できます。また、他にも多くの利点があり、最大の1つは、ホットプラグされたハードウェアを検出しやすいことです。これは一般に、ダイナミックと呼ばれ/dev
ます。
ただし、どちらの場合でも、デバイスノードは通常のVFSレイヤーを介してアクセスされます。つまり、定義上、iノードが存在する必要があることを意味stat()
します。これは/dev
、iノードをメモリに格納するか、必要に応じて生成するため、動的を使用するシステムに/dev
は影響がありません。また、inodeはディスク上のほぼゼロのスペースを占め、ほとんどのファイルシステムには上限がないため、静的な場合はほぼゼロの影響です。それらまたは誰もが必要とする可能性が高いよりもはるかに多くの方法を提供します。