(57)【要約】      （修正有）【課題】  仮想計算機オペレーティング・システム内で作業項目をディスパッチするシステム、記録媒体、方法を提供する。【解決手段】  第１の仮想計算機は、第１の作業項目を第１の作業待ち行列に割り当て、第２の作業項目を第２の作業待ち行列に割り当てる。第１の仮想計算機は、第１の仮想計算機による実行のために第１の作業待ち行列からの作業項目をスケジューリングする。第２の仮想計算機は、第３の作業項目を第１の作業待ち行列に割り当て、第４の作業項目を第２の作業待ち行列に割り当てる。第２の仮想計算機は、第２の仮想計算機による実行のために第２の作業待ち行列からの作業項目をスケジューリングする。第１の仮想計算機は第２の作業待ち行列からの作業項目をスケジューリングすることができず、第２の仮想計算機は第１の作業待ち行列からの作業項目をスケジューリングすることができない。共用メモリ内の共用作業待ち行列も開示する。【選択図】  図１
2004326755.tif 000002
【特許請求の範囲】
【請求項１】
メモリ内の第１の作業待ち行列と、
メモリ内の第２の作業待ち行列と、
第１の作業項目を前記第１の作業待ち行列に割り当て、第２の作業項目を前記第２の作業待ち行列に割り当てるための第１のプログラム機能を含み、第１の仮想計算機による実行のために前記第１の作業待ち行列からの作業項目をスケジューリングするための第２のプログラム機能を含む第１の仮想計算機であって、前記第１および第２の作業項目が前記第１の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第１のプログラム機能によって直接アクセス可能であり、前記第１の作業待ち行列が前記第２のプログラム機能によって直接アクセス可能である第１の仮想計算機と、
第３の作業項目を前記第１の作業待ち行列に割り当て、第４の作業項目を前記第２の作業待ち行列に割り当てるための第３のプログラム機能を含み、第２の仮想計算機による実行のために前記第２の作業待ち行列からの作業項目をスケジューリングするための第４のプログラム機能を含む第２の仮想計算機であって、前記第３および第４の作業項目が前記第２の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第３のプログラム機能によって直接アクセス可能であり、前記第２の作業待ち行列が前記第４のプログラム機能によって直接アクセス可能である第２の仮想計算機とを有し、
前記メモリが前記第１および第２の仮想計算機によって共用される、仮想計算機オペレーティング・システム。
【請求項２】
前記第２のプログラム機能が前記第２の作業待ち行列からの作業項目をスケジューリングすることができず、前記第４のプログラム機能が前記第１の作業待ち行列からの作業項目をスケジューリングすることができない、請求項１に記載の仮想計算機オペレーティング・システム。
【請求項３】
前記第２の仮想計算機が前記第１および第２のプログラム機能にアクセスできないように前記第１および第２のプログラム機能が前記第１の仮想計算機にとって専用のものであり、前記第１の仮想計算機が前記第３および第４のプログラム機能にアクセスできないように前記第３および第４のプログラム機能が前記第２の仮想計算機にとって専用のものである、請求項１に記載の仮想計算機オペレーティング・システム。
【請求項４】
前記共用メモリ内の第３の作業待ち行列をさらに有し、前記第１のプログラム機能が前記第１の仮想計算機から発生した第５の作業項目を前記第３の作業待ち行列に割り当て、前記第３のプログラム機能が前記第２の仮想計算機から発生する第６の作業項目を前記第３の作業待ち行列に割り当て、前記第２のプログラム機能が前記第３の作業待ち行列に直接アクセスし、前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングすることができ、前記第４のプログラム機能が前記第３の作業待ち行列に直接アクセスし、前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングすることができる、請求項１に記載の仮想計算機オペレーティング・システム。
【請求項５】
前記共用メモリ内のロック・データ構造と、
前記第１の仮想計算機内の第５の機能であって、前記第１の仮想計算機が、（ａ）前記第１の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第１の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第１の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第５の機能と、
前記第２の仮想計算機内の第６の機能であって、前記第２の仮想計算機が、（ａ）前記第２の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第２の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第２の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第６の機能とをさらに有する、請求項４に記載の仮想計算機オペレーティング・システム。
【請求項６】
仮想計算機オペレーティング・システム内で作業項目をディスパッチするための方法において、前記仮想計算機オペレーティング・システムが第１および第２の仮想計算機を定義し、前記方法が、
メモリ内の第１の作業待ち行列を作成するステップと、
メモリ内の第２の作業待ち行列を作成するステップと、
前記第１の仮想計算機が第１の作業項目を前記第１の作業待ち行列に割り当て、第２の作業項目を前記第２の作業待ち行列に割り当て、前記第１の仮想計算機による実行のために前記第１の作業待ち行列からの作業項目をスケジューリングするステップであって、前記第１および第２の作業項目が前記第１の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第１の仮想計算機によって直接アクセス可能であるステップと、
前記第２の仮想計算機が第３の作業項目を前記第１の作業待ち行列に割り当て、第４の作業項目を前記第２の作業待ち行列に割り当て、前記第２の仮想計算機による実行のために前記第２の作業待ち行列からの作業項目をスケジューリングするステップであって、前記第３および第４の作業項目が前記第２の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第２の仮想計算機によって直接アクセス可能であるステップとを有する方法。
【請求項７】
前記第１の仮想計算機が前記第２の作業待ち行列からの作業項目をスケジューリングすることができず、前記第２の仮想計算機が前記第１の作業待ち行列からの作業項目をスケジューリングすることができない、請求項６に記載の方法。
【請求項８】
前記第１の仮想計算機によって実行される前記割当ておよびスケジューリング・ステップが、前記第１の仮想計算機にとって専用のそれぞれの第１の割当て機能と第１のスケジューリング機能によって実行され、前記第２の仮想計算機が前記第１の割当て機能または前記第１のスケジューリング機能にアクセスできず、前記第２の仮想計算機によって実行される前記割当ておよびスケジューリング・ステップが、前記第２の仮想計算機にとって専用のそれぞれの第２の割当て機能と第２のスケジューリング機能によって実行され、前記第１の仮想計算機が前記第２の割当て機能または前記第２のスケジューリング機能にアクセスできない、請求項６に記載の方法。
【請求項９】
前記メモリ内の第３の作業待ち行列を作成するステップと、
前記第１の仮想計算機が前記第１の仮想計算機から発生した第５の作業項目を前記第３の作業待ち行列に割り当てるステップと、
前記第２の仮想計算機が前記第２の仮想計算機から発生する第６の作業項目を前記第３の作業待ち行列に割り当てるステップと、
前記第１の仮想計算機が前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングするステップと、
前記第２の仮想計算機が前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングするステップとをさらに有する、請求項６に記載の方法。
【請求項１０】
前記メモリ内のロック・データ構造を作成するステップと、
前記第１の仮想計算機が、（ａ）前記第１の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第１の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第１の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記第１の仮想計算機が前記ロック・データ構造を更新するステップと、
前記第２の仮想計算機が、（ａ）前記第２の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第２の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第２の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記第２の仮想計算機が前記ロック・データ構造を更新するステップとをさらに有する、請求項９に記載の方法。
【請求項１１】
仮想計算機オペレーティング・システム内で作業項目をディスパッチするためのコンピュータ・プログラム記録媒体において、前記仮想計算機オペレーティング・システムが第１および第２の仮想計算機を定義し、前記コンピュータ・プログラム記録媒体が、
コンピュータ可読媒体と、
第１の作業項目をメモリ内の第１の作業待ち行列に割り当て、第２の作業項目を前記メモリ内の第２の作業待ち行列に割り当てるために前記第１の仮想計算機内で実行される第１のプログラム命令であって、前記第１および第２の作業項目が前記第１の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第１のプログラム命令によって直接アクセス可能である第１のプログラム命令と、
前記第１の仮想計算機による実行のために前記第１の作業待ち行列からの作業項目をスケジューリングするための第２のプログラム命令であって、前記第１の作業待ち行列が前記第２のプログラム命令によって直接アクセス可能である第２のプログラム命令と、
第３の作業項目をメモリ内の前記第１の作業待ち行列に割り当て、第４の作業項目を前記メモリ内の第２の作業待ち行列に割り当てるために前記第２の仮想計算機内で実行される第３のプログラム命令であって、前記第３および第４の作業項目が前記第２の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第３のプログラム命令によって直接アクセス可能である第３のプログラム命令と、
前記第２の仮想計算機による実行のために前記第２の作業待ち行列からの作業項目をスケジューリングするための第４のプログラム命令であって、前記第２の作業待ち行列が前記第４のプログラム命令によって直接アクセス可能である第４のプログラム命令とを有し、
前記第１、第２、第３、および第４のプログラム命令が前記媒体上に記録される、コンピュータ・プログラム記録媒体。
【請求項１２】
前記第２のプログラム命令が前記第２の作業待ち行列からの作業項目をスケジューリングすることができず、前記第４のプログラム命令が前記第１の作業待ち行列からの作業項目をスケジューリングすることができない、請求項１１に記載のコンピュータ・プログラム記録媒体。
【請求項１３】
第１および第２の仮想計算機を定義する仮想計算機オペレーティング・システムにおいて、前記仮想計算機オペレーティング・システムが、
メモリ内の作業待ち行列を有し、
前記第１の仮想計算機が、第１の作業項目を前記作業待ち行列に割り当てるための第１のプログラム機能を含み、前記第１の仮想計算機による実行のために前記第１および第２の仮想計算機から発生する作業項目を前記作業待ち行列からスケジューリングするための第２のプログラム機能を含み、前記第１の作業項目が前記第１の仮想計算機から発生し、前記作業待ち行列が前記第１および第２のプログラム機能によって直接アクセス可能であり、
前記第２の仮想計算機が、第２の作業項目を前記作業待ち行列に割り当てるための第３のプログラム機能を含み、前記第２の仮想計算機による実行のために前記第１および第２の仮想計算機から発生する作業項目を前記作業待ち行列からスケジューリングするための第４のプログラム機能を含み、前記第２の作業項目が前記第２の仮想計算機から発生し、前記作業待ち行列が前記第３および第４のプログラム機能によって直接アクセス可能であり、
前記メモリが前記第１および第２の仮想計算機によって共用される、仮想計算機オペレーティング・システム。
【請求項１４】
前記第２の仮想計算機が前記第１および第２のプログラム機能にアクセスできないように前記第１および第２のプログラム機能が前記第１の仮想計算機にとって専用のものであり、前記第１の仮想計算機が前記第３および第４のプログラム機能にアクセスできないように前記第３および第４のプログラム機能が前記第２の仮想計算機にとって専用のものである、請求項１３に記載の仮想計算機オペレーティング・システム。
【請求項１５】
前記メモリ内のロック・データ構造と、
前記第１の仮想計算機内の第５の機能であって、前記第１の仮想計算機が、（ａ）前記第１の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第１の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第１の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第５の機能と、
前記第２の仮想計算機内の第６の機能であって、前記第２の仮想計算機が、（ａ）前記第２の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第２の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第２の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第６の機能とをさらに有する、請求項１３に記載の仮想計算機オペレーティング・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ・システムに関し、より詳細には、仮想計算機オペレーティング・システムにおけるディスパッチ機能に対処する。
【背景技術】
【０００２】
仮想計算機オペレーティング・システムは、現在では周知のものであり、共通基本部分と、共通基本部分によって形成される個別ユーザ部分とを含む。ＩＢＭのｚ／ＶＭオペレーティング・システムでは、共通基本部分は「制御プログラム」または「ＣＰ」と呼ばれ、各ユーザ部分は「仮想計算機」または「ゲスト」と呼ばれている。仮想計算機またはゲストは、実メモリ、ＣＰＵ、入出力などの実リソースの仮想共用／パーティション化である。ゲスト・オペレーティング・システムは各仮想計算機上で実行され／動作し、１つまたは複数のアプリケーションがゲスト・オペレーティング・システム上で動作する。各アプリケーションおよびゲスト・オペレーティング・システムは、それ自体の専用の実コンピュータ上で動作している場合と同様の挙動を示す。
【０００３】
各仮想計算機は、その同期機能と、作業待ち行列割当て機能と、作業スケジューラと、仮想計算機によって割り当てられた作業項目またはタスクおよび仮想計算機に割り当てられた作業項目またはタスクの関連作業待ち行列からなる、それ自体のディスパッチ機能を有する。同期機能、作業待ち行列割当て機能、作業スケジューラ、作業待ち行列はいずれもその仮想計算機にとって専用のものである。同期機能は、どのタスクが順次動作しなければならないかならびにどのタスクが並列動作可能であるかを制御するために、ロックを管理する。作業待ち行列割当て機能は、仮想計算機内のプログラム機能であって、仮想計算機によって生成されたときに仮想計算機の作業待ち行列に作業項目を追加するものである。待ち行列上の各作業項目は、そのタイプを示す情報、したがって、仮想計算機内のどの機能がそれを処理するために最も適しているかを示す情報を含む。「作業スケジューラ」は、実行のためにその待ち行列上の各作業項目をスケジューリングし、実行のために仮想計算機内の適切な機能にそれを渡すプログラム機能である。作業項目をスケジューリングするための既知のアルゴリズムは数多く存在する。これは、各タスクに割り当てられた優先順位レベルや、作業項目が待ち行列に到達した順序などの様々な要因に基づくものである可能性がある。作業項目の一部はゲスト・オペレーティング・システムから発生し、他の作業項目はゲスト・オペレーティング・システム上で動作するアプリケーション（複数も可）から発生する。
【０００４】
仮想計算機がアイドル状態になることは、仮想計算機および実コンピュータ・リソースの関連パーティションの無駄遣いである。これは、関連作業待ち行列上に作業項目がまったくなく、現行作業項目が完了したときに発生する可能性がある。上記のディスパッチ機能はタスクを割り当ててディスパッチする際に有効であるが、異なる仮想計算機間で負荷およびスキルのバランスを最適にするように複数の仮想計算機のディスパッチ機能を管理することが望ましいだろう。
【０００５】
また、他の「作業用」仮想計算機用の共用作業待ち行列に対して「ホスティング」するためにサーバ仮想計算機を使用できることも分かっている。共用作業待ち行列は、サーバ仮想計算機にとって専用のメモリ内に常駐する。作業用仮想計算機が新しい作業項目を作成し、この作業用仮想計算機用の作業待ち行列割当て機能がこの新しい作業項目をサーバ仮想計算機に送信することを決定すると、この作業用仮想計算機は通信プロトコル（たとえば、ＴＣＰ／ＩＰ）を使用して、その作業項目をこのサーバ仮想計算機に送信する。次にサーバ仮想計算機は、サーバ仮想計算機が決定した順序で新しい作業項目を共用作業待ち行列上に置く。作業用仮想計算機内の作業スケジューラが共用作業待ち行列上の作業項目を実行したいと希望する場合、その作業スケジューラは通信プロトコルを使用して、サーバ仮想計算機に対してその要求を行う。応答として、サーバ仮想計算機は通信プロトコルを使用して、その要求を行った作業用仮想計算機に作業項目を送信する。この配置は共用作業待ち行列を提供するが、作業待ち行列への作業項目の送信と、作業待ち行列からの作業項目の入手のいずれのためにも、高オーバヘッドの通信プロトコルを必要とする。加えて、この配置は、共用作業待ち行列を管理するために余分な仮想計算機を必要とする。さらに、サーバ仮想計算機は、作業用仮想計算機をモニターし、どの作業用仮想計算機が最も迅速にその作業項目を処理できるようになるかを推定することにより、作業用仮想計算機間の負荷のバランスを取ろうと試みる。作業用仮想計算機が動的に追加および／または削除されると、サーバ仮想計算機は、作業用仮想計算機間の負荷のバランスを取り直すことができなければならない。さらに、サーバ仮想計算機は、その専用同期機能が決定するように作業項目の同期を取らなければならない。これらのサーバ仮想計算機の機能はいずれも、サーバ仮想計算機と作業用仮想計算機との間の相当な通信を必要とする。
【非特許文献１】ＩＢＭ資料「z/VM4.2.0 General Information」（文書番号：ＧＣ２４−５９９１−０３）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
したがって、本発明の一目的は、異なる仮想計算機間の作業負荷および／またはスキルのバランスを効果的に取る、仮想計算機オペレーティング・システム内の機能性を提供することにある。
【０００７】
本発明の他の目的は、ディスパッチおよびその他の機能を管理するために必要なオーバヘッドを最小限にする、上記のタイプの仮想計算機オペレーティング・システム内の機能性を提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、仮想計算機オペレーティング・システム内で作業項目をディスパッチするためのシステム、コンピュータ・プログラム記録媒体、および方法にある。仮想計算機オペレーティング・システムは第１および第２の仮想計算機を定義する。第１および第２の作業待ち行列はメモリ内に作成される。第１の仮想計算機は、第１の作業項目を第１の作業待ち行列に割り当て、第２の作業項目を第２の作業待ち行列に割り当てる。第１の仮想計算機は、第１の仮想計算機による実行のために第１の作業待ち行列からの作業項目をスケジューリングする。第１および第２の作業項目は第１の仮想計算機から発生する。第１および第２の作業待ち行列は、第１の仮想計算機によって直接アクセス可能である。第２の仮想計算機は、第３の作業項目を第１の作業待ち行列に割り当て、第４の作業項目を第２の作業待ち行列に割り当てる。第２の仮想計算機は、第２の仮想計算機による実行のために第２の作業待ち行列からの作業項目をスケジューリングする。第３および第４の作業項目は第２の仮想計算機から発生する。第１および第２の作業待ち行列は、第２の仮想計算機によって直接アクセス可能である。
【０００９】
本発明の１つの特徴によれば、第１の仮想計算機は第２の作業待ち行列からの作業項目をスケジューリングすることができず、第２の仮想計算機は第１の作業待ち行列からの作業項目をスケジューリングすることができない。
【００１０】
また、本発明は、第１および第２の仮想計算機を定義する仮想計算機オペレーティング・システムにもある。この仮想計算機オペレーティング・システムはメモリ内の共用作業待ち行列を有する。第１の仮想計算機は、第１の作業項目を共用作業待ち行列に割り当てるための第１のプログラム機能を含む。第１の仮想計算機は、第１の仮想計算機による実行のために第１および第２の仮想計算機から発生する作業項目を共用作業待ち行列からスケジューリングするための第２のプログラム機能を含む。第１の作業項目は第１の仮想計算機から発生する。共用作業待ち行列は、第１および第２のプログラム機能によって直接アクセス可能である。第２の仮想計算機は、第３の作業項目を作業待ち行列に割り当てるための第３のプログラム機能を含む。第２の仮想計算機は、第２の仮想計算機による実行のために第１および第２の仮想計算機から発生する作業項目を共用作業待ち行列からスケジューリングするための第４のプログラム機能を含む。第２の作業項目は第２の仮想計算機から発生する。共用作業待ち行列は、第３および第４のプログラム機能によって直接アクセス可能である。メモリは、第１および第２の仮想計算機によって共用される。
【発明を実施するための最良の形態】
【００１１】
次に、全体を通して同様の参照番号が同様の要素を示す図面を詳細に参照すると、図１は、全体が１０で示されるコンピュータ・システムを示している。コンピュータ・システム１０は、物理的コンピュータ２０（ＣＰＵ２３を含む）と、仮想計算機オペレーティング・システム１１とを含む。一例として、仮想計算機オペレーティング・システムは、本発明を含むように修正されたＩＢＭのｚ／ＶＭバージョン４．２．０または４．３．０にすることができる。ｚ／ＶＭ４．２．０の詳細は、PO Box 29570, IBM Publications, Raleigh, North Carolina 27626-0570にあるInternational Business Machines Corp.からまたはwww.IBM.com/shop/publications/orderにあるＷＷＷで入手可能なＩＢＭ資料「z/VM 4.2.0 GeneralInformation」（文書番号：ＧＣ２４−５９９１−０３）に開示されている。この資料は、本開示の一部として参照により本書に組み込まれる。本発明は他のサーバ・コンピュータまたはパーソナル・コンピュータでも実現可能であるが、オペレーティング・システム１１はＩＢＭのｚＳｅｒｉｅｓメインフレームなどの物理的コンピュータ１０で実行される。オペレーティング・システム１１は、共通基本部分２１（ｚ／ＶＭオペレーティング・システムでは「ＣＰ」と呼ぶ）を含む。共通基本部分２１は、物理的コンピュータのリソース（ＣＰＵおよびメモリを含む）をロジカル・パーティション化して、ユーザ部分１２、１４、１６（ｚ／ＶＭオペレーティング・システムでは「仮想計算機」または「ゲスト仮想計算機」と呼ぶ）を形成する。また、共通基本部分は、メモリの仮想化、デバイスの仮想化、ＣＰＵの仮想化などの機能も実行する。ゲスト・オペレーティング・システム２２、２４、２６は、ユーザ部分１２、１４、１６上でそれぞれ実行され、アプリケーション３２、３４、３６は、ゲスト・オペレーティング・システム２２、２４、２６上でそれぞれ実行される。各オペレーティング・システム上では複数のアプリケーションが実行されている可能性がある。一例として、ゲスト・オペレーティング・システム２２および２４はＬｉｎｕｘ（Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓの商標）オペレーティング・システムであり、オペレーティング・システム２６はＩＢＭのＣＭＳオペレーティング・システムである。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティング・システム、Ｕｎｉｘ（登録商標）オペレーティング・システム、Ｓｕｎ  ＭｉｃｒｏｓｙｓｔｅｍｓのＳｏｌａｒｉｓ（登録商標）オペレーティング・システム、またはＨｅｗｌｅｔｔ  ＰａｃｋａｒｄのＨＰ  ＵＸオペレーティング・システムなど、ユーザ部分で実行中の他のゲスト・オペレーティング・システムも実現可能である。一例として、アプリケーション３２、３４、３６は、ＩＢＭのＤＢ２データベース管理アプリケーション、ＩＢＭのＷｅｂＳｐｈｅｒｅアプリケーション、通信アプリケーションなどにすることができる。アプリケーション３２、３４、３６は作業項目を生成する可能性があることを除いては、そのアプリケーションの性質は本発明の一部を形成するものではない。
【００１２】
各仮想計算機は、その専用データ、アプリケーション、それぞれ仮想計算機１２、１４、１６内の作業待ち行列割当て機能６２、６４、６６（「ＷＱＡＦ」）および作業スケジューラ４２、４４、４６などのオペレーティング・システム機能のために、それ自体の専用メモリを有する。その結果として、各仮想計算機には、個別の物理的コンピュータ内のように他の仮想パーティションからのプライバシの基準が与えられる。また、仮想計算機間のロジカル・パーティションは、仮想ＣＰＵと他の仮想デバイスを各仮想計算機に割り振ることによって提供される。「仮想ＣＰＵ」は実ＣＰＵ（複数も可）の一部分であって、ゲスト・オペレーティング・システムにとってそれ自体のＣＰＵのように見える部分である。以下により詳細に説明するように、各ＷＱＡＦは、その割当てアルゴリズムに基づいてそれ自体の仮想計算機が作成した各作業項目を共用メモリ内の作業待ち行列５２、５４、または５６に割り当てる。この割当てアルゴリズムは、どの仮想計算機が所与のタイプの作業項目などを処理するように特に適合されているかなどの作業負荷バランスに基づくものである可能性がある。また、各ＷＱＡＦは、後述するように、各仮想計算機の状況をモニターし、その状況を「アイドル」または「非アイドル」として更新する。各スケジューラは、そのスケジューリング・アルゴリズムに応じて、その公称作業待ち行列上の作業項目の実行をスケジューリングする。このスケジューリング・アルゴリズムは、作業項目に割り当てられた優先順位レベル、作業項目が作業待ち行列に割り当てられた時間などに基づくものである可能性がある。
【００１３】
コンピュータ１０は、すべての仮想計算機１２、１４、１６によって共用されるメモリ領域２５も含む。「共用」されているので、各仮想計算機は、共用メモリ２５と、適切なアドレスによって共用メモリに記憶されたデータおよびデータ構造に直接アクセスすることができる。本発明によれば、ＷＱＡＦ６２、６４、６６およびそれぞれのスケジューラ４２、４４、４６に関する作業待ち行列５２、５４、５６は共用メモリ内に位置する（ただし、ＷＱＡＦとスケジューラはいずれもそれぞれの仮想計算機の専用メモリ内にある）。その結果として、各ＷＱＡＦは、いずれかの作業待ち行列に作業項目を追加するためにすべての作業待ち行列にアクセスすることができる。本発明の第１の実施形態では、各スケジューラは、その「半専用」作業待ち行列、すなわち、仮想計算機１２およびスケジューラ４２に関する作業待ち行列５２、仮想計算機１４およびスケジューラ４４に関する作業待ち行列５４、仮想計算機１６およびスケジューラ４６に関する作業待ち行列５６から作業項目を除去するためだけにプログラミングされる。それぞれの仮想計算機内のスケジューラのみがそれから作業項目を除去するが、どのＷＱＡＦでもそれに作業項目を追加することができるので、このような作業待ち行列のそれぞれは本発明の第１の実施形態では「半専用」になっている。（しかし、本発明の他の実施形態では、各スケジューラは、その半専用作業待ち行列が空であるときに他の半専用作業待ち行列にアクセスして作業項目を除去するようにプログラミングすることができる。）図１に示す状態では、作業待ち行列５２はＷＱＡＦ６４のアクションによって仮想計算機１４から獲得された１つの作業項目７０を有し、作業待ち行列５４は空であり、作業待ち行列５６は３つの作業項目７２、７４、７６を有する。作業項目７２はＷＱＡＦ６２のアクションによって仮想計算機１２から獲得されたものである。図示していないが、作業項目７４および７６は、ＷＱＡＦ６４のアクションによって仮想計算機１４から獲得されたものである。また、図１に示す状態では、仮想計算機１２はスケジューラ４２のアクションによって作業待ち行列５２から作業項目７０を獲得し、仮想計算機１６はスケジューラ４６のアクションによって作業待ち行列５６から作業項目７６を獲得している。制御ブロック５８は、仮想計算機の現在の状態、すなわち、「アイドル」または「非アイドル」と、各作業待ち行列からの作業項目のうち、次にスケジューリングすべきものがあれば、どの作業項目であるかを示している。図１に示す状態では、仮想計算機１２はアイドル状態であり、スケジューラ４２内のその作業待ち行列ポインタは作業項目７０を指し示している。仮想計算機１２が作業項目７０を獲得した後、（その間に１つも追加されていない限り）作業待ち行列５２には作業項目がまったく残らなくなるので、その作業待ち行列ポインタは「ヌル」になる。また、図１に示す状態では、仮想計算機１４はアイドル状態であり、作業待ち行列５４には現在、作業項目がまったくないので、スケジューラ４４内のその作業待ち行列ポインタは「ヌル」を示している。また、図１に示す状態では、仮想計算機１６は「非アイドル」状態であり、作業待ち行列の１つから前に獲得した作業項目を現在実行中である。仮想計算機１６内のスケジューラ６６の作業待ち行列ポインタは、現在、作業項目７６を示しており、したがって、この作業項目は仮想計算機１６による実行のためにスケジューラ４６によって除去されていない。
【００１４】
図２は、仮想計算機の各ＷＱＡＦおよび関連操作を示している。仮想計算機は、データの読取りまたは書込み、アプリケーションの実行、アプリケーションに対する要求の作成などの作業項目を作成する（ステップ１００）。作業項目は、ゲスト・オペレーティング・システムまたはゲスト・オペレーティング・システム上で動作するアプリケーションによって開始し、処理のためにゲスト・オペレーティング・システムに渡すことができる。次に、ＷＱＡＦは、半専用作業待ち行列５２、５４、５６のうちの１つに作業項目を割り当てるべきかまたは後述する共用作業待ち行列８０に作業項目を割り当てるべきかを判定する。この判断はＷＱＡＦ内の割当て機能に基づくものであり、共用作業待ち行列に作業項目を割り当てるという決定は、通常、負荷バランスのために行われる。ＷＱＡＦは半専用作業待ち行列５２、５４、５６のうちの１つにこの作業項目を割り当てることを決定するものと想定する（判断１０１）。次に、その作業項目を作成した仮想計算機内のＷＱＡＦ（たとえば、仮想計算機１２内のＷＱＡＦ）は、ＷＱＡＦ内の割当てアルゴリズムが決定した作業待ち行列に作業項目を割り当てる（ステップ１０２）。また、ＷＱＡＦは、作業待ち行列内のどの位置に新しい作業項目を挿入すべきかを決定する。割当てアルゴリズムが単純に先入れ先出し方式である場合、ＷＱＡＦは作業待ち行列の末尾にそれぞれの新しい作業項目を割り当て、したがって、それは最後に除去すべきものになる。割当てアルゴリズムが優先順位レベルに基づくものである場合、ＷＱＡＦは、優先順位が低い他の作業項目の前であって、優先順位が同じ（作業項目が失効するのを防止するため）かまたは優先順位が高い作業項目の後の作業待ち行列内の位置にそれぞれの新しい作業項目を割り当てる。図１に示す例では、ＷＱＡＦ６２は仮想計算機１６用の作業待ち行列５６に作業項目を割り当てる。この特定の割当ては負荷バランスに基づくものではない。というのは、仮想計算機１４は、現在、アイドル状態であり、その作業待ち行列５４は、現在、空であるのに対し、仮想計算機１６は、現在、アイドル状態ではなく、その作業待ち行列５６は作業項目７２を追加する前に他に２つの作業項目を有しているからである。むしろ、この特定の割当ては、仮想計算機１２または１４では見つけられない能力である、このタイプの作業項目を処理するための仮想計算機１６の特殊能力に基づくものである。また、ＷＱＡＦ６２は制御ブロック５８を読み取って、仮想計算機１６が、現在、アイドル状態であるかどうかも判定する（判断１０４）。アイドル状態ではない場合、すなわち、仮想計算機１６が、現在、使用中である場合、ＷＱＡＦ６２は仮想計算機１６に対する割込みを行わず、この作業項目に関するその処理を終了する（ステップ１０６）。もう一度、判断１０４を参照すると、仮想計算機１６が、現在、アイドル状態である場合、ＷＱＡＦ６２は仮想計算機１６に対する割込みを発行し（ステップ１０８）、この作業項目に関するその処理を終了する（ステップ１１０）。この割込みは、スケジューラ４６を呼び出して作業項目の有無について作業待ち行列５６（または共用作業待ち行列８０）をチェックするように、仮想計算機１６に警告することになる。
【００１５】
図３は、各仮想計算機の作業スケジューラおよびその仮想計算機の関連操作を示している。ステップ２００では、仮想計算機のスケジューラ（たとえば、仮想計算機１２のスケジューラ４２）を呼び出す。この呼出しは、現行作業の完了後または仮想計算機が休止状態であるときは割込みの受信後に仮想計算機内の仮想プロセッサによって開始される。スケジューラはまず、その半専用作業待ち行列または後述する共用作業待ち行列８０から作業項目をフェッチするべきかどうかを判断する。例証のため、スケジューラはその半専用作業待ち行列から作業項目をフェッチすることを決定するものと想定する（ステップ２０１）。次に、スケジューラ４２は制御ブロック５８をチェックして、仮想計算機１２用の作業待ち行列５２上に１つの作業項目または１つの作業項目グループが存在するかどうかを判定する（判断２０２）。作業待ち行列上に１つの作業項目グループが存在する場合、制御ブロック内のポインタは、どの作業項目が次にスケジューリングすべき作業項目であるかを示す。作業待ち行列内のどの作業項目を次にスケジューリングすべきかという判定は、それらが作業待ち行列上に現れる順序によって決定される。その作業項目を作成した仮想計算機のＷＱＡＦは、作業待ち行列内のどこにその作業項目を配置すべきかを決定する。また、このＷＱＡＦは、どの作業待ち行列上にその作業項目を配置すべきかも決定している。作業待ち行列が空ではない場合（作業待ち行列５２に関して図１に示したケースである）、その仮想計算機には「非アイドル」のマークが付けられ（ステップ２０３）、スケジューラ４２は制御ブロック内のポインタが示す待ち行列からその作業項目を除去する（ステップ２０４）。図１に示す例では、ポインタは作業項目７０を指し示している。次に、スケジューラ４２はその作業項目を解析して、その性質と、仮想計算機１２内でどの機能を呼び出してその作業項目を実行すべきかを決定する。作業項目７０の除去後、（新しい作業項目がごく最近、追加されていない限り）作業待ち行列５２は空になり、したがって、作業待ち行列５２に関するポインタは「ヌル」を示すことになる。次に、受信側機能はその作業項目を実行する（ステップ２０６）。作業項目の完了後（ステップ２０８）、制御をスケジューラに返して、ステップ２００、２０１、２０２を繰り返す。
【００１６】
もう一度、判断２０２を参照すると、作業項目７０の完了後（または図１に示す状態の作業待ち行列５４のケース）など、スケジューラの待ち行列上に作業項目がまったくない場合、スケジューラは、「アイドル」を示すようにこの仮想計算機用の制御ブロックを更新する（ステップ２１２）。次に、仮想計算機は待ち／スリープ中または「休止」状態になり、その場合、仮想計算機は割込みを受信できる状態になっているが、いかなる作業項目も実行しない（ステップ２１４）。その後、仮想計算機は割込みを受信して、それが実行すべきタスクを持っていることを仮想計算機に警告するものと想定する（判断２１６）。応答として、仮想計算機はスケジューラを呼び出して、その作業待ち行列をチェックすることになる（ステップ２００）。
【００１７】
図１〜図３に示す本発明の上記の実施形態では、各仮想計算機のＷＱＡＦは、それ自体の仮想計算機の１つの作業項目を作業待ち行列５２、５４、５６のうちのいずれかに割り当てることができる。本発明の上記の実施形態では、各仮想計算機のスケジューラは、それ自体の作業待ち行列のみから作業項目を除去する。しかし、本発明の他の実施形態では、それ自体のディスパッチ・アルゴリズムに基づいて作業待ち行列５２、５４、５６のうちのいずれかから作業項目を除去する自由をスケジューラに与えることができる。たとえば、半専用作業待ち行列（たとえば、仮想計算機１４のスケジューラ４４用の作業待ち行列５４）が空である場合、スケジューラ（この例ではスケジューラ４４）は、他の作業待ち行列（この例では作業待ち行列５２または５６）から作業項目を除去して、その仮想計算機の処理能力を完全に利用することを選択することができ、したがって、その仮想計算機はアイドル状態のままにならない。別法として、スケジューラの半専用作業待ち行列が空である場合、スケジューラは、後述する共用作業待ち行列から作業項目を除去しようと試みることができる。
【００１８】
図４は、本発明によるコンピュータ・システム１０の他の特徴を示している。半専用作業待ち行列５２、５４、５６の代わりにまたはそれらに加えて、共用作業待ち行列８０が共用メモリ２５に記憶されている。制御ブロック５８は、共用作業待ち行列に作業項目を追加するためおよび共用作業待ち行列から作業項目を除去するために許可／登録された仮想計算機のリストを含んでいる。この許可は、様々な基準に基づいて基本部分２１によって施行することができる。たとえば、この許可は、１つの作業待ち行列を他の仮想計算機と共用するために各仮想計算機によって行われる要求に基づくものにすることができる。すべての仮想計算機が同意した場合、それらはいずれも作業待ち行列を共用することが許可される。別法として、いずれかの仮想計算機が既存の共用作業待ち行列に加わることを要求した場合、それは共用メモリへのアクセス権を有する場合に許可されることになる。いずれの場合も、共用作業待ち行列を共用したいと希望するすべての仮想計算機は、共用作業待ち行列への直接アクセスを必要とする。図示の例では、仮想計算機１２、１４、１６はいずれも共用作業待ち行列にアクセスすることが許可され、この許可は制御ブロックに登録される。したがって、各ＷＱＡＦ６２、６４、６６は共用作業待ち行列８０に作業項目を追加することができ、各スケジューラ４２、４４、４６は共用作業待ち行列から作業項目を除去することが許可される。作業待ち行列５２、５４、５６も存在する場合、各ＷＱＡＦは、それ自体の割当てアルゴリズムに応じて、それ自体の仮想計算機から発生する作業項目を作業待ち行列５２、５４、５６、８０のうちのいずれかに割り当てるべきかどうかを選択することができる。また、各ＷＱＡＦは、先入れ先出し方式などのそれ自体の割当てアルゴリズムに基づくかまたは作業項目の優先順位レベルに基づいて、共用作業待ち行列内のどこにその新しい作業項目を挿入すべきかも決定する。同様に、各スケジューラは、そのディスパッチ・アルゴリズムに応じて、それ自体の作業待ち行列から作業項目を除去すべきかまたは共用作業待ち行列から作業項目を除去すべきかを選択することができる。また、各許可／登録仮想計算機の隣には、「アイドル」または「非アイドル」というその状況に関する表示も存在する。また、制御ブロック５８は、どの作業要素がスケジューラによっていずれかの許可／登録仮想計算機から次に除去すべき作業要素であるかを示すために、共用作業待ち行列８０用のポインタも含む。作業要素は、それらが待ち行列化された順序で共用作業待ち行列８０から除去される。
【００１９】
図５は、共用作業待ち行列に関する各仮想計算機のＷＱＡＦおよびその仮想計算機の関連操作を示している。仮想計算機は、データの読取りまたは書込み、アプリケーションの実行、アプリケーションに対する要求の作成などの作業項目を作成する（ステップ４００）。これは、ゲスト・オペレーティング・システムまたはゲスト・オペレーティング・システム上で動作するアプリケーションによって開始し、処理のためにゲスト・オペレーティング・システムに渡すことができる。次に、この作業項目を作成した仮想計算機（この例では仮想計算機１２）内のＷＱＡＦ（たとえば、ＷＱＡＦ６２）は、ＷＱＡＦ内の割当てアルゴリズムが決定した作業待ち行列にこの作業項目を割り当てる（ステップ４０２）。図５に示す例では、ＷＱＡＦ６２は、おそらく負荷バランスのために、共用作業待ち行列８０にこの作業項目を割り当てる（ステップ４０２）。次に、ＷＱＡＦ６２は制御ブロックをチェックして、すべての仮想計算機が「非アイドル」状態、すなわち、使用中であるかどうかを判定する（判断４０４）。非アイドル状態である場合、これはこの作業要素に関するＷＱＡＦ６２の処理を終了する（ステップ４０６）。上記で説明したように、このような条件下にある仮想計算機のいずれかに対する割込みを行うことは無駄／破壊的なことになるだろう。しかし、１つまたは複数の仮想計算機が「アイドル」状態である場合、ＷＱＡＦ６２は制御ブロックからそれらを識別し（ステップ４０８）、次にすべての「アイドル」仮想計算機に割込みを送信する（ステップ４０８）。これにより、ＷＱＡＦ６２によるこの作業項目の処理は終了する（ステップ４１２）。この割込みは、それぞれのスケジューラ（複数も可）を呼び出して、作業項目の有無について共用作業待ち行列８０をチェックするように、アイドル仮想計算機（複数も可）に警告することになる。
【００２０】
図６は、共用作業待ち行列に関する各仮想計算機の作業スケジューラおよびその仮想計算機の関連操作を示している。ステップ５００では、仮想計算機（この例では仮想計算機１２）のスケジューラ（たとえば、スケジューラ４２）を呼び出す。この呼出しは、現行作業の完了後または仮想計算機が休止状態であるときは割込みの受信後に仮想計算機内の仮想プロセッサによって開始される。その呼出しに応答して、スケジューラはその半専用作業待ち行列または共用作業待ち行列から作業項目をフェッチするべきかどうかを判定する。この判断はスケジューラ内のアルゴリズムに基づくものであるか、または半専用作業待ち行列上にディスパッチすべき作業項目が存在しない場合もある。例証のため、スケジューラは共用作業待ち行列から作業項目をフェッチすることを決定するものと想定する（ステップ５０１）。次に、スケジューラ４２は制御ブロック５８をチェックして、共用作業待ち行列８０上に１つの作業項目または１つの作業項目グループが存在するかどうかを判定する（判断５０２）。上記のように、それぞれのスケジューラを呼び出すようにすべての「アイドル」仮想計算機に割込みが送信されることになり、すべてのスケジューラはそれぞれの半専用作業待ち行列または共用作業待ち行列のいずれかから作業項目をフェッチしようと試みることになる。しかし、共用メモリにアクセスするための第１のスケジューラは第１の作業項目を除去し（ステップ５０４）、したがって、他のスケジューラはこの作業項目を見つけられない。他の作業項目が使用可能である場合、他のスケジューラの１つはそれを除去することができる。その場合、その作業項目を受信した仮想計算機には「非アイドル」のマークが付けられ（ステップ５０３）、スケジューラ４２はその作業項目を解析して、その性質と、仮想計算機１２内でどの機能を呼び出してその作業項目を実行すべきかを決定する（ステップ５０６）。作業項目の完了後（ステップ５０８）、その作業項目を実行した機能がステップ５００でスケジューラを呼び出す。
【００２１】
もう一度、判断５０２を参照すると、共用作業待ち行列上に作業項目がまったくない場合、スケジューラは、その仮想計算機がアイドル仮想計算機の「カウント」を増分してその仮想計算機について「アイドル」状態を示すように制御ブロックを更新する（ステップ５１２）。（この仮想計算機がすぐにアイドル状態になるので、この「カウント」はすでに増分されたことになる。）次に、仮想計算機は待ち／スリープ中または「休止」状態になる（ステップ５１４）。その後、仮想計算機は割込みを受信して、その半専用作業待ち行列または共用作業待ち行列上に作業項目が存在することを仮想計算機に警告するものと想定する（判断５１６）。応答として、仮想計算機のＷＱＡＦはアイドル仮想計算機のカウントを減分する（ステップ５１７）。次に、仮想計算機はステップ５００でそのスケジューラをもう一度呼び出して、ステップ５０１、５０２、５０４、５０６、５０８を実行する。
【００２２】
図７は、コンピュータ・システム１０の共用メモリ２５内で全体が９０で示される同期データ構造を象徴的に示している。図示の例では、仮想計算機１４はロック９１を保持し、仮想計算機１２は仮想計算機１４からのロックを待っているプレース・ホルダ９２を有し、仮想計算機１６は仮想計算機１２からのロックを待っているプレース・ホルダ９３を有している。これは、実際には制御ブロック５８内に記録され、仮想計算機１４がロックを保持し、仮想計算機１２および１６が現在、ロックを待っていることを示す。制御ブロック５８の「ウェイタ（waiter）・リスト」９５はウェイタの順序を示し、すなわち、仮想計算機１２は最初にロックを得る立場にあり、仮想計算機１６は仮想計算機１２がロックを入手した後でロックを入手しようと試みることになる。この例では、仮想計算機１４は排他的にロック９１を保持し、すなわち、他のいかなる仮想計算機もこのロックを同時に保持することができない。仮想計算機１２および１６は、ロックを待っており、共用するロックを保持する意志があり、すなわち、これらの仮想計算機は互いに同時にそのロックを保持することができる。
【００２３】
図８は、共用メモリ内の共用作業待ち行列８０に関するロックを入手しようと試みている各仮想計算機の同期機能および関連操作を示している。以下の例では、仮想計算機（仮想計算機１４など）は共用作業待ち行列８０に関するロックを要求する（ステップ７００）。仮想計算機が共用作業待ち行列を読み取りたいと希望する場合、仮想計算機は共用ロックのみを要求する必要がある。しかし、仮想計算機が共用作業待ち行列から作業項目を除去したいと希望する場合（より一般的なケースである）、仮想計算機は排他ロックを要求することになる。通常、仮想計算機は作業待ち行列から作業項目を除去したいと希望することになり、したがって、この目的のために排他ロックを要求することになり、判断７０２は判断７０４に至る。判断７０４では、同期機能は、要求したロックが現在、（共用方式または排他方式のいずれかで）他の仮想計算機によって保持されているかどうかを判定する。保持されている場合、排他ロックは現行リクエスタにとって使用不能であり、同期機能は、要求側仮想計算機がアイドル状態であり、排他ロックを「待っている」ことを示すように制御ブロックを更新する（ステップ７０６）。また、仮想計算機は待ち／休止状態に入り（ステップ７０８）、そこで割込みを待つ（判断７１０）。もう一度、判断７０４を参照すると、要求したロックが現在、何かに保持されていない場合、同期機能は「非アイドル」としてその仮想計算機にマークを付け（ステップ７１２）、その仮想計算機にロックを授与する（ステップ７１４）。このロックの授与は、制御ブロック５８に対して対応する更新を行うことによって実施される。次に、仮想計算機は、共用作業待ち行列８０から次の作業項目を除去し、その作業項目が示すタスクを実行する（ステップ７１６）。その後、仮想計算機は、それがその作業項目を実行したことを同期機能に通知し、ロックを「解除」する（ステップ７１８）。応答として、同期機能は、ロックが解除されたことを示すように制御ブロック５８を更新する。また、同期機能は、他のいずれかの仮想計算機が現在、ロックを待っているかどうかを制御ブロック５８から判定する（判断７２０）。待っていない場合、同期機能の処理が完了する（ステップ７２２）。待っている場合、同期機能は、「待ち」のマークが付けられた第１の仮想計算機が「アイドル」状態であるかどうかを制御ブロック５８から判定する（判断７２４）。アイドル状態ではない場合、非アイドル状態で待っている仮想計算機に対しこの時点で割込みを行うことは破壊的すぎると思われるので、同期機能の処理が完了する（ステップ７２２）。むしろ、非アイドル状態で待っている仮想計算機がその現行作業項目を完了したときまたは待っている仮想計算機にとって都合の良い他の時点で、おそらくステップ７００でそれ自体に関するロックを要求することになる。もう一度、判断７２４を参照すると、待っている仮想計算機がアイドル状態である場合、同期機能は、待っている仮想計算機に対する割込みを発行する（ステップ７２８）。それはとにかくアイドル状態であるので、これは待っている仮想計算機にとって無駄なことにならないだろう。割込みの受信後、アイドル仮想計算機は覚醒することになり、ステップ７００でロックを要求することができる。
【００２４】
もう一度、判断７０２に戻って参照すると、仮想計算機が要求したロックが、共用作業待ち行列の読取りなど、共用であって排他ではない場合、同期機能は、ロックが現在、排他方式で保持されているかどうかを判定する（判断７４０）。保持されていない場合（すなわち、いかなるロックも現在、保持されていないかまたは共用ロックのみが現在、保持されている場合）、同期機能は、ステップ７１２に移行し、前述のように続行する。しかし、ロックが現在、排他方式で保持されている場合、同期機能は、要求側仮想計算機が「アイドル」状態であって共用ロックを「待っている」というマークを制御ブロック５８内に付ける（ステップ７４２）。次に、要求側仮想計算機は待ち／休止状態に入り（ステップ７４４）、割込みを待つ（判断７４８）。このような割込みを受信すると、それはステップ７００に移行してロックを要求することができる。
【００２５】
上記に基づいて、本発明を実施するコンピュータ・システムについて説明してきた。しかし、本発明の範囲を逸脱せずに多数の修正および代用を行うことができる。たとえば、仮想計算機の代わりにロジカル・パーティションを使用することができるだろう。したがって、本発明は、限定としてではなく例証として開示したものであり、本発明の範囲を決定するためには特許請求の範囲を参照しなければならない。
【００２６】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００２７】
（１）メモリ内の第１の作業待ち行列と、
メモリ内の第２の作業待ち行列と、
第１の作業項目を前記第１の作業待ち行列に割り当て、第２の作業項目を前記第２の作業待ち行列に割り当てるための第１のプログラム機能を含み、第１の仮想計算機による実行のために前記第１の作業待ち行列からの作業項目をスケジューリングするための第２のプログラム機能を含む第１の仮想計算機であって、前記第１および第２の作業項目が前記第１の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第１のプログラム機能によって直接アクセス可能であり、前記第１の作業待ち行列が前記第２のプログラム機能によって直接アクセス可能である第１の仮想計算機と、
第３の作業項目を前記第１の作業待ち行列に割り当て、第４の作業項目を前記第２の作業待ち行列に割り当てるための第３のプログラム機能を含み、第２の仮想計算機による実行のために前記第２の作業待ち行列からの作業項目をスケジューリングするための第４のプログラム機能を含む第２の仮想計算機であって、前記第３および第４の作業項目が前記第２の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第３のプログラム機能によって直接アクセス可能であり、前記第２の作業待ち行列が前記第４のプログラム機能によって直接アクセス可能である第２の仮想計算機とを有し、
前記メモリが前記第１および第２の仮想計算機によって共用される、仮想計算機オペレーティング・システム。
（２）前記第２のプログラム機能が前記第２の作業待ち行列からの作業項目をスケジューリングすることができず、前記第４のプログラム機能が前記第１の作業待ち行列からの作業項目をスケジューリングすることができない、上記（１）に記載の仮想計算機オペレーティング・システム。
（３）前記第２の仮想計算機が前記第１および第２のプログラム機能にアクセスできないように前記第１および第２のプログラム機能が前記第１の仮想計算機にとって専用のものであり、前記第１の仮想計算機が前記第２および第３のプログラム機能にアクセスできないように前記第３および第４のプログラム機能が前記第２の仮想計算機にとって専用のものである、上記（１）に記載の仮想計算機オペレーティング・システム。
（４）前記共用メモリ内の第３の作業待ち行列をさらに有し、前記第１のプログラム機能が前記第１の仮想計算機から発生した第５の作業項目を前記第３の作業待ち行列に割り当て、前記第３のプログラム機能が前記第２の仮想計算機から発生する第６の作業項目を前記第３の作業待ち行列に割り当て、前記第２のプログラム機能が前記第３の作業待ち行列に直接アクセスし、前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングすることができ、前記第４のプログラム機能が前記第３の作業待ち行列に直接アクセスし、前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングすることができる、上記（１）に記載の仮想計算機オペレーティング・システム。
（５）前記共用メモリ内のロック・データ構造と、
前記第１の仮想計算機内の第５の機能であって、前記第１の仮想計算機が、（ａ）前記第１の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第１の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第１の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第５の機能と、
前記第２の仮想計算機内の第６の機能であって、前記第２の仮想計算機が、（ａ）前記第２の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第２の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第２の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第６の機能とをさらに有する、上記（４）に記載の仮想計算機オペレーティング・システム。
（６）仮想計算機オペレーティング・システム内で作業項目をディスパッチするための方法において、前記仮想計算機オペレーティング・システムが第１および第２の仮想計算機を定義し、前記方法が、
メモリ内の第１の作業待ち行列を作成するステップと、
メモリ内の第２の作業待ち行列を作成するステップと、
前記第１の仮想計算機が第１の作業項目を前記第１の作業待ち行列に割り当て、第２の作業項目を前記第２の作業待ち行列に割り当て、前記第１の仮想計算機による実行のために前記第１の作業待ち行列からの作業項目をスケジューリングするステップであって、前記第１および第２の作業項目が前記第１の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第１の仮想計算機によって直接アクセス可能であるステップと、
前記第２の仮想計算機が第３の作業項目を前記第１の作業待ち行列に割り当て、第４の作業項目を前記第２の作業待ち行列に割り当て、前記第２の仮想計算機による実行のために前記第２の作業待ち行列からの作業項目をスケジューリングするステップであって、前記第３および第４の作業項目が前記第２の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第２の仮想計算機によって直接アクセス可能であるステップとを有する方法。
（７）前記第１の仮想計算機が前記第２の作業待ち行列からの作業項目をスケジューリングすることができず、前記第２の仮想計算機が前記第１の作業待ち行列からの作業項目をスケジューリングすることができない、上記（６）に記載の方法。
（８）前記第１の仮想計算機によって実行される前記割当ておよびスケジューリング・ステップが、前記第１の仮想計算機にとって専用のそれぞれの第１の割当て機能と第１のスケジューリング機能によって実行され、前記第２の仮想計算機が前記第１の割当て機能または前記第１のスケジューリング機能にアクセスできず、前記第２の仮想計算機によって実行される前記割当ておよびスケジューリング・ステップが、前記第２の仮想計算機にとって専用のそれぞれの第２の割当て機能と第２のスケジューリング機能によって実行され、前記第１の仮想計算機が前記第２の割当て機能または前記第２のスケジューリング機能にアクセスできない、上記（６）に記載の方法。
（９）前記メモリ内の第３の作業待ち行列を作成するステップと、
前記第１の仮想計算機が前記第１の仮想計算機から発生した第５の作業項目を前記第３の作業待ち行列に割り当てるステップと、
前記第２の仮想計算機が前記第２の仮想計算機から発生する第６の作業項目を前記第３の作業待ち行列に割り当てるステップと、
前記第１の仮想計算機が前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングするステップと、
前記第２の仮想計算機が前記第１の仮想計算機または第２の仮想計算機のいずれかから発生する作業項目を前記第３の作業待ち行列からスケジューリングするステップとをさらに有する、上記（６）に記載の方法。
（１０）前記メモリ内のロック・データ構造を作成するステップと、
前記第１の仮想計算機が、（ａ）前記第１の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第１の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第１の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記第１の仮想計算機が前記ロック・データ構造を更新するステップと、
前記第２の仮想計算機が、（ａ）前記第２の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第２の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第２の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記第２の仮想計算機が前記ロック・データ構造を更新するステップとをさらに有する、上記（９）に記載の方法。
（１１）仮想計算機オペレーティング・システム内で作業項目をディスパッチするためのコンピュータ・プログラム記録媒体において、前記仮想計算機オペレーティング・システムが第１および第２の仮想計算機を定義し、前記コンピュータ・プログラム記録媒体が、
コンピュータ可読媒体と、
第１の作業項目をメモリ内の第１の作業待ち行列に割り当て、第２の作業項目を前記メモリ内の第２の作業待ち行列に割り当てるために前記第１の仮想計算機内で実行される第１のプログラム命令であって、前記第１および第２の作業項目が前記第１の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第１のプログラム命令によって直接アクセス可能である第１のプログラム命令と、
前記第１の仮想計算機による実行のために前記第１の作業待ち行列からの作業項目をスケジューリングするための第２のプログラム命令であって、前記第１の作業待ち行列が前記第２のプログラム命令によって直接アクセス可能である第２のプログラム命令と、
第３の作業項目を前記第１の作業待ち行列に割り当て、第４の作業項目を前記メモリ内の第２の作業待ち行列に割り当てるために前記第２の仮想計算機内で実行される第３のプログラム命令であって、前記第３および第４の作業項目が前記第２の仮想計算機から発生し、前記第１および第２の作業待ち行列が前記第３のプログラム命令によって直接アクセス可能である第３のプログラム命令と、
前記第２の仮想計算機による実行のために前記第２の作業待ち行列からの作業項目をスケジューリングするための第４のプログラム命令であって、前記第２の作業待ち行列が前記第４のプログラム命令によって直接アクセス可能である第４のプログラム命令とを有し、
前記第１、第２、第３、および第４のプログラム命令が前記媒体上に記録される、コンピュータ・プログラム記録媒体。
（１２）前記第２のプログラム命令が前記第２の作業待ち行列からの作業項目をスケジューリングすることができず、前記第４のプログラム命令が前記第１の作業待ち行列からの作業項目をスケジューリングすることができない、上記（１１）に記載のコンピュータ・プログラム記録媒体。
（１３）第１および第２の仮想計算機を定義する仮想計算機オペレーティング・システムにおいて、前記仮想計算機オペレーティング・システムが、
メモリ内の作業待ち行列を有し、
前記第１の仮想計算機が、第１の作業項目を前記作業待ち行列に割り当てるための第１のプログラム機能を含み、前記第１の仮想計算機による実行のために前記第１および第２の仮想計算機から発生する作業項目を前記作業待ち行列からスケジューリングするための第２のプログラム機能を含み、前記第１の作業項目が前記第１の仮想計算機から発生し、前記作業待ち行列が前記第１および第２のプログラム機能によって直接アクセス可能であり、
前記第２の仮想計算機が、第2の作業項目を前記作業待ち行列に割り当てるための第３のプログラム機能を含み、前記第２の仮想計算機による実行のために前記第１および第２の仮想計算機から発生する作業項目を前記作業待ち行列からスケジューリングするための第４のプログラム機能を含み、前記第２の作業項目が前記第２の仮想計算機から発生し、前記作業待ち行列が前記第３および第４のプログラム機能によって直接アクセス可能であり、
前記メモリが前記第１および第２の仮想計算機によって共用される、仮想計算機オペレーティング・システム。
（１４）前記第２の仮想計算機が前記第１および第２のプログラム機能にアクセスできないように前記第１および第２のプログラム機能が前記第１の仮想計算機にとって専用のものであり、前記第１の仮想計算機が前記第3および第4のプログラム機能にアクセスできないように前記第３および第４のプログラム機能が前記第２の仮想計算機にとって専用のものである、上記（１３）に記載の仮想計算機オペレーティング・システム。
（１５）前記メモリ内のロック・データ構造と、
前記第１の仮想計算機内の第５の機能であって、前記第１の仮想計算機が、（ａ）前記第１の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第１の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第１の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第５の機能と、
前記第２の仮想計算機内の第６の機能であって、前記第２の仮想計算機が、（ａ）前記第２の仮想計算機がロックを所有することを示すために前記ロックを入手したとき、（ｂ）前記第２の仮想計算機が前記ロックを所有しないことを示すために前記ロックを解除したとき、および（ｃ）前記第２の仮想計算機がロックを待っていることを示すために前記ロックを待っているときに、前記ロック・データ構造を更新する第６の機能とをさらに有する、上記（１３）に記載の仮想計算機オペレーティング・システム。
【図面の簡単な説明】
【００２８】
【図１】本発明による複数の仮想計算機を備えたコンピュータ・システムのブロック図である。
【図２】図１のコンピュータ・システム内の仮想計算機の作業待ち行列割当て機能および関連操作を示す流れ図である。
【図３】図１のコンピュータ・システム内の仮想計算機の作業ディスパッチ機能および関連操作を示す流れ図である。
【図４】図１のコンピュータ・システムの追加の共用作業待ち行列機構のブロック図である。
【図５】図４の共用作業待ち行列に関する仮想計算機の作業待ち行列割当て機能および関連操作を示す流れ図である。
【図６】図４の共用作業待ち行列に関する仮想計算機の作業ディスパッチ機能および関連操作を示す流れ図である。
【図７】複数の仮想計算機をまとめて同期させることができるようにする同期機能のブロック図である。
【図８】図７の同期機能に関する仮想計算機の同期機能および関連操作を示す流れ図である。
【符号の説明】
【００２９】
１０  コンピュータ・システム
１１  仮想計算機オペレーティング・システム
１２、１４、１６  仮想計算機
２０  物理的コンピュータ
２１  基本部分
２２、２４  仮想計算機Ｌｉｎｕｘ
２３  ＣＰＵ
２５  共用メモリ
２６  ＣＭＳ仮想計算機
３２、３４、３６  アプリケーション
４２、４４、４６  スケジューラ
５２、５４、５６  作業待ち行列
５８  制御ブロック
６２、６４、６６  ＷＱＡＦ
７０、７２、７４、７６  作業項目
【図１】
2004326755.tif 000003
【図２】
2004326755.tif 000004
【図３】
2004326755.tif 000005
【図４】
2004326755.tif 000006
【図５】
2004326755.tif 000007
【図６】
2004326755.tif 000008
【図７】
2004326755.tif 000009
【図８】
2004326755.tif 000010