メモリに対するアクセスの制御
メモリ・システムに対するアクセスを制御するための1つの手法は、メモリ・アクセス要求が、メモリ・システム内に記憶されているページ・テーブル内で指定されるアクセス許可を満たすかをチェックするメモリ管理ユニット(MMU)を提供することであり得る。アドレス空間は、典型的には、2の累乗のバイト数(例えば、4キロバイト)に対応するサイズを各々が有する、ページと呼ばれる領域に分割され、各ページの開始アドレス及び終端アドレスがNバイトのアドレス境界に位置整合され、Nは、対応するアドレス領域のサイズである。各ページ・テーブル・エントリは、アドレス空間の対応するページに対するアクセス許可を指定し、多くの場合、第1のアドレス空間(例えば、仮想アドレス空間)内の標的アドレスを第2のアドレス空間(例えば、物理アドレス空間)内のアドレスの対応するページにマッピングするためのアドレス変換マッピングも指定することになる。ページ・テーブルは、複数レベルのページ・テーブルを含む階層テーブル構造として実施することができ、入力アドレスのビットの第1のサブセットは、ページ・テーブルの第1のレベルの対応するエントリにインデックス付けし、インデックス付けされたエントリは、ページ・テーブルの第2のレベルのベース・アドレスを指定し、そこから、入力アドレスのビットの第2のサブセットに基づいてエントリをインデックス付けすることができ、以下、最終的に、インデックス付けされたエントリが指定されたアドレスの何らかのビットに基づいて選択されるページ・テーブルの最後のレベルに達するまで、テーブルの各後続レベルについて同様にされる。インデックス付けされたエントリは、実際のアドレス変換属性、及び、そのページを標的とするメモリ・アクセスに必要なアクセス許可を含む。MMUは、メモリ・システムからより最近にアクセスされた、ページ・テーブルの特定のエントリをキャッシュすることができるキャッシュ(トランスレーション・ルックアサイド・バッファ(TLB)と呼ばれる)を有することができ、結果、処理回路が同じページ・テーブル・エントリを要求する複数のメモリ・アクセス要求を発行する場合、それらのエントリにより迅速に再びアクセスすることができる。MMUは、多くの異なるアドレス領域に対するアクセスに対する、例えば粒度が4Kバイトであり得る制御を設定することが許容可能であり得、また、同じ仮想アドレスを使用するが、メモリ・システムによって使用される異なる物理アドレスにマッピングされる必要がある複数の異なるソフトウェア・プロセスによってトリガされるアクセスをハンドリングするために、第1のアドレス空間内の任意のページから第2のアドレス空間内の任意のページへのアドレス変換の任意のマッピングが必要とされ得る、相対的に高い実施作業負荷をハンドリングするように設計されているプロセッサに有用であり得る。
しかしながら、よりエネルギー効率的な作業負荷を目標とするか、又は、リアル・タイムの適用のために設計されているプロセッサについては、大きいページ・テーブル構造が個々のページに対するアクセス許可を定義するために使用されるため、MMUは不適である場合があり、制御の粒度は、2キロバイト程度とわずかなランダム・アクセス・メモリ(RAM)しか有しない、よりエネルギー効率的なより性能の低いアプリケーションを目標とするシステムに典型的に見られる制約されたメモリ環境には大きすぎる場合がある。また、入力アドレス・ビットのサブセットをページ・テーブルのインデックスとして使用することを促進するために、MMUは、典型的には、各ページを、2の累乗のバイト数に対応するサイズを有するように制約する。これは、2の累乗のバイト数以外のサイズを有する特定のアドレス領域のみに対するアクセス許可の特定のセットを設定することが所望される場合、これは、サイズが2の累乗のバイト数であるより小さいページに各々が対応する複数の別個のページ・テーブル・エントリを使用して表現される必要があることを意味し、それらの個々のページ・テーブル・エントリの各々は、ページ・テーブル・エントリのセットが全体として、より大きい、サイズが2の累乗でないアドレスサイズに対応するように、正確に同じアクセス許可を定義する。アドレス領域の複数のページへのこの人工的な分割は、大きいアドレス空間をカバーするために使用される階層ページ構造へのインデックス付けのために入力アドレスからの全ビット数を使用する効率的なインデックス付け手順を可能にするために必要とされる、ページのサイズに対応するアドレス境界へのページ位置整合の制約の結果である。
しかしながら、この手法は、アクセス許可の所与のセットによって統制されるように意図されるコード又はデータ片内で、メモリ・アクセスが、ページ・テーブルの異なるページ・テーブル・エントリに対応するページ間のページ境界をまたぐ可能性があり、そのため、新たなページのページ・テーブル・エントリがMMUにおいてまだキャッシュされていない場合、これは、メモリから必要なページ・テーブル・エントリをフェッチするために、コードの或るセクションをいくらか実行することを通じて、ページ・テーブル・ウォークが実施されることを必要とする場合があるため、リアル・タイム・コードについて問題を引き起こす可能性がある。また、ページ境界に達したときに、次のページのページ・テーブル・エントリがページ・テーブル内でまだ定義されていないことが分かった場合、オペレーティング・システム又は他の監督プロセスが、必要なページをマッピングするためにページ・テーブル・エントリを設定することを、ソフトウェア例外ハンドラがトリガすることが必要になり得、長い遅延を引き起こすため、これは、対処するのに時間がかかる場合がある障害を引き起こす可能性がある。そのような遅延は、変動性が高い可能性があり、最悪の場合、極端に長引く場合があり、コードのセクションが、3つ以上の異なるページにわたるアドレスに対するメモリ・アクセスを発行する場合、各ページ境界において、再びそのような遅延を被る可能性がある。これによって、MMUが、リアル・タイム・アプリケーションにおいて決定性の応答時間を有するための要件を満たすことを可能にすることが非常に困難になる。
メモリに対するアクセスを制御するためのもう1つの手法は、処理回路によって発行されるメモリ・アクセス要求が、複数のメモリ保護エントリ内で指定されるアクセス許可を満たすかをチェックするメモリ保護ユニット(MPU)を提供することであり得る。各メモリ保護境界が、アドレス空間内の可変サイズの特定のアドレス領域に対応し得る。所与のメモリ保護エントリの対応するアドレス領域は、所与のメモリ保護エントリのパラメータを通じて識別される開始アドレス及び終端アドレスによって境界され得る。MMUによって使用されるページ・テーブルとは異なり、MPUについて、メモリ保護エントリに対応する領域は、2の累乗以外のバイト数になることを許容され得る可変サイズを有することができる。この手法を用いると、アドレス・アクセスがページ・アドレス境界をまたぐ度毎に発生するページ・ウォーク及びページ障害の危険性を回避するために、単一のメモリ保護エントリを使用して、任意の(2の累乗でない)サイズのメモリ・アドレス領域を定義することができることを保証することができる。これによって、MPUが、リアル・タイム・アプリケーションを処理するように設計されたシステムにより適したものになる。また、MPUは、典型的には、MPU内にローカルに設けられるレジスタ内にメモリ保護エントリの各々を記憶し、これは高速にアクセスすることができ、ここでも、リアル・タイム処理が支援され、メモリ・システム内に階層構造を有する大きいページ・テーブルを記憶する必要性が回避され、これは、RAMが制限されたシステムにとっては重要であり得る。
しかしながら、MPUを備えるシステムにおいては、メモリへのアクセスを制御するための構成データは、典型的にはアクセスされるべき標的アドレスをレジスタ内に記憶されている各メモリ保護エントリの領域識別パラメータと比較するための比較器の並列バンクに直接的に接続されるレジスタを使用して指定されるため、MPUと関連付けられる電力及び面積は、MPUによってサポートされるメモリ保護エントリの数が増大するにつれて、不都合に拡大することが難点である。実際、これは、サポートされるメモリ保護エントリの数が、例えば、8又は16など、相対的に少数に制限され得ることを意味し得る。典型的なMPUにおいてメモリ保護エントリの数が制限されることによって、処理システム上で実行するソフトウェアによって達成される性能に深刻な影響が及ぶ可能性がある。
例えば、一片のソフトウェアは、MPUによってサポートされる保護エントリの数において、ハードウェアにおいてサポートされるよりも多数の個別のアドレス領域が、異なるアクセス許可によって定義されることを必要とし得る。この場合、任意の所与の時点において、そのソフトウェアによってアクセスされる必要があるアドレス空間の少なくともいくらかの部分は、現在、そのために定義された対応するメモリ保護エントリを有しない。これは、アドレス空間の現在定義されていない領域内のアドレスに対するアクセスは、その後ソフトウェアが、現在アクセスされる必要がある領域に必要なパラメータによって、異なる領域のために以前に定義されているパラメータを上書きするように、MPUのレジスタにステップ・インし、再構成する必要がある例外をトリガすることになることを意味する。その後、後の命令が、上書きされた、以前定義された領域にアクセスする場合、これによってその後、MPU構成が再び元通りに切り替わり得る。その度に切り替えをトリガする例外を必要とする、このMPUレジスタの内容の絶え間ない切り替えは、性能に大きい損害を及ぼす可能性がある。
別の例は、プロセッサが、相互に信頼しないが、間でデータを共有する必要がある複数のソフトウェア片を実行する必要がある場合であり得る。データを共有することを可能にするために、所与のソフトウェア片は、アドレス空間の制限された部分のみが他のプロセスにとってアクセス可能であるように、アドレス空間の部分を分割することを所望し得るが、アドレス空間へのアクセスに対するそのような精細な度合いの制御を可能にするには、これは、追加のアドレス領域が定義されることを必要とし得、そのような精細な粒度の制御を可能にするには、ハードウェアにおいてMPUによってサポートされる十分な予備のメモリ保護エントリが存在しない場合がある。したがって、実際には、同じデータが結局のところ、アドレス空間の複数の部分へとコピーされることになり得、当該部分内の1つのコピーが第1のソフトウェアによってアクセスされ、当該部分内のもう1つのコピーが第2のソフトウェアによってアクセスされ、結果として、コピーを実施するために時間が無駄になり、利用可能なメモリ容量の使用が非効率的になり、これは、メモリ・リソースが制約されているシステムでは特に問題になり得る。
したがって、典型的なMMU及びMPUは、現在、リアル・タイム要件を有し、及び/又は、メモリ容量が相対的に制約されているシステムでは、領域毎に定義されるアクセス許可に基づくメモリ・システムへのアクセスを制御するために、効率的なソリューションを提供することができない。
メモリベースのメモリ保護テーブルを有するMPU
下記に論じる技法において、処理回路によって発行されるメモリ・アクセス要求が、メモリ・システム内に記憶されているメモリ保護テーブル内で指定されるアクセス許可を満たすかをチェックするための許可チェック回路を備えるMPUが提供される。メモリ保護テーブルは、アドレス空間内の可変サイズの対応するアドレス領域に関するアクセス許可を各々が指定する、複数のメモリ保護エントリを含む。各エントリはまた、対応するアドレス領域の開始アドレス及び終端アドレスを識別するための領域識別パラメータをも指定する。MPUは、可変サイズが、2の累乗以外のバイト数であることを可能にする。メモリ・システムからメモリ保護テーブルにアクセスするための少なくとも1つのMPUメモリ・アクセス要求を開始するためのMPUメモリ・アクセス回路が提供される。
したがって、それに対するアクセスがMPUによって規制される同じメモリ・システム内のメモリ保護テーブルを提供することによって、レジスタが、並列に標的アドレスと比較される各エントリの領域定義データを記憶することに基づく典型的なMPUについて実際そうであるよりも多数のメモリ保護エントリを提供する柔軟性が与えられる。メモリ保護テーブルをメモリ・システム(典型的には、レジスタよりもアクセスするのに時間がかかる)内に移動させることによってソフトウェア性能を改善することが可能になるということは、直観に反するかもしれない。しかしながら、メモリ・システムから個々のメモリ保護エントリにアクセスすることはより時間がかかり得るが、ハードウェア内のMPUによってサポートされるエントリの数がソフトウェアの要件に対処するには不十分であり、そうでなければアドレス空間の未定義の領域へのアクセスに起因して頻繁に例外に遭遇することによって大きい性能コストを被ることになる事例に対処するために、上述したソフトウェア次善策を回避することによって、全体的な性能を改善することができる。メモリ保護テーブルがメモリ内に設けられることによって、エントリの数によるハードウェア・コストの拡大は、はるかに緩やかになる。
また、各領域が、2の累乗以外のバイト数に対応する任意のサイズを有することを可能にすることは、各領域が多量のメモリをカバーすることができ、そうでなければアドレスが領域境界をまたぐときにメモリ保護障害を引き起こす危険性に直面することになるが、同じアクセス許可を有するように意図されている領域を複数の別個のエントリに細分化する必要がない。これによって、重要な動作がより高速の且つ/又は決定性の応答時間によってハンドリングされる必要があるリアル・タイム・アプリケーションにサービスする際に、MPUがMMUよりも良好になる。
メモリ保護テーブルのエントリは、アドレス空間内で、各エントリの対応するアドレス領域の開始アドレスの順序において配列することができる。これは、ページ・テーブルの各レベルが、さらなるレベルのページ・テーブルへのポインタを有するエントリを含み得、そのため、ページ・テーブル構造全体の中で、それぞれのページに対するアクセス許可を実際に提供する最後のレベルのページ・テーブル・エントリが、アドレス空間内で各対応するアドレス・ページを有する開始アドレスの順序とは異なる順序において配列され得る、MMUによって使用されるページ・テーブル構造とは異なり得る。メモリ保護テーブルのメモリ保護エントリを、開始アドレスの順序において配列された、線形的にアクセスされるテーブルとして実施することによって、関連するメモリ保護エントリを求めるメモリ保護テーブルの探索を、より単純にすることができる。
各メモリ保護エントリは、アドレス空間の所与のアドレス領域に対応する。いくつかの実施態様において、アドレス空間は、物理アドレス空間であってもよい。したがって、処理回路によって発行されるメモリ・アクセス要求によって指定される物理アドレスに基づいて、メモリ保護テーブルに問い合わせることができ、物理アドレスは、メモリ・システム内でアクセスされる対応する位置に、直接的に対応する。アドレス変換を回避することによって、メモリ保護テーブルへのアクセスと並列にメモリへのアクセスを実施することが可能であり得るため、メモリへのアクセスをより高速にすることができるため、これは、リアル・タイム・アプリケーションにより適切であり得る。その後、許可が満足されないと判定される場合、メモリへのアクセスによって返されるデータは、処理回路に転送されない。
MPUメモリ・アクセス回路がメモリ・システムからメモリ保護テーブルにアクセスするために少なくとも1つのMPUメモリ・アクセス要求を開始するとき、標的アドレスを含むアドレス領域に対応するメモリ保護エントリだけでなく、メモリ保護テーブルの複数のメモリ保護エントリにアクセスする必要があり得る。これは、各エントリが2の累乗のバイト数でない可変サイズの領域に対応し得るとき、所与のアドレス領域と関連付けられるエントリが位置するメモリ・システム内のアドレスは事前に分からない場合があり、そのため、実際には、標的アドレスを含む領域のエントリを見つけるためにテーブルが探索される必要があり得、これによって、標的アドレスをそのエントリの領域識別パラメータと比較するために、2つ以上のエントリにアクセスする必要があり得るためである。したがって、標的アドレスが、テーブルの所与のメモリ保護エントリの対応するアドレス領域内にある場合、少なくとも1つのMPUメモリ・アクセス要求が発行され得、発行されるMPUメモリ・アクセス要求のうちの少なくとも1つが、所与のメモリ保護エントリを標的とし得る(また、多くの場合、他のメモリ保護エントリへのMPUメモリ・アクセス要求も存在し得る)。
各メモリ保護エントリについて、MPUは、対応するアドレス領域の開始アドレス及び終端アドレスが、Nバイトのアドレス境界に対して不整合であることを許容し得る。ここでNバイトは、対応するアドレス領域のサイズである。これによって、MPUが、不整合なアドレスにおいて開始する任意のサイズの単一のアドレス領域に対するアクセス許可を管理することが可能になり、これは、そうでなければ位置整合したアドレス境界において開始するように領域を制約するシステムにおいて必要になる、共有される特性を有する領域の複数のエントリへの人工的な分割を回避することを助けることができ、上述した理由で、リアル・タイム・コードに関する性能を改善するのを助けることができる。
MPUは、少なくとも1つの静的メモリ保護エントリを記憶するための静的MPUレジスタ・ストレージを有することができる。少なくとも1つの静的メモリ保護エントリは、メモリ・システム内に記憶されているメモリ保護テーブルのメモリ保護エントリ内で定義される許可を補完するために、指定されているアクセス許可を有するアドレス領域のさらなる定義を提供することができる。静的レジスタ・ストレージ内で定義される追加のMPU領域を提供するために、いくつかの構成オプションを提供することは、割り込み待ち時間を短く維持し、決定性の割り込み挙動を提供するために有用であり得る。例えば、静的レジスタ・ストレージは、メモリ・システムからロードされるメモリ保護エントリによってチェックされる必要がある場合よりも高速の応答を提供するように、特定の重要なアドレス領域が、性能にとって重要なコードによってアクセスされるためのアクセス許可を定義することができる。したがって、静的MPUレジスタ・ストレージを有する実施態様において、MPUは実効的には、いくつかのアドレス領域を定義するレジスタベースのエントリと、他のアドレス領域を定義するメモリベースのエントリの両方を使用するハイブリッドMPUであり得る。これは、割り込み待ち時間及び特定のシステムのために必要とされるリアル・タイム保証、MPUを実施するハードウェア・コスト、並びに、総数がより多いメモリ保護エントリが所与の時点において定義されることを必要とし得るソフトウェアによって達成されるソフトウェア性能の間の良好なバランスを提供することができる。
静的MPUレジスタ・ストレージは、処理回路によって処理される少なくとも1つのMPUパラメータ構成動作によって構成されると、システム・リセット又は電源停止事象がない場合に、静的MPUレジスタ・ストレージ内に記憶された静的メモリ保護エントリが、静的メモリ保護エントリの再構成をトリガするためのさらなるMPUパラメータ構成動作が処理回路によって処理されるまで、静的MPUレジスタ・ストレージ内に記憶されたままであるという意味において、静的であり得る。MPUパラメータ構成動作は、アドレス空間の一部分について、メモリ・アクセスがどのようにハンドリングされるかに変化があるように、所与のアドレス領域に対して指定される属性を変化させる(例えば、アクセス許可を変化させる、又は、領域に対する制限アドレスを変化させる)任意の動作であってもよい。MPUパラメータ構成動作は、処理回路によって実行される専用MPU構成命令であってもよく、又は、MPUの静的MPUレジスタ・ストレージにマッピングされるアドレスをその標的アドレスとして指定するストア命令であってもよい。MPUパラメータ構成動作はまた、デバッガ、又は、処理回路の外部の他のエンティティによって要求されるときに、処理回路によって実施される動作であってもよい。したがって、静的メモリ保護エントリが静的MPUレジスタ・ストレージ内でアクティブであるとき、これは、いずれのアドレスがシステムによってアクセスされるかにかかわらず、再構成されるまで静的メモリ保護エントリが残るという点において、キャッシュとは異なる。対照的に、キャッシュは、一切のMPU構成動作が処理回路によって実施されることを必要とせずに、必要とされ得る異なるアドレスのエントリに空間を譲るために、そのエントリを、一定時間にわたって使用されない場合に、又は、何らかの他の排除方針に基づいて排除されるようにする。キャッシュされる特定のエントリは時に応じて変化し得るが、キャッシュ占有状態の変化は、所与のアドレスへのメモリ・アクセスがどのようにハンドリングされるべきであるかの機能定義を変化させるのではなく、所与のメモリ保護エントリを得ることができる待ち時間にしか影響を与えないため、キャッシュとは、メモリ保護テーブルの所与のメモリ保護エントリによって指定される、基礎となる属性に何らかの変化があることを意味するものではない。
処理回路によって発行されるメモリ・アクセス要求に応答して、MPUメモリ・アクセス回路は、標的アドレスが静的MPUレジスタ・ストレージ内に記憶されている静的メモリ保護エントリの対応するアドレス領域内にあり、且つ発行されるメモリ・アクセス要求が、その静的メモリ保護エントリによって指定されるアクセス許可を満たすとき、少なくとも1つのMPUメモリ・アクセス要求がメモリ・システムへと発行されるのを抑制することができる。したがって、静的メモリ保護エントリ内にヒットがあるとき、メモリ保護テーブルのメモリ保護エントリをフェッチするためにMPUメモリ・アクセス要求をトリガする必要は一切ない。これは、他の動作に使用され得るメモリ帯域幅を維持する助けとなり、静的MPUレジスタ・ストレージ内に記憶されている静的エントリを使用する、性能にとって重要なソフトウェアが、メモリベースの領域検索に起因して失速することがないことを意味する。実効的に、静的メモリ保護エントリは、メモリ保護テーブルのメモリベースのエントリに優先し得る。
メモリ・アクセス要求の標的アドレスが静的メモリ保護エントリ内でヒットするが、アクセス要求が、その静的メモリ保護エントリによって指定されるアクセス許可を満たすことができない事例は、種々の方法でハンドリングすることができる。いくつかの事例において、少なくとも1つのMPUメモリ・アクセス要求はまた、メモリ・アクセス要求が、その標的アドレスが対応するアドレス領域にあった静的メモリ保護エントリにおいて指定されるアクセス許可を満たすことができないときにも抑制することができる。したがって、この事例において、静的MPUレジスタ・ストレージ内にヒットが一切ない場合、メモリ・システム内のメモリ保護テーブルにアクセスする必要はない。
代替的に、静的メモリ保護エントリ内でヒットするが、その静的メモリ保護エントリ内でアクセス許可を得られないメモリ・アクセス要求について、当該アクセス許可よりも、メモリ・システム内に記憶されているメモリ保護テーブル内の一致するメモリ保護エントリ(その対応するアドレス領域が標的アドレスを含むエントリを含む、一致するメモリ保護エントリ)によって指定されるアクセス許可が優先されることが許容され得る。したがって、要求が許可されるときの静的MPUレジスタ・ストレージ内のヒットは、メモリベースのメモリ保護エントリ内で設定されているいかなる許可にも優先するが、要求が許可されないときの静的MPUレジスタ・ストレージ内のヒットよりも、メモリ保護テーブルの一致するメモリ保護エントリ内で指定される他のアクセス許可が優先され得る。この手法は、第2のソフトウェア・プロセスによってアクセスされるアドレス領域の特定の部分領域への第1のソフトウェア・プロセスのアクセスを可能にするために定義される必要がある領域の総数を低減するのに有用であり得る。例えば、静的MPUエントリは、第2のソフトウェア・プロセスが当該領域にアクセスすることを許可し、ただし、第1のソフトウェア・プロセスのアクセスは拒絶するために、より広いアドレス領域に対して設定され得る。より広い領域内のより小さいアドレス領域をカバーするメモリベースのメモリ保護エントリは、このとき、第1のソフトウェアがアクセスを許可される部分範囲のみに対して指定され得る。これによって、第1のソフトウェアによってアクセスされる部分範囲のいずれかの側のより広い範囲の部分に対して別個のエントリを提供する必要性を回避することができ、他の静的メモリ保護エントリが他の目的のために維持され、又は、メモリ保護テーブルの合計サイズを低減することが可能になる。
各静的メモリ保護エントリは、静的メモリ保護エントリが未使用の静的メモリ保護エントリであるかを示す未使用指示と関連付けることができる。所与の静的メモリ保護エントリが未使用の静的メモリ保護エントリであると示されるとき、MPUは、静的MPUレジスタ・ストレージの、所与の静的メモリ保護エントリに対応する部分の中のメモリ保護テーブルからメモリ保護エントリをキャッシュすることができる。したがって、ソフトウェアが、ハードウェアにおいてサポートされるほど多くの静的メモリ保護エントリを必要としない場合、ハードウェアレジスタ・ストレージの一部分をキャッシュとして再利用して、メモリ保護テーブルからのメモリ保護エントリのローカル記憶を可能にすることができ、結果、エントリに、メモリ・システムからフェッチされなければならない場合よりも高速にアクセスすることができる。これによって、性能を改善することができる。所与の静的メモリ保護エントリが未使用であるとしてマークされるとき、いずれの特定のメモリ保護エントリが静的MPUレジスタ・ストレージ内でキャッシュされるかは、たとえ処理回路がMPUパラメータ構成動作を一切実施していない場合であっても、キャッシュ交換ポリシに依存して、時に応じて変化し得る。
したがって、静的メモリ保護エントリが使用済みとしてマークされる(すなわち、未使用指示が設定されていない)とき、静的MPUレジスタ・ストレージのその部分内のデータは、MPUパラメータ構成動作によって再構成されるまで記憶されたままであり得るが、静的メモリ保護エントリが未使用として示されるとき、当該エントリは、キャッシュとして使用され得、当該事例において、処理回路によって実行されるものとしてのアドレス・アクセスのパターンに依存して、静的MPUレジスタ・ストレージ内で提供される特定のエントリに変化があり得る。未使用としてマークされない静的メモリ保護エントリについて、別個の有効化/無効化指示も存在し得、これは、有効に設定されるとき、エントリが有効であり、メモリ・アクセス要求の標的アドレスによってヒットし得ることを意味し、一方、無効化されたエントリについて、MPUは、たとえ標的アドレスが無効化エントリによって定義される領域に一致する場合であっても、常に失敗を返し得る。静的MPUレジスタ・ストレージの、無効化静的メモリ保護エントリに対応する部分は、メモリ内のメモリ保護テーブルからのエントリをキャッシュするためのキャッシュとして使用することができないという点において、無効化エントリは、未使用エントリとは異なり得る。ソフトウェアは、そのアドレス範囲に対するアクセスが拒絶されるように、特定の静的メモリ保護エントリを一時的に無効化することができ、ただし、必要に応じて後に再び有効化することができるように、静的MPUレジスタ・ストレージ内の静的メモリ保護エントリを維持し続け、一方、未使用静的メモリ保護エントリとは、性能を改善するために、対応するレジスタ・ストレージをキャッシュとして使用することができるが、未使用指示が設定される前からの静的MPUレジスタ・ストレージの内容は保持されることが保証されないことを意味する。
MPUは、メモリ保護テーブルの少なくとも1つのメモリ保護エントリをキャッシュするためのMPUキャッシュ・ストレージを備えることができる。MPUキャッシュ・ストレージは、エントリが上述したような未使用としてマークされる事例においては静的MPUレジスタ・ストレージになり得る。しかしながら、当該ストレージは、メモリ保護テーブルからエントリをキャッシュするために提供される専用MPUキャッシュ・ストレージを提供するためにも有用であり得、これは、静的メモリ保護エントリ(与えられる場合)がどのように構成されているかにかかわらず、キャッシュとして作用する。MPUキャッシュ・ストレージは、静的MPUレジスタ・ストレージと同様に、MPU内のレジスタのさらなるセットを使用して実施されてもよく、又は、SRAMのような異なるタイプのデータ・ストレージを使用して実施されてもよい。場合によっては、静的MPUレジスタ・ストレージ及びMPUキャッシュ・ストレージは、同じストレージ構造の一部であってもよく、一部がキャッシュ・ストレージとして使用するために分割され、他の部分が、静的に構成されたメモリ保護エントリを記憶するために分割される。
したがって、MPUキャッシュ・ストレージは、メモリ保護テーブルの少なくとも1つのメモリ保護エントリをキャッシュするために提供される。MPUメモリ・アクセス回路は、キャッシュ交換ポリシ(例えば、最長時間未使用、ラウンド・ロビンなど)を使用して、所与の時点において、メモリ保護テーブルからのメモリ保護エントリのいずれのセットがMPUキャッシュ・ストレージ内でキャッシュされるかを決定することができる。これは、未使用としてマークされていない静的メモリ保護エントリを記憶する静的MPUレジスタ・ストレージの部分とは対照的に、たとえ処理回路がいかなるMPUパラメータ構成動作も実行していない場合であっても、MPUキャッシュ・ストレージを更新することができることを意味する。
処理回路によって発行されるメモリ・アクセス要求に応答して、MPUメモリ・アクセス回路は、標的アドレスが、MPUキャッシュ内に記憶されている任意のメモリ保護エントリに対して指定されている対応するアドレス領域内にあるかに依存して、少なくとも1つのMPUメモリ・アクセス要求を開始すべきかを決定することができる。例えば、MPUキャッシュ・ストレージを最初に検索することができ、MPUキャッシュ・ストレージ内にヒットがある場合、いかなるMPUメモリ・アクセス要求も開始する必要はあり得ない。キャッシュ交換ポリシは、MPUメモリ・アクセス要求が発行されることを必要とするメモリ・アクセス要求の部分を低減するように、将来において最も有用であると予測されるメモリ保護エントリを保持することを目標とし得る。したがって、MPUキャッシュ・ストレージ内にヒットがある場合、少なくとも1つのMPUメモリ・アクセス要求は抑制することができる。
処理回路は、所与のメモリ保護エントリが得られたメモリ保護テーブル内の位置を識別するエントリ識別子を取り出すためのエントリ識別子問い合わせ命令に応答することができる。例えば、エントリ識別子問い合わせ命令は、標的アドレスを指定することができ、応答して、処理回路及び/又はMPUは、標的アドレスに一致するメモリ保護エントリのエントリ識別子の指示を返すことができる。エントリ識別子は、取り出されたエントリ識別子を処理回路のアーキテクチャ・レジスタに書き込むことによって、処理回路上で実行しているソフトウェアにとってアクセス可能にすることができる。MPUキャッシュ・ストレージは、キャッシュされた各メモリ保護エントリについて、キャッシュされたメモリ保護エントリが得られたメモリ保護テーブル内の位置と関連付けられるエントリ識別子を指定することができる。これは、キャッシュされたメモリ保護エントリ内でヒットするアドレスと関連付けられるエントリ識別子を識別するためにメモリ・システムへのMPUメモリ・アクセス要求を開始する必要がないため、キャッシュされたメモリ保護エントリについて、処理回路が、より高速にエントリ識別子問い合わせ命令にサービスすることができることを意味する。(アクセス許可を返すだけでなく)所与のメモリ保護エントリのエントリ識別子を取り出すことが可能である命令は、特定のタイプのセキュリティ・チェックを高速化し、又は、コード片が決定性の時間で作動する信頼度を提供するのに有用であり得る。所与の一対のアドレスに対してエントリ識別子問い合わせ命令を実行することによって、その後、両方のエントリ識別子問い合わせ命令が同じエントリ識別子を返す場合、当該アドレス対の間のアドレス範囲全体が同じメモリ保護テーブル・エントリに対応すると判定することができ、結果、指定されているアドレス対の間のマッピングされていないアドレス領域へのアクセスに起因する障害はないと保証することができる。これは、範囲内の各個々のアドレスに対する別個のチェックを必要とするのではなく、範囲が単一のメモリ保護領域内で全体的に失敗することが立証されているときに、アドレス範囲全体に対する単一のアクセス許可チェックが実施され得ることを意味し得るため、これによってまた性能を改善することができる。したがって、エントリ自体の任意のパラメータに加えて、MPUキャッシュ・ストレージ内のキャッシュされたメモリ保護エントリと関連付けられるエントリ識別子をキャッシュすることが、そのようなエントリ識別子問い合わせ命令を実行するときに、処理回路の性能を高速化するのに有用であり得る。
処理回路は、複数のセキュリティ状態において動作することを可能にすることができ、各状態は、複数の特権レベルに細分化され得る。処理回路は、例えば、他のセキュリティ状態におけるコードへの分岐を可能にすることによって、セキュリティ状態間での高速遷移を許容することができる。複数のセキュリティ状態の各々は、処理回路がそのセキュリティ状態において命令を実行しているときに使用されることになる、関連付けられるメモリ保護テーブルを有することができる。必要とされるMPUキャッシュ・ストレージの量を低減するために、MPUキャッシュ・ストレージは、保護エントリがメモリ保護テーブルから取得されたときに処理回路によって使用されていたセキュリティ状態を識別するためのセキュリティ状態識別子を指定するキャッシュ内の各エントリを有する複数のセキュリティ状態の間で共有され得る。MPUは、そのセキュリティ状態識別子が処理回路の現在アクティブなセキュリティ状態とは異なるセキュリティ状態を識別する、MPUキャッシュ・ストレージ内に記憶されているキャッシュされたエントリの使用を抑制することができる。したがって、非アクティブなセキュリティ状態と関連付けられるエントリはMPUキャッシュ・ストレージ内にキャッシュされたままになり得るが、現在アクティブなセキュリティ状態のテーブルがセキュリティ状態識別子によって識別されるセキュリティ状態と異なるとき、標的アドレスに一致するものとして検出されない。たとえアクティブなセキュリティ状態が処理回路によって再構成される場合であっても、アクティブなセキュリティ状態が後に、以前にアクティブであったセキュリティ状態に戻って切り替わる場合、そのセキュリティ状態と関連付けられるいくつかのキャッシュされたメモリ保護エントリは依然としてキャッシュ内に留まることができ、したがって、より迅速にアクセスされて性能を改善することができるため、これによって、異なるセキュリティ状態間で切り替えるときに性能を改善することが可能になる。
代替的に、キャッシュされたメモリ保護エントリをセキュリティ状態識別子によってタグ付けする代わりに、別の手法は、アクティブなセキュリティ状態が処理回路によって変更されるのに応答して、MPUキャッシュ・ストレージ内のすべてのエントリを無効化することであり得る。これによって、アクティブなセキュリティ状態が切り替えられた後に、新たにアクティブになったセキュリティ状態と関連付けられるメモリ保護テーブルからのエントリによって、キャッシュに再びデータ投入する必要があり得るが、キャッシュされたメモリ保護エントリ毎にセキュリティ状態識別子フィールドを提供する必要がないため、この手法は、MPUキャッシュ・ストレージをより小規模にすることができる。
MPUキャッシュ・ストレージは、各キャッシュ・メモリ保護エントリについて、キャッシュされたメモリ保護エントリが得られたメモリ保護テーブルと関連付けられるテーブル識別子を指定することができる。例えば、異なるソフトウェア片に対応する異なるテーブルなど、複数の別個のメモリ保護テーブルがメモリ・システム内で確立され得る。各メモリ保護テーブルは、所与のテーブル識別子によって識別され得る。例えば、テーブル識別子は、テーブルに割り当てられる任意の数値であってもよく、又は、メモリ保護テーブルのベース・アドレスの指示が、テーブル識別子として使用されてもよい。装置は、メモリへのアクセス許可をチェックするために現在使用されるべきであるアクティブなメモリ保護テーブルを識別するアクティブ・テーブル識別子を記憶するためのアクティブ・テーブル識別子レジスタを有することができる。MPUは、キャッシュされたメモリ保護エントリと関連付けられるテーブル識別子が、アクティブ・テーブル識別子レジスタ内に記憶されているアクティブ・テーブル識別子とは異なる、MPUキャッシュ・ストレージ内に記憶されている、キャッシュされたメモリ保護エントリの使用を抑制することができる。したがって、非アクティブなメモリ保護テーブルと関連付けられるエントリはMPUキャッシュ・ストレージ内にキャッシュされたままになり得るが、現在アクティブなテーブルが異なるメモリ保護テーブルであるとき、標的アドレスに一致するものとして検出されない。たとえアクティブ・テーブル識別子が処理回路によって、異なるメモリ保護テーブルに切り替わるように再構成される場合であっても、アクティブなメモリ保護テーブルが後に、以前にアクセスされたテーブルに戻って切り替わる場合、そのテーブルと関連付けられるいくつかのキャッシュされたメモリ保護エントリは依然としてMPUキャッシュ・ストレージ内に留まることができ、したがって、より迅速にアクセスされて性能を改善することができるため、これによって、異なるメモリ保護テーブルを使用して異なるソフトウェア・プロセス間で切り替えるときに性能を改善することが可能になる。
代替的に、キャッシュされたメモリ保護エントリを対応するテーブル識別子によってタグ付けする代わりに、別の手法は、アクティブ・テーブル識別子レジスタが処理回路によって変更されるのに応答して、MPUキャッシュ・ストレージ内のすべてのエントリを無効化することであり得る。これによって、アクティブなテーブルが切り替えられた後に、新たにアクティブになったメモリ保護テーブルからのエントリによって、キャッシュに再びデータ投入する必要があり得るが、キャッシュされたメモリ保護エントリ毎にテーブル識別子フィールドを提供する必要がないため、この手法は、MPUキャッシュ・ストレージをより小規模にすることができる。
メモリ保護キャッシュ無効化動作に応答して、処理回路は、無効化条件を満たす、MPUキャッシュ・ストレージ内に記憶されている1つ又は複数のキャッシュされたメモリ保護エントリを無効化するように、MPUをトリガすることができる。例えば、メモリ保護キャッシュ無効化動作は、処理回路によって実行される特定の命令であってもよい。メモリ保護キャッシュ無効化動作は、無効化条件に対する複数の異なる基準のうちの1つを指定することができる。例えば、第1のタイプのキャッシュ無効化動作は、MPUキャッシュ・ストレージのすべてのエントリが無効化されるべきであると指定し得る。第2のタイプのメモリ保護キャッシュ無効化動作は、キャッシュされたメモリ保護エントリの特定のアドレス又はアドレス範囲が無効化されることを識別し得、キャッシュされたメモリ保護エントリは、維持されている指定のアドレス範囲と部分的に又は完全に重ならない領域を画定する。無効化条件の他の選択肢は、キャッシュされたメモリ保護エントリが、特定のテーブル識別子、セキュリティ状態識別子のうちの少なくとも1つに対応するか、又は、特定の範囲内のエントリ識別子を有する場合に、無効化されるべきであるということであり得る。したがって、キャッシュからのエントリの無効化の制御には、複数の異なる選択肢がある。ソフトウェアの制御下にある処理回路が、特定のアドレス領域について指定されているパラメータを変更するためにメモリ保護テーブルの一部分を再構成するとき、MPUキャッシュ・ストレージからの対応するエントリの無効化はまた、アクセス許可の古い値がキャッシュ内に保持されないことを保証するためにトリガすることもできるため、これは有用であり得る。
メモリ・システム内に記憶されているメモリ保護テーブル内のメモリ保護エントリは、メモリ保護エントリが、有効なアクセス許可を与える有効化されたエントリであるか、又は、無効なアクセス許可を与える無効化されたエントリであるかの指示を含むことができる。これは、領域が後に有効化されたときに再構成される必要がないように、無効化されたメモリ保護エントリ内の領域パラメータを維持しながら、特定のアドレス領域へのアクセスを一時的に無効化するのに有用であり得る。MPUキャッシュ・ストレージが、メモリ保護テーブルの無効化されたエントリをキャッシュすることを禁止することができる。例えば、MPUメモリ・アクセス回路は、テーブルを検索するとき、有効化されたエントリについてのみヒット信号を返すことができ、メモリ保護エントリは、メモリ内のメモリ保護テーブルにおいてヒットが検出された場合にのみ、MPUキャッシュ・ストレージに配分することができる。メモリ・システムから、無効化されたエントリがキャッシュされることを回避することが有用であり得る。これは、このことが、場合によって後に使用するためにメモリ内でメモリ保護テーブル内にダミー・エントリを挿入することができ、キャッシュされたエントリを一切無効化する必要なく、これらのエントリを構成及び有効化することができることを意味するためである。
アクティブなメモリ保護テーブルのテーブル識別子は、種々の方法で表すことができる。1つの実例において、テーブル識別子は、ベース・アドレスのみを使用して識別されてもよい。代替的に、場合によっては、テーブルは、ベース・アドレスとサイズとの組み合わせを使用して識別されてもよい。これは、2つの異なるソフトウェア・プロセスによってアクセスされることになるメモリ保護テーブルが部分的に重なり合い、結果、メモリ保護テーブルの共有される部分が、ベース・アドレスにおいて開始するアドレスに記憶され得、その後、1つの特定のソフトウェア・プロセスに対してのみ使用されることになるメモリ保護テーブルの部分が、アドレス空間の後続部分に位置し得、結果、異なるソフトウェア片によってアクセスされる異なるメモリ保護テーブル間の切り替えが、単純に、アクティブなメモリ保護テーブルの大きさを示すためのサイズ指示を変更することによって実行され得る場合に有用であり得る。場合によっては、ベース・アドレス及びサイズが、MPUの単一のレジスタ内で指定されてもよい。しかしながら、相対的に大きいアドレスをサポートするシステムにおいては、ベース・アドレス及びサイズの指示が、1つのレジスタ内に収まらない場合があり、そのため、時として、別個のレジスタが要求される場合がある。したがって、処理回路によって発行されるメモリ・アクセス要求に応答してMPUメモリ・アクセス回路によってアクセスされるべきアクティブなメモリ保護テーブルのベース・アドレスを記憶するためにベース・アドレス・レジスタを提供することができ、アクティブなメモリ保護テーブルのサイズの指示を記憶するためにサイズ・レジスタを提供することができる。ベース・アドレス・レジスタとサイズ・レジスタの両方がまた、それぞれベース・アドレス及びサイズに加えて他のパラメータも指定してもよいことが諒解されよう。
アクティブなメモリ保護テーブルのベース・アドレス及びサイズが異なるレジスタにおいて指定されるとき、これは、それぞれアクティブなメモリ保護テーブルのベース・アドレス及びサイズを更新するために、別個のMPU構成動作が処理回路によって実行される必要があり得ることを意味し得る。これによって、ベース・アドレス及びサイズのうちの一方を変更し、ただし他方を変更しないことによって、領域が、メモリ保護エントリであるように意図された情報を含むアクティブなテーブルであるとして示される危険性が生じる可能性があるため、ベース・アドレス及びサイズのうちの一方を更新するための第1の構成動作と、ベース・アドレス及びサイズのうちの他方を更新するための第2の構成動作との間の期間において未定義の挙動が発生する競合条件の危険性が生じる可能性がある。
この危険性を低減するために、アクティブなメモリ保護テーブルのベース・アドレス及びサイズのうちの一方が更新されるべきであることを指定する、所定のタイプのMPU構成動作に応答して、ベース・アドレス及びサイズのうちのその一方を更新するのに加えて、処理回路はまた、ベース・アドレス及びサイズのうちの他方をも、アクティブなメモリ保護テーブルがないことを示す無効値に更新することができる。ベース・アドレス及びサイズのうちの一方が更新されたときに、その後、他方も更新されるまで、実効的に、メモリ保護テーブルへのアクセスを完全に無効化することによって、メモリ保護テーブルの一部分であるように意図されていないアドレス空間の一部分にアクセスするMPUメモリ・アクセス要求から生じる不適切な動作はあり得なくなる。
1つの実施態様において、所定のタイプのMPU構成動作は、ベース・アドレスが更新されるべきであることを指定する動作であってもよく、サイズが、アクティブなメモリ保護テーブルが存在しないことを示す無効値にクリアされるべきであることを指定してもよい。したがって、所定のタイプのMPU構成動作によって更新されるべきであると指定されるベース・アドレス及びサイズのうちの一方は、ベース・アドレスであってもよい。これは、より単純に実施することができる。所定のタイプのMPU構成動作は、専用命令又はコマンドであり得るが、また単純に、ベース・アドレス及びサイズのうちの、無効値に設定されるべきでない一方を指定するベース・アドレス・レジスタ又はサイズ・レジスタにマッピングされるアドレスを、その標的アドレスとして指定する、処理回路によって実行される一般的なストア命令でもあり得る。場合によっては、ベース・アドレス又はサイズを更新するすべてのMPU構成動作がまた、他方を無効値にクリアしてもよい。代替的に、これは常に必要とされなくてもよく、特定のタイプのMPU構成動作のみが、ベース・アドレス及びサイズの他方を無効値にクリアしてもよい。例えば、MPU構成動作をトリガするために使用される特定のタイプの命令は、ベース・アドレス及びサイズのうちの、動作によって指定の値に構成されていない他方も、無効値にクリアされるべきであるか否かをシグナリングしてもよい。他の実例において、「サイズを無効にクリアする」制御は、ベース・アドレス・レジスタのビット自体によって起動されてもよく、結果、ベース・アドレス・レジスタが書き込まれ、「サイズを無効にクリアする」フラグが、ベース・アドレス・レジスタに書き込まれる新たな値に設定される場合、MPUはまた、サイズを無効値にクリアする。
メモリ保護テーブルからエントリを得るためにMPUによって発行されるMPUメモリ・アクセス要求はそれ自体、特定のアクセス許可に対してチェックされる必要があり得る。しかしながら、場合によって非決定性の応答時間、又は、検索を引き起こす要求の無限ループをもたらす可能性がある、メモリ保護テーブルに対する再帰的な検索のセットをもたらす可能性があるため、メモリ検出テーブル自体に基づいて、MPUメモリ・アクセス要求が許可されるかをチェックすることは望ましくない場合がある。メモリ・アクセス要求自体のチェックをハンドリングするためには、異なる手法が使用されてもよい。1つの実例において、許可チェック回路は、メモリ保護テーブルから独立して指定される、デフォルトのアクセス許可セットに基づいて、少なくとも1つのMPUメモリ・アクセス要求が許可されるかを判定することができる。したがって、例えば、MPUの構成可能レジスタ内にハードワイヤード又は指定され得るデフォルトの許可セットを使用することによって、MPUが特定のアドレスへのメモリ・アクセス要求を発行することを可能にされるかを判定するために、メモリ内のメモリ保護テーブルを検索する必要はなくなる。これは、リアル・タイム・ハンドリングの改善を助けることができる。
デフォルトのアクセス許可セットに対してMPUメモリ・アクセス要求をチェックする代わりに、又は、それに加えて、許可チェック回路は、少なくとも1つのMPUメモリ・アクセス要求のアドレスが、複数のメモリ・セキュリティ構成レジスタによって指定される複数のアドレス範囲のうちの1つの中にあるかに基づいて、MPUメモリ・アクセス要求が許可されるかを判定することができる。例えば、メモリ・セキュリティ構成レジスタは、上述した複数のセキュリティ状態のうちの所与の状態からいずれのアドレス範囲にアクセスすることができるかを定義する情報を指定することができる。例えば、いくつかのシステムは、アドレス空間の、特定の安全なプロセスによってのみアクセスすることができる安全部分、及び、安全なプロセス又は安全でないプロセスのいずれによってもアクセスすることができる非安全部分を定義することをサポートすることができ、そのため、MPUメモリ・アクセス要求は、メモリ・セキュリティ構成レジスタによって定義される安全/非安全領域に対してチェックされる必要があり得る。この場合、非安全コードによってトリガされるMPUメモリ・アクセス要求は、それらがメモリ・セキュリティ構成レジスタにおいて安全なアドレス空間の一部であると定義される領域を標的とする場合、拒絶することができる。メモリ・セキュリティ構成レジスタによって定義される許可は、メモリ保護テーブル及び静的MPUエントリによって提供されるものに直交し得る。したがって、上記MPUメモリ・アクセス要求がメモリ・セキュリティ構成レジスタに対してチェックされるのに加えて、命令フェッチ要求又は一般的なロード/ストア命令に応答して処理回路によって発行されるメモリ・アクセス要求もまた、それらが許可されるかをチェックするために、メモリ・セキュリティ構成レジスタに対してチェックされ得る。
いくつかの実例において、キャッシュされたメモリ保護エントリは、エントリと関連付けられるロック指示を設定することによって、「ロック」されているものとしてマークされ得る。MPUは、ロックされたキャッシュされたメモリ保護エントリが、キャッシュから排除されるのを防止することができる。例えば、MPUは、例外に応答してアーキテクチャ状態を保存し、例外が返されるのに応答して保存された状態を復元するために使用されるスタック・データ構造を含むアドレス領域に対応する、ロックされたキャッシュされたメモリ保護エントリを抑えることができる。排除することができないように、スタックに対応するエントリをロックすることによって、状態保存/復元における遅延を低減することにより、高速の例外ハンドリング応答が保証される。MPUは、処理回路のスタック・ポインタ・レジスタ内に記憶されているスタック・ポインタ・アドレスを使用して、いずれのエントリがスタックに対応するかを判定することができる。スタックと関連付けられるMPUエントリのロックはいつでも行うことができる。しかしながら、1つの実例において、スタックから状態が復元されるときに例外が返されるのに応答して、現在のスタック・ポインタ・アドレスと関連付けられるMPUエントリがロックされ得、結果、例外が返される間又はその直後にさらなる例外又は割り込みが発生する場合、スタックのエントリはMPUキャッシュ・ストレージ内で依然として利用可能であり、そのため、さらなる例外又は割り込みのために状態をより高速に保存することができる。
他の実施例において、各キャッシュされたメモリ保護エントリと関連付けられるロック指示の使用は、スタック・データ構造と関連付けられるメモリ保護テーブルからエントリを記憶するためのみに使用されるMPUキャッシュ・ストレージ内の専用エントリを有することによって回避することができる。この専用エントリにはいつでもデータ投入することができる。しかしながら、1つの実例において、スタックから状態が復元されるときに例外が返されるのに応答して、現在のスタック・ポインタ・アドレスと関連付けられるMPUエントリを、専用エントリにデータ投入することができる。
いくつかの実施態様において、例外条件に応答するとき、処理回路は、レイジー状態保存を使用することができる。例外条件が発生すると、処理回路は、例外が発生する前に実行された外向きプロセスと関連付けられる何らかのアーキテクチャ状態をメモリ・システムに保存する必要があり得、結果、たとえ例外条件後に実行するプロセスがそのアーキテクチャ状態を上書きする場合であっても、保存された状態が維持される。外向きプロセスと関連付けられる状態は、後に、処理が例外のハンドリングから戻るときに復元され得る。アーキテクチャ・レジスタからメモリ・システムへの状態の保存は相対的に低速であり得、そのため、割り込みハンドリング待ち時間を低減するために、いくつかのシステムは、例外条件自体に応答して、アーキテクチャ状態の第1の部分のみをメモリ・システムに保存することができる。アーキテクチャ状態の第2の部分は、例外条件に直に応答して保存されなくてもよく、後に、例外条件後に実行する後続のソフトウェア・プロセスが実際にアーキテクチャ状態の第2の部分にアクセスする場合にのみ保存されてもよい。例えば、アーキテクチャ状態の第2の部分は浮動小数点値を記憶するための浮動小数点レジスタ、の内容であってもよく、一方、アーキテクチャ状態の第1の部分は、整数レジスタの内容であってもよい。多くのソフトウェア・プロセスが浮動小数点レジスタを一切使用しない場合があり、そのため、例外条件後に実行する後続のソフトウェア・プロセスが、浮動小数点レジスタに決してアクセスすることがない場合、以前に実行されたプロセスと関連付けられる状態が保持され、そのため、それらの浮動小数点レジスタについて状態保存及び復元を実施する必要はないため、これは有用であり得る。
そのようなレイジー状態保存は性能にとって有用であり得るが、MPUがメモリ・システム内に記憶されているメモリ保護テーブルを使用するとき、これは何らかの複雑性を引き起こす可能性がある。アーキテクチャ状態の第2の部分が実際にメモリに保存されているかにかかわらず、アーキテクチャ状態の第1の部分及び第2の部分を維持するために、一貫したスタック・フレームがメモリ内で使用されることを可能にするために、例外条件に応答して、処理回路は、後続のソフトウェア・プロセスがアーキテクチャ状態の第2の部分にアクセスする場合に、アーキテクチャ状態の第2の部分が保存されるべきである、第2の部分の状態を保存するアドレス領域の指示を記録することができる。したがって、後続のソフトウェア・プロセスが、アーキテクチャ状態の第2の部分を記憶するレジスタへのアクセスを開始するとき、処理回路は、第2の部分の状態を保存するアドレス領域を識別する、記録されたアドレスを読み出し、その後、アーキテクチャ状態の第2の部分を、識別されたアドレス領域に保存することができる。たとえまだ保存されていない場合であっても、アーキテクチャ状態の第2の部分のために空間を確保することは、各例外のためのスタック・フレームのサイズが同じになることを意味し、結果、例外がネスト化されると、後続のスタック・フレームの位置は、アーキテクチャ状態の第2の部分が実際に保存されたかにかかわらず、同じになる。これは、状態復元の制御をはるかに単純化する。
しかしながら、アーキテクチャ状態の第2の部分をメモリ・システムに保存するためのメモリ・アクセスは、それ自体、MPUに対してチェックされる必要があり得、また多くの場合、例外条件に応答して、アクティブなメモリ保護テーブルが変化し得るため、例外条件前に実行するプロセスが、アーキテクチャ状態のその第2の部分を、第2の部分の状態を保存するアドレス領域のために指定されているアドレスに保存することを許可されているかをチェックするための関連アクセス許可は、もはや利用可能でない場合がある。
したがって、例外条件に応答して、MPUは、MPUが、後続のソフトウェア・プロセスの実行中に、アーキテクチャ状態の第2の部分を保存するためのメモリ・アクセスが、例外条件が発生した時点においてアクティブであったメモリ保護テーブルのメモリ保護エントリによって指定されるアクセス許可を満たすかを判定することを可能にするためのMPUチェック情報を記録することができる。MPUチェック情報は、複数の異なるタイプの情報を含み得る。いくつかの事例において、MPUチェック情報は、例外条件が発生したときにアクティブであったメモリ保護テーブルのテーブル識別子(例えば、ベース・アドレス、及び任意選択的にサイズ)を含んでもよく、結果、後続のソフトウェア・プロセスの実行中、以前にアクティブであった関連するメモリ保護テーブルを識別することができ、例外条件の前に実行するプロセスが、第2の部分の状態を保存するアドレス領域のために指定されているアドレスに状態を保存することを可能にされていたかをチェックするために、適切なエントリにアクセスすることができる。MPUチェック情報はまた、第2の部分の状態を保存するアドレス領域の開始アドレス及び終端アドレスが、例外条件が発生したときにアクティブであったメモリ保護テーブルの同じメモリ保護エントリに対応するかの指示も含むことができる。第2の部分の状態を保存するアドレス領域の開始アドレスと終端アドレスの両方が、同じメモリ保護エントリに対応するとき、これは、第2の部分の状態を保存するアドレス領域の全体がアクセスされることを許可されることを判定するためには、アクセス許可の単一のチェックで十分であり得ることを意味し、第2の部分の状態を保存するアドレス領域の各個々の部分を、例外条件が発生したときにアクティブであったメモリ保護テーブルのエントリに対してチェックする必要性が回避される。いくつかの実施態様において、アクセス許可の単一のチェックは、例外条件が発生したときに行うことができ、チェックの結果を保存することができ、一方、他の実施例において、メモリ保護テーブルが変化した場合があっても、後にチェックを実施することができるように、アクセス許可を保存することができる。したがって、例外条件が発生したときにアクティブであったメモリ保護テーブルに関する何らかの情報を保存することによって、たとえ例外条件に応答してアクティブなメモリ保護テーブルが変化する場合であっても、レイジー状態保存が機能することが可能である。
命令を実行するための命令実行環境を提供するように、ホスト・データ処理装置を制御するための対応するコンピュータ・プログラムを提供することができる。コンピュータ・プログラムは、上述した処理回路及びMPUに機能的に対応する処理プログラム論理及びMPUプログラム論理を備えることができる。したがって、コンピュータ・プログラムによってシミュレートされる命令実行環境内で実行されるプログラム内のメモリ・アクセス命令は、上述した処理回路及びMPUを実際に備えるハードウェア上で実行されるプログラム内のメモリ・アクセス命令と同様にハンドリングすることができる。シミュレータ・コンピュータ・プログラムは、たとえシミュレータ・コンピュータ・プログラムを実行しているホスト・コンピュータ内にこれらの機能を提供する実際のハードウェアが一切存在し得ないとしても、実際のハードウェア装置によって提供されるものと同様の命令環境を、シミュレータ・コンピュータ・プログラム上で実行するソフトウェアに提示することができる。上述したハードウェア・アーキテクチャの機能は、一般的なホスト・コンピュータが、上述したMPUサポートを有する装置上で実行するように意図されたコードを、そのようなMPUを実際に有する装置上で達成される結果に対応するように、実行することを可能にする、命令又はデータ構造のセットのような、プログラム論理を提供することによってエミュレートすることができる。ホスト・データ処理装置を制御するためのシミュレータ・コンピュータ・プログラムは、記憶媒体上に記憶することができる。この記憶媒体は、非一時的記憶媒体であってもよい。
テーブル検索
上述したメモリ保護テーブルは、所与の動作を実施するために処理構成要素によって使用される情報を提供するメモリ・システム内に記憶される制御テーブルの1つの実例である。メモリ保護テーブルの場合、処理構成要素は、MPUであってもよく、実施される動作は、所与のメモリ・アクセスが許可されるかを判定することであってもよい。そのような制御テーブルの別の実例は、アドレス空間のいずれの領域が安全領域又は非安全領域であるかを定義するテーブルであってもよく、制御テーブルに基づいて実施される動作は、処理回路が安全モードにおいて動作するべきか、又は、より安全性の低いモードにおいて動作するべきかを判定することであってもよく、安全モードは、処理されている命令アドレスが制御テーブル内で定義される安全アドレス領域のうちの1つの中にあるときに選択される。別の実例は、所与のソフトウェア・ライブラリが別のソフトウェア・ライブラリを呼び出すことを可能にされるかを判定するために、処理回路によって使用され得る、その領域と関連付けられるソフトウェア・ライブラリの識別子を、制御テーブルによって表されるアドレス領域毎に定義する制御テーブルであり得る。
したがって、様々な処理シナリオにおいて、第1の限界アドレス及び第2の限界アドレス/サイズが、アドレス空間内の可変サイズの対応するアドレス領域の限界を識別するように、第1の限界アドレス及び第2の限界アドレス又はサイズのいずれかを各々が指定する複数のエントリを有する制御テーブルを提供することが有用であり得る。エントリは、第1の限界アドレスの順序において、制御テーブル内に配列することができる。エントリ毎に可変サイズの領域をサポートすることは、所与のサイズのアドレス領域の特定の特性セットを表すのに必要なエントリの数を低減する(より大きいアドレス領域を複数の別個の固定サイズのエントリに人工的に分割する必要性を回避する)のに有用であり得るが、可変サイズのエントリを許容することによって、制御テーブルに対する検索を実施するのがより複雑になり得る。これは、可変サイズの領域がサポートされるとき、所与のアドレスに対応するテーブル内の位置が固定され得ず、そのため、実際には、所与のアドレスに対応するエントリを位置特定するには、問い合わせアドレスを、対応するアドレス領域の限界を定義するパラメータ(第1の限界アドレス、並びに、第2の限界アドレス及びサイズのうちの一方)と比較するために、テーブルのエントリを通じた探索が必要になり得るためである。アドレス空間は、制御テーブル内のエントリを疎らに配分されている場合があり、結果、そのアドレスを含む領域について定義されている対応するエントリを一切有しないアドレスがいくつか存在する場合があるため、制御テーブルの探索が、第1の限界アドレスと、第2の限界アドレス、及び、各アドレス領域の他の限界を定義するために使用されるサイズのうちの一方の両方に対しての比較を必要とし、したがって、多数の比較を必要とし得ることが予測される。
下記に論じる技法において、制御テーブルが、問い合わせアドレスに対応するエントリを含むかを識別するために二分探索手順を実施するための、テーブル検索回路が提供される。二分探索手順は、制御テーブルの候補エントリの現在の探索窓を、より少数の候補エントリを含むより狭い探索窓へと絞り込むための、複数の探索窓絞り込みステップを含む。所与の探索窓絞り込みステップにおいて、テーブル検索回路は、選択候補エントリの第2の限界アドレス又はサイズとは無関係に、現在の探索窓の選択候補エントリの第1の限界アドレスに対する、問い合わせアドレスの比較に基づいて、現在の探索窓を絞り込む。現在の探索窓を制御テーブルの単一の候補エントリまで絞り込む最後の探索窓絞り込みステップの後、テーブル検索回路は、問い合わせアドレスが単一の候補エントリの第1の限界アドレス及び第2の限界アドレス又はサイズによって定義される対応するアドレス領域内にあるとき、単一の候補エントリが問い合わせアドレスに対応するエントリであると判定することができる。
したがって、この手法によれば、各探索窓絞り込みステップは、制御テーブルの所与の選択候補エントリの第1の限界アドレスに対して問い合わせアドレスを比較するだけでよく、そのため、メモリ・システムから第2の限界アドレス又はサイズをロードする必要はない。第2の限界アドレス又はサイズは、最後の探索窓絞り込みステップから生じる単一の候補エントリについて比較されるだけでもよい。したがって、制御テーブル内の所与のエントリ数Nについて、この手法は、比較の数が、第2の限界アドレス又はサイズが各探索窓絞り込みステップについてチェックされる必要がある場合のlog2(N)*2の代わりに、log2(N)+1に対応することを可能にする。これは、必要な比較の数、及び、二分探索手順において探索される候補エントリのそれぞれの限界を得るためにメモリ・システムからロードされる必要があるデータの量の大幅な低減を表すことができる。したがって、これによって、メモリ内に記憶されている制御テーブルがより良好な性能で検索されることを可能にする検索手順を提供することができ、制御テーブルへのアクセスが高速化し、したがって、制御テーブルからの情報に依拠する動作の実施が高速化する。
二分探索手順において、最後の探索窓絞り込みステップの後に識別される単一の候補エントリは、テーブル検索回路が、問い合わせアドレスに対して二分探索手順を実施する結果として、メモリ・システムから第2の限界アドレス又はサイズを得るためにメモリ・アクセス要求をトリガする、制御テーブルの唯一のエントリであり得る。したがって、単一の候補エントリ以外の制御テーブルの任意のエントリについて、メモリ・システムから第2の限界アドレス又はサイズを得るために、いかなるロードを実行する必要もない。これによって、必要なロードの数が低減し、したがって、性能が改善する。第1の問い合わせアドレスに基づいてテーブルを検索するために二分探索手順を実施している間、第1の問い合わせアドレスとは異なる第2の問い合わせアドレスがテーブル内の対応するエントリを有するかを検索しているさらなる検索の一部分として、メモリから単一の候補エントリ以外の候補エントリの第2の限界アドレス又はサイズを得るために実施されるロードが依然として存在し得ることは除外されないことに留意されたい。テーブルに対する複数の検索は、それぞれ異なる問い合わせアドレスについて並列にハンドリングされ得、この場合、第2の検索は依然として、第1の問い合わせアドレスについての検索において識別される単一の候補エントリ以外の候補エントリの第2の限界アドレス又はサイズを必要とし得る。したがって、最後の探索窓絞り込みステップの後に識別される単一の候補エントリのみに対する第2の限界アドレス又はサイズのロードの制約は、現在の問い合わせアドレスについて二分探索手順を実施する結果としてトリガされたメモリ・アクセス要求のセットにのみ適用され、他の動作が現在の問い合わせアドレスについての二分探索手順と並列に実施される結果としてトリガされ得る、第2の限界アドレス又はサイズを得るためのテーブルの他のエントリへのロードを除外しない。
いくつかの実施態様において、テーブル検索回路と、制御テーブルを含むメモリとの間で、メモリ・システム内のキャッシュがあり得る。テーブル検索回路は、キャッシュに対して要求を行い、キャッシュによって要求が満たされ得ない場合、キャッシュは、応答して、要求されているデータを取り出すために、メモリに対して要求を行うことができる。いくつかの実施例において、キャッシュは、元々要求されていたものよりも多くのデータを要求し得、例えば、キャッシュ・ライン全体を満たすのに十分なデータを要求し得る。したがって、テーブル検索回路が第1の限界アドレスのみについてキャッシュへの要求を実施するとき、キャッシュは、第1の限界アドレスと第2の限界アドレス又はサイズの両方を含むキャッシュ・ラインについて、メモリへの要求を実施することができる。たとえキャッシュが第1の限界アドレスと第2の限界アドレス又はサイズの両方を要求しているとしても、テーブル検索回路は、第1の限界アドレスを受信し、これに対して比較するだけでよく(最後の探索窓絞り込みステップの後に識別される単一の候補エントリを除く)、したがって、使用される電力及び回路複雑度が低減されることが諒解されよう。
問い合わせアドレスが、最後の探索窓絞り込みステップの後に識別される単一の候補エントリの第1の限界アドレス及び第2の限界アドレス又はサイズによって定義される対応するアドレス領域の外部にあるとき、テーブル検索回路は、問い合わせアドレスが制御テーブル内で見つからないと判定し得る。すなわち、制御テーブルは問い合わせアドレスを含むアドレス領域に関係するエントリを一切含まないと判定され得る。問い合わせアドレスが制御テーブル内で見つからないとき、テーブル検索回路は、例外条件をシグナリングすること、及び、処理構成要素によって実施されるべき動作を制御するためのデフォルト情報を返すこと、のうちの少なくとも1つを実施することができる。
各探索窓絞り込みステップにおいて実施される比較は、種々の方法で実施されてもよい。いくつかの実例において、比較は、対応するアドレス領域の下限を表す下限アドレスに対する問い合わせアドレスの比較よりも少なくなり得る。したがって、この場合、第1の限界アドレスは、対応するアドレス領域の開始アドレスを含むことができる。各領域の開始アドレスが比較されるときに、問い合わせアドレスが選択候補エントリの開始アドレス未満であると比較が識別するとき、選択候補エントリの開始アドレス以上である開始アドレスを有する制御テーブルの少なくとも1つのエントリが探索窓から除外されるように、探索窓が絞り込まれ得る。
代替的に、各探索窓絞り込みステップにおける比較は、対応するアドレス領域の上限を識別する終端アドレスを、問い合わせアドレスに対して比較してもよい。この場合、当該比較は、大なり比較であってもよい。この場合、問い合わせアドレスが選択候補エントリの上限アドレス(終端アドレス)よりも大きいとき、現在の探索窓は、選択候補エントリの終端アドレス以下の終端アドレスを有する制御テーブルの少なくとも1つのエントリを、より狭い探索窓から除外するために絞り込むことができる。
選択候補エントリ自体が、所与の探索窓絞り込みステップ後により狭い探索窓の一部分のままであるかを判定するために、異なる選択肢が選択されてもよい。第1の限界アドレスが開始アドレスであり、問い合わせアドレスが開始アドレス以上であると比較が判定するとき、問い合わせアドレスが、選択候補エントリの対応するアドレス領域内にあり得る可能性があり、そのため、選択候補エントリは、その探索窓絞り込みステップ後により狭い探索窓の一部分のままであり得る。同様に、第1の限界アドレスが終端アドレスであり、問い合わせアドレスが終端アドレス以下であると比較が示すとき、ここでも、選択候補エントリは、より狭い探索窓の一部分のままであり得る。
いくつかの実施態様において、所与の探索窓絞り込みステップが比較において、問い合わせアドレスは、選択候補エントリの対応するアドレス領域の外部にある(例えば、問い合わせアドレスが、選択候補エントリの開始アドレスよりも低いか、又は、終端アドレスよりも高いため)と判定するとき、いくつかの実施態様において、選択候補エントリは、所与の探索窓絞り込みステップから生じる、より狭い探索窓から除外され得る。すなわち、選択候補エントリが問い合わせアドレスに対応するエントリではあり得ないことはすでに分かっているため、残りの探索窓絞り込みステップにおいて考慮される必要があるエントリがより少なくなるために、後続の探索窓絞り込みステップが、問い合わせアドレスに対応する特定のエントリをより迅速に識別することができるように、選択候補エントリを狭い探索窓から除外することが所望され得る。
しかしながら、他の実施態様において、問い合わせアドレスが、選択候補エントリの対応するアドレス領域の外部にあることがすでに分かっているとき、選択候補エントリは、それにもかかわらず、より狭い探索窓に含まれたままであり得る。より狭い探索窓内で問い合わせアドレスに対応しないことがすでに分かっている候補エントリを含めることが有用であるとは予測され得ないため、これは直観に反すると考えられ得る。しかしながら、実際には、比較の結果にかかわらず、選択候補エントリをより狭い探索窓内に含めることによって、クリティカル・パス・タイミングが低減したより効率的な回路実装が可能になり得る。例えば、いくつかの実施態様において、現在の探索窓の限界及び選択候補エントリの位置を、それぞれのエントリ識別子を使用して追跡することができる。したがって、選択候補エントリがより狭い探索窓から除外されるべきである場合、次の探索窓絞り込みステップにおいて使用されるべきより狭い探索窓の始まり又は終わりが、選択候補エントリの識別子に1を加算するか、又は、当該識別子から1を減算することによって、選択候補エントリの識別子から計算される必要があり得る。この±1演算は、1を加算又は減算するための追加のハードウェアを必要とし得、クリティカル・タイミング・パス上にあり得る。したがって、いくつかの実施態様において、比較の結果にかかわらず、選択候補エントリが狭い探索窓内に含まれたままである場合、狭い探索窓内に含めるためのエントリをより高速に識別することができる。実際には、絞り込まれた探索窓の異なる候補エントリの比較を実施する後続の探索窓絞り込みステップが後に結局、先行する探索窓絞り込みステップにおいて識別された、選択候補エントリを除外することになり得るため、実際には、これによって、選択候補エントリの選択される事例が除外された場合と比較して、任意の追加の探索窓絞り込みステップが必要になる可能性は低い。したがって、いくつかの実施態様において、選択候補エントリにおいて開始又は終端するようにより狭い探索窓を設定する論理を提供することによって、これは、クリティカル・タイミング・パスがより短い、より効率的な制御論理を可能にすることができる。
所与の探索窓絞り込みステップ内の選択候補エントリは、現在の探索窓の任意のエントリ(場合によっては、探索窓の外側境界線のうちの1つにあるエントリを含む)であってもよい。しかしながら、選択候補エントリが、その探索窓絞り込みステップについて提供されている現在の探索窓の中間点にあるエントリである場合、二分探索手順はより効率的になり得る。中間点は、現在の探索窓内に含まれるエントリの正確な中点にある必要はない。事実、現在の探索窓が偶数のエントリを含むとき、いずれのエントリが選択候補エントリとして選択されるとしても、そのエントリは他端よりも探索窓の一方の端部により近くなるため、正確な中点にあるエントリを選択することは不可能である。テーブル内の所与の数のエントリに必要な探索窓絞り込みステップの総数に関する最大限度は、各探索窓絞り込みステップにおいて、選択候補エントリが、現在の探索窓の中点に可能な限り近い場合に、低減され得る。しかしながら、これは必須ではなく、いくつかの実施態様において、現在の探索窓の中間点にある任意のエントリが使用され得、この結果として、電力及び回路複雑度が低減し得る。
探索窓絞り込みステップにおいて、探索窓が2つの候補エントリのみを含むとき、2つのエントリのうちの一方が選択候補エントリとして選択され、すなわち、選択候補エントリは、探索窓の外側境界線のうちの1つにあることになることに留意されたい。したがって、いくつかの事例において、選択候補エントリは、現在の探索窓が少なくとも3つの候補エントリを含む探索窓絞り込みステップについてのみ、現在の探索窓の中間点にあり得る。
いくつかの実施態様において、装置は、少なくとも1つのエントリを記憶するためのエントリ・ストレージを有することができる。エントリ・ストレージは、メモリ・システムから以前に得られた制御テーブルの少なくとも1つのエントリをキャッシュするためのエントリ・キャッシュ、及び/又は、静的エントリ・パラメータ構成動作によって構成可能な少なくとも1つのさらなるエントリを記憶するための静的レジスタ・ストレージ(さらなる各エントリが、その限界が第1の限界アドレス、並びに、第2の限界アドレス及びサイズのうちの一方によって識別されるアドレス空間内の可変サイズの対応するアドレス領域の制御情報を指定する場合)であってもよい。例えば、制御テーブルがメモリ保護テーブルである場合、エントリ・キャッシュは、上述したMPUキャッシュ・ストレージに対応してもよく、静的レジスタ・ストレージは、上述した静的MPUレジスタ・ストレージに対応してもよい。したがって、検索回路は、いくつかのエントリへのより高速のアクセスを可能にするために、メモリ・システム内に記憶されている制御テーブルに加えて、ローカルに記憶されているいくつかのエントリにアクセスすることができる。
少なくとも1つの制御テーブル・エントリがエントリ・ストレージ内に記憶される場合、テーブル検索回路は、問い合わせアドレスが、エントリ・ストレージ内に記憶されている少なくとも1つのエントリに対応するかをチェックし、問い合わせアドレスがエントリ・ストレージ内に記憶されている任意のエントリに対応するかに依存して、二分探索手順を実施すべきかを決定することができる。例えば、問い合わせアドレスがエントリ・ストレージ内に記憶されているエントリに対応する場合、二分探索手順は全体的に省略されてもよい。例えば、必要なエントリがエントリ・キャッシュ内にすでにキャッシュされている場合、メモリへの任意のアクセスは実施される必要がない場合があり、そのため、二分探索手順は省略されてもよい。静的レジスタ・ストレージ内のエントリについて、MPUの実例について上述したように、異なる選択肢が、静的レジスタ・ストレージ内にヒットがある場合に二分探索手順を実施する必要があるかを制御することができる。場合によっては、静的レジスタ・ストレージ内に何らかのヒットがある場合、二分探索手順が実施されるのを抑制することが可能である。代替的に、他の実例は、二分探索手順を実施すべきかを決定するために、静的レジスタ・ストレージ内の一致するエントリ内で指定される特定のパラメータを考慮してもよい(例えば、MPUの実例を用いて上述したように、メモリ内のテーブルの探索は、一致する静的に構成されたエントリのパラメータが、メモリ・アクセスが許可されないことを示す場合にのみ必要とされ得、静的に構成されたエントリ内に、メモリ・アクセスが許可されていることを示すヒットがあるときに、二分探索手順を省略することができる)。
二分探索手順が実施される場合、いくつかの実施態様において、テーブル検索回路は、二分探索手順の効率を改善するために、エントリ・ストレージ内に記憶されている少なくとも1つのエントリから導出される情報を使用することができる。例えば、たとえ所与の問い合わせアドレスがエントリ・キャッシュ又は静的レジスタ・ストレージのエントリ内で見つからないときであっても、エントリが、それらのローカルに記憶されたエントリに対してヒットする必要がある、いかなる必要な比較にも一致しなかったという事実は、二分探索手順内で実施されるいくつかの比較の結果が、メモリから情報を一切ロードする必要なしにすでに知られていることを可能にする情報を提供することができる。例えば、テーブル検索回路は、エントリ・ストレージ内に記憶されている少なくとも1つのエントリから導出される情報に基づいて、二分探索手順の初期探索窓絞り込みステップのための現在の探索窓を制限することができる。また、二分探索手順の所与の探索ステップにおいて、選択候補エントリの第1の限界アドレスに対する問い合わせアドレスの比較の結果が、エントリ・ストレージ内に記憶されている少なくとも1つのエントリの情報から導出可能であるとき、メモリ・システムから選択候補エントリの第1の限界アドレスを得るためのメモリ・アクセス要求は、抑制することができる。したがって、二分探索手順を誘導するために、ローカルに記憶されたエントリからすでに利用可能な情報を使用することによって、これは、ローカルに記憶されている情報においてすでに暗示され得る情報を得るための不要なメモリ・アクセスを回避することができ、二分探索手順のより高速な実施を可能にする。
例えば、1つの実施態様において、エントリ・ストレージが所与の問い合わせアドレスについて検索しているとき、いずれのエントリ(及び、したがってテーブル内のいずれのインデックス)が問い合わせアドレスを上回る/下回るかを判定するために、エントリ・ストレージ内のすべてのエントリを並行して問い合わせることができる。この点において、第1の探索窓絞り込みステップに使用される初期探索窓の下界は、問い合わせアドレスを下回る、アドレス領域の最も近いエントリのインデックスであり得、初期探索窓の上界は、問い合わせアドレスを上回る、アドレス領域の最も近いエントリのインデックスであり得る。代替的に、二分探索手順がより小さい探索窓(場合によって二分探索を高速化する)によって開始することを可能にするが、1を加算又は減算するために何らかの追加の回路論理を必要とする手法は、初期探索窓の下界を、問い合わせアドレスを下回るアドレス領域の最も近いエントリのインデックスに1を加算した値に設定すること、及び、上界を、問い合わせアドレスを下回るアドレス領域の最も近いエントリのインデックスから1を減算した値に設定することであり得る。
二分探索手順は、各探索窓絞り込みステップが、より狭い探索窓を得るために現在の探索窓を二分割することを可能にするように設計することができる。例えば、所与の探索窓絞り込みステップから生じるより狭い探索窓は、現在の探索窓の上側部分又は下側部分のいずれかであり得、探索窓の上側部分及び下側部分のうちの一方が、選択候補エントリの第1の限界アドレスに対する問い合わせアドレスの比較に基づいて選択される。
二分探索手順は、制御テーブルが2の累乗に対応するエントリ数Nを有する事例をハンドリングするように設計することができる。しかしながら、時として、制御テーブルは、正確な2の累乗以外のエントリ数Nを有する場合がある。この場合、テーブル検索回路は、Nよりも大きい最小の2の累乗に対応する数の候補エントリを含むと仮定される、初期探索窓絞り込みステップのための現在の探索窓を用いて二分探索手順を実施することができる。この場合、特定の探索窓絞り込みステップにおいて、現在の探索窓の選択候補エントリは、制御テーブルのN個のエントリの範囲の外部の位置に対応し得る可能性がある。これに当てはまる場合、テーブル検索回路は、メモリ・システムから選択候補エントリの第1の限界アドレスを得るためのメモリ・アクセス要求を抑制し、その特定の探索窓絞り込みステップについて比較が実施される結果として、より狭い探索窓が、制御テーブルのN個のエントリの範囲の内部の位置にある少なくとも1つの候補エントリを含むようにする、黙示的な結果を決定することができる。したがって、制御テーブル内のエントリの数が2の累乗でない場合、二分探索手順は、領域テーブルが2番目に大きい2の累乗である場合と同じように実施することができるが、テーブルの有効範囲の外部のエントリに対する比較のために、メモリから値を実際にロードすることなく、黙示的な結果を返すことができる。これによって、選択候補エントリ(例えば、中間点にある)の位置が、現在の窓サイズに対する2による除算を実施することによって決定されることを依然として可能にしながら、制御テーブルが、任意の数のエントリをサポートすることが可能になる。2による除算は、ビット・シフト演算によって実施することができるため、これによって回路複雑度を低減することができる。
上述した二分探索手順は、可変サイズが2の累乗以外のバイト数であることが許容され、並びに/又は、対応するアドレス領域の開始アドレス及び終端アドレスがXバイトのアドレス境界、ここでXは対応するアドレス領域のサイズ、に対して不整合であることが許容される制御テーブルに特に有用であり得る。これらの特性のうちの1つを有するテーブルは、単純に、問い合わせアドレスに基づいて必要なエントリにインデックス付けすることが可能でないため、インデックス付けするのが困難であり得る。代わりに、テーブルの複数のエントリを通じて探索し、限界アドレスを比較する探索手順が必要とされる場合がある。上述した技法は、このタイプのテーブルをより高速に探索することを可能にする。
いくつかの実施態様において、第1の限界アドレスは、メモリ・システム内で、対応するアドレス領域の他の限界を定義するために使用される第2の限界アドレス及びサイズのうちの一方を記憶するために使用されるデータ語と同じデータ語内に記憶することができる。「データ語」とは、単一のメモリ・アクセス要求においてメモリから返すことができるデータの一部分のサイズを指す。たとえ第1の限界アドレス及び第2の限界アドレス又はサイズが同じデータ語内に記憶される場合であっても、各探索窓絞り込みステップにおいてチェックされる各選択候補エントリの第2の限界アドレス又はサイズを返す必要性を回避するために、上述した二分探索手順を使用することは依然として有用であり得る。これは、二分探索手順の各探索窓絞り込みステップにおいて第1の限界アドレスのみを必要とすることにより、これによって、その後、他のメモリ・アクセスのために再使用することができる、メモリ・システム内のバッファ内の空間を確保することができ、又は、メモリ・アクセス要求に使用されていないバス上のワイヤを確保することができるために、より効率的なメモリ帯域幅使用を可能にすることができる、データのより狭い標的部分を指定するメモリ・アクセス要求を使用することができ、メモリ・システムの全体的な効率が改善するためである。探索窓絞り込みステップにおいて第1の限界アドレスに対する比較のみを必要とすることによって、必要な比較回路の量も低減し、消費されるエネルギーの量を低減することができる。
しかしながら、本技法は、制御テーブルの所与のエントリについて、第1の限界アドレスがメモリ・システム内で、所与のエントリの第2の限界アドレス又はサイズを記憶するために使用されるデータ語とは異なる語内に記憶される実例において特に有用である。いくつかのシステムにおいて、データ語のサイズは、第1の限界アドレス及び第2の限界アドレスのサイズと同程度であり得、そのため、第1の限界アドレス及び第2の限界アドレス又はサイズを同じデータ語内に記憶することは実際的でない場合がある。この場合、第1の限界アドレスと第2の限界アドレス又はサイズの両方が、各探索窓絞り込みステップにおいて得られる必要があるとすると、これによって、各探索窓絞り込みステップのために2つの別個のメモリ・アクセス要求が必要とされることになり、メモリ帯域幅に対する圧力が増大することになる。対照的に、上述した二分探索手順を使用することによって、各選択候補エントリの第2の限界アドレス又はサイズにアクセスするためのメモリ要求を回避することができ、第2の限界アドレス又はサイズがメモリからロードされる必要がある唯一のエントリが、最後の窓絞り込みステップをもたらす単一の候補エントリである。
上述した技法は、上述したような第1の限界アドレス及び第2の限界アドレス又はサイズによって定義される可変サイズのアドレス領域をサポートする任意のタイプの制御テーブルに使用することができるが、これは、各エントリが、アドレス空間の対応するアドレス領域についてのアクセス許可を指定するメモリ保護テーブルに特に有用であり得、制御テーブル内の情報に基づいて実施される動作は、問い合わせアドレスを指定するメモリ・アクセス要求が、問い合わせアドレスを含む領域の対応するエントリ内でアクセス許可を満たすかをチェックすることを含む。そのようなメモリ保護テーブルは、頻繁に(例えば、必要なエントリがローカル・ストレージ回路内にすでに記憶されているのではない場合、メモリ・アクセスが要求される度に)アクセスされる必要があり得、そのため、メモリからメモリ保護テーブルにアクセスするための検索手順の効率を改善することによって、メモリ保護テーブルを使用する処理システムの全体的な処理性能に大きく影響を与えることができる。
ここでも、上述したMPUの実例と同様に、場合によっては、システムはハードウェア論理を使用して実施されてもよい。しかしながら、命令を実行するための命令実行環境を提供するために、ホスト・データ処理装置を制御するためのシミュレータ・コンピュータ・プログラム内でそのような二分探索手順を実施することも可能であり、ここで、処理プログラム論理及びテーブル検索プログラム論理は、上述した処理構成要素及びテーブル検索回路と同じ機能を提供する。記憶媒体が、シミュレータ・コンピュータ・プログラムを記憶することができる。記憶媒体は、非一時的記憶媒体であってもよい。
特定のMPUの実例
図1は、命令に応答してデータ処理を実施するための処理回路4を有するデータ処理システム2を概略的に示す。例えば、処理回路4は、CPU、DSP、GPU又はデータ処理システムの他の処理要素であってもよい。処理回路4は、処理回路によって処理するための、メモリ・システム10からの命令をフェッチするための命令フェッチ・ユニット5と、復号された命令に応答してデータ処理動作を実施するように実行ユニット6、8を制御するための制御信号を生成するためにフェッチされた命令を復号するための命令復号器7とを含むことができる。例えば、実行ユニットは、レジスタに書き戻すことができる結果値を生成するためにレジスタ12、14からフェッチされるオペランドに対して算術又は論理演算を実施するための算術/論理ユニット(ALU)6を含むことができる。実行ユニットはまた、レジスタ12、14及びメモリ・システム10の間でデータを転送するためのロード/ストア動作を実施するためのロード/ストア・ユニット8をも含んでもよい。レジスタは、処理回路4によって処理するための整数値を記憶するための汎用(整数)レジスタ12、及び、浮動小数点表現を使用して表現される値を記憶するための浮動小数点レジスタ14を含む、複数の異なるタイプのレジスタを含んでもよい。処理回路4にとってアクセス可能なレジスタはまた、例えば、複数の独立したデータ要素を含むベクトル・オペランドを記憶するためのベクトル・レジスタ、並びに/又は、条件付き演算を実施すべきかを決定するために条件付き命令によってチェックすることができる条件フラグ、現在の実行箇所を表すアドレスを記憶するプログラム・カウンタ、及び、例外ハンドリングを制御するための制御レジスタのような、処理回路4の動作を制御するための様々な制御パラメータを記憶するための制御レジスタのような、簡潔にするために図1には示されていない他のタイプのレジスタをも含んでもよい。
メモリ・システム10は、1つ又は複数のレベルのキャッシュ及びメイン・メモリを含むことができる。メモリ・システム10は、ロード/ストア・ユニット8が、メモリ・システム10からレジスタ12、14にデータをロードするためのメモリ・アクセス要求を発行するのをトリガするロード命令、又は、ロード/ストア・ユニット8が、レジスタ12、14からメモリ・システム10にデータを記憶するためのメモリ・アクセス要求を発行するのをトリガするストア命令を実行することによって、処理回路4によってアクセス可能である。また、命令フェッチ・ユニット5は、メモリ・システム10から命令をフェッチするためのメモリ・アクセス要求を発行する。各メモリ・アクセス要求は、アクセスされるべき位置の標的アドレスを指定することができる。この実例において、標的アドレスは、アクセスされるべき位置を直接的に指定する物理アドレスであり、そのため、アドレス変換は必要ない。
メモリ保護ユニット(MPU)20が、標的アドレスに基づいて、メモリ・システム10によってメモリ・アクセス要求がサービスされることを許可されるかをチェックするために設けられる。処理回路4が所与のアドレス領域にアクセスすることを可能にされるかを制御するためのアクセス許可は、2つの方法で定義することができる。各々が対応するアドレス領域に対するアクセス許可を定義する複数のエントリを含むメモリ保護テーブル22が、メモリ・システム内に記憶され得る。MPU20は、MPUテーブル22から情報を得るために、メモリ・システム10へのメモリ・アクセス要求を開始するためのMPUメモリ・アクセス回路24を有する。MPUメモリ・アクセス回路24は、MPUテーブル22が、処理回路4から受信されるメモリ・アクセス要求によって指定される標的アドレスを含むアドレス領域のエントリを含むかを識別するために必要とされる比較を実施するためのテーブル検索回路26を有する。メモリ・システム10は、2つ以上のMPUテーブルを記憶することができ、各テーブル22は、それぞれのソフトウェア・プロセスと関連付けられる。いずれの特定のMPUテーブルがMPUメモリ・アクセス回路24を使用してアクセスされるべきかを識別するアクティブ・テーブル識別子が、アクティブ・テーブル識別子レジスタ(又はレジスタのグループ)28内に記憶される。例えば、アクティブ・テーブル識別子レジスタ28は、現在アクティブなMPUテーブルのベース・アドレス30を指定することができ、また任意選択的に、アクティブなテーブルのサイズを指定することもできる。メモリ・システム10からMPUテーブルの選択されたエントリをキャッシュするためのMPUキャッシュ・ストレージ32がMPU内に設けられ、結果、同じエントリが再び必要とされる場合、当該エントリにより高速にアクセスすることができる。例えば、MPUキャッシュ・ストレージは、メモリ・システム10内のMPUテーブル22の補助記憶装置と比較して低減したアクセス待ち時間でMPUテーブルのエントリをローカルに記憶するためのレジスタのセットを含むことができる。
メモリ・システム10へのアクセスを制御するためのアクセス許可を提供するための別の方法は、静的MPUレジスタ・ストレージ36内で、静的に構成されたメモリ保護エントリを定義することであり得る。処理回路4は、静的MPUレジスタ・ストレージにアクセスするように特に意図された専用タイプの命令のような、静的MPUレジスタ・ストレージ36の内容を構成するための命令をサポートすることができ、又は、静的MPUレジスタ・ストレージ36向けに提供されるメモリ・マッピング・レジスタにマッピングされているアドレスを標的アドレスとして指定する、ロード/ストア・ユニット8によって実施される、より一般的なストア動作を使用してもよい。一般的に、MPUパラメータ再構成動作(例えば、これらのメモリ・マッピング・ロード/ストア動作のうちの1つ又は専用タイプの再構成命令)が、所与のアドレス領域に対応する所与のメモリ保護エントリを定義するために静的MPUレジスタ・ストレージ36の内容をデータ投入するために実行されると、静的レジスタ・ストレージ36内に記憶されている情報の損失を引き起こすリセット又は電源停止事象がないとき、その所与のメモリ保護エントリは、別のMPUパラメータ再構成動作がそのエントリの内容を変更するまで、静的MPUストレージ36内に留まる。これは、たとえ所与のアドレス領域の実際のパラメータ・セットを変化させるMPUパラメータ再構成動作がなかったとしても、MPUキャッシュ・ストレージ32の内容が、キャッシュ交換ポリシに従って経時的に変化し得る、MPUキャッシュ・ストレージ32とは異なる。例えば、MPUキャッシュ・ストレージ32は、メモリ・システム10内のメモリ保護テーブル22のより最近にアクセスされたエントリのために空間が作成される必要があるとき、将来において最も有用性が低いと予測されるエントリを排除するために、最長時間未使用又は同様の交換ポリシを使用するキャッシュ・コントローラと関連付けることができる。
図1は、MPUキャッシュ・ストレージ32とは別個のものである静的MPUレジスタ・ストレージ36を示しているが、他の実例において、これらは、共通のストレージ構造のそれぞれの部分であってもよい。例えば、共通のストレージ構造のいくつかのエントリが、それらがキャッシュ交換ポリシを通じて排除されるべきではない静的エントリであると考えられるべきであることを示すためのフラグによってマークされてもよい。しかしながら、実際には、別個のストレージ構造32、36を提供することによって、キャッシュ・ストレージ32へのより効率的なインデックス付けを可能にすることができる。
MPUは、メモリ・システム10内に記憶されている(若しくはMPUキャッシュ・ストレージ32内にキャッシュされている)メモリ保護テーブル22の検索エントリ、又は、静的MPUレジスタ・ストレージ36内で指定される、静的に構成されたMPUエントリのいずれかにおいて指定されるアクセス許可データを読み出し、処理回路4によって発行されるメモリ・アクセス要求の特性が、メモリ・アクセス要求の標的アドレスに基づいて選択されるエントリに対するアクセス許可によって指定される要件を満たすかを判定するための、許可チェック回路40を備える。例えば、アクセス許可は、領域が、読み出し専用領域(処理回路4によって実行されるストア命令によってトリガされる一切の書き込み要求が拒絶されるべきである)であるべきか、又は、読み出しと書き込みの両方を許可されるかを指定することができる。アクセス許可はまた、フェッチ・ユニット5が対応するアドレス領域から命令をフェッチすることを許可されるかを指定することもできる。アクセス許可はまた、対応するアドレス領域へのアクセスを処理回路4の特定の例外レベル又は特権レベルまで制約することもでき、許可チェック回路40は、メモリ・アクセス要求と関連付けられる現在の例外レベル又は特権レベルが、アクセス許可において定義される制約を満たすかをチェックすることができる。
メモリ・システム10内のメモリ保護テーブル22及び静的MPUレジスタ・ストレージ36は、許可チェック回路40がメモリ・アクセスを許可するかに影響を与える制御情報の唯一のソースではない場合がある。例えば、装置2はまた、アドレス空間内の安全領域及び非安全領域を定義するメモリ・セキュリティ構成レジスタ44を備えるセキュリティ属性ユニット(SAU)42をも含むことができる。メモリ・アクセス要求の標的アドレスは、セキュリティ・チェック回路46によって、レジスタ44内の領域定義データに対してチェックされ、処理回路4は、安全動作モードにおいて動作しているときにのみ安全領域にアクセスするように制約される(非安全領域は、安全モード又は非安全モードのいずれにおいてもアクセス可能である)。したがって、メモリ・セキュリティ構成レジスタ44は、MPUテーブル又は静的MPUレジスタ・ストレージ36の許可に直交する許可を適用することができる、メモリへのアクセスを制御するための制御データ構造の別の実例を表すことができる。すなわち、MPUによって許可されるアクセスが、それにもかかわらず、SAU42によって拒絶される場合があり、又は逆もあり得る。処理回路のフェッチ・ユニット5又はロード/ストア・ユニット8によって開始されるメモリ・アクセス要求と、メモリ・システム10内のメモリ保護テーブル22にアクセスするためにMPUメモリ・アクセス回路24によって発行される任意のMPUメモリ・アクセス要求の両方が、SAU42によるセキュリティ・チェックを受け得る。図1の実例において、いずれのメモリ領域が安全又は非安全と考えられるかの定義は、メモリ・セキュリティ構成レジスタ44の内容によってのみ定義されるが、他の実例において、MPUテーブル22と同様のメモリ・セキュリティ・テーブルが、アドレス領域を安全又は非安全として定義するエントリのさらなる定義を提供するために、メモリ・システム10内で維持され得る。これは、より多数の同時に定義される領域へのサポートを可能にする。MPU20及びSAU42は、図1において逐次動作するように示されているが、いくつかの実施態様は、性能を改善するために、処理回路によって発行されるメモリ・アクセスに関する、MPU及びSAUへの並列検索を可能にすることができる。
図2は、メモリ・システム10内に記憶されるメモリ保護テーブル22の実例を示す。メモリ保護テーブルは、複数のエントリ50を含む。この実例において、各メモリ保護エントリ50は、メモリ・アドレス空間の2つの隣接するデータ語52内に記憶されるデータを含む。第1のデータ語RBARiが、対応するアドレス領域のベース・アドレス(開始アドレス)54を提供し、一方、対応するアドレス領域の終端アドレス(LIMIT)56は、エントリ50の第2のデータ語RLARiにおいて定義される。この実例において、アクセス許可(AP)58は、エントリのRLARデータ語において指定され、一方、エントリが有効なアドレス領域を定義するか又は無効なアドレス領域を定義するかを示す有効化フラグ60はRBARデータ語内にあるが、この情報58、60はまた、他のデータ語に切り替えられてもよく、又は、同じデータ語内で表されてもよい。また、エントリ50の各データ語52は、任意選択的に、図2に示されていない他の情報を含んでもよい。図2は、各アドレス領域の開始アドレス54及び終端アドレス56がメモリ内の別個のデータ語内で表されている実例を示しているが、これは必須ではなく、いくつかの実施態様において、これらは単一のデータ語内に収まってもよく、その場合、エントリあたり複数のデータ語を提供することは必要ないことであり得る。また、図2は、開始アドレス54及び終端アドレス56を使用して可変サイズのアドレス領域を表しているが、他の実例において、これらの限界アドレスのうちの一方は、他の限界アドレスに対する対応するアドレス領域のサイズを定義するサイズ・パラメータによって表されてもよい。アクティブ・テーブルIDレジスタ28は、メモリ保護テーブルのベース・アドレス30を識別し、任意選択的に、メモリ保護テーブル内のエントリの総数を識別するサイズ・パラメータ62を識別してもよい。図2では、エントリ50のデータ語52は隣接しているが、これは必須ではなく、いくつかの実施態様において、すべてのRBARiデータ語が、テーブルの1つの部分内にともにクラスタ化されてもよく、RLARiデータ語は、テーブルの別の部分内にともにクラスタ化される。
メモリ保護テーブル22のエントリ50は、処理回路4のロード/ストア・ユニット8又は命令フェッチ・ユニット5によって発行される通常のメモリ・アクセスのアドレスに使用される同じアドレス空間64内のアドレスに割り当てられる。メモリ保護エントリ50は、アドレス空間内で、それらの開始アドレス54によって順序付けされる(また、メモリ保護テーブル22内のメモリ保護エントリによって定義されるアドレス領域は重なり合うことを許容され得ないため、それらの終端アドレス56によっても順序付けされる)。したがって、エントリ0は、最低の開始アドレスを有するアドレス領域に対応するエントリになり、エントリ1は、次に低い開始アドレスを有するアドレスに対応することになり、以下同様である。図2は、アドレス空間64内で、エントリがアクセス許可を定義する対応するアドレス領域の位置ではなく、テーブルの各メモリ保護エントリ50が記憶されるアドレスの位置を示していることに留意されたい。図2に示す各エントリ50の特定のフォーマットは1つの実例に過ぎず、同じ情報を表すために他のフォーマットが使用されてもよいことが諒解されよう。
図3は、複数のキャッシュ・エントリ34を含むMPUキャッシュ・ストレージ32の実例を示し、各キャッシュ・エントリ34は、メモリ保護テーブル22からメモリ保護エントリ50のうちの1つをキャッシュするためのものである。図3に示すように、対応するメモリ保護エントリ50のパラメータに加えて、キャッシュ・エントリ34はまた、キャッシュ・エントリ34の内容が有効であるかを示す有効ビット70、及び、そのキャッシュ・エントリ34内にキャッシュされているメモリ保護エントリ50が抽出された特定のメモリ保護テーブル22を識別するテーブル識別子72(これは、キャッシュされたメモリ保護エントリがキャッシュ32に配分された時点におけるアクティブ・テーブルIDレジスタ28の現在の値に対応し得る)をも指定することができる。複数のキャッシュ・エントリ34が同じテーブル識別子72を有することになる可能性が高いため、いくつかの実施態様は、MPUキャッシュ・ストレージ32内で別個のテーブル識別子テーブル内に固有のテーブル識別子72のみを記憶することによって、必要なストレージを低減することを選択することができる。そのような実施態様において、各キャッシュ・エントリ34は、テーブル識別子テーブル内の全テーブル識別子に対するインデックスを記憶することができる。また、各キャッシュ・エントリ34は、その特定のキャッシュ・エントリ34がキャッシュされたメモリ保護エントリ50が抽出された元である、対応するメモリ保護テーブル22内の位置を識別するエントリ識別子74を指定することができる。例えば、図2に示す実例において、エントリID1がテーブルから抽出され、キャッシュ内に配置される場合、エントリIDフィールド74は、1の値を指定することができる。エントリIDフィールド74は、メモリ保護テーブルのいずれのエントリIDに所与のアドレスがマッピングされるかをチェックするために、処理回路4によって実行される命令をハンドリングするのに有用であり得る。各キャッシュ・エントリ34内にエントリIDの指示を含めることは、命令によって指定されるアドレスがキャッシュ・ストレージ32内のキャッシュされているメモリ保護エントリによって定義される領域の1つに一致する場合、そのエントリのエントリID74が、メモリへのアクセスから決定されることを必要とするのではなく、単純に、キャッシュから読み出され得ることを意味する。
テーブルID72は、キャッシュ内の検索に資格付与するために使用される。キャッシュが所与のアドレスに対応するメモリ保護エントリを含むかを判定するために検索されるとき、テーブルIDフィールド72がアクティブ・テーブルIDレジスタ28内に記憶されているアクティブなIDに一致するキャッシュ・エントリ34のみがヒットを生成することができる。アクティブ・テーブルIDとは異なるテーブルIDを含むキャッシュ・エントリ34は、たとえキャッシュに供給される問い合わせアドレスが、対応するメモリ保護エントリ50についてキャッシュされているパラメータ内のベース・アドレスと限界アドレスとの間にある場合であっても、失敗を生成する。
キャッシュ・エントリ34は、メモリ保護テーブル22内でメモリ内に記憶される各メモリ保護エントリ50内に提供される有効化フラグ60のための空間を有する必要はないことに留意されたい。これは、キャッシュ32が、無効なメモリ保護エントリをキャッシュするのを禁止され得るためである。MPUキャッシュ・ストレージ32内にキャッシュされているすべてのメモリ保護エントリが有効化されたエントリであり得るとき、有効化フラグ60は、キャッシュ・エントリ34内で冗長になる。無効化されたエントリをキャッシュすることを禁止することは、処理回路を実行するソフトウェアが、後にアクティブ化され得る領域を定義するMPUテーブル22内の無効なメモリ保護エントリを含むことができ、その後、それらの領域がアクティブ化される必要があり、結果、アドレス・アクセスがその後許可されるようになるとき、これは、単純に、MPUキャッシュ・ストレージ32からの任意のキャッシュ無効化をトリガする必要なしに、メモリ保護テーブル22の対応するメモリ保護エントリ内で有効化フラグ60を設定することによって行うことができる。
MPUキャッシュ・ストレージ32からのキャッシュ指示は、処理回路4がMPUキャッシュ無効化コマンドを実行することによってトリガすることができる。MPUキャッシュ無効化コマンドの変形例は、すべてのキャッシュされているエントリ、又は、アドレス若しくはアドレス範囲、テーブルID又はエントリIDのうちのいずれか1つ又は複数によって指定される条件を満たすエントリの無効化をトリガすることができる。
図4は、静的MPUレジスタ・ストレージ36及びMPU20内に設けられる様々な制御レジスタ80の実例を示す。
静的MPUレジスタ・ストレージ36について、図4は、静的MPUエントリ毎に提供される3つのレジスタから成るセットを示す。すなわち、MPUレジスタ・ストレージ内でハードウェアにおいてサポートされる各静的MPUエントリについて、3つのレジスタ82、84、86の別個のインスタンスが提供され得る。レジスタ86は任意選択である。レジスタ82及び84はともに、対応する静的MPUエントリを表し、メモリ保護テーブル22の所与のメモリ保護エントリ50と同様の内容を有する。したがって、レジスタ82、84は、ベース・アドレス(開始アドレス)54及び限界アドレス(終端アドレス)又はサイズ56、アクセス許可58、並びに、エントリが有効である(メモリ・アクセス要求の許可をチェックするために使用されることが可能である)か、又は、無効である(結果、このエントリの内容に基づいてメモリ・アクセス要求は検証することができないが、無効化されるとき、レジスタ82、84、86の残りのパラメータは後に再構成されるまで保持されるべきである)かを制御する有効化フラグ60を指定することができる。レジスタ82、84の特定のフォーマットは1つの実例に過ぎず、同じ情報が、異なるフィールドを通じて再配列又は表現されてもよいことが諒解されよう。また、レジスタ82、84は、図4に示されていない他の情報を記憶してもよい。また、場合によっては、静的に構成されたMPUエントリの内容は、単一のレジスタによって表されてもよい。
したがって、静的MPUエントリが処理回路4によって送信されるアクセス要求の標的アドレスに一致するアドレス領域を定義し、エントリが有効であるとき、その一致する静的MPUエントリ内で定義されるアクセス許可58は、アクセスが許可されるかを検証するために使用することができる。この場合、アクセス要求を検証するためにメモリ・システム10にアクセスすることは必要ないことであり得る。
レジスタ82、84によって表される、対応する静的MPUエントリと関連付けられる追加のメタデータ・レジスタ86は任意選択であるが、提供される場合、より効率的な性能を可能にすることができる。メタデータ・レジスタ86は、1に設定される場合に、対応する静的MPUエントリと関連付けられるレジスタ82、84が、静的MPUエントリを記憶するために現在使用されていないことを示す、無効・未知レジスタ(RDU:register disabled and unknown)フィールド88を指定する。RDUフィールド88が1に設定される場合、これは、レジスタ82、84を、メモリ・システム10内に記憶されているMPUテーブル22から対応するメモリ保護エントリの内容をキャッシュするための、MPUキャッシュ・ストレージ32の拡張として使用することができることを示す。これは、ソフトウェアが、ハードウェア内でサポートされる全数の静的MPUエントリを必要としない時に、MPUキャッシュ・ストレージ32の容量を実効的に増大させることによって、より良好な性能を可能にすることができる。メタデータ・レジスタ86の残りの部分は、そうでなければ静的レジスタ内に提供されないことになる、キャッシュ・ストレージ32内の各キャッシュ・エントリ34に対して提供される追加のキャッシュ・フィールド70、72、74を指定することができる。静的レジスタ内の特定のエントリがRDUフラグ88を使用して未知に設定されるとき、これは、エントリが、有効化フラグ60を使用して無効であると設定されることとは異なることに留意されたい。エントリが無効化されるが、未知であるとしてマークされないとき、レジスタ82及び84の内容は保持され、これらのレジスタは、キャッシュ・ストレージとして使用することはできない。例えば、ソフトウェアは、アドレス空間のその領域へのメモリ・アクセスを、そのエントリを使用して検証することができないように、特定の静的エントリを一時的に無効化し、ただし、静的MPUレジスタを(有効化フラグ60を設定する以外に)再プログラムする必要なしに、その領域を再び有効化することができるように、それらのレジスタ82、84内のパラメータを維持することを所望する場合がある。静的領域がRDUフラグ88を使用して未知に設定されるとき、キャッシュは、上述したように無効なメモリ保護エントリをキャッシュすることを禁止され得るため、有効化フラグ60は、未知として設定された静的領域内でキャッシュされたエントリには必要とされない場合がある。したがって、いくつかの実施態様は、別個の有効化フラグ60及び有効フラグ70の代わりに、単一の共有される有効/有効化フラグを有することを選択することができる。
制御レジスタ80は、静的MPUエントリの内容をプログラムするために使用される領域プログラミング・レジスタ90を含む。制御レジスタ80の各々は、その特定のレジスタにマッピングされているメモリ・アドレスを標的アドレスとして指定するロード/ストア動作を実施することによってアクセスすることができるメモリ・マッピング・レジスタである。提供される静的MPUエントリのセットの各個々のエントリに(例えば、ハードウェアにおいて提供される8又は16セットの静的MPUエントリ・ストレージの各々について)別個にアドレスを割り当てる必要を回避するために、静的MPUレジスタ・ストレージ内でサポートされるエントリの各々の第1の静的MPUレジスタ82のそれぞれのバージョンは、同じメモリ・マッピング・アドレスを共有することができる(また、アドレス共有レジスタ84についても同様)。レジスタ82又は84のいずれの特定のバージョンが書き込まれるべきかを選択するために、ソフトウェアは最初に、領域プログラミング・レジスタ90に、書き込まれるべき特定の静的MPUエントリの1つに対応する領域識別子92を書き込むことができ、その後、後続のMPU再構成動作(レジスタ82及び84にマッピングされるアドレスを標的アドレスとして指定するストア命令)を実行することができ、プログラミング・レジスタ90内にすでに配置されている領域数92が、いずれの静的MPUエントリが更新されるべきものであるかを指定することができる。プログラミング・レジスタ90はまた、領域識別子92がプログラミング・レジスタ90内で指定される領域が、メタデータ・レジスタ86のRDUフィールド88を通じて、無効であり未知であるとして設定されるべきであるかを指定するRDUフィールド94をも含むことができる。ここでも、RDUフィールドを設定するために静的MPUレジスタ・エントリのセットの間で共有されるプログラミング・レジスタ90を使用することは、各メタデータ・レジスタ86に対して別個のメモリ・マッピング・アドレスを提供する必要がないことを意味する。
図4に示すように、制御レジスタはまた、この実例においてはアクティブなテーブルのベース・アドレス30をアクティブ・テーブル識別子として指定する、アクティブ・テーブルIDレジスタ28をも含む。アクティブなテーブルのサイズは、さらなる制御レジスタ96内で指定される別個のサイズ・パラメータ62において指定される。図4においてドットでマークされているレジスタの残りのフィールドは、他の情報を記憶するために使用されてもよい。この実例において、テーブルのベース・レジスタ30を含むレジスタ28はまた、空のアクティブ・テーブル・サイズ・フィールド98をも含む。図4の実例において、アクティブMPUテーブル22のベース・アドレス30及びサイズ62は異なるレジスタ内に記憶されるため、これは、それぞれベース・アドレス及びサイズを設定するために、異なるMPUパラメータ構成動作が必要とされ得ることを意味し得る。したがって、ベース・アドレスとサイズの両方が変更される必要がある場合、ベース・アドレス及びサイズのうちの一方の変更と、他方の変更との間の期間があり得、その間、制御レジスタ80内のアクティブなテーブルを定義するパラメータは、実効的に、メモリ保護エントリ50によってプログラムされていないデータ語を含み得るアドレス空間の領域を定義する。これには、メモリ・アクセス動作が、メモリ保護エントリを定義するようには意図されていないデータに対してチェックされるという危険性があり得、場合によってはメモリ保護テーブルによって実施されるセキュリティ・チェックを破綻させる中間結果をもたらす可能性がある。MPUキャッシュ・ストレージ32のいくつかの実施態様は、メモリ保護テーブル22からのエントリのプリフェッチを可能にすることができる。そのようなプリフェッチは、任意の時点において発生し得、処理回路4によって実行される命令によって直接的にトリガされ得ないため、メモリ保護テーブル22の外部の無効なエントリがキャッシュされないことを保証することは困難であり得る。この問題は、ベース・アドレス30を含むレジスタ28内に空のアクティブ・テーブル・サイズ・フィールド(CLRATSIZE)98を提供することによって対処することができる。アクティブ・テーブルIDレジスタ28を再構成するとき、そのレジスタ内に配置されることになる新たなデータが、1に等しいCLRATSIZEフィールド98を指定する場合、そのレジスタの内容を更新することに加えて、レジスタ96内のアクティブ・テーブル・サイズ62も0にクリアされ、これは実効的に、メモリ・システム10内にアクティブなテーブル22がないことを示す。これによって、サイズではなくベース・アドレスのみが更新された後に、メモリ保護テーブル22の一部であると誤って仮定されるデータ語に基づいて、任意のメモリ・アクセス要求が不適切に許可されることが防止される。その後、後続のMPU再構成動作が、レジスタ96内のアドレス変換サイズを、新たなアクティブなフィールドの適切な値に更新することができる。他方、レジスタ28に書き込まれることになる新たな値が、0に設定されたCLRATSIZEフィールド98を有する場合、この動作に応答して、ベース・アドレス30を指定するアクティブ・テーブルIDレジスタ28の内容のみが更新され、この場合、レジスタ96内のサイズ62は変更されないままになる。これは、同じサイズの2つのメモリ保護テーブル間で切り替える場合により適切になる。
図5は、メモリ保護テーブル22の異なるメモリベースのMPUエントリ50又は静的MPUレジスタ・ストレージ36内の静的に構成されたMPUエントリによってカバーされるアドレス空間の一部分を概略的に示す。この例において、アドレス空間は、物理アドレス空間であり、そのため、処理回路4によって発行されるメモリ・アクセス要求は、メモリ・システム内の対応する位置に直接的に対応する物理アドレスを指定し、物理アドレス空間の対応する領域を定義するメモリ保護エントリに対してチェックされる。図5においてマークされている領域100は、メモリ保護テーブル22の3つの異なるメモリベースのメモリ保護エントリ50に対応する。メモリ保護テーブル22は、アドレス空間の疎らに設定された領域を定義することができ、メモリ保護テーブルの連続するエントリによって定義される対応するアドレス領域の間には間隙があり得ることに留意されたい。
他方、領域102は、静的MPUレジスタ・ストレージ36によって表される2つのそれぞれの静的MPUエントリに対応する。したがって、メモリ保護テーブル22からの所与のメモリベースのMPUエントリを位置特定するためのアクセス待ち時間は、エントリがMPUキャッシュ・ストレージ32内にあるかに応じて変化し得、処理回路4が、アクセス許可又は所与の静的MPUエントリによって定義される静的領域の範囲を定義するパラメータを再構成するための命令を実行するまで、静的領域は構成されたままになるため、静的MPUエントリに対応する静的領域102へのアクセスは決定性であり得る。したがって、ソフトウェアは、アクセスが迅速に且つ/又は決定性の待ち時間をもってハンドリングされる必要があり得るアドレス空間の特定の重要な領域を決定することができ、それらのアクセスをハンドリングするために静的MPU領域を使用することによって、これはリアル・タイム・アプリケーションにとってより良好になることができる。それと同時に、メモリ内に記憶されているメモリ保護テーブル22内の可変数のメモリ保護エントリ50をサポートすることによって、これは、より多数の総メモリ領域が同時に定義されることを可能にし、所与のアドレスの定義されるメモリ保護エントリの欠如によって引き起こされる障害の頻度が低減する。したがって、このハイブリッド手法は、特にリアル・タイム処理を伴うか又は決定性のアクセス待ち時間を必要とするがメモリ容量が制約されているシステムについて、性能とハードウェア・コストとの間のより良好なバランスを提供する。
図5に示すように、メモリ保護テーブル22のメモリ保護エントリによってカバーされる領域が、静的MPUエントリに対応する静的に構成されたアドレス領域と重なり合うことが可能である。この場合、当該重複は、種々の方法でハンドリングすることができる。いくつかの実施例において、メモリ・アクセス要求の標的アドレスが静的MPUレジスタ・ストレージ36内でヒットする場合、一致した静的MPUエントリによって定義されるアクセス許可が優先権を得ることができ、MPUテーブル22の一致するメモリベースのMPUエントリ内で指定されるいかなる相反する属性にも優先することができる。この場合、静的MPUレジスタ・ストレージ36内でヒットすると、いかなるメモリ・アクセス要求も、MPUメモリ・アクセス回路24によって開始されなくてもよい。
代替的に、静的MPUレジスタ・ストレージ内にヒットがあり、メモリ・アクセス要求がその一致する静的MPUエントリによって指定されるアクセス許可を満たす場合、メモリ保護テーブル22がアクセスされないように、MPUメモリ・アクセスを抑制することができるが、メモリ・アクセス要求が、一致する静的MPUエントリ内で指定されるアクセス許可を満たすことができない場合、MPUメモリ・アクセスは依然として、MPUメモリ・アクセス回路24によってトリガされ得る。メモリ保護テーブル22が標的アドレスを含むアドレス領域の一致するMPUエントリを含む場合に、その一致するメモリベースのMPUエントリが、アクセスが実施されることを許可する場合、たとえ同じアドレスの静的MPUエントリがメモリ・アクセスを許可しなかったとしても、メモリ・アクセスが許容され得る。このように静的MPUエントリとメモリベースのMPUエントリとの間の重複を可能にすることは、より広範囲のアドレス空間にアクセスすることを可能にし、また、より特権化されたプロセスにとって利用可能なアドレス範囲の制約されたサブセットのみへのより特権性の低いプロセスのアクセスをも可能にすることも可能である、より特権化されたプロセスに対する許可を設定するのに有用であり得る。例えば、静的MPUエントリによって表される領域102-1は、より特権性の高いプロセスへのアクセスを制限し得、そのため、より特権性の低いコードによってアクセスされる部分範囲100-2は、静的MPUエントリによって指定されるアクセス許可を満たすことができないが、領域100-2に関係する、対応するメモリベースのMPUエントリに基づいて実施される許可チェックを通過することができる。これによって、領域102-1を、領域100-2のいずれかの側の領域102-1の部分を表す別個のエントリに分割する一切の必要性が回避される。
図6は、メモリ・アクセスがMPUによって許可されるかをチェックする方法を示す流れ図である。ステップ120において、処理回路4が、標的アドレスを指定するメモリ・アクセス要求を発行する。メモリ・アクセス要求は、命令フェッチ回路5によって発行される命令フェッチ要求であってもよく、又は、ロード/ストア・ユニット8によって発行されるデータ・アクセス要求(ロード又はストア動作)であってもよい。ステップ122において、MPU20が、標的アドレスが、静的MPUレジスタ・ストレージ36内に記憶されている静的MPUエントリに対してヒットするかを判定する。すなわち、許可チェック回路40が、標的アドレスが静的MPUエントリのいずれかの対応するアドレス領域内にあるかを検出する。そうである場合、ステップ124において、許可チェック回路は、ヒットした静的MPUエントリ内で指定されているアクセス許可が満たされるかを判定する。アクセス許可がメモリ・アクセス要求によって満たされる場合、ステップ126において、メモリ・アクセス要求がMPUによって許可される。SAU42を備えるシステムにおいて、メモリ・アクセス要求が許可されるかを判定するために、追加のセキュリティ・チェックもまた、SAU42のセキュリティ・チェック回路46によって実施され得、そのため、たとえステップ126においてMPUがメモリ・アクセス要求を許可する場合であっても、要求がSAU42によって依然として拒絶され得る可能性がある。しかしながら、SAUチェックを受けると、メモリ・アクセス要求はMPU20によって許可される。
ステップ124において、アクセス許可がメモリ・アクセス要求によって満たされない場合、MPUが応答し得る方法には代替的な選択肢がある。第1の選択肢において、標的アドレスが静的MPUエントリに対してヒットするが、その静的MPUエントリがメモリ・アクセス要求によって満たされないアクセス許可を指定するとき、ステップ128において、メモリ・アクセス要求は拒絶され得る。この場合、MPUは、障害条件又は例外のシグナリングをトリガすることができる。代替的に、第2の選択肢において、方法は、ステップ122において標的アドレスが静的MPUレジスタ・ストレージ内に見つからなかった場合と同じく、ステップ130に進むことができる。
静的MPUレジスタ・ストレージ36内のエントリ内に標的アドレスが見つからなかった、又は、ヒットがあったがメモリ・アクセス要求がアクセス許可を満たすことができず、システムが選択肢2を実施する場合、方法はステップ130に進み、許可チェック回路40が、MPUキャッシュ・ストレージ32内に標的アドレスの何らかのヒットがあるかを検出する。いくつかのシステムは、いくつかの代替形態において、性能を改善するために、静的MPUレジスタ・ストレージ36内でヒット(又は、アクセス許可を満たしたヒット)が見つかった場合にのみ、すなわち、図6に示す連続的なステップ・フローを用いて、MPUキャッシュ・ストレージ32を検索し得るが、静的MPUレジスタ・ストレージが、メモリ・アクセス要求が許可されるべきか又は拒絶されるべきかの判定を決定論的に可能にすることができない場合にキャッシュに対する検索が必要とされる場合、キャッシュ検索がすでに開始されており、キャッシュ応答が早期に利用可能になることが可能になるように、キャッシュは、静的MPUレジスタ・ストレージと並行して検索されてもよいことに留意されたい。それにもかかわらず、静的MPUエントリは、たとえ並列に検索される場合であっても、キャッシュMPUエントリよりも高い優先権を得ることができる。
したがって、MPUキャッシュ・ストレージ内で有効であり、アクティブ・テーブルIDレジスタ28内のアクティブなテーブルとして現在識別されている同じMPUに対応する、キャッシュされているMPUエントリについて、標的アドレスがヒットする(すなわち、対応するアドレス領域内にある)場合、ステップ132において、許可チェック回路は、MPUキャッシュ・ストレージのヒットしたエントリ内で指定されているアクセス許可が満たされるかを判定する。そうである場合、再びステップ126において、必要とされ得る任意のSAUチェックを受けて、メモリ・アクセス要求が許可される。ステップ132においてMPUキャッシュ・ストレージ32のヒットしたエントリ内で指定されるアクセス許可が満たされない場合、ステップ134においてメモリ・アクセス要求は拒絶され、障害がシグナリングされ得る。
ステップ130において、MPUキャッシュ・ストレージ32のエントリのすべてにおいて、標的アドレスが見つからないと判定された(すなわち、アクティブ・テーブルIDと同じテーブルIDを指定するキャッシュされたエントリがない)場合、ステップ136において、テーブル検索回路26が、標的アドレスに基づいてメモリベースのMPUテーブル22を検索するための1つ又は複数のMPUメモリ・アクセス要求を開始するように、MPUメモリ・アクセス回路24をトリガする。検索プロセスは、下記の図7に関してより詳細に論じる。検索中にMPUメモリ・アクセス回路によってトリガされるMPUメモリ・アクセス要求は、デフォルトのアクセス許可のセットに対して検証され得、及び/又は、SAU42によってメモリ・セキュリティ構成レジスタ44において定義されるセキュリティ領域に対してチェックされ得る。したがって、MPUテーブル検索の一部として開始されるMPUメモリ・アクセス要求について、それらのメモリ・アクセスを、静的MPUレジスタ・ストレージ36又はメモリ保護テーブル22に対してチェックする必要はない。テーブル検索プロセスに基づいて、ステップ138において、テーブル検索回路26は、メモリベースのメモリ保護テーブル22内にヒットがあったかを判定する。そうである場合、再び132において、メモリ検出テーブルにおいてヒットしたエントリ内で指定されるアクセス許可が満たされるかが判定され、アクセス許可が満たされるかに応じて、方法はステップ126又はステップ134に進み、メモリ・アクセスが適切であるとして許可又は拒絶される。メモリ検出テーブル22のヒットしたエントリ内のアクセス許可をチェックするのに加えて、MPUキャッシュ・ストア32と関連付けられるキャッシュ・コントローラがまた、メモリ検出テーブル22のヒットしたエントリをキャッシュに配分することもできる。メモリ保護テーブル22内の以前にキャッシュされたエントリを排除する必要がある場合、犠牲となるエントリが、例えば、最長時間未使用のようなキャッシュ交換ポリシによって選択され得る。
他方、ステップ138において、テーブル検索回路26が、メモリベースのMPUテーブル22内で標的アドレスが見つからないと判定する場合、標的アドレスに対応するアドレス領域は現在、メモリ保護テーブル内で定義されておらず、そのため、失敗がシグナリングされる。メモリ保護テーブルにおける失敗に応答して、メモリ・アクセス要求をハンドリングするための異なる選択肢が利用可能である。場合によって、要求は単純に拒絶され得、障害がシグナリングされ得る。代替的に、静的MPUレジスタ・ストレージ36又はメモリ内のメモリ保護テーブル22のいずれかにおいて定義される特定のメモリ保護エントリを有しない任意のメモリ・アクセス要求をハンドリングするように意図されているデフォルトの属性のセットが定義されてもよい。したがって、メモリ保護テーブル22内で失敗する場合、メモリ・アクセス要求は、デフォルトの属性に対してチェックされてもよく、メモリ・アクセス要求がMPU20によって許可されるか否か又は拒絶されるか否かは、デフォルトの属性によって決定されてもよい。
図7は、図6のステップ136における検索プロセスをより詳細に示す流れ図である。図7は、複数のエントリを含む制御テーブルを検索する方法を示し、各エントリが、可変サイズの対応するアドレス領域の第1の限界アドレス及び第2の限界アドレス又はサイズを指定する。領域のサイズは、正確な2の累乗以外のバイト数であることを許容され得る。対応するアドレス領域の限界は、Nバイトのアドレス境界に対して不整合であってもよく、Nは、対応するアドレス領域のサイズである。図6のステップ136において、制御テーブルはメモリ保護テーブル22であり、テーブルを検索するのに使用される問い合わせアドレスは、処理回路4によって発行されるメモリ・アクセス要求によって指定される標的アドレスである。しかしながら、図7の検索プロセスはまた、他の形態の制御テーブルにも使用されてもよい。例えば、それらの検索プロセスはまた、安全若しくは非安全アドレス領域を指定する制御テーブル、又は、コードのいずれのセクションがリターン指向プログラミング攻撃に対する保護を提供することができる他のソフトウェア・ライブラリを呼び出すことが可能であるかを制限するために処理回路によって使用することができる、いずれのコードが実行されている特定のソフトウェア・ライブラリに属するかを追跡するための制御テーブルにおいて使用されてもよい。したがって、図7に示す方法は、メモリ保護テーブル22だけでなく、他の形態の制御テーブルに適用されてもよいことが諒解されよう。
図7のステップ150において、問い合わせアドレスが、検索回路26によって受信される。テーブル検索回路26は、問い合わせアドレスがそれらのエントリのいずれかの対応するアドレス領域に対応するかを判定するために探索されるべき制御テーブル22の複数のエントリを含む初期探索窓を決定する。場合によっては、探索窓は、制御テーブル22のエントリのすべてを含んでもよい。代替的に、いくつかの実施態様において、テーブル検索回路26は、制御テーブルのエントリのすべてを含むとは限らないより狭い探索窓を初期探索窓として決定してもよく、探索窓の特定の絞り込みは、未知であるとしてマークされている静的MPUレジスタ・ストレージ・ユニット36のエントリ内に記憶されている任意のキャッシュされているエントリ、又は、MPUキャッシュ・ストレージ32のキャッシュされているメモリ保護エントリから導出される情報に基づいて決定される。例えば、MPUキャッシュ・ストレージ32の検索において、問い合わせアドレスが、所与のキャッシュ・エントリ34のベース・アドレスよりも低いことがすでに判定されている場合、制御テーブル22のエントリはベース・アドレスによって順序付けされるため、メモリ保護テーブル22の一致するエントリは、そのキャッシュ・エントリ34内で指定されるエントリID74よりも低いエントリ識別子のみを有し得ることが分かり得る。
ステップ152において、テーブル検索回路26は、テーブルを検索するために実施される二分探索手順の第1の二分探索ステップを開始する。二分探索ステップ(探索窓絞り込みステップとしても知られる)は、連続する二分探索ステップにおいて複数回繰り返すことができる、図7に示すような複数のステップ152~170を含む。ステップ152において、例えば、現在の探索窓の中間点にある、制御テーブル22の候補エントリが選択される。必須ではないが、実施のために、中間点を、現在の探索窓の中点の可能な限り近くに配置することが好適であり得るが、探索窓内の偶数のエントリについては、探索窓の始まりと終わりとの間の正確に中間に候補エントリを有することが可能でない場合がある。例えば、探索窓が16個のエントリを含む場合、16個のエントリのうちのエントリ8又はエントリ9が、候補エントリとして選択され得る。また、2つのみのエントリを含む探索窓については、探索窓の外側境界にある一方のエントリが、候補エントリとして選択される。
ステップ154において、選択候補エントリがテーブルの有効範囲を超えるかが判定される。時として、制御テーブル22は、2の累乗に正確に対応しない複数のエントリを含む場合があるため、ステップ150において、2の累乗の数のエントリを有しないテーブルについて、探索窓は、エントリの数が、次に高い2の累乗に等しいかのようにフレーミングされ得、そのため、時として、ステップ152において、選択候補エントリは実際には、テーブルの有効範囲の外部にあり得る。そうである場合、ステップ156において、テーブル検索回路26は、MPUメモリ・アクセス回路24が、選択候補エントリの第1の限界アドレスをロードするための任意のロード動作を発行するのを抑制する。ここで、第1の限界アドレスは、対応するアドレス領域の開始アドレス又は終端アドレスのいずれかであり得、これらのうちのどれが所与の実施態様における各二分探索ステップにおいて比較されるかに依存する。上述したMPUの実例について、第1の限界アドレスが、対応するアドレス領域の開始アドレスであることが、最も単純であり得る。ステップ156において、テーブル検索回路は、選択候補エントリがテーブルの範囲を超えるため、問い合わせアドレスと第1の限界アドレスとの比較の結果が、その比較に基づいて探索窓が絞り込まれるときにテーブル内の少なくとも1つのエントリを含むように黙示的に決定され得ると判定する。例えば、ステップ164において実施される比較が、対応するアドレス領域のベース・アドレス未満であるかを判定することである場合、比較の黙示的な結果は、選択候補エントリがテーブルの範囲を超える場合に問い合わせアドレスがベース・アドレス未満であることであり得、これは、このことが、より狭い窓が有効範囲の外部のテーブルの一部分を除外し、テーブル内の少なくとも1つのエントリを含むことを意味する傾向にあるためである。
ステップ154における選択候補エントリがテーブルの有効範囲内であると判定される場合、方法はステップ158に進み、テーブル検索回路26が、問い合わせアドレスと選択候補エントリの第1の限界アドレスとの比較の結果が、MPUキャッシュ・ストレージ22又は静的MPUストレージ36(RDUとしてマークされている静的エントリがキャッシュとして反転されている場合)内のキャッシュされている情報に基づいてすでに分かっているかを判定することができる。例えば、問い合わせアドレスが、所与のキャッシュ・エントリのベース・アドレス未満であることがすでに判定されている場合、選択候補エントリが所与のキャッシュ・エントリのエントリID74よりも高いエントリIDを有するときに、問い合わせアドレスもまた、選択候補エントリの第1の限界アドレス未満でなければならないことが黙示され得る。代替的に、第1の限界アドレスが対応するアドレス領域の上端アドレスであるシステムでは、キャッシュ32への検索によって、問い合わせアドレスが所与のキャッシュ・エントリ34の限界アドレスよりも高いことがすでに判定されている場合、選択候補エントリが所与のキャッシュ・エントリ34のエントリID74以下のエントリIDを有するとき、問い合わせアドレスは選択候補エントリの第1の限界アドレス(終端アドレス)を上回らなくてはならないことが黙示され得る。したがって、通常は選択候補エントリの問い合わせアドレスと第1の限界アドレスとの間で実施される比較の結果が、キャッシュされている情報に応じてすでに分かり得る場合、ステップ160において、選択候補エントリの第1の限界アドレスをロードするためのロードMPUメモリ・アクセス要求がテーブル検索回路26によって抑制され、代わりに、キャッシュされている情報から判定される比較結果を、メモリ・システム10からロードされる第1の限界アドレスに対する問い合わせアドレスの比較を実際に実施する代わりに、使用することができる。ステップ158は任意選択であり、そのため、いくつかの実施態様は、検索プロセスを誘導するために、キャッシュされている情報を使用しなくてもよいことに留意されたい。また、ステップ150においてMPU20内に記憶されているキャッシュされたエントリに基づいて探索窓が絞り込まれるシステムにおいて、絞り込まれた窓はその段階において、必要にならないキャッシュ・ストレージから分かるエントリをすでに除外することができ、そのため、この場合、ステップ158は、ステップ150においてすでに実効的に考慮に入れられている場合があるため、必要ない場合がある。したがって、キャッシュされている情報は、初期探索窓を策定するとき、及び/又は、所与の二分探索ステップの比較結果についてチェックするときのいずれかの、2つのステップのうちの1つにおいて考慮され得るが、これも必須ではないことが諒解されよう。完全を期すために、図7には両方が示されている。
選択候補エントリの問い合わせアドレスと第1の限界アドレスとの間の比較の結果を、すでにキャッシュされている情報に基づいて決定することができない場合、ステップ162において、テーブル検索回路26は、メモリ・システムから選択候補エントリの第1の限界アドレスをロードするためのロードMPUメモリ・アクセス要求をトリガするように、MPUメモリ・アクセス回路24をトリガする。したがって、アクティブなMPUテーブルのベース・アドレス30と、選択候補エントリのエントリ識別子に基づいて決定されるオフセットとの合計に対応するアドレスをその標的アドレスとして指定するロード要求を発行することができる。このロード動作は、デフォルトの属性セット及び/又はSAU42によって指定されるメモリ・セキュリティ構成に基づく許可チェックを受けることができる。選択候補エントリの第1の限界アドレス(対応するアドレス領域の開始又は終端アドレス)が返されると、ステップ164において、問い合わせアドレスが、返された第1の限界アドレスに対して比較される。ステップ164において比較が実際に実施されたか、又は、ステップ160において比較結果がキャッシュされている情報に基づいて黙示的に決定されたかにかかわらず、ステップ166において、比較結果を満たさないエントリを除外するように探索窓が絞り込まれる。例えば、第1の限界アドレスが対応するアドレス領域の開始(ベース)アドレスである場合、ステップ164における比較は、問い合わせアドレスが第1の限界アドレス未満であるかを判定することができる。問い合わせアドレスが第1の限界アドレス未満である場合、ステップ166において、より狭い探索窓を、以前の探索窓の、選択候補エントリのエントリ識別子未満のエントリ識別子を有するエントリを含む部分を含むように、決定することができる。任意選択的に、選択候補エントリ自体もより狭い探索窓に含まれてもよく、より狭い探索窓の先頭を識別するために選択候補エントリのエントリ識別子から1を減算するための追加の減算演算の必要性が回避されるため、クリティカル・タイミング・パスの長さを低減することによって、回路実装がより高速になり得ることがある。問い合わせアドレスが選択候補エントリの開始アドレスよりも大きい場合、より狭い探索窓は、選択候補エントリのエントリ識別子よりも小さいエントリ識別子を有するエントリを除外することができる。
他方、第1の限界アドレスが対応するアドレス領域の終端アドレスであり、ステップ164において、比較が、問い合わせアドレスが第1の限界アドレスよりも大きいかを判定することである場合に、問い合わせアドレスが第1の限界アドレスよりも大きい場合、ステップ166において、より狭い探索窓は、選択候補エントリのエントリ識別子よりも大きいエントリ識別子を有するエントリを含むことができる。他方、問い合わせアドレスが対応するアドレス領域の上位アドレス未満である場合、探索窓を、選択候補エントリ、及び、選択候補エントリのエントリ識別子未満のエントリ識別子を有する任意の残りのエントリを含むように、絞り込むことができる。
ステップ168において、テーブル検索回路は、ステップ156又はステップ166のいずれかにおいて実施される絞り込み後に、この時点でより狭い探索窓が制御テーブルの単一の候補エントリのみを含むかを判定する。そうでない場合、さらなる二分探索ステップが依然として必要とされ、ステップ170において、方法は、ステップ166又はステップ158からもたらされる絞り込まれた探索窓を現在の探索窓として使用する、次の二分探索ステップに進む。方法はその後、ステップ152に戻って、別の二分探索ステップのためにステップ152~168を繰り返す。
ステップ168において、より狭い探索窓が単一のエントリを含むと判定される場合、さらなる二分探索ステップは必要ない。この場合、ステップ172において、より狭い探索窓内に残っている単一のエントリによって指定される第2の限界アドレス又はサイズが、メモリ・システムからロードされる。ここでも、メモリからの単一のエントリの第2の限界アドレス又はサイズをフェッチするために発行されるロードMPUメモリ・アクセス要求は、SAU42によるチェック、及び/又は、デフォルトのメモリ・アクセス属性に基づくチェックを受け得る。場合によっては、MPUメモリ・アクセス回路24はまた、たとえ第1の限界アドレスが先行する二分探索ステップにおいてすでにチェックされていたとしても、メモリ・システムから単一の候補エントリの第1の限界アドレスを得るためのロードをトリガする必要もあり得る。他の実施態様は、先行する二分探索ステップにおいて読み出された1つ又は複数の選択候補エントリの第1の限界アドレスをキャッシュすることを可能にすることができ、そのため、ステップ172において残っている単一のエントリの第1の限界アドレスが依然としてキャッシュされている場合、単一のエントリの第1の限界アドレスを得るためのロードを抑制することができる。
ステップ174において、検索回路26が、問い合わせアドレスが単一の残っている候補エントリの対応するアドレス領域について定義されている限界内にあるか否かを判定する。したがって、アドレスを通じて第2の限界が指定される場合、検索回路は、問い合わせアドレスが第1の限界アドレスと第2の限界アドレスとの間にあるかを判定する(第1の限界アドレス及び第2の限界アドレスが対応するアドレス領域の考慮される部分であるか、又は、これらのアドレスのうちの1つが対応するアドレス領域の外部で考慮され得るかは、実施態様とは無関係の選択であり得る)。他方、第2の限界を定義するためにサイズが使用される場合、検索回路は、第2の限界アドレスを決定するために、サイズを第1の限界アドレスに加算するか、又は、第1の限界アドレスからサイズを減算することができ、その後ここでも、問い合わせアドレスが第1の限界アドレスと第2の限界アドレスとの間にあるかを判定することができる。問い合わせアドレスが単一の残りのエントリに対応する領域について定義される限界内にある場合、ステップ176において、メモリ保護テーブル内でヒットが検出される。その後、単一の残りのエントリ内で指定される属性を返し、処理構成要素によって実施される所与の動作を制御するために使用することができる。例えば、上記で示したMPUの実例について、ヒットしたエントリを使用して実施される動作は、図6のステップ132におけるアクセス許可のチェックであり得るが、他のタイプの制御テーブルについては、リターン属性を使用して異なる動作が実施されてもよい。他方、問い合わせアドレスが単一の残りのエントリの対応するアドレス領域の限界内にない場合、ステップ178において、問い合わせアドレスを含むアドレス領域に対応する一致エントリがないため、失敗が検出される。
したがって、図7において定義される二分探索手順によって、第2の限界アドレス又はサイズを定義するパラメータは、ステップ168後に残る単一のエントリについてメモリからロードされるだけでよい。各二分探索ステップについて、第1の限界アドレスのみが、ステップ162においてメモリからロードされる必要がある(また時として、キャッシュされている情報がすでに問い合わせアドレスを選択候補エントリの第1の限界アドレスに対して比較した結果がどのようなものであるかを判定するために使用され得る場合、このロードはいずれにしても抑制され得る)。最大メモリ・オーバーヘッドがエントリの数Nによってlog2(N)*2の代わりにlog2(N)+1に従ってスケーリングし得るため、この手法は、制御テーブルを検索するのに必要とされるメモリへのアクセス数を低減するのを助け、より高速の性能が可能になる。
図8は、テーブルが16個のエントリを含む実例に対する二分探索手順の特定の実例を示す。200とマークされている各ステップは、図7の特定の二分探索ステップ152~170を表し、対応する二分探索ステップのステップ164において実施される特定の比較によってラベリングされる。この実例において、第1の限界アドレスは、対応するアドレス領域のベース・アドレスであり、そのため、各二分探索ステップにおいて、そのステップにおける問い合わせアドレスと選択候補エントリのベース・アドレスとの間で未満比較が行われる。表記B6は、例えば、候補エントリ6のベース・アドレスを指す。したがって、第1の二分探索ステップ200-0において、初期探索窓(SW)は、16個のエントリ0~15を含み得、選択候補エントリは、例えば、エントリ8である。問い合わせアドレスと選択候補エントリ8のベース・アドレスB8との間の未満比較に基づいて、探索窓はその後、問い合わせアドレスがエントリ8のベース・アドレス未満である場合はエントリ0~7に、又は、問い合わせアドレスがエントリ8のベース・アドレス以上である場合はエントリ8~15に絞り込まれる。同様に、後続の二分探索ステップは再び、各二分探索ステップにおいて探索窓を半分に絞り込むように、候補エントリの二分割を行い、そのため、最大4回の二分探索ステップにおいて、16個のエントリから成る探索窓を、図8においてマークされているステップ202において識別されているような単一のエントリに低減することができる。二分探索ステップ200のいくつかにおける比較は、キャッシュされている情報に基づいてこれを知ることができる場合、又は、テーブル内のエントリの実際の数が2の累乗ではなく、そのため、上位エントリのいくつかが実際には有効なエントリを提供することができない場合、第1の限界アドレスを実際にロードし、それを問い合わせアドレスに対して比較するのではなく、それらの結果が黙示的に決定されるようにすることができる。例えば、テーブルが13個のエントリのみを含む場合、エントリ14のベース・アドレスに対して問い合わせアドレスを比較するための、200-1とマークされている二分探索ステップは、その後、エントリ12及び13を含むより狭い探索窓に対して作用する二分探索ステップに真っ直ぐ進むように、肯定的な結果を黙示的に提供することができる。同様に、N=13(すなわち、13個のエントリ0~12がある)について、最上位エントリがエントリ12であるためにエントリ13はないため、200-2とマークされている二分探索ステップもまた、黙示的な肯定的結果を生成して、探索窓内に残っている単一のエントリがエントリ12であると識別し得る。
したがって、ステップ202のうちの1つにおいて単一の残りのエントリが識別されたということは、問い合わせアドレスが単一の残りのエントリに対してヒットするか、又は、問い合わせアドレスが完全に失敗したことを意味する。これらのいずれが真であるかを判定するために、検索回路はステップ204(すなわち、図7のステップ174)において、単一の残りのエントリによって定義される領域について問い合わせアドレスがベース・アドレスと限界アドレスとの間にあるかを判定する。ベース及び限界のうちの一方又は他方は、領域の他の限界に適用されるサイズ・パラメータを通じて決定され得ることが諒解されよう。したがって、問い合わせアドレスが対応するエントリについてベース・アドレスと終端アドレスとの間にある場合、ステップ206において、その特定のエントリ内でヒットが検出され、問い合わせアドレスがこれらの限界の間にない場合、ステップ208において失敗が検出される。
図9は、テーブルにおける特定の問い合わせアドレスの検索の特定の実例を示す。この実例において、初期探索窓は、既存のキャッシュされている情報若しくは静的MPUレジスタ情報を使用するために、又は、テーブルが第1の場所に7つのエントリのみを含むために、7つのエントリ(エントリ0~6)を含むものとして決定される。第1の二分探索ステップ200-8において探索窓の中間点にあるエントリ3が選択され、これによって、問い合わせアドレス0x00880がエントリ3の開始アドレス0x07500未満であると判定され、そのため、探索窓は、エントリ4~6を除外するように絞り込まれる(また、任意選択的にエントリ3も、使用される特定の実施態様に依存して所望に応じて除外又は包含される)。第2の二分ステップ200-10において、選択候補エントリはエントリ1であり、今回、問い合わせアドレスは、エントリ1の背後の領域の開始アドレスよりも大きいと判定される。したがって、ここで、探索窓はエントリ0を除外し得る。したがって、ここで、問い合わせアドレスが、エントリ1若しくはエントリ2のいずれかに対応するはずであるか、又は、テーブル内のいずれのエントリにも対応しないことが分かる。したがって、二分探索は継続し、ここで、エントリ2がステップ200-12において選択候補エントリになり、領域2のベース・アドレスがロードされる。今回、領域2のベース・アドレスに対する問い合わせアドレスの比較は、問い合わせアドレスが領域2のベース・アドレス未満であることを示す。したがって、領域1がロードすべき正しい領域であると判定され、このエントリが返され、その領域の終端アドレスを定義する限界アドレスがメモリからロードされる。以前の二分探索ステップにおいてプロセッサが領域1のベース・アドレスの値をキャッシュしている場合、領域1のベース・アドレスをロードし直す必要性を回避することができる。この特定の事例において、問い合わせアドレスはこのとき、領域1の開始アドレスと終端アドレスとの間にあることが分かり、そのため、メモリ検出テーブル内でヒットが検出される。しかしながら、問い合わせアドレスが、最後の二分探索ステップにおいて識別された最後のエントリの限界の間になかった場合、失敗が検出されることになる。
図10は、図1に示す処理システム2内で例外をハンドリングするために使用することができるレイジー状態保存の実例を示す。図1に示すように、処理回路は、汎用レジスタ12及び浮動小数点レジスタ14を含むことができる。例外に遭遇すると、例外後に実行しているソフトウェア(文脈切り替えが行われた例外ハンドラ又はプロセスなど)がレジスタ12内にデータを上書きし、その後、レジスタ12を再使用することができるように、例外前に実行されたソフトウェアのアーキテクチャ状態を確保することができるように、レジスタ12の内容をメモリ10内に提供されるスタック・データ構造に保存する必要があり得る。しかしながら、レジスタ14内の浮動小数点アーキテクチャ状態も確保される必要があり得るが、実際には、すべてのソフトウェア・プロセスが浮動小数点レジスタを使用するとは限らない。浮動小数点命令を一切含まないプロセスでは、このとき、浮動小数点レジスタは必要とされない場合がある。レジスタ12、14からメモリ・システム10内のスタック・データ構造への状態の保存にはいくらか時間がかかる。したがって、例外前に実行している第1のソフトウェア・プロセス又は例外後に実行している第2のソフトウェア・プロセスのいずれかが浮動小数点レジスタを必要としない場合、メモリから浮動小数点状態を保存するために費やされる時間が、実効的に無駄になる可能性がある。
したがって、図10に示すように、例外に応答して整数レジスタ12がメモリ内のスタックに保存されるが、レジスタ14内の浮動小数点状態は例外に応答して保存されない、レイジー状態保存手法を使用することができる。代わりに、浮動小数点レジスタの保存は、第1のソフトウェアが浮動小数点レジスタを使用したとすでに判定されている場合に、第2のソフトウェアがその後、浮動小数点命令を実行して浮動小数点レジスタ14へのアクセスをトリガする場合にのみトリガされ得る。浮動小数点レジスタは実際には例外に応答して保存されないが、それにもかかわらず、例外に応答して、浮動小数点レジスタのために、メモリ10内のスタック上にいくらかの空間が確保され、スタック上の確保された領域のアドレスが記録される。これによって、例外前に実行された第1のソフトウェア・プロセスのために保存された状態を確保するために使用されるスタック・フレームのレイアウトが、浮動小数点レジスタが実際にこれまでに保存されたか否かにかかわらず一貫することができることが保証され、後続の状態復元を単純にすることができる。
しかしながら、アドレスが浮動小数点レジスタを保存するために確保されるとき、このアドレスは、例外が発生する前に実行していた第1のソフトウェア・プロセスにとってアクセス可能なスタック・データ構造内のアドレスであり得る。浮動レジスタが実際にスタック内の確保された空間に保存されるときまでに、MPU20の許可チェック回路40は、スタック内の確保空間に浮動小数点状態を保存するためのメモリ・アクセスが許可されるかをチェックする必要があり得るが、アクティブ・テーブル識別子レジスタ28が、第2のソフトウェア・プロセスによって使用するために再構成されている場合があるため、MPU20はもはや、第1のソフトウェアがスタック上のその領域に状態を保存することを許可されるかを定義する、第1のソフトウェアによって使用されたMPUテーブルにアクセスすることができない場合がある。
この問題に対処するために、例外が発生したとき、浮動小数点レジスタのためにスタック上に確保された空間のアドレスを記録するのに加えて、処理回路4と関連付けられる例外ハンドリング論理はまた、第2のソフトウェア・プロセスの実行中にハードウェアが、スタック上の確保された空間のアドレスが第1のソフトウェアの実行中に使用されたMPUテーブル22の対応するエントリ内で定義されるアクセス許可を満たすかを検証することを可能にするためのMPUチェック情報をも記録することができる。この記録されるMPUチェック情報は、種々の形態をとることができる。場合によっては、記録されるMPUチェック情報は、例外が発生した時点においてレジスタ28内に存在したアクティブ・テーブル識別子を含むことができ、結果、MPUはその後、浮動小数点レジスタが保存されるときに、たとえアクティブなテーブルが例外の結果として変化していたとしても、アドレスが、その特定のメモリ保護テーブル内で指定されるアクセス許可を満たすかをチェックすることができる。代替的に、MPUは、例外自体の時点において、浮動小数点状態の記憶のために確保されている領域を事前検証し、その検証が成功したかを示す情報を記録することができる。図11A及び図11Bは、第1の選択肢を使用する実例を示し、一方、図12A及び図12Bは、これらの選択肢のうちの第2の選択肢を使用する実例を示す。
図10に示すレイジー状態は、例外をハンドリングするための1つの選択肢に過ぎないことが諒解されよう。いくつかのシステムにおいて、制御レジスタ内の制御データは、例外をハンドリングするために、レイジー状態保存が実際に使用されるべきであるかを指定することができ、そのため、レイジー状態保存手法は、すべての例外に常に適用されなくてもよく、いくつかの例外は、依然として、例外の時点において整数状態と浮動小数点状態の両方を保存することによってハンドリングされ得る。したがって、図11a~図12bに示す技法は、レイジー状態保存が制御データによって有効化される場合に使用され得る。
図11A及び図11Bは、浮動小数点状態のためにスタック上に確保された空間のアドレスの検証が、例外後に実行されることになる浮動小数点命令に遭遇した時点において実施される場合の、レイジー状態保存の実例を示す。図11Aは、例外自体に応答してトリガされる動作を示し、図11Bは、後続の浮動小数点命令によってトリガされる動作を示す。
図11Aに示すように、ステップ250において、例外に応答して、例外ハンドリング・ハードウェアが、スタック・データ構造への整数レジスタの保存をトリガする。ステップ252において、浮動小数点状態を保存するための空間がスタック上に配分される(例えば、たとえ浮動小数点状態自体がまだ保存されていない場合であっても、任意の後に保存されるデータが、浮動小数点状態のために配分された空間を超えるスタックの位置に保存されるように、スタック・ポインタ・データが更新される)。代替的に、いくつかの実施例は、整数レジスタが、浮動小数点状態に配分された空間を超えてスタックに保存されるように、ステップ252及び250を逆に実施してもよい。レイジー浮動小数点保存動作は、制御レジスタ内にフラグを設定することによって、保留中としてマークされる。また、浮動小数点保存領域を識別するアドレスが、メモリ又は制御レジスタに保存される。ステップ254において、例外ハンドリング・ハードウェアが、ハードウェアが後に、確保される浮動小数点保存領域のアドレスが再びメモリ内の構造又はレジスタにとって例外の前に実行しているプロセスによって有効にアクセスされ得るかをチェックすることを可能にするためのMPUチェック情報の保存をトリガする。この実例におけるMPUチェック情報は、例えば、例外が発生した時点においてレジスタ28内で提供されたアクティブ・テーブルIDであってもよく、又は、例外前に実行しているプロセスと関連付けられるMPUテーブル内の必要なエントリの位置が決定されることを可能にする何らかの他の識別子であってもよい。図11Aは、例外に応答して行われ得るすべての動作を示しているとは限らず、レイジー状態保存に関連する動作のみを示していることが諒解されよう。場合によっては、スタックと関連付けられるMPUエントリは、排除されないようにキャッシュ内でロックすることができる。
図11Bに示すように、例外が処理され、例外後の第2のソフトウェア・プロセスの実行が開始されると、浮動小数点命令に行き当たる。ステップ260において、制御レジスタ内に記憶されているフラグが、浮動小数点保存動作がまだ保留中であるかを示す。浮動小数点保存動作がもはや保留中でない場合、ステップ262において、浮動小数点命令が実行される。しかし、浮動小数点保存動作がまだ保留中である場合、ステップ264において、確保されている浮動小数点保存領域のアドレスが得られ、保存されているMPUチェック情報を使用して、MPUによってチェックされる。浮動小数点保存を保存するために確保されているアドレス領域全体を、MPUチェック情報を通じて識別されるMPUテーブルに基づいて検証することができるかを検出する必要があり得る。浮動小数点状態を保存するために確保されている領域の開始アドレスと終端アドレスの両方がMPUテーブルの同じメモリ保護エントリに対応する場合、浮動小数点状態をスタックに保存するためのアクセスのすべてが許可されるかを判定するには、その領域内の1つのアドレスに対するアクセス許可を1回チェックすれば十分であり得るため、これによってチェックを単純化することができる。したがって、場合によっては、図11Aのステップ254において記憶されるMPUチェック情報はまた、確保されている領域の開始アドレス及び終端アドレスが同じメモリ保護エントリに対応するかの指示をも含み得る。
したがって、ステップ264において、MPU20は、確保されている領域に対応する1つ又は複数のメモリ保護エントリを得、ステップ266において、それらのエントリによって指定されるアクセス許可が、浮動小数点状態を保存するために発行されるメモリ・アクセス要求によって満たされるかをチェックする。アクセス許可が満たされる場合、ステップ268において、浮動小数点状態がメモリ内のスタック構造に保存され、後続の浮動小数点命令において、再び状態保存を実施する必要がないことを示すために、浮動小数点保存保留指示がクリアされる。しかしながら、浮動小数点状態を保存するためのいかなるアクセス要求についても許可が満たされない場合、ステップ270において、障害がシグナリングされる。場合によっては、障害は、浮動小数点命令が実行されるのを妨げる可能性がある。しかしながら、他の場合において、それにもかかわらず、障害の優先度がすでにハンドリングされている例外よりも低い場合は、障害は先行する例外の処理が完了するまで保留されたままであり得るため、障害にもかかわらず浮動小数点命令が実行される場合がある。図11Bのステップ270と262との間の点線は、時として、障害にもかかわらず、浮動小数点命令が依然として実施される場合があることを示している。
図12A及び図12Bは、図11A及び図11Bに対する代替形態を示し、図12Bは、浮動小数点命令に行き当たるのに応答して実施される状態保存のための動作を示している。この実例において、例外に応答して、ステップ250は図11Aにあるものと同じである。ステップ282において、スタック構造内で、浮動小数点レジスタを保存するための空間が配分される。ここでも、いくつかの実施態様は、これらのステップを逆にしてもよく、整数レジスタのための空間を配分し、整数レジスタを保存する前に、浮動小数点レジスタのための空間をスタック上に配分してもよい。この実例において、スタック上の配分される領域のアドレスは、図12Aのステップ284において例外がハンドリングされる時点において事前検証される。すなわち、スタック内の配分されている空間内の位置のアドレスは、アクティブ・テーブルIDレジスタ28によって識別されるアクティブなメモリ保護テーブルに対して検証される。任意の一致するMPUエントリにおいて指定されるアクセス許可に基づいて、浮動小数点状態を保存するためのアクセスが許可されるかが判定され、そうである場合、ステップ286において、浮動小数点保存領域のアドレスが、メモリ又はレジスタに記憶される。場合によっては、ステップ284における事前検証が成功したことを示すには、浮動小数点保存領域のアドレス自体が記憶されているという事実があれば十分であり得、そのため、事前検証が成功したことを示すフラグをも記憶することは必要ない場合がある。代替的に、検証が成功したことを確認するための別個のフラグも提供されてもよい。ステップ286において浮動小数点状態を保存するために配分されている領域のアドレスが保存されると、ステップ288において、例外後に実行される第1の浮動小数点命令において浮動小数点保存動作が必要になることを示すために、浮動小数点保存保留指示が設定される。したがって、この実例において、MPUチェック情報は、ステップ284における事前検証が成功したことの指示であり得る。
ステップ284における事前検証が、小数点状態を保存するためのアクセスが許可されないと判定する場合、2つの選択肢があり得る。第1の選択肢では、ステップ290において、例外ハンドリング回路又はMPUが、浮動小数点状態を記憶するためのアクセスが無効になることを指定する制御フラグを設定し得るが、それにもかかわらず、障害がトリガされず、その後、288において、浮動小数点保存動作が保留中としてマークされる。たとえ事前検証が不首尾であったとしても、後続の処理が障害なく進行することが好適であり得る。これは、このことが、例外後に実行するコードが浮動小数点レジスタに決してアクセスしない場合、浮動小数点状態を記憶するための保存された領域への無効なアクセスが決して実施されないために障害が不必要にトリガされないため、性能が改善することを意味するためである。代替的に、ステップ292における第2の選択肢では、事前検証においてアクセスが許可されないと判定される場合、障害がトリガされ得る。
図12Bは、例外をハンドリングした後に浮動小数点命令に行き当たるのに応答して実施される、対応する動作を示す。ステップ260において、浮動小数点状態保存動作が保留中であるかが判定され、図11Bにあるように、浮動小数点保存動作が保留中でない場合、ステップ262において、浮動小数点命令が、前述したように実行される。浮動小数点保存動作が保留中である場合、ステップ294において、浮動小数点保存領域のアドレスが保存されているか、及び、事前検証においてアクセスが無効であるとしてフラグ立てされているかが判定される。場合によっては、アドレス自体が記憶されているという事実を、アクセスが無効であるとしてフラグ立てされていないことの指示とみなしてもよく、又は、代替的に、特定の制御フラグが、ステップ284における事前検証が成功したかを示す場合、これを使用して、浮動小数点保存を進めるべきかを判定してもよい。浮動小数点保存領域のアドレスが保存されており、アクセスが無効でない場合、ステップ296において、浮動小数点状態が、浮動小数点保存領域のアドレスによって識別されるものとしての、スタック上で以前に確保された領域に保存される。また、任意の後続の浮動小数点命令は、浮動小数点保存動作をトリガしないように、浮動小数点保存動作が、保留中であるとしてクリアされる。他方、アクセスが無効であるとしてフラグ立てされたか、又は、浮動小数点保存領域のアドレスが保存されていない場合、ステップ298において、障害がトリガされる。選択肢2が選択されたとすると、処理は決して図12Bに到達しないため、これは、図12Aの実例における選択肢1に対応することに留意されたい。
したがって、一般に、例外前に実行するプロセスと関連付けられる、関連するMPUエントリが位置特定されること、又は、例外に応答する時点において実施される事前検証が成功したことを確認することを可能にするための何らかの情報を保存することによって、これは、例外後のプロセスを実行しながら、ハードウェアによってトリガされるレイジー状態保存が、たとえアクティブなメモリ保護が例外に応答して変化した場合であっても、安全に検証されることを可能にする。
図13は、使用することができるシミュレータ実施態様を示す。前述されている実施例は本発明を、関連する技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して実施するが、コンピュータ・プログラムを使用することを通じて実施される、本明細書において説明されている実施例による命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムはハードウェア・アーキテクチャのソフトウェア・ベースの実施態様を提供する限りにおいて、シミュレータとして参照されることが多い。様々なシミュレータ・コンピュータ・プログラムは、エミュレータ、仮想機械、モデル、及び、動的バイナリ変換器を含むバイナリ変換器を含む。典型的には、シミュレータ実施態様は、任意選択的に、シミュレータ・プログラム310をサポートするホスト・オペレーティング・システム320を作動させる、ホスト・プロセッサ330上で作動することができる。ホスト・プロセッサ330は、ホスト処理回路332と、メモリに記憶されている階層ページ・テーブルに基づくアドレス変換及びメモリ・アクセス許可をサポートするメモリ管理ユニット(MMU)334と、メモリ・システム336とを含む。いくつかの構成において、ハードウェア及び提供されている命令実行環境、並びに/又は、同じホスト・プロセッサ上に提供される複数の個別の命令実行環境の間に、複数のシミュレーション層があり得る。歴史的に、妥当な速度で実行するシミュレータ実施態様を提供するためには、強力なプロセッサが必要とされてきたが、そのような手法は、互換性又は再使用の理由のために別のプロセッサにとってネイティブであるコードを作動させることが所望されるときなど、特定の状況においては正当化され得る。例えば、シミュレータ実施態様は、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能を有する命令実行環境を提供することができるか、又は、典型的には異なるハードウェア・アーキテクチャと関連付けられる命令実行環境を提供することができる。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁において与えられる。
実施例が、以前に特定のハードウェア構造又は特徴を参照して説明されている限りにおいて、シミュレーション実施例において、等価な機能が、適切なソフトウェア構造又は特徴によって提供され得る。例えば、特定の回路は、シミュレーション実施例においては、コンピュータ・プログラム論理として実施され得る。同様に、レジスタ又はキャッシュのようなメモリ・ハードウェアは、シミュレーション実施例においてはソフトウェア・データ構造として実施され得る。以前に説明した実施例において参照されているハードウェア要素のうちの1つ又は複数がホスト・ハードウェア(例えば、ホスト・プロセッサ330)上で提示されている構成において、いくつかのシミュレーション実施例は、適切な場合に、ホスト・ハードウェアを利用することができる。
シミュレータ・プログラム310は、コンピュータ可読記憶媒体(非一時的媒体であってもよい)上に記憶することができ、シミュレータ・プログラム310によってモデル化されているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである、標的コード300(アプリケーション、オペレーティング・システム及びハイパーバイザを含み得る)に対するプログラム・インターフェース(命令実行環境)を提供する。したがって、標的コード300のプログラム命令は、シミュレータ・プログラム310を使用して命令実行環境内から実行することができ、結果、実際には上述した装置2のハードウェア特徴を有しないホスト・コンピュータ330が、これらの特徴をエミュレートすることができる。
図13に示すように、シミュレータ・プログラム310は、図1の処理回路4、MPU20及びSAU42に機能的に対応する、処理プログラム論理340、MPUプログラム論理350、及びSAUプログラム論理360を含むことができる。MPUプログラム論理350は、それぞれ許可チェック回路40、MPUメモリ・アクセス回路24、及びテーブル検索回路26に機能的に対応する、許可チェック・プログラム論理352、MPUメモリ・アクセス・プログラム論理354、及びテーブル検索プログラム論理356を含む。MPUプログラム論理350はまた、それぞれ静的MPUレジスタ・ストレージ36及びアクティブ・テーブルIDレジスタ28に対応する、静的MPUエントリ・ストレージ構造357及びアクティブIDデータ構造358を管理するためのプログラム論理をも含む。データ構造357、358の実際のデータは、ホスト・ハードウェア330のメモリ・システム336内に記憶されるが、シミュレータ・プログラムは、データ構造357、358を定義し、データ構造357、358に関するデータにアクセスするための論理を含む。シミュレーションにおいては、すべての基礎となるデータはホスト・ハードウェア330のメモリ・システム336内に記憶され、そのため、キャッシュをシミュレートすることによって任意の性能改善が提供される可能性は低いため、図1のMPUキャッシュ・ストレージ32に対応するプログラム論理を提供する必要はない。それにもかかわらず、シミュレータが、静的に定義されるMPUエントリと相互作用するように設計されているコードと互換性があるままであるように、MPUテーブル22とは別個に、静的MPUエントリ・データ構造357がシミュレートされる。いくつかの実施態様において、これはシミュレーションの性能の利益にならない場合があるが、シミュレータがクロック・サイクルの数を正確にシミュレートすることを目標とする場合、シミュレートされるMPU350はメモリ・アクセス要求に応答することを選択することが所望され得るため、シミュレータ310はまた、MPUキャッシュ・ストレージ32をシミュレートするためのプログラム論理を含んでもよい。SAUプログラム論理360は、図1のメモリ・セキュリティ構成レジスタ44及びセキュリティ・チェック回路46に機能的に対応する、メモリ・セキュリティ構成データ構造362及びセキュリティ・チェック・プログラム論理364を含む。
シミュレータ・プログラム310は、シミュレータ・プログラム310によってシミュレートされているプロセッサ上で提供される物理アドレス空間に対応するシミュレーション・アドレス空間370のシミュレーションを管理する。実行されるべき標的コード300、及びメモリ保護テーブル22は、シミュレーション・アドレス空間370内のアドレスと関連付けられる。標的コード300は、静的MPUエントリ・データ構造357及び/又はMPUテーブル22内で定義されるアクセス許可に基づくMPUプログラム論理350による許可チェックを受け、それらが許可チェックを通過する場合、シミュレータ・プログラム310の制御下でホスト・プラットフォームの仮想アドレスにマッピングされる、シミュレーション・アドレス空間370内の物理アドレスを指定するメモリ・アクセス命令を含み、仮想アドレスはその後、ホスト・ハードウェアのMMU334によって、ホスト・メモリ・システム336にアクセスするために使用される物理アドレスに変換され得る(MMU334は、ホスト・オペレーティング・システム320によって定義されるページ・テーブルに基づいて、メモリ・システムへのメモリ・アクセスが許可されるかをチェックするための、さらなる許可チェックを適用することができる)。
したがって、シミュレータ310は、メモリベースのメモリ保護テーブルを有するMPUに対するハードウェア・サポートを有しないホスト・プラットフォームが、そのようなハードウェア・サポートを有するプラットフォーム向けに設計されたコードを実行することを可能にする。
本出願において、「~するように構成されている」という語は、装置の要素が、定義されている動作を実行することが可能な構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの相互接続の配列又は様式を意味する。例えば、装置は、定義されている動作を提供する専用ハードウェアを有することができ、又は、プロセッサ若しくは他の処理デバイスを、その機能を実施するようにプログラムすることができる。「~するように構成されている」ことは、装置の要素が、定義されている動作を提供するために任意の方法で変更される必要があることを暗示しない。
本発明の例示的な実施例が、添付の図面を参照して本明細書において詳細に説明されてきたが、本発明はそれらの厳密な実施例には限定されないこと、並びに、添付の特許請求の範囲によって規定されているような本発明の範囲及び精神から逸脱することなく、当業者によってそれらの実施例において様々な変更及び修正を実行することができることは理解されたい。