changeset 28:39c7868b6f3d

update chapter 1, 2, 8
author oc
date Wed, 18 Feb 2015 05:02:45 +0900
parents 9407830601aa
children ad8beccc487b
files paper/chapter1.tex paper/chapter2.tex paper/chapter8.tex paper/thesis-paper.pdf
diffstat 4 files changed, 88 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter1.tex	Tue Feb 17 17:09:37 2015 +0900
+++ b/paper/chapter1.tex	Wed Feb 18 05:02:45 2015 +0900
@@ -1,8 +1,30 @@
-\chapter{序論}
+\chapter{PCを用いたコミュニケーションの充実}
 \pagenumbering{arabic}
 
-\section{研究背景と目的}
+ゼミや授業等で、それぞれがPC端末を持っている場合では、
+PCの機能を活かしたコミュニケーションが可能である。
+教員が操作する画面をそのまま学生に配信したり、
+ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
+
+TreeVNC画面配信システムは、
+参加したクライアントをバイナリツリー状に接続し、
+配信コストをクライアントにバランスさせる仕組みになっている。
+なので、多人数が参加しても処理性能が下がらない。
+また、RFBプロトコルを用いているので、ケーブルの差し替えなしに
+共有している画面の切り替えが可能になっている。
 
+今研究では、TreeVNCのリファクタリングをすると共に、
+port番号の割り当てや、プロトコルの見直しを行った。
+これにより、
+マルチディスプレイへの対応や、
+TreeVNCを遠隔地から利用することを可能にした。
+また、マルチスクリーンを使用する際のスクリーンの選択や
+サイズの自動変更の問題を解決した。
+また、複数のネットワークインターフェスに対応し、
+ルータ越えを可能にすることができた。
+
+%\section{研究背景と目的}
+%
 %多人数で意見を交わし合い、モチベーションを高めたいといった場面がある。
 %多人数でコミュニケーションを取るためには、目的を共有し、意見・アイデア・質問を交わし合う必要がある。
 %話し合いの場として、授業やゼミ、会議等がある。
--- a/paper/chapter2.tex	Tue Feb 17 17:09:37 2015 +0900
+++ b/paper/chapter2.tex	Wed Feb 18 05:02:45 2015 +0900
@@ -52,10 +52,10 @@
 Broadcast とは、
 同一ネットワーク上の全ての端末に対してデータを送信することである。
 どちらの通信方法も、root からのデータ送信は1回でよく、
-1度送信するとデータの複製はルータが行う。
+1度データの送信を行うとデータの複製はルータが行う。
 
 VNC を Multicast や Broadcast の通信方法を用いて実装すると、
-画像データの送信が1度で済み、負荷分散のために木構造を形成する必要もなくなる。
+画像データの送信が1度で済むため、負荷分散のために木構造を形成する必要もなくなる。
 
 しかし、これらの通信方法でのパケットの扱いには
 \begin{itemize}
@@ -74,14 +74,14 @@
 しかし、現在の TreeVNC で用いている方法では、
 データ分割の処理には時間がかかってしまう。
 
-パケットの消失を検知するためには、
+パケットの消失を検知するために、
 各パケットに対してシリアル番号を振り分ける。
 パケットを受信した node 側で、
-シリアル番号が連番で届いているのかどうかを調べれば検知することが可能である。
-もし届いていなかった場合は、root に対して再送要求を送信すれば良い。
+シリアル番号が連番で届いているのかどうかを調べれば、消失を検知することが可能である。
+もしパケットが届いていなかった場合は、root に対して再送要求を送信すれば良い。
 しかし、Multicast や Broadcast 通信ではパケットロス率が高かった。
 
-これらの通信方法を用いての VNC の実装にはもう少し工夫が必要である。
+これらの通信方法を用いての VNC の実装にはもう更なる工夫が必要である。
 
 
 
@@ -94,28 +94,28 @@
   \scriptsize
   \begin{tabular}{|l|l|l|} \hline
     通信経路            & message                    & 説明 \\ \hline \hline
-                        & FIND\_ROOT                 & 子node接続時にrootを探す。 \\ \cline{2-3}
-    send direct message & WHERE\_TO\_CONNECT         & どのnodeに接続すれば良いかを聞く。 \\ \cline{2-3}
-    (child to root)     & LOST\_PARENT               & 親nodeの接続が切れた時にrootに知らせる。 \\ \hline
+                        & FIND\_ROOT                 & TreeVNC接続時にrootを探す。 \\ \cline{2-3}
+    send direct message & WHERE\_TO\_CONNECT         & 接続先をrootに聞く。 \\ \cline{2-3}
+    (child to root)     & LOST\_CHILD                & 子nodeの切断をrootに知らせる。 \\ \hline \hline
 
                         & FIND\_ROOT\_REPLY          & FIND\_ROOTへの返信。 \\ \cline{2-3}
