Mercurial > hg > Papers > 2012 > sugi-prosym
diff Paper/sugi-prosym.tex @ 4:88a77b2c92ea
add makefile
author | e095732 <e095732@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 18 Nov 2012 03:32:29 +0900 |
parents | d0a3f3122885 |
children | a48e22ceed00 |
line wrap: on
line diff
--- a/Paper/sugi-prosym.tex Sun Nov 18 02:33:16 2012 +0900 +++ b/Paper/sugi-prosym.tex Sun Nov 18 03:32:29 2012 +0900 @@ -1,197 +1,1 @@ -\documentclass[private]{ipsjpapers} -\usepackage[dvipdfmx]{graphicx} -% 巻数,号数などの設定 -%\setcounter{巻数}{41} -%\setcounter{号数}{6} -%\setcounter{volpageoffset}{1234} -%\受付{12}{2}{4} -%\採録{12}{5}{11} - -% ユーザが定義したマクロなど. -\makeatletter -\let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY} -\def\<{\(\langle\)} -\def\>{\(\rangle\)} -\def\|{\verb|} -\def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} -\def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\} -\def\LATEX{\iLATEX\Large} -\def\LATEx{\iLATEX\normalsize} -\def\LATex{\iLATEX\small} -\def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em - T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} -\def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi} -\def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi} -\def\Quote{\list{}{}\item[]} -\let\endQuote\endlist -\def\TT{\if@LaTeX@e\tt\fi} -\def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else - $\backslash$#1\fi} - -%\checklines % 行送りを確認する時に使用 -\begin{document}%{ -% 和文表題 -\title[Code Segment と Data Segment によるプログラミング手法]% -{Code Segment と Data Segment によるプログラミング手法 } -% 英文表題 -\etitle{How to Programming with Code Segment and Data Segment} -% 所属ラベルの定義 -\affilabel{URYUKYU}{琉球大学\\University of the Ryukyu} -% 和文著者名 -\author{河野 真治\affiref{URYUKYU}\member{19841765}\and - 杉本 優\affiref{URYUKYU}\nomember} - - -% 英文著者名 -\eauthor{Shinji Kono\affiref{URYUKYU}\and -Yu Sugimoto\affiref{URYUKYU}} - - -% 連絡先(投稿時に必要.製版用では無視される.) -\contact{杉本 優\\ - 〒903-0213 沖縄県中頭郡西原町字千原1番地\\ - 琉球大学 情報工学科\\ - TEL: (098)895-8723\qquad FAX: (098)895-8727\\ - email: sugi@cr.ie.u-ryukyu.ac.jp} - -% 和文概要 -\begin{abstract} -本研究室では分散プログラミングにおいて、データをData Segment、タスクをCode Segmentという単位に分割して記述する方法を提唱している。 -しかし、前述した方法をプログラマーが一から記述することは大変である。そこで、本研究室で分散ネットフレームワーク Alice を作成した。本論文では実際にAliceを用いてCode Segment と Data Segment によるプログラミング手法の例を示す。 -\end{abstract} -% 英文概要 -\begin{eabstract} -\end{eabstract} - -% 表題などの出力 -\maketitle - -%}{ - -% 本文はここから始まる -\section{歴史的経緯} -本研究室では、並列タスク管理フレームワークCeriumの管理を行なっているが、その設計と実装を行うにあたり、並列プログラミングと分散プログラミング -は本質的には同じことを行なっていることが分かった。特にヘテロジーニアスマルチコアであり、ローカルストアをそれぞれのコアが持っているというCell の特異な環境は、分散プログラミング環境と告示している。それらを踏まえて、Ceriumのタスク管理手法を分散に応用できないかと考えた。 - - -Ceriumに置いても、タスクとそれの入出力データの取り扱いは難しい課題である。データを操作するAPIを考えて、タスクを自然に記述し、効率良く実行する方法を考えてきた。そこで考えられた手法が、データをDataSegment、タスクをCodeSegmentという単位に分割して記述する方法である。 -%}{ - -\section{分散ネットフレームワークAlice}\label{sec:ITEM} -\subsection{Aliceとは} -Aliceは本研究室の卒業生である赤嶺一樹氏が、本研究室で開発を行なっている並列タスク管理フレームワーク Cerium と先行研究である Federated Linda の開発を通して得られた知見を生かされている。 -Federated Linda の設計はシングルスレッドで行われている。しかし、近年ではマルチコアのマシンが主流となっている。将来的にはメニーコアのマシンが主流になってくると考えられるそのような背景を踏まえてAliceはマルチスレッド向けに設計されている。 - -AliceはData SegmentとCode Segmentという単位でデータと処理を細かく分割し、それぞれの依存関係を記述して分散プログラムを作成する。また、他のマシンとの接続トポロジーの構成の機能も有しているのでユーザーはトポロジー構成後の処理を記述するだけでよい。 -%}{ -\subsection{Data Segment} -AliceではData Semgnetをデータベースとして利用している。KeyValueStoreで実装されており、キーごとにリストを持っている。Data Segment APIを用いることで、リストにデータを追加、削除を適宜行うことができる。 - -\subsubsection{Data Segment Manager} -大量のData Segmentを管理するのがData Segment Managerである。Data Segment Managerは文字列のキーでData Segmentを整理する。各キーごとにキュー構造を持っている。それらをData Segment APIを用いて操作する。 -データの読み出し("peek" または "take")時に、希望のデータがなかった場合、ブロッキングを行う機能を持つ。 -しかし、ブロッキングといってもそこで同期するわけではない。 -非同期でデータを通信する。 -そのため、 "peek" と "take" は他の API とは違い、レスポンスが発生する。 -\subsubsection{Data Segment API} -表番号)が用意されているData Segment APIである。これらを用いてデータの送受信を行う。 -\begin{itemize} -\item {\ttfamily void put(String key, Value val)} -\item {\ttfamily void update(String key, Value val)} -\item {\ttfamily void peek(Receiver receiver, String key, int id)} -\item {\ttfamily void take(Receiver receiver, String key, int id)} -\end{itemize} - -\subsubsection*{"put"} -"put" はデータを追加するための API である。 - -"put" は受け取ったデータ val を Data Segment 内のキューに対してエンキューする。 -この時、キーごとに重複しない連番の ID を受け取った順に振る。(図 \ref{fig:put}) -\subsubsection*{"update"} -"update" はデータを置き換えるための API である。 - -"update" はキューの先頭にあるデータをひとつだけ削除する。 -その後は "put" と同じく、 受け取ったデータ val を Data Segment 内のキューに対してエンキューする。 -この時、キーごとに重複しない連番の ID を受け取った順に振る。(図 \ref{fig:update}) -\subsubsection*{"peek"} -"peek" はデータを読み込むための API である。 - -"peek" は前回読み込んだデータの id を引数で指定する。省略した場合は、 0 が id として渡される。 -id よりも値の大きい id のデータがキューに含まれていれば、そのデータを receiver に返す。 -もし id 以下のデータしか無いならば、データの更新が前回の "peek" 発行時から更新が無いものと考え、リストに格納されて保留される。(図 \ref{fig:peek}) - -"take" や "update" によりデータの更新があれば、 "peek" が直ちに実行される。 -\subsubsection*{"take"} -"take" もデータを読み込むための API である。 -基本的な id に関する部分は "peek" と同じである。 - -"peek" との決定的な違いは、読み込まれたデータは Data Segment 内のキューから取り除かれるということである。(図 \ref{fig:take}) - - -\subsection{Code Segment} -Code Segmentはタスクのことである。Code Segmentをユーザーが記述するときに、Code Segment 内で使用するData Segment を記述し、依存関係を作る。依存関係により、実行される順番が一意に決まる。実際に使用するData Segment はCode Segmentの入出力に相当する。それぞれ、Input Data Segment、Output Data Segmentとする。 -\subsubsection{Code Segmentの実行方法} -Code Semgnetを実行するためにはStart Code SegmentというCode Segmentを実行させる必要がある。 -Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。 - - -\subsubsection{Code Segmentの記述方法} -Code Segmentをユーザーが記述する際にはCodeSegmentを継承して記述する。そのCodeSegmentはInputDataSegmentManagerとOutputDataSegmentManagerを利用することができる。 -\subsubsection*{InputDataSegmentManager} -InputDataSegmentManagerはCode Segmentのidsというフィールドを用いてアクセスする。 -\begin{itemize} -\item {\ttfamily Receiver create(CommandType type)} -\end{itemize} -createでコマンドが実行された際に取得されるData Segmentが格納される受け皿を作る。引数にはCommandTypeが取られ、指定できるCommandTypeはPEEKまたはTAKEである。 -\begin{itemize} -\item {\ttfamily void setKey(String managerKey, String key, int id)} -\end{itemize} -setKeyメソッドにより、どこのData Segmentのあるkeyに対してpeekまたはtakeコマンドを実行させるかを指定することができる。 -コマンドの結果がレスポンスとして届き次第Code Segmentは実行される。 -\subsubsection*{OutputDataSegmentManager} -OutputDataSegmentManagerはCode Segmentのodsというフィールドを用いてアクセスする。 -OutPutDataSegmentManagerは"put"または"update"を実行することができる。 -\begin{itemize} -\item {\ttfamily void put(String managerKey, String key, \\ Value val)} -\item {\ttfamily void update(String managerKey, String key, Value val)} -\end{itemize} - -\subsection{Topology Manager} -TopologyManagerはAlice同士の接続トポロジーを管理する。TopologyManager関連の通信処理はCode Segmentで実装してある。 -TopologyManagerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきクライアントのIPアドレスやポート番号、接続名を送り、トポロジーファイルに記述された通りにトポロジーを作成する。 - -\subsection{Topology Managerの設定ファイル} -Topology Managerはトポロジーファイルを読み込むが、トポロジーファイル自体はDOT Languageという言語で記述される。 -DOT Languageとはプレーンテキストを用いて、データ構造としてのグラフを表現するための、データ記述言語の一種である。このDOT Languageのグラフを利用して、クライアント間の接続を表現する。DOT Languageファイルはdotコマンドを用いて、グラフの画像ファイルを出力することができるので、記述したトポロジーが正しいことを可視化して確認することができる。 - -クライアント間の接続にはlabelを用いて名前が割り振られており、この接続名を用いてユーザーはData Segment Managerにアクセスすることができる。 -前述したReceiver にsetKeyを行う際、odsでputまたはupdateする際の引数のmanagerKeyがこれにあたる。 - -\subsection{Topology Managerの使用方法} -Topology Nodeを起動する際にコマンドライン引数としてTopology ManagerのIPアドレスとポート番号を指定をする。 -そしてmain関数内でTopologyNodeをnewを行えば良い。 -TopologyNodeの第一引数は Alice デーモンの設定オブジェクト、第二引数はStart Code Segmentである。 -ここで指定した、Start Code Segmentがトポロジーが完成した後実行される。 - -%}{ -\section{ゲームの例題}\label{sec:Enum}\label{sec:item} -\subsection{水族館} -今回作成した例題は水族館である。複数のクライアントのディスプレイを複数の魚が移動していくものである。魚は画面の端まで移動すると自分の画面上からは消え、別のクライアントの画面の端から魚が出てくる。また、魚のうち一匹はクライアントが直接操作することができる。トポロジーはTopologyManagerによりツリー状に構成してある。 -\subsection{データの伝搬} - -\begin{enumerate} -\item ユーザーが魚を操作するまたはCode Segmentにより魚の座標が更新される。 -\item 画面に表示させるためのSetLocation (Code Segment)が実行され実際に魚のオブジェクトにセットされ画面に反映される。 -\item Update(Code Segment)にFishPosition(魚の座標データ)が渡される。 -\item Updateにlist(送信者リスト)が渡される。 -\item Updateが実行され、listを元にデータが送信される。ただし、この時にFishPositionには送信元情報が付加されているので、送信元には送信されない。 -\item 各clientで2 - 4が実行される。 -\end{enumerate} - -\section{評価} - - -\section{まとめと今後の課題} - - -\end{document} +\documentclass[private]{ipsjpapers} % 蟾サ謨ーシ悟捷謨ー縺ェ縺ゥ縺ョ險ュ螳 %\setcounter{蟾サ謨ー}{41} %\setcounter{蜿キ謨ー}{6} %\setcounter{volpageoffset}{1234} %\蜿嶺サ{12}{2}{4} %\謗。骭イ{12}{5}{11} % 繝ヲ繝シ繧カ縺悟ョ夂セゥ縺励◆繝槭け繝ュ縺ェ縺ゥシ \makeatletter \let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY} \def\<{\(\langle\)} \def\>{\(\rangle\)} %\def\|{\verb|} \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\} \def\LATEX{\iLATEX\Large} \def\LATEx{\iLATEX\normalsize} \def\LATex{\iLATEX\small} \def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} \def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi} \def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi} \def\Quote{\list{}{}\item[]} \let\endQuote\endlist \def\TT{\if@LaTeX@e\tt\fi} \def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else $\backslash$#1\fi} %\checklines % 陦碁√j繧堤「コ隱阪☆繧区凾縺ォ菴ソ逕ィ \begin{document}%{ % 蜥梧枚陦ィ鬘 \title[Code Segment 縺ィ Data Segment 縺ォ繧医k繝励Ο繧ー繝ゥ繝溘Φ繧ー謇区ウ評% {Code Segment 縺ィ Data Segment 縺ォ繧医k繝励Ο繧ー繝ゥ繝溘Φ繧ー謇区ウ } % 闍ア譁陦ィ鬘 \etitle{How to Programming with Code Segment and Data Segment} % 謇螻槭Λ繝吶Ν縺ョ螳夂セゥ \affilabel{URYUKYU}{逅臥帥螟ァ蟄ヲ\\University of the Ryukyu} % 蜥梧枚闡苓蜷 \author{豐ウ驥 逵滓イサ\affiref{URYUKYU}\member{19841765}\and 譚画悽 蜆ェ\affiref{URYUKYU}\nomember} % 闍ア譁闡苓蜷 \eauthor{Shinji Kono\affiref{URYUKYU}\and Yu Sugimoto\affiref{URYUKYU}} % 騾」邨。蜈茨シ域兜遞ソ譎ゅ↓蠢隕シ手」ス迚育畑縺ァ縺ッ辟。隕悶&繧後kシ趣シ \contact{譚画悽 蜆ェ\\ 縲903-0213 豐也ク逵御クュ鬆ュ驛。隘ソ蜴溽伴蟄怜鴻蜴1逡ェ蝨ー\\ 逅臥帥螟ァ蟄ヲ 諠蝣ア蟾・蟄ヲ遘曾\ TEL: (098)895-8723\qquad FAX: (098)895-8727\\ email: sugi@cr.ie.u-ryukyu.ac.jp} % 蜥梧枚讎りヲ \begin{abstract} 譛ャ遐皮ゥカ螳、縺ァ縺ッ蛻謨」繝励Ο繧ー繝ゥ繝溘Φ繧ー縺ォ縺翫>縺ヲ縲√ョ繝シ繧ソ繧奪ata Segment縲√ち繧ケ繧ッ繧辰ode Segment縺ィ縺縺蜊倅ス阪↓蛻蜑イ縺励※險倩ソー縺吶k譁ケ豕輔r謠仙罰縺励※縺繧九 縺励°縺励∝燕霑ー縺励◆譁ケ豕輔r繝励Ο繧ー繝ゥ繝槭シ縺御ク縺九i險倩ソー縺吶k縺薙→縺ッ螟ァ螟峨〒縺ゅk縲ゅ◎縺薙〒縲∵悽遐皮ゥカ螳、縺ァ蛻謨」繝阪ャ繝医ヵ繝ャ繝シ繝繝ッ繝シ繧ッ Alice 繧剃ス懈舌@縺溘よ悽隲匁枚縺ァ縺ッ螳滄圀縺ォAlice繧堤畑縺縺ヲCode Segment 縺ィ Data Segment 縺ォ繧医k繝励Ο繧ー繝ゥ繝溘Φ繧ー謇区ウ輔ョ萓九r遉コ縺吶 \end{abstract} % 闍ア譁讎りヲ \begin{eabstract} \end{eabstract} % 陦ィ鬘後↑縺ゥ縺ョ蜃コ蜉 \maketitle %}{ % 譛ャ譁縺ッ縺薙%縺九i蟋九∪繧 \section{豁エ蜿イ逧邨檎キッ} 譛ャ遐皮ゥカ螳、縺ァ縺ッ縲∽クヲ蛻励ち繧ケ繧ッ邂。逅繝輔Ξ繝シ繝繝ッ繝シ繧ッCerium縺ョ邂。逅繧定。後↑縺」縺ヲ縺繧九′縲√◎縺ョ險ュ險医→螳溯」繧定。後≧縺ォ縺ゅ◆繧翫∽クヲ蛻励励Ο繧ー繝ゥ繝溘Φ繧ー縺ィ蛻謨」繝励Ο繧ー繝ゥ繝溘Φ繧ー 縺ッ譛ャ雉ェ逧縺ォ縺ッ蜷後§縺薙→繧定。後↑縺」縺ヲ縺繧九%縺ィ縺悟縺九▲縺溘ら音縺ォ繝倥ユ繝ュ繧ク繝シ繝九い繧ケ繝槭Ν繝√さ繧「縺ァ縺ゅj縲√Ο繝シ繧ォ繝ォ繧ケ繝医い繧偵◎繧後◇繧後ョ繧ウ繧「縺梧戟縺」縺ヲ縺繧九→縺縺Cell 縺ョ迚ケ逡ー縺ェ迺ー蠅縺ッ縲∝謨」繝励Ο繧ー繝ゥ繝溘Φ繧ー迺ー蠅縺ィ蜻顔、コ縺励※縺繧九ゅ◎繧後i繧定ク上∪縺医※縲,erium縺ョ繧ソ繧ケ繧ッ邂。逅謇区ウ輔r蛻謨」縺ォ蠢懃畑縺ァ縺阪↑縺縺九→閠縺医◆縲 Cerium縺ォ鄂ョ縺縺ヲ繧ゅ√ち繧ケ繧ッ縺ィ縺昴l縺ョ蜈・蜃コ蜉帙ョ繝シ繧ソ縺ョ蜿悶j謇ア縺縺ッ髮」縺励>隱イ鬘後〒縺ゅk縲ゅョ繝シ繧ソ繧呈桃菴懊☆繧帰PI繧定縺医※縲√ち繧ケ繧ッ繧定ェ辟カ縺ォ險倩ソー縺励∝柑邇濶ッ縺丞ョ溯。後☆繧区婿豕輔r閠縺医※縺阪◆縲ゅ◎縺薙〒閠縺医i繧後◆謇区ウ輔′縲√ョ繝シ繧ソ繧奪ataSegment縲√ち繧ケ繧ッ繧辰odeSegment縺ィ縺縺蜊倅ス阪↓蛻蜑イ縺励※險倩ソー縺吶k譁ケ豕輔〒縺ゅk縲 %}{ \section{蛻謨」繝阪ャ繝医ヵ繝ャ繝シ繝繝ッ繝シ繧ッAlice}\label{sec:ITEM} \subsection{Alice縺ィ縺ッ} Alice縺ッ譛ャ遐皮ゥカ螳、縺ョ蜊呈・ュ逕溘〒縺ゅk襍、蠍コ荳讓ケ豌上′縲∵悽遐皮ゥカ螳、縺ァ髢狗匱繧定。後↑縺」縺ヲ縺繧倶クヲ蛻励ち繧ケ繧ッ邂。逅繝輔Ξ繝シ繝繝ッ繝シ繧ッ Cerium 縺ィ蜈郁。檎皮ゥカ縺ァ縺ゅk Federated Linda 縺ョ髢狗匱繧帝壹@縺ヲ蠕励i繧後◆遏・隕九r逕溘°縺輔l縺ヲ縺繧九 Federated Linda 縺ョ險ュ險医ッ繧キ繝ウ繧ー繝ォ繧ケ繝ャ繝繝峨〒陦後o繧後※縺繧九ゅ@縺九@縲∬ソ大ケエ縺ァ縺ッ繝槭Ν繝√さ繧「縺ョ繝槭す繝ウ縺御クサ豬√→縺ェ縺」縺ヲ縺繧九ょー譚・逧縺ォ縺ッ繝。繝九シ繧ウ繧「縺ョ繝槭す繝ウ縺御クサ豬√↓縺ェ縺」縺ヲ縺上k縺ィ閠縺医i繧後k縺昴ョ繧医≧縺ェ閭梧勹繧定ク上∪縺医※Alice縺ッ繝槭Ν繝√せ繝ャ繝繝牙髄縺代↓險ュ險医&繧後※縺繧九 Alice縺ッData Segment縺ィCode Segment縺ィ縺縺蜊倅ス阪〒繝繝シ繧ソ縺ィ蜃ヲ逅繧堤エー縺九¥蛻蜑イ縺励√◎繧後◇繧後ョ萓晏ュ倬未菫ゅr險倩ソー縺励※蛻謨」繝励Ο繧ー繝ゥ繝繧剃ス懈舌☆繧九ゅ∪縺溘∽サ悶ョ繝槭す繝ウ縺ィ縺ョ謗・邯壹ヨ繝昴Ο繧ク繝シ縺ョ讒区舌ョ讖溯ス繧よ怏縺励※縺繧九ョ縺ァ繝ヲ繝シ繧カ繝シ縺ッ繝医昴Ο繧ク繝シ讒区仙セ後ョ蜃ヲ逅繧定ィ倩ソー縺吶k縺縺代〒繧医>縲 %}{ \subsection{Data Segment} Alice縺ァ縺ッData Semgnet繧偵ョ繝シ繧ソ繝吶シ繧ケ縺ィ縺励※蛻ゥ逕ィ縺励※縺繧九KeyValueStore縺ァ螳溯」縺輔l縺ヲ縺翫j縲√く繝シ縺斐→縺ォ繝ェ繧ケ繝医r謖√▲縺ヲ縺繧九Data Segment API繧堤畑縺繧九%縺ィ縺ァ縲√Μ繧ケ繝医↓繝繝シ繧ソ繧定ソス蜉縲∝炎髯、繧帝←螳懆。後≧縺薙→縺後〒縺阪k縲 \subsubsection{Data Segment Manager} 螟ァ驥上ョData Segment繧堤ョ。逅縺吶k縺ョ縺轡ata Segment Manager縺ァ縺ゅk縲Data Segment Manager縺ッ譁蟄怜励ョ繧ュ繝シ縺ァData Segment繧呈紛逅縺吶k縲ょ推繧ュ繝シ縺斐→縺ォ繧ュ繝・繝シ讒矩繧呈戟縺」縺ヲ縺繧九ゅ◎繧後i繧奪ata Segment API繧堤畑縺縺ヲ謫堺ス懊☆繧九 繝繝シ繧ソ縺ョ隱ュ縺ソ蜃コ縺("peek" 縺セ縺溘ッ "take")譎ゅ↓縲∝ク梧悍縺ョ繝繝シ繧ソ縺後↑縺九▲縺溷エ蜷医√ヶ繝ュ繝繧ュ繝ウ繧ー繧定。後≧讖溯ス繧呈戟縺、縲 縺励°縺励√ヶ繝ュ繝繧ュ繝ウ繧ー縺ィ縺縺」縺ヲ繧ゅ◎縺薙〒蜷梧悄縺吶k繧上¢縺ァ縺ッ縺ェ縺縲 髱槫酔譛溘〒繝繝シ繧ソ繧帝壻ソ。縺吶k縲 縺昴ョ縺溘a縲 "peek" 縺ィ "take" 縺ッ莉悶ョ API 縺ィ縺ッ驕輔>縲√Ξ繧ケ繝昴Φ繧ケ縺檎匱逕溘☆繧九 \subsubsection{Data Segment API} 陦ィ逡ェ蜿キ)縺檎畑諢上&繧後※縺繧汽ata Segment API縺ァ縺ゅk縲ゅ%繧後i繧堤畑縺縺ヲ繝繝シ繧ソ縺ョ騾∝女菫。繧定。後≧縲 \begin{itemize} \item {\ttfamily void put(String key, Value val)} \item {\ttfamily void update(String key, Value val)} \item {\ttfamily void peek(Receiver receiver, String key, int id)} \item {\ttfamily void take(Receiver receiver, String key, int id)} \end{itemize} \subsubsection*{"put"} "put" 縺ッ繝繝シ繧ソ繧定ソス蜉縺吶k縺溘a縺ョ API 縺ァ縺ゅk縲 "put" 縺ッ蜿励¢蜿悶▲縺溘ョ繝シ繧ソ val 繧 Data Segment 蜀縺ョ繧ュ繝・繝シ縺ォ蟇セ縺励※繧ィ繝ウ繧ュ繝・繝シ縺吶k縲 縺薙ョ譎ゅ√く繝シ縺斐→縺ォ驥崎、縺励↑縺騾」逡ェ縺ョ ID 繧貞女縺大叙縺」縺滄縺ォ謖ッ繧九 %(蝗ウ \ref{fig:put}) \subsubsection*{"update"} "update" 縺ッ繝繝シ繧ソ繧堤スョ縺肴鋤縺医k縺溘a縺ョ API 縺ァ縺ゅk縲 "update" 縺ッ繧ュ繝・繝シ縺ョ蜈磯ュ縺ォ縺ゅk繝繝シ繧ソ繧偵イ縺ィ縺、縺縺大炎髯、縺吶k縲 縺昴ョ蠕後ッ "put" 縺ィ蜷後§縺上 蜿励¢蜿悶▲縺溘ョ繝シ繧ソ val 繧 Data Segment 蜀縺ョ繧ュ繝・繝シ縺ォ蟇セ縺励※繧ィ繝ウ繧ュ繝・繝シ縺吶k縲 縺薙ョ譎ゅ√く繝シ縺斐→縺ォ驥崎、縺励↑縺騾」逡ェ縺ョ ID 繧貞女縺大叙縺」縺滄縺ォ謖ッ繧九 %(蝗ウ \ref{fig:update}) \subsubsection*{"peek"} "peek" 縺ッ繝繝シ繧ソ繧定ェュ縺ソ霎シ繧縺溘a縺ョ API 縺ァ縺ゅk縲 "peek" 縺ッ蜑榊屓隱ュ縺ソ霎シ繧薙□繝繝シ繧ソ縺ョ id 繧貞シ墓焚縺ァ謖螳壹☆繧九ら怐逡・縺励◆蝣エ蜷医ッ縲 0 縺 id 縺ィ縺励※貂。縺輔l繧九 id 繧医j繧ょ、縺ョ螟ァ縺阪> id 縺ョ繝繝シ繧ソ縺後く繝・繝シ縺ォ蜷ォ縺セ繧後※縺繧後ー縲√◎縺ョ繝繝シ繧ソ繧 receiver 縺ォ霑斐☆縲 繧ゅ@ id 莉・荳九ョ繝繝シ繧ソ縺励°辟。縺縺ェ繧峨ー縲√ョ繝シ繧ソ縺ョ譖エ譁ー縺悟燕蝗槭ョ "peek" 逋コ陦梧凾縺九i譖エ譁ー縺檎┌縺繧ゅョ縺ィ閠縺医√Μ繧ケ繝医↓譬シ邏阪&繧後※菫晉蕗縺輔l繧九 %(蝗ウ \ref{fig:peek}) "take" 繧 "update" 縺ォ繧医j繝繝シ繧ソ縺ョ譖エ譁ー縺後≠繧後ー縲 "peek" 縺檎峩縺。縺ォ螳溯。後&繧後k縲 \subsubsection*{"take"} "take" 繧ゅョ繝シ繧ソ繧定ェュ縺ソ霎シ繧縺溘a縺ョ API 縺ァ縺ゅk縲 蝓コ譛ャ逧縺ェ id 縺ォ髢「縺吶k驛ィ蛻縺ッ "peek" 縺ィ蜷後§縺ァ縺ゅk縲 "peek" 縺ィ縺ョ豎コ螳夂噪縺ェ驕輔>縺ッ縲∬ェュ縺ソ霎シ縺セ繧後◆繝繝シ繧ソ縺ッ Data Segment 蜀縺ョ繧ュ繝・繝シ縺九i蜿悶j髯、縺九l繧九→縺縺縺薙→縺ァ縺ゅk縲 %(蝗ウ \ref{fig:take}) \subsection{Code Segment} Code Segment縺ッ繧ソ繧ケ繧ッ縺ョ縺薙→縺ァ縺ゅk縲Code Segment繧偵Θ繝シ繧カ繝シ縺瑚ィ倩ソー縺吶k縺ィ縺阪↓縲,ode Segment 蜀縺ァ菴ソ逕ィ縺吶kData Segment 繧定ィ倩ソー縺励∽セ晏ュ倬未菫ゅr菴懊k縲ゆセ晏ュ倬未菫ゅ↓繧医j縲∝ョ溯。後&繧後k鬆逡ェ縺御ク諢上↓豎コ縺セ繧九ょョ滄圀縺ォ菴ソ逕ィ縺吶kData Segment 縺ッCode Segment縺ョ蜈・蜃コ蜉帙↓逶ク蠖薙☆繧九ゅ◎繧後◇繧後!nput Data Segment縲^utput Data Segment縺ィ縺吶k縲 \subsubsection{Code Segment縺ョ螳溯。梧婿豕扶 Code Semgnet繧貞ョ溯。後☆繧九◆繧√↓縺ッStart Code Segment縺ィ縺縺Code Segment繧貞ョ溯。後&縺帙k蠢隕√′縺ゅk縲 Start Code Segment縺ッ縺ゥ縺ョData Segment縺ォ繧ゆセ晏ュ倥@縺ェ縺縲ゅ▽縺セ繧蟹nput Data Segment繧呈戟縺溘↑縺縲ゅ%縺ョCode Segment繧知ain繝。繧ス繝繝牙縺ァnew縺励‘xecute繝。繧ス繝繝峨r蜻シ縺カ縺薙→縺ァ螳溯。後r髢句ァ九&縺帙k縺薙→縺後〒縺阪k縲 \subsubsection{Code Segment縺ョ險倩ソー譁ケ豕扶 Code Segment繧偵Θ繝シ繧カ繝シ縺瑚ィ倩ソー縺吶k髫帙↓縺ッCodeSegment繧堤カ呎価縺励※險倩ソー縺吶k縲ゅ◎縺ョCodeSegment縺ッInputDataSegmentManager縺ィOutputDataSegmentManager繧貞茜逕ィ縺吶k縺薙→縺後〒縺阪k縲 \subsubsection*{InputDataSegmentManager} InputDataSegmentManager縺ッCode Segment縺ョids縺ィ縺縺繝輔ぅ繝シ繝ォ繝峨r逕ィ縺縺ヲ繧「繧ッ繧サ繧ケ縺吶k縲 \begin{itemize} \item {\ttfamily Receiver create(CommandType type)} \end{itemize} create縺ァ繧ウ繝槭Φ繝峨′螳溯。後&繧後◆髫帙↓蜿門セ励&繧後kData Segment縺梧シ邏阪&繧後k蜿励¢逧ソ繧剃ス懊k縲ょシ墓焚縺ォ縺ッCommandType縺悟叙繧峨l縲∵欠螳壹〒縺阪kCommandType縺ッPEEK縺セ縺溘ッTAKE縺ァ縺ゅk縲 \begin{itemize} \item {\ttfamily void setKey(String managerKey, String key, int id)} \end{itemize} setKey繝。繧ス繝繝峨↓繧医j縲√←縺薙ョData Segment縺ョ縺ゅkkey縺ォ蟇セ縺励※peek縺セ縺溘ッtake繧ウ繝槭Φ繝峨r螳溯。後&縺帙k縺九r謖螳壹☆繧九%縺ィ縺後〒縺阪k縲 繧ウ繝槭Φ繝峨ョ邨先棡縺後Ξ繧ケ繝昴Φ繧ケ縺ィ縺励※螻翫″谺。隨ャCode Segment縺ッ螳溯。後&繧後k縲 \subsubsection*{OutputDataSegmentManager} OutputDataSegmentManager縺ッCode Segment縺ョods縺ィ縺縺繝輔ぅ繝シ繝ォ繝峨r逕ィ縺縺ヲ繧「繧ッ繧サ繧ケ縺吶k縲 OutPutDataSegmentManager縺ッ"put"縺セ縺溘ッ"update"繧貞ョ溯。後☆繧九%縺ィ縺後〒縺阪k縲 \begin{itemize} \item {\ttfamily void put(String managerKey, String key, \\ Value val)} \item {\ttfamily void update(String managerKey, String key, Value val)} \end{itemize} \subsection{Topology Manager} TopologyManager縺ッAlice蜷悟」ォ縺ョ謗・邯壹ヨ繝昴Ο繧ク繝シ繧堤ョ。逅縺吶k縲5opologyManager髢「騾」縺ョ騾壻ソ。蜃ヲ逅縺ッCode Segment縺ァ螳溯」縺励※縺ゅk縲 TopologyManager縺ッ繝医昴Ο繧ク繝シ繝輔ぃ繧、繝ォ繧定ェュ縺ソ霎シ縺ソ縲∝盾蜉繧定。ィ譏弱@縺溘け繝ゥ繧、繧「繝ウ繝(莉・荳九ゝopology Node)縺ォ謗・邯壹☆繧九∋縺阪け繝ゥ繧、繧「繝ウ繝医ョIP繧「繝峨Ξ繧ケ繧繝昴シ繝育分蜿キ縲∵磁邯壼錐繧帝√j縲√ヨ繝昴Ο繧ク繝シ繝輔ぃ繧、繝ォ縺ォ險倩ソー縺輔l縺滄壹j縺ォ繝医昴Ο繧ク繝シ繧剃ス懈舌☆繧九 \subsection{Topology Manager縺ョ險ュ螳壹ヵ繧。繧、繝ォ} Topology Manager縺ッ繝医昴Ο繧ク繝シ繝輔ぃ繧、繝ォ繧定ェュ縺ソ霎シ繧縺後√ヨ繝昴Ο繧ク繝シ繝輔ぃ繧、繝ォ閾ェ菴薙ッDOT Language縺ィ縺縺險隱槭〒險倩ソー縺輔l繧九 DOT Language縺ィ縺ッ繝励Ξ繝シ繝ウ繝繧ュ繧ケ繝医r逕ィ縺縺ヲ縲√ョ繝シ繧ソ讒矩縺ィ縺励※縺ョ繧ー繝ゥ繝輔r陦ィ迴セ縺吶k縺溘a縺ョ縲√ョ繝シ繧ソ險倩ソー險隱槭ョ荳遞ョ縺ァ縺ゅk縲ゅ%縺ョDOT Language縺ョ繧ー繝ゥ繝輔r蛻ゥ逕ィ縺励※縲√け繝ゥ繧、繧「繝ウ繝磯俣縺ョ謗・邯壹r陦ィ迴セ縺吶k縲DOT Language繝輔ぃ繧、繝ォ縺ッdot繧ウ繝槭Φ繝峨r逕ィ縺縺ヲ縲√げ繝ゥ繝輔ョ逕サ蜒上ヵ繧。繧、繝ォ繧貞コ蜉帙☆繧九%縺ィ縺後〒縺阪k縺ョ縺ァ縲∬ィ倩ソー縺励◆繝医昴Ο繧ク繝シ縺梧ュ」縺励>縺薙→繧貞庄隕門喧縺励※遒コ隱阪☆繧九%縺ィ縺後〒縺阪k縲 繧ッ繝ゥ繧、繧「繝ウ繝磯俣縺ョ謗・邯壹↓縺ッlabel繧堤畑縺縺ヲ蜷榊燕縺悟牡繧頑険繧峨l縺ヲ縺翫j縲√%縺ョ謗・邯壼錐繧堤畑縺縺ヲ繝ヲ繝シ繧カ繝シ縺ッData Segment Manager縺ォ繧「繧ッ繧サ繧ケ縺吶k縺薙→縺後〒縺阪k縲 蜑崎ソー縺励◆Receiver 縺ォsetKey繧定。後≧髫帙{ds縺ァput縺セ縺溘ッupdate縺吶k髫帙ョ蠑墓焚縺ョmanagerKey縺後%繧後↓縺ゅ◆繧九 \subsection{Topology Manager縺ョ菴ソ逕ィ譁ケ豕扶 Topology Node繧定オキ蜍輔☆繧矩圀縺ォ繧ウ繝槭Φ繝峨Λ繧、繝ウ蠑墓焚縺ィ縺励※Topology Manager縺ョIP繧「繝峨Ξ繧ケ縺ィ繝昴シ繝育分蜿キ繧呈欠螳壹r縺吶k縲 縺昴@縺ヲmain髢「謨ー蜀縺ァTopologyNode繧地ew繧定。後∴縺ー濶ッ縺縲 TopologyNode縺ョ隨ャ荳蠑墓焚縺ッ Alice 繝繝シ繝「繝ウ縺ョ險ュ螳壹が繝悶ず繧ァ繧ッ繝医∫ャャ莠悟シ墓焚縺ッStart Code Segment縺ァ縺ゅk縲 縺薙%縺ァ謖螳壹@縺溘ヾtart Code Segment縺後ヨ繝昴Ο繧ク繝シ縺悟ョ梧舌@縺溷セ悟ョ溯。後&繧後k縲 %}{ \section{繧イ繝シ繝縺ョ萓矩。迎\label{sec:Enum}\label{sec:item} \subsection{豌エ譌城、ィ} 莉雁屓菴懈舌@縺滉セ矩。後ッ豌エ譌城、ィ縺ァ縺ゅk縲り、謨ー縺ョ繧ッ繝ゥ繧、繧「繝ウ繝医ョ繝繧」繧ケ繝励Ξ繧、繧定、謨ー縺ョ鬲壹′遘サ蜍輔@縺ヲ縺縺上b縺ョ縺ァ縺ゅk縲るュ壹ッ逕サ髱「縺ョ遶ッ縺セ縺ァ遘サ蜍輔☆繧九→閾ェ蛻縺ョ逕サ髱「荳翫°繧峨ッ豸医∴縲∝挨縺ョ繧ッ繝ゥ繧、繧「繝ウ繝医ョ逕サ髱「縺ョ遶ッ縺九i鬲壹′蜃コ縺ヲ縺上k縲ゅ∪縺溘鬲壹ョ縺縺。荳蛹ケ縺ッ繧ッ繝ゥ繧、繧「繝ウ繝医′逶エ謗・謫堺ス懊☆繧九%縺ィ縺後〒縺阪k縲ゅヨ繝昴Ο繧ク繝シ縺ッTopologyManager縺ォ繧医j繝繝ェ繝シ迥カ縺ォ讒区舌@縺ヲ縺ゅk縲 \subsection{繝繝シ繧ソ縺ョ莨晄成} \begin{enumerate} \item 繝ヲ繝シ繧カ繝シ縺碁ュ壹r謫堺ス懊☆繧九∪縺溘ッCode Segment縺ォ繧医j鬲壹ョ蠎ァ讓吶′譖エ譁ー縺輔l繧九 \item 逕サ髱「縺ォ陦ィ遉コ縺輔○繧九◆繧√ョSetLocation (Code Segment)縺悟ョ溯。後&繧悟ョ滄圀縺ォ鬲壹ョ繧ェ繝悶ず繧ァ繧ッ繝医↓繧サ繝繝医&繧檎判髱「縺ォ蜿肴丐縺輔l繧九 \item Update(Code Segment)縺ォFishPosition(鬲壹ョ蠎ァ讓吶ョ繝シ繧ソ)縺梧ク。縺輔l繧九 \item Update縺ォlist(騾∽ソ。閠繝ェ繧ケ繝)縺梧ク。縺輔l繧九 \item Update縺悟ョ溯。後&繧後〕ist繧貞縺ォ繝繝シ繧ソ縺碁∽ソ。縺輔l繧九ゅ◆縺縺励√%縺ョ譎ゅ↓FishPosition縺ォ縺ッ騾∽ソ。蜈諠蝣ア縺御サ伜刈縺輔l縺ヲ縺繧九ョ縺ァ縲騾∽ソ。蜈縺ォ縺ッ騾∽ソ。縺輔l縺ェ縺縲 \item 蜷client縺ァ2 - 4縺悟ョ溯。後&繧後k縲 \end{enumerate} \section{隧穂セ。} \section{縺セ縺ィ繧√→莉雁セ後ョ隱イ鬘迎 \end{document} \ No newline at end of file