オペレーティングシステム〜ファイル管理、ファイルディレクトリ、ファイルの物理的構造、ファイル共有、ファイル保護の実現

ファイル管理

コンピュータにはさまざまなファイルが保存されています。ファイルにはどのような属性がありますか?ファイル内
のデータはどのように編成する必要があり
ますか?ファイルはどのように編成する必要がありますか?

ファイル属性

ファイルにはどのような属性がありますか?

ファイル名:ファイル名は、主にユーザーがファイルを見つけやすくするために、ファイルを作成したユーザーによって決定されます。同じ名前のファイルを同じディレクトリに置くことはできません。

識別子:システム内の各ファイル識別子は一意であり、ユーザーが読み取ることはできません。したがって、識別子は、オペレーティングシステムが各ファイルを区別するために使用する内部名にすぎません。

タイプ:ファイルのタイプを指定します

場所:ファイルが保存されているパス(ユーザーが使用)、外部ストレージ内のアドレス(オペレーティングシステムが使用、ユーザーには表示されない)

サイズ:ファイルサイズの作成時刻、最終変更時刻、ファイル所有者情報を指定します

保護情報:ファイル保護のためのアクセス制御情報

ここに画像の説明を挿入します

ファイルの内部データの組織構造

ファイルの編成構造は、デザインモードの組み合わせモードに似ており、各ファイルがリーフノード、ディレクトリが親ノードになります。

ここに画像の説明を挿入します

オペレーティングシステムがファイルに提供する機能

ファイルの作成(システムコールの作成)

ファイルの削除(システムコールの削除)

ファイルの読み取り(システムコールの読み取り)

ファイルの書き込み(システムコールの書き込み)

ファイルを開く(システムコールを開く)

ファイルを閉じます(システム呼び出しを閉じます)

ファイルを外部ストレージに保存する方法

外部メモリは内部メモリと同じです。外部メモリもストレージユニットで構成されており、各ストレージユニットは一定量のデータ(1Bなど)を格納できます。各ストレージユニットは物理アドレスに対応します

オペレーティングシステムは、ファイルに「ブロック」単位でストレージスペースを割り当てるため、ファイルのサイズが10Bしかない場合でも、1KBのディスクブロックを占有する必要があります。外部メモリ内のデータも、メモリに読み込まれるときにブロック単位で読み込まれます

メモリを「メモリブロック」に分割するのと同様に、外部メモリは「ブロック/ディスクブロック/物理ブロック」に分割されます。各ディスクブロックのサイズは等しく、各ブロックには通常2アドレスの整数乗が含まれます(たとえば、この例では、ブロックには2 ^ 10アドレス、つまり1KBが含まれます)。同様に、ファイルの論理アドレスも(論理ブロック番号、ブロックアドレス)に分割でき、オペレーティングシステムも論理アドレスを外部メモリの物理アドレス(物理ブロック番号、ブロックアドレス)の形式に変換する必要があります。ブロックのアドレスのビット数は、ディスクブロックのサイズによって異なります

ファイルディレクトリ

ここに画像の説明を挿入します
「写真」をダブルクリックすると、オペレーティングシステムはこのディレクトリテーブルでキーワード「写真」に対応するディレクトリエントリ(つまりレコード)を見つけ、外部ストレージから「写真」ディレクトリの情報を読み取ります。内部メモリに保存するので、「写真」ディレクトリの内容を表示できます。
s
ディレクトリファイルテーブルのレコードは、「ファイル制御ブロック(FCB)」です。

順序付けられたFCBのコレクションは「ファイルディレクトリ」と呼ばれ、FCBはファイルディレクトリエントリです。ファイルの基本情報はFCBに含まれていますか?ファイル名、物理アドレス、論理構造、物理構造など)、アクセス制御情報(読み取り/書き込み可能かどうか、アクセスが禁止されているユーザーのリストなど)、使用情報(ファイル作成時間、変更時間など)等。)。
最も重要で基本的なことは、ファイル名とファイルが保存されている物理アドレスです。

