Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項

Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項
/********************
 * 仮想ファイルシステム 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 をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux カーネル デバイス ドライバーのメモリ管理に関する注意事項
  • Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項
  • Linux カーネル デバイス ドライバー キャラクタ デバイス ドライバー ノート
  • Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集
  • Linux カーネル デバイス ドライバー カーネル リンク リストの使用上の注意
  • Linux カーネル デバイス ドライバー proc ファイル システム ノート
  • Linuxカメラドライバの書き方の詳細説明
  • Linux におけるドライバモジュールのパラメータ転送プロセスの分析

<<:  反応ルーティングでパラメータを渡すいくつかの方法についての簡単な説明

>>:  Centos7.3 に mysql5.7.18 をインストールするための詳細なチュートリアル

推薦する

派手なカルーセル効果を実現するJavaScript

この記事では、JavaScriptで派手なカルーセル効果を実装する2つの方法を紹介します。具体的な内...

Web 開発 js 文字列連結プレースホルダーと conlose オブジェクト API の詳細な説明

目次プレースホルダーの置き換えコンソール印刷テーブル()ログ、情報、警告、エラーグループ()、グルー...

Nest.js パラメータ検証とカスタム戻りデータ形式の詳細な説明

0x0 パラメータ検証Nest.jsでは、パラメータ検証業務のほとんどをパイプライン方式で実装してい...

Vueのログインとログアウトの詳細な説明

目次ログインビジネスプロセスログイン機能の実装要約するまず、エフェクトの実装プロセスを見てみましょう...

Linux C++ マルチスレッド同期の非常に詳細な説明

目次1. ミューテックス1. ミューテックスの初期化2. ミューテックスロックの関連特性と分類3. ...

HTMLフォーム入力監視の詳細な理解

今日、入力イベントに関するブログ投稿を見て、気まぐれで関連情報を整理してみました。イベント:関数 c...

JavaScript es6 における var、let、const の違いの詳細な説明

まず、よくある質問は、ECMAScript と JavaScript の関係は何ですか? ECMAS...

Vueドロップダウンメニューのコンポーネント開発の詳細説明

この記事の例では、Vueドロップダウンメニューのコンポーネント開発の具体的なコードを参考までに共有し...

MySQLでSELECT文が実行される仕組み

目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...

CSS スタイルを HTML 外部スタイルシートにインポートする方法

リンクインスタイルとは、すべてのスタイルを 1 つ以上の外部スタイルシート ファイルに配置することで...

ウェブフロントエンドウェブ開発の一般的なプロセスの簡単な紹介

フロントエンド開発を行っている初心者の学生を多く見かけますが、彼らの効率は比較的遅いです。常にコード...

ワンクリックで雨や雪のエフェクトを実現する ThingJS パーティクルエフェクト

目次1. パーティクルエフェクト2. シーンを読み込む3. さまざまな粒子効果の実現エンディング: ...

ページ要素の絶対位置と相対位置に関するある程度の理解

今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...

MySQL パーティション テーブルの基本入門チュートリアル

序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...

上部の固定ナビゲーションバーによって CSS アンカーの配置がブロックされる問題の解決方法

多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...