プロセス管理(9) - 相互排除
危険域
クリティカルエリアとは何ですか
プログラムは、複数の同時処理を可能にしない断面(クリティカルセクション)または危険領域(クリティカル領域)の実装の重要な部分と呼ばれています
重要な領域は解決するために、追加のハードウェア方式では不可能です。このように、クリティカル領域は、共通データにアクセスするプログラムのその部分と呼ぶことができます。
なぜ我々は、クリティカル領域を設定する必要があります
並行処理、紛争の実行を防止するための時間は、または実行順序の両方につながる競争状態で2つの同時処理は、プログラムの実行エラーをもたらす、固定されていないからです。
例
デザイン研究プロセスPA、PB共有メモリMS。MSシステムは、ゾーン、ワークプロセスとデータ領域に分割されます。データ領域は、等しいサイズのブロックに分割され、各ブロックは両方のデータを有していてもよく、データが存在しなくてもよいです。システム領域は、主にS、データブロック記憶アドレス空間をスタックです。
データブロック処理の放出のための空のデータブロック、リリース(AD)を処理するためGetspace。スタックSが空でない場合、プロセスPAまたはPBは、任意の順序のリリースになると、データブロックを取得することができます。プロセスが同時に実行されると、getspaceまたはリリース(広告)は、必要な機能を果たす可能性が高いことができます
getspace:ローカルG始める
G←スタック[トップ]
トップ←トップ1
端を
放出(AD):開始
トップ←トップ+ 1
←スタック[トップ]広告
端
場合は、設定された時間t0、トップ= H0
実行の最初のリリース(広告):
T0:←トップトップトップ= H0 + + 1. 1。
Getspaceは、その後に行わ:
T1:G←スタック[トップ] G =スタック[H0 + 1];
T2:←トップトップトップ1- = H0。
より長い放出(AD)は、第2の文実行:
T3:[H0 + 1]スタック[トップ]←ADスタック←AD。
繰り返さ広告H0に空のブロックアドレスを解放するプロセスのリリース(広告)を呼び出します。Getspace呼び出したプロセスは、H0 + 1が未定義の値を取ることです。
間接的な制約
カテゴリ
これらは、異なるセットに異なる公開データによって実行されるクリティカルセクションを横断することはできません。
実施形態では、分割データスタックSに共通の重要な領域は、{getspace、放出を}設定されています。セットが呼び出されるクラス(クラス)
説明クラス
SP、getspace及び放出(AD)という名前の提供クラス{getspace、解放}クラスは、と言い換えることができます。
getspace:
when sp
do
getspce←stack[top]
top←top-1
od
release(ad):
when sp
do
top← top+1
stack [top]← ad
od
間接的な制約は何ですか
並行プロセスの実行速度に起因する公共資源のシェア間接的な制約間接的な制約と呼ばれ、。
どのような間接的な制約を引き起こしました
クリティカル領域での現象が同時プロセスに起因する公共資源のため、シェアのクロス実行を許可していません。
排他的
何が相互に排他的です
2は、リソースを共有するよりも、より多くの並行処理が同時に呼ばれるクリティカルセクション入ることはできません相互に排他的に
ピュアプロセス
ピュアクラスは、実行時に自身のコードの処理中に変更されないプロセスを意味します。
純粋のプロセスの長所と短所
利点:
純粋なプロセスを作成するプロセスは、プロセスを共有する複数のを容易にすることができます
短所:
効率は、多くの場合、ある程度の影響を受けているように、しかし、純粋なプロセスの準備には、それに応じて関連する変数と作業領域を処理する必要があります
相互排除の要件を満たすために、
、等しい競争する共通資源の権利とは無関係に、コマンドの最後のいずれかの重要な領域での任意の措置の条件を取ることなく、他の同時プロセスが重要な領域に入ることができます。1.各並行プロセス。
重要な領域での処理ではない2.同時処理は、それが他のプロセスを妨げないクリティカルセクション入る
プロセスの数3.並行処理が唯一のプロセスが入力できるように、クリティカルセクションを入力するために適用
4つの並行処理開始、プロセスのアプリケーションは重要なゾーンを入力する際の重要な領域に入るために、限られた時間のためにする必要があります
相互に排他的な実装
ロック
プロセスがクリティカルセクションに入ると、それはこれまでのクリティカル領域を終了するまで、それがクリティカルセクションをロックします。並行プロセスクリティカル領域、クリティカルセクションがロックされているかどうかを最初にテストを入力するように適用するとき。クリティカルセクションがロックされている場合、プロセスは重要な地域の重要な領域ロック解除後まで待つことが可能になります
ロックの問題が生じる:
1.ロック方法は、プロセス間の相互排除を達成することができるが、システムの信頼性および効率に影響を与える問題があります。
例えば、同時プロセスの多数のグループの場合、各プロセスは、クリティカル領域に入るように適用するときにロックされた位置で試験する必要があります。損失テスト・サイクル・ロックは、より多くのCPU時間をビット。
2.プロセス間ミューテックスのロック方法は、いくつかの場合において、不正になります
理由:プロセスがクリティカル領域に入る対応するロックビットをテストするためのロック・プロシージャを呼び出す独自のプロセスに依存することができます。テストのクリティカルセクションを入力することができ、各プロセスは、独自の判断に依存することです!
セマフォ
提案します
セマフォとPの下に記載された概念は、Vプリミティブは、オランダの科学者によって提案されているEWDijkstra
セマフォとは何ですか
セムセマフォは整数です
1.semゼロより大きい使用並行プロセスの代わりに、エンティティへの利用可能なリソースの数;
2.semがゼロではクリティカルセクションを使用するために待っているプロセスの数を示す未満です。
3.ミューテックスセマフォSEMの初期値はゼロより大きくなければなりません
セマフォを確立するプロセス
:手順に従ってセマフォを確立
表さ内蔵記述センス信号の1量を、
前記セマフォの初期値;
3.クリティカルセクションを使用するように待機しているそれぞれのプロセスを指すようにデータ構造を作成します。
PVプリミティブ
PVプリミティブは何ですか
PおよびVはVerhoogとPasserenオランダ語、英語同等のパスと増分の頭文字です
SEMはに関連して使用される公開リソースの重要な地域である信号の量。PプリミティブオペレーションそのセマフォSEMマイナス1、及びV一度プリミティブ操作ように1つのプラスSEMセマフォ。
プリミティブV
主な動作は、プリミティブオペレーションVである:
1.semプラス1;
2加算結果がゼロよりも大きい場合、プロセスは継続する;
3.加算結果がゼロ以下である場合、ウェイクアップ信号処理のために待ち行列からその後、プロセスのスケジューリングを続行するか、転送する元プロセスに戻ります
Pプリミティブ
1.semプラス1、
加算結果がゼロより大きい場合2.プロセスが継続され
、加算結果がゼロ以下である場合、ウェイクアップの処理を待って、待ち行列からの信号は、元の処理に戻る。3.継続するかします転送プロセススケジューリング
この問題を解決するためのPVプリミティブ
Pの使用は、V、プリミティブおよびセマフォ、相互排除を容易に並行プロセスの問題を解決しないが、ミューテックスは、問題を解決するときに表示されるロック方法を使用しても問題ができます。
PV相互排他プリミティブ条件
Pの使用は、V、プリミティブおよびセマフォ、相互排除を容易に並行プロセスの問題を解決しないが、ミューテックスは、問題を解決するときに表示されるロック方法を使用しても問題ができます。
PVプリミティブは、相互排他を記述する
SEMミューテックスは(0、-1)の範囲にある、提供されます。
SEM = 1は、いずれもクリティカル領域Sと呼ばれるクラスにPAとPBを処理しない表し;
SEMプロセスは、クリティカル領域Sと呼ばPA又はPBクラスに入ったことを= 0;
SEM = -1示す工程PA及びPB、プロセスこと別のプロセスがクリティカルセクションに入るのを待っている間には、重要なゾーンに入りました。