Mercurial > hg > Papers > 2015 > sugi-master
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