version 1.3, 2000/11/30 10:15:24 |
version 1.6, 2000/12/05 23:19:49 |
|
|
%#!make OX-RFC-101-ja.dvi |
%#!make OX-RFC-101-ja.dvi |
% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-101.tex,v 1.2 2000/11/30 08:46:23 ohara 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} |
|
|
|
|
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 |
|
|
\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} |
Line 178 hostname:port を開いて待ち受けなければならない。 |
|
Line 193 hostname:port を開いて待ち受けなければならない。 |
|
の端末に出力する。oxc の用いる端末の種類は環境変数OpenXM\_XTERM で指定す |
の端末に出力する。oxc の用いる端末の種類は環境変数OpenXM\_XTERM で指定す |
る。デフォルトは 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 185 hostname:port を開いて待ち受けなければならない。 |
|
Line 247 hostname:port を開いて待ち受けなければならない。 |
|
|
|
ここでは、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 200 spawn は、計算サーバの起動に成功したら (CMO\_INT32, サ |
|
Line 262 spawn は、計算サーバの起動に成功したら (CMO\_INT32, サ |
|
かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは |
かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは |
access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork |
access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork |
をせずに、エラーオブジェクトをスタックに積む。 |
をせずに、エラーオブジェクトをスタックに積む。 |
|
|
*/ |
*/ |
|
|
/*&eg |
/*&eg |