Upload
ytaka23
View
813
Download
7
Embed Size (px)
Citation preview
猫でもわかる!モデル検査器 SPIN 入門
チェシャ猫 (@y_taka_23)2014年12月6日
NGK2014B 昼の部 LT
リソース共有問題● スキャナとプリンタを同時に使用したい● スキャナ・プリンタの使用は一度に 1 人のみ● クライアントが 2 人いる場合
– クライアント A がスキャナを確保– クライアント B がプリンタを確保– A はプリンタの、B はスキャナの解放待ち– 両者ともに動けない (デッドロック)
● 並行プロセスの相互作用による不具合
現実はさらに複雑● イレギュラーな挙動
– 突然エラーが発生してプロセスが死ぬ– パケットが通信中に消失・破損する
● プロセス間の複雑な相互作用– 非同期処理と同期処理が混在している– 通信に遅延が発生する
あり得る状態を全探索= モデル検査 (Model Checking)
Promela / SPIN● Promela (PROcess MEta LAnguage)
– プロセスの振る舞いを記述する DSL– 手続き指向、C 言語風文法
● SPIN (Simple Promela INterpreter)– Promela でモデル化されたシステムを検証– モデルが取り得るすべての状態を全探索
非決定的選択● 複数の遷移の可能性を考えられる● システムから制御不可能な要素をモデリング● SPIN は発生し得るすべての分岐を検査
if :: mode == 0 -> input = 0;:: mode == 1 -> input = 0;:: mode == 1 -> input = 1;fi
インタリーブ実行● 文ごとに割り込みが発生し得る● 非同期マルチプロセスをモデリング● SPIN は発生し得るすべての実行順序を検査proctype incrementer() { tmp = acc; /* A */ acc = tmp + 1; /* B */}
proctype decrementer() { tmp = acc; /* C */ acc = tmp – 1; /* D */}
線形時相論理● LTL (Linear Temporal Logic) とも呼ばれる● 時間的な前後関係を含む条件を検証
– □ … 現在以降の任意の状態で条件が成立– ◇ … 現在以降のある状態で条件が成立
● 例 : リクエストに対しいつかは応答がある
● 例:初期化後は常に有効[] (request => <> response)
[] (initialized => [] active)
興味のある人は● Basic Spin Manual
– http://whitewash-net.or.jp/~hs7m-kwgc/spin/Man/Manual_japanese.html
● 書籍『SPIN モデル検査入門』– Mordechai Ben-Ari 著、中島震ら訳
● 名古屋モデル検査勉強会 #2 資料– https://gist.github.com/y-taka-23/8419128
presented by チェシャ猫 (@y_taka_23)