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

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

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

特表2024-515081ケイパビリティを使用してメモリへのアクセスを制約するための技法
<>
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図1
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図2
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図3
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図4
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図5
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図6
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図7
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図8
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図9
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図10
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図11
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図12
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-04
(54)【発明の名称】ケイパビリティを使用してメモリへのアクセスを制約するための技法
(51)【国際特許分類】
   G06F 9/30 20180101AFI20240328BHJP
   G06F 9/34 20180101ALI20240328BHJP
   G06F 12/14 20060101ALI20240328BHJP
【FI】
G06F9/30 350A
G06F9/34 350A
G06F12/14 510A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023563290
(86)(22)【出願日】2022-02-17
(85)【翻訳文提出日】2023-11-02
(86)【国際出願番号】 GB2022050429
(87)【国際公開番号】W WO2022229590
(87)【国際公開日】2022-11-03
(31)【優先権主張番号】2106069.4
(32)【優先日】2021-04-28
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ボットマン、フランソワ クリストファー ジャック
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】スミス、ブラッドリー ジョン
【テーマコード(参考)】
5B017
5B033
【Fターム(参考)】
5B017AA01
5B017BA01
5B017CA01
5B033BE00
5B033DB01
5B033FA27
(57)【要約】
ケイパビリティを使用してメモリへのアクセスを制約するための技法が提供される。動作を実施するための処理回路であって、動作中に、メモリへのアクセス要求が生成され、回路は、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路を有する装置が提供される。装置はまた、処理回路がメモリのリテラルプール内の位置を識別するケイパビリティ生成命令を実行することに応答して、リテラルプール内の位置からリテラル値を取り出し、生成されたケイパビリティのポインタ値がリテラル値から決定される生成されたケイパビリティを生成するケイパビリティ生成回路を提供する。生成されたケイパビリティの制約情報は、ケイパビリティ生成命令によって指定された情報に依存して、オプションの制限されたセットから選択される。そのような手法は、コードサイズを低減しながら、ケイパビリティを生成するためのロバストな機構を提供することが分かっている。
【特許請求の範囲】
【請求項1】
装置であって、
動作を実施するための処理回路であって、前記動作中に、メモリへのアクセス要求が生成され、前記回路は、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、
前記メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を前記処理回路が実行することに応答して、前記リテラルプール内の前記位置からリテラル値を取り出し、生成されたケイパビリティの前記ポインタ値が前記リテラル値から決定される前記生成されたケイパビリティを生成するケイパビリティ生成回路であって、前記生成されたケイパビリティの前記制約情報は、前記ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから選択される、ケイパビリティ生成回路と、
を備える、装置。
【請求項2】
前記ケイパビリティ生成命令は、現在のプログラムカウンタ値と組み合わせて前記ケイパビリティ生成回路によって使用される即値を指定して、前記生成されたケイパビリティの前記ポインタ値を決定するために使用される前記リテラル値を含む前記リテラルプール内の前記位置を識別する、請求項1に記載の装置。
【請求項3】
前記制約情報は、前記生成されたケイパビリティの前記ポインタ値から導出されるメモリアドレスを使用してアクセス可能なメモリの領域を識別する境界情報を含み、前記オプションの制限されたセットは、前記境界情報によって識別される前記領域の許容可能なサイズの制限されたセットを含む、請求項1又は2に記載の装置。
【請求項4】
前記ケイパビリティ生成命令は、前記許容可能なサイズの制限されたセットから前記領域のサイズを決定するために、前記ケイパビリティ生成回路によって使用されるサイズ指標値を指定する、請求項3に記載の装置。
【請求項5】
前記リテラル値は、前記ポインタ値を決定するために使用されないいくつかの冗長ビットを含み、前記ケイパビリティ生成回路は、前記リテラル値の前記冗長ビット内に提供される情報から前記領域のサイズを決定するように配設される、請求項3に記載の装置。
【請求項6】
前記ケイパビリティ生成回路は、前記リテラル値を形成するために使用される符号化方式に依存して、前記ポインタ値を決定するために使用されるビットを指定する第1の部分と、前記冗長ビットを含む第2の部分との間の前記リテラル値内の境界を決定するように配設される、請求項5に記載の装置。
【請求項7】
前記境界情報は、前記ポインタ値から決定される第1の境界と、前記第1の境界から決定される第2の境界と、前記許容可能なサイズの制限されたセットから決定される前記領域のサイズとを識別する、請求項3から6のいずれか一項に記載の装置。
【請求項8】
前記制約情報は、メタデータの項目を含み、前記オプションの制限されたセットは、前記メタデータの項目についての可能な値の制限されたセットを含む、請求項1から7のいずれか一項に記載の装置。
【請求項9】
前記ケイパビリティ生成命令は、前記メタデータの項目のうちの1つ以上の値を決定するために、前記ケイパビリティ生成回路によって使用されるメタデータ情報を指定する、請求項8に記載の装置。
【請求項10】
前記メタデータの項目のうちの1つ以上についての値を決定するために、前記ケイパビリティ生成回路によって参照される制御レジスタを更に備える、請求項8又は9に記載の装置。
【請求項11】
前記リテラル値は、前記ポインタ値を決定するために使用されないいくつかの冗長ビットを含み、前記処理回路は、前記リテラル値の前記冗長ビット内に提供される情報から前記メタデータの項目のうちの1つ以上についての値を決定するように配設される、請求項8から10のいずれか一項に記載の装置。
【請求項12】
前記メタデータの項目のうちの前記1つ以上について前記決定された値は、前記処理回路の現在の動作モードに依存する、請求項9から11のいずれか一項に記載の装置。
【請求項13】
前記メタデータの項目は、前記生成されたケイパビリティの許容可能な使用を識別する複数の許可指標を含み、前記オプションの制限されたセットは、前記複数の許可指標によって示され得る許可の許容された組合せの制限されたセットを含む、請求項8から12のいずれか一項に記載の装置。
【請求項14】
前記ケイパビリティ生成回路は、前記生成されたケイパビリティのタイプに依存して、前記複数の許可指標によって示す前記許可の組合せを決定するように配設される、請求項13に記載の装置。
【請求項15】
前記ケイパビリティ生成命令は、宛先ケイパビリティ記憶要素を指定し、前記ケイパビリティ生成回路は、前記指定された宛先ケイパビリティ記憶要素から前記生成されたケイパビリティの前記タイプを推論するように配設される、請求項14に記載の装置。
【請求項16】
前記ケイパビリティ生成命令は、宛先ケイパビリティ記憶要素を指定し、
前記指定された宛先ケイパビリティ記憶要素が、プログラムカウンタケイパビリティを記憶するために使用されるプログラムカウンタケイパビリティ記憶要素である場合、前記処理回路は、前記生成されたケイパビリティが前記プログラムカウンタケイパビリティ記憶要素に記憶されると、プログラム実行を、前記生成されたケイパビリティを使用して識別されるターゲット命令に分岐させるように配設される、請求項1から15のいずれか一項に記載の装置。
【請求項17】
前記ケイパビリティ生成命令は、宛先ケイパビリティ記憶要素を指定し、
前記ケイパビリティ生成回路は、前記指定された宛先ケイパビリティ記憶要素がプログラムカウンタケイパビリティ記憶要素である場合に、障害をトリガするように配設される、請求項1から15のいずれか一項に記載の装置。
【請求項18】
前記ケイパビリティ生成回路は、前記処理回路が前記ケイパビリティ生成命令を実行することに応答して、前記生成されたケイパビリティ及び1つ以上の更に生成されたケイパビリティを生成するように配設され、各更に生成されたケイパビリティについて、前記ケイパビリティ生成回路は、前記ケイパビリティ生成命令によって識別された前記位置からオフセットされた前記リテラルプール内の関連する位置から取得された関連するリテラル値から、その更に生成されたケイパビリティに対する前記ポインタ値を決定するように配設される、請求項1から17のいずれか一項に記載の装置。
【請求項19】
前記ケイパビリティ生成回路は、前記生成されたケイパビリティと、同じ制約情報を有する各々の更に生成されたケイパビリティと、を生成するように配設される、請求項18に記載の装置。
【請求項20】
前記ケイパビリティ生成命令は、前記生成されたケイパビリティのための宛先ケイパビリティ記憶要素を指定し、前記ケイパビリティ生成回路は、前記指定された宛先ケイパビリティ記憶要素から、各々の更に生成されたケイパビリティのための関連する宛先ケイパビリティ記憶要素を導出するように配設される、請求項18又は19に記載の装置。
【請求項21】
前記処理回路は、いくつかの異なる動作モードで動作可能であり、前記ケイパビリティ生成回路の動作は、前記処理回路の現在の動作モードに依存する、請求項1から20のいずれか一項に記載の装置。
【請求項22】
所与のケイパビリティを使用して、そのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって提供された前記制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェック回路を更に備える、請求項1から21のいずれか一項に記載の装置。
【請求項23】
メモリへのアクセスを制約する方法であって、
動作を実施するために処理回路を採用することであって、前記動作中に、メモリへのアクセス要求が生成され、前記処理回路は、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成する、ことと、
前記メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を前記処理回路が実行することに応答して、ケイパビリティ生成動作を実行することであって、前記ケイパビリティ生成動作は、前記リテラルプール内の前記位置からリテラル値を取り出すことと、前記生成されたケイパビリティの前記ポインタ値が前記リテラル値から決定される生成されたケイパビリティを生成することとを含み、前記生成されたケイパビリティの前記制約情報は、前記ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから選択される、ことと、
を含む、方法。
【請求項24】
命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
動作を実施するための処理プログラムロジックであって、前記動作中に、メモリへのアクセス要求が生成され、前記処理プログラムロジックは、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、
前記メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を前記処理プログラムロジックが実行することに応答して、前記リテラルプール内の前記位置からリテラル値を取り出し、生成されたケイパビリティの前記ポインタ値が前記リテラル値から決定される前記生成されたケイパビリティを生成するケイパビリティ生成プログラムロジックであって、前記生成されたケイパビリティの前記制約情報は、前記ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから選択される、ケイパビリティ生成プログラムロジックと、
を備える、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関し、より具体的には、ケイパビリティを使用したメモリへのアクセスの制約に関する。
【0002】
所与のプロセスに対して特定のケイパビリティが定義され、定義されたケイパビリティ外の動作を実行しようとする試みがある場合に、エラーがトリガされ得る、ケイパビリティベースのアーキテクチャへの関心が高まっている。ケイパビリティは、様々な形態を採ることができるが、ケイパビリティの1つのタイプは、有界ポインタ(「ファットポインタ」とも称され得る)である。
【0003】
例えば、ケイパビリティを参照して実行されるメモリへのアクセスが、ケイパビリティから決定される定義された領域内のメモリ位置に関してのみ実行可能であり、ケイパビリティによっても定義される特定の許可チェックが満たされる場合にのみ実行可能であり得ることを強制することによって、ケイパビリティがシステム内のセキュリティ制御手段として使用されるので、ケイパビリティを作成するアビリティが厳密に制御されることが重要である。
【0004】
機能を生成するために使用することができる1つの機構は、コンパイラが、関連するプログラムコードをコンパイルするときにケイパビリティを生成することを可能にされ、生成されたケイパビリティは、コンパイルされたプログラムコードと組み合わせて、次いで不揮発性メモリ内に静止画像を形成するリテラルプール内に記憶されることを含む。プログラムコードが実行されると、リテラルプールに記憶されたコンパイラ生成ケイパビリティは、コンパイルされたコード内の命令を使用してレジスタにロードされ得る。いくつかのシステムでは、ケイパビリティがそのようなレジスタにロードされると、ケイパビリティを修正することが可能であり得るが、典型的なシステムでは、任意の修正は、ケイパビリティに関連付けられた境界を低減するか、又は許可を低減するためにのみ許可され、したがって、元のコンパイラ生成ケイパビリティに対して低減されたケイパビリティをもたらす。
【0005】
ケイパビリティを生成するためにコンパイラを使用することは、ケイパビリティ生成に対するロバストな制御を可能にするが、それは、静止画像のコードサイズに著しい悪影響を及ぼす可能性がある。特に、リテラルプールにケイパビリティを記憶することは、従来のポインタに比べてケイパビリティのサイズが本質的に大きいことに起因して、また、そのようなケイパビリティに関連付けられたアライメント要件に起因して、全体的なコードサイズを著しく増大させる可能性がある。多くの低コストシステムでは、デバイスは典型的にはメモリが制約されており、不揮発性ストレージは貴重であり、したがって、コンパイラ生成ケイパビリティの使用から生じるコードサイズの増加は、そのような状況では魅力的ではない。したがって、そのようなケイパビリティを提供する一方で、それらのケイパビリティが生成され得る方法に関して厳密な制御を保持するための改善された機構を提供することが望ましい。
【発明の概要】
【0006】
1つの例示的な構成では、装置であって、動作を実施するための処理回路であって、動作中に、メモリへのアクセス要求が生成され、回路は、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を処理回路が実行することに応答して、リテラルプール内の位置からリテラル値を取り出し、生成されたケイパビリティのポインタ値がリテラル値から決定される生成されたケイパビリティを生成するケイパビリティ生成回路であって、生成されたケイパビリティの制約情報は、ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから選択される、ケイパビリティ生成回路と、を備える、装置が提供される。
【0007】
別の例示的な構成では、メモリへのアクセスを制約する方法であって、動作を実施するために処理回路を採用することであって、動作中に、メモリへのアクセス要求が生成され、処理回路は、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成する、ことと、メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を処理回路が実行することに応答して、ケイパビリティ生成動作を実行することであって、ケイパビリティ生成動作は、リテラルプール内の位置からリテラル値を取り出すことと、生成されたケイパビリティのポインタ値がリテラル値から決定される生成されたケイパビリティを生成することとを含み、生成されたケイパビリティの制約情報は、ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから選択される、ことと、を含む、方法が提供される。
【0008】
更に別の構成例では、命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、動作を実施するための処理プログラムロジックであって、動作中に、メモリへのアクセス要求が生成され、処理プログラムロジックは、ポインタ値及び関連する制約情報を提供するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を処理プログラムロジックが実行することに応答して、リテラルプール内の位置からリテラル値を取り出し、生成されたケイパビリティのポインタ値がリテラル値から決定される生成されたケイパビリティを生成するケイパビリティ生成プログラムロジックであって、生成されたケイパビリティの制約情報は、ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから選択される、ケイパビリティ生成プログラムロジックと、を備える、コンピュータプログラムが提供される。そのようなコンピュータプログラムを記憶するためにコンピュータ可読媒体が提供され得、コンピュータ可読媒体は、非一時的又は一時的な形態であり得る。
【図面の簡単な説明】
【0009】
本技法について、添付の図面に示す本技法の例を参照して、例示としてのみ更に説明する。
図1】例示的な一実装形態による装置のブロック図である。
図2】有界ポインタ記憶要素のセット内のポインタ値を設定するか、又はそれにアクセスしようとする場合にエラーがトリガされ得る命令のタイプの例を示し、ポインタ値は、関連付けられた範囲情報によって示された範囲外のアドレスを指定するために使用される。
図3】例示的な一実装形態による、有界ポインタに関連するタグビットの使用を例示する。
図4】例示的な一実装形態による、本明細書に説明される技法に従って使用され得るケイパビリティの形態を概略的に図示する。
図5】例示的な一実装形態による、コンパイラを使用して、リテラルプール内に記憶するためのリテラル値を生成し得る方法を概略的に図示する。
図6】例示的な一実装形態による、装置内に提供され得る構成要素を例示するブロック図である。
図7】例示的な一実装形態による、ケイパビリティ生成命令に応答して実行されるステップを示す流れ図である。
図8】例示的な一実装形態による、図7のステップ275を実施するために実行され得るステップをより詳細に示す流れ図である。
図9】例示的な一実装形態による、生成されたケイパビリティの許可がどのように決定され得るかを示す流れ図である。
図10】例示的な一実装形態による、処理回路の異なるドメイン及び処理状態の一例を示す図である。
図11】例示的な一実装形態による、ケイパビリティを生成するときに実行される処理が、生成されるケイパビリティのタイプにどのように依存し得るかを示す流れ図である。
図12】例示的な一実装形態による、単一のケイパビリティ生成命令から複数のケイパビリティがどのように生成され得るかを示す流れ図である。
図13】使用され得るシミュレータ例を示す。
【発明を実施するための形態】
【0010】
本明細書で説明する技法によれば、装置であって、動作を実施するための処理回路であって、その動作中に、メモリへのアクセス要求が生成される、処理回路を有する装置が提供される。処理回路は、ポインタ値及び関連する制約情報を提供するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている。処理回路によって生成されたメモリアドレスは、アドレス変換が実施されるシステムにおける仮想アドレスであり得るか、又は代替的にアドレス変換をサポートしないシステムにおける物理アドレスであり得る。
【0011】
本明細書に記載の技術によれば、装置はまた、メモリのリテラルプール内の位置を識別するケイパビリティ生成命令を処理回路が実行することに応答して、リテラルプール内の位置からリテラル値を取り出し、生成されたケイパビリティのポインタ値がリテラル値から決定される生成されたケイパビリティを生成するケイパビリティ生成回路を提供してもよい。リテラル値を使用してポインタ値を決定することができるが、リテラル値自体はケイパビリティではなく、代わりに、ケイパビリティ生成回路を使用して、そのポインタ値がリテラル値から決定されるケイパビリティが生成されることに留意されたい。ケイパビリティを生成するために、ケイパビリティ生成回路は、ケイパビリティ生成命令によって指定された情報に応じて、オプションの制限されたセットから、生成されたケイパビリティの制約情報を選択するように更に配設される。
【0012】
そのようなアプローチは、コンパイラによって生成されるケイパビリティと同程度に信頼され得るケイパビリティが生成されることを可能にするが、コンパイラ生成ケイパビリティを組み込む実装と比較した場合、コードサイズの有意な低減を伴うことが見出されている。特に、信頼されている生成されたケイパビリティに関して、本明細書で説明する技法によれば、ケイパビリティ生成回路は、コンパイラされたコードによって提供されるケイパビリティ生成命令を実行することによってケイパビリティを生成し、ケイパビリティ生成回路は、ケイパビリティ生成命令によって直接指定される特定の他の情報と組み合わせて、(すなわち、コンパイラによって生成され、静的画像の一部である値)リテラルプールからのリテラル値のみを使用する。ケイパビリティは、リテラルプール内のリテラル値から生成され、リテラルプール内にコンパイラ生成ケイパビリティを記憶する要件を回避するので、リテラルプールのサイズを大幅に低減することができる。例えば、リテラル値は、通常、対応するケイパビリティのサイズに対して大幅に縮小されたサイズである標準ポインタ値のサイズを有してもよい。更に、リテラルプール内に記憶されたケイパビリティに関連するアライメント問題はもはや生じず、更なる効率及び全体的なコードサイズの更なる低減につながる。
【0013】
このようなアプローチは、多くのシステムにおいて非常に有益であることが分かっている。例えば、コンパイラによって以前に生成された可能性があるかなりの数の必要とされるケイパビリティが、メモリの小さな領域のみにアクセスし、典型的には、ある制限された許可の組合せのみを有する場合が多い。したがって、ケイパビリティの制約情報を形成するために使用される範囲及び許可の共通サブセットは、ケイパビリティ生成回路に対して利用可能なオプションの制限されたセットとして識別されることができ、次いで、ケイパビリティ生成命令によって指定される情報に応じてケイパビリティを生成するとき、それらのオプションのうちの1つが選択される。したがって、これは、静的画像内で潜在的に多数のコンパイラ生成ケイパビリティを指定する必要性を回避し、代わりに、リテラルプール内のリテラル値を使用してコードの実行中にそれらのケイパビリティが生成されることを可能にし、識別されたオプションの制限されたセットから選択された情報を制約することによって、全体的なコードサイズの大幅な低減を可能にする。上記の方法で生成されるための要件を満たさない(例えば、オプションの制限されたセット内に入る制約情報を指定しない)任意のケイパビリティについて、コンパイラ生成ケイパビリティは、代わりに、リテラルプールに記憶するための標準的な方法で生成され得ることに留意されたい。
【0014】
ケイパビリティ生成回路は、様々な形態を採ることができる。これは例えば、処理回路とは別個の構成要素であり得るか、又は代替的に装置の処理回路内に提供され得る。
【0015】
この装置はまた、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって提供された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路を更に設けられてもよい。ケイパビリティ生成回路と同様に、ケイパビリティチェック回路は、処理回路とは別個の構成要素であり得るか、又は代替的に装置の処理回路内に提供され得る。
【0016】
制約情報が関連付けられたケイパビリティによって識別され得るいくつかの方法がある。例えば、ケイパビリティは、例示的な一実装形態において、制約情報を直接含む場合がある。しかしながら、代替的な実装形態では、ケイパビリティは代わりに、制約情報が位置するメモリにおけるロケーションを(直接的又は間接的に)示し得る。
【0017】
ケイパビリティ生成命令が、要求されたリテラル値が取り出されるリテラルプール内の位置を識別することができるいくつかの方法がある。例えば、ベースアドレスを適切なシステムレジスタ内に提供することができ、ケイパビリティ生成命令は、システムレジスタ内で指定されたベースアドレスからのオフセットとして使用することができる即値を指定する。
【0018】
しかしながら、例示的な一実装形態では、ケイパビリティ生成命令は、現在のプログラムカウンタ値と組み合わせてケイパビリティ生成回路によって使用される即値を指定して、生成されたケイパビリティのポインタ値を決定するために使用されるリテラル値を含むリテラルプール内の位置を識別する。これは、通常、コンパイラがリテラル値を消費する命令に近い位置にリテラル値を記憶するので、特に効率的な機構を提供し、したがって、現在のプログラムカウンタ値と組み合わせて使用される即値を指定することによって、現在のプログラムカウンタ値がケイパビリティ生成命令を識別し、次いで、これは、リテラルプール内の必要なリテラル値の位置を識別するための単純かつ効果的な機構を提供する。
【0019】
即値は様々な形態を採ることができるが、例示的な一実装形態では、プログラムカウンタ相対オフセットを提供し、単に現在のプログラムカウンタ値に即値を加算する(又は現在のプログラムカウンタ値から即値を減算する)ことによって、リテラルプール内の位置を識別することを可能にする。
【0020】
生成されたケイパビリティについての制約情報は、様々な形態を採ることができるが、例示的な一実装形態は、生成されたケイパビリティのポインタ値から導出されるメモリアドレスを使用してアクセス可能なメモリの領域を識別する境界情報を含み、オプションの制限されたセットは、境界情報によって識別される領域の許容可能なサイズの制限されたセットを含む。先に述べたように、かなりの数のケイパビリティが比較的小さい構造のみにアクセスすることを必要とし、したがって、境界情報のためのオプションの制限されたセットとして符号化することができる、そのような構造の可能なサイズの制限されたセットが存在し得ることが分かっている。
【0021】
ケイパビリティ生成命令がケイパビリティ生成回路に対して、許容可能なサイズの制限されたセットのうちのどの1つが、生成されるケイパビリティのために使用されるべきかを示すことができるいくつかの方法がある。しかしながら、例示的な一実装形態では、ケイパビリティ生成命令は、許容可能なサイズの制限されたセットから領域のサイズを決定するために、ケイパビリティ生成回路によって使用されるサイズ指標値を指定する。サイズ指標値は、様々な形態を採ることができる。例えば、サイズを直接指定することができるが、代替的に、任意の他の適切な符号化を使用することができる。例えば、許容可能なサイズの制限されたセットは、2の累乗によって変化してもよく、したがって、サイズ指標値は、生成されている現在のケイパビリティにどの2の累乗が適用されるかを識別することができる。あるいは、サイズ指標値は、所定の最小サイズに対するオフセットを識別することができる。したがって、サイズ指標値は、その場合、所定の最小サイズ値に加算され得る即値を効果的に形成する。このような最小サイズ値を使用することにより、これにより、ある程度広い範囲の有用な値を指定することができる。例えば、0のサイズ指標値は、依然として感知可能な意味を有し、この場合、境界情報によって識別されるアクセス可能領域のサイズが所定の最小サイズであるべきであることを単に識別する。
【0022】
しかしながら、許容可能なサイズの制限されたセットからのサイズの選択が、ケイパビリティ生成命令によって提供される情報からケイパビリティ生成回路によって推論され得る他の方法が存在する。例えば、リテラル値は、ポインタ値を決定するために使用されないいくつかの冗長ビットを含み得、ケイパビリティ生成回路は、リテラル値の冗長ビット内に提供される情報から領域のサイズを決定するように配設され得る。例えば、リテラル値から決定されるポインタ値において使用されるいくらかのレベルのアライメントが存在してもよく、これは、ロードされたリテラル値の特定の数の最下位ビットが、生成されたケイパビリティのためのポインタ値を形成するために必要とされないことを意味する。そのような場合、それらの冗長ビットは、代わりに、生成されたケイパビリティの制約情報によって識別されるべき領域のサイズを符号化するために使用され得る。
【0023】
冗長ビットの数は予め決定することができるが、別の実施態様では、冗長ビットの数を変えることができる。例えば、ケイパビリティ生成回路は、リテラル値を形成するために使用される符号化方式に依存して、ポインタ値を決定するために使用されるビットを指定する第1の部分と、冗長ビットを含む第2の部分との間のリテラル値内の境界を決定するように配設され得る。特定の例として、三角形符号化の形態を使用して、リテラル値内のサイズ及びポインタ値情報の両方をそのような方法で符号化することができる。
【0024】
サイズ情報が決定されると、ケイパビリティ生成命令内で指定された情報から境界情報を決定することができるいくつかの方法がある。しかしながら、例示的な一実装形態では、境界情報は、ポインタ値から決定される第1の境界と、第1の境界から決定される第2の境界と、許容可能なサイズの制限されたセットから決定される領域のサイズとを識別する。これは、ポインタ値を使用して第1の境界を効果的に決定し、次にサイズ情報を使用して第1の境界から第2の境界を決定することによって、境界情報を識別するための効率的な機構を提供する。第1の境界がポインタ値からどのように決定されるかは、実装に依存して変更され得るが、1つの特定の例示的な実装では、第1の境界はポインタ値に等しく設定される。
【0025】
例示的な一実装形態では、制約情報はメタデータの項目を含むことができ、オプションの制限されたセットは、メタデータの項目についての可能な値の制限されたセットを含む。したがって、例示的な一実装形態では、制約情報は、前述の境界情報とメタデータの追加項目の両方を含むことができる。メタデータの項目は、様々な形態を採ることができるが、例示的な一実装形態では、メタデータの項目は、生成されたケイパビリティの許容可能な使用を識別する複数の許可指標を少なくとも含み得、オプションの制限されたセットは、複数の許可指標によって示され得る許可の許容された組合せの制限されたセットを含む。例えば、ほとんどの場合、許可は、ケイパビリティ内の関連付けられたポインタがメモリからデータを読み出すためのアドレスを生成するためにのみ使用され得ることを示すか、又は代わりに、ポインタが読み出しアクセス及び書き込みアクセスの両方を実行するために使用され得ることを識別し得る。許可の許容された組合せの制限されたセットを用いて、オプションのその制限されたセット内からの選択を、ケイパビリティ生成命令によって提供される情報内に効率的に符号化することができる。
【0026】
ケイパビリティ生成命令からケイパビリティ生成回路によってメタデータの項目に与えられる値を決定することができる多くの異なる方法がある。例えば、ケイパビリティ生成命令は、メタデータの項目のうちの1つ以上の値を決定するために、ケイパビリティ生成回路によって使用されるメタデータ情報を指定してもよい。そのようなメタデータ情報は、いくつかの異なる方法で提供することができ、例示的な一実装形態では、例えば、メタデータの関連項目に使用される値を直接識別するか、又はオプションの制限されたセットのうちのどれを選択するかを識別することができる、1つ以上の即値の形態を採ることができる。代替として、異なるフラグ値が命令内で指定されてもよく、又はケイパビリティ生成命令の異なる変形が、異なるメタデータ定義情報を識別するために使用されてもよい。
【0027】
代替的、又は追加的に、装置は、メタデータの項目のうちの1つ以上のものの値を決定するために、ケイパビリティ生成回路によって参照される制御レジスタを更に備えてもよい。制御レジスタは、様々な形態を採ることができ、例示的な一実装形態では、システム構成レジスタとすることができる。
【0028】
メタデータの項目のうちの1つ以上についての値がどのように決定され得るかの別の代替例又は追加例として、リテラル値は、前述のように、ポインタ値を決定するために使用されないいくつかの冗長ビットを含み得る。そのような実装形態では、処理回路は、リテラル値の冗長ビット内に提供される情報からメタデータの項目のうちの1つ以上についての値を決定するように配設され得る。
【0029】
ケイパビリティ生成命令によって指定された情報に基づいてメタデータの1つ以上の項目の値が決定される方法は、1つ以上の要因に応じて変化し得る。例えば、そのような決定は、処理回路の現在の動作モードに依存し得る。したがって、メタデータの項目の値を決定するために使用される情報を提供するために上記のオプションのいずれが使用されるかにかかわらず、その情報が解釈される方法は、処理回路の現在の動作モードに依存し得る。別の代替として、制御レジスタがケイパビリティ生成回路によって参照される場合、その制御レジスタは、処理回路の現在の動作モードに応じて異なる情報を提供してもよい。
【0030】
メタデータの項目の値がどのように決定され得るかについての上記の異なる例のすべては、独立して、又は組み合わせて使用され得ることに留意されたい。例えば、メタデータの1つ以上の項目は、1つの技法を使用して決定されたそれらの値を有することができ、メタデータの他の項目は、他の技法のうちの1つを使用して決定されたそれらの値を有することができる。
【0031】
前述のように、生成されたケイパビリティ内で提供され得るメタデータのタイプのうちの1つは、複数の許可指標を備えることができる。例示的な一実装形態ケイパビリティ生成回路は、生成されたケイパビリティのタイプに依存して、複数の許可指標によって示す許可の組合せを決定するように配設され得る。特に、適切な許可の組合せの制限されたセットは、生成されるケイパビリティのタイプに応じてもよく、したがって、生成されるケイパビリティのタイプを考慮に入れることによって、許可の組合せを決定するために提供される情報は、生成されるケイパビリティのタイプに応じて異なって解釈され得る。
【0032】
生成されたケイパビリティのタイプを決定することができるいくつかの方法がある。例えば、ケイパビリティ生成命令は、典型的には、生成されたケイパビリティが記憶されるべき宛先ケイパビリティ記憶要素を指定し、ケイパビリティ生成回路は、指定された宛先ケイパビリティ記憶要素から生成されたケイパビリティのタイプを推論するように配設され得る。例えば、宛先ケイパビリティ記憶要素は、汎用ケイパビリティ記憶要素であり得るか、又はプログラムカウンタケイパビリティ記憶要素であり得、決定された許可の組合せは、汎用ケイパビリティが生成されているか、又はプログラムカウンタケイパビリティが生成されているかに依存し得る。
【0033】
例えば、汎用ケイパビリティについては、実行可能な許可が設定されないことが典型的な場合であり得るが、プログラムカウンタケイパビリティについては、実行可能な許可が設定され得る。特に、実行可能許可ビットは、フェッチ及び実行される命令のためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを示すことができ、そのような許可は、典型的には、プログラムカウンタケイパビリティに適切であり得るが、上述の技法を使用して生成される汎用ケイパビリティには適切でない場合がある。
【0034】
通常、ケイパビリティ生成命令を実行するときに呼び出される処理は、指定された宛先ケイパビリティ記憶要素内に生成されたケイパビリティを記憶することで終了する。しかしながら、例示的な一実装形態では、指定された宛先ケイパビリティ記憶要素が、プログラムカウンタケイパビリティを記憶するために使用されるプログラムカウンタケイパビリティ記憶要素である場合、処理回路は、生成されたケイパビリティがプログラムカウンタケイパビリティ記憶要素に記憶されると、プログラム実行を、生成されたケイパビリティを使用して識別されるターゲット命令に分岐させるようにも配設され得る。これは、ケイパビリティ生成命令に続く後続の分岐命令を指定する必要性を回避することによって、コード密度を改善することができる。
【0035】
必要に応じて、上述したケイパビリティ生成機能は、特定のタイプのケイパビリティに限定することができる。一例として、一実装形態では、プログラムカウンタケイパビリティを生成するためのそのようなケイパビリティ生成命令の使用を防止することができる。特定の例として、ケイパビリティ生成回路は、ケイパビリティ生成命令のための指定された宛先ケイパビリティ記憶要素がプログラムカウンタケイパビリティ記憶要素である場合に、障害をトリガするように配設され得る。
【0036】
例示的な一実装形態では、ケイパビリティ生成回路は、ケイパビリティ生成命令の単一のインスタンスに応答して複数のケイパビリティを生成するように配設され得る。したがって、ケイパビリティ生成命令が実行されるとき、ケイパビリティ生成回路は、上記で参照された生成されたケイパビリティだけでなく、1つ以上の更に生成されたケイパビリティも生成し得る。更に生成された各ケイパビリティに対して、ケイパビリティ生成回路は、ケイパビリティ生成命令によって識別された位置からオフセットされたリテラルプール内の関連する位置から取得された関連するリテラル値から、その更に生成されたケイパビリティに対するポインタ値を決定するように配設されてもよい。したがって、ケイパビリティ生成命令は、単一のリテラル値の位置を依然として識別することができ、そのリテラル値は、第1の生成されたケイパビリティのためのポインタ値を決定するために使用されるが、更に生成されたケイパビリティの各々のために使用されるべきリテラル値の位置は、第1の生成されたケイパビリティのためのリテラル値のために決定された位置から推論され得る。オフセットは、ケイパビリティ生成命令によって指定される必要がないように予め決定することができ、あるいは、所望であれば、オフセットに関する情報を命令内に符号化することができる。
【0037】
ケイパビリティ生成命令の単一のインスタンスに応答して生成される様々な生成されたケイパビリティに対する制約情報を推論することができるいくつかの方法があるが、例示的な一実装形態では、ケイパビリティ生成回路は、生成されたケイパビリティと、同じ制約情報を有する各々の更に生成されたケイパビリティとを生成するように配設される。したがって、制約情報を指定するための要指示内の符号化空間は、ケイパビリティ生成命令の実行が複数のケイパビリティの生成をもたらす状況において増加する必要がない。
【0038】
生成されたケイパビリティの各々が記憶されるべき宛先ケイパビリティ記憶要素に関して、ケイパビリティ生成回路は、最初に生成されたケイパビリティの宛先として使用される指定された宛先ケイパビリティ記憶要素から、更に生成された各ケイパビリティの関連する宛先ケイパビリティ記憶要素を導出するように配設することができる。例えば、必要な宛先ケイパビリティ記憶要素は、指定された宛先ケイパビリティ記憶要素から始まるケイパビリティ記憶要素の連続したシーケンスを形成することができる。代替手法として、必要に応じて、各宛先ケイパビリティ記憶要素を命令内で明示的に識別することができる。
【0039】
処理回路は、いくつかの異なる動作モードで動作するように配設することができる。これらの動作モードは、様々な形態を採ることができる。例えば、処理回路は、セキュアドメイン若しくは低セキュアドメインにおいて、及び/又は特権状態若しくは非特権状態内で動作することが可能であってもよく、実際に、処理回路によって採用され得る2つを上回るドメイン及び/又は2つを上回る状態が存在してもよい。処理回路の現在の動作モードは、処理回路が動作しているドメイン及び処理状態の両方に依存し得る。
【0040】
必要に応じて、ケイパビリティ生成回路の動作は、処理回路の現在の動作モードに依存し得る。これは、例えば、処理回路の特定の動作モードに対するケイパビリティを生成するアビリティを制限するために使用され得る。したがって、例として、処理回路が、このようにしてケイパビリティの生成が禁止される特定の動作モードにある間に、ケイパビリティ生成回路が、ケイパビリティ生成命令を実行するようにトリガされる場合、障害が生じ得る。
【0041】
ケイパビリティ生成回路の動作が現在の動作モードに依存してどのように行われ得るかの他の例として、生成されるメタデータの形式は、動作モードに依存して変化し得る。例えば、メタデータは、ケイパビリティが生成されたときの処理回路の動作モードを示す情報を含み得、したがって、ケイパビリティ生成回路は、ケイパビリティ生成命令が実行されるときの処理回路の現在の動作モードに依存して、異なる形態のメタデータを生成する。また更なる例として、処理回路は、ケイパビリティによって制約されるケイパビリティモード、及びケイパビリティによって制約されない更なるモードで動作することが可能であり得、ケイパビリティ生成回路がケイパビリティ生成命令に応答して動作する様式は、処理回路がケイパビリティモードで動作しているかどうかに依存し得る。
【0042】
ここで、特定の例について、図を参照して説明する。
【0043】
本明細書で説明する技法は、様々なデータ処理システムにおいて、そのようなシステム内の異なるタイプの処理回路に関連して採用することができる。例えば、本技法は、中央処理装置(CPU)の形態を採る処理回路に関連して使用することができるが、代替的に、ダイレクトメモリアクセス(DMA)コントローラ、暗号化アクセラレータなどの他の処理回路に関連して使用することもできる。純粋に以下の図1の用例として、CPUの処理パイプラインは、説明される技法が使用され得る処理回路の例として考慮される。
【0044】
図1は、命令を処理するための処理パイプライン4を備えるデータ処理装置2の例を概略的に示す。この例では、処理パイプライン4は、フェッチステージ6、復号ステージ8、発行ステージ10、実行ステージ12、及びライトバックステージ14を含む、多数のパイプラインステージを含むが、他のタイプのステージ又はステージの組合せが提供され得ることが理解されるであろう。例えば、レジスタリネームを実施するためのリネームステージが、いくつかの例示的な実装形態に含まれ得る。処理されることになる命令がステージからステージに移動し、ある命令が、1つのステージで保留中である間に、別の命令が、パイプライン4の異なるステージで保留中であり得る。
【0045】
フェッチステージ6は、レベル1(L1)命令キャッシュ20から命令をフェッチする。フェッチステージ6は通常、連続する命令アドレスから逐次的に命令をフェッチし得る。しかしながら、フェッチステージは、分岐命令の結果を予測するための分岐予測器22も有し得、フェッチステージ6は、分岐が行われたと予測される場合に(非逐次的な)分岐先アドレスから、又は分岐が行われなかったと予測される場合に次の逐次アドレスから命令をフェッチすることができる。分岐予測器22は、ある分岐が行われる可能性が高いかどうかを予測するための情報を記憶するための1つ以上の分岐履歴テーブルを含み得る。例えば、分岐履歴テーブルは、従前に実行された分岐の実際の結果を追跡するための、又は分岐のために行われた予測の信頼度を表すためのカウンタを含み得る。分岐予測器22は、分岐命令の従前の目標アドレスを、同じ分岐命令に後で遭遇した際に、それらが予測され得るように、キャッシュするための分岐先アドレスキャッシュ(branch target address cache、BTAC)24も含み得る。
【0046】
フェッチされた命令は、命令を復号して復号された命令を生成する復号ステージ8に渡される。復号された命令は、実行ステージ12を制御して適切な処理動作を実行するための制御情報を含み得る。キャッシュ20からフェッチされたいくつかのより複雑な命令に対して、復号ステージ8は、それらの命令を復号された複数の命令(マイクロオペレーション(μop又はuop)として知られ得る)にマッピングし得る。それゆえに、L1命令キャッシュ20からフェッチされた命令と、パイプラインの後のステージで見られる命令との間に1対1の関係が存在しない場合がある。概して、本出願における「命令」に対する参照は、マイクロオペレーションを含むものと解釈されるべきである。
【0047】
復号された命令は、発行ステージ10に渡され、これは、命令の実行に必要なオペランドが利用可能であるかどうかを判定し、オペランドが利用可能である場合に実行のための命令を発行する。いくつかの例示的な実装形態は、L1命令キャッシュ20から命令がフェッチされたプログラム順序に対応する順序での実行のための命令が発行されるように、インオーダ処理をサポートし得る。他の例示的な実装形態は、プログラム順序とは異なる順序で実行ステージ12に命令を発行できるようにアウトオブオーダ実行をサポートし得る。アウトオブオーダ処理は、先の命令がオペランド待ちの間停止させられている間に、そのオペランドが利用可能である、プログラム順序では後の命令を先に実行できるため、性能向上に有用であり得る。
【0048】
発行ステージ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にライトバックされ得る。
【0049】
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からフェッチすることができる。キャッシュ階層を管理するために、任意の既知のスキームを使用し得る。
【0050】
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであり得るが、少なくともメインメモリ50、及び任意選択的に、少なくともいくつかのレベルのキャッシュ階層も、物理的にアドレス指定され得る。それゆえに、パイプライン4によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスに変換するためのトランスレーション・ルックアサイド・バッファ52(TLB)が提供され得る。例えば、TLB52は、仮想アドレス空間の対応するページの仮想ページアドレスと、対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされるべき対応する物理ページアドレスとを各々が指定する、多数のエントリを含み得る。例えば、仮想ページアドレス及び物理ページアドレスは、対応する仮想アドレス及び物理アドレスの最上位部分に対応し得、仮想アドレスを物理アドレスにマッピングするときに残りの最下位部分は変化しないままである。アドレス変換情報と同様に、各TLBエントリは、アドレスのあるページがパイプライン4のあるモードでアクセス可能であるかどうかを示すような、アクセス許可を指定するいくつかの情報も含み得る。いくつかの例示的な実装形態では、TLBエントリは、読み取り又は書き込み動作に応答して更新されるレベルのキャッシュ階層を定義するキャッシュポリシー情報など、アドレスの対応するページの他の特性(例えば、キャッシュがライトバックモードで動作するべきか、若しくはライトスルーモードで動作するべきか)、又は対応するページ内のアドレスに対するデータアクセスを、パイプライン4によって発行されたデータアクセスの順序と比較して、メモリシステムによって再順序付けできるかどうかを定義する情報を定義することもできる。
【0051】
図1は単一レベルTLB52を示しているが、レベル1(L1)TLB52が、いくつかの最近アクセスされたページにおいてアドレスを変換するためのTLBエントリを含み得、レベル2(L2)TLBがより多数のページのエントリを記憶するために提供され得るように、TLBの階層が提供され得ることが理解されよう。必要とされるエントリがL1TLBに存在しないときには、それをL2TLB、又は階層内の更なるTLBからフェッチすることができる。アクセスされるページのために必要とされるエントリがいずれのTLBにもない場合、メモリ50内のページテーブルにアクセスするために、ページテーブルウォークを実施することができる。本技法では、任意の既知のTLB管理スキームを使用することができる。
【0052】
また、いくつかのシステムは、複数のレベルのアドレス変換をサポートし得、その結果、例えば、第1のTLB(又はTLB階層)を使用して仮想アドレスを中間アドレスに変換し得、かつ1つ以上の更なるTLBを使用する第2のレベルのアドレス変換が、中間アドレスを、キャッシュ又はメモリにアクセスするために使用する物理アドレスに変換し得ることが理解されよう。これは、例えば、第1のレベルのアドレス変換がオペレーティングシステムによって管理され得、第2のレベルのアドレス変換がハイパーバイザによって管理され得る、仮想化をサポートするのに有用であり得る。
【0053】
装置は、ケイパビリティを記憶するためのケイパビリティ記憶要素(ケイパビリティが、ポインタを使用するときのアドレスの許容範囲を示す関連付けられた範囲情報を有する有界ポインタの形態を採るとき、有界ポインタ記憶要素と呼ばれ得る)を提供され得る。各ケイパビリティ/有界ポインタ記憶要素は、レジスタ、又は汎用メモリ内のメモリ位置、例えばスタックメモリ上の位置であり得る。
【0054】
図1に示すように、装置2は、有界ポインタ記憶要素として使用される有界ポインタレジスタ60のセットを有することができる。有界ポインタレジスタのセットは、汎用データレジスタ40のセットとは物理的に別個のものとして図1に示しているが、例示的な一実装形態では、汎用データレジスタと有界ポインタレジスタの両方を提供するために同じ物理的ストレージを使用し得る。
【0055】
各有界ポインタレジスタ60は、アクセスされることになるデータ値のアドレスを判定するために使用し得るポインタ値62と、対応するポインタ62を使用するときのアドレスの許容範囲を指定する範囲情報64とを含む。有界ポインタレジスタ60は、ポインタの使用に関する1つ以上の制限/許可を定義し得る制限情報66(本明細書では許可情報とも称される)も含み得る。例えば、制限66は、ポインタ62を使用し得る命令のタイプ、又はポインタを使用し得るパイプライン4のモードを制限するために使用することができる。それゆえに、範囲情報64及び制限情報66は、その中でポインタ62の使用が許可されるケイパビリティを定義すると考えられ得る。定義されたケイパビリティ外でポインタ62を使用する試みが行われると、エラーをトリガすることができる。範囲情報64は、例えば、ポインタがある既知の境界内に留まり、かつセンシティブな情報又はセキュアな情報を含む可能性があるメモリアドレス空間の他の領域に迷い込まないことを確実にするために、有用であり得る。汎用データレジスタと有界ポインタレジスタの両方に同じ物理的ストレージを使用する例示的な実装形態において、ポインタ値62は、例えば、対応する汎用レジスタのために使用されるのと同じ記憶位置内に記憶され得る。
【0056】
図2は、データ又は命令に対する不正アクセスから保護するために許容範囲が使用される命令のタイプの例を示す。図2の頂部に示すように、特定の有界ポインタレジスタPR1が、所与のポインタ値62と、この例では、許容範囲の下側境界を定義する下側境界アドレス68及び許容範囲の上側境界を定義する上側境界アドレス69を使用して指定される、範囲情報64とを含む。例えば、境界68、69は、80000~81000のアドレス範囲を定義するように設定される。ある命令が有界ポインタレジスタPR1を参照し、ポインタ62から判定されたアドレスがこの範囲外である場合に、エラーがトリガされ得る。
【0057】
例えば、図2の部分Aに示すように、いくつかのシステムでは、ポインタレジスタ60内のポインタ62の値を、範囲情報64によって指定された範囲外にある値(ここでは、ポインタがアドレスを直接指定すると仮定する)に設定する試みがある場合、エラーがトリガされ得る。これは、ポインタを使用するアクセスが許容範囲内に間違いなくあることを確実にできるように、ポインタ62が指定範囲外の値を取ることを回避させる。代替的に、図2の部分Bに示すように、命令が、ポインタ62のアドレスによって識別された位置へのアクセスを試み、そのアドレスが指定範囲外にあるときに、エラーをトリガすることができる。それゆえに、ポインタ62を指定範囲外の値に設定することは許容できるが、ポインタアドレス(又はポインタから導き出されたアドレス)のデータアクセスが試みられ、アドレスが許容範囲外にある場合、エラーがトリガされ得る。他のシステムは、図2の部分A及びBに示す両方の命令のタイプに応答してエラーをトリガし得る。
【0058】
範囲情報64は、異なる方法で設定され得る。例えば、セキュリティコード、又はオペレーティングシステム若しくはハイパーバイザが、所与のポインタに対して許可された範囲を指定し得る。例えば、命令セットアーキテクチャは、所与のポインタ62に対する範囲情報64を設定又は修正するためのいくつかの命令を含み得、これらの命令の実行は、プロセッサ4の特定のソフトウェア又は特定のモード又は例外状態に制限することができる。範囲情報64を設定又は修正するための任意の既知の技法が使用され得る。
【0059】
ポインタを参照するある命令を実行するときに実行状態12で使用し得る有界ポインタ記憶要素60のセットに加えて、命令がレベル1命令キャッシュ20からフェッチされるときに、フェッチステージ6で同様の機能を提供するためにプログラムカウンタケイパビリティ(program counter capability、PCC)レジスタ80も使用され得る。具体的には、プログラムカウンタポインタは、フィールド82に記憶され得、PCC80は、有界ポインタ記憶要素60のセット内のポインタの各々に提供される範囲及び制限情報と同様の、範囲情報84及び任意の適切な制限情報86も提供する。
【0060】
図3は、個々のデータブロックがケイパビリティ(すなわち、有界ポインタ及び関連付けられた制限情報)を表すか、又は通常データを表すかを識別するために、それらのデータブロックに関連してタグビットがどのように使用されるかを概略的に示している。具体的には、メモリアドレス空間110は、指定されたサイズを典型的に有する一連のデータブロック115を記憶する。純粋に例示のために、この例では、各データブロックが128ビットを含むと仮定されるが、他の例示的な実装形態では、異なるサイズのデータブロック、例えば、ケイパビリティが64ビットの情報によって定義されるときの64ビットデータブロックが使用され得る。各データブロック115に関連して、一例では、タグビットと称される単一ビットフィールドであるタグフィールド120が提供され、これは、関連付けられたデータブロックがケイパビリティを表すことを識別するために設定され、関連付けられたデータブロックが通常データを表し、それゆえにケイパビリティとして取り扱えないことを示すためにクリアされる。設定又はクリア状態に関連付けられた実際の値は、実装形態に応じて変化し得るが、純粋に例示のために、例示的な一実装形態では、タグビットが1の値を有する場合に、関連付けられたデータブロックがケイパビリティであることを示し、それが0の値を有する場合に、関連付けられたデータブロックが通常データを含むことを示すことが理解されるであろう。
【0061】
ケイパビリティが、図3に示されるケイパビリティレジスタ100などの有界ポインタレジスタ60(本明細書ではケイパビリティレジスタとも称される)のうちの1つにロードされるときに、タグビットはケイパビリティ情報と共に移動する。したがって、ケイパビリティレジスタ100にケイパビリティがロードされた場合、ポインタ102、範囲情報104及び制限情報106(以下、許可情報と称される)がケイパビリティレジスタにロードされることになる。加えて、そのケイパビリティレジスタに関連して、又はその内の特定のビットフィールドとして、タグビット108は、コンテンツがケイパビリティを表すことを識別するために設定されることになる。同様に、ケイパビリティがメモリからストアバックされた場合、関連するタグビット120は、ケイパビリティが記憶されているデータブロックに関連して設定される。そのようなアプローチにより、ケイパビリティと通常データを区別し、それゆえに、通常データがケイパビリティとして使用できないことを確実にする。
【0062】
図1に戻ると、装置は、ある制御情報を記憶するための1つ以上の制御レジスタを更に提供することができる。本明細書で説明する技法によれば、装置は、ケイパビリティ生成命令を実行することに応答してケイパビリティ/有界ポインタを生成することができ、例示的な一実装形態では、その生成されたケイパビリティのための適切な制約情報を決定するときに制御レジスタのうちの1つ以上を参照し得る。
【0063】
ケイパビリティは様々な形態を採ることができる。図4に示す例では、ケイパビリティ100は、ポインタ値102及び関連する制約情報を含む。この例における制約情報は、いくつかの範囲情報104(本明細書では境界情報とも呼ばれる)を含む。許可のセットは、ケイパビリティの制約情報の一部として提供することもでき、更に、ケイパビリティは、対応するデータのブロックがケイパビリティとして扱われるべきかどうかを識別するために設定又はクリアすることができる前述のタグビット108を(直接又はそれに関連付けられて)含むことができる。
【0064】
ケイパビリティに対して指定された許可は、実装形態に依存して変化し得るが、例示的な一実装形態では、許可は、読み取りアクセスのためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す読み取り許可ビット130、書き込みアクセスのためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す書き込み許可ビット132、並びにフェッチ及び実行される命令のメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す実行許可ビット134を含む。
【0065】
そのような許可情報は、ケイパビリティに関するメタデータ情報と見なすことができる。他のメタデータ情報136も、必要に応じてケイパビリティ内で識別することができる。純粋に例として、そのようなメタデータは、ケイパビリティが不変であると考えられるかどうかを示すことができる。そのような情報は、ケイパビリティ内における追加情報として直接指定することができるが、いくつかの例示的な実装形態では、ケイパビリティ内にすでに提供されている他の情報の状態から推論することができる。例えば、1つの特定の実装形態では、実行ビットが設定されているときに、ケイパビリティは不変であると見なされ、ケイパビリティによって指定された情報は、命令実行から生じ得るポインタ値の通常の増分を介する場合を除いて、タグビットをクリアする(事実上ケイパビリティを無効化する)ことなく修正することができない。
【0066】
含まれ得る他のメタデータ情報136の別の実施例として、そのようなメタデータは、例えば、そのケイパビリティが生成されたときに処理回路が動作していた動作モードを示すために、信頼レベル指標を含んでもよい。信頼レベルは、ケイパビリティ100のフィールド136に直接符号化することができるか、又は代替的に、信頼レベル指標136は、信頼レベル情報を含むメモリアドレスを示すために使用される識別子を提供することができる。このような識別子は、信頼レベル情報のメモリロケーションを直接示すことができるか、又は、例えば、信頼レベル情報を含むロケーションを識別するために、システムにおけるグローバルレジスタに記憶されたアドレスに適用することができるオフセットを指定することができる。
【0067】
図5は、プログラムコードをコンパイルするときに、コンパイラ150がどのようにしてリテラルプール155をメモリにポピュレートするように配設され得るかを概略的に示す図である。特に、処理回路上で実行されるコードをコンパイルするとき、コンパイラ150は、リテラルプール155内に様々な異なるリテラル値を記憶することができる。先に説明したように、本明細書で説明する技法の前に、そのようなコンパイラはまた、リテラルプール内に記憶され得るいくつかのコンパイラ生成ケイパビリティを生成している場合があり、その結果、それらのケイパビリティは、コードの実行中に処理回路によってケイパビリティレジスタにロードするために利用可能である。しかしながら、先に述べたように、リテラルプール内のそのようなコンパイラ生成ケイパビリティの提供は、全体的なコードサイズ(コンパイルされたコード及び関連するリテラルプールからなる)を著しく増加させる可能性があり、特に、不揮発性ストレージが重視されるメモリ制約のあるデバイスにおいて、全体的なコードサイズを低減することが望ましい。
【0068】
本発明者らは、典型的にはコンパイラによって生成され得るかなりの数のケイパビリティが、例えばグローバル変数、周辺機器、制御レジスタなどの小さなデータ構造にしかアクセスせず、したがって、そのようなケイパビリティの境界情報を表現するために使用される典型的なサイズの数は限られていることに注目した。更に、可能な許可ビットの限られた数の組合せのみが、通常、そのようなケイパビリティのために使用されることに留意されたい。本明細書で説明する技法によれば、そのようなケイパビリティについて、コンパイラは、コンパイル時にそれらのケイパビリティを生成するのではなく、代わりに、そのようなケイパビリティごとにポインタ値を決定するために使用され得るリテラル値をリテラルプール155内に記憶するように配設され得る。完全なケイパビリティではなく、そのようなリテラル値を記憶することにより、リテラルプールのサイズ要件を大幅に低減することができ、したがって、全体的なコードサイズを低減することができる。
【0069】
更に、本明細書で説明される技法を使用するとき、処理回路は、そのようなケイパビリティにおける信頼を損なうことなく、自ずと、リテラルプール内に記憶されたそれらのリテラル値を使用して必要な機能を生成するように配設することができる。特に、ケイパビリティは、自ずと、リテラルプール内のリテラル値のうちの1つを使用し(したがって、信頼することができる)、その制約情報が、命令から直接導出可能な(したがって、信頼することができる)情報を使用して、可能なオプションの制限されたセットから選択される、特定のケイパビリティ生成命令(命令は、必要に応じて、コンパイラによって発行することもできる)を実行することによって、処理回路によって作成することができる。コンパイルされたプログラムの意図を信頼することができるので、このようにして生成されたケイパビリティも信頼することができ、したがって、このようにして生成されたケイパビリティは、コンパイラ自体によって生成され、リテラルプール内に記憶されたケイパビリティと同じくらい高く信頼することができる。
【0070】
図6は、例示的な一実装形態による装置内に設けられ得る構成要素を示すブロック図である。この例では、処理回路200は、命令のシーケンスを実行するために提供され、それらの命令によって指定されるデータ処理動作の実行中に、処理回路は、汎用データレジスタ215、汎用ケイパビリティレジスタ220、及びプログラムカウンタケイパビリティレジスタ225にアクセスすることができる。処理回路200は、様々な形態を採ることができるが、例えば、図1に示されるプロセッサパイプライン4の形態を採ることができる。
【0071】
図6に示される例では、ケイパビリティ生成命令を処理回路210が提供され、これは、メモリのリテラルプール内の位置を識別する実行することに応答して、リテラルプール230内の位置からリテラル値を取り出し、生成されたケイパビリティのポインタ値がリテラル値から決定される生成されたケイパビリティを生成するケイパビリティ生成回路を提供してもよい。生成されたケイパビリティのための関連する制約情報は、次いで、ケイパビリティ生成命令によって指定される情報に応じて、オプションの制限されたセットからケイパビリティ生成回路によって選択される。次いで、生成されたケイパビリティは、ケイパビリティ生成回路210によって、識別された宛先ケイパビリティレジスタ(典型的には、その識別された宛先レジスタはケイパビリティ生成命令によって指定されている)に書き込まれ得る。これは、例えば、汎用ケイパビリティレジスタ220のうちの1つであってもよいが、いくつかの実装形態では、プログラムカウンタケイパビリティレジスタ225であってもよい。
【0072】
ケイパビリティ生成回路210は、処理回路200とは別個の構成要素であってもよいが、図6に示す例では、処理回路200によって提供されると考えられる。
【0073】
図6にも示されるように、ケイパビリティチェック回路205はまた、別個の構成要素として、又は図6に示されるように、処理回路200の一部として提供されてもよい。ケイパビリティチェック回路205が採用され、メモリアドレスが所与のケイパビリティを使用して生成されるアクセス要求が考慮されているときに、所与のケイパビリティによって識別される制約情報に基づいてそのアクセス要求が許可されるかどうかを判定するためのケイパビリティチェック動作を実施する。したがって、ケイパビリティチェックは、例えば、アクセスに進むことを許可されるかどうかを判定するために、ケイパビリティの範囲及び許可情報への参照を伴い得る。ケイパビリティチェックに不合格であった場合、不合格指標を処理回路に提供することができ、これは、例えば、障害信号などの様々な形態を採ることができる。しかし、ケイパビリティチェックに合格した場合、アクセス要求をメモリに発行することができる。いくつかの実装形態では、例えば、メモリ管理ユニット(MMU)、メモリ保護ユニット(MPU)、セキュリティ属性ユニット(SAU)、又はそれらの構成要素の組合せなどの構成要素内で、アクセスが進むことを許可される前に、1つ以上の更なるチェックが実行され得る。
【0074】
図7は、ケイパビリティ生成命令が処理回路200によって実行されるときにケイパビリティ生成回路210によって実行されるステップを示す流れ図である。ステップ250において、ケイパビリティ生成命令が実行されていると判定された場合、ステップ255において、ケイパビリティを生成するアビリティを制約する可能性がある任意の基準を考慮して、ケイパビリティの生成が許可されているかどうかが判定される。例として、ケイパビリティ生成命令に応答してケイパビリティを生成するためにケイパビリティ生成回路210が使用される、本明細書で説明される技法は、処理回路のいくつかの動作モードに制限され得、処理回路が許可された動作モードのうちの1つ内にない場合、ケイパビリティが生成され得ないことがステップ255において決定され得、その場合、ステップ260において障害が生じ得る。別の例として、ケイパビリティを生成するアビリティは、特定のタイプのケイパビリティに限定され得る。例えば、いくつかの実装形態では、ケイパビリティがプログラムカウンタケイパビリティとして使用されるべきである場合、上述の機構を使用してケイパビリティを生成することが禁止され得、そのような状況においてプログラムカウンタケイパビリティを生成しようとする試みがある場合、やはりステップ260において障害が引き起こされ得る。
【0075】
しかしながら、ステップ255において、ケイパビリティが生成されることが許可されると判定されたと仮定すると、ステップ265において、ケイパビリティ生成命令によって指定された即値が、リテラルプール内の位置を識別するために現在のプログラムカウンタ値に適用するオフセットとして使用される。ステップ270において、その識別された位置におけるリテラル値が、リテラルプールから取り出され、生成されたケイパビリティに対するポインタ値を決定するために使用される。いくつかの例では、リテラル値全体を「そのまま」使用してポインタ値を形成することができるが、他の実装形態では、取り出されたリテラル値からポインタ値を導出するためのステップを行うことができる。特定の例として、リテラル値の特定の数の最下位ビットが、生成されるポインタ値のいくつかのアライメント要件に起因して、ポインタ値を生成する目的で無視され得ることがあり得る。後でより詳細に説明されるように、これらの無視された最下位ビットは、いくつかの例示的な実装形態においてケイパビリティを生成する際に使用される他の情報を提供するために、必要に応じて、再利用され得る。
【0076】
ステップ275において、生成されるケイパビリティの境界情報は、命令によって提供される情報から導出されるサイズ情報から決定することができる。特に、命令によって提供される情報は、可能なサイズの制限されたセット内のサイズを符号化するために使用されることができ、したがって、ケイパビリティ生成回路は、そのような情報に基づいて、境界のためにどのサイズを使用するかを決定することができる。次に、ステップ270で識別されたポインタ値を参照して、例えば、そのポインタ値に等しく設定することによって、第1の境界を決定することができる。次いで、第2の境界を作成するために、決定されたサイズを第1の境界に適用することによって、第2の境界を決定することができる。
【0077】
ステップ280に示すように、他のメタデータ、例えば前述の許可ビットを、命令によって指定された情報から決定することができる。ここでも、可能な値の制限されたセットが利用可能であり、したがって、命令によって提供される情報を使用して、可能な値の制限されたセットからどの値の組合せを使用するかを決定することができる。
【0078】
ケイパビリティ生成命令は、様々な形式をとることができるが、1つの特定の例では、以下のフォーマットを有する:
LDRCC Cd,<label>,#sz
【0079】
したがって、この例では、ケイパビリティ生成命令は、宛先ケイパビリティレジスタCdを指定し、リテラルプール内の位置を識別するために使用される即値(「ラベル」と呼ばれる)を提供し、生成されたケイパビリティの許容範囲のサイズを決定するために使用されるサイズ情報(#sz)を指定するケイパビリティ作成ロード命令である。しかしながら、これは、使用され得る1つの例示的なフォーマットに過ぎず、ケイパビリティを生成するために必要な情報が、リテラルプールから取り出されたリテラル値と組み合わせて、命令自体から導出され得るという条件で、他のフォーマットが使用され得る。
【0080】
図8は、生成されたケイパビリティの境界を決定するために、図7のステップ275において実施することができるステップをより詳細に示す流れ図である。ステップ300において、例えば上述のLDRCC命令フォーマットの場合のように、サイズ指標値が命令内で直接指定されているかどうかが判定される。サイズ指標値が指定されている場合、プロセスはステップ305に進み、指定されたサイズ指標からサイズが決定される。サイズ指標値は、サイズを直接指定することができ、又はサイズを識別するために適切な符号化方式を使用することができる。例えば、オプションの制限されたセット内のサイズは、2の累乗で変化してもよく、サイズ指標は、適用する2の累乗を示すことができる。代替として、サイズ指標は、所定の最小サイズ指標からのオフセットを指定することができる。サイズ指標がどのように形成されるかにかかわらず、ステップ305において、ケイパビリティ生成回路210は、サイズ指標からケイパビリティに関連付けられた領域のサイズを決定することができることが理解されよう。
【0081】
代替実装形態では、サイズ指標値は命令内で直接指定されなくてもよく、代わりに、図8に示すように、ステップ310によって示されるように、メモリから取り出されたリテラル値の冗長ビットからサイズを決定することが可能であり得る。特に、先に述べたように、ポインタ値に対するいくつかのアライメント制約のために、そうでなければ使用されないリテラル値内のビットが存在する場合があり、これらのビットは、サイズ情報を符号化することが1つであるいくつかの可能な用途のために再利用することができる。その情報は、サイズ指標が命令内で直接指定された場合とほぼ同じ方法でリテラル値の冗長ビット内に符号化することができ、したがって、ステップ305を参照して前述した形態のいずれかをとることができる。
【0082】
更に別の代替案として、図8には具体的に示されていないが、サイズが固定され、したがってサイズ指標値を指定する必要がない場合もある。代わりに、境界は、第1の境界を識別し、次に固定サイズを適用して第1の境界から第2の境界の位置を決定することによって直接決定することができる。
【0083】
ステップ305又は310のどちらが実行されるかに関係なく、プロセスは次にステップ315に進み、そこで第1の境界がポインタ値から決定される。ポインタ値から境界を決定するために任意の適切な技法を使用することができ、したがって、例えば、第1の境界は、ポインタ値から何らかの固定オフセットにあってもよい。しかしながら、1つの特定の例示的な実装形態では、第1の境界はポインタ値に等しく設定される。
【0084】
次に、ステップ320において、第1の境界及び決定されたサイズから第2の境界が決定される。例として、第2の境界は、ポインタ値に決定されたサイズを加えたものに等しく設定することができる。第1の境界及び第2の境界が設定されると、その時点でケイパビリティの範囲情報が決定されていることが理解されよう。
【0085】
図9は、許可ビット値が決定され得る様々な異なる方法を示す流れ図である。同じタイプの手法は、ケイパビリティの制約情報の一部として提供され得る任意の他のメタデータにも使用することができる。ステップ350で、許可が命令内の即値オペランドによって指定されているかどうかが判定される。例えば、許可ビット値は、必要に応じて、そのような即値オペランドによって命令内で直接指定することができる。代替的に、即値オペランドの値は、許可組合せの可能な制限されたセットのうちのどれが使用されるべきかを決定するために使用され得る方法で符号化されてもよく、これは、許可が即値オペランドによって直接指定される場合よりも命令内でより少ないビット空間を必要とし得る。
【0086】
許可が即値オペランドによって指定されている場合、プロセスはステップ355に進み、ケイパビリティ生成回路210、その即値オペランドから許可を決定する。
【0087】
ステップ350で、命令内の即値オペランドによって許可が指定されていないと判定された場合、ステップ360で、許可情報を提供するために制御レジスタを使用すべきかどうかが判定される。特に、例示的な一実装形態では、少なくともいくつかの生成されたケイパビリティについて、必要な許可情報は、1つ以上の制御レジスタ90内に記憶され得る。制御レジスタが許可情報のために参照されるべきであると判定された場合、プロセスはステップ365に進み、制御レジスタ内の許可情報から許可が判定される。命令内の即値オペランドと同様に、制御レジスタ内のそのような情報は、許可情報を直接識別することができ、あるいは、使用される許可の組合せの制限されたセットのうちのどれかを識別するために使用される符号化を提供することができる。
【0088】
ステップ360において、許可情報を提供するために制御レジスタが使用されないと判定された場合、ステップ370において、リテラルプールから取り出されたリテラル値の冗長ビットから許可情報が取得され、次いで、その許可情報から許可が判定される。したがって、いくつかの事例では、即値オペランドを指定するか、又は制御レジスタから許可情報を取得するのではなく、その許可情報は、ポインタ値を形成するために必要とされないリテラル値の冗長ビット内に符号化され得る。先に説明した例と同様に、許可値は、それらのビット内で直接指定されてもよく、又はそれらのビットは、許可ビットの可能な組合せのうちのどれが使用されるべきかを決定するために使用される符号化を提供してもよい。
【0089】
図9に示されるように、どの機構が使用されるかにかかわらず、許可情報が、許可の適切な組合せをオプションの制限されたセットから決定することができる符号化を提供する状況では、決定された許可は、ケイパビリティが生成されるときの処理回路の動作モードに依存し得る。例えば、処理回路が特定の特権動作モードで動作している場合、許可情報の特定の値から決定される許可ビットは、処理回路がより低い特権モードで動作していた場合に決定される許可ビットとは異なる場合がある。更に、許可情報から決定される許可ビットは、生成されているケイパビリティのタイプに依存してもよく、したがって、例えば、決定される許可ビットは、汎用ケイパビリティが生成されているか、又はプログラムカウンタケイパビリティが生成されているかに応じて異なってもよい。
【0090】
図10は、システム内に提供され得る処理回路の様々な異なる動作モードを示す図である。図10に示されるように、処理回路は、セキュアドメイン及び低セキュアドメインにおいて動作するように配設されてもよい。加えて、又は代替的に、処理回路は、複数の異なる状態でプログラムコードを実行するように配設されてもよく、図10の例では、特権状態又は非特権状態でプログラムコードを実行するように配設されてもよい。特権のレベル及び異なるセキュリティドメインは、直交する信頼レベルであると見なすことができ、したがって、ドメイン及び状態の異なる組合せを使用して、処理回路の異なる動作モードを定義することができる。先に説明したように、生成されたケイパビリティについての制約情報が決定される方法は、処理回路がどの動作モードにあるかに依存し得る。更に、必要に応じて、本明細書で説明される技法を使用してケイパビリティを生成するアビリティは、動作モードのうちの1つ以上に限定されてよく、例えば、許可されていない動作モードのうちの1つにおいてケイパビリティを生成しようと試みられた場合、障害が生成される。
【0091】
図11は、例示的な一実装形態において、ケイパビリティを生成するときにとられるステップが、生成されているケイパビリティがプログラムカウンタケイパビリティであるか汎用ケイパビリティであるかにどのように依存し得るかを示す流れ図である。ステップ400において、ケイパビリティ生成命令によって指定された宛先ケイパビリティレジスタがプログラムカウンタケイパビリティレジスタであるかどうかが判定される。そうでない場合、プロセスはステップ405に進み、先に論じた方法でケイパビリティが生成され、命令によって識別されるターゲット汎用ケイパビリティレジスタ内に記憶される。
【0092】
しかしながら、例示的な一実装形態では、宛先ケイパビリティレジスタがプログラムカウンタケイパビリティレジスタである場合、ステップ410において上述の方法でケイパビリティを生成し、生成されたケイパビリティをプログラムカウンタケイパビリティレジスタに記憶することに加えて、追加のステップ415も実行され、それによって、プログラム実行は、生成されたプログラムカウンタケイパビリティを使用して識別されたターゲット命令に分岐させられる。これは、プログラムカウンタケイパビリティの生成に続いてそのターゲット命令に分岐するために別個の分岐命令を提供する必要性を回避する。
【0093】
必要に応じて、ケイパビリティ生成回路210は、図12に示すように、単一のケイパビリティ生成命令の実行に応答して複数のケイパビリティを生成するように配設することができる。例えば、ケイパビリティ生成命令が実行されるときに複数のケイパビリティが生成されるべきであることを識別するケイパビリティ生成命令のタイプが指定され得る。そのような場合、ステップ450において、その特定の形態のケイパビリティ生成命令が実行されていると判定されると、プロセスはステップ455に進み、そこで、図7の前述のプロセスを使用して第1のケイパビリティが生成される。次に、ステップ460において、第1のケイパビリティのリテラル値を取得するために使用された位置からオフセットされた位置から取得されたリテラル値を使用して、後続の各ケイパビリティが生成される。後続のケイパビリティごとにリテラル値を識別するために使用されるオフセットは、例えば、リテラルプール内に記憶された一連の隣接するリテラル値を識別するために、予め決定されてもよく、あるいは、後続のケイパビリティごとにリテラル値を識別するために必要とされるオフセット情報は、命令内で何らかのフォーマットで符号化されてもよい。
【0094】
図12に示される例によれば、ステップ460で示されるように、同じ制約情報が、生成されたケイパビリティの各々に対して使用され、したがって、単一のケイパビリティ生成命令から生成されたケイパビリティ間で異ならない。
【0095】
ステップ465において、生成されたケイパビリティは、一連の汎用ケイパビリティレジスタに記憶される。典型的には、第1の汎用ケイパビリティレジスタは、ケイパビリティ生成命令によって明示的に識別されるものであり、次いで、更なる汎用ケイパビリティレジスタの各々が推論され得る。例えば、各後続の汎用ケイパビリティは、決定されたシーケンスに従うことができる。例えば、ケイパビリティ生成命令によって指定されたケイパビリティレジスタから始まる一連の隣接する汎用ケイパビリティレジスタを、生成されたケイパビリティが記憶される汎用ケイパビリティレジスタのシーケンスとして使用することができる。あるいは、いくつかのシーケンス定義情報が命令内に提供され、生成されたケイパビリティが記憶されるべき各汎用ケイパビリティレジスタを識別するために使用されてもよい。更に別の例として、命令は、各汎用宛先ケイパビリティレジスタを明示的に識別することができる。
【0096】
図13は、使用され得るシミュレータ実装形態を例示する。前述の例は、当該技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、本明細書に記載の例による命令実行環境を提供することも可能であり、命令実行環境は、コンピュータプログラムの使用により実施される。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータと称されることがよくある。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータ実装は、ホストプロセッサ515で実行し得、ホストプロセッサ515は、任意選択的に、ホストオペレーティングシステム510を実行し、ホストオペレーティングシステム510は、シミュレータプログラム505をサポートする。いくつかの配設では、ハードウェアと提供された命令実行環境との間に複数層のシミュレーションがあり得、かつ/又は、複数の異なる命令実行環境が同じホストプロセッサ上に提供され得る。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなど一定の状況では、正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬、USENIX Conference、第53~63頁に記載されている。
【0097】
例が、特定のハードウェア構築又は特徴を参照して前述されている程度に、シミュレーションされた実装では、同等の機能が、好適なソフトウェア構築又は特徴によって提供され得る。例えば、特定の回路は、シミュレーションされた実装では、コンピュータプログラムロジックとして提供され得る。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実装では、ソフトウェアデータ構造として提供され得る。また、ハードウェア装置2内のメモリ50にアクセスするために使用される物理アドレス空間は、シミュレートされたアドレス空間としてエミュレートされ得、シミュレートされたアドレス空間は、ホストオペレーティングシステム510によって使用される仮想アドレス空間に、シミュレータ505によってマッピングされている。前述の例で言及されているハードウェア要素のうち1つ以上がホストハードウェア(例えば、ホストプロセッサ515)に存在する配設では、いくつかのシミュレートされた実装は、好適である場合、ホストハードウェアを使用し得る。
【0098】
シミュレータプログラム505は、(非一時的媒体であり得る)コンピュータ読み取り可能な記憶媒体に記憶され得、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード500への仮想ハードウェアインタフェース(命令実行環境)を提供し、仮想ハードウェアインタフェースは、シミュレータプログラム505によってモデル化されたハードウェアアーキテクチャのハードウェアインタフェースと同じである。したがって、ターゲットコード500のプログラム命令は、シミュレータプログラム505を使用して命令実行環境内から実行され得、このため、上で考察される装置2のハードウェア特徴を実際には有しないホストコンピュータ515は、これらの特徴をエミュレートすることができる。シミュレータプログラムは、処理パイプライン4、200の挙動をエミュレートするための処理プログラムロジック520、ケイパビリティチェック回路205の挙動をエミュレートするためのケイパビリティチェックプログラムロジック522、及び図1及び図6のハードウェア装置のケイパビリティ生成回路210の挙動をエミュレートするためのケイパビリティ生成プログラムロジック525を含み得る。したがって、前述したタイプのケイパビリティ生成命令に応答してケイパビリティを生成するための本明細書に記載の技法は、図13の例では、シミュレータプログラム505によってソフトウェアで実行することができる。
【0099】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配設又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0100】
本発明の例示的な実装形態例が、添付の図面を参照して本明細書で詳細に説明されているが、本発明は、これらの精密な実装形態に限定されないこと、並びに添付の特許請求の範囲によって定義されている本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正が、当業者によってこれらの例に実施され得ることが理解されよう。例えば、従属請求項の特徴の様々な組合せは、本発明の範囲から逸脱することなく、独立請求項の特徴でなされ得る。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
【国際調査報告】