(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-23
(54)【発明の名称】タグチェック装置及び方法
(51)【国際特許分類】
G06F 12/14 20060101AFI20230616BHJP
G06F 12/0895 20160101ALI20230616BHJP
【FI】
G06F12/14
G06F12/0895 100
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022570248
(86)(22)【出願日】2021-05-27
(85)【翻訳文提出日】2022-12-22
(86)【国際出願番号】 GB2021051291
(87)【国際公開番号】W WO2021240160
(87)【国際公開日】2021-12-02
(32)【優先日】2020-05-29
(33)【優先権主張国・地域又は機関】EP
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ブレイムリー、ジェイコブ ポール
(72)【発明者】
【氏名】コウヴェリ、ジョージア
(72)【発明者】
【氏名】ケープウェル、マーティン
(72)【発明者】
【氏名】ラングロワ、ピエール デニス ミシェル
【テーマコード(参考)】
5B017
5B205
【Fターム(参考)】
5B017AA07
5B017BA09
5B017BB06
5B017CA01
5B205NN31
5B205VV01
5B205VV12
(57)【要約】
装置は、ターゲットアドレスに応答するタグチェック回路であって、1つ以上のメモリ位置のブロックであって、ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別し、ガードタグ及びターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行し、タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行する、タグチェック回路と、を有する。装置はまた、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を記憶する、タグマッピング記憶回路を有する。タグチェック回路は、タグマッピング記憶回路により記憶されたマッピング情報に基づいて、ガードタグ及びアドレスタグの少なくとも一方をリマッピングして、タグチェックにおいて使用するためのリマッピングされたタグを生成する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
装置であって、
ターゲットアドレスに応答するタグチェック回路であって、
1つ以上のメモリ位置のブロックであって、前記ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別し、
前記ガードタグ及び前記ターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行し、
前記タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行する、
タグチェック回路と、
ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を記憶する、タグマッピング記憶回路と、
を備え、
前記タグチェック回路は、前記タグマッピング記憶回路により記憶された前記マッピング情報に基づいて、前記ガードタグ及び前記アドレスタグの少なくとも一方をリマッピングして、前記タグチェックにおいて使用するためのリマッピングされたタグを生成するように構成されている、
装置。
【請求項2】
前記タグチェック回路は、前記アドレスタグをリマッピングするように構成されており、前記リマッピングされたタグは、リマッピングされたアドレスタグである、
請求項1に記載の装置。
【請求項3】
前記タグチェック回路は、前記ガードタグをリマッピングするように構成されており、前記リマッピングされたタグは、リマッピングされたガードタグである、
請求項1に記載の装置。
【請求項4】
前記リマッピングされたタグは、前記アドレスタグ及び前記ガードタグのうちの前記少なくとも一方よりも長い、請求項1~3のいずれか一項に記載の装置。
【請求項5】
前記タグチェック回路は、前記ターゲットアドレスを指定するメモリアクセス要求に応答して前記タグチェックを実行するように構成されており、前記メモリアクセス要求は、複数のアクセスタイプのうちの1つを有し、
所与のガードタグ値と所与のアドレスタグ値との間のマッピングを提供するマッピング情報の所与の項目について、前記タグチェック回路は、メモリアクセス要求の前記複数のアクセスタイプのうちのどれが、前記メモリアクセス要求の前記アドレスタグが前記所与のアドレスタグ値を指定するときに、前記所与のガードタグ値を有するガードタグに関連付けられたブロック内のメモリ位置にアクセスすることを許可されるかを限定するように構成されている、
請求項1~4のいずれか一項に記載の装置。
【請求項6】
前記マッピング情報は、複数のリマッピングされたタグ値フィールドを指定し、
前記タグチェック回路は、前記ガードタグ及び前記アドレスタグのうちの前記少なくとも一方の値に基づいて、前記複数のリマッピングされたタグ値フィールドのうちの1つを選択し、前記選択されたリマッピングされたタグ値フィールド内で指定されたリマッピングされたタグ値に基づいて、前記リマッピングされたタグを判定するように構成されている、
請求項1~5のいずれか一項に記載の装置。
【請求項7】
前記タグチェック回路は、前記ターゲットアドレスを指定するメモリアクセス要求に応答して前記タグチェックを実行するように構成されており、前記メモリアクセス要求は、複数のアクセスタイプのうちの1つを有し、
前記タグチェック回路は、前記選択されたリマッピングされたタグ値フィールド内で指定された許可情報に基づいて、前記複数のアクセスタイプのうちの前記1つが許可されているかどうかを判定するように構成されている、
請求項6に記載の装置。
【請求項8】
前記タグチェック回路は、前記ターゲットアドレスを指定するメモリアクセス要求に応答して前記タグチェックを実行するように構成されており、前記メモリアクセス要求は、複数のアクセスタイプのうちの1つを有し、
前記タグマッピング記憶回路は、異なるアクセスタイプに対応するマッピング情報の異なるセットを記憶するように構成されており、
前記タグチェック回路は、前記メモリアクセス要求に関連付けられた前記複数のアクセスタイプのうちの前記1つに基づいて、前記タグチェックにおいて使用するための前記リマッピングされたタグを生成するためにマッピング情報のどのセットを使用すべきかを選択するように構成されている、
請求項1~7のいずれか一項に記載の装置。
【請求項9】
前記マッピング情報は、処理回路により実行可能な特定のスレッドに関連付けられ、
前記マッピング情報は、前記特定のスレッドを実行するときに前記処理回路により生成されたターゲットアドレスに応答して使用するためのマッピングを示す、
請求項1~8のいずれか一項に記載の装置。
【請求項10】
前記装置は、タグマッピング更新要求に応答して、前記ガードタグ及び前記アドレスタグのうちの前記少なくとも一方の各値が異なるリマッピングされたタグ値に関連付けられていることを示すマッピング情報の新しいセットを示すように前記タグマッピング記憶回路を設定するように構成されたタグマッピング設定回路を備える、
請求項1~9のいずれか一項に記載の装置。
【請求項11】
前記装置は、リマッピングされたタグ値としての選択から除外すべき1つ以上の除外タグ値を指定するタグマッピング更新要求に応答して、前記ガードタグ及び前記アドレスタグのうちの前記一方の各値が、前記1つ以上の除外タグ値以外のリマッピングされたタグ値に関連付けられていることを示すマッピング情報の新しいセットを示すように、前記タグマッピング記憶回路を設定するように構成されたタグマッピング設定回路を備える、
請求項1~10のいずれか一項に記載の装置。
【請求項12】
前記装置は、前記更新から除外すべき1つ以上の既存のタグマッピングを指定するタグマッピング更新要求に応答して、前記1つ以上の既存のタグマッピング以外のタグマッピングを更新するように、前記タグマッピング記憶回路を設定するように構成されている、タグマッピング設定回路を備える、
請求項1~11のいずれか一項に記載の装置。
【請求項13】
前記エラー応答アクションは、
前記タグチェックが不一致を検出したというインジケーションをステータスレジスタに入れること、
エントリをエラー報告に記録すること、
障害をシグナリングすること、及び
前記ターゲットアドレスにより指定された前記メモリ位置へのアクセスを拒否すること、
のうちの1つを含む、請求項1~12のいずれか一項に記載の装置。
【請求項14】
方法であって、
ターゲットアドレスに応答して、
1つ以上のメモリ位置のブロックであって、前記ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別するステップと、
前記ガードタグ及び前記ターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行するステップと、
前記タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行するステップと、
を含み、
前記方法は、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報に基づいて、前記ガードタグ及び前記アドレスタグの少なくとも一方をリマッピングして、前記タグチェックにおいて使用するためのリマッピングされたタグを生成するステップを含む、
方法。
【請求項15】
命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、
ターゲットアドレスに応答するタグチェックプログラム論理であって、
1つ以上のメモリ位置のブロックであって、前記ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別し、
前記ガードタグ及び前記ターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行し、
前記タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行する、
タグチェックプログラム論理と、
ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を維持する、タグマッピング維持プログラム論理と、
を備え、
前記タグチェックプログラム論理は、前記タグマッピング維持プログラム論理により維持された前記マッピング情報に基づいて、前記ガードタグ及び前記アドレスタグの少なくとも一方をリマッピングして、前記タグチェックにおいて使用するためのリマッピングされたタグを生成するように構成されている、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。より詳細には、本発明は、タグチェックを実行することに関する。
【0002】
データ処理装置により実行されるソフトウェアは、典型的には、高レベルプログラミング言語で記述され、次いで、ソフトウェアが実行される装置によりサポートされる命令セットアーキテクチャに従ってコードへとコンパイルされ得る。例えば、ソフトウェアは、元々、Java、C、又はC++などのより高いレベルの言語で記述され、次いで、x86又はArm(登録商標)などのネイティブでサポートされる命令セットアーキテクチャ(ISA)へとコンパイルされ得る。Javaなどのいくつかのより高いレベルのプログラミング言語は、メモリアクセスに関連するある特定のエラーをチェックするための実行時エラー検出チェックを含むので、メモリセーフな言語と見なされる。対照的に、C及びC++などのメモリセーフでない言語は、そのような実行時エラーチェックを含まない。メモリセーフでない言語の使用の永続的な普及は、所与の命令セットアーキテクチャに従ってコンパイルされたコードにおいて、攻撃者又は他の悪意のある者による悪用に対して脆弱であり得る多数のメモリに関連するエラーが存在し得ることを意味する。このようなエラーには、以下が含まれ得る。
・コードによって供給される配列のインデックスが配列の正当な境界の外側にある、境界違反、
・メモリ位置へのアクセスが、そのメモリ位置が既に割り当て解除又は解放されてしまった後に行われる、解放済みメモリ使用エラー、
・関数内で使用される変数(スタック上の値など)に関連付けられたアドレスへのメモリアクセスが、関数から既に戻った後に行われる、リターン後使用、
・変数が、宣言されているスコープの外側でアクセスされる、スコープ外使用のエラー、
・変数に関連付けられたメモリアドレスが、変数が初期化される前にアクセスされる、初期化前使用エラー。
【0003】
これらは、予測不可能な挙動を引き起こし、攻撃者が利用する道を潜在的に提供する可能性があるメモリに関連するエラーのいくつかの例にすぎない。
【0004】
少なくともいくつかの例は、装置であって、ターゲットアドレスに応答するタグチェック回路であって、1つ以上のメモリ位置のブロックであって、ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別し、ガードタグ及びターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行し、タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行する、タグチェック回路と、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を記憶する、タグマッピング記憶回路と、を備え、タグチェック回路は、タグマッピング記憶回路により記憶されたマッピング情報に基づいて、ガードタグ及びアドレスタグの少なくとも一方をリマッピングして、タグチェックにおいて使用するためのリマッピングされたタグを生成するように構成されている、装置を提供する。
【0005】
少なくともいくつかの例は、方法であって、ターゲットアドレスに応答して、1つ以上のメモリ位置のブロックであって、ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別するステップと、ガードタグ及びターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行するステップと、タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行するステップと、を含み、当該方法は、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報に基づいて、ガードタグ及びアドレスタグの少なくとも一方をリマッピングして、タグチェックにおいて使用するためのリマッピングされたタグを生成するステップを含む、方法を提供する。
【0006】
少なくともいくつかの例は、命令実行環境を提供するようにホストデータ処理装置を制御するコンピュータプログラムであって、ターゲットアドレスに応答するタグチェックプログラム論理であって、1つ以上のメモリ位置のブロックであって、ターゲットアドレスにより識別されたターゲットメモリ位置を含んでいる、ブロックに関連付けてメモリシステムに記憶されたガードタグを識別し、ガードタグ及びターゲットアドレスに関連付けられたアドレスタグに基づいて、タグチェックを実行し、タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行する、タグチェックプログラム論理と、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を維持する、タグマッピング維持プログラム論理と、を備え、タグチェックプログラム論理は、タグマッピング維持プログラム論理により維持されたマッピング情報に基づいて、ガードタグ及びアドレスタグの少なくとも一方をリマッピングして、タグチェックにおいて使用するためのリマッピングされたタグを生成するように構成されている、コンピュータプログラムを提供する。
【0007】
記憶媒体は、上述のコンピュータプログラムを記録し得る。記憶媒体は、非一時的記憶媒体であってもよい。
【0008】
本技法の更なる態様、特徴、及び利点は、添付の図面と共に読まれる以下の例の説明から明らかになる。
【図面の簡単な説明】
【0009】
【
図2】ガードタグ及びアドレスタグに基づく比較に関与する例示的なタグチェックを示す。
【
図3】アドレスタグ及びガードタグのうちの少なくとも一方をリマッピングすることに関与するタグチェックを実行する方法を示すフロー図である。
【
図4】ガードタグをリマッピングする例示的なタグチェックを示す。
【
図5】リマッピングされたガードタグ及びアドレスタグがガードタグよりも長い例示的なタグチェックを示す。
【
図6】リマッピングされたガードタグ及びアドレスタグがガードタグよりも長い別の例示的なタグチェックを示す。
【
図7】アドレスタグをリマッピングする例示的なタグチェックを示す。
【
図8】許可情報に基づくチェックに関与する例示的なタグチェックを示す。
【
図9】許可情報に基づくチェックに関与する別の例示的なタグチェックを示す。
【
図10】要求されたアクセスのタイプに基づいて、使用すべきマッピング情報のセットを選択することに関与する例示的なタグチェックを示す。
【
図11】実行されているスレッドに基づいて、使用すべきマッピング情報のセットを選択することに関与する例示的なタグチェックを示す。
【
図12】タグマッピングを設定するための装置を概略的に示す。
【
図13】各ガードタグ値が異なるアドレスタグ値に関連付けられるタグマッピングの設定の例を示す。
【
図14】ある特定のアドレスタグ値が選択から除外されるタグマッピングの設定の一例を示す。
【
図15】ある特定のガードタグベールが更新から除外されるタグマッピングの更新の一例を示す。
【
図16】全てのガードタグ値が同じアドレスタグ値にマッピングされるタグマッピングの設定の一例を示す。
【
図17】タグチェック及びタグリマッピングをサポートするシミュレータの一例を示す。
【0010】
いくつかの具体的な例を以下に説明する。本発明はこれらの正確な例に限定されないことが理解されるであろう。
【0011】
上述したタイプのある特定のメモリ使用エラーから保護するための1つの手法は、1つ以上のメモリ位置のブロックに関連付けてメモリシステムに記憶されているガードタグを提供することに関与する。タグチェックは、メモリシステム内の特定のアドレス指定された位置を識別するターゲットアドレスに基づいて(例えば、タグ保護されたメモリアクセス動作が要求されたときに)実行することができ、タグチェック回路は、ターゲットアドレスに関連付けられているアドレスタグと、ターゲットアドレスにより識別されたアドレス指定された位置を含む1つ以上のメモリ位置のブロックに関連付けてメモリシステムに記憶されたガードタグとに基づいて、比較を実行することができる。タグチェック回路は、ガードタグとアドレスタグとの間で一致が検出されるかどうかのインジケーションを生成することができる。このインジケーションは、メモリアクセスの成功が許可されるかどうか、又は後続の動作が成功できるかどうかを制御するために使用することができ、あるいは、メモリアクセスが通常通り継続することを許可している間に単に報告され得る。したがって、ガードタグ及びアドレスタグに対して実行されるタグチェックにおいて不一致が検出されたことに応答して、エラー応答アクションを実行することができる。
【0012】
これは、例えば、C又はC++などのメモリセーフでない言語に基づいてコードをコンパイルするコンパイラは、メモリの領域を初期化するときに、コードがアクセスすることが予想されるメモリのブロックのガードタグを特定の値に設定することができ、対応するアドレスタグ値を、それらのブロックを指すターゲットアドレスに関連付けることができるので、有用であり得る。メモリ使用エラーが生じる場合、例えば、アドレスポインタがスコープ外で使用される、又は初期化された有効範囲の境界外に延びる場合、アドレス指定された位置に関連付けられたガードタグが、ターゲットアドレスに関連付けられたアドレスタグと一致しないことがあり、この場合、一致が検出されたかどうかのインジケーションを使用して、何らかのエラー処理応答又はエラー報告メカニズムをトリガすることができる。取られる特定の応答は、実行されているソフトウェアの特定のニーズ、又はアーキテクチャの特定のマイクロアーキテクチャ実装に依存し得る。したがって、高レベル言語が、メモリアクセスエラーから保護するために実行時エラーチェックを実行する手段を有していない場合であっても、コンパイルされたコードに使用されるISAは、そのようなチェックを実行するためのアーキテクチャ機能を含むことができる。
【0013】
しかしながら、プロセスの特定のスレッドが、プロセスの他のスレッドにより使用されるアドレスタグを再使用して、それらの他のスレッドに関連付けられたデータにアクセスすることを防止することが望ましい場合がある。各プロセスは、典型的には、そのプロセスのための許可情報を指定する関連付けられたページテーブルのプロセス自身のセットを有するが、プロセスのスレッドは、プロセスのページテーブルを共有し、したがって、プロセスに関連付けられたページテーブルに記憶された許可情報は、そのプロセスの全てのスレッドに共通である。したがって、メモリ管理ユニット(memory management unit、MMU)によって実装される許可は、同じプロセスのスレッド間で保護を実施するのに適していない場合がある。
【0014】
プロセスのスレッドが、そのプロセスの他のスレッドに関連付けられたデータにアクセスすることを防止することが望ましい場合がある一例は、ブラウザタブのコンテキストにおいてである。JavaScriptコードなどのコードをウェブページ上で実行するために、ブラウザは仮想マシンを実装することができ、その仮想マシンは、コードを、仮想マシンにより実行可能な形式にし、次いで、そのコードを実行する。別個のプロセスにおいて各ブラウザタブを実行することによって、完全なプロセス分離を実装するのに十分なリソースがない場合であっても、1つのブラウザタブに関連付けられたコードが別のブラウザタブに関連付けられたデータに偶発的に又は悪意をもってアクセスできないことを保証するために、ブラウザタブを分離したままにすることが有用であり得る。
【0015】
本技法は、タグチェックに関与するガードタグ及びアドレスタグの少なくとも一方のリマッピングをサポートすること、並びにタグチェックが少なくとも一方のリマッピングされたタグに基づくことを提供する。このようにして、互いに分離されたままにされるスレッドに、タグ間の異なるマッピングを使用することができる。スレッドが、異なるスレッドにより使用されたターゲットアドレスとアドレスタグとの組み合わせを再使用しようとし、これがアドレスタグとターゲットアドレスに関連付けられたガードタグとの間の一致を引き起こす場合であっても、タグが再使用されたときに(2つのスレッドが、メモリ内の同じ物理アドレスにアクセスしているとしても)タグチェックが不一致を検出するように、ガードタグ及びアドレスタグの少なくとも一方を別様にリマッピングすることができる。したがって、別のスレッドに属するデータにアクセスしようと試行しているスレッドを識別することができ、適切なアクションを取ってもよい(例えば、2つのスレッドは、上記の例のようにブラウザタブに対応してもよい)。
【0016】
この手法により、各サンドボックスについて異なるプロセスを使用する必要なしに、コードの一部分のサンドボックス化が可能になり、かつ、オーバーヘッドが、メモリ内のガードタグを再配置しなければならないこと、又は各サンドボックスについてページテーブルの別個のセットを維持しなければならないことを回避することが可能になる。また、異なるガードタグ値が、単一ページの異なる部分に割り当てられ、異なるスレッドについてガードタグ/アドレスタグ間の異なるマッピングが行われ得るので、このような手法により、典型的には、例えば4KB、16KB、又は64KBの領域を指すページテーブルが使用するページレベルの粒度よりも細かい粒度で、メモリへのアクセス権をスレッドごとに制御することが可能になる。
【0017】
本明細書に記載の技法によれば、装置は、ターゲットアドレスに応答して動作するタグチェック回路を備え得る。ターゲットアドレスは、アクセスが求められるメモリシステム内の位置、又は他の場合には、タグチェックが実行されるメモリシステム内の位置であり得る、ターゲットメモリ位置を識別することができる(例えば、ターゲットアドレスは、将来のメモリアクセスがアクセスする可能性が高いと予想されるメモリ位置を識別することができる。タグチェックがメモリアクセス自体と同時に実行されることは必須ではない)。メモリシステムは、メインメモリ並びにキャッシュ構造を備え得る。一例では、メモリシステムは、メインメモリ、レベル1命令キャッシュ、レベル1データキャッシュ、及び共有レベル2キャッシュを含む。他のキャッシュ階層も可能であることが理解されよう。
【0018】
上述したように、ガードタグは、1つ以上のメモリ位置のブロックに関連付けて記憶され得る。このように、メモリ位置は、ガードタグを有するブロックの一部であってもよく、ガードタグは、そのブロックにアクセスするための適切なアドレスタグが提供されるかどうかに依存して、そのブロックへのアクセスを制約するために使用される。
【0019】
いくつかの実施形態では、対応するガードタグを有するメモリ位置のブロックは各々、単一のメモリ位置を備え得る。この場合、各個々のメモリ位置は、異なるガードタグを有してもよく、これにより、より広い範囲のメモリエラーを検出することができるようにガードタグの細かい粒度の設定を提供することができる。
【0020】
しかしながら、実際には、各アドレス指定された位置について個々のガードタグを設定するオーバーヘッドが高すぎる場合があり、各ガードタグを複数のメモリ位置のブロックに関連付けることがより効率的であり得る。この場合、いくつかの隣接するメモリ位置が、メモリに関連するエラーの一般的な形態を検出するのに十分であり得る同じガードタグを共有してもよい。
【0021】
メモリ位置の所与のブロックに関連付けられたガードタグは、メモリシステム内の任意の他のメモリ位置に記憶され得る。メモリシステム内のガードタグの位置が選択される特定の方法は、実装ごとに、又は実行時に大幅に変動し得る。いくつかの例では、ガードタグを記憶している位置は、アーキテクチャ的に処理回路によりアクセス可能であってもよく、例えば、ガードタグ記憶位置は、アドレス指定された位置と同じアドレス空間の一部にマッピングされた位置であり得る。この場合、アドレス指定された位置自体と対応するタグ記憶位置のアドレスとの間のマッピングは、固定されていても又はハードワイヤードされていてもよく、あるいは変動可能であっても、例えば、メモリアクセス回路により維持される追跡テーブル内で又は変換ルックアサイドバッファ内で追跡されてもよい。代替的に、他の実装形態は、所与のアドレス指定された位置に関連付けられたガードタグを、処理回路にアーキテクチャ的にアクセス可能でない更なる記憶位置に、例えば、処理回路により実行される命令によってアドレス指定することができるアドレス空間にはマッピングされないマイクロアーキテクチャ内に提供された追加の記憶域に記憶し得る。この場合、メモリアクセス回路は、アドレス指定された位置のアドレスに基づいて、対応するタグ記憶位置を参照するために使用される特定の内部アドレスを判定し、タグ記憶位置からタグデータを読み出すために必要な任意の追加のメモリアクセスをトリガし得る。タグ記憶位置が処理回路にアーキテクチャ的にアクセス可能であるか否かにかかわらず、タグ値はまた、より高速なアクセスのためにキャッシュ内に、データ値に使用される同じキャッシュ内又は専用のタグキャッシュ内のいずれかにキャッシュされ得る。
【0022】
場合によっては、ガードタグは、比較的小さくてもよく、例えば、4ビット又は8ビットであってもよく、したがって、メモリ位置の異なるブロックに各々が関連付けられた複数のガードタグは、同じメモリ位置内に収まることができる。
【0023】
アドレスタグは、異なる方法でターゲットアドレスに関連付けることができる。場合によっては、アドレスタグは、例えば、メモリアクセス動作及びガードタグチェックをトリガするメモリアクセス命令により指定された別個のレジスタを使用して、ターゲットアドレスとは別個に指定することができる。しかしながら、他の例では、アドレスタグは、ターゲットアドレスの1つ以上の選択されたビットの関数として判定され得る。すなわち、アドレスタグは、ターゲットアドレス自体の一部分から導出された情報を含み得る。多くの場合、命令セットアーキテクチャは、ある特定のビット数(例えば、64ビット)を有するアドレスをサポートし得るが、所与のハードウェアデバイスは、実際には、そのビット数を使用して表すことができる全ての可能なアドレスを使用するほど多くのメモリ容量を必要としない場合がある。例えば、デバイスの使用における現在の傾向では、まだ、264個の個々のアドレス指定可能な位置を提供する必要はない。したがって、しばしば、メモリアドレスのいくつかのビットは事実上、使用されない場合があり、常に同じ値を有する、又は最上位の「実」アドレスビットの符号拡張として設定される、のいずれかあり得る(したがって、未使用部分は、全て0又は全て1に設定される)。したがって、アドレスがレジスタ間で操作される、又は移動するときにはいつでも、当然、アドレスタグをアドレスと一緒に輸送することができるので、この未使用部分を再使用して、アドレスタグ又はアドレスタグを導き出すための値を表すこと、アドレスタグを取得するために別個のレジスタにアクセスすることを必要とすることを回避すること、また、アドレスと対応するアドレスタグとの対応関係を追跡することをより容易にすることができる。
【0024】
ターゲットアドレスの一部分を使用してアドレスタグを判定する実施形態では、このアドレスタグは、ターゲットアドレスにより識別されたアドレス指定された位置からの情報がキャッシュ内に記憶されているかどうかを判定するためにキャッシュが使用し得るターゲットアドレスのタグ部分とは異なることに留意されたい。多くのキャッシュ方式は、キャッシュされたデータのアドレスのタグ部分をそのデータと並列にキャッシュ内に記憶することができ、それにより、所与のアドレスを求めてキャッシュを検索すると、キャッシュされたデータが要求されたアドレスに実際に対応するかどうかを判定するために、アドレスの一部を、キャッシュされたデータと並列に記憶されたタグと比較することができる。しかしながら、この場合、キャッシュ内のタグと比較されるアドレスのタグ部分は、アドレスの、データが要求される特定のアドレス指定された位置を実際に識別する部分の一部であり、すなわち、アドレスのキャッシュタグ部分を変更すると、当然、アドレスがメモリシステム内の異なるアドレス指定された位置を指す結果となる。対照的に、タグ保護されたメモリ動作にアドレスタグが使用される場合、メモリアクセス回路は、アドレスタグとは独立して、データが要求されるアドレス指定された位置を選択してもよい。すなわち、アドレスタグが異なる値を有する場合であっても、アドレス指定された位置の選択はターゲットアドレスの他の部分のみに依存し得るので、ターゲットアドレスにより参照されるアドレス指定された位置は依然として同じであり得る。これにより、コンパイラは、特定のアドレスに関連付けられたアドレスタグを、メモリシステム内のデータの関連するブロックに割り当てられた対応するガードタグ値に一致するように任意の値(例えば、上述のランダムに選択された値)に設定する自由が与えられる。
【0025】
本明細書に記載の技法によれば、装置はまた、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を記憶する、タグマッピング回路を備えてもよい。したがって、このマッピング情報によって、タグマッピング記憶回路は、特定のガードタグ値についてタグチェックを実行するときに、どのアドレスタグ値が一致を引き起こすかを示すことができる。典型的なタグ保護されたメモリシステムでは、タグチェックは、提供されたアドレスタグがガードタグと同じであるかどうかを単にチェックする。しかしながら、このようにしてマッピング情報を記憶していることによって、ガードタグ値とそれらの対応するアドレスタグ値との間の関係をより複雑にする可能性があり、例えば、要求が発生したスレッドに基づいてマッピングが変動する。
【0026】
マッピング情報は、ガードタグ及び関連付けられたアドレスタグの少なくとも一方の値についてリマッピングされたタグ値が記憶される複数のフィールドを含み得る。代替的に又は追加的に、マッピング情報は、リマッピングされるタグの値からリマッピングされたタグ値を導出することを可能にする数学関数など、タグ値間の何らかの他の形式の関係を含んでもよい。例えば、マッピング情報は、リマッピングされるガードタグ/アドレスタグの入力タグ値を用いてハッシュされるマッピングキー値を含んでもよく、入力タグ値及びマッピングキー値のハッシュは、タグチェックに使用されるリマッピングされたタグ値を提供する。いずれにしても、マッピング記憶回路は、特定のメモリ位置にアクセスするために所与のスレッドが使用するアドレスタグが、マッピング情報が変更された異なるスレッドにより使用されるが同じアドレスタグの同じメモリ位置を比較するときに一致を引き起こさないことがあるので、メモリセキュリティの向上を可能にする。したがって、1つのスレッドに属するデータに別のスレッドがアクセスしようとする悪意のある又は不注意な試行を識別することができ、必要に応じて、アクセスを防止することができる。
【0027】
本明細書の技法によれば、タグチェック回路は、タグマッピング記憶回路により記憶されたマッピング情報に基づいて、ガードタグ及びアドレスタグの少なくとも一方をリマッピングして、タグチェックにおいて使用するためのリマッピングされたタグを生成するように構成されている。
【0028】
いくつかの例では、タグチェック回路は、アドレスタグをリマッピングし、ガードタグをリマッピングしないように構成されている。そのような手法は、ガードタグのリマッピングよりも高速であり得、ガードタグをフェッチするためのメモリアクセスを、リマッピングされているアドレスタグと並列に実行することを可能にし得る。しかしながら、他の例では、リマッピングは、ガードタグには適用され得るが、アドレスタグには適用されない。ガードタグをリマッピングし、リマッピングされたガードタグをアドレスタグと比較することによって、使用できるマッピングに関して、より高い柔軟性が達成され得る。例えば、アドレスタグ及びリマッピングされたガードタグは、ガードタグより長くてもよい。リマッピングされたガードタグ及びアドレスタグの長さを増加させることによって、利用可能なタグ値の数を増加させることができ、それにより、以下で説明するように、スレッドの更なる隔離を可能にする。いくつかの例では、ガードタグとアドレスタグの両方がリマッピングされ得る。
【0029】
ガードタグ及びアドレスタグの少なくとも一方をリマッピングすると、タグチェック回路は、リマッピングされたタグに基づいてタグチェックを実行するように構成され得る。ガードタグ及びアドレスタグの一方のみがリマッピングされる例では、このタグチェックは、リマッピングされたタグと、ガードタグ及びアドレスタグのうちのリマッピングされなかったどちらかとが、同じ値を有するかどうかを判定することを含み得る。アドレスタグとガードタグの両方がリマッピングされる例では、タグチェックは、2つのリマッピングされたタグが同じ値を有するかどうかを判定し得る。上記の例は、タグが同じ値を有するときに一致を検出することについて記載しているが、アドレスタグがリマッピングされたガードタグにより示される許容される値の範囲内に入るときに一致を検出すること、又は、1つのタグが、タグ値にオフセットを適用することなどによって他のタグから導出された値を有するときに一致を検出することなど、タグ値の一致について他の条件を使用してもよい。
【0030】
タグチェック回路が、タグチェックにおいて不一致を検出した場合、これは、スレッドが別のスレッドに関連付けられたデータに不適切にアクセスしようと試行していることを示すことがあり、又は他の場合には、上に列挙した種類のメモリエラーを示すことがある。したがって、タグチェック回路は、不一致の検出に応答して、エラー応答アクションを実行することができる。いくつかの例では、タグチェックを失敗するアクセスを防止することが望ましい場合があり、したがって、エラー応答アクションは、ターゲットアドレスにより指定されたメモリ位置へのアクセスを拒否することを含む。しかしながら、いくつかの例では、ターゲットアドレスにより指定されたメモリ位置へのアクセスが許可され、不一致が検出されたことがログ記録され得る。これは、正しく機能していない、又は他の場合には、アクセスを制限する必要がないシステムにおいて悪意のあるコード又は誤動作しているコードを識別するプロセスの一部として機能しているプログラマコードに示すのに有用であり得る。これにより、タグチェックを実行している間にアクセスの進行が許可され得るので、性能が向上し得る。
【0031】
このようにして、マッピング情報を記憶し、タグチェックがリマッピングされたタグに基づくことによって、本技法は、事実上、コードの一部分をサンドボックス化し、効率的な方法でメモリ保護を実装することが可能である。
【0032】
上述したように、アドレスタグ又はガードタグのいずれかをリマッピングして、タグチェックにおいて使用するためのリマッピングされたタグを生成することができる。いくつかの例では、アドレスタグとガードタグの両方をリマッピングして、タグチェックにおいて互いに比較されるリマッピングされたタグを生成することができる。これにより、攻撃者が、タグチェックにおいて一致を引き起こすアドレスタグとガードタグとの対を比較することによって、ガードタグとアドレスタグとの間のマッピングを反転工学することがより困難になり得る。
【0033】
いくつかの例では、ガードタグがリマッピングされる場合、アドレスタグはガードタグよりも長く、リマッピングされたガードタグはガードタグよりも長い。例えば、4ビットのガードタグがメモリシステムに記憶されていることがある。4ビットのアドレスタグが使用される場合、これは16個の可能なアドレスタグ値を提供する。しかしながら、8ビットのアドレスタグがアドレスタグに使用される場合、可能なアドレスタグ値は256個である。次に、4ビットのガードタグは、8ビットのアドレスタグと比較するために、8ビットのリマッピングされたガードタグにマッピングされ得る。この手法により、異なるスレッドについて重複していないアドレスタグの異なるセットが定義され得るので、同じプロセスのスレッド間のサンドボックス化が向上し得る。例えば、第1のスレッドについて、16個のアドレスタグ値の第1のセットを16個のガードタグ値にマッピングすることができ、第2のスレッドについて、16個の異なるアドレスタグ値の第2のセットを16個のガードタグ値にマッピングすることができる。したがって、第1のスレッドに関連付けられたアドレスタグが第2のスレッドにより使用される場合、第2のスレッドについてのマッピング情報は、アドレスタグ値がどのガードタグにもマッピングされないことを示す。したがって、タグチェックは、そのような状況を検出する可能性がより高く、そのような状況を処理することが可能であり得る。これにより、1つのスレッドにより有効に使用されるアドレスタグが別のスレッドにより使用されることを比較する際に、一致を検出する機会が低減される。一般に、この手法は、アドレスタグがガードタグと同じビット数を有するときに可能であるよりも異なるスレッドの隔離を大きくすることによって、メモリセキュリティを高めることが可能であり得る。
【0034】
このようにすると、アドレスタグ及びリマッピングされたガードタグは、ガードタグよりも長くなり得るが、アドレスタグをリマッピングするいくつかの例では、ガードタグ及びリマッピングされたアドレスタグは、ガードタグよりも長くなり得る。そのような手法は、可能なタグ値の数の増加による恩恵を受けるが、より長いガードタグをメモリシステムに記憶することが要求される場合がある。しかしながら、いくつかのシステムでは、アドレスタグを記憶しているためのポインタ内で利用可能な空間が限定される場合があり、したがって、タグが不注意に一致する可能性が低減される恩恵を受けるためには、より長いガードタグをメモリシステム内に記憶し、より長いリマッピングされたアドレスタグにアドレスタグをリマッピングすることが望ましい場合がある。
【0035】
したがって、一般に、アドレスタグ/ガードタグの少なくとも一方をリマッピングしてリマッピングされたタグを形成する場合、リマッピングされたタグは、リマッピングされている元のアドレス/ガードタグよりも長くなり得る(より多くのビット数を有し得る)。
【0036】
いくつかの例では、タグチェック回路は、メモリアクセス要求に応答してタグチェックを実行するように構成され得る。例えば、メモリアクセス要求は、ターゲットアドレスに関連付けられた位置からのデータをレジスタにロードすることを要求するロード要求、又はターゲットアドレスに関連付けられた命令のフェッチを要求する命令フェッチ要求、又はターゲットアドレスにより識別される特定のメモリ位置にデータを書き込むことを要求する記憶要求であり得る。メモリアクセス要求は、複数のアクセスタイプのうちの1つを有し得る。例えば、メモリアクセス要求は、読み出しアクセスタイプ、書き込みアクセスタイプ、及び実行アクセスタイプのうちの1つを有することができ、これらのアクセスタイプは、ターゲットアドレスに関連付けられた動作のタイプを示す(読み出しアクセスはロード要求に対応し、書き込みアクセスは記憶要求に対応し、実行アクセスは命令フェッチ要求に対応する)。他のシステムは他のタイプのアクセスをサポートしてもよく、アクセスタイプのいくつかの可能なセットを使用してもよいことが理解されよう。
【0037】
いくつかの例では、タグマッピング情報は、所与のガードタグ値と所与のアドレスタグ値との間のマッピングを提供するマッピング情報の所与の項目について、メモリアクセス要求の複数のアクセスタイプのうちのどれが、メモリアクセス要求のアドレスタグが所与のアドレスタグ値を指定するときに、所与のガードタグ値を有するガードタグに関連付けられたブロック内のメモリ位置にアクセスすることを許可されるかを限定することができる。例えば、マッピング情報の項目は、特定のガードタグに関連付けられたメモリ位置のブロックが読み出し専用であることを示し得る。したがって、タグチェック回路が、メモリ位置のブロック内のメモリ位置を指定するターゲットアドレスについてタグチェックを実行するとき、アドレスタグ及びガードタグに基づくタグチェックが一致を検出した場合であっても、タグチェック回路は、許可されるアクセスを読み出しアクセスに限定することができる。タグチェック回路はタグ値に基づいて一致を検出するが、要求されたアクセスタイプが、許可されるアクセスタイプとしてマッピング情報の項目により示された読み出しアクセスでない場合、タグチェック回路は、アクセスが許可されていないと判定し得る。
【0038】
マッピング情報を使用して許可されるアクセスのタイプを限定することによって、装置は、別個のガードタグが定義されるメモリ位置のブロックの粒度レベルで許可情報を提供することができる。典型的なシステムでは、許可情報は、ページ全体に適用される許可のセットを用いてページレベルでのみ定義される。したがって、この手法は、同じページ内の異なるアドレスに対して異なるガードタグ値を設定し、異なる許可をそれらのガードタグ値に関連付けることによって、又は異なるタイプのアクセス(例えば、読み出し/書き込み/実行)に対して異なるガードタグマッピング/アドレスタグマッピングを指定することによって、より細かい粒度の許可を実装することを可能にすることができる。いずれにしても、マッピング情報を使用して、どのタイプのアクセス要求が所与のガードタグ値に関連付けられたメモリのブロックにアクセスを許可されるかを限定するために使用される。
【0039】
マッピング情報は、いくつかの形態で存在する。例えば、マッピング情報は、アドレスタグ値をガードタグ値から判定することができ、又はその逆も可能である、アドレスタグ値とガードタグ値との間の数学的関係を含み得る。そのような数学的関係は、ガードタグ及びアドレスタグの少なくとも一方の値からリマッピングされたタグ値を判定し、同様に、リマッピングされたタグ値からガードタグ及びアドレスタグの少なくとも一方の値の値を判定することの両方のために、双方向で使用可能であり得る。このようにして数学的関係を使用することにより、タグを迅速にリマッピングし、必要な記憶空間を他の技法よりも小さくすることが可能になる。代替的に、数学的関係は、リマッピングされたタグ値を判定するために一方向においてのみ使用可能であり得るが、リマッピングされたタグ値からアドレスタグ及びガードタグのうちの少なくとも一方の値を推測することを困難又は不可能にすることができ、それにより、攻撃者は、特定の位置のガードタグを知っている場合であっても有効なアドレスタグを反転工学することができない。
【0040】
いくつかの例では、マッピング情報は、ガードタグ及びアドレスタグの少なくとも一方の値に基づいてルックアップされ得るリマッピングされたタグ値を記憶している複数のリマッピングされたタグ値フィールドを指定する。そのような例では、アドレスタグ及びガードタグの少なくとも一方をリマッピングするとき、タグチェック回路は、ガードタグ及びアドレスタグの少なくとも一方の値に基づいて、複数のリマッピングされたフィールドのうちの1つを選択するように構成され得る。このようにして、タグチェック回路は、選択されたリマッピングされたタグ値フィールド内で指定されたリマッピングされたタグ値に基づいて、タグチェックにおいて使用されるリマッピングされたタグを判定することができる。このようにしてマッピング情報を記憶していることによって、マッピング情報は、リマッピングされたタグ値フィールドを所望の値に設定することによって、ガードタグ及びアドレスタグの少なくとも一方の可能な値のうちのいずれかをリマッピングされたタグ値に容易に関連付けることができる。これにより、タグ値間で使用されるマッピングに柔軟性が提供され、タグ値を容易に更新することが可能になる。この手法はまた、より多くのメモリ位置にアクセスするために使用できるアドレスタグを提供するために、2つ以上の異なるガードタグ値に同じアドレスタグ値をマッピングすることを可能にし得る。同様に、2つ以上の可能なアドレスタグ値を使用してメモリ位置の特定のブロックへのアクセスを可能にするために、又は同じメモリ位置への異なるタイプのアクセスのための異なるアドレスタグ値を提供するために使用され得る2つ以上の異なるアドレスタグ値に同じガードタグ値をマッピングしてもよい。また、リマッピングされたタグ値の選択と同様の方法で、ガードタグ及びアドレスタグの少なくとも一方の値を使用して選択され得るフィールドを提供することによって、許可情報などの更なる情報をマッピング情報の各項目に関連付けて記憶されていてもよい。
【0041】
リマッピングされたタグ値をマッピング情報の複数のリマッピングされたタグ値フィールドに記憶することに加えて、マッピング情報のフィールドを使用して、リマッピングされたタグ値に関連付けて許可情報を記憶してもよい。したがって、各フィールドは、比較において使用されるリマッピングされたタグ値だけでなく、許可されるメモリアクセスのタイプのインジケーションも指定することができる。例えば、マッピング情報の各項目について、許可情報を示すために1ビット以上が提供され得る。これにより、タグチェック回路は、実行中のコードの一部分がメモリ位置の所与のブロックへのアクセスを有することだけでなく、コードの一部分が、求められているアクセスのタイプに対して十分なアクセス権を有することも保証することができる。例えば、タグチェック回路は、所与の位置に対する書き込みアクセス要求を受信することができる。タグチェック回路は、タグ比較を実行するときに一致を検出することができる。しかしながら、所与の位置に対応するリマッピングされたタグ値は、そのアドレスタグを使用するそのメモリ位置に対して読み出しアクセス及び実行アクセスのみが許可されることを示し得る。要求されたアクセスタイプと許可情報との間のそのような不一致を検出したことに応答して、タグチェック回路は、エラー応答アクションを取り得る。エラー応答アクションは、タグ比較における不一致の検出に応答して取られるエラー応答アクションと同じであってもよく、又は異なるエラー応答アクションであってもよい。
【0042】
これらの技法は、書き込み排他性を実施するために使用され得、それによって、メモリ位置は、書き込みアクセス又は実行アクセスのいずれかが行われるが、書き込まれ得るメモリ位置は実行のためには使用されず、実行され得るコードを記憶しているメモリ位置は書き込まれない。これにより、実行可能な悪意のあるコードを攻撃者が提供し得る機会が低減される。
【0043】
リマッピングされたタグ値に関連付けて許可情報を記憶することは、許可されるメモリアクセスのタイプを制限するいくつかの可能な方法のうちの1つにすぎないことが理解されよう。いくつかの例では、タグマッピング記憶回路は、異なるアクセスタイプに対応するマッピング情報の異なるセットを記憶するように構成されている。例えば、読み出しアクセスタイプ、書き込みアクセスタイプ、及び実行アクセスタイプを利用するシステムでは、タグマッピング記憶域は、読み出しアクセスタイプ、書き込みアクセスタイプ、及び実行アクセスタイプの各々についてマッピング情報のセットを記憶するように構成され得る。タグチェックを実行するとき、タグチェック回路は、メモリアクセス要求に関連付けられたアクセスタイプに基づいて、タグチェックにおいて使用するためのリマッピングされたタグを生成するために、マッピング情報のどのセットを使用すべきかを選択するように構成され得る。すなわち、タグチェック回路は、例えば、読み出しアクセスが要求されたときには、読み出しアクセスタイプに対応するマッピング情報がリマッピングに使用されるように、要求されたアクセスのタイプに対応するマッピング情報のセットを選択することができる。このようにして、いくつかの異なるアクセスタイプの各々についてマッピング情報の異なるセットを提供することができ、それにより、例えば、所与のメモリ位置への読み出しアクセスに有効なアドレスタグを再使用して、同じメモリ位置への書き込みを試行する場合、異なるマッピング情報を使用して、タグチェックにおいて使用するためのリマッピングされたタグが生成され、したがって、書き込みアクセスのためのマッピング情報は、タグチェックにおいて不一致が検出されるようなものであり得る。これは、別個の読み出し権/書き込み権/実行権がページの個々の下位部分について事実上定義され得ることを意味し、これは、例えばページテーブルを使用してMMUにより定義される許可では可能ではない。
【0044】
本明細書に記載の技法は、同じプロセスの異なるスレッドをサンドボックス化するのに特に有用であり得る。プロセッサ上で実行されるプロセスは、プロセスが使用する仮想アドレスが、物理メモリにアクセスするために使用できる物理アドレスに変換されるメモリ位置を参照することを可能にするページテーブルの関連付けられたセットを有し得る。これらのページテーブルは、プロセッサ上で実行される異なるプロセス間を分離するために使用され得る。しかしながら、そのような手法は、同じプロセスの他のスレッドに関連付けられたデータにプロセスのスレッドがアクセスすることを防止する保護をプロセス内に保護を行わない。
【0045】
プロセスのスレッドがページテーブルの同じセットを結果的に共有する同じプロセスの他のスレッドのデータにアクセスしないようにサンドボックス化又は防止することは、例えば、ブラウザタブの場合には望ましい場合がある。ブラウザは、ブラウザの異なるタブにロードされたウェブページに存在するJavaScriptコードを実行するJavaScriptエンジンなどの単一の仮想マシンを実装し得る。異なるブラウザタブで実行されるコードを分離することが望ましい場合があるが、各タブについてページテーブルの異なるセットを用いた完全なプロセス分離を使用することは、各タブについて実装するにはリソース集約的すぎる場合がある。しかしながら、本明細書に記載の技法に従ってブラウザタブ間のメモリ保護を提供するために、例えば、各ブラウザタブをスレッド内に実装し、各スレッドをサンドボックス化してもよい。
【0046】
いくつかの例によれば、タグマッピング記憶回路に記憶されたマッピング情報は、処理回路により実行可能な特定のスレッド(例えば、1つのブラウザタブからのコードを実行するスレッド)に関連付けられている。マッピング情報は、特定のスレッドを実行するときに処理回路により生成されたターゲットアドレスに応答して使用するためのマッピングを示し得る。したがって、タグチェック回路は、実行されているスレッドに関連付けられたマッピング情報のセットを使用して、タグチェックにおいて使用するためのリマッピングされたタグ値を生成することを保証することができる。異なるスレッドについてのマッピング情報の別個のセットを提供することによって、スレッドが、アクセスすることができる別の位置について使用するアドレスタグを使用して、アクセスすべきでないメモリ位置にアクセスしようと試行する場合、又は異なるスレッドからのターゲットアドレス及びアドレスタグの組み合わせを再使用しようと試行する場合、これを検出し、エラー応答アクションを実行することができる。
【0047】
ブラウザ内のタブは、プロセスが複数のスレッドを有し得る場合の一例であるが、可能な目的の範囲について、スレッド間のサンドボックス化を使用してよいことが認識されるであろう。更に、いくつかの低電力デバイス又は小フットプリントデバイスは、ページテーブルを使用して、かつ、スレッド間を分離するために本明細書で説明される技法を使用することによって、任意の形態のメモリ管理を実装しなくてもよく、そのようなデバイスは、ページテーブルを処理するオーバーヘッドなしに、より細かい粒度のメモリ保護を実施することが可能であり得る。
【0048】
いくつかの例では、タグマッピング記憶回路は、一度に1セットのマッピング情報を記憶する記憶回路を備え得る。例えば、タグマッピング記憶回路は、その時点で処理回路上で実行されているスレッドに関連付けられたマッピングを記憶するレジスタを備えることができる。処理回路が異なるスレッドを実行するように切り替わるとき、装置は、スレッドに関連付けられたマッピング情報のセットをレジスタへとロードさせて、もはや実行されていなかったスレッドに関連付けられたマッピング情報を置き換えることができる。一度に1セットのマッピング情報のみをタグマッピング記憶回路に記憶していることによって、タグマッピング記憶回路を簡略化することができる。更に、他の情報(レジスタ状態、新しいスレッドをどのように処理するかを制御するための制御状態、及び新しいスレッドに関連するコンテキスト識別子など)は、典型的にはコンテキストスイッチにロードされるので、新しいマッピング情報を同じにロードすることは、スレッドを切り替えるときに深刻な性能上の問題の原因とならないことがある。
【0049】
代替的に、タグマッピング記憶回路は、異なるスレッドに各々が対応する複数のマッピング情報のセットを記憶するように構成され得る。したがって、タグチェック回路は、タグチェックをトリガしたスレッドに関連付けられたタグマッピング記憶回路内の複数のマッピングレジスタのうちの1つに記憶されたマッピング情報に基づいて、タグチェックを実行するように構成され得る。2つ以上のスレッドについてタグマッピング記憶回路にマッピング情報を記憶していることによって、装置は、コンテキストスイッチにマッピング情報の新しいセットをロードする必要がないので、異なるスレッドの実行間でより迅速に遷移することができる。
【0050】
例えば、同時マルチスレッド型(simultaneous-multi-threaded(SMT))プロセッサは、各スレッドについてのマッピング情報を、そのスレッドについて記憶されたアーキテクチャ状態と並列に記憶し得る。SMTプロセッサでは、複数のスレッドが、対応するスレッドのスレッド識別子(ID)でタグ付けされる命令を用いて、一度に実行することができる。SMTコアは、典型的には、複数のスレッドについてのアーキテクチャ状態を一度に記憶するために複数のレジスタのセットを有し、各命令について、その命令のスレッドIDに基づいてレジスの適切なセットが参照される。したがって、SMTプロセッサのパイプラインは、複数のスレッドに関連する処理をインターリーブすることができ、同時に、複数のスレッドについて命令を「インフライト」で有することができる。したがって、アーキテクチャ状態を記憶しているレジスタに加えて、SMTは、ハードウェア内でサポートされる異なるスレッドについてマッピングレジスタも提供し得る。次いで、タグチェックをトリガする命令のスレッドIDを使用して選択されたレジスタに記憶されたマッピング情報に基づいて、タグチェックを実行することができる。
【0051】
いくつかの例では、装置は、マッピング情報を更新又は生成する機能を提供する。そのようなタグマッピング設定回路は、ガードタグ値及びアドレスタグ値の少なくとも一方とリマッピングされたタグ値との間のマッピングの一部又は全部を変更するために使用されてもよく、又はマッピングの全く新しいセットを生成するために使用されてもよい。タグマッピング設定回路は、マッピング情報の新しいセット又は更新されたセットを求める複数のタイプの要求に応答して、その要求により示される方法でマッピング情報を生成又は更新することができる。処理回路によりサポートされる命令を定義するISAは、マッピング情報を生成又は更新すべきであるとプログラマが指定することを可能にする命令を含んでいてもよく、又は要求は、より高いレベルで指定されたプログラマの意図を実装するためのマイクロアーキテクチャ機能として実装され得る。いくつかの例では、ISAは、マッピングを設定するための専用の命令を含まず、代わりに、マッピングレジスタが、レジスタに書き込まれる値を指定する制御レジスタ設定命令を使用して更新され得る制御レジスタとして扱われ得る。他の例では、マッピング設定命令のオペランドとしてマッピング情報中で設定される正確な値をソフトウェアが提供する必要なく、マッピング情報中で指定される値をハードウェアに生成させる専用のマッピング設定命令をサポートすることができる。次に、タグマッピング設定回路の要求及び応答のタイプの例について説明する。
【0052】
いくつかの例では、タグマッピング設定回路は、利用可能なリマッピングされたタグ値を「シャッフル」することによって、そのような新しいマッピングを求める要求に応答して、マッピング情報の新しいセットを生成するように構成されている。すなわち、タグマッピング設定回路は、ガードタグ及びアドレスタグの少なくとも一方の各値が異なるリマッピングされたタグ値に関連付けられていることを示すマッピング情報の新しいセットを示すようにタグマッピング記憶回路を設定することができる。ガードタグ及びアドレスタグの少なくとも一方の各値を異なるリマッピングされたタグ値に関連付けることによって、アドレスタグの誤用を検出しない機会が低減される。特に、この手法は、ガードタグ及びアドレスタグの少なくとも一方の2つの値が同じリマッピングされたタグ値にマッピングされないことを保証する。次に、これは、意図しなかったメモリの領域にアクセスするためにポインタが使用されるときに一致が検出される機会を低減する。2つのガードタグ値が同じリマッピングされたタグ値にマッピングされる場合、例えば、これらのガードタグ値のうちの第1のガードタグ値に関連付けられたブロックにアクセスするためにアドレスタグが有効に生成された場合には、これらの位置へのアクセスがメモリ使用エラーをシグナリングするためにエラー処理応答をトリガした場合であっても、アドレスタグがガードタグ値のうちの第2のガードタグ値に関連付けられたブロックにアクセスするために使用される場合に一致が検出され得る。
【0053】
マッピング情報のセットを更新するとき、使用されないリマッピングされたタグの1つ以上の値を指定できることが望ましい場合がある。これは、(例えば、タグエイリアシングが望まれない以前に割り当てられたメモリ領域に使用されるので)ある特定のリマッピングされたタグ値が特定の目的のために予約されている場合であり、アドレスタグ及びガードタグのうちの少なくとも一方の値がそれらのリマッピングされたタグ値にマッピングされないことが望ましい。これは、リマッピングされたタグ値として選択から除外すべき1つ以上の除外タグ値を指定するタグマッピング更新要求によって示され得る。この要求に応答して、タグマッピング設定回路は、ガードタグ及びアドレスタグの一方の各値が1つ以上の除外タグ値以外のリマッピングされたタグ値に関連付けられていることを示すマッピング情報の新しいセットを示すことができる。マッピング情報の新しいセットは、ある特定のタグ値を除外して生成されるべきであり、異なるリマッピングされたタグ値に各タグ値がマッピングされることが望ましい場合、例えば、より長いリマッピングされたタグを使用することによって、リマッピングされるタグ値よりも多くのリマッピングされたタグ値が利用可能であることが理解されよう。
【0054】
いくつかの例では、タグマッピング設定回路は、提供されるアドレスタグにかかわらず、ある特定のメモリ位置がアクセスされないことを示す新しいマッピングを求める要求に応答する。例えば、マッピング情報のセットに関連付けられた特定のスレッドが、ある特定のメモリ位置にアクセスする要求に関連付けて提供されるアドレスタグにかかわらず、それらのメモリ位置にアクセスすることが可能でないと判定され得る。この挙動を実装するために、装置は、1つ以上の除外タグ値を指定するタグマッピング更新要求に応答して、タグマッピング記憶回路を、ガードタグ及びアドレスタグの少なくとも一方が1つ以上の除外タグ値のうちの1つを有することをタグチェックが識別したときにはターゲットアドレスへのメモリアクセスが許可されないことを示すマッピング情報の新しいセットを示すように設定するように構成されたタグマッピング設定回路を備えることができる。マッピング情報は、これらのメモリ位置が、いくつかの方法ではアクセスされないことを示し得る。例えば、マッピング情報のセットは、禁止されたメモリ位置に関連付けられた1つ以上のタグ値には、タグチェックにおいて一致を引き起こす対応するタグ値がないように設定され得る。これは、マッピング情報中の全てのフィールドを除外タグ値以外の値に設定することによって達成することができる。代替的又は追加的に、マッピング情報は、そのマッピング情報のセットを使用するときに、指定されたメモリ位置へのいかなる形態のアクセスも許可されないことを示す許可情報を含むことができる。
【0055】
いくつかの例では、タグマッピング設定回路は、タグマッピング更新を実行するときに、1つ以上の既存のタグマッピングを「ピン固定する(pin)」機能を提供する。例えば、マッピング情報中の同じセット内の他のマッピングを更新したときに、依然として使用中であるマッピングが維持され、上書きされないことを保証することが望ましい場合がある。したがって、タグマッピング設定回路は、更新から除外すべき1つ以上の既存のタグマッピングを指定するタグマッピング更新要求に応答して、1つ以上の既存のタグマッピング以外のタグマッピングを更新するように、タグマッピング記憶回路を設定するように構成されてもよい。したがって、指定された既存のタグマッピングを変更しないまま、タグマッピング記憶回路に記憶するために、マッピング情報の更新されたセットを生成することができる。場合によっては、そのような更新を実行するとき、タグマッピング設定回路は、「ピン固定された」タグ値に既に関連付けられた対応するタグ値を「ピン固定された」ものとしてマークされていないタグ値にマッピングすることを回避するように構成されている。例えば、ある特定のガードタグ値が「ピン固定された」場合、「ピン固定された」ガードタグ値に対するマッピングを更新しないことに加えて、タグマッピング設定回路は、任意の「ピン固定されていない」ガードタグ値を「ピン固定された」ガードタグ値に関連付けられたアドレスタグ値に関連付けることを回避し得る。これは、アドレスタグ値が「ピン固定された」場合と同様に実行され得ることが理解されよう。
【0056】
いくつかの例では、装置は、全一致タグマッピング更新要求に応答して、全てのガードタグ値を同じアドレスタグ値にマッピングすべきであることを示すマッピング情報の新しいセットを示すようにタグマッピング記憶回路を設定するように構成されたタグマッピング設定回路を備えている。これを行うことによって、単一のアドレスタグ値を使用して、ガードタグのうちのいずれかに関連付けられたメモリ位置にアクセスすることができる。場合によっては、ガードタグ値の全てがマッピングされる1つのアドレスタグ値を使用するときに、タグチェックにおいて不一致が検出されないことを保証することができるように、全一致機能を一時的に提供することが有益であり得る。これは、タグの使用をサポートしないレガシーコードのサポートを提供するのに有用であり得る。
【0057】
上述のように、タグチェックにおいて不一致を検出したことに応答して、エラー応答アクションを実行することができる。更に、要求されたアクセスタイプが許可情報によって許容可能として示されていないアクセス試行を検出したことに応答して、エラー応答アクション(同じエラー応答アクションであっても、又は異なるエラー応答アクションであってもよい)を実行することができる。エラー応答アクションは、いくつかの可能なアクションのうちの1つ以上を含み得る。エラー応答アクションは、ターゲットアドレスにより指定されたメモリ位置へのアクセスを拒否することを含み得る。タグチェックが失敗した場合に、要求されたメモリ位置へのアクセスを拒否することは、メモリセキュリティが向上し得る。しかしながら、タグチェックは、メモリからガードタグをフェッチする必要があるので、実行するのに時間がかかり、タグチェックが合格するまで実際のメモリアクセスが遅延することによって、いくつかの実装形態では許容できない性能コストを招くおそれがある。タグチェックは、それ自体が重大なセキュリティ上の問題にはなり得ないが、将来攻撃者が悪用するリスクを提供し得るコード中のメモリエラーを識別するために使用されることがあるので、アクセスの進行を依然として可能にしながら、不一致のインジケーションを提供するだけで十分であり得る。これにより、性能を向上させることができる。したがって、エラー応答アクションは、タグチェックが不一致を検出したというインジケーションをステータスレジスタに入れること、エントリをエラー報告に記録すること、又は他の場合には、障害をシグナリングすることを含み得る。エラー応答アクションは、不一致が検出されたこと、並びに、不一致を引き起こした命令が記憶されている位置及び/又はアクセスが求められた位置のアドレス、を示すことができる。いくつかの例では、装置は複数のモードで動作可能であり、異なるエラー応答アクションは、異なるモードで実行される。例えば、装置は、不一致が検出されたにもかかわらずアクセスの進行が許可される非精密モード、及び、不一致を検出したことに応答して、ターゲットアドレスにより指定されたメモリ位置へのアクセスが拒否される精密モードで動作可能であり得る。不一致を検出したことに応答して実行され得るいくつかの可能なエラー応答アクションが存在し、2つ以上のそのようなエラー応答アクションは、不一致の検出に応答して実行され得ることが理解されよう。
【0058】
図1は、データ処理装置2の例を概略的に示す。これは、単に、装置の構成要素のサブセットの高レベル表現であり、装置は、図示されていない多くの他の構成要素を含み得ることが理解されよう。装置2は、命令デコーダ6によってデコードされた命令に応答して、データ処理を実行するための処理回路4を備えている。命令デコーダ6は、命令キャッシュ8からフェッチされた命令をデコードして、命令により表された対応する処理演算を実行するように処理回路4を制御するための制御信号を生成する。処理回路4は、レジスタ14に記憶された値に対して演算を実行して、レジスタに書き戻される結果値を生成するための1つ以上の実行ユニットを含むことができる。例えば、実行ユニットは、算術演算又は論理演算を実行するための算術/論理ユニット(arithmetic/logic unit、ALU)、浮動小数点オペランドを使用して演算を実行するための浮動小数点ユニット、及び/又は複数の独立したデータ要素を含むオペランドに対してベクトル演算を実行するためのベクトル処理ユニットを含んでもよい。処理回路はまた、レジスタ14とメモリシステムとの間のデータの転送を制御するためのメモリアクセスユニット(又はロード/ストアユニット)15を含む。この例では、メモリシステムは、命令キャッシュ8、レベル1データキャッシュ16、データと命令との間で共有されるレベル2キャッシュ17、及びメインメモリ18を含む。他のキャッシュ階層も可能であり、これは一例にすぎないことが理解されよう。メモリ管理ユニット(MMU)20は、ロード/ストアユニット15によりトリガされるメモリアクセスをサポートするアドレス変換機能を提供するために提供される。MMUは、メモリシステム16、17、18に記憶されたページテーブルからのエントリのサブセットをキャッシュするためのトランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)22を有する。各ページテーブルエントリは、アドレスの対応するページについてのアドレス変換マッピングを提供することができ、ページが読み出し専用領域であるか又は読み出し可能かつ書き込み可能であるかを指定するアクセス許可、あるいは、どの特権レベルがページにアクセスできるかを指定するアクセス許可など、アクセス制御パラメータを指定することもできる。
【0059】
図2は、ガードタグとアドレスタグとを比較することに基づく例示的なタグチェックを示す。メモリシステム内のメモリ位置を参照するために使用される物理アドレス空間は、ある特定の数のアドレス指定可能な位置を各々が含むいくつかのブロック30に論理的に分割することができる。簡潔にするために、
図2の例では、各ブロック30は4つのメモリ位置を含んでいるが、同様に他のブロックサイズを使用してもよい。各ブロック30は、対応するガードタグ32に関連付けられている。ある特定の数のブロック30に関連付けられたガードタグは、一緒に集められ、同じ物理アドレス空間内のアーキテクチャ的にアクセス可能な異なるメモリ位置34内、又はアーキテクチャ的にアクセス可能でない(同じ物理アドレス空間にマッピングされない)メインメモリ18内に提供される追加の記憶位置内のいずれかに記憶され得る。別個の非アーキテクチャ的にアクセス可能な記憶域の使用は、場合によっては、ガードタグ値をキャッシュするためのデータキャッシュ16、17内の空間を使い果たすことを回避するために好ましい場合があり、これにより、レギュラーコードの性能が影響を受ける可能性があり、コヒーレンシ管理がより複雑になる可能性がある。メインメモリ18からタグにアクセスしなければならない場合よりも速くアクセスするためには、非アーキテクチャ的にアクセス可能な記憶域に対するタグ値をキャッシュするための追加のタグキャッシュ19(
図1に示す)をマイクロアーキテクチャに提供してもよい。どのタグ記憶位置34が各ブロック30に対応するかの特定のマッピングは、ロード/ストアユニット15により制御されてもよく、ハードワイヤードされても、あるいはプログラム可能であってもよい。
図2では、各タグ32が物理アドレスのブロックに関連付けられている一方で、仮想メモリアドレス空間内に仮想メモリ位置に関連付けられたガードタグ32を提供することも可能であるが、これにより、各メモリアクセスに対していくつかの追加のアドレス変換が要求されることがある。したがって、ガードタグ32を物理メモリ位置に関連付けることによって、性能を向上させることができる。一般に、物理アドレス空間の対応するブロック30にガードタグ32が厳密にはどのように関連付けられるかは、特定のマイクロアーキテクチャ実装のための選択である。一般に、メモリの所与のブロックに関連付けられたガードタグ32にアクセスし、比較できることしか要求されない。
【0060】
したがって、タグチェックが要求される場合、(アクセスされるアドレス指定された位置44を識別するターゲットアドレス42に関連付けられている)アドレスタグ40と、アドレス指定された位置44を含むメモリ位置のブロック30に関連付けられているガードタグ32とに基づいて比較が実行される。例えば、
図2では、ターゲットアドレス42は、
図2のアドレス空間内で44とマークされている、メモリ内のある特定の位置B1を指す。したがって、比較は、位置B1を含む位置ブロックBに関連付けられているガードタグBと、ターゲットアドレス42に関連付けられたアドレスタグ40とに基づく。アドレスタグ40は、ターゲットアドレス自体の選択されたビットの関数として判定され得る。特に、アドレスタグは、アドレス指定された位置44として選択される特定のメモリ位置を示すためには使用されてないターゲットアドレスの一部分内のビットから判定され得る。例えば、いくつかのアーキテクチャでは、ターゲットアドレスのビットの上位部分は、符号拡張(全て0又は全て1)などのある特定の固定値を常に有することがあり、したがって、アドレスは、これらの未使用ビットを任意のタグ値で上書きすることによってアドレスタグ40でタグ付けすることができる。特定のタグ値は、プログラマ又はコンパイラによって選択しても、あるいはランダムに選択してもよい。アドレスタグ及びガードタグ32は、比較的小さいビット数、例えば4ビットとすることができ、したがって、メモリ内及びターゲットアドレス内で多くの空間を占有する必要はない。
【0061】
所与のメモリ位置にアクセスする要求に応答して、タグチェックを実行して、そのアクセスが許可されるか否かを判定することができる。いくつかの実装形態では、全てのメモリアクセスについて、タグチェックを実行することができる。しかしながら、タグチェックを実行するか否かをソフトウェアが選択する構成オプションを提供することが好ましいことがある。この場合、制御レジスタに記憶された構成情報によってタグチェックが有効化される場合、メモリアクセスをタグ保護されたメモリアクセスとして扱うことができ、各メモリアクセスのターゲットアドレスについてタグチェックが実行され得るが、構成情報によってタグチェックが無効化される場合、タグチェックを実行せずにメモリアクセスを実行することができる。また、いくつかの実装形態は、メモリアクセスのサブセットをタグチェックを必要とするものとして定義し、他のメモリアクセスをタグチェックを必要としないものとして定義する能力をサポートすることができる(例えば、タグチェックが有効化されている場合、ターゲットアドレスに対してタグチェックが実行されるタグ保護されたメモリアクセスとしてメモリアクセスを扱うべきかどうかを示すために、別個のタグチェックメモリアクセス命令及び非チェックメモリアクセス命令をサポートしてもよい)。
【0062】
メモリアクセス回路15は、追加的又は代替的に、メモリアクセスをトリガすることなく、タグチェックが要求されるターゲットアドレスを指定する専用のタグチェック命令に応答してタグチェックを実行することをサポートすることができる。
【0063】
メモリアクセス回路15は、タグチェック回路62及びタグマッピング記憶回路64を備えている。タグマッピング記憶回路64は、ガードタグ及びアドレスタグの少なくとも一方の値とリマッピングされたタグ値との間のマッピングを示すマッピング情報を記憶するように構成されている。マッピング情報は、ガードタグ値とリマッピングされたガードタグ値との間の、アドレスタグ値とリマッピングされたアドレスタグ値との間のマッピングを提供することができ、又はガードタグ及びアドレスタグの両方についてのマッピング情報を提供することができる。タグチェック回路62は、タグマッピング記憶回路64に通信可能に結合される。
【0064】
したがって、関連付けられたアドレスタグ40を有するターゲットアドレス42に応答して、マッピング情報を使用して、タグチェック回路62は、ガードタグ32、アドレスタグ40、又は両方をリマッピングして、タグチェックがそれに基づくリマッピングされたタグを生成する。ガードタグ32及びアドレスタグ40のうちの1つをリマッピングしてリマッピングされたタグを形成する場合、タグチェック回路62は、リマッピングされたタグとリマッピングされなかったガードタグ32及びアドレスタグ40の一方とを比較して、それらが一致するかどうかを判定する。ガードタグ32とアドレスタグ40の両方をリマッピングして、リマッピングされたタグ値を生成する場合、2つのリマッピングされたタグ値を比較して、それらが一致するかどうかを判定するために比較される。タグチェック回路62がタグチェックにおいて不一致を検出した場合、タグチェック回路62は、(
図1に示した)障害信号60を出力するなどのエラー応答アクションを実行する。一致があったか否かを示すステータスレジスタを更新すること、あるいはエラーが検出されたアドレス及び/又はエラーをトリガした命令の命令アドレスを示すエントリをエラー報告に追加することなど、システムの要件に応じて実行され得るいくつかの可能なエラー応答アクションがあることが理解されよう。
【0065】
図3は、アドレスタグ及びガードタグのうちの少なくとも一方をリマッピングすることに関与するタグチェックを実行する方法を示すフロー図である。ステップ102において、ターゲットアドレス及びアドレスタグを受信する。場合によっては、アドレスタグは、実際には、ターゲットアドレス自体のビットのサブセットから導出され得るが、他の例では、別個のレジスタ内で指定され得る。ターゲットアドレスは、アクセスが求められるメモリ位置を指定することができ、メモリ位置は、関連付けられたガードタグを有するメモリ位置のブロックの一部であり、そのガードタグをステップ104において識別する。ステップ106において、ガードタグ及びアドレスタグの少なくとも一方をリマッピングして、ステップ108において実行されるタグチェックにおいて使用されるリマッピングされたタグを生成する。タグチェックは、リマッピングされたタグとリマッピングされなかったガードタグ及びアドレスタグの一方とを比較する。ステップ110に示すように、タグチェックにおいて不一致が検出された場合、ステップ114において、ステータスレジスタにインジケーションを入れること、エントリをエラー報告に記録すること、障害をシグナリングすること、又はターゲットアドレスにより識別されるメモリ位置へのアクセスを拒否することなどのエラー応答アクションを実行することができる。ステップ112において、メモリ位置へのアクセスを、
図3の点線により示されるような2つの工程のうちの1つで許可することができる。メモリ位置へのアクセスは、タグチェックの結果にかかわらず許可することができ、したがって、タグチェックが実行される前に許可されることさえある。これを行うことによって、ガードタグがメモリから返され、タグチェックが実行されるのを待つ必要なしにアクセスを開始することができるので、性能が向上し得る。代替的に、メモリ位置へのアクセスは、ステップ110において一致が検出された場合にのみ許可され得る。したがって、適切なアドレスタグが提供されたアクセスのみを実行することを許可することができる。メモリアクセス回路15は、これらの手法のうちの1つのみを実行するように構成されてもよく、又は2つ以上のモードで動作することが可能であってもよく、したがって、異なるモードにあるとき、両方の変形形態による方法を実行してもよい。
【0066】
上述したように、ガードタグ及びアドレスタグの少なくとも一方は、タグマッピング記憶回路64に記憶されたマッピング情報を使用してリマッピングされる。
図4は、ガードタグをリマッピングする例示的なタグチェックを示す。
図4は、0b1001の値を有するアドレスタグ40を含んでいるターゲットアドレス42を示す。ターゲットアドレス42は、値0b0011を有するガードタグ32に関連付けられているメモリ18内のメモリ位置44を指定する。この例では、アドレスタグ及びガードの長さは両方とも4ビットであり、したがって、アドレスタグ及びガードタグの各々について16個の可能な値がある。タグマッピング記憶回路64は、マッピング情報を記憶しているマッピングレジスタ68を含む。このマッピング情報は、ガードタグ32をリマッピングされたタグ52にマッピングするために使用される。
図4に示す例では、マッピング情報は、複数のビットセットを含む。各ビットセットは、異なるガードタグ値についてのリマッピングされたアドレスタグ値を指定するマッピング情報中のフィールドを表す。ガードタグ32に対応するマッピング情報の項目は、マッピングレジスタ68において識別される。
図4に示すように、これは、リマッピングされたタグ値が記憶されているマッピングレジスタ68のビット12~15に対応する。次に、アドレスタグ40とリマッピングされたタグ52とを比較することによって、タグチェックを実行することができる。この場合、リマッピングされたタグ52は、アドレスタグ値と同じ1001の値を有し、したがって、タグチェックは一致を検出する。
【0067】
図4に示す例では、ガードタグ、アドレスタグ、及びリマッピングされたタグ52は全て同じ長さである。しかしながら、いくつかの例では、マッピング情報は、異なる長さのタグを互いにマッピングすることができる。
図5は、リマッピングされたガードタグ及びアドレスタグがガードタグよりも長い例示的なタグチェックを示す。この例では、アドレスタグ40は、0b10101001の値を有する8ビット長であり、ガードタグは、0b0001の値を有する4ビット長である。マッピングレジスタ68に記憶されたマッピング情報は、タグチェックにおいて使用するために、4ビットのガードタグ32を8ビットのリマッピングされたタグ52にマッピングする。このようにして、異なるスレッドについてのマッピング情報においてアドレスタグの別個のセットを割り当てることができることなど、より長いタグ値を有する利点の多くは、より長いガードタグを記憶するためにメモリ内のより多くの空間を使い果たすことなく達成することができる。いくつかのアーキテクチャでは、ターゲットアドレスのビットの上位部分は常に、ある特定の固定値を有し得る。これは、命令セットアーキテクチャは、ある特定のビット数(例えば、64ビット)を有するアドレスをサポートし得るが、所与のハードウェアデバイスは、実際には、そのビット数を使用して表すことができる全ての可能なアドレスを使用するほど多くのメモリ容量を必要としない場合があるので生じ得る。例えば、デバイスの使用における現在の傾向では、まだ、2
64個の個々のアドレス指定可能な位置を提供する必要はない。したがって、しばしば、メモリアドレスのいくつかのビットは、事実上使用されない場合がある。したがって、これらのビットを使用して、アドレスタグを得るために別個のレジスタにアクセスする必要を回避するために、アドレスタグ又はアドレスタグを導出するための値を記憶することができる。未使用ビットの数は、アドレスの長さに影響を与えることなく、又はアドレスタグを記憶するために別個のレジスタを使用する必要なしに、8ビット以上の長さのアドレスタグが記憶され得るのに十分であり得る。より長いガードタグを使用することなく、より長いアドレスタグを利用することによって、ガードタグの記憶に充てられるメモリ内のより多くの空間を必要とせずに、又はアドレスタグのための余分な記憶域を必要とせずに、メモリセキュリティを向上することができる。
【0068】
図6は、リマッピングされたガードタグ及びアドレスタグがガードタグよりも長い、別の例示的なタグチェックを示す。
図6の例では、簡潔にするために、ターゲットアドレス及びメモリは示されておらず、タグ及びそれらの比較のみが図解されている。この例では、ガードタグ32をリマッピングして、ガードタグ32よりも長く、アドレスタグ40と同じ長さのリマッピングされたタグ52が生成される。次に、アドレスタグ40とリマッピングされたタグ52とをタグチェックにおいて比較する。この例では、アドレスタグ40とリマッピングされたタグ52とが、同じ値を有するので、タグチェックにおいて一致が検出され、エラー応答アクションは実行されない。しかしながら、例えば、リマッピングされたタグ52の値とアドレスタグ40の値が異なっていることを理由に不一致が検出された場合、エラー応答アクションが実行される。
【0069】
図4~
図6に示す例では、ガードタグをリマッピングし、リマッピングされたガードタグをアドレスタグと比較した。これにより、例えば、より長いアドレスタグの使用をより容易にすることによって、マッピングがどのように構築され得るかに関して、より高い柔軟性が提供され得る。しかしながら、
図7に示すように、代わりに、アドレスタグ40に、タグマッピング記憶回路64に記憶されたマッピング情報に基づくリマッピングを行って、ガードタグ32との比較のためのリマッピングされたアドレスタグ52を生成してもよい。これにより、より迅速にタグチェックを実行することが可能になる。ガードタグ32は、タグキャッシュ19からフェッチされる必要があり得、あるいは、ガードタグがタグキャッシュ19内で見つからない場合にはメモリシステムからフェッチされる必要があり得る。したがって、アドレスタグ40をリマッピングすることによって、リマッピングのプロセスを、ガードタグ32のフェッチと少なくとも部分的に並行して実行することができ、それによって、ターゲットアドレスを受信してからタグチェックにおいて一致があるかどうかを判定するまでにかかる時間が短縮される。図示されていないが、いくつかの例では、ガードタグとアドレスタグの両方をリマッピングして、タグチェックにおいて互いに比較される2つのリマッピングされたタグを生成する。
【0070】
図8は、許可のチェックに関与する例示的なタグチェックを示す。タグの値をチェックすることに加えて、許可チェックを実行して、タグチェックを開始したアクセス要求のタイプが許可される形式のアクセスであるかどうかを判定する。
図8の例では、アドレスタグ40は、4ビットのガードタグ32に基づく8ビットのリマッピングされたタグ52と比較される8ビットのアドレスタグである。アドレスタグ値との比較のために、ガードタグ値とリマッピングされたタグ値との間のマッピングを記憶しているだけでなく、タグマッピング記憶回路64は、各マッピングについての許可情報を記憶しているマッピングレジスタ68を備えている。
図8に示すように、ガードタグ32に関連付けられたマッピング情報の項目は、対応するリマッピングされたタグ52並びに許可情報54を記憶している。この例では、読み出し、書き込み、及び実行の3つのタイプのアクセスがサポートされる。許可情報は、マッピング情報の各項目について、これらのタイプのうちどのアクセスの発生が許可されるかを示す。他の例では、異なるタイプのアクセス及び対応する許可がサポートされ得る。追加的又は代替的に、マッピング情報の項目により識別されるガードタグに関連付けられたメモリ位置のブロックに適用可能なキャッシュポリシーを示す属性など、要求されたアクセスに関する他の情報をマッピング情報に提供してもよい。リマッピングされたタグ値とアドレスタグ値とが一致するかどうかをチェックするだけでなく、マッピングレジスタ68に記憶された許可情報を使用して許可チェックを実行し、要求されたアクセスが許可されるかどうかを判定する。要求されたアクセスが許可されないと判定した場合、エラー応答アクションを取ることができるが、これは、タグ値間で不一致が検出されたときに取られるエラー応答アクションと同じエラー応答アクションであっても、又は異なるエラー応答アクションであってもよい。
【0071】
許可情報を提供することによって、許可されるアクセスのタイプを制約することができる。これは、ある特定のメモリ位置への読み出しアクセスのみを実行することが予想されるプログラムが、それらの位置にコードを書き込まないこと又はそれらの位置からコードを実行しないことを保証するために使用しても、あるいは、コードがそのようにしており、障害がある可能性があることを識別するために使用してもよい。許可情報はまた、書き込み実行排他性を保証するために使用されてもよい。プロセッサにより後で実行されるコードの悪意のある又は偶発的な変更を防止するために、書き込むことができるメモリの領域に記憶されたコードを実行できないことを保証することが、セキュリティ上の目的のためにはしばしば望ましい。異なる許可が各ブロックに関連付けられ得るので、メモリ位置のブロックの粒度レベルで許可が実装され得ることが理解されるであろう。したがって、この手法は、任意の許可情報が各ページテーブルエントリに関連付けられたメモリの領域全体に適用可能であるページテーブルに基づいてMMUにより実行される任意の許可チェックよりも細かい粒度の許可制御を提供し得る。タグマッピング情報に基づく任意の許可チェックは、MMUにより実行されるページテーブルに基づく許可チェックに加えて実行される許可チェックの追加の形態と見なされ得る(タグマッピング情報ベースの許可チェックが実行される場合、これは、MMUチェックも実行されることを妨げない)。
【0072】
図9は、マッピング情報と共に記憶された許可情報のチェックに関与する別の例示的なタグチェックを示す。この例では、メモリアクセス回路15は、アクセスタイプ44により示されるような読み出しアクセス要求を受信する。アクセス要求は、ガードタグ32に関連付けられたメモリ位置30のブロックが備えているメモリ位置を指定する。タグマッピング記憶回路64により記憶されたマッピング情報を使用して、ガードタグ32をリマッピングして、リマッピングされたタグ52を生成する。この例では、タグマッピング情報は、関連付けられたガードタグ値及び許可情報に一致するアドレスタグ値で構成される複数のリマッピングされたタグ値フィールドを指定する。このようにしてマッピング情報を構成することによって、アドレスタグ値及び許可情報を適切なガードタグ値に容易に関連付けることができ、この情報は、マッピング情報の個々の項目について容易に更新又は変更され得る。
【0073】
リマッピングされたタグ52を生成するために、マッピング情報内でガードタグ値0b0100をルックアップし、対応するアドレスタグ値が0b10101001であり、そのガードタグ52に関連付けられたメモリ位置のブロックへの許可されるアクセスのタイプが読み出し及び書き込みであることを識別することができる。次に、タグチェックにおいて、リマッピングされたタグ52とアドレスタグ40とを比較し、許可チェックにおいて、許可情報54により示される許可されるアクセスタイプと要求されたアクセスタイプ44とを比較する。この例では、アドレスタグ40とリマッピングされたタグ52とが一致し、要求されたアクセスタイプ44が許可されるアクセスタイプであり、したがって、エラー応答アクションは実行されない。これらのチェックのいずれか又は両方が不一致を検出した場合、エラー応答アクションが実行され得る。
【0074】
図8及び
図9は、マッピング情報の各項目について許可情報を記憶するためにフィールドが使用される例を示している。したがって、マッピング情報の同じセットについて、(マッピング情報にインデックス付けするために使用されるガードタグ/アドレスタグの一方の異なる値に対応する)マッピング情報の異なる項目は、異なる許可を有し得る。しかしながら、許可情報は、いくつかの他の方法で記憶され得る。例えば、マッピング情報の別個のセットが、複数の可能なアクセスタイプの各々について記憶され得る。この手法は、装置によりサポートされる読み出しアクセスタイプ、書き込みアクセスタイプ、及び実行アクセスタイプの各々のためのマッピングレジスタ68を備えるタグマッピング記憶回路64を示す
図10に示されている。アドレスタグ40及びアクセスタイプ44を指定するアクセス要求に応答して、タグマッピング記憶回路64に記憶されたマッピング情報の適切なセットに基づいて、ガードタグ32がリマッピングされる。この場合、アクセス要求は読み出しアクセス要求であり、したがって、ガードタグ32は、読み出しアクセスタイプに対応するマッピングレジスタ68に記憶されたマッピング情報のセットに基づいてリマッピングされる。読み出しアクセスタイプについてのマッピング情報のセットは、ガードタグ32に対するリマッピングされたタグ値が0b1011であることを示し、したがって、リマッピングされたタグ52は0b1011の値を有する。このリマッピングされたタグ値52は、タグチェックにおいてアドレスタグ40と比較される。タグ値が同じであるので、不一致は検出されず、したがって、要求されたターゲット位置に対して要求されたタイプのアクセスを実行するための適切なアドレスタグが提供されたと判定されたので、エラー応答アクションは実行されない。しかしながら、書き込みアクセスを試みて実行するために0b1011の値を有する同じアドレスタグ40が使用される場合、ガードタグ32をリマッピングするためにマッピング情報の異なるセットが使用され、その結果、アドレスタグ40と一致しない異なるリマッピングされたタグ52が生じる可能性がある。
図10に示すように、書き込みアクセスが代わりに要求される場合、異なるマッピング情報を記憶している異なるマッピングレジスタ68が使用され、ガードタグ32は、0b0011の値を有するリマッピングされたタグ52を生成するようにリマッピングされる。したがって、タグチェックは、0b1011の値を有するアドレスタグ40と0b0011の値を有するリマッピングされたタグ52との間の不一致を検出し、したがって、エラー応答アクションが実行される。このようにして、有効なアドレスタグが、意図されたものとは異なるタイプのアクセスのために再使用されることに起因して生じるメモリエラーを、識別する、防止する、かつ/又はログ記録することができる。
【0075】
アクセスの各タイプについてマッピング情報のセットを提供することに加えて、又はその代わりに、マッピング情報の各セットを、処理回路4により実行可能な特定のスレッドに関連付けてもよい。
図11は、実行されているスレッドに基づいて、使用すべきマッピングを選択することに関与する例示的なタグチェックを示す図である。この例では、ガードタグ32をリマッピングするとき、使用すべきマッピング情報のセットは、処理回路4上で実行されているスレッドに基づいて選択される。タグマッピング記憶回路64は、異なるスレッドに対応する複数のマッピング情報のセットを記憶するように構成されており、処理回路4上で実行されているスレッドのスレッドID46は、マッピング情報のどのセットを使用すべきかを識別するために使用される。
図11に示すように、スレッドID64は0x12A7であり、したがって、スレッド0x12A7に関連付けられたマッピング情報のセットは、0b1011の値を有するリマッピングされたタグ52にガードタグ32をマッピングするために使用される。このリマッピングされたタグ値52は、タグチェックにおいてアドレスタグ40と比較される。この場合、タグは同じ値を有するので、不一致は検出されず、エラー応答は実行されない。しかしながら、同じアドレスタグ40が、0x12A8のスレッドIDを有するスレッドなど、処理回路4上で実行されている別のスレッドにより使用される場合、そのスレッドIDに関連付けられたマッピング情報を使用してガードタグ32をリマッピングして、0b0011のリマッピングされたタグ値を生成する。その結果、タグチェックは、リマッピングされたタグ52とアドレスタグ40との間の不一致を検出し、エラー応答アクションが実行される。したがって、この技法は、異なるスレッドが使用するために有効に生成された可能性があるアドレスタグ40を再使用しようと試行しているスレッドを検出することができ、これは、スレッドを互いからサンドボックス化するのに役立ち得る。
【0076】
図11に示すように、タグマッピング記憶回路64は、マッピング情報の複数のセットをマッピングレジスタ68のバンクに記憶するように構成されている。このようにすると、いくつかのスレッドに対応するマッピング情報をタグマッピング記憶回路64に同時に記憶することができる。代わりに、マッピング情報の限られた数(例えば、1つ)のセットを一度に記憶するように、タグマッピング記憶回路64を構成してもよい。タグマッピング記憶回路64にマッピング情報の1つのセットが記憶されている場合、記憶されたマッピング情報のセットは、その時点で処理回路4上で実行されているスレッドに対応するマッピング情報のセットであり得る。処理回路4に異なるスレッドを実行させるコンテキストスイッチが生じる場合、メモリアクセス回路15は、タグマッピング記憶回路64に記憶されたマッピング情報を、実行されるスレッドに関連付けられたマッピング情報のセットと置き換えるように構成されていてもよい。この手法は、タグマッピング記憶回路64により要求される記憶域量を低減する。
【0077】
図12は、タグチェック回路62と、タグマッピング回路記憶回路64と、タグマッピング設定回路66と、を備える装置を概略的に示す。この例では、タグマッピング設定回路66は、マッピング情報の新しいセット又は更新されたセットを求める要求に応答して、そのようなマッピング情報の新しいセット又は更新されたセットをタグマッピング記憶回路64に提供するよう動作するために提供される。いつどのようにマッピング情報を設定又は更新すべきかを指定する機能を提供してもよい。タグマッピング設定回路66は、マッピング情報の新しいセットがどのように生成されるかを指定する複数のタイプの要求に応答し得る。タグマッピング設定回路66によってサポートされ得るタグマッピング設定回路66の要求のタイプ及び対応する挙動の例について、
図13~
図16を参照して以下に説明する。
【0078】
以下の例では、アドレスタグ値という用語は、対応するガードタグとの比較時にタグチェックにおいて一致を引き起こすアドレスタグの値を指すために使用される。これは、リマッピングされたタグ値と同じであり得る。以下の例では、アドレスタグ値は、各ガードタグ値が異なるアドレスタグ値に関連付けられるように設定されており、タグマッピング設定回路66は、各アドレスタグ値が異なるガードタグ値に関連付けられるようにガードタグ値を設定することをサポートし得る。
【0079】
図13は、タグマッピング設定回路66が、各ガードタグ値が異なるアドレスタグ値に関連付けられることを指定する要求に応答してタグマッピングを設定するように構成されている例を示す。そのような要求は、
図13ではシャッフル要求と呼ばれる。
図13を見ると分かるように、そのようなシャッフル要求によってタグマッピング設定回路66により生成されたマッピングは、各アドレスタグ値が1つ以下のガードタグ値に割り当てられることを示す。この例では、可能なガードタグ値の数が可能なアドレスタグ値の数と同じであるので、各アドレスタグ値は厳密には1つのアドレスタグ値に割り当てられるが、一般に、アドレスタグとガードタグの長さが異なる可能性がある場合にはこの限りではない。新しいマッピングを生成するとき、同じアドレスタグ値が異なるガードタグ値に関連付けられる状況を回避するために、ガードタグの全てが異なるアドレスタグにマッピングさせることが望ましい場合があるが、これは、これらのアドレスタグ値のうちの1つを有するアドレスタグが、メモリ位置が許可されないアクセスではない場合であっても、同じアドレスタグ値に関連付けられたガードタグと一致する可能性があるからである。どのアドレスタグ値が各ガードタグに関連付けられるかに関する選択は、ランダムであり得る。
図13は、ガードタグ値及びアドレスタグ値の各々に3ビット値が使用される例を示しているが、これらの技法は、アドレスタグがガードタグとは異なる長さを有する場合を含む他の長さのタグ値にも適用可能であることが理解されよう。
【0080】
図14は、ある特定のアドレスタグ値が選択から除外されるタグマッピングの設定の例を示す。タグマッピング設定回路66は、選択から除外すべき1つ以上の除外タグ値を指定する要求に応答して動作するように構成されている。
図14に示すように、これは、各アドレスタグ値について、アドレスタグ値を選択から除外すべきかどうかを示すために、各可能なアドレスタグ値に対するフィールドを含む除外マスクの使用によって示され得る。この例では、値1は、アドレスタグ値を選択から除外すべきであることを示すが、異なるマッピングを使用してもよいことが理解されよう。除外マスクに応答して、タグマッピング設定回路は、除外されたアドレスタグ値がガードタグ値に割り当てられないマッピング情報のセットを生成するように構成されている。この例では、3ビットのガードタグ値及び4ビットのアドレスタグ値が使用される。除外マスクの使用などによって、ある特定の値を選択から除外する場合には、各ガードタグ値に異なるアドレスタグ値が割り当てられる場合、ガードタグ値よりも多くの可能なアドレスタグ値が必要である、したがって、より長いアドレスタグが使用されることが理解されよう。しかしながら、いくつかの例では、異なるガードタグ値に対して同じアドレスタグ値の再使用が許容可能であり得る。したがって、そのような例では、アドレスタグとガードタグとが同じビット数を有する場合であっても、除外マスクが使用され得る。これは、タグチェックにおいて誤一致が検出される確率を増加させるが、それにもかかわらず、マッピング情報中にタグ値の重複していないセットを提供することによって、スレッド/サンドボックス間の隔離を増大させることが有用であり得る。各ガードタグが異なるアドレスタグ値に割り当てられることを保証するために、この手法が取られるか、又はより長いアドレスタグが提供されるかは、プロセスのスレッド間のサンドボックス化及びスレッド内のメモリエラーの検出の相対的な優先度に基づき得る。いくつかの例では、装置2は、使用すべきリマッピングされたアドレスタグの長さを設定するために制御レジスタ内に構成情報を設定することによって、選択された手法を示すことができるソフトウェアを用いて両方の手法をサポートするように構成され得る。いくつかの実装形態では、タグマッピングがどのように実行されるかを制御するために使用される任意の制御情報への更新は、ある特定の特権レベル以上のソフトウェアに制限され得る(例えば、アプリケーションレベルコードが制御情報の設定を許可されないように、オペレーティングシステム又はハイパーバイザソフトウェアに制限される)。
【0081】
図15は、ある特定のガードタグ値が更新から除外されるタグマッピングの更新の例を示す。これらのガードタグ値は、マッピングを変更すべきではない「ピン固定された」値として示される。
図15に示すように、更新から除外すべきガードタグ値は、ガードタグ値を除外すべきかどうかを示すために、各可能なガードタグ値に対するフィールドを含む更新マスクを使用して示され得る。
図15の例では、値1は、マッピングを更新から除外すべきであることを示すが、他のマッピングを使用してもよいことが理解されよう。更新の前及びその後のマッピング情報は、更新マスクにより更新から除外されるものとして示されるマッピングを識別するためのアスタリスクと共に
図15に示される。これらのマッピングは更新の前と後で同じであることが分かる。他のマッピングは、タグマッピング設定回路66によって更新されている。マッピング情報のセットが更新されたときに変更されないある特定のマッピングを保証することが望ましい場合がある。ある特定のマッピングが「ピン固定されている」ことを保証することによって、タグマッピング設定回路66は、共有されるメモリ位置を含んでいるブロックに関連付けられたガードタグに対するマッピングが変更されないことを保証することができ、したがって、異なるスレッドに対する共通のアドレスタグが、それらの位置にアクセスするために使用され得る。タグマッピング設定回路66はまた、更新の実行時に「ピン固定された」タグ値に関連付けられたタグ値を割り当てることを回避し得る。これは、「ピン固定された」ガードタグ値010、011、及び101に関連付けられたアドレスタグ値1001、1110、及び0101は、他のガードタグ値のいずれにも割り当てられないので、
図15を見ると分かる。
【0082】
図16は、全てのガードタグ値が同じアドレスタグ値にマッピングされるタグマッピングの設定の例を示す。これは、提供されたアドレスタグが、ガードタグ値の全てがマッピングされるアドレスタグ値と同じ値を有する限り一致が検出されるので、タグチェック機能を事実上無効化するために望ましい場合がある。これは、タグ保護アクセスをサポートしないレガシーコードを扱うときに特に有利であり得る。この場合、全てのガードタグ値は、供給され得るアドレスタグのデフォルト値に設定され得る。上記で説明したように、いくつかのアーキテクチャでは、アドレスタグは、他の場合には全て所与の値に設定されるターゲットアドレスのビットから判定され得る。所与の値がアドレスタグによるターゲットアドレス(レガシーコードなど)において置き換えられない場合、それにもかかわらず、これらのビットは、タグチェックを実行するときにアドレスタグとして解釈され得、ガードタグ値の全てをこれらのビットのデフォルト値にマッピングすることによって、タグチェックを完全にバイパスする手段を提供する必要なしに全てのアクセスが許可され得る。
図16に示すように、ガードタグ値の全てがアドレスタグ値0b1111にマッピングされるが、代わりに別の値を使用してもよいことが理解されよう。
【0083】
図17は、使用され得るシミュレータ実装を示す。上記の実施形態は、関連技術をサポートする特有の処理ハードウェアを動作させる装置及び方法の点において本発明を実装するが、コンピュータプログラムを使用して実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的に、シミュレータ実装は、シミュレータプログラム210をサポートするホストオペレーティングシステム220を任意選択で実行して、ホストプロセッサ230で実行し得る。いくつかの構成では、ハードウェアと提供された命令実行環境との間に複数の層のシミュレーションがあってもよく、及び/又は、同じホストプロセッサ上に提供された複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行するシミュレータ実装を提供するために必要とされてきたが、そのような手法は、ある特定の状況において、例えば、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるときに、正当化され得る。例えば、シミュレータ実装は、ホストプロセッサハードウェアによってサポートされていない追加の機能を有する命令実行環境を提供してもよく、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬 USENIX Conference、53~63頁に記載されている。
【0084】
これまで、特定のハードウェア構成又は機能を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、適切なソフトウェア構成又は機能によって同等の機能を提供することができる。例えば、特定の回路は、シミュレーションされた実施形態において、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実施形態でソフトウェアのデータ構造として実装されてもよい。前述の実施形態で参照されているハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ230)に存在する構成では、いくつかのシミュレーションされた実施形態は、適する場合、ホストハードウェアを使用してもよい。
【0085】
シミュレータプログラム210は、(非一時的媒体であってもよい)コンピュータ可読記憶媒体212に記憶されてもよく、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード200に対するプログラムインタフェース(命令実行環境)を提供し、これはシミュレータプログラム210によってモデル化されたハードウェアアーキテクチャのインタフェースと同じである。したがって、ターゲットコード200のプログラム命令は、シミュレータプログラム210を使用して命令実行環境内から実行されてもよく、このため、上述の装置2のハードウェア特徴を実際には有しないホストコンピュータ230は、これらの特徴をエミュレートすることができる。例えば、シミュレータプログラム210は、ガードタグを識別し、タグチェックを実行し、タグチェックにおいて不一致を検出したことに応答して、ハードウェア実施形態の類似のタグチェック回路62がこれらの機能を実行する方法に対応する方法でエラー応答アクションを実行するための、タグチェックプログラム論理214を含むことができる。また、シミュレータプログラム210は、ガードタグ値と対応するアドレスタグ値との間のマッピングを示すマッピング情報を維持するためのタグマッピング維持プログラム論理216(上述のタグマッピング記憶回路64に類似する)を含んでもよい。
【0086】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされてもよい。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0087】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの精密な実施形態に限定されず、様々な変更及び修正が、添付の特許請求の範囲によって定義された本発明の範囲及び精神から逸脱することなく、当業者によってこれらの実施形態においてなされ得ることを理解されたい。
【国際調査報告】