19
第第第第第第第第第第第第 第第第第第第第第第第第第 第第第第第第第第第第第第 第第第第 第第第第 第第第第 第第第第 PV PV 第第 第第 第第第第第第第第 第第第第第第第第 Test & Set Test & Set 第第第第第第第 第第第第第第第

第9回 プロセスの協調と排他制御

  • Upload
    oihane

  • View
    37

  • Download
    3

Embed Size (px)

DESCRIPTION

第9回 プロセスの協調と排他制御. 並行プロセスと資源の競合 競合問題 セマフォ PV 命令 不可分命令の実装 Test & Set プロセス間通信. 並行プロセス. 並行実行 (concurrent processing) されているプロセスの集合を並行プロセスを呼ぶ 並行プロセスの実行には様々な問題がある 資源の競合 クリティカルセクション 競合問題 (Racing Conditions) プロセス間通信. 資源の競合. ブロッキング : 他のプロセスが使用している共有資源が解放されるのを待機している状態 - PowerPoint PPT Presentation

Citation preview

Page 1: 第9回 プロセスの協調と排他制御

第9回 プロセスの協調と排他制御

並行プロセスと資源の競合並行プロセスと資源の競合 競合問題競合問題 セマフォセマフォ

− PVPV 命令命令 不可分命令の実装不可分命令の実装

− Test & SetTest & Set プロセス間通信プロセス間通信

Page 2: 第9回 プロセスの協調と排他制御

並行プロセス 並行実行並行実行 (concurrent processing)(concurrent processing) されてされて

いるプロセスの集合を並行プロセスを呼いるプロセスの集合を並行プロセスを呼ぶぶ

並行プロセスの実行には様々な問題があ並行プロセスの実行には様々な問題があるる− 資源の競合資源の競合− クリティカルセクションクリティカルセクション− 競合問題競合問題 (Racing Conditions)(Racing Conditions)− プロセス間通信プロセス間通信

Page 3: 第9回 プロセスの協調と排他制御

資源の競合 ブロッキング ブロッキング : : 他のプロセスが使用している共他のプロセスが使用している共

有資源が解放されるのを待機している状態有資源が解放されるのを待機している状態 ライブロック:共有資源を複数プロセスが譲りライブロック:共有資源を複数プロセスが譲り

合う無限待機状態合う無限待機状態 デッドロック:資源の依存関係がプロセス間でデッドロック:資源の依存関係がプロセス間で

環状につながれている状態で、各プロセスが他環状につながれている状態で、各プロセスが他のプロセスの占有している資源の解放を待ってのプロセスの占有している資源の解放を待っている無限待機状態いる無限待機状態

飢餓状態: 永久にブロッキングされている状飢餓状態: 永久にブロッキングされている状態態

Page 4: 第9回 プロセスの協調と排他制御

資源の待ち行列OSOS の扱うスケジューリングは、プロセスの扱うスケジューリングは、プロセス

スケジューリング(スケジューリング( CPUCPU の割り当て)のの割り当て)の他に、入出力装置の割り当ても含まれる他に、入出力装置の割り当ても含まれる

CPU

入出力装置

入出力装置

入出力装置

入出力装置

CPU 待ち行列

入出力待ち行列

Page 5: 第9回 プロセスの協調と排他制御

資源競合の解決 防止策防止策

− 資源を獲得できたら実行資源を獲得できたら実行− 複数の資源を獲得することを禁止複数の資源を獲得することを禁止

解決策解決策− ロールバックロールバック (rollback) ... (rollback) ... いったん確保したいったん確保した

資源を元に戻す資源を元に戻す− プロセスの強制終了プロセスの強制終了

Page 6: 第9回 プロセスの協調と排他制御

プロセス間の同期(Process Synchronization)

parabegin

s1 // s2 // --- // Sn

paraend

• 並行プロセスのプリミティブセット – parabegin ... paraend

• 以下の状態では、様々な値をとる可能性がある ( プロセス間にデータ依存)

parabegin

a = b + c // c = i + j // j = a + b

paraend

Page 7: 第9回 プロセスの協調と排他制御

競合問題 (Racing Conditions)

一般に、並行プロセスでは、2つのプロ一般に、並行プロセスでは、2つのプロセス間のセス間の read setread set とと write setwrite set が空集合でが空集合でない場合、競合状態ない場合、競合状態 (Racing Conditions)(Racing Conditions)を持つことになるを持つことになる

Read Set Write Set

Page 8: 第9回 プロセスの協調と排他制御

Critical Section( きわどい領域) Racing ConditionsRacing Conditions を回避するため、たを回避するため、た

だ1つのプロセスのみが実行可能なプロだ1つのプロセスのみが実行可能なプログラム区間グラム区間

