プロセスとスレッド(2)

1.Whatは(競争条件)競合状態ですか?
回答:一部のオペレーティングシステムでは、コラボレーティブプロセスは、いくつかの一般的な記憶領域を共有することが読んで、お互いに書き込むことができ、公衆がメモリに格納することができる(おそらくメモリ内のデータ構造)で、それは共有ファイルであってもよいです。二つ以上のプロセスは、いくつかのデータの読み書きを共有し、そして最終的な結果は、競争条件と呼ばれる実行中のプロセスの正確なタイミングに依存します。

?2.Whatは相互排他(ミューテックス)である
A:プロセスが共有変数またはファイルを使用している場合、他のプロセスが同じことを行うことができないことを保証するために、いくつかの手段を取ります。

?3.Whatは、クリティカル領域(クリティカル領域)された
回答:共有メモリアクセスのプログラムセグメントは、重要な領域と呼ばれます。

4.What持つように保持するための4つの条件です競合状態/相互排他(に適したソリューションミューテックス競争条件と解決策は)?
A:①任意の2つのプロセスが重要な領域にすることはできません。
②CPUの速度と数についての仮定を行うべきではありません。
③実行プロセスの重要な部分は、他のプロセスをブロックしてはなりません。
④無期限クリティカルセクションに入るのを待っているプロセスをしてはなりません。

図2-25のASMコード5.Explainセクション2.3.3のコードが相互排他を提供することができることを示す。
回答:enter_region:
     REGISTERをTSL、LOCK //登録するロックとロックが1に設定されているコピー
     CMPレジスタ# 0 0 //ロックはそれを何ですか?
     JNEのenter_region //これは、ロックが設定されていることを示し、0であれば、ループ
     RET
 
   leave_regionの                                            
     MOVEのLOCK、#0 //ロック0に格納されている
     呼び出し元に戻す// RET
    説明:最初の命令は元の値をコピーするためにロックしますロックレジスタが1にセットされ、その後、元の値が0と比較されます。それは、その後、過去の非ゼロの場合、ロックされている、プログラムが戻って再度テストを開始します。時間の長いか短い期間の後、値は、プロセスは、その後ロックされ、この時点で、0を返しますが、(現時点で重要なゾーンプロセスでクリティカルセクションを終了)となります。ロックを解除するには、単にプログラム0預金ロックは非常にシンプルですが、特別な同期命令を必要としません。

