(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-23
(54)【発明の名称】ケイパビリティを使用してメモリへのアクセスを制約するための技法
(51)【国際特許分類】
G06F 12/14 20060101AFI20240416BHJP
G06F 12/06 20060101ALI20240416BHJP
G06F 12/02 20060101ALI20240416BHJP
G06F 12/00 20060101ALI20240416BHJP
【FI】
G06F12/14 510D
G06F12/06 550A
G06F12/02 510A
G06F12/00 594
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023563870
(86)(22)【出願日】2022-02-17
(85)【翻訳文提出日】2023-11-01
(86)【国際出願番号】 GB2022050430
(87)【国際公開番号】W WO2022234243
(87)【国際公開日】2022-11-10
(32)【優先日】2021-05-04
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ボットマン、フランソワ クリストファー ジャック
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】スミス、ブラッドリー ジョン
【テーマコード(参考)】
5B017
5B160
【Fターム(参考)】
5B017AA07
5B017BA01
5B017BB03
5B017CA01
5B160AA07
5B160AA13
5B160AB23
(57)【要約】
メモリアクセスを制約するための装置、方法及びコンピュータプログラムが提供される。この装置は、メモリへのアクセス要求がその間に生成される動作を実施する処理回路を備える。処理回路は、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている。この装置は、所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路を更に備える。ケイパビリティチェック動作は、所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することと、判定条件が満たされているとき、範囲制約情報と処理回路の動作の実施中に動的に変動する装置の状態情報項目の両方に依存して範囲チェックを実施することと、を含む。
【選択図】
図9
【特許請求の範囲】
【請求項1】
装置であって、
メモリへのアクセス要求がその間に生成される動作を実施する処理回路であって、前記処理回路が、制約情報を識別するケイパビリティを使用して前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、
所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、前記所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路であって、前記ケイパビリティチェック動作が、前記所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む、ケイパビリティチェック回路と、
を備え、
前記ケイパビリティチェック回路は、判定条件が満たされているとき、前記範囲制約情報と前記処理回路の前記動作の実施中に動的に変動する前記装置の状態情報項目の両方に依存して前記範囲チェックを実施するように更に構成される、
装置。
【請求項2】
前記状態情報項目が、メモリ領域内のロケーションを指すポインタ値である、請求項1に記載の装置。
【請求項3】
前記ポインタ値がスタックポインタ値であり、前記メモリ領域がスタックとして使用されるように構成される、請求項2に記載の装置。
【請求項4】
前記ケイパビリティチェック回路は、前記判定条件が満たされているとき、前記範囲制約情報から導き出される第1の境界及び第2の境界に基づいて、前記範囲チェックを実施するように更に構成され、前記第2の境界は、前記第2の境界をより限定的にする前記範囲制約情報及び前記ポインタ値のうちのいずれかから導き出される、請求項2又は請求項3に記載の装置。
【請求項5】
前記ケイパビリティチェック回路は、前記第1の境界と前記第2の境界との間に境界画定された許容メモリ領域内に前記メモリアドレスがあるとき、前記メモリアクセスを許可するように更に構成される、請求項4に記載の装置。
【請求項6】
前記ケイパビリティチェック回路は、前記所与のケイパビリティが判定タイプのものであるとき、前記判定条件が満たされていると判定するように構成される、請求項1~5のいずれか一項に記載の装置。
【請求項7】
前記所与のケイパビリティの前記所与の制約情報は、前記所与のケイパビリティが前記判定タイプのものであるかどうかを示すための動的チェック指示メタデータを備える、請求項6に記載の装置。
【請求項8】
前記動的チェック指示メタデータが、前記所与のケイパビリティ内の専用メタデータフィールドを備える、請求項7に記載の装置。
【請求項9】
前記所与のケイパビリティは、前記所与のケイパビリティが指定タイプの更なるケイパビリティを参照するとき、前記判定タイプのものである、請求項6~8のいずれか一項に記載の装置。
【請求項10】
前記所与の制約情報が、前記更なるケイパビリティを識別するためのケイパビリティ指示メタデータを提供するように配設され、
前記更なるケイパビリティが、関連付けられたポインタ値及び関連付けられた制約情報を提供するように配設されており、前記関連付けられたポインタ値が、前記状態情報項目を形成する、
請求項9に記載の装置。
【請求項11】
前記更なるケイパビリティがスタックポインタケイパビリティであり、
前記処理回路は、対応するスタックポインタケイパビリティを有するメモリ内の対応する関連スタックを各々が有する複数の動作モードを有し、
前記ケイパビリティ指示メタデータは、どの対応するスタックポインタケイパビリティが前記状態情報項目を形成するかを識別するためのスタックポインタ指示メタデータを提供するように配設される、
請求項10に記載の装置。
【請求項12】
各ケイパビリティの前記制約情報が、許可ビットの第1のサブセット及び許可ビットの第2のサブセットを備え、
前記所与のケイパビリティが前記判定タイプのものであるとき、前記許可ビットの第1のサブセットは、前記ケイパビリティ指示メタデータを提供するために再利用される、
請求項10又は11に記載の装置。
【請求項13】
前記ケイパビリティチェック回路は、前記所与のケイパビリティが前記判定タイプのものであるとき、前記許可ビットの第2のサブセット及び推論された第1の許可ビットのセットから前記所与のケイパビリティの許可を判定するように構成される、請求項12に記載の装置。
【請求項14】
前記推論された第1の許可ビットのセットが、前記指定タイプの前記更なるケイパビリティによって提供される等価の許可ビットの値によって判定される、請求項13に記載の装置。
【請求項15】
前記許可ビットの第1のサブセットは、前記所与のケイパビリティによって提供される所与のポインタ値が、読み出されるデータ項目のためのメモリアドレスを生成するために使用されることを許可されるかどうかを示す読み出し許可ビットと、前記所与のケイパビリティによって提供される前記所与のポインタ値を、前記処理回路による実行のためにフェッチされる命令のためのメモリアドレスを生成するために使用されることを許可されるかどうかを示す実行許可ビットと、を備える、請求項12~14のいずれか一項に記載の装置。
【請求項16】
前記指定タイプの前記更なるケイパビリティの前記制約情報が、前記更なるケイパビリティが前記判定タイプのものであることを示すように設定された動的チェック指示メタデータを備え、
前記装置が、既存のケイパビリティから導き出されたケイパビリティを生成するケイパビリティ生成回路を更に備え、
前記ケイパビリティ生成回路は、導き出されたケイパビリティが前記更なるケイパビリティから生成されるとき、その導き出されたケイパビリティについての前記動的チェック指示メタデータを前記更なるケイパビリティから継承させるように配設される、
請求項9~15のいずれか一項に記載の装置。
【請求項17】
既存のケイパビリティから導き出されたケイパビリティを生成するケイパビリティ生成回路を更に備え、
前記ケイパビリティ生成回路は、導き出されたケイパビリティが生成されるとき、その導き出されたケイパビリティが前記指定タイプの前記更なるケイパビリティから導き出されるかどうかに依存して、その導き出されたケイパビリティが動的チェック指示メタデータセットを有するように配設される、
請求項9~15のいずれか一項に記載の装置。
【請求項18】
前記ケイパビリティチェック回路は、前記判定条件が満たされているとき、前記所与の制約情報に基づいて、ケイパビリティのサブセットをメタデータに関連付けるルックアップテーブル内でルックアップを実施し、前記ルックアップが前記ルックアップテーブル内でヒットしたとき、前記メタデータに基づいて前記状態情報項目を判定するように構成される、請求項1~8のいずれか一項に記載の装置。
【請求項19】
前記ケイパビリティチェック回路は、前記所与の制約情報内で識別されたインデックス情報を使用して前記ルックアップを実施するように更に構成される、請求項18のいずれか一項に記載の装置。
【請求項20】
前記メタデータが、前記所与のケイパビリティの許可を示す許可メタデータを更に備える、請求項19に記載の装置。
【請求項21】
前記処理回路は、前記所与のケイパビリティに関してケイパビリティ修正命令を実行しようとするとき、前記許可ビットの第1のサブセット内で識別される前記ケイパビリティ指示メタデータの修正を防止するように配設される、請求項12~15のいずれか一項に記載の装置。
【請求項22】
方法であって、
動作中に、制約情報を識別するケイパビリティを使用してメモリへのアクセス要求のためのメモリアドレスを生成するために、処理回路を採用することと、
所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、前記所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するためのケイパビリティチェック動作を実施するために、ケイパビリティチェック回路を採用することであって、前記ケイパビリティチェック動作が、前記所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む、ことと、
判定条件が満たされているとき、前記範囲制約情報と前記処理回路の前記動作の実施中に動的に変動する前記装置の状態情報項目の両方に依存して前記範囲チェックを実施するように、前記ケイパビリティチェック回路を配設することと、
を含む、方法。
【請求項23】
命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
メモリへのアクセス要求がその間に生成される動作を実施する処理プログラムロジックであって、前記処理プログラムロジックが、制約情報を識別するケイパビリティを使用して前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、
所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、前記所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェックプログラムロジックであって、前記ケイパビリティチェック動作が、前記所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む、ケイパビリティチェックプログラムロジックと、
を備え、
前記ケイパビリティチェックプログラムロジックは、判定条件が満たされているとき、前記範囲制約情報と前記処理プログラムロジックの前記動作の実施中に動的に変動する前記装置の状態情報項目の両方に依存して前記範囲チェックを実施するように更に構成される、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関し、より具体的には、ケイパビリティを使用したメモリへのアクセスの制約に関する。
【0002】
所与のプロセスに対して特定のケイパビリティが定義され、定義されたケイパビリティ外の動作を実行しようとする試みがある場合に、エラーがトリガされ得る、ケイパビリティベースのアーキテクチャへの関心が高まっている。ケイパビリティは、様々な形態を採ることができるが、ケイパビリティの1つのタイプは、有界ポインタ(「ファットポインタ」とも称され得る)である。
【0003】
ケイパビリティは、例えば、ケイパビリティから判定される定義領域内のメモリロケーションに関してのみ、かつ、同じくケイパビリティによって定義されるある許可チェックが満たされているときにのみ、ケイパビリティを参照して実施されるメモリへのアクセスを実施できるようにさせることによって、システム内のセキュリティ制御手段として使用され得る。
【0004】
前述の機構は、ケイパビリティによりアクセスされ得るメモリ領域に対する制限を提供するが、強制される境界は、参照されたケイパビリティ内で静的に定義される。その結果、ケイパビリティが定義されると、そのケイパビリティが存在する限り、定義されたケイパビリティを参照してメモリアクセスが実施され得る。したがって、この機構は、例えば、ケイパビリティを参照する処理回路の状態に基づいて、メモリ領域が動的に変動する状況を提供しない。
【0005】
いくつかの例示的な構成では、装置であって、メモリへのアクセス要求がその間に生成される動作を実施する処理回路であって、この処理回路が、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路であって、ケイパビリティチェック動作が、所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む、ケイパビリティチェック回路と、を備え、ケイパビリティチェック回路は、判定条件が満たされているとき、範囲制約情報と処理回路の動作の実施中に動的に変動する装置の状態情報項目の両方に依存して範囲チェックを実施するように更に構成される、装置が提供される。
【0006】
他の例示的な構成では、方法であって、動作中に、制約情報を識別するケイパビリティを使用してメモリへのアクセス要求のためのメモリアドレスを生成するために、処理回路を採用することと、所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェック回路を採用することであって、ケイパビリティチェック動作が、所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む、ことと、判定条件が満たされているとき、範囲制約情報と処理回路の動作の実施中に動的に変動する装置の状態情報項目の両方に依存して範囲チェックを実施するように、ケイパビリティチェック回路を配設することと、を含む、方法が提供される。
【0007】
他の例示的な構成では、命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、メモリへのアクセス要求がその間に生成される動作を実施する処理プログラムロジックであって、処理プログラムロジックが、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェックプログラムロジックであって、ケイパビリティチェック動作が、所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む、ケイパビリティチェックプログラムロジックと、を備え、ケイパビリティチェックプログラムロジックは、判定条件が満たされているとき、範囲制約情報と処理プログラムロジックの動作の実施中に動的に変動する装置の状態情報項目の両方に依存して範囲チェックを実施するように更に構成される、コンピュータプログラムが提供される。
【図面の簡単な説明】
【0008】
添付図面に示されるそれらの例示的な実装形態を参照して、あくまで一例として本技法を更に説明する。
【0009】
【
図1】いくつかの例示的な構成による装置のブロック図を概略的に示す。
【
図2】有界ポインタ記憶要素のセット内のポインタ値を設定しようとする又はそれにアクセスしようとする試みがある場合にエラーがトリガされ得る命令のタイプの例を示し、ポインタ値は、関連付けられた範囲情報によって示された範囲外のアドレスを指定するために使用される。
【
図3】いくつかの例示的な構成による、有界ポインタに関連するタグビットの使用を概略的に示す。
【
図4】いくつかの例示的な構成による、ケイパビリティの形態を概略的に示す。
【
図5a】いくつかの例示的な構成による、ケイパビリティチェック回路を備える装置の詳細を概略的に示す。
【
図5b】いくつかの例示的な構成による、ケイパビリティチェック回路を備える装置の詳細を概略的に示す。
【
図5c】いくつかの例示的な構成による、ケイパビリティチェック回路を備える装置の詳細を概略的に示す。
【
図5d】いくつかの例示的な構成による、ケイパビリティチェック回路と、ケイパビリティ生成回路と、を備える装置の詳細を概略的に示す。
【
図6】いくつかの例示的な構成による、既存のケイパビリティからのケイパビリティの導出を概略的に示す。
【
図7】いくつかの例示的な構成による、メモリアクセス要求に応答してケイパビリティチェック回路によって実施されるステップのシーケンスを概略的に図示する。
【
図8】いくつかの例示的な構成による、既存のケイパビリティに基づいて新しいケイパビリティを生成する命令に応答して、ケイパビリティ生成回路によって実施されるステップのシーケンスを概略的に図示する。
【
図9】いくつかの例示的な構成による、ケイパビリティ及びスタックポインタに基づいて定義されるアクセス可能なメモリ領域を概略的に示す。
【
図10】いくつかの例示的な構成による、装置の動作モードを概略的に示す。
【
図11】ケイパビリティの再利用された許可ビットを使用して、範囲チェック手順中に参照するための状態情報項目をそこから判定する、装置の関連する動作モードの符号化の形態を概略的に示す。
【
図12】いくつかの例示的な構成による、使用できるシミュレータを概略的に示す。
【0010】
いくつかの例示的な構成によれば、メモリへのアクセス要求がその間に生成される動作を実施する処理回路を有する装置が提供される。処理回路は、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている。更に、この装置は、所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路を備えている。ケイパビリティチェック動作は、所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することを含む。ケイパビリティチェック回路は、判定条件が満たされているとき、範囲制約情報と処理回路の動作の実施中に動的に変動する装置の状態情報項目の両方に依存して範囲チェックを実施するように更に構成される。
【0011】
ケイパビリティは、様々な形態をとることができるが、ケイパビリティの1つのタイプは、メモリアドレスを示すポインタ値と、ケイパビリティ内に符号化される範囲制約情報と、を備える有界ポインタ(「ファットポインタ」とも称され得る)である。各ケイパビリティ内で識別される範囲制約情報は、そのケイパビリティを使用して生成される(そのケイパビリティから導き出される)メモリ要求にアクセス可能なメモリ領域を制約するために提供される。許可領域内にアクセスがあることを保証するために、そのケイパビリティを使用してメモリ要求が生成されたときに、ケイパビリティチェック回路によって範囲制約情報がチェックされる。ケイパビリティチェック回路は、処理回路とは別個の構成要素であり得るか、又は代替的に装置の処理回路内に提供され得る。
【0012】
本発明者らは、このアプローチが、処理回路によって実施される処理アクティビティに基づいてメモリが割り振られる動的な方法を考慮に入れていないことに気付いた。例えば、ケイパビリティが生成されたときにアクセスを許可することが望ましい可能性がある区域は、ケイパビリティの生成後に再利用される又はサイズが低減される可能性がある。そのような状況では、ケイパビリティの範囲制約情報は、メモリ区域へのアクセスを許可し続け、メモリ区域の再利用後、アクセスを制限することが望ましいことがある。それゆえに、ケイパビリティにおいて定義された範囲制約情報によって許可される領域内にメモリ要求が入ることを保証することに加えて、装置の状態情報項目を使用して範囲チェックを実施するケイパビリティチェック動作が提供される。具体的には、状態情報項目は、処理回路の動作に依存し、それらの動作の実施中に動的に変動し得る。状態情報項目と範囲制約情報の両方に依存して範囲チェック動作を実行することは必ずしも必要ではなく、この機能を有する装置上で実行するレガシーコードは、そのような機能を必要としない、又は使用しないことがある。それゆえに、ケイパビリティチェック回路は、判定条件が満たされているとき、状態情報項目と範囲制約情報の両方に依存して範囲チェック動作を実施するように構成される。
【0013】
ケイパビリティチェック回路はまた、判定条件が満たされていないとき、範囲制約情報には依存するが状態情報項目とは無関係に、範囲チェック動作を実施するように構成される。このようにすると、ケイパビリティチェック回路は、アクセス可能な領域が動的に変動しないケイパビリティ(判定条件が満たされていない)に対する静的範囲チェックと、アクセス可能な領域が状態情報項目に基づいて動的に変動するケイパビリティに対する動的範囲チェックの両方を実施することができる。このようにすると、範囲チェックが、メモリ使用量の動的な変動又は処理回路の処理状態の動的な変動を考慮するように拡張される。
【0014】
状態情報項目は、様々な形態をとることができる。しかしながら、いくつかの例示的な構成では、状態情報項目は、メモリ領域内のロケーションを指すポインタ値である。ポインタは、ケイパビリティ内の範囲制約情報に加えて、判定条件を満たしているケイパビリティについて、動的に変動するアクセス可能な領域を定義するように作用する。このようにすると、判定条件を満たしているケイパビリティに基づいてアクセス可能なメモリ領域のサイズを、ポインタ値の修正によって動的に変動させることができる。
【0015】
状態情報項目は任意のスタックポインタ値とすることができるが、いくつかの例示的な構成では、ポインタ値はスタックポインタ値であり、メモリ領域は、スタックとして使用されるように構成される。スタックポインタは、スタックとして使用されるように構成され、かつ、プログラム実行中に動的に変動するメモリ領域上の境界を定義する。メモリ領域は、静的ベースポインタ、又は他の場合には、既知のベースアドレスによって更に境界画定され得る。例えば関数call中、更なるメモリが処理回路により必要とされるので、スタックポインタは、スタックとして使用されるように構成されたメモリ領域が増加するように修正される。例えば関数return後、更なるメモリが処理回路によりもはや必要とされないので、スタックポインタは、スタックとして使用されるように構成されたメモリ領域が減少するように修正される。それゆえに、スタックポインタは、処理回路の動作中にアクセス可能なメモリ領域上に、動的に変動する境界を提供する。従来、ケイパビリティを使用するメモリへのアクセスは、ケイパビリティ内の範囲制約情報によって制約される。したがって、スタック(又はそのサブ領域)として使用されるように構成されたメモリ領域へのアクセスを制約するようにケイパビリティが構成されているとき、そのケイパビリティに基づいて行われるアクセスは、スタックポインタとは無関係にその領域にアクセスすることができる。その結果、スタックとして構成されたメモリ領域を減少させるようにスタックポインタが修正されると、例えば、この場合、ケイパビリティにおいて定義されたアクセス可能なメモリ領域の一部分はもはやスタックの一部を形成せず、ケイパビリティから誤ったアクセスが生成される可能性がある。判定条件が満たされているときに、スタックポインタ値によってケイパビリティから生成されるアクセスを更に制約するケイパビリティチェック回路を提供することによって、この装置は、そのような誤ったアクセスを防止することができる。
【0016】
ケイパビリティチェック回路によって実施される範囲チェックは、様々な方法で定義され得る。いくつかの例示的な構成では、ケイパビリティチェック回路は、判定条件が満たされているとき、範囲制約情報から導き出される第1の境界及び第2の境界に基づいて、範囲チェックを実施するように更に構成され、第2の境界は、第2の境界をより限定的にする範囲制約情報及びポインタ値のうちのいずれかから導き出される。範囲制約情報は、ケイパビリティの制約情報内に符号化され、ケイパビリティから導き出されるモリアクセスにアクセス可能なメモリアドレスの範囲を制限するように作用する。判定条件が満たされていないとき、範囲ケイパビリティチェック回路は、範囲チェックを実施して、ケイパビリティ内の範囲制約情報から導き出される第1の境界及び第2の境界の範囲内に入らないアクセスを制限するように構成される。しかしながら、判定条件が満たされているとき、第2の境界は、ポインタ値と範囲制約情報から導き出される境界とのうちのより限定的なものに基づいて導き出される。より限定的な境界は、メモリアドレスの最小範囲へのアクセスを許可するポインタ値及び範囲制約情報のうちのいずれかから導き出される境界である。
【0017】
いくつかの例示的な構成では、ケイパビリティチェック回路は、第1の境界と第2の境界との間に境界画定された許容メモリ領域内にメモリアドレスがあるとき、メモリアクセスを許可するように更に構成される。そのような例示的な構成では、より限定的な境界は、第1の境界と第2の境界との間のアドレスの最小範囲をもたらす境界である。いくつかの例示的な構成では、第1の境界は下側限界であり、第2の境界は上側限界であり、ケイパビリティチェック回路は、上側限界が下側限界よりも大きいとき、下側限界と上側限界との間のメモリ領域におけるメモリアクセスを許可するように構成され、ケイパビリティチェック回路は、上側限界が下側限界よりも小さいとき、ケイパビリティに基づいて生成されるすべてのアクセスを制限するように構成される。
【0018】
ポインタ値がスタックポインタ値である構成では、ケイパビリティチェック回路は、判定条件が満たされているとき、スタックポインタ値に基づいてアクセスを更に制限するように構成される。いくつかの例示的な構成では、スタックは、固定された下側限界と、スタックポインタに基づいて定義される動的に変動する上側限界とにより定義される。しかしながら、スタックは、固定された上側限界と、スタックポインタ値に基づく動的に変動する下側限界とにより同様に定義され得ることが、当業者には容易に明らかになるであろう。最初にスタック内の領域に基づいて定義される範囲制約情報を備えるケイパビリティについては、3つの可能なケースがある。第1のケースでは、範囲制約情報は、スタックとして使用されるように構成されたメモリ領域内に入る領域を定義する。この場合、ケイパビリティチェック回路は、範囲制約情報に基づいて導き出される第1の境界と第2の境界とによって定義される領域を指定するケイパビリティから導き出されるメモリ要求へのアクセスを許可するように構成される。第2のケースでは、範囲制約情報は、スタックとして使用されるように構成されたメモリ領域外である領域を定義する。この場合、ケイパビリティチェック回路は、ケイパビリティから導き出されるすべてのメモリ要求へのアクセスを拒否するように構成される。第3のケースでは、範囲制約情報は、スタックとして使用されるように構成されたメモリ領域内に下側限界が入り、上側限界が、スタックとして使用されるように構成されたメモリ領域外である、領域を定義する。この場合、ケイパビリティチェック回路は、上側限界とスタックポインタ値に基づいて導き出される下側限界との間のメモリ領域へのアクセスを許可するように構成される。
【0019】
ケイパビリティチェック回路が、判定条件が満たされていることを判定するように構成され得るいくつかの方法がある。例えば、ケイパビリティチェック回路は、記憶値又は処理回路の状態に基づいて、判定条件が満たされていると判定することができる。いくつかの例示的な構成では、ケイパビリティチェック回路は、所与のケイパビリティが判定タイプのものであるとき、判定条件が満たされていると判定するように構成される。
【0020】
ケイパビリティは、例えば、所与のケイパビリティがメモリの特定のサブセットに対応するという識別に基づいて、様々な方法で、判定タイプのケイパビリティとして識別され得る。いくつかの例示的な構成では、所与のケイパビリティの所与の制約情報は、所与のケイパビリティが判定タイプのものであるかどうかを示すための動的チェック指示メタデータを備える。
【0021】
動的チェック指示メタデータは、ケイパビリティのビットのうちのいずれかを使用して、所与のケイパビリティ内で符号化することができる。いくつかの例示的な構成では、動的チェック指示メタデータが、所与のケイパビリティ内の専用メタデータフィールドを備える。例えば、動的チェック指示メタデータは、所与のケイパビリティが判定タイプのものであるときには第1の値をとり、所与のケイパビリティが判定タイプのものでないときには第2の値をとる単一ビットを備えてもよい。
【0022】
いくつかの例示的な構成では、所与のケイパビリティは、所与のケイパビリティが指定タイプの更なるケイパビリティを参照するとき、判定タイプのものである。所与のケイパビリティは、指定タイプの更なるケイパビリティを直接参照してもよく、あるいは代替的に、所与のケイパビリティは、例えば、それ自体が指定タイプの更なるケイパビリティを参照する別のケイパビリティを参照することによって、指定タイプのケイパビリティを間接的に参照してもよい。いくつかの例示的な構成では、指定タイプのケイパビリティはまた、判定タイプのものである(それゆえに、前述の動的な様式で判定された範囲制約を有する)。いくつかの例示的な構成では、指定タイプのケイパビリティは、処理回路の動作に基づいて動的に変動するポインタ値を備える。
【0023】
所与のケイパビリティが指定タイプの更なるケイパビリティを参照するいくつかの例示的な構成では、所与の制約情報が、更なるケイパビリティを識別するためのケイパビリティ指示メタデータを提供するように配設され、更なるケイパビリティは、関連付けられたポインタ値及び関連付けられた制約情報を提供するように配設されており、関連付けられたポインタ値が、状態情報項目を形成する。したがって、更なるケイパビリティの関連付けられたポインタ値に基づいて生成されるメモリアクセスは、関連付けられた制約情報によって制約される。所与のケイパビリティは、所与のケイパビリティに基づいて生成されるメモリアクセスが、関連付けられたポインタ値によって更に制約されるように、更なるケイパビリティを識別する(指示する)ケイパビリティ指示メタデータを提供する。
【0024】
ケイパビリティ指示メタデータは、様々に提供することができ、指定タイプのケイパビリティに依存するように調整することができる。いくつかの例示的な構成では、更なるケイパビリティがスタックポインタケイパビリティであり、処理回路は、対応するスタックポインタケイパビリティを有するメモリ内の対応する関連スタックを各々が有する複数の動作モードを有し、ケイパビリティ指示メタデータは、どの対応するスタックポインタケイパビリティが状態情報項目を形成するかを識別するためのスタックポインタ指示メタデータを提供するように配設される。そのような構成では、指定タイプはスタックポインタケイパビリティである。プロセッサの動作モードは限定されないが、いくつかの例示的な構成では、モードは、高セキュアモード及び低セキュアモードのうちの1つ、かつ/又は特権モード及び非特権モードのうちの1つとして分類され得る。その結果、プロセッサの4つの別個の動作モード(高セキュア非特権、高セキュア特権、低セキュア非特権、及び低セキュア特権)が存在する。判定タイプのケイパビリティは各々、プロセッサモードのうちの1つに関連付けられるスタックポインタケイパビリティのうちの1つを参照する。例えば、所与のケイパビリティは、判定タイプのものであってもよく、高セキュア特権モード、高セキュア非特権モード、低セキュア特権モード、又は低セキュア非特権モードに関連付けられるスタックポインタケイパビリティにアクセスすることができる。その結果、所与のケイパビリティは、現在アクティブなプロセッサモードに通常関連するスタックポインタ値ではなく、所与のケイパビリティによって識別されるプロセッサのモードに関連付けられるスタックポインタ値によって制約される。
【0025】
ケイパビリティチェック回路は、プロセッサが第1のモードで動作しており、第2のモードのスタックポインタを参照する判定タイプのケイパビリティに基づいてメモリアドレスを生成する要求が発生したとき、第1のモードと第2のモードとが同じモードであるときには、関連するスタックポインタ値に基づいてアクセスを許可し(範囲制約情報及び関連付けられたスタックポインタ値並びに任意の更なる関連する許可チェックから導き出される境界内にアクセスが入ることを条件とする)、第1のモードと第2のモードが異なるモードであるときには、関連付けられたスタックポインタ値に基づいて(範囲制約情報とは無関係に)アクセスを拒否するように構成され得る。このようにすると、処理回路は、第2のモードのスタックポインタを使用して定義されたケイパビリティが、第2のモードと異なる第1のモードで処理回路が動作しているときにメモリ領域に誤ってアクセスできることを防止することができる。
【0026】
ケイパビリティ指示メタデータは、ケイパビリティ内のフィールドのうちのいずれかを使用して符号化され得る。いくつかの例示的な構成では、各ケイパビリティの制約情報が、許可ビットの第1のサブセット及び許可ビットの第2のサブセットを備え、所与のケイパビリティが判定タイプのものであるとき、許可ビットの第1のサブセットは、ケイパビリティ指示メタデータを提供するために再利用される。典型的には、許可ビットは、所与のケイパビリティに対して許可されるメモリアクセスのタイプ(読み出し、書き込み、及び/又は実行)を符号化する。いくつかの例示的な構成では、読み出しアクセスが許可されるか否か、書き込みアクセスが許可されるか否か、及び実行アクセスが許可されるか否かを示す、3つの許可ビットが提供される。判定条件が満たされているときに許可ビットの第1のサブセットを再利用することによって、ケイパビリティ指示メタデータを、2N個の値のうちの1つとして符号化することができ、Nは、第1のサブセットに含まれる許可ビットの数である。第1のサブセットは、すべての許可ビットを含む任意の数の許可ビットを備えることができる。指定タイプのケイパビリティが4つの処理モードのうちの1つに関連付けられるスタックポインタケイパビリティである例示的な構成では、処理モードは、例えば、3つの許可ビットのうちの2つを使用して符号化され得る。
【0027】
ケイパビリティ指示メタデータに対して許可ビットが再利用される例示的な構成では、ケイパビリティチェック回路は、所与のケイパビリティが判定タイプのものであるとき、許可ビットの第2のサブセット及び推論された第1の許可ビットのセットから所与のケイパビリティの許可を判定するように構成される。第1のサブセットが許可ビットのうちの2つを備える例示的な構成では、所与のケイパビリティの許可は、残りの許可ビット(許可ビットの第2のサブセット内の許可ビット)及び推論された許可ビットに基づいて判定される。
【0028】
推論された許可ビットは、様々な方法で判定され得る。いくつかの例示的な構成では、推論された第1の許可ビットのセットは、指定タイプの更なるケイパビリティによって提供される等価の許可ビットの値によって判定される。代替的には、推論された許可ビットは、判定タイプのケイパビリティによって実施されることが知られているアクセスのタイプに関連付けられるデフォルト許可ビットに基づいて判定され得る。
【0029】
いくつかの例示的な構成では、許可ビットの第1のサブセットは、所与のケイパビリティによって提供される所与のポインタ値が、読み出されるデータ項目のためのメモリアドレスを生成するために使用されることを許可されるかどうかを示す読み出し許可ビットと、所与のケイパビリティによって提供される所与のポインタ値を、処理回路による実行のためにフェッチされる命令のためのメモリアドレスを生成するために使用されることを許可されるかどうかを示す実行許可ビットと、を備える。所与のケイパビリティがスタックポインタケイパビリティを参照する例示的な構成では、許可ビットの第1のサブセットは、読み出し可能アクセス及び非実行可能アクセスとして推測される。典型的には、スタック上のデータは、処理回路の処理動作によってアクセスできるように読み出し可能でなければならず、セキュリティ脆弱性を回避するために非実行可能でなければならない。書き込み許可ビットは、許可ビットの第2のサブセットに含まれ、所与のケイパビリティから判定される。それゆえに、各々が処理モードに関連付けられた4つのスタックポインタからスタックポインタを識別する(示す)ために読み出し許可ビット及び実行許可ビットを再利用することによって、追加のビットをケイパビリティに追加する必要なく、効率的な符号化を達成することができる。
【0030】
いくつかの例示的な構成では、指定タイプの更なるケイパビリティの制約情報が、更なるケイパビリティが判定タイプのものであることを示すように設定された動的チェック指示メタデータを備え、この装置は、既存のケイパビリティから導き出されたケイパビリティを生成するケイパビリティ生成回路を更に備え、ケイパビリティ生成回路は、導き出されたケイパビリティが更なるケイパビリティから生成されるとき、その導き出されたケイパビリティについての動的チェック指示メタデータを更なるケイパビリティから継承させるように配設される。ケイパビリティ生成回路は、処理回路とは別個の構成要素であってもよく、又は代替的には、装置の処理回路内に提供されていてもよい。動的チェック指示メタデータは、例えば、導き出されたケイパビリティ内の動的チェック指示メタデータを既存のケイパビリティ内の動的チェック指示メタデータと同じ値に設定することによって継承することができる。いくつかの例示的な構成では、更なるケイパビリティがケイパビリティ指示メタデータを備えるとき、導き出されたケイパビリティは、更なるケイパビリティからケイパビリティ指示メタデータを継承する。このようにすると、更なるケイパビリティが判定タイプのものであるとき、導き出されたケイパビリティもまた判定タイプのものであり、更なるケイパビリティと同じ状態情報項目によって制約される。
【0031】
いくつかの例示的な構成では、装置が、既存のケイパビリティから導き出されたケイパビリティを生成するケイパビリティ生成回路を更に備え、ケイパビリティ生成回路は、導き出されたケイパビリティが生成されるとき、その導き出されたケイパビリティが指定タイプの更なるケイパビリティから導き出されるかどうかに依存して、その導き出されたケイパビリティが動的チェック指示メタデータセットを有するように配設される。それゆえに、指定タイプの更なるケイパビリティに基づいて導き出されるすべてのケイパビリティは、導き出されたケイパビリティが判定タイプのものであることを示す動的チェック指示メタデータを用いて生成される。更に、更なるケイパビリティが指定タイプの複数の可能なケイパビリティのうちの1つである例示的な構成では、ケイパビリティ生成回路は、導き出されたケイパビリティが指定タイプのどのケイパビリティから生成されるかを示すケイパビリティ指示メタデータを設定するように構成され得る。
【0032】
説明したように、いくつかの例示的な構成では、状態情報項目は、所与のケイパビリティにおいて定義され、あるいは所与のケイパビリティに基づいて判定条件から推測される。いくつかの例示的な構成では、ケイパビリティチェック回路は、判定条件が満たされているとき、所与の制約情報に基づいて、ケイパビリティのサブセットをメタデータに関連付けるルックアップテーブル内でルックアップを実施し、ルックアップがルックアップテーブル内でヒットしたとき、メタデータに基づいて状態情報項目を判定するように構成される。ルックアップテーブルは、(ハードコーディングされたアドレス又はレジスタに記憶されたアドレスに基づいて)メモリ、又はケイパビリティチェック回路、処理回路の一部として若しくは外部エンティティとして提供された専用の記憶装置のいずれかの既知のロケーションに記憶され得る。判定条件が満たされているという判定に応答して、ケイパビリティチェック回路は、ルックアップテーブル内でルックアップを実施する。ルックアップがルックアップテーブル内でヒットしたとき、状態情報項目はメタデータに基づいて判定される。メタデータは、レジスタ、記憶ロケーション、又は状態情報項目が示される更なるケイパビリティを示すことができる。代替的には、メタデータは、状態情報項目であってもよく、あるいは状態情報項目がそこから導き出される情報を符号化してもよい。
【0033】
ルックアップテーブルは、様々な方法でインデックス付けされ得る。いくつかの例示的な構成では、ルックアップテーブルは、所与のケイパビリティ内の所与のポインタ値の一部分に基づいてインデックス付けされ得る。代替的には、いくつかの例示的な構成では、ケイパビリティチェック回路は、所与の制約情報内で識別されたインデックス情報を使用してルックアップを実施するように更に構成される。例えば、所与の制約情報は、ルックアップテーブルにインデックス付けするために再利用される許可ビットを備えてもよい。
【0034】
説明したように、許可ビットが再利用されるいくつかの例示的な構成では、所与のケイパビリティの許可は、所与のケイパビリティによって参照される更なるケイパビリティに基づいて推測又は判定され得る。いくつかの例示的な構成では、所与のケイパビリティをメタデータに関連付けるためにルックアップテーブルが使用されるとき、メタデータは、所与のケイパビリティの許可を示す許可メタデータを更に備える。いくつかの例示的な構成では、範囲制約情報からのビットの再利用されたサブセットを使用してルックアップテーブルに、インデックス付けしてもよく、それによって、ルックアップテーブル中のより多数のエントリが無関係であり、動的に変動する状態情報項目に応答して所与のケイパビリティを更に制約する際の柔軟性がより大きくなることが可能になる。
【0035】
いくつかの例示的な構成では、ケイパビリティ指示メタデータが許可ビットの第1のサブセット内で識別されるとき、処理回路は、所与のケイパビリティに関してケイパビリティ修正命令を実行しようとするとき、許可ビットの第1のサブセット内で識別されるケイパビリティ指示メタデータの修正を防止するように配設され得る。典型的には、ケイパビリティの許可ビットの修正は、修正された許可が修正されていない許可よりも制限的であるときにのみ許可される。しかしながら、許可ビットを再利用してケイパビリティ指示メタデータが提供されたときには、許可ビットの修正は、所与のケイパビリティが、異なる更なるケイパビリティを示すように所与のケイパビリティが修正され、その結果、メモリの以前に制限された区域がアクセス可能になる可能性があり得るので、潜在的なセキュリティ脆弱性を呈する。それゆえに、判定条件が満たされているとき、処理回路は、再利用されるビットの変更を防止すること、所与のケイパビリティがもはやケイパビリティとして解釈されないようにタグビットをクリアすること、及び/又はフォールトを生じさせることによって、許可修正命令の使用を防止することができる。
【0036】
ここで、特定の例について、図を参照して説明する。
【0037】
本明細書で説明する技法は、様々なデータ処理システムにおいて、そのようなシステム内の異なるタイプの処理回路に関連して採用することができる。例えば、本技法は、中央処理装置(CPU)の形態を採る処理回路に関連して使用することができるが、代替的に、ダイレクトメモリアクセス(DMA)コントローラ、暗号化アクセラレータなどの他の処理回路に関連して使用することもできる。純粋に以下の
図1の用例として、CPUの処理パイプラインは、説明される技法が使用され得る処理回路の例として考慮される。
【0038】
図1は、命令を処理するための処理パイプライン4を含む処理回路を備えるデータ処理装置2の一例を概略的に示す。この例では、処理パイプライン4は、フェッチステージ6、復号ステージ8、発行ステージ10、実行ステージ12、及びライトバックステージ14を含む、多数のパイプラインステージを含むが、他のタイプのステージ又はステージの組み合わせが提供され得ることが理解されるであろう。例えば、レジスタリネームを実施するためのリネームステージが、いくつかの例示的な実装形態に含まれ得る。処理されることになる命令がステージからステージに移動し、ある命令が、1つのステージで保留中である間に、別の命令が、パイプライン4の異なるステージで保留中であり得る。
【0039】
フェッチステージ6は、レベル1(L1)命令キャッシュ20から命令をフェッチする。フェッチステージ6は通常、連続する命令アドレスから逐次的に命令をフェッチし得る。しかしながら、フェッチステージは、分岐命令の結果を予測するための分岐予測器22も有し得、フェッチステージ6は、分岐が行われたと予測される場合に(非逐次的な)分岐先アドレスから、又は分岐が行われなかったと予測される場合に次の逐次アドレスから命令をフェッチすることができる。分岐予測器22は、ある分岐が行われる可能性が高いかどうかを予測するための情報を記憶するための1つ以上の分岐履歴テーブルを含み得る。例えば、分岐履歴テーブルは、従前に実行された分岐の実際の結果を追跡するための、又は分岐のために行われた予測の信頼度を表すためのカウンタを含み得る。分岐予測器22は、分岐命令の従前の目標アドレスを、同じ分岐命令に後で遭遇した際に、それらが予測され得るように、キャッシュするための分岐先アドレスキャッシュ(branch target address cache、BTAC)24も含み得る。
【0040】
フェッチされた命令は、命令を復号して復号された命令を生成する復号ステージ8に渡される。復号された命令は、実行ステージ12を制御して適切な処理動作を実行するための制御情報を含み得る。キャッシュ20からフェッチされたいくつかのより複雑な命令に対して、復号ステージ8は、それらの命令を復号された複数の命令(マイクロオペレーション(μop又はuop)として知られ得る)にマッピングし得る。それゆえに、L1命令キャッシュ20からフェッチされた命令と、パイプラインの後のステージで見られる命令との間に1対1の関係が存在しない場合がある。概して、本出願における「命令」に対する参照は、マイクロオペレーションを含むものと解釈されるべきである。
【0041】
復号された命令は、発行ステージ10に渡され、これは、命令の実行に必要なオペランドが利用可能であるかどうかを判定し、オペランドが利用可能である場合に実行のための命令を発行する。いくつかの例示的な実装形態は、L1命令キャッシュ20から命令がフェッチされたプログラム順序に対応する順序での実行のための命令が発行されるように、インオーダ処理をサポートし得る。他の例示的な実装形態は、プログラム順序とは異なる順序で実行ステージ12に命令を発行できるようにアウトオブオーダ実行をサポートし得る。アウトオブオーダ処理は、先の命令がオペランド待ちの間停止させられている間に、そのオペランドが利用可能である、プログラム順序では後の命令を先に実行できるため、性能向上に有用であり得る。
【0042】
発行ステージ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にライトバックされ得る。
【0043】
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からフェッチすることができる。キャッシュ階層を管理するために、任意の既知のスキームを使用し得る。
【0044】
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであり得るが、少なくともメインメモリ50、及び任意選択的に、少なくともいくつかのレベルのキャッシュ階層も、物理的にアドレス指定され得る。それゆえに、パイプライン4によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスに変換するためのトランスレーションルックアサイドバッファ52(TLB)が提供され得る。例えば、TLB52は、仮想アドレス空間の対応するページの仮想ページアドレスと、対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされるべき対応する物理ページアドレスとを各々が指定する、多数のエントリを含み得る。例えば、仮想ページアドレス及び物理ページアドレスは、対応する仮想アドレス及び物理アドレスの最上位部分に対応し得、仮想アドレスを物理アドレスにマッピングするときに残りの最下位部分は変化しないままである。アドレス変換情報と同様に、各TLBエントリは、アドレスのあるページがパイプライン4のあるモードでアクセス可能であるかどうかを示すような、アクセス許可を指定するいくつかの情報も含み得る。いくつかの例示的な実装形態では、TLBエントリは、読み取り又は書き込み動作に応答して更新されるレベルのキャッシュ階層を定義するキャッシュポリシー情報など、アドレスの対応するページの他の特性(例えば、キャッシュがライトバックモードで動作するべきか、若しくはライトスルーモードで動作するべきか)、又は対応するページ内のアドレスに対するデータアクセスを、パイプライン4によって発行されたデータアクセスの順序と比較して、メモリシステムによって再順序付けできるかどうかを定義する情報を定義することもできる。
【0045】
図1は単一レベルTLB52を示しているが、レベル1(L1)TLB52が、いくつかの最近アクセスされたページにおいてアドレスを変換するためのTLBエントリを含み得、レベル2(L2)TLBがより多数のページのエントリを記憶するために提供され得るように、TLBの階層が提供され得ることが理解されよう。必要とされるエントリがL1TLBに存在しないときには、それをL2TLB、又は階層内の更なるTLBからフェッチすることができる。アクセスされるページのために必要とされるエントリがいずれのTLBにもない場合、メモリ50内のページテーブルにアクセスするために、ページテーブルウォークを実施することができる。本技法では、任意の既知のTLB管理スキームを使用することができる。
【0046】
また、いくつかのシステムは、複数のレベルのアドレス変換をサポートし得、その結果、例えば、第1のTLB(又はTLB階層)を使用して仮想アドレスを中間アドレスに変換し得、かつ1つ以上の更なるTLBを使用する第2のレベルのアドレス変換が、中間アドレスを、キャッシュ又はメモリにアクセスするために使用する物理アドレスに変換し得ることが理解されよう。これは、例えば、第1のレベルのアドレス変換がオペレーティングシステムによって管理され得、第2のレベルのアドレス変換がハイパーバイザによって管理され得る、仮想化をサポートするのに有用であり得る。
【0047】
この装置は、ケイパビリティを記憶するためのケイパビリティ記憶要素(ポインタを使用するときのアドレスの許容範囲を示す関連付けられた範囲情報を有する有界ポインタの形態をケイパビリティがとるときには、有界ポインタ記憶要素と称され得る)を備えていてもよい。各ケイパビリティ/有界ポインタ記憶要素は、レジスタ、又は汎用メモリ内のメモリロケーション、例えばスタックメモリ上のロケーションであり得る。
【0048】
図1に示すように、装置2は、有界ポインタ記憶要素として使用される有界ポインタ記憶要素60のセットを有し得る。有界ポインタレジスタのセットは、汎用データレジスタ40のセットとは物理的に別個のものとして
図1に示しているが、1つの例示的な実装形態では、汎用データレジスタと有界ポインタレジスタの両方を提供するために同じ物理的ストレージを使用し得る。
【0049】
各有界ポインタレジスタ60は、アクセスすべきデータ値のアドレスを判定するために使用し得るポインタ値62と、範囲制約情報64を指定する制約情報とを含み、範囲制約情報64は更に、対応するポインタ62を使用するときのアドレスの許容範囲を更に指定する。有界ポインタレジスタ60内の制約情報は、ポインタの使用に関する1つ以上の制限/許可を定義し得る制限情報66(本明細書ではメタデータとも称され、動的チェック指示メタデータ及び/又は許可メタデータを備え得る)も含み得る。例えば、制限66は、ポインタ62を使用し得る命令のタイプ、又はポインタを使用し得るパイプライン4のモードを制限するために使用することができる。それゆえに、範囲制約情報64及び制限情報66は、その中でポインタ62の使用が許可されるケイパビリティを定義すると考えられ得る。定義されたケイパビリティ外でポインタ62を使用する試みが行われると、エラーをトリガすることができる。範囲制約情報64は、例えば、ポインタがある既知の境界内に留まり、かつセンシティブな情報又はセキュアな情報を含む可能性があるメモリアドレス空間の他の区域に迷い込まないことを保証するために、有用であり得る。汎用データレジスタと有界ポインタレジスタの両方に同じ物理的ストレージを使用する例示的な実装形態において、ポインタ値62は、例えば、対応する汎用レジスタのために使用されるのと同じ記憶ロケーション内に記憶され得る。
【0050】
図2は、データ又は命令に対する不正アクセスから保護するために許容範囲が使用される命令のタイプの例を示す。
図2の頂部に示すように、特定の有界ポインタレジスタPR1が、所与のポインタ値62と、この例では、許容範囲の下側境界を定義する下側境界アドレス68及び許容範囲の上側境界を定義する上側境界アドレス69を使用して指定される、範囲制約情報64とを含む。例えば、境界68、69は、80000~81000のアドレス範囲を定義するように設定される。ある命令が有界ポインタレジスタPR1を参照し、ポインタ62から判定されたアドレスがこの範囲外である場合に、エラーがトリガされ得る。
【0051】
例えば、
図2の部分Aに示すように、いくつかのシステムでは、ポインタレジスタ60内のポインタ62の値を、範囲制約情報64によって指定された範囲外にある値(ここでは、ポインタがアドレスを直接指定すると仮定する)に設定する試みがある場合、エラーがトリガされ得る。これは、ポインタを使用するアクセスが許容範囲内に間違いなくあることを確実にできるように、ポインタ62が指定範囲外の値を取ることが回避させる。代替的に、
図2の部分Bに示すように、命令が、ポインタ62のアドレスによって識別された位置へのアクセスを試み、そのアドレスが指定範囲外にあるときに、エラーをトリガすることができる。それゆえに、ポインタ62を指定範囲外の値に設定することは許容できるが、ポインタアドレス(又はポインタから導き出されたアドレス)のデータアクセスが試みられ、アドレスが許容範囲外にある場合、エラーがトリガされ得る。他のシステムは、
図2の部分A及びBに示す両方の命令のタイプに応答してエラーをトリガし得る。
【0052】
範囲制約情報64は、異なる方法で設定され得る。例えば、セキュリティコード、又はオペレーティングシステム若しくはハイパーバイザが、所与のポインタに対して許可された範囲を指定し得る。例えば、命令セットアーキテクチャは、所与のポインタ62に対する範囲情報64を設定又は修正するためのいくつかの命令を含み得、これらの命令の実行は、プロセッサ4の特定のソフトウェア又は特定のモード又は例外状態に制限することができる。範囲情報64を設定又は修正するための任意の既知の技法が使用され得る。
【0053】
ポインタを参照するある命令を実行するときに実行状態12で使用し得る有界ポインタ記憶要素60のセットに加えて、命令がレベル1命令キャッシュ20からフェッチされるときに、フェッチステージ6で同様の機能を提供するためにプログラムカウンタケイパビリティ(program counter capability、PCC)レジスタ80も使用され得る。具体的には、プログラムカウンタポインタは、フィールド82に記憶され得、PCC80は、有界ポインタ記憶要素60のセット内のポインタの各々に提供される範囲及び制限情報と同様の、範囲情報84及び任意の適切な制限情報86も提供する。
【0054】
図3は、個々のデータブロックがケイパビリティ(すなわち、有界ポインタ及び関連付けられた制限情報)を表すか、又は通常データを表すかを識別するために、それらのデータブロックに関連してタグビットがどのように使用されるかを概略的に示している。具体的には、メモリアドレス空間110は、指定されたサイズを典型的に有する一連のデータブロック115を記憶する。純粋に例示のために、この例では、各データブロックが128ビットを含むと仮定されるが、他の例示的な実装形態では、異なるサイズのデータブロック、例えば、ケイパビリティが64ビットの情報によって定義されるときの64ビットデータブロックが使用され得る。各データブロック115に関連して、一例では、タグビットと称される単一ビットフィールドであるタグフィールド120が提供され、これは、関連付けられたデータブロックがケイパビリティを表すことを識別するために設定され、関連付けられたデータブロックが通常データを表し、それゆえにケイパビリティとして取り扱えないことを示すためにクリアされる。設定又はクリア状態に関連付けられた実際の値は、実装形態に応じて変化し得るが、純粋に例示のために、例示的な一実装形態では、タグビットが1の値を有する場合に、関連付けられたデータブロックがケイパビリティであることを示し、それが0の値を有する場合に、関連付けられたデータブロックが通常データを含むことを示すことが理解されるであろう。
【0055】
ケイパビリティが、
図3に示されるケイパビリティレジスタ100などの有界ポインタレジスタ60(本明細書ではケイパビリティレジスタとも称される)のうちの1つにロードされるときに、タグビットはケイパビリティ情報と共に移動する。したがって、ケイパビリティレジスタ100にケイパビリティがロードされるとき、ポインタ102、範囲制約情報104及び制限情報106(以下、許可情報と称される)がケイパビリティレジスタにロードされることになる。加えて、そのケイパビリティレジスタに関連して、又はその内の特定のビットフィールドとして、タグビット108は、コンテンツがケイパビリティを表すことを識別するために設定されることになる。同様に、ケイパビリティがメモリからストアバックされた場合、関連するタグビット120は、ケイパビリティが記憶されているデータブロックに関連して設定される。そのようなアプローチにより、ケイパビリティと通常データを区別し、それゆえに、通常データがケイパビリティとして使用できないことを確実にする。
【0056】
図4は、1つの例示的な実装形態による、動的チェック情報ケイパビリティの表現を概略的に示す。
図3に関連して説明したように、ケイパビリティレジスタ100にロードされるケイパビリティは、ポインタ値102、範囲制約(境界)情報104、許可情報106、及びタグビット108を備える。ケイパビリティは更に、いくつかの例示的構成ではケイパビリティレジスタ100内の単一ビットとして表される、動的チェック情報110を備える。許可情報106は、読み出しアクセス、書き込みアクセス、及び実行のためにケイパビリティを使用できるかどうかをそれぞれ示す、読み出し許可ビット112、書き込み許可ビット114、及び実行許可ビット116を備える。動的チェック情報110は、ケイパビリティチェック回路が状態情報項目とは無関係に範囲制約(境界)情報104に基づいて境界を判定するか否か、又はケイパビリティチェック回路が範囲制約(境界)情報104と状態情報項目の両方に基づいて境界を判定するかどうかを判定する。
【0057】
図5a~
図5dは、いくつかの例示的な構成による、ケイパビリティチェック回路を備えるデータ処理装置を概略的に示す。
図5aは、処理回路120と、ケイパビリティチェック回路122と、を備えるデータ処理装置を示す。処理回路は、例えば、
図1に関連して説明した処理回路の形態をとってもよい。更に、ケイパビリティチェック回路122は、処理回路120とは別個の回路ブロックとして示されている。しかしながら、いくつかの例示的な構成では、ケイパビリティチェック回路は、処理回路120の一部を形成してもよい。処理回路120が所与のケイパビリティに基づくメモリ要求に遭遇すると、処理回路120は、所与のケイパビリティの制約情報を含むメモリ要求をケイパビリティチェック回路122にパスする。ケイパビリティチェック回路は、判定条件124が満たされているかどうかを判定する。判定条件124は、ケイパビリティチェック回路122及び処理回路120の外部のロジック条件に基づき得る。しかしながら、いくつかの例示的な構成では、判定条件124は、ケイパビリティチェック回路122の内部で判定されてもよく、あるいは、処理回路120からケイパビリティチェック回路122にパスされてよい。
【0058】
判定条件124が満たされていないとケイパビリティチェック回路122が判定したとき、ケイパビリティチェック回路122は、処理回路120によってケイパビリティチェック回路122にパスされた制約情報によって判定される許容メモリ領域内にメモリ要求が入るかどうかを判定する。この場合、ケイパビリティチェック回路122は、メモリ要求をメモリに転送する(いくつかの実装形態では、例えばメモリ管理ユニットによって、メモリへのアクセスが進むことを許可される前に、いくつかの追加のチェックが実施され得る)。メモリ要求が許容可能な領域内にないとケイパビリティチェック回路122が判定したとき、ケイパビリティチェック回路122は、エラーをシグナリングする。
【0059】
判定条件124が満たされているとケイパビリティチェック回路122が判定したとき、ケイパビリティチェック回路122は、処理回路120によってケイパビリティチェック回路122にパスされた制約情報に基づいて、かつ、状態情報項目126に基づいて判定される許容可能なメモリ領域内にメモリ要求が入るかどうかを判定するように構成される。判定条件124の場合と同様に、状態情報項目126は、処理回路120及びケイパビリティチェック回路122の外部にあってもよい。代替的には、状態情報項目126は、ケイパビリティチェック回路122内で判定されてもよく、又は処理回路120からケイパビリティチェック回路122にパスされてもよい。制約情報及び状態情報項目126に基づいて判定される許容範囲内にメモリ要求があると判定されるとき、ケイパビリティチェック回路は、メモリ要求をメモリにパスする(前述のように、いくつかの実装形態では、メモリへのアクセスが進むことを許可される前に、いくつかの追加のチェックが実施され得る)。メモリ要求が許容可能な領域内にないとケイパビリティチェック回路122が判定した場合、ケイパビリティチェック回路122は、エラーをシグナリングする。
【0060】
図5bは、いくつかの例示的な構成による、処理回路120と、ケイパビリティチェック回路122と、を備えるデータ処理装置を概略的に示す。処理回路120及びケイパビリティチェック回路122は、
図5aを参照して説明したように機能するが、以下の相違点がある。処理回路120が所与のケイパビリティに基づくメモリ要求に遭遇すると、処理回路120は、メモリアドレス130と所与のケイパビリティの制約情報128とを含むメモリ要求をケイパビリティチェック回路122にパスする。ケイパビリティチェック回路122は、制約情報128に含まれる動的チェック情報に基づいて、判定条件が満たされているかどうかを判定する。更に、状態情報項目は、スタックポインタ132であり、これは、いくつかの例示的な構成では、処理回路120の異なる動作モードに各々が関連付けられた複数のスタックポインタのうちの1つである。ケイパビリティチェック回路は、判定条件が満たされているとき、制約情報128及びスタックポインタ132に基づいて判定された許容範囲内にメモリアドレス130が入るかどうかを判定するように構成されるが、判定条件が満たされないときには、代わりに、制約情報128内に含まれる範囲情報のみに基づいて判定された許容範囲内にメモリアドレス130が入るかどうかを判定する。
【0061】
図5cは、いくつかの例示的な構成による、処理回路120と、ケイパビリティチェック回路122と、を備えるデータ処理装置を概略的に示す。処理回路及びケイパビリティチェック回路122は、
図5bを参照して説明したように機能するが、以下の相違点がある。ケイパビリティチェック回路は、処理回路120からメモリ要求を受信すると、メモリ要求が基づくケイパビリティが判定タイプのものであることを制約情報128に含まれる動的チェック情報が示すときに、制約情報128に含まれるインデックス情報に基づいて、ルックアップテーブル134内のルックアップを実施するように構成される。ルックアップテーブルはメタデータを備え、インデックス情報を使用してインデックス付けされる。ルックアップがルックアップテーブル134内でヒットしたとき、ケイパビリティチェック回路122は、対応するメタデータに基づいて状態データ項目を判定する。いくつかの例示的な構成では、ケイパビリティチェック回路122はまた、ルックアップテーブル134から取り出されたメタデータに基づいて、メモリアクセスに関連付けられた許可情報を判定する。そのようなアプローチは、例えば、ルックアップテーブル134内でルックアップを実施するために必要とされるインデックス情報の少なくとも一部を提供するために、ケイパビリティ内の許可を示すために通常使用されるビットを再利用することを可能にすることができる。
【0062】
図5dは、いくつかの例示的な構成による、
図5aに関連して説明したような、処理回路120と、ケイパビリティチェック回路122と、を備えるデータ処理装置を概略的に示す。加えて、データ処理装置は、既存のケイパビリティに基づいてケイパビリティを生成するケイパビリティ生成回路136を備えている。
図6を参照して説明されるケイパビリティ生成回路136は、既存のケイパビリティ140のメモリアドレス(ポインタ値)と、制約情報142と、を含む既存のケイパビリティ144を受信する。制約情報は、動的チェック指示146及び範囲制約情報148を含む。範囲制約情報は、第1の境界150及び第2の境界152を符号化する。ケイパビリティ生成回路136は、導き出されたケイパビリティ160を生成するケイパビリティ生成命令に応答し、導き出されたケイパビリティ160の制約情報162は、既存のケイパビリティ140の制約情報142と等しい、又はそれよりも限定的である。具体的には、ケイパビリティ生成回路136は、導き出されたケイパビリティ160を生成するケイパビリティ生成命令に応答し、導き出されたケイパビリティ160の制約情報166は、既存のケイパビリティ140の動的チェック指示146から導き出される(例えば、制約情報と同じ値に設定される)。
【0063】
更に、ケイパビリティ生成回路136は、導き出されたケイパビリティ160の範囲制約情報168を、既存のケイパビリティ140の範囲制約情報148の範囲に等しい又はその範囲内に含まれる範囲に設定するように構成される。より具体的には、ケイパビリティ生成回路は、導き出されたケイパビリティ160の第1の境界170を、既存のケイパビリティ140の第1の境界150と既存のケイパビリティ140の第2の境界152とによって定義される範囲内の値に設定し、導き出されたケイパビリティ160の第2の境界172を、既存のケイパビリティ140の第1の境界150と既存のケイパビリティ140の第2の境界152とによって定義される範囲内の値に設定する。このようにして、ケイパビリティ生成回路136は、導き出されたケイパビリティ160がそこから生成された既存のケイパビリティ140の制約情報142によって制限される導き出されたケイパビリティ160を生成することができる。
【0064】
図7は、いくつかの例示的な構成による、ケイパビリティチェック回路によって実行されるステップのシーケンスを概略的に示す。フローはステップS70で開始し、アクセス要求を受信したかどうかを判定する。「はい」の場合、フローはステップS72に進む。代替的には、ステップS70においてアクセス要求を受信しない場合、フローはステップS70に戻る。ステップS72において、判定条件が満たされているかどうかを判定する。「はい」の場合、フローはステップS76に進み、状態情報項目を判定する。次いで、フローはステップS78に進み、範囲制約情報及び状態情報項目に基づいて範囲チェックを実施する。次いで、フローはステップS80に進む。ステップS72において、判定条件が満たされなかったと判定された場合、フローはステップS74に進み、範囲制約情報に基づいて(すなわち、状態情報項目とは無関係に)範囲チェックを実施する。次いで、フローはステップS80に進む。
【0065】
ステップS80において、範囲チェック手順に基づいて判定されるように、メモリアドレスが許可領域内にあるかどうかを判定する。メモリアドレスが許可領域内にない場合、フローはステップS86に進み、エラーをトリガする。ステップS82において、メモリアドレスが許可領域内にあると判定された場合、フローはステップS82に進み、メモリアクセスに関連付けられるすべての他の制約が満たされているかどうか(例えば、メモリアクセスが、ケイパビリティの許可ビットを考慮して、許可されたタイプのものであるかどうか)を判定する。「はい」の場合、フローはステップS84に進み、メモリアクセスを許可する。しかしながら、ステップS82において、他の制約が満たされていないと判定された場合、フローはステップS86に進み、エラーをトリガする。
【0066】
図8は、ケイパビリティ生成回路によって実行されるステップのシーケンスを概略的に示す。フローはステップS88で開始し、既存のケイパビリティに基づいて新しいケイパビリティを生成する命令を受信したかどうかを判定する。「いいえ」の場合、フローはステップS88に留まる。ステップS88において、既存のケイパビリティに基づいて新しいケイパビリティを生成する命令を受信したと判定し、次いで、フローはステップS90に進む。ステップS90において、既存のケイパビリティが指定タイプのものであるかどうかを判定する。指定タイプは様々な形態をとることができるが、一例では、指定タイプのケイパビリティはスタックポインタケイパビリティであり、スタックポインタケイパビリティから導き出されたケイパビリティは、上述の動的チェックプロセスを実施すべきケイパビリティである。
【0067】
既存のケイパビリティが指定タイプのものでない場合、フローはステップS100に進み、既存のケイパビリティの境界(範囲制約情報)の範囲内の境界(範囲制約情報)を有する新しいケイパビリティを生成する。次いで、フローはステップS102に進み、導き出されたケイパビリティの許可を、既存のケイパビリティと同じ許可のセット、又は既存のケイパビリティよりも制限された(限定的な)許可のセットのいずれかとして設定する。ステップS90において、既存のケイパビリティが指定タイプのものであると判定された場合、フローは代わりにステップS92に進む。ステップS92において、ケイパビリティ生成回路は、指定タイプのケイパビリティから新しいケイパビリティが導き出されることを示すようにビット(動的チェック指示)を設定する(これは、導き出されたケイパビリティを使用してメモリアクセスを生成するときに、上述の動的チェックプロセスを適時にトリガする)。次に、フローはステップS94に進み、既存のケイパビリティの境界(範囲制約情報)の範囲内の新しいケイパビリティの境界(範囲制約情報)を生成する。次いで、フローはステップS96に進み、導き出されたケイパビリティの許可を、既存のケイパビリティと同じ許可のセット、又は既存のケイパビリティよりも制限された(限定的な)許可のセットのいずれかとして設定する。次いで、フローはステップS98に進み、ケイパビリティ指示メタデータを生成し、ケイパビリティ指示メタデータは、生成されたケイパビリティに基づくメモリアクセスのための状態情報項目を提供するケイパビリティを示す。ステップS98では、任意選択で、生成されたケイパビリティの許可ビットを再利用することによってケイパビリティ指示メタデータを生成することができる。
【0068】
図9は、いくつかの例示的な構成による、ケイパビリティチェック回路によって実行される範囲チェック動作に基づいて定義されるメモリ領域を概略的に示す。ケイパビリティチェック回路は、制約情報182及びメモリアドレス184を備える所与のケイパビリティ180に基づくメモリ要求を受信する。範囲制約情報182は、第1の境界188及び第2の境界190を符号化する範囲制約情報186を備える。図示された例示的な構成では、所与のケイパビリティ180は、スタックポインタ値(SP)192に基づいて定義される割り振られたスタック領域198に基づいて、最初に割り振られる(左手の部分図)。割り振られたスタック領域198は、第1の境界188と第2の境界190との間のメモリ領域を備え、これらは、所与のケイパビリティ180の初期割り振りの一部として、制約情報182の一部を形成する範囲制約情報186へと符号化される。
【0069】
スタックポインタ値192は初期割り振り中と同じままであるが、割り振られたスタック領域198内にメモリアドレスが入るときには、所与のケイパビリティに基づくメモリアクセスが許可される。初期割り振りに続いて、(中央の部分図に示されるように)スタックポインタがスタックポインタ値194を提供するように修正される場合、割り振られたスタック領域は、第1の境界188とスタックポインタ値194との間の領域を含むように大きくなる。しかしながら、所与のケイパビリティ180に基づくメモリアクセスは、第1の境界と第2の境界190及びスタックポインタ値194のうちのより限定的なものとによって制約される。それゆえに、所与のケイパビリティ180に基づくメモリアクセスは、(スタックポインタがスタックポインタ値194をとるとき)メモリアドレス184がメモリ領域200内に入るときにのみ許可される。
【0070】
図9の右手側の部分図に示すように、スタックポインタ値192がスタックポインタ値196へと更新された場合、割り振られたスタック領域202は、最初に割り振られたスタック領域198から縮小される。所与のケイパビリティ180に基づくメモリアクセスは、第1の境界と第2の境界190及びスタックポインタ値196のうちのより限定的なものとによって境界画定される場合に許可される。図示された例示的な構成では、メモリアクセスは、メモリ領域202内に入る場合に許可されるが、メモリ領域204内に入る場合には、範囲制約情報186がこのメモリ領域が許可されることを示していても拒否される。それゆえに、スタックポインタ値196は、所与のケイパビリティ180に基づいて生成されたメモリアクセスにアクセス可能なメモリ領域202上の追加の境界を提供する。
【0071】
図10は、いくつかの例示的な構成に従って処理回路が動作することができる様々な動作モードを概略的に示す。
図10に示すように、処理回路は、セキュアモード及び低セキュアモードで動作するように配設され得る。加えて、又は代替的には、処理回路は、特権モード又は非特権モードでプログラムコードを実行するように配設され得る。特権のレベル及び異なるセキュリティモードは、直交信頼レベルであるとみなすことができ、処理回路の異なるモード信頼レベルは、セキュア/低セキュアドメイン及び特権/非特権モードの各組み合わせに関連付けられ得る。それゆえに、
図10に示すように、示される例では、4つの異なる動作モードがあり得る。
【0072】
処理回路は、動作モードの各々について、対応するスタックポインタを有するスタックとして動作するメモリ領域を定義するように構成される。各スタックは、総メモリ空間の異なる領域を表すので、モードのうちの1つにおいてスタックとして動作するメモリ領域に基づいて導き出されるケイパビリティは、そのモードで動作するときに対応するスタックポインタによって制約されるメモリアクセスについてのみ使用されるべきである。第1のモードに関連付けられた第1のスタックポインタに基づいて第1のモードで定義されたケイパビリティは、第1のモードであるときに第1のスタックポインタを参照してメモリアクセスを生成することのみが可能であるべきである。それゆえに、いくつかの例示的な構成では、判定タイプのケイパビリティは、所与のケイパビリティがそこから導き出されたケイパビリティしたスタックポインタを示すケイパビリティ指示メタデータを符号化する。
【0073】
図11は、動的チェック情報及びケイパビリティ指示メタデータを、
図10に関連して説明した4つのモードの各々においてスタックポインタに基づいて生成されるケイパビリティへと符号化する1つの方法を概略的に示す。各ケイパビリティは、読み出し許可ビット(R)、書き込み許可ビット(W)、実行許可ビット(X)、及び動的チェック指示(D)を含む。ケイパビリティは更に、範囲制約情報及びポインタ値を備えている。第1の例示的な使用事例では、ケイパビリティ210は、ポインタ値によってアクセス可能なメモリアドレス範囲に関して、範囲制約情報によって制約されるケイパビリティとして機能する。ケイパビリティ210の動的チェック表示(D)はクリア(論理0)であり、ケイパビリティが判定タイプではないことを示す。ケイパビリティ210が判定タイプのものではないことを示すために、論理1又は設定値が代わりに使用され得ることは、当業者には容易に明らかであろう。ケイパビリティ210は判定タイプのものではないので、許可ビット(R、W、及びX)は、ケイパビリティを使用して読み出し、書き込み、又はメモリアクセスを実施することができるかどうかを示す1又は0の論理値をとることができる。
【0074】
第2の例示的な使用事例では、ケイパビリティ220は、ポインタ値によってアクセス可能なメモリアドレス範囲に関して、範囲制約情報によって制約されるケイパビリティとして機能する。ケイパビリティ220の動的チェック指示は、ケイパビリティが、この場合はスタックポインタケイパビリティである、指定タイプの更なるケイパビリティによって更に制約されることを示すように設定される。4つのスタックポインタのうちのどのスタックポインタが状態情報項目を提供するかを示すために、読み出し許可ビット及び実行許可ビットが再利用される。この場合、読み出しビットは0に設定され、実行ビットは0に設定され、状態情報項目が低セキュア非特権モードのスタックポインタによって提供される(スタックポインタから導き出される)ことを示す。書き込み許可ビットは、許可ビットとして保持され、書き込みアクセスがケイパビリティ220について使用されるかどうかに依存して論理1又は論理0の値をとる。ケイパビリティ220に対する残りの許可は、低セキュア非特権モードのスタックポインタケイパビリティから(例えば、読み出し可能かつ実行不可能として)推測され得る又は判定され得る、のいずれかである。
【0075】
第3の例示的な使用事例では、ケイパビリティ230は、ポインタ値によってアクセス可能なメモリアドレス範囲に関して、範囲制約情報によって制約されるケイパビリティとして機能する。ケイパビリティ230の動的チェック指示は、ケイパビリティが、この場合はスタックポインタである、指定タイプの更なるケイパビリティによって更に制約されることを示すように設定される。4つのスタックポインタのうちのどのスタックポインタが状態情報項目を提供するかを示すために、読み出し許可ビット及び実行許可ビットが再利用される。この場合、読み出しビットは0に設定され、実行ビットは1に設定され、状態情報項目が高セキュア非特権モードのスタックポインタによって提供される(スタックポインタから導き出される)ことを示す。書き込み許可ビットは、許可ビットとして保持され、書き込みアクセスがケイパビリティ230について使用されるかどうかに依存して論理1又は論理0の値をとる。ケイパビリティ230に対する残りの許可は、高セキュア非特権モードのスタックポインタケイパビリティから(例えば、読み出し可能かつ実行不可能として)推測され得る又は判定され得る、のいずれかである。
【0076】
第4の例示的な使用事例では、ケイパビリティ240は、ポインタ値によってアクセス可能なメモリアドレス範囲に関して、範囲制約情報によって制約されるケイパビリティとして機能する。ケイパビリティ240の動的チェック指示は、ケイパビリティが、この場合はスタックポインタである、指定タイプの更なるケイパビリティによって更に制約されることを示すように設定される。4つのスタックポインタのうちのどのスタックポインタが状態情報項目を提供するかを示すために、読み出し許可ビット及び実行許可ビットが再利用される。この場合、読み出しビットは1に設定され、実行ビットは0に設定され、状態情報項目が低セキュア特権モードのスタックポインタによって提供される(スタックポインタから導き出される)ことを示す。書き込み許可ビットは、許可ビットとして保持され、書き込みアクセスがケイパビリティ240について使用されるかどうかに依存して論理1又は論理0の値をとる。ケイパビリティ240に対する残りの許可は、低セキュア特権モードのスタックポインタケイパビリティから(例えば、読み出し可能かつ実行不可能として)推測され得る又は判定され得る、のいずれかである。
【0077】
第5の例示的な使用事例では、ケイパビリティ250は、ポインタ値によってアクセス可能なメモリアドレス範囲に関して、範囲制約情報によって制約されるケイパビリティとして機能する。ケイパビリティ250の動的チェック指示は、ケイパビリティが、この場合はスタックポインタである、指定タイプの更なるケイパビリティによって更に制約されることを示すように設定される。4つのスタックポインタのうちのどのスタックポインタが状態情報項目を提供するかを示すために、読み出し許可ビット及び実行許可ビットが再利用される。この場合、読み出しビットは1に設定され、実行ビットは1に設定され、状態情報項目が高セキュア特権モードのスタックポインタによって提供される(スタックポインタから導き出される)ことを示す。書き込み許可ビットは、許可ビットとして保持され、書き込みアクセスがケイパビリティ250について使用されるかどうかに依存して論理1又は論理0の値をとる。ケイパビリティ250に対する残りの許可は、高セキュア特権モードのスタックポインタケイパビリティから(例えば、読み出し可能かつ実行不可能として)推測され得る又は判定され得る、のいずれかである。
【0078】
スタックポインタを判定するために使用される特定の符号化が提供され得、特権モードを示すために2つのビット(R又はX)のうちの一方が使用され、参照されているスタックポインタケイパビリティが高セキュアスタックポインタケイパビリティであるか、又は低セキュアスタックポインタケイパビリティであるかを示すために他方が使用される。代替的な符号化が、当業者には容易に明らかであろう。
【0079】
図12は、使用され得るシミュレータ実装形態を示す。前述の例は、当該技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、本明細書に記載の例による命令実行環境を提供することも可能であり、命令実行環境は、コンピュータプログラムの使用により実施される。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータと称されることがよくある。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータ実装は、ホストプロセッサ515で実行し得、ホストプロセッサ515は、任意選択的に、ホストオペレーティングシステム510を実行し、ホストオペレーティングシステム510は、シミュレータプログラム505をサポートする。いくつかの配設では、ハードウェアと提供された命令実行環境との間に複数層のシミュレーションがあり得、かつ/又は、複数の異なる命令実行環境が同じホストプロセッサ上に提供され得る。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなど一定の状況では、正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬、USENIX Conference、第53~63頁に記載されている。
【0080】
例が、特定のハードウェア構築又は特徴を参照して前述されている程度に、シミュレーションされた実装では、同等の機能が、好適なソフトウェア構築又は特徴によって提供され得る。例えば、特定の回路は、シミュレーションされた実装では、コンピュータプログラムロジックとして提供され得る。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実装では、ソフトウェアデータ構造として提供され得る。また、ハードウェア装置2内のメモリ50にアクセスするために使用される物理アドレス空間は、シミュレートされたアドレス空間としてエミュレートされ得、シミュレートされたアドレス空間は、ホストオペレーティングシステム510によって使用される仮想アドレス空間に、シミュレータ505によってマッピングされている。前述の例で言及されているハードウェア要素のうち1つ以上がホストハードウェア(例えば、ホストプロセッサ515)に存在する配設では、いくつかのシミュレートされた実装は、好適である場合、ホストハードウェアを使用し得る。
【0081】
シミュレータプログラム505は、(非一時的媒体であり得る)コンピュータ読み取り可能な記憶媒体に記憶され得、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード500への仮想ハードウェアインタフェース(命令実行環境)を提供し、仮想ハードウェアインタフェースは、シミュレータプログラム505によってモデル化されたハードウェアアーキテクチャのハードウェアインタフェースと同じである。したがって、ターゲットコード500のプログラム命令は、シミュレータプログラム505を使用して命令実行環境内から実行され得、このため、上で考察される装置2のハードウェア特徴を実際には有しないホストコンピュータ515は、これらの特徴をエミュレートすることができる。シミュレータプログラムは、処理回路120の挙動をエミュレートするための処理プログラムロジック520と、
図5a~
図5dのケイパビリティチェック回路122装置の挙動をエミュレートするためのケイパビリティチェックプログラムロジック522と、を含むことができる。加えて、シミュレータプログラムは、5a~5dのいずれかに関連して説明した追加の特徴の挙動をエミュレートするための処理プログラムロジックを含んでもよい。それゆえに、ケイパビリティを使用したメモリへのアクセスを制約するための本明細書で説明される技法は、
図12の例では、シミュレータプログラム505によってソフトウェアで実施され得る。
【0082】
要約すると、メモリアクセスを制約するための装置、方法及びコンピュータプログラムが提供される。この装置は、メモリへのアクセス要求がその間に生成される動作を実施する処理回路を備える。処理回路は、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている。この装置は、所与のケイパビリティを使用してメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別される所与の制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路を更に備える。ケイパビリティチェック動作は、所与の制約情報によって提供される範囲制約情報に基づいて範囲チェックを実施することと、判定条件が満たされているとき、範囲制約情報と処理回路の動作の実施中に動的に変動する装置の状態情報項目の両方に依存して範囲チェックを実施することと、を含む。
【0083】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配設又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0084】
本明細書では例示的な実施形態について添付の図面を参照して詳細に説明してきたが、理解されるように、本発明はそれらと寸分違わない実施形態に制限されるのではなく、また、添付の特許請求の範囲に定める本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができる。例えば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴でなされ得る。
【国際調査報告】