[BACK]Return to OX-RFC-101.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

Diff for /OpenXM/doc/OpenXM-specs/OX-RFC-101.tex between version 1.2 and 1.6

version 1.2, 2000/11/30 08:46:23 version 1.6, 2000/12/05 23:19:49
Line 1 
Line 1 
 %#!make OX-RFC-101-ja.dvi  %#!make OX-RFC-101-ja.dvi
 % $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-101.tex,v 1.1 2000/11/30 02:41:36 takayama Exp $  % $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-101.tex,v 1.5 2000/12/05 06:38:55 ohara Exp $
 \documentclass{article}  \documentclass{article}
 %%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{}  %%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{}
 \usepackage{html}  \usepackage{html}
Line 50  oxc の導入により、いままでのサーバの起動手順はコントロ
Line 50  oxc の導入により、いままでのサーバの起動手順はコントロ
 計算サーバの起動に分離される。コントロールサーバを起動するには次の手順を  計算サーバの起動に分離される。コントロールサーバを起動するには次の手順を
 取る。まず、適当なオプション(後述)をつけて、コントロールサーバを起動する  取る。まず、適当なオプション(後述)をつけて、コントロールサーバを起動する
 と、コントロールサーバはソケットを作成し、connect する。クライアントは、  と、コントロールサーバはソケットを作成し、connect する。クライアントは、
 listen, accept する。接続後、バイトオーダを決定する。バイトオーダの決定  listen, accept する。接続後、最初にバイトオーダを決定する。バイトオーダ
 方法については、従来のものと変更はない。  の決定方法については、従来のものと変更はない
 OpenXM/doc/OpenXM-specs/control.tex を見よ。その後、コントロールサーバは  (OpenXM/doc/OpenXM-specs/control.tex を見よ)。その後、コントロールサーバ
 待機状態にはいる。コントロールサーバは OpenXM スタックマシンであるから、  は待機状態にはいる。コントロールサーバは OpenXM スタックマシンであるから、
 mathcap の交換などの手続きに入ってもよい。  mathcap の交換などの手続きに入ってもよい。
   
 \subsection{OpenXM control stack machine}  \subsection{OpenXM control stack machine}
Line 66  mathcap の交換などの手続きに入ってもよい。
Line 66  mathcap の交換などの手続きに入ってもよい。
 \begin{verbatim}  \begin{verbatim}
 SM_control_spawn_server  SM_control_spawn_server
 \end{verbatim}  \end{verbatim}
 新たに計算サーバを起動する。サーバの起動に成功すると、その ID を返す。  新たに計算サーバを起動する。計算サーバの起動に成功すると、その ID を返す。
   
 Request:  Request:
 \begin{tabular}{|c|c|}  \hline  \begin{tabular}{|c|c|}  \hline
Line 76  Request:
Line 76  Request:
   
 Stack before the request:  Stack before the request:
 \begin{tabular}{|c|c|}  \hline  \begin{tabular}{|c|c|}  \hline
 {\sl Integer32} Port & {\sl String} ServerName \\  {\sl List} Argument \\
 \hline  \hline
 \end{tabular}  \end{tabular}
   
Line 88  Stack after the request: 
Line 88  Stack after the request: 
   
 Output: none.  Output: none.
   
   Argument:
   \begin{tabular}{|c|c|c|}  \hline
   {\sl List} Ports & {\sl String} ServerName & ...\\
   \hline
   \end{tabular}
   
   Ports:
   \begin{tabular}{|c|c|}  \hline
   {\sl Integer32} Port & ... \\
   \hline
   \end{tabular}
   
 \item  \item
 \begin{verbatim}  \begin{verbatim}
 SM_control_terminate_server  SM_control_terminate_server
