オペレーティング システム 6 - ファイル管理

この一連のブログは、深セン大学のオペレーティング システムコースの核心的な内容と参考文献「コンピュータ オペレーティング システム」を整理することに重点を置いています (質問がある場合は、コメント エリアで議論および指摘するか、私に直接連絡してください)プライベートメッセージ)。


概要

このブログでは、主に第 7 章のオペレーティング システムのファイル管理と第 8 章のディスク ストレージ管理の関連知識を紹介します。

目次

1. ファイルとファイルシステム

2. ファイルの論理構造

3. ディレクトリ管理

1. ファイル制御ブロック (FCB)

2. インデックスノード

3. 各種ファイルディレクトリ

3.1 単一レベルのファイル ディレクトリ

3.2 2 レベルのディレクトリ

3.3 ツリー構造ディレクトリ

3.4 ディレクトリクエリテクノロジー

4. 外部メモリの割り当て方法

1. 外部メモリの連続割り当て

2. リンクの割り当て

3. インデックスの割り当て

4. 外部ストレージの割り当て例

5. ファイルストレージスペースの管理

1. フリーリスト方式

2. フリーリスト方式

2.1 フリーディスクブロックリンクリスト方式

2.2 フリーエリアリンクリスト方式

3. ビットマップ方式

4. グループ連携方法のポイント

6. ファイル共有

1. 迂回ファイル共有方式 -> 有向非巡回グラフDAG

2. インデックスノードを共有する方法

3. ファイル共有用のシンボリックリンク

7. ディスクフォールトトレランステクノロジー (SFT)

1. 第 1 レベルのフォールト トレラント テクノロジ (SFT-I)

2. 第2レベル耐障害技術(SFT-Ⅱ)

3. 第3レベルのフォールトトレラント技術(SFT-Ⅲ)

八、データ整合性管理

1.事務

2. 同時実行制御

3. ディスクブロック番号のデータ整合性(重複データ)


オペレーティングシステムは、システムのソフトウェア資源(アプリケーションソフトウェアでもシステムソフトウェアでも)をファイルの形で管理し、この部分の機能(システムリソース管理)を担うオペレーティングシステムをファイルシステムと呼びます。この章では、ファイルの論理構成とファイル ストレージ上の物理構成、「名前によるアクセス」とファイル共有と保護を実現するファイル システム ディレクトリの構造と管理、ファイル ストレージ領域の割り当てと回復アルゴリズム、およびディスクについて紹介します。ファイル システムの形式、ファイル システムのセキュリティ。

1. ファイルとファイルシステム

ファイルシステムの管理機能は、管理するプログラムやデータを一連のファイルの集合体として実現するもので、データ群はデータ項目、レコード、ファイルの3階層に分けることができます

  • データ項目: データ構成の最下位レベル。基本データ項目は、オブジェクトの特定の属性 (生徒番号など) の文字セットを記述するために使用されます。結合されたデータ項目 (グループ項目) は、いくつかの基本データの集合です。給与等の項目(基本+賞与)
  • レコード: 関連するデータ項目のコレクション。特定の側面におけるオブジェクトのプロパティを記述するために使用され、キーワード キー (1 つまたは複数のデータ項目) を使用してレコードを一意に識別します。
  • ファイル:ファイル名が付いた関連情報の集合。ソース プログラム、実行可能なバイナリ コード プログラム、データのバッチ、テーブル、記事など。

ファイルについては、次の基本的な説明があります。

ファイルは保存可能: 情報の長期保存が容易になります。

ユーザーは名前でファイルにアクセスします。ユーザーは、ディスク上に保存されているファイルの具体的な場所を知らなくても情報にアクセスできるので便利です。

ファイルには主に非構造化ファイル(ストリーミング ファイル)と構造化ファイルが含まれます

1. 構造ファイルがあります。

構造化ファイルはレコード (固定長および可変長) で構成されます

2. 非構造化ファイル:

非構造化ファイルは文字 (またはバイト) で直接構成されており、これはレコード ファイルの特殊なケース、つまり未確認のレコードが 1 つだけ含まれるファイルとみなすことができます。

ストリーミング ファイルは OS の管理に便利であり、ユーザーがファイルの内部論理構造を柔軟に編成するのにも便利で、Unix、DOS、Windows などの OS はすべてストリーミング ファイルを使用します。

ファイルシステムについては、OS 内でファイル管理を実現する組織をファイル管理システムと呼び、ファイルシステムと呼びますが、その概要は次のとおりです。

1. ファイルシステムの機能:

  • ファイルストレージスペースの割り当てと回復 (つまり、ディスク管理) を実装します。
  • ファイル名とファイルスペースのマッピングを実装する
  • ファイル共有機能、保護および機密性対策を提供します。
  • ユーザーが求めるさまざまなファイル操作を実現 

2. ファイル システム インターフェイス:

  • コマンド インターフェイス: ファイル (dir/ls) の検索など、ユーザーとファイル システムの間のインターフェイス。
  • プログラム インターフェイス: ユーザー プログラムとファイル システムの間のインターフェイス。オープン、読み取り、書き込み、クローズなどのシステム コールを通じて実装されます。

2. ファイルの論理構造

ファイルの論理構造: ファイル構成。ユーザーが直接処理できるデータとその構造です。

ファイルの物理構造: ファイルのストレージ構造。これは、外部ストレージ上のファイルのストレージ構成形式です。

ファイルの論理構造タイプは、ファイルに構造があるかないか(構造の有無)により2種類に分けられ、ファイルの構成方法(シーケンス、インデックス、インデックス順)により3種類に分けられます。 )

