ファイル システムとソフトおよびハード リンク

1.ファイルシステム

ファイル操作は、プロセスと開かれたファイルとの関係ですが、オペレーティング システムがディスク上のすべてのファイルを同時に開くことは不可能です。開いているファイルは管理する必要があり、開いていないファイルはいつでも読めるように管理する必要があります。

1. ディスクの物理構造を理解する

ここに画像の説明を挿入

ディスクは、コンピュータ内でほぼ唯一の機械的デバイスであり、周辺機器です。速度は遅いですが、安価で、大量のストレージを備えています。依然として、企業が選択するストレージ デバイスです。ディスクについては、次のことを理解しておく必要があります。

1. 磁気ヘッドの充放電によりディスクのN極とS極を入れ替えることでディスクに書き込みます。

2. ディスクは 1 つのディスクではなく、スタックであり、各ディスクには 2 つの面があり、ディスクと同じ数のヘッドがあります。

3. 磁気ヘッドとディスク表面の間には非常に小さな距離があり、それらが直接接触することはありません (磁気ヘッドがディスク表面に接触すると、ディスク表面に傷がつき、データが失われる可能性があります)。

4. すべての磁気ヘッドは互いに接続されており、一緒にしか移動できません (一緒に前進および後退)。つまり、それらは異なるディスク表面の同じ位置を指しています。

2. ディスク格納構造

ここに画像の説明を挿入

ディスク面は複数のトラックで構成されており、トラックは複数のセクタに分割されています。各円盤に同じ半径の円が集まって円柱を形成します。

ディスクのデータを読み込む場合は、セクタ単位で読み込みます。円の中心に近いトラックほど円周は小さくなりますが、同じ量のデータにアクセスします。つまり、各セクターの記憶容量は同じで、512 バイトです。

a. ディスク読み取り

ディスク書き込みデータは磁気ヘッドに依存し、読み取りデータは依然として磁気ヘッドに依存しています。ディスクが動き出すと、プラッターが高速回転し、ヘッドが前後に揺れます。磁気ヘッドがスイングするプロセスは、磁気トラック(シリンダー)を位置決めするプロセスです. 磁気トラック(シリンダー)が位置決めされた後、磁気ヘッドはその磁気トラックに固定され、もはやたわみません. トラックのどのセクター.

ディスクには複数のディスクがあり、複数のヘッドがあるため、トラックを確認した後、ヘッドを確認する必要があります. ヘッドを確認することは、データがどのディスクにあるかを確認することでもあり、セクターを確認するための前提条件にもなります.

この位置決め方式をC(シリンダ)H(ヘッド)S(セクタ)位置決め方式と呼びます

3. ディスクの論理構造

ここに画像の説明を挿入

CHS ポジショニング方式を使用する場合、これは 3 次元アドレッシング方式であり、効率が十分に高くないため、効率と便利な管理のために、実際には、オペレーティング システムがディスクを管理するときに、ディスクを抽象化します。線形構造 (配列)。このとき、特定の領域のデータを読み取る必要があります.この領域の添え字を取得するだけで済みます.この添え字はオペレーティング システムでは LBA アドレスと呼ばれます.

LBAアドレスはOS内部でも使用されており、実際にディスクからデータを読み込もうとする場合、LBAアドレスをCHSアドレスに変換する必要があります(計算により得られます)。

a. オペレーティング システムが CHS アドレスを直接使用しないのはなぜですか?

1. 管理の便宜上、CHS アドレッシングは 3 次元であり、配列添字は 1 次元アドレッシングです。

2. ハードウェアの変更がオペレーティング システムに影響を与えないように、オペレーティング システムのコードをハードウェアから切り離します。

b. 1 回の実際の IO のサイズ

セクタのサイズは 512 バイトですが、それでもファイルには小さすぎます. 結局、ほとんどのファイルは数メガバイトから数ギガバイトです. したがって、オペレーティング システムがディスクにアクセスしてデータを読み取るたびに、基本単位として 1KB、2KB、および 4KB が使用されます (ほとんどの場合 4KB)。つまり、セクタ内のビットを読み取るだけでよい場合でも、オペレーティング システムは 4KB のデータをロードします。

つまり、オペレーティング システムが 4KB のデータをロードした後、それが十分に活用されていない可能性がありますが、これは必ずしも無駄を意味するわけではありません。局所性の原則によると、データにアクセスすると、データの周りのデータにアクセスする可能性が高くなります。したがって、一度に 4KB のスペースをロードすることも、ある程度プリロードの一種です。

