• 検索結果がありません。

J78 j IEICE 2000 1 最近の更新履歴 Hideo Fujiwara J78 j IEICE 2000 1

N/A
N/A
Protected

Academic year: 2018

シェア "J78 j IEICE 2000 1 最近の更新履歴 Hideo Fujiwara J78 j IEICE 2000 1"

Copied!
11
0
0

読み込み中.... (全文を見る)

全文

(1)

論 文

情報基礎理論ワークシ ョップ(LAシンポジ ウム )論文小特集

共有 メモリマルチプ ロセッサシ ステムに おけ る同期時間最適な

無待機時計合せプ ロト コル

守屋 宣

井上美智子

増澤 利光

藤原 秀雄

Optimal Wait-Free Clock Synchronization Protocol on a Shared-Memory

Multi-Processor System

Sen MORIYA, Michiko INOUE, Toshimitsu MASUZAWA, and Hideo FUJIWARA

あらまし 共有 メモリマルチプ ロセッサシ ステム,特に ,シ ステム内のすべてのプ ロセッサが 大域パル スを共 有するフェーズ 内シ ステムに おけ る故障耐性をもつ時計合せプ ロト コルを 考察する.フェーズ 内シ ステムでは , 正常なプ ロセッサは パル ス発生時に 同期し て動 作を 行 う.フェーズ 内シ ステムに おいて ,パル ス発生時にプ ロ セッサが 動作し ないような故障を居眠り故障と呼ぶ.居眠り故障の起こるフェーズ内シ ステムに おいて ,同期時 間と呼ばれ るある特定パル ス以上正常に 動作し 続けているすべてのプ ロセッサ同士の局所時計の時刻を一致させ るプ ロト コルを無待機時計合せプ ロト コルと呼ぶ.これ まで ,フェーズ 内シ ステムに おけ る無待機時計合せプ ロ ト コルとし て,同期時間4n23n − 1 のプロトコルが提案されていた( n:プロセッサ数).本論文では ,同期時 間12n の無待機時計合せプ ロトコルを提案する.また,無待機時計合せプロトコルの同期時間の下界が n − 1 であることを証明し ,本論文で提案するプ ロト コルが 同期時間に 関し てオーダ 的に 最適であることを示す.

キーワード 共有 メモリマルチプ ロセッサシ ステム,時計合せプ ロト コル ,故障耐性,無待機性,同期時間

1. ま え がき

マルチプ ロセッサシ ステムにおけ る重要な問題の一 つに ,プ ロセッサ間の同期を実現することがある.プ ロセッサ間の同期をとるための手段とし て ,大域時計 が よく用いられ る.し かし ,全プ ロセッサが 共通の一 つの 時計を参照する方法では ,その時計が 故障すれば ど のプ ロセッサも大域時計を利用できな くなるという 欠点が あ り,シ ステ ム全 体の 信 頼 性は 低い .そこで , 各プ ロセッサが 個別に 時計を実現し ,これらの時計を 同期させ ると い う方法が 提案され て いる[1][4].こ の方法では ,各プ ロセッサが 個別に 時計を実現するた め ,一部のプ ロセッサが 故障し ても正常なプ ロセッサ 間で 時計を同期するように実現するといった故障耐性 を もた せ ,信頼性を 上げ ると い うことが 考えられ る . このような状況で ,各プ ロセッサが 管理する局所時計 を同期させるプ ロトコルを時計合せプ ロト コルと呼ぶ.

故障プ ロセッサが 存在するシ ステムにおけ る時計合

奈良先端科学技術大学院大学情報科学研究科 ,生駒市

Graduate School of Information Science, Nara Institute of Science and Technology, Ikoma-shi, 630–0101 Japan

せ問題は多くのアプ リケーションにとって重要であり, また それ 自 体も 興 味 深い 問 題で あ る .時 計 合せ 問 題 は ,これ まで 様々なモデルのもとで ,様々な結果が 示 され てい る([1], [2]など ).本論文では ,各プ ロセッ サが 共通の大域パル スを共有するフェーズ 内シ ステム

(in-phase system( 図1)に おけ る時 計 合せプ ロト コルを考察する.故障プ ロセッサが 存在するフェーズ 内シ ステムのもとでの 時計合せプ ロト コルは ,Dolev らによって提案された[3]Dolevらは ,プ ロセッサの 故障とし て任意時間動作を停止し た後に 動作停止に 気 づかずに 動作を 再開するという居眠り故障(napping

fault)を対象とし ている.彼らのプ ロトコルは ,ある

定数kに 対し ,以下の 二つの 条件を 保証する.(1) k パル スの間,正常に 動作し 続けたプ ロセッサは ,それ 以降正常に 動作し 続け る限り,局所時計の値は 各パル スで1ず つ増え る.(2) kパル スの間 ,正常に 動作し 続け た 二つのプ ロセッサの 局所時計の 値は 一致する . このプ ロト コルは ,各プ ロセッサは 少な くと も k パ ル ス 動 作し 続け れば 他のプ ロセッサの 動 作に か か わ ら ず 局 所 時 計の 値を 一 致させ るこ とが で き ると い う 意味で ,無待機時計合せプ ロト コル(wait-free clock D– Vol. J83–D– No. 1 pp. 99–109 2000 1 99

(2)

1 フェーズ内システム Fig. 1 In-phase system.

1 フェーズ内システムにおける無待機時計合せプロト コル

Table 1 Wait-free clock synchronization protocols on an in-phase system.

同期時間

上界 下界

Dolev ら [3] 16n2+ n − 1 Papatriantafilou ら [4]⋆ 4n23n − 1

本論文 12n n1

⋆ 自己安定無待機時計合せプ ロトコル

synchronization protocol)と 呼ば れ る .ここで ,定 数kを同期時間(synchronization time)と呼ぶ.無 待機時計合せプ ロト コルでは ,居眠り故障を起こすプ ロセッサも kパル ス正常に 動作し 続ければ 局所時計 を同期させ ることができ,また,任意個のプ ロセッサ が 居眠り故障を起こす場合でも故障プ ロセッサの動作 に 影響され ることなく局所時計を同期させ ることがで きる.

過去に 提案され たフェーズ内シ ステムにおけ る無待 機時計合せプ ロト コルを表1に 示す.Dolevらは ,同 期時間16n2+ n − 1n:プ ロセッサ数 )の無待機時計 合せプ ロト コルを提案し た[3].また ,任意の初期シ ス テム状況から開始する実行においても大域時計を実現 する自己安定無待機時計合せプロトコルとして,Dolev らは 同期 時間 8n3+ n − 1の 自己安定無待機 時計合 せプ ロト コルを提案し た[3].また ,Papatriantafilou らは ,同期時間4n2− 3n − 1の自己安定無待機時計 合せプ ロト コルを提案し た[4].本論文では ,同期時間 12nの無待機時計合せプ ロト コル W CSの提案をし , プ ロト コルW CS の同 期時間が オーダ 的に 最適であ ることを示す.

