CICS概説

【2010/06/15 original author TAKAO】

トランザクション処理

CICSとは、Customer Information Control Systemの略で、IBMのソフトウェアプロダクトとして売られています。もともとは、ガス会社が「顧客管理」のために作ったオンラインコントロールプログラムでした。なぜ、「オンラインコントロール」が必要なのでしょうか?
まず、オンライン処理、すなわちトランザクション処理の考え方について説明しておきます。端末から最初にメッセージが送られてきます。汎用機前提の話しですから、いろいろ考えられます。「売上げを見たい」「人事管理」「お客ごとの状況を見たい」さまざまあるでしょう。このメッセージについて、どこから来たメッセージか(誰からか)?どのプログラムで処理をすればいいのか?が自動的に決定され、予定されているプログラムで処理をし、出力メッセージを端末に向かって返したらトランザクション処理はひとつ完了です。
ウェブアプリケーションに例えると、URLに相当するものはあらかじめサーバーでもっており、さらにウェブサーバーとTCP/IPとCGIが行う処理をひとまとめで面倒をみていることになります。そのかわり、あらかじめ個々の端末の属性を事前定義してありますから、ディスプレイ、プリンターといった装置に応じた処理が可能です。

CICSはIBMのイギリス ハーズレー研究所で開発されており、オンライン処理における先進的な取り組みを続けました。後に説明するプログラムコントロールの簡便さと相まって、多くのオンラインシステムのインフラとして使われています。

CICSとアプリケーションプログラム

CICSは EXEC CICSで始まる呼び出し(API)で処理が始まります。サポートしているプログラム言語はCOBOL,C,C++,Java,PL/I, RPG,にS/390アセンブラーさらに、High Performance Java(HPJ)と多彩です。とはいえ、CICSで使われているプログラム言語は、IBM COBOL, Merant(旧MicroFocus) COBOLが圧倒的に多いと思われます。

CICSはIMSとは異なり、すべてのアプリケーションとCICSサービスは「問題プログラム」状態で、ひとつの仮想空間で稼働します(MROについては触れません)。つまりコントローラ自身も同じアドレス空間で動いています。このアーキテクチャはパフォーマンスの面では優れているのですが、怪しい挙動のアプリケーションにはかなり無防備です。IMSとの比較でよくいわれることです。

CICS構成要素

CICSは、ターミナルコントロール、タスクコントロール、プログラムコントロール、ストレージコントロールとファイルコントロールから構成されています。

各々、図のようにTCT,PCT,PPT,FCTというコントロールテーブルをもっています。COMMAREAはセッションの間存在するデータ用のサービスです。あるトランザクションの状況を次のトランザクションに伝えることができます。また、I/O処理にも使われます。
次に各コントロール機能について概略を説明します。

ターミナルコントロール

CICSはもともと、SNAベースで作られました。すべてのメッセージの送受信はVTAM経由です。メッセージが送られてくると、Terminal Control Table(TCT)内のターミナルIDを見て、どのターミナルとのやりとりかを認識します。
エンドユーザーがログインし、トランザクションコードによりトランザクションを要求すると、まずCICSはターミナルの状況をチェックします。チェック内容としては、該当トランザクションを受け付けていいターミナルなのか、正しいユーザー権限があるかといったことです。
CICSはメッセージの最初の4文字をトランザクションID(TRID)と見なします。この情報はCICSタスクコントロールに渡され必要に応じ、要求を処理する、新しいタスクが作られます。

タスクコントロール

タスクコントロールはCICSタスクの状況を管理しています。タスクは一見、並行して稼働しますが、プロセス時間と割り当ての優先度をコントロールしなければなりません。例えば、新規のトランザクション受付けより先に、トランザクションログ処理は優先します。CICSは独自の内部マルチタスクにより、トランザクション処理をするアプリケーションをコントロールします。
タスクコントロールは、トランザクションを処理するタスクを生成します。CICSタスク下で稼働するプログラムのすべての情報はあらかじめCICS Program Control Table(PCT)に登録されていなければなりません。PCTはCICSタスクのひとつのエントリーです。タスクコントロールはPCT内のTRIDを見つけます。次にCICSストレージコントロールにタスクに関連したコントロールブロックの作成の依頼をし、プログラムコントロールにアプリケーションプログラムのロードを依頼します。

