OSでのセマフォとモニターの違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 5 5月 2024
Anonim
アラビア語のオペレーティングシステムチュートリアルモニターパート2
ビデオ: アラビア語のオペレーティングシステムチュートリアルモニターパート2

コンテンツ


セマフォとモニターの両方により、プロセスは相互排除で共有リソースにアクセスできます。どちらもプロセス同期ツールです。代わりに、それらは互いに非常に異なっています。どこで セマフォ 初期化とは別に、wait()およびsignal()操作によってのみ操作できる整数変数です。一方、 モニター typeは、1つのプロセスが一度にアクティブ化できる構造を持つ抽象データ型です。この記事では、以下に示す比較チャートを使用して、セマフォとモニターの違いについて説明します。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

比較の根拠セマフォ モニター
ベーシック セマフォは整数変数Sです。モニターは抽象データ型です。
アクションSemaphore Sの値は、システム内で使用可能な共有リソースの数を示しますMonitorタイプには、共有変数と、共有変数を操作する一連のプロシージャが含まれます。
アクセスプロセスが共有リソースにアクセスすると、Sでwait()操作を実行し、共有リソースを解放すると、Sでsignal()操作を実行します。プロセスがモニター内のシェア変数にアクセスする場合、プロシージャを介してアクセスする必要があります。
条件変数セマフォには条件変数がありません。モニターには条件変数があります。

セマフォの定義

プロセス同期ツールであるため、 セマフォ整数変数S この整数変数Sは、 リソースの数 システムに存在します。セマフォSの値は、2つの関数によってのみ変更できます 待つ()および 信号()初期化とは別に。


wait()およびsignal()操作は、セマフォSの値を不可分に変更します。つまり、プロセスがセマフォの値を変更しているとき、他のプロセスがセマフォの値を同時に変更することはできません。さらに、オペレーティングシステムは、カウントセマフォとバイナリセマフォの2つのカテゴリでセマフォを区別します。

セマフォのカウント、セマフォSの値はシステムに存在するリソースの数に初期化されます。プロセスが共有リソースにアクセスするたびに、実行します 待つ()セマフォに対する操作 デクリメント セマフォの値。共有リソースを解放すると、 信号()セマフォに対する操作 増分 セマフォの値。セマフォカウントが 0、 その意味は すべてのリソースが占有されています プロセスによって。セマフォカウントが0のときにプロセスがリソースを使用する必要がある場合、wait()およびgetを実行します ブロックされた 共有リソースを利用しているプロセスがそれを解放し、セマフォの値が0より大きくなるまで。

バイナリセマフォセマフォの値の範囲は0〜1です。これはミューテックスロックに似ていますが、ミューテックスはロックメカニズムであり、セマフォはシグナリングメカニズムです。バイナリセマフォでは、プロセスがリソースにアクセスする場合、セマフォでwait()操作を実行し、 デクリメント 1から0までのセマフォの値。プロセスはリソースを解放するときに、 信号()セマフォの操作とその値を1に増やします。セマフォの値が0で、プロセスがリソースにアクセスする場合、wait()操作を実行し、リソースを使用している現在のプロセスがリソースを解放するまでブロックします。

モニターの定義

プロセスの同期にセマフォを使用しているときに発生するタイミングエラーを克服するために、研究者は高レベルの同期構造、つまり モニタータイプ。モニターの種類は 抽象データ型 プロセスの同期に使用されます。


抽象データ型であるモニタータイプには、 共有データ変数 すべてのプロセスとプログラマ定義の一部で共有される 操作 これにより、プロセスはモニター内で相互に排他的に実行できます。プロセスは 直接アクセスしない モニターの共有データ変数。プロセスはそれにアクセスする必要があります 手順を通して 一度に1つのプロセスのみがモニター内の共有変数にアクセスできるようにするモニターで定義されます。

モニターの構文は次のとおりです。

monitor monitor_name {//共有変数宣言プロシージャP1(。。){}プロシージャP2(。。){}プロシージャPn(。。){}初期化コード(。。){}}

モニターは、モニター内で一度に1つのプロセスのみがアクティブになるような構造です。他のプロセスがモニター内のシェア変数にアクセスしようとすると、ブロックされ、キューに並んで、以前にアクセスしたプロセスがそれを解放したときに共有データへのアクセスを取得します。

条件変数 追加の同期メカニズムのために導入されました。条件変数 プロセスがモニター内で待機できるようにします また、他のプロセスがリソースを解放すると、待機中のプロセスがすぐに再開できるようにします。

条件変数 2つの操作のみを呼び出すことができます 待つ()および 信号()。プロセスの場合 Pはwait()を呼び出します 他のプロセスまでモニターで中断される操作 Q invoke signal() 操作、つまりプロセスによって呼び出されたsignal()操作は、中断されたプロセスを再開します。

  1. セマフォとモニターの基本的な違いは、 セマフォ整数変数S システムで利用可能なリソースの数を示すのに対し、 モニター それは 抽象データ型 これにより、クリティカルセクションで一度に実行できるプロセスは1つだけになります。
  2. セマフォの値は次の方法で変更できます。 待つ() そして 信号() 操作のみ。一方、モニターには共有変数と、プロセスが共有変数にアクセスするための手順のみがあります。
  3. セマフォでは、プロセスが共有リソースにアクセスするときにプロセスが実行します 待つ()操作し、リソースをブロックし、実行するリソースを解放するとき 信号()操作。プロセスが共有リソースにアクセスする必要がある場合、モニターでは、モニターの手順を介してそれらにアクセスする必要があります。
  4. モニタータイプには 条件変数 どのセマフォにはありません。

結論:

モニターはセマフォよりも簡単に実装でき、セマフォと比較してモニターに間違いが生じる可能性はほとんどありません。