オペレーティングシステム-プロデューサー-コンシューマーの問題哲学者食事の問題バンカーアルゴリズム

参照知識リンク

単一の生産者と消費者の問題同期を検討する

基本的な制約:

1.バッファがいっぱいの場合、プロデューサはデータを書き込むことができません

2.バッファが空の場合、コンシューマはデータを読み取ることができません

疑似コード:

dataはデータのセマフォを表し、空はバッファ数のセマフォを表します

2つのセマフォを使用して、最も単純な同期の問題を達成する

プロデューサー

产生一个数据; 
P(empty); 
将数据放入buf;
V(data); 

消費者

P(data);
从buf中取数据;
V(empty);
打印; 

 

 

マルチプロデューサー-コンシューマーの問題は相互排除を考慮します

上記の2つだけでは明らかに十分ではありません。相互排除を示すにはセマフォがもう1つ必要です:mutex:境界付きバッファが占有されているかどうかを示し、初期値は1です

新しい制約:

1.複数のプロデューサーがアドレスにデータを書き込む。アドレスは相互に排他的である必要がある

2.複数のコンシューマが同じアドレスからデータをフェッチするため、相互に排他的である必要があります

疑似コード:

 


生产者: 
产生一个数据; 
P(empty); 
P(metex);
将数据放入buf;
V(metux);
V(data); 


消费者 
P(data);
P(metux);
从buf中取数据;
V(metex);
V(empty);
消费; 

 

哲学者の食事の問題

Baidu Encyclopediaから

哲学者の食事の問題はこのように表現できます。5人の哲学者が丸いダイニングテーブルの周りに座って、食べるか考えるかの2つのうちの1つを行うと仮定します。彼らが食べるとき、彼らは考えるのをやめ、考えるとき食べるのをやめます。ダイニングテーブルの真ん中に大きなパスタのボウルがあり、2人の哲学者の間にはフォークがあります。1つのフォークでパスタを食べることは難しいため、哲学者は2つのフォークで食べる必要があると想定されています。左右の2つのフォークのみを使用できます。哲学者の食事の問題は、パスタとフォークの代わりに米と箸を使って説明されることがあります。これは、2つの箸を使って米を食べる必要があることは明らかです。

哲学者は決して話しません。これは非常に危険であり、デッドロックを引き起こす可能性があります。すべての哲学者は左手にフォークを持ち、常に右手にフォークを待ちます(またはその逆)。デッドロックがなくても、リソースが使い果たされる可能性があります。たとえば、哲学者が別のフォークを5分以上待つときに、フォークを手に置き、さらに5分間待ってから次の試行を行うとします。この戦略は、デッドロックを解消(システムは、常に次の状態へ移動します)、それはまだ可能である「場所取りのライブロックを。」5人の哲学者が同時にレストランに入り、同時に左側のフォークを拾うと、これらの哲学者は5分間待って、フォークを手に置き、さらに5分間待って、食事を取ります。フォーク。

実際のコンピューターの問題では、フォークの欠如は共有リソースの欠如と比較できます。一般的に使用されるコンピューターテクノロジはリソースロックです。これは、一度に1つのプログラムまたは1つのコードからのみリソースにアクセスできるようにするために使用されます。あるプログラムが使用したいリソースが別のプログラムによってロックされている場合、リソースがロック解除されるのを待ちます。ロックされたリソースが複数のプログラムに含まれる場合、場合によってはデッドロックが発生することがあります。たとえば、プログラムが2つのファイルにアクセスする必要がある場合、そのような2つのプログラムがそれぞれファイルをロックすると、どちらも相手が別のファイルのロックを解除するのを待っているため、これは起こりません。

 

解決策:(デッドロック防止)

  • 最大4人の哲学者が同時にテーブルに座ることができます。
  • 哲学者の両方の箸が利用可能な場合にのみ、彼はそれらを拾うことができます(クリティカルゾーンで2つのカウルを拾わなければなりません)。
  • 非対称ソリューションを使用します。1番の番号の哲学者は最初に左の箸、次に右の箸、2番の番号の哲学者は最初に右の箸、次に左の箸を拾いました。

 

 

バンカーアルゴリズム

Baidu Encyclopediaから

銀行では、ローンを申請する顧客の数は限られています。各顧客は、初めてローンを申請するときに、プロジェクトを完了するために必要な最大資金額を宣言する必要があります。すべてのローン要件を満たしている場合、顧客は期限内に返却する必要があります。銀行家は、顧客が申請したローンの数が最大数を超えない場合、顧客のニーズを満たすように努めるべきです。この説明では、銀行家はオペレーティングシステムのようなもので、資金はリソースであり、顧客はリソースを申請するプロセスと同等です。

バンカーアルゴリズムは、デッドロック回避するための最も代表的なアルゴリズムの1つですデッドロック回避する方法では、プロセスはリソースを動的に適用することができますが、システムは

バンカーアルゴリズム

システムはリソースを割り当てる前に、まず割り当てられたリソースのセキュリティを計算する必要があります。割り当てによってシステムが安全でない状態にならない場合は、割り当てます。それ以外の場合は待機します。銀行員のアルゴリズムを実装するために、システムはいくつかのデータ構造を設定する必要があります

銀行家のアルゴリズムを説明するには、最初にオペレーティングシステムの安全な状態と安全でない状態を説明する必要があります

安全なシーケンスとは、プロセスシーケンス{P1、...、Pn}が安全であることを指します。つまり、各プロセスPi(1≤i≤n)について、将来必要となるリソースの量は、システムおよびすべてのプロセスPjの現在の残りのリソースを超えません。 (j <i)現在占有されているリソースの合計。

 

 

リソースを合理的に割り当てることにより、デッドロックの回避を実現

問題の例を見てみましょう:

 

 

 

元の記事519件を公開 賞賛された69件 50,000件以上の表示

おすすめ

転載: blog.csdn.net/qq_41286356/article/details/105466043