diff paper/conclusion.tex @ 16:8e0b26d962cc

modify conclusion
author sugi
date Sun, 18 Jan 2015 00:23:22 +0900
parents 930eae4e8aeb
children 6b470aab9a41
line wrap: on
line diff
--- a/paper/conclusion.tex	Fri Jan 16 14:44:05 2015 +0900
+++ b/paper/conclusion.tex	Sun Jan 18 00:23:22 2015 +0900
@@ -1,12 +1,23 @@
 \chapter{結論} \label{chapter:conclusion}
 
 \section{まとめ}
+今回の研究では、さまざまなアプリケーションの作成を行い、Aliceの性能的問題や不足機能を洗い出した。
+性能的な問題に対しては、並列と分散の両方の観点から改善を行った。その結果、実行速度を最大24\%改善した。
+不足機能に関しては、洗いだした機能を実装することで、当研究室で開発しているTreeVNCをAlice上で実装できるまでになった。
+
+しかし、性能も機能も十分であるとは言えない。性能に関しては、先行研究であるFederated Lindaに勝てていない。
+機能に関しては、versionの違うプロトコルに対応するなどまだ必要な機能も多い。
 
 \section{今後の課題}
+\subsection{データの永続性の確保}
+現在のAliceは、On memoryであるためプロセスの終了とともにData Segmentは全て失われてしまう。
 
-\subsection{データの永続性の確保}
+この問題を解決するためには、Data Segmentを他のKey Value Store等のシステムに保存し、永続性を確保する昼用がある。また、JungleのようにLogファイルとして出力することでも解決ができる。
 
 \subsection{DataSegmentKeyの領域分け}
+現在Meta Data SegmentとData Segmentは、同じKey Value Queueで管理されている。つまり、Data Segment APIを用いれば、誰でもMeta Data Segmentを変更することができてしまう。Meta Data SegmentにAliceの状態を表すものがあるため、ユーザーによる変更は望ましくない。また、ユーザーが意図せずMeta Data Segment Keyに対して、putすることも考えられる。そして、Meta Code Segmentがactiveになりエラーを起こす。Meta Code Segmentでエラーが起こった場合、ソースコードを見ることができないため解決しづらい。
+
+このようなエラーを防ぐためにMeta Data SegmentとData Segmentの領域を分ける必要がある。Data Segmentを分けることによりKeyの重複によるエラーをアプリケーションレベルにすることができる。しかし、領域を分けるだけでは足りない。領域をわけることで解決することができるのはputまたはupdateの場合だけである。Meta Data Segmentを取得する際にtakeを使用した場合Meta Data SegmentがQueueから取り除かれてしまう。この問題に対処するためには権限をCode Segmentに対して設定する必要がある。その権限により、takeと記述しても実際にはpeekを行うようにすることができる。
 
 \subsection{記述に関する注意点}
 \subsubsection{setKey のシンタックス問題}
@@ -25,4 +36,11 @@
 \begin{table}[html]
 \lstinputlisting[label=src:success,caption=NullPointerExceptionにならない記述]{source/ShowData.java}
 \end{table}
-\subsubsection{singleton Code Segment}
\ No newline at end of file
+
+\subsubsection{singleton Code Segment}
+Javaには、クラスのインスタンスを1つに限定するSingletonパターンがある。Code SegmentにSingletonパターンを使用したい場合があり得る。その場合、setKeyを行なう前に{\tt ids.init()}を行なう必要がある。先ほどのsetKeyのシンタックス問題でも述べたが、Code Segmentは内部で実行に必要なData Segmentを示す値がある。一度実行された状態のCode Segmentと新しくインスタンスを作成した場合のCode Segmentでは、値が違うため{\tt ids.init()}を呼ばずにsetKeyを行なうとData Segmentが揃ったにもかかわらずCode Segmentが実行されない。そのためsetKeyを呼ぶ前に{\tt ids.init()}を呼び内部の値を初期化する必要がある。(ソースコード\ref{src:Singleton})
+
+
+\begin{table}[html]
+\lstinputlisting[label=src:Singleton,caption=setKeyを呼ぶ前にinitを呼ぶ必要がある。]{source/Singleton.java}
+\end{table}
\ No newline at end of file