計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁

Slides:



Advertisements
Similar presentations
CSMA/CD 方式 (搬送波感知多重アクセス/衝突検出) 森 一喜. CSMA / CD方式と は・・・? LAN上でPC間でのデータのやりとりを行う イーサネット型のアクセス制御方式の一つで ある。 ※イーサネット型とは? イーサネット型LANは現在最も普及している 方式で、データ転送速度は最大100M.
Advertisements

CPU設計と パイプライン.
第2回 プロセス管理 ジョブ、プロセスとは? プロセスの状態遷移 プロセス制御ブロック スケジューリング.
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
Chapter11-4(前半) 加藤健.
計算機工学III オペレーティングシステム #9 主記憶管理:ページング 2006/06/09 津邑 公暁
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
JavaによるCAI学習ソフトウェアの開発
オペレーティングシステム 第5回 プロセスの相互排除
オペレーティングシステムJ/K 2004年10月7日
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
第6章 トランザクション管理 6.1 トランザクションの概念 6.2 同時実行制御 6.3 障害回復.
記 憶 管 理(2) オペレーティングシステム 第10回.
計算機システム概論・2回目 本日のトピック:プロセスについて プロセスとは プロセスのスケジューリングについて 多重プロセスの問題 排他制御
App. A アセンブラ、リンカ、 SPIMシミュレータ
オペレーティングシステム 第6回 プロセス間通信
新幹線の最適化予約システム 親: iphoo さん KMSF B1 fuse.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
オペレーティングシステム (割り込み処理)
Linuxカーネルについて 2014/01.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
割 込 み(1) オペレーティングシステム No.5.
オペレーティングシステム i386アーキテクチャ(2)
TinyOS 浅川 和久 2017/4/7 TinyOS.
割り込み.
割り込み.
PIC制御による赤外線障害物 自動回避走行車
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
オープンソフトウェア利用促進事業 第3回OSSモデルカリキュラム導入実証
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
CONCURRENT PROGRAMMING
第9回 プロセスの協調と排他制御 並行プロセスと資源の競合 競合問題 セマフォ 不可分命令の実装 プロセス間通信 PV命令
第8回入出力制御 デバイスコントローラ ポーリングと割込み 入出力の方式 PIO DMA 入出力のためのソフトウェア技法.
Occam言語による マルチプリエンプティブシステムの 実装と検証
オペレーティングシステム 第3回( ) デッドロックと排他制御.
マルチスレッド処理 マルチプロセス処理について
耐故障処理 Fault Tolerance 「分散計算の基礎」 12章 発表者 : 高橋 慧.
OSの仕組みとその機能 1E16M001-1 秋田 梨紗 1E16M010-2 梅山 桃香 1E16M013-3 大津 智紗子
プログラミング入門 電卓を作ろう・パートIV!!.
リモートホストの異常を検知するための GPUとの直接通信機構
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
オペレーティングシステム イントロダクション
アルゴリズムとデータ構造勉強会 第6回 スレッド木
オペレーティングシステムJ/K (仮想記憶管理)
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
レジスタの割付け 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第12章5節.
情報通信ネットワークと コミュニケーション
そろそろvolatileについて一言いっておくか
オペレーティングシステムJ/K 2004年11月15日2時限目
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
オペレーティングシステム 第7回 デッドロック
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
第4回 メモリ管理 主記憶(メインメモリ)の管理 固定区画方式と可変区画方式 空き領域の管理 スワッピング.
全体ミーティング (5/23) 村田雅之.
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
6.5 セマフォ セマフォ(semaphore): 複数のタスク(もしくはスレッド)が「同期」または「相互排除」の制御のために取得(acquire)・リリース(release)できるカーネルオブジェクトの総称.
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
SMP/マルチコアに対応した 型付きアセンブリ言語
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
デッドロック問題 lock-r2 lock-r1 (blocked)   lock-r2 (blocked) lock-r1  
分散メモリ型並列計算機上での行列演算の並列化
全体ミーティング(9/15) 村田雅之.
Presentation transcript:

