Annotation of OpenXM/doc/OpenXM-specs/communication-model.tex, Revision 1.7
1.7 ! takayama 1: %% $OpenXM: OpenXM/doc/OpenXM-specs/communication-model.tex,v 1.6 2000/01/24 02:48:24 noro Exp $
1.6 noro 2: //&jp \section{ OpenXM の通信モデル}
3: //&eg \section{ Communication model of OpenXM}
1.1 noro 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 の利用.
1.7 ! takayama 16: \item JAVA RMI.
1.1 noro 17: \item マルチスレッドの利用.
18: \item PVM ライブラリの利用.
19: \item MPI ライブラリの利用.
20: \end{enumerate}
21:
22: 通信とはプロセス間のメッセージのやりとりである.
23: メッセージは論理的に次のような構造をもつ:
24: */
25: /*&eg
1.6 noro 26: In our model of computation, mathematical processes proceed
1.1 noro 27: a computation by exchanging messages. Each process is a stack machine,
28: which is called an OX stack machine.
1.3 noro 29: The following methods are possible to realize communications between
1.1 noro 30: mathematical processes.
31: \begin{enumerate}
32: \item Communication by files.
33: \item Linking as a subroutine library.
34: \item TCP/IP streams.
35: \item Remote Procedure call.
1.7 ! takayama 36: \item JAVA RMI.
1.6 noro 37: \item Multi-thread.
1.1 noro 38: \item PVM library.
39: \item MPI library.
40: \end{enumerate}
41:
1.6 noro 42: In OpenXM communication means exchange of messages between processes.
1.1 noro 43: A message has the following structure:
44: */
45: /*&C
46: \begin{center}
47: \begin{tabular}{|c|c|c|}
48: \cline{1-2}
49: {\tt destination} & {\tt origin} & \multicolumn{1}{}{} \\ \hline
50: {\tt extension}&{\tt ox message\_tag}&{\tt message\_body} \\
51: \hline
52: \end{tabular}
53: \end{center}
54: */
55: /*&jp
1.6 noro 56: このメッセージを, OX message (OpenXM message object) とよぶ.
1.1 noro 57: OX Message はトップレベルのメッセージ object であり,
58: 仕様書では, さまざまなグループに属する object が登場する.
1.6 noro 59: グループ名は, たとえば, OX Message/TCPIP/Primitive などと書く.
1.1 noro 60: {\tt message\_body} の部分の仕様は, OX Message
61: の上位に位置する部分であり, SMobject または CMObject がくる.
62: これらの object はタグをもち, そのタグ定数は {\tt SM\_} または
63: {\tt CMO\_} ではじまる.
64: SMobject は, スタックマシンコマンドメッセージ object であり,
65: やはり, グループ分けされている.
66: 各グループ名は,
1.6 noro 67: SMobject/Primitive, SMobject/Basic などと書く.
1.1 noro 68: SMobject の構造は
69: サーバスタックマシンの節で詳しく説明する.
1.6 noro 70: CMObject についてはすでに Primitive の CMObject の説明をしたが,
1.1 noro 71: あとで CMObject レベル 1の説明をする.
72: OX Message の
73: {\tt ox message\_tag} の定数は {\tt OX\_} で始まる.
74: */
75: /*&eg
76: We call it an OX message (OpenXM message object).
1.6 noro 77: OX message is the top level message object.
1.1 noro 78: The OX messages are classified into three types: DATA, COMMAND,
79: and SPECIAL. They are distinguished by {\tt ox message\_tag}.
80: The name of an ox message tag begins with {\tt OX\_}.
1.3 noro 81: Typical OX message tags are {\tt OX\_COMMAND} followed by
1.6 noro 82: SMobject and {\tt OX\_DATA} followed by CMObject.
1.1 noro 83: Each message object also has its tag. For SMobject, the name
1.6 noro 84: of a tag begins with {\tt SM\_}. For CMObject, the name of
1.1 noro 85: a tag begins with {\tt CMO\_}.
86: An SMobject represents a stack machine command and categorized
1.6 noro 87: into several groups such as SMobject/Primitive, SMobject/Basic.
1.1 noro 88: The details of SMobjects will be explained in Section \ref{sec:stackmachine}.
1.6 noro 89: We have already explained the Primitive CMObjects.
90: We will describe the Basic CMObjects in Section \ref{sec:basic1}.
1.1 noro 91: */
92: //&jp \subsection{ OX Message の 表現方法 }
93: //&eg \subsection{ OX Messages }
94:
95: /*&jp
1.6 noro 96: OpenXM で各プロセスは
1.1 noro 97: \begin{center}
98: (OXexpression を理解するスタックマシン) $+$ (xxx 言語で動くエンジン)
99: \end{center}
100: なるハイブリッド構成である.
101: このプロセスを, OX スタックマシンと呼ぶ.
102: ここでは, OX スタックマシンとやりとりするメッセージである,
103: OX Message を表現するための OXexpression, および,
104: スタックマシンの operator に対応する, SMobject を表現するための SMexpression
105: を定義しよう.
106: OX Message を スタックマシンコマンド,
107: SMobject を スタックマシンオペレータともよぶ.
108: */
109:
1.2 noro 110: /*&eg
1.6 noro 111: In OpenXM, each process may have a hybrid interface;
1.2 noro 112: it may accept and execute not only stack machine commands,
113: but also its original command sequences.
114: We call such a process an OX stack machine.
115: Here we introduce OXexpression and SMexpression
116: to express OX messages and SM objects respectively.
117: */
118:
1.1 noro 119: /*&C
120: \begin{eqnarray*}
121: \mbox{OXexpression}
122: &:& \quad
123: \mbox{\tt (} \mbox{\tt OX\_tag} \
124: [\mbox{ expression}] \mbox{\tt )}\\
125: \mbox{expression}
126: &:& \quad \mbox{SMexpression} \\
127: & &|\ \mbox{CMOexpression} \\
128: \mbox{SMexpression}
129: &:& \mbox{\tt (} \mbox{\tt SM\_tag} \
130: \{ \mbox{CMOexpression} \} \mbox{\tt )}\\
131: \end{eqnarray*}
132: */
133: /*&jp
134: expression の各要素を区切るために {\tt ,} (コンマ) を用いてもよい.
135: {\tt OX\_tag} は {\tt OX\_} で始まる定数である.
136: {\tt SM\_tag} は {\tt SM\_} で始まるスタックマシンオペレータを識別する定数である.
137: 発信元 AAA, 受信先 BBB を書く必要があるときは,
138: From AAA, To BBB, を OXexpression の前に書く.
139: 必要なければ省略する.
140:
141: たとえば, あとで説明する, CMO string ``Hello'' を スタックにプッシュする
142: 表現は次のように書く:
143: */
1.2 noro 144:
145: /*&eg
1.6 noro 146: A comma `{\tt ,}' may be used to separate elements in an expression.
1.2 noro 147: {\tt OX\_tag} is a constant which denotes an OX message tag.
148: {\tt SM\_tag} is a constant which denotes an SM command tag.
149: If a sender AAA or a receiver BBB has to be specified,
150: 'From AAA' or 'To BBB' is written before the OXexpression.
151:
152: For example the following expression means a request to
153: push a CMO string ``Hello''.
154: */
1.1 noro 155: /*&C
156: \begin{center}
157: (OX\_DATA, (CMO\_STRING, 5, "Hello"))
158: \end{center}
159: */
160:
161:
1.6 noro 162: /*&eg
1.2 noro 163: The following expression means a request to execute
164: a local function ``hoge''.
1.1 noro 165: */
166:
167: /*&C
168: \begin{center}
169: (OX\_DATA, (CMO\_STRING, 5, "hoge"))
170: \end{center}
171: \begin{center}
172: (OX\_COMMAND, SM\_executeStringByLocalParser)
173: \end{center}
174: */
175:
176: /*&jp
1.7 ! takayama 177: 標準エンコード法では, それぞれのタグは 32 bit (4 bytes) の
! 178: ネットワークバイトオーダでの整数として表現される.
! 179: */
! 180: /*&eg
1.2 noro 181: In our standard encoding method, each tag is expressed as
1.7 ! takayama 182: a 32 bit (4 bytes) integer with the network byte order.
! 183: */
! 184:
! 185: /*&C
! 186:
! 187: */
! 188:
! 189: /*&jp
! 190: OX メッセージは XML で表現することも可能である. 次に例を示す.
! 191: */
! 192: /*&eg
! 193: OX messages can be expressed by XML. The following is an example.
! 194: */
! 195: /*&C
! 196: \begin{verbatim}
! 197: <ox>
! 198: <ox_data>
! 199: <ox_serial> <int32> 0 </int32> </ox_serial>
! 200: <cmo> <cmo_string>
! 201: <int32 for="length"> 5 </int32>
! 202: <string> "Hello" </string>
! 203: </cmo_string>
! 204: </cmo>
! 205: </ox_data>
! 206: <ox_command>
! 207: <ox_serial> <int32> 1 </int32> </ox_serial>
! 208: <sm_popCMO/>
! 209: </ox_command>
! 210: </ox>
! 211: \end{verbatim}
1.1 noro 212: */
213:
214: //&jp \subsection{OXexpression の 標準 encoding と TCP/IP ソケットによる実装法}
1.6 noro 215: //&eg \subsection{Standard encoding of OXexpressions and an implementation by TCP/IP sockets}
1.1 noro 216: /*&jp
1.2 noro 217: 通信の実現方法は通信路のとりかたによりかわるが,
218: 論理構造は統一的にあつかわないといけない.
219: OXexpression はその論理構造を記述している.
220:
221: ここでは OXexpression の標準 encoding の概略を説明する.
222: この encoding 法はTCP/IP ソケット用の encoding 法として
223: 現在存在しているサーバに使用されている.
224: さらにOX スタックマシンの計算状態を制御するための, コントロールメッセージに
225: ついても説明する.
226:
227:
228: {\tt destination}, {\tt origin} の部分は, ソケットによる
229: peer to peer の接続なので省略する.
230: {\tt extension} フィールドは
231: {\tt message\_tag} フィールドの次にくる.
232: {\tt extension} フィールドは OX パケットのシリアル番号がはいる.
233: シリアル番号は {\tt int32} である.
234: この番号は, サーバがエラーを起こした場合, エラーをおこした,
235: OX パケットの番号を戻すのに主に利用される.
236: 以下 {\tt extension} フィールドは, {\tt message\_tag} の
237: に含まれると理解し {\tt extension} フィールドは省略する.
238: したがってパケットは
239: 次のように記述する
240: */
241:
242: /*&eg
243: The logical structure of OX messages are independent of implementations
1.3 noro 244: of communication. The OXexpression represents the logical structure.
245: Here we explain an outline of the standard encoding scheme of OXexpression.
246: This encoding scheme is used to implement OpenXM protocols on TCP/IP sockets.
247: In addition, we also explain the control messages to control stack machines.
248:
249: As the socket connection is peer to peer, {\tt destination} and {\tt origin}
250: are omitted.
251: The {\tt extension} field is placed after the {\tt message\_tag} field.
252: The {\tt extension} field consists of the serial number for OX message,
253: which is {\tt int32}.
254: The serial number is used to identify an OX message which caused
255: an error on a server.
256: In the following we regard the {\tt extension} as a component of
257: the {\tt message\_tag} field and omit the {\tt extension} field.
258: Thus OX messages are represented as follows.
1.1 noro 259: */
260: /*&C
261: \begin{center}
262: \begin{tabular}{|c|c|}
263: \hline
264: {\tt ox message\_tag}&{\tt message\_body} \\
265: \hline
266: \end{tabular}
267: \end{center}
268: */
1.6 noro 269: //&jp \noindent が, もっとこまかく見ると,
270: //&eg \noindent More precisely it has the following representation.
1.1 noro 271: /*&C
272: \begin{center}
273: \begin{tabular}{|c|c|}
274: \hline
1.6 noro 275: {\tt ox message\_tag}, \ {\tt serial number}&{\tt message\_body} \\
1.1 noro 276: \hline
277: \end{tabular}
278: \end{center}
279: */
280: /*&jp
1.6 noro 281: \noindent
1.1 noro 282: となっている.
283:
1.6 noro 284: グループ OX Message/TCPIP/Primitive の
1.1 noro 285: {\tt ox message\_tag} としては次のものが用意されている.
286: */
1.6 noro 287: //&eg \noindent As {\tt ox message\_tag} the following are provided.
1.1 noro 288:
289: /*&C
290: @plugin/oxMessageTag.h
291: \begin{verbatim}
292: #define OX_COMMAND 513
293: #define OX_DATA 514
294:
295: #define OX_DATA_WITH_LENGTH 521
296: #define OX_DATA_OPENMATH_XML 523
297: #define OX_DATA_OPENMATH_BINARY 524
298: #define OX_DATA_MP 525
299:
300: #define OX_SYNC_BALL 515
301: \end{verbatim}
302: */
303:
304: /*&jp
305: 通信路は 2 つ用意する.
306: 1番目の通信路は
307: \verb+ OX_COMMAND +
308: および
309: \verb+ OX_DATA +
310: がながれる.
311: 2番目の通信路 ({\tt control}と呼ぶ) には,
312: \verb+ OX_COMMAND + およびそれに続くコントロールコマンド
313: \verb+ SM_control_* +
314: またはコントロール関係のデータ, つまり header
315: \verb+ OX_DATA + ではじまりそれに続く CMO データ
316: がながれる.
317: これらをコントロールメッセージおよびコントロールメッセージの結果
318: メッセージと呼ぶ.
319: サンプルサーバでは, この 2 つの通信路を, 2 つのポートを用いて
320: 実現している.
321:
322:
1.3 noro 323: \verb+ OX_COMMAND + メッセージは次の形のパケットで表現される: \\
324: */
325: /*&eg
1.6 noro 326: Two streams are provided for communication between a client and a server.
1.3 noro 327: One is the stream to exchange data and to send stack machine commands.
328: The other is the stream to control stack machines.
329: Messages on the latter stream are called control messages and
330: results of control messages. The sample server implements
331: the above two streams by using two ports on TCP/IP.
332:
333: The stack machine command message has the following forms: \\
1.1 noro 334: */
335: /*&C
1.6 noro 336: \noindent
1.1 noro 337: \begin{tabular}{|c|c|}
338: \hline
339: {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline
340: {\it message\_tag} & {\it message\_body}
341: \\ \hline
342: \end{tabular}, \quad
343: ({\tt OX\_COMMAND}, ({\tt SM\_*}))
344: \\
345: */
346:
1.3 noro 347: //&jp \verb+ OX_DATA + メッセージは次の形のパケットで表現される: \\
348: //&eg CMO data message has the following form:\\
1.1 noro 349: /*&C
350: \begin{tabular}{|c|c|}
351: \hline
352: {\tt OX\_DATA} & {\tt CMO data} \\ \hline
353: {\it message\_tag} & {\it message\_body}\\ \hline
354: \end{tabular}, \quad
355: ({\tt OX\_DATA}, {\sl CMObject} data)
356: \\
357: */
1.3 noro 358: //&jp コントロールメッセージは次の形のパケットで表現される: \\
359: //&eg The control message has the following form:\\
1.1 noro 360: /*&C
361: \begin{tabular}{|c|c|}
362: \hline
363: {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline
364: \end{tabular}, \quad
365: ({\tt OX\_COMMAND},({\tt SM\_control\_*}))
366: \\
367: */
368: /*&jp
369: コントロールメッセージは, 計算を中断したい, debug 用の スレッドを起動する,
370: debug モードを抜けたい, などの用途に利用する.
1.3 noro 371: */
372: /*&eg
373: The control message is used to interrupt a computation, to invoke
374: debugging threads, or to exit form the debugging mode.
375: */
1.1 noro 376:
1.3 noro 377: //&jp コントロールメッセージの結果メッセージは次の形のパケットで表現される: \\
1.6 noro 378: //&eg The result of a control message has the following form:\\
1.1 noro 379: /*&C
380: \begin{tabular}{|c|c|l|}
381: \hline
382: {\tt OX\_DATA} & {\tt CMO\_INT32} & {\tt int32 data} \\ \hline
383: \end{tabular}, \quad
384: ({\tt OX\_DATA}, {\sl Integer32 } n)
385: \\
386: */
387:
388:
389: /*&jp
390: {\tt int32 function\_id}
391: の部分に, サーバスタックマシン の operator に対応する番号がはいる.
1.6 noro 392: グループ SMobject/Primitive および SMobject/Basic に属する
1.1 noro 393: タグとして以下のものがある.
394: */
1.3 noro 395: /*&eg
396: {\tt int32 function\_id} is the value of a stack machine command.
1.6 noro 397: SM tags in SMobject/Primitive and SMobject/Basic and corresponding
1.3 noro 398: values are as follows.
399: */
1.1 noro 400: /*&C
401: @plugin/oxFunctionId.h
402: \begin{verbatim}
403: #define SM_popSerializedLocalObject 258
404: #define SM_popCMO 262
405: #define SM_popString 263
406:
407: #define SM_mathcap 264
408: #define SM_pops 265
409: #define SM_setName 266
410: #define SM_evalName 267
411: #define SM_executeStringByLocalParser 268
412: #define SM_executeFunction 269
413: #define SM_beginBlock 270
414: #define SM_endBlock 271
415: #define SM_shutdown 272
416: #define SM_setMathCap 273
417: #define SM_executeStringByLocalParserInBatchMode 274
418: #define SM_getsp 275
419: #define SM_dupErrors 276
420:
421:
422: #define SM_control_kill 1024
423: #define SM_control_reset_connection 1030
424: \end{verbatim}
425: */
426:
1.6 noro 427: //&jp \noindent たとえば,
428: //&eg \noindent For example
1.5 noro 429: /*&C
1.1 noro 430: \begin{center}
431: (OX\_COMMAND, SM\_pops)
432: \end{center}
433: */
1.6 noro 434: //&jp \noindent は
435: //&eg \noindent is encoded as follows.
1.3 noro 436: /*&C
1.1 noro 437: \begin{center}
438: \begin{tabular}{|c|c|}
439: \hline
440: {\tt int32} 513 & {\tt int32} 265 \\
441: \hline
442: \end{tabular}
443: \end{center}
444: */
1.3 noro 445: //&jp とエンコードされる.
446:
1.1 noro 447: /*&jp
448: operator の詳細は次の節で説明する.
449: これらの定数の名前はインプリメントのとき短縮形で表現してもよい.
1.3 noro 450: */
451: /*&eg
1.6 noro 452: The details of the operators are described in Section \ref{sec:stackmachine}.
1.4 noro 453: Names of these constants may be represented by abbreviated forms.
1.1 noro 454: */
455:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>