Annotation of OpenXM/src/oxc/oxc.tex, Revision 1.1
1.1 ! ohara 1: % $OpenXM$
! 2:
! 3: \documentclass[12pt]{jarticle}
! 4: \title{新コントロールサーバについて}
! 5: \def\To{$\Longrightarrow$}
! 6:
! 7: \begin{document}
! 8: \maketitle
! 9:
! 10: \section{新コントロールサーバの目的}
! 11:
! 12: \begin{itemize}
! 13: \item コントロールサーバのスタックマシン化
! 14: \item サーバ起動方法を統一する。\\
! 15: \To OMproxy からコントロールサーバ部分を取り除く。
! 16: \item (ssh を使った)リモートでの起動方法を規約化する
! 17: \item コントロールサーバの起動と計算サーバの起動の分離
! 18: \end{itemize}
! 19:
! 20: \section{スタックマシン化}
! 21:
! 22: いままで意味不明だったSM\_control\_* の位置づけがはっきりする。
! 23:
! 24: \newpage
! 25:
! 26: \section{計算サーバの起動の分離}
! 27:
! 28: メリット
! 29:
! 30: \begin{itemize}
! 31: \item 起動手続きが単純になる。
! 32: \item 一つのコントロールサーバから複数の計算サーバを起動可能に。\\
! 33: \To コントロールサーバの乱立を防ぐ。
! 34: \end{itemize}
! 35:
! 36: デメリット
! 37:
! 38: \begin{itemize}
! 39: \item SM\_control\_* のセマンティックスが変わる。
! 40: \end{itemize}
! 41:
! 42: 例: SM\_control\_reset\_connection を考えてみると、新コントロールサーバ
! 43: は複数の計算子プロセスを持つので、どのプロセスをリセットするか指定する必
! 44: 要がある。
! 45:
! 46: \section{Java への対応}
! 47:
! 48: Java による計算サーバは次の問題がある。
! 49: すなわち、Pure Java では、OpenXM 規約で定められた
! 50: ファイルディスクリプタ 3,4 を読み書きできないので対策が必要。\\
! 51: \To
! 52: 標準入出力を利用するようにプログラミングし、
! 53: 次のスクリプトで wrap する。エラーメッセージは、標準出力か、あるいは独自
! 54: にウィンドウを開いて表示する。
! 55:
! 56: \begin{verbatim}
! 57: #!/bin/sh
! 58: java OMproxy 3>&0 4>&1
! 59: \end{verbatim}
! 60:
! 61: \newpage
! 62:
! 63: \section{ssh による、コントロールサーバのリモート起動}
! 64:
! 65: ローカルでの実行形式の探索は次であった。
! 66:
! 67: \begin{enumerate}
! 68: \item 環境変数 OpenXM\_HOME から探す。
! 69: \item /usr/local/OpenXM/bin から探す。
! 70: \item 環境変数 PATH から探す。
! 71: \end{enumerate}
! 72:
! 73: ssh を介して起動する場合、利用可能な環境変数は\\
! 74: remotehost:\$HOME/.ssh/environment にあらかじめ登録する必要がある。
! 75: したがって、.ssh/environment における PATH の設定を
! 76: \$OpemXM\_HOME/bin を含むものにしておくのが一番単純であると思われる。
! 77: 計算サーバの起動はいままでどおりでよい。
! 78:
! 79: \bigskip
! 80:
! 81: \noindent
! 82: 注意: 次は不可能です。
! 83: \begin{verbatim}
! 84: $ ssh remotehost 'PATH=\$PATH:\$OpenXM_HOME/bin' oxc
! 85: PATH=$PATH:$OpenXM_HOME/bin: Command not found.
! 86: \end{verbatim}
! 87:
! 88: \section{oxc の許すコマンドラインオプション}
! 89:
! 90: \begin{tabular}{|l|l|}
! 91: \hline
! 92: -h hostname & hostname はクライアントマシンのホスト名 \\
! 93: \hline
! 94: -p port & ポート番号 \\
! 95: \hline
! 96: -c password & パスワード文字列 \\
! 97: \hline
! 98: -x & xterm を用いて出力を表示する \\
! 99: \hline
! 100: \end{tabular}
! 101:
! 102: \bigskip
! 103:
! 104: ただしパスワードは以下の文字からなる任意長の文字列とする
! 105: \begin{verbatim}
! 106: %.,^_+-=/@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
! 107: \end{verbatim}
! 108:
! 109: \newpage
! 110:
! 111: \section{コントロールサーバの起動手続き}
! 112:
! 113: クライアントからは、まず
! 114: \begin{verbatim}
! 115: execlp("ssh", remote_host, "-f", "oxc", "-h", host,
! 116: "-p", port, "-c", password, NULL);
! 117: \end{verbatim}
! 118: によって oxc を起動する。
! 119: oxc は起動後ただちに host:port に接続しようとするので、
! 120: クライアントはそれを listen, accept する。
! 121: サーバは1バイト書いてから読む、クライアントは1バイト読んでから書く
! 122: という形でバイトオーダの交換を行う。
! 123:
! 124: 以後はただの OX スタックマシン。
! 125:
! 126: \section{計算サーバの起動}
! 127:
! 128: \noindent
! 129: (その1)
! 130:
! 131: 関数 oxc\_open を用いる。(SM\_executeFunction) \\
! 132: 形式は oxc\_open(cmd, port) で cmd は計算サーバのファイル名である。
! 133: 成功するとスタックに計算プロセスの pid を int32 で積む。
! 134:
! 135: \bigskip
! 136:
! 137: \noindent
! 138: (その2)(ただし未実装)
! 139:
! 140: スタックマシン命令 SM\_control\_launch を用いる。
! 141: スタックの状態は
! 142:
! 143: \begin{verbatim}
! 144: (cmo_string, cmd) <-- top
! 145: (cmo_int32, port)
! 146: \end{verbatim}
! 147:
! 148: でなければならない。成功するとスタックに計算プロセスの pid を int32 で積む。
! 149:
! 150: \newpage
! 151:
! 152:
! 153: \section{現在の実装の問題点}
! 154:
! 155: \begin{itemize}
! 156: \item 計算プロセスの管理。
! 157: \item スタックマシン命令をどこまで実装するべきか。
! 158: \item Mathcap 実装が不完全。\\
! 159: \To ox\_toolkit の問題。
! 160: \item libgmp が必要。\\
! 161: \To ox\_toolkit の問題。
! 162: \end{itemize}
! 163:
! 164: \end{document}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>