Soumettre la recherche
Mettre en ligne
xv6から始めるSPIN入門
•
4 j'aime
•
2,734 vues
Ryousei Takano
Suivre
カーネル/VM勉強会 第2回OS基礎(xv6)
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 16
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
安全なプログラムの作り方
安全なプログラムの作り方
Kazuhiro Nishiyama
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
R spec勉強会
R spec勉強会
Tatsunori Nishikori
Python勉強会1-はじめに
Python勉強会1-はじめに
理 小林
Coqでsprintf
Coqでsprintf
Masaki Hara
ループその3
ループその3
TENTO_slide
Coqでsprintf
Coqでsprintf
Masaki Hara
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
Recommandé
安全なプログラムの作り方
安全なプログラムの作り方
Kazuhiro Nishiyama
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
R spec勉強会
R spec勉強会
Tatsunori Nishikori
Python勉強会1-はじめに
Python勉強会1-はじめに
理 小林
Coqでsprintf
Coqでsprintf
Masaki Hara
ループその3
ループその3
TENTO_slide
Coqでsprintf
Coqでsprintf
Masaki Hara
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
egtra
SEH on mingw32
SEH on mingw32
kikairoya
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Mitsuru Kariya
Sharing Deep Dive
Sharing Deep Dive
Takaaki Suzuki
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Tusyoshi Matsuzaki
CoqによるMsgPackの証明
CoqによるMsgPackの証明
Hiroki Mizuno
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
株式会社ランチェスター
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
HascTool BlockDevelopment
HascTool BlockDevelopment
Nobuo Kawaguchi
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
Effective modern-c++#9
Effective modern-c++#9
Tatsuki SHIMIZU
MlnagoyaRx02
MlnagoyaRx02
mega80b
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
Async design with Unity3D
Async design with Unity3D
Kouji Hosoda
Javascript with Generative Art
Javascript with Generative Art
Shinsuke Matsuda
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
OpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
Contenu connexe
Tendances
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Tomohiro Kumagai
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
egtra
SEH on mingw32
SEH on mingw32
kikairoya
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Mitsuru Kariya
Sharing Deep Dive
Sharing Deep Dive
Takaaki Suzuki
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Tusyoshi Matsuzaki
CoqによるMsgPackの証明
CoqによるMsgPackの証明
Hiroki Mizuno
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
株式会社ランチェスター
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
HascTool BlockDevelopment
HascTool BlockDevelopment
Nobuo Kawaguchi
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Tomohiro Kumagai
Effective modern-c++#9
Effective modern-c++#9
Tatsuki SHIMIZU
MlnagoyaRx02
MlnagoyaRx02
mega80b
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
Async design with Unity3D
Async design with Unity3D
Kouji Hosoda
Javascript with Generative Art
Javascript with Generative Art
Shinsuke Matsuda
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
Tendances
(20)
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
SEH on mingw32
SEH on mingw32
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
Sharing Deep Dive
Sharing Deep Dive
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
CoqによるMsgPackの証明
CoqによるMsgPackの証明
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
effective modern c++ chapeter36
effective modern c++ chapeter36
HascTool BlockDevelopment
HascTool BlockDevelopment
冬のLock free祭り safe
冬のLock free祭り safe
emc++ chapter32
emc++ chapter32
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
Effective modern-c++#9
Effective modern-c++#9
MlnagoyaRx02
MlnagoyaRx02
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
Async design with Unity3D
Async design with Unity3D
Javascript with Generative Art
Javascript with Generative Art
C++ マルチスレッド 入門
C++ マルチスレッド 入門
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Similaire à xv6から始めるSPIN入門
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
OpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
第1回勉強会スライド
第1回勉強会スライド
koturn 0;
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
Introduction of Python
Introduction of Python
Tomoya Nakayama
Clojure
Clojure
Uehara Junji
Objc lambda
Objc lambda
matuura_core
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
Yoshifumi Yamaguchi
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
言語処理系入門10
言語処理系入門10
Kenta Hattori
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Buffer overflow
Buffer overflow
ionis111
Start!! Ruby
Start!! Ruby
mitim
Javaセキュアコーディングセミナー東京第1回 講義
Javaセキュアコーディングセミナー東京第1回 講義
JPCERT Coordination Center
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
Similaire à xv6から始めるSPIN入門
(20)
第2回勉強会スライド
第2回勉強会スライド
OpenStack + Common Lisp
OpenStack + Common Lisp
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
第1回勉強会スライド
第1回勉強会スライド
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
JavaScript 講習会 #1
JavaScript 講習会 #1
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Introduction of Python
Introduction of Python
Clojure
Clojure
Objc lambda
Objc lambda
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
MoteMote Compiler Plugin
MoteMote Compiler Plugin
言語処理系入門10
言語処理系入門10
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
Buffer overflow
Buffer overflow
Start!! Ruby
Start!! Ruby
Javaセキュアコーディングセミナー東京第1回 講義
Javaセキュアコーディングセミナー東京第1回 講義
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Plus de Ryousei Takano
Error Permissive Computing
Error Permissive Computing
Ryousei Takano
Opportunities of ML-based data analytics in ABCI
Opportunities of ML-based data analytics in ABCI
Ryousei Takano
ABCI: An Open Innovation Platform for Advancing AI Research and Deployment
ABCI: An Open Innovation Platform for Advancing AI Research and Deployment
Ryousei Takano
ABCI Data Center
ABCI Data Center
Ryousei Takano
クラウド環境におけるキャッシュメモリQoS制御の評価
クラウド環境におけるキャッシュメモリQoS制御の評価
Ryousei Takano
USENIX NSDI 2016 (Session: Resource Sharing)
USENIX NSDI 2016 (Session: Resource Sharing)
Ryousei Takano
User-space Network Processing
User-space Network Processing
Ryousei Takano
Flow-centric Computing - A Datacenter Architecture in the Post Moore Era
Flow-centric Computing - A Datacenter Architecture in the Post Moore Era
Ryousei Takano
A Look Inside Google’s Data Center Networks
A Look Inside Google’s Data Center Networks
Ryousei Takano
クラウド時代の半導体メモリー技術
クラウド時代の半導体メモリー技術
Ryousei Takano
AIST Super Green Cloud: lessons learned from the operation and the performanc...
AIST Super Green Cloud: lessons learned from the operation and the performanc...
Ryousei Takano
IEEE CloudCom 2014参加報告
IEEE CloudCom 2014参加報告
Ryousei Takano
Expectations for optical network from the viewpoint of system software research
Expectations for optical network from the viewpoint of system software research
Ryousei Takano
Exploring the Performance Impact of Virtualization on an HPC Cloud
Exploring the Performance Impact of Virtualization on an HPC Cloud
Ryousei Takano
不揮発メモリとOS研究にまつわる何か
不揮発メモリとOS研究にまつわる何か
Ryousei Takano
High-resolution Timer-based Packet Pacing Mechanism on the Linux Operating Sy...
High-resolution Timer-based Packet Pacing Mechanism on the Linux Operating Sy...
Ryousei Takano
クラウドの垣根を超えた高性能計算に向けて~AIST Super Green Cloudでの試み~
クラウドの垣根を超えた高性能計算に向けて~AIST Super Green Cloudでの試み~
Ryousei Takano
From Rack scale computers to Warehouse scale computers
From Rack scale computers to Warehouse scale computers
Ryousei Takano
高性能かつスケールアウト可能なHPCクラウド AIST Super Green Cloud
高性能かつスケールアウト可能なHPCクラウド AIST Super Green Cloud
Ryousei Takano
Iris: Inter-cloud Resource Integration System for Elastic Cloud Data Center
Iris: Inter-cloud Resource Integration System for Elastic Cloud Data Center
Ryousei Takano
Plus de Ryousei Takano
(20)
Error Permissive Computing
Error Permissive Computing
Opportunities of ML-based data analytics in ABCI
Opportunities of ML-based data analytics in ABCI
ABCI: An Open Innovation Platform for Advancing AI Research and Deployment
ABCI: An Open Innovation Platform for Advancing AI Research and Deployment
ABCI Data Center
ABCI Data Center
クラウド環境におけるキャッシュメモリQoS制御の評価
クラウド環境におけるキャッシュメモリQoS制御の評価
USENIX NSDI 2016 (Session: Resource Sharing)
USENIX NSDI 2016 (Session: Resource Sharing)
User-space Network Processing
User-space Network Processing
Flow-centric Computing - A Datacenter Architecture in the Post Moore Era
Flow-centric Computing - A Datacenter Architecture in the Post Moore Era
A Look Inside Google’s Data Center Networks
A Look Inside Google’s Data Center Networks
クラウド時代の半導体メモリー技術
クラウド時代の半導体メモリー技術
AIST Super Green Cloud: lessons learned from the operation and the performanc...
AIST Super Green Cloud: lessons learned from the operation and the performanc...
IEEE CloudCom 2014参加報告
IEEE CloudCom 2014参加報告
Expectations for optical network from the viewpoint of system software research
Expectations for optical network from the viewpoint of system software research
Exploring the Performance Impact of Virtualization on an HPC Cloud
Exploring the Performance Impact of Virtualization on an HPC Cloud
不揮発メモリとOS研究にまつわる何か
不揮発メモリとOS研究にまつわる何か
High-resolution Timer-based Packet Pacing Mechanism on the Linux Operating Sy...
High-resolution Timer-based Packet Pacing Mechanism on the Linux Operating Sy...
クラウドの垣根を超えた高性能計算に向けて~AIST Super Green Cloudでの試み~
クラウドの垣根を超えた高性能計算に向けて~AIST Super Green Cloudでの試み~
From Rack scale computers to Warehouse scale computers
From Rack scale computers to Warehouse scale computers
高性能かつスケールアウト可能なHPCクラウド AIST Super Green Cloud
高性能かつスケールアウト可能なHPCクラウド AIST Super Green Cloud
Iris: Inter-cloud Resource Integration System for Elastic Cloud Data Center
Iris: Inter-cloud Resource Integration System for Elastic Cloud Data Center
Dernier
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
Dernier
(9)
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
xv6から始めるSPIN入門
1.
xv6から始めるSPIN入門
@oraccha 2012-09-02 カーネル/VM勉強会
2.
SPINって何? ¤ sleep1.p ??
本筋じゃなくてすいません。。。
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) 性質を満たしているか検証
5.
sleep1.p ¤ 生産者・消費者問題を使った、排他制御の 教材だと思われる
l ロックを取得して、共有資源にアクセスする l テキスト “Sleep and wakeup” (P.55-57) ¤ 同じパターンはソースコード内に頻出 l 例:bio.c, console.c, fs.c, log.c, pipe.c, proc.c
6.
“Hello, world!” /* My
first promela program. */ active proctype main() { printf(“Hello, world!n”); } $ spin hello.p ! Hello, world!! 1 process created!
7.
Promelaモデル ¤ 変数 ¤ プロセス ¤ メッセージチャネル
8.
データ型、配列 ¤ 基本的にC言語と同じ
l 例外:初期値は0かfalse ¤ スコープ l グローバル変数 l プロセス内ローカル変数 # define N 2 #defineや#include文は内部でcppにより bit lk; 処理されるので、C言語同様に利用可能 byte value; bit sleeping[N]
9.
プロセス ¤ SPINは実行可能なプロセスをランダムに1つ 選び、そこから1文を実行 l 例外:atomicで囲まれた文は不可分に実行 ¤ proctypeで定義し、activeでインスタンス化 ¤ プロセスIDはローカル変数_pidで取得可能
active[N] proctype consumer() { ... } active[N] proctype producer() { ... }
10.
inline文 ¤ C言語の関数に似ているが、あくまでマクロ ¤ Promela言語に関数は存在しない inline
acquire(x) { atomic { x == 0; x = 1 } } 式は真になるまでブロック。 「x==0」は次のコードと等価 inline release(x) { while (x != 0) skip assert x==1; x=0 「;(セミコロン)」は、文の終端を示す } ものではなく、文の分割を意味する。 「-‐>」も同じ意味
11.
assert文 ¤ assert(3)と同じで、不変条件の表明に使用
l 偽だとエラー発生 inline acquire(x) { atomic { x == 0; x = 1 } } inline release(x) { assert x==1; x=0 }
12.
if式 ¤ 真のガード条件をランダムに1つ選んで実行 ¤ 条件を満たすものがなければ待機 inline sleep(cond, lk)
{ assert !sleeping[_pid]; if :: cond -> skip /* 何もしない文(Pythonのpassみたい) */ :: else -> atomic { release(lk); sleeping[_pid] = 1 }; sleeping[_pid] == 0; acquire(lk) fi }
13.
do式 ¤ 基本的にif式と同じだが、永久に評価を繰り返す ¤ break文で脱出 inline wakeup() {
w = 0; do :: w < N -> sleeping[w] = 0; w=w+1 :: else -> break od } この例は、forループを書きたいときのイディオムかな
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...!
16.
まとめ ¤ モデル検査ツールSPINのPromela言語の ソースコードを読んでみた l 線形時間論理とかCSPとかわからなくても、
とりあえず使うことはできる ¤ SPINはOS屋の嗜みの一つ l 通信プロトコルの設計などをする人は知って 損はないようです l OSを形式手法を用いて検証するというのは、 ここ数年のホットな話題らしいですよ
Télécharger maintenant