(57)【要約】データ処理システム（２）は、レジスタバンク（２０）の所与のレジスタとのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出するための例外処理回路（２６）を含む。このような例外をトリガする処理動作を検出すると、データ値を含むシンドロームデータが、例外をトリガする処理動作を特徴付けるシンドロームレジスタ（３２）内に格納される。中断される書き込み命令の場合、例外の発生時に値がシンドロームレジスタ内に格納されてもよい。中断される読み出し命令の場合、データ値は、例外によりトリガされるコードをエミュレートすることにより、シンドロームレジスタ内に格納されてもよい。
2018531462.tif 000002
【特許請求の範囲】
【請求項１】
データを処理するための装置であって、
複数のレジスタと、
前記複数のレジスタの所与のレジスタとのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出し、前記例外をトリガする処理動作を少なくとも部分的にエミュレートするために例外処理プログラム命令の実行をトリガするための、例外処理回路と、
前記例外をトリガする処理動作を特徴付け、かつ、前記データ値を含むシンドロームデータを格納するためのシンドロームデータストアと、
を備え、
前記例外処理回路が、前記シンドロームデータ内の前記データ値を使用して、前記所与のレジスタとの前記転送を遂行する装置。
【請求項２】
前記例外をトリガする処理動作が、前記データ値をメモリアドレスから前記所与のレジスタに転送するロード動作であり、
前記例外処理プログラム命令が、前記データ値を前記メモリアドレスから前記シンドロームデータストアに転送し、
前記ロード動作の試みられた再実行の際に、前記例外処理回路が、前記データ値を前記シンドロームデータストアから前記所与のレジスタに転送する、請求項１に記載の装置。
【請求項３】
前記例外をトリガする処理動作が、前記データ値を前記所与のレジスタからメモリアドレスに転送する格納動作であり、
前記ロード動作の前記試みられた実行の際に、前記例外処理回路が、前記データ値を前記所与のレジスタから前記シンドロームデータストアに転送し、
前記例外処理プログラム命令が、前記データ値を前記シンドロームデータストアから前記メモリアドレスに転送する、請求項１に記載の装置。
【請求項４】
前記シンドロームデータが、第１の状態と第２の状態とを有するリプレイ状態データを含み、
前記リプレイ状態データが前記第２の状態を有するときで、前記例外をトリガする処理動作の試みられた実行の際に、前記例外処理回路が、前記リプレイ状態データを前記第１の状態に設定し、前記例外処理プログラム命令の実行をトリガし、
前記リプレイ状態データが前記第１の状態を有するときで、前記例外をトリガする処理動作の試みられた実行の際に、前記例外処理回路が、前記リプレイ状態データを前記第２の状態に設定し、前記例外処理プログラム命令をトリガすることを抑制し、前記例外をトリガする処理動作を完了したものとして合図する、請求項１〜３のいずれか一項に記載の装置。
【請求項５】
前記リプレイ状態データが前記第１の状態を有するときで、前記例外をトリガする処理動作の試みられた実行の際に、前記例外処理回路が、前記データ値を前記シンドロームデータストアから前記所与のレジスタに転送する、請求項２および請求項４に記載の装置。
【請求項６】
前記例外処理プログラム命令の完了の際に、前記例外処理回路が、前記例外をトリガする処理動作の試みられた再実行をトリガする、請求項１〜５のいずれか一項に記載の装置。
【請求項７】
前記シンドロームデータが、例外の入口と出口において保存され回復される現在プログラムステータスデータの一部である、請求項１〜６のいずれか一項に記載の装置。
【請求項８】
前記例外をトリガする処理動作が、データ中断をトリガする、請求項１〜７のいずれか一項に記載の装置。
【請求項９】
前記例外をトリガする処理動作に対応するプログラム命令が、ゲストプログラムの一部であり、前記例外処理プログラム命令が、前記ゲストプログラムに実行環境を提供する仮想化プログラムの一部である、請求項１〜８のいずれか一項に記載の装置。
【請求項１０】
前記仮想化プログラムが、前記ゲストプログラムのプライベートな状態データへのアクセスを阻止される、請求項８に記載の装置。
【請求項１１】
前記プライベートな状態データが、前記ゲストプログラムの実行中の前記複数のレジスタ内のデータ値を含む、請求項９に記載の装置。
【請求項１２】
第１の段のマッピングデータと第２の段のマッピングデータとを含むマッピングデータに依存してメモリへのアクセスを管理するためのメモリ管理ユニットを備え、前記ゲストプログラムが、前記第１の段のマッピングデータを管理し、前記仮想化プログラムが、前記第２の段のマッピングデータを管理し、前記例外をトリガする処理動作が、前記第２の段のマッピングデータを使用して検出される、請求項９、１０、および１１のいずれか一項に記載の装置。
【請求項１３】
前記第１の段のマッピングが、前記仮想化プログラムによる前記ゲストプログラムの前記プライベートな状態データへのアクセスを阻止する、請求項１０および請求項１２に記載の装置。
【請求項１４】
前記転送が、前記所与のレジスタと入出力デバイスとの間である、請求項１〜１３のいずれか一項に記載の装置。
【請求項１５】
前記シンドロームデータが、メモリアドレスを指し示すアドレスデータを含み、前記データ値の前記転送が、前記所与のレジスタと前記メモリアドレスとの間である、請求項１〜１４のいずれか一項に記載の装置。
【請求項１６】
前記シンドロームデータが、前記データ値のサイズデータを含む、請求項１〜１５のいずれか一項に記載の装置。
【請求項１７】
前記シンドロームデータが、前記転送が前記データ値の前記所与のレジスタへのロードであるか、前記データ値の前記所与のレジスタからの書き込みであるかを指定する、請求項１〜１６のいずれか一項に記載の装置。
【請求項１８】
前記シンドロームデータストアが、シンドロームレジスタである、請求項１〜１７のいずれか一項に記載の装置。
【請求項１９】
データを処理するための装置であって、
データを格納するための複数のレジスタ手段と、
前記複数のレジスタ手段の所与のレジスタ手段とのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出し、前記例外をトリガする処理動作を少なくとも部分的にエミュレートするために例外処理プログラム命令の実行をトリガするための、例外処理手段と、
前記例外をトリガする処理動作を特徴付け、かつ、前記データ値を含むシンドロームデータを格納するためのシンドロームデータ格納手段と、
を備え、
前記例外処理手段が、前記シンドロームデータ内の前記データ値を使用して、前記所与のレジスタ手段との前記転送を遂行する装置。
【請求項２０】
データを処理する方法であって、
データを複数のレジスタ内に格納することと、
前記複数のレジスタの所与のレジスタ手段とのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出することと、
前記例外をトリガする処理動作を少なくとも部分的にエミュレートするために例外処理プログラム命令の実行をトリガすることと、
前記例外をトリガする処理動作を特徴付け、かつ、前記データ値を含むシンドロームデータを格納することと、
前記シンドロームデータ内の前記データ値を使用して、前記所与のレジスタ手段との前記転送を遂行することと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理システムの分野に関する。より具体的には、本開示は、データ処理システム内における例外処理に関する。
【背景技術】
【０００２】
データ処理システムの動作中、データ中断、未定義の命令などの例外処理が遂行されることを必要とする例外状態が発生し得ることが知られている。このようなアクションが検出されると、例外処理プログラム命令の実行がトリガされ得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
例外処理が発生する１つの状況は、仮想化されたシステムの文脈においてである。ハイパーバイザプログラムがゲストオペレーティングシステムおよびアプリケーションプログラムに仮想実行環境を提供している場合がある。ゲストオペレーティングシステムまたはアプリケーションプログラムは、ハイパーバイザにより例外としてトラップされ、次いでエミュレートされるデータアクセスを試みる場合がある。ハイパーバイザがデータアクセスをエミュレートし得るためには、ゲストシステムの状態へのアクセスを必要とする。しかしながら、一部の状況では、ゲストシステムがプライベートの／秘密の／セキュアなデータを含むため、ハイパーバイザがゲストシステムの状態にアクセスすることが許可されないことが、セキュリティ上の理由で望まれる場合がある。
【課題を解決するための手段】
【０００４】
本開示の少なくとも一部の実施形態は、データを処理するための装置であって、
複数のレジスタと、
複数のレジスタの所与のレジスタとのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出し、例外をトリガする処理動作を少なくとも部分的にエミュレートするために例外処理プログラム命令の実行をトリガするための、例外処理回路と、
例外をトリガする処理動作を特徴付け、かつ、データ値を含むシンドロームデータを格納するためのシンドロームデータストアと、
を備え、
例外処理回路が、シンドロームデータ内のデータ値を使用して、所与のレジスタとの転送を遂行する装置を提供する。
【０００５】
本開示の少なくとも一部の実施形態は、データを処理するための装置であって、
データを格納するための複数のレジスタ手段と、
複数のレジスタ手段の所与のレジスタ手段とのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出し、例外をトリガする処理動作を少なくとも部分的にエミュレートするために例外処理プログラム命令の実行をトリガするための、例外処理手段と、
例外をトリガする処理動作を特徴付け、かつ、データ値を含むシンドロームデータを格納するためのシンドロームデータ格納手段と、
を備え、
例外処理手段が、シンドロームデータ内のデータ値を使用して、所与のレジスタ手段との転送を遂行する装置を提供する。
【０００６】
本開示の少なくとも一部の実施形態は、データを処理する方法であって、
データを複数のレジスタ内に格納することと、
複数のレジスタの所与のレジスタ手段とのデータ値の転送を含む、例外をトリガする処理動作の試みられた実行を検出することと、
例外をトリガする処理動作を少なくとも部分的にエミュレートするために例外処理プログラム命令の実行をトリガすることと、
例外をトリガする処理動作を特徴付け、かつ、データ値を含むシンドロームデータを格納することと、
シンドロームデータ内のデータ値を使用して、所与のレジスタ手段との転送を遂行することと、
を含む方法を提供する。
【０００７】
これより、添付の図面を参照しながら、例示的な実施形態をただ単に例として説明する。
【図面の簡単な説明】
【０００８】
【図１】データ処理システムを概略的に例示する。
【図２】例外処理を概略的に例示する流れ図である。
【図３】仮想化プログラムおよびゲストプログラムを概略的に例示する図である。
【図４】２段式の仮想−物理アドレス変換を概略的に例示する。
【発明を実施するための形態】
【０００９】
図１は、相互接続回路６を介してメモリ８および１つ以上のメモリマップされた入出力デバイス１０に接続されているプロセッサコア４を含むデータ処理システム２を概略的に例示する。メモリ８は、仮想化された環境内でプロセッサコア４を使用して実行されるゲストプログラムにとってプライベートなデータを格納する１つ以上のプライベート領域１０を含む。メモリ８は、ゲストプログラムと仮想化された実行環境をゲストプログラムに提供する仮想化プログラムとの間で共有される１つ以上の共有領域１２をさらに含む。仮想化プログラムは、例えば、ハイパーバイザプログラムであってもよく、ゲストプログラムは、それ自体、仮想化された実行環境を１つ以上のアプリケーションプログラムに提供するゲストオペレーティングシステムプログラムであってもよい。
【００１０】
プロセッサコア４は、実行されるべきプログラム命令をメモリ８からフェッチし、これらを、復号されたプログラム命令により指定された処理動作を遂行するようにプロセッサコア４内の他の回路をその後制御する制御信号を生成するためにプログラム命令が復号される復号器１６に供給する命令フェッチユニット１４を含む。プロセッサコア４は、算術演算および論理演算などの処理動作を遂行するための（複数の汎用レジスタを含む）レジスタバンク２０を含む処理回路１８を含む。ロードストアユニット２２は、これによりデータ値がメモリ８から読み出されレジスタバンク２０のレジスタ内に格納されるロード命令（ＬＤＲ）に応答してロード動作などのメモリアクセス動作を遂行するために使用される。ロードストアユニット２２はまた、データ値が、レジスタバンク２０のレジスタから読み出され、メモリ８内のメモリアドレスに格納される、格納命令（ＳＴＲ）により指定された格納動作を遂行する。これらのロードおよび格納命令の変種が存在してもよい。入出力デバイス１０は、メモリマップされており、ゆえに、データ値を入出力デバイス１０から読み出し、これらをレジスタバンク２０内のレジスタ内に格納するよう、ロード命令および格納命令を使用してもよい。値をレジスタバンク２０から読み出し、これらを入出力デバイス１０に書き込むよう、同様に格納動作を使用してもよい。
【００１１】
メモリ管理ユニット２４は、プロセッサコア４上で実行されるメモリアクセス命令によって（メモリ８および入出力デバイス１０を含む）メモリアドレス空間へのアクセスを管理するために、メモリ８内に格納されたページテーブルデータを使用する。メモリ管理ユニット２４は、アクセス許可に違反するか、または他の点で許可されていないメモリアクセスが試みられるときを検出する。これは、データ中断を引き起こす。例外処理回路２６は、例外処理をトリガするよう、メモリ管理ユニット２４により指摘されたデータ中断に応答する。例外処理応答は、それらの例外処理プログラム命令の実行を開始する（例えば、ベクトルアドレスをプログラムカウンタにロードする）ために、例外処理プログラム命令の開始アドレスを指し示す例外ベクトルに追従することを使用することを含んでもよい。さらに、例外処理回路２６は、例外応答の一部として、ＣＰＳＲレジスタ２８（current program status register、現在プログラムステータスレジスタ）内に保持されているプロセッサコア４の現在の処理状態を表すステータスデータを、例外処理が完了し、初期プログラムフローに復帰するときに、ステータスデータがそこから回復される、ＳＰＳＲレジスタ３０（saved program status register、保存プログラムステータスレジスタ）内に保存してもよい。シンドロームレジスタ３２は、例外処理回路２６に連結されており、例外処理回路２６により取り扱われている例外をもたらした、例外トリガ処理動作を特徴付けるデータを（少なくとも一部のメモリアクセスについて）格納する。一部の実施形態では、２つ以上のシンドロームレジスタが使用されてもよい。シンドロームレジスタ（複数可）は、シンドロームデータストアの一例である。データ中断の場合、シンドロームデータとしては、例えば、中断されたメモリアクセスに関連付けられたメモリアドレス空間内のアドレス、メモリアクセスがそのメモリアドレスへの書き込みであったか、それともそのメモリアドレスからの読み出しであったかを示すフラグ、アクセスされているデータ値のサイズ（例えば、バイト、ハーフワード、ワード、ダブルワードなど）を示すサイズ値が含まれる。さらに、メモリアドレス空間内のメモリアドレスへの書き込みであった中断されたメモリアクセスの場合、シンドロームレジスタには、書き込まれるべきであったデータ値が含まれる。このデータ値は、ロードストアユニット２２からシンドロームレジスタ３２に供給されてもよい。中断されたメモリアクセスがメモリアドレス空間からのデータ値の読み出しであった場合、中断されたメモリアクセス命令がリプレイされるとき、読み出されたデータ値がシンドロームレジスタ３２から回復され、ロードストアユニット２２およびプロセッサコア４に戻される（例えば、レジスタバンク２０の適切なレジスタ内に戻される）ことができるように、シンドロームレジスタ３２には、そのデータ値が（例外処理の処理動作を遂行する）例外処理プログラム命令により格納され得る空間が含まれる。
【００１２】
データ処理システム２は、それによりハイパーバイザプログラムが仮想化された実行環境を１つ以上のゲストオペレーティングシステムプログラムおよびアプリケーションプログラムに提供する、仮想化をサポートする。システムのセキュリティを向上させるために、メモリ管理ユニット２４により保持されるメモリアクセスデータは、そのゲストプログラムに属するプライベート領域１０内に格納されたデータなどの、ゲストプログラムに関連付けられたデータにアクセスする能力をハイパーバイザに与えない働きをしてもよい。ゲストプログラムの実行中にレジスタバンク２０内に格納されたデータおよびゲストプログラムに関連付けられた他の状態データ（例えば、ＣＰＳＲデータ、状態構成データ（state configuration data）など）は、ゲストプログラムにとってプライベートなものとして維持されてもよい。ハイパーバイザプログラムは、メモリマップされた入出力デバイス１０などの特定のメモリアドレスへのゲストプログラムによるメモリアクセスをトラップするように動作する。ハイパーバイザプログラムは、例外処理の処理動作を実行するために、このようなトラップされたメモリアクセスを、ゲストプログラムのために、例外処理プログラム命令を使用してエミュレートする。一例として、ゲストプログラムは、メモリマップされた入出力デバイスへのデータ値の書き込みを遂行しようとする場合がある。メモリ管理ユニット２４は、そのページテーブルデータを使用して、その書き込みアクセスがハイパーバイザプログラムによりトラップされエミュレートされるべきものであることを検出し、それゆえに、例外処理回路２６に渡されるデータ中断例外を提起する。例外処理回路２６は、中断された書き込みを特徴付けるデータをシンドロームレジスタ３２内に保存する。書き込みを特徴付けるこのデータとしては、中断された動作が書き込み動作であることを示すフラグ、試みられた書き込み動作のアドレス、試みられた書き込み動作により書き込まれるべきデータ値、書き込まれるべきデータ値のサイズ、および中断された書き込み動作をエミュレートする際に有用であり得るさらなるデータ（後述するリプレイ状態データなど）が含まれる。例外処理回路はまた、現在プログラムステータスレジスタの内容２８を保存プログラムステータスレジスタ３０内に格納する。中断された書き込み動作より前のシンドロームレジスタ３２の内容は、現在のプログラム状態の一部を構成し、それゆえに例外処理の一部として保存もされる。万一中断されたメモリアクセスのエミュレーション中にさらなる例外が発生した場合、そのときの現在のシンドロームデータは、例外が解消するにつれて回復され得るように、同様に、現在プログラムステータスデータの一部として保存されることになる。
【００１３】
試みられた書き込み動作のデータ中断によりトリガされた例外処理プログラム命令は、シンドロームデータをシンドロームレジスタ３２から読み出し、意図された書き込み動作を完了させるためにこのデータを使用するよう働く。この完了は、例えば、ゲストプログラムにより指定された書き込みのアドレスを、ハイパーバイザプログラムの一部として動作し、ハイパーバイザプログラムにより管理されるようにメモリマップされた入出力デバイス１０の物理アドレスに対応する例外処理プログラム命令により使用されるべき異なるアドレスに変換することを伴ってもよい。
【００１４】
例外処理プログラム命令によりトラップされエミュレートされる中断されたメモリアクセス命令が、メモリマップされた入出力デバイス１０からのデータ値の読み出しであった場合、例外処理プログラム命令は、読み出されるべきメモリアドレスをシンドロームレジスタ３２から読み出し、次いで、ハイパーバイザプログラムにより管理されるように適切なメモリアドレスからその読み出しを遂行する。この読み出しから返されるデータ値は、シンドロームデータの一部としてシンドロームレジスタ３２内に格納される。
【００１５】
例外処理から復帰して、ゲストプログラムが再開されると、中断されているメモリアクセス命令（書き込みか読み出しかを問わない）が、再実行のために発行される。読み出しの場合、その読み出しをエミュレートした例外処理によりシンドロームレジスタ３２内に格納されたデータ値が、その読み出しの結果として返され、例えば、元の読み出し命令により指定されたレジスタバンク２０の適切な宛先レジスタ内に格納される。書き込み命令を再実行する場合、エミュレート中の例外処理プログラム命令は、ゲストプログラムに代わって指定された書き込み動作をすでに遂行してしまっているであろうし、ゆえに、書き込みプログラム命令は、さらなるアクションが必要となることなしに完了（リタイヤ）され得る。
【００１６】
シンドロームレジスタ３２は、リプレイされた状態データをシンドロームデータの一部として格納する。このリプレイされた状態データは、第１の状態または第２の状態のいずれかを有するフラグであってもよい。メモリアクセス命令の実行が再び試みられると、その中断されているメモリアクセス命令がすでにエミュレートされていることを示すために、リプレイされた状態データが使用される。そして、中断されているメモリアクセス命令にゲストプログラムのプログラムフロー内で初めて遭遇すると、それは、例外処理をトリガし、例外処理プログラム命令によりエミュレートされる。エミュレーションの一部として、リプレイ状態データ（シンドロームデータの一部であってもよく、または他の場所に保持されてもよい）が、第１の状態に設定される。エミュレーションが完了し、中断されているメモリアクセス命令の実行が再び試みられると、例外処理回路２６は、リプレイ状態データが第１の状態を有することを検出し、それゆえに、中断されているメモリアクセスがすでにエミュレートされていることを検出する。中断されているメモリアクセスが書き込みである場合、以前に遂行されたエミュレーションが所望の書き込みをすでに遂行しているため、例外処理回路２６は、その書き込みを完了したものとして単にマークすることができる。中断されているメモリアクセスが読み出しである場合、シンドロームレジスタ３２は、エミュレート中の例外処理プログラム命令によりその読み出しに対して返されたデータ値を収容する。この場合、例外処理回路２６は、シンドロームレジスタ３２からのそのデータ値を使用し、それをデータ読み出しの結果として供給し（例えば、読み出されたデータをシンドロームレジスタ３２から、中断されている読み出し命令により指定されたレジスタバンク２０内の適切な宛先レジスタに転送する）、次いで、読み出し命令を完了したものとして処理する。
【００１７】
図２は、例外処理データ中断を概略的に例示する流れ図である。ステップ２７で、処理は、データ中断が発生するまで待機する。他の種類の例外は、異なる方法で対処されてもよい。データ中断が発生すると、例外処理回路３２は、ステップ２９で、シンドロームデータレジスタ３２にアクセスするよう働く。ステップ３１は、シンドロームレジスタ３２内でアクセスされたリプレイ状態データが第２の状態を有するか否かを判定する。リプレイ状態データが第２の状態を有する場合、これは、中断されているメモリアクセス命令がまだエミュレートされていないことを示す。
【００１８】
リプレイ状態データが第２の状態を有する場合、中断されているメモリアクセスに再び遭遇したとき、それがすでにエミュレートされていることが検出され得るように、ステップ３３は、リプレイ状態データを第１の状態に設定する。ステップ３４は、中断されているメモリアクセスがロード命令であるかどうかを判定する。中断されているメモリアクセスがロード命令である場合、ステップ３６は、そのロード命令を特徴付けるシンドロームデータの一部として、ロード命令の対象であるメモリアドレスと、ロード命令のデータサイズと、中断されているメモリアクセスが読み出しであることを示すフラグとを含むデータをシンドロームレジスタ３２内に格納するよう働く。ステップ３４における判定が、中断されているメモリアクセスが格納命令である（すなわち、ロードではない）というものである場合、ステップ３８は、シンドロームデータの一部として、格納命令の対象アドレス、格納命令の一部として書き込まれるべきデータ値、データ値のデータサイズ、および中断されているメモリアクセスが書き込みであったことを示すフラグをシンドロームレジスタ３２内に格納するよう働く。
【００１９】
ステップ３６および３８の両方に続いて、ステップ４０は、例外処理命令の実行をトリガするよう働く。このトリガは、データ中断に関して、データ処理システム２の構成の一部としてセットアップされた例外ベクトルに、このベクトルが例外処理プログラム命令の実行が開始されるようにプログラムカウンタ値を設定するために使用されながら、追従するという形をとってもよい。
【００２０】
ステップ４２は、例外処理プログラム命令により遂行され、中断命令がロードであるかどうかを判定する。この判定は、ステップ３６および３８で設定されたシンドロームレジスタ３２内に格納されたシンドロームデータ内の読み出し／書き込みフラグを検査することにより遂行されてもよい。エミュレートされている中断されているメモリアクセスがロードである場合、ステップ４４は、データ値をシンドロームレジスタ内のメモリアドレス（またはそのメモリアドレスの変換されたバージョン）から読み出し、データ読み出しから返された読み出されたデータ値をシンドロームレジスタ３２に格納し戻し、中断された読み出し動作のエミュレーションを完了させるために必要ないかなるさらなるアクションも遂行することにより、そのロードをエミュレートするよう働く。ステップ４２における判定が、エミュレートされるべき中断されたメモリアクセスは格納動作であるというものである場合、ステップ４６は、シンドロームレジスタ３２内に格納されたデータ値を、シンドロームレジスタ３２内に格納されたメモリアドレスにより指し示されたメモリアドレス（またはそのメモリアドレスの変換されたバージョン）に書き込むことにより、その格納動作を完了させるよう働く。
【００２１】
ステップ４４および４６の両方に続いて、処理は、中断をトリガしたプログラム命令に戻ることにより例外からの復帰が遂行されるステップ４８に進む。例外処理プログラム命令は、例外処理およびエミュレーション動作中に、他のプログラム状態の格納およびそのプログラム状態の回復を取り扱うことなどの、他の動作を遂行してもよいことが理解されるであろう。
【００２２】
ステップ４８の後、処理は、ステップ２７に戻る。ステップ４８が、中断をトリガした命令（ゲストプログラム内の中断されているメモリアクセス）に処理を戻すと、ステップ２７は、メモリ管理ユニット２４による同じ保護の結果としてこの命令が再び中断されるのを検出することになる。この場合、ステップ３０における判定は、リプレイ状態データは第２の状態に等しくないというものになり、それゆえに、処理は、ステップ５０に進む。ステップ５０は、リプレイ状態データを第２の状態に設定する。ステップ５２は、メモリアクセス命令がロードであるかどうかを検出する。中断されているメモリアクセス命令がロードである場合、ステップ５４は、中断されているロード命令の結果としてシンドロームレジスタ値３２内に格納されたデータ値を返すよう働く。次いで、ステップ５６は、それを完了したものとしてマークすることにより、この命令をリタイヤさせ、処理は、ステップ２７に戻る。ステップ５２における判定が、中断されているメモリアクセス命令はロードではないというものである場合、ステップ５４は迂回され、処理は、この場合は格納である中断されているメモリアクセス命令が、リタイヤされ、完了したものとしてマークされる、ステップ５６に直接進む。
【００２３】
図２に例示する流れ図は、ハードウェアにより（例えば、例外処理回路２６により）遂行されるいくつかのステップ、およびソフトウェアにより遂行されるいくつかのステップを含むことが理解されるであろう。この例では、「＊」でマークされたステップは、例外処理プログラム命令を使用してソフトウェアにより遂行される。他の処理ステップは、ハードウェア制御下で、例外処理回路２６およびデータ処理システム２内の他の要素により取得されるにつれて遂行される。他の実施形態では、ハードウェアとソフトウェアで遂行されるステップの間の異なる分割が使用されてもよいことが理解されるであろう。
【００２４】
図３は、ハイパーバイザプログラム５８の形の仮想化プログラムと、ゲストオペレーティングシステム６０、６２およびアプリケーションプログラム６４、６６、６８、７０の形のゲストプログラムとの関係を概略的に例示する。ハイパーバイザプログラム５８は、ゲストプログラム６０〜７０よりも高い特権レベル（例外レベル）で動作する。ハイパーバイザプログラム５８は、ゲストプログラム６０〜７０に仮想化された実行環境を提供する。この仮想化された実行の一部として、ハイパーバイザプログラム５８は、入出力デバイス１０への仮想アクセスを提供する。ハイパーバイザプログラム５８はまた、他のメモリアドレス、またはシステム構成レジスタなどのデータ処理システム２のリソースへのアクセスを仮想化してもよい。他の例外をトリガする処理動作、例えばシステムレジスタへのトラップされたアクセスの例外処理プログラム命令によるエミュレーションを提供するために、シンドロームレジスタ３２を利用する本技法を使用してもよい。これらの場合、エミュレーションはまた、エミュレーションがゲストプログラムのプライベートデータにアクセスすることを必要とすることなしに、シンドロームレジスタ３２内に格納されているシンドロームデータを使用して遂行されてもよい。エミュレーションを遂行するために必要とされるデータは、それがエミュレート中のプログラム命令によりそこから読み出され得るシンドロームレジスタ３２内に、ハードウェア制御下で格納されてもよい。
【００２５】
図４は、メモリ管理ユニット２４により遂行される２段式のアドレス変換を概略的に例示している。アプリケーションプログラム６４、６６、６８、７０は、仮想アドレスを使用してメモリアクセス命令を生成し得る。次いで、ゲストオペレーティングシステム６０、６２により提供されているような物理アドレスに対応する中間物理アドレスを形成するために、第１の段の変換７２が、適切なゲストオペレーティングシステム６０、６２により制御されているページテーブルデータを使用してメモリ管理ユニット２４により遂行される。ゲストオペレーティングシステム６０、６２は、それ自体、仮想化された環境内で実行されており、それゆえに、メモリ管理ユニット２４は、メモリ８および入出力デバイス１０を含むメモリアドレス空間を次いでアドレス指定する物理アドレスを生み出すために、ハイパーバイザ５８により管理されているページテーブルデータを使用して第２の段の変換７４を遂行する。第２の段の変換７４により生み出される物理アドレスは、物理メモリアドレス空間のハイパーバイザの視野に対応する。
【００２６】
第１の段の変換７２は、ゲストオペレーティングシステム６０、６２によって管理されるページテーブルデータを使用する。この第１の段の変換７２は、ゲストオペレーティングシステム６０、６２（またはアプリケーションプログラム６４〜７０）にとってプライベートであるメモリ８内のプライベート領域１０に対するハイパーバイザプログラム５８により試みられるメモリアクセスを阻止するよう働いてもよい。ハイパーバイザプログラム５８はゲストオペレーティングシステム６０、６２よりも高い特権レベルを有すると考えたとしても、ゲストオペレーティングシステム６０、６２により管理されているような第１の段の変換７２は、ハイパーバイザがデータにアクセスするのを阻止し得る。第１の段の変換７２に対応するページテーブルデータは、そのセキュリティを保護するために、プライベート領域１０内に格納されてもよい。
【００２７】
第２の段の変換７４は、ハイパーバイザプログラム５８によって管理されるページテーブルデータを使用して遂行される。この第２の段の変換データ７４は、ハイパーバイザプログラム５８により制御され、シンドロームレジスタ３２および上述のシンドロームデータを使用してハイパーバイザプログラム５８によるエミュレーションを要求する、入力出力デバイス１０などのメモリアドレスへのゲストオペレーティングシステム６０、６２によるメモリアクセスをトラップするために、使用されてもよい。
【００２８】
上述の例示的な実施形態は、例外をトリガしたプログラム命令の試みられる再実行の際の挙動を制御するために、リプレイ状態データを使用する。代替的な例示的な実施形態は、このようなリプレイ状態データを使用することを必要としないかもしれない。例外をトリガしたプログラム命令が格納命令である場合、例外処理プログラム命令は、格納命令に続くプログラム命令を使用して（すなわち、格納命令の再実行は試みられない）、例外処理後に実行を再開してもよい。例外をトリガしたプログラム命令がロード命令である場合、リプレイ状態データの使用の必要性は、例外処理プログラム命令の終了時の、ロード命令に続く命令に実行を戻す前に、シンドロームレジスタからのデータ値をその意図された宛先レジスタにブラインドコピーするように例外処理回路を制御する新しい命令の提供および使用により、回避され得る。
【００２９】
本明細書において例示的な実施形態を添付図面を参照しながら詳細に説明したが、請求項はそれらの正確な実施形態に限定されるものではないこと、ならびに、添付された請求項の範囲および趣旨から逸脱することなしに、様々な変更、追加、および変形がそれらにおいて当業者により成し遂げられることができることが理解されるべきである。例えば、従属請求項の特徴の独立請求項の特徴との様々な組み合わせがなされ得る。
【図１】
2018531462.tif 000003
【図２】
2018531462.tif 000004
【図３】
2018531462.tif 000005
【図４】
2018531462.tif 000006
【国際調査報告】
2018531462.tif 000007
2018531462.tif 000008