Mercurial > hg > Papers > 2017 > mitsuki-sigos
comparison paper/sigos.tex @ 9:9df52fe5b3d7
up
author | mir3636 |
---|---|
date | Sat, 22 Apr 2017 16:44:02 +0900 |
parents | e04e25ad2f3c |
children | 52b6be8721f8 |
comparison
equal
deleted
inserted
replaced
8:e04e25ad2f3c | 9:9df52fe5b3d7 |
---|---|
126 | 126 |
127 また、当研究室で開発している Gears OS\cite{gears} は Code Gear、 Data Gear の単位を用いて開発されており、CbC で記述されている。 | 127 また、当研究室で開発している Gears OS\cite{gears} は Code Gear、 Data Gear の単位を用いて開発されており、CbC で記述されている。 |
128 CbC での記述はメタ計算を含まないノーマルレベルでの記述と、 Code Gear、Data Gear の記述を含むメタレベルの記述の2種類がある。 | 128 CbC での記述はメタ計算を含まないノーマルレベルでの記述と、 Code Gear、Data Gear の記述を含むメタレベルの記述の2種類がある。 |
129 メタレベルでもさらに、メタ計算を用いることが可能になっている。 | 129 メタレベルでもさらに、メタ計算を用いることが可能になっている。 |
130 この2つのレベルはプログラミング言語レベルでの変換として実現される。 | 130 この2つのレベルはプログラミング言語レベルでの変換として実現される。 |
131 CbC は LLVM 上で実装されており、メタレベルでの変換系は本論文では、Perl による変換スクリプトにより実装されている。 | 131 CbC は LLVM\cite{llvm} 上で実装されており、メタレベルでの変換系は本論文では、Perl による変換スクリプトにより実装されている。 |
132 | 132 |
133 Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。 | 133 Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。 |
134 Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。 | 134 Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。 |
135 Interface は複数の実装を持つことができ、Meta Data Gear によって定義される。 | 135 Interface は複数の実装を持つことができ、Meta Data Gear によって定義される。 |
136 Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。 | 136 Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。 |
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 の情報が格納されている。 |
230 この情報から確保する Data Gear のサイズなどを決定する。 | 230 この情報から確保する Data Gear のサイズなどを決定する。 |
231 | 231 |
232 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 | 232 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 |
233 Context は Task でもあり、TaskManager によって Context が生成され Task Queue へ挿入する。 | 233 Context は Task でもあり、TaskManager によって Context が生成され Task Queue へ挿入する。 |
234 Gears OS における Task Queue は Synchronized Queue で実現される。 | 234 Gears OS における Task Queue は Synchronized Queue で実現される。 |
235 Worker は TaskQueue から Task である Context を取得し、 Input/Output Data Gear の依存関係が解決されたものから並列実行される。 | 235 Worker は TaskQueue から Task である Context を取得し、 Input/Output Data Gear の依存関係が解決されたものから並列実行される。 |
236 | 236 |
237 | |
238 | |
239 \section{CbC のコードの例} | 237 \section{CbC のコードの例} |
240 | 238 |
241 リスト\ref{excbc}は CbC で記述された stack のコードの一部である。 | 239 Code\ref{excbc}は CbC で記述された stack のコードの一部である。 |
242 Code Gear は \_\_code Code Gear で始まり、次の Code Gear へ goto で遷移する。 | 240 Code Gear は \_\_code Code Gear で始まり、次の Code Gear へ goto で遷移する。 |
243 | 241 |
244 %,,,の説明 | 242 %,,,の説明 |
245 %codegearの説明もっとする? | 243 %codegearの説明もっとする? |
246 | 244 |
247 \lstinputlisting[label=excbc, caption=cbccode]{./src/ex_stack.cbc} | 245 \lstinputlisting[label=excbc, caption=stack.cbc]{./src/ex_stack.cbc} |
248 | 246 |
249 \section{CbC による Gears OS 記述の問題} | 247 \section{CbC による Gears OS 記述の問題} |
250 | |
251 | |
252 | 248 |
253 %メタの話 | 249 %メタの話 |
254 Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 | 250 Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 |
255 これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 | 251 これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 |
256 | 252 |
257 | |
258 | |
259 \section{interface の記述} | 253 \section{interface の記述} |
260 % union data はジェネラルなデータセグメントこれには | |
261 % goto のひきすうとしてつかう フレームを表している | |
262 %関数呼び出しのabi | |
263 %ひきすうで呼び出されるcg ひきすうはぜんぶ定義されていなければならない | |
264 %メタデータセグメント | |
265 %名前付きの変数が現れる | |
266 %書き込みは**読み込みは* | |
267 %いんたーふぇーすなので実装がいる | |
268 | |
269 | |
270 | |
271 | |
272 | |
273 | |
274 | |
275 interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 | 254 interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 |
276 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 | 255 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 |
277 | |
278 | |
279 | 256 |
280 Code Gear、Data Gear に参照するために Context を通す必要があるが、 | 257 Code Gear、Data Gear に参照するために Context を通す必要があるが、 |
281 interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。 | 258 interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。 |
282 %create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。 | 259 %create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。 |
283 %return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。 | 260 %return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。 |
284 | 261 |
285 \lstinputlisting[label=interface, caption=interface]{./src/Stack.cbc} | 262 \lstinputlisting[label=interface, caption=Interface]{./src/Stack.cbc} |
286 | 263 |
287 \section{Gearef、GearImpl} | 264 \section{Gearef、GearImpl} |
288 | |
289 | |
290 | |
291 | |
292 | 265 |
293 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 | 266 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 |
294 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、リスト\ref{gearef1} のようにコードが煩雑になってしまう。 | 267 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、リスト\ref{gearef1} のようにコードが煩雑になってしまう。 |
295 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 | 268 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 |
296 Gearef に Context と型を渡すことでデータの参照が行える。 | 269 Gearef に Context と型を渡すことでデータの参照が行える。 |
307 そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 | 280 そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 |
308 stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する間に挟まれる。 | 281 stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する間に挟まれる。 |
309 \section{Context、stub Code Segment の自動生成} | 282 \section{Context、stub Code Segment の自動生成} |
310 | 283 |
311 Gears OS では 通常の計算の他に Context や stub などのメタ計算を記述する必要があが、Gears OS を現在の CbC の機能のみを用いて記述するとこのメタ計算の記述を行わなくてはならず、これには多くの労力を要する。 | 284 Gears OS では 通常の計算の他に Context や stub などのメタ計算を記述する必要があが、Gears OS を現在の CbC の機能のみを用いて記述するとこのメタ計算の記述を行わなくてはならず、これには多くの労力を要する。 |
312 この記述を助けるために Context を生成する generate\_context と stub Code Gear を生成する generate\_stub を perl スクリプトで作成した。 | 285 この記述を助けるために Context を生成する generate\_context と stub Code Gear を生成する generate\_stub を Perl スクリプトで作成した。 |
313 | 286 |
314 \section{stub Code Segment の生成} | 287 \section{stub Code Segment の生成} |
315 stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 | 288 stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 |
316 Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 | 289 Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 |
317 stub Code Gear を 自動生成することによって Code Gear の記述量を約半分にすることができる。 | 290 stub Code Gear を 自動生成することによって Code Gear の記述量を約半分にすることができる。 |
324 | 297 |
325 \lstinputlisting[label=stack_cbc, caption=exampleCG]{./src/ex_cbc} | 298 \lstinputlisting[label=stack_cbc, caption=exampleCG]{./src/ex_cbc} |
326 \lstinputlisting[label=stack_c, caption=stub]{./src/ex_stub} | 299 \lstinputlisting[label=stack_c, caption=stub]{./src/ex_stub} |
327 | 300 |
328 \section{Context の生成} | 301 \section{Context の生成} |
302 generate\_context は Context.h、Interface.cbc、generate\_stub で生成されたImpl.cbc を見て Context を生成する。 | |
303 | |
304 \begin{figure}[ht] | |
305 \begin{center} | |
306 \includegraphics[width=70mm]{./pic/generate_context3.pdf} | |
307 \end{center} | |
308 \caption{generate\_context による Context の生成} | |
309 \label{fig:gc} | |
310 \end{figure} | |
311 | |
329 Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 | 312 Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 |
330 Data Gear を取得するために generate context は context の定義 (Code\ref{context}) を読み宣言されている Data Gear を取得する。 | 313 Data Gear を取得するために generate\_context は context の定義 (Code\ref{context}) を読み宣言されている Data Gear を取得する。 |
331 | 314 |
332 Code Gear の取得は指定された generate\_stub で生成されたコードから \_\_code 型を見て行う。 | 315 Code Gear の取得は指定された generate\_stub で生成されたコードから \_\_code 型を見て行う。 |
333 取得した Code Gear、Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 | 316 取得した Code Gear、Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 |
334 | 317 |
335 Code/Data Gear の名前とポインタの対応は generate\_context によって生成される enum Code、enum Data を指定することで接続を行う。 | 318 Code/Data Gear の名前とポインタの対応は generate\_context によって生成される enum Code、enum Data を指定することで接続を行う。 |
341 | 324 |
342 Data Gear は union Data とその中の struct によって表現される。 | 325 Data Gear は union Data とその中の struct によって表現される。 |
343 Context には Data Gear の Data Type の情報が格納されている。 | 326 Context には Data Gear の Data Type の情報が格納されている。 |
344 この情報から確保される Data Gear のサイズなどを決定する。 | 327 この情報から確保される Data Gear のサイズなどを決定する。 |
345 | 328 |
346 \lstinputlisting[label=init_context, caption=initcontext]{./src/context2.c} | 329 \lstinputlisting[label=init_context, caption=init-context]{./src/context2.c} |
347 | 330 |
348 \section{今後の課題} | 331 \section{今後の課題} |
349 本研究では LLVM/Clang のデバッグ、interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。 | 332 本研究では LLVM/Clang のデバッグ、interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う Perl スクリプトの生成を行なった。 |
350 これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。 | 333 これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。 |
351 | 334 |
352 %しかし、現在のスクリプトでは stub | |
353 | |
354 今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 | 335 今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 |
355 また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 | 336 また、今回 Perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 |
356 | 337 |
357 % めたけいさんをどこに挟むかというのをかく 上 | |
358 | 338 |
359 %\begin{figure}[ht] | 339 %\begin{figure}[ht] |
360 % \begin{center} | 340 % \begin{center} |
361 % \includegraphics[width=70mm]{./pic/cbc_goto.pdf} | 341 % \includegraphics[width=70mm]{./pic/cbc_goto.pdf} |
362 % \end{center} | 342 % \end{center} |