以下、本発明の第1の実施の形態について図面を参照して詳細に説明する。
図1は、本発明を実現するためのネットワークシステムの概略構成であり、PC100A,PC100Bと、デバイスサーバ200と、プリンタ300(デバイス)などから構成されている。
このネットワークシステムでは、デバイスサーバ200とプリンタ300をUSB(UniversalSerial
Bus)やIEEE1394などのインターフェースに準拠した接続ケーブル400でローカル接続する。また、デバイスサーバ200とPC100(PC100A,PC100B)は、有線又は無線のネットワーク500で接続する。
また、図1のネットワークシステムでは、デバイスサーバ200、プリンタ300をそれぞれ別体の装置で構成しているが、この構成に限定されるものではなく、同等の機能を実現できる構成であれば種々の構成を採り得ることは勿論である。例えば、デバイスサーバ200をプリンタ300のケーシング内に収まるように一体構造としても良い。
なお、以降の説明においては、クライアントPCのOSをWindows(登録商標)、デバイスをプリンタ、デバイスサーバとデバイスの接続インターフェースをUSBとした場合の構成で説明するが、これらに限定されず、別のOSや接続インターフェースを使用しても良い。
次に、図1のネットワークシステムを構成する各装置について順次説明してゆく。
まず、クライアントであるPC100について説明する。PC100(PC100A,PC100B)は、例えば、パーソナルコンピュータのような装置であり、ネットワーク500と接続し、デバイスサーバ200を介してプリンタ300を利用することが可能な構成となっている。
図2は、PC100(PC100A,PC100B)のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
PC100は、CPU101、入力部102、表示部103、メモリ104、通信部105、外部記憶部106などから構成されており、これらが内部バス107で接続されている。
外部記憶部106は、OS110、アプリケーションプログラム111、本発明を実現するためのソフトウェア群112〜118(後述)など各種ソフトウェアが記録されている。ここで、アプリケーションプログラム111とは、プリンタ300に対して印刷処理を実行させることができるソフトウェアプログラムを指す。
外部記憶部106に記憶されたこれらソフトウェアは、CPU101の制御に従い、メモリ104上に読み出されて実行される。
通信部105は、ネットワーク500(有線又は無線ネットワーク)に接続するためのインターフェースであり、デバイスサーバ200との間でデータ通信を行うことで、PC100からデバイスサーバ200を介したプリンタ300へのアクセスを可能とする。
本発明を実現するためのソフトウェア群112〜118について説明する。
ネットワークインターフェース層112は、Ethernet(登録商標)のような有線ネットワーク、若しくは、IEEE802.11aやIEEE802.11bのような無線ネットワークなどネットワーク500に対応したネットワークパケットによる送受信や通信制御を行うためのソフトウェアである。
ネットワークプロトコル層113は、USBパケットに対してIP(Internet Protocol)ヘッダの付加、取り外しの処理を行い、ネットワーク500を介して接続されているデバイスサーバ200との間のデータ通信を制御するソフトウェアである。
常駐サービス114は、クライアントPC100が起動するとともに動作を開始してデバイスサーバ200を監視するソフトウェアである。また、後述するUSB仮想バスドライバ115をロードするソフトウェアである。
さらに、常駐サービス114は、ネットワークプロトコル層113とネットワークインターフェース層112を介してUDPなどを用いてデバイスサーバ200と通信し、デバイスサーバ200との接続状態及びプリンタ300との接続状態を定期的に確認する。
ここで、デバイスサーバ200との間の接続状態とは、ネットワーク500との物理的な接続状態及び他のクライアントPCとのセッションの有無などが含まれる。また、プリンタ300の接続状態とは、プリンタ300とでデバイスサーバ200をローカル接続している接続ケーブル400の接続状態及びプリンタ300の電源オン・オフなどの状態が含まれる。
USB仮想バスドライバ115は、クライアントPCに擬似的にプリンタ300(デバイス)が接続されたようにシミュレートし、OS110のモジュールであるUSBプリンタクラスドライバ116をロードするソフトウェアである。また、後述するUSBフィルタドライバ117からの通知に基づいてデバイスサーバ200との間のセッション制御を行うソフトウェアである。
USBプリンタクラスドライバ116は、プラグアンドプレイイベントを生成し、また、制御コマンドを送受信するためのUSBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードするソフトウェアである。さらに、後述するプリンタドライバ118で生成される制御コマンドをUSBパケットに変換し、USBパケットを制御コマンドに変換するソフトウェアである。
USBフィルタドライバ117は、USBポートの「オープン」、「クローズ」やUSBポートを通過する制御コマンドの送受信を監視するソフトウェアである。また、監視した情報(以下、監視結果)をもとに、USB仮想バスドライバ115と連携することで、セッション接続の開始、終了を制御するソフトウェアである。
なお、セッション接続の開始、終了は、USBポートの「オープン」、「クローズ」の監視結果をもとにして制御するが、さらにUSBポートを通過する制御コマンドの送受信の監視結果を組み合わせて制御することも可能である。本発明の実施の形態では、USBポートの「オープン」、「クローズ」の監視結果とUSBポートを通過する制御コマンドの送受信の監視結果を組み合わせて制御する場合を例にして説明する。
プリンタドライバ118は、OS110やアプリケーションプログラム111など上位層のソフトウェア(以下、上位層のソフトウェア)の指示により、デバイスであるプリンタ300に対する制御コマンドを生成し、この制御コマンドに対する応答を待つソフトウェアである。また、上位層のソフトウェアの指示に応じてUSBポートの「オープン」、「クローズ」を制御するソフトウェアである。
次に、デバイスサーバ200について説明する。デバイスサーバ200は、PC100A,100Bとデバイスであるプリンタ300と間の接続制御を行う装置である。
図3は、デバイスサーバ200のハードウェア構成及びソフトウェア構成の一例を示すブロック図である。
デバイスサーバ200は、CPU201、入力部202、表示部203、ROM204、RAM205、通信部206、USBI/F(インターフェース)207などから構成されており、これらが内部バス208で接続されている。
ROM(Read Only Memory)204には、OS210、制御プログラム211、本発明を実現するためのソフトウェア群212〜213(後述)など各種ソフトウェアが記録されており、これらソフトウェアは、CPU201の制御に従い、RAM205上に読み出されて実行される。
USBインターフェース207は、接続ケーブル400を介してプリンタ300とローカル接続するためのインターフェースである。
通信部206は、ネットワーク500(有線又は無線ネットワーク)に接続してPC100との間でデータ通信するためのインターフェースである。
本発明を実現するためのソフトウェア群212〜213について説明する。
通信層212は、ネットワークに接続された通信部206の制御を行うとともに、ネットワーク500に接続されているPC100との間のセッション制御やネットワークパケットによる通信を行うソフトウェアである。
また、USBコマンド層213との間で通信するため、ネットワークパケットとUSBパケットとの変換を行う。ネットワークパケットはUSBパケットにIPヘッダを付加して作成するため、変換にはIPヘッダの取り付け及び取り外しを行う。
USBコマンド層213は、USBパケットに基づいて、プリンタ300との間でデータ通信を行うソフトウェアである。
なお、通信層212、USBコマンド層213は、プリンタ300内に内蔵する構成であっても良い。また、通信層212の機能を備えたソフトウェアを別筐体内に設け、デバイス(プリンタ300)に接続可能なインターフェースを有した外付けアダプタの形態として構成してもよい。この場合は、USBコマンド層213の機能を持つソフトウェアは、プリンタ300側のRAMや外部記憶装置などに記録しておく構成とする。
プリンタ300は、PC100で作成した文字データや画像データ、図形データなどを紙やシートなどの媒体に印刷する装置(デバイス)である。
なお、本発明の実施の形態は、デバイスとしてプリンタを例に説明しているが、例えば、ストレージやスキャナなど、別の機能を備えたデバイスであってもよく、更に、多機能周辺装置(MFP)のように複数の機能を備えたデバイスであってもよい。
ここで、上述した図2及び図3で各ソフトウェア構成を説明したPC100とデバイスサーバ200間の通信、PC100とプリンタ300間の通信の大まかな流れについて図4を参照しながら説明する。
まず、PC100からプリンタ300へデータ送信を行う場合について説明する。
PC100においてプリンタ300へのアクセス要求が発生すると、プリンタドライバ118は、アクセス要求の内容に応じて制御コマンドを生成し、USBポートを「オープン」させる。そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してUSBプリンタクラスドライバ116へ送る。
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、USB仮想バスドライバ115は、デバイスサーバ200との間でセッション接続が開始されていない場合、デバイスサーバ200に対してセッション開始要求を送る。
USBプリンタクラスドライバ116は、USBフィルタドライバ117を経由して送られてきた制御コマンドをUSBパケットに変換し、USB仮想バスドライバ115へ送る。
USB仮想バスドライバ115では、デバイスサーバ200との間でセッション接続を開始すると、USBプリンタクラスドライバ116から送られてくるUSBパケットをネットワークプロトコル層113に送る。
ネットワークプロトコル層113は、USB仮想バスドライバ115から送られてきたUSBパケットにIPヘッダを付加し、ネットワーク500に適した形式のデータであるネットワークパケットを作成する。
ネットワークインターフェース層116は、ネットワークプロトコル層115で作成されたネットワークパケットをネットワーク500を介してデバイスサーバ200に送出する。
このように、デバイスサーバ200の通信層212とPC100のUSB仮想バスドライバ115の間は、信頼性のあるTCPプロトコルを用いており、セッション接続の開始・終了は、PC100のUSBフィルタドライバ117がUSBポートの「オープン」、「クローズ」の状態やUSBポートにおけるコマンドデータの送受信状態を監視し、USB仮想バスドライバ115と連携することによって制御している。
サーバ200では、まず、通信層212で、PC100からネットワーク500を介して送信されたネットワークパケットを受信し、ネットワークパケットからIPヘッダを取り外すことでUSBパケットに変換し、これをUSBコマンド層213へ送る。
USBコマンド層213では、通信層212から送られたUSBパケットを、接続ケーブル400を介してプリンタ300へ送る。
プリンタ300は、デバイスサーバ200から送られてきたUSBパケットを制御コマンドに変換して解析し、解析結果に応じた印刷処理を実行する。
次に、プリンタ300からPC100へデータ送信(応答)を行う場合について説明する。
上述した印刷処理などを行ったプリンタ300は、その結果をPC100に対する応答コマンドとしてUSBパケットでデバイスサーバ200へ送る。
デバイスサーバ200では、USBコマンド層213がプリンタからの応答コマンドであるUSBパケットを受け取り、それを通信層212へ送る。
通信層212では、USBコマンド層213からのUSBパケットにIPヘッダを付加し、ネットワーク500に適した形式のデータであるネットワークパケットを作成し、ネットワーク500を介してPC100に送出する。
このようにして、PC100とプリンタ300との間でデバイスサーバ200を介したデータ通信が実行されることになる。
次に、PC100(PC100A,PC100B)の基本制御フローについて、図5及び図6を参照しながら説明する。まず、図5は、PC100がプリンタ300にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
ユーザがPC100を起動すると、PC100内のソフトウェア群の中の常駐サービス114が動作し、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する。(ステップS501)。
常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中か否か判断するとともに、プリンタ300との接続状態を判断する(ステップS502)。
プリンタ300との接続が正常な状態でない、又は、デバイスサーバ200が他のクライアントPCとセッション接続中の場合(ステップS502でNo)、再び、ステップS501の処理に戻り、定期的にデバイスサーバ200の状態及びプリンタ300の接続状態の確認を行う。
プリンタ300との接続が正常であり、デバイスサーバ200が他のクライアントPCとセッション接続中でない場合(ステップS502でYes)、常駐サービス114はUSB仮想バスドライバ115をロードする(ステップS503)。
常駐サービス114は、USB仮想バスドライバ115をロードが完了すると、デバイスドライバのマウント命令を発行する(ステップS504)。
USB仮想バスドライバ115は、デバイスドライバのマウント命令が発行されると、デバイスサーバ200に対してセッション開始要求を送る(ステップS505)。
デバイスサーバ200との間でセッション接続が開始できなかった場合(ステップS506でNo)、常駐サービス114は、アンマウント命令を発行し(ステップS513)、USB仮想バスドライバ115をアンロードして(ステップS514)、再びステップS501の処理に戻る。
デバイスサーバ200との間のセッション接続が開始されると(ステップS506でYes)、USB仮想バスドライバ115は、デバイスサーバ200に対して、プリンタ300のデバイスドライバをロードするために必要となるデバイス情報を要求する(ステップS507)。
このとき、デバイスサーバ200は、PC100からのデバイス情報の要求をプリンタ300に送り、プリンタ300からデバイス情報の応答があると、このデバイス情報をPC100に返す。
PC100では、USB仮想バスドライバ115がデバイス情報の応答を受けて、プリンタ300が擬似的に接続されたようにシミュレートし、取得したデバイス情報に基づき、USBプリンタクラスドライバ116をロードする。(ステップS508)。
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(ステップS509、ステップS510)。
プリンタドライバ118のロードが完了すると、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション終了要求を送る(ステップS511)。そして、デバイスサーバ200との間のセッションの終了処理を行い、PC100とデバイスサーバ200との間のセッションを終了する(ステップS512)。
セッションが終了すると、PC100には、プリンタ300にアクセスして印刷するために必要なデバイスドライバが全てロードされた状態となる。そして、上位層のソフトウェア)から実行指示(以下、印刷実行命令)が発行されるまでの間、待機状態となる。
次に、PC100(PC100A,PC100B)において、上位層のソフトウェアから印刷実行命令が発行されてプリンタ300に印刷処理を実行させるときの制御動作の手順を図6に示すフローチャートを参照しながら説明する。
なお、上述した図5で説明したように、PC100には、必要なデバイスドライバが全てロードされており、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態にあるものとして説明する。
PC100によりプリンタ300で印刷処理を実行させるとき、上位層のソフトウェアから印刷実行命令が発行される(ステップS601)。
上位層のソフトウェアから印刷実行命令が発行されると、PC100のプリンタドライバ118は、印刷実行命令に応じた制御コマンドを生成し、USBポートを「オープン」する(ステップS602)。
そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してプリンタクラスドライバ116に送る。プリンタクラスドライバ116では、制御コマンドをUSBパケットに変換し、USB仮想バスドライバ115に送る(ステップS603)。
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、USB仮想バスドライバ115は、セッションが接続されていない場合、デバイスサーバ200に対してセッション開始要求を送る(ステップ604)。
このセッション開始要求に対し、デバイスサーバ200から「NG」応答があり、セッション接続を開始できない場合(ステップS605でNo)、ステップS604へ戻り、セッション接続が開始可能となるまで、デバイスサーバ200に対して定期的にセッション開始要求を送る。
一方、デバイスサーバ200から「OK」応答があると(ステップS605でYes)、PC100はデバイスサーバ200とのセッション接続を開始する(ステップS606)。これによって、PC100は、デバイスサーバ200を介してプリンタ300へアクセスして印刷処理が可能となる。
PC100は、上位層のソフトウェアからの指示に応じた制御コマンドを生成してデバイスサーバ200に送り、プリンタ300は、デバイスサーバ200から受信した制御コマンドに応じた印刷処理を実行し、その結果などをデバイスサーバ200に応答する(ステップS607)。
そして、上位層のソフトウェアから終了指示(以下、印刷終了命令)が発行されるまでステップS607の処理が繰り返される(ステップS608でNo)。
PC100の上位層のソフトウェアから印刷終了命令が発行されるとプリンタドライバ118は印刷終了命令に応じた制御コマンド(以下、終了コマンド)を生成し、USB仮想バスドライバ115を介して終了コマンドをデバイスサーバ200に送信する(ステップS608でYes)。
このとき、デバイスサーバ200では、PC100から受信した終了コマンドをプリンタ300に送信し、プリンタ300からの終了コマンドに対する応答を受信してPC100Aに送る処理を実行する。
PC100のプリンタドライバ118は、終了コマンドに対する応答を受信すると、USBポートを「クローズ」し、USBフィルタドライバ117は、USBポートの「クローズ」をUSB仮想バスドライバ115に通知する(ステップS609)。
USB仮想バスドライバ115は、USBポート「クローズ」の通知を受けると、デバイスサーバ200に対してセッション終了要求を送る(ステップS610)。
デバイスサーバ200からセッション終了「OK」の応答を受信すると、USB仮想バスドライバ115は、PC100Aとデバイスサーバ200との間のセッションを終了する(ステップS611)。そして、再び、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
なお、クライアントPCは、セッションが終了した後も常駐サービス114によって定期的に(例えば、1分間隔)デバイスサーバ200との間の接続状態を監視し、プリンタ300との接続状態を確認している。
従って、デバイスサーバ200との間のネットワーク500が終了、電源断、又は、プリンタ300の接続ケーブル断、電源断などの異常を検出した場合、常駐サービス114からアンマウント命令を発行し、ロードされているデバイスドライバ(プリンタドライバ118、USBフィルタドライバ117、USBプリンタクラスドライバ116、USB仮想デバイスドライバ115)をアンロードするようにしてもよい。
本実施の形態では、デバイスドライバのロードが完了した際にセッション接続を一旦終了させる(図5参照)。そして、クライアントPCにおけるUSBポートの「オープン」及び「クローズ」の状態と当該USBポートを通過する制御コマンドの送受信状態に基づいてセッション接続の開始、終了を行うことを特徴とする(図6参照)。
次に、デバイスサーバ200の制御動作について図7を参照しながら説明する。
デバイスサーバ200では、PC100からのパケットの受信を監視している。
セッション開始要求のパケットを受信した場合(ステップS701でYes)、他のPC100とセッション接続中であるか否かを確認する(ステップS702)。
既にセッション接続が開始されている場合(ステップS702でYes)、このPC100に対して「NG」を返す(ステップS703)。
セッション接続が開始されていない場合(ステップS702でNo)、このPC100とセッション接続を開始し(ステップ704)、セッション接続が完了すると、応答コマンドとして「OK」を返す(ステップS705)。
一方、上述したステップS701の処理において、セッション開始終了要求以外のパケットを受信したが送られてきた場合(ステップS701でNo)、セッション終了要求であれば(ステップS706でYes)、セッション接続中のPC100との間のセッションを終了し(ステップS707)、応答コマンドとして「OK」を返す(ステップS708)。
一方、上述したステップS706の処理において、セッション終了要求以外のパケットを受信した場合(ステップS706でNo)、そのパケットの種類に応じた応答処理を実行する(ステップS709)。
次に、上述したネットワークシステムにおいて、PC100Aからプリンタ300にアクセスして印刷処理を実行させて終了するまでの具体的なタイミングチャートについて説明する。
簡略化して分り易く説明するために、まず、PC100A一台だけがプリンタ300にアクセスする場合(1対1で接続する場合)について、図8を参照しながら説明する。
はじめに、図5で示したように、PC100において、プリンタ300のアクセスに必要なデバイスドライバが全てロードされ、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となるまでの過程を説明する。
ここでは、他のクライアントPCからのセッション開始要求の有無を考慮せず、PC100Aからのセッション開始要求に対して、デバイスサーバ200は常に「OK」を応答するものとする。
ユーザがPC100Aを起動すると、PC100A内のソフトウェア群の中の常駐サービス114が動作する。そして、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT801)。
PC100Aの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中でなく、プリンタ300が正常に接続されていることを確認すると、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT802)。
USB仮想バスドライバ115のロードが完了すると、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション開始要求を送る(タイミングT803)。
デバイスサーバ200が、PC100Aに対して「OK」を応答すると、PC100Aとデバイスサーバ200の間のセッション接続が開始される(タイミングT804)。
セッション接続が開始され、デバイスサーバ200を介してプリンタ300へのアクセスが可能となると、PC100Aは、デバイスサーバ200に対してデバイス情報を要求する(タイミングT805)。
デバイスサーバ200は、PC100Aからのデバイス情報の要求をプリンタ300に送り(タイミングT806)、プリンタ300からデバイス情報の応答があると(タイミングT807)、このデバイス情報をPC100Aに返す(タイミングT808)。
PC100Aでは、取得したデバイス情報に基づき、USB仮想バスドライバ115によって擬似的にプリンタ300が接続されたようにシミュレートし、OS110のモジュールであるUSBプリンタクラスドライバ116をロードする。
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(タイミングT809)。
プリンタドライバ118のロードが完了すると、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション終了要求を送り、PC100Aとデバイスサーバ200との間のセッションを終了する(タイミングT810)。
この時点で、PC100Aには、プリンタ300のアクセスに必要なデバイスドライバが全てロードされ、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
続いて、図6で示したように、待機状態のPC100Aがプリンタ300に印刷処理を実行させるまでの過程を説明する。
プリンタ300に印刷処理を実行させるため、上位層のソフトウェアから印刷実行命令が発行されると(タイミングT811)、PC100Aのプリンタドライバ118は、印刷実行命令に応じた制御コマンドを生成し、USBポートを「オープン」する(タイミングT812)。
そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してUSBプリンタクラスドライバ116に送る。USBプリンタクラスドライバ116では、送られてきた制御コマンドをUSBコマンドに変換してUSB仮想バスドライバ115に送る(タイミングT813)。
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、セッションが接続されていない場合、USB仮想バスドライバ115は、デバイスサーバ200に対してセッション開始要求を送る(タイミングT814)。
デバイスサーバ200から、セッション開始要求に対する「OK」応答を受信すると、PC100Aはデバイスサーバ200との間のセッション接続を開始する(タイミングT815)。
PC100AのUSB仮想バスドライバ115では、デバイスサーバ200から「OK」応答があり、セッション接続が開始されると、プリンタ300に対する制御コマンドをデバイスサーバ200へ送信する(タイミングT816)。
デバイスサーバ200は、制御コマンドを受信すると、これをプリンタ300に送信する(タイミングT817)。プリンタ300は、この制御コマンドに応じて印刷処理を実行し、その実行結果の応答をデバイスサーバ200に返す(タイミングT818)。デバイスサーバ200はプリンタ300からの応答をPC100Aに送る(タイミングT819)。
この後、デバイスサーバ200を介してPC100Aとプリンタ300との間でデータ通信が行われ、印刷処理が実行される。
PC100Aの上位層のソフトウェアから印刷終了命令が発行されると、プリンタドライバ118は、終了コマンドを生成し、USB仮想バスドライバ115を介してデバイスサーバ200に送信する(タイミングT820)。
デバイスサーバ200は、受信した終了コマンドをプリンタ300に送信し(タイミングT821)、プリンタ300から終了コマンドに対する応答を受信すると(タイミングT822)、この応答をPC100Aに送る(タイミングT823)。
PC100Aのプリンタドライバ118は、終了コマンドに対する応答を受信すると、USBポートを「クローズ」し、USBフィルタドライバ117は、USBポートの「クローズ」をUSB仮想バスドライバ115に通知する(タイミングT824)。
USB仮想バスドライバ115は、USBポート「クローズ」の通知を受けると、デバイスサーバ200に対してセッション終了要求を送る(タイミングT825)。そして、デバイスサーバ200との間でセッション終了処理を実行し、セッション終了「OK」の応答を受信すると、PC100Aとデバイスサーバ200との間のセッションが終了する(タイミングT826)。
次に、実際の運用により近いケースとして、前述のネットワークシステムにおいて、複数台のPC100(PC100A,PC100B)がプリンタ300にアクセスする場合(N対1で接続する場合)について、図9を参照しながら説明する。
図9は、PC100Aがセッション接続中のとき、若しくは、プリンタ300にアクセス中のときに、別のPC100Bからプリンタ300にアクセスしたときのタイミングチャートを示した説明図である。なお、PC100Aについては、前述した図8と同じ動作であるため、詳細な説明は省略する。
まず、PC100Aがデバイスドライバのロード中に、PC100Bからプリンタ300にアクセスしようとした場合について説明する。
PC100Aは、常駐サービス114によりUDPなどでデータ通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT901)。
PC100Bも同様に、常駐サービス114によりUDPなどでデータ通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT902)。
PC100Aの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中でないことを確認すると、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT903)。
ここまでは、PC100A、PC100Bはともに、常駐サービス114によりUDPなどでデバイスサーバ200とデータ通信するため、セッションを使用(専有)することはない。
ここで、PC100Aにおいて、ロードが完了したUSB仮想バスドライバ115からデバイスサーバ200に対してセッション開始要求が送られ、デバイスサーバ200から「OK」の応答があると、PC100Aとデバイスサーバ200との間でセッション接続が開始される(タイミングT904)。
PC100Aとデバイスサーバ200との間でセッション接続を開始すると、PC100Aがデバイスドライバのロードを完了するまでの間、デバイスサーバ200と間のセッションの接続は継続される(タイミングT905)。
PC100Bが、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行し(タイミングT906)、デバイスサーバ200に対してセッション開始要求を送った場合、既に、PC100Aとの間でセッション接続が開始されているため、PC100Aにおいてデバイスドライバのロードが完了するまでの間(セッションが終了されるまでの間)、デバイスサーバ200はPC100Bに対して「NG」応答を返す(タイミングT907)。
PC100Bでは、「NG」応答を受信すると、常駐サービス114によりデバイスサーバ200のセッションの接続状態を定期的に確認する。
デバイスサーバ200では、PC100Aにおいて必要なデバイスドライバのロードが完了し、セッション接続が終了した後(タイミングT908)、PC100Bからセッション開始要求を受信すると、PC100Bとの間でセッション接続を開始し(タイミングT909)、PC100Bがデバイスドライバのロードを完了するまでの間、PC100Bと間のセッション接続は継続される。
デバイスサーバ200は、PC100Bとの間でセッション接続中は、上述と同様にPC100Aなど他のクライアントPCからのセッション開始要求に対して「NG」応答を返す。
上述したように、セッション接続中のクライアントPCに必要なデバイスドライバのロードが完了するまでの間、他のクライアントPCとの間でセッション接続を行わないため、デバイスドライバのロード中は排他制御される。また、セッション接続したときにデバイス情報を取得するので、プリンタ300の最新のデバイス情報を得ることが可能である。
続いて、PC100Aがプリンタ300にアクセス中(印刷処理中)に、PC100Bからプリンタ300にアクセスしようとした場合について説明する。
この時点で、PC100A、PC100Bには、プリンタ300にアクセスして印刷するために必要なデバイスドライバが全てロードされた状態であるものとする。
まず、PC100Aでは、上位層のソフトウェアから印刷実行命令が発行され(タイミングT910)、デバイスサーバ200との間でセッション接続が開始されると(タイミングT911)、デバイスサーバ200を介してプリンタ300へのアクセスが可能となり、デバイスサーバ200に対して制御コマンドを送信し、プリンタ300で印刷処理が実行される(タイミングT912)。
PC100Aがプリンタ300へアクセス中(印刷処理中)の間、デバイスサーバ200との間はセッション接続中のままである。
このとき、PC100Bによって印刷実行命令が発行されると(タイミングT913)、PC100Aと同様に、PC100Bのプリンタドライバ118がプリンタ300に対する制御コマンドを生成し、USBポートを「オープン」する(タイミングT914)。
そして、PC100BのUSBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドが当該USBポートを通過するとこれを検知して仮想バスドライバ115に通知し、仮想バスドライバ115がデバイスサーバ200に対してセッション開始要求を送る(タイミングT915)。
しかし、既に、PC100Aがプリンタ300にアクセスし、印刷処理が実行中であるため、デバイスサーバ200は、PC100Aと間のセッション接続が終了されるまでの間、PC100Bのセッション開始要求に対して「NG」応答を返す(タイミングT916)。
PC100Bでは、「NG」応答を受信すると、常駐サービス114によりデバイスサーバ200のセッション接続を定期的に確認する。
デバイスサーバ200では、PC100Aとの間のセッション接続が終了された後(タイミングT917)、PC100Bからの「セッション開始要求」を受信すると、PC100Bとの間でセッション接続を開始する(タイミングT918)。そして、PC100Bによるプリンタ300へのアクセスが完了するまでの間、PC100Bとデバイスサーバ200との間のセッション接続は継続される。
このように、第1の実施の形態におけるクライアントPCは、プリンタ300にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してデバイス情報を取得し、デバイスドライバをロード後、セッション接続を終了して、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ300にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してプリンタ300における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始・終了を意識しなくても、複数台のクライアントPCでデバイスを共有することが可能となる。
次に、第2の実施の形態について説明する。本実施の形態は、デバイスドライバをロードするまでの過程において、セッション接続を必要としないUDPなどによりデバイスサーバ200とデータ通信してデバイス情報を取得する点が第1の実施の形態と異なる。
図10は、第1の実施の形態で説明した図5と同様、PC100(PC100A,PC100B)の制御フローであり、PC100がプリンタ300にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
ユーザがPC100を起動すると、PC100内のソフトウェア群の中の常駐サービス114が動作し、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する。(ステップS1001)。
続いて、常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200との接続を確認する(ステップS1002)。
ここで、デバイスサーバ200又はプリンタ300との接続が正常でない場合(ステップS1002でNo)、再び、ステップS1001の処理に戻り、定期的にデバイスサーバ200の状態を確認する。
デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続が正常である場合(ステップS1002でYes)、常駐サービス114は、USB仮想バスドライバ115をロードする(ステップS1003)。
USB仮想バスドライバ115をロードが完了すると、常駐サービス114は、デバイスドライバのマウント命令を発行する(ステップS1004)。
マウント命令が発行されると、USB仮想ドライバ115は、デバイスサーバ200との間をセッション接続が必要ないUDPなどを用いてデータ通信する。そして、デバイスサーバ200に対して、プリンタ300のデバイスドライバをロードするために必要となるデバイス情報を要求する(ステップS1005)。
このとき、デバイスサーバ200では、PC100から受信したデバイス情報の要求をプリンタ300に送信し、プリンタ300から応答情報としてデバイス情報を受信してPC100Aに送る処理を実行する。
PC100では、取得したデバイス情報に基づき、USB仮想バスドライバ115によって擬似的にプリンタ300が接続されたようにシミュレートし、USBプリンタクラスドライバ116をロードする(ステップS1006)。
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(ステップS1007、ステップS1008)。
プリンタドライバ118のロードが完了すると、プリンタ300にアクセスして印刷するために必要なデバイスドライバがPC100に全てロードされた状態となる。そして、上位層のソフトウェアからの印刷実行命令が発行されるまでの間、待機状態となる。
本実施の形態において、PC100は、UDPなどを用いてデバイスサーバ200とデータ通信しているので、セッション接続せずに必要なデバイスドライバをロードすることができる。なお、データ通信はセッション接続を必要としないプロトコルであればよく、UDPに限定されるものではない。
図9と同様に、前述のネットワークシステムにおいて、複数台のPC100(PC100A,PC100B)がプリンタ300にアクセスする場合(N対1で接続する場合)の実施の形態について、図11を参照しながら説明する。
図11は、PC100Aがデバイスドライバのロード中に、別のPC100Bからプリンタ300にアクセスしたときのタイミングチャートを示した説明図である。なお、PC100A及びPC100Bにおいて、デバイスドライバがロードされた後の動作については、第1の実施の形態(図9)と同じであるため、説明は省略する。
PC100A、PC100Bはともに、常駐サービス114によってセッション接続が必要ないUDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT1101)。
次に、PC100A、PC100Bの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続が正常であることを確認すると、USB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT1102)。
そして、PC100A、PC100BのUSB仮想バスドライバ115は、UDPなどを用いてデバイスサーバ200と通信してデバイス情報を要求する(タイミングT1103)。
デバイスサーバ200はPC100A、PC100Bからのデバイス情報の要求をプリンタ300に送り、プリンタ300からデバイス情報の応答があると、このデバイス情報をPC100A、PC100Bに対して返す(タイミングT1104)。
PC100A、PC100Bは、取得したデバイス情報に基づき、それぞれのUSB仮想バスドライバ115によって、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118を順にロードしてゆく(タイミングT1105)。
このように、第2の実施の形態におけるクライアントPCは、プリンタ300にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にセッション接続が必要ないUDPでデバイスサーバ200と通信してデバイス情報を取得し、デバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ300にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してプリンタ300における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始、終了を意識しなくても、複数台のクライアントPCでデバイスを共有することが可能となる。
次に、第3の実施の形態について説明する。本実施の形態は、PC100内にデバイスドライバのロードに必要な情報をキャッシュしている場合、このキャッシュされた情報に基づいて、デバイスサーバ200とデータ通信せずにデバイスドライバをロードする点が上述の実施の形態と異なる。
図12は、PC100がプリンタ300にアクセスして印刷処理を実行するために必要なデバイスドライバをロードするまでの制御動作の手順を示すフローチャートである。
ユーザがPC100を起動すると、PC100内のソフトウェア群の中の常駐サービス114が動作し、UDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する。(ステップS1201)。
常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続状態を確認する(ステップS1202)。
デバイスサーバ200及びプリンタ300との接続状態が正常でない場合(ステップS1202でNo)、再び、ステップS1201の処理に戻り、定期的にデバイスサーバ200及びプリンタ300との接続状態の確認を行う。
デバイスサーバ200からの応答により、デバイスサーバ200及びプリンタ300との接続状態が正常である場合(ステップS1202でYes)、常駐サービス114は、USB仮想バスドライバ115をロードする(ステップS1203)。
常駐サービス114は、USB仮想バスドライバ115をロードが完了すると、デバイスドライバのマウント命令を発行する(ステップS1204)。
マウント命令が発行されると、USB仮想ドライバ115は、プリンタ300のデバイスドライバのロードに必要となるデバイス情報をPC100内(自装置内)に既に保持(キャッシュ)しているかを確認する(ステップS1205)。
PC100内(自装置内)にキャッシュされた情報(以下、キャッシュ情報)がない場合(ステップS1205でNo)、PC100は、UDPによりデバイスサーバ200とデータ通信して、デバイスドライバのロードに必要となるデバイス情報を取得する(ステップS1206)。
PC100内(自装置内)にキャッシュ情報がある場合(ステップS1205でYes)、ステップS1207の処理はスキップし、次の処理ステップS1208に移る。
USB仮想バスドライバ115は、キャッシュ情報若しくは、サーバ200を介して取得したデバイス情報に基づき、擬似的にプリンタ300が接続されたようにシミュレートし、OS110のモジュールであるUSBプリンタクラスドライバ116をロードする(ステップS1207)。
USBプリンタクラスドライバ116は、USBポートを作成するとともに、その上位にUSBフィルタドライバ117及びプリンタドライバ118をロードする(ステップS1208、ステップS1209)。
プリンタドライバ118のロードが完了すると、プリンタ300にアクセスして印刷するために必要なデバイスドライバがPC100に全てロードされた状態となる。そして、上位層のソフトウェアからの印刷実行命令が発行されるまでの間、待機状態となる。
第3の実施の形態において、PC100は、自装置内にキャッシュ情報がある場合、デバイスサーバ200との間でデータ通信を行うことなく、デバイスドライバをロードすることができる。
一方、自装置内にキャッシュ情報がない場合、上述した第2の実施の形態と同様、UDPによりデバイスサーバ200と通信してデバイス情報を取得するので、セッション接続する必要がない。なお、デバイスサーバ200との通信はUDPに限定されるものではない。
PC100A及びPC100Bにおいて、キャッシュ情報に基づいてデバイスドライバをロードするときのタイミングチャートについて図13を用いて説明する。なお、PC100A及びPC100Bにおいて、デバイスドライバがロードされた後の動作については、前述した第1の実施の形態(図9)と同じであるため、説明は省略する。
また、自装置内にキャッシュ情報がなく、UDPなどを用いてデバイスサーバ200と通信してデバイス情報を取得する場合の動作については、前述した第2の実施の形態(図10、図11)と同じであるため説明及び図13中における図示は省略する。
PC100A及びPC100Bは、プリンタ300のネットワーク共有を行うための初期設定や、常駐サービス114、プリンタドライバ118などのインストールを実行するとき、プリンタ300のネットワーク共有に必要なデバイス情報を、デバイスサーバ200を介してプリンタ300から予め取得して、これをPC100A及びPC100Bの外部記憶部106に格納している(タイミングT1301)。このとき格納されたデバイス情報が、キャッシュ情報としてデバイスドライバのロードの際に使用される。
PC100A、PC100Bはともに、常駐サービス114によってセッション接続が必要ないUDPなどを用いてデバイスサーバ200と通信して、デバイスサーバ200との間の接続状態などの監視を開始するとともに、デバイスサーバ200に接続されているプリンタ300の接続状態を確認する(タイミングT1302)。
次に、PC100Aの常駐サービス114は、デバイスサーバ200からの応答により、デバイスサーバ200が他のクライアントPCとセッション接続中でないことを確認するとUSB仮想バスドライバ115をロードし、デバイスドライバのマウント命令を発行する(タイミングT1303)。
USB仮想バスドライバ115は、デバイスドライバのマウント命令が発行されると、PC100A内(自装置内)にキャッシュ情報を保持しているかを確認する。
PC100A内(自装置内)にキャッシュ情報を保持している場合、このキャッシュ情報に基づき、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118を順にロードしてゆく(タイミングT1304)。
PC100Aでデバイスドライバのロード中、もう一方のクライアントPC100Bにおいて、デバイスドライバのマウント命令が発行された場合(タイミングT1305)、PC100Aと同様、まず、PC100B内(自装置内)にキャッシュ情報があるか否かを確認する。
PC100B内(自装置内)にキャッシュ情報がある場合、このキャッシュ情報に基づいて、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118を順にロードしてゆく(タイミングT1306)。
このように、第3の実施の形態におけるクライアントPCは、自装置内に保持されたキャッシュ情報に基づいてデバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。一方、キャッシュ情報がなければ、プリンタ300にアクセス可能な状態のときにユーザの手動操作に頼ることなく自動的にセッション接続が必要ないUDPでデバイスサーバ200と通信してデバイス情報を取得し、デバイスドライバをロード後、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
そして、上位層のソフトウェアから印刷実行命令が発行されると、プリンタ300にアクセスが可能であれば、ユーザの手動操作に頼ることなく自動的にデバイスサーバ200とのセッション接続を開始してプリンタ300における印刷実行に必要なコマンドを送受信し、印刷が終了するとユーザの手動操作に頼ることなく自動的にセッション接続を終了する。これにより、ユーザがセッション接続の開始、終了を意識しなくても、複数台のクライアントPCでデバイスを共有することが可能となる。
また、キャッシュ情報を利用してデバイスドライバをロードするので、複数のクライアントPCがデバイスサーバ200からデバイス情報を取得しようとするアクセスが不要となるため、ネットワーク500のトラフィックを低減することができる。
次に、第4の実施の形態として、PC100がプリンタ300にアクセスして印刷処理を実行するときの別の制御動作について、図14を参照しながら説明する。
本実施の形態は、USBポートが「クローズ」された後、すぐにデバイスサーバ200との間のセッション接続を終了せず、規定時間だけセッション接続の終了を遅らせる点に特徴がある。
図14は、PC100(PC100A,PC100B)の制御フローにおいて、PC100がプリンタ300にアクセスして印刷処理を実行するときの制御動作の手順を示すフローチャートである。
なお、上述した第1の実施の形態で説明した図6と同様、PC100には、必要なデバイスドライバが全てロードされており、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態にあるものとする。
PC100によりプリンタ300で印刷処理を実行するとき、上位層のソフトウェアから印刷実行命令が発行される。
上位層のソフトウェアから印刷実行命令が発行されると、PC100のプリンタドライバ118は、印刷実行命令に応じた制御コマンドを生成し、USBポートを「オープン」する(ステップS1401、S1402)。
そして、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してプリンタクラスドライバ116に送る。プリンタクラスドライバ116では、制御コマンドをUSBパケットに変換し、USB仮想バスドライバ115に送る(ステップS1403)。
USBフィルタドライバ117は、USBポートが「オープン」し、制御コマンドがUSBポートを通過するとこれを検知してUSB仮想バスドライバ115に通知し、USB仮想バスドライバ115は、セッション接続がされていない場合、デバイスサーバ200に対してセッション開始要求を送る(ステップS1404)。
このセッション開始要求に対し、デバイスサーバ200から「NG」応答があり、セッション接続を開始できない場合(ステップS1405でNo)、ステップS1404へ戻り、セッション接続が開始可能となるまで、デバイスサーバ200に対して定期的にセッション開始要求を送る。
一方、デバイスサーバ200から「OK」応答があり(ステップS1405でYes)、セッション接続が開始されると、PC100は、デバイスサーバ200を介してプリンタ300へのアクセスが可能となる(ステップS1406)。
次に、PC100は、デバイスサーバ200を介し、プリンタ300に対して制御コマンドを送り、プリンタ300からの処理結果などを受信する(ステップS1407)。そして、PC100から印刷終了命令が発行されるまでステップS1407の処理が繰り返される(ステップS1408でNo)。
上位層のソフトウェアから印刷終了命令が発行されると(ステップS1408でYes)、プリンタドライバ118は、終了コマンドを生成し、USB仮想バスドライバ115を介して終了コマンドをデバイスサーバ200に送信し、プリンタ300からの終了コマンドに対する応答をデバイスサーバ200から受信する。
PC100のプリンタドライバ118は、終了コマンドに対する応答を受信すると、USBポートを「クローズ」し、USBフィルタドライバ117は、USBポートの「クローズ」をUSB仮想バスドライバ115に通知する。(ステップS1409)。
USB仮想バスドライバ115は、USBポートが「クローズ」され、USBポート「クローズ」の通知を受けると、デバイスサーバ200との間のセッション接続をすぐに終了させず、上位層のソフトウェアから次の印刷実行命令が規定時間内に発行されるか否かを判定する(ステップS1410)。
規定時間内に上位層のソフトウェアから印刷実行命令が発行されると(ステップS1410でYes)、プリンタドライバ118は、制御コマンドを生成して、USBポートを「オープン」し(ステップS1411)、生成した制御コマンドをUSBポートからUSBフィルタドライバ117を経由してプリンタクラスドライバ116に送る(ステップS1412)。
そして、再び、ステップS1407の処理に戻り、デバイスサーバ200を介し、プリンタ300に対して制御コマンドを送り、プリンタ300からの処理結果などを受信し、プリンタ300による印刷処理が開始される。
一方、規定時間内に上位層のソフトウェアから印刷実行命令が発行されないと(ステップS1410でNo)、USB仮想バスドライバ115は、デバイスサーバ200に対しセッション終了要求を送る(ステップS1413)。
そして、デバイスサーバ200との間でセッション終了処理を実行し、セッション終了「OK」の応答を受信すると、PC100Aとデバイスサーバ200との間のセッション接続が終了となる(ステップS1414)。そして、再び、上位層のソフトウェアから印刷実行命令が発行されるまでの間、待機状態となる。
このように、USBポートが「クローズ」された後、規定時間だけセッション接続の終了時間を遅らせることにより、上位層のソフトウェアから連続して印刷実行命令が出ている場合、一旦、セッション接続を終了し、再度、セッション接続するという処理が不要となる。
従って、セッション接続は維持されるので、例えば、PC100Aから連続印刷を行っている途中に、PC100Bの印刷処理が割り込むことを抑制することができる。
図15は、第4の実施の形態において、図14で説明した制御フローで動作するPC100(PC100A,PC100B)おいて、PC100Aが連続して印刷処理を実行するとき実施の形態である。
ここで、簡略化して分り易く説明をするために、第4の実施の形態において、PC100A、PC100Bともに既にデバイスドライバがロードしてある状態として説明する。なお、デバイスドライバをロードするまでの制御動作は、上述の第1〜第3の実施の形態を全て適用することができる。
図15において、PC100Aの1回目の印刷処理(タイミングT1501)が終了し、PC100Aのプリンタドライバ118がUSBポートを「クローズ」させた状態から説明する(タイミングT1502)。
PC100Aでは、プリンタドライバ118がUSBポートを「クローズ」させると、USBフィルタドライバ117がUSBポート「クローズ」をUSB仮想バスドライバ115に通知する。
USB仮想バスドライバ115は、USBポート「クローズ」の通知を受けると、セッション接続をすぐに終了させず、規定時間が経過するまでの間はデバイスサーバ200に対してセッション終了要求を送信しない(タイミングT1503)。
この規定時間内に、PC100Bの上位層のソフトウェアによって印刷実行命令が発行された場合(タイミングT1504)、PC100Bからデバイスサーバ200に対してセッション開始要求が送られるが、まだ、PC100Aとの間のセッション接続が終了していないため、デバイスサーバ200はPC100Bに対して「NG」応答を返す(タイミングT1505)。
一方、この規定時間内に、再度、PC100Aの上位層のソフトウェアから印刷実行命令が発行されると(タイミングT1506)、プリンタドライバ118は、再びUSBポートを「オープン」させる(タイミングT1507)。
USBフィルタドライバ117では、USBポートを通過する制御コマンドを検知するが、デバイスサーバ200とは既にセッション接続中であり、セッション開始処理が不要である。従って、PC100Aのプリンタドライバ118がUSBポートを介してデバイスサーバ200に制御コマンドを送信することで、2回目の印刷処理が連続して実行される(タイミングT1508)。
PC100Aのプリンタドライバ118は、2回目の印刷処理が終了すると、1回目と同様、USBポートを「クローズ」させるが(タイミングT1509)、USB仮想バスドライバ115では、すぐにセッション接続を終了させず、規定時間が経過するまでデバイスサーバ200に対してセッション終了要求を送信しない(タイミングT1510)。
そして、この規定時間内にPC100Aの上位層のソフトウェアから印刷実行命令が発行されないと、USB仮想バスドライバ115は、デバイスサーバ200に対しセッション終了要求を送り、デバイスサーバ200との間のセッション接続を終了する(タイミングT1511)。
このように、第4の実施の形態におけるクライアントPCは、USBポートを「クローズ」させた後、すぐにデバイスサーバとのセッション接続を終了させず、セッション終了のタイミングを遅らせることによって、連続印刷処理中に他のクライアントPCに割り込まれることなく、一台のクライアントPCで連続印刷することが可能となる。
第4の実施の形態は、USBポート(入出力ポート)の「クローズ」と「オープン」の間隔が短いデバイスや一つの処理(ジョブ)が完了するまでの間に「オープン」、「クローズ」を頻繁に行うデバイスに適している。例えば、スキャナやストレージなどのデバイスがこれに該当する。
なお、上述した「規定時間」は、デバイスの種類に応じて設定することも可能である。例えば、スキャナとストレージを共有デバイスとして使用する場合、「規定時間」をそれぞれ異なる値に設定してもよい。
なお、本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において適宜変更可能である。
上述した実施の形態では、一台のデバイスサーバが一台のプリンタ(デバイス)を管理する構成で説明したが、一台のデバイスサーバに複数のプリンタ(デバイス)を接続する構成としても良い。また、この場合はデバイス毎にセッションを用意し制御することで、別々のデバイスであれば、複数のクライアントPCから同時にアクセスすることが可能となる。
また、デバイスサーバとデバイスの接続インターフェースをUSBとした場合の構成で説明したが、これらに限定されず、別の接続インターフェースを使用しても良い。具体的には、IEEE1394に対応するためには、PC100が備えるUSBに関連するデバイスドライバ(USB仮想バスドライバ115、USBプリンタクラスドライバ116、USBフィルタドライバ117、プリンタドライバ118など)とデバイスサーバ200が備えるUSBコマンド層212が、それぞれIEEE1394に関連するデバイスドライバとIEEE1394コマンド層に置き換われば良い。
さらにはPC100が複数の異なる接続インターフェース用のドライバ層を持ち、デバイスサーバ200がそれに対応した複数の異なるコマンド層を備えるようにすれば、様々な接続インターフェースを備えたデバイスにも柔軟に対応できる。
また、本発明の目的は、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)が記憶媒体に格納されたプログラムコードを読み出して処理を実行することによっても達成することができる。
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードを記憶したコンピュータで読み取り可能な記憶媒体は本発明を構成することになる。
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)等が実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現されるように構成しても良い。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、このプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部又は全部を実行し、その処理に応じて上述した実施形態が実現される場合も含んでいる。
なお、プログラムコードを供給するため、例えば、フロッピー(登録商標)ディスク、ハードディスク、光磁気ディスク、CDやDVDに代表される光ディスク、磁気テープ、不揮発性のメモリカード、ROM等の記憶媒体を用いることができる。又は、プログラムコードは、ネットワークを介してダウンロードしてもよい。