オペレーティングシステム(4)プロセス同期クリティカルリソースプロセス相互排除プロセス相互排除実現方法セマフォメカニズムプロデューサー消費者問題

プロセスの同期

1つは、プロセスの同期、相互排除

1.プロセス同期の概念

プロセスの同期とは、複数の同時実行プロセスの作業シーケンスを調整することです。

2.プロセスの相互排除の概念

重要なリソース:一定期間に1つのプロセスのみが使用できるリソース

プロセスの相互排除とは、プロセスが重要なリソースにアクセスするときに、重要なリソースにアクセスしたい別のプロセスが待機する必要があることを意味します。現在重要なリソースにアクセスしているプロセスのアクセスは終了します。リソースが解放された後、別のプロセスが重要なリソースにアクセスできます。 。

3.重要なリソースへのアクセス

重要なリソースへの排他的アクセスは、論理的に次の4つの部分に分けることができます。
ここに画像の説明を挿入

4.重要なリソースにアクセスする際に従うべき原則

(1)自由に入れて

クリティカルセクションが空いている場合、クリティカルセクションへの入力を要求するプロセスは、クリティカルセクションへの入力をすぐに許可できます。

(2)忙しい場合は待つ

既存のプロセスがクリティカルセクションに入ると、クリティカルセクションに入ろうとする他のプロセスは待機する必要があります

(3)限られた待機

アクセスを要求するプロセスの場合、限られた時間内にクリティカルセクションに入ることができることを確認する必要があります(飢えないようにするため)

(4)力を与えて待つ

プロセスがクリティカルエリアに入ることができない場合、プロセスがビジーウェイトになるのを防ぐために、プロセッサをすぐに解放する必要があります(プロセッサを占有してサイクルを実行させて進めることはできません。また、サイクルが実行されないことを知っておく必要があります。クリティカルエリアに入ることができず、プロセスが直接切り替えられた場合)

5.ナレッジレビュー

ここに画像の説明を挿入

第二に、相互に排他的なプロセスのソフトウェア実装方法

1.シングルサインオン方式

アイデア:プロセスがクリティカルセクションにアクセスした後、別のプロセスにクリティカルセクションを使用する許可を与えます。つまり、各プロセスがクリティカルセクションに入る許可は、別のプロセスによってのみ付与できます。

処理する:

ここに画像の説明を挿入

P0がクリティカルセクションにアクセスしたい場合、ターンは0になり、P1は常に⑤内を循環し、下降できません。P0にアクセスした後、ターンを1に変更すると、P1はループから飛び出し、P1はクリティカルセクションにアクセスできます。

注:
(1)アルゴリズムは、同時に1つのプロセスのみがクリティカルエリアにアクセスできることを認識できます。
(2)この時点でクリティカルエリアに入ることが許可されているプロセスがP0であり、P0がクリティカルエリアにアクセスしていない場合、現時点ではクリティカルエリアはアイドル状態ですが、P1の訪問は許可されていないため、シングルサインオン法の問題点は、フリーアクセスの原則に違反していることです。

2.ダブルマークファーストチェック方式

アイデア:ブール配列フラグ[]を設定します。配列内の各要素は、各プロセスがクリティカルエリアに入る必要があるかどうかをマークします。trueは入力することを意味し、falseは入力しないことを意味します。各プロセスは最初にそこにあるかどうかをチェックします。現在クリティカルエリアに入ろうとしている他のプロセスですクリティカルエリアに入ります。そうでない場合は、対応するフラグフラグ[i]をtrueに変更してから、クリティカルエリアへのアクセスを開始します。

処理する:

ここに画像の説明を挿入

既存の問題:P0プロセスが開始した後、P0をtrueに変更する前に、P1に切り替えます。P1は、他のプロセスがクリティカルエリアに入りたくないことを確認するため、P1がtrueに変更され、両方のプロセスがtrueになり、同時

注:
(1)ダブルサインの最初の検査方法の問題は次のとおりです:ビジーの違反、次に待機の原則
(2)出現の理由:入口エリアのチェックとロックが一度に行われない

3.ダブルサインポスト検査方法

アイデア:最初に法律の改正をダブルサインチェックし、最初にロックしてから、入力したい人は誰でも、直接trueに変更し、他のプロセスを気にしないでください。trueに変更した後、他のプロセスがあるかどうかを確認してください。アクセスしたい

