[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.4 and 1.7

version 1.4, 2000/12/01 08:03:48 version 1.7, 2020/03/14 01:21:56
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.3 2000/11/30 10:15:24 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}}
Line 19 
Line 19 
 \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
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
 \end{verbatim}  \end{verbatim}
 指定された計算サーバに SIGKILL を送る。  絎荐膊泣若 SIGKILL
   
 Request:  Request:
 \begin{tabular}{|c|c|}  \hline  \begin{tabular}{|c|c|}  \hline
Line 112  Output: none.
Line 124  Output: none.
 \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
Line 126  Output: none.
Line 138  Output: none.
 \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
Line 146  Output: none.
Line 158  Output: none.
 \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
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(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 193  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 は計算サーバを起動し、少なくとも 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) 紊
 敗したらエラーオブジェクトをスタックに積む。例えば計算サーバが発見できな  若吾с鴻帥腥箴域膊泣若肴с
 かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは  c翫若吾с腥潟潟若泣若
 access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork  access(2) PATH 荐膊泣若「荀ゃ違fork
 をせずに、エラーオブジェクトをスタックに積む。  若吾с鴻帥腥
   
   
   
   
 */  */
   
 /*&eg  /*&eg

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.7

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