この区間によって、この区間によって、 read setread set とと write setwrite setの重なりを無くすの重なりを無くす

この区間を実現するためにはこの区間を実現するためには1.1. 相互排除相互排除 (mutual exclusion)(mutual exclusion)2.2. 前進前進 (progress)(progress)3.3. 有限待機有限待機 (bounded waiting)(bounded waiting)

Page 9: 第9回 プロセスの協調と排他制御

相互排除( mutual exclusion)

ビジーウェイト ビジーウェイト ... lock – unlock ... lock – unlock Test & SetTest & Set  命令 命令 セマフォセマフォ

Page 10: 第9回 プロセスの協調と排他制御

Spin Lock (lock – unlock)

locklockL: if x then goto L else w <- true fi;L: if x then goto L else w <- true fi;unlockunlock

w <- false;w <- false;

•  共有変数によって、 Critical Section ( CS )の使用を示し、共有変数が真である 場合は使用中で、偽である場合は空いている•  lock 命令は、共有変数が偽であれば、真にして自分が CS に入るが、偽である場 合は、真にセットされるまでビジーウェイティングする( spin lock)

•  unlock 命令で、共有変数を偽にセットして、 CS を他のプロセスに解放する• ただし、共有変数の値のチェックと値のセットは、不可分命令で実装されてないと2 つのプロセスが同時に CS に入れる可能性がある

• シングルプロセッサの場合は、 lock 操作時に割込み禁止(プロセスに切り替  え禁止)にすればよい

Page 11: 第9回 プロセスの協調と排他制御

Test & Set Primitives マルチプロセッサシステムでは、プロセス間の同期をとるためには、同マルチプロセッサシステムでは、プロセス間の同期をとるためには、同

期変数の値のチェックとセットを不可分期変数の値のチェックとセットを不可分 (atomic)(atomic) に行わなければならなに行わなければならないい

このためハードウェア側で、同期変数(共有変数)のチェックと値のセこのためハードウェア側で、同期変数(共有変数)のチェックと値のセットを一括処理する命令をットを一括処理する命令を Test & Set 命令命令 (( 不可分命令)として用意し不可分命令)として用意しているている

Test & Set Test & Set 命令は、値をセットし、命令は、値をセットし、セットする前の値を同時に読み込むを同時に読み込むenter_CS:

tsl register flag cmp register #0 jnz enter_CS retleave_CS:

mov flag #0ret

enter_CS();

leave_CS();

Critical SectionCritical Section

Page 12: 第9回 プロセスの協調と排他制御

セマフォ PP 命令と命令と VV 命令の2つの同期基本命令によってクリティカルセクシ命令の2つの同期基本命令によってクリティカルセクシ

ョンをはさむョンをはさむ PP 命令 命令 ... P(s) :... P(s) :   

P(s): if ( s <= 0 ) P(s): if ( s <= 0 ) 待ち行列にプロセスを登録して休眠状態待ち行列にプロセスを登録して休眠状態 (sleep)(sleep)へへ ;; elseelse s = s – 1;s = s – 1;

VV 命令 命令 ... V(s) : ... V(s) : V(s): s = s + 1;V(s): s = s + 1;     待ち行列から一つ     待ち行列から一つ

  プロセス取り出す  プロセス取り出す (wakeup)(wakeup) PP 命令命令 , V, V 命令は不可分命令は不可分 に処理されなければなら に処理されなければなら ない ない sが1のとき、sが1のとき、2値セマフォ ( ( binary semaphore)binary semaphore) といい、といい、   lock, unlock lock, unlock 命令として適用命令として適用 可能である 可能である 資源の解放を待つ間、プロセスは資源の解放を待つ間、プロセスは  自ら  自ら CPUCPU を手放して休眠するを手放して休眠する  (サスペンドロック)  (サスペンドロック)

P(s)P(s)

V(s)V(s)

Critical Section

Page 13: 第9回 プロセスの協調と排他制御

プロセス協調における競合問題 生産者生産者 -- 消費者問題消費者問題Reader-Writer ProblemReader-Writer Problem 哲学者の食事問題哲学者の食事問題 相互排除の問題相互排除の問題

− ピーターソンのアルゴリズムピーターソンのアルゴリズム− Test & Set PrimitiveTest & Set Primitive

Page 14: 第9回 プロセスの協調と排他制御

プロセス間通信 プロセス同士がデータの受け渡しを行いながら協プロセス同士がデータの受け渡しを行いながら協

調処理する調処理する 割込み、シグナルを使うプリミティブなもの割込み、シグナルを使うプリミティブなもの 共有メモリ方式共有メモリ方式

− 複数のプロセスがアクセス可能な複数のプロセスがアクセス可能な shared memoryshared memory  を用 を用意し、この領域を利用してデータの受け渡しを実現する意し、この領域を利用してデータの受け渡しを実現する

