[BACK]Return to genkou19991125.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc

Diff for /OpenXM/doc/Attic/genkou19991125.tex between version 1.30 and 1.43

version 1.30, 1999/12/21 06:59:42 version 1.43, 1999/12/22 13:59:41
Line 2 
Line 2 
   
 \title{タイトル未定}  \title{タイトル未定}
 \author{  \author{
 前川 まさひで,  前川 将秀\thanks{神戸大学理学部数学科},
 野呂 正行,  野呂 正行\thanks{富士通研究所},
 小原 功任, \\  小原 功任\thanks{金沢大学理学部計算科学教室}, \\
 奥谷 幸夫,  奥谷 行央
 高山 信毅,  %\thanks{神戸大学大学院自然科学研究科博士課程前期課程数学専攻},
   \thanks{神戸大学大学院自然科学研究科数学専攻},
   高山 信毅\thanks{神戸大学理学部数学教室},
 田村 恭士  田村 恭士
   %\thanks{神戸大学大学院自然科学研究科博士課程後期課程情報メディア科学専攻計算システム講座}
   \thanks{神戸大学大学院自然科学研究科情報メディア科学専攻}
 }  }
 \date{1999年11月25日}  \date{1999年11月25日}
 %\pagestyle{empty}  %\pagestyle{empty}
