/******************** * 仮想ファイルシステム VFS ********************/ (1)VFSの紹介 カーネルのサブシステムとして、仮想ファイルシステム VFS は、ユーザー空間プログラムにファイルシステム関連のインターフェースを提供します。 VFS を使用すると、ユーザーは特定のファイル システムや実際の物理メディアを考慮することなく、open() などのシステム コールを直接使用できます。 VFS は、考えられるファイル システムの一般的な機能と動作を網羅した共通ファイル システム モデルを提供します。この抽象化レイヤーを通じて、共通のインターフェースを使用してあらゆる種類の新しいファイルシステムを操作することが可能になります。 a. 呼び出しモデル write(): ユーザー空間 --> sys_write(): VFS --> ファイルシステムへの書き込み方法: ファイルシステム --> 物理メディア (2)VFSが採択した主な目的 VFS はオブジェクト指向のアプローチを採用し、一連のデータ構造を使用して共通のファイル オブジェクトを表します。 これらの構造体には、データだけでなく、そのデータを操作するためのポインターも含まれています。 VFS には 4 つの主要なオブジェクト タイプが含まれています。 a.スーパーブロックオブジェクト super_block すべてのファイル システムは、特定のファイル システムに関する情報を格納するために使用されるオブジェクトであるスーパーブロックを実装する必要があります。これは通常、ディスクの特定のセクターに格納されます。ファイル システムごとにスーパーブロックは 1 つだけです。 メモリベースのファイルシステム sysfs などのディスクベースではないファイルシステムの場合、Linux はオンサイトでスーパーブロックを作成し、それをメモリに保存します。 スーパーブロックの構造は super_block であり、<linux/fs.h> で定義されています。 スーパーブロック操作メソッド構造体は super_operations であり、これも fs.h で定義されています。 スーパーブロック オブジェクトを作成、管理、破棄するためのコードは、/fs/super.c にあります。 ファイルシステムがインストールされると、カーネルは alloc_super() 関数を呼び出して、ディスクからファイルシステムのスーパーブロックを読み取り、その情報をメモリ内のスーパーブロック オブジェクトに書き込みます。 b. インデックスノードオブジェクトinode インデックス ノード オブジェクトには、ファイルのアクセス制御権限、サイズ、所有者、作成時間など、カーネルがファイルまたはディレクトリを操作するために必要なすべての情報が含まれています。 システムはこの情報を、inode と呼ばれる別のデータ構造に保存します。 ファイルにはメモリ内に 1 つのインデックス ノード オブジェクトのみがあり、特殊ファイル (パイプやデバイス ファイルなど) にも対応するインデックス ノードがあります。 inode構造体は<linux/fs.h>で定義されており、対応する操作関数構造体はinode_operationsである。 c. ディレクトリエントリオブジェクト dentry 各ディレクトリ エントリ オブジェクトは、パス /bin/vi などのパスの特定の部分を表します。ここで、/、bin、および vi はすべてディレクトリ エントリ オブジェクトに属します。 ディレクトリ エントリ オブジェクトには対応するディスク構造がないため、VFS は文字列形式のパス名に基づいてオンサイトでそれらを作成します。各ファイルは 1 つの dentry オブジェクトにのみ対応します。 dentry 構造体は <linux/dcache.h> で定義されており、対応するディレクトリ エントリ操作関数構造体 dentry_operations も <linux/dcache.h> で定義されています。 d. ファイルオブジェクトファイル ファイル オブジェクトは、プロセスが開いたファイルを表します。このオブジェクトは開かれたときに作成され、閉じられたときに破棄されます。 複数のプロセスが同時にファイルを開いて操作できるため、ファイルにはメモリ内に複数のファイル オブジェクトが存在する場合があります。 ファイル オブジェクトは、<linux/fs.h> で定義されているファイル構造によって表されます。ファイル オブジェクトの操作関数構造体は file_operations であり、<linux/fs.h> で定義されています。 この関数セットは非常に重要で、ファイルの実際の操作関数が含まれています。ユーザー空間は write を呼び出し、最終的には file_operations で write を呼び出します。 char 型の文字デバイスを実装する必要があります。つまり、file_operations でサポートされている関数を実装する必要があります。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: 反応ルーティングでパラメータを渡すいくつかの方法についての簡単な説明
>>: Centos7.3 に mysql5.7.18 をインストールするための詳細なチュートリアル
目次序文ディープページングを制限すると遅くなるのはなぜですか?サブクエリによる最適化B+ツリー構造の...
MySQLに何がインストールされているか確認する rpm -qa | grep -i mysql n...
/etc/my.confファイルで、[mysqld]の下に次の行を追加します: skip-grant...
mysql を構成するときに、構成ファイル内のデフォルトのストレージ エンジンを InnoDB に設...
数学、物理学、および一部の科学技術分野で使用される特殊記号は多数あります。Unicode コードには...
この記事では、LinuxでMySQL 8.0をインストールする方法を紹介します。具体的な内容は次のと...
Linux viコマンドの詳しい説明vi エディタは、すべての Unix および Linux システ...
MySQL 5.7 より前のバージョンのパスワードを変更する方法:方法1: SET PASSWORD...
毎日のjQueryプラグイン - ステップ進捗軸 ステップ進捗軸ツール系のサイトでは入門チュートリア...
この記事では、例を使用して、MySQL のさまざまな一般的な結合テーブルクエリについて説明します。ご...
最近、会社のサーバーの時間が不正確で、外部の時間ソースと同期できないことがわかりました。会社はドメイ...
この記事では、参考までに、Vuex の具体的なコードを共有して、簡単なショッピングカートを実装します...
1. はじめに行ロックとテーブルロックの違いは面接で頻繁に出てくるはずです。MySQL のロックにつ...
質問:よく使用されるコマンド「ll」が無効であるか、コマンドが見つかりません理由: 「ll」コマンド...
MySQL データ型における DECIMAL の使用法の詳細な説明MySQL のデータ型には、INT...