関数型言語による Timed CSP 検証技法の提案

Slides:



Advertisements
Similar presentations
並列プログラミング言語による Dining Philosophers Problem の検証 大井 謙 数理科学コース 4 年 福永研究室 2010 年 3 月 4 日 ( 木 ) 1.
Advertisements

P2P 技術を応用した 分散システムの排他制御機構の試作 九州工業大学 情報科学センター 山之上 卓.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
システム開発におけるユーザ要求の 明示的表現に関する一検討
モデル検査の応用 徳田研究室 西村太一.
シーケンス図の生成のための実行履歴圧縮手法
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
東京工科大学 コンピュータサイエンス 亀田弘之
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2011年10月17日
OJT研修 「テスト実施、テスト設計の技術習得」 日時: 8月22日(月)  場所: 本社5階.
言語処理系(4) 金子敬一.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
MATLAB測位プログラミングの 基礎とGT (1)
データ構造と アルゴリズム 知能情報学部 新田直也.
コンパイラ 2012年10月15日
CSP記述によるモデル設計と ツールによる検証
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
Occam言語による マルチプリエンプティブシステムの 実装と検証
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室
型付きアセンブリ言語を用いた安全なカーネル拡張
静的情報と動的情報を用いた プログラムスライス計算法
Cプログラミング演習 中間まとめ2.
高速剰余算アルゴリズムとそのハードウェア実装についての研究
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
決定木とランダムフォレスト 和田 俊和.
5 テスト技術 5.1 テストとは LISのテスト 故障診断 fault diagnosis 故障解析 fault analysis
7 ソフトウェア工学 Software Engineering モデル検査 MODEL CHECKING.
コンポーネント連携によるサービスを オーバレイネットワーク上で 実現するためのサービス設計技法の提案
巡回冗長検査CRC32の ハード/ソフト最適分割の検討
社会シミュレーションのための モデル作成環境
通信機構合わせた最適化をおこなう並列化ンパイラ
進化的計算手法の並列計算機への実装 三木 光範
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
不確実データベースからの 負の相関ルールの抽出
バイトコードを単位とするJavaスライスシステムの試作
知能情報システム特論 Introduction
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報論理工学 研究室 研究テーマ 並列アルゴリズム.
東京工科大学 コンピュータサイエンス学部 亀田弘之
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
モデル検査(5) CTLモデル検査アルゴリズム
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
総合講義B:インターネット社会の安全性 第7回 情報システムの信頼性
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
並列処理プロセッサTPCOREの 組み込みシステムへの応用 理工学研究科数理情報科学専攻 福永 力,岩波智史,情報システム研究室.
INTRODUCTION TO SOFTWARE ENGINEERING
4 形式的設計検証技術 検証 verification 形式的検証 (4.1.2)
形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
第6回放送授業.
SMP/マルチコアに対応した 型付きアセンブリ言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コンパイラ 2012年10月11日
コードクローン解析に基づく デザインパターン適用候補の検出手法
BSPモデルを用いた 最小スパニング木 情報論理工学研究室 02-1-47-134 小林洋亮.
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
アジャイル開発プロセス 森口朋広.
1.2 言語処理の諸観点 (1)言語処理の利用分野
Presentation transcript:

関数型言語による Timed CSP 検証技法の提案 数理情報科学専攻 山川 武志

シングルコアからマルチコアへ シングルコアの問題 マルチコア(プロセッサ) 発熱、消費電力 クロックの限界 高速処理 低消費電力 CORE コンピュータの性能向上にあたって単一CPUのクロックを上げることで・・・ マルチコアでの並列処理に移行 CORE CORE February 5, 2010 Yamakawa Takeshi

並列処理の問題 複数の流れを考慮した設計が必要 デバック&検証が困難 競合の危険性 デッドロック プロセスA プロセスB プロセスC 複数のプロセッサを協調させて処理させるときに難しさがあって February 5, 2010 Yamakawa Takeshi

形式手法(Formal method) システム開発の課題 システムが複雑になるにつれ、テスト工程が増大 潜在的なバグを持ったまま運用の可能性あり 要求 分析 設計 仕様 実装 テスト・ デバック 運用 保守 設計ミス発覚! モデル 検証 February 5, 2010 Yamakawa Takeshi

形式手法(Formal method) システム開発の課題 システムが複雑になるにつれ、テスト工程が増大 潜在的なバグを持ったまま運用の可能性あり 要求 分析 設計 仕様 仕様書 自然言語 図、表 形式仕様記述 CSP,VDM B-Method Z記法 モデル 検証 形式手法 設計の工程で仕様記述言語を使用 設計の誤り、曖昧さを早い段階で除去 February 5, 2010 Yamakawa Takeshi

CSP(communicating sequential processes) プロセスはイベント、通信によって状態変化し、その動きは下記の代数演算子によって定義される。 PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) | ch?x → PROC (input) | PROC \ {c} (hiding) | PROC [e1←e2] (renaming) | PROC ; PROC (sequential) | PROC △ PROC (interrupt) | PROC > PROC (untimed timeout) | PROC □ PROC (external choice) | PROC П PROC (internal choice) | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) P1 ch1 ch2 P2 P3 February 5, 2010 Yamakawa Takeshi

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 10 ch1 ch2 P2 P3 Yamakawa Takeshi February 5, 2010

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 P1’ || P2’ || P3 10 ch1 ch2 P2’ P3 ch1.10 Yamakawa Takeshi February 5, 2010

プロセスのtrace&failure CSPで記述したプロセスはtraceやfailureといった集合でとらえられる。 Traces(P) Failures(P) プロセスPのtrace trとその時点で 実行不可能なイベント集合Xの組(tr,X)の集合 P1’ 10 ch1 ch2 P2’ P3 Yamakawa Takeshi February 5, 2010

