[BACK]Return to communication-model.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

Annotation of OpenXM/doc/OpenXM-specs/communication-model.tex, Revision 1.6

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>