version 1.2, 2000/11/30 08:46:23 |
version 1.4, 2000/12/01 08:03:48 |
|
|
%#!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.3 2000/11/30 10:15:24 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 |
|
|
\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 192 spawn は、計算サーバの起動に成功したら (CMO\_INT32, サ |
|
Line 247 spawn は、計算サーバの起動に成功したら (CMO\_INT32, サ |
|
かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは |
かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは |
access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork |
access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork |
をせずに、エラーオブジェクトをスタックに積む。 |
をせずに、エラーオブジェクトをスタックに積む。 |
|
|
|
|
|
|
|
|
*/ |
*/ |
|
|