(57)【特許請求の範囲】
【請求項１】
データ処理を行うように構成される処理回路と、
複数の記憶領域を含むメモリ属性ユニットとを備えるデータ処理装置であって、
各記憶領域が、前記処理回路による対応メモリ・アドレス範囲へのアクセスを制御するための属性データを格納するように構成され、
ある目標メモリ・アドレスに応答して、前記処理回路が領域特定演算を行って、前記メモリ属性ユニットの前記複数の記憶領域のどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応すると前記メモリ属性ユニットによって示されている対応記憶領域であるか特定するための領域特定値を出力するように構成されており、前記目標メモリ・アドレスが物理アドレスであり、前記領域特定値が前記データ処理装置によって実行される少なくとも一部のソフトウェアの利用に供される、
データ処理装置。
【請求項２】
前記処理回路が、領域特定命令が前記目標メモリ・アドレスを指定することに応答して前記領域特定演算を行うように構成される、請求項１に記載のデータ処理装置。
【請求項３】
前記処理回路が、命令が所定のレジスタに値を書き込むことに応答して前記領域特定演算を行うように構成される、請求項１に記載のデータ処理装置。
【請求項４】
前記所定のレジスタに書き込まれる前記値が前記目標メモリ・アドレスである、請求項３に記載のデータ処理装置。
【請求項５】
（ａ）前記メモリ属性ユニットが無効化されたか、
（ｂ）前記目標メモリ・アドレスが前記複数の領域のいずれにも対応しないか、
（ｃ）前記目標メモリ・アドレスが前記複数の領域のうち２つ以上に対応するか、
（ｄ）前記目標メモリ・アドレスが、有効化されている前記複数の領域のうち２つ以上に対応するか、
（ｅ）前記目標メモリ・アドレスが、有効化されている前記複数の領域のいずれにも対応しないか、または
（ｆ）セキュア・ドメイン及び低セキュア・ドメインを含む複数の動作ドメインを有する前記処理回路であって、セキュア・ドメインで動作しているとき、当該処理回路が低セキュア・ドメインで動作しているときにはアクセス不可能である少なくともいくつかのデータにアクセスするところの前記処理回路が低セキュア・ドメインで動作しているとき前記領域特定演算が行われた、場合に、
前記処理回路が無効な領域特定値を出力するように構成される、請求項１から４までのいずれかに記載のデータ処理装置。
【請求項６】
前記無効な領域特定値が、前記複数の記憶領域のうち１つを表さない所定の値を含む、請求項５に記載のデータ処理装置。
【請求項７】
前記無効な領域特定値が、前記領域特定値が無効であるか否かを示す妥当性フラグに関連付けられた領域特定値を含む、請求項５に記載のデータ処理装置。
【請求項８】
前記領域特定演算において、前記処理回路が、
（ａ）前記対応記憶領域に格納されている前記属性データのうち少なくとも一部のデータ、
（ｂ）前記対応記憶領域に格納されている前記属性データのうち少なくとも一部のデータから導出された情報、
（ｃ）前記対応記憶領域に対するメモリ・アドレス範囲に関連付けられたセキュリティ状態を示すもの、
（ｄ）前記対応記憶領域に対するメモリ・アドレス範囲の先頭アドレスに対応する値、
（ｅ）前記対応記憶領域に対するメモリ・アドレス範囲の末尾アドレスに対応する値、及び
（ｆ）前記対応記憶領域に対するメモリ・アドレス範囲のサイズに対応する値
のうち少なくとも１つを含む追加情報を出力するように構成される、請求項１から７までのいずれかに記載のデータ処理装置。
【請求項９】
前記領域特定演算において、前記処理回路が宛先レジスタの少なくとも一部分に前記領域特定値を書き込むように構成される、請求項１から８までのいずれかに記載のデータ処理装置。
【請求項１０】
前記領域特定値が前記対応記憶領域の領域番号を含む、請求項１から９までのいずれかに記載のデータ処理装置。
【請求項１１】
前記領域特定演算において、前記処理回路が前記メモリ属性ユニットを制御して、前記複数の記憶領域のどれが前記対応記憶領域であるかに基づいて前記領域番号を生成するように構成される、請求項１０に記載のデータ処理装置。
【請求項１２】
前記メモリ属性ユニットの各記憶領域が前記記憶領域の前記領域番号を格納するように構成され、前記領域特定演算において、前記処理回路が前記メモリ属性ユニットを制御して、前記対応記憶領域から前記領域番号を出力するように構成される、請求項１０に記載のデータ処理装置。
【請求項１３】
前記メモリ属性ユニットが、複数の第１の記憶領域を含む第１のメモリ属性ユニットであり、第１の記憶領域がそれぞれ、対応する第１のメモリ・アドレス範囲へのアクセスを制御するための第１の属性データを格納するように構成され、
前記データ処理装置が、複数の第２の記憶領域を含む第２のメモリ属性ユニットを含み、第２の記憶領域がそれぞれ、対応する第２のメモリ・アドレス範囲へのアクセスを制御するための第２の属性データを格納するように構成され、
前記領域特定演算において、前記複数の第１の記憶領域のどれが前記目標メモリ・アドレスを含む第１のメモリ・アドレス範囲に対応すると前記第１のメモリ属性ユニットによって示されている対応する第１の記憶領域であるか特定するための第１の領域特定値及び、前記複数の第２の記憶領域のどれが前記目標メモリ・アドレスを含む第２のメモリ・アドレス範囲に対応すると前記第２のメモリ属性ユニットによって示されている対応する第２の記憶領域であるか特定するための第２の領域特定値を出力するように、前記処理回路が構成される、
請求項１から１２までのいずれかに記載のデータ処理装置。
【請求項１４】
前記領域特定演算において、前記処理回路が、前記対応する第１の記憶領域に格納されている前記第１の属性データの少なくとも一部及び、前記対応する第２の記憶領域に格納されている前記第２の属性データの少なくとも一部を使用して結合属性パラメータを出力するように構成される、請求項１３に記載のデータ処理装置。
【請求項１５】
前記処理回路がセキュア・ドメイン及び低セキュア・ドメインを含む複数の動作ドメインを有し、前記処理回路が前記セキュア・ドメインで動作しているときは、前記処理回路が前記低セキュア・ドメインで動作しているときにアクセスできない少なくとも一部のデータに前記処理回路がアクセスすることができる、請求項１から１２までのいずれかに記載のデータ処理装置。
【請求項１６】
前記メモリ属性ユニットがセキュリティ・保護ユニットを備え、前記処理回路が前記セキュリティ保護ユニットの前記属性データを使用して、指定されたメモリ・アドレスに前記複数のドメインのどれが関連するか判断するように構成され、前記処理回路が前記低セキュア・ドメインで動作しているときは前記セキュア・ドメインに関連するメモリ・アドレスが前記処置回路からアクセス不可能である、請求項１５に記載のデータ処理装置。
【請求項１７】
前記処理回路が前記低セキュア・ドメインで動作しているときに前記領域特定演算が実行されると、前記処理回路が前記メモリ属性ユニットの前記対応記憶領域を特定する前記領域特定値を出力することを禁止するように構成される、請求項１５及び１６のいずれかに記載のデータ処理装置。
【請求項１８】
（ｉ）前記セキュア・ドメインで動作しているときに前記処理回路によるメモリ・アドレス範囲へのアクセスを制御するための属性データを格納するように構成される、セキュア・メモリ保護ユニットと、
（ｉｉ）前記低セキュア・ドメインで動作しているときに前記処理回路によるメモリ・アドレス範囲へのアクセスを制御するための属性データを格納するように構成される、低セキュア・メモリ保護ユニットとをさらに備え、
前記低セキュア・ドメインで動作しているときは前記処理回路から前記セキュア・メモリ保護ユニットがアクセス不可能である、請求項１５から１７までのいずれかに記載のデータ処理装置。
【請求項１９】
前記領域特定演算が、前記セキュア・メモリ保護ユニット及び前記低セキュア・メモリ保護ユニットから選定メモリ保護ユニットを選択し、
前記領域特定演算において、前記選定メモリ保護ユニットによって前記複数の記憶領域のうちどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応すると示されるか特定する領域特定値を出力するように前記処理回路が構成される、
請求項１８に記載のデータ処理装置。
【請求項２０】
前記処理動作が前記低セキュア・ドメインで動作しているときに前記領域特定演算が行われて、前記領域特定演算が前記選定メモリ保護ユニットとして前記セキュア・メモリ保護ユニットを選択すると、前記処理回路が前記セキュア・メモリ保護ユニットの前記対応記憶領域を特定する前記領域特定値の出力を禁止するように構成される、
請求項１９に記載のデータ処理装置。
【請求項２１】
データ処理を行うための処理手段と、
前記処理手段による対応メモリ・アドレス範囲へのアクセスを制御するための属性データを格納するための複数の記憶領域手段を含むメモリ属性ユニット手段と
を備えるデータ処理装置であって、
ある目標メモリ・アドレスに応答して、前記処理手段が、前記メモリ属性ユニット手段によって前記複数の記憶領域手段のどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応すると示されている対応記憶領域手段であるか特定するための領域特定値を出力するために領域特定演算を行うように構成されており、前記目標メモリ・アドレスが物理アドレスであり、前記領域特定値が前記データ処理装置によって実行される少なくとも一部のソフトウェアの利用に供される、データ処理装置。
【請求項２２】
複数の記憶領域を含むメモリ属性ユニットを備えるデータ処理装置のためのデータ処理方法であって、
それぞれの記憶領域が、処理回路による対応メモリ・アドレス範囲へのアクセスを制御するための属性データを格納するように構成され、
方法が、
ある目標メモリ・アドレスに応答して領域特定演算を行うステップを含み、
前記領域特定演算が、
前記複数の記憶領域のどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応すると前記メモリ属性ユニットによって示されている対応記憶領域であるか特定することと、
前記複数の領域のどれが前記対応記憶領域であるか特定する領域特定値を出力することとを含み、
前記目標メモリ・アドレスが物理アドレスであり、前記領域特定値が前記データ処理装置によって実行される少なくとも一部のソフトウェアの利用に供される、データ処理方法。
【請求項２３】
前記処理回路がセキュア・ドメイン及び低セキュア・ドメインを含む複数の動作ドメインを有し、前記処理回路が前記セキュア・ドメインで動作しているとき、前記処理回路が前記低セキュア・ドメインで動作しているときにアクセスできない少なくとも一部のデータに前記処理回路がアクセスすることができ、
前記領域特定演算が前記セキュア・ドメインで実行される機能の一部として、前記低セキュア・ドメインで実行するコードによってセットされる１つ又は複数のメモリ・アドレスを使用して行われ、前記領域特定演算の前記目標メモリ・アドレスが前記１つ又は複数のメモリ・アドレスのうち１つを含む、請求項２２に記載のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術はデータ処理の分野に関する。より具体的には、本技術は、メモリへのアクセスを制御するための属性データを格納するためにメモリ属性ユニットを有するデータ処理装置に関する。
【背景技術】
【０００２】
データ処理装置が、対応するメモリ・アドレス範囲への処理回路によるアクセスを制御するための属性データを格納するために、メモリ属性ユニット（メモリ保護ユニットなど）を備えることがある。メモリ・アクセスが要求されると、メモリ属性ユニットが目標アドレスを含むアドレス範囲に対応する属性データを検索し、対応するデータがあれば、その属性データに基づいて、読み出し又は書き込みアクセスが許可されるか判定される。
【発明の概要】
【課題を解決するための手段】
【０００３】
一態様から見れば、本技術はデータ処理装置を提供し、その装置は、
データ処理を行うように構成される処理回路と、
複数の記憶領域を含むメモリ属性ユニットとを備え、
各記憶領域は、処理回路による対応メモリ・アドレス範囲へのアクセスを制御するための属性データを格納するように構成され、
ある目標メモリ・アドレスに応答して、処理回路が領域特定演算を行って、前記複数の記憶領域のどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応するとメモリ属性ユニットによって示されている対応記憶領域であるか特定するための領域特定値を出力するように構成されており、目標メモリ・アドレスが物理アドレスであり、領域特定値がデータ処理装置によって実行される少なくとも一部のソフトウェアの利用に供される。
【０００４】
処理回路が領域特定演算を行ってメモリ属性ユニットの記憶領域のうちどれが指定された目標アドレスに対応するかを特定する領域特定値を出力し、その領域特定値をデータ処理装置によって実行される少なくとも一部のソフトウェアの利用に供することが一部の状況では有用な場合があることが、本技術では認識されている。メモリ属性ユニットを検索するとき、通常は属性データ自体だけが取得されるので、このようなことは一般的ではない。所与のアドレスに対する属性データをいずれかの記憶領域に置くこともできるので、ある特定の目標アドレスにどの記憶領域が対応するかは、通常は興味の対象外である。しかし、領域特定演算が、例えば、あるアドレス範囲に対するアクセス許可のチェックを高速化するために役立ち得るが本技術では認識されている。領域特定演算を行わない場合は、アドレス範囲全体へのアクセスが許可されるかチェックするには、その範囲内の個々のアドレスのそれぞれについて許可をチェックすることが必要になる。しかし、領域特定値をソフトウェアの利用に供することにより、その範囲の先頭アドレスと末尾アドレスにどの記憶領域が関連付けられているかチェックして、先頭と末尾の両方が同じ記憶領域に関係するか否か確認することが可能になる。先頭と末尾の両方が同じ記憶に関係するならアドレス範囲全体に対するアクセス許可は同じなので、個々のアドレスのそれぞれについて許可をチェックする必要はなく、よって、パフォーマンスが向上し、電力消費が低減される。先頭と末尾のアドレスが同じでない場合でも、アクセス許可の変化点を、領域特定演算を使用して特定し、チェックの回数を減らすことができる。下記で考察するように、領域特定演算は、メモリ属性を更新して新しいコンテキスト、プロセス、又はライブラリの属性を書き込むときにも役立ち得る。
【０００５】
目標メモリ・アドレスは物理アドレスであり、このことは、メモリ属性ユニットが連続的な目標メモリ・アドレスを処理回路とメモリとの境界で連続的なメモリ・アドレスに割り当てる（言い換えれば、連続的な目標メモリ・アドレスがメモリへの出力時に連続的なアドレスに割り当てられる）ことを意味する。多くの場合、メモリに出力されるアドレスは対応する目標アドレスと同じアドレスであってもよい。しかし、メモリ属性ユニットが処理回路から受け取ったすべての目標アドレスに定数を加算するなどの単純なマッピングを施して、メモリに出力されるアドレスを作成する可能性もあり、この場合もまた、物理目標アドレスを使用すると考えられる。これは、プロセッサに指定される仮想目標アドレスに恣意的なアドレス変換を行ってメモリに対する物理アドレス出力を生成するメモリ管理ユニットとは対照的である。そのようなメモリ管理ユニットでは、連続的な目標アドレスをメモリへの非連続的なアドレス出力に割り当てることができる。このようなメモリ管理ユニットへの使用には、本技術の領域特定演算はあまり有用ではない。その理由は、アドレス変換は通常、メモリ・アドレスのページの粒度で実装され、その粒度は比較的小さい（例えば４Ｋのアドレス）傾向にあるので、単一のプロセス又はプログラムが多数の異なるページに対応するアドレスを使用する場合があるからである。このことは、前述したように必要なチェックの量を減少させるために領域特定演算を使用できる可能性が非常に低いことを意味する。その理由は、多くの場合、先頭及び末尾のアドレスは、たとえ同じプロセスに関連しているとしても、メモリ管理ユニットの異なるページに対応するからである。それに対して、目標アドレスとして物理アドレスを使用するメモリ管理ユニットでは、メモリ属性ユニットの単一の記憶領域に対応するアドレス範囲は、メモリ管理ユニットに対する範囲よりかなり広くなる傾向にあり、単一のプログラムによって使用されるアドレス範囲全体が単一の記憶領域に対応する場合が多い。したがって、先頭及び末尾のアドレスが同じ記憶領域に関連付けられていることを領域特定演算が検出して、前述したようなチェックの減少が可能になる可能性がかなり高い。
【０００６】
領域特定演算は様々な方法でトリガすることができる。例えば、目標メモリ・アドレスを指定する専用の領域特定命令が提供されてもよい。プログラマは、領域特定演算を実行して領域特定値を出力するように処理回路をトリガするために、その領域特定命令をコードに組み込むことができる。
【０００７】
或いは、専用の領域特定命令がなくてもよい。その代わり、所定のレジスタを提供し、目標メモリ・アドレスが書き込まれたときに、そのレジスタが処理回路をトリガして領域特定演算を行わせ、目標メモリ・アドレスに関連付けられた領域を特定するようにしてもよい。例えば、汎用のｓｔｏｒｅ又はｍｏｖｅ命令を使用して、所定のレジスタに目標メモリ・アドレスを書き込んでもよい。
【０００８】
領域特定演算は必ずしも有効な領域特定値を返さなくてもよい。無効な領域特定値が出力されてもよい様々な状況があり得る。
例えば、
（ａ）メモリ属性ユニットが無効化されたか、
（ｂ）目標メモリ・アドレスが複数の領域のいずれにも対応しないか、
（ｃ）目標メモリ・アドレスが複数の領域のうち２つ以上に対応するか、
（ｄ）目標メモリ・アドレスが、有効化されている複数の領域のうち２つ以上に対応するか、
（ｅ）目標メモリ・アドレスが、有効化されている複数の領域のいずれにも対応しないか、
（ｆ）処理回路が領域特定値を決定するために十分なセキュリティ特権のない動作モードにあるときに領域特定演算が行われた場合に、
無効な領域特定値が出力されてもよい。
無効な領域特定値を出力すべきか検知するためには、所与のデータ処理装置がこれらの基準のすべてに適合する必要はなく、これらの基準のうちいずれか１つ又は複数に適合してもよい。
【０００９】
無効な領域特定値は様々な方法で表されてもよい。一実例では、無効な領域特定値はメモリ属性ユニットの実際の記憶領域を表さない所定の値を使用して表されてもよい。例えば、メモリ属性ユニットの記憶領域が０とある正の整数との間の数を使用して表されるなら、負の値（例えば−１）を使用して無効な領域特定値を表すこともできる。或いは、領域特定値と共に出力され、関連する領域特定値が無効であることを示す値に設定された無効フラグを使用して無効な領域特定値を表してもよい。無効フラグを使用する場合には、フラグを使用しない場合にメモリ属性ユニットの実際の領域を示す値（例えばゼロ）を領域特定値が有することがあるが、この値が有効な領域を表さないことが無効フラグによって示される。
【００１０】
上記の（ｆ）の場合に関して、いくつかの状況では、所与のアドレスに関連付けられた記憶領域がユーザ又はプログラマの利用に供されることが望ましくないことがあるので、領域特定値を決定するために十分なセキュリティ特権のない状態で領域特定演算が行われたときには、無効な領域特定値が出力されてもよい。領域特定値と共に出力される無効フラグを使用して無効な値が表される場合には、十分なセキュリティ特権のないプロセスが領域特定値から情報を得ることを防ぐために、対応する領域特定値を所定の値（例えばゼロ）に設定することは有用であり得る。例えば、セキュア状態及び低セキュア状態を有するシステムでは、攻撃者がこの情報を使用してセキュア状態で使用されるアドレス割り当てに関する情報を判断し、それが攻撃の支援に使用されることがあり得るので、メモリ属性ユニットのセキュア状態で使用される記憶領域に関する情報を、低セキュア状態にあるコードがアクセスできないようにすることが望ましいことがある。低セキュア状態にあるときに有効な領域特定演算が返されないようにすることによって、セキュリティを維持することができる。
【００１１】
処理回路は、領域特定演算を行うときに領域特定値の他に追加情報も出力してもよい。例えば、この追加情報は、以下の情報のうち１つ又は複数を含んでもよい。
・対応記憶領域に格納されている属性データのうち少なくとも一部のデータ
・対応記憶領域に格納されている属性データのうち少なくとも一部から導出された情報
・対応記憶領域に対するメモリ・アドレス範囲に関連付けられたセキュリティ状態を示すもの
・対応記憶領域に対するメモリ・アドレス範囲の先頭又は末尾のアドレスに対応する値
領域特定演算が行われる状況では多くの場合、目標アドレスの属性データ又はセキュリティ状態などの目標アドレスに関する追加情報をチェックする必要があるので、この追加情報を領域特定演算に応答して出力することによって追加情報をチェックするための別の動作を行う必要がなくなる。どの場合でも、メモリ属性ユニットのハードウェアが検索に応答して追加情報を返してもよいので、領域特定演算を拡張して追加情報を出力するためにハードウェアに対する修正を行うことは殆どの場合で必要にならないだろう。
【００１２】
メモリ・アドレス範囲の先頭又は末尾のアドレスの場合は、追加情報が先頭又は末尾のアドレスを明示的に表す必要はない。先頭又は末尾のアドレスを導出するために使用可能なあらゆる値を使用することができる。例えば、属性を定める対象のメモリ・アドレス範囲を２のべき乗のアドレス境界にそろえなければならない場合には、アドレス値そのものではなく、２のべき乗の倍数を使用してアドレスを表すこともできる。また、末尾アドレスを、先頭アドレスからの末尾アドレスのオフセットを表す値又はアドレス範囲の合計サイズを使用して表してもよく、同様に、オフセットを２のべき乗として表してもよい。
【００１３】
領域特定演算によって出力される領域特定値は、ある宛先レジスタの少なくとも一部に処理回路によって書き込まれてもよい。したがって、領域特定値は後続する命令の利用に供されてもよい。この方法で領域特定値をプログラマの利用に供することは一般的ではない。その理由は、プログラマの関心の対象となるのは通常、所与のアドレスに対応する属性データのみであり、そのアドレスの属性データがどの記憶領域に格納されているかは関心の外にあるからである。宛先レジスタは前述した領域特定命令によって指定されてもよいし、又は、処理回路が領域特定値を書き込むべきデフォルト・レジスタであることもできる。領域特定値に加えて、前述した無効フラグ又は追加情報などのその他のパラメータもまた、宛先レジスタに書き込まれてもよい。
【００１４】
領域特定値は様々な方法で表されてもよい。一実例では、領域特定値は対応する記憶領域の領域番号を含んでもよい。領域番号は様々な方法で生成されてもよい。一実例では、目標アドレスの検索に応答してメモリ属性ユニットが領域番号を生成してもよい。メモリ属性ユニットは通常、所与のアドレスの属性データを探すための標準的なメモリ属性検索を行うために、目標アドレスを各領域のアドレス範囲と比較するための比較器を有するので、これらの比較器によって生成されるヒット信号を使用して領域番号を導出してもよい。或いは、各記憶領域が、その領域を特定する領域番号を格納してもよい。この場合、領域特定演算が行われると、処理回路がメモリ属性ユニットを制御して対応する記憶領域から領域番号を取得してから、処理回路が領域番号を出力してもよい。
【００１５】
領域特定値は、所与のアドレスに関連付けられた記憶領域を示す別のパラメータであることもできる。例えば、メモリ属性ユニットの複数の異なる領域に対応するメモリ・アドレス範囲が重複しないならば、処理回路から見れば、各メモリ・アドレス範囲の先頭アドレス又は末尾アドレスで、その範囲に対する属性データを格納する記憶領域を特定することができる。
【００１６】
メモリ属性ユニットは、所与のメモリ・アドレスに対するメモリ・アクセスを行う処理回路の能力を制御する属性データを格納する、どのようなユニットを含んでもよい。例えば、高セキュア状態と低セキュア状態の間の境界を強制するために、又は、一定のアドレス範囲を一定のソフトウェアからアクセス不可能と設定するために（例えば、アプリケーション・ソフトウェアはオペレーティング・システム又はハイパーバイザに関連付けられたアドレス範囲へのアクセスを許可されないなど）メモリ属性ユニットを使用してもよい。
【００１７】
いくつかの場合では、処理装置内に複数のタイプのメモリ属性ユニットがあってもよい。その場合には、ある目標アドレスに第１のメモリ属性ユニット内のどの領域が対応し、その目標アドレスに第２のメモリ属性ユニット内のどの領域が対応するかを特定することが必要なことがある。このタイプの動作を高速化するために、領域特定演算は第１のメモリ属性ユニットに対応する第１の識別子と、第２のメモリ属性ユニットに対応する第２の領域特定値の両方を出力してもよい。例えば、１つの領域特定命令が２つ（又はそれ以上）の異なる領域特定値を返して、２つの別個の命令を実行する必要なく処理を高速化してもよい。
【００１８】
領域特定演算が２つ以上のメモリ属性ユニットの対応領域を特定する場合は、領域特定演算が、第１のメモリ属性ユニットの対応する第１の記憶領域に格納された第１の属性データの少なくとも一部及び、第２のメモリ属性ユニットの対応する第２の記憶領域に格納された第２の属性データの少なくとも一部を使用して、結合属性パラメータの決定も行うと非常に有用であり得る。例えば、第１及び第２のメモリ属性ユニットが所与のメモリ・アドレスへのアクセスに異なる条件を設定することがあるので、アクセスが許可されているか判断するために、両方の属性ユニットの属性データを考慮することが必要なことがある。領域特定演算の一部として、それぞれのメモリ属性ユニットから属性データを使用して結合属性パラメータを導出することによって、そのメモリ・アクセスが許可されているかチェックするために必要な命令の数が削減され得る。例えば、いくつかの命令セットには、あるレジスタ内のある１つのビットが要求された値を有するか比較的簡単にチェックできる命令があるが、２つ以上のビットが要求された値を有するかチェックすることはより複雑で、複数の命令を必要とすることがある。領域特定演算を使用して、第１及び第２のメモリ属性ユニットから２つ以上の情報を１つのビットにまとめ、使用する命令の数を少なくして、両方のユニットのアクセス許可を素早く効率的にチェックすることができる。
【００１９】
本技術は、少なくとも１つのセキュア・ドメイン及び低セキュア・ドメインを含む複数の動作ドメインを有する処理回路をもつシステムにおいて特に有用である。処理回路がセキュア・ドメインで動作しているとき、処理回路は、処理回路が低セキュア・ドメインで動作しているときにはアクセスできない少なくとも一部のデータにアクセスすることができる。メモリ属性ユニットを使用して、セキュア・ドメインのみでアクセス可能なアドレスはどれか、及びセキュア・ドメイン及び低セキュア・ドメインの両方でアクセス可能なアドレスはどれか判断することができる。領域特定演算を使用することにより、ある範囲のアドレスがすべて同じ記憶領域に関連するかについて、各アドレスの属性を個別にチェックする必要なく素早くチェックすることができるので、処理が高速化し、電力消費が削減される。
【００２０】
セキュア・ドメイン及び低セキュア・ドメインは様々な形をとってもよい。一実例では、オペレーティング・システムが提供するコードなどの特権付きコードを実行することができる特権付き状態にセキュア・ドメインが対応し、アプリケーション・ソフトウェアなどの特権なしコードが実行される特権なし状態に低セキュア・ドメインが対応してもよい。ただし、他のシステムでは、同一のデバイス上で動作する２つ以上の「世界」の間が完全に区切られ、セキュア・ドメインが、金融アプリケーション又はセーフティ・クリティカルなコードなどのセキュリティ・クリティカルなコードを実行するためのプライベート・ドメインに対応し、低セキュア・ドメインが非セキュリティ・クリティカルなコードを実行するためのパブリック・ドメインに対応していることがある。いくつかの実施例では、プライベート及びパブリックのドメインはドメイン内に、前述の特権なし状態及び特権付き状態などのサブ状態をもたないことがある。一般に、高いセキュア状態と低いセキュア状態の間のどのような境界でもメモリ属性ユニットを使用して境界を強制することができ、また所与の目標アドレスにメモリ属性ユニットのどの領域が属するかをチェックするために本技術は有用であり得るので、ある２つのアドレスが同じ領域に関連する場合は、それらの間のどのアドレスもまた、同じ属性データをもつと判断することができる。
【００２１】
一実例では、メモリ属性ユニットはセキュリティ保護ユニットを含んでもよく、指定されたメモリ・アドレスに複数のドメインのどれが関連付けられているか判断するためにこのユニットが使用される。セキュリティ保護ユニットは、このように様々な方法で実装されてもよい。対応するアドレス範囲がセキュア・ドメインに関連するか低セキュア・ドメインに関連するかを指定するセキュリティ・フラグを含む属性データを格納することも可能である。或いは、少なくとも１つのドメインについて、セキュリティ保護ユニット内に属性データをもたないアドレス範囲がいずれもそのドメインに関連付けられていると見なすことによって、そのドメインに関連付けられたアドレス範囲が、セキュリティ保護ユニットによって暗示的に特定されてもよい。したがって、アドレス空間内のすべてのアドレスについてセキュリティ保護ユニットに属性データを格納する必要はない。例えば、セキュリティ保護ユニットはセキュア・ドメインに対応するアドレス範囲を定めるデータを含んでもよく、目標アドレスがセキュリティ保護ユニットの中にないなら、そのアドレスは低セキュア・ドメインに関連付けられていると見なされてもよい（又はその逆）。３つ以上のドメインがある場合には、１つを除くすべてのドメインに関連付けられたアドレス範囲がセキュリティ保護ユニット内に示されてもよく、セキュリティ保護ユニットの中にないアドレスが残りの１つのドメインに対応すると見なすことができる。
【００２２】
いくつかの実施例では、例えば、セキュア・アドレス範囲に格納された命令はセキュア・ドメインで実行すべきであり、低セキュア・アドレス範囲に格納された命令は低セキュア・ドメインで実行すべきであると仮定すれば、まず第１にセキュア・ドメインで動作するか低セキュア・ドメインで動作するか判断するために、セキュリティ保護ユニットを使用することもできる。いくつかの実例では、セキュリティ保護ユニットは、アドレス範囲に関連付けられるセキュア状態又は低セキュア状態以外に何らアクセス許可を定める必要がない。
【００２３】
セキュリティ保護ユニットのどの領域がどのアドレスに対応するか判断するために低セキュア・ドメインでコードが実行することを許可するのが望ましくない場合がある。攻撃者がこの情報を使用してセキュリティ侵害を引き起こすことができる場合がある。この問題に対処するために、処理回路は、処理回路が低セキュア・ドメインで動作しているときは領域特定演算が正常に実行できないようにしてもよい。一般に、処理回路は、領域特定演算が低セキュア・ドメインで実行されると、セキュリティ保護ユニットに関する領域特定値の出力を禁止してもよい。このことは、様々な方法で実現されてもよい。例えば、低セキュア・ドメインにあるときに領域特定演算が試みられると、前述した無効な領域特定値を処理回路が出力してもよいし、又は、エラー若しくはフォールトがトリガされてもよい。セキュリティ保護ユニットに関連付けられた領域特定値が出力されない場合であっても、データ処理装置の現在の状態に対して許可されるなら、別のメモリ属性ユニットについての領域特定値は出力されてもよい。
【００２４】
メモリ属性ユニットの別の形はメモリ保護ユニット（ＭＰＵ）であり、このユニットは、メモリ・アドレス範囲へのアクセスを制御するための書き込み許可又は読み出し許可などの属性データを格納する。ＭＰＵ並びに前述したセキュア・ドメイン及び低セキュア・ドメインを有するシステムでは、複数の異なるドメインに対応する複数のＭＰＵが提供されてもよい。例えば、セキュア・ドメインで動作しているときにアドレス範囲へのアクセスを制御するために使用される属性データをセキュアＭＰＵが格納し、低セキュア・ドメインで動作しているときには対応する低セキュアＭＰＵが使用されて、低セキュアコードがセキュアＭＰＵにアクセスしないようにすることができる。いくつかの実施例ではセキュアＭＰＵ及び低セキュアＭＰＵは完全に分かれているが、それぞれのＭＰＵがいくつかの回路を共有することも可能である。例えば、セキュアと低セキュアのＭＰＵのうち１つだけが同時に有効になると期待されるなら、それらのユニットについて属性データを格納するために別々の記憶領域が提供されてもよいが、目標アドレスを各記憶領域に定められたアドレス範囲と比較するために、ＭＰＵ間で共通の比較器のセットが共有されてもよい。
【００２５】
したがって、セキュリティ保護ユニットと１つ又は複数のＭＰＵの両方が存在してもよい。一実例では、領域特定演算が前述した第１の領域特定値と第２の領域特定値の両方を出力して、第１の値がセキュリティ保護ユニットに対応し、第２の値がＭＰＵの１つに対応してもよい。
【００２６】
複数のＭＰＵがある場合には、領域特定演算はＭＰＵのうちどれを使用して領域特定値を決定すべきかも選択してもよい。例えば、対応する領域を判断するためにセキュアＭＰＵ及び低セキュアＭＰＵのうちどれにアクセスすべきかを示すパラメータを領域特定命令に指定することによって、この選択を行うことができる。或いは、専用レジスタへの書き込みによって領域特定演算がトリガされる場合には、ユーザがレジスタにフラグをセットすることによって、又は複数の異なるＭＰＵに対応する複数の異なる専用レジスタを準備し、どのレジスタに目標アドレスが書き込まれるかの選択によってどのＭＰＵがアクセスされるかが決定されることによって、選定ＭＰＵが選択されてもよい。ユーザはこの方法で、どの領域が目標アドレスに対応するか判断するためにＭＰＵのどれに問い合わせが行われるかを制御することができる。
【００２７】
低セキュア・ドメインにあるときに、セキュアＭＰＵのどの領域が所与のアドレスに対応するかユーザが知り得ることが適切ではないことがある。プロセッサが低セキュア・ドメインで動作しているときに領域特定演算がセキュアＭＰＵを選定ＭＰＵとして選択しようとしたときには、そのセキュアＭＰＵの記憶領域を特定する領域特定値の出力が禁止されてもよい。前述したように、出力の禁止は、無効な値を出力するか、又はエラー若しくはフォールトを通知することなどによる様々な方法で実現されてもよい。
【００２８】
別の態様から見れば、本技術はデータ処理装置を提供し、その装置は、
データ処理を行うための処理手段と、
処理手段による対応メモリ・アドレス範囲へのアクセスを制御するための属性データを格納するための複数の記憶領域手段を含むメモリ属性ユニット手段と
を備え、
ある目標メモリ・アドレスに応答して処理手段が、メモリ属性ユニット手段によって前記複数の記憶領域手段のどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応すると示されている対応記憶領域手段であるか特定するための領域特定値を出力するために領域特定演算を行うように構成されており、目標メモリ・アドレスは物理アドレスであり、領域特定値はデータ処理装置によって実行される少なくとも一部のソフトウェアの利用に供される。
【００２９】
さらに別の態様から見れば、本技術は、複数の記憶領域を含むメモリ属性ユニットを備えるデータ処理装置のためのデータ処理方法を提供し、
それぞれの記憶領域は処理回路による対応メモリ・アドレス範囲へのアクセスを制御するための属性データを格納するように構成され、
この方法は、
ある目標メモリ・アドレスに応答して領域特定演算を行うステップを含み、
領域特定演算は、
前記複数の記憶領域のどれが前記目標メモリ・アドレスを含むメモリ・アドレス範囲に対応するとメモリ属性ユニットによって示されている対応記憶領域であるか判断することと、
前記複数の領域のどれが前記対応記憶領域なのか特定する領域特定値を出力することとを含み、
目標メモリ・アドレスは物理アドレスであり、領域特定値はデータ処理装置によって実行される少なくとも一部のソフトウェアの利用に供される。
【００３０】
この方法の一実例では、領域特定演算は、低セキュア・ドメイン内で実行しているコードによって１つ又は複数のメモリアドレス・セットを使用してセキュア・ドメイン内で実行される関数の一部として行われてもよく、領域特定演算の目標メモリ・アドレスは低セキュア・ドメインから渡されるメモリ・アドレスのうち１つでもよい。セキュア・ドメイン内のある目標アドレスについてある関数が低セキュア・ドメインによって呼び出され、その関数によって使用される１つ又は複数のアドレスが低セキュア・ドメインから渡される場合には、低セキュア・ドメインがセキュア・アドレスを引き渡すことができ、このアドレスが次にセキュア・ドメインでアクセスされるという攻撃の可能性がある。セキュア・ドメイン内では通常、セキュア・アドレスへのアクセスは許可されるので、これは、低セキュア・コードがセキュア・アドレスへのアクセスを制御できるようになるセキュリティ・ホールとなることがある。しかし、セキュア・ドメイン内の関数で領域特定演算を実行することにより、どのメモリ属性ユニット領域が低セキュア・ドメインから渡されたアドレスに対応するかチェックすることができる。低セキュア・ドメインから渡されたアドレスのすべてが同一領域に対応し、その領域が低セキュア・ドメインに対して適切なアクセス許可を有する場合には、関数の残り部分を正常に行うことができ、領域特定演算を行わずに低セキュア・ドメインから渡されたアドレスをそれぞれ個別にチェックしなければならない場合よりも必要なチェックの数を減らすことができる。
【００３１】
下記に示す説明的実施例の詳細な説明によって、本技術の上記及びその他の目的、特徴、並びに長所が明らかになる。この説明は添付図面を参照して読まれるよう意図されている。
【図面の簡単な説明】
【００３２】
【図１】データ処理装置の例を概略的に示す図である。
【図２】あるメモリ・アドレス空間の対応するアドレス範囲に対する属性データを格納するためのメモリ属性ユニットを示す図である。
【図３】データ処理装置の、より詳細な例を示す図である。
【図４】図３の例と共に使用されるメモリ・アドレス空間の例を示す図である。
【図５】図３に示される処理装置の複数の異なるセキュリティ状態の例を示す図である。
【図６】領域特定命令の符号化の例を示す図である。
【図７】領域特定命令の結果例を示す図である。
【図８】ある目標アドレスに対応する領域を特定する領域番号を生成するためのロジックを有するメモリ属性ユニットの例を示す。
【図９Ａ】ある目標アドレスを所定のレジスタに書き込むことによって領域特定演算をトリガすることの例を示す図である。
【図９Ｂ】複数の異なるドメイン内のメモリ属性ユニットに対する領域特定演算をトリガするために複数の異なる所定のレジスタを提供する例を示す図である。
【図１０】低セキュア・ドメインから渡されたアドレスを使用するセキュア・ドメイン内の関数の例を示す図である。
【図１１】低セキュア・ドメインから渡されたアドレスがどのメモリ属性領域にまたがるかによって発生することのある問題の例を示す図である。
【図１２】セキュア・ドメイン内の関数を安全に実行できるかチェックするために領域特定演算を使用する例を示す図である。
【図１３】新しいライブラリのアクティブ化を高速化するために領域特定演算を使用できる例を示す図である。
【図１４】領域特定演算を行う方法を示すフロー線図である。
【発明を実施するための形態】
【００３３】
図１は、あるデータ処理装置を概略的に示し、この装置は処理回路４、データ・ストア（メモリ）６及び、処理回路４によるメモリ６へのアクセスを制御するための属性データを格納するためのメモリ属性ユニット７を有する。図２は、複数の記憶領域９を有するメモリ属性ユニット７の例を示し、各記憶領域９は、図２に示すアドレス空間１３に示すように対応するメモリ・アドレス範囲１１についての属性データを格納する。メモリ６は図１には単一のブロックとして示されているが、場合によってはメモリ・アドレス空間が複数の異なるデバイス（例えば、ＲＡＭ、フラッシュメモリ・デバイス、周辺機器用の制御レジスタなど）の中の位置をカバーすることもある。
【００３４】
処理回路４から見たアドレス空間のレイアウトはメモリ属性ユニット７から見たアドレスのレイアウトと実質的に同じであってもよい。各記憶領域９は処理回路４上で実行する命令によって、アドレス空間１３内の異なるアドレス範囲に割り当てるように設定することができる。例えば、記憶領域９は対応するアドレス範囲を定めるパラメータを格納してもよく、そのパラメータは、アドレス範囲の先頭アドレス及び末尾アドレス、先頭アドレス及びアドレス範囲のサイズを示すパラメータ、又は、アドレス範囲の先頭に対応する２のべき乗の倍数を示す値及びアドレス範囲のサイズを示すサイズ・パラメータなどである。他の実例では、記憶領域９に関連付けられるアドレス範囲は、記憶領域にハードウェア的に組み込まれていてもよい（ｍａｙ  ｂｅ  ｈａｒｄｗｉｒｅｄ）。このように、記憶領域９に対応するアドレス範囲を表す様々な方法がある。いくつかの実例では、各記憶領域９に定められたアドレス範囲が重複する場合にはメモリ属性ユニット７の設定は有効ではないことがあるが、他の実例では、同じアドレスに対して複数層のアクセス許可を定めるために、いくつかのアドレス範囲の重複が許可されることもある。いくつかの実施例では、アドレス範囲は、所与のアドレス・インクリメントの任意の倍数（限られた数の範囲サイズから選択する必要なく）でもよく、隣接するアドレス範囲（例えばＢ及びＣ）の長さは互いに無関係に設定されてもよい（メモリ属性ユニット７がそれぞれ同じ長さの複数の隣接するアドレス範囲を定めるよう制限する必要はない）。
【００３５】
各記憶領域９は１つ又は複数の属性１５を含み、この属性は、対応するアドレス範囲内のアドレスにプロセッサ４がどのようにメモリ・アクセス動作を行うことができるかを制御する。いくつかの実施例では、対応するアドレス範囲を定めるアドレス又はその他のパラメータが、メモリ属性ユニット７によって格納される唯一の属性データ１５であり、その他のいくつかの情報は、あるアドレスに対応するアドレス範囲がメモリ属性ユニット内に定められているか否かによって暗示的に示される。他の実施例では、アドレス範囲を定めるデータに加えて、さらなる属性データ１５があってもよく、その属性は、そのアドレスによって特定されるメモリ６内の位置に対してプロセッサ４が読み出し及び／又は書き込みを行うことができるか否かを指定するデータ、及び、あるアドレスに複数のセキュリティ状態又はドメインのどれが関連付けられているかを特定するデータなどである。ある目標アドレスによって特定されるメモリ６内の位置にメモリ・アクセスを行うとき、その目標アドレスがメモリ属性ユニット７に提供され、そのユニットが目標アドレスを各記憶領域９に定められたアドレス範囲と比較して、目標アドレスを含むアドレス範囲に対応する領域９の１つに関連付けられた属性データを出力する。処理回路４は次に、出力された属性データに基づいて、メモリへのアクセスが許可されるか判断する。メモリ属性ユニット７に提供される目標アドレスは（仮想アドレスではなく）物理アドレスなので、処理回路４によって指定される連続的な目標メモリ・アドレスは、メモリ属性ユニット７によって、メモリ６への出力として連続的なアドレスに割り当てられる。
【００３６】
図３は、処理装置２の例をより詳細に示す。データ処理装置２は図１に示すとおり処理回路４及びデータ・ストア６を備え、いくつかのユニット４２、５０、５２もまた備える。これらはそれぞれ、図１及び２に示すメモリ属性ユニット７の例と考えることができる。データ処理装置２は、処理回路４によって処理されるデータを格納するためのレジスタ８もまた備える。データ・ストア６はメイン・メモリに加えて少なくとも１つのキャッシュを含んでもよい。処理回路４は処理パイプラインを備え、これにはデータ・ストア６から命令をフェッチするためのフェッチ段１０、フェッチした命令をデコードするためのデコード段１２、及びデコードした命令を実行するための実行段１４が含まれる。パイプラインは、例えばレジスタ・リネーム段又は発行段などの他の段を含んでもよいことが理解される。
【００３７】
レジスタ８は、処理回路４に代わってデータを格納するために複数の汎用レジスタＲ０〜Ｒ１２を含む。図３には、１３個の汎用レジスタＲ０〜Ｒ１２が示されているが、それ以外の個数のレジスタが提供されてもよく、また、浮動小数点値を格納するために浮動小数点レジスタが任意選択として提供されることもある。レジスタ８は、プログラム・カウンタ（ＰＣ）レジスタ２０、リンク・レジスタ（ＬＲ）２２、及びスタック・ポインタ（ＳＰ）レジスタ２４、２６を含む専用レジスタもまた、いくつか含む。プログラム・カウンタ・レジスタ２０は、処理回路４によって実行される次のプログラム命令のアドレスを示すプログラム・カウンタを格納する。通常、ある命令の実行に続いてプログラム・カウンタが更新され、メモリからの次の命令を示す。ただし、制御フロー修正命令に応答して、次の番の命令を指さない値にプログラム・カウンタをセットすることもできる。リンク・レジスタ２２は、関数又は例外から戻るときに、その関数又は例外の終了に続いて処理すべきプログラム命令を判断するために使用される戻り値を格納してもよい。スタック・ポインタ・レジスタ２４、２６はそれぞれ、セキュア及び低セキュアのスタック・ポインタを格納し、それらのポインタはそれぞれデータ・ストア６内のセキュア・スタック３０及び低セキュア・スタック３２を指す。例えば、スタック・ポインタは、スタック３０、３２に最後に置かれた項目の位置を示すことができ、又は、スタック３０、３２に次にデータ値が書き込まれるべき位置を示すこともできる。
【００３８】
セキュア・ドメインと低セキュア・ドメインの間を強制的に分離するために、セキュリティ保護ハードウェア４０が提供される。セキュリティ保護ハードウェアはセキュリティ保護ユニット４２を有し、このユニットはデータ・ストア６の領域がセキュア領域と低セキュア領域のどちらであるか定める保護データを格納する。図３は、データ・ストア６が１つのセキュア領域４４及び１つの低セキュア領域４６を有する例を示すが、実際には、データ・ストア６は各タイプの領域をいくつか含んでもよい。いくつかの実例では、セキュリティ保護ユニット４２がセキュア・ドメインと低セキュア・ドメインのうち片方に関連付けられたアドレス範囲を定める属性データのみを含み、セキュリティ保護ユニット４２内で定められていないアドレス範囲はセキュア・ドメインと低セキュア・ドメインのうち他方に関連付けられると仮定されてもよい。データ・ストア６のセキュア領域４４内にあるコード４６はセキュア・ドメイン内で処理回路４によって実行され、低セキュア領域４６内にあるコード４８は低セキュア・ドメイン内で実行される。低セキュア・ドメイン内にあるとき、処理回路４はセキュア領域４４に格納されているデータ又は命令にアクセスすることができない。低セキュア・ドメインとセキュア・ドメインの間の遷移は、一定の許可された遷移のみが確実に許容されるように、セキュリティ保護ハードウェア４０によって制御される。
【００３９】
データ処理装置２は、データ・ストア６のセキュア領域４４及び低セキュア領域４６のそれぞれに対するアクセス許可を定めるために、セキュア・メモリ保護ユニット（ＭＰＵ）５０及び、低セキュアＭＰＵ５２を備える。ＭＰＵ５０、５２はバス行列５を介してデータ・ストア６にアクセスする。セキュア領域４４及び低セキュア領域４６のサブ領域がアクセス可能かアクセス不可かはアクセス許可によって制御され、複数の異なるプロセス又はソフトウェア・プログラムに対してセキュア領域又は低セキュア領域に複数の異なるアクセス許可を設定することができる。セキュアＭＰＵ５０及び低セキュアＭＰＵ５２によって定められる領域は重複してもよい。例えば、セキュアＭＰＵ５０と低セキュアＭＰＵ５２は、同じメモリ領域について異なる属性を定めてもよい。
【００４０】
図４は、データ・ストア６のメモリ・アドレス空間の例を示す。アドレス空間はセキュア領域４４及び低セキュア領域４６を有する。図４には、１つの低セキュア領域４４及び１つのセキュア領域４６が示されるが、さらに多くの非連続的なセキュア領域及び低セキュア領域を提供することもできる。セキュリティ保護ユニット４２はデータ・ストア６のどの領域がセキュア領域又は低セキュア領域であるかを定めるデータを格納する（一方の領域は、セキュリティ保護ユニット４２内にアドレス範囲を定めるデータがないことによって暗示的に示すこともできる）。
【００４１】
セキュア領域４４はセキュア・ソフトウェア・ライブラリに対応する１つ又は複数のセキュア・スタック３０を含む。セキュア領域４４は、アプリケーション・コード又はアプリケーション・レベルのソフトウェア・ライブラリに対応する特権なしセキュア・コード４６及び、例えば、オペレーティング・システムに対応する特権付きセキュア・コード４７もまた含む。セキュアＭＰＵ５０は、セキュア領域４４のどのサブ領域が特権付き又は特権なしのモードに関連するかを制御する。同様に、低セキュア領域４６は、低セキュア・ドメインで実行するための低セキュア・コード４８（特権付き及び特権なしのコードを含む）、低セキュアコード４８によって使用される低セキュア・スタック３２、及び低セキュア・データ３９を含む。低セキュアＭＰＵ５２は、低セキュア領域４６内のデータ又はコードが特権付きか特権なしかを制御する。通常、特権なしコードは特権付きのデータ又はコードにアクセスすることができない。メモリ・アドレス空間は予約済みアドレス範囲１５０もまた含み、この範囲は有効な命令アドレスのいずれにも対応しない。この予約済み範囲は、特殊なイベントをトリガすることのできるダミー・アドレスを提供するなどの特殊な関数に使用することができる。例えば、予約済みアドレス範囲１５０は、０ｘＦ０００００００〜０ｘＦＦＦＦＦＦＦＦの範囲のアドレスを含んでもよい。
【００４２】
図５は、処理装置２の複数の異なる状態の概略図である。装置は低セキュア・ドメイン７０及びセキュア・ドメイン８０を有し、ドメインによって処理装置２が区分されて、セキュアなプロセス及びオペレーティング・システムが、低セキュアのプロセス及びオペレーティング・システムによるアクセスの危険なく安全に実行することができる。セキュリティ保護ハードウェア４０がドメイン７０と８０の間の境界を規制してドメイン間の遷移が確実に許可されるようにして、低セキュア・ドメイン７０とセキュア・ドメイン８０との間で直接の関数呼び出し及び分岐を行うことができる。処理の同一スレッドがセキュア・ドメイン８０と低セキュア・ドメイン７０の両方での処理を含んでもよい。例えば、低セキュアのアプリケーションがセキュア領域へ分岐して、パスワード確認又は決済処理などのセキュリティ・クリティカルな機能を行ってから低セキュア領域に分岐して戻り、セキュリティ・クリティカルではない次の処理を行ってもよい。装置２が低セキュア・ドメイン７０にあるときには、セキュリティ保護ユニット４２は、セキュア・ドメイン８０に関連付けられたデータを確実にアクセス不可能にする。
【００４３】
低セキュア・ドメイン７０とセキュア・ドメイン８０のそれぞれに、特権なし状態９０及び特権付き状態１００がある。一般に、特権付き状態１００はオペレーティング・システムなどの特権付きソフトウェアに使用され、特権なし状態９０はアプリケーション及びライブラリなどの特権なしコードに使用される。低セキュア・ドメイン７０とセキュア・ドメイン８０の間とは異なり、特権なし状態９０と特権付き状態１００との間での分岐又は関数呼び出しは一般には不可能なので、特権付きと特権なしのモード間の切り替えにはコンテキスト切り替え又は例外が必要なことがある。所与のスレッドは通常、特権なし状態９０又は特権付き状態１００のどちらかで動作し、両方では動作しない。一般に、特権なし状態９０にあるときには、特権付き状態１００に関連付けられたデータはアクセス不可能である（ただし、例外的に、セキュア・ドメイン８０内の特権なし状態９０が低セキュア・ドメイン７０内の特権付き状態１００からのデータにアクセスすることを許可することはあり得る）。セキュアＭＰＵ５０は処理装置２がセキュア・ドメイン８０にあるときに特権付き又は特権なしの状態でアドレス範囲にアクセスすることが可能か否かを示すアクセス許可を定め、低セキュアＭＰＵ５２は処理装置２が低セキュア・ドメイン７０にあるときに特権付き又は特権なしの状態からアドレス範囲にアクセスすることが可能か否かを示すアクセス許可を定める。
【００４４】
通常、ある目標アドレスを使用して、セキュリティ保護ユニット４２又はセキュア若しくは低セキュアのＭＰＵ５０、５２などのメモリ属性ユニット７に問い合わせを行うことができ、次に、対応する目標アドレスについて属性値が返される。しかし、いくつかの状況においては、メモリ属性ユニット７（４２、５０、５２）の記憶領域９のどれが目標アドレスに対応するかを特定する領域識別子を返すことができると有用であることが本技術では認識されている。したがって、処理回路４は、ある命令に応答して領域特定演算を行って、指定された目標アドレスに対応する記憶領域９を特定し、その記憶領域を特定する領域特定値を出力することができる。
【００４５】
図６は、処理回路４が領域特定演算を行うようトリガするための領域特定命令の例を示す。領域特定命令ＴＴの符号化では、ソース・レジスタＲｎ及び宛先レジスタＲｄ、並びに後述するオプションのフラグＡが指定される（他の実施例ではフラグＡを使用しなくてもよい）。プログラマは、指定された目標アドレスがソース・レジスタＲｎに書き込まれた後に領域特定命令ＴＴが実行されるようにプログラムを記述する。領域特定命令に応答して、処理回路４は領域特定演算を行う。この動作では、メモリ属性ユニット７を使用して、記憶領域９のどれがレジスタＲｎ内の目標アドレスに対応するか判断し、次に、そのアドレスに領域９のどれが対応するかを特定する領域特定値を含む結果の値を、宛先レジスタＲｄに書き込む。
【００４６】
図７は、宛先レジスタＲｄに書き込まれる結果値の例を示す。図３の例には２つのタイプのメモリ属性ユニット７（セキュリティ保護ユニット４２及びＭＰＵ５０、５２）があるので、領域特定演算は、２つの異なる領域特定値を返す。その１つは、セキュアＭＰＵ５０又は低セキュアＭＰＵ５２のどの記憶領域が目標アドレスに対応するかを示すＭＲＥＧＩＯＮという値で、もう１つは、セキュリティ保護ユニット４２のどの記憶領域が目標アドレスに対応するかを示すＰＲＥＧＩＯＮという値である。一般に、ＭＰＵについて、値ＭＲＥＧＩＯＮはＭＰＵ５０、５２のうち現在の動作ドメインに対応する方の中の対応する記憶領域を特定してもよい。ただし、「ａｌｔ」フラグＡがセットされている場合には、逆のドメインからＭＰＵ５０、５２が検索されてもよい（これはセキュア・ドメインで動作しているときにのみ許可されてもよい）。メモリ属性ユニット７がただ１つである別の実施例では、ただ１つの領域特定値が提供されてもよい。
【００４７】
この実例では、結果値は他の追加情報もいくつか含み、その情報は目標アドレスに対応する記憶領域９の属性データに基づいて決定される。対応する記憶領域を特定するためにメモリ属性ユニット７の検索が既に行われているので、対応する記憶領域９から追加の属性データを返すようにすることにより、属性データを決定するために別の命令を実行する必要がなくなり効率的であり得る。
【００４８】
この例では、結果値は下記の情報フィールドを含む。
【００４９】
ＭＲＥＧＩＯＮ（ビット［７：０］）：目標アドレスが割り当てられるＭＰＵ領域の領域番号
【００５０】
ＰＲＥＧＩＯＮ（ビット［１５：８］）：目標アドレスが割り当てられるセキュリティ保護ユニット４２の領域番号
【００５１】
ＭＲＶＡＬＩＤ（ビット［１６］）：このフィールドは、ＭＲＥＧＩＯＮフィールドが有効な場合に１にセットされる。ＭＲＥＧＩＯＮフィールドは、下記の条件のいずれかが真の場合に無効となる。
・問い合わせ対象のＭＰＵ５０、５２が存在しないか無効化されている。
・ＭＰＵの有効化されている複数の領域に目標アドレスが一致した。
・ＭＰＵの有効化されている領域に目標アドレスが一致しなかった。
・特権なしモードで、且つＡフラグが指定されずに領域特定演算が行われた（セキュア・ドメイン８０内で特権なし状態にあるときは、セキュア・ドメイン８０内の特権付き状態に関連付けられた領域に関する情報へのアクセスは許可されないが、低セキュア・ドメイン８０内の特権付き及び特権なしの領域に関する情報はアクセス可能なので、セキュア・ドメイン内での領域特定演算の特権なし実行を有効にするためにはＡフラグが指定されなければならない）。
【００５２】
任意選択として、非セキュア・ドメインにあるときに領域特定演算が行われ、且つＡフラグが指定されていた場合に無効なＭＲＥＧＩＯＮフィールドが生成されてもよい（非セキュア・ドメインにあるときは、セキュアＭＰＵ５０に関する情報へのアクセスは許可されない）。或いは、非セキュア・ドメインにあるときにＡフラグが指定されていれば、命令は未定義として扱われてもよく、この場合は領域特定演算が全く行われなくてもよい。
【００５３】
ＰＲＶＡＬＩＤ（ビット［１７］）：このフィールドはＰＲＥＧＩＯＮフィールドが有効な場合に１にセットされる。ＰＲＥＧＩＯＮフィールドは下記の条件のいずれかが真の場合に無効となる。
・セキュリティ保護ユニット４２が無効化されている。
・セキュリティ保護ユニット４２の有効化されている複数の領域に目標アドレスが一致した。
・セキュリティ保護ユニットの有効化されているどの領域にも目標ドレスが一致しなかった。
・非セキュア・ドメインにあるときに領域特定演算が実行された（セキュリティ保護ユニット４２の領域に関する情報はどのアドレスがセキュアなデータ又はコードに関連するかのヒントとなることがあるので、非セキュア・ドメイン内のコードからはアクセスできない）。
・セキュリティ保護ハードウェア４０よって提供されるセキュア／低セキュアのドメイン区分を実装していない装置上で領域特定演算が実行された。
【００５４】
Ｒ（ビット［１８］）：読み出しアクセシビリティ。特権付きと特権なしのどちらかの現在のモードで動作しているときに、目標アドレスによって特定されるメモリ位置を選定ＭＰＵの許可に基づいて読み出すことができる場合は、Ｒが１にセットされる。
【００５５】
ＲＷ（ビット［１９］）：読み出し／書き込みアクセシビリティ。特権付きと特権なしのどちらかの現在のモードで動作しているときに、選定ＭＰＵの許可に基づいて、目標アドレスによって特定されるメモリ位置を読み出し及び書き込みを行うことができる場合は、ＲＷが１にセットされる。
【００５６】
ＮＰＲ（ビット［２０］）：Ｒ  ＡＮＤ  （ＮＯＴ  Ｐ）に等しい。これが１にセットされると、そのアドレスが読み出し可能で、低セキュア・ドメイン７０に関連付けられていることを示す。
【００５７】
ＮＰＲＷ（ビット［２１］）：ＲＷ  ＡＮＤ  （ＮＯＴ  Ｐ）に等しい。これが１にセットされると、目標アドレスが読み出し及び書き込み可能で、低セキュア・ドメイン７０に関連付けられていることを示す。
【００５８】
Ｐ（ビット［２２］）：プライバシー。値１は、そのメモリ位置がセキュア（プライベート）ドメイン８０に関連付けられていることを示し、値０はそのメモリ位置が低セキュア（パブリック）ドメイン７０に関連付けられていることを示す。このフィールドは、領域特定演算がセキュア・ドメイン８０で行われた場合にのみ有効である。
【００５９】
パラメータＮＰＲ及びＮＰＲＷは、ＭＰＵ５０又は５２から取得した属性データＲ又はＲＷのいくつか及び、セキュリティ保護ユニット４２から取得された属性データＰのいくつかから導出される。領域特定演算の一部としてこの導出されたパラメータを判断することによって、この情報を組み合わせるためにさらに別の命令を実行する必要がなくなる。図５に示す状態を有するシステムでは、あるアドレスに対する読み出し／書き込みが許可されているか、及び、そのアドレスが低セキュア・アドレスかをチェックすることは、比較的一般的な操作である。１つでその両方の情報を示すビットを返すことによって、さらなるチェックが大幅に簡略化される。その理由は、一般にレジスタＲｄ内の１つのビットの値は１つの命令を使用して効率的にチェックできるが、２ビット以上の値（例えば、別々のビットＲ及びＰ、又はＲＷ及びＰ）のチェックを行うことは、より複雑であり得るからである。他の実例では、別の属性ユニット７からの情報をいくつか使用して導出される他のパラメータもまた取得することができる。
【００６０】
図６に示す命令符号化に応答して行われる領域特定演算を表す擬似コードの例を下記に示す（略語ＰＡＵはセキュリティ保護ユニットを指し、用語「プライベート（ｐｒｉｖａｔｅ）」及び「パブリック（ｐｕｂｌｉｃ）」はそれぞれ、セキュア・ドメインと低セキュア・ドメインを指す）。
【００６１】
【表１−１】
0006652491.tif 000002
【表１−２】
0006652491.tif 000003
【表１−３】
0006652491.tif 000004
【表１−４】
0006652491.tif 000005
【表１−５】
0006652491.tif 000006
（表１中にある文章の対比訳は以下のとおりである）
reset destination register：宛先レジスタをリセット
Only allow privacy checks if we’re in the private state：プライベート状態にあるときはプライバシー・チェックのみ許可
MPU region information only available when privileged or when inspecting the other domain’s MPU：特権付き状態にあるか、他のドメインのＭＰＵを調べるときにのみＭＰＵ領域情報が利用可能
Setup default attributes：デフォルト属性を設定
The 0xFE000000 -> 0xFFFFFFFF is always private for instruction fetches：０ｘＦＥ００００００〜０ｘＦＦＦＦＦＦＦＦは、命令フェッチに対して常にプライベート
Use default attribus defined above：上で定義したデフォルト属性を使用
SCS space except from PAU checking：ＰＡＵチェックからＳＣＳ空間を除外
memory privacy reported as current state：メモリ・プライバシーを現在の状態として報告
If the PAU is enabled check its regions：ＰＡＵが有効化されていれば、その領域をチェック
PAU region enabled so perform checks：ＰＡＵ領域が有効化されているのでチェックを行う
Work out which privilege level the current mode in the public state：パブリック状態の現在のモードがどの特権レベルに従うか判断する
assume no valid MPU region and not using default memory map：有効なＭＰＵ領域がなく、デフォルトのメモリ割り当て使用中でないと見なす
Get the MPU registers for the correct privacy domain：正しいプライバシー・ドメインのためのＭＰＵレジスタを取得
Pre-compute if the execution priority is negative, as this can affect the MPU permissions used. NOTE: If public FAULTMASK is set this is also considered to be a negative priority for the purpose of the public MPU permissions regardless of how public exceptions are prioritised with respect to the private state：実行優先度が負であるかどうかは使用されるＭＰＵ許可に影響することがあるので、これを予め計算する。注：プライベート状態に関してパブリック例外がどのように優先順位付けされるかに関わりなく、パブリックのＦＡＵＬＴＭＡＳＫがセットされていれば、これもまた、パブリックＭＰＵの許可の目的について負の優先度と考えられる。
Determine what MPU permissions should apply based on access type and MPU：アクセス・タイプ及びＭＰＵ設定に基づいて、どのＭＰＵ許可を適用すべきか判断する
use default map for PPB and vector table lookups：ＰＰＢ及びベクトル・テーブル検索にデフォルト割り当てを使用
always use default map if MPU disabled：ＭＰＵが無効化されていれば、必ずデフォルト割り当てを使用
optionally use default for HardFault, NMI and FAULTMASK：ＨａｒｄＦａｕｌｔ、ＮＭＩ、及びＦＡＵＬＴＭＡＳＫに任意選択でデフォルトを使用
MPU is enabled so check each individual region：ＭＰＵが有効化されているので、各個別領域をチェック
optional default as background for Privileged accesses：特権付きアクセスのバックグラウンドとしての任意選択デフォルト
highest matching region wins：最も一致度の高い領域が勝つ
MPU region enabled so perform checks：ＭＰＵが有効化されているので、チェックを行う
enforce System space execute never：システム空間が実行されることのないよう強制する
Access not allowed if no MPU match and use of default not enabled：一致するＭＰＵがなく、且つデフォルトの使用が無効化されていれば、アクセスは許可されない
【００６２】
図８はメモリ属性ユニット７（セキュリティ保護ユニット４２又はＭＰＵ５０、５２の１つでもよい）のハードウェアの例を示す。各記憶領域９は、対応する領域の属性データを格納するためのレジスタの番号によって表されてもよい。図８に示す例では、領域番号（ＰＲＥＧＩＯＮ又はＭＲＥＧＩＯＮフィールドに使用される）がメモリ属性ユニットの記憶領域９の属性データ内に格納されず、代わりにメモリ属性ユニット７によって生成される。したがって、領域特定演算に応答して、あるアドレスがメモリ属性ユニットに入力されると、比較器１１０がその入力アドレスを、各領域９に対応するメモリ・アドレス範囲を定めるデータ１１２と比較して、対応する領域９のアドレス範囲内にそのアドレスがある場合はヒット信号１１４をアサートする。メモリ属性ユニット７はロジック１１６を有し、このロジックは記憶領域９からの属性データ１１５と共にヒット信号１１４を受け取り、ヒットが検出された領域の属性１１８を出力する。目標アドレスを検索して属性１１８を出力するための機能は、本技術を使用しないメモリ属性ユニットにも、通常、その一部として既に備わっている。本技術ではロジック１１６の機能を拡張して、ヒット信号１１４がアサートされる領域番号１２０もまた生成して出力するようにする。
【００６３】
他の実施例では、領域番号は属性データ自体の一部として領域９内に格納された値でもよく、領域特定演算で目標アドレスがヒットしたときは、一致領域９に格納された領域番号をレジスタから読み出し、処理回路４によって出力することができる。
【００６４】
一般に、各メモリ属性ユニット７は属性データを格納するために、個別のレジスタ９のインスタンスを含んでもよい。しかし、複数の異なるメモリ属性ユニット７が比較器１１０及び制御ロジック１１６などの他の回路のいくつかを共有することもあり得る。例えば、通常はセキュアＭＰＵ５０と低セキュアＭＰＵ５２のうち同時にアクティブになるのは１つだけなので、比較器１１０及び制御ロジック１１６を二重にする必要はなく、２つのＭＰＵの間で比較器１１０及びロジック１１６を共有することによって回路面積を節約することができる。
【００６５】
図６は、専用の領域特定命令ＴＴが提供される例を示すが、他の実例では、領域特定命令は、汎用命令などの別のタイプの命令によってトリガされてもよい。例えば、図９Ａは、ソース・レジスタＲｎの内容を第２のレジスタＲｍ＊に移すために汎用移動命令ＭＯＶが提供される事例を示す。専用レジスタが提供され、そのレジスタに書き込みが行われると、処理回路４がトリガされて、そのレジスタに置かれたアドレスについて領域特定演算を行ってもよい。したがって、第２のレジスタＲｍ＊を専用レジスタとしてＭＯＶ命令が実行されると、処理回路４が領域特定演算を行って、専用宛先レジスタＲｄ＊を図７に示す結果値に設定してもよい。次に別の命令で、領域特定値及びその他の追加情報を宛先レジスタＲｄ＊から取得することができる。図９Ａに示すように、ＭＯＶ命令を使用して専用レジスタにＡフラグをセットして、セキュアＭＰＵ５０又は低セキュアＭＰＵ５２がアクセスされるか否かを図７の説明と同じ方法で制御することもできる。
【００６６】
或いは、Ａフラグが提供されず、代わりに一実施例が図９Ｂに示すように提供されてもよく、この実施例では、１つがセキュアＭＰＵに対応し、他方が低セキュアＭＰＵに対応する２つの異なる専用レジスタＲｍ１＊、Ｒｍ２＊が提供されてもよく、プログラマは、これらの専用レジスタのどちらをＭＯＶ命令の宛先レジスタとするか選択することによって、どちらのＭＰＵに問い合わせるか選択することができる。同様に、図６の実例では、Ａフラグを使用する代わりに２つの別個の命令が提供され、１つがセキュアＭＰＵ５０への問い合わせ用、他方が低セキュアＭＰＵ５２への問い合わせ用であってもよい。
【００６７】
いくつかの実施例では、レジスタＲｍ＊、Ｒｍ１＊及びＲｍ２＊はメモリに割り当てられてもよく、そのような場合は、レジスタＲｎから専用レジスタＲｍ＊、Ｒｍ１＊及びＲｍ２＊への値の書き込みにｓｔｏｒｅ命令が使用されることになる。宛先レジスタＲｄ＊もまたメモリに割り当てられてもよく、領域特定値へのアクセスにはｌｏａｄ命令が使用されることになる。
【００６８】
図９Ａ及び９Ｂに示す例では、目標アドレスは、処理装置２が領域特定演算を行うようトリガするために専用レジスタＲｍ＊、Ｒｍ１＊又はＲｍ２＊に書き込まれる値であるが、他の実例では、専用レジスタにそのアドレスを書き込む必要はない。その代わり、専用レジスタに別の値が書き込まれ、それによって処理回路４がトリガされて別の場所からアドレスを読み出し、そのアドレスを使用して領域特定演算を行ってもよい。
【００６９】
したがって、本技術によってプログラマはコード内にある命令を含ませて処理回路を制御して、セキュリティ保護ユニット４２又はＭＰＵ５０、５２の記憶領域９の、所与の目標アドレスに一致する領域番号を取得することができる。これは、図１０〜１３の実例に示すようないくつかの状況で有用であり得る。
【００７０】
図１０は、セキュア・アドレスに分岐することによって低セキュア・ドメイン７０から呼び出されるセキュア関数ｂｏｂ（）の例を示す。関数ｂｏｂ（）は、低セキュア・ドメイン７０内のコードによって指定されるアドレス範囲ＡＤＤＲ［］を使用する。このタイプの関数には問題があり得る。その理由は、あるセキュア・アドレスを低セキュアのコード７０がセキュア・ドメイン８０に渡すことができる場合、通常、セキュア・ドメイン８０に入った後にはそれとは別のセキュア・アドレスへのアクセスは許可されるので、渡されたアドレスへの呼び出し又は書き込みを行う演算（例えば演算１３０）がセキュア・データを不適切にアクセス又は更新する可能性があるからである。この状況を回避するには、関数ｂｏｂ（）を記述する際に、低セキュア・ドメインから渡されたアドレスがセキュア・アドレスか低セキュア・アドレスかのチェックを含めるべきである。ただし、低セキュア・ドメインから配列が渡されたときには、ｂｏｂ（）は、配列全体が低セキュア・メモリ４６に含まれるのかチェックしなければならない。その理由は、配列の先頭アドレスが低セキュア・メモリ４６に位置している場合であっても、配列がセキュア・メモリ４４にまで広がっている（図１１の１５２に示すように）ことがあり、先頭アドレスの位置のみをチェックした場合はセキュリティ違反に繋がる可能性があることである。そのような状況は、セキュア関数ｂｏｂ（）が、アクセス対象の配列の先頭及び末尾の両方のアドレスをチェックすれば検出できることがある。しかし、配列がセキュアなメモリ・アドレス範囲の全体にわたり、先頭及び末尾のアドレスが低セキュア・メモリ４６に位置することもあるので、システムのセキュリティを確保するためには、これでは不十分である。この状況の例を図１１の１６０に示す。配列内の各アドレスについてセキュリティ保護ユニット４２内の属性データをチェックするには時間がかかり、電力消費の増大及びパフォーマンスの低下に繋がり得る。
【００７１】
前述した領域特定演算を使用すると、多くの場合で各アドレスを個別にチェックすることが不要になり、処理リソース及び電力を節約できることが本技術では認識されている。図１１に示すように、多くの場合で、配列ＡＤＤＲ［］に指定されたアドレス範囲０〜Ｎの全体がメモリ属性ユニット７の単一の記憶領域９に対応するアドレス範囲内に入る。例えば、図１１に示すアドレス１４０は、セキュリティ保護ユニット４２の単一の記憶領域９によって表されるアドレス空間の低セキュア領域内に全体が入る。この場合、重複領域が許可されないシステムでは、アドレス配列の先頭及び末尾のアドレスが同じ記憶領域９に関連し、その記憶範囲が低セキュアだと示されていると判断され得る場合には、その間のすべてのアドレスのアクセス許可をチェックする必要はなく、関数ｂｏｂ（）の残り部分を通常どおりに進めることができる。これにより、多くの処理を節約できる。希にアドレス範囲が複数の記憶領域９に関連付けられたアドレス範囲にまたがることがあり（例えば、図１１の例１５２、１６０を参照）、その場合には、さらにチェックを行って、処理を続行できるか判断することが必要なことがある。実際には、殆どの配列は例１４０に示すように単一の領域内にあるので、さらにチェックを行う必要がある場合はさほど多くない。さらにチェックが必要な場合であっても、１つの領域に関連付けられたアドレス範囲から別の領域に関連付けられたアドレス範囲にアドレスが移行する点を特定するために領域特定演算が役立ち、属性をチェックする必要のある個別アドレスの数を減らすことができる。
【００７２】
したがって、対応する図１２の例に示すように、関数ｂｏｂ（）が領域特定演算を含むように編集することができる。低セキュアコードが関数ｂｏｂ（）を呼び出すとき、セキュア・ドメイン８０への分岐がある。命令１７０の第１のペアが実行されて、配列ＡＤＤＲ［］の先頭及び末尾のアドレスがレジスタＲ１、Ｒ２に代入される。次に２つの領域特定演算１８０が行われて、レジスタＲ１、Ｒ２内のアドレスに対するセキュリティ保護領域番号（ＰＲＥＧＩＯＮ）がチェックされる。ステップ１９０で、レジスタＲ３、Ｒ４のセキュリティ保護ユニット４２の領域番号（ビット１５：８）が同じであれば両方の領域番号が有効（ビット１７）であり、これはアドレス配列ＡＤＤＲ［］の先頭及び末尾のアドレスがメモリ属性ユニットの１つの記憶領域９に関連することを意味するので、それらのアドレスが低セキュア・アドレスであれば（Ｒ３のビット２２が０）、アドレス配列ＡＤＤＲ［］はすべてがアドレス空間の低セキュア領域に関連するので、その配列全体が安全である。この場合には、分岐命令２００はアドレスａｄｄＸに分岐して、図１０に示すように関数に必要な処理を行う。一方、先頭と末尾のアドレスが異なる記憶領域に関連するか、又はセキュア領域に関連する場合には、ステップ２１０でさらにチェックが必要になり、このチェックが不成功の場合には処理はフォールトとなるか、何らかの方法でエラーが通知される。したがって、領域特定演算１８０をこのように使用することにより、多くの場合でさらなるチェック２１０を省略することができ、処理を大幅に節約することができる。
【００７３】
さらなるチェック２１０は様々な方法で行われてもよい。例えば、配列の先頭及び末尾のアドレスがメモリ属性ユニット７の異なる記憶領域９に関連することが判明した場合には、その間のアドレスを検査して記憶領域９の境界がどこにあるか探してもよい。例えば、先頭と末尾の中間のアドレスを最初にチェックして、それが先頭と末尾のどちらと同じ領域９に関連するか調べ、次に、さらにアドレス範囲をバイナリで分割していって、いくつの領域９がアドレス配列ＡＤＤＲ［］に対応するのか、そして、異なる領域間の境界がどこにあるのかが判明するまでチェックを続けてもよい。或いは、他の実施例では、領域特定演算１８０から得られた領域番号を使用して領域の先頭及び末尾アドレスを含むデータ構造のインデックスを作成し、隣接する領域（すなわち次にチェックされる領域）のアドレスを得ることもでき、この場合は境界がどこにあるのか知るためにバイナリ分割のプロセスを使用する必要はない。次に、１つの記憶領域９について１つのアドレスの属性をチェックして、関数ｂｏｂ（）の処理を続行できるか判断することができる。図１１の例１６０に示すように、配列ＡＤＤＲ［］が複数の領域にまたがる可能性もある。複数の領域がある場合には、関数の動作の続行が許可されるためには、それぞれの領域の属性が低セキュア・ドメインを示すことが必要になる。さらなるチェックは比較的複雑になる可能性があるが、領域特定演算を使用すればより高速に行うことができ、可能なら全く省略される。
【００７４】
図１０〜１２は低セキュア・ドメイン７０とセキュア・ドメイン８０の間の境界を越える関数の実例を示すが、他の実例では、特権付き状態９０と特権なし状態１００の間を越えるとき、又はセキュリティレベルの異なる他のモードの間を越えるときに類似の演算のセットを実行することもできる。また、図１２の実例は、ステップ１８０として専用の領域特定命令を使用して領域特定演算を実装するが、他の実例では、例えば専用レジスタへの書き込みを使用する図９の代替手法を使用してもよい。
【００７５】
図１３は、領域特定演算が役立ち得る別の状況を示す。複数の異なるプロセス又はコンテキストがアクティブになるにつれてＭＰＵ５０又は５２の設定が変化してもよい。その１つの実例として、同じドメイン又はモード内で互いに分離して保持する必要のある複数の異なるソフトウェア・ライブラリ２５０が存在する場合がある。例えば、互いに信頼関係がなく、セキュア・ドメイン８０の提供する保護をそれぞれが必要とするが、互いのアクセスは回避されなければならない当事者によって提供される、複数の異なるアプリケーションがセキュア・ドメイン８０内に存在することがある。したがって、ライブラリの１つをアクティブ・ライブラリとして選択し、他のライブラリを非アクティブに設定するライブラリ・マネージャ２６０が提供されてもよい。例えば、図１３ではライブラリ０がアクティブでライブラリ１が非アクティブである。この手法の詳細は、ＡＲＭ  Ｌｉｍｉｔｅｄ  ｏｆ  Ｃａｍｂｒｉｄｇｅ、ＵＫによって２０１３年６月１２日に出願され、その全体が参照により本明細書に組み込まれる同時係属特許出願ＧＢ１３１０４２１．１に記載されている。この手法では、各ライブラリはそれぞれ異なるＭＰＵ設定に関連付けられ、その設定は、そのライブラリを使用してアクセス可能なアドレス空間の範囲を定める。あるライブラリが非アクティブなときには、アドレス空間のその領域はアクセス不可能に設定され、ライブラリがアクティブなときには、その領域はアクセス可能に設定される。非アクティブなライブラリに関連付けられたアドレスへの（アクティブ・ライブラリから、又は異なるドメインで動作中のコードからの）関数呼び出し又は分岐があると、ＭＰＵは、そのアドレスがアクセス不可能であると判断し、これによってアクセス違反例外がトリガされる。ライブラリ・マネージャ２６０はフォールト・ハンドラを有し、このハンドラは、非アクティブなライブラリへのアクセスによってアクセス違反例外がトリガされたか否か検出することができ、それが検出された場合には、フォールト・ハンドラがＭＰＵ設定を切り換えて、新しいライブラリをアクティブ化して古いライブラリを非アクティブ化する。この時点でどのような更新をＭＰＵに行うべきかは、ライブラリ設定データ２７０を使用して判断される。
【００７６】
したがって、図１３の下部に示すように、第２のライブラリ（ライブラリ１）がアクティブ化され、第１のライブラリ（ライブラリ０）が非アクティブ化されたので、ＭＰＵ５０、５２には、現在、新しいアクティブ・ライブラリ（ライブラリ１）のためにアクセス許可が設定された複数の領域１、２、３がある。この時点で、ＭＰＵ５０、５２の、非アクティブ化されたライブラリ（ライブラリ０）に関連する領域９からデータを排除することは可能である。しかし、ＭＰＵ５０、５２の中の利用可能な記憶領域９の数は、新しくアクティブ化されたライブラリであるライブラリ１のための属性データを格納するのに必要な数より多い場合もある。最近非アクティブ化されたライブラリが比較的短期間のうちに再びアクティブ化されることはよくあるので、非アクティブ化されたライブラリ０に関連する属性データの少なくとも一部をＭＰＵ内に保持しながら、有効性ビット２８０を使用してそれらの領域が無効であることを示すことにより、後にライブラリが再びアクティブ化されたときにＭＰＵに多くのデータをロードする必要がなくなり、処理を高速化することができる。
【００７７】
しかし、ライブラリを再アクティブ化するときに行わなければならない重要な作業の１つは、関数呼び出しの目標アドレスを次にアクティブ化するライブラリのＩＤに変換することである。通常、ライブラリの主設定データ２７０はソフトウェア・データ構造を含み、要求されるライブラリへの分岐又は関数呼び出しの目標アドレスとライブラリ番号の間の対応を知るために、このデータ構造を連続的に検索することが必要になる。そのようなソフトウェア構造の検索は、パフォーマンス及び電力消費の点からは高コストである。
【００７８】
この問題は、本技術の領域特定演算を使用して対処可能である。領域特定演算を使用することにより、ＭＰＵ５０、５２を検索して、非アクティブなライブラリへの関数呼び出しの目標アドレスに対応する無効な記憶領域の領域番号を知ることができる。そうすれば、目標アドレスのみに基づく場合よりも、より効率的に領域番号をライブラリ番号に対応させることができる。例えば、図１３に示すようにライブラリ・マネージャ２６０によってソフトウェア・テーブル２９０を維持し、ＭＰＵの記憶領域９の領域識別子をライブラリ番号に対応させることができる。そのようなテーブル２９０は通常、アドレスを直接ライブラリ番号に対応させるテーブルよりずっと小さくなる。したがって、領域特定演算によりＭＰＵの更新がより効率的になる。いくつかの実例では、図１３に示すソフトウェア２９０はライブラリ設定データ２７０の一部であってもよい。また、いくつかの場合では、領域番号とライブラリ番号の対応付けはソフトウェア・テーブル２９０を使用せずに、例えば一致する領域自体の属性データ内にライブラリ番号を示すものを格納することによって行われてもよい。
【００７９】
図１４は、あるデータ処理の方法を示すフロー線図である。ステップ３００で、処理回路４のデコード段１２が、領域特定演算をトリガするための命令が存在するか検知する。これは、図６に示す領域特定命令又は、図９の例のように他の何らかの方法で領域特定演算をトリガする別の命令であることもできる。そのような命令が存在する場合は、どの領域が目標アドレスに対応するかステップ３０２で判断され、対応する領域を特定する領域特定値がステップ３０４で出力されて、その領域特定値が、データ処理装置２によって実行される少なくとも一部のソフトウェアの利用に供される。
【００８０】
本明細書では添付図面を参照しながら本発明の説明的実施例を詳細に説明してきたが、本発明がそれらの実施例に厳密に限定されず、当業者がそれらの実施例に、付随する特許請求の範囲に定められる本発明の範囲及び趣旨から逸脱することなく、様々な変更及び修正を行うことが可能であることが理解される。
【図１】
0006652491.tif 000007
【図２】
0006652491.tif 000008
【図３】
0006652491.tif 000009
【図４】
0006652491.tif 000010
【図５】
0006652491.tif 000011
【図６】
0006652491.tif 000012
【図７】
0006652491.tif 000013
【図８】
0006652491.tif 000014
【図９Ａ】
0006652491.tif 000015
【図９Ｂ】
0006652491.tif 000016
【図１０】
0006652491.tif 000017
【図１１】
0006652491.tif 000018
【図１２】
0006652491.tif 000019
【図１３】
0006652491.tif 000020
【図１４】
0006652491.tif 000021