分散プログラミング -- 同期

並列分散ソフトウェア

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/pdsoft-2001/2001-12-13
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html

■復習

■今日の重要な話

分散アルゴリズム

分散システムにおける同期

資料:

A.S.タネンバウム著、水野忠則、鈴木健二、西宮洋太郎、佐藤文明訳、分 散オペレーティングシステム、プレンティスホール (1996)
第3章 分散システムにおける同期

■分散システムの性質と目標

◆分散システム

離れていても心は1つ。

◆集中システム

◆分散システムの利点

◆分散システムの弱点

◆分散システムの設計目標

◆透明性

クラッシュした時には、ログから回復させる。

◆並行性制御

できるだけ効率のよい、直列化可能なスケジューリングを求める。

◆ロッキング

もっとも単純な方法: Begin Transaction で、ファイルをロックする。 Commit/Abort でアンロックする。

注意:プログラマは、ロックを意識しない。

制約が強すぎる。

読み取りロック:read lock と write lock を分ける。

ロックの粒度(granularity)が大事

小さくする
並列性が高まる。ロック自体のオーバヘッドが増える。 デッドロックが起こりやすくなる。
大きくする
2相ロック:デッドロックが起きにくい、直列化可能な方法。
第1相(growing phase)
ロックの数が増える一方
第2相
ロックの数が減る一方 定理:トランザクションの実現で2相ロックを使うならば、インターリーブさ れることで作られるスケジュールは直列化可能である。

実際のシステムでは、Commit/Abort するまで、一度確保したロックをはなさない。 第2相で、まとめて全部ロックを解放する(strict two-phase locking)。

利点

2相ロックでも、デットロックは起きる。

◆楽観的並行性制御

どんどんやって、後でまずかったことがわかつた時点で abort する。 衝突が稀である時に有効。

実現(衝突時の対応):プライベート作業空間を使う実現が便利。 どんどんプライベート作業空間上のファイルを更新して、最後にコミットする か削除する。

性質

◆タイムスタンプ

操作にタイムスタンプを付けて、まずいものをアボートする。

前提

楽観的:同じファイルを独立したトランザクションで同時にアクセスすること は、あまりない。

◆長期トランザクション

直列化可能性という制限はきつすぎる。

■分散システムにおけるデッドロック

デッドロックの扱い 分散では、非常に難しい。回避は、無理。

◆検出

検出して、プロセスを kill する。

kill では済まないものもある。

トランザクションが使える場合には、回復は単に abort すればよい。

◆集中型検出アルゴリズム

集中型のアルゴリズムを、コーディネータを使って模倣する。

情報の収集方法 単純にやると、偽のデッドロックを検出する。

対策:タイムスタンプを使う。

◆分散型検出アルゴリズム

プロセスがブロックする時に起動される。

プローブ・メッセージ:3つ組

  1. プロセスがブロックする時、プローブ・メッセージを送る。
  2. メッセージを受け取ると、他のプロセスを待っていたら、第2、第3フィー ルドを書き換えて転送する。
  3. メッセージが一巡してもどってきたら、デットロック。
単純に最初のプロセスを殺す方法では、複数のプロセスが同時にこのアルゴリ ズムを起動すると問題になる。

改良:プローブメッセージに待っているプロセスのリストを付ける。 リストの中で犠牲となるプロセスを一意に決める。

◆分散デットロック予防

もっとも代表的な方法: 集中システムでも使われている。

大域的な時間とトランザクションを利用した方法(1):待機消滅(wait-die)型 アルゴリズム

トランザクションの時刻の増加方向にしか延びない。

大域的な時間とトランザクションを利用した方法(2):負傷待機(wound-wait) 型アルゴリズム

wait-die型アルゴリズムでは、若者は繰り返し死ぬことがある。

■まとめ

分散アルゴリズム

分散システムにおける同期


↑[もどる] ←[12月06日] ・[12月13日] →[12月20日]
Last updated: 2001/12/19 14:59:21
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>