http://www-online.kek.jp/~nakayosi/Atlas/ipc.html
Atlas Online Software の IPC について
仲吉一男
<kazuo.nakayoshi@kek.jp>
October 12, 2001
- はじめに
Atlas Online Software の IPC Package について現時点で分かっていること
をまとめてみます。
IPCとは Inter Process Communication のことで、Atlas Online Software
では "IPC Package" というものが用意されおり、 ILU という CORBAの最上位に
実装されています。
CORBA とは Common Object Request Broker Architecture の
ことです。「オブジェクト同士のクライアント・サーバ関係を確立するミドル
ウェアが ORBです。ORB を使うと、クライアントはサーバオブジェクトのメソッド
を透過的に呼び出せます」CORBA は ORB間の相互接続プロトコルを規定します。
この機能により異なるベンダの ORB製品同士の相互接続が可能になります。
- ILU
Atlas Online Software では ILU という CORBA を採用しています。概要を説明すると
ILU(Inter-Language Unification system ) は Xerox PARC(Palo Alto Research
Center) で開発された分散オブジェクトによるアプリケ−ション開発のためのシステム
です。名前が示すように複数のオブジェクト指向言語をつかった分散オブジェクト
アプリケ−ションをサポ−トしています。元々は CORBA とは独立に開発され、
独自の ISL(ILU's Interface Specification Language) をそなえていました。
CORBA との
連携を可能とするように、OMG-IDL, C++, ANSI C, Python, Java, および Common Lisp
をサポ−トしています。PARC 以外で開発されたModula-3, Guile Scheme, および Perl 5
のサポ−トも存在します。ILU の稼働する OS は種々の Unix (SunOS, Solaris,
HP-UX, AIX, OSF, IRIX, FreeBSD, Linux, LynxOS, SCO Unix, etc.) と MS-Windows
(3.1, 95, NT) と広範囲にわたる。また、ILU は Thread と event loop の両方の運
用形態をサポ−トしています。ILU は OMG-IDL をサポ−トし、CORBA-ORB システムとして
とらえることも可能ではあるが、CORBA を越えた機能の拡張がなされています。ILU では
また、すでに存在する RPC のサ−ビスを ILU のオブジェクトとして利用可能です。
ILU は HTTP の実装をその中に含んでおり、オブジェクト指向のウェブブラウザ−・
サ−バを実装するために利用することができます。
- ネーミングサービス
CORBA オブジェクトネーミングサービスは、ORB 上でオブジェクトが他の
オブジェクトの所在を特定するための重要な機構です。ネーミングサービスは
名前をオブジェクト参照にマッピングします。ネーミングコンテクストは
オブジェクトの名前がユニークなネームスペースです。
IPC Package におけるネーミングサービスに関連したものとして
"IPC Partition"があります。"IPC Partition"は、コミュニケーションをする
オブジェクトのネームスペースとして振舞い次のルールに従います。
- 各々のオブジェクトはただひとつのパーティションに属する
- 各々のオブジェクトはパーティションの中でユニークな
識別子を持っている
- 各々のオブジェクトはどこからでもそれらの識別子と
それらが属するパーティションの識別子によりアクセスが
可能である。
具体的に言うと
"IPCPartition" クラスはCORBA ネーミングサービスをベースに実装
されています。
IPC アプリケーションは各々ひとつのパーティションに属しており
"NameContext" オブジェクトと "NameBinding"オブジェクトの2つの
名前の文字列で識別されるオブジェクトリファレンスによりアクセス
可能です。IPCObject クラスの名前は NameContext オブジェクトの
名前を定義します。IPCServer クラスの名前は NameBinding オブジェクト
の名前を定義します。
General Partition Server はCORBA Naming Service を実装したアプリケーション
です。General Partition Server は最初にその IOR リファレンスを予め決められた
ファイルに置きます。名前のついた Partition Server はパーティション毎に
起動されます。このサーバーは General Partition Server の "IPCPartition"
コンテキストの中に自分自身を発行するために General Partition Server の
IOR を使用します。IPC アプリケーションは General Partition Server の
IORを読んで名前のついた Partition Server の参照を解決するために用い将来
使用するためにこの参照を保持します。現時点での実装では General Partition
Server IOR は "IPC_REF_FILE" という環境変数を介してアプリケーションに
配布されます。
IPC application General partition Named Partition Root Reference
Server Server file
| | write | |
| +--------------------+-----------------+
| | | read |
| | register itself +-----------------+
| +--------------------+ |
| read | | |
+-----------------------+--------------------+-----------------+
|resolve named partition| | |
+-----------------------+ | |
|publish/resolve object | | |
+-----------------------+--------------------+ |
| | | |
IOR
IOR(Interoperable Object Reference)は、型、プロトコル・サポート、利用できる
ORB サービスについての情報を提供するデータ構造です。IORは ORBによって作製、使用、
保守されます。
例えば、IPC_REF_FILE の中身は
IOR:010000002800000049444C3A6F6D672E6F72672F436F734E616D696E672F4E616D696E67436F6E7\
46578743A312E30000300000000554C497F0000000101000077000000696C753A3133302E38372E3135\
332E3139332E3437642E33626361396132642E302F313B49444C2533416F6D672E6F7267253246436F7\
34E616D696E672532464E616D696E67436F6E74657874253341312E303B69696F705F315F305F314074\
63705F3133302E38372E3135332E3139335F323137330000000000006C000000010100000F000000313\
3302E38372E3135332E31393300007D0800004C000000696C750049444C3A6F6D672E6F72672F436F73\
4E616D696E672F4E616D696E67436F6E746578743A312E30003133302E38372E3135332E3139332E343\
7642E33626361396132642E300031000100000024000000010100400100000001000000140000000101\
004020000100000000000001010000000000
でこれを IOR パーサーで解読すると
- _IIOP_ParseCDR: byte order LittleEndian, repository id , 3 profiles
- _IIOP_ParseCDR: profile 1 is 127 bytes, tag 1229739264 (ILU), LittleEndian byte order
- _IIOP_ParseCDR: profile 2 is 108 bytes, tag 0 (INTERNET), LittleEndian byte order
- _IIOP_ParseCDR: profile 3 is 36 bytes, tag 1 (MULTIPLE COMPONENT), LittleEndian byte order
- ILU object <130.87.153.193.47d.3bca9a2d.0/1> (type )
at iiop_1_0_1@tcp_130.87.153.193_2173 (ILU ORB)
となります。
References
- Sergei Kolos, Inter Process Communication package,
http://atddoc.cern.ch/Atlas/Notes/075/Note075-1.html