(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-25
(45)【発行日】2024-04-02
(54)【発明の名称】タグ保護されたメモリ・システムのためのランダム・タグ設定命令
(51)【国際特許分類】
G06F 9/30 20180101AFI20240326BHJP
G06F 9/355 20180101ALI20240326BHJP
G06F 9/34 20180101ALI20240326BHJP
【FI】
G06F9/30 350A
G06F9/355 380
G06F9/34 380
(21)【出願番号】P 2020548809
(86)(22)【出願日】2019-02-12
(86)【国際出願番号】 GB2019050372
(87)【国際公開番号】W WO2019180402
(87)【国際公開日】2019-09-26
【審査請求日】2022-02-04
(32)【優先日】2018-03-20
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】バーンズ、グレイム ピーター
(72)【発明者】
【氏名】ボリソフ、ヤーセン ミロフ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許第09495305(US,B1)
【文献】米国特許出願公開第2006/0225135(US,A1)
【文献】米国特許出願公開第2017/0083255(US,A1)
【文献】米国特許第04241396(US,A)
【文献】欧州特許出願公開第02211285(EP,A1)
【文献】国際公開第2016/060817(WO,A1)
【文献】Nickolai Zeldovich, Hari Kannan, Michael Dalton, and Christos Kozyrakis,Hardware Enforcement of Application Security Policies Using Tagged Memory,8th USENIX Symposium on Operating Systems Design and Implementation(OSDI 2008),米国,usenix.org,2008年,225-240,https://www.usenix.org/legacy/event/osdi08/tech/full_papers/zeldovich/zeldovich.pdf
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30
G06F 9/355
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
装置であって、
処理回路と、
関連したアドレス・タグを有するタグ・チェックの対象となるアドレスに対してガード・タグ・チェックを実施するメモリ・アクセス回路であって、前記ガード・タグ・チェックが、前記アドレス・タグを、前記
タグ・チェックの対象となるアドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較することと、前記ガード・タグと前記アドレス・タグとの不一致が検出されたとき、エラー処理応答又はエラー報告機構をトリガすることとを含む、メモリ・アクセス回路と、
タグ設定宛先アドレスに関連付けられた前記アドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するべく前記処理回路を制御するために、前記タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答する命令デコーダであって、前記ランダム・タグ値が、前記ランダム・タグ設定命令の宛先レジスタに書き込まれる、前記命令
デコーダとを備える、装置。
【請求項2】
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、候補タグ値の前記セットの少なくとも1つの除外タグ値が前記ランダム・タグ値として選択されるのを防止するべく、及び前記候補タグ値の残りのサブセットから前記ランダム・タグ値をランダムに選択するべく前記処理回路を制御するように構成される、請求項1に記載の装置。
【請求項3】
前記少なくとも1つの除外タグ値が、前記ランダム・タグ設定命令によって指定された少なくとも1つのレジスタによって識別された1つ又は複数の除外タグ値を含む、請求項2に記載の装置。
【請求項4】
前記少なくとも1つの除外タグ値が、前記ランダム・タグ設定命令のソース・レジスタ又は宛先レジスタに指定されたアドレスに関連付けられたアドレス・タグに対応するタグ値を含む、請求項2又は3に記載の装置。
【請求項5】
前記ランダム・タグ設定命令が、ランダム選択状態情報を記憶する少なくとも1つのソース・レジスタを指定し、
前記ランダム選択状態情報が、候補タグ値の前記セットの少なくともサブセットに対応する複数のビットを含むビットフィールドを含み、前記ビットフィールドの各ビットが、前記対応する候補タグ値が前記少なくとも1つの除外タグ値の1つであるかどうかを示す、請求項2又は3に記載の装置。
【請求項6】
前記命令デコーダは、前記対応するタグ値が前記少なくとも1つの除外タグ値の1つであることを示すように、タグ除外宛先アドレスに関連付けられた前記アドレス・タグに対応する前記ビットフィールドのビットを更新するべく前記処理回路を制御するために、前記ランダム選択状態情報の前記ビットフィールドを記憶するための前記タグ除外宛先アドレス及び宛先レジスタを指定するタグ値除外命令に応答する、請求項5に記載の装置。
【請求項7】
前記ビットフィールドが、候補タグ値の前記セット全体に対応するビットを含む、請求項5又は6に記載の装置。
【請求項8】
前記ビットフィールドが、候補タグ値の適切なサブセットに対応するビットを含み、前記ランダム選択状態情報が、候補タグ値の前記適切なサブセット
のタグ値も含む、請求項5又は6に記載の装置。
【請求項9】
候補タグ値の前記適切なサブセットの前記タグ値が、前記ビットフィールドと同じレジスタに指定される、請求項8に記載の装置。
【請求項10】
前記命令デコーダが、候補タグ値の前記セットの中から候補タグ値の前記適切なサブセットをランダムに選択するべく、及び候補タグ値の前記選択された適切なサブセットの前記タグ値を宛先レジスタに書き込むべく前記処理回路を制御するために、前記ランダム選択状態情報
のタグ値を記憶するための前記宛先レジスタを指定するランダム・タグ選択命令に応答する、請求項8又は9に記載の装置。
【請求項11】
前記少なくとも1つの除外タグ値が、構成レジスタに記憶された構成データによって識別された1つ又は複数の除外タグ値を含む、請求項2から10までのいずれか一項に記載の装置。
【請求項12】
前記少なくとも1つの除外タグ値が、1つ又は複数のハードウェア定義除外タグ値を含む、請求項2から11までのいずれか一項に記載の装置。
【請求項13】
前記少なくとも1つの除外タグ値が、最大Nの除外タグ値を含み、前記ランダム・タグ設定命令に応答して、前記命令デコーダが、
候補タグ値の前記セットの少なくともN+1のタグ値をランダムに選択する、
前記選択されたタグ値のそれぞれを前記少なくとも1つの除外タグ値と比較する、及び、
前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグに設定するべき前記ランダム・タグ値として、前記少なくとも1つの除外タグ値のすべてに対して不一致である、前記選択されたタグ値のうちの1つを選択する
べく前記処理回路を制御するように構成される、請求項2から12までのいずれか一項に記載の装置。
【請求項14】
前記少なくとも1つの除外タグ値が、所定の除外タグ値、及び前記ランダム・タグ設定命令によって指定された追加の除外タグ値を含み、
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、
候補タグ値の前記セットの1つを、選択されたタグ値としてランダムに選択する、
前記選択されたタグ値が、前記所定の除外タグ値及び候補タグ値の前記セットの他の所定のタグ値の両方と不一致であるときには、前記選択されたタグ値、及び
前記選択されたタグ値が前記所定のタグ値及び前記他のタグ値のうちの一方と一致するときには、前記選択されたタグ値のランダムに選択されたビットを反転させることによって取得された値
の1つである中間値に対して前記追加の除外タグ値の比較を実施する、
前記比較により、前記追加の除外タグ値と前記中間値との不一致が検出されたとき、前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグに設定するべきランダム・タグ値として前記中間値を出力する、及び、
前記比較により、前記追加の除外タグ値と前記中間値との一致が検出されたとき、前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグに設定するべき前記ランダム・タグ値として前記他の所定のタグ値を出力する
べく前記処理回路を制御するように構成される、請求項2から12までのいずれか一項に記載の装置。
【請求項15】
前記所定の除外タグ値及び前記他の所定のタグ値の一方が、すべてのビットが0に等しい値を含み、前記所定の除外タグ値及び前記他の所定のタグ値の他方が、すべてのビットが1に等しい値を含む、請求項14に記載の装置。
【請求項16】
前記処理回路が、候補タグ値の前記セットから前記ランダム・タグ値を疑似ランダムに選択するように構成される、請求項1から15までのいずれか一項に記載の装置。
【請求項17】
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、前記タグ設定宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶された前記ガード・タグを前記ランダム・タグ値に更新するべく、前記メモリ・アクセス回路を制御するようにも構成され、又は
命令のシーケンスが、前記ランダム・タグ設定命令及び後続のガード・タグ・設定命令を含む場合に、前記命令デコーダが、前記タグ設定宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連して前記メモリ・システム内に記憶された前記ガード・タグを前記ランダム・タグ値に更新するべく、前記メモリ・アクセス回路を制御するように構成される、請求項1から16までのいずれか一項に記載の装置。
【請求項18】
前記ガード・タグ・チェックが、前記アドレス・タグと前記ガード・タグとの不一致が検出されたとき障害状態指示を返すステップを含む、請求項1から17までのいずれか一項に記載の装置。
【請求項19】
前記タグ・チェックの対象となるアドレスに関連付けられた前記アドレス・タグが、前記タグ・チェックの対象となるアドレスのビットのサブセットによって表され、
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、前記ランダム・タグ値に基づいて前記タグ設定宛先アドレスのビットのサブセットを更新するべく前記処理回路を制御するように構成される、請求項1から18までのいずれか一項に記載の装置。
【請求項20】
前記タグ設定宛先アドレスのビットの前記サブセットが、前記タグ設定宛先アドレスの少なくとも1つの他のビットに応じて前記ランダム・タグ値の変換に対応する変換されたタグ値に更新される、請求項19に記載の装置。
【請求項21】
前記ガード・タグ・チェックにおいて、前記アドレス指定された位置が、前記タグ・チェックの対象となるアドレスに関連付けられた前記アドレス・タグと関係なく選択される、請求項1から20までのいずれか一項に記載の装置。
【請求項22】
方法であって、
関連したアドレス・タグを有するタグ・チェックの対象となるアドレスに対するガード・タグ・チェックを実施するステップであって、前記ガード・タグ・チェックが、前記アドレス・タグを、前記
タグ・チェックの対象となるアドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップと、前記ガード・タグと前記アドレス・タグとの不一致が検出されたとき、エラー処理応答又はエラー報告機構をトリガするステップとを含む、実施するステップと、
タグ設定宛先アドレスを指定するランダム・タグ設定命令の復号に応答して、前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するステップであって、前記ランダム・タグ値が、前記ランダム・タグ設定命令の宛先レジスタに書き込まれる、前記設定するステップとを含む、方法。
【請求項23】
目的プログラム・コードの命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
関連したアドレス・タグを有するタグ・チェックの対象となるアドレスに対するガード・タグ・チェックを実施するメモリ・アクセス・プログラム論理であって、前記ガード・タグ・チェックが、前記アドレス・タグを、前記
タグ・チェックの対象となるアドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップと、前記ガード・タグと前記アドレス・タグとの不一致が検出されたとき、エラー処理応答又はエラー報告機構をトリガするステップとを含む、メモリ・アクセス・プログラム論理と、
タグ設定宛先アドレスに関連付けられた前記アドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するために、前記タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答するタグ設定プログラム論理であって、前記ランダム・タグ値が、前記ランダム・タグ設定命令の宛先レジスタに書き込まれる、前記
タグ設定プログラム論理とを含む、コンピュータ・プログラム。
【請求項24】
請求項23に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
(背景技術)
データ処理装置によって実行されるソフトウェアは、典型的には、高水準プログラミング言語で書き、次いで、ソフトウェアが実行されることになっている装置によってサポートされる命令セット・アーキテクチャに従ってコードにコンパイルすることができる。例えば、ソフトウェアは、最初はJava、C、C++などのより高い水準の言語で書き、次いで、x86やArm(R)などのネイティブにサポートされる命令セット・アーキテクチャにコンパイルすることができる。
【先行技術文献】
【非特許文献】
【0002】
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【発明が解決しようとする課題】
【0003】
Javaなどのいくつかの、より高い水準のプログラミング言語は、それらがメモリ・アクセスに関連したあるエラーの有無をチェックするためのラン・タイム・エラー検出チェックを含むので、メモリ安全な言語であるとみなされる。対照的に、CやC++などのメモリ安全でない言語は、そのようなラン・タイム・エラー・チェックを含まない。メモリ安全でない言語の使用が持続的に広がることは、所与の命令セット・アーキテクチャによるコンパイル済みコードに、攻撃者又は他の悪意のある当事者による利用に脆弱な恐れがある多数のメモリ関連エラーがある可能性があることを意味する。そのようなエラーは、
・ コードによって供給される配列の添え字が配列の正当な境界の外側にある、境界違反、
・ メモリ位置へのアクセスが、そのメモリ位置がすでに割当てを解除され又は解放されてしまった後に行われる、解放済みメモリ使用エラー、
・ 関数内で使用された変数(スタック上の値などの)に関連付けられたアドレスへのメモリ・アクセスがすでに関数から復帰した後に行われる、復帰後の使用、
・ 変数がそれらの宣言された範囲外でアクセスされる、範囲外使用エラー、及び
・ 変数に関連付けられたメモリ・アドレスが、変数が初期化されてしまう前にアクセスされる、初期化前使用エラー
を含み得る。
【0004】
これらは、結果として予測不可能な挙動となり、攻撃者が利用する手段を潜在的に提供することがあるメモリ関連エラーのほんのいくつかの実例に過ぎない。したがって、あるクラスのメモリ・エラーのラン・タイム検出を手助けするために、所与の処理装置によってサポートされる命令セット・アーキテクチャ内にアーキテクチャ・サポートを提供することが望ましい可能性がある。
【課題を解決するための手段】
【0005】
少なくともいくつかの実例は、処理回路と、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスのためのガード・タグ・チェックを実施するメモリ・アクセス回路であって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較することを含む、メモリ・アクセス回路と、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するべく処理回路を制御するために、タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答する命令デコーダとを備える装置を提供する。
【0006】
少なくともいくつかの実例は、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対するガード・タグ・チェックを実施するステップであって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップを含む、実施するステップと、タグ設定宛先アドレスを指定するランダム・タグ設定命令の復号に応答して、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するステップとを含む方法を提供する。
【0007】
少なくともいくつかの実例は、目的プログラム・コードの命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するコンピュータ・プログラムであって、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対するガード・タグ・チェックを実施するメモリ・アクセス・プログラム論理であって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップを含む、メモリ・アクセス・プログラム論理と、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するために、タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラムを提供する。
【0008】
記憶媒体が、上記に説明したコンピュータ・プログラムを記憶することができる。記憶媒体は非一時的記憶媒体でもよい。
【0009】
本技法の他の態様、特徴及び利点は、添付の図面と併せて読まれるものとする、以下の実例の説明から明らかであろう。
【図面の簡単な説明】
【0010】
【
図1】データ処理装置の実例を概略的に示す図である。
【
図2】アドレス・タグがガード・タグに一致するかどうかをチェックするステップを含む、タグ保護されたメモリ・アクセス動作の実例を示す図である。
【
図3】タグ保護されたメモリ・アクセス動作を実施する方法を示す流れ図である。
【
図4】ランダム・タグ設定命令の第1の実例を示す図である。
【
図5】候補タグ値のセットの少なくとも1つの除外値が、所与のアドレスのアドレス・タグに割り当てられるランダム・タグ値として選択されるのが防止される、ランダム・タグ設定命令の第2の実例を示す図である。
【
図6】除外値のうちの少なくともいくつかを示すためのランダム選択状態情報の第1の実例を示す図である。
【
図7】入力アドレスのアドレス・タグから抽出されたタグ値が、ランダム・タグ値の後続の選択から除外されることになっていることを示すようにランダム選択状態情報におけるビットフィールドのビットを更新するためのタグ値除外命令の実例を示す図である。
【
図8A】選択されることから少なくとも1つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【
図8B】選択されることから少なくとも1つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【
図9A】選択されることから少なくとも1つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【
図9B】選択されることから少なくとも1つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【
図10】選択されることから少なくとも1つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【
図11】候補タグ値のサブセットの値と、それらの値のそれぞれが除外されるかどうかを示す対応するビットフィールドとを指定するランダム選択状態情報の第2の実例を示す図である。
【
図12】ランダムに選択された値を候補タグ値のサブセットに追加するためのランダム・タグ選択命令の実例を示す図である。
【
図13】入力アドレスのアドレス・タグに基づいて、ランダム選択状態情報によって示される候補タグ値のサブセットのいずれかを除外するべきかどうかを決定するためのタグ値除外命令の第2の実例を示す図である。
【
図14】
図11に示すランダム選択状態情報に基づいて、所与のアドレスに関連付けられたタグ値をランダムに選択された値に更新するためのランダム・タグ設定命令の別の実例を示す図である。
【
図15】ランダム・タグ設定命令を処理する方法を示す図である。
【
図16】ランダム・タグ設定命令をサポートするシミュレータの実例を示す図である。
【発明を実施するための形態】
【0011】
上記に論じた種類の、あるメモリ使用エラーに対して保護する1つの方式は、1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されるガード・タグを提供することである可能性がある。タグ保護されたメモリ・アクセス動作が、メモリ・システムにおける特定のアドレス指定された位置を識別する宛先アドレスに基づいて要求されたとき、ガード・タグ・チェックを実施することができる。ガード・タグ・チェックにおいて、メモリ・アクセス回路は、宛先アドレスに関連付けられているアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されているガード・タグと比較することができる。メモリ・アクセス回路は、いくつかの実例において、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成することができる。この指示は、メモリ・アクセスが成功するように許可されているのかどうか、又は後続の動作が成功することができるのかどうか、又はメモリ・アクセスが正常であるものとして継続することを許可しながら単に報告することができるのかどうかを制御するのに使用することができる。
【0012】
これは、例えば、CやC++などのメモリ安全でない言語に基づいてコードをコンパイルするコンパイラが、メモリの領域を初期化するとき、コードがアクセスすることが予想されるメモリのブロックのガード・タグを特定の値に設定するので有用であり得、対応するアドレス・タグ値をそれらのブロックを指し示す宛先アドレスに関連付けることができる。メモリ使用エラーが起きた場合、例えば、アドレス・ポインタが範囲外で使用され、又は初期化された有効範囲の境界の外に及ぶ場合、アドレス指定された位置に関連付けられたガード・タグは、宛先アドレスに関連付けられたアドレス・タグに一致しない可能性がありそうである場合があり、この場合、エラー処理応答又はエラー報告機構をトリガすることができる。取られる特定の応答は、実行されるソフトウェアの特定の必要性に、又はアーキテクチャの特定のマイクロアーキテクチャ実装形態に依存することができる。したがって、高水準言語がメモリ・アクセス・エラーに対して保護するためにラン・タイム・エラー・チェックを実施する手段を有さなくても、コンパイル済みコードに使用されるISAは、そのようなチェックを実施するためのアーキテクチャの特徴を含むことができる。
【0013】
以下に論じる技法において、データ処理装置は、タグ設定宛先アドレスを指定するランダム・タグ設定命令をサポートする命令デコーダを有することができる。ランダム・タグ設定命令に応答して、命令デコーダは、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されるランダム・タグ値に設定するべく処理回路を制御する。
【0014】
この命令の形態は、いくつかの理由から有用であり得る。実際には、メモリ位置の各ブロックに対してガード・タグを記憶する記憶オーバーヘッドを制限するために、各ガード・タグにおけるビットの数は、相対的に少ない可能性があり、例えば、いくつかの実装形態において4ビットである可能性がある。タグ・ビットの数が少なければ少ないほど、単純に、そのメモリのブロックにアクセスすることが意図されていなかったにもかかわらず、同じガード・タグ値を有するメモリのブロックに対してたまたま一致したので、誤ったメモリ・アクセスがガード・タグ・チェックに合格する可能性が大きくなる。例えば、4ビットのガード・タグの場合、所与のアドレスに対する誤ったアクセスとして実際にフラグを立てるべきであるメモリの領域に対して、ガード・タグに対して誤って一致する可能性は16分の1である。
【0015】
所与の宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されるランダム・タグ値に設定するための命令を提供することによって、これは、デバイスのクラスが、それぞれ、同じコードを実行する場合、それらは同じアドレスに異なるランダム・タグ値を割り当てる可能性があることを意味する。まず、これはエラー検出を改善することができる。何故なら、たとえ、クラス内の1つのデバイスが誤ってアクセスされたメモリの領域に対して一致するタグ値をたまたま選択したとしても、クラス内の他のデバイスがランダム・タグ値として異なる値を選択していたことになり、したがって、ガード・タグの不一致を検出し、エラーを報告することができるためである。したがって、デバイスのクラスからエラー・レポートをクラウドソースすることによって、クラス内の少なくともいくつかのデバイスが、プログラム・コードの所与の部分においてアドレスに使用された、ランダムに選択された値の拡散により、エラーを検出することができる可能性がある。したがって、ランダム・タグ設定命令の使用により、メモリ関連エラーがデバイスの母集団において検出される確率が改善され得る。
【0016】
また、アドレス・タグに割り当てる値をランダムに選択することによって、これは、デバイスの大きな母集団に対して使用可能である攻撃を攻撃者が首尾よく開始することをはるかに困難にする。たとえ攻撃者がたまたま1つのデバイス上の正しいタグ値を推測することができたとしても、他のデバイスがプログラムの同じ個所において異なるランダムに選択されたタグ値をメモリ・アクセスに使用するので、攻撃者の首尾よい攻撃は、他のデバイスには効果を発しない可能性がある。これは、特に有用である。何故なら、実際には、有効な攻撃を開始するために、攻撃者が、単一のメモリ・アクセスのガード・タグを推測ことができることを単に必要としない可能性があるが、プログラムに、ある望ましくない動作を実施させる又はプログラム・コードの作者によって意図されていない効果を提供することができるために、いくつかの首尾よい推測を連続してつなぎ合わせる必要がある可能性があるからである。したがって、一連のメモリ割当てのそれぞれが、ランダム値に設定された対応するアドレス・タグを有する場合、連続割当てのそれぞれに割り当てられたタグ値の異なるパターンの順列の数が増加し、したがって、デバイス母集団全体が、それぞれ、所与のメモリ割当てのセットに対してランダム・タグ値の異なる組合せを有する、多くのより小さい部分母集団に分割され、攻撃をより一層困難にし、任意の首尾よい攻撃をデバイスの母集団のより小さいサブセットに限定する。
【0017】
ランダム・タグ設定命令は、所与の宛先アドレスに関連付けられたアドレス・タグを設定する唯一のやり方である必要がないことが理解されよう。命令デコーダは、宛先アドレスに関連付けられたアドレス・タグが、ランダム・タグ設定命令に関して非決定的にハードウェアによってランダムに選択されるのではなく、ソフトウェアそれ自体によって提供され、決定的である(すなわち、同じプログラムを実行するすべてのデバイスにわたって同じである)、あるソフトウェア定義値に設定されることを可能にするタグ設定命令をサポートすることもできる。これにより、ソフトウェア開発者には、ランダム・タグ設定命令又は固定値タグ設定命令を常用として使用するかどうかの選択の権利が与えられる。
【0018】
ランダム・タグ設定命令のいくつかの実例において、ランダム・タグ値は、候補タグ値のセット全体からランダムに選択することができる。例えばNビットのタグ値は、2Nの異なる値を有することができ、したがって、ランダム・タグ値は、それらの2Nの値のうちのいずれかからランダムに選択することができる。
【0019】
しかし、ランダム・タグ設定命令の1つのバリアントに応答して、命令デコーダは、候補タグ値のセットの少なくとも1つの除外値がランダム・タグ値として選択されるのを防止するべく、及び候補タグ値の残りのサブセットからランダム・タグ値をランダムに選択するべく処理回路を制御することができる。ある値をランダム・タグ値として選択されることから除外するが、次いで、ランダム・タグ値を残りのサブセットからランダムに選択することができる能力は、いくつかの理由から有用であり得る。まず、いくつかのタグ値を特別な目的に確保しておくことができる。例えば、候補セットの1つのタグ値を、任意の他のタグ値に対して一致するとみなされる「全一致」値として確保しておくことができる(例えば、これはセキュリティ要件がより低い、あるメモリ・アクセスのアドレスに対してガード・タグ・チェックを効果的に無効にするのに有用であり得る)。したがって、「全一致」挙動が不適切であるアドレスにアドレス・タグを設定するとき、ランダム・タグ値として選択することができる候補タグ値のサブセットから「全一致」値を除外することが望ましい場合がある。他の特殊タグ値を割り当てることもできる。したがって、場合によっては、少なくとも1つの除外タグ値は、1つ又は複数のハードウェア定義除外タグ値を含むことができ、それはハードウェアによって固定される。別の実例において、少なくとも1つの除外タグ値のセットは、構成レジスタに記憶された構成データによって識別された1つ又は複数の除外タグ値を含むことができる。例えば、デバイスのある機能は、任意選択である可能性があり、構成レジスタは、そのような機能が有効にされるかどうかを指定することができる。どの特徴を有効にするかに応じて、あるタグ値を除外する必要がある可能性がある。例えば、構成レジスタは、対応する全一致値が選択から除外されるかどうかを選択するために、上記に論じた「全一致」機能を有効にするか又は無効にするかを定義することができる。構成レジスタは、ランダム・タグ設定命令それ自体によって指定されないレジスタ、例えば、処理装置のアーキテクチャによって提供される状態レジスタ又は他の制御レジスタでもよい。
【0020】
他の実例において、ソフトウェアが、ランダム・タグ値として選択されることから除外される候補タグ値のセットのある値を指定することを可能にすることが望ましい場合がある。例えば、少なくとも1つの除外タグ値は、ランダム・タグ設定命令によって指定された少なくとも1つのレジスタによって識別された1つ又は複数の除外タグ値を含むことができる。また、ランダム・タグ設定命令の命令コード化によって直接示される即値として除外タグ値を指定するランダム・タグ設定命令のバリアントを提供することが可能である場合がある。別の方式は、ランダム・タグ設定命令が、対応するアドレス・タグを有するアドレスを含むソース・レジスタ又は宛先レジスタ(又は両方)を指定することであり得、そのアドレスのアドレス・タグのタグ値は、抽出することができ、少なくとも1つの除外タグ値の1つであると決定することができる。
【0021】
ソフトウェアがどの値を除外するべきかを示すことを可能にするためにどの方式が使用されるかにかかわらず、あるソフトウェア定義値を選択されることから除外することができる能力は有用であり得る。何故なら、メモリのブロックの連続割当てが異なるタグ値を使用することをソフトウェアが確実にし、したがって、実際にはメモリの1つの領域を目的にするべきメモリ・アクセスが、異なるタグ割当てに関連付けられた次の領域まで波及する場合、異なるガード・タグが、その境界違反が検出されることを可能にすることが望ましい可能性があるためである。したがって、メモリの領域が2つの既存の割当ての間に割り当てられるヒープ又は他のデータ構造にメモリを割り当てる場合、ソフトウェアは、新たな割当てに設定されたガード・タグが、先行する割当てに関連付けられたガード・タグ及び後続の割当てに関連付けられたガード・タグの両方と異なることを確実にしたいと望む可能性がある。別の実例は、スタックデータ構造に領域を割り当てるときでもよく、その場合、前回スタック割当てが行われたときにアドレスに割り当てられたタグの値を除外することが望ましい場合がある。
【0022】
いくつかの実例は、除外値を識別するこれらのやり方のうちの1つだけを許容することができる。他は、これらの技法の組合せをサポートすることができ、例えば、命令は、いくつかのソフトウェア定義除外タグ値を指定することができるが、いくつかのハードウェア定義値は恒久的に除外することもでき、又はそのようなハードウェア定義タグ値を、構成レジスタによって指定された情報に応じて選択的に除外することができる。
【0023】
少なくとも1つの除外タグ値の少なくとも一部が、ランダム・タグ設定命令のレジスタによって識別される場合、この情報は、そのレジスタ内に異なるやり方で表すことができる。概して、ランダム・タグ設定命令は、ランダム選択状態情報を記憶する少なくとも1つのソース・レジスタを指定することができる。
【0024】
1つの実例において、ランダム選択状態情報は、ビットフィールドの各ビットが、対応する候補タグ値が少なくとも1つの除外タグ値のセットの1つであるかどうかを示す、候補タグ値のセットの少なくともサブセットに対応するいくつかのビットを含むビットフィールドを含むことができる。ビットフィールドのビットは、実行されるソフトウェアの前の命令によって設定することができる。
【0025】
場合によっては、どの値が除外されることになっているかに応じてソフトウェアがビットフィールドのそれぞれのビットの値を直接決定することが可能であるが、前に割り当てられたアドレス・タグによって使用されたある値(ソフトウェアによる決定的選択ではなく、それら自体ランダム選択を通じて決定された可能性がある)を除外することが望ましい場合、ソフトウェアは、どの値を除外すべきかをあらかじめ知っていない可能性がある。したがって、命令デコーダが、ランダム選択状態情報のビットフィールドを記憶するためのタグ除外宛先アドレス及び宛先レジスタを指定するタグ値除外命令もサポートすることは有用であり得る。タグ値除外命令に応答して、命令デコーダは、対応するタグ値が少なくとも1つの除外タグ値のセットの1つであることを示すように、ビットフィールドのビットを更新するべく処理回路を制御することができ、それは、タグ除外宛先アドレスに関連付けられたアドレス・タグに対応する。これにより、プログラマ/コンパイラが、タグ除外宛先アドレスとして、タグ値を後続のランダム選択から除外するべき任意のアドレスを指定するタグ値除外命令の1つ又は複数のインスタンスを含むことが可能になる。これにより、除外される値に対応するビットフィールドのそれぞれのビットが追加され、次いで、後続のランダム・タグ設定命令が、タグ設定アドレスとして指定された異なるアドレスに設定するべくアドレス・タグのランダム選択を制御するために、ビットフィールドを使用することができる。
【0026】
いくつかの実例において、ランダム選択状態情報のビットフィールドは、タグ値のセット全体に対応するビットを含むことができる。
【0027】
しかし、他の場合において、ビットフィールドは、候補タグ値の適切なサブセットに対してのみビットを含むことができる。例えば、ある候補タグ値が、恒久的に除外されるものとしてハードウェア定義された場合、それらの候補タグ値にビットを提供する必要がない可能性がある。
【0028】
ビットフィールドがすべての可能な候補タグ値に対してビットを含まない可能性がある別の理由は、候補セット全体の中からのある候補タグ値の適切なサブセットの選択が、先の命令によってすでに行われている可能性があり、そして、ランダム選択状態情報は、その候補タグ値の適切なサブセットとして選択されたタグ値を含むことができることである可能性がある。候補タグ値の適切なサブセットのタグ値は、どの値が除外されるかを示すビットフィールドと同じレジスタ、又は異なるレジスタのいずれかに指定される可能性がある。しかし、ランダム・タグ設定命令によって必要とされるレジスタ読取りの数を低減するために、タグ値及びビットフィールドの両方を同じレジスタに指定することは有用であり得る。本実装形態の場合、命令デコーダは、ランダム選択状態情報のタグ値を記憶するための宛先レジスタを指定するランダム・タグ選択命令をサポートすることができる。ランダム・タグ選択命令に応答して、命令デコーダは、候補タグ値のセットの中から候補タグ値の適切なサブセットをランダムに選択するべく(例えば、任意の値が除外されるかどうかを考慮することなく)、及び選択された、候補タグ値の適切なサブセットのタグ値を、ランダム選択状態情報を記憶する宛先レジスタに書き込むべく処理回路を制御することができる。
【0029】
この方式の場合、ある除外値を除外しつつランダム・タグ値を選択する動作全体は、いくつかの別個の命令に分割することができ、それによって、ハードウェア実装形態が簡略化され得る。例えば、動作は、ランダム・タグ選択命令のインスタンス、次いで、上記に説明したタグ値除外命令の1つ又は複数のインスタンス(対応するアドレスからタグ値を抽出し、これらの値が除外されることを示すようにランダム選択状態のビットフィールドを更新するための)、及び次いで、除外されない候補タグ値の適切なサブセットの1つを選択するランダム・タグ設定命令を使用して実装することができる。例えば、ランダム選択状態情報がTの候補タグ値をタグ値の適切なサブセットとして示す場合、この方式により、最大T-1の候補値が除外されることが許容され、したがって、依然としてランダム・タグ設定命令によってランダム・タグ値として選択することができる、候補タグ値の適切なサブセットの少なくとも1つが常に残っている。この方式により、ハードウェア実装形態が簡略化され、タイミング要件を満たすことがより簡単になる。何故なら、ランダム・タグ選択命令が任意の値が除外されるかどうかを考慮する必要なく、ランダム発生源に基づいてT個の値の選択を行うことができ、その一方で、ランダム・タグ設定命令及びタグ値除外命令を、乱数発生源を考慮する必要なく、選択のための簡単な論理演算及び/又はマルチプレクサを使用して実装することができるからである。また、この方式は、命令ごとに必要とされるソース・レジスタの数を限定することができ、それは、一般に、典型的なマイクロプロセッサ設計においてレジスタ読取りポートの数を限定することができるので、有用である可能性がある。
【0030】
それにもかかわらず、他の方式は、乱数発生源に基づく選択及び同じ命令に応答して実施されるいくつかの値の除外の両方をサポートするハードウェア実装形態を提供することができる。この場合、ハードウェア効率のよいやり方で命令を実装し、その一方で、少なくとも1つの除外値以外の残りの候補値のそれぞれを選択する均等な確率分布を依然として確実にする上で課題がある。
【0031】
最大Nの除外タグ値の除外をサポートするハードウェア実装形態のための1つの方式において、命令デコーダは、
・ 候補タグ値のセットの少なくともN+1のタグ値をランダムに選択する、
・ 選択されたタグ値のそれぞれを各除外タグ値に対して比較する、及び、
・ タグ設定宛先アドレスに関連付けられたアドレス・タグに設定するべきランダム・タグ値として少なくとも1つの除外タグ値のすべてに対して不一致である、選択されたタグ値のうちの1つを選択する
べく処理回路を制御することができる。
【0032】
例えば、N+1のランダム値の選択は、値の、ある疑似ランダム・シーケンスを定義するルック・アップ・テーブル(LUT:look up table)及びLUTによって提供されるシーケンスのどの部分が抽出され、N+1のタグ値として使用されるかを選択するのに使用することができるランダム・シード選択値を提供する線形フィードバック・シフト・レジスタ(LFSR:linear feedback shift register)又は他の回路を使用して実装することができる。比較及び選択ステップは、除外されないN+1のタグ値のうちの1つを選択するために、比較器、論理ゲート及びマルチプレクサを使用して実装することができる。
【0033】
単一のランダム・タグ設定命令における選択/除外動作全体を実施する一方でハードウェアを実装するための代替方式は、所定の除外タグ値(ハードウェアに固定される又は構成レジスタに基づいて構成可能である可能性があるが、ランダム・タグ設定命令の命令コード化とは関係なく選択される)及びランダム・タグ設定命令によって指定された追加の除外タグ値の、最大2つの値がランダム選択から除外されることを可能にすることである。この場合、ランダム・タグ設定命令に応答して、命令デコーダは、
・ 候補タグ値のセットの1つを、選択されたタグ値としてランダムに選択する、
〇 選択されたタグ値が、所定の除外タグ値及び候補タグ値のセットの他の所定のタグ値の両方と不一致であるときには、選択されたタグ値、及び
〇 選択されたタグ値が所定のタグ値及び他のタグ値のうちの一方と一致するときには、選択されたタグ値のランダムに選択されたビットを反転させることによって取得された値
・ の1つである中間値に対して追加の除外タグ値の比較を実施する、
・ 比較により、追加の除外タグ値と中間値との不一致が検出されたとき、タグ設定宛先アドレスに関連付けられたアドレス・タグに設定するべきランダム・タグ値として中間値を出力する、及び、
・ 比較により、追加の除外タグ値と中間値との一致が検出されたとき、タグ設定宛先アドレスに関連付けられたアドレス・タグに設定するべきランダム・タグ値として他の所定のタグ値を出力する
べく処理回路を制御することができる。
【0034】
所定の除外タグ値と同様に、他の所定のタグ値は、ハードウェアにおいて配線で接続してもよく(固定してもよく)、又はランダム・タグ設定命令コード化と関係なく制御レジスタによって指定されるように構成可能であってもよい。
【0035】
したがって、ランダム値を選択することによって、及び選択された値と一致するか、又は選択された値が所定の除外タグ値又は他の所定のタグ値のうちの一方と一致する場合、反転された、ランダムに選択されたビットを有するかのいずれかである中間値を出力することによって、中間値は、所定の除外タグ値又は他の所定のタグ値のいずれにも決して一致することはなく、任意の他の値をとることができる。次いで、中間値は、追加の(ソフトウェア指定された)除外タグ値に対して比較することができ、この比較において一致がある場合、最終出力ランダム・タグ値を提供するために他の所定のタグ値を中間値と置き換えることができ、そうでない場合、中間値それ自体を出力ランダム・タグ値として使用することができる。単一のランダム値だけが乱数発生源に基づいて選択され、除外値に対して比較される必要があり、それは比較器の数及び選択(多重化)回路の複雑性を限定し、その一方で、非除外値から選択する際の相対的に均等な確率分布を依然として実現するので、この方式は、ハードウェアの複雑性を限定するのに役立つことができる。
【0036】
所定の除外タグ値及び他の所定のタグ値は、候補タグ値のセット全体の任意の2つのメンバであり得るが、所定の除外タグ値及び他の所定のタグ値のうちの一方が、すべてのビットが0に等しい値であり、他方が、すべてのビットが1に等しい値である(その逆でも可)ことは特に有用であり得る。何故なら、これはランダム・タグ値として選択されない「特殊」タグ値、例えば、「全一致」値のありそうな使用にマッピングすることができるからである。いくつかの実装形態において、所定の除外タグ値及び他の所定のタグ値として定義された値は、配線で接続する(恒久的に固定する)ことができ、又は代替案として、それらは、構成レジスタにおける状態値で定義することができる(例えば、「すべて0」及び「すべて1」の値のどれが除外値であるかを選択する値)。
【0037】
したがって、上記から、処理回路の実際のハードウェアが、少なくとも1つの除外値を選択から除外しつつ、候補値のセットからランダム選択を実装することができる様々な異なるやり方があることが理解されよう。これは単一の命令に応答して又は命令のシーケンスに応答してのいずれかで行うことができる。ランダム・タグ設定命令のアーキテクチャ面での利点(上記に論じた攻撃に対するエラーの検出確率及び堅牢性の増加の)は、マイクロアーキテクチャ・レベルで選択された具体的なハードウェア実装形態にかかわらず実現することができる。
【0038】
候補タグ値のセット(又は少なくとも1つの除外値を除外する候補タグ値のセット)からのランダム選択は、真のランダム値又は疑似ランダム値に基づいて行うことができる。したがって、真の乱数発生器を提供することは、上記に論じた技法には不可欠ではないことが理解されよう。場合によっては、ランダム選択は、疑似乱数発生器に基づいてもよい。例えば、ランダム選択は、線形フィードバック・シフト・レジスタから抽出された値に基づくことができる。
【0039】
実際には、所与のランダム値を所与のアドレスに関連付けられたアドレス・タグに割り当てたので、同じランダム・タグ値を、そのアドレスによって識別された、アドレス指定された位置を含むメモリ位置のブロックのガード・タグに記憶することもしばしば望ましい場合がある。いくつかの実装形態において、これはランダム・タグ設定命令とは別個の命令によって行うことができる。例えば、後続のガード・タグ・設定命令は、アドレス・タグが前にランダム・タグ設定命令によって設定されていたタグ設定宛先アドレスをとることができ、そのアドレスのランダム・タグ値を対応するメモリ位置のブロックの対応するガード・タグに書き込む値として使用することができる。
【0040】
しかし、他の実装形態において、アドレス・タグとガード・タグ・設定命令との組合せを提供することが可能である場合があり、それは、両方とも、タグ設定宛先アドレスに関連付けられたアドレス・タグをランダムに更新し、ランダム・タグ値に、タグ設定宛先アドレスによって識別された、アドレス指定された位置を含むメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグを更新するべくメモリ・アクセス回路も制御する。これによって、第2の命令を実行する必要性が回避され、したがって、コード密度が低減され得る。
【0041】
ガード・タグ・チェックにおいて、所与のメモリ・アクセスに対してアドレス・タグとガード・タグとの不一致が検出されたとき、これは障害状態指示のある形態を返すことによって報告することができる。ガード・タグとアドレス・タグとの一致が検出されたかどうかの、生成された指示の特定の形態は、実装形態によって異なる場合がある。場合によっては、タグ保護されたメモリ・アクセス動作は、アドレス指定された位置へのメモリ・アクセスが、ガード・タグとアドレス・タグとの一致が検出されたかどうかに応じて許可されるかどうかを制御するステップを含むことができる。しかし、他の実例において、ガード・タグ・チェックをトリガしたメモリ・アクセスは、ガード・タグとアドレス・タグとの一致が検出されたかどうかにかかわらず、実行することができる。例えば、メモリ位置の所与のブロックに関連付けられたガード・タグは、メモリ・システム内のメモリ位置の異なるブロックに記憶することができ、したがって、ガード・タグにアクセスするステップは、別個の読取り動作を必要とする可能性がある。したがって、ガード・タグとアドレス・タグとが比較されてしまうまでメモリ・アクセスが遅延される場合、それは実際のメモリ・アクセスの処理を遅延させる場合があり、したがって、ガード・タグが利用可能である前に、及びガード・タグとアドレス・タグとの任意の一致が検出されたかどうかにかかわらず、アドレス指定された位置へのメモリ・アクセスを実施し、次いで、ガード・タグが取得され、アドレス・タグと比較されると、一致が検出されたかどうかの別個の指示を生成することが望ましい場合がある。
【0042】
1つの実例において、一致が検出されたかどうかの指示は、ガード・タグとアドレス・タグとの不一致が検出されたとき生成される障害状態を表す信号でもよい。例えば、メモリ・アクセス回路は、アクセス許可に違反した場合、又はマッピングされていないアドレスにアクセスした場合に生成される障害と同様のメモリ障害をシグナリングすることができ、或いは異なる種類の障害状態を指示することができる。障害信号は、検出された障害に応答するために処理回路をトリガして、例外処理ルーチンを実行することができる。
【0043】
代替案として、所与のメモリ・アクセスに対してガード・タグがアドレス・タグと不一致であるとき、状態指示が、装置の処理回路にアクセス可能な制御レジスタ内に記録されて、ガード・タグとアドレス・タグとの比較において一致又は不一致が検出されたどうかを指示することができる。次いで、状態情報は、メモリ・アクセスが有効であったかどうかをチェックするために、後続の命令によって読み取ることができる。
【0044】
ガード・タグ・チェックにおいてアドレス・タグとガード・タグとが一致したのかどうか、又は不一致であったのかどうかを報告する別の選択肢は、コードの実行された部分に関連付けられたエラー・ログに情報を記録することであり得、それはコードの部分の全体を通して検出された任意のガード・タグ・エラーを追跡する。例えば、不一致のガード・タグとアドレス・タグとに応答して、不一致をトリガした宛先アドレス、又は不一致のメモリ・アクセスをトリガした命令の命令アドレスをエラー・ログに記録することができる。この場合、コードの動作を妨げる任意の具体的な処置を実施するのではなく、エラーを単純にエラー・ログに記録することができる。次いでエラー・ログは、後続のソフトウェアのバージョンにおけるエラーを除去することでプロバイダを手助けするためにコードのソフトウェア・プロバイダに利用可能にすることができる。
【0045】
したがって、ガード・タグ・チェックが実施されたとき、ガード・タグの一致/不一致の指示をメモリ・アクセス回路によって生成することができる、様々なやり方があることが理解されよう。
【0046】
いくつかの実施例において、対応するガード・タグを有するメモリ位置のブロックは、それぞれ単一のメモリ位置を含むことができる。この場合、各個々のメモリ位置は、異なるガード・タグを有することができ、それは、より大きな範囲のメモリ・エラーを検出することができるようにガード・タグを設定する微細な粒度を提供することができる。
【0047】
しかし、実際には、各アドレス指定された位置に対して個々のガード・タグを設定するオーバーヘッドは、高すぎる場合があり、各ガード・タグを複数のメモリ位置のブロックに関連付けることが、より効率的であることがある。この場合、いくつかの隣接したメモリ位置は、同じガード・タグを共有することができ、それは、メモリ関連エラーの一般的な形態を検出するのには十分であり得る。
【0048】
メモリ位置の所与のブロックに関連付けられているガード・タグは、メモリ・システム内の任意の他のメモリ位置において記憶することができる。メモリ・システムにおけるガード・タグの位置が選択される特定のやり方は、実装形態によって又はラン・タイムにおいて大幅に異なる場合がある。いくつかの実例において、ガード・タグを記憶する位置は、処理回路によってアーキテクチャ的にアクセス可能であり得、例えば、ガード・タグ記憶位置は、アドレス指定された位置と同じアドレス空間の一部にマッピングされた位置でもよい。この場合、アドレス指定された位置それ自体と、対応するタグ記憶位置のアドレスとの間のマッピングは、固定し又は配線で接続することができ、又は変数であり得、例えば、メモリ・アクセス回路によって維持される追跡テーブルにおいて、又はトランスレーション・ルックアサイド・バッファにおいて追跡することができる。代替案として、他の実装形態は、所与のアドレス指定された位置に関連付けられたガード・タグを、処理回路にアーキテクチャ的にアクセス可能ではない、他の記憶位置、例えば、処理回路によって実行される命令によってアドレス指定することができるアドレス空間にマッピングされないマイクロアーキテクチャに用意された追加の記憶装置に記憶することができる。この場合、メモリ・アクセス回路は、アドレス指定された位置のアドレスに基づいて、対応するタグ記憶位置を参照するのに使用される特定の内部アドレスを決定し、タグ・データをタグ記憶位置から読み取るのに必要とされる任意の追加のメモリ・アクセスをトリガすることができる。タグ記憶位置が処理回路にアーキテクチャ的にアクセス可能であるかどうかにかかわらず、タグ値は、より高速のアクセスのためにキャッシュ内で、データ値に使用される同じキャッシュ内か、又は専用タグ・キャッシュにおいてかのいずれかでキャッシュすることもできる。
【0049】
場合によっては、ガード・タグは、相対的に小さくてもよく、例えば、4又は8ビットでもよく、したがって、それぞれメモリ位置の異なるブロックに関連付けられた複数のガード・タグは、同じメモリ位置内に収まることができる。
【0050】
アドレス・タグは、異なるやり方で宛先アドレスに関連付けることができる。場合によっては、アドレス・タグは、例えば、メモリ・アクセス動作及びガード・タグ・チェックをトリガする、メモリ・アクセス命令によって指定された別個のレジスタを使用して、宛先アドレスとは別個に指定することができる。しかし、他の実例において、アドレス・タグは、宛先アドレスの1つ又は複数の選択されたビットの関数として決定することができる。すなわち、アドレス・タグは、宛先アドレスそれ自体の一部分から導き出された情報を含むことができる。しばしば、命令セット・アーキテクチャが、あるビット数(例えば、64ビット)を有するアドレスをサポートすることができるが、所与のハードウェア・デバイスは、実際にはそのビット数を使用して表すことができるすべての可能なアドレスをそれが使用するだけのメモリ容量を必要としない可能性がある。例えば、デバイス使用における現在の傾向の場合、264の個々のアドレス指定可能な位置を提供する必要性はまだ何もない。したがって、しばしば、メモリ・アドレスのいくつかのビットは、効果的に未使用にする可能性があり、常に同じ値を有するか、又は最上位の「実」アドレス・ビットの符号拡張として設定されるかのいずれかである可能性がある(したがって、未使用部分はすべて0又はすべて1に設定される)。したがって、この未使用部分は、アドレスがレジスタ間で操作され、又はレジスタ間を移動するとき、アドレス・タグを当然アドレスと一緒に輸送することができるので、アドレス・タグ又はアドレス・タグを導き出すための値を表すために、アドレス・タグを取得するために別個のレジスタにアクセスすることを必要とすることを回避するために、また、アドレスと、対応するアドレス・タグとの一致を追跡することをより容易にするために、再使用することができる。
【0051】
アドレス・タグを決定するために宛先アドレスの一部分を使用する実施例において、このアドレス・タグは、宛先アドレスによって識別された、アドレス指定された位置からの情報がキャッシュ内に記憶されたかどうかを決定するためにキャッシュによって使用することができる宛先アドレスのタグ部分と異なることに留意されたい。多くのキャッシング・スキームは、キャッシュ内のそのデータと並行してキャッシュされたデータの部分のアドレスのタグ部分を記憶することができ、したがって、キャッシュされたデータが、必要とされるアドレスに実際に対応するかどうかを決定するために、所与のアドレスがないかキャッシュを検索すると同時に、アドレスの一部を、キャッシュされたデータと並行して記憶されたタグと比較することができる。しかし、この場合、キャッシュ内のタグと比較されるアドレスのタグ部分は、データが必要とされる特定のアドレス指定された位置を実際に識別するアドレスの一部分の一部であり、すなわち、アドレスのキャッシュ・タグ部分を変更することは、当然、結果としてメモリ・システム内の異なるアドレス指定された位置を指し示すアドレスとなる。対照的に、タグ保護されたメモリ動作に使用されるアドレス・タグの場合、メモリ・アクセス回路は、アドレス・タグから独立してデータが必要とされるアドレス指定された位置を選択することができる。すなわち、アドレス・タグが異なる値を有する場合でも、宛先アドレスによって参照されるアドレス指定された位置は、アドレス指定された位置の選択が宛先アドレスの他の部分だけに依存する可能性があるので、依然として同じである可能性がある。これにより、コンパイラが、特定のアドレスに関連付けられたアドレス・タグを、メモリ・システム内のデータの関連ブロックに割り当てられた、対応するガード・タグ値に一致する任意の値(例えば、上記に論じたランダムに選択された値)に設定する自由が得られる。
【0052】
アドレス・タグがアドレスのビットのサブセットを使用して表される場合、いくつかの実装形態において、ランダム・タグ設定命令に応答して選択されるランダムに選択された値(任意の除外値を除外する)は、タグ設定宛先アドレスのビットのサブセットに書き込まれる値を決定するために、アドレスの少なくとも1つの他のビットに基づいて変換することができる。これは、アドレス空間のレガシー割当てとの互換性に関して有用であり得、特殊なやり方で解釈されるタグ値の「特殊値」(例えば、「全一致」挙動に対して)は、アドレス空間の異なる部分に対して異なる値を有する必要がある可能性がある。例えば、アドレスを符号拡張することができるので、アドレス指定されたメモリ位置の選択に実際に使用されるアドレスの最上位の「実」(意味のある)ビットが1である場合、最上位の未使用ビットはすべて1である可能性があり、その一方で、最上位の「実」ビットが0である場合、最上位の未使用ビットは0に設定されることが予測される可能性がある。したがって、この件においてこれらの未使用ビットを割り当てた(及びガード・タグ機能を使用するように書かれていなかった)レガシー・コードが継続して正しく機能することを確実にするために、「全一致」値は、最上位の「実」ビットが1であるアドレスには「すべて1」であり、最上位の「実」ビットが0であるアドレスには「すべて0」であり得る。これは「すべて0」と「すべて1」とのうちの一方を除外値として指定することによって実現することができ、候補セットの残りの値からランダム選択する(場合により他の除外値も除外する)ことができ、次いで、アドレスのタグ部分に書き込まれる値を決定し、したがって、最上位の「実」ビットが1又は0であるかどうかにかかわらず、除外値が正しい「全一致」値にマッピングされるために、アドレスの最上位の「実」ビットに基づいて、選択された値を変換するかどうかを決定することができる(例えば、すべてのビットを反転させることによって)。ただビットを反転させるだけでなく、アドレスの1つ又は複数のビットに基づいてランダムに選択された値の他の変換も適用することができることが理解されよう。
【0053】
いくつかの実装形態において、命令デコーダは、すべてのメモリ・アクセス命令に応答してガード・タグ・チェックをトリガすることができる。代替案として、命令デコーダは、メモリ・アクセス命令の別個のタグ保護されていない及びタグ保護されたバリアントをサポートすることができる。この場合、ガード・タグ・チェックは、メモリ・アクセス命令のタグ保護されたバリアントに応答してトリガすることができる。対照的に、タグ保護されていないメモリ・アクセス命令は、ガード・タグ・チェックを実施することなく、単純に、その命令によって指定された宛先アドレスによって識別された、アドレス指定された位置へのアクセスをトリガすることができる。したがって、すべてのメモリ・アクセス命令に応答してガード・タグ・チェックを実施することは不可欠ではない。場合によっては、ガード・タグ・チェックをトリガするための命令(タグ・チェッキング宛先アドレスによって識別された位置への任意の対応するメモリ・アクセスなしで)をサポートすることもできる。
【0054】
しかし、たとえすべてのメモリ・アクセス命令がタグ保護されたメモリ・アクセス命令と解釈されたとしても、命令セット・アーキテクチャがある動作に対するガード・タグ・チェックを選択的に無効にすることをサポートすることができる他のやり方が依然としてある可能性がある。例えば、処理装置の制御レジスタ内の制御パラメータが、タグ比較を選択的に無効にすることができる。上記に論じたように、別の選択肢は、アドレス・タグのある値を特別なやり方で解釈し、したがって、アドレス・タグがガード・タグの任意の可能な値に対して一致するとみなすはずであることをそれらが示し、この場合も、タグ比較の効果を効果的に無効にし、したがって、アドレス・タグがガード・タグに一致するかどうかにかかわらず、エラーが何も報告されないことである。
【0055】
図1は、データ処理装置2の実例を概略的に示す。これは、単純に装置の構成要素のサブセットの高水準表現であり、装置は、例示していない他の多くの構成要素を含むことができることが理解されよう。装置2は、命令デコーダ6によって復号された命令に応答してデータ処理を実施する処理回路4を備える。命令デコーダ6は、命令によって表された対応する処理動作を実施するように処理回路4を制御する制御信号10を生成するために命令キャッシュ8から取り出された命令を復号する。処理回路4は、レジスタ14に記憶された値に対して演算を実施して、レジスタに書き戻される結果値を生成する1つ又は複数の実行ユニットを含むことができる。例えば、実行ユニットは、算術演算又は論理演算を実行する算術演算/論理演算装置(ALU)、浮動小数点オペランドを使用して動作を実行する浮動小数点ユニット及び/又は複数の独立したデータ要素を含むオペランドに対してベクトル演算を実施するベクトル処理ユニットを含むことができる。処理回路は、レジスタ14とメモリ・システムとの間のデータの転送を制御するメモリ・アクセス・ユニット(又はロード/ストア・ユニット)15も含む。この実例において、メモリ・システムは、命令キャッシュ8と、レベル1データ・キャッシュ16と、データと命令との間で共有されるレベル2キャッシュ17と、メイン・メモリ18とを含む。他のキャッシュ階層も可能であり、これはほんの1つの実例に過ぎないことが理解されよう。メモリ管理ユニット(MMU:memory management unit)20が、ロード/ストア・ユニット15によってトリガされたメモリ・アクセスをサポートするアドレス変換機能を提供するために設けられる。メモリ管理ユニット(MMU)は、メモリ・システム16、17、18に記憶されたページ・テーブルからエントリのサブセットをキャッシュするトランスレーション・ルックアサイド・バッファ(TLB)22を有する。各ページ・テーブル・エントリは、対応するアドレスのページのアドレス変換マッピングを提供することができ、ページが読取り専用領域なのかどうか、又は読取り可能及び書込み可能の両方であるのかどうかを指定するアクセス許可、又はどの特権レベルがページにアクセスできるのかを指定するアクセス許可などのアクセス制御パラメータを指定することもできる。
【0056】
図2は、タグ保護されたメモリ・アクセスの概念を概略的に示す。メモリ・システム内のメモリ位置を参照するのに使用される物理アドレス空間は、それぞれ、ある数のアドレス指定可能な位置を含むいくつかのブロック30に論理的に分割することができる。簡潔にするために、
図2の実例において、各ブロック30は、4つのメモリ位置を含むが、他のブロック・サイズも使用することができる。各ブロック30は、対応するガード・タグ32に関連付けられる。ある数のブロック30に関連付けられたガード・タグは、物理アドレス空間内の異なる、アーキテクチャ的にアクセス可能なメモリ位置34内か、又はアーキテクチャ的にアクセス可能でない(同じ物理アドレス空間にマッピングされない)メイン・メモリ18に設けられた追加の記憶位置内のいずれかに集め、記憶することができる。別個の非アーキテクチャ的にアクセス可能な記憶装置の使用は、場合によっては、ガード・タグ値をキャッシュするためのデータ・キャッシュ16、17における空間を使い尽くすことを回避するのに好ましいことがあるが、それは、通常のコードの性能に影響を与えることがあり、コヒーレンス管理をより複雑にすることがある。追加のタグ・キャッシュ19は、タグがメイン・メモリ18からアクセスされなければならない場合よりも高速にアクセスするために、非アーキテクチャ的にアクセス可能な記憶装置からのタグ値をキャッシュするためにマイクロアーキテクチャに設けることができる。どのタグ記憶位置34が各ブロック30に対応するかの特定のマッピングは、ロード/ストア・ユニット15によって制御することができ、及び配線で接続することができ、又はプログラム可能であることができる。
図2において、各タグ32は物理アドレスのブロックに関連付けられる一方、仮想メモリ・アドレス空間における仮想メモリ位置に関連付けられたガード・タグ32を設けることも可能であるが、これは各メモリ・アクセスに対していくつかの追加のアドレス変換を必要とする場合がある。したがって、ガード・タグ32を物理メモリ位置に関連付けることによって、これは性能を改善することができる。概して、ガード・タグ32を物理アドレス空間の対応するブロック30に正確にどのように関連付けられるのかは特定のマイクロアーキテクチャ実装形態の選択である。概して、必要なのは所与のメモリのブロックに関連付けられたガード・タグ32にアクセスし、それを比較することができることだけである。
【0057】
したがって、タグ保護されたメモリ・アクセスが必要とされるとき、アドレス・タグ40(アクセスされるアドレス指定された位置44を識別する宛先アドレス42に関連付けられる)は、アドレス指定された位置44を含むメモリ位置のブロック30に関連付けられるガード・タグ32に対して比較される。例えば、
図2において、宛先アドレス42は、
図2のアドレス空間において44と記された、メモリ内のある位置B1を指し示す。したがって、位置B1を含む位置Bのブロックに関連付けられるガード・タグBは、宛先アドレス42に関連付けられたアドレス・タグ40に対して比較される。
図2の最上部に示すように、アドレス・タグ4は、宛先アドレスそれ自体の選択されたビットの関数として決定することができる。具体的には、アドレス・タグは、アドレス指定された位置44として選択されることになっている具体的なメモリ位置を示すために未使用である宛先アドレスの一部分内のビットから決定することができる。例えば、いくつかのアーキテクチャにおいて、宛先アドレスのビットの最上部分は、符号拡張などのある固定値(すべて0又はすべて1)を常に有することができ、したがって、アドレスは、これらの未使用ビットを任意のタグ値で上書きすることによって、アドレス・タグ40でタグ付けすることができる。特定のアドレス・タグ値は、例えば、プログラマ又はコンパイラによって選択することができ、又は以下に論じるようにランダムに選択することができる。アドレス・タグ及びガード・タグ32は、相対的に少ないビット数、例えば、4ビットであることができ、したがって、メモリ内及び宛先アドレス内の大きな空間を占有しなくてもよい。タグ空間の4ビット、すなわち、タグの16個の可能な値を提供することは、しばしば、多くの共通の種類のメモリ・アクセス・エラーを検出するのに十分であり得る。
【0058】
したがって、タグ保護されたメモリ・アクセスが実施されたとき、ロード/ストア・ユニット15は、アドレス・タグ40と、アドレス指定された位置44を含むブロック30に関連付けられたガード・タグ32とを比較し、それらが一致するかどうかを決定する。ロード/ストア・ユニット15は、アドレス・タグ40とガード・タグ32とが一致したかどうかを示す一致指示を生成する。例えば、この一致指示は、アドレス・タグ40とガード・タグ32との不一致がある場合生成される障害信号60であり得、又は一致があったかどうか、又はエラーが検出されたアドレス及び/又はエラーをトリガした命令の命令アドレスを示すエラー・レポートに追加されたエントリがあったどうかを示す状態レジスタに配置された指示であり得る。
【0059】
図3は、タグ保護されたメモリ・アクセスを処理する流れ図を示す。メモリ・アクセスをトリガする命令は、アドレス・タグ及び宛先アドレスを指定することができる。
図2に示すように、場合によっては、アドレス・タグは、実際には、宛先アドレスそれ自体のビットのサブセットから導き出すことができるが、他の実例において、それは別個のレジスタに指定することができる。ステップ50において、タグ保護されたメモリ・アクセスをトリガする命令に直面される。それに応答して、ステップ52において、メモリ・アクセス回路15が、宛先アドレスによって識別された、アドレス指定された位置44へのメモリ・アクセスをトリガする。また、ステップ54において、メモリ・アクセス回路15が、宛先アドレスによって識別された、アドレス指定された位置44を含むメモリ位置のブロック30に関連してメモリ・システムに記憶されるガード・タグ32を取得する。ステップ56において、メモリ・アクセス回路15が、アドレス・タグ40を、ステップ54において取得したガード・タグ32と比較する。ステップ58において、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示が、メモリ・アクセス回路15によって生成される(例えば、上記に説明した指示を報告する一致/不一致の種類のいずれか)。任意の不一致を報告するのに使用される正確な指示は、実装形態によって異なる場合がある。
【0060】
図4は、単一のソース・レジスタXn及び宛先レジスタXdを指定するランダム・タグ設定命令の第1の実例を示す。ソース・レジスタXnは、あるアドレス・タグ値40にすでに関連付けられている可能性がある(又はアドレス42の符号拡張へのデフォルト設定によるタグ・ビットを有することができる)タグ設定宛先アドレス42を指定する。命令デコーダ6は、タグ設定宛先アドレス42を宛先レジスタXdの対応する部分に書き込むべく及び宛先レジスタ内のアドレス・タグ40を、乱数発生器又は疑似乱数発生器60に基づいて選択されたランダム・タグ値に設定するべく処理回路4を制御することによってこの命令に応答する。乱数又は疑似乱数発生器の任意の周知の設計を使用することができる。この方式の場合、値は何もランダム・タグ値として選択から除外されない。所与のアドレスのアドレス・タグをランダムに選択された値に設定することは、メモリ関連エラーがデバイスのうちの少なくともいくつかによって報告される可能性を増加させるために、及びデバイスの母集団のかなりの割合に影響し得る首尾よい攻撃を開始することが攻撃者にとって困難になるので攻撃に対する脆弱性を低減するために、同じプログラムを実行するいくつかの異なるデバイスによって使用されるタグ値の変動を増大させるのに有用である。場合によっては、アドレス・タグ値40を宛先レジスタに設定することと同様に、命令のバリアントが、タグ設定宛先アドレス42によって識別されたメモリ位置のブロック30に関連付けられたガード・タグ32を、アドレス・タグに選択されたものと同じランダム・タグ値に設定するために、メモリへのメモリ・アクセスをトリガすることもできる。
【0061】
図5は、ある除外値がランダム・タグ値として選択から除去されることを許容するランダム・タグ設定命令の第2の実例を示す。ランダム・タグ設定命令は、この場合も、
図4と同じであるソース・レジスタXn及び宛先レジスタXdを指定する。任意選択で、ランダム・タグ設定命令は、除外値のセットの1つ又は複数を示すことができる状態情報を定義することができる第2のソース・レジスタXmを指定することもできる。除外値は、Xmと関係なく他のやり方で識別することもできる。例えば、宛先レジスタXdが、命令を実行する前にすでにアドレスを含む場合、そのアドレスに関連付けられた前のタグは、抽出し、除外値のうちの1つとして使用することができる。同様に、ソース・レジスタXn内のアドレス・タグ値40は、除外することもできる。別の選択肢は、処理装置2のレジスタ14が、ある値が除外されるかどうかを示す構成状態を定義することができる構成レジスタを含むことができることであり得る。また、ある値は、ハードウェアによって恒久的に除外することができ、例えば、除外されるように配線で接続することができる。これは、例えば、ある値が特別な目的(例えば、全一致)に恒久的に割り当てられ、したがって、それらがランダム選択命令によってタグ値として選択されることが可能にならない場合、有用であり得る。任意のこれらの技法の組合せは、除外値のセットを定義するのに使用することができる。
【0062】
したがって、
図5の実例の場合、ランダム・タグ設定命令に応答して、命令デコーダ6は、この場合も、ランダム・タグ値のランダム選択を宛先レジスタXdのタグ部分に書き込ませるために処理回路4を制御するが、しかし、この場合、除外値のセット(ゼロ、1つ又は複数の除外値を含むことができる)をランダム・タグ値として選択されることから除去するために、ある追加の回路62を設けることができる。この除外値の除去を実装するためのいくつかの実例を以下に論じる。
【0063】
図6は、除外値を示すランダム選択状態を定義するレジスタXmが、それぞれが(疑似)乱数発生器60による選択に利用可能な値のセットの可能な候補値のうちの1つに対応するいくつかのビット64を含むビットフィールドを含む除外マスクとして実装される第1の実例を示す。例えば、
図6において、タグ値2、3及び11に関連付けられたビットは、これらの値をランダム・タグ設定命令によってランダム・タグ値として選択することができないことを示すように設定される。
【0064】
図7に示すように、命令デコーダ6は、2つのソース・レジスタXn、Xm及び宛先レジスタXdを指定するAddExclusion(タグ値除外)命令をサポートすることができる。ソース・レジスタXmのうちの1つは、いくつかの値がすでに除外されていること、又は値がまだ何も除外されていない場合すべて0であり得ることを示すために1に設定された、いくつかのビットをすでに有することができる、
図6に示す除外マスクの入力値を指定する。第2のソース・レジスタXnは、それに関連付けられた所与のアドレス・タグ40を有するアドレスを指定する。命令に応答して、命令デコーダ6は、アドレス・タグ40の値をアドレス・レジスタXnから抽出するべく、及びその抽出されたアドレス値に対応する除外マスクのビット64を設定するべく処理回路4を制御し、したがって、抽出されたアドレスの値は、Xmにおけるランダム選択状態情報に基づいてランダム・タグ値の後続のランダム選択から除外される。例えば、AddExclusion命令に応答して実施される動作は、抽出されたアドレス・タグ40によって示されるいくつかのビット位置によって1の最下位ビット及び0に等しいすべての他のビットを含む値を左シフトさせることによって実装することができる。次いで、シフトされた値は、レジスタXn内の入力マスクとORすることができる。
図7に示すシフト及びOR関数は、どのようにハードウェアが動作を実装することができるかというただ1つの実例に過ぎず、概して、設定されるソース・レジスタXn内のアドレス・タグ40の値に対応するビット64が結果として得られる、任意の動作を使用することができることが理解されよう。
【0065】
したがって、
図6に示すランダム選択状態情報の形態に基づいて、
図5のランダム・タグ設定命令は、レジスタXn内のビットフィールドのビット64が1に設定される除外値のうちの1つではないランダム・タグ値を選択することができる。
【0066】
そのようなビットフィールドを使用することの代替案は、代わりに、選択から除外される2進値を明示的に定義する一連のフィールドを提供するソース・レジスタXmを提供することであり得る。例えば、最大N個の値を除外することができ、各タグ値がある数のビット、例えば、4ビットを有する場合、レジスタの4Nビットは、除外される値を指定することができる。
【0067】
除外される値が正確にどのように指定されるかにかかわらず、次いで、ハードウェアは、選択された値が除外値のうちの1つではないことを確実にするために、除外値をとり、乱数発生器又は疑似乱数発生器60によって出力された値に対して比較することができる。しかし、性能上の理由から、非除外値が見つかるまで異なる乱数を繰り返し連続して生成すること及び除外値に対して繰り返しテストすることを必要とすることなく、ランダム・タグ値を非除外の値のセットから選択することができる技法を提供することが望ましい場合がある。また、非除外セットから行われたランダム選択が、非除外値の中に均等に分布した確率分布を有し、したがって、1つの非除外値又は別の非除外値に対する顕著なバイアスがないことが望ましい場合もある。
【0068】
図8Aから
図10は、これを実現するためのいくつかの方式を示す。目的は、具体的な入力値に等しくあってはならない、4ビットの疑似ランダム値を生成するためにハードウェア効率のよいやり方を提供することにある。具体的には、これは、そのような出力を乱数性の無差別発生源(すべての可能な出力を許容する)からどのように導き出すかを含む。これは簡単なLFSRシード・レジスタ又はより複雑な(P)RNGであり得る。簡単にするために、乱数性の発生源は、「LFSR」と称されるが、乱数性の他の発生源をLFSRの代わりに使用することもできる。実装形態の2つの可能な方式を説明する。説明する第1の方式は、所定の疑似ランダム・シーケンス(ルック・アップ・テーブル又はLUT70)を使用し、それは、LFSR72に加えて、配線で接続することができ、任意の数の入力値(入力の最大値数に応じて増大するハードウェアの複雑性を有する)を除外することができる。第2の方式も説明するが、それは「1111」又は「0000」のいずれかとともに1つの入力値だけを除外することに限定される。それはLFSRのみからその出力を導き出す。
【0069】
第1の方式を
図8A、
図8B、
図9A及び
図9Bに示す。この設計の考え方は、任意の数の入力パターン(「N」)を除外するように作り上げることができる。まず、ルック・アップ・テーブル(LUT)レジスタ70の存在を想定し、それは、正確に一度、疑似ランダム順序でシャッフルされた、あらゆる可能な出力値を含む。4ビットの出力(16の組合せ)の場合、このLUT70は64ビットの値である。設計は3つの段階80、82、84を含む。第1の段階は乱数器80であり、乱数器80は、LFSR72のビットに基づいて「N+1」の非重複値をLUT70から疑似ランダムに選択する。第2の段階は比較器82である。比較器82は、ビット等価性に関して、乱数器80からの「N+1」の出力の「N」のそれぞれを、除外値を定義する「N」の入力86のそれぞれと比較して、マスクを作り出す。入力86は、上記に論じたように、ランダム選択状態情報及び/又は構成レジスタ内の構成データ及び/又はハードウェア固定値から導き出すことができることに留意されたい。最後の段階は、「N+1」の出力のうちの1つを乱数器80から選択するために、比較器82によって作り出されたマスク88を使用するマルチプレクサ90を備えるセレクタ84であり、それは究極の最終出力92として入力のいずれにも等しくない(マスク88内のそのビットによって示されるように)。最終出力92は、タグ設定宛先アドレスのアドレス・タグに設定するためにランダム・タグ値として使用される。
【0070】
各段階をどのように実装するかの詳細を以下に説明する。これは実装形態の実例である。代替実装形態が可能である。
【0071】
乱数器80(段階1)
「pos」がLFSR72から抽出された4ビットであるとする。LUTレジスタ70は「pos*4」ビットだけ回転される。この後に、それぞれが必要に応じLFSRからの追加のビットに基づいて複数の独立した値のうちの1つをLUTから選択する、「N+1」のマルチプレクサ74が続く。理想的には、これらのマルチプレクサ74のすべてが、同じ数の入力を有するべきであるが、これは
図9A及び
図9Bに示すように不可欠ではない。ビット回転は、いずれにせよ、ハードウェア内のマルチプレクサとして実装されるので、これらのステップの両方とも折り畳められ、簡略化され得る。
【0072】
比較器82(段階2)
乱数器80からの「N」の入力のそれぞれは、「N」の禁止された値のそれぞれとの等価性に関して比較される。あらゆる乱数器出力の結果は、出力マスク88を作り出すために互いにNORされる。
【0073】
セレクタ84(段階3)
セレクタ90は、マスク88によって可能とされる第1の乱数器出力を単純に選択することができる。
【0074】
実装形態の特性
本実装形態は、入力のうちのいくつかが同一である場合を含めて、すべての出力に均一な確率分布を提供する。これは、N個の値を除外するように作り上げられた単一のハードウェア回路が、単純に入力のうちのいくつかを複数回提供することによって、確率分布に影響することなく、より少ない値を除外するのに再使用することができることを意味する。
【0075】
図8A及び
図8Bは、3つの除外(N=3)に対する具体的な構成の実例を示す。本実装形態は、入力のうちのいくつかが同一である場合を含めて、すべての出力に均一な確率分布を提供する。これは、3つの値を除外するように作り上げられた単一のハードウェア回路が、単純に同じ入力を複数回提供することによって、確率分布に影響することなく、1つ又は2つの値を除外するのに使用することができることを意味する。除外される値が「1111」である場合、確率分布がどのように影響されるかは次のとおりである。
【表1】
【表2】
【0076】
図9A及び
図9Bは、4つの除外(N=4)に対する具体的な構成の実例を示す。乱数器80から5つの出力を提供するために、どのように最後のマルチプレクサが、それぞれが4つではなく2つのLUT値から選択する2つのマルチプレクサ74-A、74-Bに細分割されるように選択されたかに留意されたい。これは、最後の2つの出力がセレクタによって選ばれることが最もありそうにないからであり、したがって、乱数性の低下は確率分布に対してそれほど影響がないはずである。
【0077】
除外される値が「1111」である場合、確率分布がどのように影響されるかは次のとおりである。
【表3】
【表4】
【0078】
除外される追加の入力が「0000」である場合、確率分布がどのように影響されるかは次のとおりである。
【表5】
【表6】
【0079】
図10は第2の方式を示し、それは「1111」又は「0000」のいずれかであり得る1つの固定パターン及び任意の変数である1つの入力値を除外する。これは既存の値を「再度色付けする」/変更するのに十分である。出力はLFSR72だけから導き出される。LFSRは少なくとも6ビットを有するべきである。
【0080】
図10に示す設計において、4ビットが、暫定出力値(「選択されたタグ値」)102として使用されるLFSR状態から抽出される。ビットのすべてが同じである場合(パターン「0000」、「1111」)、LFSRからさらに2ビットが抽出され、反転される出力の正確に1つのビットを選択して(XOR動作を使用して)、中間値100を生成するために、マルチプレクサ/シフタに使用される。これにより、「0000」及び「1111」のパターンが中間値100に対して決して起きることがないことが保証される。そうでない場合、選択されたタグ値102は、中間値100としてそのまま出力される。
【0081】
これにより、以下の統計的分布を有する疑似ランダム出力を有する中間値100が作り出される。
【表7】
【表8】
【0082】
システムの次の部分をより容易に説明するために、除外するべき固定パターンが「1111」であり、「0000」が有効な出力であると想定する。「0000」が有効なパターンであるので、それは入力変数と交換することができる。したがって、中間値100は、等価性に関して入力(ランダム・タグ設定命令によって定義された禁止された値)と比較される。それらが一致した場合、「0000」が出力される。そうでない場合、中間値100は、そのまま出力される。これは結果として「1111」でもなく(それは第1のステップによってすでに除外されたので)、ランダム・タグ設定命令によって提供された入力に等しくもない最終出力104となる。最終出力104は、宛先アドレスのアドレス・タグに設定するためにランダム・タグ値として使用することができる。
【0083】
最終出力の統計的分布は以下のとおりである。
【表9】
【表10】
【0084】
「0000」と「1111」との役割は、「0000」を出力として禁止し、代わりに「1111」を変数入力の有効な置換えとして使用するために、交換することができる。また、任意のパターン(「0000」又は「1111」だけでなく)が所定の除外タグ値(
図10の実例における「1111」に対応する)及び他の所定のタグ値(
図10における「0000」に対応する)として選択されることが可能となり、他の所定のタグ値は、それがランダム・タグ設定命令によって定義された追加の除外タグ値103と一致する場合中間値100と置き換えられる。
【0085】
上記の方式において、単一のランダム・タグ設定命令が、単一の命令に応答して、候補値のセット全体にわたって除外値の指示をとり、残りの値の中からランダム値を選択することができる。除外値を定義するために、
図7に示す形態の追加の命令と対にされたとき、これは、選択を実装する相対的にコード効率のよいやり方をもたらすことができる。
【0086】
しかし、ハードウェアをさらに簡略化するために、ランダム・タグ値を選択するための及び選択から値を除外するための動作を複数の命令に分割することは有用である場合もある。この方式の実例を
図11から
図14に示す。
図11は、ランダム・タグ設定命令の除外値を定義するためのランダム選択状態情報の代替形態を示す。例えば、
図5のランダム・タグ設定命令に示すレジスタXmは、
図6に示すようなビットフィールドの代わりに、
図11に示すランダム選択状態情報の形態を指定することができる。
図11の実例において、候補値のセット全体にわたって除外値を定義するのではなく、ビット・マスク70を候補値の適切なサブセットだけに提供することができ、その値は、ランダム選択状態情報それ自体のフィールド72によって示される。この文脈において、適切なサブセットは、候補セットの値のうちの少なくとも1つを除外するサブセットを意味する。この実例において、ランダム・タグ値72及び対応する除外マスク70の両方の適切なサブセットは、同じレジスタ内に記憶されるが、他の実例は、これらを異なるレジスタに記憶することができる。
【0087】
この方式の場合、ランダム選択動作をいくつかの命令に分割することが可能である。すなわち、
図12に示す、後続のランダム・タグ設定命令による選択に利用可能な値のワーキング・セットとしてランダム値のサブセットを選択する第1の命令、
図13に示す、前に選択された値のサブセットを除外値に対してチェックし、一致がある場合、除外マスクを設定する第2の命令、及び
図14に示す、第3の命令(ランダム・タグ設定命令)であり、第3の命令は、除外マスクによって除外されるものとして示されていないランダム・タグ値72のサブセットの1つを選択するために、
図11に示すランダム選択状態を使用する。
【0088】
図12は、宛先レジスタXdを指定するBeginRandomTag命令(ランダム・タグ選択命令)を示し、それは、乱数発生器又は疑似乱数発生器60の出力に基づいてランダム・タグの小さなセットを選択する。この段階において任意のソフトウェア定義除外値を考慮することは必要ない。いくつかの実装形態において、BeginRandomTag命令は、いくつかの値が恒久的にハードウェアによって除外されるものとして定義された場合、又はそれらが構成レジスタを使用して除外されるものとして構成可能に定義された場合、いくつかの値を選択されることから依然として除外することができる。しかし、ソフトウェアによって提供された入力アドレスに関連付けられたタグに依存する、又は先の命令の結果に依存する任意のソフトウェア定義除外を無視することによって、これは、この命令を実装するためのハードウェアを簡略化することができる。したがって、命令に応答して、命令デコーダ6は、疑似乱数発生器を制御し、又は乱数発生器60は、単純に、ある数のタグ値を選択し、選択された値を、宛先レジスタXdの対応するランダム・タグ・フィールド72に書き込むべく処理回路4を制御する。ランダム選択状態情報の除外マスク70は、当初は選択された値のすべてが非除外として示されることを確実にするために、BeginRandomTag命令に応答して、すべて0に設定される。宛先レジスタの任意の残りのビットは、ゼロ拡張することができる。
【0089】
図13は、2つのソース・レジスタXn、Xm及び宛先レジスタXdを指定するExcludeRandomTag命令(タグ値除外命令)を示し、それは、ソフトウェアによって定義された特定のタグ値が後続のランダム・タグ設定命令によってランダム・タグ値として選択されない可能性があることを確実にするために実行することができる。この命令は、それが、ソース・レジスタXnとして、それに設定されたタグ値40をすでに有するアドレスを指定するレジスタをとるという点において、
図7に示すものと同様であり得る。
図13の命令に応答して、命令デコーダ6は、タグ値40をレジスタXn内のアドレスから抽出するべく、及び第2のソース・レジスタXmに指定されたランダム選択状態情報のフィールド72に記憶されたランダム・タグ値のそれぞれに対して、抽出されたタグ値を比較するべく処理回路4を制御し、抽出されたアドレス・タグ40が、前にBeginRandomTag命令によって追加されたランダム・タグ72のいずれかに一致する場合、除外マスク70の対応するビットが、宛先レジスタXd内の1に設定される。ランダム・タグ値72それら自体は、単純に、ソース・レジスタXmから変更されずに宛先レジスタXdに書き込まれる。ExcludeRandomTag命令は、ランダム・タグ値72のうち1つよりも多くが除外されるべきかどうかをチェックするために異なるアドレスを用いて複数回実行することができる。
【0090】
図14は、ソース・レジスタXmに記憶されたランダム選択状態に基づいて、
図13のExcludeRandomTag命令によって除外されなかった残りのタグのうちの1つを選択し、選択されたタグを、ソース・レジスタXnに指定されたアドレスに挿入し、結果を宛先レジスタXdに書き込むランダム・タグ設定命令(EndRandomTag)を示す。したがって、マルチプレクサ110は、除外マスク70のそれぞれのビットの値に応じて、レジスタXmに指定されたランダム・タグ値72のサブセットから選択することができる。BeginRandomTag命令とEndRandomTag命令との間のExcludeRandomTag命令の最大T-1のインスタンス(その場合、TがレジスタXmに示されるサブセット内のランダム・タグの数である)という条件で、除外されない、したがって、宛先レジスタXdに指定されたアドレスにおけるランダム・タグ値として挿入するために、マルチプレクサ80によって選択することができる、少なくとも1つのランダム・タグ値が常にある。
【0091】
したがって、動作をいくつかの命令に分割することによって、これにより、タイミング要件が満たされ、各命令が、最大2つのソース・レジスタを指定するのを必要とするだけであることを確実にする(レジスタ読取りポートの効率的な使用に有用であり得る)、処理ハードウェアを作り上げるのがより容易になり得、その一方で、依然として、入力アドレスのそれぞれのアドレス・タグから抽出された2つよりも多くの値が、選択から除外されることが可能になる。
【0092】
上記に示したすべての実装形態の実例が、実例に過ぎず、選択されることからある値を除外するランダム・タグ設定命令のアーキテクチャ機能が、他のハードウェア実装形態を使用して実装することもできることが理解されよう。
【0093】
図15は、ランダム・タグ設定命令を処理する方法を示す流れ図を示す。ステップ100において、命令デコーダ60が、ランダム・タグ設定命令を復号し、それは上記に示した命令の形態のいずれかであり得る。ステップ102において、デコーダ6が、候補タグ値のセットの1つをランダムに又は疑似ランダムに選択するべく処理回路4を制御する。いくつかの命令のバリアントにおいて、1つ又は複数の除外値が、ステップ102において、選択されるのが防止される可能性がある。どの値を除外するべきかを表すやり方のいずれかは、上記に論じたように使用することができる。ステップ104において、命令デコーダ6が、タグ設定宛先アドレスのアドレス・タグを、選択されたランダム・タグ値それ自体又は選択されたランダム・タグ値の変換のいずれかに設定するべく処理回路4を制御する。場合によっては、タグ設定宛先アドレスそれ自体のビット又は複数のビットに基づいて、ランダム・タグ値を選択するステップを変換することが望ましい場合がある。これは、選択されることからいくつかの値を除外する命令の形態に特に有用であり得る。何故ならそれらは特殊ハードウェアに特有の値として使用されるからである。例えば、次いで、いくつかの実装形態において、値が、タグの任意の他の値に対して一致するとみなされる「全一致」値として確保されている場合、アドレスが見つけられるアドレス空間の一部分に応じて、異なる値を全一致値として使用することが望ましい場合がある。例えば、0に等しい最上位ビットを有するアドレスは、1つの値を全一致値として使用することができ、1に等しい最上位ビットを有するアドレスは、異なる値を全一致値として使用することができる。これにより、意図されたとおりに動作するレガシー・コードがサポートされる一方で、実装形態が簡略化され得る。ステップ102において、特定のタグ設定宛先アドレスにかかわらず同じやり方でランダム値を選択するが、次いで、アドレスの他のビットに応じて変換(ビットの反転などの)を続いて適用することによって、これにより、レガシー機能が、ランダム選択ステップ102を不必要に複雑化することなく、レガシー・コードによって本来意図されたとおりに働くことが可能になり得る。
【0094】
任意選択で、ステップ106において、タグ設定宛先アドレスによって識別された、アドレス指定された位置を含むメモリ位置の対応するブロックに関連付けられたガード・タグが、やはりランダム・タグ値に設定され得る。したがって、ランダム・タグ設定命令に応答して、命令デコーダ6が、ランダム・タグ値を、アドレス指定された位置に関連付けられたガード・タグを記憶する位置に書き込むべく、メモリ・アクセス回路15を制御することもできる。
【0095】
図16は、使用することができるシミュレータ実装形態を示す。先に説明した実施例は、該当する技法をサポートする具体的な処理ハードウェアを動作させる装置及び方法の観点から本発明を実装するが、コンピュータ・プログラムの使用を通じて実装される、本明細書に説明する実施例に従って命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、ハードウェア・アーキテクチャのソフトウェア・ベースの実装形態を提供する限りにおいて、しばしば、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムが、ダイナミック・バイナリ変換機を含めて、エミュレータ、仮想マシン、モデル、及びバイナリ変換機を含む。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム220を実行するホスト・プロセッサ230上で実行し、シミュレータ・プログラム210をサポートすることができる。いくつかの構成において、ハードウェア、用意された命令実行環境、及び/又は同じホスト・プロセッサ上に用意された複数の明確な命令実行環境の間に複数のシミュレーションの層がある可能性がある。歴史的に、強力なプロセッサが、妥当な速度で実行するシミュレータ実装形態を提供するのに必要とされてきたが、そのような方式は、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが所望されるときなど、ある状況において正当化される可能性がある。例えば、シミュレータ実装形態は、命令実行環境に、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を提供し、又は典型的には異なるハードウェア・アーキテクチャに関連付けられた命令実行環境を提供することができる。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁に説明されている。
【0096】
シミュレーションした実施例において、実施例が特定のハードウェアの構成又は特徴を参照してこれまで説明してきた限りでは、等価の機能を適切なソフトウェアの構成又は特徴によって提供することができる。例えば、特定の回路をコンピュータ・プログラム論理としてシミュレーションした実施例に実装することができる。同様に、レジスタやキャッシュなどのメモリ・ハードウェアをシミュレーションした実施例にソフトウェア・データ構成として実装することができる。これまでに説明した実施例において参照したハードウェア要素の1つ又は複数がホスト・ハードウェア(例えば、ホスト・プロセッサ230)上に存在する配置において、適切な場合、いくつかのシミュレーションした実施例がホスト・ハードウェアを利用することができる。
【0097】
シミュレータ・プログラム210は、コンピュータ可読記憶媒体212(非一時的媒体でもよい)上に記憶することができ、プログラム・インターフェース(命令実行環境)を、シミュレータ・プログラム210によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである目的コード200(アプリケーション、オペレーティング・システム及びハイパーバイザを含むことができる)に提供する。したがって、上記に説明したランダム・タグ設定命令を含めて目的コード200のプログラム命令は、シミュレータ・プログラム210を使用して命令実行環境内から実行することができ、したがって、上記に論じた装置2のハードウェア上の特徴を実際には有さないホスト・コンピュータ230は、これらの特徴をエミュレートすることができる。例えば、シミュレータ・プログラム210は、目的コード200の命令によってメモリへのアクセスを制御するメモリ・アクセス・プログラム論理214を含むことができる。例えば、メモリ・アクセス・プログラム論理214は、ガード・タグとアドレス・タグとの比較を実施し、ガード・タグとアドレス・タグとのいずれかの不一致が検出されたどうかを報告する命令を含むことができる。また、シミュレータ・プログラム210は、タグ設定プログラム論理216を含むことができ、タグ設定プログラム論理216は、目的コード200に含まれるランダム・タグ設定命令に応答して、上記に論じたようにランダムに選択された値へのタグ設定宛先アドレスに関連付けられたアドレス・タグを、ハードウェア実施例がアドレス・タグを設定するやり方に対応するやり方で、トリガするための命令を含む。
【0098】
本出願においては、「ように構成される(configured to...)」という単語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するのに使用される。この文脈では、「構成(configuration)」は、ハードウェア又はソフトウェアの相互接続の配置又はやり方を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有することができ、又はプロセッサ若しくは他の処理デバイスは、機能を実施するようにプログラムすることができる。「ように構成される(configured to)」は、装置要素が、定義された動作を提供するために任意のやり方で変更される必要があることを意味しない。
【0099】
本発明の例示的な実施例を添付の図面を参照して本明細書に詳細に説明してきたが、本発明がそれらの正確な実施例に限定されないこと、及び添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、本発明の様々な変更形態及び修正形態を当業者によって実施できることを理解されたい。