Line 161  Output: none.
Line 173  Output: none.
 \bigskip  \bigskip
 \bigskip  \bigskip
   
   \subsection{OpenXM reset protocol}
   OX-RFC-100 に準拠する。
   
 \subsection{A sample implementation}  \subsection{A sample implementation}
   
 \subsubsection{Command Line Arguments}  \subsubsection{Command Line Arguments}
 コントロールサーバの実行形式は getopt(1) に ``c:p:h:x'' で指定するオプショ  コントロールサーバの実行形式は getopt(3) に ``c:p:h:x'' で指定するオプショ
 ンを持つ。すなわち、  ンを持つ。すなわち、
 \begin{verbatim}  \begin{verbatim}
 oxc -c [password] -h [hostname] -p [portnumber] -x  oxc -c [password] -h [hostname] -p [portnumber] -x
 \end{verbatim}  \end{verbatim}
   
   {\tt -h} では、クライアントのホスト名を指定する。クライアントはあらかじめ、
   hostname:port を開いて待ち受けなければならない。
   
   {\tt -x} オプションはなくてもよい。-x を指定し、かつ環境変数 DISPLAY が
   設定されていると、oxc は新たに端末(ウィンドウ)を作成して、メッセージをそ
   の端末に出力する。oxc の用いる端末の種類は環境変数OpenXM\_XTERM で指定す
   る。デフォルトは xterm である。
   
   オプション {\tt -h} が指定されないときには特別な動作を行う。
   
   \subsubsection{パイプを利用した接続}
   
   oxc はオプション {\tt -h} が指定されないときには、コマンドラインで与えら
   れるべき情報を、標準入力から得ようとする。ここでは、この機能について説明
   する。まず、標準入力から受け取るデータは次の形式をしていなければならない。
   \begin{tabular}{|c|c|c|c|c|}
   \hline
   {\sl int32} port & {\sl String} hostname & {\sl byte} 0 & {\sl String} password & {\sl byte} 0\\
   \hline
   \end{tabular}
   
   \medskip
   
   String は C のストリングではなくて、cmo\_string のような、長さ付きの
   ストリングである。
   
   \noindent
   データの例: \\
   port = 1324 = 0x052c, hostname = ``orange'', password = ``hogehoge''
   の場合
   \begin{verbatim}
   00 00 05 2c 00 00 00 07 6f 72 61 6e 67 65 00 00
   00 00 09 68 6f 67 65 68 6f 67 65 00
   \end{verbatim}
   
   さて具体的な起動プロセスは次の通りである。
   
   \begin{enumerate}
   \item
   クライアントは pipe(2) を用いて、ファイルディスクリプタ fd0, fd1 を
   手にいれる。
   \item
   fork(2) で子プロセスを生成し、子プロセスは dup2(fd1, 0) を実行する。
   これで 親プロセスの fd0 と子プロセスの 0 が接続されている。
   \item
   子プロセスは exec("ssh remotehost controlserver") としてリモートプロセ
   ス起動する。このとき、親プロセスの fd0 とリモートプロセスの 0 が接続さ
   れている。
   \item
   この通信路はリモートプロセスからは標準入力として見えている。
   リモートプロセスは標準入力から既に述べたフォーマットにしたがってデータを
   読み込む。リモートプロセスは、そのデータを用いて connect(2) を実行する。
   \end{enumerate}
   
   
 \subsubsection{Local Functions}  \subsubsection{Local Functions}
   
 コントロールサーバの各実装は、独自にローカル関数をサポートしてもよい。  コントロールサーバの各実装は、独自にローカル関数をサポートしてもよい。
Line 177  oxc -c [password] -h [hostname] -p [portnumber] -x
Line 247  oxc -c [password] -h [hostname] -p [portnumber] -x
   
 ここでは、oxc のローカル関数 spawn について説明しよう。  ここでは、oxc のローカル関数 spawn について説明しよう。
   
 spawn は計算サーバを起動し、少なくとも 2 個の引数を持つ。すなわち、  spawn は計算サーバを起動し、少なくとも 1 個の引数を持つ。この引数は
 \begin{verbatim}  SM\_control\_spawn\_server で用いられる {\sl List} Argument と同一の形式で
 spawn(計算サーバ名, ポート番号, モード, ...)  ある。すなわち、スタックに(右がトップ)
 \end{verbatim}  \begin{tabular}{|c|c|c|}  \hline
 という形式である。「モード」はなくてもよい。ここで、「計算サーバ名」は  {\sl List} Argument & {\sl Integer32} 1 & {\sl String} ``spawn'' \\
 CMO\_STRING 型のオブジェクト、「ポート番号」、「モード」は CMO\_INT32型  \hline
 のオブジェクトである。ローカル関数の実行は SM\_executeFunction による。  \end{tabular}
 すなわち各引数を順にスタックに積み、最後にSM\_executeFunction を実行する。  を積み、SM\_executeFunction をコントローラに送る。
 SM\_executeStringByLocalParser は利用できないので注意する。  SM\_executeStringByLocalParser は利用できないので注意する。
   
 spawn は、計算サーバの起動に成功したら (CMO\_INT32, サーバID) を、失  spawn は、計算サーバの起動に成功したら (CMO\_INT32, サーバID) を、失
Line 192  spawn は、計算サーバの起動に成功したら (CMO\_INT32, サ
Line 262  spawn は、計算サーバの起動に成功したら (CMO\_INT32, サ
 かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは  かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは
 access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork  access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork
 をせずに、エラーオブジェクトをスタックに積む。  をせずに、エラーオブジェクトをスタックに積む。
   
 */  */
   
 /*&eg  /*&eg

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.6

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>