Annotation of OpenXM/doc/OpenXM-specs/communication-model.tex, Revision 1.2
1.2 ! noro 1: %% $OpenXM: OpenXM/doc/OpenXM-specs/communication-model.tex,v 1.1.1.1 2000/01/20 08:52:46 noro Exp $
1.1 noro 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:
1.2 ! noro 138: /*&eg
! 139: In Open XM, each process may have a hybrid interface;
! 140: it may accept and execute not only stack machine commands,
! 141: but also its original command sequences.
! 142: We call such a process an OX stack machine.
! 143: Here we introduce OXexpression and SMexpression
! 144: to express OX messages and SM objects respectively.
! 145: */
! 146:
1.1 noro 147: /*&C
148: \begin{eqnarray*}
149: \mbox{OXexpression}
150: &:& \quad
151: \mbox{\tt (} \mbox{\tt OX\_tag} \
152: [\mbox{ expression}] \mbox{\tt )}\\
153: \mbox{expression}
154: &:& \quad \mbox{SMexpression} \\
155: & &|\ \mbox{CMOexpression} \\
156: \mbox{SMexpression}
157: &:& \mbox{\tt (} \mbox{\tt SM\_tag} \
158: \{ \mbox{CMOexpression} \} \mbox{\tt )}\\
159: \end{eqnarray*}
160: */
161: /*&jp
162: expression の各要素を区切るために {\tt ,} (コンマ) を用いてもよい.
163: {\tt OX\_tag} は {\tt OX\_} で始まる定数である.
164: {\tt SM\_tag} は {\tt SM\_} で始まるスタックマシンオペレータを識別する定数である.
165: 発信元 AAA, 受信先 BBB を書く必要があるときは,
166: From AAA, To BBB, を OXexpression の前に書く.
167: 必要なければ省略する.
168:
169: たとえば, あとで説明する, CMO string ``Hello'' を スタックにプッシュする
170: 表現は次のように書く:
171: */
1.2 ! noro 172:
! 173: /*&eg
! 174: A comman `{\tt ,}' may be used to separate elements in an expression.
! 175: {\tt OX\_tag} is a constant which denotes an OX message tag.
! 176: {\tt SM\_tag} is a constant which denotes an SM command tag.
! 177: If a sender AAA or a receiver BBB has to be specified,
! 178: 'From AAA' or 'To BBB' is written before the OXexpression.
! 179:
! 180: For example the following expression means a request to
! 181: push a CMO string ``Hello''.
! 182: */
1.1 noro 183: /*&C
184: \begin{center}
185: (OX\_DATA, (CMO\_STRING, 5, "Hello"))
186: \end{center}
187: */
188:
189:
190: /*&jp
1.2 ! noro 191: The following expression means a request to execute
! 192: a local function ``hoge''.
1.1 noro 193: */
194:
195: /*&C
196: \begin{center}
197: (OX\_DATA, (CMO\_STRING, 5, "hoge"))
198: \end{center}
199: \begin{center}
200: (OX\_COMMAND, SM\_executeStringByLocalParser)
201: \end{center}
202: */
203:
204: /*&jp
1.2 ! noro 205: In our standard encoding method, each tag is expressed as
! 206: a 32 bit (4 byte) integer with the network byte order.
1.1 noro 207: */
208:
209: //&jp \subsection{OXexpression の 標準 encoding と TCP/IP ソケットによる実装法}
210: //*eg \subsection{Standard enconding of OXexpressions and an implementation by TCP/IP sockets}
211: /*&jp
1.2 ! noro 212: 通信の実現方法は通信路のとりかたによりかわるが,
! 213: 論理構造は統一的にあつかわないといけない.
! 214: OXexpression はその論理構造を記述している.
! 215:
! 216: ここでは OXexpression の標準 encoding の概略を説明する.
! 217: この encoding 法はTCP/IP ソケット用の encoding 法として
! 218: 現在存在しているサーバに使用されている.
! 219: さらにOX スタックマシンの計算状態を制御するための, コントロールメッセージに
! 220: ついても説明する.
! 221:
! 222:
! 223: {\tt destination}, {\tt origin} の部分は, ソケットによる
! 224: peer to peer の接続なので省略する.
! 225: {\tt extension} フィールドは
! 226: {\tt message\_tag} フィールドの次にくる.
! 227: {\tt extension} フィールドは OX パケットのシリアル番号がはいる.
! 228: シリアル番号は {\tt int32} である.
! 229: この番号は, サーバがエラーを起こした場合, エラーをおこした,
! 230: OX パケットの番号を戻すのに主に利用される.
! 231: 以下 {\tt extension} フィールドは, {\tt message\_tag} の
! 232: に含まれると理解し {\tt extension} フィールドは省略する.
! 233: したがってパケットは
! 234: 次のように記述する
! 235: */
! 236:
! 237: /*&eg
! 238: The logical structure of OX messages are independent of implementations
! 239: of communication.
1.1 noro 240: 通信の実現方法は通信路のとりかたによりかわるが,
241: 論理構造は統一的にあつかわないといけない.
242: OXexpression はその論理構造を記述している.
243:
244: ここでは OXexpression の標準 encoding の概略を説明する.
245: この encoding 法はTCP/IP ソケット用の encoding 法として
246: 現在存在しているサーバに使用されている.
247: さらにOX スタックマシンの計算状態を制御するための, コントロールメッセージに
248: ついても説明する.
249:
250:
251: {\tt destination}, {\tt origin} の部分は, ソケットによる
252: peer to peer の接続なので省略する.
253: {\tt extension} フィールドは
254: {\tt message\_tag} フィールドの次にくる.
255: {\tt extension} フィールドは OX パケットのシリアル番号がはいる.
256: シリアル番号は {\tt int32} である.
257: この番号は, サーバがエラーを起こした場合, エラーをおこした,
258: OX パケットの番号を戻すのに主に利用される.
259: 以下 {\tt extension} フィールドは, {\tt message\_tag} の
260: に含まれると理解し {\tt extension} フィールドは省略する.
261: したがってパケットは
262: 次のように記述する
263: */
264: /*&C
265: \begin{center}
266: \begin{tabular}{|c|c|}
267: \hline
268: {\tt ox message\_tag}&{\tt message\_body} \\
269: \hline
270: \end{tabular}
271: \end{center}
272: */
273: //&jp が, もっとこまかく見ると,
274: /*&C
275: \begin{center}
276: \begin{tabular}{|c|c|}
277: \hline
278: {\tt ox message\_tag}, \ {\tt packet number}&{\tt message\_body} \\
279: \hline
280: \end{tabular}
281: \end{center}
282: */
283: /*&jp
284: となっている.
285:
286: グループ OX Message/TCPIP/Basic0 の
287: {\tt ox message\_tag} としては次のものが用意されている.
288: */
289:
290: /*&C
291: @plugin/oxMessageTag.h
292: \begin{verbatim}
293: #define OX_COMMAND 513
294: #define OX_DATA 514
295:
296: #define OX_DATA_WITH_LENGTH 521
297: #define OX_DATA_OPENMATH_XML 523
298: #define OX_DATA_OPENMATH_BINARY 524
299: #define OX_DATA_MP 525
300:
301: #define OX_SYNC_BALL 515
302: \end{verbatim}
303: */
304:
305: /*&jp
306: 通信路は 2 つ用意する.
307: 1番目の通信路は
308: \verb+ OX_COMMAND +
309: および
310: \verb+ OX_DATA +
311: がながれる.
312: 2番目の通信路 ({\tt control}と呼ぶ) には,
313: \verb+ OX_COMMAND + およびそれに続くコントロールコマンド
314: \verb+ SM_control_* +
315: またはコントロール関係のデータ, つまり header
316: \verb+ OX_DATA + ではじまりそれに続く CMO データ
317: がながれる.
318: これらをコントロールメッセージおよびコントロールメッセージの結果
319: メッセージと呼ぶ.
320: サンプルサーバでは, この 2 つの通信路を, 2 つのポートを用いて
321: 実現している.
322:
323:
324: \verb+ OX_COMMAND + メッセージは次の形のパケット: \\
325: */
326: /*&C
327: \begin{tabular}{|c|c|}
328: \hline
329: {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline
330: {\it message\_tag} & {\it message\_body}
331: \\ \hline
332: \end{tabular}, \quad
333: ({\tt OX\_COMMAND}, ({\tt SM\_*}))
334: \\
335: */
336:
337: //&jp \verb+ OX_DATA + メッセージは次の形のパケット: \\
338: /*&C
339: \begin{tabular}{|c|c|}
340: \hline
341: {\tt OX\_DATA} & {\tt CMO data} \\ \hline
342: {\it message\_tag} & {\it message\_body}\\ \hline
343: \end{tabular}, \quad
344: ({\tt OX\_DATA}, {\sl CMObject} data)
345: \\
346: */
347: /*&jp
348: データは CMO を用いて表現する.
349:
350: コントロールメッセージは次の形のパケット: \\
351: */
352: /*&C
353: \begin{tabular}{|c|c|}
354: \hline
355: {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline
356: \end{tabular}, \quad
357: ({\tt OX\_COMMAND},({\tt SM\_control\_*}))
358: \\
359: */
360: /*&jp
361: コントロールメッセージは, 計算を中断したい, debug 用の スレッドを起動する,
362: debug モードを抜けたい, などの用途に利用する.
363:
364: コントロールメッセージの結果メッセージは次の形のパケット: \\
365: */
366: /*&C
367: \begin{tabular}{|c|c|l|}
368: \hline
369: {\tt OX\_DATA} & {\tt CMO\_INT32} & {\tt int32 data} \\ \hline
370: \end{tabular}, \quad
371: ({\tt OX\_DATA}, {\sl Integer32 } n)
372: \\
373: */
374:
375:
376: /*&jp
377: {\tt int32 function\_id}
378: の部分に, サーバスタックマシン の operator に対応する番号がはいる.
379: グループ SMobject/Basic0 および SMobject/Basic1 に属する
380: タグとして以下のものがある.
381: */
382: /*&C
383: @plugin/oxFunctionId.h
384: \begin{verbatim}
385: #define SM_popSerializedLocalObject 258
386: #define SM_popCMO 262
387: #define SM_popString 263
388:
389: #define SM_mathcap 264
390: #define SM_pops 265
391: #define SM_setName 266
392: #define SM_evalName 267
393: #define SM_executeStringByLocalParser 268
394: #define SM_executeFunction 269
395: #define SM_beginBlock 270
396: #define SM_endBlock 271
397: #define SM_shutdown 272
398: #define SM_setMathCap 273
399: #define SM_executeStringByLocalParserInBatchMode 274
400: #define SM_getsp 275
401: #define SM_dupErrors 276
402:
403:
404: #define SM_control_kill 1024
405: #define SM_control_reset_connection 1030
406: \end{verbatim}
407: */
408:
409: //&jp たとえば,
410: /*C
411: \begin{center}
412: (OX\_COMMAND, SM\_pops)
413: \end{center}
414: */
415: //&jp は
416: /*C
417: \begin{center}
418: \begin{tabular}{|c|c|}
419: \hline
420: {\tt int32} 513 & {\tt int32} 265 \\
421: \hline
422: \end{tabular}
423: \end{center}
424: */
425: /*&jp
426: とエンコードされる.
427:
428: operator の詳細は次の節で説明する.
429: これらの定数の名前はインプリメントのとき短縮形で表現してもよい.
430: */
431:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>