Weitere ähnliche Inhalte Ähnlich wie xv6から始めるSPIN入門 (20) Mehr von Ryousei Takano (20) Kürzlich hochgeladen (11) xv6から始めるSPIN入門3. SPINって何?
¤ 並行システムのモデル検査ツール
l ソフトウェアが「正しく」動くことを証明したり、
反証を示すことが可能
l テスト手法とは異なり、設計段階で使用
l 例:通信プロトコルの状態遷移チェック、
排他制御アルゴリズムの検証
¤ PromelaというC言語ライクなモデリング言語
¤ 1980年ごろからベル研で開発
¤ 現在、http://spinroot.com/から入手可能
4. SPINって何?
SPIN:
Simple
Promela
Interpreter
モデル Promela:
Process
Meta
Language
(Promela)
SPIN
pan.c
C compiler
spinpスクリプトは検証モードで動作:
あらゆる状態遷移を生成し、所定の
pan (protocol
analyzer)
性質を満たしているか検証
6. “Hello, world!”
/* My first promela program. */
active proctype main() {
printf(“Hello, world!n”);
}
$ spin hello.p !
Hello, world!!
1 process created!
8. データ型、配列
¤ 基本的にC言語と同じ
l 例外:初期値は0かfalse
¤ スコープ
l グローバル変数
l プロセス内ローカル変数
# define N 2
#defineや#include文は内部でcppにより
bit lk; 処理されるので、C言語同様に利用可能
byte value;
bit sleeping[N]
14. インストール for Mac OS X
¤ Mountain Lion + Xcode command line tools
¤ spinroot.comからソースコードをダウンロード
して、コンパイル
l makefileのCFLAGSに-DMACを追加
¤ 最新版はVersion 6.2.2
$ ./spinp sleep1.p !
...snip...!
State-vector 48 byte, depth reached 236,
errors: 0!
...snip...!
15. デッドロック
¤ ソースコード冒頭のコメントに従い、間違った
ロックの使い方をするように改変すると、、、
¤ エラーが発生すると、各プロセスの実行トレー
スを出力
$ ./spinp sleep1.p !
...snip...!
State-vector 48 byte, depth reached 236,
errors: 5!
...snip...!