![]() | |
| パラダイム | データフロープログラミング |
|---|---|
| デザイン: | ジョン・P・ハートマン ( IBM ) |
| 開発者 | IBM |
| 初登場 | 1986 |
| 安定版リリース | 1.1.12/0012 / 2020-06-03 |
| プラットフォーム | IBM z システム |
| OS | 7.1の |
| Webサイト | http://vm.marist.edu/~pipeline |
| 影響を受けた | |
| パイプライン (Unix) | |
CMS パイプラインは、ユーザーがパイプラインを作成して使用できるようにするVM/CMSオペレーティング システムの機能です。パイプライン内のプログラムは、連続したレコード ストリームで動作します。プログラムは、パイプライン内の次のプログラムによって読み取られるレコードを書き込みます。読み取りと書き込みはデバイスに依存しないインターフェイスを通じて行われるため、任意のプログラムを他のプログラムと組み合わせることができます。
概要
CMS パイプラインは、CMS コマンドを提供しますPIPE。コマンドの引数文字列はPIPEパイプライン仕様です。PIPE は実行するプログラムを選択し、それらをパイプラインで連結してデータを送り出します。
CMS プログラムとユーティリティはデバイスに依存しないstdinおよびstdoutインターフェイスを提供しないため、CMS Pipelines にはパイプライン仕様で呼び出すことができる組み込みのプログラム ライブラリがあります。これらの組み込みプログラムはオペレーティング システムとインターフェイスし、多くのユーティリティ機能を実行します。
CMS 上のデータは、バイト ストリームではなく論理レコードで構造化されます。テキスト データの場合、テキストの行が論理レコードに対応します。CMSパイプラインでは、データは論理レコードとしてステージ間で渡されます。
CMS パイプラインユーザーは、ターミナルまたは EXEC プロシージャからパイプライン コマンドを発行します。ユーザーは、組み込みプログラムに加えて使用できる REXXでプログラムを作成できます。
例
ディスク ファイルを読み取り、文字列「Hello」を含むレコードと、文字列を含まないレコードを分離する簡単な例です。選択されたレコードは、それぞれに文字列「World!」を追加して変更され、その他のレコードは大文字に変換されます。次に、2 つのストリームが結合され、レコードが新しい出力ファイルに書き込まれます。
パイプ(終わり?)
< テキストを入力
| a: /Hello/ を探す
| 後に / World!/ を挿入
| i: ファンニナニー
| > 新しいファイル txt a
? 答え:
| xlate アッパー
| 私:
この例では、<ステージは入力ディスク ファイルを読み取り、レコードをパイプラインの次のステージに渡します。locateステージは入力ストリームを 2 つの出力ストリームに分割します。locate(Hello を含むレコード) のプライマリ出力は、レコードをinsertステージに渡します。insertステージは、引数で指定されたとおりに入力レコードを変更し、出力に渡します。出力は、faninanyすべての入力ストリームからのレコードを結合して 1 つの出力ストリームを形成する に接続されます。出力は新しいディスク ファイルに書き込まれます。
のセカンダリ出力locate(ラベルの 2 番目の出現でマークa:) には、選択基準を満たさなかったレコードが含まれます。これらのレコードは (ステージによって) 大文字に変換され、 (ラベルの 2 番目の出現でマーク)xlateのセカンダリ入力ストリームに渡されます。
faninanyi:
この例のパイプライン トポロジは、接続された 2 つのパイプラインで構成されています。終了文字(?この例では ) は、パイプライン セット内の個々のパイプラインを区切ります。入力ファイルから読み取られたレコードは、パイプライン トポロジの 2 つのルートのいずれかを通過します。どちらのルートにもレコードをバッファリングする必要があるステージが含まれていないため、CMS パイプラインは、faninanyレコードが を通過した順序でに到着することを保証しますlocate。
サンプル パイプラインは、個々のステージが別々の行に表示された「縦書き形式」で表示されます。パイプラインを CMS コマンドとして入力すると、すべてのステージが 1 行に書き込まれます。
特徴
シンプルなパイプラインの概念は次のように拡張されます。
- プログラムは、入力データの全部または一部に対して関数を実行するサブルーチン パイプラインを定義できます。
- 交差するパイプラインのネットワークを定義できます。プログラムは複数のパイプラインに同時に存在することができ、複数のデータ ストリームにアクセスできます。
- あるステージから次のステージに渡されるデータは、レコードとして構造化されます。これにより、ステージは、個々の行を区切る特殊文字をスキャンするためにデータを任意にバッファリングする必要なく、単一のレコードで操作できます。
- ステージは通常、ロケート モードで入力レコードにアクセスし、入力レコードを消費する前に出力レコードを生成します。このロック ステップ アプローチは、あるバッファーから次のバッファーへのデータのコピーを回避するだけでなく、マルチストリーム パイプラインでのレコードのフローを予測することも可能にします。
- プログラムはパイプライン トポロジを動的に再定義できます。別のパイプラインに置き換えたり、パイプライン セグメントを自身の前または後に挿入したり、その両方を行ったりできます。プログラムはパイプライン内のデータを使用してパイプライン仕様を構築できます。
CMS Pipelines は、プログラムの堅牢性を向上させるいくつかの機能を提供します。
- パイプライン構造全体またはいずれかのプログラムに構文エラーがあると、パイプライン全体が抑制されます。
- パイプライン内のプログラムの起動とリソースの割り当ては、CMS パイプラインディスパッチャによって調整されます。個々のプログラムは、その調整に参加して、パイプライン内のすべてのプログラムが引数を検証し、データを処理する準備ができるまで、取り消し不可能なアクションを延期することができます。パイプラインが終了すると、ディスパッチャはリソースが再び解放されるようにします。
- パイプライン内のデータ フロー中に発生するエラーは、関係するすべてのプログラムによって検出できます。たとえば、このような状況ではディスク ファイルが置き換えられない可能性があります。
歴史
IBMデンマークのジョン・ハートマンは、1980年にCMSパイプラインの開発を開始しました。[1]この製品は、80年代にIBMによって別個の製品として販売され、1991年後半にVM/ESAに統合されました。VMの各リリースで、 CMSパイプラインのコードもアップグレードされ、1997年にVM/ESA 2.3で1.1.10レベルで機能が固定されました。それ以来、新しい機能を試してみたいユーザーは、CMSパイプラインのホームページから最新レベルのCMSパイプラインをダウンロードできます。
CMS パイプラインの現在のレベルは、2016 年 11 月 11 日から利用可能な z/VM 6.4 以降の z/VMリリースに再度含まれています。
TSO用のCMS Pipelinesの実装は、1995 年にBatchPipes/MVS製品の BatchPipeWorks としてリリースされました。最新の TSO 実装は、2010 年まで IBM デンマークからサービス オファリングとして提供されていました。
どちらのバージョンも単一のソースコードベースから維持されており、一般的にCMS/TSOパイプラインと呼ばれています。仕様は著者版で入手できます。[2]
参照
参考文献
- ^ VM と VM コミュニティ、Melinda Varian
- ^ CMS/TSO パイプライン 著者版 著者版
外部リンク
- CMS/TSO パイプライン ランタイム ライブラリの配布