シーケンステーブルと連結リストを比較すると、シーケンステーブルの方がCPUキャッシュヒット率が高いと言えます。シーケンステーブルのデータが連続した空間に格納されているためではないでしょうか。一度に 4KB のスペースがロードされるため、次にシーケンステーブルの後続の要素にアクセスしたときに、すでに記憶にある。

オペレーティングシステムのメモリは、実際には1つずつブロックに分割されており、これらのブロックのサイズはページフレームである4KBです。

ディスク上のファイル、特にバイナリ実行可能ファイルも、ページ フレームである 4KB ブロックに分割されます。

4. ディスクのパーティション管理

私たちのディスクは毎ターン 512G あり、そのような大きなスペースを管理するのは容易ではありません。オペレーティング システムは、ディスクを管理する際に分割統治の考え方を採用しており、まずディスクをパーティション分割 (ディスクを C ディスクと D ディスクに分割) し、次にパーティションをグループ化します。

4.1. ext ファイルシステム

ここに画像の説明を挿入

注意: ブート ブロックとは、PC 規格で規定されている 1kb のサイズのブート ブロックであり、ディスク パーティション情報とブート情報を格納するために使用され、どのファイル システムでもこのブロックを操作することはできません。他のすべてのブロック グループは同じ構成構造を持っています

スーパー ブロック: ファイル システム自体の構造情報、未使用のデータ ブロックと inode の数、データ ブロックと inode のサイズ、最後のマウント時刻、データの最後の書き込み時刻、最後のデータ書き込み時刻を格納します。ディスクのチェック時間などの他のファイル システムに関連する情報。主に、日付ブロックと inode の合計量が含まれます。各ブロック グループにはスーパー ブロックがあり、その中でグループ 0 のブロックがメインで、それ以外は補助されます。スーパー ブロックが破損すると、ファイル システム全体が影響を受けるため、これは一種のバックアップです。

Group Descriptor Table : パーティション内のすべてのブロック グループの属性情報を格納するブロック グループ記述テーブル

ブロック ビットマップ: ビットマップ構造です. この位置のデータ ブロックが占有されていることを示すには 1 を使用し、占有されていないことを示すには 0 を使用します.

inode Bitmap : ビットマップ構造。1 は inode が占有されていることを意味し、0 は占有されていないことを意味します。

inode テーブル: グループ内の使用可能なすべての inode (使用済み + 未使用) を格納する inode テーブル。各 inode のサイズは 128/256 バイトで、inode とファイルは 1 対 1 で対応し、各 inode は、ファイル (オペレーティング システムでは、inode はファイルの一意の識別子です)。ファイル名は inode に保存されません

データ ブロック (データ ブロック) : グループ内のすべてのデータ ブロックを格納します. データ ブロックは、ファイルのデータを格納するために使用されます. 各データ ブロックのサイズは同じです. (大きなファイルはより多くのデータ ブロックを占有しますが、小さなファイルはより少ないデータ ブロックを占有します)

上記の情報を通じて、次のことを知る必要があります。

1. フォーマットとは、ファイル システムを書き換えることであり、ファイル システムの復旧とは、損傷していない他のスーパー ブロックを使用して、損傷したスーパー ブロックを復元することです。

2. 新しいファイルを作成するには、inode ビットマップで占有されていない inode を見つけてファイルの属性を保存し、Block Bitmap に移動して、占有されていないデータ ブロックによってファイルに書き込まれたデータを見つけ、最後にリンクを確立します。 inode とデータ ブロックのマッピング関係の間

a. ファイル検索

inode とファイルは 1 対 1 で対応しており、同じパーティション内の inode は連続しており、異なるパーティション内の inode は関連していません。ファイルを見つけるとは、i ノードに対応するビットが i ノード ビットマップで 1 であるかどうかを調べることです。1 である場合、ファイルが存在することを意味し、ビットマップ内の i ノードの対応するビットは、最初のビットに対して相対的なオフセットを持っています。このオフセットは、inode テーブル内の inode の相対位置として使用できます。これにより、ファイルの属性コンテンツが取得されます。

inode には block[15] 配列があり、配列の添字 0 ~ 11 はファイルで使用されるデータ ブロックを格納し、block[12] に対応するデータ ブロックはファイルの内容を格納しませんが、その他のストア データブロックのアドレス、ファイルのデータもデータブロックに格納されているデータブロックに書き込むことができ、データブロックはデータブロックに格納されます。これはセカンダリインデックスです。block[13] は第 3 レベルのインデックスで、block[14] は第 4 レベルのインデックスです。このように、段階的に拡張することで、かなりの量のデータを保存することができます。

