Mercurial > hg > Papers > 2022 > matac-sigos
changeset 4:46ed84991a9d
fix: ~8
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 03 May 2022 14:20:41 +0900 |
parents | 00deefffb582 |
children | 325c0d05d3e4 |
files | Paper/paper.tex |
diffstat | 1 files changed, 31 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/paper.tex Tue May 03 13:52:01 2022 +0900 +++ b/Paper/paper.tex Tue May 03 14:20:41 2022 +0900 @@ -246,7 +246,7 @@ 今回作成した,GearsOSのディレクトリシステムであるgearsDirectoryについて説明する. ファイルについては後の章で述べる. -FileSystemTreeはdirectory構造,inodeの仕組みを取り入れる際に用いるTreeである. +FileSystemTreeはディレクトリ構造,inodeの仕組みを取り入れる際に用いるTreeである. ソースコード\ref{src:ftree}はFileSystemTreeのinterfaceである. gearsOSにおけるinterfaceはCodeGearと各CodeGearが用いるI/O DataGearの集合を記述する. よって,FileSystemTreeのinterfaceはfTreeとnodeのDataGearとput,get,remove,nextのCodeGearを持つ. @@ -275,20 +275,37 @@ \label{fig:inode} \end{figure} +GearsOSにおける永続データは非破壊的な編集を行う木構造を用いて保存する. +図\ref{fig:TreeEdit}は非破壊的編集を木構造に対し行う様子である. +赤で示されたノード6をAに編集する場合,まずルートノードから編集ノードまでのパスを全てコピーする. +コピーしたパス上に存在しないノードは,コピー元の木構造と共有する. +それにより,編集後の木構造の赤のルートノードから探索を行う場合は編集されたAのノードが見え, +黒のルートノードから探索を行う場合は編集前の6のノードを見ることができる. +ディレクトリシステムを非破壊的な木構造の編集を用いて実装することにより, +ディレクトリシステム自体にバックアップの機能を搭載することが可能であると考える. + +\begin{figure}[ht] + \begin{center} + \includegraphics[width=80mm]{figs/nonDestroyTreeEdit.pdf} + \end{center} + \caption{非破壊的なTree編集} + \label{fig:TreeEdit} +\end{figure} + \section{GearsFileSystemにおけるインターフェース} ファイルやディレクトリの操作を行うインターフェースをUnix Likeに実装を行った. 実装を行ったmkdir, ls, cdを説明する. \subsection{mkdir} -Unixにおいてmkdirは新しくdirectoryを作成するコマンドである. -GearsDirectoryのmkdirはindex treeとinode treeにnodeをputすることでdirectoryを作成する. +Unixにおいてmkdirは新しくディレクトリを作成するコマンドである. +GearsDirectoryのmkdirはindex treeとinode treeにnodeをputすることでディレクトリを作成する. ソースコード\ref{src:mkdir}はgearsDirectoryにおけるmkdirのCodeGearであり,図\ref{fig:mkdir}はその処理を図で表したものである. まず1行目の\emph{\_\_code mkdir}ではinode treeへinodeのputが行われ,\emph{\_\_code mkdir2}へ遷移する. inodeは4,5行目でkeyにinode number, valueにディレクトリのポインタがセットされる. 次に,11行目の\emph{\_\_code mkdir2}ではindex treeへkeyがfilename,valueがinode numberのnodeのputが行われ,nextのCodeGearへ遷移する. -FileSystemTreeのputを2回行うため,mkdirは\emph{\_\_code mkdir}と\emph{\_\_code mkdir2}の2つのCodeGearで構成されている. -InputDataGearの\emph{name}はfilenameを表す. +このように,FileSystemTreeのputを2回行うため,mkdirは\emph{\_\_code mkdir}と\emph{\_\_code mkdir2}の2つのCodeGearで構成されている. +また,InputDataGearの\emph{name}はfilenameを表す. \lstinputlisting[caption=mkdirのCodeGear,label=src:mkdir]{src/mkdir.cbc} \begin{figure}[ht] \begin{center} @@ -301,14 +318,14 @@ \subsection{ls} Unixにおいてlsはファイルやディレクトリの一覧,メタ情報を表示するコマンドである. GearsDirectoryのlsはindex treeに対し,getをすることでディレクトリのnameを取得する. -Unixのlsコマンドにおける\emph{\$ls filename}に等しい機能である. +これは,Unixのlsコマンドにおける\emph{\$ls filename}に等しい機能である. ソースコード\ref{src:ls}はgearsDirectoryにおけるlsのCodeGearであり,図\ref{fig:ls}はその処理を図で表したものである. まず1行目の\emph{\_\_code ls}ではindex treeに対しgetを行うため, 3行目でgetしたいfilenameをkeyにセットし,index treeのgetへgotoしている. その後,9行目の\emph{\_\_code ls2}ではnode\verb|->|keyに格納されたgetの結果をprintfで出力する. -本来lsコマンドは引数を渡さずに実行するとcurrent directory下のディレクトリやファイルを一覧で表示するが, +本来lsコマンドは引数を渡さずに実行するとカレントディレクトリ下のディレクトリやファイルを一覧で表示するが, 現時点では未実装である. -一覧表示の機能はfilenameのリストをディレクトリに持たせることで実装可能であると思われる. +なお,一覧表示の機能はfilenameのリストをディレクトリに持たせることで実装可能であると思われる. \lstinputlisting[caption=lsのCodeGear,label=src:ls]{src/ls.cbc} \begin{figure}[ht] \begin{center} @@ -326,7 +343,7 @@ まず1行目の\emph{\_\_code cd2Child}でindex treeに対しgetを行うため,index treeのgetへgotoしている. 次に,9行目の\emph{\_\_code cd2Child2}でinode treeに対しgetを行うため,inode treeのgetへgotoしている. この際,getは1行目のcd2Childでgetしたnodeのvalueをもとに行う.valueにはinode numberがセットされている. -その後,15行目の\emph{\_\_code cd2Child3}でcurrent directoryを保存しているgearsDirectory\verb|->|currentDirectoryを +その後,15行目の\emph{\_\_code cd2Child3}でcurrent ディレクトリを保存しているgearsDirectory\verb|->|currentDirectoryを getしたnode\verb|->|valueに書き換える. \lstinputlisting[caption=cdのCodeGear,label=src:cd]{src/cd.cbc} \begin{figure}[ht] @@ -337,23 +354,6 @@ \label{fig:cd} \end{figure} -GearsOSにおける永続データは非破壊的な編集を行う木構造を用いて保存する. -図\ref{fig:TreeEdit}は非破壊的編集を木構造に対し行う様子である. -赤で示されたノード6をAに編集する場合,まずルートノードから編集ノードまでのパスを全てコピーする. -コピーしたパス上に存在しないノードは,コピー元の木構造と共有する. -それにより,編集後の木構造の赤のルートノードから探索を行う場合は編集されたAのノードが見え, -黒のルートノードから探索を行う場合は編集前の6のノードを見ることができる. -ディレクトリシステムを非破壊的な木構造の編集を用いて実装することにより, -ディレクトリシステム自体にバックアップの機能を搭載することが可能であると考える. - -\begin{figure}[ht] - \begin{center} - \includegraphics[width=80mm]{figs/nonDestroyTreeEdit.pdf} - \end{center} - \caption{非破壊的なTree編集} - \label{fig:TreeEdit} -\end{figure} - \section{GearsFileSystemにおけるファイルの構成} ファイルシステムはディレクトリの構成だけでなく,ファイルの構成についても考える必要がある. @@ -365,7 +365,7 @@ それぞれをInputQueue, OutputQueue, mainQueueと呼ぶ. データをinputしたい場合InputQueueへputを行い,取得したい場合OutputQueueからgetを行う. mainQueueはデータそのものであり,InputQueueからmainQueue,mainQueueからOutputQueueへデータが流れるように接続される. -Gearの概念ではDataGearにあたり,DataGearManagerにkeyとI/O Queueが対応する形で保持される. +これらは,Gearの概念ではDataGearにあたり,DataGearManagerにkeyとI/O Queueが対応する形で保持される. ファイルの中身のデータをレコードに分割し,レコードをQueueにputしてstreamに入れる. データを取り出す際はQueueからgetし,順番に読むことでファイルを構築する. @@ -373,9 +373,9 @@ WordCount例題\cite{file}を通して,GearsFileのAPIの作成を行う. WordCount例題は指定したファイルの文字数や行数,ファイルの内の文字列を出力する. 図\ref{fig:WCStates}はWordCount例題の処理の流れを示している. -大きく分けて,指定したファイルをFile構造体としてopenするFileOpenスレッド, +これは大きく分けて,指定したファイルをFile構造体としてopenするFileOpenスレッド, File構造体を受け取り文字数と行数をcountUpするWordCountスレッドの二つのCodeGearで記述することができる. -ファイル内の文字列を行ごとにCountUpに送信し,EOFを受け取ったらループを抜けfinishに移行する. +また,ファイル内の文字列を行ごとにCountUpに送信し,EOFを受け取ったらループを抜けfinishに移行する. \begin{figure}[ht] \begin{center} \includegraphics[width=80mm]{figs/wordCountStates.pdf} @@ -417,14 +417,14 @@ Unix Likeに構築することが出来た. 信頼性については,定理証明やモデル検査を用いて保証を行うが, -非破壊的なTree編集によるdirectoryのバックアップやファイルのバックアップをファイルシステムに組み込むことでも +非破壊的なTree編集によるディレクトリのバックアップやファイルのバックアップをファイルシステムに組み込むことでも 信頼性の向上が期待できる.形式手法とファイルシステムの機能の両面で信頼性の向上が図れると考える. \nocite{*} \bibliographystyle{ipsjunsrt} \bibliography{matac-bib} - +% ikkiさんの修論 \end{document}