(57)【要約】  装置が、処理回路４と、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対してガード・タグ・チェックを実施するメモリ・アクセス回路１５であって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較することを含む、メモリ・アクセス回路と、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するべく処理回路４を制御するために、タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答する命令デコーダ６とを有する。
2021517690.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
処理回路と、
関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対してガード・タグ・チェックを実施するメモリ・アクセス回路であって、前記ガード・タグ・チェックが、前記アドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較することを含む、メモリ・アクセス回路と、
タグ設定宛先アドレスに関連付けられた前記アドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するべく前記処理回路を制御するために、前記タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答する命令デコーダとを備える、装置。
【請求項２】
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、候補タグ値の前記セットの少なくとも１つの除外値が前記ランダム・タグ値として選択されるのを防止するべく、及び前記候補タグ値の残りのサブセットから前記ランダム・タグ値をランダムに選択するべく前記処理回路を制御するように構成される、請求項１に記載の装置。
【請求項３】
前記少なくとも１つの除外タグ値が、前記ランダム・タグ設定命令によって指定された少なくとも１つのレジスタによって識別された１つ又は複数の除外タグ値を含む、請求項２に記載の装置。
【請求項４】
前記少なくとも１つの除外タグ値が、前記ランダム・タグ設定命令のソース・レジスタ又は宛先レジスタに指定されたアドレスに関連付けられたアドレス・タグに対応するタグ値を含む、請求項２又は３に記載の装置。
【請求項５】
前記ランダム・タグ設定命令が、ランダム選択状態情報を記憶する少なくとも１つのソース・レジスタを指定し、
前記ランダム選択状態情報が、候補タグ値の前記セットの少なくともサブセットに対応する複数のビットを含むビットフィールドを含み、前記ビットフィールドの各ビットが、前記対応する候補タグ値が前記少なくとも１つの除外タグ値の１つであるかどうかを示す、請求項２又は３に記載の装置。
【請求項６】
前記命令デコーダは、前記対応するタグ値が前記少なくとも１つの除外タグ値の１つであることを示すように、前記タグ除外宛先アドレスに関連付けられた前記アドレス・タグに対応する前記ビットフィールドのビットを更新するべく前記処理回路を制御するために、前記ランダム選択状態情報の前記ビットフィールドを記憶するためのタグ除外宛先アドレス及び宛先レジスタを指定するタグ値除外命令に応答する、請求項５に記載の装置。
【請求項７】
前記ビットフィールドが、候補タグ値の前記セット全体に対応するビットを含む、請求項５又は６に記載の装置。
【請求項８】
前記ビットフィールドが、候補タグ値の適切なサブセットに対応するビットを含み、前記ランダム選択状態情報が、候補タグ値の前記適切なサブセットの前記タグ値も含む、請求項５又は６に記載の装置。
【請求項９】
候補タグ値の前記適切なサブセットの前記タグ値が、前記ビットフィールドと同じレジスタに指定される、請求項８に記載の装置。
【請求項１０】
前記命令デコーダが、候補タグ値の前記セットの中から候補タグ値の前記適切なサブセットをランダムに選択するべく、及び候補タグ値の前記選択された適切なサブセットの前記タグ値を前記宛先レジスタに書き込むべく前記処理回路を制御するために、前記ランダム選択状態情報の前記タグ値を記憶するための宛先レジスタを指定するランダム・タグ選択命令に応答する、請求項８又は９に記載の装置。
【請求項１１】
前記少なくとも１つの除外タグ値が、構成レジスタに記憶された構成データによって識別された１つ又は複数の除外タグ値を含む、請求項２から１０までのいずれか一項に記載の装置。
【請求項１２】
前記少なくとも１つの除外タグ値が、１つ又は複数のハードウェア定義除外タグ値を含む、請求項２から１１までのいずれか一項に記載の装置。
【請求項１３】
前記少なくとも１つの除外タグ値が、最大Ｎの除外タグ値を含み、前記ランダム・タグ設定命令に応答して、前記命令デコーダが、
候補タグ値の前記セットの少なくともＮ＋１のタグ値をランダムに選択する、
前記選択されたタグ値のそれぞれを前記少なくとも１つの除外タグ値と比較する、及び、
前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグに設定するべき前記ランダム・タグ値として、前記少なくとも１つの除外タグ値のすべてに対して不一致である、前記選択されたタグ値のうちの１つを選択する
べく前記処理回路を制御するように構成される、請求項２から１２までのいずれか一項に記載の装置。
【請求項１４】
前記少なくとも１つの除外タグ値が、所定の除外タグ値、及び前記ランダム・タグ設定命令によって指定された追加の除外タグ値を含み、
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、
候補タグ値の前記セットの１つを、選択されたタグ値としてランダムに選択する、
前記選択されたタグ値が、前記所定の除外タグ値及び候補タグ値の前記セットの他の所定のタグ値の両方と不一致であるときには、前記選択されたタグ値、及び
前記選択されたタグ値が前記所定のタグ値及び前記他のタグ値のうちの一方と一致するときには、前記選択されたタグ値のランダムに選択されたビットを反転させることによって取得された値
の１つである中間値に対して前記追加の除外タグ値の比較を実施する、
前記比較により、前記追加の除外タグ値と前記中間値との不一致が検出されたとき、前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグに設定するべきランダム・タグ値として前記中間地を出力する、及び、
前記比較により、前記追加の除外タグ値と前記中間値との一致が検出されたとき、前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグに設定するべき前記ランダム・タグ値として前記他の所定のタグ値を出力する
べく前記処理回路を制御するように構成される、請求項２から１２までのいずれか一項に記載の装置。
【請求項１５】
前記所定の除外タグ値及び前記他の所定のタグ値の一方が、すべてのビットが０に等しい値を含み、前記所定の除外タグ値及び前記他の所定のタグ値の他方が、すべてのビットが１に等しい値を含む、請求項１４に記載の装置。
【請求項１６】
前記処理回路が、候補タグ値の前記セットから前記ランダム・タグ値を疑似ランダムに選択するように構成される、請求項１から１５までのいずれか一項に記載の装置。
【請求項１７】
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、前記タグ設定宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶された前記ガード・タグを前記ランダム・タグ値に更新するべく、前記メモリ・アクセス回路を制御するようにも構成される、請求項１から１６までのいずれか一項に記載の装置。
【請求項１８】
前記ガード・タグ・チェックが、前記アドレス・タグと前記ガード・タグとの不一致が検出されたとき障害状態指示を返すステップを含む、請求項１から１７までのいずれか一項に記載の装置。
【請求項１９】
前記タグ・チェッキング宛先アドレスに関連付けられた前記アドレス・タグが、前記タグ・チェッキング宛先アドレスのビットのサブセットによって表され、
前記ランダム・タグ設定命令に応答して、前記命令デコーダが、前記ランダム・タグ値に基づいて前記タグ設定宛先アドレスのビットのサブセットを更新するべく前記処理回路を制御するように構成される、請求項１から１８までのいずれか一項に記載の装置。
【請求項２０】
前記タグ設定宛先アドレスのビットの前記サブセットが、前記タグ設定宛先アドレスの少なくとも１つの他のビットに応じて前記ランダム・タグ値の変換に対応する変換されたタグ値に更新される、請求項１９に記載の装置。
【請求項２１】
前記ガード・タグ・チェックにおいて、前記アドレス指定された位置が、前記タグ・チェッキング宛先アドレスに関連付けられた前記アドレス・タグと関係なく選択される、請求項１から２０までのいずれか一項に記載の装置。
【請求項２２】
方法であって、
関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対するガード・タグ・チェックを実施するステップであって、前記ガード・タグ・チェックが、前記アドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップを含む、実施するステップと、
タグ設定宛先アドレスを指定するランダム・タグ設定命令の復号に応答して、前記タグ設定宛先アドレスに関連付けられた前記アドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するステップとを含む、方法。
【請求項２３】
目的プログラム・コードの命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対するガード・タグ・チェックを実施するメモリ・アクセス・プログラム論理であって、前記ガード・タグ・チェックが、前記アドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップを含む、メモリ・アクセス・プログラム論理と、
タグ設定宛先アドレスに関連付けられた前記アドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するために、前記タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラム。
【請求項２４】
請求項２３に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（背景技術）
データ処理装置によって実行されるソフトウェアは、典型的には、高水準プログラミング言語で書き、次いで、ソフトウェアが実行されることになっている装置によってサポートされる命令セット・アーキテクチャに従ってコードにコンパイルすることができる。例えば、ソフトウェアは、最初はＪａｖａ、Ｃ、Ｃ＋＋などのより高い水準の言語で書き、次いで、ｘ８６やＡｒｍ（Ｒ）などのネイティブにサポートされる命令セット・アーキテクチャにコンパイルすることができる。
【先行技術文献】
【非特許文献】
【０００２】
【非特許文献１】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【発明が解決しようとする課題】
【０００３】
Ｊａｖａなどのいくつかの、より高い水準のプログラミング言語は、それらがメモリ・アクセスに関連したあるエラーの有無をチェックするためのラン・タイム・エラー検出チェックを含むので、メモリ安全な言語であるとみなされる。対照的に、ＣやＣ＋＋などのメモリ安全でない言語は、そのようなラン・タイム・エラー・チェックを含まない。メモリ安全でない言語の使用が持続的に広がることは、所与の命令セット・アーキテクチャによるコンパイル済みコードに、攻撃者又は他の悪意のある当事者による利用に脆弱な恐れがある多数のメモリ関連エラーがある可能性があることを意味する。そのようなエラーは、
・  コードによって供給される配列の添え字が配列の正当な境界の外側にある、境界違反、
・  メモリ位置へのアクセスが、そのメモリ位置がすでに割当てを解除され又は解放されてしまった後に行われる、解放済みメモリ使用エラー、
・  関数内で使用された変数（スタック上の値などの）に関連付けられたアドレスへのメモリ・アクセスがすでに関数から復帰した後に行われる、復帰後の使用、
・  変数がそれらの宣言された範囲外でアクセスされる、範囲外使用エラー、及び
・  変数に関連付けられたメモリ・アドレスが、変数が初期化されてしまう前にアクセスされる、初期化前使用エラー
を含み得る。
【０００４】
これらは、結果として予測不可能な挙動となり、攻撃者が利用する手段を潜在的に提供することがあるメモリ関連エラーのほんのいくつかの実例に過ぎない。したがって、あるクラスのメモリ・エラーのラン・タイム検出を手助けするために、所与の処理装置によってサポートされる命令セット・アーキテクチャ内にアーキテクチャ・サポートを提供することが望ましい可能性がある。
【課題を解決するための手段】
【０００５】
少なくともいくつかの実例は、処理回路と、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスのためのガード・タグ・チェックを実施するメモリ・アクセス回路であって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較することを含む、メモリ・アクセス回路と、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するべく処理回路を制御するために、タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答する命令デコーダとを備える装置を提供する。
【０００６】
少なくともいくつかの実例は、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対するガード・タグ・チェックを実施するステップであって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップを含む、実施するステップと、タグ設定宛先アドレスを指定するランダム・タグ設定命令の復号に応答して、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するステップとを含む方法を提供する。
【０００７】
少なくともいくつかの実例は、目的プログラム・コードの命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するコンピュータ・プログラムであって、関連したアドレス・タグを有するタグ・チェッキング宛先アドレスに対するガード・タグ・チェックを実施するメモリ・アクセス・プログラム論理であって、ガード・タグ・チェックが、アドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップを含む、メモリ・アクセス・プログラム論理と、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されたランダム・タグ値に設定するために、タグ設定宛先アドレスを指定するランダム・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラムを提供する。
【０００８】
記憶媒体が、上記に説明したコンピュータ・プログラムを記憶することができる。記憶媒体は非一時的記憶媒体でもよい。
【０００９】
本技法の他の態様、特徴及び利点は、添付の図面と併せて読まれるものとする、以下の実例の説明から明らかであろう。
【図面の簡単な説明】
【００１０】
【図１】データ処理装置の実例を概略的に示す図である。
【図２】アドレス・タグがガード・タグに一致するかどうかをチェックするステップを含む、タグ保護されたメモリ・アクセス動作の実例を示す図である。
【図３】タグ保護されたメモリ・アクセス動作を実施する方法を示す流れ図である。
【図４】ランダム・タグ設定命令の第１の実例を示す図である。
【図５】候補タグ値のセットの少なくとも１つの除外値が、所与のアドレスのアドレス・タグに割り当てられるランダム・タグ値として選択されるのが防止される、ランダム・タグ設定命令の第２の実例を示す図である。
【図６】除外値のうちの少なくともいくつかを示すためのランダム選択状態情報の第１の実例を示す図である。
【図７】入力アドレスのアドレス・タグから抽出されたタグ値が、ランダム・タグ値の後続の選択から除外されることになっていることを示すようにランダム選択状態情報におけるビットフィールドのビットを更新するためのタグ値除外命令の実例を示す図である。
【図８Ａ】選択されることから少なくとも１つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【図８Ｂ】選択されることから少なくとも１つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【図９Ａ】選択されることから少なくとも１つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【図９Ｂ】選択されることから少なくとも１つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【図１０】選択されることから少なくとも１つの除外値を除外しつつ、候補値のセットからランダム・タグ値を選択するためのハードウェア実装形態の実例を示す図である。
【図１１】候補タグ値のサブセットの値と、それらの値のそれぞれが除外されるかどうかを示す対応するビットフィールドとを指定するランダム選択状態情報の第２の実例を示す図である。
【図１２】ランダムに選択された値を候補タグ値のサブセットに追加するためのランダム・タグ選択命令の実例を示す図である。
【図１３】入力アドレスのアドレス・タグに基づいて、ランダム選択状態情報によって示される候補タグ値のサブセットのいずれかを除外するべきかどうかを決定するためのタグ値除外命令の第２の実例を示す図である。
【図１４】図１１に示すランダム選択状態情報に基づいて、所与のアドレスに関連付けられたタグ値をランダムに選択された値に更新するためのランダム・タグ設定命令の別の実例を示す図である。
【図１５】ランダム・タグ設定命令を処理する方法を示す図である。
【図１６】ランダム・タグ設定命令をサポートするシミュレータの実例を示す図である。
【発明を実施するための形態】
【００１１】
上記に論じた種類の、あるメモリ使用エラーに対して保護する１つの方式は、１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されるガード・タグを提供することである可能性がある。タグ保護されたメモリ・アクセス動作が、メモリ・システムにおける特定のアドレス指定された位置を識別する宛先アドレスに基づいて要求されたとき、ガード・タグ・チェックを実施することができる。ガード・タグ・チェックにおいて、メモリ・アクセス回路は、宛先アドレスに関連付けられているアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む１つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されているガード・タグと比較することができる。メモリ・アクセス回路は、いくつかの実例において、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成することができる。この指示は、メモリ・アクセスが成功するように許可されているのかどうか、又は後続の動作が成功することができるのかどうか、又はメモリ・アクセスが正常であるものとして継続することを許可しながら単に報告することができるのかどうかを制御するのに使用することができる。
【００１２】
これは、例えば、ＣやＣ＋＋などのメモリ安全でない言語に基づいてコードをコンパイルするコンパイラが、メモリの領域を初期化するとき、コードがアクセスすることが予想されるメモリのブロックのガード・タグを特定の値に設定するので有用であり得、対応するアドレス・タグ値をそれらのブロックを指し示す宛先アドレスに関連付けることができる。メモリ使用エラーが起きた場合、例えば、アドレス・ポインタが範囲外で使用され、又は初期化された有効範囲の境界の外に及ぶ場合、アドレス指定された位置に関連付けられたガード・タグは、宛先アドレスに関連付けられたアドレス・タグに一致しない可能性がありそうである場合があり、この場合、エラー処理応答又はエラー報告機構をトリガすることができる。取られる特定の応答は、実行されるソフトウェアの特定の必要性に、又はアーキテクチャの特定のマイクロアーキテクチャ実装形態に依存することができる。したがって、高水準言語がメモリ・アクセス・エラーに対して保護するためにラン・タイム・エラー・チェックを実施する手段を有さなくても、コンパイル済みコードに使用されるＩＳＡは、そのようなチェックを実施するためのアーキテクチャの特徴を含むことができる。
【００１３】
以下に論じる技法において、データ処理装置は、タグ設定宛先アドレスを指定するランダム・タグ設定命令をサポートする命令デコーダを有することができる。ランダム・タグ設定命令に応答して、命令デコーダは、タグ設定宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されるランダム・タグ値に設定するべく処理回路を制御する。
【００１４】
この命令の形態は、いくつかの理由から有用であり得る。実際には、メモリ位置の各ブロックに対してガード・タグを記憶する記憶オーバーヘッドを制限するために、各ガード・タグにおけるビットの数は、相対的に少ない可能性があり、例えば、いくつかの実装形態において４ビットである可能性がある。タグ・ビットの数が少なければ少ないほど、単純に、そのメモリのブロックにアクセスすることが意図されていなかったにもかかわらず、同じガード・タグ値を有するメモリのブロックに対してたまたま一致したので、誤ったメモリ・アクセスがガード・タグ・チェックに合格する可能性が大きくなる。例えば、４ビットのガード・タグの場合、所与のアドレスに対する誤ったアクセスとして実際にフラグを立てるべきであるメモリの領域に対して、ガード・タグに対して誤って一致する可能性は１６分の１である。
【００１５】
所与の宛先アドレスに関連付けられたアドレス・タグを候補タグ値のセットからランダムに選択されるランダム・タグ値に設定するための命令を提供することによって、これは、デバイスのクラスが、それぞれ、同じコードを実行する場合、それらは同じアドレスに異なるランダム・タグ値を割り当てる可能性があることを意味する。まず、これはエラー検出を改善することができる。何故なら、たとえ、クラス内の１つのデバイスが誤ってアクセスされたメモリの領域に対して一致するタグ値をたまたま選択したとしても、クラス内の他のデバイスがランダム・タグ値として異なる値を選択していたことになり、したがって、ガード・タグの不一致を検出し、エラーを報告することができるためである。したがって、デバイスのクラスからエラー・レポートをクラウドソースすることによって、クラス内の少なくともいくつかのデバイスが、プログラム・コードの所与の部分においてアドレスに使用された、ランダムに選択された値の拡散により、エラーを検出することができる可能性がある。したがって、ランダム・タグ設定命令の使用により、メモリ関連エラーがデバイスの母集団において検出される確率が改善され得る。
【００１６】
また、アドレス・タグに割り当てる値をランダムに選択することによって、これは、デバイスの大きな母集団に対して使用可能である攻撃を攻撃者が首尾よく開始することをはるかに困難にする。たとえ攻撃者がたまたま１つのデバイス上の正しいタグ値を推測することができたとしても、他のデバイスがプログラムの同じ個所において異なるランダムに選択されたタグ値をメモリ・アクセスに使用するので、攻撃者の首尾よい攻撃は、他のデバイスには効果を発しない可能性がある。これは、特に有用である。何故なら、実際には、有効な攻撃を開始するために、攻撃者が、単一のメモリ・アクセスのガード・タグを推測ことができることを単に必要としない可能性があるが、プログラムに、ある望ましくない動作を実施させる又はプログラム・コードの作者によって意図されていない効果を提供することができるために、いくつかの首尾よい推測を連続してつなぎ合わせる必要がある可能性があるからである。したがって、一連のメモリ割当てのそれぞれが、ランダム値に設定された対応するアドレス・タグを有する場合、連続割当てのそれぞれに割り当てられたタグ値の異なるパターンの順列の数が増加し、したがって、デバイス母集団全体が、それぞれ、所与のメモリ割当てのセットに対してランダム・タグ値の異なる組合せを有する、多くのより小さい部分母集団に分割され、攻撃をより一層困難にし、任意の首尾よい攻撃をデバイスの母集団のより小さいサブセットに限定する。
【００１７】
ランダム・タグ設定命令は、所与の宛先アドレスに関連付けられたアドレス・タグを設定する唯一のやり方である必要がないことが理解されよう。命令デコーダは、宛先アドレスに関連付けられたアドレス・タグが、ランダム・タグ設定命令に関して非決定的にハードウェアによってランダムに選択されるのではなく、ソフトウェアそれ自体によって提供され、決定的である（すなわち、同じプログラムを実行するすべてのデバイスにわたって同じである）、あるソフトウェア定義値に設定されることを可能にするタグ設定命令をサポートすることもできる。これにより、ソフトウェア開発者には、ランダム・タグ設定命令又は固定値タグ設定命令を常用として使用するかどうかの選択の権利が与えられる。
【００１８】
ランダム・タグ設定命令のいくつかの実例において、ランダム・タグ値は、候補タグ値のセット全体からランダムに選択することができる。例えばＮビットのタグ値は、２Ｎの異なる値を有することができ、したがって、ランダム・タグ値は、それらの２Ｎの値のうちのいずれかからランダムに選択することができる。
【００１９】
しかし、ランダム・タグ設定命令の１つのバリアントに応答して、命令デコーダは、候補タグ値のセットの少なくとも１つの除外値がランダム・タグ値として選択されるのを防止するべく、及び候補タグ値の残りのサブセットからランダム・タグ値をランダムに選択するべく処理回路を制御することができる。ある値をランダム・タグ値として選択されることから除外するが、次いで、ランダム・タグ値を残りのサブセットからランダムに選択することができる能力は、いくつかの理由から有用であり得る。まず、いくつかのタグ値を特別な目的に確保しておくことができる。例えば、候補セットの１つのタグ値を、任意の他のタグ値に対して一致するとみなされる「全一致」値として確保しておくことができる（例えば、これはセキュリティ要件がより低い、あるメモリ・アクセスのアドレスに対してガード・タグ・チェックを効果的に無効にするのに有用であり得る）。したがって、「全一致」挙動が不適切であるアドレスにアドレス・タグを設定するとき、ランダム・タグ値として選択することができる候補タグ値のサブセットから「全一致」値を除外することが望ましい場合がある。他の特殊タグ値を割り当てることもできる。したがって、場合によっては、少なくとも１つの除外タグ値は、１つ又は複数のハードウェア定義除外タグ値を含むことができ、それはハードウェアによって固定される。別の実例において、少なくとも１つの除外タグ値のセットは、構成レジスタに記憶された構成データによって識別された１つ又は複数の除外タグ値を含むことができる。例えば、デバイスのある機能は、任意選択である可能性があり、構成レジスタは、そのような機能が有効にされるかどうかを指定することができる。どの特徴を有効にするかに応じて、あるタグ値を除外する必要がある可能性がある。例えば、構成レジスタは、対応する全一致値が選択から除外されるかどうかを選択するために、上記に論じた「全一致」機能を有効にするか又は無効にするかを定義することができる。構成レジスタは、ランダム・タグ設定命令それ自体によって指定されないレジスタ、例えば、処理装置のアーキテクチャによって提供される状態レジスタ又は他の制御レジスタでもよい。
【００２０】
他の実例において、ソフトウェアが、ランダム・タグ値として選択されることから除外される候補タグ値のセットのある値を指定することを可能にすることが望ましい場合がある。例えば、少なくとも１つの除外タグ値は、ランダム・タグ設定命令によって指定された少なくとも１つのレジスタによって識別された１つ又は複数の除外タグ値を含むことができる。また、ランダム・タグ設定命令の命令コード化によって直接示される即値として除外タグ値を指定するランダム・タグ設定命令のバリアントを提供することが可能である場合がある。別の方式は、ランダム・タグ設定命令が、対応するアドレス・タグを有するアドレスを含むソース・レジスタ又は宛先レジスタ（又は両方）を指定することであり得、そのアドレスのアドレス・タグのタグ値は、抽出することができ、少なくとも１つの除外タグ値の１つであると決定することができる。
【００２１】
ソフトウェアがどの値を除外するべきかを示すことを可能にするためにどの方式が使用されるかにかかわらず、あるソフトウェア定義値を選択されることから除外することができる能力は有用であり得る。何故なら、メモリのブロックの連続割当てが異なるタグ値を使用することをソフトウェアが確実にし、したがって、実際にはメモリの１つの領域を目的にするべきメモリ・アクセスが、異なるタグ割当てに関連付けられた次の領域まで波及する場合、異なるガード・タグが、その境界違反が検出されることを可能にすることが望ましい可能性があるためである。したがって、メモリの領域が２つの既存の割当ての間に割り当てられるヒープ又は他のデータ構造にメモリを割り当てる場合、ソフトウェアは、新たな割当てに設定されたガード・タグが、先行する割当てに関連付けられたガード・タグ及び後続の割当てに関連付けられたガード・タグの両方と異なることを確実にしたいと望む可能性がある。別の実例は、スタックデータ構造に領域を割り当てるときでもよく、その場合、前回スタック割当てが行われたときにアドレスに割り当てられたタグの値を除外することが望ましい場合がある。
【００２２】
いくつかの実例は、除外値を識別するこれらのやり方のうちの１つだけを許容することができる。他は、これらの技法の組合せをサポートすることができ、例えば、命令は、いくつかのソフトウェア定義除外タグ値を指定することができるが、いくつかのハードウェア定義値は恒久的に除外することもでき、又はそのようなハードウェア定義タグ値を、構成レジスタによって指定された情報に応じて選択的に除外することができる。
【００２３】
少なくとも１つの除外タグ値の少なくとも一部が、ランダム・タグ設定命令のレジスタによって識別される場合、この情報は、そのレジスタ内に異なるやり方で表すことができる。概して、ランダム・タグ設定命令は、ランダム選択状態情報を記憶する少なくとも１つのソース・レジスタを指定することができる。
【００２４】
１つの実例において、ランダム選択状態情報は、ビットフィールドの各ビットが、対応する候補タグ値が少なくとも１つの除外タグ値のセットの１つであるかどうかを示す、候補タグ値のセットの少なくともサブセットに対応するいくつかのビットを含むビットフィールドを含むことができる。ビットフィールドのビットは、実行されるソフトウェアの前の命令によって設定することができる。
【００２５】
場合によっては、どの値が除外されることになっているかに応じてソフトウェアがビットフィールドのそれぞれのビットの値を直接決定することが可能であるが、前に割り当てられたアドレス・タグによって使用されたある値（ソフトウェアによる決定的選択ではなく、それら自体ランダム選択を通じて決定された可能性がある）を除外することが望ましい場合、ソフトウェアは、どの値を除外すべきかをあらかじめ知っていない可能性がある。したがって、命令デコーダが、ランダム選択状態情報のビットフィールドを記憶するためのタグ除外宛先アドレス及び宛先レジスタを指定するタグ値除外命令もサポートすることは有用であり得る。タグ値除外命令に応答して、命令デコーダは、対応するタグ値が少なくとも１つの除外タグ値のセットの１つであることを示すように、ビットフィールドのビットを更新するべく処理回路を制御することができ、それは、タグ除外宛先アドレスに関連付けられたアドレス・タグに対応する。これにより、プログラマ／コンパイラが、タグ除外宛先アドレスとして、タグ値を後続のランダム選択から除外するべき任意のアドレスを指定するタグ値除外命令の１つ又は複数のインスタンスを含むことが可能になる。これにより、除外される値に対応するビットフィールドのそれぞれのビットが追加され、次いで、後続のランダム・タグ設定命令が、タグ設定アドレスとして指定された異なるアドレスに設定するべくアドレス・タグのランダム選択を制御するために、ビットフィールドを使用することができる。
【００２６】
いくつかの実例において、ランダム選択状態情報のビットフィールドは、タグ値のセット全体に対応するビットを含むことができる。
【００２７】
しかし、他の場合において、ビットフィールドは、候補タグ値の適切なサブセットに対してのみビットを含むことができる。例えば、ある候補タグ値が、恒久的に除外されるものとしてハードウェア定義された場合、それらの候補タグ値にビットを提供する必要がない可能性がある。
【００２８】
ビットフィールドがすべての可能な候補タグ値に対してビットを含まない可能性がある別の理由は、候補セット全体の中からのある候補タグ値の適切なサブセットの選択が、先の命令によってすでに行われている可能性があり、そして、ランダム選択状態情報は、その候補タグ値の適切なサブセットとして選択されたタグ値を含むことができることである可能性がある。候補タグ値の適切なサブセットのタグ値は、どの値が除外されるかを示すビットフィールドと同じレジスタ、又は異なるレジスタのいずれかに指定される可能性がある。しかし、ランダム・タグ設定命令によって必要とされるレジスタ読取りの数を低減するために、タグ値及びビットフィールドの両方を同じレジスタに指定することは有用であり得る。本実装形態の場合、命令デコーダは、ランダム選択状態情報のタグ値を記憶するための宛先レジスタを指定するランダム・タグ選択命令をサポートすることができる。ランダム・タグ選択命令に応答して、命令デコーダは、候補タグ値のセットの中から候補タグ値の適切なサブセットをランダムに選択するべく（例えば、任意の値が除外されるかどうかを考慮することなく）、及び選択された、候補タグ値の適切なサブセットのタグ値を、ランダム選択状態情報を記憶する宛先レジスタに書き込むべく処理回路を制御することができる。
【００２９】
この方式の場合、ある除外値を除外しつつランダム・タグ値を選択する動作全体は、いくつかの別個の命令に分割することができ、それによって、ハードウェア実装形態が簡略化され得る。例えば、動作は、ランダム・タグ選択命令のインスタンス、次いで、上記に説明したタグ値除外命令の１つ又は複数のインスタンス（対応するアドレスからタグ値を抽出し、これらの値が除外されることを示すようにランダム選択状態のビットフィールドを更新するための）、及び次いで、除外されない候補タグ値の適切なサブセットの１つを選択するランダム・タグ設定命令を使用して実装することができる。例えば、ランダム選択状態情報がＴの候補タグ値をタグ値の適切なサブセットとして示す場合、この方式により、最大Ｔ−１の候補値が除外されることが許容され、したがって、依然としてランダム・タグ設定命令によってランダム・タグ値として選択することができる、候補タグ値の適切なサブセットの少なくとも１つが常に残っている。この方式により、ハードウェア実装形態が簡略化され、タイミング要件を満たすことがより簡単になる。何故なら、ランダム・タグ選択命令が任意の値が除外されるかどうかを考慮する必要なく、ランダム発生源に基づいてＴ個の値の選択を行うことができ、その一方で、ランダム・タグ設定命令及びタグ値除外命令を、乱数発生源を考慮する必要なく、選択のための簡単な論理演算及び／又はマルチプレクサを使用して実装することができるからである。また、この方式は、命令ごとに必要とされるソース・レジスタの数を限定することができ、それは、一般に、典型的なマイクロプロセッサ設計においてレジスタ読取りポートの数を限定することができるので、有用である可能性がある。
【００３０】
それにもかかわらず、他の方式は、乱数発生源に基づく選択及び同じ命令に応答して実施されるいくつかの値の除外の両方をサポートするハードウェア実装形態を提供することができる。この場合、ハードウェア効率のよいやり方で命令を実装し、その一方で、少なくとも１つの除外値以外の残りの候補値のそれぞれを選択する均等な確率分布を依然として確実にする上で課題がある。
【００３１】
最大Ｎの除外タグ値の除外をサポートするハードウェア実装形態のための１つの方式において、命令デコーダは、
・  候補タグ値のセットの少なくともＮ＋１のタグ値をランダムに選択する、
・  選択されたタグ値のそれぞれを各除外タグ値に対して比較する、及び、
・  タグ設定宛先アドレスに関連付けられたアドレス・タグに設定するべきランダム・タグ値として少なくとも１つの除外タグ値のすべてに対して不一致である、選択されたタグ値のうちの１つを選択する
べく処理回路を制御することができる。
【００３２】
例えば、Ｎ＋１のランダム値の選択は、値の、ある疑似ランダム・シーケンスを定義するルック・アップ・テーブル（ＬＵＴ：ｌｏｏｋ  ｕｐ  ｔａｂｌｅ）及びＬＵＴによって提供されるシーケンスのどの部分が抽出され、Ｎ＋１のタグ値として使用されるかを選択するのに使用することができるランダム・シード選択値を提供する線形フィードバック・シフト・レジスタ（ＬＦＳＲ：ｌｉｎｅａｒ  ｆｅｅｄｂａｃｋ  ｓｈｉｆｔ  ｒｅｇｉｓｔｅｒ）又は他の回路を使用して実装することができる。比較及び選択ステップは、除外されないＮ＋１のタグ値のうちの１つを選択するために、比較器、論理ゲート及びマルチプレクサを使用して実装することができる。
【００３３】
単一のランダム・タグ設定命令における選択／除外動作全体を実施する一方でハードウェアを実装するための代替方式は、所定の除外タグ値（ハードウェアに固定される又は構成レジスタに基づいて構成可能である可能性があるが、ランダム・タグ設定命令の命令コード化とは関係なく選択される）及びランダム・タグ設定命令によって指定された追加の除外タグ値の、最大２つの値がランダム選択から除外されることを可能にすることである。この場合、ランダム・タグ設定命令に応答して、命令デコーダは、
・  候補タグ値のセットの１つを、選択されたタグ値としてランダムに選択する、
〇  選択されたタグ値が、所定の除外タグ値及び候補タグ値のセットの他の所定のタグ値の両方と不一致であるときには、選択されたタグ値、及び
〇  選択されたタグ値が所定のタグ値及び他のタグ値のうちの一方と一致するときには、選択されたタグ値のランダムに選択されたビットを反転させることによって取得された値
・  の１つである中間値に対して追加の除外タグ値の比較を実施する、
・  比較により、追加の除外タグ値と中間値との不一致が検出されたとき、タグ設定宛先アドレスに関連付けられたアドレス・タグに設定するべきランダム・タグ値として中間値を出力する、及び、
・  比較により、追加の除外タグ値と中間値との一致が検出されたとき、タグ設定宛先アドレスに関連付けられたアドレス・タグに設定するべきランダム・タグ値として他の所定のタグ値を出力する
べく処理回路を制御することができる。
【００３４】
所定の除外タグ値と同様に、他の所定のタグ値は、ハードウェアにおいて配線で接続してもよく（固定してもよく）、又はランダム・タグ設定命令コード化と関係なく制御レジスタによって指定されるように構成可能であってもよい。
【００３５】
したがって、ランダム値を選択することによって、及び選択された値と一致するか、又は選択された値が所定の除外タグ値又は他の所定のタグ値のうちの一方と一致する場合、反転された、ランダムに選択されたビットを有するかのいずれかである中間値を出力することによって、中間値は、所定の除外タグ値又は他の所定のタグ値のいずれにも決して一致することはなく、任意の他の値をとることができる。次いで、中間値は、追加の（ソフトウェア指定された）除外タグ値に対して比較することができ、この比較において一致がある場合、最終出力ランダム・タグ値を提供するために他の所定のタグ値を中間値と置き換えることができ、そうでない場合、中間値それ自体を出力ランダム・タグ値として使用することができる。単一のランダム値だけが乱数発生源に基づいて選択され、除外値に対して比較される必要があり、それは比較器の数及び選択（多重化）回路の複雑性を限定し、その一方で、非除外値から選択する際の相対的に均等な確率分布を依然として実現するので、この方式は、ハードウェアの複雑性を限定するのに役立つことができる。
【００３６】
所定の除外タグ値及び他の所定のタグ値は、候補タグ値のセット全体の任意の２つのメンバであり得るが、所定の除外タグ値及び他の所定のタグ値のうちの一方が、すべてのビットが０に等しい値であり、他方が、すべてのビットが１に等しい値である（その逆でも可）ことは特に有用であり得る。何故なら、これはランダム・タグ値として選択されない「特殊」タグ値、例えば、「全一致」値のありそうな使用にマッピングすることができるからである。いくつかの実装形態において、所定の除外タグ値及び他の所定のタグ値として定義された値は、配線で接続する（恒久的に固定する）ことができ、又は代替案として、それらは、構成レジスタにおける状態値で定義することができる（例えば、「すべて０」及び「すべて１」の値のどれが除外値であるかを選択する値）。
【００３７】
したがって、上記から、処理回路の実際のハードウェアが、少なくとも１つの除外値を選択から除外しつつ、候補値のセットからランダム選択を実装することができる様々な異なるやり方があることが理解されよう。これは単一の命令に応答して又は命令のシーケンスに応答してのいずれかで行うことができる。ランダム・タグ設定命令のアーキテクチャ面での利点（上記に論じた攻撃に対するエラーの検出確率及び堅牢性の増加の）は、マイクロアーキテクチャ・レベルで選択された具体的なハードウェア実装形態にかかわらず実現することができる。
【００３８】
候補タグ値のセット（又は少なくとも１つの除外値を除外する候補タグ値のセット）からのランダム選択は、真のランダム値又は疑似ランダム値に基づいて行うことができる。したがって、真の乱数発生器を提供することは、上記に論じた技法には不可欠ではないことが理解されよう。場合によっては、ランダム選択は、疑似乱数発生器に基づいてもよい。例えば、ランダム選択は、線形フィードバック・シフト・レジスタから抽出された値に基づくことができる。
【００３９】
実際には、所与のランダム値を所与のアドレスに関連付けられたアドレス・タグに割り当てたので、同じランダム・タグ値を、そのアドレスによって識別された、アドレス指定された位置を含むメモリ位置のブロックのガード・タグに記憶することもしばしば望ましい場合がある。いくつかの実装形態において、これはランダム・タグ設定命令とは別個の命令によって行うことができる。例えば、後続のガード・タグ・設定命令は、アドレス・タグが前にランダム・タグ設定命令によって設定されていたタグ設定宛先アドレスをとることができ、そのアドレスのランダム・タグ値を対応するメモリ位置のブロックの対応するガード・タグに書き込む値として使用することができる。
【００４０】
しかし、他の実装形態において、アドレス・タグとガード・タグ・設定命令との組合せを提供することが可能である場合があり、それは、両方とも、タグ設定宛先アドレスに関連付けられたアドレス・タグをランダムに更新し、ランダム・タグ値に、タグ設定宛先アドレスによって識別された、アドレス指定された位置を含むメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグを更新するべくメモリ・アクセス回路も制御する。これによって、第２の命令を実行する必要性が回避され、したがって、コード密度が低減され得る。
【００４１】
ガード・タグ・チェックにおいて、所与のメモリ・アクセスに対してアドレス・タグとガード・タグとの不一致が検出されたとき、これは障害状態指示のある形態を返すことによって報告することができる。ガード・タグとアドレス・タグとの一致が検出されたかどうかの、生成された指示の特定の形態は、実装形態によって異なる場合がある。場合によっては、タグ保護されたメモリ・アクセス動作は、アドレス指定された位置へのメモリ・アクセスが、ガード・タグとアドレス・タグとの一致が検出されたかどうかに応じて許可されるかどうかを制御するステップを含むことができる。しかし、他の実例において、ガード・タグ・チェックをトリガしたメモリ・アクセスは、ガード・タグとアドレス・タグとの一致が検出されたかどうかにかかわらず、実行することができる。例えば、メモリ位置の所与のブロックに関連付けられたガード・タグは、メモリ・システム内のメモリ位置の異なるブロックに記憶することができ、したがって、ガード・タグにアクセスするステップは、別個の読取り動作を必要とする可能性がある。したがって、ガード・タグとアドレス・タグとが比較されてしまうまでメモリ・アクセスが遅延される場合、それは実際のメモリ・アクセスの処理を遅延させる場合があり、したがって、ガード・タグが利用可能である前に、及びガード・タグとアドレス・タグとの任意の一致が検出されたかどうかにかかわらず、アドレス指定された位置へのメモリ・アクセスを実施し、次いで、ガード・タグが取得され、アドレス・タグと比較されると、一致が検出されたかどうかの別個の指示を生成することが望ましい場合がある。
【００４２】
１つの実例において、一致が検出されたかどうかの指示は、ガード・タグとアドレス・タグとの不一致が検出されたとき生成される障害状態を表す信号でもよい。例えば、メモリ・アクセス回路は、アクセス許可に違反した場合、又はマッピングされていないアドレスにアクセスした場合に生成される障害と同様のメモリ障害をシグナリングすることができ、或いは異なる種類の障害状態を指示することができる。障害信号は、検出された障害に応答するために処理回路をトリガして、例外処理ルーチンを実行することができる。
【００４３】
代替案として、所与のメモリ・アクセスに対してガード・タグがアドレス・タグと不一致であるとき、状態指示が、装置の処理回路にアクセス可能な制御レジスタ内に記録されて、ガード・タグとアドレス・タグとの比較において一致又は不一致が検出されたどうかを指示することができる。次いで、状態情報は、メモリ・アクセスが有効であったかどうかをチェックするために、後続の命令によって読み取ることができる。
【００４４】
ガード・タグ・チェックにおいてアドレス・タグとガード・タグとが一致したのかどうか、又は不一致であったのかどうかを報告する別の選択肢は、コードの実行された部分に関連付けられたエラー・ログに情報を記録することであり得、それはコードの部分の全体を通して検出された任意のガード・タグ・エラーを追跡する。例えば、不一致のガード・タグとアドレス・タグとに応答して、不一致をトリガした宛先アドレス、又は不一致のメモリ・アクセスをトリガした命令の命令アドレスをエラー・ログに記録することができる。この場合、コードの動作を妨げる任意の具体的な処置を実施するのではなく、エラーを単純にエラー・ログに記録することができる。次いでエラー・ログは、後続のソフトウェアのバージョンにおけるエラーを除去することでプロバイダを手助けするためにコードのソフトウェア・プロバイダに利用可能にすることができる。
【００４５】
したがって、ガード・タグ・チェックが実施されたとき、ガード・タグの一致／不一致の指示をメモリ・アクセス回路によって生成することができる、様々なやり方があることが理解されよう。
【００４６】
いくつかの実施例において、対応するガード・タグを有するメモリ位置のブロックは、それぞれ単一のメモリ位置を含むことができる。この場合、各個々のメモリ位置は、異なるガード・タグを有することができ、それは、より大きな範囲のメモリ・エラーを検出することができるようにガード・タグを設定する微細な粒度を提供することができる。
【００４７】
しかし、実際には、各アドレス指定された位置に対して個々のガード・タグを設定するオーバーヘッドは、高すぎる場合があり、各ガード・タグを複数のメモリ位置のブロックに関連付けることが、より効率的であることがある。この場合、いくつかの隣接したメモリ位置は、同じガード・タグを共有することができ、それは、メモリ関連エラーの一般的な形態を検出するのには十分であり得る。
【００４８】
メモリ位置の所与のブロックに関連付けられているガード・タグは、メモリ・システム内の任意の他のメモリ位置において記憶することができる。メモリ・システムにおけるガード・タグの位置が選択される特定のやり方は、実装形態によって又はラン・タイムにおいて大幅に異なる場合がある。いくつかの実例において、ガード・タグを記憶する位置は、処理回路によってアーキテクチャ的にアクセス可能であり得、例えば、ガード・タグ記憶位置は、アドレス指定された位置と同じアドレス空間の一部にマッピングされた位置でもよい。この場合、アドレス指定された位置それ自体と、対応するタグ記憶位置のアドレスとの間のマッピングは、固定し又は配線で接続することができ、又は変数であり得、例えば、メモリ・アクセス回路によって維持される追跡テーブルにおいて、又はトランスレーション・ルックアサイド・バッファにおいて追跡することができる。代替案として、他の実装形態は、所与のアドレス指定された位置に関連付けられたガード・タグを、処理回路にアーキテクチャ的にアクセス可能ではない、他の記憶位置、例えば、処理回路によって実行される命令によってアドレス指定することができるアドレス空間にマッピングされないマイクロアーキテクチャに用意された追加の記憶装置に記憶することができる。この場合、メモリ・アクセス回路は、アドレス指定された位置のアドレスに基づいて、対応するタグ記憶位置を参照するのに使用される特定の内部アドレスを決定し、タグ・データをタグ記憶位置から読み取るのに必要とされる任意の追加のメモリ・アクセスをトリガすることができる。タグ記憶位置が処理回路にアーキテクチャ的にアクセス可能であるかどうかにかかわらず、タグ値は、より高速のアクセスのためにキャッシュ内で、データ値に使用される同じキャッシュ内か、又は専用タグ・キャッシュにおいてかのいずれかでキャッシュすることもできる。
【００４９】
場合によっては、ガード・タグは、相対的に小さくてもよく、例えば、４又は８ビットでもよく、したがって、それぞれメモリ位置の異なるブロックに関連付けられた複数のガード・タグは、同じメモリ位置内に収まることができる。
【００５０】
アドレス・タグは、異なるやり方で宛先アドレスに関連付けることができる。場合によっては、アドレス・タグは、例えば、メモリ・アクセス動作及びガード・タグ・チェックをトリガする、メモリ・アクセス命令によって指定された別個のレジスタを使用して、宛先アドレスとは別個に指定することができる。しかし、他の実例において、アドレス・タグは、宛先アドレスの１つ又は複数の選択されたビットの関数として決定することができる。すなわち、アドレス・タグは、宛先アドレスそれ自体の一部分から導き出された情報を含むことができる。しばしば、命令セット・アーキテクチャが、あるビット数（例えば、６４ビット）を有するアドレスをサポートすることができるが、所与のハードウェア・デバイスは、実際にはそのビット数を使用して表すことができるすべての可能なアドレスをそれが使用するだけのメモリ容量を必要としない可能性がある。例えば、デバイス使用における現在の傾向の場合、２６４の個々のアドレス指定可能な位置を提供する必要性はまだ何もない。したがって、しばしば、メモリ・アドレスのいくつかのビットは、効果的に未使用にする可能性があり、常に同じ値を有するか、又は最上位の「実」アドレス・ビットの符号拡張として設定されるかのいずれかである可能性がある（したがって、未使用部分はすべて０又はすべて１に設定される）。したがって、この未使用部分は、アドレスがレジスタ間で操作され、又はレジスタ間を移動するとき、アドレス・タグを当然アドレスと一緒に輸送することができるので、アドレス・タグ又はアドレス・タグを導き出すための値を表すために、アドレス・タグを取得するために別個のレジスタにアクセスすることを必要とすることを回避するために、また、アドレスと、対応するアドレス・タグとの一致を追跡することをより容易にするために、再使用することができる。
【００５１】
アドレス・タグを決定するために宛先アドレスの一部分を使用する実施例において、このアドレス・タグは、宛先アドレスによって識別された、アドレス指定された位置からの情報がキャッシュ内に記憶されたかどうかを決定するためにキャッシュによって使用することができる宛先アドレスのタグ部分と異なることに留意されたい。多くのキャッシング・スキームは、キャッシュ内のそのデータと並行してキャッシュされたデータの部分のアドレスのタグ部分を記憶することができ、したがって、キャッシュされたデータが、必要とされるアドレスに実際に対応するかどうかを決定するために、所与のアドレスがないかキャッシュを検索すると同時に、アドレスの一部を、キャッシュされたデータと並行して記憶されたタグと比較することができる。しかし、この場合、キャッシュ内のタグと比較されるアドレスのタグ部分は、データが必要とされる特定のアドレス指定された位置を実際に識別するアドレスの一部分の一部であり、すなわち、アドレスのキャッシュ・タグ部分を変更することは、当然、結果としてメモリ・システム内の異なるアドレス指定された位置を指し示すアドレスとなる。対照的に、タグ保護されたメモリ動作に使用されるアドレス・タグの場合、メモリ・アクセス回路は、アドレス・タグから独立してデータが必要とされるアドレス指定された位置を選択することができる。すなわち、アドレス・タグが異なる値を有する場合でも、宛先アドレスによって参照されるアドレス指定された位置は、アドレス指定された位置の選択が宛先アドレスの他の部分だけに依存する可能性があるので、依然として同じである可能性がある。これにより、コンパイラが、特定のアドレスに関連付けられたアドレス・タグを、メモリ・システム内のデータの関連ブロックに割り当てられた、対応するガード・タグ値に一致する任意の値（例えば、上記に論じたランダムに選択された値）に設定する自由が得られる。
【００５２】
アドレス・タグがアドレスのビットのサブセットを使用して表される場合、いくつかの実装形態において、ランダム・タグ設定命令に応答して選択されるランダムに選択された値（任意の除外値を除外する）は、タグ設定宛先アドレスのビットのサブセットに書き込まれる値を決定するために、アドレスの少なくとも１つの他のビットに基づいて変換することができる。これは、アドレス空間のレガシー割当てとの互換性に関して有用であり得、特殊なやり方で解釈されるタグ値の「特殊値」（例えば、「全一致」挙動に対して）は、アドレス空間の異なる部分に対して異なる値を有する必要がある可能性がある。例えば、アドレスを符号拡張することができるので、アドレス指定されたメモリ位置の選択に実際に使用されるアドレスの最上位の「実」（意味のある）ビットが１である場合、最上位の未使用ビットはすべて１である可能性があり、その一方で、最上位の「実」ビットが０である場合、最上位の未使用ビットは０に設定されることが予測される可能性がある。したがって、この件においてこれらの未使用ビットを割り当てた（及びガード・タグ機能を使用するように書かれていなかった）レガシー・コードが継続して正しく機能することを確実にするために、「全一致」値は、最上位の「実」ビットが１であるアドレスには「すべて１」であり、最上位の「実」ビットが０であるアドレスには「すべて０」であり得る。これは「すべて０」と「すべて１」とのうちの一方を除外値として指定することによって実現することができ、候補セットの残りの値からランダム選択する（場合により他の除外値も除外する）ことができ、次いで、アドレスのタグ部分に書き込まれる値を決定し、したがって、最上位の「実」ビットが１又は０であるかどうかにかかわらず、除外値が正しい「全一致」値にマッピングされるために、アドレスの最上位の「実」ビットに基づいて、選択された値を変換するかどうかを決定することができる（例えば、すべてのビットを反転させることによって）。ただビットを反転させるだけでなく、アドレスの１つ又は複数のビットに基づいてランダムに選択された値の他の変換も適用することができることが理解されよう。
【００５３】
いくつかの実装形態において、命令デコーダは、すべてのメモリ・アクセス命令に応答してガード・タグ・チェックをトリガすることができる。代替案として、命令デコーダは、メモリ・アクセス命令の別個のタグ保護されていない及びタグ保護されたバリアントをサポートすることができる。この場合、ガード・タグ・チェックは、メモリ・アクセス命令のタグ保護されたバリアントに応答してトリガすることができる。対照的に、タグ保護されていないメモリ・アクセス命令は、ガード・タグ・チェックを実施することなく、単純に、その命令によって指定された宛先アドレスによって識別された、アドレス指定された位置へのアクセスをトリガすることができる。したがって、すべてのメモリ・アクセス命令に応答してガード・タグ・チェックを実施することは不可欠ではない。場合によっては、ガード・タグ・チェックをトリガするための命令（タグ・チェッキング宛先アドレスによって識別された位置への任意の対応するメモリ・アクセスなしで）をサポートすることもできる。
【００５４】
しかし、たとえすべてのメモリ・アクセス命令がタグ保護されたメモリ・アクセス命令と解釈されたとしても、命令セット・アーキテクチャがある動作に対するガード・タグ・チェックを選択的に無効にすることをサポートすることができる他のやり方が依然としてある可能性がある。例えば、処理装置の制御レジスタ内の制御パラメータが、タグ比較を選択的に無効にすることができる。上記に論じたように、別の選択肢は、アドレス・タグのある値を特別なやり方で解釈し、したがって、アドレス・タグがガード・タグの任意の可能な値に対して一致するとみなすはずであることをそれらが示し、この場合も、タグ比較の効果を効果的に無効にし、したがって、アドレス・タグがガード・タグに一致するかどうかにかかわらず、エラーが何も報告されないことである。
【００５５】
図１は、データ処理装置２の実例を概略的に示す。これは、単純に装置の構成要素のサブセットの高水準表現であり、装置は、例示していない他の多くの構成要素を含むことができることが理解されよう。装置２は、命令デコーダ６によって復号された命令に応答してデータ処理を実施する処理回路４を備える。命令デコーダ６は、命令によって表された対応する処理動作を実施するように処理回路４を制御する制御信号１０を生成するために命令キャッシュ８から取り出された命令を復号する。処理回路４は、レジスタ１４に記憶された値に対して演算を実施して、レジスタに書き戻される結果値を生成する１つ又は複数の実行ユニットを含むことができる。例えば、実行ユニットは、算術演算又は論理演算を実行する算術演算／論理演算装置（ＡＬＵ）、浮動小数点オペランドを使用して動作を実行する浮動小数点ユニット及び／又は複数の独立したデータ要素を含むオペランドに対してベクトル演算を実施するベクトル処理ユニットを含むことができる。処理回路は、レジスタ１４とメモリ・システムとの間のデータの転送を制御するメモリ・アクセス・ユニット（又はロード／ストア・ユニット）１５も含む。この実例において、メモリ・システムは、命令キャッシュ８と、レベル１データ・キャッシュ１６と、データと命令との間で共有されるレベル２キャッシュ１７と、メイン・メモリ１８とを含む。他のキャッシュ階層も可能であり、これはほんの１つの実例に過ぎないことが理解されよう。メモリ管理ユニット（ＭＭＵ：ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）２０が、ロード／ストア・ユニット１５によってトリガされたメモリ・アクセスをサポートするアドレス変換機能を提供するために設けられる。メモリ管理ユニット（ＭＭＵ）は、メモリ・システム１６、１７、１８に記憶されたページ・テーブルからエントリのサブセットをキャッシュするトランスレーション・ルックアサイド・バッファ（ＴＬＢ）２２を有する。各ページ・テーブル・エントリは、対応するアドレスのページのアドレス変換マッピングを提供することができ、ページが読取り専用領域なのかどうか、又は読取り可能及び書込み可能の両方であるのかどうかを指定するアクセス許可、又はどの特権レベルがページにアクセスできるのかを指定するアクセス許可などのアクセス制御パラメータを指定することもできる。
【００５６】
図２は、タグ保護されたメモリ・アクセスの概念を概略的に示す。メモリ・システム内のメモリ位置を参照するのに使用される物理アドレス空間は、それぞれ、ある数のアドレス指定可能な位置を含むいくつかのブロック３０に論理的に分割することができる。簡潔にするために、図２の実例において、各ブロック３０は、４つのメモリ位置を含むが、他のブロック・サイズも使用することができる。各ブロック３０は、対応するガード・タグ３２に関連付けられる。ある数のブロック３０に関連付けられたガード・タグは、物理アドレス空間内の異なる、アーキテクチャ的にアクセス可能なメモリ位置３４内か、又はアーキテクチャ的にアクセス可能でない（同じ物理アドレス空間にマッピングされない）メイン・メモリ１８に設けられた追加の記憶位置内のいずれかに集め、記憶することができる。別個の非アーキテクチャ的にアクセス可能な記憶装置の使用は、場合によっては、ガード・タグ値をキャッシュするためのデータ・キャッシュ１６、１７における空間を使い尽くすことを回避するのに好ましいことがあるが、それは、通常のコードの性能に影響を与えることがあり、コヒーレンス管理をより複雑にすることがある。追加のタグ・キャッシュ１９は、タグがメイン・メモリ１８からアクセスされなければならない場合よりも高速にアクセスするために、非アーキテクチャ的にアクセス可能な記憶装置からのタグ値をキャッシュするためにマイクロアーキテクチャに設けることができる。どのタグ記憶位置３４が各ブロック３０に対応するかの特定のマッピングは、ロード／ストア・ユニット１５によって制御することができ、及び配線で接続することができ、又はプログラム可能であることができる。図２において、各タグ３２は物理アドレスのブロックに関連付けられる一方、仮想メモリ・アドレス空間における仮想メモリ位置に関連付けられたガード・タグ３２を設けることも可能であるが、これは各メモリ・アクセスに対していくつかの追加のアドレス変換を必要とする場合がある。したがって、ガード・タグ３２を物理メモリ位置に関連付けることによって、これは性能を改善することができる。概して、ガード・タグ３２を物理アドレス空間の対応するブロック３０に正確にどのように関連付けられるのかは特定のマイクロアーキテクチャ実装形態の選択である。概して、必要なのは所与のメモリのブロックに関連付けられたガード・タグ３２にアクセスし、それを比較することができることだけである。
【００５７】
したがって、タグ保護されたメモリ・アクセスが必要とされるとき、アドレス・タグ４０（アクセスされるアドレス指定された位置４４を識別する宛先アドレス４２に関連付けられる）は、アドレス指定された位置４４を含むメモリ位置のブロック３０に関連付けられるガード・タグ３２に対して比較される。例えば、図２において、宛先アドレス４２は、図２のアドレス空間において４４と記された、メモリ内のある位置Ｂ１を指し示す。したがって、位置Ｂ１を含む位置Ｂのブロックに関連付けられるガード・タグＢは、宛先アドレス４２に関連付けられたアドレス・タグ４０に対して比較される。図２の最上部に示すように、アドレス・タグ４は、宛先アドレスそれ自体の選択されたビットの関数として決定することができる。具体的には、アドレス・タグは、アドレス指定された位置４４として選択されることになっている具体的なメモリ位置を示すために未使用である宛先アドレスの一部分内のビットから決定することができる。例えば、いくつかのアーキテクチャにおいて、宛先アドレスのビットの最上部分は、符号拡張などのある固定値（すべて０又はすべて１）を常に有することができ、したがって、アドレスは、これらの未使用ビットを任意のタグ値で上書きすることによって、アドレス・タグ４０でタグ付けすることができる。特定のアドレス・タグ値は、例えば、プログラマ又はコンパイラによって選択することができ、又は以下に論じるようにランダムに選択することができる。アドレス・タグ及びガード・タグ３２は、相対的に少ないビット数、例えば、４ビットであることができ、したがって、メモリ内及び宛先アドレス内の大きな空間を占有しなくてもよい。タグ空間の４ビット、すなわち、タグの１６個の可能な値を提供することは、しばしば、多くの共通の種類のメモリ・アクセス・エラーを検出するのに十分であり得る。
【００５８】
したがって、タグ保護されたメモリ・アクセスが実施されたとき、ロード／ストア・ユニット１５は、アドレス・タグ４０と、アドレス指定された位置４４を含むブロック３０に関連付けられたガード・タグ３２とを比較し、それらが一致するかどうかを決定する。ロード／ストア・ユニット１５は、アドレス・タグ４０とガード・タグ３２とが一致したかどうかを示す一致指示を生成する。例えば、この一致指示は、アドレス・タグ４０とガード・タグ３２との不一致がある場合生成される障害信号６０であり得、又は一致があったかどうか、又はエラーが検出されたアドレス及び／又はエラーをトリガした命令の命令アドレスを示すエラー・レポートに追加されたエントリがあったどうかを示す状態レジスタに配置された指示であり得る。
【００５９】
図３は、タグ保護されたメモリ・アクセスを処理する流れ図を示す。メモリ・アクセスをトリガする命令は、アドレス・タグ及び宛先アドレスを指定することができる。図２に示すように、場合によっては、アドレス・タグは、実際には、宛先アドレスそれ自体のビットのサブセットから導き出すことができるが、他の実例において、それは別個のレジスタに指定することができる。ステップ５０において、タグ保護されたメモリ・アクセスをトリガする命令に直面される。それに応答して、ステップ５２において、メモリ・アクセス回路１５が、宛先アドレスによって識別された、アドレス指定された位置４４へのメモリ・アクセスをトリガする。また、ステップ５４において、メモリ・アクセス回路１５が、宛先アドレスによって識別された、アドレス指定された位置４４を含むメモリ位置のブロック３０に関連してメモリ・システムに記憶されるガード・タグ３２を取得する。ステップ５６において、メモリ・アクセス回路１５が、アドレス・タグ４０を、ステップ５４において取得したガード・タグ３２と比較する。ステップ５８において、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示が、メモリ・アクセス回路１５によって生成される（例えば、上記に説明した指示を報告する一致／不一致の種類のいずれか）。任意の不一致を報告するのに使用される正確な指示は、実装形態によって異なる場合がある。
【００６０】
図４は、単一のソース・レジスタＸｎ及び宛先レジスタＸｄを指定するランダム・タグ設定命令の第１の実例を示す。ソース・レジスタＸｎは、あるアドレス・タグ値４０にすでに関連付けられている可能性がある（又はアドレス４２の符号拡張へのデフォルト設定によるタグ・ビットを有することができる）タグ設定宛先アドレス４２を指定する。命令デコーダ６は、タグ設定宛先アドレス４２を宛先レジスタＸｄの対応する部分に書き込むべく及び宛先レジスタ内のアドレス・タグ４０を、乱数発生器又は疑似乱数発生器６０に基づいて選択されたランダム・タグ値に設定するべく処理回路４を制御することによってこの命令に応答する。乱数又は疑似乱数発生器の任意の周知の設計を使用することができる。この方式の場合、値は何もランダム・タグ値として選択から除外されない。所与のアドレスのアドレス・タグをランダムに選択された値に設定することは、メモリ関連エラーがデバイスのうちの少なくともいくつかによって報告される可能性を増加させるために、及びデバイスの母集団のかなりの割合に影響し得る首尾よい攻撃を開始することが攻撃者にとって困難になるので攻撃に対する脆弱性を低減するために、同じプログラムを実行するいくつかの異なるデバイスによって使用されるタグ値の変動を増大させるのに有用である。場合によっては、アドレス・タグ値４０を宛先レジスタに設定することと同様に、命令のバリアントが、タグ設定宛先アドレス４２によって識別されたメモリ位置のブロック３０に関連付けられたガード・タグ３２を、アドレス・タグに選択されたものと同じランダム・タグ値に設定するために、メモリへのメモリ・アクセスをトリガすることもできる。
【００６１】
図５は、ある除外値がランダム・タグ値として選択から除去されることを許容するランダム・タグ設定命令の第２の実例を示す。ランダム・タグ設定命令は、この場合も、図４と同じであるソース・レジスタＸｎ及び宛先レジスタＸｄを指定する。任意選択で、ランダム・タグ設定命令は、除外値のセットの１つ又は複数を示すことができる状態情報を定義することができる第２のソース・レジスタＸｍを指定することもできる。除外値は、Ｘｍと関係なく他のやり方で識別することもできる。例えば、宛先レジスタＸｄが、命令を実行する前にすでにアドレスを含む場合、そのアドレスに関連付けられた前のタグは、抽出し、除外値のうちの１つとして使用することができる。同様に、ソース・レジスタＸｎ内のアドレス・タグ値４０は、除外することもできる。別の選択肢は、処理装置２のレジスタ１４が、ある値が除外されるかどうかを示す構成状態を定義することができる構成レジスタを含むことができることであり得る。また、ある値は、ハードウェアによって恒久的に除外することができ、例えば、除外されるように配線で接続することができる。これは、例えば、ある値が特別な目的（例えば、全一致）に恒久的に割り当てられ、したがって、それらがランダム選択命令によってタグ値として選択されることが可能にならない場合、有用であり得る。任意のこれらの技法の組合せは、除外値のセットを定義するのに使用することができる。
【００６２】
したがって、図５の実例の場合、ランダム・タグ設定命令に応答して、命令デコーダ６は、この場合も、ランダム・タグ値のランダム選択を宛先レジスタＸｄのタグ部分に書き込ませるために処理回路４を制御するが、しかし、この場合、除外値のセット（ゼロ、１つ又は複数の除外値を含むことができる）をランダム・タグ値として選択されることから除去するために、ある追加の回路６２を設けることができる。この除外値の除去を実装するためのいくつかの実例を以下に論じる。
【００６３】
図６は、除外値を示すランダム選択状態を定義するレジスタＸｍが、それぞれが（疑似）乱数発生器６０による選択に利用可能な値のセットの可能な候補値のうちの１つに対応するいくつかのビット６４を含むビットフィールドを含む除外マスクとして実装される第１の実例を示す。例えば、図６において、タグ値２、３及び１１に関連付けられたビットは、これらの値をランダム・タグ設定命令によってランダム・タグ値として選択することができないことを示すように設定される。
【００６４】
図７に示すように、命令デコーダ６は、２つのソース・レジスタＸｎ、Ｘｍ及び宛先レジスタＸｄを指定するＡｄｄＥｘｃｌｕｓｉｏｎ（タグ値除外）命令をサポートすることができる。ソース・レジスタＸｍのうちの１つは、いくつかの値がすでに除外されていること、又は値がまだ何も除外されていない場合すべて０であり得ることを示すために１に設定された、いくつかのビットをすでに有することができる、図６に示す除外マスクの入力値を指定する。第２のソース・レジスタＸｎは、それに関連付けられた所与のアドレス・タグ４０を有するアドレスを指定する。命令に応答して、命令デコーダ６は、アドレス・タグ４０の値をアドレス・レジスタＸｎから抽出するべく、及びその抽出されたアドレス値に対応する除外マスクのビット６４を設定するべく処理回路４を制御し、したがって、抽出されたアドレスの値は、Ｘｍにおけるランダム選択状態情報に基づいてランダム・タグ値の後続のランダム選択から除外される。例えば、ＡｄｄＥｘｃｌｕｓｉｏｎ命令に応答して実施される動作は、抽出されたアドレス・タグ４０によって示されるいくつかのビット位置によって１の最下位ビット及び０に等しいすべての他のビットを含む値を左シフトさせることによって実装することができる。次いで、シフトされた値は、レジスタＸｎ内の入力マスクとＯＲすることができる。図７に示すシフト及びＯＲ関数は、どのようにハードウェアが動作を実装することができるかというただ１つの実例に過ぎず、概して、設定されるソース・レジスタＸｎ内のアドレス・タグ４０の値に対応するビット６４が結果として得られる、任意の動作を使用することができることが理解されよう。
【００６５】
したがって、図６に示すランダム選択状態情報の形態に基づいて、図５のランダム・タグ設定命令は、レジスタＸｎ内のビットフィールドのビット６４が１に設定される除外値のうちの１つではないランダム・タグ値を選択することができる。
【００６６】
そのようなビットフィールドを使用することの代替案は、代わりに、選択から除外される２進値を明示的に定義する一連のフィールドを提供するソース・レジスタＸｍを提供することであり得る。例えば、最大Ｎ個の値を除外することができ、各タグ値がある数のビット、例えば、４ビットを有する場合、レジスタの４Ｎビットは、除外される値を指定することができる。
【００６７】
除外される値が正確にどのように指定されるかにかかわらず、次いで、ハードウェアは、選択された値が除外値のうちの１つではないことを確実にするために、除外値をとり、乱数発生器又は疑似乱数発生器６０によって出力された値に対して比較することができる。しかし、性能上の理由から、非除外値が見つかるまで異なる乱数を繰り返し連続して生成すること及び除外値に対して繰り返しテストすることを必要とすることなく、ランダム・タグ値を非除外の値のセットから選択することができる技法を提供することが望ましい場合がある。また、非除外セットから行われたランダム選択が、非除外値の中に均等に分布した確率分布を有し、したがって、１つの非除外値又は別の非除外値に対する顕著なバイアスがないことが望ましい場合もある。
【００６８】
図８Ａから図１０は、これを実現するためのいくつかの方式を示す。目的は、具体的な入力値に等しくあってはならない、４ビットの疑似ランダム値を生成するためにハードウェア効率のよいやり方を提供することにある。具体的には、これは、そのような出力を乱数性の無差別発生源（すべての可能な出力を許容する）からどのように導き出すかを含む。これは簡単なＬＦＳＲシード・レジスタ又はより複雑な（Ｐ）ＲＮＧであり得る。簡単にするために、乱数性の発生源は、「ＬＦＳＲ」と称されるが、乱数性の他の発生源をＬＦＳＲの代わりに使用することもできる。実装形態の２つの可能な方式を説明する。説明する第１の方式は、所定の疑似ランダム・シーケンス（ルック・アップ・テーブル又はＬＵＴ７０）を使用し、それは、ＬＦＳＲ７２に加えて、配線で接続することができ、任意の数の入力値（入力の最大値数に応じて増大するハードウェアの複雑性を有する）を除外することができる。第２の方式も説明するが、それは「１１１１」又は「００００」のいずれかとともに１つの入力値だけを除外することに限定される。それはＬＦＳＲのみからその出力を導き出す。
【００６９】
第１の方式を図８Ａ、図８Ｂ、図９Ａ及び図９Ｂに示す。この設計の考え方は、任意の数の入力パターン（「Ｎ」）を除外するように作り上げることができる。まず、ルック・アップ・テーブル（ＬＵＴ）レジスタ７０の存在を想定し、それは、正確に一度、疑似ランダム順序でシャッフルされた、あらゆる可能な出力値を含む。４ビットの出力（１６の組合せ）の場合、このＬＵＴ７０は６４ビットの値である。設計は３つの段階８０、８２、８４を含む。第１の段階は乱数器８０であり、乱数器８０は、ＬＦＳＲ７２のビットに基づいて「Ｎ＋１」の非重複値をＬＵＴ７０から疑似ランダムに選択する。第２の段階は比較器８２である。比較器８２は、ビット等価性に関して、乱数器８０からの「Ｎ＋１」の出力の「Ｎ」のそれぞれを、除外値を定義する「Ｎ」の入力８６のそれぞれと比較して、マスクを作り出す。入力８６は、上記に論じたように、ランダム選択状態情報及び／又は構成レジスタ内の構成データ及び／又はハードウェア固定値から導き出すことができることに留意されたい。最後の段階は、「Ｎ＋１」の出力のうちの１つを乱数器８０から選択するために、比較器８２によって作り出されたマスク８８を使用するマルチプレクサ９０を備えるセレクタ８４であり、それは究極の最終出力９２として入力のいずれにも等しくない（マスク８８内のそのビットによって示されるように）。最終出力９２は、タグ設定宛先アドレスのアドレス・タグに設定するためにランダム・タグ値として使用される。
【００７０】
各段階をどのように実装するかの詳細を以下に説明する。これは実装形態の実例である。代替実装形態が可能である。
【００７１】
乱数器８０（段階１）
「ｐｏｓ」がＬＦＳＲ７２から抽出された４ビットであるとする。ＬＵＴレジスタ７０は「ｐｏｓ＊４」ビットだけ回転される。この後に、それぞれが必要に応じＬＦＳＲからの追加のビットに基づいて複数の独立した値のうちの１つをＬＵＴから選択する、「Ｎ＋１」のマルチプレクサ７４が続く。理想的には、これらのマルチプレクサ７４のすべてが、同じ数の入力を有するべきであるが、これは図９Ａ及び図９Ｂに示すように不可欠ではない。ビット回転は、いずれにせよ、ハードウェア内のマルチプレクサとして実装されるので、これらのステップの両方とも折り畳められ、簡略化され得る。
【００７２】
比較器８２（段階２）
乱数器８０からの「Ｎ」の入力のそれぞれは、「Ｎ」の禁止された値のそれぞれとの等価性に関して比較される。あらゆる乱数器出力の結果は、出力マスク８８を作り出すために互いにＮＯＲされる。
【００７３】
セレクタ８４（段階３）
セレクタ９０は、マスク８８によって可能とされる第１の乱数器出力を単純に選択することができる。
【００７４】
実装形態の特性
本実装形態は、入力のうちのいくつかが同一である場合を含めて、すべての出力に均一な確率分布を提供する。これは、Ｎ個の値を除外するように作り上げられた単一のハードウェア回路が、単純に入力のうちのいくつかを複数回提供することによって、確率分布に影響することなく、より少ない値を除外するのに再使用することができることを意味する。
【００７５】
図８Ａ及び図８Ｂは、３つの除外（Ｎ＝３）に対する具体的な構成の実例を示す。本実装形態は、入力のうちのいくつかが同一である場合を含めて、すべての出力に均一な確率分布を提供する。これは、３つの値を除外するように作り上げられた単一のハードウェア回路が、単純に同じ入力を複数回提供することによって、確率分布に影響することなく、１つ又は２つの値を除外するのに使用することができることを意味する。除外される値が「１１１１」である場合、確率分布がどのように影響されるかは次のとおりである。
【表１】
2021517690.tif 000003
【表２】
2021517690.tif 000004
【００７６】
図９Ａ及び図９Ｂは、４つの除外（Ｎ＝４）に対する具体的な構成の実例を示す。乱数器８０から５つの出力を提供するために、どのように最後のマルチプレクサが、それぞれが４つではなく２つのＬＵＴ値から選択する２つのマルチプレクサ７４−Ａ、７４−Ｂに細分割されるように選択されたかに留意されたい。これは、最後の２つの出力がセレクタによって選ばれることが最もありそうにないからであり、したがって、乱数性の低下は確率分布に対してそれほど影響がないはずである。
【００７７】
除外される値が「１１１１」である場合、確率分布がどのように影響されるかは次のとおりである。
【表３】
2021517690.tif 000005
【表４】
2021517690.tif 000006
【００７８】
除外される追加の入力が「００００」である場合、確率分布がどのように影響されるかは次のとおりである。
【表５】
2021517690.tif 000007
【表６】
2021517690.tif 000008
【００７９】
図１０は第２の方式を示し、それは「１１１１」又は「００００」のいずれかであり得る１つの固定パターン及び任意の変数である１つの入力値を除外する。これは既存の値を「再度色付けする」／変更するのに十分である。出力はＬＦＳＲ７２だけから導き出される。ＬＦＳＲは少なくとも６ビットを有するべきである。
【００８０】
図１０に示す設計において、４ビットが、暫定出力値（「選択されたタグ値」）１０２として使用されるＬＦＳＲ状態から抽出される。ビットのすべてが同じである場合（パターン「００００」、「１１１１」）、ＬＦＳＲからさらに２ビットが抽出され、反転される出力の正確に１つのビットを選択して（ＸＯＲ動作を使用して）、中間値１００を生成するために、マルチプレクサ／シフタに使用される。これにより、「００００」及び「１１１１」のパターンが中間値１００に対して決して起きることがないことが保証される。そうでない場合、選択されたタグ値１０２は、中間値１００としてそのまま出力される。
【００８１】
これにより、以下の統計的分布を有する疑似ランダム出力を有する中間値１００が作り出される。
【表７】
2021517690.tif 000009
【表８】
2021517690.tif 000010
【００８２】
システムの次の部分をより容易に説明するために、除外するべき固定パターンが「１１１１」であり、「００００」が有効な出力であると想定する。「００００」が有効なパターンであるので、それは入力変数と交換することができる。したがって、中間値１００は、等価性に関して入力（ランダム・タグ設定命令によって定義された禁止された値）と比較される。それらが一致した場合、「００００」が出力される。そうでない場合、中間値１００は、そのまま出力される。これは結果として「１１１１」でもなく（それは第１のステップによってすでに除外されたので）、ランダム・タグ設定命令によって提供された入力に等しくもない最終出力１０４となる。最終出力１０４は、宛先アドレスのアドレス・タグに設定するためにランダム・タグ値として使用することができる。
【００８３】
最終出力の統計的分布は以下のとおりである。
【表９】
2021517690.tif 000011
【表１０】
2021517690.tif 000012
【００８４】
「００００」と「１１１１」との役割は、「００００」を出力として禁止し、代わりに「１１１１」を変数入力の有効な置換えとして使用するために、交換することができる。また、任意のパターン（「００００」又は「１１１１」だけでなく）が所定の除外タグ値（図１０の実例における「１１１１」に対応する）及び他の所定のタグ値（図１０における「００００」に対応する）として選択されることが可能となり、他の所定のタグ値は、それがランダム・タグ設定命令によって定義された追加の除外タグ値１０３と一致する場合中間値１００と置き換えられる。
【００８５】
上記の方式において、単一のランダム・タグ設定命令が、単一の命令に応答して、候補値のセット全体にわたって除外値の指示をとり、残りの値の中からランダム値を選択することができる。除外値を定義するために、図７に示す形態の追加の命令と対にされたとき、これは、選択を実装する相対的にコード効率のよいやり方をもたらすことができる。
【００８６】
しかし、ハードウェアをさらに簡略化するために、ランダム・タグ値を選択するための及び選択から値を除外するための動作を複数の命令に分割することは有用である場合もある。この方式の実例を図１１から図１４に示す。図１１は、ランダム・タグ設定命令の除外値を定義するためのランダム選択状態情報の代替形態を示す。例えば、図５のランダム・タグ設定命令に示すレジスタＸｍは、図６に示すようなビットフィールドの代わりに、図１１に示すランダム選択状態情報の形態を指定することができる。図１１の実例において、候補値のセット全体にわたって除外値を定義するのではなく、ビット・マスク７０を候補値の適切なサブセットだけに提供することができ、その値は、ランダム選択状態情報それ自体のフィールド７２によって示される。この文脈において、適切なサブセットは、候補セットの値のうちの少なくとも１つを除外するサブセットを意味する。この実例において、ランダム・タグ値７２及び対応する除外マスク７０の両方の適切なサブセットは、同じレジスタ内に記憶されるが、他の実例は、これらを異なるレジスタに記憶することができる。
【００８７】
この方式の場合、ランダム選択動作をいくつかの命令に分割することが可能である。すなわち、図１２に示す、後続のランダム・タグ設定命令による選択に利用可能な値のワーキング・セットとしてランダム値のサブセットを選択する第１の命令、図１３に示す、前に選択された値のサブセットを除外値に対してチェックし、一致がある場合、除外マスクを設定する第２の命令、及び図１４に示す、第３の命令（ランダム・タグ設定命令）であり、第３の命令は、除外マスクによって除外されるものとして示されていないランダム・タグ値７２のサブセットの１つを選択するために、図１１に示すランダム選択状態を使用する。
【００８８】
図１２は、宛先レジスタＸｄを指定するＢｅｇｉｎＲａｎｄｏｍＴａｇ命令（ランダム・タグ選択命令）を示し、それは、乱数発生器又は疑似乱数発生器６０の出力に基づいてランダム・タグの小さなセットを選択する。この段階において任意のソフトウェア定義除外値を考慮することは必要ない。いくつかの実装形態において、ＢｅｇｉｎＲａｎｄｏｍＴａｇ命令は、いくつかの値が恒久的にハードウェアによって除外されるものとして定義された場合、又はそれらが構成レジスタを使用して除外されるものとして構成可能に定義された場合、いくつかの値を選択されることから依然として除外することができる。しかし、ソフトウェアによって提供された入力アドレスに関連付けられたタグに依存する、又は先の命令の結果に依存する任意のソフトウェア定義除外を無視することによって、これは、この命令を実装するためのハードウェアを簡略化することができる。したがって、命令に応答して、命令デコーダ６は、疑似乱数発生器を制御し、又は乱数発生器６０は、単純に、ある数のタグ値を選択し、選択された値を、宛先レジスタＸｄの対応するランダム・タグ・フィールド７２に書き込むべく処理回路４を制御する。ランダム選択状態情報の除外マスク７０は、当初は選択された値のすべてが非除外として示されることを確実にするために、ＢｅｇｉｎＲａｎｄｏｍＴａｇ命令に応答して、すべて０に設定される。宛先レジスタの任意の残りのビットは、ゼロ拡張することができる。
【００８９】
図１３は、２つのソース・レジスタＸｎ、Ｘｍ及び宛先レジスタＸｄを指定するＥｘｃｌｕｄｅＲａｎｄｏｍＴａｇ命令（タグ値除外命令）を示し、それは、ソフトウェアによって定義された特定のタグ値が後続のランダム・タグ設定命令によってランダム・タグ値として選択されない可能性があることを確実にするために実行することができる。この命令は、それが、ソース・レジスタＸｎとして、それに設定されたタグ値４０をすでに有するアドレスを指定するレジスタをとるという点において、図７に示すものと同様であり得る。図１３の命令に応答して、命令デコーダ６は、タグ値４０をレジスタＸｎ内のアドレスから抽出するべく、及び第２のソース・レジスタＸｍに指定されたランダム選択状態情報のフィールド７２に記憶されたランダム・タグ値のそれぞれに対して、抽出されたタグ値を比較するべく処理回路４を制御し、抽出されたアドレス・タグ４０が、前にＢｅｇｉｎＲａｎｄｏｍＴａｇ命令によって追加されたランダム・タグ７２のいずれかに一致する場合、除外マスク７０の対応するビットが、宛先レジスタＸｄ内の１に設定される。ランダム・タグ値７２それら自体は、単純に、ソース・レジスタＸｍから変更されずに宛先レジスタＸｄに書き込まれる。ＥｘｃｌｕｄｅＲａｎｄｏｍＴａｇ命令は、ランダム・タグ値７２のうち１つよりも多くが除外されるべきかどうかをチェックするために異なるアドレスを用いて複数回実行することができる。
【００９０】
図１４は、ソース・レジスタＸｍに記憶されたランダム選択状態に基づいて、図１３のＥｘｃｌｕｄｅＲａｎｄｏｍＴａｇ命令によって除外されなかった残りのタグのうちの１つを選択し、選択されたタグを、ソース・レジスタＸｎに指定されたアドレスに挿入し、結果を宛先レジスタＸｄに書き込むランダム・タグ設定命令（ＥｎｄＲａｎｄｏｍＴａｇ）を示す。したがって、マルチプレクサ１１０は、除外マスク７０のそれぞれのビットの値に応じて、レジスタＸｍに指定されたランダム・タグ値７２のサブセットから選択することができる。ＢｅｇｉｎＲａｎｄｏｍＴａｇ命令とＥｎｄＲａｎｄｏｍＴａｇ命令との間のＥｘｃｌｕｄｅＲａｎｄｏｍＴａｇ命令の最大Ｔ−１のインスタンス（その場合、ＴがレジスタＸｍに示されるサブセット内のランダム・タグの数である）という条件で、除外されない、したがって、宛先レジスタＸｄに指定されたアドレスにおけるランダム・タグ値として挿入するために、マルチプレクサ８０によって選択することができる、少なくとも１つのランダム・タグ値が常にある。
【００９１】
したがって、動作をいくつかの命令に分割することによって、これにより、タイミング要件が満たされ、各命令が、最大２つのソース・レジスタを指定するのを必要とするだけであることを確実にする（レジスタ読取りポートの効率的な使用に有用であり得る）、処理ハードウェアを作り上げるのがより容易になり得、その一方で、依然として、入力アドレスのそれぞれのアドレス・タグから抽出された２つよりも多くの値が、選択から除外されることが可能になる。
【００９２】
上記に示したすべての実装形態の実例が、実例に過ぎず、選択されることからある値を除外するランダム・タグ設定命令のアーキテクチャ機能が、他のハードウェア実装形態を使用して実装することもできることが理解されよう。
【００９３】
図１５は、ランダム・タグ設定命令を処理する方法を示す流れ図を示す。ステップ１００において、命令デコーダ６０が、ランダム・タグ設定命令を復号し、それは上記に示した命令の形態のいずれかであり得る。ステップ１０２において、デコーダ６が、候補タグ値のセットの１つをランダムに又は疑似ランダムに選択するべく処理回路４を制御する。いくつかの命令のバリアントにおいて、１つ又は複数の除外値が、ステップ１０２において、選択されるのが防止される可能性がある。どの値を除外するべきかを表すやり方のいずれかは、上記に論じたように使用することができる。ステップ１０４において、命令デコーダ６が、タグ設定宛先アドレスのアドレス・タグを、選択されたランダム・タグ値それ自体又は選択されたランダム・タグ値の変換のいずれかに設定するべく処理回路４を制御する。場合によっては、タグ設定宛先アドレスそれ自体のビット又は複数のビットに基づいて、ランダム・タグ値を選択するステップを変換することが望ましい場合がある。これは、選択されることからいくつかの値を除外する命令の形態に特に有用であり得る。何故ならそれらは特殊ハードウェアに特有の値として使用されるからである。例えば、次いで、いくつかの実装形態において、値が、タグの任意の他の値に対して一致するとみなされる「全一致」値として確保されている場合、アドレスが見つけられるアドレス空間の一部分に応じて、異なる値を全一致値として使用することが望ましい場合がある。例えば、０に等しい最上位ビットを有するアドレスは、１つの値を全一致値として使用することができ、１に等しい最上位ビットを有するアドレスは、異なる値を全一致値として使用することができる。これにより、意図されたとおりに動作するレガシー・コードがサポートされる一方で、実装形態が簡略化され得る。ステップ１０２において、特定のタグ設定宛先アドレスにかかわらず同じやり方でランダム値を選択するが、次いで、アドレスの他のビットに応じて変換（ビットの反転などの）を続いて適用することによって、これにより、レガシー機能が、ランダム選択ステップ１０２を不必要に複雑化することなく、レガシー・コードによって本来意図されたとおりに働くことが可能になり得る。
【００９４】
任意選択で、ステップ１０６において、タグ設定宛先アドレスによって識別された、アドレス指定された位置を含むメモリ位置の対応するブロックに関連付けられたガード・タグが、やはりランダム・タグ値に設定され得る。したがって、ランダム・タグ設定命令に応答して、命令デコーダ６が、ランダム・タグ値を、アドレス指定された位置に関連付けられたガード・タグを記憶する位置に書き込むべく、メモリ・アクセス回路１５を制御することもできる。
【００９５】
図１６は、使用することができるシミュレータ実装形態を示す。先に説明した実施例は、該当する技法をサポートする具体的な処理ハードウェアを動作させる装置及び方法の観点から本発明を実装するが、コンピュータ・プログラムの使用を通じて実装される、本明細書に説明する実施例に従って命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、ハードウェア・アーキテクチャのソフトウェア・ベースの実装形態を提供する限りにおいて、しばしば、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムが、ダイナミック・バイナリ変換機を含めて、エミュレータ、仮想マシン、モデル、及びバイナリ変換機を含む。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム２２０を実行するホスト・プロセッサ２３０上で実行し、シミュレータ・プログラム２１０をサポートすることができる。いくつかの構成において、ハードウェア、用意された命令実行環境、及び／又は同じホスト・プロセッサ上に用意された複数の明確な命令実行環境の間に複数のシミュレーションの層がある可能性がある。歴史的に、強力なプロセッサが、妥当な速度で実行するシミュレータ実装形態を提供するのに必要とされてきたが、そのような方式は、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが所望されるときなど、ある状況において正当化される可能性がある。例えば、シミュレータ実装形態は、命令実行環境に、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を提供し、又は典型的には異なるハードウェア・アーキテクチャに関連付けられた命令実行環境を提供することができる。シミュレーションの概要は、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に説明されている。
【００９６】
シミュレーションした実施例において、実施例が特定のハードウェアの構成又は特徴を参照してこれまで説明してきた限りでは、等価の機能を適切なソフトウェアの構成又は特徴によって提供することができる。例えば、特定の回路をコンピュータ・プログラム論理としてシミュレーションした実施例に実装することができる。同様に、レジスタやキャッシュなどのメモリ・ハードウェアをシミュレーションした実施例にソフトウェア・データ構成として実装することができる。これまでに説明した実施例において参照したハードウェア要素の１つ又は複数がホスト・ハードウェア（例えば、ホスト・プロセッサ２３０）上に存在する配置において、適切な場合、いくつかのシミュレーションした実施例がホスト・ハードウェアを利用することができる。
【００９７】
シミュレータ・プログラム２１０は、コンピュータ可読記憶媒体２１２（非一時的媒体でもよい）上に記憶することができ、プログラム・インターフェース（命令実行環境）を、シミュレータ・プログラム２１０によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである目的コード２００（アプリケーション、オペレーティング・システム及びハイパーバイザを含むことができる）に提供する。したがって、上記に説明したランダム・タグ設定命令を含めて目的コード２００のプログラム命令は、シミュレータ・プログラム２１０を使用して命令実行環境内から実行することができ、したがって、上記に論じた装置２のハードウェア上の特徴を実際には有さないホスト・コンピュータ２３０は、これらの特徴をエミュレートすることができる。例えば、シミュレータ・プログラム２１０は、目的コード２００の命令によってメモリへのアクセスを制御するメモリ・アクセス・プログラム論理２１４を含むことができる。例えば、メモリ・アクセス・プログラム論理２１４は、ガード・タグとアドレス・タグとの比較を実施し、ガード・タグとアドレス・タグとのいずれかの不一致が検出されたどうかを報告する命令を含むことができる。また、シミュレータ・プログラム２１０は、タグ設定プログラム論理２１６を含むことができ、タグ設定プログラム論理２１６は、目的コード２００に含まれるランダム・タグ設定命令に応答して、上記に論じたようにランダムに選択された値へのタグ設定宛先アドレスに関連付けられたアドレス・タグを、ハードウェア実施例がアドレス・タグを設定するやり方に対応するやり方で、トリガするための命令を含む。
【００９８】
本出願においては、「ように構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ．．．）」という単語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するのに使用される。この文脈では、「構成（ｃｏｎｆｉｇｕｒａｔｉｏｎ）」は、ハードウェア又はソフトウェアの相互接続の配置又はやり方を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有することができ、又はプロセッサ若しくは他の処理デバイスは、機能を実施するようにプログラムすることができる。「ように構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ）」は、装置要素が、定義された動作を提供するために任意のやり方で変更される必要があることを意味しない。
【００９９】
本発明の例示的な実施例を添付の図面を参照して本明細書に詳細に説明してきたが、本発明がそれらの正確な実施例に限定されないこと、及び添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、本発明の様々な変更形態及び修正形態を当業者によって実施できることを理解されたい。
【図１】
2021517690.tif 000013
【図２】
2021517690.tif 000014
【図３】
2021517690.tif 000015
【図４】
2021517690.tif 000016
【図５】
2021517690.tif 000017
【図６】
2021517690.tif 000018
【図７】
2021517690.tif 000019
【図８Ａ】
2021517690.tif 000020
【図８Ｂ】
2021517690.tif 000021
【図９Ａ】
2021517690.tif 000022
【図９Ｂ】
2021517690.tif 000023
【図１０】
2021517690.tif 000024
【図１１】
2021517690.tif 000025
【図１２】
2021517690.tif 000026
【図１３】
2021517690.tif 000027
【図１４】
2021517690.tif 000028
【図１５】
2021517690.tif 000029
【図１６】
2021517690.tif 000030
【国際調査報告】
2021517690.tif 000031
2021517690.tif 000032
2021517690.tif 000033