[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.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>