2. 諸 定 義

本章でシ ステムのモデ ル ,無待機時計合せ問題を定 義する.本論文で 用いるシ ステムのモデ ル ,無待機時 計合せ問題の定義は ,文献[3], [4]のものと同じ である.

n 個のプ ロセッサか ら な る 共 有 メモ リ マル チプ ロ セッサシ ステムを考え る.プ ロセッサは 共有変数を介

し てのみ通信を行うことができる.共有 メモリマルチ プ ロセッサシ ステムSS = (P, V)で定義する.こ こで ,P はプ ロセッサの 集 合 ,Vは 共有変 数の 集 合 で あ る .プ ロセッサは0から n − 1まで の 相 異な る 識別子をもつとし ,識別子iのプ ロセッサをPiと表 す.また ,各共有変数は ,所有者と呼ばれ るある1プ ロセッサのみが 書込みをでき,すべてのプ ロセッサが 読出し をできるとする.各プ ロセッサは 状態機械とし てモデ ル 化され る.状態sのプ ロセッサPiは ,以下 の(1)から(2)の動作を1ステップ の操作とし て行い, 次の状 態s に 遷移する .(1)状態sに より決定する プ ロセ ッサPjが 所有するすべての 共有変数を読み出 す

( 注1)

(2)状態sPjが 所有する共有変数の 値を もとに ,Piが 所有する共有変数を更新し ,状態s

に 遷移する.

本論文では ,フェーズ 内シ ステムと呼ばれ る同期式 マルチプ ロセッサシ ステムを 扱う.フェーズ 内シ ステ ムとは ,全プ ロセッサが 共通の大域パル スを共有する シ ステムであり,全プ ロセッサは 大域パル スを受けた ときに1ステップ の動作を同期し て行う.ただし ,本 論文では 後で述べる居眠り故障を考慮し ,各パル スで 全プ ロセッサが 動作するとは限らないとする.シ ステ ムS の 大域状況を ,全プ ロセッサと 全共有変数の状 態の組で 表す.以降,このシ ステムの 大域状況のこと を ,単に 状況という.シ ステムの 実行は ,状況と各パ ル スで動作し たプ ロセッサの集合の無限または有限交 代列E = c0π1c1· · ·で表すことができる.ここで ,各 ctは 状況を 表し ,特にc0 は 各プ ロセッサ,共有変数 の特定の初期状態からなる初期状況を表す.また ,πtt番目のパル ス発生時に1ステップ の動作し たプ ロ セッサの集合を表す.実行Eは ,有限であるときはあ る状況cendで 終わ る.この 実行 Eは ,各tに 対し , πtに 属する各プ ロセ ッサがct−1 をもとに 同期し て1 ステップ の 動作を 行い ,状況が ct に なったことを 意 味する.また ,t番目のパル スが 発生し た( 大域 )時 刻を時刻tと呼ぶ.また,状況ctでの変数Pi.xの値 をPi.x(t)で 表す.

プ ロセッサPi に ついて ,Pi ∈ π/ t の と き ,Pi

