Annotation of OpenXM/doc/OpenXM-specs/communication-model.tex, Revision 1.1.1.1
1.1 noro 1: %% $OpenXM$
2: //&jp \section{ Open XM の通信モデル}
3: //&eg \section{ Communication model of Open XM} (This part has not yet been translated)
4:
5: /*&jp
6: われわれは, 数学プロセスがメッセージを
7: 交換しながら計算が進行していくというモデルを想定して設計をすすめている.
8: 各プロセスはスタックマシンであり, これを OX スタックマシンとよぶ.
9: 数学プロセスの間の通信路の確保の仕方としては以下のように
10: いろいろな実現方法を想定している.
11: \begin{enumerate}
12: \item ファイルを介して通信する.
13: \item Library として直接リンクして通信する.
14: \item TCP/IP ソケットの利用.
15: \item Remote Procedure call の利用.
16: \item マルチスレッドの利用.
17: \item PVM ライブラリの利用.
18: \item MPI ライブラリの利用.
19: \end{enumerate}
20:
21: 通信とはプロセス間のメッセージのやりとりである.
22: メッセージは論理的に次のような構造をもつ:
23: */
24: /*&eg
25: In our model of comutation, mathematical processes proceed
26: a computation by exchanging messages. Each process is a stack machine,
27: which is called an OX stack machine.
28: The following method are possible to realize communications between
29: mathematical processes.
30: \begin{enumerate}
31: \item Communication by files.
32: \item Linking as a subroutine library.
33: \item TCP/IP streams.
34: \item Remote Procedure call.
35: \item Muitithread.
36: \item PVM library.
37: \item MPI library.
38: \end{enumerate}
39:
40: In OpenXM Communication is exechange of messages between processes.
41: A message has the following structure:
42: */
43: /*&C
44: \begin{center}
45: \begin{tabular}{|c|c|c|}
46: \cline{1-2}
47: {\tt destination} & {\tt origin} & \multicolumn{1}{}{} \\ \hline
48: {\tt extension}&{\tt ox message\_tag}&{\tt message\_body} \\
49: \hline
50: \end{tabular}
51: \end{center}
52: */
53: /*&jp
54: このメッセージを, OX Message (Open XM message object) とよぶ.
55: OX Message はトップレベルのメッセージ object であり,
56: 仕様書では, さまざまなグループに属する object が登場する.
57: グループ名は, たとえば, OX Message/TCPIP/Basic0 などと書く.
58: {\tt message\_body} の部分の仕様は, OX Message
59: の上位に位置する部分であり, SMobject または CMObject がくる.
60: これらの object はタグをもち, そのタグ定数は {\tt SM\_} または
61: {\tt CMO\_} ではじまる.
62: SMobject は, スタックマシンコマンドメッセージ object であり,
63: やはり, グループ分けされている.
64: 各グループ名は,
65: SMobject/Basic0, SMobject/Basic1 などと書く.
66: SMobject の構造は
67: サーバスタックマシンの節で詳しく説明する.
68: CMObject についてはすでに Basic0 の CMObject の説明をしたが,
69: あとで CMObject レベル 1の説明をする.
70: OX Message の
71: {\tt ox message\_tag} の定数は {\tt OX\_} で始まる.
72:
73: このメッセージを, OX Message (Open XM message object) とよぶ.
74: OX Message はトップレベルのメッセージ object であり,
75: 仕様書では, さまざまなグループに属する object が登場する.
76: グループ名は, たとえば, OX Message/TCPIP/Basic0 などと書く.
77: {\tt message\_body} の部分の仕様は, OX Message
78: の上位に位置する部分であり, SMobject または CMObject がくる.
79: これらの object はタグをもち, そのタグ定数は {\tt SM\_} または
80: {\tt CMO\_} ではじまる.
81: SMobject は, スタックマシンコマンドメッセージ object であり,
82: やはり, グループ分けされている.
83: 各グループ名は,
84: SMobject/Basic0, SMobject/Basic1 などと書く.
85: SMobject の構造は
86: サーバスタックマシンの節で詳しく説明する.
87: CMObject についてはすでに Basic0 の CMObject の説明をしたが,
88: あとで CMObject レベル 1の説明をする.
89: OX Message の
90: {\tt ox message\_tag} の定数は {\tt OX\_} で始まる.
91: */
92: /*&eg
93: We call it an OX message (OpenXM message object).
94: OX Message is the top level message object.
95: The OX messages are classified into three types: DATA, COMMAND,
96: and SPECIAL. They are distinguished by {\tt ox message\_tag}.
97: {\tt message\_body} depends on the {\tt ox message\_tag}.
98: The name of an ox message tag begins with {\tt OX\_}.
99: The following table shows the correspondence between
100: an OX message tag and a message body.
101:
102: \begin{center}
103: \begin{tabular}{|c||c|c|} \hline
104: ox message tag & message body & category \\ \hline
105: {\tt OX\_DATA} & CMOobject & DATA \\ \hline
106: {\tt OX\_COMMAND} & SMobject & COMMAND \\ \hline
107: {\tt OX\_DATA\_OPENMATH\_XML} & OpenMath data & DATA \\ \hline
108: \end{tabular}
109: \end{center}
110:
111: Each message object also has its tag. For SMobject, the name
112: of a tag begins with {\tt SM\_}. For CMOobject, the name of
113: a tag begins with {\tt CMO\_}.
114: An SMobject represents a stack machine command and categorized
115: into several groups such as SMobject/Basic0, SMobject/Basic1.
116: The details of SMobjects will be explained in Section \ref{sec:stackmachine}.
117: We have already explained the Basic0 CMOobjects.
118: We will describe the Basic1 CMOobjects later.
119: */
120: //&jp \subsection{ OX Message の 表現方法 }
121: //&eg \subsection{ OX Messages }
122:
123: /*&jp
124: Open XM で各プロセスは
125: \begin{center}
126: (OXexpression を理解するスタックマシン) $+$ (xxx 言語で動くエンジン)
127: \end{center}
128: なるハイブリッド構成である.
129: このプロセスを, OX スタックマシンと呼ぶ.
130: ここでは, OX スタックマシンとやりとりするメッセージである,
131: OX Message を表現するための OXexpression, および,
132: スタックマシンの operator に対応する, SMobject を表現するための SMexpression
133: を定義しよう.
134: OX Message を スタックマシンコマンド,
135: SMobject を スタックマシンオペレータともよぶ.
136: */
137:
138: /*&C
139: \begin{eqnarray*}
140: \mbox{OXexpression}
141: &:& \quad
142: \mbox{\tt (} \mbox{\tt OX\_tag} \
143: [\mbox{ expression}] \mbox{\tt )}\\
144: \mbox{expression}
145: &:& \quad \mbox{SMexpression} \\
146: & &|\ \mbox{CMOexpression} \\
147: \mbox{SMexpression}
148: &:& \mbox{\tt (} \mbox{\tt SM\_tag} \
149: \{ \mbox{CMOexpression} \} \mbox{\tt )}\\
150: \end{eqnarray*}
151: */
152: /*&jp
153: expression の各要素を区切るために {\tt ,} (コンマ) を用いてもよい.
154: {\tt OX\_tag} は {\tt OX\_} で始まる定数である.
155: {\tt SM\_tag} は {\tt SM\_} で始まるスタックマシンオペレータを識別する定数である.
156: 発信元 AAA, 受信先 BBB を書く必要があるときは,
157: From AAA, To BBB, を OXexpression の前に書く.
158: 必要なければ省略する.
159:
160: たとえば, あとで説明する, CMO string ``Hello'' を スタックにプッシュする
161: 表現は次のように書く:
162: */
163: /*&C
164: \begin{center}
165: (OX\_DATA, (CMO\_STRING, 5, "Hello"))
166: \end{center}
167: */
168:
169:
170: /*&jp
171: あとで説明するように, local 関数 ``hoge'' を実行する スタックマシンコマンドは
172: 次のように表現する:
173: */
174:
175: /*&C
176: \begin{center}
177: (OX\_DATA, (CMO\_STRING, 5, "hoge"))
178: \end{center}
179: \begin{center}
180: (OX\_COMMAND, SM\_executeStringByLocalParser)
181: \end{center}
182: */
183:
184: /*&jp
185: 標準 encoding 法では, 各 タグを ネットワークバイトオーダーの
186: 32 bit integer で表現する.
187: */
188:
189: //&jp \subsection{OXexpression の 標準 encoding と TCP/IP ソケットによる実装法}
190: //*eg \subsection{Standard enconding of OXexpressions and an implementation by TCP/IP sockets}
191: /*&jp
192: 通信の実現方法は通信路のとりかたによりかわるが,
193: 論理構造は統一的にあつかわないといけない.
194: OXexpression はその論理構造を記述している.
195:
196: ここでは OXexpression の標準 encoding の概略を説明する.
197: この encoding 法はTCP/IP ソケット用の encoding 法として
198: 現在存在しているサーバに使用されている.
199: さらにOX スタックマシンの計算状態を制御するための, コントロールメッセージに
200: ついても説明する.
201:
202:
203: {\tt destination}, {\tt origin} の部分は, ソケットによる
204: peer to peer の接続なので省略する.
205: {\tt extension} フィールドは
206: {\tt message\_tag} フィールドの次にくる.
207: {\tt extension} フィールドは OX パケットのシリアル番号がはいる.
208: シリアル番号は {\tt int32} である.
209: この番号は, サーバがエラーを起こした場合, エラーをおこした,
210: OX パケットの番号を戻すのに主に利用される.
211: 以下 {\tt extension} フィールドは, {\tt message\_tag} の
212: に含まれると理解し {\tt extension} フィールドは省略する.
213: したがってパケットは
214: 次のように記述する
215: */
216: /*&C
217: \begin{center}
218: \begin{tabular}{|c|c|}
219: \hline
220: {\tt ox message\_tag}&{\tt message\_body} \\
221: \hline
222: \end{tabular}
223: \end{center}
224: */
225: //&jp が, もっとこまかく見ると,
226: /*&C
227: \begin{center}
228: \begin{tabular}{|c|c|}
229: \hline
230: {\tt ox message\_tag}, \ {\tt packet number}&{\tt message\_body} \\
231: \hline
232: \end{tabular}
233: \end{center}
234: */
235: /*&jp
236: となっている.
237:
238: グループ OX Message/TCPIP/Basic0 の
239: {\tt ox message\_tag} としては次のものが用意されている.
240: */
241:
242: /*&C
243: @plugin/oxMessageTag.h
244: \begin{verbatim}
245: #define OX_COMMAND 513
246: #define OX_DATA 514
247:
248: #define OX_DATA_WITH_LENGTH 521
249: #define OX_DATA_OPENMATH_XML 523
250: #define OX_DATA_OPENMATH_BINARY 524
251: #define OX_DATA_MP 525
252:
253: #define OX_SYNC_BALL 515
254: \end{verbatim}
255: */
256:
257: /*&jp
258: 通信路は 2 つ用意する.
259: 1番目の通信路は
260: \verb+ OX_COMMAND +
261: および
262: \verb+ OX_DATA +
263: がながれる.
264: 2番目の通信路 ({\tt control}と呼ぶ) には,
265: \verb+ OX_COMMAND + およびそれに続くコントロールコマンド
266: \verb+ SM_control_* +
267: またはコントロール関係のデータ, つまり header
268: \verb+ OX_DATA + ではじまりそれに続く CMO データ
269: がながれる.
270: これらをコントロールメッセージおよびコントロールメッセージの結果
271: メッセージと呼ぶ.
272: サンプルサーバでは, この 2 つの通信路を, 2 つのポートを用いて
273: 実現している.
274:
275:
276: \verb+ OX_COMMAND + メッセージは次の形のパケット: \\
277: */
278: /*&C
279: \begin{tabular}{|c|c|}
280: \hline
281: {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline
282: {\it message\_tag} & {\it message\_body}
283: \\ \hline
284: \end{tabular}, \quad
285: ({\tt OX\_COMMAND}, ({\tt SM\_*}))
286: \\
287: */
288:
289: //&jp \verb+ OX_DATA + メッセージは次の形のパケット: \\
290: /*&C
291: \begin{tabular}{|c|c|}
292: \hline
293: {\tt OX\_DATA} & {\tt CMO data} \\ \hline
294: {\it message\_tag} & {\it message\_body}\\ \hline
295: \end{tabular}, \quad
296: ({\tt OX\_DATA}, {\sl CMObject} data)
297: \\
298: */
299: /*&jp
300: データは CMO を用いて表現する.
301:
302: コントロールメッセージは次の形のパケット: \\
303: */
304: /*&C
305: \begin{tabular}{|c|c|}
306: \hline
307: {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline
308: \end{tabular}, \quad
309: ({\tt OX\_COMMAND},({\tt SM\_control\_*}))
310: \\
311: */
312: /*&jp
313: コントロールメッセージは, 計算を中断したい, debug 用の スレッドを起動する,
314: debug モードを抜けたい, などの用途に利用する.
315:
316: コントロールメッセージの結果メッセージは次の形のパケット: \\
317: */
318: /*&C
319: \begin{tabular}{|c|c|l|}
320: \hline
321: {\tt OX\_DATA} & {\tt CMO\_INT32} & {\tt int32 data} \\ \hline
322: \end{tabular}, \quad
323: ({\tt OX\_DATA}, {\sl Integer32 } n)
324: \\
325: */
326:
327:
328: /*&jp
329: {\tt int32 function\_id}
330: の部分に, サーバスタックマシン の operator に対応する番号がはいる.
331: グループ SMobject/Basic0 および SMobject/Basic1 に属する
332: タグとして以下のものがある.
333: */
334: /*&C
335: @plugin/oxFunctionId.h
336: \begin{verbatim}
337: #define SM_popSerializedLocalObject 258
338: #define SM_popCMO 262
339: #define SM_popString 263
340:
341: #define SM_mathcap 264
342: #define SM_pops 265
343: #define SM_setName 266
344: #define SM_evalName 267
345: #define SM_executeStringByLocalParser 268
346: #define SM_executeFunction 269
347: #define SM_beginBlock 270
348: #define SM_endBlock 271
349: #define SM_shutdown 272
350: #define SM_setMathCap 273
351: #define SM_executeStringByLocalParserInBatchMode 274
352: #define SM_getsp 275
353: #define SM_dupErrors 276
354:
355:
356: #define SM_control_kill 1024
357: #define SM_control_reset_connection 1030
358: \end{verbatim}
359: */
360:
361: //&jp たとえば,
362: /*C
363: \begin{center}
364: (OX\_COMMAND, SM\_pops)
365: \end{center}
366: */
367: //&jp は
368: /*C
369: \begin{center}
370: \begin{tabular}{|c|c|}
371: \hline
372: {\tt int32} 513 & {\tt int32} 265 \\
373: \hline
374: \end{tabular}
375: \end{center}
376: */
377: /*&jp
378: とエンコードされる.
379:
380: operator の詳細は次の節で説明する.
381: これらの定数の名前はインプリメントのとき短縮形で表現してもよい.
382: */
383:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>