Line 17 
Line 21 
   
 \section{OpenXMとは}  \section{OpenXMとは}
   
 OpenXM は数学プロセス間でメッセージを交換するための規約である。数学プロ  OpenXM は数学プロセス間でメッセージを交換するための規約である。
 セス間でメッセージをやりとりさせることにより、ある数学プロセスから他の数  数学プロセス間でメッセージをやりとりすることにより、
 学プロセスを呼び出して計算を行なったり、他のマシンで計算を行なわせたりす  ある数学プロセスから他の数学プロセスを呼び出して計算を行なったり、
 ることが目的である。なお、 OpenXM とは Open message eXchange protocol  他のマシンで計算を行なわせたりすることが目的である。
 for Mathematics の略である。  なお、 OpenXM とは Open message eXchange protocol for Mathematics の略である。
   OpenXM の開発の発端は野呂と高山により、
   asir と kan/sm1 を相互に呼び出す機能を実装したことである。
   
   %発端となった asir と kan/sm1 での実装時には、
   初期の実装では、相手側のローカル言語の文法に従った文字列を送っていた。
   現在の OpenXM 規約では共通表現形式によるメッセージを用いている。
   この方法では相手側のソフトが asir なのか kan/sm1 なのかを判別するなどして、
   相手側のローカル言語の文法に合わせた文字列を作成する必要がなくなる。
   しかし、ローカル言語の文法に従った文字列を送る方法も、
   効率的であるとはいい難いが、使いやすい。
   そのため、 OpenXM 規約では共通表現形式の中の文字列として、
   ローカル言語の文法に従った文字列を用いた
   メッセージの交換も可能となっている。
   
 OpenXM の開発の発端は野呂正行と高山信毅により、 asir と kan/sm1 を  %OpenXM 規約独自のデータ形式である CMO 形式(Common Mathematical Object format)
 相互に呼び出す機能を実装したことである。  %以外にも、 MP や OpenMath の XML, binary 表現形式といった他の形式をも
 \footnote{この段落必要?}  %扱えるようにしてある。
 発端となった asir と kan/sm1 での実装時には、  
 お互いに相手側のコマンド文字列を送っていた。  
 この方法は現在の OpenXM 規約でも形を変えて可能ではあるが、  
 使いやすい反面、効率的であるとはいい難い。  
 さらに、この方法では相手側のソフトが asir なのか kan/sm1 なのかを  
 判別して、相手側に合わせてコマンド文字列を作成する必要がある。  
   
 これ以外の方法として、  OpenXM 規約では通信路の確保の方法に幾らかの自由度があるが、
 OpenXM 規約では共通表現形式によるメッセージも用意している。  現在は TCP/IP ソケットを用いた実装しかない。
 OpenXM 規約独自のデータ形式である CMO 形式(Common Mathematical Object format)  %通信の実現方法は通信路のとりかたにより変わる。
 以外にも、 MP や OpenMath の XML, binary 表現形式といった他の形式をも  そこで、以後ここでは具体的な実装は TCP/IP ソケットを
 扱えるようにしてある。  用いていると仮定する。
 なお、現在の OpenXM 規約では、  
 前述のコマンド文字列も CMO 形式などの何らかのデータ形式の中の  
 文字列として表現して送る必要がある。  
   
 \section{OpenXM の計算モデル}  
   
 {\Huge この節では計算モデルの話をしなければいけませんよ、田村君}  \section{OpenXM のメッセージの構造}
   
 OpenXM 規約でのメッセージの交換はサーバとクライアントの間で行なわれる。  OpenXM で規定されている TCP/IP 実装によるメッセージは
 サーバはスタックマシンであると仮定されており、サーバがクライアントから受  バイトストリームとなっており、
 け取ったメッセージはすべてスタックに積まれる。OpenXM のメッセージの中に  次のような構造になっている。
 はサーバに行なわせたい動作に対応するデータがあり、このメッセージを受け取っ  
 たサーバはそれに対応する動作を行なうことが期待されている。ただし、サーバ  
 は命令されない限り何も動作を行なおうとはしない。  
   
   \begin{tabular}{|c|c|} \hline
   ヘッダ  & \hspace{10mm} ボディ \hspace{10mm} \\ \hline
   \end{tabular}
   
 \section{OpenXM のメッセージの構造}  ヘッダの長さは 8 バイトであると定められている。
   ボディの長さはメッセージごとに異なっているが、
   長さは $0$ でもよい。
   
 {\Huge この節では構造の話をしなければいけませんよ、田村君}  ヘッダは次の二つの情報を持っている。
   
 OpenXM のメッセージはバイトストリームであり、次のような構造を持つ。  
 \begin{verbatim}  
 ヘッダ  ボディ  
 \end{verbatim}  
 ヘッダの長さは8バイトであると定められている。ボディの長さはメッセージご  
 とに異なる($0$でもよい)。  
 ヘッダは次の二つの情報を持つ。  
 \begin{enumerate}  \begin{enumerate}
 \item 前半の4バイト。タグと呼ばれ、メッセージの種類を表わす識別子である。  \item   前半の 4 バイト。メッセージの種類を表わす識別子であり、
 \item 後半の4バイト。メッセージにつけられた通し番号である。          タグと呼ばれる。
   \item   後半の 4 バイト。メッセージにつけられた通し番号である。
 \end{enumerate}  \end{enumerate}
   それぞれの 4 バイトは 32 ビット整数とみなされて扱われる。
   この場合に用いられる整数の表現方法の説明については後述するが、
   基本的に表現方法はいくつかの選択肢から選ぶことが可能となっており、
   またその選択は通信路の確立時に一度だけなされることに注意しなければならない。
   
 それぞれの4バイトは32ビット整数とみなされて処理される。  ボディの中身はタグによるメッセージの種類によって
 この場合に用いられる整数の表現方法については後述するが、基本的に  それぞれ独立に決められるようになっている。
 表現方法はいくつかの選択肢から選ぶことが可能であり、  もし、システム固有の表現を OpenXM 規約のメッセージに
 また選択は通信路の確立時に一度だけなされることに注意しておこう。  埋め込んで使いたい場合には、
   このような用途のために推奨されている整数値の範囲がタグにはあるので
   タグの値をこの推奨されている範囲に設定し、
   システム固有の表現をボディに埋め込めばよい。
   
 {\Huge 以下、書き直してね。}  
   
 ボディの中のデータがどのように格納されているかは  \section{OpenXM の計算モデル}
 各データ形式がそれぞれ独立に決められるようになっている。  
 もし、 OpenXM 規約でメッセージのやりとりを行ないたいが、  
 まだ規約で定義されていないデータ形式を使いたい場合は、  
 タグをまだ使われてなさそうな値  
 (システム固有の表現のために推奨されている値がある)  
 に設定し、 ボディの部分にデータを埋め込めばよい。  
 なお、すべてのメッセージに ボディが必要というわけではなく、  
 ボディのないメッセージも OpenXM 規約には存在することに  
 注意しなければならない。  
   
 サーバに対する動作に対応したデータは SM 形式として定義されている。  {\Huge この節では計算モデルの話をしなければいけません}
 SM 形式以外のデータでは、サーバは受け取ったデータをスタックに積む  
 以外の動作をしないことになっている。  
 つまり、 SM 形式のデータがデータを受け取る以外の動作を  
 サーバに行なわせる唯一のデータ形式である。  
 このデータを受け取る以外の動作の中には、  
 データになんらかの加工を施す動作も入っている。  
 このデータになんらかの加工を施す動作の中には  
 数学的な演算を行なう動作も含まれている。  
 以後、データになんらかの加工を施す動作のことを計算と呼ぶことにする。  
   
 \section{OpenXM の計算の進行方法}  OpenXM 規約での計算とはメッセージを交換することである。
   また、 OpenXM 規約ではクライアント・サーバモデルを採用しているので、
   メッセージの交換はサーバとクライアントの間で行なわれる。
   クライアントからサーバへメッセージを送り、
   サーバからクライアントがメッセージを受け取ることによって
   計算の結果が得られる。
   
 OpenXM における計算とはメッセージの交換のことである。既に計算モデルの節  サーバはスタックマシンであると仮定されており、
 で説明したが(説明されているはずである)、OpenXM はサーバ・クライアントモ  サーバがクライアントから受け取ったメッセージはすべてスタックに積まれる。
 デルを採用していて、サーバはスタックマシンの構造を持つ。サーバが行うのは  ただし、OpenXM のメッセージの中にはサーバに行なわせたい動作に
 基本的に次の事柄に限られる。クライアントからメッセージを送られるとサーバ  対応するデータがあり、
 は、まずメッセージの識別子を調べ、OX\_COMMAND でなければスタックに積む。  このメッセージを受け取ったサーバはそれに対応する動作を
 OX\_COMMAND であればメッセージのボディからスタックマシンのオペコードを取  行なうことが期待されている。
 りだし、あらかじめ規約で定められたアクションを起こす。  しかし、サーバは命令されない限り何も動作を行なおうとはしない。
   このため、クライアントはサーバの状態を気にせずにメッセージを送り、
   一旦メッセージを送付し終えた後、
   サーバへ送ったメッセージの結果を
   サーバから待つことなしに次の動作に移ることができる。
   
 上の説明でわかるように、サーバはクライアントからの指示なしに、自らメッセー  なお、サーバに対する動作に対応したデータは SM 形式として定義されている。
 ジを送ることはない(例外? ox\_asir の mathcap)。  SM 形式以外のデータでは、サーバは受け取ったデータをスタックに積む
   以外の動作をしないことになっている。
   つまり、 SM 形式のデータがサーバにデータを受け取る以外の動作を
   行なわせる唯一のデータ形式である。
   
 {\Huge 以下、書き直してね、田村君}  
   
   \section{OpenXM の計算の進行方法}
   
 % クライアントがサーバへなんらかの計算を行なわせる場合、  OpenXM における計算とはメッセージの交換のことである。
 % クライアントからサーバへ計算させたいデータをメッセージとして送り、  既に計算モデルの節で説明したが、
 % そしてその結果をサーバからメッセージで受け取ることによって計算は行なわれる。  OpenXM はサーバ・クライアントモデルを採用していて、
 % ただし、サーバは結果の送信すらも命令されなければ行なうことはなく、  サーバはスタックマシンの構造を持つ。
 % クライアントは結果を受け取らずにサーバに次々と  サーバが行うのは基本的に次の事柄に限られる。
 % 計算を行なわせることも可能である。  クライアントからメッセージを受け取るとサーバは、
   まずメッセージの識別子を調べ、 SM 形式のデータでなければスタックに積む。
   SM 形式のデータであればメッセージのボディから
   スタックマシンのオペコードを取りだし、
   あらかじめ規約で定められた動作を行なう。
   
   %上の説明でわかるように、
   サーバはクライアントからの指示なしに、
   自らメッセージを送らないことに注意しなければならない。
   %(例外? ox\_asir の mathcap)。
   
 サーバがクライアントから受け取ったメッセージはすべてスタックに積まれる。  サーバがクライアントから受け取ったメッセージはすべてスタックに積まれる。
 ただし、このままでは受け取ったメッセージに含まれるデータを  次いでサーバに SM 形式のデータを送ると、
 スタックに積み上げていくだけで、サーバは計算を行なおうとはしない。  初めてサーバはデータをスタックに積む以外のなんらかの動作を行なう。
 次いでサーバに行なわせたい動作に対応したデータを送ると、  
 初めてサーバは計算などの、なんらかの動作を行なう。  
 このとき、必要があればサーバはスタックから必要なだけデータを取り出す。  このとき、必要があればサーバはスタックから必要なだけデータを取り出す。
 ここで、クライアントからの命令による動作中にたとえエラーが発生したとしても  ここで、クライアントからの命令による動作中にたとえエラーが発生したとしても
 サーバはエラーオブジェクトをスタックに積むだけで、  サーバはエラーオブジェクトをスタックに積むだけで、
 明示されない限りエラーを返さないことに注意しなければならない。  明示されない限りエラーを返さないことに注意しなければならない。
   
 結果が生じる動作をサーバが行なった場合、  結果が生じる動作をサーバが行なった場合、
 サーバは動作の結果をスタックに積んでいる。  サーバは動作の結果をスタックに積む。
 サーバに行なわせた動作の結果をクライアントが知りたい場合、  サーバに行なわせた動作の結果をクライアントが知りたい場合、
 スタックからデータを取り出し送信を行なう命令に対応した SM 形式のデータを  スタックからデータを取り出し送信を行なう命令に対応した SM 形式のデータを
 サーバ側へ送ればよい。  サーバ側へ送ればよい。
   
   {\Huge 以下、書き直し}
   
 クライアントがサーバへ計算を行なわせ、結果を得るという手順を追っていくと、  クライアントがサーバへ計算を行なわせ、結果を得るという手順を追っていくと、
 次のようになる。  次のようになる。
   