プログラムコントロール

プログラムコントロールはアプリケーションプログラムのロードと削除を担当します。トランザクション処理がタスクとしてスタートすると、プログラムコントロールはアプロケーションプログラムに関連したタスクに制御権を渡します。
多くのタスクが同じアプリケーションプログラムを使うことがあります。プログラムコントロールはメモリーにはひとつのプログラムしか置きません。それぞれのタスクは別々に存在します。そうやって多くのユーザーがひとつの物理的アプリケーションプログラムのコピーを並行して共有して使うことができます。

ストレージコントロール

OS/390などの環境下では、CICSは仮想記憶領域内を完全にコントロールします。ストレージコントロールは、仮想記憶域の獲得、コントロール、開放を担当します。この仮想記憶域はCICS自身がロードされている空間です。管理されている仮想領域は、プログラム、I/Oエリア、ワーク用スペースなどなどに使われます。ストレージコントロールはストレージをプールとして管理しています。要求ごとに、CICSアプリケーションやCICSの中核のサービスにストレージリソースを割り当てたり開放したりします。

CICS COMMAREAは特別な保管域です。これはトランザクションをまたがって、データが受渡される機能です。COMMAREAは仮想的な会話として別プログラムにデータを渡せます。データはCICS RETURNコマンドが出されると保管されます。同じターミナルから入力メッセージがやってくると、関連づけられたCOMMAREAとTRIDにコントロールが渡されます。
さらに、トランザクションのタイプ(COMMAREAインターフェーストランザクション)によってはこのインプットもアウトプットもCOMMAREAにできます。このようなトランザクションは、RPCのような使い方がされます。この場合、トランザクション内に端末にデータを表現する、プレゼンテーションコードはありません。

ファイルコントロール

ファイルコントロールはディスクファイルの共有が可能となっています。すべてのファイルコントロールに関係するデータブロックおよびバッファーはCICS File Control Table(FCT)内にあります。FCTはCICSに関連づけられたファイルごとにエントリーができます。これは複数のトランザクションによる複数のREADやUPDATE処理を矛盾を起こさずに処理できます。CICSは同時に同じレコードを二人のユーザーがアップデートすることがないように管理しています。
ファイルコントロールはファイルやデータベースの整合性も管理します。リカバリーリスタートは特別なジャーナルファイルとディスクを前提としたリカバリーデータによりなされ、トランザクションのACID属性を保証しています。これは2フェーズコミット方式で行わrます。DBMSもやはり2フェーズコミットをサポートしますから、CICS RecoveryRestartの際にデータは保護されます。

タイマーサービス

タイマーサービスはアプリケーションが時間に依存したコントロールをする機能を提供します。例えば、特定のトランザクションを特定の時間に起動したり、特定の時間が来たら通知する、といったことです)

トランザクション処理用端末

GUIはターミナルの力によります。327xのようなキャラクターベースのターミナルはCUI(Character oriented User Interface)といいますが、基本的に24行、80+アルファ文字から構成されます。

ホストコンピュータ内でターミナルスクリーンイメージをアプリケーションプログラムは生成します。スクリーンイメージは特定の場所をフィールドとして解釈したほうが簡単です。CICSのユーティリティでBMS(Basic Mapping Support)でスクリーンイメージを生成できます。

PCの3270エミュレータは、3278、3270、3178といったメジャーなターミナルをサポートしていますし、GUIでさらに使い勝手をよくすることが可能です。

ネットワーク

CICSはSNAを基本としています。3270データストリームはレイヤー5に相当するプロトコルです。基本的に文字を送るものなので、今から見るとかなり狭い帯域でも問題はありません。

【2010/06/15 original author TAKAO】