Slide 1

Slide 1 text

アクターモデル 情報通信研究機構 サイバーセキュリティ研究室 ⾼野 祐輝

Slide 2

Slide 2 text

アクターモデルとは • 並⾏計算モデルの⼀つ • 1973年にCarl Hewittが発明 • アクターと呼ばれるプロセス同⼠が通信をしあって計算を⾏う • 計算能⼒はラムダ計算と等価(チューリング完全) • プログラミング⾔語 • Erlang, Scala/Akka 2 アクターA アクターB メッセージ

Slide 3

Slide 3 text

π計算との違い 3 通信の同期⽅法 通信⼿法 メモリモデル π計算 同期通信 チャネルベース通信 共有メモリ アクターモデル ⾮同期通信 直接通信 分散メモリ

Slide 4

Slide 4 text

ラムダ計算を拡張したアクター⾔語 • アクターモデルの操作的意味論を記述 • ラムダ計算に、並⾏の概念を導⼊して実現 4

Slide 5

Slide 5 text

構⽂ 5 w ஫ऍ w ΞτϜͱ͸EFpOFఆ਺ͷΑ͏ͳ΋ͷ w ϖΞͷQS ͸ɺλϓϧͷ ͷΑ͏ͳ΋ͷ w JTQS ͸ϖΞ͔Ͳ͏͔Λݕࠪ͢Δؔ਺ w TU OE͸ɺϖΞͷ൪໨ɺ൪໨ͷཁૉΛऔಘ͢ Δؔ਺ A = {true, false, nil, . . . } ΞτϜ N = {0, 1, 2, . . . } ࣗવ਺ X = {x, y, z, . . . } ม਺ F = {+, , =, ispr?, 1st, 2nd, . . . } ϓϦϛςΟϒԋࢉࢠ V ::= ஋ A | N | X | X.E ϥϜμந৅ | pr(V, V) ϖΞίϯετϥΫλ E ::= ࣜ V | pr(E, E) ϖΞίϯετϥΫλ | E(E) ؔ਺ద༻ | F(E, . . . , E) ϓϦϛςΟϒؔ਺ద༻ | br(E, E, E) ৚݅෼ذ | letrec X = E in E ࠶ؼఆٛ | send(E, E) ϝοηʔδૹ৴ | new(E) ΞΫλʔੜ੒ | ready(E) ৼΔ෣͍มߋ

Slide 6

Slide 6 text

糖⾐構⽂ 6 let x = e1 in e2 x.e2(e1) seq(e1, e2) let z = e1 in e2 ͨͩ͠ z ͸৽ن seq(e1, . . . , en) seq(e1, seq(e2, . . . , seq(en 1, en)) . . . ) ͨͩ͠ n 3 if(e1, e2, e3) br(e1, z.e2, z.e3)(nil) ͨͩ͠ z ͸৽ن rec(f) x.f( y.x(x)(y))( x.f( y.x(x)(y))) • 注釈 • let x = 1, y = 2 in e というように、複数定義も可能 • この場合は、λy.λx.e(2)(1) と等価 • rec(f)はZコンビネータ(不動点コンビネータ)

Slide 7

Slide 7 text

束縛変数と⾃由変数 • ラムダ抽象と、letrec式のみが束縛 • その他の変数は⾃由変数 7 x.E ͸ E ͸ E தͷࣗ༝ม਺ x Λଋറ letrec x = E1 in E2 ͸ E1, E2 தͷม਺Λଋറ

Slide 8

Slide 8 text

操作的意味論 • アクターコンフィグレーション • 各アクターの状態と、メッセージの集合 • アクターモデルの操作的意味論 • アクターコンフィグレーションからアクターコンフィグレーションへの 遷移について規定したもの • ラベル付き状態遷移 8

Slide 9

Slide 9 text