Line 275  CMO 形式では理解可能なデータのタグがリストの中に収まっ
Line 285  CMO 形式では理解可能なデータのタグがリストの中に収まっ
 このリストに 20 が含まれているので、  このリストに 20 が含まれているので、
 ox\_asir は CMO 形式の多倍長整数を受け取れることがわかる。  ox\_asir は CMO 形式の多倍長整数を受け取れることがわかる。
   
   %%このリストの要素はまたリストとなっており、
   %この最後の部分もまたリストとなっており、
   %あるデータ形式で理解可能なものを表現したリストを要素としている。
   %{\tt [514,[1, 2, $\cdots$]]} の最初の 514 はこのリストが CMO 形式
   %での理解可能なデータを表していることを示しており、
   %その後のリストでは CMO 層で定義されているデータのうち、
   %理解可能なデータのタグが並んでいる。
   
 なお、データが受け取れることと、  なお、データが受け取れることと、
 データの論理構造が理解できることとはまったく別物であるので  データの論理構造が理解できることとはまったく別物であるので
 注意する必要がある。  注意する必要がある。
Line 296  OpenXM に対応したソフトウェアをクラックしても
Line 314  OpenXM に対応したソフトウェアをクラックしても
 しかし、これだけでは侵入者が接続を行なう一瞬のすきを  しかし、これだけでは侵入者が接続を行なう一瞬のすきを
 狙ってくる可能性もある。  狙ってくる可能性もある。
 そこで接続を行なう時に、  そこで接続を行なう時に、
 接続を待つ port 番号をランダムに決めている。  接続を待つポート番号をランダムに決めている。
 こうすることで、特定の port 番号を狙って接続を行なう  こうすることで、特定のポート番号を狙って接続を行なう
 瞬間を待つ手口を幾らか防ぐことができる。  瞬間を待つ手口を幾らか防ぐことができる。
   
 さらにもう一段安全性を高めるために、  さらにもう一段安全性を高めるために、