マルチレベルディレクトリ

ここに画像の説明を挿入します
ユーザー(またはユーザープロセス)がファイルにアクセスする場合、ファイルパス名を使用してファイルを識別します。ファイルパス名は文字列です。すべてのレベルのディレクトリは「/」で区切られます。ルートからのパスディレクトリは絶対パスと呼ばれます。

例:selfie.jpgの絶対パスは「/ photo / 2015-08 /自拍.jpg」です。

システムは、絶対パスに従って、次の
レベルのディレクトリをレイヤーごとに検索します最初に、外部
ストレージからルートディレクトリのディレクトリテーブルを読み取ります。「写真」ディレクトリの保存場所を見つけた後、外部ストレージから対応するカタログを読み取ります。ディスクI / O操作を一度に読み取ります。…pはついにファイル「self-timer.jpg」の保存場所を見つけました。プロセス全体で、3回のディスクI / O読み取り操作が必要です。

多くの場合、ユーザーは同じディレクトリ内の複数のファイルに連続してアクセスします(たとえば、「2015-08」ディレクトリ内の複数の写真ファイルを連続して表示する)。明らかに、毎回ルートディレクトリから検索するのは非常に非効率的です。 「現在のディレクトリ」を設定できます。

たとえば、この時点で「写真」のカタログファイルが開かれている、つまりこのカタログテーブルがメモリにロードされているので、「現在のカタログ」として設定できます。ユーザーがファイルにアクセスしたい場合は、現在のディレクトリから始まる「相対パス」を使用できます。

Linuxでは、「。」は現在のディレクトリを意味するため、「photo」が現在のディレクトリである場合、「selfie.jpg」の相対パスは次のようになります。

「./2015-08/Selfie.jpg」。現在のパスから始めて、メモリ内の「写真」ディレクトリテーブルにクエリを実行して「2015-08」ディレクトリテーブルの保存場所を確認し、外部ストレージからディレクトリに転送して、の保存場所を確認するだけです。 「selfie.jpg」アップ。

「現在のディレクトリ」と「相対パス」の導入後、ディスクのl / oの数が減少していることがわかります。これにより、ファイルへのアクセス効率が向上します。

インデックスノード(FCBの改善)

ここに画像の説明を挿入します
考えることの利点は何ですか?

FCBが64Bで、ディスクブロックのサイズ
が1KBであるとすると、各ディスクブロックに格納できるFCBは16個だけです。ファイルディレクトリに合計
640のディレクトリエントリがある場合、合計640/16 = 40のディスクブロックを占有する必要があります。したがって、特定のファイル名に従ってディレクトリを取得するには、平均で320のディレクトリエントリを照会する必要があり、ディスクを平均20回起動する必要があります(ディスクI / Oごとに1ブロックを読み取ります)。

インデックスノードメカニズムが使用され、ファイル名が14Bを占め、インデックスノードポインタステーション2Bの場合、各ディスクブロックは64のディレクトリエントリを格納でき、平均して、320/64 = 5のディスクブロックのみを読み取って取得できます。ファイル名によるディレクトリ。明らかに、これによりファイルの取得速度が大幅に向上します。

ファイルの物理的構造

メモリページングと同様に、ディスク内のストレージユニットも「ブロック/ディスクブロック/物理
ブロック」に分割されます。多くのオペレーティングシステムでは、ディスクブロックのサイズはメモリブロックとページのサイズと同じです。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
では、ファイルがディスク上で小さなディスクブロックに分割されるときに、これらのディスクブロックはどのように割り当てられますか?

リンク割り当て1つずつ暗黙のリンク

ここに画像の説明を挿入します
ユーザーがアクセスする論理ブロック番号iを指定すると、オペレーティングシステムはファイルに対応するディレクトリエントリ(FCB)を見つけます。

