view midterm/midterm.tex @ 3:690b2e6a1713

mindmap
author akahori
date Sun, 11 Nov 2018 22:17:17 +0900
parents 76397fc5bc2a
children e8b8a3fdf5e8
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{bussproofs}
\usepackage{listings,jlisting}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{./images/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\lstset{
  frame=single,
  keepspaces=true,
  breaklines=true,
  xleftmargin=0zw,
  xrightmargin=0zw,
  framerule=.2pt,
  columns=[l]{fullflexible},
  language={},
  tabsize=4,
  lineskip=-0.5zw,
  escapechar={@},
}




\begin{document}
\title{Christieによるブロックチェーンの実装}
\author{155753A 氏名: 赤堀 貴一 指導教員: 河野 真治}
\date{}
\maketitle

\thispagestyle{fancy}

\section{研究目的}
%% 分散OSを作りたい.

コンピュータにおいてデータの破損や不整合は深刻な異常を引き起こす原因となる. そのため, 破損, 不整合を検知するために, 近年注目されたブロックチェーン技術を用いる.  ブロックチェーンは分散システムとして注目されており, データの破損や不整合をハッシュ値によって比較できる. そして, 誤操作や改ざんがあった場合でも, ブロックチェーンを用いることで簡単にデータの追跡が行える.

当研究室では分散フレームワークとしてChristieを開発しており, これはGearsOSにファイルシステムとして組み込む予定がある. そのため, Christieにブロックチェーンを実装し, GearsOSに組み込むことにより, GearsOSのファイルシステムにおいてデータの破損, 不整合を検知できる. また, GearsOS同士による分散ファイルシステムを構成することができ, 非中央的にデータの検証ができるようになる. もし分散システムを構成しない場合でもデータの整合性保持は行え, 上記の目的は達成できる.

よって, Christieにブロックチェーンを実装し, 分散環境でのデータの整合性保持, 追跡を行う.



%%しかし分散されたデータにおいては, データが保存された単一, またはいくつかのサーバーがダウンしたり, 不正アクセス, 誤ったデータの変更により, これらの障害が起こり得る. それらを解決するのが分散ファイルシステムだが, HDFSやGlusterFSなど, 結局は特定のサーバー上にファイルが置かれるため, サーバーのダウン,


%% 整合性保持のproof of workでは, OSのcpu使用率に応じて, ファイルの同期が早くなるようにする.

\section{ブロックチェーン}
ブロックチェーンとは分散型台帳技術とも呼ばれ, 複数のトランザクションをまとめたブロックをつなげたものを, システムに参加しているすべてのノードが参照できる技術である. 

ブロックは前のブロックと暗号化ハッシュでつながっており, 現在のブロックのハッシュは前のブロックのハッシュに依存して作られる. そのため, もしブロックを改ざんしたいとしたら, そのブロックにつながるすべてのブロックを改ざんしなければならない. しかし, その仕組みだけだと簡単に改ざんができてしまう. そのため, ブロックに付け加える場合にはある作業を行わせ, それによってある条件に収まるHashを作らせる. 例えば, ビットコインだとProof of Workという計算問題を解かせ, Hashを生成する. これは単純には

\begin{lstlisting}
while(1){
	randomSeed(前のHash + nonce)
	// 0 < rand() < 10000
	このブロックのHash = rand() \% 10000 
	if (このブロックのHash < 100){ 
		 break
	}
	nonce ++
}
\end{lstlisting}


と言う問題を解くのと同義である. 実際には $0 < rand() < 10000$はもっと大きな値である. 

もし至るところでブロックが作られ, 競合すると, 競合したブロック同士で, つながっているブロックが多いものを正しいブロックとする. 

通信はp2pで行われ, ブロックが承認された場合, 他のノードにブロードキャストされる.



\section{Christie}

Christieは当研究室で開発している分散フレームワークである. ChristieはJavaで書かれているが, 当研究室で開発しているGearsOSに組み込まれる予定がある. そのため, GearsOSを構成する言語Continuation based Cと似たCodeGear(以下CG)とDataGear(以下DG)という概念がある. CGはメソッドであり, DGは変数データに相当する. また, ChristieにはCodeGearManager(以下CGM)とDataGearManager(以下DGM)という概念もある. CGMはノードに当たり, DGM, CG, DGを管理する. DGMはDGを管理するものであり, putという操作により変数データ, つまりDGを格納できる. 

DGMにはLocalとRemoteと2つの種類があり, Localであれば, そのCGMにDGを格納していき, Remoteであれば接続したRemote先のCGMにDGを格納できる. DGを取り出す際にはアノテーションを付けることで, データの取り出し方も指定できる. Take, Peekという操作があり, Takeは読み込んだDGが消えるが, PeekはDGを消さずにそのまま残す.

CGはCGMによって実行されるが, 実行するにはDGが全て揃う必要がある. もしDGが全て揃わない場合, CGMはずっとlistenする. 



\nocite{*}
\bibliographystyle{junsrt}
\bibliography{reference}
\end{document}