Mercurial > hg > Papers > 2017 > mitsuki-thesis
changeset 17:75ea2f33f426
update
author | mir3636 |
---|---|
date | Wed, 15 Feb 2017 23:07:46 +0900 |
parents | 11058e51adb7 |
children | 151e3fd72185 |
files | presen/slide.html |
diffstat | 1 files changed, 31 insertions(+), 217 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/slide.html Wed Feb 15 23:00:11 2017 +0900 +++ b/presen/slide.html Wed Feb 15 23:07:46 2017 +0900 @@ -2,10 +2,10 @@ <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> - <title>PC画面配信システムTreeVNCの NAT への対応</title> + <title>CbC 言語による OS 記述</title> -<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin15]"> -<meta name="author" content="Tatsuki IHA" > +<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.2.0 (2014-12-25) [x86_64-darwin13]"> +<meta name="author" content="Mitsuki Miyagi" > <!-- style sheet links --> <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> @@ -67,14 +67,14 @@ <tr> <td> <div align="center"> - <h1><font color="#808db5">PC画面配信システムTreeVNCの NAT への対応</font></h1> + <h1><font color="#808db5">CbC 言語による OS 記述</font></h1> </div> </td> </tr> <tr> <td> <div align="left"> - Tatsuki IHA + Mitsuki Miyagi <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> @@ -86,266 +86,80 @@ <div class='slide '> <!-- === begin markdown block === - generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin15] - on 2016-02-18 09:23:08 +0900 with Markdown engine kramdown (1.9.0) + generated by markdown/1.2.0 on Ruby 2.2.0 (2014-12-25) [x86_64-darwin13] + on 2017-02-15 23:02:31 +0900 with Markdown engine kramdown (1.9.0) using options {} --> <!-- _S9SLIDE_ --> -<h2 id="section">画面共有を利用したコミュニケーション</h2> +<h1 id="section">メタ計算の重要性</h1> <ul> - <li>授業やゼミ等で、それぞれが PC 端末を持っている場合では、PC の機能を活かした コミュニケーションが可能である</li> - <li>画面配信システム TreeVNC は参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる 仕組みを取っている。そのため, 多人数が参加しても処理性能が下がらない</li> - <li>ツリー のルートが参照している VNC サーバーを変更することで、ケーブルの差し替えなしに画面の切替が行える</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="treevnc-">TreeVNC の問題点</h2> -<ul> - <li>TreeVNC を実際に使用していく中で様々な問題が発生</li> - <li>講義等を大学外の遠隔地から受けたい場合がある</li> - <li>TreeVNC は NAT を越えた接続が行うことができない</li> + <li>プログラムを記述する際、通常の処理の他に、メモリ管理やスレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する。これらの計算を Meta Computation と呼ぶ。</li> + <li>Meta Computation を通常の計算から切り離して記述す るためには処理を細かく分割する必要がある。しかし、関 数やクラスなどの単位は容易に分割できない。</li> + <li>そこで当研究室では Meta Computation を柔軟に記述 するためのプログラミング言語の単位として Code Gear、 Data Gear という単位を提案している。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h2 id="treevnc--1">TreeVNC の問題点</h2> -<ul> - <li>ゼミ等で発表者毎に画面切り替えを行う際、デュアルディスプレイを使っている学生がいた</li> - <li>その際 VNC サーバーからはすべての画面データが送信されており、発表とは関係ない画面も配信されていた</li> -</ul> - -<p><img src="./images/multidisplay.svg" alt="message" width="500" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-1">この発表は</h2> +<h1 id="code-gear--data-gear">Code Gear と Data Gear</h1> <ul> - <li>TreeVNC の概要 - <ul> - <li>構造</li> - <li>原理</li> - <li>画面切り替え</li> - </ul> - </li> - <li>今回の改良 - <ul> - <li>NAT 対応</li> - <li>マルチディスプレイの対応</li> - </ul> - </li> - <li>TreeVNC の評価 - <ul> - <li>画像データ送信の遅延</li> - <li>ネックになってるノードへの対処</li> - </ul> - </li> + <li>Code Gear は関数に比べて細かく分割されているので Meta Computation をより柔軟に記述できる。</li> + <li>Data Gear はデータの単位であり、Code Gear は 任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h2 id="treevnc">TreeVNC</h2> -<ul> - <li>TreeVNC は本研究室で開発している VNC を利用した画面配信システム</li> - <li>配信コストを分散させることで大人数でも画面配信が可能</li> - <li>スムーズな配信画面の切替を行う</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="vnc">VNC</h2> +<h1 id="continuation-based-c-cbc">Continuation based C (CbC)</h1> <ul> - <li>VNC(Virtual Network Computing) は RFBプロトコルを用いて遠隔操作を行うソフトウェア</li> - <li>サーバー側とクライアント側に分かれており、サーバーを起動し、クライアントがサーバーに接続を行うことで遠隔操作を可能とする</li> -</ul> - -<p><img src="./images/vnc.svg" alt="message" width="600" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="rfb-">RFB プロトコル</h2> -<ul> - <li>RFB(Remote Frame Buffer)プロトコルは VNC で用いられているプロトコル</li> - <li>自身の画面をネットワーク越しに他者の画面に表示する</li> - <li>Framebuffer と呼ばれるメモリ上に置かれた画像データを使用して画面表示を行う</li> - <li>サーバーは Framebuffer が更新されるたびにクライアントに対して変更部分だけを送信する。</li> + <li>Continuation based C (CbC) はこの Code Gear 単位を 用いたプログラミング言語として開発している。</li> + <li>Code Gear から 次の Code Gear へと goto による継続で遷移で処理を行い、引数として出力を与える。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h2 id="treevnc--2">TreeVNC の構造</h2> -<ul> - <li>Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている</li> - <li>様々なメッセージで通信を行う</li> - <li>クライアント同士をバイナリツリー状に接続する</li> - <li>バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ</li> - <li>Root Node が参照している VNC サーバーから FrameBuffer を取得して、 木構造を辿って Node に送信する。</li> -</ul> - -<p><img src="./images/treeVnc.svg" alt="message" width="400" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="treevnc--3">TreeVNC の原理</h2> +<h1 id="gears-os">Gears OS</h1> <ul> - <li>ポート一本あたりの負荷 - <ul> - <li>従来のVNC : Node数 * データ量</li> - <li>TreeVNC : (2(子供の数) + 1) * データ量</li> - </ul> - </li> - <li>従来のVNCはNode数に比例</li> - <li>TreeVNCはNode数に関係なく一定</li> -</ul> - -<p><img src="./images/treeVncTheory.svg" alt="message" width="700" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-2">共有画面切り替え</h2> -<ul> - <li>TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている</li> - <li>画面を配信されている側のビューワにある Share Screen ボタンが押す</li> - <li>Root Node に SERVER_CHANGE_REQUEST を木構造を辿りながら送信</li> - <li>Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を開始</li> + <li>Gears OS では並列実行するための Task を、実行する Code Gear 、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。</li> + <li>またGears OS では Meta Computation を Meta Code Gear、Meta Data Gear で表現する。</li> + <li>Meta Code Gear は通常の Code Gear の直後に遷移され、Meta Computation を実行する。</li> + <li>Meta Code Gear で OS の 機能であるメモリ管理やスレッド管理を行う。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h2 id="direct-connection">Direct Connection</h2> -<ul> - <li>NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する</li> - <li>Direct Connection した Node はそのネットワークの Root Node になる</li> - <li>Direct Connection された Root Node では NAT を越えたネットワーク先の Node の管理を行わない</li> -</ul> - -<p><img src="./images/directConnection.svg" alt="message" width="800" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-3">マルチディスプレイ</h2> +<h1 id="context">Context</h1> <ul> - <li>画面切り替えの際のSERVER_CHANGE_REQUESTに共有するディスプレイの座標を付加する</li> - <li>Root Node は 接続した VNC サーバーから画像データを要求する FRAME_BUFFER_UPDATE_REQUEST に受け取った座標を付加する</li> - <li>VNC サーバーは要求された座標内の画像データを FRAME_BUFFER_UPDATE で Root Node に送信する</li> -</ul> - -<p><img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="700" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="treevnc--4">TreeVNC の評価</h2> -<ul> - <li>木の深さによる画像データの遅延を調べる</li> - <li>実験環境 - <ul> - <li>実際に講義を受講している学生が TreeVNC を使用</li> - <li>約20名の接続</li> - </ul> - </li> + <li>Gears OS では Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。</li> + <li>Gears OSは必要なCode/DataGearに参照したい場合、このContext を通す必要がある。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h2 id="section-4">実測方法</h2> +<h1 id="stub-code-gear">stub Code Gear</h1> <ul> - <li>Root Node は 送信時間と画像データを持った CHECK_DELAY を 末端 Node まで木構造を辿りながら伝達する</li> - <li>CHECK_DELAY を受け取った各 Node は 付加された送信時間を CHECK_DELAY_REPLY に付加し、 Root Node に送信する</li> - <li>CHECK_DELAY_REPLY を受け取った Root Node は CHECK_DELAY の送信にどれだけ時間がかかったかの計算を行う</li> + <li>しかし、Context を直接扱うのはセキュリティ上好ましくない。</li> + <li>そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。</li> </ul> -<p><img src="./images/checkDelay.svg" alt="message" width="600" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-5">深さ1, 2</h2> -<p><img src="./images/depth1.svg" alt="message" width="600" /> -<img src="./images/depth2.svg" alt="message" width="600" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-6">深さ3, 4</h2> -<p><img src="./images/depth3.svg" alt="message" width="600" /> -<img src="./images/depth4.svg" alt="message" width="600" /></p> - </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h2 id="section-7">結果から</h2> +<h1 id="gearefgearimpl">Gearef、GearImpl</h1> <ul> - <li>画像データの伝達はほぼ1秒以内に収まっている</li> - <li>容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の遅延が残っているためだと考えられる</li> - <li>深さ3が遅い原因として1つの Node がボトルネックになっている事が判明した。</li> - <li>ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある</li> -</ul> - -<p><img src="./images/depth3.svg" alt="message" width="600" height="600" /> -<img src="./images/depth3_without_bottle.svg" alt="message" width="600" height="600" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-8">ネックになっているノードへの対処</h2> -<ul> - <li>CHECK_DELAY_REPLY で Root Node は ネックかどうかのを判断をする</li> - <li>ネックになっているなら、その Node を木構造のリストから削除</li> - <li>最後の Node を削除した Node の場所に移動</li> - <li>ネックになったところは三分木になる</li> + <li>Context には Allocation 等で生成した Data Gear へのポインタが格納されている。</li> + <li></li> </ul> - -<p><img src="./images/fixTree.svg" alt="message" width="800" /></p> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h2 id="section-9">まとめと課題</h2> -<ul> - <li>今回TreeVNCの様々な問題点の解決を行った - <ul> - <li>NAT</li> - <li>マルチディスプレイ</li> - <li>画面切り替えの安定化</li> - <li>エラー通知</li> - </ul> - </li> - <li>NATを越えた画面切り替え</li> - <li>音声配信等の共有機能の追加</li> -</ul> - <!-- === end markdown block === --> </div>