スプーラー・データ・フロー: コマンドおよびバックエンド

基本オペレーティング・システム・スプーラーに対してジョブを実行依頼するために、4 つのコマンドを使用できます。 これらは、 lplprqprt、および enqです。

lpAT&T System Vに由来し、「lprBSDに由来し、「qprt」と「enqともに基本オペレーティングシステムに由来する。

ユーザーはこれら 4 つのコマンドのどれを使用してもジョブをスプーラーに実行依頼できますが、スプーラーへの実際の入り口点は enq コマンドです。 lplpr、および qprt はすべて、 enq. lplpr、および qprt に対するフロントエンドであり、すべての引数を解析し、 enqへの呼び出しを構成します。 フロントエンドは、それぞれの動作、およびそれぞれが受け入れるフラグの数とタイプに関して、互いに異なります。

ジョブをスプーラーに実行依頼すると、enq はジョブ要求を処理します。 ジョブ要求が有効ならば、基本的にはコマンド構文が正しいことになり、ジョブはキューに入れられます。 enq はジョブ記述ファイル (JDF) を作成し、qdaemon に新規 JDF の存在を通知します。

qdaemon は、それぞれの新規 JDF を読み取り、ジョブ要求を追跡するために維持している内部データ構造に、JDF によって指定されたジョブ・パラメーターを読み込みます。 qdaemon は、キュー状況情報を使用してそれぞれのキューの状況を追跡し、環境が整ったら、キューのジョブを処理するためのバックエンドを呼び出します。

キューのバックエンドは、そのキューに配置されたジョブの処理方法を厳密に決定します。 ユーザーがジョブをスプーラーに実行依頼するために使用するコマンドは、ジョブの特定の処理を要求するフラグを指定でき、また qdaemon はジョブが処理される時期を決定できますが (最短ジョブ最優先、または先着順サービス)、ジョブの処理に関して言えば、バックエンドがすべての作業を実際に行うプロセスです。 (システム管理者は、/etc/qconfig 内のスタンザを確認し、バックエンドを調べるだけで、特定のキューの機能を簡単に判別できます。)

次の図に、バックエンドに関する最も一般的な 2 つのシナリオ、ローカル・プリンター・キューとリモート・プリンター・キューを示します。 ローカル・キューは、バックエンドとして piobe (プリンター入出力バックエンド) を使用します。 リモート・プリンター・キューは、バックエンドとして rembak (REMote BAcKend、リモート・バックエンド) を使用します。

piobe は、すべてのバックエンドと同様に、qdaemon によって呼び出されます。 piobe は、一連のプログラム (パイプライン) をセットアップし、制御します。パイプラインは、印刷ジョブの幅広い制御を行うだけでなく、多量の制御データをプリンターに送信して、例えば処理対象のジョブをプリンターに配送する前にプリンターを特定モードに初期化します。 piobe は、プリンター・コロン・ファイルに格納されているデータを最初に使用します。 piobe によってセットアップおよび制御される、パイプライン内の最後のプログラムが、その前にパイプライン内で生成されたバイト・ストリームの物理的な配送を受け持ちます。 ローカル・キューの観点から見ると、このプログラムは、ローカル接続プリンター (シリアル接続またはパラレル接続)、またはネットワーク接続プリンターにバイト・ストリームを配送するデバイス・ドライバーを開きます。

図1: 基本オペレーティング・システムによる印刷
基本オペレーティング・システムによる印刷

rembak は、リモート・プリンター・キューが別のホスト上のキューを指している場合の一般的なバックエンドで、印刷サーバーと呼ばれることがよくあります。 piobe は印刷ジョブの幅広い操作を実行できますが、rembak は TCP/IP ネットワーク経由で印刷サーバーにジョブを転送する処理のみを行います。 「基本オペレーティング・システムによる印刷」の図に示したとおり、印刷サーバーが基本オペレーティング・システムをベースとした別のマシンであれば、rembak はジョブをネットワーク経由で lpd プロセスに転送します。次にこのプロセスは enq を呼び出し、このプロセスは JDF を作成し、以下も同様に前の図のとおり処理が進みます。