Line 306  OpenXM に対応したソフトウェアをクラックしても
Line 324  OpenXM に対応したソフトウェアをクラックしても
 このパスワードは一旦使用されれば無効にするので、  このパスワードは一旦使用されれば無効にするので、
 もし仮になんらかの手段でパスワードが洩れたとしても安全である。  もし仮になんらかの手段でパスワードが洩れたとしても安全である。
   
 なお、上記の port 番号とパスワードは安全な手段で送られて  なお、上記のポート番号とパスワードは安全な手段で送られて
 いると仮定している。  いると仮定している。
 また、同一のコンピュータ上に悪意のあるユーザはいないと仮定している  また、同一のコンピュータ上に悪意のあるユーザはいないと仮定している
 ことに注意しなければならない。  ことに注意しなければならない。
 なぜなら、現在の実装ではサーバ、およびクライアントの動作している  なぜなら、現在の実装ではサーバ、およびクライアントの動作している
 コンピュータ上ではこの port 番号とパスワードがわかってしまうためである。  コンピュータ上ではこのポート番号とパスワードがわかってしまうためである。
   
 なお、接続が確立した後のメッセージの送受信に関しては、  なお、接続が確立した後のメッセージの送受信に関しては、
 特に暗号化などの処置が行なわれているわけではない。  特に暗号化などの処置が行なわれているわけではない。