構造ファイルがあります:

  • シーケンスファイル: レコードを順番に配置、可変長も固定長も可能
  • インデックス ファイル: 可変長レコードのインデックス テーブルを作成し、各レコードにエントリを設定し、検索を高速化します。
  • 索引順ファイル: 一連のレコードの最初のレコードのエントリーを作成します。

非構造化ファイル:

  • ストリーミングファイル

1. シーケンシャルファイル:

シーケンシャル ファイルのレコードはさまざまな順序で配置できます。通常は次の 2 種類があります。

(1) 文字列構造: レコードの順序は通常、キーワードに関係なく、保存時間に従ってソートされます。

(2) シーケンシャル構造: レコードは、正の整数 ID など、ユーザーが指定したキーワード (単語)に従って配置されます。

シーケンシャル ファイルの読み取り/書き込みの場合、固定長レコードが直接配置され、可変長レコードの各レコードがレコード長を持ち、レコードが順次に読み取り/書き込みされます。最適なアプリケーション シナリオは、レコードへのバッチ アクセスです。ファイル内にあります

  • 欠点: 単一レコードの読み取り/書き込みが困難 (特に可変長レコードの場合)、レコードの追加または削除が困難

2. インデックスファイル:

固定長レコードファイルの場合、シーケンシャルファイルでも計算によるランダムアクセスは容易ですが、長さを変更することは困難です。

可変長レコード ファイルのインデックス テーブルを作成します。インデックス テーブルはレコード キーによってソートされ、それ自体が固定長レコードのシーケンス ファイルを構成します。

ヒント: 異なるユーザーによる異なる目的での検索を実現するために、ファイルに対して複数のインデックス テーブル(異なるキーワードでの検索に対応)を作成できます。

  • 利点: ファイルの検索速度が向上し、ユーザーがレコードを挿入および削除しやすくなります。
  • 欠点: インデックス テーブルの確立に加えて、各レコードにはインデックス項目も必要となるため、オーバーヘッドが増加します。 

3. インデックス シーケンス ファイル:

可変長レコードファイル内のレコードをいくつかのグループに分割し、各グループの最初のレコードに対してインデックス項目を作成してインデックステーブルを作成します。インデックステーブルは、レコードキーによってソートされ、それ自体が固定のシーケンスを形成します。 -長さのレコード文書

ヒント: 比較的大きなファイルの場合は、複数レベルのインデックスを確立できます。

上記 3 つのファイルの検索速度を比較すると次のようになります。

3つのファイルの検索速度比較:100Wレコード

シーケンシャル ファイル: 平均検索に 50W (N/2)回かかります

インデックス ファイル: インデックス方式で検索。追加の 100W のインデックス スペースが必要

インデックス順序ファイル:

第 1 レベルのインデックス(N 平方根)は平均 1000 回検索されます

  • 100 レコードごとに 1 つのグループがあり、合計 10,000 のグループが存在します。つまり、10,000 のグループ インデックスがあります。
  • 100 個のグループ インデックスごとに 1 つのグループがあり、合計 100 個のグループが存在します。つまり、100 個のグループ インデックスがあります。
  • セカンダリ インデックス テーブルを作成します((3/2) N cubic)
  • 検索: グループインデックステーブル - グループインデックステーブル - グループレコードテーブル
  • 50+50+50=150回 

3. ディレクトリ管理

現代のコンピュータ システムでは、多数のファイルを保存する必要があり、効果的な管理を実現するには、主にファイル ディレクトリを通じてファイルを適切に整理する必要があります。

ディレクトリは、ファイル FCB をまとめて編成するデータ構造です。ディレクトリ ファイルと呼ばれるファイルと見なすこともできます。ディレクトリ管理の主な要件は次のとおりです:

  • 名前によるアクセスを実現: ユーザーはファイル名を指定するだけで、ファイルに対して対応する操作を実行できます。
  • カタログの検索速度の向上
  • ファイル共有: 複数のユーザーが同じファイルを共有できます
  • 重複したファイル名を許可する: 異なるユーザーが同じファイル名を使用できます。

1. ファイル制御ブロック (FCB)

FCB は、ファイル名、アクセス制御情報、使用情報などの基本情報を含むファイルを記述および制御するデータ構造です。

ファイルシステムは、FCBに基づいてファイルを操作するものであり、FCBはファイルに1つずつ対応しており、ディレクトリエントリであり、FCBの集合でディレクトリを構成する。

1. 基本情報:

  • ファイル名: ファイルID
  • ファイルの物理的な場所: 外部ストレージ上のファイルの保存場所を示します。
  • ファイルの論理構造
  • ファイルの物理構造

2. アクセス制御情報:

  • ファイル所有者のアクセス権限 (読み取り専用、読み取り/書き込み、実行など)
  • ユーザーアクセスの承認
  • 一般ユーザーのアクセス権

3. 使用情報:

  • ファイル作成時間
  • 最終変更 (またはアクセス) 時刻
  • 現在の使用状況情報

4. FCB の構造:

5. MS ファイルシステム:

2. インデックスノード

ファイル名が FCB の他の記述情報と一緒に保存される場合、より多くのスペースを占有する必要があります。

ファイルを操作するときは、最初に名前で検索するだけで済みます。ファイル名を FCB の他の記述情報とは別に保存する、ファイルを検索するオーバーヘッドが節約できます

FCB が大きすぎ、単一のディスク ブロックに格納されている FCB の数が少なすぎるため、ファイル検索のために複数のディスク ブロックにアクセスする必要があります。

