diff paper/chapter1.tex @ 4:e59c8e99a5c1

modify chapter4
author sugi
date Sun, 04 Jan 2015 04:43:51 +0900
parents cacc83aea539
children c8f50c3ead48
line wrap: on
line diff
--- a/paper/chapter1.tex	Thu Jan 01 12:27:53 2015 +0900
+++ b/paper/chapter1.tex	Sun Jan 04 04:43:51 2015 +0900
@@ -33,10 +33,10 @@
 \subsection{Data Segment API}
 以下が用意されているData Segment APIである。これらを用いてデータの送受信を行う。
 \begin{itemize}
-\item {\ttfamily void put(String key, Object val)}
-\item {\ttfamily void update(String key, Object val)}
-\item {\ttfamily void peek(Receiver receiver, String key)}
-\item {\ttfamily void take(Receiver receiver, String key)}
+\item \verb+void put(String key, Value val)+
+\item \verb+void update(String key, Value val)+
+\item \verb+void peek(Receiver receiver, String key)+
+\item \verb+void take(Receiver receiver, String key)+
 \end{itemize}
 \subsubsection{put}
 putはデータをQueueに追加するためのAPIである。Lindaのout()に相当する。(図 \ref{fig:put})
@@ -100,7 +100,7 @@
 
 \begin{figure}[htbp]
 \begin{center}
-\includegraphics[width=110mm]{images/dsandcs.pdf}
+\includegraphics[width=100mm]{images/dsandcs.pdf}
 \end{center}
 \caption{Code SegmentはInput Data Segment とOutput Data Segmentが存在する}
 \label{fig:dsandcs}
@@ -115,7 +115,7 @@
 
 \begin{figure}[htbp]
 \begin{center}
-\includegraphics[width=120mm]{images/dsandcs2.pdf}
+\includegraphics[width=110mm]{images/dsandcs2.pdf}
 \end{center}
 \caption{Input Data Segment とOut put Data SegmentがCode Segment間の依存関係を自動的に記述する}
 \label{fig:dsandcs2}
@@ -123,6 +123,43 @@
 現在、Inputの場合はsetKeyを呼ぶ際、Outputはput(またはupdate)の際にノードとkeyの指定を行っている。
 しかし、どの時点でノードとkeyの指定を行えばよいか、どのようなAPIを用意するべきかは、議論の余地がある。
 
+\subsection{Code Segmentの実行方法}
+Alice には、Start Code Segment (ソースコード \ref{src:StartCodeSegment})というC の main に相当するような最初に実行される Code Segment がある。
+\begin{table}[html]
+\lstinputlisting[label=src:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java}
+\end{table}
+
+Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。
+このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。
+
+\subsection{Code Segmentの記述方法}
+Code Segmentをユーザーが記述する際にはCode Segmentを継承して記述する(ソースコード \ref{src:CodeSegment})。
+Code SegmentはInput/Output Data Segment Managerを利用することができる。
+
+Input DSM はCode Segmentの{\tt ids}というフィールドを用いてアクセスする。
+
+\begin{table}[html]
+\lstinputlisting[label=src:CodeSegment, caption=CodeSegmentの例]{source/TestCodeSegment.java}
+\end{table}
+
+\begin{itemize}
+\item {\ttfamily Receiver create(CommandType type)}
+\end{itemize}
+createでコマンドが実行された際に取得されるData Segmentが格納される受け皿を作る。引数にはCommandTypeが取られ、指定できるCommandTypeは{\tt PEEK}または{\tt TAKE}である。
+\begin{itemize}
+\item \verb+void setKey(String managerKey, String key)+
+\end{itemize}
+setKeyメソッドにより、どこのData Segmentのあるkeyに対してpeekまたはtakeコマンドを実行させるかを指定することができる。
+コマンドの結果がレスポンスとして届き次第Code Segmentは実行される。
+
+Output DSMはCode Segmentの{\tt ods}というフィールドを用いてアクセスする。
+Output DSMは{\tt put}または{\tt update}を実行することができる。
+\begin{itemize}
+\item \verb+void put(String managerKey, String key, Object val)+
+\item \verb+void update(String managerKey, String key, Object val)+
+\end{itemize}
+
+
 \section{Meta Data Segment}
 Meta Data SegmentはData Segmentの一種である。Data Segmentは、ユーザーがput(またはupdate)したデータを管理するData Baseであるのに対して、Meta Data Segmentは、分散フレームワークAliceがputしたデータを管理するData Baseである。管理されているデータは、主にTopology Nodeの状態を表すメタデータである。ユーザーがメタデータを扱うこともできる。
 
@@ -134,7 +171,12 @@
 現在のAliceでは、メタデータはデータと同じ領域にputされているため、データと同じAPIを用いて取得できる。
 
 \section{Meta Code Segment}
-Meta Code SegmentはAlice内部で動いているCode Segmentである。つまり、daemonのことである。
+Meta Code SegmentはAliceを構成するCode Segmentである。
+
+
+
+Alice自身が全てCode Segmentで記述されているため、AliceをMeta Code Segmentのかたまりと考える事ができる。
+
 
 \section{Topology Manager}
 Aliceは複数のノードで構成され、相互に接続される。通信するノードはURLにより直接指定するのではなくTopology Managerで管理する。
@@ -193,4 +235,5 @@
 \caption{Topology ManagerとTopology Node間の通信}
 \label{fig:topologymanagerandnode}
 \end{figure}
+
 \section{Aliceによるプログラミング手法}
\ No newline at end of file