オペレーティングシステムプロセスの相互排除ソフトウェアとハードウェアの実装(注)

ハードウェアの実装
  方法 利点 不利益
割り込みマスク 「オン/オフ割り込みコマンド」を使用して、 シンプルで効率的

1.マルチプロセッサシステムには適していません

2.カーネルプロセスにのみ適用され、ユーザープロセスには適用されません

TesstAndSet命令

(TS命令、TSL命令)

TSL命令はハードウェアによって実装され、実行中に中断することはできず、一度にしか実行できません。

bool TSL(bool *lock){

    bool old;
    old = *lock;
    *lock=true;
    return old;
}

while(TSL(&lock));
//临界区代码段
lock = false;
//剩余区代码段

 

実装が簡単

ロジックの脆弱性をチェックする必要はありません

マルチプロセッサに適しています

「待つ力を与える」に満足していない

 

スワップ命令

同上

Swap(bool * a、bool * b){

  ブール温度;

  temp = * a;

  * a = * b;

  * b = temp;

}

 

bool old = true;

while(old == true):

  Swal(&lock、&old)

//クリティカルセクションコード

lock = false;

//残りの市外局番

同上 同上

 

ソフトウェアの実装
  思想 不利益
シングルサインオン方式 2つのプロセスがクリティカルセクションへのアクセスを終了すると、クリティカルセクションを使用する権限を別のプロセスに引き渡します。クリティカルセクションに入る各プロセスの許可は、別のプロセスによってのみ付与できます。

違反:

無料で入れて、

あきらめて待つ

最初のチェックをダブルマーク ブール配列flag []を設定します。配列内の各要素は、プロセスがクリティカル領域に入る意思を示すために使用されます。trueは、プロセスが入りたいことを意味します。クリティカルセクションに入る前に、各プロセスは、クリティカルセクションに入るプロセスが他にあるかどうかを確認します。ない場合は、独自のフラグをtrueに設定してから、クリティカルセクションへのアクセスを開始します。

違反:

待っている間忙しい、

あきらめて待つ

検査後のダブルマーク ダブルマーク事後検査方法の改良版。以前のアルゴリズムの問​​題は、最初にチェックしてからロックすることですが、これら2つの操作を一度に実行することはできないため、2つのプロセスが同時にクリティカルセクションに入る可能性があります。したがって、改善は、最初にロックしてから、上記の問題を回避するためにチェックすることです。

違反:

無料で入れて、

限られた待機、

あきらめて待つ

ピーターソンアルゴリズム 二重識別の事後チェック方法では、2つのプロセスがクリティカルゾーンに入るのを争っており、最終的には誰もクリティカルゾーンに入ることができません。ピーターソンのアルゴリズムは、対戦相手に最初にクリティカルセクションを積極的に使用させるというアイデアを使用しています。

違反:

あきらめて待つ

 

おすすめ

転載: blog.csdn.net/qq_20176001/article/details/100059611