計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁

4.1 プロセスの 競合,協調,干渉

プロセスの同時実行 複数プロセスが同時に動作する際に... プロセス協調 プロセス競合 プロセス干渉 仕事の分担や通信など,複数プロセスが助け合う プロセス競合 複数プロセスで有限リソースを取り合う 調停し,各プロセスに適切にリソース割当 プロセス干渉 他プロセスの影響で異常が発生すること 原因はプログラムのバグ

プロセス協調 例)プロセス間通信 何も通信のための仕組みがない場合... 通信バッファ 送信側と受信側でタイミングを合わせる必要 受信側は,常にメッセージが来ないかを チェックしていなければならない 通信バッファ A B バッファ msg

プロセス協調 問題 読み出す前に上書き...とりこぼし 格納する前に再読込...だぶって受け取り B A バッファ msg msg B A

フラグによる管理 受信すべきメッセージが バッファ内に存在するか否かをフラグで判断 受信すべきメッセージが バッファ内に存在するか否かをフラグで判断 フラグが立っている間, 送信側は新たに送信を行わない → 上書き回避 フラグが降りている間, 受信側は新たに順を行わない → 再受信回避 A B バッファ msg msg

プロセス競合 例)磁気テープの利用 NUM: 空きテープ数 プログラム例 LOAD NUM, R DEC R, 1 STORE NUM, R :テープ使用 LOAD NUM, R INC R, 1 テープを確保 テープを解放

プログラムの意味 テープの確保 テープの解放 変数NUMの値をレジスタに ロード レジスタから1減算 レジスタから1減算 レジスタの値を変数NUMに ストア LOAD NUM, R DEC R, 1 STORE NUM, R : :テープ使用 LOAD NUM, R INC R, 1

プロセスAとプロセスBがテープにアクセス 結果,テープの空き数は変化しないはず A B 空きテープ

ケース1 LOAD NUM, R R=1 DEC R, 1 R=0 NUM STORE NUM, R R=0 LOAD NUM, R R=0 INC R, 1 R=1 STORE NUM, R R=1 NUM 1 テープの空きは 1でOK

ケース2 LOAD NUM, R R=1 DEC R, 1 R=0 STORE NUM, R R=0 LOAD NUM, R R=1 INC R, 1 R=2 STORE NUM, R R=2 NUM 2 1 テープの空きは 1しかないはず (実際より多いと勘違い)

ケース3 LOAD NUM, R R=1 DEC R, 1 R=0 STORE NUM, R R=0 LOAD NUM, R R=1 INC R, 1 R=2 STORE NUM, R R=2 NUM 2 1 テープの空きは 1あるはず (実際より少ないと勘違い)

原因 対処法 変数NUMから値を読んで,変数NUMに値を書くまで の間に,他のプロセスが変数NUMを読んでしまう 実際は変化させるための手続きが始まっている 対処法 LOADからSTOREまでの一連の処理を不可分に クリティカルセクション: このような分割してはいけない一連の処理 排他制御(mutual exclusion): クリティカルセクションなどを他のプロセスと 排他的に実行するための制御

4.2 排他制御

排他制御 プロセスがクリティカルセクションを 他のプロセスと排他的に実行できるように 重要な性質 即時性 デッドロック防止 公平性

排他制御の性質 即時性 デッドロック防止 公平性 クリティカルセクションの実行に競合するプロセスが ほかにない場合,プロセスはクリティカルセクションの実行 を即座に許可される。 デッドロック防止 競合するプロセスがある場合でも,許可されるまで永久に 待たされてはいけない。 公平性 どのプロセスも,他のプロセスがクリティカルセクションを実 行することを妨げられない。

クリティカルセクション エントリーシーケンス イグジットシーケンス 例)フラグによる制御 クリティカルセクションに入る権利を獲得する処理 クリティカルセクションから出るための処理 例)フラグによる制御

