以下に添付図面を参照して、この発明にかかるスプール処理方法、画像形成装置および情報処理装置の好適な実施の形態を詳細に説明する。
(実施の形態1)
実施の形態1は、本発明の画像形成装置を、複合機に適用したものである。なお、本発明の画像形成装置を複合機の他、プリンタ装置、複写機、ファクシミリ装置にも適用することができる。
図1は、実施の形態1の複合機の主要構成およびネットワーク構成を示すブロック図である。図1に示すように、本実施の形態では、複合機100と、PC(personal Computer)190とがEthernet(R)などのネットワーク180で接続されている。
PC190は通常のコンピュータであり、本発明におけるクライアント端末を構成する。すなわち、本実施の形態の複合機100は、PC190をクライアントとしたサーバとして動作するようになっている。
本実施の形態の複合機100は、アプリケーション層にスプールアプリ110と、プリンタアプリ−A120aとプリンタアプリ−B120bを主に搭載している。また、各アプリケーションに対して共通の処理を行うコントロールサービス層には、ネットワークコントロールサービス(NCS)130を主に搭載している。
この他、複合機100には、汎用OS(Operating System)であるUNIX(登録商標)などのOS140、ハードウェア資源としてハードディスク装置(HDD)150、RAM(Ramdom Accsess Memory)160、Ethernet(R)ケーブルを接続するネットワークカード170が設けられている。
スプールアプリ110は、従来の複合機100においてNCS139の印刷プロトコル処理部内部に設けられていたスプール機能を実行するスプール処理部を通信プロトコルに共通の処理部としてアプリケーション層で実現したものである。このスプールアプリ110は、スプール書き込み処理部111とスプール読み出し処理部112とスプール転送I/F部115とメモリ転送I/F部114とHDD−I/F部113と、を主に備えている。ここで、スプール読み出し処理部112は本発明におけるスプール読み出し手段を構成する。
スプール書き込み処理部111は、PC190から印刷要求があった場合に、印刷ジョブを生成して、印刷対象の印刷データを印刷プロトコル処理部131〜13Nから共有メモリ161を介してHDD150に格納するものである。
ここで、印刷ジョブとは、印刷に関してOSに対して実行させる処理の単位をいい、一つの印刷ジョブは、ジョブ情報ファイルとジョブデータファイルをHDD150に保存することによって登録される。
ジョブ情報ファイルは、印刷ジョブに関する情報を記録したデータファイルであり、具体的には印刷要求を行ったPC190の識別名称であるホスト名およびIPアドレス、印刷要求を行ったユーザ名、ジョブ名、印刷対象のドキュメント名、トレイ指定などの印刷設定などから構成される。ジョブデータファイルは、印刷要求の対象となる印刷データのファイルである。このジョブデータファイルは、単一の印刷ジョブに対して単一のジョブデータファイルとする他、単一の印刷ジョブに対して複数のジョブデータファイルを含めるように構成することができる。なお、本実施の形態では、単一の印刷ジョブに対して単一のジョブデータファイルを含めている。
スプール読み出し部112は、印刷ジョブの実行時に、HDD150に格納されている印刷ジョブに対応する印刷データを読み出して、共有メモリを介してプリンタアプリ−A120a、プリンタアプリ−B120bに受け渡すものである。
スプール転送I/F部115は、スプール処理の際のデータの転送を制御するものである。メモリ転送I/F部114は、RAM160等のメモリ、あるいはRAM160に確保された共有メモリ領域161へのアクセスを制御するものである。HDD−I/F部113は、HDD150に対するアクセスを制御するものである。
本実施の形態では、記憶手段のインタフェースとしてメモリ転送I/F部114とHDD−I/F部113しかないが、例えばSDカードのような他の記憶手段が搭載された場合には、SDカードに対するアクセスを制御するSDカードI/F部を設ける。このようにハードウェアに固有の処理を行う部分がアプリケーション層のスプールアプリ110に設けられているため、HDD150などの記憶手段の変更、あるいは新たなハードウェアの追加などによりインタフェースに変更がある場合には、アプリケーション層のスプールアプリ110を変更すれば、NCS130の印刷プロトコル処理部131〜13Nのそれぞれに修正を加える必要がなくなり、プログラム開発の効率化を図ることができる。
NCS130は、ネットワークI/Oを必要とするアプリケーションに対して共通に利用できるサービスを提供するものであり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーションに振り分けたり、アプリケーションからデータをネットワーク側に送信する際の仲介を行う。
NCS130は、複数の印刷プロトコル処理部131〜13Nと、機器管理部132と、機器管理プロトコル処理部134と、ネットワーク管理部133と、アプリ管理部135と、ネットワークI/F部137を主に備えた構成となっている。ここで、印刷プロトコル処理部131〜13Nは本発明におけるプロトコル処理手段を構成する。
複数の印刷プロトコル処理部131〜13Nの各々は、各種通信プロトコルに従った処理を行うものであり、各プロトコルに対応して存在する。具体的には、印刷プロトコル処理部131〜13Nは、ネットワークI/F部137を介してネットワーク上180のPC(Personal Computer)190等からデータを受信し、論理セッションの確立および開放を行うとともに、確立されたセッション上で送信されてくるデータを、通信プロトコルに従って解釈する。そして、データの解釈後、データからアプリケーション固有のデータ部分を抽出して、該当するアプリケーションにデータを受け渡す。このような通信プロトコルには、FTP(File Transfer Protocol)、HTTP(Hypertext Transfer Protocol)、NPR(Network Printer)、IIP(Internet Printing Protocol:インターネット印刷プロトコル)、Netware(登録商標)などのプロトコルがあり、各プロトコルに対応して印刷プロトコル処理部131〜13Nが設けられている。
機器管理プロトコル処理部134は、ネットワーク管理のプロトコルに従った処理を行うものであり、このようなプロトコルとしては例えばSNMP(Simple Network Management Protocol)等がある。機器管理部132は、機器管理プロトコル処理部134を利用して複合機のネットワーク管理を行うものである。
ネットワーク管理部133は、TCP/IPなどのプロトコルに従ってネットワークに関する処理を行うものである。
アプリ管理部135は、アプリケーション層で動作するプリンタアプリ−A120a,プリンタアプリ−B120b等のアプリケーションを管理するものであり、各アプリケーションの識別データであるアプリIDを管理する。
メモリ転送I/F部139は、RAM等のメモリ、あるいは共有メモリへのアクセスを制御するものである。ネットワークI/F部137は、ネットワークカード170に対するアクセスを制御するものである。
RAM160には、共有メモリ領域(以下、「共有メモリ」という)が確保されている。この共有メモリは、スプールアプリ110によって確保され、スプールアプリ110の他、プリンタアプリ−A120aと、NCS130の印刷プロトコル処理部131〜13Nから参照可能なものとなっている。
次に、本実施の形態にかかる複合機100の全体の機能的構成について説明する。図2は、実施の形態1の複合機100の全体構成を示すブロック図である。図2に示すように、複合機100は、白黒レーザプリンタ(B&W LP)201と、カラーレーザプリンタ(Color LP)202と、スキャナ、ファクシミリ、メモリなどのハードウェアリソース204を有するとともに、プラットホーム220と、アプリケーション230とから構成されるソフトウェア群210とを備えている。
プラットホーム220は、アプリケーションからの処理要求を解釈してハードウェア資源の獲得要求を発生させるコントロールサービスと、一または複数のハードウェア資源の管理を行い、コントロールサービスからの獲得要求を調停するシステムリソースマネージャ(SRM)223と、汎用OS140とを有する。
コントロールサービスは、複数のサービスモジュールから形成され、SCS(システムコントロールサービス)222と、ECS(エンジンコントロールサービス)224と、MCS(メモリコントロールサービス)225と、OCS(オペレーションパネルコントロールサービス)226と、FCS(ファックスコントロールサービス)227と、NCS(ネットワークコントロールサービス)130とから構成される。このプラットホーム220は、あらかじめ定義された関数により前記アプリケーション230から処理要求を受信可能とするアプリケーションプログラムインタフェース(API)を有する。
汎用OS140は、前述のとおり、UNIX(登録商標)などの汎用オペレーティングシステムであり、プラットホーム220並びにアプリケーション230の各ソフトウェアをそれぞれプロセスとして並列実行する。
SRM223のプロセスは、SCS222とともにシステムの制御およびリソースの管理を行うものである。SRM223のプロセスは、スキャナ部やプリンタ部などのエンジン、メモリ、HDDファイル、ホストI/O(セントロI/F、ネットワークI/F)、IEEE1394 I/F、RS232C I/Fなど)のハードウェア資源を利用する上位層からの要求にしたがって調停を行い、実行制御する。
具体的には、このSRM223は、要求されたハードウェア資源が利用可能であるか(他の要求により利用されていないかどうか)を判断し、利用可能であれば要求されたハードウェア資源が利用可能である旨を上位層に伝える。また、SRM223は、上位層からの要求に対してハードウェア資源の利用スケジューリングを行い、要求内容(例えば、プリンタエンジンにより紙搬送と作像動作、メモリ確保、ファイル生成など)を直接実施している。
SCS222のプロセスは、アプリ管理、操作部制御、システム画面表示、LED表示、リソース管理、割り込みアプリ制御などを行う。
ECS224のプロセスは、白黒レーザプリンタ(B&W LP)201、カラーレーザプリンタ(Color LP)202、HDD150、スキャナ、ファクシミリなどからなるハードウェアリソース204のエンジンの制御を行う。
MCS225のプロセスは、画像メモリの取得および解放、ハードディスク装置(HDD)の利用、画像データの圧縮および伸張などを行う。
FCS227のプロセスは、システムコントローラの各アプリ層からPSTN/ISDN網を利用したファクシミリ送受信、BKM(バックアップSRAM)で管理されている各種ファクシミリデータの登録/引用、ファクシミリ読みとり、ファクシミリ受信印刷、融合送受信を行うためのAPIを提供する。
OCS226のプロセスは、オペレータ(ユーザ)と本体制御間の情報伝達手段となるオペレーションパネル(操作パネル)の制御を行う。OCS226は、オペレーションパネルからキー押下(またはタッチ操作)をキーイベントとして取得し、取得したキーに対応したキーイベント関数をSCS222に送信するOCSプロセスである。また、オペレーションパネルの操作表示部に対する各種画面を描画出力やその他オペレーションパネルに対する制御は、OCS関数ライブラリに登録されている描画関数等の各種関数をアプリケーション130またはコントロールサービスから呼び出すことにより行われる。
アプリケーション230は、ページ記述言語(PDL)、PCLおよびポストスクリプト(PS)を有するプリンタ用のアプリケーションであるプリンタアプリ−A120a、プリンタアプリ−B120bと、コピー用アプリケーションであるコピーアプリ212と、ファクシミリ用アプリケーションであるファックスアプリ213と、スキャナ用アプリケーションであるスキャナアプリ214と、ネットワークファイル用アプリケーションであるネットファイルアプリ215と、工程検査用アプリケーションである工程検査アプリ216と、上述したスプールアプリ110とを有している。
アプリケーション230の各プロセス、コントロールサービスの各プロセスは、関数呼び出しとその戻り値送信およびメッセージの送受信によってプロセス間通信を行いながら、コピー、プリンタ、スキャナ、ファクシミリなどの画像形成処理にかかるユーザサービスを実現している。
このように、実施の形態1にかかる複合機100には、複数のアプリケーション130および複数のコントロールサービスが存在し、いずれもプロセスとして動作している。そして、これらの各プロセス内部には、一または複数のスレッドが生成されて、スレッド単位の並列実行が行われる。そして、コントロールサービスがアプリケーション230に対し共通サービスを提供しており、このため、これらの多数のプロセスが並列動作、およびスレッドの並列動作を行って互いにプロセス間通信を行って協調動作をしながら、コピー、プリンタ、スキャナ、ファクシミリなどの画像形成処理にかかるユーザサービスを提供するようになっている。
また、複合機100には、複合機100の顧客、サードベンダなどの第三者がコントロールサービス層の上のアプリケーション層に外部アプリを開発して搭載することが可能となっている。
次に、以上のように構成された本実施の形態の複合機100によるスプール処理について説明する。図3は、本実施の形態の複合機100によるスプール処理における印刷ジョブの登録時のデータの流れを示す説明図である。
この印刷ジョブの登録処理は次のように行われる。PC190からネットワーク180経由で複合機100に対して印刷要求があると、図3に示すように、その印刷対象の印刷データをNCS130の印刷プロトコル処理部131〜13Nが受信する(ステップS301)。
そして、通信プロトコルに対応したNCS130の印刷プロトコル処理部131〜13Nによって論理セッションの確立を行い、確立されたセッション上で送信されてくるデータを、通信プロトコルに従って解釈する。そして、データからアプリケーション固有のデータ部分を印刷データとして抽出して、印刷データをスプール書き込み処理部111に受け渡す。具体的には、印刷プロトコル処理部131〜13Nが印刷データを共有メモリ161の書き込み領域に書き込み(ステップS302)、印刷プロトコル処理部131〜13Nが共有メモリへの書き込み通知をスプール書き込み処理部111に通知する(ステップS303)。
共有メモリへの書き込み通知を受信したスプール書き込み処理部111は、OSのファイルシステムが提供するWriteシステムコールを発行することによって共有メモリ161の書き込み領域の印刷データをHDD150に格納する(ステップS304)。これによって印刷ジョブの登録が行われる。この後、スプール書き込み処理部111はスプール読み出し処理部112にHDDへの書き込み通知を通知する(ステップS305)。
このように、印刷プロトコル処理部131〜13Nとスプール書き込み処理部111との間の印刷データの受け渡しは共有メモリ161を介して行われるようになっている。
次に、かかる印刷ジョブの登録の詳細な処理について説明する。図4は、印刷ジョブの登録時のNCS130の印刷プロトコル処理部131〜13Nが行う処理の手順を示すフローチャートである。
印刷プロトコル処理部131〜13Nは、PC190と接続待ち状態にあり(ステップS401)、接続要求があった場合には(ステップS401:Yes)、接続処理を行う(ステップS402)。具体的には、印刷プロトコル処理部131〜13Nは、PC190とのセッションを確立し、スプールアプリ110のスプール書き込み処理部111に接続要求を送信し、コネクションIDをスプール書き込み処理部111から受信する。
次いで、印刷プロトコル処理部131〜13Nは、ジョブ開始処理を行う(ステップS403)。具体的には、印刷プロトコル処理部131〜13Nは、スプールアプリ110のスプール書き込み処理部111にコネクションIDと転送方式を指定してジョブ開始要求を送信し、その結果スプール書き込み処理部111からジョブIDを受信する。また、スプール書き込み処理部111にジョブIDとジョブ情報を指定してジョブ情報設定を行ったり、ジョブ転送開始要求を行う。
次に、PC190からの受信すべきデータがあるか否かを判断し(ステップS404)、受信すべきデータがある場合には、共有メモリ161に空き領域が存在するか否かを調べる(ステップS405)。そして、空き領域が存在しない場合には(ステップS405:No)、空き領域ができるまで待ち状態となる。
一方、共有メモリ161に空き領域がある場合には(ステップS405:Yes)、PC190からのデータを受信して(ステップS406)、受信データを共有メモリ161の書き込み領域に書き込む(ステップS407)。かかるステップS404からS407までの処理を、受信データのEOF(End Of File)を検出するまで繰り返し行う(ステップS408)。
共有メモリ161への受信データの書き込みが完了したら、印刷プロトコル処理部131〜13Nはデータ書き込み完了処理を行う(ステップS409)。具体的には、印刷プロトコル処理部131〜13Nは全データ書き込み完了通知をジョブIDとともにスプール書き込み処理部111に通知する。
次に、印刷ジョブ登録時のスプールアプリ110のスプール書き込み処理部111の行う処理について説明する。図5は、印刷ジョブ登録時のスプールアプリ110のスプール書き込み処理部111の行う処理の手順のフローチャートである。
スプール書き込み処理部111は、NCS130と接続待ち状態にあり(ステップS501)、NCS130の印刷プロトコル処理部131〜13Nから接続要求があった場合には(ステップS501:Yes)、接続処理を行う(ステップS502)。具体的には、スプール書き込み処理部111は、スプール読み出し処理部112に接続要求を送信し、コネクションIDをスプール読み出し処理部112から受信する。
次いで、スプール書き込み処理部111は、ジョブ開始処理を行う(ステップS503)。具体的には、スプール書き込み処理部111は、スプール読み出し処理部112にコネクションIDを指定してジョブ開始要求を送信し、その結果スプール読み出し処理部112からジョブIDを受信する。また、スプール読み出し処理部112にジョブ転送開始要求も行う。
次に、スプール書き込み処理部111は、HDD150上でジョブデータファイルのオープン処理を行う(ステップS505)。このオープン処理は具体的にはOSのファイルシステムで提供されるOpenシステムコールを発行することによって行う。そして、共有メモリ161に受信データが存在するか否かを調べる(ステップS505)。そして、受信データが存在する場合には(ステップS505:Yes)、HDD150に空き領域があるか否かを調べる(ステップS506)。
そして、HDD150に空き領域がない場合には(ステップS506:No)、空き領域ができるまで待ち状態となる。一方、HDD150に空き領域がある場合には、OSのファイルシステムが提供するWriteシステムコールを発行して共有メモリ161にあるデータをHDD150にジョブデータファイルとして書き込む(ステップS507)。
そして、ステップS505からS507までの処理を、共有メモリにあるデータのEOF(End Of File)を検出するまで繰り返し行う(ステップS508)。
HDD150へのジョブデータファイルの書き込みが完了したら、スプール書き込み処理部111は、OSのファイルシステムで提供されるCloseシステムコールを発行することによってジョブデータファイルのクローズ処理を行い(ステップS509)、データ書き込み完了処理を行う(ステップS510)。具体的には、スプール書き込み処理部111はデータ書き込み完了通知をジョブIDとともにスプール読み出し処理部112に通知する。
NCS130の印刷プロトコル処理部131〜13Nおよびスプールアプリ110による印刷ジョブの登録処理について説明したが、次に、印刷ジョブ登録処理時の各部の命令およびデータの流れについて説明する。図6、7は、スプール処理における命令の流れを示すフロー図であり、図6は印刷ジョブ登録処理のフロー図、図7は印刷ジョブのジョブデータ書き込み処理のフロー図である。
PC190は、印刷要求を行う際に、複合機100に対して接続要求を行う(ステップS601)。複合機100のNCS130がかかる接続要求を受信してスプールアプリ110のスプール書き込み処理部111に接続要求を行い(ステップS602)、スプール書き込み処理部111はスプール読み出し処理部112に、スプール読み出し処理部112はプリンタアプリ−A120aに順次接続要求を行う(ステップS603、S604)。
接続要求を受けたプリンタアプリ−A120aは、コネクションIDをスプール読み出し処理部112に送信し(ステップS605)、スプール読み出し処理部112、スプール書き込み処理部111、NCS130の印刷プロトコル処理部131〜13Nに順次送信され(ステップS606、S607)、印刷プロトコル処理部131〜13NからPC190に接続OKの旨のメッセージが送信され(ステップS608)、これによってPC190と複合機100との接続が確立される。
次いで、PC190はジョブ開始要求を複合機100に送信する(ステップS609)。複合機100では、ジョブ開始要求をNCS130の印刷プロトコル処理部131〜13Nが受信して、ジョブ開始要求はコネクションIDと転送方式とともに印刷プロトコル処理部131〜13Nからスプール書き込み処理部111、スプール読み出し処理部112、プリンタアプリA−120aへ順次送信される(ステップS610、S611、S612)。プリンタアプリA−120aでは、ジョブIDを決定し、決定したジョブIDをスプール読み出し処理部112に送信し(ステップS613)、スプール読み出し処理部112、スプール書き込み処理部111、NCS130の印刷プロトコル処理部131〜13Nに順次送信される(ステップS614、S615)。
次に、印刷プロトコル処理部131〜13Nは、スプール書き込み処理部111に対してジョブIDとジョブ情報ファイルを指定してジョブ情報設定要求を送信する(ステップS616)。ここで、ジョブ情報は、PC190の識別名称であるホスト名およびアドレス、PC190において印刷要求を行ったユーザ名、ジョブ名、印刷対象のドキュメント名、トレイ指定などの印刷設定などから構成されるデータである。
ジョブ情報設定要求を受信したスプール書き込み処理部111は、ジョブ情報ファイルをHDD150に書き込む(ステップS617)。そして、スプール書き込み処理部111は、印刷プロトコル処理部131〜13Nに通知タイミング設定を行う(ステップS618)。
一方、スプール読み出し処理部112は、HDD150からジョブ情報ファイルを読み出して(ステップS619)、プリンタアプリA−120aに対してジョブ設定要求を送信する(ステップS620)。
プリンタアプリA−120aでは、ジョブ情報ファイルの内容に従ってジョブ情報設定を行って、スプール読み出し処理部112に通知タイミング設定を行う(ステップS621)。
NCS130の印刷プロトコル処理部131〜13Nでは、ステップS618によって通知タイミング設定が行われると、印刷データの転送を開始するがこの際に、ジョブデータ転送開始の通知をスプール書き込み処理部111に対して行う(ステップS623)。このジョブデータ転送開始通知は、スプール書き込み処理部111からスプール読み出し処理部112へ、スプール読み出し処理部112からプリンタアプリA−120aへ順次送信される(ステップS623、S624)。
プリンタアプリ−A120aでは、ジョブデータ転送開始通知を受信し、印刷データの受信の受け入れる状態となってる場合には、OKの旨の通知をスプール読み出し処理部112に送信する(ステップS625)。このOKの旨の通知は、スプール読み出し処理部112からスプール書き込み処理部111へ、スプール書き込み処理部111から印刷プロトコル処理部131〜13Nへ順次送信される(ステップS626、S627)。そして、さらに印刷プロトコル処理部131〜13NからPC190にOKの旨の通知が送信される(ステップS628)。
スプール書き込み処理部111では、ジョブデータ転送開始がOKの旨の通知を受信すると、HDD150にジョブデータファイルを生成するため、ジョブデータオープン命令(OSのOpenシステムコール)を発行する(ステップS701)。
そして、NCS130の印刷プロトコル処理部131〜13NはPC190から印刷対象の印刷データを受信し(ステップS702)、受信した印刷データに対して対応するプロトコル処理を行って共有メモリ161に書き込み領域に印刷データを書き込む(ステップS703)。印刷プロトコル処理部131〜13Nは共有メモリへの書き込みが終了したら、共有メモリデータ書き込み通知をスプール書き込み処理部111に通知する(ステップS704)。
共有メモリデータ書き込み通知を受信したスプール書き込み処理部111は、OSのWriteシステムコールを発行して共有メモリ161の印刷データををジョブデータファイルとしてHDD150に保存する(ステップS705)。そして、スプール書き込み処理部111は、印刷プロトコル処理部131〜13Nに共有メモリへのデータ読み出し通知を送信する(ステップS706)。このようなステップS702からステップS706までの処理をPC190からのデータ送信があるたびに繰り返し行う。
PC190は印刷対象のすべての印刷データの送信が完了すると、データ送信完了通知を複合機100に送信する(ステップS707)。複合機100では、印刷プロトコル処理部131〜13Nによってかかる通知を受信し、全データ書き込み完了通知をスプール書き込み処理部111に送信する(ステップS708)。スプール書き込み処理部111は、全データ書き込み完了通知を受信すると、HDD150のジョブデータファイルに対しファイルクローズ命令(OSのCloseシステムコール)を発行し(ステップS709)、さらにスプール読み出し処理部112に対してジョブデータファイル書き込み完了通知を送信する(ステップS710)。スプール読み出し処理部112は、このジョブデータファイル書き込み完了通知を受信して当該通知をプリンタアプリ−A120aに送信する(ステップS711)。これにより、プリンタアプリ−A120aが印刷ジョブを実行する場合には、HDD150からの印刷データの読み出しが可能となったことがわかるようになってる。これにより、印刷ジョブが登録されることになり、一つの印刷ジョブに対して1つの印刷データがHDD150に生成されることになる。
次に、以上のように登録された印刷ジョブの読み出し処理について説明する。図8は、本実施の形態の複合機100によるスプール処理における印刷ジョブの読み出し時のデータの流れを示す説明図である。この印刷ジョブの実行処理は次のように行われる。
スプール書き込み処理部111からスプール読み出し処理部112にジョブデータ書き込み完了通知が行われると(ステップS801)、スプール読み出し部112は、HDD150に格納されている該当するジョブIDのジョブデータファイル(印刷データ)を、OSが提供するWriteシステムコールを発行することにより、共有メモリ161の読み出し領域に格納する(ステップS802)。その後、スプール読み出し部112は共有メモリデータ書き込み通知をプリンタアプリ−A120aに送信する(ステップS803)。共有メモリデータ書き込み通知を受信したプリンタアプリ−A120aは、OSが提供するReadシステムコールを発行することにより、共有メモリの読み出し領域から印刷データを読み出して(ステップS804)、印刷処理を行う。
このように、スプール読み出し処理部112とプリンタアプリ−A120aとの間の印刷データの受け渡しはシステムコールの発行によって共有メモリ161を介して行われるようになっており、このためハードウェアの変更の影響を直接受けないアプリケーション間でのデータの受け渡しが可能となる。
次に、かかる印刷ジョブの読み出しの詳細な処理について説明する。図9は、スプール読み出し処理部112による印刷ジョブの読み出し処理の手順を示すフローチャートである。
スプール読み出し処理部112は、スプール書き込み処理部111と接続待ち状態にあり(ステップS901)、スプール書き込み処理部111から接続要求があった場合には(ステップS901:Yes)、接続処理を行う(ステップS902)。具体的には、スプール読み出し処理部112は、印刷プロトコル処理部による受信データの解釈によって処理を行うアプリケーションのアプリID(本実施の形態ではプリンタアプリ−A120aのアプリID)を指定してアプリケーション(プリンタアプリ−A120a)に接続要求を送信し、コネクションIDをスプール読み出し処理部112から受信する。
次いで、スプール読み出し処理部112は、ジョブ開始処理を行う(ステップS903)。具体的には、スプール読み出し処理部112は、アプリケーションにコネクションIDと転送方式を指定してジョブ開始要求を送信し、その結果アプリケーションからジョブIDを受信する。また、スプール読み出し処理部112はHDD150からジョブ情報ファイルの読み出し処理、アプリケーションに対するジョブ情報設定も行う。
次に、スプール読み出し処理部112は、ジョブデータファイルの書き込み完了通知待ちの状態となり(ステップS904)、ジョブデータファイルの書き込み完了通知を受信すると(ステップS904:Yes)、HDD150のジョブデータファイルのオープン処理を行う(ステップS905)。このオープン処理は具体的にはOSのファイルシステムで提供されるOpenシステムコールを発行することによって行う。そして、共有メモリ161に空き領域があるかを調べる(ステップS906)。
そして、共有メモリ161に空き領域がない場合には(ステップS906:Yes)、空き領域ができるまで待ち状態となる。一方、共有メモリ161に空き領域がある場合には、HDD150からジョブデータファイルの内容を読み出し(ステップS907)、読み出したジョブデータファイルの内容を共有メモリ161の読み出し領域に書き込む(ステップS908)。
そして、ステップS906からS908までの処理を、ジョブデータファイルのEOF(End Of File)が検出されるまで繰り返し行う(ステップS909)。
共有メモリ161へのジョブデータファイルの書き込みが完了したら、スプール読み出し処理部112は、OSのファイルシステムで提供されるCloseシステムコールを発行することによってジョブデータファイルのクローズ処理を行い(ステップS910)、データ書き込み完了処理を行う(ステップS911)。具体的には、スプール読み出し処理部112は、アプリケーションにデータ書き込み通知を通知する。
図10は、上述した印刷ジョブのジョブデータ読み出し処理におけるデータ、命令の流れを示すデータフロー図である。
スプール読み出し処理部112は、スプール書き込み処理部111からジョブデータファイル書き込み完了通知を受信すると、HDD150のジョブデータファイル(印刷データ)のオープン命令(OSのOpenシステムコール)を発行する(ステップS1001)。次に、スプール読み出し処理部112は、HDD150からオープンしたジョブデータファイルの読み出しを行い(ステップS1002)、読み出したデータを共有メモリ161の読み出し領域に書き込む(ステップS1003)。
次に、スプール読み出し処理部112は、プリンタアプリ−A120aに対して共有メモリデータ書き込み通知を送信する(ステップS1004)。共有メモリデータ書き込み通知を受信したプリンタアプリ−A120aは共有メモリ161の読み出し領域から印刷データを読み出す(ステップS1005)。ここで、かかる読み出しは、共有メモリの管理テーブルに登録されている先頭アドレスの位置から管理テーブルに登録されたサイズ分のデータを読み出すことによって行われる。そして、プリンタアプリ−A120aは、共有メモリデータ読み出し通知をスプール読み出し処理部112に送信する(ステップS1006)。
そして、ジョブデータファイルの全てのレコードの読み出しが完了するまで、ステップS1002からステップS1006までの処理を繰り返し行う。
ジョブデータファイルの全てのレコードの読み出しが完了したら、スプール読み出し処理部112は、ジョブデータファイルのクローズ命令(OSのCloseシステムコール)を発行する(ステップS1007)。そして、プリンタアプリA−120aは、共有メモリのデータを全て読み出したら、全データ読み出し完了通知をその処理結果と共にスプール読み出し処理部112を送信する(ステップS1008)。全データ読み出し完了通知を受信したスプール読み出し処理部112は、ファイル読み出し完了通知をスプール書き込み処理部111に送信し(ステップS1009)、ファイル読み出し完了通知を受信したスプール書き込み処理部111は、全データ読み出し完了通知を印刷プロトコル処理部131〜13Nに送信する(ステップS1010)。これにより、プリンタアプリA−120aによる印刷データの読み出し処理が完了し、プリンタアプリA−120aによる印刷処理が実行される。
図11は、印刷ジョブの終了処理における命令の流れを示すフロー図である。PC190が複合機100に対してジョブ終了要求を送信すると、NCS130の印刷プロトコル処理部131〜13Nでかかるジョブ終了要求を受信する(ステップS1101)。そして、ジョブ終了要求は、印刷プロトコル処理部131〜13Nからスプール書き込み処理部111、スプール書き込み処理部111からスプール読み出し処理部112、スプール読み出し処理部112からプリンタアプリA−120aへ順次送信される(ステップS1102,S1103.S1104)。
プリンタアプリ−A120aでは、ジョブ終了処理を行った後、ジョブ終了結果をスプール読み出し処理部112に送信し(ステップS1105)、さらにジョブ終了結果はスプール読み出し処理部112からスプール書き込み処理部111へ、スプール書き込み処理部111から印刷プロトコル処理部131〜13Nへ、印刷プロトコル処理部131〜13NからPC190へ順次送信される(ステップS1106、S1107、S1108)。
次いで、PC190は切断要求を複合機100に対して行う(ステップS1109)。一方、プリンタアプリ−A120aはスプール読み出し処理部112に対しコネクションIDを指定して切断要求を行う(ステップS1110)。この切断要求は、さらにスプール読み出し処理部112からスプール書き込み処理部111へ、スプール書き込み処理部111から印刷プロトコル処理部131〜13Nに順次送信される(ステップS1111、S1112)。
印刷プロトコル処理部131〜13Nでは、PC190およびスプール書き込み処理部111から切断要求を受信すると、切断処理を行い、その切断結果をPC190に送信し(ステップS1113)、さらにスプール書き込み処理部111に送信する(ステップS1114)。
そして、スプール書き込み処理部111は、受信した切断結果を、スプール読み出し処理部112へ、スプール読み出し処理部112からプリンタアプリA−120aへ順次送信する(ステップS1115、S1116)。
プリンタアプリ−A120aは、印刷処理が終了後、印刷完了通知をスプール読み出し処理部112へ送信し、印刷完了通知を受信したスプール読み出し処理部112は、HDD150からジョブデータファイルを削除する。これにより、ジョブが終了することになる。
このように実施の形態1の複合機100では、このように実施の形態1の複合機100では、印刷データを、印刷プロトコル処理部131〜13Nとは機能的に独立させたスプール読み出し部112によって、HDD150から読み出しているので、ハードウェアに影響のないスプール処理に変更があった場合でもハードウェアに影響のないアプリケーション層のスプールアプリ110の修正を行えば、ハードウェアに影響を及ぼすコントロールサービス層の印刷プロトコル処理部131〜13Nをプロトコルごとに修正する必要がなくなる。また、例えばSDカードなどの新たなハードウェア資源の追加に伴うハードウェアインタフェースの変更があった場合でも、コントロール層の印刷プロトコル処理部131〜13Nを変更すれば、アプリケーション層のスプールアプリ110のプログラム変更は必要がない。このためハードウェア等の変更の影響を受けない部分であるスプールアプリ110をアプリケーション層に、ハードウェア等の変更の影響を受ける部分である印刷プロトコル処理部131〜13Nをコントロール層に分離した構成としたことにより効率的なプログラム開発を行うことができる。
また、本実施の形態によれば、スプールアプリ110は印刷プロトコル処理部131〜13Nとは異なる機能的に独立した手段であるため、アプリケーション間のデータの受け渡しをOSが提供するシステムコールの発行によって共有メモリを介して行うことができ、ハードウェアの変更の影響を直接受けないアプリケーション間で印刷データを受け渡すことが可能となる。
本実施の形態では、印刷データをプリンタアプリ−A120aに受け渡しているが、この他、プリンタアプリ−B120bあるいはその他のアプリケーションに受け渡す構成とすることができる。
(実施の形態2)
実施の形態1の複合機100は、単一の印刷データに対して一つの印刷ジョブを割り当ててスプール処理を行っていたが、この実施の形態2の複合機は、複数の印刷データに対して単一の印刷ジョブを割り当ててスプール処理を行うものである。
実施の形態2の複合機100の機能的構成は、図1および図2で説明した実施の形態1の複合機と同様である。
ただし、本実施の形態の複合機100では、スプールアプリ110は設定パラメータを有しており、この設定パラメータの設定内容に従って複数の印刷データに対して単一の印刷ジョブを割り当てるか否か、分割のサイズを決定する点が実施の形態1の複合機と異なっている。
次に、本実施の形態の複合機100によるスプール処理について説明する。図12は、本実施の形態の複合機100によるスプール処理における印刷ジョブの登録時のデータの流れを示す説明図である。
この印刷ジョブの登録処理は次のように行われる。PC190からネットワーク180経由で複合機100に対して印刷要求があると、図12に示すように、その印刷対象の印刷データをNCS130が受信する(ステップS1201)。
そして、印刷プロトコルに対応したNCS130の印刷プロトコル処理部131〜13Nによって論理セッションの確立を行い、確立されたセッション上で送信されてくるデータを、通信プロトコルに従って解釈する。そして、データからアプリケーション固有のデータ部分を印刷データとして抽出して、印刷データをスプールアプリ110に受け渡す。具体的には、印刷プロトコル処理部131〜13Nが印刷データを共有メモリ161の書き込み領域に書き込み(ステップS1202、印刷プロトコル処理部131〜13Nが共有メモリへの書き込み通知をスプール書き込み処理部111に通知する(ステップS1203)。
共有メモリへの書き込み通知を受信したスプール書き込み処理部111は、設定パラメータテーブル1201を参照して(ステップS1204)、該当するアプリケーションについて印刷データをどのように扱うかを判断する。そして、OSのファイルシステムで提供されるWriteシステムコールを発行して共有メモリ161の書き込み領域にある印刷データをHDD150に書き込む(ステップS1205)。このとき、参照した設定パラメータテーブルの内容に従って、複数の印刷データを一つの印刷ジョブで扱う場合には、共有メモリ161の印刷データを設定パラメータテーブル901で設定されたサイズに分割し、HDD150に格納することによって印刷ジョブの登録が行われる。この後、スプール書き込み処理部111はスプール読み出し処理部112にHDDへの書き込み通知を通知する(ステップS1206)。
このように、印刷プロトコル処理部131〜13Nとスプール書き込み処理部111との間の印刷データの受け渡しは共有メモリ161を介して行われるようになっている。
ここで、設定パラメータテーブル1210について説明する。図14は、設定パラメータテーブル1210の内容の一例を示す説明図である。図14に示すように、設定パラメータテーブル1210は、アプリケーション毎に、スプール領域、ファイル分割、分割単位、最大スプール数が定められている。
スプール領域は、印刷データを格納するHDD150内のディレクトリであり、ファイル分割は、一つの印刷ジョブに対して印刷データを分割するか否かを規定し、分割単位は分割された印刷データのサイズを規定し、最大スプール数は登録可能な印刷ジョブの数の最大値を規定したものである。
次に、かかる印刷ジョブの登録の詳細な処理について説明する。図13は、印刷ジョブ登録時のスプールアプリ110のスプール書き込み処理部111の行う処理の手順のフローチャートである。なお、NCS130の印刷プロトコル処理部131〜13Nの処理については実施の形態1と同様であるので説明を省略する。
スプール書き込み処理部111は、NCS130と接続待ち状態にあり(ステップS1301)、NCS130の印刷プロトコル処理部131〜13Nから接続要求があった場合には(ステップS1301:Yes)、接続処理を行う(ステップS1302)。具体的には、スプール書き込み処理部111は、スプール読み出し処理部112に接続要求を送信し、コネクションIDをスプール読み出し処理部112から受信する。
次いで、スプール書き込み処理部111は、ジョブ開始処理を行う(ステップS1303)。具体的には、スプール書き込み処理部111は、スプール読み出し処理部112にコネクションIDを指定してジョブ開始要求を送信し、その結果スプール読み出し処理部112からジョブIDを受信する。また、スプール読み出し処理部112にジョブ転送開始要求も行う。
次に、スプール書き込み処理部111は、設定パラメータテーブル1210を読み出して(ステップS1304)、該当するアプリケーションについて印刷データを印刷ジョブにおける扱いを判断する。そして、HDD150上でジョブデータファイル#Nのオープン処理を行う(ステップS1305)。このオープン処理は具体的にはOSのファイルシステムで提供されるOpenシステムコールを発行することによって行う。その後、共有メモリ161に受信データが存在するか否かを調べる(ステップS1306)。受信データが存在する場合には(ステップS1306:Yes)、HDD150に空き領域があるか否かを調べる(ステップS1307)。
そして、HDD150に空き領域がない場合には(ステップS1307:No)、空き領域ができるまで待ち状態となる。一方、HDD150に空き領域がある場合には、Writeシステムコールを発行して共有メモリ161にあるデータをHDD150にジョブデータファイル#Nとして書き込む(ステップS1308)。
そして、ジョブデータファイル#Nのデータサイズが設定パラメータテーブル1210の該当アプリケーション(本実施の形態ではプリンタアプリ−A)の分割サイズに達したか否かを判断する(ステップS1309)。
そして、ジョブデータファイル#Nのデータサイズが設定パラメータテーブル1210に設定されている分割サイズに達していない場合には(ステップS1309:No)、ステップS1306からS1308までの処理を繰り返し行って(ステップS1309)、ジョブデータファイル#Nのデータサイズが分割サイズに達するまでジョブデータファイル#Nにデータを書き込む。
HDD150へのジョブデータファイル#Nの書き込みが完了したら、スプール書き込み処理部111は、OSのファイルシステムで提供されるCloseシステムコールを発行することによってジョブデータファイル#Nのクローズ処理を行い(ステップS1310)、ジョブデータファイル#N書き込み完了処理を行う(ステップS1311)。具体的には、スプール書き込み処理部111はジョブデータファイル#N書き込み完了通知をジョブIDとともにスプール読み出し処理部112に通知する。
スプールアプリ110による印刷ジョブの登録処理について説明したが、次に、印刷ジョブ登録処理時の各部の命令およびデータの流れについて説明する。図15は、印刷ジョブのジョブデータ書き込み処理のフロー図である。なお、印刷ジョブの登録時の処理は実施の形態1と同様であるので説明を省略する。
スプール書き込み処理部111では、実施の形態1と同様に、ジョブデータ転送開始がOKの旨の通知を受信すると、設定パラメータテーブル1210を読み出し(ステップS1501)、該当するアプリケーション、この例ではプリンタアプリ−A120aに対する設定パラメータを読み込む。そして、設定パラメータテーブル1501のファイル分割が「する」に設定されている場合には、以下に説明する処理を行う。一方、ファイル分割が「しない」に設定されている場合には、実施の形態1で説明した印刷ジョブの書き込み処理と同様の処理を行う。
この例では、アプリケーションがプリンタアプリ−A120aの場合を説明しており、設定パラメータファイルでは、ファイル分割が「する」、分割単位が「100KB」、最大スプール数が「64」に設定されている。
このため、スプール書き込み処理部111は、PC190から印刷データを受信するごとに、一つの印刷データが100KBのサイズとなった時点で一つのジョブデータファイルを生成することによって、複数の印刷データを一つの印刷ジョブに含める。なお、PC190から受信した印刷データが分割サイズ以上のサイズの場合には、受信した印刷データを100KBのサイズごとに分割するように構成してもよい。
次に、スプール書き込み処理部111は、ジョブデータファイル#Nのオープン命令(OSのOpenシステムコール)を発行する(ステップS1502)。なお、図15中では、ジョブデータファイル#Nとなっている。Nは1以上の整数であり、ジョブデータファイル#Nは、ジョブデータファイルである印刷データを設定パラメータテーブル901に設定されている分割サイズで分割した個々のジョブデータファイルを示すものである。
そして、NCS130の印刷プロトコル処理部131〜13NはPC190から印刷対象の印刷データを受信し(ステップS1503)、受信した印刷データに対して対応するプロトコル処理を行って共有メモリ161に書き込み領域に印刷データを書き込む(ステップS1504)。印刷プロトコル処理部131〜13Nは共有メモリ161への書き込みが終了したら、共有メモリデータ書き込み通知をスプール書き込み処理部111に通知する(ステップS1505)。
共有メモリデータ書き込み通知を受信したスプール書き込み処理部111は、OSのファイルシステムが提供するWriteシステムコールを発行することによって、共有メモリ161に格納されている印刷データをジョブデータファイル#NとしてHDD150に格納する(ステップS1506)。そして、スプール書き込み処理部111は、印刷プロトコル処理部131〜13Nに共有メモリ161へのデータ読み出し通知を送信する(ステップS1507)。このようなステップS1503〜ステップS1507までの処理を、ジョブデータファイル#Nのサイズが設定パラメータテーブル1210の分割サイズ分になるまで、繰り返し行う。
次に、スプール書き込み処理部111は、ジョブデータファイル#Nのクローズ命令(OSのCloseシステムコール)を発行し(ステップS1508)、分割されたジョブデータファイル#NがHDD150に生成されることになる。このため、スプール書き込み処理部111は、ジョブデータファイル#N書き込み完了通知をジョブIDとともにスプール読み出し処理部112に送信する(ステップS1509)。
スプール読み出し処理部112とプリンタアプリ−A120aでは、通知のあったジョブデータファイル#Nの読み出し処理を行い(ステップS1510)、読み出しが完了したら、ジョブデータファイル#N読み出し完了通知をジョブIDとともにスプール書き込み処理部111に送信する(ステップS1511)。なお、スプール読み出し処理部112とプリンタアプリ−A120aでは、通知のあったジョブデータファイル#Nの読み出し処理については後述する。
上記ステップS1502からS1511までの処理を、PC190からデータ送信が完了するまで繰り返す。繰り返す場合には、#Nの値を1だけ増加して行う。これにより、複数のジョブデータファイル#NがHDD150に生成される。
PC190は印刷対象のすべての印刷データの送信が完了すると、データ送信完了通知を複合機100に送信する(ステップS1512)。複合機100では、印刷プロトコル処理部131〜13Nによってかかる通知を受信し、全データ書き込み完了通知をスプール書き込み処理部111に送信する(ステップS1513)。スプール書き込み処理部111は、全データ書き込み完了通知を受信すると、スプール読み出し処理部112に対して全ジョブデータファイル書き込み完了通知を送信する(ステップS1514)。
次に、以上のように登録された印刷ジョブの読み出し処理について説明する。図16は、本実施の形態の複合機100によるスプール処理における印刷ジョブの読み出し時のデータの流れを示す説明図である。この印刷ジョブの実行処理は次のように行われる。
スプール書き込み処理部111からスプール読み出し処理部112に分割されたジョブデータファイル#N書き込み完了通知が行われると(ステップS1601)、スプール読み出し部112は、HDD150に格納されている該当するジョブIDのジョブデータファイル#N(図16では#1の例を示す)を、OSが提供するWriteシステムコールを発行することにより、共有メモリ161の読み出し領域に格納する(ステップS1602)。その後、スプール読み出し部112は共有メモリデータ書き込み通知をプリンタアプリ−A120aに送信する(ステップS1603)。共有メモリデータ書き込み通知を受信したプリンタアプリ−A120aは、OSが提供するReadシステムコールを発行することにより、共有メモリの読み出し領域から印刷データを読み出して(ステップS1604)、印刷処理を行う。
このように、スプール読み出し処理部112とプリンタアプリ−A120aとの間の印刷データの受け渡しは共有メモリ161を介して行われるようになっており、このためハードウェアの変更の影響を直接受けないアプリケーション間でのデータの受け渡しが可能となる。
次に、かかる印刷ジョブの読み出しの詳細な処理について説明する。図17は、スプール読み出し処理部112による印刷ジョブの読み出し処理の手順を示すフローチャートである。
スプール読み出し処理部112は、スプール書き込み処理部111と接続待ち状態にあり(ステップS1701)、スプール書き込み処理部111から接続要求があった場合には(ステップS1701:Yes)、接続処理を行う(ステップS1702)。具体的には、スプール読み出し処理部112は、印刷プロトコル処理部による受信データの解釈によって処理を行うアプリケーションのアプリID(本実施の形態ではプリンタアプリ−A120aのアプリID)を指定してアプリケーション(プリンタアプリ−A120a)に接続要求を送信し、コネクションIDをスプール読み出し処理部112から受信する。
次いで、スプール読み出し処理部112は、ジョブ開始処理を行う(ステップS1703)。具体的には、スプール読み出し処理部112は、アプリケーションにコネクションIDと転送方式を指定してジョブ開始要求を送信し、その結果アプリケーションからジョブIDを受信する。また、スプール読み出し処理部112はHDD150からジョブ情報ファイルの読み出し処理、アプリケーションに対するジョブ情報設定も行う。
次に、スプール読み出し処理部112は、ジョブデータファイル#Nの書き込み完了通知待ちの状態となり(ステップS1704)、ジョブデータファイル#Nの書き込み完了通知を受信すると(ステップS1704:Yes)、HDD150のジョブデータファイル#Nのオープン処理を行う(ステップS1705)このオープン処理は具体的にはOSのファイルシステムで提供されるOpenシステムコールを発行することによって行う。そして、共有メモリ161に空き領域があるかを調べる(ステップS1706)。
そして、共有メモリ161に空き領域がない場合には(ステップS1706:Yes)、空き領域ができるまで待ち状態となる。一方、共有メモリ161に空き領域がある場合には、HDD150からジョブデータファイルの内容を読み出し(ステップS1707)、読み出したジョブデータファイル#Nの内容を共有メモリ161の読み出し領域に書き込む(ステップS1708)。
そして、ステップS1706からS1708までの処理を、ジョブデータファイルのEOF(End Of File)が検出されるまで繰り返し行う(ステップS1709)。
共有メモリ161へのジョブデータファイルの書き込みが完了したら、スプール読み出し処理部112は、OSのファイルシステムで提供されるCloseシステムコールを発行することによってジョブデータファイルのクローズ処理を行い(ステップS1710)、データ書き込み完了処理を行う(ステップS1711)。具体的には、スプール読み出し処理部112は、アプリケーションにデータ書き込み通知を通知する。
そして、このようなステップS1704からS1711までの処理を、HDD150に保存されている全てのジョブデータファイル#Nの内容を読み出すまで繰り返し行う(ステップS1712)。全てのジョブデータファイル#Nの内容を読み出したら、全ジョブデータファイル読み出し完了処理を行う(ステップS1713)。具体的には、スプール読み出し処理部112は、全ファイル読み出し完了通知をスプール書き込み処理部111に通知する。
図18は、上述した印刷ジョブのジョブデータ読み出し処理におけるデータ、命令の流れを示すデータフロー図である。
スプール読み出し処理部112は、スプール書き込み処理部111からジョブデータファイル#N書き込み完了通知を受信すると(ステップS1801)、HDD150のジョブデータファイル#N(印刷データ)のオープン命令(OSのOpenシステムコール)を発行する(ステップS1802)。次に、スプール読み出し処理部112は、HDD150からオープンしたジョブデータファイルの読み出しを行い(ステップS1803)、読み出したデータを共有メモリ161の読み出し領域に書き込む(ステップS1804)。
次に、スプール読み出し処理部112は、プリンタアプリ−A120aに対して共有メモリデータ書き込み通知を送信する(ステップS1805)。共有メモリデータ書き込み通知を受信したプリンタアプリ−A120aは共有メモリ161の読み出し領域から印刷データを読み出す(ステップS1806)。ここで、かかる読み出しは、共有メモリの管理テーブルに登録されている先頭アドレスの位置から管理テーブルに登録されたサイズ分のデータを読み出すことによって行われる。そして、プリンタアプリ−A120aは、共有メモリデータ読み出し通知をスプール読み出し処理部112に送信する(ステップS1807)。
そして、ジョブデータファイル#Nの全てのレコードの読み出しが完了するまで、ステップS1803からステップS1807までの処理を繰り返し行う。
プリンタアプリA−120aはジョブデータファイル#Nの全てのレコードの読み出しが完了したら、スプール読み出し処理部112に対してジョブデータファイル#N読み出し完了通知を送信する(ステップS1808)。スプール読み出し処理部112は、ジョブデータファイル#N読み出し完了通知を受信すると、ジョブデータファイル#Nのクローズ命令(OSのCloseシステムコール)を発行する(ステップS1309)。これによって、分割されたジョブデータファイル#Nの読み出し処理が完了する。そして、分割されたすべてのジョブデータファイル#Nについて、上記ステップS1801からS1809までの処理を繰り返す。
すべてのジョブデータファイル#Nについての読み出し処理が完了したら、全ジョブデータファイル読み出し完了通知をその処理結果と共にスプール読み出し処理部112を送信する(ステップS1810)。全ジョブデータファイル読み出し完了通知を受信したスプール読み出し処理部112は、全ファイル読み出し完了通知をスプール書き込み処理部111に送信し(ステップS1811)、全ファイル読み出し完了通知を受信したスプール書き込み処理部111は、全データ読み出し完了通知を印刷プロトコル処理部131〜13Nに送信する(ステップS1812)。これにより、プリンタアプリA−120aによる印刷データの読み出し処理が完了し、プリンタアプリA−120aによる印刷処理が実行される。なお、印刷ジョブの終了処理については実施の形態1で説明した処理と同様に行われる。
このように実施の形態2の複合機100では、スプール読み出し処理部112によって、印刷データを、印刷プロトコル処理部131〜13Nとは別個に、分割された複数の印刷データを、HDD150から読み出しているので、ハードウェアに影響のないスプール処理に変更があった場合でもハードウェアに影響のないアプリケーション層のスプールアプリ110の修正を行えば、ハードウェアに影響を及ぼすコントロールサービス層の印刷プロトコル処理部131〜13Nをプロトコルごとに修正する必要がなくなる。また、例えばSDカードなどの新たなハードウェア資源の追加に伴うハードウェアインタフェースの変更があった場合でも、コントロール層の印刷プロトコル処理部131〜13Nを変更すれば、アプリケーション層のスプールアプリ110のプログラム変更は必要がない。このためハードウェア等の変更の影響を受けない部分であるスプールアプリ110をアプリケーション層に、ハードウェア等の変更の影響を受ける部分である印刷プロトコル処理部131〜13Nをコントロール層に分離した構成としたことにより効率的なプログラム開発を行うことができる。
また、本実施の形態によれば、スプールアプリ110は印刷プロトコル処理部131〜13Nとは異なる機能的に独立した手段であるため、アプリケーション間のデータの受け渡しをOSが提供するシステムコールの発行によって共有メモリを介して行うことができ、ハードウェアの変更の影響を直接受けないアプリケーション間で印刷データを受け渡すことが可能となる。
(実施の形態3)
実施の形態1および2では、複合機100において本発明のスプール処理を実行するものであったが、この実施の形態3は本発明のスプール処理をプリンタサーバで実行するものである。
図19は、実施の形態3のプリンタシステムのネットワーク構成とプリンタサーバの機能的構成を示すブロック図である。図19に示すように、本実施の形態では、プリンタサーバ1900と、PC190と、プリンタ装置1990がEthernet(R)などのネットワーク180で接続されている。
PC190は通常のコンピュータであり、本発明におけるクライアント端末を構成する。すなわち、本実施の形態のプリンタサーバ1900は、PC190をクライアントとしたサーバとして動作するようになっている。
本実施の形態のプリンタサーバ1900は、本発明における情報処理装置を構成するものであり、スプール処理部1910と、印刷処理部1920と、ネットワーク処理部1930とを主に備えている。
この他、プリンタサーバ1900は、OS1940と、HDD1950と、RAM1960と、Ethernet(R)ケーブルを接続するネットワークカード1970が設けられている。
スプール処理部1910は、従来の印刷プロトコル処理部内部で行っていたスプール機能を、印刷プロトコル処理部1931〜193Nとは別個に設けて実行するものである。このスプール処理部1910は、スプール書き込み処理部1911とスプール読み出し処理部1912とスプール転送I/F部1915とメモリ転送I/F部1914とHDD−I/F部1913と、を主に備えている。ここで、スプール読み出し処理部1912は本発明におけるスプール読み出し手段を構成する。
スプール書き込み処理部1911は、PC190から印刷要求があった場合に、印刷ジョブを生成して、印刷対象の印刷データを印刷プロトコル処理部1931〜193Nから共有メモリ1961を介してHDD1950に格納するものである。
スプール読み出し部処理1912は、印刷ジョブの実行時に、HDD1950に格納されている印刷ジョブに対応する印刷データを読み出して、共有メモリを介して印刷処理部1920に受け渡すものである。
スプール転送I/F部1915は、スプール処理の際のデータの転送を制御するものである。メモリ転送I/F部1914は、RAM1960等のメモリ、あるいは共有メモリ1961へのアクセスを制御するものである。HDD−I/F部1913は、HDD1950に対するアクセスを制御するものである。
本実施の形態では、記憶手段のインタフェースとしてメモリ転送I/F部1914とHDD−I/F部1913しかないが、例えばSDカードのような他の記憶手段が搭載された場合には、SDカードに対するアクセスを制御するSDカードI/F部を設ける。このようにハードウェアに固有の処理を行う部分がアプリケーション層のスプール処理部1910に設けられているため、HDD1950等の記憶手段の変更、あるいは新たなハードウェアの追加などによりインタフェースに変更がある場合には、スプール処理部1910を変更すれば、印刷プロトコル処理部1931〜193Nのそれぞれに修正を加える必要がなくなり、プログラム開発の効率化を図ることができる。
ネットワーク処理部1930は、ネットワーク側から各プロトコルによって受信したデータを処理するものである。ネットワーク処理部1930は、複数の印刷プロトコル処理部1931〜193Nと、ネットワーク管理部1935と、メモリ転送I/F部1939と、ネットワークI/F部1937を主に備えた構成となっている。ここで、印刷プロトコル処理部1931〜193Nは本発明におけるプロトコル処理手段を構成する。
複数の印刷プロトコル処理部1931〜193Nの各々は、各種通信プロトコルに従った処理を行うものであり、各プロトコルに対応して存在する。具体的には、印刷プロトコル処理部131〜13Nは、ネットワークI/F部1937を介してネットワーク上180のPC190等からデータを受信し、論理セッションの確立および開放を行うとともに、確立されたセッション上で送信されてくるデータを、通信プロトコルに従って解釈し、する。そして、解釈したデータからアプリケーション固有のデータ部分を抽出して、印刷処理部1920に受け渡す。ここで、このような通信プロトコルとしては実施の形態1で説明したものと同様である。
ネットワーク管理部1935は、TCP/IP、httpなどのプロトコルに従ってネットワークに関する処理を行うものである。
印刷処理部1920は、例えばプリンタドライバなどであり、PC190から受信した印刷データを印刷対象のプリンタ装置1990に依存する印刷形式のデータに変換する等の処理を行う。
本実施形態のプリンタサーバ1900は、CPUなどの制御装置と、HDD1950などの記録装置と、RAM1960等の記憶装置と、ネットワークカード1970等の通信装置とが接続されており、コンピュータを利用した通常の構成である。
尚、本実施形態のプリンタサーバ1900で実行されるスプール処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フロッピー(R)ディスク(FD)、DVD等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
また、本実施形態のスプール処理プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態のC言語プログラム生成プログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
本実施形態にかかるスプール処理プログラムは、プリンタサーバ1400で上記記憶媒体から読み出して実行することにより主記憶装置上にロードされ、上記機能的構成で説明した各部が主記憶装置上に生成されるようになっている。
次に、以上のように構成された本実施の形態のプリンタサーバ1900によるスプール処理について説明する。図20は、本実施の形態のプリンタサーバ1900によるスプール処理における印刷ジョブの登録時のデータの流れを示す説明図である。
この印刷ジョブの登録処理は次のように行われる。PC190からネットワーク180経由でプリンタサーバ1900に対して印刷要求があると、図20に示すように、その印刷対象の印刷データをネットワーク処理部1930の印刷プロトコル処理部1931〜193Nが受信する(ステップS1901)。
そして、通信プロトコルに対応した印刷プロトコル処理部1931〜193Nによって論理セッションの確立を行い、確立されたセッション上で送信されてくるデータを、通信プロトコルに従って解釈する。そして、データからアプリケーション固有のデータ部分を印刷データとして抽出して、印刷データをスプール書き込み処理部1911に受け渡す。具体的には、印刷プロトコル処理部1931〜193Nが印刷データを共有メモリ1961の書き込み領域に書き込み(ステップS2002)、印刷プロトコル処理部1931〜193Nが共有メモリへの書き込み通知をスプール書き込み処理部1911に通知する(ステップS2003)。
共有メモリ1961への書き込み通知を受信したスプール書き込み処理部1911は、OS1940のファイルシステムが提供するWriteシステムコールによって共有メモリ1961の書き込み領域の印刷データをHDD1950に格納する(ステップS2004)。これによって印刷ジョブの登録が行われる。この後、スプール書き込み処理部1911はスプール読み出し処理部1912にHDD1950への書き込み通知を通知する(ステップS2006)。
このように、印刷プロトコル処理部1931〜193Nとスプール書き込み処理部1911との間の印刷データの受け渡しは共有メモリ1961を介して行われるようになっている。印刷ジョブの登録の詳細な処理については実施の形態1と同様であるため説明を省略する。
次に、以上のように登録された印刷ジョブの読み出し処理について説明する。図21は、本実施の形態のプリンタサーバ1900によるスプール処理における印刷ジョブの読み出し時のデータの流れを示す説明図である。この印刷ジョブの実行処理は次のように行われる。
スプール書き込み処理部1911からスプール読み出し処理部1912にジョブデータ書き込み完了通知が行われると(ステップS2101)、スプール読み出し処理部1912は、HDD1950から該当するジョブIDのジョブデータファイル(印刷データ)を、OSが提供するWriteシステムコールを発行することにより、共有メモリ1961の読み出し領域に格納する(ステップS2102)。その後、スプール読み出し処理部1912は共有メモリデータ書き込み通知を印刷処理部1920に送信する(ステップS2103)。共有メモリデータ書き込み通知を受信した印刷処理部1920は、OSが提供するReadシステムコールを発行することにより、共有メモリ1961の読み出し領域から印刷データを読み出して(ステップS2104)、印刷処理を行う。
このように、スプール読み出し処理部1912と印刷処理部1920との間の印刷データの受け渡しは共有メモリ1961を介して行われるようになっており、このためハードウェアの変更の影響を直接受けないアプリケーション間でのデータの受け渡しが可能となる。なお、かかる印刷ジョブの読み出しの詳細な処理については実施の形態1と同様であるため説明を省略する。
このように実施の形態3のプリンタサーバ1900では、スプール読み出し処理部1912によって、印刷プロトコル処理部1931〜193Nとは別個に、HDD1950に記憶された印刷ジョブに含まれる印刷データを印刷処理部1920に受け渡しているので、ハードウェアに影響のないスプール処理に変更があった場合でもハードウェアに影響のないスプール書き込み処理部1911の修正を行えば、ハードウェアに影響を及ぼす印刷プロトコル処理部1931〜193Nをプロトコルごとに修正する必要がなくなる。また、例えばSDカードなどの新たなハードウェア資源の追加に伴うハードウェアインタフェースの変更があった場合でも、印刷プロトコル処理部1931〜193Nを変更すれば、スプール書き込み処理部1911のプログラム変更は必要がない。このため効率的なプログラム開発を行うことができる。
また、本実施の形態によれば、スプール読み出し処理部1912は印刷プロトコル処理部1931〜193Nとは異なる機能的に独立した手段であるため、アプリケーション間のデータの受け渡しをOSが提供するシステムコールの発行によって共有メモリを介して行うことができ、ハードウェアの変更の影響を直接受けないアプリケーション間で印刷データを受け渡すことが可能となる。
なお、本実施の形態のプリンタサーバ1900では、一つの印刷ジョブで単一の印刷データを扱っているが、印刷データを分割して一つの印刷ジョブで複数の印刷データを扱うように構成しても良い。