Mercurial > hg > Papers > 2017 > mitsuki-sigos
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} |