Line 321  OpenXM に対応したソフトウェアをクラックしても
Line 339  OpenXM に対応したソフトウェアをクラックしても
   
 \section{他のプロジェクト}  \section{他のプロジェクト}
   
 他のプロジェクトについて幾つか紹介する。  他のプロジェクトについても触れておこう。
   
 OpenMath プロジェクトは数学的なオブジェクトを  OpenMath プロジェクトは数学的なオブジェクトを
 コンピュータ上で表現する方法を決定している。  コンピュータ上で表現する方法を決定している。
Line 329  OpenMath プロジェクトは数学的なオブジェクトを
Line 347  OpenMath プロジェクトは数学的なオブジェクトを
 オブジェクトの変換手順についても述べられている。  オブジェクトの変換手順についても述べられている。
 表現方法は一つだけでなく、 XML 表現や binary 表現などが  表現方法は一つだけでなく、 XML 表現や binary 表現などが
 用意されている。  用意されている。
   詳細は
   
 %以下、調べる必要あり。  http://www.openmath.org/omsoc/index.html A.M.Cohen
 %NetSolve  
   
 %MP  
   
 %MCP  以下は書いてる途中。
   
   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{現在提供されているソフトウェア}  \section{現在提供されているソフトウェア}
   
 現在 OpenXM 規格に対応しているクライアントソフトウェアには  現在 OpenXM 規格に対応しているクライアントには
 asir, sm1, Mathematica がある。  asir, sm1, Mathematica がある。
 これらのクライアントソフトウェアから  これらのクライアントから
 OpenXM 規格に対応したサーバを呼び出すことができる。  OpenXM 規格に対応したサーバを呼び出すことができる。
 現在 OpenXM 規約に対応しているサーバソフトウェアには、  現在 OpenXM 規約に対応しているサーバソフトウェアには、
  asir, sm1, gnuplot, Mathematica などがあり、   asir, sm1, gnuplot, Mathematica などがあり、
Line 349  OpenXM 規格に対応したサーバを呼び出すことができる。
Line 381  OpenXM 規格に対応したサーバを呼び出すことができる。
 また、 OpenMath 規格の XML 表現で表現されたデータと CMO 形式の  また、 OpenMath 規格の XML 表現で表現されたデータと CMO 形式の
 データを変換するソフトウェアが JAVA によって実装されており、  データを変換するソフトウェアが JAVA によって実装されており、
 OMproxy という名前で提供されている。  OMproxy という名前で提供されている。
   
   
 \end{document}  \end{document}

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.43

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>