11.TSOとISPF

By 神居 - Posted: 2008/10/17 Last updated: 2011/01/05 - Leave a Comment

TSO(Time Sharing Option)

MVSシステムで対話型処理を行うための機能がTSOです。コマンド型のプロセッサーでWindowsにおけるコマンドプロンプト(cmd.exe)と同等の働きをします。もちろんコマンドに互換などありませんが操作方法や機能には共通点が非常に多く、コマンドプロンプトを使える人ならTSOはすぐに使えるようになります。
MSPとVOS3ではTSS(Time Sharing System)と呼ばれますがJCL同様、仕組みも機能も同じです。コマンドも基本的なものはほぼ同じと言ってよく、いずれかのOSでTSOが使えれば相互に応用が利きます。

TSOコマンドプロンプト

TSOコマンドプロンプト


TSOでは1人のユーザーがMVS上の1つのジョブとして扱われます。ユーザーを識別するのがユーザーIDで、TSOユーザーを表すジョブ名(空間名)にもなります。TSOはジョブと異なり自由に実行することはできません。あらかじめ利用するユーザーをパスワードと共に登録しておく必要があります。この際ユーザー毎のアカウント名、利用できる最大リージョンサイズ、利用可能なコマンド種類などを登録します。コマンドは1つ1つを細かく登録するのではなく権限レベルのようなものを登録します。例えばJCLでジョブを実行する機能を利用できるか、ユーザーIDの登録や変更ができるコマンドを使う許可を与えるか、と言ったものです。
TSOでは、これらのユーザー情報(アカウント情報)をSYS1.UADSと言うデータセットで管理します。現在ではセキュリティー機能であるRACFで管理することも出来ます。RACFを利用するシステムではユーザーIDとパスワードだけはRACFで許可されなければなりませんが、追加のアカウント情報に関してはRACF、SYS1.UADSのいずれを使うかを選択できます。とは言えこれらはシステム管理者(Administrator)が行うことで一般利用者は気にする必要はありません。

ユーザーがTSOを開始する手続きがログオンで、この際にユーザー専用のアドレス空間が作られます。これはTSOユーザー空間とも呼ばれます。バッチジョブと違いイニシエーターで実行されるわけではありません。ただしTSOユーザ空間もバッチジョブ同様に起動用のJCLは必要でログオンプロシージャーと呼ばれます。ログオンプロシージャーはユーザー毎に作成することもできますが、同じログオンプロシージャーを複数のユーザーで共用することもできます。
Windowsでも1つのコマンドプロンプトは1つのウィンドウ・プロセスとなりますが、MVSでも同じ仕組みが取られます。そのためユーザーが実行したコマンドやプログラムが異常終了したり、誤った動作をしても他のジョブやユーザーに影響を与えることはありません。1人のユーザーは自分のユーザー空間の中では何をやっても自由です。仮想計算機とまでは行きませんが、自分が行いたい処理はコマンドを打てばすぐに行われますし、処理結果を見て考えている間コンピューターは止まっているように見えますが、実際はその間他のジョブやユーザーの処理が行われています。このような仕組みがTSS(Time Sharing System)です。MVSではTSS制御の仕組みはTSOユーザーの制御だけでなくすべてのアドレス空間の制御に用いられます。

