並列分散ソフトウェア 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/pdsoft-2000/2000-12-14
あるいは、次のページから手繰っていくこともできます。
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
4台同時に故障する確率:0.054==0.00006
4台のどれかが1つでも故障する確率== 1-(4台すべてが動いている確率) :1-(1-0.05)4==0.18549375
構成要素の数が増えた時にどうなるか。 10台で動くものが100台、1000台で動くか。
(集中)システムで問題を解くための指令の集まり。
実用になり、かつ、利益に見合うコストで実現できる範囲を探すことが大事に なる。
タイマ割込み。1秒間に50回〜60回割込みがかかる。 水晶発振か、電源の周波数を使う。 一回の割込みを、clock tick という。
単一のコンピュータでは、水晶でも問題がない。
複数のコンピュータでは、 クロックの進み方(clock skew)が違うので、だんだんずれてくる。
「a→b」は、「aはbの前に発生する」
「a→bかつb→cならばa→cである」
並行性がある:「x→y」も、「y→x」も両方とも偽であることある。 xとyが別々のプロセスで発生して、それらの間でメッセージを交換しない時な ど。 どちらが先に起きたかということを言えない(言う必要がない)
図(a) 独自のクロックを持つ3つのプロセス。進み方が異なる。
図(b) Lamportのアルゴリズムによるクロックの修正。
2つのイベントの間に必ず1ティック進める。小数点。 同時なら、プロセスIDで適当に。
この方法でクロックを修正すると、次の性質が得られる。
以前の方法。
UNIX
int adjtime(const struct timeval *delta, struct timeval *olddelta)
fault-tolerant average。 往復時間の誤差。
同期方法
図。
普通のプロセス:
プロセスが臨界領域に入ろうとする時、領域の名前、自分のプロセス番号、現 在時刻のメッセージを用意する。
このメッセージを他のプロセス(自分も含む)に送信する。
あるプロセスがメッセージを受け取った時、次の3つの場合がある。
すべてのプロセスからOKをもらったら、臨界領域に入る。
臨界領域から出る時には、待ち行列のすべてのプロセスにOKを送る。
アルゴリズムの性質:
結論:元の集中アルゴリズムよりも、遅く、複雑で、高価で、ロバスト性も小 さい。
分散アルゴリズムの可能性が示されたこと、将来への課題、 ほうれん草やラテン語。
トークンは、point-to-point のメッセージで送られる。 (グループ通信は使われない。)
隣のプロセスからトークンを受け取ると、自分が臨界領域に入りたければ入る。
性質
アルゴリズム | 1回当たりのメッセージ数 | 入る前の遅れ | 問題 |
---|---|---|---|
集中 | 3 | 2 | コーディネータのクラッシュ |
分散 | 2(n-1) | 2(n-1) | プロセスのクラッシュ |
トークンリング | 1〜無限 | 0〜n-1 | トークンの紛失、プロセスのクラッシュ |
最後に残ったプロセスが、自分がコーディネータだと他のプロセスに知らせる。
ダウンから復帰したプロセスは、この選出アルゴリズムを起動する。
歴史:1960年代、テープの時代。 失敗したら、巻き戻す。
銀行口座間の預金の移動。
注意:Javaの serializable とは意味が全く違う。
複数のトランザクションは、並行に実行可能。しかし、その複数のトランザク ションの最終結果は、それらを「ある順序」で逐次的に実行した時と同じ結果 になる。
逆に、トランザクションは、直列化可能なスケジュールが存在するなら、並行 に実行してもよい。直列化可能でないなら、トランザクションは、開始を遅ら せるか、アボートする。
シャドー・コピーを作らず、ファイルのその場所を書き換える。 その前に、次の情報を安定記憶に書き込む。
クラッシュからの回復もできる。
2種類のプロセス
もっとも単純な方法: Begin Transaction で、ファイルをロックする。 Commit/Abort でアンロックする。
注意:プログラマは、ロックを意識しない。
制約が強すぎる。
読み取りロック:read lock と write lock を分ける。
ロックの粒度(granularity)が大事
実際のシステムでは、Commit/Abort するまで、一度確保したロックをはなさない。 第2相で、まとめて全部ロックを解放する(strict two-phase locking)。
利点
実現(衝突時の対応):プライベート作業空間を使う実現が便利。 どんどんプライベート作業空間上のファイルを更新して、最後にコミットする か削除する。
性質
前提
直列化可能性という制限はきつすぎる。
kill では済まないものもある。
トランザクションが使える場合には、回復は単に abort すればよい。
対策:タイムスタンプを使う。
プローブ・メッセージ:3つ組
改良:プローブメッセージに待っているプロセスのリストを付ける。 リストの中で犠牲となるプロセスを一意に決める。
大域的な時間とトランザクションを利用した方法(1):待機消滅(wait-die)型 アルゴリズム
大域的な時間とトランザクションを利用した方法(2):負傷待機(wound-wait) 型アルゴリズム
分散システムにおける同期