(57)【要約】【課題】可変性のあるアーキテクチャおよび多種多様な機能を実現することができるとともに、ソフトウェア開発効率の向上を図ることができる画像形成装置およびプロセス間通信方法を得ること目的とする。【解決手段】ハードウェア資源とプログラムとを有する画像形成装置であって、一または複数のサービス要求を含むエージェントを受信し、エージェントのサービス要求ごとに一または複数のコントロールサービスを選定して、選定されたコントロールサービスに対してサービス要求を行うエージェント処理手段を備えたことにより上記課題を解決する。【選択図】図２
2007012057.tif 000002
【特許請求の範囲】
【請求項１】
画像形成処理で使用されるハードウェア資源と、画像形成に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有する画像形成装置であって、
一または複数のサービス要求を含むエージェントを受信し、該エージェントのサービス要求ごとに一または複数の前記コントロールサービスを選定して、選定された前記コントロールサービスに対してサービス要求を行うエージェント処理手段を備えたことを特徴とする画像形成装置。
【請求項２】
前記エージェント処理手段は、前記サービス要求に必要なコントロールサービスが正常動作しているか否かを判断し、正常動作してない場合に、ネットワークを介して接続された他の画像形成装置に前記エージェントを送信することを特徴とする請求項１記載の画像形成装置。
【請求項３】
前記エージェント処理手段は、さらに、前記サービス要求ごとに一または複数の前記ユーザサービスを選定して、選定された前記ユーザサービスに対してサービス要求を行うことを特徴とする請求項１又は２記載の画像形成装置。
【請求項４】
前記エージェント処理手段は、前記サービス要求に必要な前記ユーザサービスが正常動作しているか否かを判断し、正常動作していない場合に、ネットワークを介して接続された他の画像形成装置に前記エージェントを送信することを特徴とする請求項３記載の画像形成装置。
【請求項５】
前記ユーザサービスに含まれ、前記エージェント処理手段として動作するエージェントアプリをさらに備えたことを特徴とする請求項１乃至４何れか一項記載の画像形成装置。
【請求項６】
前記コントロールサービスは、ネットワークを介して接続された他の画像形成装置で動作するクライアントプロセスに対するサーバプロセスとして動作し、前記他の画像形成装置のクライアントプロセスに提供する一または複数のサービスを定義したメソッドを有するオブジェクトであることを特徴とする請求項１乃至５何れか一項記載の画像形成装置。
【請求項７】
前記コントロールサービスの各プロセスは、前記他の画像形成装置のクライアントプロセスに提供するサービスを定義したメソッドを実行する一または複数のスレッドを生成するものであることを特徴とする請求項６記載の画像形成装置。
【請求項８】
前記コントロールサービスは、前記他の画像形成装置で動作するユーザサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする請求項６又は７記載の画像形成装置。
【請求項９】
前記コントロールサービスは、前記他の画像形成装置で動作するコントロールサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする請求項６乃至８何れか一項記載の画像形成装置。
【請求項１０】
前記コントロールサービスは、前記他の画像形成装置で動作するコントロールサービスをサーバプロセスとしたクライアントプロセスとして動作することを特徴とする請求項６乃至９何れか一項記載の画像形成装置。
【請求項１１】
画像形成処理で使用されるハードウェア資源と、画像形成に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有する画像形成装置でプロセス通信を行うプロセス間通信方法あって、
一または複数のサービス要求を含むエージェントを受信するエージェント受信ステップと、
前記エージェントのサービス要求ごとに一または複数の前記コントロールサービスのプロセスを選定して、選定された前記コントロールサービスのプロセスに対してサービス要求を行うエージェント処理ステップと
を含んだことを特徴とするプロセス間通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像形成装置およびプロセス間通信方法に係り、特に複数のプロセスがサーバプロセスまたはクライアントプロセスとしてプロセス間通信を行う画像形成装置およびプロセス間通信方法に関する。
【背景技術】
【０００２】
近年、プリンタ、コピー、ファクシミリ、スキャナなどの各装置の機能を１つの筐体内に収納した画像形成装置（以下、「複合機」という。）が一般的に知られている。
【０００３】
この複合機は、１つの筐体内に表示部、印刷部および撮像部などを設けるとともに、プリンタ、コピーおよびファクシミリ装置にそれぞれ対応する３種類のソフトウェアを設け、ソフトウェアの切り替えによって、当該装置をプリンタ、コピー、スキャナまたはファクシミリ装置として動作させるものである。
【０００４】
従来の複合機では、内部にプリンタ、コピー、スキャナおよびファクシミリ装置に対応するソフトウェア（汎用ＯＳを含む）をそれぞれ別個に設ける構成となっており、各ソフトウェアの開発に多大の時間を要する。
【０００５】
このため、出願人は、ハードウェア・インターフェースをドライブするドライバと呼ばれるソフトウェア群と、メモリ／タイマなどの共通なハードウェア資産を効率良く使用するためのマネージャ・ソフトウェア群や各アプリケーションで共通に使用できるシステム・ユーティリティ・ソフトウェア群と、これらのドライバ・ソフトウェア群，マネージャ・ソフトウェア群，ユーティリティ・ソフトウェア群を使用するプリンタ／スキャナ／ＦＡＸ送信／ＦＡＸ受信などの実アプリケーションとを備えた複合機（特開平９−５１３９８号公報，特開平９−９１１０２号公報参照）を発明した。
【０００６】
しかしながら、特開平９−５１３９８号公報，特開平９−９１１０２号公報に記載されている複合機は、ドライバ・ソフトウェア群，マネージャ・ソフトウェア群，ユーティリティ・ソフトウェア群がライブラリで構成されており、ハードウェア資源を実行制御する主体となり得なかった。
【０００７】
そこで、出願人は、表示部、印刷部および撮像部などの画像形成処理で使用されるハードウェア資源を有し、プリンタ、コピーまたはファクシミリなどの各ユーザサービスにそれぞれ固有の処理を行うアプリケーションを複数搭載し、これらのアプリケーションとハードウェア資源との間に介在して、ユーザサービスを提供する際に、アプリケーションの少なくとも２つが共通的に必要とするハードウェア資源の管理、実行制御並びに画像形成処理を行う各種コントロールサービスからなるプラットホームを備えた複合機（特開２００２−８２８０６号公報参照）を発明した。
【０００８】
なお、ユーザサービスとはユーザに提供する画像形成に係るサービスをいう。また、コントロールサービスとはアプリケーションに画像形成に係るハードウェア資源を提供するサービスをいう。
【０００９】
この複合機によれば、アプリケーションの少なくとも２つが共通的に必要とするハードウェア資源の管理、実行制御並びに画像形成処理を行うプラットホームを備えた構成とすることによって、ソフトウェア開発の効率化を図るとともに、装置全体としての生産性を向上させることが可能となる。
【特許文献１】特開平９−５１３９８号公報
【特許文献２】特開平９−９１１０２号公報
【特許文献３】特開２００２−８２８０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
このような複合機では、アプリケーションの少なくとも２つが共通的に必要とするサービスを提供するコントロールサービスを有する構成となっているため、機能変更、機能追加、または将来的なハードウェア資源の追加、変更などに柔軟に対応すべく、アプリケーションごとあるいはコントロールサービスごとの追加、変更を容易に行えることが望まれる。また、ユーザサービスを提供する際に、各アプリケーションと各コントロールサービス間、あるいは各コントロールサービス間でサービスやデータの授受を円滑に行うことが必要となってくる。
【００１１】
すなわち、複合機は、プリンタ、コピー、ファクシミリ、スキャナなど多種の機能を備えたものであるが、その一部の機能に故障あるいは仕様変更などが生じた場合に、全てのアプリケーションまたは全てのコントロールサービスのモジュールを修正しなければならないと、作業の労力が過大となる。
【００１２】
また、将来的に、複合機に新たな機能を追加する場合でも一部の機能の追加のために全てのコントロールサービスや全てのアプリケーションのモジュール変更が必要となると、プログラム開発の労力が過大となってしまう。このため、複合機上で動作する各アプリケーションや各コントロールサービスのモジュールは互いにサービスやデータの送受信を実現としながらも、モジュール間の独立性を維持していることが必要となってくる。
【００１３】
言い換えれば、各アプリケーションや各コントロールサービスごとに独立性がないと、必要なアプリケーションや必要なコントロールサービスのみを提供することが困難となり、機能変更や機能追加などに柔軟に対応できるような複合機の構成に可変性を持たせることができないという問題がある。
【００１４】
また、各アプリケーションや各コントロールサービスごとに独立性がないと、モジュール間のデータの送受信の実現方法の開発も困難になる。さらにはアプリケーションやコントロールサービスごとの設計および構築が困難になり、その結果、多種多様な機能を提供することができないという問題がある。
【００１５】
とくに、複合機はプリンタ、コピー、スキャナ、ファックスなど多機能が搭載されたものであるため、ネットワークに接続してＰＣ（Personal Computer）などから複数の機能を連続的に使用したい場合がある。しかしながら、従来の複合機では機能ごとのコマンドなどで別個に要求する必要がある。
【００１６】
また、複合機は提供可能なサービスがすべて統一されているわけではなく、例えばプリンタ機能とコピー機能のみを提供できる複合機やこれに加えてファックス送信機能を提供できる複合機などが存在する。このような提供機能の異なる複数の複合機をネットワークに接続した場合において、たとえば、ある複合機に対してファックス送信要求を行ったところ、その複合機ではファックス送信機能が搭載されていない場合、ユーザは改めて別の複合機に対してファックス送信要求を行わなければならない。
【００１７】
このように、従来の複合機をネットワークに接続して使用する場合には、多種多様な機能を効率的に提供することができないという問題がある。
【００１８】
この発明は上記に鑑みてなされたもので、可変性のあるアーキテクチャおよび多種多様な機能を実現することができるとともに、ソフトウェア開発効率の向上を図ることができる画像形成装置およびプロセス間通信方法を得ることを主な目的とする。
【００１９】
また、この発明はネットワークに画像形成装置を接続して使用する場合に、多種多様な機能を効率的に提供することができる画像形成装置およびプロセス間通信方法を得ることを目的とする。
【課題を解決するための手段】
【００２０】
上記課題を解決するため、請求項１にかかる発明は、画像形成処理で使用されるハードウェア資源と、画像形成に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有する画像形成装置であって、一または複数のサービス要求を含むエージェントを受信し、該エージェントのサービス要求ごとに一または複数の前記コントロールサービスを選定して、選定された前記コントロールサービスに対してサービス要求を行うエージェント処理手段を備えたことを特徴とする。
【００２１】
この請求項１の発明によれば、サービスの提供を受ける側は複数のサービス要求を一度に行えば、必要なコントロールサービスが自律的に判断されるので、連続的なサービスの提供を効率よく行うことができる。
【００２２】
また、複数のサービス要求を一度行えば連続的なサービスの提供を行えるので、個々のサービス要求ごとにネットワークを占有する必要がなくなり、ネットワークの負荷を軽減することができる。
【００２３】
この請求項１にかかる発明において、コントロールサービスが動作している画像形成装置は、ユーザサービスおよびコントロールサービスを搭載可能であればその構成は限定されるものではない。
【００２４】
すなわち、当該画像形成装置は、サービスを提供するコントロールサービスが１つでも搭載されていれば良く、ユーザサービスが未搭載の画像形成装置や、コントロールサービスが１個のみ搭載されている画像形成装置も含まれる。
【００２５】
また、請求項２にかかる発明は、前記エージェント処理手段は、前記サービス要求に必要なコントロールサービスが正常動作しているか否かを判断し、正常動作してない場合に、ネットワークを介して接続された他の画像形成装置に前記エージェントを送信することを特徴とする。
【００２６】
この請求項２の発明によれば、サービス要求に必要なコントロールサービスを自己の画像形成装置だけでなくネットワーク上の画像形成装置からも自律的に判断しているので、サービスの提供を受ける側は、一つの画像形成装置に対しサービス要求を行えばネットワーク上の複数の画像形成装置にアクセスする必要がなく、効率的なサービスの提供を受けることができる。
【００２７】
また、サービスの提供を受ける側は、何度もネットワークを介して画像形成装置との間でメッセージの送受信を行う必要がなくなるので、ネットワークの負荷を軽減することができる。
【００２８】
また、請求項３にかかる発明は、前記エージェント処理手段は、さらに、前記サービス要求ごとに一または複数の前記ユーザサービスを選定して、選定された前記ユーザサービスに対してサービス要求を行うことを特徴とする。
【００２９】
この請求項３の発明によれば、サービスの提供を受ける側は複数のサービス要求を一度に行えば、必要なユーザサービスが自律的に判断されるので、連続的なサービスの提供を効率よく行うことができる。
【００３０】
また、連続的なサービスの提供を行えるので、個々のサービス要求ごとにネットワークを占有する必要がなくなり、ネットワークの負荷を軽減することができる。
【００３１】
また、請求項４にかかる発明は、前記エージェント処理手段は、前記サービス要求に必要な前記ユーザサービスが正常動作しているか否かを判断し、正常動作していない場合に、ネットワークを介して接続された他の画像形成装置に前記エージェントを送信することを特徴とする。
【００３２】
この請求項４の発明によれば、サービス要求に必要なユーザサービスを自己の画像形成装置だけでなくネットワーク上の画像形成装置からも自律的に判断しているので、サービスの提供を受ける側は一つの画像形成装置に対しサービス要求を行えばネットワーク上の複数の画像形成装置にアクセスする必要がなく、効率的なサービスの提供を受けることができる。
【００３３】
また、サービスの提供を受ける側は、何度もネットワークを介して画像形成装置との間でメッセージの送受信を行う必要がなくなるので、ネットワークの負荷を軽減することができる。
【００３４】
また、請求項５にかかる発明は、前記ユーザサービスに含まれ、前記エージェント処理手段として動作するエージェントアプリをさらに備えたことを特徴とする。
【００３５】
この請求項５の発明によれば、コントロールサービスとエージェントアプリとのプロセス間通信をアプリケーションインタフェースを用いて行うことができ、エージェントアプリのソフトウェア開発労力を軽減することができる。
【００３６】
また、請求項６にかかる発明は、前記コントロールサービスは、ネットワークを介して接続された他の画像形成装置で動作するクライアントプロセスに対するサーバプロセスとして動作し、前記他の画像形成装置のクライアントプロセスに提供する一または複数のサービスを定義したメソッドを有するオブジェクトであることを特徴とする。
【００３７】
この請求項６の発明によれば、コントロールサービスはネットワーク上の他の画像形成装置で動作するプロセスをクライアントとしたサーバプロセスとしてメソッド実行によるサービスの提供によりプロセス間通信を実現することができ、同一の画像形成装置内のプロセスだけでなく、ネットワーク上の画像形成装置に対してもサービスの提供が可能となり、多種多様な機能を実現することができる。
【００３８】
また、請求項７にかかる発明は、前記コントロールサービスの各プロセスは、前記他の画像形成装置のクライアントプロセスに提供するサービスを定義したメソッドを実行する一または複数のスレッドを生成するものであることを特徴とする。
【００３９】
この請求項７の発明によれば、ネットワーク上の他の画像形成装置で動作するアプリケーションなどのユーザサービスのプロセスに提供するサービスを並列実行させることができる。
【００４０】
このため、例えば、ネットワーク上の異なる複数の画像形成装置のクライアントプロセスから同時にサービス要求があった場合でも、実行制御の切り替えの速いスレッドでサービスを並列実行させるので、ネットワーク上の複数の画像形成装置へのサービスの提供を迅速に行うことが可能となる。
【００４１】
また、請求項８にかかる発明は、前記コントロールサービスは、前記他の画像形成装置で動作するユーザサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする。
【００４２】
この請求項８の発明によれば、ネットワーク上の他の画像形成装置で動作するユーザサービスのプロセスに対してコントロールサービスの機能を提供することができる。
【００４３】
また、コントロールサービスがネットワーク上の画像形成装置内に存在しない場合や使用できない場合でも、メソッド実行によって当該ネットワーク上の画像形成装置にコントロールサービスの機能を提供できるので、ネットワークを利用した複数の画像形成装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【００４４】
また、請求項９にかかる発明は、前記コントロールサービスは、前記他の画像形成装置で動作するコントロールサービスをクライアントプロセスとしたサーバプロセスとして動作することを特徴とする。
【００４５】
この請求項９の発明によれば、ネットワーク上の他の画像形成装置で動作するコントロールサービスに対してコントロールサービスの機能を提供することができる。
【００４６】
また、あるコントロールサービスがネットワーク上の画像形成装置内に存在しない場合や使用できない場合でも、メソッド実行によって当該ネットワーク上の画像形成装置にコントロールサービスの機能を提供できるので、ネットワークを利用した複数の画像形成装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【００４７】
また、請求項１０にかかる発明は、前記コントロールサービスは、前記他の画像形成装置で動作するコントロールサービスをサーバプロセスとしたクライアントプロセスとして動作することを特徴とする。
【００４８】
この請求項１０の発明によれば、コントロールサービスはネットワーク上のコントロールサービスからサービスの提供を受けることができる。また、ネットワーク上の画像形成装置でコントロールサービスが使用できない場合でも、メソッド実行によるメッセージ送信というプロセス間通信によって、ネットワーク上の画像形成装置のコントロールサービスからのサービスの提供を受けることができるので、ネットワークを利用した複数の画像形成装置間でコントロールサービスの機能の共有化を実現することが可能となる。
【００４９】
また、請求項１１にかかる発明は、画像形成処理で使用されるハードウェア資源と、画像形成に係るユーザサービスおよびコントロールサービスの処理を行う一または複数のプログラムとを有する画像形成装置でプロセス通信を行うプロセス間通信方法あって、一または複数のサービス要求を含むエージェントを受信するエージェント受信ステップと、前記エージェントのサービス要求ごとに一または複数の前記コントロールサービスのプロセスを選定して、選定された前記コントロールサービスのプロセスに対してサービス要求を行うエージェント処理ステップとを含んだことを特徴とする。
【００５０】
この請求項１１の発明によれば、サービスの提供を受ける側は複数のサービス要求を一度に行えば、必要なコントロールサービスのプロセスが自律的に判断されるので、連続的なサービスの提供を効率よく行うことができる。
【００５１】
また、複数のサービス要求を一度行えば連続的なサービスの提供を行えるので、個々のサービス要求ごとにネットワークを占有する必要がなくなり、ネットワークの負荷を軽減することができる。
【発明の効果】
【００５２】
本発明によれば、可変性のあるアーキテクチャおよび多種多様な機能を実現することができるとともに、ソフトウェア開発効率の向上を図ることができる。また、本発明によれば、ネットワークに画像形成装置を接続して使用する場合に、多種多様な機能を効率的に提供することができる。
【発明を実施するための最良の形態】
【００５３】
以下に添付図面を参照して、この発明にかかる画像形成装置およびプロセス間通信方法の好適な実施の形態を詳細に説明する。
（実施の形態１）
図１は、この発明の実施の形態１である画像形成装置（以下、「複合機」という）の構成を示すブロック図である。図１に示すように、複合機１００は、白黒ラインプリンタ（B&W LP）１０１と、カラーラインプリンタ（Color LP）１０２と、スキャナ１０３と、ファクシミリ１０４と、ハードディスク装置（HDD）１０５と、ネットワークインタフェース１０６などのハードウェアリソースを有するとともに、プラットホーム１２０とアプリケーション１３０とから構成されるソフトウェア群１１０を備えている。
【００５４】
プラットホーム１２０は、アプリケーション１３０からの処理要求を解釈してハードウェア資源の獲得要求を発生させるコントロールサービスと、一または複数のハードウェア資源の管理を行い、コントロールサービスからの獲得要求を調停するシステムリソースマネージャ（ＳＲＭ）１２３と、汎用ＯＳ１２１とを有する。
【００５５】
コントロールサービスは、複数のサービスモジュールから形成され、ＳＣＳ（システムコントロールサービス）１２２と、ＥＣＳ（エンジンコントロールサービス）１２４と、ＭＣＳ（メモリコントロールサービス）１２５と、ＯＣＳ（オペレーションパネルコントロールサービス）１２６と、ＦＣＳ（ファックスコントロールサービス）１２７と、ＮＣＳ（ネットワークコントロールサービス）１２８とから構成される。
【００５６】
なお、このプラットホーム１２０は、あらかじめ定義されたメソッドにより前記アプリケーション１３０から処理要求を受信可能とするアプリケーションプログラムインタフェース（ＡＰＩ）を有する。
【００５７】
汎用ＯＳ１２１は、ＵＮＩＸ（登録商標）などの汎用オペレーティングシステムであり、プラットホーム１２０並びにアプリケーション１３０の各ソフトウェアをそれぞれプロセスとして並列実行する。
【００５８】
ＳＲＭ１２３は、ＳＣＳ１２２とともにシステムの制御およびリソースの管理を行うものであり、スキャナ部やプリンタ部などのエンジン、メモリ、ＨＤＤファイル、ホストＩ／Ｏ（セントロＩ／Ｆ、ネットワークＩ／Ｆ、ＩＥＥＥ１３９４  Ｉ／Ｆ、ＲＳ２３２Ｃ  Ｉ／Ｆなど）のハードウェア資源を利用する上位層からの要求にしたがって調停を行い、実行制御する。
【００５９】
具体的には、このＳＲＭ１２３は、要求されたハードウェア資源が利用可能であるか（他の要求により利用されていないかどうか）を判断し、利用可能であれば要求されたハードウェア資源が利用可能である旨を上位層に伝える。また、ＳＲＭ１２３は、上位層からの要求に対してハードウェア資源の利用スケジューリングを行い、要求内容（たとえば、プリンタエンジンにより紙搬送と作像動作、メモリ確保、ファイル生成など）を直接実施している。
【００６０】
ＳＣＳ１２２は、アプリ管理、操作部制御、システム画面表示、ＬＥＤ表示、リソース管理、割り込みアプリ制御を行うものである。ＥＣＳ１２４は、白黒ラインプリンタ（B&W LP）１０１、カラーラインプリンタ（Color LP）１０２、スキャナ１０３、ファクシミリ１０４からなるハードウェアリソースのエンジンを制御するものである。
【００６１】
ＭＣＳ１２５は、画像メモリの取得および解放、ＨＤＤの利用、画像データの圧縮および伸張などを行うものである。ＯＣＳ１２６は、オペレータと本体制御間の情報伝達手段となる操作パネルを制御するモジュールである。
【００６２】
ＦＣＳ１２７は、システムコントローラの各アプリ層からＰＳＴＮ／ＩＳＤＮ網を利用したファクシミリ送受信、ＢＫＭ（バックアップＳＲＡＭ）で管理されている各種ファクシミリデータの登録／引用、ファクシミリ読みとり、ファクシミリ受信印刷、融合送受信を行うためのＡＰＩを提供するものである。ＦＣＳ１２７には、そのサブプロセスであるＦＣＵハンドラ（ＦＣＵＨ）１２９が起動される。このＦＣＵＨ１２９は、ＦＣＳ１２７からの指令によりファクシミリ送受信の際にファクシミリエンジンのデバイスドライバを制御するものである。
【００６３】
ＮＣＳ１２８は、ネットワークＩ／Ｏを必要とするアプリケーション１３０に対して共通に利用できるサービスを提供するためのモジュール群であり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーション１３０に振り分けたり、アプリケーション１３０からデータをネットワーク側に送信する際の仲介を行うものである。
【００６４】
アプリケーション１３０は、ページ記述言語（ＰＤＬ）、ＰＣＬおよびポストスクリプト（ＰＳ）を有するプリンタ用のアプリケーションであるプリンタアプリ１１１と、コピー用アプリケーションであるコピーアプリ１１２と、ファクシミリ用アプリケーションであるファックスアプリ１１３と、スキャナ用アプリケーションであるスキャナアプリ１１４と、ネットワークファイル用アプリケーションであるネットファイルアプリ１１５と、工程検査用アプリケーションである工程検査アプリ１１６とを有している。
【００６５】
これらの各コントロールサービスとＳＲＭ１２３と各アプリケーション１３０とは、一または複数のメソッドを有するオブジェクトであり、このオブジェクトを起動することによりそれぞれプロセスとして汎用ＯＳ１２１上に生成されて実行される。そして、各プロセス内部には、複数のスレッドが起動され、汎用ＯＳ１２１の管理下でこれらのスレッドのＣＰＵ占有時間を切り替えることにより並列実行が実現されている。このため、プロセス切り替えによる並列実行と比較して、並列実行時の処理速度の向上が図られている。
【００６６】
各アプリプロセスと各コントロールサービスプロセスとは、メソッドの実行によるプロセス間通信によってメッセージの送受信が行われる。図２は、実施の形態１の複合機上で動作するサーバプロセスとクライアントプロセスの関係を示すブロック図である。ここで、サーバプロセス２０２とは、クライアントプロセス２０１からの要求によりクライアントプロセス２０１に対しサービスを提供するプロセスをいう。クライアントプロセス２０１とは、サーバプロセス２０２に対して要求を行うことにより、サーバプロセス２０２からサービスの提供を受けるプロセスをいう。
【００６７】
実施の形態１の複合機１００では、上述のコピーアプリ１１２、プリンタアプリ１１１、スキャナアプリ１１４、ファックスアプリ１１３などのアプリケーション１３０のプロセス、およびＥＣＳ１２４、ＭＣＳ１２５、ＦＣＳ１２７、ＮＣＳ１２８などのコントロールサービスのプロセスが主としてクライアントプロセス２０１となり、コントロールサービスおよびＳＲＭ１２３のプロセスが主としてサーバプロセス２０２となる。
【００６８】
すなわち、各アプリケーション１３０がコントロールサービスからサービスの提供を受ける場合には、各アプリケーション１３０のプロセスがクライアントプロセス２０１として動作し、コントロールサービスがサーバプロセス２０２として動作する。また、コントロールサービス間でサービスの要求と提供を行う場合には、サービス要求を行うコントロールサービスがクライアントプロセス２０１として動作し、サービス提供を行うコントロールサービスがサーバプロセス２０２として動作する。
【００６９】
なお、これらの例に限られず、各アプリケーション１３０のプロセス、コントロールサービスのプロセス、ＳＲＭプロセス１２３は、いずれもサーバプロセス２０２およびクライアントプロセス２０１となることができる。
【００７０】
すなわち、これらのプロセスは、他のいずれかのプロセスに対しサービスを要求する場合にクライアントプロセス２０１として動作する一方、他のプロセスからの要求によりサービスを提供する場合にサーバプロセス２０２として動作することになる。
【００７１】
これらのアプリケーション１３０、コントロールサービスおよびＳＲＭ１２３のプロセスには、いずれも複数のスレッドが起動している。このため、他のプロセスからの要求を受けた場合には、当該他のプロセスをクライアントプロセス２０１としたサーバプロセス２０２として動作するが、これと同時に、他のプロセスに対してサービスを要求する場合に当該他のプロセスをサーバプロセス２０２としたクライアントプロセス２０１として動作する。
【００７２】
また、各プロセスは、同時に複数のプロセスをクライアントプロセス２０１としたサーバプロセス２０２となることも可能である。さらに、各プロセスは、同時に複数のサーバプロセス２０２からのサービスの提供を受けるクライアントプロセス２０１となることも可能である。
【００７３】
図２に示す通り、クライアントプロセス２０１は、サーバプロセス２０２のサービスを要求するために、クライアントプロセス２０１内のスレッドからサーバプロセス２０２に対してサービス要求メッセージを送信するサービス要求メソッドを実行する。
【００７４】
このサービス要求メッセージを受信したサーバプロセス２０２は、サービス実行メソッドを実行する。このサービス実行メソッドは、クライアントプロセス２０１から要求されたサービスを実行し、その実行結果を実行結果メッセージとして要求元のクライアントプロセス２０１に送信するメソッドである。
【００７５】
図２の例では、クライアントプロセス２０１がサービスＡの提供を受けるために、サービスＡ要求メソッドを実行してサービスＡ要求メッセージをサーバプロセス２０２に送信している。そして、サーバプロセス２０２がこのサービスＡ要求メッセージを受信すると、サービスＡ実行メソッドを実行する。サーバプロセス２０２は、サービスＡ実行メソッドの実行により、（１）サービスＡの処理を実行し、ついで、（２）サービスＡの実行結果をサービスＡ実行結果メッセージとしてクライアントプロセス２０１に送信する。
【００７６】
このように、サーバプロセス２０２とクライアントプロセス２０１のプロセス間通信は、メソッド実行によるサービス要求メッセージの送信、メソッド実行によるサービスの提供およびサービス実行結果メッセージ送信という一連の処理によって実現されている。
【００７７】
図３は、各アプリケーションおよび各コントロールサービスのオブジェクトであらかじめ定義されているメソッドを示す説明図である。図３に示すように、各オブジェクトには、主としてクライアントプロセス２０１となったときにサーバプロセス２０２に対しサービスの提供を依頼するためにサービス要求メッセージを送信するサービス要求メソッドと、クライアントプロセス２０１からのサービス要求メッセージを受信してサーバプロセス２０２として動作するときにサービス提供の処理を実行しその実行結果メッセージを要求元のクライアントプロセス２０１に送信するサービス実行メソッドとが定義されている。
【００７８】
例えば、ＥＣＳ１２４のオブジェクトでは、サービス要求メソッドとしてメモリ画像情報取得要求メソッド、メモリ確保要求メソッド、資源獲得要求メソッドなどが登録されており、一方、サービス実行メソッドとして、ジョブ動作モード設定メソッド、ジョブスタートメソッド、ジョブオープンメソッドおよびジョブクローズメソッドなどが登録されている。
【００７９】
なお、ジョブ動作モード設定メソッド、ジョブスタートメソッド、ジョブオープンメソッドおよびジョブクローズメソッドは、それぞれクライアントプロセス２０１からジョブ動作モード設定要求メッセージ、ジョブスタート要求メッセージ、ジョブオープン要求メッセージ、ジョブクローズ要求メッセージを受信したときに実行される。
【００８０】
また、プリンタアプリ１１１のオブジェクトには、サービス要求メソッドとしてジョブ動作設定要求メソッド、ジョブスタート要求メソッドなどが登録されている。なお、図３に示す他のコントロールサービスやＳＲＭ１２３、および他のアプリケーション１３０の各オブジェクトについても同様にサービス要求メソッドとサービス実行メソッドが登録されている。
【００８１】
つぎに、実施の形態１の複合機１００で実際に行われるプリンタ動作の一例について説明する。図４は、実施の形態１の複合機でプリンタ動作を行う場合のプリンタアプリ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【００８２】
複合機１００は、プリンタアプリプロセス１１１、ＥＣＳプロセス１２４、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３が動作している。これらのプロセスは、複合機１００の起動時に生成されるようになっている。
【００８３】
プリンタアプリプロセス１１１は、プロセス内に複数のスレッドが起動している。プリンタアプリプロセス１１１は、ＥＣＳプロセス１２４をサーバプロセス２０２としたクライアントプロセス２０１となる。ＥＣＳプロセス１２４は、プリンタ動作時にプリンタアプリプロセス１１１をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３をそれぞれサーバプロセス２０２としたクライアントプロセス２０１となる。
【００８４】
ＭＣＳプロセス１２５は、プリンタ動作時にＥＣＳプロセス１２４をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＳＲＭプロセス１２３をサーバプロセス２０２としたクライアントプロセス２０１となる。ＳＲＭプロセス１２３は、プリンタ動作時にＥＣＳプロセス１２４またはＭＣＳプロセス１２５をクライアントプロセス２０１としたサーバプロセス２０２となっている。
【００８５】
ＰＣなどのホストからセントロＩ／Ｆ、ＵＳＢ  Ｉ／Ｆ、ネットワークＩ／Ｆなど経由して印刷要求があると、その印刷要求をＮＣＳプロセス１２８が受信してプリンタアプリプロセス１１１に転送する（ステップＳ４０１）。
【００８６】
プリンタアプリプロセス１１１は、ＮＣＳプロセス１２８から印刷要求を受信すると新たなプリンタジョブを生成し、ジョブ動作モード設定要求メソッドを実行して、ＥＣＳプロセス１２４に対してジョブ動作モード設定要求メッセージを送信する（ステップＳ４０２）。ここで、ジョブ動作モードとは、スキャナ、プロッタ、フィニッシャなどを動作させるために必要なパラメータ群であり、印刷用紙サイズ、印刷部数、給紙トレイなどのプリンタ条件から生成されるジョブの動作条件を定めたものである。
【００８７】
ＥＣＳプロセス１２４は、プリンタアプリプロセス１１１からジョブ動作モード設定要求メッセージを受信すると、ジョブ動作モード設定実行メソッドを実行し、新たに生成されたプリンタジョブに対して上述のジョブ動作モードを設定して、その実行結果メッセージをプリンタアプリプロセス１１１に送信する。
【００８８】
プリンタアプリプロセス１１１は、ＥＣＳプロセス１２４からジョブ動作モード設定の実行結果メッセージを受信すると、ジョブの開始要求を行うため、ジョブスタート要求メソッドを実行して、ＥＣＳプロセス１２４に対しジョブスタート要求メッセージを送信する（ステップＳ４０３）。
【００８９】
ＥＣＳプロセス１２４は、プリンタアプリプロセス１１１からジョブスタート要求メッセージを受信すると、ジョブスタート実行メソッドを起動し、ジョブの開始処理を行ってその実行結果メッセージをプリンタアプリプロセス１１１に送信する。プリンタアプリプロセス１１１は、ＥＣＳプロセス１２４からジョブスタートの実行結果メッセージを受信する。
【００９０】
つぎに、ＥＣＳプロセス１２４は、メモリに格納されている印刷データを取得するために、メモリ画像情報要求メソッドを実行し、ＭＣＳプロセス１２５に対してメモリ画像情報要求メッセージを送信する（ステップＳ４０４）。
【００９１】
ＭＣＳプロセス１２５は、ＥＣＳプロセス１２４からメモリ画像情報要求メッセージを受信すると、メモリ画像情報実行メソッドを起動する。そして、ＭＣＳプロセス１２５はメモリに格納されている画像データを取得して、画像データを実行結果メッセージとともにＥＣＳプロセス１２４へ送信する（ステップＳ４０５）。ＥＣＳプロセス１２４は、メモリ画像情報要求メッセージの送信および画像データの受信処理を、印刷ページが終了するまで繰り返し行う（ステップＳ４０８、Ｓ４０９）。
【００９２】
ＭＣＳプロセス１２５は、画像データのＥＣＳプロセス１２４への送信後、画像メモリを確保するためにメモリ取得要求メソッドを実行し、ＳＲＭプロセス１２３に対してメモリ取得要求メッセージを送信する（ステップＳ４０６）。ＳＲＭプロセス１２３では、ＭＣＳプロセス１２５からメモリ取得要求メッセージを受信すると、メモリ取得実行メソッドを実行し、プリント用に画像メモリを確保し、その実行結果メッセージをＭＣＳプロセス１２５へ送信する。
【００９３】
ＥＣＳプロセス１２４は、１ページ目の印刷データをＭＣＳプロセス１２５から受信した後、プリンタエンジン資源を取得するために、資源獲得要求メソッドを実行して、ＳＲＭプロセス１２３に対して資源獲得要求メッセージを送信する（ステップＳ４０７）。ＳＲＭプロセス１２３は、ＥＣＳプロセス１２４から資源獲得要求メッセージを受信すると資源獲得実行メソッドを実行し、プリンタエンジンを占有し、その実行結果メッセージをＥＣＳプロセス１２４へ送信する。
【００９４】
ＥＣＳプロセス１２４は、メモリ画像情報要求（ステップＳ４１１）に対する実行結果メッセージとして「画像なし」の応答を受信した場合（ステップＳ４１２）に、すべての印刷ページのプリントが終了したものと判断し、ジョブエンド通知メソッドを実行して、プリンタアプリプロセス１１１に対してジョブエンド通知メッセージを送信する（ステップＳ４１３）。プリンタアプリプロセス１１１では、このジョブエンド通知メッセージを受信することによりプリント終了を検知する。
【００９５】
次に、実施の形態１の複合機１００で実際に行われるスキャナ動作の一例について説明する。図５は、実施の形態１の複合機でスキャナ動作を行う場合のスキャナアプリ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【００９６】
複合機１００は、スキャナアプリプロセス１１４、ＥＣＳプロセス１２４、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３が動作している。これらのプロセスは、複合機の起動時に生成されるようになっている。
【００９７】
スキャナアプリプロセス１１４は、プロセス内に複数のスレッドが起動している。スキャナアプリプロセス１１４は、ＥＣＳプロセス１２４をサーバプロセス２０２としたクライアントプロセス２０１となっている。ＥＣＳプロセス１２４は、スキャナ動作時にスキャナアプリプロセス１１４をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＭＣＳプロセス１２５およびＳＲＭプロセス１２４をそれぞれサーバプロセス２０２としたクライアントプロセス２０１となる。ＭＣＳプロセス１２５は、スキャナ動作時にスキャナアプリプロセス１１４およびＥＣＳプロセス１２４をクライアントプロセス２０１としたサーバプロセス２０２となる。ＳＲＭプロセス１２３は、ＥＣＳプロセス１２４をクライアントプロセス２０１としたサーバプロセス２０２となる。
【００９８】
スキャナアプリプロセス１１４に対しスキャン要求があると、スキャナアプリプロセス１１４は、新たなスキャナジョブを生成し、ジョブオープン要求メソッドを実行して、ＥＣＳプロセス１２４に対してジョブオープン要求メッセージを送信する（ステップＳ５０１）。
【００９９】
ＥＣＳプロセス１２４では、スキャナアプリプロセス１１４からジョブオープン要求メッセージを受信すると、ジョブオープン実行メソッドを実行し、ジョブのオープン処理を行い、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１００】
スキャナアプリプロセス１１４は、ＥＣＳプロセス１２４からジョブオープンの実行結果メッセージを受信すると、つぎにファイル生成要求メソッドを実行して、ＭＣＳプロセス１２５に対しファイル生成要求メッセージを送信する（ステップＳ５０２）。ＭＣＳプロセス１２５では、スキャナアプリプロセス１１４からファイル生成要求メッセージを受信すると、ファイル生成実行メソッドを実行し、スキャンした画像を一時的に格納するファイルをＨＤＤ上に生成して、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１０１】
スキャナアプリプロセス１１４は、ファイル生成の実行結果メッセージを受信すると、ジョブ動作モードの設定を行うため、ジョブ動作モード設定要求メソッドを実行し、ＥＣＳプロセス１２４に対しジョブ動作モード設定要求メッセージを送信する（ステップＳ５０３）。
【０１０２】
ＥＣＳプロセス１２４は、スキャナアプリプロセス１１４からジョブ動作モード設定要求メッセージを受信すると、ジョブ動作モード設定実行メソッドを実行し、スキャナジョブに上述のジョブ動作モードを設定して、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１０３】
ついで、スキャナアプリプロセス１１４は、ジョブスタート要求メソッドを実行して、ジョブスタート要求メッセージをＥＣＳプロセス１２４に対して送信する（ステップＳ５０４）。ＥＣＳプロセス１２４は、ジョブスタート要求メッセージを受信すると、ジョブスタート要求実行メソッドを実行して、ジョブの開始処理を行い、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１０４】
一方、ＥＣＳプロセス１２４は、スキャナエンジンの資源獲得のため、資源獲得要求メソッドを実行し、ＳＲＭプロセス１２３に対して資源獲得要求メッセージを送信する（ステップＳ５０５）。ＳＲＭプロセス１２３は、資源獲得要求メッセージを受信すると資源獲得実行メソッドを実行して、スキャナエンジンを占有し、その実行結果メッセージをＥＣＳプロセス１２４へ送信する。
【０１０５】
つぎに、ＥＣＳプロセス１２４は、スキャン画像をページ単位で格納するメモリを確保するために、ページ生成要求メソッドを実行して、ＭＣＳプロセス１２５に対しページ生成要求メッセージを送信する（ステップＳ５０６）。ＭＣＳプロセス１２５は、ページ生成要求メッセージを受信すると、ページ生成実行メソッドを実行して１ページ分のメモリを確保し、確保したページをオープンし、その実行結果メッセージをＥＣＳプロセス１２４へ送信する。
【０１０６】
ＥＣＳプロセス１２４は、ページ生成の実行結果メッセージを受信すると、原稿フィードイン要求メソッドを実行し、スキャナエンジンに対して原稿フィードインの指示メッセージを送信して（ステップＳ５０７）、スキャナによる原稿の読み取り動作を開始させる。
【０１０７】
１ページ分の原稿読み動作が終了すると、ＥＣＳプロセス１２４に対しスキャナエンジンからスキャン終了通知メッセージが送信されるので（ステップＳ５０８）、ＥＣＳプロセス１２４はこのスキャン終了通知メッセージを受信する。ＥＣＳプロセス１２４は、スキャン終了通知メッセージを受信すると、ページクローズ要求メソッドを実行して、ＭＣＳプロセス１２４に対しページクローズ要求メッセージを送信する（ステップＳ５０９）。
【０１０８】
ＭＣＳプロセス１２５は、ページクローズ要求メッセージを受信すると、ページクローズ実行メソッドを実行して、メモリ上でオープンされている１ページ分の画像メモリをクローズし、その実行結果メッセージをＥＣＳプロセス１２４に送信する。
【０１０９】
ＥＣＳプロセス１２４は、上述のページ生成要求メッセージの送信からページクローズ要求メッセージの送信までの処理（ステップＳ５０６〜Ｓ５０９）を原稿枚数分だけ繰り返し行う。原稿の最終ページのスキャンが終了すると、ＥＣＳプロセス１２４に対しスキャナエンジンからスキャン処理完了通知メッセージが送信される（ステップＳ５１０）。
【０１１０】
ＥＣＳプロセス１２４は、スキャン処理完了通知メッセージを受信すると、スキャン完了通知メッセージをスキャナアプリプロセス１１４に対して送信し（ステップＳ５１１）、さらにジョブエンド通知メソッドを実行してジョブエンド通知メッセージも送信する（ステップＳ５１２）。
【０１１１】
スキャナアプリプロセス１１４は、スキャン処理完了通知メッセージとジョブエンド通知メッセージとを順にＥＣＳプロセス１２４から受信する。一方、スキャナアプリプロセス１１４は、ファイル情報登録要求メソッドを実行して、ＭＣＳプロセス１２５に対してファイル情報登録要求メッセージを送信する（ステップＳ５１３）。
【０１１２】
ＭＣＳプロセス１２５は、ファイル情報登録要求メッセージを受信すると、ファイル情報登録実行メソッドを実行して、一時的に生成されたすべての原稿のスキャン画像が格納されているファイルに対し、ファイル名、格納先等のファイル情報を登録し、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１１３】
スキャナアプリプロセス１１４は、ファイル情報登録の実行結果メッセージを受信すると、ファイルクローズ要求メソッドを実行して、ＭＣＳプロセス１２５に対しファイルクローズ要求メッセージを送信する（ステップＳ５１４）。ＭＣＳプロセス１２５では、ファイルクローズ要求メッセージを受信すると、ファイルクローズ実行メソッドを実行して、スキャン画像のファイルをクローズし、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。スキャナアプリプロセス１１４は、ファイルクローズの実行結果メッセージを受信することによって、スキャン処理を終了する。
【０１１４】
ついで、スキャナアプリプロセス１１４は、格納されているスキャン画像を読み出すため、次の処理を行う。まず、スキャナアプリプロセス１１４はファイルオープン要求メソッドを実行して、ＭＣＳプロセス１２５に対しスキャン画像のファイルをオープンするためのファイルオープン要求メッセージを送信する。また、スキャナアプリプロセス１１４は作業領域確保要求メソッドの実行による作業メモリの確保のための作業領域確保要求メッセージの送信、ページオープン要求メソッドの実行によるページオープン要求メッセージを順次に送信する（ステップＳ５１５〜Ｓ５１７）。
【０１１５】
ＭＣＳプロセス１２５は、スキャナアプリプロセス１１４からファイルオープン要求メッセージ、作業領域確保要求メッセージ、ページオープン要求メッセージを順に受信して、ファイルオープン実行メソッドの実行によるスキャン画像ファイルのオープン処理、作業領域確保実行メソッドの実行による作業メモリの確保処理およびページオープン実行メソッドの実行によるページオープン処理をそれぞれ行って、各処理の実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１１６】
スキャナアプリプロセス１１４は、スキャン画像ファイルからの画像データの読み出しのために読み出し要求メソッドを実行し、読み出し要求メッセージをＭＣＳプロセス１２５に送信する（ステップＳ５１８）。
【０１１７】
さらに、スキャナアプリプロセス１１４は、ページクローズ要求メソッドを実行して、ＭＣＳプロセス１２５に対しページクローズ要求メッセージを送信する（ステップＳ５１９）。
【０１１８】
ＭＣＳプロセス１２５は、ページオープン処理の終了後に、スキャナアプリプロセス１１４から読み出し要求メッセージを受信し、読み出し実行メソッドを実行してスキャナ画像ファイルから画像データを読み出し、画像データとともにその実行結果メッセージをスキャナアプリプロセス１１４に送信する。スキャナアプリプロセス１１４は、画像データの読み出しに関する実行結果メッセージを受信すると、次の読み出し要求メッセージをＭＣＳ１２５に送信し、その実行結果メッセージを受信する。
【０１１９】
ＭＣＳプロセス１２５は、最後の読み出し処理の終了後にスキャナアプリプロセス１１４からページクローズ要求メッセージを受信すると、ページクローズ実行メソッドを実行して、オープンしているページデータのクローズ処理を行い、その実行結果メッセージをスキャナアプリプロセス１１４に送信する。
【０１２０】
スキャナアプリプロセス１１４は、ページクローズの実行結果メッセージを受信すると、ＭＣＳ１２５に対してページ削除要求メッセージ、作業領域削除要求メッセージ、ファイルクローズ要求メッセージ、ファイル削除要求メッセージを順に送信する（ステップＳ５２０〜Ｓ５２３）。
【０１２１】
ＭＣＳプロセス１２５は、ページ削除要求メッセージ、作業領域削除要求メッセージ、ファイルクローズ要求メッセージ、ファイル削除要求メッセージを順に受信して、そのメッセージに対応する実行メソッドによって、ページデータの削除、作業メモリの削除、スキャン画像ファイルのクローズ、スキャン画像ファイルの削除の各処理を行って、各処理の実行結果メッセージをスキャナアプリプロセス１１４に送信する。スキャナアプリプロセス１１４がＭＣＳプロセス１２５から各処理の実行結果メッセージを受信することにより、スキャン画像の読み出し処理が完了する。
【０１２２】
次に、実施の形態１の複合機１００で実際に行われるコピー動作の一例について説明する。図６は、実施の形態１の複合機でコピー動作を行う場合のコピーアプリ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【０１２３】
複合機１００は、コピーアプリプロセス１１２、ＥＣＳプロセス１２４、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３が動作している。これらのプロセスは、複合機１００の起動時に生成されるようになっている。また、これらのプロセスは、プロセス内に複数のスレッドが起動された状態となっている。
【０１２４】
コピーアプリプロセス１１２は、ＥＣＳプロセス１２４をサーバプロセス２０２としたクライアントプロセス２０１となっている。ＥＣＳプロセス１２４は、コピー動作時にコピーアプリプロセス１１２をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３をそれぞれサーバプロセス２０２としたクライアントプロセス２０１となる。
【０１２５】
ＭＣＳプロセス１２５は、コピー動作時にＥＣＳプロセス１２４をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＳＲＭプロセス１２３をサーバプロセス２０２としたクライアントプロセス２０１となる。ＳＲＭプロセス１２３は、ＥＣＳプロセス１２４およびＭＣＳプロセス１２５をクライアントプロセス２０１としたサーバプロセス２０２となる。
【０１２６】
コピー要求があると、コピーアプリプロセス１１２は、新たなコピージョブを生成し、スキャナ動作の場合と同様に、ＥＣＳプロセス１２４に対してジョブオープン要求メッセージ、ジョブ動作モード設定要求メッセージおよびジョブスタート要求メッセージの送信を行う（ステップＳ６０１〜Ｓ６０３）。これらの要求メッセージを受信したＥＣＳプロセス１２４の動作については、上述したスキャナ動作の場合と同様であるため説明を省略する。
【０１２７】
ＥＣＳプロセス１２４では、ジョブスタートの実行結果メッセージをコピーアプリプロセス１１２に送信すると、つぎにスキャン画像を格納するためのメモリを確保するために、メモリ確保要求メソッドを実行し、ＭＣＳプロセス１２５に対し必要なサイズを指定したメモリ確保要求メッセージを送信する（ステップＳ６０４）。
【０１２８】
ＭＣＳプロセス１２５では、メモリ確保要求メッセージを受信すると、メモリ確保実行メソッドを実行して、指定されたサイズのメモリ上の領域を確保するためのメモリ取得要求メソッドを実行し、ＳＲＭ１２３に対してメモリ取得要求メッセージを送信する（ステップＳ６０５）。ＳＲＭ１２３は、メモリ取得要求メッセージを受信すると、メモリ取得実行メソッドを実行して、メモリ上に指定されたサイズの領域を占有して、その実行結果メッセージをＭＣＳプロセス１２５に送信する。
【０１２９】
メモリ取得の実行結果メッセージを受信したＭＣＳプロセス１２５は、受信した実行結果メッセージをメモリ確保の実行結果メッセージとしてＥＣＳプロセス１２４に送信する。ついで、メモリ確保の実行結果メッセージを受信したＥＣＳプロセス１２４は、スキャナエンジンとプリンタエンジンの資源獲得のため、資源獲得要求メソッドを実行して、ＳＲＭプロセス１２３に対して資源獲得要求メッセージを送信する（ステップＳ６０６）。
【０１３０】
ＳＲＭプロセス１２３は、資源獲得要求メッセージを受信すると、資源獲得実行メソッドを実行してスキャナエンジンとプリンタエンジンとを占有し、その実行結果メッセージをＥＣＳプロセス１２４に送信する。
【０１３１】
ＥＣＳプロセス１２４は、ＳＲＭプロセス１２３から資源獲得の実行結果メッセージを受信して、スキャナエンジンとプリンタエンジンとをコピージョブで占有すると、原稿フィードイン要求メソッドを実行し、スキャナエンジンに対して原稿フィードインの指示メッセージを送信して（ステップＳ６０７）、原稿のスキャン処理を開始させる。
【０１３２】
スキャナエンジンは、原稿のスキャン処理が終了すると、スキャン終了通知メッセージをＥＣＳプロセス１２４に送信し（ステップＳ６０８）、プリンタエンジンにスキャン画像のプリント処理を開始させる。そして、プリンタエンジンはスキャン画像のプリント処理が終了すると、ＥＣＳプロセス１２４に印刷終了通知メッセージを送信する（ステップＳ６１０）。
【０１３３】
ＥＣＳプロセス１２４は、スキャナエンジンからスキャン終了通知メッセージを受信すると、ジョブエンド通知メソッドを実行してコピーアプリプロセス１１２に対しスキャン終了の旨のジョブエンド通知メッセージを送信する（ステップＳ６０９）。また、ＥＣＳプロセス１２４はプリンタエンジンから印刷終了通知メッセージを受信すると、ジョブエンド通知メソッドを実行してコピーアプリプロセス１１２に対し印刷終了の旨のジョブエンド通知メッセージを送信する（ステップＳ６１１）。コピーアプリプロセス１１２は２つのジョブエンド通知メッセージを受信することにより、原稿１ページ分のコピー動作が完了する。
【０１３４】
複数枚の原稿のコピーを行う場合には、さらにＥＣＳプロセス１２４に対しジョブスタート要求メッセージを送信する（ステップＳ６１２）。これにより、上述と同様の動作がＥＣＳプロセス１２４、ＭＣＳプロセス１２５、ＳＲＭプロセス１２３、スキャナエンジンおよびプリンタエンジンで行われる（ステップＳ６１３〜Ｓ６１６）。すべての原稿のコピーが終了し、コピーアプリプロセス１１２が最後のジョブエンド通知メッセージを受信すると（ステップＳ６１７）、コピーアプリプロセス１１２はジョブクローズ要求メソッドを実行して、ＥＣＳプロセス１２４に対しジョブクローズ要求メッセージを送信する（ステップＳ６１８）。
【０１３５】
ＥＣＳプロセス１２４は、ジョブクローズ要求メッセージを受信すると、ジョブクローズ実行メソッドを実行して、オープン状態にあるコピージョブをクローズし、その実行結果メッセージをコピーアプリプロセス１１２に送信する。コピーアプリプロセス１１２がＥＣＳプロセス１２４からジョブクローズの実行結果メッセージを受信することにより、コピー動作が完了する。
【０１３６】
次に、実施の形態１の複合機１００で実際に行われるファクシミリ送信動作の一例について説明する。図７は、実施の形態１の複合機でファクシミリ送信動作を行う場合のファックスアプリ、ＦＣＳ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【０１３７】
複合機１００は、ファックスアプリプロセス１１３、ＦＣＳプロセス１２７、ＦＣＵＨプロセス１２９、ＥＣＳプロセス１２４、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３が動作している。これらプロセスは、複合機１００の起動時に生成されるようになっている。また、これらのプロセスは、プロセス内に複数のスレッドが起動された状態となっている。
【０１３８】
ファックスアプリプロセス１１３は、ＦＣＳプロセス１２７をサーバプロセス２０２としたクライアントプロセス２０１となっている。ＦＣＳプロセス１２７は、ファクシミリ送信動作時にファックスアプリプロセス１１３をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＥＣＳプロセス１２４およびＦＣＵＨプロセス１２９をサーバプロセス２０２としたクライアントプロセス２０１となる。
【０１３９】
ＦＣＵＨプロセス１２９は、ＦＣＳプロセス１２７のサブプロセスであり、ファクシミリ送信動作時に、ＳＲＭプロセス１２３およびＦＣＳ１２７をクライアントプロセス２０１としたサーバプロセス２０２となる。ＥＣＳプロセス１２４は、ファクシミリ送信動作時にＦＣＳプロセス１２７をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＭＣＳプロセス１２５およびＳＲＭプロセス１２３をそれぞれサーバプロセス２０２としたクライアントプロセス２０１となる。
【０１４０】
ＭＣＳプロセス１２５は、ファクシミリ送信動作時に、ＥＣＳプロセス１２４をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＳＲＭプロセス１２３をサーバプロセス２０２としたクライアントプロセス２０１となる。ＳＲＭプロセス１２３は、ＥＣＳプロセス１２４およびＭＣＳプロセス１２５をクライアントプロセス２０１としたサーバプロセス２０２となるとともに、ＦＣＵＨプロセス１２９をサーバプロセス２０２としたクライアントプロセス２０１となる。
【０１４１】
ファクシミリ送信要求があると、ファックスアプリプロセス１１３は、新たなファクシミリ送信ジョブを生成し、送信スタート要求メソッドを実行して、ＦＣＳプロセス１２７に対して送信スタート要求メッセージを送信する（ステップＳ７０１）。
【０１４２】
ＦＣＳプロセス１２７は、ファックスアプリプロセス１１３から送信スタート要求メッセージを受信すると、送信スタート実行メソッドを実行する。この送信スタート実行メソッドは、ジョブ動作モード設定要求メソッドを実行してＥＣＳプロセス１２４に対してジョブ動作モード設定要求メッセージを送信する（ステップＳ７０２）。また、送信スタート実行メソッドはジョブスタート要求メソッドを実行してＥＣＳプロセス１２４に対してジョブスタート要求メッセージを送信する（ステップＳ７０３）。
【０１４３】
なお、ジョブ動作モード設定要求メッセージおよびジョブスタート要求メッセージを受信したＥＣＳプロセス１２４の動作は、前述したスキャナ動作の場合と同様であるので説明を省略する。
【０１４４】
ジョブスタート要求メッセージを受信してジョブ開始処理を行ったＥＣＳプロセス１２４は、ついでメモリ確保要求メソッドを実行して、ＭＣＳ１２５に対しメモリ確保要求メッセージを送信する（ステップＳ７０４）。このメモリ確保要求メッセージを受信したＭＣＳプロセス１２５は、メモリ取得要求メソッドを実行してメモリ取得要求メッセージをＳＲＭプロセス１２３に対して送信する（ステップＳ７０５）。
【０１４５】
また、ＥＣＳプロセス１２４は、スキャナエンジンおよびファクシミリエンジンの獲得のため、資源獲得要求メソッドを実行して、ＳＲＭプロセス１２３に対し資源獲得要求メッセージを送信する（ステップＳ７０６）。
【０１４６】
なお、これらのメッセージを受信したＭＣＳプロセス１２５、ＳＲＭプロセス１２３の処理およびＥＣＳプロセス１２４における処理は、コピー動作時の処理と同様であるので説明を省略する。
【０１４７】
ＥＣＳプロセス１２４では、スキャナエンジンの資源獲得の実行結果メッセージを受信したら、スキャンパラメータ確定要求メソッドを実行して、ＦＣＳプロセス１２７に対しスキャンパラメータ確定要求メッセージを送信する（ステップＳ７０７）。
【０１４８】
ここで、スキャンパラメータとは、たとえばファイン、ノーマルなどのスキャン濃度や原稿サイズ等である。ＦＣＳプロセス１２７は、このスキャンパラメータ確定要求メッセージを受信すると、スキャンパラメータ確定実行メソッドを実行して、ＥＣＳプロセス１２４に対してスキャンパラメータをメッセージとして送信する（ステップＳ７０８）。
【０１４９】
ＥＣＳプロセス１２４では、スキャンパラメータメッセージを受信すると、ＳＲＭプロセス１２３に対してスキャン・フィードインプロセスの生成を指示するため、スキャン・フィードインプロセス指示メソッドを実行してスキャン・フィードインプロセス指示メッセージを送信する（ステップＳ７０９）。
【０１５０】
ＳＲＭプロセス１２３は、スキャン・フィードインプロセス指示メッセージを受信すると、スキャン・フィードインプロセス実行メソッドを実行して、スキャン・フィードインプロセスを生成する（ステップＳ７１０）。ついでフィードインスタート要求メソッドを実行して、ＦＣＵＨプロセス１２９に対して原稿のフィードインスタート要求メッセージを送信する（ステップＳ７１１）。ＦＣＵＨプロセス１２９がフィードインスタート要求メッセージを受信すると、原稿フィードインが開始され、これにより原稿のスキャンおよび指定宛先への送信が開始される。
【０１５１】
原稿のスキャンが開始されると、次ページの原稿があるか否かを示す、次ページ原稿有無通知メッセージがスキャナエンジンからＥＣＳプロセス１２４に対して送信される。図７では、次ページ原稿有通知メッセージが通知されている（ステップＳ７１２）。そして、原稿のスキャンが終了すると、スキャナエンジンからＥＣＳプロセス１２４に対してスキャン終了メッセージが送信される（ステップＳ７１３）。
【０１５２】
ＥＣＳプロセス１２４は、受信したスキャン終了メッセージを次ページ原稿有の旨とともにＦＣＳプロセス１２７へ送信する（ステップＳ７１４）。一方、原稿スキャンが終了すると、ＳＲＭプロセス１２３はフィードイン終了要求メソッドを実行し、ＦＣＵＨプロセス１２９に対してフィードイン終了を指示して（ステップＳ７１５）、原稿フィードインを終了させる。
【０１５３】
ユーザの指示などにより、ファックスアプリプロセス１１３が送信モード変更要求メソッドを実行して、ＦＣＳプロセス１２７に対して送信モード変更要求メッセージを送信した場合は（ステップＳ７１６）、ＥＣＳプロセス１２４は、スキャンパラメータ確定要求メソッドを実行して、スキャンパラメータ確定要求メッセージをＦＣＳプロセス１２７に対して送信する。これに対し上述のようにＦＣＳプロセス１２７は、スキャンパラメータメッセージをＥＣＳプロセス１２４に送信する（ステップＳ７１８）。
【０１５４】
ＥＣＳプロセス１２４は、スキャンパラメータメッセージを受信すると、スキャン・フィードインプロセス指示メソッドを実行し、次ページ目のスキャン・フィードインプロセスの実行をＳＲＭプロセス１２３に指示してスキャン・フィードインプロセスを開始する（ステップＳ７１９、Ｓ７２０）。
【０１５５】
一方、１ページの指定宛先へのファクシミリ送信が完了すると、ＦＣＳプロセス１２７は、ＥＯＭメッセージ（異なる送信モードで次ページ有り）をＦＣＵＨプロセス１２９へ送信し（ステップＳ７２１）、これを受信したＦＣＵＨプロセス１２９はＥＯＭを指定宛先へ送信する（ステップＳ７２２）。
【０１５６】
ＦＣＵＨプロセス１２９が指定宛先から受信正常の通知を受けた場合には（ステップＳ７２３）、ＳＲＭプロセス１２３に対して送信成功メッセージを送信し（ステップＳ７２４）、これを受信したＳＲＭプロセス１２３がＥＣＳプロセス１２４に対してプロセス正常終了メッセージを送信する（ステップＳ７２５）。
さらに、プロセス正常終了メッセージを受信したＥＣＳプロセス１２４は、スキャン処理完了通知メソッドを実行して、ＦＣＳプロセス１２７に対し１ページ目のスキャン処理完了通知メッセージを送信する（ステップＳ７２６）。
【０１５７】
そして、送信成功メッセージを受信したＳＲＭプロセス１２３は、スタンプ実行要求メソッドを実行して、送信日時、発信元等のスタンプを指定宛先へ送信する旨をスキャナエンジンに指示する（ステップＳ７２７）。
【０１５８】
ＳＲＭプロセス１２３は、２ページ目の原稿のフィードインを開始するため、フィードインスタート要求メソッドを実行し、ＦＣＵＨプロセス１２９に対して原稿のフィードインスタート要求メッセージを送信する（ステップＳ７２８）。ＦＣＵＨプロセス１２９はフィードインスタート要求メッセージを受信して、原稿フィードインが開始され、これにより２ページ目の原稿のスキャンおよび指定宛先への送信が開始する。
【０１５９】
原稿のスキャンが開始されると、次ページ原稿有無通知メッセージがスキャナエンジンからＥＣＳプロセス１２４に対して送信される。、図７では、次ページ原稿無通知メッセージが通知され、ＥＣＳプロセス１２４に通知されている（ステップＳ７２９）。そして、原稿のスキャンが終了すると、スキャナエンジンからＥＣＳプロセス１２４に対してスキャン終了メッセージが送信される（ステップＳ７３０）。
【０１６０】
ＥＣＳプロセス１２４は、受信したスキャン終了メッセージを次ページ原稿無の旨とともにＦＣＳプロセス１２７へ送信する（ステップＳ７３１）。一方、スキャンが終了すると、ＳＲＭプロセス１２３はフィードイン終了要求メソッドを実行して、ＦＣＵＨプロセス１２９に対してフィードイン終了メッセージを送信し（ステップＳ７３２）、これにより原稿フィードインを終了させる。
【０１６１】
２ページの指定宛先へのファクシミリ送信が完了すると、ＦＣＳプロセス１２７はＥＯＰメッセージ（次ページ無し）をＦＣＵＨプロセス１２９へ送信し（ステップＳ７３３）、これを受信したＦＣＵＨプロセス１２９がＥＯＰを指定宛先へ送信する（ステップＳ７３４）。
【０１６２】
指定宛先から受信正常の通知を受けた場合（ステップＳ７３５）、ＦＣＵＨプロセス１２９はＳＲＭプロセス１２３に対して送信成功メッセージを送信し（ステップＳ７３６）、これを受信したＳＲＭプロセス１２３が、ＥＣＳプロセス１２４に対してプロセス正常終了メッセージを送信する（ステップＳ７３７）。
【０１６３】
さらにプロセス正常終了メッセージを受信したＥＣＳプロセス１２４は、ＦＣＳプロセス１２７に対し２ページ目のスキャン処理完了通知メッセージを送信する（ステップＳ７３８）。また、送信成功メッセージを受信したＳＲＭプロセス１２３は、スタンプ実行要求メソッドを実行して、送信日時、発信元等のスタンプの指定宛先へ送信の指示を行う（ステップＳ７３９）。そして、ＥＣＳプロセス１２４は、ジョブエンド通知メソッドを実行して、ＦＣＳプロセス１２７にジョブエンド通知メッセージを送信する（ステップＳ７４０）。ＦＣＳプロセス１２７は、このジョブエンド通知メッセージを受信することにより全ての原稿のファクシミリ送信動作を完了する。
【０１６４】
このように実施の形態１の複合機１００では、各アプリプロセスなどクライアントプロセス２０１となるプロセスが、ＥＣＳプロセス１２４、ＭＣＳプロセス１２５、ＳＲＭプロセス１２３などのサーバプロセス２０２となるプロセスに対し、メソッド実行によるメッセージ送信を行ってサービスの要求を行い、サーバプロセス２０２がメソッド実行によりサービスの提供および実行結果メッセージのクライアントプロセス２０１に対する送信を行うことでプロセス間通信を実現しているので、アプリケーション１３０とプラットホーム１２０という特殊な構成を有する複合機１００において、簡易な手法によって多種多様なユーザサービスの機能を提供することができる。
【０１６５】
また、各アプリケーション１３０，各コントロールサービスおよびＳＲＭ１２３のそれぞれはメソッドを有するオブジェクトである。したがって、アプリケーション１３０やコントロールサービスの一部のモジュールにのみ変更がある場合や、必要に応じてコントロールサービス、アプリケーション１３０を適宜、追加したとしても、サーバプロセス２０２となるモジュール側でメッセージを受信したときにサービス処理を実行するメソッドを実装し、クライアントプロセス２０１となるモジュール側でサービス要求メッセージを送信するメソッドを実装するというインタフェースを確保しておけば、サービスやデータの授受が可能となるため、各アプリや各コントロールサービスの追加または変更などのソフトウェア開発効率を向上させることができ、画像形成装置を可変性を持った構成とすることができる。
【０１６６】
さらに、各コントロールサービスのそれぞれは、メソッドを有するオブジェクトであるため、各オブジェクトのデータの隠蔽を図ることができ、アプリケーション１３０の開発をサードベンダなどの外部に委託した場合でも、コントロールサービスの内容の隠蔽した状態とすることができる。
（実施の形態２）
実施の形態１にかかる複合機１００では、サーバプロセスとクライアントプロセスとの関係を概念的に説明した。そこで、この実施の形態２では、サーバプロセスおよびクライアントプロセスをより具体的に説明する。なお、実施の形態２にかかる複合機１００の構成は、図１と同様であるため説明を省略する。
【０１６７】
図８は、実施の形態２の複合機１００上で動作するサーバプロセスとクライアントプロセスの関係を詳細に示すブロック図である。ここで、クライアントプロセス１６００は、サーバプロセス１６１０，１６２０に対して要求を行うことにより、サーバプロセス１６１０，１６２０からサービスの提供を受ける例えばＳＣＳ１２２などのプロセスをいう。
【０１６８】
また、サーバプロセス１６１０，１６２０は、クライアントプロセス１６００からの要求によりクライアントプロセス１６００に対しサービスを提供する例えばＥＣＳ１２４などのプロセスをいう。
【０１６９】
図８に示すとおり、クライアントプロセス１６００には複数のスレッド１６０１が起動している。クライアントプロセス１６００は、複数のスレッド１６０１を有していることから、複数のサーバプロセス１６１０，１６２０に対して同時にサービスを要求できる。
【０１７０】
また、クライアントプロセス１６００は、サーバプロセス１６１０，１６２０のサービスを要求するために、スレッド１６０１からサーバプロセス１６１０，１６２０に対して関数コールを行い、その関数戻り値を受信することによってプロセス間通信を行う。
【０１７１】
クライアントプロセス１６００のスレッド１６０１は、あらかじめサーバプロセス１６１０，１６２０から提供されている関数をコールする。関数は、クライアントスタブ１６０２に定義されている。また、クライアントディスパッチャ１６０３は関数戻り値の受信を監視するスレッドである。
【０１７２】
クライアントプロセス１６００は、サーバプロセス１６１０，１６２０ごとにクライアントディスパッチャ１６０３を起動してサーバプロセス１６１０，１６２０と通信する。そして、関数コールを受けたサーバプロセス１６１０，１６２０は要求された関数に対応する処理を以下のように実行する。
【０１７３】
例えばサーバプロセス１６１０のサーバディスパッチャ１６１１は、サーバスケルトン１６１２にコーディングされている複数のスレッド１６１３から、要求された関数に対応するスレッド１６１３を選択する。ここで選択されるスレッド１６１３は、実施の形態１で説明した関数ハンドラ４０３に相当する。サーバプロセス１６１０のスレッド１６１３は、要求された処理を実行してその実行結果を関数戻り値としてクライアントプロセス１６００に送信する。
【０１７４】
次に、実施の形態２にかかるクライアントプロセス１６００と、サーバプロセス１６１０，１６２０とを生成する生成方法について説明する。図９は、実施の形態２のクライアントプロセスとサーバプロセスとを生成する画像形成装置用通信プログラム生成装置（以下、「スタブジェネレータ」という。）の機能的構成を示すブロック図である。スタブジェネレータは、メッセージファイルからヘッダと、クライアントスタブと、サーバスケルトンを自動生成するものである。
【０１７５】
図９に示すように、スタブジェネレータは、メッセージファイル１７０１を入力する入力部１７０２と、メッセージファイル１７０１に記述された内容の構文チェックを行う構文解析部１７０３と、メッセージファイル１７０１の記述内容から、ヘッダ１７０６とクライアントスタブ１７０７と、サーバスケルトン１７０５とを生成してハードディスク等の記憶媒体に格納するコード生成部１７０４とを備えている。
【０１７６】
まず、スタブジェネレータに入力されるメッセージファイル１７０１と、スタブジェネレータで生成されるヘッダ１７０６、クライアントスタブ１７０７およびサーバスケルトン１７０５について説明する。
【０１７７】
メッセージファイル１７０１は、プロセス間通信の通信内容をＣ言語などのソースコードで記述したソースファイルである。図１０は、メッセージファイルの記述例を示す説明図である。図１０に示すように、メッセージファイル１７０１には、別のメッセージファイルや、Ｃ言語記述のインクルードヘッダを宣言するインクルード宣言と、サーバプロセスとクライアントプロセスの間で送受信するメッセージを記述したメッセージ記述と、クライアントプロセスからサーバプロセスに対して発行する関数の宣言などが記述されている。
【０１７８】
メッセージは、主としてサーバプロセスとクライアントプロセスとの間でイベ
ントや通知を行う際に発行するものであり、メッセージファイル１７０１のメッセージ記述としては、メッセージ名と、メッセージＩＤと、メッセージ方向、メッセージ内容を記述するようになっている。
【０１７９】
メッセージ方向には、「ＩＮ」、「ＯＵＴ」、「ＳＥＬＦ」がある。「ＩＮ」は、クライアントプロセスからサーバプロセスに対して送信するメッセージを意味する。「ＯＵＴ」は、サーバプロセスからクライアントプロセスに対して送信するメッセージを意味する。また、「ＳＥＬＦ」は自分自身のプロセスに対して送信するメッセージを意味する。
【０１８０】
関数は、クライアントプロセスからサーバプロセスに処理要求や設定要求を行
う際に発行するものである。メッセージファイル１７０１の関数宣言には、関数名と、関数の型と、引数のみを記述し、関数の処理内容は記述しないようになっている。
【０１８１】
クライアントスタブ１７０７は、クライアントプログラムから呼び出される関数のサーバプロセスに対する発行を記述したソースファイルである。クライアントスタブ１７０７をコンパイルしてライブラリ化し、クライアントプログラムとリンクすることにより、クライアントプログラムからの関数コールがクライアントスタブ１７０７を介してサーバプロセスへ発行されるようになっている。
【０１８２】
図１１はスタブジェネレータにより生成されるクライアントスタブ１７０７の一例を示す説明図である。図１１に示すように、クライアントスタブ１７０７には、後述するサーバスケルトン１７０５に登録された関数ハンドラを呼び出すことにより、関数コールが行われるようになっている。サーバスケルトン１７０５は、クライアントスタブ１７０７から呼び出された関数ハンドラとメッセージハンドラを登録したソースファイルである。
【０１８３】
図１２は、スタブジェネレータにより生成されるサーバスケルトン１７０５の一例を示す説明図である。図１２に示すように、サーバスケルトン１７０５にはクライアントスタブ１７０７に記述された関数に対応した関数ハンドラが登録されている。
【０１８４】
関数ハンドラでは引数の受け渡し部のみが記述され、処理内容を記述する実装記述部は空欄の状態で生成されている。この実装記述部には、クライアントプログラムからクライアントスタブ１７０７を介して発行される関数の処理内容を、サーバプログラムの開発者が自在に記述できるようになっている。ヘッダ１７０６は、サーバスケルトン１７０５とクライアントスタブ１７０７で共通の定義、宣言などを記述したソースファイルである。
【０１８５】
図１３はスタブジェネレータにより生成されるヘッダ１７０６の一例を示す説明図である。図１３に示すように、ヘッダ１７０６には、メッセージファイル１７０１に記述されたインクルード宣言、メッセージＩＤ、メッセージの構造体などのメッセージ宣言、関数宣言および関数ハンドラ宣言などが記述された状態で生成されるようになっている。
【０１８６】
次に、スタブジェネレータによるサーバスケルトン１７０５、クライアントスタブ１７０７およびヘッダ１７０６の生成処理について説明する。図１４は、サーバスケルトン、クライアントスタブおよびヘッダの生成処理のフローチャートである。
【０１８７】
スタブジェネレータの構文解析部１７０３は、メッセージファイル１７０１に記述された関数宣言、メッセージ定義、インクルード宣言、Ｃ言語記述の文法チェックを行い（ステップＳ１８０１）、さらにメッセージファイル１７０１に定義されている関数名およびメッセージ定義の中のメッセージＩＤ、メッセージ名の一意性の判断を行う（ステップＳ１８０２）。
【０１８８】
そして、関数宣言、メッセージ定義、インクルード宣言の記述に文法エラーがあった場合、あるいは関数名、メッセージＩＤ、メッセージ名のいずれかが重複している場合には、ユーザに構文エラーである旨のメッセージを通知し処理を終了する（ステップＳ１８０３、Ｓ１８０４）。
【０１８９】
構文解析後、コード生成部１７０４は、メッセージファイル１７０１の記述内容から、ヘッダ１７０６と、サーバスケルトン１７０５と、クライアントスタブ１７０７を生成する。具体的には、メッセージファイル１７０１のインクルード宣言とＣ言語記述とをヘッダ１７０６にそのまま転記し、メッセージファイル１７０１のメッセージ定義に記述されているメッセージ構造体をヘッダ１７０６にコピーする（ステップＳ１８０５）。
【０１９０】
また、コード生成部１７０４は、メッセージファイル１７０１の関数宣言から関数ハンドラ名を自動生成し（例えば、関数名ａｂｃの場合、関数ハンドラ名をａｂｃ＿ｈａｎｄｌｅｒとして生成する）、生成された関数ハンドラ名をサーバスケルトン１７０５内に登録する。
【０１９１】
そして、関数ハンドラの処理内に、引数受け渡しの記述を行うとともに、戻り値領域の生成システムコールの発行を記述する。関数ハンドラの実際の処理内容を記述する実装記述部の欄を空欄とし、その実装記述部の後に、戻り値送信と戻り値領域解放の各システムコールの発行を記述する（ステップＳ１８０６）。
【０１９２】
また、コード生成部１７０４は、メッセージファイル１７０１に記述された関数宣言ごとに、関数名と引数の記述をクライアントスタブ１７０７に登録し、その関数の処理内に、関数コールメッセージ生成コールと関数ハンドラの呼び出しと戻り値解放の各システムコールを記述する（ステップＳ１８０７）。なお、関数ハンドラ呼び出しには、発行した関数の戻り値の待ち受ける関数戻り値待ちシステムコールが内部的に発行されるようになっている。
【０１９３】
このようにスタブジェネレータにより、クライアントスタブ１７０７とサーバスケルトン１７０５とヘッダ１７０６を生成したら、次にサーバオブジェクトおよびクライアントオブジェクトを完成させる。
【０１９４】
サーバプログラムの開発者は、サーバスケルトン１７０５の関数ハンドラの実装記述部（空欄）に、関数ハンドラで行うべき処理内容をエディタなどを利用して記述し、サーバスケルトン１７０５をヘッダ１７０６とともにコンパイルしてサーバスタブオブジェクトを生成する。また、サーバスケルトン１７０５に登録した関数ハンドラを宣言するとともに、クライアントプロセスとの間でメッセージファイル１７０１に記述されたメッセージの送受信を行うメッセージハンドラ、エラー処理を行うエラーハンドラ、サーバの初期化、サーバディスパッチャ起動等のシステムコールの発行を記述したサーバソースファイルを作成してコンパイルし、サーバスタブオブジェクトとリンクして、サーバプログラムを完成させる。
【０１９５】
一方、クライアントスタブ１７０７はヘッダ１７０６とともにコンパイルしてクライアントスタブオブジェクトを生成する。サーバプロセスごとにクライアントスタブオブジェクトを生成し、生成した複数のクライアントスタブオブジェクトをライブラリとする。
【０１９６】
また、関数の発行、関数ハンドラの宣言、エラー処理を行うエラーハンドラの宣言、クライアントプロセスとの間でメッセージファイル１７０１に記述されたメッセージの送受信を行うメッセージハンドラ、およびクライアントプロセスの初期化やクライアントディスパッチャ起動等のシステムコールの発行を記述したクライアントプログラムを作成してコンパイルし、スタブのライブラリとリンクすることによりクライアントプログラムを完成させる。
【０１９７】
図１５は、クライアントプログラムから関数コールを行った場合におけるサーバプログラムとの呼び出しおよび応答のシーケンスを示す説明図である。なお、サーバプログラムとクライアントプログラムは実際は実行可能形式のオブジェクトファイルであるが、図１５では、説明の都合上いずれもソースコードで表示している。
【０１９８】
クライアントプログラムからサーバプログラムに対して、たとえばＯｐｅｎ関数をコールすると、クライアントスタブオブジェクトで定義されたＯｐｅｎが呼び出される（ステップＳ１９０１）。そして、このスタブのＯｐｅｎの処理の中で、Ｏｐｅｎの関数ハンドラＯｐｅｎ＿ｈａｎｄｌｅｒがサーバプログラムに対してコールされる（ステップＳ１９０２）。
【０１９９】
サーバプログラムでは、クライアントスタブオブジェクトから関数ハンドラＯｐｅｎ＿ｈａｎｄｌｅｒの発行を受け取って、サーバスタブオブジェクトに登録されているＯｐｅｎ＿ｈａｎｄｌｅｒの実装記述部に記述されている処理を実行し（ステップＳ１９０３）、その実行結果をクライアントスタブへ戻り値として返す（ステップＳ１９０４）。クライアントプログラムでは、この戻り値をクライアントスタブから受け取って（ステップＳ１９０５）、次の処理へ移行する。
【０２００】
このように実施の形態２のスタブジェネレータでは、メッセージファイル１７０１に関数宣言を記述することによりクライアントスタブ１７０７とサーバスケルトン１７０５を容易に生成することができる。しかも生成されるサーバスケルトン１７０５の実装記述部は空欄となっているので、プログラム開発者は必要に応じて関数の処理内容を容易に変更するができる。
【０２０１】
このため複合機１００に可変性をもたせることができるとともに、多種多様な機能を実現させることができる。さらに、サードベンダーなどの他社がクライアントプログラムの開発を行う場合でも、クライアントプログラムには提供される関数コールを記述するだけでプロセス間通信が可能となるので、内部の通信プロトコルの隠蔽性を保つことが可能となる。
【０２０２】
また、実施の形態２のスタブジェネレータでは、プロセス間通信を関数コールで実現しているので、ジョブの並列実行をスレッドで実現した場合でも、高速なプロセス間通信が可能となる。また、関数からの戻り値によってスレッド間の同期をとることができるので、同期のための処理プログラムを別途作成する必要がなくなり、プログラム開発の労力を低減することができる。
（実施の形態３）
実施の形態１にかかる複合機１００では、オブジェクトのメソッドを利用したプロセス間通信を行うものであったが、この実施の形態３にかかる複合機１００は、さらにエージェントの機能を利用したものである。
【０２０３】
図１６は、実施の形態３にかかる複合機の構成を示すブロック図である。図１６に示すように、実施の形態３の複合機１００は、エージェントアプリ１１７をアプリケーション層に備えている点が実施の形態１の複合機１００と異なる。このため、他の構成については説明を省略する。なお、実施の形態３にかかる複合機１００はネットワークインタフェース１０６によってＬＡＮなどのネットワークに接続された状態となっている。
【０２０４】
エージェントアプリ１１７は、ネットワークを介して受信したエージェントの内容を解釈して実行するアプリケーションであり、本発明におけるエージェント処理手段を構成する。ここで、エージェントとは、ユーザに代行して自らの環境を自律的に判断して能動的に動作したり、ネットワークを通じて移動するプログラムである。
【０２０５】
エージェントを用いることで、ネットワークの負荷を軽減したり、ネットワークを常に占有する必要がなくなる。また、連続的な処理を効率的に行うことができる。なお、エージェントの動作および利点については、以下に示す例で詳細に説明する。また、エージェントアプリ１１７としては、例えば、ｔｅｌｅｓｃｒｉｐｔコマンドを解釈することができるｔｅｌｅｓｃｒｉｐｔエンジンなどを用いることができる。
【０２０６】
具体的には、エージェントアプリ１１７は、ネットワークに接続された他の複合機やＰＣから送信されてきたエージェントをＮＣＳ１２８を介して受信し、その内容に一または複数のサービス要求が含まれている場合、その内容から要求のあったサービスごとに必要なコントロールサービスやアプリケーション１３０を判断して選定し、選定されたコントロールサービスやアプリケーション１３０に対してサービス要求を行う。
【０２０７】
また、エージェントアプリ１１７は、受信したエージェントに含まれるサービス要求に必要なコントロールサービスやアプリケーション１３０が自己の複合機１００内部で正常に動作しているか否かを判断し、正常動作していない場合（存在しない場合も含む）には、ネットワーク上の他の複合機１００を自律的に検索して、当該他の複合機１００にエージェントを送信する。
【０２０８】
エージェントを受信した他の複合機１００は、エージェントアプリ１１７によって、サービスごとに必要なコントロールサービスやアプリケーション１３０の選定とサービス要求、および必要なコントロールサービスやアプリケーション１３０の正常動作の調査を行う。このため、サービスに必要なコントロールサービスやアプリケーション１３０が正常動作していない限り、エージェントはネットワーク内の複合機を順に移動していく。
【０２０９】
ここで、サービス要求に必要なモジュールとは、例えばプリント要求についてはプリンタアプリ１１１、ＥＣＳ１２４、ＭＣＳ１２５およびＳＲＭ１２３であり、ファクシミリ送信要求についてはファックスアプリ１１３、ＦＣＳ１２７、ＥＣＳ１２４、ＭＣＳ１２５およびＳＲＭ１２３である。
【０２１０】
次に、実施の形態３にかかる複合機１００によるエージェント機能を利用したプロセス間通信について説明する。なお、実施の形態３にかかる複合機１００において、複合機１００内部で動作するプロセス間の通信は、実施の形態１の複合機１００と同様に、オブジェクトのメソッド実行によるメッセージ送信によって実現されている。
【０２１１】
図１７は、このエージェント機能を複合機に適用した場合のユーザのＰＣと複合機のやりとりの例を示す模式図である。図１９は、複合機１００ａにおけるプロセス間通信の流れを示す説明図である。ここでは、ＬＡＮなどのネットワーク９０１にＰＣ９００および複数の複合機１００ａ，１００ｂ，１００ｃが接続されているものとする。また、各複合機１００ａ，１００ｂ，１００ｃは図１６に示した構成を有するものとする。
【０２１２】
また、ＰＣ９００はエージェントの送信を行うエージェントエンジン９０２が搭載されている。なお、複合機１００ａ，１００ｂ，１００ｃは、エージェントアプリ１１７がエージェントエンジン９０２に相当する。
【０２１３】
図１７に示すように、ＰＣ９００のエージェントエンジン９０２によって、エージェントが複合機１００ａに対して送信される。このエージェントには、複数のサービス要求を記述することができる。このように複数のサービス要求が記述されたエージェントは、エージェントを受信する複合機（あるいは、さらにネットワーク上の他の複合機にエージェントが移動した場合には、その移動先の複合機）に対し、記述された複数のサービス要求を連続的に実行させることを指示している。
【０２１４】
図１７の例では、「ファイル転送  Ｘ  ｔｏ  ＰＣ」および「プリント  Ｘ」という２つのサービス要求がプログラム形式で一つのエージェントに記述されている。ここで、「ファイル転送  Ｘ  ｔｏ  ＰＣ」は、複合機１００ａのＨＤＤ１０５に格納されているファイルＸのＰＣ９００へのファイル転送要求を示している。また、「プリント  Ｘ」は、ファイルＸのプリント要求を示している。従って、図１７に示す例のエージェントは、エージェントを受信する複合機に対して、「ファイルＸをＰＣ９００にファイル転送し、次にファイルＸをプリントする」ことを指示したものである。
【０２１５】
複合機１００ａでは、ＰＣ９００からのエージェントをＮＣＳ１２８で受信して（ステップＳ１１０１）、エージェントアプリ１１７へ送信する（ステップＳ１１０２）。
【０２１６】
エージェントアプリ１１７は、受信したエージェントに記述されたサービス要求の内容から、まずファイル転送に必要なネットファイルアプリ１１５とＭＣＳ１２５を選定する。また、エージェントアプリ１１７は、受信したエージェントの内容から、プリント機能に必要なプリンタアプリ１１１とＥＣＳ１２４とＭＣＳ１２５とＳＲＭ１２３とを選定する。
【０２１７】
そして、エージェントアプリ１１７は、ファイル転送のためネットファイル１１５に対して、ＨＤＤ１０５に格納されているファイルＸをＰＣ９００にファイル転送する旨のサービス要求を行う（ステップＳ１１０３）。
【０２１８】
ネットファイルアプリ１１５は、このサービス要求を受信すると、ＭＣＳ１２５からＨＤＤ１０５にアクセスして（ステップＳ１１０４、Ｓ１１０５）、ファイルＸを読み出し、メモリなどに一時的に格納しておく。ネットファイルアプリ１１５は、読み出しの実行結果をエージェントアプリ１１７に通知する（ステップＳ１１１１）。
【０２１９】
また、エージェントアプリ１１７は、プリンタアプリ１１１に対して、読み出したファイルＸをカラーラインプリンタ１０２または白黒プリンタ１０１でプリントする旨の要求を行う（ステップＳ１１０６）。
【０２２０】
プリンタアプリ１１１は、このプリント要求を受信すると、実施の形態１でプリント動作で説明した手順で、ＥＣＳ１２４、ＭＣＳ１２５、ＳＲＭ１２３間のプロセス間通信を行って（ステップＳ１１０７、Ｓ１１０８、Ｓ１１０９）、ファイルＸをプリントする（ステップＳ１１１０）。そして、プリンタアプリ１１１は、エージェントアプリ１１７にプリント実行結果を通知する（ステップＳ１１１２）。
【０２２１】
つぎに、エージェントアプリ１１７は、２つの実行結果を追加したエージェントとメモリに一時的に格納されているファイルＸを、ＮＣＳ１２８によってネットワーク上のＰＣ９００に送信する（ステップＳ１１１３，Ｓ１１１４）。
【０２２２】
ここで、エージェントアプリ１１７を利用しなかった場合の処理について説明しておく。図１８は、エージェント機能を利用しない場合のユーザのＰＣと複合機のやりとりの例を示す模式図である。
【０２２３】
図１８に示すように、エージェントアプリ１１７がない場合には、ユーザはＰＣ９００から「ファイルＸのファイル転送」と「ファイルＸのプリント」という２つの要求を別々に複合機１００ａに送信しなければならない。また、各要求に対する応答も別個に受信されることになる。このため、効率的なサービスの提供を受けられないばかりか、ネットワークにアクセスする回数も４回と多くなってしまう。
【０２２４】
これに対し、図１７に示すようにエージェントを利用した場合には、ＰＣ９００のユーザは「ファイルＸのファイル転送とプリント」という２つの要求を一つのエージェントで行えば、エージェントアプリ１１７によって、必要なアプリ、コントロールサービスが自律的に判断されて各要求に対するサービスの提供を効率的に受けることができる。このため、ネットワークにアクセスする回数も、最初のサービス要求送信時と、最後の実行結果通知およびファイル転送時の２回だけですむので、ネットワークにかかる負荷も軽減する。
【０２２５】
つぎに、エージェントを利用してネットワークに接続された複数の複合機の間でプロセス間通信を行う場合について説明する。図２０は、エージェント機能を複数の複合機に適用した場合のユーザのＰＣと複合機のやりとりの例を示す模式図である。
【０２２６】
図２０に示すように、ＬＡＮなどのネットワークにはＰＣ９００と複数の複合機１００ａ，１００ｂ，１００ｃが接続されている。複合機１００ａ，１００ｂおよび１００ｃは、いずれも図１６に示した構成を有しており、従ってエージェントアプリ１１７を備えている。また、ＰＣ９００にはエージェントの送信を行うエージェントエンジン９０２が搭載されている。
【０２２７】
図２０に示すように、エージェントにはサービス要求コマンドが記述されている。このようにサービス要求コマンドが記述されたエージェントは、エージェントを受信した複合機で記述されているサービス要求コマンドのサービス要求が実行可能か否かを調べ、実行可能である場合にサービス要求を行い、実行不可能である場合にネットワークに接続された他の複合機にエージェントを移動（送信）させて、移動先の複合機でサービス要求が実行可能か否かを調べる旨を示したものである。
【０２２８】
図２０のエージェントの例では、サービス要求コマンドとして「ファクシミリ送信」が指定されているので、エージェントを受信した複合機１００ａで「ファクシミリ送信」が実行可能か否かを調べ、実行可能である場合には「ファクシミリ送信」のサービス要求を行い、実行不可能である場合にはネットワークに接続された他の複合機１００ｂ，１００ｃなどにエージェントを送信して、移動先の複合機で複合機１００ａと同様に処理を行うことを指示している。
【０２２９】
なお、図２０のエージェントの例では、サービス要求コマンドを一つしか指定していないが、複数のサービス要求コマンド指定しても良い。この場合には、指定された複数のサービス要求コマンドに対して順次上記と同様の処理が行われることになる。
【０２３０】
また、図２０のエージェントの例では、サービス要求コマンドしか記述されておらず、この場合、サービス要求が実行できないと判断された場合に自律的にネットワーク内の他の複合機にエージェントが移動することを示しているが、エージェントにおいて、サービス要求コマンドの行の下に、さらに例えば「複合機１００ａのネットワークアドレス→複合機１００ｂのネットワークアドレス→複合機１００ｃのネットワークアドレス」などを記述して、ネットワーク内で移動する複合機およびエージェントが移動する順番を指定しても良い。
【０２３１】
この場合には、複合機１００ａでサービス要求が実行できない場合に、エージェントが自律的に複合機１００ｂ、ついで複合機１００ｃに移動することを示したこととなる。
【０２３２】
なお、エージェントは、ＰＣ９００のエージェントエンジン９０２によって、例えばｔｅｌｅｓｃｒｉｐｔのＧＯコマンドを実行することにより複合機１００ａに送信される。
【０２３３】
複合機１００ａはこのエージェントをＮＣＳ１２８で受信して、エージェントアプリ１１７へ送信する。エージェントを受信したエージェントアプリ１１７はエージェントの内容を解釈し、まずファクシミリ送信に必要なファックスアプリ１１３、ＦＣＳ１２７、ＥＣＳ１２４、ＭＣＳ１２５およびＳＲＭ１２３の各プロセスが正常に動作しているか否かを調査する。
【０２３４】
ここで、正常動作の調査は、たとえばエージェントアプリ１１７から各プロセスに対してアクセスし、アクセスに対する応答があった場合に正常動作していると判断するように構成すれば良い。
【０２３５】
そして、ファックスアプリ１１３、ＦＣＳ１２７、ＥＣＳ１２４，ＭＣＳ１２５およびＳＲＭ１２３のすべてが正常動作している場合は、これらのプロセスを選定し、ファックスアプリ１１３に対してファクシミリ送信要求を送信する。この場合は、実施の形態１で説明したファクシミリ送信動作の手順と同様の処理が行われる。
【０２３６】
しかし、ファックスアプリ１１３、ＦＣＳ１２７、ＥＣＳ１２４，ＭＣＳ１２５およびＳＲＭ１２３のいずれかが異常であると判断された場合は、次のような処理を行う。ここでは、ＥＣＳプロセス１２４が異常であった場合を考える。
【０２３７】
このとき、エージェントアプリ１１７は、動作が異常であるプロセスのプロセス名と自己のネットワークアドレスなどの情報をエージェントに追加する。そして、ネットワーク９０１内の複合機を自律的に検索し、最初に発見された複合機（図１２の例では複合機１００ｂ）にエージェントを送信する。
【０２３８】
複合機１００ｂでは、エージェントアプリ１１７によって複合機１００ａから送信されてきたエージェントを受信する。そして、複合機１００ａのエージェントアプリ１１７と同様にエージェントの内容を解釈し、ファクシミリ送信に必要なプロセスであって、かつエージェントに記述された、複合機１００ａで動作が異常なプロセスおよびそのプロセスから呼び出されるプロセスであるＥＣＳ１２４、ＭＣＳ１２５およびＳＲＭ１２３が正常に動作しているか否かを調査する。そして、ＥＣＳ１２４、ＭＣＳ１２５およびＳＲＭ１２３のいずれもが正常であれば、その旨のメッセージをエージェントに追加して複合機１００ａに対して送信する。
【０２３９】
複合機１００ａのエージェントアプリ１１７は、複合機１００ｂからのエージェントを受信すると、複合機１００ａ内のファックスアプリ１１３とＦＣＳ１２７とを選定するとともに、ＥＣＳ１２４、ＭＣＳ１２５、ＳＲＭ１２３については複合機１００ｂ内のものを選定する。これにより、ファクシミリ送信は、ＥＣＳプロセス１２４が正常に動作している複合機１００ｂから行われる。
【０２４０】
複合機１００ａでプロセスの選定が終了したら、ファクシミリ送信処理を次のように実行する。図２２は、複合機１００ａおよび複合機１００ｂにおけるプロセス間通信の流れを示すデータシーケンス図である。
【０２４１】
複合機１００ａのエージェントアプリ１１７は、ファックス送信要求メッセージを、複合機１００ａ内のファックスアプリ１２７に送信する（ステップＳ１４００）。ファックスアプリ１２７は、ファックス送信要求メッセージを受信すると、送信スタート要求メソッドを実行して、ＦＣＳプロセス１２７に送信スタート要求メッセージを送信する（ステップＳ１４０１）。
【０２４２】
複合機１００ａのＦＣＳプロセス１２７がファックスアプリプロセス１１３から送信スタート要求メッセージを受信した場合には、送信スタートメソッドを実行して、ジョブ動作モード設定要求メッセージをエージェントに追加する。そして、エージェントアプリ１１７によって複合機１００ｂのネットワークアドレスにエージェントを送信する（ステップＳ１４０２）。これにより、ジョブ動作モード設定メッセージは、エージェントによってネットワークアドレスで指定された複合機１００ｂに送信される。
【０２４３】
複合機１００ｂでは、エージェントアプリ１１７によってエージェントを受信して、エージェントに記述されているジョブ動作モード設定要求メッセージをＥＣＳプロセス１２４に送信する（ステップＳ１４０３）。複合機１００ｂのＥＣＳプロセス１２４は、ジョブ動作モード設定要求メッセージを受信すると、ジョブ動作モード設定メソッドを実行してプリンタジョブの動作モード設定を行い、実行結果メッセージをエージェントに追加してエージェントアプリ１１７によってエージェントを複合機１００ａに送信する（ステップＳ１４０４）。
【０２４４】
複合機１００ａは、複合機１００ｂからのエージェントをエージェントアプリ１１７で受信して、エージェントに記述されている実行結果メッセージをＦＣＳプロセス１２７に送信する（ステップＳ１４０５）。ＦＣＳプロセス１２７は実行結果メッセージを受信すると、ジョブスタート要求メソッドを実行してジョブスタート要求メッセージをエージェントに追加する。そして、エージェントアプリ１１７によって複合機１００ｂにエージェントを送信する（ステップＳ１４０６）。
【０２４５】
複合機１００ｂでは、エージェントアプリ１１７によってエージェントを受信して、エージェントに記述されているジョブスタート要求メッセージをＥＣＳプロセス１２４に送信する（ステップＳ１４０７）。複合機１００ｂのＥＣＳプロセス１２４はジョブスタート要求メッセージを受信すると、ジョブスタートメソッドを実行して、プリンタジョブの開始処理を行い、その実行結果メッセージをエージェントに追加してエージェントアプリ１１７によってエージェントを複合機１００ａに送信する（ステップＳ１４０８）。
【０２４６】
複合機１００ａでは、複合機１００ｂからのエージェントをエージェントアプリ１１７で受信して、エージェントに記述されている実行結果メッセージをＦＣＳプロセス１２７に送信する（ステップＳ１４０９）。
【０２４７】
一方、複合機１００ｂでは、ＥＣＳプロセス１２４がメモリ確保要求メソッドを実行して複合機１００ｂ内のＭＣＳプロセス１２５に対してメモリ確保要求メッセージを送信する（ステップＳ１４１０）。また、スキャナエンジンの資源獲得のため、資源獲得要求メソッドを実行して、複合機１００ｂ内のＳＲＭプロセス１２３に対して資源獲得要求メッセージを送信する（ステップＳ１４１１）。かかるメッセージの受信に対するＭＣＳプロセス１２５およびＳＲＭプロセス１２３の処理は、実施の形態１で説明した動作と同様であるため説明を省略する。  複合機１００ｂのＥＣＳプロセス１２４は、資源獲得の実行結果メッセージを受信したら、スキャンパラメータ確定要求メソッドを実行してスキャンパラメータ確定要求メッセージをエージェントに追加して、エージェントアプリ１１７によってエージェントを複合機１００ａに送信する（ステップＳ１４１２）。
【０２４８】
複合機１００ａでは、エージェントアプリ１１７によってエージェントを受信して、エージェントに記述されているスキャンパラメータ確定要求メッセージをＦＣＳプロセス１２７に送信する（ステップＳ１４１３）。ＦＣＳプロセス１２７は、このスキャンパラメータ確定要求メッセージを受信すると、スキャンパラメータのメッセージをエージェントに追加して、エージェントアプリ１１７によってエージェントを複合機１００ｂに送信する（ステップＳ１４１４）。複合機１００ｂは、複合機１００ａから送信されたエージェントをエージェントアプリ１１７によって受信して、エージェントに記述されたスキャンパラメータメッセージをＥＣＳプロセス１２４に送信する（ステップＳ１４１５）。
【０２４９】
これ以降のプロセス間通信は、同一複合機１００ｂの内部で行われるものであり、実施の形態１で説明したファクシミリ送信動作と同様であるため説明を省略する。これにより、複合機１００ａにおけるファクシミリ送信スタート要求に対して、複合機１００ｂでファクシミリ送信が行われることになる。
【０２５０】
複合機１００ｂにおけるスキャンおよびファクシミリ送信処理が終了すると、複合機１００ｂのＥＣＳプロセス１２４は、スキャン終了通知メッセージをエージェントに追加し、エージェントアプリ１１７によってこのエージェントを複合機１００ａに送信する（ステップＳ１４１６）。複合機１００ａでは、このエージェントをエージェントアプリ１１７によって受信し、エージェントに記述されたスキャン終了通知メッセージをＦＣＳプロセス１２７に送信する（ステップＳ１４１７）。
【０２５１】
そして、複合機１００ａでは、エージェントアプリ１１７によってファクシミリ送信の実行結果をエージェントに追加して、このエージェントを複合機１００ｂに送信する（ステップＳ１４１８）。複合機１００ｂのエージェントアプリ１１７は、このエージェントを受信してＰＣ９００に転送する（ステップＳ１４１９）。エージェントがＰＣ９００で受信されることによって、ファクシミリ送信動作を完了する。
【０２５２】
なお、この実施の形態３では、複合機１００ｂにおいて必要なプロセスが正常動作している場合について説明したが、複合機１００ｂでも必要なプロセスに異常があった場合には、エージェントアプリ１１７によってエージェントはネットワーク上の他の複合機、例えば複合機１００ｃに送信され、上述の複合機１００ｂにおける処理と同様の処理が行われる。
【０２５３】
また、実施の形態３の複合機１００ａ，１００ｂでは、ＥＣＳプロセス１２４が正常動作していない場合を例にあげて説明したが、他のコントロールサービスあるいはアプリケーションのプロセスに異常があった場合あるいは存在しない場合も同様の処理が行われる。この場合、コントロールサービスは存在するが、エージェントアプリ１１７を除いたアプリケーションが存在しない複合機であってもよい。
【０２５４】
ここで、エージェントアプリ１１７を利用しなかった場合の処理について説明しておく。図２１は、エージェント機能を利用しない場合のユーザのＰＣから複合機１００ａ，１００ｂに対するファックス送信要求のやりとりの例を示す模式図である。
【０２５５】
図２１に示すように、ユーザがＰＣ９００から複合機１００ａに対して、（１）ファックス送信要求を行った場合で、ＥＣＳ１２４など必要なプロセスが正常動作していない場合には、複合機１００ａからＰＣ９００に対して、（２）ファクス送信不可の応答メッセージが送信される。
【０２５６】
このため、ユーザはＰＣ９００から別の複合機１００ｂに対して、（３）ファックス送信要求を行う必要がある。複合機１００ｂにおいてファックス送信に必要なプロセスがすべて正常動作している場合には、ファックス送信が行われ、複合機１００ｂからＰＣ９００に対して、（４）完了通知が送信されてくるが、複合機１００ｂでもファックス送信が不可能な場合にはユーザはさらに別の複合機に対してファックス送信要求を行う必要があり、ユーザの操作がきわめて煩雑なものとなる。また、ファックス送信要求を繰り返し行えば、それだけＰＣ９００と複合機１００ａ，１００ｂ間のネットワーク９０１の占有が生じてしまい、ネットワーク負荷も過大なものとなる。
【０２５７】
これに対し、図２０に示す実施の形態３の複合機１００ａのようにエージェントとエージェントアプリ１１７を使用した場合には、ＰＣ９００のユーザはファックス送信要求が記述された１つのエージェントを、複合機１００ａに対して１回だけ送信するだけで、たとえ複合機１００ａがファックス送信が不可能な状態であっても、上述のようにエージェントアプリ１１７が自律的にファックス送信可能な複合機をネットワーク内で自律的に検索して、検索された複合機１００ｂによってファックス送信を行うようになっているので、多種多様な複合機のサービスをユーザに効率的に提供することができる。
【０２５８】
また、ＰＣ９００と複合機１００ａ，１００ｂ間のネットワークのアクセス回数も、最初のサービス要求送信時と、最後の完了通知の２回だけですむので、ネットワークにかかる負荷も軽減することとなる。
【０２５９】
なお、実施の形態３の複合機１００ａ，１００ｂでは、本発明のエージェント処理手段としてエージェントアプリ１１７を設けているが、エージェント処理手段に相当するプロセスを、アプリケーション層ではなくコントロールサービス層に設けても良い。この場合、既存のコントロールサービスとは別個に、例えばエージェントコントロールサービスを設けてエージェント処理手段を構成する他、例えば、ＳＣＳ１２２などの既存のコントロールサービスのプロセスにエージェント処理を行うスレッドを設ける構成としてもよい。
【０２６０】
また、実施の形態３において、図１７および図２０で示したエージェントの内容は、一例を示すものであり、複合機１００の構成および機能、またはネットワーク９０１の構成などにより任意に記述することが可能である。また、エージェントの記述形式も、実施の形態３のエージェント例に限定されるものではなく、ＰＣ９００のエージェントエンジン９０２やエージェントアプリ１１７の種類によって任意の形式とすることが可能である。
【０２６１】
本発明は、具体的に開示された実施の形態に限定されるものでなく、本発明の範囲内で種々の変形や変更が可能である。
【図面の簡単な説明】
【０２６２】
【図１】発明の実施の形態である複合機の構成を示すブロック図である。
【図２】実施の形態１の複合機上で動作するサーバプロセスとクライアントプロセスの関係を示すブロック図である。
【図３】実施の形態１の複合機において、各アプリおよび各コントロールサービスの各オブジェクトであらかじめ定義されているメソッドを示す説明図である。
【図４】実施の形態１の複合機でプリンタ動作を行う場合のプリンタアプリ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【図５】実施の形態１の複合機でスキャナ動作を行う場合のスキャナアプリ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【図６】実施の形態１の複合機でコピー動作を行う場合のコピーアプリ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【図７】実施の形態１の複合機でファクシミリ送信動作を行う場合のファックスアプリ、ＦＣＳ、ＥＣＳ、ＭＣＳ、ＳＲＭの各プロセス間のデータシーケンスを示す説明図である。
【図８】実施の形態２の複合機上で動作するサーバプロセスとクライアントプロセスの関係を詳細に示すブロック図である。
【図９】実施の形態２のクライアントプロセスとサーバプロセスとを生成する画像形成装置用通信プログラム生成装置（スタブジェネレータ）の機能的構成を示すブロック図である。
【図１０】メッセージファイルの記述例を示す説明図である。
【図１１】スタブジェネレータにより生成されるクライアントスタブの一例を示す説明図である。
【図１２】スタブジェネレータにより生成されるサーバスケルトンの一例を示す説明図である。
【図１３】スタブジェネレータにより生成されるヘッダの一例を示す説明図である。
【図１４】サーバスケルトン、クライアントスタブおよびヘッダの生成処理のフローチャートである。
【図１５】クライアントプログラムから関数コールを行った場合におけるサーバプログラムとの呼び出しおよび応答のシーケンスを示す説明図である。
【図１６】実施の形態３にかかる複合機の構成を示すブロック図である。
【図１７】実施の形態３におけるユーザのＰＣと複合機のやりとりの例を示す模式図である。
【図１８】エージェント機能を利用しない場合のユーザのＰＣと複合機のやりとりの例を示す模式図である。
【図１９】実施の形態３の複合機におけるプロセス間通信の流れを示す説明図である。
【図２０】実施の形態３におけるユーザのＰＣと複合機のやりとりの例を示す模式図である。
【図２１】エージェント機能を利用しない場合のユーザのＰＣから複合機に対するファックス送信要求のやりとりの例を示す模式図である。
【図２２】実施の形態３の複合機および他の複合機におけるプロセス間通信の流れを示すデータシーケンス図である。
【符号の説明】
【０２６３】
１００，１００ａ，１００ｂ，１００ｃ    複合機
１０１    白黒ラインプリンタ
１０２    カラーラインプリンタ
１０３    スキャナ
１０４    ファクシミリ
１０５    ハードディスク（ＨＤＤ）
１０６    ネットワークインターフェース
１１０    ソフトウェア群
１１１    プリンタアプリ
１１２    コピーアプリ
１１３    ファックスアプリ
１１４    スキャナアプリ
１１５    ネットファイルアプリ
１１６    工程検査アプリ
１２０    プラットホーム
１２１    汎用ＯＳ
１２２    ＳＣＳ
１２３    ＳＲＭ
１２４    ＥＣＳ
１２５    ＭＣＳ
１２６    ＯＣＳ
１２７    ＦＣＳ
１２８    ＮＣＳ
１２９    ＦＣＵＨ
１３０    アプリケーション
２０１，１６００    クライアントプロセス
２０２，１６１０，１６２０    サーバプロセス
９００    ＰＣ
９０１    ネットワーク
９０２    エージェントエンジン
１６０１，１６１３，１６２３    スレッド
１６０２    クライアントスタブ
１６０３    クライアントディスパッチャ
１６１１，１６２１    サーバディスパッチャ
１６１２，１６２２    サーバスケルトン
【図１】
2007012057.tif 000003
【図２】
2007012057.tif 000004
【図３】
2007012057.tif 000005
【図４】
2007012057.tif 000006
【図５】
2007012057.tif 000007
【図６】
2007012057.tif 000008
【図７】
2007012057.tif 000009
【図８】
2007012057.tif 000010
【図９】
2007012057.tif 000011
【図１０】
2007012057.tif 000012
【図１１】
2007012057.tif 000013
【図１２】
2007012057.tif 000014
【図１３】
2007012057.tif 000015
【図１４】
2007012057.tif 000016
【図１５】
2007012057.tif 000017
【図１６】
2007012057.tif 000018
【図１７】
2007012057.tif 000019
【図１８】
2007012057.tif 000020
【図１９】
2007012057.tif 000021
【図２０】
2007012057.tif 000022
【図２１】
2007012057.tif 000023
【図２２】
2007012057.tif 000024