annotate Paper/chapter/1-Christie.tex @ 62:74fb935dc5b5 default tip

update
author riono <e165729@ie.u-ryukyu.ac.jp>
date Wed, 02 Mar 2022 13:15:50 +0900
parents 7142a147b9ab
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{Christie}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
51
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
3 Christie\cite{christie}とはJavaで記述された並列分散通信フレームワークである。Alice\cite{alice}という前身のプロジェクトが開発されていたが、以下のような問題があった。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 データを送受信するAPIはインスタンスを生成して関数を呼び出す様に設計されているが、外部Classからも関数が実行できてしまうため、
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 受信する際どのkeyに紐づいたデータを受け取るのか、直感的にわからない。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 データを管理しているlocalDataSegmentがシングルトンで設計されており、Localで接続を行う際に複数のアプリケーションで立ち上げる必要がある。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 データを受け取る際にObject型で受け取っているため、送信元を辿らない限り何の型が送信されているか不明瞭である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
10 それらの問題点を解消するためにAliceを再設計し、作成されたものがChristieである。
53
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
11 ChristieではAliceの機能や概念を維持しつつ、Aliceで発生していた問題点やプログラムの煩雑さなどを解消している。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \section{Christieの基礎概念}
52
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
15 Christieはタスクとデータを細かい単位に分割してそれぞれの依存関係を記述し、
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 タスク実行に必要な入力が揃った順から並列実行するというプログラミング手法を用いている。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
51
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
18 将来的に当研究室で開発しているGearsOS\cite{gears}のファイルシステムに組み込まれる予定があるため、GearsOSを構成する言語 Continuation based C\cite{cbc}と
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 似た概念を持っている。Christieに存在する概念として以下の様なものがある。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \begin{itemize}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \item CodeGear
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \item DataGear
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \item CodeGearManager (以下CGM)
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \item DataGearManager (以下DGM)
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \end{itemize}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
28 \begin{figure}[htb]
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
29 \begin{center}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
30 \includegraphics[width=150mm]{images/GearsRelationships.pdf}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
31 \end{center}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
32 \caption{各Gearの関係性}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
33 \label{fig:GearRelationships}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
34 \end{figure}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
35
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
36 図\ref{fig:GearRelationships}はそれぞれのGearの関係性を図示したものである。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 CodeGearはクラスやスレッドに相当する。
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
38 DataGearは変数データに相当し、CodeGear内でJavaのannotationの機能を用いてkeyに紐づいた変数データを取得できる。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 CodeGear内に記述した全てのDataGearにデータが格納された際に、初めてそのCodeGearが実行されるという仕組みになっている。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 CGMはノードに相当し、CodeGear、DataGear、DGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 DGMはDataGearを管理しており、putという操作によって変数データ、つまりDataGearをDGMに格納できる。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 DGMのput操作を行う際にはLocalとRemoteのどちらかを選び、変数のkeyとデータを引数として渡す。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 LocalであればLocalのCGMが管理しているDGMに対してDataGearを格納していく。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 Remoteであれば、接続したRemote先のCGMが管理しているDGMにDataGearを格納する。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \begin{figure}[htb]
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \begin{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \includegraphics[width=150mm]{images/ChristieClass.pdf}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \end{center}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \caption{同一プロセスでのChristieの複数インスタンス立ち上げ}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 \label{fig:MultiInstance}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 \end{figure}
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 図\ref{fig:MultiInstance}は、Christieを同一プロセスで複数のインスタンスを生成した際のDGMやCGMの接続構造を示している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 全てのCGMはThreadPoolと他のCGMをListとして共有している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ThreadPoolとはCPUに合わせた並列度でqueueに入ったThreadを順次実行していく実行機構である。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ThreadPoolが増えると、CPUコア数に合わない量のThreadを管理することになり並列度が下がるため、1つのThreadPoolで全てのCGMを管理している。
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 またCGMのListを共有することでメタレベルで全てのCodeGear/DataGearにアクセス可能となっている。
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
60 CGを記述する際はCodeGear.classを継承する。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
61 CodeGearはRunnableインターフェースを持っており、runメソッド内に処理を記述することでマルチスレッドで処理が行われる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
62 CGに記述したkeyと一致するDGが全て揃った時、runに記述された処理が実行される。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
63 runメソッドの引数にCGMを指定しており、そのCGMを経由してChristieのAPIにアクセスする。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
64 GearsOSではCG間でContextを受け渡すことによってCGはDGにアクセスを行なっているため、Christieでもそのアクセス方法が採用されている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
65
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
66 通常のRunnableクラスでは引数を受け取ることができないが、
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
67 CodeGearExecutorというRunnableのMeta Computationを挟んだことでCGMを受け渡しながらの記述を可能にしている。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
68
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
69 DGMに対してput操作を行うことでDGM内のqueueにDGを保管できる。
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
70 DGを取り出す際には、CG内で宣言した変数データにannotationを付ける。
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
71
47
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
72 \section{Christieにおける継続}
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
73 プログラムにおける継続とは、計算の途中を前後に分割し、分割した後の部分をfirst class objectとして扱うものである。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
74 つまり、計算途中などのどのような状況でもそのobjectを取り出すことが可能であると言うことである。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
75 しかし継続を扱うためにはStackを含めた実行環境全体をheapにコピーする必要がある。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
76
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
77 継続の一種に軽量継続がある。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
78 軽量継続は、Stackや環境のコピーを持っていないが、全ての必要な情報を関数の引数として持っている。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
79 必要な情報とは、計算に必要なデータや関数を実行した後にJumpするべき関数である。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
80
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
81 Christieでは、CodeGearとDataGearでプログラムを行っているが、
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
82 内部ではannotationでkeyを待ち、DataGearManagerにkeyをつけてDataGearを渡している。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
83 keyでつながったCodeGearに計算は接続されている。実行されたCodeGearはdataをputし、次のCodeGearをSetupしてプログラムの処理が行われていく。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
84 これにより簡易的な継続が行われているといえる。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
85
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
86 また、keyでデータを渡すデータ構造にTreeMapを使用することがある。
53
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
87 TreeMapはStackのような働きをするが、TreeMap自体を分散環境で通信する場合に巨大なデータ構造を渡してしまうことになる。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
88 この方法では分散通信のパフォーマンスが低下してしまうと考えられるため、TreeMapのkeyを使用してPut/Takeすることで対応可能であると考える。
47
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
89 その際、2nd keyとして接続先のhostname:portを指定する。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
90 こうするとで、データはproxyとしてアクセスすることが可能となる。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
91 これよりChristieは、名前付き継続と呼ぶことが可能な継続の一つを使用していると言える。
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
92
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
93 \section{annotationを使用したデータの記述}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
94
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
95 ChristieではDGの指定にannotationを使用する。 annotationとはクラスやメソッド、パッケージに対して付加情報を記述できる
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
96 Java のMeta Computationである。先頭に@を付けることで記述でき、オリジナルのannotationを定義することもできる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
97 Christieのannotationには以下の4種類がある。
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
98
10
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
99 \begin{description}
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
100 \item[Take] 先頭のDGを読み込み、そのDGを削除する。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
101 \item[Peek] 先頭のDGを読み込むが、DGは削除されない。そのため、特に操作をしない場合には同じDGを参照し続ける。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
102 \item[TakeFrom(Remote DGM name)] Takeと処理動作は同じであるが、Remote DGM nameを指定することで、その接続先(Remote)のDGMからTake操作を行うことができる。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
103 \item[PeekFrom(Remote DGM name)] Peekと処理動作は同じであるが、 Remote DGM nameを指定することで、その接続先(Remote)のDGMからPeek操作を行うことができる。
39cc44ae7917 add image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
104 \end{description}
9
1e12b3e710d6 update chapter1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
105
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
107 DGの宣言には型と変数を直接宣言し、変数名としてkeyを記述する。 そして、その宣言の上にannotationでTakeまたはPeekを指定する(ソースコード\ref{src:TakeExample})。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
110 \lstinputlisting[label=src:TakeExample, caption=Takeの例]{src/java/TakeExample.java}
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
112 annotationで指定したDGはCGを生成した際にCodeGear.class内で待ち合わせの処理が行われる。
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
113 これにはJavaのreflectionAPIを利用しており、annotationと同時に変数名も取得できるため、面数名によるkeyの指定が可能になっている。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
115 Christieのannotationはフィールドに対してのみ記述可能であるため、keyの指定とTake/Peekの指定を必ず一箇所で書くことが明確に決まっている。
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
116 これより、Aliceの様に外のCGからkeyやデータへの干渉をされることがない。
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
117 さらにkeyを変数名にしたことで、動的なkeyの指定やkeyと変数名の不一致による可読性の低下を防ぐことが可能となった。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
11
a82543f1da47 add TakeFromExample src
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
119 リモートノードに対してTake/Peekをする際には、TakeFrom/PeekFrom annotationを用いる(ソースコード\ref{src:TakeFromExample})。
8
91276da3d77e fix file name
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
121 \lstinputlisting[label=src:TakeFromExample, caption=TakeFromの例]{src/java/TakeFromExample.java}
12
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
122
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
123
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
124 \section{データの型整合性}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
125 Aliceでは送受信するデータはReceive型という専用の型を使用していた。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
126 内部のデータ自体はobject型だったため、元データの型を知るためには送信元を確認する必要があった。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
127 ChristieではannotationでDGの宣言を行っているため、直接変数の型を宣言することが可能となっている。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
128 ソースコード\ref{src:InputDGExample}はDGのデータを扱う例である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
129
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
130 \lstinputlisting[label=src:InputDGExample, caption=DGのデータを扱う例]{src/java/InputDG.java}
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
131
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
132 DGとして宣言した変数の型は、JavaのreflectionAPIを用いてCGMで保存され、LocalやRemoteノードと通信する際に適切な変換が行われれる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
133 この様にプログラマが指定せずとも正しい型でデータを取得できるため、プログラマの負担を減らし信頼性を保証することができる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
134
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
135
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
136 \section{CodeGearの記述方法}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
137 以下のソースコード\ref{src:StartCGExample}、\ref{src:CGExample}、\ref{src:CounteObj}はLocalDGMにputしたDGを取り出して表示し、
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
138 インクリメントして10回繰り返す例題である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
139
30
2a9f335e45bd add source code and update Unity chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
140 \lstinputlisting[label=src:StartCGExample, caption=StartCodeGearの記述例]{src/java/StartCountUp.java}
2a9f335e45bd add source code and update Unity chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
141 \lstinputlisting[label=src:CGExample, caption=CodeGearの記述例]{src/java/CountUpper.java}
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
142 \lstinputlisting[label=src:CounteObj, caption=DGとして送信されるオブジェクトのクラス]{src/java/CountObject.java}
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
143
52
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
144 Christieでは、StartCodeGear(以下StartCG)から処理を開始する。
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
145 StartCGはStartCodeGear.javaを継承することで記述可能である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
146
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
147 StartCGを記述する際には、createCGMメソッドによりCGMを生成する必要がある(ソースコード\ref{src:StartCGExample} 5行目)。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
148 createCGMの引数にはremoteノードとソケット通信をする際に使用するポート番号を指定する。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
149 CGMを生成した際にLocalDGMやremoteと通信を行うためのDaemonも生成される。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
150
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
151
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
152 CGに対してannotationから待ち合わせを実行する処理はsetupメソッドが行う。
53
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
153 そのためソースコード\ref{src:StartCGExample}の10行目、ソースコード\ref{src:CGExample}の10行目のように、
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
154 CGのインスタンスをCGMのsetupメソッドに渡す必要がある。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
155 そのためどこでもCGの待ち合わせを行うことができず、必ずCGMの生成を行う必要がある。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
156 その制約により、複雑になりがちな分散プログラミングのコードの可読性を高めている。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
157 実行されたCGを再度実行する場合にも、CGのインスタンスを生成してsetupメソッドに渡す。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
158
36
a60e8d536a28 update continuation
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
159
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
160
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
161 \section{DataGearManagerの複数立ち上げ}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
162 AliceではLocalDGMと同じ機能のLocalDataSegmentManagaer(以下LocalDSM)がstaticで実装されていたため、複数のLocalDSMを立ち上げることができなかった。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
163 しかしChristieではCGMの生成に伴いLocalDGMも生成されるため、複数作成が可能である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
164 複数のLocalDGM同士のやり取りも、Remoteへの接続と同じ様に相手をRemoteDGMとしてproxyとして立ち上げることでアクセス可能である(図\ref{fig:LocalRemoteCommunication})。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
165
36
a60e8d536a28 update continuation
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
166 \begin{figure}[tb]
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
167 \begin{center}
16
d35c1ecaf666 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
168 \includegraphics[width=120mm]{images/LocalRemoteCommunication.pdf}
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
169 \end{center}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
170 \caption{RemoteDGMを介したCGM間の通信}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
171 \label{fig:LocalRemoteCommunication}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
172 \end{figure}
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
173
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
174
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
175 ソースコード\ref{src:2LocalDGM}はLocalDGMを2つ立ち上げ、お互いをremoteに見立てて通信する例である。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
176 6行目にあるように、RemoteDGMを立ち上げるにはCGMが持つcreateRemoteDGMメソッドを用いる。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
177 引数にはRemoteDGM名と接続するremoteノードhost名、ポート番号を指定している。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
178
36
a60e8d536a28 update continuation
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
179 \newpage
a60e8d536a28 update continuation
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 31
diff changeset
180
20
d550ccb7f803 update chapter 2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
181 \lstinputlisting[label=src:2LocalDGM, caption=LocalDGMを2つ作る例]{src/java/RemoteDGMCommunication.java}
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
182
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
183 remoteへの接続と同じ様にアクセスが可能になっており、コードを変更せずに同一マシン上の1つのアプリケーション内で分散アプリケーションのテストが可能となっている。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
184
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
185
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
186 また、CGMは内部に同一プロセス全てのCGMリストをstaticで持っており、複数生成したCGMを全て管理している。
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
187 つまり、メタレベルではRemoteDGMを介さずに各LocalDGMに相互アクセス可能である。
12
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
188
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
189 \newpage
12
6116a8fe4a53 update chapter 1
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
190
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
191 \section{通信フロー}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
192 本章で説明したChristieの設計をいくつか例を挙げてChristieの通信のフローをシーケンス図を用いて解説する。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
193 図\ref{fig:LocalTakeSequence}はLocalDGMにTakeを行い、LocalDGM内にDGがあったときの処理の流れである。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
194
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
195
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
196 \begin{figure}[htb]
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
197 \begin{center}
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
198 \includegraphics[width=160mm]{images/LocalSequence.pdf}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
199 \end{center}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
200 \caption{LocalDGMにTakeした際のフロー}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
201 \label{fig:LocalTakeSequence}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
202 \end{figure}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
203
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
204
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
205 プログラマはmainでCGMを生成する。CGMと同時にLocalDGMが作成される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
206 続いてStartCG内でCGのインスタンスを作成し、setupメソッドが呼ばれると、DGに付与されたannotationからTakeコマンドが作られ実行される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
207 CGは生成したコマンドの総数を初期値としたカウンタを持っており、コマンドが解決される(DGが揃う)度にカウンタは減少する。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
208 カウンタが0になると待ち合わせが完了したとなり、run内の処理がThreadPoolへ送られる。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
209
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
210
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
211 図\ref{fig:RemotePutSequence}は、LocalDGMにTakeを行うが、LocalDGM内にDGがなかったためにPutの待ち合わせを行うときの処理の流れである。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
212 mainなどの最初の処理は図\ref{fig:LocalTakeSequence}と同様のため省略する。
13
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
213
e40d7a603b3f update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
214
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
215 \begin{figure}[htb]
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
216 \begin{center}
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
217 \includegraphics[width=160mm]{images/RemotePutSequence.pdf}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
218 \end{center}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
219 \caption{RemoteDGMからPutされた際のフロー}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
220 \label{fig:RemotePutSequence}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
221 \end{figure}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
222
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
223
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
224 LocalまたはRemoteノードからPutコマンドが実行された際にwaitListを確認し、
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
225 PutされたDGを待っているコマンドが存在すれば、そのコマンドは実行される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
226
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
227
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
228 図\ref{fig:RemoteTakeSequence}はRemoteDGMにTakeを行った際の処理の流れである。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
229
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
230
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
231 \begin{figure}[htb]
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
232 \begin{center}
15
7ca69f9daa18 fix image
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
233 \includegraphics[width=160mm]{images/RemoteTakeSequence.pdf}
14
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
234 \end{center}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
235 \caption{RemoteDGMにTakeした際のフロー}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
236 \label{fig:RemoteTakeSequence}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
237 \end{figure}
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
238
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
239 プログラマはStartCGで事前にRemoteDGMを生成しておく。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
240 続いて、TakeFrom annotationからRemoteDGMに対するTakeコマンドが生成され実行される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
241 TakeFromの様にRemoteからの応答を待つコマンドはLocalDGMではなく、RemoteDGMのwaitListに格納される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
242 RemoteDGMに対するTakeコマンドはMessagePack形式に変換され、RemoteDGMが参照している別ノードのLocalDGMに送信される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
243
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
244 送信されたTakeコマンドを受け取ったLocalDGMは、要求されたDGがあればReplyコマンドを生成して送り返す。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
245 もしDGがなければ、Remoteから来たコマンドもLocalの場合と同様にLocalDGMのwaitListに格納される。
d76af2a472b9 update Christie chapter
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
246
53
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
247 Replyコマンドを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。
39
78fa97061c97 fix section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
248
78fa97061c97 fix section
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
249
41
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
250 \section{Topology Manager}
51
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
251 Topology Manager\cite{topology}とは、Christie上でのNetwork Topologyを自動的に形成する機能である。
41
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
252 Topologyを形成するために参加を表明したnode、TopologyNodeに名前を与え、必要があればnode同士の接続も自動で行う。
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
253 Topology ManagerのTopologyの形成方法として、静的Topologyと動的Topologyの2つがある。
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
254
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
255 静的Topologyはソースコード \ref{src:ringdot}のようなdot形式のファイルを与えることでnodeの関係を図\ref{fig:ringdot}のように構築できる。
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
256 静的Topologyはdotファイルのnode数と同等のTopologyNodeがあって初めて、CGが実行される。
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
257
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
258
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
259 \begin{figure}[htb]
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
260 \begin{center}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
261 \includegraphics[width=120mm]{images/ring.pdf}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
262 \end{center}
53
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
263 \caption{ソースコード \ref{src:ringdot}によるring状の接続}
41
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
264 \label{fig:ringdot}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
265 \end{figure}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
266
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
267 \newpage
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
268
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
269 \lstinputlisting[label=src:ringdot, caption=dot形式によるnode間接続の記述]{src/java/ring.dot}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
270
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
271
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
272 動的Topologyは図\ref{fig:dynamicTopology}のような手順で自動的に接続が行われる。
42
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 41
diff changeset
273 nodeが参加表明を行うと、Topologyを管理しているManagerからHost messageがnodeへ送信され、nodeは接続すべき親に接続を行う。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 41
diff changeset
274 親はHostから送信されるnode infoより子nodeとの接続を行う。
41
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
275
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
276 \begin{figure}[htb]
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
277 \begin{center}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
278 \includegraphics[width=140mm]{images/DynamicTopology.pdf}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
279 \end{center}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
280 \caption{動的Topologyの接続手順}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
281 \label{fig:dynamicTopology}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
282 \end{figure}
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
283
6c9a28e13a7d add dynamic topology
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
284
47
9c38517457d6 update conclusion
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
285 現在はTree型にのみ対応しているが、Star型への対応も可能である。