# HG changeset patch # User Shinji KONO # Date 1240527006 -32400 # Node ID 74bad457cfc29884143fe06d4380c77efdbf335f # Parent 8e30bfb5deb646599e5661b1156422a84cd4d407 fix diff -r 8e30bfb5deb6 -r 74bad457cfc2 presentation/fig --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presentation/fig Fri Apr 24 07:50:06 2009 +0900 @@ -0,0 +1,1 @@ +../fig \ No newline at end of file diff -r 8e30bfb5deb6 -r 74bad457cfc2 presentation/rep-verify-sigos.ind --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presentation/rep-verify-sigos.ind Fri Apr 24 07:50:06 2009 +0900 @@ -0,0 +1,183 @@ +-title: Remote Editing Protocol の実装と検証 + +--author: 与儀健人, 宮城健太, 河野真治 + +--はじめに + + +--Remote Editing Protocol の設計方針 + +複数の「既存」のEditorを相互に接続する + + Emacs, Vim, Eclipse など + +Local Editing を阻害しない + +接続されたEditorは同等 + +編集結果は最終的に同一になる + +途中の非同期的な差は容認する + +ネットワーク遅延に強い + +行単位のinsert/delete しか扱わない + + すべての編集はinsert/deleteに分解する + +Editorの改変を最小限にする + +切断は任意 + +再接続は、新規接続とする + +--構成要素 + + Editor + + Session Manager + +--Protocol の構成 + + Session Manager への接続 (sm_join) + + Session への接続 (join,put) + + Editor Command の伝搬 (insert/delete) + + Editor Command の衝突の解消(Merge) + +--Merge をSession Manager 上で行なう + + 編集Sessionはring を構成する + + 編集の衝突をSession Manager で検出する + + Command と Ack はringをそれぞれ一周する + +--Protocol はかなり複雑 + + 2つでは大丈夫だが、3つでおかしくなる + + 切断のタイミング + +--アルゴリズムを決める + + Simulator を作成する + + Simulator から実際の実装に移す + +実装するもの自体が多い。Simulator から実装すると2度手間。 + +--モデル検証 + + Java PathFinder + +を用いて、あらゆるInterleavingを調べることが出来る + + 初期化の穴を見つけるのは得意 + + 少数のコマンドで十分にバグが調べられる + +--Java PathFinder の限界 + + 大きなプログラムを動かすのは難しい + + I/Oが含まれると正しく動作しない + +そこで、 + + Thread 間通信でSocket通信をsimulationするLibraryを作成した + +--Thread/Socketを切替えられる通信ライブラリ + +実プログラムで通信を含めて、Java PathFinder で検証可能 + +通信時にコピーをしないので高速 + +write 後にコマンドを修正すると問題が出る + +初期化時にSocket/Simulationを選択する + +--テストプログラムの終了という問題 + +Java PathFinderで検証する場合はプログラムが終了した方が良い + +分散プログラムは終了を自明に検出できない + +テストの正しさは終了時に判定するのが簡単 + +---Session managerの導入 + +
Session Managerの導入
+ +---Session managerの接続protocol + +
Session Manager同士の接続
+ +---Session 接続 protocol + +
join コマンド
+ +
Session Managerを介したエディタの接続
+ +---Editor Command + + +---Merge Protocol + + +
Session Ring上のREPコマンドの送信
+ + +---Merge のSession Managerへの移動 + + +
リマージ
+ + +--Protocol の正しさ + + +--Protocol の実装 + + +Editor 側で実装する必要があるのは、表\ref{tb:sync}の機能である。 +\begin{table}[htdp] +\caption{Editor 側での実装} +\begin{center} +\begin{tabular}{|l|l|} +\hline +1 & 編集機能の{\tt user\_insert,user\_detele}への分解と、分解したEditor Command の送信 \\ +\hline +2 & {\tt join,put} Command のUI部分と、Command の送信 \\ +\hline +3 & {\tt join,put} Command のUI部分と、Command の送信 \\ +\hline +4 & {\tt join\_ack,put\_ack} の受け取りとsid,eidの設定 \\ +\hline +5 & 外部からのEditor Commandの非同期受け取りと実行 \\ +\hline +6 & {\tt sync} Command を受け取った場合の{\tt user\_insert,user\_detele}の生成 \\ +\hline +7 & Merge 時のlock (optional) \\ +\hline +7 & {\tt quit} Command \\ +\hline +\end{tabular} +\end{center} +\label{tb:sync} +\end{table}% + + +--Socket Simulator + + +--検証とデバッグ + + +--比較 + + +--最後に +