-    send direct message & CONNECT\_TO                & nodeとnodeの接続をする。 \\ \cline{2-3}
-    (root to child)     & CONNECT\_TO\_AS\_LEADER    & 左子nodeとして、nodeとnodeの接続をする。 \\ \hline
+    send direct message & CONNECT\_TO\_AS\_LEADER    & 左子nodeとして接続する。接続先のnodeが含まれている。 \\ \cline{2-3}
+    (root to child)     & CONNECT                    & 右子nodeとして接続する。接続先のnodeが含まれている。 \\ \hline \hline
 
-    message down tree   & FRAMEBUFFER\_UPDATE        & 画面の差分の画像データ。EncodingTypeを持っている。\\ \cline{2-3}
-    (root to child)     & CHECK\_DELAY               & 通信の遅延を測定するmessage。 \\ \hline
+    message down tree   & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。\\ \cline{2-3}
+    (root to child)     & CHECK\_DELAY               & 通信の遅延を測定する。 \\ \hline \hline
 
     message up tree     & CHECK\_DELAY\_REPLY        & CHECK\_DELAYへの返信。 \\ \cline{2-3}
-    (child to root)     & SERVER\_CHANGE\_REQUEST    & 画面切り替えのリクエスト。 \\ \hline
+    (child to root)     & SERVER\_CHANGE\_REQUEST    & 画面切り替え要求。 \\ \hline \hline
 
-                        & FRAMEBUFFER\_UPDATE\_REPLY & FRAMEBUFFER\_UPDATEのリクエスト。 \\ \cline{2-3}
+                        & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求。 \\ \cline{2-3}
     send message        & SET\_PIXEL\_FORMAT         & pixel値の設定。 \\ \cline{2-3}
     (root to VNCServer) & SET\_ENCODINGS             & pixelデータのencodeTypeの設定。 \\ \cline{2-3}
                         & KEY\_EVENT                 & キーボードからのイベント。 \\ \cline{2-3}
                         & POINTER\_EVENT             & ポインタからのイベント。 \\ \cline{2-3}
-                        & CLIENT\_CUT\_TEXT          & テキストのカットバッファを持った際のmessage。 \\ \hline
+                        & CLIENT\_CUT\_TEXT          & テキストのカットバッファを持った際のmessage。 \\ \hline \hline
 
-                        & FRAMEBUFFER\_UPDATE        & 大本の画面の差分の画像データ。EncodingTypeを持っている。 \\ \cline{2-3}
+                        & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。 \\ \cline{2-3}
     send message        & SET\_COLOR\_MAP\_ENTRIES   & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3}
     (VNCServer to root) & BELL                       & ビープ音を鳴らす。 \\ \cline{2-3}
                         & SERVER\_CUT\_TEXT          & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline
@@ -148,12 +148,12 @@
       \begin{minipage}{0.5\hsize}
         \begin{itemize}
           \item nodeはMulticast通信でrootに対してFIND\_ROOTを送信する(1:findRoot())
-          \item rootが受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
-          \item node側でどのrootに接続するか選択するパネルが表示される
-          \item nodeはパネルでrootを選択し、接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
+          \item rootがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
+          \item node側で、どのrootに接続するかを選択するパネルが表示される
+          \item nodeはパネルで接続するrootを選択し、rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
           \item 受信したrootはnodeの接続先をCONNECT\_TOで送信する(4:connectTo)
-          \item nodeはrootの指定した接続先に接続する
-          \item root・node間の接続が確立後、rootからnodeに対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(4:framebufferUpdate())
+          \item nodeはrootの指定した接続先に接続しに行く
+          \item root・node間の接続が確立後、rootからnodeに対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(5:framebufferUpdate())
         \end{itemize}
       \end{minipage}
 
@@ -164,44 +164,45 @@
 
 
 \section{配信画面切り替え}
-ゼミ等では参加者が順々に発表を行う度に、画面の切り替えが必要となる。
-ゼミを円滑に進めるために、この画面の切り替えをスムーズに行う必要がある。
+ゼミでは発表者が順々に入れ替わる。発表者が入れ替わる度に共有する画面の切り替えが必要となる。
+ゼミを円滑に進めるために、画面の切り替えをスムーズに行いたい。
 
-プロジェクタを使用する場合、ケーブルの抜き差しを行わないとならない。
-その際に、ディスプレイの解像度の設定をし直す、
+画面の共有にプロジェクタを使用する場合、
+発表者が変わる度にケーブルの抜き差しを行わないとならない。
+その際に、ディスプレイ解像度を設定し直す必要が出たり、
 接続不良が起こる等の煩わしい問題が生じることがある。
 
 従来のVNCを使用する場合、
 画面の切り替えの度に一旦VNCを終了し、発表者のVNCServerへと再接続を行う必要がある。
 