( 注1:実際的には ,各プ ロセッサに 対し 一つの 共有 メモ リセルが 割り 当てられており,各プ ロセッサは 自分のセルを複 数のフ ィールド に 分割 し て使 用する.プ ロセ ッサは 各共有変数をフ ィールド に 割り当て ること に より,所有す るすべて の 共有変 数が 一つのセル に 格納で き るとす る . プ ロセッサPiは ,状態sにより決定するプ ロセッサPjのセル の読出 し を 行 うこと に より,Pjが 所有するすべて の 共 有変数を 読み出すこと ができる.

(3)

時 刻 t で 居 眠 り 故 障し た ,ま た は 単 に 居 眠 りし た と い う.Pi が 時 刻 t で 居 眠 りし た な らば ,Pi は 時 刻 tで は 全 く 動 作 をし な い .すな わ ち ,ct−1ct に おけ る Pi の 状 態と Pi が 所 有 す る 共 有 変 数 の 値 は 変わ ら な い .シ ステ ム S の 実 行 E = c0π1c1· · · に 対し て ,プ ロセッサPi が 時 刻 t まで 連 続し て 動 作し た パ ル ス 数 を work(Pi, t) と 表 す.す な わ ち , work(Pi, t) = max{l|Pit−(l−1)<=t<=tπt}で あ

り,work(Pi, t) = uのと きPiが 区間[t − u + 1, t] で 居眠りす ることな く動作し 続け たこ とを 意味す る . ただし ,Pi∈ π/ t のと きは ,work(Pi, t) = 0と 定義 する.

次に ,フェーズ内シ ステムにおけ る無待機時計合せ 問題を定義する.各プ ロセッサPiは ,Piの局所時計 を 表す 共 有変 数 Clock を もつと す る .任意の 時刻t に 対し ,tまで 連続し て 動作し たパル ス数がある定数 以上であ るよ うな 任意のプ ロセッサPi, Pj の 局所時 計の 値が 一致し ,以降Piが 動作し 続け る限り局所時 計の値が1パル スご とに1ずつ増え ることを保証する プ ロト コルを無待機時計合せプ ロト コルとい う.

[ 定義1]ある正整数kに対し ,任意の実行が 次の二 つの条件を満たすようなプ ロト コルを同期時間kの無 待機時計合せプ ロト コルとい う.

(i) 調整完了性(Adjustment任意の t >= 1, 意のプ ロセッサPiに対し ,work(Pi, t) >= k + 1なら ば ,Pi.Clock(t) = Pi.Clock(t − 1) + 1が 成り立つ.

(ii) 一 致 性(Agreement任 意の t >= 1, 任意の プ ロ セ ッサPi, Pj に 対し ,work(Pi, t) >= k, work (Pj, t) >= k な らば ,Pi.Clock(t) = Pj.Clock(t)

成り立つ.

3. 無待機時計合せプ ロト コル

本章で ,フェーズ 内シ ステムにおけ る同期時間12n の無待機時計合せプ ロト コルWCSを提案する.プ ロ セッサPiのプ ログ ラムを図2に 示す.図2では ,共

有変数をClockのように大文字で 始まる変数名で表す.

また ,各プ ロセ ッサの 状 態を 局所変数の 集 合で 表し , 局所変数をcurのように小文字で始まる変数名で表す. 特に 変数curは ,共有変数を読み出すプ ロセッサの識 別子を表す変数である.

3. 1 プ ロト コルW CS 3. 1. 1 全体の流れ

本プ ロト コルでは ,各プ ロセッサPiは 以下の 二つ のモード をもつ.

調整中モード (adjusting mode

調整済モード (adjusted mode

また,調整中モード は 三つのピ リオド ,準備ピ リオド

4nステップ ),調査ピ リオド(nステップ ),調整ピ リオド(nステップ )から構成され る.初期状況では , 全プ ロセッサが 調整中モード の 準備ピ リオド に いる . 調整中モード にあるプ ロセッサPiは ,手続きadjust に従って時計調整を行っていき ,やがて調査ピ リオド , 調整ピ リオド へ移行する.調整ピ リオド において 手続 きcheck adjustedにより時計調整が 終了し たと 判定し たならば ,調整済モード へ移行する.調整済モード に あ るプ ロセッサは ,ステップご とに 局所時計の値を1 ずつ増やす.また,プ ロセッサPiはすべてのステップ においてPi自身及び 他のプ ロセッサの居眠りのチェッ クを 行 う( 手続きcheck nap).時計調整を 始めてか ら 居眠りをし たプ ロセッサは ,調整中モード におけ る 時計調整を正し くできない,または ,調整済モード に おいて 正し い時計の値を維持できないことになる.そ こで ,自分の 居 眠りを 検知し た 場 合 ,プ ロセッサ Pi は 手続きpartial resetを行い,準備ピ リオド の始めか ら 時計調整をやり直す.また ,他のプ ロセッサ Pjの 居眠りを 検知し たならば ,共有変数を通し てPjに 知 らせる.

本プ ロト コルにおけ る時計調整のア イデアを図3に 示す.プ ロセッサPiが 調整中モード で 時計調整を 開 始し てから次に故障を検知し てpartial resetを行うま での区間を世代と呼ぶ .各プ ロセッサは ,現在の世代 での ステップ 数を 表す共有変数Work count を 使 う. 時計調整を開始し たプ ロセッサは ,現在の世代を自分 より早く始めたプ ロセッサをWork countにより調べ る.図2に示すように,現在の世代を後から 始めたプ ロセッサは ,自分より早く始めたプ ロセッサの局所時 計だけをもとにし て時計調整を行う.

以下,調整中モード における手続きadjustによる時 計調整の詳細について説明し ,次に手続きcheck nap による居眠りのチェックについて説明する.

3. 1. 2 時計調整( 手続きadjust

調 整 中モード に い るプ ロセッサは ,準 備ピ リオド , 調 査ピ リオド で は 共 有 変 数の 読 出し が そ の 所 有プ ロ セッサの 識別子が 巡回する順序の繰返し になるように ステップ を 続け,調整ピ リオド ではプ ロト コルに 従っ て読出し の順序を変更する.調査ピ リオド で ,他のプ ロセッサが そのときの 世代を始めた時刻を調べる.調 整ピ リオド では ,自分より早く世代を始めた他のプ ロ

(4)

2 プロトコル WCS Fig. 2 Protocol WCS .

3 プロトコル WCS のアイデア Fig. 3 Idea of protocol WCS .

(5)

セッサの 局所時計と自分の局所時計を一致させる.ま た ,4nステップ の 準備ピ リオド は ,調査ピ リオド で 他のプ ロセッサが 時計調整を始めた時刻を正し く調べ られ ることを保証するために 必要とする( 補題1).

調査ピ リオド では,プロセッサPiPj.W ork count により,Piが 世代を始めた時刻に 対する,Pjが その ときの世代を始めた相対時刻を調べる.ただし ,Piが Pjの居眠りを検知したならば ,Pjは遅くとも次にPi の共有変数を読み出すステップ でpartial resetを行う ので ,PiPj を 時 計調 整を 遅 く開 始し たプ ロセッ サとし て扱う.調整ピ リオド では ,その所有者が 時計 調整を始めた時刻の順に 共有変数を読み出す.その 順 序を知るため,調査ピ リオド の最後の ステップで 手続 きsort listに よりPiより早く時計調整を始めたプ ロ セッサを 時計調整を開始し た時刻の順にソートし ,そ の結果を配列listに 格納する.ただし ,同時刻に 時計 調整を開始し たプ ロセッサが 複数存在するならば ,識 別子に より 順 序を 付け る.Pi より 早 く時計調整を 始 めたプ ロセッサがなければ ,手続きcheck adjustによ り,この ステップ で Piは 調整ピ リオド に 入ることな く調整済モード へ移行する.

調整ピ リオド では,Piはまず最も早く時計調整を始 めたプ ロセッサ,すな わ ちlistの 先頭に あ るプ ロセッ サの 局所時計に 自分の時計を合わせる.その後,原則 とし てlistの順に ,Piより早く時計調整を始めた他の プ ロセッサの局所時計と自分の局所時計が 一致し てい ることを確認し ていく.調整ピ リオド のステップ は 以 下のよ うに 行う.以下では ,その ステップ で 読み出す 共有変数の所有者をPjとする.

• PiPjの 居眠りを 検知し たとき,またはPj が 自身の居 眠りを 検知し たと きは ,Pj の 局所時計に 合わせることも,一致確認もし ない.次の ステップ で はlistの次のプ ロセッサの 共有変数を 読み出す.この とき,PiPjの時計を無視すると呼ぶ(68行 ).

• Pjが まだ調整中モード のときは ,今回のステッ プ ではPjの局所時計に 合わせない,または一致確認 をし ない.次のステップでも再び Pjの読出し をする.

• Piがこれ まで局所時計を合わせた,または一致 確認し たプ ロセッサが 信頼できないと 判断し たら ,現 在の局所時計を棄却し(81行 ),Pjの局所時計に合わ せる.このために ,局所時計を合わせた ,または 一致 確認し たプ ロセッサ集 合を 表す Sync,無視または 棄 却をし たプ ロセッサの 集合Asyncを使う.

• PiPjが ,現在の世代で ,共通のプ ロセッサ

Pmの局所時計に 合わせた,または 一致確認し ている にもかかわらず,両者の局所時計が 一致し ないならば , Pipartial resetを行い時計調整をやり直す.

プ ロセッサPiは ,Piより早く時計調整を始めたす べてのプ ロセッサ,すな わ ち配 列listに おいて Pi よ り前にあるすべてのプ ロセッサの局所時計に 対し ,合 わせる,一致確認をする,または 無視し たとき,手続 きcheck adjustによりPiは 調整中モード から 調整済 モード に移行する.プ ロトコルWCSは,現在の世代の 時計調整を始めてからPiが居眠りすることなく動作し 続けている場合は ,Pi.Work count = 6nに 達する前 に 調整中モード から 調整済モード へ移行することを保 証する( 補題4で証明 ).そこで,調整済モード へ移行 することな くPi.Work count = 6nに 達するならば , Piが居眠りし ていたことになり,partial resetを行い 時計調整をやり直す.以降,この場合のpartial reset を時間超過リセット,他の場合,すなわち先に 述べた 場合と 後で 述べ る手続き check napに よる場合を 居 眠りリセットと呼んで 区別する.

3. 1. 3 居眠りのチェック( 手続きcheck nap) 各プ ロセッサは ,初期状態からのステップ 数を表す 共有変数Count( 初期値0)を使う.また ,新し い世 代の時計調整を開始するたびに更新する共有変数Gen

( 初期値1)をもつ .Gen = gの間の時計調整を ,世 代gの時計調整と呼ぶ.

プ ロセッサPiPjの共有変数を読み出すステップ に おいて ,前回の Pj の共有変数を読み出し た ステッ プ からのPi.Count, Pj.Countの増分の差( 図2,第 38行,dif fで 表す )により,Piは 自身またはPj

居眠りし ていたことを判定する.PiPjの居眠りを 検知し たならば( 第40行の 条件式が 成立 ),Pj.Gen の値をPiの変数Invalidjに代入することにより,PiPjの居眠りをPjに 知らせる.Piは 自身の居眠り を検知し たときにPi.Work count >= nならば( 第42 行または 第43行の条件式が 成立 ),partial resetを行

( 注2)

.プ ロセッサ Pi が 居眠りをし たならば ,複数 のプ ロセ ッサと のCountの増 分差の比較に おいて PiPi 自身の 居眠りを 検知し 得る.このような居眠り 検知の 重複を 避け るため ,Pi.Work count >= nを 条

( 注2:手 続きcheck napは 完全に 居眠りを 検知で きるわけではな い. 例えば ,すべてのプ ロセッサが 同時に同期間居眠りを するような 場合は , ど のプ ロセッサも居 眠りをし なか ったかのよ うに動作を 継続する.し か し ,プ ロト コルWCSが 正当であるために 十分な 居眠り検出は 行ってい る.

(6)

件とし ている.

3. 2 W CS の正当性

プ ロト コルWCSが 同期時間12nの無待機時計合せ プ ロト コルであることを 示す.本論文では ,一部の補 題に 関し ては 証明を 省略する .詳細は 文献[5]を 参照 され たい.

同 期 時 間 を ,プ ロ セッサ が 居 眠 り を し て か ら partial resetを行うまでのステップ 数と,時計調整を 始めてから( 初期状態またはpartial resetを行ってか ら )調整済モード へ移行するまでのステップ 数に 分け て 考え る.プ ロト コルWCSでは ,調整ピ リオド での n回の ステップ 後も調整中モード から 調整済モード へ 移行し ないならば ,Pi.Work count(t− 1) = 6n − 1 なる時刻t

で 時間超過リセットを行う.補題4では , 調整中モード のプ ロセッサが 時計調整を始めてから 居 眠りをし ていない,かつ居眠りリセット を行わないな らば ,Pi.Work count (t− 1) = 6n − 1な る時刻t までに 調整済モード へ移行することを示す.補題7で は ,調整済モード の二つのプ ロセッサが 十分長く居眠 りすることなく動作し 続けているならば ,両者の局所 時 計の 値が 一 致するこ と を 示す.補 題8では ,プ ロ セッサが 居眠りをし てからpartial resetを行うまでの ステップ 数がたかだか6nであることを示す.補題9, 10で ,任意の実行に対し 調整完了性と一致性が 成り立 つことを示す.

時計調整を始めた時刻の前後関係を表すため,ti< tj またはti= tj∧ i > jならば ,(ti, i) ≺ (tj, j)と定義 する.また ,(ti, i) ≺ (tj, j)または(ti, i) = (tj, j)な らば ,(ti, i) (tj, j)とする.プ ロセッサPiの時刻ti の 手 続きsort listに おいて ,list[p] = j,list[p] = j なるプ ロセッサPj,Pj に対し p < pが 成り立つなら ば ,Pj−→

i

tiPj と記す.

手続きsort listのソート の結果に関し て以下の補題 が 成り立つ.

[ 補題1]任意の時刻をtとする.区間[t+2n+1, t+ 5n]において,三つのプ ロセッサPj

1, Pj2, Pj3は正常

に 動 作し 続け,か つpartial resetを 行わな いと す る . また ,(t1, j1) (t2, j2) ≺ (t3, j3), t1 >= t + 4n + 1 か つ t3 <= t + 5nで あ る時刻t1, t2, t3で ,それぞ れ Pj1, Pj2, Pj3 が 手続きsort listを行ったとする.この

とき,Pj

2−→jt33Pj3 ならば ,Pj−→jt11Pj1 な るすべ

てのj

に対し ,Pj−→

j3

t3Pj2またはPj3−→ j3 t3Pj

成り立つ.

steps(Pi, t, t)を 以下のよ うに 定義する .t

< t

と き ,区 間 [t

, t − 1]

で の ステップ 数と す る .また , t = t の と き は steps(Pi, t, t) = 0 とし ,t > t の と き は −steps(Pi, t, t

)

と 定 義 す る .こ の 定 義 よ り,任 意 の t1, t2, t3 に 対し て steps(Pi, t1, t2) + steps(Pi, t2, t3) = steps(Pi, t1, t3)が 成り立つ.プ ロ ト コル より,steps(Pi, t

, t)

に 対し ,以下の事実が 成 り立つ.

[ 事実2]任意のプ ロセッサPi, Pjと 時刻tに 対し , steps(Pi, t, t)が 以下を満たすような時刻tが存在す るならば ,Piは 区間[t, t − 1]のある時刻でPjが 所 有する共有変数を読み出すステップ を行っている.

(a) n <= Pi.W ork count(t − 1) <= 5nまたは7n <= Pi.W ork count(t − 1)ならば ,steps(Pi, t, t) = n

(b) 5n < Pi.W ork count(t − 1) < 7n な ら ば , steps(Pi, t, t) = 2n

(c) Pi.W ork count(t − 1) < n な ら ば ,steps

(Pi, t, t) = 3n − 1

Piが 世代 gの 調整ピ リオド での ステップ 数,すな わち,時刻tsort listを行った後,partial reset 実行するか 調整済モード へ移 行する時刻t まで の ス テップ 数steps(Pi, t + 1, t+ 1)α(Pi, g)と記す.

補 題34 で は ,以 下に 示す 条 件Aを 満た すプ ロ セッサ Piを考え る.

 条件APi が 時 刻 t で partial resetを 実 行し , work(Pi, t + 6n) >= 6nかつ[t, t + 6n]で居眠りリセッ ト を行わない.

条 件Aを 満た す Pi に 対し ,α = α(P¯ i, Pi.Gen(t)) とする.このと き,世代 Pi.Gen(t)の時計調整で Pi が 時 間 超 過 リセット を 行 うな らば ,時 刻 t + 6n で partial resetを 行うので α = n¯ が 成り立つ.よって ,

¯

α < nが 成り立つならば ,Piが 時刻tまでに 調整済 モード へ移行する.

条 件Aを 満た すプ ロセッサ Piが 調 整ピ リオド に い る 区 間 [t + 5n + 1, t + 5n + ¯α]に 属 す る 各 時 刻 s に 対し ,2種 類のプ ロ セッサ readers, dests を 以 下の よ うに 時 刻 t + 5n + ¯αか ら 再 帰 的に 定 義 す る

( 図4).まず,readert+5n+ ¯α= Piとする.時刻sで readersが 読み出す共有変数の所有者をdestsと定義 する .readers, dests(t + 5n + 2 <= s <= t + 5n + ¯α) に 対し ,readers が 時 刻ss − 1で 同じ プ ロセッ サ の 共 有 変 数 の 読 出し を す る な ら ば readers−1 = readers と 定 義し ,異 な る 共 有 変 数 の 読 出し を す るな らば readers−1 = dests と 定 義 す る .こ こ で , dests (t + 5n + 1 <= s < t + 5n + ¯α) の リ スト

(7)

4 プロセッサ,時刻の定義 Fig. 4 Definitions of processors and times.

dlist = destt+5n+1, destt+5n+2, · · · , destt+5n+ ¯α を ,

readersが 同一でありかつ連続するように 分割し た極

大部分 リストdlist1, dlist2, · · · , dlisthを 考え る.各 x(1 <= x <= h)に 対し ,dlistx で 共 通の readers

Pix, dlistx= destsx, destsx+1, · · · , destsxとし ,Pix

が 世代Pix.Gen(s

x− 1)においてsort listを行うなら ば ,その時刻をsort timexとする.ここで ,以下の 補題が 成り立つ.

[ 補題3]すべての x(1 <= x <= h)に 対し ,以下が 成 り立つ.

(a) dlistxの要素はすべて 異なる.

(b) Pix は 区間[t + 2n + 1, s′x− 1]で 居眠りをし ない.

(c) x < h な ら ば(t + 4n + 1, 0) (sort timex, ix) ≺ (sort timex+1, ix+1)

(証明) すべての x(1 <= x <= h)に 対し て 条件が 成り 立つことをx = hの場合から 帰納的に 示す.

ま ず,x = h の 場 合に 条 件(a)(b)が 成 り 立 つ こ と を 示 す.定 義 よ り,Pix = Pi で あ る .ま た , work(Pi, t + 6n) >= 6nより区間[t + 2n + 1, sh− 1] で 居眠りし て いな い .Pi[sh, s

h]で 調整ピ リオド

に あ る の で ,こ の 区 間 で は list の 順に 共 有 変 数 を 読 み 出し て い る .し た が って ,dlisthdests

h

destsh−→isort timeh h Pm−→isort timeh hPi な る す べ

てのPmからなり,dlist

h

の要素はすべて 異なる. 次に ,x + 1, · · · , hに 対し て 条件(a)(b)(c) 成 り 立 つ な らば ,x に 対し て 条 件(a)(b)(c)

成 り 立 つ こ と を 示 す.まず,(b)が 成 り 立 つ こ と を 示す.定 義より,Pix = destsx+1 で あ る .Pix+1 は 時 刻s

x, sx+1 で 連 続し て Pix の 共 有 変 数 を 読 み 出 す.こ こ で ,Pi

x+1 は 時 刻 s

x で 調 整ピ リ オド に い る の でPi

x+1.W ork count(sx− 1) >= 5n で あ り, (sort timex+1, ix+1) (sort timeh, ih)が 成り立つ ので ,2n + 1 <= Pix+1.W ork count(t + 3n) <= 3n 成り立つ.よって,事実2より区間[t + 2n + 1, t + 3n] に Pi

x+1Pix の 共 有変数を 読み 出す ステップ が 存 在する.[t + 3n, sx− 1]Pixが 居眠りをし ている ならば ,遅くとも時 刻 sx までに Pi

x+1 Pix の 居

眠りを 検 知す るか ,時 刻s

x− 1 まで に Pix が 自 身

の 居 眠りに 気づ いて 次世代の 時計調整を 始めている . また ,Pi.W ork count(t + 2n) = 2n が 成 り 立 つの で ,事実2より区間[t + n + 1, t + 2n]PiPix

の 共 有 変数を 読み 出す ステップ が 存在する .よって , [t + 2n + 1, t + 3n − 1]Pixが居眠りをしているなら ば ,Piに必ず検知され る.時刻s

x− 1Pixは調整

ピ リオド に あるので ,Pix.W ork count(t + 5n) >= n が 成り 立 ち ,事実 2より [t + 3n + 1, t + 5n] Pi

の共有変数を 通し てPi

x が 自身の居眠りを 検知する. よって ,時刻sx+1では Pix 以外のプ ロセッサの 共有 変数を読み出すので ,矛盾する.よって ,Pixは 区間 [t + 2n + 1, sx− 1]で居眠りをし ていない.すなわち, (b)が 成り立つ.

また ,時刻 sx− 1Pi

x は 調 整 中モード に い る こ と よ りPix.W ork count(s′x− 1) < 6nが 成り 立 つのでsort time

x >

= t + 4n + 1 が 成 り 立 つ .区 間 [t + 4n + 1, sort timex+1]Pix, Pix+1はともに 居

眠りし て いな いので ,Pix −→

ix+1

sort timex+1 Pix+1

り,(sort timex, ix) ≺ (sort timex+1, ix+1)が 成り 立つ.すなわち,(c)が 成り立つ.

(sort timex, ix) (sort timeh, ih) が 成 り 立 つ の で ,区 間 [sx, s

x] Pix は 調 整 ピ リ オド に あ る.よって,dlistxdestsxdestsx−→

ix sort timex

Pm−→isort timex xdestsx な るプ ロセッサ Pmか ら な

り,dlist

x

の 要素は すべて 異な る.すなわ ち,(a)

成り立つ.

[ 補題4]条件Aを満たすプ ロセッサPiは時刻t+6n までに 調整済モード へ移行する.

(証明) すべてのs (t + 5n + 1 <= s <= t + 5n + ¯α)の間destsが 異なり,かつdestsとし てPiが 現れない ことを示すことにより,α < n¯ が成り立つことを示す.

h = 1の場合,すなわちdlist = dlist1 の場合,補

(8)

3 (a)よりdlistの要素はすべて異なり,またdlistPiが 現れない.し たが って ,α < n¯ が 成り立つ. 次にh > 1の場合を考え る.補題3 (a)より,任意 のx(1 <= x <= h)に対しdlistxの要素がすべて異なる. 以下では ,任意の異な るx, y(1 <= x <= h, 1 <= y <= h) に対し ,Pidlist

x

に現れず,dlist

x

dlist

y

に共 通 要 素が 現れ な い こ と を 示 す.補 題3 (b)よ り,任 意 の x, y(1 <= x < y <= h) に 対し ,Pix は 区 間 [t + 2n + 1, t + 5n]を 含 む区間[t + 2n + 1, sx− 1] で 正 常に 動 作し 続け て い る .また ,補 題3 (c)より, (t + 4n + 1, 0) (sort timex, ix) ≺ (sort timey, iy) が 成り立 つ .し たが って ,Pj1 = Pix, Pj2 = Pi

y−1,

Pj3 = Piy, t1 = sort timex, t2 = sort timey−1, t3 = sort timey と 定 め た と き に 補 題 1 が 成 り 立 つ .す な わ ち ,Pj−→

j1

sort timexPj1 な るプ ロ セ

ッサ Pj に 対 し て ,Pj−→

j3

sort timeyPj2 ま た は

Pj3−→jsort time3 yPjが成り立つ.したがって,dlistxdlist

y

に 共 通 要 素 が 現 れ る こ と は な い .ま た , Pi = Pih な の で ,補 題 1 よ り Pi dlistx に 現

れない.

プ ロト コルWCSでは ,プ ロセッサは すべての 居眠 りを 検知するわけではない.よって,二つのプ ロセッ サPi,Pjが 居眠りするタ イミングに より,Piは「PjPiより後で時計調整を始めた 」と判定するときに , Pjが「PiPjより後で 時計調整を始めた 」と 矛盾 し た判定をする場合がある.この場合,Pi, Pjは互い に 局所時計を参照することなく調整済モード へ移行す ると考えられ る.し かし ,手続きsort listのソート の 結果に 関し て以下の補題が 成り立ち,Pi, Pjが 十分長 く動作し ているならば 両者が 矛盾し た判定をすること はない.

[ 補題5]任 意の 時 刻を t, 任 意の 異な るプ ロセッサ を Pi, Pj と す る .Pi, Pj は それ ぞ れ 時 刻 ti, tj で sort listを 行 い ,か つ ,そ れ ぞ れ 区 間 [ti, t], [tj, t] で partial resetを 行 わ な か った と す る .こ の と き , work(Pi, t) > 4n か つ work(Pj, t) > 4n な ら ば , Pj−→itiPiまたはPi−→jtjPjが 成り立つ.

手続きadjustの説明で述べたように,プ ロセッサPi が 自分の局所時計をある時刻ti,jでプ ロセッサPjの 局所時計に 合わせた ,またはPjの局所時計と一致す ることを 確認し たあと ,PiPj の局 所時計を 棄却 することがある.し かし ,ti,j 以降にPi, Pjがともに partial resetをすることなく動作し 続け るよ うな 場合 には 以下の補題が 成り立つ.

[ 補題6]任意の異なるプ ロセッサPi, Pjに対し ,あ る時刻tPi, Pjがともに 調整済モード であったと し ,work(Pi, t) > 4n, work(Pj, t) > 4nが 成り立つ とする.また ,時刻ti,jPiは自分の局所時計をPj の局所時計に 合わせた ,または Pjの局所時計と一致 することを確認し たとし ,区間[ti,j, t]Pi, Pjはと もにpartial resetを行わないとする.このとき,区間 [ti,j, t]PiPjの局所時計を棄却し ない.

[ 補題7]任 意の 時 刻を t, 任 意の 異な るプ ロセッサ を Pi, Pj と す る .時 刻 tPi, Pj が と も に 調 整 済モ ード で あった と す る .こ のと き ,work(Pi, t) > 4n, work(Pj, t) > 4n な ら ばPi.Clock(t) = Pj.Clock(t)が 成り立つ.

(証明) Pi, Pjは,それぞれ世代Pi.Gen(t), Pj.Gen(t) の時計調整において,sort listを行っている.Pi, Pjが sort listを 行った 時刻をそれぞれ ti, tj と すると 補題 5よりPj−→itiPiまたはPi−→jtjPjが 成り立つ.一

般性を失うことなく,Pj−→

i

tiPiと仮定する.このと

き,Piは 世代Pi.Gen(t)のあ る時刻t

で 自分の局所 時計をPjの局所時計の値と合わせるか,一致している ことを確認し ,区間[t, t]Pjはpartial resetを 行 わない.よって,Pi.Clock(t

) = P

j.Clock(t− 1) + 1 が 成り立つ .ここで ,補題6より,区間[t

, t]

PiPjの局所時計を 棄却することはない.また ,区間 [t, t]Pi, Pjはともにpartial resetをすることはな いので ,それぞれ ステップご とに 局所時計の値を1ず つ増やす.し たが って,

steps(Pi, t, t) = steps(Pj, t, t) (1)

で あ るこ と を 示せば よい .こ こで ,t >= t − 4n + 1 ならば ,区間 [t, t]では Pi, Pjは と もに 正常に 動 作 し 続け るので 明らかに 式(1)は 成り立つ .以下では , t< t − 4n + 1の場合を考え る.

事 実 2 よ り,区 間 [t − 4n + 1, t − n] の あ る 時t′′PiPj の 局 所 変 数 を 読 出し す る ス テッ プ を 行って お り,また t′′(<= t − n) よ り 後でPj は Pi の 局 所 変 数 を 読 出し す る ス テップ を 行って い る . 区 間[t

, t]

Pi, Pj は と もにpartial resetを 行わな いので ,区 間 [t

, t′′]

の 各 ステップ で PiPi また は Pj の 居 眠りを 検知す ることは な い .し たが って , steps(Pi, t, t′′) = steps(Pj, t, t′′)であ る.更に ,区[t,

′′t]

ではPi, Pjはともに 正常に 動作し 続け るの でsteps(Pi, t,

′′t) = steps(Pj, t,′′t)が 成り立つ .し たが って ,式(1)は 成り立つ.

(9)

次の補題で ,居眠りをし てからpartial resetを行う までの ステップ 数を考察する.

[ 補題8]プ ロセッサPiが 時刻tでpartial reset 実行し たならば ,work(Pi, t) < 6nが 成り立つ. (証明) Piは時刻tPjが所有する共有変数を読み出 すとし ,tより前で最後にPiVjを読み出すステップ を行った時刻をt

とする.時刻tのpartial resetが 時 間超過リセットならば ,補題4よりwork(Pi, t) < 6n が 成り立つ.時刻tのpartial resetが 居眠りリセット ならば ,以下の(a)(c)の条件式の うちいずれかが 成 り立つ.

(a) 42行:Pi.W ork count(t − 1) >= n か つ Pi.diff (t) < 0

(b) 43行:Pi.W ork count(t − 1) >= n か つ Pj.Invalidi>= Gen

(c) 74–75Pi.Sync(t−1) ⊂ Pj.Async (t−1), Pj.Sync |= ∅かつPi.Clock(t − 1) |= Pj.Clock(t − 1) (a)(b)が 成り立つ場合に work(Pi, t) < 6nが 成り 立つことは ,事実2を用いて示され る.以下では ,(c) が 成り立つ場合を考察する.

時刻tで第76行を行うことよりPi.W ork count(t− 1) < 6nで あ り,Pi.Sync(t − 1) |= ∅ よ り Pi

5n <= Pi.W ork count(tm− 1) < Pi.W ork count(t − 1) で あ る 時 刻 tm で ,調 整 済 モ ード の プ ロ セッ サ Pm の 局 所 時 計 と 自 分 の 局 所 時 計 を 合 わ せ る か ,一 致し て い る こ と を 確 認し て い る .こ の と き , Pi.Clock(tm) = Pm.Clock(tm− 1) + 1が 成り立つ. 以下では ,work(Pi, t) >= 6nを仮定し て矛盾を導く.

Pi, Pj t 以 前 で 最 後 に sort listを 行った 時 刻 を そ れ ぞ れ ti, tj と す る .ま た ,Pit 以 前 で 最 後に partial reset を 行った 時 刻 を t0, す な わ ち W ork count(t0) = 0 と す る .た だ し ,t 以 前 に partial resetを行っていないならば ,t0= 0とする. work(Pi, t) >= 6nか つPi.W ork count(t − 1) < 6n よ り,Pi[t0, t] で は 居 眠 り す る こ と な く 正 常 に 動 作し 続 け る .事 実 2 よ り,[t0 + 1, t0+ n] に Pi Pj, Pm それ ぞ れ の 局 所 変 数 を 読 み 出 す ス テ ップ が 存 在 す る .ま た ,Pi は ,tm よ り 前 で Pm の ,t よ り 前 で Pj の 居 眠 り を 検 知し な い .し た が って ,work(Pm, tm− 1) >= tm− t0 − n > 4n, work(Pj, t − 1) > work(Pj, tm− 1) > 4nが 成り立 つ.以下,時刻tm− 1でのPjのモード に より場合 分けし て考える.

(c1) 時刻tm− 1Pjが 調整済モード の場合

補題7よりPm.Clock(tm− 1) = Pj.Clock(tm− 1) が 成り立つ.区間[tm, t − 1]Pi, Pjが 居眠りする ことはないので ,Pi.Clock(t − 1) = Pj.Clock(t − 1) が 成り立ち,(c)に 矛盾する.

(c2) 時刻tm− 1Pjが 調整中モード の場合 Pi, Pj は と も に tm− 3n(> t − 4n) 以 降 の 各プ ロ セッサのWork count の値を もとにsort listを 行 う. Pi, Pj, Pm[tm−3n, tm−1]で正常に動作し 続けるの で,Pm−→it

iPjよりPm−→ j

tjPjが成り立つ.したが

って,Pjは世代Pj.Gen(t−1)中のある時刻tmPm の局所時計に自分の局所時計を合わせるか,Pmと自分 の局所時計が 一致することを確認し ている.すなわち, Pj.Clock(tm) = Pm.Clock(tm− 1) + 1が 成り立つ. Pmは区間[tm, tm− 1]または[tm, tm− 1]で正常に動 作し 続け,Pjは区間[tm, t−1]で正常に動作し 続ける. し たが って ,steps(Pj, tm, t) = steps(Pm, tm, tm) + steps(Pi, tm, t)よりPi.Clock(t − 1) = Pj.Clock(t − 1)が 成り立ち,(c)に 矛盾する.

[ 補題9]( 調整完了性 ) 任 意 の t >= 1, 任 意 の プ ロ セッサ Pi に 対 し ,work(Pi, t − 1) >= 12n ら ば Pi.M ode(t − 1) = “adjusted” が 成 り 立 ち ,work(Pi, t) > 12n な ら ば Pi.Clock(t) = Pi.Clock(t − 1) + 1が 成り立つ.

(証 明) プ ロ セッサ Pi t − 12n 以 前 で 最 後 に 居 眠 り し た 時 刻 を tn と す る と ,tn 以 降 の 時 刻 t partial reset を 実 行し た 場 合 ,補 題 8 よ り, work(Pi, t) < 6nが成り立つ.よって,work(Pi, t) >= 12nならば ,Piは時刻t−6n以降にpartial resetを行 うことはない.よって,Pi.W ork count(t−1) >= 6n 成り立ち,補題4よりPi.M ode(t − 1) = “adjusted” が 成 り 立 つ .また ,work(Pi, t) > 12n な らば ,Pi

は 時 刻 t で 調 整 済 モ ード の ス テップ を 行 う の で Pi.Clock(t) = Pi.Clock(t − 1) + 1が成り立つ.

[ 補題10]( 一致性 ) 任意のt >= 1,任意のプ ロセッサ Pi, Pjに対し ,work(Pi, t) >= 12n, work(Pj, t) >= 12n ならばPi.Clock(t) = Pj.Clock(t)が 成り立つ. (証明) 補題9より,Pi.M ode(t − 1) = “adjusted” かつPj.M ode(t − 1) = “adjusted”であ る.よって , 補題7よりPi.Clock(t) = Pj.Clock(t)が 成り立つ.

[ 定理11]プ ロトコルW CSは ,同期時間12nの無 待機時計合せプ ロト コルである.

また ,同期時間に 関し て以下の定理が 成り立ち,プ ロト コルWCSの同期時間はオーダ 的に最適である.

図 2 プロトコル WCS Fig. 2 Protocol WCS .
図 4 プロセッサ,時刻の定義 Fig. 4 Definitions of processors and times.

参照

関連したドキュメント

本研究で は,ケ ーソ ン護岸連結 目地内へ不規則波が入射 する場合を対象 と して,目 地内での流体運動特性,特 に,流 体共 振現象 の発生 の有無,発 生条件お

(表2)。J-CAPRAポイントを合計したJ-CAPRA スコアについて,4以上の症例でPFSに有意差

国民の「知る自由」を保障し、

現行選挙制に内在する最大の欠陥は,最も深 刻な障害として,コミュニティ内の一分子だけ

Instagram 等 Flickr 以外にも多くの画像共有サイトがあるにも 関わらず, Flickr を利用する研究が多いことには, 大きく分けて 2

b)工場 シミュ レータ との 連携 工場シ ミュ レータ は、工場 内のモ ノの流 れや 人の動き をモ デル化 してシ ミュレ ーシ ョンを 実 行し、工程を 最適 化する 手法で

★代 代表 表者 者か から らの のメ メッ ッセ セー ージ ジ 子どもたちと共に学ぶ時間を共有し、.

である水産動植物の種類の特定によってなされる︒但し︑第五種共同漁業を内容とする共同漁業権については水産動