# HG changeset patch # User ichikitakahiro # Date 1619883578 -32400 # Node ID 8c1e0271eb246c120f0d5c51148296aa19b30969 # Parent 2b7f737a2cedf539175cf7a9ab3b4df3df565ec0 add TopologyManager & Coding diff -r 2b7f737a2ced -r 8c1e0271eb24 Paper/paper.pdf Binary file Paper/paper.pdf has changed diff -r 2b7f737a2ced -r 8c1e0271eb24 Paper/paper.tex --- a/Paper/paper.tex Sat May 01 03:44:55 2021 +0900 +++ b/Paper/paper.tex Sun May 02 00:39:38 2021 +0900 @@ -113,7 +113,7 @@ CbCでは関数の代わりにCodeGearという単位でプログラミングを行う. CodeGearは\texttt{\_\_code}で宣言を行い, 各CodeGearはDataGearと呼ばれる変数データを入力として受け取り, その結果を別のDataGearに書き込む. 特に入力のDataGeatをInputDataGear, 出力されるDataGearを OutputDataGearと呼ぶ. CodeGearとDataGearの関係図を図\ref{fig:cgdg}に示す. CodeGearは関数呼び出しのスタックを持たないため, 一度CodeGearを遷移すると元の処理に戻ってくることができない. -CbCコードの例をソースコード\ref{label=src:cbc_example}に示す.%refを使う +CbCコードの例をソースコード\ref{src:cbc_example}に示す.%refを使う \begin{figure}[tb] \begin{center} @@ -187,6 +187,7 @@ \item \|CodeGearManager|(以下CGM) \item \|DataGearManager|(以下DGM) \end{itemize} + CodeGearはクラスやスレッドに相当する. DataGearは変数データであり, CodeGear内でjavaのアノテーションを用いて記述する. DataGearはKeyと必ず対応しており, CodeGear内の全てのKeyにDataGearが揃った際に初めてCodeGearが動作するという仕組みになっている. @@ -215,7 +216,20 @@ \item[PeekFrom(Remote DGM name)] Peekと似ているが,Remote DGM nameを指定することで,その接続先(Remote)のDGMからPeek操作を行える. \end{description} -コード\ref{codes: StartHelloWorld}はChristieで記述したHello Worldのコードである. + + +コード\ref{codes: StartHelloWorld}, \ref{codes: StartHelloCG}はChristieで記述したHello Worldのプログラムである. +ユーザープログラムはStartCodeGearクラスを継承したクラス(コード\ref{codes: StartHelloWorld})から開始する. +CodeGearManagerはポート番号を指定した上でcreatCGMメソッドを呼び出すことにより生成される. 生成されたCodeGearManagerは CGM名.setup にてCGMに処理させたいスレッド, つまりCodeGearを持たせることができる. + +コード \ref{codes: StartHelloCG}はHeloWorldCodeGearの記述である. +HelloWorldCodeGearではkey: helloWorldにputされた文字列をprint出力するという単純な処理を記述している. + CGM名.getLocalDGM().put("Keyname", 変数データ)にてkeyに変数データを紐付け(putし), CodeGearに設定されている全てのkeyがデータを受け取った際に初めてCodeGearは処理される. HelloWorldCodeGearではString型のhelloWorldというkeyがTake型で設定されている. + +以下のHelloWorldプログラムを実行した際の流れを説明する. + まずポート10000番のCodeGearManagerを生成し, HelloWorldCodeGearをsetupさせる. + この時点では必要なkey(key名: helloWorld)にデータが揃っていないのでCodeGearは実行されない. cgm.getLocalDGM().put("helloWorld","hello");にてhelloWorldkeyに文字列"hello"をputすると, HelloWorldCodeGearに必要なDataGearが揃い, print表示が行われる. +プログラム中ではkey:helloWorldへのputは文字列"hello"と"world"の二回が行われ, print出力結果はhello worldと表示される. \begin{lstlisting}[frame=lrbt,label=codes: StartHelloWorld,caption={ChristieにおけるCGMとCGのsetup}] public class StartHelloWorld extends StartCodeGear { @@ -227,7 +241,6 @@ public static void main(String[] args){ CodeGearManager cgm = createCGM(10000); cgm.setup(new HelloWorldCodeGear()); - cgm.setup(new FinishHelloWorld()); cgm.getLocalDGM().put("helloWorld","hello"); cgm.getLocalDGM().put("helloWorld","world"); } @@ -237,7 +250,6 @@ \begin{lstlisting}[frame=lrbt,label=codes: StartHelloCG,caption={HelloWorldCodeGear}] public class HelloWorldCodeGear extends CodeGear { - @Take String helloWorld; @@ -245,11 +257,19 @@ protected void run(CodeGearManager cgm) { System.out.print(helloWorld + " "); cgm.setup(new HelloWorldCodeGear()); - cgm.getLocalDGM().put(helloWorld,helloWorld); } } \end{lstlisting} +ChristieにはTopologyを形成するための機能TopologyManagerが備わっている. +Topologyに参加するノードに対して名前を与え, 必要とあればノード間の配線を行う. + +TopologyManagerのTopology形成方法として静的Topologyと動的Topologyがある. +静的Topologyはプログラマが任意の形のTopologyとノードの配線をdotファイルに記述し, TopologyManagerに参照させることで自由な形のTopologyが形成できる. +現時点では静的TopologyでのTopology形成はdotファイルに記述した参加ノード数に実際に参加するノードの数が達していない場合, 動作しないという制約が存在している. +動的Topologyは参加を表明したノードに対し, 自動的にノード同士の配線を行う. 例えばTreeを構成する場合, 参加したノードから順番にrootから近い役割を与える. + + %4 \section{論文の構成} \label{config} diff -r 2b7f737a2ced -r 8c1e0271eb24 sigos.mm --- a/sigos.mm Sat May 01 03:44:55 2021 +0900 +++ b/sigos.mm Sun May 02 00:39:38 2021 +0900 @@ -13,6 +13,9 @@ + + +