=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/control.tex,v retrieving revision 1.7 retrieving revision 1.13 diff -u -p -r1.7 -r1.13 --- OpenXM/doc/OpenXM-specs/control.tex 2000/11/17 02:50:04 1.7 +++ OpenXM/doc/OpenXM-specs/control.tex 2020/03/14 01:21:56 1.13 @@ -1,22 +1,22 @@ -%% $OpenXM: OpenXM/doc/OpenXM-specs/control.tex,v 1.6 2000/07/27 09:51:04 ohara Exp $ +%% $OpenXM: OpenXM/doc/OpenXM-specs/control.tex,v 1.12 2016/08/27 02:11:01 takayama Exp $ \section{Session Management} \subsection{Control server} /*&jp -OpenXM では, 次に述べるような単純かつロバストなサーバの制御方法 -を採用している. +OpenXM с, 罨<菴違鴻膣ゃ鴻泣若九勝号 +。. -OpenXM サーバは論理的に 2 つの I/O channel をもつ: 一方は計算データ -用であり, 他方は計算制御用である. 制御 channel はサーバを制御する -ためのコマンドを送るために使われる. -サンプルサーバ ({\tt oxmain.c}) では, そのようなコントロールメッセージ -は別のプロセスが行っている. 以下, そのプロセスをコントロールサーバ -と呼ぶ. これに対して, 計算用サーバをエンジンと呼ぶ. -コントロールサーバとエンジンは同一のマシン上で動作する. -このため, コントロールサーバからエンジンに signal を送ることは容易である. -コントロールサーバ自体も OX スタックマシンであり -{\tt SM\_control\_*} コマンドを受け取る. それらはエンジンへの -signal 送信, engine process の終了などの request のためのコマンドである. +OpenXM 泣若茫 2 ゃ I/O channel : 筝鴻荐膊若 +с, 篁鴻荐膊九勝с. 九勝 channel 泣若九勝 +潟潟篏帥. +泣潟泣若 ({\tt oxmain.c}) с, 潟潟若<祉若 +ャ祉鴻茵c. 篁ヤ, 祉鴻潟潟若泣若 +若. 絲障, 荐膊泣若潟吾潟若. +潟潟若泣若潟吾潟筝激割у篏. +, 潟潟若泣若潟吾潟 signal 絎号с. +潟潟若泣若篏 OX 鴻帥激潟с +{\tt SM\_control\_*} 潟潟. 潟吾潟吾 +signal 篆, engine process 腟篋 request 潟潟с. */ /*&eg @@ -36,99 +36,59 @@ OpenXM stack machine and it accepts {\tt SM\_control\_ to send signals to a server or to terminate a server. */ -\subsection{New specification for OpenXM control servers} - +\subsection{New OpenXM control servers} /*&jp - -我々は新しいコントロールサーバを提案する。そのサンプル実装として oxc が -提供される。新しいコントロールサーバは以下の点で従来のものと異なる。 -\begin{enumerate} -\item コントロールサーバは OpenXM スタックマシンであり、 -CMObject/Primitive をサポートする。 -\item 計算サーバの起動はスタックマシンコマンドを介して行う。 -\item 一つのコントロールサーバから複数の計算サーバを起動できる。 -\end{enumerate} - -oxc の導入により、いままでのサーバの起動手順はコントロールサーバの起動と -計算サーバの起動に分離される。コントロールサーバを起動するには次の手順を -取る。まず、適当なオプション(後述)をつけて、コントロールサーバを起動する -と、コントロールサーバはソケットを作成し、connect する。クライアントは、 -listen, accept する。接続後、バイトオーダを決定する。バイトオーダの決定 -については???を見よ。その後、コントロールサーバは待機状態にはいる。コン -トロールサーバは OpenXM スタックマシンであるから、mathcap の交換などの手 -続きに入ってもよい。 - -計算サーバの起動は、oxc のローカル関数 oxc\_open による。oxc\_open は少 -なくとも 4 個の引数を持つ。すなわち、 -\begin{verbatim} -oxc_open(計算サーバ名, ホスト名, ポート番号, モード, ...) -\end{verbatim} -という形式である。ここで、「計算サーバ名」、「ホスト名」は CMO\_STRING -型のオブジェクト、「ポート番号」、「モード」は CMO\_INT32型 -のオブジェクトである。ホスト名というのはOpenXMクライアントのホ -スト名のことである。ローカル関数の実行は SM\_executeFunction による。す -なわち各引数を順にスタックに積み、最後にSM\_executeFunction を実行する。 -SM\_executeStringByLocalParser は利用できないので注意する。 - -oxc\_open は、計算サーバの起動に成功したら (CMO\_INT32, サーバID) を、失 -敗したらエラーオブジェクトをスタックに積む。例えば計算サーバが発見できな -かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは -access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork -をせずに、エラーオブジェクトをスタックに積む。 - -コントロールサーバの実行形式は以下のオプションを許す。 -\begin{verbatim} - --pass - --host - --port -\end{verbatim} +OpenXM RFC 101 Draft 荀 +\htmladdnormallink{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}. */ +/*&eg +See OpenXM RFC 101 Draft. +\htmladdnormallink{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}. +*/ - - \subsection{OpenXM reset protocol} /*&jp -クライアントはコントロールサーバ経由でいつでもエンジンに signal を -送ることができる. しかし, I/O 操作は通常バッファリングされている -ため, トラブルが生ずる場合がある. エンジンを安全にリセットするため -次が必要である. +ゃ≪潟潟潟若泣若腟宴сゃс潟吾潟 signal +с. , I/O 篏絽吾<潟違 +, 翫. 潟吾潟絎祉 +罨<綽荀с. \begin{enumerate} -\item 全ての OX メッセージは Java の意味で synchronized object である. +\item OX <祉若吾 Java 潟 synchronized object с. -\item エンジンのリセット後に送られるクライアントからの計算要求メッセージと -エンジンからの返答が正しく対応していなければならない. +\item 潟吾潟祉緇ゃ≪潟荐膊荀羆<祉若吾 +潟吾潟菴膈罩c鎛上違. \end{enumerate} -{\tt SM\_control\_reset\_connection} は, エンジンの安全なリセットを -行う一連の手続きを開始するための SM コマンドである. -クライアントから {\tt SM\_control\_reset\_connection} がコントロール -サーバに送られると, コントロールサーバは {\tt SIGUSR1} をエンジンに -送る. 以後の手続きは次の通りである. +{\tt SM\_control\_reset\_connection} , 潟吾潟絎祉 +茵筝c膓紮 SM 潟潟с. +ゃ≪潟 {\tt SM\_control\_reset\_connection} 潟潟若 +泣若, 潟潟若泣若 {\tt SIGUSR1} 潟吾潟 +. 篁ュ膓罨<с. \vskip 2mm \noindent -{\it クライアント側} +{\it ゃ≪潟} \begin{enumerate} -\item {\tt SM\_control\_reset\_connection} をコントロールサーバに -送った後, クライアントはリセット状態に入る. リセット状態では, -{\tt OX\_SYNC\_BALL} を受け取るまですべてのメッセージを読みとばす. -\item {\tt OX\_SYNC\_BALL} を受け取ったあと, クライアントは -{\tt OX\_SYNC\_BALL} をエンジンに送り, 通常状態に戻る. +\item {\tt SM\_control\_reset\_connection} 潟潟若泣若 +c緇, ゃ≪潟祉倶ャ. 祉倶с, +{\tt OX\_SYNC\_BALL} 障с鴻<祉若吾茯帥違. +\item {\tt OX\_SYNC\_BALL} c, ゃ≪潟 +{\tt OX\_SYNC\_BALL} 潟吾潟, 絽悟倶祉. \end{enumerate} \noindent -{\it エンジン側} +{\it 潟吾喝} \begin{enumerate} \item -{\tt SIGUSR1} をコントロールサーバから受け取ったら, エンジンは -リセット状態に入る. {\tt OX\_SYNC\_BALL} をクライアントに送る. -この時点でクライアントは既にリセット状態にあるので, この送信が -ブロックされることはない. -\item エンジンは -{\tt OX\_SYNC\_BALL} を受け取るまですべてのメッセージを読みとばす. -{\tt OX\_SYNC\_BALL} を受け取ったら通常状態に戻る. +{\tt SIGUSR1} 潟潟若泣若c, 潟吾潟 +祉倶ャ. {\tt OX\_SYNC\_BALL} ゃ≪潟. +鴻сゃ≪潟≪祉倶, 篆< +. +\item 潟吾潟 +{\tt OX\_SYNC\_BALL} 障с鴻<祉若吾茯帥違. +{\tt OX\_SYNC\_BALL} c絽悟倶祉. \end{enumerate} */ /*&eg @@ -185,12 +145,12 @@ and that the subsequent request from a client correctl corresponds to the response from the engine. */ /*&jp -図 \ref{reset} はデータの流れを示す. -{\tt OX\_SYNC\_BALL} は特殊な OX メッセージであり, -I/O stream に残るデータの終りを示す. -{\tt OX\_SYNC\_BALL} を読んだ後, それぞれの stream は空であり, -後に続くクライアントからのリクエストと, エンジンからの返答が -正しく対応する. + \ref{reset} 若帥羌腓冴. +{\tt OX\_SYNC\_BALL} 号 OX <祉若吾с, +I/O stream 罧若帥腟腓冴. +{\tt OX\_SYNC\_BALL} 茯緇, stream 腥冴с, +緇膓ゃ≪潟鴻, 潟吾潟菴膈 +罩c鎛上. */ \begin{figure}[htbp] \epsfxsize=10cm @@ -209,7 +169,7 @@ I/O stream に残るデータの終りを示す. SM_control_reset_connection \end{verbatim} /*&jp -コントロールサーバに, {\tt SIGUSR1} をエンジンに送るよう要求する. +潟潟若泣若, {\tt SIGUSR1} 潟吾潟荀羆. */ /*&eg It requests a control server to send {\tt SIGUSR1} to the engine. @@ -221,20 +181,41 @@ Request: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_reset\_connection} \\ \hline \end{tabular} -Result: +Result: none. \\ +/*&jp + 鴻潟吾潟 reset protocol 絎茖ィ絅, +絎茖翫, mathcap 膃鐚綣違 option list +{\tt no\_ox\_reset} 篆<鴻с (: oxpari). \\ +*/ +/*&eg + All engines are encouraged to install the reset protocol, +but when it is not implemented, +{\tt no\_ox\_reset} option should be included in the fourth argument +(option list) of the mathcap (ref: oxpari). \\ +*/ +/*&jp +羈: ゃ絎茖(2000綛岩札) control server, client с, +罨<綵√ result code 祉篁絎翫. +ゃ絎茖贋違綽荀с. \\ +*/ +/*&eg +Note: Some old implementations of control servers and clients (before 2000) +assume the result code of the following format. +These obsolete implementations should be updated.\\ +*/ \begin{tabular}{|c|c|} \hline {\tt int32 OX\_DATA} & {\tt CMO\_INT32} {\rm result} \\ \hline -\end{tabular} +\end{tabular}\\ \item \begin{verbatim} SM_control_kill \end{verbatim} /*&jp -サーバはこのメッセージを受信したら -%ただちに返答をおくり, -すべてのファイルをクローズして終了する. +泣若<祉若吾篆< +%<菴膈, +鴻<ゃ若冴腟篋. */ /*&eg It requests a control server to terminate the engine and the control server @@ -253,23 +234,23 @@ Result: none. \medbreak \noindent -//&jp {\bf 例}: (シリアル番号は省略してある.) +//&jp {\bf 箴}: (激≪垩ャ.) //&eg {\bf Example}: (serial numbers are omitted.) \begin{verbatim} 0 0 2 01 (OX_COMMAND) 0 0 4 06 (SM_control_reset_connection) \end{verbatim} -//&jp Reset に対する返事. -//&eg Reply to the reset request -\begin{verbatim} -0 0 2 02 (OX_DATA) -0 0 0 2 (CMO_INT32) -0 0 0 0 ( 0 ) -\end{verbatim} +%//&jp Reset 絲障菴篋. +%//&eg Reply to the reset request +%\begin{verbatim} +%0 0 2 02 (OX_DATA) +%0 0 0 2 (CMO_INT32) +%0 0 0 0 ( 0 ) +%\end{verbatim} -//&jp 第1のチャンネルでは次の {\tt OX\_SYNC\_BALL} が交換されて同期が取られる. +//&jp 膃1c潟с罨< {\tt OX\_SYNC\_BALL} 篋ゆ. //&eg {\tt OX\_SYNC\_BALL} are exchanged on the data channel for synchronization. \begin{verbatim} @@ -279,42 +260,42 @@ Result: none. \subsection{Notification from servers} /*&jp -OpenXM サーバは, 可能であるかぎり寡黙である. -たとえばエラーをおこしても, エラーはサーバのエンジンスタックにつまれる -だけであり, サーバはクライアントが {\tt pop\_cmo} メッセージをおくらない -かぎり何も送信しない. +OpenXM 泣若, 純с絲♂с. +違若, 若泣若潟吾潟鴻帥ゃ障 +с, 泣若ゃ≪潟 {\tt pop\_cmo} <祉若吾 +篏篆<. */ /*&eg -OpenXM servers try to be quiet as far as possible. +OpenXM servers try to be as quiet as possible. For example, engine errors of a server are only put on the engine stack and the engine does not send error packets unless the client sends the message {\tt pop\_cmo}. */ /*&jp -OpenXM はこの原則をやぶる例外的な方法を一つ用意している. -コントロールサーバは, -{\tt OX\_NOTIFY} ヘッダおよびそれにつづく {\tt OX\_DATA} パケットを送る -ことができる. -この機能は mathcap で禁止することも可能である. +OpenXM 吟箴紊号筝ょ. +潟潟若泣若, +{\tt OX\_NOTIFY} 潟ゃャ {\tt OX\_DATA} 宴 +с. +罘純 mathcap х罩≪純с. */ /*&eg -OpenXM provides a method to break this principle. +OpenXM provides a method to notify events. Control server may send {\tt OX\_NOTIFY} header and an {\tt OX\_DATA} packet. -This transmission can be prohibited by mathcap. +This transmission may be prohibited by mathcap. */ /*&jp -この機能をどのように使うか例をあげて説明しよう. -{\tt Asir} の {\tt ox\_plot} サーバは, quit ボタンをもっている. -quit ボタンがおされると canvas が消滅するが, エンジン自体は存在を -つづける. この状態で描画命令がくると, -エンジンスタックに, ``canvas does not exist'' というエラーがつまれる. -エンジンがこのエラーが生じたことを緊急に知らせたいときに -{\tt OX\_NOTIFY} を用いる. +罘純篏帥箴茯. +{\tt Asir} {\tt ox\_plot} 泣若, quit 帥潟c. +quit 帥潟 canvas 羔羯, 潟吾活篏絖 +ゃャ. 倶ф糸巡擦, +潟吾潟鴻帥, ``canvas does not exist'' 若ゃ障. +潟吾潟若膩ャャ +{\tt OX\_NOTIFY} . */ /*&eg -Let us explain how to use {\tt OX\_NOTIFY}. +Let us explain how to use {\tt OX\_NOTIFY} by an example. The {\tt ox\_plot} server of {\tt asir} has a quit button. If the quit button is pressed, the canvas dissappears, but the engine does not terminate. @@ -326,29 +307,34 @@ the {\tt OX\_NOTIFY} message should be used. */ /*&jp -ここで, {\tt OX\_NOTIFY} をおくるのは, コントロールプロセスで -あることに注意しよう. -したがってエンジンはなんらかの方法で, コントロールサーバに -{\tt OX\_NOTIFY} をおくることを依頼しないといけない. -OpenXM の規格では, -ファイル {\tt /tmp/.ox\_notify.pid} に touch することでこれの -一つの実現方法を与えている. -ここで {\tt pid} はエンジンのプロセス番号である. -コントロールサーバはファイル {\tt /tmp/.ox\_notify.pid} が -touch されたことを検出したら, クライアントに -{\tt OX\_NOTIFY} パケットおよび {\tt OX\_DATA} で {\tt cmo\_null} を送る. -エンジンはファイルを用いてコントロールサーバに急を知らせる以外に, -共有メモリやシグナルを用いてしらせてもよい. +, {\tt OX\_NOTIFY} , 潟潟若祉鴻 +羈. +c潟吾潟号, 潟潟若泣若 +{\tt OX\_NOTIFY} 箴若. +号, OS 号純, +, unix с +<ゃ {\tt /tmp/.ox\_notify.pid} touch с +筝ゃ絎憗純с. + {\tt pid} 潟吾潟祉合垩с. +潟潟若泣若<ゃ {\tt /tmp/.ox\_notify.pid} +touch 罎冴, ゃ≪潟 +{\tt OX\_NOTIFY} 宴 {\tt OX\_DATA} {\tt cmo\_null} . +潟吾潟<ゃ潟潟若泣若ャャ篁ュ, +掩<≪激違. */ /*&eg -Let us note that it is the control process that sends {\tt OX\_NOTIFY}. +Let us note that only the control process is allowed to send {\tt OX\_NOTIFY}. Therefore, the engine must ask the control server to send {\tt OX\_NOTIFY}. -In the OpenXM, if the engine touches the file +Methods to ask the control process from the engine +depends on operating system. +In case of unix, one method is the use of a file; +for instance, +if the engine touches the file {\tt /tmp/.ox\_notify.pid}, then the control server sends the {\tt OX\_NOTIFY} header and the {\tt OX\_DATA} packet of {\tt cmo\_null}. Here, {\tt pid} is the process id of the engine. Engines and control processes may use a shared memory or a signal -instead of the file {\tt /tmp.ox\_notify.pid}. +instead of the file {\tt /tmp/.ox\_notify.pid}. */