% $OpenXM: OpenXM/src/oxc/oxc.tex,v 1.1 2000/11/17 03:20:47 ohara Exp $ \documentclass[12pt]{jarticle} \title{新コントロールサーバについて} \def\To{$\Longrightarrow$} \begin{document} \maketitle \section{新コントロールサーバの目的} \begin{itemize} \item コントロールサーバのスタックマシン化 \item サーバ起動方法を統一する。\\ \To OMproxy からコントロールサーバ部分を取り除く。 \item (ssh を使った)リモートでの起動方法を規約化する \item コントロールサーバの起動と計算サーバの起動の分離 \end{itemize} \section{スタックマシン化} いままで意味不明だったSM\_control\_* の位置づけがはっきりする。 \newpage \section{計算サーバの起動の分離} メリット \begin{itemize} \item 起動手続きが単純になる。 \item 一つのコントロールサーバから複数の計算サーバを起動可能に。\\ \To コントロールサーバの乱立を防ぐ。 \end{itemize} デメリット \begin{itemize} \item SM\_control\_* のセマンティックスが変わる。 \end{itemize} 例: SM\_control\_reset\_connection を考えてみると、新コントロールサーバ は複数の計算子プロセスを持つので、どのプロセスをリセットするか指定する必 要がある。 \section{Java への対応} Java による計算サーバは次の問題がある。 すなわち、Pure Java では、OpenXM 規約で定められた ファイルディスクリプタ 3,4 を読み書きできないので対策が必要。\\ \To 標準入出力を利用するようにプログラミングし、 次のスクリプトで wrap する。エラーメッセージは、標準出力か、あるいは独自 にウィンドウを開いて表示する。 \begin{verbatim} #!/bin/sh java OMproxy 3>&0 4>&1 \end{verbatim} \newpage \section{ssh による、コントロールサーバのリモート起動} ローカルでの実行形式の探索は次であった。 \begin{enumerate} \item 環境変数 OpenXM\_HOME から探す。 \item /usr/local/OpenXM/bin から探す。 \item 環境変数 PATH から探す。 \end{enumerate} ssh を介して起動する場合、利用可能な環境変数は\\ remotehost:\$HOME/.ssh/environment にあらかじめ登録する必要がある。 したがって、.ssh/environment における PATH の設定を \$OpemXM\_HOME/bin を含むものにしておくのが一番単純であると思われる。 計算サーバの起動はいままでどおりでよい。 \bigskip \noindent 注意: 次は不可能です。 \begin{verbatim} $ ssh remotehost 'PATH=\$PATH:\$OpenXM_HOME/bin' oxc PATH=$PATH:$OpenXM_HOME/bin: Command not found. \end{verbatim} \section{oxc の許すコマンドラインオプション} \begin{tabular}{|l|l|} \hline -h hostname & hostname はクライアントマシンのホスト名 \\ \hline -p port & ポート番号 \\ \hline -c password & パスワード文字列 \\ \hline -x & xterm を用いて出力を表示する \\ \hline \end{tabular} \bigskip ただしパスワードは以下の文字からなる任意長の文字列とする \begin{verbatim} %.,^_+-=/@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz \end{verbatim} \newpage \section{コントロールサーバの起動手続き} クライアントからは、まず \begin{verbatim} execlp("ssh", remote_host, "-f", "oxc", "-h", host, "-p", port, "-c", password, NULL); \end{verbatim} によって oxc を起動する。 oxc は起動後ただちに host:port に接続しようとするので、 クライアントはそれを listen, accept する。 サーバは1バイト書いてから読む、クライアントは1バイト読んでから書く という形でバイトオーダの交換を行う。 以後はただの OX スタックマシン。 \section{計算サーバの起動} \noindent (その1) 関数 oxc\_open を用いる。(SM\_executeFunction) \\ 形式は oxc\_open(cmd, port) で cmd は計算サーバのファイル名である。 成功するとスタックに計算プロセスの pid を int32 で積む。 \bigskip \noindent (その2)(ただし未実装) スタックマシン命令 SM\_control\_launch を用いる。 スタックの状態は \begin{verbatim} (cmo_string, cmd) <-- top (cmo_int32, port) \end{verbatim} でなければならない。成功するとスタックに計算プロセスの pid を int32 で積む。 \newpage \section{現在の実装の問題点} \begin{itemize} \item 計算プロセスの管理。 \item スタックマシン命令をどこまで実装するべきか。 \item Mathcap 実装が不完全。\\ \To ox\_toolkit の問題。 \item libgmp が必要。\\ \To ox\_toolkit の問題。 \end{itemize} \end{document}