ディレクトリエントリから開始ブロック番号(つまり、ブロック番号o)を見つけ、論理ブロック番号0をメモリに読み込み、論理ブロック番号1に格納されている物理ブロック番号を確認してから、論理ブロック番号1を読み取り、番号2ロジックブロックの保存場所...など。
したがって、論理ブロックiを読み取るには、合計i +1のディスクI / Oが必要です。

結論:チェーン割り当て(暗黙的なリンク)を使用するファイルは、ランダムアクセスではなく、シーケンシャルアクセスのみをサポートし、検索効率は低くなります。さらに、次のディスクブロックへのポインタも少量のストレージスペースを消費します。

暗黙リンクのリンク配布方式を採用しており、ファイル展開に非常に便利です。さらに、すべての空きディスクブロックを使用でき、断片化の問題はなく、外部メモリの使用率が高くなります。

リンク割り当て1-明示的なリンク

ファイルの物理ブロックをリンクするために使用されるポインターは、テーブルに明示的に格納されます。つまり、ファイルアロケーションテーブル(FAT、ファイルアロケーションテーブル)
ここに画像の説明を挿入します
は、新しく作成されたファイル「aaa」がディスクブロック2> 5> 0→1に
順次格納され、新しく作成されたファイル「bbb」が順次格納されることを前提としています。ディスクブロック4> 23> 3
注:1つのディスクに設定されるFATは1つだけです。起動時に、FATをメモリに読み込み、メモリに残します。FATの各エントリは物理的かつ継続的に保存され、各エントリの長さは同じであるため、「物理ブロック番号」フィールドは暗黙的である可能性があります。

ユーザーがアクセスする論理ブロック番号iを指定すると、オペレーティングシステムはファイルに対応するディレクトリエントリ(FCB)を見つけます。 ここに画像の説明を挿入します

ディレクトリエントリから開始ブロック番号を見つけます。i> oの場合は、メモリ内のファイルアロケーションテーブルFATを照会してから、論理ブロックiに対応する物理ブロック番号を見つけます。論理ブロック番号を物理ブロック番号に変換するプロセスでは、ディスク読み取り操作は必要ありません。
結論:チェーン割り当て(明示的リンク)を使用するファイルは、シーケンシャルアクセスとランダムアクセスをサポートします(論理ブロックiにアクセスする場合は、前の論理ブロック0〜i-1に順番にアクセスする必要はありません)。ブロック番号変換の場合、ディスクへのアクセスは必要ないため、アクセス速度は暗黙的なリンクに比べてはるかに高速です。
明らかに、明示的なリンクは外部フラグメントを生成せず、ファイルは簡単に拡張できます。

インデックスの割り当て

インデックスの割り当てにより、ファイルを各ディスクブロックに個別に割り当てることができます。システムはファイルごとにインデックステーブルを作成します。インデックステーブルは、ファイルの各論理ブロックに対応する物理ブロックを記録します(インデックステーブルの機能はそれに似ています)。メモリ管理で。ページテーブル-論理ページから物理ページへのマッピング関係を確立します)。インデックステーブルに格納されているディスクブロックは、インデックスブロックと呼ばれます。ファイルデータが格納されているディスクブロックをデータブロックと呼びます。
ここに画像の説明を挿入します
新たに作成したファイル「aaa」のデータをディスクブロック2> 5→13> 9に順次格納するとします。ディスクブロックNo.7を「aaa」のインデックスブロックとし、インデックステーブルの内容はインデックスブロックに格納されます。

注:明示的リンクのチェーン割り当て方法では、ファイルアロケーションテーブルFATは1つのディスクに対応します。インデックス割り当て方式では、インデックステーブルは1つのファイルに対応します。

インデックステーブルの格納場所は、ディレクトリエントリから知ることができ、外部ストレージからメモリにインデックステーブルを読み込み、インデックステーブルを検索して、論理ブロックNo.iの場所のみを外部ストレージに格納します。

