• 検索結果がありません。

システムの初期化やモジュール間通信の停止についての情報は、ソフトウェアコンポーネント 間で伝達され、その情報に基づき、各ソフトウェアコンポーネントは生存を続けるか初期化を 行なうかを判断する。

! " # $ % & '

% ( ) * + , - . /0 1 & # $ % & '

2 3

4 54

4 4

4 4

67 8 9 6:;< = 7 ><

?@ A B = < C > 8 7 = D 7 C < C > E E FG 7 A H

67 8 9 6 = 7 A @6< ;< = 7 >< = 7 A @ 6<

I J < 6<>7 C E

K L E

M67 8 9 6N K L E

M;< = 7 >< N

8 7 = D 7 C < C > E

E FG 7 A H 8 7 = D 7 C < C > O

O FG 7 A H

PL E QR E

S TU V WX Y Z [ \ WX X U ] T^Z U Y X U _ Y \ W_T`Y Z [ \ WX X U ] T^Z U Y X U _ ab c >7 7 6

>7 7 6

ad c ad `e c

ad `f c

図9: オブジェクト間通信

3.4. 要求条件実現のための機構 29

3.4.1 シングルモジュールとマルチモジュールでのオブジェクト間通信

モジュール内とモジュール間のソフトウェアコンポーネント間通信を効率的に扱うことのできる モジュール間通信機構が必要である。

ソースファイルは、図9 (a)と(b)に示されるように、実行ファイルにマッピングされる。

シングルモジュール環境では、コンポーネント間は、コンポーネントのヘッダファイルから自動 的に生成されたインタフェースルーチンとジャンプテーブルの組合せにより結合される。

CORBAを使う場合は、IDL定義を元にスタブとスケルトンが生成される。スタブとスケルトン

はORBを経由して結合される。その結果、ことなるモジュールにインストールされたコンポーネ ントは互いに通信可能となる。宛先オブジェクトが同じモジュールにある時、スタブとスケルトン によりアクセスされる。しかし、ORB通信機構はスキップされる。

3.4.2 シングルモジュールでのオブジェクトの配置

シングルモジュール環境において、ORB経由の通信は不要である。

ソフトウェアコンポーネントは、ORB機構を使わずにインストールされるべきである。理想的な 形態は、元の一つのソースコードから、シングルモジュール用とマルチモジュール用のオブジェク トインプリメンテーションが、ツールによって自動的に選択生成できることである図 9 (b-2)。

このバインド機構は、システムの高性能化をもたらす。

3.4.3 モジュール間でのオブジェクトリファレンスの変換

宛先のオブジェクトリファレンスは、ORBによってオブジェクト識別子に変換される。オブジェ クト識別子は3つのサブフィールドを持つ。

1つ目は、宛先コンポーネントが呼出元モジュールの中にあるか、外側にあるかを示し、内部の場

合は0、外部の場合は宛先モジュール番号を表す。

2つ目は、ORBの識別子であり、モジュール内に複数のORBが存在する場合の識別用である。

3つ目は、宛先コンポーネントの番号を示す。この番号により、宛先ORBにより、スケルトンが 決定される。

この変換機構は、第3.4.4章において示されたシステム拡張機能に対して効果的である。

3.4.4 システム拡張

新しいコンポーネントのインストール、および、既存コンポーネントの移動は、いずれも重要で ある。

上述の宛先情報を修正することによって、オブジェクトインプリメンテーション(ソフトウェアコ ンポーネント)は移動させることができる。

同じく、新しく作られたコンポーネントのロケーション情報を追加することにより、新たなコン ポーネントをインストールすることができる。

!"

#$

%&

'

(

&

(

$) " #

#$($

!"

# $ &

(* + *

(# & $"

(* + *

(# & $"

(* + *

(# & $"

図10: モジュール間通信機構

ロケーションの修正のために、CORBAのダイナミックインボケーションインタフェースを使う ことができる。新しいコンポーネントをインストール祭に、ダイナミックインボケーションインタ フェースが呼ばれる。メモリエリアが割り当てられ、プログラムコードとデータがロードされる。そ して、オブジェクトリファレンス情報は修正される。

他のコンポーネントとリンクされる前に、新しいコンポーネントの初期化を行なう。初期化処理 の中では、データの初期化、ハードウェア関する状態の設定、新たなプロセスやスレッドの生成が 行なわれる。

他のコンポーネントへの、新コンポーネントの追加の通知も必要である。

3.4.5 呼救済

第3.3.2章(4)で述べたように、呼救済は、各オブジェクトインプリメンテーション(ソフトウェ

アコンポーネント)によって主に実行される。

図11に示すように、各コンポーネントは、それぞれにC++クラス、インスタンス、タスク(プ ロセスやスレッド)およびコールデータを持っている。

本ソフトウェア構造において、1つの呼処理イベントは1タスクにより実行される。タスクは、

C++クラスのコードを実行し、その中でコールデータへの読み書きが行なわれる。

モジュールが再起動される時、コールデータ以外のテンポラリなデータは全て消去される。

再起動の後、呼救済クラスはコールデータに残された情報によって、どの呼を救済すべきかを判 断する。

そして、クリアメッセージによって、安定状態にない呼は切断される。