(57)【特許請求の範囲】
【請求項１】
コンピュータシステムのデフォルトレジスタにデータを記憶するステップと、
前記デフォルトレジスタに記憶されたデータに関連づけられたメタデータを、少なくとも１つのメタデータレジスタに、別に記憶するステップであって、各メタデータレジスタは、デフォルトレジスタに関連付けられたハードウエアレジスタの拡張であり、前記メタデータは、メモリのアドレスに関連付けられた境界を含む、ステップと、
デスティネーションレジスタに関連づけられた一組の境界を作成し、かつプロパゲーションするために使用されている命令にプレフィックスを関連づけるステップと、
前記一組の境界の境界チェックを明示的に実行するための既存のメモリ操作に、前記プレフィックスを使用するステップと、
ロード命令が、メタデータとして記憶されている境界を違反したか否かを判断するステップと、
前記ロード命令が、前記メタデータとして記憶されている境界を違反している場合、例外を発生するステップと、
前記ロード命令が、前記メタデータとして記憶されている境界を違反していない場合、前記ロード命令を実行するステップと、
を有する方法。
【請求項２】
前記メモリにアクセスするために、デフォルトレジスタのポインタによって使用されるアドレスの下限境界及び上限境界を計算するステップと；
メタデータレジスタに前記下限境界及び上限境界を記憶するステップと、
を有する請求項１記載の方法。
【請求項３】
前記境界の一つ以上を含む一つ以上の境界レジスタに関連づけられた一つ以上のデフォルトレジスタを利用するメモリアクセスのための自動境界チェックを実行するステップ、
を更に有する請求項１記載の方法。
【請求項４】
ソースポインタに関連づけられた一組の境界をデスティネーションポインタにプロパゲーションするために、ポインタの算術演算を実行するためのレガシー・命令を含む命令を実行するステップ、を更に有し、
前記ポインタの算術演算が実行されない場合、前記一組の境界は無効にされる、
請求項１記載の方法。
【請求項５】
プレフィックスを、前記ロード命令に付け加えるステップ、を更に有し、
前記プレフィックスは、前記ソースポインタから前記デスティネーションポインタに前記一組の境界の前記プロパゲーションを示す、
請求項４記載の方法。
【請求項６】
メモリアクセスに関連づけられたアドレスレンジを計算するステップと、
下限境界及び上限境界の境界レンジの外側のいかなるメモリアクセスも防止するために、ポインタに関連する最低アドレス及び最高アドレスを有する前記アドレスレンジと、すでに前記メタデータレジスタにある前記下限境界及び上限境界とを比較するステップと、
を更に有する請求項１記載の方法。
【請求項７】
前記防止することは、境界違反を回避するステップを含み、
前記境界違反は、前記最低アドレスが、すでにある前記メタデータレジスタの前記下限境界よりも小さいか、又は、前記最高アドレスが、すでにある前記メタデータレジスタの前記上限境界より大きい場合に発生する、
請求項６記載の方法。
【請求項８】
プロセッサであって：
データを記憶するデフォルトレジスタと；
前記デフォルトレジスタに記憶された前記データに関連づけられたメタデータを記憶する少なくとも１つのメタデータレジスタであって、各メタデータレジスタは、関連付けられたデフォルトレジスタのハードウエアの拡張であり、前記メタデータは、メモリへのアクセスのための前記デフォルトレジスタのデータを示すポインタによって用いられるアドレスに関連付けられた複数の境界を含む、前記メタデータレジスタと；
ロジックであって：
デスティネーションレジスタに関連づけられた一組の境界を作成し、かつプロパゲーションするために使用されている命令にプレフィックスを関連づけ、
前記一組の境界の境界チェックを明示的に実行するための既存のメモリ操作に、前記プレフィックスを使用し、
ロード命令が、メタデータとして記憶されている境界を違反したか否かを判断し、
前記ロード命令が、前記メタデータとして記憶されている境界を違反している場合、例外を発生し、
前記ロード命令が、前記メタデータとして記憶されている境界を違反していない場合、前記ロード命令を実行する、
ロジックと、
を有するプロセッサ。
【請求項９】
前記メタデータは、メモリにアクセスするために前記デフォルトレジスタにおいて前記データを示しているポインタによって使用されるアドレスに関連づけられた境界を含み、
当該プロセッサは、前記メモリにアクセスするために、デフォルトレジスタのポインタによって使用される、アドレスの下限境界及び上限境界を計算するロジックと；
を有する請求項８記載のプロセッサ。
【請求項１０】
少なくとも２つのメタデータレジスタは、各デフォルトレジスタに関連し、
前記少なくとも２つのメタデータレジスタの第１のものは、下限境界を記憶し、前記少なくとも２つのメタデータレジスタの第２のものは、上限境界を記憶する、
請求項９記載のプロセッサ。
【請求項１１】
命令を有する機械読み取り可能な媒体であって、前記命令が実行されると、機械が、
コンピュータシステムのデフォルトレジスタにデータを記憶するステップと、
前記デフォルトレジスタに記憶されたデータに関連づけられたメタデータを、少なくとも１つのメタデータレジスタに、別に記憶するステップであって、各メタデータレジスタは、デフォルトレジスタに関連付けられたハードウエアレジスタの拡張であり、前記メタデータは、メモリのアドレスに関連付けられた境界を含む、ステップと、
デスティネーションレジスタに関連づけられた一組の境界を作成し、かつプロパゲーションするために使用されている命令にプレフィックスを関連づけるステップと、
前記一組の境界の境界チェックを明示的に実行するための既存のメモリ操作に、前記プレフィックスを使用するステップと、
ロード命令が、メタデータとして記憶されている境界を違反したか否かを判断するステップと、
前記ロード命令が、前記メタデータとして記憶されている境界を違反している場合、例外を発生するステップと、
前記ロード命令が、前記メタデータとして記憶されている境界を違反していない場合、前記ロード命令を実行するステップと、
を実行する、機械読み取り可能な媒体。
【請求項１２】
前記メタデータは、メモリにアクセスするために前記デフォルトレジスタの前記データを示しているポインタによって使用されるアドレスに関連づけられた境界を含み、前記命令が実行されると、機械が、
前記メモリにアクセスするために、デフォルトレジスタのポインタによって使用されるアドレスの下限境界及び上限境界を計算する手順と；
を実行する、請求項１１記載の機械読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、計算科学に関する。より詳細には、中央処理装置（ＣＰＵ）のメタデータに関する。
【背景技術】
【０００２】
Ｃ及びＣ＋＋のような現代のプログラミング言語は、メタデータを使用しない。ポインタのための境界（例えば、境界とは、開始及び終了アドレスに関する。すなわち、ポインタによってポイントされたオブジェクトの上位及び下位のそれぞれの境界を示す。）及びオブジェクトのためのデータのタイプは、これらのプログラミング言語（例えばＣ／Ｃ＋＋プログラム）の実行中に、利用できない。実行されているソフトウェアプログラムに対し、この種のメタデータの欠如は、しばしばプログラムの誤った挙動を起こし、かつ結果として脆弱性を導く。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
メタデータを付け加える１つの従来のアプローチは、メモリのデータ自体に隣接してそれを記憶することである。これによって、ソフトウェアまたはハードウェアには、その位置がわかる。しかしながら、これは、メモリ・レイアウト／アプリケーション・バイナリー・インターフェース（ＡＢＩ：Ａｐｐｌｉｃａｔｉｏｎ  Ｂｉｎａｒｙ  Ｉｎｔｅｒｆａｃｅ）の変更を必要とする。その結果、メタデータは、ソフトウェア全体が新規な修正された規約（ｃｏｎｖｅｎｔｉｏｎ）に従うよう、再コンパイルされることを必要とし、非常に特殊な環境で使用されるだけである。
【０００４】
あるいは、ソフトウェアは、隣接しないメモリーロケーションにデータ及びメタデータを記憶し、かつ、データを対応するメタデータと適合させるために、更にマップ関数をインプリメントする。この場合、データはレジスタにロードされ、対応するメタデータは、他の既存のレジスタにロードされる。更に、ソフトウェアは、データと、既存のレジスタのメタデータとの間における関連の情報をトラッキングし、かつ、対応するデータと同期を維持するために、メタデータの必要なプロパゲーション（伝搬、ｐｒｏｐａｇａｔｉｏｎ）及び無効を実行する。この場合、データがレジスターパラメータの機能として渡されるとき、対応するメタデータもまた、レジスタに渡されることを必要とする。このことは、透明性を欠如することとなり、呼び出し規約（ｃａｌｌｉｎｇ  ｃｏｎｖｅｎｔｉｏｎ）の拡張を必要とする。しかも、この技術のインプリメンテーションは、ソフトウェア及びシステムに対して与える高いオーバーヘッドのために、本質的に遅いものとなる。たとえば、レジスタプレッシャを与え、メタデータのプロパゲーションおよび無効のために必要となる追加の命令等が挙げられるが、この技術が実際には使用されるというわけではない。
【課題を解決するための手段】
【０００５】
図１は、デフォルトレジスタ１０２を有するプロセッサ１００の単純化した図を示す。例えばメインプロセッサまたは専用プロセッサのようなプロセッサは、プログラムコード命令を処理するよう設計された電子回路を有する半導体チップである。大部分のプロセッサは、典型的には、例えばデフォルトレジスタ１０２のような、多くの共通の設計上の特徴を有する。典型的レジスタはプロセッサ上の少量の記憶空間を提供する。したがって、特定のデータは、レジスタを使ってアクセスされる。これは、メモリへのアクセスのように遅い処理と対照的である。例えば、レジスタは命令入力オペランド及び命令出力結果の格納に使用されてもよい。他の共通の設計上の特徴としては、局所的に命令および／またはデータを記憶するキャッシュ、キャッシュおよび／またはメモリから命令をフェッチするフェッチ回路、キャッシュおよび／またはメモリに命令の結果を格納するライトバック回路を有する。更に、レジスタ１０２を有するプロセッサ１００は、ランダムアクセスメモリ（ＲＡＭ）１０４及び読取り専用メモリ（ＲＯＭ）１０６と連絡するよう示されている。
【０００６】
本発明の実施例は、例として示すものであって、かつ添付の図面の記載に限定されない。なお、同様の参照は類似した要素を示す。
【図面の簡単な説明】
【０００７】
【図１】デフォルトレジスタを有する従来のプロセッサを例示する。
【図２】デフォルトレジスタ、及び境界レジスタを有するプロセッサの実施例を例示する。
【図３】プロセッサの境界レジスタに接続されるデフォルトレジスタの実施例を例示する。
【図４】メタデータに関連するデータを有するデフォルトレジスタの拡張レジスタとして境界レジスタを使用するメタデータを管理するための方法の実施例を例示する。
【図５】境界チェックのための方法の実施例を例示する。
【図６】メタデータに関連するデータを有するデフォルトレジスタの拡張レジスタとして境界レジスタを使用して、メタデータを管理するための方法の実施例を例示する。
【図７】コンピューティング・システムの実施例を例示する。
【発明を実施するための形態】
【０００８】
図２は、デフォルト（すなわち、既存の）レジスタ２０２、及び境界レジスタ２０４を有するプロセッサ２００の実施例を例示する。実施例において、プロセッサ２００はデフォルトレジスタ２０２、及びデフォルトレジスタのハードウェア・レジスタの拡張である境界レジスタ２０４を有する。これらの境界レジスタ２０４はメタデータを保持するために（例えば境界レジスタ２０４内の境界）、ハードウェア・レジスタの拡張を提供し、複製されるかまたはデフォルトレジスタ２０２への付加的なプレッシャなしで修正される場合、メタデータとこれに対応するデータとの関連を維持する（例えばデフォルトレジスタ２０２のポインタ）。また、デフォルトレジスタ２０２と、境界レジスタ２０４との間の（内在するか明確な）関連を提供することによって、これらのレジスタ２０２の呼出し規約は、同じに保持される。境界レジスタ２０４で保持されているメタデータは、プロセッサ２００によって異なる目的のために使用されてもよい。例えば、メタデータは、データの型を含み、そして、プロセッサ２００は、データを用いる前に、データの型を検証してもよい。
【０００９】
レジスタには、汎用または整数レジスタが含まれる（これは、データ、及びアドレスを記憶するために使用され、かつデータ／アドレス・レジスタの混合と捉えることができる）。また、その他の以下のレジスタが含まれる。すなわち、例えばユーザーアクセス可能なレジスタ、データ・レジスタ、アドレス・レジスタ、条件レジスタ、浮動小数点レジスタ、定数レジスタ、ベクトルレジスタ、特殊目的レジスタ（命令レジスタを含む）、モデルに特有のレジスタ、制御及びステータスレジスタ、その他が挙げられる。実施例において、整数レジスタは、境界レジスタ２０４に関連するが、実施例において、境界レジスタ２０４は整数レジスタに限定されない。そして、任意のタイプのまたは、組み合わされたタイプのレジスタが用いられ得る。レジスタ拡張２０４は、レジスタ２０２のデータに関連するメタデータを保持する。実施例において、（汎用）レジスタ２０２がメモリーアドレス（例えばポインタ）を含む場合、レジスタ拡張２０４は、レジスタ２０２を使用して、アクセス（ロード／ストア）され得るメモリアドレスのレンジを特定するために使用されてもよい。レジスタ２０２のアドレスは、その境界レジスタ２０４において特定される境界の外側にあってもよい。これらの境界は、メモリアクセス時に点検されてもよい。各々のメモリーアドレス・レンジには下限境界及び上限境界を含む（詳細は後述する）。この場合、レジスタ拡張２０４は、境界レジスタまたはレジスタ・ディスクリプタと呼ぶ。プロセッサ２００は、メモリアドレスを生成し、または決定するアドレスジェネレータ・ユニット２０６を含む。アドレスは、レジスタ２０２、及び任意に他のレジスタ（例えばＩｎｔｅｌプロセッサのインデックスレジスタ、及び固定ディスプレイスメント）を使用して生成されてもよい。プロセッサ２００は、アドレス範囲の下限境界及び上限境界を比較するためのアドレスコンパレータ（また、境界チェックユニットと呼ぶ）２０８と、プロセッサ２００に接続されたメモリにアクセスすることを提供するメモリアクセスユニット２１０と、レジスタ２０２、２０４内の記憶媒体とを有する。図示するように、デフォルトレジスタ２０２はアドレスジェネレータ・ユニット２０６に接続され、アドレスジェネレータ・ユニット２０６及び境界レジスタ２０４は、アドレスコンパレータ（計算ロジック）２０８に接続され、これは更に、メモリアクセスユニット２１０に接続される。本明細書の全体にわたって記載されているように、プロセッサ２００は実施例のさまざまなタスクを遂行するために他のロジック、回路、及びモジュールを含んでもよい。遂行されているタスクの性格に従い、デフォルトレジスタ２０２の数およびタイプは、幾つあってもよい。例えば汎用レジスタ、浮動小数点レジスタ、その他が挙げられる。例えば、命令に関して、ソースレジスタ、及びデスティネーションレジスタが使用される。そして、これらは汎用レジスタまたは浮動小数点レジスタ、などを含んでもよい。したがって、命令はソースレジスタで提供されてもよく、命令の結果は、デスティネーションレジスタに配置されてもよい。ソース、及びデスティネーションレジスタ２０２は、デフォルトレジスタの部分である。
【実施例】
【００１０】
実施例において、新規なプログラム命令は、境界を作成し、かつ境界レジスタ２０４においてそれらを記憶するために定められる。このプログラム命令は、過去のプログラムにおいて未定義だった完全に新規なオペコードであってもよく、また、以前に使っていない、ノンオペレーション（ＮＯＰ）命令を使用して、別名を付ける（ａｌｉａｓｅｄ）ことも可能である。整合性を維持するためのメタデータのプロパゲーションは、プロセッサ２００によって、暗に（ｉｍｐｌｉｃｉｔｌｙ）ポインタ設定（例えばＡＤＤ、ＳＵＢ、ＩＮＣ、ＤＥＣ、など）によって使用される命令のサブセットのために実行されるか、明示的に（ｅｘｐｌｉｃｉｔｌｙ）プロパゲーション挙動を示す新規な命令を使用する。これは、プロセッサ２００は、特定の状況において、それに関連するデータが変更された場合、メタデータをどのように保存するかを記述している。そして、プロセッサ２００は、他の状況において、それに関連するデータが変更された場合、メタデータをどのように破棄するかを記述している。なぜなら、既存の命令のセマンティックが、メタデータのプロパゲーション、保存、及び検証／無効化に用いられる。ソフトウェアプログラムにおいて追加命令は必要とされず、これによって、プログラムコードのサイズ及びそのパフォーマンスに対してインパクトを与えることは潜在的に否定的となる。
【００１１】
実施例において、境界のチェックはいかなる数のメモリ・命令にも適用され、かつ命令のプレフィックス（例えば、セグメント・オーバーライド・プレフィックス）によって明示的に特定されてもよい。命令が、セグメント・オーバーライド・プレフィックスを持っており、これが、デフォルトセグメントと同じである場合、命令は境界チェックを実施してもよい。もう一つの実施例では、完全に新規なプレフィックスが命令に付け加えられてもよい。この技術をインプリメントしていないプロセッサにおいては、このデフォルトセグメントプレフィクスがＮＯＰである。ＮＯＰプレフィックスの使用は、メタデータをサポートしない／インプリメントしないそれらのプロセッサにおいて、メタデータの利点なしで、ソフトウェアが正確に動作することを可能とする。実施例において、明示的な境界のチェック命令が可能とされてもよい。この種の命令は、２つか３つのオペランドを有する。例えば、２つのオペランド形式で、第１オペランドはメモリアドレスとして使用される、及び第２オペランドはアクセス・サイズ（バイト、ワードその他）として使用される。
【００１２】
図３は、プロセッサの境界レジスタ２０４に接続されるデフォルトレジスタ２０２の実施例を例示する。実施例において、レジスタ拡張２０４（例えば境界レジスタ）は、デフォルトレジスタ２０２の数及びタイプに基づいて、何れの数またはタイプのレジスタを含んでもよい。そして、コンピュータシステムのプロセッサアーキテクチャの動きに基づいて、何れの数及びタイプのレジスタを含んでもよい。この図では、レジスタ拡張は、下限境界を保持するための６４ビット長の下限境界拡張３０２、及び上限境界を保持するための６４ビット長上限境界拡張３０４を含む１２８ビット長である。
【００１３】
例えば、新規な命令（例えばＣＰＭＫＤＳＣｒ、ｍ）は、オペランドとしてレジスタ及び実効アドレスを持つ。レジスタ値は下限境界であり、そして実効アドレスは上限境界である。命令は、指定したレジスタに対応する上限境界レジスタ拡張３０４に上限境界値を、下限境界レジスタ拡張３０２に下限境界値を書き込む。したがって、例えばＣＰＭＫＤＳＣ  ＲＡＸ，［ＲＢＸ］ここで、ＲＡＸ＝１０００、及びＲＢＸ＝１００４である場合、ＲＡＸのディスクリプタとして、下限境界拡張３０６は、下限境界値として１０００が書かれ、上限境界拡張３０８は、上限境界値として１００４が書かれる。このことは、ＲＡＸのポインタのための下限及び上限の境界として、１０００及び１００４が確立される。別の実施例において、命令は下限境界及び上限境界を算出するために３つのオペランドを有してもよい。さらに別の態様では、２つの別々の命令が別々に下限及び上限の境界を生成するために存在してもよい。
【００１４】
ＩＮＣ、ＤＥＣ、ＡＮＤ、ＯＲ、ＡＤＤ、及びＳＵＢのようなポインタ上の算術演算を実行するために使用され得る命令は、オペレーションにおいて使用されるレジスタのディスクリプタ・コンテンツを保存する。これらのオペレーションは、ポインタ値を修正するが、それを破棄しないため、ディスクリプタ・コンテンツは、まだ有効である。上記の例を続けること、ＩＮＣ  ＲＡＸが５回実行されると、ＲＡＸの値が１００５となり、ＭＯＶ  ＲＣＸ，［ＲＡＸ］を使用するために、ＲＡＸが用いられるとする。ＲＡＸのポインタに関連づけられたメタデータの下限境界と上限境界は、すなわち３０６は１０００であり、３０８は１００４である。この情報がＲＡＸの１００５と比較されると、境界外（ｏｕｔ−ｏｆ−ｂｏｕｎｄｓ）のメモリアクセスとなる。すなわち、バッファ・オーバフローが検出される。本実施例において、ＣＰＵ／プロセッサは、バッファ・オーバフロー例外の信号を送出してもよい。これによって、プログラム・ソフトウェアが適切な修正処置をしてもよい。
【００１５】
ＭＯＶまたはＬＥＡのような命令は、レジスタ間のポインタを複製するために使用され、かつポインタを複製することに加えて、デスティネーションディスクリプタにソースデスクリプタのコンテンツをプロパゲーションするために使用される。このことは、ポインタがデフォルトレジスタ２０２のレジスタの間で複製されるときに、境界レジスタ２０４の境界を複製することに対応する。メタデータを必要としないかまたは期待しない他のいかなる命令も、命令において使用されるいかなるデスティネーションレジスタのディスクリプタ・コンテンツを無効または破棄してもよい。例えば、ＭＯＶ  ＲＡＸ，０は、ＲＡＸのディスクリプタ・コンテンツを破棄する。なぜなら、境界は、ポインタに対して、及び整数以外に対して意味がないからである。
【００１６】
実施例において、ソフトウェアまたはハードウェアまたはこれらの２つの組合せは、メモリにきめ細かなアクセス制御を実行するために使用されてもよい。アクセス制御は、一般に、さまざまなサブジェクト（ｓｕｂｊｅｃｔ）がオブジェクトにアクセスすることを試みる際に、オブジェクトにアクセスを試みるいかなるサブジェクトもこのオブジェクトにアクセスするための許可を有するかを確認することが実行される。例えば、ポインタは、メモリの異なるオブジェクトにアクセスしようとしているサブジェクトと捉えてもよい。許可は、ポインタに関連づけられた境界によって具体化される。本願明細書において、アクセスコントロール情報は、以下（下限／上限）境界情報または値と呼ぶこととする。また、アクセスコントロールチェックは、以下、境界チェックと呼ぶこととする。境界レジスタ２０４、及び本願明細書で特定されるいかなる方法も、ポインタを使用してメモリにアクセスするときに、特定のタスクまたはチェック（例えば下限／上限境界チェック）を実行してもよい。これらの方法は、また、付加的なチェック（例えば許可および／またはデータのタイプのチェック）を実行してもよい。実施例において、境界レジスタ２０４は、メモリにアクセスするために使用されるアドレスのための下限／上限境界値を特定するために使用され、指定された境界値を使用し、かついかなる境界の違反も扱う。実施例において、境界レジスタ２０４、及び方法は、ポインタのための境界値（また、アクセス制御情報と呼ぶ）を特定し、必要に応じて、ポインタおよび／または境界値を操作し、かつメモリアクセスの一部として境界値を用いる。境界レジスタ２０４を使用した、新しい詳細なアクセス制御または境界チェックの技術が採用される。直接この場合に使用される方法／装置／システムは、（ページテーブルまたはセグメントレジスタによる制御を有するのと対照的に）直接的に境界値をポインタ又はポインタ値と関連付ける。セグメントレジスタは、メモリ領域のアクセスコントロールをアサートするのに対して、汎用（例えば、整数）レジスタ２０２が、境界レジスタ２０４に保存された境界値の詳細な境界チェックと対照的である。上述したように、一つの実施例において、プログラムの一つ以上の既存の（しかし、使っていない）命令が、境界値（アクセス制御情報）を生成し特定するために用いられる。そして、境界値がデフォルトレジスタ２０２のポインタに関連付けられる。そして、命令／プレフィクスは、特定のメモリアクセスのための実行条件のプロセッサ２００を示すために利用される。例えば、デフォルトレジスタ２０２は、汎用（整数）レジスタを含んでもよい。このレジスタは、デフォルトレジスタ２０２に含まれるポインタを使用してアクセスされるアドレスの下限及び上限境界を含む境界値を保持するために拡張される。デフォルトレジスタ２０２は、二つの追加的なレジスタに拡張される（ａｕｇｍｅｎｔｅｄ）。これは、境界レジスタ２０４として図示されており、デフォルトレジスタ２０２のポインタのための下限及び上限境界値を保持する。
【００１７】
有効なディスクリプタを有するデフォルト（整数）レジスタ２０２が、メモリにアクセスするために使用されるときに、プロセッサ２００はアクセスされるメモリアドレスに対してディスクリプタの境界を適用する。プロセッサ２００は、それから指定された上限境界に対してチェックするために、オペランドサイズをデフォルトレジスタ２０２のポインタに付け加えてもよい。例えば、アクセスが４バイトである場合、プロセッサ２００は４をポインタに加え、指定された上限境界とその値を比較する。それ故、境界照合のために、オペランドサイズは、境界をチェックするために使用される潜在的なオペランドのうちの１つである。例えば、境界値は、プロセッサアーキテクチャのアドレッシングモードのベースレジスタにおいて特定されてもよい。しかしながら、境界は、また、インデックスレジスタにおいて特定されてもよい。
【００１８】
インターオペラビリティ、及び既存のＡＢＩｓとの互換性を確保するために、一実施例に従ってレガシー命令は、デスティネーションレジスタに関連づけられた境界を無効にしてもよい。別の実施例において、インターオペラビリティが必要ない場合、境界が適用不可である命令が選択され、境界（またはメタデータ）はデスティネーションレジスタに関連づけられた境界レジスタ２０４に対して、無効にされてもよい。また、特定のソースレジスタから特定のデスティネーションレジスタに境界値をプロパゲーションすることを必要とするいかなる命令も、プロパゲーションプレフィックスを命令に付け加えてもよい。このように、実施例は境界値に対し詳細な制御を提供する。更に、プロセッサ２００は、ダングリング（ｄａｎｇｌｉｎｇ）ディスクリプタを妨げるために、いかなるレガシー・命令もディスクリプタをクリアーすることを担保する。しかしなから、他の実施例では、このインターオペラビリティまたは互換性が必要ない場合には、これらの条件は、緩和または無視されてもよい。実施例において、境界チェックはいかなる数のメモリ・命令にも適用され、かつ命令のプレフィックス（例えば、セグメントオーバーライドプレフィックス）によって明示的に特定されてもよい。命令が、そのデフォルトセグメントと同じセグメントオーバーライドプレフィクスを持つ場合、命令は境界チェックを実行してもよい。また、他の実施例では、全く新しいプレフィクスが、命令に付加されてもよい。実施例において、明確な境界チェック命令が許容されてもよい。この種の命令は、２ないし３つのオペランドを有する。２つのオペランド形式において、第１オペランドはメモリアドレスとして使用され、かつ第２オペランドはアクセス・サイズ（バイト、語その他）として使用される。メモリアドレスのベースまたはインデックスレジスタからの境界は、チェックのために使用される。３つのオペランド形式において、境界レジスタ２０４の特定の境界レジスタは、第１の２つのオペランドのコンテンツに加えて、明示的に特定されてもよい。この図に記載されている技術を用いて、バッファ・オーバフロー、コードのランタイムタイプチェック（例えばＣ／Ｃ＋＋コード、その他）を防止する処理が実行されてもよい。
【００１９】
図４は、デフォルトのレジスタの拡張レジスタとして境界レジスタを使用したメタデータを管理するプロセス４００の実施例である。処理ブロック４０２で、ソフトウェアプログラムの命令がフェッチされ、かつ、プロセッサのデフォルトレジスタにおいてデコードされる。そして、命令がレガシー・命令である場合、レガシー・命令は処理ブロック４０４で実行される。処理ブロック４０６で、ポインタの算術演算（例えば、加算、減算、インクリメント等）が実行される。そして、デフォルトレジスタに含まれるポインタの下限及び上限境界が、境界レジスタに保存される。境界レジスタは、処理ブロック４０８のデフォルトレジスタの拡張レジスタである。レガシー・命令がポインタの算術演算命令でない場合、境界は処理ブロック４１０で無効にされる。
【００２０】
命令がＣＭＰＫＤＳＣである場合、デフォルトレジスタに含まれるポインタを使用してアクセスされるアドレスの下限及び上限境界が、処理ブロック４１２で比較され、これらの境界は、処理ブロック４１４で境界レジスタにコピーされる。命令がレガシーロードに関する場合、判定ブロック４１６で、レガシーロードで上限境界違反があったかどうかが判断される。ＹＥＳの場合は、処理ブロック４２０において例外として処理される。それ以外の場合は、レガシーロード操作は処理ブロック４１８で実行される。同様に、命令がレガシーストアに関する場合、判定ブロック４２２で、レガシーストアに境界違反があったかどうかが判断される。ＹＥＳの場合は、処理ブロック４２０において例外処理がなされる。それ以外の場合は、レガシーストア処理が処理ブロック４２４で実行される。
【００２１】
命令がチェックドポインタ（例えば、それに関連した境界を含んでもよいポインタ）ロードに関する場合、判定ブロック４２６で、ポインタロードで境界違反があったかどうかが判断される。ＹＥＳの場合は、処理ブロック４２０で例外信号が発信され、そうでなければ、処理ブロック４２８でメモリのディスクリプタのためにアドレスが計算される。判定ブロック４３０で、メモリに有効な境界が存在するか否かに関して判断がなされる。ＹＥＳの場合は、デフォルトレジスタに対するメモリからの有効な境界が、処理ブロック４３２でデフォルトレジスタの拡張として機能する境界レジスタへコピーされる。そうでない場合には、処理ブロック４１０で、境界は無効とみなされる。
【００２２】
同様に、処理ブロック４０２でフェッチされデコードされた命令がチェックドポインタストアに関する場合、判定ブロック４３４で、ポインタストアで境界違反があったかどうかに関して判定が行われる。ＹＥＳの場合は、処理ブロック４２０で例外信号が発せられ、もしそうでなければ、メモリのディスクリプタのためのアドレスが処理ブロック４３６で計算される。判定ブロック４３８で、アドレスに対する境界をストアするための利用できるメモリがあるかどうかが判断される。そうでない場合には、例外信号が処理ブロック４２０で発せられる。そうであるならば、処理ブロック４４０で、境界が境界レジスタからメモリ・ディスクリプタに記憶される。（処理ブロック４１０、４１４、４１８、４２４、４３２、４４０からの）処理は、遷移ブロック４４２で終了する。
【００２３】
図５は、境界チェックのための方法５００の実施例を例示する。処理ブロック５０２で、アクセスされる最低アドレスが、利用できるソフトウェアプログラム命令を使用して計算される。処理ブロック５０４で、アクセスされる最高アドレスが、計算される。処理ブロック５０６で、算出が実行される。アクセスされる最低アドレスが境界レジスタで提供される下限境界以上である場合、及びアクセスされる最高アドレスが境界レジスタの上限境界以下であるかが判断される。その場合は、違反は、処理ブロック５１０で検出されない。そうでない場合には、境界違反が検出され、かつ処理はブロック５０８で終了する。
【００２４】
図６は処理６００の実施例を例示する。これは、メタデータに関連するデータを有するデフォルトレジスタの拡張レジスタとしての境界レジスタを使用してメタデータを管理するためのものである。処理ブロック６０２で、すでにデフォルトレジスタの一組を有する処理に境界レジスタの一組が処理に付け加えられる。デフォルトレジスタは、汎用（整数）レジスタを含み、かつデータ、ポインタ、その他を保持するために使用される。境界レジスタの一組は、（ハードウェアベースの）レジスタを含んでもよい。このレジスタは、デフォルトレジスタに存在するデータに関連するメタデータ（例えば境界）が保持可能である。実施例において、各々のデフォルトレジスタに対して、２つの境界レジスタがプロセッサに付け加えられる、それらのうちの一方は、下限境界を保持し、かつ、他方は上限境界を保持する。これらは、メモリにアクセスするためにデフォルトレジスタのポインタによって使用されているアドレスに対応する。処理ブロック６０４で、アドレスに関連づけられた下限、及び上限境界の計算は、利用できるが、使っていないソフトウェアプログラムの一つ以上の命令を使用し、計算ロジックを使用してプロセッサで実行される。判定ブロック６０６で、判定は、計算ロジックを使用して、計算された境界が有効かどうかに関してなされる。実施例において、計算された下限境界が境界レジスタにすでに存在する下限境界より小さいか、または、計算された上限境界が境界レジスタにすでに存在する上限境界より大きい場合、計算された境界に違反していることになる。これは、境界の拡張（ｗｉｄｅｎｉｎｇ）と呼ばれる。境界が拡張されると判断される場合、処理ブロック６０８において例外が処理される。そして、境界は境界レジスタに記憶されない。しかしながら、境界が拡張されない場合には、それらはプロセッサブロック６１０で下限、及び上限境界レジスタに記憶される。
【００２５】
本発明の実施例はデフォルト（汎用）レジスタの新規な／拡張レジスタを提供することを含む。これによって、拡張レジスタにメタデータを作成する命令を使用し、メタデータを拡張レジスタにメモリから保存し、メタデータをメモリに保存し、メタデータに対してメモリアクセスをチェックし、結果としてメタデータをサポートしない命令によりメタデータを無効とし、メタデータをデフォルトレジスタに暗に関連づけることを提供することによって、拡張レジスタは、メタデータを保持する。更に、メタデータの利益を享受せず本願発明を正しくインプリメントしないプロセッサにおいて、正常にプログラムを実行するために、新たな命令として既にインプリメントされているＮＯＰを用いて命令のエンコーディングが行われる。なお、新技術である本願発明をインプリメントし、メタデータを使用するプロセッサにおいては、同一のソフトウェアが利益をもたらす。
【００２６】
さらに、本発明の実施例は、汎用レジスタのポインタのための境界を特定するメタデータを定める。ポインタがメモリ参照に使用されるときに、プロセッサは命令によってアクセスされるアドレスのレンジを計算し、かつ命令のいずれかによってアクセスされるメモリーロケーションが完全にそれらの境界内にあることを確実にするために拡張（境界）レジスタの境界に対してそれらのアドレスを比較する。境界の外側でのメモリーロケーションにアクセスするいかなる試みも防止され、かつこの種の場合、ソフトウェアプログラムがこの状態を扱うことを可能にするために、プロセッサは、例外の信号を発する。実施例は、ポインタが格納されるアドレスを、メタデータがメモリに格納されるアドレスに変換するためのアドレス変換機能を有する。これによって、メモリアドレスに関連するメタデータは、拡張レジスタにロード又はストアされる。このアドレス変換技術は、対応するデータが記憶される位置（例えばデフォルト／汎用レジスタ）から離れた位置（例えば新規な／拡張／境界レジスタ）にメタデータを記憶することを可能とする。簡潔さ、明瞭さ、及び整合性のために、「境界」（それゆえに、語「境界レジスタ）は、例示としてメタデータが含み得るものとして使用される。しかしながら、メタデータはデータに関連づけられたいかなる数の対応するコンテンツを含んでもよいことを意図している。例えば、メタデータは、デフォルトレジスタのデータに対応し、かつ関連づけられた拡張レジスタにおいて、いかなる数のデータの型［＜データ型＞］（例えば整数、浮動小数点、その他）を含んでもよい。別の実施例において、構造体（ｓｔｒｕｃｔｕｒｅ）のような、複素数データ型（ｃｏｍｐｌｅｘ  ｄａｔａ  ｔｙｐｅ）タイプ・テーブルへのポインタである。他の実施例において、メタデータは、
メモリアクセス権利、例えば読取り専用、読取り書込み、その他を含んでもよい。
【００２７】
図７は、コンピューティング・システム（例えばコンピュータ）の実施例を例示する。図７の例示的なコンピューティング・システムは、以下を含む。すなわち、
１）上述した特徴のいずれか一つを少なくとも含む一つ以上のプロセッサ７０１；
２）メモリ制御ハブ（ＭＣＨ）７０２；
３）システムメモリ７０３（この中には、異なるタイプが存在する、例えば、二重データレートＲＡＭ（ＤＤＲ  ＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ））；
４）キャッシュ７０４；
５）入出力（Ｉ／Ｏ）制御ハブ（ＩＣＨ）７０５；
６）グラフィックプロセッサ７０６；
７）表示／スクリーン７０７（ブラウン管（ＣＲＴ）、薄膜トランジスタ（ＴＦＴ）、液晶ディスプレイ（ＬＣＤ）、ＤＰＬ、その他の異なるタイプが存在する）；
８）一つ以上の入出力デバイス７０；
が挙げられる。
【００２８】
一つ以上のプロセッサ７０１は、コンピューティング・システムがたとえどんなソフトウェア・ルーチンをインプリメントしても、これを実行するために命令を実行する。命令は、しばしば、データに対して実行されるある種のオペレーションを含む。データ、及び命令は、いずれもシステムメモリ７０３及びキャッシュ７０４に記憶される。キャッシュ７０４は、通常は、システムメモリ７０３より短い遅延時間を有するように設計されている。例えば、キャッシュ７０４はプロセッサと同じシリコンチップ上へ一体化され、および／またはより速いスタティックＲＡＭ（ＳＲＡＭ）セルによって構築され得る。システムメモリ７０３は、より遅いＤＲＡＭ（ＤＲＡＭ）セルによって構築されてもよい。より多く頻繁に使われる命令、及びデータを、システムメモリ７０３ではなく、キャッシュ７０４に記憶することによって、コンピューティング・システムの全体のパフォーマンス効率が改善する。
【００２９】
システムメモリ７０３は、コンピューティング・システムの中で故意に他のコンポーネントが利用できるようにされる。例えば、データは、さまざまなインターフェースからコンピューティング・システムに受信される（例えばキーボード、及びマウス、プリンターポート、ローカル・エリア・ネットワーク（ＬＡＮ）ポート、モデムポート、その他）。あるいは、データは、コンピュータシステムの内部記憶装置要素（例えばハードディスクドライブ）から読み出される。これらのデータは、しばしば一時的に、それらがソフトウェアプログラムのインプリメンテーションの一つ以上のプロセッサ７０１によって処理される前に、システムメモリ７０３の待ち行列に入れられる。同様に、ソフトウェアプログラムが決定するデータは、コンピューティング・システム・インターフェースのうちの１つを介して、コンピューティング・システムから外部のエンティティに送られなければならない。あるいは、内部記憶装置要素に記憶されなければならない。これらは、しばしば一時的に、それが送信されるかまたは記憶される前に、システムメモリ７０３の待ち行列に入れられる。
【００３０】
ＩＣＨ７０５は、この種のデータがシステムメモリ７０３と、それに適切に対応するコンピューティング・システム・インターフェース（あるいはコンピューティング・システムが指定する場合、内部記憶装置）との間で適切に伝送されること担保する役割を果たす。ＭＣＨ７０２は、プロセッサ７０１、インターフェース、アクセスするシステムメモリ７０３のために、互いに関連し、近接して発生する内部記憶装置要素の間のさまざまな競合する要求を管理する役割を果たす。
【００３１】
一つ以上の入出力デバイス７０８は、また、典型的なコンピューティング・システムにおいてインプリメントされる。入出力デバイスは、一般に、コンピューティング・システム（例えばネットワーク・アダプタ）との間でデータを転送する役割を果たす。あるいは、コンピューティング・システム内の大規模な不揮発性記憶装置（例えばハードディスクドライブ）のために作動する。ＩＣＨ７０５は、双方向、ポイントツーポイントリンクを含む。
【００３２】
コンピュータ・プログラム製品として、本発明の各種実施形態の一部が提供されてもよい。これは、本発明の実施例に従ってコンピュータ（または他の電子デバイス）が方法を実行するようにプログラムするために使用され得るコンピュータ・プログラム・命令を記憶したコンピュータ可読媒体として提供されてもよい。機械読み取り可能な媒体には、フロッピー（登録商標）ディスケット、光ディスク、コンパクトディスク読取り専用メモリ（ＣＤ  ＲＯＭ）、光磁気ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、電気的ＥＰＲＯＭ、磁気または光カード、フラッシュメモリ、または電子命令を記憶することに適している他の種類のメディア／機械可読媒体が含まれる。
【００３３】
上述の詳細な説明において、本発明は、その特定の例示的実施形態に関して記載されている。しかしながら、さまざまな変更態様と改変が請求項に記載したようにより広い本発明の精神と範囲から逸脱することなく、それに対してなされてもよいことは、明白である。明細書及び図面は、したがって、例示的なものであって、制限的なものであると解釈されてはならない。
【符号の説明】
【００３４】
３０２  下限境界レジスタ拡張
３０４  上限境界レジスタ拡張
３０６  下限境界拡張
３０８  上限境界拡張
７０１  プロセッサ
７０２  メモリ制御ハブ（ＭＣＨ）
７０３  システムメモリ
７０４  キャッシュ
７０５  入出力（Ｉ／Ｏ）制御ハブ（ＩＣＨ）
７０６  グラフィックプロセッサ
７０７  ディスプレイ
７０８  デバイス
【図１】
0005425738.tif 000002
【図２】
0005425738.tif 000003
【図３】
0005425738.tif 000004
【図４】
0005425738.tif 000005
【図５】
0005425738.tif 000006
【図６】
0005425738.tif 000007
【図７】
0005425738.tif 000008