FCB は 64B、ディスク ブロックは 1KB、1 つのディスク ブロックには 16 個の FCB のみが格納されます

ディレクトリに 640 個のファイルが含まれる場合、40 個のディスク ブロックが必要となり、平均的な検索では 20 個のディスク ブロックにアクセスする必要があります。

  • インデックス ノードの導入: ファイルの説明情報をインデックス ノードに保存し、ファイル名とインデックス ノード ポインタがディレクトリ テーブルを形成します。これは検索に便利です。

UNIX システムのディレクトリ エントリは 16 バイトを占めます。14B がファイル名、2B がポインタです。

1KB のディスク ブロックには 64 個のディレクトリ アイテムが格納されます。上記の例では、10 個のディスク ブロックのみが必要で、平均の検索アクセスは 5 ディスク ブロックです。

コア: FCB の他の記述情報を組み合わせてインデックス ノード データ構造を形成します (Unix OS はインデックス ノード構造を採用しています)

3. 各種ファイルディレクトリ

異なるディレクトリ形式は異なるファイル システム管理方法に対応しており、次のような一般的なファイル ディレクトリとディレクトリ クエリがいくつかあります。

3.1 単一レベルのファイル ディレクトリ

OS全体でディレクトリテーブルを作成し、各ファイルにディレクトリエントリ(FCB)を割り当てます。

ステータス ビット: ディレクトリ エントリが使用されているかどうか (1-使用済み、0-未使用) MS-Dos では、ファイル名の最初の文字が「0xE5」の場合、未使用を意味します。

1. 新しいファイルを作成します。

ディレクトリを確認し、同じ名前のファイルがない場合は、空のディレクトリ エントリ (ステータス ビットが 0) を見つけ、新しいファイル名、物理アドレス、およびその他の属性をディレクトリ エントリに書き込み、ステータス ビットを次のように設定します。 1

2. 古いファイルを削除します。

ファイルに対応するディレクトリ エントリを見つけて、外部ストレージ領域を再利用し、ステータスの位置を 0 に設定します。

  • 利点: シンプル
  • 欠点: 検索速度が遅い、重複した名前が許可されていない、ファイル共有に不便

3.2 2 レベルのディレクトリ

システムでは、マスター ファイル ディレクトリ (MFD) を作成し、ユーザーごとに個別のユーザー ファイル ディレクトリ (UFD) を作成します。各 UFD は MFD のディレクトリ アイテムです。

  • 利点: 単一レベルのディレクトリと比較して、2 レベルのディレクトリには次の利点があります。

1. ディレクトリ検索速度の向上 (n/2 倍) 2. 異なるユーザーのディレクトリで同じ名前を使用できる 3. システム内の同じ共有ファイルに異なるユーザーが異なるファイル名でアクセスできる 

  • 欠点:

1. ユーザーは独自の新しいサブディレクトリを作成し続けることができない 2. マルチユーザー共同開発の場合、分離が不利になり、ユーザー間のファイル共有が不便になる

3.3 ツリー構造ディレクトリ

最新の OS では、最も一般的で実用的なファイル ディレクトリはツリー構造ディレクトリです。これにより、ディレクトリの検索速度とファイル システムのパフォーマンスが大幅に向上します。

3階層以上のディレクトリ構造をツリー構造ディレクトリと呼びます。ツリー ディレクトリ構造では、任意のレベルのサブディレクトリに新しいサブディレクトリを作成できます。 

1. パス:

ルート ディレクトリからファイルへのパスは 1 つだけです

ルート ディレクトリからファイルまでのすべてのディレクトリとファイル名を「/」記号で接続し、ファイルのパス名を形成します

各ファイルには一意のパス名 (B/B/L、C/I/L など) のみがあります。

2. 現在のディレクトリ:

各ファイルのアクセスがルートディレクトリから始まると非常に面倒

通常、ユーザーによるファイル操作は一定期間 1 つのディレクトリに集中し、そのディレクトリが作業ディレクトリ (カレントディレクトリ) として設定されます。

ファイル アクセスの場合、パス名がない場合は、デフォルトで現在のディレクトリで動作します。

3. ディレクトリを追加します。

ユーザーは必要に応じて新しいディレクトリを追加できます

新しいディレクトリを追加するには、ファイル システム コマンド (MS-DOS の md コマンド、UNIX の mkdir コマンドなど) またはシステム コールを使用できます。

4. ディレクトリを削除します。 

ユーザーは必要に応じて古いディレクトリを削除できます

1. 空でないディレクトリは削除しないでください。 ディレクトリ内にファイル (またはサブディレクトリ) が存在する場合、それらは削除できません。

2. 空でないディレクトリを削除する ディレクトリ内にファイルやサブディレクトリがあるかどうかに関係なく、それらを削除します(より危険です)。

3.4 ディレクトリクエリテクノロジー

ユーザーが保存されたファイルにアクセスする場合、一般的なプロセスは次のとおりです。

  • ファイル FCB のクエリまたは名前によるノードのインデックス付け
  • FCB またはインデックス ノード内のファイルの物理アドレス (ブロック番号) に従って、ディスク上のファイルの物理的な場所に変換されます。
  • ディスクドライバーを起動し、必要なファイルをメモリに読み込みます。

主な検索方法には線形検索法とハッシュ法があります。

/usr/ast/mbox を見つけるための線形検索方法は次のとおりです。

ハッシュ方式に関しては、中核となるのはハッシュ インデックス ファイル ディレクトリ クエリを確立することであり、これは非常に高速です。 

4. 外部メモリの割り当て方法