TSOではあらかじめ用意されたコマンドを使うだけでなく、ユーザーが作成したアプリケーション・プログラムを動かすこともできますし、独自のTSOコマンドを追加することもできます。またWindowsのコマンドプロンプトにあるバッチファイルのように複数のコマンドを実行して定型的な処理を行わせることもできます。これがCLISTです。(MSPとVOS3ではコマンドプロシージャーと呼ばれる)CLISTはTSOコマンドを制御するスクリプトで完全なインタープリター方式で実行されます。バッチジョブに使うJCLも似ていますが、JCLはサブミット時にJES2によって中間言語のようなものに変換されてからジョブ管理によって処理されます。なのでサブミット時に構文エラーなどがはじかれますが、CLISTでは実際にそのステートメントが実行される時にエラーが検出されます。
TSOユーザー空間でもバッチジョブ空間でもできることは同じです。JCLで言うところのSYSPRINT(SYSOUT)、SYSIN(JCL内データ)はTSOでは端末画面にリダイレクトできます。特別なシステム系プログラムを除き、一般のアプリケーション・プログラムならどちらでも実行することが出来ます。基本的にバッチでできることはTSOでもできると考えていいでしょう。ただしTSOユーザーではあるプログラムを実行したら、そのプログラムが終了するまで他の操作を行うことが出来ません。そのため長時間かかるプログラムの実行には向きません。Windowsのコマンドプロンプトならいくつもウィンドウを起動すればいいのですが、MVSで同じ事をやろうとすると複数の端末エミュレーターを立ち上げて、それぞれ異なる複数のTSOユーザーIDを使う必要があります。

TSOセッションはバッチジョブとしても実行できます。同じコマンドをパラメーターを変えて何度も繰り返すような場合はバッチ・セッションが便利です。端末からログオンされたTSOユーザーをフォアグラウンドセッション、サブミットされたTSOバッチをバックグラウンドセッションと呼びます。
バッチ・セッションでは端末への出力はSYSTSPRT DDへ、端末からの入力はSYSTSIN DDから行われます。
TSOバッチ・セッションのサンプルJCLはこちらを参照してください。


MVSはその前身であるOS/360(S/360システム用のOS群)の時代から元々はバッチ処理用OSとして発展してきました。現在のように1人1人が端末からシステムにログオンして自由な作業を行うような使い方を想定していなかったのです。メインフレーム・コンピューターの前身はPCS(パンチカードシステム)と呼ばれるもので横に80桁のやや厚紙の紙カードにデータを打ち込みをそれを読み取って処理する機械でした。コンピューターになっても紙カードは使われ、磁気テープと共にメインフレームでは主力のデータ入力手段として用いられました。初期のメインフレーム・コンピューターはこれらの手段で入力された、まとまったデータを並行して次々に処理して行くために利用されました。

紙カード(なぜか持っている本物)

紙カード(なぜか持っている本物)


同時代にこれとは別にタイムシェアリングシステム(Time Sharing System:TSS)と言う考え方もありました。当時コンピューターは高価な機械で個人が占有して自由に対話して(インタラクティブに)使うことなどは無理でしたが、これを何とか解決しようして考え出されたのがTSSです。AT&TとGEはMulticsと呼ばれるTSSシステムを開発しこれは後にUNIXへと繋がって行きました。バッチ処理系のメインフレーム、インタラクティブ系のUNIXでそれぞれ発展して行ったわけです。

バッチ処理系のメインフレームでは業務処理に使われるまとまった処理データだけでなくJCL、プログラムと言ったものもカードを使って入力しなければなりませんでした。実行結果をカードに出力するようなことも行われました。(例えばコンパイル結果のオブジェクトプログラムなど)
1枚の紙カードがJCL1行、ソースプログラム1行に対応します。例えばJCLが10行、プログラムが100行なら、ジョブをサブミットするために10枚のカードを読み取らせ、プログラムをコンパイルする際は100枚のカードを読み取らせていたのです。入力となるカードは穿孔機(カードパンチ)と呼ばれるカードに穴を開けるタイプライターのような機械で作りました。扱うジョブやプログラムの数が増えてくると、コンピューターの処理速度が速くても、JCLやプログラムを用意する人間側の作業が追いつかなくなって作業効率が上がらなくなります。そこでメインフレームでもTSSの機能が採用されました。メインフレームではタイムシェアリングシステムは独立したOSではなく汎用OSの中に機能として組み込まれました。当時のS/360ではTSSシステムがなくてもコンピューター・システムとして成り立っていましたから、必須機能ではなく追加のオプション機能として用意されました。なのでTSO(Time Sharing Option)と呼ばれているのです。名前こそオプションですが現在のMVSではTSOがなければシステムの生成も運用もできません。


3270データストリーム

