12.3270データ・ストリーム

3270データ・ストリーム

TSOを利用するには端末エミュレータが必要です。端末とTSO間の通信には、SDLC回線、BSC回線、ローカル・チャネルなどが使用され、VTAMを介して接続されます(されました)。現在では、TCP/IPのTN3270接続が一般的で、端末とメインフレーム・コンピューター間をイーサネットなどのLANで接続するかインターネットで接続します。TN3270接続では、端末←(TCP/IP)→TN3270server←(VTAM)→TSOの経路で接続されます。たいていは、OSのTCP/IP機能が提供するTN3270serverが利用されますが、端末とホスト・コンピューター間にTN3270のゲートウェイ・サーバーなどを置いているユーザーもいます。その場合、ゲートウェイとメインフレーム・コンピューター間は、VTAMがサポートするプロトコルによって接続されます。

TSOが扱う端末は、3270ターミナルと呼ばれ、端末画面や印刷の制御には3270データ・ストリームと言う、IBM社が規定した標準プロトコルが使用されます。文字やフィールドを画面上のどこに置くのか、色や罫線はどうするのか、入力できる文字の種類(数字のみ、英数字、日本語など)をどうするか、などと言った画面の見た目や入力操作に関する制御方法などを細かく規定したものが、3270データストリームです。TSOだけでなく、CICSのような3270端末との会話型オンライン・システム構築用ソフトウェア製品も、VTAMとSNAによって接続し制御され、端末間との送受信データには3270データ・ストリームが使用されます。IMSのようなメッセージ型のオンライン・システムでは、接続する端末機固有のデータ形式で制御されることも多いです。

IBMの3270データ・ストリームに対し、富士通では6650/6680データ・ストリーム、日立ではT560/20データ・ストリームが使われます。SNAとFNA/HNAは基本的に互換を持ちますが、端末制御のデータ・ストリームに関しては、似てはいますが異なるプロトコルと考える方が無難です。もっとも、F6650は3270とほぼ同じなので、文字は英語、色はモノクロのモードなら、3270端末をMSPやXSPに接続して使うことは可能です。しかし、カラーや罫線と言った拡張属性の制御には異なる部分が多いので、実際には使用できません。T560/20はさらに独自色が強いため接続することもできません(HNAは互換なのでネットワーク・セッションは繋がるが、TSSが最初のスクリーン・データを送ったところでエラーになる)。

