関数型言語による Timed CSP 検証技法の提案 数理情報科学専攻 山川 武志 シングルコアからマルチコアへ • シングルコアの問題 CORE – 発熱、消費電力 – クロックの限界 • マルチコア(プロセッサ) – 高速処理 – 低消費電力 February 5, 2010 CORE CORE CORE CORE Yamakawa Takeshi 2 並列処理の問題 プロセスA プロセスB プロセスC • 複数の流れを考慮した 設計が必要 – 競合の危険性 – デッドロック • デバック&検証が困難 February 5, 2010 Yamakawa Takeshi 3 形式手法(Formal method) • システム開発の課題 – システムが複雑になるにつれ、テスト工程が増大 – 潜在的なバグを持ったまま運用の可能性あり 要求 分析 設計 仕様 実装 テスト・ デバック 運用 保守 設計ミス発覚! モデル 検証 February 5, 2010 Yamakawa Takeshi 4 形式手法(Formal method) • システム開発の課題 – システムが複雑になるにつれ、テスト工程が増大 – 潜在的なバグを持ったまま運用の可能性あり 要求 分析 設計 仕様 仕様書 形式仕様記述 自然言語 図、表 CSP,VDM B-Method Z記法 モデル 検証 • 形式手法 – 設計の工程で仕様記述言語を使用 – 設計の誤り、曖昧さを早い段階で除去 February 5, 2010 Yamakawa Takeshi 5 CSP(communicating sequential processes) • CSP理論では並行システムを、チャネルにより通信(communicating)を 行う逐次プロセス(sequential processes)の群として設計する。 • プロセスはイベント、通信によって状態変化し、その動きは下記の代数 演算子によって定義される。 PROC := | | | | | | | | | | | | | | SKIP STOP ch!v → ch?x → PROC \ PROC [e1←e2] PROC ; PROC △ PROC > PROC □ PROC П PROC ||| PROC [|c|] PROC || if b then PROC February 5, 2010 PROC PROC {c} PROC PROC PROC PROC PROC PROC PROC PROC else (正常終了) (停止) (output) (input) (hiding) (renaming) (sequential) (interrupt) (untimed timeout) (external choice) (internal choice) (interleaving) (sharing) (parallel) PROC (boolean) Yamakawa Takeshi P1 ch1 P2 ch2 P3 6 CSP(communicating sequential processes) • CSP理論では並行システムを、チャネルにより通信(communicating)を 行う逐次プロセス(sequential processes)の群として設計する。 • プロセスはイベント、通信によって状態変化し、その動きは下記の代数 演算子によって定義される。 P1 P2 = ch1!10 → P2’ P1 = (ch1?x → P1’) □ (ch2!3 → SKIP) P3 = ch2?x → if x=0 then SKIP else P3’ ch1 P2 ch2 P3 P1 || P2 || P3 February 5, 2010 Yamakawa Takeshi 7 CSP(communicating sequential processes) • CSP理論では並行システムを、チャネルにより通信(communicating)を 行う逐次プロセス(sequential processes)の群として設計する。 • プロセスはイベント、通信によって状態変化し、その動きは下記の代数 演算子によって定義される。 P1’ P2 = ch1!10 → P2’ P1 = (ch1?x → P1’) □ (ch2!3 → SKIP) P3 = ch2?x → if x=0 then SKIP else P3’ P1 || P2 || P3 February 5, 2010 ch1.10 P2’ ch1 ch2 P3 P1’ || P2’ || P3 Yamakawa Takeshi 8 プロセスのtrace&failure • CSPで記述したプロセスはtraceや failureといった集合でとらえられる。 – Traces(P) P1’ • プロセスPの実行可能なイベント列(trace) すべての集合 P2’ ch1 ch2 P3 – Failures(P) • プロセスPのtrace trとその時点で 実行不可能なイベント集合Xの組(tr,X)の集合 February 5, 2010 Yamakawa Takeshi 9 Verification&Refinement • CSPで記述したモデルは仕様を満たしている かどうかを数学的にチェックできる – trace refinement(安全性) • SPEC SPEC T P ⇔ Traces(SPEC) ⊇ Traces(P) P2 = ch1!10 → P2’ P1 = (ch1?x → P1’) □ (ch2!3 → SKIP) P3 = ch2?x → if x=0 then SKIP else P3’ P = P1 || P2 || P3 P P1 P2 P3 SPEC = ch1.v → ch2.v’ → SPEC February 5, 2010 Yamakawa Takeshi 10 ツールの必要性 Verification Design Implementation ✔ OK × failure • 利便性や人為的なミスを防ぐためには検証 ツールの利用が望ましい。 • 現在、CSPを拡張した理論であるTimed CSP に関するツールがない。 Timed CSP検証用ツールの開発へ February 5, 2010 Yamakawa Takeshi 11 TIMED CSP • TIMED CSPは時間に関する代数演算子をCSPに加え、さらに理論を拡 張したものである。 • 時間を考慮した動作が表現可能であり、各プロセスはイベント、通信、時 間によって状態変化する。 PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) ch?x d → PROC • | WAIT wait process (input) | PROC \ {c} (hiding) • | c@u P(u) timed event prefix PROC→ [e1←e2] (renaming) | PROC ; PROC (sequential) d • | cPROC → P △ timed PROC prefix (interrupt) d | PROC > PROC (untimed timeout) • P►Q timeout | PROC □ PROC (external choice) PROC interrupt (internal choice) • | PPROC △d Q П timed | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) February 5, 2010 Yamakawa Takeshi 3 time P1 P2 P3 12 TIMED CSP • TIMED CSPは時間に関する代数演算子をCSPに加え、さらに理論を拡 張したものである。 • 時間を考慮した動作が表現可能であり、各プロセスはイベント、通信、時 間によって状態変化する。 PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) ch?x d → PROC • | WAIT wait process (input) | PROC \ {c} (hiding) • | c@u P(u) timed event prefix PROC→ [e1←e2] (renaming) | PROC ; PROC (sequential) d • | cPROC → P △ timed PROC prefix (interrupt) d | PROC > PROC (untimed timeout) • P►Q timeout | PROC □ PROC (external choice) PROC interrupt (internal choice) • | PPROC △d Q П timed | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) February 5, 2010 Yamakawa Takeshi 5 time P1’ P2 P3 13 TIMED CSP • TIMED CSPは時間に関する代数演算子をCSPに加え、さらに理論を拡 張したものである。 • 時間を考慮した動作が表現可能であり、各プロセスはイベント、通信、時 間によって状態変化する。 PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) ch?x d → PROC • | WAIT wait process (input) | PROC \ {c} (hiding) • | c@u P(u) timed event prefix PROC→ [e1←e2] (renaming) | PROC ; PROC (sequential) d • | cPROC → P △ timed PROC prefix (interrupt) d | PROC > PROC (untimed timeout) • P►Q timeout | PROC □ PROC (external choice) PROC interrupt (internal choice) • | PPROC △d Q П timed | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) February 5, 2010 Yamakawa Takeshi 5 time P1’ P2 P3’ 14 Timed CSP Explorerの開発 • ツールの開発には関数型言語MLを用 いた。 • Timed CSPのプロセスはイベントまたは 時間により次のプロセスに移る。 P ch.10 P: event∪time → process P’ P(ch.10) ≡ P’ • プロセスはイベントを引数にとりプロセス (関数)を返す関数としてとらえる。 February 5, 2010 Yamakawa Takeshi 15 Timed CSP Explorer構成 • コード生成部 – CSP記述を解析し、実行用ML記述を 出力する。 • CSP検証部 – 代数演算子等を関数定義し、ML記述を 実行する。 CSP記述 コード生成部 channel in,out:Int P = in?x -> out!fact(x) -> P fact(x) = if x>1 then x*fact(x-1) else 1 February 5, 2010 CSP検証部 Yamakawa Takeshi ML記述 channel in,out:Int fun P = prefix( input(in,x), prefix( output(out,fact(x)), Recur(P) ) fact(x) = if x>1 then x*fact(x-1) else 1 16 コード生成部 • コンパイラの字句解析、構文解析技術 を用いてプロセスの構造を木構造でと らえる。 • 木を行きがけ順(根→左→右)で探索 しながら目的のMLコードを出す。 TEST = out!10 → ( (a → P || b → Q) △t1 c →t2 R ) test = prefix(out.10, tinterrupt( parallel( prefix(a,P), prefix(b,Q) ), Time t1, tprefix(c, Time t2, R ) ) ) February 5, 2010 Yamakawa Takeshi 17 CSP検証部 • 生成部により出力された関数はCSP プロセスの実装になっている。 • プロセスに対応した関数にイベントを 与えることで、プロセスの振る舞いを 検査することができる。 TEST = out!10 → ( (a → P || b → Q) △t1 c →t2 R ) test = prefix(out.10, tinterrupt( parallel( prefix(a,P), prefix(b,Q) ), Time t1, tprefix(c, Time t2, R ) ) ) February 5, 2010 Yamakawa Takeshi 18 例 Fischer’s algorithm • 相互排他アルゴリズム • 共有変数によりenterできるプロセスを唯一に制御 Qi = req.i → read?x → if x≠0 then SKIP else ( write!i → enter.i → exit.i → SKIP ) V(value) = read!value → V(value) [] write?i → V(i) FISCHER = (|||n∈3Qn) || V(0) enter.1 req.1 FISCHER enter.2 Q1 write write exit.3 req.3 Q2 read enter.3 exit.2 req.2 SPEC = [] n∈3 enter.i → exit.i → SKIP SPEC exit.1 Q3 0 read write read 2 0 Shared variable V February 5, 2010 Yamakawa Takeshi 19 例 Fischer’s algorithm • 相互排他アルゴリズム • 共有変数によりenterできるプロセスを唯一に制御 Qi = req.i → read?x → if x≠0 then SKIP else ( write!i → enter.i → exit.i → SKIP V(value) = read!value → V(value) [] write?i → V(i) FISCHER = (|||n∈3Qn) || V(0) enter.1 req.1 FISCHER enter.2 exit.2 req.2 SPEC = [] n∈3 enter.i → exit.i → SKIP SPEC exit.1 Q1 write read exit.3 req.3 Q2 0 enter.3 write Q3 0 read write read 0 February 5, 2010 Yamakawa Takeshi 20 例 Fischer’s algorithm • 相互排他アルゴリズム • 共有変数によりenterできるプロセスを唯一に制御 Qi = req.i → read?x → if x≠0 then SKIP ε else ( write!i → read?y → if y≠i then SKIP δ else enter.i → exit.i → write!0 → SKIP ) ► STOP V(value) = read!value → V(value) [] write?i → V(i) enter.1 FISCHER = (|||n∈3Qn) || V(0) req.1 SPEC = [] n∈3 enter.i → exit.i → SKIP SPEC exit.1 enter.2 exit.2 req.2 Q1 write read exit.3 req.3 Q2 0 1 enter.3 write Q3 1 0 read write read FISCHER 2 1 0 February 5, 2010 Yamakawa Takeshi 21 まとめ • 研究結果 – 関数型言語の利点をいかすことでCSPのプ ロセスを簡潔に実装できることを示したうえで、 Timed CSPプロセスの実装を行った。 – 自動検証ツールTimed CSP Explorerを試作 しそれを用いて排他制御アルゴリズムの検証 を行った。 • 今後 – リアルタイムシステムの設計、検証に応用し ていく。 – 大規模システムに耐えうる状態圧縮のアルゴ リズムの考案とその実装を行う。 February 5, 2010 Yamakawa Takeshi 22
© Copyright 2024 ExpyDoc