外部ストレージ領域の割り当ての目標は、外部ストレージの使用率とファイル アクセス率を向上させることです。

外部ストレージの割り当て方法 (編成方法) が異なれば、形成される物理ファイル構造も異なります。通常、次の 3 つのタイプに分類されます。

(1) 継続的な編成方法:ファイルごとに連続したディスク領域を割り当て、シーケンシャル ファイルを形成します。

(2) リンク編成方法:不連続なディスク領域を割り当て、リンク ポインタを介して連結してリンク ファイルを形成します。

(3) インデックス編成方法: ファイルのインデックス編成方法を採用し、インデックス ファイル構造を形成します。

ヒント: 最新の OS では、ファイルはさまざまなタイプで編成できます。

1. 外部メモリの連続割り当て

連続的な外部メモリ割り当てとは、ファイルに対する連続したディスク ブロックのグループの割り当てを指します (中央は空でも構いません)。

  • 利点: 簡単なシーケンシャルアクセス、大量のデータへのより高速なアクセス
  • 短所: 継続的な外部ストレージ容量が必要です (「断片化」の問題もあります)、ファイルの長さを事前に知っておく必要があり、柔軟に削除および挿入できません。 

2. リンクの割り当て

同じファイルに属するディスク ブロックは割り当てのためにリンクされます。これはリンク割り当てと呼ばれます (ディスク ブロックの割り当ては不連続である可能性があります)。これにより、連続的な外部メモリ割り当ての欠点が解決されます。

1. 暗黙的なリンク:

リンクポインタをディスクブロックデータ領域に直接配置します。

ヒント: ファイルを見つけるには、まず前のブロックを検索する必要があります。詳細については、セクション 4 の例を参照してください。

  • 利点: ⑴、「断片化」がない ⑵、継続的な外部ストレージスペースが必要ない ⑶、ファイルの長さを事前に知る必要がない
  •  欠点: ⑴、シーケンシャルアクセスのみに適しており、ランダムアクセスには適していない (効率が低い) ⑵、信頼性が低い (中間のポインタが間違っているとチェーン全体が壊れる) ⑶、データ領域のサイズが等しくない2 のべき乗 (ポインタがデータ領域のスペースを占有する)。これはメモリ ページに対応するのに役立ちません。

2. リンクを表示:

ファイルの各ディスク ブロックをリンクするために使用されるポインタは、リンク テーブル (ファイル アロケーション テーブル FAT) に明示的に格納されます(-1 はポインタの末尾です)。

  • 利点: ⑴、FAT は占有スペースが小さく、メモリにロードできます ⑵、検索速度が速く、ランダムアクセスに適しています また、「断片化」がなく、継続的な外部ストレージスペースが必要なく、ファイルの長さを事前に知る必要もありません 
  • 欠点: ⑴、FAT は外部ストレージ領域を占有する必要があります (アロケーション ユニットは占有を減らすためにクラスターを使用できます) ⑵、FAT は大きなメモリ領域を占有する必要があります。大容量のハードディスクの場合、FAT の一部のみがメモリに転送されます。 ⑶のたびに、効率的に直接保存することはできません。

3. インデックスの割り当て

リンク編成方式は連続ストレージ割り当ての問題を解決しますが、①非効率な直接アクセス、②ポインタ/FAT が大量のスペースを占有する、という 2 つの大きな問題があります。そのため、特定のファイルのディスク番号が異なるため、インデックス割り当てが表示されます。実際に調整される FAT 全体ではなく、番号をメモリに入れるだけです (FAT はすべてのファイルのブロック番号リンクとともにロードされます)。

コア: ファイルに割り当てられたディスク ブロック番号を収集し、それらをインデックス ブロックに順番に配置します。 

1. 単一レベルのインデックス割り当て:

各ファイルには最初にインデックス ブロックが割り当てられ、割り当てられたインデックス ブロックがすべてのディスク ブロック番号を保持できない場合は、新しいインデックス ブロックが割り当てられます。

  • 長所: 便利な直接アクセス
  • 欠点: ⑴. FAT 方式と比較して、より多くの外部ストレージ領域を必要とします (インデックス ブロックがいっぱいではありません) ⑵. ファイルが大きい場合、単一レベルのインデックス割り当ての効率は依然として低いです 

1. 2 つの (複数の) レベルのインデックス割り当て:

ファイルが示すディスクブロック(インデックスブロック)に格納されている情報は、次の階層のインデックスブロックのディスクブロック番号になります。

  • 利点: 大きなファイルの場合でも、直接アクセスを使用できます。
  •  短所: FAT や単一レベルのインデックス割り当てと比較して、より多くの外部ストレージ領域が必要となり、特にファイルが大きい場合、外部ストレージ領域を割り当てることができません。

3. ハイブリッド (増分) インデックス割り当て:

さまざまな操作をより包括的に処理するために、複数の編成方法を組み合わせてファイルの物理構造を形成できます。ファイルの最大長は、各編成方法の最大長を重ね合わせたものになります。

各ディスク ブロックのサイズ (外部記憶領域サイズ) が 4KB で、各ディスク ブロックのアドレスが 4B (32 ビット、4G ディスク ブロック) の場合:

