annotate Paper/master_paper.tex @ 24:f0c0e873e3c1

...
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Fri, 12 Jan 2024 18:52:08 +0900
parents fadf02ce5925
children 905910e9fb04
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 \mainmatter
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 \tableofcontents
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
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 \listoffigures
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 %リスト目次
24
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
89 \lstlistoflistings
2
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 %chapters
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
92
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
93 \chapter{GearsOSにおけるファイルシステムとDB}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
94
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
95 情報システムの信頼性を確保することは重要な課題である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
96 2023年には銀行システムや航空機の旅客システム,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
97 電子決済システムなどで障害が発生した\cite{zengin,ana,glory}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
98 信頼性の高いシステムを構築することは,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
99 これらのような社会的影響のあるシステムの重大な障害発生防止につながり,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
100 サービス提供者や受容者の機会的,経済的損失を防ぐことにつながる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
101 情報システムはアプリケーション,OS,DB,メモリやSSDなどのハードウェア,
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 それらのうちどれか1つでも信頼性を損なうと,
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 情報システム全体の信頼性を確保するためには,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
106 これらの要素それぞれにおいて,信頼性を保証する必要がある.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
107
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
108 当研究室では,信頼性の保証を目的としたGearsOSを開発している.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
109 GearsOSは,定理証明やモデル検査などの形式手法を用いて信頼性を保証できることを目標としている.\cite{modelcheck}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
110 一般的に信頼性を保証する手法としてテストコードを用いることが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
111 しかしながら,OSなどの大規模なソフトウェアにおいて人力で記述するテストコードのみでは
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
112 カバレッジが不十分であり,検証漏れが発生する可能性がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
113 GearsOSではテストコードに加え,形式手法を用いることでより高い信頼性の保証を目指している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
114 GearsOSは当研究室で開発しているプログラム言語であるContinuation based C(CbC)で記述されており,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
115 ノーマルレベルとメタレベルを容易に切り分けることを可能とする拡張性を有す.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
116 CbCによって本来行いたい処理をノーマルレベルで記述し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
117 信頼性を保証するための処理をメタレベルで記述するといった書き分け,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
118 拡張を比較的容易に可能とする.
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の重要な機能の1つとしてファイルシステムが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
121 ファイルシステムはOSのプロセスやユーザーデータの管理などに必要不可欠であるため,
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 当研究室では分散ファイルシステムやi-nodeを用いたファイルシステムの設計がされてきた\cite{cfile, directory}.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
124
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
125 ファイルシステムには可変長の文字列を格納するファイルと,
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 ファイルシステムとしては持っておらず,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
130 ファイルの書き込みを制御するロック機構をアプリケーションが持つことによって,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
131 ファイルの一貫性を保証している.ファイルシステムによく似たものとしてDBが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
132 DBは入力の属性名と型の組み合わせを複数持つレコードと,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
133 特定の属性をキーとしたテーブルがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
134 また,レコードのinsert,delete,updateの直列化可能性を保証する機能を持つ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
135 ファイルシステムとDBは格納するものの形式やそれにアクセスする方法,
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 よって,ファイルシステムとDBを同一のシステムとして実装することが可能であると考える.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
139
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
140 データのレプリケーションやガベージコレクションの仕組みに必要である,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
141 RedBlackTreeのCopyの仕組みを実装した.
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
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
144
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
145
10
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
146 \chapter{軽量継続を基本とする言語CbC}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
147
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
148 Continuation based C(CbC)\cite{cbcllvm,cbc}はC言語の下位言語であり,
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 CbCは処理の単位のCodeGear,データの単位のDataGearといったGearの概念をもつ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
151 CodeGearはC言語などにおける関数と違い,gotoによるjmp命令が用いられ,
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 これを通常の関数による継続と区別して,軽量継続と呼ぶ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
154 軽量継続によってリフレクションのような処理の挿入や切り分けを容易にしている.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
155
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
156 \section{Gearの概念}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
157
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
158 CbCには処理の単位のCodeGearとデータの単位であるDataGearという概念が存在する.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
159 CodeGearは\emph{\_\_code}という記述で宣言することができる.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
160 CbCはC言語の下位言語であるため,通常の関数も使用することは可能だが,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
161 基本的にCodeGearの単位でプログラミングを行う.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
162 DataGearはCodeGearで入出力される変数データである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
163 図\ref{fig:dgcg}はCodeGearとDataGearの入出力の関係を表している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
164 CodeGearはDataGearを複数入力として受け取ることができ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
165 別のDataGearに複数書き込み出力することができる.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
166 特に,入力のDataGearをInput DataGear,出力のDataGearをOutput DataGearと呼ぶ.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
167 gotoで次のCodeGearに遷移する際,Output DataGearを次のCodeGearのInput DataGearとして渡すことができる.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
168
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
169 \begin{figure}[ht]
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
170 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
171 \includegraphics[width=100mm]{fig/cgdg.pdf}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
172 \end{center}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
173 \caption{CodeGearと入出力の関係図}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
174 \label{fig:dgcg}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
175 \end{figure}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
176
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
177 \section{gotoによる軽量継続}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
178
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
179 CodeGearから次のCodeGearに遷移していく一連の動作を継続と呼ぶ.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
180 通常の関数の場合,関数から次の関数へ遷移する時にfunction callが行われる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
181 function callは前の関数へ戻る場合があり,そのためにcall stackを保存する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
182 他方,CbCの継続はfunction callをせずにgotoによるjmpで行われる.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
183 jmpはfunction callと異なり,call stackによる変数などの環境を保存しない.
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
184 よって,CbCのgotoによる継続はfunction callによる継続と比較して軽量であるといえる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
185 そのことから,CbCにおける継続をfunction callによる継続と区別して,軽量継続と呼ぶ.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
186 軽量継続の利点としてリフレクションのような処理をより柔軟に行える点が挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
187 リフレクションはプログラム自身のメタデータを分析し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
188 それによってプログラムを実行時に書き換える一種のメタプログラミング手法である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
189 一般的にクラスやメソッド,関数の単位で書き換えが行われる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
190 手法の例としてJavaにおけるAspectJライブラリを用いたプログラミングが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
191 軽量継続の場合,CodeGear遷移のどの地点においてもメタな処理を挿入することが可能であるため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
192 より柔軟なリフレクションが可能と考える。
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
193
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
194
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
195 \section{CodeGearの記述例}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
196
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
197 CbCのプログラム例をソースコード\ref{src:cbc}に示す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
198 まずmain関数においてadd1 CodeGearへgotoを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
199 その際add1へInput DataGearとしてnを渡す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
200 Cのgotoが\emph{goto label;}という記法で,ラベリングした箇所へjmpを行うのに対し,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
201 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
202 add1は処理の最後にadd2 CodeGearへgotoを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
203 その際Output DataGear out\_nをadd2のInput DataGearとして渡す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
204 このようにCbCではCodeGearのOutput DataGearを次のCodeGearのInput DataGearとして渡すことを繰り返すことで処理を進める.
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 \lstinputlisting[caption=CbCのプログラム例,label=src:cbc]{src/hello.cbc}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
207
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
208 \chapter{信頼性の保証を目的としたGearsOS}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
209
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
210 GearsOS\cite{gears,gearsos,cr}は当研究室で開発している,信頼性と拡張性の両立を目的としたOSである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
211 GearsOSにはGearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
212 軽量継続を基本とし,stackを持たない代わりに全てをContext経由で実行する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
213 同様にGearの概念を持つContinuation based C(CbC)で記述されており,ノーマルレベルとメタレベルの処理を切り分けることが容易である.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
214 また,GearsOSは現在開発途上であり,OSとして動作するために今後実装しなければならない機能がいくつか残っている.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
215
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
216 \section{3種類のGearsOS}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
217
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
218 GearsOSには現在3つの種類がある.
18
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
219 1つ目が形式手法による信頼性の向上を目的とした,GearsAgdaと呼ばれるGearsOSである\cite{gearsagda}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
220 これは,Agdaによって実装されており,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
221 森 逸汰によるGearsAgdaによるRed Black Treeの検証などの取り組みがされている\cite{garbtree}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
222 2つ目はスタンドアロンOSの開発を目的とした,CbC\_xv6と呼ばれるGearsOSがある\cite{cbcxv6}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
223 これは,教育用に開発されたx.v6\cite{xv6}をCbCで書き換える形で実装している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
224 CbC\_xv6では仲吉 菜々子によるGears OSのCodeGear Managementの取り組みがされている\cite{gearscodemngment}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
225 3つ目はユーザーレベルタスクマネジメントの実装を目的としたGearsOSがある.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
226 これは,CbCによって実装されており,
18
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
227 分散ファイルシステムの設計やRedBlackTreeでのディレクトリシステムの構築などの取り組みがされている\cite{cfile, directory}.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
228
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
229 本研究では,CbCによって実装されたユーザーレベルタスクマネジメント実装のGearsOSを対象に
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
230 ファイルシステムのレプリケーションやGC機能の実装を考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
231 以下,GearsOSはユーザーレベルタスクマネジメント実装のGearsOSを指す.
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
232
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
233 \section{メタ処理を記述するmetaGear}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
234
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
235 図\ref{fig:meta-cgdg}はCodeGearの遷移とMetaCodeGearの関係を表している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
236 OSのプログラムはユーザーが実際に行いたい処理を表現するノーマルレベルと,
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 ノーマルレベルで見るとCodeGearがDataGearを受け取り,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
239 処理後にDataGearを次のCodeGearに渡すという動作をしているように見える.
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 それらの計算はMetaCodeGearで行われる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
242 その際,MetaCodeGearに渡されるDataGearのことは特にMetaDataGearと呼ばれる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
243 また,CodeGearの前に実行されるMetaCodeGearは特にstubCodeGearと呼ばれ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
244 メタレベルを含めるとstubCodeGearとCodeGearを交互に実行する形で遷移していく.
18
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
245
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
246 \begin{figure}[ht]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
247 \begin{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
248 \includegraphics[width=160mm]{fig/meta-cg-dg.pdf}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
249 \end{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
250 \caption{CodeGearとMetaCodeGearの関係}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
251 \label{fig:meta-cgdg}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
252 \end{figure}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
253
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
254 \section{全てのGearを参照するContext}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
255
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
256 ContextはGearsOS上全てのCodeGear,DataGearの参照を持ち,CodeGearとDataGearの接続に用いられる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
257 OS上の処理の実行単位で,従来のOSにおけるプロセスに相当する機能であるといえる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
258 また,CodeGearをDataGearの一種であると考えると,ContextはGearの概念ではMetaDataGearに当たる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
259 Contextはノーマルレベルから直接参照されず,必ずMetaDataGearとしてMetaCodeGearから参照される.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
260 それは,ノーマルレベルのCodeGearがContextを直接参照してしまうと,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
261 メタレベルを切り分けた意味がなくなってしまうためである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
262
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
263 図\ref{fig:context}はContextを参照する流れを表したものである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
264 まずCodeGearがOutputDataGearへデータをoutputする.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
265 stubCodeGearはInputDataGear(前のCodeGearのOutputDataGear)とOutputDataGearをContextから参照し,次のCodeGearへgotoを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
266 CodeGearでの処理後,OutputDataGearへデータをoutputする.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
267
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
268 Contextはいくつかの種類に分けることができる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
269 OS全体のContextを管理するKernel Contextやユーザープログラムごとに存在するUser Context,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
270 CPUやGPUごとに存在するCPU Contextがある.
18
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
271
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
272 \begin{figure}[ht]
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
273 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
274 \includegraphics[width=150mm]{fig/context.pdf}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
275 \end{center}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
276 \caption{Contextを参照する流れ}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
277 \label{fig:context}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
278 \end{figure}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
279
23
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
280 \section{モジュール化の仕組みinterface}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
281
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
282 Gears OSにはモジュール化の仕組みであるinterfaceという概念が存在する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
283 モジュール化とはJavaのクラスのように複数のメソッドや属性を1つの機能として
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
284 まとめて記述することである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
285 GearsOSではinterfaceによって,DataGearやCodeGearを複数まとめてモジュール化する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
286 interfaceは仕様と実装を分けて記述する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
287 例としてqueue interfaceの仕様記述部分をソースコード\ref{src:Queue.h}に示す.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
288
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
289 \lstinputlisting[label=src:Queue.h, caption=Queueのインターフェース]{src/Queue.h}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
290
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
291 interfaceの仕様はC言語の構造体定義の形で記述する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
292 2,3行目はDataGearを記述しており,DataGearは\texttt{union Data*}型で表現する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
293 ここにはinterfaceにおいて,CodeGearが使用するDataGearを列挙する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
294 5行目から10行目まではCodeGearの型を記述しており,\texttt{\_\_code}型で表現する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
295 ここに列挙したCodeGearはinterfaceのAPIとして機能する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
296 interfaceのAPIの呼び出し例をソースコード\ref{exinterface}に示す.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
297
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
298 \begin{lstlisting}[label=exinterface,frame=lrbt,caption={Interfaceの呼び出し}]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
299 __code odgCommitCPUWorker3(struct CPUWorker* worker, struct Context* task) {
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
300 int i = worker->loopCounter;
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
301 struct Queue* queue = GET_WAIT_LIST(task->data[task->odg+i]);
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
302 goto queue->take(odgCommitCPUWorker4);
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
303 }
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
304 \end{lstlisting}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
305
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
306 4行目でgotoによってqueue interfaceのtake CodeGearに継続するよう記述している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
307 takeのinputDataGearにはodgCommitCPUWorker4 CodeGearを指定している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
308 ソースコード\ref{src:Queue.h}の仕様記述ではtakeにはqueue,data,nextがinputDataGearの型として指定されている.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
309 しかし,実際に呼び出す際にはnextに当たるodgCommitCPUWorker4のみを渡している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
310 仕様記述の際に全てのCodeGearの第1引数(inputDataGear)に渡している\texttt{Impl* queue}は,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
311 仕様から実装のCodeGearにgotoするために必要な記述である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
312 軽量継続において,CodeGearを跨いで状態を保持することはできない.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
313 よって仕様から実装に遷移するためには,実装のCodeGearをinput DataGearとして渡す必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
314 inputDataGearのnextはCodeGearの処理が終わった際に次にgotoするCodeGearを指定する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
315 よって,take CodeGearの処理が全て終了すると,次にodgCommitCPUWorker4へgotoする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
316 nextは\texttt{next(...)}と引数に\texttt{...}が渡される.
24
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
317 これは仕様を記述する時点では不定である次に遷移するCodeGearのinputDataGearを表現している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
318 GearsOSでgotoする際は実際にはContextから必要な値を取り出す.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
319 よって,\texttt{...}は必要な値をContextから取り出すことを意味している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
320
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
321 次にinterfaceの実装似ついて説明する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
322 Queue interfaceの実装の一つであるSingleLinkedQueueをソースコード\ref{src:SingleLinkedQueue.cbc}に示す.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
323
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
324 \lstinputlisting[label=src:SingleLinkedQueue.cbc, caption=Queueのインターフェース]{src/SingleLinkedQueue.cbc}
23
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
325
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
326
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
327 \section{GearsOSのRedBlackTree}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
328
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
329 \chapter{GearsOSのファイルシステム}
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
330 \section{DataGearManagerによる分散ファイルシステム}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
331 \section{i-nodeを用いたファイルシステム}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
332 \section{非破壊RedBlackTreeによる構成}
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
333
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
334 ディスク上とメモリ上でデータの構造は,RedBlackTreeに統一する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
335 一般的に,ディスク上のデータ構造としてB-Treeが用いられることが多い.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
336 なぜならば,HDDを用いる場合はブロックへのアクセス回数を減らしデータアクセスの時間を短くするために,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
337 B-Treeのようなノードを複数持つことができる構造が効果的だからである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
338 その点ではRedBlackTreeはB-Treeに劣る.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
339 しかしながら,SSDはランダムアクセスによってデータにアクセスするため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
340 RedBlackTreeでなくB-Treeを用いる利点は少ないと考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
341 よって,ディスク上とメモリ上のデータ構造をRedBlackTreeに統一することが考えられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
342 そうすることによって,ディスク上とメモリ上のデータのやりとりは単純なコピーで実装できる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
343
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
344 \section{RedBlackTreeのトランザクション}
9
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 トランザクションはDBの重要な機能の一つである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
347 データの競合を防ぎ信頼性を向上させ,DBとしても扱えるよう
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
348 トランザクションの仕組みを考える必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
349 今回,ファイルシステムは全てRedBlackTreeで実装するため,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
350 RedBlackTreeのノードに対するトランザクションを考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
351
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
352 トランザクションをwriteとreadに分けて考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
353 writeする場合,トランザクションはRedBlackTreeのルートの置き換えと対応する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
354 writeするために,まずルートを生やし書き込みが終わった後ルートを置き換える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
355 そのため,書き込みの並列度はルートの数と一致する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
356 しかしながら,ルートの置き換えは競合的なので,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
357 複数プロセスから同時に書き込みを行っても1つしか成功しない.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
358 よって,単一のRedBlackTreeに複数の書き込みポイントを作り,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
359 並行実行可能にする必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
360
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
361 % TODO: writeトランザクションの図を入れたい
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
362
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
363 RedBlackTreeに複数の書き込みポイントを作るために,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
364 キーごとのルートを作成する.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
365 ノードはそれぞれがキーとRedBlackTreeを持つ状態になる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
366 writeする際は,そのキーのルートを置き換える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
367 それによって,RedBlackTreeは複数の書き込みポイントを持つことができ,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
368 writeを並行実行することが可能となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
369
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
370 図\ref{fig:Transaction}にトランザクショナルなwrite操作を表す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
371 Aの木はファイルシステム全体を表すRedBlackTreeである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
372 ノードNのデータに対して書き込みすることを考えると,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
373 キーがaであるBの木のルートからロックしCの木を作成して,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
374 Bの木からCの木のルートに入れ替えることで書き込みを行う.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
375 この書き込みを行っている際,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
376 Aの木のノードはロックしないのでAの木のどのノードに対しても並行して書き込み可能となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
377
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
378 \begin{figure}[ht]
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
379 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
380 \includegraphics[width=100mm]{fig/transaction.drawio.pdf}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
381 \end{center}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
382 \caption{トランザクショナルなwrite操作}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
383 \label{fig:Transaction}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
384 \end{figure}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
385
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
386 % TODO: read時常に最新の情報が取れないことを説明する図を入れたい
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
387
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
388 readはデータに変更を加えないため,複数同時に同じノードを読み込むことが可能である.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
389 しかし,常に最新の情報を読み込めるとは限らない.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
390 最新の情報が欲しい場合は書き込みを一旦止めるような処理が必要になる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
391
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
392 \section{ディスク上とメモリ上のデータ構造}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
393
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
394
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
395 ファイルシステムは全てRedBlackTreeで構成する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
396 それにより,プログラムの証明がより簡単になるからである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
397 また,ファイルシステムとDBはデータを保管するという本質的な役割は同じである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
398 よって,それらはまとめてRedBlackTreeで構成する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
399
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
400 ファイルシステムとDBの違いとして,スキーマが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
401 DBは事前にスキーマを定義し,それに沿ってデータを挿入,参照する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
402 対して,ファイルシステムにはスキーマに当たるものがなく,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
403 データはファイルパスによって管理される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
404 スキーマを定義することによってデータは構造化され,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
405 構造化されたデータは非構造化データと比較して,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
406 インデックスを作成することが容易であり,データの検索性が向上する利点がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
407 しかしながら,スキーマはDBの運用中に変更されることがあり,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
408 スキーマを変更した以前へロールバックができない問題がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
409
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
410 ロールバックがスキーマの変更によって出来なくなることは信頼性に問題があると考えると,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
411 スキーマを定義する必要のないスキーマレスなDBが必要になる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
412 ファイルシステムはスキーマレスなDBといえるので,ファイルシステムを構築しつつ
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
413 DBがスキーマによって実現していた機能を付け加えることを試みる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
414
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
415 RedBlackTreeは実装によって,操作が破壊的なものとそうでないものがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
416 今回用いるのは,非破壊的な実装のRedBlackTreeである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
417 図\ref{fig:TreeEdit}は非破壊的編集を行うRedBlackTreeを表している.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
418 編集前の木構造の6のノードをAにアップデートすることを考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
419 まず,ルートノードからアップデートしたいノード6までをコピーする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
420 その後,コピーしたもののノード6をAにアップデートする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
421 これにより,アップデート前のノード6を破壊することなくAにアップデートが可能である.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
422 参照する時は,黒のルートノードから辿れば古い6が,赤のルートノードから辿れば新しいAが見える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
423 この仕組みは,データのバックアップやDBのロールバックに用いることが可能だと考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
424
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
425 \begin{figure}[ht]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
426 \begin{center}
12
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
427 \includegraphics[width=160mm]{fig/nonDestroyTreeEdit.pdf}
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
428 \end{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
429 \caption{非破壊的なTree編集}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
430 \label{fig:TreeEdit}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
431 \end{figure}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
432
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
433
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
434 \chapter{GearsFileSystemにおけるGCとレプリケーション}
21
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
435
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
436 \section{ファイルシステムの信頼性に関する機能}
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 ファイルシステムはデータを保持することを基本的な機能としている.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
439 信頼性に関する機能など,その他の機能は追加機能として実装する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
440 ファイルシステムやDBにおける信頼性に関する追加機能として,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
441 システムの電源断時にデータが残るpersistency,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
442 データを書き込めたかどうかを判定するatomic write,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
443 1つのノードが失われた際にデータを保護する多重性,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
444 複数のコピーを調停するコミット機構などが挙げられる.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
445
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
446 現状のGearsOSには分散ファイルシステムの通信機能やUnix Likeな
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
447 インターフェースを持つi-nodeファイルシステムの基本機能は存在するものの,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
448 多重性やメモリ管理などの信頼性を確保するための機能が存在しない.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
449 データの多重度を確保するための一般的な手法として,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
450 データのバックアップやシステム自体のレプリケーションをすることが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
451 メモリ管理の機能としてはガーベージコレクションが挙げられる.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
452 ガベージコレクションは通常プログラム言語のレイヤで行われる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
453 これらの機能を実装することでファイルシステムの信頼性を高めたい.
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
454
16
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
455 \section{メモリの管理手法}
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
456
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
457 GCのアルゴリズムは大きく分けてMark \& Sweep GC,Reference counting GC,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
458 Copying GCの3つの種類が存在する.
20
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
459 Mark \& Sweep GCはマークフェーズとスイープフェーズからなる。
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
460 マークフェーズはヒープ上でルートから参照することができるオブジェクト全てにマークをし,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
461 その後、スイープフェーズでマークされていないオブジェクトを
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
462 使用されていないオブジェクトのリストであるフリーリストに接続することでGCを行う.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
463 Reference counting GCはオブジェクトの被参照数を表すReference counterを用いるGCである.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
464 新たに参照される度にReference counterをインクリメントし,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
465 参照が外れる度にデクリメントする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
466 そのようにして,カウンターが0になった時点でフリーリストに接続することでGCを行う.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
467 CopyingGCはメモリ上のヒープ領域をFrom領域とTo領域に分割し,
20
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
468 ルートから参照できるオブジェクトをFrom領域からTo領域にコピーする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
469 From領域を参照していたポインタはTo領域のオブジェクトを参照するように置き換える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
470 その後,From領域とTo領域を入れ替えることでGCを行う.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
471
20
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
472 一般的にこれらのGC手法は複数を組み合わせて用いられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
473 世代別GCではオブジェクトの生存期間によって適用するGCアルゴリズムを使い分ける.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
474 アロケートされてすぐのオブジェクトを新世代オブジェクト,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
475 任意の回数のGCを生き残ったオブジェクトを旧世代オブジェクトとし,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
476 それぞれの特性に合ったGCアルゴリズムを適用する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
477 すぐに回収されることが多い新世代オブジェクトはCopying GCで網羅的にGCをし,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
478 長く生き残る旧世代オブジェクトはMark \& Sweep GCで適宜回収するなどが例として挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
479 このように複数のGCアルゴリズムを組み合わせることで,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
480 それぞれのアルゴリズムの利点を享受できる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
481
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
482 また,メモリ管理手法としてRust言語の所有権がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
483 所有権ではメモリを所有する変数がスコープを抜ける時に,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
484 同時にメモリも解放する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
485 そのためRustではGCの仕組みを必要とせず,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
486 より高速にメモリの管理を行うことができる.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
487
16
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
488 \section{GearsFileSystemのGC}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
489
20
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
490 GearsFileSystemのGCはCopying GCを基本的なアルゴリズムとする.
21
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
491 他のGC手法と比較して参照できるオブジェクトをコピーするだけであるため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
492 実装が簡単で,より高いスループットが期待できる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
493 Mark \& Sweep GCやReference counting GCの場合は,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
494 GCを複数フェーズで実装したり,カウンターの扱いについて考える必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
495 また,同様の構造をコピーするのみで実装することによって,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
496 データの透過性の確保がしやすい.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
497 ファイルやディレクトリを表現するRedBlackTreeは全てのデータの参照を持つ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
498 そのため,オブジェクトルートからオブジェクトを辿ってコピーを行うCopying GCとの相性が良い.
15
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
499
21
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
500 一般的なCopying GCではFrom領域上のオブジェクトをTo領域にコピーする形で実装される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
501 一方,GearsFileSystemではファイルやディレクトリの基本構造であるRedBlackTreeをコピーする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
502 ファイルやディレクトリの操作を行うFromのRedBlackTreeから,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
503 ルートから辿れるノードのみをToのRedBlackTreeとしてコピーする.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
504 それにより,辿れなかったノード,つまり参照されていないノードはコピーされず,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
505 不要なオブジェクトが回収された状態となる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
506
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
507 \begin{figure}[ht]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
508 \begin{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
509 \includegraphics[width=160mm]{fig/rbtree_gc.png}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
510 \end{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
511 \caption{RedBlackTReeのCopyによるGC}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
512 \label{fig:TreeCopyGC}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
513 \end{figure}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
514
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
515 DBの重要な機能の一つにロールバックがある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
516 RDBのロールバックは,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
517 コミットするまではトランザクションの開始時点に戻ることができる機能を持つ.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
518 コミットが完了するとそれ以前の状態に戻すことはできないが,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
519 データのバックアップをとっておくことで復元を行う.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
520
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
521 今回は,RedBlackTreeのルートノードがデータのバージョンの役割を果たしていることを利用し,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
522 データの復元が行える仕組みを構築することを考える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
523 非破壊的なTree編集はアップデートのたびに,ルートノードを増やす.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
524 つまり,ルートノードはアップデートのログと言えその時点のデータのバージョンを表していると考えることができる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
525 よって,ロールバックを行いたい場合は参照を過去のルートノードに切り替える.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
526
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
527 ルートノードはデータのアップデート時に増えるため,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
528 データが際限なく増加していく問題がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
529 この問題はCopyingGCを行うことによって解決する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
530 まず,RedBlackTreeを丸ごとコピーして最新のルートを残して他のルートは削除する.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
531 その後,コピーしたものはバックアップないしログとしてディスクに書き込む.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
532 そうすることで,データの増加によるリソースの枯渇を防ぎ,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
533 かつデータのログ付きバックアップを作成することで信頼性の向上が期待できる.
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
534
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
535
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
536 \section{GearsFileSystemのレプリケーション}
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
537
22
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
538 \begin{figure}[ht]
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
539 \begin{center}
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
540 \includegraphics[width=160mm]{fig/rbtree_replica.png}
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
541 \end{center}
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
542 \caption{Copyのアルゴリズム}
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
543 \label{fig:CopyAlgo}
a3cc406f4706 rbtree replica fig
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
544 \end{figure}
21
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
545
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
546 \chapter{CopyRedBlackTreeの実装}
14
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
547
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
548 データのバックアップやレプリケーション,GCの機能を実装するためには,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
549 データのコピーをする必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
550 GearsOSのファイルシステムにおいて,データは全てRedBlackTreeに格納される.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
551 しかしながら,現状のRedBlackTreeには木をコピーする機能が無い.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
552 よって,RedBlackTreeに木のコピー機能を実装する必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
553
19
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
554 \lstinputlisting[label=src:CopyRedBlackTree.cbc, caption=CopyRedBlackTreeの実装]{src/CopyRedBlackTree.cbc}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
555
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
556 \section{コピーのアルゴリズム}
19
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
557
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
558 \lstinputlisting[label=src:CopyRedBlackTree.cbc, caption=CopyRedBlackTreeのアルゴリズム]{src/copyAlgorithm.cbc}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
559
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
560 \begin{figure}[ht]
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
561 \begin{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
562 \includegraphics[width=160mm]{fig/copy_algo.png}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
563 \end{center}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
564 \caption{Copyのアルゴリズム}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
565 \label{fig:CopyAlgo}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
566 \end{figure}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
567
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
568 \section{Stackの使用に関して}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
569 \section{証明のしやすさについて}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
570
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
571
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
572
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
573 % TODO: バックアップのフローを図にしたい
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
574
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
575
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
576 \chapter{まとめと今後の課題}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
577
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
578 本論文ではGearsOSのファイルシステムとDBの設計について説明した.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
579 今後,実装を行いながら設計と動作の確認,計測を行い,
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
580 設計の意図が反映されていることやプログラムの検証ができることを確認する必要がある.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
581
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
582 また,今後の課題や議題として次のようなものが挙げられる.
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
583
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
584 \section{ファイルシステムにおけるスキーマ}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
585
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
586 従来のRDBのようなスキーマが存在すると,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
587 個別にバックアップなどを取らない限り
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
588 スキーマの変更以前にロールバックすることができない.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
589 しかしながら,実際運用する上でスキーマを変更することは多々ある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
590 これは,データの信頼性を低下させると考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
591 また,DB上のデータ構造とプログラム上で扱うデータ構造に差が生まれる
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
592 インピーダンスミスマッチが発生し,DBのデータをプログラムが扱う際に
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
593 その差を埋めるような変換を必要とする場合が生まれる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
594 一方で,スキーマがあることによってデータに対して高度な操作を行うことができ,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
595 また,インデックスを容易に作成することができるといったメリットがある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
596 よって,スキーマフルなDBとスキーマレスなDBはそれぞれメリットデメリットがあり,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
597 状況によって使い分けるのが良いと考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
598
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
599 今回は,非構造化データ内であれば構造化データを扱うことが可能であることと,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
600 信頼性を保証したいという点から,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
601 スキーマレスなDBとしてのファイルシステムを考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
602 しかしながら,トランザクションの仕組みを作る上でRedBlackTreeに対し,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
603 キーを設定することから完全なスキーマレスとは言えない構成となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
604
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
605 GearsOSのデータは全てDataGearで表される.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
606 よって,GearsOSにおけるファイルシステムはDataGearの集合となる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
607 スキーマレスとはキーがない状態のことといえるが,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
608 DataGearはキーが設定されていないため,その集合自体にスキーマは無い.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
609 そのことから,GearsOSにおけるスキーマとはDataGear上のキーの構成であることがわかる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
610 なお,今回のRedBlackTreeによる構成の場合,キーはRedBlackTreeを指す.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
611 DataGearはKernelのContextからプロセスのContextを経由して全て繋がっている.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
612 よって,KernelのContext上にキーを用いたDataGearの参照を書き込む.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
613
11
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
614 \section{RedBlackTreeによる権限の表現}
9
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
615
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
616 ファイルの権限はファイルシステムの重要な機能の一つであるため実装する必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
617 今回のRedBlackTreeによる構成の場合,木のルートの所持者を設定することが
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
618 ファイルに対して権限を設定することにあたる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
619 ルートに対してアクセスする権限がなければ,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
620 読み書きができないといった実装になると考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
621 \section{データクエリ言語}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
622
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
623 ユーザーやアプリケーションがDBのデータにアクセスするための言語設計を
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
624 する必要がある.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
625 RedBlackTreeのキーを用いたインデックスに対応し,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
626 従来のSQLと比較してより柔軟なクエリを実行できることを目指したい.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
627
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
628 \section{ログなどの時系列データの保存}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
629
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
630 時系列データは通常のデータと違った保存の方法を考えることができる.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
631 時系列に並んでいることを生かしたデータの保存方式や,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
632 時間経過に伴うデータの重要性の変化を考慮に入れたデータ圧縮の方法をとることで,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
633 より効率的な保存が可能だと考える.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
634
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
635 \section{スタンドアロンなDB}
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
636
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
637 MySQLやPostgreSQLなどはOSの機能としてではなく,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
638 それ自体が一つのアプリケーションとして自立的に動作している.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
639 自立的に動作するのは,データのポータビリティを向上させるためである.
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
640 スタンドアロンなDBの形にするか,
83b783747d1a overwrite
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
641 その他の方法でポータビリティを向上させる手法を考えたい.
2
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
642
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
643
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
644
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 % %謝辞
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
646 \input{chapter/thanks.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
647
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
648
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 %参考文献
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 \nocite{*}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 \bibliography{reference}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 \bibliographystyle{junsrt}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
653
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
654
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
655 %発表履歴
20
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
656 \input{chapter/history.tex}
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
657 \addcontentsline{toc}{chapter}{研究関連論文業績}
2
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
658
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 %付録
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
660 \addcontentsline{toc}{chapter}{付録}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 \appendix
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
662 \input{chapter/appendix.tex}
c8151a82f313 copy tex files from ikki master
matac42 <matac@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 \end{document}