タスク制御
CICS® タスク制御機能は、タスク アクティビティを同期したり、リソースの使用を制御したりする機能を提供します。
Java および C++
ここで説明するアプリケーション・プログラミング・インターフェースは CICS であり、Java™ プログラムでは使用されません。 JCICS クラスを使用してタスク制御サービス CICSにアクセスする Java プログラムの詳細については、 「JCICS を使用した Java 開発」 および JCICS Javadoc ドキュメントを参照してください。 CICS C++ クラスを使用した C®++ プログラムについては、 CICS 基礎クラスを使用するを参照してください。
CICS は、CICS システム・プログラマーによって設定された値に基づいて、優 先順位を割り当てます。 プロセッサーの制御は、処理の準備ができているタスクのうち 最高の優先順位のタスクに与えられ、CICS またはアプリケーション・プログラムによって実行される作業がこれ以上ない 時に、オペレーティング・システムに返されます。
- タスクを中断 (SUSPEND コマンド) し、それより優先順位の高いタスクの処理を可能にします。 これにより、プロセッサーを集中的に使用するタスクによってプロセッサーが 占有されることを防ぐことができます。 優先順位の高い他のタスクの処理が終了するか中断されると、元のタスクに制御権が返されます。すなわち、元のタスクはディスパッチ可能なままになっています。
- あるタスクによるリソースの使用をスケジュールします (ENQ および DEQ コマンド)。 これは、1 つのリソースが複数のタスクによって同時に使用されることがないように保護するのに利用できる場合があります。すなわち、これは、リソースを逐次再使用可能にする方法です。 リソースを使用する各タスクはエンキュー・コマンド (ENQ) を発行します。 そのための最初のタスクはリソースを直ちに利用しますが、 HANDLE CONDITION
ENQBUSY コマンドが発行されていない場合、他のタスクが発行するリソースに対するその後のENQコマンドは、リソースが利用可能になるまでそれらのタスクが中断される結果となります。
ENQ コマンドに NOSUSPEND オプションをコーディングした場合、制御権は常にプログラムの次の命令に返されます。 EIBRESP フィールドの内容を検査することによって、ENQ コマンド が正常に行われたかどうかがわかります。
リソースを使用する各タスクは、そのリソースの使用が終了したら、デキュー・コマンド (DEQ) を発行する必要があります。 ただし、エンキュー/デキューのメカニズムを使用する場合、複数のタスクが相互の関係においてある決まったシーケンスで ENQ コマンドおよび DEQ コマンドを発行することを保証する手段はありません。 アクセス順序を制御する方法については 、「リソースへのアクセス順序の制御」 を参照してください。
- タスクに割り当てられた優先度を変更する( CHANGE TASK PRIORITY コマンド)。
- z/OS® 形式のECBが完了した時点で、そのイベントを待ちます。
利用可能なコマンドは2つあり、 WAITCICS と WAIT EXTERNAL です。 これらのコマンドによって、このコマンドを出したタスクは、いずれかの ECB が通知されるまで、すなわち、いずれかのイベントが発生するまで中断されます。 タスクは 1 つ以上の ECB について待機することができます。 ユーザー・タスクが複数の ECB で待っている場合は、ECB の 1 つがポストされると、即座にディスパッチ可能になります。 ECB はそれぞれ、遅くとも通知される前までに、クリアしておく (すなわち 2 進ゼロにセットしておく) 必要があります。 CICS が代わりに行うことはできません。 事前に投稿されたECBを待機し、その後クリアされない場合、タスクは中断されず、 WAITCICS または WAIT EXTERNAL が発行されていないかのように実行され続けます。
WAIT EXTERNAL 通常、オーバーヘッドは少なくなりますが、関連するECBは常に z/OSの POST 機能を使用するか、または最適化されたポスト(比較およびスワップ(CS)命令を使用)によってポストする必要があります。 他の方式で通知してはいけません。 通知の方式について疑問がある場合には、WAITCICS コマンドを使用してください。 WAIT EXTERNAL コマンドで渡されたECBを処理する際、 CICSは ECBを拡張し、 z/OSの POST 終了機能を使用します。 ある ECB は、一度に複数のタスクで待機してはいけません (1 つのタスク の ECBLIST に 2 回現れてはいけません)。 この規則に従わないと、INVREQ 応答を返すことになります。
WAITCICS ECB z/OSの POST 機能以外の方法、または最適化された投稿で投稿する場合は、使用する必要があります。 例えば、アプリケーションが値を移動させることでECBを投稿する場合、 WAITCICS を使用する必要があります。 ( WAITCICSコマンドは、 z/OSを使用してポストされたECBにも使用できます。 POST施設または最適化された投稿。 CICS z/OSになると、 WAITCICS コマンドを発行したタスクによって待機中のすべてのECBのリストを z/OS に渡します。 z/OSで CICS が通過したECBLISTには重複したアドレスが含まれており z/OS CICS を異常終了させます。
z/OSの POST 、 WAIT EXTERNAL 、 WAITCICS 、ENQ、またはDEQコマンドを使用すると、動的トランザクションルーティングの実行能力に悪影響を及ぼすトランザクション間の親和性が生じる可能性があります。
このコマンドを発行するプログラムで潜在的な問題を特定するのに役立つ CICS Interdependency Analyzerを使用できます。 このユーティリティの詳細については CICS Interdependency Analyzer for z/OSの概要」を、トランザクションの親和性については「親和性」 を参照してください。