データ ブロックのサイズはわずか 4KB、データ ブロックのアドレスはわずか 4 バイトである可能性があり、大きなファイルの保存と検索は、インデックスを構築することで解決できます。

b. ファイルの削除

ファイル システムでファイルを削除するには、ファイルに対応する inode が inode Bitmap で 1 から 0 に設定されている限り、ファイルは削除されます。

inode ビットマップで inode が 0 から 1 に設定されると、オペレーティング システムは inode が占有されていないと見なし、この inode を新しく作成されたファイルに割り当て、ファイル属性を上書きします。

コンピュータ内のほとんどすべての削除は、このような遅延削除です。

新しいファイルを作成するとき、実際にはデータを書き込む必要がありますが、ファイルを削除するには、inode Bitmap で対応するビットを 1 から 0 に設定するだけです。そのため、ファイルの削除は、ファイルのダウンロードよりもはるかに高速です。

ファイルを削除すると、inode ビットマップの対応するビットが 1 から 0 に設定されるだけなので、ファイルの回復の可能性も提供されます. ファイルが誤って削除された場合は、ファイルを回復する以外の操作を行わないことをお勧めします.以前に削除されたファイルのデータ ブロック (または i ノード) を上書きする新しいデータが存在する可能性があります。

4.2 ディレクトリのプロパティとデータ

オペレーティング システムは inode でファイルを識別しますが、ユーザーはファイル名を使用するため、ファイル名は保存されません。ディレクトリにも独自の inode とデータ ブロックがあります。ディレクトリの inode に格納されているサブレットはディレクトリの属性であり、ディレクトリのデータ ブロックには、ディレクトリ内のすべてのファイルのファイル名と inode 間のマッピング関係が格納されています。 .

これが、同じディレクトリに同じ名前のファイルが 2 つ存在することができない理由です。これは、inode が 1 つずつファイルに対応するためです (つまり、inode は 1 つのファイル名にしかマップできません)。

Linux パーミッションを学習する際に、ディレクトリに新しいファイルを作成するには、書き込みパーミッションが必要であると説明されています.これは、ディレクトリに新しいファイルを作成するには、新しいファイルと、それに対応するデータ ブロックに対応するその inode を書き込む必要があるためです。ディレクトリ. マッピング関係.

2.ソフトリンクとハードリンク

ソフトリンクの作成と削除

ここに画像の説明を挿入

1.ls -liファイルを表示できる inode を使用する

2. ソフトリンクは、独自の inode とデータブロックを持つ独立したファイルです

3.ソフトリンクを削除するには、ソフトリンクファイルunlinkを使用するか、直接削除しますrm

ソフト リンクの使用シナリオ

ソフト リンクは、Windows のショートカットに相当します。

ここに画像の説明を挿入

ソフト リンクを削除してもソース ファイルには影響しませんが、ソース ファイルが削除されると、ソフト リンクは無効になります。

ハードリンクの作成と削除

ここに画像の説明を挿入

ハードリンクファイルの inode はソースファイルと同じであり、ハードリンクは独自の inode を持たず、独立したファイルではなく、対応するファイル名と inode の間の単なるマッピング関係であることが観察されます.

ここに画像の説明を挿入

ハード リンクの数は、この inode を指す複数のファイルがあることを意味します. inode には ref 変数があり、新しいハード リンク ref++ が作成されます. そうでない場合は ref–. ref が 0 に減らされた場合にのみ、ファイルは本当に削除されます。(ファイルを閉じる場合も同様で、ファイルを使用するプロセスがない場合にのみファイルが閉じられます) この方法は参照カウントと呼ばれます。

つまり、ハード リンクは実際にはファイルのエイリアスであり、ref が 1 つ増加するため、ファイルが削除された後も、このファイルのデータにはハード リンクからアクセスできます。

ハードリンクの使用シナリオ

新しいファイルを作成するとき、そのハード リンク番号は 1 (それ自体を表す) ですが、ディレクトリを作成するとき、デフォルトのハード リンク番号は 2 です.。カレントディレクトリ

ここに画像の説明を挿入

ディレクトリを作成すると、デフォルトで生成される現在のディレクトリを表し、.上位ディレクトリを表すため、上位ディレクトリに戻ることができます。.....cd ..

..dir ディレクトリの下にディレクトリを作成し続けると、新しいディレクトリの下にdir ディレクトリへのポイントが存在するため、dir のハード リンクの数は引き続き ++ になります。

おすすめ

転載: blog.csdn.net/m0_62633482/article/details/130402469
おすすめ