annotate paper/chapter3.tex @ 5:4a7fa91ef60a

not fix English Abstract
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Wed, 06 May 2015 05:23:37 +0900
parents e13be99f69b6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e13be99f69b6 can't view graphix correct place
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1 \section{Aliceの新機能}
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
2 実用的なアプリケーションであるTreeVNCをAlice上で実装することで、Aliceに必要な機能を洗い出した。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
3 \subsection{flip機能}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
4 Data Segment APIのput、updateを呼ぶとOutput Data Segmentが毎回新しく作成される。そして出力するデータのコピーが行われる。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
5 しかし、AliceVNCのようにInput Data Segmentとして取得したデータをそのまま子ノードにOutput Data Segmentとして出力する場合、コピーを行なうのは無駄である。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
6  
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
7 そこで、このコピーを無くしData Segmentの更新におけるオーバーヘッドを減らす方法としてflip機能の実装を行った。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
8 ソースコード\ref{src:exampleFlip}のようにInput Data SegmentであるReceiverをflipメソッドに引数として渡すことで、無駄なコピーを減らす。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
9 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
10 \lstinputlisting[label=src:flipAlice, caption=Aliceにおけるflip]{source/flip.java}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
11 \end{table}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
13 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
14 \lstinputlisting[label=src:exampleFlip,caption=flipの使用例]{source/Sort.java}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 \end{table}
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
17 \subsection{Data Segmentの表現の追加(圧縮機能)}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
18 TreeVNCでは画面配信の際、データを圧縮してノード間通信を行っている。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
19 そのため、AliceVNCにも圧縮されたデータ形式を扱える機能が必要だと考えた。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
20 しかし、ただデータを圧縮する機構を追加すればいいわけではない。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
22 AliceVNCでは、ノードは受け取った画面データを描画すると同時に、子ノードのRemote DS Managerに送信する。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
23 ノードはDSを受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
24 しかし、受け取ったデータを自分の子ノードに対して送信する際には、解凍する必要はない。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
25 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
27 そこで、1つのData Segmentに対し複数の表現を持たせることで、必要に応じた形式でDSを扱うことを可能にした。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
28 DSを扱うReceiveData.classに、次の3種類の表現を同時に持つことができる。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \begin{enumerate}
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
31 \item 一般的なJavaのクラスオブジェクト
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
32 \item MessagePack for Javaでシリアライズ化されたバイナリオブジェクト
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
33 \item 2を圧縮したバイナリオブジェクト
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \end{enumerate}
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
36 ソースコード\ref {src:ReceiveData}はReceiveData.classが持つ表現であり、{\tt val}に1. 一般的なJavaのクラスオブジェクト の表現でデータ本体が保存される。{\tt messagePack}には2. シリアライズ化されたバイナリオブジェクトが保存され、通常のRemoteDSMへの通信にこの表現が扱われる。そして、{\tt zMessagePack}には3. 圧縮されたバイナリオブジェクトが保存される。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
37 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
38 \lstinputlisting[label=src:ReceiveData, caption=データを表現するクラス]{source/ReceiveData.java}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
39 \end{table}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
41 また、圧縮状態を持つDSを扱うDSMとしてLocalとRemoteそれぞれにCompressed Data Segment Managerの追加した。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
42 put/updateでは、ソースコード\ref{src:zput}のように指定するDSM名の先頭に"compressed"をつけることでDSは自動で圧縮状態も持つようになる。さらに、take/peekもソースコード\ref{src:ztake}のようにsetKeyを実行する際にDSM名の先頭に"compressed"をつけることで圧縮形式でDSを受け取ることができる。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
43 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
44 \lstinputlisting[label=src:zput, caption=圧縮DSのput]{source/compress_put.java}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
45 \end{table}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
47 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
48 \lstinputlisting[label=src:ztake,caption=圧縮DSのtake]{source/compress_take.java}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \end{table}
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
51 これによりユーザは指定するDSMを変えるだけで、他の計算部分を変えずに圧縮表現を持つDSを扱うことができる。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 ノードは圧縮されたDSを受け取った後、そのまま子ノードにflipすれば圧縮状態のまま送信されるので、送信の際の再圧縮がなくなる。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
54 また、画面表示の際は{\tt asClass()}(ソースコード\ref {src:asClass})を使うことで適切な形式でデータを取得できる。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 {\tt asClass()}はDSを目的の型にcastするメソッドであり、圧縮されていれば解凍してcastを行っている。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56 これにより必要なDSを必要な時にだけ解凍できる。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
58 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
59 \lstinputlisting[label=src:asClass, caption=asClassの処理]{source/asClass.java}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
60 \end{table}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
62 \subsection{パケットの再設計}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
63 2.4で述べたように、Remoteからputされたデータは必ずシリアライズ化されておりbyteArrayで表現される。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
64 しかし、putされたbyteArrayが全てシリアライズ化された状態であるとはいえない。Localからも一般的なJavaのクラスオブジェクトとしてbyteArrayが使用されている場合が存在する。例えば、AliceVNCで使われる画像データはbyteArrayで表現されているが、これはLocalからputされている。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
65 また、データの表現に圧縮形式を追加したことで、RemoteからでもputされたbyteArrayが圧縮されているのかそうでないのかが判断できなくなった。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
67 ここからわかることは、データを表現するにはデータ単体をやりとりするだけでは不十分ということである。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
68 そこで、データとデータの状態を表すヘッダをまとめて1つのオブジェクトとして扱うように変更した。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
69 Aliceの通信におけるヘッダにあたるCommandMessage.class(ソースコード\ref {src:CommandMessage}にシリアライズ状態表すフラグと、圧縮状態を表すフラグを追加した。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
70 これによってputされたDSMはフラグに応じた適切な形式でReceiveData.class内にDSを格納できる。
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
71 また、CommandMessage.classに圧縮前のデータサイズも追加したことで、適切な解凍が可能になった。
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
73 \begin{table}[html]
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
74 \lstinputlisting[label=src:CommandMessage, caption=変更後のCommandMessage]{source/CommandMessage.java}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 \end{table}
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 \begin{table}[htbp]
5
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
78 \caption{CommandMessageの変数名の説明}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
79 \label{tb:variable}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
80 \begin{center}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
81 \begin{tabular} {|l|l|}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
82 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
83 変数名&説明\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
84 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
85 type&CommandType {\tt PEEK, PUT}などを表す\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
86 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
87 seq&Data Segmentの待ち合わせを行っている\\Code Segmentを表すunique number\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
88 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
89 key&どのKeyに対して操作を行うか指定する\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
90 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
91
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
92 quickFlag&SEDAを挟まずCommandを処理を行うかを示す\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
93 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
94 serialized&データ本体のシリアライズ状態を示す\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
95 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
96
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
97 compressed&データ本体のシリアライズ状態を示す\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
98 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
99
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
100 dataSize&圧縮前のデータサイズを表す\\
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
101 \hline
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
102
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
103 \end{tabular}
4a7fa91ef60a not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
104 \end{center}
0
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 \end{table}
0127effb8fcd first commit
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
1
e13be99f69b6 can't view graphix correct place
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
107