TSOを利用するには端末エミュレータが必要です。端末とTSO間の通信にはSDLC、BSC、ローカルチャネルが使用されVTAMを介して接続されます。TCP/IPのTN3270接続も行われていますが、この場合は端末←→(TCP/IP)←→TN3270server←→(VTAM)←→TSOとなります。たいていはOSのTCP/IP機能が提供するTN3270serverが利用されますが、端末とホスト・コンピューター間にTN3270のゲートウェイサーバーなどを置いているユーザーもいます。この形態ではゲートウェイとホスト間はVTAMがサポートするプロトコルによって接続されます。TSOが扱う端末は3270ターミナルと呼ばれ、端末画面や印刷の制御には3270データストリームと言うIBM社が規定した標準プロトコルが使用されます。文字やフィールドを画面上のどこに置くのか、色や罫線はどうするのか、入力できる文字の種類(数字のみ、英数字、日本語など)をどうするか、などと言った画面の見た目や入力操作に関する制御方法などを細かく規定したのが3270データストリームです。TSOだけでなくCICS、IMSと言ったオンラインシステム構築用ソフトウェア製品もVTAMと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データストリームの詳細などを知る必要はありませんが、端末エミュレーターの開発者やミドルウェアを使わない独自のオンライン・プログラムを作る場合には必要となります。


ISPF(Interactive System Productivity Facility)

ISPFはTSOの画面パネルによる対話型処理プログラムの実行プラットフォームです。TSOコマンドのコマンド・シェル(TMP)のようにコマンドとメッセージによる対話方式ではなく、パネル(端末に表示される画面)を使用して、パネル内のメニューやガイダンス・テキストに従い、用意された入力フィールドにデータを入力して行くことで処理を進める対話方式です。
ISPFはデータセット操作とプログラム開発用のツールと言う側面が強いですが、それらはISPF内の1つのコンポーネントです。ISPFは単なるプログラム開発ツールではなく、パネルを使用した対話方式のアプリケーション・プログラムを開発し実行するための環境を提供します。ISPFではこれらのアプリケーションをダイアログと呼びます。データセットのビュワーやエディターなどのプログラム開発ツールも、1つのISPFダイアログ・プログラムなのです。ISPFではISPFパネルの作成やテスト、パネルを使用したダイアログ・アプリケーションに対する各種のプログラミング・サービス(パネルのI/O、変数サービスなど)を提供するDM(Dialog Manager)と呼ばれるコンポーネントの上で、データセット操作とプログラム開発用のツールであるPDF(Program Development Facility)、JES2スプール内のSYSOUT操作などを行えるSDSF(System Display and Search Facility)やユーザー作成のダイアログが動きます。

ISPFプライマリーメニュー・パネル

ISPFプライマリーメニュー・パネル


MSPではISPF相当の機能はPFD(Programming Facility for Display users)になります。ISPFのミニセット版のような感じです。VOS3ではプログラム開発機能の部分だけがASPEN(Advanced editor System for Programming ENvironment)として提供されていますが、ISPFやPFDと異なり純粋なプログラム開発ツールで、ユーザーが独自のパネル・プログラムなどを作成することはできません。

パネル方式の利点はWindowsのGUI同様に直感での操作ができる点にあります。面倒なコマンドを覚える必要が減り、メニューをたどって行けば容易に目的の操作を行うことができます。またTMPでは1つのコマンド(プログラム)しか実行できませんが、ISPFはマルチタスクでコマンド・セッションを制御しており、同時に複数のコマンド(プログラム)を実行できます。
そのためプログラムをパネルで編集しながら、コンパイルしてロードモジュールを作成し、それを実行させ出力結果を確認できます。それに基づき直ちにプログラムの誤りを直し、また繰り返すと言ったように関連する処理を並行して行うことができます。このパネルによるデータセットやジョブの操作と、複数の機能やサービスを並行して行えるマルチタスク処理によって、プログラム開発の生産性を大きく向上させています。

Posted in ..基礎編 • • Top Of Page