# HG changeset patch # User Tatsuki IHA # Date 1518096443 -32400 # Node ID d4ced6adca5ea152897e40c093fcdd40698fc0f0 # Parent 2e77f1c4165bbb67414c606758d7540853685c86 Move stub Interface Code Gear diff -r 2e77f1c4165b -r d4ced6adca5e paper/gearsOS.tex --- a/paper/gearsOS.tex Thu Feb 08 18:30:40 2018 +0900 +++ b/paper/gearsOS.tex Thu Feb 08 22:27:23 2018 +0900 @@ -133,11 +133,8 @@ ノーマルレベルの Code Gear から Meta Data Gear である Context を直接参照してしまうと、ユーザがメタ計算をノーマルレベルで自由に記述できてしまい、メタ計算を分離した意味がなくなってしまう。 stub Code Gear はこの問題を防ぐため、Context から必要な Data Gear のみを ノーマルレベルの Code Gear に渡す処理を行っている。 -\coderef{stubCodeGear} に stub Code Gear の例を示す。 stub Code Gear は使用される全ての Code Gear 毎に記述する必要がある。 -しかし、全ての Code Gear に対して stub Code Gear を記述するのは膨大な記述量になってしまうため、後述する Interface を実装した Code Gear などの型が決まっており、引数が格納されている場所がわかる stub Code Gear はスクリプトで自動生成する。 - -\lstinputlisting[caption=stub Code Gear, label=code:stubCodeGear]{./src/stubCodeGear.cbc} +しかし、全ての Code Gear に対して stub Code Gear を記述するのは膨大な記述量になってしまうため、後述する Interface を実装した Code Gear のstub Code Gear はスクリプトで自動生成する。 stub Code Gear はユーザーが自前で記述することも可能である。 つまり、ユーザーがメタ計算を記述することができる。 diff -r 2e77f1c4165b -r d4ced6adca5e paper/interface.tex --- a/paper/interface.tex Thu Feb 08 18:30:40 2018 +0900 +++ b/paper/interface.tex Thu Feb 08 22:27:23 2018 +0900 @@ -117,10 +117,12 @@ 引数格納用の Data Gear を取り出した後は変換前の呼び出しの引数を Interface で定義した Code Gear の引数情報に合わせて格納し、指定した Code Gear に継続する。 \coderef{singleLinkedQueueTest_script} では Queue Interface の put を継続しているため、6行目で Input Data Gear として node Data Gear を 引数格納用の Data Gear の data に代入し、7行目で実行後に継続する Code Gear として queueTest2 を 引数格納用の Data Gear の next に代入している。 -代入した引数は stub Code Gear で展開され、実装された Code Gear に Data Gear を渡す。 +代入した引数は自動生成された stub Code Gear(\coderef{stubCodeGear})で展開され、実装された Code Gear に Data Gear を渡す。 \lstinputlisting[caption=スクリプトによる変換後, label=code:singleLinkedQueueTest_script]{./src/singleLinkedQueueTest_script.cbc} +\lstinputlisting[caption=スクリプトによって生成された put stub Code Gear, label=code:stubCodeGear]{./src/stubCodeGear.cbc} + \begin{figure}[htbp] \begin{center} \includegraphics[scale=0.6]{./fig/gotoInterface.pdf} diff -r 2e77f1c4165b -r d4ced6adca5e paper/introduction.tex --- a/paper/introduction.tex Thu Feb 08 18:30:40 2018 +0900 +++ b/paper/introduction.tex Thu Feb 08 22:27:23 2018 +0900 @@ -18,7 +18,7 @@ Meta Code Gear は 通常の Code Gear 間に実行される。 従来の研究では OS の実装言語として Python\cite{Sigurbjarnarson:2016:PVF:3026877.3026879} や Haskell\cite{Chen:2015:UCH:2815400.2815402}\cite{Klein:2009:SFV:1629575.1629596} をノーマルレベルとして採用し、メタレベルで検証を行う研究や、メタ計算の実装を型付きアセンブラ(Typed Assembler)\cite{Yang:2010:SLI:1806596.1806610} を用いる例もある。 -Gears OS は ノーマルレベルとメタレベルを共通して表現出来る Continuation Based C(CbC) で実装を行い、証明支援系 Agda\cite{agda} を用いて証明を行う。 +Gears OS は ノーマルレベルとメタレベルを共通して表現出来る Continuation Based C(CbC)\cite{utah-master} で実装を行い、証明支援系 Agda\cite{agda} を用いて証明を行う。 CbC は Code Gear の単位でプログラムを記述し、軽量継続を用いてコード間を移動する。 軽量継続は関数呼び出しとは異なり、呼び出し元に戻らないため、呼び出し元の環境を覚えずに行き先のみを指定する。 この CbC は C と互換性のある言語で、型付きアセンブラに比べると大きな表現力を提供する。また Haskell などに比べて関数呼び出しではなく軽量継続を採用しているため、スタック上に隠された環境を持たないため、メタレベルで使用する資源を明確にできる利点がある。 diff -r 2e77f1c4165b -r d4ced6adca5e paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r 2e77f1c4165b -r d4ced6adca5e paper/reference.bib --- a/paper/reference.bib Thu Feb 08 18:30:40 2018 +0900 +++ b/paper/reference.bib Thu Feb 08 22:27:23 2018 +0900 @@ -197,14 +197,6 @@ year = 2015 } -@article{parusu-sigos, - author = "伊波立樹 and 東恩納琢偉 and 河野真治", - title = "Code Gear、 Data Gear に基づく OS のプロトタイプ", - journal = "第137回情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)", - month = "May", - year = 2016 -} - @article{ikkun-sigos, author = "東恩納琢偉 and 伊波立樹 and 河野真治", title = "Gears OS における並列処理", @@ -213,12 +205,6 @@ year = 2017 } -@misc{opencl, - title = {OpenCL | NVIDIA Developer}, - howpublished = {\url{https://developer.nvidia.com/opencl}}, - note = {Accessed: 2016/02/06(Mon)} -} - @misc{openmp, title = "OpenMP: Simple, portable, scalable SMP programming", howpublished = {\url{http://www.openmp.org,}}, diff -r 2e77f1c4165b -r d4ced6adca5e paper/src/stubCodeGear.cbc --- a/paper/src/stubCodeGear.cbc Thu Feb 08 18:30:40 2018 +0900 +++ b/paper/src/stubCodeGear.cbc Thu Feb 08 22:27:23 2018 +0900 @@ -1,10 +1,16 @@ -__code clearSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue, enum Code next) { - queue->top = NULL; +__code putSingleLinkedQueue(struct Context *context,struct SingleLinkedQueue* queue, union Data* data, enum Code next) { + Element* element = &ALLOCATE(context, Element)->Element; + element->data = data; + element->next = NULL; + queue->last->next = element; + queue->last = element; goto meta(context, next); } -__code clearSingleLinkedQueue_stub(struct Context* context) { +// generated by script +__code putSingleLinkedQueue_stub(struct Context* context) { SingleLinkedQueue* queue = (SingleLinkedQueue*)GearImpl(context, Queue, queue); + Data* data = Gearef(context, Queue)->data; enum Code next = Gearef(context, Queue)->next; - goto clearSingleLinkedQueue(context, queue, next); + goto putSingleLinkedQueue(context, queue, data, next); }