アクターコンフィグレーション 9 ΞΫλʔίϯϑΟάϨʔγϣϯ ͸ҎԼͷΑ͏ʹදه͞ΕΔɻ || µ ͨͩ͠ɺ ͸໊લ෇͖ΞΫλʔͷू߹Ͱ͋Γɺ µ͸ૹ৴தͷϝοηʔδͷू߹Ͱ͋Δɻ ͸ΞΫλʔ໊͔ΒΞΫλʔࣜ΁ͷࣸ૾Ͱ΋͋Δɻ ͋ΔΞΫλʔ a ΁ͷϝοηʔδ͸ a v ͱදه͞ΕΔɻ ͜͜Ͱ v ͸ϝοηʔδதʹؚ·ΕΔ஋Ͱ͋Δɻ

Slide 10

Slide 10 text

アクターコンフィグレーションの例 10 a b 1 (メッセージ) 2つのアクターaとbが存在しており、 アクターaへ1というメッセージが配送中 [ࣜ1 ]a , [ࣜ2 ]b || a 1

Slide 11

Slide 11 text

簡約コンテキスト 11 ͋ΔΞΫλʔࣜ e ͸ҎԼͷΑ͏ʹදݱ͞ΕΔɻ e = R ӈลͷදݱΛ؆໿ίϯςΩετͱ͍͍ɺ͸ࣜ e ͷ࣍ʹධՁ͞ΕΔࣜͰ͋Γɺ R ͸ࣜ e தͷ ʹ૬౰͢Δ෦෼Λ Ͱஔ͖׵͑ͨ΋ͷͰ͋Δɻ ྫ send(new(e), 10) = send( , 10) new(e)

Slide 12

Slide 12 text

簡約可能な式と簡約コンテキストの構⽂ 12 Er ::= ؆໿Մೳͳࣜ V(V) ϥϜμద༻ | F(V, . . . , V) ؔ਺ద༻ | br(V, E, E) ৚࣮݅ߦ | letrec X = V in E ࠶ؼఆٛ | send(V, V) ϝοηʔδૹ৴ | new(V) ΞΫλʔੜ੒ | ready(V) ৼΔ෣͍มߋ R ::= ؆໿ίϯςΩετ Hole | pr(V, R) ϖΞίϯετϥΫλ | pr(R, E) ϖΞίϯετϥΫλ | V(R) ϥϜμద༻ | R(E) ϥϜμద༻ | F(V, . . . , V, R, E, . . . , E) ؔ਺ద༻ | br(R, E, E) ৚࣮݅ߦ | letrec X = R in E | send(V, R) ϝοηʔδૹ৴ | send(R, E) ϝοηʔδૹ৴ | new(R) ΞΫλʔੜ੒ | ready(R) ৼΔ෣͍มߋ

Slide 13

Slide 13 text

拡張ラムダ計算の簡約規則 13 x.e(v) e{x/v} f(v1, . . . , vn) v ͨͩ͠ɺ f F, v = [[f]](v1, . . . , v2) br(true, e, ) e br(false, , e) e 1st(pr(v, )) v 2nd(pr( , v)) v letrec x = v in e e{x/v{x/(letrec x = v in v)}}

Slide 14

Slide 14 text

操作的意味論 14 e e , [R e ]a || µ [fun:a] , [R e ]a || µ , [R new(b) ]a || µ [new:a,a ] , [R a ]a, [ready(b)]a || µ ͨͩ͠ɺ a ͸৽ن , [R send(a , v) ] || µ [snd:a] , [R nil ]a || µ { a v } , [R ready(b) ]a || { a v } µ [rcv:a,v] , [b(v)]a || µ

Slide 15

Slide 15 text

簡約の例 15 a b 10 [ ready(e1) ]a, [seq( , ready(e2)) send(a, 10)) ]b || [snd:a] [ ready(e1) ]a, [seq( , ready(e2)) nil) ]b || a 10 [ ready(e1) ]a, [ ready(e2) ]b || a 10 [rcv:a,10] [ e1(10) ]a, [ ready(e2) ]b || (seqの箇所は⼀部省略)

Slide 16

Slide 16 text

