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