web-dev-qa-db-ja.com

クリティカルセクションでの進行状況と待機時間は?

私は、ピーターB.ガルビンによるオペレーティングシステムの概念からクリティカルセクションの問題を読んでいました。それによると

1)Progress is:クリティカルセクションで実行されているプロセスがなく、一部のプロセスがクリティカルセクションに入ることを希望する場合、残りのセクションで実行されていないプロセスのみが参加するかどうかの決定に参加できます次に重要なセクションであり、この選択を無期限に延期することはできません。

そして

2)制限付き待機は:プロセスがクリティカルセクションへの入力を要求した後、その要求の前に、他のプロセスがクリティカルセクションに入ることができる回数に制限があります。付与されます。

どちらの場合も著者が何を言いたいのか理解していない。

この定義に関連する適切な例を挙げて、理解してもらえますか。

ありがとうございました。

31

最初に、いくつかの用語を紹介します。 クリティカルセクション(CS)は、最大1つのプロセスで同時に実行できる一連の命令です。クリティカルセクションを使用する場合、コードは次のセクションに分類できます。

// Some arbitrary code (such as initialization).

EnterCriticalSection(cs);

// The code that constitutes the CS.
// Only one process can be executing this code at the same time. 

LeaveCriticalSection(cs);

// Some arbitrary code. This is called the remainder section.

最初のセクションには、初期化コードなどのコードが含まれています。そのセクションの名前はありません。 2番目のセクションは、CSを入力しようとするコードです。 3番目のセクションは、CS自体です。 4番目のセクションは、クリティカルセクションから出るコードです。 5番目の最後のセクションは、剰余セクションと呼ばれ、任意のコードを含めることができます。 CS自体はプロセス間で異なる可能性があることに注意してください(たとえば、クライアントから要求を受信して​​キューに挿入するプロセスと、これらの要求を処理する別のプロセスを検討してください)。

クリティカルセクションの実装が適切に機能することを確認するには、3つの条件を満たす必要があります。あなたはそれらの2つに言及しました(私は次に説明します)。 3番目は相互排除であり、これは明らかに重要です。相互排除はCSと休暇セクションにのみ適用されることに注意してください。ただし、他の3つのセクションは排他的ではありません。

最初の条件はprogressです。この状態の目的は、何らかのプロセスが現在CSにあり、何らかの作業を行っていることを確認することです。または、CSに入ろうとするプロセスが少なくとも1つある場合は、何らかのプロセスを実行します。どちらの場合も、いくつかの作業が完了しているため、すべてのプロセスが全体的に進歩しています。

進行状況:プロセスがクリティカルセクションで実行されておらず、一部のプロセスがクリティカルセクションに入ることを希望する場合、残りのセクションで実行されていないプロセスのみが、次にクリティカルセクションに入るプロセスの決定に参加でき、この選択はできません無期限に延期。

この定義文を文ごとに理解しましょう。

クリティカルセクションで実行されているプロセスがない場合

クリティカルセクションで実行中のプロセスがある場合(明示的には述べられていませんが、これにはleaveセクションも含まれます)、これは何らかの作業が行われていることを意味します。だから私たちは進歩しています。それ以外の場合、そうでない場合...

また、一部のプロセスはクリティカルセクションに入ることを望んでいます。

プロセスがクリティカルセクションに入ることを望んでいない場合、それ以上の作業はありません。それ以外の場合、クリティカルセクションに入ることを希望するプロセスが少なくとも1つある場合...

その後、残りのセクションで実行されていないプロセスのみ

これは、最初の2つのセクションのいずれかで実行されているプロセスについて話していることを意味します(クリティカルセクションまたは離脱セクションで実行されているプロセスはありません)。

次に重要なセクションに入るかどうかの決定に参加できます。

CSを入力したいプロセスが少なくとも1つあるため、何らかの方法でそれらの1つを選択してCSを入力する必要があります。しかし、誰がこの決定を下すのでしょうか?重要なセクションに入るための許可をすでに要求したプロセスには、この決定を下すことに参加する権利があります。さらに、がCSの入力を希望しているが、その許可をまだ要求していないプロセス(これは、最初のセクション)にも、この決定を下すことに参加する権利があります。

また、この選択を無期限に延期することはできません。

