# HG changeset patch # User Nozomi Teruya # Date 1432602388 -32400 # Node ID 1f1b1f962ff10ce9607c87bc5b4f3142c4de087f # Parent bc4cd60531220e066e9706bdce401d89f9fbcb8a add source diff -r bc4cd6053122 -r 1f1b1f962ff1 presen/sigOS/sample.html --- a/presen/sigOS/sample.html Mon May 25 23:11:52 2015 +0900 +++ b/presen/sigOS/sample.html Tue May 26 10:06:28 2015 +0900 @@ -209,7 +209,7 @@ @@ -218,23 +218,106 @@ +

Code Segment の 例

-RemoteDSMからデータをtakeし、インクリメントしてLocalDSMにputを10回繰り返す +2つのノード間で、RemoteDSMからデータをtakeしインクリメントしてLocalDSMにputを10回繰り返す +opt +
+ +
+
+
+

Code Segment の 例

+
+2つのノード間で、RemoteDSMからデータをtakeしインクリメントしてLocalDSMにputを10回繰り返す +opt +
+ + +
+
+
+

Code Segment の 例

+
+Start CS で 最初の DS をputする

-public class RemoteIncrement extends CodeSegment {
-    public Receiver num = ids.create(CommandType.TAKE);
+public class StartCodeSegment extends CodeSegment {
+    @Override
+    public void run() {
+		ods.put("local", "num", 0);
+
+		Increment nextCS = new Increment();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ + +
+
+
+

Code Segment の 例

+
+次に実行するインクリメントのCSを作成する +

+public class StartCodeSegment extends CodeSegment {
     @Override
     public void run() {
-        int num = this.num.asClass(Integer.class);
-		System.out.println(num++);
-        if (num == 10) System.exit(0);
-        RemoteIncrement cs = new RemoteIncrement();
-        cs.num.setKey("remote", "num");
-        ods.put("local", "num", num);
+		ods.put("local", "num", 0);
+
+		Increment nextCS = new Increment();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ + +
+
+
+

Code Segment の 例

+
+作成したnextCSに対してsetKey()でDSM名とkeyを指定し、内部でtakeを行う。 +

+public class StartCodeSegment extends CodeSegment {
+    @Override
+    public void run() {
+		ods.put("local", "num", 0);
+
+		Increment nextCS = new Increment();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ + +
+
+
+

Code Segment の 例

+
+takeでCSにInput DSを対応づけ、DSを格納するReceiverを用意がされる。 +

+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
+    @Override
+    public void run() {
+        int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
     }
 }
 
@@ -242,52 +325,149 @@
-
+
+
+
+

Code Segment の 例

+
+受け取ったDSをasClass()でInt型として取り出す +

+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
+    @Override
+    public void run() {
+		int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ + +

Code Segment の 例

-Input DSの用意。DSを格納する受け皿(Receiver)が作られる。 +インクリメントする

-public class RemoteIncrement extends CodeSegment {
-    public Receiver num = ids.create(CommandType.TAKE);
+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
     @Override
     public void run() {
-        int num = this.num.asClass(Integer.class);
-		System.out.println(num++);
-        if (num == 10) System.exit(0);
-        RemoteIncrement cs = new RemoteIncrement();
-        cs.num.setKey("remote", "num");
-        ods.put("local", "num", num);
+		int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ + + +
+
+
+

Code Segment の 例

+
+numが10であれば終了する +

+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
+    @Override
+    public void run() {
+		int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
     }
 }
 
-
+

Code Segment の 例

+インクリメントした結果をLocal DSMにputする

-public class RemoteIncrement extends CodeSegment {
-    public Receiver num = ids.create(CommandType.TAKE);
+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
     @Override
     public void run() {
-		int num = this.num.asClass(Integer.class);
-		System.out.println(num++);
-        if (num == 10) System.exit(0);
-        RemoteIncrement cs = new RemoteIncrement();
-		cs.num.setKey("remote", "num");
-        ods.put("local", "num", num);
+		int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
     }
 }
 
-
+ +
+
+
+

Code Segment の 例

+
+次に実行するインクリメントCSを作成する +

+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
+    @Override
+    public void run() {
+		int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ +
+
+
+

Code Segment の 例

+
+作成したnextCSにkeyを指定してtakeを行わせる。以下繰り返し。 +

+public class Increment extends CodeSegment {
+	public Receiver receiver = ids.create(CommandType.TAKE);
+    @Override
+    public void run() {
+		int num = this.r.asClass(Integer.class);
+		num++;
+		if (num == 10) System.exit(0);
+		ods.put("local", "num", num);
+		Increment nextCS = new RemoteIncrement();
+		nextCS.receiver.setKey("remote", "num");
+    }
+}
+
+
+
+ +

TreeVNC

@@ -305,7 +485,7 @@
-
+

Computation

@@ -323,7 +503,7 @@
-
+

Meta Computation

@@ -341,7 +521,7 @@
-
+

TreeVNCで用いるAliceのMeta Computation

@@ -360,7 +540,7 @@
-
+

データの転送 - DSMとAPIの追加

@@ -379,7 +559,7 @@
-
+

データの転送 - データ表現の自動生成

@@ -397,7 +577,7 @@
-
+

データの受け取り - 任意の形式での取得

@@ -415,7 +595,7 @@
-
+

データの受け取り - Aliceの通信パケット変更

@@ -448,7 +628,7 @@
-
+

Aliceと他言語等との比較(1) - Erlang

@@ -456,8 +636,9 @@
    -
  • タスクをプロセスというスレッドで分割する
  • -
  • ネットワークに依存しない通信が可能
  • +
  • タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割
  • +
  • 共有メモリにアクセスするためのメモリロックの仕組みを必要としない
  • +
  • ネットワークに依存しない通信が可能

  • Topologyの構成等は自分で管理

  • @@ -468,10 +649,10 @@
-
+
-

Aliceと他言語等との比較(1) - Linda

+

Aliceと他言語等との比較(2) - Linda

@@ -489,16 +670,16 @@
-
+
-

Aliceと他言語等との比較(1) - Corba

+

Aliceと他言語等との比較(3) - Corba

  • -

    オブジェクト間のRPC

    +

    オブジェクト間のRPC仕様

  • DSがない。keyという概念がない。
  • 同期呼び出し・非同期呼び出しが選択できるが、データの待ち合わせがない
  • @@ -509,15 +690,15 @@
-
+
-

Aliceと他言語等との比較(1) - HTTP

+

Aliceと他言語等との比較(4) - HTTP

    -
  • get/putで通信を行う。get/putをRPC的に扱わず、getで取得しputで保存するRESTfulアーキテクチャ
  • +
  • get/putで通信を行う。get/putをRPC的に扱わず、getで取得しputで保存するRESTfulアーキテクチャ。
  • URLがデータベースのkeyとなる

  • @@ -531,7 +712,7 @@
-
+

TreeVNCとAliceを用いたTreeVNCの比較

@@ -557,7 +738,7 @@
-
+

TreeVNCとAliceを用いたTreeVNCの比較

@@ -590,7 +771,7 @@
-
+

まとめ