第9回 プロセスの協調と排他制御 並行プロセスと資源の競合 競合問題 セマフォ − 不可分命令の実装 − PV命令 Test & Set プロセス間通信 並行プロセス 並行実行(concurrent processing)されてい るプロセスの集合を並行プロセスを呼ぶ 並行プロセスの実行には様々な問題がある − − − − 資源の競合 クリティカルセクション 競合問題(Racing Conditions) プロセス間通信 資源の競合 ブロッキング : 他のプロセスが使用している共有資 源が解放されるのを待機している状態 ライブロック:共有資源を複数プロセスが譲り合う無 限待機状態 デッドロック:資源の依存関係がプロセス間で環状 につながれている状態で、各プロセスが他のプロセ スの占有している資源の解放を待っている無限待 機状態 飢餓状態: 永久にブロッキングされている状態 資源の待ち行列 OSの扱うスケジューリングは、プロセススケ ジューリング(CPUの割り当て)の他に、入出 力装置の割り当ても含まれる 入出力待ち行列 入出力装置 入出力装置 CPU 入出力装置 CPU待ち行列 入出力装置 資源競合の解決 防止策 − − 資源を獲得できたら実行 複数の資源を獲得することを禁止 解決策 − − ロールバック(rollback) ... いったん確保した資源 を元に戻す プロセスの強制終了 プロセス間の同期 (Process Synchronization) • 並行プロセスのプリミティブセット – parabegin ... paraend parabegin s1 // s2 // --- // Sn paraend • 以下の状態では、様々な値をとる可能性がある(プロセス間にデータ依存) parabegin a = b + c // c = i + j // j = a + b paraend 競合問題(Racing Conditions) 一般に、並行プロセスでは、2つのプロセス間 のread setとwrite setが空集合でない場合、 競合状態(Racing Conditions)を持つことに なる Read Set Write Set Critical Section(きわどい領域) Racing Conditionsを回避するため、ただ1 つのプロセスのみが実行可能なプログラム 区間 この区間によって、read setとwrite setの重 なりを無くす この区間を実現するためには 1. 2. 3. 相互排除(mutual exclusion) 前進(progress) 有限待機(bounded waiting) 相互排除(mutual exclusion) ビジーウェイト ... lock – unlock Test & Set 命令 セマフォ Spin Lock (lock – unlock) lock L: if x then goto L else w <- true fi; unlock w <- false; • 共有変数によって、Critical Section (CS)の使用を示し、共有変数が真である 場合は使用中で、偽である場合は空いている • lock 命令は、共有変数が偽であれば、真にして自分がCSに入るが、偽である場 合は、真にセットされるまでビジーウェイティングする(spin lock) • unlock 命令で、共有変数を偽にセットして、CSを他のプロセスに解放する • ただし、共有変数の値のチェックと値のセットは、不可分命令で実装されてないと 2 つのプロセスが同時にCSに入れる可能性がある • シングルプロセッサの場合は、lock 操作時に割込み禁止(プロセスに切り替 え禁止)にすればよい Test & Set Primitives マルチプロセッサシステムでは、プロセス間の同期をとるためには、同期 変数の値のチェックとセットを不可分(atomic)に行わなければならない このためハードウェア側で、同期変数(共有変数)のチェックと値のセット を一括処理する命令をTest & Set 命令(不可分命令)として用意している Test & Set 命令は、値をセットし、セットする前の値を同時に読み込む enter_CS: tsl register flag cmp register #0 jnz enter_CS ret leave_CS: mov flag #0 ret enter_CS(); Critical Section leave_CS(); セマフォ P命令とV命令の2つの同期基本命令によってクリティカルセクションをは さむ P命令 ... P(s) : P(s): if ( s <= 0 ) 待ち行列にプロセスを登録して休眠状態(sleep)へ; else s = s – 1; V命令 ... V(s) : V(s): P(s) s = s + 1; 待ち行列から一つ プロセス取り出す(wakeup) P命令, V命令は不可分 に処理されなければなら ない sが1のとき、2値セマフォ (binary semaphore)といい、 lock, unlock 命令として適用 可能である 資源の解放を待つ間、プロセスは 自らCPUを手放して休眠する (サスペンドロック) Critical Section V(s) プロセス協調における競合問題 生産者-消費者問題 Reader-Writer Problem 哲学者の食事問題 相互排除の問題 − − ピーターソンのアルゴリズム Test & Set Primitive プロセス間通信 プロセス同士がデータの受け渡しを行いながら協調処 理する 割込み、シグナルを使うプリミティブなもの 共有メモリ方式 − 複数のプロセスがアクセス可能なshared memory を用意し、 この領域を利用してデータの受け渡しを実現する メッセージパッシング方式 − あるプロセスからメッセージの形で他のプロセスへデータの 受け渡しを行う メッセージパッシング方式 直接通信方式 ... link は一つのみ − − 間接通信方式 ... link は複数 − チャネル(channe) ポート(port) メールボックス(mailbox) − send(チャネル、message), receive(チャネル、message) − − send(pid,message) receive(pid,message) 総称してチャネル 通信相手 − 1対多通信 ... 受信者多数。プロセスグループ or チャネルで定義 マルチキャスト(multicast) − − 多対1通信 ... 送信者多数。送信者を特定しない 多対多通信 同期式通信と非同期式通信 同期式通信(synchronous communication) − − メッセージの受け渡しが完了(確認)されるまで待ち続け る blocking 非同期式通信(asynchronous communication) − − − メッセージの受け渡し完了を待たず、メッセージをバッファ リングして先に処理を進める non blocking バッファ式通信 パイプ(pipe) バイト単位のデータの読み出し/書き込みをプロセス間通信 に拡張したもの 一度読み出したデータは再び読み出すことはできない (stream:ストリーム) Unixのパイプでは、入出力とプロセス間通信のインター フェースを統一 プロセスA プロセスB パイプ write read ソフトウェア割込み プロセスにおいて、プロセスの実行とは独立して、 個々の命令の実行によって発生する様々な事象を とらえる仕組み。 ソフトウェア割込みでは、ハードウェア割込みと同様 に個々の事象ごとに処理をするハンドラが定義され る。 定義された事象がプロセスの実行において発生す ると、プロセスを中断して、ハンドラの処理を行い、 その後、中断プロセスを再開するかそのままプログ ラムを終了させる シグナル: Unix やOS/2では、シグナル(signal)とし て実装されている − SIGINT, SIGHUP,SIGSEGV,SIGKILL など RPC(遠隔手続き呼び出し) RPC(Remote Procedure Call) クライアント・サーバ型通信で用いられる − クライアントがサーバの手続き(関数)をローカル (自分持ち)の手続き(関数)を呼び出すのと同じよう に呼び出す − スタブ(stub) − クライアントスタブ ... 1.RPCから要求メッセージの作成と送信 2.応答メッセージを受信してRPCに返す サーバスタブ... 1. 要求メッセージを受信してサーバプログラムへ (RPC受理) 2. RPCの実行結果を応答メッセージにして送信
© Copyright 2024 ExpyDoc