(57)【要約】  データ処理システム２が、複数の例外レベルＥＬｘにおいて動作し、保護された実行環境の使用をサポートする。レジスタ・バンク１６は、所有する例外レベルを示す関連する所有権変数を有するレジスタを含んでいる。レジスタ・アクセス制御回路３０が、それぞれのレジスタのための所有権値に応答して、所有権値に応じて処理回路１４によるそれらのレジスタへのアクセスを制御する。ターゲット制約付きデータ転送動作と、関連するプログラム命令とが与えられ得、それらは、それらのプログラム命令の実行に関連する例外レベルによって所有されないレジスタ中のデータ値にアクセスすることが可能であるが、所有する例外レベルのための設計された格納ポインタによって示されるメモリ６内のメモリ位置への又はそこからのデータ転送を実施することに限定される。所与の例外レベルにおけるターゲット制約なし転送命令は、異なる例外レベルによって所有されるものとしてマークされたレジスタ・データ値にアクセスすることが可能でない。
2019511042.tif 000002
【特許請求の範囲】
【請求項１】
データを処理するための装置であって、
それぞれのデータ値を保持するための複数のレジスタであって、当該複数のレジスタの各々が、関連する所有権変数を有する、複数のレジスタと、
前記複数のレジスタ内に保持されたデータ値に対して、プログラム命令によって指定されたデータ処理動作を実施するための処理回路と、
前記複数のレジスタのうちのレジスタのための前記関連する所有権変数によって指定された所有権値に応答して、前記所有権値に応じて前記処理回路による前記レジスタへのアクセスを制御するためのレジスタ・アクセス制御回路と、
複数の例外レベルのうちの現在の例外レベルにおいて動作するように前記処理回路を制御するための例外レベル制御回路と、
を備え、
前記所有権値が、前記複数の例外レベル状態のうちの１つを指定し、
前記レジスタ・アクセス制御回路は、前記現在の例外レベルが、前記所有権値によって指定された例外レベルとは、所定の様式において異なるとき、少なくともいくつかのプログラム命令によって指定されたデータ処理動作を実施するための前記処理回路による前記レジスタへのアクセスを制限し、
前記複数の例外レベルが、最低特権レベルから最高特権レベルに及ぶ特権レベルの階層に対応し、前記最高特権レベルよりも低い特権レベルに対応する例外レベルにおいて動作するとき、例外条件が前記処理回路の動作中に起こり、特権のより高いレベルを有する例外レベルへの切替えをトリガし、
前記所定の様式は、前記現在の例外レベルが、前記階層において、前記所有権値によって指定された例外レベルよりも高いことであり、
前記最低特権レベルが、前記最高特権レベルよりも特権的でない、
装置。
【請求項２】
前記所有権値が格納ポインタを有し、前記レジスタ・アクセス制御回路は、前記レジスタと前記格納ポインタによって指定されたメモリ内のターゲット・メモリ・アドレスとの間のターゲット制約付きデータ転送プログラム命令に応答して、前記処理回路がターゲット制約付きデータ転送動作を実施することを許可する、請求項１に記載の装置。
【請求項３】
前記レジスタ・アクセス制御回路は、前記レジスタと前記格納ポインタ以外によって指定された前記メモリ内のターゲット・メモリ・アドレスとの間のターゲット制約なしデータ転送プログラム命令に応答して、前記処理回路がターゲット制約なしデータ転送動作を実施しないようにする、請求項２に記載の装置。
【請求項４】
前記所有権値と前記格納ポインタとが、前記処理回路の保護された実行コンテキストに関連し、
前記保護された実行コンテキストが、前記メモリ内の保護された格納領域を有し、
前記保護された格納領域が、前記保護された実行コンテキストにおいて動作するときの前記処理回路以外によって、及び前記ターゲット制約付きデータ転送プログラム命令に応答して実施される前記ターゲット制約付きデータ転送動作以外によってはアクセス不可能である、
請求項２または３に記載の装置。
【請求項５】
前記格納ポインタによって指定された前記ターゲット・メモリ・アドレスが、前記保護された格納領域内にある、請求項４に記載の装置。
【請求項６】
前記格納ポインタが、前記ターゲット制約付きデータ転送動作のための前記ターゲット・メモリ・アドレスを指定するために、前記格納ポインタと組み合わせて使用される関連するレジスタ・インデックス値を有する、請求項２から５までのいずれか一項に記載の装置。
【請求項７】
前記レジスタ・インデックス値が、前記複数のレジスタの各々のために使用されるべき前記ターゲット・メモリ・アドレスを指定する際に使用するためのインデックス値を含むインデックス値のシーケンスの一部である、請求項６に記載の装置。
【請求項８】
前記処理回路が、インデックス・リセット・プログラム命令に応答して、前記インデックス値を前記シーケンス内の開始値に設定する、請求項７に記載の装置。
【請求項９】
前記処理回路が、インデックス変更プログラム命令に応答して、前記インデックス値を前記シーケンス内の次のインデックス値に設定する、請求項７または８に記載の装置。
【請求項１０】
前記複数のレジスタの各々が、それぞれのレジスタ番号を有し、単調順序でインデックス値の前記シーケンスをトラバースすることが、
単調順序付けで前記レジスタ番号をトラバースすることと、
前記装置の動作中に前記複数のレジスタ内の対応するレジスタの統計的使用頻度を減少させることに対応する順序で前記レジスタ番号をトラバースすることと
のうちの１つに対応する、請求項７、８及び９のいずれか一項に記載の装置。
【請求項１１】
前記ターゲット制約付きデータ転送動作が、前記レジスタ内のデータ値を前記ターゲット・メモリ・アドレスに格納するためのターゲット制約付きストア動作であるとき、前記処理回路が、前記ターゲット・メモリ・アドレスを指定するために使用されるべき前記格納ポインタを識別するために前記レジスタの前記所有権値を使用する、請求項２から１０までのいずれか一項に記載の装置。
【請求項１２】
前記ターゲット制約付きストア動作が、所定の値を前記レジスタに格納し、前記レジスタの前記所有権値を、前記処理回路の現在状態に一致するように設定する、請求項１１に記載の装置。
【請求項１３】
前記ターゲット制約付きストア動作が、前記シーケンス内の最後のレジスタ・インデックス値のためのストアを実施するとき、ストア・シーケンス完了マーカー値が格納される、請求項７並びに請求項１１または１２に記載の装置。
【請求項１４】
前記ターゲット制約付きデータ転送動作が、前記ターゲット・メモリ・アドレスから前記レジスタにデータ値をロードするためのターゲット制約付きロード動作であるとき、前記処理回路が、前記ターゲット・メモリ・アドレスを指定するために使用されるべき前記格納ポインタを識別するためにターゲット所有者変数を使用する、請求項２から１３までのいずれか一項に記載の装置。
【請求項１５】
前記ターゲット制約付きロード動作が、前記データ値を前記レジスタにロードする前に、前記ストア・シーケンス完了マーカー値の存在について検査する、請求項１３及び請求項１４に記載の装置。
【請求項１６】
前記ターゲット制約付きデータ転送動作がまた、前記レジスタ・インデックス値を前記シーケンス内の次のレジスタ・インデックス値に設定する、請求項２及び請求項７に記載の装置。
【請求項１７】
前記処理回路が、ターゲット所有者設定プログラム命令に応答して、前記現在の例外レベルよりも低い特権レベルの指定された例外レベルに対応するように、前記ターゲット所有者変数を設定する、請求項１及び請求項１６に記載の装置。
【請求項１８】
前記最高特権レベルよりも低い特権レベルを有する前記例外レベルの各々が、前記複数のレジスタ内のレジスタの所有者に対応する保護された実行コンテキストのサポートを与える、請求項１並びに請求項４から６までのいずれか一項に記載の装置。
【請求項１９】
前記処理回路の状態が前記所有権値と一致しない状態での、前記処理回路による前記レジスタへのアクセスを実施するための試みを、前記レジスタ・アクセス制御回路が検出したとき、前記レジスタ・アクセス制御回路が、レジスタ所有権例外をトリガする、請求項１から１８までのいずれか一項に記載の装置。
【請求項２０】
前記複数のレジスタが、
スカラー汎用レジスタと、
浮動小数点レジスタと、
構成レジスタと、
のうちの１つ又は複数を備える、請求項１から１９までのいずれか一項に記載の装置。
【請求項２１】
データを処理する方法であって、
複数のレジスタ内にそれぞれのデータ値を保持するステップであって、前記複数のレジスタの各々が、関連する所有権変数を有する、保持するステップと、
前記複数のレジスタ内に保持されたデータ値に対して、プログラム命令によって指定されたデータ処理動作を実施するステップと、
前記複数のレジスタのうちのレジスタのために前記関連する所有権変数によって指定された所有権値に応答して、前記所有権値に応じて前記処理回路による前記レジスタへのアクセスを制御するステップと、
複数の例外レベルのうちの現在の例外レベルにおいて動作するように前記処理回路を制御するステップであって、前記所有権値が、前記複数の例外レベル状態のうちの１つを指定する、制御するステップと、
を含み、
当該方法は、前記現在の例外レベルが、前記所有権値によって指定された例外レベルとは、所定の様式において異なるとき、少なくともいくつかのプログラム命令によって指定されたデータ処理動作を実施するための前記処理回路による前記レジスタへのアクセスを制限するステップをさらに含み、
前記複数の例外レベルが、最低特権レベルから最高特権レベルに及ぶ特権レベルの階層に対応し、前記最高特権レベルよりも低い特権レベルに対応する例外レベルにおいて動作するとき、例外条件が前記処理回路の動作中に起こり、特権のより高いレベルを有する例外レベルへの切替えをトリガし、
前記所定の様式は、前記現在の例外レベルが、前記階層において、前記所有権値によって指定された例外レベルよりも高いことであり、
前記最低特権レベルが、前記最高特権レベルよりも特権的でない、
方法。
【請求項２２】
前記所有権値が、関連する格納ポインタを有し、
前記制御するステップが、前記レジスタと前記格納ポインタによって指定されたメモリ内のターゲット・メモリ・アドレスとの間のターゲット制約付きデータ転送プログラム命令に応答して、ターゲット制約付きデータ転送動作の実施を可能にし、
前記所有権値と前記格納ポインタとが、保護された実行コンテキストに関連し、
前記保護された実行コンテキストが、メモリ内の保護された格納領域を有し、
前記保護された格納領域が、前記保護された実行コンテキストにおいて動作するときの前記処理回路以外によって、及び前記ターゲット制約付きデータ転送プログラム命令に応答して実施される前記ターゲット制約付きデータ転送動作以外によってアクセス不可能である、
請求項２１に記載の方法。
【請求項２３】
例外をとることと、特権レベルの階層内のより高い特権レベルに切り替えることとを行うと、前記複数のレジスタ内に格納された値を前記保護された格納領域に格納するために、１つ又は複数のターゲット制約付きプログラム命令を実行するステップと、
前記例外から戻ることと、前記保護された実行コンテキストに対応する特権レベルの階層内のより低い特権レベルに切り替えることとを行うと、保護された格納領域内に格納された値を前記複数のレジスタにロードするために、１つ又は複数のターゲット制約付きプログラム命令を実行するステップと、
を含む、請求項２１または２２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理システムの分野に関する。より詳細には、本開示は、データ処理システム内でのデータ値を格納するレジスタへのアクセスの制御に関する。
【背景技術】
【０００２】
データ処理システムに、プログラム命令によって指定されたデータ処理動作において使用するためのそれぞれのデータ値を格納するためのレジスタを与えることが知られている。例外に応答するとき、いくつかの知られているシステムは、例外ハンドリング・コードに依拠して、例外ハンドリング・プログラム・コードの責務の一部としてレジスタの現在のコンテンツをセーブし、例外ハンドリング・プログラム・コードの実行の最後に、レジスタにこのコンテンツを復元する。
【発明の概要】
【０００３】
本開示の少なくともいくつかの実施例は、データを処理するための装置であって、
それぞれのデータ値を保持するための複数のレジスタであって、複数のレジスタの各々が、関連する所有権変数を有する、複数のレジスタと、
複数のレジスタ内に保持されたデータ値に対して、プログラム命令によって指定されたデータ処理動作を実施するための処理回路と、
複数のレジスタのうちのレジスタのための関連する所有権変数によって指定された所有権値に応答して、所有権値に応じて処理回路によるレジスタへのアクセスを制御するためのレジスタ・アクセス制御回路と、
複数の例外レベルのうちの現在の例外レベルにおいて動作するように処理回路を制御するための例外レベル制御回路と、
を備え、
所有権値が、複数の例外レベル状態のうちの１つを指定し、
レジスタ・アクセス制御回路は、現在の例外レベルが、所有権値によって指定された例外レベルとは、所定の様式において異なるとき、少なくともいくつかのプログラム命令によって指定されたデータ処理動作を実施するための処理回路によるレジスタへのアクセスを制限し、
複数の例外レベルが、最低特権レベルから最高特権レベルに及ぶ特権レベルの階層に対応し、最高特権レベルよりも低い特権レベルに対応する例外レベルにおいて動作するとき、例外条件が処理回路の動作中に起こり、特権のより高いレベルを有する例外レベルへの切替えをトリガし、
所定の様式は、現在の例外レベルが、階層において、所有権値によって指定された例外レベルよりも高いことであり、
最低特権レベルが、最高特権レベルよりも特権的でない、
装置を提供する。
【０００４】
本開示の少なくともいくつかの実施例は、データを処理する方法であって、
複数のレジスタ内にそれぞれのデータ値を保持するステップであって、複数のレジスタの各々が、関連する所有権変数を有する、保持するステップと、
複数のレジスタ内に保持されたデータ値に対して、プログラム命令によって指定されたデータ処理動作を実施するステップと、
複数のレジスタのうちのレジスタのために関連する所有権変数によって指定された所有権値に応答して、所有権値に応じて処理回路によるレジスタへのアクセスを制御するステップと、
複数の例外レベルのうちの現在の例外レベルにおいて動作するように処理回路を制御するステップであって、所有権値が、複数の例外レベル状態のうちの１つを指定する、制御するステップと、
を含み、
方法は、現在の例外レベルが、所有権値によって指定された例外レベルとは、所定の様式において異なるとき、少なくともいくつかのプログラム命令によって指定されたデータ処理動作を実施するための処理回路によるレジスタへのアクセスを制限するステップをさらに含み、
複数の例外レベルが、最低特権レベルから最高特権レベルに及ぶ特権レベルの階層に対応し、最高特権レベルよりも低い特権レベルに対応する例外レベルにおいて動作するとき、例外条件が処理回路の動作中に起こり、特権のより高いレベルを有する例外レベルへの切替えをトリガし、
所定の様式は、現在の例外レベルが、階層において、所有権値によって指定された例外レベルよりも高いことであり、
最低特権レベルが、最高特権レベルよりも特権的でない、
方法を提供する。
【０００５】
次に、例示的な実施例が、単に例として、添付の図面を参照しながら説明される。
【図面の簡単な説明】
【０００６】
【図１】複数のレジスタとレジスタ・アクセス制御回路とを含むデータ処理システムを概略的に示す。
【図２】例外（特権）レベルの階層と、それらの異なる例外レベルにおいて動作する関連するプログラムとを概略的に示す。
【図３】レジスタとそれの関連する所有権値とを概略的に示す。
【図４】保護された実行環境コンテキスト・データを概略的に示す。
【図５】ターゲット制約なしロード／ストア命令を概略的に示す。
【図６】ターゲット制約付きロード／ストア命令を概略的に示す。
【図７Ａ】ターゲット制約付きロード／ストア命令に関連して使用されるさらなる命令を概略的に示す。
【図７Ｂ】レジスタ・セービング及びレジスタ復元コード・シーケンスの実例を概略的に示す。
【図８】入れ子状の例外ハンドリングを概略的に示す。
【図９】例外エントリを概略的に示す流れ図である。
【図１０】例外復帰を概略的に示す流れ図である。
【発明を実施するための形態】
【０００７】
図１は、メモリ６に結合されたプロセッサ・コア４を含むデータ処理システム２を概略的に示す。プロセッサ・コア４は、メモリ６からプログラム命令をフェッチし、これらを命令パイプライン１０に供給するための、命令フェッチ・ユニット８を含む。命令パイプライン１０に結合されたデコーダ回路１２は、これらのプログラム命令を復号して、復号されたプログラム命令によって指定されたようにデータ処理動作を実施するように処理回路１４を制御する制御信号を生成する。データ処理動作は、レジスタのレジスタ・バンク１６内に格納されたデータ値の操作を含む。レジスタ・バンク１６内のこれらのレジスタは、スカラー汎用レジスタと、浮動小数点レジスタと、構成レジスタとを含む。他の実施例では、さらなるタイプのレジスタが、おそらく提供され、すべての実施例が、これらのタイプのレジスタのすべてを存在させておく必要があるとは限らない。
【０００８】
ロード・ストア・ユニット１８は、レジスタ・バンク１６内のレジスタとメモリ６内の格納場所との間のデータ値のデータ転送動作を実施する。これらの転送動作は、以下でさらに説明されるように、制約付きストア命令、制約付きロード命令、制約なしストア命令、又は制約なしロード命令から生じ得る。
【０００９】
データ処理システム２は、所定の時点において、複数の可能な例外レベル（特権レベル）のうちの１つにおいて動作する。いずれが現在の例外レベルであるかの制御と、例外レベル間の切替えとが、例外レベル制御回路２０によってハンドリングされる。概して、より高い例外レベルにおいて動作するとき、メモリ６内に格納されたデータ値への、より大きいアクセスが与えられる。しかしながら、本開示は、保護された実行コンテキストに関連するデータの少なくとも一部が、より高い例外レベル（特権のより高いレベル）において動作するときであっても、その保護された実行コンテキストの外部で動作するときは、アクセス不可能である、保護された（１つ又は複数の）実行コンテキストに備えるものである。
【００１０】
図１に示されているメモリ６は、それに関連する異なるアクセス制約を有する複数のメモリ領域を示す。ハイパーバイザ・メモリ領域２２は、ハイパーバイザ・プログラムにとってアクセス可能であるが、より低い例外レベル（特権のより低いレベル）におけるプログラムにとってアクセス不可能である。第１の保護領域２４と第２の保護領域２６とは、それぞれ、システムが第１の保護された実行コンテキスト又は第２の保護された実行コンテキストにおいて動作させられるとき、アクセス可能であるが、それらのそれぞれのコンテキストの外部ではアクセス不可能である。たとえば、第１の保護領域２４は、データ処理システム２が第１の保護された実行コンテキストにおいて動作するとき、アクセス可能であるが、データ処理システムがハイパーバイザ・プログラムを実行しているとき（これが、より高い例外レベルを有し得るものであっても）及び第２の保護された実行コンテキストにおいて実行しているとき、アクセス不可能である。共有領域２８は、異なるプログラム間のデータ値の共有を可能にするように、ハイパーバイザ・プログラムにとっても、第１の実行コンテキスト及び第２の実行コンテキストにおいて実行するときにもアクセス可能である。保護された実行コンテキストの各々は、それぞれの保護された仮想マシン実行環境のプロビジョンに対応し得る。保護された仮想マシン実行環境は、それに、それのプライベート・データを、他のプライベート仮想マシン、さらにはハイパーバイザ・プログラムにすらアクセス不可能であるように格納することができる、それぞれの保護領域２４、２６を割り振ることによって、それのデータがプライベートであることを保証することにおいて可能にされ得る。
【００１１】
プロセッサ・コア４は、レジスタ・バンク１６に結合されたレジスタ・アクセス制御回路３０を含む。レジスタ・バンク１６内のレジスタの各々は、関連する所有権値を有する。複数のレジスタが所有権値を共有し得るか、又は他の実施例では、各レジスタは個々に設定可能な所有権値を有し得る。いくつかの実施例では、レジスタ・バンク１６内のレジスタのすべてが所有権値を有するとは限らず、又は以下でさらに説明されるように、例外ハンドリング動作に関してそれらのコンテンツを保護するための機構に関与するとは限らないことも可能である。
【００１２】
レジスタ・アクセス制御回路は、処理回路１４によって又はロード・ストア・ユニット１８によってのいずれかでアクセスされるべきレジスタに関して指定された所有権値に応じて、レジスタ・バンク１６内のレジスタへのアクセスを制御するように働く。プロセッサ・コア４が、所有権値によって指定された所有権制約に違反するデータ処理動作を実施することを試みる場合、レジスタ・アクセス制御回路３０は、レジスタ所有権例外を生成し、これは、それのセキュリティに違反するさらなる試みに対するセーフガードとして、保護された実行環境を閉じることなどのアクションをトリガし得る。
【００１３】
この例示的な実施例のコンテキストでは、レジスタ・バンク内のレジスタのために指定された所有権値は、複数の可能な例外レベルの中からのある例外レベルを、関係するレジスタを「所有する」例外レベルとして関連付ける。データ処理システム２がそれの中で動作している現在の例外レベルを示すために、例外レベル信号ＥＬが、例外レベル制御回路２０からレジスタ・アクセス制御回路３０に供給される。レジスタ・アクセス制御回路３０が、現在の例外レベルが、アクセスされるべきレジスタの現在の所有者として記録された例外レベルとは異なることを検出した場合、前述のレジスタ所有権例外がトリガされ、試みられたアクセスが許可されない。現在の例示的な実施例では、所有権値は、例外レベルを所有することに対応するが、他の実施例は、スレッド・ベースの所有権など、所有権帰属の異なる形式を使用し得ることが可能である。
【００１４】
いくつかの実施例では、レジスタ・アクセス制御回路３０は、処理システム２が、関係するレジスタを所有するものとして示された例外レベルと同じ例外レベルに現在あるときのみアクセスを許可するように、所与のレジスタへのアクセスを制約するように働き得る。他の実施例では、レジスタ・アクセス制御回路は、データ処理システム２が、より高い例外レベル（特権のより高いレベル）にある場合は、アクセスを許可しないが、処理システム２が、現在の所有者として示される例外レベルと同じ例外レベルにあるか又はより低い（より特権的でない）例外レベルにあるときは、所与のレジスタへのアクセスを与えるように働くかもしれない。これは、特権のより高いレベルがより大きいアクセスを与える通常モデルの逆であるが、ハイパーバイザ・プログラムがそのようなアクセスを有することを許可しないことが望まれるとき、ハイパーバイザ・プログラムからレジスタのコンテンツを保護する目的をはたす。そのようなハイパーバイザ・プログラムは、それが、より低い例外レベルにおける保護された実行環境において処理の動作をスケジュールすることは許可されるが、それらの保護された実行環境に関連するプライベート・データが、それぞれの保護された実行環境によってセット・アップされた及び「所有された」保護された領域２４、２６内に格納されるために、そのようなデータにアクセスすることは可能でないので、「ブラインド」ハイパーバイザ・プログラムと呼ばれることがある。
【００１５】
図２は、それぞれの例外レベルにおいて実行する複数のプログラムを概略的に示す。図２の実例では、ハイパーバイザ・プログラム３２は、例外レベルＥＬ２において実行する。この例外レベルは、同じく図２に示されているような例外レベルＥＬ１、ＥＬ０よりも高いレベルの特権を有する。ハイパーバイザ・プログラム３２は、２つの保護された実行環境３４、３６における実行のスケジューリングを管理する。これらの保護された実行環境３４、３６の各々は、例外レベルＥＬ１において実行するそれぞれのオペレーティング・システム３８、４０と、例外レベルＥＬ０において実行する１つ又は複数のアプリケーション・プログラム４２、４４、４６とを含む。保護された実行環境３４、３６の各々は、ハイパーバイザ・プログラム３２によるアクセスから保護されたプライベート・データを格納することができるメモリ６中にそれ自体の保護された領域２４、２６をセット・アップすることが可能である、仮想マシン実行環境を提供する。保護された実行環境３２、３６内で実行するプログラムはまた、それらが、データを、ハイパーバイザ・プログラム２２、又は他の保護された実行環境３４、３６において実行するプログラムなどの他のプログラムと共有することを望む場合、そのデータを共有領域２８内に格納することができる。
【００１６】
図３は、たとえば、レジスタ・バンク１６内で見つかり得る、６４ビット・データ値を格納する６４ビット汎用レジスタ４８を概略的に示す。このレジスタ４８に関連するのは、レジスタ４８内にデータ値を所有する例外レベルＥＬｘを示す２ビットの所有権値である。所有権有効ビットは、所有権値ＥＬｘが所与の時点において有効であるかどうかを示す。レジスタ４８内のデータ値へのアクセスが行われるべきであるとき、レジスタ・アクセス制御回路３０は、関係するアクセスが許可されるべき（たとえば、データ処理システムの現在の例外レベルが、所有権値ＥＬｘによって示された例外レベルと同じか、またはそれより低い）か否かを決定するために、現在の所有権値ＥＬｘを読み取り、それを、例外レベル制御回路２０によって供給されるデータ処理システム２の現在の例外レベルと比較する。
【００１７】
図４は、少なくとも保護された実行環境が現在実行中でないとき、たとえば、例外が起こり、保護された実行環境の外部で実行する例外ハンドリング・プログラムによってハンドリングされている、たとえば、例外ハンドリング・プログラムがより高い例外レベルにおいて実行されているときの、保護された実行環境自体の保護された領域２４、２６内に格納された保護された実行環境コンテキスト・データを概略的に示す。前述のように、この例示的な実施例では、レジスタ値の所有権は、例外レベルごとにハンドリングされ、したがって、各例外レベルに関連する設計された状態レジスタとして提供される（ロードとストアの両方のために使用される）格納ポインタが存在する。格納ポインタは、以下で説明されるターゲット制約付き命令によってのみ、通常、アクセスされる、追加のレジスタであり、汎用レジスタ・セットの一部でない。この格納ポインタは、６４ビット・コンテキスト・データのそれのアレイが格納された、保護された実行環境の保護された領域２４、２６内の開始アドレスを示す。このコンテキスト・データは、例外の発生時になど、そのコンテキストが実行することを中止したときに、関係するコンテキストによって所有されるレジスタ・バンク１６から読み取られた、格納されたデータ値５０のブロックを含む。インデックス値は、各例外レベルについて格納ポインタに関連付けられ、所与のレジスタＲｘのための対応するデータ値を格納する６４ビット・アレイ内の特定の位置を示す。また、他の構成レジスタ状態データも６４ビット・アレイ内に格納され得る。
【００１８】
保護された実行環境を去ることになる例外が発生すると、制御が元の保護された実行環境に戻される前に、レジスタ・バンク１６の現在のコンテンツが、例外ハンドリング・プログラムによって、それの処理の最後に復元され得るように、これらのコンテンツを格納することが、呼び出される例外ハンドリング・コードの責務である。レジスタ・バンク１６内の特定のレジスタ・データ値を所有する例外レベルに関連する格納ポインタによって示された６４ビット・アレイが、そのデータ値のセービングを、メモリ６のそれぞれの保護された領域２４、２６内に格納された適切な６４ビット・アレイに向けるために使用される。
【００１９】
図５は、ターゲット制約なしロード及びストア命令を概略的に示す。そのような命令は、それによって従来の様式で転送が行われるべきである、メモリ６内のアドレスを自由に定義することが可能である。もし、そのようなターゲット制約なしロード及びストア命令が、保護された実行環境に関連するレジスタからデータ値を格納及び復元するために使用されていたならば、それらは、そのようなデータ値が、適切な保護された領域２４、２６の外部に格納され、したがって、関連する保護された実行環境の外部で不適切に利用可能になることを許可したかもしれない。
【００２０】
本開示は、図６に示されているように、ターゲット制約付きロード及びストア命令を与え、それらの命令は、デコーダ回路１２によって復号され、図４に関して説明されたように、レジスタの所有する例外レベルについての格納ポインタによって指定された位置への、メモリ６とのターゲット制約付きデータ転送動作を実施するようにロード／ストアユニット１８を制御する。これらのターゲット制約付きロード及びストア命令は、ＳＴＲＢｌｉｎｄ命令及びＬＤＲＢｌｉｎｄ命令の形式を有する。これらの命令は、デコーダ回路１２によって復号されたとき、図６に示されている擬似コードにおいて指定された処理動作を実施するために、ロード／ストアユニット１８と、処理コア４の他の部分とを制御するように働く。
【００２１】
ターゲット制約付きストア命令ＳＴＲＢｌｉｎｄの場合、これは、レジスタ・インデックス変数ＢＲＩの現在の値によって示された汎用レジスタからのデータを、６４ビット・アレイ５０の開始への関連する所有する例外レベルの格納ポインタと、現在のレジスタ値ＢＲＩとの組合せによって示されたメモリの位置に格納するように働く。インデックス値は、ターゲット制約付きストア命令の実行の最後に、インデックス値がそれの最大値又は最小値をオーバーフロー又はアンダーフローする場合にフラグが設定されて、随意に増分され得、レジスタ・ストア動作のシーケンスが完了したことを示す。
【００２２】
所与の時点において、レジスタ・バンク１６内のレジスタが、それらの所有権値によって、異なるそれぞれの所有する例外レベルを有するものとしてマークされ得ることが可能であることが理解されよう。この状況は、たとえば、レジスタ・バンクの現在のコンテンツが部分的にセーブされ、所有権が、さらなる例外が起こるときに、それ自体、レジスタ・バンクのレジスタの所有権を取ることになり、したがって、それらの現在の所有権値によって示されるように、適切な保護された領域２４、２６にレジスタ・バンク１６のコンテンツをセーブするべきである新しい例外レベルによって主張される、入れ子状の割込みの発生により起こり得る。ターゲット制約付きストア命令の動作の擬似コード表現から、この命令が従うパラメータが、レジスタ・インデックス値ＢＲＩであり、所与のレジスタの特定の所有者（ｂｉ値）を識別する実施される動作、関連する保護されたコンテキスト・データ・アレイのための格納ポインタ（ｂｐ値）及びデータ値がレジスタからセーブされるために使用されるべき個々の格納位置（ｂｒｐ値）がすべて、セーブされるべきレジスタのための現在の所有権値に応じて動的に導出されることがわかるであろう。
【００２３】
図６に示されているターゲット制約付きロード命令ＬＤＲＢｌｉｎｄは、入力オペランドとしてレジスタ・インデックスＢＲＩとターゲット例外レベルＢＴＥＬの両方を取る。処理がそれに戻されるべきであるターゲット例外レベルＢＴＥＬ、及びしたがって、適切な保護された領域２４、２６から復元されるレジスタ・バンク１６のための関連するデータ値は、例外ハンドリング・コードが、その例外ハンドリングの後にどの例外レベルに処理が戻されるかを制御することを担当するように、例外ハンドリング・コードによって設定される。また、ターゲット制約付きロード命令の機能を示す擬似コードは、所与のレジスタ・インデックス値ＢＲＩのためのそのようなロードを実施することの最後に、レジスタ・インデックス値が随意に減分され、前に説明されたように、レジスタ・インデックス値がオーバーフローする場合、フラグが設定され得ることも示す。
【００２４】
例外エントリ時に、例外ハンドリング・コードは、適切な保護された領域２４、２６にレジスタ・バンク１６の現在のコンテンツをセーブするように、レジスタ・インデックス値ＢＲＩのシーケンスに続くターゲット制約付きストア命令ＳＴＲＢｌｉｎｄのシーケンスを実行するように働く。ＳＴＲＢｌｉｎｄ命令によってレジスタ・コンテンツをセーブした後に、レジスタは、所定の値、たとえば０に設定され得る。例外ハンドリングを終了し、ターゲット例外レベルに処理を戻す前に、例外ハンドリング・プログラムは、戻される保護された実行環境がそれの処理を再開し得るように、ターゲット実行レベルのためのそれぞれの保護された領域２４、２６の保護されたコンテキスト・データ・アレイ内に格納されたデータ値を、レジスタ・バンク１６にロードするように働く、ターゲット制約付きロード命令ＬＤＲＢｌｉｎｄのシーケンスを実行することを担当する。
【００２５】
ターゲット制約付きロード及びストア命令ＳＴＲＢｌｉｎｄ及びＬＲＤＢｌｉｎｄは、それらのターゲット制約付きロード及びストア命令を実行する例外レベルによって所有されないレジスタに関連するデータ値にアクセスすることを許可されるが、メモリ６への又はそこからの転送が、関係するレジスタ値を所有する例外レベルに関連する格納ポインタ（並びに前に説明されたような現在のインデックス値）によって指定された位置に行われるという制約を受ける。対照的に、図５のターゲット制約なしロード及びストア命令は、それらのターゲット制約なしロード及びストア命令を実行している例外レベルによって所有されないレジスタ内のデータ値にアクセスすることが可能でない。
【００２６】
図７Ａは、デコーダ回路１２によって復号され、ターゲット制約付きロード及びストア命令の使用に関連する、３つのさらなるプログラム命令の動作、並びにブラインド・レジスタ・セービングを実施する例外ハンドリング及びブラインド・レジスタ復元を実施する例外復帰の実例を概略的に示す。
【００２７】
インデックス・リセット・プログラム命令ＲｅｓｅｔＢＲＩが、デコーダ回路１２によって復号され、インデックス値ＢＲＩを０の値（他の実施例は、異なるリセット値を使用し得る）にリセットするように処理回路１４を制御する。インデックス変更プログラム命令ＩｎｃｒｅｍｅｎｔＢＲＩが、インデックス値の所定のシーケンスに続くように、現在のレジスタ・インデックス値ＢＲＩを変更するように働く。この実例では、シーケンスは、０から開始し、ターゲット制約付きロード及びストア命令を使用するセービングを必要とするレジスタ・バンク１６内のレジスタの数に対応する最大数までの単調増加シーケンスである。単調減少レジスタ・インデックス値など、レジスタ・インデックス値のための他のシーケンスが使用され得ることが理解されよう。さらなる実施例は、非カノニカルであるインデックス値のシーケンスを利用し得るが、代わりに、データ処理システム２の通常動作中に、レジスタ・バンク１６内の対応するレジスタの減少する統計的使用頻度に対応する順序に従う。このようにして、シーケンスに従うことによってセーブ又は復元されるべきレジスタ・バンク１６内の最初のレジスタは、使用の最も高い可能性をもつレジスタである。例外ハンドリング・ルーチンは、それ自体の例外ハンドリング使用のためにレジスタを解放するように、通常、レジスタ・バンク・コンテンツの一部をセーブ・オフするように働くにすぎず、追加のレジスタ空間が必要とされる場合、セーブされるべき他のレジスタをそのままにすることになる。このようにして、最も頻繁に使用されるレジスタを最初にセーブ・オフ又は復元するシーケンスは、レジスタ・バンクのコンテンツのすべてをセーブ・オフする必要なしに、例外ハンドリング・プログラム・コードに、使用する必要がある可能性が最も高いレジスタを与える際に有用である。
【００２８】
前述のように、例外ハンドリング・プログラムが例外ハンドリングに続くべきであるプログラムに処理を戻すべきであるとき、例外ハンドリング・プログラムは、図６のターゲット制約付きロード命令を使用して、ターゲット例外レベルを、レジスタ・バンク・コンテンツを復元することに関連するように設定する。デコーダ回路１２は、ターゲット所有者設定プログラム命令ＳｅｔＢＴＥＬに応答して、ターゲット例外レベルを復元されるように設定する。ターゲット例外レベルは、ターゲット所有者設定プログラム命令（ＳｅｔＢＴＥＬ）を実行している現在の例外レベルよりも低くなるように制約される。
【００２９】
図７Ｂは、例外ハンドリング・ブラインド・レジスタ・セービング・ルーチンを示す。コードのこのセグメントは、例外ハンドリング・プログラム・ルーチンの始まりにおいて、又はそれの始まりの近くで実行されることを意図される。いくつかの実施例では、示されているコードは、保護された実行環境から入るときにハンドリングされるべき例外のためのターゲット・ベクトルの位置において格納され得る。ブラインド・レジスタ・セービング・ルーチンは、レジスタ・インデックス値をリセットすることによって開始し、次いで、オーバーフローによって示されるようにシーケンスが完了するまで、増分するレジスタ・インデックス値を用いてターゲット制約付きストア命令を実行する。示されている実例では、インデックス値を変更することは、ターゲット制約付きストア命令自体によって実施され、別個のインデックス変更プログラム命令を使用していない。
【００３０】
いくつかの例示的な実施例では、ストア・シーケンス完了マーカー値が、保護された実行環境コンテキスト・データを形成する６４ビット・アレイ５０内に格納され得る。ストア・シーケンス完了マーカー値は、格納されるべきであるレジスタ・バンク１６からのデータ値のフルセットが、６４ビット・アレイ内に実際に格納されていることを示すために使用され得る。図７Ｂに示されている例外ハンドリング・ブラインド・レジスタ・セービング・プログラムは、その最後において別個の命令として、又はターゲット制約付きストア命令からのオーバーフローのアクション内に暗黙的に、６４ビット・アレイ５０内にストア・シーケンス完了マーカー値を格納するアクションを含み得る。このストア・シーケンス完了マーカー値は、データ値のフルセットがターゲット例外レベルに復元されている、すなわち、その例外レベルを去り、したがって、この時点でデータ値のフルセットを復元することが適切であるとき、フルセットが適切にセーブされたことを検証するためにブラインド・レジスタ復元を実施する例外復帰の時に、読み取られ得る。フルセットが、復元されるために利用可能でない場合、通常挙動が従われなかったことを示す例外が引き起こされ得る。ターゲット制約付きロード動作は、進むことが許可される前に、そのようなストア・シーケンス完了マーカー値の存在について検査し得る。図７Ｂに示されている例外復帰ブラインド・レジスタ復元プログラム・シーケンスは、データ値がレジスタ・バンク１６に復元されるべきであるターゲット例外レベルを識別するための、ターゲット所有者設定プログラム命令の実行によって開始する。次いで、レジスタ・インデックス値は、インデックス・リセット・プログラム命令によってリセットされる。これに続いて、レジスタ・インデックス値がオーバーフローによって示されるようにそのシーケンスの最後に達するまで、ターゲット例外レベルのための格納ポインタとレジスタ・インデックス値の現在の値によって示されたメモリ・アドレスからの制約付きロード動作を実施するために、ループが、レジスタ・インデックス値のシーケンスについて実行される。
【００３１】
いくつかの知られているシステムでは、プロセッサが、例外エントリ時にレジスタを自動的にセーブし得ることが理解されよう。本明細書で説明される機構は、たとえば、例外処理は、レジスタの適切なサブセットがそれの使用のために利用可能にされることが必要とされ得るにすぎないので、例外エントリ時にすべてのレジスタをセーブ及び復元することが必要でないことがあり、より効率的な手法を与える。
【００３２】
図８は、入れ子状の例外が起こるときにレジスタ・セービングを実施するための動作を概略的に示す。データ処理システム２は、最初に、例外レベルＥＬ０において動作している。ステップ１において、データ処理システムを例外レベルＥＬ１に導く例外が起こる。次いで、例外レベルＥＬ１において実行する例外ハンドリング・プログラムは、例外レベルＥＬ０によって所有されるレジスタ・バンク１６からのデータ値を、例外レベルＥＬ０に関連する保護された領域２４、２６にセーブすることを開始する。これは、図８においてステップ２によって示されている。ステップ２における例外レベルＥＬ０によって所有されるデータ値のセービングの途中で、データ処理システム２を、例外レベルＥＬ１において実行することから例外レベルＥＬ２において実行することに変更する、ステップ３によって示されているさらなる例外が起こる。次いで、例外レベルＥＬ２における例外ハンドリング・プログラム・コードは、レジスタ・バンク１６からのデータ値をセーブ・オフすることを開始し、再び、レジスタ・インデックス値のシーケンスの始まりにおいて開始する。これは、ステップ４によって示されている。セーブされるべきデータ値の第１の部分は、すでにセーブ・オフされ、例外レベルＥＬ１において実行する例外ハンドリング・プログラムによって主張された、レジスタに対応する。ステップ５によって示されているセーブされるべきデータ値の第２の部分は、例外レベルＥＬ０に関連し、例外レベルＥＬ１の例外ハンドリング・プログラムによってセーブされなかった、データ値の残余である。レジスタからのデータ値のセービング値の最後に、レジスタのすべてが、それらが例外レベルＥＬ２によって所有されることを示す所有権値でマークされる。
【００３３】
各データ値が、例外ハンドリングの一部として制約付きストア命令によってセーブ・オフされるので、そのレジスタのための新しい所有者が、制約付きストア命令の実行が実施される例外レベルに対応する所有権値を使用して設定される。このようにして、データ値のすべてがレジスタ・バンク１６から適切な保護された領域２４、２６にセーブ・オフされたとき、レジスタのすべてが、例外レベルＥＬ２によって所有されるものとしてマークされることになる。
【００３４】
レジスタ・バンク１６内のレジスタに関連する所有権値は、前のデータ値をセーブ・オフし、それらの現在の例外レベルのためのレジスタの所有権を主張する、制約付きストア命令によって設定されることがわかるであろう。所有権値は、所有権値を、それらの制約付きロード命令のための関連するターゲット例外レベルに設定する制約付きロード命令によってそれらの元の値に戻される。
【００３５】
レジスタ・バンク１６からのデータ値のセービングが、例外レベルＥＬ２のための例外ハンドラによって完了されると、例外レベルＥＬ２のための例外ハンドリングの残りが実施され得る。これが完了したとき、例外ハンドリング・プログラムは、例外レベルＥＬ１の例外ハンドラに処理を戻し、並びにそれが出られたとき、例外レベルＥＬ１に関連したレジスタにデータ値を復元し得る。
【００３６】
図９は、例外エントリ時の処理を概略的に示す流れ図である。ステップ５２において、処理は、例外が検出されるまで待つ。ステップ５４において、データ処理システム２が動作している例外レベルが、例外レベル制御回路２０によって増分される。ステップ５６において、前に使用された処理が、保護された実行環境の一部であったか否かに関する決定が行われる。割り込まれた実行が、保護された実行環境の一部であった場合、処理は、図７に示されているブラインド・レジスタ・セービング・シーケンスが実行され得るように、保護された実行環境の割込みに関連する例外ベクトルによって向けられるように、ステップ５８に進む。割り込まれた処理が、保護された実行環境からのものでなかった場合、処理は、レジスタからのデータ値は、従来の様式でスタック・メモリに、例外ハンドリング・コードによって格納される、ステップ６０に進む。ステップ５８又はステップ６０のいずれかに続いて、処理は、例外のさらなる処理が実施される、ステップ６２に進む。
【００３７】
図１０は、例外復帰を概略的に示す流れ図である。ステップ６４において、処理は、例外復帰が望まれるまで待つ。次いで、ステップ６６は、その例外へのエントリが、保護された実行環境において実施されている処理からのものであったかどうかを決定する。エントリが、保護された実行環境からのものであった場合、処理は、図７のブラインド・レジスタ復元動作が実施される、ステップ６８に進む。エントリが、保護された実行環境からのものでなかった場合、処理は、レジスタ・コンテンツが従来の様式でスタック・メモリから復元される、ステップ７０に進む。ステップ６８又はステップ７０のいずれかに続いて、処理は、データ処理システム２の例外レベルが、復帰が行われているターゲット例外レベルに切り替えられる、ステップ７２に進む。次いで、ステップ７４は、ターゲット例外レベルにおける処理を再開する。
【００３８】
例示的な実施例が、添付の図面を参照しながら本明細書で詳細に説明されたが、特許請求の範囲は、それらの厳密な実施例に限定されず、様々な変更、追加及び修正が、添付の特許請求の範囲の範囲及び趣旨から逸脱することなく、当業者によって実現され得ることを理解されたい。たとえば、従属請求項の特徴の様々な組合せが、独立請求項の特徴とともに行われ得る。
【図１】
2019511042.tif 000003
【図２】
2019511042.tif 000004
【図３】
2019511042.tif 000005
【図４】
2019511042.tif 000006
【図５】
2019511042.tif 000007
【図６】
2019511042.tif 000008
【図７Ａ】
2019511042.tif 000009
【図７Ｂ】
2019511042.tif 000010
【図８】
2019511042.tif 000011
【図９】
2019511042.tif 000012
【図１０】
2019511042.tif 000013
【国際調査報告】
2019511042.tif 000014
2019511042.tif 000015