[BACK]Return to OX-RFC-101.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

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>