Mercurial > hg > Papers > 2022 > matac-thesis
changeset 11:5f9d95ec1b54
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 25 Jan 2022 04:05:40 +0900 |
parents | 92e9cdff6d7d |
children | f28541912af5 |
files | paper/src/FTree.h paper/src/cd.cbc paper/src/ls.cbc paper/text/chapter2.tex paper/thesis.pdf paper/thesis.tex |
diffstat | 6 files changed, 62 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/FTree.h Tue Jan 25 04:05:40 2022 +0900 @@ -0,0 +1,8 @@ +typedef struct FTree<>{ + union Data* fTree; + struct Node* node; + __code put(Impl* fTree,Type* node, __code next(...)); + __code get(Impl* fTree, Type* node, __code next(...)); + __code remove(Impl* fTree,Type* node, __code next(...)); + __code next(...); +} FTree; \ No newline at end of file
--- a/paper/src/cd.cbc Tue Jan 25 00:24:37 2022 +0900 +++ b/paper/src/cd.cbc Tue Jan 25 04:05:40 2022 +0900 @@ -0,0 +1,19 @@ +// 仮 +__code cd2Child(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) { + struct FTree* cDirectory = new FTree(); + cDirectory = gearsDirectory->currentDirectory; + struct Node* node = new Node(); + node->key = name->value; + goto cDirectory->get(node, cd2Child2); +} + +__code cd2Child2(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { + struct FTree* iNodeTree = new FTree(); + iNodeTree = gearsDirectory->iNodeTree; + goto iNodeTree->get(node->value, cd2Child3); +} + +__code cd2Child3(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { + gearsDirectory->currentDirectory = node->value; + goto next(...); +} \ No newline at end of file
--- a/paper/src/ls.cbc Tue Jan 25 00:24:37 2022 +0900 +++ b/paper/src/ls.cbc Tue Jan 25 04:05:40 2022 +0900 @@ -0,0 +1,12 @@ +__code ls(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) { + Node* dir = new Node(); + dir->key = name->value; + struct FTree* cDirectory = new FTree(); + cDirectory = gearsDirectory->currentDirectory; + goto cDirectory->get(dir, ls2); +} + +__code ls2(struct GearsDirectoryImpl* gearsDirectory, struct Node* node, __code next(...)) { + printf("%d\n", node->key); + goto next(...); +} \ No newline at end of file
--- a/paper/text/chapter2.tex Tue Jan 25 00:24:37 2022 +0900 +++ b/paper/text/chapter2.tex Tue Jan 25 04:05:40 2022 +0900 @@ -127,15 +127,17 @@ dotファイルに記述したノードの数と参加ノードの数が一致した場合に動作する. 動的topologyは参加を表明したノードに対し,自動的に配線を行う. -\chapter{UnixのFileSystem} +\chapter{UnixのFile system} \section{xv6} -MITで教育用の目的で開発されたOSで,基本的なUnixの構造を持つ. +MITで教育用の目的で開発されたOSで,Unixの基本的な構造を持つ. +当研究室ではxv6のCbCでの書き換え,分析を行なっている. +xv6はUnix系のOSであるため,File systemでは\emph{inode}の仕組みが用いられている. \section{inode} 主にUnix系のファイルシステムで用いられる,ファイルの属性情報が書かれたデータである. inodeにおけるファイルの属性情報は表\ref{table:inode}のようなものがある. またinodeは識別番号としてinode numberを持つ. -inode numberは一つのファイルシステム内で一意の番号であり,\emph{ls -l}コマンドで確認可能である. +inode numberは一つのファイルシステム内で一意の番号であり,\emph{ls -i}コマンドで確認可能である. inodeはファイルシステム始動時にinode領域をディスク上に確保する. そのためinode numberには上限があり,それに伴いファイルシステム上で扱えるファイル数の上限も決まる. inode numberの最大値は\emph{df -i}コマンドで確認可能である. @@ -168,8 +170,20 @@ \end{table} \chapter{GearsFileSystemのdirectory} -実装はFileとしてDataGearManagerをRedBlackTreeに格納する形で行う. -また,Unixのinodeの仕組みをディレクトリシステムとして取り入れる. +当研究室ではxv6のCbCでの実装を行なっているが,今回はxv6のルーチンをCbCで書き換えるのではなく +GearsOSへUnixのFile systemの仕組みを取り入れるアプローチをとる. +ファイルシステムを大まかにディレクトリシステムとファイルの二つに分けて考える. +ディレクトリシステムはUnixのinodeの仕組みを取り入れる. + +\section{FileSystemTree} +FileSystemTreeは今回directory構造,inodeの仕組みを取り入れる際に用いるTreeである. +ソースコード\ref{src:ftree}はFileSystemTreeのinterfaceである. +gearsOSにおけるinterfaceはCodeGearと各CodeGearが用いるI/O DataGearの集合を記述する. +FileSystemTreeのinterfaceはfTreeとnodeのDataGearとput,get,remove,nextのCodeGearを持つ. +FileSystemTreeの実体はRedBlackTreeであり,put,get,removeはRedBlackTreeの操作を行うためのCodeGearである. +nextは遷移先のCodeGear +\lstinputlisting[caption=FTreeのinterface,label=src:ftree]{src/FTree.h} + \section{Treeによるdirectory構造} ディレクトリ構造は2つのRedBlackTreeで実装する. @@ -192,11 +206,10 @@ \subsection{cd} \lstinputlisting[caption=cdのCodeGear,label=src:cd]{src/cd.cbc} -\section{inodeを用いたdirectory entry} \section{非破壊的編集によるBackup} \begin{figure}[h] \begin{center} - \includegraphics[width=150mm]{figs/nonDestroyTreeEdit.pdf} + \includegraphics[width=120mm]{figs/nonDestroyTreeEdit.pdf} \end{center} \caption{非破壊的なTree編集} \label{fig:TreeEdit} @@ -236,6 +249,5 @@ \chapter{今後の課題} \section{分散ファイルシステム} -\section{GearsAgda} -\section{shell} -\section{モデル検査} \ No newline at end of file +\section{信頼性} +\section{shell} \ No newline at end of file