[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.1 and 1.2

version 1.1, 2000/11/30 02:41:36 version 1.2, 2000/11/30 08:46:23
Line 1 
Line 1 
 % $OpenXM$  %#!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 $
 \documentclass{article}  \documentclass{article}
 %%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{}  %%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{}
 \usepackage{html}  \usepackage{html}
 /*&jp  /*&jp
 \title{{\bf $B%(%s%8%s5/F0%W%m%H%3%k(B, OpenXM RFC 101 Draft}}  \title{{\bf エンジン起動プロトコル, OpenXM RFC 101 Draft}}
 \author{ $B>.868yG$(B\thanks{{$B6bBtBg3XM}3XIt7W;;2J3X65<<(B, \htmladdnormallink{http://www.s.kanazawa.ac.jp}{http://www.s.kanazawa.ac.jp}}}}  \author{ 小原功任\thanks{{金沢大学理学部計算科学教室, \htmladdnormallink{http://omega.s.kanazawa-u.ac.jp/ohara/}{http://omega.s.kanazawa-u.ac.jp/ohara/}}}}
 \date{ 2000$BG/(B, 11$B7n(B30$BF|(B}  \date{ 2000年, 11月30日}
 */  */
 /*&eg  /*&eg
 \title{{\bf Protocol to Start Engines, OpenXM RFC 101 Draft}}  \title{{\bf Protocol to Start Engines, OpenXM RFC 101 Draft}}
Line 18 
Line 19 
 \section{Session Management}  \section{Session Management}
   
 /*&jp  /*&jp
 $B$3$NJ8=q$G$O(B ``OpenXM RFC 100, OpenXM $B$N@_7W$H<BAu(B''\  この文書では ``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}
 $B$GDj5A$5$l$?%3%s%H%m!<%k%5!<%P$rCV$-49$($k?7$7$$%3%s%H%m!<%k%5!<%P$N(B  で定義されたコントロールサーバを置き換える新しいコントロールサーバの
 $B;EMM$r@bL@$9$k(B.  仕様を説明する.
 */  */
   
 /*&eg  /*&eg
Line 36  a replacement of the control server defined in 
Line 37  a replacement of the control server defined in 
   
 /*&jp  /*&jp
   
 $B2f!9$O?7$7$$%3%s%H%m!<%k%5!<%P$rDs0F$9$k!#$=$N%5%s%W%k<BAu$H$7$F(B oxc $B$,(B  我々は新しいコントロールサーバを提案する。そのサンプル実装として oxc が
 $BDs6!$5$l$k!#?7$7$$%3%s%H%m!<%k%5!<%P$O0J2<$NE@$G=>Mh$N$b$N$H0[$J$k!#(B  提供される。新しいコントロールサーバは以下の点で従来のものと異なる。
 \begin{enumerate}  \begin{enumerate}
 \item $B%3%s%H%m!<%k%5!<%P$O(B OpenXM $B%9%?%C%/%^%7%s$G$"$j!"(B  \item コントロールサーバは OpenXM スタックマシンであり、
 CMObject/Primitive $B$r%5%]!<%H$9$k!#(B  CMObject/Primitive をサポートする。
 \item $B7W;;%5!<%P$N5/F0$O%9%?%C%/%^%7%s%3%^%s%I$r2p$7$F9T$&!#(B  \item 計算サーバの起動はスタックマシンコマンドを介して行う。
 \item $B0l$D$N%3%s%H%m!<%k%5!<%P$+$iJ#?t$N7W;;%5!<%P$r5/F0$G$-$k!#(B  \item 一つのコントロールサーバから複数の計算サーバを起動できる。
 \end{enumerate}  \end{enumerate}
   
 oxc $B$NF3F~$K$h$j!"$$$^$^$G$N%5!<%P$N5/F0<j=g$O%3%s%H%m!<%k%5!<%P$N5/F0$H(B  oxc の導入により、いままでのサーバの起動手順はコントロールサーバの起動と
 $B7W;;%5!<%P$N5/F0$KJ,N%$5$l$k!#%3%s%H%m!<%k%5!<%P$r5/F0$9$k$K$O<!$N<j=g$r(B  計算サーバの起動に分離される。コントロールサーバを起動するには次の手順を
 $B<h$k!#$^$:!"E,Ev$J%*%W%7%g%s(B($B8e=R(B)$B$r$D$1$F!"%3%s%H%m!<%k%5!<%P$r5/F0$9$k(B  取る。まず、適当なオプション(後述)をつけて、コントロールサーバを起動する
 $B$H!"%3%s%H%m!<%k%5!<%P$O%=%1%C%H$r:n@.$7!"(Bconnect $B$9$k!#%/%i%$%"%s%H$O!"(B  と、コントロールサーバはソケットを作成し、connect する。クライアントは、
 listen, accept $B$9$k!#@\B38e!"%P%$%H%*!<%@$r7hDj$9$k!#%P%$%H%*!<%@$N7hDj(B  listen, accept する。接続後、バイトオーダを決定する。バイトオーダの決定
 $B$K$D$$$F$O(B???$B$r8+$h!#$=$N8e!"%3%s%H%m!<%k%5!<%P$OBT5!>uBV$K$O$$$k!#%3%s(B  方法については、従来のものと変更はない。
 $B%H%m!<%k%5!<%P$O(B OpenXM $B%9%?%C%/%^%7%s$G$"$k$+$i!"(Bmathcap $B$N8r49$J$I$N<j(B  OpenXM/doc/OpenXM-specs/control.tex を見よ。その後、コントロールサーバは
 $BB3$-$KF~$C$F$b$h$$!#(B  待機状態にはいる。コントロールサーバは OpenXM スタックマシンであるから、
   mathcap の交換などの手続きに入ってもよい。
   
 $B7W;;%5!<%P$N5/F0$O!"(Boxc $B$N%m!<%+%k4X?t(B oxc\_open $B$K$h$k!#(Boxc\_open $B$O>/(B  \subsection{OpenXM control stack machine}
 $B$J$/$H$b(B 4 $B8D$N0z?t$r;}$D!#$9$J$o$A!"(B  
   コントロールサーバは、次のスタックマシンコマンドを実装しなければならない。
   それぞれのスタックコマンドの意味は、{\bf 以前のコントロールサーバとは異なる。}
   
   \begin{enumerate}
   \item
 \begin{verbatim}  \begin{verbatim}
 oxc_open($B7W;;%5!<%PL>(B, $B%[%9%HL>(B, $B%]!<%HHV9f(B, $B%b!<%I(B, ...)  SM_control_spawn_server
 \end{verbatim}  \end{verbatim}
 $B$H$$$&7A<0$G$"$k!#$3$3$G!"!V7W;;%5!<%PL>!W!"!V%[%9%HL>!W$O(B CMO\_STRING  新たに計算サーバを起動する。サーバの起動に成功すると、その ID を返す。
 $B7?$N%*%V%8%'%/%H!"!V%]!<%HHV9f!W!"!V%b!<%I!W$O(B CMO\_INT32$B7?(B  
 $B$N%*%V%8%'%/%H$G$"$k!#%[%9%HL>$H$$$&$N$O(BOpenXM$B%/%i%$%"%s%H$N%[(B  
 $B%9%HL>$N$3$H$G$"$k!#%m!<%+%k4X?t$N<B9T$O(B SM\_executeFunction $B$K$h$k!#$9(B  
 $B$J$o$A3F0z?t$r=g$K%9%?%C%/$K@Q$_!":G8e$K(BSM\_executeFunction $B$r<B9T$9$k!#(B  
 SM\_executeStringByLocalParser $B$OMxMQ$G$-$J$$$N$GCm0U$9$k!#(B  
   
 oxc\_open $B$O!"7W;;%5!<%P$N5/F0$K@.8y$7$?$i(B (CMO\_INT32, $B%5!<%P(BID) $B$r!"<:(B  Request:
 $BGT$7$?$i%(%i!<%*%V%8%'%/%H$r%9%?%C%/$K@Q$`!#Nc$($P7W;;%5!<%P$,H/8+$G$-$J(B  \begin{tabular}{|c|c|}  \hline
 $B$+$C$?>l9g$K$O%(%i!<%*%V%8%'%/%H$r@Q$`$3$H$K$J$k!#%3%s%H%m!<%k%5!<%P$O(B  {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_spawn\_server}  \\
 access(2) $B$rMQ$$$F(B PATH $B$+$i7W;;%5!<%P$rC5$9!#$b$78+$D$+$i$J$1$l$P!"(Bfork  \hline
 $B$r$;$:$K!"%(%i!<%*%V%8%'%/%H$r%9%?%C%/$K@Q$`!#(B  \end{tabular}
   
 $B%3%s%H%m!<%k%5!<%P$N<B9T7A<0$O0J2<$N%*%W%7%g%s$r5v$9!#(B  Stack before the request:
   \begin{tabular}{|c|c|}  \hline
   {\sl Integer32} Port & {\sl String} ServerName \\
   \hline
   \end{tabular}
   
   Stack after the request:
   \begin{tabular}{|c|c|}  \hline
   {\sl Integer32} ServerID \\
   \hline
   \end{tabular}
   
   Output: none.
   
   \item
 \begin{verbatim}  \begin{verbatim}
      --pass  SM_control_terminate_server
      --host  
      --port  
 \end{verbatim}  \end{verbatim}
   指定された計算サーバに SIGKILL を送る。
   
   Request:
   \begin{tabular}{|c|c|}  \hline
   {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_terminate\_server}  \\
   \hline
   \end{tabular}
   
   Stack before the request:
   \begin{tabular}{|c|c|}  \hline
   {\sl Integer32} ServerID \\
   \hline
   \end{tabular}
   
   Output: none.
   
   \item
   \begin{verbatim}
   SM_control_kill
   \end{verbatim}
   全ての計算サーバに SIGKILL を送る。
   
   Request:
   \begin{tabular}{|c|c|}  \hline
   {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_kill}  \\
   \hline
   \end{tabular}
   
   Output: none.
   
   \item
   \begin{verbatim}
   SM_control_reset_connection_server
   \end{verbatim}
   指定された計算サーバに SIGUSR1 を送る。
   
   Request:
   \begin{tabular}{|c|c|}  \hline
   {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_reset\_connection\_server}  \\
   \hline
   \end{tabular}
   
   Stack before the request:
   \begin{tabular}{|c|c|}  \hline
   {\sl Integer32} ServerID \\
   \hline
   \end{tabular}
   
   Output: none.
   
   \item
   \begin{verbatim}
   SM_control_reset_connection
   \end{verbatim}
   全ての計算サーバに SIGUSR1 を送る。これは下位互換性のための措置である。
   
   Request:
   \begin{tabular}{|c|c|}  \hline
   {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_reset\_connection}  \\
   \hline
   \end{tabular}
   
   Output: none.
   
   \end{enumerate}
   
   \bigskip
   \bigskip
   
   \subsection{A sample implementation}
   
   \subsubsection{Command Line Arguments}
   コントロールサーバの実行形式は getopt(1) に ``c:p:h:x'' で指定するオプショ
   ンを持つ。すなわち、
   \begin{verbatim}
   oxc -c [password] -h [hostname] -p [portnumber] -x
   \end{verbatim}
   
   \subsubsection{Local Functions}
   
   コントロールサーバの各実装は、独自にローカル関数をサポートしてもよい。
   実際、サンプル実装 oxc はローカル関数をサポートしている。
   
   ここでは、oxc のローカル関数 spawn について説明しよう。
   
   spawn は計算サーバを起動し、少なくとも 2 個の引数を持つ。すなわち、
   \begin{verbatim}
   spawn(計算サーバ名, ポート番号, モード, ...)
   \end{verbatim}
   という形式である。「モード」はなくてもよい。ここで、「計算サーバ名」は
   CMO\_STRING 型のオブジェクト、「ポート番号」、「モード」は CMO\_INT32型
   のオブジェクトである。ローカル関数の実行は SM\_executeFunction による。
   すなわち各引数を順にスタックに積み、最後にSM\_executeFunction を実行する。
   SM\_executeStringByLocalParser は利用できないので注意する。
   
   spawn は、計算サーバの起動に成功したら (CMO\_INT32, サーバID) を、失
   敗したらエラーオブジェクトをスタックに積む。例えば計算サーバが発見できな
   かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは
   access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork
   をせずに、エラーオブジェクトをスタックに積む。
   
 */  */
   
 /*&eg  /*&eg

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

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