メッセージパッシング方式メッセージパッシング方式− あるプロセスからメッセージの形で他のプロセスへデーあるプロセスからメッセージの形で他のプロセスへデー

タの受け渡しを行うタの受け渡しを行う

Page 15: 第9回 プロセスの協調と排他制御

メッセージパッシング方式 直接通信方式 直接通信方式 ... link ... link は一つのみは一つのみ

− send(pid,message)send(pid,message)− receive(pid,message)receive(pid,message)

間接通信方式 間接通信方式 ... link ... link は複数は複数− チャネルチャネル (channe)(channe)− ポートポート (port)(port)− メールボックスメールボックス (mailbox)(mailbox)− send(send( チャネル、チャネル、 message), receive(message), receive( チャネル、チャネル、 message)message)

通信相手通信相手− 11 対多通信 対多通信  ......  受信者多数。プロセスグループ  受信者多数。プロセスグループ or or チャネルで定チャネルで定

義義          マルチキャスト(          マルチキャスト( multicast)multicast)

− 多対1通信 多対1通信  ... ... 送信者多数。送信者を特定しない送信者多数。送信者を特定しない− 多対多通信多対多通信

総称してチャネル

Page 16: 第9回 プロセスの協調と排他制御

同期式通信と非同期式通信 同期式通信同期式通信 (synchronous communication)(synchronous communication)

− メッセージの受け渡しが完了(確認)されるまで待メッセージの受け渡しが完了(確認)されるまで待ち続けるち続ける

− blocking blocking

非同期式通信(非同期式通信( asynchronous communication)asynchronous communication)− メッセージの受け渡し完了を待たず、メッセージをメッセージの受け渡し完了を待たず、メッセージを

バッファリングして先に処理を進めるバッファリングして先に処理を進める− non blockingnon blocking− バッファ式通信バッファ式通信

Page 17: 第9回 プロセスの協調と排他制御

パイプ (pipe) バイト単位のデータの読み出しバイト単位のデータの読み出し // 書き込みをプロセス間書き込みをプロセス間

通信に拡張したもの通信に拡張したもの 一度読み出したデータは再び読み出すことはできない一度読み出したデータは再び読み出すことはできない

(( stream:stream: ストリームストリーム )) UnixUnix のパイプでは、のパイプでは、入出力ととプロセス間通信のインターのインター

フェースを統一フェースを統一

write read

プロセス A プロセス B

パイプ

Page 18: 第9回 プロセスの協調と排他制御

ソフトウェア割込み プロセスにおいて、プロセスの実行とは独立しプロセスにおいて、プロセスの実行とは独立し

て、個々の命令の実行によって発生する様々なて、個々の命令の実行によって発生する様々な事象をとらえる仕組み。事象をとらえる仕組み。

ソフトウェア割込みでは、ハードウェア割込みソフトウェア割込みでは、ハードウェア割込みと同様に個々の事象ごとに処理をすると同様に個々の事象ごとに処理をするハンドラが定義される。が定義される。

定義された事象がプロセスの実行において発生定義された事象がプロセスの実行において発生すると、プロセスを中断して、ハンドラの処理すると、プロセスを中断して、ハンドラの処理を行い、その後、中断プロセスを再開するかそを行い、その後、中断プロセスを再開するかそのままプログラムを終了させるのままプログラムを終了させる

シグナルシグナル : Unix : Unix やや OS/2OS/2 では、では、シグナル( signal) として実装されているとして実装されている− SIGINT, SIGHUP,SIGSEGV,SIGKILL SIGINT, SIGHUP,SIGSEGV,SIGKILL などなど

Page 19: 第9回 プロセスの協調と排他制御

RPC (遠隔手続き呼び出し) RPC(Remote Procedure Call)RPC(Remote Procedure Call)

− クライアント・サーバ型通信で用いられるクライアント・サーバ型通信で用いられる− クライアントがサーバの手続き(関数)をローカルクライアントがサーバの手続き(関数)をローカル (自分持ち)の手続き(関数)を呼び出すのと同じよう (自分持ち)の手続き(関数)を呼び出すのと同じよう に呼び出す に呼び出す− スタブ(スタブ( stubstub ))

クライアントスタブクライアントスタブ ...... 1.1. RPCRPC から要求メッセージの作成と送信から要求メッセージの作成と送信                   2.応答メッセージを受信して2.応答メッセージを受信して RPCRPC にに返す返す

サーバスタブサーバスタブ ... ... 11 ..  要求メッセージを受信してサーバプログラムへ 要求メッセージを受信してサーバプログラムへ (RPC(RPC 受理)受理)        2        2 ..    RPCRPC の実行結果を応答メッセージにして送信の実行結果を応答メッセージにして送信