オペレーティング システムに関する古典的な質問タイプ: デッドロック回避のためのバンカー アルゴリズム、継続的な割り当て管理のための動的パーティション割り当て、およびページ置換アルゴリズム


1. バンカーのアルゴリズム

1.1 目的

バンカーのアルゴリズムはデッドロックを回避するために使用され、最も有名なデッドロック回避アルゴリズムです。

リソースの争奪不適切な工程進行順序により、行き詰まりを引き起こす

いわゆるデッドロックとは、複数のプロセスが動作中にリソースを奪い合うことによって発生するデッドロックのことで、プロセスがデッドロックに陥った場合、外部からの力がなければ先に進むことができなくなります。

  • デッドロックの必要条件:
    ① 相互排他: プロセスが割り当てられたリソースの排他制御を必要とする、つまり、一定時間内に 1 つのプロセスのみがリソースを占有する状態
    ② リクエストアンドホールド: リソースの要求によりプロセスがブロックされた場合、取得したリソースを保持する。
    ③ 剥奪なし: プロセスが獲得したリソースは、使い果たされるまで剥奪できず、使い切った場合にのみ解放できる。
    ④ ループ待機: デッドロックが発生した場合、プロセスが存在する必要がある –リソースの循環チェーン

1.2 データ構造

  • (1) 利用可能なリソース ベクトルは、
    m 個の要素を含む配列であり、各要素 (Available[i]) は i 番目のカテゴリを表します。利用可能なリソースの数、その初期値はシステム内に構成されているこのタイプのリソースの数であり、その値はこのタイプのリソースの割り当てとリサイクルに応じて動的に変化します [Available[j] はシステム内のタイプ j リソースの数を表します
    ]
  • (2) 最大需要行列 Max は、システム内の各プロセスによる m 種類のリソースの需要を
    定義する n×m 行列です。総需要
    [Max[i][j] は、i 番目のプロセスによる j タイプのリソースの総需要を表します]
  • (3) 割り当てマトリックス 割り当て
    これも nxm マトリックスであり、システム内の各タイプのリソースを定義します。現在割り当てられている各プロセスに与えられるリソースの数
    [Allocation[i][j]は、プロセスiが現在取得しているj番目の種類のリソースの数を表す。
  • (4) デマンド行列 Need
    も各プロセスを表す n×m 行列ですまだ必要さまざまな種類のリソースの数
    [Need[i][j] は、プロセス i にも j 番目の種類のリソースの数が必要であることを示します]

上記の nxm 行列の間には次の関係があります:
         Need[i][j] = Max[i][j] - assign[i][j]

1.3 アルゴリズムの説明

リソース割り当てアルゴリズム
ここに画像の説明を挿入します
セキュリティ アルゴリズム(つまり、上図のリソース割り当てアルゴリズムのセキュリティ チェック部分)
ここに画像の説明を挿入します

1.4 記述例

ここに画像の説明を挿入します
①T0は安全ですか?
ここに画像の説明を挿入します

②時刻 T0 以降、プロセス P2 がリソース要求 Request 2 (1,0,1) を発行した場合、システムはそれにリソースを割り当てることができますか?
ここに画像の説明を挿入します

③プロセス P2 がリソースを申請した後、P1 がリソース要求 Request 1 (1,0,1) を発行した場合、システムはそれにリソースを割り当てることができますか?
④プロセス P1 がリソースを申請した後、P3 がリソース要求 Request 3 (0,0,1) を発行した場合、システムはそれにリソースを割り当てることができますか?
ここに画像の説明を挿入します


2. 継続的な割当管理方法

連続割り当て方式、つまりユーザープログラムに連続したメモリ空間を割り当てる方式

2.1 分類

単一の連続した割り当て

最も単純なストレージ管理方法。シングルユーザーおよびシングルタスクのオペレーティング システムでのみ使用できます。

メモリをシステム領域(OS に割り当てられるローエンド メモリ) とユーザー領域(ユーザーに割り当てられるハイエンド メモリ) に分割します。

静的割り当てが採用されています。つまり、ジョブがメモリに入ると、メモリが解放される前にジョブの実行が完了するまで待機する必要があります。

単一の連続した割り当てにより内部断片化が発生する

固定パーティション割り当て

マルチプログラムを実行できる最も初期のストレージ管理方式

メモリ空間をいくつかの固定サイズのパーティションに分割します。1 つの領域を占有する OS を除き、残りのパーティションにはプログラムがロードされます。パーティションのサイズは等しくなくてもかまいませんが、事前に決定する必要があり、途中で変更することはできません実行時、つまりパーティションのサイズと境界は実行時に変更できません

固定パーティション割り当てでは、通常、プログラムは静的再配置を使用してメモリにロードされます。ユーザー プログラムがメモリにロードされる場合、メモリ割り当てプログラムはパーティション記述テーブルを取得し、要件を満たしているがまだ割り当てられていないパーティションをテーブル内で見つけます。割り当てられました。このプログラムに割り当てられました
ここに画像の説明を挿入します

メインメモリ領域を複数のプロセスで共有することができず、使用率が低く、内部断片化が発生します。

動的パーティション割り当て

可変パーティション割り当てとも呼ばれ、メモリを動的に分割するパーティショニング方法です。

メモリは事前にパーティションに分割されるのではなく、ジョブがメモリに入ると、ジョブのサイズに応じて動的にパーティションが作成され、パーティションのサイズはジョブのニーズに正確に適合します。システム内のパーティションのサイズは可変であり、パーティションの数も可変です

  • パーティション割り当てのデータ構造:
    ① フリー パーティション テーブル
    ② フリー パーティション チェーン

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

動的パーティション割り当てアルゴリズムについては、2.2 を参照してください。


2.2 ☆動的パーティション割り当てアルゴリズム

第一適応アルゴリズム FF

FF:ファーストフィット

空きパーティション (チェーン) はアドレスの昇順に配置されており、メモリを割り当てる場合は、要件を満たす最初の空きパーティションが見つかる
まで、空きパーティション テーブル/チェーン ヘッドから順に検索します次に、ジョブのサイズに応じて、メモリ空間がパーティションからリクエスタに割り当てられ、残りの空きパーティションは空きパーティション テーブル/チェーンに残ります。

低アドレス空間の使用を優先しますが、低アドレス空間が複数回分割されると、外部フラグメンテーションが発生します。

次回適応アルゴリズムNF

NF:ネクストフィット

巡回第一適応アルゴリズムとも呼ばれます。つまり、第一適応アルゴリズムに基づいて、キューは循環キューに変更されます (空きパーティション (チェーン) は引き続きアドレスの増加順に配置されます) 前回見つかった空きパーティションはパーティション検索です

均等に分散されていますが、大きな空きパーティションがありません

ベストフィットアルゴリズムBF

BF:ベストフィット

空きパーティション テーブル/チェーンは、容量の昇順に配置されます。メモリを割り当てるときは、サイズ要件を満たす最初の空きパーティションが見つかるまで、空きパーティション テーブル/チェーンの先頭から順に検索します。

外部断片化は非常に小さいため、いつでもジョブに最適なパーティションに割り当てることができ、大きなパーティションは予約されますが、使用が困難な大量の断片化された領域が作成されます。

最悪適合アルゴリズム WF

WF:最悪のフィット感

空きパーティション テーブル/チェーンは、容量の降順に配置されます。メモリを割り当てるとき、空きパーティション テーブル/チェーンは、それより大きい最初の空きパーティションが見つかるまで、先頭から順に検索されます。残りの空きパーティションは、空きパーティション テーブルに残ります。 /鎖

割り当て後の残りのスペースは比較的大きく、次回の使用に適していますが、大きなスペースは使い果たされてしまいます。

例の説明

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


3. ページ置換アルゴリズム

3.1 最適置換アルゴリズム OPT

処理のページ番号参照文字列が事前にわかっている場合には、将来的に使用されなくなる、または遅くとも将来使用されるページはその都度削除される。

最適置換アルゴリズムは最も優れており、ページフォールト率が最も低くなりますが、実際の運用では、将来参照されるすべてのページ情報を事前に知ることができないことが多く、実装できない場合があります。他の置換アルゴリズムの長所と短所を測定するための基準として使用されます。

3.2 先入れ先出しアルゴリズム FIFO

最も単純なページ置換アルゴリズム。毎回最初にメモリに入るページを常に削除します。

3.3 最も最近使用されていないアルゴリズム LRU

長期間使用されていないページを選択して削除します。

このアルゴリズムはレジスタ組み合わせスタックを使用して実装でき、性能が良く、一般的に使用されているページ置換アルゴリズムの中で最も最適な置換アルゴリズムに近いアルゴリズムです。

3.4 例の説明

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

おすすめ

転載: blog.csdn.net/m0_50609545/article/details/122300305
おすすめ