Mercurial > hg > Papers > 2020 > itsuki-thesis
view final_main/chapter2/chapter2.tex @ 4:c1732eac57f6
add some section
author | ichikitakahiro <e165713@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 07 Feb 2020 21:12:05 +0900 |
parents | 97d58fdc8185 |
children | 59f9d2488005 |
line wrap: on
line source
%\input{/Users/e155753/.tex/setup} %%文書開始**************************** \begin{document} %%************************************** \chapter{分散フレームワークChrisiteについて} ここでは本研究室で開発している分散フレームワークChrisiteについて解説する. Chrisiteは複雑な分散プログラムを簡潔に書くことのできる構成となっている. \section{Chrisiteとは} ChristieはJava言語で構成された本研究室独自の分散フレームワークである。同じく本研究室で開発を行っているGearsOSのファイルシステムに組み込む予定があるため, GearsOSを構成している本研究室の独自の言語Continuation based C (以下CbC言語)とにた, Gearというプログラム概念が存在する. \begin{itemize} \item CodeGear(以下 CG) \item DataGear(以下 DG) \item CodeGearManager(以下 CGM) \item DataGearManager(以下 DGM) \end{itemize} CodeGearはクラスやスレッドに相当しする. DataGear は変数データに相当し, javaのアノテーション機能を用いて記述する. CG内に記述したKeyに全てのDGが揃った際に初めてそのCGが動作するという仕組みになっている. CodeGearManager はいわゆるノードに相当し、CG, DG ,DGM を管理する. DataGearManager は DG を管理するもので, put という操作により DG , 要するに変数データを格納することができる。DGM の put 操作を行う際には Local と Remote と 2 つのどちらかを選び, 変数の key とデータを引数に書く. Local であれば, Local の CGM が管理している DGM に対し, DG を格納していく. Remote であれば接続した Remote 先の CGM の DGM に DG を格納できる. put 操作を行ったあとは, 対象の DGM の中に queue として保管される. DG を取り出す際には, CG 内で宣言した変数データにアノテーションをつける. DG のアノテーションには Take, Peek, TakeFrom, PeekFrom の 4 つがある. \begin{description} \item[Take] 先頭のDGを読み込み, そのDGを削除する. DGが複数ある場合, この動作を用いる. \item[Peek] 先頭のDGを読み込むが, DGが削除されない. そのため, 特に操作をしない場合は同じデータを参照し続ける. \item[TakeFrom(Remote DGM name)] Takeと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからTake操作を行える. \item[PeekFrom(Remote DGM name)] Peekと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからPeek操作を行える. \end{description} \section{プログラムの例} 以下のソースコード\ref{code:nStartHelloWorld} , \ref{code:HelloWorldCodeGear}のプログラムはChrisitieの基本動作となる DGM による put 操作を用いた hello world の出力プログラムである. メソッド setCGM でポート番号を指定した上で CGM を作成しする. HelloWorldCodeGear() クラスには String型の"helloWorld" という key が用意され, "helloWorld"に入力された DG をprint するコードである. "helloWorld" に hello と worldというDGをputすることで出力結果がhello world となる. CGM が起動していると処理が終了しないため, FinishHelloWorld には DG が揃い次第 cgm.getLocalDGM().finish(); というメソッドを実行させcgmを終了させる処理が書かれている。 \lstinputlisting[caption=StartHelloWorld,label=code:nStartHelloWorld]{./src/HelloWorld/StartHelloWorld.java} \lstinputlisting[caption=HelloWorldCodeGear,label=code:HelloWorldCodeGear]{./src/HelloWorld/HelloWorldCodeGear.java} \section{TopologyManager について} ここではChrstie上でノード同士の接続をより簡潔にするために使われるTopologyManagerという機能について説明する. TopologyManagerとはTopologyを形成するために, 参加を表明したノード, TopologyNodeにlabel を与え, 必要があればノード同士の配線も自動で行う機能である. TopologyManagerのTopologyの形成方法として静的Topologyと動的Topologyの二つの方法がある. 静的Topologyはソースコード: \ref{code:dotFile} のようなdotファイルを与えることでノードの接続を図 \ref{fig:dot} のように接続することができる. 例えばnode0 からはnode1 はright という名前で参照することができ, それぞれのノードが同じCG を実行してもlabel の与え方で想定したDG の差し合いを行うことができる.静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて, CodeGear が実行され, ノード数が合わないとエラーが表示される. \lstinputlisting[caption=ringを構成するdotファイル, label=code:dotFile]{./src/ring.dot} \begin{figure}[H] \centering \fbox{ \includegraphics[scale=1]{./images/ring.pdf} } \caption{ソースコード \ref{code:dotFile} のdotファイルを図示化したもの} \label{fig:dot} \end{figure} 動的Topologyは動的 Topology は参加を表明したノードに対し, 動的にノード同士の関係を作る. 例えば Tree を構成する場合, 参加を表明したノードから順に, root に近い位置の役割を与える. また, CodeGear はノードが参加し, parent に接続したあとに実行される. %%文書終了**************************** \end{document}