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

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

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

特表2023-512502ケイパビリティベースの処理のための装置及び方法
<>
  • 特表-ケイパビリティベースの処理のための装置及び方法 図1
  • 特表-ケイパビリティベースの処理のための装置及び方法 図2
  • 特表-ケイパビリティベースの処理のための装置及び方法 図3
  • 特表-ケイパビリティベースの処理のための装置及び方法 図4
  • 特表-ケイパビリティベースの処理のための装置及び方法 図5
  • 特表-ケイパビリティベースの処理のための装置及び方法 図6
  • 特表-ケイパビリティベースの処理のための装置及び方法 図7
  • 特表-ケイパビリティベースの処理のための装置及び方法 図8
  • 特表-ケイパビリティベースの処理のための装置及び方法 図9
  • 特表-ケイパビリティベースの処理のための装置及び方法 図10
  • 特表-ケイパビリティベースの処理のための装置及び方法 図11
  • 特表-ケイパビリティベースの処理のための装置及び方法 図12
  • 特表-ケイパビリティベースの処理のための装置及び方法 図13
  • 特表-ケイパビリティベースの処理のための装置及び方法 図14
  • 特表-ケイパビリティベースの処理のための装置及び方法 図15
  • 特表-ケイパビリティベースの処理のための装置及び方法 図16
  • 特表-ケイパビリティベースの処理のための装置及び方法 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-03-27
(54)【発明の名称】ケイパビリティベースの処理のための装置及び方法
(51)【国際特許分類】
   G06F 9/32 20180101AFI20230317BHJP
   G06F 12/14 20060101ALI20230317BHJP
【FI】
G06F9/32 320A
G06F12/14 510D
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022544370
(86)(22)【出願日】2020-12-02
(85)【翻訳文提出日】2022-08-17
(86)【国際出願番号】 GB2020053093
(87)【国際公開番号】W WO2021156589
(87)【国際公開日】2021-08-12
(31)【優先権主張番号】2001688.7
(32)【優先日】2020-02-07
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.JAVASCRIPT
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】スミス、ブラッドリー ジョン
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】ボトマン、フランソワ クリストファー ジャック
【テーマコード(参考)】
5B017
5B033
【Fターム(参考)】
5B017AA01
5B017BA01
5B017BB06
5B017CA01
5B033CA03
5B033FA27
(57)【要約】

装置は、それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサを備え、プロセッサが、制御フロー変更動作を実施するための制御フロー変更処理回路であって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路と、ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成回路と、を備え、ケイパビリティ生成回路が、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている。
【選択図】図9