-TreeVNC は、これらの配信者の切り替えの度に生じる問題を解決している。
-TreeVNC を立ち上げることで、ケーブルを使用せずに手元のPCに発表者の画面を表示させることができる。
-画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、切り替えた発表者の画面を取得することができる。
+TreeVNC は、配信者の切り替えの度に生じる問題を解決している。
+TreeVNC を立ち上げることで、ケーブルを使用する必要なしに、
+各参加者の手元のPCに発表者の画面を共有することができる。
+画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、
+share button を押すことによって、配信者の切り替えを行うことができる。
 
-\newpage
-
-TreeVNC の root は配信者の VNCServer と通信を行っており、
+TreeVNC の root は配信者の VNCServer と通信を行っている。
 VNCServer から画面データを受信し、そのデータを node へと送信している。
-画面切り替え用の share button が押されると、
-root は share button を押したクライアントの VNCServer と新しく通信をし直す。
-これにより、配信者切り替えのために VNC を終了し、再接続する必要がなくなる。
+配信者切り替え時に share button が押されると、
+root は share button を押したクライアントの VNCServer と通信を始める。
+TreeVNCは、配信者切り替えの度に VNC を終了し、再接続する必要がない。
 
-しかし、配信者が変わることで起きる画面サイズの違いや、
-マルチディスプレイ全体を表示してしまうことがあるので、
-それを解決する必要がある。
+しかし、配信者と受信者の画面サイズの違いや、
+マルチディスプレイ全体を共有してしまう問題があるので、
+それらを解決する必要がある。
 
 
 \section{MulticastQueue}
-配信側の画面が更新されると、 VNCServer から画像データが framebufferUpdate として送られてくる。
+配信側の画面が更新されると、 VNCServer から画像データが FRAME\_BUFFER\_UPDATE messageとして送られてくる。
 TreeVNC は、画像の更新を複数の node に同時に伝えるため、
 MulticastQueue という Queue に画像データを格納する。
 
 各 node は MulticastQueue からデータを取得するスレッドを持つ。
-node それぞれがデータを取得するため、
 MulticastQueue は複数のスレッドから使用される。
 
-MulticastQueue は、CountDownLatch を用いている。
-java.util.concurrent.CountDownLatch とは、
+MulticastQueue は、
+java.util.concurrent.CountDownLatch を用いて実装されている。
+CountDownLatch とは、
 java の並列用に用意された API で、他のスレッドで実行中の操作が完了するまで、
 複数のスレッドを待機させることのできるクラスである。
 スレッドを解放するカウントを設定することができ、
@@ -209,15 +210,20 @@
 
 TreeVNC では、それぞれの画像データにカウントが追加され、
 カウントが 0 になると、その画像データは消される。
-親 node が接続されている子 node の数だけカウントを設定する。
-子 node が画像データを pull すると、そのカウントが減る。
-全ての子 node が画像データを pull するとカウントが 0 になり、画像データが消される。
+親 node がMulticastQueueを持っており、
+接続されている子 node の数だけ画像データにカウントを設定する。
+子 node が画像データを取得すると、そのカウントが減る。
+接続している全ての子 node が画像データを取得するとカウントが 0 になり、
+MulticastQueueから画像データが消される。
 
+親node は、接続している全ての子nodeが画像データを取得するまで
+MulticastQueueの中に持っている画像データを削除することができない。
 node が MulticastQueue からデータを取得せずに、
-Queue にデータが溜まり続け、メモリのオーバーフローが起こる場合がある。
+Queue にデータが溜まり続けると、Memory Over Flowを起こしてしまう。
 この問題を避けるために、Timeout用のスレッドを用意している。
-ある一定時間データが取得されなければ、Timeout を検知し、
-取得されなかったデータが全てpollされるという仕組みである。
+Timeout スレッドは、ある一定時間取得されない画像データがある場合、
+そのデータを node の代わりにpollするという仕組みである。
+Timeout スレッドにより、Memory Over Flowを防ぐことができる。
 
 
 
--- a/paper/chapter8.tex	Tue Feb 17 17:09:37 2015 +0900
+++ b/paper/chapter8.tex	Wed Feb 18 05:02:45 2015 +0900
@@ -1,1 +1,11 @@
 \chapter{謝辞}
+
+本研究を行うにあたり、
+ご多忙にも関わらず日頃より日頃より熱心なご指導いただきました河野真治准教授に心より感謝致します。
+そして、一年間共に研究を行い、暖かな気づいかいと励ましをもって支えてくれた並列信頼研究室の皆様に感謝致します。
+最後に、有意義な時間を共に過ごした情報工学科の学友、並びに物心両面で支えてくれた家族に深く感謝致します。
+
+\begin{flushright}
+2015年 2月 \\  大城美和
+\end{flushright}
+
Binary file paper/thesis-paper.pdf has changed