=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/communication-model.tex,v retrieving revision 1.1.1.1 retrieving revision 1.12 diff -u -p -r1.1.1.1 -r1.12 --- OpenXM/doc/OpenXM-specs/communication-model.tex 2000/01/20 08:52:46 1.1.1.1 +++ OpenXM/doc/OpenXM-specs/communication-model.tex 2020/03/14 01:21:56 1.12 @@ -1,43 +1,45 @@ -%% $OpenXM$ -//&jp \section{ Open XM の通信モデル} -//&eg \section{ Communication model of Open XM} (This part has not yet been translated) +%% $OpenXM: OpenXM/doc/OpenXM-specs/communication-model.tex,v 1.11 2016/08/28 02:43:13 takayama Exp $ +//&jp \section{ OpenXM 篆<≪} +//&eg \section{ Communication model of OpenXM} /*&jp -われわれは, 数学プロセスがメッセージを -交換しながら計算が進行していくというモデルを想定して設計をすすめている. -各プロセスはスタックマシンであり, これを OX スタックマシンとよぶ. -数学プロセスの間の通信路の確保の仕方としては以下のように -いろいろな実現方法を想定している. +, 医祉鴻<祉若吾 +篋ゆ荐膊画≪喝荐荐. +祉鴻鴻帥激潟с, OX 鴻帥激潟. +医祉鴻篆∴君腆坂篁鴻篁ヤ +絎憝号喝. \begin{enumerate} -\item ファイルを介して通信する. -\item Library として直接リンクして通信する. -\item TCP/IP ソケットの利用. -\item Remote Procedure call の利用. -\item マルチスレッドの利用. -\item PVM ライブラリの利用. -\item MPI ライブラリの利用. +\item <ゃ篁篆<. +\item Library 贋・潟篆<. +\item TCP/IP 純宴. +\item Remote Procedure call . +\item JAVA RMI. +\item 鴻. +\item PVM ゃ. +\item MPI ゃ. \end{enumerate} -通信とはプロセス間のメッセージのやりとりである. -メッセージは論理的に次のような構造をもつ: +篆<祉拷<祉若吾с. +<祉若吾茫罨<罕: */ /*&eg -In our model of comutation, mathematical processes proceed +In our model of computation, mathematical processes proceed a computation by exchanging messages. Each process is a stack machine, which is called an OX stack machine. -The following method are possible to realize communications between +The following methods are possible to realize communications between mathematical processes. \begin{enumerate} \item Communication by files. \item Linking as a subroutine library. \item TCP/IP streams. \item Remote Procedure call. -\item Muitithread. +\item JAVA RMI. +\item Multi-thread. \item PVM library. \item MPI library. \end{enumerate} -In OpenXM Communication is exechange of messages between processes. +In OpenXM communication means exchange of messages between processes. A message has the following structure: */ /*&C @@ -51,90 +53,71 @@ A message has the following structure: \end{center} */ /*&jp -このメッセージを, OX Message (Open XM message object) とよぶ. -OX Message はトップレベルのメッセージ object であり, -仕様書では, さまざまなグループに属する object が登場する. -グループ名は, たとえば, OX Message/TCPIP/Basic0 などと書く. -{\tt message\_body} の部分の仕様は, OX Message -の上位に位置する部分であり, SMobject または CMObject がくる. -これらの object はタグをもち, そのタグ定数は {\tt SM\_} または -{\tt CMO\_} ではじまる. -SMobject は, スタックマシンコマンドメッセージ object であり, -やはり, グループ分けされている. -各グループ名は, -SMobject/Basic0, SMobject/Basic1 などと書く. -SMobject の構造は -サーバスタックマシンの節で詳しく説明する. -CMObject についてはすでに Basic0 の CMObject の説明をしたが, -あとで CMObject レベル 1の説明をする. -OX Message の -{\tt ox message\_tag} の定数は {\tt OX\_} で始まる. - -このメッセージを, OX Message (Open XM message object) とよぶ. -OX Message はトップレベルのメッセージ object であり, -仕様書では, さまざまなグループに属する object が登場する. -グループ名は, たとえば, OX Message/TCPIP/Basic0 などと書く. -{\tt message\_body} の部分の仕様は, OX Message -の上位に位置する部分であり, SMobject または CMObject がくる. -これらの object はタグをもち, そのタグ定数は {\tt SM\_} または -{\tt CMO\_} ではじまる. -SMobject は, スタックマシンコマンドメッセージ object であり, -やはり, グループ分けされている. -各グループ名は, -SMobject/Basic0, SMobject/Basic1 などと書く. -SMobject の構造は -サーバスタックマシンの節で詳しく説明する. -CMObject についてはすでに Basic0 の CMObject の説明をしたが, -あとで CMObject レベル 1の説明をする. -OX Message の -{\tt ox message\_tag} の定数は {\tt OX\_} で始まる. +<祉若吾, OX message (OpenXM message object) . +OX Message <祉若 object с, +篁罕吾с, 障障違若絮 object 糸眼. +違若, , OX Message/TCPIP/Primitive 吾. +{\tt message\_body} 篁罕, OX Message +筝篏篏臀с, SMobject 障 CMObject . + object 帥違, 帥医違 {\tt SM\_} 障 +{\tt CMO\_} с障. +SMobject , 鴻帥激潟潟潟<祉若 object с, +, 違若. +違若, +SMobject/Primitive, SMobject/Basic 吾. +SMobject 罕 +泣若鴻帥激潟膀ц潟顄. +CMObject ゃс Primitive CMObject 茯, + CMObject 1茯. +OX Message +{\tt ox message\_tag} 絎違 {\tt OX\_} у障. */ /*&eg We call it an OX message (OpenXM message object). -OX Message is the top level message object. +OX message is the top level message object. The OX messages are classified into three types: DATA, COMMAND, and SPECIAL. They are distinguished by {\tt ox message\_tag}. -{\tt message\_body} depends on the {\tt ox message\_tag}. The name of an ox message tag begins with {\tt OX\_}. -The following table shows the correspondence between -an OX message tag and a message body. - -\begin{center} -\begin{tabular}{|c||c|c|} \hline -ox message tag & message body & category \\ \hline -{\tt OX\_DATA} & CMOobject & DATA \\ \hline -{\tt OX\_COMMAND} & SMobject & COMMAND \\ \hline -{\tt OX\_DATA\_OPENMATH\_XML} & OpenMath data & DATA \\ \hline -\end{tabular} -\end{center} - +Typical OX message tags are {\tt OX\_COMMAND} followed by +SMobject and {\tt OX\_DATA} followed by CMObject. Each message object also has its tag. For SMobject, the name -of a tag begins with {\tt SM\_}. For CMOobject, the name of +of a tag begins with {\tt SM\_}. For CMObject, the name of a tag begins with {\tt CMO\_}. An SMobject represents a stack machine command and categorized -into several groups such as SMobject/Basic0, SMobject/Basic1. +into several groups such as SMobject/Primitive, SMobject/Basic. The details of SMobjects will be explained in Section \ref{sec:stackmachine}. -We have already explained the Basic0 CMOobjects. -We will describe the Basic1 CMOobjects later. +We have already explained the Primitive CMObjects. +We will describe the Basic CMObjects in Section \ref{sec:basic1}. */ -//&jp \subsection{ OX Message の 表現方法 } +//&jp \subsection{ OX Message 茵憝号 } //&eg \subsection{ OX Messages } /*&jp -Open XM で各プロセスは +OpenXM у祉鴻 \begin{center} -(OXexpression を理解するスタックマシン) $+$ (xxx 言語で動くエンジン) +(OXexpression 茹c鴻帥激) $+$ (xxx 荐茯у潟吾) \end{center} -なるハイブリッド構成である. -このプロセスを, OX スタックマシンと呼ぶ. -ここでは, OX スタックマシンとやりとりするメッセージである, -OX Message を表現するための OXexpression, および, -スタックマシンの operator に対応する, SMobject を表現するための SMexpression -を定義しよう. -OX Message を スタックマシンコマンド, -SMobject を スタックマシンオペレータともよぶ. +ゃ罕с. +祉鴻, OX 鴻帥激潟若. +с, OX 鴻帥激潟<祉若吾с, +OX Message 茵憗 OXexpression, , +鴻帥激潟 operator 絲上, SMobject 茵憗 SMexpression +絎臂. +OX Message 鴻帥激潟潟潟, +SMobject 鴻帥激潟若帥. */ +/*&eg +In OpenXM, each process may have a hybrid interface; +it may accept and execute not only stack machine commands, +but also its original command sequences. +We call such a process an OX stack machine. +Here we introduce OXexpression and SMexpression +to express OX messages and SM objects respectively. +*/ + +//&jp \subsubsection{ OX <祉若吾茵憝 (Lisp 蘂) } +//&eg \subsubsection{ Expressions of OX messages (Lisp like) } /*&C \begin{eqnarray*} \mbox{OXexpression} @@ -150,16 +133,27 @@ SMobject を スタックマシンオペレータともよぶ. \end{eqnarray*} */ /*&jp -expression の各要素を区切るために {\tt ,} (コンマ) を用いてもよい. -{\tt OX\_tag} は {\tt OX\_} で始まる定数である. -{\tt SM\_tag} は {\tt SM\_} で始まるスタックマシンオペレータを識別する定数である. -発信元 AAA, 受信先 BBB を書く必要があるときは, -From AAA, To BBB, を OXexpression の前に書く. -必要なければ省略する. +expression 荀膣阪 {\tt ,} (潟潟) . +{\tt OX\_tag} {\tt OX\_} у障絎違с. +{\tt SM\_tag} {\tt SM\_} у障鴻帥激潟若帥茘ャ絎違с. +坂拭 AAA, 篆≦ BBB 吾鏆荀, +From AAA, To BBB, OXexpression 吾. +綽荀亥ャ. -たとえば, あとで説明する, CMO string ``Hello'' を スタックにプッシュする -表現は次のように書く: +, ц, CMO string ``Hello'' 鴻帥激ャ +茵憗罨<吾: */ + +/*&eg +A comma `{\tt ,}' may be used to separate elements in an expression. +{\tt OX\_tag} is a constant which denotes an OX message tag. +{\tt SM\_tag} is a constant which denotes an SM command tag. +If a sender AAA or a receiver BBB has to be specified, +'From AAA' or 'To BBB' is written before the OXexpression. + +For example the following expression means a request to +push a CMO string ``Hello''. +*/ /*&C \begin{center} (OX\_DATA, (CMO\_STRING, 5, "Hello")) @@ -167,14 +161,14 @@ From AAA, To BBB, を OXexpression の前に書く. */ -/*&jp -あとで説明するように, local 関数 ``hoge'' を実行する スタックマシンコマンドは -次のように表現する: +/*&eg +The following expression means a request to execute +a local function ``hoge''. */ /*&C \begin{center} -(OX\_DATA, (CMO\_STRING, 5, "hoge")) +(OX\_DATA, (CMO\_STRING, 4, "hoge")) \end{center} \begin{center} (OX\_COMMAND, SM\_executeStringByLocalParser) @@ -182,37 +176,92 @@ From AAA, To BBB, を OXexpression の前に書く. */ /*&jp -標準 encoding 法では, 各 タグを ネットワークバイトオーダーの -32 bit integer で表現する. +罔羣潟潟若羈с, 帥違 32 bit (4 bytes) +若ゃ若с贋違茵憗. */ +/*&eg +In our standard encoding method, each tag is expressed as +a 32 bit (4 bytes) integer with the network byte order. +*/ -//&jp \subsection{OXexpression の 標準 encoding と TCP/IP ソケットによる実装法} -//*eg \subsection{Standard enconding of OXexpressions and an implementation by TCP/IP sockets} +/*&C + +*/ + +//&jp \subsubsection{ OX <祉若吾茵 (XML) } +//&eg \subsubsection{ Expression of OX messages (XML) } + /*&jp -通信の実現方法は通信路のとりかたによりかわるが, -論理構造は統一的にあつかわないといけない. -OXexpression はその論理構造を記述している. +OX <祉若吾 XML ц;憗純с. 罨<箴腓冴. +*/ +/*&eg +OX messages can be expressed by XML. The following is an example. +*/ +/*&C +\begin{verbatim} + + + 0 + + 5 + "Hello" + + + + + 1 + + + +\end{verbatim} +*/ -ここでは OXexpression の標準 encoding の概略を説明する. -この encoding 法はTCP/IP ソケット用の encoding 法として -現在存在しているサーバに使用されている. -さらにOX スタックマシンの計算状態を制御するための, コントロールメッセージに -ついても説明する. +//&jp \subsection{OXexpression 罔羣 encoding TCP/IP 純宴絎茖羈} +//&eg \subsection{Standard encoding of OXexpressions and an implementation by TCP/IP sockets} +/*&jp +篆<絎憝号篆∴君, +茫罕腟延ゃ. +OXexpression 茫罕荐菴違. +с OXexpression 罔羣 encoding 网ャ茯. + encoding 羈TCP/IP 純宴 encoding 羈 +憜絖泣若篏睡. +OX 鴻帥激潟荐膊倶九勝, 潟潟若<祉若吾 +ゃ茯. -{\tt destination}, {\tt origin} の部分は, ソケットによる -peer to peer の接続なので省略する. -{\tt extension} フィールドは -{\tt message\_tag} フィールドの次にくる. -{\tt extension} フィールドは OX パケットのシリアル番号がはいる. -シリアル番号は {\tt int32} である. -この番号は, サーバがエラーを起こした場合, エラーをおこした, -OX パケットの番号を戻すのに主に利用される. -以下 {\tt extension} フィールドは, {\tt message\_tag} の -に含まれると理解し {\tt extension} フィールドは省略する. -したがってパケットは -次のように記述する + +{\tt destination}, {\tt origin} , 純宴 +peer to peer ・膓хャ. +{\tt extension} c若 +{\tt message\_tag} c若罨<. +{\tt extension} c若 OX 宴激≪垩. +激≪垩 {\tt int32} с. +垩, 泣若若莎激翫, 若, +OX 宴垩祉筝祉. +篁ヤ {\tt extension} c若, {\tt message\_tag} +障茹c {\tt extension} c若ャ. +c宴 +罨<荐菴違 */ + +/*&eg +The logical structure of OX messages are independent of implementations +of communication. The OXexpression represents the logical structure. +Here we explain an outline of the standard encoding scheme of OXexpression. +This encoding scheme is used to implement OpenXM protocols on TCP/IP sockets. +In addition, we also explain the control messages to control stack machines. + +As the socket connection is peer to peer, {\tt destination} and {\tt origin} +are omitted. +The {\tt extension} field is placed after the {\tt message\_tag} field. +The {\tt extension} field consists of the serial number for OX message, +which is {\tt int32}. +The serial number is used to identify an OX message which caused +an error on a server. +In the following we regard the {\tt extension} as a component of +the {\tt message\_tag} field and omit the {\tt extension} field. +Thus OX messages are represented as follows. +*/ /*&C \begin{center} \begin{tabular}{|c|c|} @@ -222,22 +271,25 @@ OX パケットの番号を戻すのに主に利用される. \end{tabular} \end{center} */ -//&jp が, もっとこまかく見ると, +//&jp \noindent , c障頳, +//&eg \noindent More precisely it has the following representation. /*&C \begin{center} \begin{tabular}{|c|c|} \hline -{\tt ox message\_tag}, \ {\tt packet number}&{\tt message\_body} \\ +{\tt ox message\_tag}, \ {\tt serial number}&{\tt message\_body} \\ \hline \end{tabular} \end{center} */ /*&jp -となっている. +\noindent +c. -グループ OX Message/TCPIP/Basic0 の -{\tt ox message\_tag} としては次のものが用意されている. +違若 OX Message/TCPIP/Primitive +{\tt ox message\_tag} 罨<. */ +//&eg \noindent As {\tt ox message\_tag} the following are provided. /*&C @plugin/oxMessageTag.h @@ -251,31 +303,43 @@ OX パケットの番号を戻すのに主に利用される. #define OX_DATA_MP 525 #define OX_SYNC_BALL 515 +#define OX_NOTIFY 516 \end{verbatim} */ /*&jp -通信路は 2 つ用意する. -1番目の通信路は +篆∴君 2 ょ. +1篆∴君 \verb+ OX_COMMAND + -および + \verb+ OX_DATA + -がながれる. -2番目の通信路 ({\tt control}と呼ぶ) には, -\verb+ OX_COMMAND + およびそれに続くコントロールコマンド +. +2篆∴君 ({\tt control}若) , +\verb+ OX_COMMAND + 潟膓潟潟若潟潟 \verb+ SM_control_* + -またはコントロール関係のデータ, つまり header -\verb+ OX_DATA + ではじまりそれに続く CMO データ -がながれる. -これらをコントロールメッセージおよびコントロールメッセージの結果 -メッセージと呼ぶ. -サンプルサーバでは, この 2 つの通信路を, 2 つのポートを用いて -実現している. +障潟潟若≫若, ゃ障 header +\verb+ OX_DATA + с障膓 CMO 若 +. +潟潟若<祉若吾潟潟潟若<祉若吾腟 +<祉若吾若. +泣潟泣若с, 2 ゃ篆∴君, 2 ゃ若 +絎憗. -\verb+ OX_COMMAND + メッセージは次の形のパケット: \\ +\verb+ OX_COMMAND + <祉若吾罨<綵≪宴ц;憗: \\ */ +/*&eg +Two streams are provided for communication between a client and a server. +One is the stream to exchange data and to send stack machine commands. +The other is the stream to control stack machines. +Messages on the latter stream are called control messages and +results of control messages. The sample server implements +the above two streams by using two ports on TCP/IP. + +The stack machine command message has the following forms: \\ +*/ /*&C +\noindent \begin{tabular}{|c|c|} \hline {\tt OX\_COMMAND} & {\tt int32 function\_id} \\ \hline @@ -286,7 +350,8 @@ OX パケットの番号を戻すのに主に利用される. \\ */ -//&jp \verb+ OX_DATA + メッセージは次の形のパケット: \\ +//&jp \verb+ OX_DATA + <祉若吾罨<綵≪宴ц;憗: \\ +//&eg CMO data message has the following form:\\ /*&C \begin{tabular}{|c|c|} \hline @@ -296,11 +361,8 @@ OX パケットの番号を戻すのに主に利用される. ({\tt OX\_DATA}, {\sl CMObject} data) \\ */ -/*&jp -データは CMO を用いて表現する. - -コントロールメッセージは次の形のパケット: \\ -*/ +//&jp 潟潟若<祉若吾罨<綵≪宴ц;憗: \\ +//&eg The control message has the following form:\\ /*&C \begin{tabular}{|c|c|} \hline @@ -310,11 +372,16 @@ OX パケットの番号を戻すのに主に利用される. \\ */ /*&jp -コントロールメッセージは, 計算を中断したい, debug 用の スレッドを起動する, -debug モードを抜けたい, などの用途に利用する. - -コントロールメッセージの結果メッセージは次の形のパケット: \\ +潟潟若<祉若吾, 荐膊筝, debug 鴻莎桁, +debug ≪若, . */ +/*&eg +The control message is used to interrupt a computation, to invoke +debugging threads, or to exit form the debugging mode. +*/ + +//&jp 潟潟若<祉若吾腟<祉若吾罨<綵≪宴ц;憗: \\ +//&eg The result of a control message has the following form:\\ /*&C \begin{tabular}{|c|c|l|} \hline @@ -327,10 +394,15 @@ debug モードを抜けたい, などの用途に利用する. /*&jp {\tt int32 function\_id} -の部分に, サーバスタックマシン の operator に対応する番号がはいる. -グループ SMobject/Basic0 および SMobject/Basic1 に属する -タグとして以下のものがある. +, 泣若鴻帥激 operator 絲上垩. +違若 SMobject/Primitive SMobject/Basic 絮 +帥違篁ヤ. */ +/*&eg +{\tt int32 function\_id} is the value of a stack machine command. +SM tags in SMobject/Primitive and SMobject/Basic and corresponding +values are as follows. +*/ /*&C @plugin/oxFunctionId.h \begin{verbatim} @@ -352,20 +424,23 @@ debug モードを抜けたい, などの用途に利用する. #define SM_getsp 275 #define SM_dupErrors 276 +#define SM_nop 300 /* do nothing */ #define SM_control_kill 1024 #define SM_control_reset_connection 1030 \end{verbatim} */ -//&jp たとえば, -/*C +//&jp \noindent , +//&eg \noindent For example +/*&C \begin{center} (OX\_COMMAND, SM\_pops) \end{center} */ -//&jp は -/*C +//&jp \noindent +//&eg \noindent is encoded as follows. +/*&C \begin{center} \begin{tabular}{|c|c|} \hline @@ -374,10 +449,14 @@ debug モードを抜けたい, などの用途に利用する. \end{tabular} \end{center} */ -/*&jp -とエンコードされる. +//&jp 潟潟若. -operator の詳細は次の節で説明する. -これらの定数の名前はインプリメントのとき短縮形で表現してもよい. +/*&jp +operator 荅括完罨<膀ц. +絎違ゃ潟<潟膰綵≪ц;憗. +*/ +/*&eg +The details of the operators are described in Section \ref{sec:stackmachine}. +Names of these constants may be represented by abbreviated forms. */