【特許請求の範囲】
【請求項1】
装置であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサであって、前記プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサを備え、
前記プロセッサが、
制御フロー変更動作を実施するための制御フロー変更処理回路であって、前記制御フロー変更動作が、前記制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路と、
ケイパビリティアクセス許可データが記憶されているアドレスを前記制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成回路と、を備え、
前記ケイパビリティ生成回路が、前記ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくとも前記ケイパビリティアクセス許可データに応じて生成するように構成されている、装置。
【請求項2】
次の優先ケイパビリティとして使用するための前記ケイパビリティが、前記制御フロー変更動作の後に実行するための1つ以上の命令の処理を制約するように構成されている、請求項1に記載の装置。
【請求項3】
各ケイパビリティが、ポインタと、メモリアドレスの前記セットに対するアクセス許可を定義するデータと、を少なくとも含み、
前記ケイパビリティ生成回路が、前記制御フロー変更目標アドレスに応じて前記ポインタを生成し、かつメモリアドレスの前記セットに対するアクセス許可を定義する前記データを前記ケイパビリティアクセス許可データに応じて生成するように構成されている、
請求項1又は2に記載の装置。
【請求項4】
前記ケイパビリティアクセス許可データが、(i)アクセスが許可される前記1つ以上のメモリアドレスを含むアドレス領域の下限メモリアドレス、(ii)前記アドレス領域の上限メモリアドレス、及び(iii)前記アドレス領域に適用可能な許可属性のセット、のうちの1つ以上を定義する、請求項1~3のいずれか一項に記載の装置。
【請求項5】
前記ケイパビリティアクセス許可データが、メモリアドレスの前記セットに対するアクセス許可を定義する情報が記憶されている位置を定義する、請求項1~3のいずれか一項に記載の装置。
【請求項6】
前記制御フロー変更動作に応答して、前記プロセッサが、前記次の優先ケイパビリティとして使用するために前記ケイパビリティを生成することが前記ケイパビリティ生成回路に要求されることを示すために、ステータスインジケータを設定するように構成されている、請求項1~5のいずれか一項に記載の装置。
【請求項7】
前記ステータスインジケータの設定に応答して、前記プロセッサが、優先ケイパビリティによる制約とは独立に、前記制御フロー変更目標アドレスにおいて少なくとも前記第1の命令をフェッチ及び/又は実行するように構成されている、請求項6に記載の装置。
【請求項8】
前記プロセッサが、前記次の優先ケイパビリティとして使用するための前記ケイパビリティの生成に応答して、前記ステータスインジケータを、プログラム命令の処理が優先ケイパビリティによって制約されることを示す状態にクリアするように構成されている、請求項6又は請求項7に記載の装置。
【請求項9】
前記プロセッサが、処理中の例外事象に応答して、例外復帰事象の処理に際して取得するために前記ステータスインジケータを記憶するように構成されている、請求項6~8のいずれか一項に記載の装置。
【請求項10】
前記制御フロー変更動作の後に実行するための前記1つ以上の命令が、前記制御フロー変更目標アドレスにおいて命令を少なくとも含む、請求項2又は請求項2に従属する請求項3~5のいずれか一項に記載の装置。
【請求項11】
前記制御フロー変更処理回路が、ケイパビリティアクセス許可データが記憶されている前記アドレスを前記制御フロー変更目標アドレスに先行するメモリアドレスとして決定するように構成されている、請求項1~10のいずれか一項に記載の装置。
【請求項12】
前記制御フロー変更動作が、
分岐命令の実行に応答した分岐動作と、
分岐及びリンク命令の実行に応答した分岐及びリンク動作であって、前記分岐及びリンク動作が、復帰アドレスケイパビリティを記憶し、前記復帰アドレスケイパビリティが、前記分岐及びリンク命令の前記命令アドレス、並びに前記分岐及びリンク命令が実行されたときに使用する前記優先ケイパビリティに応じて生成される分岐及びリンク動作と、のうちの一方である、請求項1~11のいずれか一項に記載の方法。
【請求項13】
前記分岐命令が、前記分岐命令の命令アドレスからの差分を示す値によって少なくとも前記制御フロー変更目標アドレスを定義する動作コードを含む、請求項12に記載の装置。
【請求項14】
前記分岐命令が、前記制御フロー変更目標アドレスを示す値を含むレジスタを識別する少なくともレジスタ識別子を定義する動作コードを含む、請求項12に記載の装置。
【請求項15】
前記制御フロー変更動作が、処理中の例外処理ルーチンに対する制御フローの変更を定義する、請求項1~13のいずれか一項に記載の装置。
【請求項16】
前記プロセッサが、処理されることになる前記例外処理ルーチンに関連付けられた番号に応じて、メモリ内のベクトルテーブルのエントリを識別するように構成されており、前記エントリの少なくとも一部が、前記制御フロー変更目標アドレスを示す、請求項15に記載の装置。
【請求項17】
前記エントリの少なくとも一部が、前記例外処理ルーティングが、優先ケイパビリティによる制約とは独立に処理されるべきかどうかを示す、請求項16に記載の装置。
【請求項18】
前記制御フロー変更動作が、例外処理ルーチンを処理することから復帰するための例外復帰動作を含む、請求項1~11のいずれか一項に記載の装置。
【請求項19】
方法であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行することであって、前記プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、実行することと、
制御フロー変更動作を実施することであって、前記制御フロー変更動作が、前記制御フロー変更動作の後に実行するためのプログラム命令の前記アドレスを示す制御フロー変更目標アドレスを定義する、実施することと、
ケイパビリティアクセス許可データが記憶されているアドレスを前記制御フロー変更目標アドレスに応じて決定することと、
前記ケイパビリティアクセス許可データを取得することと、
次の優先ケイパビリティとして使用するためのケイパビリティを少なくとも前記ケイパビリティアクセス許可データに応じて生成することと、を含む方法。
【請求項20】
命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサロジックであって、前記プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサロジックを備え、
前記プロセッサロジックが、
制御フロー変更動作を実施するための制御フロー変更処理ロジックであって、前記制御フロー変更動作が、前記制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理ロジックと、
ケイパビリティアクセス許可データが記憶されているアドレスを前記制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成ロジックと、を備え、
前記ケイパビリティ生成ロジックが、前記ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくとも前記ケイパビリティアクセス許可データに応じて生成するように構成されている、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
注意
本発明は、Defense Advanced Research Projects Agency(DARPA)によって授与された契約番号HR001118C0016に基づいて政府支援によって行われた。政府は、本発明について一定の権利を有する。
【背景技術】
【0002】
本開示は装置及び方法に関する。
【0003】
データ処理装置のいくつかの例は、いわゆるケイパビリティ(capability)データによってメモリアクセスが決定されるプロセスを処理する。いくつかの例では、ポインタが、特定のアクセス制限及び/又は許可を表すためにメタデータで拡張される。
【0004】
そのような構成の例は、「CHERI:A Hybrid Capability-System Architecture for Scalable Software Compartmentalization」、2015 IEEE Symposium on Security and Privacy、17-21 May 2015、ISBN978-1-4673-6949-7で論じられており、その内容は参照によって本明細書に組み込まれる。
【0005】
第1のコード部分から第2のコード部分への制御フロー変更(分岐などであるが、例外処理などの他の例にも適用可能である)の場合、ケイパビリティによって与えられるセキュリティ機能を効率的に利用するために、第1のコード部分の実行に適用可能な第1のケイパビリティが、第1のコード部分に対するアクセスを可能にするはずであるので、制御フロー変更を実施するために、(第2のコード部分に対するアクセスを可能にする)第2のケイパビリティを変更する必要がある。
【0006】
これを達成する一方法は、第2のケイパビリティを定義するために使用するデータを、例えば、第1のコード部分のリテラルデータとして記憶することである。そして、これは、制御フロー変更を実施するための少なくとも2つの動作、すなわち、データをロードして、それを新たなケイパビリティとして適用するための動作、及び制御フロー変更自体を実施するための動作を必要とする。
【発明の概要】
【0007】
例示的な構成では、装置であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサを備え、プロセッサが、
制御フロー変更動作を実施するための制御フロー変更処理回路であって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路と、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成回路と、を備え、
ケイパビリティ生成回路が、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている、装置が提供される。
【0008】
別の例示的な構成では、方法であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行することであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、実行することと、
制御フロー変更動作を実施することであって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、実施することと、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定することと、
ケイパビリティアクセス許可データを取得することと、
次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成することと、を含む方法が提供される。
【0009】
別の例示的な構成では、命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサロジックであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサロジックを備え、プロセッサロジックが、
制御フロー変更動作を実施するための制御フロー変更処理ロジックであって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理ロジックと、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成ロジックと、を備え、
ケイパビリティ生成ロジックが、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている、コンピュータプログラムが提供される。
【0010】
本技術の更なるそれぞれの態様及び特徴が、添付の特許請求の範囲によって定義される。
【図面の簡単な説明】
【0011】
添付図面に示されるそれらの実施形態を参照して、あくまで一例として本技術を更に説明する。
図1】データ処理装置を概略的に示す。
図2】有界ポインタを概略的に示す。
図3】ケイパビリティレジスタの使用を概略的に示す。
図4】ケイパビリティフィールドのセットを概略的に表す。
図5】制御フロー変更動作を概略的に示す。
図6】ケイパビリティアクセス許可データを記憶するためのオプションを概略的に示す。
図7】ケイパビリティアクセス許可データを記憶するためのオプションを概略的に示す。
図8】制御フロー変更処理回路の概略図を提示する。
図9】ケイパビリティ生成回路の例を概略的に示す。
図10】ケイパビリティの生成のためのそれぞれの例を概略的に示す。
図11】ケイパビリティの生成のためのそれぞれの例を概略的に示す。
図12】ケイパビリティの生成の一例を示す概略タイムラインである。
図13】制御フロー変更処理回路の別の例の概略図を提示する。
図14】ケイパビリティの生成の別の例を示す概略タイムラインである。
図15】制御フロー変更の別の例を概略的に示す。
図16】方法を示す概略フローチャートである。
図17】シミュレータ実装形態を概略的に示す。
【発明を実施するための形態】
【0012】
添付図面を参照して実施形態を検討する前に、以下の実施形態を説明する。
【0013】
例示的な実施形態は、装置であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサを備え、プロセッサが、
制御フロー変更動作を実施するための制御フロー変更処理回路であって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路と、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成回路と、を備え、
ケイパビリティ生成回路が、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている、装置を提供する。
【0014】
例示的な構成では、制御フロー変更のための呼び出しコード部分にケイパビリティ情報を提供する代わりに、制御フロー変更目標アドレスに関して定義されたアドレスに、適切なケイパビリティ情報が提供され、この情報は、制御フロー変更動作の後に実行するための1つ以上の命令の処理を制約するように構成されたケイパビリティとして使用するために、ケイパビリティを構成又は生成することを可能にする。これは、有利には、ケイパビリティデータを一度だけ記憶することを可能にし、制御フロー変更におけるケイパビリティのより効率的な変更を提供することができる。
【0015】
(全てではないが)いくつかの例では、制御フロー変更目標アドレスは、制御フロー変更動作の後に実行するための次のプログラム命令のアドレスを示し得る。他の例では、分岐が必ずしも直ちに実施されないように、1つ以上のいわゆる分岐遅延スロットを使用し得る。いくつかのそのような例では、分岐命令に次いで実行される命令は、メモリ内で分岐の後の命令だけであり、必ずしも分岐の目標アドレスにおける命令ではない。単一の分岐遅延スロットを使用する場合、制御は、メモリ内で分岐の後の命令の後に分岐先アドレスに移動する。
【0016】
いくつかの例では、目標アドレスに関して、新たなケイパビリティの一部のみを記憶する必要がある。例えば、各ケイパビリティが、ポインタと、メモリアドレスのセットに対するアクセス許可を定義するデータとを少なくとも含む状況では、ケイパビリティ生成回路は、制御フロー変更目標アドレスに応じてポインタを生成し、かつメモリアドレスのセットに対するアクセス許可を定義するデータをケイパビリティアクセス許可データに応じて生成するように構成され得る。他の例では、目標アドレスに関して、ケイパビリティの全体が記憶され得る。
【0017】
例では、ケイパビリティアクセス許可データは、(i)アクセスが許可される1つ以上のメモリアドレスを含むアドレス領域の下限メモリアドレス、(ii)アドレス領域の上限メモリアドレス、及び(iii)アドレス領域に適用可能な許可属性のセットのうちの1つ以上を定義する。他の例では、ケイパビリティアクセス許可データは、メモリアドレスのセットに対するアクセス許可を定義する情報が記憶されている位置を定義する。
【0018】
いくつかの例では、フロー変更後の(少なくとも)第1の命令の実行は、新たなケイパビリティの生成と並行して(又は少なくとも一部が重なり合うように)実施され得る。そのような状況では、制御フロー変更動作に応答して、プロセッサは、次の優先ケイパビリティとして使用するためにケイパビリティを生成することがケイパビリティ生成回路に要求されることを示すために、ステータスインジケータを設定するように構成され得る。ステータスインジケータの設定に応答して、プロセッサは、優先ケイパビリティによる制約とは独立に、制御フロー変更目標アドレスにおいて少なくとも第1の命令をフェッチ及び/又は実行するように構成され得る。
【0019】
ステータスインジケータは、新たなケイパビリティが準備されるとクリアされ得、その場合、プロセッサは、次の優先ケイパビリティとして使用するためのケイパビリティの生成に応答して、ステータスインジケータを、プログラム命令の処理が優先ケイパビリティによって制約されることを示す状態にクリアするように構成され得る。介在する例外の場合に、このステータスを維持及び回復することを可能にするために、いくつかの例では、プロセッサは、処理中の例外事象に応答して、例外復帰事象の処理に際して取得するために、ステータスインジケータを記憶するように構成されている。
【0020】
他の例では、新たなケイパビリティの生成は、第1の命令の実行のために必要となる前に完了し得、この場合、制御フロー変更動作の後に実行するための1つ以上の命令は、制御フロー変更目標アドレスにおいて命令を少なくとも含む。
【0021】
いくつかの例では、第1の命令は、目標アドレスにあることができ、その場合、制御フロー変更処理回路は、ケイパビリティアクセス許可データが記憶されているアドレスを、制御フロー変更目標アドレスに先行するメモリアドレスとして決定するように構成されている。
【0022】
いくつかの例では、制御フロー変更動作は、分岐命令の実行に応答した分岐動作であり、分岐命令の命令アドレスからの差分を示す値を動作コード内に符号化することによって少なくとも制御フロー変更目標アドレスを定義する動作コードを含み得る。他の例では、動作コードは、制御フロー変更目標アドレスを示す値を含むレジスタを識別する少なくともレジスタ識別子を定義し得る。
【0023】
他の例では、制御フロー変更動作は、分岐及びリンク命令の実行に応答した分岐及びリンク動作であり得、その場合、分岐及びリンク動作は、復帰アドレスケイパビリティを記憶し得、復帰アドレスケイパビリティは、分岐及びリンク命令の命令アドレス、並びに分岐及びリンク命令が実行されたときに使用する優先ケイパビリティに応じて生成される。
【0024】
他の例では、分岐動作の代わりに(又はそれに加えて)、制御フロー変更動作は、処理中の例外処理ルーチンに対する制御フローの変更を定義し得る。そのような場合、プロセッサは、プロセッサが、処理されることになる例外処理ルーチンに関連付けられた番号に応じて、メモリ内のベクトルテーブルのエントリを識別するように構成され得、エントリの少なくとも一部は、制御フロー変更目標アドレスを示し、エントリの少なくとも一部は、優先ケイパビリティによる制約とは独立に、例外処理ルーチンが処理されるべきかどうかを示し得る(例えば、ベクトルテーブルは、目標アドレスだけを示すことができ、例外ハンドラがケイパビリティを使用するかどうかの問題は他の場所で決定することができ、例えば、ケイパビリティを常に使用してもよく、又は全ての例外がどのように処理されるかを制御する単一の構成ビットが存在してもよい。)。制御フロー変更動作の更なる例は、そのような例外処理ルーチンの処理から復帰するための例外復帰動作を含む。
【0025】
別の例示的実施形態は、方法であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行することであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、実行することと、
制御フロー変更動作を実施することであって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、実施することと、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定することと、
ケイパビリティアクセス許可データを取得することと、
次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成することと、を含む方法を提供する。
【0026】
別の例示的実施形態は、命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサロジックであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサロジックを備え、プロセッサロジックが、
制御フロー変更動作を実施するための制御フロー変更処理ロジックであって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理ロジックと、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成ロジックと、を備え、
ケイパビリティ生成ロジックが、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている、コンピュータプログラムを提供する。
【0027】
装置の概要
ここで図面を参照すると、図1は、命令を処理するための処理パイプライン4を備えるデータ処理装置又はプロセッサ2の例を概略的に示す。この例では、処理パイプライン4は、フェッチステージ6、復号ステージ8、発行ステージ10、実行ステージ又は処理要素12、及びライトバックステージ14を含む、多数のパイプラインステージを含むが、他のタイプのステージ又はステージの組み合わせが提供されてもよいことが理解されるであろう。例えば、レジスタリネームを実施するためのリネームステージが、いくつかの実装形態に含まれ得る。処理されることになる命令がステージからステージに移動し、ある命令が、1つのステージで保留中である間に、別の命令が、パイプライン4の異なるステージで保留中であり得る。
【0028】
フェッチステージ6は、レベル1(L1)命令キャッシュ20から命令をフェッチする。フェッチステージ6は通常、連続する命令アドレスから逐次的に命令をフェッチし得る。しかし、フェッチステージは、分岐命令の結果を予測するための分岐予測器22も有し得、フェッチステージ6は、分岐が行われると予測される場合に(非逐次的な)分岐先アドレスから、又は分岐が行われないと予測される場合に次の逐次アドレスから命令をフェッチすることができる。分岐予測器22は、ある分岐が行われる可能性が高いかどうかを予測するための情報を記憶するための1つ以上の分岐履歴テーブルを含み得る。例えば、分岐履歴テーブルは、従前に実行された分岐の実際の結果を追跡するための、又は分岐のために行われた予測の信頼度を表すためのカウンタを含み得る。分岐予測器22は、分岐命令の従前の目標アドレスを、同じ分岐命令に後で遭遇した際に、それらが予測され得るように、キャッシュするための分岐先アドレスキャッシュ(BTAC)24も含み得る。命令キャッシュ20及び分岐予測器22のような特徴が、(回路面積が重要となる低性能の実施形態などの)他の実施形態では存在しない場合があることが理解されるであろう。
【0029】
フェッチされた命令は、命令を復号して復号された命令を生成する復号ステージ8に渡される。復号された命令は、実行ステージ12を制御して適切な処理動作を実行するための制御情報を含み得る。キャッシュ20からフェッチされたいくつかのより複雑な命令に対して、復号ステージ8は、それらの命令を復号された複数の命令(マイクロオペレーション(μop又はuop)として知られ得る)にマッピングし得る。それゆえに、L1命令キャッシュ20からフェッチされた命令と、パイプラインの後のステージで見られる命令との間に1対1の関係が存在しない場合がある。一般に、本出願における「命令」に対する参照は、マイクロオペレーションを含むものと解釈されるべきである。
【0030】
復号された命令は、発行ステージ10に渡され、これは、命令の実行に必要なオペランドが利用可能であるかどうかを判定し、オペランドが利用可能である場合に実行のための命令を発行する。いくつかの実装形態は、L1命令キャッシュ20から命令がフェッチされたプログラム順序に対応する順序での実行のための命令が発行されるように、インオーダ処理をサポートし得る。他の実装形態は、プログラム順序とは異なる順序で実行ステージ12に命令を発行できるようにアウトオブオーダ実行をサポートし得る。アウトオブオーダ処理は、先の命令がオペランド待ちの間停止させられている間に、そのオペランドが利用可能である、プログラム順序では後の命令を先に実行できるため、性能向上に有用であり得る。他の実施形態では、性能を犠牲にして、発行ステージ10を他のステージと組み合わせたり、完全に省略したりしてもよいことが理解されるであろう。
【0031】
発行ステージ10は、様々なデータ処理動作を実施するために命令が実行される実行ステージ12に命令を発行する。例えば、実行ステージは、整数値に算術演算又は論理演算を行うための算術/論理ユニット(ALU)30、浮動小数点形式で表された値に演算を行うための浮動小数点(FP)ユニット32、制御フロー変更動作を実施するための制御フロー変更処理ユニット又は回路33(一例では、このユニットが、分岐動作の実際の結果を決定する分岐命令実行ユニットの機能を具現化する)、及びレベル1(L1)データキャッシュ36から汎用データレジスタ40のセット内のレジスタにデータ値をロードするためのロード動作、又は汎用データレジスタ40のセット内のレジスタからL1データキャッシュ36にデータ値を記憶するための記憶動作を行うためのロード/記憶ユニット34を含む、いくつかの実行ユニット30、32、33、34を含み得る。これらは、提供され得る実行ユニットのタイプのほんのいくつかの例であり、多くの他の種類が提供されてもよいことが理解されるであろう。他の実施形態では、レベル1データキャッシュ36は存在しなくてもよく、ロード/記憶ユニット34は、メモリに直接アクセスしてもよい。処理動作を行うために、実行ステージ12は、レジスタ40のセットからデータ値を読み取り得る。次いで、実行された命令の結果は、ライトバックステージ14によってレジスタ40にライトバックされ得る。
【0032】
例外処理回路9については、以下で更に論じる。
【0033】
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からフェッチすることができる。キャッシュ階層を管理するために、任意の既知のスキームを使用し得る。
【0034】
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであり得るが、少なくともメインメモリ50、並びに任意選択的に、少なくともいくつかのレベルのキャッシュ階層及び/又は少なくともいくつかのレベルのメモリ50も、物理的にアドレス指定され得る。それゆえに、パイプライン4によって使用される仮想アドレスを、メモリ管理ユニット(MMU)53の制御の下で、キャッシュ又はメモリにアクセスするために使用される物理アドレスに変換するためのトランスレーション・ルックアサイド・バッファ52(TLB)が提供され得る。例えば、TLB52は、仮想アドレス空間の対応するページの仮想ページアドレス(「VPA」)と、対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスがマッピングされるべき対応する物理ページアドレス(「PPA」)とをそれぞれに指定する、多数のエントリを含み得る。例えば、仮想ページアドレス及び物理ページアドレスは、対応する仮想アドレス及び物理アドレスの最上位部分に対応し得、仮想アドレスを物理アドレスにマッピングするときに残りの最下位部分は変化しないままである。アドレス変換情報と同様に、各TLBエントリは、アドレスのあるページがパイプライン4のあるモードでアクセス可能であるかどうかを示すような、アクセス許可を指定するいくつかの情報(「許可」)も含み得る。いくつかの実装形態では、TLBエントリは、読み取り又は書き込み動作に応答して更新されるレベルのキャッシュ階層を定義するキャッシュポリシー情報など、アドレスの対応するページの他の特性(例えば、キャッシュがライトバックモードで動作するべきか、若しくはライトスルーモードで動作するべきか)、又は対応するページ内のアドレスに対するデータアクセスを、パイプライン4によって発行されたデータアクセスの順序と比較して、メモリシステムによって再順序付けできるかどうかを定義する情報を定義することもできる。他の実施形態では、MMU53及びTLB52は、存在しない場合があり、データ処理装置2によって実行される命令は、物理アドレスに直接アクセスし得る。そのような実施形態では、代わりに、アクセス許可及びキャッシュポリシー情報が、物理メモリ内のアドレス範囲に関する情報を指定するレジスタを含むメモリ保護ユニット(MPU)54によって提供され得る。
【0035】
図1は、単一レベルのTLB52を示しているが、変換の階層がMMU53によって提供されてもよく、かつ/又は、レベル1(L1)TLB52が最近アクセスされたページのいくつかのアドレスを変換するためのTLBエントリを含み得、かつレベル2(L2)TLBがより多くのページのエントリを記憶するために提供され得るように、複数のTLBが提供されてもよいことが理解されるであろう。必要なエントリがL1TLBに存在しなければ、それをL2TLB、又は階層内の更なるTLBからフェッチすることができる。代替的に、いわゆる中間物理アドレス(IPA)を使用して、第1の変換が仮想アドレスからIPAへとなり、第2のレベルの変換がIPAから物理アドレスへとなるようにしてもよい。このようにして、複数のレベルのアドレス変換を使用することができ、例えば、第1のTLB(又はTLB階層)を使用して仮想アドレスを中間アドレスに変換し得、かつ1つ以上の更なるTLBを使用する第2のレベルのアドレス変換が、中間アドレスを、キャッシュ又はメモリにアクセスするために使用する物理アドレスに変換し得る。これは、例えば、第1のレベルのアドレス変換がオペレーティングシステムによって管理され得、第2のレベルのアドレス変換がハイパーバイザによって管理され得る、仮想化をサポートするのに有用であり得る。
【0036】
図1では、図を明確にするために、単一ステージ及び単一レベルのTLB52が示されている。
【0037】
アクセスされるページのために必要なエントリがいずれのTLBにもなければ、メモリ50内のいわゆるページテーブルにアクセスするために、MMU53によってページテーブルウォークを実施することができる。本技術では、任意の既知のTLB管理スキームを使用することができる。
【0038】
いくつかの例では、実行ステージ12は、1つ以上の処理スレッドを実行するマルチスレッド処理要素によって実装することができる。
【0039】
図1に示すように、装置2は、有界ポインタレジスタ60のセットを有し得る。有界ポインタレジスタのセットは、汎用データレジスタ40のセットとは物理的に別個のものとして図1に示しているが、一実装形態では、汎用データレジスタと有界ポインタレジスタの両方を提供するために同じ物理的ストレージを使用し得る。
【0040】
各有界ポインタレジスタ60は、アクセスされることになるデータ値のアドレスを決定するために使用し得るポインタ値62と、対応するポインタ62を使用するときのアドレスの許容範囲を指定する範囲情報64とを含む。有界ポインタレジスタ60は、ポインタの使用に関する1つ以上の制限/許可を定義し得る制限情報66(許可情報とも呼ばれる)も含み得る。有効性タグ(例えば、64ビット有界ポインタレジスタの場合の65番目のビット、又は128ビット有界ポインタの場合の129番目のビット)を使用して、(a)有効な有界ポインタが記憶されているかどうか、及び(b)範囲と許可メタデータが有効であるかどうかを示すことができる。タグは、適切なケイパビリティ設定命令に応答してハードウェアによってのみ設定することができ、少なくともいくつかの例では、有効なケイパビリティに対する不法な書き込みの試みに応答して自動的に削除される。
【0041】
例えば、制限66は、ポインタ62を使用し得る命令のタイプ、又はポインタを使用し得るパイプライン4のモードを制限するために使用することができる。それゆえに、範囲情報64及び制限情報66は、その中でそれぞれのポインタ62の使用が許可されるケイパビリティC-CM-1を定義すると考えられ得る。定義されたケイパビリティ外でポインタ62を使用する試みが行われると、エラーをトリガすることができる。
【0042】
範囲情報64は、例えば、ポインタがある既知の境界内に留まり、かつセンシティブな情報又はセキュアな情報を含む可能性があるメモリアドレス空間の他の領域に迷い込まないことを確実にするために、有用であり得る。汎用データレジスタと有界ポインタレジスタの両方に同じ物理的ストレージを使用する実装形態において、一実装形態では、ポインタ値62は、例えば、対応する汎用レジスタのために使用されるのと同じ記憶位置内に記憶され得る。
【0043】
図2は、データ又は命令に対する不正アクセスから保護するために許容範囲が使用される命令のタイプの例を示す。図2の上部に示すように、特定の有界ポインタレジスタPR1が、所与のポインタ値62と、この例では、許容範囲の下側境界を定義する下側境界アドレス68及び許容範囲の上側境界を定義する上側境界アドレス69を使用して指定される、範囲情報64とを含む。例えば、境界68、69は、80000~81000のアドレス範囲を定義するように設定される。ある命令が有界ポインタレジスタPR1を参照し、ポインタ62から決定されたアドレスがこの範囲外である場合に、エラーがトリガされ得る。様々な異なるフォーマットで境界を表せることが理解されるであろう。例えば、上側境界及び下側境界は、ポインタ値に対して、かつ/又は浮動少数点表示で表現することができる。そのようなフォーマットは、上限アドレス情報及び下限アドレス情報の「生の」サイズに対して境界情報のサイズを小さくすることを可能にし得、言い換えれば、上限アドレス及び下限アドレスを依然として定義しながら、境界情報をより効率的に(より少ないビットを使用して)表現し得る。
【0044】
例えば、図2の部分Aに示すように、いくつかのシステムでは、ポインタレジスタ60内のポインタ62の値を、範囲情報64によって指定された範囲外にある値(ここでは、ポインタがアドレスを直接指定すると仮定する)に設定する試みがある場合、エラーがトリガされ得る。これは、ポインタを使用するアクセスが許容範囲内に間違いなくあることを確実にできるように、ポインタ62が指定範囲外の値を取ることが回避させる。代替的に、図2の部分Bに示すように、命令が、ポインタ62のアドレスによって識別された位置へのアクセスを試み、そのアドレスが指定範囲外にあるときに、エラーをトリガすることができる。それゆえに、ポインタ62を指定範囲外の値に設定することは許容できるが、ポインタアドレス(又はポインタから導き出されたアドレス)のデータアクセスが試みられ、アドレスが許容範囲外にある場合、エラーがトリガされ得る。他のシステムは、図2の部分A及びBに示す両方の命令のタイプに応答してエラーをトリガし得る。
【0045】
範囲情報64は、異なる方法で設定することができ、それを設定する方法は、実装詳細であり、本技術は、使用する特定の方法に依存しない。純粋に例として、特権命令、ユーザ空間コード、セキュリティコード、又はオペレーティングシステム若しくはハイパーバイザが、所与のポインタに対して許可された範囲を指定し得る。例えば、命令設定アーキテクチャは、所与のポインタ62の範囲情報64を設定又は修正するためのいくつかの命令を含み得、これらの命令の実行は、あるソフトウェア又はプロセッサ2のあるモード若しくは例外状態に制限することができる。範囲情報64を設定又は修正するための任意の既知の技術を使用することができる。
【0046】
ポインタを参照するある命令を実行するときに実行ステージ12で使用し得る有界ポインタ記憶要素60のセットに加えて、命令がレベル1命令キャッシュ20からフェッチされるときに、フェッチステージ6で同様の機能を提供するためにプログラムカウンタケイパビリティ(PCC)レジスタ80も使用し得る。具体的には、プログラムカウンタポインタをフィールド82に記憶し得、PCC80は、有界ポインタ記憶要素60のセット内のポインタの各々に提供される範囲及び制限情報と同様の、範囲情報84及び任意の適切な制限情報86も提供する。図1は、デフォルトデータケイパビリティ(DDC)レジスタ90及びシステムアクセスケイパビリティ(SAC)レジスタ95も概略的に示しており、両方について以下で論じる。いくつかの実施形態では、全てのデータアクセスが、有界ポインタ記憶要素60に記憶されたケイパビリティによって直接制約され得、よって、デフォルトデータケイパビリティレジスタ60が必要ない場合があることが理解されるであろう。同様に、システムアクセスケイパビリティレジスタ65は、本開示に必須でなく、いくつかの実施形態では存在しない場合がある。
【0047】
図3は、個々のデータブロックがケイパビリティ(すなわち、有界ポインタ及び関連付けられた制限情報)を表すか、又は通常データを表すかを識別するために、それらのデータブロックに関連して上述したタイプのタグビットがどのように使用されるかを概略的に示している。具体的には、メモリアドレス空間110は、指定されたサイズを典型的に有する一連のデータブロック115を記憶する。純粋に例示のために、この例では、各データブロックが128ビットを含むことが想定される。各データブロック115に関連して、一例では、タグビットと呼ばれる単一ビットフィールドであるタグフィールド120が提供され、これは、関連付けられたデータブロックが有効なケイパビリティを表すことを識別するために設定され、関連付けられたデータブロックが通常データを表し、それゆえにケイパビリティとして取り扱えないことを示すためにクリアされる。設定又はクリア状態に関連付けられた実際の値は、実装形態に応じて変化し得るが、純粋に例示のために、例示的な一実装形態では、タグビットが1の値を有する場合に、関連付けられたデータブロックがケイパビリティであることを示し、それが0の値を有する場合に、関連付けられたデータブロックが通常データを含むことを示すことが理解されるであろう。
【0048】
図3に示すケイパビリティレジスタ100などの、有界ポインタレジスタ60(ケイパビリティレジスタとも呼ばれる)のうちの1つにケイパビリティがロードされるとき、タグビットは、ケイパビリティ情報と共に移動する。したがって、ケイパビリティレジスタ100にケイパビリティがロードされた場合、ポインタ102、範囲情報104及び制限情報106(以下、許可情報と呼ぶ)がケイパビリティレジスタにロードされることになる。加えて、そのケイパビリティレジスタに関連して、又はその内の特定のビットフィールドとして、タグビット108は、コンテンツがケイパビリティを表すことを識別するために設定されることになる。同様に、ケイパビリティがメモリからストアバックされた場合、関連するタグビット120は、ケイパビリティが記憶されているデータブロックに関連して設定される。そのようなアプローチにより、ケイパビリティと通常データを区別し、それゆえに、通常データがケイパビリティとして使用できないことを確実にする。
【0049】
ケイパビリティ
ここで、ケイパビリティについてより詳細に論じる。
【0050】
上位アプリケーションは、JAVAやJavaScriptなどの「安全な」制約された実行環境で実行するように構成することができるが、システムの下層は、一般にハードウェア上での実際の実行に対するリンクを提供しなければならない。結果として、そのような層のほぼ全ては、現在、典型的には数千万ラインの信頼できる(ただし、当てにならない)コードからなるC/C++プログラミング言語で書かれている。
【0051】
悪意のある攻撃に対してより強い固有の耐性を与える、基礎となるアーキテクチャを提供することが目的である。ケイパビリティは、そのような戦略の一部を提供することができる。
【0052】
ケイパビリティデータタイプは、アーキテクチャ的に定義された1つ以上のリソースにアクセスするための権限の委任可能なトークンを表す。ケイパビリティは、大きく3つのタイプに分類される。
1)データ転送及び命令フェッチのためにメモリ範囲に対するアクセスを許可するために使用されるメモリケイパビリティ
2)あるシステム動作に対するアクセスを許可するために使用するシステムアクセスケイパビリティ
3)他のケイパビリティをオブジェクトタイプと共にカプセル化するために使用するシール用ケイパビリティ
【0053】
各ケイパビリティは、多数の論理フィールドを含み、それらのいくつかは、あるケイパビリティタイプにのみ存在する。そのようなフィールドの例を図4に概略的に示す。
【0054】
ケイパビリティレジスタは、ケイパビリティを保持し、かつケイパビリティが汎用メモリに保持されているときにケイパビリティ特性が強いられるように、メモリシステムの拡張機能を定義するために使用される。命令は、メモリからケイパビリティをロード及び記憶し、メモリ内のデータ及びケイパビリティにアクセスするためにケイパビリティレジスタを使用し、ケイパビリティを使用して分岐し、ケイパビリティレジスタに保持されたケイパビリティを新たな権利を成立させずに操作する、ために提供することができる。
【0055】
ケイパビリティの使用による制限は、既存のMMU又はMPU及び例外レベルベースの制限によって強いられる制限に加えられる。ケイパビリティの使用は、それらのメカニズムによって既に与えられた保護を弱めることがないように構成することができる。
【0056】
周囲ケイパビリティ(Ambient Capabilities)
周囲ケイパビリティを定義する1つ以上(例えば3つ)の周囲ケイパビリティレジスタが提供され得る。これらの機構を使用して、ケイパビリティ拡張の周囲効果を、各例外レベルで有効にし、また無効にすることができる。例外レベルにおいて周囲効果を有効にすることは、周囲ケイパビリティレジスタの効果を有効にし、レベルに対する例外エントリ及び復帰の挙動を修正し、アドレス上で本来動作するいくつかの既存の命令の挙動が修正する。いくつかの例では、3つの周囲ケイパビリティレジスタが提供される。
【0057】
(a)プログラムカウンタケイパビリティ(PCC)レジスタ
これは、命令フェッチの使用を制限する。PCCの境界及び許可は、ケイパビリティ分岐及び復帰命令を使用して、例外エントリ及び復帰に際して更新され得る。
【0058】
(b)デフォルトデータケイパビリティ(DDC)レジスタ
PCCは、プログラムカウンタに対するデータアクセスに影響を与える。他のデータアクセスが、デフォルトデータケイパビリティの暗黙的な使用によるか、又はベースレジスタとしてのケイパビリティの明示的な使用によるかのいずれかで制限される。
【0059】
(c)システムアクセスケイパビリティ(SAC)レジスタ
システムレジスタ及びシステム動作に対するアクセスを、SACレジスタに保持された許可によって制限することができる。
【0060】
制御フロー変更動作
図5は、制御フロー変更動作の例を概略的に示す。
【0061】
この第1の例では、制御フロー変更動作は、(分岐命令の実行に応答した)分岐動作であり、分岐命令500、510が、それぞれの第1の(又は「呼び出し」)コード部分505、515から、目標又は「呼び出し先」コード部分520の始まり(又はその内の他の所定の位置)を示す制御フロー変更目標アドレス522へのプログラムフローの変更を引き起こす。
【0062】
いくつかの例では、分岐命令は、分岐命令の命令アドレスからの差分を示す値によって少なくとも制御フロー変更目標アドレスを定義する動作コードを含み得る。他の例では、分岐命令は、制御フロー変更目標アドレスを示す値を含むレジスタを識別する少なくともレジスタ識別子を定義する動作コードを含み得る。
【0063】
いくつかの例では、コード部分520が実行されると、制御は、呼び出しコード部分又は元のコード部分(505、場合によっては515)に復帰し得る。この後者の機能は、いくつかの例では、いわゆるリンク付き分岐動作を使用することによって実装され得、この動作では、元のコードへの復帰アドレス(実際、いくつかの実施形態では、分岐命令の後の次の命令アドレス)が保持され、例えば、制御フロー変更動作の一部として、復帰アドレスが、汎用データレジスタ40のセット内のスタックデータ構造又はリンクレジスタに記憶され得る。いくつかの実施形態では、復帰アドレスは、復帰アドレスに加えて、元のコードの上の優先ケイパビリティとして使用するためのケイパビリティを含む、復帰アドレスケイパビリティであり得る。復帰ケイパビリティは、リンク付き分岐動作が実施された時点で使用されていた優先ケイパビリティから導き出され得る。
【0064】
図5の例では、可能な2つの初期コード部分505、515が示されている。実際、任意の数の分岐命令が、コード部分520へのリダイレクトを引き起こし得、それらのうちの2つを図5に示す理由は、共通の目標又は宛先を有する分岐命令の複数のインスタンスが存在し得ることを単に示すためである。
【0065】
コード部分505の実行は、例えばコード部分505の全体を包含する、メモリアドレスの第1の範囲508に対する、プログラム命令の処理のためのアクセス許可を与える第1の優先ケイパビリティに従って実施される。同様に、コード部分515は、メモリアドレス518に対するアクセスを与えるケイパビリティによって定義される制約の下で処理される。しかし、コード部分520のプログラム命令、すなわち、制御フロー変更動作の後に実行される命令、を実行するために、コード部分520を含むメモリアドレスへのアクセス許可を与える(新たな又は次の優先ケイパビリティとしての)異なるケイパビリティ528が必要である。
【0066】
これを達成するための従前に提案された技術は、分岐命令500、510に関連付けられた命令を実行して、呼び出しコード部分505、515内に記憶されたデータをそれぞれのケイパビリティレジスタにロードすることであった。そのようなデータは、いわゆるリテラルデータとして、例えば、それぞれのコード部分の終わり(描かれているように下部分)に記憶され得る。しかし、これは、追加の命令を必要とする場合があり、呼び出し機能の可能な各インスタンスにおいて記憶空間も必要とする。そのような技術は、分岐の目標アドレスが決定され得る前にケイパビリティをロードしなければならないため、性能上のボトルネックを作り出す場合もある。これにより、目標コード部分520での命令の実行が遅くなる場合がある。制御フロー変更動作の別の例は、例外を対象とする。例外エントリの制御フロー変更動作のための目標アドレスを決定するための既存の技術は、入力されている例外の番号によってインデックス化されたアドレステーブルを有することである。そのようなテーブルへのインデックス化を可能にするために、そのようなシステムは、典型的にはテーブルの全てのエントリが同じサイズであることを必要とする。ケイパビリティ例外ハンドラの使用をサポートするプロセッサ2では、これは、例え例外ハンドラの大部分がケイパビリティを使用しない場合でも、テーブル内の全てのエントリが、ケイパビリティを記憶するのに十分なほど大きくなければならないことを意味する場合がある。このことが意味する無駄な空間は、典型的に非常に少ないメモリを有する小さな埋め込みプロセッサ又は多数の例外ハンドラを有するシステムでは重要となる場合がある。
【0067】
以下で論じる例示的な構成では、各可能な呼び出しコード部分にそれぞれ個々のコピーを記憶するのではなく、ケイパビリティアクセス許可データが記憶されているアドレスが制御フロー変更目標アドレスに応じて決定され、ケイパビリティアクセス許可データが取得され、次の優先ケイパビリティとして使用するためのケイパビリティが、少なくともケイパビリティアクセス許可データに応じて生成される。実施形態では、生成されたケイパビリティは、次の優先ケイパビリティとして導入又は別様に確立される。いくつかの例では、呼び出し先コードの第1の命令から実施される。他の例では、その間に、呼び出し先コードの1つ以上の第1の命令が、優先ケイパビリティとは独立に処理され得る。
【0068】
優先ケイパビリティとしてのPCC
(以下で論じる)アーキテクチャの観点から、制御フロー変更動作は、
・新たに生成されたケイパビリティを得ることと、
・そのケイパビリティへの分岐を行うことで、PCCをそのケイパビリティに設定することと、
・新たなPCC値が次の命令をフェッチすることを可能にするかどうかをチェックし、可能にされる場合にのみフェッチすることと、を含み得る
【0069】
したがって、これらの例では、優先ケイパビリティによる制約に対する参照は、特定のコード部分の実行に関連付けられたケイパビリティデータに応答したPCCの設定に関する。
【0070】
分岐予測、投機的処理、及び/又はアウトオブオーダ処理に関する留意事項
例示的な実施形態では、ケイパビリティは、フェッチされることになるアドレスにアクセスするための許可が存在するかどうかを判定するために、命令フェッチにおいてチェックされる。存在しなければ、例外又は欠陥が開始され得る。
【0071】
未定義命令を指示する無効なケイパビリティへの分岐を伴う仮想例では、命令フェッチが起きる前にケイパビリティがチェックされれば、(ただし、PCCケイパビリティチェックが実行時間で生じた場合に)「未定義命令欠陥」ではなく、「無効ケイパビリティ欠陥」が予期される。
【0072】
しかし、図1に示す例では、分岐予測器22は、分岐先アドレス(又は実際には別の制御フロー変更目標アドレス)に関する命令が、分岐が決定される前のステージ(時間)でフェッチされ得るように、フェッチプロセスを監視する。
【0073】
他の例では、命令は、ここでも、アドレスに関するケイパビリティが所定の位置にある前に、それらのアドレスから命令が物理的にフェッチされ得るように、アウトオブオーダで実行され得る。他の例では、パイプライン、キャッシュ及び他の技術が、一般に処理の効率を改善する目的で、命令を処理する物理的な様式を変更し得る。
【0074】
これらの状況を両立させるために、命令の処理を提供する実際の物理的回路と、プロセッサ及び命令の処理に関する挙動を定義する命令セットアーキテクチャとの間の相違が留意される。
【0075】
命令セットアーキテクチャは、インオーダプロセッサ、アウトオブオーダプロセッサ、投機的若しくは予測的なフェッチ又は実行を伴うプロセッサ及び伴わないプロセッサ、パイプラインを伴うプロセッサ及び伴わないプロセッサなどによる、共通の命令セットの処理を提供することができる。最終結果及びマシンの結果の全体は、各ケースで同じであり、内部処理の効率が異なり得るのみである。
【0076】
アーキテクチャの観点から、次の命令がさらにフェッチされる前に各命令が完全に実行される。
【0077】
(例えば、パイプライン、スーパースカラ及び/又はアウトオブオーダ実行によって)命令の処理にいくらかの時間的な重なりを導入するプロセッサの場合、そのような回路の役割は、上述したアーキテクチャ状況に適用可能なものと完全に同等の結果を提供することにある。
【0078】
同様に、任意の形態の投機的処理が提供される場合、投機された状態は、アーキテクチャ要件に準拠することを可能にするのに必要な限り維持される(これは、欠陥状況を投機的なものとして維持することを含み得る)。
【0079】
例えば、マイクロアーキテクチャ又は物理的構造は、欠陥の結果を投機された状態に保持することによって、アーキテクチャに従って動作の錯覚(illusion)を維持し得、次いで、コミットされたアーキテクチャ状態が、投機的な欠陥が起きた時点に到達すれば、欠陥は、投機的な欠陥から実際の欠陥に移され、実際に採用される。他方で、別の事象が、(例えば分岐ミス予測の場合)アーキテクチャ状態を異なる方向に動かせば、投機的な欠陥を生じさせた事象がそもそも発生すべきではなかったので、保留中である投機的な欠陥はフラッシュされる。
【0080】
したがって、本開示の範囲から逸脱することなく、パイプライン及び投機的実行などの確立された技術が当業者によって実施され得ることが当業者によって理解されるであろう。
【0081】
ケイパビリティアクセス許可データの記憶
図6及び図7は、制御フロー変更動作で示されるアドレス600(例えば分岐先アドレス)に関するケイパビリティアクセス許可データを制御フロー変更目標アドレスとして記憶するためのいくつかのオプションを概略的に示す。図6では、アドレス600は、制御フロー変更動作の後に実行される第1の命令610の位置を示しており、(図6及び図7では網掛けで示す)ケイパビリティアクセス許可データ620は、アドレス600の直前に記憶されている。例えば、ケイパビリティアクセス許可データ620が32ビット長である場合、それは、アドレス600の直前の32ビットのメモリに記憶される。
【0082】
したがって、図6の例では、制御フロー変更動作の後に実行するための1つ以上の命令は、制御フロー変更目標アドレスにおいて命令を少なくとも含む。
【0083】
図7では、ケイパビリティアクセス許可データ700は、アドレス600に記憶されており、制御フロー変更動作の後に実行されることになる第1の命令710(命令710)は、記憶されたケイパビリティアクセス許可データ700の直後にある。この場合も、ケイパビリティアクセス許可データ620が32ビット長である例では、第1の命令710は、アドレス700の32ビット後のアドレスに記憶される。
【0084】
したがって、図7の例では、制御フロー変更処理回路は、ケイパビリティアクセス許可データが、制御フロー変更目標アドレスにおいてメモリアドレスとして記憶されているアドレスを決定するように構成されている。
【0085】
制御フロー変更処理
図8は、制御フロー変更ハンドラ800及びケイパビリティ生成回路810を備える、図1で述べたような制御フロー変更処理回路33の概略図を提示する。
【0086】
図8のケイパビリティ生成回路810の例を概略的に示す図9を参照すると、制御フロー変更目標アドレス900(分岐先アドレスなど)がアドレス検出器910によって検出され、これに応答して、アドレス検出器910は、ケイパビリティアクセス許可データ(ケイパビリティメタデータ)の位置を決定する。この決定は、図7の例の「制御フロー変更目標アドレスに等しいアドレス」ほど単純であったり、図6の例の「アドレス900から所定の差分でオフセットされたアドレス」、例えば、「アドレス900マイナス32ビット」であったりしてもよい。
【0087】
メタデータのアドレスの決定に応答して、メタデータローダ920が、ケイパビリティアクセス許可データ930をロードする。ケイパビリティ生成器940が、ケイパビリティを生成する。この動作の例については、図10及び図11を参照して後述するが、いくつかの例では、ケイパビリティ生成器940は、ロードされたメタデータ930及び目標アドレス900を連結して、任意選択的にタグと共に、記憶回路960によってケイパビリティ950として記憶される有効なケイパビリティを生成し得る。例えば、記憶回路960は、生成されたケイパビリティ960をPCC80に記憶し得る。生成されたケイパビリティ950は、例えば、制御フロー変更動作の後に実行するための1つ以上の命令の処理を制約するために、次の優先ケイパビリティとして使用するために提供される。
【0088】
ケイパビリティ生成
図10を参照すると、ケイパビリティ1000が、メタデータ930と目標アドレス900から導き出されたポインタ935との連結としてケイパビリティ生成器940によって構成されている。これが有効なケイパビリティであることを示すタグビット1010が、ケイパビリティ生成回路940によって追加され得る(有効な命令に応答するハードウェアの制御の下で、タグビットの記憶が可能になることに留意されたい)。
【0089】
図11では、メタデータ930は、連結の後に、得られたケイパビリティ1100がタグビットを含んで記憶されるように、タグビット1020を含む。
【0090】
図10及び図11の例のいずれかでは、制御フロー変更目標アドレス900から導き出されたポインタとの連結は、ケイパビリティアクセス許可データが定形のケイパビリティよりも小さくなることができ、ケイパビリティのポインタ部分自体によって表されない一部を提供することのみを必要とすることを意味することに留意されたい。本例では、これは、ケイパビリティアクセス許可データが、(この例では)65ビットであるケイパビリティのフルサイズではなく、32(又は33)ビットのみであり得ることを意味する。したがって、この技術を使用して記憶容量の潜在的な節約がある。ケイパビリティメタデータ930は、コード部分520毎に一度だけ記憶され得るので、コード部分が複数の位置、例えば図5の500及び510、から呼び出される場合、記憶空間の追加の節約があり得る。
【0091】
したがって、これらの例では、各ケイパビリティは、ポインタと、メモリアドレスのセットに対するアクセス許可を定義するデータと、を少なくとも含み、ケイパビリティ生成回路は、制御フロー変更目標アドレスに応じてポインタを生成し、かつメモリアドレスのセットに対するアクセス許可を定義するデータをケイパビリティアクセス許可データに応じて生成するように構成されている。
【0092】
いくつかの例では、ケイパビリティアクセス許可データは、(i)アクセスが許可される1つ以上のメモリアドレスを含むアドレス領域の下限メモリアドレス、(ii)アドレス領域の上限メモリアドレス、及び(iii)アドレス領域に適用可能な許可属性のセット、のうちの1つ以上を定義する。しかし、他の例では、ケイパビリティアクセス許可データが、代わりにメモリアドレスのセットに対するアクセス許可を定義する情報が記憶されている位置を定義してもよいことに留意されたい。
【0093】
次の優先ケイパビリティの生成に関するタイミング
図12図14は、上述した方法でのケイパビリティの生成に関するタイミング考慮事項に関係する。
【0094】
図12は、アーキテクチャの観点からの概略タイムライン(命令が実行されたか、実行されていないかのいずれかで表示され、かつ描かれたような垂直線によって命令間の境界が概略的に示されるように、命令実行がアトミックである)であり、時間は、左から右に経過1200し、ケイパビリティアクセス許可データからのケイパビリティの生成の一例を示している。(先に論じたような)パイプライン及びアウトオブオーダ実行などの共通のマイクロアーキテクチャ技術が、事象の実際の順序を変更し得るが、そのような技術は、図12に示すアーキテクチャ的な順序の錯覚を維持することが理解されるであろう。
【0095】
概略ブロック1210が、(例えば、制御フロー変更動作の後に実行するための1つ以上の命令の処理を制約するために)次のケイパビリティを生成するために実施されるプロセスを表し、概略ボックス1220が、制御フロー変更動作の後の第1の命令の実際の処理を表す。制御フロー変更動作自体は、タイムライン上の概略ボックス1230で示されている。
【0096】
図12の例では、新たなケイパビリティの生成が、制御フロー変更動作の後に第1の命令を処理するために必要となる前に完了し、そのため、新たに生成されたケイパビリティによって定義される制約に関してその命令が処理され得る。
【0097】
図13を参照すると、制御フロー変更動作の後の第1の命令(又は他の例では所定の数の第1の命令)を、優先ケイパビリティによる制約とは無関係にフェッチとする及び/又は実行することを可能にする、別のオプションが概略的に示されている。この例では、図8の制御フロー変更処理ユニットは、以下で論じるように、制御フロー変更ハンドラ800によって生成され得るステータスインジケータを記憶するためにストレージ1300によって補足される。
【0098】
いくつかの例では、制御フロー変更動作に応答して、プロセッサ(例えば制御フロー変更ハンドラ800)は、次の優先ケイパビリティとして使用するためのケイパビリティを生成することがケイパビリティ生成回路810に要求されることを示すために、ステータスインジケータを設定するように構成されている。設定されたステータスインジケータに応答して、プロセッサは、優先ケイパビリティによる制約とは独立に、制御フロー変更目標アドレスにおいて少なくとも第1の命令をフェッチ及び/又は実行するように構成されている。この技術の使用にかかわらず、いくつかの例示的な実施形態では、そのような命令は依然として、新たなケイパビリティの制約内で実行され得るが、ステータスインジケータの使用は、その命令の少なくとも命令フェッチを、ケイパビリティが利用可能になる前に進めることを可能にできることに留意されたい。そして、次のケイパビリティが生成されていることを示すケイパビリティ生成回路からの信号に応答して、プロセッサ(例えば制御フロー変更ハンドラ800)は、プログラム命令の処理が優先ケイパビリティによって制約されることを示す状態にステータスインジケータをクリアするように構成されている。
【0099】
図14は、図12のタイムラインの別のバージョンを(再びアーキテクチャの観点から)示すが、この例では、制御フロー変更動作の開始1400の後に、少なくとも第1の命令の実行1410は、新たなケイパビリティ、すなわち、制御フロー変更動作の後に実行するための1つ以上の命令の処理を制約するケイパビリティの生成1420と重複する様式で(ステータスインジケータ1300によって定義された条件の下で)進行することができる。
【0100】
例外処理の例
図15は、アーキテクチャの観点から制御フロー変更の別の例を概略的に示す。ここで、再び時間が左から右に経過し、分岐動作1500が、それぞれの矢印で示す時刻に起きる。分岐動作は、制御フロー変更動作の一例を形成する。
【0101】
矢印1510で示す時間に、プロセッサ割り込み又は他の例外事象が起きる。これにより、例えば、例外又は割り込み処理ルーチン1530への点線1520の垂直上昇で示すように、プログラムフローが変更される。この更なるプログラムフローの変更は、図15の例では、元の制御フロー変更動作が実施された後に第1の命令を実行する前に起きる。これを達成するために、時刻1510の前のプロセッサ状態情報が、例えば、プロセッサスタックにプッシュされることによって記憶される。分岐動作後に実行するための1つ以上の命令の処理を制約する新たに生成されたケイパビリティに関して、
(a)例えば動作1505として、(図12の場合と同様に)分岐動作後に実行するための関連命令を処理する前にケイパビリティが生成される場合、新たに生成されたケイパビリティは、例外事象処理からの復帰1540に際して取得及び使用するために、スタックなどに記憶及び/又はプッシュされ得る。この場合、元の制御フロー変更動作の後の、(元の制御フロー変更動作と同じコンテキスト/スレッドにおける)第1の命令の実行1560が、そのケイパビリティによって定義された制約の下で実施され、又は
(b)(図14の実施形態と同様に)ステータスインジケータ1300を使用する実施形態では、このインジケータは、動作1505に応答して設定され、例えばプロセッサ状態情報の一部として、スタックにプッシュもされる。割り込みハンドラからの復帰1540に際して、プロセッサ状態情報が取得され、新たなケイパビリティの生成1550と、元の制御フロー変更動作の後の第1の命令の実行1560の両方が開始される。
【0102】
ステータスフラグは、新たなケイパビリティの生成及び(この例では)第1の命令の実行の終了時の時刻1570でクリアされ得る。
【0103】
これらの例では、制御フロー変更動作はまた(又は他の例では代わりに)処理中の例外処理ルーチンに対する制御フローの変更及び/又は例外処理ルーチンを処理することから復帰するための例外復帰動作を定義し得る。
【0104】
図15のステージ1510に対応する)例外処理ルーチンへの分岐を開始する例示的な一方法は、以下のとおりである。各例外「タイプ」は、関連付けられた番号又はインデックスを有する。例としては、リセット、システムコール例外、割り込み要求、様々なタイプの欠陥などが挙げられ得る。各例外タイプは、例外状況を示す外部条件又は内部条件に応答して、例外処理回路9(図1)によって生成される関連付けられた番号(例えば0~15)を有する。例外事象に応答して、プロセッサは、処理されることになる例外処理ルーチンに関連付けられた番号に応じて、メモリ内の「ベクトルテーブル」のエントリを識別するように構成されており、エントリの少なくとも一部が、制御フロー変更目標アドレスを示す。次いで、制御フロー変更ハンドラ800は、上で論じた技術を使用して、その制御フロー変更目標アドレスへのプログラムフローの変更を制御する。上で論じたように、これは、例外復帰動作の処理に際して取得するために、優先プロセッサステータス情報を、例えばプロセッサスタックに、保存することを伴うことができる。これは、上述したように、例外復帰事象の処理に際して取得するためにステータスインジケータ1300を記憶することを含むことができる。
【0105】
いくつかの例では、ベクトルテーブルのエントリの少なくとも一部が、優先ケイパビリティによる制約とは独立に、例外処理ルーチンを処理するべきかどうかを示す。この指示が設定されれば、(a)プロセッサは、優先ケイパビリティにかかわらずに、指示に際して例外処理ルーチンを実行するように動作し、任意選択的に、(b)ケイパビリティ生成回路は、例外処理ルーチンに関して使用するためのケイパビリティを生成することを試みさえしない。
【0106】
装置機能の概要
より詳細に上述した技術を使用することで、図1は、装置の例であって、装置が、それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサを備え、プロセッサが、制御フロー変更動作を実施するための制御フロー変更処理回路33であって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理回路と、ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成回路810とを備え、ケイパビリティ生成回路が、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている、装置の例を提示する。例では、次の優先ケイパビリティとして使用するためのケイパビリティは、制御フロー変更動作の後に実行するための1つ以上の命令の処理を制約するように構成されている。
【0107】
方法概要
図16は、例示的な方法であって、
(ステップ1600で)それぞれのメモリアドレスに記憶されたプログラム命令を実行することであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、実行することと、
(ステップ1610で)制御フロー変更動作を実施することであって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、実施することと、
(ステップ1620で)ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定することと、
(ステップ1630で)ケイパビリティアクセス許可データを取得することと、
(ステップ1640で)次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成することと、を含む例示的な方法を示す概略フローチャートである。
【0108】
例示的なシミュレータ実装形態
図17は、上で論じた装置及び/又は方法のシミュレーションを実施するために使用し得るシミュレータ実装形態を示す。
【0109】
前述した実施形態は、当該技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して本技術を実装するが、コンピュータプログラムを使用して実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。
【0110】
このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的に、シミュレータの実装形態は、シミュレータプログラム1710をサポートするホストオペレーティングシステム1720を任意選択で実行して、ホストプロセッサ1730で実行し得る。いくつかの構成では、ハードウェアと提供された命令実行環境との間に複数の層のシミュレーションがあってもよく、及び/又は、同じホストプロセッサ上に提供された複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行するシミュレータ実装を提供するために必要とされてきたが、そのような手法は、ある状況において、例えば、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるときに、正当化され得る。例えば、シミュレータ実装は、ホストプロセッサハードウェアによってサポートされていない追加の機能を有する命令実行環境を提供してもよく、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬 USENIX Conference、53~63頁に記載されている。
【0111】
これまで、特定のハードウェア構成又は機能を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、適切なソフトウェア構成又は機能によって同等の機能を提供することができる。例えば、特定の回路は、シミュレーションされた実施形態において、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実施形態でソフトウェアのデータ構造として実装されてもよい。前述の実施形態で参照されているハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ1730)に存在する構成では、いくつかのシミュレーションされた実施形態は、適する場合、ホストハードウェアを使用してもよい。
【0112】
シミュレータプログラム1710は、(非一時的媒体であってもよい)コンピュータ読み取り可能な記憶媒体に記憶されてもよく、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)目標コード1700に対する仮想ハードウェアインタフェース(命令実行環境)を提供し、仮想ハードウェアインタフェースは、シミュレータプログラム1710によってモデル化されたハードウェアアーキテクチャのインタフェースと同じである。よって、上述した機能を含む、目標コード1700のプログラム命令は、シミュレータプログラム1710を使用する命令実行環境内から実行されてもよく、それによって、上で論じた装置のハードウェア機能を実際には有していないホストコンピュータ1730が、これらの機能をエミュレートすることができる。
【0113】
そのようなコンピュータプログラムは、命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムの例であって、
それぞれのメモリアドレスに記憶されたプログラム命令を実行するためのプロセッサロジックであって、プログラム命令の処理が、1つ以上のメモリアドレスのセットに対する少なくともアクセス許可を定義する優先ケイパビリティによって制約される、プロセッサロジックを備え、プロセッサロジックが、
制御フロー変更動作を実施するための制御フロー変更処理ロジックであって、制御フロー変更動作が、制御フロー変更動作の後に実行するためのプログラム命令のアドレスを示す制御フロー変更目標アドレスを定義する、制御フロー変更処理ロジックと、
ケイパビリティアクセス許可データが記憶されているアドレスを制御フロー変更目標アドレスに応じて決定するためのケイパビリティ生成ロジックと、を備え、
ケイパビリティ生成ロジックが、ケイパビリティアクセス許可データを取得し、かつ次の優先ケイパビリティとして使用するためのケイパビリティを少なくともケイパビリティアクセス許可データに応じて生成するように構成されている、コンピュータプログラムの例を提供する。
【0114】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイス(上で論じたような処理要素など)が、機能を実行するようにプログラムされてもよい。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0115】
本技術の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本技術はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される技術の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができることを理解されたい。例えば、従属請求項の特徴の様々な組み合わせは、本技術の範囲から逸脱することなく、独立請求項の特徴によって作製され得る。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
【国際調査報告】