JP2005276175A - 拡張性のあるプリントスプーラ - Google Patents
拡張性のあるプリントスプーラ Download PDFInfo
- Publication number
- JP2005276175A JP2005276175A JP2005032051A JP2005032051A JP2005276175A JP 2005276175 A JP2005276175 A JP 2005276175A JP 2005032051 A JP2005032051 A JP 2005032051A JP 2005032051 A JP2005032051 A JP 2005032051A JP 2005276175 A JP2005276175 A JP 2005276175A
- Authority
- JP
- Japan
- Prior art keywords
- server
- client
- spooler
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1202—Dedicated interfaces to print systems specifically adapted to achieve a particular effect
- G06F3/1211—Improving printing performance
- G06F3/1212—Improving printing performance achieving reduced delay between job submission and print start
- G06F3/1213—Improving printing performance achieving reduced delay between job submission and print start at an intermediate node or at the final node
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1223—Dedicated interfaces to print systems specifically adapted to use a particular technique
- G06F3/1237—Print job management
- G06F3/126—Job scheduling, e.g. queuing, determine appropriate device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1278—Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
- G06F3/1285—Remote printer device, e.g. being remote from client or server
- G06F3/1288—Remote printer device, e.g. being remote from client or server in client-server-printer device configuration
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Accessory Devices And Overall Control Thereof (AREA)
- Computer And Data Communications (AREA)
Abstract
【課題】専用のプリントサーバとともに最も有効に使用される拡張可能なプリントスプーラを提供すること。
【解決手段】多数のクライアントコンピュータにサービスを提供するプリントサーバは、クライアントコンピュータによってプリントサーバに送信されたデータの印刷を調整するサーバプリントスプーラを実施するソフトウェアを有する。いくつかのプリンタは、サーバコンピュータに結合されて、サーバプリンタスプーラの指示の元に印刷を行う。プリントスプーラへのクライアント呼び出しは、リモートプロシージャ呼び出しチャネルによって通信する非同期プロシージャによって達成される。プリントサーバのスレッドプールは、クライアント要求間での不合理なコンテキストスイッチ無しにこれらの呼び出しを処理する。
【選択図】 図1
【解決手段】多数のクライアントコンピュータにサービスを提供するプリントサーバは、クライアントコンピュータによってプリントサーバに送信されたデータの印刷を調整するサーバプリントスプーラを実施するソフトウェアを有する。いくつかのプリンタは、サーバコンピュータに結合されて、サーバプリンタスプーラの指示の元に印刷を行う。プリントスプーラへのクライアント呼び出しは、リモートプロシージャ呼び出しチャネルによって通信する非同期プロシージャによって達成される。プリントサーバのスレッドプールは、クライアント要求間での不合理なコンテキストスイッチ無しにこれらの呼び出しを処理する。
【選択図】 図1
Description
ここに開示したシステムは、クライアント/サーバコンピューティングアプリケーションで使用される改良されたプリントスプーラに関する。
大規模な企業では、複数のプリントサーバは単一のサーバにまとめられることが多い。この傾向は次第に高まっており、単一のプリントサーバによって益々多くのユーザにサービスが提供され、また益々多くのプリンタが接続されるようになってきている。Windows(登録商標)2003 Serverは、例えばWindows(登録商標)2000 Serverなどの拡張性に関し改良が施されている。本発明は、Windows(登録商標)2003 Serverアーキテクチャがプリントサーバとして機能する際に使用する技術を改良することに関する。
拡張性における問題に共通する原因は、そのサーバにおいてあまりに多くのスレッド(またはプロセス)がプロセッサ時間を獲得するため競合することにある。単一の中央処理ユニットでは、一度に1つの命令しか実行できない。作業がバックグラウンドスレッドに渡されても、メインスレッドまたは他のスレッドが実行し続けている間はその作業は実行されない。ロック時またはタイムスライスの割当時にスレッドがブロックされた場合、スレッドが起動する際にコンテキストスイッチによりCPUリソースが消費される。スレッドにタイムスライスが割当られても結局ブロックされていることがわかるだけで、スレッドはすぐに休止することがしばしばある。この現象によって、キャッシュスラッシングが生じ、およびコンテキストスイッチを行なう際のサイクルの効率が悪化する。
例証のために、800台のプリンタおよび5000台のクライアントにサービスを提供する1つのサーバ(または複数のサーバ)のテストが行われた。このとき約5000の並行スレッドが生じた。あるプロセスでスレッドが作成されるときはいつでも、サーバのオペレーティングシステムは、スレッドをスタックするためにアドレス空間の所定の領域を確保しておくとともに、この確保された領域のためにいずれかの物理的な格納領域をあてがう。Windows(登録商標) Server 2003下で実行するプリントスプーラの場合、これらのパラメータは、スタックには262,144バイト、メモリにはX86プロセッサのスレッド当たり32,768バイトまで可能である。よって5000のスレッドの場合、5000×32768=164Mのメモリをあてがわれたことになる。5000の同時に発生するスレッドは、主に2つの箇所、つまりクライアントおよびポートスレッドの関数から受信するRPCの呼び出しに集中する。本発明は、これらの原因によるサーバリソースの消費を低減する取り組みに関する。このリソースの割当の問題は、(非特許文献1)にも記載されている。
chapter 14 (Asynchronous Input/Output and Completion ports) of a text entitled "Win32 Systems Programming" Copyright 2001, Addison Wesley
Inside Microsoft Windows(登録商標) 2000 (Solomon et al Microsoft Press, copyright 2000)
Windows(登録商標) 2000およびWindows(登録商標) XPの現在のクライアントプリントスプーラは、名前付きパイプエンドポイントを使用してサーバと通信するリモートプロシージャ呼び出しを使用する。ここで、名前付きパイプを使用する際には、拡張性およびセキュリティに関連する問題が生じる。
クライアントへの印刷通知をサポートするためには、クライアントへ匿名の接続を可能とすることによって通知用の逆方向チャネル(サーバからクライアントへの通信)を使用することができるようにするしかない。登録されているすべてのクライアントへのこうした同時接続を維持することもサーバにとっては必要なものであり、このためサーバの拡張性の点で悪影響が生じる。
サーバが多数の無駄な未処理の呼び出しを抱えることは望ましくない。名前付きパイプにおいて、応答を待っている各クライアントは、サーバ上で実行される未処理の名前付きパイプを有しており、その各々について一定の量のカーネルメモリが必要となる。
サーバが多数の無駄な未処理の呼び出しを抱えることは望ましくない。名前付きパイプにおいて、応答を待っている各クライアントは、サーバ上で実行される未処理の名前付きパイプを有しており、その各々について一定の量のカーネルメモリが必要となる。
スプーラインターフェイスには次の問題がある。
これらのインターフェイスは主に同期式インターフェイスであり、サーバ側で任意のスレッドをプールするのを妨げられる。また、クライアント側での任意の非同期操作にも悪影響を与え、アプリケーション応答時間に悪影響を与える可能性がある。
これらのインターフェイスは主に同期式インターフェイスであり、サーバ側で任意のスレッドをプールするのを妨げられる。また、クライアント側での任意の非同期操作にも悪影響を与え、アプリケーション応答時間に悪影響を与える可能性がある。
非特許文献2のテキストには、ネットワークに関連する章が含まれている。Solomonらのテキストには、「ここに記載した同期関数呼び出しに基づくインターフェイスに加えて、Windows(登録商標) 2000 RPCは、非同期のRPCもサポートする。非同期のRPCによって、RPCアプリケーションは、一定の関数を実行できるようになるが、その関数が処理を続けていても終了するまで待たない。代わりにアプリケーションは、他のコードを実行し、後にサーバから応答が届くと、RPCランタイムは、クライアントが非同期の呼び出しと関連付けたイベントオブジェクトに信号を送る。クライアントは、関数の終了を知るため、WaitForSingleObjectなどの標準Win32関数を使用することができる」と記されている。
例示のシステムを専用のプリントサーバとともに使用して、プリンタによりデータを効率よく印刷することができる。本発明の1つの例としては、データを同時に印刷する必要があるアプリケーションプログラムを有する多数のクライアントコンピュータにサービスを提供するプリントサーバに供することである。これらのアプリケーションには、それだけには限定されないが、文書処理アプリケーションプログラムなどがある。サーバコンピュータは、クライアントコンピュータによってプリントサーバに送信されたデータの印刷を調整するサーバプリントスプーラを実装するソフトウェアを有する。いくつかのプリンタは、一般にネットワークによってサーバに結合されて、サーバプリントスプーラの指示の下に印刷を行う。
例示のシステムによれば、クライアントコンピュータは、サーバプリントスプーラに対する非同期のリモートプロシージャ呼び出しによってデータをプリンタのうちの1つに送信するクライアントコンピュータで実行されるクライアントプリントスプーラを含む。サーバプリントスプーラは、データを複数のプリンタに伝達することによって未処理のクライアントコンピュータ要求を処理するスレッドプールを維持するスレッドマネージャを含む。
クライアントコンピュータでの非同期のリモートプロシージャ呼び出しにより、停止中の、またはサーバの実行を待機中のアプリケーションプログラムのインスタンスが削減される。プリントサーバが重負荷下にあるとき、クライアントアプリケーションプログラムは、単にプリントサーバからの応答を待っている場合でさえ、うまく機能していないように思われる場合がある。
サーバでのスレッドプールの使用によって、従来技術のプリントスプーラで起こる非効率なコンテキストスイッチが低減する傾向にある。こうしたコンテキストスイッチはサーバリソースに負担をかけ、結果的にプリントサーバプロセッサ時間が非効率に使用されることになる。
例示のシステムにおいては、クライアントとサーバとの間の転送プロトコルとしてTCPが使用される。TCPはより高速で、より豊富な機能を有しており、より拡張性が高く、頑強で、一般に名前付きパイプほどリソースを消費しない。TCPは、ドメインおよび他の非標準環境においてもよく機能する。TCPは、ファイアウォールとより親和性があり、そのトラフィックの処理に関わる構成要素をより少なくすることができる。
本発明のこれらおよび他の目的、利点および特徴を、添付図面とともに説明する以下のシステムの実施形態の例でより十分に説明する。
図2は、ネットワーク通信によってサーバ12と通信する複数のワークステーション11を有するネットワーク10を示す図である。サーバ12は、印刷要求を処理するためにネットワークを介していくつかのプリンタ13と通信し、またプリンタ13aに結合するパラレルインタフェースのインターフェイスを備える。ネットワークを介した通信には、ワークステーションおよびサーバにインストールされている従来のイーサネット(登録商標)スイッチおよびイーサネット(登録商標)カードによる有線、および既知の無線通信標準を実装する無線ルータによる無線の両方がある。したがって、例えばラップトップコンピュータ14は、物理的にネットワークハードウェアに結合されることなくサーバ12と通信することができる。ワークステーション(またはラップトップ)は、ワークステーション上で実行されるアプリケーションプログラムのうちの1つの要求で、サーバに実装されているプリントスプーラに印刷を行うことを伝達し、指示することができる。文書処理アプリケーションは、例えばオペレーティングシステムによってアプリケーションに公開されているWin32アプリケーションプログラムインターフェイスによってその要求を伝達する。Win32は、Windows(登録商標)ブランドのオペレーティングシステムの現在好ましいアプリケーションインターフェイスであるが、サーバ12に要求を送信する他の手段も本発明によって企図される。
本発明の実施形態例は、プロセス間通信のクライアント/サーバモデルを使用してプリントスプーラを実装する。より詳細には、一実施形態では、ワークステーション11におけるクライアントプロセスは、ネットワーク10によって1つまたは複数のプリントサーバ12と通信して、従来技術の印刷システムより効率的で頑強な方法で印刷を行う。図3は、プリントスプーラでジョブをキューに入れるリモートプロシージャ呼び出し(本明細書ではRPC)に基づくプロセスを実施するサーバとクライアントとの対話を示す略図である。図3で、クライアント15は、(図2のネットワークなど)ネットワークによってサーバ16と対話していることがわかる。一例では、クライアントは、ワークステーションで実行されるソフトウェアであり、サーバソフトウェアはサーバコンピュータ12で実行されるソフトウェアである。サーバソフトウェアは、専用のプリントサーバで実行されるソフトウェアであるが、本発明の実施形態例によれば、ワークステーションもサーバとして働くプリントスプーラを実装する。したがって、クライアント/サーバモデルによる別のアプリケーションでは、クライアントおよびサーバは、同じコンピュータ上で実行される。例えばワークステーション上のプリントスプーラは、非同期のプロシージャ呼び出しを使用して印刷要求を直接ローカルプリンタに伝達する。
RPCプロセス間通信の使用によって、ワークステーション11の1つなど、ローカルマシン上で実行されるアプリケーションは、図2のサーバ12などのリモートマシン上のプロセスを呼び出すことができる。呼び出す側の文書処理プログラムは、印刷プロセスがサーバ上のコード実行を呼び出すことに関与していない。ローカルアプリケーションにとっては、プロセスが完全にローカルマシン上で実行しているように見える。RPCは、トランスポートを中心とするビューよりむしろネットワーク接続された動作の手続きビュー(procedural view of networked operation)を提供し、したがって分散されたアプリケーションの開発および配置が簡単になる。Windows(登録商標)オペレーティングシステムで使用されるRPCプロセスは、OSF(Open Software Foundation)配布のコンピューティング環境との互換性がある。
ネットワーキングソフトウェアは従来、I/Oモデルの処理中心に構築されている。例えばWindows(登録商標)2000では、ネットワーク操作は、アプリケーションがリモートI/O要求を発行したときに開始する。オペレーティングシステムは、それをリダイレクタに転送することによって要求を処理する。リダイレクタは、リモートファイルシステムとのクライアント対話をクライアントに意識させないようにするリモートファイルシステムとして動作する。
リモートプロシージャ呼び出し(RPC)は、わずかに異なる手法を実行する。RPCアプリケーションは、プロシージャ、およびプロシージャライブラリを呼び出して特定のタスクを実行する、他の構築されたアプリケーションに類似する。しかし、インターフェイスによってアプリケーションプログラムに公開されるプログラムは、リモートコンピュータ上で実行されるプロシージャを呼び出すことができる点で相違する。リモートクライアントは、ネットワークによってサーバと通信する。これは、同じコンピュータ上のサーバと通信するローカルクライアントと異なる。
コンピュータシステム
図1は、例えば、ネットワーク10上のワークステーション11またはサーバ12の構造を示すデータ処理システムの例を示している。本システムは、1つまたは複数の処理ユニット21、システムメモリ22、およびシステムメモリを含む様々なシステム構成要素を処理ユニット21に結合するシステムバス23を有する従来のコンピュータ20の形の汎用コンピューティング装置を備える。システムバス23は、様々なバスアーキテクチャのうちの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のうちどんなものでもよい。
図1は、例えば、ネットワーク10上のワークステーション11またはサーバ12の構造を示すデータ処理システムの例を示している。本システムは、1つまたは複数の処理ユニット21、システムメモリ22、およびシステムメモリを含む様々なシステム構成要素を処理ユニット21に結合するシステムバス23を有する従来のコンピュータ20の形の汎用コンピューティング装置を備える。システムバス23は、様々なバスアーキテクチャのうちの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のうちどんなものでもよい。
システムメモリは、読取り専用メモリ(ROM)24およびランダムアクセスメモリ(RAM)25を含む。基本入出力システム(BIOS)26は、例えば起動中など、コンピュータ20内の要素間での情報の転送を助ける基本ルーチンを含み、ROM24に格納されている。
コンピュータ20は、図には示していないがハードディスクから読み取り、あるいはそこに書き込むハードディスクドライブ27、リムーバブル磁気ディスク29から読み取り、あるいはそこに書き込む磁気ディスクドライブ、およびCD−ROMや他の光媒体など、リムーバブル光ディスク31から読み取り、あるいはそこに書き込む光ディスクドライブ30をさらに含む。ハードディスクドライブ27、磁気ディスクドライブ28、および光ディスクドライブ30は、それぞれハードディスクドライブインターフェイス32、磁気ディスクドライブインターフェイス33、および光ドライブインターフェイス34によってシステムバス23に接続される。ドライブおよびその関連のコンピュータ読取可能な媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール、およびコンピュータ20の他のデータの不揮発性記憶域を提供する。本明細書に記載した環境の例は、ハードディスク、リムーバブル磁気ディスク29、およびリムーバブル光ディスク31を使用するが、動作環境の例において、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)など、コンピュータによってアクセス可能なデータを格納できる他のタイプのコンピュータ読取可能な媒体を使用することもできることを当業者であれば理解されたい。
オペレーティングシステム35、1つまたは複数のアプリケーションプログラム36、他のプログラムモジュール37、およびプログラムデータ38を含めて、いくつかのプログラムモジュールをハードディスク、磁気ディスク29、光ディスク31、ROM24またはRAM25に格納することができる。ユーザは、コマンドおよび情報をキーボード40およびポインティング装置42などの入力装置を介してコンピュータ20に入力することができる。他の入力装置(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどがある。これらおよび他の入力装置は、しばしばシステムバスに結合されているシリアルポートインタフェース46を介して処理ユニット21に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)など他のインターフェイスで接続してもよい。モニタ47または他のタイプの表示装置もまた、ビデオアダプタ48などのインターフェイスを介してシステムバス23に接続される。パーソナルコンピュータ(PC)は一般に、モニタに加えて、スピーカやプリンタなどの他の周辺出力装置(図示せず)を含んでいる。
図1に示したコンピュータ20は一般に、リモートコンピュータ49など1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作する。リモートコンピュータ49は、別のPC、サーバ、ルータ、ネットワークPC、ピア装置、または他の一般のネットワークノードでよく、一般にコンピュータ20に関連して上述した多くまたはすべての要素を含むが、図1にはメモリ記憶装置50のみを示している。図1に示した論理接続は、ローカルエリアネットワーク(LAN)51および広域ネットワーク(WAN)52を含む。こうしたネットワーキング環境は、オフィス、全社規模のコンピュータネットワーク、イントラネット、およびインターネットではごく一般的である。
LANネットワーキング環境で使用する場合、コンピュータ20は、ネットワークインターフェイスまたはアダプタ53を介してローカルネットワーク51に接続される。WANネットワーキング環境で使用する場合、コンピュータ20は一般に、モデム54、およびインターネットなどWAN52を介して通信を確立する他の手段を含む。モデム54は、内蔵のものでも外付けのものでもよく、シリアルポートインタフェース46を介してシステムバス23に接続される。ネットワーク環境では、コンピュータ20に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。図示したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してもよいことは理解されよう。
Windows(登録商標)2000(およびそれ以降のバージョン)のオペレーティングシステム環境では、RPCアプリケーションを記述するために、オペレーティングシステムプログラマは、どのプロシージャがローカルで実行され、どのプロシージャがリモートで実行されるかを決定する。アプリケーションが実行されると、ローカルプロシージャ、およびローカルマシンにはないプロシージャが呼び出される。後者の場合を扱うために、アプリケーションは、リモートプロシージャごとに1つのスタブプロシージャを含む動的リンクライブラリ(DLL)、またはローカルの静的リンクライブラリにリンクする。スタブプロシージャは、リモートプロシージャと同じ名前を有しており、同じインターフェイスを使用するが、スタブは、必要な操作を実行する代わりに、それに渡されたパラメータを取得し、ネットワークを介して送信するようにパラメータを整列させる(marshal)。パラメータを整列させるプロセスとは、参照を解決し、ポインタが参照する任意のデータ構造のコピーを取得するなど、ネットワークリンクに合う特定の方法でパラメータを順序付けして、ひとまとめにすることを意味する。
次いでスタブは、リモートプロシージャが存在するコンピュータを探し出し、どのトランスポート機構を使用するかを決定するRPCランタイムプロシージャを呼び出し、リモートサーバへの送信要求をローカルトランスポートソフトウェアに送信する。リモートサーバは、RPC要求を受信すると、パラメータの整列を解き(unmarshal)、元のプロシージャ呼び出しを再構築してプロシージャを呼び出す。サーバは、クライアント呼び出しの処理を終了すると、逆の順序で実行して結果を発呼者に戻す。Windows(登録商標)オペレーティングシステム環境では、RPCアプリケーションの作成のプロセスは、Microsoftインターフェイス定義言語コンパイラによって簡略化される。IDLファイルは、コンパイルされて、クライアント側およびサーバ側の双方のスタブルーチン、およびアプリケーションに含まれるヘッダーファイルを生成する。既存のRPCアプリケーションを呼び出そうとするプログラマは、クライアント側のソフトウェアを記述し、アプリケーションをローカルのRPCランタイム機能にリンクするだけでよい。
Windows(登録商標)2000ネットワーキングサービスは、現在、名前付きパイプ、Net BIOS、およびTCP/IPのネットワークトランスポートプロバイダDLLを含むRPCアプリケーションを含む。クライアントの要求を処理するネットワーク10上のサーバ12などのサーバは、Active Directory(商標)によってネットワーク上でその存在を知らせる。
サーバスレッドプール
プリントスプーラ100(サーバ12で実行されるソフトウェアに実装)は、こうした要求を処理するスレッドプール202を維持することによって複数のクライアント要求(潜在的にこうした何千もの要求に同時に)に応答する。クライアント印刷要求ごとにサーバスレッドが割り当てられる従来技術と異なり、本発明の実施形態例によれば、サーバリソースに対して過度の負担をかけること無しに、効率的に複数のクライアント印刷要求に応答することができるスレッドプールが維持される。
プリントスプーラ100(サーバ12で実行されるソフトウェアに実装)は、こうした要求を処理するスレッドプール202を維持することによって複数のクライアント要求(潜在的にこうした何千もの要求に同時に)に応答する。クライアント印刷要求ごとにサーバスレッドが割り当てられる従来技術と異なり、本発明の実施形態例によれば、サーバリソースに対して過度の負担をかけること無しに、効率的に複数のクライアント印刷要求に応答することができるスレッドプールが維持される。
RPCに基づくプリントスプーラ例は、第1のスレッドプール202aからジョブを抽出し、サーバ上の完了ポート(completion port)210に基づいて第2のスレッドプール202bを実行するスケジューラ204を含む。完了ポートとは、ポートを待っている重複するハンドルとスレッドの組のことである。単一のWin32インターフェイス関数CreateIOCompletionPortは、ポートを作成し、ハンドルをポートに追加するために使用される。
受信する非同期のプリンタ関数ごとに、スプーラ100’は、スレッドがサービスを提供するキューに項目を追加する。その非同期のプリンタ関数は、すぐにクライアントに戻る。スプーラ100’は、スケジューラ204からキューに入れられた要求を処理するためのいくつかのワーカスレッドを有しており、1つのスレッドがこうした要求のキュー内の1つの要求を処理し終えると、非同期RPC完了呼び出し関数(complete call function)によって結果がクライアントに送信される。次いでそのスレッドは、キューから次の項目を取得してその要求を処理する。キューのサイズに応じてスレッドプール内のスレッド数は増減して、負荷を管理することができる。
高性能サーバプリントスプーラの実装は、効率的なスレッドモデルの実装を必要とする。クライアント要求を処理するにはプリントスプーラスレッドが少なすぎる、または多すぎることによって、性能の問題がもたらされる可能性がある。プリンタスプーラの実施形態例の目的は、そのスレッドが不要なブロッキングを回避するようにしてできるだけ少ないコンテキストスイッチしか負担を受けないですむようにすると同時に、複数のアクティブなスレッド間の並行処理を最大限に実行することである。
プリントスプーラ100’の一例では、印刷サービスを要求している様々なクライアント処理によってスプーラ100に渡された印刷ジョブを達成するための焦点としてI/O完了エグゼクティブオブジェクト(completion executive object)210が使用されるが、これは完了ポートとしてWin32にエクスポートされる。
残念ながら、プリントスプーラ100によって実行される関数の一部は、様々な理由のためにすぐには終わらない。これには、グローバルレジストリロック(global registry lock)、および他の遅い関数の呼び出しが含まれる。これらの関数でブロックが発生すると、スレッドプール106を維持するRPCランタイムは、別のスレッドを作成して、スケジューラによって送信された新たに受信するクライアントにサービスを提供する。
本発明によれば、サーバが処理するのに時間のかかる関数が識別され、クライアントで非同期に実行するように変更される。従来技術のシステムの分析によると、終了に長時間を要するスプーラ自体から発信された関数NOTからのデータが提供された。これらの関数を識別することは、クライアントにおいて非同期のインターフェイスメソッドとして実行されるのがどの関数かを選択するための方法の1つである。
例示のシステムでは、新しいインターフェイスは、従来技術のwinspoolインターフェイスと並行して実行される。新しいインターフェイスを実行する際、一部の関数は非同期であり、一部の関数は同期である。新しいインターフェイスは、非同期関数および同期関数を有し、そのトランスポートプロトコルとして名前付きパイプを使用する古い同期インターフェイスと並行して実行される。名前の衝突を避けるために、異なるメソッド名が使用される。
TCP/IPトランスポートおよびセキュリティモデル
従来技術のプリントスプーラにおいてトランスポートプロトコルとして使用された名前付きパイプは、静的エンドポイントを有する。本発明の実施形態例では、名前付きパイプを使用せず、代わりに図2のワークステーション11およびサーバ12など、異なる装置上で実行されるクライアントとサーバとの間で転送を行うtcp/ip転送プロトコルに依存する。本発明の現在好ましい実施形態ではTCP/IPが使用されるが、他の実施形態では、ハイパーテキスト転送プロトコル(http)など他の転送プロトコルを使用することができる。
従来技術のプリントスプーラにおいてトランスポートプロトコルとして使用された名前付きパイプは、静的エンドポイントを有する。本発明の実施形態例では、名前付きパイプを使用せず、代わりに図2のワークステーション11およびサーバ12など、異なる装置上で実行されるクライアントとサーバとの間で転送を行うtcp/ip転送プロトコルに依存する。本発明の現在好ましい実施形態ではTCP/IPが使用されるが、他の実施形態では、ハイパーテキスト転送プロトコル(http)など他の転送プロトコルを使用することができる。
tcp/ipの場合、例示のシステムでは、動的エンドポイントが使用される。サーバ側は、プロトコルシーケンスを登録し、次いで結合ベクトルを取得する。最後に、サーバはエンドポイントを登録する。
確実に所定のプロセスを特定のプロトコルシーケンスでのみ呼び出されるようにするため、例示のシステムでは、セキュリティコールバック関数(security callback function)を登録し、その関数で、どのプロトコルシーケンスで呼び出しが行われるかがチェックされる。
現在、Windows(登録商標)RPCは、SSPI(セキュリティサポートプロバイダインターフェイス)に基づくセキュリティモデルを提供しており、これは、高レベルのセキュリティを提供し、本発明の実施形態例によって使用される。
例示のシステムでは、サーバプリントスプーラでスレッドプールを作成する。受信する各非同期関数の呼び出しは、スプーラに、作業項目をスレッドプール202aに入れさせてすぐにクライアントに戻る。作業項目は、後に第2のスレッドプール202bによってスケジュールされて実行される。プリントスプーラは、作業項目をスレッドプールのキューに入れる。
非同期メソッドへのクライアント呼び出し
ローカルクライアントは、新しい非同期インターフェイスメソッドを呼び出し、それによって文書処理プログラムなどの非同期パブリックAPIをアプリケーションに公開する。また、スプーラクライアントは、新しい非同期メソッドを呼び出し、したがって一部の非同期メソッドAPIをアプリケーションプログラムに公開する。例えば、文書処理プログラムは、あるプリンタの状況をチェックするために、GetPrinterDataの非同期バージョンなど、非同期メソッドの例を呼び出すことができる。この関数は、ローカルの装置内のスプーラクライアントを経由してリモートサーバ装置内のスプーラを通る。サーバスプーラでは、本質的にスプーラワーカスレッドプール(spooler worker thread pool)202a内にサービス要求を追加して、すぐに文書処理プログラムにもどる。文書処理プログラムは次いで、他のタスクに取りかかることができ、後にプリンタデータが取り上げる準備がいつできるかが通知される。
ローカルクライアントは、新しい非同期インターフェイスメソッドを呼び出し、それによって文書処理プログラムなどの非同期パブリックAPIをアプリケーションに公開する。また、スプーラクライアントは、新しい非同期メソッドを呼び出し、したがって一部の非同期メソッドAPIをアプリケーションプログラムに公開する。例えば、文書処理プログラムは、あるプリンタの状況をチェックするために、GetPrinterDataの非同期バージョンなど、非同期メソッドの例を呼び出すことができる。この関数は、ローカルの装置内のスプーラクライアントを経由してリモートサーバ装置内のスプーラを通る。サーバスプーラでは、本質的にスプーラワーカスレッドプール(spooler worker thread pool)202a内にサービス要求を追加して、すぐに文書処理プログラムにもどる。文書処理プログラムは次いで、他のタスクに取りかかることができ、後にプリンタデータが取り上げる準備がいつできるかが通知される。
従来技術のプリンタ通知は複雑である。アプリケーションは、例えばジョブが終了したかどうかを判定するためにプリンタ状況変更を監視したい場合、関数Find First Printer Change Notification(本明細書ではFFPCN)を呼び出す。この関数は、スプーラを呼び出し、スプーラは、サーバとの通信チャネルを設定する。後に文書処理プログラムが監視する必要のあるイベントが生じると、サーバスプーラは、イベント変更通知をスプーラクライアントに送り返す。この通信チャネルの設定および維持は、サーバでの大量のリソースを消費し、サーバスプーラが効率よく多数のクライアントを同時に扱うことを防ぐ。
従来技術の設計では、サーバは、逆方向チャネルを介して変更データを連続的にクライアントに送信する。winspoolクライアントは、関数FFPCNへの次の呼び出しまで変更データをキャッシュに入れる。非同期RPCが使用される場合、変更データはデータを完了させる非同期呼び出しに包み込まれ、クライアントは、前の非同期RPC呼び出しが完了すると、より多くの通知データのために、別の非同期RPC呼び出しをプリンタに発行する。
図4は、従来技術版のFFPCN関数の概要を示している。
ステップ111:クライアントアプリケーション104は、関数RpcClientFindFirstPrinterChangeNotificationを呼び出す。
ステップ112:クライアントスプーラルータ105は、関数RouterFindFirstPrinterChangeNotificationを実行させてWin32プロバイダ106の関数RemoteFindFirstPrinterChangeNotificationを呼び出す。
ステップ113:Win32プロバイダはルータ関数CallRouterFindFirstPrinterChangeNotificationを呼び出す。
ステップ114:クライアントスプーラルータは、リモートスプーラ100上のRpcRemoteFindFirstPrinterChangeNotificationExを呼び出す。
ステップ115:リモートスプーラルータ107関数RemoteFindFirstPrinterChangeNotificationは、localsplプロバイダ108のLocalFindFirstPrinterChangeNotificationを呼び出す。
ステップ116:localsplは、ルータ関数SetupReplyNotificationを呼び出す。
ステップ117:ルータ関数SetupReplyNotificationは、クライアントスプーラ上のRpcReply0penPrinterを呼び出して逆方向チャネルを通知用に設定する。
ローカルスプーラ上で何かが変更されると、図4Aに概要を示すように、ローカルスプーラはクライアントに通知する。
ステップ121:localsplは、リモートスプーラルータ関数PartialReplyPrinterChangeNotificationを呼び出すSetPrinterChangeを呼び出す。
ステップ122:PartialReplyPrinterChangeNotificationは、変更を蓄積し、別のスレッドThreadNotifyProcessJobは、クライアントスプーラに対してRpcRouterReplyPrinterを呼び出す。
ステップ123:RpcRouterReplyPrinterのクライアントスプーラは、ルータ関数RouterReplyPrinter->ReplyPrinterChangeNotificationWorker-->ThreadNotifyを呼び出す。ReplyPrinterChangeNotificationWorkerは、SetEvent(pChange->hEvent)を呼び出してクライアントを起動させる。
ステップ124:クライアントアプリケーションは、RpcFindNextPrinterChangeNotificationを呼び出す。
ステップ125:クライアントへの通知データを書き込み、リッスン状態にリセットするルータ関数RouterFindNextPrinterChangeNotificationを呼び出す。
このように従来技術のプリントスプーラの概要をまとめることによって、関数FFPCNの従来技術の実装に関する問題を識別するのが容易となる。サーバ100は、任意のリッスン側クライアントのチャネルを設定する必要がある。これは、各チャネルがサーバプリントスプーラ100上で一定の量のカーネルメモリを消費することから拡張性の問題でということができる。サーバは、まずシステムを使用してクライアントに接続を試み、クライアントネットワークの資格情報の使用を試みる。Windows(登録商標) NT4では、システムはネットワーク上でのNULLの資格情報であり、Windows(登録商標) 2000以降では、domain\machine原則の資格情報(principle credential)である。クライアントネットワークの資格情報は、委任が可能でない限り、NULLの資格情報である。この逆方向チャネルを動作させるために、名前付きパイプを作成すると、すべての匿名ユーザに書き込み許可が与えられる。
図5に、本発明の実施形態例の非同期RPCの概要を示している。ステップは以下の通りである。
ステップ151:クライアントアプリケーション104’は151で関数RpcClientFindFirstPrinterChangeNotification()を呼び出す。
ステップ152:クライアントスプーラ内のルータ160は、イベントを作成し、呼び出しをWin32splプロバイダ161に発送する。
ステップ153:win32splプロバイダ161は、非同期RpcAsyncFindFirstPrinterChangeNotification()がリモートスプーラ100’を呼び出すようにする。
ステップ154:リモートスプーラのlocalspl162は、変更を監視する。
ステップ155:変更が削除されると、RpcAsyncCompleteCallが呼び出されてステップ153の非同期呼び出しを終了する。
ステップ156:win32splプロバイダでは、終了した呼び出しを受信すると、イベントを設定し、ステップ153からステップ155を繰り返す。
ステップ157:クライアントがRpcFindNextPrinterChangeNotification()を呼び出すと、ローカルスプーラは、キャッシュされた変更情報を送り返す。
プリンタ通知に非同期RPCを使用することによって、クライアントアプリケーションに変更データを送信するプロセスが大幅に簡略化される。文書処理プログラムは、新しい変更通知APIを呼び出すことができる。この呼び出しは非同期であり、このことは、アプリケーションにすぐに戻ることを意味する。文書処理が必要とするイベントが行われると、サーバプリントスプーラ100’は、その未処理の非同期メソッド呼び出しを終了する。スプーラクライアントは、完了した非同期通知から通知データを取得し、処理プログラムに送信し、サーバスプーラを同じ関数で再度呼び出してより多くの変更データを取得する。基本的に、非同期メソッドの終了段階において、変更通知データが運ばれ、非同期メソッドのループ呼び出しが行われてプリンタオブジェクトの変更が連続的に監視される。
ポートスレッドの拡張性の向上
サーバプリントスプーラ100において、完了ポートスレッド210は、完了ポートが第1のジョブを受信したときに関数CreatePortThreadで作成され、未処理のジョブがなくなると、DestroyPortThreadによって破棄される。これは、新しいジョブの印刷の用意ができると、SetEvent(plniPort->Semaphore)によって起動される。ポートスレッドはプリントプロセッサを呼び出し、プリントプロセッサは、GDIおよびプリンタドライバをロードして印刷ジョブを実行させる(render)(それらをプリンタ言語に変換する)。このステップは、CPUに負荷がかかる。
サーバプリントスプーラ100において、完了ポートスレッド210は、完了ポートが第1のジョブを受信したときに関数CreatePortThreadで作成され、未処理のジョブがなくなると、DestroyPortThreadによって破棄される。これは、新しいジョブの印刷の用意ができると、SetEvent(plniPort->Semaphore)によって起動される。ポートスレッドはプリントプロセッサを呼び出し、プリントプロセッサは、GDIおよびプリンタドライバをロードして印刷ジョブを実行させる(render)(それらをプリンタ言語に変換する)。このステップは、CPUに負荷がかかる。
サーバプリントスプーラ100’での印刷ジョブのシーケンスは次の通りである。
1.印刷ジョブを開始するには、StartDocPrincer --> localspl!LocalStartDocPrinter --> tcpmon!StartDocPortを呼び出す。
2.各ページを開始するには、StartPagePrinterを呼び出す。
3.データをページに書き込むには、Writeprinterを呼び出す。
4.各ページを終了するには、EndPagePrinter--> localspl!LocalWritePrinter---> tcpmon!WritePortを呼び出す。
必要なページだけ2、3、4を繰り返す。
印刷ジョブを終了するには、EndDocPrinter --> tcpmon!Writeportおよびtcpmon!EndDocPortを呼び出す。
1.印刷ジョブを開始するには、StartDocPrincer --> localspl!LocalStartDocPrinter --> tcpmon!StartDocPortを呼び出す。
2.各ページを開始するには、StartPagePrinterを呼び出す。
3.データをページに書き込むには、Writeprinterを呼び出す。
4.各ページを終了するには、EndPagePrinter--> localspl!LocalWritePrinter---> tcpmon!WritePortを呼び出す。
必要なページだけ2、3、4を繰り返す。
印刷ジョブを終了するには、EndDocPrinter --> tcpmon!Writeportおよびtcpmon!EndDocPortを呼び出す。
スレッドの低減――スレッドプールを使用して印刷ジョブをスケジュールする
プリントスプーラ100’は、新しいジョブを開始するスケジューラ204を実装する。スケジューラは、関数QueueUserWorkltemを呼び出して、ジョブ(作業項目)を第2のジョブスレッドプール206に入れる(図7参照)。
プリントスプーラ100’は、新しいジョブを開始するスケジューラ204を実装する。スケジューラは、関数QueueUserWorkltemを呼び出して、ジョブ(作業項目)を第2のジョブスレッドプール206に入れる(図7参照)。
tcpipモニタは、ジョブを処理するプリンタ13に接続される。Tcpmon!StartDocPortは、接続が失敗すると、特別なエラーを返す。StartDocPortが失敗すると、スケジューラ204は、作業項目を同じ処理にかけて、後に作業項目を再試行(ジョブを再起動)する。
別の接続を最適化する方法としては、未処理の別のジョブがある場合、プリントスプーラは、サーバとプリンタとの間の確立された接続を再利用するという方法をとることができる。
本発明の実施形態例によって対処すべき問題は、スレッドプール206内の長いプリンタジョブが終了するのに時間がかかり、事実上スレッドプール206内の他のプリンタジョブをブロックしてしまうことである。実行しているスレッドがこの問題に対処するのに時間がかかり過ぎる場合、スレッドプールの実施形態においては、追加のワーカスレッドが作成される。
I/Oブロックの回避
上述したように、スプーラは、準備完了状態のジョブごとに作業項目を作成する。サーバが1000台のプリンタに接続されている場合、最大1000個の作業項目があり、これは、かなり少ない数のスレッドに変換されて、ポートスレッドプール206内の作業項目として処理される。
上述したように、スプーラは、準備完了状態のジョブごとに作業項目を作成する。サーバが1000台のプリンタに接続されている場合、最大1000個の作業項目があり、これは、かなり少ない数のスレッドに変換されて、ポートスレッドプール206内の作業項目として処理される。
各作業項目に関して、スレッドプール206は、次のような端的な方法で実行される。
tcpipモニタの例では、tcpmon! WritePortごとに、スプーラは、重複するSendDatatoPrinter関数が終了するまでは返す。
ProcessJobData()は、CPUに負荷がかかる何らかの描画(rendaing)作業を意味する。ネットワークスループットを向上させるには、実施形態例では、IO完了ポート210を使用して、非同期IO通知を取得する。これによって、作業項目当たりの未解決の非同期IO呼び出し回数の閾値が得られる。その閾値に到達すると、スレッドは待ち状態になる。これを行うことによって、ポートプール206内のスレッド作業項目は、閾値に到達するまで如何なるブロックにもあわずに、ページを引き続き描画することができる。
例示のシステムでは、生データの転送にWindows(登録商標)ソケット関数TransmitFileが使用される。I/O完了ポートは、重複するTransmitFile呼び出しの通知を取得する。
I/O完了ポートスレッドインフラストラクチャの作成
I/O完了ポートスレッドは、すべての作業項目が重複する呼び出し状況を管理する。
I/O完了ポートスレッドは、すべての作業項目が重複する呼び出し状況を管理する。
localsplは、初期化時(または他のとき)にIOCompletionポートを作成する。また、AsyncIoNotifyThreadスレッドを開始する。実施形態例では、サーバのCPUごとに1つの並行するワーカスレッドを使用する。
I/O完了ポートスレッドは、次の機能を行う。1.非同期のWSASend/TransmitFilesから通知を受け付ける。2.WSASend/TransmitFileが成功または失敗すると、解放または再送信する。3.ポートごとに未解決の非同期IOを監視する。
サーバがスケジュールされたジョブの印刷を開始する用意ができると、localspl162(図5)は、tpcmon!StartDocPortを呼び出し、完了ポートに渡す。tcpipモニタ内で、ソケットが作成され、IO完了ポートに関連付けがなされる。tcpipモニタはソケットとをI/O完了ポートとの関連付けを行なう。
重複するTransmitFileを使用して生ジョブを送信する
実施形態例では、サーバ内のtcpipモニタプログラム、プリントプロセッサプログラム、およびlocalspl162プログラムの変更が含まれる。生データの従来技術の処理方法には、大きいオーバーヘッドがある。実施形態例では、重複するTransmitFileを呼び出して生ジョブを送信する。
実施形態例では、サーバ内のtcpipモニタプログラム、プリントプロセッサプログラム、およびlocalspl162プログラムの変更が含まれる。生データの従来技術の処理方法には、大きいオーバーヘッドがある。実施形態例では、重複するTransmitFileを呼び出して生ジョブを送信する。
これは、繰り返してファイルを読み取り、メモリに書き込み、データをプリンタに送信するといったオーバーヘッドを回避する。また、特にクライアント側の描画の際にスループットの向上が期待される。
追加のメソッド
TransmitRawJob(HANDLE hRawFile, LPWSA0VERLAPPED IpOverlapped)
が必要である。
TransmitRawJob(HANDLE hRawFile, LPWSA0VERLAPPED IpOverlapped)
が必要である。
重複するWSASendを使用して他のジョブを送信する
tcpipmon!WritePortでは、スケジューラ204は、ioごとのデータ(per-io data)でWSASendを呼び出す。
tcpipmon!WritePortでは、スケジューラ204は、ioごとのデータ(per-io data)でWSASendを呼び出す。
perloDataは、WSASendシーケンスのカウンタを含む。また、EndDocPort()が呼び出されると、WSASend呼び出し回数をスプーラ100’に返すことができる。スプーラは、その数を使用して、ジョブが完全に送信されたかどうかを追跡することができる。
1つのポートで1つのジョブが終了すると、スケジューラ204は、このポートにおいて次のジョブを発送する前に、未解決の(outstanding)重複するすべてのI/Oが成功裏に終了したことを確認する必要がある。そうでない場合、ジョブを再起動する必要がある。また、localspl!localwritePrinterで、tcpip!writeportを呼び出す前に、スケジューラ204は、未処理のジョブ数が決して閾値を超えないようにする必要がある。
さらにスケジューラは、非同期のI/Oに使用すべき空のメモリ、およびロックされたメモリのリストを保持する。
スケジューラは、WritePortExと呼ばれる追加メソッドを加える必要がある。localspl 162がioごとのデータ(例えばWSASendのシーケンス番号)を渡すことができるように、追加パラメータがLPWSAOVERLAPPED lpOverlappedを呼び出すようにした。
ポートスレッド206で、未解決の非同期のI/O要求の閾値に適した回数を見つけることは、調整可能なパラメータである。これは、多くの要因に依存する。閾値をかなり低く設定すると、スレッドプール206は、常にブロックされ、データが送信されるのを待つ可能性がある。閾値をかなり高く設定すると、描画プログラム(rendering code)は、まったくブロックされること無く実行し続けることはできるが、未処理のI/Oデータを保持するのにより多くのメモリが必要となり、未処理のI/O操作を追跡するためにより多くのnoonpagedプールが割当られる。この閾値の2〜8の値は、使用するように提案された数値であり、最適な結果は、LAN速度、データ生成速度、データ消費速度などによって異なる。
未処理のI/O要求が非常に多くなるのを回避するには、次のような疑似コードによる最適化と組み合わせることもできる。
この技術は、完全にI/O完了ポートを置き換えることはできない。というのは、I/Oデータ消費の場合はデータ生成に追いつかないため(そのために重複する複数のI/Oが必要)、I/Oに未処理のデータで満たされない空きがある。
本発明はある程度の特定性で説明してきたが、本発明は、特許請求の範囲の意図および範囲内に含まれる開示された設計のすべての変更および変形を含むものとする。
21 処理ユニット
22 システムメモリ
23 システムバス
32 ハードディスクドライブインターフェイス
33 磁気ディスクドライブインターフェイス
34 光ドライブインターフェイス
35 オペレーティングシステム
36 アプリケーションプログラム
37 他のプログラムモジュール
38 プログラムデータ
46 特殊ポートインターフェイス
48 ビデオアダプタ
49 リモートコンピュータ
51 ローカルエリアネットワーク
52 広域ネットワーク
53 ネットワークインターフェイス
54 モデム
100 サーバスプーラ
102 クライアントスプーラ
104 クライアントAPP
105 ルータ
107 ルータ
108 ローカルSP
100 サーバスプーラ
102 クライアントスプーラ
104 クライアントAPP
100’ サーバスプーラ
102’ クライアントスプーラ
104’ クライアントAPP
160 ルータ
162 ローカルSP
100’ スプーラ
204 ジョブスケジューラ
206 スレッドプール
210 I/O完了ポートモニタスレッド
22 システムメモリ
23 システムバス
32 ハードディスクドライブインターフェイス
33 磁気ディスクドライブインターフェイス
34 光ドライブインターフェイス
35 オペレーティングシステム
36 アプリケーションプログラム
37 他のプログラムモジュール
38 プログラムデータ
46 特殊ポートインターフェイス
48 ビデオアダプタ
49 リモートコンピュータ
51 ローカルエリアネットワーク
52 広域ネットワーク
53 ネットワークインターフェイス
54 モデム
100 サーバスプーラ
102 クライアントスプーラ
104 クライアントAPP
105 ルータ
107 ルータ
108 ローカルSP
100 サーバスプーラ
102 クライアントスプーラ
104 クライアントAPP
100’ サーバスプーラ
102’ クライアントスプーラ
104’ クライアントAPP
160 ルータ
162 ローカルSP
100’ スプーラ
204 ジョブスケジューラ
206 スレッドプール
210 I/O完了ポートモニタスレッド
Claims (28)
- a)印刷機能を有するアプリケーションプログラムを含む1つまたは複数のクライアントと、
b)前記1つまたは複数のクライアントによって前記サーバに伝達されるデータの印刷を調整するサーバプリントスプーラを実装するサーバと、
c)前記サーバプリントスプーラの指示により印刷する前記サーバに結合する1つまたは複数のプリンタとを備え、
d)クライアントの1つは、前記サーバプリントスプーラへの非同期リモートプロシージャ呼び出しによって前記1つまたは複数のプリンタのうちの少なくとも1つと通信する実行中のクライアントプリントスプーラを含むことを特徴とするプリンタによりデータを印刷するシステム。 - 前記サーバスプーラは、データを前記複数のプリンタに伝達することによって未処理のクライアントコンピュータの要求を処理するスレッドプールを保持するスレッドマネージャを含むことを特徴とする請求項1に記載のシステム。
- 前記サーバプリントスプーラは完了ポートを実装し、前記クライアントから受信する印刷要求が前記完了ポートに追加されることを特徴とする請求項1に記載のシステム。
- 前記サーバプリントスプーラは、処理を待機中の印刷要求のリストを保持し、前記印刷要求のリストは、前記サーバのプロセッサ時間を共有しているスレッドプールに追加されることを特徴とする請求項1に記載のシステム。
- 複数のスレッドプールが作成されて前記印刷要求を処理し、前記複数のスレッドプールの各々は単一のプロセッサスレッドによって処理されることを特徴とする請求項4に記載のシステム。
- 前記クライアントプリントスプーラは所定のプロシージャを非同期に実行し、前記プロシージャのうちの一部は同期で実行されることを特徴とする請求項1に記載のシステム。
- 前記クライアントは、印刷ジョブ全体が終了するまで、複数の非同期の要求でデータをサーバプリントスプーラに送信することを特徴とする請求項1に記載のシステム。
- スレッドプールに印刷要求を送信して処理を行うスケジューラをさらに含むことを特徴とする請求項1に記載のシステム。
- 前記スケジューラは、第1のプリント処理スレッドプールから印刷要求を選択し、第2のプリント処理スレッドプールに追加することを特徴とする請求項8に記載のシステム。
- 前記スケジューラは、重複して生データを前記スレッドプールに送信することを特徴とする請求項8に記載のシステム。
- 複数のプリンタによって複数のクライアントから発信されるデータを印刷する方法であって、
a)アプリケーションがクライアントと通信し、クライアントがプリントサーバと通信するためのプリントスプーラインターフェイスを提供するステップであって、前記1つまたは複数のアプリケーションは、前記プリントスプーラインターフェイスを用いて、前記1つまたは複数のアプリケーションから発信される非同期のリモートプロシージャ呼び出しにより前記プリントサーバ上のサービスルーチンを呼び出すことが可能になるステップと、
b)1つまたは複数のコンピュータアプリケーションによって前記サーバに送信された印刷要求間にプリントサーバランタイムを割当ることにより前記クライアントからの印刷サービスの要求に応答するスケジューラを前記プリントサーバコンピュータで実行するステップと
を備えたことを特徴とする方法。 - 前記スケジューラは、1つまたは複数のスレッドプールを実装して、前記複数のコンピュータアプリケーションからの印刷要求を処理することを特徴とする請求項11に記載の方法。
- 前記1つまたは複数のスレッドプールは完了ポートによって実行され、前記クライアントコンピュータから受信する印刷要求は完了ポートに追加されることを特徴とする請求項12に記載の方法。
- 前記プリントサーバは、処理を待機中の印刷要求のリストを保持し、前記印刷要求のリストは、前記プリントサーバコンピュータのプロセッサ時間を共有しているスレッドプールに追加されることを特徴とする請求項11に記載の方法。
- 複数のスレッドプールは前記印刷要求を処理するように作成され、各スレッドプールは単一のプロセッサスレッドによって処理されることを特徴とする請求項14に記載の方法。
- 前記クライアントプリントスプーラインターフェイスは所定のプロシージャを非同期に実行し、前記プロシージャのうちの一部は同期で実行されることを特徴とする請求項11に記載の方法。
- 前記クライアント要求は、複数の非同期リモートプロシージャ呼び出しで前記プリントサーバコンピュータに連続的に伝えられる複数の印刷要求により構成されている印刷ジョブであることを特徴とする請求項11に記載の方法。
- 前記印刷要求は、スケジューラによりスレッドプールに送信されて処理されることを特徴とする請求項11に記載の方法。
- 前記スケジューラは、第1のプリント処理スレッドプールから印刷要求を選択し、第2のプリント処理スレッドプールに前記印刷要求を追加することを特徴とする請求項18に記載の方法。
- クライアント/サーバコンピューティングシステムにおいて、
a)印刷要求をサーバプリントスプーラに伝達する通信チャネルにより非同期クライアント印刷要求を受信するステップと、
b)前記クライアント印刷要求を前記印刷要求のキューに入れるステップと、
c)スレッドプール内の前記印刷要求の処理の間で切り替えるプロセッサスレッドによって処理される前記印刷要求のサブセットを前記スレッドプールに入れることによって、選択されたプリント位置で前記印刷要求のサブセットからプリント出力をスケジュールするステップと
を備えたことを特徴とするサーバプリントスプーラを実行する方法。 - 複数のプリンタで複数のクライアントから発信されたデータを印刷するプリントスプーラを実行するコンピュータ読取可能な媒体であって、
a)コンピュータアプリケーションがサーバと通信するためのプリントスプーラインターフェイスを提供するステップであって、前記1つまたは複数のアプリケーションは、前記プリントスプーラインターフェイスを用いて、前記アプリケーションから発信される非同期のリモートプロシージャ呼び出しによりプリントサーバ上のサービスルーチンを呼び出すことが可能になるステップと、
b)前記クライアントからの印刷サービスの要求に応答するスケジューラを前記プリントサーバで実行して、複数のコンピュータアプリケーションによって前記サーバに送信された印刷要求間にサーバランタイムを割当るようにするステップと
を実行する命令を備えたことを特徴とするコンピュータ読取可能な媒体。 - 前記スレッドプールは完了ポートによって実行され、クライアントから受信する印刷要求は前記完了ポートに追加されることを特徴とする請求項21に記載のコンピュータ読取可能な媒体。
- 前記プリントサーバは、処理を待機中の印刷要求のリストを保持し、前記印刷要求のリストは、前記サーバのプロセッサ時間を共有しているスレッドプールに追加されることを特徴とする請求項21に記載のコンピュータ読取可能な媒体。
- 複数のスレッドプールが作成されて前記印刷要求を処理し、前記複数のスレッドプールの各々は単一のプロセッサスレッドによって処理されることを特徴とする請求項23に記載のコンピュータ読取可能な媒体。
- 前記プリントスプーラインターフェイスは所定のプロシージャを非同期に実行し、前記プロシージャのうちの一部は同期で実行されることを特徴とする請求項21に記載のコンピュータ読取可能な媒体。
- 複数の非同期リモートプロシージャ呼び出しで前記プリントサーバに連続的に伝達される複数の印刷要求は、印刷ジョブを構成することを特徴とする請求項21に記載のコンピュータ読取可能な媒体。
- 前記印刷要求は、スケジューラによりスレッドプールに送信されて処理されることを特徴とする請求項21に記載のコンピュータ読取可能な媒体。
- 前記スケジューラは、第1のプリント処理スレッドプールから印刷要求を選択し、第2のプリント処理スレッドプールに前記要求を追加することを特徴とする請求項27に記載のコンピュータ読取可能な媒体。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/779,430 US20050179936A1 (en) | 2004-02-13 | 2004-02-13 | Scalable print spooler |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005276175A true JP2005276175A (ja) | 2005-10-06 |
Family
ID=34701424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005032051A Pending JP2005276175A (ja) | 2004-02-13 | 2005-02-08 | 拡張性のあるプリントスプーラ |
Country Status (5)
Country | Link |
---|---|
US (1) | US20050179936A1 (ja) |
EP (1) | EP1564635A3 (ja) |
JP (1) | JP2005276175A (ja) |
KR (1) | KR20060041928A (ja) |
CN (1) | CN1658145A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011210144A (ja) * | 2010-03-30 | 2011-10-20 | Fujitsu Ltd | 情報処理装置、通信制御方法及び通信制御プログラム |
JP2019102064A (ja) * | 2017-11-30 | 2019-06-24 | バイドゥ オンライン ネットワーク テクノロジー (ベイジン) カンパニー リミテッド | スマート装置のタスク処理方法および装置 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7529823B2 (en) * | 2003-03-27 | 2009-05-05 | Microsoft Corporation | Notifications for shared resources |
US7962917B2 (en) * | 2005-03-10 | 2011-06-14 | Microsoft Corporation | System data interfaces, related architectures, print system data interfaces and related print system architectures |
JP4716165B2 (ja) * | 2005-03-15 | 2011-07-06 | セイコーエプソン株式会社 | 共有プリントサーバ制御プログラム及び共有プリントサーバ制御方法 |
KR100764621B1 (ko) * | 2005-10-21 | 2007-10-08 | 엔에이치엔(주) | 데이터 풀링 방법 및 데이터 풀링 시스템 |
CN101719902B (zh) * | 2009-12-04 | 2014-07-30 | 深圳创维数字技术股份有限公司 | 一种远程过程调用方法和*** |
JP5890648B2 (ja) * | 2011-10-21 | 2016-03-22 | キヤノンイメージングシステムズ株式会社 | 情報処理装置、その制御方法、およびデバイス制御システム |
US11658862B2 (en) * | 2012-11-14 | 2023-05-23 | Accuzip, Inc. | Hardware server and technical method to optimize bulk printing of physical items |
CN104615388B (zh) * | 2013-11-01 | 2017-12-22 | 精工爱普生株式会社 | 打印控制*** |
IN2014DE02931A (ja) | 2013-11-01 | 2015-06-26 | Seiko Epson Corp | |
US9171236B1 (en) | 2014-05-09 | 2015-10-27 | Xerox Corporation | Dynamic spooler load balancing |
US10242074B2 (en) * | 2016-02-03 | 2019-03-26 | Facebook, Inc. | Search-results interfaces for content-item-specific modules on online social networks |
CN107678867A (zh) * | 2017-09-26 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 一种进行远程过程调用的方法及装置 |
JP6975009B2 (ja) * | 2017-10-10 | 2021-12-01 | キヤノン株式会社 | 画像処理装置及びその制御方法、並びにプログラム |
CN109783142B (zh) * | 2018-12-21 | 2021-02-12 | 福建新大陆支付技术有限公司 | 一种基于pos机的多线程同步方法及pos机 |
CN112000480B (zh) * | 2020-08-25 | 2023-12-05 | 深圳忆联信息***有限公司 | 提升ssd全盘扫描效率的方法、装置、设备及介质 |
WO2022051735A1 (en) * | 2020-09-04 | 2022-03-10 | Hewlett-Packard Development Company, L.P. | Print pool ports |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05290003A (ja) * | 1992-04-13 | 1993-11-05 | Matsushita Electric Ind Co Ltd | 非同期型遠隔手続き呼び出し装置 |
JPH06309259A (ja) * | 1993-04-20 | 1994-11-04 | Hitachi Ltd | クライアント/サーバシステムにおける通信方法 |
JPH0895874A (ja) * | 1994-09-20 | 1996-04-12 | Hitachi Ltd | リモートプロシジャコール処理方法 |
JPH09265409A (ja) * | 1996-03-08 | 1997-10-07 | Internatl Business Mach Corp <Ibm> | 高性能ユーザ・レベル・ネットワーク・プロトコル・サーバ・システムのための動的実行ユニット管理 |
JPH11249919A (ja) * | 1998-03-05 | 1999-09-17 | Mitsubishi Electric Corp | 手続き呼出しの処理方法およびスタブ生成方法 |
JP2001503893A (ja) * | 1996-11-08 | 2001-03-21 | アメリカ、オンライン、インコーポレーテッド | オンラインサービスのコミュニティを外部のサービスと統合するシステム |
JP2002505471A (ja) * | 1998-02-26 | 2002-02-19 | サンマイクロシステムズ インコーポレーテッド | 遠隔処理の中断および継続の方法と装置 |
JP2002108585A (ja) * | 2000-08-02 | 2002-04-12 | Xerox Corp | プリンタ構成データと状態データを更新する方法及び装置 |
JP2003131836A (ja) * | 2001-10-24 | 2003-05-09 | Brother Ind Ltd | スプールファイル加工装置、プログラム及び記録媒体 |
JP2003518286A (ja) * | 1999-12-20 | 2003-06-03 | ユニシス コーポレーション | キューイングされた作業アイテムを実施するための再利用可能スレッドのプールを提供するためのシステムおよび方法 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5220674A (en) * | 1987-07-17 | 1993-06-15 | Digital Equipment Corporation | Local area print server for requesting and storing required resource data and forwarding printer status message to selected destination |
US5692111A (en) * | 1994-10-05 | 1997-11-25 | Microsoft Corporation | Automatic installation of printers in a distributed environment |
JPH09146725A (ja) * | 1995-11-20 | 1997-06-06 | Hitachi Ltd | 印刷システム |
US5931909A (en) * | 1996-04-19 | 1999-08-03 | Sun Microsystems, Inc. | System for multiple-client software installation and upgrade |
US5919247A (en) * | 1996-07-24 | 1999-07-06 | Marimba, Inc. | Method for the distribution of code and data updates |
US5960167A (en) * | 1997-03-24 | 1999-09-28 | Xerox Corporation | Printer configuration system |
US6125372A (en) * | 1997-10-03 | 2000-09-26 | Hewlett-Packard Company | Server system and method of updating server software |
US5974454A (en) * | 1997-11-14 | 1999-10-26 | Microsoft Corporation | Method and system for installing and updating program module components |
US6301012B1 (en) * | 1998-04-24 | 2001-10-09 | Hewlett-Packard Company | Automatic configuration of a network printer |
US6219151B1 (en) * | 1998-08-24 | 2001-04-17 | Hitachi Koki Imaging Solutions, Inc. | Network printing system |
US6694354B1 (en) * | 1998-11-30 | 2004-02-17 | Telefonaktiebolaget Lm Ericsson (Publ) | Host computer access to peripheral device drivers |
US6424424B1 (en) * | 1999-01-19 | 2002-07-23 | Hewlett-Packard Company | Method and apparatus for automatic installation of shared printers over a network |
JP4124937B2 (ja) * | 1999-02-25 | 2008-07-23 | キヤノン株式会社 | プリントサーバ装置、クライアントとしての情報処理装置、これら装置の印刷管理方法および記憶媒体 |
US6874034B1 (en) * | 2000-08-17 | 2005-03-29 | Hewlett-Packard Development Company, L.P. | Intelligent peer hybrid printing protocol |
US6829769B2 (en) * | 2000-10-04 | 2004-12-07 | Microsoft Corporation | High performance interprocess communication |
JP2003076514A (ja) * | 2001-09-05 | 2003-03-14 | Ricoh Co Ltd | プリンタシステム、プリンタ、およびプリンタドライバ |
US6983462B2 (en) * | 2002-03-15 | 2006-01-03 | Toshiba Corporation | Method and apparatus for serving a request queue |
JP4125044B2 (ja) * | 2002-05-31 | 2008-07-23 | キヤノン株式会社 | 情報処理装置、情報処理装置の制御方法、プログラム、及び記憶媒体 |
US20040015408A1 (en) * | 2002-07-18 | 2004-01-22 | Rauen Philip Joseph | Corporate content management and delivery system |
-
2004
- 2004-02-13 US US10/779,430 patent/US20050179936A1/en not_active Abandoned
-
2005
- 2005-02-08 JP JP2005032051A patent/JP2005276175A/ja active Pending
- 2005-02-09 EP EP05100880A patent/EP1564635A3/en not_active Withdrawn
- 2005-02-14 KR KR1020050012026A patent/KR20060041928A/ko not_active Application Discontinuation
- 2005-02-16 CN CN2005100094921A patent/CN1658145A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05290003A (ja) * | 1992-04-13 | 1993-11-05 | Matsushita Electric Ind Co Ltd | 非同期型遠隔手続き呼び出し装置 |
JPH06309259A (ja) * | 1993-04-20 | 1994-11-04 | Hitachi Ltd | クライアント/サーバシステムにおける通信方法 |
JPH0895874A (ja) * | 1994-09-20 | 1996-04-12 | Hitachi Ltd | リモートプロシジャコール処理方法 |
JPH09265409A (ja) * | 1996-03-08 | 1997-10-07 | Internatl Business Mach Corp <Ibm> | 高性能ユーザ・レベル・ネットワーク・プロトコル・サーバ・システムのための動的実行ユニット管理 |
JP2001503893A (ja) * | 1996-11-08 | 2001-03-21 | アメリカ、オンライン、インコーポレーテッド | オンラインサービスのコミュニティを外部のサービスと統合するシステム |
JP2002505471A (ja) * | 1998-02-26 | 2002-02-19 | サンマイクロシステムズ インコーポレーテッド | 遠隔処理の中断および継続の方法と装置 |
JPH11249919A (ja) * | 1998-03-05 | 1999-09-17 | Mitsubishi Electric Corp | 手続き呼出しの処理方法およびスタブ生成方法 |
JP2003518286A (ja) * | 1999-12-20 | 2003-06-03 | ユニシス コーポレーション | キューイングされた作業アイテムを実施するための再利用可能スレッドのプールを提供するためのシステムおよび方法 |
JP2002108585A (ja) * | 2000-08-02 | 2002-04-12 | Xerox Corp | プリンタ構成データと状態データを更新する方法及び装置 |
JP2003131836A (ja) * | 2001-10-24 | 2003-05-09 | Brother Ind Ltd | スプールファイル加工装置、プログラム及び記録媒体 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011210144A (ja) * | 2010-03-30 | 2011-10-20 | Fujitsu Ltd | 情報処理装置、通信制御方法及び通信制御プログラム |
JP2019102064A (ja) * | 2017-11-30 | 2019-06-24 | バイドゥ オンライン ネットワーク テクノロジー (ベイジン) カンパニー リミテッド | スマート装置のタスク処理方法および装置 |
US11188380B2 (en) | 2017-11-30 | 2021-11-30 | Baidu Online Network Technology (Beijing) Co., Ltd. | Method and apparatus for processing task in smart device |
JP7112919B2 (ja) | 2017-11-30 | 2022-08-04 | バイドゥ オンライン ネットワーク テクノロジー(ペキン) カンパニー リミテッド | スマート装置のタスク処理方法および装置 |
Also Published As
Publication number | Publication date |
---|---|
EP1564635A3 (en) | 2007-05-30 |
KR20060041928A (ko) | 2006-05-12 |
CN1658145A (zh) | 2005-08-24 |
EP1564635A2 (en) | 2005-08-17 |
US20050179936A1 (en) | 2005-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005276175A (ja) | 拡張性のあるプリントスプーラ | |
US8713186B2 (en) | Server-side connection resource pooling | |
US7231638B2 (en) | Memory sharing in a distributed data processing system using modified address space to create extended address space for copying data | |
JP3853592B2 (ja) | 分散ウェブアプリケーションサーバ | |
KR100612059B1 (ko) | 분할 처리 환경에서의 자원 조절을 위한 방법, 컴퓨팅 시스템 및 그에 관한 기록 매체 | |
US6237024B1 (en) | Method and apparatus for the suspension and continuation of remote processes | |
JP4569846B2 (ja) | I/oノード制御方式及び方法 | |
JP5516398B2 (ja) | マルチプロセッサシステム、マルチプロセッサシステムのos間デバイス共有方法 | |
JP2004535615A (ja) | 区分処理環境における共有i/o | |
JP2004310745A (ja) | 共有リソースのための通知方法 | |
KR20010041297A (ko) | 원격 프로세스의 중단과 연속 방법 및 장치 | |
US9860307B2 (en) | System and method for virtual desktop infrastructure user level virtual channel | |
US7844782B2 (en) | Data processing system with memory access | |
US8442939B2 (en) | File sharing method, computer system, and job scheduler | |
JP2008544371A (ja) | ロック関連の一貫性欠如を処理する方法 | |
Soumagne et al. | Advancing RPC for Data Services at Exascale. | |
JP4642927B2 (ja) | 画像処理装置、画像処理装置の制御方法、および記憶媒体 | |
JP4522476B2 (ja) | 画像処理装置、画像処理装置の制御方法、および記憶媒体 | |
JP2000259591A (ja) | 分散処理ジョブ実行方法およびネットワークシステム | |
JPH11259258A (ja) | 分散処理式プリンタサーバシステム | |
JP5288272B2 (ja) | I/oノード制御方式及び方法 | |
CN113467932A (zh) | 一种负载均衡方法、***及存储介质 | |
CN115242786A (zh) | 基于容器集群的多模式大数据作业调度***及方法 | |
JP2005070896A (ja) | ネットワークシステム、分散処理方法およびプログラム | |
Margaris | Local Area Multicomputer (LAM-MPI) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080208 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100528 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100604 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20101112 |