例)フラグによる制御 新幹線のトイレと同じ クリティカルセクション(トイレ) に入ろうとするプロセス(乗客) は,フラグ(インジケータ)を確 認し,入れるかどうかを決定 入ると同時にフラグを下げる (インジケータが点く) 空いた! 空いて ない... 空いてる 空いて ない... 一見うまくいく

例)フラグによる制御 うまくいかない場合 フラグを見て確認 入る という2つの処理は不可分 空いてる 空いてる この方式では 排他制御を実現できない

4.3 Dekkerのアルゴリズム

Dekkerのアルゴリズム 2プロセスの排他制御を行うことを可能とする Interest Priority プロセスA,Bがクリティカルセクションに興味が あるか否かを示す Priority プロセスA,Bがクリティカルセクションに同時に 興味を持った場合,どちらを優先するかを決定する

Dekkerのアルゴリズム Interest[A] = TRUE; while( Interest[B] ){ if( Priority == B ){ Interest[A] = FALSE; while( Priority == B ){}; } : クリティカルセクション Priority = B; Interest[B] = TRUE; while( Interest[A] ){ if( Priority == A ){ Interest[B] = FALSE; while( Priority == A ){}; } : クリティカルセクション Priority = A;

Dekkerのアルゴリズム Interest まずクリティカルセクションに入 る前に, クリティカルセクションに入りた い旨を宣言 まずクリティカルセクションに入 る前に, クリティカルセクションに入りた い旨を宣言 競合者がいなければ 入れる 競合者 なし 空いてる Interest状態

Dekkerのアルゴリズム Priority 競合者がいた場合 Priorityが示す優先度で どちらが入るか決定 自分に優先度が回ってくるまで Interest状態を解除 競合者 あり さっき 私だったので どうぞ 競合者 あり 空いてる Interest状態 空いてる

Dekkerのアルゴリズム Interest状態オン BがInterestの間 (競合あり) 優先権がBなら Interest状態オフ Interest[A] = TRUE; while( Interest[B] ){ if( Priority == B ){ Interest[A] = FALSE; while( Priority == B ){}; } : クリティカルセクション Priority = B; Interest[B] = TRUE; while( Interest[A] ){ if( Priority == A ){ Interest[B] = FALSE; while( Priority == A ){}; } : クリティカルセクション Priority = A; 優先権がBなら Interest状態オフ Bに優先権がある間待って 優先権を得たら 再びInterest状態オン 終わったら優先権を相手に渡して Interest状態オフ

Dekkerのアルゴリズム ポイント 問題点 入る前に手を挙げる 優先権により競合を解決 ユーザプログラムに依存 ちゃんとプロセスが約束を守ってくれないと破綻 ビジーウェイト(busy wait) 一方がクリティカルセクションを実行中, 待っている方は優先権をひたすらチェックし続ける CPUリソースの無駄

4.4 割り込み制御による排他制御

ユニプロセッサの場合 割り込みのみがプロセス中断を発生させる ただし... エントリーシーケンスで 割り込み禁止命令を実行しておけばよい エントリーシーケンスで 割り込み禁止命令を実行しておけばよい 同様にイグジットシーケンスで 割り込み禁止を解除 ただし... 割り込み禁止時間の増加はシステムの性能に影響

4.5 ハードウェアによる排他制御

ハードウェアによる排他制御 対話処理の重要性から排他制御の必要性が認識 テストアンドセット命令 ハードウェア自体に,排他制御のための仕組みを v = test_and_set(x) v = x と x = 0 を同時に実行する命令 競合者フラグのチェックとセットを同時に行える

今日のまとめ プロセス競合 プロセス協調 クリティカルセクション: 排他制御(MUTEX): Dekkerのアルゴリズム リソース競合が発生する可能性のある部分 排他制御(MUTEX): クリティカルセクションに同時に複数プロセスが 入らないようにする制御 Dekkerのアルゴリズム ソフトウェアによる排他制御の基本手法 ビジーウェイトという問題点 プロセス協調