インデックス割り当て方法がランダムアクセスをサポートできることがわかります。ファイル拡張も非常に簡単に実装できます(ファイルに空きブロックを割り当て、インデックステーブルエントリを追加するだけです)が、インデックステーブルは一定量のストレージスペースを占有する必要があります

ファイルのサイズが256ブロックを超える場合、1つのディスクブロックがファイルのインデックステーブル全体に収まらない場合、この問題を解決するにはどうすればよいですか?

マルチレベルインデックス

①リンク方式:インデックステーブルが大きすぎて1つのインデックスブロックが収まらない場合は、複数のインデックスブロックをリンクして格納できます。
ここに画像の説明を挿入します
ディスクブロックサイズが1KBで、1つのインデックスエントリが4Bを占めると仮定すると、1つのディスクブロックは256のインデックスエントリしか格納できません。
ファイルのサイズが256256KB = 65,536 KB = 64MBの場合
、ファイルには合計256
256ブロックがあり、これは256 * 256インデックス項目に対応し、ストレージには256インデックスブロックが必要です。これらのインデックスブロックは、リンクスキーム。
ファイルの最後の論理ブロックにアクセスする場合は、最後のインデックスブロック(256番目のインデックスブロック)を見つける必要があり、各インデックスブロックはポインターでリンクされているため、最初の255個のインデックスを順番に読み取る必要があります。
これは明らかに非常に非効率的です。それを解決する方法は?

②多層インデックス:多層インデックスを確立します(原理はマルチレベルページテーブルに似ています)。第1レベルのインデックスブロックが第2レベルのインデックスブロックを指すようにします。ファイルサイズの要件に応じて、第3層と第4層のインデックスブロックを作成することもできます。

ここに画像の説明を挿入します
ディスクブロックサイズが1KBで、1つのインデックスエントリが4Bを占めると仮定すると、1つのディスクブロックは256のインデックスエントリしか格納できません。
ファイルが2レベルのインデックスを使用する場合、ファイルの最大長は最大256 256 1KB = 65,536 KB = 64MBになります。
論理ブロック番号に応じて、インデックステーブルのどのエントリを検索するかを計算できます。 。たとえば、論理ブロック
1026、1026 / 256 = 4、1026%256 = 2にアクセスする場合
、最初にプライマリインデックステーブルをメモリにロードし、4番目のエントリをクエリして、対応するセカンダリインデックステーブルをロードできます。次に、セカンダリインデックステーブルの2番目のエントリをクエリして、1026番の論理ブロックに格納されているディスクブロック番号を確認します。ターゲットデータブロックにアクセスするには、3つのディスクI / Oが必要です。

ファイル共有

注:複数のユーザーが同じファイルを共有します。つまり、システムにはファイルデータの「コピー」が1つだけあります。また、ユーザーがファイルのデータを変更している限り、他のユーザーもファイルデータの変更を確認できます。
複数のユーザーが同じファイルを「コピー」した場合、システムにはファイルデータの「複数のコピー」があります。ユーザーの1人が自分のファイルデータを変更しましたが、他のユーザーのファイルデータには影響しません。

インデックスノードに基づく共有方法(ハードリンク)

知識のレビュー:インデックスノードは、ファイルカタログのスリム化のための戦略です。ファイルを取得するときに必要なのはファイル名だけなので、ファイル名以外の情報をインデックスノードに配置できます。このように、ディレクトリエントリには、ファイル名とインデックスノードポインタを含めるだけで済みます。

リンクカウント変数countは、このインデックスノードにリンクされているユーザーディレクトリエントリの数を示すためにインデックスノードに設定されます。
count = 2の場合、この時点でインデックスノードに接続されているユーザーディレクトリリンクが2つあるか、このファイルを共有しているユーザーが2人いることを意味します。
ここに画像の説明を挿入します

シンボリックチェーンベースの共有方法(ソフトリンク)

