annotate Paper/master_paper.tex @ 16:110cf95f4106

...
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Mon, 08 Jan 2024 16:06:55 +0900
parents e1326b7826e6
children 66e1b4c4df1f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[12pt,a4paper,platex]{jreport}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \usepackage{master_paper}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \usepackage{ascmac}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage[dvipdfmx]{graphicx}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 \usepackage{here}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \usepackage{listings}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \usepackage{comment}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \usepackage{url}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 \usepackage[deluxe, multi]{otf}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 %\input{dummy.tex} %% font
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
16 \jtitle{GearsOSのファイルシステムにおけるGCとレプリケーション}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
17 \etitle{GC and Replication in the File System of GearsOS}
2
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 \year{2024年 3月}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \eyear{March 2024}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \author{又吉 雄斗}
6
8e0c6a7e9b7f use latexmk
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
21 \eauthor{Matayoshi Yuto}
8e0c6a7e9b7f use latexmk
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
22 \chife{指導教員:教授 和田 知久}
8e0c6a7e9b7f use latexmk
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
23 \echife{Supervisor: Prof. Wada Tomohisa}
2
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \marklefthead{% 左上に挿入
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \begin{minipage}[b]{.4\textwidth}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 琉球大学大学院学位論文(修士)
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \end{minipage}}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 % \markleftfoot{% 左下に挿入
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 % \begin{minipage}{.8\textwidth}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 % Gears OS の Paging
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 % \end{minipage}}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \newcommand\figref[1]{図 \ref{fig:#1}}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \newcommand\coderef[1]{ソースコード \ref{code:#1}}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 \lstset{
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 frame=single,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 keepspaces=true,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 stringstyle={\ttfamily},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 commentstyle={\ttfamily},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 identifierstyle={\ttfamily},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 keywordstyle={\ttfamily},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 basicstyle={\ttfamily},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 breaklines=true,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 xleftmargin=0zw,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 xrightmargin=0zw,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 framerule=.2pt,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 columns=[l]{fullflexible},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 numbers=left,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 stepnumber=1,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 numberstyle={\scriptsize},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 numbersep=1em,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 language={},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 tabsize=4,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 lineskip=-0.5zw,
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 escapechar={@},
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 }
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 \def\lstlistingname{ソースコード}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 \def\lstlistlistingname{ソースコード目次}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 %%% 索引のために以下の2行を追加
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 \usepackage{makeidx,multicol}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 \makeindex
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 \begin{document}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 %rome
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 \maketitle
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 \pagenumbering{roman}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 \setcounter{page}{0}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 \newpage
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 \makecommission
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 %\input{chapter/signature.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 \newpage
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 %要旨
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 \input{chapter/abstract.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 %発表履歴
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 \input{chapter/history.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 \addcontentsline{toc}{chapter}{研究関連論文業績}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 \mainmatter
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 %目次
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 \tableofcontents
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 %図目次
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 \listoffigures
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 %リスト目次
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 % \lstlistoflistings
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 %chapters
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
99
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
100 \chapter{GearsOSにおけるファイルシステムとDB}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
101
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
102
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
103
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
104 情報システムの信頼性を確保することは重要な課題である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
105 2023年には銀行システムや航空機の旅客システム,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
106 電子決済システムなどで障害が発生した\cite{zengin,ana,glory}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
107 信頼性の高いシステムを構築することは,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
108 これらのような社会的影響のあるシステムの重大な障害発生防止につながり,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
109 サービス提供者や受容者の機会的,経済的損失を防ぐことにつながる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
110 情報システムはアプリケーション,OS,DB,メモリやSSDなどのハードウェア,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
111 分散ノードやネットワークなどさまざまな要素で構成される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
112 それらのうちどれか1つでも信頼性を損なうと,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
113 システム全体の信頼性の低下につながる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
114 情報システム全体の信頼性を確保するためには,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
115 これらの要素それぞれにおいて,信頼性を保証する必要がある.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
116
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
117 当研究室では,信頼性の保証を目的としたGearsOSを開発している.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
118 GearsOSは,定理証明やモデル検査などの形式手法を用いて信頼性を保証できることを目標としている.\cite{modelcheck}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
119 一般的に信頼性を保証する手法としてテストコードを用いることが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
120 しかしながら,OSなどの大規模なソフトウェアにおいて人力で記述するテストコードのみでは
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
121 カバレッジが不十分であり,検証漏れが発生する可能性がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
122 GearsOSではテストコードに加え,形式手法を用いることでより高い信頼性の保証を目指している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
123 GearsOSは当研究室で開発しているプログラム言語であるContinuation based C(CbC)で記述されており,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
124 ノーマルレベルとメタレベルを容易に切り分けることを可能とする拡張性を有す.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
125 CbCによって本来行いたい処理をノーマルレベルで記述し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
126 信頼性を保証するための処理をメタレベルで記述するといった書き分け,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
127 拡張を比較的容易に可能とする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
128
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
129 OSの重要な機能の1つとしてファイルシステムが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
130 ファイルシステムはOSのプロセスやユーザーデータの管理などに必要不可欠であるため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
131 GearsOSにおいても実装をする必要があると考えられ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
132 当研究室では分散ファイルシステムやi-nodeを用いたファイルシステムの設計がされてきた\cite{cfile, directory}.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
133
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
134 ファイルシステムには可変長の文字列を格納するファイルと,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
135 そのファイルにアクセスするための名前管理の機能がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
136 ファイルの名前の一貫性は名前管理によって保証される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
137 しかし,ファイルに同時に書き込まれた際の一貫性を保証する機能を
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
138 ファイルシステムとしては持っておらず,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
139 ファイルの書き込みを制御するロック機構をアプリケーションが持つことによって,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
140 ファイルの一貫性を保証している.ファイルシステムによく似たものとしてDBが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
141 DBは入力の属性名と型の組み合わせを複数持つレコードと,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
142 特定の属性をキーとしたテーブルがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
143 また,レコードのinsert,delete,updateの直列化可能性を保証する機能を持つ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
144 ファイルシステムとDBは格納するものの形式やそれにアクセスする方法,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
145 直列化可能性を保証する手法が異なるが,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
146 データをある形式で保持する仕組みであるという本質的な部分において違いはない.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
147 よって,ファイルシステムとDBを同一のシステムとして実装することが可能であると考える.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
148
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
149 データのレプリケーションやガベージコレクションの仕組みに必要である,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
150 RedBlackTreeのCopyの仕組みを実装した.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
151
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
152
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
153
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
154
10
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
155 \chapter{軽量継続を基本とする言語CbC}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
156
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
157 Continuation based C(CbC)\cite{cbcllvm,cbc}はC言語の下位言語であり,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
158 関数呼び出しを行わない軽量な継続を基本とするプログラミング言語である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
159 CbCは処理の単位のCodeGear,データの単位のDataGearといったGearの概念をもつ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
160 CodeGearはC言語などにおける関数と違い,gotoによるjmp命令が用いられ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
161 プログラムの継続においてコールスタックを持たない.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
162 これを通常の関数による継続と区別して,軽量継続と呼ぶ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
163 軽量継続によってリフレクションのような処理の挿入や切り分けを容易にしている.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
164
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
165 \section{Gearの概念}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
166
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
167 CbCには処理の単位のCodeGearとデータの単位であるDataGearという概念が存在する.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
168 CodeGearは\emph{\_\_code}という記述で宣言することができる.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
169 CbCはC言語の下位言語であるため,通常の関数も使用することは可能だが,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
170 基本的にCodeGearの単位でプログラミングを行う.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
171 DataGearはCodeGearで入出力される変数データである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
172 図\ref{fig:dgcg}はCodeGearとDataGearの入出力の関係を表している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
173 CodeGearはDataGearを複数入力として受け取ることができ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
174 別のDataGearに複数書き込み出力することができる.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
175 特に,入力のDataGearをInput DataGear,出力のDataGearをOutput DataGearと呼ぶ.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
176 gotoで次のCodeGearに遷移する際,Output DataGearを次のCodeGearのInput DataGearとして渡すことができる.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
177
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
178 \begin{figure}[ht]
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
179 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
180 \includegraphics[width=100mm]{fig/cgdg.pdf}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
181 \end{center}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
182 \caption{CodeGearと入出力の関係図}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
183 \label{fig:dgcg}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
184 \end{figure}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
185
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
186 \section{gotoによる軽量継続}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
187
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
188 CodeGearから次のCodeGearに遷移していく一連の動作を継続と呼ぶ.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
189 通常の関数の場合,関数から次の関数へ遷移する時にfunction callが行われる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
190 function callは前の関数へ戻る場合があり,そのためにcall stackを保存する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
191 他方,CbCの継続はfunction callをせずにgotoによるjmpで行われる.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
192 jmpはfunction callと異なり,call stackによる変数などの環境を保存しない.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
193 よって,CbCのgotoによる継続はfunction callによる継続と比較して軽量であるといえる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
194 そのことから,CbCにおける継続をfunction callによる継続と区別して,軽量継続と呼ぶ.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
195 軽量継続の利点としてリフレクションのような処理をより柔軟に行える点が挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
196 リフレクションはプログラム自身のメタデータを分析し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
197 それによってプログラムを実行時に書き換える一種のメタプログラミング手法である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
198 一般的にクラスやメソッド,関数の単位で書き換えが行われる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
199 手法の例としてJavaにおけるAspectJライブラリを用いたプログラミングが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
200 軽量継続の場合,CodeGear遷移のどの地点においてもメタな処理を挿入することが可能であるため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
201 より柔軟なリフレクションが可能と考える。
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
202
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
203
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
204 \section{CodeGearの記述例}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
205
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
206 CbCのプログラム例をソースコード\ref{src:cbc}に示す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
207 まずmain関数においてadd1 CodeGearへgotoを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
208 その際add1へInput DataGearとしてnを渡す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
209 Cのgotoが\emph{goto label;}という記法で,ラベリングした箇所へjmpを行うのに対し,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
210 CbCのgotoは\emph{goto add1(n);}という記法で,add1 CodeGearへn DataGearを渡してjmpを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
211 add1は処理の最後にadd2 CodeGearへgotoを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
212 その際Output DataGear out\_nをadd2のInput DataGearとして渡す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
213 このようにCbCではCodeGearのOutput DataGearを次のCodeGearのInput DataGearとして渡すことを繰り返すことで処理を進める.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
214
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
215 \lstinputlisting[caption=CbCのプログラム例,label=src:cbc]{src/hello.cbc}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
216
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
217 \chapter{信頼性の保証を目的としたGearsOS}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
218
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
219 GearsOS\cite{gears,gearsos,cr}は当研究室で開発している,信頼性と拡張性の両立を目的としたOSである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
220 GearsOSにはGearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
221 軽量継続を基本とし,stackを持たない代わりに全てをContext経由で実行する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
222 同様にGearの概念を持つContinuation based C(CbC)で記述されており,ノーマルレベルとメタレベルの処理を切り分けることが容易である.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
223 また,GearsOSは現在開発途上であり,OSとして動作するために今後実装しなければならない機能がいくつか残っている.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
224
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
225 \section{3種類のGearsOS}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
226
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
227 GearsOSには現在3つの種類がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
228 1つ目が型式手法による信頼性の向上を目的とした,GearsAgdaと呼ばれるGearsOSである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
229 これは,Agdaによって実装されている.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
230 2つ目がユーザーレベルタスクマネジメントの実装を目的としたGearsOSがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
231 これは,CbCによって実装されており,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
232 RedBlackTreeでのディレクトリシステムの構築するなどの取り組みもされている\cite{directory}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
233 3つ目はスタンドアロンOSの開発を目的とした,CbC\_xv6と呼ばれるGearsOSがある\cite{cbcxv6}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
234 これは,教育用に開発されたx.v6\cite{xv6}をCbCで書き換える形で実装する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
235
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
236 \section{メタ処理を記述するmetaGear}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
237
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
238 図\ref{fig:meta-cgdg}はCodeGearの遷移とMetaCodeGearの関係を表している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
239 OSのプログラムはユーザーが実際に行いたい処理を表現するノーマルレベルと,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
240 カーネルが行う処理を表現するメタレベルが存在する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
241 ノーマルレベルで見るとCodeGearがDataGearを受け取り,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
242 処理後にDataGearを次のCodeGearに渡すという動作をしているように見える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
243 しかしながら,実際にはデータの整合性の確認や資源管理などのメタレベルの処理が存在し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
244 それらの計算はMetaCodeGearで行われる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
245 その際,MetaCodeGearに渡されるDataGearのことは特にMetaDataGearと呼ばれる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
246 また,CodeGearの前に実行されるMetaCodeGearは特にstubCodeGearと呼ばれ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
247 メタレベルを含めるとstubCodeGearとCodeGearを交互に実行する形で遷移していく.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
248 \begin{figure}[ht]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
249 \begin{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
250 \includegraphics[width=160mm]{fig/meta-cg-dg.pdf}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
251 \end{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
252 \caption{CodeGearとMetaCodeGearの関係}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
253 \label{fig:meta-cgdg}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
254 \end{figure}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
255
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
256 \section{CodeGearの遷移}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
257 \section{全てのGearを参照するContext}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
258
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
259 ContextはGearsOS上全てのCodeGear,DataGearの参照を持ち,CodeGearとDataGearの接続に用いられる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
260 OS上の処理の実行単位で,従来のOSにおけるプロセスに相当する機能であるといえる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
261 また,CodeGearをDataGearの一種であると考えると,ContextはGearの概念ではMetaDataGearに当たる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
262 Contextはノーマルレベルから直接参照されず,必ずMetaDataGearとしてMetaCodeGearから参照される.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
263 それは,ノーマルレベルのCodeGearがContextを直接参照してしまうと,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
264 メタレベルを切り分けた意味がなくなってしまうためである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
265
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
266 図\ref{fig:context}はContextを参照する流れを表したものである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
267 まずCodeGearがOutputDataGearへデータをoutputする.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
268 stubCodeGearはInputDataGear(前のCodeGearのOutputDataGear)とOutputDataGearをContextから参照し,次のCodeGearへgotoを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
269 CodeGearでの処理後,OutputDataGearへデータをoutputする.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
270
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
271 Contextはいくつかの種類に分けることができる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
272 OS全体のContextを管理するKernel Contextやユーザープログラムごとに存在するUser Context,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
273 CPUやGPUごとに存在するCPU Contextがある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
274 \begin{figure}[ht]
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
275 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
276 \includegraphics[width=150mm]{fig/context.pdf}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
277 \end{center}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
278 \caption{Contextを参照する流れ}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
279 \label{fig:context}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
280 \end{figure}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
281
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
282 \section{GearsOSの記述例}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
283 \section{GearsOSの現状}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
284
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
285 \chapter{GearsOSのファイルシステム}
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
286 \section{DataGearManagerによる分散ファイルシステム}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
287 \section{i-nodeを用いたファイルシステム}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
288 \section{非破壊RedBlackTreeによる構成}
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
289
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
290 ディスク上とメモリ上でデータの構造は,RedBlackTreeに統一する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
291 一般的に,ディスク上のデータ構造としてB-Treeが用いられることが多い.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
292 なぜならば,HDDを用いる場合はブロックへのアクセス回数を減らしデータアクセスの時間を短くするために,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
293 B-Treeのようなノードを複数持つことができる構造が効果的だからである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
294 その点ではRedBlackTreeはB-Treeに劣る.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
295 しかしながら,SSDはランダムアクセスによってデータにアクセスするため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
296 RedBlackTreeでなくB-Treeを用いる利点は少ないと考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
297 よって,ディスク上とメモリ上のデータ構造をRedBlackTreeに統一することが考えられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
298 そうすることによって,ディスク上とメモリ上のデータのやりとりは単純なコピーで実装できる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
299
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
300 \section{RedBlackTreeのトランザクション}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
301
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
302 トランザクションはDBの重要な機能の一つである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
303 データの競合を防ぎ信頼性を向上させ,DBとしても扱えるよう
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
304 トランザクションの仕組みを考える必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
305 今回,ファイルシステムは全てRedBlackTreeで実装するため,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
306 RedBlackTreeのノードに対するトランザクションを考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
307
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
308 トランザクションをwriteとreadに分けて考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
309 writeする場合,トランザクションはRedBlackTreeのルートの置き換えと対応する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
310 writeするために,まずルートを生やし書き込みが終わった後ルートを置き換える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
311 そのため,書き込みの並列度はルートの数と一致する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
312 しかしながら,ルートの置き換えは競合的なので,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
313 複数プロセスから同時に書き込みを行っても1つしか成功しない.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
314 よって,単一のRedBlackTreeに複数の書き込みポイントを作り,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
315 並行実行可能にする必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
316
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
317 % TODO: writeトランザクションの図を入れたい
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
318
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
319 RedBlackTreeに複数の書き込みポイントを作るために,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
320 キーごとのルートを作成する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
321 ノードはそれぞれがキーとRedBlackTreeを持つ状態になる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
322 writeする際は,そのキーのルートを置き換える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
323 それによって,RedBlackTreeは複数の書き込みポイントを持つことができ,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
324 writeを並行実行することが可能となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
325
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
326 図\ref{fig:Transaction}にトランザクショナルなwrite操作を表す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
327 Aの木はファイルシステム全体を表すRedBlackTreeである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
328 ノードNのデータに対して書き込みすることを考えると,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
329 キーがaであるBの木のルートからロックしCの木を作成して,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
330 Bの木からCの木のルートに入れ替えることで書き込みを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
331 この書き込みを行っている際,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
332 Aの木のノードはロックしないのでAの木のどのノードに対しても並行して書き込み可能となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
333
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
334 \begin{figure}[ht]
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
335 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
336 \includegraphics[width=100mm]{fig/transaction.drawio.pdf}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
337 \end{center}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
338 \caption{トランザクショナルなwrite操作}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
339 \label{fig:Transaction}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
340 \end{figure}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
341
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
342 % TODO: read時常に最新の情報が取れないことを説明する図を入れたい
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
343
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
344 readはデータに変更を加えないため,複数同時に同じノードを読み込むことが可能である.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
345 しかし,常に最新の情報を読み込めるとは限らない.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
346 最新の情報が欲しい場合は書き込みを一旦止めるような処理が必要になる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
347
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
348 \section{ディスク上とメモリ上のデータ構造}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
349
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
350
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
351 ファイルシステムは全てRedBlackTreeで構成する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
352 それにより,プログラムの証明がより簡単になるからである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
353 また,ファイルシステムとDBはデータを保管するという本質的な役割は同じである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
354 よって,それらはまとめてRedBlackTreeで構成する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
355
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
356 ファイルシステムとDBの違いとして,スキーマが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
357 DBは事前にスキーマを定義し,それに沿ってデータを挿入,参照する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
358 対して,ファイルシステムにはスキーマに当たるものがなく,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
359 データはファイルパスによって管理される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
360 スキーマを定義することによってデータは構造化され,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
361 構造化されたデータは非構造化データと比較して,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
362 インデックスを作成することが容易であり,データの検索性が向上する利点がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
363 しかしながら,スキーマはDBの運用中に変更されることがあり,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
364 スキーマを変更した以前へロールバックができない問題がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
365
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
366 ロールバックがスキーマの変更によって出来なくなることは信頼性に問題があると考えると,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
367 スキーマを定義する必要のないスキーマレスなDBが必要になる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
368 ファイルシステムはスキーマレスなDBといえるので,ファイルシステムを構築しつつ
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
369 DBがスキーマによって実現していた機能を付け加えることを試みる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
370
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
371 RedBlackTreeは実装によって,操作が破壊的なものとそうでないものがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
372 今回用いるのは,非破壊的な実装のRedBlackTreeである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
373 図\ref{fig:TreeEdit}は非破壊的編集を行うRedBlackTreeを表している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
374 編集前の木構造の6のノードをAにアップデートすることを考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
375 まず,ルートノードからアップデートしたいノード6までをコピーする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
376 その後,コピーしたもののノード6をAにアップデートする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
377 これにより,アップデート前のノード6を破壊することなくAにアップデートが可能である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
378 参照する時は,黒のルートノードから辿れば古い6が,赤のルートノードから辿れば新しいAが見える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
379 この仕組みは,データのバックアップやDBのロールバックに用いることが可能だと考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
380
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
381 \begin{figure}[ht]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
382 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
383 \includegraphics[width=160mm]{fig/nonDestroyTreeEdit.pdf}
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
384 \end{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
385 \caption{非破壊的なTree編集}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
386 \label{fig:TreeEdit}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
387 \end{figure}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
388
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
389
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
390 \chapter{GearsFileSystemにおけるGCとレプリケーション}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
391 \section{ファイルシステムの信頼性に関する機能}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
392
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
393 ファイルシステムはデータを保持することを基本的な機能としている.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
394 信頼性に関する機能など,その他の機能は追加機能として実装する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
395 ファイルシステムやDBにおける信頼性に関する追加機能として,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
396 システムの電源断時にデータが残るpersistency,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
397 データを書き込めたかどうかを判定するatomic write,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
398 1つのノードが失われた際にデータを保護する多重性,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
399 複数のコピーを調停するコミット機構などが挙げられる.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
400
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
401 現状のGearsOSには分散ファイルシステムの通信機能やUnix Likeな
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
402 インターフェースを持つi-nodeファイルシステムの基本機能は存在するものの,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
403 多重性やメモリ管理などの信頼性を確保するための機能が存在しない.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
404 データの多重度を確保するための一般的な手法として,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
405 データのバックアップやシステム自体のレプリケーションをすることが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
406 メモリ管理の機能としてはガーベージコレクションが挙げられる.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
407 ガベージコレクションは通常プログラム言語のレイヤで行われる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
408 これらの機能を実装することでファイルシステムの信頼性を高めたい.
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
409
16
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
410 \section{メモリの管理手法}
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
411
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
412 GCのアルゴリズムは大きく分けてMark \& Sweep GC,Reference counting GC,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
413 Copying GCの3つの種類が存在する.
16
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
414 Mark \& Sweep GC
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
415 Reference counting GC
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
416 CopyingGCはメモリ上のヒープ領域をFrom領域とTo領域に分割し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
417 ルートから参照できるオブジェクトをFrom領域からTo領域にコピーすることで
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
418 ガベージコレクションを行う.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
419
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
420 また,Rust言語のスマートポインタによるメモリ管理手法も存在する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
421
16
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
422 \section{GearsFileSystemのGC}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
423
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
424 GearsFileSystemのGCはCopyingGCを基本的なアルゴリズムとする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
425
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
426 GearsFileSystemにおけるデータは全てRedBlackTreeに格納する.
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
427 また,ディスク上とメモリ上のデータ構造は同一である.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
428 よって,RedBlackTreeの単なるコピーによってGCを行うことによって,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
429 データの透過性が確保され,単純なプログラムで実装することが可能と考える.
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
430
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
431
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
432 \section{GearsFileSystemのレプリケーション}
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
433
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
434 \chapter{CopyRedBlackTreeの実装}
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
435
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
436 データのバックアップやレプリケーション,GCの機能を実装するためには,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
437 データのコピーをする必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
438 GearsOSのファイルシステムにおいて,データは全てRedBlackTreeに格納される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
439 しかしながら,現状のRedBlackTreeには木をコピーする機能が無い.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
440 よって,RedBlackTreeに木のコピー機能を実装する必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
441
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
442 \section{コピーのアルゴリズム}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
443 \section{Stackの使用に関して}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
444 \section{証明のしやすさについて}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
445
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
446
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
447 DBの重要な機能の一つにロールバックがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
448 RDBのロールバックは,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
449 コミットするまではトランザクションの開始時点に戻ることができる機能を持つ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
450 コミットが完了するとそれ以前の状態に戻すことはできないが,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
451 データのバックアップをとっておくことで復元を行う.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
452 このような,ロールバックとバックアップの仕組みをファイルシステムに実装したい.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
453
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
454 今回は,RedBlackTreeのルートノードがデータのバージョンの役割を果たしていることを利用し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
455 データの復元が行える仕組みを構築することを考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
456 非破壊的なTree編集はアップデートのたびに,ルートノードを増やす.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
457 つまり,ルートノードはアップデートのログと言えその時点のデータのバージョンを表していると考えることができる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
458 よって,ロールバックを行いたい場合は参照を過去のルートノードに切り替える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
459
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
460 ルートノードはデータのアップデート時に増えるため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
461 データが際限なく増加していく問題がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
462 この問題はCopyingGCを行うことによって解決する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
463 まず,RedBlackTreeを丸ごとコピーして最新のルートを残して他のルートは削除する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
464 その後,コピーしたものはバックアップないしログとしてディスクに書き込む.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
465 そうすることで,データの増加によるリソースの枯渇を防ぎ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
466 かつデータのログ付きバックアップを作成することで信頼性の向上が期待できる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
467
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
468 % TODO: バックアップのフローを図にしたい
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
469
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
470
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
471 \chapter{まとめと今後の課題}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
472
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
473 本論文ではGearsOSのファイルシステムとDBの設計について説明した.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
474 今後,実装を行いながら設計と動作の確認,計測を行い,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
475 設計の意図が反映されていることやプログラムの検証ができることを確認する必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
476
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
477 また,今後の課題や議題として次のようなものが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
478
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
479 \section{ファイルシステムにおけるスキーマ}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
480
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
481 従来のRDBのようなスキーマが存在すると,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
482 個別にバックアップなどを取らない限り
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
483 スキーマの変更以前にロールバックすることができない.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
484 しかしながら,実際運用する上でスキーマを変更することは多々ある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
485 これは,データの信頼性を低下させると考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
486 また,DB上のデータ構造とプログラム上で扱うデータ構造に差が生まれる
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
487 インピーダンスミスマッチが発生し,DBのデータをプログラムが扱う際に
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
488 その差を埋めるような変換を必要とする場合が生まれる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
489 一方で,スキーマがあることによってデータに対して高度な操作を行うことができ,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
490 また,インデックスを容易に作成することができるといったメリットがある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
491 よって,スキーマフルなDBとスキーマレスなDBはそれぞれメリットデメリットがあり,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
492 状況によって使い分けるのが良いと考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
493
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
494 今回は,非構造化データ内であれば構造化データを扱うことが可能であることと,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
495 信頼性を保証したいという点から,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
496 スキーマレスなDBとしてのファイルシステムを考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
497 しかしながら,トランザクションの仕組みを作る上でRedBlackTreeに対し,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
498 キーを設定することから完全なスキーマレスとは言えない構成となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
499
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
500 GearsOSのデータは全てDataGearで表される.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
501 よって,GearsOSにおけるファイルシステムはDataGearの集合となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
502 スキーマレスとはキーがない状態のことといえるが,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
503 DataGearはキーが設定されていないため,その集合自体にスキーマは無い.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
504 そのことから,GearsOSにおけるスキーマとはDataGear上のキーの構成であることがわかる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
505 なお,今回のRedBlackTreeによる構成の場合,キーはRedBlackTreeを指す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
506 DataGearはKernelのContextからプロセスのContextを経由して全て繋がっている.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
507 よって,KernelのContext上にキーを用いたDataGearの参照を書き込む.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
508
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
509 \section{RedBlackTreeによる権限の表現}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
510
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
511 ファイルの権限はファイルシステムの重要な機能の一つであるため実装する必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
512 今回のRedBlackTreeによる構成の場合,木のルートの所持者を設定することが
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
513 ファイルに対して権限を設定することにあたる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
514 ルートに対してアクセスする権限がなければ,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
515 読み書きができないといった実装になると考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
516 \section{データクエリ言語}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
517
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
518 ユーザーやアプリケーションがDBのデータにアクセスするための言語設計を
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
519 する必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
520 RedBlackTreeのキーを用いたインデックスに対応し,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
521 従来のSQLと比較してより柔軟なクエリを実行できることを目指したい.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
522
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
523 \section{ログなどの時系列データの保存}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
524
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
525 時系列データは通常のデータと違った保存の方法を考えることができる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
526 時系列に並んでいることを生かしたデータの保存方式や,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
527 時間経過に伴うデータの重要性の変化を考慮に入れたデータ圧縮の方法をとることで,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
528 より効率的な保存が可能だと考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
529
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
530 \section{スタンドアロンなDB}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
531
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
532 MySQLやPostgreSQLなどはOSの機能としてではなく,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
533 それ自体が一つのアプリケーションとして自立的に動作している.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
534 自立的に動作するのは,データのポータビリティを向上させるためである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
535 スタンドアロンなDBの形にするか,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
536 その他の方法でポータビリティを向上させる手法を考えたい.
2
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
537
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
538
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 % %謝辞
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 \input{chapter/thanks.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
542
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
543
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 %参考文献
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 \nocite{*}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 \bibliography{reference}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 \bibliographystyle{junsrt}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
548
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
549
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 %発表履歴
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 %\addcontentsline{toc}{chapter}{発表履歴}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 %\input{chapter/history.tex}]
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
553
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 %付録
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 \addcontentsline{toc}{chapter}{付録}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 \appendix
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 \input{chapter/appendix.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 \end{document}