したがって、 4KB/4B = 1K のディスク ブロック番号、各レベルのインデックス ストレージをサポートできます。

  • 直接アドレス (割り当て):小さいファイル用に10 個の直接アドレス項目を設定し、ディスク ブロック番号を直接保存します。最大ファイルは: 10x4KB = 40KB
  • ワンタイム間接アドレス(単一レベルインデックス割り当て) ⑴. ファイルが40KBを超える場合、ワンタイム間接アドレスが使用され、1Kのディスクブロック番号が格納されます。
  • 二次間接アドレス (二次インデックス割り当て) ⑴. ファイルが 4.04MB を超える場合、二次間接アドレスは 1K のディスク ブロック番号を格納するために使用されます ⑵. 二次間接アドレスの最大ファイルは: 4.04MB + 1Kx1Kx4KB = 4.04 MB + 4GB
  • 3 つ(複数)の間接アドレス(多段階インデックス割り当て) ⑴. ファイルが 4GB を超える場合、3 つ(複数)の間接アドレスが使用され、毎回 1K のディスク ブロック番号が追加されます = 4GB + 4TB

4. 外部ストレージの割り当て例

ファイル システム内に 20MB の大きなファイルと 20KB の小さなファイルがあり、連続、リンク、セカンダリ インデックス、および混合インデックス割り当てスキームがそれぞれ使用されます (各ブロックのサイズは 4096B、各ブロックのアドレスは 4B で表されます) )、 聞く:

1. 各ファイル システムで管理される最大のファイルはどれですか?

2. 大きいファイルと小さいファイルのファイルの物理アドレスを記録する (各ブロックの目的を説明する) ために、各スキームに専用ブロックがいくつ必要ですか?

3. 大きなファイルの最初の 5.5KB と後半 (16M+5.5KB) の情報を読み取る必要がある場合、各スキームで何回のディスク I/O 操作が必要ですか?

ブロック数 = 4K / 4B = 1K

結果をまとめると次の図のようになります。UNIX 混合割り当て方式は、大きなファイルを管理し、低コストで高速にファイルにアクセスできます。

1. 各ファイルシステムで管理できる最大ファイルは以下のとおりです。

  • 連続: 無制限、ディスク ファイル領域全体と同じ大きさまで可能
  • リンク: 同上
  • セカンダリインデックス: 1K * 1K * 4KB = 4GB
  • 混合インデックス割り当て: UNIX 混合割り当て 40KB+4MB+4GB+4TB

2. 答えは次のとおりです。

  • Continuous: 大きなファイルと小さなファイルの両方について、ファイル制御ブロック FCB に 2 つの項目を設定するだけで済みます。1 つは最初の物理ブロック番号、もう 1 つはファイル内の総ブロック数です。記録するために特別なブロックは必要ありません。ファイルの物理アドレス
  • リンク: 大きなファイルでも小さなファイルでも、ファイル制御ブロック FCB に 2 つの項目 (最初の物理ブロック番号とファイル内の総ブロック数) を設定するだけで済みます。同時に、ファイルの各物理ブロック内のストレージ 次のブロックのブロック番号へのポインタ。
  • セカンダリ インデックス: 大きいファイルと小さいファイルの場合、セカンダリ インデックスは固定です。20KB の小さいファイルの場合、1 つを第 1 レベルのインデックスとして使用し、もう 1 つを第 2 レベルのインデックスとして使用します。2 つの専用の物理ブロックがインデックス ブロックとして使用されます。 20MB のファイルでは、1 つのブロックを第 1 レベルのインデックスとして使用し、5 つのブロックを第 2 レベルのインデックスとして使用し、6 つの専用物理ブロックをインデックス ブロックとして共有します。
  • 混合インデックス割り当て: 小さな 20KB ファイルの場合、ファイル制御ブロック FCB の i_addr[13] の最初の 5 エントリ (直接アドレス項目) のみがファイルの物理ブロック番号の保存に使用され、専用の物理ブロックは必要ありません。20MB の大きなファイルの場合、FCB の i_addr[13] の最初の 10 エントリは、大きなファイルの最初の 10 個の物理ブロック番号を格納するために使用され、第 1 レベルのインデックス ブロックは、ファイルの次の 1K ブロック番号を格納するために使用されます。大きなファイルの場合、第 2 レベルのインデックス ブロックも使用されます。大きなファイルを格納した後、ブロック番号にインデックスを付けます。セカンダリ インデックスは、第 1 レベルのインデックスに 1 ブロック、第 2 レベルのインデックスに 4 ブロックを使用します。ファイルの物理アドレスを保存するには、合計 6 つの専用物理ブロックも必要です。

ヒント: レベル 1 インデックス専用ブロック = 4MB

3. 分析は次のとおりです。

5.5KB / 4KB = 最初のブロック 16MB + 5.5KB/ 4KB = 4097 ブロック

  • 連続: 大きなファイルの前後の情報を読み取るには、まずファイル内の情報の相対ブロック番号を計算し、次に物理ブロック番号 = ファイルの最初のブロック番号 + 物理ブロック番号を計算する必要があります。相対論理ブロック番号を指定し、最後にブロック情報を読み取るためにディスク I/O 操作を費やします。つまり、情報を読み取るたびに 1 回の I/O 操作が必要になります
  • リンク: 大きなファイルの前にある 5.5.KB の情報を読み取るには、ヘッダー ブロックを 1 回読み取って情報が配置されているブロックのブロック番号を取得し、次に論理ブロック No. 1 を読み取って取得するだけで済みます。必要な情報。大きなファイルの背後にある 16MB + 5.5KB の情報を読み取るには、まず情報が配置されているブロックの前のブロックを読み取る必要があります。ブロックのブロック番号を取得するには、合計 4097 回のディスク I/O 操作が必要です。最後に 1 回の I/O 操作が必要で、ブロック情報を読み取ります。したがって、(16MB+5.5KB) バイトの情報を読み取るには、合計 4098 回のディスク I/O が必要になります。
  • セカンダリ インデックス: 情報を読み取るたびに、第 1 レベルのインデックスと第 2 レベルのインデックスをそれぞれ読み取り、その後情報を読み取ります。つまり、情報を読み取るたびに 3 回の I/O 操作が必要になります
  • 混合インデックス割り当て: 5.5KB は小さなファイルに属するため、直接アドレス アドレッシング (1 回)、16MB+5.5KB はセカンダリ インデックスに属するため、3 回です。