User3が「ccc」にアクセスすると、オペレーティングシステムはファイル「ccc」がリンクタイプのファイルに属していると判断し、記録されたパスに従ってディレクトリをレイヤーごとに検索し、最後に「aaa」エントリを見つけます。 User1のディレクトリテーブルにあるため、ファイル1のインデックスノードが見つかります。
ここに画像の説明を挿入します

ファイル保護

パスワード保護

ファイルに「パスワード」を設定します(例:abc112233)。ユーザーは、ファイルへのアクセスを要求するときに「パスワード」を入力する必要があります。
パスワードは通常、ファイルに対応するFCBまたは
インデックスノードに保存されますユーザーはファイルにアクセスする前に「パスワード」を入力する必要があります。オペレーティングシステムは、ユーザーが提供したパスワードとFCBに保存されているパスワードを比較します。正しい場合、ユーザーはファイルにアクセスできます
。時間のオーバーヘッドまた、非常に小さいです。短所:正しい「パスワード」がシステム内に保存されているため、安全性が十分ではありません。

暗号化保護

特定の「パスワード」を使用してファイルを暗号化します。ファイルにアクセスするときは、ファイルを正しく復号化するために正しい「パスワード」を指定する必要があります。
例:最も単純な暗号化アルゴリズムの1つ
-XOR暗号化。暗号化/復号化に使用される「パスワード」が「01001」であると仮定します。

ここに画像の説明を挿入します
長所:機密性が
高く、システムに「パスワード」を保存する必要がない短所:エンコード/デコード、または暗号化/復号化には、一定の時間がかかります。

アクセス制御

各ファイルのFCB(またはインデックスノード)にアクセス制御リスト(アクセス制御リスト、ACL)を追加します。このテーブルには、各ユーザーがファイルに対して実行できる操作が記録されます。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
各ファイルのFCB(またはインデックスノード)にアクセス制御リスト(アクセス制御リスト、ACL)を追加します。この表には、各ユーザーがファイルに対して実行できる操作が記録されています。
簡略化されたアクセスリスト:「グループ」を単位として使用して、各「グループ」のユーザーがファイルに対して実行できる操作をマークします。
例:システム管理者、ファイル所有者、ファイル所有者のパートナー、およびその他のユーザーのいくつかのグループに分けられます。
ユーザーがファイルにアクセスする場合、システムは、ユーザーが属するグループに対応するアクセス権限があるかどうかを確認します。

ここに画像の説明を挿入します

ファイルシステム階層

ここに画像の説明を挿入します
例を使用して、ファイルシステムの階層構造を記憶します。
ユーザーがファイル「D:/workingdirectory/studentinformation.xlsx」の最後の100レコードを削除するように要求したとします。1.1。ユーザーは、オペレーティングシステム-ユーザーインターフェイス
2によって提供されるインターフェイスを介して上記の要求を送信する必要がありますユーザーが提供するのはファイルのストレージパスであるため、オペレーティングシステムは、対応するディレクトリアイテム(ファイルディレクトリシステム
3)を見つけるために、ディレクトリをレイヤーごとに検索する必要がありますユーザーごとにファイルの操作権限が異なるため、セキュリティを確保するためには、ユーザーがアクセス権限を持っているかどうかを確認する必要があります-アクセス制御モジュール(アクセス制御検証層)
4。ユーザーのアクセス権限を確認した後、ユーザーから提供された「レコード番号」を対応する論理アドレス(論理ファイルシステムとファイル情報バッファー
5)に変換する必要がありますターゲットレコードに対応する論理アドレスを知った後、それを実際の物理アドレス(物理ファイルシステム6)に変換する必要があります。このレコードを削除するには、ディスクデバイス(デバイス管理プログラムモジュール
7)に要求を行う必要がありますこれらのレコードを削除した後、いくつかのディスクブロックが空いているので、これらの空いているディスクブロックをリサイクルする必要があります-補助割り当てモジュール

おすすめ

転載: blog.csdn.net/Shangxingya/article/details/113810781