これは、CSに入るプロセスを選択するのに限られた時間がかかることを示しています。特に、 デッドロックまたはライブロック は発生しません。そのため、この限られた時間が経過すると、プロセスはCSに入り、何らかの作業を行い、それによって進行します。

次に、最後の条件、つまりbounded waitingについて説明します。この条件の目的は、すべてのプロセスが実際にクリティカルセクションに入る機会を得て、プロセス 永久に飢えている にならないようにすることです。ただし、この条件も進歩も公平性を保証するものではないことに注意してください。 CSの実装は公平である必要はありません。

制限付き待機:プロセスがクリティカルセクションへの入力を要求した後、そのリクエストが許可されるまでに、他のプロセスがクリティカルセクションに入ることができる回数に制限があります。

この定義文を最後の文から始めて文ごとに理解しましょう。

プロセスがクリティカルセクションに入るよう要求した後、その要求が許可される前。

言い換えれば、CSの入力を要求したがまだ入力していないプロセスがある場合。このプロセスをPと呼びましょう。

他のプロセスがクリティカルセクションに入ることを許可される回数には制限があります。

PがCSに入るのを待っている間、他のプロセスも同様に待っている可能性があり、一部のプロセスはCSで実行されています。 CSを離れるとき、CSに入るために他のプロセスを選択する必要があります。これは、Pである場合とそうでない場合があります。P以外のプロセスが選択されたとします。この状況は何度も発生する可能性があります。つまり、他のプロセスはCSに入る機会を得ていますが、Pを獲得することはありません。進行は行われていますが、Pではなく他のプロセスによって行われていることに注意してください。飢starを防ぐには、Pが最終的にCSに入ることを保証する必要があります。これを行うには、他のプロセスがCSに入る回数を制限する必要があります。この場合、Pは間違いなくCSを入力する機会を得ます。

CSの定義は一般化できるので、Nが正の整数であるクリティカルセクションで最大でNプロセスが実行されることに言及したいと思います。また、リーダーライターのクリティカルセクションのバリエーションもあります。

89
Hadi Brais

相互排除

どの時点でもクリティカルセクション内に2つのプロセスを同時に存在させることはできません。1つのプロセスのみがいつでもクリティカルセクションに入ることができます。

進行状況の画像:

Progress

進捗状況

クリティカルセクションの外部で実行されているプロセスは、実際にはクリティカルセクションが空いている場合に、他の関心のあるプロセスがそのクリティカルセクションに入ることをブロックしてはなりません。

制限付き待機

プロセスがクリティカルセクションに入るまで永遠に待つ必要はありません。クリティカルセクションに入る機会を得るには境界があるはずです。制限された待機が満たされない場合、飢starの可能性があります。


H/Wまたは処理速度に関連する仮定はありません。

16
Prasann Barot

全体として、クリティカルセクションの問題の解決策は、次の3つの条件を満たす必要があります。

  1. 相互排除:各プロセスの共有メモリへの排他的アクセス。クリティカルセクションには、常に1つのプロセスしか存在できません。

  2. 進行:プロセスがクリティカルセクションにない場合、および1つ以上のスレッドがクリティカルセクションを実行する場合、これらのスレッドのいずれかがクリティカルセクションに入ることを許可する必要があります。

  3. Bounded Waiting:プロセスがクリティカルセクションに入るためのリクエストを行った後、このプロセスのリクエストが許可される前に、クリティカルセクションに入ることができる他のプロセスの数に制限があります。そのため、制限に達した後、システムはプロセスにそのクリティカルセクションに入る許可を与える必要があります。この条件の目的は、プロセスが永遠に飢えないように、すべてのプロセスが実際にそのクリティカルセクションに入る機会を得ることを確認することです。

3
hexpheus

同期ソリューションが正しいかどうかを判断するための要件

1)。相互排除:-どの時点でも、クリティカルセクション内に存在するプロセスは1つだけです。

2)。進行状況:-クリティカルセクションの外側にあり、クリティカルセクションに入ることを望まないプロセス。そのようなプロセスは、他の関心のあるプロセスがクリティカルセクションに入ることを停止しないでください。プロセスが他の関心のあるプロセスを停止するために成功している場合、進行は保証されないか、保証されます。クリティカルセクションは無料です。

3)。制限付き待機:-クリティカルセクション外のプロセスの待機時間は制限する必要があります。

4)。アーキテクチャに中立:-ハードウェアに関する仮定はありません

1