(57)【特許請求の範囲】
【請求項１】
コンピュータシステム上で動作している１以上のアプリケーションのそれぞれに割り当てられるソケットの数を管理するための装置において、
前記１以上のアプリケーションの全体に割り当て可能なソケットの総数を示すソケット総数と、前記１以上のアプリケーションの各々に割り当てられるソケットの数についての目標値を示すアプリケーション毎のソケット目標数とを記憶するアプリケーション管理手段と、
前記１以上のアプリケーションのいずれかから発されるソケットの取得又は解放の要求を示すソケット数変更要求を受けて、受けた前記ソケット数変更要求と、前記アプリケーション管理手段内の前記ソケット総数とアプリケーション毎の前記ソケット目標数とに基づいて、前記ソケット数変更要求を発した要求元アプリケーションの前記ソケット目標数のみを再計算し、前記アプリケーション管理手段に記憶されている前記要求元アプリケーションの前記ソケット目標数を、再計算された前記ソケット目標数に更新するスケジューリング手段と、
前記スケジューリング手段により再計算された前記ソケット数に基づいて、前記ソケット数変更要求に対する返答を生成し、前記返答を前記要求元アプリケーションに通知する返答手段と
を備えたソケット管理装置。
【請求項２】
請求項１記載のソケット管理装置において、
前記アプリケーション管理手段は、アプリケーション毎の優先度を更に記憶し、前記スケジューリング手段は、受けた前記ソケット数変更要求と、前記アプリケーション管理手段内の前記ソケット総数とアプリケーション毎の前記ソケット目標数と、さらに前記アプリケーション管理手段内の前記要求元アプリケーションの前記優先度とに基づいて、前記要求元アプリケーションの前記ソケット目標数を再計算する、
ソケット管理装置。
【請求項３】
請求項２記載のソケット管理装置において、
前記スケジュール手段は、前記アプリケーション管理手段内の前記１以上のアプリケーションの前記優先度に基づいて、前記１以上のアプリケーション間でのソケットの割り当て数の割合を決定し、前記決定された割り当て割合に従って前記要求元アプリケーションの前記ソケット目標数を決定する、
ソケット管理装置。
【請求項４】
請求項１〜３のいずれか一項記載のソケット管理装置において、
前記スケジュール手段は、前記１以上のアプリケーションの前記ソケット目標数の和と前記ソケット総数との間の差に相当するソケット残数に応じて、前記１以上のアプリケーション間でのソケットの割り当て割合を制御する、
ソケット管理装置。
【請求項５】
請求項１〜４のいずれか一項記載のソケット管理装置において、
前記スケジューリング手段により再計算された前記要求元アプリケーションの前記ソケット目標数に基づいて、前記要求元アプリケーションによるソケットの取得を許可するか否かを判断し、判断結果が許可であれば、前記要求元アプリケーションのための新たなソケットを、前記コンピュータシステムのオペレーティングシステムから取得するソケット取得手段を
さらに備えたソケット管理装置。
【請求項６】
１以上のアプリケーションと、請求項１〜４のいずれか一項に記載のソケット管理装置とを備え、
各アプリケーションが、
前記ソケット管理装置からの前記返答に基づいて、ソケットの取得が許可されたか否かを判断し、判断結果が許可であれば、新たなソケットを、前記コンピュータシステムのオペレーティングシステムから取得するソケット取得手段を備えた、
ソケット管理システム。
【請求項７】
１以上のアプリケーションと、請求項５記載のソケット管理装置とを備え、
各アプリケーションが、前記ソケット管理装置により取得された前記各アプリケーションのためのソケットを使用するようになった、
ソケット管理システム。
【請求項８】
コンピュータシステム上で動作している１以上のアプリケーションのそれぞれに割り当てられるソケットの数を管理するための方法において、
前記１以上のアプリケーションの全体に割り当て可能なソケットの総数を示すソケット総数と、前記１以上のアプリケーションの各々に割り当てられるソケットの数についての目標値を示すアプリケーション毎のソケット目標数とを記憶するアプリケーション管理ステップと、
前記１以上のアプリケーションのいずれかから発されるソケットの取得又は解放の要求を示すソケット数変更要求を受けて、受けた前記ソケット数変更要求と、前記アプリケーション管理ステップで記憶された前記ソケット総数とアプリケーション毎の前記ソケット目標数とに基づいて、前記ソケット数変更要求を発した要求元アプリケーションの前記ソケット目標数のみを再計算し、前記アプリケーション管理ステップにより記憶されていた前記要求元アプリケーションの前記ソケット目標数を、再計算された前記ソケット目標数に更新するスケジューリングステップと、
前記スケジューリングステップにより再計算された前記ソケット目標数に基づいて、前記ソケット数変更要求に対する返答を生成し、前記返答を前記要求元アプリケーションに通知する返答ステップと、
を前記コンピュータシステムが行うソケット管理方法。
【請求項９】
請求項８記載の方法をコンピュータに実行させるためのコンピュータ読み取り可能なコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム上で動作している１以上のネットワークアプリケーションのそれぞれに割り当てられるソケットディスクリプタ（この明細書では、「ソケット」と呼ぶ）の数を管理するための技術に関する。
【背景技術】
【０００２】
一般的なネットワークアプリケーションのプログラミングにはソケットインターフェースが使われており、アプリケーションはソケットインターフェースから生成されたソケットディスクリプタ(ソケット)を使用して通信する相手を特定して通信を行っている。
【０００３】
パーソナルコンピュータのように搭載メモリが比較的に豊富なコンピュータシステムの場合は、ネットワークアプリケーションはソケットの数の上限を意識せずに使うことができる。これに対し、プリンタのような機器内に組み込まれたコンピュータシステムでは、搭載メモリが少なく、メモリに合わせてソケットの数が低く抑えられているため、予めネットワークアプリケーションそれぞれに使用可能なソケットの数を割り当て、その範囲に収まるようにプログラムを作るのが一般的である。
【０００４】
後者（プリンタなどの機器に組み込まれたコンピュータシステム）の場合、普段は殆ど使われないアプリケーションにもある程度の数のソケットを割り当てる必要がある為、その機器で最も頻繁に使われる主要機能（例えば、プリンタにおける印刷機能）のアプリケーションに割り当てられるソケットの数が少なくなり、それに伴い、同時に確立できるクライアントとのコネクションの数も少なくなる。このような製品のネットワーク性能が低下する問題を解決する一つの単純な方法は、搭載メモリを増やすことであるが、それは当然にコスト増を引き起こす。
【０００５】
ソケットの割り当てに関して、特許文献１には、プリンタを監視するアプリケーションにおいて、ソケットの枯渇によって通信ができなくなると言う状態の発生を避けるため、予めアプリケーションが使用するソケットを確保しておき、アプリケーションの要求によって確保されたソケットを使う、ことが開示されている。この従来技術によれば、該当するアプリケーションを常に正常に動かすことができるメリットがある。しかし、使われていないソケットも常に確保されているため、製品全体で効率的にソケットリソースを使っているとは言いがたい。
【０００６】
【特許文献１】特開２０００−１４８４２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、コンピュータシステムにおいて、限られた数のソケットをアプリケーション間でより適切に配分する仕組みを提供し、もって、システムのネットワーク性能の向上に貢献することにある。
【課題を解決するための手段】
【０００８】
本発明の一つの側面に従う、コンピュータシステム上で動作している１以上のアプリケーションのそれぞれに割り当てられるソケットの数を管理するための装置は；前記１以上のアプリケーションの全体に割り当て可能なソケットの総数を示すソケット総数と、前記１以上のアプリケーションの各々に割り当てられるソケットの数についての目標値を示すアプリケーション毎のソケット目標数とを記憶するアプリケーション管理手段と；前記１以上のアプリケーションのいずれかから発されるソケットの取得又は解放の要求を示すソケット数変更要求を受けて、受けた前記ソケット数変更要求と、前記アプリケーション管理手段内の前記ソケット総数とアプリケーション毎の前記ソケット目標数とに基づいて、前記ソケット数変更要求を発した要求元アプリケーションの前記ソケット目標数を再計算し、前記アプリケーション管理手段に記憶されている前記要求元アプリケーションの前記ソケット目標数を、再計算された前記ソケット目標数に更新するスケジューリング手段と；前記スケジューリング手段により再計算された前記ソケット目標数に基づいて、前記ソケット数変更要求に対する返答を生成し、前記返答を前記要求元アプリケーションに通知する返答手段とを備える。
【０００９】
このソケット管理装置は、ソケット総数とアプリケーション毎のソケット目標数とを記憶し、各アプリケーションからソケットの取得又は解放の要求（ソケット数変更要求）を受けると、受けたソケット数変更要求と、記憶されているソケット総数とアプリケーション毎のソケット目標数とに基づいて、そのソケット数変更要求の要求元アプリケーションのソケット目標数を再計算する。そして、ソケット管理装置は、その再計算されたソケット目標数に基づいて、上記ソケット数変更要求に対する返答を生成し、その返答を、上記要求元アプリケーションへ返す。
【００１０】
ここで、その返答は、再計算された要求元アプリケーションのソケット目標数を示すものであってもよいし、或いは、ソケット数変更要求、とりわけソケットの取得の要求、が許可されたか否か（例えば、要求された数のソケットの全ての取得が可能、要求された数の内の一部のソケットの取得が可能、又は、ソケットの取得が不可能）を示すものでもよい。
【００１１】
従って、要求元アプリケーションは、ソケット管理装置から受け取った返答に基づいて、要求元アプリケーションのソケット目標数が幾つか、又は、ソケット数変更要求、とりわけ、ソケットの新たな取得の要求、が受け入れられるものか否かを、判断することができる。そして、要求元アプリケーションが、その判断結果に従って、オペレーティングシステムから実際にソケットを取得するか、しないかを制御すれば、アプリケーション毎に実際に割り当てられるソケット数は、ソケット管理装置で計算されたアプリケーション毎のソケット目標数に沿うことになる。よって、アプリケーション毎に適切な数のソケットを割り当てることが可能になる。
【００１２】
ここで、ソケット管理装置が、各アプリケーションが保有するソケットの実数ではなくて、その目標数を管理するのは以下のような理由による。すなわち、ソケットの実体はＯＳの中で管理されているため、アプリケーションの中でソケットを解放しても、実際にＯＳの中でそのソケットが解放されるまでにはタイムラグが生じる。通常のＯＳは、実際に解放するまで数十秒から数分間そのソケットを保持していることが多い。つまり、ＯＳの外部からは、ソケットの実数を把握することができないことなる。そのため、本発明では、ソケット管理装置は、ソケットの実数を管理するのではなく、あくまでもソケット目標数を管理する。このため、ソケットの実数と目標数は常に一致しているとは限らない。そこで、ソケット管理装置は、各アプリケーションが保有するソケットの実数と目標数との間の差を考慮に入れて、ソケット目標数のスケジュールを行うように構成されてよい。
【００１３】
本発明の一実施形態にかかるソケット管理装置は、次のように構成されてよい。すなわち、前記アプリケーション管理手段は、アプリケーション毎の優先度を更に記憶し、前記スケジューリング手段は、受けた前記ソケット数変更要求と、前記アプリケーション管理手段内の前記ソケット総数とアプリケーション毎の前記ソケット目標数と、さらに前記アプリケーション管理手段内の前記要求元アプリケーションの前記優先度とに基づいて、前記要求元アプリケーションのソケット目標数を再計算する。例えば、前記スケジュール手段は、前記アプリケーション管理手段内の前記１以上のアプリケーションの前記優先度に基づいて、前記１以上のアプリケーション間でのソケットの割り当て数の割合を決定し、前記決定された割り当て割合に従って、要求元アプリケーションのソケット目標数を計算する。
【００１４】
この実施形態によれば、優先度がより高いアプリケーションには、より優先的にソケットを割り当てるというように、アプリケーション毎の優先度を公領したソケット割り当て制御ができる。
【００１５】
本発明の一実施形態にかかるソケット管理装置は、また、次のように構成されてよい。すなわち、前記スケジュール手段は、前記１以上のアプリケーションの前記ソケット目標数の和と前記ソケット総数との間の差に相当するソケット残数に応じて、前記１以上のアプリケーション間でのソケットの割り当て割合を制御する。
【００１６】
従って、まだどのアプリケーションにも割り当てられてないソケット残数の多寡に応じて、アプリケーション間のソケット数の割り当て割合を変えることができる。例えば、ソケット残数がより少ないほど、優先度の高いアプリケーションへのソケット割り当て数割合をより大きくすることができる。それにより、ソケット残数が減っても、優先度の高いアプリケーションに割り当てられるソケット数はそれ程には変わらないようにして、システム全体のネットワーク性能を高く維持することができる。
【００１７】
本発明の一実施形態にかかるソケット管理装置は、また、次のように構成されてよい。すなわち、ソケット管理装置は、前記スケジューリング手段により再計算された前記要求元アプリケーションの前記ソケット目標数に基づいて、前記要求元アプリケーションによるソケットの取得を許可するか否かを判断し、判断結果が許可であれば、前記要求元アプリケーションのための新たなソケットを、前記コンピュータイシステムのオペレーティングシステムから取得するソケット取得手段をさらに備える。
【００１８】
この構成によれば、各アプリケーションのためのソケットをオペレーティングシステムから取得するという処理を、各アプリケーションに任せるのではなく、ソケット管理装置が、各アプリケーションの代理とシテ行うことができる。そのため、それぞれのアプリケーションへの実際のソケットの割り当て数を、ソケット目標数により確実に沿わせることができる。
【００１９】
本発明の別の側面に従えば、１以上のアプリケーションと、上述した構成のソケット管理装置とを備えたソケット管理システムが提供される。
【００２０】
一つの実施形態に従うソケット管理システムでは、各アプリケーションのためのソケットをオペレーティングシステムから取得するという処理を、各アプリケーションが行うことができる。すなわち、各アプリケーションが、ソケット管理装置からの返答に基づいて、ソケットの取得が許可されたか否かを判断し、判断結果が許可であれば、新たなソケットを、オペレーティングシステムから取得するソケット取得手段を備える。
【００２１】
また、別の実施形態に従うソケット管理システムでは、各アプリケーションのためのソケットをオペレーティングシステムから取得するという処理を、ソケット管理装置が、角アプリケーションに代わって行うことができる。その場合、各アプリケーションは、ソケット管理装置により取得された各アプリケーションのためのソケットを使用して、ネットワークコネクションを生成する。
【００２２】
本発明の別の側面に従う、コンピュータシステム上で動作している１以上のアプリケーションのそれぞれに割り当てられるソケットの数を管理するための方法は；前記１以上のアプリケーションの全体に割り当て可能なソケットの総数を示すソケット総数と、前記１以上のアプリケーションの各々に割り当てられるソケットの数についての目標値を示すアプリケーション毎のソケット目標数とを記憶するアプリケーション管理ステップと；前記１以上のアプリケーションのいずれかから発されるソケットの取得又は解放の要求を示すソケット数変更要求を受けて、受けた前記ソケット数変更要求と、前記アプリケーション管理ステップで記憶された前記ソケット総数とアプリケーション毎の前記ソケット目標数とに基づいて、前記ソケット数変更要求を発した要求元アプリケーションの前記ソケット目標数を再計算し、前記アプリケーション管理ステップで記憶された前記要求元アプリケーションの前記ソケット目標数を、再計算された前記ソケット目標数に更新するスケジューリングステップと；前記ソケット数変更要求を発した要求元アプリケーションに対して、前記スケジューリングステップにより再計算された前記ソケット目標数に応じた返答を通知する返答ステップとを備える。
【００２３】
本発明は更に、上記方法をコンピュータに実行させるためのコンピュータ読み取り可能なコンピュータプログラムも提供する。
【発明の効果】
【００２４】
本発明によれば、アプリケーション間でソケットをより適切に配分できるので、ネットワーク通信のためのコネクション性能を向上させることができる。実際に使用されてないソケットを予め確保する必要がないので、メモリの無駄な使用が減り、それに伴い、余ったメモリリソースを他の機能へ割り当てることができる。
【発明を実施するための最良の形態】
【００２５】
図１は、本発明が適用されたコンピュータシステムの一実施形態の要部のブロック構成を示す図である。
【００２６】
図１に示されたコンピュータシステム１０は、パーソナルコンピュータのように比較的に豊富なメモリ容量をもつものであってもよいし、或いは、プリンタなどの機器に組み込まれたコンピュータシステムのように比較的に乏しいメモリ容量しかもたないものであってもよいが、特に後者の場合において、本発明の原理に従う利点が顕著に現れることになる。
【００２７】
図１に示すように、コンピュータシステム１０は、オペレーティングシステム（以下、「ＯＳ」という）１００と、アプリケーション部２００と、ソケット管理部３００とを有する。ＯＳ１００と、アプリケーション部２００と、ソケット管理部３００は、典型的には、コンピュータマシンがそれぞれのコンピュータプログラムを実行することによって実現される。
【００２８】
ここで、ソケット管理部３００は、本発明に従うソケット管理装置の一実施形態に相当する。そして、アプリケーション部２００とソケット管理部３００との組み合わせが、本発明に従うソケット管理システムの一実施形態に相当する。
【００２９】
アプリケーション部２００は、それぞれ特定のネットワークサービスを実現する１以上のアプリケーション２０２、２０２、…の集まりである。各アプリケーション２０２は、サービス部２０４、ソケット取得部２０６、及びソケット制御部２０８の３つのモジュールを有する。
【００３０】
サービス部２０４は、ソケットインターフェースの機能を使ってプログラミングされ、ネットワークサービスの機能を実現する。
【００３１】
ソケット取得部２０６は、ソケット制御部２０８の制御の下で、各アプリケーション２０２が必要とするソケット数をＯＳ１００から取得すると共に、各アプリケーション２０２で不要になったソケットをＯＳ１００に返却する機能を有している。
【００３２】
ソケット制御部２０８は、各アプリケーション２０２のネットワークサービスが幾つソケットを実際に使っている（実際に保有している）のか（つまり、ソケット保有数２１０）を管理しながら、各アプリケーション２０２のソケット保有数２１０がソケット管理部３００から指示されたソケット目標数に収まるように調整する機能を有する。
【００３３】
ソケット管理部３００は、管轄下のアプリケーション部２００の各アプリケーション２０２がそれぞれソケットを幾つまで使用してよいか（つまり、ソケット目標数）を管理し（ソケット保有数２１０自体は管理しない）、各アプリケーション２０２からソケットの取得又は解放の要求を受ける都度、その時のソケット配分状況に応じて、その要求を発したアプリケーション２０２のソケット目標数をスケジュール(再計算)して、そのアプリケーション２０２へ指示する機能を有している。尚、変形例として、ソケット管理部３００は、アプリケーション部２００の各アプリケーション２０２に対して、ソケット目標数を指示する代わりに、そのソケット目標数に基づいてそのアプリケーション２０２がソケットを新たに取得できるか否かを通知してもよい。
【００３４】
ここで、ソケット管理部３００が、各アプリケーション２０２が保有するソケットの実数ではなくて、その目標数を管理するのは以下のような理由による。すなわち、ソケットの実体はＯＳの中で管理されているため、アプリケーション２０２の中でソケットを解放しても、実際にＯＳ１００の中でそのソケットが解放されるまでにはタイムラグが生じる。通常のＯＳは、実際に解放するまで数十秒から数分間そのソケットを保持していることが多い。つまり、ＯＳの外部からは、ソケットの実数を把握することができないことなる。そのため、ソケット管理部３００は、各アプリケーションが保有するソケットの実数を管理するのではなく、あくまでもソケット目標数を管理する。このため、ソケットの実数と目標数は常に一致しているとは限らない。そこで、ソケット管理部３００は、各アプリケーション２０２が保有するソケットの実数と目標数との間の差を考慮に入れて、ソケット目標数のスケジュールを行うように構成されてよい。
【００３５】
このソケット管理部３００は、アプリケーションＩ／Ｆ部３０２と、アプリケーション管理部３０４と、スケジューリング部３０６の３つのモジュールを備えている。
【００３６】
アプリケーションＩ／Ｆ部３０２は、アプリケーション部２００の中のそれぞれのアプリケーション２０２、２０２、…と通信を行うためのモジュールである。アプリケーションＩ／Ｆ部３０２は、各アプリケーション２０２の起動時に各アプリケーション２０２をアプリケーション管理部３０４に登録するための、各アプリケーション２０２とアプリケーション管理部３０４との間の通信を仲介する機能と、各アプリケーション２０２が終了しようとする時に各アプリケーション２０２の登録を削除するための、各アプリケーション２０２とアプリケーション管理部３０４との間の通信を仲介する機能と、各アプリケーション２０２がソケットの取得又は解放の要求（以下、ソケット数変更要求という）を発した時にソケット目標のスケジューリング（再計算）を行うための、各アプリケーション２０２とスケジューリング部３０６との間の通信を仲介する機能と、スケジュール（再計算）されたソケット目標数を各アプリケーション２０２へ通知するための、各アプリケーション２０２とアプリケーション管理部３０４の間の通信を仲介する機能を有している。
【００３７】
アプリケーション管理部３０４は、アプリケーション部２００の中で現在動作している（現在登録されている）各アプリケーション２０２の識別子（ＩＤ）、優先度、及びソケット目標数に関するアプリケーション情報３１０を記憶して管理すると共に、アプリケーション部２００の全体で使うことができるソケット総数（ＯＳ１００が提供できるソケットの最大値）３０８を記憶して管理するモジュールである。ここで、各アプリケーション２０２の識別子（ＩＤ）は、アプリケーション管理部３０４が各アプリケーション２０２を登録する時に、アプリケーション管理部３０４が各アプリケーション２０２に割り当てるコードである。また、各アプリケーション２０２の優先度は、各アプリケーション２０２に予め設定されていて、各アプリケーション２０２が起動するときに、各アプリケーション２０２から通知されるものである。
【００３８】
アプリケーション管理部３０４は、各アプリケーション２０２の起動時に各アプリケーション２０２を登録する（つまり、上述したアプリケーション情報３１０を生成し登録する）機能と、各アプリケーション２０２が終了しようとする時にそのアプリケーション２０２の登録を削除する（上述したアプリケーション情報３１０を削除する）機能と、各アプリケーション２０２がソケット数変更要求（ソケットの取得又は解放の要求）を発した時に、スケジューリング部３０６を呼び出して、スケジューリング部３０６に登録済みの全てのアプリケーション２０２、２０２、…のアプリケーション情報３１０、３１０、…及びソケット総数３０８を通知する機能と、スケジューリング部３０６によりスケジュール（再計算）されたソケット目標数で各アプリケーション２０２のアプリケーション情報３１０を更新する機能と、各アプリケーション２０２のスケジュール（再計算）されたソケット目標数を各アプリケーション２０２に通知する機能とを有している。
【００３９】
スケジューリング部３０６は、各アプリケーション２０２がソケット数変更要求を発した時に、そのアプリケーション２０２がソケットを何個まで使ってよいかを示すソケット目標数を、予め設定されたスケジュールアルゴリズム３１２を使ってスケジュール（再計算）し、その計算結果をアプリケーション管理部３０４に書き込む機能を有している。
【００４０】
ここで、スケジュールアルゴリズム３１２の最適な具体的な内容は、コンピュータシステム１０が搭載された製品カテゴリ、または、製品毎に異なる。そのため、スケジュールアルゴリズム３１２は、ソケット管理部３００のプログラムから分離できるようなプログラム又はデータとして構成されることが望ましい。勿論、スケジュールアルゴリズム３１２がソケット管理部３００のプログラム内に組み込まれていてもよい。
【００４１】
スケジュールアルゴリズム３１２は、各アプリケーション２０２がソケット数変更要求を発した時に、アプリケーション管理部３０４から呼び出される。すると、スケジュールアルゴリズム３１２は、アプリケーション管理部３０４から、登録済み（現在動作中）の全てのアプリケーション２０２、２０２、…のアプリケーション情報（ＩＤ、優先度及びソケット目標数）３１０、３１０、…を読み込み、そして、上記変更要求の要求元のアプリケーション２０２（例えば、アプリケーション♯１）のソケット目標数のみをスケジューリング（再計算）する。
【００４２】
ここで重要なのは、スケジュールアルゴリズム３１２は、現在動作中（登録済み）のアプリケーション２０２、２０２、…の全体のソケット目標数のスケジューリングを行うのではなく、保有ソケット数の変更を要求した一つのアプリケーション２０２のソケット目標数のスケジューリングのみを行うことである。その理由は、各アプリケーション２０２がクライアントに提供しているネットワークサービスを何時終了させるかを決める主導権は、一般的にクライアント側が握るべきであるから、そのネットワークサービスの提供元であるコンピュータシステム１０側から、そのネットワークサービスで使用されているソケットを強制的にクローズするべきでない（コンピュータシステム１０側でソケットを強制的にクローズすると、クライアント側でエラーが発生する）ためである。
【００４３】
ここで、スケジュールアルゴリズム３１２の具体的な一例を説明する。この例では、スケジュールアルゴリズム３１２は、図２に例示するようなパターン算出表３１２Aと、図３に例示するようなソケット割り当て数割合表３１２Bとから構成される。
【００４４】
図２に例示されたパターン算出表３１２Ａは、ソケット総数に対するソケット残数の割合（％）に応じて選択されるソケット配分パターンの種類を示している（各パターンの具体的内容は図３のソケット割り当て数割合表３１２Bで定義される）。ここで、ソケット残数とは、ソケット総数から各アプリケーション２０２のソケット目標数の総和を引いた値、すなわち、まだどのアプリケーションにも取得されていないソケットの数である。なお、各アプリケーション２０２のソケット目標数は、そのアプリケーション２０２が起動した（登録された）当初の初期値は「1」とされ、以後は、それが再スケジュールされる都度に更新される。
【００４５】
図２のパターン算出表３１２Ａから、どのソケット配分パターンを使用するかが導き出される。
【００４６】
例えば、ソケット総数に対するソケット残数の割合が５０％以上のとき（つまり、ソケット残数が比較的多いとき）は「パターン１」が選択され、ソケット総数に対するソケット残数の割合が５０％〜２０％の範囲では（つまり、ソケット残数が中ぐらいのときは）「パターン２」が選択され、ソケット総数に対するソケット残数の割合が２０％未満のとき（つまり、ソケット残数が比較的少ないとき）は「パターン３」が選択される。
【００４７】
図３に例示されるソケット割り当て数割合表３１２Ｂには、図２で選択されたソケット配分パターンごとに、アプリケーションの優先度に応じたソケット割り当て数割合（ソケット残数の中から各アプリケーションに割り当て可能なソケット数の割合）（％）が定義されている。例えば、ソケット残数が比較的に多い場合に選択される「パターン１」では、優先度が「レベル１」（高い）のアプリケーション２０２へのソケット割り当て数割合が５０％で、優先度が「レベル３」（低い）のアプリケーション２０２へのソケット割り当て数割合が２０％というように、優先度が高いか低いかによるソケット割り当て数割合の差が比較的に小さい。
【００４８】
ソケット残数が中程度の場合に選択される「パターン２」では、優先度が「レベル１」（高い）のアプリケーション２０２に対するソケット割り当て数割合が６０％で、優先度が「レベル３」（低い）のアプリケーション２０２へのソケット割り当て数割合が１０％というように、優先度が高いか低いかによるソケット割り当て数割合の差が、中程度である。
【００４９】
さらに、ソケット残数が少ない場合に選択される「パターン３」では、優先度が「レベル１」（高い）のアプリケーション２０２に対するソケット割り当て数割合が８０％で、優先度が「レベル３」（低い）のアプリケーション２０２へのソケット割り当て数割合が５％というように、優先度が高いか低いかによるソケット割り当て数割合の差がかなり大きい。
【００５０】
ここで、各アプリケーション２０２の優先度の決め方は、重要性の高いアプリケーションに対してより高い優先度を与える方法を採っている。例えば、プリンタの場合は、最も重要な印刷機能に関わる印刷プロトコルには高い優先度、例えば「レベル１」を与え、WebやTelnetなどの重要性の低いアプリケーションには低い優先度、例えば「レベル３」を与えることができる。
【００５１】
上述した図３に例示されたソケット割り当て数割合表３１２Ｂによれば、優先度のより高いアプリケーションには、より低いアプリケーションよりも大きいソケット数割り当て割合が与えられとともに、ソケット残数が減るほど、優先度の高低差によるソケット数割り当て割合の差が大きくなる。その結果、ソケット残数が変動しても、優先度のより高い（つまり、重要度の高い）アプリケーションは、安定してある程度の数のソケットを保有することができる。
【００５２】
以下では、上述した構成をもつコンピュータシステム１０の動作について、図４〜図7に示すシーケンス図を参照して説明する。
【００５３】
図４は、コンピュータシステム１０が起動してから最初にソケット管理部３００が起動し、その後に或る１つのアプリケーション２０２が起動するときのシーケンスを示す。
【００５４】
図４に示すように、まず、このコンピュータシステム１０のメインタスク４００が、ソケット管理部３００のアプリケーションＩ／Ｆ部３０２を生成して初期化する（ステップＳ１）。次に、アプリケーションＩ／Ｆ部３０２がアプリケーション管理部３０４を生成して初期化する（ステップＳ２）。アプリケーション管理部３０４はソケット総数３０８を設定する（ステップＳ３）。ソケット総数３０８はあらかじめアプリケーション管理部３０４にプログラムされた固定値であってもよいし、外部から読み込んだソケット総数データに基づいて設定されてもよい。次に、アプリケーション管理部３０４は、正常に生成された旨の応答をアプリケーションＩ／Ｆ部３０２へ返す（ステップＳ４）。
【００５５】
また、アプリケーションＩ／Ｆ部３０２はスケジューリング部３０６を生成する（ステップＳ５）。そして、スケジューリング部３０６は正常に生成された旨の応答をアプリケーションＩ／Ｆ部３０２へ返す（ステップＳ６）。すると、アプリケーションＩ／Ｆ部３０２は、正常に生成された旨の応答をメインタスク４００へ返す（ステップＳ７）。このようにして、ソケット管理部３００が生成される。
【００５６】
その後、或る１つのアプリケーション２０２の起動が要求されと、メインタスク４００が、そのアプリケーション２０２のサービス部２０４を生成し（ステップＳ８）、そして、サービス部２０４がソケット制御部２０８を生成する（ステップＳ９）。すると、ソケット制御部２０８が、ソケット管理部３００のアプリケーションＩ／Ｆ部３０２に対して、そのアプリケーション２０２の優先度を通知してそのアプリケーション２０２の登録を要求する（ステップＳ１０）。すると、ソケット管理部３００のアプリケーションＩ／Ｆ部３０２は、アプリケーション管理部３０４に対して、そのアプリケーション２０２の優先度を通知してそのアプリケーション２０２の登録を要求する（ステップＳ１１）。
【００５７】
すると、アプリケーション管理部３０４は、そのアプリケーション２０２のアプリケーション情報（ID、優先度、及びソケット目標数（初期値は「１」））３１０を生成して記憶することで、そのアプリケーション２０２を登録し、そして、アプリケーションＩ／Ｆ部３０２に対して、その登録されたアプリケーション２０２のＩＤを含んだ応答を返信する（ステップＳ１２）。この応答情報は、アプリケーションＩ／Ｆ部３０２からソケット制御部２０８へ（ステップＳ１３）、ソケット制御部２０８からサービス部２０４へ（ステップＳ１４）、そして、サービス部２０４からメインタスク４００へと（ステップＳ１５）、順次に返信される。このようにして、或る１つのアプリケーション２０２が起動される。
【００５８】
図５は、図４のシーケンスに続くシーケンスであって、或る１つのアプリケーション２０２がソケットの取得を要求するときのシーケンスを示す。
【００５９】
先ず、或る１つのアプリケーション２０２のサービス部２０４が、ソケット制御部２０８に対して、取得したいソケット数（通常は１個であるが、複数個でもよい）を含んだソケット取得要求（ソケット数変更要求の一つ）を送信する（ステップＳ２１）。すると、ソケット制御部２０８は、ソケット管理部３００のアプリケーションＩ／Ｆ部３０２に対して、その取得したいソケット数とそのアプリケーション２０２のＩＤとを含んだスケジュール要求を送信する（ステップＳ２２）。アプリケーションＩ／Ｆ部３０２は、そのスケジュール要求をスケジューリング部３０６に送信する（ステップＳ２３）。
【００６０】
すると、スケジューリング部３０６は、アプリケーション管理部３０４に対して、アプリケーション情報取得要求を送信する（ステップＳ２４）。すると、アプリケーション管理部３０４からスケジューリング部３０６へ、ソケット総数と、現在登録されている全てのアプリケーション２０２、２０２、…のアプリケーション情報３１０、３１０、…が返信される（ステップＳ２５）。
【００６１】
すると、スケジューリング部３０６は、返信されたソケット総数とアプリケーション情報３１０、３１０、…と、上記ソケット取得要求の要求元のアプリケーション２０２が取得したいソケット数とその優先度とに基づき、スケジュールアルゴリズム３１２を使って、要求元のアプリケーション２０２のソケット目標数のスケジューリング（再計算）を行う（ステップＳ２６）。
【００６２】
例えば、アプリケーション情報３１０、３１０、…から得られる現在動作中の全てのアプリケーション２０２、２０２、…の現在のソケット目標数を足し合わせて、その和をソケット総数から差し引いて、ソケット残数を求める。そして、前述した図２を用いて、ソケット総数に対するそのソケット残数の割合から、一つのソケット配分パターンが選択される。そして、前述した図３に示された選択されたソケット配分パターンに従って、要求元アプリケーション２０２の優先度に対応したソケット割り当て数割合が決定される。そして、その割り当て数割合をソケット残数に乗じことで、要求元アプリケーション２０２に新たに割り当て可能なソケットの数が算出される。そして、この算出された割り当て可能ソケット数と、上記取得したいソケット数とが比較される。
【００６３】
上記比較の結果、上記算出された割り当て可能ソケット数が、上記取得したいソケット数以上であれば、上記取得したいソケット数の全てを要求元アプリケーション２０２が新たに取得できることを意味する。この場合、要求元アプリケーション２０２の現在のソケット目標数に上記取得したいソケット数を足し算した数が、新しいソケット目標数（再計算されたソケット目標数）として算出される。
【００６４】
他方、上記比較の結果、上記算出された割り当て可能ソケット数が、１以上であるが、上記取得したいソケット数未満である場合には、要求元アプリケーション２０２が新たに取得できるソケット数は上記算出された割当て可能ソケット数であることを意味する。この場合、要求元アプリケーション２０２の現在のソケット目標数に上記割り当て可能ソケット数を足し算した数が、新しいソケット目標数として算出される。
【００６５】
また、上記算出された割り当て可能ソケット数が１未満である場合には、要求元アプリケーション２０２は新たにソケットを取得できないことを意味する。この場合、要求元アプリケーション２０２の現在のソケット目標数と同じ数が、新しいソケット目標数（再計算されたソケット目標数）として算出される。
【００６６】
例えば以上のようにして、スケジューリング部３０６は、要求元アプリケーション２０２のソケット目標数をスケジュール（再計算）する。そして、スケジューリング部３０６は、アプリケーション管理部３０４が記憶している要求元アプリケーション２０２のアプリケーション情報３１０内のソケット目標数を、上記ケジュール（再計算）されたソケット目標数に更新する（ステップＳ２７〜Ｓ２８）。
【００６７】
その後、スケジューリング部３０６は、ソケット目標数のスケジューリングが終った旨の応答を、アプリケーションＩ／Ｆ部３０２へ返信し（ステップＳ２９）、さらに、この応答はアプリケーションＩ／Ｆ部３０２からソケット制御部２０８へ返信される（ステップＳ３０）。
【００６８】
すると、ソケット制御部２０８は、アプリケーションＩ／Ｆ部３０２に対して、更新されたソケット目標数の取得を要求し（ステップＳ３１）、すると、アプリケーションＩ／Ｆ部３０２は、アプリケーション管理部３０４に対してソケット目標数の取得を要求する（ステップＳ３２）。
【００６９】
すると、アプリケーション管理部３０４は、記憶されている要求元アプリケーション２０２の更新されたソケット目標数の通知を、アプリケーションＩ／Ｆ部３０２へ返信し（ステップＳ３３）、その更新されたソケット目標数の通知はアプリケーションＩ／Ｆ部３０２からソケット制御部２０８へ返信され（ステップＳ３４）、さらに、ソケット制御部２０８からサービス部２０４へ返信される（ステップＳ３５）。
【００７０】
なお、変形例として、更新されたソケット目標数の通知に代えて、新たに取得可能なソケット数の通知が、アプリケーション管理部３０４からサービス部２０４へと返信されるようになっていてもよい。
【００７１】
以上のようにして、ソケット取得要求を発した要求元アプリケーション２０２は、アプリケーション管理部３０４からの上記通知に基づいて、新たに取得できるソケットの数（例えば、上記取得したいソケット数と同じ、それより少ない１以上の数、又はゼロ）を把握することができる。例えば、更新されたソケット目標数が通知された場合には、その通知されたソケット目標数から取得ソケット数を差し引けば、新たに取得できるソケット数が算出される。その後、（そのシーケンスは図示されてないが）要求元アプリケーション部２００のソケット取得部２０６が、その取得できるソケットの数に相当する数のソケットをＯＳ１００から実際に取得する。
【００７２】
上記のように、ソケット管理部３００は、各アプリケーション２０２がＯＳ１００からソケットを実際に取得する動作については関与せず、単に、ソケット目標数（すなわち、ソケットを新たに取得してよいか否かについてのアドバイス）を各アプリケーション２０２に提供する役割を行っている。
【００７３】
図６は、或る１つのアプリケーションが、取得済みのソケットの解放を要求するときのシーケンスを示す。
【００７４】
先ず、或る１つのアプリケーション２０２のサービス部２０４は、ソケット制御部２０８に対して、不要になったソケットについてのソケット解放要求（ソケット数変更要求の一つ）を送信する（ステップＳ４１）。すると、ソケット制御部２０８は、ソケット管理部３００のアプリケーションＩ／Ｆ部３０２に対して、解放したいソケット数を含んだスケジュール要求を送信し（ステップＳ４２）、さらに、アプリケーションＩ／Ｆ部３０２は、スケジューリング部３０６に対して、そのスケジュール要求を送信する（ステップＳ４３）。
【００７５】
すると、スケジューリング部３０６は、アプリケーション管理部３０４から、ソケット解放要求の要求元アプリケーション２０２のアプリケーション情報３１０を取得する（ステップＳ４４、Ｓ４５）。その後、スケジューリング部３０６は、要求元アプリケーション２０２のアプリケーション情報３１０内のソケット目標数から、上記解放したいソケット数を差し引いた数を、要求元アプリケーション２０２の新たなソケット目標数として算出する（ステップＳ４６）。
【００７６】
このようにして、スケジューリング部３０６が要求元アプリケーション２０２のソケット目標数のスケジューリング（再計算）を行うと、スケジューリング部３０６は、アプリケーション管理部３０４に、スケジュール（再計算）されたソケット目標数を設定する（ステップＳ４７、Ｓ４８）。
【００７７】
その後、差異スケジューリングが終った旨の応答が、スケジューリング部３０６からアプリケーションＩ／Ｆ部３０２へ（ステップＳ４９）、アプリケーションＩ／Ｆ部３０２からソケット制御部２０８へ（ステップＳ５０）、さらに、ソケット制御部２０８からサービス部２０４へ（ステップＳ５１）と返信される。
【００７８】
その後、（そのシーケンスは図示されてないが）要求元アプリケーション２０２のソケット取得部２０６が、ＯＳ１００に不要になったソケットの解放を要求する。
【００７９】
図７は、或る１つのアプリケーションがシャットダウンし、その後に、ソケット管理部３００が終了するときのシーケンスを示す図である。
【００８０】
或るアプリケーションシャットダウン要求が入ると、メインタスク４００からそのアプリケーション２０２のサービス部２０４に対してシャットダウンが要求され（ステップＳ６１）、サービス部２０４からソケット制御部２０８に対して破棄が要求される（ステップＳ６２）。すると、ソケット制御部２０８からソケット管理部３００のアプリケーションＩ／Ｆ部３０２に対してそのアプリケーション２０２の登録削除が要求され（ステップＳ６３）、さらに、アプリケーションＩ／Ｆ部３０２からアプリケーション管理部３０４に対して同登録削除が要求される（ステップＳ６４）。
【００８１】
すると、アプリケーション管理部３０４がそのアプリケーション２０２のアプリケーション情報３１０を削除することで、そのアプリケーション２０２の登録を削除し、そして、アプリケーションＩ／Ｆ部３０２に対して、アプリケーション２０２の登録を削除した旨の応答が返信され（ステップＳ６６）、アプリケーションＩ／Ｆ部３０２からソケット制御部２０８に対して同応答が返信される（ステップＳ６７）。
【００８２】
すると、ソケット制御部２０８は、サービス部２０４に対して消滅の旨の応答を返信して（ステップＳ６８）、消滅する。サービス部２０４は、メインタスク４００にシャットダウンする旨の応答を返信して（ステップＳ６９）、消滅する。
【００８３】
その後、コンピュータシステム１０が動作を終了しようとするとき、メインタスク４００からアプリケーションＩ／Ｆ部３０２に対して、シャットダウンを要求する（ステップＳ７０）。すると、アプリケーションＩ／Ｆ部３０２からスケジューリング部３０６に対して破棄が要求される（ステップＳ７１）。すると、スケジューリング部３０６は、アプリケーションＩ／Ｆ部３０２に対して消滅する旨の応答を返信して（ステップＳ７２）、消滅する。
【００８４】
また、アプリケーションＩ／Ｆ部３０２がアプリケーション管理部３０４に対して破棄を要求する（ステップＳ７３）。すると、アプリケーション管理部３０４は、アプリケーションＩ／Ｆ部３０２に対して消滅する旨の応答を返信して（ステップＳ７４）、消滅する。
【００８５】
その後、アプリケーションＩ／Ｆ部３０２が、メインタスク４００に対してシャットダウンする旨の応答を返信して（ステップＳ７５）、シャットダウンする。その後、メインタスク４００がシャットダウンして、ＯＳコンピュータシステム１０の動作が終了する。
【００８６】
図８は、本発明の別の実施形態にかかるソケット管理システムを備えたるコンピュータシステムの要部の構成を示すブロック線図である。
【００８７】
図１に示されたコンピュータシステム１０では各アプリケーション２０２がソケット取得部２０６を有しているのに対し、図８に示されたコンピュータシステム２０では、ソケット管理部３２０が、それぞれのアプリケーション２２２、２２２、…のためのソケットをＯＳ１００から取得するためのソケット取得部３１４、３１４、…を有している。このコンピュータシステム２０では、或るアプリケーション２０２からソケット数変更要求（ソケットの取得又は解放の要求）が発された時に、その要求元アプリケーション２０２に割り当てられたソケット取得部３１４が、スケジューリング部３０６によってスケジュールされた要求元アプリケーション２０２のソケット目標数に基づいて、ＯＳ１００から新たなソケットを取得し又は取得済みのソケットを解放する。そして、要求元アプリケーション２０２は、そのソケット取得部３１４によって取得されたソケットを用いて、ネットワークサービスを行うようになっている。
【００８８】
このように、ソケット管理部３２０が各アプリケーション２０２のソケット目標数を計算するだけでなく、それに基づいて各各アプリケーション２０２のための実際のソケットの取得や解放を行うので、各アプリケーション２２２の実際のソケット保有数をソケット目標数に確実に一致させることができる(但し、ソケットの解放をＯＳ１００に要求してから、実際にソケットが解放されるまでのタイムラグの間は、この限りでない)。
【００８９】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であり、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱しない範囲で、上記実施形態とは異なる種々の態様で実施することができる。
【図面の簡単な説明】
【００９０】
【図１】本発明が適用されたコンピュータシステムの一実施形態の要部の構成を示すブロック線図。
【図２】スケジュールアルゴリズムの構成要素の一つであるパターン算出表の例を示す図。
【図３】スケジュールアルゴリズムの構成要素の別の一つであるソケット割り当て数割合表の例を示す図。
【図４】ソケット管理部が起動しそして或る１つのアプリケーションが起動するときのシーケンスを示す図。
【図５】或る１つのアプリケーションがソケットの取得を要求するときのシーケンスを示す図。
【図６】或る１つのアプリケーションがソケットの解放を要求するときのシーケンスを示す図。
【図７】或る１つのアプリケーションがシャットダウンしそしてソケット管理部が終了するときのシーケンスを示す図。
【図８】本発明の別の実施形態にかかるソケット管理システムを備えたるコンピュータシステムの要部の構成を示すブロック線図。
【符号の説明】
【００９１】
１０、２０：コンピュータシステム、  １００：オペレーションシステム（ＯＳ）、  ２００、２２０：アプリケーション部、  ２０２、２２２：アプリケーション、  ２０４：サービス部、  ２０６、３１４：ソケット取得部、  ２０８：ソケット制御部、  ２１０：ソケット保有数、  ３００、３２０：ソケット管理部（ソケット管理装置）、  ３０２：アプリケーションＩ／Ｆ部、  ３０４：アプリケーション管理部、  ３０６：スケジューリング部、  ３０８：ソケット総数、  ３１０：アプリケーション情報、  ３１２：スケジュールアルゴリズム
【図１】
0004586873.tif 000002
【図２】
0004586873.tif 000003
【図３】
0004586873.tif 000004
【図４】
0004586873.tif 000005
【図５】
0004586873.tif 000006
【図６】
0004586873.tif 000007
【図７】
0004586873.tif 000008
【図８】
0004586873.tif 000009