IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-28
(45)【発行日】2022-10-06
(54)【発明の名称】レルム階層における目標レルムの無効化
(51)【国際特許分類】
   G06F 12/14 20060101AFI20220929BHJP
   G06F 12/00 20060101ALI20220929BHJP
【FI】
G06F12/14 510A
G06F12/00 570A
【請求項の数】 19
(21)【出願番号】P 2019570883
(86)(22)【出願日】2018-06-08
(65)【公表番号】
(43)【公表日】2020-09-10
(86)【国際出願番号】 GB2018051563
(87)【国際公開番号】W WO2019002810
(87)【国際公開日】2019-01-03
【審査請求日】2021-06-01
(31)【優先権主張番号】1710342.5
(32)【優先日】2017-06-28
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】パーカー、ジェイソン
(72)【発明者】
【氏名】エバンス、マシュー ルシアン
(72)【発明者】
【氏名】ストックウェル、ガレス リース
(72)【発明者】
【氏名】コバチェビク、ジョルジェ
【審査官】吉田 歩
(56)【参考文献】
【文献】国際公開第2016/203189(WO,A1)
【文献】米国特許出願公開第2008/0077922(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/14
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための処理回路と、
複数のメモリ領域の所有権を行使するためのメモリ・アクセス回路であり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、前記ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を前記所有者レルムが有する、メモリ・アクセス回路と、
ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層に従って前記複数のレルムを管理するためのレルム管理ユニットと
を備え、
前記処理回路が、所与の子レルムの親レルム以外のレルムから前記所与の子レルムに入ることを禁じられ、
目標レルムの無効化を要求するコマンドに応答して、前記レルム管理ユニットが、前記目標レルムは前記処理回路によって実行されない無効のレルムであることを示すように前記目標レルムに関連するレルム管理データを更新するが、前記目標レルムの任意の子孫レルムに関連するレルム管理データはそのままにしておき、前記目標レルム及び前記目標レルムの任意の子孫レルムを前記処理回路にアクセス不可能にさせるように構成された、装置。
【請求項2】
前記レルム管理ユニットが、所与の子レルムの親レルムによって所有されているメモリ領域内の前記所与の子レルムに関連するレルム管理データを記憶するように構成された、請求項に記載の装置。
【請求項3】
前記レルム管理ユニットが、無効にされた目標レルムによって所有される各メモリ領域を再請求するための再請求動作をトリガするように構成された、請求項1からまでのいずれか一項に記載の装置。
【請求項4】
前記処理回路が複数の処理要素を備え、前記処理要素のうちの1つでソフトウェア・プロセスによってトリガされた前記目標レルムの無効化に応答して、前記レルム管理ユニットが、少なくとも1つの他の処理要素によって保持された前記目標レルム及び前記目標レルムの任意の子孫レルムのキャッシュされたレルム管理データの無効化をトリガするように構成された、請求項1からまでのいずれか一項に記載の装置。
【請求項5】
前記キャッシュされたレルム管理データが、前記キャッシュされたレルム管理データに関連する前記対応するレルムを識別するグローバル・レルム識別子と関連付けられ、
所与の子レルムの前記グローバル・レルム識別子が、前記所与の子レルムの親レルムの前記グローバル・レルム識別子と共通部分を共用する、請求項に記載の装置。
【請求項6】
前記処理回路が、目標レルムに入ろうと試み、前記目標レルムに関連するレルム管理データがアクセス不可能であるときに、前記処理回路が、故障条件をトリガするように構成された、請求項1から5までのいずれか一項に記載の装置。
【請求項7】
目標メモリ領域の所有権の所与の子レルムへの移転を要求する領域請求コマンドに応答して、前記レルム管理ユニットが、前記目標メモリ領域が前記所与の子レルムの親レルム以外のレルムによって所有されるときに前記領域請求コマンドを拒否するように構成された、請求項1からまでのいずれか一項に記載の装置。
【請求項8】
各メモリ領域が、複数のライフサイクル状態のうちの1つと関連付けられ、前記レルム管理ユニットが、前記目標メモリ領域が所定のライフサイクル状態以外のライフサイクル状態にあるときに前記領域請求コマンドを拒否するように構成された、請求項に記載の装置。
【請求項9】
所与の子レルムが、前記所与の子レルムによって所有される所与のメモリ領域に記憶されたデータにその親レルムがアクセスすることを排除する権利を有する、請求項1からまでのいずれか一項に記載の装置。
【請求項10】
前記メモリ・アクセス回路が、前記所与の子レルムによって設定された属性に応じて、その親レルムが、前記子レルムによって所有される前記所与のメモリ領域に記憶されたデータにアクセスすることを可能にされるかどうかを決定するように構成された、請求項に記載の装置。
【請求項11】
前記所与の子レルムが、前記所与のメモリ領域に記憶されたデータにその親レルムがアクセスすることを可能にするとき、前記所与の子レルムと同じ親レルムを共有する兄弟レルムもまた、前記所与のメモリ領域に記憶された前記データにアクセスすることを可能にされる、請求項10に記載の装置。
【請求項12】
前記メモリ・アクセス回路が、前記所与の子レルムによって設定されたグローバル可視性属性が所定の値を有するときに前記子レルムによって所有される前記所与のメモリ領域に記憶されたデータに任意のレルムがアクセスすることを許すように構成された、請求項1から11のいずれか一項に記載の装置。
【請求項13】
前記処理回路が、複数の特権レベルのうちの1つによるソフトウェア・プロセスを実行するように構成されており、
所与の子レルムが、その親レルムと同じ特権レベル又はその親レルムより低い特権レベルで実行されるソフトウェア・プロセスに対応する、請求項1から12のいずれか一項に記載の装置。
【請求項14】
前記レルム管理ユニットが、ハードウェア・ユニットを備える、請求項1から13のいずれか一項に記載の装置。
【請求項15】
前記レルム管理ユニットが、レルム管理ソフトウェアを実行する前記処理回路を備える、請求項1から14までのいずれか一項に記載の装置。
【請求項16】
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための手段と、
複数のメモリ領域の所有権を行使するための手段であり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を前記所有者レルムが有する、手段と、
ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層に従って前記複数のレルムを管理するための手段と
を備え、
前記データ処理を実行するための手段が、所与の子レルムの親レルム以外のレルムから前記所与の子レルムに入ることを禁じられ、
目標レルムの無効化を要求するコマンドに応答して、前記管理するための手段が、前記目標レルムは前記データ処理を実行するための手段によって実行されない無効のレルムであることを示すように前記目標レルムに関連するレルム管理データを更新するが、前記目標レルムの任意の子孫レルムに関連するレルム管理データはそのままにしておき、前記目標レルム及び前記目標レルムの任意の子孫レルムを前記データ処理を実行するための手段にアクセス不可能にするように構成された、装置。
【請求項17】
1つ又は複数のソフトウェア・プロセスに応答して処理回路でデータ処理を実行するステップと、
複数のメモリ領域の所有権を行使するステップであり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、前記ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を前記所有者レルムが有し、前記複数のレルムが、ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層を有し、前記処理回路が、所与の子レルムの親レルム以外のレルムから前記所与の子レルムに入ることを禁じられるようにする、ステップと、
目標レルムの無効化を要求するコマンドに応答して、前記目標レルムは前記処理回路によって実行されない無効のレルムであることを示すように前記目標レルムに関連するレルム管理データを更新するが、前記目標レルムの任意の子孫レルムに関連するレルム管理データはそのままにしておき、前記目標レルム及び前記目標レルムの任意の子孫レルムを前記処理回路にアクセス不可能にさせるステップと
を含む、データ処理方法。
【請求項18】
命令実行環境を提供するためにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための処理プログラム論理と、
複数のメモリ領域の所有権を行使するためのメモリ・アクセス・プログラム論理であり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、前記ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を前記所有者レルムが有する、メモリ・アクセス・プログラム論理と、
ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層に従って前記複数のレルムを管理するためのレルム管理プログラム論理と
を含み、
前記処理プログラム論理が、所与の子レルムの親レルム以外のレルムから前記所与の子レルムに入ることを禁じられ、
目標レルムの無効化を要求するコマンドに応答して、前記目標レルムは前記処理プログラム論理によって実行されない無効のレルムであることを示すように前記目標レルムに関連するレルム管理データを更新するが、前記目標レルムの任意の子孫レルムに関連するレルム管理データはそのままにしておき、前記レルム管理プログラム論理が、前記目標レルム及び前記目標レルムの任意の子孫レルムを前記処理プログラム論理にアクセス不可能にさせるように構成された、コンピュータ・プログラム。
【請求項19】
請求項18に記載の前記コンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。
【背景技術】
【0002】
指定のメモリ領域についてのアクセス権を行使するためのメモリ・アクセス制御技法を提供することが知られている。通常は、権限のより少ないプロセスがメモリ領域にアクセスすることを、より高い特権レベルで実行するプロセスが排除することができるように、これらの技法は特権レベルに基づく。
【先行技術文献】
【非特許文献】
【0003】
【文献】「Some Efficient Architecture Simulation Techniques」、1990年冬、USENIX Conference、53~63頁
【発明の概要】
【課題を解決するための手段】
【0004】
少なくともいくつかの実例は、以下を備える装置を提供する。
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための処理回路と、
複数のメモリ領域の所有権を行使するためのメモリ・アクセス回路であり、所与のメモリ領域は、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムは、ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所有者レルムは、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を有する、メモリ・アクセス回路と、
ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層に従って複数のレルムを管理するためのレルム管理ユニット、
ここで、目標レルムの無効化を要求するコマンドに応答して、レルム管理ユニットは、目標レルム及び目標レルムの任意の子孫レルムを処理回路にアクセス不可能にさせるように構成される。
【0005】
少なくともいくつかの実例は、以下を備える装置を提供する。
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための手段と、
複数のメモリ領域の所有権を行使するための手段であり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所有者レルムが、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を有する、手段と、
ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層に従って複数のレルムを管理するための手段、
ここで、目標レルムの無効化を要求するコマンドに応答して、管理するための手段は、目標レルム及び目標レルムの任意の子孫レルムを、処理するための手段にアクセス不可能にさせるように構成される。
【0006】
少なくともいくつかの実例は、以下を含むデータ処理方法を提供する。
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するステップと、
複数のメモリ領域の所有権を行使するステップであり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所有者レルムが、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を有し、ここで、複数のレルムは、ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムである、レルム階層を有する、ステップと、
目標レルムの無効化を要求するコマンドに応答して、目標レルム及び目標レルムの任意の子孫レルムを処理回路にアクセス不可能にさせるステップ。
【0007】
少なくともいくつかの実例は、以下を備える命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムを提供する。
1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための処理プログラム論理と、
複数のメモリ領域の所有権を行使するためのメモリ・アクセス・プログラム論理であり、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、ソフトウェア・プロセスのうちの少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所有者レルムが、前記所与のメモリ領域に記憶されたデータに他のレルムがアクセスすることを排除する権利を有する、メモリ・アクセス・プログラム論理と、
ルート・レルム以外の各レルムは親レルムによってトリガされたコマンドに応答して初期化された子レルムであるレルム階層に従って複数のレルムを管理するためのレルム管理プログラム論理、
ここで、目標レルムの無効化を要求するコマンドに応答して、レルム管理プログラム論理は、目標レルム及び目標レルムの任意の子孫レルムを処理回路にアクセス不可能にさせるように構成される。
【0008】
本技法のさらなる態様、特徴及び利点は、以下のような添付の図面と併せて読まれることになる、以下の実例の説明から明らかとなろう。
【図面の簡単な説明】
【0009】
図1】第1のメモリ及び第2のメモリ内に記憶されたメモリ領域を使用する複数の処理要素を含むデータ処理システムを概略的に示す図である。
図2】実行される複数のプロセスの関係と、それらのプロセスに関連する特権レベルと、どのプロセスが所与のメモリ領域を所有するか及びそれに応じてその所与のメモリ領域へのアクセスを制御するための排他的権利を有するかを制御するためのそれらのプロセスに関連付けられたレルムとを概略的に示す図である。
図3】レルム管理ユニット及びメモリ管理ユニットによる管理下のメモリ領域を概略的に示す図である。
図4】所与のメモリ領域を第1のメモリから第2のメモリにエクスポートするために実行されるプログラム命令のシーケンスを概略的に示す図である。
図5】ページ・エクスポートを概略的に示す流れ図である。
図6】複数のレルムと、どのエクスポート・コマンドがどの他のエクスポート・コマンドを中断することができるかを制御するための制御階層内のそれらの関係とを概略的に示す図である。
図7】ページ・インポートを概略的に示す流れ図である。
図8】所与のメモリ領域の重複するエクスポート動作を実行する第1のエクスポート・コマンド・ソース及び第2のエクスポート・コマンド・ソースを概略的に示す図である。
図9】処理要素と、メモリに記憶されたレルム管理制御データとのより詳細な実例を示す図である。
図10】親レルムが様々な子レルムのプロパティを記述するレルム記述子を定義することができる、レルムの階層の実例を示す図である。
図11】レルム階層の異なる実例を示す図である。
図12】レルム階層の異なる実例を示す図である。
図13】親レルムによって、その子レルムのレルム記述子を記録するために保持される、レルム記述子ツリーの実例を示す図である。
図14】レルム記述子ツリーの対応するレベルにインデックスをそれぞれ提供するいくつかの可変長ビット部分から構築されたローカル・レルム識別子の実例を示す図である。
図15】レルム階層内の各レルムのローカル及びグローバル・レルム識別子の実例を示す図である。
図16】レルム記述子の内容の実例を示す図である。
図17】異なるレルム・ライフサイクル状態を示すテーブルである。
図18】レルムのライフサイクル状態の変化を示す状態機械の図である。
図19】所与のメモリ領域の所有権テーブルにおけるエントリの内容を示すテーブルである。
図20】所有者以外のどのレルムが領域にアクセスすることを許されるかを制御するために所与のメモリ領域について設定することができる可視性属性を示すテーブルである。
図21】レルム管理ユニットによって排他的アクセス向けに確保されたRMUプライベート・メモリ領域に対応する状態を含む、メモリ領域の異なるライフサイクル状態の実例を示す図である。
図22】所与のメモリ領域のライフサイクル状態の遷移を示す状態機械を示す図である。
図23】所与のメモリ領域の所有権が親レルムとその子レルムとの間をどのように通過することができるかを示す図である。
図24】所有者レルムによって設定された許可に基づくメモリ・アクセスの制御の直交レベルを提供する特権レベル及びレルム管理ユニット・レベルに依存する、メモリ制御属性を定義するページ・テーブルに基づいて提供されるメモリ・アクセス制御を概略的に示す図である。
図25】変換ルックアサイド・バッファの実例を示す図である。
図26】ページ・テーブル及びRMUテーブルに基づいてメモリへのアクセスを制御する方法を示す流れ図である。
図27】異なる例外レベルにおいて実行するプロセスにアクセス可能な状態を示す図である。
図28】レルムに入る又は例外から戻る方法を示す流れ図である。
図29】レルムを出る又は例外を取る方法を示す流れ図である。
図30】子レルムへのエントリ及び親レルムに戻る退出の実例を示す図である。
図31】ネストされたレルム退出及びネストされたレルム・エントリの実例を示す図である。
図32】レルムからの退出時のレルム実行コンテキストの遅延保存の使用の実例を示す図である。
図33】異なる子レルムが入られる前に、前に退出された子レルムに関連する状態のサブセットがメモリに保存されることを確実にするためのフラッシュ・コマンドの使用の実例を示す図である。
図34】サブレルムの親レルムに関連するプロセス内の指定のアドレス範囲に対応するサブレルムの使用を示す図である。
図35】使用され得るシミュレータ実例を示す図である。
【発明を実施するための形態】
【0010】
図1は、大容量記憶デバイスの役割を果たすオフチップ・フラッシュ・メモリなどの別個の不揮発性メモリ6に接続されたシステム・オン・チップ集積回路4を備えるデータ処理システム2を概略的に示す。システム・オン・チップ集積回路4は、(この例示的実施例では)2つの汎用プロセッサ(CPU:Central processing unit))8、10、及びグラフィックス・プロセッシング・ユニット(GPU:Graphics processing unit)12の形で、複数の処理要素を備える。実際には、追加の汎用プロセッサ、グラフィックス・プロセッシング・ユニット、直接メモリ・アクセス(DMA:Direct Memory Access)ユニット、コプロセッサ、並びに、メモリ・アドレス空間内のメモリ領域にアクセスするのに役立つ及びそれらのメモリ領域内に記憶されたデータにデータ処理動作を実行する他の処理要素など、多数の異なる形態の処理要素が提供され得ることが理解されよう。
【0011】
汎用プロセッサ8、10及びグラフィックス・プロセッシング・ユニット12は、相互接続回路14につながれ、相互接続回路14を介してオンチップ・メモリ16及び外部メモリ6(外部メモリ・インターフェース18を介する)とのメモリ・トランザクションを実行する。メモリ16は、図1においてオンチップであるが、他の実施例において、メモリ16は、この代わりに、オフチップ・メモリとして実装され得る。オンチップ・メモリ16は、全メモリ・アドレス空間内の複数のメモリ領域に対応するデータを記憶する。これらのメモリ領域は、メモリ・ページに対応し、どのメモリ領域(ページ)が所与の時間にオンチップ・メモリ16内に存在するか、どのプロセスがそれらのメモリ領域内に記憶されたデータ及びそれらのメモリ領域に関連する他のパラメータにアクセスすることができるか、を制御する管理動作の対象となる。より具体的には、この例示的実施例において、処理要素8、10、12のそれぞれは、レルム管理ユニット20、22、24及び汎用メモリ管理ユニット26、28、30を含む。汎用メモリ管理ユニット26、28、30は、アドレス・マッピング(たとえば、仮想アドレス及び中間物理アドレス、又は物理アドレスの間のマッピング)などのメモリ領域の動作、所与のメモリ領域にアクセスすることができるプロセスでの特権レベル制約、所与のメモリ領域内のデータの記憶特性(たとえば、キャッシュ可能性、デバイス・メモリ状況など)及びメモリの領域の他の特性の態様を制御するのに役立つ。
【0012】
レルム管理ユニット20、22、24は、複数のメモリ領域の所有権を行使するのに役立つデータを管理し、それにより、所与のメモリ領域は、複数のプロセスのうちから指定された所与の所有するプロセス(又は所有者「レルム」)を有する(プロセス又はレルムは、たとえば、モニタ・プログラム、ハイパーバイザ・プログラム、ゲスト・オペレーティング・システム・プログラム、アプリケーション・プログラム、又は同様の物のうちの1つ、或いはそのようなプログラムの指定の副部分である)。所与のメモリ領域の所与の所有するプロセス(所有者レルム)は、その所与のメモリ領域に記憶された所与の独自のデータへのアクセスを制御する排他的権利を有する。具体的には、所有者プロセスは、その所有者プロセスより高い特権レベルで実行されるプロセスによるその所有されるメモリ領域へのアクセスを防止する権利を有する。
【0013】
したがって、複数のメモリ領域は、複数の所有者レルムの間で分けられる。各レルムは、少なくとも1つのソフトウェア・プロセスの少なくとも一部分に対応し、いくつかのメモリ領域の割り当てられた所有権である。所有するプロセス/レルムは、それらのレルムのメモリ領域内に記憶されたデータへのアクセスを制御する排他的権利を有する。どのメモリ領域が各レルムにマップされたメモリであるかの管理及び制御は、所有者レルム自体以外のプロセスによって実行される。この配置を使用して、どのメモリ領域(メモリのページ)が、そのハイパーバイザによって管理されるそれぞれのゲスト仮想マシン(ゲスト・オペレーティング・システム)によって所有されるレルム内に含まれるかをハイパーバイザなどのプロセスが制御することが可能であり、さらに、ハイパーバイザ自体は、それが所与のレルムに割り当てたメモリ領域内に記憶されたデータに実際にアクセスする権利を有さなくてもよい。したがって、たとえば、ゲスト・オペレーティング・システムは、そのゲスト・オペレーティング・システムのレルム内に、すなわち、そのゲスト・オペレーティング・システムによって所有されているメモリ領域内に、記憶されたデータをそれの管理ハイパーバイザから秘密にしておくことができる。
【0014】
レルムへのメモリ・アドレス空間の分割、及びそれらのレルムの所有権の制御は、処理要素8、10、12のそれぞれに関連するレルム管理ユニット20、22、24を介して管理され、汎用メモリ管理ユニット26、28、30によって提供される制御のより多数の従来の形に直交する制御プロセスである。したがって、レルム管理ユニット20、22、24は、メモリ・アドレス空間のメモリ領域の所有権を行使するために、メモリ・アクセス回路を提供する。場合により、レルム所有権を行使するメモリ・アクセス回路はまた、MMU26、28、30の部分を含み得る(たとえば、MMU26、28、30内のTLBは、2つの別個の構造体にアクセスする必要性を回避するために、RMU20、22、24によって提供されるレルム制御に基づいて、アクセスを制御するためのいくらかの制御データを含む)。この例示的実施例において、処理要素8、10、12のそれぞれは、独自のレルム管理ユニット20、22、24を含み、これはパフォーマンスを目的として有益である。しかしながら、より一般的には、所有権を行使するメモリ・アクセス回路は、レルム管理ユニットの単一インスタンス、存在するすべてのレルム管理ユニット20、22、24の組合せ、又は存在するそれらのレルム管理ユニット20、22、24のサブセットを備え得る。したがって、所有権を行使するためのメモリ・アクセス回路は、異なる処理要素8、10、12に関連してシステム・オン・チップ集積回路4にわたって分散され得る、或いは1つの場所において又は何らかの他の配置において集められ得る。
【0015】
汎用プロセッサ8、10を備えた処理要素は、プログラム命令を復号及び実行するそれぞれの復号及び実行回路32、34を含むものとして示されている。これらのプログラム命令は、メモリ・アドレス空間の異なる所有権レルム内のメモリ領域の管理を制御するのに役立つコマンド(レルム管理コマンド又はRMUコマンド)を含む。一実例として、実行されるプログラム命令は、レルム管理ユニット・コマンドとして指定された、並びにそれらがそれらの関連するレルム管理ユニット20、22、24によって実行(動作)され得る順番でプログラム命令ストリーム内で遭遇されるときに関連するレルム管理ユニット20、22、24に指示される、プログラム命令を含み得る。レルム管理ユニット・コマンドの実例は、新しいレルムを初期化する若しくは既存のレルムを無効にするためのコマンド、メモリ領域を指定のレルムに割り当てる、指定のレルムからメモリ領域を取り除く、暗号化を用いて第2のメモリ6に第1のメモリ16からメモリ領域内に含まれるデータをエクスポートするためのコマンド、及び、そのデータが第2のメモリ6内で保護されるようにエクスポートされたデータで実行される他のプロセスを含む。さらに、レルム管理ユニット・コマンドは、インポートされたデータに実行される関連暗号解読及び検証動作を有して、第2のメモリ6から第1のメモリ16にデータをインポートし戻すために提供される。
【0016】
メモリ領域からのデータのそのようなエクスポート及びインポートとの関連において、オンチップ・メモリ16などの第1のメモリは、システム・オン・チップ集積回路4内のレルム管理ユニット20、22、24によって厳密に管理され、したがって、それらのレルム管理ユニット20、22、24は、所有権を行使することができ、所与のメモリ領域内のデータへのアクセスを、そのメモリ領域を所有するプロセス、又はその所有するプロセスがアクセスを許可したそれらのプロセスに制限することが理解されよう。しかしながら、そのメモリ領域内のデータが、第2のメモリである外部不揮発性メモリ6などにエクスポートされるとき、次いで、レルム管理ユニット20、22、24によって提供されるアクセスの制御は、もはや効果的ではなく、したがって、データは、いくつかの他のやり方で保護を必要とする。これは、それがエクスポートされる前に使用するメモリ領域内のデータを暗号化することと、次いで、それがオンチップ・メモリ16にインポートし戻されるときに秘密鍵でそのデータを解読することとによって、達成される。
【0017】
エクスポート・プロセスは、エクスポートされたデータの特性を指定するメタデータの生成を伴い得る。データがオンチップ・メモリ16にインポートし戻されるときに、メタデータが、そのインポートされたデータについて読み取ることができ、メタデータに表されたデータの特性が、そのインポートされたデータの整合性を確保するために、インポートされたデータの特性に対してチェックすることができるように(たとえば、チェックサム、データ・サイズ、署名など)、そのようなメタデータは、第1のメモリ(オンチップ・メモリ16)のメタデータ・メモリ領域内に別個に記憶され得、それは、レルム管理ユニット20、22、24にプライベート(すなわち、既存のプロセスのいずれかにではなく、そのようなレルム管理ユニット20、22、24にのみアクセス可能)にされる。それは、レルム管理ユニット20、22、24のプライベート・データ(エクスポートされた領域/ページの特性を示す前述のメタデータを含む)が、オンチップ・メモリ16からオフチップの不揮発性メモリ6にエクスポートされる必要がある(たとえば、オンチップ・メモリ16内に空間を作るために)ということでもよく、この状況において、RMUプライベート・メタデータ自体は、その保護のために暗号化することができ、そして、エクスポートされたメタデータの特性を示す新しいメタデータは、暗号化及びエクスポートされたメタデータが、使用するためにそれがオンチップ・メモリ16にインポートし戻されるときに、チェック及び認証され得る順番で、オンチップ・メモリ16内に保持することができる(そのような保持されるメタデータは、エクスポートされたメタデータよりも有意に小さいサイズである)。
【0018】
メモリ領域の特性を記述するそのようなメタデータ及びそれらのメモリ領域内に記憶されたデータは、分岐パターンを有するメタデータ・メモリ領域ツリーなど、階層構造の一部として配置され得る。メモリ・アドレス空間の異なる領域が、レルム管理ユニット20、22、24によって所有されるメタデータ領域の役割を果たすように登録されるとき、そのようなメタデータ・メモリ領域ツリーの形態は、ソフトウェア制御下で決定され得る。そのようなメモリ領域の登録を制御するソフトウェアは、メタデータを記憶するのに役立つメモリ領域間の関係を割り当てる、割り当てを解除する、及び制御することができるが、そのようなソフトウェアは、どのプロセスがそのようなデータにアクセスできるかを制御することができるという意味で、それらのメモリ領域内に含まれるデータをそれ自体では所有しないことが理解されよう。レルム管理ユニット20、22、24(すなわち、メモリ管理回路)にプライベートなメモリ領域の場合、そのようなアクセス権は、レルム管理ユニット20、22、24自体のみに制限され得、そのようなRMUプライベート・データは、任意の他のプロセスと共用されないことになる。
【0019】
所与のメモリ領域内に記憶された所与のデータがエクスポートされるとき、次いで、内容がアクセス不可能になるように、関係するメモリ領域は無効にされる。このページを再使用するために、そのページは、その所与のメモリ領域が別のプロセスによる使用のために解放されるとき、そのような前の内容が別のプロセスにアクセス可能にされない順番で、前の内容に対して相関関係のない他のデータでメモリ領域を上書きするクリーン・コマンドを使用することによって、「有効」にされる。たとえば、所与のメモリ領域の内容は、すべて、ゼロ値に書かれてもよく、又は固定値に書かれてもよく、又はランダム値に書かれてもよく、それにより、メモリ領域の最初の内容を上書きする。他の実例では、エクスポートされたメモリ領域の内容の上書きは、後続のクリーン・コマンドではなくて、エクスポート・コマンド自体によってトリガすることができる。どちらにしても、所与のメモリ領域が、所与の所有するプロセス以外のプロセスにアクセス可能にされる前に、エクスポートされている所与の所有されているデータは、所与の所有されているデータと相関関係のない値で上書きされ得る。所与のプロセスによって所有されている所与のメモリ領域が、エクスポート・プロセスの一部としてエクスポートされようとするとき、エクスポートを実行するためにレルム・コマンドを実行しているレルム管理ユニット20、22、24は、所与のプロセスから関係するメモリ領域の所有権を取得し(すなわち、領域をRMUプライベートにする)、すべての他のプロセス(及び他のレルム管理ユニット)に対してそのメモリ領域のアクセスをロックし、エクスポート動作(暗号化、メタデータ生成及び上書きを含む)を実行し、次いで、そのメモリ領域へのアクセスのロックを解除し、そのメモリ領域の所有権を解放する。したがって、エクスポートされる、又はインポートされるプロセスにあるメモリ領域は、そのコマンドが実行されている間に、関係するレルム管理ユニットにプライベートにされ得る。
【0020】
図2は、複数のプロセス(プログラム/スレッド)、複数の例外レベル(特権レベル)、安全及び非安全プロセッサ・ドメイン、並びに所与のメモリ領域の所有権を表す複数のレルムの関係を概略的に示す。図示されるように、特権レベルの階層は、例外レベルEL0から例外レベルEL3(例外レベルEL3は最高レベルの特権を有する)まで広がる。システムの動作状態は、たとえば、英国ケンブリッジのARM(登録商標)社によって提供されるTrustZone(登録商標)アーキテクチャを使用するプロセッサにおいて、安全ドメイン及び非安全ドメインによって表されるものとしての安全動作状態と非安全動作状態とに分けられ得る。
【0021】
図2に示すように、メモリ・アクセス回路(レルム管理ユニット20、22、24及び関連制御ソフトウェア(たとえば、1つのレルム管理ユニットを実行するミリコード))は、実行環境内の複数のレルムを管理する。所与のメモリ領域(メモリ・ページ)は、指定のレルムによって所有される。レルムは、その中の子レルム、及びそれらの子レルム内の孫レルムを有することができる(たとえば、レルムA(親)、レルムB(子)、及びレルムC(孫)を参照)。所有権がレルムAに与えられたメモリ領域は、レルムAによって所有されるプロセスの制御下でレルムAからレルムBに順に渡されるそれらの所有権を有し得る。したがって、親レルムは、自らの子レルムに領域の所有権を与えることができる。それらの子レルムは、次いで、それらがそれらの親レルムから受信したメモリ領域の所有権を渡すことができ、その所有権は、次いで、最初のレルム、すなわちレルムA、の孫レルムであるそれら自体の子レルム(たとえば、レルムC)によって所有されることになる。所与のレルム内のプロセスは、同じ特権レベルで又は異なる特権レベルで実行することができる。したがって、レルム間を移動するための便利な機構は、異なる特権レベル(例外レベル)の間でシステムを自ら移動させる例外の使用を含み得るので、多数の実際の事例において、レルム及び特権レベルは対応し得るが、プロセスが属するレルムは、プロセスの特権レベルに対する直交パラメータである。
【0022】
図2に示すレルム間の関係は、異なるレルムの間の子/親関係を示し、これは、メモリ領域管理のためのコマンドの複数の異なるソースが互いに競合するときにシステムの動作を制御するための制御階層を生じさせるために使用され得る。したがって、たとえば、前述のようなメモリ領域をエクスポートするためのエクスポート・コマンドの場合、第1のエクスポート・コマンドは、レルムB内のオペレーティング・システム・カーネル36など、第1のエクスポート・コマンド・ソースから所与のレルム管理ユニット(メモリ・アクセス回路)によって受信され得る。第2のエクスポート・コマンドが、次いで、レルムAにおいて実行するハイパーバイザ・プログラム38など、第2のコマンド・ソースから所与のレルム管理ユニットによって受信され得る。この実例では、ハイパーバイザ・プログラム38によって発行された第2のエクスポート・コマンドが、オペレーティング・システム・カーネル36によって発行された第1のエクスポート・コマンドの処理を中断するように、第2のエクスポート・コマンド・ソースであるハイパーバイザ・プログラム38は、親レルムと子レルムとの関係によって確立された制御階層内でより高い優先度を有する。ハイパーバイザ38によって発行されるものとしての第2のエクスポート・コマンドが完了したとき、オペレーティング・システム・カーネル36によって発行されるものとしての第1のエクスポート・コマンドが再開され得る。
【0023】
この実例では、第2のエクスポート・コマンドは、より高い優先度を有し、したがって、第1のエクスポート・コマンドの動作を中断する。しかしながら、第2のエクスポート・コマンドが、たとえば、レルムC内のアプリケーション・プログラム40に由来した場合、次いで、これは、レルム間の関係によって確立された制御階層内でより低い優先順位を有し、したがって、アプリケーション・プログラム40からのそのような第2のエクスポート・コマンドは、オペレーティング・システム・カーネル36からの第1のエクスポート・コマンドの動作を中断しないことになり、そうではなく、第1のエクスポート・コマンドが完了するまで、それ自体が実行されるのを妨げられることになる。したがって、ページング動作(エクスポート及びインポート動作)は、レルム階層に関連し得る制御階層に応じて互いに中断されることがある又は中断されないことがあるという意味で、ページング動作は、互いに保護され得る。他の例示的実施例では、制御階層は、特権レベルに対応し得る。
【0024】
図3は、オンチップ・メモリ16内に記憶された複数のメモリ・ページ(メモリ領域)で異なる管理動作をそれぞれ実行するレルム管理ユニット20及び汎用メモリ管理ユニット26を概略的に示す。図示されるように、レルム管理ユニット24は、複数のレルム記述子42を使用し、各記述子は、レルムのプロパティを指定する。レルム管理ユニット24はまた、物理アドレスによってインデックスを付けられたエントリを含むレルム・グラニュール・テーブル(又は所有権テーブル)を維持することができ、それ自体がそのメモリ領域を実際に所有するか否かをそれが制御しない場合でも、各エントリは、そのメモリ領域がどのレルムに属するか、すなわち、どのレルムがそのメモリ領域内の制御データへのアクセスを制御する排他的権利を有するか、の指示を含む、対応するメモリ領域の情報を含む。レルム記述子及びレルム・グラニュール・テーブル・エントリは、メモリ16に記憶され得るが、RMU自体においてキャッシュされてもよい。したがって、図3に示されるように、異なるメモリ領域は、レルム指定RA、RB、RC、RD及びREによって指示されるように異なる所有するレルムを有する。メモリ領域のうちのいくつかはまた、レルム管理ユニット20によって所有され(これにプライベートであり)、RMUプライベートのマークを付される。そのようなRMUプライベート領域は、他のメモリ領域の特性を記述するメタデータを記憶するために、エクスポート又はインポートされているメモリ領域を一時的に記憶するために、或いはレルム管理ユニット20自体の他の目的のために、使用され得る。RMUプライベート領域は、対応する所有者レルムによってまだ所有され得るが、所有者レルムによって発行された汎用読取り/書込みアクセスにアクセス可能でなくてもよい(その代わりとして、RMU20に発行されたRMUコマンドが、RMUプライベート領域に任意の変更を行うようにRMU20をトリガすることが必要とされ得る)。
【0025】
メモリ領域のアドレス指定は、関係する具体的なシステムに応じて、仮想、中間物理又は物理アドレスでもよい。したがって、レルム管理ユニット20、及び汎用メモリ管理ユニット26は、受信されたアドレス(それらが仮想メモリ・アドレスであっても中間メモリ・アドレスであっても)が、関係するオンチップ・メモリ16内のメモリ領域をより直接的に表す、物理アドレスなどの、アドレスに変換されることを可能にする、変換データを記憶することができる。そのようなアドレス変換データは、変換ルックアサイド・バッファを使用するシステム・オン・チップ集積回路4及び他の分散された制御機構内で管理及び分散され得る。
【0026】
図4は、メモリ領域のエクスポート動作に関連するプログラム命令を概略的に示す。これらのプログラム命令は、プログラム命令ストリーム内に現れ、全回路内の異なる要素によって実行(動作)され得る。たとえば、レルム管理ユニット・コマンドは、それぞれのレルム管理ユニット12、22、24によって実行される。仮想アドレス・アンマップ命令(VUMAP:Virtual address unmapping instructions)及び変換ルックアサイド・バッファ無効化命令(TLBI:Translation look aside buffer invalidate instructions)などの命令が、システム・オン・チップ集積回路4内でブロードキャストされ、全体としてのシステム内の場所からそれらのコマンドによって指定されたものとしての変換データの使用をパージするのに役立つ(しかし、いくつかの実例では、専用の仮想アドレス・アンマップ命令が提供されないことがあり、その代わりに、仮想アドレスのアンマッピングが、特別なアンマップ命令を使用するのではなくて、メモリへの記憶を実行することによって変換テーブル・エントリを修正することによって、実行され得る)。バリア命令DSBが、図4に示された命令シーケンス内に挿入され、先行する仮想アドレス・アンマップ命令(又は同等の記憶命令)及び変換ルックアサイド・バッファ無効化命令がシステムのすべての部分によって完了されたという確認応答が受信されるまで、そのシーケンスの処理を停止するのに役立つ。したがって、レルム管理システム自体以外のシステム内の所与のメモリ領域の仮想アドレス変換のパージが、仮想アドレス・アンマップ命令(又は同等の記憶命令)、変換ルックアサイド・バッファ無効化命令及び対応するバリア命令のシーケンスによって達成され得る。所与のメモリ領域(ページ)の仮想アドレス変換データをアンマッピングすること(及び、以って、効果的に取り除くこと)によって、そのメモリ領域に記憶されたデータのエクスポート動作が実行されようとするときに、そのようなメモリ領域がシステム内のどこかで使用中でないことが確保され得る。
【0027】
バリア命令DSBが、システム内からの仮想アドレス変換データのパージが完了したことを確認する確認応答を受信した後は、次いで、レルム管理ユニットのエクスポート・コマンドが、レルム管理ユニットによって実行される。レルム管理ユニットによって所与のプロセスから受信されたそのようなエクスポート命令の実行は、指定された所与のメモリ領域に関する複数のコマンド・アクションを含むコマンド・シーケンス(レルム管理ユニット内に組み込まれたミリコードに対応する)のパフォーマンスをトリガする。これらのコマンドの目的は、たとえば図4に示されるように、アドレス変換データを集めるステップ、メモリ領域をロックするステップ、データを暗号化するステップ、外部にデータを記憶するステップ、メモリ領域に関連するメタデータを書き込むステップ、及び、次いでメモリ領域のロックを解除するステップを含む。
【0028】
レルム管理ユニットによってコマンド・シーケンスの一部として実行されるアドレス変換収集のステップは、関係するアクセス動作を完了するために必要とされるアクセス制御データをそのレルム管理ユニットに集める。これは、そのエクスポート動作が進行中になると、次いで、そのエクスポート動作を完了するために必要とされるパラメータ又はデータ、たとえば、アドレス変換データ、属性データ若しくはエクスポート・プロセスによって必要とされる他のデータ、の入手不能によることがあるような、エクスポート動作が停止される可能性が低くなることを確実にする。アクセス制御データのメモリ・アクセス回路(レルム管理ユニット)の検索及び記憶の一実例として、アドレス変換ステップは、エクスポート動作を完了するために必要とされ得るすべての必要なアドレス変換データ(たとえば、仮想アドレスから中間物理アドレス(又は物理アドレス)へのマッピング・データ)を検索するのに役立つ。
【0029】
アドレス変換データが検索された後は、次いで、レルム管理ユニットが、関係する領域に関連するロック・フラグをロックされた状態に設定するのに役立つ。このロック・フラグは、関係する領域の領域属性データ42内に記憶され得る。別法として、ロック・フラグは、それを任意の他のプロセス又はレルム管理ユニットによって上書きすることができないように、エクスポート動作を実行しているレルム管理ユニットにプライベートなメモリ領域内に記憶され得る。ロック・フラグをロック状態に設定するために、レルム管理ユニットは、他のレルム管理ユニットは関係するメモリ領域をロックされた状態で現在保持していないことを判定しなければならない。したがって、領域が他のどこかでロックされていないことを示す結果が返された場合、他のどこかに記憶されたデータを制御する任意の領域のロックされたフラグ値のポーリングが実行され、ロック・フラグはロック状態に設定される。領域が他のどこかでロックされた場合、次いで、エクスポート動作は失敗し、そのエクスポート動作を命じたプロセスにエラーが報告される。ロックが取得された後は、次いで、所与のメモリ領域内のデータは、暗号化され、システム・オン・チップ集積回路の外部に、たとえば外部不揮発性メモリ6に、記憶される。前述のように、暗号化されたデータの特性を示すメタデータ(又は、暗号化の前の所与のデータ)は、次いで、生成され、レルム管理ユニットプライベート領域内に記憶され、それは、エクスポートされたデータを後で認証するために使用することができる。最後に、関係するメモリ領域は、ロックされた状態からロック解除された状態にロックされたフラグを切り替えることによって、エクスポート・コマンドを実行するレルム管理ユニットによってロック解除される。メモリ・アクセス回路(レルム管理ユニット)のハードウェア機構によって行使されるロックの使用は、ロックされたフラグがロックされた状態にあるときに受信され得るさらなる処理要素からの任意の他の(第2の)アクセス・コマンドの進展を妨げる働きをする。
【0030】
図5は、ページ(メモリ領域)エクスポートを概略的に示す流れ図である。ステップ44において、領域管理ユニット20、22、24内以外のシステム内のどこかでのページの使用をパージするのに役立つ、プログラム命令が実行される(VUMAP、TLBI、DSB)。これは、エクスポートされようとする領域を指す変換データの無効化及びパージによって達成され得る。この変換データがパージされた後は、別のプロセス又は処理要素が、その領域へのアクセスを望む場合、次いで、それは、変換データを再フェッチしようと試みることになる。変換データの再フェッチが試みられたとき、関係する領域は、RMUプライベート状態に置かれており、そこでは、ページ・エクスポートの実行を試みる領域管理ユニット20、22、24のみがそのデータにアクセスする権利を有するので、その領域を再使用しようと試みるプロセス又は処理要素は、関連のある変換データの取得に失敗することになる。
【0031】
パージ要求がステップ44において発行されたとき、処理は、プログラム・シーケンス内のバリア命令DSBを超えて続くことが安全であるポイントにおいて、アドレス・データが他のどこか(レルム管理ユニット内以外)で無効にされたことを示すそれらのパージ要求から応答が受信されるまで、ステップ46で待つ(バリア命令DSBは、その応答が受信されるまで、処理要素8、10、12を停止する)。ステップ48において、レルム管理ユニット・エクスポート初期化命令が実行される。このエクスポート初期化命令は、コマンド・コンテキスト・バッファ(CCB:Command Context Buffer)が、コマンド・シーケンスが中断される場合、そのエクスポート動作に対応するそのコマンド・シーケンスの現在の部分的に完了された状態を表すコンテキスト・データを記憶するように確立された、RMUプライベートとして確立されたメモリ領域へのポインタを含む。代替の例示的実施例において、レルム管理ユニット自体は、コマンド・コンテキスト・バッファ(CCB)へのポインタを生成する責任を有し得る。ステップ50は、エクスポート・コマンド・ステップ48内のポインタによって指示されたコマンド・コンテキスト・バッファが空であるかどうかを判定する。コマンド・コンテキスト・バッファが空である場合、次いで、ステップ52は、これをRMUプライベート領域としてセットアップする。ステップ50においてコマンド・コンテキスト・バッファが空ではない場合、そのとき、これは、ステップ48において実行されているエクスポート初期化コマンドが、前に中断されたエクスポート動作を再開しようと試みていることを示す。この場合、処理はステップ54に進み、そこで、ポインタによって指し示されたコマンド・コンテキスト・バッファの内容が、その部分的に完了された状態データがCCBに記憶されたときに記憶された関連メタデータを使用し、認証される。検証に合格した場合、次いで、ステップ56は、エクスポート・コマンドの部分的に完了された状態、たとえば、任意の部分的に暗号化されたデータ、暗号化が進んだ元データ内の位置へのポインタ、部分的に完了されたコマンドのさらなる属性など、を復元するために、コマンド・コンテキスト・バッファの内容を使用するのに役立つ。ステップ48でコマンドによって指示されたエクスポート動作の初期化の後、その処理は、ステップ52を含むパス又はステップ54及び56を含むパスのいずれかを介して進み、レルム管理ユニット・エクスポート・コマンドを実行するためのコマンドが達せられるステップ58に達する。このコマンドが達せられたとき、次いで、領域管理ユニット20、22、24は、メモリ領域内のデータの一部に暗号化を実行し、宛先(ステップ48においてRMUエクスポート初期化命令内で指定されたポインタでもある)内にこれを記憶する。ステップ60は、ステップ48及び58において実行されている命令を発行したコマンド・ソースより高い優先度を有するコマンド・ソースからの中断が受信されたかどうかを判定する。そのようなより高い優先度のコマンドは、前述のような制御階層(たとえば、レルム階層、優先度階層など)内のより高い優先順位を有するソースに由来することになろう。そのようなより高い優先度の中断が受信された場合、次いで、処理はステップ62に進み、そこで、エクスポート命令が停止され、そして、エラー・コードが、ステップ48及び58で実行された命令を発行したコマンド・ソースに返される。ステップ64は、コマンド・コンテキスト・バッファにコマンドの部分的に完了された状態を保存するのに役立つ。ステップ66は、コマンド・コンテキスト・バッファ・メタデータを、これが後に検索されるときにコマンド・コンテキスト・バッファ内に記憶された部分的に完了された状態の認証に使用するためにRMUプライベート・メモリ領域に記憶する。ステップ68は、「部分的にエクスポートされた」状態におけるような及びそのような部分的エクスポートを実行するプロセスを示す部分的に完了したエクスポート・コマンドの対象となったメモリ領域にマークを付けるのに役立つ。これは、後のそのエクスポートの再開を支援する。
【0032】
ステップ60での判定が、中断はないということである場合、次いで、処理はステップ70に進み、そこで、メモリ領域のエクスポートが完了したかどうかに関する判定が行われる。エクスポートが完了していない場合、次いで、処理はステップ58に戻る。エクスポートが完了している場合、次いで、処理は、ステップ72に進み、そこで、空にされてあった(その記憶データがそこからエクスポートされた)メモリ領域は、最初に記憶されたデータと相関関係のないデータで上書きされる(たとえば、ゼロに設定される、何らかの他の固定数に設定される、ランダム・データで埋められるなど)。その処理は、次いで、終了する。
【0033】
前述の例示的実施例では、CCBが、関連ポインタによって指定された別個のプライベート・メモリ領域として、たとえば初期化命令内で、提供される。しかしながら、他の例示的実施例では、CCBは、別個のメモリ領域としてではなく、中断され得るコマンドによってすでに使用されたメモリ領域、たとえばコマンドによって生成された結果データが記憶される宛先メモリ領域、の一部として提供され得る。中断され得るエクスポート・コマンドの場合、エクスポートされた暗号化されたデータが、エクスポートが実行されている間にRMUプライベート・メモリ領域である宛先メモリ領域内に記憶される。CCBは、たとえば、そのような宛先領域が暗号化されたデータで埋められている間に、その宛先領域の最後の部分として、提供され得る。CCB内に記憶されたコンテキスト・データの整合性は、エクスポート動作が実行されている間に、RMUプライベートである宛先領域によって確保される。
【0034】
別の例示的実施例において、CCBは、レルム記述子(RD:Realm Descriptor)の一部として提供され得、この場合、コンテキスト・データのために利用可能な記憶空間は、RDにおいて利用可能な空間によって制約され得、したがって、サポートされる割込み可能な並列コマンドの数は、それぞれのCCBの役割を果たすためにRDと利用可能な記憶空間によって制約され得る。CCBは、別個に、又は別の目的でも使用されるメモリ領域若しくはリソースの一部として、提供され得る。
【0035】
図6は、レルム間の関係と、異なるコマンド・ソースからのどのコマンドが他のソースからの部分的に完了されたコマンドを中断する/妨げることを許されるかを決定する制御階層とを概略的に示す。図示された実例は、3つのレベルのネストされたレルムを含む。親レルムMは、例外レベルEL3に対応する。子レルムNは、例外レベルEL2に対応する。レルムN内の2つの孫レルムは、レルムO及びレルムPを含み、両方とも例外レベルEL1にある。この実例では、例外レベル優先度とレルムのネスト化された階層内の相対的位置との両方が、レルムMはレルムNより高い優先度を有し、レルムNはレルムO及びレルムPの両方より高い優先度を有する、制御階層における順序付けを与える。レルムO及びレルムPは、同等の優先度である。
【0036】
図7は、RMUインポート・コマンドに続くページ(メモリ領域)インポート動作を概略的に示す流れ図である。ステップ74は、データがインポートされ得る空のページ(メモリ領域)を取得し、クリーニングするのに役立つ。ステップ76は、次いで、その関連する記憶されたメタデータ(RMUプライベート領域に記憶された)を使用してインポートされようとする暗号化されたデータを検証する。この検証が成功しなかった場合、次いで、エラーが生成される。検証の成功の後、ステップ78は、暗号化されたデータを解読するのに役立ち、そして、ステップ80は、ステップ74において取得されたメモリ・ページにその解読されたデータを記憶するのに役立つ。メモリ・ページが、解読されたデータで埋められた後は、それは、所有するレルム(プロセス)に解放され得る。取得され、次いで埋められたページは、ページ・インポート・プロセスの間にメモリ管理回路(レルム管理ユニット20、22、24)に排他的に利用可能になるようにロックされる。
【0037】
図8は、異なるコマンド・ソースから並行して生じ得る2つのエクスポート・コマンドを概略的に示す。命令のシーケンスのうちの一方は、仮想マシン(たとえば、ゲスト・オペレーティング・システム)に対応するプロセスに由来する。他方のコマンド・ソースは、仮想マシンと比較してより高いレベルの特権(又はレルム階層内の潜在的により高いレベル)にあるハイパーバイザである。したがって、このハイパーバイザからのエクスポート・コマンドは、仮想マシンのために、レルム管理ユニット20、22、24によって実行されている部分的に完了したエクスポート・コマンドを中断することができる。ハイパーバイザのためのエクスポートが完了されたとき、次いで、仮想マシンのためのエクスポートが再開され得る。
【0038】
この実例では、レルム管理ユニット20、22、24へのコマンドは、結合された初期化でもよく、メモリ・アクセス回路がエクスポート動作に対応するコマンド・シーケンスが完了されたことを報告するまで繰り返して実行されるコマンドを実行し得る。前述の実例において、エクスポート・コマンドは、コマンド・コンテキスト・バッファへのポインタを指定するエクスポート初期化コマンドの形でもよく、そして、後続のエクスポートがこれに続く他のポインタは、コマンド・シーケンスが完了したことをメモリ・アクセス回路が報告するまで繰り返して実行されるコマンドを実行する。他の例示的実施例では、エクスポート動作は、結合された初期化及び実行コマンド(割込み可能な)と、結合された初期化及び実行コマンドが中断された場合に発行される実行継続コマンドとによって制御され得る。
【0039】
このデータが後で復元され得るように、コマンド・コンテキスト・バッファは、部分的に完了されたコマンド・シーケンスを表す部分的に完了された状態を記憶するために使用される。このようにして、システムは、中断が提供可能になるのに完全エクスポート動作が完了するのを待つ必要がない。さらに、部分的に完了された状態が保持されるとき、エクスポート動作はその初期点から再開される必要はないことになるので、それが繰り返して中断された場合でも、エクスポート動作の前進が確保される。
【0040】
図9は、図1の処理要素8、10、12のうちの1つと、メモリ・アクセスを制御するためのメモリ16に記憶された制御データとのより詳細な実例を示す。説明を容易にするために、図9はCPU0を処理要素8として示すが、処理要素は、データ処理装置2内のGPU12又は任意の他の処理要素のCPU1 10でもよいことが理解されよう。図9に示されるように、処理要素8は、処理回路32(前述の復号及び実行論理を備え得る)と、変換テーブルのエントリ(共用MMU-RMU TLB構造体が使用される場合にRMU20からのレルムベースの制御データと添付され得る)をキャッシュするための1つ又は複数の変換ルックアサイド・バッファ100を含み得るメモリ管理ユニット26と、TLB100へのデータの割当てを制御する並びに所与のメモリ・アクセスが実行されることを可能にされるかどうかを制御するために使用される必要なデータを見つけるためにメモリへのウォーク・アクセスをトリガするためのテーブル・ウォーク・ユニット102とを含む。処理要素8はまた、たとえば、前述のページング(エクスポート/インポート)動作において使用するための、データを暗号化又は解読するための暗号動作を実行し得る暗号ユニット104を含み得る。処理要素8はまた、メモリ16から読み取られたデータ又は命令をキャッシュし得るいくつかのキャッシュ110を含む。処理回路32によって又はテーブル・ウォーク・ユニット102によってトリガされたメモリへのアクセスが、キャッシュにおいて失敗した場合、データは、メイン・メモリ16から見つけることができる。
【0041】
処理要素8はまた、前述のようなレルム管理ユニット20を含む。いくつかの実施例において、レルム管理ユニット(RMU:Realm Management Unit)20は、ハードウェア回路として提供され得る。しかしながら、後述のRMU動作のうちのいくつかは、たとえばそれらが異なるメモリ領域への複数のアクセスが実行されることを必要とする場合、ハードウェアにおいて純粋に実装するのは比較的複雑になり得る。したがって、いくつかの実例では、RMU20は、データ処理装置2内に記憶され得るプログラム・コードを使用して実装され得、汎用処理回路32を使用して実行され得る。メモリ16に書き込まれ得る及び書換可能であり得る汎用ソフトウェアとは異なり、RMUソフトウェア(ミリコード)は、それを取り除くことができないように、比較的永久的な方式でデータ処理装置にインストールすることができ、処理システムによって提供されるプラットフォームの一部として見なされ得る。たとえば、RMUプログラム・コードは、読み取り専用メモリ(ROM)内に記憶することができる。したがって、RMUは、ハードウェア・ユニットを備えることができ、又は、処理回路32によって実行される汎用ソフトウェアに含まれるRMUコマンドによって実行するようにトリガされる、レルム管理ソフトウェアを実行する処理回路32を備え得る。いくつかの実例では、RMU20は、ハードウェア及びソフトウェアの組合せを使用して実装され得、たとえば、何らかのより単純な機能性は、より高速の処理のためのハードウェア回路を使用して実装され得るが、より複雑な機能は、ミリコードを使用して実装され得る。したがって、RMUのその後の参照はハードウェア又はソフトウェア或いはその両方の組合せのいずれかを参照し得ることが理解されよう。
【0042】
図9に示すように、メモリ16は、メモリへのアクセスを制御するためにMMU26及びRMU20によって使用されるいくつかの制御情報を記憶することができる。これらは、どのプロセスが所与のメモリ領域にアクセスすることを可能にされるかを制御するためのメモリ・アクセス属性を定義する変換テーブル(ページ・テーブルとしても知られる)120、並びに仮想アドレスを物理アドレスに変換するためのアドレス・マッピング情報を含む。より大きい特権を有する例外レベルで実行するプロセスが、権限のより低い例外レベルで実行するプロセスは対応するメモリ領域にアクセスすることを可能にされるかどうかを統制する許可を設定することができるように、変換テーブル120は、図2に関して前述した例外レベルに基づいて定義され得る。
【0043】
また、より大きい特権を有するプロセスがアクセスされるかどうかを権限のより少ないプロセスが制御することを可能にするために、いくつかのレルム管理テーブル又はレルム制御情報122が、MMUページ・テーブル120への直交方式でのメモリ・アクセスを制御するために提供される(レルム制御は、メモリ・アクセス要求がサービスされるために、それは両方のタイプのアクセス制御検査に合格する必要があり得るという意味で、MMU制御に対して直交である)。レルム管理テーブルで、所与のメモリ領域を所有する所有者プロセス(レルム)は、より大きい特権を有する例外レベルで実行するプロセスがそのメモリ領域にアクセスすることを排除する権利を有する。レルム管理データは、所与のレルムのプロパティを記述するレルム記述子124を含む。各レルムは、処理回路32によって実行される少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応する。いくつかのレルムは2つ以上のプロセスに対応してもよく、一方、他のレルムは所与のソフトウェア・プロセスの副部分のみに対応してもよい。レルムはまた、メモリ・アドレス空間の所与の領域(メモリ・アドレス空間の対応する領域内にあるプログラム命令をそれが実行しているときに所与のレルム内で実行する処理回路32を有する)へのマッピングとして見ることができる。したがって、レルムは、1組のソフトウェア・プロセス又はソフトウェア・プロセスの一部分として、或いはメモリ・アドレス空間のエリアとしてのいずれかで見ることができる。これらの2つのビューは同等である。説明を容易にするために、後述では、少なくとも1つのソフトウェア・プロセスの少なくとも一部分としてレルムを参照することになるが、メモリ領域のコレクションとしてのレルムの対応するビューは、同等に有効である(この場合、レルムへの/からの「エントリ」及び「退出」は、そのレルムに対応するメモリ・アドレスの部分に到達する/これを去るプログラム実行に対応し得る)。
【0044】
レルム管理データ122はまた、レルム退出又はエントリ時に所与のレルムに関連するアーキテクチャの状態を保存及び復元するために使用することができるレルム実行コンテキスト領域126を含む。レルム管理データはまた、どのレルムがそのメモリ領域の所有者レルムであるかを、メモリ・アドレス空間の各領域について、定義するレルム・グラニュール・テーブル(又は所有権テーブル)128を含む。所与のメモリ領域の所有者レルムは、そのメモリ領域内に記憶されたデータに他のレルム(より大きい特権を有するプロセスを含む)がアクセスすることを排除する権利を有する。このレルム管理データの使用について、以下でさらに詳しく論じる。一般に、レルム管理ユニット20及びMMU26は、そのレルムによって所有されているメモリ領域の所有者レルムによって定義された所有権を行使するメモリ・アクセス回路として見ることができる。これは、たとえば、クラウド・サーバ・オペレータによって提供されるハイパーバイザ38の制御下で、他の異なるパーティによって提供されるいくつかの仮想マシン36が実行し得る、クラウド・プラットフォームについて、特に有用になり得る。仮想マシンのうちの1つを提供するパーティは、それらのデータ及びコードがハイパーバイザにアクセス可能になることを望まないことがある。権限のより低い例外レベルで実行するレルムが、より大きい特権を有する例外レベルがそれのデータ又は命令にアクセスすることを排除することができる、レルムの概念を導入することによって、これは、他のパーティによって提供されるコードと物理ハードウェアが共用され得るクラウド・サービスでそれらのソフトウェアをインストールするためのコード開発者の信頼度を上げることができる、ブラインド・ハイパーバイザが提供されることを可能にする。
【0045】
図10に示すように、レルムは、ルート・レルム130以外の各レルムが、初期化コマンドを実行することによって子レルムを初期化した対応する親レルムを有する子レルムである、レルム階層に従って、RMU20によって管理される。ルート・レルム130は、たとえば、最も大きな特権を有する例外レベルEL3において実行するモニタ・コード又はシステム・ファームウェアに関連するレルムでもよい。説明を容易にするために、図10の実例及び後に論じられる最初の実例は、各子レルムがその親レルムより低い特権を有するレベルにおいて実行する事例を示す。しかしながら、後述するように、その親と同じ例外レベルで実行するサブレルムを確立することもまた可能である。
【0046】
一般に、MMU26によって提供されるメモリ・アクセス制御のレルム管理部分について、子レルムは、その親レルムによって所有される任意のメモリ領域へのデフォルト・アクセス権を有する。同様に、所与のレルムの任意の子孫は、所与のレルムの所有されたメモリ領域へのアクセス権を有すると想定される。しかしながら、レルム管理制御は、例外レベルに基づいて変換テーブル120によって提供される制御に直交であるので、より高い特権レベルにおいて実行するプロセスは、それに応じて変換テーブル120のパラメータを設定することによって、権限のより少ないコードがそれのデータにアクセスすることをさらに排除することができる。したがって、一般に、所与の子レルムは、所与の子レルムによって所有された所与のメモリ領域に記憶されたデータにその親レルムがアクセスすることを排除する権利を有する。親レルムが所与のメモリ領域にアクセスすることを子レルムが実際に排除するかどうかは、所有権テーブル128において設定された制御属性に基づいて設定され得る(デフォルトは、親レルムは子レルムの所有された領域へのアクセス権を有さないということであるが、子レルムは、それに応じて可視性属性を設定することによって、親レルムにアクセス権を与えることを選択することができる)。複数の兄弟レルム(同じ親レルムを共有する異なる子レルム)が存在するとき、次いで、所与の子レルムは、所与の子レルムによって所有された所与のメモリ領域に記憶されたデータに兄弟レルムがアクセスすることを排除することができる。さらに、所有権テーブル128において設定された可視性属性は、兄弟レルムがどの程度互いのデータにアクセスすることができるかを制御することができる。別法として、子レルムがページをその親レルムに可視にした場合に、同ページは、それの兄弟レルム及び兄弟レルムのさらに子孫にも可視になるように、兄弟レルムによるアクセスは、親可視性属性に基づいて、制御され得る。いくつかの事例において、所有権テーブル128は、任意のレルムの下で実行する任意のプロセスがその所有するメモリ領域内のデータにアクセスすることを可能にすることを所与の所有者プロセスを許し得るグローバル可視性属性を有し得る。
【0047】
図10に示すように、各レルム140は、所与のレルムから退出するときに、レジスタ値など、レルムのアーキテクチャ状態を記憶するために使用することができる1つ又は複数のレルム実行コンテキスト(REC:Realm Execution Context)メモリ領域126に関連付けられている。所与のレルムのために提供されるREC126の数は、所与のレルムの下でいくつの実行のスレッドが動作しているかに応じて決まり得る。たとえば、最初に初期化されるときのレルムは、単一の1次REC領域126と確立され得るが、次いで、そのレルムは、必要に応じてさらにRECの役割を果たすようにそのレルムによって所有される他のメモリ領域を構成することができる。RECメモリ領域は、その実行状態がそのRECに記憶された対応するレルムによって所有される。
【0048】
各レルムは、そのプロパティがレルム記述子124に記述されたレルムの親レルムによって所有されているメモリ領域に記憶されたレルム記述子124と関連付けられている。レルムの所与の世代において定義することができる子レルムの数の柔軟性のために、レルム記述子は、さらに詳しく後述されるレルム記述子ツリー(RDT:Realm Descriptor Tree)と呼ばれるツリー構造を使用して、管理される。レルム記述子124は、セキュリティを確保するためにレルムからのエントリ又は退出時にRMU20によってチェックすることができるレルムのプロパティを定義するために使用することができる。レルムについてのある指定のRMUコマンドの実行が、レルムが安全な方式で作成される及び無効にされることを確実にするために、指定のライフサイクル状態に限定され得るように、レルム記述子はまた、様々なライフサイクル状態を通してレルムの進行を追跡することができる。
【0049】
図11及び12は、可能なレルム階層の2つの異なる実例を示す。図11の実例では、図2に示されたプロセスのそれぞれが、独自のレルムを定義されている。したがって、ルート・レルム130は、例外レベルEL3において動作するモニタ・ソフトウェア又はファームウェアに対応する。ルート・レルムは2つの子レルム142を定義し、一方は、安全EL1で動作する安全オペレーティング・システムに対応し、もう一方は、EL2におけるハイパーバイザに対応する。ハイパーバイザは、EL1における異なるゲスト・オペレーティング・システムに対応する孫レルム144を定義し、それらのゲスト・オペレーティング・システムのそれぞれは、最も少ない特権を有する例外レベルEL0において実行するアプリケーションに対応する曾孫レルム146をさらに定義する。同様に、レルム142内の安全オペレーティング・システムは、異なる安全アプリケーションに対応する孫レルム148を定義することができる。階層内の親レルムは、それが現在所有するメモリ・ページの所有者を新しい子レルムに移転することができ(後述するようにGranule.Addコマンドを使用することによって)、又はそれのページのうちの1ページを無効にし、それを子の仮想アドレス空間にマップし、ページ所有権(Claim)コマンドを実行することによってページの所有権を子レルムが請求することを可能にすることができる。メモリ・アドレス空間の指定されたページが、コマンドを発行した親レルムによってすでに所有されていない場合、ページ所有権コマンドは拒否され得る。
【0050】
図12に示すように、特権のあらゆるレベルにおけるプロセスが別個のレルムを有することは必須ではなく、したがって、図12に破線で示された特権レベルの境界線のうちのいくつかは、レルム境界に対応しないことがある。たとえば、図12において、アプリケーション150及びそれのオペレーティング・システムは、例外レベルEL2において動作するハイパーバイザ・レルム142と同じレルム内で実行し、そうして、単一のレルムが、EL2ハイパーバイザ・コード、EL1で動作するオペレーティング・システム、及びEL0におけるアプリケーションの両方に広がる。他方で、同じハイパーバイザの下の異なるアプリケーション152は、独自の別個のレルムを定義され得る。この場合、レルム境界はEL1とEL0との間にあり、EL2-EL1レルム境界は存在しない(ハイパーバイザ及びオペレーティング・システムの両方が同レルム内で実行し得る)。別のオペレーティング・システムでは、別個のEL1レルム154が定義され得、これは、オペレーティング・システムと同じレルム内で実行するいくつかのアプリケーション、及びそれら自体の専用のレルムを有する他のアプリケーションをさらに有し得る。同様に、安全側では、図12の安全なOS及びアプリケーションは、EL3ルート・レルム内で完全に実行し、したがって、安全側で動作しているときにレルム境界は存在しない。したがって、レルムの正確な構成は、実行されているプロセスの必要性に応じて所与のシステムの実行時間において決定され得る。ソフトウェアは、それが小さい固定数の子レルムのみを必要とするか(低レベル・ファームウェアの場合に事実であり得る)或いは多数のレルム又は様々な数のレルムを必要とするか(たとえば、未知数のゲスト仮想マシンを管理することができる、クラウド・プラットフォーム上のハイパーバイザに有用であり得る)を実行時間において判定することができる。
【0051】
所与の親レルムのレルム記述子124は、レルム記述子ツリー(その親レルムのいくつかの子レルムのレルム管理データを定義するレルム管理ツリーの実例である)に従って、管理される。ツリーは、可変数のレベルを有する。図13は、指定の親レルムによって管理されるそのようなレルム記述子ツリー160の実例を示す。ツリー160は、いくつかのレルム記述子ツリー・エントリ(RDTE:Realm Descriptor Tree Entries)164をそれぞれ含むいくつかのレルム記述子ツリー・グラニュール(RDTG:Realm Descriptor Tree Granules)162を含む。各RDTE164は、親レルムの所与の子レルムのレルム記述子166、又はレルム記述子ツリーの次のレベルのさらなるRDTG162のいずれかへのポインタを提供する。ツリーの第1のレベルのRDTG162は、親レルムに関連する(たとえば、親レルムのレルム記述子を有する)データの一部として記憶され得るレルム記述子ツリー・ポインタ168によって識別され得る。したがって、親レルムが、所与の子レルムに関連するRMUコマンドを発行するとき、それは、必要とされる子レルムのレルム記述子166を見つけるために、RMUをトリガしてレルム記述子ツリーを走査することができる(そのレルム記述子がRMU20内にすでにキャッシュされていない場合)。各RDTG162は、可変数のエントリ164を有し得る。
【0052】
図13のテーブルに示すように、ツリーの後続のレベルにおいてRDTG162へのポインタを提供する所与のRDTE164は、ポインタが示すRDTGにおけるエントリの最大数を示す位数値を含み得る。たとえば、位数値は、ポインタが示すRDTGにおけるエントリの総数に対応する2つのパワーを示し得る。RDTE164に含まれ得る他の情報は、RDTEの状態(たとえば、RDTEがレルム記述子ツリー・データの割当てのために空いているかどうか、及びRDTEがさらなるRDTG162へのポインタ又は子レルム記述子166へのポインタを提供するかどうか)を示す状態値を含み得る。ポインタに加えて、RDTEはまた、さらなるRDTEはそのRDTG162に割り当てることができるかどうかを決定するために有用であり得る、空いていないRDTGへのポインタにおけるRDTEの数を追跡することができる参照数を含み得る。親レルムによってトリガされたRMUコマンドは、ツリーのさらなるRDTGを確立する及び/又は既存のRDTG内のRDTEの内容を編集するようにRMU20を制御することができる。
【0053】
図13に示すツリーは1つの指定の親レルムの子レルムを示すことに留意されたい。それぞれの親レルムは、自らの子レルムを追跡する別個のレルム記述子ツリーを有し得る。RDTG162及び子レルム記述子166を含むツリーに関連するデータは、親レルムによって所有されるページ内に記憶され、そうして、他のレルムがこのデータにアクセスすることを排除することができる。したがって、より高い特権レベルで実行するプロセスが、レルムがそれが自分で直接作成した任意の子レルムよりも下に作成したものの可視性を有し得ないように、親レルムのみが、どの指定の子エルムをそれが構成したかの可視性を有し得る。
【0054】
図13に示すように、所与の親レルムの子レルムのそれぞれは、指定の子レルムを識別するためにその親レルムによって使用される、対応するレルム識別子(RID:Realm IDentifier)168を有し得る。RIDは、それが指定の親レルムに特有であるという点で、ローカル・レルム識別子である。異なる親レルムの子レルムは、同じローカルRIDを有し得る。所与の子レルムの親レルムによって選択された任意の値を有するローカルRIDを使用することは可能であるが、図13及び14に示す手法では、所与の子レルムのローカルRIDは、可変数の可変長ビット部分を有し、可変長部分のそれぞれは、レルム記述子ツリー160の所与のレベル内にインデックスを付けるためにRMU20によって使用される。たとえば、図13のローカルRID=7を有する子レルムのレルム記述子は、第1のレベルRDTG162のエントリ7内のレルム記述子ポインタをたどることによって、アクセスされる。ローカルRID=3.3を有する子レルムのレルム記述子は、ツリーの第1のレベル内のエントリ3、次いで、ツリーの第2のレベル内のエントリ3をたどることによって、アクセスされる。同様に、ローカルRID=1.2を有する子レルムのレルム記述子は、第1の層内のエントリ1と、第2の層内のエントリ2とをたどることによって、アクセスされる。
【0055】
図13では、ローカルRIDは、10進法の形で示されているが、図14は、これらをどのようにして2進法の識別子を使用して表すことができるかを示す。2進法の識別子は、いくつかの可変長ビット部分170を有することができ、それらのビット部分のそれぞれは、RDTの対応するレベルにおいて使用するために、インデックスを指定することができる。この実例では、最も低い5ビットはツリーの第1のレベルにおけるエントリに対応し、次の4ビットは第2のレベルにおけるエントリに対応する、などとなるように、2進法のローカルRIDは、最下位の端から最初に埋められる。この実例では、最下位部分は値7を提供し、次の最下位ビット部分は値1を提供するなどするので、完全なローカルRIDは、7.1.3に対応する。
【0056】
それぞれの可変長ビット部分170内で使用されることになるビットの数は、レルム記述子ツリーを介してRMU20ステップとして走査されるRDTE内の位数値を使用することによって決定することができる。ローカルRIDの第1のビット部分の位数値は、親レルムのレルム記述子内で定義され得る(第1のレベルRDTGポインタと共に)。図14の実例では、たとえば、3レベルの位数値はそれぞれ、5、4及び2であり、最初の5ビットはレベル1のインデックスを示すことと、その次の4ビットはレベル2のインデックスを示すことと、その次の2ビットはRDTのレベル3のインデックスを示すこととを示す。最終的に、走査するべきツリーのさらなるレベルは存在しないことを示す所定のパターンを有する、RIDの端(終了)マーカー172が達せられ、そうして、最後のレベルのRDTG内のポインタからアクセスされる次のメモリ領域は、必要とされる子レルムのレルム記述子を提供することになる。任意の未使用のビットは、ゼロで埋められる。図14は、RIDが最下位の端から埋められる実例を示すが、2進法の値の最上位の端から開始するツリーを介して進むために必要とされるインデックスを連結させることによってRIDを構築することもまた可能であろう。
【0057】
この手法は、異なる数の子レルムが所与の親レルムによって確立されることを可能にするための、並びにそれらの子レルムのレルム記述子効率的にアクセスされることを可能にするための柔軟なインフラストラクチャを提供する。レルム識別子は、レルム記述子ツリー内を進むために必要とされるインデックスを明示的に提供するので、ツリーを通して指定のルートに任意のレルム番号をマッピングするマッピング・テーブルを維持する必要はない。ツリー構造が使用されるとき、その場合、ある指定の固定数のエントリを提供することになるテーブル構造と比較して、ツリーは、必要に応じてツリーの所与のレベルに付加的RDTGを追加すること又は付加的RDTEを追加することによって、その数の子レルムのために必要とされるように拡張することができる。したがって、その構造は、異なるソフトウェア・プロセスのニーズに拡張可能である。RIDのどの部分がツリーの所与のレベルにマップすべきかが正確に事前に指定されていないとき、その場合、これは、異なる深度/幅のツリーに対応するために、RIDの利用可能なビットが柔軟に割り当てられることを可能にする。
【0058】
レルム管理ユニット20は、必要とされるときに、たとえば、新しいレルムのプロパティを識別するためにレルムに入る若しくはレルムを出る及び新しいレルムへのエントリが許されるかどうかを決定するときに、或いは、ある指定のRMUコマンドを実行することが適切かどうかを決定するときに、レルム記述子ツリーにアクセスする責任を有し得る。一般に、レルム管理回路は、レルム記述子ツリーの所与のレベル内にインデックスを提供する可変長ビット部分のうちの所与の1つを有する可変数の可変長ビット部分を含む所与のレルムのレルム識別子を使用するレルム記述子ツリーにインデックスを付けることができる。これは、子レルムを確立するための異なるソフトウェア・プロセスの多種多様な要件をサポートするために、レルム識別子ツリーの柔軟な寸法取りを可能にする。
【0059】
レルム管理回路20は、レルム記述子ツリーの以前のレベルにおけるエントリ・インデックスによって指定された位数値に基づいて、レルム記述子ツリーの所与のレベル内にインデックスを付けるために使用されることになる可変長ビット部分によっていくつのビットが含まれるかを判定することができる。ツリーのエントリ内に位数値を記憶することによって、次いで、RIDのどのビットがツリーの所与のレベルにマップされるために使用されることになるかを事前に定義することは必要ではなく、これはさらなる柔軟性をもたらす。
【0060】
RMUは、レルム記述子ツリーの同レベルにおける異なる分岐内にインデックスを付けるための可変長ビット部分が異なる数のビットを有することを可能にし得る。すなわち、図13では、層2内に示された両方のRDTG162は、同じ位数値(したがって、同数のエントリ)を有するが、これは必須ではなく、一部の実装形態は、異なる数のエントリを有するツリーの同レベルにおいて異なるRDTG162を有し得る。したがって、それぞれのレルムのRIDの対応する部分は、ツリーの同レベルについて異なる数のビットを有し得る。したがって、ツリーの所与の長さ内にインデックスを付けるために使用されるビット部分の長さの変動は、単に親によって異なるだけではなく、1つの親によって管理されるツリーの異なる分岐内でも変化し得、その中で子レルムが定義され得る形でさらなる柔軟性をもたらす。
【0061】
一般に、所与のレルムのRIDは、所与のレルムのレルム管理データにアクセスするためにレルム記述子ツリーのそれぞれのレベルにおいて使用されることになるインデックスの連結を含み得る。インデックスがそれらがツリーを通して進むために使用されることになるであろう順番と同じ順番で連結されることは必須ではないが、これはツリー・アクセスの管理をより単純にするので、望ましくなり得る。連結が低から高へ進むか高から低へ進むかは重要ではない。インデックスの連結には、進むべきツリーのさらなるレベルがいつ存在しないかをRMU20が判定することを可能にすることができる所定の終了パターンが続き得る。
【0062】
いくつかの実装形態は、類似のツリー構造においてシステム内のすべてのレルムのレルム記述子を記憶し得るグローバル・レルム記述子ツリーに、このRID構築技法を適用し得る(それぞれのRIDがグローバルに一意の値である)。しかしながら、ソフトウェア開発は、1つのツリー内の所与の親の子レルムを定義することと、次いで、その子レルムを追跡するためにそれぞれの他の親レルムの別個のツリーを有することとによって、より単純にすることができる。したがって、レルム記述子ツリーは、所与の親レルムによって初期化された子レルムのレルム管理データを記憶するための所与の親レルムに関連するローカル・レルム記述子ツリーでもよい。したがって、レルム識別子は、所与の親レルムによって使用される指定の子レルムを識別するローカル・レルム識別子でもよい。異なる親レルムによって初期化された子レルムは、同値のローカル・レルム識別子有することを可能にされ得る。このようにして、親レルムは、他のどのようなレルムが他の親レルムによって確立されたかを意識することなく、どのRIDがそれの子レルムのために使用されるかを選択することができ、親レルムがそれのレルム記述子ツリーを構成したやり方に応じて子レルムのRIDは構築される。
【0063】
ローカル・レルム識別子は、ソフトウェア・プロセスによって発行されたレルム・エントリ命令又はRMUコマンドによって使用され得る。しかしながら、ハードウェア・インフラストラクチャは、異なる親によって作成されたレルムを区別するために、所与の子レルムの絶対識別を使用することができる。したがって、図13及び14に示されたローカル・レルム識別子に加えて、所与のレルムはまた、所与のレルムに一意であるグローバル・レルム識別子(又は「内部」レルム識別子)を有し得る。少なくとも1つのハードウェア構造は、ローカル・レルム識別子(LRID:Local Realm IDentifier)の代わりにグローバル・レルム識別子(GRID:Global Realm IDentifier)を使用する所与のレルムを識別することができる。たとえば、レルム・グラニュール・テーブル128及び/又はTLB100は、グローバル・レルム識別子を使用し、レルムを識別することができる。
【0064】
いくつかの実例では、任意の2進法の値が、その子レルムを参照するために親レルムによって使用されるLRIDと完全に無関係であり得る、所与のレルムのGRIDとして割り当てられ得る。同じレルム・アーキテクチャの異なるマイクロ・アーキテクチャの実装形態は、GRIDを割り当てるために異なる手法を使用し得る。
【0065】
しかしながら、図15に示された1つの実例では、所与のレルムのGRIDは、それの先祖レルムのLRIDに基づいて構築され得る。これは、MMU26及びRMU20によるアクセス制御に有用になり得る所与のレルムが別のレルムの子孫であるか又は別のレルムの先祖であるかのより単純な判定を可能にすることができるので、有用になり得る。具体的には、共通の先祖レルムを共有するレルムは、GRIDの共通の接頭辞又は接尾辞部分を共有し得る。たとえば、子レルムのGRIDは、その親レルムのGRID及びその子レルムのLRIDの連結を含み得る。たとえば、図15に示すように、所与のレルム180が、ある指定のローカル・レルム識別子Xを有する場合、そのとき、その子レルム182は、レルムXのレルム記述子ツリー内のインデックスに基づいて形成された指定のLRIDとXを連結させることによって形成されたGRIDをそれぞれ有し得る。たとえば、LRID1.2を有する子レルムは、GRID X.1.2を有し得る。同様に、LRID7を有するレルムX.1.2の孫レルムは、GRID X.1.2.7を有し得る。
【0066】
いくつか事例では、GRIDにおいて、LRIDは、図14に示された終了マーカー及びゼロで埋められたビットを含んで、連結され得る。別法として、GRIDの2進法の表現は、そのような終了マーカー及びゼロで埋められたビットを排除することができ、代わりに、RDTインデックスを含むLRIDの有意の部分が、直接連結され得る。それぞれのLRID自体が、関連のある親レルムのRDTの深度及び幅に応じた可変数のビットを有し得るとき、次いで、レルムの所与の世代のローカルRIDを表して割り当てられたグローバルRIDのビットの数は、可変になり得る。さらに、グローバルRIDのどの部分がレルムの所与の世代に割り当てられるかのこの変動は、実行している指定のソフトウェアに基づく実行時間において変化し得るが、家系図の1つの分岐が他よりレルム識別子のより大きな部分を使用し得るように、レルムの「家系図」の異なる分岐の間で変わり得る。GRIDの共通の接頭辞又は接尾辞は、共通の先祖を共有するレルムについては同じであるので、任意の後続の世代は、残りの部分がさらなる世代の間でどのように分けられるかにかかわらず、後の世代に特有なその残りの部分によってまだ区別することができる。
【0067】
いくつかの先祖レルムのLRIDの連結としてGRIDを構築することによって、これは、第1のレルムが第2のレルムの先祖又は子孫であるかどうかのより効率的な判定を可能にする。たとえば、同じファミリ内のより早い及びより後のレルムのグローバルRIDの比較が一致することを可能にするために、ビット・マスキングを使用してより後の世代に対応するグローバルRIDの部分をマスク・アウトすることによって、第1のレルム及び第2のレルムのうちの1つのレルムのグローバルRIDが、他方のレルムのグローバルRIDの接頭辞又は接尾辞部分と一致するかどうかを判定するために、(たとえば、TLB100又はRMU20内に)回路が提供され得る。
【0068】
すべてのローカルRIDが図13に示されたツリー・インデックス手法の連結を使用して構築される必要はない。いくつかの事例では、ローカルRIDの指定の値が、ある指定のデフォルト・レルムを参照するために確保されることが有用であることがある。現在のレルム又は現在のレルムの親レルムを指定するRMUコマンドは、比較的一般的でもよい。したがって、所定のRID値は、現在のレルムの親レルムを参照するために確保され得る。たとえば、すべてのビットが1に設定された(1の値を示す)LRIDは、現在のレルムの親レルムを参照するために確保され得る。同様に、所定のレルム識別子値は、現在のレルム自体を参照するために確保され得る。たとえば、0のLRID値は、現在のレルムを参照するために使用され得る。子レルム記述子が、RDTの各レベルにおいてRDTE0を使用し、識別される場合でも、それは、少なくとも1つのビットを1に設定され得る、この終了マーカー172を含み得るので、結果として生じるRID値はゼロとまだ同等ではないことをそれは意味するので、LRIDにおけるRID終了マーカー172の使用は、ゼロの値が現在のレルムの所定のレルムID値として使用されていることをサポートするのに役立つことに留意されたい。したがって、RIDの端を示すことに加えて、終了マーカー172はまた、他の機能をサポートすることができる。
【0069】
RMUは、それがそれのレルム記述子ツリーを確立しているときにそれが満たさなければならない制約を問い合わせるために、所与のレルムによってトリガされ得る、ある種の問合せコマンドをサポートし得る。たとえば、問合せコマンドに応答して、RMU20(又は処理回路32)は、所与のレルムによって定義されることを可能にされたレルム記述子ツリー160のレベルの最大数、所与のレルムのツリー構造の所与のレベルにおいて許されたツリー・エントリの最大数、及び/又は所与のレルムによって初期化され得る子レルムの最大数のうちの少なくとも1つを示す、制約値を返し得る。たとえば、システムは、指定のハードウェア実装形態のために使用されるLRID又はGRIDにおいて利用可能なビットの数などのプロパティを示し得るレジスタを含み得る。RMU又は処理回路は、問合せコマンドに応答して、レルム識別子(又は、適切な応答は指定のプロセッサ実装形態のためのハードワイヤードでもよい)のために利用可能なビットの数をチェックし得、さらなる子を定義するために現在のレルムのためにいくつのビットが利用可能に残っているかを判定するために、識別子のいくつのビットがグローバル・レルム識別子において先祖レルムによってすでに使用されているかを指定する情報をチェックし得る。親レルムは、それのRDTをどのように構築するかを決定するために、問合せコマンドへの応答を使用することができる。
【0070】
図16は、所与のレルムのレルム記述子166の内容の実例を示す。これは単に1つの実例であり、他の実装形態は、掲載された情報のすべてを含まないことがあり、又は追加の情報を含み得ることが理解されよう。この実例では、レルム記述子は、以下を含む。
・レルムのグローバルRID。したがって、ローカルRIDに基づくレルム記述子ツリーを通過することによって、対応するグローバルRIDは、識別することができ、これは、所与のレルムによってTLBなどのハードウェア構造体にインデックスを付けるために、又は所有権テーブル若しくはGRIDに基づいて定義される他の情報をチェックするために、使用することができる。
・所与のレルムによってトリガされた所与のコマンドを受け入れるかどうかを決定するためにRMU20によって使用され得る、所与のレルムのライフサイクル状態。
・所与のレルムのタイプ。たとえば、レルム・タイプは、後述するようなレルムが完全レルムであるかサブレルムであるかを示すことができる。
・対応するレルムの境界例外レベルを識別する、境界例外レベル(BEL:Boundary Exception Level)値。BELは、レルムが実行することを許される最高の特権レベルを示す。たとえば、図12のレルム142はEL2のBELを有し得、レルム152はEL0のBELを有し得、そして、レルム154はEL1のBELを有し得る。BELは、現在のレルム内で例外が取られ得るかどうか、又は例外を処理するために親レルムへのレルム退出が必要とされるかどうかを判定するために、例外が発生したときに使用することができるので、レルム記述子においてBELを識別する明示的パラメータを提供することによって、これは、複数の例外レベルにわたるレルムの柔軟性を実現する。
・レルム及びその子孫によって所有されるメモリ領域(レルム保護グラニュール又はRPG)の総数を示すリソース・カウント。これは、レルム及びその子孫によって所有されるすべてのメモリ・ページが、それらのメモリ領域が異なるレルムに割り当てられ得る前に、無効にされる(及びデータを究極的にワイプされる)ことを確実にするために使用される。たとえば、リソース・カウントは、いくつの領域がまだ消去される必要があるかを追跡するために使用することができる。
・レルムの保護されたアドレス範囲の開始及び終了アドレス。たとえば、保護されたアドレス範囲は、その中でページは対応するレルムによって所有され得るメモリ・アドレス空間の範囲を定義し得る。レルム記述子において定義された保護されたアドレス範囲をメモリ・アクセスの後続のアドレスと比較することによって、レルムによって以前所有されたメモリ領域がもはやレルムによって所有されていない事例が識別され得るので、これは、子レルム・データにアクセスする試みにおいて子レルムに以前割り当てられた領域の所有権を再請求する悪意ある親レルムに対する保護のために有用であり得る。
・所与のレルムに関連するデータを暗号化する又は解読するために暗号回路104によって使用される1つ又は複数の暗号化鍵。この実例では、2つの別個の暗号化鍵が提供される。レルムによって所有される内容及びメモリを暗号化/解読するためのメモリ鍵と、前述のような永続記憶装置6にメモリ16の間でエクスポート/インポートされるデータを暗号化/解読するためのページング鍵。しかしながら、他の実例では、同じ鍵が両方の目的のために使用され得、或いは、さらなる鍵が他の指定の目的のために提供され得る。
・レルム記述子ツリーのルートを識別するレルム記述ツリー・エントリ(RDTE)。レルム記述子におけるRDTEは、ルートRDTGにアクセスするためのポインタ(及び、そのRDTGのためのインデックスとしていくつのビットを使用するかを定義する位数値)を提供する。
・レルムの実行に関連するアーキテクチャの状態を保存又は復元するための1次REC(レルム実行コンテキスト)メモリ領域へのポインタ。
【0071】
図17は、この実例ではクリーン状態、新しい状態、アクティブ状態及び無効状態を含む、所与のレルムが存在することができる1組のライフサイクル状態を示す。図17は、以下の各状態について示す、各状態のプロパティを要約する。対応する状態内のレルムが、その親レルムによって修正されたそれのレルム記述子166のパラメータを有し得るかどうか、そのレルムのために指定された暗号化鍵が有効に使用され得るかどうか、レルムが任意のメモリ領域(RPG)を所有し得るかどうか、並びに、そのレルムに関連するコードが実行可能か否か。レルム記述子のパラメータはクリーン状態において修正可能であるが、その他の状態のいずれでも修正することはできないことに留意されたい。これは、悪意ある親レルムが所与のレルムのプロパティを、それがアクティブになった後に、更新することを防止する。また、レルムは、アクティブ状態においてのみ実行可能である。
【0072】
図18は、レルムのライフサイクル状態の可能にされた遷移を示す状態機械図である。図18に示された各状態遷移は、子目標レルムのローカルRIDを指定するレルム管理コマンドを、RMU20に対して、発行する親レルムによってトリガされる(Realm.Invalidateコマンド212はまた、目標レルム自体によって発行され得る)。前のレルムはそのローカルRIDのために定義されておらず、レルム記述子レジスタ・グラニュール・コマンド200が親レルムによって実行されるとき、これは、指定されたローカルRIDを有する子レルムのレルム記述子として親レルムによって所有されている所与のメモリ領域の構成をトリガする。子レルムのグローバルRIDは、親レルムのグローバルRIDとレルム記述子レジスタ・グラニュール・コマンド200において指定された新しいローカルRIDとの連結に基づいて、設定され得る。指定された子レルムは、次いで、クリーン状態202に入る。クリーン状態において、親レルムは、子レルムのレルム記述子の様々なパラメータを更新することによって、子レルムのプロパティを設定することができる。これらのプロパティは、親レルムによって発行されたさらなるRMUコマンドを使用し、修正することができる(指定された子レルムがクリーン状態にない場合、コマンドを修正するそのようなレルム記述子は拒否され得る)。親レルムが、子レルムのレルム記述子のパラメータの設定を終えたとき、親レルムは、子レルムのLRIDを指定するレルム初期化コマンド204を実行し、これは、クリーン状態202から新しい状態206への子レルムの遷移をトリガし、この時点で、レルム記述子のパラメータは、もはや親レルムによって修正不可能である。指定されたレルムが現在、クリーン状態にない場合、レルム初期化コマンド204は失敗することになる。
【0073】
レルムが新しい状態206にあるとき、レルムのローカルRIDを指定するレルム・アクティブ化コマンド208の実行は、新しい状態206から、レルムが現在実行可能であるアクティブ状態210への遷移をトリガし、この後、対応するレルム内へのレルム・エントリは、もはや障害をトリガしないことになる。レルムは現在、完全に動作可能である。クリーン状態202、新しい状態206、及びアクティブ状態210のうちのいずれかにおける子レルムの親レルムによってトリガされた後続のレルム無効化コマンド212は、無効状態214への遷移をもたらすことになる。無効状態214を離れ、クリーン状態202に戻るために、親レルムは、レルム消去コマンド216を実行しなければならない。レルムによって所有されるページの数を追跡するリソース・カウントが、ゼロ以外の値を有する場合、レルム消去コマンド216は拒否される。したがって、レルム消去コマンド216が成功するために、親レルムは先ず、無効レルムによって所有されるあらゆるページのためにGranule.Reclaimコマンドを発行しなければならない。Granule.Reclaimコマンドは、目標メモリ・ページを指定し、目標ページの無効化をトリガしてそのページをアクセス不可能にし、そしてまた、ページの所有者レルムの参照数を1つ減らす。クリーン・コマンドが、その後に発行されてメモリ・ページを無効から有効に遷移させるとき、上書きが行われ得るので、Granule.Reclaim又はレルム消去コマンド216を実行するときに無効領域においてデータを実際に上書きする必要はない(後述の図22を参照)。また、レルム消去コマンドに応答して、無効にされたレルムに関連する任意のキャッシュされたデータもまた、処理要素8、10、12のいずれか(RMUコマンドを実行する処理要素のみならず)のTLB100又はキャッシュ110内で、無効にされ得る。グローバルRIDは、キャッシュされたデータのそのような無効化をトリガするために使用され得る。
【0074】
したがって、所与のレルム識別子に関連するレルムの管理されたライフサイクルを提供することによって、これは、レルムがそれのパラメータが修正され得るクリーン状態に戻り得る前に(したがって、所与のレルム識別子が、異なるレルムによる使用のためにリサイクルされ得る前に)、古いレルムに関連するいずれかのデータが同じレルム識別子の再使用を介して他のレルムに漏らされることを防止するために、同じレルム識別子を使用した前のレルムに関連するデータはメモリ及び任意のキャッシュから消去されなければならないことを確実にする。レルムがクリーン状態202にあるとき、それのレルム記述子はまた、レルム記述子において記憶されたメモリ領域が他の目的のために割り当てられることを可能にするレルム記述子解放コマンド218を実行することによって、キャンセルすることができる(この時点で、レルムはすでにクリーンであるので、消去は必要とされない)。
【0075】
図19は、レルム・グラニュール・テーブル128(又は所有権テーブル)のエントリの内容の実例を示す。各エントリは、メモリ・アドレス空間の所与のメモリ領域に対応する。所与のメモリ領域のサイズは、実装形態により、固定でも又は可変でもよい。所有権テーブル128が構造化される具体的なやり方は、実装形態の要件に応じて有意に変化し得、したがって、所与のエントリの対応するメモリ領域が識別される具体的なやり方は、変化し得る(たとえば、データは、対応する領域を識別する各エントリにおいて記憶され得、或いは、別法として、対応するエントリは、テーブル自体の中の対応する所有権エントリの位置に少なくとも部分的に基づいて識別され得る)。さらに、図19は、所与のメモリ領域について指定され得るパラメータの指定の実例を示すが、他の実例は、より多くの情報を提供し得る、又は示された情報のタイプのうちの一部を省略し得る。
【0076】
図19に示すように、各所有権テーブル・エントリは、対応するメモリ領域について、以下を指定することができる。
・そのメモリ領域の所有者レルムを識別するグローバルRID。所有者レルムは、他のどのレルムがメモリ領域にアクセスすることを可能にされるかを制御する属性を設定する権利を有するレルムでもよい。
・どのRMUコマンドがメモリ領域で実行されることを可能にされるかを制御するために使用される対応するメモリ領域のライフサイクル状態。
・メモリ領域が所有者レルムによって所有されるようになった時点でMMU26によってメモリ領域がマップされた先のマップされたアドレス。マップされたアドレスは、仮想アドレス又は中間物理アドレスでもよい。所有権テーブルにおいてこのアドレスを指定することによって、これは、所与のメモリ領域の所有権をレルムが取得した後に、アドレス変換テーブルを再マッピングすることによってレルム・インフラストラクチャによって提供されるセキュリティを回避しようとする潜在的な企てに対して保護することができる。
・所有者に加えてどのレルムがメモリ領域にアクセスすることができるかを指定する可視性属性。たとえば、図20に示すように、可視性属性は、現在のレルムの親レルムは領域にアクセスすることを許可されるか否かを制御する親可視性ビットと、任意のレルムが対応するメモリ領域にアクセスすることができるかどうかを指定することができるグローバル可視性ビットとを指定することができる。一般に、レルム保護方式は、現在のレルムの子孫レルムはその親又は先祖レルムによって所有されるメモリ領域にアクセスすることを常に許可されると仮定し得る(特権レベルに基づく保護を提供する変換テーブル120に基づいてアクセスが許されるか否かに依存する)が、所与のレルムは、その親又は所与のレルムの直接の子孫ではない任意の他のレルムがメモリ領域にアクセスすることができるかどうかを制御し得る。いくつかの実施例において、親及びグローバル可視性ビットの両方が、所有者レルム自体によって設定され得る。別法として、親可視性ビットが所有者レルムによって設定され得る一方で、グローバル可視性ビットは、所有者レルムの親レルムによって設定されることが可能であることがある(メモリ領域の親可視性ビットがそのメモリ領域の親可視性を与えるようにすでに設定されてあることを条件として)。これは、他のどのプロセスがそれのデータにアクセスし得るかを所有者レルムがどのように制御し得るかの1つの実例にすぎない、ことが理解されよう。
【0077】
図21は、そこに所与のメモリ領域が存在し得る異なるライフサイクル状態を示すテーブルであり、そして、図22は、それぞれのライフサイクル状態の間の遷移をトリガするコマンドを示す状態機械である。図18に示されたレルム・ライフサイクル状態と類似のやり方で、1つのレルムの所有権から別のレルムの所有権へと渡るメモリ領域が、その領域内のデータが消去される(たとえば、ゼロに設定される)無効化プロセスを先ず経なければならないということを確保するために、メモリ領域ライフサイクル状態の間の遷移は、管理される。したがって、無効状態220から、ソフトウェアがメモリ領域にアクセスすることができる有効状態222に遷移するために、クリーン・コマンド224は、処理要素8で実行するソフトウェアによってトリガされ、RMU20によって実行される必要がある。クリーン・コマンド224は、指定のメモリ領域(ページ)を識別し、対応するメモリ領域のメモリ・アドレスを通ってそのメモリ領域内の各場所においてデータを無効化する/ゼロに設定するようにRMUを制御する。目標とされたメモリ領域が無効以外のいずれかの状態にある場合、クリーン・コマンドは拒否される(たとえば、障害がトリガされる)。
【0078】
いくつかのシステムでは、単にメモリ領域ライフサイクル状態として有効状態222及び無効状態220を提供することが十分であることがある。しかしながら、図22の実例では、処理回路32で実行するソフトウェア(任意のRMUソフトウェア以外の)によってトリガされるRMUプライベート・メモリ領域へのアクセスが拒否されることになるように、所与のメモリ領域はまた、RMU20自体によって排他的アクセス向けに確保された「RMUプライベート」メモリ領域として指定され得る。これは、前述のように、レルム記述子、レルム記述子ツリー・エントリ、レルム実行コンテキスト及びページングのためのメタデータなどのレルム管理データを記憶するために特に有用になり得る。RMUによって排他的アクセス向けに確保されたRMUプライベート・メモリ領域として所与のメモリ領域を指定するために属性を提供することによって、これは、レルム方式によって提供されるセキュリティ保護をソフトウェア・プロセスが回避することをさもなければ可能にすることができたであろうレルム管理データへのアクセスを、メモリ領域自体の所有者プロセスを含む、ソフトウェア・プロセスが行うことを防止することができる。
【0079】
したがって、クリーン・コマンド224は、これが通常のクリーン・コマンドであるかプライベート・クリーン・コマンドであるかを指定するプライバシ指示を、それのパラメータのうちの1つとして、指定することができる。別法として、2つの完全に別個のコマンドが、これらの目的のために提供され得る。クリーン・コマンドが通常のクリーン・コマンドであるとき、これは、前述のような有効状態222への遷移をトリガする。しかしながら、クリーン・コマンドがプライベート・クリーン・コマンド224であるとき、これは、RMUClean状態226への遷移をトリガし、RMUClean状態226では、メモリ領域はRMUプライベート・メモリ領域として指定される。いくつかの実例では、全タイプRMUデータは、RMUクリーン状態に対応する単一のタイプのRMUプライベート・メモリ領域内に記憶され得る。
【0080】
しかしながら、頑強性が、指定の形のレルム管理データにそれぞれ対応する複数のタイプのRMUプライベート・メモリ領域を指定することによって、改善され得る。たとえば、図21及び22では、指定の目的のために指定されたRMUプライベート領域にそれぞれ対応する、いくつかのRMURegistered状態228が、定義される。この実例では、RMURegistered状態228は、RMURegisteredRDT(レルム記述子ツリーのRDTGを記憶するための)、RMURegisteredRD(レルム記述子を記憶するための)、RMURegisteredREC(レルム実行コンテキスト・データを記憶するための)及びRMURegisteredMDT(前述のようなエクスポート/インポート動作中に使用されるページング・メタデータを記憶するための)を含む。異なる形の登録コマンド230が、RMURegistered状態228のうちの対応する1つにメモリ領域を遷移させるために、RMUClean状態におけるメモリ領域のRMUによって実行され得る。指定された目的(RDT、RD、REC又はMDT)に対応しないRMUプライベート・メモリ領域にデータを記憶するためのコマンドは、拒否され得る。したがって、RMURegistered状態の第1のライフサイクル状態において、第1のタイプのレルム管理データを記憶するための第1のタイプのRMUコマンドが可能にされ得、そして、第2のライフサイクル状態において、第2のタイプのレルム管理データを記憶するための第2のタイプのRMUコマンドが可能にされ得、目標とされたメモリ領域が第2のライフサイクル状態にあるときには第1のRMUコマンドが拒否され、そして、目標とされたメモリ領域が第1のライフサイクル状態あるときには第2のRMUコマンドが拒否される。これは、たとえば、子レルムの動作を中断させようと試みるために、レルム記述子エントリをレルム実行コンテキスト領域に記憶しようと試みる又はその逆の、悪意ある親レルムを回避することによって、さらなるセキュリティを可能にし得る。それぞれのRMUレジスタ状態228から、対応する形態の解放コマンド232は、対応するメモリ領域を無効状態220に返し得る。さらなるクリーン・コマンドは、領域が汎用データに再割り当てされ得る前に、前に定義されたRMUプライベート領域からのデータの消去をトリガし得る。
【0081】
したがって、要約すると、所与の所有者レルムによってまだ所有されているが、それがRMUによって排他的アクセス向けに確保されていることを意味する所有権テーブルにおいて指定された属性を有する、少なくとも1つのRMUプライベート・メモリ領域が、定義され得る。この実例では、RMUプライベート状況を制御する属性は、所有権テーブル内の対応するエントリにおいて指定されたライフサイクル状態であるが、それはまた、他のやり方で識別され得る。MMUは、所与のメモリ領域が少なくとも1つの状況属性によってRMUプライベート・メモリ領域として指定されたときに1つ又は複数のソフトウェア・プロセスによるその所与のメモリ領域へのアクセスを防止し得る。したがって、RMU自体によってトリガされていない任意のソフトウェアでトリガされたアクセスは、それがRMUプライベート・メモリ領域を目標とするとき、拒否され得る。これは、所有者レルム自体によるRMUプライベート・メモリ領域へのアクセスの防止を含む。
【0082】
所有者レルムがそのメモリ領域内のデータにアクセスすることさえできない場合に、RMUプライベート・メモリ領域の所有者レルムを定義することが何故有用であるのかと疑問に思う人があるかもしれない。たとえば、RMUのみによってデータへのアクセスを行使するための代替手法は、RMUのための特別なレルムを定義すること、並びに、その特別なRMU所有者レルムにプライベートなものとして維持されることになるデータを記憶するためのメモリ・アドレス空間のページを割り当てることであろう。しかしながら、レルムを無効にするとき、そのレルムに関連するすべての制御データを無効化するという要件が存在することがあり、そして、この制御データが、無効にされたレルムではなくて特別なRMU所有者レルムに関連していた場合、これは、無効にされたレルムのデータの消去をより複雑にする可能性があるということを本発明者は認識した。
【0083】
対照的に、RMUプライベート属性を使用することによって、所与のレルムの制御データを記憶するメモリ領域は、たとえ所有者がそれにアクセスすることができなくても、そのレルムによってまだ所有されており、これは、どのメモリ領域がその所有者レルムがキャンセルされたときに無効にされる必要があるかを識別することがより単純であるということを意味する。所与のレルムが無効にされるとき、親レルムは、指定された無効にされたレルム(又はその子孫)によって所有されているメモリ領域が無効にされる、及びアクセス不可能にされる、及び再請求コマンドをトリガした親レルムの所有権に返されるようにトリガする一連の再請求動作を単純に実行することができる(たとえば、次いでRMUによる作用を受ける再請求コマンドを実行することによって)。再請求動作は、無効にされたレルムにアクセス可能なページに影響し得るのみならず、無効にされたレルムによって所有されるRMUプライベート・メモリ領域も含み得る。
【0084】
そのレルムによって所有されるRMUプライベート・メモリ領域内のレルムの制御データを記憶することのもう1つの利点は、エクスポート動作を実行するときである。レルムのメモリ・フットプリントをゼロまで減らすために、エクスポート動作中に、そのレルムに関連する管理構造体が、通常のメモリに加えて、エクスポートされ得る。それらの構造体がレルムによって所有されることを要求することは、このエクスポート動作の管理を単純化する。
【0085】
一般に、任意の種類のレルム管理データが、RMUプライベート領域において記憶され得るが、具体的には、レルム管理データは、以下のうちのいずれかを含み得る。所与のレルムのプロパティを定義するレルム記述子、所与のレルムのレルム記述子を記憶するメモリ領域を識別するレルム記述子ツリー・エントリ若しくはさらなるレルム記述子ツリー・エントリ、所与のレルム内の少なくとも1つのスレッドの実行に関連するアーキテクチャの状態を示すレルム実行コンテキスト・データ、及び所与のレルムに関連する所定の動作の中間点において使用される一時的作業データ。
【0086】
一般に、RMUプライベート領域は、所与のレルムに関連する指定のレルム制御データを記憶するために使用され得るが、それはまた、レルムがアクティブになると実行されるある指定の他の動作の周囲のセキュリティを向上させるために使用され得る。たとえば、データが暗号化又は解読される前述のページング・エクスポート又はインポート動作を実行し、メタデータを使用するチェックが実行されて、そのデータが再びインポートされるときにそのデータがまだ有効であることをチェックするとき、そのような動作は、多数の周期を取り得、そのような長く続く動作は、途中で中断される可能性が高い。再び最初から動作を開始する必要のないように、そのようなデータを他のプロセス(所有者レルム自体を含む)にアクセス可能にすることなく、中断されたときにもそのような長く続く動作に関連するメタデータ又は他の一時的作業データがキャッシュ/メモリ内に保持されることを可能にすることが望ましくなり得る。RMUプライベート領域としてメモリ・システムの領域を一時的に指定することによって、この一時的作業データを保護することができる。したがって、図21に示すように、ページ状態はまた、この一時的作業データがメモリ領域に記憶されるときに使用することができるRMUExporting及びRMUImporting状態を含むことができ、そして、これらの状態のうちの1つが選択されるとき、次いで、RMUのみがそのデータにアクセスすることができる。
【0087】
RMUプライベートとして対応するメモリ領域を一時的に指定することから恩恵を受ける得る動作の他の実例は、以下を含み得る。所与のレルムによって所有される少なくとも1つのメモリ領域と所与のレルム以外のレルムによって所有される少なくとも1つのメモリ領域との間のデータの移転中の暗号化又は解読されたデータの生成又は検証と、別のレルムへのメモリ領域の所有権の移転と、無効にされたメモリ領域に記憶されたデータをアクセス不可能にさせるために実行される破壊的再請求動作。たとえば、アドレス空間の所与のページのすべての内容を消去するための再請求動作は、途中で中断され得、したがって、消去が完了するまで他のプロセスがそのページにアクセスすることができないことを確実にするために、そのページは、一時的にRMUプライベートとして指定され得る。一般に、RMUによって実行される任意の長いレイテンシ動作は、長く続く動作を開始し、次いで、長く続く動作が完了するときにそれを変換し戻す前に、いくつかのメモリ領域のライフサイクル状態をRMUプライベート状態に変換することによってそれの一時的作業データを保護させることから恩恵を受け得る。
【0088】
領域が、RMUプライベートとして指定されるとき、それは、レルム管理動作を実行するために使用されるRMU20によるアクセスのために確保される。レルム管理動作は、以下のうちの少なくとも1つを含み得る。新しいレルムを作成することと、既存のレルムのプロパティを更新することと、レルムを無効にすることと、所与のレルムによる所有権のメモリ領域を割り当てることと、所与のメモリ領域の所有者レルムを変更することと、所与のメモリ領域の状態を変えることと、所与のメモリ領域の所有者レルムによってトリガされたコマンドに応答して所与のメモリ領域へのアクセスを制御するためのアクセス制御情報を更新することと、1つ又は複数のソフトウェア・プロセスの処理中にレルム間の遷移を管理することと、所与のレルムへの所与のレルムによって所有されるメモリ領域と異なるレルムによって所有されるメモリ領域との間の所与のレルムに関連するデータの移転を管理することと、所与のレルムに関連するデータの暗号化又は暗号解読。RMUは、レルム管理動作の少なくとも一部分を実行するためのハードウェア・ユニットでもよく、又はレルム管理動作の少なくとも一部分を実行するためにレルム管理ソフトウェアを実行する処理回路32を備えてもよく、或いはその両方の組合せでもよい。
【0089】
図22は、それが有効にアクセスされ得る、又は対応するページを無効化し得るように、所与のページをクリーニングするために所与のレルムによってトリガすることができる状態遷移を示す。図23は、これを拡張して、1つのレルムから別のレルムに所与のページの所有権を移転するために使用することができるさらなるコマンドを示す。親レルムによる領域請求コマンド230の実行は、そのメモリ領域が、現在、無効状態220にあり、親レルムによって所有される場合に、対応するメモリ領域が指定された子レルムに移転されることを可能にする。目標メモリ領域が所与の子レルムの親レルム以外の任意のレルムによって所有されるとき、又はメモリ領域が有効である若しくはRMUプライベート・ライフサイクル状態226、228のうちの1つにある場合、領域請求コマンド230は拒否される。これは、それ自体がアクセス権を有さない又はRMU20によって使用中であるページの所有権を親レルムが任意に譲渡するのを防止する。ページが子レルムに譲渡された後は、次いで、その子レルムは、図22に示すのと同じやり方で有効状態222に遷移するためにクリーン・コマンドを実行することができる。簡潔にするために、RMUプライベート領域の使用は図23には示されていないが、任意の所与のレルム内で、プライベート・クリーン・コマンドは、別法として、前述のようなRMUクリーン状態226にメモリ領域を遷移させ得る。
【0090】
グラニュール請求コマンド230は、すでに確立された子レルムに所有権を移転するために使用される。加えて、親レルムが、子に譲渡された領域にデータを書き込むことができるように、親レルムは、新しい状態にある新しい子レルムに所有権を譲渡するようにRMU20をトリガするグラニュール追加コマンド232を実行することができる。たとえば、これは、新しい子レルムが第1の時間に実行することができるように、新しい子レルムのプログラム・コードをインストールするために使用することができる。したがって、追加コマンド232は、対応するメモリ領域が子レルムに割り当てられたライフサイクル状態に関して、請求コマンド230とは異なる。追加コマンド232は、図18に示された新しい状態206に子レルムがあるときにのみ可能にされ得る。子レルムは、所有権テーブル128の対応するエントリを更新するようにRMUをトリガするグラニュール解放コマンド234を実行すること、並びに子レルムのレルム記述子内のリソース・カウントなどのプロパティを更新することなどによって、その親に所与のメモリ領域の所有権を解放して返すことができる。指定されたメモリ領域が、グラニュール解放コマンド234を発行した現在のレルムによって所有されていない場合、又はその領域が無効以外の状態にある場合(それが親レルムによる所有権に返され得る前に、データの破壊的クリーニングを確保することが必要とされる)、グラニュール解放コマンド234は拒否され得る。
【0091】
親レルムが子レルムを初期化する、前述の階層的レルム構造を使用することの1つの利点は、これがレルム及びその子孫の無効化を大きく単純化するということである。所与の仮想マシン・レルムが無効にされようとする場合、そのとき、その仮想マシンの下で実行する任意のアプリケーションのレルムを無効化することもまた望ましくなり得ることは、比較的一般的である。しかしながら、無効にされようとするそれぞれのプロセスに関連する相当量のプログラム・コード、データ及び他の制御情報が存在し得る。データ消去の一部のみが実行されたとき、無効にされたレルムに関連するデータへのアクセスを継続することが不可能であるように、そのような無効化が微細に生じることを確実にすることが望ましくなり得る。各レルムが、前述のようなレルム階層なしに、他のレルムから完全に独立して確立された場合、対応するレルムIDによって識別される各レルムを別個に無効化するためにいくつかの別個のコマンドを提供することが必要になり得るので、これは、そのような微細な無効化を難しくし得る。
【0092】
対照的に、ルート・レルム以外の各レルムが、親レルムによってトリガされたコマンドに応答して初期化された子レルムであるように、RMUがレルムを管理するレルム階層を提供することによって、その場合、目標レルムの無効化を要求するコマンドが受信されるとき、RMU20は、より効率的動作で、目標レルム及び目標レルムの任意の子孫レルムを処理回路にアクセス不可能にさせることができる。
【0093】
具体的には、目標レルムの無効化に応答して、RMUは、目標レルムが無効であることを示すために目標レルムに関連するレルム管理データ(たとえば、レルム記述子)を更新し得るが、目標レルムの任意の子孫レルムに関連する任意のレルム管理データを更新する必要はない。子孫レルムに関連するレルム管理データは、変更されないままにすることができる。これは、所与のレルムへのアクセスがその親を介して制御され、したがって、親レルムが無効にされた場合、次いで、これは親レルムの子孫にアクセスすることもまた不可能であることを意味するので、レルム管理データが変わっていなくても、目標レルムを単純に無効化することは、任意の子孫レルムを実際にアクセス不可能にさせ得るからである。それぞれのレルムが、それの指定の子を識別するために親レルムによって定義されたローカルRIDを使用するレルム・エントリ命令(後述のERET命令)を使用して入られ、これは、所与の子レルムの親レルムによって所有されるメモリ領域に記憶されたレルム記述子を通過するために使用されるとき、その場合、親レルム以外のプロセスは、子レルムのレルム管理データにアクセスするためにRMUをトリガすることができない。したがって、親レルムが無効にされた場合、次いで、RMUは、所与の子レルムのレルム管理データにアクセスすることができず、所与の子レルムがアクセス不可能になることを確実にする。
【0094】
レルムが無効にされた後、そのレルムの親レルムは、無効にされた目標レルムによって所有された各メモリ領域を再請求するための再請求動作を実行するようにRMUをトリガし得る。たとえば、図23に示すように、子レルムによって所有されているメモリ領域の再請求コマンド236は、メモリ領域の無効状態220への復帰をトリガすることができ、メモリ領域の所有権を親レルムに移転し戻すこともできる。しかしながら、この再請求動作は、他のレルムの進行中の処理のバックグラウンドで実行することができ、無効にされたレルムの任意の子孫レルムがアクセス不可能にされることを可能にするために瞬時に実行される必要はない。図18に示すような所与のレルムのレルム状態をアクティブから無効に変えるための単一のアクションは、その無効にされたレルムの任意の子孫レルムに関連するすべてのデータもまたアクセス不可能であることを確実にするのに十分である。任意の親レルムは、それが所有するページをそれの子に譲渡することだけでき、子はそれが所有するページを孫レルムに譲渡することのみできるので、無効にされたレルムの任意のさらなる子孫レルムもまたその範囲内のページを所有することになるので、無効にされたレルム(図16を参照)のレルム記述子に定義された保護されたアドレス範囲は、どのページを再請求すべきかを識別するために使用することができるので、これはまた、どのページが無効にされる及び所与のレルムを無効化したときに再請求される必要があるかを追跡することが比較的簡単であることを意味する。
【0095】
したがって、要約すると、レルム階層の使用は、レルムの管理及び無効化を大きく単純化する。そのような無効化、並びにメモリ内のデータの上書きと同時に、無効化はまた、無効化をトリガした処理要素8内のみならず、別のCPU又はGPUなどの他の処理要素内にも保持される目標レルム及び目標レルムの任意の子孫レルムのキャッシュされたレルム管理データの無効化をトリガし得る。したがって、他の処理要素は無効にされたレルムへのアクセスを有し続けないことを確実にするために、他の処理要素への無効化のブロードキャストが存在し得る。そのような無効化をトリガするとき、所与の子レルムのグローバルRIDが共通の接頭辞部分をその親レルムのグローバルRIDと共用するように、キャッシュされたレルム管理データが、対応するレルムを一意に識別するグローバル・レルム識別子に関連付けられること、及び前述のようなグローバル・レルム識別子を形成することが有用になり得る。これは、所与のレルムが指定されたレルムIDの子孫であるかどうかを迅速に比較するためにビット・マスキング又は他の類似の動作が使用されることを可能にする。所与のレルムが、先祖レルムの無効化を介してアクセス不可能にされた場合、次いで、指定された目標レルムに入ろうとする試みは不可能である(そのレルムのためのERET命令を実行するための親レルムが存在しないので)が、異なるレルム・エントリ機構を使用する他の実装形態においてでも、子孫レルムのレルム記述子がもはや位置確認不可能である場合、レルム・エントリは、失敗し、故障状態をトリガし得る。
【0096】
図24は、所与のメモリ・アクセスが許可されたかどうかを判定するために、MMU26及びRMU20によって実行されるチェックの一実例を表す。MMU26は、所与のゲスト・オペレーティング・システムによってセットされたステージ1ページ・テーブル120-1の制御のもとで、仮想アドレス(VA:Virtual Address)を中間物理アドレス(IPA:Intermediate Physical Address)に変換するステージ1、及び、ハイパーバイザ38によってセットされたステージ2ページ・テーブル120-2に基づいて、ステージ1変換によってもたらされた中間物理アドレスをメモリ16にアクセスするために使用される物理アドレス(PA)に変換するステージ2アドレス変換といった、アドレス変換の2つのステージをサポートする。ハイパーバイザは、様々な仮想マシンに対して多数のステージ2ページ・テーブルのセットを定義することができ、メモリ・アクセス要求を与えられた仮想マシンID(VMID:Virtual Machine ID)250は、どの特定のステージ2ページ・テーブルを使用するか識別することができる。同様に、オペレーティング・システムは、様々なアプリケーションのための多数のステージ1ページ・テーブルのセットを定義することができ、アドレス空間識別子(ASID:address space identifier)252は、どのステージ1ページ・テーブルを使用するか識別するために使用することができる。VMID250及びASID252は、メモリ・アクセス要求と関連付けられた現在の変換コンテキストを識別する変換コンテキスト識別子254と総称することができる。メモリ・アクセス要求はまた、トランザクションが読取り要求(R)か書込み要求(W)かを示す属性、又は、メモリ・アクセス要求を発行したプロセスと関連付けられた例外レベル(X)を示す属性、といった様々な属性256を指定する。
【0097】
メモリ・アクセスを受け取ると、MMU26は、ステージ1ページ・テーブルからの情報に基づいて、トランザクション属性が有効であるかどうか判定することができる。たとえば、ステージ1ページ・テーブルは、あるアドレスに対して読取りトランザクションのみが許可されることを指定できる、又は、所与のアドレスに対して読み取り及び書き込みの両アクセスを可能とすることができる(いくつかの実装形態では、アドレス空間のうち書込み領域のみ定義することを可能とすることもできる)。また、ステージ1ページ・テーブルの属性は、所与の例外レベル又はそれよりも高いレベルで動作するプロセスへのアクセスを制限することができる。トランザクション属性が有効で、アクセスがステージ1ページ・テーブルによって許可された場合、MMUは対応する中間物理アドレス(IPA)を戻すことができる。次いで、IPAはVMID250と共にステージ2ページ・テーブルにインデックス付けを行い、ステージ2ページ・テーブルは再度トランザクションの属性を確認し、有効であれば物理アドレスを戻す。すべてのトランザクションが、アクセス変換の2つのステージを経る必要があるわけではないことに留意されたい。たとえば、入力メモリ・トランザクションがEL3若しくはEL2、又はセキュアなドメイン内のEL1若しくはEL0において発行された場合、ステージ1MMUの出力は物理アドレスとして扱われ、ステージ2MMUはバイパスすることができる。
【0098】
物理アドレスを入手すると、次に、RMUテーブル128(レルム・グラニュール・テーブル)においてその物理アドレスを検索し、MMUによって実施されたレルム保護によりメモリ・アクセスを進めることができるかどうか判定することができる。レルム・チェックについては以下の図26でより詳細に説明する。ステージ3におけるRMUチェックが成功した場合、次に有効にされた物理アドレスが出力され、メモリ・アクセスを進めることが許可される。ステージ1若しくはステージ2のアドレス変換における任意のチェック、又はステージ3において行われたRMUによって実施されたレルム保護が失敗した場合、メモリ・アクセスは拒否される。したがって、レルム管理ユニットによって行われる保護は、ページ・テーブル120に基づく任意の既存のアドレス変換チェックに加えて、実行されるべきチェックの追加層と考えることができる。図24で表されたチェックは、比較的実行が遅くなる可能性がある。その理由は、メモリ内に、アクセスし、メモリ・アクセス要求又は現在の変換コンテキスト又はそこからアクセスがなされるレルムのパラメータと比較する必要がある多くのテーブルが存在する可能性があるためである。こうしたチェックをメモリ・アクセスごとに実行することは可能であろうが、所与のメモリ・アクセス要求に対してチェックが首尾よく実行されたとき、TLB100内にデータを速やかにキャッシュすることが可能であり、その結果、次回に類似のメモリ・アクセス要求が発行されたとき、すべてのチェックを再度繰り戻すことなく許可することができる。したがって、TLB100において失敗がありヒットしないときにのみ、こうした許可チェックを実行するのが好ましいであろう。
【0099】
図25は、すでに有効にされたメモリ・アクセスに関するデータをキャッシュするためのTLB構造100の一実例を表す。図25は1つのTLBを表しているが、レベル1のTLBがより高速なアクセスのために変換エントリのより小型のサブセットを記憶し、レベル2又はそれ以上のレベルのTLBが、レベル1のTLBに失敗が発生した場合に、アクセス可能な変換エントリのより大きなセットを記憶するといった状態で、いくつかのシステムでは、キャッシュ階層に複数のレベルのTLBを含むことができることが理解されよう。TLB100(又は「変換キャッシュ」)は、いくつかのエントリ260を有し、各エントリは対応するメモリ領域のためのアドレス変換データを指定する。各エントリ260は、データが対応する物理アドレス264を提供する仮想アドレスに対応した仮想的にアドレスされたタグ262を含む。この実例では、TLBはステージ1及びステージ2のTLBが結合されたものであり、そのため、仮想アドレスは、中間物理アドレスを経由する必要なしにTLBを使用して物理アドレスに直接変換することができる(対応するステージ1及びステージ2の変換は、正しい物理アドレスの位置を突き止めるためにTLBがない(TLB miss)中で実行されるであろうが、TLBは介在するIPAを記憶する必要はなく、VAを直接OAにマッピングすることができる)。他の実例では、分離したステージ1(S1)及びステージ2(S2)のTLBを使用することが可能であるが、そのケースにおいは、VA-PAペア262、264は、VA-IPAペア又はIPA-PAペアで置き換えることができる。TLBエントリ260はまた、変換コンテキスト識別子254(ASID252及びVMID250から構成されている)でタグ付けされる。この実例では、2つの別々の変換コンテキスト識別子が設けられるが、他の実例では、1つの統合された変換コンテキスト識別子を使用することが可能であり、又は、分離したS1/S2のTLBのケースでは、S1のTLBはASIDを使用し、S2のTLBはVMIDを使用することができる。変換コンテキスト識別子により、同一の仮想アドレスを指定して、異なる物理アドレスを提供するTLB100の異なるエントリにアクセスをマッピングさせる、異なるオペレーティング・システム又はアプリケーションが可能となる。
【0100】
TLB100におけるヒットには、メモリ・アクセス要求に対して指定されたアドレス258の対応する部分をマッチングさせるためのタグ262だけでなく、メモリ・アクセスが発行された現在の変換コンテキストがマッチングした場合には、同一のエントリに記憶された変換コンテキスト識別子も必要となる。タグ262と変換コンテキスト識別子254との比較は、所与のメモリ・アクセスに対する正しい物理アドレス264の位置を突き止めるのに十分であると考えられるかもしれない。しかし、この比較が検索で実行される唯一の比較である場合には、TLBでヒットしたメモリ・アクセスが、レルム管理ユニット・テーブル128のさらなるチェックなしに受け取られると、潜在的なセキュリティの脆弱性が存在する。それは、以前に実行されたプロセスと同一のVMID250又はASID252を有し、MMUを欺いて、実際は異なるレルムから所与のメモリ領域にアクセスするために以前に受け取られたレルムへ来た、メモリ・アクセスを受け取らせる新しいプロセスが作成されることが可能なためである。
【0101】
この問題に対処するために、TLB100は、各TLBエントリ260内で、対応するメモリ領域を有する所有者レルムのグローバルRID270、並びに、他のどのレルムが対応するメモリ領域にアクセスすることを許可されるかを制御するために所有者レルムによってセットされた可視性属性272を指定することができる。所与の変換キャッシュ100の検索が、所与の目標メモリ領域に対する現在の変換コンテキスト及び現在のレルムから発行されたメモリ・アクセスに応答して実行されたときに、変換キャッシュ100に失敗が発生した場合、TLB制御回路280は、アクセスが許可されるかどうかチェックするために、テーブル・ウォーク・ユニット102をトリガして適切なページ・テーブル120及びRMUテーブル128にアクセスする。ページ・テーブル又はRMUテーブル128のどちらかが、対応するメモリ領域へアクセスすることから、変換コンテキスト、例外レベル及びレルムの現在の組合せを除外すると、そのメモリ・アクセスに応答して変換キャッシュに割り当てられるデータは何もない。特に、検索が失敗し、現在のレルムが目標メモリ領域の所有者レルムによって目標メモリ領域にアクセスすることから除外されると、アドレス変換データを変換キャッシュに割り当てることが妨害される。したがって、対応するメモリ・アクセスがMMUページ・テーブル120及びRMUテーブル128の両方のチェックを通過するとき、エントリはTLB100に割り当てられる。
【0102】
次に、変換キャッシュが所与のアドレスにアドレス変換を提供するエントリ260をすでに含んでいるかどうかチェックするために、その変換キャッシュを検索するとき、TLB制御回路280は、対応するエントリ260で指定された変換コンテキスト識別子254と、メモリ・アクセス要求と共に受け取られた現在の変換コンテキストのための変換コンテキスト識別子254との間の第1の比較、及びまた、そのエントリ260によって指定されたグローバルRID270と、メモリ・アクセス要求を発行した現在のレルムと関連付けられた現在のグローバルRIDとの間の第2の比較に基づいて、メモリ・アクセスが変換キャッシュ100の所与のエントリとマッチングするかどうかを判定する。TLBエントリは、メモリ領域にアクセスする許可を得ているものとして以前に確認されたレルムから、依然としてアクセスされるという追加チェックを提供することにより、たとえ悪意ある監督プロセスが、所有者レルムによってデータにアクセスすることが可能な以前に存在したプロセスと同一のASID252又はVMID250を有する別のプロセスを生成したとしても、グローバル・レルム識別子270は、図18に関して説明したように、レルム消去(scrubbing)コマンド216の処理を受けることなく別のプロセッサに再割り当てすることができないので、これにより、現在のレルムのグローバルRIDは有効であると信頼でき、ASID又はVMIDに対して可能であるように「偽物」であろうはずがないと意味することを保証できる。したがって、現在のレルムのグローバルRIDが、依然として所有者GRID270及び可視性属性272によって示される許可を満足させる場合、これは以前に実行されたレルム・テーブル・チェックが依然として有効であることを示す。
【0103】
レルム識別子の第2の比較でミスマッチを検出すると、たとえタグ比較及び変換コンテキスト比較がマッチしたとしても、エントリが割り当てられた以降に変換コンテキストID254とレルムID270との間のマッピングに変化が生じたことを示すので、アクセス要求はTLB内で失敗したと考えられる。これはアクセスが拒否されるであろうということを必ずしも意味しない。というのは、ページ・テーブル及びRMUテーブルの別のウォークは、テーブル・ウォーク・ユニット102によってトリガされる可能性があり、レルム・チェックが成功すると、異なるエントリ260をTLB100に割り当て、新たに割り当てられたエントリからの情報に基づいてメモリ・アクセスをサービスする可能性があるからである。
【0104】
図26は、所与のメモリ・アクセスがMMU26によって許可されるかどうかを判定する方法を示す流れ図である。ステップ300において、メモリ・アクセス要求が受け取られ、これはTLB100内で検索される。メモリ・アクセス要求は、少なくともアクセスされる仮想アドレス、現在の変換コンテキストを示す1つ又は複数の変換コンテキスト識別子、及び現在のレルムを識別するグローバル・レルム識別子を指定する。たとえば、グローバルRIDは、レルムへのエントリ時に現在のレルムのグローバルRIDで書き込み可能な処理要素8の状態レジスタから読むことができる。
【0105】
メモリ・アクセス要求に応答して、TLB制御回路280はTLBの検索を実行する。検索は少なくともTLBのいくつかのエントリにアクセスする。いくつかの手法では、完全に連携されたキャッシュ構造を使用することが可能であり、このケースにおいては、少なくともレベル1のTLBのすべてのエントリは検索され、ヒットしたか失敗したかを識別するために現在の要求のパラメータと比較することができる。他の手法では、1組の連携された(set-associative)キャッシュ割り当てポリシーを使用することができ、このケースにおいては、TLBの所与のレベルのエントリのサブセットのみを検索し、メモリ・アクセスの目標アドレスを使用してインデックス付けする必要があるだけである。アクセスされたエントリのセットのそれぞれに対して、TLB制御回路280はいくつかの比較(並行又は逐次のどちらか)を実行する。この比較には以下が含まれる。
・メモリ・アクセス要求のアドレスが、アクセスされたエントリに記憶されたタグ262とマッチングするかどうかを比較するためのタグ比較302。
・アクセスされたエントリに記憶された変換コンテキスト識別子をメモリ・アクセス要求の変換コンテキスト識別子と比較するための第1の(コンテキスト)比較304。
・メモリ・アクセス要求のグローバルRIDをアクセスされたエントリ・セットのそれぞれに対する所有者RID270及び可視性属性272と比較するための第2の(レルム)比較306。
ステップ308において、制御回路280は、比較302、304、306のすべてに対してマッチを戻したTLB内にエントリが存在するかどうかを判定し、存在する場合はヒットが識別され、ステップ310において、マッチング・エントリ内で指定された物理アドレス264が戻され、その物理アドレスに基づいてメモリ・アクセスが続行することを許可される。ヒットしたケースでは、ページ・テーブル又はRMUテーブルの何等の検索を実行する必要はない(メモリ・アクセスに対する所有権テーブル検索は省略可能である)。ページ・テーブル及びRMUテーブルによって提供される保護は失敗時にのみ呼び出される。
【0106】
3つの比較302、304、306のすべてとマッチするエントリがない場合、失敗が検出される。さらなるTLBレベルが提供されると、ステップ300~308への対応する検索は、レベル2又は後続のレベルTLBで実行することができる。検索が最後のレベルTLBで失敗すると、様々なページ・テーブル及びRMUテーブルのウォークが実行される。したがって、ステップ311では、ステージ1のページ・テーブル・ウォークが実行され、ステップ312では、ステージ1のページ・テーブル障害が発生した(たとえば、指定された仮想アドレスに対して定義されたアドレス・マッピングが存在しないため、又は、アクセス要求の現在のパラメータ256が、目標の仮想アドレスに対して指定されたアクセス許可を破ったため)かどうか判定される。ステージ1の障害が発生すると、ステップ314では、メモリ・アクセスが拒否され、メモリ・アクセスに応答するTLB100に対するアドレス・マッピング・データの割り当てが阻止される。
【0107】
他方、アクセス要求がステージ1のページ・テーブル・チェックを通過すると、ステップ315でステージ2のページ・テーブル・ウォークがトリガされ、ステージ1のプロセスで戻された中間物理アドレス用のマッピング・データが入手され、ステップ316でステージ2のページ・テーブル障害が発生した(この場合も、アドレス・マッピングが定義されなかったため、又は、アクセスがステージ2のアクセス許可によって許可されなかったため)かどうか判定される。ステージ2の障害が発生すると、再度ステップ314でアクセス要求が拒否される。
【0108】
ステージ2の障害が発生しないと、ステップ318で、RMUテーブル検索がステージ2によって戻された物理アドレスに基づいてトリガされ、ステップ320で、レルム障害が検出されたかどうか判定される。以下のイベントのいずれかが発生した場合、レルム障害がトリガされることがある。
・対応するメモリ領域に対するライフサイクル状態が、レルム所有権テーブル128内で無効であると示された場合。これは、図22に示すクリーニング動作224を経ていないメモリ・アドレス空間のページが、異なるレルムによるアクセスからそのメモリ領域内の別のレルムによって以前に記憶された任意のデータを保護するために、アクセスすることができないことを保証する。
・現在のレルムは、所有者レルムによってそのメモリ領域にアクセスするための対応するメモリ領域として許可されない。所与のレルムが所与のメモリ領域にアクセスすることを許可されないいくつかの理由があろう。所有者レルムが、メモリ領域は所有者自身及びその子孫のみが見ることができると指定した場合、別のレルムはそのレルムにアクセスする許可は得られないであろう。また、現在のレルムが所有者レルムの親レルムであり、所有者レルムは、親レルムにその領域にアクセスすることを許す親可視性属性を定義していない場合、メモリ・アクセスは拒否されるであろう。また、所有者レルムそれ自体は、メモリ領域が上で説明したように目下のところRMUプライベートとしてセットされている場合、メモリ領域にアクセスすることはできないであろう。RMUチェッキング・ステージにおいて、所有者レルムの子孫レルムはメモリ領域にアクセスすることを許可されよう(メモリ領域がRMUプライベート領域でない限り)。したがって、このチェックにより所有者レルムによってセットされるアクセス許可が強化される。
・仮想アドレス、又は、そこからS1/S2変換により現在のメモリ・アクセスのための物理アドレスがマッピングされる中間物理アドレスが、図19で表したように、対応するメモリ領域のための所有権テーブル128で指定されたマッピングされたアドレスとマッチしない場合、メモリ・アクセスは拒否される。これにより、悪意ある親レルムが所与のメモリ領域の所有者を子レルムに割り当てる状況を防ぐが、ページ・テーブル120における変換マッピングを変化させ、その結果、その子レルムによって所有されたページを指すために以前使用された同一の仮想アドレスを使用して、子レルムによってトリガされた後続のメモリ・アクセスが、今度は子レルムそれ自体によって実際に所有されていない異なる物理アドレスにマッピングすることになる。対応するメモリ領域の物理アドレスから、所有権が主張されたときにその物理アドレスを生成するために使用されたマッピング・アドレスへ戻って、所有権テーブルにリバース・マッピングを提供することにより、検出対象であるアドレス・マッピングの変更によりセキュリティ侵害が発生する可能性があり、その結果メモリ・アクセスが失敗することになる。
他のタイプのチェックも実行できることは理解できよう。レルム・チェックが成功した場合、ステップ322で物理アドレスが戻され、メモリ・アクセスが物理アドレスを使用して続行可能となり、ページ・テーブル120及び所有者レルムから入手された物理アドレス、並びに、要求された仮想アドレス及び変換コンテキストに対応する所有権テーブル128から入手された可視性属性を示す、新しいエントリがTLBに割り当てられる。
【0109】
したがって、要約すると、変換キャッシュ検索中にヒットが検出できるようにマッチする第2の比較(現在のレルムのGRIDを変換キャッシュのエントリに提供されるGRIDと比較する)を要求することにより、たとえTLBエントリが割り当てられた後で所与のレルムと関連付けられた変換コンテキスト識別子に変更があったとしても、これをたとえレルム・チェックがTLBヒット時に再度繰り返されなかったとしても、レルム保護を回避するために使用することはできないことを保証する。これにより、すべてのメモリ・アクセス時にレルム・チェックを繰り返すこと(これは、実行するチェックの回数を考えれば、かなりプロセッサの負荷が高い)が不必要になったことにより、効率が向上するようになる。これにより、ヒットすることは失敗することよりもはるかに一般的であるので、ほとんどのメモリ・アクセスがより早く実行できるようになる。メモリ・アクセスと変換キャッシュの所与のエントリ間の不一致は、第2の比較が、そのエントリで指定されたレルム識別子と現在のレルムのレルム識別子との不一致を識別すると検出される。次いで、これにより失敗がトリガされ、正しいアクセス制御データを見つけ出すためにページ・テーブル及びRMUテーブル・ウォークをトリガすることができる(VMID/ASIDが変化するといけないのでレルム・チェックが繰り返される状態で)。
【0110】
この手法は、以前アクティブであったレルムと関連付けられた消去プロセスを無効にする情報が実行される後まで、RMUが以前アクティブであったレルムと同じレルム識別子を有する新しいレルムの初期化を阻止することができるため安全である。この消去プロセスは、レルム管理データ及び無効にされたレルムと関連付けられたメモリに記憶された任意のデータの無効化だけでなく、第2の比較がそのエントリのレルム識別子と無効にされたレルムのレルム識別子とのマッチを識別した変換キャッシュの少なくとも1つのエントリの無効化も含むことができる。したがって、これは、レルムと関連付けられた変換キャッシュ100内のすべてのデータが無効にされない限り、以前のプロセスと同じレルム識別子を使用して異なるプロセスを再作成することは不可能であることを意味している。したがって、TLB内のマッチングしたレルム識別子を信頼して、以前に実行されたレルム・チェックは依然として有効であると示すことができる。特に、上で説明したように、各レルムはライフサイクル状態と関連付けることができ、これを使用して消去プロセスの実行を強化することができる。アドレス変換データは、現在のレルムに対する現在のライフサイクル状態がアクティブなときに、変換キャッシュに割り当てることができるだけである。所与のレルム識別子で新しいレルムを初期化するコマンドは、クリーン状態以外のどの状態においても拒否され、アクティブ状態からクリーン状態への遷移には、消去プロセスをトリガするための少なくとも1つのコマンドを含む、実行されるべき所定のコマンド・シーケンスが必要となろう。
【0111】
変換キャッシュにおける失敗により所有権テーブル検索がトリガされ、これにより、いくつかのメモリ領域のそれぞれに対して、対応するメモリ領域のための所有者レルム、及び、他のどのレルムがメモリ領域にアクセスできるかを制御するための所有者レルムによってセットされたアクセス制限を指定する所有権テーブルにアクセスすることができる。TLBヒットを判定するための追加的な第2の比較を含むことにより、検索ヒット時に省略される所有権テーブル検索が可能となる。所有権テーブル検索は、TLB失敗時に実行される。
【0112】
図25は、所有者レルムのGRIDが各TLBエントリに記憶される手法を表すが、現在のレルムのGRIDが対応するメモリ領域にアクセスするのに適切かどうかの判定を可能とする情報を表す他の方法もある。たとえば、許可されたレルムのGRIDのリストは、TLB内で保守することが可能であり、又は、TLBは、完全なGRIDの代わりに、アクティブなレルム・リストへのインデックスを含むTLBエントリでアクティブなレルムの別個のリストを保守することができる。これにより、TLBエントリ内にリストを記憶することと比較してTLBエントリ・サイズを削減することができる。しかし、所有者レルムのGRIDを単純に表示することは、それにより、TLBエントリの割り当て及びチェックのプロセスが、アクティブなレルム・リストを調査する際の追加的なレベルの遠回りを避け、TLB間のアクティブなレルム・リストの変更の同期を取る必要を避けることによって複雑性が低下するため、許可されたレルムを識別するより効果的な方法になりうる。
【0113】
TLB検索時に実行される第2の(GRID)比較におけるマッチは、現在のレルム識別子が、双方の対応するTLBエントリ260において指定されたグローバル・レルム識別子270と厳密に同一であることは必ずしも必要ではないということに留意されたい。すなわち、第2の比較のいくつかの形式は、部分的なマッチングを利用することができる。いくつかの実装形態では、所有者レルムはそれが所有しているページへのアクセスを許可されるだけであり、そのためこのケースでは、現在のGRIDと所有者GRID270との厳密なマッチが必要となろう。しかし、データがレルム間で共有されるのは有用であるので、可視性属性272も所有者レルムがどのアクセスが他のレルムによって許可されるのかを定義できるように提供される。
【0114】
したがって、TLB100の可視性属性272、及び所有者レルムのグローバルRID270をキャッシュすることにより、TLB制御回路280は、第2の比較が可視性属性に基づいてマッチを判定するために必要とされるマッチングの範囲を変更することが可能になる。たとえば、可視性属性272は、比較を実行するときにGRIDのどの部分をマスク化すべきか制御することができ、そのため、こうしたマスク化されたビットが不一致だとしても、全体的な比較のマッチングには影響しないので問題はない。たとえば、制御回路は、いくつかのケースでは、現在のレルムが、所有者レルム又は所有者レルムの子孫レルム以外のレルムを示したとき不一致と判定することができる。子孫レルムは、所有者レルムのGRIDとマッチする接頭辞又は接尾辞を有しているので、上で説明したグローバルRIDフォーマットを使用して容易に識別することができる。
【0115】
可視性属性の少なくとも1つの値に対して、制御回路は、現在のレルムが、所有者レルム、所有者レルムの子孫レルム、又は所有者レルムの親レルム(たとえば、親の可視性が上で説明したようにセットされる)以外のレルムのときに、不一致を判定することができる。いくつかのケースにおいて、可視性属性の少なくとも1つの値により、制御回路280は、どのレルムが現在のレルムであるかにかかわらず(たとえば、グローバルな可視性ビットがセットされる場合)、第2の比較のマッチを判定することができる。したがって、一般に、レルム識別子に基づく第2の比較は、通過させる必要があるが、厳密にどの要求が現在のレルムのGRIDによって満足されることになるかは、可視性ビット272によるであろう。子レルムを初期化した親レルムのレルム識別子に対応するビット部分を含む子レルムのレルム識別子を作成することにより、こうした部分的マッチが効率的に実行できるようになる。グローバル・レルム識別子の様々な可変長ビット部分を、様々な世代のレルムに割り当てる可変割り当てをサポートする実装形態において、TLBエントリ260はまた、GRIDを形成するために連結される異なるローカルRID間の境界の位置を識別する(親レルムを祖父母又はそれ以前の先祖レルムと区別できるようにするために)いくつかの情報を指定することができる。これにより、TLB制御回路280が、レルム識別子のどの部分をマスクすべきか判定することができるようになる。他の実装形態に対しては、これは必要でないかもしれない(たとえば、任意の先祖はメモリ領域にアクセスすることが許されているが、そのレルムに対しては所有者レルムが親レルムに可視性をすでに与えている場合)。また、いくつかの実装形態では、個々のグローバル・レルム識別子が固定数ビット(32ビットなど)を持った状態の固定したマッピングを有する場合があり、このケースでは、任意の追加的な境界定義データを提供する必要はないであろう。
【0116】
図27は、様々な例外レベルにおいて処理要素8がアクセス可能なアーキテクチャの状態の一実例を表すベン図である。図27は、英国ケンブリッジのARM(登録商標)社によって提供されたARM(登録商標)に基づく一実例を表すが、他の実装形態は、所与のプロセスと関連付けられた様々な状態を有してもよい他のアーキテクチャに基づいてもよい。また、図27は、簡単にするために一実例として使用される、各例外レベルでアクセス可能な状態のサブセットを表しているだけであるが、図27には示していない他のレジスタもアクセス可能であることを理解されたい。
【0117】
例外レベルEL0で動作するとき、処理要素8は、たとえば以下を含む、350と名付けられたアーキテクチャの状態のサブセットにアクセスする。
・データ処理動作中に汎用データ値を記憶するための、整数レジスタ、浮動小数点レジスタ及び/又はベクトル・レジスタを含む汎用レジスタ。
・プログラム実行中に、現在の実行点を表すプログラム命令アドレスを記憶するプログラム・カウンタ(PC)・レジスタ。
・例外レベルEL0で実行されたプロセスからある例外が除去されたときの、プロセッサの現在の状態についての情報を記憶するために使用される、保存されたプロセッサ状態レジスタ(SPSR_EL0)。SPSRは、たとえば、例外が発生したときの現在のプロセッサ・モードを表すPSTATE値といった、現在のプロセッサ状態についての情報を含むことができる。プロセッサ・モードは、どの命令セットが実行されたかといった他の情報だけでなく例外レベルも指定することができる。また、SPSRレジスタは、以下で説明するレルム・エントリを制御するために使用されるレルム・エントリ・フラグRを含むことができる。
・いったん例外が取り扱われるとELRは処理が分岐すべき復帰アドレスを提供できるように、例外が取り除かれたときの現在のプログラム・カウンタ値を記憶するために使用される例外リンク・レジスタELR_EL0。
・レルム・エントリが作成される子レルムのローカルRIDを記憶するために使用されるレルム識別子レジスタRID_EL0(以下で説明するようにサブレルムを作成する機能に関して、たとえ例外レベルEL0が、最も低く、特権が最低の例外レベルであっても、例外レベルEL0で動作するプロセスから、依然としてレルムを入力することができる)。
・発生した例外についての情報を記憶するためにEL0によって使用される例外状態レジスタ(ESR)(たとえば、適切な例外ハンドラの選択を可能とするため)。
【0118】
プロセッサ8が、例外レベルEL1で動作するとき、例外レベルEL0でアクセス可能な状態350のすべてを含む状態352のサブセットにアクセスするが、追加のアーキテクチャの状態を含むこともできる。たとえば、EL1において、こうしたレジスタのEL0バージョンに対応した目標のために、EL1におけるプロセス動作によって使用されるSPSR、ELR、ESR及びRIDレジスタの横一列に並べたバージョンが存在する。SPSR_EL1レジスタは、PSTATE及びR値に加えて、以下で説明するようにネストされたレルム・エントリ中で使用され出ていく中間レルム・フラグ割り込みを含むこともできる。図27は、中間レルム・フラグがSPSR内で記憶されている場所の一実例を表すが、これは重要ではなく、他の実例ではフラグを異なるレジスタに記憶することができる。EL1ではアクセスできるがEL0ではアクセスできない状態の別の実例は、ページ・テーブル・ウォーク中にMMUによって使用されるステージ1のページ・テーブル120-1のベース・アドレスを示すアドレスを提供する、変換テーブル・ベースのレジスタTTBR_EL1であろう。
【0119】
同じく、例外レベルEL2で命令を実行するとき、処理要素8は、EL1でアクセス可能なすべての状態352を含む状態354のサブセットにアクセスするが、EL2及びステージ2の変換テーブル120-2のベース・アドレスを提供する仮想変換テーブル・ベースのレジスタVTTBR_EL2のためのSPSR、ELR及びRIDレジスタのさらに横一列に並べられたバージョンといった追加の状態も含む。
【0120】
最後に、EL3で動作するとき、処理要素はEL2でアクセス可能なサブセット354のすべてを含む状態356のサブセットにアクセスするが、レルムを入力するために例外レベルEL3で動作するプロセスによって使用される、さらなるレルム識別子レジスタRID_EL3といった他の状態、及び、より低い例外レベルに使用される対応したレジスタに類似したさらなる例外取扱いレジスタELR、SPSR、ESRも含むことができる。この場合も、図27は単なる実例であり、他の状態も特定の例外レベルがアクセス可能な適切なサブセットに含むことができる。
【0121】
したがって、各例外レベルは、ソフトウェア・プロセスをその例外レベルで処理するとき、処理回路がアクセス可能な対応するレジスタのグループと関連付けられている。最低の特権を有する例外レベル以外の所与の例外レベルに対して、所与の例外レベルでアクセス可能なレジスタのグループは、所与の例外レベルよりも低い特権を有する例外レベルでアクセス可能なレジスタのグループを含む。特定のレベルがアクセスできるこの状態の階層は、以下で説明するように、レルム・エントリ及び退出に関する状態の保存及び復元と関連付けられたオーバーヘッドを削減するために利用することができる。
【0122】
レルムとの間のエントリと退出に関して、処理要素8及び/又はRMU20は、レルム・エントリ又は退出の安全な取り扱いを保証するために、いくつかの動作を実行する必要がある。たとえば、レルム・エントリに際して、目標レルムが正しいライフサイクル状態にあることをチェックするために(たとえば、セキュリティ手段が、存在しないレルム又は所有されたページからのデータ消去を経ていないレルム入力を試みることによって回避されることを防止するために)、いくつかのチェックを実行する必要がある。また、レルムから出るに際して、より高い特権を有するレベルのプロセスが、より低い特権のレベルでレルムによって使用される状態データにアクセスできないように(本来であれば、レルム保護によって提供されるセキュリティ手段が回避されることが可能となる)、処理要素のレジスタに記憶されたアーキテクチャの状態をマスク化するのが望ましいであろう。レルム・エントリ及び退出を取り扱うための1つの手法は、RMU20をトリガしてレルムの入力又は退出のための適切な動作を実行させる専用のレルム・エントリ又は退出命令を提供することであろう。しかし、これには、新しい命令を使用するため、既存のソフトウェアをかなり変更する必要があろう。
【0123】
以下で説明する技術において、レルム機構はレルムに入力し退出するために、例外エントリ及び戻しのためにすでに提供された仕組みを再利用する。これにより、レルム・エントリ及び退出をサポートするのに必要なソフトウェアを変更する量が削減され、アーキテクチャ及びハードウェアが単純になる。これは特に有用である。というのは、レルム境界はともかくも例外レベルの境界と一致することが多く、たとえ、新しい命令がエントリ及び退出を制御するために提供されたとしても例外を取り扱うための振る舞いはなお必要であろうし、そのため、例外機構を拡張してエントリ及び退出をさらに制御しても、全体的に費用は安くなるであろう。
【0124】
したがって、現在のレルムで処理された例外から現在のレルム(ここでは、他のプロセスも同一の例外レベル、又はそれよりも低い特権を有する例外レベルで取り扱うことができる)で同様に処理された別のプロセスへ処理を通常戻す、例外リターン(ERET)命令は、現在のレルムから宛先レルムへレルム・エントリをトリガするために再使用することができる。例外リターン命令の第1の変形体に応答して、処理回路は、現在の例外レベルからより低い特権を有する例外レベルへ(レルムを変更することなく)処理を切り替えることができ、一方、例外リターン命令の第2の変形体に応答して、処理回路は、現在のレルムから、現在のレルムと同じ例外レベル又はそれよりも低い(より低い特権を有する)例外レベルで動作することができる宛先レルムへ処理を切り替えることができる。例外リターン命令を使用してレルム・エントリをトリガすることにより、アーキテクチャ及びハードウェアのオーバーヘッドを大いに単純化し、レルムの使用をサポートするためのソフトウェア変更要求を削減することができる。
【0125】
例外リターン命令を使用する別の利点は、典型的には例外から戻る際に、処理回路が例外リターン命令に応答して微細な1組の動作を実行することができることである。例外から戻る際に必要となる1組の動作は、これらの動作中ずっと途中で分割できないように微細に実行することが可能であり、そのため、命令が失敗し微細な1組の動作のどれもが実行されないか、命令が首尾よく実行され微細な1組の動作のすべてが実行されるかのどちらかである。例外リターン命令の第2の変形体に対して、処理回路は、第1の微細な1組の動作とは異なる第2の微細な1組の動作を同様に実行することができる。例外リターン命令が微細に完了するのを保証するために、プロセッサにすでに提供された機構は、レルム・エントリが部分的に実行されるだけの、セキュリティの脆弱性につながり得る状況を避けるために、レルム・エントリに再使用することができる。たとえば、第2の微細な動作の組は、レルム実行コンテキスト状態を利用可能とし、実行されている現在のレルムを変更し、前回同一のレルムが実行されたとき、処理が以前に実行されたプログラム・カウンタ・アドレスへの分岐を制御することを含むことができる。
【0126】
例外リターン命令の第1及び第2の変形体は、同一の命令符号化を有してもよい。したがって、例外リターン命令それ自体の変更は、レルム・エントリをトリガするためには必要ではない。これにより、レガシー・コードとの互換性が向上する。所与の例外リターン命令が、第1の変形体又は第2の変形体に従って実行されるかどうかは、その命令が状態レジスタに記憶した制御値によって決まる(たとえば、制御値の第1及び第2の値は、それぞれ例外リターン命令の第1及び第2の変形体を表すことができる)。したがって、例外リターン命令が実行されるとき、現在のアーキテクチャの状態が、プロセッサを同じレルム内のより低い特権レベルに戻すか、それとも新しいレルムへエントリをトリガするか制御する。
【0127】
この手法により、特に、状態レジスタの値が、レルム・スイッチは適当であることを示す一定のイベントに応答して、(ソフトウェア命令に応答して制御値を任意に設定できることに加えて)ハードウェアによって自動的にセットすることができるので、レルム・エントリをより少ないソフトウェア変更で制御できるようになる。たとえば、所与のレルムへの退出をトリガする例外状態が発生したとき、処理回路は制御値を所与のレルム用の第2の値にセットし、それにより、たとえ、例外を取り扱うための例外ハンドラ・コードがレルムを念頭に置いて書かれたものではない以前のレガシー・コードと全く同一だとしても、後続の例外リターン命令は自動的に処理を例外が発生したレルムに戻す。或いは、いくつかのアーキテクチャでは、レルムから退出するとき、状態レジスタの制御値は依然として、そのレルムにレルム・エントリをトリガする前にセットされた第2の値を含み、そのため、制御値を状態レジスタに明確にセットすることは必要ないということが期待できるであろう。
【0128】
一実例において、状態レジスタの制御値は、上で説明したように現在の例外レベルと関連付けられたSPSRレジスタのRフラグとしてよい。SPSRレジスタは、プロセッサ・モード(例外レベルを含む)、及び、現在処理中の例外からの戻りに際して、処理はいかに継続するかに関する他の情報を提供するために、例外戻りに際して通常使用されるので、SPSRを使用することは有益となるであろう。しかし、レルム・エントリのために、この情報はむしろレルム実行コンテキスト(REC)から決定することができ、そのためSPSRは必要ないであろう。例外リターン命令が、第1又は第2の変形体として取り扱かわれるかどうかを制御するRフラグを記憶するために、SPSRの一部を再利用することにより、この情報を記憶するために追加のレジスタを提供する必要は避けられる。したがって、ERET命令の第1の変形体に応答して、より低い特権を有する例外レベルで例外を継続するために、(処理モードといった)戻し状態情報を決定するために使用される状態レジスタを使用することは有用であり得るが、例外リターン命令の第2の変形体に応答して、この戻し状態情報は代わりにメモリから決定されるので、状態レジスタそれ自体にアクセスする必要はない。特に、制御値を記憶するのに使用される状態レジスタは、例外リターン命令がそこから実行される現在の例外レベルと関連付けられた状態レジスタとすることができる。
【0129】
図27に表すように、少なくとも1つのレルム識別子レジスタが設けられ、例外リターン命令の第2の変形体に応答して、処理回路は、レルム識別子レジスタに記憶されたレルム識別子から宛先レルムを識別することができる。それぞれが例外レベルの1つと関連付けられた多くのレルム識別子レジスタが存在できるように、レルム識別子レジスタは横一列に並べることができ、例外リターン命令の第2の変形体に応答して、処理回路は、現在の例外レベルと関連付けられたレルム識別子レジスタに記憶されたレルム識別子から宛先レルムを識別することができる。レルム識別子レジスタを使用して目標レルム識別子を記憶することにより、これをERET命令の命令符号化に含む必要はなく、これにより、既存のERET命令のフォーマットを、レルム・エントリをトリガするために使用することができ、その結果、必要なソフトウェア変更の量が削減される。レルム識別子レジスタのレルム識別子は、親レルムによってその子レルムを参照するために使用されるローカル・レルム識別子とすることができ、そのため、レルム・エントリは親レルムから子レルムへの通過に限定することができ、第1のレルムから、第1のレルムの直接の子ではない別のレルムへ行くことは可能ではない。例外リターン命令の第2の変形体に応答して、処理回路は、RIDレジスタで識別されたレルムIDと関連付けられたレルムが無効なレルム(それに対してレルム記述子が定義されていない、又はレルム記述子がアクティブ以外のライフサイクル状態を定義しているRID)であるとき、障害状態をトリガすることができる。
【0130】
例外リターン命令の第2の変形体に応答して、処理回路は、例外リターン命令のために指定されたレルム実行コンテキスト(REC:Realm Execution Context)メモリ領域から、宛先レルムで処理されるスレッドと関連付けられたアーキテクチャの状態を記憶することができる。状態復元は、例外リターン命令の第2の変形体に応答して、直ちに実行することができ(たとえば、微細な1組の動作の一部として)、又は、後に実行することもできる。たとえば、状態復元はゆっくりとした方法で実行することができ、その結果、宛先レルムで処理を開始するために必要な状態は直ちに復元することができるが(たとえば、プログラム・カウンタ、処理モード情報など)、汎用レジスタなど他の状態は、後に必要なとき、又は新しいレルムの進行中の処理のバックグラウンドで徐々に復元することができる。したがって、処理回路は、すべての必要なアーキテクチャの状態がRECメモリ領域から復元される前に、宛先レルムの処理を開始することができる。
【0131】
例外リターン命令の第1の変形体に応答して、処理回路は、リンク・レジスタに記憶されたプログラム命令アドレスへ分岐することができる。たとえば、これは、例外リターン命令が実行される現在の例外レベルに対応する図27のELRとすることができる。対照的に、例外リターン命令の第2の変形体に対して、処理回路は、レルム実行コンテキスト(REC)メモリ領域で指定されるプログラム命令アドレスへ分岐することができる。したがって、リンク・レジスタは、例外リターン命令の第2の変形体が、新しいレルムに対して任意のアーキテクチャの状態を直接識別するためには使用されないので、リンク・レジスタは、代わりにポインタを、そこから新しいレルムのアーキテクチャの状態が復元されるRECメモリ領域へ提供するために再使用することができる。これにより、RECポインタを復元するためにさらなるレジスタを提供する必要が避けられる。
【0132】
したがって、所与のレルムにレルム・エントリを引き起こさせることを意図した例外リターン命令を実行する前に、RIDレジスタを宛先レルムのレルム識別子にセットし、宛先レルムと関連付けられたRECメモリ領域のポインタを記憶するためのリンク・レジスタをセットするために、いくつかの追加の命令を含むことができる。RECポインタは、宛先レルムのレルム記述子から親レルムによって入手可能である。
【0133】
例外リターン命令の第2の変形体に応答して、RECメモリ領域が宛先レルム以外の所有者レルムと関連付けられるか、例外リターン命令に対して指定されたRECメモリ領域が無効なとき、障害状態を処理回路によってトリガすることができる。第1のチェックは、親レルムが子レルムを欺いて子レルム自体が作成したものではないプロセッサ状態を実行させることを防止する。というのは、子レルムによって所有されたメモリ領域のみが、そのレルムを入力する際にアクセス可能なRECメモリ領域を記憶することができるからである(上で説明したように、RECメモリ領域はRMUプライベートとしてセットされる)。RECメモリ領域の有効性の第2のチェックは、RECメモリ領域はレルムを入力するために一度だけ使用することができ、その後、同一のRECデータでレルムを入力しようとする後続の試みは拒否されるであろうということを保証するのに有用であろう。たとえば、各RECは、無効か有効であるライフサイクル状態を有しているであろう。現在のレルムで所与のスレッドの処理中に発生する例外に応答して、そのスレッドのアーキテクチャの状態は対応するRECメモリ領域に保存され、その対応するRECメモリ領域は、次いで無効から有効へ移行することができる。例外リターン命令の第2の変形体を首尾よく実行したことに応答して、RECメモリ領域は次いで有効から無効へ逆に移行することができる。これにより、親レルムが悪意を持って子レルムに、期限切れのRECメモリ領域のポインタ、異なるスレッドと関連付けられたRECメモリ領域、又は宛先レルムと関連付けられてはいるが、レルムからの前回の退出時にアーキテクチャの状態を記憶するために使用された正しいものではないいくつかの他のRECを指定することにより、不正に振る舞わせることが避けられる。
【0134】
対応する方法において、レルムからの退出は、例外取扱いのために提供された機構を再使用することができる。したがって、第1のレルムによって取り扱うことができない第1のレルムの処理中に発生した例外状態に応答して、処理回路は、第1のレルムを初期化した親レルムへレルム退出をトリガすることができる。例外発生/レルム退出に際して、同一のレルム内で取り扱いが可能な例外発生に対しては実行できないいくつかの追加的な動作を実行することができる。たとえば、これにはアーキテクチャの状態のマスク化又は消去、及び、以下でより詳細に説明するように、RECに対して状態ストレージをトリガすることが含まれる。
【0135】
しかし、いくつかのケースにおいて、例外が発生する第1のレルムの親レルムによって取り扱うことができない例外が発生する場合がある。したがって、この場合には、親を超えてさらなる先祖レルムへ切り替えることが必要となろう。所与のレルムから2世代以上古い先祖レルムへ直接切り替える機能を提供することは可能かもしれないが、これにより、例外エントリ及び戻し又はレルム退出及びエントリを取り扱うために必要な状態レジスタの複雑性が増大するであろう。
【0136】
むしろ、第1のレルムの親レルムが処理できる最も高い特権を有する例外レベルというよりは、より高い特権レベルを有する目標例外レベルで例外状態が処理されるとき、ネストされたレルム退出を実行することができる。ネストされたレルム退出には、発生した例外の目標例外レベルで処理することができる第2のレルムに到達するまで、子レルムから親レルムへの2つ以上の連続したレルム退出が含まれる。したがって、一度に一段階ずつレルム階層を上げることにより、アーキテクチャを単純化することができる。それぞれの連続するレルム退出において、プロセッサ状態のサブセットを対応するレルムと関連付けられたRECに保存するように実行する動作が存在する場合がある。
【0137】
例外が取り扱われると、次に、ネストされたレルム退出に続く第2のレルムにおいて実行される第2の変形体の例外リターン命令に応答して、処理回路は、次いで、ネストされたレルム・エントリをトリガして第1のレルムに戻させる。これは様々な方法で取り扱うことができる。いくつかの実例において、ハードウェアは、何等の命令を必要とすることなくネストされたレルム・エントリそれ自体をトリガして、ネストされたレルム退出中に第1のレルムと第2のレルムの間で遭遇した任意の中間レルムで実行する。或いは、ハードウェアは、ネストされたレルム退出中に遭遇した連続したそれぞれのレルムに戻るネストされたレルム・エントリ・プロセスを、一度に一段階ずつ提供することにより単純化することができ、それぞれの中間レルムにおいて第2の変形体のさらなるERET命令を実行する。この場合、中間レルムが、ネストされたレルム退出中に、そこから中間レルムへのレルム退出がなされる中間レルムの子レルムへの戻りをトリガすることを保証するために、所定のタイプの例外状態が子レルムで発生したことを示す例外状態レジスタをセットすることができる。たとえば、新しいタイプの例外状態(たとえば、「偽のレルム退出」)をこの中間レルムのケースを取り扱うために定義することができる。したがって、プロセッサは、中間レルムに到達すると、次に、所定のタイプの例外状態を取り扱うための例外取り扱いルーチンに対応するプログラム命令アドレスから、中間レルム内で処理を再開することができる。この例外取り扱いルーチンは、たとえば、子レルムがある未知の理由で退出したと単純に判定することができ、次に、処理をさらなる子レルムへ戻すために、第2の変形体の別の例外リターン命令を実行するために選択することができる。各中間レルムでこれを実行することにより、最終的には、元の例外が発生した元の第1のレルムは処理を再開することができる。
【0138】
このネストされたレルム・エントリ及び退出手順中に、状態レジスタ内の中間レルム・フラグは、どちらのレルムが中間レルムであるかフラグを立て、適切な子レルムに対してハードウェアによって引き起こされる中間レルム・エントリをトリガするか、又は、子レルムに戻すために、次に例外ハンドラ若しくは中間レルム内の他のコードをトリガする例外状態情報の設定をトリガするために使用することができる。たとえば、中間レルム・フラグは、図27で説明した適切なSPSR内の割り込みフラグとすることができる。
【0139】
図28は、レルム・エントリ又は例外戻しを取り扱う方法を示す流れ図である。ステップ400において、現在の例外レベルがELxのとき、例外リターン(ERET:Exception Return)命令が実行される。ELxは、処理回路によってサポートされる任意の例外レベルとすることができる。最低の特権を有する例外レベルEL0からは例外戻しが発生するとは期待しないかもしれないが、サブレルムを作成する機能は、以下で説明するように、同じくEL0で実行されたサブレルムへ入力をトリガするために、EL0から実行されるERET命令が依然として存在し得るということを意味する。また、いくつかのタイプの例外は、例外が発生するレベルと同じ例外レベルで取り扱うことができ、この場合、例外戻しは依然としてEL0から発生する。
【0140】
ステップ402において、処理要素は、例外レベルELxと関連付けられたSPSR内のレルム・フラグRの現在値を判定する。レルム・フラグRが0のとき、これは異なるレルムを入力することのない従来の例外戻しを示す。ステップ404において、処理要素8は、SPSR_ELx内のPSTATE値に基づいて、後続の例外戻しを動作させる目標例外レベルを決定し、リンク・レジスタELR_ELxを形成するために分岐するためのプログラム・カウンタ値を決定する。新しい目標例外レベル及びプログラム・カウンタ値及び例外に続く処理への戻しと関連付けられた任意の他の戻し状態は、目標例外レベル(これは例外レベルELxよりも低い特権を有するより低い例外レベルであることが多いが、同じ例外レベルELxでもあり得る)と関連付けられた適切なアーキテクチャの状態レジスタへ復元される。こうした戻り状態動作は微細に行われる。次いで、ステップ406において、処理は目標例外レベルで再開するが、ERET命令が実行されたレルムと同じレルム内に留まる。
【0141】
ステップ402において、レルム・フラグRが1にセットされると、これはレルム・エントリを示し、そのため、これは従来の例外戻しのために実行されるセットとは異なる1組の第2の微細な動作をトリガする。ステップ408において、処理要素は、レルム管理ユニットをトリガしていくつかのレルム・チェックを行う。これには以下のチェックが含まれる。
・例外レベルELxと関連付けられたレルム識別子レジスタRID_ELx内で示されたローカルRIDは有効な子レルムを示す。すなわち、RMUは、指定された子レルムのためにレルム記述子ツリー360からアクセスされるレルム記述子をチェックし、子レルムのレルム記述子のライフサイクル状態がアクティブ状態を示しているかどうかチェックする。子レルムがアクティブ状態以外の任意の状態であれば、レルム・チェックは不成功である。
・RMU20はまた、リンク・レジスタELR_ELxのポインタによって示されるRECメモリ領域は、レルムIDレジスタRID_ELxで示される子レルムによって所有されるメモリ領域であるということをチェックする。すなわち、RMU20は、レルム・グラニュール・テーブル128(又はRGT128からキャッシュ化された情報)にアクセスし、RECポインタで示されたメモリ領域に対応する適切なエントリを捜し出し、そのメモリ領域に対して指定された所有者レルムをチェックする。所有権テーブル内で示された所有者レルムは、グローバルRIDとして指定することができ、これは、目標子レルムのレルム記述子で指定されたグローバルRIDと比較されて、子レルムがRECの有効な所有者かどうか判定される。RECが、RIDレジスタで指定された子レルム以外の任意のレルムによって所有されている場合、このチェックは不成功である。
・RMU20はまた、ELR_ELxで定義されたRECメモリ領域の状態が有効かどうかチェックする。RECメモリ領域の有効性を表すことができる様々な方法がある。たとえば、各RECメモリ領域は、それが有効かどうかを述べるフラグを含むことができる。或いは、別々のテーブルは、他のメモリ領域に記憶されたRECの有効性を定義することができる。RECは、それが前の例外戻しに際して関連したレルムのアーキテクチャの状態を記憶するために使用されてきたが、例外からの戻しに続いて状態を復元するためにまだ使用されていない場合、有効とすることができる。RECが無効な場合、やはりレルム・チェックは不成功である。
・RMU20はまた、フラッシュ・コマンドが、RIDレジスタRID_ELxで示された子レルム以外の任意の子レルムから、前回の退出以降に実行されたかどうかチェックする。フラッシュ・コマンドは以下でより詳細に説明するが、子レルムのRECに依然として保存される任意の状態はメモリにプッシュされるということを保証するためのコマンドである(これは、ゆっくりとした状態の保存手法をサポートする)。フラッシュ・コマンドが実行されず、システムが、異なる子レルムを以前に退出された子レルムに入力しようとする場合、まだメモリにプッシュされていないプロセッサ・レジスタ内に残された状態がなお存在し得るという危険性がある。フラッシュ・コマンドの使用を強要することにより、異なる子レルムは、以前の子レルムの状態を失う(又は他のレルムへ漏洩する)ことなく安全に入力できることが保証される。たとえば、いくつかの状態フラグを使用して、(a)前回のレルム退出以降にRIDレジスタRID_ELxに変更があったかどうか、及び(b)前回のレルム退出以降にフラッシュ・コマンドが実行されたかどうかを追跡することができる。前回のレルム退出以降にRIDレジスタの変更が存在し、フラッシュ・コマンドが実行されなかった場合、レルム・チェックが不成功となるであろう。
【0142】
任意のレルム・チェックが不成功な場合、ステップ409において障害がトリガされ、システムは、ERET命令と関連付けられた現在のレルム内に留まる。したがって、すべてのレルム・チェックが成功しない限り子レルムに到着するのは不可能である。
【0143】
すべてのレルム・チェックが成功した場合、ステップ410において処理要素は、レルムIDレジスタRID_ELxで示された子レルム内の処理に切り替える。たとえば、プロセッサは、現在のレルムのグローバルRIDを指定する内部レジスタを有することができる(この内部レジスタはソフトウェアには見えなくともよく、図27で表された横一列に並べられたRIDとは異なる)。子レルムへの切り替えは、新しい宛先レルムのグローバルRIDを内部RIDレジスタに書き込むことによって実施される。
【0144】
ステップ412において、新しいレルムと関連付けられた状態は、ELR_ELxレジスタのポインタによって示されたRECメモリ領域のメモリに保存された状態に基づいて使用可能になる。REC領域は新しい子レルムによって所有されているので、それは今やアクセス可能であり、そのため、プログラム・カウンタ及び目標例外レベルといった戻し状態情報はRECから入手することができる。この点において、アーキテクチャの状態の選択されたサブセットは、RECから復元することができ、又は、代替として、アーキテクチャの状態は、処理がすべての状態が完全に復元されなくても開始できるようにゆっくりと復元することができ、その結果、処理が新しいレルムから開始することができる前に遅延を削減することにより効率を向上させるために、状態は、必要に応じて、及び必要なとき、又はある期間にわたって徐々に復元することができる。
【0145】
ステップ414において、中間レルム・フラグ割り込みが、新しいレルムと関連付けられたSPSRにセットされているかどうか判定される。SPSRコンテンツは、RECからアーキテクチャの状態の残りと共に復元されるであろう。中間レルム・フラグがセットされていない場合、これは、新しいレルムは元の例外が発生したレルムであることを示し(又は、レルムは、いかなる前の例外がそのレルムで発生したことなしに、初めて入力されている)、そのため、任意のさらなるレルム・エントリを子レルムへトリガする必要はない。ステップ416において、プログラム・カウンタがRECから入手され、次いで、ステップ418において、処理はRECから入手された目標例外レベルで、新しいレルムにおいて継続する。
【0146】
或いは、中間レルム・フラグがセットされている場合、これは、ネストされたレルム退出が以前に発生し、ネストされたレルム・エントリが中間レルムに到達したことを示す。したがって、例外が最初に発生したレルムに戻るために、処理をさらなる子レルムへ戻す必要がある。これを取り扱うための2つの代替技術がある。第1の代替において、ステップ420において偽のレルム退出例外が除去され、そのため、新しいレルムと関連付けられた例外状態レジスタは、処理要素によりこのタイプの例外と関連付けられた状態コードへセットされ、次いで、処理は、例外ハンドラをトリガして処理させるこのタイプの例外と関連付けられた例外ベクトルへ分岐することができる。例外ハンドラはいかなる実際の処理を実行する必要はなく、所与の子レルムで発生した未知のタイプの例外を判定することができるだけであり、そのため、次にステップ422において別のERET命令をトリガして実行することができる。中間レルムと関連付けられたRID及びELRレジスタは、中間レルムが以前にさらなる子レルムを入力したとき、レジスタに配置された値を依然として有し、そのため、ERET命令の実行により、次に、さらなるレルム・エントリをさらなる子レルムにトリガする。この方法は、そのさらなるレルム・エントリに対してレルム・チェックが成功したかどうかチェックするために、ステップ408に戻ることができ、次いで、類似の方法でネストされたプロセスに以前のレルム・エントリを継続する。
【0147】
或いは、中間レルムで実行された別のERET命令を使用して、ネストされたレルム・エントリを取り扱う代わりに、ステップ424において、ハードウェアは、中間レルム・フラグが現在のレルムにセットされていることを検出し、次に、中間レルム内の任意の命令を実行する必要なしに、さらなるレルム・エントリを子レルムにトリガすることができる。次いで、この方法は次にステップ408に戻ることができる。
【0148】
図29は、レルムから退出する又は例外を除去する方法を示すフロー図を表す。ステップ430において、例外レベルELyを目標とする所与の例外レベルELx内で例外が発生する(ELy≧ELx)。目標例外レベルELyは、例外が取り扱われることとなる例外レベルである。目標例外レベルは、ELxと同じ、ELxよりも一例外レベルだけ高い、又は数例外レベル高いとすることができる。
【0149】
ステップ432において、RMUは、目標例外レベルELyは現在のレルムの境界例外レベル(BEL)(これは現在のレルムのレルム記述子から読み取ることができる)よりも大きいかどうか、及び、現在のレルムはサブレルムかどうかを判定する(以下のサブレルムの議論を参照されたい。図16に表したレルム記述子のタイプ・フィールドはレルムがサブレルムかどうか指定する)。目標例外レベルELyが境界例外レベルよりも大きくない場合、これは、例外は現在のレルム内で取り扱うことができ、したがって、現在のレルムが完全なレルムの場合、レルム退出をトリガする必要はないことを示す。このケースでは、ステップ434において、処理要素は現在の例外レベルをELyに切り替える(たとえば、現在の状態レジスタを更新することにより)、又は、ELx=ELyならば、現在の例外レベルはそのままである(どちらにしても、このときの現在の例外レベルはELyである)。ステップ436において、例外レベルELxと関連付けられた現在の処理状態は、目標例外レベルELyがアクセス可能なレジスタに保存される。たとえば、プログラム・カウンタは、リンク・レジスタELR_ELyに保存することができ、例外が発生した以前の例外レベルELxは、SPSR_ELyのPSTATE値で示すことができる。また、SPSR_ELyレジスタのレルム・フラグRは、例外が同じレルム内から来たことを示すために0にセットすることができる。発生した例外タイプについての情報も、例外状態レジスタESR_ELyに保存することができる。ステップ438において、処理要素は、指定された例外タイプと関連付けられた例外ベクトルへ分岐し、次いで、処理は例外を取り扱うために続行する。最終的に、例外取扱いが完了すると、ERET命令が実行されて図28について上で説明したように、以前の処理への戻しがトリガされる。
【0150】
他方、ステップ432において、目標例外レベルELyが現在のレルムのBELよりも大きかった場合、又は、現在のレルムがサブレルム(それに対して任意の例外がサブレルムの親レルムへの退出をトリガする)の場合、例外を取り扱うためにレルム退出が必要になる。ステップ440において、例外が自発的なレルム退出に対応するかどうか判定する。いくつかのタイプの例外は、ユーザが処理デバイスのボタンを押下する、又は何らかの障害が発生するといった予期せぬイベントによって、トリガされる場合がある。しかし、レルムが自発的に処理を断念し、親レルムに戻ることも可能である。たとえば、子レルムがある処理ルーチンの端部に到達したかもしれない、又は、より高い例外レベルである機能を呼び出す必要があるかもしれない。子レルムが親レルムに自発的に退出し、次いで、子レルムが親レルムとデータを共有できるようにするために、子レルムのいくつかのアーキテクチャの状態が、親レルムからのアクセスのために保持されており、その結果、意図しないレルム退出に比較してマスク化及び消去されるレルムがより少なくなることは有用であろう。たとえば、他の制御レジスタはなおマスク化及び消去が可能であるが、汎用レジスタはマスク化及び消去されなくともよい。これにより、状態がレジスタから直接アクセスできるようにデータをグローバルに可視性できるメモリ領域に記憶する必要が避けられ、効率性が向上する。すなわち、自発的なレルム退出の場合、子レルムはレルム退出を制御しており、そのため、子レルムは親レルムにとってアクセス可能とするべきではない可視性可能なアーキテクチャの状態をすでに上書きしており、親レルムと共有したい任意の状態をレジスタに残すと考えることができる。自発的なレルム退出は、たとえば、マスク化又は消去が実行されない特定のタイプの例外に対応する、例外をトリガする命令の所定の変形体によってトリガすることができる。
【0151】
レルム退出が自発的なレルム退出ではない場合、ステップ442において、アーキテクチャの状態の選択されたサブセットをマスク化することが実行される。マスク化により、隠されるべきアーキテクチャの状態は親レルムにとってアクセスできないようにすることを保証する。しかし、親レルムは依然として、そのアーキテクチャの状態を記憶するレジスタへのアクセスを試みるかもしれず、そのため、消去されたアーキテクチャ・レジスタへのいかなる後続のアクセスは、そのアーキテクチャ・レジスタと関連付けられた物理レジスタにどのような値が実際に記憶されるかにかかわらず、所定の値を戻すことを保証する、消去動作も実行することができる。すなわち、アーキテクチャの状態のマスク化されたサブセットの一部を記憶した所与のアーキテクチャ・レジスタに対して、レジスタ消去動作が実行されると、これは、所与のアーキテクチャ・レジスタに対する後続の読み取りアクセスは、それが処理回路により、レルム切り替えと後続の読み取りアクセスとの間で、そのアーキテクチャ・レジスタへの間に挟まれたいかなる書き込みアクセスなしに実行される場合、所定の値(たとえば0)を戻すことを保証する。レジスタ消去動作は様々な方法で実行することができる。たとえば、所与のアーキテクチャ・レジスタに対応する物理レジスタは、所定の値にセットすることができる(たとえば、0の値を物理レジスタに書き込みすることができる)。或いは、所与のアーキテクチャ・レジスタが第1の物理レジスタから第2の物理レジスタへ再マッピングされるように、レジスタ・リネーミングによりレジスタ消去を実行することができる。別の手法は、所与のアーキテクチャ・レジスタへの読み取りアクセスは、所定の値を戻すべきであるということを示すために、所与のアーキテクチャ・レジスタ又は所与のアーキテクチャ・レジスタにマッピングされた物理レジスタと関連付けられた状態値をセットすることである。これら最後の2つの手法を使用して、処理要素の物理レジスタ・ファイル内に、新しいレルムからアクセスできないにしてもマスク化されたアーキテクチャの状態を保持することは可能であり、その状態に対するいかなるアクセスも所定の値を戻すことになる。これは、以下で説明するように、ゆっくりとした状態の保存をサポートするのに有用である。いったん、マスク化及び消去動作が実行されると、ステップ444において、処理要素は、例外が発生した現在のレルムと関連付けられたRECメモリ領域に、アーキテクチャの状態のマスク化されたサブセットの保存をトリガする。この保存は直ちに、又は親レルムにおける後続の処理と重なり合ってゆっくりと行うことができる。どちらの手法が取られるかは、アーキテクチャの個々の実装形態次第であり、したがって、アーキテクチャの重要な特徴ではない。しかし、ゆっくりした状態保存は効率を向上させることができる。
【0152】
レルム退出が自発的なレルム退出であった場合、非自発的なレルム退出に対してマスク化/消去される少なくともいくつかの状態は、自発的なレルム退出に対してマスク化/消去される必要がないことを除いて、ステップ443において、アーキテクチャの状態の縮小されたサブセットが、ステップ442におけるのと同じ方法でマスク化され、消去される。たとえば、アーキテクチャの状態の縮小されたサブセットは、汎用レジスタを除外することができる。ステップ443に続いて、上で説明したように、この方法は非自発的なレルム退出のためのステップ444へ継続する。
【0153】
レルム退出が自発的か非自発的かにかかわらず、ステップ446において、処理要素は親レルムへ切り替える。子レルムの例外レベルと関連付けられ、親レルムの例外レベルによって制御されるRID_ELxレジスタ及びELR_ELxレジスタは、以前に退出した子レルムのRIDポインタ及びRECポインタに依然としてセットされているので(というのは、これらは、最初の段階で子レルムを入力するためにERET命令が実行される前にセットされたであろうため)、この状態に適合させる必要はなく、その結果、任意の後続のERET命令は前の通り同じ子レルムへ戻るであろう。親レルムが前回退出した子レルムから異なる子レルムへ切り替えることを望む場合、こうしたレジスタを更新する必要があるだけである。同様に、親レルムのSPSR内のレルム・フラグRは、以前のレルム・エントリに続いて1にセットすることができ、それによりこの値を保持することができ、その結果、Rフラグが親レルムで実行される命令によって0にクリヤされない限り、ERET命令は引き続き新しいレルムへのエントリとして扱われることになろう。
【0154】
ステップ448において、RMUは、目標例外レベルELyが、処理が切り替えられる先の新しい親レルムのBELよりも大きいかどうか判定する。大きくない場合は、これは、例外は親レルムに取り込むことができることを示し、ステップ450において、処理要素8は、発生した例外のタイプを取り扱うのに適切な対応する例外ハンドラへ分岐する。目標例外レベルが親レルムのBELよりも高い場合、さらなる先祖レルムへ分岐するためにネストされたレルム退出が必要とされ、そのため、ステップ452において、親レルムと関連付けられた中間レルム・フラグがSPSR内で1にセットされ、次いで、この方法はステップ442に戻り、そのレルムと関連付けられたアーキテクチャの状態のマスク化及び消去をトリガする(今回は、レルム退出は親レルムの制御外でトリガされたので自発的なレルム退出ではない)。次いで、この方法は、再度ループして現在のレルムと関連付けられた任意の適切な状態をマスク化又は消去し、次に、そのレルムの親レルムへ切り替える。ネストされたレルム退出は、最終的には例外を取り扱うことができるレルムに到達するまで、数回ループすることができる。
【0155】
ステップ412,442,444において、レルムからの退出時にマスク化され、消去され、及び保存され、並びに、レルムへのエントリ時に復元されるアーキテクチャの状態のサブセットは、退出され/入力されたレルムの境界例外レベルによって決まることができる。ネストされないレルム退出及びエントリの場合、選択されたサブセットは、たとえば図27で示すように、例外が発生した例外レベルがアクセス可能なアーキテクチャの状態のサブセットを含むことができる。したがって、各例外レベルは一群のレジスタと関連付けられており、所与のレルムの境界例外レベルよりもより特権を有する例外レベルにおいて、例外ハンドラによって取り扱われることになる所与のレルムの処理中に発生するレルム退出例外状態に応答して、レジスタのサブセットは、所与のレルムの境界例外レベルに応じて選択することができ、その例外レベルでソフトウェア・プロセスを処理するとき処理回路がアクセス可能なレジスタを含むことができる。例外がEL1又はこれよりも高い例外レベルで発生すると、これは、ネストされないレルム退出のための任意のより低い例外レベルだけでなく、その例外レベルがアクセス可能なすべてのレジスタを含むことができる。同様に、レルムに戻ると、アーキテクチャの状態の対応するサブセットが復元される。
【0156】
しかし、ネストされたレルム退出の場合、中間レルムに対して、中間レルムの境界例外レベルよりも低い例外レベルでアクセス可能な任意のレジスタは、中間レルムが子レルムへの入力をトリガしたので、より低い例外レベルで子レルムによって変更されたであろうと考えることができる。したがって、ネストされたレルム退出中に、中間レルムと関連付けられたRECへより低い例外レベルでアクセス可能なこうしたレジスタを、保存する必要はないであろう(以前に子レルムを入力して以降、中間レルムにおいてさらなる実行は発生していない)。逆に、ネストされたレルム・エントリ中に、中間レルムの通過中により低いレベルでアクセス可能なこうしたレジスタを復元する必要はない、というのは、こうしたレジスタはその後、より低い例外レベルでレルムによって復元されるからである。代わりに、中間レルム状態保存及び復元は、中間レルムの境界例外レベルがアクセス可能なレジスタを単純に含むことができるが、より低い例外レベルではアクセスできない。たとえば、中間レルムがEL1にある場合、ネストされたレルム退出/エントリ中に保存/復元された状態は、図27のサブセット352を含むことができるが、EL0でアクセス可能なサブセット350を除外することができる。中間レルムがEL2にある場合、ネストされたレルム退出/エントリ中の状態の保存/復元されたサブセットは、EL2でアクセス可能なサブセット354を含むことができるが、EL1でアクセス可能なサブセット352を除外する。この手法により、中間レルムを通過する際に必要とされる状態保存及び復元の量が削減されて、効率を向上させることができる。
【0157】
したがって、例外状態が、例外が発生する所与のレルムの親レルムの境界例外レベルよりもより大きな特権を有する目標例外レベルで、例外ハンドラによって処理されるとき、目標例外レベル又はそれよりも高いレベルに対応する境界例外レベルを有する目標レルムに到達するまで、子レルムから親レルムへ多数の連続的なレルム退出を含むネストされたレルム退出をトリガすることができる。それぞれの状態マスク化プロセス(及び状態保存)は、連続するレルム退出のそれぞれに対してトリガすることができ、それぞれの状態マスク化プロセスのおのおのは、境界例外レベルに基づいて選択された対応するレジスタのサブセットをマスク化(及び保存)することができる。最低の特権を有する例外レベル以外の境界例外レベルを有する所与の子レルムからのレルム退出に対して、ネストされたレルム退出中にマスク化/保存されたレジスタの対応したサブセットは、所与の子レルムの境界例外レベルにおいて、アクセス可能な少なくとも1つのレジスタを含むことができる、しかし、所与の子レルムの境界例外レベルよりも低い特権を有する例外レベルにおいて、処理回路がアクセス可能な少なくとも1つのレジスタを除外することができる(こうしたレジスタは、そのより低い特権を有する例外レベルでレルムを退出するとき、すでに保存されているであろうと考えることができるので)。これにより、必要な状態マスク化及び保存動作の量が削減される。
【0158】
同様に、レルム・エントリ(例外戻し)に際して、中間レルム・フラグを使用して、入力されたレルムが中間レルムかどうか判定する。最低の特権を有する例外レベル以外の境界例外レベルを有するレルムのための中間レルム状態値が、所定の値(中間レルムを表す)にセットされると、レルム・エントリに際して復元されるレジスタのサブセットは、中間レルムの境界例外レベルにおいてアクセス可能な少なくとも1つのレジスタを含むことができるが、特定のレルムの境界例外レベルよりも低い特権を有する例外レベルにおいて、処理回路がアクセス可能な少なくとも1つのレジスタを除外することができる。中間状態値が所定の値以外の値にセットされると、入力されているこのレルムは最後のレルムであり、そのため、アクセスされた復元されるレジスタのサブセットは、特定のレルムの境界例外レベルにおいて処理回路がアクセス可能なすべてのレジスタを含むことができる(より低いレベルからのいかなるレジスタを除外することなく)。
【0159】
このようにして、ネストされたレルム退出及びエントリ中に、状態保存及び復元動作をより効率的に行うことができる。
【0160】
図30は、ネストされないレルム・エントリ及び退出の一実例を示す。この実例において、親レルムAは例外レベルEL1における動作であり、それはEL0のBELを有する子レルムBを入力することを望んでいる。明らかに、類似のレルム・エントリ及び退出手順は他の例外レベルで実行することができる。ステップ460において、親レルムは、レルム識別子レジスタRID_EL1を子レルムBのローカル・レルムIDにセットする。ローカルRIDは、上で説明したように、ツリー索引を連結することにより得られるフォーマットを有する。ステップ462において、EL1の親レルムは、リンク・レジスタELR_EL1を、ポインタをレルムBのレルム実行コンテキストに提供するアドレスにセットする。親レルムは、このポインタを所望の子レルムBのレルム記述子から入手する。ステップ464において、親レルムは、SPSR_EL1のレルム・フラグを1にセットする。ステップ466において、親レルムは、次に、ERET命令を実行し、これは、レルム・フラグが1にセットされているので、レルム・エントリをトリガすると解釈される。図28のステップ408において上で説明した様々なレルム・チェックが実行され、チェックが成功した場合、レルム・エントリが実行されレルムBに切り替える。ステップ468において、リンク・レジスタで示されたRECから状態が復元される。この状態は、新しいレルムが実行されることになる目標例外レベルを含む。RECがアクセスされる時点において、プロセッサは、レルムAと関連付けられた以前の例外レベルに依然として存在し、そのため、これが原因で、たとえレルムBへの切り替えがなされ、最終的に、そのレルムがEL0から処理を開始するとしても、リンク・レジスタELR_EL1がRECポインタを入手するために依然としてアクセス可能である。状態復元は直ちに行うことができ、又は、レルムBの通常処理470を使用して、一定の期間にわたって並行してゆっくりと行うことができる。
【0161】
子レルムBの実行中に、ステップ472で例外が発生すると、レルムBと関連付けられた状態をその親レルムから隠すために1組のマスク化動作が実行される。これには、ステップ474でEL0と関連付けられたアーキテクチャの状態の少なくとも1つのサブセットをマスク化し消去することが含まれる(マスク化/消去されるアーキテクチャの状態のサブセットは、退出が自発的又は非自発的なレルム退出かどうかによって決まる)。マスク化により、状態はアクセス不能となり、消去により、親レルムから対応するレジスタへの後続のアクセスが、戻されるべき所定の値をトリガすることを保証する。ステップ476において、レルムBと関連付けられたRECへの状態保存が、アーキテクチャの状態のマスク化されたサブセットに対して実行される。この場合、子レルムはEL0のBELを有しているので、状態のマスク化されたサブセットは、EL0でアクセス可能な少なくともサブセット350を含む。この場合も、状態保存が直ちにトリガされ、又は、親レルムにおける例外に関して進行中の処理と並列に、ゆっくりとした方法で実行することができる。次いで、ステップ478において、レルム退出がトリガされ親レルムAに切り替え、ステップ480において、例外の処理が親レルム内で実行される。図30のステップ474及びステップ476は、自発的なレルム退出の場合、省略することができる。
【0162】
図31は、ネストされたレルム・エントリ及び退出を表す類似の一実例を示す。所望の子レルムのRECを指し示すためのリンク・レジスタをすでにセットした、例外レベルEL2の祖父レルムAは、ステップ500でERET命令を実行し、レルムIDレジスタRID_EL2を子レルムのローカルRIDにセットし、SPSR_EL2でRフラグを1にセットする。これにより、ステップ502でレルムBへのレルム・エントリがトリガされ、ステップ504でレルムBのRECから復元される状態がトリガされ、この場合も、直ちに又はゆっくりと実行することができる。最終的には、次に、レルムBは、ステップ506でさらにERET命令を実行し、この場合も、ステップ508でさらなるレルム・エントリをトリガするために、リンク・レジスタ、RIDレジスタ及びRフラグをセットさせる。ステップ502及び508におけるレルム・エントリは、図28で表すように実行することができ、そのため、レルム・チェックといったステップもなお実行できるが、簡潔にするため、図31には示していないことに留意されたい。次いで、レルムCへのエントリに続いて、ステップ510でレルムCのアーキテクチャの状態がそのRECから復元され、ステップ512で、処理はレルムC内で再開する。
【0163】
続いて、例外がステップ514で発生する。例外は、例外レベルEL2を目標とする。たとえば、例外は、ハイパーバイザによって取り扱われる例外のタイプとすることができる(仮想化されたデバイスと関連付けられたイベント又はステージ2のアドレス変換障害など)。ステップ516において、任意の消去及び状態保存を含む状態マスク化プロセスが、図30に表すように類似の方法でトリガされ、例外が発生したレルムCの親レルムであるレルムBへのレルム退出がステップ518で実行される。
【0164】
ステップ520において、処理要素が、発生した例外の目標例外レベルはレルムBの境界例外レベルよりも高いことを検出し、その結果、レルムBは中間レルムであり、レルムBの親レルムへのさらなるレルム退出が必要となる。したがって、中間レルム・フラグが、ステップ522でSPSR_EL1内にセットされ、ステップ524で、レジスタのサブセットのさらなる状態マスク化、消去及び保存が実行される。この場合も、レルムAへのレルム退出に続いて、対応する状態が、プロセッサがアクセス不能なレジスタのプロセス内に何らかの方法で保持することができる場合、このプロセスの保存部分は遅らせることができる。この中間レルムのために保存されたレジスタのサブセットは、EL1でアクセス可能なレジスタ352を含むが、EL0でアクセス可能なレジスタ350は除外する。レジスタ350のサブセットを保存する必要はない。というのは、ステップ508における前のレルム・エントリ及びこれらのレジスタは、すでにレルムCによってマスク化/消去/保存されているので、レルムBは、これらのレジスタを変更するためにいかなる命令も実行していないからである。したがって、これにより、中間レルムに必要とされる追加のマスク化及び状態保存の量を削減する。
【0165】
次いで、さらなるレルム退出526が、中間レルムの親であるレルムAに対してトリガされる。この場合、レルムAはEL2で動作できるので例外を取り扱うことができ、そのため、ステップ528において、例外が、例外レベルEL2で取り出され、処理される。例外はハイパーバイザによって処理され、いったん例外が取り扱われると、ERET命令530が実行されて前の処理に戻る。この時点で、ELR_EL2及びRID_EL2及びSPSR_EL2のRフラグの値は、依然としてERET命令がステップ500で実行される前の値と同じである。したがって、これらの値を再度セットする必要はない。ERET命令530は、例外レベルEL1でレルム・エントリをトリガして前の子レルムBへ戻す。例外ハンドラ・コードは、例外の取扱いに続いて処理をより低い例外レベルに戻すために、レガシー・コードのこうしたERET命令をすでに有している可能性があることに留意されたい。したがって、上で説明したように、レルム・エントリをトリガするためにERET命令を再利用することにより、レルム保護機能を意識することなく書かれた既存の例外ハンドラ・コードが、継続して使用可能となり、プラットフォーム開発コストを削減できるようになる。
【0166】
EL1でレルムBに戻ると、処理要素は中間フラグがSPSR_EL1にセットされていることを検出する(ステップ532)。したがって、ステップ534において、レルムBのRECから復元された状態は、EL1(登録済352)がアクセス可能な状態であるが、EL0でアクセス可能なレジスタ350は除外する。プロセッサ実装形態が、トリガされネストされたレルム・エントリのソフトウェアによってアシストされた方法を使用すると、ステップ536において、処理要素は、中間レルムのために例外状態レジスタESR_EL1を偽のレルム退出に対応する特定の値にセットする。処理要素は、この所定のタイプの偽のレルム退出例外を取り扱うための例外ハンドラを示す例外ベクトルに、プログラム・カウンタをセットし、次いで、例外ハンドラはステップ538で実行される。例外ハンドラは、いかなる実際の機能を実行する必要はなく、ERET命令をトリガするだけである、又は、同様に、いくつかの他の動作を提供するだけである。最終的に、ELR_EL1、RID_EL1及びSPSR_EL1レジスタは、ERET命令がステップ506で実行される前にあったように依然としてセットされるので、レルム・エントリ544をトリガして、元の例外が発生した前に実行した前の子レルムへ戻すERET命令がステップ542で実行される。この時点で、状態がステップ546においてレルムCのRECから復元され、ステップ548で、処理は上のステップ510、512と同じ方法で続行する。
【0167】
或いは、ハードウェアによってアシストされるネストされたレルム・エントリの場合、ステップ536~542は省略でき、代わりに、ステップ534で所要の状態のサブセットを復元させ、処理要素のハードウェアは、中間レルム・フラグから、レルムCに対してさらなるレルム・エントリが必要であることを検出し、その結果、ステップ550で、ハードウェアは、実行すべきさらなるERET命令542を必要とすることなく、後続のレルム・エントリを直接連鎖させることができる。この場合、中間レルム内で任意の命令を実行する必要はない。
【0168】
こうしたネストされたレルム・エントリ及び退出手順を使用することにより、EL2のレルムがEL0と関連付けられた任意のレルム値又はRECポインタに対処する必要が避けられる。現在のレルムの中間子レルムのパラメータのみがチェックの必要があるので、これによりレルムを入力するとき、クリーナー及び単純チェックができるようになる。これによりアーキテクチャ及びハードウェア実装が非常に単純化される。
【0169】
図32及び33は、それぞれレルム退出及びレルム・エントリ時にRECとの間でのゆっくりとした状態保存及び状態復元の実例を表す。一般に、親レルムに対してレルムを退出させる際は、親レルムから状態を隠すために子レルムと関連付けられた状態をマスク化し、親レルムが消去された状態に対応するアーキテクチャ・レジスタへのアクセスを試みるとき、親レルムがいくつかの所定の値を見るであろうことを保証するために消去を実行することが望ましいであろう。こうした動作は、比較的迅速に実行することができる。しかし、子レルムの状態をいつまでも保持するための、処理回路の物理レジスタ・ファイルの空間が不十分である場合、一部のデータをRECに保存することが望ましいであろう。しかし、これにはより長い時間がかかり、本来なら親レルムで処理に使用できるメモリ帯域幅を占有し、これにより親レルムの処理を遅らせる恐れがある。同様に、レルムを入力する際に、メモリからレジスタへ状態を復元するための対応する動作には、かなりの時間がかかることがある。したがって、効率上の理由から、RECとの間で処理要素状態の非同期的な保存/復元をサポートすることが望ましいであろう。所与のプロセッサ実装形態が、このゆっくりとした状態保存を実際に行うかどうかは、特定のプロセッサに対する実装上の選択である。たとえば、高い効率を目標としない一部のプロセッサは、どちらの状態がすでに保存され、どちらはまだかといった管理の複雑性を削減するために、状態保存動作を直ちに単純にトリガすることがより簡潔であると考えるであろう。しかし、必要に応じて効率改善を可能にするために、非同期的、ゆっくりした状態保存手法といった、アーキテクチャ機能性サポートを行うことが望ましいであろう。
【0170】
したがって、元のレルムから、元のレルムよりもより特権を有する例外レベルで処理されるべき目標レルムへのレルム切り替えに応答して、処理回路は、状態のマスク化を実行し、目標レルムがアクセスできない元のレルムと関連付けられたアーキテクチャの状態データのサブセットを作ることができる。状態のマスク化されたサブセットを、必須ではない時点でメモリに保存することは可能であるが、しかし、アーキテクチャは、レルム切り替えの後で使用できるフラッシュ・コマンドを提供する。フラッシュ・コマンドが実行されると、処理回路は、少なくとも1つのRECメモリ領域にまだ保存されていないアーキテクチャの状態データのマスク化されたサブセットのうちのいずれもが、少なくとも1つのRECメモリ領域に保存された場合には、元のレルムによって所有されるということを保証する。こうしたフラッシュ・コマンドを提供することにより、アーキテクチャの状態データのサブセットが確実に保存されたことを保証する必要のある時点で、これを強行することができ、これにより、アーキテクチャの特別なマイクロ・アーキテクチャ実装を、フラッシュ・コマンドがまだ実行されていないケースでアーキテクチャの状態データのサブセットが実際にメモリに保存されるまさにそのときに、変更する自由が与えられるということを保証することができる。
【0171】
状態マスク化に加えて、レルム切り替えに際して、処理回路はまた、上で述べたような、所与のアーキテクチャ・レジスタへの任意の後続の読み取りアクセスが、所定の値を戻す(介在する書き込みアクセスなしに実行された場合)ことを保証するレジスタ消去動作を実行することができる。この消去は、所与のアーキテクチャ・レジスタに対応する物理レジスタに所定の値を実際に書き込むことにより、レジスタ・リネーミングにより、又は、読み取りアクセスは、対応する物理レジスタの実際のコンテンツに代えて所定の値を戻さなければならないことを示すために、所与のアーキテクチャ・レジスタと関連付けられた他の制御状態値をセットすることにより、実行することができる。レルム切り替えに応答して実行される状態保存が、非同期的に実行されると、レルム切り替えに応答してアクセス不能とされた、アーキテクチャの状態データのサブセットの少なくとも一部が、依然として処理回路のレジスタに記憶されるとき、処理回路は目標レルムの処理を開始することができる。たとえば、プロセッサは、命令セット・アーキテクチャのアーキテクチャ・レジスタとして提供される多くのレジスタよりも大きな物理レジスタ・ファイルを有することが可能であり、そのため、一部の予備の物理レジスタを使用して、目標レルムがすでに処理を開始した後しばらくの間、以前にマスク化された状態を保持することができる。これは、アーキテクチャの状態データのサブセットの所与の項目が、依然としてレジスタに記憶されているときに、処理が元のレルムに戻ると、処理回路は、RECからデータを復元する必要なしに、レジスタ・ファイルとの間でその所与のアーキテクチャの状態の項目へのアクセスを簡単に復元することができるので有益である。いくつかのタイプの例外では、実行されるべき比較的短い例外ハンドラだけが必要なことがあり、この場合には、いくつかのマスク化された状態が、例外から戻るときに依然としてレジスタ・ファイルに常駐している可能性がある。こうした「浅い」例外エントリ/戻りイベントは、ゆっくりとした状態保存を使用することから利益を得ることができる。
【0172】
ゆっくりとした状態保存が使用されると、例外に続いて目標レルムの処理が開始されるといつも、フラッシュ・コマンド以外の所定のイベントの発生に応答して、処理回路は、REC領域の所与の項目の保存をトリガすることができる。この時点における処理は、すでに親レルム(これは通常は前の子レルムと関連付けられたRECへはアクセスしない)に切り替わっているが、こうした動作は、ソフトウェアではなくマイクロ・アーキテクチャ実装によってハードウェアでトリガされるので、一般的なソフトウェアによってトリガされるメモリ・アクセス(事実上、こうしたREC保存動作は、実行前に子レルムによってすでに許可されているであろう)に必要とされるのと同じ所有権チェックを受けることはないであろう。
【0173】
多くの異なるタイプの所定のイベントを使用して、以下を含む、RECに保存されるアーキテクチャの状態データのサブセットの一定の項目をトリガすることができる。
・アーキテクチャの状態データのサブセットの所与の項目に対応したアーキテクチャ・レジスタへのレジスタ・アクセス。この手法は、レジスタ・リネーミングをサポートしないあまり複雑ではないプロセッサに有用である。この場合、各アーキテクチャ・レジスタは1つの固定物理レジスタにマッピングすることができ、そのため、親レルムと関連付けられたコードが、初回に所与のアーキテクチャ・レジスタにアクセスしようとすると、これによりメモリに保存される子レルムによって使用されるレジスタの古い値が必要になるであろう。
・アーキテクチャの状態データのサブセットの所与の項目を記憶する物理レジスタの再マッピング。レジスタ・リネーミングをサポートするシステムにおいて、アーキテクチャの状態はレジスタ・ファイルにより長く残ることができるが、最終的には、異なる値を記憶するために対応する物理レジスタを再マッピングする必要があり、この時点で、子レルムの対応するアーキテクチャの状態はRECに保存することができる。
・所定の閾値以下になるいくつかの使用可能な物理レジスタ。この場合、所与の物理レジスタの実際の再マッピングを待つよりはむしろ、状態保存は、自由な物理レジスタ(異なるアーキテクチャ・レジスタへの再割り当てに利用可能である)の番号が小さくなると先制して実行を開始することができる。
・所与のサイクルの数又は所与の期間の経過。したがって、任意の特定の処理イベントが保存をトリガする必要はないが、代わりに、ゆっくりとした状態保存により、親レルムでの処理によってトリガされた他のメモリ・アクセスに利用可能なメモリ帯域幅への影響を減らすために、子レルムのコンテキストの保存をある時間にわたって順番にRECへ単純に広げることができる。
・削減されたプロセッサ作業負荷を示すイベント、たとえば、アイドル状態のプロセッサ時間の期間、又は、状態保存を実施することを示すいくつかの他のイベントは、今や、親レルムの処理の全体的な効率への影響は小さい。この時点で、アーキテクチャの状態データの少なくとも一部のサブセットの保存をトリガすることができる。
【0174】
レルム切り替えに続いて、処理回路は、レルムが前に親レルムに切り替えた元レルム以外のさらなるレルムを入力しようとする場合、処理回路は、さらなるレルムが同じ例外レベル、又は、前のレルム退出の目標レルムよりも低い特権を有する例外レベルで処理されるとき、レルム・エントリ要求を拒否することができ、フラッシュ・コマンドが、レルム切り替えとレルム・エントリ要求との間で受け取られることはない。或いは、レルム・エントリ要求は、フラッシュ・コマンドが実行されたかどうかにかかわらず受け取ることができるが、フラッシュ・コマンドが実行されなかった場合、最初の子レルムREC状態は破損され、その結果、RECは再使用することができず、正当なエントリが子レルムに入るのを防止する。どちらにしても、親レルムが異なる子レルムに対する処理を、前に実行された子レルムへ首尾よく向けることができる前にフラッシュ・コマンドが要求される。これにより、たとえハードウェアが、ゆっくりとした状態保存手法を使用することを選択したとしても、前の子レルムと関連付けられたすべての必要な状態は、異なる子レルムが入力された時点でメモリに保存されることが保証されるであろう。これにより、保存すべき数組の子レルム・データをバックアップする必要が避けられ、アーキテクチャが簡素化される。
【0175】
フラッシュ・コマンドは、マスク化されたレジスタからの状態がRECメモリ領域に記憶することを確約することを保証する必要があるだけということに留意されたい。フラッシュ・コマンドによってトリガされる記憶動作は、処理要素8のロード/ストア待ち行列内、又は、相互接続14、メモリ・コントローラ若しくはメモリ16それ自体内のキューに入れられる。そのため、メモリ・セルへの実際の書き込み後まで発生しないが、処理要素の視点からは、マスク化された状態のメモリ書き込みは明確に発生する。
【0176】
フラッシュ・コマンドは、処理回路の命令デコーダによってサポートされたネイティブ命令とすることができる。或いは、フラッシュ・コマンドは、命令デコーダによってデコードされた命令の処理を続行するために、所定のイベントによってトリガされたコマンドとすることができる。たとえば、フラッシュ・コマンドは、前の子レルムと関連付けられたアーキテクチャの状態のすべての必要なサブセットのために、状態保存動作がメモリにトリガされたということを保証すべきであると暗示する、いくつかの他のタイプの命令によって自動的にトリガすることができる。
【0177】
上で説明したように、レルム切り替え中に保存されるアーキテクチャの状態の特別なサブセットは、元のレルムと関連付けられた境界例外レベルによって決まることがある(及び、元のレルムがネストされたレルム退出の中間レルムであるかどうかによっても決まることがある)。状態マスク化及び保存動作は、レルム切り替えが所定のタイプのレルム切り替え(たとえば、元のレルムでの自発的なレルム切り替え命令の実行によってトリガされるレルム切り替え)の場合抑制することができる。
【0178】
したがって、図32はゆっくりとした状態保存及び復元の一実例を表す。ステップ560において、レルム退出が上で説明したのと同じ方法で取り扱われる。レルムBに対して隠されるべきアーキテクチャの状態のサブセットは、レルム退出時にマスク化され、消去されるが、RECへの状態保存は遅れることがあり、そのため、ゆっくりとした状態保存プロセス562が、親レルムAと関連付けられた処理564のバックグラウンドで実行することができる。ゆっくりとした状態保存が実行される特別な方法は、特別な処理設計のため実装選択とすることができる。ステップ566において、親レルムはレルム・エントリをトリガして前の子レルムへ戻す(上で説明したようにERET命令を使用して)。この場合、レルム・エントリは前に退出したのと同じ子に戻るので、そのレルム・エントリに対するフラッシュ・コマンドが有効である必要はない。ゆっくりとした状態保存動作の一部568が依然として処理される場合、これはレルム・エントリの後で取り消すことが可能であり、その代わり、レルムBに対する対応する状態値が、処理要素のいくつかの物理レジスタから単純に復元することができる。したがって、比較的浅い例外退出及び戻りに対して、ゆっくりとした状態保存手法を使用することは、効率を向上させるために必要なメモリ・アクセスの量を削減する助けとなる。
【0179】
図33は、レルム退出560が、レルムB1からその親レルムAへ図32と同じ方法で実行される別の実例を表す。しかし、今回は、同じレルムに戻るというよりは、レルムAは処理を異なる子レルムB2へ切り替えることを望んでいる。したがって、親レルムはステップ570で、ゆっくりとした状態保存プロセス562のうちの残りのいかなる部分も完了したということを保証する処理要素をトリガする、フラッシュ・コマンドを実行する(すなわち、処理要素のレジスタ・ファイルに依然として存在するマスク化されたサブセットの残りすべてのアーキテクチャの状態に対する記憶動作が発行される)。ステップ572において、親レルムは、目標レルムB2に対してレルムID及びRECポインタを示すために、レルム識別子レジスタ及びリンク・レジスタをセットし、次いで、ステップ574で、レルム・エントリ566をレルムB2にトリガするERET命令を実行する。フラッシュ・コマンドが、ERET命令を実行する前に実行されなかったならば、レルム・エントリは失敗したであろう。ステップ578において、状態復元がレルムB2のRECメモリ領域から実行される(この場合も、これはゆっくりと行うことができる)。
【0180】
したがって、フラッシュ・コマンドを使用することにより、プロセッサ状態から前に退出したレルムのRECへの迅速な例外退出及びトリックリングが可能となり、また、状態が処理要素のレジスタ内に保持されRECから記憶され再ロードされることのない場所への、浅い例外退出及び戻りができるようになる。
【0181】
図34は、親レルムによって初期化することができるサブレルムの概念を示す。図34に示すように、特定の例外レベルで動作する所与の親レルム600は、その親と同一の例外レベルで動作するサブレルム602を初期化することができる。完全レルム600は、所与のソフトウェア・プロセス(又は2つ以上のプロセスの集合)に対応するが、サブレルムは、所与のソフトウェア・プロセス内の所定のアドレス範囲に対応する。完全レルムはサブレルムの親であるので、上で説明したように、サブレルムは、親完全レルムによって所有されたメモリ領域に記憶されたデータにアクセスする権利を有することができるが、サブレルムは、サブレルム602によって所有されたメモリ領域に記憶されたアクセス・データからその親完全レルムを除外する権利を有することができる。これは、所与のソフトウェア・プロセスのある部分をそのソフトウェア・プロセスの他の部分よりもより安全にするのを可能にするのに有用である。たとえば、モバイル・バンキング・アプリケーションのパスワードをチェックするため、又は、他の機密情報にまつわる情報を処理するためのコードの一部は、同一のアプリケーション又はオペレーティング・システムの他の部分が、その機密情報にまつわる情報にアクセスできないように、サブレルムに割り当てることができる。
【0182】
サブレルムは一般に、以下に説明するようにいくつかの相違はあるものの、完全レルムと同じ方法で取り扱うことができる。サブレルムとの間でのエントリ及び退出は、例外リターン命令及び例外イベントを使用して、上で説明したのと同じ方法で取り扱うことができる。したがって、サブレルムは、同じ親の完全子レルム用と同じ方法で構成された子レルムIDを有することができ、上で説明したようなレルム記述子ツリー内のレルム記述子を備えることができる。サブレルムへのエントリは、ERET命令を実行する前に、RIDレジスタに適切な子サブレルムRIDを配置したERET命令を単純に実行することによりトリガすることができる。したがって、同じタイプの(第2の変形体の)ERET命令を使用して、完全レルム又はサブレルムのどちらにでもエントリをトリガすることができる。
【0183】
サブレルムが完全レルムと異なる1つの点は、サブレルムは自身の子レルムを初期化することが許されていないということであろう。したがって、新しいレルムを初期化するためのレルム初期化コマンドは、現在のレルムがサブレルムの場合、拒絶されるであろう。RMUは、現在のレルムのレルム記述子内のレルム・タイプ値を使用して、現在のレルムは完全レルムかサブレルムかを判定することができる。現在サブレルムにいるとき、レルム初期化をできないようにすることにより、さらなるレルムを初期化する際にサブレルムによって使用するための追加の状態レジスタを備える必要がないため、アーキテクチャが単純化される。
【0184】
同様に、現在サブレルムにいるとき、レルム・エントリ命令の実行はできないであろう。レルム・エントリ及び退出(並びに例外エントリ及び戻り)を取り扱うために使用される、上で説明したELR、SPSR、ESR及びRIDレジスタといった一列に並べられたレジスタのうちのいくつかは、設計時に、所与のプロセスがいくつのサブレルムを作成するかがわからないので管理するのが難しいため、それぞれのサブレルムに対してレジスタをさらに一列に並べる必要はないということを意味するので、アーキテクチャが簡略化される。同様に、より低い特権レベルで動作するプロセスへのスイッチをトリガする例外戻しイベントは、現在のレルムが完全レルムではなくサブレルムのとき使用できなくなる。上で説明した実例において、単一タイプのERET命令は、レルム・エントリ命令としても例外リターン命令としても機能するが、これはすべての実施例にとって重要ではなく、個々の命令が提供されたとき、レルム・エントリ命令も例外リターン命令も、現在のレルムがサブレルムの場合、使用できなくなる。
【0185】
同様に、サブレルムにあるとき例外が発生した場合、例外を直接サブレルムから除去するよりは、処理回路は、例外を取り扱う前に、サブレルムからサブレルムを初期化した親完全レルムへ退出をトリガすることができる。したがって、例外は親完全レルムへの戻しをトリガする。親完全レルムへの例外戻しは、RECへ対する状態マスク化、消去及び保存動作を含むことができるが、例外がより高い例外レベルでサブレルムからレルムへ直接除去されるのを防ぐことにより、ELR、SPSR及びESRといった例外制御レジスタをサブレルムのためにさらに一列に並べる必要が避けられ、アーキテクチャが簡略化される。
【0186】
サブレルムの場合、レルムを処理することができる最大特権レベルを示す境界例外レベルは、その親完全レルムに対する境界例外レベルに等しい。対照的に、子完全レルムの場合、境界例外レベルは、その親レルムの境界例外レベルよりもより低い特権を有する例外レベルである。
【0187】
レルムが親レルムによって初期化されると、親レルムは、新しいレルムが子完全レルムになるか子サブレルムになるか選択することができ、それに応じて、適切なレルム・タイプのパラメータをレルム記述子にセットすることができる。いったん、レルムが動作すると、図18に関して上で説明した管理されたレルム・ライフサイクルによりレルム記述子の変更が禁止されるため、親レルムはもはやレルム・タイプを変更することができない。
【0188】
要約すれば、完全レルムと似ているが、例外取扱い、レルム初期化及びレルム・エントリ機能がサブレルム内で使用不能となる状態で管理されるサブレルムを導入する機能により、完全レルムのソフトウェア・プロセス内で所与のアドレス範囲に対応するコードのより小さな部分が、そのソフトウェアの他の部分から分離され、機密情報にまつわるコード又はデータのある部分に対して追加的なセキュリティを提供することができるようになる。
【0189】
図35は使用可能なシミュレータ実装を示す。前に説明した実施例は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して、本発明を実装しているが、コンピュータ・プログラムの使用により実装された本明細書に記載の実施例による、命令実行環境を提供することも可能である。こうしたコンピュータ・プログラムは、ソフトウェアに基づくハードウェア・アーキテクチャの実装を提供する限り、しばしばシミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムとしては、エミュレータ、仮想マシン、モデル、及び動的バイナリ・トランスレータを含むバイナリ・トランスレータが挙げられる。通常、シミュレータ実装は、シミュレータ・プログラム710をサポートする、ホスト・オペレーティング・システム720をオプションとして実行させる、ホスト・プロセッサ730上で実行することができる。いくつかの構成では、ハードウェアと提供された命令実行環境との間にシミュレーションの複数の層、及び/又は同じホスト・プロセッサに提供された複数の異なる命令実行環境があってもよい。歴史的に見て、納得のいく速度で実行するシミュレータ実装を提供するには、強力なプロセッサが必要とされてきたが、こうした手法は、互換性又は再利用の理由で別のプロセッサにネイティブなコードを実行したいという要望があるときなど、一定の事情において正当化することができる。たとえば、シミュレータ実装は、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を有する命令実行環境、又は、通常、異なるハードウェア・アーキテクチャと関連付けられた命令実行環境を提供することができる。シミュレータの全体像は、「Some Efficient Architecture Simulation Techniques」、1990年冬、USENIX Conference、53~63頁に述べられている。
【0190】
シミュレートされた実施例において、特定のハードウェア構成又は機能を参照して、実施例が以前に説明された範囲で、同等の機能を適切なソフトウェア構成又は機能により提供することができる。たとえば、特定の回路をコンピュータ・プログラム・ロジックとしてシミュレートされた実施例に実装することができる。同様に、レジスタ又はキャッシュといったメモリ・ハードウェアは、ソフトウェア・データ構造としてシミュレートされた実施例に実装することができる。前に説明した実施例で参照された1つ又は複数のハードウェア要素が、ホスト・ハードウェア(たとえば、ホスト・プロセッサ730)に存在する配列において、いくつかのシミュレートされた実施例は、適切なホスト・ハードウェアを使用することができる。
【0191】
シミュレータ・プログラム710は、コンピュータ可読記憶媒体(これは非一時的な媒体でよい)に記憶することができ、プログラム・インターフェース(命令実行環境)を、シミュレータ・プログラム710によってモデル化されているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じ目標コード700(これは、図2に表すように、アプリケーション、オペレーティング・システム、及びハイパーバイザを含むことができる)に提供する。したがって、上で説明したレルム保護機能に基づくメモリ・アクセスの制御を含む、目標コード700のプログラム命令は、シミュレータ・プログラム710を使用して命令実行環境内から実行することができ、その結果、上で説明した装置2のハードウェア機能を実際には有していないホスト・コンピュータ730が、これらの機能をエミュレートすることができる。
【0192】
少なくともいくつかの実例は、ホスト・データ処理装置を制御して、1つ又は複数のソフトウェア・プロセスに応答してデータ処理を実行するための処理回路と、複数のメモリ領域の所有権を実現するためのメモリ・アクセス回路であって、所与のメモリ領域が、複数のレルムの中から指定された所有者レルムと関連付けられ、各レルムが、少なくとも1つのソフトウェア・プロセスの少なくとも一部に対応し、前記所有者レルムが、前記所与のメモリ領域内に記憶されたアクセス・データから他のレルムを除外する権利を有する、メモリ・アクセス回路と、その中でルート・レルム以外の各レルムが、親レルムによってトリガされるコマンドに応答して初期化される子レルムであるレルム階層に従って、複数のレルムを管理するためのレルム管理ユニットであって、目標レルムのコマンド要求無効に応答し、目標レルム、及び処理回路がアクセスできない目標レルムの任意の子孫レルムを作成するように構成されているレルム管理ユニットと、を含む装置により、命令実行環境を提供するための命令を含む、仮想マシン・コンピュータ・プログラムを提供する。記憶媒体は仮想マシンのコンピュータ・プログラムを記憶することができる。記憶媒体は非一時的な記憶媒体とすることができる。
【0193】
本出願において、「構成される」という用語は、装置の要素が定義された動作を実行することができる構成を有しているということを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。たとえば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又は、プロセッサ若しくは他の処理デバイスは、機能を実行するようにプログラムされてもよい。「構成される」とは、装置の要素が定義された動作を提供するために、どのような方法によってであれ、変更される必要があるということを暗示しない。
【0194】
本発明の例示の実施例について、本明細書において添付図面を参照しながら詳細に説明してきたが、本発明は、これらの明確な実施例に限定されるものではなく、添付の請求項によって定義された本発明の範囲及び趣旨から逸脱することなく、当業者により様々な変更及び改変をその中で行うことができることを理解されたい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35