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