=================================================================== RCS file: /home/cvs/OpenXM/doc/Attic/genkou19991125.tex,v retrieving revision 1.3 retrieving revision 1.55 diff -u -p -r1.3 -r1.55 --- OpenXM/doc/Attic/genkou19991125.tex 1999/12/18 11:52:51 1.3 +++ OpenXM/doc/Attic/genkou19991125.tex 1999/12/23 11:59:22 1.55 @@ -1,109 +1,448 @@ \documentclass{jarticle} -\title{\bf Open XM($B%?%$%H%kL$Dj(B)} -\author{ - Maekawa \\ - Noro \\ - : \\ - : \\ +%% $OpenXM: OpenXM/doc/genkou19991125.tex,v 1.54 1999/12/23 08:56:51 tam Exp $ + +\usepackage{jssac} +\title{タイのトル} +\title{ +意味もない修飾過剰な語句は排除しましょう。 +TCP/IP ソケットとか、TCP/IP 実装とか何のこっちゃと思いました。 } -\date{ 1999$BG/(B, 11$B7n(B25$BF|(B} -%\pagestyle{empty} +\author{前 川 将 秀\affil{神戸大学理学部} + \mail{maekawa@math.sci.kobe-u.ac.jp} + \and 野 呂 正 行\affil{富士通研究所} + \mail{noro@para.flab.fujitsu.co.jp} + \and 小 原 功 任\affil{金沢大学理学部} + \mail{ohara@kappa.s.kanazawa-u.ac.jp} + \and 奥 谷 行 央\affil{神戸大学大学院自然科学研究科} + \mail{okutani@math.sci.kobe-u.ac.jp} + \and 高 山 信 毅\affil{神戸大学理学部} + \mail{takayama@math.sci.kobe-u.ac.jp} + \and 田 村 恭 士\affil{神戸大学大学院自然科学研究科} + \mail{tamura@math.sci.kobe-u.ac.jp} +} +\art{} \begin{document} \maketitle -\section{OpenXM $B$N7W;;%b%G%k(B} +\section{OpenXMとは} -OpenXM $B$O?t3X%=%U%H4V$G%a%C%;!<%8$r8r49$9$k$?$a$N5,Ls$G$"$k!#(B -OpenXM $B$H$O(B Open message eXchange protocol for Mathematics $B$NN,$G$"$k!#(B -$B?t3X%=%U%H4V$G%a%C%;!<%8$r$d$j$H$j$5$;$k$3$H$K$h$j!"(B -$B$"$k?t3X%=%U%H$+$iB>$N?t3X%=%U%H$r8F$S=P$7$F7W;;$r9T$J$C$?$j!"(B -$BB>$N%^%7%s$G7W;;$r9T$J$o$;$?$j$G$-$k$h$&$K$9$k!#(B -$BH/C<$OLnO$@59T$H9b;3?.5#$K$h$j!"(B asir $B$H(B kan/sm1 $B$r(B -$BAj8_$K8F$S=P$95!G=$r$N?t3X%=%U%H$r;H$($k$h$&$K$9$k$3$H$G$"$k!#(B +OpenXM は数学プロセス間でメッセージを交換するための規約である。 +数学プロセス間でメッセージをやりとりすることにより、 +ある数学プロセスから他の数学プロセスを呼び出して計算を行なったり、 +他のマシンで計算を行なわせたりすることが目的である。 +なお、 OpenXM とは Open message eXchange protocol for Mathematics の略である。 +OpenXM の開発の発端は野呂と高山により、 +asir と kan/sm1 を相互に呼び出す機能を実装したことである。 -$BH/C<$H$J$C$?(B asir $B$H(B kan/sm1 $B$G$N$N7A<0$r$b(B -$B07$($k$h$&$K$7$F$"$k!#(B +現在の OpenXM 規約では共通表現形式によるメッセージを用いている。上記の文 +字列を送る方法の利点を生かすため、OpenXM 規約では共通表現形式の中の文字 +列として、ローカル言語の文法に従った文字列を用いたメッセージの交換も可能 +となっている。{\large\bf しかし、こんな細かいことをここで説明しなければ +ならない理由がやっぱり分からないなぁ。構成的におかしいと思うけどなぁ。意 +味不明。} +OpenXM 規約では通信の方法に幾らかの自由度があるが、現在のところは TCP/IP +を用いた通信しか実装されていない。そこで、この論文では具体的な実装は +TCP/IP を用いていると仮定する。 -\section{OpenXM $B$N%a%C%;!<%8$N9=B$(B} +\section{OpenXM のメッセージの構造} -OpenXM $B$G5,Dj$7$F$$$k%a%C%;!<%8$OO@M}E*$K(B -OX $BAX!"(B SM $BAX!"(B CMO $BAX$KJ,$1$k$3$H$,$G$-$k!#(B -$B$3$NCf$G!"%a%C%;!<%8$H$7$FAw$k$3$H$,2DG=$J$N$O(B -OX $BAX$GDj5A$5$l$?$b$N$@$1$G$"$j!"(B -SM $BAX!"(B CMO $BAX$GDj5A$5$l$F$$$k%G!<%?$O(B -OX $BAX$GDj5A$5$l$F$$$k%G!<%?$N0lIt$KKd$a9~$^$l$F(B -$BAw$i$l$k!#(B -SM $BAX!"(B CMO $BAX$GDj5A$5$l$F$$$k%G!<%?0J30$K$b(B -$BA0=R$N(B MP $B$d(B OpenMath $B$N(B XML, binary $BI=8=$b(B -OX $BAX$KKd$a9~$^$l$FAw$i$l$k$o$1$G$"$k$,!"(B -$B$I$N$h$&$J%G!<%?$,Kd$a9~$^$l$F$$$k$+$O!"(B -OX $BAX$N@hF,$N(B tag $B$r8+$l$PH=JL$G$-$k$h$&$K$J$C$F$$$k!#(B +OpenXM で規定されている TCP/IP 実装によるメッセージはバイトストリームと +なっており、次のような構造になっている。 +\begin{tabular}{|c|c|} +\hline +ヘッダ & \hspace{10mm} ボディ \hspace{10mm} \\ +\hline +\end{tabular} -\section{OpenXM $B$N7W;;$N?J9TJ}K!(B} +ヘッダの長さは 8 バイトであると定められている。 +ボディの長さはメッセージごとに異なっているが、 +長さは $0$ でもよい。 -OpenXM $B5,Ls$G$N%a%C%;!<%8$N8r49$O%5!<%P$H%/%i%$%"%s%H$N4V$G(B -$B9T$J$o$l$k!#%/%i%$%"%s%H$+$i%5!<%P$X7W;;$5$;$?$$%G!<%?$r(B -$B%a%C%;!<%8$H$7$FAw$j!"Dj$5$l$F$*$j!"l9g$K$O!"$=$l$KBP1~$9$kF0:n$r9T$J$&!#(B -$B$3$N$H$-!"I,MW$,$"$l$P%5!<%P$O%9%?%C%/$+$i%G!<%?$rl9g!"(B -$B%5!<%P$OF0:n$N7k2L$r%9%?%C%/$K@Q$s$G$$$k!#(B -$B%5!<%P$K9T$J$o$;$?F0:n$N7k2L$r%/%i%$%"%s%H$,CN$j$?$$>l9g!"(B -$B%9%?%C%/$+$i%G!<%?$r$N%W%m%8%'%/%H(B} +ここで TCP/IP 実装における 32 bit の整数の +表現方法について説明する必要がある。 +OpenXM 規約の TCP/IP 実装ではバイトストリームで 32 bit の整数 20 を +{\tt 00 00 00 14} と表す方法と {\tt 14 00 00 00} と表す方法がある。 +この表現方法の違いはクライアントとサーバの最初の接続時に +双方の合意で決定することになっている。 +なお、合意がない場合には前者の表現方法 +(以後、この表現方法をネットワークバイトオーダーと呼ぶ)を +使うことになっている。 +また、負の数を表現する必要があるときには、 +2 の補数表現を使うことになっている。 -\section{$B8=:_Ds6!$5$l$F$$$k%=%U%H%&%'%"(B} +CMO 形式の多倍長整数は、 Gnu MPライブラリ等を参考にしており、 +符合付き絶対値表現を用いている。 +タグ以降の形式は次のようになる。 + +\begin{tabular}{|c|c|c|c|c|} \hline +$f$ & $b_0$ & $b_1$ & $\cdots$ & $b_{n-1}$ \\ \hline +\end{tabular} + +ここで、 1 つの枠は 4 バイトを表し、 +$f$ は符合付き 32 ビット整数を、 +$b_0$, $b_1$, $\cdots$, $b_{n-1}$ は符合なし 32 ビット整数を表している。 +さらに、 $|f| = n$ が成り立たなければならない。 +このオブジェクトは +\[ \mbox{sgn}(f) \times \{ b_0 (2^{32})^0 + b_1 (2^{32})^1 + \cdots + + b_{n-1} (2^{32})^{n-1} \} \] +という整数であると定義されている。 +ただし、 +\[ \mbox{sgn}(f) = \left\{ \begin{array}{ll} + 1 & f>0 \\ + 0 & f=0 \\ + -1 & f<0 \\ \end{array} \right. \] +である。 + +ここで具体例をだそう。 +$4294967298 = 1 \times 2^{32} + 2$ を CMO 形式の +ネットワークバイトオーダー、多倍長整数で表現すると、 +\begin{center} + {\tt 00 00 00 14 00 00 00 02 00 00 00 02 00 00 00 01} +\end{center} +となる。また、同じ表現方法で $-1$ を表現すると、 +\begin{center} + {\tt 00 00 00 14 ff ff ff ff 00 00 00 01} +\end{center} +となる。 + + +\section{mathcap について} + +OpenXM 規約では、通信時に用いられるメッセージの種類を +各ソフトウェアが制限する方法を用意している。 +これは各ソフトウェアの実装によってはすべてのメッセージを +サポートするのが困難な場合があるからである。 +また、各ソフトウェアでメッセージの種類を拡張したい場合にも有効である。 +この制限(あるいは拡張)は CMO 形式で定義されている mathcap と +呼ばれるデータ構造によって行われる。 +この節では mathcap のデータ構造と、 +具体的なメッセージの制限の手続きについて説明する。 + +まず、手続きについて説明しよう。 +クライアント側の mathcap をサーバへ送ると、 +すでに説明したように、サーバは受け取った mathcap をスタックに積み上げる。 +次にクライアントはスタックマシンへの命令をサーバへ送ることにより、 +サーバはスタックに積まれている mathcap を取り出し、 +mathcap で設定されていないメッセージをクライアント側へ +送らないように設定する。 +サーバ側の mathcap が欲しい場合には以下のようにする。 +クライアントがスタックマシンへの命令コードにより要求すると、 +サーバはサーバ自身の mathcap をスタックに積む。 +さらにクライアントがサーバに命令を送れば、 +サーバはスタックにある mathcap をクライアントへ送出する。 +このようにしてクライアントはサーバ側の mathcap を受け取るわけである。 + + +次に mathcap のデータ構造について説明する。 + +\begin{quote} +説明。説明。説明。説明。説明。 +説明。説明。説明。説明。説明。 +説明。説明。説明。説明。説明。 +説明。説明。説明。説明。説明。 +\end{quote} + +具体的な mathcap の例をあげる。 + +\begin{quote} +説明。説明。説明。説明。説明。 +説明。説明。説明。説明。説明。 +説明。説明。説明。説明。説明。 +説明。説明。説明。説明。説明。 +\end{quote} + + +{\large\bf これより以降は意味不明で私にはよく分かりませんでしたので、 +たぶん読者も分からないでしょう} + +なお、 mathcap データの中では CMO 形式で定義されている +32 bit 整数、文字列、リスト構造が使われており、 +mathcap データに含まれている内容を理解できるためには +必然的にこれらも理解できる必要がある +(ってことは CMO 形式のところでこれらを +説明しなければならないってことです)。 + +OpenXM 対応版の asir サーバである ox\_asir が返す mathcap を以下に示す。 + +なお、 $a_1$, $a_2$, $\cdots$, $a_n$ を要素に +持つリスト構造を {\tt [$a_1$, $a_2$, $\cdots$, $a_n$]} 、 +文字列 ``string'' を {\tt "string"} 、 32 bit 整数を +それに対応する 10 進数の整数で示す。 + +%↓手で作ったので間違えている可能性あり。 +%%古いバージョン。差し替えの必要あり。 +\begin{verbatim} +[ [199901160,"ox_asir"], + [276,275,258,262,263,266,267,268,274 + ,269,272,265,264,273,300,270,271], + [ [514,[1,2,3,4,5,2130706433,2130706434 + ,17,19,20,21,22,24,25,26,31,27,33,60]], + [2144202544,[0,1]] + ] +] +\end{verbatim} + +この mathcap データのリスト構造は大きく分けて 3 つの部分に分かれる。 +最初の {\tt [199901160,"ox\_asir"]} の部分にはサーバの情報が入っている。 +%この最初の要素がまたリスト構造となっており、 +最初の要素はバージョンナンバーを、次の要素はサーバの名前を表している。 + +次の {\tt [276,275,$\cdots$,271]} の部分は +スタックマシンに対する命令のうち、利用可能な命令の種類を表している。 +スタックマシンへの命令はすべて 32 ビットの整数で表しており、 +このリストは利用可能な命令に対応する 32 ビットの整数のリストとなっている。 + +最後の {\tt [ [514,[1,2,3,$\cdots$,60]],[2144202544,[0,1]] ]} の部分は +理解可能なデータの形式を表している。 +この部分はさらに {\tt [514,[1,2,3,$\cdots$,60]]} と +{\tt [2144202544,[0,1]]} にの部分に分けることができ、 +それぞれが一つのデータ形式についての情報となっている。 +どのデータ形式についての情報かは最初の要素にある整数値をみれば +分かるようになっている。 +この整数値は CMO 形式では 514 となっている。 +最初のデータ形式を区別する整数値以後の要素は +各データ形式によってどのように使われるか定まっている。 +CMO 形式では理解可能なデータのタグがリストの中に収まっている。 +前節で CMO 形式では多倍長整数を表すタグが 20 であることを述べたが、 +このリストに 20 が含まれているので、 +ox\_asir は CMO 形式の多倍長整数を受け取れることがわかる。 + +なお、データが受け取れることと、 +データの論理構造が理解できることとはまったく別物であるので +注意する必要がある。 + + +\section{セキュリティ対策} + +OpenXM 規約は TCP/IP を用いて通信を行うことを考慮している規約である。 +ネットワークによって接続される現代の多くのソフトウェアと同様、 +OpenXM 規約もまた通信時のセキュリティについて注意している。 +以下、このことについて説明しよう。 + +{\large\bf 意味不明なことを書いているが、} +侵入者に攻撃の機会をできるだけ与えないようするた +めに、接続が必要になった時のみ接続を待つようにし、 +常に接続に関与するといったことは避けている(やっぱり意味不明である)。 + +また、侵入者が接続を行なう一瞬のすきを狙ってくる可能性もあるので、 +接続を行なう時に接続を待つポート番号をランダムに決めている(誰が決めてい +るのかはやっぱり不明であるが)。 +さらにもう一段安全性を高めるために、 +接続時に 1 回だけ使用可能なパスワードを作成し、 +そのパスワードを使って認証を行なう(誰がパスワードを決めて誰が認証を行っ +ているのかが不明だけど)。 +このパスワードは一旦使用されれば無効にするので、 +もし仮になんらかの手段でパスワードが洩れたとしても安全だと考えている。 + +%なお、上記のポート番号とパスワードは安全な手段で送られて +%いると仮定している。 +%また、同一のコンピュータ上に悪意のあるユーザはいないと仮定している +%ことに注意しなければならない。 +%なぜなら、現在の実装ではサーバ、およびクライアントの動作している +%コンピュータ上ではこのポート番号とパスワードがわかってしまうためである。 + +なお、接続が確立した後のメッセージの送受信に関しては、 +特に暗号化などの処置を行っているわけではない。 +もし必要があれば、通信路の暗号化を行なう機能がある +ソフトウェア ssh を使うことを考えている。 + +\section{他のプロジェクト} + +他のプロジェクトについても触れておこう。 + +OpenMath プロジェクトは数学的なオブジェクトを +コンピュータ上で表現する方法を決定している。 +各ソフトウェア間でオブジェクトを交換する際の +オブジェクトの変換手順についても述べられている。 +表現方法は一つだけでなく、 XML 表現や binary 表現などが +用意されている。 +詳細は + +http://www.openmath.org/omsoc/index.html A.M.Cohen + + +以下は書いてる途中。 + +NetSolve + +http://www.cs.utk.edu/netsolve/ + + +MP + +http://symbolicNet.mcs.kent.edu/SN/areas/protocols/mp.html + + +MCP + +http://horse.mcs.kent.edu/~pwang/ + + +\section{現在提供されているソフトウェア} + +現在 OpenXM 規格に対応しているクライアントには +asir, sm1, Mathematica がある。 +これらのクライアントから +OpenXM 規格に対応したサーバを呼び出すことができる。 +現在 OpenXM 規約に対応しているサーバソフトウェアには、 + asir, sm1, gnuplot, Mathematica などがあり、 +それぞれ ox\_asir, ox\_sm1, ox\_math という名前で提供されている。 +また、 OpenMath 規格の XML 表現で表現されたデータと CMO 形式の +データを変換するソフトウェアが JAVA によって実装されており、 +OMproxy という名前で提供されている。 + +\begin{thebibliography}{99} +\bibitem{OpenXM-1999} +野呂正行, 高山信毅: +{Open XM の設計と実装 --- Open message eXchange protocol for Mathematics}, +1999/11/22 +\bibitem{Ohara-Takayama-Noro-1999} +小原功任, 高山信毅, 野呂正行: +{Open asir 入門}, 1999, 数式処理, Vol 7, No 2, 2--17. (ISBN4-87243-086-7, SEG 出版, Tokyo). +\end{thebibliography} \end{document}