詳細な参照:オペレーティング システム エラーの記録_継続、リンク、i ノードを使用する場合、それぞれファイル システムに 20mb の大きなファイルと 20kb の小さなファイルがあります (_MarshaZheng のブログ - CSDN ブログ)

以下に示すように FAT があり、-1 はファイルの終わりを意味し、-2 はディスク ブロックが壊れていることを意味し、0 はディスク ブロックが空であることを意味します。FAT テーブルにはファイルがいくつありますか? 各ファイルにはどのディスク ブロックが存在しますか? 2 つのディスク ブロックでファイルを保存する場合、FAT の内容は何ですか?

3 -1 = 3 ファイル

どのディスクを置くか -> 各 -1 から押し戻す

(1) A ファイル:2、9、1、3 (2) B ファイル:11、5 (3) C ファイル:7、4、12

また、2 つのディスク ブロックを持つファイルを保存すると、6 の 0 は 10 になり、10 の 0 は -1 になります。

5. ファイルストレージスペースの管理

第 4 章のファイル編成方法 (外部ストレージ割り当て方法) を実装するには、ファイルにディスク ブロックを割り当てる必要がありますが、このとき、どのディスク ブロックが割り当て可能であるかを知る必要があり、同時にディスク ブロックの割り当てとリサイクルの手段を提供しますこれはファイルストレージスペースの管理方法であり、一般的な方法をいくつか以下に紹介します。

1. フリーリスト方式

フリーリスト方式は連続割り当て方式で、外部メモリ上のすべての空き領域に対してフリーリストを作成する方式です。

  • 空きディスク領域の割り当てアルゴリズム (メモリの動的割り当てと同様): 1. 最初の適応アルゴリズム 2. サイクルファースト適応アルゴリズム 3. 最良の適応アルゴリズム 4. 最悪の適応アルゴリズム
  • 空きエクステントを回復するためのアルゴリズム: 隣接するエクステントの結合 

メモリ割り当てでは連続割り当ては少ないですが、外部メモリ(ファイル)の割り当てでは、大量にアクセスすることが多いスワップ領域や小さなファイル領域についてはフリーテーブル方式を採用することで高速化が可能です。

2. フリーリスト方式

フリーディスクをフリーチェーンに引き込む方法は、チェーンを構成する基本単位に応じて 2 つの形式に分けられます。

2.1 フリーディスクブロックリンクリスト方式

ディスク上のすべての空きストレージ領域を、ディスク ブロックを基本単位としてリンク リストに接続します。

ユーザーがディスク容量を必要とする場合、リンクされたリストの先頭からディスクブロックが割り当てられます。ユーザーがディスク領域を解放すると、解放されたディスク ブロックがリンク リストの最後にハングします。

  • 利点: ディスク ブロックの割り当てと再利用操作が簡単です。
  • 欠点: 空きディスク ブロックのリンク リストが非常に長くなる可能性があり、空きディスク ブロックのリンク リストの途中にあるポインタが間違っているため、後続のすべての空きディスク ブロックが失われます。 

2.2 フリーエリアリンクリスト方式

ディスク上のすべての空きエクステント (複数の連続したディスク ブロック) をリンク リストにリンクします。

ユーザーがディスク領域を必要とする場合、最初の適応アルゴリズムを使用して、リンクされたリストに沿ってディスク領域が割り当てられます。ユーザーがディスク領域を解放すると、解放されたエクステントをリンク リストに挿入して位置に適応させます (スプライシングが必要な場合があります)。

  • 利点: 空きエクステントのリンク リストが短くなる可能性がある
  • 欠点: エクステントの割り当てと再利用の操作がより複雑になるため、空きエクステントのリンク リストの途中でポインタ エラーが発生すると、後続の空きエクステントがすべて失われます。

3. ビットマップ方式

ビット マップは、ディスク内のディスク ブロックの使用状況を示すバイナリ ビットの使用を指し、01 は空きかどうかを示すために使用されます。

ヒント: ディスク上のすべてのディスク ブロックには、それに対応するバイナリ ビットがあり、ビット マップの長さ x 幅 = ブロックの総数になります。

  • ディスク ブロックの割り当てのプロセスは次のとおりです。

1. ビットマップをスキャンして、設定値 0 を持つブロックを見つけます。

2. スキャン位置情報をディスクのブロック番号 (n) に変換します。たとえば、i 番目のバイトと j 番目のビットの場合、n = ix 8 + j

3. 新しく割り当てられたディスク ブロックの対応するビットが 1 になるようにビット ダイアグラムを変更します。 

  • ディスク ブロックを回復するプロセスは次のとおりです。

1. ブロック番号 (n) を位置情報に変換 i = n / 8; j = n mod 8

2. i 番目のバイトと j 番目のビットが 0 になるようにビット ダイアグラムを変更します。

  • 利点: 1. ビットマップは占有スペースが少なく、メモリにロードできます。 2. 割り当てとリサイクルの操作が簡単で効果的です。

したがって、ビットマップ方式は、MS OS システムなどのマイコンやミニコンピュータでよく使用されます。

