ラウンドロビン
各プロセス、一般設定10ミリ秒にタイムスライスが割り当てられ、各プロセスがあまりにも空腹ではありませんが、平均所要時間は、比較的大きく、プロセススイッチングの追加のオーバーヘッドがあることを、この性を保証
マルチレベルのフィードバックキュー
、多くのレディキューがあり、その後の使用は、より柔軟な、異なるスケジューリングアルゴリズムは同じではありません使用してキューされていること
リアルタイムスケジューリング
開始時刻を定義するための各タスク、およびこのセクションでは、このタスクを完了するための期限
それは、ハードとソフトの制限時間に分け
つらい時は、重大な結果を欠場していない場合は、最悪の場合には完了しなければなりません
要件を満たすことができないソフトの進歩は、その後、ライン上の要件を満たすために可能な限り減らします
同期の問題:
実際の例では:
冷蔵庫のパン
Aはパンを食べます
見つけるために冷蔵庫に移動します
Bにはパンが食べないことが分かっ
冷蔵庫を購入して行きます
ノー発見
購入
これは、コンピュータの中に、繰り返しの多くのものを作ることは計り知れないだろうならば、パンの重複を購入して、練習を検討します
ここでは、同期のコンピュータが含まれ、これらの操作はアトミック操作として定義され、それが重要である、ローカルエリアその一回のだけアクセス中
達成するための3つの重要な分野があります。
破壊されたハードウェアで直接無効割り込みが無効になっている1、次いでスイッチングプロセスは、システムが停止され、唯一の訪問を達成するように、生成することができないが、飢餓に他のプロセスを引き起こす可能性が
2、いくつかの共有変数を使用してオペレーティング・ソフトウェア
アトミック操作に3、ハイレベルの抽象
セマフォ
リソースの数を表し、二つの操作P、Vであります
P:私は待機状態で、その後、リソース-1 0 <場合、リソースに代わって適用しています
V:リソースの解放を代表し、リソース+1、<= 0の場合が、待機状態の誰かに代わってアプリケーション上で、その後、私はそれをウェイクアップするために行ってきました
INT NUM = 3 ; P(){ NUM - ; IF(NUM < 0 ){ 入るこのキューを追加し 、このリソースブロック待ち詰まっ } } V(){ NUM ++ ; IF(NUM <= 0 ){ キューから削除削除 つのスレッドを覚ますウェイクアップ } }
クラシック質問:プロデューサー - 消費者
要件:バケットが保持できるn個のアイテムは、生産者がものづくりに引き続き、消費者はで物事を取るために続けますが、バケツがいっぱいになった場合にはバケットの操作だけで、生産者は待つ必要があり、同じことを行うには時間がかかることがバケットが空である場合、消費者は待つ必要があります
int型 X = 1。 ; // タブ操作すると同時に代表ミューテックス、たった一人 のint Y = 0を ; // 数値のものが現在のバケットを表す int型 Z = N-を; // 代表バケット今残りのスペースの 製品( ){ // メーカー P(Z)、 P(X); 物事を作る V(x)は、 V(Y); } Custmer(){ P(Y)、 P(X); 何か得る V(X)を、 V(Z); }
チューブ:
チューブはまた、重要な地域のための方法である、それはいくつかの理由で、アカウントに現在のスレッドの待機時間を取って、操作の過程で、この時間は、重要な領域が設定され、実行前に他のプロセスに、ロックを放棄しますそこに待っているキュー
待って():その後、彼らの種に参加するキュー待ち、そしてチューブのウェイターやリリースに相互に排他的アクセスを覚まします
信号():スレッドがキューきっかけに待機します
プロデューサーの形でチューブ - 消費者問題
ロックロック INTの COUNT = 0 のint X、Y // 数および空間表すもの 製品(){ ロック - 獲得を(); 一方、(COUNT == N-){ notFull.wait( &ロック) // 自身がキューに追加 } バッファCに追加する。 COUNT ++ notEmpty.Signal(); ロック - > リリース } CUTOMER(){ ロック - > 獲得() 一方、(COUNT == 0 ) notEmpty.Wait( &ロック); 削除C からの バッファ 数 - notFull.Signal ロック - > リリース() }
食事する哲学者
要件:哲学者個々のnダイニングnがそれぞれフォーク、両側のみんなの周りの円の中にフォークであり、各哲学者は2つのこと、思考と食べて、その左右を取る必要がありますフォークを食べることを行うことができます整然とした実行が続くか、食べます
ここでは明らかにフォークミューテックスがあります
セマフォ練習
INTチャ[ 5 ] // 5フォーク ながら(1 ){ (考える)// 哲学反射 、P(チャ[I]) ([IチャP + 1 ]) EAT() // 着座 Vを(CHA [I]); V(チャ[I + 1 ]) } // 次いで、同時に各哲学者の手が左フォークを取り、その後、権利を持っていない場合、それらはリソースを解放することができない、でデッドロック ながら(1 ){ 思うの()// 哲学反射 P(フラグに)// クリティカル領域 P(チャ[I]); P(チャ[I + 。1 ]) EAT() // 着座 V(チャ[I]); V(チャ[I + 1 ]) V(のフラグ); } // この方法はあり得るが後に、しかし重要な領域の付加、明らかに5二人が同時に缶食事が、これは一人だけになった 一方で(1 ){ 考える()// 哲学考察 IF(Iの%2 == 0 ){ P(チャ[I]); P(チャ[I + 1 ]) } 他{ P(チャ[I + 1 ]); P(チャ[I]); } EAT() // ダイニング V(チャ[I])は、 V(チャ[I + 1 ]) } デッドロックの第一の実施形態のみ異なる人々の制御は、異なる方向をとる限り、左側に表示される時間を取らなければならないようにしませんこれが起こります
リーダー - ライター
要件:読者は、複数のアクセス権を持っている一件のだけの書き込みを書き込み、読み込み、書き込みを同時に行うことができないことができ
デッドロックの概念:
デッドロック状態にあるアプリケーションリソースの過程にあるそれらもまた、他の側に自分のリソースを保持
デッドロックのために必要な4つの条件:デッドロックが4の確立中に発生します
1、相互に排他的:これらのリソースは、相互に排他的であることができるが、一つだけがアクセスできなければなりません
2、要求と維持:彼らは、アプリケーション内のリソースと国家の資源を持っています
3、非プリエンプティブ:のみのプロセスが自分のリソースを解放するために、独自のイニシアチブで切れることができ奪うことはできません
図4に示すように、ループ待機:他のアプリケーションにリソースB-> C-> A> A-環を形成し、ここであり
デッドロック
デッドロックの防止:必要な4つの条件がある限り1が破壊されて、それがデッドロック防止を落ちる、デッドロックを構成し、その4つの方法があります
デッドロック回避:現在のリソース割り当てのデッドロックが発生した場合、アプリケーションがリソースの配分を受けないであろう、そして安全性が銀行家のアルゴリズムシーケンスにより得ることができます
デッドロックの検出と回復