changeset 72:d4ced6adca5e

Move stub Interface Code Gear
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Thu, 08 Feb 2018 22:27:23 +0900
parents 2e77f1c4165b
children 44eeae638406
files paper/gearsOS.tex paper/interface.tex paper/introduction.tex paper/master_paper.pdf paper/reference.bib paper/src/stubCodeGear.cbc
diffstat 6 files changed, 15 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- 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 はユーザーが自前で記述することも可能である。
 つまり、ユーザーがメタ計算を記述することができる。
--- 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}
--- 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 などに比べて関数呼び出しではなく軽量継続を採用しているため、スタック上に隠された環境を持たないため、メタレベルで使用する資源を明確にできる利点がある。
Binary file paper/master_paper.pdf has changed
--- 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,}},
--- 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);
 }