changeset 23:fadf02ce5925

...
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Fri, 12 Jan 2024 17:50:36 +0900
parents a3cc406f4706
children f0c0e873e3c1
files Paper/master_paper.pdf Paper/master_paper.tex
diffstat 2 files changed, 41 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
Binary file Paper/master_paper.pdf has changed
--- a/Paper/master_paper.tex	Thu Jan 11 22:48:37 2024 +0900
+++ b/Paper/master_paper.tex	Fri Jan 12 17:50:36 2024 +0900
@@ -255,9 +255,6 @@
   \label{fig:meta-cgdg}
 \end{figure}
 
-\section{CodeGearの遷移}
-
-
 \section{全てのGearを参照するContext}
 
 ContextはGearsOS上全てのCodeGear,DataGearの参照を持ち,CodeGearとDataGearの接続に用いられる.
@@ -284,8 +281,47 @@
   \label{fig:context}
 \end{figure}
 
-\section{GearsOSの記述例}
-\section{GearsOSの現状}
+\section{モジュール化の仕組みinterface}
+
+Gears OSにはモジュール化の仕組みであるinterfaceという概念が存在する.
+モジュール化とはJavaのクラスのように複数のメソッドや属性を1つの機能として
+まとめて記述することである.
+GearsOSではinterfaceによって,DataGearやCodeGearを複数まとめてモジュール化する.
+interfaceは仕様と実装を分けて記述する.
+例としてqueue interfaceの仕様記述部分をソースコード\ref{src:Queue.h}に示す.
+
+\lstinputlisting[label=src:Queue.h, caption=Queueのインターフェース]{src/Queue.h}
+
+interfaceの仕様はC言語の構造体定義の形で記述する.
+2,3行目はDataGearを記述しており,DataGearは\texttt{union Data*}型で表現する.
+ここにはinterfaceにおいて,CodeGearが使用するDataGearを列挙する.
+5行目から10行目まではCodeGearの型を記述しており,\texttt{\_\_code}型で表現する.
+ここに列挙したCodeGearはinterfaceのAPIとして機能する.
+interfaceのAPIの呼び出し例をソースコード\ref{exinterface}に示す.
+
+\begin{lstlisting}[label=exinterface,frame=lrbt,caption={Interfaceの呼び出し}]
+  __code odgCommitCPUWorker3(struct CPUWorker* worker, struct Context* task) {
+    int i = worker->loopCounter;
+    struct Queue* queue = GET_WAIT_LIST(task->data[task->odg+i]);
+    goto queue->take(odgCommitCPUWorker4);
+  }
+\end{lstlisting}
+
+4行目でgotoによってqueue interfaceのtake CodeGearに継続するよう記述している.
+takeのinputDataGearにはodgCommitCPUWorker4 CodeGearを指定している.
+ソースコード\ref{src:Queue.h}の仕様記述ではtakeにはqueue,data,nextがinputDataGearの型として指定されている.
+しかし,実際に呼び出す際にはnextに当たるodgCommitCPUWorker4のみを渡している.
+仕様記述の際に全てのCodeGearの第1引数(inputDataGear)に渡している\texttt{Impl* queue}は,
+仕様から実装のCodeGearにgotoするために必要な記述である.
+軽量継続において,CodeGearを跨いで状態を保持することはできない.
+よって仕様から実装に遷移するためには,実装のCodeGearをinput DataGearとして渡す必要がある.
+inputDataGearのnextはCodeGearの処理が終わった際に次にgotoするCodeGearを指定する.
+よって,take CodeGearの処理が全て終了すると,次にodgCommitCPUWorker4へgotoする.
+nextは\texttt{next(...)}と引数に\texttt{...}が渡される.
+これは
+
+
+\section{GearsOSのRedBlackTree}
 
 \chapter{GearsOSのファイルシステム}
 \section{DataGearManagerによる分散ファイルシステム}