4. グループ連携方法のポイント

フリー リスト方式とフリー リンク リスト方式はどちらも、リストやリンク リストが長くなりすぎるため、大規模なファイル システムには適していません。グループ リンク方式は、UNIX システムで使用されており、上記 2 つの方式の利点を組み合わせています

N 個 (100 個など) の空のディスク ブロックのグループを形成し、空きディスク ブロック グループをリンク リストに接続します。

空きディスク ブロック番号スタック: 現在利用可能な空きディスク ブロック番号のセットを保存します。

ヒント: スタックがいっぱいの場合、s.free(0) はスタックの最下位であり、s.free(99) はスタックの最上位になります。 

ヒント: 各スタックの最下位に対応するモジュールのみが空のディスク ブロック グループです。たとえば、300 は 301->400 に対応し、299 は空のディスク ブロックに対応します。

  • ディスク ブロックの割り当てのプロセスは次のとおりです。

1. s.free(N)=1(現在の空きディスクブロック番号スタックが割り当てられている)の場合、スタックシャーシブロック番号に対応するディスクブロック(コンテンツ)を空きディスクブロック番号スタックに転送し、ディスクを転送します。ブロック配布

2. それ以外の場合は、スタックの先頭のディスク ブロック番号に対応するディスク ブロックを直接割り当て、s.free を 1 減算します。 

  •  ディスク ブロックをリサイクルするプロセスは次のとおりです。

1. s.free=N の場合、空きディスク ブロック スタックの内容を新しく解放されたディスク ブロックに書き込み、s.free=1 にして、このディスク ブロックをスタックの一番下として使用します。 .free は 1 ずつ増加し、ブロックをスタックの最上位として使用します

割り当てと回復の詳細なケースは次の場所にあります。

オペレーティング システム - グループ リンク方法 - LengDanRan のブログ - CSDN ブログ

例は次のとおりです。例はグループ リンクの方法を説明する_Ajay666 のブログ - CSDN ブログ 

6. ファイル共有

最新のコンピュータ システムでは、複数のユーザーが同じファイルを共有できるようにファイル共有手段を提供する必要があり、ストレージ領域を節約するためにシステムに保存するコピーは 1 つだけで済みます。

1. 迂回ファイル共有方式 -> 有向非巡回グラフDAG

この方法は従来のツリー ディレクトリ方式であり、ファイル共有が不十分です。

各ユーザーの作業ディレクトリはカレント ディレクトリです。ファイルがカレント ディレクトリにない場合は、カレント ディレクトリから開始して上 (親ディレクトリ) または下 (サブディレクトリ) を検索します。

現在のディレクトリが PA の場合、JBK で B ファイルを見つけるには、cd ..\D\B を使用できます。

有向非巡回グラフ DAG を使用すると、ファイルに複数の親ディレクトリを持つことができます。

しかし、 DAGではサブディレクトリや複数の親ディレクトリをリンクすることが難しく、修正に手間がかかります。

2. インデックスノードを共有する方法

ディレクトリ エントリには、ファイル名とインデックス ノードへのポインタのみが含まれます。同じファイルを共有する異なるディレクトリ エントリには、異なるファイル名がありますが、インデックス ノードへの同じポインタが含まれます。共有ディレクトリ エントリの数を示すようにリンク カウンタを設定します。 

作成と削除の例は次のとおりです。

  • 利点: 同じファイルを共有するすべてのユーザーがそのファイルを変更でき、他のユーザーもそのファイルを共有できます。
  • 欠点: 共有ファイルを作成したユーザーがファイルを削除した場合でも、他のユーザーがファイルを共有している場合、ファイルの所有者は変更されません (作成ユーザーは引き続きファイルの料金を支払う必要があります) 

3. ファイル共有用のシンボリックリンク

ユーザーがファイルを共有する場合、ファイルが存在するディレクトリ項目の場所へのポインタ(同じシステム内のパス名、IP アドレスとパス名など) であるシンボリック リンク (Link) が使用されます。ネットワーク内の他のホストの) 

ファイルの所有者またはファイルは、ファイルを共有しているユーザーの数を知りません。ファイルの所有者は、共有ファイルを完全に削除できます。共有ファイルのユーザーが、削除された共有ファイルにアクセスすると、アクセス エラーが発生します。

  • 利点: ネットワーク上のどこでも共有ファイルを共有できる
  • 欠点: アクセス速度が遅い (チェーンに沿って検索する) 

7. ディスクフォールトトレランステクノロジー (SFT)

未実現のディスクの特定の部分に欠陥や障害が発生した場合でも、(1) ディスクは正常に動作することができます (2) データのエラーや損失が発生しないため、ディスクのフォールト トレランス技術 (SFT) が必要です。低から高まで 1 ~ 3 レベルに分けられます。

1. 第 1 レベルのフォールト トレラント テクノロジ (SFT-I)

SFT-I は主に、ディスク表面エラーが発生した場合のデータ損失を防ぎます。

1. 二重ディレクトリと二重ファイル アロケーション テーブル (FAT):

ディレクトリ (ファイル名とファイル データ、ファイル属性) とファイル アロケーション テーブル (ファイルの場所) は、ファイル システムで最も重要なデータです。

2 つのディレクトリとファイル アロケーション テーブルをディスク上の異なる場所に保存する

通常、操作はメイン ディレクトリとメイン FAT 上で実行され、変更されたデータは定期的にバックアップ ディレクトリと FAT に保存されます。ディスクが破損した場合は、バックアップ ディレクトリとバックアップ FAT を起動し、新しいディレクトリと FAT を作成します。

