何よりもまず、この記事は更新され続けます。私は、Linux_osの最も単純な理解であるZhuYoupeng氏のLinuxマルチプロセスマルチスレッドを学んでいます。
Linuxのファイル読み取りプロセス
ファイルIOの効率と標準IO
LinuxではAPIと呼ばれ、C言語ではライブラリ関数と呼ばれます。
(1)ファイルIOとは、現在話しているオープン、クローズ、書き込み、読み取り、およびその他のAPI関数を指します。
これは、ファイルの読み取りと書き込みのシステムを構成します。このシステムは、ファイルの読み取りと書き込みを非常にうまく完了できますが、効率は最高ではありません。
(2)アプリケーションレイヤーC言語ライブラリ関数は、標準IOと呼ばれるファイルの読み取りと書き込みに使用される関数のリストを提供します。
標準IOは、一連のCライブラリ関数(fopen、fclose、fwrite、fread)で構成されています。
これらの標準IO関数は、実際にはファイルIOによってカプセル化されています
(実際、fopenはopenを呼び出し、fwriteはwriteを使用してファイルの書き込みを完了します)。
標準IOがカプセル化された後、それは主にアプリケーション層にバッファメカニズムバッファを追加することです。
このように、fwriteを介して書き込んだコンテンツは、カーネルのbufに直接入りません。
代わりに、最初にアプリケーション層の標準IOライブラリによって維持されているバッファを入力します。
次に、標準IOライブラリ自体が、オペレーティングシステムの1回の書き込みの最適なカウントに従って適切な時間を選択し、カーネルへのbuf書き込みを完了します。
(カーネル内のbufは、ハードディスクの特性に応じて選択され、最終的にハードディスクに書き込まれます)。
図に示すように、
最初のバッファーはアプリケーションレイヤーにあり、2番目のバッファーはカーネルにあります。
ファイルの読み取りプロセスについて説明した後、ファイルがハードディスクにどのように保存されているかを見てみましょう。
ハードディスク内のファイルストレージ
(1)ファイルは通常、ハードディスクに保存されます。ハードディスクに保存されるファイルは、静的ファイルと呼ばれる固定形式で保存されます。
(2)ハードディスクは2つの主要な領域に分けることができます。
1つはハードディスクコンテンツ管理テーブルのエントリで、もう1つはコンテンツが実際に保存される領域です。
オペレーティングシステムがハードディスクにアクセスすると、最初にハードディスクのコンテンツ管理テーブルが読み取られます。
アクセスしたいファイルのセクターレベルの情報を見つけて、
次に、この情報を使用して、コンテンツが実際に保存されている領域を照会し、最終的に必要なファイルを取得します。
(3)オペレーティングシステムが最初に取得する情報はファイル名であり、最終的な結果はファイルの内容です。
最初のステップは、ハードディスクのコンテンツ管理テーブルを照会することです。この管理テーブルは、各ファイルのさまざまな情報をファイル単位で記録します。
各ファイルには情報リストがあります(これをinode、i-nodeと呼びます。
これは基本的に構造です。この構造には多くの要素があります。各要素には
、ファイル名やハードディスク上のファイルなど、ファイルに関する情報が記録されます。対応するセクター番号、ブロック番号など...)
強調:ハードディスク管理はファイルに基づいており、各ファイルにはinodeがあります。
各inodeには構造に対応するデジタル番号があり、さまざまな情報が構造に記録されます。
メモリ内で開かれたファイルとvnode
(1)プログラムの実行はプロセスであり、プログラムで開くファイルはプロセスに属します。
各プロセスには、このプロセスのすべての情報を記録するために使用されるデータ構造(プロセス情報テーブルと呼ばれる)があります。
テーブル内のポインタは、ファイル管理テーブルを指します。
ファイル管理テーブルには、現在のプロセスで開かれたすべてのファイルとその関連情報が記録されます。
ファイル管理テーブルで開いている各ファイルにインデックスを付けるために使用されるインデックスは、ファイル記述子fdです。
最終的に見つけたのは、開いたファイルの管理構造vnodeです。
(2)vnodeは、開かれたファイルに関するさまざまな情報を記録します。
そして、このファイルのfdを知る必要があるだけです。
このファイルのvnodeを簡単に見つけて、このファイルに対してさまざまな操作を実行できます。
結論
- プロセスを作成し、プロセス情報テーブルを取得します
- ハードディスクに保存されているファイルの場所に応じてファイルのfdを取得します(ファイル記述)
- ファイルが開かれている限り、開かれたファイルのさまざまな情報を記録するファイル管理テーブルvnodeが作成されます。
- 上記の3つの情報を使用して、ファイルの読み取りと書き込みを行うことができます。
- ハードウェアへの複数のアクセスを回避するために、キャッシングメカニズムが確立されます。各キャッシュは2Mであり、変更する場所はlseek関数を介して特定されます。
- 2つのプロセスが同じファイルの実現を共有します:o_append属性。
データ回復の原則
通常の方法に連絡してください。ハードディスク(Uディスク)をフォーマットすると、クイックフォーマットと低レベルフォーマットがあります。
クイックフォーマットは非常に高速です。32GBのUディスクをフォーマットするのに1秒しかかかりません。通常のフォーマットは遅いです。
これら2つの違いは?実際、クイックフォーマットはUディスクのハードディスクコンテンツ管理テーブル(inode)のみを削除します。
実際に保存されているコンテンツは変更されていません。このフォーマットされたコンテンツは取得できます。
最下位のフォーマットは取得が難しく、フラッシュメモリを介して取得する必要がありますが、これは非常に高価です。
批判して訂正してください
以上