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

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

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

特表2023-547065ケイパビリティを使用してメモリへのアクセスを制約するための技法
<>
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図1
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図2
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図3
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図4
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図5A
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図5B
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図6A
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図6B
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図7
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図8A
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図8B
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図9
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図10
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図11
  • 特表-ケイパビリティを使用してメモリへのアクセスを制約するための技法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-11-09
(54)【発明の名称】ケイパビリティを使用してメモリへのアクセスを制約するための技法
(51)【国際特許分類】
   G06F 12/14 20060101AFI20231101BHJP
   G06F 21/62 20130101ALI20231101BHJP
【FI】
G06F12/14 510D
G06F21/62
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023523212
(86)(22)【出願日】2021-08-11
(85)【翻訳文提出日】2023-04-17
(86)【国際出願番号】 GB2021052078
(87)【国際公開番号】W WO2022096844
(87)【国際公開日】2022-05-12
(31)【優先権主張番号】2017499.1
(32)【優先日】2020-11-05
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ボトマン、フランソワ クリストファー ジャック
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】スミス、ブラッドリー ジョン
【テーマコード(参考)】
5B017
【Fターム(参考)】
5B017AA07
5B017BA01
5B017BA06
5B017BB06
5B017CA01
5B017CA02
(57)【要約】

ケイパビリティを使用して、メモリへのアクセスを制約するための装置及び方法が提供される。処理回路は、動作を実施し、その動作中に、メモリへのアクセス要求が生成され、アクセス要求のためのメモリアドレスは、制約情報を識別するケイパビリティを使用して、生成される。ケイパビリティチェック回路は、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施する。次いで、メモリアクセスチェック回路は、所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約する。所与のケイパビリティは、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルは、処理回路の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する。
【選択図】図5A

