OS-同時性:反発と同期-復習&練習問題


1復習問題:
5.1同時関連の4種類の設計問題:プロセス間の相互作用、共有資源間の競争、複数のプロセスの同期問題、プロセスに対するプロセッサ時間配分問題.
5.2同時発生の3種類のコンテキスト:複数のアプリケーション、構造化アプリケーション、オペレーティングシステム構造.
5.3同時実行の最も基本的な要求は、反発能力を強化することである.
5.4プロセス間の3種類の相互理解の程度:相互に相手を知らない:独立プロセス.プロセス間で相互に間接的に相手を知る:相手のプロセスID番号を知る必要はありませんが、I/Oバッファなどのオブジェクトへのアクセスを共有します.プロセス間で直接相手を知る:プロセスID番号を通じて互いに通信し、協力していくつかの活動を完成するために使用される.
5.5競争プロセスVS協力プロセス:
競合プロセスでは、ディスク、ファイル、プリンタなどの同じリソースに同時にアクセスする必要があります.
コラボレーション・プロセスは、メモリ・アクセス領域のような共通のリソースにアクセスするか、他のプロセスと通信したりして、アプリケーションやアクティビティでコラボレーションします.
5.6競争プロセスに関する3つの制御問題:
反発:競合プロセスは1つの臨界リソースにのみアクセスできます(一度に1つのプロセスだけが臨界紫リソースにアクセスできます).同時メカニズムは、一度に1つのプロセスだけが臨界リソースにアクセスできるというルールを満たさなければなりません.
デッドロック:競合プロセスが1つ以上のリソースに一意のアクセスを必要とし、1つのプロセスが1つのプロセスを制御し、別のプロセスを待っている場合、デッドロックが発生する可能性があります.
飢餓:他のメンバーがこのリソースを独占しているため、プロセスのグループの1つは無期限にリソースを必要とすることを拒否する可能性があります.
5.7反発要求:
(1)同じリソースまたは共有オブジェクトに関する臨界領域を有するすべてのプロセスにおいて、一度に1つのプロセスのみが臨界領域に入ることを許可する反発を強制的に実施しなければならない.
(2)1つの臨界領域で停止したプロセスは、他のプロセスに干渉しない必要がある.
(3)臨界領域へのアクセスを必要とするプロセスが無限に遅延されることは許されない.すなわち、飢え死にや飢餓は許されない.
(4)プロセスが臨界領域に存在しない場合、臨界領域に入る必要があるプロセスは、直ちに入ることができる必要がある.
(5)関連プロセスの速度とプロセッサの数には何の要求も制限もない.
(6)1つのプロセスが臨界領域に存在する時間は限られている.
5.8信号量で実行可能な動作:
(1)新しい信号量を負に初期化することができる.
(2)wait動作は信号量を1減少させ,値が負の場合,プロセス実行waitはブロックする.
(3)signal動作は信号量を1増加させ、0以下であればwait動作によってブロックされるプロセスはブロック解除される.
5.9二元信号量と一般信号量の違い:一般信号量は0または1しか取れないが、一般信号量は任意の整数を取ることができる.
5.10弱い信号量VS強い信号量:強い信号量は信号量の上で待っているプロセスが先進的な先出し規則に従ってキューから移動することを要求する.弱い信号量にはこの規則はありません.
5.11パイプ:パイプは、1つ以上のプロセス、1つの初期化シーケンス、およびローカルデータからなるソフトウェアモジュールです.
5.12ブロックメッセージVSブロックされていないメッセージ:送信者と受信者のいずれか一方がブロックされている場合、メッセージングは待つ必要があり、ブロックされていない場合は待つ必要がない.
5.13読者-執筆者に関する条件:1.任意の複数の読み取りプロセスでこのファイルを同時に読むことができます.
                                2.一度に1つの書き込みプロセスだけがファイルに書き込むことができます.
                                3.書き込みプロセスがファイルに書き込まれている場合は、読み取りプロセスがファイルを読むことは禁止されます.
2.練習問題
5.1マルチプログラム設計とマルチプロセッサの同時問題における異同点:
直感的な効果から、プロセッサは複数のタスクを並列に処理しますが、本質的には1つのプロセッサはある時点で1つのタスクしか処理できず、シリアル実行に属します.シングルプロセッサの場合、同時問題は、他のプロセスのアクティビティ、オペレーティングシステムが中断を処理する方法、およびオペレーティングシステムのスケジューリングポリシーに依存する、プロセスの相対的な実行速度が予測できないマルチプログラム設計システムの基本的な特性に由来します.分散環境では、同時発生の可能性が高くなり、依存する共有リソースがある限り、相互呼び出し順序が制御できないため、同時発生の問題が発生します.
  5.2 
(1)連携プログラム:呼び出すたびに,呼び出されたプロセスの前回のアクティブポイントから実行する.呼び出されたプロシージャよりも呼び出されたプロシージャが高いという感覚がないため、返されません.逆に、どの協同プログラムも、リカバリコマンドによって別の協同プログラムに制御を渡すことができます.協同プログラムが最初に呼び出されると、エントリポイントで「リカバリ」され、その後、協同プログラムは前のリカバリコマンドで再アクティブになります.プログラムには一度に1つの協同プログラムしか実行できず、移行点はコードに表示されます.----非同時TAT
(2)信号量を用いて協同方式を書き換える
 char rs,sp;
 char inbuf[80],outbuf[125];
 semphore s = 1,n = 0;/*s n */
 void read()
{
    while(true){
    READCARD(inbuf);
    semWait(s);
    for(int i = 0; i < 80; i++){
        rs = inbuf[i];
        semSignal(s);
    }
    rs = "";
}
}
void print()
{
     while(true){
        semWait(n);
        for(int j = 0;j < 125;j++){
            outbuf[j] = sp;
            semSignal(n);
     }
    OUTPUT(outbuf);
  }
}
void squash()
{
    while(true){
      semWait(s);
       if(rs != "*"){
            sp = rs;
            semSignal(n);
       }
      else{
           semSignal(s);
           if(rs == "*"){
                       sp = "^";
                      semSignal(n);
           }
           else{
                 sp = "*";
                 semSignal(n);
                 sp = rs;
                semSignal(n);
          }
        }
       semSignal(s);
     }
}

5.3  x=6,y=4;x=6,y = 5