comparison paper/sigos.tex @ 12:c5bd23e4dc33

rm
author mir3636
date Sat, 22 Apr 2017 18:15:20 +0900
parents 20b0ecfe114e
children 9a02f500561b
comparison
equal deleted inserted replaced
11:20b0ecfe114e 12:c5bd23e4dc33
66 66
67 % 和文概要 67 % 和文概要
68 \begin{abstract} 68 \begin{abstract}
69 現代の OS では拡張性と信頼性を両立させることが要求されている。 69 現代の OS では拡張性と信頼性を両立させることが要求されている。
70 信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。 70 信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。
71 Gears OS は Continuation based C によってアプリケーションとOSそのものを記述する。 71 Gears OS は Continuation based C によってアプリケーションと OS そのものを記述する。
72 OS の下ではプログラムの記述は通常の処理の他に、メモリ管理、スレッドの待ち合わせやネットワークの管理、エラーハンドリング等の記述しなければならない処理が存在する。 72 OS の下ではプログラムの記述は通常の処理の他に、メモリ管理、スレッドの待ち合わせやネットワークの管理、エラーハンドリング等の記述しなければならない処理が存在する。
73 これらの計算をメタ計算と呼ぶ。 73 これらの計算をメタ計算と呼ぶ。
74 メタ計算を通常の計算から切り離して記述するために、Code Gear、Data Gear という単位を提案している。 74 メタ計算を通常の計算から切り離して記述するために、Code Gear、Data Gear という単位を提案している。
75 Code Gear、Data Gear にはそれぞれメタレベルの単位である Meta Code Gear、Meta Data Gear が存在する。 75 Code Gear、Data Gear にはそれぞれメタレベルの単位である Meta Code Gear、Meta Data Gear が存在する。
76 Code Gear 間の接続は次の Code Gear の番号と thread structure に相当する context によって行われる。 76 Code Gear 間の接続は次の Code Gear の番号と thread structure に相当する context によって行われる。
138 従来の関数呼び出しでは引数をスタック上に構成し、関数の実装アドレスを Call する。 138 従来の関数呼び出しでは引数をスタック上に構成し、関数の実装アドレスを Call する。
139 Gears OS では引数は Context 上に用意された Interface の Data Gear に格納され、 139 Gears OS では引数は Context 上に用意された Interface の Data Gear に格納され、
140 操作に対応する Code Gear に goto する。 140 操作に対応する Code Gear に goto する。
141 Context とは使用される Code Gear と Data Gear を全て格納している Meta Data Gear である。 141 Context とは使用される Code Gear と Data Gear を全て格納している Meta Data Gear である。
142 これは従来のスレッド構造体に対応する。 142 これは従来のスレッド構造体に対応する。
143 つまり Gears OS では従来はコンパイラが定義する ABI(Aplication Binary Interface) 143 つまり Gears OS では従来はコンパイラが定義する ABI(Application Binary Interface)
144 を Meta Data Gear として CbC で表現し、メタ計算として操作することができる。 144 を Meta Data Gear として CbC で表現し、メタ計算として操作することができる。
145 145
146 ノーマルレベルでは Context を直接見ることはできず、引数は Code Gear の引数を明示する必要がある。 146 ノーマルレベルでは Context を直接見ることはできず、引数は Code Gear の引数を明示する必要がある。
147 この時に呼び出し側の引数を不定長引数として追加する構文を CbC に追加した。 147 この時に呼び出し側の引数を不定長引数として追加する構文を CbC に追加した。
148 これにより Interface 間の呼び出しを簡潔に記述することが出来るようになった。 148 これにより Interface 間の呼び出しを簡潔に記述することが出来るようになった。
219 \caption{Gears OS の構成図} 219 \caption{Gears OS の構成図}
220 \label{fig:gearsos} 220 \label{fig:gearsos}
221 \end{figure} 221 \end{figure}
222 222
223 Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 223 Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。
224 Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。 224 Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。
225 225
226 \lstinputlisting[label=context, caption=Context]{./src/context1.c} 226 \lstinputlisting[label=context, caption=Context]{./src/context1.c}
227 227
228 Data Gear は union と struct によって表現される。 228 Data Gear は union と struct によって表現される。
229 Context には Data Gear の Data Type の情報が格納されている。 229 Context には Data Gear の Data Type の情報が格納されている。
253 \section{interface の記述} 253 \section{interface の記述}
254 interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 254 interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。
255 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 255 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。
256 256
257 Code Gear、Data Gear に参照するために Context を通す必要があるが、 257 Code Gear、Data Gear に参照するために Context を通す必要があるが、
258 interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。 258 interface を記述することでデータ構造の api と Data Gear を結びつけることが出来、呼び出しが容易になった。
259 %create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。 259 %create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。
260 %return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。 260 %return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。
261 261
262 \lstinputlisting[label=interface, caption=Interface]{./src/Stack.cbc} 262 \lstinputlisting[label=interface, caption=Interface]{./src/Stack.cbc}
263 263
265 265
266 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 266 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
267 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、Code\ref{gearef1} のようにコードが煩雑になってしまう。 267 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、Code\ref{gearef1} のようにコードが煩雑になってしまう。
268 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 268 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。
269 Gearef に Context と型を渡すことでデータの参照が行える。 269 Gearef に Context と型を渡すことでデータの参照が行える。
270 また impliment のデータを参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。 270 また implement のデータを参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
271 GearImpl は Context と interface 名、interface の変数名を指定して参照する。 271 GearImpl は Context と interface 名、interface の変数名を指定して参照する。
272 Gearef と GearImpl を用いたコードが Code\ref{gearef2}である。 272 Gearef と GearImpl を用いたコードが Code\ref{gearef2}である。
273 273
274 \lstinputlisting[label=gearef1, caption=disableGearef]{./src/ex_code1} 274 \lstinputlisting[label=gearef1, caption=disableGearef]{./src/ex_code1}
275 \lstinputlisting[label=gearef2, caption=enableGearef]{./src/ex_code2} 275 \lstinputlisting[label=gearef2, caption=enableGearef]{./src/ex_code2}