Annotation of OpenXM/doc/OpenXM-specs/OX-RFC-101.tex, Revision 1.7
1.2 ohara 1: %#!make OX-RFC-101-ja.dvi
1.7 ! takayama 2: % $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-101.tex,v 1.6 2000/12/05 23:19:49 takayama Exp $
1.1 takayama 3: \documentclass{article}
4: %%\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{}
5: \usepackage{html}
6: /*&jp
1.7 ! takayama 7: \title{{\bf エンジン起動プロトコル, OpenXM RFC 101 Draft}}
! 8: \author{ 小原功任\thanks{{金沢大学理学部計算科学教室, \htmladdnormallink{http://omega.s.kanazawa-u.ac.jp/ohara/}{http://omega.s.kanazawa-u.ac.jp/ohara/}}}}
! 9: \date{ 2000年, 11月30日}
1.1 takayama 10: */
11: /*&eg
12: \title{{\bf Protocol to Start Engines, OpenXM RFC 101 Draft}}
13: \author{ Katsuyoshi Ohara\thanks{Department of Computational Science, Kanazawa University, \htmladdnormallink{http://www.s.kanazawa.ac.jp}{http://www.s.kanazawa.ac.jp}}}
14: \date{ November 30, 2000 }
15: */
16:
17: \begin{document}
18: \maketitle
19: \section{Session Management}
20:
21: /*&jp
1.7 ! takayama 22: この文書では ``OpenXM RFC 100, OpenXM の設計と実装''\
1.1 takayama 23: \htmladdnormallink{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}
1.7 ! takayama 24: で定義されたコントロールサーバを置き換える新しいコントロールサーバの
! 25: 仕様を説明する.
1.1 takayama 26: */
27:
28: /*&eg
29: This document describes a new control server specification
30: which is intended to be
31: a replacement of the control server defined in
32: ``Design and implementation of OpenXM, OpenXM RFC 100''\
33: \htmladdnormallink{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}{http://www.math.kobe-u.ac.jp/OpenXM/OpenXM-RFC.html}.
34: */
35:
36: \subsection{New OpenXM control servers}
37:
38: /*&jp
39:
1.7 ! takayama 40: 我々は新しいコントロールサーバを提案する。そのサンプル実装として oxc が
! 41: 提供される。新しいコントロールサーバは以下の点で従来のものと異なる。
1.1 takayama 42: \begin{enumerate}
1.7 ! takayama 43: \item コントロールサーバは OpenXM スタックマシンであり、
! 44: CMObject/Primitive をサポートする。
! 45: \item 計算サーバの起動はスタックマシンコマンドを介して行う。
! 46: \item 一つのコントロールサーバから複数の計算サーバを起動できる。
1.1 takayama 47: \end{enumerate}
48:
1.7 ! takayama 49: oxc の導入により、いままでのサーバの起動手順はコントロールサーバの起動と
! 50: 計算サーバの起動に分離される。コントロールサーバを起動するには次の手順を
! 51: 取る。まず、適当なオプション(後述)をつけて、コントロールサーバを起動する
! 52: と、コントロールサーバはソケットを作成し、connect する。クライアントは、
! 53: listen, accept する。接続後、最初にバイトオーダを決定する。バイトオーダ
! 54: の決定方法については、従来のものと変更はない
! 55: (OpenXM/doc/OpenXM-specs/control.tex を見よ)。その後、コントロールサーバ
! 56: は待機状態にはいる。コントロールサーバは OpenXM スタックマシンであるから、
! 57: mathcap の交換などの手続きに入ってもよい。
1.2 ohara 58:
59: \subsection{OpenXM control stack machine}
60:
1.7 ! takayama 61: コントロールサーバは、次のスタックマシンコマンドを実装しなければならない。
! 62: それぞれのスタックコマンドの意味は、{\bf 以前のコントロールサーバとは異なる。}
1.2 ohara 63:
64: \begin{enumerate}
65: \item
66: \begin{verbatim}
67: SM_control_spawn_server
1.1 takayama 68: \end{verbatim}
1.7 ! takayama 69: 新たに計算サーバを起動する。計算サーバの起動に成功すると、その ID を返す。
1.2 ohara 70:
71: Request:
72: \begin{tabular}{|c|c|} \hline
73: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_spawn\_server} \\
74: \hline
75: \end{tabular}
76:
77: Stack before the request:
78: \begin{tabular}{|c|c|} \hline
1.5 ohara 79: {\sl List} Argument \\
1.2 ohara 80: \hline
81: \end{tabular}
82:
83: Stack after the request:
84: \begin{tabular}{|c|c|} \hline
85: {\sl Integer32} ServerID \\
86: \hline
87: \end{tabular}
88:
89: Output: none.
90:
1.5 ohara 91: Argument:
92: \begin{tabular}{|c|c|c|} \hline
93: {\sl List} Ports & {\sl String} ServerName & ...\\
94: \hline
95: \end{tabular}
96:
97: Ports:
98: \begin{tabular}{|c|c|} \hline
99: {\sl Integer32} Port & ... \\
100: \hline
101: \end{tabular}
102:
1.2 ohara 103: \item
104: \begin{verbatim}
105: SM_control_terminate_server
106: \end{verbatim}
1.7 ! takayama 107: 指定された計算サーバに SIGKILL を送る。
1.2 ohara 108:
109: Request:
110: \begin{tabular}{|c|c|} \hline
111: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_terminate\_server} \\
112: \hline
113: \end{tabular}
114:
115: Stack before the request:
116: \begin{tabular}{|c|c|} \hline
117: {\sl Integer32} ServerID \\
118: \hline
119: \end{tabular}
120:
121: Output: none.
122:
123: \item
124: \begin{verbatim}
125: SM_control_kill
126: \end{verbatim}
1.7 ! takayama 127: 全ての計算サーバに SIGKILL を送る。
1.2 ohara 128:
129: Request:
130: \begin{tabular}{|c|c|} \hline
131: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_kill} \\
132: \hline
133: \end{tabular}
134:
135: Output: none.
136:
137: \item
138: \begin{verbatim}
139: SM_control_reset_connection_server
140: \end{verbatim}
1.7 ! takayama 141: 指定された計算サーバに SIGUSR1 を送る。
1.2 ohara 142:
143: Request:
144: \begin{tabular}{|c|c|} \hline
145: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_reset\_connection\_server} \\
146: \hline
147: \end{tabular}
148:
149: Stack before the request:
150: \begin{tabular}{|c|c|} \hline
151: {\sl Integer32} ServerID \\
152: \hline
153: \end{tabular}
154:
155: Output: none.
156:
157: \item
158: \begin{verbatim}
159: SM_control_reset_connection
160: \end{verbatim}
1.7 ! takayama 161: 全ての計算サーバに SIGUSR1 を送る。これは下位互換性のための措置である。
1.2 ohara 162:
163: Request:
164: \begin{tabular}{|c|c|} \hline
165: {\tt int32 OX\_COMMAND} & {\tt int32 SM\_control\_reset\_connection} \\
166: \hline
167: \end{tabular}
168:
169: Output: none.
170:
171: \end{enumerate}
172:
173: \bigskip
174: \bigskip
175:
1.5 ohara 176: \subsection{OpenXM reset protocol}
1.7 ! takayama 177: OX-RFC-100 に準拠する。
1.5 ohara 178:
1.2 ohara 179: \subsection{A sample implementation}
180:
181: \subsubsection{Command Line Arguments}
1.7 ! takayama 182: コントロールサーバの実行形式は getopt(3) に ``c:p:h:x'' で指定するオプショ
! 183: ンを持つ。すなわち、
1.2 ohara 184: \begin{verbatim}
185: oxc -c [password] -h [hostname] -p [portnumber] -x
186: \end{verbatim}
1.3 ohara 187:
1.7 ! takayama 188: {\tt -h} では、クライアントのホスト名を指定する。クライアントはあらかじめ、
! 189: hostname:port を開いて待ち受けなければならない。
1.3 ohara 190:
1.7 ! takayama 191: {\tt -x} オプションはなくてもよい。-x を指定し、かつ環境変数 DISPLAY が
! 192: 設定されていると、oxc は新たに端末(ウィンドウ)を作成して、メッセージをそ
! 193: の端末に出力する。oxc の用いる端末の種類は環境変数OpenXM\_XTERM で指定す
! 194: る。デフォルトは xterm である。
1.2 ohara 195:
1.7 ! takayama 196: オプション {\tt -h} が指定されないときには特別な動作を行う。
1.4 ohara 197:
1.7 ! takayama 198: \subsubsection{パイプを利用した接続}
1.4 ohara 199:
1.7 ! takayama 200: oxc はオプション {\tt -h} が指定されないときには、コマンドラインで与えら
! 201: れるべき情報を、標準入力から得ようとする。ここでは、この機能について説明
! 202: する。まず、標準入力から受け取るデータは次の形式をしていなければならない。
1.4 ohara 203: \begin{tabular}{|c|c|c|c|c|}
204: \hline
205: {\sl int32} port & {\sl String} hostname & {\sl byte} 0 & {\sl String} password & {\sl byte} 0\\
206: \hline
207: \end{tabular}
208:
209: \medskip
210:
1.7 ! takayama 211: String は C のストリングではなくて、cmo\_string のような、長さ付きの
! 212: ストリングである。
1.4 ohara 213:
214: \noindent
1.7 ! takayama 215: データの例: \\
1.4 ohara 216: port = 1324 = 0x052c, hostname = ``orange'', password = ``hogehoge''
1.7 ! takayama 217: の場合
1.4 ohara 218: \begin{verbatim}
219: 00 00 05 2c 00 00 00 07 6f 72 61 6e 67 65 00 00
220: 00 00 09 68 6f 67 65 68 6f 67 65 00
221: \end{verbatim}
222:
1.7 ! takayama 223: さて具体的な起動プロセスは次の通りである。
1.4 ohara 224:
225: \begin{enumerate}
226: \item
1.7 ! takayama 227: クライアントは pipe(2) を用いて、ファイルディスクリプタ fd0, fd1 を
! 228: 手にいれる。
1.4 ohara 229: \item
1.7 ! takayama 230: fork(2) で子プロセスを生成し、子プロセスは dup2(fd1, 0) を実行する。
! 231: これで 親プロセスの fd0 と子プロセスの 0 が接続されている。
1.4 ohara 232: \item
1.7 ! takayama 233: 子プロセスは exec("ssh remotehost controlserver") としてリモートプロセ
! 234: ス起動する。このとき、親プロセスの fd0 とリモートプロセスの 0 が接続さ
! 235: れている。
1.4 ohara 236: \item
1.7 ! takayama 237: この通信路はリモートプロセスからは標準入力として見えている。
! 238: リモートプロセスは標準入力から既に述べたフォーマットにしたがってデータを
! 239: 読み込む。リモートプロセスは、そのデータを用いて connect(2) を実行する。
1.4 ohara 240: \end{enumerate}
241:
242:
1.2 ohara 243: \subsubsection{Local Functions}
244:
1.7 ! takayama 245: コントロールサーバの各実装は、独自にローカル関数をサポートしてもよい。
! 246: 実際、サンプル実装 oxc はローカル関数をサポートしている。
1.2 ohara 247:
1.7 ! takayama 248: ここでは、oxc のローカル関数 spawn について説明しよう。
1.2 ohara 249:
1.7 ! takayama 250: spawn は計算サーバを起動し、少なくとも 1 個の引数を持つ。この引数は
! 251: SM\_control\_spawn\_server で用いられる {\sl List} Argument と同一の形式で
! 252: ある。すなわち、スタックに(右がトップ)
1.5 ohara 253: \begin{tabular}{|c|c|c|} \hline
254: {\sl List} Argument & {\sl Integer32} 1 & {\sl String} ``spawn'' \\
255: \hline
256: \end{tabular}
1.7 ! takayama 257: を積み、SM\_executeFunction をコントローラに送る。
! 258: SM\_executeStringByLocalParser は利用できないので注意する。
1.2 ohara 259:
1.7 ! takayama 260: spawn は、計算サーバの起動に成功したら (CMO\_INT32, サーバID) を、失
! 261: 敗したらエラーオブジェクトをスタックに積む。例えば計算サーバが発見できな
! 262: かった場合にはエラーオブジェクトを積むことになる。コントロールサーバは
! 263: access(2) を用いて PATH から計算サーバを探す。もし見つからなければ、fork
! 264: をせずに、エラーオブジェクトをスタックに積む。
1.1 takayama 265: */
266:
267: /*&eg
268:
269: This document has not yet been translated into English from Japanese.
270:
271: */
272:
273: \end{document}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>