JP4052901B2 - プロセス間通信機能を有する装置 - Google Patents

プロセス間通信機能を有する装置 Download PDF

Info

Publication number
JP4052901B2
JP4052901B2 JP2002244001A JP2002244001A JP4052901B2 JP 4052901 B2 JP4052901 B2 JP 4052901B2 JP 2002244001 A JP2002244001 A JP 2002244001A JP 2002244001 A JP2002244001 A JP 2002244001A JP 4052901 B2 JP4052901 B2 JP 4052901B2
Authority
JP
Japan
Prior art keywords
function
client
server
thread
service
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.)
Expired - Fee Related
Application number
JP2002244001A
Other languages
English (en)
Other versions
JP2003162419A (ja
Inventor
滋也 千田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ricoh Co Ltd
Original Assignee
Ricoh Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ricoh Co Ltd filed Critical Ricoh Co Ltd
Priority to JP2002244001A priority Critical patent/JP4052901B2/ja
Priority to US10/227,921 priority patent/US7318083B2/en
Priority to EP02019030A priority patent/EP1292109A1/en
Publication of JP2003162419A publication Critical patent/JP2003162419A/ja
Application granted granted Critical
Publication of JP4052901B2 publication Critical patent/JP4052901B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Accessory Devices And Overall Control Thereof (AREA)

Description

【0001】
【発明の属する技術分野】
この発明は、プロセス間通信機能を有する装置に係り、特に複数のプロセスがサーバプロセスまたはクライアントプロセスとしてプロセス間通信を行う装置に関する。
【0002】
【従来の技術】
近年、プリンタ、コピー、ファクシミリ、スキャナなどの各装置の機能を1つの筐体内に収納した画像形成装置(以下、「複合機」という。)が一般的に知られている。
【0003】
この複合機は、1つの筐体内に表示部、印刷部および撮像部などを設けるとともに、プリンタ、コピーおよびファクシミリ装置にそれぞれ対応する3種類のソフトウェアを設け、ソフトウェアの切り替えによって、当該装置をプリンタ、コピー、スキャナまたはファクシミリ装置として動作させるものである。
【0004】
従来の複合機では、内部にプリンタ、コピー、スキャナおよびファクシミリ装置に対応するソフトウェア(汎用OSを含む)をそれぞれ別個に設ける構成となっており、各ソフトウェアの開発に多大の時間を要する。
【0005】
このため、出願人は、ハードウェア・インターフェースをドライブするドライバと呼ばれるソフトウェア群と、メモリ/タイマなどの共通なハードウェア資産を効率良く使用するためのマネージャ・ソフトウェア群や各アプリケーションで共通に使用できるシステム・ユーティリティ・ソフトウェア群と、これらのドライバ・ソフトウェア群,マネージャ・ソフトウェア群,ユーティリティ・ソフトウェア群を使用するプリンタ/スキャナ/FAX送信/FAX受信などの実アプリケーションとを備えた複合機(特開平9−51398号公報,特開平9−91102号公報参照)を発明した。
【0006】
しかしながら、特開平9−51398号公報,特開平9−91102号公報に記載されている複合機は、ドライバ・ソフトウェア群,マネージャ・ソフトウェア群,ユーティリティ・ソフトウェア群がライブラリで構成されており、ハードウェア資源を実行制御する主体となり得なかった。
【0007】
そこで、出願人は、表示部、印刷部および撮像部などの画像形成処理で使用されるハードウェア資源を有し、プリンタ、コピーまたはファクシミリなどの各ユーザサービスにそれぞれ固有の処理を行うアプリケーションを複数搭載し、これらのアプリケーションとハードウェア資源との間に介在して、ユーザサービスを提供する際に、アプリケーションの少なくとも2つが共通的に必要とするハードウェア資源の管理、実行制御並びに画像形成処理を行う各種コントロールサービスからなるプラットホームを備えた複合機(特開2002−82806号公報参照)を発明した。
【0008】
なお、ユーザサービスとはユーザに提供する画像形成に係るサービスをいう。また、コントロールサービスとはアプリケーションに画像形成に係るハードウェア資源を提供するサービスをいう。
【0009】
この複合機によれば、アプリケーションの少なくとも2つが共通的に必要とするハードウェア資源の管理、実行制御並びに画像形成処理を行うプラットホームを備えた構成とすることによって、ソフトウェア開発の効率化を図るとともに、装置全体としての生産性を向上させることが可能となる。
【0010】
【発明が解決しようとする課題】
このような複合機では、アプリケーションの少なくとも2つが共通的に必要とするサービスを提供するコントロールサービスを有する構成となっているため、機能変更、機能追加、または将来的なハードウェア資源の追加、変更などに柔軟に対応すべく、アプリケーションごとあるいはコントロールサービスごとの追加、変更を容易に行えることが望まれる。また、複合サービスを提供する際に、各アプリケーションと各コントロールサービス間、あるいは各コントロールサービス間でサービスやデータの授受を円滑に行うことが必要となってくる。
【0011】
すなわち、複合機は、プリンタ、コピー、ファクシミリ、スキャナなど多種の機能を備えたものであるが、その一部の機能に故障あるいは仕様変更などが生じた場合に、全てのアプリケーションまたは全てのコントロールサービスのモジュールを修正しなければならないと、作業の労力が過大となる。
【0012】
また、将来的に、複合機に新たな機能を追加する場合でも一部の機能の追加のために全てのコントロールサービスや全てのアプリケーションのモジュール変更が必要となると、プログラム開発の労力が過大となってしまう。このため、複合機上で動作する各アプリケーションやコントロールサービスのモジュールは互いにサービスやデータの送受信を実現としながらも、モジュール間の独立性を維持していることが必要となってくる。
【0013】
すなわち、アプリケーションや各コントロールサービスごとに独立性がないと、必要なアプリケーションや必要なコントロールサービスのみを提供することが困難となり、機能変更や機能追加などに柔軟に対応できるような複合機の構成に可変性を持たせることができない。
【0014】
また、各アプリケーションや各コントロールサービスごとに独立性がないと、アプリケーションやコントロールサービスごとの設計および構築が困難になり、多種多様な機能を提供することができない。
【0015】
この発明は上記に鑑みてなされたもので、可変性のあるアーキテクチャおよび多種多様な機能を実現できるプロセス間通信機能を有する装置を得ることを目的とする。
【0016】
【課題を解決するための手段】
上記目的を達成するため、請求項1にかかる発明は、実行する処理で使用されるハードウェア資源と、前記実行する処理に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有するプロセス間通信機能を有する装置であって、前記ユーザサービスおよびコントロールサービスのそれぞれは、サーバプロセスまたはクライアントプロセスとして動作する一または複数のスレッドを含むプロセスであり、前記サーバプロセスのスレッドは、前記クライアントプロセスのスレッドに提供する一または複数のサービスを定義した関数に対応する処理を実行するものであり、前記クライアントプロセスのスレッドは通信の動作主体であり、前記サーバプロセスのスレッドに対して個別にクライアントとしてサービスの提供を要求する際に関数呼び出しを行い、前記ユーザサービスおよび前記コントロールサービスは、前記クライアントプロセスとして動作するときに、前記サーバプロセスへの関数呼び出しに対する関数戻り値の受信を監視し、受信した関数戻り値を前記関数呼び出しを行ったスレッドに受け渡す、スレッドで実現されたクライアント監視手段と、前記サーバプロセスとして動作するときに、前記一又は複数のクライアントプロセスからの関数呼び出しを監視し、前記クライアントプロセスから関数呼び出しを受信したときに、呼び出された関数に対応した処理を関数ハンドラで実行するサーバ監視手段とを備えており、一のプロセスに一のサーバ監視手段と一又は複数のクライアント監視手段とを同時に起動可能であることを特徴とする。
【0017】
この請求項1にかかる発明によれば、一または複数のユーザサービスおよびコントロールサービスの相互間で、関数呼び出しによるプロセス間通信を実現することができる。
【0018】
このため、ユーザサービスおよびコントロールサービスに共通するサービスを提供するコントロールサービスを有する装置において、各ユーザサービスおよび各コントロールサービスの間の独立性を維持しながら互いにサービスやデータの授受をプロセス間通信によって実現することができ、機能的に多様性のある装置を提供することができる。
【0019】
また、ユーザサービスやコントロールサービスの一部のモジュールにのみ変更がある場合や、必要に応じてユーザサービスまたはコントロールサービスを追加する場合でも、サーバプロセスとなるモジュール側で関数を実装し、クライアントプロセスとなるモジュール側で関数呼び出しを行うというインタフェースを確保しておけば、サービスやデータの授受が可能となる。
【0020】
このため、ユーザサービスやコントロールサービスの追加または変更を容易に実現することができ、可変性を持った装置を構成することができる。
【0021】
さらに、ユーザサービスおよびコントロールサービスのそれぞれは、サーバプロセスまたはクライアントプロセスとして動作するプロセスであるため、複数のユーザサービスや複数のコントロールサービスをそれぞれ別個のプロセスとして動作させることにより、他のユーザサービスまたは他のコントロールサービスのプロセスが停止した場合でも動作中の他のプロセスは影響を受けない。
【0022】
このため、一部のプロセスが停止した場合でも他の複合サービスを続行して提供することができ、すべての複合サービスが提供不可能になることを防止することができる。
【0023】
ここで、「サーバプロセス」とは、他のプロセスからの要求により、要求されたサービスを提供するプロセスをいい、サービスを提供する限り、ユーザサービスおよびコントロールサービスのいずれもサーバプロセスとして動作することができる。
【0024】
また、「クライアントプロセス」とは、このようなサーバプロセスからサービスの提供を受けるプロセスをいい、サービスの提供を受ける限り、ユーザサービスおよびコントロールサービスのいずれもクライアントプロセスとして動作することができる。
【0025】
「関数」とは、サーバプロセスに対するサービスの処理要求やサーバプロセスによる所定の設定値の設定要求に対し、サーバプロセス側で要求された処理や設定を実行するものである。
【0026】
また、請求項2にかかる発明は、前記コントロールサービスは、前記ユーザサービスをクライアントプロセスとしたサーバプロセスとして動作して、前記ユーザサービスの少なくとも2つが共通的に必要とするサービスを定義した関数を有し、前記ユーザサービスは、前記コントロールサービスにサービスの提供を要求する際に関数呼び出しを行うことを特徴とする。
【0027】
この請求項2にかかる発明によれば、ユーザサービスに対するコントロールサービスからのサービスの提供を関数呼び出しによるプロセス間通信によって実現することができ、例えばアプリケーションなどのユーザサービスを用いた可変性および多様性のある装置の提供が可能となる。
【0028】
また、請求項3にかかる発明は、前記コントロールサービスは、他のコントロールサービスをクライアントプロセスとしたサーバプロセスとして動作して、前記他のコントロールサービスの少なくとも2つが共通的に必要とするサービスを定義した関数を有しており、前記他のコントロールサービスは、前記コントロールサービスにサービスの提供を要求する際に関数呼び出しを行うことを特徴とする。
【0029】
この請求項3にかかる発明によれば、コントロールサービス間のサービスの提供を関数呼び出しによるプロセス間通信によって実現することができ、コントロールサービスを用いた可変性および多様性のある装置の提供が可能となる。
【0030】
また、請求項4にかかる発明は、前記コントロールサービスは、前記サーバプロセスとして動作するとともに前記クライアントプロセスとして動作することを特徴とする。
【0031】
この請求項4にかかる発明によれば、ユーザサービスとコントロールサービス間の双方向のサービスの提供、およびコントロールサービス間の双方向のサービスの提供を関数呼び出しによるプロセス間通信によって実現することができ、より可変性および多様性のある装置の提供が可能となる。
【0033】
上記の請求項にかかる発明によれば、独立して動作する必要のない機能を同一プロセス内の複数スレッドに割り当てて並列に実行させることが可能となる。また、スレッド単位での実行制御の切り替えは、主記憶空間を共有し主記憶空間の切り替えが不要で、カウンタやレジスタの切り替えというオーバヘッドの少ない切り替えのみで実現できるため、別個の主記憶空間を使用して主記憶空間の切り替えが必要なプロセス単位の切り替えに比べて、切り替え時のオーバヘッドが少ない。
【0034】
このため、ユーザサービスおよびコントロールサービスの各プロセス内に一または複数のスレッドを起動して並列実行を行うことにより、サービスの並列実行時の処理速度を向上させることができる。
【0036】
上記の請求項にかかる発明によれば、クライアントプロセスから関数呼び出しを行ったスレッドは、クライアント監視手段によって関数戻り値が受け渡されるまで、次の命令実行を待機することによりプロセス内の他のスレッドが実行権を得ることができ、並列動作を行うことができる。
【0037】
このため、プロセス内に複数のスレッドを起動してプロセス間通信を行いながら、関数呼び出しに伴う戻り値待ちによってプロセスの他のスレッドが動作でき並列性を保証する。
【0039】
上記の請求項にかかる発明によれば、クライアント監視手段の機能を一または複数のスレッドで実現することができる。
【0040】
また、請求項にかかる発明は、前記クライアント監視手段は、関数の呼び出し後に関数戻り値待ち状態のスレッドの識別子を一時的に格納する関数戻り待ちキューをさらに備え、前記サーバプロセスから前記関数戻り値を受信したときに、受信した関数戻り値を、前記関数戻り待ちキューに格納された識別子の前記スレッドに送信することを特徴とする。
【0041】
この請求項にかかる発明によれば、プロセス内部の複数スレッドが単一サーバに対して関数呼び出しを行い、独立して関数の戻りを待つことができ、関数戻り値のスレッドへの送信を確実に行い、スレッドの並列動作をより確実かつ容易に実現することができる。
【0042】
また、請求項にかかる発明は、前記サーバプロセスおよび前記クライアントプロセスは、さらにイベントまたは通知に関するメッセージの送信,受信または送受信の何れかを行うことを特徴とする。
【0043】
この請求項にかかる発明において、「メッセージ」とは、サーバプロセスとクライアントプロセスとの間でイベントや通知を行う際に送信するものであり、関数のように戻り値を必要としないものをいう。
【0044】
この請求項にかかる発明によれば、装置におけるプロセス間通信を関数呼び出しの他メッセージによっても可能とし、機能的に多様性のある装置を提供することができる。また、スレッド間で同期をとる必要のないプロセス間通信をメッセージによって実現することにより、装置におけるプロセス間通信の処理速度を向上させることができる。
【0045】
また、請求項にかかる発明は、前記クライアント監視手段は、さらにサーバプロセスからのメッセージの受信を監視することを特徴とする。
【0046】
この請求項にかかる発明によれば、サーバプロセスから送信されたメッセージをクライアント監視手段で一括して受信することができ、装置におけるプロセス間通信の処理効率を向上させることができる。
【0047】
また、請求項にかかる発明は、前記クライアント監視手段は、受信したメッセージに基づいた処理を実行するメッセージハンドラをさらに備えたことを特徴とする。
【0048】
この請求項にかかる発明によれば、受信メッセージを対応するメッセージハンドラに委ねることができ、メッセージを利用したプロセス間通信の処理効率の向上を図ることができる。
【0049】
本発明における「メッセージハンドラ」は、受信したメッセージをスレッドに受け渡すものであればよく、メッセージごとに別個のメッセージハンドラを設ける他、受信可能なすべてのメッセージの受け渡し処理を行う単一モジュールとすることもできる。
【0051】
上記の請求項にかかる発明によれば、クライアントプロセスからの関数呼び出しをサーバ監視手段により一括して受信して、装置におけるプロセス間通信の処理効率を向上させることができる。
【0053】
上記の請求項にかかる発明によれば、サーバプロセスは複数のクライアントプロセスに対するサーバプロセスとして動作することが可能となり、複数のアプリケーション、複数のコントロールサービスをクライアントプロセスとして種々の機能を単一のサーバプロセスで提供することができ、機能的に多種多様な装置を提供することができる。
【0055】
上記の請求項にかかる発明によれば、サーバプロセスは提供するサービスを関数ハンドラを利用したプロセス間通信によってクライアントプロセスに提供することができ、機能的に多様性のある装置を提供することができる。
【0056】
また、関数に対応した処理を関数ハンドラに委ねることができ、サーバプロセスとして提供する機能を実行する関数ハンドラを予め設けておけばクライアントプロセスにサービスを提供することができる。このため、提供する機能に追加や変更が生じた場合でも、関数ハンドラを追加、変更するだけでサーバ監視手段の機能の大きな変更は必要なくなるので、容易に可変性のある装置を提供することができる。
【0057】
本発明における「関数ハンドラ」は、クライアントプロセスから呼び出した関数に対応した処理を実行するものであればよく、関数ハンドラをサーバプロセス側で提供する関数のすべてを関数ごとに実行する単一モジュールとする他、関数ごとに別個の関数ハンドラを設ける構成とすることができる。この場合には、より装置の可変性を高めることが可能である。
【0058】
また、請求項にかかる発明は、前記サーバ監視手段は、さらにクライアントプロセスからのメッセージの受信を監視することを特徴とする。
【0059】
この請求項にかかる発明によれば、クライアントプロセスから送信されたメッセージをサーバ監視手段で一括して受信することができ、装置におけるプロセス間通信の処理効率を向上させることができる。
【0060】
また、請求項10にかかる発明は、前記サーバ監視手段は、受信したメッセージに基づいた処理を実行するメッセージハンドラをさらに備えたことを特徴とする。
【0061】
この請求項10にかかる発明によれば、受信メッセージに関する処理をメッセージハンドラに委ねることができ、メッセージを利用したプロセス間通信の処理効率の向上を図ることができる。
【0062】
本発明における「メッセージハンドラ」も、受信したメッセージをスレッドに受け渡すものであればよく、メッセージごとに別個のメッセージハンドラを設ける他、受信可能なすべてのメッセージの受け渡し処理を行う単一モジュールとすることもできる。
【0063】
また、本発明のつぎの態様として、上記の発明のいずれか一つに記載の装置において、前記コントロールサービスが、ジョブまたはエンジンの制御を行うエンジンコントロールサービスを有し、前記エンジンコントロールサービスは、クライアントプロセスから関数呼び出しを受信したときに、ジョブ制御処理またはエンジン制御処理を実行する関数ハンドラを備えたことを特徴とする。
【0064】
この発明によれば、エンジンコントロールサービスがクライアントプロセスから関数呼び出しを受信したときに、ジョブ制御処理またはエンジン制御処理を実行する関数ハンドラを備えたことで、エンジンコントロールサービスが提供するジョブ制御処理またはエンジン制御処理に関するサービスを関数ハンドラを利用したプロセス間通信によってクライアントプロセスに提供することができ、機能的に多様性のある装置を提供することができる。
【0065】
また、エンジンコントロールサービスがサーバプロセスとして提供するジョブ制御またはエンジン制御の機能に追加や変更が生じた場合でも、関数ハンドラを追加、変更するだけでエンジンコントロールサービス側の大きな変更は必要なくなり、容易に可変性のある装置を提供することができる。
【0066】
また、本発明のつぎの態様として、上記発明に記載の装置において、前記エンジンコントロールサービスが、さらに、ジョブ制御またはエンジン制御に関するメッセージを送信することを特徴とする。
【0067】
この発明によれば、エンジンコントロールサービスがさらに、ジョブ制御またはエンジン制御に関するメッセージを送信することで、関数の他ジョブ制御またはエンジン制御に関するイベントまたは通知など戻り値を必要としない処理をメッセージによって実現し、機能的に多様性のある装置を提供することができる。
【0068】
また、本発明のつぎの態様として、上記発明のいずれか一つに記載の装置において、前記コントロールサービスが、メモリまたはハードディスク装置の制御を行うメモリコントロールサービスを有しており、前記メモリコントロールサービスが、クライアントプロセスからの関数呼び出しを受信したときに、メモリ制御処理またはハードディスク制御処理を実行する関数ハンドラを備えたことを特徴とする。
【0069】
この発明によれば、メモリコントロールサービスがクライアントプロセスから関数呼び出しを受信したときに、メモリ制御処理またはハードディスク制御処理を実行する関数ハンドラを備えたことで、メモリコントロールサービスが提供するメモリ制御処理またはハードディスク制御処理に関するサービスを関数ハンドラを利用したプロセス間通信によってクライアントプロセスに提供することができ、機能的に多様性のある装置を提供することができる。
【0070】
また、メモリコントロールサービスがサーバプロセスとして提供するメモリ制御またはハードディスク制御の機能に追加や変更が生じた場合でも、関数ハンドラを追加、変更するだけでメモリコントロールサービス側の機能の大きな変更は必要なくなり、容易に可変性のある装置を提供することができる。
【0071】
また、本発明のつぎの態様として、上記発明に記載の装置において、前記メモリコントロールサービスが、さらに、メモリ制御またはハードディスク制御に関するメッセージを送信することを特徴とする。
【0072】
この発明によれば、メモリコントロールサービスがさらに、メモリ制御またはハードディスク制御に関するメッセージを送信することで、関数の他メモリ制御またはハードディスク制御に関するイベントまたは通知など戻り値を必要としない処理をメッセージによって実現し、機能的に多様性のある装置を提供することができる。
【0073】
また、請求項11にかかる発明は、実行する処理で使用されるハードウェア資源と、前記実行する処理に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有するプロセス間通信機能を有する装置であって、前記ユーザサービスおよびコントロールサービスのそれぞれは、サーバプロセスまたはクライアントプロセスとして動作する一又は複数のスレッドを含むプロセスであり、前記コントロールサービスは、ネットワークに接続された他の装置で動作するクライアントプロセスに対するサーバプロセスとして動作し、サーバプロセスのスレッドとして前記他の装置のクライアントプロセスのスレッドに提供する一または複数のサービスを定義した関数に対応する処理を実行するスレッドを有し、前記クライアントプロセスのスレッドは通信の動作主体であり、前記サーバプロセスのスレッドに対して個別にクライアントとしてサービスの提供を要求する際に関数呼び出しを行い、前記コントロールサービスは、前記クライアントプロセスとして動作するときに、前記サーバプロセスへの関数呼び出しに対する関数戻り値の受信を監視し、受信した関数戻り値を前記関数呼び出しを行ったスレッドに受け渡す、スレッドで実現されたクライアント監視手段と、前記サーバプロセスとして動作するときに、前記他の装置又は自装置の前記一又は複数のクライアントプロセスからの関数呼び出しを監視し、前記クライアントプロセスから関数呼び出しを受信したときに、呼び出された関数に対応した処理を関数ハンドラで実行するサーバ監視手段とを備えており、一のプロセスに一のサーバ監視手段と一又は複数のクライアント監視手段とを同時に起動可能であることを特徴とする。
【0074】
この請求項11にかかる発明によれば、コントロールサービスはネットワーク上の他の装置で動作するプロセスをクライアントとしたサーバプロセスとして関数呼び出しを利用したプロセス間通信を実現することができ、同一の装置内のプロセスだけでなく、ネットワーク上の装置に対してもサービスの提供が可能となり、多種多様な機能を実現することができる。
【0075】
この請求項11にかかる発明において、サーバプロセスとなるコントロールサービスが動作している装置は、ユーザサービスおよびコントロールサービスを搭載可能であればその構成は限定されるものではない。すなわち、当該装置は、サービスを提供するコントロールサービスが1つでも搭載されていれば良く、ユーザサービスが未搭載の装置や、コントロールサービスが1個のみ搭載されている装置も含まれる。
【0076】
また、請求項12にかかる発明は、前記コントロールサービスの各プロセスは、前記他の装置のクライアントプロセスに提供するサービスを実行する一または複数のスレッドを備えたことを特徴とする。
【0077】
この請求項12にかかる発明によれば、ネットワーク上の他の装置で動作するアプリケーションなどのユーザサービスのプロセスに提供するサービスを並列実行させることができる。
【0078】
このため、例えば、ネットワーク上の異なる複数の装置のクライアントプロセスから同時に関数呼び出しを受けた場合でも、実行制御の切り替えの速いスレッドでサービスを並列実行させるので、ネットワーク上の複数の装置へのサービスの提供を迅速に行うことが可能となる。
【0080】
上記の請求項にかかる発明によれば、他の装置のクライアントプロセスからの関数呼び出しをサーバ監視手段により一括して受信して、ネットワーク上の装置とのプロセス間通信の処理効率を向上させることができる。
【0081】
また、請求項13にかかる発明は、前記サーバ監視手段は、さらに前記他の装置のクライアントプロセスからのメッセージの受信を監視することを特徴とする。
【0082】
この請求項13にかかる発明によれば、コントロールサービスはネットワークに接続された他の装置で動作するプロセスからのメッセージの一括した受信が可能となり、ネットワーク上の装置とのプロセス間通信の処理効率を向上させることができる。
【0083】
また、請求項14にかかる発明は、前記コントロールサービスは、さらに前記他の装置のクライアントプロセスに対しメッセージを送信することを特徴とする。
【0084】
この請求項14にかかる発明によれば、コントロールサービスはネットワークに接続された他の装置で動作するプロセスをクライアントとしたサーバプロセスとして関数の他メッセージを利用したプロセス間通信を行うことができ、ネットワーク上の装置に対して多種多様な機能を実現することができる。
【0085】
また、請求項15にかかる発明は、前記コントロールサービスは、前記他の装置で動作するユーザサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする。
【0086】
この請求項15にかかる発明によれば、ネットワーク上の他の装置で動作するアプリケーションのプロセスに対してコントロールサービスの機能を提供することができる。
【0087】
また、コントロールサービスがネットワーク上の装置内に存在しない場合や使用できない場合でも、プロセス間通信によって、当該ネットワーク上の装置にコントロールサービスの機能を提供できるので、ネットワークを利用した複数の装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【0088】
また、請求項16にかかる発明は、前記コントロールサービスは、前記他の装置で動作するコントロールサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする。
【0089】
この請求項16にかかる発明によれば、ネットワーク上の他の装置で動作するコントロールサービスに対してコントロールサービスの機能を提供することができる。
【0090】
また、あるコントロールサービスがネットワーク上の装置内に存在しない場合や使用できない場合でも、プロセス間通信によって、当該ネットワーク上の装置にコントロールサービスの機能を提供できるので、ネットワークを利用した複数の装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【0091】
また、請求項17にかかる発明は、前記ユーザサービスは、前記他の装置で動作するコントロールサービスをサーバプロセスとしたクライアントプロセスとして動作することを特徴とする。
【0092】
この請求項17にかかる発明によれば、ユーザサービスはネットワーク上のコントロールサービスからサービスの提供を受けることができる。また、ネットワーク上の装置でユーザサービスが使用できない状況にあっても、プロセス間通信によって、ネットワーク上の装置のコントロールサービスからのサービスの提供を受けることができるので、ネットワークを利用した複数の装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【0093】
また、請求項18にかかる発明は、前記コントロールサービスは、前記他の装置で動作するコントロールサービスをサーバプロセスとしたクライアントプロセスとして動作することを特徴とする。
【0094】
この請求項18にかかる発明によれば、コントロールサービスはネットワーク上のコントロールサービスからサービスの提供を受けることができる。また、ネットワーク上の装置でコントロールサービスが使用できない場合でも、プロセス間通信によって、ネットワーク上の装置のコントロールサービスからのサービスの提供を受けることができるので、ネットワークを利用した複数の装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【0095】
【発明の実施の形態】
以下に添付図面を参照して、この発明にかかる装置の好適な実施の形態を詳細に説明する。なお、以下の実施の形態では、本発明のプロセス間通信機能を有する装置の一例として画像形成装置について説明するが、複数のプロセスがサーバプロセスまたはクライアントプロセスとしてプロセス間通信を行う如何なる装置であってもよい。
(実施の形態1)
図1は、この発明の実施の形態1である画像形成装置(以下、「複合機」という)の構成を示すブロック図である。図1に示すように、複合機は、白黒ラインプリンタ(B&W LP)101と、カラーラインプリンタ(Color LP)102と、スキャナ103と、ファクシミリ104などのハードウェアリソースなどを有するとともに、プラットホーム120とアプリケーション130とから構成されるソフトウェア群110を備えている。
【0096】
プラットホーム120は、アプリケーション130からの処理要求を解釈してハードウェア資源の獲得要求を発生させるコントロールサービスと、一または複数のハードウェア資源の管理を行い、コントロールサービスからの獲得要求を調停するシステムリソースマネージャ(SRM)123と、汎用OS121とを有する。
【0097】
コントロールサービスは、複数のサービスモジュールから形成され、SCS(システムコントロールサービス)122と、ECS(エンジンコントロールサービス)124と、MCS(メモリコントロールサービス)125と、OCS(オペレーションパネルコントロールサービス)126と、FCS(ファックスコントロールサービス)127と、NCS(ネットワークコントロールサービス)128とから構成される。なお、このプラットホーム120は、あらかじめ定義された関数により前記アプリケーション130から処理要求を受信可能とするアプリケーションプログラムインタフェース(API)を有する。
【0098】
汎用OS121は、UNIX(登録商標)などの汎用オペレーティングシステムであり、プラットホーム120並びにアプリケーション130の各ソフトウェアをそれぞれプロセスとして並列実行する。
【0099】
SRM123は、SCS122とともにシステムの制御およびリソースの管理を行うものであり、スキャナ部やプリンタ部などのエンジン、メモリ、HDDファイル、ホストI/O(セントロI/F、ネットワークI/F、IEEE1394 I/F、RS232C I/Fなど)のハードウェア資源を利用する上位層からの要求にしたがって調停を行い、実行制御する。
【0100】
具体的には、このSRM123は、要求されたハードウェア資源が利用可能であるか(他の要求により利用されていないかどうか)を判断し、利用可能であれば要求されたハードウェア資源が利用可能である旨を上位層に伝える。また、SRM123は、上位層からの要求に対してハードウェア資源の利用スケジューリングを行い、要求内容(たとえば、プリンタエンジンにより紙搬送と作像動作、メモリ確保、ファイル生成など)を直接実施している。
【0101】
SCS122はアプリ管理、操作部制御、システム画面表示、LED表示、リソース管理、割り込みアプリ制御を行うものである。ECS124は、白黒ラインプリンタ(B&W LP)101、カラーラインプリンタ(Color LP)102、スキャナ103、ファクシミリ104からなるハードウェアリソースのエンジンを制御するものである。
【0102】
MCS125は、画像メモリの取得および解放、ハードディスク装置(HDD)の利用、画像データの圧縮および伸張などを行うものである。OCS126は、オペレータと本体制御間の情報伝達手段となる操作パネルを制御するモジュールである。
【0103】
FCS127は、システムコントローラの各アプリ層からPSTN/ISDN網を利用したファクシミリ送受信、BKM(バックアップSRAM)で管理されている各種ファクシミリデータの登録/引用、ファクシミリ読みとり、ファクシミリ受信印刷、融合送受信を行うためのAPIを提供するものである。FCS127では、そのサブプロセスであるFCUハンドラ129(FCUH)が起動される。このFCUH129は、FCS127からの指令によりファクシミリ送受信の際にファクシミリエンジンのデバイスドライバを制御するものである。
【0104】
NCS128は、ネットワークI/Oを必要とするアプリケーションに対して共通に利用できるサービスを提供するためのモジュール群であり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーションに振り分けたり、アプリケーションからデータをネットワーク側に送信する際の仲介を行うものである。
【0105】
アプリケーション130は、ページ記述言語(PDL)、PCLおよびポストスクリプト(PS)を有するプリンタ用のアプリケーションであるプリンタアプリ111と、コピー用アプリケーションであるコピーアプリ112と、ファクシミリ用アプリケーションであるファックスアプリ113と、スキャナ用アプリケーションであるスキャナアプリ114と、ネットワークファイル用アプリケーションであるネットファイルアプリ115と、工程検査用アプリケーションである工程検査アプリ116とを有している。
【0106】
これらの各コントロールサービスとSRM123と各アプリとは、それぞれプロセスとして汎用OS上に生成されて実行される。各プロセス内部では、複数のスレッドが起動され、汎用OSの管理下でこれらのスレッドのCPU占有時間を切り替えることにより並列実行が実現されている。各アプリプロセスと各コントロールサービスプロセスとは、後述するプロセス間通信によって各種メッセージやデータの送受信および関数呼び出しを行う。
【0107】
図2は、実施の形態1の複合機上で動作するサーバプロセスとクライアントプロセスの関係を示すブロック図である。ここで、サーバプロセス202とは、クライアントプロセス201からの要求によりクライアントプロセス201に対しサービスを提供するプロセスをいう。クライアントプロセス201とは、サーバプロセス202に対して要求を行うことにより、サーバプロセス202からサービスの提供を受けるプロセスをいう。
【0108】
実施の形態1の複合機では、上述のコピーアプリ112、プリンタアプリ111、スキャナアプリ114、ファックスアプリ113などのアプリケーションプロセス、およびECS124、MCS125、FCS127、NCS128などのコントロールサービスのプロセスが主としてクライアントプロセス201となり、コントロールサービスおよびSRM123のプロセスが主としてサーバプロセス202となる。
【0109】
すなわち、各アプリがコントロールサービスからサービスの提供を受ける場合には、各アプリのプロセスがクライアントプロセス201として動作し、コントロールサービスがサーバプロセス202として動作する。また、コントロールサービス間でサービスの要求と提供を行う場合には、サービスの要求を行うコントロールサービスがクライアントプロセス201として動作し、サービスの提供を行うコントロールサービスがサーバプロセス202として動作する。
【0110】
なお、これらの例に限られず、各アプリのプロセス、コントロールサービスのプロセス、SRMプロセスは、いずれもサーバプロセス202およびクライアントプロセス201となることができる。すなわち、これらのプロセスが、他のいずれかのプロセスに対しサービスを要求する場合にはクライアントプロセス201として動作する一方、他のプロセスからの要求によりサービスを提供する場合にはサーバプロセス202として動作することになる。
【0111】
図2に示すとおり、これらのアプリ、コントロールサービスおよびSRM123のプロセスには、いずれも複数のスレッドが起動している。そして、各プロセスは、複数のスレッドを有することから、他のプロセスからの要求を受けた場合に、当該他のプロセスをクライアントプロセス201としたサーバプロセス202として動作するが、これと同時に、他のプロセスに対してサービスを要求する場合に当該他のプロセスをサーバプロセス202としたクライアントプロセス201として動作する。
【0112】
また、各プロセスは、同時に複数のプロセスをクライアントプロセス201としたサーバプロセス202となることも可能である。さらに、各プロセスは、同時に複数のサーバプロセス202からのサービスの提供を受けるクライアントプロセス201となることも可能である。
【0113】
図2に示す通り、クライアントプロセス201は、サーバプロセス202のサービスを要求するために、クライアントプロセス内のスレッドからサーバプロセス202に対して関数コールを行い、その関数戻り値を受信することによってプロセス間通信を行う。
【0114】
また、クライアントプロセス201の各スレッドはメッセージをサーバプロセス202に送信することによってプロセス間通信を行う。一方、サーバプロセス202からクライアントプロセス201に対するプロセス間通信は、メッセージの送信のみで行われ、関数コールは行えないようになっている。
【0115】
このため、サーバプロセス202となりうるECS124、MCS125、FCS127、NCS128などコントロールサービスおよびSRM123には、クライアントプロセス201に対して提供するサービスが、サービスごとの後述する関数ハンドラ403としてあらかじめ実装されている。これらのサービスの要求をクライアントプロセス201から行う場合には、サーバプロセス202に対して、サービスごとに関数を呼び出すことにより(関数コールを行うことにより)、サービスの提供を受けることが可能となっている。
【0116】
ここで、「メッセージ」とは、主としてサーバプロセス202とクライアントプロセス201との間でイベントや通知を行う際に送信するものであり、一意的なメッセージID、メッセージ名、メッセージ方向、メッセージ内容を含むデータである。
【0117】
メッセージ方向には、「IN」、「OUT」、「SELF」があり、「IN」がクライアントプロセス201からサーバプロセス202に対して送信するメッセージを意味し、「OUT」がサーバプロセス202からクライアントプロセス201に対して送信するメッセージを意味する。また、「SELF」は、自分自身のプロセスに対して送信するメッセージを意味する。
【0118】
また、「関数」とは、クライアントプロセス201からサーバプロセス202に対して所定の処理要求を行ったり、所定の設定要求を行う際に発行するものであり、関数コールに対し戻り値を返すものである。
【0119】
クライアントプロセス201のスレッドは、あらかじめサーバプロセス202から提供されている関数をコールする。関数コールを受けたサーバプロセス202は要求された関数に対応する処理を実行してその実行結果を関数戻り値としてクライアントプロセス201のクライアントディスパッチャ203へ送信する。また、関数戻り値は構造体となっており、かかる構造体に戻り値の他、関数を識別する関数IDが含まれている。
【0120】
クライアントディスパッチャ203は、サーバプロセス202からのOUT方向のメッセージまたは関数戻り値の受信を監視するスレッドである。クライアントプロセス201は、一つのサーバプロセス202につき一つのクライアントディスパッチャ203を起動してサーバプロセス202と通信する。クライアントプロセス201が複数のサーバプロセス202と通信する場合には、サーバプロセス202ごとに一つのクライアントディスパッチャ203を起動する。
【0121】
図3はクライアントディスパッチャの詳細な構成を示す説明図である。クライアントディスパッチャ203は、そのスレッド上でメッセージハンドラ302、エラーハンドラ301およびデフォルトハンドラ303を起動する。
【0122】
メッセージハンドラ302は、受信したメッセージに対する処理を行うものであり、メッセージIDごとに別個のメッセージハンドラ302が複数存在する。このためクライアントディスパッチャ203がメッセージを受信すると、受信したメッセージに含まれるメッセージIDを判断し、対応するメッセージIDのメッセージハンドラ302を呼び出すようになっている。メッセージハンドラ302の処理内容としては、例えば、メッセージの内容を関数コールを行ったスレッドに通知するなどの処理があるが、メッセージごとに異なった処理内容が定義されている。
【0123】
エラーハンドラ301は、クライアントディスパッチャ203の実行中にエラーが発生した場合に呼び出され、ユーザにエラー通知を行うなどのエラー処理を行う。デフォルトハンドラ303は、対応するメッセージハンドラ302が登録されていないメッセージIDのメッセージを受信した時に呼び出され、メッセージをスレッドに通知するなどの処理を行う。
【0124】
また、クライアントディスパッチャ203は、関数戻り待ちキュー304を保持しており、この関数戻り待ちキュー304を利用することによって関数戻り値および関数戻り待ち状態のスレッド305の管理を行っている。すなわち、クライアントプロセス201のスレッドは、サーバプロセス202に対し関数コールを行うが、関数コール後、関数戻り値を受信するまで関数戻り待ち状態となり以降の処理が中断される。
【0125】
クライアントディスパッチャ203は、スレッド305から関数コールが行われると、そのスレッド305の識別子(スレッドIDなど)を関数の関数IDとともに関数戻り待ちキュー304に登録する。そして、クライアントディスパッチャ203は、サーバプロセス202から関数戻り値を受信すると、その関数IDをキーとして関数戻り待ちキュー304を検索し、受信した関数戻り値の受信を待って処理が中断されているスレッド305の識別子(スレッドIDなど)を検出する。そして、クライアントディスパッチャ203は検出された識別子(スレッドID)のスレッドに受信した関数戻り値を送信する。関数戻り値を受信したスレッドは戻り待ち状態を抜け、関数コール後の処理の続行が可能となる。クライアントディスパッチャ203は、このような戻り値の通知を、関数戻り値を受信するごとに行う。
【0126】
サーバディスパッチャ204は、クライアントプロセス201のスレッドからの関数コールおよびIN方向のメッセージを監視するスレッドである。1つのサーバディスパッチャ204は、クライアントディスパッチャ203と異なり、複数のクライアントプロセス201からの関数コールおよびメッセージを受信することができる。
【0127】
図4はサーバディスパッチャ204の詳細な構成を示す説明図である。サーバディスパッチャ204は、そのスレッド上で、関数ハンドラ403、メッセージハンドラ402、エラーハンドラ401およびデフォルトハンドラ404を起動する。
【0128】
関数ハンドラ403は、関数の具体的な処理を実行するものであり、関数ごとに複数存在する。サーバディスパッチャ204は、クライアントプロセス201から関数コールを受信すると、受信した関数に対応する関数ハンドラ403を起動し、関数ハンドラ403によってクライアントプロセス201が要求した処理を実行し、その関数戻り値をクライアントプロセス201のクライアントディスパッチャ203へ送信する。
【0129】
メッセージハンドラ402は、受信したメッセージに対する処理を行うものであり、メッセージIDごとに複数存在する。サーバディスパッチャ204は、メッセージを受信すると受信したメッセージに含まれるメッセージIDを判断し、対応するメッセージIDのメッセージハンドラ402を呼び出すようになっている。メッセージハンドラ402の処理内容としては、例えば、メッセージの内容をスレッドに通知するなどの処理があるが、メッセージごとに異なった処理内容が定義されている。
【0130】
エラーハンドラ401は、サーバディスパッチャ204の実行中にエラーが発生した場合に呼び出され、エラー通知などのエラー処理を行う。デフォルトハンドラ404は、対応するメッセージハンドラ402が登録されていないメッセージIDのメッセージを受信した時に呼び出され、メッセージをスレッドに通知するなどの処理を行う。
【0131】
つぎに、実施の形態1の複合機100で実際に行われるプリンタ動作、スキャナ動作、コピー動作およびファクシミリ送信動作におけるプロセス間通信について具体的に説明する。
【0132】
まず、プリンタ動作におけるプリンタアプリ111、ECS124、MCS125、SRM123のプロセス間通信について説明する。図5は、実施の形態1の複合機でプリンタ動作を行う場合のプリンタアプリ、ECS、MCS、SRMの各プロセス間のデータシーケンスを示す説明図である。図6は、各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【0133】
図6に示すように、複合機100にはプリンタアプリプロセス111、ECSプロセス124、MCSプロセス125およびSRMプロセス123が動作している。これらプロセスは、複合機100の起動時に生成される。なお、図6にはプリンタ動作において使用されるプロセスのみを図示しており、実際には他のアプリプロセスおよび他のコントロールサービスのプロセスも複合機100の起動時に生成される。
【0134】
プリンタアプリプロセス111は、複合機の起動時に起動され、図6に示すようにプロセス内に複数のスレッドが起動している。プリンタアプリプロセス111は、ECSプロセス124をサーバプロセスとしたクライアントプロセスとなっており、このためECSプロセス124からのメッセージや関数戻り値を受信してプロセス内のスレッドに通知するクライアントディスパッチャがスレッドとして起動される。
【0135】
ECSプロセス124は、プリンタ動作時には、プリンタアプリプロセス111をクライアントプロセスとしたサーバプロセスとなるとともに、MCSプロセス125およびSRMプロセス123をそれぞれサーバプロセスとしたクライアントプロセスとなる。このため、ECSプロセス124内にはプリンタアプリプロセス111からの関数コールおよびメッセージの受信とプリンタアプリプロセス111に対するメッセージおよび関数戻り値の送信を行うサーバディスパッチャのスレッドと、MCSプロセス125またはSRMプロセス123からのメッセージおよび関数戻り値の受信および戻り値の管理を行うクライアントディスパッチャと、その他ジョブ制御およびエンジン制御に関する処理を行う複数のスレッドが動作している。
【0136】
MCSプロセス125は、プリンタ動作時には、ECSプロセス124をクライアントプロセスとしたサーバプロセスとなるとともに、SRMプロセス123をサーバプロセスとしたクライアントプロセスとなる。このため、MCSプロセス125内にはECSプロセス124からの関数コールおよびメッセージの受信とECSプロセス124に対するメッセージおよび関数戻り値の送信を行うサーバディスパッチャのスレッドと、SRMプロセス123からのメッセージおよび関数戻り値の受信および戻り値の管理を行うクライアントディスパッチャと、その他、メモリ制御またはハードディスク制御に関する処理を行う複数のスレッドが動作している。
【0137】
SRMプロセス123は、プリンタ動作時には、ECSプロセス124またはMCSプロセス125をクライアントプロセスとしたサーバプロセスとなっている。SRMプロセス123内にはECSプロセス124またはMCSプロセス125からの関数コールおよびメッセージの受信とECSプロセス124またはMCSプロセス125に対するメッセージおよび関数戻り値の送信を行うサーバディスパッチャのスレッドと、その他、エンジン資源制御に関する種々の処理を行う複数のスレッドが動作している。
【0138】
実施の形態1におけるプリンタアプリプロセス111では、ジョブ動作モード設定とジョブスタート要求の各関数コールを行う処理を一スレッドとしている。また、ECSプロセス124では、印刷枚数分繰り返しメモリ画像情報要求関数コールを行う処理を一スレッドとし、また資源獲得要求関数コールを行う処理を一スレッドとしている。MCSプロセス125では、メモリ取得要求関数コールを行う処理を一スレッドとしている。ただし、これらの各スレッドにおける処理は一例であり、各プログラムで任意に定めることができる。
【0139】
PCなどのホストからセントロI/F、USB I/F、ネットワークI/Fなど経由して印刷要求1があると、その印刷要求1をNCSプロセスが受けプリンタアプリプロセスに転送する(ステップS501)。プリンタアプリプロセス111は、NCSプロセスから印刷要求を受信すると新たなプリントジョブを生成し、スレッド1においてECSプロセス124に対してジョブ動作モード設定要求関数コールを行う(ステップS502)。
【0140】
その後このスレッド1は関数戻り値の受信待ちとなり、クライアントディスパッチャによりスレッド1の識別子(スレッドID)が関数戻り待ちキューに登録される。ここで、ジョブ動作モードとは、スキャナ、プロッタ、フィニッシャなどを動作させるために必要なパラメータ群であり、印刷用紙サイズ、印刷部数、給紙トレイなどのプリンタ条件から生成されるジョブの動作条件を定めたものである。
【0141】
なお、以降では説明の簡略化のため、サーバプロセスに関数コールを行って関数戻り待ち状態となったスレッドの識別子(スレッドID)が、クライアントディスパッチャによって、関数IDとともに関数戻り待ちキューに登録されることを、単に「スレッドが関数戻り待ち状態になる」と表現する。
【0142】
ECSプロセス124では、サーバディスパッチャがプリンタアプリプロセスからジョブ動作モード設定関数コールを受信して、ジョブ動作モード設定関数ハンドラをサーバディスパッチャのスレッド上で起動する。そして、ジョブ動作モード設定関数ハンドラにより新たに生成されたプリンタジョブに対して上述のジョブ動作モードを設定し、関数戻り値(例えば、正常またはエラー発生)をプリンタアプリプロセス111のクライアントディスパッチャへ送信する。
【0143】
プリンタアプリプロセス111のクライアントディスパッチャは、ECSプロセス124からジョブ動作モード設定関数の関数戻り値を受信して、関数戻り待ちキューから関数戻り値待ちのスレッド1を検索して、ジョブ動作モード設定関数の戻り値を抽出してスレッド1に送信する。
【0144】
なお、以降では説明の簡略化のため、クライアントディスパッチャによって、関数戻り待ち状態のスレッドの識別子(スレッドID)が関数戻り待ちキューから検索され、検索された識別子(スレッドID)のスレッドがクライアントディスパッチャから関数戻り値を受信することを、単に「スレッドがクライアントディスパッチャ経由で関数戻り値を受信する」と表現する。
【0145】
スレッド1では、クライアントディスパッチャからジョブ動作モード設定の関数戻り値を受信すると、戻り待ち状態を抜け、ジョブの開始要求を行うため、ECSプロセス124に対しジョブスタート要求関数を呼び出し(ステップS503)、関数戻り待ち状態となる。
【0146】
ECSプロセス124では、サーバディスパッチャがプリンタアプリプロセス111からジョブスタート要求関数コールを受信して、ジョブスタート要求関数ハンドラをサーバディスパッチャのスレッド上で起動し、ジョブスタート要求関数ハンドラによってジョブの開始処理を行って関数戻り値をプリンタアプリプロセス111のクライアントディスパッチャへ送信する。
【0147】
プリンタアプリプロセス111のクライアントディスパッチャは、ECSプロセス124からジョブスタート要求関数の戻り値を受信して、スレッド1がクライアントディスパッチャ経由でジョブスタート要求関数の戻り値を受信する。
【0148】
つぎに、ECSプロセス124では、メモリに格納されている印刷データを取得するためにスレッド3においてMCSプロセス125に対してメモリ画像情報要求メッセージを送信する(ステップS504)。
【0149】
MCSプロセス125では、サーバディスパッチャがECSプロセス124からメモリ画像情報要求メッセージを受信して、メモリ画像情報要求メッセージハンドラを起動する。そして、このメモリ画像情報要求メッセージハンドラによってメモリに格納されている画像データを取得して、画像データをECSプロセス124へ送信する(ステップS505)。
【0150】
ECSプロセス124のクライアントディスパッチャは、MCSプロセス125から画像データを受信して、スレッド3へ受け渡す。かかるメモリ画像情報要求メッセージの送信および画像データの受信処理は、印刷ページが終了するまで繰り返し行われる(ステップS508、S509)。
【0151】
一方、MCSプロセス125では、画像データのECSプロセス124への送信後、画像メモリを確保するためにスレッド5においてSRMプロセス123に対してメモリ取得要求関数コールを行って(ステップS506)、戻り待ち状態となる。SRMプロセス123では、サーバディスパッチャがMCSプロセス125からメモリ取得要求関数コールを受信し、メモリ取得要求関数ハンドラを起動して、このメモリ取得要求関数ハンドラによってプリント用に画像メモリを確保し、関数戻り値をMCSプロセス125へ送信する。
【0152】
MCSプロセス125のクライアントディスパッチャは、SRMプロセス123からメモリ取得要求関数の戻り値を受信して、スレッド5がクライアントディスパッチャ経由でこのメモリ取得要求関数の戻り値を受信する。
【0153】
ECSプロセス124では、1ページ目の印刷データをMCSプロセス125から受信した後、プリンタエンジン資源を取得するためにスレッド4において、SRMプロセス123に対して資源獲得要求関数コールを行って(ステップS507)、関数戻り待ち状態となる。SRMプロセス123では、サーバディスパッチャがECSプロセス124から資源獲得要求関数コールを受信して資源獲得要求関数ハンドラを起動し、資源獲得要求関数ハンドラによってプリンタエンジンを占有し、関数戻り値をECSプロセス124へ送信する。ECSプロセス124のクライアントディスパッチャは、SRMプロセス123から資源獲得要求関数の戻り値を受信して、スレッド4がクライアントディスパッチャ経由で資源獲得要求関数の戻り値を受信する。
【0154】
ECSプロセス124のスレッド3では、メモリ画像情報要求メッセージ(ステップS511)に対する通知メッセージとして「画像なし」の応答メッセージを受信した場合には(ステップS512)、すべての印刷ページのプリントが終了したものと判断し、プリンタアプリプロセス111に対し、ジョブエンド通知メッセージを送信する(ステップS513)。プリンタアプリプロセス111では、クライアントディスパッチャがこのメッセージを受信してメッセージハンドラを起動し、メッセージハンドラによってジョブエンド通知メッセージをスレッド1へ通知する。
【0155】
このようにプリンタ動作のプロセス間通信が行われるが、ここで、図5に示すように、印刷要求1に対するプリント処理中に、別の印刷要求2がNCSからプリンタアプリプロセス111へ送信された場合について説明する。(ステップS521)。
【0156】
このとき、プリンタアプリプロセス111、ECSプロセス124、MCSプロセス125およびSRMプロセス123で、上述した関数コールと同様のプロセス間通信が行われる(ステップS522、S523、S524)。
【0157】
しかし、ECSプロセス124のスレッド7からSRMプロセス123に対して資源獲得要求関数コールを行った場合(ステップS527)、現在プリンタエンジンが印刷要求1に対するプリント処理に占有されているため、SRMプロセス123は直ちに資源獲得要求関数の戻り値を返さない。このため、このスレッド7はしばらく関数戻り値待ちの状態となり、関数戻り待ちキューに登録された状態となる。そして、印刷要求1による占有からプリンタエンジンが解放された時点で、SRMプロセス123は資源獲得要求関数の戻り値をECSプロセス124に返し(ステップS528)、これにより、ECSプロセス124のスレッド7が、印刷要求2に対する処理を続行することになる。
【0158】
なお、ここでは印刷要求2に対するプリンタジョブにおいて、プリンタエンジンの獲得ができない場合の例を説明した。この他、ECSプロセス124からSRMプロセス123に対してメモリ取得要求関数コールを行ったときに、すでに印刷要求1に対するプリントジョブが原因でメモリ不足が生じ、印刷要求2のプリントジョブでメモリを取得できない場合には、メモリ取得要求関数コールを行ったスレッドが印刷要求1のプリンタ動作完了まで関数戻り待ち状態のまま待機し、印刷要求2に対するプリンタ動作が中断する。
【0159】
次に、実施の形態1の複合機100で行われるスキャナ動作において、スキャナアプリ114、ECS124、MCS125、SRM123のプロセス間通信について具体的に説明する。図7は、実施の形態1の複合機でスキャナ動作を行う場合のスキャナアプリ、ECS、MCS、SRMの各プロセス間のデータシーケンスを示す説明図である。また、図8は、各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【0160】
図8に示すように、複合機100にはスキャナアプリプロセス114、ECSプロセス124、MCSプロセス125およびSRMプロセス123が動作している。これらのプロセスは、複合機100の起動時に生成される。なお、図8にはスキャナ動作において使用されるプロセスのみを図示しており、実際には他のアプリプロセスおよび他のコントロールサービスのプロセスも複合機100の起動時に生成される。
【0161】
スキャナアプリプロセス114は、複合機の起動時に起動され、図8に示すようにプロセス内に複数のスレッドが起動している。スキャナアプリプロセス114は、ECSプロセス124をサーバプロセスとしたクライアントプロセスとなっており、このためECSプロセス124に対するクライアントディスパッチャのスレッドが起動している。
【0162】
ECSプロセス124は、スキャナ動作時には、スキャナアプリプロセス114をクライアントプロセスとしたサーバプロセスとなるとともに、MCSプロセス125およびSRMプロセス124をそれぞれサーバプロセスとしたクライアントプロセスとなる。このため、ECSプロセス124内にはスキャナアプリプロセス114に対するサーバディスパッチャのスレッドと、MCSプロセス125に対するクライアントディスパッチャのスレッドと、SRMプロセス123に対するクライアントディスパッチャのスレッドとその他ジョブ制御またはエンジン制御に関する処理を行う複数のスレッドが動作している。
【0163】
MCSプロセス125は、スキャナ動作時には、スキャナアプリプロセス114およびECSプロセス124をクライアントプロセスとしたサーバプロセスとなる。このため、MCSプロセス125内にはスキャナアプリプロセス114およびECSプロセス124に対するサーバディスパッチャのスレッドとその他メモリ制御またはハードディスク制御に関する処理を行う複数のスレッドが動作している。
【0164】
SRMプロセス123は、ECSプロセス124をクライアントプロセスとしたサーバプロセスとなり、このため、SRMプロセス123内にはECSプロセス124に対するサーバディスパッチャのスレッドとその他エンジン資源制御に関する処理を行う複数のスレッドが動作している。
【0165】
実施の形態1におけるスキャナアプリプロセス114では、スキャナ動作時におけるジョブオープン要求関数とジョブ動作モード設定要求とジョブスタート要求の各関数コールを行う一連の処理、ファイル生成要求関数コールを行う処理、ファイル情報登録要求関数コールおよびファイルクローズ要求関数コールを行う処理をそれぞれ一スレッドとしている。
【0166】
また、スキャナアプリプロセス114では、スキャンした画像の読み出し時におけるファイルオープン要求関数コール、作業領域確保要求関数コールおよびページオープン要求関数コールを行う処理、読み出し要求関数コールを行う処理、ページクローズ要求関数コールとページ削除要求関数コールと作業領域削除要求関数コールとファイルクローズ要求関数コールとファイル削除要求関数コールを行う一連の処理をそれぞれ一スレッドとしている。
【0167】
ECSプロセス124では、資源獲得要求関数コールを行う処理、原稿枚数分繰り返してページ生成要求関数コールと原稿フィードインおよびページクローズ要求関数コールを行う一連の処理をそれぞれ一スレッドとしている。ただし、これらの各スレッドにおける処理は一例であり、各プログラムで任意に定めることができる。
【0168】
スキャナアプリプロセス114に対しスキャン要求があると、スキャナアプリプロセス114は、新たなスキャナジョブを生成し、スレッド1においてECSプロセス124に対してジョブオープン要求関数コールを行う(ステップS701)。その後このスレッド1は関数戻り待ち状態となり、クライアントディスパッチャによってスレッド1の識別子(スレッドID)が呼び出した関数の関数IDとともに関数戻り待ちキューに登録される。
【0169】
また、スキャナアプリプロセス114では、これと並行してスレッド2によりMCSプロセス125に対しファイル生成要求関数コールを行う(ステップS702)。その後このスレッド2は関数戻り待ち状態となり、同様にスレッド2の識別子(スレッドID)が関数戻り待ちキューに登録される。
【0170】
ECSプロセス124では、サーバディスパッチャがスキャナアプリプロセス114からジョブオープン要求関数コールを受信して、ジョブオープン要求関数ハンドラをサーバディスパッチャのスレッド上で起動する。そして、ジョブオープン要求関数ハンドラによりジョブをオープンして、関数戻り値をスキャナアプリプロセス114のクライアントディスパッチャへ送信する。
【0171】
一方、MCSプロセス125では、サーバディスパッチャがスキャナアプリプロセス114からファイル生成要求関数コールを受信して、ファイル生成要求関数ハンドラによって、スキャンした画像を一時的に格納するファイルをハードディスク上に生成して、関数戻り値をスキャナアプリプロセス114のクライアントディスパッチャへ送信する。
【0172】
スキャナアプリプロセス114のクライアントディスパッチャは、ECSプロセス124からジョブオープン要求関数の関数戻り値を受信するとともに、MCSプロセス125からファイル生成要求関数の戻り値を受信して、関数戻り値キューからジョブオープン要求関数戻り待ち状態のスレッド1とファイル生成要求関数戻り待ち状態のスレッド2を検出し、ジョブオープン要求関数の戻り値をスレッド1に送信し、ファイル生成要求関数の戻り値をスレッド2に送信する。
【0173】
スレッド1は、クライアントディスパッチャからジョブオープン要求関数の戻り値を受信すると戻り待ち状態を抜け、ジョブ動作モードの設定を行うため、ECSプロセス124に対しジョブ動作モード設定要求関数を呼び出し(ステップS703)、スレッド1は関数戻り待ち状態となる。
【0174】
ECSプロセス124では、サーバディスパッチャがスキャナアプリプロセス114からジョブ動作モード設定要求関数コールを受信して、ジョブ動作モード設定要求関数ハンドラによってスキャナジョブに上述のジョブ動作モードを設定して関数戻り値をスキャナアプリプロセス114のクライアントディスパッチャへ送信する。
【0175】
スキャナアプリプロセス114のクライアントディスパッチャは、ECSプロセス124からジョブ動作モード設定要求関数の戻り値を受信する。スレッド1はクライアントディスパッチャ経由でジョブ動作モード設定要求関数の戻り値を受信し、関数戻り待ち状態を抜ける。
【0176】
関数戻り待ち状態を抜けたスレッド1では、ジョブスタート要求関数コールをECSプロセス124に対して行い(ステップS704)、スレッド1が関数戻り待ち状態となる。ECSプロセス124では、サーバディスパッチャがジョブスタート要求関数コールを受信して、ジョブスタート要求関数ハンドラによってジョブの開始処理を行い、関数戻り値をスキャナアプリプロセス114のクライアントディスパッチャへ送信する。スキャナアプリプロセス114のクライアントディスパッチャは、ECSプロセス124からジョブスタート要求関数の戻り値を受信し、スレッド1がクライアントディスパッチャ経由でジョブスタート要求関数の関数戻り値を受信する。
【0177】
このとき、ECSプロセス124では、スキャナエンジンの資源格闘のため、スレッド3においてSRMプロセス123に対して資源獲得要求関数コールを行い(ステップS705)、関数戻り待ち状態となる。またECSプロセス124では、これと並行してスキャン画像をページ単位で格納するメモリを確保するために、スレッド4においてMCSプロセス125に対しページ生成要求関数コールを行い(ステップS706)、関数戻り待ち状態となる。この時点で、関数戻り待ちキューには、スレッド3とスレッド4の識別子(スレッドID)が呼び出した関数の関数IDとともに格納される。
【0178】
SRMプロセス123では、サーバディスパッチャが資源獲得要求関数コールを受信して資源獲得要求関数ハンドラにより、スキャナエンジンを占有し関数戻り値をECSプロセス124へ送信する。MCSプロセス125では、サーバディスパッチャがページ生成要求関数コールを受信してページ生成要求関数ハンドラにより、1ページ分のメモリを確保し、確保したページをオープンし、関数戻り値をECSプロセス124へ送信する。
【0179】
ECSプロセス124のクライアントディスパッチャは、SRMプロセス123から資源獲得要求関数の戻り値を受信し、またMCSプロセス125からページ生成要求関数の戻り値を受信する。そして、関数戻り待ち状態のスレッド3はクライアントディスパッチャ経由で資源獲得要求関数の戻り値を受信し、スレッド4もクライアントディスパッチャ経由でページ生成要求関数の戻り値を受信する。
【0180】
スレッド4は、関数戻り値を受信することによって戻り待ち状態を抜け、つぎにスキャナエンジンに対して原稿フィードインの指示メッセージを送信して(ステップS707)、スキャナによる原稿の読み取り動作を開始させる。1ページ分の原稿読み動作が終了すると、ECSプロセス124に対しスキャナエンジンからスキャン完了通知メッセージが送信されるので(ステップS708)、ECSプロセス124のスレッド4はこのスキャン完了通知メッセージを受信してMCSプロセス125に対しページクローズ要求関数コールを行って(ステップS709)、戻り待ち状態となる。
【0181】
MCSプロセス125では、ページクローズ要求関数コールを受信すると、ページクローズ要求関数ハンドラによってメモリ上でオープンされている1ページ分の画像メモリをクローズして関数戻り値をECSプロセス124のクライアントディスパッチャへ送信する。
【0182】
ECSプロセス124のクライアントディスパッチャは、ページクローズ要求関数の戻り値を受信し、関数戻り待ち状態のスレッド4がクライアントディスパッチャ経由でページクローズ要求関数の戻り値を受信する。スレッド4では、これにより関数戻り待ち状態を抜け、上述のページ生成要求関数コールからページクローズ要求関数コールまでの処理(ステップS706〜S709)を原稿枚数分だけ繰り返し行う。
【0183】
原稿の最終ページのスキャンが終了すると、スキャナエンジンはスレッド4に対しスキャン処理完了通知メッセージを送信する(ステップS710)。スレッド4ではこのスキャン処理完了通知メッセージをスキャナアプリプロセス114に対して送信し(ステップS711)、さらにジョブエンド通知メッセージも送信する(ステップS712)。
【0184】
スキャナアプリプロセス114のクライアントディスパッチャは、スキャン処理完了通知メッセージとジョブエンド通知メッセージとを順にECSプロセス124から受信し、スレッド1に通知する。一方、スキャナアプリプロセス114のスレッド5は、MCSプロセス125に対してファイル情報登録要求関数コールを行って(ステップS713)、関数戻り待ち状態となる。
【0185】
MCSプロセス125では、サーバディスパッチャがファイル情報登録要求関数コールを受信すると、ファイル情報登録要求関数ハンドラによって、一時的に生成されたすべての原稿のスキャン画像が格納されているファイルに対し、ファイル名、格納先等のファイル情報を登録し、関数戻り値をスキャナアプリプロセス114のクライアントディスパッチャへ送信する。
【0186】
スキャナアプリプロセス114のスレッド5は、ファイル情報登録要求関数の戻り値をクライアントディスパッチャ経由で受信すると、MCSプロセス125に対しファイルクローズ要求関数コールを行って(ステップS714)、関数戻り待ち状態となる。MCSプロセス125では、サーバディスパッチャでこのファイルクローズ要求関数コールを受信し、ファイルクローズ要求関数ハンドラによってスキャン画像のファイルをクローズして関数戻り値をスキャナアプリプロセス114に送信する。スキャナアプリプロセス114は、このファイルクローズ要求関数の戻り値を受信することにより、スキャン処理が終了する。
【0187】
ついで、スキャナアプリプロセス114では、格納されているスキャン画像を読み出すため、次の処理を行う。まず、スレッド6において、MCSプロセス125に対し、スキャン画像のファイルをオープンするためのファイルオープン要求関数コール、作業メモリの確保のための作業領域確保要求関数コール、ページオープン要求関数コールを順次に行う(ステップS715〜S717)。なお、スレッド6は、上述と同様に、それぞれの関数コールを行った後、関数戻り待ち状態になり、関数戻り値の通知により、戻り待ち状態を抜け、次の関数コールを行う。
【0188】
MCSプロセス125のサーバディスパッチャは、スキャナアプリプロセス114のスレッド6からファイルオープン要求関数コール、作業領域確保要求関数コール、ページオープン要求関数コールを順に受信して、スキャン画像ファイルのオープン処理、作業メモリの確保処理、ページオープン処理をそれぞれ各関数ハンドラによって行って、各関数戻り値をスキャナアプリプロセス114に送信する。スキャナアプリプロセス114では、クライアントディスパッチャによりファイルオープン要求関数、作業領域確保要求関数、ページオープン要求関数の各戻り値を順に受信して、スレッド6がクライアントディスパッチャ経由で関数戻り値を受信する。
【0189】
また、スキャナアプリプロセス114では、スレッド7において、スキャン画像ファイルからの画像データの読み出しのために読み出し要求関数コールを行い(ステップS718)、スレッド7が関数戻り待ち状態になる。さらに、スレッド8において、MCSプロセス125に対しページクローズ要求関数コールを行い(ステップS719)、スレッド8は関数戻り待ち状態になる。
【0190】
MCSプロセス125では、スレッド6からの要求であるページオープン処理の終了後に、スキャナアプリプロセス114のスレッド7から読み出し要求関数コールを受信し、読み出し要求関数ハンドラによってスキャナ画像ファイルから画像データを読み出し、画像データとともに関数戻り値をスキャナアプリプロセス114へ送信する。スキャナアプリプロセス114では、スレッド7が読み出し要求関数の戻り値をクライアントディスパッチャ経由で受信することにより、関数戻り待ち状態を抜け、次の読み出し要求関数コールを行い、同様に関数戻り値を受信する。
【0191】
MCSプロセス125では、スレッド7からの要求である最後の読み出し要求処理が終了すると、スキャナアプリプロセス114のスレッド8から受信したページクローズ要求関数の関数ハンドラを起動して、オープンしているページデータのクローズ処理を行い、関数戻り値をスキャナアプリプロセス114へ送信する。スキャナアプリプロセス114では、スレッド8がページクローズ要求関数の戻り値をクライアントディスパッチャ経由で受信し、関数戻り待ち状態を抜ける。これにより、スレッド8では、ページ削除要求関数コール、作業領域削除要求関数コール、ファイルクローズ要求関数コール、ファイル削除要求関数コールを順に行う(ステップS720〜S723)。
【0192】
MCSプロセス125は、これらの関数コールを順に受信して、受信した関数コールに対応する関数ハンドラによってそれぞれ、ページデータの削除、作業メモリの削除、スキャン画像ファイルのクローズ、スキャン画像ファイルの削除の各処理を行って、各関数戻り値をスキャナアプリプロセス114に送信する。
【0193】
スキャナアプリプロセス114のスレッド8では、MCSプロセス125からの各関数戻り値をクライアントディスパッチャ経由で受信することにより、スキャン画像の読み出し処理が完了する。
【0194】
次に、実施の形態1の複合機100で行われるコピー動作において、コピーアプリ112、ECS124、MCS125、SRM123のプロセス間通信について具体的に説明する。図9は、実施の形態1の複合機でコピー動作を行う場合のコピーアプリ、ECS、MCS、SRMの各プロセス間のデータシーケンスを示す説明図である。また、図10は、各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【0195】
図10に示すように、複合機100にはコピーアプリプロセス112、ECSプロセス124、MCSプロセス125およびSRMプロセス123が動作している。これらプロセスは、複合機100の起動時に生成される。なお、図10にはコピー動作において使用されるプロセスのみを図示しており、実際には他のアプリプロセスおよび他のコントロールサービスのプロセスも複合機の起動時に生成される。
【0196】
コピーアプリプロセス112は、複合機100の起動時に起動され、図10に示すようにプロセス内に複数のスレッドが起動している。コピーアプリプロセス112は、ECSプロセス124をサーバプロセスとしたクライアントプロセスとなっており、このためECSプロセス124に対するクライアントディスパッチャのスレッドが起動している。
【0197】
ECSプロセス124は、コピー動作時には、コピーアプリプロセス112をクライアントプロセスとしたサーバプロセスとなるとともに、MCSプロセス125およびSRMプロセス123をそれぞれサーバプロセスとしたクライアントプロセスとなる。このため、ECSプロセス124内にはコピーアプリプロセス112に対するサーバディスパッチャのスレッドと、MCSプロセス125に対するクライアントディスパッチャのスレッドと、SRMプロセス123に対するクライアントディスパッチャのスレッドとその他ジョブ制御およびエンジン制御に関する処理を行う複数のスレッドが動作している。
【0198】
MCSプロセス125は、コピー動作時には、ECSプロセス124をクライアントプロセスとしたサーバプロセスとなるとともに、SRMプロセス123をサーバプロセスとしたクライアントプロセスとなる。このため、MCSプロセス125内にはECSプロセス124に対するサーバディスパッチャのスレッドと、SRMプロセス123に対するクライアントディスパッチャのスレッドと、その他メモリ制御およびハードディスク制御に関する種々の処理を行う複数のスレッドが動作している。
【0199】
SRMプロセス123は、ECSプロセス124およびMCSプロセス125をクライアントプロセスとしたサーバプロセスとなり、このため、SRMプロセス123内にはECSプロセス124およびMCSプロセス125に対するサーバディスパッチャのスレッドとその他エンジンの資源制御に関する処理を行う複数のスレッドが動作している。
【0200】
実施の形態1におけるコピーアプリプロセス112では、コピー時におけるジョブオープン要求関数コールとジョブ動作モード設定関数コールとジョブスタート要求関数コールを行う一連の処理、ジョブクローズ要求関数コールを行う処理をそれぞれ一スレッドとしている。
【0201】
ECSプロセス124では、メモリ確保要求関数コールを行う処理、資源獲得要求関数コールを行う処理、原稿フィードイン処理をそれぞれ一スレッドとしている。MCSプロセス125では、メモリ取得要求関数コールを行う処理を一スレッドとしている。なお、コピー動作時においても、これら各スレッドにおける処理は一例であり、各プログラムで任意に定めることができる。
【0202】
コピー要求があると、コピーアプリプロセス112は、新たなコピージョブを生成し、スレッド1においてECSプロセス124に対してジョブオープン要求関数コールを行う(ステップS901)。これにより、スレッド1は関数戻り待ち状態となり、クライアントディスパッチャによってスレッド1の識別子(スレッドID)が呼び出したジョブオープン要求関数の関数IDとともに関数戻り待ちキューに登録される。
【0203】
ECSプロセス124では、サーバディスパッチャがコピーアプリプロセス112からジョブオープン要求関数コールを受信して、ジョブオープン要求関数ハンドラをサーバディスパッチャのスレッド上で起動する。そして、ジョブオープン要求関数ハンドラによりコピージョブをオープンして、関数戻り値をコピーアプリプロセス112のクライアントディスパッチャへ送信する。
【0204】
コピーアプリプロセス112のクライアントディスパッチャは、ECSプロセス124からジョブオープン要求関数の戻り値を受信し、関数戻り値待ちキューから関数戻り待ち状態のスレッドを検索する。そして、検索されたスレッド1にジョブオープン要求関数の戻り値を送信する。
【0205】
スレッド1は、クライアントディスパッチャからジョブオープン要求関数の戻り値を受信すると、戻り待ち状態を抜け、ジョブ動作モードの設定を行うため、ECSプロセス124に対しジョブ動作モード設定関数コールを行い(ステップS902)、関数戻り待ち状態となる。
【0206】
一方、スレッド2はジョブスタート要求関数コールをECSプロセス124に対して行い(ステップS903)、関数戻り待ち状態となる。この時点では、関数戻り待ちキューにはスレッド1の識別子(スレッドID)がジョブ動作モード設定関数の関数IDとともに登録され、またスレッド2の識別子(スレッドID)がジョブスタート要求関数の関数IDとともにクライアントディスパッチャにより登録される。
【0207】
ECSプロセス124では、サーバディスパッチャがコピーアプリプロセス112からジョブ動作モード設定関数コールを受信して、ジョブ動作モード設定関数ハンドラによってコピージョブに上述のジョブ動作モードを設定して関数戻り値をコピーアプリプロセス112のクライアントディスパッチャへ送信する。また、サーバディスパッチャはジョブスタート要求関数コールを受信して、ジョブスタート要求関数ハンドラによってジョブの開始処理を行って関数戻り値をコピーアプリプロセス112のクライアントディスパッチャへ送信する。
【0208】
コピーアプリプロセス112のクライアントディスパッチャは、ECSプロセス124からジョブ動作モード設定関数とジョブスタート要求関数の戻り値をそれぞれ受信し、スレッド1がクライアントディスパッチャ経由でジョブ動作モード設定関数の戻り値を受信し、スレッド2もクライアントディスパッチャ経由でジョブスタート要求関数の戻り値を受信する。
【0209】
ECSプロセス124では、ジョブスタート要求関数の戻り値をコピーアプリプロセス112に送信すると、つぎにスキャン画像を格納するためのメモリを確保するために、スレッド3においてMCSプロセス125に対し必要なサイズを指定したメモリ確保要求関数コールを行い(ステップS904)、関数戻り待ち状態となる。また、これと並行してスレッド4において、スキャナエンジンとプリンタエンジンの資源獲得のため、SRMプロセス123に対して資源獲得要求関数コールを行い(ステップS906)、関数戻り待ち状態となる。
【0210】
MCSプロセス125では、サーバディスパッチャがメモリ確保要求関数コールを受信すると、メモリ確保要求関数ハンドラによって指定されたサイズのメモリ上の領域を確保し、関数戻り値をECSプロセス124に送信する。一方、SRMプロセス123では、サーバディスパッチャが資源獲得要求関数コールを受信して資源獲得要求関数ハンドラにより、スキャナエンジンとプリンタエンジンとを占有し、関数戻り値をECSプロセス124へ送信する。
【0211】
ECSプロセス124のクライアントディスパッチャは、MCSプロセス125からメモリ確保要求関数の戻り値を受信するとともに、SRMプロセス123から資源獲得要求関数の戻り値を受信する。そして、スレッド3はクライアントディスパッチャ経由でメモリ確保要求関数の戻り値を受信し、スレッド4もクライアントディスパッチャ経由で資源獲得要求関数の戻り値を受信する。これにより、スレッド3とスレッド4は関数戻り待ち状態を抜ける。
【0212】
資源獲得要求関数の戻り値を受信してスキャナエンジンとプリンタエンジンとをコピージョブで占有すると、ECSプロセス124では、スレッド5においてスキャナエンジンに対して原稿フィードインを行い(ステップS907)、これによりコピー動作の原稿スキャン処理を開始する。
【0213】
スキャナエンジンでは原稿のスキャン処理が終了するとスキャン終了通知メッセージをECSプロセス124のスレッド5に送信し(ステップS908)、プリンタエンジンによってスキャン画像のプリント処理を開始する。そして、プリンタエンジンではスキャン画像のプリント処理が終了すると、ECSプロセス124のスレッド5に印刷終了通知メッセージを送信する(ステップS910)。
【0214】
ECSプロセス124では、スレッド5がスキャナエンジンからスキャン終了通知メッセージを受信すると、コピーアプリプロセス112に対しスキャン終了の旨のジョブエンド通知メッセージを送信する(ステップS909)。また、スレッド5がプリンタエンジンから印刷終了通知メッセージを受信すると、コピーアプリプロセス112に対し印刷終了の旨のジョブエンド通知メッセージを送信する(ステップS911)。
【0215】
コピーアプリプロセス112では、クライアントディスパッチャが2つのジョブエンド通知メッセージを受信して、メッセージハンドラを起動してスレッド2に各ジョブエンド通知メッセージを通知する。これにより、原稿1ページ分のコピー動作が完了する。
【0216】
複数枚の原稿のコピーを行う場合には、さらにECSプロセス124に対しジョブスタート要求関数コールを行うと(ステップS912)、上述と同様の動作がECSプロセス124、MCSプロセス125、SRMプロセス123、スキャナエンジンおよびプリンタエンジンで行われる(ステップS913〜S916)。すべての原稿のコピーが終了し、コピーアプリプロセス112が最後のジョブエンド通知メッセージを受信すると(ステップS917)、スレッド1はECSプロセス124に対しジョブクローズ要求関数コールを行う(ステップS918)。
【0217】
ECSプロセス124では、サーバディスパッチャによりこのジョブクローズ要求関数コールを受信してジョブクローズ要求関数ハンドラによってオープン状態にあるコピージョブをクローズし、その関数戻り値をコピーアプリプロセス112に送信する。
【0218】
コピーアプリプロセス112では、クライアントディスパッチャによって、ジョブクローズ要求関数の戻り値を受信し、戻り待ち状態となっているスレッド2がクライアントディスパッチャ経由でジョブクローズ要求関数の戻り値を受信し、コピー動作が完了する。
【0219】
ここで、上述したコピー動作中に、スキャン要求をスキャナアプリプロセス114が受信した場合には、次のような処理が行われる。たとえば、コピー動作においてECSプロセス124からSRMプロセス123に対しスキャナエンジンとプリンタエンジンの資源獲得要求関数コールを行った後に、スキャナアプリプロセス114にスキャン要求があった場合を考える。
【0220】
この場合、上述した図7におけるスキャナ動作において、ECSプロセス124からSRMプロセス123に対しスキャナエンジンの資源獲得要求関数コールが行われるが、スキャナエンジンがコピージョブで占有されているため、スキャナジョブで獲得することができない。
【0221】
このためスキャナジョブでは資源獲得要求関数の戻り値のECSプロセス124に対する送信を、コピージョブが完了し、スキャナエンジンが解放された後で行う。この間、スキャナジョブにおいて資源獲得要求関数コールを行ったスレッドは、関数戻り待ち状態となって待機していることになり、スキャナ動作がコピー動作完了まで中断されることになる。また、コピー動作中に、コピージョブでプリンタエンジンの占有がされた後に、プリンタアプリプロセス111にプリント要求があった場合にも、同様に、コピー動作完了までプリント動作は中断されることになる。
【0222】
なお、コピー動作中のスキャナ動作について、スキャナジョブでスキャナエンジンの獲得ができない場合の例をあげて説明したが、この他、スキャナジョブにおいてECSプロセス124からMCSプロセス125に対し、ページ生成要求関数コールを行ったときに、コピージョブにおいてメモリ使用中のため、メモリ不足でぺージ生成をできないような場合にも、ページ生成要求関数コールを行ったスレッドが関数戻り待ち状態となって、コピー動作完了までスキャナ動作が中断する。
【0223】
次に、実施の形態1の複合機で行われるファクシミリ送信動作において、ファックスアプリ113、FCS127、ECS124、MCS125、SRM123のプロセス間通信について具体的に説明する。図11は、実施の形態1の複合機でコピー動作を行う場合のファックスアプリ、FCS、ECS、MCS、SRMの各プロセス間のデータシーケンスを示す説明図である。また、図12は、各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【0224】
図12に示すように、複合機100にはファックスアプリプロセス113、FCSプロセス127、FCUHプロセス129、ECSプロセス124、MCSプロセス125およびSRMプロセス123が動作している。これらプロセスは、複合機100の起動時に生成されるようになっている。なお、図12にはファックス送信動作において使用されるプロセスのみを図示しており、実際には他のアプリプロセスおよび他のコントロールサービスのプロセスも複合機の起動時に生成される。
【0225】
ファックスアプリプロセス113は、複合機100の起動時に起動され、図12に示すようにプロセス内に複数のスレッドが起動している。ファックスアプリプロセス113は、FCSプロセス127をサーバプロセスとしたクライアントプロセスとなっており、このためFCSプロセス127に対するクライアントディスパッチャのスレッドが起動している。
【0226】
FCSプロセス127は、ファクシミリ送信動作時には、ファックスアプリプロセス113をクライアントプロセスとしたサーバプロセスとなるとともに、ECSプロセス124およびFCUHプロセス129をサーバプロセスとしたクライアントプロセスとなる。このため、FCSプロセス127内にはファックスアプリプロセス113に対するサーバディスパッチャのスレッドと、ECSプロセス124に対するクライアントディスパッチャのスレッドと、FCUSプロセス129に対するクライアントディスパッチャのスレッドと、その他ファクシミリ通信制御に関する処理を行う複数のスレッドが動作している。
【0227】
FCUHプロセス129は、FCSプロセス127のサブプロセスであり、ファクシミリ送信動作時に、SRMプロセス123およびFCS127をクライアントプロセスとしたサーバプロセスとなる。このため、FCUHプロセス129内にはSRMプロセス123およびFCS127に対するサーバディスパッチャのスレッドと、その他ファクシミリデバイスドライバに対する指令などの処理を行う複数のスレッドが動作している。
【0228】
ECSプロセス124は、ファクシミリ送信動作時には、FCSプロセス127をクライアントプロセスとしたサーバプロセスとなるとともに、MCSプロセス125およびSRMプロセス123をそれぞれサーバプロセスとしたクライアントプロセスとなる。このため、ECSプロセス124内にはFCSプロセス127に対するサーバディスパッチャのスレッドと、MCSプロセス125に対するクライアントディスパッチャのスレッドと、SRMプロセス123に対するクライアントディスパッチャのスレッドとその他ジョブ制御およびエンジン制御に関する処理を行う複数のスレッドが動作している。
【0229】
MCSプロセス125は、ファクシミリ送信動作時には、ECSプロセス124をクライアントプロセスとしたサーバプロセスとなるとともに、SRMプロセス123をサーバプロセスとしたクライアントプロセスとなる。このため、MCSプロセス125内にはECSプロセス124に対するサーバディスパッチャのスレッドと、SRMプロセス123に対するクライアントディスパッチャのスレッドと、その他メモリ制御およびハードディスク制御に関する処理を行う複数のスレッドが動作している。
【0230】
SRMプロセス123は、ECSプロセス124およびMCSプロセス125をクライアントプロセスとしたサーバプロセスとなるとともに、FCUHプロセス129をサーバプロセスとしたクライアントプロセスとなる。このため、SRMプロセス123内にはECSプロセス124およびMCSプロセス125に対するサーバディスパッチャのスレッドと、FCUHプロセス129をサーバプロセスとしたクライアントディスパッチャと、その他エンジン資源制御に関する処理を行う複数のスレッドが動作している。
【0231】
実施の形態1におけるファックスアプリ113では、送信スタート要求関数コールを行う処理、送信モード変更要求を行う処理をそれぞれ一スレッドとしている。FSCプロセス127では、ファックス送信動作時におけるジョブ動作モード設定関数コールとジョブスタート要求関数コールを行う一連の処理、スキャンパラメータ要求メッセージを受信してスキャンパラメータを送信する処理、EOM(次ページ有り),EOF(次ページ無し)などの次ページ情報メッセージを通知する処理をそれぞれ一スレッドとしている。
【0232】
ECSプロセス124では、メモリ確保要求関数コールと資源獲得要求関数コールを行う一連の処理、スキャン・フィードインプロセス生成指示メッセージを送信する処理をそれぞれ一スレッドとしている。MCSプロセス125では、メモリ確保要求関数コールを行う処理、その他メッセージを送信する処理を一スレッドとしている。
【0233】
SRMプロセス123では、フィードスタートメッセージとフィードイン終了メッセージとスタンプ実行指示メッセージを送信する一連の処理、スキャン・フィードインプロセス実行処理をそれぞれ一スレッドとしている。FCUH129では、EOM,EOFなどの次ページ情報メッセージを送信する処理を一スレッドとしている。なお、ファクシミリ送信動作時においても、これら各スレッドにおける処理は一例であり、各プログラムで任意に定めることができる。
【0234】
ファクシミリ送信要求があると、ファックスアプリプロセス113は、新たなファクシミリ送信ジョブを生成し、スレッド1からFCSプロセス127に対して送信スタート要求関数コールを行い(ステップS1101)、スレッド1が関数戻り待ち状態となる。FCSプロセス127では、サーバディスパッチャがファックスアプリプロセス113から送信スタート要求関数コールを受信して、送信スタート要求関数ハンドラを起動し、送信スタート要求関数ハンドラのスレッド3によってMCSプロセス125に対してジョブ動作モード設定要求関数コールを行い(ステップS1102)、スレッド3が関数戻り待ち状態となる。
【0235】
ECSプロセス124では、サーバディスパッチャがFCSプロセス127からジョブ動作モード設定要求関数コールを受信して、ジョブ動作モード設定要求関数ハンドラによってファクシミリ送信ジョブに上述の動作モードを設定して関数戻り値をFCSプロセス127のクライアントディスパッチャへ送信する。
【0236】
FCSプロセス127のクライアントディスパッチャは、ECSプロセス124からジョブ動作モード設定要求関数の戻り値を受信し、スレッド3はクライアントディスパッチャ経由でこの戻り値を受信する。これにより、スレッド3は関数戻り待ち状態を抜け、ついでECSプロセス124に対しジョブスタート要求関数コールを行い(ステップS1103)、スレッド3は関数戻り待ち状態となる。
【0237】
このジョブスタート要求関数コールを受信したMCSプロセス125は、ジョブスタート要求関数ハンドラによって、MCS125に対しメモリ確保要求関数コールを行い(ステップS1104)、SRMプロセス123に対し資源獲得要求関数コールを行う(ステップS1106)。これらの関数コールを受信したMCSプロセス125、SRMプロセス123の処理およびECSプロセス124における各関数の戻り値の受信に伴う処理は、コピー動作時の処理と同様であるので説明を省略する。
【0238】
ECSプロセス124では、スキャナエンジンの資源獲得関数の戻り値を受信したら、スレッド7においてFCSプロセス127に対しスキャナパラメータ確定要求メッセージを送信する(ステップS1107)。ここで、スキャナパラメータとは、たとえばファイン、ノーマルなどのスキャン濃度や原稿サイズ等である。FCSプロセス127では、このスキャナパラメータ確定要求メッセージを受信すると、スレッド4においてスキャナパラメータをECSプロセス124に対してメッセージとして送信する(ステップS1108)。
【0239】
ECSプロセス124では、スキャナパラメータメッセージをサーバディスパッチャが受信して、スキャンパラメータ確定要求メッセージを送信したスレッド7に通知し、スレッド7はSRMプロセス123に対してスキャン・フィードインプロセスの生成指示メッセージを送信する(ステップS1109)。SRMプロセス123は、スキャン・フィードインプロセスの生成指示メッセージを受信すると、スレッド11によりスキャン・フィードインプロセスを生成して実行させる(ステップS1110)。
【0240】
ついでFCUHプロセス129に対して原稿のフィードインスタートメッセージを送信する(ステップS1111)。FCUHプロセス129がフィードインスタートメッセージを受信して、原稿フィードインが開始され、これにより原稿のスキャンおよび指定宛先への送信が開始する。
【0241】
原稿のスキャンが開始されると、次ページの原稿があるか否かを示す、次ページ原稿有無通知メッセージがスキャナエンジンからECSプロセスに対して送信される。図11の例では、次ページ原稿有通知メッセージが通知されている(ステップS1112)。そして、原稿のスキャンを終了すると、スキャナエンジンからECSプロセス124に対してスキャン終了メッセージが送信される(ステップS1113)。
【0242】
ECSプロセス124は、受信したスキャン終了メッセージを次ページ原稿有の旨とともにFCSプロセス127へ送信する(ステップS1114)。一方、原稿スキャンが終了すると、SRMプロセス123はFCUHプロセス129に対してフィードイン終了を指示し(ステップS1115)、これにより原稿フィードインが終了する。
【0243】
ここで、ファックスアプリプロセス113がFCSプロセス127に対して送信モード変更要求関数コールを行った場合には(ステップS1105)、ECSプロセス124は、スレッド6においてスキャンパラメータ確定要求メッセージをFCSプロセス127に対して送信し、これに対し上述のようにFCSプロセス127は、スキャンパラメータメッセージをECSプロセス124に送信する(ステップS1118)。ECSプロセス124では、スキャンパラメータメッセージを受信すると、次ページ目のスキャン・フィードインプロセスの実行をSRMプロセス123に指示して、実行が開始する(ステップS1119、S1120)。
【0244】
一方、1ページの指定宛先へのファクシミリ送信が完了すると、FCSプロセス127は、スレッド5においてEOMメッセージ(異なる送信モードで次ページ有り)をFCUHプロセス129へ送信し(ステップS1121)、これを受信したFCUHプロセス129はスレッド13によりEOMを指定宛先へ送信する(ステップS1122)。
【0245】
FCUHプロセス129が指定宛先から受信正常の通知を受けた場合には(ステップS1123)、SRMプロセス123に対して送信成功メッセージを送信し(ステップS1124)、これを受信したSRMプロセス123はECSプロセス124に対してプロセス正常終了メッセージを送信する(ステップS1125)。さらにこれを受信したECSプロセス124はFCSプロセス127に対し1ページ目のスキャン処理完了通知メッセージを送信する(ステップS1126)。そして、送信成功メッセージを受信したSRMプロセス123は指示により、送信日時、発信元等のスタンプを指定宛先へ送信する旨をスキャナエンジンに指示する(ステップS1127)。
【0246】
SRMプロセス123は、2ページ目の原稿のフィードインを開始するため、FCUHプロセス129に対して原稿のフィードインスタートメッセージを送信する(ステップS1128)。FCUHプロセス129はフィードインスタートメッセージを受信して、原稿フィードインが開始され、これにより2ページ目の原稿のスキャンおよび指定宛先への送信が開始する。
【0247】
原稿のスキャンが開始されると、次ページ原稿有無通知メッセージがスキャナエンジンからECSプロセスに対して送信され、図11の例では、次ページ原稿有無通知メッセージが通知され、ECSプロセス124のスレッド9に通知されている(ステップS1129)。そして、原稿のスキャンが終了すると、スキャナエンジンからECSプロセス124に対してスキャン終了メッセージが送信される(ステップS1130)。
【0248】
ECSプロセス124のスレッド9は、受信したスキャン終了メッセージを次ページ原稿無の旨とともにFCSプロセス127へ送信する(ステップS1131)。一方、スキャンが終了すると、SRMプロセス123ではスレッド13がFCUHプロセス129に対してフィードイン終了を指示し(ステップS1132)、これにより原稿フィードインが終了する。
【0249】
2ページの指定宛先へのファクシミリ送信が完了すると、FCSプロセス127では、スレッド5がEOFメッセージ(次ページ無し)をFCUHプロセス129へ送信し(ステップS1124)、これを受信したFCUHプロセス129はスレッド13によりEOFを指定宛先へ送信する。
【0250】
FCUHプロセス129が指定宛先から受信正常の通知を受けた場合には(ステップS1135)、スレッド13によりSRMプロセス123に対して送信成功メッセージを送信し(ステップS1136)、これを受信したSRMプロセス123は、スレッド12によりECSプロセス124に対してプロセス正常終了メッセージを送信する(ステップS1137)。
【0251】
さらにこれを受信したECSプロセス124は、スレッド9によりFCSプロセス127に対し2ページ目のスキャン処理完了通知メッセージを送信する(ステップS1138)。また、送信成功メッセージを受信したSRMプロセス123は、スレッド12により、送信日時、発信元等のスタンプの指定宛先へ送信の指示を行う(ステップS1139)。
【0252】
そして、ECSプロセス124は、FCSプロセス127にジョブエンド通知メッセージを送信し(ステップS1140)、FCSプロセス127では、このジョブエンド通知メッセージをクライアントディスパッチャで受信することにより全ての原稿のファックス送信動作が完了する。
【0253】
このように、実施の形態1の複合機では、各アプリプロセスなどクライアントとなるプロセスが、ECSプロセス、MCSプロセス、SRMプロセスなどのサーバとなるプロセスに対し、関数コールによってサービスを要求し、またメッセージの送受信を行うことでプロセス間通信を実現することができる。このため、アプリケーション130とプラットホーム120という特殊な構成を有する複合機において、複合サービスという多種多様な機能を実現することができる。
【0254】
また、実施の形態1の複合機では、関数コールによるサービス要求の結果としての関数戻り値をクライアントディスパッチャにより監視して受信することにより、プロセス内のスレッド間の同期制御を容易に行うことができる。このため、アプリプロセス、複数のコントロールサービスの一部のモジュールのみに変更がある場合でも、関数コールとその関数戻り値の制御を確実に設計しておけば他のプロセスとのインタフェースの変更は不要となるので、各アプリごと、各コントロールサービスごとの機能変更などに対応することが容易に行え、複合機の構成に可変性を持たせることが可能となる。
【0255】
さらに、実施の形態1の複合機では、スレッドにより並列実行を可能としながら、スレッドに親和性のある関数コールとその関数戻り値の制御によりプロセス間通信におけるスレッド間の同期制御を行っているので、並列処理の切り替え時のオーバヘッドを極力少なくして、複合サービス提供時の処理速度を向上させることができる。
(実施の形態2)
実施の形態1にかかる複合機100では、サーバプロセスとクライアントプロセスとの関係を概念的に説明した。そこで、この実施の形態2では、サーバプロセスおよびクライアントプロセスをより具体的に説明する。なお、実施の形態2にかかる複合機100の構成は、図1と同様であるため説明を省略する。
【0256】
図13は、実施の形態2の複合機100上で動作するサーバプロセスとクライアントプロセスの関係を詳細に示すブロック図である。ここで、クライアントプロセス1600は、サーバプロセス1610,1620に対して要求を行うことにより、サーバプロセス1610,1620からサービスの提供を受ける例えばSCS122などのプロセスをいう。また、サーバプロセス1610,1620は、クライアントプロセス1600からの要求によりクライアントプロセス1600に対しサービスを提供する例えばECS124などのプロセスをいう。
【0257】
図13に示すとおり、クライアントプロセス1600には複数のスレッド1601が起動している。クライアントプロセス1600は、複数のスレッド1601を有することから、複数のサーバプロセス1610,1620に対して同時にサービスを要求できる。
【0258】
また、クライアントプロセス1600は、サーバプロセス1610,1620のサービスを要求するために、スレッド1601からサーバプロセス1610,1620に対して関数コールを行い、その関数戻り値を受信することによってプロセス間通信を行う。
【0259】
クライアントプロセス1600のスレッド1601は、あらかじめサーバプロセス1610,1620から提供されている関数をコールする。関数は、クライアントスタブ1602に定義されている。また、クライアントディスパッチャ1603は関数戻り値の受信を監視するスレッドである。
【0260】
クライアントプロセス1600は、サーバプロセス1610,1620ごとにクライアントディスパッチャ1603を起動してサーバプロセス1610,1620と通信する。そして、関数コールを受けたサーバプロセス1610,1620は要求された関数に対応する処理を以下のように実行する。
【0261】
例えばサーバプロセス1610のサーバディスパッチャ1611は、サーバスケルトン1612にコーディングされている複数のスレッド1613から、要求された関数に対応するスレッド1613を選択する。ここで選択されるスレッド1613は、実施の形態1で説明した関数ハンドラ403に相当する。サーバプロセス1610のスレッド1613は、要求された処理を実行してその実行結果を関数戻り値としてクライアントプロセス1600に送信する。
【0262】
次に、実施の形態2にかかるクライアントプロセス1600と、サーバプロセス1610,1620とを生成する生成方法について説明する。図14は、実施の形態2のクライアントプロセスとサーバプロセスとを生成する画像形成装置用通信プログラム生成装置(以下、「スタブジェネレータ」という。)の機能的構成を示すブロック図である。スタブジェネレータは、メッセージファイルからヘッダと、クライアントスタブと、サーバスケルトンを自動生成するものである。
【0263】
図14に示すように、スタブジェネレータは、メッセージファイル1701を入力する入力部1702と、メッセージファイル1701に記述された内容の構文チェックを行う構文解析部1703と、メッセージファイル1701の記述内容から、ヘッダ1706とクライアントスタブ1707と、サーバスケルトン1705とを生成してハードディスク等の記憶媒体に格納するコード生成部1704とを備えている。
【0264】
まず、スタブジェネレータに入力されるメッセージファイル1701と、スタブジェネレータで生成されるヘッダ1706、クライアントスタブ1707およびサーバスケルトン1705について説明する。
【0265】
メッセージファイル1701は、プロセス間通信の通信内容をC言語などのソースコードで記述したソースファイルである。図15は、メッセージファイルの記述例を示す説明図である。図15に示すように、メッセージファイル1701には、別のメッセージファイルや、C言語記述のインクルードヘッダを宣言するインクルード宣言と、サーバプロセスとクライアントプロセスの間で送受信するメッセージを記述したメッセージ記述と、クライアントプロセスからサーバプロセスに対して発行する関数の宣言などが記述されている。
【0266】
メッセージは、主としてサーバプロセスとクライアントプロセスとの間でイベントや通知を行う際に発行するものであり、メッセージファイル1701のメッセージ記述としては、メッセージ名と、メッセージIDと、メッセージ方向、メッセージ内容を記述するようになっている。
【0267】
メッセージ方向には、「IN」、「OUT」、「SELF」がある。「IN」は、クライアントプロセスからサーバプロセスに対して送信するメッセージを意味する。「OUT」は、サーバプロセスからクライアントプロセスに対して送信するメッセージを意味する。また、「SELF」は自分自身のプロセスに対して送信するメッセージを意味する。
【0268】
関数は、クライアントプロセスからサーバプロセスに処理要求や設定要求を行う際に発行するものである。メッセージファイル1701の関数宣言には、関数名と、関数の型と、引数のみを記述し、関数の処理内容は記述しないようになっている。
【0269】
クライアントスタブ1707は、クライアントプログラムから呼び出される関数のサーバプロセスに対する発行を記述したソースファイルである。クライアントスタブ1707をコンパイルしてライブラリ化し、クライアントプログラムとリンクすることにより、クライアントプログラムからの関数コールがクライアントスタブ1707を介してサーバプロセスへ発行されるようになっている。
【0270】
図16はスタブジェネレータにより生成されるクライアントスタブ1707の一例を示す説明図である。図16に示すように、クライアントスタブ1707には、後述するサーバスケルトン1705に登録された関数ハンドラを呼び出すことにより、関数コールが行われるようになっている。サーバスケルトン1705は、クライアントスタブ1707から呼び出された関数ハンドラとメッセージハンドラを登録したソースファイルである。
【0271】
図17は、スタブジェネレータにより生成されるサーバスケルトン1705の一例を示す説明図である。図17に示すように、サーバスケルトン1705にはクライアントスタブ1707に記述された関数に対応した関数ハンドラが登録されている。
【0272】
関数ハンドラでは引数の受け渡し部のみが記述され、処理内容を記述する実装記述部は空欄の状態で生成されている。この実装記述部には、クライアントプログラムからクライアントスタブ1707を介して発行される関数の処理内容を、サーバプログラムの開発者が自在に記述できるようになっている。ヘッダ1706は、サーバスケルトン1705とクライアントスタブ1707で共通の定義、宣言などを記述したソースファイルである。
【0273】
図18はスタブジェネレータにより生成されるヘッダ1706の一例を示す説明図である。図18に示すように、ヘッダ1706には、メッセージファイル1701に記述されたインクルード宣言、メッセージID、メッセージの構造体などのメッセージ宣言、関数宣言および関数ハンドラ宣言などが記述された状態で生成されるようになっている。
【0274】
次に、スタブジェネレータによるサーバスケルトン1705、クライアントスタブ1707およびヘッダ1706の生成処理について説明する。図19は、サーバスケルトン、クライアントスタブおよびヘッダの生成処理のフローチャートである。
【0275】
スタブジェネレータの構文解析部1703は、メッセージファイル1701に記述された関数宣言、メッセージ定義、インクルード宣言、C言語記述の文法チェックを行い(ステップS1801)、さらにメッセージファイル1701に定義されている関数名およびメッセージ定義の中のメッセージID、メッセージ名の一意性の判断を行う(ステップS1802)。
【0276】
そして、関数宣言、メッセージ定義、インクルード宣言の記述に文法エラーがあった場合、あるいは関数名、メッセージID、メッセージ名のいずれかが重複している場合には、ユーザに構文エラーである旨のメッセージを通知し処理を終了する(ステップS1803、S1804)。
【0277】
構文解析後、コード生成部1704は、メッセージファイル1701の記述内容から、ヘッダ1706と、サーバスケルトン1705と、クライアントスタブ1707を生成する。具体的には、メッセージファイル1701のインクルード宣言とC言語記述とをヘッダ1706にそのまま転記し、メッセージファイル1701のメッセージ定義に記述されているメッセージ構造体をヘッダ1706にコピーする(ステップS1805)。
【0278】
また、コード生成部1704は、メッセージファイル1701の関数宣言から関数ハンドラ名を自動生成し(例えば、関数名abcの場合、関数ハンドラ名をabc_handlerとして生成する)、生成された関数ハンドラ名をサーバスケルトン1705内に登録する。
【0279】
そして、関数ハンドラの処理内に、引数受け渡しの記述を行うとともに、戻り値領域の生成システムコールの発行を記述する。関数ハンドラの実際の処理内容を記述する実装記述部の欄を空欄とし、その実装記述部の後に、戻り値送信と戻り値領域解放の各システムコールの発行を記述する(ステップS1806)。
【0280】
また、コード生成部1704は、メッセージファイル1701に記述された関数宣言ごとに、関数名と引数の記述をクライアントスタブ1707に登録し、その関数の処理内に、関数コールメッセージ生成コールと関数ハンドラの呼び出しと戻り値解放の各システムコールを記述する(ステップS1807)。なお、関数ハンドラ呼び出しには、発行した関数の戻り値の待ち受ける関数戻り値待ちシステムコールが内部的に発行されるようになっている。
【0281】
このようにスタブジェネレータにより、クライアントスタブ1707とサーバスケルトン1705とヘッダ1706を生成したら、次にサーバオブジェクトおよびクライアントオブジェクトを完成させる。
【0282】
サーバプログラムの開発者は、サーバスケルトン1705の関数ハンドラの実装記述部(空欄)に、関数ハンドラで行うべき処理内容をエディタなどを利用して記述し、サーバスケルトン1705をヘッダ1706とともにコンパイルしてサーバスタブオブジェクトを生成する。また、サーバスケルトン1705に登録した関数ハンドラを宣言するとともに、クライアントプロセスとの間でメッセージファイル1701に記述されたメッセージの送受信を行うメッセージハンドラ、エラー処理を行うエラーハンドラ、サーバの初期化、サーバディスパッチャ起動等のシステムコールの発行を記述したサーバソースファイルを作成してコンパイルし、サーバスタブオブジェクトとリンクして、サーバプログラムを完成させる。
【0283】
一方、クライアントスタブ1707はヘッダ1706とともにコンパイルしてクライアントスタブオブジェクトを生成する。サーバプロセスごとにクライアントスタブオブジェクトを生成し、生成した複数のクライアントスタブオブジェクトをライブラリとする。
【0284】
また、関数の発行、関数ハンドラの宣言、エラー処理を行うエラーハンドラの宣言、クライアントプロセスとの間でメッセージファイル1701に記述されたメッセージの送受信を行うメッセージハンドラ、およびクライアントプロセスの初期化やクライアントディスパッチャ起動等のシステムコールの発行を記述したクライアントプログラムを作成してコンパイルし、スタブのライブラリとリンクすることによりクライアントプログラムを完成させる。
【0285】
図20は、クライアントプログラムから関数コールを行った場合におけるサーバプログラムとの呼び出しおよび応答のシーケンスを示す説明図である。なお、サーバプログラムとクライアントプログラムは実際は実行可能形式のオブジェクトファイルであるが、図20では、説明の都合上いずれもソースコードで表示している。
【0286】
クライアントプログラムからサーバプログラムに対して、たとえばOpen関数をコールすると、クライアントスタブオブジェクトで定義されたOpenが呼び出される(ステップS1901)。そして、このスタブのOpenの処理の中で、Openの関数ハンドラOpen_handlerがサーバプログラムに対してコールされる(ステップS1902)。
【0287】
サーバプログラムでは、クライアントスタブオブジェクトから関数ハンドラOpen_handlerの発行を受け取って、サーバスタブオブジェクトに登録されているOpen_handlerの実装記述部に記述されている処理を実行し(ステップS1903)、その実行結果をクライアントスタブへ戻り値として返す(ステップS1904)。クライアントプログラムでは、この戻り値をクライアントスタブから受け取って(ステップS1905)、次の処理へ移行する。
【0288】
このように実施の形態2のスタブジェネレータでは、メッセージファイル1701に関数宣言を記述することによりクライアントスタブ1707とサーバスケルトン1705を容易に生成することができる。しかも生成されるサーバスケルトン1705の実装記述部は空欄となっているので、プログラム開発者は必要に応じて関数の処理内容を容易に変更するができる。
【0289】
このため複合機100に可変性をもたせることができるとともに、多種多様な機能を実現させることができる。さらに、サードベンダーなどの他社がクライアントプログラムの開発を行う場合でも、クライアントプログラムには提供される関数コールを記述するだけでプロセス間通信が可能となるので、内部の通信プロトコルの隠蔽性を保つことが可能となる。
【0290】
また、実施の形態2のスタブジェネレータでは、プロセス間通信を関数コールで実現しているので、ジョブの並列実行をスレッドで実現した場合でも、高速なプロセス間通信が可能となる。また、関数からの戻り値によってスレッド間の同期をとることができるので、同期のための処理プログラムを別途作成する必要がなくなり、プログラム開発の労力を低減することができる。
(実施の形態3)
実施の形態1にかかる複合機100は、クライアントプロセスとなるアプリプロセスが、サーバプロセスとなる各コントロールサービスと同一複合機内部で動作していた。この実施の形態3にかかる複合機100は、ネットワークに接続された他の複合機のアプリプロセスをクライアントプロセスとして各コントロールサービスがサービスを提供するものである。
【0291】
図21は、実施の形態3にかかる複合機の構成を示すブロック図である。図21に示すように、実施の形態3では複数の複合機1300a,1300bがLANなどのネットワーク1340によって接続された構成となっている。なお、図21では、2台の複合機1300a,1300bがネットワーク1340で接続された構成となっているが、3台以上の複合機をネットワーク1340で接続した構成でもよい。
【0292】
図21に示すように、ネットワーク1340上の各複合機1300a,1300bは、実施の形態1の複合機と同様の構成となっている。このため、これらの構成について詳細な説明は省略する。
【0293】
実施の形態3の複合機では、実施の形態1と同様に、主としてコピーアプリ1312、プリンタアプリ1311、スキャナアプリ1314、ファックスアプリ1313などのアプリケーションのプロセス、およびECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスのプロセスが、コントロールサービスまたはSRM1323をサーバプロセスとしたクライアントプロセスとなるが、さらにネットワークに接続された他の複合機内部で動作しているECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスをサーバプロセスとしたクライアントプロセスとなる。
【0294】
また、実施の形態3の複合機では、実施の形態1と同様に、主としてECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスおよびSRM1323のプロセスが、アプリケーションのプロセスまたはコントロールサービスもしくはSRM1323のプロセスをクライアントプロセスとしたサーバプロセスとなるが、さらにネットワークに接続された他の複合機内部で動作しているコピーアプリ1312、プリンタアプリ1311、スキャナアプリ1314、ファックスアプリ1313などのアプリケーションのプロセスをクライアントプロセスとしたサーバプロセスにもなる。
【0295】
実施の形態3の複合機におけるこれらサーバプロセスとクライアントプロセスの関係、およびサーバプロセス、クライアントプロセスの各構成は実施の形態1の複合機で説明した図2および図3と同様であるので詳細な説明は省略する。
【0296】
各コントロールサービスとSRM1323と各アプリとは、実施の形態1の複合機100と同様に、それぞれプロセスとして汎用OS上に生成されて実行される。各プロセス内部には、複数のスレッドが起動され、汎用OSの管理下でこれらのスレッドのCPU占有時間を切り替えることにより並列実行が実現されている。
【0297】
また、実施の形態3の複合機1300a,1300bでは、アプリケーションなどのクライアントプロセスは、コントロールサービスなどのサーバプロセスのサービスを要求するために、クライアントプロセス内のスレッドからサーバプロセスに対して関数コールを行い、その関数戻り値を受信すること、およびスレッドからメッセージをサーバプロセスに送信することによってプロセス間通信を行う。そして、さらにネットワーク上の他の複合機で動作するサーバプロセスに対して関数コールおよびメッセージの送信も行えるようになっている。
【0298】
一方、コントロールサービスなどのサーバプロセスでは、クライアントプロセスに対するプロセス間通信はメッセージの送信のみで行われる。さらにサーバプロセスでは、ネットワーク上の他の複合機で動作するプロセスをクライアントプロセスとして、このネットワーク上のクライアントプロセスに対してメッセージの送信も可能となっている。
【0299】
クライアントプロセスで起動されるクライアントディスパッチャは実施の形態1の複合機100と同様の構成をしており、さらにネットワーク1340に接続された他の複合機からの関数戻り値およびOUT方向のメッセージの受信も監視している。
【0300】
このため、ネットワーク上の他の複合機のプロセスとプロセス間通信を行えるように、クライアントプロセスから発行する関数の形式およびメッセージの形式は、ネットワークアドレスなどの情報を指定できるような形式で提供される。
【0301】
サーバプロセスで起動されるサーバディスパッチャも、実施の形態1の複合機100におけるサーバプロセスと同様の構成をしているが、さらにネットワーク1340に接続された他の複合機で動作するクライアントプロセスのスレッドからの関数コールおよびIN方向のメッセージも監視している。
【0302】
サーバプロセスでは、関数コールをサーバディスパッチャで受信したときに実行される関数ハンドラが、ネットワーク1340上のクライアントプロセスに関数戻り値を返すために、関数コールしたプロセスの存在する複合機のネットワークアドレスなどを指定できるようになっている。また、サーバプロセスから送信するメッセージもネットワークアドレスなどを指定できるようになっている。
【0303】
次に、このように構成された実施の形態3にかかる複合機1300a,1300bにおいて、ネットワーク1340上の異なる複合機を利用してプリント動作を行う場合のプロセス間通信について説明する。図22は、実施の形態3のネットワークに接続された2つの複合機を利用してプリンタ動作を行う場合のプリンタアプリ、ECSのプロセス間のデータシーケンスを示す説明図である。
【0304】
プリンタアプリプロセス1311が印刷要求を受信した場合には(ステップS1401)、実施の形態1において図5を用いて説明したとおり、複合機1300aのプリンタアプリプロセス1311のスレッドがECSプロセス1324に対して、ジョブ動作モード設定関数コールとジョブスタート要求関数コールを順次行う。
【0305】
実施の形態3では、このとき、複合機1300aのプリンタアプリプロセス1311が、ネットワーク1340を介して接続された他の複合機1300bのネットワークアドレスを指定し、ジョブ動作モード設定関数コールとジョブスタート要求関数コールを行っている(ステップS1402、S1404)。
【0306】
これにより、ジョブ動作モード設定関数コール、ジョブスタート要求関数コールは、自己の複合機1300aのECSプロセス1324ではなく、ネットワークアドレスで指定された複合機1300bのECSプロセス1324に対して送信される。そして、それぞれの関数コールを行ったスレッドは関数戻り待ち状態になる。
【0307】
複合機1300bのECSプロセス1324では、サーバディスパッチャがネットワーク1340を介してジョブ動作モード設定関数コール、ジョブスタート要求関数コールをそれぞれ受信し、各関数ハンドラによってプリンタジョブの動作モード設定、プリンタジョブの開始処理を行う。そして、ジョブ動作モード設定関数の戻り値およびジョブオープン関数の戻り値を、複合機1300aのネットワークアドレスを指定して送信する(ステップS1403、S1405)。
【0308】
複合機1300aのプリンタアプリプロセス1311では、クライアントディスパッチャによって複合機1300bのECSプロセス1324からのジョブ動作モード設定関数の戻り値およびジョブオープン関数の戻り値を受信する。そして、実施の形態1の複合機と同様に、関数戻り待ち状態のスレッドを関数戻り待ちキューから抽出して、ジョブ動作モード設定関数の戻り値とジョブオープン関数の戻り値のそれぞれを抽出されたスレッドに送信する。
【0309】
これ以降のECSプロセス1324、MCSプロセス1325、SRMプロセス123との間のプロセス間通信は同一複合機内部で行われるものであり、実施の形態1で説明したプリンタ動作と同様である。これにより、複合機1300aにおける印刷要求に対して、実際のプリント処理が複合機1300bで行われることになる。
【0310】
複合機1300bにおけるプリント処理が終了すると、複合機1300bのECSプロセス1324はジョブエンド通知メッセージをプリンタアプリプロセスに送信する。このとき、ECSプロセス1324のサーバディスパッチャは、ネットワーク1340上の複合機1300aのネットワークアドレスを指定してジョブエンド通知メッセージを送信する(ステップS1406)。
【0311】
複合機1300aのプリンタアプリプロセス1311では、クライアントディスパッチャによって、ネットワークを介して送信されてきたジョブエンド通知メッセージを受信し、これによりプリンタ動作を完了する。
【0312】
このように、実施の形態3では、ネットワークに接続された複合機1300aで動作するアプリプロセスと、複合機1300bで動作するECSプロセス1324との間でプロセス間通信を行って、複合機1300aで発生した要求に対しネットワーク1340上の他の複合機1300bでプリント処理を行えるので、要求の生じた複合機のみならずネットワーク上の複合機を利用して多種多様な機能を実現することができる。
【0313】
例えば、複合機1300aで印刷要求が生じたときに、複合機1300aのプリンタエンジンが他のジョブに占有されている場合には、プリンタアプリプロセスでこれを判断してECSプロセス1324に対する関数コールをネットワーク1340上の他の複合機1300bのECSプロセス1324への関数コールへ切り替える等の処理を行えば、プリント開始までに時間を要することを防止でき、ユーザビリティの向上を図ることができる。
【0314】
なお、実施の形態3では、プリンタ動作の例をあげてネットワーク1340に接続された2つの複合機1300a,1300bにおけるプロセス間通信について説明したが、スキャナ動作、コピー動作、ファクシミリ送信動作においても、複合機1300a内のスキャナアプリプロセス1314、コピーアプリプロセス1312、ファックスアプリプリセス1313と、ECSプロセス1324とのプロセス間通信もプリンタ動作の場合と同様に行われる。
【0315】
また、実施の形態3の複合機1300a,1300bでは、アプリプロセスとECSプロセス1324とネットワーク1340を介したプロセス間通信に説明したが、アプリプロセスとECSプロセス1324以外のコントロールサービスおよびシステムリソースマネージャ(SRM)1323のプロセス間通信も、アプリプロセスとECSプロセス1324間の通信と同様に行われる。
【0316】
さらに、実施の形態3の複合機1300a,1300bでは、アプリプロセスとネットワーク1340上の別の複合機内のECSプロセス1324とが直接プロセス間通信を行っているが、NCS1328を介して異なる複合機のアプリプロセスとECSプロセス1324とが通信を行うように構成しても良い。
【0317】
すなわち、NCS1328において、アプリプロセスからの関数コールやメッセージを一旦受信して、ネットワーク1340上の他の複合機1300bのネットワークアドレスを指定した上で、関数コールやメッセージを複合機1300bのNCSプロセス1328へ送信するように構成することも可能である。
【0318】
この場合には、アプリプロセスやECSプロセス1324において、ネットワークアドレスに関する処理の追加が不要となり、モジュール間の独立性がより高まるので、複合機により可変性を持たせることができるという利点がある。
(実施の形態4)
実施の形態3にかかる複合機1300a,1300bでは、ネットワーク1340に接続された他の複合機のアプリプロセスをクライアントプロセスとして各コントロールサービスがサービスを提供していた。この実施の形態4にかかる複合機は、ネットワークに接続された他の複合機のコントロールサービスをクライアントプロセスとして、各コントロールサービスがサービスを提供するものである。
【0319】
実施の形態4では、図21に示す実施の形態3の複合機1300a,1300bと同様に、複数の複合機がLANなどのネットワーク1340によって接続された構成となっている。実施の形態4におけるネットワーク1340上の各複合機1300a,1300bは、実施の形態1の複合機と同様の構成であるため、これらの構成について詳細な説明は省略する。
【0320】
実施の形態4の複合機では、実施の形態1と同様に、主としてコピーアプリ1312、プリンタアプリ1311、スキャナアプリ1314、ファックスアプリ1313などのアプリケーションプロセス、およびECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスのプロセスが、コントロールサービスまたはSRM1323をサーバプロセスとしたクライアントプロセスとなるが、さらにネットワークに接続された他の複合機内部で動作しているECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスをサーバプロセスとしたクライアントプロセスとなる。
【0321】
また、実施の形態4の複合機では、実施の形態1と同様に、主としてECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスおよびSRM1323のプロセスが、アプリケーションサービスまたはコントロールサービスもしくはSRM1323をクライアントプロセスとしたサーバプロセスとなるが、さらにネットワークに接続された他の複合機内部で動作しているコントロールサービスをクライアントプロセスとしたサーバプロセスにもなる。
【0322】
実施の形態4の複合機1300a,1300bにおけるこれらサーバプロセスとクライアントプロセスの関係、およびサーバプロセス、クライアントプロセスの各構成は実施の形態1の複合機で説明した図2および図3、および実施の形態3と同様であるので詳細な説明は省略する。
【0323】
実施の形態4の複合機1300a,1300bでは、コントロールサービスがクライアントプロセスとなる場合に、他のコントロールサービスなどのサーバプロセスのサービスを要求するために、クライアントプロセス内のスレッドからサーバプロセスに対して関数コールを行い、その関数戻り値を受信すること、およびスレッドからメッセージをサーバプロセスに送信することによってプロセス間通信を行う。そして、さらにネットワーク1340上の他の複合機で動作する他のコントロールサービスまたはSRM1323などのサーバプロセスに対して関数コールおよびメッセージの送信も行えるようになっている。
【0324】
コントロールサービスなどのクライアントプロセスで起動されるクライアントディスパッチャは、実施の形態3の複合機1300a,1300bと同様に、ネットワーク1340に接続された他の複合機で動作するコントロールサービスまたはSRM1323(サーバプロセス)からの関数戻り値およびOUT方向のメッセージの受信も監視している。
【0325】
このため、ネットワーク1340上の他の複合機のプロセスとプロセス間通信を行えるように、クライアントプロセスから発行する関数の形式およびメッセージの形式は、ネットワークアドレスなどの情報を指定できるような形式で提供される。
【0326】
サーバプロセスで起動されるサーバディスパッチャも、実施の形態3の複合機1300a,1300bにおけるサーバプロセスと同様に、ネットワーク1340に接続された他の複合機で動作するクライアントプロセスのスレッドからの関数コールおよびIN方向のメッセージも監視している。
【0327】
実施の形態4においても、サーバプロセスおよびクライアントプロセスとなるECS1324、MCS1325、FCS1327、NCS1328などのコントロールサービスおよびSRM1323では、関数コールをサーバディスパッチャで受信したときに実行される関数ハンドラが、関数コールしたクライアントプロセスの存在する複合機のネットワークアドレスなどを指定できるようになっている。また、サーバプロセスから送信するメッセージもネットワークアドレスなどを指定できるようになっている。
【0328】
次に、このように構成された実施の形態4にかかる複合機1300a,1300bにおいて、ネットワーク1340上の異なる複合機を利用してファクシミリ送信動作を行う場合のプロセス間通信について説明する。図23は、実施の形態4のネットワークに接続された2つの複合機を利用してファクシミリ送信動作を行う場合のFCSとECSとMCSのプロセス間のデータシーケンスを示す説明図である。
【0329】
FCSプロセス1327がファックスアプリプロセス1313から送信スタート要求を受信した場合には(ステップS1501)、複合機1300aのFCSプロセス1327のスレッドが、ネットワーク1340に接続された他の複合機1300bのネットワークアドレスを指定して、ジョブ動作モード設定関数コールとジョブスタート要求関数コールを順次行う(ステップS1502、S1504)。
【0330】
これにより、ジョブ動作モード設定関数コール、ジョブスタート要求関数コールは、ネットワークアドレスで指定された複合機1300bで動作するECSプロセス1324に対してネットワークを介して送信される。
【0331】
複合機1300bのECSプロセス1324では、サーバディスパッチャがネットワーク1340を介してジョブ動作モード設定関数コール、ジョブスタート要求関数コールをそれぞれ受信し、各関数ハンドラによってプリンタジョブの動作モード設定、プリンタジョブの開始処理を行う。そして、ジョブ動作モード設定関数の戻り値およびジョブオープン関数の戻り値を、複合機1300aのネットワークアドレスを指定して送信する(ステップS1503、S1505)。
【0332】
複合機1300aのFCSプロセス1327では、クライアントディスパッチャによって複合機1300bのECSプロセス1324からのジョブ動作モード設定関数の戻り値およびジョブオープン関数の戻り値を受信する。そして、実施の形態1の複合機と同様に、関数戻り待ち状態のスレッドを関数戻り待ちキューから抽出して、ジョブ動作モード設定関数の戻り値とジョブオープン関数の戻り値のそれぞれを抽出されたスレッドに送信する。
【0333】
複合機1300bのECSプロセス1324は、MCSプロセス1325に対してメモリ確保要求関数コールを行い(ステップS1505)、またSRMプロセス123に対してスキャナエンジンの資源獲得要求関数コールを行う(ステップS1506)。かかる関数コールに対するMCSプロセス1325およびSRMプロセス1323の処理は、実施の形態1で説明したとおりである。
【0334】
複合機1300bのECSプロセス1324では、スキャナエンジンの資源獲得関数の戻り値を受信したら、複合機1300aのネットワークアドレスを指定したスキャンパラメータ要求メッセージを、複合機1300aのFCSプロセス1327にネットワークを介して送信する(ステップS1507)。
【0335】
複合機1300aのFCSプロセス1327では、このスキャナパラメータ確定要求メッセージを受信すると、スキャナパラメータのメッセージを、複合機1300bのネットワークアドレスを指定することにより、複合機1300bのECSプロセス1324に対してネットワークを介して送信する(ステップS1508)。ECSプロセス1324では、サーバディスパッチャがスキャナパラメータメッセージをネットワークを介して受信する。
【0336】
これ以降のプロセス間通信は、同一複合機1300b内部で行われるものであり、実施の形態1で説明したファクシミリ送信と同様である。これにより、複合機1300aにおけるファクシミリ送信スタート要求に対して、複合機1300bでファクシミリ送信が行われることになる。複合機1300bにおけるスキャンおよびファクシミリ送信処理が終了すると、複合機1300bのECSプロセス1324のサーバディスパッチャは、ネットワーク1340上の複合機1300aのネットワークアドレスを指定してスキャン終了通知メッセージを複合機1300aのFCSプロセス1327に送信する(ステップS1509)。
【0337】
複合機1300aのFCSプロセス1327では、クライアントディスパッチャによって、ネットワーク1340を介して送信されてきたスキャン終了通知メッセージを受信し、これによりファクシミリ送信動作を完了する。
【0338】
このように、実施の形態4の複合機では、ネットワークに接続された複合機1300aで動作するFCSプロセス1327と、複合機1300bで動作するECSプロセス1324との間でプロセス間通信を行って、複合機1300aで発生した要求に対しネットワーク1340上の他の複合機1300bでファクシミリ送信処理を行えるので、要求の生じた複合機のみならずネットワーク1340上の複合機を利用して多種多様な機能を実現することができる。
【0339】
例えば、複合機1300aでファクシミリ送信要求が生じたときに、複合機1300aのファクシミリエンジンがファクシミリ受信ジョブに占有されている場合には、FCSプロセス1327でこれを判断してECSプロセス1324に対する関数コールをネットワーク1340上の他の複合機1300bのECSプロセス1324への関数コールへ切り替える等の処理を行えば、ファクシミリ送信を直ちに行うことができ、複合機のユーザビリティの向上を図ることができる。
【0340】
なお、実施の形態4では、ファクシミリ送信動作の例をあげてネットワーク1340に接続された2つの複合機1300a,1300bにおけるプロセス間通信について説明したが、スキャナ動作、コピー動作、プリント動作においても、複合機1300a内のコントロールサービスと複合機1300b内のコントロールサービスのプロセス間通信も同様に行われる。
【0341】
また、実施の形態4の複合機では、FCSプロセス1327とECSプロセス1324とのネットワーク1340を介したプロセス間通信に説明したが、他のコントロールサービス間のネットワーク1340を介したプロセス間通信も、FCSプロセス1327とECSプロセス1324の通信と同様に行われる。
【0342】
さらに、実施の形態4の複合機では、FCSアプリプロセス1327とネットワーク1340上の別の複合機内のECSプロセス1324とが直接プロセス間通信を行っているが、この場合も、NCSプロセス1328を介して異なる複合機のコントロールサービス間の通信を行うように構成しても良い。
【0343】
以上、実施の形態1〜4の複合機において使用した関数、メッセージはすべて一例であり、とくにこれらに限定されるものではなく、任意の関数やメッセージを定義して使用することができる。
【0344】
【発明の効果】
以上説明したように、発明によれば、ユーザサービス及びコントロールサービスの間の独立性を維持しながら互いにサービスやデータの授受をプロセス間通信によって行うことができ、機能的に多様性のある装置を実現することが可能である。
【図面の簡単な説明】
【図1】この発明の実施の形態の画像形成装置(複合機)の構成を示すブロック図である。
【図2】実施の形態1の複合機におけるサーバプロセスとクライアントプロセスの関係を示すブロック図である。
【図3】実施の形態1の複合機で動作するクライアントプロセスの構成を示すブロック図である。
【図4】実施の形態1の複合機で動作するサーバプロセスの構成を示すブロック図である。
【図5】実施の形態1の複合機でプリンタ動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間のデータシーケンスを示す説明図である。
【図6】実施の形態1の複合機でプリンタ動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【図7】実施の形態1の複合機でスキャナ動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間のデータシーケンスを示す説明図である。
【図8】実施の形態1の複合機でスキャナ動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【図9】実施の形態1の複合機でコピー動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間のデータシーケンスを示す説明図である。
【図10】実施の形態1の複合機でコピー動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【図11】実施の形態1の複合機でファクシミリ送信動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間のデータシーケンスを示す説明図である。
【図12】実施の形態1の複合機でファックス送信動作を行う場合のアプリケーション、コントロールサービスおよびシステムリソースサービスの各プロセス間の関数およびメッセージの送受信の関係を示す説明図である。
【図13】実施の形態2の複合機100上で動作するサーバプロセスとクライアントプロセスの関係を詳細に示すブロック図である。
【図14】実施の形態2のクライアントプロセスとサーバプロセスとを生成する画像形成装置用通信プログラム生成装置(スタブジェネレータ)の機能的構成を示すブロック図である。
【図15】メッセージファイルの記述例を示す説明図である。
【図16】スタブジェネレータにより生成されるクライアントスタブの一例を示す説明図である。
【図17】スタブジェネレータにより生成されるサーバスケルトンの一例を示す説明図である。
【図18】スタブジェネレータにより生成されるヘッダの一例を示す説明図である。
【図19】サーバスケルトン、クライアントスタブおよびヘッダの生成処理のフローチャートである。
【図20】クライアントプログラムから関数コールを行った場合におけるサーバプログラムとの呼び出しおよび応答のシーケンスを示す説明図である。
【図21】実施の形態3にかかる複合機の構成を示すブロック図である。
【図22】実施の形態3のネットワークに接続された2つの複合機を利用してプリンタ動作を行う場合のプリンタアプリとECSプロセス間のデータシーケンスを示す説明図である。
【図23】実施の形態4のネットワークに接続された2つの複合機を利用してファクシミリ送信動作を行う場合のFCSとECSとMCSのプロセス間のデータシーケンスを示す説明図である。
【符号の説明】
100,1300a,1300b 複合機
101,1301 白黒ラインプリンタ
102,1302 カラーラインプリンタ
103,1303 スキャナ
104,1304 ファクシミリ
110,1310 ソフトウェア群
111,1311 プリンタアプリ
112,1312 コピーアプリ
113,1313 ファックスアプリ
114,1314 スキャナアプリ
115,1315 ネットファイルアプリ
116,1316 工程検査アプリ
120,1320 プラットホーム
121,1321 汎用OS
122,1322 SCS
123,1323 SRM
124,1324 ECS
125,1325 MCS
126,1326 OCS
127,1327 FCS
128,1328 NCS
129,1329 FCUH
130,1330 アプリケーション
201,1600 クライアントプロセス
202,1610,1620 サーバプロセス
203,1603 クライアントディスパッチャ
204,1611 サーバディスパッチャ
1601,1613,1623 スレッド
1602 クライアントスタブ
1612,1622 サーバスケルトン

Claims (18)

  1. 実行する処理で使用されるハードウェア資源と、前記実行する処理に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有するプロセス間通信機能を有する装置であって、
    前記ユーザサービスおよびコントロールサービスのそれぞれは、サーバプロセスまたはクライアントプロセスとして動作する一または複数のスレッドを含むプロセスであり、
    前記サーバプロセスのスレッドは、前記クライアントプロセスのスレッドに提供する一または複数のサービスを定義した関数に対応する処理を実行するものであり
    前記クライアントプロセスのスレッドは通信の動作主体であり、前記サーバプロセスのスレッドに対して個別にクライアントとしてサービスの提供を要求する際に関数呼び出しを行い、
    前記ユーザサービスおよび前記コントロールサービスは、前記クライアントプロセスとして動作するときに、前記サーバプロセスへの関数呼び出しに対する関数戻り値の受信を監視し、受信した関数戻り値を前記関数呼び出しを行ったスレッドに受け渡す、スレッドで実現されたクライアント監視手段と、
    前記サーバプロセスとして動作するときに、前記一又は複数のクライアントプロセスからの関数呼び出しを監視し、前記クライアントプロセスから関数呼び出しを受信したときに、呼び出された関数に対応した処理を関数ハンドラで実行するサーバ監視手段と
    を備えており、一のプロセスに一のサーバ監視手段と一又は複数のクライアント監視手段とを同時に起動可能であることを特徴とする装置。
  2. 前記コントロールサービスは、前記ユーザサービスをクライアントプロセスとしたサーバプロセスとして動作して、前記ユーザサービスの少なくとも2つが共通的に必要とするサービスを定義した関数に対応する処理を実行するスレッドを有し、
    前記ユーザサービスのスレッドは、前記コントロールサービスにサービスの提供を要求する際に関数呼び出しを行うことを特徴とする請求項1記載の装置。
  3. 前記コントロールサービスは、他のコントロールサービスをクライアントプロセスとしたサーバプロセスとして動作して、前記他のコントロールサービスの少なくとも2つが共通的に必要とするサービスを定義した関数に対応する処理を実行するスレッドを有しており、
    前記他のコントロールサービスのスレッドは、前記コントロールサービスにサービスの提供を要求する際に関数呼び出しを行うことを特徴とする請求項1又は2記載の装置。
  4. 前記コントロールサービスは、前記サーバプロセスとして動作するとともに前記クライアントプロセスとして動作することを特徴とする請求項1乃至3いずれか一項記載の装置。
  5. 前記クライアント監視手段は、関数の呼び出し後に関数戻り値待ち状態のスレッドの識別子を一時的に格納する関数戻り待ちキューをさらに備え、前記サーバプロセスから前記関数戻り値を受信したときに、受信した関数戻り値を、前記関数戻り待ちキューに格納された識別子の前記スレッドに送信することを特徴とする請求項1乃至4いずれか一項記載の装置。
  6. 前記サーバプロセスおよび前記クライアントプロセスは、さらにイベントまたは通知に関するメッセージの送信,受信または送受信の何れかを行うことを特徴とする請求項1乃至5いずれか一項記載の装置。
  7. 前記クライアント監視手段は、さらにサーバプロセスからのメッセージの受信を監視することを特徴とする請求項6記載の装置。
  8. 前記クライアント監視手段は、受信したメッセージに基づいた処理を実行するメッセージハンドラをさらに備えたことを特徴とする請求項7記載の装置。
  9. 前記サーバ監視手段は、さらにクライアントプロセスからのメッセージの受信を監視することを特徴とする請求項1記載の装置。
  10. 前記サーバ監視手段は、受信したメッセージに基づいた処理を実行するメッセージハンドラをさらに備えたことを特徴とする請求項9記載の装置。
  11. 実行する処理で使用されるハードウェア資源と、前記実行する処理に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有するプロセス間通信機能を有する装置であって、
    前記ユーザサービスおよびコントロールサービスのそれぞれは、サーバプロセスまたはクライアントプロセスとして動作する一又は複数のスレッドを含むプロセスであり、
    前記コントロールサービスは、ネットワークに接続された他の装置で動作するクライアントプロセスに対するサーバプロセスとして動作し、サーバプロセスのスレッドとして前記他の装置のクライアントプロセスのスレッドに提供する一または複数のサービスを定義した関数に対応する処理を実行するスレッドを有し、
    前記クライアントプロセスのスレッドは通信の動作主体であり、前記サーバプロセスのスレッドに対して個別にクライアントとしてサービスの提供を要求する際に関数呼び出しを行い、
    前記コントロールサービスは、前記クライアントプロセスとして動作するときに、前記サーバプロセスへの関数呼び出しに対する関数戻り値の受信を監視し、受信した関数戻り値を前記関数呼び出しを行ったスレッドに受け渡す、スレッドで実現されたクライアント監視手段と、
    前記サーバプロセスとして動作するときに、前記他の装置又は自装置の前記一又は複数のクライアントプロセスからの関数呼び出しを監視し、前記クライアントプロセスから関数呼び出しを受信したときに、呼び出された関数に対応した処理を関数ハンドラで実行するサーバ監視手段と
    を備えており、一のプロセスに一のサーバ監視手段と一又は複数のクライアント監視手段とを同時に起動可能であることを特徴とする装置。
  12. 前記コントロールサービスの各プロセスが備える一または複数のスレッドは、前記他の装置のクライアントプロセスのスレッドに提供するサービスを実行することを特徴とする請求項11記載の装置。
  13. 前記サーバ監視手段は、さらに前記他の装置のクライアントプロセスからのメッセージの受信を監視することを特徴とする請求項12記載の装置。
  14. 前記コントロールサービスは、さらに前記他の装置のクライアントプロセスに対しメッセージを送信することを特徴とする請求項11乃至13いずれか一項記載の装置。
  15. 前記コントロールサービスは、前記他の装置で動作するユーザサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする請求項11乃至14いずれか一項記載の装置。
  16. 前記コントロールサービスは、前記他の装置で動作するコントロールサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする請求項11乃至15いずれか一項記載の装置。
  17. 前記ユーザサービスは、前記他の装置で動作するコントロールサービスをサーバプロセスとしたクライアントプロセスとして動作することを特徴とする請求項11乃至16いずれか一項記載の装置。
  18. 前記コントロールサービスは、前記他の装置で動作するコントロールサービスをサーバプロセスとしたクライアントプロセスとして動作することを特徴とする請求項11乃至17いずれか一項記載の装置。
JP2002244001A 2001-08-27 2002-08-23 プロセス間通信機能を有する装置 Expired - Fee Related JP4052901B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2002244001A JP4052901B2 (ja) 2001-08-27 2002-08-23 プロセス間通信機能を有する装置
US10/227,921 US7318083B2 (en) 2001-08-27 2002-08-27 Information processing system
EP02019030A EP1292109A1 (en) 2001-08-27 2002-08-27 Information processing system

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2001-257045 2001-08-27
JP2001257045 2001-08-27
JP2002244001A JP4052901B2 (ja) 2001-08-27 2002-08-23 プロセス間通信機能を有する装置

Publications (2)

Publication Number Publication Date
JP2003162419A JP2003162419A (ja) 2003-06-06
JP4052901B2 true JP4052901B2 (ja) 2008-02-27

Family

ID=26621076

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002244001A Expired - Fee Related JP4052901B2 (ja) 2001-08-27 2002-08-23 プロセス間通信機能を有する装置

Country Status (1)

Country Link
JP (1) JP4052901B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4695465B2 (ja) 2004-09-28 2011-06-08 株式会社リコー 画像形成装置、ハードウェア制御方法、および、ハードウェア制御プログラム
US8392924B2 (en) * 2008-04-03 2013-03-05 Sharp Laboratories Of America, Inc. Custom scheduling and control of a multifunction printer
CN114036092A (zh) * 2021-11-16 2022-02-11 深圳市联影高端医疗装备创新研究院 一种医学设备的操作管理系统、方法及存储介质

Also Published As

Publication number Publication date
JP2003162419A (ja) 2003-06-06

Similar Documents

Publication Publication Date Title
JP3679349B2 (ja) 画像形成装置、画像形成方法、画像形成プログラムおよびアプリケーションプログラム
US7318083B2 (en) Information processing system
US8584137B2 (en) Image processing system for judging whether a partial job should be processed by an own device or another device
KR20060046266A (ko) 작업 처리 방법, 저장 매체, 프로그램 및 시스템
JP2002082806A (ja) 画像形成装置、画像形成方法およびプログラム
JP6066006B2 (ja) 画像形成装置
JP2004114674A (ja) 画像形成装置、記憶領域確保方法
JP6512902B2 (ja) 画像処理装置、その制御方法及び制御プログラム
JP4052901B2 (ja) プロセス間通信機能を有する装置
JP4350728B2 (ja) 画像形成装置およびプロセス間通信方法
JP2006139776A (ja) 情報処理装置
JP2003177931A (ja) 画像形成装置
JP4052902B2 (ja) 画像形成装置およびプロセス間通信方法
JPH10143450A (ja) ジョブ処理装置及び方法
JP3910992B2 (ja) 画像形成装置、画像形成方法および画像形成プログラム
JP2005287042A (ja) 画像形成装置、画像形成方法および画像形成プログラム
JP2006202332A (ja) 代行印刷処理装置、代行印刷処理方法、プログラム、および記憶媒体
JP4500326B2 (ja) プロセス間通信プログラムおよび画像情報処理装置
JP3509815B2 (ja) 印刷システム及び画像形成装置及びジョブ管理方法
JP2007305143A (ja) 情報処理装置および情報処理方法
JP2006005963A (ja) 情報処理装置および情報処理方法
JP6406067B2 (ja) 画像形成出力制御装置、画像処理システム、画像処理プログラム
JP2003072164A (ja) データ処理装置、データ処理システム、データ処理方法、記憶媒体、及びプログラム
JP2016018534A (ja) サーバ、ジョブ管理システム、ジョブ管理方法及びプログラム
JPH08228254A (ja) デジタル複合機

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060425

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060626

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070116

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070215

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20070326

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20071106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071204

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101214

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4052901

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101214

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111214

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111214

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121214

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131214

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees