(57)【要約】  有界ポインタを管理するための装置および方法を提供する。この装置は、一連の命令を実行する処理回路と、処理回路にアクセス可能であり、有界ポインタおよび非有界ポインタを記憶するための複数の記憶要素とを有する。各有界ポインタは、有界ポインタを使用するときのメモリアドレスの許容範囲を示す、有界ポインタに関連する明示的な範囲情報を有する。次に、処理回路の現在の範囲チェック状態を記憶するための現在の範囲チェック記憶要素が使用される。現在の範囲チェック状態がデフォルト状態を示すとき、処理回路は、メモリアドレスを識別するために使用されるポインタを識別するメモリアクセス命令の実行に応答して範囲チェック動作を実行し、そのメモリアドレスへのアクセスが許可されているかどうかを判定する。具体的には、メモリアクセス命令がポインタを有界ポインタの１つとして識別すると、その有界ポインタに関連付けられた明示的な範囲情報を参照して範囲チェック動作が実行される。そうではなく、メモリアクセス命令が非有界ポインタを識別すると、処理回路について定義されたデフォルト範囲情報を参照して範囲チェック動作が実行される。少なくとも１つのイベントが検出されると、現在の範囲チェック状態は実行状態にセットされる。実行状態にある場合、処理回路は、メモリアクセス命令の実行に応答して、識別されたポインタが非有界ポインタである場合、範囲チェック動作を無効にする。これは、処理回路に利用可能な有界ポインタのセットを変更できるようにする、効率的であるが制御された機構を提供する。
2018536238.tif 000002
【特許請求の範囲】
【請求項１】
命令のシーケンスを実行する処理回路と、
有界ポインタおよび非有界ポインタの記憶のために前記処理回路にアクセス可能な複数の記憶要素であって、各有界ポインタが、前記有界ポインタを使用するときのメモリアドレスの許容範囲を示す明示的な範囲情報を有する複数の記憶要素と、
前記処理回路の現在の範囲チェック状態を記憶するための現在の範囲チェック記憶要素と
を含み、
前記現在の範囲チェック状態がデフォルト状態を示す場合、前記処理回路は、メモリアドレスを識別するために使用されるポインタを識別する前記命令シーケンス中のメモリアクセス命令の実行に応答して、そのメモリアドレスへのアクセスが許可されるか判定するための範囲チェック動作を実行し、前記メモリアクセス命令が前記ポインタを前記有界ポインタの１つとして識別する場合、前記範囲チェック動作は、その有界ポインタに関連付けられた明示的な範囲情報を参照して実行され、前記メモリアクセス命令が前記ポインタを前記非有界ポインタの１つとして識別する場合、前記範囲チェック動作は、前記処理回路について定義されたデフォルト範囲情報を参照して実行され、
少なくとも１つのイベントを検出すると、前記現在の範囲チェック状態は実行状態にセットされ、前記実行状態にある場合、前記処理回路は前記メモリアクセス命令の実行に応答して、前記識別されたポインタが非有界ポインタである場合、前記範囲チェック動作を無効にする、装置。
【請求項２】
前記少なくとも１つのイベントが、前記処理回路によって例外処理を行うことを含む、請求項１に記載の装置。
【請求項３】
保存された範囲チェック状態を記憶する保存された範囲チェック記憶要素をさらに含み、
前記例外処理を行うと、前記保存された範囲チェック記憶要素が更新され、前記例外処理に応答して前記現在の範囲チェック状態が前記実行状態にセットされる前に前記処理回路によって使用されていた前記現在の範囲チェック状態を、前記保存された範囲チェック状態として記憶する、請求項２に記載の装置。
【請求項４】
前記例外からの復帰時に、前記現在の範囲チェック記憶要素が更新されて、前記保存された範囲チェック状態を前記現在の範囲チェック状態として識別する、請求項３に記載の装置。
【請求項５】
前記例外処理を行うとき、前記処理回路が例外処理動作を実行するように構成され、動作中前記実行状態の間に１つ以上のメモリアクセスが実行されて、前記例外からの復帰時に前記処理回路に利用可能となる有界ポインタのセットが変更される、請求項２から４のいずれか一項に記載の装置。
【請求項６】
前記実行状態において、前記処理回路が、前記メモリアクセス命令の実行に応答して、前記識別されたポインタが有界ポインタである場合に前記範囲チェック動作をさらに無効にする、請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記デフォルト範囲情報を記憶するデフォルト範囲記憶要素をさらに含む、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記処理回路が、フェッチメモリアドレスを発行するように構成され、前記処理回路による次の実行のためにフェッチされる命令を識別し、前記デフォルト状態において、前記処理回路が、前記フェッチメモリアドレスの発行前に、前記処理回路に定義されているデフォルトフェッチ範囲情報を参照して、前記フェッチメモリアドレスへのアクセスが許可されているかどうかを決定するために、フェッチ範囲チェック動作を実行するように構成されており、
前記実行状態において、前記処理回路が前記フェッチ範囲チェック動作を無効にするように構成されている、請求項１から７のいずれか一項に記載の装置。
【請求項９】
前記フェッチメモリアドレスが、プログラムカウンタ値によって決定され、前記デフォルトフェッチ範囲情報が、プログラムカウンタ範囲情報である、請求項８に記載の装置。
【請求項１０】
前記処理回路が複数の例外レベルで動作可能であり、各例外レベルが異なるソフトウェア実行特権を有し、前記処理回路が、前記処理回路によって実行される例外処理の少なくともサブセットに応答して、前記処理回路が動作している前記例外レベルを変更するように構成されている、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
前記処理回路が前記例外レベルの少なくとも１つで動作しているとき、前記現在の範囲チェック状態が、同じ前記例外レベルに留まりながら前記実行状態と前記デフォルト状態との間で変更可能である、請求項１０に記載の装置。
【請求項１２】
前記例外処理を行うことによって前記処理回路が第１の例外レベルから第２の例外レベルに遷移し、前記保存された範囲状態記憶要素が、前記例外処理が行われる前に前記第１の例外レベルで前記処理回路によって使用されている前記範囲チェック状態を識別するように更新され、前記処理回路が前記第２の例外レベルに遷移すると、前記現在の範囲チェック状態が実行状態にセットされる、請求項３に従属する請求項１０または１１に記載の方法。
【請求項１３】
前記第２の例外レベルでの動作中、前記処理回路が、前記現在の範囲チェック状態を前記実行状態から前記デフォルト状態に変更するように構成される、請求項１２に記載の装置。
【請求項１４】
前記例外から復帰するときに前記第１の例外レベルに復帰するように前記処理回路が構成され、前記例外からの復帰時に前記現在の範囲チェック状態が前記デフォルト状態から前記実行状態に変わることにならない限り、前記現在の範囲チェック記憶要素が、前記保存された範囲チェック状態を前記現在の範囲チェック状態として識別するように更新される、請求項１３に記載の装置。
【請求項１５】
１つ以上のフィールドを有するアクセス制御記憶要素をさらに含み、各フィールドが対応する機能セットと関連しており、かつ前記処理回路が前記デフォルト状態にあるときに前記対応する機能セットの前記処理回路へのアクセス可能性を示す値を有しており、
実行状態にあるとき、前記処理回路の各対応する機能セットへのアクセスが、前記アクセス制御記憶装置内の前記関連する値とは無関係である、
請求項１から１４のいずれか一項に記載の装置。
【請求項１６】
前記デフォルト状態では、前記処理回路が前記アクセス制御記憶要素を更新することができない、請求項１５に記載の装置。
【請求項１７】
命令のシーケンスを実行する処理回路と、前記処理回路によるアクセスのための有界ポインタおよび非有界ポインタを記憶するための複数の記憶要素であって、各有界ポインタが、前記有界ポインタを使用するときのメモリアドレスの許容範囲を示す明示的な範囲情報を有する複数の記憶要素とを有する装置を動作させる方法であって、前記方法は、
前記処理回路の現在の範囲チェック状態を記憶するステップと、
前記現在の範囲チェック状態がデフォルト状態を示す場合、前記命令シーケンス中のメモリアクセス命令の実行に応答して、メモリアドレスを識別するために使用されるポインタを識別し、そのメモリアドレスへのアクセスが許可されるか判定するために範囲チェック動作を実行するステップであって、前記メモリアクセス命令が前記ポインタを前記有界ポインタの１つとして識別する場合、前記範囲チェック動作が、その有界ポインタに関連付けられた前記明示的な範囲情報を参照して実行され、前記メモリアクセス命令が前記ポインタを前記非有界ポインタの１つとして識別する場合、前記範囲チェック動作が、前記処理回路について定義されたデフォルト範囲情報を参照して実行されるステップと、
少なくとも１つのイベントを検出すると、前記現在の範囲チェック状態を実行状態にセットするステップであって、前記実行状態にある場合、前記処理回路が、前記識別されたポインタが非有界ポインタである場合、前記メモリアクセス命令の実行に応答して前記範囲チェック動作を無効にするステップと、を含む方法。
【請求項１８】
命令のシーケンスを実行する処理手段と、
前記処理手段によるアクセスおよび有界ポインタおよび非有界ポインタの記憶のための複数の記憶要素手段であって、各有界ポインタが、前記有界ポインタを使用するときのメモリアドレスの許容範囲を示す明示的な範囲情報を有する複数の記憶要素手段と、
前記処理手段の現在の範囲チェック状態を記憶するための現在の範囲チェック記憶要素手段とを含み、
前記現在の範囲チェック状態がデフォルト状態を示す場合、前記処理手段は、メモリアドレスを識別するために使用されるポインタを識別する前記命令シーケンス中のメモリアクセス命令の実行に応答して、そのメモリアドレスへのアクセスが許可されるか判定するために範囲チェック動作を実行するためのものであり、前記メモリアクセス命令が前記ポインタを前記有界ポインタの１つとして識別する場合、前記範囲チェック動作は、その有界ポインタに関連付けられた前記明示的な範囲情報を参照して実行され、前記メモリアクセス命令が前記ポインタを前記非有界ポインタの１つとして識別する場合、前記範囲チェック動作は、前記処理手段について定義されたデフォルト範囲情報を参照して実行され、
少なくとも１つのイベントを検出すると、前記現在の範囲チェック状態は実行状態にセットされ、前記実行状態にある場合、前記処理手段は、前記識別されたポインタが非有界ポインタである場合、前記メモリアクセス命令の実行中に前記範囲チェック動作を無効にするためのものである、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。
【背景技術】
【０００２】
データ処理装置の中には、特定のアドレスを示すポインタとポインタのアドレスの許容範囲を示す範囲情報とが対応付けられた有界ポインタをサポートするものがある。例えば、そのようなポインタは、「ファットポインタ」と呼ばれてもよい。
【０００３】
データ処理装置の処理回路によるアクセスのための有界ポインタを記憶するために、いくつかの有界ポインタレジスタを設けることができる。そのような有界ポインタレジスタ内の各有界ポインタは、処理回路によってアクセス可能なメモリアドレスの拡張不可能範囲を識別するので、各有界ポインタは、（処理回路がアクセスすることができるメモリアドレスの許容範囲を識別する）能力（ＣＡＰＡＢＩＬＩＴＹ）と呼ぶことができる。処理回路は、処理回路に利用可能な特定の有界ポインタに関連する範囲を縮小するためのステップをとることができるが、通常の動作では、その有界ポインタによって処理回路に与えられる能力を高めるために範囲を拡張することはできない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
有界ポインタレジスタ内の有界ポインタによって識別されるメモリアドレスの特定の範囲は、データ、命令および／または他の能力（すなわち、他の有界ポインタ）を含むことができる。したがって、任意の時点において、処理回路のメモリアクセス能力は、有界ポインタレジスタ内で識別される能力と、これらの有界ポインタレジスタ内に保持される能力を介してアクセス可能な任意のさらなる能力とを含む能力セットによって定義され、この能力セットは、本明細書では能力領域と呼ばれる。
【０００５】
データ処理装置の動作中に処理回路の能力領域を変更しようとする必要性があるかもしれない。しかし、これは、現在の能力領域に与えられている能力ではアクセスできないメモリアドレスへのアクセスを必要とするかもしれない。
【０００６】
処理回路の能力領域におけるそのような変更を可能にするための効率的で信頼できる機構を提供することが望ましい。
【課題を解決するための手段】
【０００７】
一構成例では、装置が提供され、装置は、一連の命令を実行する処理回路と、有界ポインタおよび非有界ポインタの記憶のために処理回路にアクセス可能な複数の記憶要素であって、各有界ポインタが、前記有界ポインタを使用するときのメモリアドレスの許容範囲を示す明示的な範囲情報を有する複数の記憶要素と、処理回路の現在の範囲チェック状態を記憶するための現在の範囲チェック記憶要素とを含み、現在の範囲チェック状態がデフォルト状態を示す場合、処理回路は、メモリアドレスを識別するために使用されるポインタを識別する命令シーケンス中のメモリアクセス命令の実行に応答して、そのメモリアドレスへのアクセスが許可されるか判定するための範囲チェック動作を実行し、メモリアクセス命令がポインタを前記有界ポインタの１つとして識別する場合、範囲チェック動作は、その有界ポインタに関連付けられた明示的な範囲情報を参照して実行され、メモリアクセス命令がポインタを前記非有界ポインタの１つとして識別する場合、範囲チェック動作は、処理回路について定義されたデフォルト範囲情報を参照して実行され、少なくとも１つのイベントを検出すると、現在の範囲チェック状態は実行状態にセットされ、実行状態にある場合、処理回路は前記メモリアクセス命令の実行に応答して、識別されたポインタが非有界ポインタである場合、範囲チェック動作を無効にする。
【０００８】
別の例示的な構成では、一連の命令を実行する処理回路と、処理回路によるアクセスのための有界ポインタおよび非有界ポインタを記憶するための複数の記憶要素であって、各有界ポインタが、前記有界ポインタを使用するときのメモリアドレスの許容範囲を示す明示的な範囲情報を有する複数の記憶要素とを有する装置を動作させる方法を提供し、方法は、処理回路の現在の範囲チェック状態を記憶するステップと、現在の範囲チェック状態がデフォルト状態を示す場合、命令シーケンス中のメモリアクセス命令の実行に応答して、メモリアドレスを識別するために使用されるポインタを識別し、そのメモリアドレスへのアクセスが許可されるか判定するために範囲チェック動作を実行するステップであって、メモリアクセス命令がポインタを前記有界ポインタの１つとして識別する場合、範囲チェック動作は、その有界ポインタに関連付けられた明示的な範囲情報を参照して実行され、メモリアクセス命令がポインタを前記非有界ポインタの１つとして識別する場合、範囲チェック動作は、処理回路について定義されたデフォルト範囲情報を参照して実行されるステップと、少なくとも１つのイベントを検出すると、現在の範囲チェック状態を実行状態にセットするステップであって、実行状態にある場合、処理回路は、識別されたポインタが非有界ポインタである場合、前記メモリアクセス命令の実行に応答して範囲チェック動作を無効にするステップと、を含む。
【０００９】
さらに別の構成例で、装置が提供され、装置は、一連の命令を実行する処理手段と、処理手段によるアクセスおよび有界ポインタおよび非有界ポインタの記憶のための複数の記憶要素手段であって、各有界ポインタが、前記有界ポインタを使用するときのメモリアドレスの許容範囲を示す明示的な範囲情報を有する複数の記憶要素手段と、処理手段の現在の範囲チェック状態を記憶するための現在の範囲チェック記憶要素手段とを含み、現在の範囲チェック状態がデフォルト状態を示す場合、処理手段は、メモリアドレスを識別するために使用されるポインタを識別する命令シーケンス中のメモリアクセス命令の実行に応答して、そのメモリアドレスへのアクセスが許可されるか判定するために範囲チェック動作を実行するためのものであり、メモリアクセス命令がポインタを前記有界ポインタの１つとして識別する場合、範囲チェック動作は、その有界ポインタに関連付けられた明示的な範囲情報を参照して実行され、メモリアクセス命令がポインタを前記非有界ポインタの１つとして識別する場合、範囲チェック動作は、処理手段について定義されたデフォルト範囲情報を参照して実行され、少なくとも１つのイベントを検出すると、現在の範囲チェック状態は実行状態にセットされ、実行状態にある場合、処理手段は、識別されたポインタが非有界ポインタである場合、メモリアクセス命令の実行中に範囲チェック動作を無効にするためのものである。
【００１０】
本技術を、添付の図面に示す実施形態を参照して、単なる例としてさらに説明する。
【図面の簡単な説明】
【００１１】
【図１】一実施形態による装置のブロック図である。
【図２】有界ポインタ記憶要素のセット内でポインタ値をセットまたはアクセスしようとする試みがある場合にエラーが発生する命令のタイプの例を示す図であり、そのポインタ値は、関連する範囲情報によって示される範囲外のアドレスを指定するために使用される。
【図３】一実施形態による、有界ポインタに関連するタグビットの使用を示す図である。
【図４】一実施形態による、さまざまな異なる状況の能力によってどのようにメモリアクセスが管理されるかを概略的に示す図である。
【図５】一実施形態による、例外処理を行うときに保存されたプロセス状態レジスタ内に保存されるデータを示し、一実施形態による２つの可能な現在の範囲チェック状態を識別する図である。
【図６】一実施形態による、例外処理を行うときに実行されるステップを示すフロー図である。
【図７】一実施形態による、例外から復帰するときにとられるステップを示すフロー図である。
【図８】一実施形態による、複数の例外レベルがどのように提供されるかを示す図である。
【図９】一実施形態による、例外処理の実行およびその後のそれらの例外からの復帰に起因するさまざまな例外レベル間の遷移のシーケンス例を示す図である。
【図１０】一実施形態によって提供されるアクセス制御レジスタの形式を示す図である。
【図１１】一実施形態による、範囲チェック状態が現在実行状態であるか否かに応じて、図１０のアクセス制御レジスタがどのように使用されるかを示すフロー図である。
【発明を実施するための形態】
【００１２】
添付の図面を参照して実施形態を論じる前に、以下の実施形態の説明を提供する。
【００１３】
いくつかの処理装置は、有界ポインタの使用をサポートすることができる。ポインタ自体は、例えば、アクセスすべきデータ値のアドレスまたは実行すべき命令を指し示すか、または決定するために使用されてもよい。しかし、ポインタは、ポインタを使用するときのアドレスの許容範囲を示す関連範囲情報も有していてもよい。これは、例えば、ポインタから決定されたアドレスがある範囲内に留まって、動作のセキュリティまたは機能的な正確さを維持することを保証するのに有用である。例えば、特定の能力が特定のプロセスに定義されている能力ベースのアーキテクチャに関心が高まっており、定義された能力以外の動作を実行しようとするとエラーが発生する可能性がある。有界ポインタの範囲情報は、そのようなアーキテクチャについて定義された能力情報の一部であってもよく、能力ベースのアーキテクチャにおいて、そのような有界ポインタ（その関連する能力情報を含む）は能力と呼ばれてもよい。
【００１４】
したがって、装置は、ポインタを使用するときのアドレスの許容範囲を示す関連範囲情報を有するポインタを記憶するために使用される有界ポインタ記憶要素を有することができる。各有界ポインタ記憶要素は、レジスタ、またはスタックメモリ上の位置などの汎用メモリ内のメモリ位置とすることができる。
【００１５】
メモリアクセス命令はそのような有界ポインタ記憶要素を参照するために使用することができ、その後、命令の動作中に必要とされるメモリ内のアドレスを導出するために使用されるポインタを取得する。ポインタは、メモリアドレスを識別するために直接使用されてもよいし、ポインタ値へのオフセットの追加などによってメモリアドレスを決定するために使用されてもよい。
【００１６】
特定のメモリアクセス命令が、データ処理装置の汎用レジスタ内に記憶された非有界ポインタを識別することも可能である。これらのアクセスもまた制約されることを保証するために、（一実施形態では、処理回路に利用可能な有界ポインタの少なくとも１つに関連する範囲から導出されてもよい）デフォルト範囲情報が指定されてもよく、非有界ポインタを参照して実行されるあらゆるメモリアクセスは、デフォルト範囲情報についてチェックされたメモリアドレスを有する。
【００１７】
このような手法によって、処理回路によって行われるメモリアクセスを効果的に管理することが可能であり、これは現在の能力領域によって処理回路に利用可能な明示的な有界ポインタを参照して実行されるか、非有界ポインタを使用して（現在の能力領域の許容メモリアドレス範囲内にあるメモリアドレスのデフォルト範囲に非有界ポインタを効果的に制約することによって）実行されるかのどちらかである。しかし、上述したように、発生する問題は、能力領域を変更できる機構を効率的かつ確実に提供する方法である。
【００１８】
一実施形態によって、一連の命令を実行する処理回路と、処理回路にアクセス可能であり、有界ポインタおよび非有界ポインタの両方が記憶される複数の記憶要素とを有する装置が提供される。各有界ポインタは、有界ポインタを使用するときのメモリアドレスの許容範囲を示す、有界ポインタに関連する明示的な範囲情報を有する。さらに、この装置は、処理回路の現在の範囲チェック状態を記憶するための現在の範囲チェック記憶要素を有する。現在の範囲チェック状態の可能な値は、デフォルト状態および実行状態を含む。デフォルト状態では、処理回路は、ポインタを識別するメモリアクセス命令の実行に応答して範囲チェック動作を実行し、ポインタから導出されたメモリアドレスへのアクセスが許可されているかどうかを判定する。具体的には、メモリアクセス命令が有界ポインタの１つを識別すると、その有界ポインタに関連付けられた明示的な範囲情報を参照して範囲チェック動作が実行される。そうではなく、メモリアクセス命令が非有界ポインタの１つを識別すると、処理回路について定義されたデフォルト範囲情報を参照して範囲チェックが実行される。これにより、現在の能力領域に関連付けられたセキュリティが強制されることが保証される。
【００１９】
しかし、少なくとも１つのイベントが検出されると、現在の範囲チェック状態は実行状態にセットされる。実行状態にある場合、処理回路がメモリアクセス命令を実行するときに、識別されたポインタが非有界ポインタである場合、範囲チェック動作は無効にされる。このような手法によって、これは、非有界ポインタから導出されたメモリアドレスに、これらのメモリアドレスが現在の能力領域によって定義されたメモリアドレスの許容範囲外にある場合でも、実行状態で動作する処理回路がアクセスすることを可能にする機構を提供する。この機構により、処理回路が実行状態にある間に１つ以上のメモリアクセスを実行して、処理回路に利用可能にされる有界ポインタのセットを変更することが可能である。例えば、このような機構によって、非有界ポインタおよび有界ポインタの両方を複数の記憶素子とメモリとの間でどちらの方向にも移動させることができ、これは、以前にデフォルト状態で実行していたときに処理回路に関連付けられていた能力領域外のメモリアドレスについても含まれる。結果として、その後処理回路が実行状態からデフォルト状態に復帰するとき、処理回路には変更された有界ポインタのセット、したがって変更された能力領域が提供され得る。
【００２０】
しかし、非有界ポインタの範囲チェック動作は処理回路が実行状態にある場合にのみ無効にされ、実行状態への遷移は１つ以上の指定されたイベントの検出時に行われるので、処理回路が能力領域を変更する機能は厳密に制御することができる。したがって、これは、処理回路に利用可能な有界ポインタのセットを変更し、それにより能力領域を変更するための非常に効率的で信頼できる機構を提供する。
【００２１】
現在の範囲チェック状態を実行状態にセットさせるイベントのタイプはさまざまな形態をとることができるが、一実施形態では、処理回路による例外処理の実行を含む。したがって、一実施形態では、例外処理が行われるとき、処理回路は、例外処理が行われた時点の現在の範囲チェック状態に関係なく、実行状態に遷移するように構成される。これにより、例外処理を行うことによって起動する例外処理動作が、処理回路が実行処理状態に留まる間に、処理回路に利用可能な有界ポインタのセットをある程度変更する機会を得ることが可能になる。
【００２２】
一実施形態では、装置は、保存された範囲チェック状態を記憶するための保存された範囲チェック記憶要素をさらに含む。例外処理を行うと、保存された範囲チェック記憶要素が更新され、例外処理に応答して、現在の範囲チェック状態が実行状態にセットされる前に処理回路によって使用されていた現在の範囲チェック状態を、保存された範囲チェック状態として記憶する。したがって、これにより、例外処理が行われた時点で処理回路によって使用されていた現在の範囲チェック状態が確実に取り込まれ、その情報を後で参照することができる。
【００２３】
特に、一実施形態では、例外から復帰すると、現在の範囲チェック記憶要素が更新され、保存された範囲チェック記憶要素に以前に取り込まれた保存された範囲チェック状態を、現在の範囲チェック状態として識別する。
【００２４】
処理回路が実行状態にある間に１つ以上のメモリアクセスの実行によって有界ポインタのセットに対して何らかの変更が行われた場合、例外からの復帰時に、処理回路は、処理回路に利用可能なその変更された有界ポインタのセットを有することができる。
【００２５】
利用可能な有界ポインタのセットを変更できることに加えて、現在の能力領域によって以前はアクセスできなかったメモリアドレスに常駐する１つ以上の有界ポインタを複数の記憶要素にロードすることによって、および／またはそのような境界ポインタを、他の（以前はアクセスできなかった）有界ポインタが記憶されているメモリアドレス領域を含むように構成することによって、実行状態の間に、処理回路が特定の有界ポインタに関連する範囲情報を変更することも可能となる。したがって、処理回路が現在の能力領域によってアクセスした有界ポインタは、その有界ポインタに関連する権利を効果的に増大させるために、関連する範囲情報を増加させることができる。特に、ある特権命令、または命令に特権を与える能力を提供することができ、これは、関連する範囲を増やすか関連する権限を増やすことによって、既存の有界ポインタ（能力）を変更して現在提供しているよりも多くの権利を追加できる。しかし、上述の実施形態の範囲チェック状態の使用により、既存の能力を変更するそのような命令の能力は、処理回路が実行状態にあるときに制限されることがあり、そのため有界ポインタに対するそのような変更は、処理回路が実行状態にある間に実行されるように制限される。
【００２６】
一実施形態では、実行状態の間、アクセスされたメモリアドレスを判定するために使用される有界ポインタをメモリアクセス命令が識別する場合、範囲チェック動作が依然として実行される。したがって、メモリにアクセスするためにそれらの有界ポインタが使用される場合、特定の有界ポインタに関連付けられた制約は、実行状態の間は依然として強制される。しかし、別の実施形態では、実行状態にあるとき、メモリアクセス命令によって指定されたポインタが有界ポインタである場合に範囲チェック動作をさらに無効にするように処理回路を構成することができ、それにより、実行状態で動作中の処理回路の柔軟性がさらに拡張されて、現在の能力領域に関連するメモリアドレス範囲外のメモリアドレス範囲にアクセスすることが可能となる。
【００２７】
処理回路について定義されるデフォルト範囲情報はさまざまな方法で指定することができるが、一実施形態では、デフォルト範囲情報が記憶されているデフォルト範囲記憶要素が提供される。一実施形態では、デフォルト範囲記憶要素内に記憶された範囲情報は、現在の能力領域内の処理回路に利用可能な１つ以上の有界ポインタに関連する範囲情報から導出される。
【００２８】
一実施形態では、処理回路は、フェッチメモリアドレスを発行するように構成され、処理回路による次の実行のためにフェッチされる命令を識別し、デフォルト状態において、処理回路が、フェッチメモリアドレスの発行前に、処理回路に定義されているデフォルトフェッチ範囲情報を参照して、フェッチメモリアドレスへのアクセスが許可されているかどうかを決定するために、フェッチ範囲チェック動作を実行するように構成されている。しかし、実行状態にあるとき、処理回路はフェッチ範囲チェック動作を無効にするように構成されている。
【００２９】
実行状態にあるときにフェッチ範囲チェック動作を無効にすることにより、処理回路は、デフォルト状態のときにアクセスできなかった命令にアクセスすることが可能になる。したがって、これは、例外処理を行うときに実行される例外処理動作を実装するためにどの命令を実行するかについての柔軟性を提供する。
【００３０】
フェッチメモリアドレスはさまざまな方法で導出することができるが、一実施形態ではプログラムカウンタ値によって決定され、そのような実施形態では、デフォルトフェッチ範囲情報はプログラムカウンタ範囲情報である。
【００３１】
デフォルトフェッチ範囲情報は、さまざまな方法で指定することができるが、一実施形態では、現在の能力領域の処理回路に利用可能な有界ポインタの１つ以上によって指定されたメモリアドレスの許容範囲内のメモリアドレスの範囲に制限される。
【００３２】
一実施形態では、処理回路は複数の例外レベルで動作可能であり、各例外レベルは異なるソフトウェア実行特権を有する。次いで、処理回路は、処理回路によって行われた少なくとも例外処理のサブセットに応答して、処理回路が動作している例外レベルを変更するように構成することができる。一実施形態では、現在の範囲チェック状態はさまざまな例外レベルと関連性がないので、処理回路が少なくとも１つの例外レベルで動作しているとき、現在の範囲チェック状態は、同じ例外レベルに留まりながら実行状態とデフォルト状態との間で切り替えられてもよい。
【００３３】
一部の例では、例外処理を行うと、処理回路は同じ例外レベルのままであり、例外処理を行うと実行状態に遷移するだけで、やがて例外から復帰するときに制限状態に復帰する。
【００３４】
しかし、他の例では、例外処理を行うことによって処理回路は第１の例外レベルから第２の例外レベルに遷移し、保存された範囲状態記憶要素は、例外処理が行われる前に第１の例外レベルで処理回路によって使用されている範囲チェック状態を識別するように更新され、処理回路が第２の例外レベルに遷移すると、現在の範囲チェック状態は実行状態にセットされる。一実施形態では、第２の例外レベルは、第１の例外レベルよりも高いレベルのソフトウェア実行特権を有する。
【００３５】
処理回路は、第２の例外レベルで例外処理動作を実行している間、一実施形態では、その期間の全体にわたって実行状態に留まることができる。しかし、別の実施形態では、第２の例外レベルでの動作中、処理回路は、現在の範囲チェック状態を実行状態からデフォルト状態に変更するように構成することができる。特に、一実施形態では、処理回路が実行状態にある間に実行されるように制限される任意の変更を実行するために必要とされる限り、処理回路は実行状態に留まるように構成されてもよい。その後、処理回路は、例外処理動作の残りの部分についてデフォルト状態に復帰する。このような手法によって、実際に実行状態で動作する必要があるコードを、小さく、自己完結型で検証可能であるように制限することができる。第２の例外レベルで処理回路によって実行される他のコードは、処理回路が実行状態にある間は実行を信頼する必要はなく、代わりに処理回路はそのようなコードを実行する前にデフォルト状態に復帰する。
【００３６】
一実施形態では、例外から復帰するときに第１の例外レベルに復帰するように処理回路は構成され、例外からの復帰時に現在の範囲チェック状態がデフォルト状態から実行状態に変わることにならない限り、現在の範囲チェック記憶要素は、保存された範囲チェック状態を現在の範囲チェック状態として識別するように更新される。
【００３７】
例外から復帰するときの、デフォルト状態から実行状態への変更の試みの検出が処理される方法はいくつかある。一実施形態では、このようなシナリオの検出時に、適切な例外処理ルーチンを実装するためにさらなる例外処理を行うことができる。代替の実施形態では、処理状態の他のすべての態様は、処理回路が第１の例外レベルに復帰するときに復元されるが、これは範囲チェック状態を実行状態に変更するのではなく、デフォルト状態に強制的に留める。デフォルト状態では、デフォルト状態に関連するすべてのメモリアクセスチェックが実施されるので、メモリ内のどのアドレスに処理回路がアクセスできるかが制限される。
【００３８】
動作中、処理回路は、いくつかのシステムレジスタと、翻訳コンテキスト制御、システムコールおよび例外復帰などの動作にアクセスすることができる。一部の例では、無制限アクセスを許可する代わりに、既知のアクセス制御機構を使用して、処理回路によるシステムレジスタおよび動作へのアクセスにいくつかの制限を設けることができる。しかし、そのようなシステムレジスタおよび動作（本明細書では機能とも呼ばれる）へのアクセスは、能力領域によって提供されるセキュリティを潜在的に損なう可能性がある。この問題を軽減するために、一実施形態では、装置は、１つ以上のフィールドを有するアクセス制御記憶要素をさらに含み、各フィールドは、対応する機能セットに関連付けられ、処理回路がデフォルト状態にあるときの、その対応する機能セットの処理回路へのアクセス性を示す値を有する。実行状態にあるとき、処理回路の各対応する機能セットへのアクセスは、アクセス制御記憶装置内の関連する値とは無関係である。このような手法によって、デフォルト状態では、処理回路が特定の機能セットにアクセスする能力はアクセス制御レジスタの内容によって制限され、それにより能力領域によってもたらされるセキュリティが損なわれる可能性が低減される。しかし、実行状態にあるとき、アクセス制御記憶装置の内容は実質的に無視され、アクセス制御記憶装置によって制御されるさまざまな機能セットへの処理回路によるアクセスは、アクセス制御記憶装置内の関連する値によって制御されない。
【００３９】
代わりに、実行状態では、処理回路は特定の機能セットに無制限にアクセスすることができるか、または既存のアクセス制御機構によって制御されるアクセスを有することができる。しかし、デフォルト状態では、アクセス制御レジスタを使用することにより、実行状態にあるときの所定の制限を越えて、少なくとも一部の機能セットへのアクセスにさらなる制限を設けることができる。
【００４０】
一実施形態では、デフォルト状態では、処理回路はアクセス制御記憶要素を更新することができない。代わりに、アクセス制御記憶装置への更新は、処理回路が実行状態にある間に実行されるように制限される。
【００４１】
ここで、特定の実施形態を図面を参照して説明する。
【００４２】
図１は、命令を処理するための処理パイプライン４を含むデータ処理装置２の一例を概略的に示す。この例では、処理パイプライン４は、フェッチステージ６、デコードステージ８、発行ステージ１０、実行ステージ１２、およびライトバックステージ１４を含むいくつかのパイプラインステージを含むが、他のタイプまたはステージの組み合わせが提供されてもよい。例えば、一部の実施形態では、レジスタの名前変更を実行するための名前変更ステージを含むことができる。処理される命令はステージからステージへ移動し、あるステージで命令が保留されている間、別の命令がパイプライン４の異なるステージで保留されている可能性がある。
【００４３】
フェッチステージ６は、レベル１（Ｌ１）命令キャッシュ２０から命令をフェッチする。フェッチステージ６は、通常、連続する命令アドレスから順次命令をフェッチすることができる。しかし、フェッチステージは、分岐命令の結果を予測するための分岐予測器２２も有していてもよく、フェッチステージ６は、分岐がとられると予測される場合には（非連続）分岐ターゲットアドレスから、分岐がとられないと予測される場合には次の連続アドレスから命令をフェッチすることができる。分岐予測器２２は、いくつかの分岐がとられる可能性があるかどうかを予測するための情報を記憶するための１つ以上の分岐履歴テーブルを含むことができる。例えば、分岐履歴テーブルは、以前に実行された分岐の実際の結果を追跡するか、または分岐について行われた予測の信頼を表すためのカウンタを含むことができる。分岐予測器２２はまた、分岐命令の以前のターゲットアドレスをキャッシュするための分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）２４を含むことができ、これにより、次に同じ分岐命令に遭遇したときにこれらのターゲットアドレスを予測することができる。
【００４４】
フェッチされた命令はデコードステージ８に渡され、デコードステージ８は命令をデコードしてデコードされた命令を生成する。デコードされた命令は、適切な処理動作を実行するために実行ステージ１２を制御するための制御情報を含むことができる。キャッシュ２０からフェッチされた一部のより複雑な命令について、デコードステージ８は、それらの命令を複数のデコードされた命令にマッピングすることができ、これらはマイクロ動作（μｏｐまたはｕｏｐ）として知られている。したがって、Ｌ１命令キャッシュ２０からフェッチされた命令と、パイプラインの後のステージで見られるような命令との間には、一対一の関係はない。一般に、本出願における「命令」への言及は、マイクロ動作を含むものとして解釈されるべきである。
【００４５】
デコードされた命令は発行ステージ１０に渡され、発行ステージ１０は、命令の実行に必要なオペランドが利用可能かどうかを判定し、オペランドが利用可能であれば実行命令を発行する。一部の実施形態は、順序内処理をサポートしており、命令は、命令がＬ１命令キャッシュ２０からフェッチされたプログラム順序に対応する順序で実行のために発行される。他の実施形態は、順序外実行をサポートしており、命令は、プログラム順序とは異なる順序で実行ステージ１２に発行され得る。順序外処理は、前の命令がオペランドを待ちながら停止している間に、プログラム順序の中でオペランドが使用可能な後の命令を先に実行することができるため、性能を向上させるのに有用である。
【００４６】
発行ステージ１０は実行ステージ１２に命令を発行し、ここではさまざまなデータ処理動作を実行するために命令が実行される。例えば、実行ステージはいくつかの実行ユニット３０、３２、３４を含み、そこには整数値に対する算術演算または論理演算を実行するための算術／論理演算ユニット（ＡＬＵ）３０、浮動小数点形式で表現された値に対する動作を実行するための浮動小数点（ＦＰ）ユニット３２、レベル１（Ｌ１）データキャッシュ３６からレジスタ４０へデータ値をロードするためのロード動作、あるいはレジスタ４０からＬ１データキャッシュ３６へデータ値を記憶するための記憶動作を実行するためのロード／記憶ユニット３４が含まれる。これらは、提供され得る実行ユニットのタイプのほんの一部の例であり、他の多くの種類も提供され得ることが理解されるであろう。処理動作を実行するために、実行ステージ１２はレジスタ４０のセットからデータ値を読み出すことができる。実行された命令の結果は、ライトバックステージ１４によってレジスタ４０に書き戻される。
【００４７】
Ｌ１命令キャッシュ２０およびＬ１データキャッシュ３６は、複数のレベルのキャッシュを含むキャッシュ階層の一部であってもよい。例えば、レベル２（Ｌ２）キャッシュ４４を提供することもでき、任意選択的に、さらなるレベルのキャッシュを提供することもできる。この例では、Ｌ２キャッシュ４４は、Ｌ１命令キャッシュ２０とＬ１データキャッシュ３６との間で共有されているが、他の例は、別個のＬ２命令キャッシュとデータキャッシュとを有することができる。フェッチする命令がＬ１命令キャッシュ２０にない場合、Ｌ２キャッシュ４４からフェッチすることができ、同様に命令がＬ２キャッシュ４４にない場合、メインメモリ５０からフェッチすることができる。同様に、ロード命令に応答して、命令がＬ１データキャッシュ３６に存在しない場合、データはＬ２キャッシュ４４から、および必要に応じてメモリ５０からフェッチすることができる。キャッシュ階層を管理するために、任意の既知の方式を使用することができる。
【００４８】
プログラム命令およびデータ値を参照するためにパイプライン４によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメインメモリ５０、および任意選択的にキャッシュ階層の少なくとも一部のレベルも物理的にアドレス指定されてもよい。したがって、パイプライン４によって使用される仮想アドレスを、キャッシュまたはメモリにアクセスするために使用される物理アドレスに変換するために、変換ルックアサイドバッファ５２（ＴＬＢ）を設けることができる。例えば、ＴＬＢ５２はいくつかのエントリを含んでいてもよく、エントリの各々は、仮想アドレス空間の対応するページの仮想ページアドレスと、対応するページ内の仮想アドレスを物理アドレスに変換するために仮想ページアドレスをマッピングすべき対応する物理ページアドレスとを指定する。例えば、仮想および物理ページアドレスは、対応する仮想アドレスおよび物理アドレスの最上位部分に対応し、残りの最下位部分は、仮想アドレスを物理アドレスにマッピングするときには変化しない。アドレス変換情報と同様に、各ＴＬＢエントリは、アドレスの特定のページがパイプライン４の特定のモードでアクセス可能であるかどうかを示すようなアクセス許可を指定する何らかの情報を含むこともできる。一部の実施形態では、ＴＬＢエントリは、アドレスの対応するページの他の特性、例えば、キャッシュ階層のどのレベルが読取りまたは書込み動作に応答して更新されるか（例えば、キャッシュがライトバックモードまたはライトスルーモードで動作すべきかどうか）を定義するキャッシュポリシー情報、あるいはデータアクセスがパイプライン４によって発行された順序と比較して、対応するページ内のアドレスへのデータアクセスがメモリシステムによって再順序付け可能であるかどうかを定義する情報などを定義することができる。
【００４９】
図１は単一レベルのＴＬＢ５２を示しているが、レベル１（Ｌ１）ＴＬＢ５２がいくつかの最近アクセスされたページのアドレスを変換するためのＴＬＢエントリを含むように、そしてより多数のページのエントリを記憶するためのレベル２（Ｌ２）ＴＬＢが設けられるように、ＴＬＢの階層が設けられてもよい。必要なエントリがＬ１  ＴＬＢに存在しない場合、それはＬ２  ＴＬＢから、または階層内のさらなるＴＬＢからフェッチすることができる。アクセスするページについて必要なエントリがＴＬＢのいずれにもない場合、メモリ５０内のページテーブルにアクセスするためにページテーブルウォークを実行することができる。任意の既知のＴＬＢ管理スキームを本技術で使用することができる。
【００５０】
また、一部のシステムは、複数のレベルのアドレス変換をサポートすることができ、その結果、例えば、仮想アドレスを中間アドレスに変換するために第１のＴＬＢ（またはＴＬＢの階層）を使用することができ、１つ以上のさらなるＴＬＢを使用する第２レベルのアドレス変換は、中間アドレスを、キャッシュまたはメモリにアクセスするために使用される物理アドレスに変換することができる。これは、例えば第１レベルのアドレス変換がオペレーティングシステムによって管理され、第２レベルのアドレス変換がハイパーバイザによって管理される仮想化をサポートするのに有用である。
【００５１】
図１に示すように、装置２は、有界ポインタレジスタ６０のセットを有していてもよい。有界ポインタレジスタのセットは図１では汎用データレジスタ４０のセットと物理的に離れているように示されているが、一実施形態では、汎用データレジスタおよび有界ポインタレジスタの両方を提供するために同じ物理記憶装置を使用することができる。
【００５２】
各有界ポインタレジスタ６０は、アクセスすべきデータ値のアドレスを決定するために使用されるポインタ値６２と、対応するポインタ６２を使用するときのアドレスの許容範囲を指定する範囲情報６４とを含む。任意選択的に、有界ポインタレジスタ６０は、ポインタの使用に関する１つ以上の制限／許可を定義することができる他の制限情報６６（本明細書では許可情報とも呼ぶ）を含むことができる。例えば、制限６６を使用して、ポインタ６２を使用する命令の種類、またはポインタを使用できるパイプライン４のモードを制限することができる。したがって、範囲情報６４および制限情報６６は、ポインタ６２を使用することができる能力を定義するとみなすことができる。定義された機能を外れてポインタ６２を使用しようとすると、エラーが起きる可能性がある。範囲情報６４は、例えば、ポインタが特定の既知の範囲内に留まり、機密またはセキュリティ情報を含むかもしれないメモリアドレス空間の他の領域に逸脱しないようにするのに有用であり得る。例えば、メモリアドレスを識別するために使用される有界ポインタの１つを識別するメモリアクセス命令が実行されると、（本明細書では範囲チェック動作とも呼ばれる）範囲チェック動作が実行され、その境界ポインタに対して提供される明示的な範囲情報を参照して、メモリアドレスへのアクセスが許可されるかどうかが確認される。
【００５３】
同じ物理記憶装置が汎用データレジスタおよび有界ポインタレジスタの両方に使用される実施形態では、一実施形態では、ポインタ値６２は、例えば、対応する汎用レジスタに使用されるのと同じ記憶場所内に記憶されてもよい。
【００５４】
図２は、データまたは命令への不正アクセスから保護するために許容範囲が使用される命令のタイプの例を示す。図２の上部に示すように、特定の有界ポインタレジスタＰＲ１は、所与のポインタ値６２と範囲情報６４とを含み、この例では、これらは許容範囲の下限を定義する下限範囲アドレス６８と、許容範囲の上限を定義する上限範囲アドレス６９を使用して指定される。例えば、範囲６８、６９は、アドレス８００００〜８１０００の範囲を定義するようにセットされる。特定の命令が有界ポインタレジスタＰＲ１を参照し、ポインタ６２から決定されたアドレスがこの範囲外である場合、エラーが起きる可能性がある。
【００５５】
例えば、図２のＡ部に示すように、一部のシステムでは、ポインタレジスタ６０内のポインタ６２の値を、範囲情報６４によって指定された範囲外の値にセットしようと試みると、エラーが起きる可能性がある（ここではポインタが直接アドレスを指定するものとする）。これにより、ポインタ６２が指定範囲外の任意の値をとることを避けることができるので、ポインタを使用するあらゆるアクセスが許容範囲内におさまることが保証される。あるいは、図２のＢ部に示すように、命令がポインタ６２のアドレスによって特定される位置にアクセスしようとしたときに、そのアドレスが指定された範囲外にある場合、エラーが起きる可能性がある。したがって、ポインタ６２を指定範囲外の値にセットすることは依然として可能であるが、ポインタアドレス（またはポインタから導出されたアドレス）でのデータアクセスが試みられると、アドレスが許容範囲外にある場合、エラーが起きる可能性がある。他のシステムでは、図２のＡ部およびＢ部に示す両方のタイプの命令に応答してエラーが起きることがある。
【００５６】
範囲情報６４は、さまざまな方法でセットすることができる。例えば、安全なコード、またはオペレーティングシステムまたはハイパーバイザは、所与のポインタに許容される範囲を指定することができる。例えば、命令セットアーキテクチャは、所与のポインタ６２の範囲情報６４をセットまたは変更するためのいくつかの命令を含むことができ、これらの命令の実行は、特定のソフトウェアまたはプロセッサ４の特定のモードまたは例外レベルに制限することができる。後述する実施形態では、プロセッサはデフォルト状態と実行状態との間で切り替え可能であり、範囲情報を変更する上記能力は、プロセッサが実行状態で動作している場合に限定されてもよい。
【００５７】
ポインタを参照する特定の命令を実行するときに実行状態１２で使用される有界ポインタ記憶要素６０のセットに加えて、命令がレベル１命令キャッシュ２０からフェッチされるときにフェッチステージ６において同様の機能を提供するために、プログラムカウンタ機能（ＰＣＣ）レジスタ８０を使用することもできる。具体的には、フィールド８２内にプログラムカウンタポインタを記憶することができ、ＰＣＣ８０は、有界ポインタ記憶要素６０のセット内の各ポインタと共に提供される範囲および制限情報と同様の範囲情報８４および任意の適切な制限情報８６を提供する。
【００５８】
さらに、一実施形態では、汎用レジスタ４０内で非有界ポインタを指定し、メモリアクセスを実行するときに使用することもできる。そのような非境界ポインタを使用してアクセス可能なメモリアドレスを制限するために、いずれかの能力レジスタ内に含まれる範囲および制限情報と同様である範囲情報９２および制限データ９４の両方を指定するデフォルトデータ機能（ＤＤＣ）レジスタ９０を設けることができる。次に、汎用レジスタ４０内の非有界ポインタを参照してメモリアドレスを識別するメモリアクセス命令が実行されると、有界ポインタに関して実行された範囲チェック動作と同様の範囲チェック動作は、その非有界ポインタから導出された任意のアドレスに基づいて実行することができるが、この場合は、ＤＤＣレジスタ９０内に保持されている範囲および制限情報を考慮している。このような手法によって、例えば、既存のソフトウェアライブラリ内のある能力非認識コードを利用したい能力認識コードは、汎用レジスタ４０からアクセスされたポインタがその能力非認識コードを実行するときにどのように使用されるかに関する制約を設けることができるようにＤＤＣレジスタ９０をセットすることができる。特に、範囲情報は、そのような能力非認識コードを実行するときにアクセス可能なアドレス範囲を制限するために使用することができる。
【００５９】
ＰＣＣレジスタ８０またはＤＤＣレジスタ９０に指定された範囲情報および関連制限は、さまざまな方法でセットすることができる。しかし、一実施形態では、その情報は、現在の能力領域内の処理回路に利用可能な１つ以上の有界ポインタを使用して決定されるので、現在の能力領域について識別されたメモリアドレス範囲外にあるＰＣＣまたはＤＤＣベースの範囲チェックを使用してメモリアドレスにアクセスすることはできない。
【００６０】
図３は、個々のデータブロックに関連して、それらのデータブロックが能力（すなわち、有界ポインタおよび関連する制限情報）を表すか、または通常データを表すかを識別するのにタグビットを使用する方法を概略的に示す。特に、メモリアドレス空間１１０は、典型的には特定のサイズを有する一連のデータブロック１１５を記憶する。説明のために、この例では、各データブロックが１２８ビットを含むと仮定する。各データブロック１１５に関連して、一例ではタグビットと呼ばれる単一のビットフィールドであるタグフィールド１２０が提供され、これは関連するデータブロックが能力を表すことを識別するようにセットされ、関連するデータブロックが正常なデータを表していることを示すようにクリアされているため、能力として扱うことはできない。セットまたはクリア状態に関連する実際の値は、実施形態に依存して変化する可能性があるが、説明すると、一実施形態では、タグビットが１の値を有する場合、関連するデータブロックが能力であることを示し、値が０の場合、関連するデータブロックに通常データが含まれていることを示す。
【００６１】
図３に示す能力レジスタ１００のような有界ポインタレジスタ６０（本明細書では能力レジスタとも呼ばれる）の１つに能力がロードされると、タグビットは能力情報と共に移動する。したがって、能力レジスタ１００に能力がロードされると、能力レジスタには、ポインタ１０２、範囲情報１０４、および制限情報１０６（以下、許可情報と呼ばれる）がロードされる。さらに、その能力レジスタに関連して、またはその能力レジスタ内の特定のビットフィールドとして、タグビット１０８は、内容が能力を表すことを識別するようにセットされる。同様に、能力がメモリに戻って記憶されるとき、関連するタグビット１２０は、能力が記憶されるデータブロックに関連してセットされる。このような手法によって、能力と通常データとを区別することができ、したがって、通常データを能力として使用することができないことが保証される。
【００６２】
上述したように、処理回路に利用可能な現在の有界ポインタセット（能力レジスタ６０を介して直接アクセス可能であるか、能力レジスタの有界ポインタの１つを介してアクセス可能なメモリアドレス空間内に存在する）は、能力領域を形成する。したがって、能力領域は、プロセッサによってアクセス可能なメモリの利用可能な領域を、任意の関連する許可／制限と共に識別する。能力領域を変更するための制御された機構を提供するために、一実施形態によれば、本明細書では範囲チェック状態と呼ばれる、追加の状態が提供される。特に、範囲チェック状態は、デフォルト状態または実行状態にセットされてもよい。デフォルト状態は、処理回路がセットされる典型的な状態であり、デフォルト状態では、メモリにアクセスしようとするときに上述の範囲チェックのすべてが実行される。したがって、有界ポインタ記憶要素６０内の有界ポインタの１つを参照してアドレスを識別することによってメモリにアクセスしようとするとき、有界ポインタ記憶要素内のその有界ポインタに関連付けられた関連する明示的な範囲情報を使用して範囲チェック動作が実行される。同様に、汎用レジスタ４０内の非有界ポインタから導出されたメモリアドレスにアクセスしようとするとき、ＤＤＣレジスタ９０内のデフォルト範囲情報は、範囲チェック動作を実行するときに参照される。さらに、フェッチステージ６が特定のメモリアドレスから命令をフェッチしようとするとき、ＰＣＣレジスタ８０内の範囲情報は、範囲チェック動作を実行するときに参照される。アクセスが範囲チェック動作を考慮して進めるように許可されていると仮定すると、関連するデータまたは命令は、メモリアドレスから（データ／命令がキャッシュ内部に格納されている場合にはキャッシュ２０、３６、４４のレベルの１つ、またはキャッシュレベルにメモリアドレスがない場合にはメモリ５０のどちらかから）取得される。
【００６３】
しかし、処理回路が実行状態にされると、一実施形態では、ＤＤＣレジスタ９０またはＰＣＣレジスタ８０の内容を使用して実行されたであろうチェックは無効にされる。したがって、一実施形態では、有界ポインタがメモリアドレスを識別するために引き続き使用される場合、それらの有界ポインタに関連付けられた明示的な範囲情報を参照して実行される範囲チェックが依然として実行される。ただし、ＤＤＣまたはＰＣＣの内容の使用によって発生するデフォルト範囲チェックは無効にされる。その結果、実行状態にあるとき、処理回路は、ＤＤＣ範囲情報に基づいたチェックが行われることなく、汎用レジスタ４０で指定された非境界ポインタを使用してメモリにアクセスすることができる。
【００６４】
同様に、フェッチステージ６は、ＰＣＣレジスタ８０内の範囲情報を参照して範囲チェックを実行することなく、さまざまなメモリアドレスから命令をフェッチすることができる。ＰＣＣベースのチェックを無効にすることにより、処理回路は、現在の能力領域のメモリアドレスの許容範囲内に存在しないメモリアドレスに存在する可能性のある命令を取得することができ、それによって実行状態で実行される命令に関する柔軟性を高めることができる。
【００６５】
さらに、範囲チェックを実行することなく、実行状態にある間に非有界ポインタを使用してメモリにアクセスすることを可能にすることによって、処理回路が実行状態にある間に能力によって課される制約が低減されるので、実行状態中のそれらの能力の影響が低減される。これは図４に概略的に示す。
【００６６】
特に、図４に示すように、メモリ内でデータまたは能力にアクセスするにはいくつかの方法がある。具体的には、箱１５０、１６０によって示す機構を使用してメモリ内のデータにアクセスすることができ、箱１５５、１６５によって示す機構を使用して能力にアクセスすることができる。機構そのものに関して、これらの機構は、汎用データレジスタがポインタ（すなわち、非有界ポインタ）を識別するために使用されるか、または能力レジスタ６０がポインタ（すなわち、有界ポインタ）を識別するために使用されるかどうかによって異なる。箱１６０、１６５に示すように、メモリアドレスがその有界ポインタから導出されるように有界ポインタが指定されている場合、関連する有界ポインタについて指定された範囲および制限情報を使用して、明示的な能力チェック（範囲チェックを含む）が実行される。対照的に、箱１５０および１５５で示すように、汎用レジスタ４０内の非有界ポインタが指定され、その非有界ポインタからメモリアドレスが導出された場合、デフォルト能力チェック（本明細書では、暗黙的な能力チェックとも呼ばれる）が、ＤＤＣレジスタ９０内のデフォルト範囲および制限情報を使用して実行される。
【００６７】
実行状態にあるとき、機構１５０、１５５は実質的に無効にされる。その結果、汎用レジスタ４０内の非有界ポインタを指定するロード命令または記憶命令を介して、範囲チェック動作を実行することなく、レジスタ４０、６０とキャッシュ／メモリとの間で汎用データおよび能力の両方を移動させることができる。したがって、実行状態にあるとき、処理回路は、デフォルト状態にあるときに施行される能力領域に基づいてアクセスすることができないメモリの領域にアクセスすることができる。
【００６８】
図１に戻ると、装置は、その動作中に処理回路によって参照されるさまざまな制御および状態情報を記憶するさまざまな制御／状態レジスタ７０にアクセスする。この情報は、プロセッサの現在の動作に関するさまざまな状態情報を取得する現在のプロセス状態７４を含む。この現在のプロセス状態情報内では、上述した現在の範囲チェック状態も取得されるので、処理回路がデフォルト状態または実行状態のどちらで動作しているかが識別される。単一の箱７４として示されているが、現在のプロセス状態は、必ずしもすべてが単一のレジスタ内に記憶されるわけではなく、利用可能な制御／状態レジスタ７０内のいくつかの制御および状態レジスタ内に記憶されてもよい。
【００６９】
一実施形態によれば、実行状態へのエントリは、特定の所定のイベントの発生時にのみ行われるように制約される。特に、一実施形態では、実行状態へのエントリを引き起こすイベントは、例外処理の実行である。例外処理の実行は、割り込み、システムコール、障害などのさまざまな異なる機構によって起きる。一実施形態によれば、このような例外処理が行われるとき、処理回路の範囲チェック状態は、例外処理が行われた時点の範囲チェック状態に関係なく、実行状態に遷移させられる。しかし、さらに、そのような例外処理を行うと、現在のプロセス状態７４は、保存されたプロセス状態７２として取得される。さらに、保存されたプロセス状態７２は、単一のレジスタ内、または複数のレジスタ内に記憶されてもよい。保存されたプロセス状態の一部として、例外処理が行われた時点で存在していた現在の範囲チェック状態も保存されるため、例外が発生した時点で処理回路がデフォルト状態にあったか実行状態にあったかが識別される。次に、現在のプロセス状態７４内で現在の範囲チェック状態が実行状態に更新され、その後処理回路によって例外処理が実行されて例外を処理する。実行状態では、上述したようにデフォルト範囲チェック動作は無効にされているので、例外から復帰したときに処理回路が利用できるようになる機能のセットに変更を加えることができる。
【００７０】
その後処理回路が例外から復帰すると、保存された処理状態は現在の処理状態に戻され、処理回路は例外がとられる前に実行していた処理を継続することができる。しかし、この時点では、処理回路が実行状態にある間に利用可能な有界ポインタのセットに対して行われた変更により、修正された能力領域を使用して動作している可能性がある。
【００７１】
図１にも示すように、制御／状態レジスタ７０には、任意選択的にアクセス制御レジスタ７６が追加されてもよい。このレジスタの目的は、図１０および図１１を参照して後に説明する。
【００７２】
図５は、保存されたプロセス状態レジスタ７２をより詳細に示す。特に、例外処理を行うと、プロセッサの現在の例外レベルのプロセス状態１７０は、保存されたプロセス状態レジスタ７２の１つ以上のフィールド内に取得される。例外レベルは、ソフトウェア実行特権のレベルを識別し、後述するように、一実施形態では、処理回路は複数の異なる例外レベルで動作することができ、例外処理を行うことによってそれらの例外レベル間の遷移が可能となる。複数の例外レベルが処理回路に利用可能である場合、保存されたプロセス状態は、状態情報の一部として、例外処理が行われる前にプロセッサが実行していた現在の例外レベルを含む。しかし、範囲チェック状態のデフォルトおよび実行状態を利用する説明された実施形態の技法は、プロセッサに利用可能な複数の例外レベルがあるか、または単一の例外レベルのみであるかに関係なく実施することができる。特に、デフォルト状態と実行状態との間の遷移、およびデフォルト状態への遷移は、そのプロセス中に例外レベルに変化があるかどうかにかかわらず発生する可能性があるので、範囲チェック状態は、プロセッサの例外レベルと関連性がないとみなすことができる。
【００７３】
図５に示すように、保存されたプロセス状態レジスタ内に取得された通常のプロセス状態情報１７０に加えて、範囲チェック状態フィールド１７５も設けられており、例外処理が行われる直前の処理回路の現在の範囲チェック状態がそこに取得される。範囲チェック状態の先の説明から、この情報は能力がメモリアクセスをどのように制約するかを効果的に識別し、したがって本明細書において範囲チェック状態を能力影響状態と呼ぶことができることは理解されよう。
【００７４】
上述のように、現在の範囲チェック状態は、メモリへのアクセス時に明示的および暗黙的（デフォルト）の両方の能力がチェックされるデフォルト（すなわち、制限された）状態か、またはメモリへのアクセス時に暗黙的な能力が検査されない実行状態（例外処理を行うときにアクティブにされる）のどちらかをとってもよい。一実施形態では、明示的能力は実行状態でも依然としてチェックされるので、有界ポインタからメモリアドレスが導出されるあらゆるアクセスは、その有界ポインタの明示的範囲および制限情報を考慮して依然としてチェックされる。しかし、別の実施形態では、このような明示的な能力チェックは、実行状態では無効にすることができるので、実行状態にあるときに処理回路によってアクセス可能なメモリアドレスについてさらなる柔軟性を提供する。
【００７５】
図６は、一実施形態による、例外処理を行うときに実行されるステップを示すフロー図である。特に、ステップ２００において例外処理を行うと判断した場合、ステップ２０５において、現在のプロセス状態（プロセッサの現在の例外レベルを含む）が、保存されたプロセス状態レジスタ７２に取得される。さらに、上述したように、現在の範囲チェック状態も、そのプロセス状態の一部として保存されたプロセス状態レジスタ内に記憶される。
【００７６】
その後、ステップ２１０において、現在のプロセス状態７４内の適切なフィールドを更新することによって、実行状態が現在のプロセス状態として選択される。実行状態は、例外処理が行われた時点の範囲チェック状態に関係なく選択される。
【００７７】
その後、ステップ２１５において、処理回路が実行状態で例外処理動作を実行している間に、能力領域を変更するために必要な任意のステップが実行される。
【００７８】
その後、例外処理動作によって必要とされる他のステップが実行される。これらは、実行状態に留まっている間に一実施形態で実行することができるが、別の実施形態では、処理回路は、ステップ２２０で実行されるこれらの追加のステップについて制限された（すなわち、デフォルトの）状態に復帰する。特に、この後者の手法は、複数の例外レベルが提供され、例外処理の実行が第１の例外レベルから第２の例外レベルへの遷移を引き起こす実施形態において採用されてもよい。
【００７９】
その後、プロセスはステップ２２５に進み、そこでプロセスは例外から復帰する。この時点で、保存されたプロセス状態情報７２は現在のプロセス状態７４に戻され、処理回路は例外処理が行われる前に存在した状態に復帰することができる。
【００８０】
ステップ２２０の間に、例外処理動作の少なくとも一部のために制限状態に復帰することが決定されると、一実施形態では、例外からの復帰が制限状態から直接起きることがある。しかし、別の実施形態では、元の例外からの復帰が実行状態から生じることを確実にするために、元の例外から復帰する前に実行状態に復帰するようにさらなる例外が発生するように処理を構成することができる。例外処理が例外から復帰する前に強制的に再び実行状態にされる場合、制限状態から実行状態に復帰しようとする例外復帰の可能性を回避することができる（処理回路は元の例外処理が行われる前に実行状態にあった可能性がある）。さもなければ、例外復帰を処理するときに、例外復帰が制限された状態から実行状態に復帰することを求めている状況に対処するために、特別なケース処理を導入する必要があるかもしれない。これについては、図７を参照してより詳細に説明する。
【００８１】
特に、ステップ２５０で、例外復帰が行われると判定された場合、プロセスはステップ２５５に進み、処理回路が現在実行状態にあるかどうかが判定される。上述したように、一実施形態では、例外復帰が行われるときに処理回路が常に実行状態になるように強制することができ、この場合、プロセスは常にステップ２６０に進み、そこでプロセッサはＳＰＳＲレジスタ７２に保存されたプロセス状態に戻され、その結果、現在の範囲チェック状態はＳＰＳＲレジスタに記憶された範囲チェック状態に戻される。
【００８２】
しかし、実施形態によって例外が実行状態またはデフォルト状態のいずれかから復帰することができる場合、ステップ２５５で処理回路が現在実行状態にないと判定された場合、プロセスはステップ２６５に進み、保存された範囲チェック状態が実行状態であることをＳＰＳＲレジスタが識別するか否かが判定される。実行状態でない場合、プロセスはステップ２６０に進むことができるが、保存された範囲チェック状態が実行状態である場合に、プロセスはステップ２７０に進み、特別なケース処理が実行される。
【００８３】
特別なケース処理はさまざまな形態をとることができるが、一実施形態では、適切な例外処理を開始するためさらなる例外をトリガすることを含む。あるいは、プロセッサをＳＰＳＲに保存されたプロセス状態に戻すこともできるが、現在の範囲チェック状態は、ＳＰＳＲに取得された実行状態ではなく制限状態にセットされている。その結果、例外からの復帰時に処理回路は制限状態に強制され、したがって、現在の能力領域に適用可能なすべての範囲チェックが実施される。
【００８４】
図８は、一実施形態におけるさまざまな例外レベル間の相互関係を示す。例外レベルＥＬ０はソフトウェア実行権限が最も低く、ＥＬ０での実行は特権のない実行と呼ばれる。ｎの値が１から３に増加すると、ソフトウェア実行特権が増えることを示す。ＥＬ２例外レベルは、プロセッサの仮想化をサポートする。一方、ＥＬ３ステージは、２つのセキュリティ状態、すなわちセキュア状態および非セキュア状態をサポートする。
【００８５】
これにより、図８に示す一般的なツリー構造が生じる。特に、図８に示すＥＬ３  ３００のようなＥＬ３例外レベルが提供される場合、それはセキュア状態で実行される。非セキュア状態では、必要に応じて仮想化をサポートすることが可能であり、したがってＥＬ２例外レベル３０５を非セキュア状態に提供することができる。セキュア状態では、一実施形態では、ＥＬ２レベルは提供されず、その代わりにＥＬ１レベル３３０がセキュア状態内に提供されてもよく、その下でいくつかの異なるＥＬ０レベル３４０、３４２が提供されてもよい。
【００８６】
非セキュア状態では、ＥＬ２レベル３０５が提供される場合、これはその下の複数のＥＬ１レベル３１０、３１２、３１４をサポートすることができ、これらのＥＬ１レベルのそれぞれは、参照番号３２０、３２２によって概略的に示すような１つ以上のＥＬ０レベルをサポートしてもよい。
【００８７】
さまざまな例外レベル間の遷移は、例外処理の実行によって行われる。ただし、すべての例外で例外レベルが変更されるわけではない。例えば、一実施形態では、ＥＬ０からの例外は、通常ＥＬ１で行われる（一部の構成ではＥＬ２でも行われる）。一実施形態では、ＥＬ１以上の例外処理は、一般に同じ例外レベルで行われてもよい。しかし、ＥＬ１からＥＬ２／ＥＬ３およびＥＬ２からＥＬ３までのさまざまな例外が提供されてもよく、同様の目的で使用されてもよい。ＥＬ３における例外処理は、一実施形態では常にＥＬ３で行われる。図８に示すように、保存されたプロセス状態レジスタは、各例外レベルに関連して設けることができる。ＥＬ０からの例外処理が常にＥＬ１で行われる場合、ＥＬ０レベルに関連する別個のＳＰＳＲは必要ない。しかし、一実施形態では、ＥＬ０からのある種の例外処理をＥＬ０レベルで行うことができ、その場合、ＥＬ０のための別個のＳＰＳＲレジスタを設けることができる。
【００８８】
図９は、一実施形態による、例外処理を行った結果として起こりうる遷移のシーケンス例を示す。開始時に、処理回路は制限／デフォルト状態にあり、ＥＬ０で実行されていると仮定する。点４００で、例外処理が行われてＥＬ１レベルになり、その結果、ＥＬ１レベルに関連するＳＰＳＲレジスタは、プロセッサがＥＬ０レベルにあったときの現在のプロセス状態を取得するが、それは制限された状態を保存された範囲チェック状態として取得することを含む。点４０５でＥＬ１ステージに遷移すると、実行状態で処理が開始され、したがって例外処理動作は、処理回路に利用可能な有界ポインタのセットに対する変更を実行し、それにより能力領域を変更することができる。実行状態で実行される必要がある任意のステップに続いて、実行状態に留まる間に例外処理動作の残りの部分が実行されてもよく、または一実施形態では、処理回路は、例外処理動作の残りの部分のために制限状態に復帰してもよい。
【００８９】
点４１０において、別の例外処理が行われてＥＬ１レベルからＥＬ２レベルになると仮定する。したがって、ＥＬ２に関連するＳＰＳＲレジスタは、点４１０で、処理回路の状態Ｘを取得する。この取得されたプロセス状態Ｘの一部として、点４１０において実行中の範囲チェック状態が取得されるが、これは点４０５と点４１０との間で実行される処理に応じて実行状態または制限状態となる。
【００９０】
点４１０での現在の範囲チェック状態とは関係なく、点４１５でＥＬ２レベルになると、処理は実行状態で開始される。ステップ４０５で実行される処理を参照して上述したように、これにより、処理回路は、必要に応じて能力領域を変更し、その後、処理が実行状態で継続されてもよいし、範囲チェック状態が制限状態に戻されてもよい。
【００９１】
点４２０で、現在の例外からの復帰が行われると仮定し、その時点で、ＥＬ２レベルの処理回路は状態Ｙになる（ここで範囲チェック状態は実行状態または制限状態のいずれかであり得る）。
【００９２】
点４２５でＥＬ１レベルに復帰する間に、ＥＬ１状態を状態Ｘに復帰させるために、レベルＥＬ２に関連するＳＰＳＲレジスタの内容が現在のプロセス状態レジスタ７４にコピーされる。しかし、状態Ｙが制限された状態を識別した場合、および状態Ｘが実行状態を識別した場合、上述した図７のステップ２７０の特別なケース処理が一実施形態では実施される。
【００９３】
処理回路は、点４２５と点４３０との間はレベルＥＬ１で継続し、点４３０で、元の例外からの復帰が実行され、点４３５でＥＬ０レベルに復帰する。このプロセスの一部として、ＥＬ１レベルに関連するＳＰＳＲレジスタを使用して、点４００で取得された保存されたプロセス状態が現在のプロセス状態７４に戻され、これにより点４３５で処理回路が制限状態に復帰する。
【００９４】
図１を参照して上述したように、一実施形態では、アクセス制御レジスタ７６を設けることができる。特に、各例外レベルでは、プログラムは、いくつかのシステムレジスタおよび翻訳コンテキスト制御、システムコールおよび例外復帰などの動作にアクセスすることができる。この機能へのアクセスは、能力領域によって提供されるセキュリティを潜在的に損なう可能性があり、アクセス制御レジスタの提供は、特定の能力領域におけるこれらの機能の異なるセットへのアクセスを制限する機構を提供する。具体的には、図１０に示すように、アクセス制御レジスタ７６は、複数のフィールド４５２、４５４、４５６を含むことができ、各フィールドは、特定の機能セットに関連付けられる。各フィールドの値は、対応する機能が処理回路にアクセス可能であるかどうかを識別する。一実施形態では、単一のアクセス制御レジスタ７６をすべての例外レベルに設けることもできるが、各例外レベルに対して別個のアクセス制御レジスタを設けることもできる。
【００９５】
図１１に示すように、ステップ４７０で、処理回路が実行状態にあると判定された場合、プロセスはステップ４７５に進み、機能へのプロセッサのアクセスは、アクセス制御レジスタの内容とは無関係である。したがって、アクセス制御レジスタ内の値は、処理回路が実行状態にあるときは何の影響も与えない。代わりに、処理回路は機能に無制限にアクセスすることができるか、またはそのアクセスはある既存のアクセス制御機構によって決定されてもよい。
【００９６】
しかし、ステップ４７０で、処理回路が実行状態にないと判定された場合、ステップ４８０に示すように、プロセッサにアクセス可能な機能は、アクセス制御レジスタの内容によって決定される。したがって、デフォルト状態の処理回路に利用可能な機能は、そのようなアクセス制御レジスタの使用によってさらに制限することができ、実行状態にあるときに適用可能な任意の制約を超える追加の制約が設けられる。
【００９７】
また、アクセス制御レジスタフィールドは、処理回路によってアクセス可能な利用可能な機能のすべてに必ずしも対応するとは限らないことにも留意されたい。したがって、一実施形態では、アクセス制御レジスタのフィールドによってカバーされない機能セット上の既存のアクセス制御は、処理回路がデフォルト状態にあるか実行状態にあるかに関係なく有効なままである。
【００９８】
一実施形態では、処理回路がデフォルト状態で実行されているとき、アクセス制御レジスタ７６の内容を変更することはできない。代わりに、アクセス制御レジスタへの変更は、実行状態で実行される処理回路に限定される。個々の例外レベルについて個別のアクセス制御レジスタを有する実施形態では、少なくとも１つの例外レベルに対するアクセス制御レジスタは、より高い例外レベルで実行状態で実行する処理回路によってのみ変更可能であるように構成することができる。
【００９９】
上記の実施形態は、データ処理装置の動作中に、処理回路に利用可能な能力領域を変更できるようにするための効率的かつ制御された機構を提供する。この目的のために専用の実行状態を提供し、実行状態に入ることを例外処理の実行のような所定のイベントに制限することにより、特定の範囲チェックを一時的に無効にするための制御された環境が提供され、これにより能力領域を定義する有界ポインタのセットへの変更が可能となる。
【０１００】
本出願において、「〜に構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの配置または相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「構成されている」は、定義された動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【０１０１】
本発明の例示的な実施形態を添付図面を参照して詳細に説明したが、本発明はこれらの詳細な実施形態に限定されないこと、および添付の特許請求の範囲によって規定される本発明の範囲および精神から逸脱することなく、さまざまな変更、追加および修正が当業者によって実施され得ることが理解されるであろう。例えば、従属項の特徴のさまざまな組み合わせは、本発明の範囲から逸脱することなく、独立項の特徴によって行うことができる。
【図１】
2018536238.tif 000003
【図２】
2018536238.tif 000004
【図３】
2018536238.tif 000005
【図４】
2018536238.tif 000006
【図５】
2018536238.tif 000007
【図６】
2018536238.tif 000008
【図７】
2018536238.tif 000009
【図８】
2018536238.tif 000010
【図９】
2018536238.tif 000011
【図１０】
2018536238.tif 000012
【図１１】
2018536238.tif 000013
【国際調査報告】
2018536238.tif 000014
2018536238.tif 000015
2018536238.tif 000016