=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/control.tex,v retrieving revision 1.3 retrieving revision 1.10 diff -u -p -r1.3 -r1.10 --- OpenXM/doc/OpenXM-specs/control.tex 2000/01/24 00:57:11 1.3 +++ OpenXM/doc/OpenXM-specs/control.tex 2016/08/22 09:08:50 1.10 @@ -1,4 +1,4 @@ -%% $OpenXM: OpenXM/doc/OpenXM-specs/control.tex,v 1.2 2000/01/23 00:41:08 noro Exp $ +%% $OpenXM: OpenXM/doc/OpenXM-specs/control.tex,v 1.9 2002/01/20 09:26:22 takayama Exp $ \section{Session Management} \subsection{Control server} @@ -26,7 +26,7 @@ control servers. An OpenXM server has logically two I/O channels: one for exchanging data for computations and the other for controlling computations. The control channel is used to send commands to control execution on the -server. The sample server ({\tt oxmain.c}) processes such control +nserver. The sample server ({\tt oxmain.c}) processes such control messages on another process. We call such a process a {\it control server}. In contrast, we call a server for computation an {\it engine}. As the control server and the engine runs on the @@ -36,6 +36,16 @@ OpenXM stack machine and it accepts {\tt SM\_control\_ to send signals to a server or to terminate a server. */ +\subsection{New OpenXM control servers} +/*&jp +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 @@ -143,8 +153,10 @@ I/O stream に残るデータの終りを示す. 正しく対応する. */ \begin{figure}[htbp] -\epsfxsize=12cm +\epsfxsize=10cm +\begin{center} \epsffile{reset.eps} +\end{center} \caption{OpenXM reset procedure} \label{reset} \end{figure} @@ -174,6 +186,17 @@ Result: {\tt int32 OX\_DATA} & {\tt CMO\_INT32} {\rm result} \\ \hline \end{tabular} +/*&jp + すべてエンジンは reset protocol を実装することが推奨されるが, +実装していない場合は, mathcap の第4引数の 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). +*/ \item \begin{verbatim} @@ -195,7 +218,7 @@ Request: \begin{tabular}{|c|c|} \hline {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_kill} \\ \hline -\end{tabular} +\end{tabular}\\ Result: none. \end{enumerate} @@ -224,4 +247,84 @@ Result: none. 0 0 2 03 (OX_SYNC_BALL) \end{verbatim} +\subsection{Notification from servers} +/*&jp +OpenXM サーバは, 可能であるかぎり寡黙である. +たとえばエラーをおこしても, エラーはサーバのエンジンスタックにつまれる +だけであり, サーバはクライアントが {\tt pop\_cmo} メッセージをおくらない +かぎり何も送信しない. +*/ +/*&eg +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 で禁止することも可能である. +*/ +/*&eg +OpenXM provides a method to notify events. +Control server may send {\tt OX\_NOTIFY} header and an {\tt OX\_DATA} packet. +This transmission may be prohibited by mathcap. +*/ + +/*&jp +この機能をどのように使うか例をあげて説明しよう. +{\tt Asir} の {\tt ox\_plot} サーバは, quit ボタンをもっている. +quit ボタンがおされると canvas が消滅するが, エンジン自体は存在を +つづける. この状態で描画命令がくると, +エンジンスタックに, ``canvas does not exist'' というエラーがつまれる. +エンジンがこのエラーが生じたことを緊急に知らせたいときに +{\tt OX\_NOTIFY} を用いる. +*/ +/*&eg +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. +If the client sends drawing messages without the canvas, +then the engine pushes +error packets ``canvas does not exist'' on the engine stack. +If the engine wants to notify the error to the client immediately, +the {\tt OX\_NOTIFY} message should be used. +*/ + +/*&jp +ここで, {\tt OX\_NOTIFY} をおくるのは, コントロールプロセスで +あることに注意しよう. +したがってエンジンはなんらかの方法で, コントロールサーバに +{\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 only the control process is allowed to send {\tt OX\_NOTIFY}. +Therefore, the engine must ask the control server to send +{\tt OX\_NOTIFY}. +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}. +*/