この記事では主に仮想ファイル システムについて説明します。 Linux ファイル システムのアーキテクチャには、特定のファイル システム (Ext2、Ext3、XFS など) とアプリケーション間の抽象化レイヤー、つまり仮想ファイル システム (VFS) が含まれています。 VFS を使用すると、アプリケーションは、基礎となるファイル システムの詳細を知らなくても、さまざまな種類のファイル システムと通信できます。 VFS を使用すると、ファイル システムの実装をアプリケーションから分離して切り離すことができるため、システムの柔軟性と保守性が向上します。また、VFS を使用すると、Linux カーネルが複数のファイル システム タイプをサポートできるようになり、アプリケーションがファイル システムにアクセスするための統一インターフェイスが提供されます。 VFS のフレームワークでは、標準のファイル システム操作インターフェイスを実装することで、さまざまなファイル システムがカーネルと通信できます。
上の図は、このアーキテクチャの中心が仮想ファイル システム VFS であることを示しています。 VFS はファイル システム フレームワークを提供し、ローカル ファイル システムは VFS に基づいて実装できます。主に次のタスクを実行します:
1) VFS は抽象化層として、アプリケーション層に統合インターフェイス (読み取り、書き込み、chmod など) を提供します。
2) i ノード キャッシュやページ キャッシュなど、いくつかの一般的な機能が VFS に実装されています。
3) 特定のファイル システムが実装する必要があるインターフェイスを標準化します。
上記の設定に基づいて、他の特定のファイル システムは、VFS の規則に従い、対応するインターフェイスと内部ロジックを実装し、システムに登録するだけで済みます。ユーザーはファイル システムをフォーマットしてマウントした後、ハードディスク リソースを使用してファイル システムに基づいた操作を実行できます。
Linux オペレーティング システムでは、ディスクをフォーマットした後、mount コマンドを使用して、システム ディレクトリ ツリー内のディレクトリにディスクをマウントする必要があります。このディレクトリはマウント ポイントと呼ばれます。マウントが完了すると、このファイル システムに基づいてフォーマットされたハードディスク領域を使用できるようになります。 Linux オペレーティング システムでは、マウント ポイントはほぼ任意のディレクトリにすることができますが、標準化のため、通常、マウント ポイントは mnt ディレクトリの下のサブディレクトリになります。
次に、比較的複雑なディレクトリ構造を示します。このディレクトリ構造では、ルート ディレクトリはハード ディスク sda 上にあり、mnt ディレクトリの下には ext4、xfs、nfs という 3 つのサブディレクトリがあり、それぞれ Ext4 ファイル システム (sdb ハード ディスク上に構築) とXFS ファイル システム (sdc ハード ドライブ上に構築) および NFS ファイル システム (ネットワーク経由でマウント)。
###写真###ディレクトリ ツリー内の複数のファイル システム間の関係は、カーネル内のいくつかのデータ構造によって表されます。ファイルシステムをマウントすると、ファイルシステム間の関係が確立され、特定のファイルシステムの API が登録されます。ユーザー モードが API を呼び出してファイルを開くと、対応するファイル システム API が検索され、それがファイル関連の構造 (ファイルや i ノードなど) に関連付けられます。
上記の説明は比較的概略的なものですが、それでも少し混乱するかもしれません。ただし、心配しないでください。次に、コードに基づいて VFS と複数のファイル システムをサポートする方法について詳しく説明します。
1. ファイル システム API から VFS、そして特定のファイル システムへ
カーネル関数 |
イラスト |
###開ける### |
| ファイルを開く
|
###近い###
| ksys_close
ファイルを閉じる |
###読む### |
ksys_read/vfs_read |
|
###書く###
| ksys_write/vfs_write
###データ入力### |
###マウント###
| do_mount
| ファイルシステムのマウント
|
以上がLinux ファイル システム (ファイル システム) アーキテクチャの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。