本発明の1つの態様によると、プログラム(例えば、オペレーティング・システム)に、これが機能を実施するための猶予期間を有すると警告するための能力が提供される。例えば、クリーンアップ(cleanup)(例えば、ディスパッチ可能ユニットの完了、停止、及び/又は移動)を実施するための猶予期間が、プログラムに与えられる。
本発明の更に別の態様によると、プログラム及び/又はプロセッサが、リソース(例えば、共有リソース)へのアクセスを失いそうであると警告される。例えば、リソースへのアクセスを失いそうであるとの警告が、他のプロセッサとリソースを共有するプロセッサに与えられる。更に別の例として、共有プロセッサ上で実行されている、オペレーティング・システムなどのプログラム(即ち、プログラムは他のプログラムとプロセッサを共有する)は、そのプロセッサ・リソースを失いそうであると警告される。
1つの特定の実施形態において、ホストCPUからゲストCPUに与えられたタイムスライスの満了、又はホストによるゲストのタイムスライスのプリエンプション(pre−emption)の警告を、ホストCPUによりプロビジョニングされたゲストCPU上で実行されているゲスト・プログラムに与える能力が提供される。この警告により、ゲストCPUが、ディスパッチ可能ユニットの実行の完了、ディスパッチ可能ユニットが再ディスパッチ可能である時点のディスパッチ可能ユニットの停止、及び/又はディスパッチ可能ユニットの別のゲストCPUへの移動といった特定の機能を実施するために用いることができる猶予期間が与えられる。
本明細書で用いられる猶予期間とは、例として、時間の量、命令の数、サイクルの数などを含む。猶予期間は、1つ又は複数の機能を実施することができる所定の持続時間のものである。
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の一実施形態が、図1を参照して説明される。この特定の実施形態において、コンピューティング環境100は、リソース104を共有する複数のプロセッサ102を含む。各プロセッサ(及び/又は、プロセッサ上で実行されている、オペレーティング・システムなどのプログラム)に、リソースを共有するための、タイムスライスと呼ばれる一定の時間量が与えられる。リソースは、例として、中央演算処理ユニット・リソース、メモリ、入力/出力デバイス、及び/又はインターフェース、及び/又は他のリソースを含む。リソースにアクセスすることができるプロセッサ(又は、そこで実行されているプログラム)は、そのアクセスがまもなく終了し、従って、プロセッサ(又は、プログラム)は、クリーンアップ、作業単位の完了、作業単位の停止、作業単位の移動等のような特定のアクションをとることを警告される。
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境200の別の実施形態が、図2を参照して説明される。コンピューティング環境200は、例えば、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーション(IBM(登録商標))により提供されるz/Architecture(登録商標)に基づいている。z/Architecture(登録商標)は、非特許文献1に説明される。一例において、z/Architecture(登録商標)に基づいたコンピューティング環境は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるSystem z(登録商標)サーバを含む。以下に述べられるIBM(登録商標)、z/Architecture(登録商標)、及びz/Series(登録商標)、及びz/VM(登録商標)、並びにz/OS(登録商標)は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で用いられる他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
一例として、コンピューティング環境200は、仮想マシン・サポートを提供する中央プロセッサ複合体(CPC)202を含む。CPC202は、例えば、1つ又は複数の仮想マシン204(又は、別の実施形態においては、論理パーティション)、1つ又は複数の中央プロセッサ206、少なくとも1つのホスト208(例えば、ハイパーバイザのような制御プログラム)、及び入力/出力サブシステム210を含み、その各々が以下に説明される。この例において、仮想マシン及びホストは、メモリ内に含まれる。
CPCによる仮想マシン・サポートは、各々が、例として、z/VM(登録商標)、z/OS(登録商標)、又はLinux(登録商標)などのゲスト・オペレーティング・システム212をホストすることができる多数の仮想マシンを動作させるための能力を提供する。各仮想マシン204は、別個のシステムとして機能することができる。つまり、各仮想マシンは、独立してリセットし、ゲスト・オペレーティング・システムをホストし、異なるプログラムで動作することができる。仮想マシンン内で実行されているオペレーティング・システム又はアプリケーション・プログラムは、十分且つ完全なシステムにアクセスできるように見えるが、実際には、その一部しか使用できない。
CPCの物理リソース(例えば、CPU、メモリ、I/Oデバイス等)は、ホスト208に所有されており、共有物理リソースは、その処理要求を満たすために、必要に応じて、ホストによりゲスト・オペレーティング・システムにディスパッチされる。多数のゲストのために、典型的には、ホストがハードウェア・リソースを単に区分化し、それを構成されたゲストに割り当てることが妨げられるので、ゲスト・オペレーティング・システムと物理共有マシン・リソースとの間の対話は、ホストにより制御される。
中央プロセッサ206は、仮想マシンに割り当て可能な物理プロセッサ・リソースである。例えば、仮想マシン204は、その各々が、仮想マシンに動的に割り当てることができる物理プロセッサ・リソース206の全て又は割り当て分を表す、1つ又は複数の論理プロセッサを含む。仮想マシン204は、ホスト208により管理される。例として、ホストは、プロセッサ206上で実行されているマイクロコードで実装することができ、又は、マシン上で実行されているホスト・オペレーティング・システムの一部とすることができる。一例において、ホスト208は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるProcessor Resource/System Manager(PR/SM)である。
入力/出力サブシステム210は、デバイスと主ストレージとの間の情報の流れを方向付ける。入力/出力サブシステム210は、これが中央演算処理複合体の一部であってもよく、又は、それとは別個のものであってもよいという点で、中央演算処理複合体に結合されている。I/Oサブシステムは、中央プロセッサから、CPCに結合されたI/Oデバイスと直接通信するタスクを取り除き、データ処理がI/O処理と同時に進行するのを可能にする。
一実施形態において、ホスト(例えば、PR/SM)及びプロセッサ(例えば、System z(登録商標))ハードウェア/ファームウェアは、制御された協調的方法で互いに対話し、ゲスト・オペレーティング・システムとホストとの間の制御の委譲(transfer of control)を必要とせずに、ゲスト・オペレーティング・システム操作を処理する。ゲストに対して命令の解釈実行を可能にするファシリティを介して、ホストの介入なしに、ゲスト操作を直接実行することができる。このファシリティは、命令、即ちStart Interpretive Execution(解釈実行開始、SIE)を提供し、この命令は、ホストが発行することができ、ゲスト(仮想マシン)の状態を保持し、制御する状態記述(state descriprion)と呼ばれる制御ブロックを指定する。この命令は、CPUを、ホストの注意を必要とする条件が発生するまで、ゲスト命令及び割り込みが直接処理される解釈実行モードに入れる。そうした条件が発生すると、解釈実行は終了し、ホスト割り込みが提示されるか、又はSIE命令が発生した条件の詳細を格納するのを完了する。この後者のアクションは、インターセプト(interception)と呼ばれる。解釈実行の一例が、非特許文献2に説明される。
本明細書で用いられるファームウェアとは、例えば、プロセッサのマイクロコード、ミリコード、及び/又はマクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装に用いられるハードウェア・レベルの命令及び/又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコードとして供給される専用コード、又は基礎をなすハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
本発明の1つ又は複数の態様を組み込むためのコンピューティング環境の別の例が、図3に示される。この例では、ホスト・アーキテクチャのホスト・コンピュータ302をエミュレートする、エミュレートされたホスト・コンピュータ・システム300が提供される。エミュレートされたホスト・コンピュータ・システム300において、ホスト・プロセッサ(CPU)304は、エミュレートされたホスト・プロセッサ(又は、仮想ホスト・プロセッサ)であり、ホスト・コンピュータ302のプロセッサにより使用されるものとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ306を通じて実現される。エミュレートされたホスト・コンピュータ・システム300は、エミュレーション・プロセッサ306がアクセス可能なメモリ308を有する。例示的な実施形態において、メモリ308は、ホスト・コンピュータ・メモリ部分310と、エミュレーション・ルーチン部分312とに区分化される。ホスト・コンピュータ・メモリ310は、ホスト・コンピュータ・アーキテクチャに従ったエミュレートされたホスト・コンピュータ302のプログラムに利用可能であり、且つ、図2の同様の名称の要素と類似した、ホスト又はハイパーバイザ314、及びゲスト・オペレーティング・システム318を実行する1つ又は複数の仮想マシン316の両方を含むことができる。
エミュレーション・プロセッサ306は、エミュレートされたプロセッサ304のものではないアーキテクチャのアーキテクチャ化された(architected)命令セットのネイティブ命令を実行する。ネイティブ命令は、例えば、エミュレーション・ルーチン・メモリ312から取得される。エミュレーション・プロセッサ306は、シーケンス及びアクセス/デコード・ルーチンにおいて取得された1つ又は複数の命令を用いることにより、ホスト・コンピュータ・メモリ310内のプログラムからの実行するためのホスト命令にアクセスすることができ、このシーケンス及びアクセス/デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができる。1つのこうしたホスト命令は、例えば、Start Interpretive Execution(SIE)命令とすることができ、これにより、ホストが仮想マシンにおいてゲスト・プログラムを実行しようとする。エミュレーション・ルーチン312は、この命令のため、及び、このSIE命令の定義に従った仮想マシン316において一連のゲスト命令を実行するためのサポートを含むことができる。
ホスト・コンピュータ・システム302のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステム・サポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによりエミュレートすることができる。エミュレーション・ルーチンはまた、エミュレーション・プロセッサ306において利用可能な(汎用レジスタ、及び仮想アドレスの動的変換といった)機能を利用して、エミュレーション・ルーチンの性能を高めることもできる。ホスト・コンピュータ302の機能をエミュレートする際にプロセッサ306を支援するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
本発明の1つの態様によると、多くのタイプのコンピューティング環境に用いることができる警告追跡割り込みファシリティが提供される。警告追跡割り込みファシリティは、多くのタイプのコンピューティング環境に用いることができるが、ファシリティの態様は、本明細書では、ゲスト・マルチプロセッシング・システムを参照して説明される。上述のように、ゲスト・マルチプロセッシング・システムにおいて、ゲスト・オペレーティング・システムは、少なくとも1つのホスト中央演算処理ユニットがホストするゲスト中央演算処理ユニット上で、ディスパッチ可能ユニット(例えば、プログラム、コード等)をディスパッチする。ホストCPUは、ディスパッチ可能ユニットが実行されるタイムスライス(例えば、ある時間量、又は命令数、サイクル数等のような他の期間)をゲストCPUに与える。ディスパッチ可能ユニットの実行中、タイムスライスが満了した場合、ディスパッチ可能ユニットは、他のいずれのゲストCPUの可用性にも関係なく、ゲスト・マルチプロセッシング構成の他のいずれのゲストCPU上でも続行できない状態のままにされ得る。代わりに、ディスパッチ可能ユニットは、続行するために、唯一のゲストCPUが次のタイムスライスを受信するのを待たなければならない。使用する特定の共有技術及びゲスト構成の相対的優先順位に基づいて、次のタイムスライスを、かなりの期間遅延させることができる。ゲスト構成が、ディスパッチ可能ユニットを動作させることができる他のゲストCPUを有する場合でさえ、前のタイムスライスが満了したときに保存されたディスパッチ可能ユニットのゲストCPUの状態が原因で、ディスパッチ可能ユニットを続行することができない。ゲストCPUの続行のためにその正確な状態を使用できるようになるまで、ディスパッチ可能ユニットは非アクティブである。
付加的な時間(又は、付加的な命令、サイクル等といった他の付加的な期間)を与えることによって、タイムスライスを延長することが可能であるが、この追加時間(extra time)を用いたとしても、ゲストCPUは、ディスパッチ可能ユニットの実行を延長することができ、通常のタイムスライスの満了時におけるように、依然としてディスパッチ可能ユニットを同じディスパッチ不能状態のままにする。
ホスト・プログラムは、任意のディスパッチ可能ユニットを実行している任意のゲスト・プログラムにより用いられる制御及び状態を知らないので、オペレーティング・システムがそのディスパッチ可能ユニットをクリーンアップするために、ホスト・プログラムとゲスト・プログラムとの間にプロトコルを確立することなく、常に追加時間の付与を行うことはできない。プロトコルがなければ、ゲストCPUに与えられるいずれの追加時間もメイン処理において消費され、依然として、同じくディスパッチ可能ユニットのスタック状態で終わる可能性が高い。従って、本発明の1つの態様に従って、こうしたプロトコルが提供される。
本発明の1つの態様によると、特定のアクションをとる(例えば、ディスパッチ可能ユニットを完了させる、又はディスパッチ可能ユニットを再ディスパッチ可能にする)べきであることを示す、ゲスト・プログラムへの警告を含む猶予期間又は延長が与えられる。例として、本明細書でさらに詳細に説明され、ホストによって見られるように、猶予期間は、何らかの他のより高い優先順位のためにプロセッサを再利用するように、タイムスライスの満了に応答して又はそのタイムスライスの満了前にホストがゲストをプリエンプションするのに応答して与えられる。
一例として、猶予期間は、タイムスライスを無条件に延長する代わりに与えられる。通常のタイムスライスが完全に満了した場合、猶予期間が与えられるが、各々がタイムスライスを期待する全ての他の仮想化ゲストに対して公平を期すように、次の通常のタイムスライスに対して請求がなされる。通常のタイムスライスが満了しなかった場合、猶予期間は、残っている通常の時間から取得される。どちらにしても、猶予期間は、ゲストCPUに与えられる残りの時間(又は他の期間)を制限し、且つ、それ自体を延長することはできない。従って、ゲストCPUが任意の未知の期間実行し続けることはできない。
猶予期間の開始時に、ディスパッチ可能ユニットをクリーンアップする(例えば、ディスパッチ可能ユニットを終了、停止、及び/又は移動する)よう、ゲスト・プログラムに通知がなされる。猶予期間の実施により、ゲストCPUが、与えられた付加的な期間を超過しないことが保証される。ゲスト・プログラムに猶予期間を与え、且つ、時間(又は他の期間)がまもなく満了する(猶予期間が開始している)ことをゲスト・プログラムに通知するプロトコルは、ゲスト・プログラムとホスト・プログラムとの間の契約(agreement)であり、プロトコルはゲスト・プログラムにより理解されるので、こうした通知が価値のあるものとなる。つまり、ゲスト・プログラムは通常、必要に応じて、現在のディスパッチ可能ユニットをゲスト構成の別のゲストCPU上でディスパッチ可能にする(例えば、これを移動させる)ことによって、通知に従う。
プロトコル及び警告追跡割り込みファシリティ(警告追跡又は警告追跡ファシリティとも呼ばれる)に関する更なる詳細が、図4−図12を参照して以下に説明される。これらの図面を参照して説明される実施形態は、1つ又は複数のホストによりプロビジョニングされる1つ又は複数のゲストを有する仮想環境に関連する。しかしながら、本発明の1つ又は複数の態様は、複数のプロセッサ及び/又は複数のプログラムがリソースを共有する非仮想環境を含む、他の環境にも関連する。
ゲストにより観察されるような警告追跡割り込みファシリティ・プロトコルに関する詳細が、図4を参照して説明される。ゲストにより観察されるような警告追跡プロトコルは、例えば、ファシリティ・インストール済み標示、ゲストの登録、通知、及び自発的終了(voluntary exit)を含み、その各々が以下に説明される。
図4を参照すると、ゲスト・プログラムが警告追跡プロトコルを理解し、ファシリティ・インストール済み標示を探す(ステップ400)。一例において、この標示は、制御ブロック(例えば、サービス呼び出し制御ブロック(Service Call Control Block、SCCB))内に格納されたビットであり、Read SCP Informationコマンドなどの読み出しコマンドを用いて観察される。ファシリティがインストールされていると判断した後、ゲスト・プログラムが登録を行う(ステップ402)。登録とは、ゲスト・プログラムが、警告追跡割り込みファシリティ・プロトコルを理解していることをホスト・プログラムに伝えるための機構である。一例において、登録は、Diagnose命令を用いて行われ、その例を、以下にさらに説明する。
ゲスト・マルチプロセッシング構成のゲストCPUにわたって一貫した挙動が望ましいため、一実施形態において、いずれかのゲスト中央処理ユニットから開始された登録も、マルチプロセッシング構成の全てのゲスト中央処理ユニットをカバーする。ゲスト・マルチプロセッシング構成において、ゲストCPUは同じ主メモリを使用し、且つ、ゲストCPUは、シングル・イメージ(single image)と呼ばれることもあるもので動作すると仮定される。従って、1つのゲストCPUの登録は、マルチプロセッシング環境の他のゲストCPUに適用可能である。一実施形態において、登録は取り消し不能であり、このことは、タイミング・ウィンドウの回避に役立ち、開発を単純化し、試験容易性の改善を可能にする。登録が取り消し不能であっても、ゲスト・プログラムは、プロトコルへの参加を続行するかどうかを判断することができる。ゲスト・プログラムは、以下に説明される1つ又は複数のイネーブルメント・インジケータをリセットすること又はリセットしたことによって、不参加を選択することができる。
ゲスト・プログラムを警告追跡プロトコルに登録した後、ゲストCPUに猶予期間を通知することができる(ステップ404)。例えば、ホストCPUにより、タイムスライスの満了(又は、更に別の例においては、満了が迫っていること)、又はそのタイムスライスのプリエンプションが、ゲストCPUに警告され得る。特定の1つの例において、登録されたゲスト構成のCPUに、例えば、通常のタイムスライスの満了、及び例えばクリーンアップのための付加的な期間を与える猶予期間の開始が通知される。
通知された後、ゲストは、ディスパッチ可能ユニットを再ディスパッチ可能にするため、又は他のいずれかの適切な調整を行うための制約された時間量又は他の期間、即ち猶予期間(例えば、特定の1つの実施形態においては、50ミリ秒)を有する。通常のタイムスライスが既に終了している場合、例えば制御をホストに戻す前に、猶予期間を用いて、ディスパッチ可能ユニットを再ディスパッチ可能にするか、又は他のいずれかの適切な調整を行う。タイムスライスが終了していない場合、猶予期間を使用し、タイムスライスの残り部分を放棄する。ゲストCPUが使用する実際の時間の通常の課金が行われる。
通知を行った後、ゲストCPUは、ゲストCPUの操作が非自発的に終了される制約付き期間(例えば、限定された時間量)になる。通常のタイムスライス期間ごとに、1つの通知だけが行われる。従って、ゲストCPUは、基礎をなす共有ホストCPUを他の場所で共有することができることを保証する最終時間制御により依然として制約され、それにより、ホスト・プログラムが提供する仮想化全体において良好な秩序と規律が保たれる。
通知は、ゲスト・プログラムにより固有の状態が検出されるいずれの機構によっても達成することができる。例として、固有のゲスト割り込み、設定することができるアーキテクチャ的に定められた主メモリ位置、又は、ホスト及びゲストの両方が利用可能なI/O外部メモリ・デバイスが挙げられる。最初のものは、割り込みを可能にするための適切なゲスト・イネーブルメントを必要とする。後の2つは、猶予期間が浪費されていないことの十分に頻繁な定期検査を必要とする。z/Architecture(登録商標)の特定の1つの例において、警告追跡割り込み(WTI)と呼ばれるゲスト割り込みが、通知として用いられる。
警告された後、ゲストは、その所定のタイムスライス/猶予期間を自発的に終了する(ステップ406)。ゲストは、通知された後、現在のタイムスライス/猶予期間を終了し、ディスパッチ可能ユニットを再ディスパッチ可能にする(例えば、ディスパッチ可能ユニットを停止及び移動する、又は完了する)。この終了により、ゲストが実際にプロトコルに従っていることがホスト・プログラムに知らされる。ゲストが制御を放棄し、従って、ホスト・プログラムに戻る他の理由が存在することがある。通常、ディスパッチ可能ユニットを再ディスパッチ可能にするための制約付き処理においては、何らかのこうした外的終了(extraneous exit)に関して条件は発生しない。ゲストCPUが警告追跡割り込みプロトコルを介して、猶予期間内に終了した場合、これが発生するたびに、次のタイムスライスにおいてフィードバック標示が与えられる。このように、ゲスト・プログラムは、猶予期間により課された時間制約を満たしたことを知る。
ゲストの自発的終了が遅延した場合、その実行は、猶予期間の満了によってプリエンプトされる。次にゲストCPUが通常のタイムスライスを有した状態で開始されたとき、フィードバック標示が与えられ、ゲストは、遅延したことを知る。通常の猶予期間は、クリーンアップ及び自発的終了のための十分な時間を許容するので、一般に、これをゲスト・プログラムにおける問題判別のために用いることができる。
外的終了が発生した場合、次にゲストCPUが通常のタイムスライス内で開始されたときに、自発的終了が迅速に発生すると予想される。同じフィードバック機構が、外的終了が介入したことをゲスト・プログラムに知らせ、従って、問題判別を知らせるための異なる情報を提供する。
自発的終了は、制御をゲスト・プログラムからホスト・プログラムに渡させるいずれかの機構によって達成され、この機構は前述のフィードバック機構を含む。ホスト・プログラムがゲスト要求を認識するように、特定のアーキテクチャの警告追跡割り込みプロトコルにおいて、使用される機構が定められる。一例において、この機構は、以下に説明されるDiagnose命令を含む。
警告追跡割り込みプロトコルのゲスト観察に加えて、一実施形態において、図5を参照して以下にさらに詳細に説明されるように、ホストもプロトコルを観察する。
図5を参照すると、ホストはファシリティ・インストール済み標示を認識し、それをゲストに反映させる(ステップ500)。例えば、ホストは制御ブロック(例えば、SCCB)の内のインストール済みビットをチェックし、警告追跡プロトコルのインストール済み状態(すなわち、これが設定されている)を認識し、ホスト・プログラムは、ホストに有利になるようにそれを使用できる方法を知っている。従って、ファシリティ標示がそのゲストに反映される。例えば、ファシリティをゲストに反映させるために、ホストは、ゲスト制御ブロック(例えば、ゲストSCCB)又はゲストがアクセス可能なメモリ領域にインストール済みビットを設定する。何らかの理由で、ゲストが警告追跡割り込みファシリティ・プロトコルのインストール状態を観察することをホスト・プログラムが望まず、ゲストがそのインストール済み状態を観察し、使用することを許容しない場合、ホスト・プログラムは、アンインストール標示をゲストに渡す(例えば、ゲストにより見られるビットをゼロに設定する)。さらに、一実施形態において、ホスト・プログラムは、警告追跡プロトコルがディスエーブルにされるように、ゲストCPUの制御を設定する(例えば、ゲストCPUの状態記述における1つ又は複数の指定ビットをオフにする)。
ゲストにより登録が開始されると、ホスト・プログラムは、非請求型(unsolicited)登録要求を受信し、ゲストが登録を行ったことを記憶する(ステップ502)。いずれかの単一のゲストCPUにより開始された登録要求も、ゲスト・マルチプロセッシング構成における全てのゲストCPUを登録するのに十分である。従って、ホスト・プログラムは、ゲスト構成の全てのCPUに関して警告追跡プロトコルをイネーブルにする(ステップ504)。例えば、ホスト・プログラムは、ゲストCPUの状態記述における1つ又は複数の指定ビットを、ゲストに関する警告追跡割り込みファシリティをイネーブルにするように設定する。必ずしも登録のフィードバックが、ゲストに戻される必要はない。ファシリティがインストールされていないときでもゲストCPUが登録を試行した場合には、ホストは、要求を無視し、警告追跡割り込みファシリティ・プロトコルに関してゲストCPUをイネーブルにしない。
ゲストが警告追跡ファシリティを登録し、これに関してゲストがイネーブルになった後、ゲストは、プロトコルの呼び出しの通知を受信することができる(ステップ506)。以下に説明されるように、これは、多数のシナリオで達成することができる。
一例として、警告追跡割り込みプロトコルが、ホストCPU(例えば、ホストCPU X)において解釈実行モードで動作しているゲストCPUに関してイネーブルにされると、ホスト・プログラムは、ホストCPU Yからプロトコルを開始することができる。つまり、ゲストCPUが、ホストCPUにプロビジョニングされ、そのホストCPUは、現在ホスト・プログラムが利用できない。ホスト・プログラムがCPU Xを再取得する理由を有する場合、ホスト・プログラムはまず、CPU Xに解釈実行モードを終了させる。つまり、ゲストCPUは停止され、それにより、CPU Xの解釈実行モードを終了する。ゲストCPUが自発的に停止するのを可能にせずに、いずれかの任意の時点でゲストCPUを停止させることは、警告追跡割り込みプロトコルが解決するように意図されている問題のリスクを引き起こす。警告追跡割り込みプロトコルは、ホスト・プログラムのアクションをゲストCPU Xにおける通知に変換できるようにすることにより、ホストCPU Yが通知を要求するのを可能にする(ステップ506)。ゲスト・プログラムは既に登録しているので、ホスト・プログラムは、ゲスト・プログラムが通知を認識し、自発的終了の実行の最後のステップを含む通知の適切な処理をサポートするという予測を有し、従って、ホストCPU Xの制御をホスト・プログラムに戻す。ひとたびこれが行われると、ホスト・プログラムは、ホストCPU Xのいかなる使用も続行し、プロセスを開始させることができる。
ホスト・プログラムは、例えば、何らかの状態を設定し、インジケータ(例えば、ビット)を設定すること、又は非請求型非同期信号(例えば、警告追跡割り込み)をゲストに送らせることによって、ゲストに通知する。登録されても、こうした通知信号の受信時間は、依然としてゲストにおいては未知である。登録することによって、ゲストは、知らせられた場合及び知らせられたときにプロトコルに従うことに合意するだけである。
ホスト・ユニプロセッサ・システムにおいて、1つのホストCPUが、ゲストCPUが動作している解釈実行モードにある場合、警告追跡割り込みプロトコルを呼び出すための他のホストCPUは存在しない。しかしながら、この場合でも、解釈実行モードにある間にホストCPUがタイムスライスの満了を認識すると、警告追跡割り込みプロトコルをCPU自体により呼び出すことができ、次いで、警告追跡割り込みプロトコルが、猶予期間を与え、通知を実施することができる。
通知の更に別の例において、ホストCPUが解釈実行モードにあるときにホストCPUが認識する内部状態の変化のために、ホストCPUにより警告追跡割り込みプロトコルにおいて定められた通知がゲストCPUに送られると、通知が行われる。この例は、ゲストCPUが、警告追跡割り込みプロトコルに関してイネーブルにされ、ホストCPUがタイムスライスの終了を認識したときに生じる。制御を放棄するようゲストCPUに通知する前に、CPUは、猶予期間を内部に与えて、ゲストCPUが通知を受け取り、適切なアクションをとり(例えば、現在のディスパッチ可能ユニットを完了する、又は現在のディスパッチ可能ユニットを再ディスパッチ可能にする)、自発的に終了するのに十分な時間を許容する。内部では、ホストCPUは、ゲストCPUに通知がなされたことを示すように、状態を保持する。ゲストが猶予期間内に自発的に終了しない場合、CPUはこれを認識し、ゲストの実行を終了させ、それにより、解釈実行モードを終了させることにより、制御をホスト・プログラムに戻す。一実施形態において、ゲストは、プロトコルが呼び出された理由を判断するすべがなく、クリーンアップし、終了するように通知されただけである。解釈実行モードの終了をもたらし、従ってゲストの実行を終了させるための他のホストの理論的根拠が存在し得る。例えば、ゲスト構成全体に対して何らかの協調的変更を行うために、全てのゲストCPUの実行を停止させるシナリオが存在する。マルチプロセッシング・ゲスト構成は、ゲスト構成の他のCPUからの異なる規則又は仮定の下で動作する幾つかのCPUを有するものではない。こうした非対称性が、予測できないゲスト結果をもたらし得る。
ホストCPUは、自発的終了、又は他のいずれかの理由による終了(例えば、ホストにCPUリソースが戻される)を実施したゲストCPUの結果を受け取る(ステップ508)。終了が、警告追跡割り込みプロトコルが定めるものに起因する場合、ホスト・プログラムは、どんなに時間がかかっても、次にゲストCPUが開始されたときに、ゲストCPUにフィードバックを与えるように記憶する。猶予期間の満了前にゲストが自発的に終了したと仮定すると、このフィードバックはポジティブな(「良い」)標示である。終了がいずれかの他の理由に起因する場合、ゲストCPUの次の開始時に警告追跡割り込みプロトコルのフィードバックは生じない。
ゲストの自発的終了が遅延した場合、つまり、ゲストが自発的に終了するためのアクションを行うが、猶予期間が満了した場合、ゲストCPUの実行は、猶予期間の満了によってプリエンプトされる。次にゲストCPUが通常のタイムスライスを有した状態で開始されたとき、ゲストの自発的終了が遅延したことをゲストが知るように、例外フィードバック標示が与えられる。通常の猶予期間は、クリーンアップ及び自発的終了のための十分な時間を許容するので、一般に、これをゲスト・プログラムにおける問題判別に用いることができる。
警告追跡割り込みプロトコルの自発的終了以外の終了が発生し、次にゲストCPUが通常のタイムスライスを有した状態で開始された場合、警告追跡プロトコルごとのフィードバックは含まれない。
自発的終了手段は、ホスト・プログラムによりプロトコル自発的終了として認識され、且つ、上述のフィードバック機構を含む、制御をゲスト・プログラムからホスト・プログラムに渡させるいずれの機構によっても達成される。一例において、Diagnose命令が、自発的終了のために用いられる。つまり、タイムスライスの完了を示すために、特定のパラメータを有するDiagnose命令が用いられる。Diagnose命令がゲスト・プログラムにより発行され、実行された後、ホスト・プログラムは、終了が時間通りであったかどうかを判断する。次いで、Diagnose後の次の順次命令(next sequential instruction)において、ゲストが再び開始されると、それが時間通りであったかどうかを示す条件コードが与えられる。条件コードは、例えば、次の順次命令においてゲストを開始するのに用いられるゲストPSWにおいて設定される。次いで、ゲストは、条件コードを試験することができる。
ホストによるゲストの自発的終了の処理が、図6を参照してさらに説明される。最初に、ゲストCPUが停止すると、制御がホストCPUに戻る(ステップ600)。制御が猶予期間内に戻されたかどうかについての判断がなされる(問い合わせ602)。制御が猶予期間内に戻された場合、ホスト・プログラムは、警告追跡割り込みプロトコルごとのゲストの自発的終了を観察し、その時にどのホストCPUがゲストCPUをプロビジョニングできるかに関係なく、ゲストCPUの次の開始に関する良いフィードバックを記憶する(ステップ604)。これは、警告追跡割り込みファシリティがインストールされていることを仮定している。インストールされていない場合、フィードバック状態は記憶されない。しかしながら、ゲストが自発的に終了するためのアクションをとるが、それが猶予期間外であった場合(問い合わせ602)、ホストCPU上のホスト・プログラムは、警告追跡割り込みプロトコルごとのゲストの自発的終了を観察し(それが早期であって、非自発的に終了する必要があったとしても)、その時にどのホストCPUがゲストCPUをプロビジョニングできるかに関係なく、ゲストCPUの次の開始に関する悪いフィードバックを記憶する(ステップ606)。同じく、これは、警告追跡割り込みファシリティがインストールされていると仮定している。インストールされていない場合、フィードバック状態は記憶されない。
その後、ホストが良いフィードバックを記憶しても、悪いフィードバックを記憶しても、ホスト・プログラムは、ホストCPUを、プリエンプトする割り当て(preempting assignment)にリダイレクトする(ステップ608)。つまり、ホストは、そのリソース(CPU)を取り戻しているので、1つ又は複数の機能を実施するようにリダイレクトされる。
さらに、ゲストCPUの次の順次命令の開始時に、どのホストCPUがゲストCPUをプロビジョニングするかに関係なく、フィードバック状態が記憶された場合には、ゲストCPUを開始する前に、フィードバック状態標示を設定する(ステップ610)。一例において、フィードバック状態標示は、次の順次命令の開始を示す、例えば状態記述のPSWにおける、SIE状態記述において設定される。
警告追跡割り込みファシリティと関連した処理に関する更なる詳細を、図7−図11を参照して説明する。特に、図7は、警告追跡割り込みファシリティの処理の概要と関連した論理の一実施形態を示し、図8−図10は、本発明の1つの態様による警告追跡割り込みファシリティの処理の詳細を提供し、図11は、警告追跡割り込みの受信と関連した論理の一実施形態を示す。
図7を参照すると、最初に、ゲスト・プログラム(例えば、ゲスト・オペレーティング・システム)が、警告追跡割り込みファシリティがインストールされたことを認識する(ステップ700)。一実施形態において、このことは、ゲスト・プログラムが、例えば指定された制御ブロック内に配置されたインストール済みファシリティ・インジケータ(例えば、ビット)を観察することによって達成される。ゲスト・オペレーティング・システムが、警告追跡割り込みファシリティに参加するためのサポートを有する場合、ゲスト・オペレーティング・システムは、警告追跡割り込みファシリティ・インストール済みインジケータを認識し、次いで、プロトコルに参加する能力を表示する。一例において、これは、警告追跡処理への参加の意図を登録することを含む(ステップ702)。本明細書で説明されるように、一例において、登録は、Diagnose命令を介して行われる。登録されると、ゲスト・オペレーティング・システムは、ホストCPU及びホスト・プログラムの両方に対して、例えば共有リソース(例えば、ゲストCPU)へのアクセスを失いそうである、及び、例えば現在実行中のディスパッチ可能ユニットに対してアクションをとるべきであるという警告をゲストに与える明瞭な割り込みである、警告追跡割り込み(WTI)の処理方法を知っていることを示す。一実施形態において、登録は、WTIの受信のための必須条件である。ゲストが警告追跡割り込みファシリティに登録されていない場合、ゲストのタイムスライスが満了すると、猶予期間は提供されず、ゲストCPUは、解釈実行モードから出される。
登録されていても、一実施形態において、ゲスト・プログラムは、WTIの提示をディスエーブルにするための2つの機構を有する。例を挙げれば、例えばプログラム状況ワード(program status word、PSW)における選択されたビットを、WTIを含む全ての外部割り込みの提示をディスエーブルにするゼロに設定することができ、又は、指定された制御レジスタ(例えば、CR0)におけるビットをゼロに設定して、WTIのみをディスエーブルにすることができる。両方のビットが1である場合、WTIの提示がイネーブルにされる。WTIの提示が、WTI猶予期間の全体にわたってディスエーブルにされたままである場合、ゲストの実行がWTIの利点なしに終了し、このことは非自発的終了を構成する。
ゲストCPUの解釈実行中、ゲストCPUが、ホストCPUタイマーの外部割り込み条件(例えば、タイムスライスの満了)又はホスト・プログラムにより要求されるプリエンプションを内部認識した場合(問い合わせ704)、内部CPU処理は、ホストが制御を受け取る前に、警告追跡割り込み処理を実施するかどうかを判断する(問い合わせ706)。つまり、内部CPU処理は、ゲストが警告追跡処理に関してイネーブルにされていることをチェックし、従って、実施される処理内に警告追跡処理を含ませるべきであると判断する。警告追跡割り込み処理が実施されない場合、ゲストの解釈実行は終了し(ステップ708)、制御がホスト・プログラムに戻る(ステップ710)。問い合わせ708に戻り、警告追跡割り込み処理が実施される場合、以下でさらに詳細に説明されるようにその処理が実施される(ステップ712)。
警告追跡割り込み処理の更なる詳細の実施形態が、図8−図10を参照して説明される。この処理においては、次のものを含む多数の制御インジケータが用いられる。
アーキテクチャ的に視覚可能ではないが、内部CPU論理により用いられる、警告追跡割り込みファシリティ猶予期間アクティブ内部制御(例えば、Gビット);
1である場合、WTIがゲストに提示され、ゼロである場合、WTIが提示されなかったことを示す、警告追跡割り込み(WTI)提示内部制御(例えば、Pビット)。警告追跡割り込みファシリティ猶予期間アクティブ内部制御と同様に、WTI提示内部制御は、アーキテクチャ的に視覚可能ではないが、内部CPU論理により用いられる。
例えば、ゲストCPU状態記述における警告追跡介入要求インジケータである、ゲスト制御のホスト・プログラム・プリエンプション(例えば、Tビット);及び、
Eインジケータが1である場合、外部割り込みが可能である。一例において、Eインジケータは、現在のプログラム状況ワード(PSW)内のビットである。
図8を参照すると、一例において、ホストCPUタイマー割り込み条件が認識される(例えば、タイムスライスの満了)か、又は警告追跡介入要求(例えば、ホストは、CPUリソースの早い戻り、即ち、タイムスライスの終了前の戻りを望む)が認識される。ホストCPUタイマー割り込み条件が認識された場合(問い合わせ800)、猶予期間アクティブ制御インジケータが設定されるか(例えば、Gが1に等しいか)どうかについての判断がなされる(問い合わせ802)。Gが設定されない場合、Gインジケータが、例えば1に設定され(ステップ804)、警告追跡割り込みファシリティ猶予期間がまもなく開始する。次いで、ホストCPUタイマーの現在の値が保存され(保存された値は、本明細書ではオリジナル値と呼ばれる)(ステップ806)、ホストCPUタイマーを警告追跡猶予期間(例えば、50マイクロ秒)に設定する(ステップ808)。
その後、ゲストが警告追跡割り込みに関してイネーブルにされているかどうかについての判断がなされる(問い合わせ810)。一実施形態において、ゲスト・レベル2がアクティブであり、1つのゲストが別のゲストを開始させたことを示す場合、ゲスト2は、ゲスト1の割り込みに関して解釈実行モードを終了し、Guest 1 Start Interpretive Execution命令が無効にされる。従って、この時点で、処理はゲスト1としてのものである。ゲスト2がアクティブでない場合、処理は単にゲスト1を続行する。ゲストがWTIに関してイネーブルにされている場合、警告追跡外部割り込み(WTI)がゲストに提示される(ステップ812)。一例において、この割り込みは、必要に応じて、1つ又は複数の機能(例えば、クリーンアップ)を実施するために猶予期間を有することを示すように提示された、特定の割り込みコードを含む。
さらに、Pが、WTIが提示されたことを示す1に設定される(ステップ814)。同じく、Tビットが、インターロック更新機能を用いて1に設定される(介入要求がもともと使用されていた場合、これは既に1であった可能性がある)(ステップ816)。WTIが提示されたかどうかに関係なく、ホストCPUタイマーの猶予期間をデクリメントを続行する(ステップ818)。次いで、この処理は終了する(ステップ820)。一例において、このプロセスを終了する指定は、CPUが警告追跡割り込みファシリティの現在の処理を完了し、且つ、CPUの現在の状態により指示される他の処理に戻ることを示す。
問い合わせ810に戻ると、ゲストが警告追跡割り込みに関してイネーブルにされていない場合、処理はステップ816に進む。この例では、ゲストはWTIに関してイネーブルにされていないので、WTIをゲストに提示することはできない。しかしながら、Tビットは保留中に設定されるので、ゲストがWTIに関してイネーブルにされたときに、後でこれを検出することができる。
問い合わせ800に戻ると、これがホストCPUタイマー割り込み条件ではない場合、警告追跡介入要求が認識される(即ち、ホストのプリエンプション)。つまり、ゲストの状態記述の介入要求フィールドにおけるTビットは、1である。従って、Gインジケータが設定されているかどうかについての判断がなされる(問い合わせ850)。設定されていない場合(例えば、0)、処理はステップ804を続行する。この状況において、Tが1に等しいという条件は、WTIプロセスを開始するための最初の理由になる。しかしながら、Gビットが設定されている場合、Pが設定されているかどうかについての判断がなされる(問い合わせ852)。Pが設定されていない場合(例えば、0に等しい)、処理は、WTIを提示しようとして、ステップ810を続行する。しかしながら、Pが設定されている場合(例えば、0に等しくない)、警告追跡ファシリティ猶予期間が開始した後、Tが1に等しいという発見は効果をもたらさず、プロセスは終了する(ステップ854)。
問い合わせ802に戻ると、Gが設定されている場合(例えば、1に等しい)、ゲストCPUは既に猶予期間内に実行されており、ホストCPUタイマーの満了は、猶予期間が満了したことを示す。従って、WTIサイクルは既に開始されており、猶予期間は満了している。従って、図9を参照すると、以前に保存されたオリジナルのホストCPUタイマー値を、猶予期間中に実際に使用された時間量だけ減らし、次いで、ホストCPUタイマー内にロードする(ステップ860)。解釈実行モードは終了し(ステップ862)、ホストCPUタイマー外部割り込みをホストに提示する(ステップ864)(これは、非自発的終了の1つの形態である)。
上記に加えて、WTIに関してCPUをイネーブルにすることができる特定の命令を介して、WTI分析を開始することができる。例えば、図10を参照すると、最初に、例えば、本明細書で説明されるように、PSW内の指定ビットを設定することができる、Load PSW(Extended)命令及びStore Then or System Mask命令、並びに制御レジスタ内の選択されたビットを設定することができるLoad Control命令を含む、WTIに関してCPUをイネーブルにすることができる多数の命令が、監視を実施する。例えば、割り込みに関してイネーブルにすることができる命令は、潜在的な警告追跡処理に関してTビットをチェックする。T=0である場合(問い合わせ880)、WTIは存在せず、このプロセスは終了する(ステップ884)。しかしながら、T=1である場合、処理は問い合わせ822を続行する。
問い合わせ882において、Pが設定されている(例えば、1に等しい)かどうかについての判断がなされる。設定されている場合、イネーブルメントが既に検出されているので、このプロセスは終了する(ステップ884)。しかしながら、Pが設定されていない場合(例えば、1に等しくない)、Gが設定されている(例えば、1に等しい)かどうかについての更なる判断がなされる(問い合わせ886)。設定されていない場合、処理はステップ804を続行する(図8)。しかしながら、Gが設定されている場合(例えば、1に等しい)(問い合わせ886)(図10)、処理は、図8における問い合わせ810を続行し(ステップ888)、処理が終了する。
警告追跡割り込みの処理の更なる詳細を、図11を参照して説明する。ゲスト・プログラムが警告追跡割り込みを受信すると、ゲスト・プログラムは、例えばディスパッチ可能作業ユニットを再ディスパッチ可能にするために、実施すべきいかなる機能(例えば、OS機能)も実施する(ステップ900)。例えば、ゲストは、特定の時点においてディスパッチ可能ユニットを停止し、その状態を保存し、それを別のゲストCPUに移動させるか、又は状態情報を提供することによってその移動をイネーブルにする等である。ゲスト・オペレーティング・システムは、これが、警告追跡クリーンアップ完了信号をホスト・プログラムに発行することによって終了した(自発的終了としても知られる)ことを知らせる(ステップ902)。この信号は、ゲスト操作に残りのタイムスライスを放棄させるいずれの機構としてもよい。しかしながら、この信号は、ホスト・プログラムにより、プロトコルのクリーンアップ部分として認識される。一例において、Diagnose命令のクリーンアップ完了機能が用いられる。
猶予期間が満了する前にゲスト・プログラムがクリーンアップ完了信号を発行した場合(問い合わせ904)、ホスト・プログラムは、ゲストCPUが期間内に終了したことを記憶する(ステップ906)。これが自発的終了である。次にゲストCPUが開始されると、信号の時間通りの(on−time)性質が再びゲストCPUに示される(ステップ908)。一例において、ゲスト再開PSWが、成功条件コード(例えば、条件コード0)を示すように、設定される。
問い合わせ904に戻ると、理由は何であれ、ゲスト・プログラムの時間がかかりすぎた場合、ホストCPUタイマーが猶予期間を0までデクリメントしたことで猶予期間が満了し、従って、ホストCPUタイマーの外部割り込み条件をCPUに提示する。この場合、CPUは、ゲストが既に猶予期間内にあったと認識し、別の猶予期間を与えない。代わりに、ゲストの実行が停止し、外部割り込みの受信によって、制御がホスト・プログラムに戻る。ホスト・プログラムは、このゲストCPUのこの終了が非自発的終了であると認識する。
次のゲストCPUの開始時に、ゲスト・オペレーティング・システムは、今や遅すぎるものの、クリーンアップ完了信号を発行することができる。ホスト・プログラムは、もはや、クリーンアップ完了信号の受信を待つことを予想していない。従って、次にゲストCPUが開始されたとき、信号が遅すぎたことが再びゲストCPUに示される(ステップ912)。一例において、次の開始時にゲストが見るゲスト再開PSWが、遅延(late)条件を示すようにマーク付けされる。遅すぎるDiagnose命令の発行は、以前に猶予期間内の終了に失敗し、後でこれといった理由もなく終了したことから、古い(stale)Diagnose命令と呼ばれることもある。
一例において、ゲストCPUの新しい開始時に、ゲスト・プログラムは、信号が猶予期間内に発行されたか又は発行されなかったかについて、プロトコルの信号再開部分をチェックすることができる。ゲスト・プログラムは、この情報を用いて、遅延した理由を調査し、将来よりタイムリーに統計値を改善するように改善を行うことができる。
一実施形態において、ゲストが全ての外部割り込みに関してディスエーブルにされている場合、外部割り込みをイネーブルにすることができる多数の命令が監視を行う。ゲストが外部割り込みに関してイネーブルにされている場合、WTIイネーブルメントを調べる。この時点で、WTIがイネーブルにされており、Pビットが0である場合、WTIがゲストCPUに提示される。
上述のように、一実施形態において、クリーンアップが完了したことを示すために、又は警告追跡割り込みファシリティの登録のために、Diagnose機能が使用される。クリーンアップの完了に関しては、Diagnose機能は、クリーンアップ・パラメータと共に発行され、実行されると、発行CPUが警告追跡外部割り込みの受信と関連したいずれかの所望の処理を実施したことを知らせる。実行が完了すると、警告追跡割り込みの後で許容されるモデル依存の時間間隔内に完了が発行されたかどうかを示す、条件コードが設定される。
登録機能に関しては、Diagnose機能が、登録パラメータと共に発行され、実行されると、発行構成が警告追跡割り込みを理解していることを知らせる。実行が完了すると、成功の条件コードが設定される。登録状態はシステムのリセットによってクリアされる。
Diagnose命令の形式の一実施形態を、図12を参照して説明する。一実施形態において、Diagnose命令1000は、Diagnose機能を示す操作コード1002と、第1レジスタ・フィールド1004(R1)と、第2レジスタ・フィールド1006(R3)と、汎用レジスタ・フィールド1008(B2)と、変位フィールド1010(D2)とを含む。一例において、D2フィールドのコンテンツを汎用レジスタB2のコンテンツに加算する。結果はデータをアドレス指定するためには使用されず、代わりに、特定のビット(例えば、ビット48−63)が操作コード拡張(operation code extension)として使用される。操作コード拡張が所定の値である場合、警告追跡クリーンアップ完了が指定され、タイムスライスは放棄される。
一例において、R3フィールドは使用されず、ゼロを含む。さらに、汎用レジスタR1の指定ビットは使用されず、ゼロを含むことになり、汎用レジスタR1の特定のビット(例えば、ビット63)が、ゼロの場合はクリーンアップ完了機能を指定し、1の場合は登録機能を指定する。
共有物理CPUを用いる論理パーティションにおいて、この機能は、その上で論理CPUが実行されている物理CPUを、別の論理CPUを割り当てることを可能にすることによって、システム性能を改善することができる。
Diagnoseを超えると、WTI猶予期間にある間にいずれの他のSIEも終了し、原因が何であれ、消費された猶予期間の時間量だけデクリメントされたホストCPUタイマーのオリジナル値を同様に復元する。
一実施形態において、論理パーティションなどの共有CPUリソースを有する構成において警告追跡外部割り込みをCPUに提示することができる機構を提供する、警告追跡割り込みファシリティが、本明細書で詳細に説明される。制御プログラムは、警告追跡外部割り込みを信号として使用して、現在実行中のディスパッチ可能ユニットを構成の異なるCPU上でディスパッチ可能にすることができる。
一実施形態において、物理プロセッサにおいてタイムスライスで実行されている論理(ゲスト)プロセッサは、例えば、論理プロセッサに割り込みを行い(共有できる物理プロセッサから割り当て解除を行い)、論理プロセッサが行っている作業を完了させること、又は別の論理プロセッサに移動させることを可能にするまでの時間量である猶予期間を示す警告信号を受信する。一例として、ゲストCPUに、そのタイムスライスが満了したこと、及び、現在のディスパッチ可能作業ユニット(DU)をプリエンプトして、これを別のゲストCPU上で再ディスパッチ可能にすべきであることを信号で知らせる。一例において、警告信号は、それがWTIであることを示す割り込みコードを有する割り込みである。更に別の例において、割り込みコードは、猶予期間に与えられたある時間量又は他の期間についての情報を含む。
一実施形態において、警告追跡割り込みファシリティは、1つのプログラム及び/又はプロセッサが1つ又は複数の他のプログラム及び/又はプロセッサとリソース(例えば、CPUリソース、又は他のリソース)を共有する非仮想環境、並びに仮想環境において使用することができる。
環境が仮想環境である一実施形態においては、ゲストの視点から:
1.ゲスト・プログラムは、警告追跡割り込みプロトコル・ファシリティのインストール済み条件を観察する。
2.ゲスト・プログラムは、警告追跡割り込みプロトコルを登録する。
3.ゲストCPUは、特定のアーキテクチャに従って、警告追跡通知を受信する(例えば、共有メモリの表示、共有I/Oデバイスの表示、割り込み)。
4.ゲストCPU上で実行されているゲスト・プログラムは、通知を受信したゲスト・プログラムの性質に従って、適用可能な処理を実施する(オペレーティング・システムごとに特有であると予想される通知の処理)。
5.ゲストCPUは、警告追跡プロトコルの自発的技術に従って、制御を放棄する。
6.ゲストCPUの次の開始時に、ゲスト・プログラムは、警告追跡プロトコルに従って、フィードバックを観察することができる。
さらに、一実施形態においては、ホストの視点から:
A.ホスト・プログラムは、警告追跡割り込みプロトコル・ファシリティのインストール条件を観察する。
1.ホスト・プログラムは、警告追跡プロトコル・ファシリティ・インストール済み標示を取得する。
2.ホスト・プログラムは、警告追跡割り込みプロトコルのインストール済み状態を永続的に記憶する。
3.ホスト・プログラムは、警告追跡プロトコル・インストール済み状態を各ゲスト構成に示す。
4.ホスト・プログラムは、全ての未登録のゲストCPUにおける警告追跡プロトコルをディスエーブルにする。
5.ホスト・プログラムは、各ゲスト構成からのゲスト警告追跡登録要求を認識するよう準備する。
B.ホスト・プログラムは、ゲストからの警告追跡登録要求を認識する。
1.ホスト・プログラムは、ゲスト構成が警告追跡プロトコルを理解していることを永続的に記憶する。
2.ホスト・プログラムは、警告追跡プロトコルに関してゲストをイネーブルにする。
C.通常のゲストCPU Xの操作中、対応するホストCPU Xを再取得するために、ゲストCPU Xのプリエンプションが用いられる。
1.CPU Yにおけるホスト・プログラムは、通知をゲストCPU Xに信号で送る
a.CPU Xは、警告追跡プロトコルに従って、共有メモリ位置の更新、共有I/Oデバイスの更新、又はゲストCPU Xへの割り込みを介して、通知をゲストCPU Xに伝える。
D.ゲストCPU Xが停止し、制御をホストCPU Xに戻す。
1.猶予期間内である場合、CPU X上のホスト・プログラムは、警告追跡プロトコルごとにゲストの自発的終了を観察し、その時にどのホストCPUがゲストCPU Xをプロビジョニングできるかに関係なく、ゲストCPU Xの次の開始に関する良いフィードバックを記憶する。
a.猶予期間内であるが、ゲストCPU Xの終了が警告追跡プロトコルに従っていない場合、フィードバック状態は記憶されない。
2.猶予期間内でない場合、CPU X上のホスト・プログラムは、警告追跡プロトコルごとにゲストの自発的終了を観察し、その時にどのホストCPUがゲストCPU Xをプロビジョニングできるかに関係なく、ゲストCPU Xの次の開始に関する悪いフィードバックを記憶する。
a.猶予期間内でないが、ゲストCPU Xの終了が警告追跡プロトコルに従っていない場合、フィードバック状態は記憶されない。
3.ホストCPU X上のホスト・プログラムは、CPU Xを、プリエンプトする割り当てにリダイレクトする。
E.ゲストCPU Xの次の順次開始は、どのホストCPUがゲストCPU Xをプロビジョニングするかに関係なく、フィードバック状態が記憶されていれば、ゲストCPU Xを開始する前に警告追跡プロトコルに従ってフィードバック標示を設定する。
一実施形態において、ゲスト構成のゲスト・プロセッサは、固有の割り込みを受け取り、この割り込みはコンピュータ・アーキテクチャのために定められ、割り込みの意味は警告追跡割り込みである。割り込みは、その割り込みを警告追跡割り込みとして識別する特別なコードを示す。割り込みは、ゲスト・プロセッサの実行終了につながる猶予期間と呼ばれる比較的短い時間間隔を暗黙的に示す。
猶予期間中、一例において、ゲスト・プログラムは、現在のディスパッチ可能作業ユニットを別のゲスト・プロセッサ上で再ディスパッチ可能にし、従って、現在のゲスト・プロセッサ上でスタックし、ホストからの次の通常のタイムスライスの開始を待つのを回避することが名目上予想される。
一例においては、比較的短い時間間隔が、ゲスト・プロセッサのホスト・プログラム開始ごとに1回だけ与えられる。時間間隔は、例えば、ゲスト・プロセッサが実行されている既存の時間間隔から与えられる。与えられた時間間隔は通常の残りのタイムスライスから割り当てられるので、これは本質的に借用時間ではなく、現在の時間間隔からの制約された時間量を使用しており、実際には、ゲスト・プロセッサが比較的短期間にプリエンプトされることを保証する。
現在のタイムスライスが満了した更に別の例において、時間間隔は、ゲスト・プロセッサが実行されている既存の時間間隔に加えた追加時間として与えられる。与えられる時間間隔は、ゲスト・プロセッサが消費するであろう、予想される次の通常の連続的な時間間隔に対するものとして、ホスト・プログラムにより考慮に入れられ、その下でゲスト・プロセッサが次に実行されると予想される。ゲスト・プロセッサが、実際に比較的短期間にプリエンプトされることを保証することが、依然として意図される。
一例において、警告追跡イベントに対する割り込み要求を生成し、共有CPU上での現在の実行間隔がまもなく終わることを、プログラムに知らせることができる。この割り込み要求は、構成が登録され、且つ警告追跡割り込みファシリティに関してイネーブルにされている場合に生成される保留状態タイプである。
プログラム(例えば、ホストとゲスト)間の協調的処理により、プログラム(例えば、ゲスト・オペレーティング・システム)間のリソースの共有(例えば、CPU)が最適化される。1つ又は複数の態様は、例えば、同じCPU利用により良好な応答時間をもたらす。さらに、ハイパーバイザによるディスパッチ解除の前に、システムのシリアル化が解放される。
更に別の実施形態において、本発明の1つ又は複数の態様をオペレーティング・システムからの要求と共に用いて、個々の実行スレッドを続行させ、時間的制約のある作業の経過時間を改善することができる。つまり、スレッドが機能を実施するための付加的な時間を要求すること、又はスレッドに付加的な時間が与えられることが可能である。
当業者により認識されるように、本発明の1つ又は複数の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の1つ又は複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の1つ又は複数の態様は、コンピュータ可読プログラム・コードが組み込まれた、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
1つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子、磁気、光学、電磁気、赤外線又は半導体のシステム、装置若しくはデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いるため、又はそれらと接続して用いるためにプログラムを収容又は格納することができるいずれかの有形媒体とすることができる。
ここで図13を参照すると、一例において、コンピュータ・プログラム製品1100は、例えば、本発明の1つ又は複数の態様を提供し、容易にするように、コンピュータ可読プログラム・コード手段又は論理1104をその上に格納するための1つ又は複数の非一時的(non−transitory)コンピュータ可読ストレージ媒体1102を含む。
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
本発明の1つ又は複数の態様に関する操作を実行するためのコンピュータ・プログラム・コードは、Java(登録商標)、SmallTalk(登録商標)、C++等のようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語、アセンブラ、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
本発明の1つ又は複数の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ以上のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにもすることもできる。
図面内のフローチャート及びブロック図は、本発明の1つ又は複数の態様の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
上記に加えて、本発明の1つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダにより、供与し、提供し、配置し、管理し、サービスを行うことなどができる。例えば、サービス・プロバイダは、1つ又は複数の顧客に対して本発明の1つ又は複数の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャを作成し、保持し、サポートすることなどができる。見返りとして、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1つ又は複数の第三者に対する広告コンテンツの販売から支払いを受けることができる。
本発明の一態様において、本発明の1つ又は複数の態様を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、本発明の1つ又は複数の態様を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することが可能であり、そこでは、コードは、コンピューティング・システムと協働して、本発明の1つ又は複数の態様を実施することができる。
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを統合するためのプロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は本発明の1つ又は複数の態様を含む。コードは、コンピュータ・システムと協働して、本発明の1つ又は複数の態様を実施することができる。
種々の実施形態が上述されたが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境が、本発明の1つ又は複数の態様を組み込み、用いることが可能である。さらに、猶予期間は、命令若しくはサイクルの数、又は他の定量化可能な値のなどの、時間量以外のものとすることができる。本発明の範囲から逸脱することなく、多くの変更及び/又は追加をなすことができる。
さらに、他のタイプのコンピューティング環境が、本発明の1つ又は複数の態様から利益を得ることができる。一例として、システム・バスを通してメモリ要素に直接的に又は間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードを格納及び/又は実行するのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行時に用いられるローカル・メモリと、大容量記憶装置と、実行時に大容量記憶装置からコードを取得しなければならない回数を減少させるために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリとを含む。
入力/出力即ちI/O装置(キーボード、ディスプレイ、ポインティング装置、DASD、テープ、CD、DVD、親指ドライブ、及び他のメモリ媒体等を含むが、これらに限定されるものではない)は、直接的に、又は介在するI/Oコントローラを通して、システムに結合することができる。データ処理システムが、介在するプライベート・ネットワーク又は公衆ネットワークを通して、他のデータ処理システム又は遠隔プリンタ若しくはストレージ装置に結合できるように、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム及びイーサネット・カードは、利用可能なタイプのネットワーク・アダプタのほんの数例にすぎない。
本発明の1つ又は複数の態様を組み込むことができるコンピューティング環境の他の例が以下に説明される。
図14を参照すると、本発明の1つ又は複数の態様を実装するためのホスト・コンピュータ・システム5000の代表的なコンポーネントが描かれている。代表的なホスト・コンピュータ5000は、コンピュータ・メモリ(即ち、中央ストレージ)5002と通信状態にある1つ又は複数のCPU5001に加えて、ストレージ媒体デバイス5011及び他のコンピュータ又はSAN等と通信するためのネットワーク5010へのI/Oインターフェースを含む。CPU5001は、アーキテクチャ化された(architected)命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。CPU5001は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(Dynamic Address Translation、DAT)5003を有することができる。DATは、一般的に、変換をキャッシュに入れるための変換ルックアサイド・バッファ(TLB)5007を含むので、コンピュータ・メモリ5002のブロックへの後のアクセスは、アドレス変換の遅延を必要としない。一般的に、コンピュータ・メモリ5002とプロセッサ5001との間に、キャッシュ5009が用いられる。キャッシュ5009は、1つより多いCPUが利用可能な大容量のキャッシュと、大型のキャッシュと各CPUとの間のより小型でより高速な(下位レベルの)キャッシュとを有する階層とすることができる。幾つかの実装において、下位レベルのキャッシュは、命令のフェッチ及びデータ・アクセスのために別個の下位レベル・キャッシュを与えるように分割される。一実施形態においては、キャッシュ5009を介して、命令フェッチ・ユニット5004により、命令がメモリ5002からフェッチされる。命令は、命令デコード・ユニット5006でデコードされ、命令実行ユニット5008にディスパッチされる(幾つかの実施形態においては他の命令と共に)。一般的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの実行ユニット5008が用いられる。命令は、実行ユニットにより実行され、必要に応じて命令が指定したレジスタ又はメモリからオペランドにアクセスする。メモリ5002からオペランドにアクセスする(ロード又はストアする)場合、典型的には、ロード/ストア・ユニット5005が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
既述のように、コンピュータ・システムは、ローカル(又は主)ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び1つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、永続的に割り当てられた記憶位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、(入力装置から)データ及びプログラムの両方が、主ストレージにロードされる。
主ストレージは、キャッシュと呼ばれることもある、1つ又は複数のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより観察することはできない。
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は短縮してライン)と呼ばれる、整数境界(integral boundary)上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ若しくは命令キャッシュへのストレージのプリフェッチ、又は、キャッシュからのデータの解放に影響を与える、PREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令を提供することができる。
ストレージは、長い水平方向のビットの文字列と考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、8ビット単位で分割される。8ビットの単位は1バイトと呼ばれ、全ての情報の形式の基本的な構成要素(building block)である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の0で始まり、左から右への順序で進む。アドレスは、符号なしの2進整数であり、24ビット、31ビット、又は64ビットである。
情報は、ストレージとCPU又はチャネル・サブシステムとの間で、一度に1バイトずつ、又は1バイト・グループずつ伝送される。特に断りのない限り、例えばz/Architecture(登録商標)においては、ストレージ内のバイト・グループは、グループの左端のバイトによりアドレス指定される。グループ内のバイト数は、実行される操作により暗黙に又は明示的に指定される。CPU操作に用いられる場合、バイト・グループはフィールドと呼ばれる。例えばz/Architecture(登録商標)においては、バイト・グループの中の各々において、ビットは、左から右の順序で番号が付けられる。z/Architecture(登録商標)においては、左端ビットは「上位(high−order)」ビットと呼ばれることがあり、右端ビットは「下位(low−order)」ビットと呼ばれることがある。しかしながら、ビット数は、ストレージ・アドレスではない。バイトだけを、アドレス指定することができる。ストレージ内の1つのバイトの個々のビットに対して操作を行うためには、そのバイト全体にアクセスされる。1バイトの中のビットには、左から右に0から7までの番号が付けられる(例えばz/Architecture(登録商標)において)。1つのアドレスの中のビットには、24ビット・アドレスの場合は8−31若しくは40−63の番号を付けることができ、又は、31ビット・アドレスの場合は1−31若しくは33−63の番号を付けることができ、64ビット・アドレスの場合は0−63の番号が付けられる。複数のバイトから成る他のいずれかの固定長形式の中では、その形式を構成するビットには、0から始まる連続番号が付けられる。エラー検出のため及び好ましくは訂正のために、各バイト又はバイト・グループと共に、1つ又は複数の検査ビットが伝送されることがある。このような検査ビットは、マシンにより自動的に生成されるものであり、プログラムが直接制御することはできない。記憶容量は、バイト数で表わされる。ストレージ・オペランド・フィールドの長さが命令のオペレーション・コードで暗黙的に指定される場合、そのフィールドは固定長を有すると言われ、固定長は、1バイト、2バイト、4バイト、8バイト、又は16バイトとすることができる。一部の命令では、より長いフィールドが暗黙的に指定されることもある。ストレージ・オペランド・フィールドの長さが暗黙的に指定されず明示的に記述される場合は、そのフィールドは可変長を有すると言われる。可変長オペランドは、1バイトのインクリメントにより変化し得る(又は、一部の命令では、2バイトの倍数若しくは他の倍数)。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るとしても、指定されたフィールド内に含まれるバイト位置のコンテンツのみが置き換えられる。
特定の情報単位は、ストレージ内の整数境界上にあることになる。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある2バイト、4バイト、8バイト、及び16バイトのフィールドには、特別な名称が与えられる。ハーフワードは、2バイト境界上にある2個の連続したバイトのグループであり、これは、命令の基本的な構成要素である。ワードは、4バイト境界上にある4個の連続したバイトのグループである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続したバイトのグループである。クワッドワード(quadword)は、16バイト境界上にある16個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワッドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、又は4個のビットが0になる。命令は、2バイトの整数境界上にあることになる。大部分の命令のストレージ・オペランドは、境界合わせ(boundary alignment)要件をもたない。
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納される場合には、その格納が後にフェッチされる命令を変更するかどうかに関係なく、著しい遅延が生じることがある。
一実施形態において、本発明は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の1つ又は複数の態様と整合性がある)により実施することができる。図14を参照すると、本発明の1つ又は複数の態様を具体化するソフトウェア・プログラム・コードには、ホスト・システム5000のプロセッサ5001により、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス5011からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ5002からユーザに分散させても、又は、こうした他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラムの機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体デバイス5011から相対的により高速のコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
図15は、本発明の1つ又は複数の態様を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図15のシステム5020は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1つ又は複数のプロセッサ5026と、周知の技術に従ってプロセッサ5026とシステム5021の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、ハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュメモリのいずれかを含む)又はテープドライブを含むことができる、メモリ5025及び長期ストレージ5027に接続する。システム5021はまた、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置5022をマイクロプロセッサ5026にも接続する。
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット又はモデムである。或いは、システム5021は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。システム5021は、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)、又はシステム5021内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
図16は、本発明の1つ又は複数の態様を実施することができるデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、各々が複数の個々のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
さらに図16を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ5046)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、且つ、ワークステーション5045から直接アクセスすることもできる遠隔サーバ5048)のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、各々の個々のネットワークへの入口点として働く。ゲートウェイは、1つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ5046は、通信リンクによって別のネットワーク(例えば、インターネット5047)に結合できることが好ましい。ゲートウェイ5046はまた、通信リンクを用いて、1つ又は複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM(登録商標) eServer(商標)System z(登録商標)サーバを用いて実装することができる。
図15及び図16を同時に参照すると、本発明の1つ又は複数の態様を具体化することができるソフトウェア・プログラム・コードには、一般的に、CD−ROMドライブ又はハードドライブといった長期ストレージ媒体5027から、システム5020のプロセッサ5026によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ5050、5051に分散させても、或いは、こうした他のシステムのユーザが用いるために、ネットワーク上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
或いは、プログラム・コードをメモリ5025内で具体化し、プロセッサ・バスを用いてプロセッサ5026によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラム5032の機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、メインストア(主メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
図17を参照すると、プロセッサ5026についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1つ又は複数のレベルのキャッシュ5053が用いられる。キャッシュ5053は、用いられる可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(snoop)」アルゴリズムによって与えられる。プロセッサ・システムの主メモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムにおいて、主ストレージ5025は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025との間でページングされるデータのページを「キャッシュに入れる」。
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを常時監視している。z/Architecture(登録商標)プロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(縮小命令セット・コンピューティング)命令は、典型的には固定長であり、CISC(複合命令セット・コンピューティング)命令は、典型的には可変長である。IBM(登録商標) z/Architecture(登録商標)の命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)操作により、プログラム・カウンタ5061が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ5061にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
次いで、フェッチされた命令が、プロセッサ5026によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受け取り、命令の操作コードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、又は実行される命令の即値フィールドのいずれかから、実行ユニット5057に与えられる。実行の結果は、格納された場合には、メモリ5025、レジスタ5059、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
プロセッサ5026は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット5057、5058、5060を有する。図18を参照すると、実行ユニット5057は、インターフェース論理5071を介して、アーキテクチャ化された汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、ロード・ストア・ユニット5060、及び他のプロセッサ・ユニット5065と通信することができる。実行ユニット5057は、幾つかのレジスタ回路5067、5068、5069を用いて、算術論理演算ユニット(ALU)5066が動作する情報を保持することができる。ALUは、加算(ADD)、減算(SUBTRACT)、乗算(MULTIPLY)、及び除算(DIVIDE)などの算術演算、並びに、論理積(AND)、論理和(OR)、及び排他的論理和(XOR)、ローテート(ROTATE)及びシフト(SHIFT)のような論理関数を実行する。ALUは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コード及び回復サポート論理を含む、他のアーキテクチャ化ファシリティ5072を提供することができる。典型的には、ALU演算の結果は、出力レジスタ回路5070に保持され、この出力レジスタ回路5070が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
例えばADD命令は、算術及び論理機能を有する実行ユニット5057で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対して操作コードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3オペランドに格納し、ここで第3オペランドは、第3のレジスタであっても又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)5066を用いることが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたものALU5066もある。データは、アーキテクチャに応じて、ビッグエンディアン(最下位のバイトが最も高いバイト・アドレスである)、又はリトルエンディアン(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM z/Architecture(登録商標)は、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
図19を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送られ、この分岐ユニット5058は、多くの場合、分岐履歴テーブル5082のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056、又は他の回路5073と通信することができる。
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、或いは、(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタのコンテンツとを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、オペコード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architecture(登録商標)の長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、指標レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置(location)は、典型的には、特に断りのない限り、主メモリ(主ストレージ)内の記憶位置を意味する。
図20を参照すると、プロセッサは、ロード/ストア・ユニット5060を用いて、ストレージにアクセスする。ロード/ストア・ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059又は別のメモリ5053の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059又は別のメモリ5053の記憶位置から取得したデータをメモリ5053内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持することになる。ロード/ストア・ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、又は他の要素5083と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ALU5085、及び制御論理5090を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architecture(登録商標)では、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DATが変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRU(Least Recently Used)を含む種々の置換アルゴリズムによって管理することができる。
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
I/Oユニット5054(図17)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(登録商標) System z(登録商標)のようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
さらに、他のタイプのコンピューティング環境が、本発明の1つ又は複数の態様から利益を得ることができる。一例として、本明細書で述べられるように、環境は、特定のアーキテクチャ(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む)又はそのサブセットをエミュレートする(例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で)エミュレータ(例えば、ソフトウェア又は他のエミュレーション機構)を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能とは異なるアーキテクチャを有することができたとしても、エミュレータの1つ又は複数のエミュレーション機能により、本発明の1つ又は複数の態様が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又は操作を実施する。
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、随意的に、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行することを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の1つ又は複数のサブルーチンとして実装される。
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/Architecture(登録商標)のIBM(登録商標)サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のIBM(登録商標)メインフレーム・サーバにおいて、及び、IBM(登録商標)の他のマシン(例えば、Power Systemsサーバ及びSystem x(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(登録商標)などによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture(登録商標)下でそのハードウェア上で実行することに加えて、Linux(登録商標)を用いること、並びに、一般に実行がエミュレーション・モードにある、Hercules、又はFSI(Fundamental Software,Inc)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その1つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ1の機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「C」サブルーチン又はドライバにおいて、或いは好ましい実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。種々のソフトウェア及びハードウェア・エミュレーションの特許には、これらに限られるものではないが、Beausoleil他による「Multiprocessor for Hardware Emulation」という名称の特許文献1、Scalzi他による「Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor」という名称の特許文献2、Davidian他による「Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions」という名称の特許文献3、Gorishek他による「Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non−Native Code to Run in a System」という名称の特許文献4、Lethin他による「Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method」という名称の特許文献5、Eric Trautによる「Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions」という名称の特許文献6、及び他の多くが挙げられ、これらの参考文献は、当業者が利用可能なターゲット・マシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
図21において、ホスト・アーキテクチャのホスト・コンピュータ・システム5000’をエミュレートする、エミュレートされたホスト・コンピュータ・システム5092の一例が提供される。エミュレートされたホスト・コンピュータ・システム5092では、ホスト・プロセッサ(CPU)5091は、エミュレートされたホスト・プロセッサ(又は仮想ホスト・プロセッサ)であり、且つ、ホスト・コンピュータ5000’のプロセッサ5091のものとは異なるネイティブな命令セット・アーキテクチャを有するエミュレーション・プロセッサ5093を含む。エミュレートされたホスト・コンピュータ・システム5092は、エミュレーション・プロセッサ5093がアクセス可能なメモリ5094を有する。例示的な実施形態において、メモリ5094は、ホスト・コンピュータ・メモリ5096の部分と、エミュレーション・ルーチン5097の部分とに区分化される。ホスト・コンピュータ・メモリ5096は、ホスト・コンピュータ・アーキテクチャに従い、エミュレートされたホスト・コンピュータ・システム5092のプログラムに利用可能である。エミュレーション・プロセッサ5093は、エミュレートされたプロセッサ5091のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令を実行し、このネイティブ命令はエミュレーション・ルーチン・メモリ5097から取得されたものであり、且つ、エミュレーション・プロセッサ5093は、シーケンス及びアクセス/デコード・ルーチンにおいて取得される1つ又は複数の命令を用いることにより、ホスト・コンピュータ・メモリ5096の中のプログラム由来の実行のためのホスト命令にアクセスすることができ、このシーケンス及びアクセス/デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができる。ホスト・コンピュータ・システム5000’のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、エミュレーション・プロセッサ5093において利用可能な(汎用レジスタ、及び仮想アドレスの動的変換といった)機能を利用することもできる。ホスト・コンピュータ5000’の機能をエミュレートする際にプロセッサ5093を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。