version 1.5, 2000/12/05 06:38:55 |
version 1.7, 2020/03/14 01:21:56 |
|
|
%#!make OX-RFC-101-ja.dvi |
%#!make OX-RFC-101-ja.dvi |
% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-101.tex,v 1.4 2000/12/01 08:03:48 ohara Exp $ |
% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-101.tex,v 1.6 2000/12/05 23:19:49 takayama Exp $ |
\documentclass{article} |
\documentclass{article} |
%%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{} |
%%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{} |
\usepackage{html} |
\usepackage{html} |
/*&jp |
/*&jp |
\title{{\bf エンジン起動プロトコル, OpenXM RFC 101 Draft}} |
\title{{\bf 潟吾活儀潟, OpenXM RFC 101 Draft}} |
\author{ 小原功任\thanks{{金沢大学理学部計算科学教室, \htmladdnormallink{http://omega.s.kanazawa-u.ac.jp/ohara/}{http://omega.s.kanazawa-u.ac.jp/ohara/}}}} |
\author{ 絨篁\thanks{{羃√ぇ絖絖荐膊腱絖絎, \htmladdnormallink{http://omega.s.kanazawa-u.ac.jp/ohara/}{http://omega.s.kanazawa-u.ac.jp/ohara/}}}} |
\date{ 2000年, 11月30日} |
\date{ 2000綛, 1130} |
*/ |
*/ |
/*&eg |
/*&eg |
\title{{\bf Protocol to Start Engines, OpenXM RFC 101 Draft}} |
\title{{\bf Protocol to Start Engines, OpenXM RFC 101 Draft}} |
|
|
\section{Session Management} |
\section{Session Management} |
|
|
/*&jp |
/*&jp |
この文書では ``OpenXM RFC 100, OpenXM の設計と実装''\ |
吾с ``OpenXM RFC 100, OpenXM 荐荐絎茖''\ |
\htmladdnormallink{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html} |
\htmladdnormallink{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html} |
で定義されたコントロールサーバを置き換える新しいコントロールサーバの |
у臂潟潟若泣若臀違潟潟若泣若 |
仕様を説明する. |
篁罕茯. |
*/ |
*/ |
|
|
/*&eg |
/*&eg |
Line 37 a replacement of the control server defined in |
|
Line 37 a replacement of the control server defined in |
|
|
|
/*&jp |
/*&jp |
|
|
我々は新しいコントロールサーバを提案する。そのサンプル実装として oxc が |
違潟潟若泣若罅泣潟絎茖 oxc |
提供される。新しいコントロールサーバは以下の点で従来のものと異なる。 |
箴違潟潟若泣若篁ヤ鴻уャ違 |
\begin{enumerate} |
\begin{enumerate} |
\item コントロールサーバは OpenXM スタックマシンであり、 |
\item 潟潟若泣若 OpenXM 鴻帥激潟с |
CMObject/Primitive をサポートする。 |
CMObject/Primitive 泣若 |
\item 計算サーバの起動はスタックマシンコマンドを介して行う。 |
\item 荐膊泣若莎桁鴻帥激潟潟潟篁茵 |
\item 一つのコントロールサーバから複数の計算サーバを起動できる。 |
\item 筝ゃ潟潟若泣若茲違荐膊泣若莎桁с |
\end{enumerate} |
\end{enumerate} |
|
|
oxc の導入により、いままでのサーバの起動手順はコントロールサーバの起動と |
oxc 絨ャ障障с泣若莎桁潟潟若泣若莎桁 |
計算サーバの起動に分離される。コントロールサーバを起動するには次の手順を |
荐膊泣若莎桁≪潟潟若泣若莎桁罨< |
取る。まず、適当なオプション(後述)をつけて、コントロールサーバを起動する |
障綵激с(緇菴)ゃ潟潟若泣若莎桁 |
と、コントロールサーバはソケットを作成し、connect する。クライアントは、 |
潟潟若泣若純宴篏connect ゃ≪潟 |
listen, accept する。接続後、最初にバイトオーダを決定する。バイトオーダ |
listen, accept ・膓緇ゃ若羆阪ゃ若 |
の決定方法については、従来のものと変更はない |
羆阪号ゃ緇ャ紊眼 |
(OpenXM/doc/OpenXM-specs/control.tex を見よ)。その後、コントロールサーバ |
(OpenXM/doc/OpenXM-specs/control.tex 荀)緇潟潟若泣若 |
は待機状態にはいる。コントロールサーバは OpenXM スタックマシンであるから、 |
緇罘倶潟潟若泣若 OpenXM 鴻帥激潟с |
mathcap の交換などの手続きに入ってもよい。 |
mathcap 篋ゆ膓ャc |
|
|
\subsection{OpenXM control stack machine} |
\subsection{OpenXM control stack machine} |
|
|
コントロールサーバは、次のスタックマシンコマンドを実装しなければならない。 |
潟潟若泣若罨<鴻帥激潟潟潟絎茖違 |
それぞれのスタックコマンドの意味は、{\bf 以前のコントロールサーバとは異なる。} |
鴻帥潟潟潟{\bf 篁ュ潟潟若泣若違} |
|
|
\begin{enumerate} |
\begin{enumerate} |
\item |
\item |
\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 |
|
|
\begin{verbatim} |
\begin{verbatim} |
SM_control_terminate_server |
SM_control_terminate_server |
\end{verbatim} |
\end{verbatim} |
指定された計算サーバに SIGKILL を送る。 |
絎荐膊泣若 SIGKILL |
|
|
Request: |
Request: |
\begin{tabular}{|c|c|} \hline |
\begin{tabular}{|c|c|} \hline |
|
|
\begin{verbatim} |
\begin{verbatim} |
SM_control_kill |
SM_control_kill |
\end{verbatim} |
\end{verbatim} |
全ての計算サーバに SIGKILL を送る。 |
荐膊泣若 SIGKILL |
|
|
Request: |
Request: |
\begin{tabular}{|c|c|} \hline |
\begin{tabular}{|c|c|} \hline |
|
|
\begin{verbatim} |
\begin{verbatim} |
SM_control_reset_connection_server |
SM_control_reset_connection_server |
\end{verbatim} |
\end{verbatim} |
指定された計算サーバに SIGUSR1 を送る。 |
絎荐膊泣若 SIGUSR1 |
|
|
Request: |
Request: |
\begin{tabular}{|c|c|} \hline |
\begin{tabular}{|c|c|} \hline |
|
|
\begin{verbatim} |
\begin{verbatim} |
SM_control_reset_connection |
SM_control_reset_connection |
\end{verbatim} |
\end{verbatim} |
全ての計算サーバに SIGUSR1 を送る。これは下位互換性のための措置である。 |
荐膊泣若 SIGUSR1 筝篏篋сェ臀с |
|
|
Request: |
Request: |
\begin{tabular}{|c|c|} \hline |
\begin{tabular}{|c|c|} \hline |
|
|
\bigskip |
\bigskip |
|
|
\subsection{OpenXM reset protocol} |
\subsection{OpenXM reset protocol} |
OX-RFC-100 に準拠する。 |
OX-RFC-100 羣 |
|
|
\subsection{A sample implementation} |
\subsection{A sample implementation} |
|
|
\subsubsection{Command Line Arguments} |
\subsubsection{Command Line Arguments} |
コントロールサーバの実行形式は getopt(3) に ``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} では、クライアントのホスト名を指定する。クライアントはあらかじめ、 |
{\tt -h} сゃ≪潟鴻絎ゃ≪潟 |
hostname:port を開いて待ち受けなければならない。 |
hostname:port 緇≦違 |
|
|
{\tt -x} オプションはなくてもよい。-x を指定し、かつ環境変数 DISPLAY が |
{\tt -x} 激с潟-x 絎ょ医紊 DISPLAY |
設定されていると、oxc は新たに端末(ウィンドウ)を作成して、メッセージをそ |
荐絎oxc 違腴(c潟)篏<祉若吾 |
の端末に出力する。oxc の用いる端末の種類は環境変数OpenXM\_XTERM で指定す |
腴阪oxc 腴腮蕁医紊OpenXM\_XTERM ф絎 |
る。デフォルトは xterm である。 |
xterm с |
|
|
オプション {\tt -h} が指定されないときには特別な動作を行う。 |
激с {\tt -h} 絎劫ャ篏茵 |
|
|
\subsubsection{パイプを利用した接続} |
\subsubsection{ゃ・膓} |
|
|
oxc はオプション {\tt -h} が指定されないときには、コマンドラインで与えら |
oxc 激с {\tt -h} 絎潟潟ゃ潟т |
れるべき情報を、標準入力から得ようとする。ここでは、この機能について説明 |
鴻宴罔羣ュ緇с罘純ゃ茯 |
する。まず、標準入力から受け取るデータは次の形式をしていなければならない。 |
障罔羣ュ若帥罨<綵√違 |
\begin{tabular}{|c|c|c|c|c|} |
\begin{tabular}{|c|c|c|c|c|} |
\hline |
\hline |
{\sl int32} port & {\sl String} hostname & {\sl byte} 0 & {\sl String} password & {\sl byte} 0\\ |
{\sl int32} port & {\sl String} hostname & {\sl byte} 0 & {\sl String} password & {\sl byte} 0\\ |
Line 208 oxc はオプション {\tt -h} が指定されないときには、コマ |
|
Line 208 oxc はオプション {\tt -h} が指定されないときには、コマ |
|
|
|
\medskip |
\medskip |
|
|
String は C のストリングではなくて、cmo\_string のような、長さ付きの |
String C 鴻潟違сcmo\_string 激篁 |
ストリングである。 |
鴻潟違с |
|
|
\noindent |
\noindent |
データの例: \\ |
若帥箴: \\ |
port = 1324 = 0x052c, hostname = ``orange'', password = ``hogehoge'' |
port = 1324 = 0x052c, hostname = ``orange'', password = ``hogehoge'' |
の場合 |
翫 |
\begin{verbatim} |
\begin{verbatim} |
00 00 05 2c 00 00 00 07 6f 72 61 6e 67 65 00 00 |
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 |
00 00 09 68 6f 67 65 68 6f 67 65 00 |
\end{verbatim} |
\end{verbatim} |
|
|
さて具体的な起動プロセスは次の通りである。 |
隙莎桁祉鴻罨<с |
|
|
\begin{enumerate} |
\begin{enumerate} |
\item |
\item |
クライアントは pipe(2) を用いて、ファイルディスクリプタ fd0, fd1 を |
ゃ≪潟 pipe(2) <ゃc鴻 fd0, fd1 |
手にいれる。 |
|
\item |
\item |
fork(2) で子プロセスを生成し、子プロセスは dup2(fd1, 0) を実行する。 |
fork(2) у祉鴻絖祉鴻 dup2(fd1, 0) 絎茵 |
これで 親プロセスの fd0 と子プロセスの 0 が接続されている。 |
荀祉鴻 fd0 絖祉鴻 0 ・膓 |
\item |
\item |
子プロセスは exec("ssh remotehost controlserver") としてリモートプロセ |
絖祉鴻 exec("ssh remotehost controlserver") ≪若 |
ス起動する。このとき、親プロセスの fd0 とリモートプロセスの 0 が接続さ |
壕儀荀祉鴻 fd0 ≪若祉鴻 0 ・膓 |
れている。 |
|
\item |
\item |
この通信路はリモートプロセスからは標準入力として見えている。 |
篆∴君≪若祉鴻罔羣ュ荀 |
リモートプロセスは標準入力から既に述べたフォーマットにしたがってデータを |
≪若祉鴻罔羣ュ≪菴違鴻若c若帥 |
読み込む。リモートプロセスは、そのデータを用いて connect(2) を実行する。 |
茯粋昭≪若祉鴻若帥 connect(2) 絎茵 |
\end{enumerate} |
\end{enumerate} |
|
|
|
|
\subsubsection{Local Functions} |
\subsubsection{Local Functions} |
|
|
コントロールサーバの各実装は、独自にローカル関数をサポートしてもよい。 |
潟潟若泣若絎茖若∽違泣若 |
実際、サンプル実装 oxc はローカル関数をサポートしている。 |
絎泣潟絎茖 oxc 若∽違泣若 |
|
|
ここでは、oxc のローカル関数 spawn について説明しよう。 |
сoxc 若∽ spawn ゃ茯 |
|
|
spawn は計算サーバを起動し、少なくとも 1 個の引数を持つ。この引数は |
spawn 荐膊泣若莎桁絨 1 綣違ゃ綣違 |
SM_control_spawn_server で用いられる {\sl List} Argument と同一の形式で |
SM\_control\_spawn\_server х {\sl List} Argument 筝綵√ |
ある。すなわち、スタックに(右がトップ) |
<鴻帥(劻) |
\begin{tabular}{|c|c|c|} \hline |
\begin{tabular}{|c|c|c|} \hline |
{\sl List} Argument & {\sl Integer32} 1 & {\sl String} ``spawn'' \\ |
{\sl List} Argument & {\sl Integer32} 1 & {\sl String} ``spawn'' \\ |
\hline |
\hline |
\end{tabular} |
\end{tabular} |
を積み、SM\_executeFunction をコントローラに送る。 |
腥帥SM\_executeFunction 潟潟若 |
SM\_executeStringByLocalParser は利用できないので注意する。 |
SM\_executeStringByLocalParser сф絵 |
|
|
spawn は、計算サーバの起動に成功したら (CMO\_INT32, サーバID) を、失 |
spawn 荐膊泣若莎桁 (CMO\_INT32, 泣若ID) 紊 |
敗したらエラーオブジェクトをスタックに積む。例えば計算サーバが発見できな |
若吾с鴻帥腥箴域膊泣若肴с |
かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは |
c翫若吾с腥潟潟若泣若 |
access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork |
access(2) PATH 荐膊泣若「荀ゃ違fork |
をせずに、エラーオブジェクトをスタックに積む。 |
若吾с鴻帥腥 |
*/ |
*/ |
|
|
/*&eg |
/*&eg |