今日では、ハードウェア装置としての3270ターミナルが利用されることはほとんどなく、WindowsやUNIX(Linux)上のソフトウェアによって処理されます。これが3270エミュレーターです。3270データ・ストリームは、公開されたプロトコルなので、IBM以外にも多くのベンダーからエミュレーション・ソフトが提供されています。3270データ・ストリームは、SNAやTN3270プロトコルの1階層上に位置します。一般のTSO利用者は、3270データ・ストリームの詳細などを知る必要はありませんが、端末エミュレーターの開発者やミドルウェアを使わない独自のオンライン・プログラムを作る場合には必要です。

    3270データ・ストリームの初歩

      アウトバウンドとインバウンド

      アウトバウンドは、ホストから端末方向へのデータを指します。基本的には画面内容を構成するデータで、コマンド、制御コード(オーダー・コードと呼ばれる)+ユーザー・データ[+オーダー+ユーザー・データ+オーダー+ユーザー・データ...]の組み合わせで構成されます。コマンドは、画面データの書き方を示します(現在の内容に上書きするのか、一旦消去して書くのか等)。画面表示を伴わないデータのやり取り(例えば端末の特性情報を問い合わせたり、ファイル転送データ等)や現在の画面表示内容を吸い上げるコマンドなどもあります。

      オーダーには、SBAと言う画面上のどの位置に文字やフィールドを置くかを示すもの、SF、SFEと言うフィールドを定義するもの、ICと言うカーソルの設定位置を示すものなどがあります。フィールドは、文字列を表示、入力するための連続した領域で、入力可/不可、表示/非表示、高輝度/低輝度、点滅、反転、色、罫線などを指定できます。文字を表示するだけならフィールド定義は不要ですが、コンスタント文字列や強調表示など、属性を変える場合は必ずフィールドで構成することになります。

      インバウンドは、端末からホスト方向へののデータを指します。基本的にはオペレーターがキーボードによって入力したデータで、AID、カーソル位置、制御コード(オーダー・コードと呼ばれる)+ユーザー・データ[+オーダー+ユーザー・データ+オーダー+ユーザー・データ...]の組み合わせで構成されます。AIDは、どのキーによってホストにデータを上げてきたかを識別するために用いられます、ENTERキーなのかPFnキーなのかがこれでわかります。その後に、ホストへ送信した時のカーソル位置が続きます。オーダーに関しては、基本的には出力時ほど複雑ではありません。SBAでどのフィールドに入力されたかが示され、その後に入力されたデータが続きます。

      アテンション

      表示された画面に入力されたデータを、ホストへ送信することをアテンションを上げると言います。AIDは、Attention IDの略です。実行キー、PFnnキー、CLEAR、PAnキーなどがあります。ホスト側のメインフレーム・コンピューターは、アテンションによって上がってきたインバウンド・データを解析して必要な処理を行い、処理結果をアウトバウンド・データとして返します。これの繰り返しが対話型処理です。

      対話型処理では、一度アテンションを上げるとホスト側でアウトバウンドを返すまで、次の入力は受け付けないのが基本です。応答が遅いと待ちきれなくなって、再び実行キーなどを押す人がいますが、無駄な努力です。細かく言うといろいろあるのですが、SNAでは基本的に送信権を持っていないとデータを相手に送ってはいけないことになっています。実行キーやPFキーを押しても意味がないです。エミュレーターによっては、キーの先読み、なんて機能があって送信できないときでも押されたキーをバッファにどんどんため込んでいたりします。入力できたように思えても実際にホストに送られているわけではないです。人間と違って、ただ尻をひっぱたいても速くなりません。

      3270には「ATTN」と言うキーがあります。ATTNは、特別なキーで例え送信権がなくても割り込んで通知をすることができます。ATTNキーによって上げられるインバウンドを、アテンション割込みと言います。TSOでは、ATTN割込みは特殊な処理をします。たいていは、実行中のコマンド処理を中断してプロンプト入力待ちになり、別のコマンドが入力されたりすると、割込み前に実行中だったコマンド処理を打ち切ったりすることができます。同じTSOでも、ISPFなどは異なる動きをするので注意が必要です。マニュアルなどで確認して下さい。NON-SNA3270端末と言われるものもあり、これはSNA回線ではなくBSC回線やローカル・チャネルで接続された端末です。全二重方式で通信が可能で、SNAと違って送信権というものがありません。そのため、ATTNキーは使えません。NON-SNA端末の場合は、ATTNキーではなくRESETキーで、キーボード・ロックを解除してから実行キーなどを押せばよいです。これでホスト側はアテンション割込みの処理を行います。なお、SNA端末ではアウトバウンド待ちの状態では、RESETキーでキーボード・ロックを解除することはできません。

      ブラケットと送信権

      この内容は、3270データ・ストリームではなくSNAプロトコルの規定に関することですが、関連するので紹介します。

      対話型処理では、インバウンドとアウトバウンドのやり取りで処理が進みます。オンライン・システムでは、処理の単位をトランザクションと言います。TSOのような、コマンドでOSを操作したり、画面パネルを使用してデータの編集や表示を行う場合は、1つのインバウンドを、1つのコマンド=トランザクション、として扱うことができ比較的単純です。しかしながら、業務処理系のオンライン・システムでは、トランザクションが必ずしも一対のインバウンドとアウトバウンドで構成されるとは限りません。複数の画面の入出力によって構成されるトランザクションもあり得ます。この場合、複数のインバウンドとアウトバウンドでトランザクションが成り立つのですが、どこからどこまでが1つのトランザクションなのかの区切りを明確にしなければなりません。これを行うのがブラケットです。

      ブラケットは、データ・ストリーム中ではなく、SNAプロトコルのヘッダー内にブラケットの開始や終了を示すフラグを立てることで相手側に示します。ブラケットでは、双方が同時にトランザクションを開始しようとすると衝突が発生します。そこで、片側は無条件にブラケットを開始できますが、もう反対側はブラケットの開始には相手側の許可を必要とするようにして衝突を制御します。端末とホスト間の標準的な取り決めでは、ブラケットを無条件に開始できるのは端末側で、こちらが1st Speakerとなります。他方、ホスト側は、自らブラケットを開始するには、常に端末側の許可を必要とするBidderとなります。基本的に、トランザクションの開始は端末からのサービス要求によりますから、理にかなった取り決めです。

      ビッダーからからトランザクションを開始したいときは、これから「ブラケットでトランザクションを始めるぞ」と言う意思表示を相手に示します。相手は、それを受けて異論がなければ「いいよ」の応答を返します。すでにその前に自分からデータを送ってしまっていれば「しばらく待ってて」と返します。相手からのトランザクションを受け入れられる状態になったら「送ってもいいよ」と通知します。ブラケットを使うと、1つのトランザクションの範囲が、アプリケーション・データとは関係なく明確にできるため、通信中に障害が発生したときなどのトランザクション・リカバリーやデータベース・コントロールなどの処理を、アプリケーションから切り離してオンラインの制御側プログラムで行うこともできます。

      単純な会話のキャッチボールで構成される対話処理や、データベースのコミットやロールバックなどを必要としないトランザクション処理では、ブラケットに代えて送信権のみによって制御する方法も行われます。送信権はCD(Change Direction)とも呼ばれ、データを送信する権利を片側が持つことで衝突が発生しないようにする制御方式です。

      データを相手に送る際に、SNAプロトコルのヘッダー内にCDI(Change Direction Indicator)と呼ばれるフラグを立てると送信権は相手に渡ります。それを交互に行うことで、基本的には常に片側からしか送信しないようにする方式を「半二重フリップフロップ」と言います。相手に送信権を渡してしまった後、送信権が無い状態で緊急にデータを送りたい場合は、送信権を返してもらうよう要求することもできます。

      ブラケットが複数のインバウンドとアウトバウンドの組み合わせで構成される場合、相手側に送信権を渡します。ブラケットが終了する場合は、送信権は渡さなくてもかまいません。ブラケットと送信権をどう使って制御するかは、オンライン・システムの制御プログラムの設計で決めます。実際は、両方の制御を組み合わせて行われますが、トランザクションの範囲を明確にする必要がなければ、最初のメッセージでブラケットを開始して、以降セッションが切れるまでブラケット中の状態を継続させ、送信権のみをインバウンドとアウトバウンドでやり取りする方法が単純です。

      ブラケットと送信権の使われ方(出典:VOS3 ECS/VTAM E2 解説)

      ブラケットの競合(送信の衝突)(出典:VOS3 ECS/VTAM E2 解説)