Mercurial > hg > Papers > 2018 > mitsuki-prosym
changeset 1:431ee6c8128f
update
author | mir3636 |
---|---|
date | Sat, 01 Dec 2018 18:54:09 +0900 |
parents | dbbe5ef644fb |
children | 21b64e37e36d |
files | Paper/Makefile Paper/main.tex |
diffstat | 2 files changed, 136 insertions(+), 188 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/Makefile Tue Nov 21 19:56:10 2017 +0900 +++ b/Paper/Makefile Sat Dec 01 18:54:09 2018 +0900 @@ -7,6 +7,7 @@ $(TARGET).dvi : $(wildcard **/*.tex) $(TARGET).tex platex $(TARGET).tex + pbibtex $(TARGET) platex $(TARGET).tex platex $(TARGET).tex @@ -25,3 +26,6 @@ remake: make clean make all + +it: + open /Users/mitsuki/Music/iTunes/iTunes\ Media/Music/i☆Ris/Make\ It\!\ -\ Single/01\ Make\ It\!.m4a
--- a/Paper/main.tex Tue Nov 21 19:56:10 2017 +0900 +++ b/Paper/main.tex Sat Dec 01 18:54:09 2018 +0900 @@ -2,7 +2,7 @@ % english: 英語原稿用フォーマット \documentclass{ipsjprosym} %\documentclass[withpage,english]{ipsjprosym} - \usepackage{listings,jlisting} + \usepackage{listings} \usepackage[dvipdfmx]{graphicx} \usepackage{latexsym} \usepackage{comment} @@ -28,139 +28,118 @@ lineskip=-0.5ex, } \renewcommand{\lstlistingname}{Code} + \usepackage{caption} + \captionsetup[lstlisting]{font={small,tt}} \begin{document} % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\title{Code Gear と Data Gear を持つ\\Gears OS の設計} +\title{継続を中心とした言語 \\ Gears OS のデモンストレーション} -\affiliate{IPSJ}{情報処理学会} +%\affiliate{IPSJ}{情報処理学会} +\affiliate{IE}{琉球大学工学部情報工学科} -\author{宮城 光希}{Mitsuki MIYAGI}{}[mir3636@cr.ie.u-ryukyu.ac.jp] -\author{河野 真治}{Shinji KONO}{IPSJ}[kono@ie.u-ryukyu.ac.jp] +\author{宮城 光希}{Mitsuki MIYAGI}{IE}[mir3636@cr.ie.u-ryukyu.ac.jp] +\author{河野 真治}{Shinji KONO}{IE}[kono@ie.u-ryukyu.ac.jp] % はじめに \begin{abstract} 現代の OS では拡張性と信頼性を両立させることが要求されている。 -信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。 + 信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。 Gears OS は Continuation based C(CbC) によってアプリケーションと OS そのものを記述する。 - OS の下ではプログラムの記述は通常の処理の他に、メモリ管理、スレッドの待ち合わせやネットワークの管理、エラーハンドリング等の記述しなければならない処理が存在する。 - これらの計算をメタ計算と呼ぶ。 - メタ計算を通常の計算から切り離して記述するために、Code Gear、Data Gear という単位を提案している。 CbC はこの Code Gear と Data Gear の単位でプログラムを記述する。 - Code Gear、Data Gear にはそれぞれメタレベルの単位である Meta Code Gear、Meta Data Gear が存在する。 - Code Gear 間の接続は次の Code Gear の番号と thread structure に相当する Context によって行われる。 - ユーザーレベルではメタ構造を直接見ることはなく、継続を用いた関数型プログラミングに見える。 - メタレベルから見た Data Gear をユーザーレベルの Code Gear に接続するには stub という Meta Code Gear を用いる。 - stub と Meta はユーザーレベル Code Gear と Data Gear からスクリプトにより作成される。 - 変換に必要な情報はプログラムを構成する Code Gear と Data Gear の集まりから得る。 - この集まりを Interface として定義している。 - 本論文では、Interfaceを用いたプログラミングと、メタ計算の実例を示す。 + システムやアプリケーションを記述するためにCode Gear と Data Gear を柔軟に再利用する必要がある。 + このときに機能を接続するAPIと実装の分離が可能であることが望ましい。 + Gears OS の信頼性を保証するために、形式化されたモジュールシステムを提供する必要がある。 + 本論文では、Interface を用いたモジュールシステムの説明とその応用としての並列 API について考察する。 + 並列API は継続を基本とした関数型プログラミングと両立する必要がある。 + ここでは、CbC の goto 文を拡張したpar goto 文を導入する。 + par goto 文を用いることによって Gears OS は並列処理を行う。 + また、本研究ではハードウェア上でメタレベルの処理、および並列実行を可能とするために、raspberry pi 上での Gears OS の実装についての考察を行う。 + \end{abstract} \begin{jkeyword} - +OS, プログラミング言語, CbC, Gears OS \end{jkeyword} \maketitle % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{メタ計算の重要性} -プログラムを記述する際、ノーマルレベルの処理の他に、メモリ管理、スレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する。 -これらの計算をメタ計算と呼ぶ。 +\section{メタ計算を使った並列処理} +プログラムの処理において、プログラミング言語で記述される部分をノーマルレベルの計算と呼ぶ。 +コードが実行される時には、処理系の詳細や使用する資源、あるいは、コードの仕様や型などの言語以外の部分が服属する。 +これをメタレベルの計算という。 従来の OS では、メタ計算はシステムコールやライブラリーコールの単位で行われる。 -実行時にメタ計算の変更を行う場合には、OS 内部のパラメータの変更を使用し、 -実行されるユーザープログラム自体への変更は限定的である。 しかし、メタ計算は性能測定あるいはプログラム検証、さらに並列分散計算のチューニングなど細かい処理が必要で 実際のシステムコール単位では不十分である。 -例えば、モデル検査ではアセンブラあるいはバイトコード、インタプリタレベルでのメタ計算が必要になる。 -しかし、バイトコードレベルでは粒度が細かすぎて扱いが困難になっている。 -具体的にはメタ計算の実行時間が大きくなってしまう。 + +Gears OS はノーマルレベルの計算とメタレベルの計算を階層化することで、 +ノーマルレベルの計算の信頼性をメタレベルから保証できることを目指して開発している。 + +メタ計算を通常の計算から切り離して記述するためには処理を細かく分割する必要がある。 +しかし、関数やクラスなどの単位は容易に分割できない。 +そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。 +これによりシステムコードよりも細かくバイトコードよりも大きなメタ計算の単位を提供できる -メタ計算を通常の計算から切り離して記述するためには処理を細かく分割する必要がある。しかし、関数やクラスなどの単位は容易に分割できない。 -そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。 -これによりシステムコードよりも細かくバイトコードよりも大きなメタ計算の単位を提供できる。 +ノーマルレベルとメタレベルを共通して表現できる言語として Continuation based C(以下CbC)\cite{cbc}を用いる。 +CbC は関数呼出時の暗黙の環境(Environment)を使わずに、コードの単位を行き来できる引数付き goto 文(parametarized goto)を持つ C と互換性のある言語である。 +この CbC を用いて、Code Gear と Data Gear、さらにそのメタ構造を導入する。 +これらを用いることで、検証された Gears OS を構築したい。 -Code Gear は処理の単位である。 +\section{Gears OS} + +Gears OS は処理の単位である Code Gear とデータの単位である Data Gear を用いて開発されている。 + +Code Gear は CbC における最も基本的な処理単位である。 関数に比べて細かく分割されているのでメタ計算をより柔軟に記述できる。 +Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。 Code Gear、Data Gear にはそれぞれメタレベルの単位である Meta Code Gear、Meta Data Gear が存在し、これらを用いてメタ計算を実現する。 -Continuation based C (CbC)\cite{cbc} はこの Code Gear 単位を用いたプログラミング言語として開発している。 +Gears OS では、並列実行するための Task を、実行する Code Gear と、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。 +この Input Data Gear、Output Data Gear の依存関係が解決された Code Gear を並列実行する。 -CbCは軽量継続による遷移を行うので、継続前の Code Gear に戻ることはなく、状態遷移ベースのプログラミングに適している。 +Code Gear は任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。 +また、接続された Data Gear 以外には参照を行わない。 +処理やデータの構造が Code Gear、Data Gear に閉じているため、これにより実行時間、メモリ使用量などを予測可能なものにすることができる。 + +Gears OS では メタレベルの計算 を Meta Code Gear、Meta Data Gear で表現する。 +(図\ref{fig:metaCS}) -また、当研究室で開発している Gears OS\cite{gears} は Code Gear、 Data Gear の単位を用いて開発されており、CbC で記述されている。 -CbC での記述はメタ計算を含まないノーマルレベルでの記述と、 Code Gear、Data Gear の記述を含むメタレベルの記述の2種類がある。 -メタレベルでもさらに、メタ計算を用いることが可能になっている。 -この2つのレベルはプログラミング言語レベルでの変換として実現される。 -CbC は LLVM\cite{llvm} 上で実装されており、メタレベルでの変換系は本論文では、Perl による変換スクリプトにより実装されている。 +\begin{figure}[ht] + \begin{center} + \includegraphics[width=70mm]{./pic/metaCS.pdf} + \end{center} + \caption{Gears でのメタ計算} + \label{fig:metaCS} +\end{figure} +Meta Code Gear は通常の Code Gear の直後に遷移され、メタレベルの計算を実行する。 +Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 + +CbC は軽量継続 (goto文) による遷移を行うので、継続前の Code Gear に戻ることはなく、状態遷移ベースのプログラミングに適している。 +CbC は LLVM\cite{llvm}、gcc\cite{gcc} 上で実装されており、 +メタレベルでの記述は、Perl による変換スクリプトにより生成される stub と goto meta によって Code Gear で記述される。 + +\section{interface} Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。 Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。 Interface は複数の実装を持つことができ、Meta Data Gear によって定義される。 Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。 - -従来の関数呼び出しでは引数をスタック上に構成し、関数の実装アドレスを Call する。 -Gears OS では引数は Context 上に用意された Interface の Data Gear に格納され、 -操作に対応する Code Gear に goto する。 -Context とは使用される Code Gear と Data Gear を全て格納している Meta Data Gear である。 -これは従来のスレッド構造体に対応する。 -つまり Gears OS では従来はコンパイラが定義する ABI(Application Binary Interface) -を Meta Data Gear として CbC で表現し、メタ計算として操作することができる。 +一つの実行スレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。 +この Meta Data Gear を Context という。 +ノーマルレベルでは Context を直接見ることはできない。 -ノーマルレベルでは Context を直接見ることはできず、引数は Code Gear の引数を明示する必要がある。 -この時に呼び出し側の引数を不定長引数として追加する構文を CbC に追加した。 -これにより Interface 間の呼び出しを簡潔に記述することが出来るようになった。 -メタレベルでは Code Gear の引数は単一または複数の Data Gear として見ることができる。 -これは Context を直接操作することができることを意味する。 -この部分はノーマルレベルの Code Gear を呼び出す stub として生成される。 -ノーマルレベルでの goto 文はメタ計算への goto で置き換えられる。 -Gears OS でのメタ計算は stub と goto のメタ計算の2箇所で実現される。 - -メタ計算の例としては並列処理があり、Context を切り替えることによって複数のスレッドを実現している。 -Context を複数の CPU に割り当てることにより並列実行を可能にしている。 - - -本研究では CbC を用いての Gears OS の実装と Gears OS におけるメタ計算(Context と stub)の自動生成の実装について述べる。 +メタ計算側ではこれらの Context を常に持ち歩いているので goto 文で引数を用いることはなく、 +行き先は Code Gear の番号のみで指定される。 -\section{Continuation based C (CbC)} -CbC は Code Gear という処理の単位を用いて記述するプログラミング言語である。 -Code Gear は CbC における最も基本的な処理単位である。 -Code Gear は入力と出力を持ち、CbC では引数が入出力となっている。 -CbC では Code Gear は \_\_code という型を持つ関数の構文で定義される。 -ただし、これは \_\_code 型の戻り値を返すという意味ではなく、Code Gear であることを示すフラグである。 -Code Gear は戻り値を持たないので、Cの関数とは異なり return 文は存在しない。 - -Code Gear から次の Code Gear への遷移は goto による継続で処理を行い、次の Code Gear へ引数として入出力を与える。 -図\ref{fig:cs}は Code Gear 間の処理の流れを表している。 - -\begin{figure}[ht] - \begin{center} - \includegraphics[width=70mm]{./pic/codesegment.pdf} - \end{center} - \caption{goto による Code Gear 間の継続} - \label{fig:cs} -\end{figure} +これにより Interface 間の呼び出しを C++ のメソッド呼び出しのように記述することができる。 +Interface の実装は、Context 内に格納されているので、オブジェクトごとに実装を変える多様性を実現できている。 -CbC の goto による継続は Scheme の継続と異なり呼び出し元の環境がないので、この継続は単なる行き先である。 -したがってこれを軽量継続と呼ぶ。 -軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。 - -\section{Gears OS} -Gears OS は Code Gear とデータの単位である Data Gear を用いて開発されており、CbC で記述されている。 -Gears OS では、並列実行するための Task を、実行する Code Gear と、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。 -Gears OS は Input/Output Data Gear の依存関係が解決された CodeGear を並列実行する。 -Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。 -Code Gear は任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。 -また、接続された Data Gear 以外には参照を行わない。 -処理やデータの構造が Code Gear、Data Gear に閉じているため、これにより実行時間、メモリ使用量などを予測可能なものにすることができる。 - -Gears OS では メタ計算 を Meta Code Gear、Meta Data Gear で表現する。 -Meta Code Gear は通常の Code Gear の直後に遷移され、メタ計算を実行する。 -Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 - -CbC は Code Gear を処理の単位として用いたプログラミング言語であるため、Gears OS の Code Gear を記述するのに適している。 +呼び出された Code Gear は必要な引数を Context から取り出す必要がある。 +これは スクリプトで生成された stub Meta Code Gear で行われる。 +Gears OS でのメタ計算は stub と goto のメタ計算の2箇所で実現される。 \section{Gears OS の構成} Gears OS は以下の要素で構成される。 @@ -182,117 +161,82 @@ \label{fig:gearsos} \end{figure} -Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 -Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。 - -\lstinputlisting[label=context, caption=Context]{./src/context1.c} - -Data Gear は union と struct によって表現される。 Context には Data Gear の Data Type の情報が格納されている。 この情報から確保する Data Gear のサイズなどを決定する。 - -Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 -Context は Task でもあり、TaskManager によって Context が生成され Task Queue へ挿入する。 +Context は Task でもあり、Taskは通常のOSのスレッドに対応する。 +Task は実行する Code Gear と Data Gear をすべて持っている。 +TaskManager は Task を実行する Worker の生成、管理、Task の送信を行う。 Gears OS における Task Queue は Synchronized Queue で実現される。 -Worker は TaskQueue から Task である Context を取得し、 Input/Output Data Gear の依存関係が解決されたものから並列実行される。 - -\section{CbC のコードの例} - -Code\ref{excbc}は CbC で記述された stack のコードの一部である。 -Code Gear は \_\_code Code Gear で始まり、次の Code Gear へ goto で遷移する。 +Worker は TaskQueue から Task である Context を取得し、Task の Code Gear を実行し、Output Data Gear の書き出しを行っている。 +Input/Output Data Gear の依存関係が解決されたものから並列実行される。 -%,,,の説明 -%codegearの説明もっとする? - -\lstinputlisting[label=excbc, caption=stack.cbc]{./src/ex_stack.cbc} - -\section{CbC による Gears OS 記述の問題} - -%メタの話 -Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 -これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 -\section{interface の記述} -interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 -呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 - -Code Gear、Data Gear に参照するために Context を通す必要があるが、 -interface を記述することでデータ構造の api と Data Gear を結びつけることが出来、呼び出しが容易になった。 -%create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。 -%return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。 - -\lstinputlisting[label=interface, caption=Interface]{./src/Stack.cbc} +\section{Gears OS の並列処理} +Gears OS では実行の Task を Code Gear と Input/Output Data Gear の組で表現する。 +Input/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う。 +Gears OS では 並列実行する Task を Context で表現する。 +Context には Task 用の情報として、実行される Code Gear、Input/Output Data Gear の格納場所、待っている Input Data Gear のカウンタ等を持 +っている +Task の Input Data Gear が揃っているかを TaskManager で判断し、 実行可能な Task を Worker に送信する。 +Worker は送信された Task が指定した Code Gear を実行し、Output Data Gear を書き出す。 +Context を複製して複数の CPU に割り当てることにより並列実行を可能になる。 -\section{Gearef、GearImpl} - -Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 -Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、Code\ref{gearef1} のようにコードが煩雑になってしまう。 -そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 -Gearef に Context と型を渡すことでデータの参照が行える。 -また interface の実装を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。 -GearImpl は Context と interface 名、interface の変数名を指定して参照する。 -Gearef と GearImpl を用いたコードが Code\ref{gearef2}である。 - -\lstinputlisting[label=gearef1, caption=disableGearef]{./src/ex_code1} -\lstinputlisting[label=gearef2, caption=enableGearef]{./src/ex_code2} -\section{stub Code Gear} -Code Gear が必要とする Data Gear を取り出す際に Context を通す必要があるが、 -Context を直接扱うのはセキュリティ上好ましくない。 -そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 -stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する間に挟まれる。 - -\section{stub Code Gear の生成} -stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 -Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 -stub Code Gear を 自動生成する generate stub を Perl スクリプトで作成することによって Code Gear の記述量を約半分にすることができる。 +\section{並列構文} +Gears OS の並列構文は par goto文で用意されている(Code\ref{pargoto})。 +\lstinputlisting[caption=par goto による並列実行, label=pargoto]{./src/parGotoCreateTask.cbc} +par goto の引数には Input/Output Data Gear と 実行後に継続する \_\_exit を渡す。 +par goto で生成された Task は \_\_exit に継続することで終了する。 -stub を生成するために generate\_stub は指定された cbc ファイルの \_\_code型である Code Gear を取得し、引数から必要な Data Gear を選択する。 -generate\_stub は引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 -また、この時既に stub Code Gear が記述されている Code Gear は無視される。 +この par goto 文は通常のプログラミングの関数呼び出しのように扱うことができる。 -cbc ファイルから、生成した stub Code Gear を加えて stub を加えたコードに変換を行う。(Code\ref{stack_c}) - -\lstinputlisting[label=stack_c, caption= stub]{./src/ex_stub} - -\section{Context の生成} -generate\_context は Context.h、Interface.cbc、generate\_stub で生成されたImpl.cbc を見て Context を生成する Perl スクリプトである。 +par goto文でも 通常の goto 文と同様にメタへの goto 文へ置き換えられるが、par goto 文では通常の goto 文とは異なる meta code gear へと継続する。 +Gears OS の Task は Output Data Gear を生成した時点で終了するので、par goto では直接 \_\_exit に継続するのではなく、 +Output Data Gear への書き出し処理(Commit)に継続される。 -\begin{figure}[ht] - \begin{center} - \includegraphics[width=70mm]{./pic/generate_context3.pdf} - \end{center} - \caption{generate\_context による Context の生成} - \label{fig:gc} -\end{figure} +Code Gear は Input に指定した Data Gear が全て書き込まれると実行され、実行した結果を Output に指定した Data Gear に書き出しを行う。 +Code Gear の引数である\_\_next が持つ引数の Data Gear が Output Data Gear となる。 -Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 +書き出し処理は Data Gear の Queue から、依存関係にある Task を参照する。 +参照した Task が持つ実行に必要な Input Data Gear カウンタのデクリメントを行う。 +カウンタが0になると Task が待っている Input Data Gear が揃ったことになり、 +その Task を TaskManager 経由で 実行される Worker に送信する。 -generate\_context は context の定義 (Code\ref{context}) を読み宣言されている Data Gear を取得する。 -Code Gear の取得は指定された generate\_stub で生成されたコードから \_\_code 型を見て行う。 -取得した Code Gear、Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 - -Code/Data Gear の名前とポインタの対応は generate\_context によって生成される enum Code、enum Data を指定することで接続を行う。 -また、generate context は取得した Code/Data Gear から Context の生成を行うコード (Code\ref{init_context}) も生成する。 +\section{raspberry pi 上での Gears OS の実装} +Gears OS をハードウェア上で実装するために、ARM\cite{arm} プロセッサを搭載したシングルボードコンピュータである Raspberry Pi\cite{rpi} 上での Gears OS 実装する。 +ハードウェア上でのメタレベルの計算や並列実行を行うために、Linax 等に比べてシンプルである xv6 の機能の一部を Gears OS に置き換えることで実現させる。 +xv6 は UNIX V6 を x86 へ再実装したものであるが、ここでは Raspberry pi 用に移植した xv6\_rpi\_port\cite{xv6rpi} を用いて実装した。 -Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 -Code Gear は Context を通して Data Gear へアクセスする。 -Data Gear の Allocation を行うコードは dataGearInit.cに生成される。 - -Data Gear は union Data とその中の struct によって表現される。 -Context には Data Gear の Data Type の情報が格納されている。 -この情報から確保される Data Gear のサイズなどを決定する。 - -\lstinputlisting[label=init_context, caption=initContext]{./src/context2.c} +xv6\_rpi\_port を Gears OS で置き換えるためには xv6\_rpi\_portを +CbC コンパイラを用いてコンパイルした kernel が Raspberry Pi 上で動作する必要がある。 +そこで GCC 上で実装した CbC コンパイラを ARM 向けに build し xv6\_rpi\_port のクロスコンパイルを行い動作させることができた。 \section{今後の課題} -本研究では LLVM/Clang のデバッグ、interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う Perl スクリプトの生成を行なった。 -これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。 +本研究では Gears OS のプロトタイプの設計と実装、並列実行機構の実装を行った。 +Code Gear 、Data Gear を処理とデータの単位として用いて Gears OS を設計した。 +Gears OS は Code Gear と Input/Output Data Gear の組を Task とし、並列実行を行う。 + +Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。 +Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。 +Interface は複数の実装をもち、Meta Data Gear として定義される。 +従来の関数呼び出しでは引数をスタック上に構成し、関数の実装アドレスを Call するが、 +Gears OS では引数は Context 上に用意された Interface の Data Gear に格納され、操作に対応する Code Gear に goto する。 -今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 -また、今回 Perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 +並列処理を行う際は Context を生成し、 Code Gear と Input/Output Data Gear を Context に設定して TaskManager 経由で各 Worker の SynchronizedQueue に送信される。 +Context の設定はメタレベルの記述になるため、ノーマルレベルでは par goto 文という CbC の goto 文に近い記述で並列処理を行える。 +この par goto は通常のプログラミングの関数呼び出しのように扱える。 + +また、ハードウェア上での実装のため gccbc での xv6\_rpi\_port のクロスコンパイルを行なった。 + +今後の課題は、 +gccbc でクロスコンパイルした xv6\_rpi\_port が実際のハードウェア上で動作することが可能となったため、 +CbC で記述された Gears OS も ARM 向けにコンパイルが可能となった。 +xv6\_rpi\_port の機能を Gears OS の機能と置き換えていくことで、 +ハードウェア上でのメタ計算、並列処理を可能とすることが課題である。 + % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\nocite{*} \bibliographystyle{ipsjsort} \bibliography{prosym}