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