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

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

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

<>
  • 特許-複数ガード・タグ設定命令 図1
  • 特許-複数ガード・タグ設定命令 図2
  • 特許-複数ガード・タグ設定命令 図3
  • 特許-複数ガード・タグ設定命令 図4
  • 特許-複数ガード・タグ設定命令 図5
  • 特許-複数ガード・タグ設定命令 図6
  • 特許-複数ガード・タグ設定命令 図7
  • 特許-複数ガード・タグ設定命令 図8
  • 特許-複数ガード・タグ設定命令 図9
  • 特許-複数ガード・タグ設定命令 図10
  • 特許-複数ガード・タグ設定命令 図11
  • 特許-複数ガード・タグ設定命令 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-26
(45)【発行日】2023-05-09
(54)【発明の名称】複数ガード・タグ設定命令
(51)【国際特許分類】
   G06F 9/355 20180101AFI20230427BHJP
   G06F 9/30 20180101ALI20230427BHJP
   G06F 12/14 20060101ALI20230427BHJP
【FI】
G06F9/355 380
G06F9/30 350
G06F12/14 510D
【請求項の数】 18
(21)【出願番号】P 2020536882
(86)(22)【出願日】2018-12-10
(65)【公表番号】
(43)【公表日】2021-05-06
(86)【国際出願番号】 GB2018053577
(87)【国際公開番号】W WO2019141960
(87)【国際公開日】2019-07-25
【審査請求日】2021-12-03
(31)【優先権主張番号】1800970.4
(32)【優先日】2018-01-22
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】バーンズ、グレイム ピーター
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開平05-134930(JP,A)
【文献】特開2001-005726(JP,A)
【文献】特開2004-157751(JP,A)
【文献】米国特許出願公開第2017/0168963(US,A1)
【文献】米国特許出願公開第2007/0283115(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30-9/355
G06F 12/14
(57)【特許請求の範囲】
【請求項1】
装置であって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス回路であって、前記タグ保護されたメモリ・アクセス動作が、
前記宛先アドレスに関連付けられたアドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較すること、及び
前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかの指示を生成することを含む、メモリ・アクセス回路と、
少なくとも1つのメモリ・アクセスをトリガして、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられた前記ガード・タグを更新するように前記メモリ・アクセス回路を制御するために複数ガード・タグ設定命令を復号する命令デコーダとを備える、装置。
【請求項2】
前記タグ保護されたメモリ・アクセス動作が、前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかに応じて前記アドレス指定された位置へのメモリ・アクセスが許可されるかどうかを制御するステップを含む、請求項1に記載の装置。
【請求項3】
前記タグ保護されたメモリ・アクセス動作が、前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかにかかわらず前記アドレス指定された位置へのメモリ・アクセスを実施するステップを含む、請求項1に記載の装置。
【請求項4】
前記タグ保護されたメモリ・アクセス動作が、前記ガード・タグと前記アドレス・タグとの不一致が検出されたときに障害状態をシグナリングするステップを含む、請求項1から3までのいずれか一項に記載の装置。
【請求項5】
前記タグ保護されたメモリ動作において、前記メモリ・アクセス回路が、前記宛先アドレスの1つ又は複数の選択されたビットの関数として前記アドレス・タグを決定するように構成される、請求項1から4までのいずれか一項に記載の装置。
【請求項6】
前記タグ保護されたメモリ・アクセス動作において、前記メモリ・アクセス回路が、前記アドレス・タグから独立した前記アドレス指定された位置を選択するように構成される、請求項1から5までのいずれか一項に記載の装置。
【請求項7】
長さレジスタを識別する前記複数ガード・タグ設定命令のレジスタ長指定バリアントに応答して、前記命令デコーダが、
前記長さレジスタに記憶された長さパラメータによって識別されるブロックの最大数以下の所与の数の連続したブロックに関連付けられた前記ガード・タグを更新するべく、前記メモリ・アクセス回路を、及び
前記長さレジスタに記憶された前記長さパラメータを前記所与の数に比例した量だけデクリメントするべく、処理回路を
制御するように構成される、請求項1から6までのいずれか一項に記載の装置。
【請求項8】
即値パラメータを識別する前記複数ガード・タグ設定命令の即値長指定バリアントに応答して、前記命令デコーダが、前記即値パラメータによって指定された、いくつかの連続したブロックに関連付けられた前記ガード・タグを更新するべく前記メモリ・アクセス回路を制御するように構成される、請求項1から7までのいずれか一項に記載の装置。
【請求項9】
前記複数ガード・タグ設定命令が、前記少なくとも2つの連続したブロックを識別するタグ更新宛先アドレスを指定する、請求項1から8のいずれか一項に記載の装置。
【請求項10】
前記少なくとも2つの連続したブロックが、前記タグ更新宛先アドレスによって識別されたメモリ位置を含んだ前記ブロックと、1つ又は複数のメモリ位置の少なくとも1つの後続のブロックとを含む、請求項9に記載の装置。
【請求項11】
前記複数ガード・タグ設定命令が、前記少なくとも2つの連続したブロックを識別するタグ更新宛先アドレスを決定するアドレス決定値を記憶するためのアドレス・レジスタを指定し、
前記複数ガード・タグ設定命令に応答して、前記命令デコーダが、前記ガード・タグが前記複数ガード・タグ設定命令に応答して更新されるメモリ位置のブロックの数に対応するオフセットだけ前記アドレス・レジスタに記憶された前記アドレス決定値をインクリメント又はデクリメントするべく処理回路を制御するように構成される、請求項9又は10に記載の装置。
【請求項12】
前記複数ガード・タグ設定命令に応答して、前記命令デコーダが、メモリ・アクセスをトリガして、前記少なくとも2つの連続したブロックに関連付けられた前記ガード・タグを、前記タグ更新宛先アドレスの1つ又は複数の選択されたビットの関数として決定される、更新されたタグ値に更新するべく前記メモリ・アクセス回路を制御するように構成される、請求項9から11までのいずれか一項に記載の装置。
【請求項13】
前記複数ガード・タグ設定命令に応答して、前記命令デコーダが、メモリ・アクセスをトリガして、前記少なくとも2つの連続したブロックに関連付けられた前記ガード・タグを、前記タグ更新宛先アドレスから独立した前記複数ガード・タグ設定命令によって指定されたタグ値レジスタに記憶された値の関数として決定される、更新されたタグ値に更新するべく前記メモリ・アクセス回路を制御するように構成される、請求項に記載の装置。
【請求項14】
前記複数ガード・タグ設定命令のデータ・クリアリング・バリアントに応答して、前記命令デコーダが、1つ又は複数のメモリ位置の前記少なくとも2つの連続したブロックに記憶されたデータ値を、前記少なくとも2つの連続したブロックの前の内容に無相関のクリアされた値に設定するためにメモリ・アクセスをトリガするべく前記メモリ・アクセス回路を制御するように構成される、請求項1から13のいずれか一項に記載の装置。
【請求項15】
各クリアされた値が、
所定の値と、
ゼロと、
ランダム値と
のうちの1つを含む、請求項14に記載の装置。
【請求項16】
方法であって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するステップであって、前記タグ保護されたメモリ・アクセス動作が、
前記宛先アドレスに関連付けられたアドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかの指示を生成するステップ、を含む、実施するステップと、
複数ガード・タグ設定命令の復号に応答して、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられた前記ガード・タグを更新するために少なくとも1つのメモリ・アクセスをトリガするステップとを含む、方法。
【請求項17】
目的プログラム・コードの命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するコンピュータ・プログラムであって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス・プログラム論理であって、前記タグ保護されたメモリ・アクセス動作が、
前記宛先アドレスに関連付けられたアドレス・タグを、前記宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
前記ガード・タグと前記アドレス・タグとの一致が検出されたかどうかの指示を生成するステップを含む、メモリ・アクセス・プログラム論理と、
少なくとも1つのメモリ・アクセスをトリガして、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられた前記ガード・タグを更新するために前記目的プログラム・コードの複数ガード・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラム。
【請求項18】
請求項17に記載のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技法はデータ処理の分野に関する。
【背景技術】
【0002】
データ処理装置によって実行されるソフトウェアは、典型的には、高水準プログラミング言語で書き、次いで、ソフトウェアが実行されることになっている装置によってサポートされる命令セット・アーキテクチャに従ってコードにコンパイルすることができる。例えば、ソフトウェアは、最初はJava、C、C++などのより高い水準の言語で書き、次いで、x86やArm(R)などのネイティブにサポートされる命令セット・アーキテクチャにコンパイルすることができる。
【先行技術文献】
【非特許文献】
【0003】
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【発明が解決しようとする課題】
【0004】
Javaなどのいくつかの、より高い水準のプログラミング言語は、それらがメモリ・アクセスに関連したあるエラーの有無をチェックするためのラン・タイム・エラー検出チェックを含むので、メモリ安全な言語であるとみなされる。対照的に、CやC++などのメモリ安全でない言語は、そのようなラン・タイム・エラー・チェックを含まない。メモリ安全でない言語の使用が持続的に広がることは、所与の命令セット・アーキテクチャによるコンパイル済みコードに、攻撃者又は他の悪意のある当事者による利用に脆弱な恐れがある多数のメモリ関連エラーがある可能性があることを意味する。そのようなエラーは、
・ コードによって供給される配列の添え字が配列の正当な境界の外側にある、境界違反、
・ メモリ位置へのアクセスが、そのメモリ位置がすでに割当てを解除され又は解放されてしまった後に行われる、解放済みメモリ使用エラー、
・ 関数内で使用された変数(スタック上の値などの)に関連付けられたアドレスへのメモリ・アクセスがすでに関数から復帰した後に行われる、復帰後の使用、
・ 変数がそれらの宣言された範囲外でアクセスされる、範囲外使用エラー、及び
・ 変数に関連付けられたメモリ・アドレスが、変数が初期化されてしまう前にアクセスされる、初期化前使用エラー
を含み得る。
【0005】
これらは、結果として予測不可能な挙動となり、攻撃者が利用する手段を潜在的に提供することがあるメモリ関連エラーのほんのいくつかの実例に過ぎない。したがって、あるクラスのメモリ・エラーのラン・タイム検出を手助けするために、所与の処理装置によってサポートされる命令セット・アーキテクチャ内にアーキテクチャ・サポートを提供することが望ましい可能性がある。
【課題を解決するための手段】
【0006】
少なくともいくつかの実例は、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス回路であって、
宛先アドレスに関連付けられたアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較すること、及び
ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成することを含む、タグ保護されたメモリ・アクセス動作と、
少なくとも1つのメモリ・アクセスをトリガして、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられたガード・タグを更新するようにメモリ・アクセス回路を制御するために複数ガード・タグ設定命令を復号する命令デコーダとを備える装置を提供する。
【0007】
少なくともいくつかの実例は、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するステップであって、タグ保護されたメモリ・アクセス動作が、
宛先アドレスに関連付けられたアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成するステップとを含む、実施するステップと、
複数ガード・タグ設定命令の復号に応答して、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられたガード・タグを更新するために少なくとも1つのメモリ・アクセスをトリガするステップとを含む、方法を提供する。
【0008】
少なくともいくつかの実例は、目的プログラム・コードの命令を実行するための命令実行環境を提供するためにホスト・データ処理装置を制御するコンピュータ・プログラムであって、
宛先アドレスに応答して、タグ保護されたメモリ・アクセス動作を実施するメモリ・アクセス・プログラム論理であって、タグ保護されたメモリ・アクセス動作が、
宛先アドレスに関連付けられたアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されたガード・タグと比較するステップ、及び
ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成するステップを含む、メモリ・アクセス・プログラム論理と、
少なくとも1つのメモリ・アクセスをトリガして、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられたガード・タグを更新するために目的プログラム・コードの複数ガード・タグ設定命令に応答するタグ設定プログラム論理とを含む、コンピュータ・プログラムを提供する。
【0009】
記憶媒体が、上記に説明したコンピュータ・プログラムを記憶することができる。記憶媒体は非一時的記憶媒体でもよい。
【0010】
本技法の他の態様、特徴及び利点は、添付の図面と併せて読まれるものとする、以下の実例の説明から明らかであろう。
【図面の簡単な説明】
【0011】
図1】データ処理装置の実例を概略的に示す図である。
図2】アドレス・タグがガード・タグに一致するかどうかをチェックするステップを含む、タグ保護されたメモリ・アクセス動作の実例を示す図である。
図3】タグ保護されたメモリ・アクセス動作を実施する方法を示す流れ図である。
図4】複数ガード・タグ設定命令のレジスタ長指定バリアントを示す図である。
図5図4の命令を処理する方法を示す流れ図である。
図6】異なる数のタグを更新する同じ複数ガード・タグ設定命令に応答する異なるマイクロアーキテクチャ実装形態の実例を示す図である。
図7】いくつのタグがキャッシュ・ライン・アラインメントに基づいて更新されるのかを変動させる柔軟性を有するマイクロアーキテクチャの実例を示す図である。
図8】複数ガード・タグ設定命令の即値長指定バリアントを示す図である。
図9図6の命令を処理する方法を示す流れ図である。
図10】更新されたタグ値が、タグ更新されたアドレスに別個のレジスタを使用して指定される、図4の命令の代替バリアントを示す図である。
図11】複数ガード・タグ設定命令のデータ・クリアリング・バリアントを示す図である。
図12】複数ガード・タグ設定命令をサポートするシミュレータの実例を示す図である。
【発明を実施するための形態】
【0012】
上記に論じた種類の、あるメモリ使用エラーに対して保護する1つの方式は、1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されるガード・タグを提供することである可能性がある。タグ保護されたメモリ・アクセス動作がメモリ・システムにおける特定のアドレス指定された位置を識別する宛先アドレスに基づいて要求されたとき、メモリ・アクセス回路は、宛先アドレスに関連付けられているアドレス・タグを、宛先アドレスによって識別された、アドレス指定された位置を含む1つ又は複数のメモリ位置のブロックに関連してメモリ・システムに記憶されているガード・タグと比較することができる。メモリ・アクセス回路は、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示を生成することができる。この指示は、メモリ・アクセスが成功するように許可されているのかどうか、又は後続の動作が成功することができるのかどうか、又はメモリ・アクセスが正常であるものとして継続することを許可しながら単に報告することができるのかどうかを制御するのに使用することができる。
【0013】
これは、例えば、CやC++などのメモリ安全でない言語に基づいてコードをコンパイルするコンパイラが、メモリの領域を初期化するとき、コードがアクセスすることが予想されるメモリのブロックのガード・タグを特定の値に設定するので有用であり得、対応するアドレス・タグ値をそれらのブロックを指し示す宛先アドレスに関連付けることができる。メモリ使用エラーが起きた場合、例えば、アドレス・ポインタが範囲外で使用され、又は初期化された有効範囲の境界の外に及ぶ場合、アドレス指定された位置に関連付けられたガード・タグは、宛先アドレスに関連付けられたアドレス・タグに一致しない可能性がありそうである場合があり、次いで、この場合、一致が検出されたかどうかの指示は、いくつかのエラー処理応答又はエラー報告機構をトリガするのに使用することができる。取られる特定の応答は、実行されるソフトウェアの特定の必要性に、又はアーキテクチャの特定のマイクロアーキテクチャ実装形態に依存することができる。したがって、高水準言語がメモリ・アクセス・エラーに対して保護するためにラン・タイム・エラー・チェックを実施する手段を有さなくても、コンパイル済みコードに使用されるISAは、そのようなチェックを実施するためのアーキテクチャの特徴を含むことができる。
【0014】
しかし、そのようなガード・タグの使用は、メモリの特定のブロックに関連付けられているガード・タグを設定する際にいくつかのオーバーヘッドを伴う場合がある。メモリ位置のブロックに関連付けられたガード・タグを設定するプロセスは、ガード・タグを設定することに関連付けられた任意の遅延が、実施される現実のソフトウェア機能の後続の処理を遅延させる場合もあるので、相対的に高速である必要がある場合がある。以下に論じる装置は、少なくとも1つのメモリ・アクセスをトリガして、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに関連付けられたガード・タグを更新するようにメモリ・アクセス制御回路を制御するために複数ガード・タグ設定命令を復号する命令デコーダを有する。メモリ位置の連続したブロックの範囲に関連付けられたガード・タグが、例えば、メモリの領域を初期化すると同時に、同じタグ値に設定されるのは相対的に一般的である可能性がある。単一の命令に応答して、メモリ・ブロックの範囲全体に関連付けられたガード・タグを更新することを必要とする1つ又は複数のメモリ・アクセスをトリガすることができる複数ガード・タグ設定命令を提供することによって、これはタグの設定を加速し、したがって、性能を改善することができる。また、より少ない命令を有するよりきついループがメモリの所与の領域に対してタグの設定を制御することができるので、この命令はコード密度を低減するのに役立ち、メモリに及び任意のキャッシュに命令を記憶するのに、より少ない空間を必要とする。
【0015】
ガード・タグとアドレス・タグとの一致が検出されたかどうかの、生成された指示の特定の形態は、実装形態によって異なる場合がある。場合によっては、タグ保護されたメモリ・アクセス動作は、アドレス指定された位置へのメモリ・アクセスが、ガード・タグとアドレス・タグとの一致が検出されたかどうかに応じて許可されるかどうかを制御するステップを含むことができる。しかし、他の実例において、タグ保護されたメモリ・アクセスは、ガード・タグとアドレス・タグとの一致が検出されたかどうかにかかわらず、アドレス指定された位置へのメモリ・アクセスを実施するステップを含むことができる。例えば、メモリ位置の所与のブロックに関連付けられたガード・タグは、メモリ・システム内のメモリ位置の異なるブロックに記憶することができ、したがって、ガード・タグにアクセスするステップは、別個の読取り動作を必要とする可能性がある。したがって、ガード・タグとアドレス・タグとが比較されてしまうまでメモリ・アクセスが遅延される場合、それは実際のメモリ・アクセスの処理を遅延させる場合があり、したがって、ガード・タグが利用可能である前に、及びガード・タグとアドレス・タグとの任意の一致が検出されたかどうかにかかわらず、アドレス指定された位置へのメモリ・アクセスを実施し、次いで、ガード・タグが取得され、アドレス・タグと比較されると、一致が検出されたかどうかの別個の指示を生成することが望ましい場合がある。
【0016】
1つの実例において、一致が検出されたかどうかの指示は、ガード・タグとアドレス・タグとの不一致が検出されたとき生成される障害状態を表す信号でもよい。例えば、メモリ・アクセス回路は、アクセス許可に違反した場合、又はマッピングされていないアドレスにアクセスした場合に生成される障害と同様のメモリ障害をシグナリングすることができ、或いは異なる種類の障害状態を指示することができる。障害信号は、検出された障害に応答するために処理回路をトリガして、例外処理ルーチンを実行することができる。
【0017】
代替案として、状態指示は、装置の処理回路にアクセス可能な制御レジスタ内に記録して、ガード・タグとアドレス・タグとの比較において一致又は不一致が検出されたどうかを指示することができる。次いで、状態情報は、メモリ・アクセスが有効であったかどうかをチェックするために、後続の命令によって読み取ることができる。
【0018】
アドレス・タグとガード・タグとが一致したのかどうか、又は不一致であったのかどうかを報告する別の選択肢は、コードの実行された部分に関連付けられたエラー・ログに情報を記録することであり得、それはコードの部分の全体を通して検出された任意のガード・タグ・エラーを追跡する。例えば、不一致のガード・タグとアドレス・タグとに応答して、不一致をトリガした宛先アドレス、又は不一致のメモリ・アクセスをトリガした命令の命令アドレスをエラー・ログに記録することができる。この場合、コードの動作を妨げる任意の具体的な処置を実施するのではなく、エラーを単純にエラー・ログに記録することができる。次いでエラー・ログは、後続のソフトウェアのバージョンにおけるエラーを除去することでプロバイダを手助けするためにコードのソフトウェア・プロバイダに利用可能にすることができる。
【0019】
したがって、ガード・タグの一致/不一致の指示をメモリ・アクセス回路によって生成することができる、様々なやり方があることが理解されよう。
【0020】
いくつかの実施例において、対応するガード・タグを有するメモリ位置のブロックは、それぞれ単一のメモリ位置を含むことができる。この場合、各個々のメモリ位置は、異なるガード・タグを有することができ、それは、より大きな範囲のメモリ・エラーを検出することができるようにガード・タグを設定する微細な粒度を提供することができる。
【0021】
しかし、実際には、各アドレス指定された位置に対して個々のガード・タグを設定するオーバーヘッドは、高すぎる場合があり、各ガード・タグを複数のメモリ位置のブロックに関連付けることが、より効率的であることがある。この場合、いくつかの隣接したメモリ位置は、同じガード・タグを共有することができ、それは、メモリ関連エラーの一般的な形態を検出するのには十分であり得る。
【0022】
メモリ位置の所与のブロックに関連付けられているガード・タグは、メモリ・システム内の任意の他のメモリ位置において記憶することができる。メモリ・システムにおけるガード・タグの位置が選択される特定のやり方は、実装形態によって又はラン・タイムにおいて大幅に異なる場合がある。いくつかの実例において、ガード・タグを記憶する位置は、処理回路によってアーキテクチャ的にアクセス可能であり得、すなわち、ガード・タグ記憶位置は、アドレス指定された位置と同じアドレス空間の一部にマッピングされた位置でもよい。この場合、アドレス指定された位置それ自体と、対応するタグ記憶位置のアドレスとの間のマッピングは、固定し又は配線で接続することができ、又は変数であり得、例えば、メモリ・アクセス回路によって維持される追跡テーブルにおいて、又はトランスレーション・ルックアサイド・バッファにおいて追跡することができる。代替案として、他の実装形態は、所与のアドレス指定された位置に関連付けられたガード・タグを、処理回路にアーキテクチャ的にアクセス可能ではない、他の記憶位置、例えば、処理回路によって実行される命令によってアドレス指定することができるアドレス空間にマッピングされないマイクロアーキテクチャに用意された追加の記憶装置に記憶することができる。この場合、メモリ・アクセス回路は、アドレス指定された位置のアドレスに基づいて、対応するタグ記憶位置を参照するのに使用される特定の内部アドレスを決定し、タグ・データをタグ記憶位置から読み取るのに必要とされる任意の追加のメモリ・アクセスをトリガすることができる。タグ記憶位置が処理回路にアーキテクチャ的にアクセス可能であるかどうかにかかわらず、タグ値は、より高速のアクセスのためにキャッシュ内で、データ値に使用される同じキャッシュ内か、又は専用タグ・キャッシュにおいてかのいずれかでキャッシュすることもできる。
【0023】
場合によっては、ガード・タグは、相対的に小さくてもよく、例えば、4又は8ビットでもよく、したがって、それぞれメモリ位置の異なるブロックに関連付けられた複数のガード・タグは、同じメモリ位置内に収まることができる。したがって、複数のガード・タグを複数ガード・タグ設定命令に応答して更新することができるが、場合によっては、複数のガード・タグは、それらが、すべて、メモリ・アクセス回路による単一の書込み動作によって書き込むことができる、単一の位置内に記憶される場合、単一のメモリ・アクセスにおいて更新することができる。代替案として、他の実装形態は、複数の独立した書込みをトリガして、複数ガード・タグ設定命令に応答して設定されるガード・タグの異なるサブセットを設定することを必要とする場合がある。したがって、命令が、ガード・タグを設定するために単一のメモリ・アクセス又は複数のメモリ・アクセスのいずれかをトリガすることができることが可能である。
【0024】
アドレス・タグは、異なるやり方で宛先アドレスに関連付けることができる。場合によっては、アドレス・タグは、例えば、タグ保護されたメモリ・アクセス動作をトリガする、タグ保護されたメモリ・アクセス命令によって指定された別個のレジスタを使用して、宛先アドレスとは別個に指定することができる。しかし、他の実例において、アドレス・タグは、宛先アドレスの1つ又は複数の選択されたビットの関数として決定することができる。すなわち、アドレス・タグは、宛先アドレスそれ自体の一部分から導き出された情報を含むことができる。しばしば、命令セット・アーキテクチャが、あるビット数(例えば、64ビット)を有するアドレスをサポートすることができるが、所与のハードウェア・デバイスは、実際にはそのビット数を使用して表すことができるすべての可能なアドレスをそれが使用するだけのメモリ容量を必要としない可能性がある。例えば、デバイス使用における現在の傾向の場合、264の個々のアドレス指定可能な位置を提供する必要性はまだ何もない。したがって、しばしば、メモリ・アドレスのいくつかのビットは、効果的に未使用にする可能性があり、常に同じ値を有するか、又は最上位の「実」アドレス・ビットの符号拡張として設定されるかのいずれかである可能性がある(したがって、未使用部分はすべて0又はすべて1に設定される)。したがって、この未使用部分は、アドレスがレジスタ間で操作され、又はレジスタ間を移動するとき、アドレス・タグを当然アドレスと一緒に輸送することができるので、アドレス・タグ又はアドレス・タグを導き出すための値を表すために、アドレス・タグを取得するために別個のレジスタにアクセスすることを必要とすることを回避するために、また、アドレスと、対応するアドレス・タグとの一致を追跡することをより容易にするために、再使用することができる。
【0025】
アドレス・タグを決定するために宛先アドレスの一部分を使用する実施例において、このアドレス・タグは、宛先アドレスによって識別された、アドレス指定された位置からの情報がキャッシュ内に記憶されたかどうかを決定するためにキャッシュによって使用することができる宛先アドレスのタグ部分と異なることに留意されたい。多くのキャッシング・スキームは、キャッシュ内のそのデータと並行してキャッシュされたデータの部分のアドレスのタグ部分を記憶することができ、したがって、キャッシュされたデータが、必要とされるアドレスに実際に対応するかどうかを決定するために、所与のアドレスがないかキャッシュを検索すると同時に、アドレスの一部を、キャッシュされたデータと並行して記憶されたタグと比較することができる。しかし、この場合、キャッシュ内のタグと比較されるアドレスのタグ部分は、データが必要とされる特定のアドレス指定された位置を実際に識別するアドレスの一部分の一部であり、すなわち、アドレスのキャッシュ・タグ部分を変更することは、当然、結果としてメモリ・システム内の異なるアドレス指定された位置を指し示すアドレスとなる。対照的に、タグ保護されたメモリ動作に使用されるアドレス・タグの場合、メモリ・アクセス回路は、アドレス・タグから独立してデータが必要とされるアドレス指定された位置を選択することができる。すなわち、アドレス・タグが異なる値を有する場合でも、宛先アドレスによって参照されるアドレス指定された位置は、アドレス指定された位置の選択が宛先アドレスの他の部分だけに依存するので、依然として同じである可能性がある。これにより、コンパイラが、特定のアドレスに関連付けられたアドレス・タグを、メモリ・システム内のデータの関連ブロックに割り当てられた、対応するガード・タグ値に一致する任意の値に設定する自由が得られる。また、キャッシュの場合、タグ値の記憶装置をキャッシュ内にタグ付けすることは、キャッシュ・コントローラによって制御することができ、命令デコーダによって復号されるタグ設定命令によって明確に命令されなくてもよく、典型的には、所与のアドレス指定された位置へのメモリ・アクセスに応答して、単一のキャッシュ・タグだけが新たな値に設定されることを必要とする(所与のアドレス指定された位置に関連付けられたデータをキャッシュするのに使用されるキャッシュ・エントリに関連付けられたキャッシュ・タグ)。対照的に、複数ガード・タグ設定命令の場合、命令デコーダは、メモリ内の異なるアドレス指定された位置に関連付けられた複数のガード・タグの設定を命令するための具体的な命令をサポートする。
【0026】
いくつかの実装形態において、命令デコーダは、メモリ・アクセス命令の別個のタグ保護されていない及びタグ保護されたバリアントをサポートすることができる。この場合、タグ保護されたメモリ・アクセス動作は、メモリ・アクセス命令のタグ保護されたバリアントに応答してトリガすることができる。対照的に、タグ保護されていないメモリ・アクセス命令は、単純に、ガード・タグを取得することを必要とせずに、又はアドレス・タグとガード・タグとの任意の比較を実施することを必要とせずに、その命令によって指定された宛先アドレスによって識別された、アドレス指定された位置へのアクセスをトリガすることができる。
【0027】
しかし、他の実装形態において、すべてのメモリ・アクセスは、タグ保護されたメモリ・アクセスであるとみなすことができる。したがって、場合によっては、任意のメモリ・アクセス命令は、上記に論じたように、タグ保護されたメモリ・アクセス動作を実施するために、メモリ・アクセス回路をトリガするとみなすことができる。
【0028】
しかし、たとえすべてのメモリ・アクセス命令がタグ保護されたメモリ・アクセス命令と解釈されたとしても、命令セット・アーキテクチャがある動作に対するガード・タグ比較を選択的に無効にすることをサポートすることができる他のやり方が依然としてある可能性がある。例えば、処理装置の制御レジスタ内の制御パラメータが、タグ比較を選択的に無効にすることができる。別の選択肢は、アドレス・タグのある値を特別なやり方で解釈し、したがって、アドレス・タグがガード・タグの任意の可能な値に対して一致するとみなすはずであることをそれらが示し、この場合も、タグ比較の効果を効果的に無効にし、したがって、アドレス・タグがガード・タグに一致するかどうかにかかわらず、エラーが何も報告されないことである。
【0029】
複数ガード・タグ設定命令は、異なるやり方で実装することができる。1つの特定の有用なバリアントは、長さレジスタを識別する、複数ガード・タグ設定命令のレジスタ長指定バリアントを提供することである。このバリアントに応答して、命令デコーダは、長さレジスタに記憶された長さパラメータによって識別されたブロックの最大数以下の所与の数の連続したブロックに関連付けられたガード・タグを更新するべくメモリ・アクセス回路を制御し、長さレジスタに記憶された長さパラメータを所与の数に比例した量だけデクリメントするべく処理回路を制御することができる。したがって、ガード・タグが更新されることになっているブロックの絶対数を指定するのではなく、長さレジスタは、対応するガード・タグが命令に応答して更新されることが許可されているブロックの最大数を指定する。所与の数の連続したブロック(それに対して、ガード・タグが更新されることになっている)として選択された特定の数は、実装形態ごとに選択することができ、又はラン・タイムにおいて変動することができる。これはマイクロアーキテクチャ設計における柔軟性を提供するのに有用であることができるが、依然として同じシーケンスの命令が様々なマイクロアーキテクチャ間の予想されるアーキテクチャ挙動を用いて実行されることを可能にする。したがって、実装形態に依存しないソフトウェア・ルーチンを、命令のレジスタ長指定バリアントを使用して実行することができ、実装形態が特定の粒度のタグ設定を決定することが可能になる。
【0030】
この複数ガード・タグ設定命令の形態は、単一の命令に応答してメモリの広範な領域に対するすべての更新動作を実施することにメモリ・アクセス回路をコミットすることは望ましくない場合があるので、極めて有用であることができる。例えば、多数の異なるガード・タグを更新するためにメモリ・アクセスがコミットされた場合、これは、他の動作を処理するための資源をブロックすることがあり、メモリ・アクセス動作を順序付けして、効率を改善することをより困難にすることがある。したがって、マイクロアーキテクチャ設計者によっては、いくつのガード・タグを1つの命令によって更新することができるかということを抑制することを好む可能性がある。1つの命令に応答して許可されるガード・タグ更新の数は、実装形態によって異なる場合がある。例えば、異なる実装形態は、メモリ・システムに異なるキャッシュ・ライン・サイズを実装することができる。より大きなキャッシュ・ライン・サイズを有する実装形態は、より小さなキャッシュ・ライン・サイズを使用する実装形態よりも多くの数のガード・タグを1つの命令に応答して設定することができる可能性がある。また、特定のマイクロアーキテクチャ実装形態内でも、時には、1つの命令に応答して効率的に設定することができるガード・タグの数は、キャッシュ・ライン内の宛先アドレスの相対位置に依存する可能性がある。例えば、キャッシュ・ライン境界にアラインされたメモリ・アクセスを実施することは、より効率的であることができ、したがって、更新されるタグ値がキャッシュ・ラインの途中で開始した場合、次のキャッシュ・ラインに続くのではなく、キャッシュ・ラインの終わりまでに及ぶガード・タグを更新だけすることは、より効率的である可能性があり、したがって、複数ガード・タグ設定命令の後続のインスタンスは、次いで、アラインされたアドレスから開始し、メモリ・アクセスをより効率的にすることができる。
【0031】
したがって、いくつかの理由から、いくつのメモリ位置のブロックがそれらのガード・タグを複数ガード・タグ設定命令に応答して更新させるのかということを変更する柔軟性をメモリ・アクセス回路に与えることは有用である可能性がある。長さレジスタにおける長さパラメータによって指定されたブロックの最大数は、更新を抑制し、したがって、ガード・タグは、ガード・タグが設定されることを必要とする範囲の終わりを超えて更新されない。命令が処理回路をトリガして、ガード・タグが更新された所与の数のブロックに基づいて長さパラメータをデクリメントするので、これは、複数ガード・タグ設定命令を含む命令のループが、ガード・タグが長さレジスタにおいて更新されることになっている必要な数のブロックを最初に指定するように定義することができ、次いで、ループは、複数ガード・タグ設定命令の複数のインスタンスを反復することができることを意味し、各反復は、タグが更新されてしまったブロックの数に比例した量だけ長さパラメータをデクリメントし、長さパラメータがゼロまでデクリメントされてしまうと、ループを終了させることができ、その時点において、必要な数のタグが設定されている。これにより、いくつのブロックが実際に与えられ、単一のインスタンス命令に応答してガード・タグ値として更新されたかにかかわらず、まったく同じループが様々な異なるマイクロアーキテクチャにより実行することが可能になる。
【0032】
いくつかの実例において、長さパラメータは、タグが更新されることになっている正確な数のブロックを指定することができる。この場合、長さパラメータがデクリメントされる量は、所与の数それ自体に等しい可能性がある。
【0033】
代替案として、いくつかの実装形態において、長さパラメータがデクリメントされる量は、ガード・タグが更新されるブロックの数よりも大きいか又はそれよりも小さいが、ガード・タグが更新されるブロックの数に比例することができる。
【0034】
例えば、いくつかの実装形態では、長さパラメータは、ガード・タグが設定されることになっているメモリのバイト数として指定することができる。マイクロアーキテクチャは、長さパラメータにおいて定義された最大以下の特定のバイト数を選択し、選択されたメモリのバイト数にガード・タグを設定することができる。各ガード・タグがメモリの複数のバイトに対応することができるので、これは、長さパラメータがデクリメントされる量が、命令に応答して更新されるタグの数に比例するが、それよりも大きい可能性があることを意味することができる。
【0035】
他の実例において、長さパラメータは、いくつかの基本粒度のブロックの倍数を単位として長さパラメータを定義することができる。この場合、長さパラメータは、ブロックのいくつの倍数が更新されることになるかを指定することができ、したがって、長さパラメータがデクリメントされる量は、実際に更新されるガード・タグの数に比例するが、それ未満であることができる。例えば、いくつかのマイクロアーキテクチャでは、1つのガード・メモリ位置に収まるガード・タグの数、又は1つのデータ・メモリ位置に関連付けられるガード・タグの数の粒度でガード・タグを更新することがより効率的であり得る。この場合、長さパラメータに必要なビット数を低減するために、長さパラメータは、ガード・タグの絶対数ではなく、対応するタグが更新されることになっているデータ/ガード・メモリ位置の数を実際に指定することができる。したがって、タグ設定命令は、ガード・タグが更新されることが許可される基本粒度に対応するガード・タグの数によって割られた更新されたガード・タグの数に対応する量だけデクリメントされるように長さパラメータをトリガすることができる。
【0036】
それにもかかわらず、レジスタ長指定バリアントは異なるマイクロアーキテクチャをサポートする、極めて柔軟なアーキテクチャを提供することができるが、他の実例において、複数ガード・タグ設定命令の即値長指定バリアントを提供することができ、その場合、命令のコード化において指定された即値パラメータが、メモリ・システムのいくつのブロックが、更新されたガード・タグ値を与えられることになっているのかを識別する。即値長指定バリアントに応答して、命令デコーダは、即値パラメータによって指定された連続したブロックの数に関連付けられたガード・タグを更新するようにメモリ・アクセス回路を制御することができる。したがって、この場合、マイクロアーキテクチャは、いくつのブロックがそれらのガード・ブロックを更新させることになっているのかにおいて選択の余地がない可能性があるが、即値パラメータによって示されたガード・タグの数を単純に更新することができる。
【0037】
ガード・タグが更新されることになっているブロックの絶対数を示す長さレジスタを指定するレジスタ・ベースのバリアントを提供することも可能であり、それは、即値長指定バリアントと同様のやり方で挙動することができ、したがって、レジスタ内の長さパラメータは、上記に論じたレジスタ長指定バリアントと同様に、ブロックの最大数ではなく、タグが更新されることになっているブロックの正確な数を指定することができる。
【0038】
複数ガード・タグ設定命令は、ガード・タグが更新されることになっているメモリの連続したブロックを識別するタグ更新宛先アドレスを指定することができる。概して、複数ガード・タグ設定命令によって目標とされる少なくとも2つの連続したブロックは、タグ更新宛先アドレスによって実際に識別されるメモリ位置と、タグ更新宛先アドレスによって識別されたメモリ位置に連続するメモリ位置の少なくとも1つの後続ブロックとを含むことができる。複数ガード・タグ設定命令によってトリガされた1つ又は複数のメモリ・アクセスは、タグ更新宛先アドレスそれ自体に対する又はタグ更新宛先アドレスによって識別されたメモリ位置に続く後続のメモリ位置のブロックに対する書込みではないことに留意されたい。代わりに、複数ガード・タグ設定命令によってトリガされた1つ又は複数のメモリ書込みは、タグ更新アドレスによって識別されたメモリの連続したブロックに対応するガード・タグが記憶される記憶位置を目標とすることができる。
【0039】
複数ガード・タグ設定命令は、タグ更新宛先アドレスを定義するためにアドレス・レジスタを使用することができる。アドレス・レジスタは、ガード・タグが更新されることになっている少なくとも2つの連続したブロックを識別するタグ更新宛先アドレスを決定するアドレス決定値を記憶することができる。例えば、アドレス・レジスタは、タグ更新宛先アドレスに対応する絶対アドレスを指定することができ、又はタグ更新宛先アドレスを取得するためにベース・アドレスに追加されることになっているオフセットを指定することができる。ベース・アドレスは、別個のレジスタにおいて指定することができ、又は黙示的であることができ、例えば、いくつかの命令のバリアントは、プログラム・カウンタ相対アドレス指定を使用することができ、したがって、ベース・アドレスは、プログラム実行中に到達した現在のアドレスを示すプログラム・カウンタを含むことができる。
【0040】
概して、複数ガード・タグ設定命令に応答して、上記に論じたレジスタ長指定バリアント又は即値長指定バリアントが使用されるかどうかにかかわらず、命令デコーダは、ガード・タグが複数ガード・タグ設定命令に応答して更新されるメモリ位置におけるブロックの数に対応するオフセットによってアドレス・レジスタに記憶されたアドレス決定値をインクリメント又はデクリメントするように処理回路を制御することができる。これは、複数ガード・タグ設定命令がループ内に提供されたとき、アドレス・レジスタが、ガード・タグが更新されたメモリ位置の最後のブロックの後の次のアドレスを指し示すように自動的に更新され、したがって、アドレス・レジスタを操作するための追加の命令を含む必要がないことを意味する。これはコード密度及び性能を改善するのに役立つ。命令のループは、最下位アドレスから最上位アドレスまで(毎回、アドレス・レジスタ内のアドレスをオフセットだけインクリメントする)又は最上位アドレスから最下位アドレスまで(毎回、アドレスをオフセットだけデクリメントする)所与のメモリ領域を横断することができる。
【0041】
ガード・タグを更新するのに使用される更新されたタグ値は、異なるやり方で複数ガード・タグ設定命令から導き出すことができる。場合によっては、更新されたタグ値は、タグ保護されたメモリ・アクセスのアドレス・タグを宛先アドレスの一部分内に表すことができるやり方と同様のやり方でタグ更新宛先アドレスの1つ又は複数の選択されたビットを使用して表すことができる。したがって、いくつかの実例において、複数ガード・タグ設定命令に応答して、命令デコーダは、メモリ・アクセスをトリガして、少なくとも2つの連続したブロックに関連付けられたガード・タグを、タグ更新宛先アドレスの1つ又は複数の選択されたビットの関数として決定される更新されたタグ値に更新するようにメモリ・アクセス回路を制御することができる。
【0042】
代替案として、いくつかの命令の形態は、タグ更新宛先アドレスを識別するのに使用される任意のレジスタと別個の、更新されたタグ値を識別するタグ値レジスタを指定することができる。この場合、複数ガード・タグ設定命令に応答して、命令デコーダは、メモリ・アクセスをトリガして、少なくとも2つの連続したブロックに関連付けられたガード・タグを、タグ更新宛先アドレスから独立した複数ガード・タグ設定命令によって指定されたタグ値レジスタに記憶された値の関数として決定される、更新されたタグ値に更新するべくメモリ・アクセス回路を制御することができる。
【0043】
これらの2つの方式のどちらが採用されるのかは、複数ガード・タグ設定命令内のコード化オーバーヘッドと、更新されたタグ値を所与の命令に対して設定する際の予想オーバーヘッドとの得失評価に基づいて決定することができる。更新宛先アドレス内の更新されたガード・タグを表す最初の方式は、命令コード化内に他のレジスタ識別子を提供する必要性を回避し、他の目的に利用可能なより多くのコード化空間を残すことができ、それは、コード化空間がしばしば命令セット・アーキテクチャ内で貴重であるので有用であり得る。他方、更新されたタグ値が別個のタグ値レジスタに記憶された場合、これにより、コード密度を低減することがある、複数ガード・タグ設定命令を実行する前に、別個の命令が所望の更新されたタグ値をタグ更新宛先アドレスの一部分に書き込む必要性が回避される。両方の選択肢を使用することができる。
【0044】
複数ガード・タグ設定命令のデータ・クリアリング・バリアントを提供することもできる。このバリアントに応答して、命令デコーダは、1つ又は複数のメモリ位置の少なくとも2つの連続したブロックに記憶されたデータ値を、クリアされた値に設定するためにメモリ・アクセスもトリガするように、更新されたガード・タグを設定することに加えて、メモリ・アクセス回路を制御することができる。クリアされた値は、データ値の前の値に無相関である任意の値でもよい。例えば、クリアされた値は、ゼロなどの所定の値、又はランダムに生成された値であり得る。これは、しばしば、ガード・タグ設定がメモリのブロックを初期化するプロセスの一部として実施することができるので有用であることがあり、同時に、初期化されたメモリのブロックの内容をある所定の値にクリアして、引き続いて実行されたコードに可視であるそのアドレス空間の領域に前に記憶されたデータを回避することも所望される場合がある。複数ガード・タグ設定命令のデータ・クリアリング・バリアントを提供することによって、これにより、ガード・タグ設定とデータ・クリアリングを、両方とも、単一の命令に応答して実施することができるので、データをクリアするもうひとつの命令を実行する必要性が回避される。上記に説明した複数ガード・タグ設定命令の種類のいずれかには、追加のデータ・クリアリング・バリアントも提供することができ、したがって、複数ガード・タグ設定命令の同じ形態の非データ・クリアリング・バリアントとデータ・クリアリング・バリアントの両方を提供することができる。代替案として、いくつかの実装形態において、すべての複数ガード・タグ設定命令バリアントは、当然、データ・クリアリング・バリアントであり得、したがって、いくつかの実装形態は、複数のガード及びタグ設定命令の任意の非データ・クリアリング・バリアントをサポートしない可能性がある。
【0045】
上記に説明した複数ガード・タグ設定命令のバリアントのすべては、そのパラメータの少なくともいくつかの値(レジスタ指定パラメータ又は即値パラメータのいずれか)に対して、メモリ・アクセス回路をトリガして、少なくとも2つの連続したメモリ位置のブロックに関連付けられたガード・タグを更新することができる命令であってもよい。しかし、同じ種類の命令は、パラメータの他の値に対して、単一のガード・タグだけの更新をトリガすることができ、又はいくつかのインスタンスにおいて、任意のガード・タグへの更新はまったくトリガしないことができる。例えば、レジスタ長指定バリアントの長さレジスタにおいて指定された長さパラメータがゼロである場合、命令は、任意のガード・タグを更新されるようにトリガしない可能性がある。同様に、長さパラメータが1を指定した場合、命令に応答して更新されるガード・タグの最大数は1でもよい。したがって、いくつかの命令オペコードは、命令によって指定されたパラメータに応じて、複数ガード・タグ設定命令として機能するときもあり、また、単一のガード・タグ設定命令として機能するときもあることが理解されよう。概して、上記に説明した複数ガード・タグ設定命令は、そのパラメータの少なくともいくつかの値に対して、メモリ位置の2つ以上の連続したブロックをトリガして、それらのガード・タグを更新された値に設定させることができる任意の命令でもよい。
【0046】
複数ガード・タグ設定命令又は上記に論じた種類に加えて、命令デコーダ及び処理回路によってサポートされる命令セット・アーキテクチャは、単一のガード・タグ設定命令も含むことができ、それに応答して、命令デコーダは、単一のメモリ位置のブロックに関連付けられたガード・タグを、更新された値に設定するようにメモリ・アクセス回路を制御する。例えば、単一のガード・タグ設定命令は、複数ガード・タグ設定命令と異なるオペコードを有することができ、メモリ・アクセス回路をトリガして、1つよりも多くのガード・タグを更新することができない可能性がある。
【0047】
図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を有する。各ページ・テーブル・エントリは、対応するアドレスのページのアドレス変換マッピングを提供することができ、ページが読取り専用領域なのかどうか、又は読取り可能及び書込み可能の両方であるのかどうかを指定するアクセス許可、又はどの特権レベルがページにアクセスできるのかを指定するアクセス許可などのアクセス制御パラメータを指定することもできる。
【0048】
図2は、タグ保護されたメモリ・アクセスの概念を概略的に示す。メモリ・システム内のメモリ位置を参照するのに使用される物理アドレス空間は、それぞれ、ある数のアドレス指定可能な位置を含むいくつかのブロック30に論理的に分割することができる。簡潔にするために、図2の実例において、各ブロック30は、4つのメモリ位置を含むが、他のブロック・サイズも使用することができる。各ブロック30は、対応するガード・タグ32に関連付けられる。ある数のブロック30に関連付けられたガード・タグは、物理アドレス空間内の異なる、アーキテクチャ的にアクセス可能なメモリ位置34内か、又はアーキテクチャ的にアクセス可能でない(同じ物理アドレス空間にマッピングされない)メイン・メモリ18に設けられた追加の記憶位置内のいずれかに集め、記憶することができる。別個の非アーキテクチャ的にアクセス可能な記憶装置の使用は、場合によっては、ガード・タグ値をキャッシュするためのデータ・キャッシュ16、17における空間を使い尽くすことを回避するのに好ましいことがあるが、それは、通常のコードの性能に影響を与えることがあり、コヒーレンス管理をより複雑にすることがある。追加のタグ・キャッシュ19は、タグがメイン・メモリ18からアクセスされなければならない場合よりも高速にアクセスするために、非アーキテクチャ的にアクセス可能な記憶装置からのタグ値をキャッシュするためにマイクロアーキテクチャに設けることができる。どのタグ記憶位置34が各ブロック30に対応するかの特定のマッピングは、ロード/ストア・ユニット15によって制御することができ、及び配線で接続することができ、又はプログラム可能であることができる。図2において、各タグ32は物理アドレスのブロックに関連付けられる一方、仮想メモリ・アドレス空間における仮想メモリ位置に関連付けられたガード・タグ32を設けることも可能であるが、これは各メモリ・アクセスに対していくつかの追加のアドレス変換を必要とする場合がある。したがって、ガード・タグ32を物理メモリ位置に関連付けることによって、これは性能を改善することができる。概して、ガード・タグ32を物理アドレス空間の対応するブロック30に正確にどのように関連付けられるのかは特定のマイクロアーキテクチャ実装形態の選択である。概して、必要なのは所与のメモリのブロックに関連付けられたガード・タグ32にアクセスし、それを比較することができることだけである。
【0049】
したがって、タグ保護されたメモリ・アクセスが必要とされるとき、アドレス・タグ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個の可能な値を提供することは、しばしば、多くの共通の種類のメモリ・アクセス・エラーを検出するのに十分であり得る。
【0050】
したがって、タグ保護されたメモリ・アクセスが実施されたとき、ロード/ストア・ユニット15は、アドレス・タグ40と、アドレス指定された位置44を含むブロック30に関連付けられたガード・タグ32とを比較し、それらが一致するかどうかを決定する。ロード/ストア・ユニット15は、アドレス・タグ40とガード・タグ32とが一致したかどうかを示す一致指示を生成する。例えば、この一致指示は、アドレス・タグ40とガード・タグ32との不一致がある場合生成される障害信号60であり得、又は一致があったかどうか、又はエラーが検出されたアドレス及び/又はエラーをトリガした命令の命令アドレスを示すエラー・レポートに追加されたエントリがあったどうかを示す状態レジスタに配置された指示であり得る。
【0051】
図3は、タグ保護されたメモリ・アクセスを処理する流れ図を示す。メモリ・アクセスをトリガする命令は、アドレス・タグ及び宛先アドレスを指定することができる。図2に示すように、場合によっては、アドレス・タグは、実際には、宛先アドレスそれ自体のビットのサブセットから導き出すことができるが、他の実例において、それは別個のレジスタに指定することができる。ステップ50において、タグ保護されたメモリ・アクセスをトリガする命令に直面される。それに応答して、ステップ52において、メモリ・アクセス回路15が、宛先アドレスによって識別された、アドレス指定された位置44へのメモリ・アクセスをトリガする。また、ステップ54において、メモリ・アクセス回路15が、宛先アドレスによって識別された、アドレス指定された位置44を含むメモリ位置のブロック30に関連してメモリ・システムに記憶されるガード・タグ32を取得する。ステップ56において、メモリ・アクセス回路15が、アドレス・タグ40を、ステップ54において取得したガード・タグ32と比較する。ステップ58において、ガード・タグとアドレス・タグとの一致が検出されたかどうかの指示が、メモリ・アクセス回路15によって生成される(例えば、上記に説明した指示を報告する一致/不一致の種類のいずれか)。任意の不一致を報告するのに使用される正確な指示は、実装形態によって異なる場合がある。
【0052】
図4は、複数ガード・タグ設定命令のレジスタ長指定バリアントの実例を示す。命令は、そのパラメータとして、タグ更新宛先アドレス70を指定するアドレス・レジスタXmを指定し、アドレス・レジスタXmは、アドレスのビットのサブセットを使用して指定された、更新されたタグ値72も含む。命令は、命令に応答して更新されるブロックの最大数74Nmaxを指定する長さレジスタXnも指定する。
【0053】
図5は、図1の装置2による図4の命令の処理を示す流れ図である。ステップ80において、複数ガード・タグ設定命令が、命令デコーダ6によって復号される。それに応答して、命令デコーダ6が、図5の後続のステップを実施するように処理回路4とロード/ストア・ユニット15とを制御する制御信号を生成する。ステップ82において、ロード/ストア・ユニット15が、メモリ・システムがメモリ位置のXブロックに関連付けられたガード・タグを、アドレス・レジスタXmから導き出された、更新されたタグ72によって指定された、更新されたタグ値に設定するために少なくとも1つのメモリ・アクセスを実施するように要求する信号を生成する。更新されるブロックの数Xは、Nmax、長さレジスタXnに指定されたブロックの最大数74以下の任意の数でもよい。Xの特定の値は、実装形態固有でもよい。すなわち、図4の命令を含む命令セット・アーキテクチャは、Xのどんな特定の値が選択される必要があるのかを指定しない。所与のプロセッサ実装形態は、その特定のマイクロアーキテクチャ実装形態に都合がよいXの任意の値を自由に選択することができる。Xが2以上である場合、ガード・タグが更新されるメモリのXブロック30は、タグ更新宛先アドレス70によって識別されるブロックと、タグ更新宛先アドレスによって識別されたブロックから連続して続くX-1後続のブロックとを含む。X=1である場合、タグ更新宛先アドレスによって識別されたブロックだけが、そのガード・タグを更新させる。長さレジスタXnが、Nmax=0を指定した場合起こり得るX=0である場合、メモリのブロック30はそれらの対応するガード・タグ32を更新させない。
【0054】
ステップ84において、命令デコーダ6によって生成された制御信号が、アドレス・レジスタXmに指定されたタグ更新宛先アドレス70を、メモリのXブロックに対応するアドレス・オフセットだけインクリメントするように処理回路4を制御する。すなわち、アドレス・オフセットは、1つのメモリ・ブロック30のサイズのX倍に対応することができ、その場合、ブロック・サイズは、ガード・タグ32がメモリ位置に割り当てられる特定の粒度(実装形態依存パラメータとして選択することができる)に依存する。したがって、Xm’=Xm+X(ブロック・サイズ)である。他の実例において、レジスタXmにおけるアドレスは、X(ブロック・サイズ)だけデクリメントすることができる。
【0055】
また、ステップ86において、制御信号は、長さレジスタXnを、ガード・タグが命令に応答して更新されたブロックの数Xに比例した量だけデクリメントするように処理回路4を制御する。図6の実例において、Xn’=Xn-Xである。
【0056】
他の実例において、長さレジスタXnは、タグが更新されることになっている実際のブロックの最大数を表す代わりに、ブロックのいくつかのある倍数を単位として又はガード・タグが設定されることになっているアドレス範囲のサイズのバイト数を単位として長さを表すことができ、その場合、XnはX未満又はX超だけデクリメントすることができる。例えば、タグを更新することができる基本粒度がGである場合、長さレジスタXnは、更新されるGタグの倍数の数を示す長さパラメータN、すなわち、Nmax=N Gを指定することができる。この場合、ステップ82において、マイクロアーキテクチャ実装形態が、Gの倍数であるXの値を選択することを抑制される可能性があり、ステップ86において、長さパラメータNは、Xの代わりにX/Gだけデクリメントすることができる。別の実例において、長さパラメータが、対応するガード・タグが更新されることになっているメモリの最大バイト数を示す最大値Bを指定し、各ガード・タグが、メモリ位置のKバイトのブロックに関連付けられる場合、アドレス・レジスタは、Xm’=Xm±Xにインクリメント/デクリメントすることができ、その場合、XはB以下のKの倍数であり、長さレジスタXnは、Xn’=Xn-(XK)にデクリメントすることができる。例えば、各タグがメモリの16バイトに関連付けられており(K=16)、マイクロアーキテクチャが、例えば、命令のインスタンス当たり2つのタグ(X=2)を更新することを選択した場合、長さパラメータx1=128及び開始アドレスx2=0x8000であるSetTagRangex1,[x2]!は、処理回路をトリガして、2つのタグを設定し、次いで、x1を128-216=96にデクリメントし、x2を0x8020にインクリメントすることができる。
【0057】
図6は、所与のマイクロアーキテクチャ実装形態に使用されるタグ設定の特定の粒度にかかわらず、ソフトウェアが実装形態に依存しないルーチンを使用することが可能になるために、この命令の形態がどうして特に有用であり得るのかを示す。例えば、ループは、以下のように、実行されるコードにおいて定義することができる。
X0=ベース・アドレス
X1=長さ
ループ:
SetTags[X0]!,X1
CBNZ X1,ループ;X1をゼロと比較し、そうでない場合は‘ループ’に分岐する
【0058】
図6は、ベース・アドレスがアドレス#aとして、及び長さが72に指定される実例を示す。このアーキテクチャの1つの可能性のあるプロセッサ実装形態は、16バイトのキャッシュ・ラインを使用することができ、したがって、一実装形態において、各ガード・タグ32が、4ビットを含む場合、32のタグが単一のキャッシュ・ラインに記憶される空間がある。キャッシュ・ラインは、メモリ・システムによって1つの要求において読み取り/書き込むことができるメモリの単位である。しばしば、1つのキャッシュ・ラインの粒度で動作を実行することは、より効率的であることがある。したがって、実装形態1において、図4の複数ガード・タグ設定命令に応答して32のタグを更新することは好ましい可能性がある。この場合、実装形態1に対して命令を実行することは、結果としてそれらのガード・タグを更新させるメモリの72のうちの32のブロックとなる可能性があり、したがって、Nmaxを提供するレジスタX1は72-32=40に低減され、レジスタX0におけるタグ更新宛先アドレスは、アドレス#a+32(ブロック・サイズ)にインクリメントされ、したがって、それは、ここでブロック32を指し示す。次いで、ループの次の反復は、最終ブロック71がそのタグを更新させてしまうまで次の32のメモリのブロックに対して新たなタグ値を設定するなどし、次いで、X1がゼロにデクリメントされたので、条件付き分岐命令CBNZがループから出る。
【0059】
対照的に、32バイトのキャッシュ・ラインを使用する、異なるマイクロアーキテクチャ実装形態2では、64のタグが1つのキャッシュ・ラインに収まることができ、この場合、タグ設定命令のインスタンス当たり、より多くのタグを更新することは好ましい可能性がある。この場合、命令の1つの実行は、64のタグを設定することができ、すなわち、図5に示す所与の数Xは64である。図6において、Nmaxは、ループの最初の反復で72-64=8にデクリメントされ、アドレスは、アドレス#a+64(ブロック・サイズ)においてブロック64を指し示すように更新される。最終の8つのタグは、ループの2番目の反復に設定される。
【0060】
他の実装形態の実例において、ガード・タグは、それらが保護しているデータに隣接したキャッシュに記憶することができる。例えば、所与のサイズのキャッシュ・ライン(例えば、64バイトのキャッシュ・ライン)は、それぞれキャッシュ・ラインのある部分に対応するある数のガード・タグを用いて拡張することができる。例えば、各タグがキャッシュ・ラインの16バイトに対応する場合、44ビットのタグを各キャッシュ・ラインに関連付けることができる。この場合、そのようなマイクロアーキテクチャは、タグ設定命令のインスタンス当たり4つのガード・タグを設定することに限定することを選ぶことができる。この場合も、上記のループは、依然としてそのようなマイクロアーキテクチャに対して機能することができるが、図6に示す2つの実装形態に比較して、ガード・タグのすべてが設定されてしまうまでにループのより多くの反復を必要とする。
【0061】
したがって、異なる実装形態は、1つの命令当たり異なる数のタグを設定することができるが、それにもかかわらず、同じプログラム・ループを実行することができる。いくつかの実装形態が、必要とされるタグを設定するのに他の実装形態よりも多くのループの反復を必要とする場合があるが、各実装形態は、最終的には、長さレジスタXmにおける値がゼロに低減されてしまうと、ループから分岐する。
【0062】
図7は、マイクロアーキテクチャ実装形態に、異なる数のタグを更新する柔軟性を与えるのに有用である可能性がある別の理由を示す。供給されたアドレス#aのアラインメントに応じ、更新されるタグは、キャッシュ・ラインの途中から開始することができる。この場合、命令がキャッシュ・ラインの残りにおけるタグだけを更新することが好ましい可能性があり、したがって、次のループの反復は、キャッシュ・ライン境界にアラインされたタグを更新することを開始し、後続のアクセスをより効率的にすることができる。対照的に、命令に応答して常に同じ数のタグを更新する実装形態は、そのようなマイクロアーキテクチャ最適化を使用することができない。
【0063】
図8は、更新されたタグ値72にガード・タグが設定されることになっているメモリの範囲の長さを指定するために即値#immを使用する複数ガード・タグ設定命令の代替形態を示す。タグ更新宛先アドレス70及び更新されたタグ値72は、依然として図4の場合と同じくアドレス・レジスタXmに指定することができるが、今度は、命令コード化に指定された即値#immが、タグ値が更新されることになっているブロックの正確な数を示す絶対長さ指示Lを指定する。
【0064】
図9は、図8に示すこの種類の命令の処理を制御する方法を示す流れ図を示す。ステップ100において、命令デコーダ6は、図8に示すガード・タグ設定命令の即値長指定バリアントを復号する。それに応答して、命令デコーダが、ステップ102においてメモリ・アクセス回路15を制御する制御信号を生成して、メモリ位置のLブロックに関連付けられるガード・タグを、更新されたタグ値72に設定する。この場合も、Lが2以上であるとき、Lブロックは、タグ更新宛先アドレス70によって識別されたブロックを含み、L-1後続ブロックが、タグ更新宛先アドレスによって識別されたブロックから連続して後に続く。L=1である場合、タグ更新宛先アドレスによって識別されたブロックに関連付けられたタグだけが更新される。L=0である場合、ガード・タグは何も更新されない。ステップ104において、命令デコーダ6によって生成された制御信号が、アドレス・レジスタXmを更新して、アドレスを、Lブロックに対応するオフセットだけ、すなわち、Xm’=Xm+L(ブロック・サイズ)にインクリメントするように処理回路4も制御する。
【0065】
図10は、図4に示す命令の変形を示し、その場合、更新されたタグ値72が、アドレス・レジスタXmに指定されるタグ更新アドレス70と別個の第3のレジスタXtに指定される。そうでない場合、この命令の挙動は、図4及び5に示すものとまったく同じである。図8に示す即値指定命令の同様のバリアントを提供することができ、更新タグ値72は、タグ更新アドレス70から独立して指定されることが理解されよう。
【0066】
図11は、図4の命令のデータ・クリアリング・バリアントを示す。アドレス・レジスタXm及び長さレジスタXnが、図4に示すものと同じパラメータを指定する。この命令に応答して、ステップ80~86が、図5に示すものと同じやり方で実施される。しかし、命令のデータ・クリアリング・バリアントに応答して、追加のステップ88が実施される。ステップ88において、命令デコーダ6が、メモリのXブロックにおけるデータ値を、それらのデータ値の前の値と無相関のクリアされた値に(例えば、0などの所定の値に、又はランダム値に)設定するために追加のメモリ・アクセスを生成するようにメモリ・アクセス回路15を制御する。これにより、タグ設定命令に加えてデータ値をクリアする別個の命令の必要性が回避され、よりきついループ及びより小さいコード密度が可能になる。図11は、図4に示す命令の形態に適用されたデータ・クリアリング・バリアントの実例を示すが、同様のデータ・クリアリング・バリアントを、上記に説明した、他の種類の複数のタグ設定命令のうちのいずれかに対して実装することもできる。
【0067】
図12は、使用される可能性があるシミュレータ実装形態を示す。先に説明した実施例は、該当する技法をサポートする具体的な処理ハードウェアを動作させる装置及び方法の観点から本発明を実装するが、コンピュータ・プログラムの使用を通じて実装される、本明細書に説明する実施例に従って命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、ハードウェア・アーキテクチャのソフトウェア・ベースの実装形態を提供する限りにおいて、しばしば、シミュレータと呼ばれる。様々なシミュレータ・コンピュータ・プログラムが、ダイナミック・バイナリ変換機を含めて、エミュレータ、仮想マシン、モデル、及びバイナリ変換機を含む。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム120を実行するホスト・プロセッサ130上で実行し、シミュレータ・プログラム110をサポートすることができる。いくつかの構成において、ハードウェア、用意された命令実行環境、及び/又は同じホスト・プロセッサ上に用意された複数の明確な命令実行環境の間に複数のシミュレーションの層がある可能性がある。歴史的に、強力なプロセッサが、妥当な速度で実行するシミュレータ実装形態を提供するのに必要とされてきたが、そのような方式は、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが所望されるときなど、ある状況において正当化される可能性がある。例えば、シミュレータ実装形態は、命令実行環境に、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を提供し、又は典型的には異なるハードウェア・アーキテクチャに関連付けられた命令実行環境を提供することができる。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁に説明されている。
【0068】
シミュレーションした実施例において、実施例が特定のハードウェアの構成又は特徴を参照してこれまで説明してきた限りでは、等価の機能を適切なソフトウェアの構成又は特徴によって提供することができる。例えば、特定の回路をコンピュータ・プログラム論理としてシミュレーションした実施例に実装することができる。同様に、レジスタやキャッシュなどのメモリ・ハードウェアをシミュレーションした実施例にソフトウェア・データ構成として実装することができる。これまでに説明した実施例において参照したハードウェア要素の1つ又は複数がホスト・ハードウェア(例えば、ホスト・プロセッサ130)上に存在する配置において、適切な場合、いくつかのシミュレーションした実施例がホスト・ハードウェアを利用することができる。
【0069】
シミュレータ・プログラム110は、コンピュータ可読記憶媒体112(非一時的媒体でもよい)上に記憶することができ、プログラム・インターフェース(命令実行環境)を、シミュレータ・プログラム110によってモデル化されるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである目的コード100(アプリケーション、オペレーティング・システム及びハイパーバイザを含むことができる)に提供する。したがって、上記に説明した複数ガード・タグ設定命令を含めて目的コード100のプログラム命令は、シミュレータ・プログラム110を使用して命令実行環境内から実行することができ、したがって、上記に論じた装置2のハードウェア上の特徴を実際には有さないホスト・コンピュータ130は、これらの特徴をエミュレートすることができる。例えば、シミュレータ・プログラム110は、目的コード100の命令によってメモリへのアクセスを制御するメモリ・アクセス・プログラム論理114を含むことができる。例えば、メモリ・アクセス・プログラム論理114は、ガード・タグとアドレス・タグとの比較を実施し、ガード・タグとアドレス・タグとのいずれかの不一致が検出されたどうかを報告する命令を含むことができる。また、シミュレータ・プログラム110は、タグ設定プログラム論理116を含むことができ、タグ設定プログラム論理116は、目的コード100に含まれる複数ガード・タグ設定命令に応答して、ハードウェア実施例がタグを設定するやり方に対応するやり方でガード・タグを設定するために1つ又は複数のメモリ・アクセスをトリガする命令を含む。シミュレータ方式において、複数ガード・タグ設定命令のレジスタ長指定バリアントに応答して設定されたタグXの数は、シミュレータ・プログラム110によって選択することができる。
【0070】
本出願においては、「ように構成される(configured to...)」という単語は、装置の要素が、定義された動作を実行することができる構成を有することを意味するのに使用される。この文脈では、「構成(configuration)」は、ハードウェア又はソフトウェアの相互接続の配置又はやり方を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有することができ、又はプロセッサ若しくは他の処理デバイスは、機能を実施するようにプログラムすることができる。「ように構成される(configured to)」は、装置要素が、定義された動作を提供するために任意のやり方で変更される必要があることを意味しない。
【0071】
本発明の例示的な実施例を添付の図面を参照して本明細書に詳細に説明してきたが、本発明がそれらの正確な実施例に限定されないこと、及び添付の特許請求の範囲によって定義される本発明の範囲及び精神から逸脱することなく、本発明の様々な変更形態及び修正形態を当業者によって実施できることを理解されたい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12