# HG changeset patch # User matac42 # Date 1642928535 -32400 # Node ID c59b95705898f5703fcc9e2efad82629539b4d86 # Parent 124583e0b372a5115beacb1a190b5cd78a631e34 ... diff -r 124583e0b372 -r c59b95705898 paper/figs/dgcgdg.png Binary file paper/figs/dgcgdg.png has changed diff -r 124583e0b372 -r c59b95705898 paper/figs/dgcgdg.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/figs/dgcgdg.svg Sun Jan 23 18:02:15 2022 +0900 @@ -0,0 +1,4 @@ + + + +
DataGear
DataGear
CodeGear
CodeGear
DataGear
DataGear
CodeGear
CodeGear
Text is not SVG - cannot display
\ No newline at end of file diff -r 124583e0b372 -r c59b95705898 paper/figs/nonDestroyTreeEdit.pdf Binary file paper/figs/nonDestroyTreeEdit.pdf has changed diff -r 124583e0b372 -r c59b95705898 paper/text/chapter2.tex --- a/paper/text/chapter2.tex Thu Jan 20 15:02:59 2022 +0900 +++ b/paper/text/chapter2.tex Sun Jan 23 18:02:15 2022 +0900 @@ -7,19 +7,33 @@ CbCでは関数の代わりにCodeGearという単位でプログラミングを行う. CodeGearは\emph{\_\_code}という記述で宣言することができる. データの単位にはDataGearと呼ばれる変数データを用いる. -DataGearを入力として受け取り,別のDataGearに書き込み出力することができる. +図\ref{fig:dgcg}はCodeGearとDataGearの関係を表している. +CodeGearはDataGearを入力として受け取り,別のDataGearに書き込み出力することができる. 特に入力のDataGearをInput DataGear,出力のDataGearをOutput DataGearと呼ぶ. gotoで次のCodeGearに遷移することができ,その際Output DataGearを次のCodeGearのInput DataGearとして渡すことができる. +\begin{figure}[h] + \begin{center} + \includegraphics[width=120mm]{figs/dgcgdg.png} + \end{center} + \caption{非破壊的なTree編集} + \label{fig:dgcg} +\end{figure} -\section{継続} +\section{軽量継続} CodeGearから次のCodeGearに遷移していく一連の動作を継続と呼ぶ. +通常の関数の場合,関数から次の関数へ遷移する時にfunction callが行われる. +function callは前の関数へ戻る場合があり,そのためにcall stackを保存する. CbCの継続はfunction callをせずにgotoによるjmpで行われる. -function callによる継続と異なり,jmpによる継続はstackなどの環境を保存しないことから軽量である. -そのことからCbCにおける継続を特に軽量継続と呼ぶ. +jmpはfunction callと異なり,call stackのような環境を保存しない. +よってCbCの継続は関数の繊維と比較して軽量であるといえる. +そのことからCbCにおける継続をfunction callにおける継続と区別して,軽量継続と呼ぶ. \section{CbCの記述例} -CbCのプログラム例をソースコード\ref{src:cbc}に示す.まずmain関数においてadd1 CodeGearへgotoを行う. +CbCのプログラム例をソースコード\ref{src:cbc}に示す. +まずmain関数においてadd1 CodeGearへgotoを行う. その際add1へInput DataGearとしてnを渡す. +Cのgotoが\emph{goto label;}という記法で,ラベリングした箇所へjmpを行うのに対し, +CbCのgotoは\emph{goto add1(n);}という記法で,add1 CodeGearへn DataGearを渡してjmpを行う. add1は処理の最後にadd2 CodeGearへgotoを行う. その際Output DataGear out\_nをadd2のInput DataGearとして渡す. このようにCbCではCodeGearのOutput DataGearを次のCodeGearのInput DataGearとして渡すことを繰り返すことで処理を進める. @@ -47,12 +61,13 @@ \begin{center} \includegraphics[width=100mm]{figs/meta-cg-dg.pdf} \end{center} - \caption{CodeGearとMetaCodeGearの関係} + \caption{CodeGearとMetaCodeGearの関係} \label{fig:meta-cgdg} \end{figure} \section{Context} -Contextは全てのCodeGear,DataGearを参照することができるMetaDataGearで,従来OSのプロセスに相当する. +Contextは全てのCodeGear,DataGearを参照することができるMetaDataGearで +従来OSのプロセスに相当する. OS全体のContextを管理するKernel Contextやユーザープログラムごとに存在するUser Contextなどがある. ノーマルレベルのCodeGearがContextを直接参照してしまうと,メタレベルを切り分けた意味がなくなってしまう. そのためContextは必ずMetaDataGearとしてMetaCodeGearから参照される. @@ -155,16 +170,29 @@ \section{inodeを用いたdirectory entry} \section{非破壊的編集によるBackup} +\begin{figure}[h] + \begin{center} + \includegraphics[width=150mm]{figs/nonDestroyTreeEdit.pdf} + \end{center} + \caption{非破壊的なTree編集} + \label{fig:TreeEdit} +\end{figure} \chapter{File構造} ファイルシステムはディレクトリ構造の他にファイル構造を持つ. GearsOSにおけるファイル構造を説明する. \section{I/O Stream} +ファイルのInput/Output Streamは競合的なアクセスに対応するため,3つのSynchronizedQueueを用いる. +それぞれをinputQueue, outputQueue, mainQueueと呼ぶ. +データをinputしたい場合inputQueueへputを行い,取得したい場合outputQueueからgetを行う. +mainQueueはデータそのものであり,inputQueueからmainQueue,mainQueueからoutputQueueへデータが流れるように接続される. +3つのQueueを通過するデータはelementと呼ばれる. \section{logによるバージョン管理} + \chapter{WordCount} WordCount例題\cite{file}はGearsOSのファイルシステムを構築する際に用いてる例題である. 指定したファイルの文字数や行数,ファイルの内の文字列を出力する. @@ -172,6 +200,13 @@ 大きく分けて,指定したファイルをFile構造体としてopenするFileOpenスレッド, File構造体を受け取り文字数と行数をcountUpするWordCountスレッドの二つのCodeGearで記述することができる. ファイル内の文字列を行ごとにCountUpに送信し,EOFを受け取ったらループを抜けfinishに移行する. +\begin{figure}[h] + \begin{center} + \includegraphics[width=100mm]{figs/wordCountStates.pdf} + \end{center} + \caption{WordCount with CbC} + \label{fig:WCStates} +\end{figure} \section{API} \section{GearBox的な処理} diff -r 124583e0b372 -r c59b95705898 paper/thesis.pdf Binary file paper/thesis.pdf has changed