私の質問は、Linuxソースコードとファイルシステムをデフォルトでインストール、解析、使用するために必要なコードが実際に含まれているのか、それともソースコードに追加されているのかということです。
Linuxソースコードにファイルシステムを介してファイルを解析してアクセス/構成するコードが含まれている場合、ファイルシステムはLinuxでコード化されたデバイスドライバによって制御されるか、またはこのプロセスがディストリビューション、リリースなどによって異なると言うのが安全です。 。
Linuxが他のストレージデバイスのファイルシステムを使用してファイルにアクセスする方法、つまりユーザースペースプログラムがproc、ext3、ext4などにアクセスする方法、およびext3、ext4はハードウェアと直接動作するため、「デバイスドライバ」と見なされます。間違って?
答え1
カーネルには次のコンポーネントがあります。仮想ファイルシステム、縮小VFS)は、すべてのファイルシステムに共通のインターフェイスを提供します。これは、ファイルの種類(通常のファイル、ディレクトリ、シンボリックリンクなど)、メタデータ(時間、権限など)、ファイルの内容などを理解します。
各Linuxプロセスは、ファイルシステムのマウント場所を指定する名前空間にあります。通常、すべてのプロセスは同じ名前空間にあります。名前空間は主に仮想化をサポートするために存在します。名前空間は、デフォルトでは、それぞれ内部ファイルシステム参照を持つパスの集まりです。マウントとマウント解除には、この名前空間の変更が含まれます。
プロセスがファイルにアクセスすると、VFSコンポーネントはプロセスの名前空間と現在のディレクトリに基づいてパスを確認し、ファイルが存在するマウントポイントを決定します。その後、VFS は、マウントポイントに関連する内部ファイルシステム参照に基づいて、適切なファイルシステムドライバにファイル関連コマンドを渡します。
ファイルシステムドライバの使命は、コマンドをデータの保存または検索に変換することです。すべてのファイルシステムタイプ。ほとんどのファイルシステムドライバはハードウェアと直接対話せず、他のドライバだけと対話します。ディスク対応ファイルシステム(ext4、btrfs、vfatなど)用のドライバは、コマンドをブロックストレージ操作(パーティションまたは他のブロックデバイスからのセクタの読み書き)に変換します。ネットワークベースのファイルシステム(nfs、cifsなど)用のドライバは、コマンドをネットワークチャネルを介した通信に変換します。内部カーネルファイルシステム(proc、sysfs ...)用のドライバは独立して動作できます。これヒューズファイルシステムドライバはコマンドをユーザ空間プロセスに渡します。
答え2
各ファイルシステムには、Linux APIを使用して作成されたドライバがあります。仮想FSこのタイプのファイルシステムに格納されているオブジェクトが見つかったときに呼び出すことができます。これにより、ディレクトリ階層全体がLinux上のファイルおよびファイルシステム指向のシステムコールに透過的になります(たとえば、VFATに対する権限がないためchown(2)
失敗する可能性があります)。
答え3
各タイプのファイルシステムはカーネルのドライバです。ファイルシステムドライバはディスクドライバを呼び出してブロックデバイスにアクセスする。