Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxファイル共有 - プロセスとオープンファイル

Linuxファイル共有 - プロセスとオープンファイル

  

Linuxは異なるプロセス間でのオープンファイルの共有をサポートしています。ファイル共有を説明するために、まずカーネルがすべてのI /Oに使用するデータ構造について説明しましょう。それらの間の関係は、ファイル共有の観点から、あるプロセスが別のプロセスに与える可能性のある影響を決定します。

0.1とファイル関連オブジェクト
(1)iノード(iノード):ファイルの一般情報を保存します。各iノードにはiノード番号があり、ファイルシステムではiノード番号は一意になります。ファイルを識別する
(2)dentry(ディレクトリアイテムオブジェクト):各dentryはパスの特定の部分を表します。ディレクトリのリンク情報を保存します。個人的な理解:ファイルと名前の対応関係を説明してください。
(3)file:開かれているファイルとプロセスとの関係fileオブジェクトは、プロセスによって開かれているファイルを表しますメモリ内では、オブジェクトは物理ファイルではありません。対応するopen()システムコールによって作成され、close()システムコールによって破棄されます(参照カウントが0の場合のみ)。複数のプロセスが同じファイルを開いて操作することがあるため、同じファイル内に複数の対応するファイルオブジェクトが存在する可能性があります。それは、真の「ディレクトリテーブルエントリ」、含意ファイルオフセットなどの中の情報です。

0.2およびプロセス関連オブジェクト
(1)files_struct:各プロセスはfiles_struct構造体を使用してファイル記述子の使用を記録します。この構造体をユーザーオープンファイルテーブル(記述子テーブル付き)と呼びます。 。プロセスの個人データです。それは、「オープンファイルディスクリプタテーブル」です。
(2)fs_struct:fs_struct構造体は、プロセスとファイルシステムの関係を記述します。
これらのオブジェクトの関係は以下のとおりです。


0.3 apueファイルオブジェクトの解釈
apueで説明されているファイルとプロセスの関係を見てみましょう次の図(図3-1)は、プロセスの3つのテーブルを示しています。との関係。プロセスには2つの異なるオープンファイルがあります。1つは標準入力(ファイル記述子0)として開き、もう1つは標準出力(ファイル記述子1)として開きます。


(1)各プロセスは、プロセステーブル(オープンファイル記述子テーブル)にレコード項目を持ちます。レコード項目は、オープンファイルの記述子テーブルを含みます。これはベクトルとして扱われ、各記述子は1つを占めます。

各ファイルディスクリプタは、ファイルディスクリプタフラグ(close_on_exec)に関連付けられています。
·ファイルテーブルエントリへのポインタ。

注:Linuxプロセス記述子(tast_struct)内のファイル(files_structタイプ)は、ここで説明されています。

(2)カーネルは開いているすべてのファイルのファイルテーブルを管理します。各ファイルエントリには、次のものが含まれます。
ファイルステータスフラグ(読み取り/書き込み、塗りつぶし、同期、ブロックしないなど)
·現在のファイルオフセット
·は、ファイルvノードエントリを指します。ポインター

注意:ここで説明している "ファイルエントリ"は、Linuxシステムのファイルオブジェクトです。

(3)開いている各ファイルはvノード構造を持ちます。 vノードには、このファイルに対してさまざまな操作を実行するファイルタイプと関数へのポインタが含まれています。ほとんどのファイルでは、vノードにはファイルのiノードも含まれています。この情報は、ファイルが再び開かれたときにディスクからディスクに読み込まれます。これらのファイルはディスクからメモリに読み込まれるため、これらのパラメータはすぐに使用できます。

注意:ここで説明されているvノードは、inodeオブジェクトに対応する、Linuxのiノードです。

私たちの議論の後、私たちは主にこれら3つの目的に焦点を合わせました。

0.4参照カウント
説明するいくつかのファイル関連オブジェクトには参照カウントがあり、それらの意味は異なりますこれらの参照カウントを理解することは、以下の説明で重要です。
(1)file_struct参照カウント:この構造体を共有するプロセス(スレッド)の数を示します。 (スレッド共有ファイルについて説明します。)
(2)fs_struct参照カウント:この構造を共有しているプロセス(スレッド)の数を示します。 (スレッド共有ファイルについて説明します)
(3)ファイルオブジェクト参照カウント:ファイル参照カウントを開き、ファイルオブジェクト記述子の数を参照してください。 (dupとforkはこのカウントを増加させ、最初のオープンはこのカウントを1にし、0はファイルオブジェクトが破壊されるとクローズはこのカウントを減少させる)
(4)dentry参照カウント:各カウントはファイルに対応するオブジェクト
(5)iノード参照カウント:各カウントはdentryに対応します。


(1)close_on_exec flag
図からわかるように、これはプロセスのfiles_structでマークされており、プロセスのすべてのファイル記述子(ファイルハンドル)のビットマップフラグです。各ビットシステムコールexecve()を呼び出すときにクローズする必要があるファイル記述子を決定するために使用されるオープンファイル記述子に対応します。これはfcntlで設定できます。
(2)付録:iノード構造
struct dinode {ushort di_mode; /*ファイルタイプ+ユーザー権限* /short di_nlink; /*ファイルリンク番号* /ushort di_uid; /*所有者ユーザーID * /ushort di_gid; /*はプライマリユーザーグループID * /off_t di_size; /*ファイルサイズ* /char di_addr [40]; /*ファイルデータ領域開始アドレス* /time_t di_atime; /*最終アクセス時刻* /time_t di_mtime; /*最終更新日時* /time_t di_ctime; /*作成日時* /};

Copyright © Windowsの知識 All Rights Reserved