(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-23
(54)【発明の名称】封止されたケイパビリティを操作するための技法
(51)【国際特許分類】
G06F 12/14 20060101AFI20241016BHJP
G06F 9/34 20180101ALI20241016BHJP
【FI】
G06F12/14 510D
G06F9/34 350A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024520551
(86)(22)【出願日】2022-09-14
(85)【翻訳文提出日】2024-05-20
(86)【国際出願番号】 GB2022052321
(87)【国際公開番号】W WO2023067295
(87)【国際公開日】2023-04-27
(32)【優先日】2021-10-18
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ボトマン、フランソワ クリストファー ジャック
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
【テーマコード(参考)】
5B017
5B033
【Fターム(参考)】
5B017AA01
5B017BA01
5B017BB05
5B017CA01
5B017CA02
5B033DB02
5B033FA27
(57)【要約】
封止されたケイパビリティを操作するための装置及び方法が記載される。装置は、メモリへのアクセス要求がその間に生成される処理動作を実施する処理回路であって、処理回路が、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている、処理回路を有する。チェック回路は、次いで所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される制約情報に基づいて、及び所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定する。各ケイパビリティは、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルは、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する。ケイパビリティのうちの少なくとも1つは、封止されたケイパビリティとして設定可能であり、装置は、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるとき、処理回路が所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作回路を更に備える。
【特許請求の範囲】
【請求項1】
装置であって、
メモリへのアクセス要求がその間に生成される処理動作を実施する処理回路であって、前記処理回路が、制約情報を識別するケイパビリティを使用して前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、
所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される前記制約情報に基づいて、及び前記所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定するチェック回路とを備え、
各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、前記所与のアクセス要求に関連付けられた前記信頼レベルが、前記処理回路の現在の動作モードに関連付けられた現在のモード信頼レベル、及び前記所与のケイパビリティの前記ケイパビリティ信頼レベルの両方に依存し、
前記ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、
前記装置が、前記現在のモード信頼レベルが所与の封止されたケイパビリティの前記ケイパビリティ信頼レベルよりも低い信頼レベルであるときに、前記処理回路が前記所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作回路を更に備える、装置。
【請求項2】
各ケイパビリティが、それに関連付けられた封止フラグを有し、前記封止されたケイパビリティ操作回路が、選択されたケイパビリティに対する封止要求に応答して、前記選択されたケイパビリティの前記封止フラグを設定して前記選択されたケイパビリティを封止されたケイパビリティとして識別するかどうかを、前記選択されたケイパビリティの前記ケイパビリティ信頼レベルと前記現在のモード信頼レベルとの比較に応じて判定する、請求項1に記載の装置。
【請求項3】
前記封止されたケイパビリティ操作回路が、前記封止要求に応答して、前記選択されたケイパビリティの前記ケイパビリティ信頼レベルが前記現在のモード信頼レベルよりも大きいときに、前記封止フラグの設定を禁止するように配設されている、請求項2に記載の装置。
【請求項4】
前記封止されたケイパビリティ操作回路が、前記封止要求に応答して、前記選択されたケイパビリティの前記ケイパビリティ信頼レベルが前記現在のモード信頼レベルと一致するときに、前記封止フラグを設定するように配設されている、請求項3に記載の装置。
【請求項5】
各ケイパビリティが、そのケイパビリティを封止されたケイパビリティとして示すように設定可能である、それに関連付けられた封止フラグを有し、前記封止されたケイパビリティ操作回路が、選択された封止されたケイパビリティに対する開封要求に応答して、前記選択された封止されたケイパビリティの前記ケイパビリティ信頼レベルが前記現在のモード信頼レベルよりも大きいときに、前記選択された封止されたケイパビリティの前記封止フラグのクリアを禁止する、請求項1~4のいずれか一項に記載の装置。
【請求項6】
前記封止されたケイパビリティ操作回路が、前記開封要求に応答して、前記選択された封止されたケイパビリティの前記ケイパビリティ信頼レベルが前記現在のモード信頼レベルと一致するときに、前記封止フラグをクリアするように配設されている、請求項5に記載の装置。
【請求項7】
前記封止されたケイパビリティ操作回路が、前記現在のモード信頼レベルが前記所与の封止されたケイパビリティの前記ケイパビリティ信頼レベルよりも低い信頼レベルであるときに、前記処理回路が前記所与の封止されたケイパビリティを使用して複数の処理動作のいずれかを実施することを防止するが、前記所与の封止されたケイパビリティを記憶要素間で移動させることを可能にするように配設されている、請求項1~6のいずれか一項に記載の装置。
【請求項8】
前記封止されたケイパビリティ操作回路が、前記現在のモード信頼レベルにかかわらず、前記所与の封止されたケイパビリティが後続の処理動作において前記処理回路によって使用されることが可能になる前に、前記所与の封止されたケイパビリティが開封されることを要求するように配設されている、請求項1~7のいずれか一項に記載の装置。
【請求項9】
前記封止されたケイパビリティ操作回路が、少なくとも前記現在のモード信頼レベルが前記所与の封止されたケイパビリティの前記ケイパビリティ信頼レベルと同じであるときに、前記処理回路が前記所与の封止されたケイパビリティを開封することなく前記所与の封止されたケイパビリティを使用して1つ以上の処理動作を実施可能であるように配設されている、請求項1~7のいずれか一項に記載の装置。
【請求項10】
前記封止されたケイパビリティ操作回路が、前記現在のモード信頼レベルが前記所与の封止されたケイパビリティの前記ケイパビリティ信頼レベル以上である場合、前記所与の封止されたケイパビリティを使用して前記1つ以上の処理動作を実施可能であるように配設されている、請求項9に記載の装置。
【請求項11】
実施可能になる前記1つ以上の処理動作が、
前記所与の封止されたケイパビリティを使用してメモリアドレスを生成するための逆参照動作と、
前記所与の封止されたケイパビリティによって識別される前記情報を修正するためのケイパビリティ修正動作とのうちの少なくとも1つを含む、請求項9又は10に記載の装置。
【請求項12】
前記処理回路が、少なくとも特権状態と、非特権状態と、を含む複数の状態のうちの1つにおいてプログラムコードを実行するように配設され、前記現在のモード信頼レベルは、前記複数の状態のうちのいずれにおいて前記現在のプログラムコードが実行されるかに依存する、請求項1~11のいずれか一項に記載の装置。
【請求項13】
前記処理回路は、少なくともセキュアドメイン及び低セキュアドメインを含む複数のセキュリティドメインのうちの1つにおいてプログラムコードを実行するように配設され、前記現在のモード信頼レベルは、前記複数のセキュリティドメインのうちのいずれにおいて前記現在のプログラムコードが実行されるかに依存する、請求項1~12のいずれか一項に記載の装置。
【請求項14】
前記現在のモード信頼レベルが、前記現在のプログラムコードが実行される前記状態と前記セキュリティドメインとの両方に依存する、請求項13又は14に記載の装置。
【請求項15】
前記処理回路による参照のために、ケイパビリティを記憶するためのケイパビリティレジスタのセットと、
1つ以上のケイパビリティを記憶するためのメモリ回路と、を更に備え、
前記処理回路が、前記メモリ回路から選ばれたケイパビリティを、前記ケイパビリティレジスタのセットから選択されたケイパビリティレジスタにロードするためのロード動作を実施するように配設され、
前記処理回路が、前記ロード動作中に、前記選択されたケイパビリティレジスタに記憶された前記選ばれたケイパビリティが、前記現在のモード信頼レベル又は前記メモリ回路に記憶された前記選ばれたケイパビリティの前記ケイパビリティ信頼レベルを超えないように制約されたケイパビリティ信頼レベルを有するように、前記ケイパビリティ信頼レベルを選択的に修正するように配設され、
前記処理回路が、前記選択されたケイパビリティが封止されたケイパビリティであるときに、前記ロード動作中に前記ケイパビリティ信頼レベルの修正を禁止する、
ように更に配設されている、請求項1~14のいずれか一項に記載の装置。
【請求項16】
前記封止されたケイパビリティ操作回路が、前記選択された封止されたケイパビリティに対する開封要求を処理した結果を示す結果情報を生成するように配設されている、請求項5に従属する場合の請求項1~15のいずれか一項に記載の装置。
【請求項17】
前記封止されたケイパビリティ操作回路が、前記処理回路にアクセス可能な1つ以上の状態フラグを設定することによって前記結果情報を生成するように配設されている、請求項16に記載の装置。
【請求項18】
前記封止されたケイパビリティ操作回路が、前記現在のモード信頼レベルにかかわらず、少なくとも1つの所定のタイプのケイパビリティの開封を禁止するように配設されている、請求項1~17のいずれか一項に記載の装置。
【請求項19】
前記所与のアクセス要求に関連付けられた前記信頼レベルは、前記現在のモード信頼レベル、及び前記ケイパビリティ信頼レベルのうちのいずれが、より低い信頼レベルを表すかに制約される、請求項1~18のいずれか一項に記載の装置。
【請求項20】
前記ケイパビリティ信頼レベルが、前記所与のケイパビリティ内で符号化される、請求項1~19のいずれか一項に記載の装置。
【請求項21】
封止されたケイパビリティを操作する方法であって、
メモリへのアクセス要求がその間に生成される処理動作を実施するために処理回路を採用することであって、前記処理回路が、制約情報を識別するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成する、採用することと、
所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される前記制約情報に基づいて、及び前記所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定することとを含み、
各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、前記所与のアクセス要求に関連付けられた前記信頼レベルが、前記処理回路の現在の動作モードに関連付けられた現在のモード信頼レベル、及び前記所与のケイパビリティの前記ケイパビリティ信頼レベルの両方に依存し、
前記ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、
前記方法が、前記現在のモード信頼レベルが所与の封止されたケイパビリティの前記ケイパビリティ信頼レベルよりも低い信頼レベルであるときに、前記処理回路が前記所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作回路を採用することを更に含む、方法。
【請求項22】
命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
メモリへのアクセス要求がその間に生成される処理動作を実施する処理プログラムロジックであって、前記処理プログラムロジックが、制約情報を識別するケイパビリティを使用して前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、
所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される前記制約情報に基づいて、及び前記所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定するチェックプログラムロジックとを備え、
各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、前記所与のアクセス要求に関連付けられた前記信頼レベルが、前記処理プログラムロジックの現在の動作モードに関連付けられた現在のモード信頼レベル、及び前記所与のケイパビリティの前記ケイパビリティ信頼レベルの両方に依存し、
前記ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、
前記装置が、前記現在のモード信頼レベルが所与の封止されたケイパビリティの前記ケイパビリティ信頼レベルよりも低い信頼レベルであるときに、前記処理プログラムロジックが前記所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作プログラムロジックを更に備える、装置。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関し、より具体的には、封止されたケイパビリティの操作に関する。
【0002】
所与のプロセスに対して特定のケイパビリティが定義され、定義されたケイパビリティ外の動作を実行しようとする試みがある場合に、エラーがトリガされ得る、ケイパビリティベースのアーキテクチャへの関心が高まっている。ケイパビリティは、様々な形態を採ることができるが、ケイパビリティの1つのタイプは、有界ポインタ(「ファットポインタ」とも称され得る)である。
【0003】
データ処理装置の処理回路によるアクセスのためのケイパビリティを記憶するために、いくつかのケイパビリティ記憶要素(例えば、レジスタ)が提供され得る。各ケイパビリティは、そのケイパビリティを使用するときに実施することができる動作を制限するために使用される制約情報を含むことができる。例えば、有界ポインタを考慮すると、これは、関連付けられた許可を識別する1つ以上の許可フラグと共に、そのケイパビリティを使用するときに処理回路によってアクセス可能なメモリアドレスの拡張不可能な範囲を識別するために使用される情報を提供し得る。
【0004】
いくつかのケイパビリティアーキテクチャが、封止されたケイパビリティの概念を導入してきた。ケイパビリティを封止することによって、これは、そのケイパビリティが逆参照不能(メモリアドレスがそのケイパビリティを使用してアクセスされ得ないことを意味する)及び不変としてマークされることを可能にし、そのようなケイパビリティを修正又は逆参照しようとする試みが行われる場合、ハードウェア例外を生じさせる。信頼できるコードなどのソフトウェアユースケースが、あまり信頼されないコードに、その信頼されるコードへのコールバック中に使用されるトークン、例えばファイルハンドルを与えることを可能にするので、封止されたケイパビリティのサポートが望ましい。このトークンは、あまり信頼されないモード内で使用可能であるべきではなく、ソフトウェア又はアーキテクチャ内の任意の他の挙動によって修正されるべきではない。
【0005】
しかしながら、マルチビットフィールド(「オブジェクトタイプ」フィールドと呼ばれる場合がある)は、典型的には、ケイパビリティの封止された状態についての情報を取り込むためにケイパビリティ内に提供される必要があり、更に、典型的には、特定の開封キー、典型的には、開封許可及び一致するオブジェクトタイプを有するケイパビリティが、そのような封止されたケイパビリティを開封するために使用される必要がある場合がある。しかしながら、いくつかの現代のシステムでは、ケイパビリティのメタデータを表すために利用可能なビット数は、非常に制約されており、それは、そのような封止されたケイパビリティの使用をサポートすることを困難にし得る。更に、鍵の開封を必要とする要件は煩雑である。
【0006】
したがって、封止されたケイパビリティの提供をサポートするための代替機構を提供することが望ましい。
【発明の概要】
【0007】
第1の例示的な配設では、装置であって、メモリへのアクセス要求がその間に生成される処理動作を実施する処理回路であって、この処理回路が、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、所与のケイパビリティによって識別される所与の制約情報に基づいて、及び所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定するチェック回路とを備え、各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存し、ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、装置が、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理回路が所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作回路を更に備える、装置が提供される。
【0008】
更なる例示的な配設では、封止されたケイパビリティを操作する方法であって、メモリへのアクセス要求が生成される処理動作を実施するために処理回路を採用することであって、処理回路が、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成することと、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される制約情報に基づいて、及び所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定することとを含み、各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベルと、所与のケイパビリティのケイパビリティ信頼レベルとの両方に依存し、ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、方法が、現在のモード信頼レベルが、所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理回路が所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作回路を採用することを更に含む、方法が提供される。
【0009】
また更なる例示的な配設では、命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、メモリへのアクセス要求がその間に生成される処理動作を実施する処理プログラムロジックであって、処理プログラムロジックが、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、所与のケイパビリティによって識別される制約情報に基づいて、及び所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定するために、チェックプログラムロジックとを備え、各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理プログラムロジックの現在の動作モードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存し、ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、装置が、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理プログラムロジックが所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作プログラムロジックを更に備える、コンピュータプログラムが提供される。
【0010】
また更なる例示的な構成では、装置であって、メモリへのアクセス要求がその間に生成される処理動作を実施する処理手段であって、処理手段が、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている、処理手段と、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、所与のケイパビリティによって識別される制約情報に基づいて、及び所与のアクセス要求に関連付けられた信頼レベルに基づいて許可されるかどうかを判定するチェック手段とを備え、各ケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理手段の現在の動作モードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存し、ケイパビリティのうちの少なくとも1つが、封止されたケイパビリティとして設定可能であり、装置が、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理手段が所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作手段を更に備える、装置が提供される。
【図面の簡単な説明】
【0011】
本技法について、添付の図面に示す本技法の例を参照して、例示としてのみ更に説明する。
【
図1】例示的な一実装形態による装置のブロック図である。
【
図2】有界ポインタ記憶要素のセット内のポインタ値を設定するか、又はそれにアクセスしようとする場合にエラーがトリガされ得る命令のタイプの例を示し、ポインタ値は、関連付けられた範囲情報によって示された範囲外のアドレスを指定するために使用される。
【
図3】例示的な一実装形態による、有界ポインタに関連するタグビットの使用を例示する。
【
図4】本明細書に説明される技法に従って使用され得るケイパビリティの形態を概略的に例示し、信頼レベル指標が、ケイパビリティに関連して提供され、封止フラグが、ケイパビリティが封止されるかどうかを示すために提供される。
【
図5A】例示的な一実装形態による、個々のアクセス要求に対する信頼レベルがどのように生成され、その後、メモリへのアクセスを制約するためにどのように使用され得るかを概略的に例示する図であり、封止されたケイパビリティの適切な操作もサポートする。
【
図5B】例示的な一実装形態による、
図5Aに概略的に示された装置の動作を例示する流れ図である。
【
図6】例示的な一実装形態による、封止要求の操作を例示する流れ図である。
【
図7】例示的な一実装形態による、開封要求の操作を例示する流れ図である。
【
図8】例示的な一実装形態による、処理回路の異なるドメイン及び処理状態の一例を示し、処理回路がドメイン及び処理状態の特定の組み合わせで動作しているときに、サポートされる場合がある封止及び開封能力を概略的に示す。
【
図9A】2つの例示的な実装形態による、封止されたケイパビリティを使用する要求が操作され得る異なる方法を例示する流れ図である。
【
図9B】2つの例示的な実装形態による、封止されたケイパビリティを使用する要求が操作され得る異なる方法を例示する流れ図である。
【
図10】例示的な一実装形態による、ケイパビリティを修正する要求がどのように操作され得るかを例示する流れ図である。
【
図11】例示的な一実装形態による、メモリからケイパビリティをロードするために実施されるステップを例示する流れ図である。
【
図12】例示的な一実装形態による、ケイパビリティが所定のタイプであるか否かに応じて開封要求がどのように操作され得るかを例示する流れ図である。
【発明を実施するための形態】
【0012】
本明細書で説明する技法によれば、装置であって、動作を実施するための処理回路であって、その動作中に、メモリへのアクセス要求が生成される、処理回路を有する装置が提供される。処理回路は、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている。処理回路によって生成されたメモリアドレスは、アドレス変換が実施されるシステムにおける仮想アドレスであり得るか、又は代替的にアドレス変換をサポートしないシステムにおける物理アドレスであり得る。
【0013】
この装置はまた、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、チェック回路を有する。上記チェックを実施するチェック回路の機能は、処理回路とは別個の構成要素であり得るか、又は代替的に装置の処理回路内に提供され得る。
【0014】
制約情報が関連付けられたケイパビリティによって識別され得るいくつかの方法がある。例えば、ケイパビリティは、1つの例示的な実装形態において、制約情報を直接含む場合がある。しかしながら、代替的な実装形態では、ケイパビリティは代わりに、制約情報が位置するメモリにおけるロケーションを(直接的又は間接的に)示し得る。
【0015】
チェック回路はまた、所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約するために、配設されている。チェック回路の機能は、様々な形態、例えば、メモリ管理ユニット(memory management unit、MMU)、メモリ保護ユニット(memory protection unit、MPU)、セキュリティ属性ユニット(security attribute unit、SAU)、又はこれらの構成要素の組み合わせで実装することができる。そのようなチェック回路は、従来、メモリへのアクセスを更に制約するときに、任意の特定の信頼レベルを個々のアクセス要求に関連付けるのではなく、処理回路の現在の動作モードに関連付けられた信頼レベルを考慮するように配設されてきた。しかしながら、本明細書で説明する技法によれば、所与のケイパビリティは、それに関連付けられたケイパビリティ信頼レベルを有し、その情報はまた、チェック回路によって実施されるチェックに織り込まれ得る。特に、本明細書で説明する技法によれば、所与のアクセス要求に関連付けられた信頼レベルは、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する。
【0016】
個々のケイパビリティに関連してケイパビリティ信頼レベルを提供することによって、これは、ケイパビリティが管理及び使用され得る方法を強化することができる。例えば、上で考察されるように、ケイパビリティ信頼レベルは、所与のアクセス要求によって指定されたメモリへのアクセスを進めることができるかどうかを判定するときにチェック回路によって考慮されるので、ある特定の事情において処理回路によってケイパビリティが生成されることを可能にする機構を提供することができ、特定のケイパビリティに関連付けられたケイパビリティ信頼レベルは、次いで、そのケイパビリティの出所を追跡し、そのケイパビリティを使用して後に行われるアクセスを制約するために効果的に使用される。
【0017】
加えて、そのような機構は、例えば、混乱した代理攻撃に対抗するために、特定のユースケース保護がサポートされることを更に可能にする。混乱した代理攻撃は、より特権の低いコードがより特権の高いコードにポインタを渡し、より特権の高いコードを使用して、その代わりに特定の動作を実施しようとするときに発生する可能性がある。ケイパビリティ信頼レベルの使用を通して、これは、非特権コードにアクセス可能であるべきではないメモリのエリアを悪意を持ってアドレス指定する非特権コードによって作成されたポインタを、より特権の高いコードが誤って使用することを防止することができる。特に、そのような状況では、ポインタは、ケイパビリティ信頼レベルが非特権コードのケイパビリティ信頼レベルを超えないケイパビリティを使用して生成されており、したがって、特権コードからアクセスが試みられた場合でも、メモリアクセス回路は、ポインタを生成するために使用されたケイパビリティのケイパビリティ信頼レベルに起因して、特権メモリへのアクセスを防止する。
【0018】
本明細書で説明する技法によれば、個々のケイパビリティに関連するケイパビリティ信頼レベルの提供も活用し、特に、オブジェクトタイプ及び開封許可を示すために不十分なメタデータビットを利用する必要性を回避し、鍵を開封する必要性も回避する、封止されたケイパビリティを操作するための軽量機構を提供することによって、追加の利益を提供する。
【0019】
特に、本明細書で説明する技法によれば、装置は、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理回路が所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止するために、封止されたケイパビリティ操作回路を更に備える。したがって、封止されたケイパビリティを考慮する場合、処理回路が封止されたケイパビリティを操作する方法は、処理回路の現在のモード信頼レベルと、問題の封止されたケイパビリティのケイパビリティ信頼レベルとの両方を考慮して制約され得る。特に、個々のケイパビリティに関連付けられたケイパビリティ信頼レベルの情報を再利用することによって、ケイパビリティが封止されているとマークされている場合、そのケイパビリティ信頼レベルの情報を使用して、封止されたケイパビリティに関連付けられた特定のソフトウェアコンテキスト(ソフトウェア信頼レベル)を識別することができる。
【0020】
前述の技法は、多種多様な異なるシステムにおいて使用することができる。例えば、処理回路は、様々な形態を採ることができる。例えば、処理回路は、様々な異なる動作モードでプログラムコードを実行するように配設されている中央処理装置(central processing unit、CPU)であり得るが、本技法は、他の形態の処理回路、例えば、ダイレクトメモリアクセス(direct memory access、DMA)コントローラ、暗号化アクセラレータなどに関連して適用することもできる。
【0021】
所与のアクセス要求に関連付けられた信頼レベルが、処理回路の現在の動作モード、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に基づいて判定され得るいくつかの方法がある。例えば、システムは、許可の付与又は許可の制限に基づくことができ、所与のアクセス要求に関連付けられた信頼レベルは、それらの技法のうちのどれが使用されるかに依存し得る。しかしながら、例示的な一実装形態によれば、本技法は許可の制限に基づき、所与のアクセス要求に関連付けられた信頼レベルは、現在のモード信頼レベル、及びケイパビリティ信頼レベルのうちのいずれがより低い信頼レベルを表すかに制約される。
【0022】
ケイパビリティ信頼レベルをケイパビリティについて指定することができるいくつかの方法があるが、例示的な一実装形態では、ケイパビリティ信頼レベルは所与のケイパビリティ内で符号化される。これは、様々な方法で実装することができるが、例示的な一実装形態では、ケイパビリティごとに、制約情報は、そのケイパビリティを使用して生成されたメモリアドレスに許可された様々なタイプのメモリアクセスを識別する許可の少なくとも1つのセットを提供し、ケイパビリティ信頼レベルは、追加の許可として提供される。
【0023】
しかしながら、上述の例示的な実装形態では、ケイパビリティ信頼レベルは、所与のケイパビリティ内で符号化されるが、これは要件ではなく、ケイパビリティ信頼レベルを所与のケイパビリティに関連付けるための他の機構が提供され得ることに留意されたい。例えば、代替的な実装形態では、所与のケイパビリティは、ケイパビリティ信頼レベルを含むロケーションを示す識別子を提供し得る。したがって、そのような実装形態では、ケイパビリティ信頼レベル情報は、他のロケーション、例えば、メモリに常駐することができ、ケイパビリティ自体は、ケイパビリティ信頼レベルを提供するメタデータのロケーションを示す値を含む。ケイパビリティ信頼レベルを含むロケーションを示すために使用される識別子は、様々な形態を採ることができる。例えば、それは、システムのグローバルレジスタに記憶されたアドレスからのオフセットであり得、したがって、ケイパビリティ信頼レベルがメモリ内のどこに維持されているかを識別するメモリアドレスが判定されることを可能にする。代替的に、識別子は、ケイパビリティ信頼レベル情報が記憶されるメモリにおけるロケーションを直接識別する場合がある。
【0024】
各ケイパビリティ内で提供された制約情報は、様々な形態を採ることができるが、例示的な一実装形態では、そのケイパビリティを使用して任意のアクセス要求に対して生成されたメモリアドレスに対するメモリアドレスの許容範囲を判定するために使用される境界情報を提供する。例示的な一実装形態では、制約情報は、そのような境界情報及びそのケイパビリティを使用して生成されたメモリアドレスに許可されたメモリアクセスのタイプを識別する許可のセットの両方を含み得る。ケイパビリティはまた、他の情報、例えば、メモリアドレスを生成するためにそのポインタ値を何らかのオフセットに加算することによって、メモリアドレスを生成するときに使用されるポインタ値を含むことができる。次いで、生成されたメモリアドレスを境界情報と比較して、生成されたメモリアドレスが許容範囲内にあるかどうかを判定することができる。
【0025】
封止されたケイパビリティの説明に戻ると、ケイパビリティが封止されているものとして識別することができ、したがって、封止されたケイパビリティ操作回路に、所与の封止されたケイパビリティのケイパビリティ信頼レベルと、処理回路に関連付けられた現在のモード信頼レベルとの両方を考慮して、そのケイパビリティがどのように操作されるべきかを判定させる、いくつかの方法がある。しかしながら、例示的な一実装形態では、各ケイパビリティは、それに関連付けられた封止フラグを有し、封止されたケイパビリティ操作回路は、選択されたケイパビリティに対する封止要求に応答して、選択されたケイパビリティの封止フラグを設定して選択されたケイパビリティを封止されたケイパビリティとして識別するかどうかを、選択されたケイパビリティのケイパビリティ信頼レベルと現在のモード信頼レベルとの比較に応じて判定する。
【0026】
封止フラグがセット(すなわち封止された)状態又はクリア(すなわち開封された)状態を示すことができるいくつかの方法がある。例えば、ロジック1値又はロジック0値のいずれかが、セット状態に関連付けられてもよく、実際に、いくつかの実装形態では、マルチビット符号化を提供することが適切であり得る。更に、封止要求は様々な方法で行われてもよいが、例示的な一実装形態では、例えば、処理回路が封止命令を実行した結果として行われてもよい。
【0027】
例示的な一実装形態では、封止されたケイパビリティ操作回路は、封止要求に応答して、選択されたケイパビリティのケイパビリティ信頼レベルが現在のモード信頼レベルよりも大きいときに、封止フラグを設定することを禁止するように配設されている。封止フラグが設定できるようにするために必要とされる実際の現在のモード信頼レベルは、実装形態に依存して変化し得る。例えば、ケイパビリティの封止は、現在のモード信頼レベルがケイパビリティ信頼レベル以上であるときはいつでも可能であってもよく、あるいは、ケイパビリティの封止は、現在のモード信頼レベルがケイパビリティ信頼レベルと同じである場合のみに制限されてもよい。
【0028】
例示的な一実装形態では、封止されたケイパビリティは、ある特定の状況で開封されることも可能になる。例えば、例示的な一実装形態では、封止されたケイパビリティ操作回路は、選択された封止されたケイパビリティに対する開封要求に応答して、選択された封止されたケイパビリティのケイパビリティ信頼レベルが現在のモード信頼レベルよりも大きいときに、選択された封止されたケイパビリティの封止フラグのクリアを禁止する。封止と同様に、封止フラグがクリアできるようにするために必要とされる実際の現在のモード信頼レベルは、実装形態に依存して変化し得る。例えば、ケイパビリティの開封は、現在のモード信頼レベルがケイパビリティ信頼レベル以上であるときはいつでも可能であってもよく、あるいは、ケイパビリティの開封は、現在のモード信頼レベルがケイパビリティ信頼レベルと同じである場合のみに制限されてもよい。
【0029】
更に、開封要求は様々な方法で行われてもよいが、例示的な一実装形態では、例えば、処理回路が開封命令を実行した結果として行われてもよい。
【0030】
上述の技法によれば、ケイパビリティを封止することを可能にするか、又は封止されたケイパビリティを開封することを可能にするかの判定が、現在のモード信頼レベル及びケイパビリティ信頼レベルの両方を考慮して行われるので、使用される鍵を封止したり開封したりする必要がないことに留意されたい。
【0031】
先に述べたように、封止されたケイパビリティ操作回路は、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理回路が所与の封止されたケイパビリティを使用して少なくとも1つの処理動作を実施することを防止する。禁止される処理動作の数は、実装形態に応じて変化することができるが、一実施例では、封止されたケイパビリティ操作回路は、現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い信頼レベルであるときに、処理回路が所与の封止されたケイパビリティを使用して複数の処理動作のいずれかを実施することを防止するが、所与の封止されたケイパビリティを記憶要素間で移動させることを可能にするように配設されている。
【0032】
封止されたケイパビリティを記憶要素間で移動させることを可能にし、そのような封止されたケイパビリティをレジスタとメモリとの間で転送することを可能にし、実際に、必要に応じてレジスタ間移動を可能にすることが有用であり得る。しかしながら、典型的には、処理回路は、現在のモード信頼レベルが、その封止されたケイパビリティのケイパビリティ信頼レベルよりも低い場合、封止されたケイパビリティを使用して、全部ではないにしても大部分の処理動作を実施することを防止される場合がある。それにもかかわらず、ある特定の活動が可能にされる場合もあり得る。例えば、現在のモード信頼レベルが、問題の封止されたケイパビリティのケイパビリティ信頼レベルよりも低い場合であっても、ケイパビリティを、汎用データではなくケイパビリティとして識別するフィールド(本明細書ではタグビットと呼ばれる)をクリアして、そのケイパビリティを効果的に無効にすることが可能であり得る。
【0033】
例示的な一実装形態では、封止されたケイパビリティ操作回路は、現在のモード信頼レベルにかかわらず、所与の封止されたケイパビリティが後続の処理動作において処理回路によって使用されることが可能になる前に、所与の封止されたケイパビリティが開封されることを要求するように配設されている。
【0034】
しかしながら、代替的な実装形態では、封止されたケイパビリティ操作回路は、少なくとも現在のモード信頼レベルが所与の封止されたケイパビリティのケイパビリティ信頼レベルと同じであるときに、処理回路が所与の封止されたケイパビリティを開封することなく所与の封止されたケイパビリティを使用して1つ以上の処理動作を実施可能であるように配設され得る。この機能は、例えば、現在のモード信頼レベルがケイパビリティ信頼レベルと同じである状況に制限されてもよく、あるいは、現在のモード信頼レベルがケイパビリティ信頼レベル以上である状況において可能にされてもよい。
【0035】
上記で識別された事情において所与の封止されたケイパビリティを使用して実施可能になる1つ以上の処理動作は、実装形態に応じて変化し得る。例えば、所与の封止されたケイパビリティを使用してメモリアドレスを生成するために、逆参照動作が可能にされ得る。その代わりに、又はそれに加えて、所与の封止されたケイパビリティによって識別される情報を修正するために、ケイパビリティ修正動作も可能にされ得る。ケイパビリティの情報及び関連付けられたメタデータのいずれも、そのような修正動作を実施するときに変更され得る(特にメタデータが変わるときに、突然変異されると呼ばれることがある)が、典型的には、そのような動作は、ケイパビリティによって指定された制約を低減しないように制約される。例えば、典型的には、範囲情報又は許可に対する任意の変更は、それらが範囲を低減する、又は許可を低減するように働く場合にのみ可能にされる場合もある。
【0036】
処理回路は、様々な異なる方法で動作するように配設することができ、現在のモード信頼レベルは、処理回路が現在どのように動作しているかに依存する。例えば、一実装形態では、処理回路は、少なくとも特権状態及び非特権状態を含む複数の状態のうちの1つにおいてプログラムコードを実行するように配設され得、現在のモード信頼レベルは、複数の状態のうちのいずれにおいて現在のプログラムコードが実行されるかに依存し得る。2つの異なる状態、すなわち、特権状態及び非特権状態があり得るか、又は異なるレベルの特権を有するN個の異なる状態があり得、ここでNは2より大きく、これらのシナリオのいずれにおいても、現在のプログラムコードがどの状態で実行されるかに依存して、現在のモード信頼レベルを設定することができることに留意されたい。例えば、特定の実装形態は、異なる状態として、EL0、EL1及びEL2などの異なる例外レベル(EL)を提供し得、ここで、EL2は、EL1よりも特権が与えられ、EL1はEL0よりも特権が与えられる。
【0037】
代替的に、又は加えて、処理回路は、少なくともセキュアドメイン及び低セキュアドメインを含む複数のセキュリティドメインのうちの1つにおいてプログラムコードを実行するように配設され得、現在のモード信頼レベルは、複数のセキュリティドメインのうちのいずれにおいて現在のプログラムコードが実行されるかに依存し得る。処理状態と同様に、2つのドメイン、すなわち、セキュアドメイン及び非セキュアドメインだけが存在し得るか、又は代替的に、M個の異なるドメインが存在し得、ここで、Mは2より大きく、各ドメインは異なるレベルのセキュリティを有し、現在のモード信頼レベルは、次いで、現在のプログラムコードがどのセキュリティドメインで実行されるかに依存して、設定され得る。
【0038】
現在のモード信頼レベルは、複数の異なる直交信頼レベルに依存して設定され得、3つ以上の直交信頼レベルがあり得ることにも留意されたい。したがって、例えば、一実装形態では、処理回路は、上で考察される異なる状態及び異なるセキュリティドメインの両方で動作することが可能であり得、現在のモード信頼レベルは、それらの要因の両方に依存して設定され得る。
【0039】
ケイパビリティは、システム内の様々なロケーションに記憶することができる。例えば、装置は、処理回路による参照のためにケイパビリティを記憶するために使用されるケイパビリティレジスタのセットを有し得るが、1つ以上のケイパビリティを記憶するために使用され得るメモリ回路も有し得る。処理回路は、メモリ回路から選ばれたケイパビリティを、ケイパビリティレジスタのセットから選択されたケイパビリティレジスタにロードするためのロード動作を実施するように配設され得る。このプロセスの間、処理回路は、選択されたケイパビリティレジスタに記憶された選ばれたケイパビリティが、現在のモード信頼レベル又はメモリ回路に記憶された選ばれたケイパビリティのケイパビリティ信頼レベルを超えないように制約されたケイパビリティ信頼レベルを有するように、ケイパビリティ信頼レベルを選択的に修正するように配設され得る。したがって、メモリ回路内に依然として保持され得るケイパビリティの元のバージョンは、変更されたその関連付けられたケイパビリティ信頼レベルを有さないが、ケイパビリティレジスタに記憶されたバージョンは、そのケイパビリティ信頼レベルを制約し、したがって、ケイパビリティレジスタ内に記憶されたそのケイパビリティのケイパビリティ信頼レベルに依存して、そのロードされたケイパビリティを使用して実施される後続のメモリアクセス動作を制約するように、ロード動作中に処理回路によって変更されたそのケイパビリティ信頼レベルを有することができる。
【0040】
ケイパビリティ信頼レベルのそのような選択的なデモーションは、標準ケイパビリティに適切であり得るが、封止されたケイパビリティが修正されないことが要件であるため、そのような活動は、封止されたケイパビリティに関して抑制される必要がある。したがって、例示的な一実装形態では、処理回路は、選択されたケイパビリティが封止されたケイパビリティであるときに、そのようなロード動作中にケイパビリティ信頼レベルの修正を禁止するように更に配設されている。封止されたケイパビリティの場合、封止されたケイパビリティ操作回路の以前に識別された活動が、あまり信頼されないコードがより信頼されている封止されたケイパビリティを使用することを防止するので、あまり信頼されないコードがより信頼されている封止されたケイパビリティを提供されることを可能にすることから生じるセキュリティ問題はない。
【0041】
いくつかの実装形態では、ロード動作は、いくつかの事例では、通常のデータ(ケイパビリティではなく)をケイパビリティレジスタにロードするために実施され得、そのような事例では、ケイパビリティ信頼レベルに関連付けられるデータにおけるビットが、実際にはケイパビリティが修正されないデータであったことが重要であり得る。なぜなら、この場合、処理されているのはケイパビリティではなく、それらのビットを修正することはデータを破損するからである。したがって、例示的な一実装形態では、処理回路は、ロード動作中に、選ばれたケイパビリティが有効なケイパビリティである(ケイパビリティが封止されたケイパビリティではない)ことを識別する制御値を選ばれたケイパビリティが有するときに、ケイパビリティ信頼レベルのみを選択的に修正するように配設され得る。そのような手法によって、ロード動作中のケイパビリティ信頼レベルの上述の選択的修正は、実際に封止されていないケイパビリティがケイパビリティレジスタにロードされている場合にのみ実施される。
【0042】
例示的な一実装形態では、封止されたケイパビリティ操作回路は、選択された封止されたケイパビリティに対する開封要求を処理した結果を示す結果情報を生成するように配設されている。結果情報は、様々な形態を採ることができるが、一般に、ケイパビリティが首尾よく開封されたか否かに関する判定を行うことを可能にするのに十分である。例えば、開封が成功しなかった場合、障害が発生する可能性がある。あるいは、ソフトウェアに障害を示すために、1つ以上の状態フラグを設定することができる。別の例として、ケイパビリティが首尾よく開封されたことを識別するための指標をソフトウェアに返すことができ、必要に応じて、首尾よく開封されたケイパビリティが、現在のモード信頼レベルと正確に一致するケイパビリティ信頼レベルを有する状況を識別するための指標を提供することもできる。別の例として、失敗した開封動作は静かに失敗する場合があり、開封が成功したことを示す情報が生成されず、後で開封動作が失敗したことを判定するために使用される。
【0043】
必要に応じて、封止要求を処理した結果を識別するために、例えば、封止動作が成功したか失敗したかを識別するために、結果情報を生成することもできる。例示的な一実装形態では、成功を仮定することができ、封止動作が失敗であった場合にのみ、情報が出力され得る。また更なる例示的な実装形態では、封止要求が成功したか失敗したかにかかわらず、情報は生成されない場合があり、失敗した封止動作は、後の段階で、例えば開封中に検出され得る。
【0044】
いくつかの例示的な実装形態では、予約タイプであり、例えば、特定のイベント又は機能を示すためにアーキテクチャによって使用される、いくつかのケイパビリティがあり得る。例示的な一実装形態では、封止されたケイパビリティ操作回路は、現在のモード信頼レベルにかかわらず、そのようなケイパビリティの開封を禁止するように配設され得る。必要に応じて、そのようなケイパビリティを開封しようとする試みは、エラーがアサートされること、タグビットがクリアされてケイパビリティを効果的に無効にすること、又は何らかの他の指標がソフトウェアに提供されることをもたらす可能性がある。そのような予約タイプのケイパビリティが識別され得るいくつかの方法が存在する。特定の例として、それらは、例えば、上限が下限を下回ることによって、無効な範囲を定義する範囲境界情報を有し得る。
【0045】
ここで、特定の例について、図を参照して説明する。
【0046】
本明細書で説明する技法は、様々なデータ処理システムにおいて、そのようなシステム内の異なるタイプの処理回路に関連して採用することができる。例えば、本技法は、中央処理装置(CPU)の形態を採る処理回路に関連して使用することができるが、代替的に、ダイレクトメモリアクセス(DMA)コントローラ、暗号化アクセラレータなどの他の処理回路に関連して採用することもできる。純粋に以下の
図1の用例として、CPUの処理パイプラインは、説明される技法が使用され得る処理回路の例として考慮される。
【0047】
図1は、命令を処理するための処理パイプライン4を備えるデータ処理装置2の例を概略的に示す。この例では、処理パイプライン4は、フェッチステージ6、復号ステージ8、発行ステージ10、実行ステージ12、及びライトバックステージ14を含む、多数のパイプラインステージを含むが、他のタイプのステージ又はステージの組み合わせが提供され得ることが理解されるであろう。例えば、レジスタリネームを実施するためのリネームステージが、いくつかの例示的な実装形態に含まれ得る。処理されることになる命令がステージからステージに移動し、ある命令が、1つのステージで保留中である間に、別の命令が、パイプライン4の異なるステージで保留中であり得る。
【0048】
フェッチステージ6は、レベル1(L1)命令キャッシュ20から命令をフェッチする。フェッチステージ6は通常、連続する命令アドレスから逐次的に命令をフェッチし得る。しかしながら、フェッチステージは、分岐命令の結果を予測するための分岐予測器22も有し得、フェッチステージ6は、分岐が行われたと予測される場合に(非逐次的な)分岐先アドレスから、又は分岐が行われなかったと予測される場合に次の逐次アドレスから命令をフェッチすることができる。分岐予測器22は、ある分岐が行われる可能性が高いかどうかを予測するための情報を記憶するための1つ以上の分岐履歴テーブルを含み得る。例えば、分岐履歴テーブルは、従前に実行された分岐の実際の結果を追跡するための、又は分岐のために行われた予測の信頼度を表すためのカウンタを含み得る。分岐予測器22は、分岐命令の従前の目標アドレスを、同じ分岐命令に後で遭遇した際に、それらが予測され得るように、キャッシュするための分岐先アドレスキャッシュ(branch target address cache、BTAC)24も含み得る。
【0049】
フェッチされた命令は、命令を復号して復号された命令を生成する復号ステージ8に渡される。復号された命令は、実行ステージ12を制御して適切な処理動作を実行するための制御情報を含み得る。キャッシュ20からフェッチされたいくつかのより複雑な命令に対して、復号ステージ8は、それらの命令を復号された複数の命令(マイクロオペレーション(μop又はuop)として知られ得る)にマッピングし得る。それゆえに、L1命令キャッシュ20からフェッチされた命令と、パイプラインの後のステージで見られる命令との間に1対1の関係が存在しない場合がある。概して、本出願における「命令」に対する参照は、マイクロオペレーションを含むものと解釈されるべきである。
【0050】
復号された命令は、発行ステージ10に渡され、これは、命令の実行に必要なオペランドが利用可能であるかどうかを判定し、オペランドが利用可能である場合に実行のための命令を発行する。いくつかの例示的な実装形態は、L1命令キャッシュ20から命令がフェッチされたプログラム順序に対応する順序での実行のための命令が発行されるように、インオーダ処理をサポートし得る。他の例示的な実装形態は、プログラム順序とは異なる順序で実行ステージ12に命令を発行できるようにアウトオブオーダ実行をサポートし得る。アウトオブオーダ処理は、先の命令がオペランド待ちの間停止させられている間に、そのオペランドが利用可能である、プログラム順序では後の命令を先に実行できるため、性能向上に有用であり得る。
【0051】
発行ステージ10は、様々なデータ処理動作を実施するために命令が実行される実行ステージ12に命令を発行する。例えば、実行ステージは、整数値に算術演算又は論理演算を行うための算術/論理ユニット(arithmetic/logic unit、ALU)30、浮動小数点形式で表された値に演算を行うための浮動小数点(floating-point、FP)ユニット32、及びレベル1(L1)データキャッシュ36からレジスタ40にデータ値をロードするためのロード動作、又はレジスタ40からL1データキャッシュ36にデータ値を記憶するための記憶動作を行うためのロード/記憶ユニット34を含む、いくつかの実行ユニット30、32、34を含み得る。これらは、提供され得る実行ユニットのタイプのほんのいくつかの例であり、多くの他の種類が提供され得ることが理解されるであろう。処理動作を行うために、実行ステージ12は、レジスタ40のセットからデータ値を読み取り得る。次いで、実行された命令の結果は、ライトバックステージ14によってレジスタ40にライトバックされ得る。
【0052】
L1命令キャッシュ20及びL1データキャッシュ36は、複数のレベルのキャッシュを含むキャッシュ階層の一部であり得る。例えば、レベル2(L2)キャッシュ44も提供され得、任意選択的に、キャッシュの更なるレベルが提供され得る。この例では、L2キャッシュ44は、L1命令キャッシュ20とL1データキャッシュ36との間で共有されるが、他の例は、別個のL2命令キャッシュ及びデータキャッシュを有し得る。フェッチされることになる命令がL1命令キャッシュ20にないときには、それをL2キャッシュ44からフェッチすることができ、同様に、命令がL2キャッシュ44にない場合、それをメインメモリ50からフェッチすることができる。同様に、ロード命令に応答して、データがL1データキャッシュ36にない場合、それをL2キャッシュ44からフェッチすることができ、必要とされる場合、メモリ50からフェッチすることができる。キャッシュ階層を管理するために、任意の既知のスキームを使用し得る。
【0053】
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであり得るが、少なくともメインメモリ50、及び任意選択的に、少なくともいくつかのレベルのキャッシュ階層も、物理的にアドレス指定され得る。したがって、トランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)が、パイプライン4によって使用される仮想アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスに変換するために(例えば、後でより詳細に説明するメモリアクセスチェック回路52内に)提供され得る。例えば、TLBは、仮想アドレス空間の対応するページの仮想ページアドレスと、対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされるべき対応する物理ページアドレスとをそれぞれが指定する、多数のエントリを含み得る。例えば、仮想ページアドレス及び物理ページアドレスは、対応する仮想アドレス及び物理アドレスの最上位部分に対応し得、仮想アドレスを物理アドレスにマッピングするときに残りの最下位部分は変化しないままである。アドレス変換情報と同様に、各TLBエントリは、アドレスのあるページがパイプライン4のあるモードでアクセス可能であるかどうかを示すような、アクセス許可を指定するいくつかの情報も含み得る。いくつかの例示的な実装形態では、TLBエントリは、読み取り又は書き込み動作に応答して更新されるレベルのキャッシュ階層を定義するキャッシュポリシー情報など、アドレスの対応するページの他の特性(例えば、キャッシュがライトバックモードで動作するべきか、若しくはライトスルーモードで動作するべきか)、又は対応するページ内のアドレスに対するデータアクセスを、パイプライン4によって発行されたデータアクセスの順序と比較して、メモリシステムによって再順序付けできるかどうかを定義する情報を定義することもできる。
【0054】
単一レベルTLBが使用され得るが、代わりに、レベル1(L1)TLBが、いくつかの最近アクセスされたページにおいてアドレスを変換するためのTLBエントリを含み得、レベル2(L2)TLBがより多数のページのエントリを記憶するために提供され得るように、TLBの階層が提供され得ることが理解されよう。必要とされるエントリがL1TLBに存在しないときには、それをL2TLB、又は階層内の更なるTLBからフェッチすることができる。アクセスされるページのために必要とされるエントリがいずれのTLBにもない場合、メモリ50内のページテーブルにアクセスするために、ページテーブルウォークを実施することができる。本技法では、任意の既知のTLB管理スキームを使用することができる。
【0055】
また、いくつかのシステムは、複数のレベルのアドレス変換をサポートし得、その結果、例えば、第1のTLB(又はTLB階層)を使用して仮想アドレスを中間アドレスに変換し得、かつ1つ以上の更なるTLBを使用する第2のレベルのアドレス変換が、中間アドレスを、キャッシュ又はメモリにアクセスするために使用する物理アドレスに変換し得ることが理解されよう。これは、例えば、第1のレベルのアドレス変換がオペレーティングシステムによって管理され得、第2のレベルのアドレス変換がハイパーバイザによって管理され得る、仮想化をサポートするのに有用であり得る。
【0056】
図1に示すように、装置2は、有界ポインタレジスタ60のセットを有し得る。有界ポインタレジスタのセットは、汎用データレジスタ40のセットとは物理的に別個のものとして
図1に示しているが、代替的かつ例示的な実装形態では、汎用データレジスタと有界ポインタレジスタの両方を提供するために同じ物理的ストレージを使用し得る。
【0057】
各有界ポインタレジスタ60は、アクセスされることになるデータ値のアドレスを判定するために使用し得るポインタ値62と、対応するポインタ62を使用するときのアドレスの許容範囲を指定する範囲情報64とを含む。有界ポインタレジスタ60は、ポインタの使用に関する1つ以上の制限/許可を定義し得る制限情報66(本明細書では許可情報とも称される)も含み得る。例えば、制限66は、ポインタ62を使用し得る命令のタイプ、又はポインタを使用し得るパイプライン4のモードを制限するために使用することができる。それゆえに、範囲情報64及び制限情報66は、その中でポインタ62の使用が許可されるケイパビリティを定義すると考えられ得る。定義されたケイパビリティ外でポインタ62を使用する試みが行われると、エラーをトリガすることができる。範囲情報64は、例えば、ポインタがある既知の境界内に留まり、かつセンシティブな情報又はセキュアな情報を含む可能性があるメモリアドレス空間の他の領域に迷い込まないことを確実にするために、有用であり得る。汎用データレジスタと有界ポインタレジスタの両方に同じ物理的ストレージを使用する例示的な実装形態において、例示的な一実装形態では、ポインタ値62は、例えば、対応する汎用レジスタのために使用されるのと同じ記憶ロケーション内に記憶され得る。
【0058】
図2は、データ又は命令に対する不正アクセスから保護するために許容範囲が使用される命令のタイプの例を示す。
図2の頂部に示すように、特定の有界ポインタレジスタPR1が、所与のポインタ値62と、この例では、許容範囲の下側境界を定義する下側境界アドレス68及び許容範囲の上側境界を定義する上側境界アドレス69を使用して指定される、範囲情報64とを含む。例えば、境界68、69は、80000~81000のアドレス範囲を定義するように設定される。ある命令が有界ポインタレジスタPR1を参照し、ポインタ62から判定されたアドレスがこの範囲外である場合に、エラーがトリガされ得る。
【0059】
例えば、
図2の部分Aに示すように、いくつかのシステムでは、ポインタレジスタ60内のポインタ62の値を、範囲情報64によって指定された範囲外にある値(ここでは、ポインタがアドレスを直接指定すると仮定する)に設定する試みがある場合、エラーがトリガされ得る。これは、ポインタを使用するアクセスが許容範囲内に間違いなくあることを確実にできるように、ポインタ62が指定範囲外の値を取ることが回避させる。代替的に、
図2の部分Bに示すように、命令が、ポインタ62のアドレスによって識別された位置へのアクセスを試み、そのアドレスが指定範囲外にあるときに、エラーをトリガすることができる。それゆえに、ポインタ62を指定範囲外の値に設定することは許容できるが、ポインタアドレス(又はポインタから導き出されたアドレス)のデータアクセスが試みられ、アドレスが許容範囲外にある場合、エラーがトリガされ得る。他のシステムは、
図2の部分A及びBに示す両方の命令のタイプに応答してエラーをトリガし得る。
【0060】
範囲情報64は、異なる方法で設定され得る。例えば、セキュリティコード、又はオペレーティングシステム若しくはハイパーバイザが、所与のポインタに対して許可された範囲を指定し得る。例えば、命令セットアーキテクチャは、所与のポインタ62に対する範囲情報64を設定又は修正するためのいくつかの命令を含み得、これらの命令の実行は、プロセッサ4の特定のソフトウェア又は特定のモード又は例外状態に制限することができる。範囲情報64を設定又は修正するための任意の既知の技法が使用され得る。
【0061】
ポインタを参照するある命令を実行するときに実行状態12で使用し得る有界ポインタ記憶要素60のセットに加えて、命令がレベル1命令キャッシュ20からフェッチされるときに、フェッチステージ6で同様の機能を提供するためにプログラムカウンタケイパビリティ(program counter capability、PCC)レジスタ80も使用され得る。具体的には、プログラムカウンタポインタは、フィールド82に記憶され得、PCC80は、有界ポインタ記憶要素60のセット内のポインタの各々に提供される範囲及び制限情報と同様の、範囲情報84及び任意の適切な制限情報86も提供する。
【0062】
図3は、個々のデータブロックがケイパビリティ(すなわち、有界ポインタ及び関連付けられた制限情報)を表すか、又は通常データを表すかを識別するために、それらのデータブロックに関連してタグビットがどのように使用されるかを概略的に示している。具体的には、メモリアドレス空間110は、指定されたサイズを典型的に有する一連のデータブロック115を記憶する。純粋に例示のために、この例では、各データブロックが128ビットを含むと仮定されるが、他の例示的な実装形態では、異なるサイズのデータブロック、例えば、ケイパビリティが64ビットの情報によって定義されるときの64ビットデータブロックが使用され得る。各データブロック115に関連して、一例では、タグビットと称される単一ビットフィールドであるタグフィールド120が提供され、これは、関連付けられたデータブロックがケイパビリティを表すことを識別するために設定され、関連付けられたデータブロックが通常データを表し、それゆえにケイパビリティとして取り扱えないことを示すためにクリアされる。設定又はクリア状態に関連付けられた実際の値は、例示的な実装形態に依存して変化し得るが、純粋に例示のために、例示的な一実装形態では、タグビットが1の値を有する場合に、関連付けられたデータブロックがケイパビリティであることを示し、それが0の値を有する場合に、関連付けられたデータブロックが通常データを含むことを示すことが理解されるであろう。
【0063】
ケイパビリティが、
図3に示されるケイパビリティレジスタ100などの有界ポインタレジスタ60(本明細書ではケイパビリティレジスタとも称される)のうちの1つにロードされるときに、タグビットはケイパビリティ情報と共に移動する。したがって、ケイパビリティレジスタ100にケイパビリティがロードされた場合、ポインタ102、範囲情報104及び制限情報106(以下、許可情報と称される)がケイパビリティレジスタにロードされることになる。加えて、そのケイパビリティレジスタに関連して、又はそのうちの特定のビットフィールドとして、タグビット108は、コンテンツがケイパビリティを表すことを識別するために設定されることになる。同様に、ケイパビリティがメモリからストアバックされた場合、関連するタグビット120は、ケイパビリティが記憶されているデータブロックに関連して設定される。そのようなアプローチにより、ケイパビリティと通常データを区別し、それゆえに、通常データがケイパビリティとして使用できないことを確実にする。
【0064】
図1に戻ると、装置2には、アクセス要求が、ケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求に関連してケイパビリティチェック動作を実施することができるケイパビリティチェック回路33が提供され得る。これは、例えば、先に考察される範囲情報及び制限/許可情報を参照して実施することができ、これらは、まとめてケイパビリティの制約情報と称され得る。したがって、純粋に例として、メモリアドレスへの書き込みアクセス要求は、ケイパビリティが読み取りにのみ使用され、書き込みには使用されないことを示すケイパビリティを使用して実施されることを求めている場合、ケイパビリティチェック回路33は、アクセス要求を進めることができないと判定し得、例えば、そのような状況下で障害信号を発行し得る。
【0065】
しかしながら、ケイパビリティチェック動作に合格すると仮定すると、メモリアクセス要求は、アクセスに進むことを許可されることを確実にするために、いくつかの更なるチェックを提供することができるメモリアクセスチェック回路52に伝搬され得る。例えば、処理回路は、複数の異なる動作モードで動作することが可能であり得、各動作モードは、例えば、特定の特権状態、及び/又は装置が動作している特定のセキュリティドメインに関連付けられ得、メモリの特定の領域は、処理回路が可能な動作モードのうちの1つ又はサブセットで動作しているときにのみアクセス可能であり得る。
【0066】
メモリアクセスチェック回路52はしたがって、メモリアドレス空間の様々な領域に対して指定された属性データに基づいて、メモリシステムへのアクセスが許可されているかどうかをチェックし得る。メモリアクセスチェック回路は、メモリアドレス空間の対応する領域のそれぞれに関連するセキュリティドメインを定義するセキュリティドメイン定義データを記憶するセキュリティ属性ユニット(SAU)56を含み得る。セキュリティ属性データに基づいて、セキュリティ属性ユニット56は、メモリアクセスが許可されているかを、処理回路の動作の現在のセキュリティドメインと、目標アドレス及びメモリアクセスを含む領域に関連するセキュリティドメインと、に依存して、チェックすることができる。他の実装形態では、SAU56は、セキュリティドメイン定義データを直接記憶するのではなく、メモリアクセスチェックを実施するために、他のロケーションに記憶されたセキュリティ定義データにアクセスし得る。いくつかのシステムにおいて、セキュリティドメイン定義データは、メモリシステム50に記憶され得るか、又はシステム2内の他のロケーションで構成レジスタに記憶され得る。
【0067】
処理回路4は、動作の現在のセキュリティドメインにおいて動作し得、動作の現在のセキュリティドメインは、概して、現在実行されている命令のアドレスに関連付けられたセキュリティドメインに対応し得る(ただし、例えば、ドメイン間の移行を処理するときに、いくつかの例外があり得る)。セキュアドメインで動作している間、処理回路は、セキュアドメイン及び低セキュアドメインの両方に関連するメモリ領域内のデータにアクセスすることができ、低セキュアドメインで動作するときは、処理回路は低セキュアドメインに関連する領域内のデータにアクセスすることはできるが、SAU56がセキュアドメインに関連すると指定するアドレス空間の領域内のデータにアクセスすることは許可されないことがある。これにより、低セキュアドメインで動作しているコードからの不正アクセスに対する機密データの保護が可能になる。本明細書でより詳細に考察されるように、SAU56は、アクセスを進めることができるかどうかを判定するためにそのようなチェックを実施しているときに、処理回路の現在のセキュリティドメインだけでなく、考慮されている個々のアクセス要求に関連付けられた詳細情報も考慮する。この詳細情報は、処理回路のセキュリティドメイン、及びアクセス要求のメモリアドレスを生成するために使用されるケイパビリティに関連付けられた信頼レベル指標の両方に基づく。
【0068】
また、
図1を参照すると、メモリアクセスチェック回路52は、メモリシステム50へのメモリアクセスがアクセス許可を満たすかどうかをチェックするメモリ保護ユニット(MPU)54を含み得、アクセス許可は、例えば、処理回路4のどの特権レベルがメモリの所与の領域にアクセスすることが可能にされているかを指定し得るか、又はアドレス空間のメモリ領域が、読み取り動作及び書き込み動作の両方によってアクセスされ得るか、若しくは書き込みが禁止されている読み取り専用領域であるかを指定し得る。MPU54によって使用されるアクセス許可は、特権の低いプロセス(アプリケーションなど)が、メモリのどの領域に、どのように(読み出し専用又は読み出し/書き込み)アクセスすることを許可されるかを制御するために、例えば、特権の高いプロセス(ハイパーバイザ又はオペレーティングシステムなど)によって指定され得る。MPU54によって提供される許可は、SAU56によって提供される許可とは独立していてもよく、よって、所与のメモリアクセス要求が許可されるためには、MPU54及びSAU56の両方について定義されたアクセス許可に基づくチェックに合格しなければならない。MPU54は、
図1に単一のエンティティとして示されているが、いくつかの例では、それぞれがセキュリティドメインの1つに関連する別個のセキュアMPU及び低セキュアMPUが提供され得、よって、現在のドメインがセキュアドメインであるか低セキュアドメインであるかに依存して、メモリの所与の領域に異なるメモリアクセス許可を指定することができる(例えば、ある領域は低セキュアドメインでは読み出し専用であるが、セキュアドメインでは読み出し可能及び書き込み可能である)。
【0069】
SAUの先の考察と同様に、MPUがそのアクセス許可チェックを実施しているとき、MPUは、処理回路の現在の動作モードだけでなく、メモリアドレスを生成するために使用されるケイパビリティに関連付けられたケイパビリティ信頼レベルにも依存する、所与のアクセス要求に関連付けられた信頼レベルを考慮に入れることができる。
【0070】
1つ以上の制御レジスタ90が、本明細書で説明する実装形態によって提供される特定の特徴のためのイネーブル/ディセーブルフラグを記憶するために提供され得る。特定の例として、処理回路の現在の動作モードの信頼レベルよりも低い信頼レベルを有する不変ケイパビリティを選択的に修正することが可能であり得るが、この挙動は、制御レジスタ90内の別個のビットによって制御することができる。同様に、処理回路の特権の低い動作モード内から、関連付けられたより高い信頼レベルを有するケイパビリティを逆参照しようとするときに障害が発生する場合があり、この場合もやはり、そのような機能は、制御レジスタ90内のイネーブル制御ビットによってゲート制御される可能性がある。また後で考察されるように、ケイパビリティはメモリからケイパビリティレジスタにロードされ得、このプロセス中に、ロードされているケイパビリティの関連付けられた信頼レベルが選択的にデモートされ得るが、この場合も、そのような機能は、制御レジスタ90における別個の制御ビットによって制御され得る。
【0071】
本明細書で説明する技法によれば、ケイパビリティは、関連付けられたケイパビリティ信頼レベル情報と共に提供され、その信頼レベル指標は、メモリアクセスチェック回路52によって実装されたメモリアクセスチェック手順に織り込まれ得る。この信頼レベルの指標がケイパビリティに関連して提供され得る様々な方法があるが、
図4は、例示的な一実装形態を例示する。
図4に示される例では、ケイパビリティ100は、ポインタ値102及び何らかの範囲情報104(本明細書では境界情報とも称される)を含む。データの対応するブロックがケイパビリティとして取り扱われるべきかどうかを識別するために設定又はクリアされ得る前述のタグビット108と共に、許可のセットもケイパビリティ内に提供され得る。
【0072】
ケイパビリティに対して指定された許可は、実装形態に依存して変化し得るが、例示的な一実装形態では、許可は、読み取りアクセスのためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す読み取り許可ビット130、書き込みアクセスのためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す書き込み許可ビット132、並びにフェッチ及び実行される命令のメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す実行許可ビット134を含む。例えば、ケイパビリティが不変であると考えられるかどうかを示すために、ケイパビリティ内で他の情報を識別することができる。そのような情報は、ケイパビリティ内における追加情報として直接指定することができるが、いくつかの例示的な実装形態では、ケイパビリティ内に既に提供されている他の情報の状態から推論することができる。例えば、1つの特定の実装形態では、実行ビットが設定されているときに、ケイパビリティは不変であるとみなされ、ケイパビリティによって指定された情報は、命令実行から生じ得るポインタ値の通常の増分を介する場合を除いて、タグビットをクリアする(事実上ケイパビリティを無効化する)ことなく修正することができない。
【0073】
図4に示すように、例示的な一実装形態では、許可フィールドは、信頼レベル指標フィールド136を提供するように拡張され、信頼レベル指標は、ケイパビリティ100に関連付けられた信頼レベルを識別する。信頼レベルは、ケイパビリティ100のフィールド136に直接符号化することができるか、又は代替的に、信頼レベル指標フィールド136は、信頼レベル情報を含むメモリアドレスを示すために使用される識別子を提供することができる。このような識別子は、信頼レベル情報のメモリロケーションを直接示すことができるか、又は、例えば、信頼レベル情報を含むロケーションを識別するために、システムにおけるグローバルレジスタに記憶されたアドレスに適用することができるオフセットを指定することができる。
【0074】
図5Aは、例示的な一実装形態による、ケイパビリティ信頼レベル情報がメモリへのアクセスを制約するためにどのように使用されるかを概略的に例示するブロック図である。この例では、処理回路150は、メモリアドレスが所与のケイパビリティを使用して生成されるアクセス要求が考慮されているときに、所与のケイパビリティによって識別される制約情報に基づいてそのアクセス要求が許可されるかどうかを判定するためのケイパビリティチェック動作を実施するために使用され得るケイパビリティチェックブロック155を含む。したがって、ケイパビリティチェックは、アクセスに進むことを許可されるかどうかを判定するために、ケイパビリティの範囲及び許可情報への参照を伴い得る。ケイパビリティチェックに不合格であった場合、不合格指標を処理回路に提供することができ、これは、例えば、障害信号などの様々な形態を採ることができる。しかしながら、ケイパビリティチェックに合格した場合、これは、信頼レベル生成ブロック160に示され、信頼レベル生成ブロック160は、ケイパビリティ100のケイパビリティ信頼レベル情報136も受信する。
【0075】
ケイパビリティ信頼レベルに加えて、信頼レベル生成ブロック160はまた、現在のモード信頼レベルの指標を受信し、これは、処理回路の現在の動作モードに関連付けられた信頼レベルである。次いで、ケイパビリティ信頼レベル及び現在のモード信頼レベルの両方が、アクセス要求に対する信頼レベルを形成するために組み合わせて使用され、アクセス要求は、パス165を介して発行された要求のメモリアドレスに関連してパス167を介して伝搬される。信頼レベル生成ブロック160が、現在のモード信頼レベル及びケイパビリティ信頼レベルの両方を使用して、アクセス要求に対する信頼レベルを決定することができる様々な方法があるが、例示的な一実装形態では、アクセス要求に関連付けられた信頼レベルは、現在のモード信頼レベル及びケイパビリティ信頼レベルのうちの、より低い信頼レベルを表す方に制約される。
【0076】
メモリアクセスチェック回路170は、要求のメモリアドレス、及びアクセス要求に対する関連付けられた信頼レベルの両方を受信し、異なるメモリ領域に対して指定され得る記憶されたアクセス許可情報175を参照して、メモリアクセスチェック動作を実施することができる。特に、いくつかの異なるメモリ領域の各々について、アクセス許可情報は、アクセスに進むことを可能にするためにアクセス要求に提供される必要がある要求される信頼レベルを効果的に示すことができる。パス167を介して受信されたアクセス要求に対する信頼レベルが、要求された信頼レベルを満たさない場合、アクセスは不合格にされ得、そうでない場合、メモリへのアクセスは、メモリアクセスチェック回路170からパス180を介して伝搬させることができる。
【0077】
先に論じたように、本明細書で説明する技法によれば、個々のケイパビリティに関連するケイパビリティ信頼レベルの提供は、オブジェクトタイプ及び開封許可を示すために不十分なメタデータビットを利用する必要性を回避し、鍵を開封する必要性も回避する、封止されたケイパビリティを操作するための軽量機構を提供するためにも活用される。
【0078】
特に、本明細書で説明する技法によれば、関連付けられたケイパビリティが封止されているか、又は開封されているかを識別するために、封止フラグフィールド138がケイパビリティに追加され、この封止フラグフィールド138は
図4に例示されている(本明細書ではIsSealedフラグと呼ばれることもある)。一実装形態では、これは、ケイパビリティが封止されていることを示す一方の状態(例えば、ロジック1値)と、ケイパビリティが開封されていることを示す他方の状態(例えば、ロジック0値)とを有する単一ビットであり得る。しかしながら、封止フラグが単一のビット値である必要はなく、いくつかの実装形態では、いくつかの追加情報を取り込むためにマルチビット値が使用され得る。
【0079】
更に、
図5Aに示されるように、封止されたケイパビリティ操作回路185は、封止されたケイパビリティをどのように操作するかを判定するために使用される。封止されたケイパビリティ操作回路185は、別個の構成要素として提供されてもよく、又は
図5Aに示されるように処理回路150内に組み込まれてもよい。封止されたケイパビリティを操作するとき、封止されたケイパビリティ操作回路185は、封止キー又は開封キーを使用する必要はないが、代わりに、処理回路150に関連付けられた現在のモード信頼レベルと組み合わせて、所与のケイパビリティがどのように操作されるべきかを査定するために、その所与のケイパビリティに関連して取り込まれたケイパビリティ信頼レベルの情報を参照することができる。この情報に基づいて、封止されたケイパビリティ操作回路185は、例えば、所与のケイパビリティを封止することができるかどうかを判定することができ、その場合、必要なのは、封止されたケイパビリティ操作回路が封止フラグを設定させることだけであり、所与の封止されたケイパビリティを開封することができるかどうかを判定することができ、その場合、必要なのは、封止されたケイパビリティ操作回路が封止フラグをクリアさせることだけであり、封止されたケイパビリティのケイパビリティ信頼レベルと処理回路の現在のモード信頼レベルとの比較に応じて、処理回路によって封止されたケイパビリティをどのように使用することができるかを判定することができる。
【0080】
図5Bは、例示的な一実施形態における
図5Aの回路の動作を例示する流れ図である。ステップ200において、アクセス要求が必要であると判定される。その後、ステップ205において、アクセス要求に対して指定されたケイパビリティが封止されたケイパビリティであるか否かが判定される。そうである場合、ステップ210において、封止されたケイパビリティの使用が可能になるかどうかが判定され得る。いくつかの実装形態では、メモリアドレスを生成するために封止されたケイパビリティを逆参照することができない場合が常にあり得(その代わりに、そのような封止されたケイパビリティが最初に開封される必要がある)、その場合、プロセスは、ステップ210のチェックを実施する必要なしに直接ステップ215に進むことができ、それによってアクセス要求が防止される。しかしながら、いくつかの実装形態では、処理回路の現在のモードの相対的な信頼レベル及び指定されたケイパビリティのケイパビリティ信頼レベルに応じて、最初に開封される必要なく、封止されたケイパビリティが使用されるように提供されてもよい。例えば、一実装形態では、現在のモード信頼レベルがケイパビリティ信頼レベル以上である場合、封止されたケイパビリティの使用が可能になり得る。
【0081】
したがって、ステップ210において、封止されたケイパビリティの使用が可能であると判定された場合、プロセスはステップ220に進み、実際には、先のステップ205において、指定されたケイパビリティが封止されたケイパビリティではないと判定された場合もステップ220に進む。しかしながら、ステップ210において、封止されたケイパビリティの使用が可能でないと判定された場合、プロセスはステップ215に進み、アクセス要求の発生が防止される。アクセス要求が防止され得るいくつかの方法がある。例えば、ケイパビリティチェック失敗信号がアサートされ得るか、又は、アクセス要求が封止されたケイパビリティを使用して試みられたことを識別するために、何らかの他の活動を行うことができる。
【0082】
プロセスがステップ220に進むと仮定すると、そのステップにおいて、アクセス要求のためのメモリアドレスが、指定されたケイパビリティのポインタ値を参照して判定される。ステップ225において、アクセスを進めることができるかどうかを判定するために、指定されたケイパビリティの境界及び許可情報を参照して、ケイパビリティチェックが実施される。
【0083】
したがって、ステップ230において、ケイパビリティチェックに合格したかどうかが判定され、合格していない場合、プロセスはステップ235に進み、ケイパビリティチェック失敗信号がアサートされる。ステップ235は、例示的な一実装形態では、ステップ215と同じ方法で実装され得る。
【0084】
典型的には、ステップ225でケイパビリティチェックを実施するとき、信頼レベル情報は使用されないが、代わりに、メモリアクセスチェック回路170に渡すために保持される。しかしながら、いくつかの実装形態では、信頼レベル情報は、ケイパビリティチェックプロセス中に使用することもできる。例えば、処理回路は、所与のアクセス要求のためのメモリアドレスを生成するために使用されているケイパビリティに関連付けられたケイパビリティ信頼レベルが、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベルを超える状況において、そのアクセス要求によって識別されたアクセスを実施する試みがなされたときに、ステップ235で障害信号を発行するように配設され得る。特に、いくつかの実装形態では、ある特定の信頼レベルで動作する処理回路が、より高いケイパビリティ信頼レベルを有するケイパビリティを利用しようとすることは、正しくない挙動であるとみなされ得る。
【0085】
ステップ230において、ケイパビリティチェックに合格したと判定される場合、次いで、ステップ240において、現在のモード信頼レベル及びケイパビリティ信頼レベルの両方に基づいて、信頼レベル生成ブロック160によって、アクセス要求に対する信頼レベルが判定される。その後、ステップ245において、アクセス要求は、アクセス要求に対する判定された信頼レベルと共にメモリアクセスチェック回路170に伝搬され、その結果、メモリアクセスチェック回路170は、アクセス要求に対するその示された信頼レベルに基づいて、アクセス許可チェックを実施することができる。
【0086】
図6は、例示的な一実装形態による、封止要求を処理するときに実施されるステップを例示する流れ図である。封止要求は、様々な方法で生成され得るが、例示的な一実装形態では、処理回路が封止命令を実行した結果として生じ得る。ステップ300において、封止要求が受信されたかどうかが判定され、そうである場合、任意選択のステップとして、ステップ305において、現在のモード信頼レベルにおいて封止が可能であるかどうかが判定され得る。いくつかの実装形態では、実装形態は原則として、以下で説明する更なるチェックを条件として、任意の現在のモード信頼レベルで封止することを可能にし得るので、そのようなチェックは不要であるとみなされ得る。しかしながら、代替的な実装形態では、封止をある特定の動作モードに限定することができ、その場合、ステップ305でのチェックを実施することができる。
【0087】
現在のモード信頼レベルにおいて封止が可能でないと判定された場合、ステップ310において、識別されたケイパビリティの封止が防止される。ステップ310において、装置は、例えば、失敗信号をアサートすることによって、又はある特定の状態フラグを更新することによって、封止プロセスの失敗を識別するための情報を更に出力し得る。しかしながら、代替的な実装形態では、封止の失敗は、後の段階で、例えば後続の開封プロセス中にピックアップされるように配設することができるので、封止プロセスの成功又は失敗の何らかの指標を出力することは不要であると考えることができる。
【0088】
ステップ305において、現在のモード信頼レベルにおいて封止が可能であると判定された場合、又は任意選択のステップ305が実施されない場合にステップ300において封止要求が受信されたときはいつでも、プロセスはステップ315に進み、識別されたケイパビリティのケイパビリティ信頼レベルが判定される。
図4を参照して前述したように、この情報は、例えば、ケイパビリティにおいて、特に信頼レベル指標フィールド136において直接利用可能であってもよい。
【0089】
ステップ320では、次いで、封止されたケイパビリティ操作回路185は、処理回路の現在のモード信頼レベルが、識別されたケイパビリティのケイパビリティ信頼レベル以上であるかどうかを判定する。そうでない場合、プロセスはステップ310に進み、識別されたケイパビリティの封止が防止される。
【0090】
しかしながら、現在のモード信頼レベルがケイパビリティ信頼レベル以上であると仮定すると、プロセスはステップ325に進み、識別されたケイパビリティは、封止フラグ138を設定することによって封止される。ステップ310を参照して前述したのとほぼ同じ方法で、所望であれば、装置は、ケイパビリティの封止が成功したことを示す情報を出力するように配設されてもよい。しかしながら、例示的な一実装形態では、封止が成功したと仮定され、したがって情報は出力されない。封止が失敗であった場合、これは、ステップ310において出力された情報によって示されてもよく、又は、先に述べたように、後の段階で、例えば、ケイパビリティの開封中にピックアップされてもよい。
【0091】
図7は、開封要求が受信されたことに応答して実施されるステップを例示する流れ図である。ステップ350でそのような要求が受信されると、任意選択のステップ355として、現在のモード信頼レベルで開封が可能であるかどうかを判定することができる。
図6の封止プロセスにおける同等のステップ305に関して前述したように、必要に応じて、開封する能力を特定の動作モードに限定することができる。しかしながら、例示的な一実装形態では、そのような一般的な制限は課されず、したがって、ステップ355は必要とされない。
【0092】
ステップ355が実装され、現在のモード信頼レベルにおいて開封が可能でないと判定された場合、ステップ360において、識別されたケイパビリティの開封が防止される。開封が失敗したことを識別するために、この時点で情報が出力されてもよい。例えば、障害信号を発生させることができ、あるいはソフトウェアに障害を示すために1つ以上の状態フラグを設定することができる。別の例として、失敗した開封動作は静かに失敗する場合があり、開封が成功したことを示す情報が生成されず、後で開封動作が失敗したことを判定するために使用される。
【0093】
ステップ355において、現在のモード信頼レベルにおいて開封が可能であると判定された場合、又はステップ355が必要とされない場合にステップ350における開封要求に直接応答して、プロセスはステップ365に進み、識別されたケイパビリティのケイパビリティ信頼レベルが、信頼レベル指標フィールド136を参照して判定される。
【0094】
次に、ステップ370において、現在のモード信頼レベルがケイパビリティ信頼レベル以上であるかどうかが判定され、そうでない場合、ステップ360において、識別されたケイパビリティの開封が防止される。
【0095】
しかしながら、現在のモード信頼レベルがケイパビリティ信頼レベル以上であると仮定すると、ステップ375において、封止フラグをクリアすることによって、識別されたケイパビリティが開封される。必要に応じて、この時点で情報を出力して、ケイパビリティの開封が成功したことを示すことができる。特定の一実装形態では、この時点で2つの出力信号が生成される。第1の信号は、ケイパビリティが封止され、首尾よく開封されたことを識別するために使用され、第2の信号は、処理回路の同じモード信頼レベルから、ケイパビリティが封止され、開封されたかどうかを識別することができる。したがって、第2の信号は、ケイパビリティが現在のモード信頼レベルに関連付けられたことを示すために使用することができ、これは、いくつかの実装形態では、例えば、ケイパビリティがそれを参照しようとしているコンテキストと同じコンテキストによって生成されたことを保証するために、ソフトウェアにとって有用であり得る。
【0096】
図8は、システム内に存在し得る様々な異なるモード信頼レベルを概略的に例示する図であり、そのような配設においてサポートされ得る封止/開封能力を示す。
図8に示されるように、処理回路は、セキュアドメイン及び低セキュアドメインにおいて動作するように配設され得、現在のモード信頼レベルは、現在のプログラムコードがそれらのセキュリティドメインのうちのいずれにおいて実行されるかに依存し得る。加えて、又は代替的に、処理回路は、複数の異なる状態でプログラムコードを実行するように配設され得、
図8の例では、特権状態又は非特権状態でプログラムコードを動作させるように配設され得る。特権のレベル及び異なるセキュリティドメインは、直交信頼レベルであるとみなすことができ、処理回路の異なるモード信頼レベルは、セキュア/低セキュアドメイン及び特権/非特権状態の各組み合わせに関連付けられ得る。したがって、
図8に示すように、示される例では、4つの異なる信頼レベルがあり得る。
【0097】
先に説明した封止及び開封能力に関して、
図8の矢印によって示されるように、処理回路がセキュアモード及び特権モードで動作しているとき、処理回路は、ケイパビリティ信頼レベルが他の3つの信頼レベル動作モードのいずれかに関連付けられているケイパビリティを封止及び開封することが可能であり得る。また、円形の矢印によって示されるように、それはまた、ケイパビリティ信頼レベルがセキュア特権の信頼レベルを示すケイパビリティに対して封止及び開封動作を実施することができる。
【0098】
同様に、処理回路が低セキュア特権モードで動作しているとき、処理回路は、低セキュア非特権の信頼レベルに関連付けられたケイパビリティに関連して封止及び開封動作を実施することができ、再び、
図8の円形矢印によって示されるように、それ自体の信頼レベルに関連付けられたケイパビリティを封止及び開封することができる場合がある。更に、必要に応じて、処理回路がセキュア非特権モードで動作しているとき、処理回路は、低セキュア非特権の信頼レベルに関連付けられたケイパビリティを封止及び開封することが可能であってもよく、再び、それ自体の信頼レベルに関連付けられたケイパビリティを封止及び開封することも可能であってもよい。最後に、低セキュア非特権モードでは、処理回路は、低セキュア非特権の信頼レベルに関連付けられたケイパビリティを封止及び開封することしかできない場合がある。
【0099】
図8は、4つの異なる信頼レベルを示すが、本明細書で説明される技法は、そのような構成に限定されず、
図8に示される直交方向のいずれか又は両方で、追加の信頼レベルが提供され得ることが理解されよう。特権及び非特権モード動作は、様々な形態を採ることができるが、純粋に例として、特権モードは、いくつかの実装形態では、ハンドラモードと称され得、非特権モードは、スレッドモードと称され得る。ハンドラモードは、典型的には、例外処理のために使用され、したがって、例えば、信頼された例外処理ルーチンは、ハンドラモードで実行され得る。スレッドモードは、典型的には、複数の異なるスレッド、例えば、複数の異なるアプリケーションスレッドを実行するために使用される。
【0100】
図9A及び
図9Bは、封止されたケイパビリティの使用を考慮するときに採ることができる異なる手法を例示する流れ図である。最初に、
図9Aに示されるように、ステップ400において、要求が、封止されたケイパビリティを使用するように試みられる場合、ステップ405において、そのような使用は、例示的な一実装形態によると、現在のモード信頼レベルにかかわらず、防止され得る。特に、
図9Aに例示される実装形態によれば、システムは、最初に開封された場合にのみ、封止されたケイパビリティの使用が可能になる。したがって、そのような実装形態では、封止されたケイパビリティに関して試みられるすべての処理動作が失敗する。しかしながら、処理回路は、依然として、記憶構造間、例えば、レジスタとメモリとの間、又は異なるレジスタ間で、封止されたケイパビリティを移動させることが可能であり得ることに留意されたい。更に、例示的な一実装形態では、通常、ケイパビリティに関連付けられた前述のタグビットをクリアすることによって、封止されたケイパビリティを無効にすることが依然として可能であり得る。
【0101】
図9Bは、封止されたケイパビリティの何らかの使用がある特定の状況において可能になり得る代替的な実装形態を例示する流れ図である。したがって、ステップ410において、要求が封止されたケイパビリティを使用しようと試みていると判定された場合、ステップ415において、現在のモード信頼レベルがケイパビリティ信頼レベル以上であるかどうかが判定される。そうでない場合には、ステップ420において、封止されたケイパビリティの使用が防止されるが、そうでない場合には、プロセスはステップ425に進み、問題の特定の使用が、封止されたケイパビリティに対して実施可能であるタイプの使用であるかどうかが判定される。そうでない場合には、再び、ステップ420において、封止されたケイパビリティの使用が防止されるが、そうでない場合には、プロセスはステップ430に進み、要求された動作は、使用を進めることを可能にする前に実施され得る任意の通常のチェックを条件として、封止されたケイパビリティを使用して実施可能になる。
【0102】
先のステップ425に関して、封止されたケイパビリティの使用は、特定のタイプの動作に制限され得る。例えば、現在のモード信頼レベルが、封止されたケイパビリティのケイパビリティ信頼レベル以上であるとき、処理回路は、メモリアドレスを生成するために、その封止されたケイパビリティを使用して逆参照動作を実施することが可能になり得る。これは、それが使用される前にケイパビリティを開封する必要性を回避することによって、いくつかの性能利益を生じさせることができる。
【0103】
想定され得る別のタイプの処理動作は、封止されたケイパビリティの修正であり、再び、これは、いくつかの事例においてサポートされ得る。特に、
図10は、ケイパビリティを修正する要求を操作するときに実施され得るステップを例示する流れ図である。
図10に示すように、ステップ450において、ケイパビリティを修正する要求が受信された場合、ステップ455において、ケイパビリティが封止されているかどうかが判定される。そうでない場合、プロセスはステップ460に進み、ケイパビリティを修正することができるかどうかを判定するために必要な通常のチェックが実施される。
【0104】
しかしながら、ケイパビリティが封止されている場合、随意に、ステップ465において、処理回路の現在の動作モードに関連付けられた信頼レベルが、ケイパビリティの修正が行われることを可能にするのに十分であるかどうかが判定されてもよい。これは、例えば、現在のモード信頼レベルがケイパビリティ信頼レベル以上である場合であり得る。そうである場合、プロセスは前述のステップ460に進み、通常のチェックを実施することができる。しかしながら、信頼レベルが不十分である場合、プロセスは代わりにステップ470に進むことができ、ケイパビリティに対する修正が防止されるか、又は代わりにケイパビリティが無効にされる。任意選択のステップ465が省略される代替的な実装形態では、ケイパビリティが封止されている場合、プロセスは、ステップ455からステップ470に直接進んで、ケイパビリティの修正を防止するか、又はケイパビリティを無効にすることができる。
【0105】
図6~
図10を参照して説明した上記の例のすべてにおいて、現在のモード信頼レベルがケイパビリティ信頼レベルと比較されたとき、現在のモード信頼レベルがケイパビリティ信頼レベル以上であるときはいつでも、説明した活動が許可され得ると仮定される。代替的な実装形態では、それらの活動を実施する能力は、現在のモード信頼レベルがケイパビリティ信頼レベルに一致する状況に制限され得る。
【0106】
メモリからケイパビリティレジスタ60、80のうちの1つにケイパビリティをロードするとき、処理回路は、ある特定の状況において、ケイパビリティ信頼レベルを選択的に修正するように配設され得、この手法の例示的な一実装形態が、
図11に示される。ステップ500において、メモリからのケイパビリティのロードが要求されているかどうかが判定される。ステップ505において、ロード動作のために識別されたケイパビリティが封止されたケイパビリティであるかどうかが判定される。そうである場合、プロセスはステップ515に進み、ケイパビリティが、ロード動作のために、識別されたケイパビリティレジスタに修正されない形で記憶される。特に、封止されたケイパビリティの特性のために、ロード動作中になされるべきケイパビリティ信頼レベルのいかなる変更にも不適切である。更に、封止されたケイパビリティの使用を制御するために封止されたケイパビリティ操作回路185によって採用される前述の機構により、封止されたケイパビリティをケイパビリティレジスタにロードするときに、ケイパビリティ信頼レベルの低減が行われなくても、封止されたケイパビリティに対してセキュリティを依然として保証することができる。
【0107】
ステップ505において、ケイパビリティが封止されたケイパビリティではないと判定された場合、プロセスはステップ510に進み、現在のモード信頼レベルが、メモリからロードされるケイパビリティのケイパビリティ信頼レベル未満であるかどうかが判定される。そうでない場合、例示的な一実装形態では、プロセスはステップ515に進み、ケイパビリティは、ケイパビリティレジスタ内に修正されずに記憶される。
【0108】
しかしながら、
図11に示される技法によれば、現在のモード信頼レベルがケイパビリティ信頼レベル未満である場合、プロセスはステップ520に進み、現在のモード信頼レベルがもはやケイパビリティ信頼レベル未満にならないように、ケイパビリティレジスタに記憶されているケイパビリティのコピーに関連付けられたケイパビリティ信頼レベルがデモートされる。そのようなアプローチによって、メモリからロードされているケイパビリティが、より高い関連付けられた特権レベルを有する場合であっても、処理回路のケイパビリティレジスタにロードされる結果として生じるケイパビリティは、現在のモード信頼レベルで動作するときに処理回路によってアクセスされるべきではないメモリにアクセスするために使用され得ないように、デモートされたそのケイパビリティ信頼レベルを有することが保証され得る。逆に、メモリにおけるケイパビリティが、現在のモード信頼レベルよりも低い信頼レベルを有する場合、その信頼レベルは、ケイパビリティレジスタに移動されるときに「そのまま」のままである。これは、ケイパビリティの偶発的なプロモーションを回避することができ、例えば、例外ハンドラがスタックされた値を偶発的にプロモーションさせる場合を回避することができる。
【0109】
例示的な一実装形態では、ケイパビリティロードプロセスは、特定の状況において、汎用データをケイパビリティではなくケイパビリティレジスタにロードするために使用されることが可能である。これは、ステップ500で検出することができ、実際にロード動作が汎用データをロードするために使用されている場合、ケイパビリティ内のケイパビリティ信頼レベルを指定するビットの選択的なデモーションを防止することができ、したがって、ロードされているデータの破損を回避することができる。
【0110】
図11のステップ520によって示されるように、ケイパビリティ信頼レベルを選択的にデモートする能力は、例えば、制御レジスタ90内に記憶された制御情報を条件とすることによって、構成可能にすることができる。ケイパビリティの選択的なデモーションは、ある特定のタイプのケイパビリティに対してディセーブルすることもでき(既に上述した封止されたケイパビリティに加えて)、したがって、例えば、ロードされているケイパビリティが不変ケイパビリティであるときにディセーブルすることができる。そのような能力は、例えば、不変ケイパビリティを修正することなく、非特権動作モード内から特権不変ケイパビリティをスピルすることを可能にするために有益であり得る。更に、上述したように、メモリからロードされているケイパビリティの選択的なデモーションを条件付きでイネーブル又はディセーブルするために使用される制御情報は、制御レジスタに記憶することができるが、その制御情報は、他のロケーションに、例えば、ケイパビリティ自体内のフィールドとして、又は、例えば、MPU領域属性に基づくデモーションをイネーブルするように、記憶することもできる。この後者のアプローチでは、読み出し専用としてマークされたMPU領域(例えば、コードメモリ)からケイパビリティがロードされる場合、デモーションが発生するが、関連する領域が読み出し-書き込みとしてマークされる場合(例えば、ヒープ又はスタックメモリ)にはデモーションが発生しないように、機構を配設することができる。いくつかの実装形態では、MPUにおける専用制御ビットを使用して、挙動を指示することができる。
【0111】
図12は、ある所定のタイプのケイパビリティに対して、ケイパビリティの開封をどのように選択的に禁止することができるかを例示する流れ図である。特に、ステップ550で開封要求が受信されると、ステップ555で、識別されたケイパビリティが所定のタイプであるかどうかが判定される。そうでない場合、ステップ565において、プロセスは、先に論じた
図7の残りの部分のように進む。しかしながら、ステップ555において、識別されたケイパビリティが所定のタイプである場合、プロセスはステップ560に進み、識別されたケイパビリティの開封が防止される。
図7のステップ360を説明する際に前述したように、識別されたケイパビリティの開封が行われていないことを識別するために、所望であれば様々な情報を出力することができ、この場合、例えば、所定のタイプのケイパビリティを開封する試みが行われたことを示すフラグを立てるか、又はエラーをアサートすることができる。別のオプションとして、又は加えて、タグビットは、ケイパビリティを無効にするためにクリアされ得る。
【0112】
上記のプロセスが採用され得る所定のタイプのケイパビリティは、様々な形態を採ることができるが、例えば、特定のイベント又は機能を示すためにアーキテクチャによって使用される1つ以上のタイプのケイパビリティであってもよい。そのような予約タイプのケイパビリティが識別され得るいくつかの方法が存在する。特定の例として、それらは、例えば、上限が下限を下回ることによって、無効な範囲を定義する範囲境界情報を有し得る。
【0113】
必要に応じて、先に説明した封止フラグに加えて、ケイパビリティに1つ以上の余分なフィールドを設けて、そのケイパビリティを使用することができる特定の目的を識別するために使用される追加の指標を提供することができる。更に、必要に応じて、ケイパビリティ内で符号化されたアドレス値は、メモリアドレスを直接識別するのではなく、ソフトウェアがそれ自体のレコードに対して検証することを可能にする間接参照を提供することができる。
【0114】
図13は、使用され得るシミュレータ実装形態を例示する。前述の例は、当該技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、本明細書に記載の例による命令実行環境を提供することも可能であり、命令実行環境は、コンピュータプログラムの使用により実施される。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータと称されることがよくある。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータ実装形態は、ホストプロセッサ615で実行し得、ホストプロセッサ615は、任意選択的に、ホストオペレーティングシステム610を実行し、ホストオペレーティングシステム610は、シミュレータプログラム605をサポートする。いくつかの配設では、ハードウェアと提供された命令実行環境との間に複数層のシミュレーションがあり得、かつ/又は、複数の異なる命令実行環境が同じホストプロセッサ上に提供され得る。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなど一定の状況では、正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬、USENIX Conference、第53~63頁に記載されている。
【0115】
例が、特定のハードウェア構築又は特徴を参照して前述されている程度に、シミュレーションされた実装では、同等の機能が、好適なソフトウェア構築又は特徴によって提供され得る。例えば、特定の回路は、シミュレーションされた実装では、コンピュータプログラムロジックとして提供され得る。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実装では、ソフトウェアデータ構造として提供され得る。また、ハードウェア装置2内のメモリ50にアクセスするために使用される物理アドレス空間は、シミュレートされたアドレス空間としてエミュレートされ得、シミュレートされたアドレス空間は、ホストオペレーティングシステム610によって使用される仮想アドレス空間に、シミュレータ605によってマッピングされている。前述の例で言及されているハードウェア要素のうち1つ以上がホストハードウェア(例えば、ホストプロセッサ615)に存在する配設では、いくつかのシミュレートされた実装形態は、好適である場合、ホストハードウェアを使用し得る。
【0116】
シミュレータプログラム605は、(非一時的媒体であり得る)コンピュータ読み取り可能な記憶媒体に記憶され得、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード600への仮想ハードウェアインタフェース(命令実行環境)を提供し、仮想ハードウェアインタフェースは、シミュレータプログラム605によってモデル化されたハードウェアアーキテクチャのハードウェアインタフェースと同じである。したがって、ターゲットコード600のプログラム命令は、シミュレータプログラム605を使用して命令実行環境内から実行され得、このため、上で考察される装置2のハードウェア特徴を実際には有しないホストコンピュータ615は、これらの特徴をエミュレートすることができる。シミュレータプログラムは、処理パイプライン4の挙動をエミュレートするための処理プログラムロジック620と、
図1のハードウェア装置2のケイパビリティチェック回路33及びメモリアクセスチェック回路52の挙動をエミュレートするためのチェックプログラムロジック622と、封止されたケイパビリティ操作回路185の挙動をエミュレートするための封止されたケイパビリティ操作プログラムロジック605とを含み得る。したがって、ケイパビリティ及びそれらの関連付けられたケイパビリティ信頼レベルを管理するための本明細書で説明される技法は、封止されたケイパビリティを操作するための説明された技法と共に、
図13の例では、シミュレータプログラム605によってソフトウェアで実施され得る。
【0117】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配設又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0118】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されないこと、及び添付の特許請求の範囲によって規定される本発明の範囲及び趣旨から逸脱することなく、当業者によって様々な変更、追加、及び修正が当業者によって実施され得ることが理解されるであろう。例えば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴でなされ得る。
【国際調査報告】