(57)【特許請求の範囲】
【請求項１】
プロセッサ、メモリおよび入出力デバイスを含む処理環境において、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅのエミュレーションのための命令実行を制御する方法であって、
前記ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートする命令ストリームの命令ルーチンを実行することと、
前記命令ルーチンの実行に応答して、処理を前記命令ストリームの別の命令ルーチンに継続すべきなのか、あるいはテスト・セットを処理するべきなのかを判定するためにテストを使用することと、
前記判定に応答して前記別の命令ルーチンまたは前記テスト・セットを実行することと
を含み、
前記テストが、前記判定において、動的にセットされる変数を使用し、
前記変数に、前記テスト・セットに依存する値がセットされ、前記値が、前記命令ストリームの実行中に変更可能であり、
前記テストの前記使用が、どのように進行すべきかを判定するために、前記ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの命令カウンタを前記変数の値と比較することを含み、
前記テスト・セットが、前記テスト・セットの前に実行されたテスト・セットにより複数のテスト・セットから選択され、
前記複数のテスト・セットが、命令ページ境界またぎテスト・セット、Ｉ−ＰＥＲフェッチ・テスト・セット、Ｉ−Ｓｔｅｐおよびａｄｓｔｏｐテスト・セット、開始および終了テスト・セット、ならびに統計収集実行モード決断テスト・セットのうちの少なくとも１つを含む方法。
【請求項２】
前記テスト・セットが、複数の命令ルーチンによって使用可能であり、前記複数の命令ルーチンが前記テスト・セット・コードを欠くことを可能にする、請求項１に記載の方法。
【請求項３】
前記処理環境の状態の評価を実行することと、
前記評価に少なくとも部分的に基づいて前記テスト・セットを選択することと
をさらに含む、請求項１に記載の方法。
【請求項４】
前記テストが、前記命令ルーチンに関連する復号／ディスパッチ・ルーチンに含まれ、前記命令ストリームの各命令ルーチンは、分散された復号／ディスパッチ・ルーチンに関連付けられる、請求項１に記載の方法。
【請求項５】
前記別の命令ルーチンを、前記実行される命令ルーチンと同一または前記実行される命令ルーチンと異なるものにすることができる、請求項１に記載の方法。
【請求項６】
請求項１ないし５のいずれかに記載の方法の全ステップを実行するように適合された手段を含むシステム。
【請求項７】
コンピュータ・システム上で実行される時に請求項１ないし５のいずれかに記載の方法の全ステップを前記コンピュータ・システムに実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的には、処理環境内の処理に関し、具体的には、処理環境内の命令実行の制御に関する。
【背景技術】
【０００２】
通常、命令ストリームの実行中には、単一の命令が実行され、複数のテストが実行され、その後、次の命令が実行されるなどである。実行されるテストは、たとえば、ページ境界がまたがれているかどうかの検査、ある種のデバッギング・モードなど、特定の処理モードがアクティブであるかどうかの検査、および適当な実行モードの判定を含む。これらのテストは、命令実行が正しく進行することを保証するために、各命令の後に実行される。
【０００３】
これらのテストの実行は、正しい命令実行を保証するが、非常にコストがかかる。すなわち、各命令の後のこれらのテストの実行は、システム性能にかなり影響する。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」ＩＢＭ  Ｐｕｂｌｉｃａｔｉｏｎ  Ｎｏ．ＳＡ２２−７８３２−０４、２００５年９月
【発明の概要】
【発明が解決しようとする課題】
【０００５】
前述に基づいて、テストがより低い頻度で実行されるように、処理を能率的にする機能の必要が存在する。たとえば、テストを実行する必要がない時がある。一例として、実行される命令がページの始めにある場合に、ページ境界またぎをチェックする必要はない。したがって、選択された時にテストを実行することを可能にする機能の必要が存在する。さらに、さまざまなテストの実行なしに別の命令の後にある命令を処理することを可能にする機能の必要が存在する。
【課題を解決するための手段】
【０００６】
請求項１で請求される方法ならびに対応するシステムおよびコンピュータ・プログラムの提供を介して、従来技術の短所が克服され、追加の利益が実現される。
【０００７】
追加の特徴および利益は、本発明の技術を介して実現される。本発明の他の実施形態および態様は、本明細書で詳細に説明され、請求される発明の一部と考えられる。
【０００８】
本発明の１つまたは複数の態様を、本明細書の末尾の特許請求の範囲で例として特に指摘し、明確に請求する。本発明の前述および他の目的、特徴、および利益は、添付図面と共に解釈される次の詳細な説明から明白である。
【図面の簡単な説明】
【０００９】
【図１】本発明の１つまたは複数の態様を組み込み、使用する処理環境の一実施形態を示す図である。
【図２】本発明の態様による図１の処理環境のシステム・アーキテクチャの一実施形態を示す図である。
【図３】本発明の態様による図２のシステム・アーキテクチャのエミュレータの一実施形態のさらなる詳細を示す図である。
【図４】本発明の態様による図３のエミュレータの中央処理装置（ＣＰＵ）実施態様の一実施形態のさらなる詳細を示す図である。
【図５】本発明の態様による図４のＣＰＵ実施態様のインタープリタ・コードの一実施形態のさらなる詳細を示す図である。
【図６】本発明の態様による命令実行のフローの一実施形態を示す図である。
【図７】本発明の態様による命令ストリームの実行に関連する論理の一実施形態を示す図である。
【図８】本発明の態様による図７のテスト・セットの処理に関連する論理の一実施形態を示す図である。
【図９】本発明の１つまたは複数の態様を組み込んだコンピュータ・プログラム製品の一実施形態を示す図である。
【発明を実施するための形態】
【００１０】
本発明の態様によれば、機能が、処理環境内で命令実行を制御するために提供される。一例として、メインライン命令ストリーム内の命令は、単一のテストに合格することに応答して処理され続ける。しかし、テストに合格しない場合には、メインライン・ストリーム内の命令ではなく、テスト・セットが実行される。
【００１１】
単一のテストは、本明細書でｅｎｄ−ｏｆ−ｒａｎｇｅ（範囲の終り）と称する、ある値が選択的にセットされる変数との命令カウンタの比較を含む。その値が満足されない間は、命令実行が、メインライン命令ストリーム内の次の命令に進み続ける。しかし、その値に達するかこれを超えた時には、実行が、失敗して所定のテスト・セットになり、このテスト・セットが実行される。
【００１２】
一実施形態で、テスト・セットの処理中に、バッファを使用して命令実行を容易にすることができる。たとえば、ある種の命令は、処理される時に特殊な処理を必要とする（たとえば、Ｅｘｅｃｕｔｅ命令およびページ境界をまたぐ命令）。この処理を容易にするために、バッファが使用され、このバッファに、必要な場合または望まれる場合に、ターゲット命令がコピーされ、命令に対する変更が可能になる。
【００１３】
本発明の１つまたは複数の態様を組み込み、使用する処理環境の一実施形態を、図１を参照して説明する。この例では、処理環境１００は、ネイティブ・アーキテクチャと呼ぶことができる１つのアーキテクチャに基づくが、ゲスト・アーキテクチャと呼ぶことができるもう１つのアーキテクチャをエミュレートする。例として、ネイティブ・アーキテクチャは、米国ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社によって提供されるＰｏｗｅｒ４もしくはＰｏｗｅｒＰＣ（Ｒ）アーキテクチャまたはＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社によって提供されるＩｎｔｅｌ（Ｒ）アーキテクチャであり、ゲスト・アーキテクチャは、やはり米国ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の諸態様は、参照によってその全体を本明細書に組み込まれる、「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、ＩＢＭ  Ｐｕｂｌｉｃａｔｉｏｎ  Ｎｏ．ＳＡ２２−７８３２−０４、２００５年９月に記載されている。
【００１４】
処理環境１００は、たとえば、たとえば１つまたは複数のバス１０８を介して互いに結合された、ネイティブ・プロセッサ１０２（たとえば、中央処理装置（ＣＰＵ））、メモリ１０４（たとえば、メイン・メモリ）、および１つまたは複数の入出力（Ｉ／Ｏ）デバイス１０６を含む。例として、ネイティブ・プロセッサ１０２は、米国ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社（ＩＢＭ（Ｒ））によって提供されるｐＳｅｒｉｅｓ（Ｒ）サーバの一部である。ＩＢＭ（Ｒ）、ｐＳｅｒｉｅｓ（Ｒ）、Ｐｏｗｅｒ  ＰＣ（Ｒ）、およびｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）は、米国ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標である。Ｉｎｔｅｌ（Ｒ）は、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標である。本明細書で使用される他の名前が、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社または他の会社の登録商標、商標、または製品名である場合がある。
【００１５】
ネイティブ・プロセッサ１０２は、この環境内での処理中に使用される、１つもしくは複数の汎用レジスタまたは１つもしくは複数の特殊目的レジスタあるいはその両方など、１つまたは複数のネイティブ・レジスタ１１０を含む。これらのレジスタは、任意の特定の時点でのこの環境の状態を表す情報を含む。
【００１６】
エミュレーションを提供するために、処理環境は、エミュレータ、ゲスト・オペレーティング・システム、および１つまたは複数のゲスト・アプリケーションを含むように設計される。これらの設計された特徴を、図２を参照してさらに説明する。
【００１７】
図２を参照して、処理環境１００のシステム・アーキテクチャ２００の一実施形態を説明する。システム・アーキテクチャ２００は、たとえば、環境の設計された諸態様を定義する複数のインプリメンテーション・レイヤを含む。この特定の例では、レイヤは、１つまたは複数のインターフェースまたはコントローラあるいはその両方を介してメモリ２０４および入出力デバイスまたはネットワークあるいはその両方２０６に結合されたハードウェア２０２と、ホスト・オペレーティング・システム２０８と、エミュレータ２１０と、ゲスト・オペレーティング・システム２１２と、１つまたは複数のゲスト・アプリケーション２１４とを例として含む。１つのレイヤは、１つまたは複数のインターフェースを介して少なくとも１つの他のレイヤに結合される。たとえば、ゲスト・アプリケーション２１４は、少なくとも１つのインターフェースを介してゲスト・オペレーティング・システム２１２に結合される。他のインターフェースが、他のレイヤを結合するのに使用される。さらに、このアーキテクチャは、他のレイヤまたはインターフェースあるいはその両方をも含むことができる。図２に示されたさまざまなレイヤを、下でさらに説明する。
【００１８】
ハードウェア２０２は、処理環境のネイティブ・アーキテクチャであり、たとえば、Ｐｏｗｅｒ４、ＰｏｗｅｒＰＣ（Ｒ）、Ｉｎｔｅｌ（Ｒ）、または他のアーキテクチャに基づく。ハードウェア上で稼動するのは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社によって提供されるＡＩＸ（Ｒ）、またはＬＩＮＵＸなどのホスト・オペレーティング・システム２０８である。ＡＩＸ（Ｒ）は、米国ニューヨーク州アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標である。
【００１９】
エミュレータ２１０は、ネイティブ・アーキテクチャとは異なるアーキテクチャをエミュレートするのに使用される複数のコンポーネントを含む。この実施形態では、エミュレートされるアーキテクチャは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）であるが、他のアーキテクチャもエミュレートすることができる。エミュレーションは、ゲスト・オペレーティング・システム２１２（たとえば、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ社の登録商標であるｚ／ＯＳ（Ｒ））が、ネイティブ・アーキテクチャ上で実行することを可能にし、１つまたは複数のゲスト・アプリケーション２１４（たとえば、Ｚアプリケーション）のサポートを可能にする。エミュレータ２１０に関するさらなる詳細を、図３を参照して説明する。
【００２０】
図３を参照すると、エミュレータ２１０は、１つまたは複数のサービス・プロセス３０２に結合された共有メモリ３００と、入出力（Ｉ／Ｏ）インプリメンテーション３０４と、中央処理装置（ＣＰＵ）インプリメンテーション３０６とを含み、これらのそれぞれを、下でさらに詳細に説明する。
【００２１】
共有メモリ３００は、サービス・プロセス３０２、入出力インプリメンテーション３０４、およびＣＰＵインプリメンテーション３０６から可視のホスト内のメモリの一部の表現である。これは、独立プロセス（たとえば、サービス・プロセス、入出力インプリメンテーション、ＣＰＵインプリメンテーション）がデータを読み取り、共有メモリ内に格納することによって通信するストレージ区域である。一例として、共有メモリは、たとえばシステム・グローバル情報、ＣＰＵコンテキストおよび情報、エミュレートされたメイン・ストレージ、エミュレートされたメイン・ストレージ・キー、ならびにサブチャネル（すなわち、入出力デバイスを表すデータ構造）を含む複数の領域を含む。
【００２２】
サービス・プロセス３０２は、ＣＰＵを作成するのに使用される１つまたは複数のプロセスおよび１つまたは複数の他のプロセスを含むと同時に、開始、停止、リセット、初期プログラム・ロード（ＩＰＬ）その他などの設計されたオペレータ・ファシリティを提供する。サービス・プロセス３０２は、エミュレートされたシステム・ファシリティの表示または変更、共有リソースの入手／解放、他のメンテナンス・コマンドその他など、他の機能をも提供することができる。
【００２３】
入出力インプリメンテーション３０４は、たとえば、入出力デバイスと通信するのに使用される１つまたは複数のサブチャネル・プロセスおよび入出力コントローラを含む。入出力コントローラは、本発明の一態様で、サブチャネル・プロセスを開始し、回復を実行する責任を負う。
【００２４】
ＣＰＵインプリメンテーション３０６は、命令を実行し、その処理を管理する責任を負う。ＣＰＵインプリメンテーション３０６は、図４〜５を参照して説明する複数のコンポーネントを含む。
【００２５】
図４を参照すると、ＣＰＵインプリメンテーション３０６は、たとえば、命令を入手し、変換し、実行するのに使用されるインタープリタ・コード４００と、初期スタートアップおよびチップ（たとえば、サービス・コール論理プロセッサ（ＳＣＬＰ）プロセス）との通信を助けるアーキテクチャ化されたコプロセッサ４０２と、エミュレータのタイミング機能の責任を負うタイミング・ファシリティ４０４とを含む。インタープリタ・コード４００に関するさらなる詳細を、図５を参照して説明する。
【００２６】
インタープリタ・コード４００は、たとえば、メモリ・アクセス・ユニット４２２、ＣＰＵ制御４２６、非同期割込みハンドラ４２８、および同期割込みハンドラ４３０に結合されたインタープリテーション・ユニット４２０を含む。
【００２７】
インタープリテーション・ユニット４２０は、メモリから１つまたは複数のゲスト命令を入手し、それらのゲスト命令のネイティブ命令を提供し、それらのネイティブ命令を実行する責任を負う。ゲスト命令は、ネイティブ・プロセッサ１０２のアーキテクチャ以外のアーキテクチャで実行されるように開発されたソフトウェア命令（たとえば、機械命令）を含む。たとえば、ゲスト命令を、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）プロセッサ上で実行されるように設計されたものとすることができるが、このゲスト命令は、その代わりに、たとえばｐＳｅｒｉｅｓ（Ｒ）サーバとすることのできるネイティブ・プロセッサ１０２上でエミュレートされる。
【００２８】
一例で、ネイティブ命令の提供は、ゲスト命令に関連するエミュレータ内のコード・セグメントを選択することを含む。たとえば、各ゲスト命令は、エミュレータ内の関連するコード・セグメントを有し、この関連するコード・セグメントは、１つまたは複数のネイティブ命令のシーケンスを含み、そのコード・セグメントが、実行のために選択される。
【００２９】
さらなる例では、提供は、たとえば変換プロセス中に、所与のゲスト命令に関する命令のネイティブ・ストリームを作成することを含む。これは、機能を識別することと、同等のネイティブ命令を作成することとを含む。
【００３０】
命令がメモリ・アクセスを含む場合に、メモリ・アクセス・ユニット４２２が、共有メモリ３００へのアクセスに使用される。メモリ・アクセス・ユニットは、動的アドレス変換（ＤＡＴ）４３２またはアクセス・レジスタ変換（ＡＲＴ）４３４などの変換機構を使用して、論理アドレスを絶対アドレスに変換することができ、この絶対アドレスが、必要な場合に、メモリにアクセスするのに使用され、あるいはさらに変換され得る。
【００３１】
この実施形態では、インタープリテーション・ユニット４２０内の処理は、能率的にされなければならない。したがって、待ち状態またはあるアーキテクチャ・レベルから別のアーキテクチャ・レベルへ（たとえば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）からＥＳＡ／３９０へ）の変更その他など、より複雑な状況が生じる場合に、制御は、ＣＰＵ制御４２６に転送され、このＣＰＵ制御４２６が、イベントを処理し、制御をインタープリテーション・ユニット４２０に返す。
【００３２】
さらに、割込みが発生する場合に、処理は、インタープリテーション・ユニット４２０から、割込みが非同期割込みである場合には非同期割込みハンドラ４２８に、割込みが同期割込みである場合には同期割込みハンドラ４３０に遷移する。割込みが処理された後に、処理は、インタープリテーション・ユニット４２０に戻る。
【００３３】
具体的に言うと、インタープリテーション・ユニットは、共有メモリ内のある種の位置を監視し、ある位置が変化した場合に、これは、割込みがＣＰＵまたは入出力のうちの１つによってセットされたことを意味する。したがって、インタープリテーション・ユニットは、適当な割込みハンドラを呼び出す。
【００３４】
インタープリテーション・ユニット４２０に関するさらなる詳細を、図６を参照して説明する。具体的に言うと、図６は、インタープリテーション・ユニットに関連する処理フローの一実施形態を示す。この実施形態では、処理フローは、スレッド式と考えられる。というのは、各命令ルーチンが、関連する復号／ディスパッチ・ルーチンを有する（すなわち、中央制御を有しない）からである。このフローは、一実施形態で、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）をエミュレートしている命令を実行している。
【００３５】
図６を参照すると、処理フロー５００が、一方は本明細書でメインライン処理５０２と称し、他方はテスト・セット処理５０４と称する２つのセクションを含むことが示されている。メインライン処理は、処理が、命令の間でかなりのテストを実行せずにある命令ルーチンから別の命令ルーチンに進む、能率的にされた処理である。この実施形態では、命令実行の間に実行される唯一のテストは、メインライン処理が継続すべきかどうかまたは処理が失敗してテスト・セットにならなければならないかどうかを判定する単純なテストである。さらなるテストを実行しなければならないか、他のアクションが要求される場合には、処理は、メインライン処理を終了し、テスト・セット処理５０４に入る。テストまたは他の処理が実行されたならば、処理は、メインライン処理で再開される。大多数の時間に、処理が、メインライン処理のままになると期待される。
【００３６】
一実施形態では、メインライン処理に入る前に、ある種の初期化が実行される。たとえば、ポインタが、インタープリテーション・ユニット４２０（図５）に入力され、このポインタは、実行される命令ストリームを含む特定のファイルまたはメモリ区域を示す。この命令ストリームは、たとえば、ネイティブ・プロセッサ上で実行されるＺ命令を含む。
【００３７】
命令ストリームにポインタを設けることに加えて、命令ストリームの命令カウンタならびにエミュレートされる処理環境に関連する状態（たとえば、Ｚ状態）が、設けられる。この状態は、たとえば、命令プログラム・イベント記録（Ｉ−ＰＥＲ）モードがアクティブであるかどうか、Ｉ−ＳＴＥＰまたはＡＤＳＴＯＰがアクティブであるかどうか、現在の実行モードなどを示す、さまざまなレジスタおよびフラグを含む。状態が、評価され、その評価に基づいて、テスト・セット処理５０４（図６）のテスト・セットのうちの１つが選択される。たとえば、Ｉ−ＰＥＲモードがアクティブである場合には、ＰＥＲテスト・セットを選択してよい。ポインタには、選択されたテスト・セットがセットされ、処理は、そのテスト・セットで継続される。
【００３８】
選択されたテスト・セットが実行され、これは、下で説明するように、１つもしくは複数のテストまたは１つもしくは複数のアクションあるいはその両方を実行することを含むことができる。テスト・セットでは、処理がメインライン処理にもう一度失敗する場合に、どのテスト・セットを次に選択すべきかに関する判断を行う。さらに、メインライン処理を継続すべきかどうかを判定するための単一のテストで使用される変数ｅｎｄ−ｏｆ−ｒａｎｇｅが、セットされる。この変数は、下でさらに詳細に説明するように、実行されるテストおよび命令ストリームの処理ステージに基づいてセットされる。
【００３９】
テスト・セットの実行の後に、処理は、そのテスト・セットによって決定されるメインライン処理の命令ルーチン５０６に継続する。選択された命令ルーチンが完了する時に、制御は、選択された命令ルーチン５０６に関連する復号／ディスパッチ・ルーチン５０８で継続される。
【００４０】
復号／ディスパッチ・ルーチンは、次のオペコードについて命令ストリームを読み取り、その命令に進むか、失敗してテスト・セットに進む。たとえば、復号／ディスパッチ・ルーチンでは、単一のテストを実行して、能率的にされたメインライン処理が継続するかどうか、または処理が一時的に失敗してテスト・セット処理になるかどうかを判定する。すなわち、復号／ディスパッチ・ポイントでは、テストを行って、より複雑な処理が必要であるかどうか、または処理がメインライン・ストリーム内に留まることができるかどうかを判定する。より複雑な処理が要求される場合には、命令を囲む状況を、所定のテスト・セット内で人工的に変更して、命令ルーチンに進む前に状況を単純にする。というのは、命令ルーチンが、状況が単純であることを仮定するからである。たとえば、命令ストリームは、物理的に連続した位置から命令をフェッチできると仮定する。復号／ディスパッチが、命令がページ境界をまたぐのでそれが不可能であることを示す場合には、処理は、テスト・セットに継続し、このテスト・セットで、追加処理が実行される。
【００４１】
たとえば、命令ページ境界またぎ５１０、回復５１１、Ｉ−ＰＥＲフェッチ５１２、Ｉ−ＳｔｅｐおよびＡｄｓｔｏｐ  ５１４、開始および終了５１６、ならびに統計収集実行モード決断（ＪＩＴモード）５１８を含む、処理のために選択できるさまざまなテスト・セットがある。これらのテスト・セットが、例として提供されるが、追加の、より少数の、または異なるテスト・セットを使用することができる。各テスト・セットは、メインライン処理に戻る前に実行される１つまたは複数のアクションを含むことができる。テスト・セットに関するさらなる詳細を、下で説明する。
【００４２】
選択できる１つのテスト・セットが、命令ページ境界またぎ５１０であり、これは、命令がページ境界をまたいでいるかどうかを判定するのに使用される。このテスト・セットは、命令がページ（またはメモリの他の指定された単位）の終りに近い時に呼び出される。たとえば、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数には、たとえば、ページの終りから４バイトを引いたものと等しい値がセットされる。完了したばかりの命令ルーチンに関連する復号／ディスパッチ・ルーチンでは、ｅｎｄ−ｏｆ−ｒａｎｇｅ値を命令カウンタと比較して、命令がページの終りに近いかどうかを判定する。この単一のテストが満足される場合に、この例では命令ページ境界またぎ５１０が呼び出される。
【００４３】
命令ページ境界またぎ５１０では、テストを実行して、命令が複数のページにまたがるかどうかを判定する。一例として、ページがやはり４バイトを有し、命令が２バイトのみである場合に、その命令は、それでもそのページに収まる。したがって、処理は、メインライン処理で再開され、このメインライン処理が、この命令を処理する。しかし、命令が６バイトであり、命令のうちの４バイトだけが１ページ上にある場合に、その命令はページ境界をまたいでいると判定される。命令の最後の２バイトは、論理的には連続するが、物理的には不連続なので、処理が、最後の２バイトを入手し、６バイトを提供する（これらが物理的に連続であるかのように）ために実行される。６バイトが、物理的に連続するメモリにあるかのように入手され、実行すべき適当な命令ルーチンに（ポインタを介して）供給される。
【００４４】
上で説明したように、メインライン処理内の各命令内でページ境界またぎテストを実行するのではなく、このテストは、望まれる時または必要な時にのみ実行される。すなわち、このテストは、命令がページの終りに近いと判定される時に限って実行される。
【００４５】
もう１つのテスト・セットが、回復５１１である。このテスト・セットは、下でさらに詳細に説明するように、命令に関する特別な処理が必要な時に呼び出される。１つの例で、さまざまな変数の値が格納され、これらの変数が、その後に変更される。その後、回復が、これらの変数を保存された値に戻すのに使用される。
【００４６】
もう１つのテスト・セットが、Ｉ−ＰＥＲフェッチ５１２である。ＰＥＲ監視は、指定されたストレージ区域からの命令のフェッチなど、ある種のプログラム・イベントを監視するｚ／Ａｒｃｈｉｔｅｃｔｕｒｅのデバッギング・ツールである。このテスト・セットは、ｅｎｄ−ｏｆ−ｒａｎｇｅ値が、Ｉ−ＰＥＲモードを開始しなければならないことを示す時に使用される。たとえば、ＰＥＲ監視を、ページの途中で開始しなければならず、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数と命令カウンタとの比較が、ページの途中を示し、ＰＥＲ監視が開始される場合に、このテスト・セットが呼び出され、ＰＥＲに関連する処理が実行される。
【００４７】
もう１つのテスト・セットが、Ｉ−ＳｔｅｐおよびＡｄｓｔｏｐ  ５１４である。Ｉ−ＳｔｅｐおよびＡｄｓｔｏｐは、設計されたｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）内のデバッギング・ツールである。Ｉ−Ｓｔｅｐについて、プロセッサは、単一命令を通ってステップし、その後、停止状態になるモードにされる。停止状態中に、機械の状態が検査される。たとえば、レジスタを手作業で読み取り、その後、Ｉ−Ｓｔｅｐモード継続を発行する。Ｉ−Ｓｔｅｐテスト・セットを呼び出すためには、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数が、命令カウンタと一致する。すべての種類の命令の実行の後に、命令カウンタは、すぐにｅｎｄ−ｏｆ−ｒａｎｇｅを超え、したがって、ｅｎｄ−ｏｆ−ｒａｎｇｅには、人工的に０がセットされる。したがって、プログラム実行は、各命令の直後にテスト・ブロックに進む。プログラム実行は、停止状態に進み、ユーザ対話を待ち、その後、継続する。
【００４８】
Ａｄｓｔｏｐは、命令アドレスが特定の範囲内である時の停止である。これは、ＰＥＲモードに似ている。
【００４９】
もう１つのテスト・セットが、開始および終了テスト・セットである。このテスト・セットは、制御をＣＰＵ制御に転送しなければならない時および制御をＣＰＵ制御から戻って転送しなければならない時に使用される。プログラム実行が、あるアーキテクチャ・モードかラベルのアーキテクチャ・モードに変化する時に、このフローは終了され、制御は、ＣＰＵ制御で継続される。このテスト・セットを呼び出すために、一例として、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数に０がセットされる。
【００５０】
統計収集実行モード決断５１８は、どのモードを実行に使用しなければならないのかを判定するのに使用される。このテスト・セットは、使用統計を収集し、その統計に基づいて実行モードを選択する。実行モードの例は、インタープリタティブ・モード（メインライン処理５０２に戻る）、各実行される命令がバッファにコピーされる記録モード、およびアドレスが以前に変換された時に使用される変換モードを含む。このテスト・セットを呼び出すために、一例として、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数に０がセットされる。これは、このテスト・セットを各命令の後に処理することを可能にする。
【００５１】
上のテスト・セットでは、主要なテストまたはアクションが示されるが、各テスト・セットは、他のアクションを含むことができる。たとえば、各テスト・セットは、たとえば、主要なテストまたはアクションに加えて、命令ページ境界またぎがまたがれつつあるかどうか、または割込みが保留中であるかどうかをもチェックすることができる。多数の他の例も存在する。
【００５２】
インタープリテーション・ユニット４２０による命令ストリームの処理に関連するさらなる詳細を、図７を参照して説明する。
【００５３】
当初に、命令ストリームへのポインタを、命令ストリームに関連する命令カウンタおよび状態と一緒に、インタープリテーション・ユニット４２０に入力する、ステップ６００。状態は、たとえば、例として、浮動小数点レジスタ、汎用レジスタ、制御レジスタ、またはアドレッシング・レジスタあるいはこれらの組合せを含むレジスタと、たとえばＰＥＲモード・アクティブ、Ｉ−Ｓｔｅｐアクティブなどを示すフラグとを含む。この状態を評価する、ステップ６０２。
【００５４】
評価に基づいて、テスト・セットのうちの１つを選択し、テスト・セットの処理を開始する、ステップ６０４。このテスト・セットは、処理が特定のテスト・セットを開始しなければならないことを評価が示すという点で、事前に決定される。テスト・セット内で、ある種のアクションが、テスト・セットに依存して実行される。さらに、テスト・セットは、必要な場合に、次に呼び出すべきテスト・セットを決定し、その、次のテスト・セットをポイントするようにテスト・セット・ポインタをセットする。次のテスト・セットは、テスト・セット内で実行される評価（たとえば、ＰＥＲアクティブ、ページ境界またぎに近い、Ｉ−Ｓｔｅｐアクティブなど）に依存して、同一のテスト・セットまたは異なるテスト・セットとすることができる。
【００５５】
テスト・セットの実行に応答して、フローは、メインライン処理内の選択された命令ルーチンに進み、そのルーチンが実行される、ステップ６０６。一例で、このルーチンは、１つの命令を含むが、他の例では、このルーチンが、複数の命令を含むことができる。命令ルーチンが完了した時に、処理は、その命令ルーチンに関連する復号／ディスパッチ・ルーチンに継続する、ステップ６０８。復号／ディスパッチでは、単一のテストを実行して、処理を次の命令に継続すべきなのか、失敗してテスト・セットにすべきなのかを判定する、ステップ６１０。この単一のテストは、ｅｎｄ−ｏｆ−ｒａｎｇｅの値が満足されたかどうかに関するチェックである。これが満足されていない場合、問合せ６１２、処理は、メインライン実行に継続する、ステップ６０６。そうでない場合には、処理は、失敗して所定のテスト・セットになり、ステップ６１４、その後、テスト・セットが処理される、ステップ６１６。その後、処理は、テスト・セットによって示される、処理すべき次の命令ルーチンに継続する。
【００５６】
テスト・セットの処理に関する追加の詳細を、図８を参照して説明する。テスト・セットの処理中に、特殊な処理を含む命令を実行することができる。そのような命令の処理を容易にするために、下で説明するように、バッファが使用される。
【００５７】
図８を参照すると、テスト・セットの処理が開始され、命令に出会う、ステップ７００。この命令が特殊な処理を必要とするタイプの命令であるかどうかに関する判定を行う、問合せ７０２。たとえば、命令が、ｅｘｅｃｕｔｅまたはページ境界をまたぐ命令であるかどうかに関するチェックを行う。特殊な処理を必要とする命令である場合には、バッファが使用される。このバッファは、プロセッサのローカル・メモリ内に存在する一時バッファである。たとえば、命令が、ターゲット命令を実行することを指定するＺ命令であるｅｘｅｃｕｔｅ命令である場合に、ターゲット命令が、バッファリングされるメモリ位置にロードされる、ステップ７０４。ターゲット命令をバッファにコピーすることによって、命令に関連する少なくとも１つの態様を変更することができる、ステップ７０６。たとえば、ターゲット命令が、ｍｏｖｅ  ｃｈａｒａｃｔｅｒ（ＭＶＣ）命令であると仮定すると、命令内で指定される、移動すべきバイト数が変更されなければならない。命令が、バッファにコピーされ、移動すべきバイト数を示すために変更される。たとえば、移動すべきオリジナル・バイト数が４バイトである場合に、これを、８バイトなど、別の値に変更することができる。したがって、４バイトを移動するのではなく、ターゲット命令は、８バイト（または任意の他のバイト数）を移動するように変更される。
【００５８】
さらなる例として、命令が、ページ境界をまたぐ命令であると仮定する。この場合に、ターゲット命令は、実行すべき命令であり、論理的には連続するが、物理的には不連続であり、命令のバイトが、これらを物理的に連続したものにするためにバッファにコピーされる。たとえば、あるページに配置された命令のバイトの第１セットが、バッファにコピーされ、別のページ上のその命令の残りのバイトも、バッファにコピーされる、ステップ７０４。この例では、命令を変更する必要はなく、したがって、ステップ７０６は無視される。
【００５９】
バッファを初期化した後に、さまざまなタスクが、処理されるテスト・セットの一部として実行される。これらのタスクは、たとえば、命令ポインタをバッファにリダイレクトすることと、後の使用のためにさまざまな変数の値を保存すること、ステップ７０８を含む。たとえば、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数の現在の値、ならびに次テスト・セット・インジケータの現在の値を保存する。
【００６０】
その後、これらの変数の値を置換する、ステップ７１０。たとえば、ｅｎｄ−ｏｆ−ｒａｎｇｅに０をセットし、次テスト・セット・インジケータを、回復テスト・セットをポイントするようにセットする。
【００６１】
次に、バッファ内の命令を実行する。復号／ディスパッチで、単一のテスト（たとえば、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数）が失敗し、したがって、回復テスト・セットが選択される、ステップ７１４。回復中に、ステップ７０８〜７１０でのアクションが元に戻される。たとえば、命令ポインタは、オリジナルの命令ストリームにリダイレクトされ、ｅｎｄ−ｏｆ−ｒａｎｇｅ変数には、保存された値がセットされ、次テスト・セット・インジケータも、保存された値にリセットされる。その後、処理は、次の命令で継続される、ステップ７１６。
【００６２】
問合せ７０２に戻って、命令が、特殊な処理を必要とするタイプの命令ではない場合には、処理は、テスト・セットによる指示通りに、テスト・セットのまたは戻ってメインライン処理の次の命令に継続する。
【００６３】
本発明の１つまたは複数の態様を、たとえばコンピュータ可読媒体を有する製造品（たとえば、１つまたは複数のコンピュータ・プログラム製品）に含めることができる。媒体は、その中に、たとえば、本発明の機能を提供し、容易にするためにコンピュータ可読プログラム・コード手段または論理（たとえば、命令、コード、コマンドなど）を有する。製造品を、コンピュータ・システムの一部として含めるか、別々に販売することができる。
【００６４】
本発明の１つまたは複数の態様を組み込んだ製造品またはコンピュータ・プログラム製品の一例を、図９を参照して説明する。コンピュータ・プログラム製品８００は、たとえば、本発明の１つまたは複数の態様を提供し、容易にするためにその上にコンピュータ可読プログラム・コード手段または論理８０４を格納するために１つまたは複数のコンピュータ使用可能媒体８０２を含む。媒体は、電子、磁気、光学、電磁、赤外線、または半導体システム（または装置もしくはデバイス）、あるいは伝搬媒体とすることができる。コンピュータ可読媒体の例は、半導体メモリまたはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、リジッド磁気ディスク、および光ディスクを含む。光ディスクの例は、コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、書換可能コンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【００６５】
１つまたは複数のコンピュータ可読プログラム・コード手段または論理によって定義される１つまたは複数の相互に関係付けられたモジュールのプログラム命令のシーケンスまたは論理アセンブリは、本発明の１つまたは複数の態様の実行を指示する。
【００６６】
有利なことに、単一のｅｎｄ−ｏｆ−ｒａｎｇｅテストによって決定されるテスト（単一のｅｎｄ−ｏｆ−ｒａｎｇｅテスト以外の）または他のアクションが要求されない限り、制御がメインライン処理内で維持される、命令実行を制御する能力が提供される。必要な時に限ってテストを実行することによって、性能が高められ、コーディングが単純化される（たとえば、各命令がテストのすべてに関するコードを含む必要がない）。
【００６７】
有利なことに、処理は、分岐が、インタープリタに戻った後に次のルーチンへではなく、次のルーチンへ（テスト・セットを処理する必要がないと仮定して）発生するという点で、能率的にされる。
【００６８】
さらなる利益として、ｅｘｅｃｕｔｅ命令など、ある種の命令に関連するオーバーヘッドが、バッファを使用することによって減らされる。ｅｘｅｃｕｔｅ命令に関して、メモリのあるページからメモリの別のページへのジャンプに関連するオーバーヘッドがある。たとえば、メモリのあるページにあるｅｘｅｃｕｔｅ命令が実行され、その後、メモリの異なるページにあるターゲット命令が実行される。ターゲット命令が実行された後に、処理は、ｅｘｅｃｕｔｅ命令の後の命令にリターンする。この行き来する分岐に関連するオーバーヘッドがある。しかし、バッファを使用することによって、最初のページを去ることの記録が維持され、したがって、処理がリターンする時に、回復を実行することができ、追加のテストまたはアクションあるいはその両方（たとえば、アドレス変換など）を実行する必要はない。
【００６９】
さまざまな実施形態を上で説明したが、これらは例にすぎない。たとえば、処理環境は、Ｐｏｗｅｒ４、ＰｏｗｅｒＰＣ（Ｒ）、またはＩｎｔｅｌ（Ｒ）以外のアーキテクチャに基づく処理ユニットを含むことができる。さらに、ｐＳｅｒｉｅｓ（Ｒ）サーバ以外のサーバが、本発明の１つまたは複数の態様を組み込み、使用することができる。さらに、本明細書で言及したもの以外のオペレーティング・システムを使用することができる。さらに、処理環境は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）以外の環境をエミュレートすることができる。さらに、さまざまなエミュレータを使用することができる。エミュレータは、さまざまな会社によって市販され、提供される。さらに、処理環境は、エミュレータ・コードを含む必要がない。多数の他のタイプの処理環境が、本発明の１つまたは複数の態様を組み込み、または使用し、あるいはその両方を行うことができる。
【００７０】
さらに、バッファが、ｅｘｅｃｕｔｅ命令およびページ境界をまたぐ命令など、ある種の命令の処理に使用されるが、バッファが使用される他の命令または状況あるいはその両方があってもよく、これらは、本発明の範囲に含まれる。
【００７１】
さらに、テスト・セットは、例として提供されたものである。追加の、より少数の、または他の、あるいはこれらの組合せのテスト・セットを使用することができる。含まれるテスト・セットの個数は、設計依存である。本発明に対する多数の変形形態が、可能であり、本発明の範囲に含まれる。
【００７２】
さらに、１つまたは複数の実施形態で、直接または間接にシステム・バスを介してメモリ要素に結合される少なくとも１つのプロセッサを含む、プログラム・コードを格納し、または実行し、あるいはその両方を行うのに適するデータ処理システムが使用可能である。メモリ要素は、たとえば、プログラム・コードの実際の実行中に使用されるローカル・メモリ、バルク・ストレージ、および、実行中にバルク・ストレージからコードを取り出さなければならない回数を減らすために少なくともいくつかのプログラム・コードの一時的記憶を提供するキャッシュ・メモリを含む。
【００７３】
入出力デバイスすなわちＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、および他の記憶媒体などを含むがこれらに限定はされない）を、直接にまたは介在する入出力コントローラを介してのいずれかでシステムに結合することができる。ネットワーク・アダプタをシステムに結合して、データ処理システムが、介在する私有ネットワークまたは公衆ネットワークを介して他のデータ処理システム、リモート・プリンタ、またはストレージ・デバイスに結合された状態になることを可能にすることもできる。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードが、使用可能なタイプのネットワーク・アダプタのうちの少数である。
【００７４】
本発明の１つまたは複数の態様の機能を、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実施することができる。本発明の機能を実行するために機械によって実行可能な命令の少なくとも１つのプログラムを実施する機械によって可読の少なくとも１つのプログラム・ストレージ・デバイスを提供することができる。
【００７５】
本明細書で示される流れ図は、例にすぎない。これらの流れ図または本明細書で説明されるステップ（もしくは動作）に対する、本発明の趣旨から逸脱しない多数の変形形態があり得る。たとえば、ステップを、異なる順序で実行することができ、ステップを、追加し、削除し、または変更することができる。これらの変形のすべてが、請求される発明の一部と考えられる。
【００７６】
実施形態を本明細書で詳細に図示し、説明したが、本発明の趣旨から逸脱せずに多数の変更、追加、および置換などを行うことができ、したがって、これらが、添付の特許請求の範囲で定義される本発明の範囲に含まれると考えられることが、当業者には明白である。
【図１】
0005443172.tif 000002
【図２】
0005443172.tif 000003
【図３】
0005443172.tif 000004
【図４】
0005443172.tif 000005
【図５】
0005443172.tif 000006
【図６】
0005443172.tif 000007
【図７】
0005443172.tif 000008
【図８】
0005443172.tif 000009
【図９】
0005443172.tif 000010