起動するたびに、2 つのディレクトリと FAT の整合性をチェックします。

2. ホットフィックスのリダイレクト:

ディスク内にホット リペア領域を確立します (ディスク容量のわずかな部分、たとえば 2% ~ 3%)。ディスク ブロックが損傷すると、データがホット リペア領域に書き込まれます。ディスク ブロックが損傷するたびに、データがホット リペア領域に書き込まれます。アクセスされると、対応するホットフィックス領域のディスク ブロックにアクセスするために自動的に転送されます。

3. リードアフターライト検証:

メモリ バッファ A からディスク ブロックを書き込み、すぐにディスク ブロックの内容をメモリ バッファ B に読み取り、2 つのバッファ A と B の内容が一致しているかどうかを比較します。一致していない場合は、再度実行します。まだ矛盾している場合は、ディスク ブロックが破損していると考え、内容をホット リペア領域に書き込みます。

2. 第2レベル耐障害技術(SFT-Ⅱ)

SFT-IIは主に、ディスクドライブの故障時にデータの読み書きが正常に行えなくなる問題を解決します。

1. ディスクミラーリング:

2 つのディスク ドライブを 1 つのディスク コントローラに接続します。データがプライマリ ディスクに書き込まれるたびに、バックアップ ディスクにも書き込まれ、同じ場所に書き込まれます。プライマリ ディスクとバックアップ ディスク上のデータはすべて、まったく同じです。プライマリ ディスク ドライブが破損した場合は、バックアップ ディスクを有効にします

2. ディスクの二重化:

2 つのディスク ドライブを 2 つのディスク コントローラに接続します。プライマリ ディスクに書き込まれたデータがバックアップ ディスクにも書き込まれ、同じ場所に書き込まれるたびに、プライマリ ディスクとバックアップ ディスクのデータはすべてまったく同じになります。 . ディスクシステムが破損した場合は、バックアップディスクシステムを有効にしてください。

2 つの SFT-II の分析は次のとおりです。

  • 長所: 耐障害性がある
  • 欠点: 大幅な無駄 (効率は 50% のみ)、I/O 速度は向上していない

3. 第3レベルのフォールトトレラント技術(SFT-Ⅲ)

フォールト トレランスを実現するクラスタ テクノロジに基づいて、デュアル マシン ホット バックアップ、デュアル マシン相互バックアップ、および共通ディスクの3 つの主要なモード テクノロジがあります。

八、データ整合性管理

実際のアプリケーションでは、複数のファイルに同じデータが含まれることが多く、データ整合性制御により、複数のファイル内の同じデータがどのような状況でも同じであることが保証されますいくつかの中核的な問題があります。

  • データが異なるファイルに同時に保存されている場合、データの変更が各ファイルで一貫していることを確認する方法
  • ファイルの複数のバックアップの一貫性を保つ方法
  • 共有データの逐次変更

1.事務

1. 事業内容:

トランザクションは、さまざまなデータ項目にアクセスして変更するためのプログラム単位です。トランザクション操作は「アトミック」です。つまり、すべてのデータが変更されるか、データがまったく変更されないかのどちらかです。

2. 取引記録:

トランザクション レコードは、トランザクションの実行中にデータ項目の変更に関するすべての情報を記録し、次の情報を含む、安定したメモリに保存する必要があります。 ⑴、トランザクション名 ⑵、データ項目名 ⑶、古い値 ⑷、新しい値

3. 回復アルゴリズム:

  • Undo(Ti): トランザクション Ti によって変更されたすべてのデータを古い値に復元します。
  • Redo(Ti): トランザクション Ti によって変更する必要があるすべてのデータを新しい値に設定します。

トランザクションは、トランザクション記録と回復アルゴリズムを通じてデータの一貫性を実現します。

2. 同時実行制御

実際のコンピュータシステムでは、複数のユーザが異なるトランザクションを同時に実行するため、トランザクションの順序を制御する、いわゆる同時実行制御が必要になります一般的な実装は「ロック」に基づいています。

1. ミューテックスを使用して「シーケンス」を実現します。

オブジェクトごとに「ロック」を設定する オブジェクトにアクセスするには、まず「ロック」を取得する(ロックを閉じる) オブジェクトにアクセスした後、「ロック」を解除する(ロックを解除する)

2. セマフォ メカニズムを使用して「シーケンス」を実現します。

相互排他セマフォ(Mutex)を利用してオブジェクトの逐次アクセスを実現 一般セマフォを利用して訪問者の記録を実現

3. ディスクブロック番号のデータ整合性(重複データ)

  • 空きディスク ブロック: 空きディスク ブロック管理メカニズムによって実現されます。
  • データ ディスク ブロック管理: ディレクトリと FAT (またはインデックス ノード) を通じて実現

ヒント: 通常の状況では、空きディスク ブロックとデータ ディスク ブロックは補完的です。つまり、ディスク ブロックは空きディスク ブロックかデータ ディスク ブロックのいずれかです。

  • 空きディスク ブロック カウンタ: 空きディスク ブロック管理を通じて、空きディスク ブロックの状況を記録します。各ディスク ブロックはカウンタに対応します (1-空きディスク ブロック、0-非空きディスク ブロック)。
  • データ ディスク ブロック カウンタ: FAT (またはインデックス ノード) を介してデータ ディスク ブロックを記録します。各ディスク ブロックはカウンタに対応します (1-データ ディスク ブロック、0-非データ ディスク ブロック)。

 

おすすめ

転載: blog.csdn.net/weixin_51426083/article/details/131430820