annotate Paper/sugi-prosym.tex @ 9:25a3002cb1e6

add image and source files
author e095732 <e095732@ie.u-ryukyu.ac.jp>
date Tue, 20 Nov 2012 18:32:20 +0900
parents 5a5db338e71c
children 5818128d5630
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
1 \documentclass[private]{ipsjpapers}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
2 \usepackage{listings}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
3 \usepackage{graphicx}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
4
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
5 % 巻数,号数などの設定
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
6 %\setcounter{巻数}{41}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
7 %\setcounter{号数}{6}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
8 %\setcounter{volpageoffset}{1234}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
9 %\受付{12}{2}{4}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
10 %\採録{12}{5}{11}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
11
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
12 % ユーザが定義したマクロなど.
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
13 \makeatletter
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
14 \let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
15 \def\<{\(\langle\)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
16 \def\>{\(\rangle\)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
17 %\def\|{\verb|}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
18 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
19 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
20 \def\LATEX{\iLATEX\Large}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
21 \def\LATEx{\iLATEX\normalsize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
22 \def\LATex{\iLATEX\small}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
23 \def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
24 T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
25 \def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
26 \def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
27 \def\Quote{\list{}{}\item[]}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
28 \let\endQuote\endlist
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
29 \def\TT{\if@LaTeX@e\tt\fi}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
30 \def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
31 $\backslash$#1\fi}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
32
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
33 %style
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
34 \lstset{
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
35 language={java},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
36 basicstyle={\small},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
37 identifierstyle={\small},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
38 commentstyle={\small\itshape},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
39 keywordstyle={\small\bfseries},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
40 ndkeywordstyle={\small},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
41 stringstyle={\small\ttfamily},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
42 frame={tb},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
43 breaklines=true,
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
44 columns=[l]{fullflexible},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
45 numbers=left,
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
46 xrightmargin=0zw,
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
47 xleftmargin=3zw,
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
48 numberstyle={\scriptsize},
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
49 stepnumber=1,
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
50 numbersep=1zw,
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
51 lineskip=-0.5ex
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
52 }
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
53
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
54 %\checklines % 行送りを確認する時に使用
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
55 \begin{document}%{
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
56 % 和文表題
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
57 \title[Code Segment と Data Segment によるプログラミング手法]%
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
58 {Code Segment と Data Segment によるプログラミング手法 }
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
59 % 英文表題
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
60 \etitle{How to Programming with Code Segment and Data Segment}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
61 % 所属ラベルの定義
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
62 \affilabel{URYUKYU}{琉球大学\\University of the Ryukyu}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
63 % 和文著者名
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
64 \author{河野 真治\affiref{URYUKYU}\member{19841765}\and
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
65 杉本 優\affiref{URYUKYU}\nomember}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
66
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
67
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
68 % 英文著者名
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
69 \eauthor{Shinji Kono\affiref{URYUKYU}\and
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
70 Yu Sugimoto\affiref{URYUKYU}}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
71
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
72
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
73 % 連絡先(投稿時に必要.製版用では無視される.)
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
74 \contact{杉本 優\\
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
75 〒903-0213 沖縄県中頭郡西原町字千原1番地\\
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
76 琉球大学 情報工学科\\
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
77 TEL: (098)895-8723\qquad FAX: (098)895-8727\\
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
78 email: sugi@cr.ie.u-ryukyu.ac.jp}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
79
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
80 % 和文概要
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
81 \begin{abstract}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
82 本研究室では分散プログラミングにおいて、データをData Segment、タスクをCode Segmentという単位に分割して記述する方法を提唱している。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
83 しかし、前述した方法をプログラマーが一から記述することは大変である。そこで、本研究室で分散ネットフレームワーク Alice を作成した。本論文では実際にAliceを用いてCode Segment と Data Segment によるプログラミング手法の例を示す。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
84 \end{abstract}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
85 % 英文概要
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
86 \begin{eabstract}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
87 We suggest that programmers develop a distributed program with splitting data as Data Segment and processing as Code Segment.
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
88 But it is difficult for programmers to develop on that way from scratch. So We developed distributed network framework 'Alice'.
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
89 We show example how to programming with Code Segment and Data Segment on this paper.
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
90 \end{eabstract}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
91
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
92 % 表題などの出力
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
93 \maketitle
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
94
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
95 % 本文はここから始まる
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
96 \section{歴史的経緯}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
97 本研究室では、並列タスク管理フレームワークCeriumの管理を行なっているが、その設計と実装を行うにあたり、並列プログラミングと分散プログラミング
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
98 は本質的には同じことを行なっていることが分かった。特にヘテロジーニアスマルチコアであり、ローカルストアをそれぞれのコアが持っているというCell の特異な環境は、分散プログラミング環境と告示している。それらを踏まえて、Ceriumのタスク管理手法を分散に応用できないかと考えた。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
99
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
100
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
101 Ceriumに置いても、タスクとそれの入出力データの取り扱いは難しい課題である。データを操作するAPIを考えて、タスクを自然に記述し、効率良く実行する方法を考えてきた。そこで考えられた手法が、データをDataSegment、タスクをCodeSegmentという単位に分割して記述する方法である。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
102
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
103
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
104 \section{分散ネットフレームワークAlice}\label{sec:ITEM}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
105 \subsection{Aliceとは}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
106 Aliceは本研究室の卒業生である赤嶺一樹氏が、本研究室で開発を行なっている並列タスク管理フレームワーク Cerium と先行研究である Federated Linda の開発を通して得られた知見を生かされている。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
107 Federated Linda の設計はシングルスレッドで行われている。しかし、近年ではマルチコアのマシンが主流となっている。将来的にはメニーコアのマシンが主流になってくると考えられるそのような背景を踏まえてAliceはマルチスレッド向けに設計されている。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
108
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
109 AliceはData SegmentとCode Segmentという単位でデータと処理を細かく分割し、それぞれの依存関係を記述して分散プログラムを作成する。また、他のマシンとの接続トポロジーの構成の機能も有しているのでユーザーはトポロジー構成後の処理を記述するだけでよい。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
110 また、AliceはJavaで実装されている。
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
111 \subsection{Data Segment}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
112 AliceではData Semgnetをデータベースとして利用している。KeyValueStoreで実装されており、キーごとにリストを持っている。Data Segment APIを用いることで、リストにデータを追加、削除を適宜行うことができる。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
113
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
114
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
115 \subsubsection{Data Segment Manager}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
116 大量のData Segmentを管理するのがData Segment Managerである。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
117 Data Segment Managerは文字列のキーでData Segmentを整理する。また、各キーごとにキュー構造を持っている。それらをData Segment APIを用いて操作する。
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
118 データの読み出し("peek" または "take")時に、希望のデータがなかった場合、ブロッキングを行う機能を持つ。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
119 しかし、ブロッキングといってもそこで同期するわけではない。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
120 非同期でデータを通信する。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
121 そのため、データの読み出し時には他の API とは違い、レスポンスが発生する。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
122
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
123 \subsubsection{Data Segment API}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
124 以下が用意されているData Segment APIである。これらを用いてデータの送受信を行う。
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
125 \begin{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
126 \item {\ttfamily void put(String key, Value val)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
127 \item {\ttfamily void update(String key, Value val)}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
128 \item {\ttfamily void peek(Receiver receiver, String key,\\ int id)}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
129 \item {\ttfamily void take(Receiver receiver, String key,\\ int id)}
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
130 \end{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
131
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
132 \subsubsection*{"put"}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
133 "put" はデータを追加するための API である。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
134 "put" は受け取ったデータ val を Data Segment 内のキューに対してエンキューする。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
135 この時、キーごとに重複しない連番の ID を受け取った順に振る。(図 \ref{fig:put})
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
136
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
137
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
138 \begin{figure}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
139 %\begin{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
140 \scalebox{0.6}{\includegraphics{images/put.eps}}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
141 %\end{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
142 \caption{"put"は重複しないIDを振りながらデータを追加する}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
143 \label{fig:put}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
144 \end{figure}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
145
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
146 \subsubsection*{"update"}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
147 "update" はデータを置き換えるための API である。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
148
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
149 "update" はキューの先頭にあるデータをひとつだけ削除する。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
150 その後は "put" と同じく、 受け取ったデータ val を Data Segment 内のキューに対してエンキューする。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
151 この時、キーごとに重複しない連番の ID を受け取った順に振る。(図 \ref{fig:update})
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
152
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
153
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
154 \begin{figure}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
155 \begin{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
156 \scalebox{0.6}{\includegraphics{images/update.eps}}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
157 \end{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
158 \caption{"update"は先頭データを取り除き、重複しないIDを振りながらデータを追加する}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
159 \label{fig:update}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
160 \end{figure}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
161
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
162 \subsubsection*{"peek"}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
163 "peek" はデータを読み込むための API である。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
164
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
165 "peek" は前回読み込んだデータの id を引数で指定する。省略した場合は、 0 が id として渡される。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
166 id よりも値の大きい id のデータがキューに含まれていれば、そのデータを receiver に返す。(図 \ref{fig:peek})
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
167
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
168 \begin{figure}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
169 \begin{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
170 \scalebox{0.6}{\includegraphics{images/peek.eps}}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
171 \end{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
172 \caption{"peek"はデータをreceiverに読み込む}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
173 \label{fig:peek}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
174 \end{figure}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
175
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
176 もし id 以下のデータしか無いならば、データの更新が前回の "peek" 発行時から更新が無いものと考え、リストに格納されて保留される。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
177 (図 \ref{fig:no_peek})
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
178
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
179 \begin{figure}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
180 \begin{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
181 \scalebox{0.6}{\includegraphics{images/peek1.eps}}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
182 \end{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
183 \caption{希望のデータが無いときは保留する}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
184 \label{fig:no_peek}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
185 \end{figure}
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
186
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
187 "take" や "update" によりデータの更新があれば、 "peek" が直ちに実行される。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
188
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
189 \subsubsection*{"take"}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
190 "take" もデータを読み込むための API である。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
191 基本的な id に関する部分は "peek" と同じである。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
192
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
193 "peek" との決定的な違いは、読み込まれたデータは Data Segment 内のキューから取り除かれるということである。
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
194 (図 \ref{fig:take})
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
195
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
196
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
197 \begin{figure}[tp]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
198 \begin{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
199 \scalebox{0.6}{\includegraphics{images/take.eps}}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
200 \end{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
201 \caption{"peek"はデータをreceiverに読み込む。希望のデータが無いときは保留する。}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
202 \label{fig:take}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
203 \end{figure}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
204
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
205 \subsubsection{Data Segmentの表現}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
206 Data Segmentのデータの表現にはMessagePackを利用している。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
207 MessagePackに関してJavaにおけるデータ表現は以下の3段階あり、これらのデータ表現は制限を伴うが互いに変換かのである。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
208
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
209 \begin{itemize}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
210 \item {\ttfamily 一般的なJavaのクラスオブジェクト}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
211 \item {\ttfamily MessagePack for JavaのValueオブジェクト)}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
212 \item {\ttfamily byte[]で表現されたバイナリ}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
213 \end{itemize}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
214
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
215 DataSegment APIでは、このMessagePack for JavaのValueオブジェクトを用いてデータが表現されている。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
216 MessagePackはJavaのように静的に型付けされたオブジェクトではなく、自己記述なデータ形式である。MessagePack for JavaのValueオブジェクトはMessagePackのバイナリにシリアライズできる型のみで構成されたJavaのオブジェクトである。そのため、Valueも自己記述式のデータ形式になっている。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
217
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
218
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
219 Valueオブジェクトは通信に関わるときには、シリアライズ・デシリアライズを高速に行うことができる。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
220 また、ユーザーはメソッドを用いてオブジェクト内部のデータを閲覧、編集することができる。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
221
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
222
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
223 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
224 この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。(ソースコード \ref{fig:MessagePackTest})もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
225 \begin{table}[htbp]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
226 \lstinputlisting[label=MessagePackTest, caption=一般的なクラスをIDLのように使用]{source/MessagePackTest.java}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
227 \end{table}
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
228
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
229 \subsection{Code Segment}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
230 Code Segmentはタスクのことである。Code Segmentをユーザーが記述するときに、Code Segment 内で使用するData Segment を記述し、依存関係を作る。依存関係により、実行される順番が一意に決まる。実際に使用するData Segment はCode Segmentの入出力に相当する。それぞれ、Input Data Segment、Output Data Segmentとする。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
231 \subsubsection{Code Segmentの実行方法}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
232 Code Semgnetを実行するためにはStart Code Segment (ソースコード \ref{fig:StartCodeSegment})というCode Segmentを実行させる必要がある。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
233 Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。(ソースコード \ref{fig:TestLocalAlice})
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
234
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
235
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
236 \begin{table}[tb]
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
237 \lstinputlisting[label=TestLocalAlice, caption=Start Code Segmentを実行させる方法]{source/TestLocalAlice.java}
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
238 \end{table}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
239
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
240 \subsubsection{Code Segmentの記述方法}
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
241 Code Segmentをユーザーが記述する際にはCodeSegmentを継承して記述する。(ソースコード \ref{fig:CodeSegment})そのCodeSegmentはInputDataSegmentManagerとOutputDataSegmentManagerを利用することができる。
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
242
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
243 \begin{table}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
244 \lstinputlisting[label=StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
245 \end{table}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
246
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
247 \begin{table}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
248 \lstinputlisting[label=CodeSegment, caption=CodeSegmentの例]{source/TestCodeSegment.java}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
249 \end{table}
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
250 \subsubsection*{InputDataSegmentManager}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
251 InputDataSegmentManagerはCode Segmentのidsというフィールドを用いてアクセスする。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
252 \begin{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
253 \item {\ttfamily Receiver create(CommandType type)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
254 \end{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
255 createでコマンドが実行された際に取得されるData Segmentが格納される受け皿を作る。引数にはCommandTypeが取られ、指定できるCommandTypeはPEEKまたはTAKEである。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
256 \begin{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
257 \item {\ttfamily void setKey(String managerKey, String key, int id)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
258 \end{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
259 setKeyメソッドにより、どこのData Segmentのあるkeyに対してpeekまたはtakeコマンドを実行させるかを指定することができる。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
260 コマンドの結果がレスポンスとして届き次第Code Segmentは実行される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
261 \subsubsection*{OutputDataSegmentManager}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
262 OutputDataSegmentManagerはCode Segmentのodsというフィールドを用いてアクセスする。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
263 OutPutDataSegmentManagerは"put"または"update"を実行することができる。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
264 \begin{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
265 \item {\ttfamily void put(String managerKey, String key, \\ Value val)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
266 \item {\ttfamily void update(String managerKey, String key, Value val)}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
267 \end{itemize}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
268
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
269 \subsection{Topology Manager}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
270 TopologyManagerはAlice同士の接続トポロジーを管理する。TopologyManager関連の通信処理はCode Segmentで実装してある。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
271 TopologyManagerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきクライアントのIPアドレスやポート番号、接続名を送り、トポロジーファイルに記述された通りにトポロジーを作成する。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
272
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
273 \subsection{Topology Managerの設定ファイル}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
274 Topology Managerはトポロジーファイルを読み込むが、トポロジーファイル自体はDOT Languageという言語で記述される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
275 DOT Languageとはプレーンテキストを用いて、データ構造としてのグラフを表現するための、データ記述言語の一種である。このDOT Languageのグラフを利用して、クライアント間の接続を表現する。DOT Languageファイルはdotコマンドを用いて、グラフの画像ファイルを出力することができるので、記述したトポロジーが正しいことを可視化して確認することができる。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
276
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
277 クライアント間の接続にはlabelを用いて名前が割り振られており、この接続名を用いてユーザーはData Segment Managerにアクセスすることができる。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
278 前述したReceiver にsetKeyを行う際、odsでputまたはupdateする際の引数のmanagerKeyがこれにあたる。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
279
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
280 \begin{table}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
281 \lstinputlisting[label=ring, caption=3台でリングを組んだ時の例]{source/ring.dot}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
282 \end{table}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
283
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
284
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
285
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
286 \begin{figure}[tb]
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
287 \begin{itemize}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
288 \item {\ttfamily dot -T png ring.dot -o ring.png}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
289 \end{itemize}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
290
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
291 \begin{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
292 \scalebox{0.6}{\includegraphics{images/ring.eps}}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
293 \end{center}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
294 \caption{dotコマンドで作成された3台で構成されたリングのグラフ}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
295 \label{fig:take}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
296 \end{figure}
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
297
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
298
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
299 \subsection{Topology Managerの使用方法}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
300 Topology Nodeを起動する際にコマンドライン引数としてTopology ManagerのIPアドレスとポート番号を指定をする。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
301 そしてmain関数内でTopologyNodeをnewを行えば良い。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
302 TopologyNodeの第一引数は Alice デーモンの設定オブジェクト、第二引数はStart Code Segmentである。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
303 ここで指定した、Start Code Segmentがトポロジーが完成した後実行される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
304
9
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
305
25a3002cb1e6 add image and source files
e095732 <e095732@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
306 \section{ゲームの例題}
6
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
307 \subsection{水族館}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
308 今回作成した例題は水族館である。複数のクライアントのディスプレイを複数の魚が移動していくものである。魚は画面の端まで移動すると自分の画面上からは消え、別のクライアントの画面の端から魚が出てくる。また、魚のうち一匹はクライアントが直接操作することができる。トポロジーはTopologyManagerによりツリー状に構成してある。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
309 \subsection{データの伝搬}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
310
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
311 \begin{enumerate}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
312 \item ユーザーが魚を操作するまたはCode Segmentにより魚の座標が更新される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
313 \item 画面に表示させるためのSetLocation (Code Segment)が実行され実際に魚のオブジェクトにセットされ画面に反映される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
314 \item Update(Code Segment)にFishPosition(魚の座標データ)が渡される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
315 \item Updateにlist(送信者リスト)が渡される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
316 \item Updateが実行され、listを元にデータが送信される。ただし、この時にFishPositionには送信元情報が付加されているので、送信元には送信されない。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
317 \item 各clientで2 - 4が実行される。
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
318 \end{enumerate}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
319
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
320 \section{評価}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
321
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
322
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
323 \section{まとめと今後の課題}
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
324
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
325
5a5db338e71c add mind map
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
326 \end{document}