XPLink と C および C++ プログラミング

CICS® は、XPLINKオプションでコンパイルされたC®およびC++プログラムをサポートしています。 CICS XPLink サポートを使用するプログラムは、すべて再入可能かつスレッド・セーフである必要があります。

Extra Performance Linkage(通常はXPLinkと略される)は z/OS®の機能であり、高性能なサブルーチンコールとリターンメカニズムを提供します。 これにより、実行パスの長さが、短くて高度に最適化されたものとなります。

オブジェクト指向プログラミングは、「メッセージ」をオブジェクトに送信することで、オブジェクトに何らかのアクションを実行させるという概念を基に、構築されています。 メッセージ送信アクティビティーは、サブルーチン呼び出しとしてインプリメントされます。 C++ の用語でメンバー関数と呼ばれるサブルーチンは、通常はコードの小さな断片です。 典型的な C++ プログラムの実行フローは、コードの小さな断片に対する多数のサブルーチン呼び出しに特徴があります。 こうした性質を持つプログラムは、XPLink 最適化テクノロジーから恩恵を受けます。

z/OS には System/360の初期にまで遡ることができる標準サブルーチン呼び出し規約があります。 この規則は、複雑なサブルーチンが存在する環境や、サブルーチンが比較的少ない環境、および、サブルーチン呼び出しが比較的少ない環境に対して最適化されていました。 これは、オブジェクト指向プログラミングの規則において変更されました。 サブルーチンは単純になりましたが、非常に多くなり、サブルーチン呼び出しの頻度はその重要性に応じて増加しました。 このようにサブルーチンのサイズ、数、および使用パターンが変化したことにより、関係するシステム・オーバーヘッドの最適化が望まれるようになりました。 その最適化の結果が XPLink です。

XPLink を使用するには、その C または C++ アプリケーションのコードが、再入可能かつスレッド・セーフである必要があります。 同じコードインスタンスが複数の z/OS 上で実行される可能性があり、共有リソースを保護するスレッドセーフメカニズムがない場合、アプリケーションコードの実行動作は予測不可能です。 これはそれほど強調する必要はありません。

XPLINK オプションを持つ CICS 環境用に C および C++ プログラムをコンパイルする場合 、CICS XPLink サポートを活用するためには、アプリケーション開発者は以下を行う必要があります。
  • スレッド・セーフ・プログラミングの規則および技法を厳守して、コード開発を行う。
  • C または C++ プログラムのコンパイルの際に、XPLINK オプションを設定する。
  • PROGRAM リソース定義において、そのプログラムがスレッド・セーフであることを示す。
  • CEEUOPT または #pragma での CICSVAR の使用を検討してください(詳細は、 Language Environment の実行時オプションの定義の注記を参照してください)。

CICS XPLink サポートを使用するプログラムは、すべて再入可能かつスレッド・セーフである必要があります。 こうした要件を確実に満たすように特定のアプリケーション・コードを作成するのは、アプリケーション開発者の責任です。

XPLink による X8 および X9 モード TCB の使用

CICS は、CICS Open Transaction Environment (OTE) テクノロジーで複数の TCB 機能を使用することで、XPLINK オプションを指定してコンパイルされた C および C++ プログラムをサポートしています。 X8 および X9 モード TCB は、CICS キーおよび USER キー内の XPLink タスクをサポートするように定義されています。 XPLink プログラムの各インスタンスは、1 つの X8 TCB または X9 TCB を使用します。

XPLINK オプションを指定してコンパイルされたプログラムの CICS サポートに必要なのは、PROGRAM リソース定義で、そのプログラムがスレッド・セーフであることを示すことだけです。 この指示とロード・モジュール内の XPLink の「シグニチャー」があれば、タスクを X8 または X9 TCB に置くことができます。

特定のプログラムに適した TCB の選択では、PROGRAM リソース定義に API 属性の OPENAPI 値が存在しても、XPLink が優先されます。

XPLink オブジェクトと非 XPLink オブジェクトの間での制御の引き渡し

XPLink オブジェクトから非 XPLink オブジェクトへ、またはその逆への制御の移動を行うと、その度に QR TCB とオープン TCB (X8 または X9 TCB のいずれか) の間で切り替えが行われます。 パフォーマンスの点から言えば、TCB 交換は負荷が大きいため、パフォーマンスのオーバーヘッドを考慮に入れる必要があります。

XPLink オブジェクトは、EXEC CICS インターフェースまたは言語環境プログラムのインターフェースを使用して、非 XPLink オブジェクトを呼び出すことができます。

非 XPLink オブジェクトは、EXEC CICS インターフェースのみを使用して、XPLink オブジェクトを呼び出すことができます。 言語環境プログラムのインターフェースを使用した呼び出しは、サポートされていません。