回答:
印刷スプールは、効果的にプログラムを提出し、1台以上のプリンタにそれらを供給するからジョブを受信するための責任を負うプログラム(スプーラ)とジョブごとに管理バッファ、です。スプールのポイントは、速度の異なる2つのシステム間の通信を処理し、共有デバイスへのアクセスを制御することです。前者は、プログラムが印刷ジョブを必要な速度で送信できることを意味し、それらのジョブはプリンターが処理できる速度で処理されます。後者(RonJohnが指摘したように)は、ジョブが一貫して処理されるようにします。したがって、印刷時にジョブが混同されることはありません。
ネットワークプリンタは独自のスプールを提供し、プリントサーバー(CUPS lpd
など)もスプールを実装します。ほとんどの印刷システムは、アクセス制御、クォータ、バナー、印刷オプションなども処理します。スプールは他のコンテキストで使用されます。たとえば、テープベースのバックアップサーバーは、高速なディスクベースのストレージシステム上のネットワークホストからバックアップデータをスプールするようになったため、テープシューシャインを回避するために必要な驚異的な速度で最新のテープドライブにフィードできます。
コメントのコンテキストでは、スプールの関連性は、フルフィルメントから印刷ジョブの送信を無相関にすることです。スプールしないということは、送信が印刷ジョブでlpr
のみ完了するため、ジョブが完了するとコマンドが完了することを意味します。プリンター自体もスプールする可能性があるため、コンピューターのスプールを削除しても期待した結果が得られない場合があります!
/var/spool/mail
同様の場所の下でメールスプールを使用しています。これは、メールメッセージのほぼ非同期送信を可能にする「バッファ」でもあります。メールメッセージはスプール/キューに入れられ、メールクライアントはメールが実際にシステムを離れるのを待つ必要はありません。印刷ジョブに非常によく似ています。
write
にします。データが実際に宛先に到達した後ではなく、使用されているバッファ(Linuxではページキャッシュ)にデータが書き込まれるとすぐに完了します。read
どちらも必ずしも非ブロッキングではなく、要求されたよりも少ないデータを返すことができます。
lpr
ため、プリンターがジョブの受け入れを完了するまで待機しても、完全に処理されるまでに遅延があります。
一言で言えば、スプーラは次のもので構成されます。
あなたの場合、フォアグラウンドプログラム(lpr
)は印刷ジョブをに送信します。印刷ジョブcups
はそれを保存し、シリアル、パラレル、USB、ネットワークなどの通信を使用して実際に印刷プロセスを開始します。
だから、今日プリンターが紙切れになったとしてもコンピューターを使い続けることができるのに対し、私がCP / Mの子供だった頃は、さらに紙を追加するまでコンピューター全体がロックしていたのです...
なぜ「スプール」と呼ばれるのですか?
当時、大規模なコンピューターはテープを使用してこれらの種類のファイルを保存するため、ディスクが高価すぎるため、データセンター内で作業しているときに最初に耳にしたのはテープが回転し始めた1 3-4プリンターが印刷を開始します(運がよければ)。;-)
注1:「スプール」とは、「磁気テープを巻き付けることができる円筒状のデバイス」を意味する名詞です。したがって、「スプール」とは、テープを回転させて巻き取る円筒状のデバイスのことです。
まず、「スプーリング」という用語の意味から始めましょう。ドキュメントのサイズがプリンターのメモリよりも大きい場合があります。そのため、「プリンタースプーリング」では、複数のドキュメントをプリンターに送信し、これらすべてのドキュメントをキューに入れることができます。
現在、Unixには2つの印刷システムがあります。
lpd
デーモンを使用して印刷ジョブをスケジュールします。lpsched
、スケジューラとして使用します。Jeff LessemのUSAIL:Unixシステム管理独立学習には、Unixでの印刷に関するセクションがあり、BSDシステムとSVR4システムの両方の概要を説明しています。
BSDスプーリングシステム
多くのコンピューターがプリンターを共有できるようにする大規模な異種ネットワークにも拡張されます。
BSDスプーリングシステムでは、プリンターへのアクセスは
lpd
デーモンとlpr
プログラムによって制御されます。lpr
は、印刷用にファイルをキューに入れることができるBSDシステム上の唯一のプログラムです。
lpr
印刷するデータを受け取り、それをスプールディレクトリに入れて、lpd
デーモンに通知します。各印刷ジョブに対してlpr
、スプールディレクトリに2つのファイル、制御ファイル(cfxxx)とデータファイル(dfxxx)を作成します。xxxは一意のジョブIDを示します。制御ファイルには、所有者のIDなど、印刷ジョブを処理するための情報が含まれています。データファイルには、印刷する実際のデータが含まれています。
lpd
デーモンは、チェック/etc/printcap
先のプリンタを識別するためのファイルを。宛先プリンタがローカルデバイスの場合、 その印刷キューでデーモンのlpd
コピーlpd
が実行されていることを確認します。それ以外の場合lpd
は、プリンタが接続されているリモートホストへの接続を開き、制御ファイルとデータファイルの両方をそこに転送します。印刷ジョブは
lpd
、先入れ先出し(FIFO)ベースでスケジュールされます。ただし、システム管理者はlpcコマンドを使用して、印刷キュー内のジョブの優先度を変更できます。
SVR4スプーリングシステムは、SolarisおよびHP-UXで使用されます。制御性と柔軟性が向上しますが、ネットワーク印刷用に設計されたものではなく、セットアップがより複雑です。
SVR4スプーリングシステムでは、
lp
コマンドは印刷するデータを受け入れ、宛先に関連付けられたスプールディレクトリにそのコピーを作成します。宛先は、プリンター名と、プリンターが属するクラスのオプションの指定で構成されます。指定されたプリンターがビジーの場合、ジョブは同じクラスの別のプリンターに送信されます。スプールディレクトリは通常/var/spool/lp/request/printer-name
、印刷ファイルにはジョブとユーザーの両方を識別するための一意の名前が付けられます。プリンタへのアクセスは
lpsched
デーモンによって制御されます。スプールディレクトリからジョブを取得し、使用可能になったときに適切な宛先に送信します。lpschedは、通常はにもログを保持します/usr/spool/lp/log
。ログファイルには、印刷ジョブの処理中にエラーが発生したことが示され、ユーザー名、
ことを決して忘れないスプールの頭字語であるS imultaneous P eripheral O perations O N Lの INE。コンピューティングの初期(ただし、最古ではない)日以来、プロセッサーはプリンターが印刷できるよりも速く結果を生成しました。スプーリングがなければ、プロセッサーは印刷自体が完了するまで「印刷ジョブ」を完了できませんでした。これにより、多くの場合、プリンタを待機するアイドルプロセッサが発生しました。
スプーリングの大きな飛躍は、アメリカの宇宙プログラム中に起こりました。コンピューターの結果の生成が遅すぎたため、NASA専用の新しいスプーリングシステムが作成されました(ただし、すべてのIBMシステムに導入されるまで、その後継機は人気を博しました)。それは呼ばれていたH ouston A utomatic SプーリングP作り、rogram HASP最初のネストされた頭字語。
スプールによく似ているのは、スレッドファクトリです。スレッドは高速でスピンされ、他の場所ではスプールに格納されます。その後、糸のスプールは最終的に縫製または他の機械に置かれ、非常に遅い速度で実行され、最終製品の作成に使用されます。
スプールはかなり古い学期です。最近では、より頻繁に使用される「印刷キュー」が表示されます。
キューに入れることは、「列に並んで待つ」という英国の格言です。したがって、印刷ジョブは「キュー」に入れられます。つまり、印刷するために並んで待機します。
ジョブがスプーリングを完了した後(印刷行間で長い「思考」時間が発生する可能性があります)、それは一般にFIFOベースで印刷されますが、印刷ジョブの優先順位はそれを上書きできます。
オペレーターが用紙を交換できるように、印刷スプールとキューを一時停止できます。一部のページが破損した場合は、再起動することもできます。