処理する:
ここに画像の説明を挿入

存在的问题:P0想进入,P0改为true,在检查之前切换到P1,P1想进入,改为true,					  导致两个进程都为true,谁都无法访问临界区,产生饥饿现象

注:
(1)二重記号の事後チェック方法は、ビジー状態での待機の問題を解決しますが、アイドル状態で制限付きの待機を許可するという原則に違反します。
(2)出現の理由:エントリゾーンのチェックとロックはそうではありません。一度に完了

4.ピーターソンアルゴリズム

アイデア:ダブルマークのポストチェック方法の改訂。2つのプロセスがクリティカルエリアに入る場合は、相手が最初にクリティカルエリアにアクセスできるように主導権を握ることができます。

処理する:

ここに画像の説明を挿入
ゾーンに入り、3つのことを行います:1。積極的に戦う2.積極的に謙虚に3.対戦相手をチェックする

注:
ピーターソンのアルゴリズムは、アイドル時の取り込み、ビジー時の待機、および制限付き待機の3つの原則を解決しますが、電力を供給して待機するという原則に違反します。

5.ナレッジレビュー

ここに画像の説明を挿入

第三に、プロセスの相互排除のハードウェア実装方法

1.割り込みマスキング方式

これは、元のアイデアと同じオン/オフ割り込み命令によって実現されます。つまり、プロセスがクリティカルエリアへのアクセスを開始したときに、アクセスが終了するまで割り込みを許可されないため、プロセスの切り替えはできません。発生するため、2つのプロセスが同時にクリティカルエリアにアクセスすることは不可能です地区の状況

利点:シンプルで効率的

短所:マルチプロセッサには適用されません。カーネルプロセスにのみ適用され、ユーザープロセスには適用されません。

2. TestAndSet命令(TS命令)

TestAndSetLock命令(TSL命令)とも呼ばれます

次の図に示すように、TSL命令はハードウェアによって実装され、実行プロセスを中断することはできず、一度に実行することしかできません。

ここに画像の説明を挿入

ロックが最初にfalseの場合(プロセスがクリティカル領域にアクセスしていない場合)、TSLの戻り値はfalseであり、whileループでスタックせず、プロセスはクリティカル領域にアクセスできます。最初にtrueの場合(プロセスはクリティカル領域にアクセスしています)、TSL戻り値がtrueの場合、クリティカルセクションにアクセスしているプロセスのアクセスが終了し、ロック値がfalseに変更されるまで、whileループでスタックします。プロセスはクリティカルセクションに入ることができます

利点:実装が簡単で、マルチプロセッサ環境に適しています

短所:待機電力の原則を満たしていない。クリティカルセクションに入ることができないプロセスは、一時的にCPUを占有し、TSL命令を周期的に実行するため、待機がビジーになります。

3.スワップ命令

Exchangeコマンド(XCHGコマンド)とも呼ばれます

スワップ命令はハードウェアによって実装され、図に示すように、実行プロセスを中断することはできず、一度に実行することしかできません。

ここに画像の説明を挿入

ロックがfalse(プロセスがクリティカルセクションにアクセスしない)の場合にのみ、ループから抜け出してクリティカルセクションにアクセスできます。

利点:実装が簡単で、マルチプロセッサ環境に適しています

短所:待機電力の原則を満たしていないため、クリティカルセクションに一時的に入ることができないプロセスは、CPUを占有し、スワップ命令を周期的に実行するため、待機がビジーになります。

4.ナレッジレビュー

ここに画像の説明を挿入

第四に、セマフォメカニズム

1.原因

プロセスの相互排除の4つのソフトウェア実装方法と3つのハードウェア実装方法は、電力待機を実現できません。つまり、プロセスがクリティカルエリアに入ることができない場合、プロセスは長い時間ループでプロセッサを占有します(必要がないため)。常にループし、プロセスを直接切り替えることができます)

2.はじめに

(1)セマフォは、システム内の特定のリソースの量を表す変数です。
(2)ユーザープロセスは、オペレーティングシステムによって提供されるプリミティブのペアを使用してセマフォを操作できます。
(3)プリミティブのペアは次のとおりです。 wait(S)プリミティブとsignal(S)プリミティブ、Sはセマフォです(このプリミティブのペアを関数として理解します)
(4)Wait(S)は通常P操作と呼ばれ、P(S)と記述されます。通常はシグナル(S )はV演算と呼ばれ、V(S)と記述されます。

