annotate final_main/chapter4/chapter4.tex @ 11:b8149a449b7d

forget .DS_Store & add thankc & others
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Fri, 14 Feb 2020 20:11:28 +0900
parents 5ddb3e41e515
children c7ab31269230
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 %\input{/Users/e155753/.tex/setup}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 %%文書開始****************************
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \begin{document}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 %%**************************************
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
6 \chapter{分散フレームワークChrisiteについて}
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
7 ここでは本研究室で開発している分散フレームワークChrisiteについて解説する.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
8 Chrisiteは複雑な分散プログラムを簡潔に書くことのできる構成となっている.
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
10
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
11 \section{Chrisiteとは}
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
12 ChristieはJava言語で構成された本研究室独自の分散フレームワークである.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
13 同じく本研究室で開発を行っているGearsOSのファイルシステムに組み込む予定があるため, GearsOSを構成している本研究室の独自の言語Continuation based C (以下CbC言語)とにた, Gearというプログラム概念が存在する.
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
14
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 \begin{itemize}
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
16 \item CodeGear(以下 CG)
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
17 \item DataGear(以下 DG)
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
18 \item CodeGearManager(以下 CGM)
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
19 \item DataGearManager(以下 DGM)
8
f71206f427e3 add text and some file
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
20 \end{itemize}
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
21
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
22 CodeGearはクラスやスレッドに相当する. DataGear は変数データに相当し, javaのアノテーション機能を用いて記述する.
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
23 CG内に記述したKeyに全てのDGが揃った際に初めてそのCGが動作するという仕組みになっている. CodeGearManager はいわゆるノードに相当し, CG, DG ,DGM を管理する.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
24 DataGearManager は DG を管理するもので, put という操作により DG , つまり変数データを格納することができる.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
25
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
26 DGM の put 操作を行う際には Local と Remote と 2 つのどちらかを選び, 変数の key とデータを引数に書く.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
27 Local であれば, Local の CGM が管理している DGM に対し, DG を格納していく.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
28 Remote であれば接続した Remote 先の CGM の DGM に DG を格納できる. put 操作を行ったあとは, 対象の DGM の中に queue として保管される.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
29
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
30 DG を取り出す際には, CG 内で宣言した変数データにアノテーションをつける必要がある. javaのアノテーションとは注釈, 注記を意味し, java.lang.Annotationインターフェースを継承して独自のアノテーションを作成できる. DG のアノテーションには Take, Peek, TakeFrom, PeekFrom の 4 つがある.
7
59f9d2488005 add final main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
31
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
32 \begin{description}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
33 \item[Take] 先頭のDGを読み込み, そのDGを削除する. DGが複数ある場合, この動作を用いる.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
34 \item[Peek] 先頭のDGを読み込むが, DGが削除されない. そのため, 特に操作をしない場合は同じデータを参照し続ける.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
35 \item[TakeFrom(Remote DGM name)] Takeと同様に読み込んだ後, DGを削除する. Remote DGM nameを指定することで, その接続先(Remote)のDGMからTake操作を行える.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
36 \item[PeekFrom(Remote DGM name)] Peekと同様に読み込み後もDGが削除されないが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからPeek操作を行える.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
37 \end{description}
7
59f9d2488005 add final main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
38
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
39 \section{プログラムの例}
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
40 以下のソースコード\ref{code:nStartHelloWorld} , \ref{code:HelloWorldCodeGear}のプログラムはChrisitieの基本動作となる DGM による put 操作を用いた hello world の出力プログラムである.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
41
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
42 メソッド sreateCGM でポート番号を指定した上で CGM を作成しする.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
43 CGM にCG (クラスファイル)を指定した上でsetupすることでCGMが CGを動作させることができる. HelloWorldCodeGear()とFinishHelloWorld()がここではCGに当たる.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
44 HelloWorldCodeGear() クラスには String型の"helloWorld" という key が用意され, "helloWorld"に入力された DG(String型の変数データ) をprint するコードである.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
45 当然key:helloWorldにはString型しか当てはめられない.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
46
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
47 "helloWorld" に hello と worldというDGをputすることで出力結果がhello world となる. またhelloWorldのkeyはアノテーションがTakeである.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
48 従って, 一度目にhelloをputし, hello をprintした後, helloWorldのkeyの中身はなくなるため, 二度目のCG:HelloWorldCodeGearをsetupした際はworldを問題なくkeyにputできる.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
49
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
50 もしhelloWorldのkeyがPeekアノテーションがついていた場合, 一度目のputにて入力されたhelloがkey:helloWorldに残り続けるため, CG:HelloWorldCodeGearをsetupするたびにCGが動作し, 以下のコード\ref{code:HelloWorldCodeGear}ではhelloをprintし続ける無限ループが起こってしまう.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
51
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
52 \newpage
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
53
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
54 \lstinputlisting[caption=StartHelloWorld,label=code:nStartHelloWorld]{./src/HelloWorld/StartHelloWorld.java}
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
56 \lstinputlisting[caption=HelloWorldCodeGear,label=code:HelloWorldCodeGear]{./src/HelloWorld/HelloWorldCodeGear.java}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
57
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
58 \newpage
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
59
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
60 CGM は起動し続けていると処理が自動的に終了しないという問題点がある.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
61 そこで役目がなくなったCGM を終了させるための処理を行わなければならない.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
62
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
63 CGMを終了させるためのプログラムはソースコード\ref{code:FinishHelloWorld} であり, 二つのkeyが揃ったらcgm.getLocalDGM().finish() の処理でcgmを終了させるよう記述されている.
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
64
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
65 \lstinputlisting[caption=FinishHelloWorld, label=code:FinishHelloWorld]{./src/FinishHelloWorld.java}
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
71 \section{TopologyManager について}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
72 ここではChrstie上でノード同士の接続をより簡潔にするために使われるTopologyManagerという機能について説明する.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
73
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
74 TopologyManagerとはTopologyを形成するために, 参加を表明したノード, TopologyNodeにlabel を与え, 必要があればノード同士の配線も自動で行う機能である.
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
75 TopologyManagerのTopologyの形成方法として静的Topologyと動的Topologyの二つの方法がある.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
76 静的Topologyはソースコード: \ref{code:dotFile} のようなdotファイルを与えることでノードの接続を図 \ref{fig:dot} のように接続することができる. 例えばnode0 からはnode1 はright という名前で参照することができ, それぞれのノードが同じCG を実行してもlabel の与え方次第で想定したDG の差し合いを実現することができる.
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
77
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
78 静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて, CodeGear が実行され, ノード数が合わないとエラーが表示される.
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
79
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
80 \newpage
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
81
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
82 \lstinputlisting[caption=ringを構成するdotファイル, label=code:dotFile]{./src/ring.dot}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
83
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
84 \begin{figure}[H]
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
85 \centering
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
86 \fbox{
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
87 \includegraphics[scale=1]{./images/ring.pdf}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
88 }
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
89 \caption{ソースコード \ref{code:dotFile} のdotファイルを図示化したもの}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
90 \label{fig:dot}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
91 \end{figure}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
92
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
93 動的Topologyは参加を表明したノードを順番にTopologyの構成要素として接続していく物である.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
94 現在時点で実装済みのTreeの構成を例とすると
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
95
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
96 \begin{enumerate}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
97 \item 参加したノードを順にroot(根)に近い要素として接続する.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
98 \item Topologyの要素に構成されたノードはそれぞれ親, 子のノードを特定の名前(parent, child[n])で参照できる.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
99 \item 途中参加したノードは, 木の末端要素として接続する.
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
100 \end{enumerate}
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
101 以上の形でTopologyが形成される.
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
102
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
103 \newpage
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
104
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
105 コード:\ref{code:SRTE} はTopologyManagerを使用してTopologyを構成するコードである.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
106 String型のリスト(今回はmanagerArg)に構成したいTopologyの形状をdotファイル, もしくは実装済みの動的Topologyの構成型を設定し, TopologyManagerCondfigを起動することでTopologyManagerが起動できる.
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
107
10
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
108 ソースコードではTreeを構成しており, for文でnodeNum 個分のノードを生成し, それぞれmanagerPortを記憶させている.
5ddb3e41e515 remove .DS_Store
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
109 これによりノードすべてがTopologyManagerによりTreeの構成要素として接続される.
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
110
11
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
111 現状では通信アルゴリズムの構成のため, dotファイルにより接続を行なっているが, 最終的にはStar型の動的Topology機能を作成し, 途中で参加してきたノードを接続が行えるようにする必要がある.
b8149a449b7d forget .DS_Store & add thankc & others
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
112
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
113 \lstinputlisting[caption=TopologyManagerによるTree型Topologyを構成するコード, label=code:SRTE]{./src/StartPrefixTree.java}
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
114
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
9
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
118 %%文書終了****************************
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
119 \end{document}