計算⽊ (computation tree) 16 κ0 κ1 κ1ʼ κ2 κ2ʼ κ2ʼʼ κ3 計算⽊の例 l1 ΛΞΫλʔίϯϑΟάϨʔγϣϯͱ͢Δͱ͖ɺܭࢉ໦ ( ) ͸ɺز͔ͭͷ n N ʹର͢Δɺશͯͷ ༗ݶϥϕϧ෇͖ભҠྻ [ i li+1 i+1 |i < n] ͷू߹Ͱ͋Δɻ͜͜Ͱɺ = 0 Ͱ͋Γɺ N ͸൒ॱংू߹Ͱ͋Δɻ l1ʼ l2 l2ʼ l2ʼʼ l3 N = {0, 1, 1 , 2, 2 , 2 , 3} 0 < 1, 0 < 1 , 1 < 2, 1 < 2 , 1 < 2 , 2 < 3 ൒ॱংू߹ͷԼʹఆٛ͞ΕΔྻΛܭࢉྻ (computation sequence ) ͱݺͼɺ શॱংू߹΋ͱʹఆٛ͞ΕΔྻΛܭࢉ࿏ (computation path) ͱݺͿɻ 計算列 計算路 ( ) ΛɺΞΫλʔίϯϑΟάϨʔγϣϯ ͔Β ౸ୡՄೳͳύεͷશू߹ͱදهɻ

Slide 17

Slide 17 text

公平性 17 ͋ΔભҠϥϕϧ l ͕༗ޮͰ͋ΔͨΊͷඞཁे෼৚݅͸ɺ l ͱͳΔ ͕ଘࡏ͢Δ͜ͱͰ͋Δɻ ͜͜Ͱɺ͋ΔભҠϥϕϧ [rcv : a, v] ͕ӬଓతʹແޮԽ͞ΕΔͷ͸ɺ ΞΫλʔ a ͕ೋ౓ͱϝοηʔδͷड৴ঢ়ଶʹͳΒͳ͍ͱ͖Ͱ͋Δɻ ͋Δܭࢉ໦ ( ) தͷɺ͋Δܭࢉ࿏ = [ i li+1 i+1 |i < ] ͕ެฏͰ͋Δͱ͸ɺ ͦΕͧΕͷ༗ޮͳભҠϥϕϧ͕࠷ऴతʹى͖Δɺ΋͘͠͸ӬଓతʹແޮԽ͞ΕΔͱ͖Ͱ͋Δɻ ( ) தͷશͯͷެฏͳܭࢉ࿏ͷू߹Λ F( ) ͱදهɻ

Slide 18

Slide 18 text

公平性の例 18 A セマフォ B acquire acquire A ok A 計算 セマフォ release A セマフォ acquire A ok time ・ ・ ・ Aしか実⾏できない公平でない計算路 (飢餓状態) A S B acquire acquire A ok 終了 計算 Aしか実⾏できないが公平な計算路 Sは永続的にメッセージを⾮受信状態に移⾏

Slide 19

Slide 19 text

例:排他実⾏ 19 sem = rec(λb.λh.λm. if(get?(m), if(h = nil, seq(send(cust(m), true), ready(b(cust(m)))), seq(send(cust(m), false), ready(b(h))), if(release?(m), ready(b(nil)), ready(b(h))))) customer = rec(λb.λself.λs.λm. seq(if(m, seq(/* critical section */, send(s, mkrelease(self))), send(s, mkget(self))), ready(b(self)(s)))) // 補助関数 mkget = λh.pr(true, h) mkrelease = pr(false, nil) get? = λm.if(ispr?(m), 1st(m), false) release? = λm.if(ispr?(m), not(1st(m)), false) cust = λm.2nd(m) // 消費者が2⼈で実⾏する例 letrec s = new(sem(nil)), a = new(customer(a)(s)), b = new(customer(b)(s)) in seq(send(a, false), send(b, false))

Slide 20

Slide 20 text

EOF 20