3.整数セマフォ

次のように、整数変数をセマフォとして使用して、システム内の特定のリソースの量を示します。

ここに画像の説明を挿入

4.記録されたセマフォ

次のように、整数セマフォ(待機する能力を満たさない)に基づいて改善し、レコードデータ構造を使用してセマフォを表します。

ここに画像の説明を挿入

例:
コンピューターに2つのプリンターがあり、それらを異なるプロセスに割り当てる必要があります。初期値は2で、待機キューは空です。

(1)P0プロセスはプリンターを使用し、待機を実行し、値–、値の値は1になります
(2)P1プロセスはプリンターを使用し、待機を実行し、値–、値の値は0になります(プリンターは使用できません)
(3)P2プロセスはプリンターを使用します実行待機、値–、値は-1、値<0になり、ブロックを実行し、待機キューの先頭になります(使用できない場合は、プロセッサ実行ループを占有せず、ビジー現象は発生しません)
( 4)P3プロセスはプリンターを使用し、待機を実行し、値–、値の値は-2になり、値は0未満になり、ブロックを実行し、待機キューの2番目のプロセスになります
(5)P0に切り替え、P0はプリンターの使用を終了し、実行しますシグナル、value ++、value valueが-1になり、Value <= 0、ウェイクアップを実行、待機キューの先頭をウェイクアップ(P2プロセス)、P2が待機キューから移動、P2がプリンターを使用
(6)P2に切り替え、 P2はプリンターの使用を終了し、シグナル、value ++を実行し、値は-1になり、値<= 0、ウェイクアップを実行し、待機キューの先頭をウェイクアップし(P3プロセス)、P3は待機キューから移動し、P3はプリンターを使用します。

  1. 知識レビュー

ここに画像の説明を挿入

5つ目は、セマフォを使用して、プロセス間の相互排除、同期、および先行関係を実現することです。

1.プロセスの相互排除を実現するセマフォメカニズム

図に示すように、相互排除セマフォミューテックスを設定します。初期値は1です。
ここに画像の説明を挿入

注:
(1)異なる重要なリソースに対して異なる相互に排他的なセマフォを設定する必要があります
(2)PとVの操作はペアで発生する必要があり、Pがないと相互に排他的なアクセスを保証できず、Vがないと待機中のプロセスをウェイクアップできません

2.プロセスの同期を実現するためのセマフォメカニズム

プロセスの同期を実現するには、プロセスの実行が順次、つまり次々に実行されるようにする必要があります。

(1)同期セマフォSを設定します。初期値は0です(最初はリソースがないことを理解し、P1プロセスはリソースを使用したいのでP2を介して生成する必要があります)
(2)V(S)は前のプロセス
(3)後のプロセスの前にP(S)を実行します

ここに画像の説明を挿入

3.セマフォメカニズムは前駆体の関係を実現します

ここに画像の説明を挿入

4.ナレッジレビュー

ここに画像の説明を挿入

6.生産者と消費者の問題

  1. 問題分析

システムには、一連のプロデューサープロセスと一連のコンシューマープロセスがあります。プロデューサープロセスが製品を生成してバッファーに入れるたびに、コンシューマープロセスは毎回バッファーから製品を取り出して使用します。プロデューサーとコンシューマーは、サイズn2の初期の空のバッファーを共有します
。関係分析

(1)同期関係

i。バッファがいっぱいになると、プロデューサーは消費者が製品を受け取るのを待つ必要があります
ii。バッファが空の場合、消費者はプロデューサーが製品を入れるのを待つ必要があります

(2)相互に排他的な関係

i。プロデューサーとコンシューマーは相互に排他的なアクセスバッファーを必要とします(バッファーは重要なリソースです)
ii。プロデューサーとプロデューサーは相互に排他的なアクセスバッファーを必要とします(2つのプロデューサーはデータを上書きできます)
iii。コンシューマーとコンシューマーバッファーに排他的にアクセスするには(2つのコンシューマーは空のデータ)

  1. 成し遂げる

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_49343190/article/details/111773114