annotate chapter/main.tex @ 3:1b34d9710a84

add poster
author ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
date Mon, 15 Feb 2021 10:51:57 +0900
parents 36dcba72eb2f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{Gears OS におけるモデル検査}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 Gears OS 上で DPP を動かし、導出木を作成。これをLTTLに落とし込むことによってdead lock とlive lock の2つを探索することが可能である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 dead lock とは、スレッドが待機状態に入ったままになってしまう状態を指し、今回扱う DPP の例題だと、全てのスレッドが1つずつfork を持ってしまった場合に発生する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 またlive lock とは待機状態ではないが、同じ状態を繰り返してしまい処理が進まない状態を指します。例えば今回の DPP の例題において「待機状態においてフォークを下ろす。」という処理を入れた場合で、さらに各スレッドが順番に動作するとした時、 dead lock の状態に入った場合において、各スレッドは fork を下ろす動作をするが、その後またfork を持ち上げる動作を行うので live lock 状態になる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 このようにdead lock 状態ではないが、状態が膠着状態になるのがlive lock である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 LTTLで検証できる 常に p または 常に$\neg$p と、いつか p またはいつか$\neg$p であるから、dead lock を検証する事が可能である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
3
1b34d9710a84 add poster
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
12 \section{Dining Philosophers Problem の例題}
0
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 モデル検査の検証用のサンプルプログラムとしてDining Philosohers Ploblem (以下DPP)を用いる。これは資源共有問題の1つで、次のような内容である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 5人の哲学者が円卓についており、各々スパゲッティーの皿が目の前に用意されている。スパゲッィーはとても絡まっているので食べるには2本のフォークを使わないと食べれない。しかしフォークはお皿の間に一本ずつおいてあるので、円卓にフォークが5本しか用意されていない。\ref{fig:DPP_image}哲学者は思索と食事を交互に繰り返している。空腹を覚えると、左右のオークを手に取ろうと試み、2本のフォークを取ることに成功するとしばし食事をし、しばらくするとフォークを置いて思索に戻る。隣の哲学者が食事中でフォークが手に取れない場合は、そのままフォークが置かれるのを待つ。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 各哲学者を1つのプロセスとすると、この問題では5個のプロセスが並列に動くことになり、全員が1本ずつフォークを持って場合はデッドロックしていることになる。プロセスの並列実行はスケジューラによって制御することで実現する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 以下はDPPにおける右側のフォークを取るプログラムである。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 最初に右のフォークを持たれているかどうかを確認し、いなければ自分を持ち主に登録する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 その後 next に次に遷移する自分の状態を入れ scheduler に遷移することによって scheduler を通して次の状態に遷移する。このときscheduler からメタ計算を挟むことによって状態をMemoryTree に入れる事ができる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 左のフォークの持ち主がいた場合は飢餓状態を登録し scheduler に遷移する事で待機状態を維持する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \lstinputlisting[caption=pickuplfork, label=pickuplfork]{src/pickup_lfork.cbc}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \begin{figure}[tb]
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \begin{center}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \includegraphics[width=140mm]{fig/dpp_image.pdf}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \end{center}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 \caption{Dining Philosohers Ploblem image}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \label{DPP_image}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \end{figure}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \section{Gears OS を用いた DPP }
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 DPP は哲学者5人が同時に行動するので、5つのスレッドで同時に処理することで状態を生成する事ができる。まず Gears OS の並列構文の par goto が用いることでマルチスレッド処理の実装を行う。 par goto は引数として、data gaer と実行後に継続する\verb+__exit+を渡す。par goto で生成された Task は\verb|__exit| に継続する事で終了する。これによりGears OS は複数スレッドでの実行を行う事が可能である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 %また Gears OS には Synchronied Queue というマルチスレッドでのデータの一貫性を保証する事ができる Queue があり、これを使い5つのフォークの状態を管理する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 %Syncrhonized Queueは CAS(Check and Set)を用いて実装されており、値の比較、更新をアトミックに行う命令である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 5つのフォークの状態はCASで管理する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 CASを使う際は更新前の値と更新後の値を渡し、渡された更新前の値を実際に保存されているメモリ番地の値と比較し、同じデータがないため、データの更新に成功する。異なる場合は他の書き込みがあったとみなされ、値の更新に失敗し、もう一度 CAS を行う。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 5スレッドで行われる処理の状態は以下の6通りで、think のあとPickup Right fork に戻ってくる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 \begin{itemize}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 \item Pickup Right fork
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 \item Pickup Left fork
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \item eating
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 \item Put Right fork
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \item Put Left fork
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \item Thinking
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \end{itemize}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 この状態は goto next によって遷移する。状態を遷移する際、MemoryTreeによって状態を保存する。またこの状態遷移は無限ループするのでMemoryTree に保管される。またこのMemoryTreeはスレッドの数だけあり、sutats DB によってまとめられている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 DPPの状態遷移は6つの状態を繰り返すため、同じ状態が出た場合には終了させなければならない。そこでstate DBを用いて同じ状態を検索することで終了判定をだす。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 \begin{figure}[tb]
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 \begin{center}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 \includegraphics[width=140mm]{fig/model_checking.pdf}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 \end{center}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 \caption{DPP on Gears OS}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 \label{DPP_chacking}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 \end{figure}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 この実行は Single thread に行われるが、iterator を使って並行実行しても良い。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 必要な時相論理的な仕様は codeGear にコンパイルすることができるので、それを同時に走らせることによりチェックできる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 これは SPIN の LTL の仕様記述と同じことになる。このようにモデル検査を codeGear と dataGear 上に実現することができる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 メモリ領域の登録には
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 \verb+add_mamory_area(ContextPtr cbc_contex+
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 \verb+,void *addrss,long length)+ のようなAPIを用いる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 状態の格納は、mera codeGear で行われるので、customize が可能である。この段階で対称性の利用や状態の抽象化を行うこと可能となる
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 \section{Gears OS での実装}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 モデル検査を行うのに、次のものを用意した。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 \begin{itemize}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 \item MCTaskManagerImpl.cbc
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 導出木を作るために dataGear に process (context) を登録する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 \item MCWorker.cbc
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 導出木を作る meta codeGear
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 \item TaskIterator.c
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 次の実行を選択する interator
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 \item memory.c
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 memory range の扱い (2分木)
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 \item crc32.c
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 memory 状態の hash
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 \item state\_db.c
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 状態の data base (2分木)
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 \end{itemize}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 \section{Meta の入れ替え}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 Perl script の正規表現を使って meta を機械的に置き換える。mcMeta か random 。random は並行実行のシミュレーションになる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 7行目は多次元リストのPhilsImpls を regular expression に渡している。これはgoto の遷移先である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 その後11行目で受け取った文字列を goto 先にランダムに、配置しており。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 16行目では文字列を受け取った文字列に遷移する前に mcMeta を挟むようにしている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 \lstinputlisting[caption=mcDPP.h, label=mcDPP.h]{src/meta.pm}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 \newpage
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 \section{モデル検査のフラグの管理}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 mcDPP.h はモデル検査を行うためのフラグの宣言である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 \lstinputlisting[caption=mcDPP.h, label=mcDPP.h]{src/mcDPP.h}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 しかし今回の DPP の例題においては t\_eating と f\_F\_eating のフラグしか使用してしいない。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 t\_eating は食事中で f\_F\_eating がいつか食事になるという意味である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 now と next を見比べながらフラグを update する。すべて状態は 今のcontext にのっているが、過去は add\_memory\_rangeで記録されたものあるいはフラグしか見れないようになっている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 q\lstinputlisting[caption=mcDPP.cbc, label=mcDPP.cbc]{src/mcDPP.cbc}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 これは 検証したいCTL あるいは LTTLによって違うものになる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 mcDPP.cbcではフラグの比較によるモデル検査を行っている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 最初に今のフラグと次のフラグを取得し、次にphils->self が 1 である場合はreturn でぬける。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 12行目では 次と今のフラグがet\_ating または t\_F\_eatingであればt\_F\_eating;
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 15行目では直前のフラグと今のフラグ、または直前のフラグと次のフラグが違っているとchangeに1が入り、動き続け、そうでなければ18行目で今のフラグとt\_F\_eatingを比較し、あっている場合にはnot<>eating となり、終了する。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 \section{導出木の作り方}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 \lstinputlisting[caption=putdown\_lfork, label=putdownlfork]{src/putdown_lfork.cbc}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 ソースコード5.5 は DPP の例題のもので、Philospher の Leftfork を置く部分である。フォークは各 Philosher 間で共有されるデータのため、競合が起きないように CaS を行う必要がある。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 このソースコードは以下のソースコード5.6に変換される。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 Gearef はContext から Data Gaer を参照するマクロになっている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 goto 先がmcMeta になっている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 \lstinputlisting[caption=putdownlforkImpl, label=putdownlforkImpl]{src/putdown_lforkImpl.cbc}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 Gears OS のノーマルレベルの code は変換されるが、mcMeta は \_\_ncode と記述されており、これは meta として扱い変換しない意味である。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 9行目にある mctiにタスクを渡している。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 \lstinputlisting[caption=mcMeta, label=mcMeta]{src/mcMeta.cbc}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 \section{OS自体のモデル検査}
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 Gears OS 自体も CodeGear と DataGear で書かれているので、CPU毎の C.context、共有するkernel のK.context、ユーザープログラムの U.context と考えることができ、これらはmeta dataGear であるK.context に含まれている。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 U.context がDPPのような単純なものならば、OS全体のcontext も複雑にはならないため、DPP のモデル検査のようにシャッフル実行を行う事が出来れば、この枠組みの中で検証することが可能であると思われる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 しかし、OS のモデル検査にはいくつかの問題がある。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 OS の場合はほとんどが meta level の記述なので、それを emulation する必要がある。メモリやCPUは問題ないが Translation Lookaside Buffer (以下TLB) を emulation する必要があるが、TLB は仮想アドレスから物理アドレスへの変換を高速化する際に使われるメモリ管理ユニットのキャッシュであり、またマイクロプロセッサによる物理空間と仮想空間の仮想記憶をサポートする際に利用しているため、emulation の仕方に工夫が必要となる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 また CPUの状態、例えばキャッシュなども emulation する場合には、codeGear の大きさをメモリアクセスレベルまで小さくする必要がある。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 つまり、見つけたいバグを知っていれば検証は可能だが、起きる可能性のある未知のメタ計算が出てくる場合の検証方法と、その未知のメタ計算を探す手法が必要となってくる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 モデル検査は膨大な状態空間を探索する必要があり、OS 込みのモデル検査となると厳しいと予想される。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 しかし、OS 特定部分だけに絞り調べる場合には巨大なアプリケーションは必要ない思われ、普通のテストの代わりにモデル検査を使うように検証を行う事が出来ると考えられる。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 この OS を含むモデル検査は OS の拡張性をデバイスドライバの開発などに向いていると考えられる。この場合は、デバイス自体の仕様が codeGear/dataGear
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 で書かれている必要がある。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 Gears OS は Unix 上のApplicationとして実現されているものと、x.v6 の書き換えとして実現するものとの二種類がある。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 後者の開発にモデル検査が使えると良い。
ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150