【特許請求の範囲】
【請求項1】
装置であって、
動作を実施するための処理回路であって、前記動作中に、メモリへのアクセス要求が生成され、前記回路が、制約情報を識別するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、
所与のケイパビリティを使用して、そのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された前記制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェック回路と、
前記所与のアクセス要求に関連付けられた信頼レベルに依存して、前記所与のアクセス要求による前記メモリへのアクセスを更に制約するためのメモリアクセスチェック回路と、を備え、
前記所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、前記所与のアクセス要求に関連付けられた前記信頼レベルが、前記処理回路の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び前記所与のケイパビリティの前記ケイパビリティ信頼レベルの両方に依存する、装置。
【請求項2】
前記所与のアクセス要求に関連付けられた前記信頼レベルは、前記現在のモード信頼レベル、及び前記ケイパビリティ信頼レベルのうちのいずれが、より低い信頼レベルを表すかに制約される、請求項1に記載の装置。
【請求項3】
前記ケイパビリティ信頼レベルが、前記所与のケイパビリティ内で符号化される、請求項1又は2に記載の装置。
【請求項4】
ケイパビリティごとに、前記制約情報が、そのケイパビリティを使用して生成されたメモリアドレスに許可されたメモリアクセスのタイプを識別する許可の少なくとも1つのセットを提供し、
前記ケイパビリティ信頼レベルが、追加の許可として提供される、請求項3に記載の装置。
【請求項5】
前記所与のケイパビリティが、前記ケイパビリティ信頼レベルを含むロケーションを示す識別子を提供する、請求項1又は2に記載の装置。
【請求項6】
ケイパビリティごとに、前記制約情報が、そのケイパビリティを使用して任意のアクセス要求に対して生成された前記メモリアドレスに対するメモリアドレスの許容範囲を判定するために使用される境界情報を更に提供する、請求項1~5のいずれか一項に記載の装置。
【請求項7】
前記処理回路は、少なくとも前記現在のモード信頼レベルが閾値信頼レベルを超えるときに、ケイパビリティを生成するためのケイパビリティ生成動作を実施し、前記現在のモード信頼レベルよりも低い信頼レベルを示すように、前記生成されたケイパビリティに対して前記関連付けられたケイパビリティ信頼レベルを設定するように配設されたケイパビリティ生成回路を備える、請求項1~6のいずれか一項に記載の装置。
【請求項8】
前記処理回路は、前記現在のモード信頼レベルが、ソースデータに関連して提供されたケイパビリティ信頼レベル指標を超える場合に、前記ソースデータからケイパビリティを生成するためのケイパビリティ生成動作を実施するように配設されたケイパビリティ生成回路を備える、請求項1~6のいずれか一項に記載の装置。
【請求項9】
前記処理回路が、プログラム命令を実行するように配設され、前記プログラム命令の処理が、優勢なケイパビリティによって制約され、
前記処理回路が、制御フロー変更動作を実施するための制御フロー変更処理回路であって、前記制御フロー変更動作が、前記制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路を更に備え、
前記ケイパビリティ生成回路が、前記制御フロー変更目標アドレスに依存して、ケイパビリティ制約情報が記憶されているアドレスを判定し、前記ケイパビリティ制約情報を検索し、少なくとも前記ケイパビリティ制約情報に依存して、次の優勢なケイパビリティとして使用するためのケイパビリティを生成するように配設され、前記生成されたケイパビリティに対する前記関連付けられたケイパビリティ信頼レベルが、前記現在のモード信頼レベルよりも低い信頼レベルを示すように制約される、請求項7に記載の装置。
【請求項10】
前記処理回路による参照のために、ケイパビリティを記憶するためのケイパビリティレジスタのセットと、
1つ以上のケイパビリティを記憶するためのメモリ回路と、を更に備え、
前記処理回路が、前記メモリ回路から選ばれたケイパビリティを、前記ケイパビリティレジスタのセットから選択されたケイパビリティレジスタにロードするためのロード動作を実施するように配設され、
前記処理回路は、前記ロード動作中に、前記選択されたケイパビリティレジスタに記憶された前記選ばれたケイパビリティが、前記現在のモード信頼レベル又は前記メモリ回路に記憶された前記選ばれたケイパビリティの前記ケイパビリティ信頼レベルを超えないように制約されたケイパビリティ信頼レベルを有するように、前記ケイパビリティ信頼レベルを選択的に修正するように配設されている、請求項1~9のいずれか一項に記載の装置。
【請求項11】
前記処理回路は、前記選ばれたケイパビリティが、前記選ばれたケイパビリティが有効なケイパビリティであることを識別する制御値を有するときに、前記ロード動作中に、前記ケイパビリティ信頼レベルのみを選択的に修正するように配設されている、請求項10に記載の装置。
【請求項12】
前記現在のモード信頼レベルが、前記メモリ回路に記憶された前記選ばれたケイパビリティの前記ケイパビリティ信頼レベル未満であるときに、前記処理回路が、前記選択されたケイパビリティレジスタに記憶された前記選ばれたケイパビリティの前記ケイパビリティ信頼レベルを、前記現在のモード信頼レベルに一致するようにデモートするように配設されている、請求項10又は11に記載の装置。
【請求項13】
前記現在のモード信頼レベルが、前記メモリ回路に記憶された前記選ばれたケイパビリティの前記ケイパビリティ信頼レベル以上であるときに、前記処理回路は、前記選ばれたケイパビリティが前記選択されたケイパビリティレジスタに記憶されているときに、前記ケイパビリティ信頼レベルを変更しないままにするように配設されている、請求項10又~12のいずれか一項に記載の装置。
【請求項14】
少なくとも前記現在のモード信頼レベルが、閾値信頼レベルを超えるときに、前記処理回路は、選ばれたケイパビリティの前記ケイパビリティ信頼レベルが、その現在のケイパビリティ信頼レベルから低減することを可能にするように配設されている、請求項1~13のいずれか一項に記載の装置。
【請求項15】
前記装置に、ケイパビリティ信頼レベルが前記装置によってサポートされた最高の信頼レベルを示す1つ以上の初期ケイパビリティが提供される、請求項1~14のいずれか一項に記載の装置。
【請求項16】
前記初期ケイパビリティは、アクセス要求が前記ケイパビリティによって制約されるケイパビリティ動作モードに前記装置が入る前に提供される、請求項15に記載の装置。
【請求項17】
前記処理回路が、少なくとも特権状態と、非特権状態と、を含む複数の状態のうちの1つにおいてプログラムコードを実行するように配設され、前記現在のモード信頼レベルは、前記複数の状態のうちのどれにおいて前記現在のプログラムコードが実行されるかに依存する、請求項1~16のいずれか一項に記載の装置。
【請求項18】
前記処理回路は、少なくともセキュアドメイン及び低セキュアドメインを含む複数のセキュリティドメインのうちの1つにおいてプログラムコードを実行するように配設され、前記現在のモード信頼レベルは、前記複数のセキュリティドメインのうちのどれにおいて前記現在のプログラムコードが実行されるかに依存する、請求項1~17のいずれか一項に記載の装置。
【請求項19】
前記現在のモード信頼レベルは、前記状態と、前記現在のプログラムコードが実行される前記セキュリティドメインとの両方に依存する、請求項17又は18に記載の装置。
【請求項20】
前記ケイパビリティは、制約情報が不変であると識別される少なくとも1つの不変ケイパビリティを含み、
少なくとも前記現在のモード信頼レベルが閾値信頼レベルを超えるときに、前記処理回路は、選ばれた不変ケイパビリティが前記現在のモード信頼レベル未満のケイパビリティ信頼レベルを有する場合に、選ばれた不変ケイパビリティの前記制約情報が修正されることを可能にするように配設されている、請求項1~19のいずれか一項に記載の装置。
【請求項21】
前記処理回路は、前記選ばれたケイパビリティが不変ケイパビリティであるときに、前記選ばれたケイパビリティの前記ケイパビリティ信頼レベルのデモーションをディセーブルするように構成可能である、請求項12に従属する場合の請求項20に記載の装置。
【請求項22】
前記処理回路は、前記所与のケイパビリティに関連付けられた前記ケイパビリティ信頼レベルが、前記現在のモード信頼レベルを超える場合に、前記所与のアクセス要求によって識別された前記アクセスを実施する試みがなされたときに、障害信号を発行するように配設されている、請求項1~21のいずれか一項に記載の装置。
【請求項23】
前記選択されたケイパビリティレジスタに記憶された前記選ばれたケイパビリティが、前記ロード動作のためのメモリアドレスを生成するために使用されたケイパビリティに関連付けられた前記ケイパビリティ信頼レベルを超えないケイパビリティ信頼レベルを有するように更に制約される、請求項10に従属する場合の請求項1~22のいずれか一項に記載の装置。
【請求項24】
前記選択されたケイパビリティレジスタに記憶された前記選ばれたケイパビリティの前記ケイパビリティ信頼レベルの前記デモーションの実施が、制御情報に依存して制御される、請求項12に従属する場合の請求項1~23のいずれか一項に記載の装置。
【請求項25】
メモリへのアクセスを制約する方法であって、
動作を実施するために処理回路を採用することであって、前記動作中に、メモリへのアクセス要求が生成され、前記処理回路が、制約情報を識別するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成する、採用することと、
所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された前記制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施することと、
前記所与のアクセス要求に関連付けられた信頼レベルに依存して、前記所与のアクセス要求による前記メモリへのアクセスを更に制約することであって、前記所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、前記所与のアクセス要求に関連付けられた前記信頼レベルが、前記処理回路の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び前記所与のケイパビリティの前記ケイパビリティ信頼レベルの両方に依存する、制約することと、を含む、方法。
【請求項26】
命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
動作を実施するための処理プログラムロジックであって、前記動作中に、メモリへのアクセス要求が生成され、前記処理プログラムロジックが、制約情報を識別するケイパビリティを使用して、前記アクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、
所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された前記制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェックプログラムロジックと
前記所与のアクセス要求に関連付けられた信頼レベルに依存して、前記所与のアクセス要求による前記メモリへのアクセスを更に制約するためのメモリアクセスチェックプログラムロジックと、を備え、
前記所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、前記所与のアクセス要求に関連付けられた前記信頼レベルが、前記処理プログラムロジックの動作の現在のモードに関連付けられた現在のモード信頼レベル、及び前記所与のケイパビリティの前記ケイパビリティ信頼レベルの両方に依存する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、Defense Advanced Research Projects Agency(DARPA)によって授与された契約番号HR001118C0016に基づいて政府支援によって行われた。政府は、本発明について一定の権利を有する。
【背景技術】
【0002】
本技法は、データ処理の分野に関し、より具体的には、ケイパビリティを使用したメモリへのアクセスの制約に関する。
【0003】
所与のプロセスに対して特定のケイパビリティが定義され、定義されたケイパビリティ外の動作を実行しようとする試みがある場合に、エラーがトリガされ得る、ケイパビリティベースのアーキテクチャへの関心が高まっている。ケイパビリティは、様々な形態を採ることができるが、ケイパビリティの1つのタイプは、有界ポインタ(「ファットポインタ」とも称され得る)である。
【0004】
データ処理装置の処理回路によるアクセスのためのケイパビリティを記憶するために、いくつかのケイパビリティ記憶素子(例えば、レジスタ)が提供され得る。各ケイパビリティは、例えば、ケイパビリティを使用するときに実施することができる動作のタイプを制限するために、ケイパビリティに関連付けられた1つ以上の許可を識別するいくつかの許可フラグを含むことができる。例えば、そのようなケイパビリティ記憶要素内の有界ポインタを考慮すると、これは、関連付けられた許可を識別する1つ以上の許可フラグと共に、そのケイパビリティを使用するときに処理回路によってアクセス可能なメモリアドレスの拡張不可能な範囲を識別するために使用される情報を提供し得る。処理回路は、少なくとも特定の動作モードで動作しているときに、それに利用可能な任意の特定の有界ポインタに関連付けられた範囲を低減し、かつ/又は許可フラグをクリアするステップを取ることが可能にされ得るが、典型的には、その有界ポインタによって処理回路に与えられるケイパビリティを増加させようとするために、範囲を拡張することも、許可フラグを設定することもできず、これは、ケイパビリティを使用することによって得られるセキュリティ利益を損なう可能性があるためである。
【0005】
ケイパビリティを使用して実装される特定のセキュリティ対策を回避する能力を抑制しようとしながら、ケイパビリティがどのように管理されるかにおいてより多くの柔軟性を提供することが望ましい。
【発明の概要】
【0006】
第1の例示的な配設では、動作を実施するための処理回路であって、その動作中に、メモリへのアクセス要求が生成され、処理回路が、制約情報を識別するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成するように配設されている、処理回路と、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェック回路と、所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約するためのメモリアクセスチェック回路と、を備え、所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理回路の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する、装置が提供される。
【0007】
更なる例示的な配設では、メモリへのアクセスを制約する方法であって、動作を実施するために処理回路を採用することであって、その動作中に、メモリへのアクセス要求が生成され、処理回路が、制約情報を識別するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成する、採用することと、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施することと、所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約することであって、所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理回路の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する、制約することと、を含む、方法が提供される。
【0008】
なお更なる例示的な配設では、命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、動作を実施するための処理プログラムロジックであって、その動作中に、メモリへのアクセス要求が生成され、処理プログラムロジックが、制約情報を識別するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成するように配設されている、処理プログラムロジックと、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェックプログラムロジックと所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約するためのメモリアクセスチェックプログラムロジックと、を含み、所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理プログラムロジックの動作の現在のモードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する、コンピュータプログラムが提供される。そのようなコンピュータプログラムを記憶するためにコンピュータ可読媒体が提供され得、コンピュータ可読媒体は、非一時的又は一時的な形態であり得る。
【0009】
また更なる例示的な配設では、動作を実施するための処理手段であって、その動作中に、メモリへのアクセス要求が生成され、処理手段が、制約情報を識別するケイパビリティを使用して、アクセス要求のためのメモリアドレスを生成するように配設されている、処理手段と、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するためのケイパビリティチェック手段と、所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約するためのメモリアクセスチェック手段と、を含み、所与のケイパビリティが、それに関連付けられたケイパビリティ信頼レベルを有し、所与のアクセス要求に関連付けられた信頼レベルが、処理手段の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する、装置が提供される。
【図面の簡単な説明】
【0010】
本技法について、添付の図面に示す本技法の例を参照して、例示としてのみ更に説明する。
図1】例示的な一実装形態による装置のブロック図である。
図2】有界ポインタ記憶要素のセット内のポインタ値を設定するか、又はそれにアクセスしようとする場合にエラーがトリガされ得る命令のタイプの例を示し、ポインタ値は、関連付けられた範囲情報によって示された範囲外のアドレスを指定するために使用される。
図3】例示的な一実装形態による、有界ポインタに関連するタグビットの使用を例示する。
図4】本明細書に説明される技法に従って使用され得るケイパビリティの形態を概略的に例示し、信頼レベル指標が、ケイパビリティに関連して提供される。
図5A】例示的な一実装形態による、個々のアクセス要求に対する信頼レベルがどのように生成され、その後、メモリへのアクセスを制約するためにどのように使用され得るかを概略的に例示する図である。
図5B】例示的な一実装形態による、図5Aに概略的に示された装置の動作を例示する流れ図である。
図6A】例示的な一実装形態による、ケイパビリティ処理回路内に提供され得る構成要素を概略的に例示するブロック図である。
図6B】例示的な一実装形態による、ケイパビリティ生成動作の実施を例示する流れ図である。
図7】例示的な一実装形態による、処理回路の異なるドメイン及び処理状態の一例を示し、処理回路がドメイン及び処理状態の1つ以上の特定の組み合わせで動作しているときに、ケイパビリティ生成能力がどのように提供され得るかを示す。
図8A】例示的な一実装形態による、メモリからケイパビリティをロードするために実施されるステップを例示する流れ図である。
図8B】更なる例示的実装形態による、メモリからケイパビリティをロードするために実施されるステップを例示する流れ図である。
図9】例示的な一実装形態による、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベルに依存して、ケイパビリティのケイパビリティ信頼レベルを低減する能力をどのようになすことができるかを例示する流れ図である。
図10】例示的な一実装形態による、初期ケイパビリティのセットを生成するためにコンパイラがどのように使用され得るかを概略的に例示する。
図11】不変ケイパビリティの修正を選択的に可能にするかどうかを判定するために、1つの例示的な実装形態において採用され得るプロセスを例示する流れ図である。
図12】使用され得るシミュレータ例を示す。
【発明を実施するための形態】
【0011】
本明細書で説明する技法によれば、装置であって、動作を実施するための処理回路であって、その動作中に、メモリへのアクセス要求が生成される、処理回路を有する装置が提供される。処理回路は、制約情報を識別するケイパビリティを使用してアクセス要求のためのメモリアドレスを生成するように配設されている。処理回路によって生成されたメモリアドレスは、アドレス変換が実施されるシステムにおける仮想アドレスであり得るか、又は代替的にアドレス変換をサポートしないシステムにおける物理アドレスであり得る。
【0012】
この装置はまた、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求が、その所与のケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、ケイパビリティチェック動作を実施するケイパビリティチェック回路を有する。ケイパビリティチェック回路は、処理回路とは別個の構成要素であり得るか、又は代替的に装置の処理回路内に提供され得る。
【0013】
制約情報が関連付けられたケイパビリティによって識別され得るいくつかの方法がある。例えば、ケイパビリティは、1つの例示的な実装形態において、制約情報を直接含む場合がある。しかしながら、代替的な実装形態では、ケイパビリティは代わりに、制約情報が位置するメモリにおけるロケーションを(直接的又は間接的に)示し得る。
【0014】
装置は、所与のアクセス要求に関連付けられた信頼レベルに依存して、所与のアクセス要求によるメモリへのアクセスを更に制約するためのメモリアクセスチェック回路を更に有する。メモリアクセスチェック回路は、様々な形態、例えば、メモリ管理ユニット(memory management unit、MMU)、メモリ保護ユニット(memory protection unit、MPU)、セキュリティ属性ユニット(security attribute unit、SAU)、又はこれらの構成要素の組み合わせを採ることができる。本明細書で説明する技法の前に、そのようなメモリアクセスチェック回路は、典型的には、メモリへのアクセスを更に制約するときに、任意の特定の信頼レベルを個々のアクセス要求に関連付けるのではなく、処理回路の現在の動作モードに関連付けられた信頼レベルを考慮するように配設されている。しかしながら、本明細書で説明する技法によれば、所与のケイパビリティは、それに関連付けられたケイパビリティ信頼レベルを有し、その情報はまた、メモリアクセスチェック回路によって実施されるチェックに織り込まれ得る。特に、本明細書で説明する技法によれば、所与のアクセス要求に関連付けられた信頼レベルは、処理回路の動作の現在のモードに関連付けられた現在のモード信頼レベル、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に依存する。
【0015】
後でより詳細に考察されるように、個々のケイパビリティに関連してケイパビリティ信頼レベルを提供することによって、これは、ケイパビリティが管理及び使用され得る方法を強化することができる。例えば、上で考察されるように、ケイパビリティ信頼レベルは、所与のアクセス要求によって指定されたメモリへのアクセスを可能にするかどうかを判定するときにメモリアクセスチェック回路によって考慮されるので、特定の状況において処理回路によってケイパビリティが生成されることを可能にする機構を提供することができ、特定のケイパビリティに関連付けられたケイパビリティ信頼レベルは、次いで、そのケイパビリティの出所を追跡し、そのケイパビリティを使用して後に行われるアクセスを制約するために効果的に使用される。
【0016】
加えて、そのような機構は、例えば、混乱した代理攻撃に対抗するために、特定のユースケース保護がサポートされることを更に可能にする。混乱した代理攻撃は、より特権の低いコードがより特権の高いコードにポインタを渡し、より特権の高いコードを使用して、その代わりに特定の動作を実施しようとするときに発生する可能性がある。ケイパビリティ信頼レベルの使用を通して、これは、非特権コードにアクセス可能であるべきではないメモリのエリアを悪意を持ってアドレス指定する非特権コードによって作成されたポインタを、より特権の高いコードが誤って使用することを防止することができる。特に、そのような状況では、ポインタは、ケイパビリティ信頼レベルが非特権コードのケイパビリティ信頼レベルを超えないケイパビリティを使用して生成されており、したがって、特権コードからアクセスが試みられた場合でも、メモリアクセス回路は、ポインタを生成するために使用されたケイパビリティのケイパビリティ信頼レベルに起因して、特権メモリへのアクセスを防止する。
【0017】
前述の技法は、多種多様な異なるシステムにおいて使用することができる。例えば、処理回路は、様々な形態を採ることができる。例えば、処理回路は、様々な異なる動作モードでプログラムコードを実行するように配設されている中央処理装置(central processing unit、CPU)であり得るが、本技法は、他の形態の処理回路、例えば、ダイレクトメモリアクセス(direct memory access、DMA)コントローラ、暗号化アクセラレータなどに関連して適用することもできる。
【0018】
所与のアクセス要求に関連付けられた信頼レベルが、処理回路の現在の動作モード、及び所与のケイパビリティのケイパビリティ信頼レベルの両方に基づいて判定され得るいくつかの方法がある。例えば、システムは、許可の付与又は許可の制限に基づくことができ、所与のアクセス要求に関連付けられた信頼レベルは、それらの技法のうちのどれが使用されるかに依存し得る。しかしながら、例示的な一実装形態によれば、本技法は許可の制限に基づき、所与のアクセス要求に関連付けられた信頼レベルは、現在のモード信頼レベル、及びケイパビリティ信頼レベルのうちのいずれがより低い信頼レベルを表すかに制約される。
【0019】
ケイパビリティ信頼レベルをケイパビリティについて指定することができるいくつかの方法があるが、例示的な一実装形態では、ケイパビリティ信頼レベルは所与のケイパビリティ内で符号化される。これは、様々な方法で実装することができるが、例示的な一実装形態では、ケイパビリティごとに、制約情報は、そのケイパビリティを使用して生成されたメモリアドレスに許可された様々なタイプのメモリアクセスを識別する許可の少なくとも1つのセットを提供し、ケイパビリティ信頼レベルは、追加の許可として提供される。
【0020】
しかしながら、上述の例示的な実装形態では、ケイパビリティ信頼レベルは、所与のケイパビリティ内で符号化されるが、これは要件ではなく、ケイパビリティ信頼レベルを所与のケイパビリティに関連付けるための他の機構が提供され得ることに留意されたい。例えば、代替的な実装形態では、所与のケイパビリティは、ケイパビリティ信頼レベルを含むロケーションを示す識別子を提供し得る。したがって、そのような実装形態では、ケイパビリティ信頼レベル情報は、他のロケーション、例えば、メモリに常駐することができ、ケイパビリティ自体は、ケイパビリティ信頼レベルを提供するメタデータのロケーションを示す値を含む。ケイパビリティ信頼レベルを含むロケーションを示すために使用される識別子は、様々な形態を採ることができる。例えば、それは、システムのグローバルレジスタに記憶されたアドレスからのオフセットであり得、したがって、ケイパビリティ信頼レベルがメモリ内のどこに維持されているかを識別するメモリアドレスが判定されることを可能にする。代替的に、識別子は、ケイパビリティ信頼レベル情報が記憶されるメモリにおけるロケーションを直接識別する場合がある。
【0021】
各ケイパビリティ内で提供された制約情報は、様々な形態を採ることができるが、例示的な一実装形態では、そのケイパビリティを使用して任意のアクセス要求に対して生成されたメモリアドレスに対するメモリアドレスの許容範囲を判定するために使用される境界情報を更に提供する。例示的な一実装形態では、制約情報は、そのような境界情報及びそのケイパビリティを使用して生成されたメモリアドレスに許可されたメモリアクセスのタイプを識別する許可のセットの両方を含み得る。ケイパビリティはまた、他の情報、例えば、メモリアドレスを生成するためにそのポインタ値を何らかのオフセットに加算することによって、メモリアドレスを生成するときに使用されるポインタ値を含むことができる。次いで、生成されたメモリアドレスを境界情報と比較して、生成されたメモリアドレスが許容範囲内にあるかどうかを判定することができる。
【0022】
例示的な一実装形態では、処理回路は、少なくとも現在のモード信頼レベルが閾値信頼レベルを超えるときに、ケイパビリティを生成するためのケイパビリティ生成動作を実施し、現在のモード信頼レベルよりも低い信頼レベルを示すように、生成されたケイパビリティに対して関連付けられたケイパビリティ信頼レベルを設定するように配設されたケイパビリティ生成回路を備える。したがって、そのような例示的な実装形態では、処理回路は、次いでシステム内で使用され得るケイパビリティを作成するための制限された構築権を与えられ得る。しかしながら、そのようなケイパビリティ生成動作を実施するとき、処理回路は、関連付けられたケイパビリティ信頼レベルが、現在のモード信頼レベルよりも低い信頼レベルを示すように制約され、したがって、その現在の動作モードの処理回路が、その現在の動作モードで使用するためのそれ自体のケイパビリティを生成することを防止する。代わりに、任意の生成されたケイパビリティは、そのケイパビリティを生成するときに使用される現在のモード信頼レベルよりも低い信頼レベルを有する1つ以上の動作モードで使用するためのものである。
【0023】
上記のケイパビリティ生成能力は、1つ以上の特定のモード信頼レベルに制限され得、その結果、処理回路は、それらの1つ以上の特定の動作モードにあるときにのみケイパビリティを生成することができる。しかしながら、代替的に、そのようなケイパビリティ生成技法は、ケイパビリティを使用するときにサポートされた最低の信頼レベル以外の任意のモード信頼レベルに対してサポートされることができる。
【0024】
上記の例示的な実装形態では、ケイパビリティ生成機能は、1つ以上のモードの信頼レベルに制限され得、生成されたケイパビリティに関連付けられたケイパビリティ信頼レベルが現在のモード信頼レベルよりも低く設定されることをもたらすが、代替的な実装形態では、ケイパビリティ生成機能は、異なる様式でサポートされ得る。例えば、1つの特定の実装形態では、処理回路は、現在のモード信頼レベルが、ソースデータに関連して提供されたケイパビリティ信頼レベル指標を超える場合に、ソースデータからケイパビリティを生成するためのケイパビリティ生成動作を実施するように配設されたケイパビリティ生成回路を備え得る。したがって、ケイパビリティが生成されるソースデータは、それに関連して提供されたケイパビリティ信頼レベル指標を有し得、ケイパビリティ生成回路は、現在のモード信頼レベルがそのケイパビリティ信頼レベル指標を超える場合、ケイパビリティ生成動作を実施することを許可され得る。そうでない場合、次いで、有効なケイパビリティの生成が防止され得る。これは、例えば、ケイパビリティに関連して提供される制御値が、有効なケイパビリティとしてケイパビリティを識別するように設定されることを防止することによって(そのような制御値は、本明細書ではタグ値とも称される)、又は障害を発生させることによって、様々な方法で達成され得る。
【0025】
例示的な一実装形態では、処理回路は、ププログラム命令を実行するように配設され得、プログラム命令の処理は、優勢なケイパビリティによって制約される。処理回路は、制御フロー変更動作を実施するために使用される制御フロー変更処理回路であって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路を更に備え得る。そのような実装形態では、前述のケイパビリティ生成回路を使用して、次に優勢なケイパビリティとして使用するためのケイパビリティを生成することができる。特に、ケイパビリティ生成回路は、ケイパビリティ制約情報が記憶されているアドレスを制御フロー変更目標アドレスに依存して判定するように配設され得る。次いで、そのケイパビリティ制約情報が検索され、次の優勢なケイパビリティを形成するケイパビリティを生成するために使用され得る。その次に優勢なケイパビリティは、少なくともケイパビリティ制約情報に依存して生成され得、現在のモード信頼レベルよりも低い信頼レベルを示すように制約されている関連付けられたケイパビリティ信頼レベルを有し得る。したがって、生成されたケイパビリティは、現在のモード信頼レベル(すなわち、分岐が行われる前の信頼レベル)に基づいて、必要な際に、デモートされたその関連付けられた信頼レベルを有することができる。
【0026】
そのような実装形態では、処理回路の現在モード信頼レベルが、優勢なケイパビリティに関連付けられた信頼レベルによって更に制約され得ることにも留意されたい。これは、例えば、非特権ケイパビリティがプログラムカウンタ値を生成するために使用されるときに、特権コードの実行を決して許可しないことを保証することができる。したがって、そのような実装形態では、処理回路のモード信頼レベルは、次いで、現在の実行モードに固有の信頼の現在の実行レベル(例えば、処理回路がセキュアドメイン若しくは低セキュアドメインにおいて、かつ/又は特権状態若しくは非特権状態内で動作しているかどうかに依存して)及び現在のコードを実行するために使用されるプログラムカウンタケイパビリティに対して設定されたケイパビリティ信頼レベルのいずれかの最低になるように制約され得る。
【0027】
ケイパビリティは、システム内の様々なロケーションに記憶することができる。例えば、装置は、処理回路による参照のためにケイパビリティを記憶するために使用されるケイパビリティレジスタのセットを有し得るが、1つ以上のケイパビリティを記憶するために使用され得るメモリ回路も有し得る。処理回路は、メモリ回路から選ばれたケイパビリティを、ケイパビリティレジスタのセットから選択されたケイパビリティレジスタにロードするためのロード動作を実施するように配設され得る。このプロセスの間、処理回路は、選択されたケイパビリティレジスタに記憶された選ばれたケイパビリティが、現在のモード信頼レベル又はメモリ回路に記憶された選ばれたケイパビリティのケイパビリティ信頼レベルを超えないように制約されたケイパビリティ信頼レベルを有するように、ケイパビリティ信頼レベルを選択的に修正するように配設され得る。したがって、メモリ回路内に依然として保持され得るケイパビリティの元のバージョンは、変更されたその関連付けられたケイパビリティ信頼レベルを有さないが、ケイパビリティレジスタに記憶されたバージョンは、そのケイパビリティ信頼レベルを制約し、したがって、ケイパビリティレジスタ内に記憶されたそのケイパビリティのケイパビリティ信頼レベルに依存して、そのロードされたケイパビリティを使用して実施される後続のメモリアクセス動作を制約するように、ロード動作中に処理回路によって変更されたそのケイパビリティ信頼レベルを有することができる。
【0028】
いくつかの実装形態では、ロード動作は、いくつかの事例では、通常のデータ(ケイパビリティではなく)をケイパビリティレジスタにロードするために実施され得、そのような事例では、ケイパビリティ信頼レベルに関連付けられるデータにおけるビットが、実際にはケイパビリティが修正されないデータであったことが重要であり得る。なぜなら、この場合、処理されているのはケイパビリティではなく、それらのビットを修正することはデータを破損するからである。したがって、例示的な一実装形態では、処理回路は、ロード動作中に、選ばれたケイパビリティが有効なケイパビリティであることを識別する制御値を選ばれたケイパビリティが有するときに、ケイパビリティ信頼レベルのみを選択的に修正するように配設され得る。そのようなアプローチによって、ロード動作中のケイパビリティ信頼レベルの上述の選択的修正は、実際にケイパビリティがケイパビリティレジスタにロードされている場合にのみ実施される。
【0029】
ケイパビリティ信頼レベルが、現在のモード信頼レベル又はメモリ回路に記憶された選ばれたケイパビリティのケイパビリティ信頼レベルを超えないように制約され得る、いくつかの方法がある。しかしながら、1つの特定の例示的な実装形態では、現在のモード信頼レベルが、メモリ回路に記憶された選ばれたケイパビリティのケイパビリティ信頼レベル未満であるときに、処理回路が、選択されたケイパビリティレジスタに記憶された選ばれたケイパビリティのケイパビリティ信頼レベルを、現在のモード信頼レベルに一致するようにデモートするように配設されている。
【0030】
更に、現在のモード信頼レベルが、メモリ回路に記憶された選ばれたケイパビリティのケイパビリティ信頼レベル以上であるときに、処理回路は、選ばれたケイパビリティが選択されたケイパビリティレジスタに記憶されているときに、ケイパビリティ信頼レベルを変更しないままにするように配設され得る。したがって、このシナリオでは、ケイパビリティ信頼レベルは、ロード動作中に変化しない。
【0031】
例示的な一実装形態では、少なくとも現在のモード信頼レベルが、閾値信頼レベルを超えるときに、処理回路は、選ばれたケイパビリティのケイパビリティ信頼レベルが、その現在のケイパビリティ信頼レベルから低減することを可能にするように配設されている。したがって、そのような機構は、生成されたケイパビリティがどのように管理されるかにおける柔軟性を提供し、特に、ケイパビリティ信頼レベルがデモートされることを可能にすることができる。そのような技法によって、少なくとも現在のモード信頼レベルが閾値信頼レベルを超える(すなわち、現在のプログラムコードが十分に信頼されていることを示す)間に、処理回路上で実行されるプログラムコードが、1つ以上のケイパビリティのケイパビリティ信頼レベルをデモートすることが可能であり得る。いくつかの実装形態では、そのような機能は、現在のモード信頼レベルにかかわらず許可され得るか、又は、ケイパビリティの信頼レベルをデモートするこの能力は、例えば、そのケイパビリティ信頼レベルが現在のモード信頼レベルを超えないケイパビリティに関して、異なる方法で制限され得る。
【0032】
例示的な一実装形態では、装置には、1つ以上の初期ケイパビリティが提供され得、そのケイパビリティ信頼レベルは、ケイパビリティを利用するときに装置によってサポートされた最高の信頼レベルを示す。そのような初期ケイパビリティは、例えば、アクセス要求がケイパビリティによって制約されるケイパビリティ動作モードに装置が入る前に設定することができる。初期ケイパビリティは、様々な方法で定義することができるが、一実装形態では、装置上で実行されるプログラムコードをコンパイルするために使用されるコンパイラによって定義され得る。メモリからケイパビリティをロードするときに採用することができる前述の技法、特に、現在のモード信頼レベルがロードされたケイパビリティのケイパビリティ信頼レベルよりも低い状況において、ケイパビリティ信頼レベルを選択的にデモートする能力に起因して、これは、初期ケイパビリティが、作成されたときに、ケイパビリティを利用するときに装置によってサポートされる最高の信頼レベルを与えられた場合であっても、正しい動作を保証することができる。
【0033】
例示的な一実装形態では、全ての初期ケイパビリティを、最高の信頼レベルを示すケイパビリティ信頼レベルを有するように設定することができるが、所望される場合、例えば、ケイパビリティが常に非特権であるべきであることを開発者が知っている場合、初期ケイパビリティのうちの1つ以上が、より低い信頼レベルで作成され得る。
【0034】
処理回路は、様々な異なる方法で動作するように配設することができ、現在のモード信頼レベルは、処理回路が現在どのように動作しているかに依存する。例えば、一実装形態では、処理回路は、少なくとも特権状態及び非特権状態を含む複数の状態のうちの1つにおいてプログラムコードを実行するように配設され得、現在のモード信頼レベルは、複数の状態のうちのどれにおいて現在のプログラムコードが実行されるかに依存し得る。2つの異なる状態、すなわち、特権状態及び非特権状態があり得るか、又は異なるレベルの特権を有するN個の異なる状態があり得、ここでNは2より大きく、これらのシナリオのいずれにおいても、現在のプログラムコードがどの状態で実行されるかに依存して、現在のモード信頼レベルを設定することができることに留意されたい。例えば、特定の実装形態は、異なる状態として、EL0、EL1及びEL2などの異なる例外レベル(EL)を提供し得、ここで、EL2は、EL1よりも特権が与えられ、EL1はEL0よりも特権が与えられる。
【0035】
代替的に、又は加えて、処理回路は、少なくともセキュアドメイン及び低セキュアドメインを含む複数のセキュリティドメインのうちの1つにおいてプログラムコードを実行するように配設され得、現在のモード信頼レベルは、複数のセキュリティドメインのうちのどれにおいて現在のプログラムコードが実行されるかに依存し得る。処理状態と同様に、2つのドメイン、すなわち、セキュアドメイン及び非セキュアドメインだけが存在し得るか、又は代替的に、M個の異なるドメインが存在し得、ここで、Mは2より大きく、各ドメインは異なるレベルのセキュリティを有し、現在のモード信頼レベルは、次いで、現在のプログラムコードがどのセキュリティドメインで実行されるかに依存して、設定され得る。
【0036】
現在のモード信頼レベルは、複数の異なる直交信頼レベルに依存して設定され得、3つ以上の直交信頼レベルがあり得ることにも留意されたい。したがって、例えば、一実装形態では、処理回路は、上で考察される異なる状態及び異なるセキュリティドメインの両方で動作することが可能であり得、現在のモード信頼レベルは、それらの要因の両方に依存して設定され得る。
【0037】
例示的な一実装形態では、ケイパビリティは、制約情報が不変であると識別される少なくとも1つの不変ケイパビリティを含み得る。典型的には、これは、処理回路が、ケイパビリティが確立されると制約情報を変更することができないことを意味する。しかしながら、本明細書で説明する技法によれば、ある状況では、選ばれた不変ケイパビリティの制約情報を修正することが可能である。例えば、一実装形態では、少なくとも、現在のモード信頼レベルが閾値信頼レベルを超えるときに、処理回路は、選ばれた不変ケイパビリティが現在のモード信頼レベル未満のケイパビリティ信頼レベルを有する場合に、選ばれた不変ケイパビリティの制約情報が修正されることを可能にするように配設されている。いくつかの例示的な実装形態では、現在のモード信頼レベルが閾値信頼レベルを超えているかどうかをチェックする必要がない場合があり、代わりに、選ばれた不変ケイパビリティが現在のモード信頼レベル未満のケイパビリティ信頼レベルを有する場合に、選ばれた不変ケイパビリティの制約情報が常に修正されることを可能にされ得る。
【0038】
代替的な実装形態では、不変ケイパビリティの選択的修正は、異なる方法で管理され得る。例えば、上記の例では、信頼レベル基準が満たされない場合、不変ケイパビリティに対する修正動作は実施されないが、代替的な実装形態では、信頼レベル基準が満たされない場合であっても修正が発生し得るが、その場合、タグビットをクリアして、ケイパビリティを効果的に無効にし得る。更なる代替例として、修正が実行され得るが、必要とされる場合、ケイパビリティ信頼レベルは、上述の信頼基準が満たされるように、すなわち、一度不変ケイパビリティが変更されると、ケイパビリティ信頼レベルが現在のモード信頼レベルより低くなるように、デモートされ得る。次いで、これは、その修正された不変ケイパビリティの今後の使用を制限するか、又は処理回路は、そのような状況において障害を発生させるように配設され得る。
【0039】
ケイパビリティを不変であると識別することができるいくつかの方法があることに留意されたい。例示的な一実装形態では、ケイパビリティが不変であるかどうかを(直接的又は間接的に)示すために、ケイパビリティにおいてビットが指定され得る。
【0040】
メモリ回路からケイパビリティレジスタにケイパビリティをロードするためのロード動作を実施する前述のプロセスを参照して、そのケイパビリティが選択されたケイパビリティレジスタに記憶されるとき、そのケイパビリティのケイパビリティ信頼レベルの選択的なデモーションを伴い、次いで、不変ケイパビリティのコンテキストにおけるそのプロセスを考慮するとき、処理回路は、選ばれたケイパビリティが不変ケイパビリティであるときに、選ばれたケイパビリティのケイパビリティ信頼レベルのデモーションをディセーブルするように構成され得る。そのようなアプローチは、例えば、不変ケイパビリティを修正することなく、非特権モード内から特権不変ケイパビリティをスピルすることを可能にする。
【0041】
例示的な一実装形態では、処理回路は、所与のケイパビリティに関連付けられたケイパビリティ信頼レベルが、現在のモード信頼レベルを超える場合に、所与のアクセス要求によって識別されたアクセスを実施する試みがなされたときに、障害信号を発行するように配設されている。これにより、処理回路が、その現在の動作モードにあるときに処理回路による使用が意図されていないケイパビリティを使用しようとすることを防止することができる。障害をトリガするために取ることができる様々な異なるアクションがある。例えば、障害は、生成されたアドレスのチェックに基づいてトリガされ得るか、又はアドレスが生成される前でさえトリガされ得る。
【0042】
例示的な一実装形態では、ケイパビリティがメモリからケイパビリティレジスタにロードされるときのケイパビリティ信頼レベルの以前の選択的修正を考慮するとき、次いで、例示的な一実装形態では、選択されたケイパビリティレジスタに記憶された選ばれたケイパビリティは、ロード動作のためのメモリアドレスを生成するために使用されるケイパビリティに関連付けられたケイパビリティ信頼レベルを超えないケイパビリティ信頼レベルを有するように更に制約され得る。そのようなアプローチは、メモリからケイパビリティレジスタにロードされたケイパビリティに関連付けられたケイパビリティ信頼レベルを更に制約するために使用され得る。
【0043】
例示的な一実装形態では、メモリからケイパビリティレジスタへのケイパビリティの前述のロードを実施するとき、選択されたケイパビリティレジスタに記憶された選ばれたケイパビリティのケイパビリティ信頼レベルのデモーションの実施は、制御情報に依存して制御され得る。この制御情報は、ケイパビリティ自体に、例えば、ロードされているケイパビリティ内に、又は実際にはロード動作のためのメモリアドレスを生成するために使用されるケイパビリティ内に記憶することができる。代替的に、この制御情報は、別個の制御レジスタに記憶され得る。この後者のシナリオは、例えば、ケイパビリティレジスタへのケイパビリティのローディング中にデモーションを行うべきかどうかを決定するためにMPU領域属性を使用することを可能にする。したがって、純粋に例として、読み出し専用としてマークされたMPU領域(例えば、コードメモリ)からケイパビリティがロードされる場合、デモーションが行われるように配設することができるが、代わりにその領域が読み出し-書き込みとしてマークされる場合(例えば、ヒープ又はスタックに使用される場合)、デモーションが行われないように配設することができる。
【0044】
ここで、特定の例について、図を参照して説明する。
【0045】
本明細書で説明する技法は、様々なデータ処理システムにおいて、そのようなシステム内の異なるタイプの処理回路に関連して採用することができる。例えば、本技法は、中央処理装置(CPU)の形態を採る処理回路に関連して使用することができるが、代替的に、ダイレクトメモリアクセス(DMA)コントローラ、暗号化アクセラレータなどの他の処理回路に関連して使用することもできる。純粋に以下の図1の用例として、CPUの処理パイプラインは、説明される技法が使用され得る処理回路の例として考慮される。
【0046】
図1は、命令を処理するための処理パイプライン4を備えるデータ処理装置2の例を概略的に示す。この例では、処理パイプライン4は、フェッチステージ6、復号ステージ8、発行ステージ10、実行ステージ12、及びライトバックステージ14を含む、多数のパイプラインステージを含むが、他のタイプのステージ又はステージの組み合わせが提供され得ることが理解されるであろう。例えば、レジスタリネームを実施するためのリネームステージが、いくつかの例示的な実装形態に含まれ得る。処理されることになる命令がステージからステージに移動し、ある命令が、1つのステージで保留中である間に、別の命令が、パイプライン4の異なるステージで保留中であり得る。
【0047】
フェッチステージ6は、レベル1(L1)命令キャッシュ20から命令をフェッチする。フェッチステージ6は通常、連続する命令アドレスから逐次的に命令をフェッチし得る。しかしながら、フェッチステージは、分岐命令の結果を予測するための分岐予測器22も有し得、フェッチステージ6は、分岐が行われたと予測される場合に(非逐次的な)分岐先アドレスから、又は分岐が行われなかったと予測される場合に次の逐次アドレスから命令をフェッチすることができる。分岐予測器22は、ある分岐が行われる可能性が高いかどうかを予測するための情報を記憶するための1つ以上の分岐履歴テーブルを含み得る。例えば、分岐履歴テーブルは、従前に実行された分岐の実際の結果を追跡するための、又は分岐のために行われた予測の信頼度を表すためのカウンタを含み得る。分岐予測器22は、分岐命令の従前の目標アドレスを、同じ分岐命令に後で遭遇した際に、それらが予測され得るように、キャッシュするための分岐先アドレスキャッシュ(branch target address cache、BTAC)24も含み得る。
【0048】
フェッチされた命令は、命令を復号して復号された命令を生成する復号ステージ8に渡される。復号された命令は、実行ステージ12を制御して適切な処理動作を実行するための制御情報を含み得る。キャッシュ20からフェッチされたいくつかのより複雑な命令に対して、復号ステージ8は、それらの命令を復号された複数の命令(マイクロオペレーション(μop又はuop)として知られ得る)にマッピングし得る。それゆえに、L1命令キャッシュ20からフェッチされた命令と、パイプラインの後のステージで見られる命令との間に1対1の関係が存在しない場合がある。概して、本出願における「命令」に対する参照は、マイクロオペレーションを含むものと解釈されるべきである。
【0049】
復号された命令は、発行ステージ10に渡され、これは、命令の実行に必要なオペランドが利用可能であるかどうかを判定し、オペランドが利用可能である場合に実行のための命令を発行する。いくつかの例示的な実装形態は、L1命令キャッシュ20から命令がフェッチされたプログラム順序に対応する順序での実行のための命令が発行されるように、インオーダ処理をサポートし得る。他の例示的な実装形態は、プログラム順序とは異なる順序で実行ステージ12に命令を発行できるようにアウトオブオーダ実行をサポートし得る。アウトオブオーダ処理は、先の命令がオペランド待ちの間停止させられている間に、そのオペランドが利用可能である、プログラム順序では後の命令を先に実行できるため、性能向上に有用であり得る。
【0050】
発行ステージ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にライトバックされ得る。
【0051】
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からフェッチすることができる。キャッシュ階層を管理するために、任意の既知のスキームを使用し得る。
【0052】
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであり得るが、少なくともメインメモリ50、及び任意選択的に、少なくともいくつかのレベルのキャッシュ階層も、物理的にアドレス指定され得る。したがって、トランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)が、パイプライン4によって使用される仮想アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスに変換するために(例えば、後でより詳細に説明するメモリアクセスチェック回路52内に)提供され得る。例えば、TLBは、仮想アドレス空間の対応するページの仮想ページアドレスと、対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされるべき対応する物理ページアドレスとをそれぞれが指定する、多数のエントリを含み得る。例えば、仮想ページアドレス及び物理ページアドレスは、対応する仮想アドレス及び物理アドレスの最上位部分に対応し得、仮想アドレスを物理アドレスにマッピングするときに残りの最下位部分は変化しないままである。アドレス変換情報と同様に、各TLBエントリは、アドレスのあるページがパイプライン4のあるモードでアクセス可能であるかどうかを示すような、アクセス許可を指定するいくつかの情報も含み得る。いくつかの例示的な実装形態では、TLBエントリは、読み取り又は書き込み動作に応答して更新されるレベルのキャッシュ階層を定義するキャッシュポリシー情報など、アドレスの対応するページの他の特性(例えば、キャッシュがライトバックモードで動作するべきか、若しくはライトスルーモードで動作するべきか)、又は対応するページ内のアドレスに対するデータアクセスを、パイプライン4によって発行されたデータアクセスの順序と比較して、メモリシステムによって再順序付けできるかどうかを定義する情報を定義することもできる。
【0053】
単一レベルTLBが使用され得るが、代わりに、レベル1(L1)TLBが、いくつかの最近アクセスされたページにおいてアドレスを変換するためのTLBエントリを含み得、レベル2(L2)TLBがより多数のページのエントリを記憶するために提供され得るように、TLBの階層が提供され得ることが理解されよう。必要とされるエントリがL1TLBに存在しないときには、それをL2TLB、又は階層内の更なるTLBからフェッチすることができる。アクセスされるページのために必要とされるエントリがいずれのTLBにもない場合、メモリ50内のページテーブルにアクセスするために、ページテーブルウォークを実施することができる。本技法では、任意の既知のTLB管理スキームを使用することができる。
【0054】
また、いくつかのシステムは、複数のレベルのアドレス変換をサポートし得、その結果、例えば、第1のTLB(又はTLB階層)を使用して仮想アドレスを中間アドレスに変換し得、かつ1つ以上の更なるTLBを使用する第2のレベルのアドレス変換が、中間アドレスを、キャッシュ又はメモリにアクセスするために使用する物理アドレスに変換し得ることが理解されよう。これは、例えば、第1のレベルのアドレス変換がオペレーティングシステムによって管理され得、第2のレベルのアドレス変換がハイパーバイザによって管理され得る、仮想化をサポートするのに有用であり得る。
【0055】
図1に示すように、装置2は、有界ポインタレジスタ60のセットを有し得る。有界ポインタレジスタのセットは、汎用データレジスタ40のセットとは物理的に別個のものとして図1に示しているが、代替的かつ例示的な実装形態では、汎用データレジスタと有界ポインタレジスタの両方を提供するために同じ物理的ストレージを使用し得る。
【0056】
各有界ポインタレジスタ60は、アクセスされることになるデータ値のアドレスを判定するために使用し得るポインタ値62と、対応するポインタ62を使用するときのアドレスの許容範囲を指定する範囲情報64とを含む。有界ポインタレジスタ60は、ポインタの使用に関する1つ以上の制限/許可を定義し得る制限情報66(本明細書では許可情報とも称される)も含み得る。例えば、制限66は、ポインタ62を使用し得る命令のタイプ、又はポインタを使用し得るパイプライン4のモードを制限するために使用することができる。それゆえに、範囲情報64及び制限情報66は、その中でポインタ62の使用が許可されるケイパビリティを定義すると考えられ得る。定義されたケイパビリティ外でポインタ62を使用する試みが行われると、エラーをトリガすることができる。範囲情報64は、例えば、ポインタがある既知の境界内に留まり、かつセンシティブな情報又はセキュアな情報を含む可能性があるメモリアドレス空間の他の領域に迷い込まないことを確実にするために、有用であり得る。汎用データレジスタと有界ポインタレジスタの両方に同じ物理的ストレージを使用する例示的な実装形態において、例示的な一実装形態では、ポインタ値62は、例えば、対応する汎用レジスタのために使用されるのと同じ記憶ロケーション内に記憶され得る。
【0057】
図2は、データ又は命令に対する不正アクセスから保護するために許容範囲が使用される命令のタイプの例を示す。図2の頂部に示すように、特定の有界ポインタレジスタPR1が、所与のポインタ値62と、この例では、許容範囲の下側境界を定義する下側境界アドレス68及び許容範囲の上側境界を定義する上側境界アドレス69を使用して指定される、範囲情報64とを含む。例えば、境界68、69は、80000~81000のアドレス範囲を定義するように設定される。ある命令が有界ポインタレジスタPR1を参照し、ポインタ62から判定されたアドレスがこの範囲外である場合に、エラーがトリガされ得る。
【0058】
例えば、図2の部分Aに示すように、いくつかのシステムでは、ポインタレジスタ60内のポインタ62の値を、範囲情報64によって指定された範囲外にある値(ここでは、ポインタがアドレスを直接指定すると仮定する)に設定する試みがある場合、エラーがトリガされ得る。これは、ポインタを使用するアクセスが許容範囲内に間違いなくあることを確実にできるように、ポインタ62が指定範囲外の値を取ることが回避させる。代替的に、図2の部分Bに示すように、命令が、ポインタ62のアドレスによって識別された位置へのアクセスを試み、そのアドレスが指定範囲外にあるときに、エラーをトリガすることができる。それゆえに、ポインタ62を指定範囲外の値に設定することは許容できるが、ポインタアドレス(又はポインタから導き出されたアドレス)のデータアクセスが試みられ、アドレスが許容範囲外にある場合、エラーがトリガされ得る。他のシステムは、図2の部分A及びBに示す両方の命令のタイプに応答してエラーをトリガし得る。
【0059】
範囲情報64は、異なる方法で設定され得る。例えば、セキュリティコード、又はオペレーティングシステム若しくはハイパーバイザが、所与のポインタに対して許可された範囲を指定し得る。例えば、命令セットアーキテクチャは、所与のポインタ62に対する範囲情報64を設定又は修正するためのいくつかの命令を含み得、これらの命令の実行は、プロセッサ4の特定のソフトウェア又は特定のモード又は例外状態に制限することができる。範囲情報64を設定又は修正するための任意の既知の技法が使用され得る。
【0060】
ポインタを参照するある命令を実行するときに実行状態12で使用し得る有界ポインタ記憶要素60のセットに加えて、命令がレベル1命令キャッシュ20からフェッチされるときに、フェッチステージ6で同様の機能を提供するためにプログラムカウンタケイパビリティ(program counter capability、PCC)レジスタ80も使用され得る。具体的には、プログラムカウンタポインタは、フィールド82に記憶され得、PCC80は、有界ポインタ記憶要素60のセット内のポインタの各々に提供される範囲及び制限情報と同様の、範囲情報84及び任意の適切な制限情報86も提供する。
【0061】
図3は、個々のデータブロックがケイパビリティ(すなわち、有界ポインタ及び関連付けられた制限情報)を表すか、又は通常データを表すかを識別するために、それらのデータブロックに関連してタグビットがどのように使用されるかを概略的に示している。具体的には、メモリアドレス空間110は、指定されたサイズを典型的に有する一連のデータブロック115を記憶する。純粋に例示のために、この例では、各データブロックが128ビットを含むと仮定されるが、他の例示的な実装形態では、異なるサイズのデータブロック、例えば、ケイパビリティが64ビットの情報によって定義されるときの64ビットデータブロックが使用され得る。各データブロック115に関連して、一例では、タグビットと称される単一ビットフィールドであるタグフィールド120が提供され、これは、関連付けられたデータブロックがケイパビリティを表すことを識別するために設定され、関連付けられたデータブロックが通常データを表し、それゆえにケイパビリティとして取り扱えないことを示すためにクリアされる。設定又はクリア状態に関連付けられた実際の値は、例示的な実装形態に依存して変化し得るが、純粋に例示のために、例示的な一実装形態では、タグビットが1の値を有する場合に、関連付けられたデータブロックがケイパビリティであることを示し、それが0の値を有する場合に、関連付けられたデータブロックが通常データを含むことを示すことが理解されるであろう。
【0062】
ケイパビリティが、図3に示されるケイパビリティレジスタ100などの有界ポインタレジスタ60(本明細書ではケイパビリティレジスタとも称される)のうちの1つにロードされるときに、タグビットはケイパビリティ情報と共に移動する。したがって、ケイパビリティレジスタ100にケイパビリティがロードされた場合、ポインタ102、範囲情報104及び制限情報106(以下、許可情報と称される)がケイパビリティレジスタにロードされることになる。加えて、そのケイパビリティレジスタに関連して、又はその内の特定のビットフィールドとして、タグビット108は、コンテンツがケイパビリティを表すことを識別するために設定されることになる。同様に、ケイパビリティがメモリからストアバックされた場合、関連するタグビット120は、ケイパビリティが記憶されているデータブロックに関連して設定される。そのようなアプローチにより、ケイパビリティと通常データを区別し、それゆえに、通常データがケイパビリティとして使用できないことを確実にする。
【0063】
図1に戻ると、装置2には、アクセス要求が、ケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために、所与のケイパビリティを使用してそのメモリアドレスが生成される所与のアクセス要求に関連してケイパビリティチェック動作を実施することができるケイパビリティチェック回路33が提供され得る。これは、例えば、先に考察される範囲情報及び制限/許可情報を参照して実施することができ、これらは、まとめてケイパビリティの制約情報と称され得る。したがって、純粋に例として、メモリアドレスへの書き込みアクセス要求は、ケイパビリティが読み取りにのみ使用され、書き込みには使用されないことを示すケイパビリティを使用して実施されることを求めている場合、ケイパビリティチェック回路33は、アクセス要求を進めることができないと判定し得、例えば、そのような状況下で障害信号を発行し得る。
【0064】
しかしながら、ケイパビリティチェック動作に合格すると仮定すると、メモリアクセス要求は、アクセスに進むことを許可されることを確実にするために、いくつかの更なるチェックを提供することができるメモリアクセスチェック回路52に伝搬され得る。例えば、処理回路は、複数の異なる動作モードで動作することが可能であり得、各動作モードは、例えば、特定の特権状態、及び/又は装置が動作している特定のセキュリティドメインに関連付けられ得、メモリの特定の領域は、処理回路が可能な動作モードのうちの1つ又はサブセットで動作しているときにのみアクセス可能であり得る。
【0065】
メモリアクセスチェック回路52はしたがって、メモリアドレス空間の様々な領域に対して指定された属性データに基づいて、メモリシステムへのアクセスが許可されているかどうかをチェックし得る。メモリアクセスチェック回路は、メモリアドレス空間の対応する領域のそれぞれに関連するセキュリティドメインを定義するセキュリティドメイン定義データを記憶するセキュリティ属性ユニット(SAU)56を含み得る。セキュリティ属性データに基づいて、セキュリティ属性ユニット56は、メモリアクセスが許可されているかを、処理回路の動作の現在のセキュリティドメインと、目標アドレス及びメモリアクセスを含む領域に関連するセキュリティドメインと、に依存して、チェックすることができる。他の実装形態では、SAU56は、セキュリティドメイン定義データを直接記憶するのではなく、メモリアクセスチェックを実施するために、他のロケーションに記憶されたセキュリティ定義データにアクセスし得る。いくつかのシステムにおいて、セキュリティドメイン定義データは、メモリシステム50に記憶され得るか、又はシステム2内の他のロケーションで構成レジスタに記憶され得る。
【0066】
処理回路4は、動作の現在のセキュリティドメインにおいて動作し得、動作の現在のセキュリティドメインは、概して、現在実行されている命令のアドレスに関連付けられたセキュリティドメインに対応し得る(ただし、例えば、ドメイン間の移行を処理するときに、いくつかの例外があり得る)。セキュアドメインで動作している間、処理回路は、セキュアドメイン及び低セキュアドメインの両方に関連するメモリ領域内のデータにアクセスすることができ、低セキュアドメインで動作するときは、処理回路は低セキュアドメインに関連する領域内のデータにアクセスすることはできるが、SAU56がセキュアドメインに関連すると指定するアドレス空間の領域内のデータにアクセスすることは許可されないことがある。これにより、低セキュアドメインで動作しているコードからの無認可アクセスに対する機密データの保護が可能になる。本明細書でより詳細に考察されるように、SAU56は、アクセスを進めることができるかどうかを判定するためにそのようなチェックを実施しているときに、処理回路の現在のセキュリティドメインだけでなく、考慮されている個々のアクセス要求に関連付けられた詳細情報も考慮する。この詳細情報は、処理回路のセキュリティドメイン、及びアクセス要求のメモリアドレスを生成するために使用されるケイパビリティに関連付けられた信頼レベル指標の両方に基づく。
【0067】
また、図1を参照すると、メモリアクセスチェック回路52は、メモリシステム50へのメモリアクセスがアクセス許可を満たすかどうかをチェックするメモリ保護ユニット(MPU)54を含み得、アクセス許可は、例えば、処理回路4のどの特権レベルがメモリの所与の領域にアクセスすることが可能にされているかを指定し得るか、又はアドレス空間のメモリ領域が、読み取り動作及び書き込み動作の両方によってアクセスされ得るか、若しくは書き込みが禁止されている読み取り専用領域であるかを指定し得る。MPU54によって使用されるアクセス許可は、特権の低いプロセス(アプリケーションなど)が、メモリのどの領域に、どのように(読み出し専用又は読み出し/書き込み)アクセスすることを許可されるかを制御するために、例えば、特権の高いプロセス(ハイパーバイザ又はオペレーティングシステムなど)によって指定され得る。MPU54によって提供される許可は、SAU56によって提供される許可とは独立していてもよく、よって、所与のメモリアクセス要求が許可されるためには、MPU54及びSAU56の両方について定義されたアクセス許可に基づくチェックに合格しなければならない。MPU54は、図1に単一のエンティティとして示されているが、いくつかの例では、それぞれがセキュリティドメインの1つに関連する別個のセキュアMPU及び低セキュアMPUが提供され得、よって、現在のドメインがセキュアドメインであるか低セキュアドメインであるかに依存して、メモリの所与の領域に異なるメモリアクセス許可を指定することができる(例えば、ある領域は低セキュアドメインでは読み出し専用であるが、セキュアドメインでは読み出し可能及び書き込み可能である)。
【0068】
SAUの先の考察と同様に、MPUがそのアクセス許可チェックを実施しているとき、MPUは、処理回路の現在の動作モードだけでなく、メモリアドレスを生成するために使用されるケイパビリティに関連付けられたケイパビリティ信頼レベルにも依存する、所与のアクセス要求に関連付けられた信頼レベルを考慮に入れることができる。
【0069】
1つ以上の制御レジスタ90が、本明細書で説明する実装形態によって提供される特定の特徴のためのイネーブル/ディセーブルフラグを記憶するために提供され得る。特定の例として、処理回路の現在の動作モードの信頼レベルよりも低い信頼レベルを有する不変ケイパビリティを選択的に修正することが可能であり得るが、この挙動は、制御レジスタ90内の別個のビットによって制御することができる。同様に、処理回路の特権の低い動作モード内から、関連付けられたより高い信頼レベルを有するケイパビリティを逆参照しようとするときに障害が発生する場合があり、この場合もやはり、そのような機能は、制御レジスタ90内のイネーブル制御ビットによってゲート制御される可能性がある。また後で考察されるように、ケイパビリティはメモリからケイパビリティレジスタにロードされ得、このプロセス中に、ロードされているケイパビリティの関連付けられた信頼レベルが選択的にデモートされ得るが、この場合も、そのような機能は、制御レジスタ90における別個の制御ビットによって制御され得る。
【0070】
本明細書で説明する技法によれば、ケイパビリティは、関連付けられたケイパビリティ信頼レベル情報と共に提供され、その信頼レベル指標は、メモリアクセスチェック回路52によって実装されたメモリアクセスチェック手順に織り込まれ得る。この信頼レベルの指標がケイパビリティに関連して提供され得る様々な方法があるが、図4は、例示的な一実装形態を例示する。図4に示される例では、ケイパビリティ100は、ポインタ値102及び何らかの範囲情報104(本明細書では境界情報とも称される)を含む。データの対応するブロックがケイパビリティとして取り扱われるべきかどうかを識別するために設定又はクリアされ得る前述のタグビット108と共に、許可のセットもケイパビリティ内に提供され得る。
【0071】
ケイパビリティに対して指定された許可は、実装形態に依存して変化し得るが、一実装形態では、許可は、読み取りアクセスのためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す読み取り許可ビット、書き込みアクセスのためのメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す書き込み許可ビット、並びにフェッチ及び実行される命令のメモリアドレスを生成するためにケイパビリティが使用され得るかどうかを値が示す実行許可ビットを含む。例えば、ケイパビリティが不変であると考えられるかどうかを示すために、ケイパビリティ内で他の情報を識別することができる。そのような情報は、ケイパビリティ内における追加情報として直接指定することができるが、いくつかの例示的な実装形態では、ケイパビリティ内にすでに提供されている他の情報の状態から推論することができる。例えば、1つの特定の実装形態では、実行ビットが設定されているときに、ケイパビリティは不変であるとみなされ、ケイパビリティによって指定された情報は、命令実行から生じ得るポインタ値の通常の増分を介する場合を除いて、タグビットをクリアする(事実上ケイパビリティを無効化する)ことなく修正することができない。
【0072】
図4に示すように、例示的な一実装形態では、許可フィールドは、信頼レベル指標フィールド136を提供するように拡張され、信頼レベル指標は、ケイパビリティ100に関連付けられた信頼レベルを識別する。信頼レベルは、ケイパビリティ100のフィールド136に直接符号化することができるか、又は代替的に、信頼レベル指標フィールド136は、信頼レベル情報を含むメモリアドレスを示すために使用される識別子を提供することができる。このような識別子は、信頼レベル情報のメモリロケーションを直接示すことができるか、又は、例えば、信頼レベル情報を含むロケーションを識別するために、システムにおけるグローバルレジスタに記憶されたアドレスに適用することができるオフセットを指定することができる。
【0073】
図5Aは、例示的な一実装形態による、ケイパビリティ信頼レベル情報がメモリへのアクセスを制約するためにどのように使用されるかを概略的に例示するブロック図である。この例では、処理回路150は、メモリアドレスが所与のケイパビリティを使用して生成されるアクセス要求が考慮されているときに、所与のケイパビリティによって識別される制約情報に基づいてそのアクセス要求が許可されるかどうかを判定するためのケイパビリティチェック動作を実施するために使用され得るケイパビリティチェックブロック155を含む。したがって、ケイパビリティチェックは、アクセスに進むことを許可されるかどうかを判定するために、ケイパビリティの範囲及び許可情報への参照を伴い得る。ケイパビリティチェックに不合格であった場合、不合格指標を処理回路に提供することができ、これは、例えば、障害信号などの様々な形態を採ることができる。しかしながら、ケイパビリティチェックに合格した場合、これは、信頼レベル生成ブロック160に示され、信頼レベル生成ブロック160は、ケイパビリティ100の信頼レベル情報136も受信する。
【0074】
ケイパビリティ信頼レベルに加えて、信頼レベル生成ブロック160はまた、現在のモード信頼レベルの指標を受信し、これは、処理回路の現在の動作モードに関連付けられた信頼レベルである。次いで、ケイパビリティ信頼レベル及び現在のモード信頼レベルの両方が、アクセス要求に対する信頼レベルを形成するために組み合わせて使用され、アクセス要求は、パス165を介して発行された要求のメモリアドレスに関連してパス167を介して伝搬される。信頼レベル生成ブロック160が、現在のモード信頼レベル及びケイパビリティ信頼レベルの両方を使用して、アクセス要求に対する信頼レベルを決定することができる様々な方法があるが、例示的な一実装形態では、アクセス要求に関連付けられた信頼レベルは、現在のモード信頼レベル及びケイパビリティ信頼レベルのうちの、より低い信頼レベルを表す方に制約される。
【0075】
メモリアクセスチェック回路170は、要求のメモリアドレス、及びアクセス要求に対する関連付けられた信頼レベルの両方を受信し、異なるメモリ領域に対して指定され得る記憶されたアクセス許可情報175を参照して、メモリアクセスチェック動作を実施することができる。特に、いくつかの異なるメモリ領域の各々について、アクセス許可情報は、アクセスに進むことを可能にするためにアクセス要求に提供される必要がある要求される信頼レベルを効果的に示すことができる。パス167を介して受信されたアクセス要求に対する信頼レベルが、要求された信頼レベルを満たさない場合、アクセスは不合格にされ得、そうでない場合、メモリへのアクセスは、メモリアクセスチェック回路170からパス180を介して伝搬させることができる。
【0076】
図5Bは、例示的な一実施形態における図5Aの回路の動作を例示する流れ図である。ステップ200において、アクセス要求が必要であると判定され、その後、ステップ205において、指定されたケイパビリティのポインタ値を参照して、アクセス要求のためのメモリアドレスが判定される。ステップ210において、アクセスを進めることができるかどうかを判定するために、指定されたケイパビリティの限界及び許可情報を参照して、ケイパビリティチェックが実施される。
【0077】
したがって、ステップ215において、ケイパビリティチェックに合格したかどうかが判定され、合格していない場合、プロセスはステップ220に進み、ケイパビリティチェック不合格信号がアサートされる。
【0078】
典型的には、ステップ210でケイパビリティチェックを実施するとき、信頼レベル情報は使用されないが、代わりに、メモリアクセスチェック回路170に渡すために保持される。しかしながら、いくつかの実装形態では、信頼レベル情報は、ケイパビリティチェックプロセス中に使用することもできる。例えば、処理回路は、所与のアクセス要求のためのメモリアドレスを生成するために使用されているケイパビリティに関連付けられたケイパビリティ信頼レベルが、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベルを超える状況において、所与のアクセス要求によって識別されたアクセスを実施する試みがなされたときに、ステップ220で障害信号を発行するように配設され得る。特に、いくつかの実装形態では、特定の信頼レベルで動作する処理回路が、より高いケイパビリティ信頼レベルを有するケイパビリティを利用しようとすることは、正しくない挙動であるとみなされ得る。
【0079】
ステップ215において、ケイパビリティチェックに合格したと判定される場合、次いで、ステップ225において、現在のモード信頼レベル及びケイパビリティ信頼レベルの両方に基づいて、信頼レベル生成ブロック160によって、アクセス要求に対する信頼レベルが判定される。その後、ステップ230において、アクセス要求は、アクセス要求に対する判定された信頼レベルと共にメモリアクセスチェック回路170に伝搬され、その結果、メモリアクセスチェック回路170は、アクセス要求に対するその示された信頼レベルに基づいて、アクセス許可チェックを実施することができる。
【0080】
図6Aは、例示的な一実装形態による、装置内に提供され得るケイパビリティ処理回路250を概略的に例示するブロック図であり、特に、ケイパビリティ処理回路250内に提供され得るいくつかの異なる構成要素を示す。ケイパビリティ処理回路は、装置内の別個の構成要素として提供され得るか、又は例示的な一実装形態では、処理回路内に統合され得る。
【0081】
ケイパビリティ処理回路250は、アクセス要求に対してケイパビリティチェック動作を実施するように配設された先に考察されるケイパビリティチェック回路33を含む。特に、ケイパビリティチェック動作は、ケイパビリティからのそのアクセス要求のために生成されたメモリアドレスが、そのケイパビリティによって識別された制約情報に基づいて許可されるかどうかを判定するために使用される。
【0082】
先の考察から明らかになるように、ケイパビリティは、ケイパビリティ信頼レベルを提供され得、例示的な一実装形態では、これは、ケイパビリティが生成されることを可能にするように、少なくとも特定の動作モードで動作するときに、制限された構築許可が処理回路に与えられることを可能にする。ケイパビリティの生成を可能にするために、ケイパビリティ生成回路255が提供され得、例示的な一実装形態では、ケイパビリティ生成回路255は、図6Bの流れ図によって示されるように動作するように配設され得る。したがって、ステップ265において、ケイパビリティ生成動作が要求されたかどうかが判定される。ケイパビリティが生成されることが所望されると判定されると、次いで、ステップ270において、現在のモード信頼レベル(すなわち、処理回路の現在の動作モードに関連付けられた信頼レベル)が閾値信頼レベルを超えるかどうかが判定され、超えない場合、ステップ275において、ケイパビリティ生成動作が不合格になる。これは、様々な方法で実装することができるが、例示的な一実装形態では、アボートプロセスの形態を採ることができる。代替的に、処理は、ケイパビリティ情報が生成されることを可能にするが、タグビットがクリアされ、したがって、無効ケイパビリティを生成するように進み得る。
【0083】
しかしながら、ステップ270において、現在のモード信頼レベルが閾値レベルを超え、したがって、処理回路によるケイパビリティの生成が原則として許可されると判定された場合、プロセスは、ステップ280に進み、そこで、必要なケイパビリティ情報が取得され、次いで、その情報を使用して、ケイパビリティが構築される。ケイパビリティ情報は、様々な方法で取得することができるが、例えば、ケイパビリティ生成要求によって識別されたメモリにおけるロケーションから検索することができる。更に、ステップ285において、有効なケイパビリティが生成された場合、ケイパビリティ信頼レベルが現在のモード信頼レベル未満に設定されることが確実にされる。この要件は、様々な方法で実施することができる。例えば、ケイパビリティ生成回路255は、ケイパビリティ信頼レベルが現在のモード信頼レベル未満である場合にのみ、生成されたケイパビリティ情報のタグビットを設定するように配設され得、そうでない場合には、タグビットは設定されず、無効なケイパビリティが生成される。代替的に、ケイパビリティ生成回路255は、生成されたケイパビリティのタグビットを常に設定するが、ステップ285で設定された条件が満たされるように、必要とされる場合、ケイパビリティ信頼レベルをデモートするように配設され得る。
【0084】
図6Bに示されるプロセスの使用を通して、処理回路は、少なくとも特定の動作モードにあるとき、ケイパビリティを作成することを可能にされることができるが、そうするときに、処理回路は、生成されたケイパビリティに対する関連付けられたケイパビリティ信頼レベルが処理回路の現在のモードレベル未満であるように制約され、したがって、その現在の動作モードの処理回路が、その現在の動作モードで使用され得るケイパビリティを生成することを防止する。
【0085】
ステップ270で評価される閾値信頼レベルは、様々な方法で設定することができ、例えば、機能を生成するケイパビリティの使用を、処理回路の可能なモード信頼レベルの1つ又は小さいサブセットに制限するために使用することができる。代替的に、そのようなケイパビリティ生成技法は、ケイパビリティを使用するときにサポートされる最低信頼レベル以外の任意のモード信頼レベルに対してサポートされ得る。
【0086】
図6Bは、特定の状況においてケイパビリティの生成を可能にするためにケイパビリティ生成回路255によって使用され得る1つの機構を例示するが、所望される場合、他の機構が使用され得る。例えば、ケイパビリティ生成動作が必要とされると判定されたとき、ケイパビリティ生成回路255は、現在のモード信頼レベルが、そのソースデータに関連して提供されたケイパビリティ信頼レベル指標を超える場合、指定されたソースデータからケイパビリティを生成することを可能にされ得る。そのような条件が満たされない場合、次いで、ケイパビリティ生成動作は、例えば、アボートを発行することによって、又は任意の生成されたケイパビリティのタグビットをクリアすることによって、不合格になる。
【0087】
図6Aに戻ると、ケイパビリティ処理回路250は、任意選択的に、ケイパビリティ生成回路255と相互作用し、処理回路上で実行されているプログラム内の制御フローの変化の発生時にケイパビリティを生成させることができる、制御フロー変化処理回路260を提供され得る。特に、処理回路は、プログラム命令を実行するように配設され得、プログラム命令の処理は、優勢なケイパビリティによって制約される。制御フロー変更動作が実施されるときに、制御フロー変更動作後に実行するためのプログラム命令のアドレスを示す目標アドレスが識別される。その制御フロー変更目標アドレスに依存して、ケイパビリティ生成回路255は、ケイパビリティ制約情報が記憶されているアドレスを識別し、その情報を検索し、次いで、そのケイパビリティ制約情報を使用して、次の優勢なケイパビリティとして使用するためのケイパビリティを生成するように配設され得る。そのような状況では、生成されたケイパビリティに対する関連付けられたケイパビリティ信頼レベルは、現在のモード信頼レベルよりも低い信頼レベルを示すように制約され得る。
【0088】
処理回路の現在のモード信頼レベルが、優勢なケイパビリティに関連付けられた信頼レベルによって更に制約され得ることにも留意されたい。そのような機構は、例えば、非特権機能がプログラムカウンタ値を生成するために使用されるときに、これが特権コードの実行を許可しないことを保証するために有用であり得る。
【0089】
図7は、システム内に存在し得る様々な異なるモード信頼レベルを概略的に例示する図であり、そのような配設においてサポートされ得るケイパビリティ生成能力を示す。図7に示されるように、処理回路は、セキュアドメイン及び低セキュアドメインにおいて動作するように配設され得、現在のモード信頼レベルは、現在のプログラムコードがそれらのセキュリティドメインのうちのいずれにおいて実行されるかに依存し得る。加えて、又は代替的に、処理回路は、複数の異なる状態でプログラムコードを実行するように配設され得、図7の例では、特権状態又は非特権状態でプログラムコードを動作させるように配設され得る。特権のレベル及び異なるセキュリティドメインは、直交信頼レベルであるとみなすことができ、処理回路の異なるモード信頼レベルは、セキュア/低セキュアドメイン及び特権/非特権状態の各組み合わせに関連付けられ得る。したがって、図7に示すように、示される例では、4つの異なる信頼レベルがあり得る。
【0090】
生成されるケイパビリティを可能にする先に説明した制限された構築権に関して、次いで、図7の矢印によって示されるように、処理回路がセキュアモード及び特権モードで動作しているとき、処理回路は、他の3つのより低い信頼レベル動作モードのいずれかのためのケイパビリティを生成することが可能であり得る。同様に、処理回路がより低セキュア特権モードで動作しているとき、処理回路には、それが低セキュア非特権モードのためのケイパビリティを生成することを可能にするために、制限された構築権が依然として与えられ得る。更に、所望される場合、処理回路がセキュアな非特権モードで動作しているとき、処理回路には、低セキュア非特権モードのためのケイパビリティを生成することを可能にするために、制限された構築権が依然として与えられ得る。
【0091】
図7は、4つの異なる信頼レベルを示すが、本明細書で説明される技法は、そのような構成に限定されず、図7に示される直交方向のいずれか又は両方で、追加の信頼レベルが提供され得ることが理解されよう。特権及び非特権モード動作は、様々な形態を採ることができるが、純粋に例として、特権モードは、いくつかの実装形態では、ハンドラモードと称され得、非特権モードは、スレッドモードと称され得る。ハンドラモードは、典型的には、例外処理のために使用され、したがって、例えば、信頼された例外処理ルーチンは、ハンドラモードで実行され得る。スレッドモードは、典型的には、複数の異なるスレッド、例えば、複数の異なるアプリケーションスレッドを実行するために使用される。
【0092】
メモリからケイパビリティレジスタ60、80のうちの1つにケイパビリティをロードするとき、処理回路は、特定の状況において、ケイパビリティ信頼レベルを選択的に修正するように配設され得、このアプローチの例示的な一実装形態が、図8Aに示される。ステップ300において、メモリからのケイパビリティのロードが要求されているかどうかが判定され、要求されている場合、ステップ305では、現在のモード信頼レベルが、メモリからロードされることになるケイパビリティ信頼レベル未満であるかどうかが判定される。そうでない場合、例示的な一実装形態では、プロセスはステップ310に進み、ケイパビリティは、ケイパビリティレジスタ内に修正されずに記憶される。
【0093】
しかしながら、図8Aに示される技法によれば、現在のモード信頼レベルがケイパビリティの信頼レベル未満である場合、プロセスはステップ315に進み、現在のモード信頼レベルがもはやケイパビリティの信頼レベル未満にならないように、ケイパビリティレジスタに記憶されているケイパビリティのコピーに関連付けられたケイパビリティの信頼レベルがデモートされる。そのようなアプローチによって、メモリからロードされているケイパビリティが、より高い関連付けられた特権レベルを有する場合であっても、処理回路のケイパビリティレジスタにロードされる結果として生じるケイパビリティは、現在のモード信頼レベルで動作するときに処理回路によってアクセスされるべきではないメモリにアクセスするために使用され得ないように、デモートされたそのケイパビリティの信頼レベルを有することが保証され得る。逆に、メモリにおけるケイパビリティが、現在のモード信頼レベルよりも低い信頼レベルを有する場合、その信頼レベルは、ケイパビリティレジスタに移動されるときに「そのまま」のままである。これは、ケイパビリティの偶発的なプロモーションを回避することができ、例えば、例外ハンドラがスタックされた値を偶発的にプロモーションさせる場合を回避することができる。
【0094】
例示的な一実装形態では、ケイパビリティロードプロセスは、特定の状況において、汎用データをケイパビリティではなくケイパビリティレジスタにロードするために使用されることが可能である。これは、ステップ300で検出することができ、実際にロード動作が汎用データをロードするために使用されている場合、ケイパビリティ内のケイパビリティ信頼レベルを指定するビットの選択的なデモーションを防止することができ、したがって、ロードされているデータの破損を回避することができる。
【0095】
図8Aのステップ315によって示されるように、ケイパビリティ信頼レベルを選択的にデモートする能力は、例えば、制御レジスタ90内に記憶された制御情報を条件とすることによって、構成可能にすることができる。ケイパビリティの選択的なデモーションは、特定のタイプのケイパビリティに対してディセーブルすることもでき、したがって、例えば、ロードされているケイパビリティが不変ケイパビリティであるときにディセーブルすることができる。そのような能力は、例えば、不変ケイパビリティを修正することなく、非特権動作モード内から特権不変ケイパビリティをスピルすることを可能にするために有益であり得る。更に、上述したように、メモリからロードされているケイパビリティの選択的なデモーションを条件付きでイネーブル又はディセーブルするために使用される制御情報は、制御レジスタに記憶することができるが、その制御情報は、他のロケーションに、例えば、ケイパビリティ自体内のフィールドとして、又は、例えば、MPU領域属性に基づくデモーションをイネーブルするように、記憶することもできる。この後者のアプローチでは、読み出し専用としてマークされたMPU領域(例えば、コードメモリ)からケイパビリティがロードされる場合、デモーションが発生するが、関連する領域が読み出し-書き込みとしてマークされる場合(例えば、ヒープ又はスタックメモリ)にはデモーションが発生しないように、機構を配設することができる。いくつかの実装形態では、MPUにおける専用制御ビットを使用して、挙動を指示することができる。
【0096】
図8Aは、メモリからケイパビリティレジスタにケイパビリティをロードするときに、ケイパビリティ信頼レベルを選択的にデモートするために使用され得る1つの機構を例示するが、所望の場合、他の機構が使用され得る。図8Bは、選択的デモーションが、ロードのためのメモリアドレスを生成するために使用されるケイパビリティのケイパビリティ信頼レベルに基づく代替的な機構を例示する。具体的には、図8Bに示すように、ステップ350において、メモリからのケイパビリティのロードが必要であると判定されるときに、次いで、ステップ355において、ロードされる機能のケイパビリティ信頼レベルが、ロードのためのメモリアドレスを生成するために使用されるケイパビリティのケイパビリティ信頼レベルを超えるかどうかが判定される。もしそうでなければ、ステップ360において、ケイパビリティは修正されずにケイパビリティレジスタに記憶されるが、もしそうである場合、ケイパビリティレジスタにロードされているケイパビリティのケイパビリティ信頼レベルは、その信頼レベルがロードのためのメモリアドレスを生成するために使用されるケイパビリティの信頼レベルをもはや超えないようにデモートされる。図8の先の考察と同様に、この選択的なデモーション機能は、制御情報を条件とすることができる。
【0097】
図8Bのプロセスは、図8Aのプロセスの代替例として使用することができるが、例示的な一実装形態では、両方のチェックが実行されるように技法が組み合わされる。したがって、ロードされているケイパビリティのケイパビリティ信頼レベルは、次いで、処理回路の現在の動作モードに関連付けられた現在のモード信頼レベル、及びロードのためのメモリアドレスを生成するために使用されるケイパビリティのケイパビリティ信頼レベルの最小値になるように選択的にデモートされることが理解されよう。
【0098】
図9は、例示的な一実装形態において、処理回路が、少なくとも特定の動作モードで、ケイパビリティのケイパビリティ信頼レベルを低減することをどのように可能にされ得るかを例示する流れ図である。ステップ400において、処理回路の現在のモード信頼レベルが閾値レベルを超えるかどうかが判定され、超えない場合、ステップ405において、処理回路によって実行される現在のプログラムコードは、ケイパビリティのケイパビリティ信頼レベルを低減することができない。逆に、現在のモード信頼レベルが閾値レベルを超えている場合、次いで、ステップ410において、処理回路上で実行されている現在のプログラムコードは、ケイパビリティのケイパビリティ信頼レベルを低減することができる。任意選択的に、この能力は、ケイパビリティ信頼レベルが現在のモード信頼レベルを超えないケイパビリティに制限することができる。
【0099】
図9では、ケイパビリティのケイパビリティ信頼レベルを低減する能力は、特定のモード信頼レベルに限定されるが、これは、要件ではなく、代替的な実装形態では、処理回路は、現在のモード信頼レベルにかかわらず、ケイパビリティ信頼レベルをデモートすることを許可され得る。
【0100】
例示的な一実装形態では、アクセスがケイパビリティを使用して制約されるケイパビリティモードに装置が入る前に、装置は、1つ以上の初期ケイパビリティを与えられ得る。典型的に、これらの初期ケイパビリティは、ケイパビリティモードで動作しているときに、装置によってサポートされた最高の信頼レベルを示すケイパビリティ信頼レベルを有するように設定することができる。これは、先で考察されるメモリからロードされたケイパビリティの選択的なデモーションを使用するとき、これが、例えば、処理回路の現在の動作モードに依存して、ケイパビリティレジスタにロードされるときに、必要とされる際に、それらの初期ケイパビリティのケイパビリティ信頼レベルが選択的にデモートされることを可能にするので、安全なアプローチである。
【0101】
初期ケイパビリティは、様々な方法で確立することができるが、図10に例示するように、例示的な一実装形態では、コンパイラ420を使用して、装置上で実行されるプログラムコードのコンパイル中に初期ケイパビリティを定義することができ、それらの生成された初期ケイパビリティは、初期ケイパビリティ425のリテラルプールとしてメモリ内に記憶される。
【0102】
先に述べたように、例示的な一実装形態では、初期ケイパビリティは全て、ケイパビリティモードで動作しているときに装置によってサポートされた最高の信頼ケイパビリティレベルを有するように設定され得るが、所望される場合、開発者は、より低い信頼ケイパビリティレベルを有する1つ以上のケイパビリティを作成することができる。例えば、開発者が、ケイパビリティが常に非特権であるべきであることを知っている場合(例えば、OS管理コードにおいて)、コンパイライントリンシックを使用して、静的データにおいて非特権としてマークされるケイパビリティを作成することができ、したがって、セキュリティが更に強化される。
【0103】
いくつかの例示的な実装形態では、ケイパビリティは、制約情報が不変であると識別される少なくとも1つの不変ケイパビリティを含み得る。典型的には、これは、処理回路が、ケイパビリティが確立されると制約情報を変更することができないことを意味する。しかしながら、図11の流れ図によって概略的に例示された1つの例示的な実装形態によれば、特定の状況において、選ばれた不変ケイパビリティの制約情報が修正されることを可能にすることが可能である。ステップ450において、不変ケイパビリティを修正する試みが行われているときが検出される。そのような状況では、次いで、ステップ455において、処理回路の現在のモード信頼レベルが不変ケイパビリティのケイパビリティ信頼レベルを超えているかどうかが判定される。そうでない場合、ステップ460において、修正が防止される。加えて、タグビットは、ケイパビリティがもはや有効ではないような状況においてクリアされ得る。
【0104】
しかしながら、ステップ455において、現在のモード信頼レベルが不変ケイパビリティのケイパビリティ信頼レベルを超えていると判定された場合、次いで、ステップ465において、不変ケイパビリティの修正が可能にされる。
【0105】
図11の機能は、全ての場合において可能にされ得るが、所望される場合、図11の機能を実行する能力は、例えば、処理回路の現在のモード信頼レベルが閾値レベルを超えるかどうかをチェックすることによって、更に制限され得る。
【0106】
更に、不変ケイパビリティの選択的な変更は、他の様式で処理することができ、図11に示すアプローチに限定されないことに留意されたい。例えば、一実装形態では、不変ケイパビリティの修正は一般的に可能にされ得るが、タグビットは、ステップ455の信頼基準のレベルが満たされない状況でクリアされ、したがって、ケイパビリティを事実上無効化する。更なる代替例として、修正が実施され得るが、必要な場合、ステップ455の信頼基準のレベルが満たされるように、修正された不変ケイパビリティのケイパビリティ信頼レベルがデモートされ得る。
【0107】
図12は、使用され得るシミュレータ実装形態を例示する。前述の例は、当該技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で本発明を実施するが、本明細書に記載の例による命令実行環境を提供することも可能であり、命令実行環境は、コンピュータプログラムの使用により実施される。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータ実装は、ホストプロセッサ515で実行し得、ホストプロセッサ515は、任意選択的に、ホストオペレーティングシステム510を実行し、ホストオペレーティングシステム510は、シミュレータプログラム505をサポートする。いくつかの配設では、ハードウェアと提供された命令実行環境との間に複数層のシミュレーションがあり得、かつ/又は、複数の異なる命令実行環境が同じホストプロセッサ上に提供され得る。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなど一定の状況では、正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬、USENIX Conference、第53~63頁に記載されている。
【0108】
例が、特定のハードウェア構築又は特徴を参照して前述されている程度に、シミュレーションされた実装では、同等の機能が、好適なソフトウェア構築又は特徴によって提供され得る。例えば、特定の回路は、シミュレーションされた実装では、コンピュータプログラムロジックとして提供され得る。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実装では、ソフトウェアデータ構造として提供され得る。また、ハードウェア装置2内のメモリ50にアクセスするために使用される物理アドレス空間は、シミュレートされたアドレス空間としてエミュレートされ得、シミュレートされたアドレス空間は、ホストオペレーティングシステム510によって使用される仮想アドレス空間に、シミュレータ505によってマッピングされている。前述の例で言及されているハードウェア要素のうち1つ以上がホストハードウェア(例えば、ホストプロセッサ515)に存在する配設では、いくつかのシミュレートされた実装は、好適である場合、ホストハードウェアを使用し得る。
【0109】
シミュレータプログラム505は、(非一時的媒体であり得る)コンピュータ読み取り可能な記憶媒体に記憶され得、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード500への仮想ハードウェアインタフェース(命令実行環境)を提供し、仮想ハードウェアインタフェースは、シミュレータプログラム505によってモデル化されたハードウェアアーキテクチャのハードウェアインタフェースと同じである。したがって、ターゲットコード500のプログラム命令は、シミュレータプログラム505を使用して命令実行環境内から実行され得、このため、上で考察される装置2のハードウェア特徴を実際には有しないホストコンピュータ515は、これらの特徴をエミュレートすることができる。シミュレータプログラムは、処理パイプライン4の挙動をエミュレートするための処理プログラムロジック520、ケイパビリティチェック回路33の挙動をエミュレートするためのケイパビリティチェックプログラムロジック522、及び図1のハードウェア装置2のメモリアクセスチェック回路52の挙動をエミュレートするためのメモリアクセスチェックプログラムロジック525を含み得る。したがって、ケイパビリティ及びそれらの関連付けられた信頼レベルを管理するための本明細書で説明される技法は、図12の例では、シミュレータプログラム505によってソフトウェアで実施され得る。
【0110】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配設又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0111】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本発明はそれらの正確な実施形態に限定されないこと、及び添付の特許請求の範囲によって規定される本発明の範囲及び趣旨から逸脱することなく、当業者によって様々な変更、追加、及び修正が当業者によって実施され得ることが理解されるであろう。例えば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴でなされ得る。
図1
図2
図3
図4
図5A
図5B
図6A
図6B
図7
図8A
図8B
図9
図10
図11
図12
【国際調査報告】