(57)【要約】  機能に関連付けられるパーミッションを解釈するための装置及び方法が提供される。装置は、動作を実施するために命令を実行するための処理回路と、処理回路からアクセス可能であり、命令を実行する際処理回路によって実施される少なくとも１つの動作を制約するために使用される機能を格納するように構成される機能格納要素とを有する。機能は、デフォルトの解釈にしたがって、状態が機能において提供されるＮ個のパーミッションフラグから決定される複数のＮ個のデフォルトのパーミッションを特定する。デフォルトの解釈にしたがって、それぞれのパーミッションフラグはデフォルトのパーミッションのうちの１つに関連付けられる。次にＮ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、処理回路は代替的な解釈にしたがって機能を分析するように構成され、拡大されたセットは少なくともＮ＋１個のパーミッションを含む。これは必要とされるパーミッションフラグの数を増やすことなく追加的なパーミッションを機能へとエンコードする一方で、所望の挙動はなお保持するためのメカニズムを提供する。【選択図】図１
2020521222.tif 000002
【特許請求の範囲】
【請求項１】
動作を実施するために命令を実行するための処理回路と、
前記処理回路からアクセス可能であり、前記命令を実行する際、前記処理回路によって実施される少なくとも１つの動作を制約するために使用される機能を格納するように構成された機能格納要素と
を備え、前記機能は、デフォルトの解釈にしたがって、状態が前記機能において提供されるＮ個のパーミッションフラグから決定される複数のＮ個のデフォルトのパーミッションを特定し、デフォルトの解釈にしたがってそれぞれのパーミッションフラグは前記デフォルトのパーミッションのうちの１つに関連付けられ、
前記Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、前記処理回路は代替的な解釈にしたがって前記機能を分析するように構成され、前記拡大されたセットは少なくともＮ＋１個のパーミッションを含む、装置。
【請求項２】
前記パーミッションの拡大されたセットは前記複数のＮ個のデフォルトのパーミッション及び少なくとも１つの追加的なパーミッションを含む、請求項１に記載の装置。
【請求項３】
パーミッションがセット状態を有する場合、前記処理回路はあらゆるオーバーライド制御情報にしたがって前記機能についての前記パーミッションを付与され、パーミッションがクリア状態を有する場合、前記処理回路は前記機能ついて前記パーミッションを無効とする、請求項１又は２に記載の装置。
【請求項４】
前記パーミッションの拡大されたセットは、クリア状態にある場合、前記機能が１つ又は複数の機能修正命令によって修正不可能であることを特定する、修正可能なパーミッションを含む、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
前記修正可能なパーミッションはセット状態にある場合、修正を妨げるあらゆるオーバーライド制御情報にしたがって、前記機能に与えられたＮ個のパーミッションフラグをセット値からクリア値へ遷移させることができる、請求項４に記載の装置。
【請求項６】
前記複数のＮ個のデフォルトのパーミッションは、
クリア状態にある場合前記機能がメモリ内のデータにアクセスするような１つ又は複数のメモリアクセス動作によって使用されることを妨げられていることを特定するための１つ又は複数のメモリアクセスパーミッションと、
クリア状態にある場合プログラムカウンタ機能を形成する際前記機能が前記メモリから命令をフェッチするために使用されることを妨げられていることを特定するための実行可能パーミッションと
を含む、請求項１から５までのいずれか一項に記載の装置。
【請求項７】
前記１つ又は複数のメモリアクセスパーミッションは、前記機能が前記メモリへの書き込み動作の少なくとも１つのタイプを実施するために使用されることを妨げられているかどうかを特定するための少なくとも１つの書き込みパーミッション、及び前記機能が前記メモリからの読み出し動作の少なくとも１つのタイプを実施するために使用されることを妨げられているかどうかを特定するための少なくとも１つの読み出しパーミッションを含む、請求項６に記載の装置。
【請求項８】
前記複数のデフォルトのパーミッションは、クリア状態にある場合前記機能がプログラムカウンタ機能として使用される場合前記メモリから命令をフェッチするために使用されることを妨げられていることを特定するための実行可能パーミッションを含み、
前記Ｎ個のパーミッションフラグの前記代替的な解釈にしたがって、前記機能は前記実行可能パーミッション及び前記修正可能なパーミッションの両方をセット状態にすることを妨げられている、請求項４に従属する場合の請求項５から７までのいずれか一項に記載の装置。
【請求項９】
前記複数のデフォルトのパーミッションは、前記機能が前記メモリへの書き込み動作の少なくとも１つのタイプを実施するために使用されることを妨げられているかどうかを特定するための少なくとも１つの書き込みパーミッションと、前記機能が前記メモリからの読み出し動作の少なくとも１つのタイプを実施するために使用されることを妨げられているかどうかを特定するための少なくとも１つの読み出しパーミッションとをさらに含み、
前記Ｎ個のパーミッションフラグは少なくとも１つの書き込みビット、少なくとも１つの読み出しビット、並びに前記デフォルトの解釈にしたがって、値が前記少なくとも１つの書き込みパーミッション、前記少なくとも１つの読み出しパーミッション、及び前記実行パーミッションの前記状態をそれぞれ特定する実行ビットを含み、
前記代替的な解釈にしたがって前記処理回路は少なくとも１つの書き込みビットがセットされているか、又は前記実行ビットがクリアされている場合、前記修正可能なパーミッションがセット状態にあると決定するように構成される、
請求項８に記載の装置。
【請求項１０】
前記代替的な解釈にしたがって前記処理回路は、前記実行ビットがセットされており前記少なくとも１つの書き込みビットのすべてがクリアである両方の場合、前記実行可能パーミッションがセット状態にあると決定するように構成される、請求項９に記載の装置。
【請求項１１】
それぞれの読み出しパーミッションについて、前記代替的な解釈によると、前記処理回路は前記関連付けられる読み出しビットがセットされている場合前記読み出しパーミッションが前記セット状態にあること、及び、前記修正可能なパーミッションが前記セット状態にあること又は前記機能がプログラムカウンタ機能として使用されていることのいずれかであることを決定するように構成される、
請求項９又は１０に記載の装置。
【請求項１２】
プログラムカウンタ機能から結果機能を生成するためにアドレス生成命令を実行することに応じて、前記処理回路は前記結果機能内で前記実行ビットをクリアするように構成される、
請求項９から１１までのいずれか一項に記載の装置。
【請求項１３】
前記プログラムカウンタ機能が前記実行ビットをセットさせる及び前記少なくとも１つの書き込みビットのすべてをクリアさせる場合、前記結果機能の前記実行ビットをクリアすることによって前記結果機能は、前記代替的な解釈にしたがって前記セット状態にある前記修正可能なパーミッション及び前記関連付けられる読み出しビットによって示される前記状態にあるそれぞれの読み出しパーミッションの両方を有すると考えられる、請求項１２に記載の装置。
【請求項１４】
プログラムカウンタ機能内で前記修正可能なパーミッションが前記クリア状態にある場合、リターンアドレス機能がやはり前記クリア状態にある前記修正可能なパーミッションを有するように、前記処理回路は前記プログラムカウンタ機能から前記リターンアドレス機能を生成するためにリンク命令を伴う分岐を実行することに応答的である、
請求項９から１３までのいずれか一項に記載の装置。
【請求項１５】
前記機能格納要素と組み合わせて１つ又は複数の汎用機能格納要素を形成する、少なくとも１つの追加的な機能格納要素と、プログラムカウンタ機能格納要素と
をさらに備え、
前記１つ又は複数の汎用機能格納要素のうちの１つに格納される前記機能が前記実行ビットをセットし、前記読み出しビットのうち少なくとも１つをセットし、及び前記少なくとも１つの書き込みビットのすべてをクリアする場合、前記処理回路は前記代替的な解釈にしたがって、前記プログラムカウンタ機能格納要素に格納されることになる新しいプログラムカウンタ機能を形成するために前記機能だけを使用するよう制約され、
前記機能が前記プログラムカウンタ機能格納要素に格納されると、前記代替的な解釈にしたがって前記新しいプログラムカウンタ機能はセット状態において、関連付けられる読み出しビットがセットされているそれぞれの読み出しパーミッションを有すると見なされ、それによって前記処理回路によりリテラル値がメモリから読み出されることを可能にする、
請求項９から１４までのいずれか一項に記載の装置。
【請求項１６】
前記処理回路によって、前記デフォルトの解釈及び前記代替的な解釈のどちらが適用されるかを示す設定値を格納するための、設定記憶要素
をさらに備える、請求項１から１５までのいずれか一項に記載の装置。
【請求項１７】
前記機能が結合ポインタであり、前記パーミッションが前記処理回路による前記機能内で指定されたポインタ値の使用を制御するために使用される、請求項１から１６までのいずれか一項に記載の装置。
【請求項１８】
装置において機能に関連付けられるパーミッションを解釈するための方法であって、前記装置は動作を実施するために命令を実行するための処理回路と、前記処理回路からアクセス可能であり、前記命令を実行する際、前記処理回路によって実施される少なくとも１つの動作を制約することにおける使用のための前記機能を格納するように構成された機能格納要素とを備え、前記機能は複数のＮ個のデフォルトのパーミッションを特定し、前記方法は、
デフォルトの解釈にしたがって、前記デフォルトのパーミッションの状態が前記Ｎ個のパーミッションフラグから決定されるように、またそれぞれのパーミッションフラグが前記デフォルトのパーミッションのうちの１つに関連付けられるように、前記機能内でＮ個のパーミッションフラグを提供するステップと、
前記Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、代替的な解釈にしたがって前記機能を分析するステップであって、前記拡大されたセットは少なくともＮ＋１個のパーミッションを含む、分析するステップと
を含む、方法。
【請求項１９】
動作を実施するために命令を実行するための処理手段と、
処理回路によるアクセスのための、及び前記命令を実行する際、前記処理手段によって実施される少なくとも１つの動作を制約するために使用される機能を格納するための機能格納要素手段と
を備え、前記機能は、デフォルトの解釈にしたがって、状態が前記機能において提供されるＮ個のパーミッションフラグから決定される複数のＮ個のデフォルトのパーミッションを特定し、前記デフォルトの解釈にしたがってそれぞれのパーミッションフラグは前記デフォルトのパーミッションのうちの１つに関連付けられ、
前記Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、前記処理手段は代替的な解釈にしたがって前記機能を分析し、前記拡大されたセットは少なくともＮ＋１個のパーミッションを含む、装置。
【請求項２０】
請求項１から１７までのいずれか一項に記載の装置に対応する命令実行環境を提供するためのホストデータ処理装置を制御するためのプログラム命令を含む、仮想マシンコンピュータプログラム。
【請求項２１】
請求項２０に記載の前記仮想マシンコンピュータプログラムを記憶するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術はデータ処理の分野に関する。
【背景技術】
【０００２】
所与の処理についてある機能が定義され、定義された機能以外の動作を実行するような試行があるとエラーをトリガすることができる機能ベースのアーキテクチャに対する興味が高まっている。機能は様々な形態を取ることができるが、機能の一タイプは結合ポインタ（「ファットポインタ」とも称され得る）である。
【０００３】
複数の機能格納要素（例えば、レジスタ）が、データ処理装置の処理回路によるアクセスのための機能を格納するために提供され得る。それぞれの機能は、例えば処理回路の特定のタイプの動作、特定のモードの動作などへの機能の使用を制限するために、機能に関連付けられる１つ又は複数のパーミッションを特定する複数のパーミッションフラグ、を含むことができる。例えば、そのような機能格納要素内の結合ポインタを考えると、このことは、関連付けられるパーミッションを特定する１つ又は複数のパーミッションフラグとともに、処理回路によってアクセス可能なメモリアドレスの非拡張可能な範囲を特定することができる。処理回路は、処理回路に利用可能なあらゆる特定の結合ポインタに関連付けられる範囲を減らす及び／又はパーミッションフラグをクリアするための手順を実行することが許可され得る一方、通常の動作ではその結合ポインタによって処理回路に与えられる機能を増やそうとするべく範囲を拡張すること、又はパーミッションフラグをセットすることはできない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
機能に関連付けられるパーミッションの数は拡張できるようにするが、機能をエンコードするために使用されるビットの数は、例えば機能が格納される機能格納要素のサイズによって、典型的には制約されることが望ましいであろう。
【課題を解決するための手段】
【０００５】
第１の実例の構成において、動作を実施するために命令を実行するための処理回路と、処理回路からアクセス可能であり、前記命令を実行する際、処理回路によって実施される少なくとも１つの動作を制約するために使用される機能を格納するように構成された機能格納要素とを備え、前記機能は、デフォルトの解釈にしたがって、状態が前記機能において提供されるＮ個のパーミッションフラグから決定される複数のＮ個のデフォルトのパーミッションを特定し、デフォルトの解釈にしたがってそれぞれのパーミッションフラグはデフォルトのパーミッションのうちの１つに関連付けられ、Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、処理回路は代替的な解釈にしたがって機能を分析するように構成され、拡大されたセットは少なくともＮ＋１個のパーミッションを含む、装置が提供される。
【０００６】
別の実例の構成において、装置において機能に関連付けられるパーミッションを解釈するための方法であって、装置は動作を実施するために命令を実行するための処理回路と、処理回路からアクセス可能であり、前記命令を実行する際、処理回路によって実施される少なくとも１つの動作を制約することにおける使用のための機能を格納するように構成された機能格納要素とを備え、機能は複数のＮ個のデフォルトのパーミッションを特定し、方法は、デフォルトの解釈にしたがって、デフォルトのパーミッションの状態が前記Ｎ個のパーミッションフラグから決定されるように、またそれぞれのパーミッションフラグがデフォルトのパーミッションのうちの１つに関連付けられるように、前記機能内でＮ個のパーミッションフラグを提供するステップと、Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、代替的な解釈にしたがって機能を分析するステップであって、拡大されたセットは少なくともＮ＋１個のパーミッションを含む、分析するステップとを含む、方法が提供される。
【０００７】
なおさらなる実例の構成において、動作を実施するために命令を実行するための処理手段と、処理回路によるアクセスのための、及び前記命令を実行する際、処理手段によって実施される少なくとも１つの動作を制約するために使用される機能を格納するための機能格納要素手段とを備え、前記機能は、デフォルトの解釈にしたがって、状態が前記機能において提供されるＮ個のパーミッションフラグから決定される複数のＮ個のデフォルトのパーミッションを特定し、前記デフォルトの解釈にしたがってそれぞれのパーミッションフラグは前記デフォルトのパーミッションのうちの１つに関連付けられ、Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、処理手段は代替的な解釈にしたがって機能を分析し、拡大されたセットは少なくともＮ＋１個のパーミッションを含む、装置が提供される。
【０００８】
なおさらなる実例の構成において、上で論じた第１の実例の構成の装置に対応する命令実行環境を提供するためのホストのデータ処理装置を制御するためのプログラム命令を含む、仮想マシンコンピュータプログラムが提供される。一実施例おいて、コンピュータ可読記憶媒体は仮想マシンコンピュータプログラムを格納するために提供されてもよい。
【０００９】
本技術は、その実施例を参照して添付の図面に図示されるように、単に実例としてさらに説明される。
【図面の簡単な説明】
【００１０】
【図１】一実施例による装置のブロック図である。
【図２】関連付けられる範囲情報によって示される範囲の外のアドレスを指定するためにポインタ値が使用される結合ポインタ格納要素のセット内で、そのポインタ値のセット又はポインタ値へのアクセスが試行される場合、エラーがトリガされ得るタイプの命令の実例の図である。
【図３】一実施例による、結合ポインタに関連付けられるタグビットの使用を示す図である。
【図４】一実施例による結合ポインタ機能内で提供され得るパーミッションビットを、それらのパーミッションビットのデフォルトの解釈とともに示す図である。
【図５】デフォルトの解釈が使用されているかどうか、又は代替的な解釈が使用されているかどうかに応じて、修正可能なパーミッションの状態をパーミッションビットからどのように決定し得るかを示すフロー図である。
【図６】デフォルトの解釈が使用されているかどうか、又は代替的な解釈が使用されているかどうかに応じて、実行可能パーミッションの状態をパーミッションビットからどのように決定し得るかを示すフロー図である。
【図７】デフォルトの解釈が使用されているかどうか、又は代替的な解釈が使用されているかどうかに応じて、特定の読み出しパーミッションの状態をパーミッションビットからどのように決定し得るかを示すフロー図である。
【図８】デフォルトの解釈が使用されているかどうか、又は代替的な解釈が使用されているかどうかに応じて、特定の書き込みパーミッションの状態をパーミッションビットからどのように決定し得るかを示すフロー図である。
【図９】機能内に格納される実行、読み出し、及び書き込みパーミッションビットから決定される、一実施例における代替的な解釈にしたがって、パーミッションの拡大されたセットの状態を概略的に示す表である。
【図１０】一実施例において、読み出し、書き込み、及び実行パーミッションビットの状態にある許可される遷移を示す状態遷移図である。
【図１１】一実施例によるアドレス生成命令を実行する際実施される動作を概略的に示す図である。
【図１２】一実施例によるリンク命令を伴う分岐の動作を概略的に示す図である。
【図１３】一実施例による分岐命令の実行を概略的に示す図である。
【図１４】使用され得る仮想マシンの実装形態を示す図である。
【発明を実施するための形態】
【００１１】
添付の図面を参照して実施例を議論する前に、以下に実施例の説明を与える。
【００１２】
先に言及したように、所与の処理についてある機能が定義され、定義された機能以外の動作を実行するよう試行されるとエラーをトリガすることができる機能ベースのアーキテクチャに対する興味が高まっている。様々なタイプの機能が定義され得るが、機能の一タイプは結合ポインタ（一実施例においてポインタ値、並びに関連付けられる範囲及びパーミッション情報の両方を組み込む）である。
【００１３】
そのような機能ベースアーキテクチャに適合する装置は、典型的には機能を格納するために使用される格納要素（本明細書では結合ポインタ格納要素、又はより一般的に機能格納要素とも称する）を有する。格納要素はレジスタ（本明細書では結合ポインタレジスタ、又は機能レジスタとも称する）であってもよく、及び／又は汎用メモリにおけるメモリ位置、例えば、スタックメモリ上の位置であってもよい。所望の機能にアクセスし、その機能に応じた動作を実施するべく、そのような格納要素を参照するためにある命令が使用され得る。例えば、結合ポインタを考えると、そのような命令の実行により、結合ポインタが検索され、次いでその中のポインタ値について、命令の実行の間に要求されるメモリ内のアドレスを導出するために使用されることを可能にする。ポインタ値はメモリアドレスを特定するために直接使用することができ、又は例えばポインタ値へのオフセットの加算によってメモリアドレスを導出するために使用することができる。次いで、メモリアドレスが範囲情報によって指定される範囲内にあり、またパーミッション情報で指定されるあらゆるパーミッションが満たされていれば、動作は進むことができるようになる。
【００１４】
したがって、結合ポインタを使用する際、ポインタ値自身は、例えば、アクセスされるデータ値若しくは実行のためにフェッチされる命令のアドレスを指し示すことができる、又はそのようなアドレスを決定するために使用することができる。しかしながら、次に例えば、アクセスされるあらゆるアドレスが許容範囲内であり、許可された目的のためにアクセスされることを保証するために、範囲及びパーミッション情報が参照され得る。これは、例えば、ポインタから決定されたアドレスがある境界内に留まり、挙動についてのセキュリティ又は機能的な正常性を維持することを保証するために有用であり得る。そのような手法によって、処理回路によってなされるメモリアクセスを効果的に取り締まることが可能である。
【００１５】
典型的な実装形態において、それぞれのパーミッションの状態は機能内の関連付けられるパーミッションフラグによって示され得、この時対応するパーミッションの状態を特定するためにフラグはセット状態又はクリア状態にある。パーミッションフラグがクリアである時、これは典型的には関連付けられるパーミッションがクリア状態にあることを意味しており、また処理回路がそのパーミッションを対象の機能について無効にすることを示している。逆に、パーミッションフラグがセットされている時、これは関連付けられるパーミッションがセット状態を有することを意味すること、ひいては処理回路が機能についてのそのパーミッションが付与され得ることを意味することができる。しかしながら、一実施例において、処理回路が実際にそのパーミッションを付与されているかどうかを判断する前に他の制御情報を参照することがなお必要であり得、ひいては関連付けられるパーミッションフラグによって特定されるパーミッションについてのセット状態を、あらゆるオーバーライド制御情報にしたがって処理回路が対象の機能についてそのパーミッションを付与されていることを示すために使用することができる。
【００１６】
個々の機能についてより多くの数のパーミッションを指定できるようにすることが望ましいであろうし、そのためある手法により機能の使用において向上した柔軟性が可能となるであろう。しかしながら、空間をエンコードする機能は典型的には非常に制約されている。例えば、結合ポインタの実例を考えると、結合ポインタ機能はまたポインタ値及び関連付けられる範囲を示す情報を指定することができる必要があり、したがってパーミッションフラグの指定のために残されるビット数は、機能にさらなるパーミッションフラグを単に追加し続けることが可能ではないことを意味し得る。
【００１７】
本明細書で説明される実施例は、そのような状況において機能に関連付けられるパーミッションの数を拡張できるようにする効率的なメカニズムを提供する。
【００１８】
特に、一実施例において、動作を実施するために命令を実行するための処理回路と、処理回路からアクセス可能であり、命令を実行する際処理回路によって実施される少なくとも１つの動作を制約するために使用される機能を格納するように構成される機能格納要素とを有する装置が提供される。機能は、デフォルトの解釈にしたがって、状態が機能において提供されるＮ個のパーミッションフラグから決定される複数のＮ個のデフォルトのパーミッションを特定することができる。デフォルトの解釈にしたがって、それぞれのパーミッションフラグはデフォルトのパーミッションのうちの１つに関連付けられてもよい。そのため、パーミッションフラグとデフォルトのパーミッションとの間に１：１の対応関係があってもよい。
【００１９】
しかしながら、説明される実施例によると、Ｎ個のパーミッションフラグの論理組み合わせからパーミッションの拡大されたセットの状態を導出するために、処理回路は代替的な解釈にしたがって機能を分析するように構成され、拡大されたセットは少なくともＮ＋１個のパーミッションを含む。
【００２０】
そのような手法によって、機能に関連付けられるパーミッションの数を、パーミッションフラグの数を増やすことなく、拡張することが可能である。さらには、同一のパーミッションフラグがデフォルトの解釈及び代替的な解釈の両方をサポートするように使用することができるため、手法は非常に柔軟なメカニズムを提供する。したがってその機能について、デフォルトの解釈及び代替的な解釈の両方をサポートするシステム内で使用することができるだけでなく、それらの解釈のうちの１つだけをサポートするシステムにおいても使用することができる。例えばこのことは、デフォルトの解釈だけをサポートする処理回路の事例でも機能を使用させることによって、後方互換性を与えることができる。
【００２１】
パーミッションの拡大されたセットは様々な形態を取ることができるが、一実施例において、複数のＮ個のデフォルトのパーミッション、及び少なくとも１つの追加的なパーミッションを含む。したがって、これによりＮ個のパーミッションフラグの代替的な解釈の使用を通じて、機能について少なくとも１つの「新しい」パーミッションが推論される。「新しい」パーミッションは機能ベースのアーキテクチャ内で以前に与えられたものではないパーミッションであり得るか、又は個々の機能についてセット若しくはクリアされ得るパーミッションではなく、よりグローバルなスケールで以前に与えられただけのパーミッションであり得る。
【００２２】
一実施例において、パーミッションの拡大されたセットは、クリア状態にある場合、機能が１つ又は複数の機能修正命令によって修正不可能であることを特定する、修正可能なパーミッションを含む。そのような手法によって、個々の機能を修正不可能であるとしてマークすることができ、それによって特定の状況において向上したセキュリティを与えることができる。
【００２３】
一実施例において、修正可能なパーミッションはセット状態にある場合、修正を妨げるあらゆるオーバーライド制御情報にしたがって、機能に与えられたＮ個のパーミッションフラグをセット値からクリア値へ遷移させることができる。いくつかの事例において、オーバーライド制御情報がない場合があり、したがってセット状態にある場合、修正可能なパーミッションはパーミッションフラグがセット値からクリア値に遷移できることを直接示す。しかしながら、他の実施例において、セット状態にある修正可能なパーミッションが本当にパーミッションフラグを選択的にクリアさせるかを確認できる前に、参照される必要がある追加の制御情報があってもよい。
【００２４】
機能に関する一般的な実践と一貫して、機能によってアクティビティが制約される処理は、修正可能なパーミッションがセット状態にある場合でもクリアされたパーミッションフラグをセット値に復元するやり方で機能を修正することはできない。この理由のため、修正可能なパーミッションがセット状態にある場合、これによってパーミッションフラグをセット値からクリア値に遷移させることができるが、クリアであるパーミッションフラグをセット値に変更することはできない。
【００２５】
パーミッションフラグの値を変える能力を参照して修正可能なパーミッションをセットすることについて説明してきたが、修正可能なパーミッションは機能内の他のフィールドに影響することがある。例えば、機能が修正されることを妨げる他のメカニズムにしたがって、修正可能なパーミッションがセット状態にある場合、機能は一般的な機能修正命令によって修正することができ、これによって例えばパーミッションフラグをクリアすること、結合を減らすこと、及び／又はポインタ値のアドレスを変更することができ、この事例においては機能が結合ポインタであると仮定している。
【００２６】
デフォルトのパーミッションは様々な形態を取ることができるが、一実施例において、クリア状態にある場合機能がメモリ内のデータにアクセスするような１つ又は複数のメモリアクセス動作によって使用されることを妨げられていることを特定するための１つ又は複数のメモリアクセスパーミッションと、及びクリア状態にある場合プログラムカウンタ機能を形成する際機能がメモリから命令をフェッチするために使用されることを妨げられていることを特定するための実行可能パーミッションとを含む。したがってこれらのデフォルトのパーミッションを使用してメモリアドレス空間にアクセスしようとする動作を制約することができる。
【００２７】
１つ又は複数のメモリアクセスパーミッションは様々な形態を取ることができるが、一実施例において、機能がメモリへの書き込み動作の少なくとも１つのタイプを実施するために使用されることを妨げられているかどうかを特定するための少なくとも１つの書き込みパーミッション、及び機能がメモリからの読み出し動作の少なくとも１つのタイプを実施するために使用されることを妨げられているかどうかを特定するための少なくとも１つの読み出しパーミッションを含む。したがって、読み出し及び書き込み動作について別個のパーミッションが提供され得、実際複数の書き込みパーミッション及び／又は複数の読み出しパーミッションを指定することができる。複数のパーミッションの使用は、例えば書き込み又は読み出し動作が、あるタイプの命令を実行する時は実施され得るがそれ以外では実施され得ないこと、処理回路が一部のモードで動作している時は実施され得るがそれ以外では実施され得ないことを特定するために使用することができ、及び／又は読み出し若しくは書き込みの可用性が、読み出されるか若しくは書き込まれる情報に依存することを指定することができる。例えば、別個の読み出し及び書き込みパーミッションは、読み出されるか若しくは書き込まれる情報それ自身が機能である状況、又は代わりに標準的なデータ値である状況について指定することができる。
【００２８】
デフォルトのパーミッションが実行可能パーミッションを含む実施例において、パーミッションの拡大されたセットは少なくとも先に説明した修正可能なパーミッションの追加を含み、その時Ｎ個のパーミッションフラグの代替的な解釈にしたがって機能は実行可能パーミッション及び修正可能なパーミッションの両方を同時にセット状態にすることを妨げられることがある。代わりに、パーミッションフラグの値のある遷移によって、実行可能パーミッションをセット状態からクリア状態に遷移させることができる一方、修正可能なパーミッションがクリア状態からセット状態に変わり、その逆もあり得る。
【００２９】
一実施例において、Ｎ個のパーミッションフラグは少なくとも１つの書き込みビット、少なくとも１つの読み出しビット、並びにデフォルトの解釈にしたがって、値が少なくとも１つの書き込みパーミッション、少なくとも１つの読み出しパーミッション、及び実行パーミッションの状態をそれぞれ特定する実行ビットを含む。そのような一実施例において、代替的な解釈にしたがって処理回路は、少なくとも１つの書き込みビットがセットされている場合、又は実行ビットがクリアである場合、修正可能なパーミッションがセット状態にあると決定するように構成される。このことは修正可能なパーミッションがいつ特定の機能についてセット状態にあるかを指定できることについてかなりの柔軟性を与える。
【００３０】
デフォルトの解釈にしたがって、それぞれのパーミッションフラグと関連付けられるデフォルトのパーミッションとの間に典型的には１：１の対応関係がある一方、一実施例において、代替的な解釈にしたがってパーミッションフラグを解釈する際これはあてはまらない。代わりに、代替的な解釈が使用される際はパーミッションフラグの論理組み合わせを使用してデフォルトのパーミッションのうちの少なくとも１つの状態を決定する。
【００３１】
例えば、一実施例において、代替的な解釈にしたがって処理回路は、実行ビットがセットされており少なくとも１つの書き込みビットのすべてがクリアである両方の場合、実行可能パーミッションがセット状態にあることを決定するように構成される。したがって代替的な解釈によると、実行可能パーミッションがセット状態にあることを決定するために実行ビットを単にセットするだけでは十分ではなく、代わりに機能内に与えられるあらゆる書き込みビットもクリアであることがやはり必要である。機能にメモリの同一エリアについて書き込みパーミッションをセットすること、及び実行可能パーミッションをセットすることの両方を許可することは一般的には望ましくないと考えられるため、このことは利用可能なＮ個のパーミッションフラグ内でエンコードされるパーミッションの拡大されたセットを可能にする特定の効率的なエンコードを提供し、提案されたエンコードにしたがうとこの選択肢は妨げられる。
【００３２】
一実施例において代替的な解釈を使用する場合、読み出しパーミッションはまた関連付けられる読み出しビットだけではなく、追加的な情報を使用して解釈される。特に、それぞれの読み出しパーミッションについて、代替的な解釈によると、処理回路は関連付けられる読み出しビットがセットされている場合その読み出しパーミッションがセット状態にあること、及び、修正可能なパーミッションがセット状態にあること又は機能がプログラムカウンタ機能として使用されていることのいずれかであることを決定するように構成することができる。したがって、一般的に代替的な解釈によるとあらゆる読み出しパーミッションが付与されるために修正可能なパーミッションがセット状態にあることが必要である。しかしながら、機能が非修正可能な特定の一実例、特に機能がプログラムカウンタ機能として使用されている特定の一実例においては選択的な読み出し可能性が与えられてもよい。その実例において、機能は実行可能且つ非修正可能であるとしてマークすることができるが、機能がプログラムカウンタ機能にある間、特定の状況において関連付けられる読み出しビットに応じて、なお読み出し可能とすることができる。
【００３３】
デフォルトの解釈及び代替的な解釈の両方において、パーミッションフラグの状態を遷移させることによってパーミッションに変化がもたらされる。先に言及したように、機能を変更するためのパーミッションが処理に与えられる場合、一般的には機能の制約を緩和するやり方ではなく追加的な制約を推論するやり方でそれを変更することしかできない。パーミッションに関して、このことは一般的には処理がパーミッションフラグをセットするのではなくクリアすることしかできないことを意味しており、したがって、パーミッションフラグのうちの１つ又は複数をクリアすることを通じてパーミッションの遷移が起こる。様々なパーミッションの状態を決定するために代替的な解釈にしたがってパーミッションフラグの論理組み合わせが使用されるため、１つ又は複数のパーミッションフラグをクリアすることによってパーミッションのうちの少なくとも１つをセット状態へ移すことが可能である。例えば、実行フラグをクリアすることによって修正可能なパーミッションをセット状態に移すことができる。
【００３４】
あるパーミッションフラグの値における遷移が、やはりある命令の処理に関連付けられることができる。例えば、一実施例において、プログラムカウンタ機能から結果機能を生成するためにアドレス生成命令を実行することに応じて、処理回路は結果機能内で実行ビットをクリアするように構成することができる。これによって実践において非常に有用であり得るいくつかの興味深い挙動の変化をもたらすことができる。例えば、プログラムカウンタ機能として使用されている間、実行可能であるが非修正可能である機能は、その後修正可能である汎用機能レジスタに格納される結果機能を生成するために使用され得ることを意味し得る。例えば１つ又は複数の読み出しパーミッションビットに応じて、次いで読み出し可能であることもできる。特に、一実施例において、プログラムカウンタ機能が実行ビット及び少なくとも１つの書き込みビットのすべてをクリアさせる場合、結果機能の実行ビットをクリアすることによって結果機能は、代替的な解釈にしたがって、セット状態にあるその修正可能なパーミッション及び関連付けられる読み出しビットによって示される状態にあるそれぞれの読み出しパーミッションの両方を有すると考えられる。
【００３５】
１つ又は複数の特定のタイプの命令を実行する際パーミッションがどのように管理され得るかの別の実例として、プログラムカウンタ機能内で修正可能なパーミッションがクリア状態にある場合、リターンアドレス機能がやはりクリア状態にあるその修正可能なパーミッションを有するように、処理回路はプログラムカウンタ機能からリターンアドレス機能を生成するためにリンク命令を伴う分岐を実行することに応答的であり得る。そのような手法によって、非修正可能なリターンアドレス機能を作成することが可能であり、それによって向上したセキュリティを与えることができる。
【００３６】
一実施例において、装置は１つ又は複数の汎用機能格納要素及びプログラムカウンタ機能格納要素を有することができる。そのような一実施例において、前記１つ又は複数の汎用機能格納要素のうちの１つに格納される機能が実行ビットをセットし、読み出しビットのうちの少なくとも１つをセットし、及び少なくとも１つの書き込みビットのすべてをクリアする場合、処理回路は代替的な解釈にしたがって、プログラムカウンタ機能格納要素に格納されることになる新しいプログラムカウンタ機能を形成するために前記機能だけを使用するよう制約される。しかしながら、前記機能がプログラムカウンタ機能格納要素に格納されると、代替的な解釈にしたがって新しいプログラムカウンタ機能はセット状態において、関連付けられる読み出しビットがセットされているそれぞれの読み出しパーミッションを有すると見なされ、それによって処理回路によりリテラル値がメモリから読み出されることを可能にする。したがって、タスクに後々分岐命令を実行する際分岐するために使用することだけができる機能を割り当てることができ、ひいては機能は別のルーチンへのエントリポイントとして使用することだけができる。しかしながら、分岐が起こり、その機能がプログラムカウンタ機能にロードされると、次いでその他のルーチンは、例えばリテラル値を、例えばプログラムカウンタ機能を参照してアドレスを生成するロード命令を使用してメモリから読み出すことを可能にすることによって、その機能を他のことに利用することができる。
【００３７】
一実施例において、処理回路はいつも代替的な解釈を使用するよう構成することができる。しかしながら、さらなる実施例において、デフォルトの解釈と代替的な解釈とのどちらが処理回路によって適用されるかを示すために使用される設定値を格納する設定記憶要素が提供されてもよい。したがって、このことが時間の経過とともに所望のようにデフォルトの解釈と代替的な解釈と間でスイッチングすることを可能とするメカニズムを与える。
【００３８】
上述のパーミッションは装置によって使用される様々な異なるタイプの機能に関連付けられ得るが、一実施例において、機能は結合ポインタであり、パーミッションは機能内で指定されるポインタ値の処理回路による使用を制御するために使用される。
【００３９】
次に、図面を参照して特定の実施例を説明する。
【００４０】
図１は処理命令のための処理パイプライン４を備えるデータ処理装置２の実例を概略的に図示している。この実例において、処理パイプライン４は、フェッチ工程６、デコード工程８、発行工程１０、実行工程１２、及びライトバック工程１４を含む複数のパイプライン工程を含むが、工程の他のタイプ又は工程の組み合わせが提供されてもよいことを了解されたい。例えば、いくつかの実施例ではレジスタのリネームを実施するためのリネーム工程を含むことができる。処理されることになる命令が工程から工程へと移動し、命令がある工程で待ち状態にある間、別の命令はパイプライン４の異なる工程で待ち状態にあってもよい。
【００４１】
フェッチ工程６はレベル１（Ｌ１：Ｌｅｖｅｌ  １）の命令キャッシュ２０から命令をフェッチする。フェッチ工程６は普通、連続する命令アドレスから逐次に命令をフェッチすることができる。しかしながら、フェッチ工程はまた分岐命令の結果を予測するための分岐予測器２２を有することがあり、フェッチ工程６は、分岐すると予測される場合は（非逐次の）分岐ターゲットアドレスから、又は分岐しないと予測される場合は次の連続するアドレスから、命令をフェッチすることができる。分岐予測器２２は、ある分岐が取られそうか、又は取られそうにないかを予測するための情報を格納するための１つ又は複数の分岐履歴テーブルを含むことができる。例えば分岐履歴テーブルは、前に実行された分岐の実際の結果を追跡するための、又は分岐についてなされた予測についての信頼度を表すカウンタを含むことができる。分岐予測器２２はまた分岐命令の前のターゲットアドレスをキャッシュするための分岐ターゲットアドレスキャッシュ（ＢＴＡＣ：Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ａｄｄｒｅｓｓ  Ｃａｃｈｅ）２４を含むこともでき、それによって後に同一の分岐命令と遭遇した際、これらが予測され得る。
【００４２】
フェッチされた命令は命令をデコードしてデコード命令を生成するためのデコード工程８に渡される。デコード命令は適当な処理演算を実行するために実行工程１２を制御するための制御情報を含むことができる。キャッシュ２０からフェッチされたいくつかのより複雑な命令について、デコード工程８はこれらの命令を複数のデコード命令にマッピングすることができ、これはマイクロ命令（μｏｐ又はｕｏｐ）として知られ得る。したがって、Ｌ１の命令キャッシュ２０からフェッチされた命令とパイプラインの後方の工程で見られる命令との間には１対１関係がなくてもよい。一般的には、本出願における「命令」との称し方はマイクロ命令を含むものとして解釈するべきである。
【００４３】
デコード命令は発行工程１０に渡され、発行工程１０は命令の実行に必要なオペランドが利用可能かどうかを判断し、オペランドが利用可能であれば実行のため命令を発行する。いくつかの実施例はインオーダー処理をサポートしていることがあり、それによって、命令がＬ１の命令キャッシュ２０からフェッチされたプログラム順序に対応する順序での実行のために、命令が発行される。他の実施例はアウトオブオーダー実行をサポートしていることがあり、それによって命令は、プログラムの順序とは異なる順序で実行工程１２に発行され得る。前方の命令がオペランドを待ってストールしている間、オペランドが利用可能であるプログラムの順序において後方の命令を先に実行できるため、アウトオブオーダー処理はパフォーマンスを改善するために有用であり得る。
【００４４】
発行工程１０は命令を実行工程１２に発行し、実行工程１２において命令は様々なデータ処理演算を実行するために、実行される。例えば、実行工程は、整数値に対して算術又は論理演算を実行するための算術／論理ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ／Ｌｏｇｉｃ  Ｕｎｉｔ）３０、浮動小数点形式で表現される値に対して演算を実行するための浮動小数点（ＦＰ：Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ）ユニット３２、及びレベル１（Ｌ１）のデータキャッシュ３６からのデータ値をレジスタ４０にロードするためのロード演算、又はレジスタ４０からのデータ値をＬ１のデータキャッシュ３６に格納するためのストア演算を実行するためロード／ストアユニット３４を含む複数の実行ユニット３０、３２、３４を含むことができる。これらは、提供され得る実行ユニットのいくつかの実例のタイプに過ぎず、多くの他の種類がやはり提供され得ることを了解されたい。処理演算を実行するために、実行工程１２はデータ値をレジスタ４０のセットから読み出すことができる。実行された命令の結果は次いでライトバック工程１４によってレジスタ４０に書き戻すことができる。
【００４５】
Ｌ１の命令キャッシュ２０及びＬ１のデータキャッシュ３６は、複数のレベルのキャッシュを含むキャッシュヒエラルキーの一部であってもよい。例えば、レベル２（Ｌ２：Ｌｅｖｅｌ  ２）のキャッシュ４４がやはり提供され得、任意選択でさらなるレベルのキャッシュが提供されてもよい。この実例において、Ｌ２のキャッシュ４４はＬ１の命令キャッシュ２０とＬ１のデータキャッシュ３６との間で共有されるが、他の実例では別個のＬ２の命令及びデータキャッシュを有することができる。フェッチされることになる命令がＬ１の命令キャッシュ２０にない場合、Ｌ２のキャッシュ４４からフェッチすることができ、同様に命令がＬ２のキャッシュ４４にない場合、メインメモリ５０からフェッチすることができる。同様に、ロード命令に応答して、データはＬ１のデータキャッシュ３６にない場合Ｌ２のキャッシュ４４からフェッチすることができ、必要に応じてメモリ５０からフェッチすることができる。あらゆる既知のスキームがキャッシュヒエラルキーを管理するために使用され得る。
【００４６】
プログラム命令及びデータ値を参照するためにパイプライン４によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメインメモリ５０、また任意選択でやはり少なくともキャッシュヒエラルキーのいくつかのレベルは、物理的にアドレッシングされ得る。したがってトランスレーション・ルックアサイド・バッファ（ＴＬＢ：Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）５２が、パイプライン４によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートするために与えられてもよい。例えば、ＴＬＢ５２はそれぞれが仮想アドレス空間の対応するページの仮想ページアドレスを指定する複数のエントリを含むことができ、仮想ページがアドレッシングする対応する物理ページアドレスは、対応するページ内の仮想アドレスを物理アドレスにトランスレートするためにマッピングされるべきである。例えば、仮想及び物理ページアドレスは対応する仮想及び物理アドレスの最上位部分に対応することができ、この時残りの最下位部分は仮想アドレスを物理アドレスにマッピングする際変更されないままである。アドレストランスレーション情報と同様に、それぞれのＴＬＢエントリはまた、アドレスのあるページがパイプライン４のあるモードでアクセス可能かどうかを示すことなどのアクセスパーミッションを指定するいくつかの情報を含むことができる。いくつかの実施例において、ＴＬＢエントリはまた、キャッシュヒエラルキーのどのレベルが読み出し若しくは書き込み動作に応じて更新されるかを定義するキャッシュポリシ情報（例えば、キャッシュがライトバック又はライトスルーモードで動作すべきであるかどうか）、又は対応するページ内のアドレスへのデータアクセスがメモリシステムによって、データアクセスがパイプライン４によって発行された順序と比べてリオーダすることができるかどうかを定義する情報、などのアドレスの対応するページの他のプロパティを定義することができる。
【００４７】
図１が単一のレベルのＴＬＢ５２を示す一方、ＴＬＢのヒエラルキーがレベル１（Ｌ１）のＴＬＢ５２が複数の最近アクセスされたページ内のアドレスをトランスレートするためのＴＬＢエントリを含み得るように提供され得、またレベル２（Ｌ２）のＴＬＢがより多くのページについてのエントリを格納するために提供され得ることを了解されたい。必要とされるエントリがＬ１のＴＬＢに存在しない場合、Ｌ２のＴＬＢから、又はヒエラルキー内のさらなるＴＬＢからフェッチすることができる。アクセスされることになるページについて必要とされるエントリがＴＬＢのうちいずれにもない場合、メモリ５０のページテーブルにアクセスするためにページテーブルウォークを実施することができる。本技術では、あらゆる既知のＴＬＢ管理スキームを使用することができる。
【００４８】
また、いくつかのシステムは複数のレベルのアドレストランスレーションをサポートすることができ、それによって、例えば、第１のＴＬＢ（又はＴＬＢのヒエラルキー）は仮想アドレスを中間アドレスにトランスレートするために使用することができ、また１つ又は複数のさらなるＴＬＢ（複数可）を使用するアドレストランスレーションの第２のレベルが、次いで中間アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートできることを了解されたい。これは例えば、第１のレベルのアドレストランスレーションがオペレーティングシステムによって管理され得、第２のレベルのアドレストランスレーションがハイパーバイザによって管理され得る場合の仮想化をサポートするために有用であり得る。
【００４９】
図１に示すように、装置２は結合ポインタレジスタ６０のセットを有することができる。結合ポインタレジスタのセットは図１において汎用データレジスタ４０のセットとは物理的に別個であるように示されるが、一実施例においては汎用データレジスタ及び結合ポインタレジスタの両方を提供するために同一の物理記憶装置が使用されてもよい。
【００５０】
それぞれの結合ポインタレジスタ６０は、アクセスされることになるデータ値のアドレスを決定するために使用され得るポインタ値６２、及び対応するポインタ６２を使用する際アドレスの許容範囲を指定する範囲情報６４を含む。結合ポインタレジスタ６０はまたポインタの使用に関して１つ又は複数のリストリクション／パーミッションを定義することができるリストリクション情報６６（本明細書ではパーミッション情報とも称する）を含むことができる。例えば、リストリクション６６は、ポインタ６２を使用し得る命令のタイプ、又はポインタが使用され得るパイプライン４のモードを制限するために使用することができる。したがって、範囲情報６４及びリストリクション情報６６は、ポインタ６２が使用されることを許可される機能を定義すると考えられ得る。定義された機能以外でポインタ６２を使用する試行がなされると、エラーがトリガされ得る。範囲情報６４は例えば、ポインタがある既知の境界内に留まっており、重要又はセキュアな情報を含み得るメモリアドレス空間の他のエリアに迷い込んでいないことを保証することのために有用であり得る。汎用データレジスタ及び結合ポインタレジスタの両方のために同一の物理記憶装置が使用される一実施例において、その時一実施例においてポインタ値６２は例えば対応する汎用レジスタについて使用されるのと同一の記憶装置位置に格納され得る。
【００５１】
図２は、許容範囲が、データ又は命令への認可されていないアクセスに対して保護するために使用されるタイプの命令の実例を示す。図２の上部で示すように、特定の結合ポインタレジスタＰＲ（Ｐｏｉｎｔｅｒ  Ｒｅｇｉｓｔｅｒ）１は所与のポインタ値６２及び範囲情報６４を含み、この実例においては許容範囲の下位境界を定義する下位境界アドレス６８、及び許容範囲の上位境界を定義する上位境界アドレス６９を使用して指定されている。例えば、境界６８、６９はアドレスの範囲８００００から８１０００を定義するために設定される。ある命令が結合ポインタレジスタＰＲ１を参照し、ポインタ６２から決定されるアドレスがこの範囲の外にある場合、エラーがトリガされ得る。
【００５２】
例えば、図２のパートＡで示されるように、いくつかのシステムではポインタレジスタ６０内のポインタ６２の値を範囲情報６４によって指定される範囲の外にある値に設定しようとする試行があるとエラーがトリガされ得る（ここではポインタがアドレスを直接指定すると仮定している）。これはポインタ６２が指定された範囲の外のあらゆる値を取ることを回避し、それによって、そのポインタを使用するあらゆるアクセスが許可された範囲内で安全に存在することを保証することができる。代替的に、図２のパートＢで示されるように、命令がポインタ６２のアドレスによって特定される位置にアクセスしようと試行すると、その時そのアドレスが指定された範囲の外にある場合、エラーがトリガされ得る。したがって、ポインタ６２を指定された範囲の外の値に設定することがなお許容され得るが、そのポインタアドレス（又はそのポインタから導出されるアドレス）においてデータアクセスが試行されると、その時そのアドレスが許可された範囲の外にある場合、エラーがトリガされ得る。図２のパートＡ及びＢに示される両方のタイプの命令に応じて、他のシステムがエラーをトリガすることもある。
【００５３】
範囲６４及びパーミッション６６情報は異なる方法で設定することができる。例えば、セキュアなコード、又はオペレーティングシステム若しくはハイパーバイザは、所与のポインタについて許可される範囲及びパーミッションを指定することができる。例えば、命令セットアーキテクチャは、所与のポインタ６２についての範囲情報６４及び／又はパーミッション６６を、設定するための又は修正するための複数の命令を含むことができ、これらの命令の実行はあるソフトウェア、又はプロセッサ４のあるモード若しくはある例外レベルに制限することができる。しかしながら、機能を修正するためのそのような特権ベースのメカニズムに加えて、又はその代替として、本明細書で説明される実施例において、修正可能なパーミッションを個々の機能について導出することができる。したがって、一実例の構成において、機能を修正するための能力は、その機能についての修正可能なパーミッションがセット状態にあるかどうか、又はその機能を修正しようとする処理が必要とされる特権を有しているかどうかに依存する。代替的に、機能を修正することを許可する前に、修正可能なパーミッションがセット状態にあり、且つその機能を修正しようとする処理が必要とされる特権を有していることの両方が要求されることもある。
【００５４】
ポインタへの参照を行うある命令を実行する際に実行状態１２で使用され得る結合ポインタ格納要素６０のセットに加えて、プログラムカウンタ機能（ＰＣＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ  Ｃａｐａｂｉｌｉｔｙ）レジスタ８０が、命令がレベル１の命令キャッシュ２０からフェッチされる際、フェッチ工程６で類似の機能性を提供するためにやはり使用されてもよい。特に、プログラムカウンタポインタはフィールド８２に格納され得、この時ＰＣＣ８０はまた、結合ポインタ格納要素６０のセット内のポインタのそれぞれに与えられる範囲及びリストリクション情報と同様に、範囲情報８４及び適当なリストリクション情報８６を与える。
【００５５】
結合ポインタレジスタ内の結合ポインタによって特定されるメモリアドレスのあらゆる特定の範囲は、データ、命令、及び／又は他の機能（すなわち、他の結合ポインタ）を含むことができる。したがって、時間的なあらゆるポイントにおいて、メモリへアクセスするための処理回路の能力は、結合ポインタレジスタにおいて特定される機能及びそれらの結合ポインタレジスタで保持される機能を介してアクセス可能なあらゆるさらなる機能を含む機能のセットによって定義され、本明細書においては機能のこのセットを機能ドメインと称することを了解されたい。
【００５６】
ＰＣＣレジスタ８０内で指定される範囲情報及びあらゆる関連付けられるリストリクションは様々な方法で設定することができる。しかしながら、一実施例において、その情報は現在の機能ドメインでその処理回路に利用可能な結合ポインタの１つ又は複数を使用して決定され、それによって、現在の機能ドメインについて特定されたメモリアドレス範囲（複数可）の外にあるＰＣＣベースの結合チェックを使用してアクセスできるメモリアドレスはない。
【００５７】
図３は、タグビットが個々のデータブロックに関連付けられて、これらのデータブロックが機能を表しているかどうか（すなわち、結合ポインタ及び関連付けられるリストリクション情報）、又は通常データを表しているかどうかを特定するためにどのように使用されるか概略的に図示している。特に、メモリアドレス空間１１０は、典型的には指定されたサイズを有する一連のデータブロック１１５を格納することになる。純粋に図示のために、この実例において、それぞれのデータブロックは１２８ビット含むと仮定する。それぞれのデータブロック１１５に関連して、タグフィールド１２０が提供され、一実例において、タグフィールド１２０はタグビットと称される単一のビットフィールドであり、関連付けられるデータブロックが機能を表すことを特定するために設定され、関連付けられるデータブロックが通常データを表し、ひいては機能として取り扱うことができないことを示すためにクリアされる。セットされた又はクリアな状態に関連付けられる実際の値は、実施例に応じて異なっていてよいが、純粋に図示のため、一実施例においては、タグビットが値１を有する場合、関連付けられるデータブロックが機能であることを示し、タグビットが値０を有する場合は関連付けられるデータブロックが通常データを含むことを示すことを了解されたい。
【００５８】
機能が、図３で示される機能レジスタ１００などの結合ポインタレジスタ（本明細書では機能レジスタとも称する）６０のうちの１つにロードされると、次にタグビットは機能情報を伴って移動する。したがって、機能が機能レジスタ１００にロードされると、ポインタ１０２、範囲情報１０４及びリストリクション情報１０６（以降でパーミッション情報と称する）が機能レジスタにロードされることになる。加えて、その機能レジスタに関連して、又はその中の特定のビットフィールドとして、タグビット１０８はその内容が機能を表すことを特定するためにセットされることになる。同様に、機能がメモリに格納し戻される場合、関連するタグビット１２０は機能が格納されるデータブロックに関連付けられてセットされることになる。そのような手法によって、機能と通常データとを区別し、ひいては通常データを機能として使用することができないことを保証することが可能である。
【００５９】
先に議論したように、個々の機能に関連付けられるパーミッションの数を、必要とされるパーミッションフラグの数における増加は伴わず、増やすことが望ましいであろう。特に、機能内のエンコード空間はしばしば需要が大きく、エンコードするために望ましいであろうそれぞれの追加的なパーミッションのためのさらなるパーミッションフラグを追加するための十分な空間がないことがある。
【００６０】
図４は実例として結合ポインタを考慮した、既存の機能内に与えられ得るパーミッションフラグの実例を与える。結合ポインタ機能１５０はポインタ値を格納するためのポインタフィールド１５５、及びポインタフィールド１５５内のポインタ値を使用してアクセスされ得るアドレスの許容範囲を特定するための範囲情報を格納するための範囲フィールド１６０を含む。次いで、複数のパーミッションフィールド１６５が、１つ又は複数のパーミッションフラグを格納するために用意され得る。説明される実施例において、それぞれのパーミッションフラグはセット又はクリアすることができる単一のビット値の形態を取る。説明される実施例のために、機能１５０は１つ又は複数の書き込みパーミッション、１つ又は複数の読み出しパーミッション、及び実行可能パーミッションを有し、複数のパーミッションビットがそれらの様々なパーミッションに対応するフィールド１６５内で与えられることを仮定する。したがって、Ｃ個の異なる書き込みパーミッション及びＢ個の異なる読み出しパーミッションがあり得る一般的な状況を考慮すると、Ｃ個の書き込みパーミッションビットＷ０からＷＣ−１が与えられることができ、またＢ個の読み出しパーミッションビットＲ０からＲＢ−１がやはり与えられることができる。それぞれの読み出し又は書き込みパーミッションは、プロセッサの特定のタイプの動作又は特定のモードの動作に関連付けられることができ、或いは実際に異なるパーミッションがアクセスされる異なるタイプの情報に関連付けられることができ、それによって例えばアクセスされる情報がそれ自身機能であるか、又は通常のデータ値であるかどうかに応じて、異なる書き込み及び読み出しパーミッションがセットされ得る。図示する目的のために対応する読み出し及び書き込みパーミッションに関連付けられる複数の読み出し及び書き込みパーミッションビットがあることを仮定してきたが、代替の実施例において単一の読み出しパーミッション及び単一の書き込みパーミッションがあってもよく、この時これらの読み出し及び書き込みパーミッションの状態は単一の読み出しパーミッションビット及び単一の書き込みパーミッションビットによって表される。
【００６１】
図４に示されるように、追加的なパーミッションが機能内でエンコードされてもよく、ひいては例えば実行可能パーミッションが関連付けられている実行（Ｘ）ビットの値によって示されてもよい。
【００６２】
パーミッションフィールド１６５内のパーミッションビットのデフォルトの解釈によると、それぞれのパーミッションビットは対応するパーミッションに関連付けられており、ひいてはその関連付けられるパーミッションの状態を直接特定する。図４ではこのことがさらに図示されている。それによると、パーミッションビットＷｉが設定されると、これは書き込みパーミッションｉがセット状態にあること、ひいてはフィールド１５５内のポインタ値が、あらゆるオーバーライド制御情報にしたがって、タイプｉの書き込み動作のためのアドレスを特定するために使用することができることを示している。同様に、パーミッションビットＲｊが設定されると、これは読み出しパーミッションｊがセット状態にあること、ひいてはポインタ値が、あらゆるオーバーライド制御情報にしたがって、タイプｊの読み出し動作のためのアドレスを特定するために使用することができることを意味している。最後に、実行ビットＸが設定されると、これは実行可能パーミッションがセット状態にあること、ひいてはポインタ値が、やはりあらゆるオーバーライド制御情報にしたがって、命令をフェッチしてくるアドレスを特定するために使用することができることを意味している。
【００６３】
逆に、関連付けられるパーミッションビットがクリアされる場合、これは関連付けられるパーミッションがその機能について無効にされること、ひいてはそのパーミッションに関連付けられるタイプのアクセスが関連付けられている機能を使用して実施することができないことを意味している。
【００６４】
以降で説明される実施例において、同一のパーミッションビットが保持されるが、パーミッションの拡大されたセットについての状態を導出するために異なって解釈され得る。特に、代替的な解釈によりパーミッションビットの論理組み合わせを使用してパーミッションの増えたセットの状態を特定する。一実施例において、パーミッションの増えたセットは図４を参照して実例として議論した書き込み、読み出し、及び実行可能パーミッションのすべて、すなわちＷ、Ｒ、及びＸパーミッションビットのデフォルトの解釈による利用可能なパーミッションを含むが、加えて少なくとも１つのさらなるパーミッションがまたそれらＷ、Ｒ、及びＸパーミッションビットの値から導出可能である。特に、一実施例において、修正可能なパーミッションはまた、あらゆる追加的なパーミッションビットを指定する必要なく、機能に関連付けられて与えられる。
【００６５】
一実施例において、修正可能なパーミッションの状態が上述のパーミッションビットから決定されるやり方が、図５のフロー図を参照して図示されている。ステップ２００において、代替的な解釈が使用されているかどうかが判断され、そうではない場合、これはデフォルトの解釈を適用していることを意味しており、処理はステップ２０５へ分岐する。デフォルトの解釈によると、修正可能なパーミッションは存在しない。代わりに、あらゆる機能を修正するための能力はどこかで制御情報によって定義され、それぞれの機能内のパーミッションビットを使用して機能ごとに定義されない。
【００６６】
しかしながら、代替的な解釈が使用されている場合、処理はステップ２１０に進み、Ｗビットのうちの少なくとも１つがセットされているかどうか判断される。そうであれば、処理はステップ２２０に進み、修正可能なパーミッションがセット状態にあると決定される。そのため、これは機能がある機能修正命令によって、他の制御状態がそのような修正を妨げない限り、修正できることを意味している。例えば、パーミッションビットから決定された修正可能なパーミッションが修正されることを妨げられないことを示すのにも関わらず、特定の機能が修正できないことを意味するいくつかの一般的なオーバーライド制御情報が、なおあり得る。
【００６７】
ステップ２１０において、どのＷビットもセットされていないと決定される場合、ステップ２１５において実行ビットをクリアするかどうかを決定する。実行ビットがクリアされる場合、このことはやはり修正可能なパーミッションがセット状態にあることを示し、それに応じて処理はステップ２２０に分岐する。しかしながら、実行ビットがセット状態にある場合、処理はステップ２２５に進み、修正可能なパーミッションがクリア状態にあると決定される。修正可能なパーミッションがクリア状態にある場合、これは関連付けられている機能が修正できないことを意味している。したがって、これによって個々の機能を非修正可能であるとしてマークすることができ、機能ベースのアーキテクチャ内で向上したセキュリティを与えることができる。
【００６８】
さらには、機能内のあるパーミッションビットの値を変更して修正可能な状態から非修正可能な状態に変更することが可能であるため、代替的な解釈を使用すると柔軟性が向上される。さらには、特別な状況下で、例えば後に図１１を参照して実例として議論するように、あるアドレス生成命令の使用を通じて、非修正可能な機能を修正可能な機能へ変換することが可能であり得る。
【００６９】
デフォルトの解釈を使用する場合、個々のパーミッションビットと関連付けられるパーミッションとの間に１：１の対応関係があったが、代替的な解釈にしたがうと、これはあてはまらず、パーミッションビットの論理組み合わせを使用して特定のパーミッションの状態を決定することができる。図６は例えばデフォルトの解釈又は代替的な解釈が使用されているかどうかに応じて、実行可能パーミッションの状態がどのように評価され得るかを図示している。
【００７０】
ステップ２５０において、処理回路が代替的な解釈を使用しているかどうか判断される。そうではない場合、ステップ２５５において実行（Ｘ）ビットがセットされているかどうか判断される。そうであれば、処理はステップ２７０に進み、実行可能パーミッションがセット状態にあると決定されるが、そうでなければ処理はステップ２７５に進み、実行可能パーミッションはクリア状態にあると決定される。
【００７１】
しかしながら、代替的な解釈が使用されていると決定される場合、処理はステップ２６０に進み、Ｘビットがセットされているかどうか判断される。そうではない場合、処理はステップ２７５に進み、実行パーミッションがクリア状態にあると決定される。しかしながら、Ｘビットがセットされている場合、このこと自体は必ずしも実行可能パーミッションがセット状態にあることを意味しておらず、代わりに、ステップ２６５において機能に与えられているすべてのＷビットがクリアかどうか判断するために追加的なチェックが実施される。機能内に複数のＷビットがある場合、ステップ２６５において、それらのＷビットのすべてが、それらがすべてクリアかどうか判断するようチェックされる必要があることに留意すべきである。Ｗビットのすべてがクリアである場合のみ、処理はステップ２７０に進み、実行可能パーミッションがセット状態にあると決定されるが、そうでなければ処理はステップ２７５に進み、実行可能パーミッションはクリア状態にあると決定される。
【００７２】
ステップ２６５に戻ると、図５から思い起こされるようにＷビットのいずれかがセットされていれば修正可能なパーミッションはセット状態となるため、Ｗビットのすべてがステップ２６５においてクリアであると判断することは、修正可能なパーミッションがクリア状態にあると判断することと同一であることを了解されたい。したがって、図５及び図６を参照して説明される実施例において、実行可能パーミッション及び修正可能なパーミッションのうちの１つだけが、時間的にあらゆるポイントにおいてセット状態にあり得ることがわかる。
【００７３】
図７は例えばデフォルトの解釈又は代替的な解釈が使用されているかどうかに応じて、読み出しパーミッションのうちの任意の１つの状態がどのように評価され得るかを図示するフロー図である。ステップ３００において、代替的な解釈が使用されているかどうかが判断され、そうではない場合、ステップ３０５において関連付けられるＲパーミッションビットがセットされているかどうか判断される。そうであれば、ステップ３２５において特定の読み出しパーミッションがセット状態にあると決定され、そうでなければステップ３３０において特定の読み出しパーミッションはクリア状態にあると決定される。
【００７４】
しかしながら、代替的な解釈が使用されている場合、処理はステップ３１０に進み、まず関連付けられている読み出しパーミッションビットが対象の読み出しパーミッションについてセットされているかどうか判断される。そうではない場合、処理はステップ３３０に直接進み、読み出しパーミッションがクリア状態にあると決定される。
【００７５】
しかしながら、関連のある読み出しパーミッションビットがセットされている場合、これは読み出しパーミッションがセット状態にあると判断されることを直接意味しておらず、代わりに１つ又は複数のさらなるチェックが必要とされる。まず、ステップ３１５において修正可能なパーミッションがセット状態にあるかどうか判断される。一実施例において、これは必ずしも修正可能なパーミッションを直接再評価することを要求せず、代わりにこのチェックはＷ及びＸビットを参照して実施することができる。特に、先の図５の議論から、少なくとも１つの書き込みビットがセットされているか、又は実行ビットがクリアされている場合、修正可能なパーミッションはセット状態にあると決定され、それに応じてステップ３１５においてそのチェックが実施され得ることを了解されたい。
【００７６】
修正可能なパーミッションがセット状態にあると判断される場合、処理はステップ３２５に進み、関連のある読み出しパーミッションがセット状態にあると決定される。しかしながら、修正可能なパーミッションがセット状態にない場合、機能が現在プログラムカウンタ機能として使用されているかどうか判断するために、ステップ３２０においてさらなるチェックが実施される。そうであれば、修正可能なパーミッションはセットされていないが、ステップ３２５において関連のある読み出しパーミッションはセット状態にあるとさらに決定される。したがって、ある非修正可能な機能はさらに、それらの機能がＰＣＣレジスタ８０に存在する時、少なくとも１つの読み出し可能パーミッションがセットされていると見なされ得る。
【００７７】
ステップ３２０において、機能が現在プログラムカウンタ機能として使用されていないと決定される場合、処理はステップ３３０に進み、読み出しパーミッションがクリア状態にあると決定される。
【００７８】
図８は一実施例において、あらゆる特定の書き込みパーミッションの状態がどのように評価されるかを図示するフロー図である。ボックス３５０によって示されるように、説明される実施例において、デフォルトの解釈又は代替的な解釈のどちらが使用されているかに関わらず、書き込みパーミッションは全く同じやり方で解釈される。特にステップ３５５において関連付けられる書き込みパーミッションビットがセットされているかどうか判断され、そうであれば、ステップ３６０において特定の書き込みパーミッションがセット状態にあると決定され、そうでなければステップ３６５において特定の書き込みパーミッションはクリア状態にあると決定される。
【００７９】
図５から図８の上の議論より、１つ又は複数の書き込みパーミッション、１つ又は複数の読み出しパーミッション、実行可能パーミッション及び修正可能なパーミッションのステータスは、すべて機能内でエンコードされる既存のＷ、Ｒ及びＸパーミッションビットを使用して決定されることを了解されたい。追加的な修正可能なパーミッションビットが追加される必要はなく、それに応じて追加的な修正可能なパーミッションを、いかなる追加的なパーミッションビットのエンコード空間の必要もなく、機能へエンコードすることができる。
【００８０】
図９は４つの上述の異なるタイプのパーミッションの状態を、Ｘ、Ｒ及びＷビットに応じて図示する表である。この実例において、図示を容易にするため、１つの読み出しパーミッション及び１つの書き込みパーミッションだけ、ひいては単一のＲビット及び単一のＷビットだけがあるものと仮定している。
【００８１】
より一般的な場合において、図５から図８のフロー図から了解されるように、修正可能、及び実行可能パーミッション（修正可能なパーミッションがセットされているかどうかによると仮定すれば、実際には読み出し可能パーミッションも）の状態を決定する際、それらのパーミッションがセット状態にあるか、又はクリア状態にあるかどうかを調査する処理の一部として複数のＷビットに関して論理ＯＲ及びＡＮＤ演算が実施される必要がある。
【００８２】
図１０は機能が修正可能としてマークされている場合、パーミッションのうちの１つ又は複数の状態に遷移をもたらすために、個々のパーミッションビットがセット値からクリア値へどのように変化し得るかを図示する状態遷移図である。やはり、図示を容易にするため、単一のＷパーミッションビット及び単一のＲパーミッションビットだけがあるものと仮定するが、複数のＲパーミッションビット及び複数のＷパーミッションビットがあるより一般的な場合において、それらＲ及びＷパーミッションビットのそれぞれは独立してクリアされ得る。
【００８３】
初期状態４００で示されるように、Ｒ、Ｗ及びＸビットのそれぞれは最初は論理値１にセットされ得る。図９から明らかなように、これは機能が非実行可能であるが、修正可能であり、読み出し及び書き込みの両方の動作が許可されていることを意味している。機能が修正可能であるため、個々のパーミッションビットは所望によりクリアすることができる。したがって、１つのビットをクリアすることにより、状態４０５、４０７、４０９のうちのいずれかに遷移することが可能である。状態４０７において、Ｒ及びＷビットがさらにセットされるが、Ｘビットはクリアされ、一方で状態４０９においてはＷ及びＸビットがさらにセットされるが、Ｒビットはクリアされる。図９に戻って参照すると、状態４０７及び４０９の両方が、修正可能なパーミッションがセット状態にある状態に対応していることがわかる。しかしながら、状態４０５（Ｒ及びＸビットがセットされているが、Ｗビットはセットされていない）は修正可能なパーミッションがクリア状態にある、すなわち機能が修正可能ではない状態に対応している。
【００８４】
図１０は個々のパーミッションビットがクリアされると起こり得る複数の他の可能な遷移を示している。図示を容易にするため、状態４００から４１２への、又は状態４００から４１６への直接の遷移は省略されているが、一実施例において、それらの遷移もやはり可能であろう。状態４１２及び４１４は、さらに機能が修正可能な状態であるが、状態４１０は機能が非修正可能な別の状態であることに留意すべきである。状態４１６が原理的には修正可能な状態である一方、それはパーミッションビットのすべてがクリアされている状態を表しており、したがって、その機能によって制約される処理はその機能内でパーミッションをそれ以上変えることができない。いくつかの実施例において、状態４１６は使用されていない状態と決定することができる。
【００８５】
図１０の状態４０５、４１０は機能が非修正可能な状況を表しているため、それらの状態からのさらなる遷移を排除しているように見える。しかしながら、遷移４２０、４２５と関連して使用される記号「ＡＤＲ」によって示されるように、一実施例においてアドレス生成命令の実行により経路４２０、４２５によって示される遷移が起こり得る。図１１を参照してさらにこれを議論する。
【００８６】
図１１に示されるように、アドレス生成命令は汎用機能レジスタＣＮを宛先レジスタとして指定することができ、やはりソースオペランドを、命令内の即値によって、又は内容がオフセット値を指定する整数レジスタを参照してのいずれかで指定することができる。そのようなアドレス生成命令が実行されると、ＰＣＣレジスタ８０内のプログラムカウンタ機能はソース機能４５０として使用される。ポインタ値４６５はＰＣＣ４５０から抽出され、ソースオペランドと組み合わせて論理演算４６０にかけられる。これは、例えば結果値４７０を生成するために即値をポインタ値へ加算することを伴うことがあり、この場合アドレス生成命令は即値を指定し、又は例えばオフセットをポインタ値に加算することを伴うことがあり、この場合そのオフセットは整数レジスタを参照して取得され、やはり結果値４７０を生成する。次いで範囲及びパーミッション情報が結果機能４５５へ本質的には変わらずに複製されるが、Ｘビットは例外である。特に、アドレス生成命令が実行されると、Ｘビット値は結果機能ではクリアされる。したがって、図１０で示されるように、これは２つの遷移４２０、４２５を可能にする。特に、両方の事例において、ＰＣＣ内で実行可能、非修正可能な機能４５０が、非実行可能であるが修正可能な結果機能４５５を作成するために使用される。これは、遷移４２０について特に興味深い効果を与えるものであり、この場合ＰＣＣ４５０は実行可能且つ非修正可能、及びＰＣＣレジスタ８０にある時だけ読み出し可能であったが、そこから生成された結果機能４５５は、今度は（図９に示されるＸＲＷ状態「１１０」と状態「０１０」とを比較すると明らかなように）修正可能且つ完全に読み出し可能となっている。
【００８７】
図１２は、一実施例によるリンク命令を伴う分岐の動作を図示している。図１２に示されるように、リンク命令を伴う分岐の実施には２つの別個の処理が伴う。まず、リターンアドレス機能５１７が現在のプログラムカウンタ機能５００から生成される。一実施例において、これはポインタ値５０５が抽出されること、及びリターンアドレスポインタ５１５を生成するために命令サイズを加算演算５１０を介してそのポインタ値へ加算することを伴う。範囲及びパーミッション情報のすべては、次いでリターンアドレス機能へと複製され、一実施例において、リターンアドレス機能は機能リンクレジスタ（ＣＬＲ：Ｃａｐａｂｉｌｉｔｙ  Ｌｉｎｋ  Ｒｅｇｉｓｔｅｒ）内に格納される。ＣＬＲは様々なやり方で与えられるが、一実施例においては、汎用機能レジスタ、例えばＣ３０、のうちの特定の１つである。有効なプログラムカウンタ機能５００が実行可能且つ非修正可能となるため、これはリターンアドレス機能がやはり非修正可能であること、ひいてはリターンアドレス機能がリターンアドレスとして使用されるよりも前に調整できないことを保証することによって向上したセキュリティを与えることを意味している。
【００８８】
リターンアドレス機能が生成されてしまうと、次いでその機能レジスタＣＮ５２０の内容はＰＣＣレジスタ８０へと複製され新しいプログラムカウンタ機能５２５を形成する。後々、分岐から戻ってくるためにリターン命令を実行することができ、その時点でＰＣＣはＣＬＲの内容で更新される。ＣＬＲ機能が非修正可能であったため、このことはリターンアドレス機能がその期間に改竄されていないことを保証する。
【００８９】
図１３は次いで汎用機能レジスタ内で修正不可能な機能の確立が、分岐命令を実行する際エントリポイント機能としてのみ使用することができる機能を伴う処理を提供するためにどのように使用され得るかを概略的に図示する図である。特に、ボックス５６５によって示されるように、機能５５０は、そのＸビットがセットされており、そのＷビットのすべてはクリアされており、少なくとも１つのＲビットがセットされていると仮定されている。先述の図９より明らかなように、これは本質的には機能が非修正可能であり、実行可能であり（これは機能がＰＣＣレジスタ８０内にある時のみ関連する）、ＰＣＣレジスタ８０にある時だけ読み出し可能であることを意味している。したがって汎用機能レジスタＣＮ内で、この機能５５０は読み出し可能ではなく、又は書き込み可能ではなく、且つ修正不可能である。したがって、分岐命令を介してＰＣＣにロードされ得る機能として、その機能を与えられている処理によって使用されることだけができる。
【００９０】
機能レジスタＣＮの内容をＰＣＣレジスタ８０へとロードするために分岐命令が続いて実行される際、これは更新されたプログラムカウンタ機能５６０となり、更新されたプログラムカウンタ機能５６０のＸ、Ｗ及びＲビット５７０の集合は、ソース機能５５０のフィールド５６５内のそれらの集合に対応する。Ｘ、Ｗ及びＲパーミッションビットのいずれも変化していないが、今度は機能がプログラムカウンタ機能であるため、機能は実行可能であり、ひいては命令をフェッチさせるが、対応するＲビットがセットされるタイプのあらゆる読み出し動作について読み出し可能でもある。
【００９１】
このことは「リテラル」が今度はＰＣＣ５６０を使用してメモリから読み出しできることを意味している。例えば、ロード命令をソースアドレスとしてＰＣＣから導出されたアドレスを指定して使用することができ、この時結果は整数レジスタＸｎのうちの１つに格納される。ＰＣＣ５６０からアドレスを導出する際、アドレスが許容範囲内にある場合、また対象となる読み出し動作のタイプが関連付けられるＲパーミッションビットをセットする場合、リテラルデータを導出されたアドレスからロードして、そのデータをレジスタＸｎ内に格納するために、ロード演算を実施することができる。
【００９２】
一実施例において、処理回路はいつも代替的な解釈を使用するよう構成することができる。しかしながら、処理回路の他の事例はやはり同一の機能を使用することができるが、本明細書で説明されるメカニズムは使用されるパーミッションビットにおいていかなる変化も伴わないため、デフォルトの解釈にしたがってそれらを解釈し、ひいてはデフォルトの解釈を使用する既存のシステムとの後方互換性を提供する。
【００９３】
別の実施例において、処理回路はデフォルトの解釈を使用することから代替的な解釈を使用することへ、選択的にスイッチングすることができ、その逆も可能であり、図１に示されるように、設定ビット９０が処理回路についての制御情報の一部として与えられ得、この時設定ビットの値は処理回路がデフォルトの解釈を使用しているか、代替的な解釈を使用しているかを決定するものである。その設定ビットをセットすることは、処理回路で実行しているコードの特定のタイプに限定され得る。例えば、セキュアなコード、又はオペレーティングシステム若しくはハイパーバイザは、ある状況下で設定ビットを変更するように構成することができる。
【００９４】
図１４は使用され得る仮想マシンの実装形態を示す。先に説明された実施例は考慮される技術をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、ハードウェアデバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシンプログラム６１０をサポートするホストオペレーティングシステム６２０を実行させるホストプロセッサ６３０上で実行する。典型的には、適度な速度で実行する仮想マシンの実装形態を提供するためには大きくパワーのあるプロセッサが要求されるが、そのような手法は一定の状況下では十分な根拠があるものとされ得、例えば互換性又は再使用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。仮想マシンプログラム６１０はコンピュータ可読記憶媒体（非一時的媒体であってもよい）に記憶され得、アプリケーションプログラム６００にアプリケーションプログラムインターフェース（命令実行環境）を提供し、アプリケーションプログラムインターフェースは仮想マシンプログラム６１０によってモデリングされるデバイスである現実のハードウェアによって提供されるであろうアプリケーションプログラムインターフェースと同一のものである。機能のパーミッションを解釈するための上述の技術は、仮想マシン環境内に実装されてもよい。例えば、仮想マシンで実行するソフトウェア、又は仮想マシンを制御するソフトウェアは、そのような特徴を実装するハードウェアを利用することができる。
【００９５】
上述の実施例は、余計なパーミッションビットを消費することなく１つ又は複数の追加的なパーミッションを機能へとエンコードするためのメカニズムを提供する。既存のパーミッションビットの論理組み合わせを使用して、パーミッションの拡大されたセットをエンコードすることができる。一実施例において、これは１つ又は複数の追加的なパーミッションをエンコードするための乏しいパーミッションビットの浪費を回避するために冗長なエンコードの再使用を伴うが、一方で所望の挙動はなお保持している。さらには、単調に減少するパーミッションモデルが維持される。特に、デフォルトの解釈又は代替的な解釈のいずれが使用されるかに関わらず、機能が修正可能であるとして特定される場合は個々のパーミッションビットはセット値からクリア値へ変わることしかできず、ひいては機能によって制約される処理はその機能内でクリアされてしまったあらゆるパーミッションビットをセット状態に復元することができない。
【００９６】
特定の一実施例において、追加された追加的なパーミッションは修正可能なパーミッションであり、それによって機能の修正可能性を機能ごとに表現することができる。これは機能ベースのシステム内に向上した柔軟性及びセキュリティを与えることができる。任意選択で、修正可能なパーミッションはＰＣＣレジスタ内に保持されている機能から機能を生成するために使用されるある命令の挙動を変更することができ、限定はしないが修正可能なパーミッションを分岐及びリンク命令によって生成される機能にキャリーして、例えば非修正可能なリターンアドレスを生成すること、及び／又はＰＣ相対アドレス計算（ＡＤＲ）命令よって生成される機能から実行可能パーミッションを除去することを含む。
【００９７】
さらには、パーミッションビットを選択的にクリアすることによってある有用な挙動が対応され得る。例えば、そのＸパーミッションビットをセットする機能からすべての書き込みパーミッションビットをクリアすることは、修正可能且つ非実行可能から非修正可能且つ実行可能へとその機能を変化させる。別の実例としては、少なくとも１つの読み出し可能パーミッションビットをセットする機能から実行パーミッションビットをクリアすることは、例えばＡＤＲ命令の使用を通じて、非修正可能、非読み出し可能から修正可能且つ読み出し可能へとその機能を変化させる。
【００９８】
さらには、任意選択の設定ビット９０が使用される実施例において、処理回路を個々のパーミッションビットのそれぞれが関連付けられるパーミッションを有し、また機能が修正されることを妨げるそれらのパーミッションビットの組み合わせのないデフォルトの解釈へ反転させることにより、修正可能なパーミッションの効果を無効化することができる。そのようなデフォルトの解釈を使用する際、機能を修正することに対するあらゆる制限が、典型的にはよりグローバルなスケールで、例えばいくつかの一般的な制御情報を参照して表現される。
【００９９】
パーミッションの拡大されたセットの状態を定義するためにパーミッションビットの論理組み合わせが使用される代替的な解釈を使用することによって、使用されるパーミッションビットの数における増加を必要とすることなく個々の機能と関連するより強力な（より強く制約される）パーミッションが指定できる。
【０１００】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素があらゆるやり方で変更される必要があることを含意するものではない。
【０１０１】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、添付の特許請求の範囲によって定義されるような本発明の範囲及び趣旨を逸脱することなく、その様々な変形、付加、及び修正が当業者によりなされ得ることを理解されたい。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組み合わせが可能である。
【図１】
2020521222.tif 000003
【図２】
2020521222.tif 000004
【図３】
2020521222.tif 000005
【図４】
2020521222.tif 000006
【図５】
2020521222.tif 000007
【図６】
2020521222.tif 000008
【図７】
2020521222.tif 000009
【図８】
2020521222.tif 000010
【図９】
2020521222.tif 000011
【図１０】
2020521222.tif 000012
【図１１】
2020521222.tif 000013
【図１２】
2020521222.tif 000014
【図１３】
2020521222.tif 000015
【図１４】
2020521222.tif 000016
【国際調査報告】
2020521222.tif 000017
2020521222.tif 000018