Verification&Refinement CSPで記述したモデルは仕様を満たしているかどうかを数学的にチェックできる trace refinement(安全性) SPEC P ⇔ Traces(SPEC) ⊇ Traces(P) SPEC P T 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 SPEC = ch1.v → ch2.v’ → SPEC P1 10 P2 P3 February 5, 2010 Yamakawa Takeshi

ツールの必要性 利便性や人為的なミスを防ぐためには検証ツールの利用が望ましい。 Design Verification Implementation ✔ OK × failure 利便性や人為的なミスを防ぐためには検証ツールの利用が望ましい。 現在、CSPを拡張した理論であるTimed CSPに関するツールがない。 Timed CSP検証用ツールの開発へ Yamakawa Takeshi February 5, 2010

TIMED CSP TIMED CSPは時間に関する代数演算子をCSPに加え、さらに理論を拡張したものである。 時間を考慮した動作が表現可能であり、各プロセスはイベント、通信、時間によって状態変化する。 3 time PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) | ch?x → PROC (input) | PROC \ {c} (hiding) | PROC [e1←e2] (renaming) | PROC ; PROC (sequential) | PROC △ PROC (interrupt) | PROC > PROC (untimed timeout) | PROC □ PROC (external choice) | PROC П PROC (internal choice) | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) P1 WAIT d wait process c@u → P(u) timed event prefix c → P timed prefix P ► Q timeout P △d Q timed interrupt P2 P3 d d Yamakawa Takeshi February 5, 2010

TIMED CSP TIMED CSPは時間に関する代数演算子をCSPに加え、さらに理論を拡張したものである。 時間を考慮した動作が表現可能であり、各プロセスはイベント、通信、時間によって状態変化する。 PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) | ch?x → PROC (input) | PROC \ {c} (hiding) | PROC [e1←e2] (renaming) | PROC ; PROC (sequential) | PROC △ PROC (interrupt) | PROC > PROC (untimed timeout) | PROC □ PROC (external choice) | PROC П PROC (internal choice) | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) 5 time P1’ WAIT d wait process c@u → P(u) timed event prefix c → P timed prefix P ► Q timeout P △d Q timed interrupt P2 P3 d d February 5, 2010 Yamakawa Takeshi

TIMED CSP TIMED CSPは時間に関する代数演算子をCSPに加え、さらに理論を拡張したものである。 時間を考慮した動作が表現可能であり、各プロセスはイベント、通信、時間によって状態変化する。 PROC := SKIP (正常終了) | STOP (停止) | ch!v → PROC (output) | ch?x → PROC (input) | PROC \ {c} (hiding) | PROC [e1←e2] (renaming) | PROC ; PROC (sequential) | PROC △ PROC (interrupt) | PROC > PROC (untimed timeout) | PROC □ PROC (external choice) | PROC П PROC (internal choice) | PROC ||| PROC (interleaving) | PROC [|c|] PROC (sharing) | PROC || PROC (parallel) | if b then PROC else PROC (boolean) 5 time P1’ WAIT d wait process c@u → P(u) timed event prefix c → P timed prefix P ► Q timeout P △d Q timed interrupt P2 P3’ d d February 5, 2010 Yamakawa Takeshi

Timed CSP Explorerの開発 ツールの開発には関数型言語MLを用いた。 P: event∪time → process P ch.10 P’ P(ch.10) ≡ P’ プロセスはイベントを引数にとりプロセス(関数)を返す関数としてとらえる。 Yamakawa Takeshi February 5, 2010

Timed CSP Explorer構成 コード生成部 CSP検証部 CSP記述を解析し、実行用ML記述を 出力する。 channel in,out:Int P = in?x -> out!fact(x) -> P fact(x) = if x>1 then x*fact(x-1) else 1 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 CSP検証部 February 5, 2010 Yamakawa Takeshi

コード生成部 コンパイラの字句解析、構文解析技術を用いてプロセスの構造を木構造でとらえる。 木を行きがけ順(根→左→右)で探索しながら目的の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

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

例 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) SPEC = [] n∈3 enter.i → exit.i → SKIP SPEC FISCHER enter.1 enter.2 enter.3 exit.1 exit.2 exit.3 req.1 req.2 req.3 Q1 Q2 Q3 write read write read write read Shared variable V 2 Yamakawa Takeshi February 5, 2010

例 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) SPEC = [] n∈3 enter.i → exit.i → SKIP SPEC FISCHER enter.1 enter.2 enter.3 exit.1 exit.2 exit.3 req.1 req.2 req.3 Q1 Q2 Q3 write read write read write read Yamakawa Takeshi February 5, 2010

例 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) FISCHER = (|||n∈3Qn) || V(0) SPEC = [] n∈3 enter.i → exit.i → SKIP SPEC FISCHER enter.1 enter.2 enter.3 exit.1 exit.2 exit.3 req.1 req.2 req.3 Q1 Q2 Q3 1 1 write read write read write read 1 2 February 5, 2010 Yamakawa Takeshi

まとめ 研究結果 関数型言語の利点をいかすことでCSPのプロセスを簡潔に実装できることを示したうえで、Timed CSPプロセスの実装を行った。 自動検証ツールTimed CSP Explorerを試作しそれを用いて排他制御アルゴリズムの検証を行った。 今後 リアルタイムシステムの設計、検証に応用していく。 大規模システムに耐えうる状態圧縮のアルゴリズムの考案とその実装を行う。 Yamakawa Takeshi February 5, 2010