(57)【特許請求の範囲】
【請求項１】
複数のコンソール装置へ出力するためのメッセージの入力を受ける入力手段と、
前記入力手段から入力された１以上のメッセージを一時記憶する一時記憶手段と、
前記一時記憶手段に記憶されたメッセージを複数の前記コンソール装置へ出力するためのエントリが登録されるキューをそれぞれ管理する複数の管理手段と、
前記キューにエントリが登録されたメッセージを前記コンソール装置へ出力する出力手段と、
前記出力手段から前記コンソール装置へのメッセージの出力性能に応じて、複数の前記管理手段がそれぞれ管理する複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決める選択手段と
を備える、情報処理装置。
【請求項２】
前記選択手段は、前記一時記憶手段の記憶容量が第１の閾値を下回った場合に、新たなメッセージに対応するエントリを登録する前記キューを決める、
請求項１記載の情報処理装置。
【請求項３】
前記出力手段から前記コンソール装置への出力完了前に、前記一時記憶手段からメッセージを削除可能な削除手段
を更に備える、請求項１又は請求項２記載の情報処理装置。
【請求項４】
前記削除手段は、前記出力手段から前記コンソール装置へのメッセージの出力性能に応じて、前記一時記憶手段から当該メッセージを削除する、
請求項３記載の情報処理装置。
【請求項５】
前記一時記憶手段が記憶するメッセージを前記コンソール装置への出力完了前に前記削除手段が削除する場合に、削除するメッセージに関する情報を記録媒体に記録するログ記録手段
を更に備える、請求項３又は請求項４記載の情報処理装置。
【請求項６】
前記削除手段は、前記一時記憶手段の記憶容量が第２の閾値を下回った場合に、前記一時記憶手段からメッセージを削除する、
請求項３乃至請求項５のいずれか１項記載の情報処理装置。
【請求項７】
前記選択手段は、前記出力手段から前記コンソール装置へ出力すべきメッセージの登録件数と出力可能件数との比較に基づき、複数の前記管理手段がそれぞれ管理する複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決める、
請求項１乃至請求項６のいずれか１項記載の情報処理装置。
【請求項８】
前記コンソール装置のオペレータの存在の有無を検知する検知手段
を更に備え、
前記選択手段は、オペレータが存在する前記コンソール装置に対応する前記キューを、新たなメッセージに対応するエントリを登録する前記キューとする、
請求項１乃至請求項６のいずれか１項記載の情報処理装置。
【請求項９】
前記入力手段は、第１のアプリケーション及び前記第１のアプリケーションよりも優先度の高い第２のアプリケーションからメッセージの入力を受け、
前記削除手段は、前記第２のアプリケーションからメッセージの一次記憶を要求された場合に、前記一次記憶手段からメッセージを削除して、前記第２のアプリケーションからのメッセージを格納する、
請求項３乃至請求項７のいずれか１項記載の情報処理装置。
【請求項１０】
１以上のコンソール装置へ出力するためのメッセージの入力を受けるステップと、
入力された１以上のメッセージを一時記憶する一時記憶装置に記憶するステップと、
前記一時記憶装置に記憶されたメッセージを複数の前記コンソール装置へそれぞれ出力するためのエントリが登録される１以上のキューを管理するステップと、
前記キューにエントリが登録されたメッセージを前記コンソール装置へ出力するステップと、
前記コンソール装置へのメッセージの出力性能に応じて、複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決めるステップと
を備える、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明に係るいくつかの態様は、情報処理装置、及び情報処理方法に関する。
【背景技術】
【０００２】
メインフレームのような複数のコンソール装置を持つコンピュータシステムでは、通常、出力を選択した全コンソール装置へのメッセージ出力が完了するまで、当該メッセージを保持し続ける。よって、例えばＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）性能の異なるコンソール装置が複数あると、最もＩ／Ｏ性能の低いコンソール装置へのメッセージ出力がボトルネックとなって、メッセージ管理の資源が枯渇してしまうことがあった。
【０００３】
特許文献１には、各コンソール装置のうちの一つでオーバロードとなっている出力メッセージの数がコンソール装置全体でオーバロードとなっている出力メッセージの数を超えたときに、該コンソール装置を停止することによって、低速のコンソール装置に出力負荷が集中することによるコンピュータシステム全体への影響を防止することが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平３−１９８１２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、コンソール装置を停止してしまうと、コンピュータシステム全体が操作不能となる可能性がある。停止しても影響の小さいコンソール装置のみを停止対象とすることも考えられるが、そのように実装すると、負荷軽減の効果が限定的となってしまう。
【０００６】
本発明のいくつかの態様は前述の課題に鑑みてなされたものであり、コンソール装置の停止なく、資源の枯渇を抑制することのできる情報処理装置及び情報処理方法を提供することを目的の１つとする。
【課題を解決するための手段】
【０００７】
本発明の情報処理装置は、複数のコンソール装置へ出力するためのメッセージの入力を受ける入力手段と、前記入力手段から入力された１以上のメッセージを一時記憶する一時記憶手段と、前記記憶手段に記憶されたメッセージを複数の前記コンソール装置へ出力するためのエントリが登録されるキューをそれぞれ管理する複数の管理手段と、前記キューにエントリが登録されたメッセージを前記コンソール装置へ出力する出力手段と、前記出力手段から前記コンソール装置へのメッセージの出力性能に応じて、複数の前記管理手段がそれぞれ管理する複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決める選択手段とを備える。
【０００８】
本発明の情報処理方法は、１以上のコンソール装置へ出力するためのメッセージの入力を受けるステップと、入力された１以上のメッセージを一時記憶する一時記憶装置に記憶するステップと、前記一時記憶装置に記憶されたメッセージを複数の前記コンソール装置へそれぞれ出力するためのエントリが登録される１以上のキューを管理するステップと、前記キューにエントリが登録されたメッセージを前記コンソール装置へ出力するステップと、前記コンソール装置へのメッセージの出力性能に応じて、複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決めるステップとを備える。
【０００９】
尚、本発明において、「部」や「手段」、「装置」とは、単に物理的手段を意味するものではなく、その「部」や「手段」、「装置」が有する機能をソフトウェアによって実現する場合も含む。また、１つの「部」や「手段」、「装置」が有する機能が２つ以上の物理的手段や装置により実現されても、２つ以上の「部」や「手段」、「装置」の機能が１つの物理的手段や装置により実現されても良い。
【発明の効果】
【００１０】
本発明によれば、コンソール装置の停止なく、資源の枯渇を抑制することのできる情報処理装置及び情報処理方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態に係るコンピュータシステムの機能構成を示すブロック図である。
【図２】図１に示したコンピュータシステムのＩ／Ｏキューの構成を示すブロック図である。
【図３】図１に示したコンピュータシステムのエントリの構成を説明するためのブロック図である。
【図４】図１に示したコンピュータシステムの処理の流れを示すフローチャートである。
【図５】図１に示したコンピュータシステムの処理の流れを示すフローチャートである。
【図６】図１に示したコンピュータシステムにおけるエントリの処理の具体例を説明するための図である。
【図７】他の実施形態に係るコンピュータシステムの機能構成を示すブロック図である。
【図８】他の実施形態に係るコンピュータシステムの機能構成を示すブロック図である。
【発明を実施するための形態】
【００１２】
以下に本発明の実施形態を説明する。以下の説明及び参照する図面の記載において、同一又は類似の構成には、それぞれ同一又は類似の符号が付されている。
【００１３】
（１  第１の実施形態の概要）
以下、第１の実施形態に係る情報処理装置であるコンピュータシステム１０の概要を図１を参照しながら説明する。図１に示すように、本実施形態に係るコンピュータシステム１０は、アプリケーションプログラム１０１（以下、単に「アプリケーション１０１」とも呼ぶ。）、メッセージ送信手段１０３、通知セマフォ１０５、メッセージ処理手段１０７、メッセージログ１０９、コンソール１１１（コンソール１１１Ａ乃至１１１Ｎを総称して「コンソール１１１」と呼ぶ。また、コンソールとコンソール装置とは同義で使用する。）、及び空き資源管理手段１１３等を含む。
【００１４】
コンピュータシステム１０は、アプリケーション１０１が出力したメッセージを複数のコンソール１１１に出力可能な、例えばメインフレーム等の情報処理装置である。ここでコンピュータシステム１０は、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）性能が低いコンソール１１１があっても、当該コンソール１１１の切離しやメッセージを格納する内部資源（例えば記憶領域等）を増やすことなく、資源の枯渇を防止し、かつ、資源に格納されたメッセージは必ずメッセージログ１０９に出力することで、事象の事後確認を可能としている。以下、この点を説明する。
【００１５】
通常、メインフレームのコンソール制御では、出力メッセージを格納可能な有限個の資源は、出力を選択した全コンソールへのＩ／Ｏが完了するまで解放できない。速度が異なるコンソールが複数存在する場合には、最もＩ／Ｏ性能が低いコンソールがボトルネックとなって資源の解放が遅延するので、その間に新たなメッセージが入力されると、結果として有限個の資源が枯渇する可能性がある。
【００１６】
ここで、資源が枯渇した場合に、メッセージ出力よりも処理の継続を優先する一部のアプリケーションプログラムが、資源の空きを待つことなくメッセージの出力を中止することも考えられる。しかしながら、メッセージ出力を中止してしまうと、Ｉ／Ｏ性能の高いコンソールやメッセージログにもメッセージが出力されないため、ユーザが事象を事後確認できなくなってしまう。
【００１７】
また、コンソールに関連する技術として、コンソール及びメッセージに付加したレベルや属性に応じて出力コンソールの選択を行うことも考えられる。しかしながら、これはコンソールのＩ／Ｏ性能や目的を考慮して、レベルと属性とを設定する静的な出力コンソール選択方式であるため、ネットワーク負荷の変動等の動的なＩ／Ｏ性能の変動に対応するのは困難である。
【００１８】
更に、メッセージの枯渇時に、Ｉ／Ｏ性能の低いコンソールを切り離すことも考えられるが、コンソールを切り離してしまうと、コンピュータシステム全体が操作不能となる可能性があり、また、システムが操作不能とならないように切離し対象を出力専用のコンソール（例えば、シリアルプリンタ等）に限ってしまうと、資源枯渇抑制の効果は限定的となってしまう。
【００１９】
そこで上述の通り、本実施形態に係るコンピュータシステム１０では、コンソール１１１のＩ／Ｏ性能の変動に対応した出力コンソールの選択を行い、Ｉ／Ｏ性能の低いコンソールがあったとしても、コンソールの切離しや、資源の追加を行うことなく資源の枯渇を防止し、且つ、資源に格納されたメッセージは、必ずメッセージログ１０９に出力することで、事象の事後確認やメッセージ連動を可能としている。
【００２０】
（２  コンピュータシステム１０の概略構成）
（２．１  コンピュータシステム１０全体の構成）
以下、図１を参照しながら、第１の実施形態に係るコンピュータシステム１０の概略構成を説明する。図１は、コンピュータシステム１０の機能構成の概略を示す機能ブロック図である。前述のとおり、コンピュータシステム１０は、メッセージ送信手段１０３、通知セマフォ１０５、メッセージ処理手段１０７、メッセージログ１０９、コンソール１１１、及び空き資源管理手段１１３等を含み、アプリケーション１０１が動作する、例えばメインフレーム等の情報処理装置である。
【００２１】
アプリケーション１０１は、ユーザがＣＯＢＯＬ等の任意の言語で作成したアプリケーションプログラムであり、コンピュータシステム１０上で実行される。アプリケーション１０１は、複数が同時に実行されていても良い。
【００２２】
コンソール１１１は、アプリケーション１０１が出力したメッセージを表示してオペレータ（操作者）に認知させる機能と、キーボードを通してオペレータからの入力を受け付ける機能とを備える。
【００２３】
空き資源管理手段１１３は、未使用のメッセージ格納資源１１５をプール管理するためのモジュールである。より具体的には、空き資源管理手段１１３は、内部のプールから、空き資源として管理しているメッセージ格納資源１１５を取り出す資源取得機能と、後述するメッセージ格納資源１１５のＩ／Ｏカウント領域１１９が「０」になった資源を内部のプールに戻すための資源解放機能と、管理している空き資源数を管理する機能とを備える。
【００２４】
メッセージ格納資源１１５は、アプリケーション１０１から出力要求されたメッセージを、コンソール１１１に当該メッセージの出力が完了するまで保持（一時記憶）しておくための内部のメモリ資源である。後述する図３に示すとおり、メッセージ格納資源１１５は、メッセージ格納領域１１７とＩ／Ｏカウント領域１１９とを有する。
【００２５】
メッセージ格納領域１１７は、メッセージを格納しておくための、記憶媒体上に確保される記憶領域である。Ｉ／Ｏカウント領域１１９は、当該メッセージを登録したＩ／Ｏキューの数を記憶するために記憶媒体上に確保される記憶領域である。メッセージ格納資源１１５に係るメッセージが、登録された全てのＩ／Ｏキュー２１０に対応するコンソール１１１への出力が完了すると、Ｉ／Ｏカウント領域１１９の値は「０」となり、空き資源管理手段１１３によって、当該メッセージ格納資源１１５は解放（メッセージに係るデータが削除）される。
【００２６】
メッセージ送信手段１０３は、アプリケーション１０１によって使用され、空き資源管理手段１１３を使用して取得したメッセージ格納資源１１５に、アプリケーション１０１から入力されたメッセージをコピー（複製）して、通知セマフォ１０５を通じて、メッセージ処理手段１０７にメッセージ送信を要求するモジュールである。
【００２７】
通知セマフォ１０５は、メッセージ送信手段１０３からメッセージ処理手段１０７にメッセージ出力要求を通知して、出力メッセージを格納したメッセージ格納資源１１５を受け渡すためのセマフォである。
【００２８】
メッセージ処理手段１０７は、メッセージ送信手段１０３からのメッセージ出力要求を受けて、メッセージをメッセージログ１０９に記録すると共に、メッセージを出力すべき０乃至複数台のコンソール１１１を選択して、選択したコンソール１１１にメッセージを出力するためのモジュールである。メッセージ処理手段１０７は、コンソール選択手段２０１と、Ｉ／Ｏキュー２１０（Ｉ／Ｏキュー２１０Ａ乃至２１０Ｎを総称する。）と、メッセージ記録手段２０３とを含む。
メッセージ記録手段２０３は、メッセージをメッセージログ１０９に記録するモジュールであり、コンソール選択手段２０１により使用される。
【００２９】
コンソール選択手段２０１は、メッセージ送信手段１０３から出力要求された全てのメッセージを、メッセージ記録手段２０３を用いてメッセージログ１０９へ記録すると共に、当該メッセージに係るメッセージ格納資源１１５を適切なＩ／Ｏキュー２１０に登録するモジュールである。コンソール選択手段２０１は、登録するＩ／Ｏキュー２１０を、一般的なコンソールルーティング手法を用いて、メッセージとコンソール１１１に付加された属性とレベルとによって選択（決定）する。また、コンソール選択手段２０１は、Ｉ／Ｏキュー２１０の選択時に資源の逼迫を検出すると、Ｉ／Ｏ性能の低いコンソール１１１を選択対象外としてＩ／Ｏ完了待ちによる資源解放のボトルネックを排除することにより、メッセージ格納資源１１５の解放を早める機能を有する。更に、コンソール選択手段２０１は、Ｉ／Ｏキューに登録済みの資源や、通知セマフォ１０５に滞留している資源を解放することにより、資源の逼迫を解消する機能も備える。
【００３０】
Ｉ／Ｏキュー２１０は、コンソール選択手段２０１によって登録されたメッセージ格納資源１１５への参照を、コンソール１１１に出力するまでの間保持するためのキューである。一般的なコンソール１１１は、メッセージ出力のＩ／Ｏに数十ミリ秒程度の時間を必要とするため、コンソール１１１毎にＩ／Ｏ待ちメッセージを保持するＩ／Ｏキュー２１０が必要となる。
【００３１】
メッセージログ１０９は、出力要求のあったメッセージを事後確認するためのメッセージ記憶領域であり、たとえばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の磁気ディスクにより構築される。
【００３２】
（２．２  Ｉ／Ｏキュー２１０の構成）
図２を参照して、Ｉ／Ｏキュー２１０の構成を詳細に説明する。図２は、Ｉ／Ｏキュー２１０の機能構成を示す機能ブロック図である。
【００３３】
Ｉ／Ｏキュー２１０は、エントリ管理手段２１１と、資源登録手段２１５と、キュー長測定手段２１７と、資源解放手段２１９と、Ｉ／Ｏ手段２２１と、登録件数記録領域２２３と、Ｉ／Ｏ件数記録領域２２５とを含む。
【００３４】
エントリ管理手段２１１は、Ｉ／Ｏキュー２１０に登録されたエントリ２１３（エントリ２１３Ａ乃至２１３Ｎを総称して「エントリ２１３」と呼ぶ。後述のエントリ２１３Ａ１乃至２１３Ａ３、エントリ２１３Ｂ１等も同様。）をＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）で管理するための手段である。エントリ２１３をキューの末尾に追加する機能と、キューの先頭からエントリ２１３を取出す機能と、任意のエントリ２１３を取出す機能とを備える。エントリ２１３は、Ｉ／Ｏキュー２１０に登録されたメッセージ格納資源１１５への参照を保持するためのメモリ資源である。エントリ２１３については、図３を参照しながら後に詳細に構成を説明する。
【００３５】
資源登録手段２１５は、当該Ｉ／Ｏキューにメッセージ格納資源１１５を登録するために、コンソール選択手段２０１によって使用される。資源登録手段２１５は、新規にエントリ２１３を確保してメッセージ格納資源１１５への参照を当該新規エントリ２１３に登録して、エントリ管理手段２１１で管理するエントリ２１３の末尾（図２の例であれば、２１３Ａ）に追加する機能を有する。また、資源登録手段２１５は、メッセージ格納資源１１５のＩ／Ｏカウント領域１１９の値をインクリメント（＋１）してＩ／Ｏキューからの参照を記録する機能を有する。更に資源登録手段２１５は、登録件数記録領域２２３が記憶する、単位時間当たりの登録件数を更新する機能も有する。
【００３６】
登録件数記録領域２２３は、当該Ｉ／Ｏキュー２１０に対する単位時間当たりの登録件数を記憶する領域である。登録件数記録領域２２３は、アクセス速度を考慮してメモリ上に確保される。
【００３７】
キュー長測定手段２１７は、エントリ管理手段２１１を使用して、エントリ管理手段２１１に登録されているエントリ２１３の数を取得するためのモジュールである。
【００３８】
資源解放手段２１９は、エントリ管理手段２１１が管理している任意のエントリ２１３を取出して解放すると共に、当該エントリ２１３が参照していたメッセージ格納資源１１５のＩ／Ｏカウント領域１１９の値をデクリメント（−１）する。資源解放手段２１９は、Ｉ／Ｏカウント領域１１９の値が「０」になった場合、すなわち、全てのＩ／Ｏキュー２１０から当該メッセージ格納資源１１５への参照がなくなった場合に、空き資源管理手段１１３を使用して、当該メッセージ格納資源１１５を解放する。
【００３９】
Ｉ／Ｏ手段２２１は、エントリ管理手段２１１の先頭からエントリ２１３を取出して、エントリ２１３が参照するメッセージ格納資源１１５のメッセージをコンソール１１１に出力を要求するとともに、Ｉ／Ｏ完了時に、資源解放手段２１９を使用して、当該エントリ２１３を解放する機能と、Ｉ／Ｏ件数記録領域２２５の値を更新する機能とを備える。
【００４０】
Ｉ／Ｏ件数記録領域２２５は、当該Ｉ／Ｏキュー２１０に対応するコンソール１１１について、直近のＩ／Ｏに要した時間を単位時間当たりのＩ／Ｏ可能件数として記録する領域である。Ｉ／Ｏ件数記録領域２２５は、アクセス速度を考慮してメモリ上に確保される。
【００４１】
（２．３  エントリ２１３の構成）
以下、図３を参照しながら、エントリ２１３の構成を説明する。図３は、エントリ２１３の構成を説明するためのブロック図である。
【００４２】
エントリ２１３は、メッセージ格納資源１１５への参照を保持するための参照保持領域３０５Ａ１と、同一Ｉ／Ｏキュー２１０内で各エントリ２１３を登録順にリンクしてＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）で管理するためのキュー内リンク領域３０１Ａ１と、同一のメッセージ格納資源１１５を参照するエントリ２１３をリンクするための、キュー外リンク領域３０３とを含む。
【００４３】
キュー外リンク領域３０３のリンクは、リング状に構成される。そのため、先頭と末尾のエントリ２１３は存在しない。尚、リンクの方向は双方向であっても単方向であっても構わない。例えば、３つのエントリ２１３Ａ１、エントリ２１３Ｂ１、エントリ２１３Ｃ１をリンクする場合、「・・・⇔エントリ２１３Ａ１⇔エントリ２１３Ｂ１⇔エントリ２１３Ｃ１⇔エントリ２１３Ａ１⇔エントリ２１３Ｂ１⇔エントリ２１３Ｃ１⇔・・・」のように、リング状に循環したリンクを構成する。このような構造とすることで、どのエントリ２１３からでも、最小のステップで全てのエントリ２１３を辿ることができるようになる。
【００４４】
図３は、Ｉ／Ｏキュー２１０Ａ（Ｉ／ＯキューＡ）のエントリ管理手段２１１（図３では省略。）に３つのエントリ２１３Ａ１乃至Ａ３が登録されており、同様にＩ／Ｏキュー２１０Ｂ（Ｉ／ＯキューＢ）のエントリ管理手段２１１に１つのエントリ２１３Ｂ１が登録されており、かつ、それぞれの左端（末尾）のエントリ２１３Ａ１及びＢ１が、同一のメッセージ格納資源１１５Ａを参照している場合の例である。メッセージ格納資源１１５Ａは２つのＩ／Ｏキュー２１０から参照されているので、メッセージ格納資源１１５ＡのＩ／Ｏカウント領域１１９Ａは「２」となっている。
【００４５】
エントリ２１３は、メッセージ格納資源１１５への参照と、リンク領域のみで構成される数十バイト程度の小さなメモリ資源である。よって、メッセージを格納するために比較的サイズが大きくなるメッセージ格納資源１１５のような、空きエントリ２１３をプール管理する仕組みは必須ではない。本実施形態では、エントリ２１３は、動的にメモリ上に確保／解放されるものとする。
【００４６】
（３  処理の流れ）
（３．１  メッセージ出力処理の流れ）
アプリケーション１０１は、メッセージ送信手段１０３を用いて、任意のコンソール１１１へのメッセージ送信を要求する。メッセージ送信手段１０３は、空き資源管理手段１１３を使用して、空き資源管理手段１１３が管理しているメッセージ格納資源１１５を取得する。資源が枯渇していて取得できない場合は、メッセージ送信失敗となる。この場合、送信要求されたメッセージはコンソール１１１には出力されず、またメッセージログ１０９にも記録されない。また、メッセージ格納資源１１５の枯渇が解消するまで待ち合わせる方式も考えられる。この場合には、アプリケーション１０１も、メッセージ格納資源１１５が取得できるまで停止することになる。
【００４７】
メッセージ格納資源１１５が取得できた場合、メッセージ送信手段１０３は、メッセージ格納資源１１５のメッセージ格納領域１１７にアプリケーション１０１から送信要求されたメッセージをコピーして、Ｉ／Ｏカウント領域１１９に「０」をセットする。更にメッセージ送信手段１０３は、通知セマフォ１０５に、取得したメッセージ格納資源１１５をセットして、メッセージ処理手段１０７にメッセージ送信要求を通知する。
以下、図４を参照しながら、メッセージ処理手段１０７の処理の流れを説明する。
【００４８】
まず、コンソール選択手段２０１は、通知セマフォ１０５に対して待ち合わせを行い、メッセージ送信手段１０３からのメッセージ送信要求と、メッセージ格納資源１１５とを受け取る（Ｓ４０１）。
【００４９】
次に、コンソール選択手段２０１は、空き資源管理手段１１３を使用して、空き資源の数を確認する（Ｓ４０３）。ここで、資源の解放を開始する資源解放開始値を予め定めておき、もし空き資源数（空いている記憶容量）が資源解放開始値以下になった場合には、Ｓ４０５に進んで資源の解放を開始する。そうでない場合には、資源の解放を行わずに、Ｓ４１９の処理へ進む。
【００５０】
Ｓ４１９では、コンソール選択手段２０１は、メッセージ記録手段２０３を使用して、メッセージ格納資源１１５のメッセージ格納領域１１７に格納されたメッセージを、メッセージログ１０９に出力する。その後、図５を参照しながら後述するコンソール選択処理に進む。
【００５１】
Ｓ４０３で、空き資源数（空き記憶容量）が資源解放開始値以下であった場合には、資源の逼迫が検出されているため、メッセージ格納資源１１５の解放を開始する。まず、システムに存在する全てのＩ／Ｏキュー２１０に対して、キュー長測定手段２１７を使用してエントリ２１３の数を検査する（Ｓ４０５）。エントリ２１３が登録されたＩ／Ｏキュー２１０が存在しない場合にはＳ４０７へ、エントリ２１３が登録されたＩ／Ｏキュー２１０が１つ以上存在する場合にはＳ４１５の処理へと進む。
【００５２】
Ｉ／Ｏキュー２１０に登録されているメッセージ格納資源１１５が存在しない場合には、通知セマフォ１０５に滞留しているメッセージ格納資源１１５の解放を開始する。この時、コンソール１１１へのメッセージ出力を諦める代わりに、メッセージログ１０９に記録を残す。メッセージ記録手段２０３は、メッセージ格納資源１１５のメッセージ格納領域１１７に格納されたメッセージをメッセージログ１０９に出力し（Ｓ４０７）、また、空き資源管理手段１１３は、メッセージ格納資源１１５を解放する（Ｓ４０９）。
【００５３】
この後、空き資源管理手段１１３は、再度空き資源の数を確認する（Ｓ４１１）。このとき、資源の解放を終了する資源解放終了値（尚、資源解放終了値は、資源解放開始値以上である）の値を事前に決めておき、空き資源数が資源解放終了値以上に回復した場合には、Ｓ４０１に処理を戻す。この後、空き資源が減少して再び資源解放開始値以下にならない限りは、Ｓ４０３（Ｎｏ）及びＳ４１９を経て、図５を参照しながら後述するコンソール選択処理へと進む。
【００５４】
Ｓ４１１で空き資源数が資源解放終了値未満の場合には（Ｓ４１１のＮｏ）、メッセージ処理手段１０７は、通知セマフォ１０５から次のメッセージ出力要求に係るメッセージが格納されたメッセージ格納資源１１５を取り出し（Ｓ４１３）、Ｓ４０７へ処理を戻してメッセージログ１０９への出力（Ｓ４０７）及び資源を解放する（Ｓ４０９）処理を繰り返す。
【００５５】
Ｓ４０５で、エントリ２１３が登録されたＩ／Ｏキュー２１０が１つ以上存在する場合には（Ｓ４０５のＹｅｓ）、Ｉ／Ｏキュー２１０に登録されたエントリ２１３から優先してメッセージ格納資源１１５を解放する。メッセージ処理手段１０７は、解放する資源として、エントリ２１３が登録された全てのＩ／Ｏキュー２１０を検査して、最もＩ／Ｏ完了に時間がかかると予測されるエントリ２１３を選択する。ここで、Ｉ／Ｏキュー２１０は、単位時間あたりのＩ／Ｏ可能回数を記録するＩ／Ｏ件数記録領域２２５を備え、Ｉ／Ｏ手段２２１がＩ／Ｏ毎に当該Ｉ／Ｏ件数記録領域２２５を更新している。よって、メッセージ処理手段１０７は、単位時間あたりのＩ／Ｏ可能回数を１回のＩ／Ｏに要する時間に変換した上で、これをキュー長測定手段２１７で測定したエントリ２１３の数との積を求めることで、現時点から、現在の末尾のエントリ２１３のＩ／Ｏ完了までに要する時間を予測できる。よって、メッセージ処理手段１０７は、最も時間がかかると予測されるＩ／Ｏキュー２１０の末尾のエントリ２１３が参照するメッセージ格納資源１１５を解放対象とする。
【００５６】
解放対象としたエントリ２１３が参照しているメッセージ格納資源１１５が他のコンソール１１１にもルーティングされている場合には、当該メッセージ格納資源１１５は、他のＩ／Ｏキュー２１０のエントリ２１３からも参照されている事になる。よって、空き資源管理手段１１３は、参照する全てのＩ／Ｏキュー２１０のエントリ２１３を解放するまで、メッセージ格納資源１１５を解放することはできない。よって、エントリ２１３のキュー外リンク領域３０３を参照することで、解放対象とするメッセージ格納資源１１５を参照する全てのエントリ２１３を辿ることができるので、全てのエントリ２１３を資源解放手段２１９が解放した上で、空き資源管理手段１１３は、メッセージ格納資源１１５を解放する（Ｓ４１５）。尚、Ｓ４１５の処理の具体例は、図６を参照しながら後述する。
【００５７】
メッセージ格納資源１１５の解放後、メッセージ処理手段１０７は、空き資源管理手段１１３を使用して空き資源の数を確認する。空き資源数が事前に決められた資源解放終了値以上になった場合には（Ｓ４１７のＹｅｓ）、コンソール選択手段２０１は、メッセージ格納資源１１５のメッセージ格納領域１１７に格納されたメッセージをまだメッセージログ１０９へ出力していなければ、メッセージ記録手段２０３を使用して、当該メッセージをメッセージログ１０９に出力する（Ｓ４１９）。その後、解放処理を終了し、図５に説明するコンソール選択処理に進む。空き資源数が資源解放終了値以上に回復していない場合には（Ｓ４１７のＮｏ）、Ｓ４０５に処理を戻し、資源解放処理を続行する。
【００５８】
続いて、図５を参照しながら、コンソール選択手段２０１によるコンソール選択処理の流れを説明する。図５は、コンソール選択手段２０１の処理の流れを示すフローチャートである。
【００５９】
まず、コンソール選択手段２０１は、全てのＩ／Ｏキュー２１０を順に処理するため、未処理のＩ／Ｏキュー２１０を選択する（Ｓ５０１）。全てのＩ／Ｏキュー２１０が処理済みであり、Ｓ５０１で選択できるＩ／Ｏキュー２１０が存在しない場合には（Ｓ５０３のＹｅｓ）、コンソール選択手段２０１は処理を終了し、メッセージ処理手段１０７は次のメッセージ出力要求を待ち合わせて、図４を参照しながら説明したメッセージ処理を開始する。
【００６０】
選択可能なＩ／Ｏキュー２１０があった場合には（Ｓ５０３のＮｏ）、当該Ｉ／Ｏキュー２１０が対応するコンソール１１１がルーティング対象であるか否かを判定する（Ｓ５０５）。判定には、例えば一般的なコンソールルーティング手法を用いることができる。本実施形態では、メッセージに付加された属性と、コンソール１１１に付加された属性とが１つ以上一致し、かつ、メッセージに付加されたメッセージレベルが、コンソール１１１に付加されたコンソールレベル以上の場合に、当該コンソール１１１に対応するＩ／Ｏキュー２１０をルーティング対象とする。もしルーティング対象で無い場合には（Ｓ５０５のＮｏ）、コンソール選択手段２０１は処理をＳ５０１に戻し、次の未処理のＩ／Ｏキュー２１０を選択する。
【００６１】
Ｓ５０５で選択したＩ／Ｏキューに対応するコンソール１１１がルーティング対象であった場合には（Ｓ５０５のＹｅｓ）、コンソール選択手段２０１は、空き資源管理手段１１３を使用して空いているメッセージ格納資源１１５の数を確認する。空きメッセージ格納資源１１５の数（空き記憶容量）が、事前に決められた抑制閾値以下になった場合には（Ｓ５０７のＹｅｓ）、Ｓ５１１に処理を進めてメッセージをＩ／Ｏキュー２１０に登録するか否かを判定する。尚、Ｉ／Ｏキュー２１０への登録抑制は、図３の資源解放処理よりも早い段階で開始するのが望ましいため、抑制閾値は、資源解放開質よりも大きな値とする。
【００６２】
空きメッセージ格納資源１１５の数が抑制閾値より多い場合には（Ｓ５０７のＮｏ）、メッセージ格納資源１１５が逼迫していないと判断できるので、コンソール選択手段２０１は、コンソール１１１のＩ／Ｏ性能を考慮することなく、メッセージ格納資源１１５をＩ／Ｏキュー２１０へ登録する（Ｓ５０９）。Ｉ／Ｏキュー２１０への登録は、資源登録手段２１５を使用する。このとき、資源登録手段２１５は、エントリ２１３を新規に確保して、エントリ管理手段２１１を使用して、Ｉ／Ｏキュー２１０の末尾に追加する。エントリ管理手段２１１は、エントリ２１３のキュー内リンク領域３０１を使用して、ＦＩＦＯのキュー構造を構成する。
【００６３】
さらに、コンソール選択手段２０１は、エントリ２１３の参照保持領域３０５に登録するメッセージ格納資源１１５への参照を設定し、メッセージ格納資源１１５のＩ／Ｏカウント領域１１９Ａをインクリメント（＋１）する。他のＩ／Ｏキュー２１０にも当該メッセージを登録した場合には、コンソール選択手段２０１は、登録したエントリ２１３を一時的に覚えておき、そのエントリ２１３を、本ステップで確保したエントリ２１３とキュー外リンク領域３０３でリンクする。
【００６４】
また、コンソール選択手段２０１は、資源登録手段２１５により、登録件数記録領域２２３の単位時間当たりの登録件数を更新する。コンソール選択手段２０１は、資源登録手段２１５により登録件数記録領域２２３に単位時間分の過去までの資源を登録した複数の時刻を記録しておくことにより、単位時間当たりの登録件数を求めることができる。
コンソール選択手段２０１は、このようなＩ／Ｏキュー２１０への登録処理の完了後、Ｓ５０１に戻って次の未処理のＩ／Ｏキュー２１０を選択する。
【００６５】
Ｓ５０７で空き資源の数が抑制閾値以下となった場合には（Ｓ５０７のＹｅｓ）、メッセージ格納資源１１５の逼迫を検出したものとみなすことができるので、コンソール選択手段２０１は、Ｉ／Ｏ性能の低いコンソール１１１へのメッセージ格納資源１１５の登録を抑制する。より具体的には、コンソール選択手段２０１は、Ｓ５０９で記録した登録件数記録領域２２３の単位時間当たりの登録件数と、Ｉ／Ｏ件数記録領域２２５の単位時間当たりのＩ／Ｏ可能件数とを比較する。単位時間当たりの登録件数の方が多い場合には（Ｓ５１１Ｙｅｓ）、対応するコンソール１１１のＩ／Ｏ性能がメッセージ出力要求に追いつかないと判断できるので、コンソール選択手段２０１は、Ｉ／Ｏキュー２１０にメッセージ格納資源１１５を登録するＳ５０９には進まず、Ｓ５０１へ戻って次の未処理のＩ／Ｏキュー２１０を選択する。そうでない場合には、処理対象のＩ／Ｏキュー２１０のＩ／Ｏ性能はメッセージ出力要求を処理するのに十分であると考えられるので、コンソール選択手段２０１は、Ｓ５０９へ進んで当該Ｉ／Ｏキュー２１０に資源を登録する。
ここで、Ｉ／Ｏ手段２２１の処理を簡単に説明する。Ｉ／Ｏ手段２２１は、コンソール選択手段２０１とは独立して並列に動作する。
【００６６】
Ｉ／Ｏ手段２２１は、エントリ管理手段２１１を使用して、先頭のエントリ２１３を取出して、取出したエントリ２１３が参照するメッセージ格納資源１１５のメッセージをコンソール１１１に出力要求する。ここで、もしエントリ２１３が存在しなかった場合には、Ｉ／Ｏ手段２２１は、新たにエントリ２１３が登録されるまで待ち合わせる。
【００６７】
さらに、Ｉ／Ｏ手段２２１は、メッセージ出力要求のＩ／Ｏ完了を待ち合わせ、Ｉ／Ｏに要した時間を使用して、Ｉ／Ｏ件数記録領域２２５の単位時間当たりのＩ／Ｏ可能件数を更新する。Ｉ／Ｏ可能件数は、誤差による変動を抑えるため、直近の複数回のＩ／Ｏに要した時間を平均して求めるのが好ましい。
Ｉ／Ｏ完了後、Ｉ／Ｏ手段２２１は、資源解放手段２１９を使用して、当該エントリ２１３を解放して、先頭エントリ２１３の取出しに戻る。
【００６８】
（３．２  エントリ２１３に係るメッセージ格納資源１１５解放の処理の具体例）
以下、図６を参照しながら、図４Ｓ４１５の処理の具体例を説明する。
【００６９】
図６の例では、Ｉ／Ｏキュー２１０Ａ（Ｉ／ＯキューＡ）、Ｉ／Ｏキュー２１０Ｂ（Ｉ／ＯキューＢ）、Ｉ／Ｏキュー２１０Ｃ（Ｉ／ＯキューＣ）の３つのＩ／Ｏキュー２１０が構成され、Ｉ／Ｏキュー２１０Ａに４つのエントリ２１３Ａ１、２１３Ａ２、２１３Ａ３、及び２１３Ａ４が、Ｉ／Ｏキュー２１０Ｂに３つのエントリ２１３Ｂ１、２１３Ｂ２、及び２１３Ｂ３が、Ｉ／Ｏキュー２１０Ｃに１つのエントリ２１３Ｃ１が登録されている。ここで、メッセージ処理手段１０７は、Ｉ／Ｏ件数記録領域２２５を参照することで、各Ｉ／Ｏキュー２１０の１回のＩ／Ｏに要する時間は、Ｉ／Ｏキュー２１０Ａが１０ｍｓ、Ｉ／Ｏキュー２１０Ｂが２０ｍｓ、Ｉ／Ｏキュー２１０Ｃが３０ｍｓと求めることができるものとする。
【００７０】
メッセージ処理手段１０７は、全てのＩ／Ｏキュー２１０を検査して、最もＩ／Ｏ完了に時間がかかると予測されるエントリ２１３を選択する。各Ｉ／Ｏキュー２１０の中で最も時間のかかるエントリ２１３は、最後にＩ／Ｏ要求するキュー末尾のエントリ２１３となるため、コンソール選択手段２０１は、エントリ２１３Ａ１、エントリ２１３Ｂ１、及びエントリ２１３Ｃ１のＩ／Ｏ完了時間を予測する。それぞれのエントリ２１３について、１回のＩ／Ｏに要する時間とキュー長との積を計算すると、エントリ２１３Ａ１は４０ｍｓ、エントリ２１３Ｂ１は６０ｍｓ、エントリ２１３Ｃ１は３０ｍｓとなる。よって、エントリ２１３Ｂ１がＩ／Ｏ完了までに最も時間がかかると考えられるため、コンソール選択手段２０１は、エントリ２１３Ｂ１を解放対象とする。
【００７１】
図６の例では、エントリ２１３Ｂ１は、キュー外リンク領域３０３により、エントリ２１３Ａ２及びエントリ２１３Ｃ１とリンクされている。これは、エントリ２１３Ａ２とエントリ２１３Ｃ１とが、エントリ２１３Ｂ１と同一のメッセージ格納資源１１５を参照していることを示しているため、メッセージ処理手段１０７は、エントリ２１３Ａ２及びエントリ２１３Ｃ１も解放対象とする。
【００７２】
メッセージ処理手段１０７は、エントリ２１３Ｂ１からキュー外リンクを辿り、資源解放手段２１９を使用してエントリ２１３Ｂ１、２１３Ｃ１、及び２１３Ａ２の順で解放すると共に、空き資源管理手段１１３を使用して、それらのエントリ２１３に参照されているメッセージ格納資源１１５を解放する。
【００７３】
（４  第１の実施形態に係る効果）
以上説明したように、本実施形態に係るコンピュータシステム１０は、Ｉ／Ｏ性能の低いコンソール１１１があった場合であっても、メッセージ格納資源１１５の枯渇が発生しづらい。なぜなら、コンソール選択処理（図５）のＳ５１１において、メッセージ登録件数よりＩ／Ｏ可能件数が小さいコンソール１１１のＩ／Ｏキュー２１０を、メッセージ格納資源１１５の登録対象外としているためである。このようにメッセージ登録頻度と比較してＩ／Ｏ性能の低いコンソール１１１をルーティング対象外とすることにより、Ｉ／Ｏ完了待ちによる資源解放のボトルネックを排除できるため、メッセージ格納資源１１５を滞りなく解放できる。
【００７４】
また、本実施形態に係るコンピュータシステム１０は、資源逼迫の解消が早い。なぜならば、資源が逼迫した場合には、メッセージ処理手段１０７が、図４に示したＳ４０５、Ｓ４１５、及びＳ４１７において、Ｉ／Ｏキュー２１０に登録済みの資源の中から最もＩ／Ｏ完了に時間のかかる資源を選択して、即座に解放するためである。
【００７５】
更に、本実施形態に係るコンピュータシステム１０では、メッセージ格納資源１１５のメッセージは必ずメッセージログ１０９に出力するため、コンソール１１１に出力しなかったメッセージも事後的に確認可能である。これは、高速なＩ／Ｏが行えるメッセージログ１０９には必ず出力すると共に、Ｉ／Ｏ性能が低いコンソール１１１への出力を抑制することにより、コンソール１１１の切り離しや資源の追加なく、資源の枯渇を防止し、かつメッセージの事後確認を可能としている。その理由は、図４に示したメッセージ処理のＳ４０７及びＳ４１９において、資源解放前に、メッセージログ１０９にメッセージを出力しているからである。
【００７６】
（５  他の実施形態）
以下、他の実施形態について説明する。ここで、上記実施形態と同様の構成については同一の符号を付し、説明を省略する。また、上記実施形態と共通する作用効果についても、説明を省略している。
【００７７】
（５．１  第２の実施形態）
コンソールメッセージの中には、コンソール１１１を操作するオペレータの応答が必要なものもある。しかしながら、オペレータ応答が必要なメッセージの資源を解放したり、Ｉ／Ｏキュー２１０への登録を抑制したりすることによりコンソール１１１へ出力しなかった場合、オペレータが応答要求に気づかないことが考えられる。上記実施形態では、メッセージログ１０９により事後的に確認することは可能ではあるが、リアルタイムに応答することはできない。そこで、第２の実施形態では、オペレータ応答が必要なメッセージについては、メッセージ格納資源１１５の逼迫時であっても、その資源を解放せずにコンソール１１１に表示する。
そのために、第２の実施形態では、メッセージ格納資源１１５に応答フラグを追加する。以下、上記実施形態と相違する本実施形態の処理を中心に説明する。
【００７８】
アプリケーション１０１は、メッセージ送信要求時に、オペレータ応答が必要なメッセージであることを、メッセージ送信手段１０３に伝える。メッセージ送信手段１０３は、空き資源管理手段１１３を用いたメッセージ格納資源１１５の取得時に、オペレータ応答の要否を、応答フラグに設定する。メッセージ処理手段１０７は、図４のＳ４１５において、Ｉ／Ｏキュー２１０に登録されたメッセージ格納資源１１５のうち、応答フラグの値が「応答不要」のエントリ２１３のみを選択して、最もＩ／Ｏ完了に時間がかかると予測されるエントリ２１３を解放対象とする。ここで、Ｉ／Ｏ完了時間の予測には、キュー長測定手段２１７で測定したエントリ２１３の数を使用するのではなく、対象のエントリ２１３がＩ／Ｏキューの先頭から何番目であるかの値を使用する。
【００７９】
また、図４のＳ４０５のＩ／Ｏキューに登録済みの資源があるか否かの判定は、Ｉ／Ｏキュー２１０の全てのメッセージ格納資源１１５の応答フラグがオペレータ応答要の場合には、そのＩ／Ｏキュー２１０に解放できる資源が存在しないので、登録済みの資源なしと判定するように変更する。
【００８０】
更に、図４のＳ４０９において解放しようとしたメッセージ格納資源１１５の応答フラグが「オペレータ応答要」の場合、この資源を解放せず、図５に示すコンソール選択処理に進む。このとき、コンソール選択処理の終了後は、Ｓ４０９に処理を復帰させるようにする。
【００８１】
また、図５のＳ５１１において、「オペレータ応答要」のメッセージ格納資源１１５は、登録抑制の判定を行わず、Ｓ５０９に進んで資源をＩ／Ｏキュー２１０へ登録する。
【００８２】
このように実装することで、本実施形態によれば、メッセージ格納資源１１５の逼迫時であっても、オペレータ応答要のメッセージはコンソール１１１に表示されるので、オペレータはリアルタイムに応答することができるようになる。なぜならば、上述のように、オペレータ応答が必要なメッセージについては、資源解放と登録抑制の対象外としているためである。
【００８３】
（５．２  第３の実施形態）
以下、第３の実施形態について説明する。上述の通り、第２の実施形態では、メッセージ格納資源１１５の逼迫時に、オペレータ応答要のメッセージを、オペレータの存在如何に関わらずコンソール１１１に出力している。しかしながら、オペレータ不在のコンソール１１１は、即座に対応することはできないため、たとえオペレータ応答要のメッセージであっても、出力は必須ではないと考えることができる。そこで本実施形態では、オペレータ不在のＩ／Ｏ性能の低いコンソール１１１に対しては、メッセージ格納資源１１５の逼迫時には、メッセージを出力しないようにする。
【００８４】
第３の実施形態に係るコンピュータシステム１０の機能構成を図７に示す。図７に示すとおり、本実施形態では、図１に示したこれまで説明してきた実施形態の機能構成に対して、コンソール１１１に、オペレータ検知手段６０１（オペレータ検知手段６０１乃至６０１Ｎを総称して「オペレータ検知手段６０１」と呼ぶ。）を追加している。
【００８５】
ここで、オペレータ検知手段６０１は、対応するコンソール１１１のオペレータの存在の有無を確認（判定）するためのモジュールである。このオペレータの存在の検出方法としては、例えば以下のような方式が考えられる。
【００８６】
まず１つめの方式として、コンソール１１１が備えるキーボードやマウス等の入力装置からの入力信号を利用して判定する方法が考えられる。この場合、例えば、オペレータ検知手段６０１は、一定時間内にキーボード又はマウスからの入力信号の入力があった場合に、オペレータが存在すると判定することができる。一方、一定時間入力がなかった場合には、オペレータ検知手段６０１はオペレータ不在と判定する。
【００８７】
２つめの方式としては、コンソール１１１が表示するコンソール画面に排他的に押下可能な離席ボタンと着席ボタンとを設け手置き、オペレータ検知手段６０１は、着席ボタンが押下されている間はオペレータが存在するものとして判定する。一方、離席ボタンが押下されている間は、オペレータ検知手段６０１はオペレータ不在として判定する。
【００８８】
３つめの方式としては、コンソール１１１に備え付けられた椅子に圧力センサを設けることで、オペレータ検知手段６０１がオペレータの着席を検出できるようにする。一定時間内に一定以上の圧力を検出した場合には、オペレータ検知手段６０１はオペレータが存在するものと判定する。一方、一定時間内に一定以上の圧力を検出しなかった場合には、オペレータ検知手段６０１はオペレータ不在として判定する。
【００８９】
４つめの方式としては、オペレータの代わりに自動運転プログラムが動作する場合に対応させるべく、コンソール１１１に、自動運転開始と自動運転終了のプログラムインタフェースを設ける。オペレータ検知手段６０１は、自動運転プログラムが自動運転開始インタフェースを使用して自動運転開始を通知した場合は、オペレータが存在するものとして判定し、自動運転プログラムが自動運転終了インタフェースを使用して自動運転終了を通知した場合には、オペレータ不在と判定する。
本実施形態の処理の流れを、以下説明する。基本的には、上述の第２の実施形態と同様であるが、以下の点が異なる。
【００９０】
まず、図５のＳ５１１の処理において、処理対象としているＩ／Ｏキュー２１０のオペレータ検知手段６０１を使用して、オペレータの存在の有無を確認する。オペレータが存在する場合には、メッセージ格納資源１１５の登録抑制を判定せずにＳ５０９に進んでメッセージ格納資源１１５を当該Ｉ／Ｏキュー２１０に登録する。もしオペレータ不在の場合には、登録抑制の判定を行った上で、抑制不要であればＳ５０９の処理へ進み、抑制が必要であれば、Ｓ５０１へ進む。
【００９１】
このように実装することで、本実施形態に係るコンピュータシステム１０は、オペレータ不在のコンソール１１１がメッセージ格納資源１１５の解放を遅延させる原因にならずに、空き資源の回復を速やかにすることが可能となる。なぜならば、図５のＳ５１１におけるオペレータ検知手段６０１の使用により、オペレータ不在のＩ／Ｏ性能の低いコンソール１１１のＩ／Ｏキュー２１０にメッセージ格納資源１１５を登録しないため、当該コンソール１１１がボトルネックとなることなく、空き資源管理手段１１３が資源を滞り無く解放できるようになるためである。
【００９２】
（５．３  第４の実施形態）
上述の実施形態では、メッセージ格納資源１１５の逼迫時に、全てのＩ／Ｏキュー２１０のうち、最もＩ／Ｏ完了までに時間を要すると予測できるエントリ２１３を解放している。この点、第４の実施形態では、解放するエントリ２１３の他の選択方式について説明する。
以下に説明する本実施形態の方式では、第１の実施形態における、図４のＳ４１５の処理を以下のいずれかに変更してエントリ２１３を解放する。
【００９３】
（１）第１の方式としては、コンソール１１１に優先度を設ける方式が考えられる。この場合、エントリ２１３が存在するＩ／Ｏキュー２１０のうち、優先度が最も低いコンソール１１１のエントリ２１３を解放対象とする。例えば、優先度が５段階あり、最高優先度が１、最低優先度が５の場合、資源解放手段２１９は、優先度５の全てのコンソール１１１のＩ／Ｏキュー２１０のうち、最もＩ／Ｏ完了に時間のかかるエントリ２１３を解放する。優先度５のコンソール１１１に解放可能なエントリ２１３が存在しない場合には、優先度４のコンソール１１１からエントリ２１３を選択して解放する。同様に解放可能なエントリ２１３がない場合には、優先度１のコンソール１１１まで検索する。エントリ２１３の解放は、キュー外リンク領域３０３を辿り、同一資源を参照する全てのエントリ２１３を、資源解放手段２１９を使用して解放する。
このように実装することで、ユーザが優先度に応じて、資源逼迫時に出力を優先するコンソール１１１を設定できるようになる。
【００９４】
（２）第２の方式として、登録されたＩ／Ｏキュー２１０が最も少ないメッセージ格納資源１１５を解放することが考えられる。この場合、登録したＩ／Ｏキュー２１０の数は、メッセージ格納資源１１５のキュー外リンク領域３０３を辿ることで確認することができる。全てのＩ／Ｏキュー２１０とそのエントリ２１３について、登録したＩ／Ｏキュー２１０の数を調べることで、登録したＩ／Ｏキュー２１０が最も少ないエントリ２１３を決定することができる。エントリ２１３の解放は、キュー外リンク領域３０３を辿り、同一視源を参照する全てのエントリ２１３を、資源解放手段２１９を使用して解放する。
【００９５】
このように実装することで、資源解放に係る影響を受けるオペレータの数を最小にすることができる。なぜならば、ルーティングしたコンソール１１１の数が多いほど、資源解放による影響を受けるオペレータの数が多くなるが、この方式は、ルーティングしたコンソール１１１が少ない資源から解放するものだからである。
【００９６】
（３）オペレータ不在のコンソール１１１を、第２の実施形態で示したオペレータ検知手段６０１により明らかにした上で、オペレータ不在のコンソール１１１に対応するＩ／Ｏキュー２１０のうち、最もＩ／Ｏ完了までに時間のかかるエントリ２１３を選択して解放する。エントリ２１３の解放は、キュー外リンク領域３０３を辿り、同一のメッセージ格納資源１１５を参照する全てのエントリ２１３を、資源解放手段２１９を使用して解放する。
【００９７】
このように実装することで、本実施形態に係るコンピュータシステム１０は、オペレータ不在のコンソール１１１からメッセージ格納資源１１５を解放するので、オペレータが存在するコンソール１１１に、優先してメッセージを出力できる。尚、オペレータ不在のコンソール１１１については、メッセージログ１０９を事後確認すればよいため、コンソール１１１への出力は必須ではないと考えることができる。
【００９８】
（５．４  第５の実施形態）
以下、第５の実施形態について説明する。上述の各実施形態は、メッセージ格納資源１１５の枯渇を抑制する効果があるが、資源が枯渇した場合には、資源の取得に失敗してアプリケーション１０１がメッセージの送信に失敗してしまうことがあった。そこで、本実施形態のコンピュータシステム１０は、メッセージ格納資源１１５の枯渇時に、資源の優先取得を希望するアプリケーション１０１に資源の割り当てを行うようにしている。
【００９９】
本実施形態に係るコンピュータシステム１０の構成を、図８を参照しながら説明する。図８において、アプリケーション１０１Ｂは、資源枯渇時も、アプリケーション１０１よりも優先的にメッセージを送信することのできるアプリケーションである。図８に示すコンピュータシステム１０の、図１を参照しながら説明した第１の実施形態に係るコンピュータシステム１０との違いは、メッセージ格納資源１１５の枯渇時に、優先的に資源を取得してメッセージ送信を可能とするメッセージ優先送信手段１０３Ｂと、コンソール選択手段２０１からの資源割当通知と、割り当てられたメッセージ格納資源１１５を受け取るための優先通知セマフォ１０５Ｂとを追加した点である。
【０１００】
尚、アプリケーション１０１Ａ、メッセージ送信手段１０３Ａ、及び通知セマフォ１０５Ａは、それぞれ第１の実施形態のアプリケーション１０１、メッセージ送信手段１０３、及び通知セマフォ１０５に対応する。
以下、本実施形態に係るコンピュータシステム１０の処理の流れを、第１の実施形態との違いを中心に説明する。
【０１０１】
アプリケーション１０１Ａは、メッセージ優先送信手段１０３Ｂを使用して、任意のコンソール１１１へのメッセージ送信を要求する。メッセージ優先送信手段１０３Ｂは、空き資源管理手段１１３を使用して、メッセージ格納資源１１５を取得する。メッセージ格納資源１１５が取得できたあとの動作は、第１の実施形態のメッセージ送信手段１０３と同様である。
【０１０２】
メッセージ格納資源１１５が枯渇して取得できない場合には、優先通知セマフォ１０５Ｂに対して待ち合わせを行い、コンソール選択手段２０１からの資源割り当て通知と、割り当てられたメッセージ格納資源１１５とを受け取る。メッセージ格納資源１１５を受け取った後の動作は、第１の実施形態においてメッセージ送信手段１０３がメッセージ格納資源１１５が取得できた場合の処理と同様である。
【０１０３】
また、図４のＳ４０９及びＳ４１５の処理も、以下の通り相違する。まず、Ｓ４０９においては、優先通知セマフォ１０５Ｂを検査し、メッセージ優先送信手段１０３Ｂが資源の割り当てを待ち合わせていれば、解放する予定の資源を解放せず、優先通知セマフォ１０５Ｂを使用して、資源割り当て通知と共に、メッセージ優先送信手段１０３Ｂに送信する。資源の割り当てを待ち合わせていなければ、空き資源管理手段１１３を用いて資源を解放する。
【０１０４】
Ｓ４１５の処理については、解放するエントリ２１３を決定するまでの処理は、第１の実施形態と同様の処理である。若しくは、第４の実施形態の処理であっても良い。解放するエントリ２１３を決定した後は、優先通知セマフォ１０５Ｂを検査し、メッセージ優先送信手段１０３Ｂが資源の割り当てを待ち合わせていれば、解放するエントリ２１３のキュー外リンク領域３０３を辿り、同一資源を参照する全てのエントリ２１３を各Ｉ／Ｏキュー２１０のエントリ管理手段２１１から取り出して解放する。解放したエントリ２１３が参照していたメッセージ格納資源１１５は解放せず、優先通知セマフォ１０５Ｂを使用して、資源割り当て通知と共に、メッセージ優先送信手段１０３Ｂに送信する。
【０１０５】
メッセージ優先送信手段１０３Ｂが資源の割り当てを待ち合わせていなければ、解放するエントリ２１３のキュー外リンク領域３０３を辿り、同一資源を参照する全てのエントリ２１３を、各Ｉ／Ｏキュー２１０の資源解放手段２１９を使用して解放する。
【０１０６】
本実施形態によれば、メッセージ格納資源１１５の枯渇時に、アプリケーション１０１Ｂに優先的に資源を割り当て、アプリケーション１０１Ｂのメッセージ送信を保証できるようになる。なぜならば、図４のＳ４０９及びＳ４１５において、解放対象としたメッセージ格納資源１１５を空き資源管理手段１１３に戻すことなく、直接メッセージ優先送信手段１０３Ｂに割り当てるためである。
【０１０７】
（６  付記事項）
尚、前述の各実施形態の構成は、組み合わせたり或いは一部の構成部分を入れ替えたりしてもよい。また、本発明の構成は前述の実施形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加えてもよい。
尚、前述の各実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１０８】
（付記１）
複数のコンソール装置へ出力するためのメッセージの入力を受ける入力手段と、前記入力手段から入力された１以上のメッセージを一時記憶する一時記憶手段と、前記一時記憶手段に記憶されたメッセージを複数の前記コンソール装置へ出力するためのエントリが登録されるキューをそれぞれ管理する複数の管理手段と、前記キューにエントリが登録されたメッセージを前記コンソール装置へ出力する出力手段と、前記出力手段から前記コンソール装置へのメッセージの出力性能に応じて、複数の前記管理手段がそれぞれ管理する複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決める選択手段とを備える、情報処理装置。
【０１０９】
（付記２）
前記選択手段は、前記一時記憶手段の記憶容量が第１の閾値を下回った場合に、新たなメッセージに対応するエントリを登録する前記キューを決める、付記１記載の情報処理装置。
【０１１０】
（付記３）
前記出力手段から前記コンソール装置への出力完了前に、前記一時記憶手段からメッセージを削除可能な削除手段を更に備える、付記１又は付記２記載の情報処理装置。
【０１１１】
（付記４）
前記削除手段は、前記出力手段から前記コンソール装置へのメッセージの出力性能に応じて、前記一時記憶手段から当該メッセージを削除する、付記３記載の情報処理装置。
【０１１２】
（付記５）
前記一時記憶手段が記憶するメッセージを前記コンソール装置への出力完了前に前記削除手段が削除する場合に、削除するメッセージに関する情報を記録媒体に記録するログ記録手段を更に備える、付記３又は付記４記載の情報処理装置。
【０１１３】
（付記６）
前記削除手段は、前記一時記憶手段の記憶容量が第２の閾値を下回った場合に、前記一時記憶手段からメッセージを削除する、付記３乃至付記５のいずれか１項記載の情報処理装置。
【０１１４】
（付記７）
前記選択手段は、前記出力手段から前記コンソール装置へ出力すべきメッセージの登録件数と出力可能件数との比較に基づき、複数の前記管理手段がそれぞれ管理する複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決める、付記１乃至付記６のいずれか１項記載の情報処理装置。
【０１１５】
（付記８）
前記コンソール装置のオペレータの存在の有無を検知する検知手段を更に備え、前記選択手段は、オペレータが存在する前記コンソール装置に対応する前記キューを、新たなメッセージに対応するエントリを登録する前記キューとする、付記１乃至付記６のいずれか１項記載の情報処理装置。
【０１１６】
（付記９）
前記入力手段は、第１のアプリケーション及び前記第１のアプリケーションよりも優先度の高い第２のアプリケーションからメッセージの入力を受け、前記削除手段は、前記第２のアプリケーションからメッセージの一次記憶を要求された場合に、前記一次記憶手段からメッセージを削除して、前記第２のアプリケーションからのメッセージを格納する、付記３乃至付記７のいずれか１項記載の情報処理装置。
【０１１７】
（付記１０）
１以上のコンソール装置へ出力するためのメッセージの入力を受けるステップと、入力された１以上のメッセージを一時記憶する一時記憶装置に記憶するステップと、前記一時記憶装置に記憶されたメッセージを複数の前記コンソール装置へそれぞれ出力するためのエントリが登録される１以上のキューを管理するステップと、前記キューにエントリが登録されたメッセージを前記コンソール装置へ出力するステップと、前記コンソール装置へのメッセージの出力性能に応じて、複数の前記キューの中から、新たなメッセージに対応するエントリを登録する前記キューを決めるステップとを備える、情報処理方法。
【符号の説明】
【０１１８】
１０・・・コンピュータシステム、１０１・・・アプリケーションプログラム、１０３・・・メッセージ送信手段、１０５・・・通知セマフォ、１０７・・・メッセージ処理手段、１０９・・・メッセージログ、１１１・・・コンソール、１１３・・・空き資源管理手段、１１５・・・メッセージ格納資源、２０１・・・コンソール選択手段、２０３・・・メッセージ記録手段、２１０・・・Ｉ／Ｏキュー
【図１】
0005849772.tif 000002
【図２】
0005849772.tif 000003
【図３】
0005849772.tif 000004
【図４】
0005849772.tif 000005
【図５】
0005849772.tif 000006
【図６】
0005849772.tif 000007
【図７】
0005849772.tif 000008
【図８】
0005849772.tif 000009