スプール(SPOOL)機能
- 1 スプール機能とは
-
オフコンを含むコンピュータはとても速いです。複雑な計算も一瞬で終わるし、データのソートや抽出もすぐに終わります。秒とかミリ秒の世界です。
一方、プリンターは遅いです。ガチャガチャと文字や画像を印刷しますが、何枚、何十枚も印刷するのに分単位でかかります。
オフコンから紙に印刷するのに、印刷が終わるまでオフコンがプリンターに付き合っていたりしたら、時間の無駄です。業務プログラムが全部印刷が終わるまで動かなかったら仕事になりません。そこですぐにプリンターに印刷せずにいったん印刷データをスプールというものに溜めて、後でまとめて印刷するということを行うことがあります。印刷データをスプールに送ったら、すぐに業務プログラムは先の処理に進めるため、ずっと待つということをしなくてもよくなります。
他にも利点があります。オフコンは同時にたくさんのジョブを実行できます。複数のジョブから1台のプリンターで印刷しようとしたら、プリンターが使えるジョブは1つだけです。他のジョブはプリンターが空くまで待たなくてはなりません。これも遅すぎて仕事になりません。この場合もプリンターが使えないジョブは代わりにスプールに印刷データを送ってしまえば、待ち合わせつ必要はありません。次の業務を続けることができます。プリンターが空いたら印刷データをスプールからプリンターに送って、印刷すればいいのです。
このように印刷データをいったんスプールファイルに溜めておき、プリンタが使用できる状態になった時点でスプールファイルから読み出して印刷する仕組みがスプール機能です。
NECのマニュアルのシステム管理説明書には次のような利点が書いてあります。
- プリンタの接続台数を越えるプリンタ出力を行うジョブを同時に実行することができる
- プリントを行うジョブの実行速度が上がる
- スプールファイルからプリンターへの印刷は、他のジョブと並行して実行できるので、システムの処理効率が上がる
- プリンターの異常によるジョブの中断がなくなり、復旧処理に対する配慮の必要性が少なくなる
- プリンター用紙の破損による帳票の乱れが発生した場合でも、その帳票を作成したジョブを再実行することなく、スプールファイルから特定のページだけ帳票を印刷し直すことができる
- プリンタの異常によるジョブの中断がなくなり、復旧処理に対する配慮の必要性が少なくなる
- 複数のコピーが得られる
- プリンタの障害時もプリント出力を行うジョブを実行できる
一旦印刷データをスプールファイルに入れるという仕組みなので、スプールファイルを消さなければ何度でも同じように印刷できたり、一部だけ印刷したりということもできるということです。プリンターが壊れていたり紙が無かったりインクが無くなったりした時も、スプールファイルに印刷データを取っておけば、プリンタを修理した後や紙やインクを補充した後に印刷するということもできます。
- 2 スプールライタとは
-
いちいちプリンターが空いたかどうか確認して、人手でボタンをクリックしたりしてスプールファイルから印刷するとしたらとても面倒です。
スプールライタは、プリンターとスプールファイルを監視していて、順番にスプールファイルから印刷データを取り出してプリンターへ送る機能です。
スプールファイルには、優先度や印刷枚数、印刷するか保留するか、どのプリンターに印刷するかなどの属性があり、スプールライタはそれを見て、その定義に従って一番優先度の高いものから順番に印刷していきます。
スプールライタは通常はシステムステーションに常駐させます。
常駐方法はシステムプリンタとステーション対応プリンタで異なり、システムプリンタ用のスプールライタはSGの設定で自動起動させます。ステーション対応プリンタは拡張システムコマンドで起動させます。スプールライタがシステムに常駐していないと、スプールファイルの属性が自動プリントになっていても自動的に印刷されません。
コマンドを入力してスプールライタの動きを制御することもできます。
コマンド 動 作 一時停止・再開コマンド
PF1印刷は一時停止し、画面上にリスタートのための指定情報が表示される
このとき、再開(リスタート)のためのページ数、およびテスト印刷の有無を指定できる中止コマンド
PF16印刷中のレポートの印刷を打ち切り、次のプリント要求を取り出して印刷を開始する
印刷を中止したレポートは、保存指定にかかわらず保存される中止・削除コマンド
PF9印刷中のレポートの印刷を打ち切り、次のプリント要求を取り出して印刷を開始する
印刷を中止したレポートをスプールファイルに残すか否かを指定することができるプログラム放棄コマンド プログラム放棄コマンドを入力すると、スプールライタは強制終了する スプールプリントプログラム(#SWRIT)とも呼ばれます。
- 3 スプール出力の方法
-
プリンターに印刷するプログラムを作るとき、「直接プリンターを指定して印刷する方法」と「スプールファイルを指定して印刷データを出力する方法」の2種類があります。
即時プリントレポートのように少量印刷で処理結果を直ちに出力したい場合は直接プリンターを指定して印刷する方法、一括プリントレポートのように一括で大量に印刷する場合はスプールファイルを指定して印刷データを出力する方法を選択することが多いです。
- 3.1 プリンタビジースプール
-
直接プリンターを指定して印刷する方法を取る場合、そのプリンターが他のジョブで使用中のときに問題が発生します。このようなときには結局プリンターが空くまで待たなくてはなりません。
そのときはいったんスプールファイルに入れておいて、プリンターが空いたらスプールライタで印刷する、という方法があります。
このように直接プリンターを指定して印刷して、もしプリンターが使用中だったらスプールに入れる仕組みをプリンタビジースプールといいます。このスプールファイル自体をプリンタビジースプールとも言います。
プリンターが使用中以外にもプリンターに問題があって印刷できないときもプリンタビジースプールの機能が働きます。
直接プリンターを指定して印刷する方法でプリンターが使用中だったら、実際にどうなるかを説明します。
まず「プリンタ使用中」と表示されます。
次に「アクションパラメータ(Y/N/W/C/ADV):SPL= 」というメッセージが表示されます。これはプリンタビジースプールを使用しますか、と質問しています。
次のようにキーを押して選択します。
ちなみにYキーでもNキーでもなく、単にエンターキーを押すとYキーを押したことになります。次のスプールファイルの属性の質問もすべて省略されて、それぞれの値は省略されたときの値が選択されたとして動きます。キー 動 作 Y プリント要求をスプールファイル出力に切り換える。つまりプリンタビジースプールを使用する N ジョブを異常終了させる。つまりジョブも途中で終了するし、印刷もしない W プリンタが使用可能になるのを待つ。しばらく待っても空かない場合は「アクションパラメータ〜〜」と同じ質問が繰り返されます C 他のプリンタに変更する アクションパラメータでYキーを押すと、次にプリンタビジースプールのスプールファイルの属性を質問してきます
パラメータ 意 味 CPY レポートの部数を1〜99の範囲で指定。省略すると1 CFM プリント終了時、レポートの印刷が正常に行われたかについて、オペレータの確認が必要か否かを選択。省略するとN
Y…オペレータの確認が必要である。
N…オペレータの確認は必要ないAUT レポートをスプールファイルに出力後、プリンターが使用可能になった時点で自動的に印刷するか否かを選択
Y…自動的に印刷する
自動的には印刷しない
省略した場合はYTST スプールファイルからプリンタにレポートを印刷するとき、テスト印刷を行うか否かを選択
Y…テスト印刷を行う
N…テスト印刷は行わない
省略するとNHLD スプールライタがレポートをスプールファイルからプリンタに印刷した後、そのレポートをスプールファイルから消去するか、ファイルに残すかを選択
Y…印刷終了後もレポートをスプールファイル内に残す
N…印刷終了後レポートはスプールファイルから消去する
省略するとNアクションパラメータのところでCキーを押すと変更するプリンターを指定することになります。
プリンターが使用中のつど手動で指定するという案もありますが、A−VXのシステム変更を行うことで、プリンタビジースプールに自動的に出力するように設定変更することもできます。手動だといちいち面倒ですよね。これを自動スプール指定といいます。この場合はプリンタビジースプールの属性は固定でSPL=Y、CPY=1、CFM=N、AUT=Y、TST=N、HLD=Nになります。
- 3.2 直接スプール
-
最初からスプールファイルを指定して印刷データを出力する場合は、印刷したデータは常にスプールファイルに一旦入ります。(プリンタビジースプールはプリンターが使用中の場合だけスプールファイルに入るのでしたね。)
直接スプール機能を使う場合は、COBOLやSMARTでプログラムを作るときに印刷先の名前にプリンターの名前ではなくスプールを指定します。自動スプールの属性は固定でSPL=Y、CPY=1、CFM=N、AUT=Y、TST=N、HLD=Nになります。
スプールライタが常駐していれば、スプールファイルから順番にプリンタに印刷されていきます。
- 4 システムスプールとプライベートスプール
-
スプールを使用するときにシステムが自動的にスプールファイルをアロケートして印刷データを保存するスプールファイルをシステムスプールファイルといます。
上で説明したスプールライタで自動的に印刷したいときやプリンタビジースプールはシステムスプールを使用します。
システムスプールのスプールファイルの名前はSYS@SPxxxx(xは数字)という名前になります。スプールファイルはシステムが自動で作って自動で消すので、あまり気にしなくてもいいです。一方、あらかじめ利用者がスプールファイルを手動でアロケートしておいて自分でそこに印刷データを入れるスプールファイルをプライベートスプールファイル(ユーザスプールファイル)といいます。そしてこの仕組みをプライベートスプールと言います。
印刷データを自分用に取っておくとか、利用者が属性を変更して利用するとか、スプールファイルをどこか別のオフコンに持っていて印刷するとか、機密性の高いレポートであるとか、重要なので削除されたら困るとか、特別な用途に使います。
プライベートスプールの名前は自由に付けることができます。ファイルのアロケートも削除も印刷も自動では行われないので、自分で管理する必要があります。 - 4 システムプリンタ群制御
-
複数のプリンターをまとめて1つのシステムプリンタとして扱うことができます。これをシステムプリンタ群制御と言います。
システムプリンタに対して印刷すると、プリンタ群うちの空いているプリンターに印刷します。
どのプリンターをシステムプリンタとするかは、SGの設定で行います。
- 5 スプールコマンドプログラム(#SPOOL)
-
スプールコマンドでスプールの操作をすることができます。
プリンタビジースプールでAUT=Yにした場合は自動で印刷されないので、スプールコマンドの印字要求コマンドで印刷しなければなりません。
スプールファイルを手動で削除したいときや、属性を変更したり、印字要求をキャンセルしたり、印刷前に印字イメージを見ることもできます。
いくつかのコマンドを以前説明していたので、それをリンクしておきます。