Mercurial > hg > Papers > 2024 > matac-master
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
--- 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による分散ファイルシステム}