セクション図2-28のコード6.Explain 。コードは相互排他を提供することができることを示す2.3.5
バッファ内の#define Nスロット100 //数:A
    ; //セマフォのtypedef int型セマフォ特別な整数データ
    セマフォミューテックス= 1; //重要な領域へのアクセス制御
    、空= Nセマフォ; //は空のバッファスロットの数をカウント
    0 =セマフォフル; //フルスロット・バッファの数を数えます

    プロデューサ空隙(ボイド){
   {
        int型の項目、
        一方(TRUE){//はTRUE定数1である
                  項目produce_item =(); //バッファ内のデータのいくつかの製造
                  ダウン(&空の); //空のスロット1の番号を保存
                  ダウン(&ミューテックス); //は、クリティカルセクション入力
                  inserUtem(項目); //新しいデータバッファに
                  アップ(&ミューテックス); //は、クリティカルセクション出る
                  まで(&フル); //フルスロット1の数に追加
        }
  }

   消費者の空隙(ボイド){
  {
        int型の項目、 
        一方(TRUE){//無限ループ
                  ダウン(&フル); //がフルスロットの数を保存1。
                  ダウン(&ミューテックス); //は、クリティカルセクションの入力
                  項目= remove_アイテムを(); //データはバッファから取ら
                  アップ(&ミューテックス); //クリティカルセクション残し
                  アップ(&空); //空のスロットの数に追加する1。
                  consume_item(項目); //データ項目を処理します
        }
  }
説明:三組セマフォ、キー領域が0である入力相互排除のための重要な領域へのアクセスを制御するミューテックスを、フルスロットがフルバッファの数を表し、空のスロットは空のバッファの数を表します。バッファは、生産者が、新たなデータを生成するために動作することに満たない場合は、1マイナス空きスロットの数は、ミューテックスは、消費者が、重要な領域へのアクセスが唯一のデータ項目を待つことができますしたい、その後場合、つまり、重要な領域へのアクセス、0に設定されています後にバッファ最大(&ミューテックス)には、フルスロットプラス1の数、バッファが空でない場合とは、すなわち消費者の仕事、フルスロットマイナス1の数は、臨界ゾーンに、データ項目がキー領域を残して、除去されます空スロットプラスワンの数。

。7.Whatモニタ(管側)との間の接続を示してください。図2-34のコードおよび監視
:チューブはその等のプロセス変数及びデータ構造によって特別なモジュールまたはパッケージです。いずれかの時点でチューブが唯一のアクティブなプロセスを持つことができます。
    図2-34、および条件変数のために二つの動作の導入に関連する:待って信号。相互排他セマフォミューテックスを実装するために使用される生産者と消費者のために、チューブ内に実装された場合、生産者が見つけたときに、それが動作しない(例えば、生産者はバッファが一杯になった見つかりました)、それは(例えば、条件変数であろうそれはバッファが空であることを検出する場合、消費者のために、操作信号を実行します、;自体がブロックされ、別のプロセスが管の外管に移し待って呼び出し元のプロセスにつながった操作を待つ)に関する完全な実行すぐにプロセスを終了するか、新しいプロセスを目覚めさせます。

?8.Whatセマフォとの差である ( セマフォ)とミューテックス(mutexの)
重要な領域を達成するためにミューテックス:①スレッドを同期するために使用されるスレッドセマフォのミューテックスミューテックス:A制御、タイムクリティカルな分野に一つだけのスレッドへのアクセスは、セマフォは、あるいは起こらない起こるいくつかのことを保証するため。
②相互に排他的な値は唯一の0/1することができます。信号の大きさは非負の整数を指定できます。言い換えれば、ミューテックスは唯一のリソースへの排他的アクセスのために使用することができ、それは相互排他複数のリソースをマルチスレッド実装することはできません。セマフォは、複数の類似のリソースのマルチスレッドのミューテックスとの同期を実装することができます。セマフォは、単一のセマフォのとき、mutexは完了するためにリソースにアクセスすることができます。
③ミューテックスは、同じスレッドによってロック・アンロックに対応する必要があり使用され、信号量は、スレッドによって解放することができ、別のスレッドが得られました。例えば、生産者と消費者に、ミューテックスミューテックスは、生産者が生産するとき、すなわち、ミューテックスが0に設定されている主要な分野でそれらにアクセスする際に相互排他を実装するために使用し、消費者はクリティカル領域に入ることができない、それができませんミューテックスを変更するが、唯一の生産者が再びロックを解除。他の二つのセマフォがフルカウントを空にするために使用されるが、生産者と消費者がアクセスすることができます。

。9.Please図2-32のコードを説明唯一の違いは何だ、mutexロックを使用&アンロック、我々は条件変数を使用しない場合は、条件付き変数がどのように機能するかを示すために?
A:条件変数condcとcondpを制御し、消費者のために使用されましたプロデューサー。生産者は、バッファの最初の排他的使用を操作するときにバッファにバッファが空の場合は生産者に、例えば、この時のデータは、pthread_cond_signalを消費者のウェイク、解放バッファを呼び出すために、バッファの場合データは、その後、プロデューサーは、この時間は、プロセスはブロックやバッファを解放することをpthread_cond_waitの呼び出し、書き込むことはできません。同様に、消費者の呼び出しメカニズム。ロックを解除するだけmutexロックした場合、バッファがいっぱいになると、その後の溝は、スレッドを呼び出すプロデューサー今回はブロックされ、そのため消費者にのみ実行する空きスロットを生成することができますが、消費者が生産者のために、実行されています対応するスレッドがない限り、それは、不明です。条件変数の役割は、CPU効率を向上させる、二つのスレッド間の相互作用を達成することです。

?10.Whatは、障壁(バリア)である
いくつかの用途では段数を分割し、すべてのプロセスがない限り、任意のプロセスは、次のステージに進むことができない、そうでなければ、次のステージに進む準備ができて必要になることを提供する:回答。あなたは、プロセスがバリアに到達したとき、それはすべてのプロセスがバリアに到達するまでブロックする障壁があり、この動作を実現するために、各ステージの最後に障壁を設定することができます。

?11.Whatはメッセージパッシングである
:メッセージメッセージングユニットとしてプロセス間通信の手段であり、メッセージは、ヘッダとテールの送信を含むメッセージの集合からなる集合である、メッセージは、2つを達成するために必要メッセージが到着するまでプリミティブは、メッセージを受信するための責任がある)(受信、メッセージを送信する責任がある)(送るSend()とSeceive()され、メッセージを受信しない場合、受信側のプロセスは、待機状態に入ります。この場合、情報の交換として機能するだけでなく、同期を処理するだけでなく。

?12.WhatはこれらのIPCの差である
スレッド間の情報の同期を実現するために使用されるセマフォ:A。
    ミューテックスは、異なるスレッド間の相互排他を実現しています。
    ミューテックス、条件変数は、スレッド間の情報の伝送のために、しばしば存在に依存します。
    複数のスレッドのリソースへの相互排他的なアクセスのためのチューブ。
    異なるプロセス間の情報伝送のためのメッセージ。
    いくつかの段階でバリア同期のための異なるプロセス。

 

おすすめ

転載: www.cnblogs.com/ku1274755259/p/11108528.html