皆さんこんにちは。今日は Linux の仮想ファイルシステムについて説明します。仮想ファイルシステムは、私がずっと話したいと思っていた知識ポイントです。 Linux 開発に関連する作業に従事したい場合は、仮想ファイルシステムを理解する必要があります。 1. 仮想ファイルシステムとは何ですか?Linux 仮想ファイルシステム (VFS) は、Linux オペレーティング システムの重要なコンポーネントです。ユーザーとアプリケーションがさまざまな種類のファイル システムに同じ方法でアクセスできるようにする統合インターフェイスを提供します。 写真 VFS の設計目標は、さまざまな種類のファイル システムを統一されたインターフェイスに抽象化して、ユーザーとアプリケーションが基盤となるファイル システムの特定の実装の詳細を気にする必要がないようにすることです。 VFS を使用すると、ユーザーは同じシステム コール (open、read、write など) を使用して、ローカル ファイル システム (ext4、XFS など)、ネットワーク ファイル システム (NFS、CIFS など)、仮想ファイル システム (procfs、sysfs など) を含むさまざまな種類のファイル システムにアクセスできます。 VFS は次の主要コンポーネントで構成されています。
2. Linuxシステムファイルツリー一般的な Linux ユーザーや運用保守担当者にとって、Linux システムのファイル ツリーは通常、ルート ファイル システムのルート ディレクトリから始まり、ルート ディレクトリを介してファイル ツリー全体をトラバースすると、次の図のようになります。 写真 システム開発者の視点から見ると、Linux システムのファイル ツリーは、各ファイルとディレクトリが dentry 構造に対応する構造になります。 写真 デントリーとはいったい何でしょうか?dentry 構造の主な機能は、ファイル システム階層の表現を提供することです。ツリー構造を形成することでディレクトリとファイルを整理します。各 dentry には一意のパス名があり、dentry ツリーをトラバースすることで特定のファイルまたはディレクトリを見つけることができます。 構造体dentry構造の定義: struct dentry 構造は、d_parent、d_child、d_subdirs などのメンバーを通じてファイル システムをファイル ツリーに編成します。 Linux ファイルシステムを理解するには、dentry の使い方を学ぶ必要があります。 セクション: Dentry は VFS の重要な部分です。 VFS を理解するには、まず dentry から始めます。 3. ファイルシステムの登録これまでの研究を通じて、歯槽骨構造の重要性がわかってきました。次に、dentry 構造を中心としたファイル VFS のさまざまなコンポーネント間の関係を分析します。まず全体的なアーキテクチャ図を見てみましょう。 写真 Linux ファイル システムは、file_system_type 構造オブジェクトに対応します。 file_system_type 構造体は次のように定義されます。 ramfs ファイル システムは次のように定義されます。名前はファイルシステムの種類を示します。 ramfs ファイル システムをインスタンス化する必要がある場合は、グローバル ファイル システム リスト ヘッダーから名前で対応する登録済みファイル システムを見つけ、登録済みファイル システムからスーパー ブロックを作成する必要があります。 ファイルシステムを定義した後、register_filesystem 関数を使用してファイルシステムを Linux システムに登録します。正常に登録されたファイル システムは、グローバル ファイル システム リストに挿入されます。登録されたファイル システムを使用してスーパー ブロックを作成できます。 cat /proc/filesystems でシステムに登録されているすべてのファイルシステムを表示します。 写真 4. ファイルシステムのマウントファイル システムのマウントとは、新しいファイル システムがマウント インスタンス (struct mount) を生成し、新しいマウント インスタンスと親ファイル システムのマウント インスタンスの間に親子関係を確立することを意味します。 新しいマウント インスタンスは、いくつかの重要な部分で構成されます。
スーパー ブロックは、新しいファイル システムに対応するデバイスを示すために使用されます。
親マウント インスタンスは、マウント ポイントが配置されているファイル システム マウント インスタンスを示します。
マウント ポイントは、新しいファイル システムと親ファイル システム間のリンクです。
各ファイル システムにはルート ディレクトリがあります。ファイル パスを新しいファイル システムにインデックスする場合、インデックス作成は新しいファイル システムのルート ディレクトリから開始されます。 4.1 インデックスマウントポイントマウント ポイントをインデックスする目的は、マウント ポイントの構造体パス レコード情報を取得することです。マウント ポイントのインデックス作成プロセスは、構造体パス レコード情報を継続的に置き換えるプロセスです。 写真 マウントポイント /mnt/test/dir を例に挙げます。
struct パス構造は次のように定義されます。 mnt: マウント ポイントが配置されているファイル システムのマウント インスタンスを記録します。 dentry: マウントポイントディレクトリ dentry。 4.2 新しいファイルシステムマウントインスタンスを作成する
スーパーブロックを作成するには、まずファイル システムの種類を知っておく必要があります。 mount コマンドは、-t パラメータを使用してファイル システムの種類を指定します。 mount コマンドによって渡されたファイル システム タイプを使用して、グローバル ファイル システム リストを走査し、登録されているファイル システムを見つけ、登録されているファイル システムを通じてスーパー ブロックを作成できます。
スーパーブロックが作成されると、スーパーブロック情報を使用して新しいファイルシステムマウントインスタンスが作成されます。
マウント ポイント dentry を使用してマウント ポイントを作成します。 4.3 古いインスタンスと新しいインスタンスを接続する前のプロセスを通じて、ファイル システムのマウントの 3 つの要素がすでに用意されています。
マウントの 3 つの要素を通じて、新しいマウント インスタンスと古いマウント インスタンスのドッキングを完了できます。ドッキングが完了すると、新しいファイル システム マウント インスタンスの mnt_parent が親マウント インスタンスを指し、マウント プロセス全体が完了します。 新しいファイル システムが正常にマウントされると、次に示すように、Linux システム ファイル ツリーに新しいファイル システムが移植されます。 写真 この時点で、新しいファイルシステム内のファイルを操作したい場合は、パス名レイヤーごとにレイヤーインデックスに従ってファイルパス情報を取得するだけで済みます。パス情報には dentry 情報が記録され、dentry は inode オブジェクトにバインドされます。 最後に、inode ファイル ノードを取得してファイルを操作できます。 |
<<: 2024 年に無視できない 6 つのクラウド セキュリティの脅威
cloudcone は、毎年恒例の Double 12 セール向けにプロモーション VPS をリリー...
[編集者注] 2013 年以降、電子商取引の状況は目まぐるしいほど変化しました。変化のスピードが速す...
Hivelocity は、2002 年に設立された米国の旧式データセンターで、独立系サーバーレンタル...
クラウドに適用された場合、オープンとは実際には何を意味するのでしょうか?現代のソフトウェア エンジニ...
Chicagogovps の格安サーバーは長い間在庫がありませんでした。今回、Chicagogovp...
ユーザー エクスペリエンスの最適化 (UEO) は頭痛の種です。Web サイトが魅力的でなければ、存...
ブログは、ウェブログ、ブログ、またはブログとも翻訳され、通常は個人によって管理され、定期的に新しい記...
-(-) 香港のコンピュータ ルームの KVM 仮想 VPS がプロモーション中です。まあ、主に -...
KOC という用語は、最近非常に人気が高まり、私のマーケティング業界のグループや友人の輪のいたるとこ...
現在、Maxthon Host(Maxthon Cloud、Aoyoyun)のKVMシリーズVPSに...
VPS を使用する顧客はレベルが異なり、目的も多様であるため、一部の友人は VPS に対して特に高い...
Sina Cloudでは、友達を招待して無料のクラウドビーンをもらえるキャンペーンを実施しています。...
[51CTO.com からのオリジナル記事] 今日、クラウド コンピューティングは IT 業界全体の...
記事のタイトルは、私が百度知道で見た質問です。質問したネットユーザーは非常に困惑しており、回答を求め...
サイト上のページが存在しない場合は、関連情報をユーザーに提示するために 404 エラー ページを表示...