annotate Paper/paper.tex @ 0:466b958a3419

init
author k228587
date Tue, 04 Apr 2023 18:46:21 +0900
parents
children c4f210d08680
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
k228587
parents:
diff changeset
1 %%
k228587
parents:
diff changeset
2 %% 研究報告用スイッチ
k228587
parents:
diff changeset
3 %% [techrep]
k228587
parents:
diff changeset
4 %%
k228587
parents:
diff changeset
5 %% 欧文表記無しのスイッチ(etitle,eabstractは任意)
k228587
parents:
diff changeset
6 %% [noauthor]
k228587
parents:
diff changeset
7 %%
k228587
parents:
diff changeset
8
k228587
parents:
diff changeset
9 %\documentclass[submit,techrep]{ipsj}
k228587
parents:
diff changeset
10 \documentclass[submit,techrep,noauthor]{ipsj}
k228587
parents:
diff changeset
11
k228587
parents:
diff changeset
12
k228587
parents:
diff changeset
13
k228587
parents:
diff changeset
14 \usepackage[dvips, dvipdfmx]{graphicx}
k228587
parents:
diff changeset
15 \usepackage{latexsym}
k228587
parents:
diff changeset
16 \usepackage{listings}
k228587
parents:
diff changeset
17 \lstset{
k228587
parents:
diff changeset
18 language=C,
k228587
parents:
diff changeset
19 tabsize=2,
k228587
parents:
diff changeset
20 frame=single,
k228587
parents:
diff changeset
21 basicstyle={\tt\footnotesize}, %
k228587
parents:
diff changeset
22 identifierstyle={\footnotesize}, %
k228587
parents:
diff changeset
23 commentstyle={\footnotesize\itshape}, %
k228587
parents:
diff changeset
24 keywordstyle={\footnotesize\ttfamily}, %
k228587
parents:
diff changeset
25 ndkeywordstyle={\footnotesize\ttfamily}, %
k228587
parents:
diff changeset
26 stringstyle={\footnotesize\ttfamily},
k228587
parents:
diff changeset
27 breaklines=true,
k228587
parents:
diff changeset
28 captionpos=t,
k228587
parents:
diff changeset
29 columns=[l]{fullflexible}, %
k228587
parents:
diff changeset
30 xrightmargin=0zw, %
k228587
parents:
diff changeset
31 xleftmargin=1zw, %
k228587
parents:
diff changeset
32 aboveskip=1zw,
k228587
parents:
diff changeset
33 numberstyle={\scriptsize}, %
k228587
parents:
diff changeset
34 stepnumber=1,
k228587
parents:
diff changeset
35 numbersep=0.5zw, %
k228587
parents:
diff changeset
36 lineskip=-0.5ex
k228587
parents:
diff changeset
37 }
k228587
parents:
diff changeset
38 \usepackage{caption}
k228587
parents:
diff changeset
39
k228587
parents:
diff changeset
40
k228587
parents:
diff changeset
41 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
k228587
parents:
diff changeset
42 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
k228587
parents:
diff changeset
43 \def\|{\verb|}
k228587
parents:
diff changeset
44 %
k228587
parents:
diff changeset
45
k228587
parents:
diff changeset
46 %\setcounter{巻数}{59}%vol59=2018
k228587
parents:
diff changeset
47 %\setcounter{号数}{10}
k228587
parents:
diff changeset
48 %\setcounter{page}{1}
k228587
parents:
diff changeset
49 \renewcommand{\lstlistingname}{Code}
k228587
parents:
diff changeset
50
k228587
parents:
diff changeset
51 \begin{document}
k228587
parents:
diff changeset
52
k228587
parents:
diff changeset
53
k228587
parents:
diff changeset
54 \title{Gears OSのファイルシステムとDB}
k228587
parents:
diff changeset
55
k228587
parents:
diff changeset
56 \affiliate{IPSJ}{情報処理学会\\
k228587
parents:
diff changeset
57 IPSJ, Chiyoda, Tokyo 101--0062, Japan}
k228587
parents:
diff changeset
58
k228587
parents:
diff changeset
59
k228587
parents:
diff changeset
60 \paffiliate{JU}{琉球大学大学院理工学研究科工学専攻知能情報プログラム\\
k228587
parents:
diff changeset
61 University of the Ryukyus, Graduate School of Engineering and Science}
k228587
parents:
diff changeset
62
k228587
parents:
diff changeset
63 \author{又吉 雄斗}{Matayoshi Yuto}{KIE}[matac@cr.ie.u-ryukyu.ac.jp]
k228587
parents:
diff changeset
64 \author{佐野 巧曜}{Sano Yoshiaki}{KIE}[yoshisaur@cr.ie.u-ryukyu.ac.jp]
k228587
parents:
diff changeset
65 \author{河野 真治}{Kono Shinzi}{IE}[kono@ie.u-ryukyu.ac.jp]
k228587
parents:
diff changeset
66
k228587
parents:
diff changeset
67 \begin{abstract}
k228587
parents:
diff changeset
68 当研究室では,Continuation based C(CbC)を用い,定理証明やモデル検査などで信頼性を保証することを目的としたGearsOSを開発している.
k228587
parents:
diff changeset
69 OSにおいてファイルシステムは重要な機能の一つであるため実装する必要がある.
k228587
parents:
diff changeset
70 現在,一般的なアプリケーションはファイルシステムとデータベースを併用する形で構成される.
k228587
parents:
diff changeset
71 DBはSQLによってデータの挿入や変更が可能だがスキーマを事前に定義したり,insert時にそれらのschemaを指定したりする必要がある.
k228587
parents:
diff changeset
72 GearsOSのファイルシステムではSQLの機能に相当するgrepやfindなどのインターフェースを実装し,
k228587
parents:
diff changeset
73 アプリケーションのデータベースとしてファイルシステムを使用する構成が取れるようにしたい.
k228587
parents:
diff changeset
74 ファイルシステムとデータベースの違いについて考え,データベースとしても利用可能なファイルシステムを構築したい.
k228587
parents:
diff changeset
75 本研究では,ファイルシステムとデータベースの違いについて考察し,Gears OSのファイルシステムの設計について述べる.
k228587
parents:
diff changeset
76 \end{abstract}
k228587
parents:
diff changeset
77
k228587
parents:
diff changeset
78
k228587
parents:
diff changeset
79 %
k228587
parents:
diff changeset
80 %\begin{jkeyword}
k228587
parents:
diff changeset
81 %情報処理学会論文誌ジャーナル,\LaTeX,スタイルファイル,べからず集
k228587
parents:
diff changeset
82 %\end{jkeyword}
k228587
parents:
diff changeset
83 %
k228587
parents:
diff changeset
84 %\begin{eabstract}
k228587
parents:
diff changeset
85 %This document is a guide to prepare a draft for submitting to IPSJ
k228587
parents:
diff changeset
86 %Journal, and the final camera-ready manuscript of a paper to appear in
k228587
parents:
diff changeset
87 %IPSJ Journal, using {\LaTeX} and special style files. Since this
k228587
parents:
diff changeset
88 %document itself is produced with the style files, it will help you to
k228587
parents:
diff changeset
89 %refer its source file which is distributed with the style files.
k228587
parents:
diff changeset
90 %\end{eabstract}
k228587
parents:
diff changeset
91 %
k228587
parents:
diff changeset
92 %\begin{ekeyword}
k228587
parents:
diff changeset
93 %IPSJ Journal, \LaTeX, style files, ``Dos and Dont's'' list
k228587
parents:
diff changeset
94 %\end{ekeyword}
k228587
parents:
diff changeset
95
k228587
parents:
diff changeset
96 \maketitle
k228587
parents:
diff changeset
97
k228587
parents:
diff changeset
98 %1
k228587
parents:
diff changeset
99 \section{GearsOSにおけるファイルシステム}
k228587
parents:
diff changeset
100
k228587
parents:
diff changeset
101 アプリケーションの信頼性を保証することは
k228587
parents:
diff changeset
102 情報システムやコンピュータを用いる業務の信頼性の保障につながる重要な課題である.
k228587
parents:
diff changeset
103 したがって,アプリケーションの信頼性を保証するために,基盤となるOSの信頼性を高める必要がある.
k228587
parents:
diff changeset
104
k228587
parents:
diff changeset
105 当研究室では,信頼性の保証を目的としたGearsOSを開発している.
k228587
parents:
diff changeset
106 GearsOSは,OSの信頼性を定理証明やモデル検査を行うことで保証することを目指している\cite{modelcheck}.
k228587
parents:
diff changeset
107 同じく,当研究室で開発しているプログラム言語であるCbC(Continuation based C)で記述されており,
k228587
parents:
diff changeset
108 ノーマルレベルとメタレベルを簡単に切り分けることを可能としている.
k228587
parents:
diff changeset
109 そのようにして,CbCでメタレベルの処理を切り出したものに対して,定理証明やモデル検査を行うことで信頼性を保証する.
k228587
parents:
diff changeset
110
k228587
parents:
diff changeset
111 GearsOSは現在OSとして重要な機能がいくつか未実装であり,その一つとしてファイルシステムが挙げられる.
k228587
parents:
diff changeset
112 ファイルシステムはファイルやディレクトリといった構造を持ち,データの保存,整理を行う.
k228587
parents:
diff changeset
113 また,OSが管理するデータの操作を人間が行いやすいようにインターフェースを提供する.
k228587
parents:
diff changeset
114 OSの機能の中でも特に重要な機能であるため,GearsOSにも実装を行う必要がある.
k228587
parents:
diff changeset
115
k228587
parents:
diff changeset
116 今回GearsOSへファイルシステムを実装するにあたり,Unixのファイルシステムを参考にした.
k228587
parents:
diff changeset
117 Unixのファイルシステムではファイルのメタデータをinodeの形式で保持している.
k228587
parents:
diff changeset
118 同様に,inodeの仕組みを用いてGearsOSのファイルシステムを実装したい.
k228587
parents:
diff changeset
119 また,インターフェースについても,cd,ls,mkdirというようにUnix likeに実装したい.
k228587
parents:
diff changeset
120 当研究室ではxv6のCbCでの書き換えを行なっているが,今回はxv6のルーチンをCbCで書き換えるのではなく
k228587
parents:
diff changeset
121 GearsOSへUnixのファイルシステムの仕組みを取り入れるアプローチをとりたい.
k228587
parents:
diff changeset
122 それはGearsOSとCbCで書き換えたxv6の比較や,互いにファイルシステムの機能の移植が行える様にするためである.
k228587
parents:
diff changeset
123
k228587
parents:
diff changeset
124 GearsOSのファイルシステムを構築するにあたり,メモリマネージメントについて考察する.
k228587
parents:
diff changeset
125 現在,GearsOSにはメモリマネージメントのシステムが存在しない.
k228587
parents:
diff changeset
126 しかしながら,ファイルシステムを構築するにあたりメモリマネージメントが必要不可欠である.
k228587
parents:
diff changeset
127 メモリ上のRedBlackTreeで構築されたデータ構造をそのままディスクにコピーする形で実装することを目指したい.
k228587
parents:
diff changeset
128
k228587
parents:
diff changeset
129 \section{Continuation based C}
k228587
parents:
diff changeset
130
k228587
parents:
diff changeset
131 Continuation based C(CbC)\cite{cbcllvm,cbc}は,当研究室で開発しているCの下位言語である.
k228587
parents:
diff changeset
132 CbCでは関数の代わりにCodeGearという単位でプログラミングを行う.
k228587
parents:
diff changeset
133 CodeGearは\emph{\_\_code}という記述で宣言することができる.
k228587
parents:
diff changeset
134 また,データの単位にはDataGearと呼ばれる変数データを用いる.
k228587
parents:
diff changeset
135 図\ref{fig:dgcg}はCodeGearと入出力の関係を表している.
k228587
parents:
diff changeset
136 CodeGearはDataGearを入力として受け取り,別のDataGearに書き込み出力することができる.
k228587
parents:
diff changeset
137 特に,入力のDataGearをInput DataGear,出力のDataGearをOutput DataGearと呼ぶ.
k228587
parents:
diff changeset
138 gotoで次のCodeGearに遷移することができ,その際,Output DataGearを次のCodeGearのInput DataGearとして渡すことができる.
k228587
parents:
diff changeset
139
k228587
parents:
diff changeset
140 \begin{figure}[ht]
k228587
parents:
diff changeset
141 \begin{center}
k228587
parents:
diff changeset
142 \includegraphics[width=80mm]{figs/cgdg.pdf}
k228587
parents:
diff changeset
143 \end{center}
k228587
parents:
diff changeset
144 \caption{CodeGearと入出力の関係図}
k228587
parents:
diff changeset
145 \label{fig:dgcg}
k228587
parents:
diff changeset
146 \end{figure}
k228587
parents:
diff changeset
147
k228587
parents:
diff changeset
148 CodeGearから次のCodeGearに遷移していく一連の動作を継続と呼ぶ.
k228587
parents:
diff changeset
149 通常の関数の場合,関数から次の関数へ遷移する時にfunction callが行われる.
k228587
parents:
diff changeset
150 function callは前の関数へ戻る場合があり,そのためにcall stackを保存する.
k228587
parents:
diff changeset
151 他方,CbCの継続はfunction callをせずにgotoによるjmpで行われる.
k228587
parents:
diff changeset
152 jmpはfunction callと異なり,call stackのような環境を保存しない.
k228587
parents:
diff changeset
153 よって,CbCのgotoによる継続はfunction callによる継続と比較して軽量であるといえる.
k228587
parents:
diff changeset
154 そのことから,CbCにおける継続をfunction callによる継続と区別して,軽量継続と呼ぶ.
k228587
parents:
diff changeset
155 これらの仕組みにより,ノーマルレベルとメタレベルの処理を容易に切り分けることが可能となる.
k228587
parents:
diff changeset
156
k228587
parents:
diff changeset
157 CbCのプログラム例をソースコード\ref{src:cbc}に示す.
k228587
parents:
diff changeset
158 まずmain関数においてadd1 CodeGearへgotoを行う.
k228587
parents:
diff changeset
159 その際add1へInput DataGearとしてnを渡す.
k228587
parents:
diff changeset
160 Cのgotoが\emph{goto label;}という記法で,ラベリングした箇所へjmpを行うのに対し,
k228587
parents:
diff changeset
161 CbCのgotoは\emph{goto add1(n);}という記法で,add1 CodeGearへn DataGearを渡してjmpを行う.
k228587
parents:
diff changeset
162 add1は処理の最後にadd2 CodeGearへgotoを行う.
k228587
parents:
diff changeset
163 その際Output DataGear out\_nをadd2のInput DataGearとして渡す.
k228587
parents:
diff changeset
164 このようにCbCではCodeGearのOutput DataGearを次のCodeGearのInput DataGearとして渡すことを繰り返すことで処理を進める.
k228587
parents:
diff changeset
165
k228587
parents:
diff changeset
166 \lstinputlisting[caption=CbCのプログラム例,label=src:cbc]{src/hello.cbc}
k228587
parents:
diff changeset
167
k228587
parents:
diff changeset
168 \section{GearsOS}
k228587
parents:
diff changeset
169
k228587
parents:
diff changeset
170 GearsOS\cite{gears,gearsos,cr}は当研究室で開発している,信頼性と拡張性の両立を目的としたOSである.
k228587
parents:
diff changeset
171 GearsOSにはGearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ.
k228587
parents:
diff changeset
172 軽量継続を基本とし,stackを持たない代わりに全てをContext経由で実行する.
k228587
parents:
diff changeset
173 同様にGearの概念を持つContinuation based C(CbC)で記述されており,ノーマルレベルとメタレベルの処理を切り分けることが容易である.
k228587
parents:
diff changeset
174 また,GearsOSは現在開発途上であり,OSとして動作するために今後実装しなければならない機能がいくつか残っている.
k228587
parents:
diff changeset
175
k228587
parents:
diff changeset
176 ContextはGearsOS上全てのCodeGear,DataGearの参照を持ち,CodeGearとDataGearの接続に用いられる.
k228587
parents:
diff changeset
177 OS上の処理の実行単位で,従来のOSにおけるプロセスに相当する機能であるといえる.
k228587
parents:
diff changeset
178 また,CodeGearをDataGearの一種であると考えると,ContextはGearの概念ではMetaDataGearに当たる.
k228587
parents:
diff changeset
179 Contextはノーマルレベルから直接参照されず,必ずMetaDataGearとしてMetaCodeGearから参照される.
k228587
parents:
diff changeset
180 それは,ノーマルレベルのCodeGearがContextを直接参照してしまうと,
k228587
parents:
diff changeset
181 メタレベルを切り分けた意味がなくなってしまうためである.
k228587
parents:
diff changeset
182
k228587
parents:
diff changeset
183 図\ref{fig:context}はContextを参照する流れを表したものである.
k228587
parents:
diff changeset
184 まずCodeGearがOutputDataGearへデータをoutputする.
k228587
parents:
diff changeset
185 stubCodeGearはInputDataGear(前のCodeGearのOutputDataGear)とOutputDataGearをContextから参照し,次のCodeGearへgotoを行う.
k228587
parents:
diff changeset
186 CodeGearでの処理後,OutputDataGearへデータをoutputする.
k228587
parents:
diff changeset
187
k228587
parents:
diff changeset
188 Contextはいくつかの種類に分けることができる.
k228587
parents:
diff changeset
189 OS全体のContextを管理するKernel Contextやユーザープログラムごとに存在するUser Context,
k228587
parents:
diff changeset
190 CPUやGPUごとに存在するCPU Contextがある.
k228587
parents:
diff changeset
191 \begin{figure}[ht]
k228587
parents:
diff changeset
192 \begin{center}
k228587
parents:
diff changeset
193 \includegraphics[width=80mm]{figs/context.pdf}
k228587
parents:
diff changeset
194 \end{center}
k228587
parents:
diff changeset
195 \caption{Contextを参照する流れ}
k228587
parents:
diff changeset
196 \label{fig:context}
k228587
parents:
diff changeset
197 \end{figure}
k228587
parents:
diff changeset
198
k228587
parents:
diff changeset
199 図\ref{fig:meta-cgdg}はCodeGearの遷移とMetaCodeGearの関係を表している.
k228587
parents:
diff changeset
200 OSのプログラムはユーザーが実際に行いたい処理を表現するノーマルレベルと,
k228587
parents:
diff changeset
201 カーネルが行う処理を表現するメタレベルが存在する.
k228587
parents:
diff changeset
202 ノーマルレベルで見るとCodeGearがDataGearを受け取り,
k228587
parents:
diff changeset
203 処理後にDataGearを次のCodeGearに渡すという動作をしているように見える.
k228587
parents:
diff changeset
204 しかしながら,実際にはデータの整合性の確認や資源管理などのメタレベルの処理が存在し,
k228587
parents:
diff changeset
205 それらの計算はMetaCodeGearで行われる.
k228587
parents:
diff changeset
206 その際,MetaCodeGearに渡されるDataGearのことは特にMetaDataGearと呼ばれる.
k228587
parents:
diff changeset
207 また,CodeGearの前に実行されるMetaCodeGearは特にstubCodeGearと呼ばれ,
k228587
parents:
diff changeset
208 メタレベルを含めるとstubCodeGearとCodeGearを交互に実行する形で遷移していく.
k228587
parents:
diff changeset
209 \begin{figure}[ht]
k228587
parents:
diff changeset
210 \begin{center}
k228587
parents:
diff changeset
211 \includegraphics[width=80mm]{figs/meta-cg-dg.pdf}
k228587
parents:
diff changeset
212 \end{center}
k228587
parents:
diff changeset
213 \caption{CodeGearとMetaCodeGearの関係}
k228587
parents:
diff changeset
214 \label{fig:meta-cgdg}
k228587
parents:
diff changeset
215 \end{figure}
k228587
parents:
diff changeset
216
k228587
parents:
diff changeset
217 \section{Unixのファイルシステム}
k228587
parents:
diff changeset
218
k228587
parents:
diff changeset
219 UnixのファイルシステムはBTreeとinodeで構成されており,xv6もその仕組みを用いている.
k228587
parents:
diff changeset
220 xv6\cite{xv6}はMITで教育用の目的で開発されたOSで,Unixの基本的な構造を持つ.
k228587
parents:
diff changeset
221 当研究室ではxv6のCbCでの書き換え,分析を行なっている\cite{xv6component,xv6kernel}.
k228587
parents:
diff changeset
222
k228587
parents:
diff changeset
223 inodeは主にUnix系のファイルシステムで用いられる,ファイルの属性情報が書かれたデータである.
k228587
parents:
diff changeset
224 inodeにおけるファイルの属性情報は表\ref{table:inode}のようなものがある.
k228587
parents:
diff changeset
225 また,inodeは識別番号としてinode numberを持つ.
k228587
parents:
diff changeset
226 inode numberは一つのファイルシステム内で一意の番号であり,\emph{ls -i}コマンドで確認可能である.
k228587
parents:
diff changeset
227 inodeはファイルシステム始動時にinode領域をディスク上に確保する.
k228587
parents:
diff changeset
228 そのため,inode numberには上限があり,それに伴いファイルシステム上で扱えるファイル数の上限も決まる.
k228587
parents:
diff changeset
229 inode numberの最大値は\emph{df -i}コマンドで確認可能である.
k228587
parents:
diff changeset
230
k228587
parents:
diff changeset
231 \begin{table}[tb]
k228587
parents:
diff changeset
232 \begin{center}
k228587
parents:
diff changeset
233 \small
k228587
parents:
diff changeset
234 \begin{tabular}[htpb]{|c||l|}
k228587
parents:
diff changeset
235 \hline
k228587
parents:
diff changeset
236 File Types & ファイルの種類 \\
k228587
parents:
diff changeset
237 \hline
k228587
parents:
diff changeset
238 Permissions & read write executeの実行可否\\
k228587
parents:
diff changeset
239 \hline
k228587
parents:
diff changeset
240 UID & ファイル所有者のID \\
k228587
parents:
diff changeset
241 \hline
k228587
parents:
diff changeset
242 GID & ファイル所有グループのID \\
k228587
parents:
diff changeset
243 \hline
k228587
parents:
diff changeset
244 File Size & ファイルのサイズ \\
k228587
parents:
diff changeset
245 \hline
k228587
parents:
diff changeset
246 Time Stamps & ファイル作成,編集日時 \\
k228587
parents:
diff changeset
247 \hline
k228587
parents:
diff changeset
248 Number of link & ハードリンクの数 \\
k228587
parents:
diff changeset
249 \hline
k228587
parents:
diff changeset
250 Location on hard disk & データのアドレス\\
k228587
parents:
diff changeset
251 \hline
k228587
parents:
diff changeset
252 \end{tabular}
k228587
parents:
diff changeset
253 \caption{inodeでのファイル属性情報}
k228587
parents:
diff changeset
254 \label{table:inode}
k228587
parents:
diff changeset
255 \end{center}
k228587
parents:
diff changeset
256 \end{table}
k228587
parents:
diff changeset
257
k228587
parents:
diff changeset
258 当研究室ではxv6のCbCでの実装を行なっているが,今回はxv6のFileルーチンをCbCで書き換えるのではなく
k228587
parents:
diff changeset
259 GearsOSへUnixのファイルシステムの仕組みを取り入れるアプローチをとる.
k228587
parents:
diff changeset
260 まず,ファイルシステムを大まかにディレクトリシステムとファイルの二つに分けて考える.
k228587
parents:
diff changeset
261 ディレクトリシステムはUnixのinodeの仕組みを取り入れる.
k228587
parents:
diff changeset
262 今回作成した,GearsOSのディレクトリシステムであるGearsDirectoryについて説明する.
k228587
parents:
diff changeset
263 ファイルについては後の章で述べる.
k228587
parents:
diff changeset
264
k228587
parents:
diff changeset
265 FileSystemTreeはディレクトリ構造,inodeの仕組みを取り入れる際に用いるTreeである.
k228587
parents:
diff changeset
266 ソースコード\ref{src:ftree}はFileSystemTreeのinterfaceである.
k228587
parents:
diff changeset
267 GearsOSにおけるinterfaceはCodeGearと各CodeGearが用いるI/O DataGearの集合を記述する.
k228587
parents:
diff changeset
268 よって,FileSystemTreeのinterfaceはfTreeとnodeのDataGearとput,get,remove,nextのCodeGearを持つ.
k228587
parents:
diff changeset
269 FileSystemTreeのfTreeはGearsOSの永続データを構築する際に使用されるRedBlackTreeであり,put,get,removeはRedBlackTreeの操作を行うためのCodeGearである.
k228587
parents:
diff changeset
270 また,nextは遷移先のCodeGearを参照するために用いる.
k228587
parents:
diff changeset
271 \lstinputlisting[caption=FTreeのinterface,label=src:ftree]{src/FTree.h}
k228587
parents:
diff changeset
272
k228587
parents:
diff changeset
273 ディレクトリ構造は2つのFileSystemTreeで実装する.
k228587
parents:
diff changeset
274 1つ目はinode numberとfileのポインタのペアを持つ木である.
k228587
parents:
diff changeset
275 それは,inode numberをkey,inodeをvalueとして持つためinode numberからinodeを検索するために用いる(以下,inode treeとする).
k228587
parents:
diff changeset
276 2つ目はfilenameとinode numberのペアを持つ木である.
k228587
parents:
diff changeset
277 それは,filenameをkey, inode numberをvalueとして持つため,filenameからinode numberを検索するために用いる.
k228587
parents:
diff changeset
278 また,inodeをfilenameで検索するためのindex treeであるといえる(以下,index treeとする).
k228587
parents:
diff changeset
279
k228587
parents:
diff changeset
280 図\ref{fig:inode}はindex treeを用いたinodeの検索の流れを表す.
k228587
parents:
diff changeset
281 まずindex treeからkeyがfilenameのnodeをgetする.
k228587
parents:
diff changeset
282 keyがfilenameのnodeのvalueよりinode numberがわかる.
k228587
parents:
diff changeset
283 次に,取得したinode numberをkeyとしてinode treeを検索する.
k228587
parents:
diff changeset
284 keyがinode numberのnodeはvalueとしてinodeを持っていて,inodeを参照することができる.
k228587
parents:
diff changeset
285
k228587
parents:
diff changeset
286 \begin{figure}[ht]
k228587
parents:
diff changeset
287 \begin{center}
k228587
parents:
diff changeset
288 \includegraphics[width=80mm]{figs/inode.pdf}
k228587
parents:
diff changeset
289 \end{center}
k228587
parents:
diff changeset
290 \caption{index treeを用いたinodeの検索の流れ}
k228587
parents:
diff changeset
291 \label{fig:inode}
k228587
parents:
diff changeset
292 \end{figure}
k228587
parents:
diff changeset
293
k228587
parents:
diff changeset
294 GearsOSにおける永続データは非破壊的な編集を行う木構造を用いて保存する.
k228587
parents:
diff changeset
295 図\ref{fig:TreeEdit}は非破壊的編集を木構造に対し行う様子である.
k228587
parents:
diff changeset
296 赤で示されたノード6をAに編集する場合,まずルートノードから編集ノードまでのパスを全てコピーする.
k228587
parents:
diff changeset
297 コピーしたパス上に存在しないノードは,コピー元の木構造と共有する.
k228587
parents:
diff changeset
298 それにより,編集後の木構造の赤のルートノードから探索を行う場合は編集されたAのノードが見え,
k228587
parents:
diff changeset
299 黒のルートノードから探索を行う場合は編集前の6のノードを見ることができる.
k228587
parents:
diff changeset
300 ディレクトリシステムを非破壊的な木構造の編集を用いて実装することにより,
k228587
parents:
diff changeset
301 ディレクトリシステム自体にバックアップの機能を搭載することが可能であると考える.
k228587
parents:
diff changeset
302
k228587
parents:
diff changeset
303 \begin{figure}[ht]
k228587
parents:
diff changeset
304 \begin{center}
k228587
parents:
diff changeset
305 \includegraphics[width=80mm]{figs/nonDestroyTreeEdit.pdf}
k228587
parents:
diff changeset
306 \end{center}
k228587
parents:
diff changeset
307 \caption{非破壊的なTree編集}
k228587
parents:
diff changeset
308 \label{fig:TreeEdit}
k228587
parents:
diff changeset
309 \end{figure}
k228587
parents:
diff changeset
310
k228587
parents:
diff changeset
311 \section{GearsFileSystemにおけるインターフェース}
k228587
parents:
diff changeset
312
k228587
parents:
diff changeset
313 ファイルやディレクトリの操作を行うインターフェースをUnix Likeに実装を行った.
k228587
parents:
diff changeset
314 実装を行ったmkdir, ls, cdを説明する.
k228587
parents:
diff changeset
315
k228587
parents:
diff changeset
316 \subsection{mkdir}
k228587
parents:
diff changeset
317 Unixにおいてmkdirは新しくディレクトリを作成するコマンドである.
k228587
parents:
diff changeset
318 GearsDirectoryのmkdirはindex treeとinode treeにnodeをputすることでディレクトリを作成する.
k228587
parents:
diff changeset
319 ソースコード\ref{src:mkdir}はGearsDirectoryにおけるmkdirのCodeGearであり,図\ref{fig:mkdir}はその処理を図で表したものである.
k228587
parents:
diff changeset
320 まず1行目の\emph{\_\_code mkdir}ではinode treeへinodeのputが行われ,\emph{\_\_code mkdir2}へ遷移する.
k228587
parents:
diff changeset
321 inodeは4,5行目でkeyにinode number, valueにディレクトリのポインタがセットされる.
k228587
parents:
diff changeset
322 次に,11行目の\emph{\_\_code mkdir2}ではindex treeへkeyがfilename,valueがinode numberのnodeのputが行われ,nextのCodeGearへ遷移する.
k228587
parents:
diff changeset
323 このように,FileSystemTreeのputを2回行うため,mkdirは\emph{\_\_code mkdir}と\emph{\_\_code mkdir2}の2つのCodeGearで構成されている.
k228587
parents:
diff changeset
324 また,InputDataGearの\emph{name}はfilenameを表す.
k228587
parents:
diff changeset
325 \lstinputlisting[caption=mkdirのCodeGear,label=src:mkdir]{src/mkdir.cbc}
k228587
parents:
diff changeset
326 \begin{figure}[ht]
k228587
parents:
diff changeset
327 \begin{center}
k228587
parents:
diff changeset
328 \includegraphics[width=80mm]{figs/mkdir.pdf}
k228587
parents:
diff changeset
329 \end{center}
k228587
parents:
diff changeset
330 \caption{mkdirの操作の流れ}
k228587
parents:
diff changeset
331 \label{fig:mkdir}
k228587
parents:
diff changeset
332 \end{figure}
k228587
parents:
diff changeset
333
k228587
parents:
diff changeset
334 \subsection{ls}
k228587
parents:
diff changeset
335 Unixにおいてlsはファイルやディレクトリの一覧,メタ情報を表示するコマンドである.
k228587
parents:
diff changeset
336 GearsDirectoryのlsはindex treeに対し,getをすることでディレクトリのnameを取得する.
k228587
parents:
diff changeset
337 これは,Unixのlsコマンドにおける\emph{\$ls filename}に等しい機能である.
k228587
parents:
diff changeset
338 ソースコード\ref{src:ls}はGearsDirectoryにおけるlsのCodeGearであり,図\ref{fig:ls}はその処理を図で表したものである.
k228587
parents:
diff changeset
339 まず1行目の\emph{\_\_code ls}ではindex treeに対しgetを行うため,
k228587
parents:
diff changeset
340 3行目でgetしたいfilenameをkeyにセットし,index treeのgetへgotoしている.
k228587
parents:
diff changeset
341 その後,9行目の\emph{\_\_code ls2}ではnode\verb|->|keyに格納されたgetの結果をprintfで出力する.
k228587
parents:
diff changeset
342 本来lsコマンドは引数を渡さずに実行するとカレントディレクトリ下のディレクトリやファイルを一覧で表示するが,
k228587
parents:
diff changeset
343 現時点では未実装である.
k228587
parents:
diff changeset
344 なお,一覧表示の機能はfilenameのリストをディレクトリに持たせることで実装可能であると思われる.
k228587
parents:
diff changeset
345 \lstinputlisting[caption=lsのCodeGear,label=src:ls]{src/ls.cbc}
k228587
parents:
diff changeset
346 \begin{figure}[ht]
k228587
parents:
diff changeset
347 \begin{center}
k228587
parents:
diff changeset
348 \includegraphics[width=80mm]{figs/ls.pdf}
k228587
parents:
diff changeset
349 \end{center}
k228587
parents:
diff changeset
350 \caption{lsの操作の流れ}
k228587
parents:
diff changeset
351 \label{fig:ls}
k228587
parents:
diff changeset
352 \end{figure}
k228587
parents:
diff changeset
353
k228587
parents:
diff changeset
354 \subsection{cd}
k228587
parents:
diff changeset
355 Unixにおいてcdはディレクトリを移動するコマンドである.
k228587
parents:
diff changeset
356 GearsDirectoryのcdはindex treeとinode treeに対しgetを行い,currentDirectoryを書き換えることで実装する.
k228587
parents:
diff changeset
357 機能としてはディレクトリが持つ子ディレクトリへの移動ができる.
k228587
parents:
diff changeset
358 ソースコード\ref{src:cd}はGearsDirectoryにおけるcdのCodeGearであり,図\ref{fig:cd}はその処理を図で表したものである.
k228587
parents:
diff changeset
359 まず1行目の\emph{\_\_code cd2Child}でindex treeに対しgetを行うため,index treeのgetへgotoしている.
k228587
parents:
diff changeset
360 次に,9行目の\emph{\_\_code cd2Child2}でinode treeに対しgetを行うため,inode treeのgetへgotoしている.
k228587
parents:
diff changeset
361 この際,getは1行目のcd2Childでgetしたnodeのvalueをもとに行う.valueにはinode numberがセットされている.
k228587
parents:
diff changeset
362 その後,15行目の\emph{\_\_code cd2Child3}でcurrent ディレクトリを保存しているgearsDirectory\verb|->|currentDirectoryを
k228587
parents:
diff changeset
363 getしたnode\verb|->|valueに書き換える.
k228587
parents:
diff changeset
364 \lstinputlisting[caption=cdのCodeGear,label=src:cd]{src/cd.cbc}
k228587
parents:
diff changeset
365 \begin{figure}[ht]
k228587
parents:
diff changeset
366 \begin{center}
k228587
parents:
diff changeset
367 \includegraphics[width=80mm]{figs/cd.pdf}
k228587
parents:
diff changeset
368 \end{center}
k228587
parents:
diff changeset
369 \caption{cdの操作の流れ}
k228587
parents:
diff changeset
370 \label{fig:cd}
k228587
parents:
diff changeset
371 \end{figure}
k228587
parents:
diff changeset
372
k228587
parents:
diff changeset
373 \section{GearsFileSystemにおけるファイルの構成}
k228587
parents:
diff changeset
374
k228587
parents:
diff changeset
375 ファイルシステムはディレクトリの構成だけでなく,ファイルの構成についても考える必要がある.
k228587
parents:
diff changeset
376 本研究と並行する形で一木貴裕による分散ファイルシステムの設計が行われており\cite{cfile},
k228587
parents:
diff changeset
377 ファイルの構成に関しても実装,検討されている.
k228587
parents:
diff changeset
378 GearsOSにおけるファイル構成を説明する.
k228587
parents:
diff changeset
379
k228587
parents:
diff changeset
380 ファイルのInput/Output Streamは競合的なアクセスに対応するため,3つのSynchronizedQueueを用いる.
k228587
parents:
diff changeset
381 それぞれをInputQueue, OutputQueue, mainQueueと呼ぶ.
k228587
parents:
diff changeset
382 データをinputしたい場合InputQueueへputを行い,取得したい場合OutputQueueからgetを行う.
k228587
parents:
diff changeset
383 mainQueueはデータそのものであり,InputQueueからmainQueue,mainQueueからOutputQueueへデータが流れるように接続される.
k228587
parents:
diff changeset
384 これらは,Gearの概念ではDataGearにあたり,DataGearManagerにkeyとI/O Queueが対応する形で保持される.
k228587
parents:
diff changeset
385 ファイルの中身のデータをレコードに分割し,レコードをQueueにputしてstreamに入れる.
k228587
parents:
diff changeset
386 データを取り出す際はQueueからgetし,順番に読むことでファイルを構築する.
k228587
parents:
diff changeset
387
k228587
parents:
diff changeset
388 分散ファイルシステムはファイルのデータ送受信をする際に用いられるAPIを作成する必要がある.
k228587
parents:
diff changeset
389 WordCount例題\cite{file}を通して,GearsFileのAPIの作成を行う.
k228587
parents:
diff changeset
390 WordCount例題は指定したファイルの文字数や行数,ファイルの内の文字列を出力する.
k228587
parents:
diff changeset
391 図\ref{fig:WCStates}はWordCount例題の処理の流れを示している.
k228587
parents:
diff changeset
392 これは大きく分けて,指定したファイルをFile構造体としてopenするFileOpenスレッド,
k228587
parents:
diff changeset
393 File構造体を受け取り文字数と行数をcountUpするWordCountスレッドの二つのCodeGearで記述することができる.
k228587
parents:
diff changeset
394 また,ファイル内の文字列を行ごとにCountUpに送信し,EOFを受け取ったらループを抜けfinishに移行する.
k228587
parents:
diff changeset
395 \begin{figure}[ht]
k228587
parents:
diff changeset
396 \begin{center}
k228587
parents:
diff changeset
397 \includegraphics[width=80mm]{figs/wordCountStates.pdf}
k228587
parents:
diff changeset
398 \end{center}
k228587
parents:
diff changeset
399 \caption{WordCount with CbC}
k228587
parents:
diff changeset
400 \label{fig:WCStates}
k228587
parents:
diff changeset
401 \end{figure}
k228587
parents:
diff changeset
402
k228587
parents:
diff changeset
403 \section{GearsOSのメモリマネージメントシステムの考察}
k228587
parents:
diff changeset
404
k228587
parents:
diff changeset
405 GearsOSのメモリマネージメントは,メモリ上のデータとディスク上のデータの構造が等しくなる形で実装をしたい.
k228587
parents:
diff changeset
406 メモリ上とディスク上でデータの構造を等しくすることで,単純なコピーでメモリとディスク間のデータのやり取りを行うことができる.よって,比較的簡素に実装を行うことができると予想する.
k228587
parents:
diff changeset
407 しかしながら,メモリ上とディスク上でオフセットの差が出る問題がある.
k228587
parents:
diff changeset
408 これは,メタ計算でオフセットの差を吸収する処理を行うことで解決させる.
k228587
parents:
diff changeset
409 また,メモリ上とディスク上のデータのアドレスが異なるため,ユーザーレベルからポインタを用いた場合,問題になる.
k228587
parents:
diff changeset
410 しかしながら,GearsOSではユーザーレベルでポインタを用いることを禁止しているため,問題ないと考える.
k228587
parents:
diff changeset
411
k228587
parents:
diff changeset
412 ガベージコレクションについては,Copying GCを用いる.
k228587
parents:
diff changeset
413 Copying GCは単純に用いるとメモリ容量が倍必要になるという問題がある.
k228587
parents:
diff changeset
414 そこで,リンクしているデータのみをコピーすることによってメモリ使用量を削減したい.
k228587
parents:
diff changeset
415 データがリンクされているかどうかはLinkedListを参照し判断する.
k228587
parents:
diff changeset
416
k228587
parents:
diff changeset
417
k228587
parents:
diff changeset
418 \section{今後の課題}
k228587
parents:
diff changeset
419
k228587
parents:
diff changeset
420 \subsection{GearsShell}
k228587
parents:
diff changeset
421 GearsOSに存在する未実装の機能の一つにshellが挙げられる.
k228587
parents:
diff changeset
422 現状のGearsOSはユーザーの入力を受け付けることが出来ず,プログラミングインターフェースの様に機能している.
k228587
parents:
diff changeset
423 GearsFileSystemなどGearsOSの各機能と接続し,今回作成したcdやlsの様なコマンドを受け付けるGearsShellを作成したい.
k228587
parents:
diff changeset
424
k228587
parents:
diff changeset
425 \subsection{GearsDirectory filename}
k228587
parents:
diff changeset
426 現状はGearsDirectoryのfilenameはIntegerの構造で管理されている.
k228587
parents:
diff changeset
427 しかしながら,filenameは一般的に文字列型であるためIntegerから文字列型に変更する必要がある.
k228587
parents:
diff changeset
428
k228587
parents:
diff changeset
429 \subsection{GearsDirectory path}
k228587
parents:
diff changeset
430 GearsDirectoryにはpathの機能が実装されていない.
k228587
parents:
diff changeset
431 よってfull path指定のlsなどが実装できない状態である.
k228587
parents:
diff changeset
432 FileSystemTreeを拡張し,ノードをたどりpathを生成する様な機能を実装する必要がある.
k228587
parents:
diff changeset
433
k228587
parents:
diff changeset
434 \subsection{ファイルのバックアップ}
k228587
parents:
diff changeset
435 ディレクトリに関しては非破壊的なTree編集を用いることで,バックアップを行うことを考えたが
k228587
parents:
diff changeset
436 ファイルに関してはレコードのDataをファイルの差分履歴として保持し,
k228587
parents:
diff changeset
437 日時情報を付け加えることでVersion Control Systemのような機能を持たせることが可能であると考えられる.
k228587
parents:
diff changeset
438
k228587
parents:
diff changeset
439 \subsection{GearsDirectory on disk}
k228587
parents:
diff changeset
440 現状はGearsDirectoryのinodeはon memoryで実装されている.
k228587
parents:
diff changeset
441 データの保存はdisk上に行うため,inodeをdisk上に構築し必要がある
k228587
parents:
diff changeset
442
k228587
parents:
diff changeset
443 \section{まとめ}
k228587
parents:
diff changeset
444
k228587
parents:
diff changeset
445 本研究では主としてGearsFileSystemの構築に必要なGearsDirectoryの実装について説明した.
k228587
parents:
diff changeset
446 いくつか課題はあるが,RedBlackTreeのシンプルなインターフェースにより比較的容易に実装を行うことができた.
k228587
parents:
diff changeset
447 また,RedBlackTreeを用いてinodeの仕組みを構築し,ls,cd,mkdirを作成するなどして,
k228587
parents:
diff changeset
448 Unix Likeに構築することが出来た.
k228587
parents:
diff changeset
449 メモリマネージメントについては,今後の研究で実装と考察を行い,
k228587
parents:
diff changeset
450 Gears OSのメモリマネージメントシステムを構築していく.
k228587
parents:
diff changeset
451
k228587
parents:
diff changeset
452 信頼性については,定理証明やモデル検査を用いて保証を行うが,
k228587
parents:
diff changeset
453 非破壊的なTree編集によるディレクトリのバックアップやファイルのバックアップをファイルシステムに組み込むことでも
k228587
parents:
diff changeset
454 信頼性の向上が期待できる.形式手法とファイルシステムの機能の両面で信頼性の向上が図れると考える.
k228587
parents:
diff changeset
455
k228587
parents:
diff changeset
456 \nocite{*}
k228587
parents:
diff changeset
457 \bibliographystyle{ipsjunsrt}
k228587
parents:
diff changeset
458 \bibliography{matac-bib}
k228587
parents:
diff changeset
459
k228587
parents:
diff changeset
460 \end{document}