(57)【要約】【課題】本発明は、第１のレジスタ内に記憶される命令アドレス範囲指示子に基づいて、次の命令フェッチアドレスが、現在の権限状態に関連付けられる第１のメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられる第２のメモリ領域内のロケーションに対応するかを判定する処理システムに関する。【解決手段】次の命令フェッチアドレスが第１のメモリ領域内にない場合、異なる権限状態への遷移が適正である場合にのみ、次の命令がフェッチされることを許可される。さらなる実施形態では、命令に対するデータ・アクセス・アドレスが生成される場合、第２のレジスタ内に記憶されるデータアドレス範囲指示子に基づいて、データ・アクセス・アドレスに対応するメモリロケーションに対するアクセスが許可されるかが判定される。現在の権限状態が、メモリロケーションに対するアクセスが許可される権限状態である場合、アクセスが許可される。【選択図】図３
2013250980.tif 000002
【特許請求の範囲】
【請求項１】
処理システムであって、
メモリからフェッチされた命令のアドレスに基づいて、現在の権限状態が第１の権限状態であるか、または第２の権限状態であるかの知識を維持するための第１のモジュールと、
次の命令フェッチアドレスを少なくとも１つの命令アドレス範囲指示子と比較することによって、前記次の命令フェッチアドレスが、前記現在の権限状態に関連付けられる第１のメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられる第２のメモリ領域内のロケーションに対応するかを判定するとともに、前記次の命令フェッチアドレスが前記現在の権限状態に関連付けられる前記第１のメモリ領域内にない場合は、前記現在の権限状態から前記異なる権限状態への遷移が適正である場合にのみ、前記次のコンピュータ命令がフェッチされることを許可するための第２のモジュールとを備える、処理システム。
【請求項２】
前記第１の権限状態は相対的に高い権限レベルを有する管理者状態であり、前記第２の権限状態は相対的に低い権限レベルを有するユーザ状態である、請求項１に記載の処理システム。
【請求項３】
前記少なくとも１つの命令アドレス範囲指示子は、管理者状態に関連付けられる管理者コードを記憶するために割り当てられる第１のメモリ領域を規定するとともに、ユーザ状態に関連付けられるユーザコードを記憶するために割り当てられる第２のメモリ領域を規定し、
前記第２のモジュールはさらに、前記次の命令フェッチアドレスが前記第１のメモリ領域内に入る場合には該次の命令フェッチアドレスが前記管理者状態に関連付けられるメモリ領域内にあることを判定し、および、前記次の命令フェッチアドレスが前記第２のメモリ領域内に入る場合には、該次の命令フェッチアドレスは前記ユーザ状態に関連付けられることを判定する、請求項１に記載の処理システム。
【請求項４】
前記少なくとも１つの命令アドレス範囲指示子は、前記第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第１のメモリ領域を規定するとともに、前記第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第２のメモリ領域を規定し、
前記第２のモジュールは、前記次の命令フェッチアドレスが前記第１のメモリ領域のうちの１つに入る場合には前記次の命令フェッチアドレスが前記第１の権限状態に関連付けられるメモリ領域内にあることを判定し、および、前記次の命令フェッチアドレスが前記第２のメモリ領域のうちの１つに入る場合には、前記次の命令フェッチアドレスは前記第２の権限状態に関連付けられることを判定する、請求項１に記載の処理システム。
【請求項５】
前記第２のモジュールはさらに、前記現在の権限状態から前記異なる権限状態への前記遷移が適正でない場合には、フォールトを生成するとともに、前記次のコンピュータ命令がフェッチされることを不許可とする、請求項１に記載の処理システム。
【請求項６】
前記少なくとも１つの命令アドレス範囲指示子を記憶するためのレジスタをさらに備える、請求項１に記載の処理システム。
【請求項７】
コードメモリをさらに備え、前記命令アドレス範囲指示子は、前記第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる前記コードメモリ内の１つまたは複数の第１のメモリ領域を規定し、前記命令アドレス範囲指示子は、前記第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる前記コードメモリ内の１つまたは複数の第２のメモリ領域を規定する、請求項１に記載の処理システム。
【請求項８】
データ・アクセス・アドレスを少なくとも１つのデータアドレス範囲指示子と比較することによって、該データ・アクセス・アドレスが前記第１の権限状態に関連付けられるか、または前記第２の権限状態に関連付けられるかを判定するとともに、前記現在の権限状態が前記データ・アクセス・アドレスに対応するメモリロケーションへのアクセスが許可される権限状態である場合に前記メモリロケーションへのアクセスを許可するために、コンピュータ命令に対する前記データ・アクセス・アドレスが生成されると判定するための第３のモジュールをさらに備える、請求項１に記載の処理システム。
【請求項９】
前記少なくとも１つのデータアドレス範囲指示子は、前記第１の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第１のメモリ領域を規定するとともに、前記第２の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第２のメモリ領域を規定し、
前記第３のモジュールは、前記データ・アクセス・アドレスが前記第１のメモリ領域のうちの１つに入る場合、該データ・アクセス・アドレスが前記第１の権限状態に関連付けられることと、前記データ・アクセス・アドレスが前記第２のメモリ領域のうちの１つに入る場合には、該データ・アクセス・アドレスは前記第２の権限状態に関連付けられることを判定する、請求項８に記載の処理システム。
【請求項１０】
前記少なくとも１つのデータアドレス範囲指示子を記憶するためのレジスタをさらに備える、請求項８に記載の処理システム。
【請求項１１】
データメモリをさらに備え、前記データアドレス範囲指示子は、前記第１の権限状態に関連付けられるデータを記憶するために割り当てられる前記データメモリ内の１つまたは複数の第１のメモリ領域を規定し、前記データアドレス範囲指示子は、前記第２の権限状態に関連付けられるデータを記憶するために割り当てられる前記データメモリ内の１つまたは複数の第２のメモリ領域を規定する、請求項８に記載の処理システム。
【請求項１２】
前記第３のモジュールは、前記現在の権限状態が、前記データ・アクセス・アドレスに対応する前記メモリロケーションに対するアクセスが許可されない権限状態である場合、フォールトを生成するとともに、前記メモリロケーションに対するアクセスを禁止する、請求項８に記載の処理システム。
【請求項１３】
処理方法において、
第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第１のメモリ領域を規定し、および第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第２のメモリ領域を規定する少なくとも１つの命令アドレス範囲指示子を記憶するステップと、
メモリからフェッチされた命令のアドレスに基づいて、現在の権限状態を前記第１の権限状態または前記第２の権限状態として定義するステップと、
次の命令フェッチアドレスを前記少なくとも１つの命令アドレス範囲指示子と比較することによって、前記次の命令フェッチアドレスが、前記現在の権限状態に関連付けられるメモリ領域内のロケーションに対応するか、または異なる権限状態に関連付けられるメモリ領域内のロケーションに対応するかを判定するステップと、
前記次の命令フェッチアドレスが前記現在の権限状態に関連付けられる前記メモリ領域内のロケーションに対応しない場合、前記次のコンピュータ命令に、前記現在の権限状態から前記異なる権限状態への遷移が適正である場合にのみ、フェッチされることを許可するステップとを備える、処理方法。
【請求項１４】
前記第１の権限状態は相対的に高い権限レベルを有する管理者状態であり、前記第２の権限状態は相対的に低い権限レベルを有するユーザ状態である、請求項１３に記載の方法。
【請求項１５】
前記現在の権限状態から前記異なる権限状態への前記遷移が適正でない場合には、フォールトを生成するとともに、前記次のコンピュータ命令がフェッチされることを不許可とするステップをさらに備える、請求項１３に記載の方法。
【請求項１６】
前記第１の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第３のメモリ領域を規定し、前記第２の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第４のメモリ領域を規定する少なくとも１つのデータアドレス範囲指示子を記憶するステップをさらに備える、請求項１３に記載の方法。
【請求項１７】
データ・アクセス・アドレスがコンピュータ命令によって生成されると判定するステップと、
前記データアクセスが発生すると、該データ・アクセス・アドレスを前記少なくとも１つのデータアドレス範囲指示子と比較することによって、該データ・アクセス・アドレスが前記第１の権限状態に関連付けられるメモリロケーションに対するものであるか、または、前記第２の権限状態に関連付けられるメモリロケーションに対するものであるかを判定するステップと、
前記現在の権限状態が、前記データ・アクセス・アドレスに対応するメモリロケーションに対するアクセスが許可される権限状態である場合、前記メモリロケーションに対するアクセスを許可するステップとをさらに備える、請求項１６に記載の方法。
【請求項１８】
前記現在の権限状態が、前記データ・アクセス・アドレスに対応する前記メモリロケーションに対するアクセスが許可されない権限状態である場合、フォールトを生成するとともに、前記メモリロケーションに対するアクセスを禁止するステップをさらに備える、請求項１７に記載の方法。
【請求項１９】
処理方法において、
現在の権限状態を管理者状態またはユーザ状態として定義するステップと、
次の命令フェッチアドレスを命令アドレス範囲指示子と比較することによって、該次の命令フェッチアドレスが、前記現在の権限状態に関連付けられるメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられるメモリ領域内のロケーションに対応するかを判定することであって、前記命令アドレス範囲指示子は、管理者コードを記憶するために割り当てられる管理者コードメモリ領域、およびユーザコードを記憶するために割り当てられるユーザコードメモリ領域を規定する、判定するステップと、
前記次の命令フェッチアドレスが前記現在の権限状態に関連付けられる前記メモリ領域内のロケーションに対応しない場合、前記次のコンピュータ命令に、前記現在の権限状態から前記異なる権限状態への遷移が適正である場合にのみ、フェッチされることを許可するステップとを備える、処理方法。
【請求項２０】
前記現在の権限状態が前記管理者状態であり、かつ前記異なる権限状態が前記ユーザ状態である場合は、前記管理者状態から前記ユーザ状態への前記遷移は、命令セット内の命令が実行される場合に適正であり、前記命令セットは割り込み命令からの復帰を含む、請求項１９に記載の方法。
【請求項２１】
前記現在の権限状態が前記ユーザ状態であり、かつ前記異なる権限状態が前記管理者状態である場合は、前記ユーザ状態から前記管理者状態への前記遷移は、命令セット内の命令が実行される場合であって、該命令セットはソフトウェア割り込み命令およびトラップ命令を含む、場合、または、例外条件が検出される場合に適正である、請求項１９に記載の方法。
【請求項２２】
データ・アクセス・アドレスがコンピュータ命令によって生成されると判定するステップと、
前記データアクセスが発生する場合、該データ・アクセス・アドレスをデータアドレス範囲指示子と比較することによって、該データ・アクセス・アドレスが前記管理者状態に関連付けられるメモリロケーションに対するものであるか、または前記ユーザ状態に関連付けられるメモリロケーションに対するものであるかを判定するステップであって、前記データアドレス範囲指示子は、前記管理者状態に関連付けられるデータを記憶するために割り当てられる第３のメモリ領域を規定し、前記ユーザ状態に関連付けられるデータを記憶するために割り当てられる第４のメモリ領域を規定する、判定するステップと、
前記現在の権限状態が前記管理者状態である場合、前記メモリロケーションに対するアクセスを許可するステップと、
前記現在の権限状態が前記ユーザ状態である場合、前記データ・アクセス・アドレスが前記第４のメモリ領域内のメモリロケーションに対するものであるときにのみ前記メモリロケーションに対するアクセスを許可するステップとをさらに備える、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ資源および実行保護の方法および装置一般に関する。
【背景技術】
【０００２】
一般的なコンピュータシステムは、プロセッサ上で実行するコードに対して、種々のレベルのシステム資源アクセスを提供し得る。これは多くの場合、たとえば、複数の階層的権限レベルのうちの１つを、システム上で実行され得る各タイプのコードに対して関連付けることによって達成される。このようなシステムでは、最も信頼できるコード（たとえば、カーネルコード）に最高レベルの権限を付与し、それほど信頼できないコード（たとえば、デバイスドライバ、アプリケーション、および他のユーザコード）にはより低いレベルの権限を付与する。権限のレベルが高くなるほど、コードがアクセスできるシステム資源も多くなる。逆に、権限のレベルが低くなるほど、コードがアクセスできるシステム資源は少なくなる。たとえば、カーネルコードは、実質的に無制限にシステム資源にアクセスすることができ得、一方でアプリケーションコードは特定のメモリ領域、入出力（Ｉ／Ｏ）などへのアクセスを制限され得る。
【０００３】
悪意によるコードまたはフォールトを含んだコードがシステムのデータおよび／または機能を損壊し得る危険性を低減するために、階層的権限方式が一般的にハードウェアによって執行される。たとえば、プロセッサは階層的権限方式を執行するために「管理者」動作モードおよび「ユーザ」動作モードを実装し得る。このようなシステムでは、ハードウェア媒介フラグが実装され得、ここで、フラグの状態が、資源に影響するさまざまな動作の実行を許可すべきか否かを判定するために使用される。フラグは、システムが管理者モードにある間にセットされ得、たとえば、高い権限を有するコードがシステム資源への広範囲に及ぶアクセスを有することを可能にする。逆に、システムがユーザモードにある間はフラグはクリアされ得、したがって、低い権限を有するコードによる或る資源へのアクセスが制限される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６２８２６５７号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プロセッサ上でさまざまな権限レベルにおいてコードを実行することが可能であることによって、２つ以上のレベルのソフトウェアが、ハードウェアによって執行される分離を維持しながら共存することができるように、ソフトウェアがこれらの権限レベルを利用して構築されることが可能になる。しかしながら、この能力は一般的に、権限状態を追跡するとともに状態変化を制御するために、多大なプロセッサロジックを犠牲とすることによって得られる。一般的に、階層的権限方式のハードウェア執行を提供するためのロジックは、プロセッサ設計に欠くことのできない部分であり、既存のプロセッサアーキテクチャにこの機能を加えることは、ハードウェア開発およびサイクルタイムに関してコストを高くする可能性がある。
【課題を解決するための手段】
【０００６】
第１の実施形態によると、処理システムであって、メモリからフェッチされた命令のアドレスに基づいて、現在の権限状態が第１の権限状態であるか、または第２の権限状態であるかの知識を維持するための第１のモジュールと、次の命令フェッチアドレスを少なくとも１つの命令アドレス範囲指示子と比較することによって、前記次の命令フェッチアドレスが、前記現在の権限状態に関連付けられる第１のメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられる第２のメモリ領域内のロケーションに対応するかを判定するとともに、前記次の命令フェッチアドレスが前記現在の権限状態に関連付けられる前記第１のメモリ領域内にない場合は、前記現在の権限状態から前記異なる権限状態への遷移が適正である場合にのみ、前記次のコンピュータ命令がフェッチされることを許可するための第２のモジュールとを備える、処理システムを要旨とする。
【０００７】
第１の実施形態において、前記第１の権限状態は相対的に高い権限レベルを有する管理者状態であり、前記第２の権限状態は相対的に低い権限レベルを有するユーザ状態であってもよい。
【０００８】
第１の実施形態において、前記少なくとも１つの命令アドレス範囲指示子は、管理者状態に関連付けられる管理者コードを記憶するために割り当てられる第１のメモリ領域を規定するとともに、ユーザ状態に関連付けられるユーザコードを記憶するために割り当てられる第２のメモリ領域を規定し、前記第２のモジュールはさらに、前記次の命令フェッチアドレスが前記第１のメモリ領域内に入る場合には該次の命令フェッチアドレスが前記管理者状態に関連付けられるメモリ領域内にあることを判定し、および、前記次の命令フェッチアドレスが前記第２のメモリ領域内に入る場合には、該次の命令フェッチアドレスは前記ユーザ状態に関連付けられることを判定するものでもよい。
【０００９】
さらに、第１の実施形態において、前記少なくとも１つの命令アドレス範囲指示子は、前記第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第１のメモリ領域を規定するとともに、前記第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第２のメモリ領域を規定し、前記第２のモジュールは、前記次の命令フェッチアドレスが前記第１のメモリ領域のうちの１つに入る場合には前記次の命令フェッチアドレスが前記第１の権限状態に関連付けられるメモリ領域内にあることを判定し、および、前記次の命令フェッチアドレスが前記第２のメモリ領域のうちの１つに入る場合には、前記次の命令フェッチアドレスは前記第２の権限状態に関連付けられることを判定するものであってもよい。
【００１０】
第１の実施形態において、前記第２のモジュールはさらに、前記現在の権限状態から前記異なる権限状態への前記遷移が適正でない場合には、フォールトを生成するとともに、前記次のコンピュータ命令がフェッチされることを不許可とすることもできる。
【００１１】
第１の実施形態において、前記少なくとも１つの命令アドレス範囲指示子を記憶するためのレジスタをさらに備えるものであってもよい。
第１の実施形態において、コードメモリをさらに備え、前記命令アドレス範囲指示子は、前記第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる前記コードメモリ内の１つまたは複数の第１のメモリ領域を規定し、前記命令アドレス範囲指示子は、前記第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる前記コードメモリ内の１つまたは複数の第２のメモリ領域を規定することもできる。
【００１２】
第１の実施形態において、データ・アクセス・アドレスを少なくとも１つのデータアドレス範囲指示子と比較することによって、該データ・アクセス・アドレスが前記第１の権限状態に関連付けられるか、または前記第２の権限状態に関連付けられるかを判定するとともに、前記現在の権限状態が前記データ・アクセス・アドレスに対応するメモリロケーションへのアクセスが許可される権限状態である場合に前記メモリロケーションへのアクセスを許可するために、コンピュータ命令に対する前記データ・アクセス・アドレスが生成されると判定するための第３のモジュールをさらに備えるものであってもよい。
【００１３】
この場合、前記少なくとも１つのデータアドレス範囲指示子は、前記第１の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第１のメモリ領域を規定するとともに、前記第２の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第２のメモリ領域を規定し、前記第３のモジュールは、前記データ・アクセス・アドレスが前記第１のメモリ領域のうちの１つに入る場合、該データ・アクセス・アドレスが前記第１の権限状態に関連付けられることと、前記データ・アクセス・アドレスが前記第２のメモリ領域のうちの１つに入る場合には、該データ・アクセス・アドレスは前記第２の権限状態に関連付けられることを判定することもでき、あるいは、前記少なくとも１つのデータアドレス範囲指示子を記憶するためのレジスタをさらに備えるものであってもよく、または、データメモリをさらに備え、前記データアドレス範囲指示子は、前記第１の権限状態に関連付けられるデータを記憶するために割り当てられる前記データメモリ内の１つまたは複数の第１のメモリ領域を規定し、前記データアドレス範囲指示子は、前記第２の権限状態に関連付けられるデータを記憶するために割り当てられる前記データメモリ内の１つまたは複数の第２のメモリ領域を規定するものであってもよい。あるいは、前記第３のモジュールは、前記現在の権限状態が、前記データ・アクセス・アドレスに対応する前記メモリロケーションに対するアクセスが許可されない権限状態である場合、フォールトを生成するとともに、前記メモリロケーションに対するアクセスを禁止することもある。
【００１４】
第２の実施形態では、処理方法において、第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第１のメモリ領域を規定し、および第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第２のメモリ領域を規定する少なくとも１つの命令アドレス範囲指示子を記憶するステップと、メモリからフェッチされた命令のアドレスに基づいて、現在の権限状態を前記第１の権限状態または前記第２の権限状態として定義するステップと、次の命令フェッチアドレスを前記少なくとも１つの命令アドレス範囲指示子と比較することによって、前記次の命令フェッチアドレスが、前記現在の権限状態に関連付けられるメモリ領域内のロケーションに対応するか、または異なる権限状態に関連付けられるメモリ領域内のロケーションに対応するかを判定するステップと、前記次の命令フェッチアドレスが前記現在の権限状態に関連付けられる前記メモリ領域内のロケーションに対応しない場合、前記次のコンピュータ命令に、前記現在の権限状態から前記異なる権限状態への遷移が適正である場合にのみ、フェッチされることを許可するステップとを備える、処理方法を要旨とする。
【００１５】
第２の実施形態において、前記第１の権限状態は相対的に高い権限レベルを有する管理者状態であり、前記第２の権限状態は相対的に低い権限レベルを有するユーザ状態であることもある。
【００１６】
第２の実施形態において、前記現在の権限状態から前記異なる権限状態への前記遷移が適正でない場合には、フォールトを生成するとともに、前記次のコンピュータ命令がフェッチされることを不許可とするステップをさらに備えるものであってもよい。
【００１７】
第２の実施形態において、前記第１の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第３のメモリ領域を規定し、前記第２の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第４のメモリ領域を規定する少なくとも１つのデータアドレス範囲指示子を記憶するステップをさらに備えることもできる。この場合、データ・アクセス・アドレスがコンピュータ命令によって生成されると判定するステップと、前記データアクセスが発生すると、該データ・アクセス・アドレスを前記少なくとも１つのデータアドレス範囲指示子と比較することによって、該データ・アクセス・アドレスが前記第１の権限状態に関連付けられるメモリロケーションに対するものであるか、または、前記第２の権限状態に関連付けられるメモリロケーションに対するものであるかを判定するステップと、前記現在の権限状態が、前記データ・アクセス・アドレスに対応するメモリロケーションに対するアクセスが許可される権限状態である場合、前記メモリロケーションに対するアクセスを許可するステップとをさらに備えることもある。さらにここで、前記現在の権限状態が、前記データ・アクセス・アドレスに対応する前記メモリロケーションに対するアクセスが許可されない権限状態である場合、フォールトを生成するとともに、前記メモリロケーションに対するアクセスを禁止するステップをさらに備えることもできる。
【００１８】
第３の実施形態は、処理方法において、現在の権限状態を管理者状態またはユーザ状態として定義するステップと、次の命令フェッチアドレスを命令アドレス範囲指示子と比較することによって、該次の命令フェッチアドレスが、前記現在の権限状態に関連付けられるメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられるメモリ領域内のロケーションに対応するかを判定することであって、前記命令アドレス範囲指示子は、管理者コードを記憶するために割り当てられる管理者コードメモリ領域、およびユーザコードを記憶するために割り当てられるユーザコードメモリ領域を規定する、判定するステップと、前記次の命令フェッチアドレスが前記現在の権限状態に関連付けられる前記メモリ領域内のロケーションに対応しない場合、前記次のコンピュータ命令に、前記現在の権限状態から前記異なる権限状態への遷移が適正である場合にのみ、フェッチされることを許可するステップとを備えることを要旨とする。
【００１９】
第３の実施形態において、前記現在の権限状態が前記管理者状態であり、かつ前記異なる権限状態が前記ユーザ状態である場合は、前記管理者状態から前記ユーザ状態への前記遷移は、命令セット内の命令が実行される場合に適正であり、前記命令セットは割り込み命令からの復帰を含むことができる。
【００２０】
第３の実施形態において、前記現在の権限状態が前記ユーザ状態であり、かつ前記異なる権限状態が前記管理者状態である場合は、前記ユーザ状態から前記管理者状態への前記遷移は、命令セット内の命令が実行される場合であって、該命令セットはソフトウェア割り込み命令およびトラップ命令を含む、場合、または、例外条件が検出される場合に適正であることもある。
【００２１】
第３の実施形態データ・アクセス・アドレスがコンピュータ命令によって生成されると判定するステップと、前記データアクセスが発生する場合、該データ・アクセス・アドレスをデータアドレス範囲指示子と比較することによって、該データ・アクセス・アドレスが前記管理者状態に関連付けられるメモリロケーションに対するものであるか、または前記ユーザ状態に関連付けられるメモリロケーションに対するものであるかを判定するステップであって、前記データアドレス範囲指示子は、前記管理者状態に関連付けられるデータを記憶するために割り当てられる第３のメモリ領域を規定し、前記ユーザ状態に関連付けられるデータを記憶するために割り当てられる第４のメモリ領域を規定する、判定するステップと、前記現在の権限状態が前記管理者状態である場合、前記メモリロケーションに対するアクセスを許可するステップと、前記現在の権限状態が前記ユーザ状態である場合、前記データ・アクセス・アドレスが前記第４のメモリ領域内のメモリロケーションに対するものであるときにのみ前記メモリロケーションに対するアクセスを許可するステップとをさらに備えるものであってもよい。
【図面の簡単な説明】
【００２２】
【図１】例示的な実施形態による処理システムの簡略化されたブロック図。
【図２】例示的な実施形態による、区分化されたコードおよびデータメモリの簡略化された例を示す図。
【図３】例示的な実施形態による、資源および実行保護を実施するシステムを動作させるための方法の流れ図。
【図４】例示的な実施形態による、管理者状態およびユーザ状態ならびにそれらの間の遷移を示す簡略化された状態図。
【発明を実施するための形態】
【００２３】
本明細書に記載の実施形態は、処理システム内に実装されることができる資源および実行保護の方法および装置を含む。基本的に、実施形態は、資源および実行保護が、ハードウェアに関して低コストで実装されることを可能にする。たとえば、資源および実行保護は、さまざまな権限レベルを有するコードによってアクセスされ得る資源の指示を記憶するのに使用されるレジスタのセットとともに、プロセッサ内に実装される相対的に単純なロジックを使用するシステム内で実施され得る。ここで、資源および実行保護の実施形態が組み込まれている処理システムの例を説明する。後に説明されるように、図１の例示的なシステムは限定を意図するものではなく、実施形態は、大きく異なるアーキテクチャにおいても同様に実装され得る。
【００２４】
図１は、例示的な実施形態による処理システム１００の簡略化されたブロック図である。最低でも、システム１００は、１つまたは複数のプロセッサコア１１０と、メモリ資源（たとえば、不揮発性フラッシュメモリ１６０および揮発性ランダム・アクセス・メモリ（ＲＡＭ）１６４）と、資源および実行保護に関連する情報が記憶され得る「保護」レジスタのセット１３０（または他のデータ記憶構造）とを含む。加えて、システム１００は、１つまたは複数の周辺モジュール１４０、１４２を含み得る。たとえば、より具体的な実施形態によれば、保護レジスタのセット１３０は、コア１１０がシステムバス１５０を通してアクセス可能である周辺モジュール１４０の一部として実装される。加えて、または代替的に、直接シグナリング接続１５２がコア１１０と周辺モジュール１４０との間に（たとえば、コア１１０と保護レジスタ１３０との間で値の交換を容易にするために）存在し得る。他の実施形態では、保護レジスタ１３０のうちの１つまたは複数は他の場所に（たとえば、コア１１０内または何らかの他のロケーション）に位置し得る。後により詳細に説明されるように、保護レジスタ１３０は、システム１００によって実行される資源および実行保護メカニズムの実施形態を実装するのに使用される。
【００２５】
フラッシュメモリ１６０およびＲＡＭ１６４は、コア１１０にとっても、それぞれフラッシュコントローラ１６２およびＲＡＭコントローラ１６６を介して、システムバス１５０を通してアクセス可能である。システム１００は、同様に、１つまたは複数の他のプロセッサコアと、バスと、周辺モジュールと、コードおよびデータ記憶構造と、入出力（Ｉ／Ｏ）と、他の構成要素とを含み得る。さまざまな実施形態において、システム１００は、単一の集積回路上に（たとえば、システム・オン・チップとして）、または複数の集積回路上に（たとえば、システム・イン・パッケージ、もしくは複数の別個にパッケージされた集積回路を備えるシステムとして）実装され得る。
【００２６】
一実施形態では、コア１１０は、アドレス生成ユニット１１２と、プログラム制御ユニット１１４と、データ算術演算ユニット１１６と、命令フェッチアドレスレジスタ（ＩＦＡＲ）１１７と、プログラムカウンタ（ＰＣ）レジスタ１１８と、スタックポインタ（ＳＰ）レジスタ１２０と、さまざまなモジュール１２２、１２４、１２６、１２８とを含む。他の実施形態では、コア１１０は追加のまたは異なる構成要素を含み得る。ＩＦＡＲ１１７、ＰＣレジスタ１１８、ＳＰレジスタ１２０、およびモジュール１２２、１２４、１２６、１２８はアドレス生成ユニット１１２、プログラム制御ユニット１１４、およびデータ算術演算ユニット１１６とは明白に異なるものとして図示されているが、これは説明を簡便かつ明瞭にするために過ぎない。さまざまな実施形態において、ＩＦＡＲ１１７、ＰＣレジスタ１１８、ＳＰレジスタ１２０、および／またはモジュール１２２、１２４、１２６、１２８は、アドレス生成ユニット１１２、プログラム制御ユニット１１４、およびデータ算術演算ユニット１１６のうちの任意の１つまたは複数の中に組み込まれ得る。
【００２７】
基本的に、コア１１０は、コードをコンピュータ命令の形態でフェッチ、復号、および実行するように構成される。たとえば、限定ではないが、コア１１０は、コア１１０の外部にあるメモリ内に記憶されているコード（たとえば、フラッシュメモリ１６０内に記憶されているコード）をフェッチし得る。コード実行中、コア１１０は、システムバス１５０を通してメモリ（たとえば、ＲＡＭ１６４）およびさまざまな周辺機器（たとえば、周辺モジュール１４０、１４２および他の周辺モジュール（図示せず））にアクセスする（たとえば、読み出す／書き込む）とともに、さまざまな算術演算的、論理的、およびＩ／Ｏ動作を実行し得る。コア１１０によって実行されるほとんどの命令は、１つまたは複数のオペランドを指定する。加えて、いくつかの事例においては、命令は、メモリまたは他の場所（たとえば、フラッシュメモリ１６０、ＲＡＭ１６４、周辺モジュール１４０、１４２、または何らかの他のロケーション）内のアドレスを含むかまたは指定し得る。たとえば、命令は、フラッシュメモリ１６０内に、実行スレッドがジャンプすべき命令のロケーションを指示する、アドレスを含み得る。代替的に、命令は、ＲＡＭ１６４、周辺機器１４０、１４２、または、データ値がそこからフェッチされるべき、もしくは、データ値がそこに記憶されるべきである、何らかの他のロケーション内のアドレスを含むかまたは指定し得る。そのような命令の実行は、データアクセス事象（たとえば、読み出しまたは書き込み事象）を発生させると考えられる。
【００２８】
以下により詳細に記載されるように、また、さまざまな実施形態によれば、コア１１０は、モジュール１２２、１２４、１２６、１２８、および保護レジスタ１３０に記憶されている情報を使用して資源および実行保護メカニズムを実装するように構成される。基本的に、モジュール１２２、１２４、１２６、１２８は、以下に記載される命令が実行されることを可能にするハードウェア（たとえば、論理および他の回路）を含む。いくつかの実施態様では、以下に記載される命令を実行するのに使用される「モジュール」は、ハードウェアおよびソフトウェアの両方を使用して実装され得る。したがって、「モジュール」という用語は、ハードウェア（たとえば、論理ゲート構成および他の関連回路）のみ、およびハードウェアとソフトウェアとの組み合わせを使用して実装される実施形態を含むように意図される。加えて、モジュール１２２、１２４、１２６、１２８は、互いに、およびコア１１０の他の部分から明白に異なるように図示されているが、モジュール１２２、１２４、１２６、１２８のうちのいくつかまたはすべては、完全にまたは部分的に互いに、および／またはコア１１０の他の部分と一体化されてもよい。本明細書における記載に基づいて、モジュール１２２、１２４、１２６、１２８を実装する方法を当業者は理解することになり、それゆえ、モジュール１２２、１２４、１２６、１２８の特定の構成は本明細書においては詳細には説明されない。
【００２９】
本明細書に記載の資源および実行保護メカニズムの実施形態は、相対的に高い権限レベルを有するコードおよびデータの、相対的に低い権限レベルを有するコードおよびデータからのハードウェアによって執行される分離をサポートする。本明細書において使用される場合、「管理者権限レベル」という用語は、システム１００において実装される最高の権限レベルを指し、「ユーザ権限レベル」は、より低い権限レベルを指す。同様に、「管理者コード」という用語は、管理者権限レベルを有するように指定されるコード（たとえば、オペレーティング・システム・カーネル・コードおよび他の信頼性の高いコード）を指し、「ユーザコード」は、ユーザ権限レベルを有するように指定されるコード（たとえば、その実行がカーネルコードによって管理されるアプリケーションコード）を指す。本明細書において詳細に説明される実施形態は、２つのみの権限レベル（すなわち、管理者権限レベルおよびユーザ権限レベル）に言及しているが、他の実施形態は、３つ以上の権限レベルを有するコードのハードウェアによって執行される分離を実装してもよく、そのような実施形態は本発明の主題の範囲内に含まれるように意図される。資源および実行保護メカニズムの実施形態を詳細に説明する前に、まずコア１１０の基本動作を説明する。
【００３０】
コア１１０はパイプライン型アーキテクチャを有し得、命令実行は、連続するクロックサイクル中に実施される一連のステップとして実施される。たとえば、任意の特定の命令について、コア１１０は、命令をフェッチするステップ、命令を復号するステップ、命令を実行するステップ、（命令がフラッシュ１６０、ＲＡＭ１６４、または他の場所内のアドレスを指定する場合は）メモリアクセスを実施するステップを実施し得、いくつかの事例においては、レジスタは命令実行の結果を書き戻す。一実施形態では、コア１１０は、パイプライン型アーキテクチャの実装を容易にする２つの命令アドレスレジスタを含む。これらの命令アドレスレジスタは、ＩＦＡＲ１１７およびＰＣレジスタ１１８を含む。
【００３１】
ＩＦＡＲ１１７は、本明細書においては「命令フェッチアドレス」と称される、現在命令フェッチパイプラインの先頭にある命令のメモリアドレスを定義するのに使用される。ＩＦＡＲ１１７は、命令フローの「切れ目」（たとえば、メモリ内の連続的なアドレス内に記憶されている命令に対するアクセスを含まないが、代わりに、不連続のアドレス内に記憶されている命令に対するアクセスを含む命令フロー遷移）ごとに命令フェッチアドレスをロードされ得る。たとえば、命令フローの切れ目は、特定の命令（たとえば、ソフトウェア割り込み、トラップ命令など）の実行に応答して、または、例外条件の発生に応答して、とられる分岐命令に起因して発生し得る。命令フェッチアドレスをロードされると、対応する命令フェッチが開始される。より具体的には、命令フェッチはシステムバス１５０に進み、メモリ（たとえば、フラッシュメモリ１６０）内の目標とされる宛先に進む。続いて、宛先メモリはフェッチされた命令をコア１１０に戻して返す。このフェチサイクルおよび各後続のフェッチサイクルが完了すると、ＩＦＡＲ１１７内のアドレスは、別の命令フェッチの切れ目が発生しない限り、命令フェッチの幅（または「フェッチ幅」）だけインクリメントされる。命令フェッチの切れ目がない場合、命令フェッチパイプラインは続いて、アドレスの生成および適切な宛先メモリへのアクセスを継続する。フェッチの流れの方向を変える命令フェッチの切れ目が発生する場合、ＩＦＡＲ１１７は新たな不連続の命令フェッチアドレスを再ロードされ、目標とされる宛先メモリがアクセスされ、命令フェッチパイプラインはその連続的なアドレスの生成および宛先メモリアクセスのプロセスを再開する。
【００３２】
フェッチされた命令がコア１１０に返されると、命令は実行パイプライン内にロードされる。ＰＣレジスタ１１８は、本明細書においては「ＰＣアドレス」と称される、現在実行パイプラインの先頭に存在する命令のメモリアドレスを定義するのに使用される。命令が実行パイプラインを通じて進行し始めると、ＰＣレジスタ１１８内のＰＣアドレスが、（内部命令バッファ、またはシステムバス１５０上のフェッチサイクルのいずれかから）実行パイプラインの先頭に次の命令が到着すると同時に命令長に基づいてインクリメントされる。いくつかの事例においては、命令フェッチ幅（たとえば、命令フェッチバスの幅）と命令長は等しい場合があり（たとえば、両方とも２バイト、または何らかの他の長さ）、この場合、ＩＦＡＲ１１７およびＰＣレジスタ１１８内のアドレスは同じ値（すなわち、命令長）だけインクリメントされる。他の事例においては、命令フェッチ幅は命令長と異なってもよい（たとえば、命令長よりも広い）。たとえば、命令フェッチ幅は、命令長の二倍（たとえば、それぞれ４バイトおよび２バイト、または何らかの他の長さ）であり得、その場合、各命令フェッチの結果として同時に２つの命令がコア１１０内にフェッチされ得る。そのような実施形態では、命令フローの切れ目に遭遇するまで、ＩＦＡＲ１１７内のアドレスが命令フェッチ幅（たとえば、２ｘバイト）だけインクリメントされることになり、ＰＣレジスタ１１８内のアドレスがＩＦＡＲ１１７のインクリメントの割合の二倍である命令長（たとえば、ｘバイト）だけインクリメントされることになる。説明を容易にするために、下記の論述は、ＩＦＡＲ１１７内のアドレスに基づく「一つの命令」（“ａｎ  ｉｎｓｔｒｕｃｔｉｏｎ”）のフェッチに言及し得る。本明細書における記載に基づいて、複数の命令がＩＦＡＲ１１７内のアドレスに基づいてフェッチされるときに（たとえば、命令フェッチ幅が命令長よりも広いときに）本発明の主題の実施形態がどのように変更され得るかを、当業者は理解するであろう。
【００３３】
システム起動（たとえば、電源投入）時に、アドレス生成ユニット１１２は、第１の命令フェッチアドレス（たとえば、リセットベクトル）をＩＦＡＲ１１７内にロードする。第１の命令フェッチアドレスは、（たとえば、基本入出力システム（ＢＩＯＳ）およびカーネル初期化コードを含む）システムの初期化コードのメモリ内の（たとえば、フラッシュメモリ１６０内の）開始アドレスに対応する。次いで、コア１１０は、ＩＦＡＲ１１７において指定される命令フェッチアドレスに対応する１つまたは複数のメモリロケーション（たとえば、フラッシュメモリ１６０内）から（命令フェッチ幅に基づいて）１つまたは複数の第１の命令をフェッチする。ＰＣレジスタ１１８は第１のフェッチされた命令のアドレスを用いて初期化され、次いで、対応する、フェッチされた命令が実行パイプラインに入る。実行パイプライン内に入ると、プログラム制御ユニット１１４が命令を復号しその実行を制御する。各命令フェッチが開始されると、アドレス生成ユニット１１２は、ＩＦＡＲ１１７内の命令フェッチアドレスがインクリメントされるべきか否か、または、命令内でいつ命令フローの切れ目が指示されるかを決定し、アドレス生成ユニット１１２は次にフェッチされるべき命令に対応する命令フェッチアドレスを決定する。いずれにせよ、ＩＦＡＲ１１７内の命令フェッチアドレスがその決定にしたがって変更され得る。
【００３４】
上記のように、管理者コード（たとえば、カーネルコード）の実行に加えて、コア１１０は、管理者コードの権限レベルと比較したときに相対的に低い権限レベルを有するユーザコードをも実行し得る。さまざまな実施形態は、コア１１０の管理者コードとユーザコードとの実行間の順序正しい遷移を企図する。より詳細には、一実施形態において、コア１１０は、少なくとも「管理者状態」（たとえば、図４の管理者状態４１０）および「ユーザ状態」（たとえば、図４のユーザ状態４２０）を含む状態機械を実装する。図３および図４に関連して後により詳細に記載されるように、状態は、コア１１０が（たとえば、ＩＦＡＲ１１７内の命令フェッチアドレスに基づいて）メモリからフェッチされることを許可した最近の命令のアドレスに基づいて決定される。たとえば、コア１１０がフェッチされることを許可した最近の命令が、管理者コードに割り当てられるメモリの一部（たとえば、図２の管理者コードメモリ領域２１６）からのものであるとき、コア１１０は管理者状態にある。逆に、コア１１０がフェッチされることを許可した最近の命令が、ユーザコードに割り当てられるメモリの一部（たとえば、図２のユーザコードメモリ領域２１８）からのものであるとき、コア１１０はユーザ状態にある。一実施形態では、コア１１０が最近にフェッチされることを許可した命令の権限レベルが「現在の権限状態」を定義する。後により詳細に説明されるように、コア１１０は、現在の権限状態を決定し、その知識を維持するように構成されるモジュール（図１において状態モジュール１２２として描かれている）を含む。より詳細には、一実施形態では、コア１１０は、少なくとも１つの命令アドレス範囲指示子（たとえば、図１および図２のユーザ・コード・ベース・アドレス・レジスタ（ＢＡＲ）１３２、２１２内に記憶されている値、後述）を最近に許可された命令フェッチのアドレス（たとえば、ＩＦＡＲ１１７内の現在の命令フェッチアドレスに基づくアドレス）と比較することによって、現在の権限状態が管理者状態またはユーザ状態のいずれであるかを判定するように構成されるモジュール（たとえば、状態モジュール１２２）を含む。一実施形態では、状態モジュール１２２はプログラム制御ユニット１１４の一部を形成してもよい。他の実施形態では、この機能を実施するためのハードウェアは他の場所に位置してもよい。
【００３５】
一実施形態では、ＩＦＡＲ１１７内の値が更新されると、コア１１０は、現在の権限状態、次の命令がそこからフェッチされることになるアドレス（たとえば、ＩＦＡＲ１１７内の命令フェッチアドレスに基づくアドレス）、および保護レジスタ１３０内に記憶されている命令アドレス範囲指示子に基づいて次の命令がフェッチされるのを許可または不許可し得る。後により詳細に説明されるように、コア１１０は、命令のフェッチを許可とするか、または不許可とするかを決定するように構成されるモジュール（図１においてフェッチモジュール１２４として描かれている）を含む。より詳細には、一実施形態では、コア１１０は、次の命令フェッチアドレスを少なくとも１つの命令アドレス範囲指示子（たとえば、ユーザコードＢＡＲ１３２内に記憶されている値、後述）と比較することによって、フェッチされることになる次の命令のアドレス（たとえば、ＩＦＡＲ１１７内の命令フェッチアドレスに基づくアドレス）が、現在の権限状態に関連付けられる（たとえば、フラッシュメモリ１６０内の）メモリ領域内にあるか、または異なる権限状態に関連付けられるメモリ領域内にあるかを決定するように構成されるモジュール（たとえば、フェッチモジュール１２４）を含む。次の命令フェッチアドレスが現在の権限状態に関連付けられるメモリ領域内にない場合、コア１１０は、後に説明されるように、特定の条件下でのみ、次のコンピュータ命令がフェッチ、復号、および実行されることを許可するように構成される。一実施形態では、フェッチモジュール１２４はプログラム制御ユニット１１４の一部を形成してもよい。他の実施形態では、この機能を実施するためのハードウェアは他の場所に位置してもよい。命令のフェッチが許可されると仮定すると、プログラム制御ユニット１１４は、命令復号および実行のプロセスを制御する。たとえば、プログラム制御ユニット１１４の制御下で、データ算術演算ユニット１１６（またはコア１１０の他の部分）は、命令を実施（すなわち、実行）するのに必要であるさまざまな算術および論理演算のいずれかを実施し得る。
【００３６】
上記に記載したように、命令は、データ参照（たとえば、アドレス）を定義し得、これはシステム資源に（たとえば、ＲＡＭ１６４、周辺機器１４０、１４２内のロケーション、または他の場所に）アクセスを開始し得る。システム１００において実施される資源保護に関して、一実施形態では、コア１１０は、命令の権限レベル（または現在の権限状態もしくは命令がそこからフェッチされたアドレス）、および保護レジスタ１３０内に記憶されているデータアドレス範囲指示子に基づいて資源へのアクセスを許可または拒否し得る。後により詳細に説明されるように、コア１１０は、特定のシステム資源へのアクセスを許可または拒否するか否かを決定するように構成されるモジュール（図１においてアクセスモジュール１２６として描かれている）を含む。より具体的には、一実施形態において、コア１１０は、命令を実行するときにデータ・アクセス・アドレス（たとえば、ＲＡＭ１６４を参照するアドレス）が生成されるかを判定するとともに、データ・アクセス・アドレスを少なくとも１つのデータアドレス範囲指示子（たとえば、図１および図２のユーザデータＢＡＲ１３３、２２２内に記憶されている値、後述）と比較することによって、データ・アクセス・アドレスが管理者状態と関連付けられるか、またはユーザ状態と関連付けられるかを判定するように構成されるモジュール（たとえば、アクセスモジュール１２６）を含む。現在の権限状態が、メモリロケーション（たとえば、ＲＡＭ１６４内のロケーション）に対するアクセスが許可される権限状態である場合、コア１１０は、データ・アクセス・アドレスに対応するメモリロケーションに対するアクセスを許可するように構成される。一実施形態では、アクセスモジュール１２６はプログラム制御ユニット１１４の一部を形成してもよい。他の実施形態では、この機能を実施するためのハードウェアは他の場所に位置してもよい。
【００３７】
以前に示されたように、保護レジスタ１３０内の情報は、資源および実行保護機能を提供するのに関連してコア１１０によってアクセスされ得る。中でも、システム初期化コードは、実行されると、保護レジスタ１３０内のさまざまな設定または値を確立する命令を含み得る。たとえば、保護レジスタ１３０は、制御レジスタ１３１と、ユーザコードＢＡＲ１３２と、ユーザデータＢＡＲ１３３と、ユーザ周辺ＢＡＲ１３４と、代替ＳＰレジスタ１３５と、不正ＰＣレジスタ１３６と、フォールトＰＣレジスタ１３７とを含み得る。
【００３８】
ここで、制御レジスタ１３１を簡潔に説明し、一方で他のレジスタ１３２〜１３７の各々の説明は下記に適切な節において記載する。一実施形態では、制御レジスタ１３１は、１つまたは複数のレジスタ・ロック・フラグおよびイネーブルフラグを含む。単一のレジスタ・ロック・フラグが含まれる場合、レジスタ・ロック・フラグは、クリアされると、（コアが適切な権限レベルを有すると仮定すると）保護レジスタ１３０内の値がコア１１０上で実行しているコードによって変更され得ることをコア１１０に指示する。逆に、レジスタ・ロック・フラグがセットされる場合、保護レジスタ１３０内の値は、改変されない場合がある（たとえば、周辺モジュール１４０または保護レジスタ１３０は、保護レジスタ１３０内の値を改変することをいかなるコードにも許可しない）。代替の実施形態では、制御レジスタ１３１は、保護レジスタ１３０に対するより精細な粒度のアクセスを提供するために複数のレジスタ・ロック・フラグを含んでもよい（たとえば、複数のレジスタ・ロック・フラグの各々が保護レジスタ１３０のうちの１つまたは複数から成る群に対するアクセスを制御するために使用され得る）。イネーブルフラグは、セットされると、システムの資源および実行保護メカニズムがイネーブルされること、およびコア１１０がこれらのメカニズムを実装すべきであることを指示する。イネーブルフラグがクリアされると、コア１１０は、資源および実行保護メカニズムに関連付けられる動作をディセーブルする。別の実施形態では、コアは、資源および実行保護メカニズムに関連付けられる動作を選択的にバイパスしてもよい。
【００３９】
一実施形態では、システム始動またはリセット時に、コア１１０は、資源および実行保護イネーブル信号が（たとえば、イネーブル入力を介して）システムに提供されたか否かを判定する。そうである場合、コア１１０は、初期化コードがイネーブルフラグをセットすることを許可する。加えて、レジスタ・ロック・フラグが（または複数のレジスタ・ロック・フラグが）システムリセット時にクリアされ、それによって、初期化コードは続いてレジスタ１３２〜１３７内のさまざまな値を確立し得る。それらの値がレジスタ１３２〜１３７内に確立されると、初期化コードはレジスタ・ロック・フラグ（複数の場合もあり）をセットし得、それによって、他のコードはセットされたフラグ（複数の場合もあり）に対応するレジスタ１３２〜１３７内の値を変更することができない。本明細書における記載は、保護レジスタ１３０（特にレジスタ１３２〜１３４）内の値が、システム１００の通常動作中（たとえば、システム初期化後）に変更されないと仮定している。他の実施形態では、保護レジスタ１３２〜１３４のうちのいくつかまたはすべての中の値が、同様に（たとえば、特定の状況下および／またはさまざまな時点において）システム初期化後に再ロードまたは変更されてもよい。たとえば、保護レジスタ１３２〜１３４内の値は、管理者またはユーザコードによってアクセス可能な資源の量を増大および／または低減するように変更されてもよい。別の例として、特定の保護レジスタ１３２〜１３４内の値は、ユーザプロセス（たとえば、タスク）が実行を開始するたびごとにロード（または再ロード）されてもよい。保護レジスタ１３２〜１３４内の値は、同様に他の時点において変更されてもよい。そのような実施形態は本明細書においては詳細に説明されていないが、それらも本発明の主題の範囲内に含まれることが意図されている。
【００４０】
後により詳細に説明されるように、レジスタ１３２〜１３４は、さまざまな資源（たとえば、フラッシュメモリ１６０、ＲＡＭ１６４、周辺機器など）の、管理者状態に関連付けられる部分、および資源の、ユーザ状態に関連付けられる部分を定義するのに使用される。一実施形態では、保護レジスタ１３０は、管理者コード（たとえば、カーネルコード）によってのみアクセスされ得、周辺モジュール１４０は、管理者レベルの資源であるとみなされる。
【００４１】
保護レジスタ１３０のうちの少なくともいくつかの中の値を確立することに加えて、初期化コードは、管理者コードが使用するためのスタック（本明細書において「管理者スタック」と称される（たとえば、図２の管理者スタック２２７））をも確立し得る。たとえば、管理者スタックは、「管理者スタックポインタ」をＳＰレジスタ１２０内にロードすることによって確立され得る。最初に、管理者スタックポインタは、管理者スタックの原点のメモリ内の（たとえば、ＲＡＭ１６４内の）アドレス（すなわち、管理者スタックのベースアドレス）を指定し得る。管理者コードの実行中、管理者スタックポインタはコア１１０によって維持される。より具体的には、管理者コードがデータを管理者スタック上にプッシュし、データを管理者スタックから出すとき、ＳＰレジスタ１２０内の管理者スタックポインタは、それにしたがってインクリメントおよびデクリメントされる。他の実施形態では、コア１１０は、異なる様式で動作するハードウェアスタックを使用してもよい。いずれにせよ、ＳＰレジスタ１２０内の管理者スタックポインタは、管理者スタック内の最上部の要素を指すべきである。
【００４２】
コア１１０も、（たとえば、ＲＡＭ１６４内で）ユーザコードが使用するための少なくとも１つの他のスタックを確立し得る。そのようなスタックは本明細書においては「ユーザスタック」（たとえば、図２のユーザスタック２２９）と称され、コア１１０がユーザコードを実行している間に、コア１１０はユーザスタックのためのスタックポインタ（本明細書においては「ユーザスタックポインタ」と称される）をも維持する。説明を容易にするために、単一のユーザスタックが本明細書において説明されるが、他の実施形態は複数のユーザスタックを実装してもよい。
【００４３】
コア１１０は管理者コードおよびユーザコードの実行の間で遷移することができるため、また、管理者コードとユーザコードの両方に関連付けられるスタック（および管理者コードとユーザコードの両方に関連付けられるスタックポインタ）が存在するため、さまざまな実施形態は、管理者状態とユーザ状態との間の遷移の間に管理者スタックポインタおよびユーザスタックポインタをスワッピングするためのメカニズムを含む。一実施形態では、システム１００は、「代替」ＳＰレジスタ１３５を含み、これは、コア１１０が異なる状態にある間に管理者スタックポインタまたはユーザスタックポインタのいずれかを記憶するのに使用され得る。換言すれば、コア１１０が管理者状態にある間は、管理者スタックポインタはコアのＳＰレジスタ１２０内に維持され、ユーザスタックポインタは代替ＳＰレジスタ１３５内に保持される。コア１１０が管理者状態からユーザ状態に遷移すると、ＳＰレジスタ１２０内の管理者スタックポインタの値が、代替ＳＰレジスタ１３５内のユーザスタックポインタの値とスワッピングされる。コア１１０がユーザ状態にある間は、ユーザスタックポインタはコアのＳＰレジスタ１２０内に維持され、管理者スタックポインタは代替ＳＰレジスタ１３５内に保持される。コア１１０がユーザ状態から管理者状態に戻って遷移すると、ＳＰレジスタ１２０内のユーザスタックポインタの値が、代替ＳＰレジスタ１３５内の管理者スタックポインタの値とスワッピングされる。換言すれば、任意の所与の時点において、ＳＰレジスタ１２０内に記憶されているスタックポインタは、いずれのスタックが現在の権限状態に関連付けられているかに対応する。
【００４４】
一実施形態では、コア１１０は、管理者状態とユーザ状態との間の遷移の間にＳＰレジスタ１２０および代替ＳＰレジスタ１３５内に記憶されているスタックポインタをスワッピングするように構成されるモジュール（図１にＳＰスワップモジュール１２８として描かれている）を含む。より詳細には、一実施形態では、コア１１０は、現在の権限状態と異なる権限状態との間で遷移が実施されると、ＳＰレジスタ１２０からのスタックポインタを代替ＳＰレジスタ１３５内へ移動し、同時に、代替ＳＰレジスタ１３５からのスタックポインタをＳＰレジスタ１２０内へ移動するように構成されるモジュール（たとえば、ＳＰスワップモジュール１２８）を含む。一実施形態によれば、ＳＰレジスタ１２０および代替ＳＰレジスタ１３５内のスタックポインタは、たとえば、直接シグナリング接続１５２を介して交換（または「スワッピング」）されてもよい。スワップモジュール１２８は、一実施形態では、プログラム制御ユニット１１４の一部を形成してもよい。他の実施形態では、この機能を実施するためのハードウェアは他の場所に位置してもよい。
【００４５】
一実施形態では、実行保護を実装するために、命令がその中に記憶されるメモリ（たとえば、フラッシュメモリ１６０またはコードメモリ２１０）は複数の領域に分割され、ここで、各領域は１つの権限レベルに対応する（たとえば、１つまたは複数の領域は管理者権限レベルに対応し、１つまたは複数の異なる領域はユーザ権限レベルに対応する）。それに対応して、コア１１０は、メモリ内の命令が記憶される（すなわち、命令が記憶される領域内の）アドレスに基づいて各命令に対する権限レベルを決定し得る。
【００４６】
コードメモリ領域（１つまたは複数のパーティションによって分離される）は、一実施形態では、少なくとも１つの「命令アドレス範囲指示子」を使用して画定される。アドレス範囲指示子（複数の場合もあり）は、管理者状態に関連付けられるコンピュータ命令（「管理者コード」）を記憶するのに割り当てられる１つまたは複数の第１のメモリ領域を画定し、ユーザ状態に関連付けられるコンピュータ命令（「ユーザコード」）を記憶するのに割り当てられる１つまたは複数の第２のメモリ領域を画定する。より具体的な実施形態では、命令アドレス範囲指示子は、管理者コードに関連付けられるメモリの第１の領域と、ユーザコードに関連付けられるメモリの第２の領域との間の（たとえば、フラッシュメモリ１６０またはコードメモリ２１０内の）境界を画定するアドレスを含む。命令アドレス範囲指示子未満の（または、代替の実施形態ではそれ以下の）アドレス内に記憶される任意の命令は管理者コードに対応し、命令アドレス範囲指示子以上の（または、別の実施形態ではそれを上回る）アドレス内に記憶される任意の命令はユーザコードに対応する。代替の実施形態では、逆のことが当てはまり得る。いずれにせよ、一実施形態において、フェッチモジュール１２４（または他の回路）は、次の命令フェッチアドレス（たとえば、ＩＦＡＲ１１７内の値に基づくアドレス）が管理者コードに割り当てられるメモリ領域内の１つの中に入る場合は、次の命令フェッチアドレスが管理者状態に関連付けられるメモリ領域（たとえば、フラッシュメモリ１６０またはコードメモリ２１０内の領域）内にあること、または、次の命令フェッチアドレスがユーザコードに割り当てられるメモリ領域のうちの１つの中に入る場合は、次の命令フェッチアドレスがユーザ状態に関連付けられることを判定するように構成される。
【００４７】
命令アドレス範囲指示子は、一実施形態では、ユーザコードをコードメモリ内に（たとえば、フラッシュメモリ１６０またはコードメモリ２１０内に）記憶するためのベースアドレスを指定する。代替的には、命令アドレス範囲指示子は、管理者コードをコードメモリ内に記憶するための最高のアドレス（上方境界）を指定してもよい。いずれにせよ、命令アドレス範囲指示子は、メモリ内で、管理者コード領域とユーザコード領域との間の境界を画定する。下記の記載は、命令アドレス範囲指示子が、ユーザコードをコードメモリ内に（たとえば、フラッシュメモリ１６０またはコードメモリ２１０内に）記憶するためのベースアドレスを指定するアドレスを含む一実施形態を説明するものであり、このアドレスは本明細書においては「ユーザ・コード・ベース・アドレス」と称される。一実施形態では、ユーザ・コード・ベース・アドレスは、システムの初期化コードの実行中にユーザコードＢＡＲ１３２内に確立（記憶）される。メモリの複数の不連続の領域が管理者コードおよび／またはユーザコードに割り当てられる実施形態では、複数の命令アドレス範囲指示子がシステム１００内に（たとえば、複数のレジスタ内に）記憶され得る。そのような実施形態は本発明の主題の範囲内に含まれることが意図されているが、本明細書においては詳細に説明されていない。
【００４８】
一実施形態では、資源保護を実装するために、コア１１０によってアクセスされ得る資源（たとえば、ＲＡＭ１６４、周辺機器１４０、１４２など）は複数のグループに分割され、各グループは１つの権限レベルに対応する（たとえば、１つまたは複数のグループは管理者権限レベルに対応し、１つまたは複数のグループはユーザ権限レベルに対応する）。それに対応して、コア１１０（またはより具体的にはアクセスモジュール１２６）は、権限レベルに関連付けられる命令が、その命令と同じ権限レベルを有する資源に対するアクセスを試みている（たとえば、データ参照を生成している）か、または異なる権限レベルを有する資源に対するアクセスを試みているかを判定し得る。
【００４９】
メモリタイプの資源（たとえば、ＲＡＭ１６４またはデータメモリ２２０）は、一実施形態では、１つまたは複数の管理者データ領域および１つまたは複数のユーザデータ領域に分割され得、それらの領域は少なくとも１つの「データアドレス範囲指示子」を使用して画定される。データアドレス範囲指示子（複数の場合もあり）は、管理者状態に関連付けられるデータ（「管理者データ」）を記憶するのに割り当てられる１つまたは複数の第１のメモリ領域を画定し、ユーザ状態に関連付けられるデータ（「ユーザデータ」）を記憶するのに割り当てられる１つまたは複数の第２のメモリ領域を画定する。より具体的な実施形態では、データアドレス範囲指示子は、管理者データに関連付けられるメモリの第１の領域と、ユーザデータに関連付けられるメモリの第２の領域との間の（たとえば、ＲＡＭ１６４またはデータメモリ２２０内の）境界を画定するアドレスを含む。コア１１０は、管理者コードには、いずれかのメモリ領域内に記憶されている任意のデータ（たとえば、管理者データとユーザデータの両方）にアクセスすることを許可し得るが、コア１１０は、ユーザコードには、データアドレス範囲指示子以上の（または、別の実施形態ではそれを上回る）アドレス内に記憶されているデータのみ（たとえば、ユーザデータのみ）に対するアクセスを許可し得る。代替の実施形態では、コア１１０は、ユーザコードに、データアドレス範囲指示子未満の（または、別の実施形態では、それ以下の）アドレス内に記憶されているデータのみにアクセスすることを許可し得る。いずれにせよ、一実施形態において、アクセスモジュール１２６（または他の回路）は、データ・アクセス・アドレスが管理者データに割り当てられるメモリ領域のうちの１つの中に入る場合には、データ・アクセス・アドレスが管理者状態に関連付けられることを、データ・アクセス・アドレスがユーザデータに割り当てられるメモリ領域のうちの１つの中に入る場合には、データ・アクセス・アドレスがユーザ状態に関連付けられることを判定するように構成される。
【００５０】
データアドレス範囲指示子は、一実施形態では、ユーザデータをメモリ資源内に（たとえば、ＲＡＭ１６４またはデータメモリ２２０内に）記憶するためのベースアドレスを指定する。代替的には、データアドレス範囲指示子は、管理者データをメモリ資源内に記憶するための最高のアドレス（上方境界）を指定してもよい。いずれにせよ、データアドレス範囲指示子は、メモリ内で、管理者データ空間とユーザデータ空間との間の境界を画定する。下記の記載は、データアドレス範囲指示子が、ユーザデータをメモリ資源内に（たとえば、ＲＡＭ１６４内に）記憶するためのベースアドレスを指定するアドレスを含む一実施形態を説明するものであり、このアドレスは本明細書においては「ユーザ・データ・ベース・アドレス」と称される。一実施形態では、ユーザ・データ・ベース・アドレスは、システムの初期化コードの実行中にユーザデータＢＡＲ１３３内に確立（記憶）される。メモリの複数の不連続の領域が管理者データおよび／またはユーザデータに割り当てられる実施形態では、複数のデータアドレス範囲指示子がシステム１００内に（たとえば、複数のレジスタ内に）記憶され得る。そのような実施形態は本発明の主題の範囲内に含まれることが意図されているが、本明細書においては詳細に説明されていない。
【００５１】
一実施形態では、周辺資源（たとえば、周辺モジュール１４０、１４２、および他の周辺機器（図示せず））は、１つまたは複数の管理者周辺グループおよび１つまたは複数のユーザ周辺グループに分割され得、グループは、少なくとも１つの「周辺アドレス範囲指示子」を使用して画定される。より具体的な実施形態では、周辺アドレス範囲指示子は、管理者コードにアクセス可能な第１のセットの周辺機器（たとえば、周辺モジュール１４０はその一部である）と、管理者コードとユーザコードの両方にアクセス可能な第２のセットの周辺機器との間の境界を画定するアドレスを含む。コア１１０は、管理者コードには、いずれの周辺機器に対するアクセスも許可し得る（たとえば、管理者コードにアクセス可能な周辺機器に対する制約はない）が、コア１１０は、ユーザコードには、周辺アドレス範囲指示子以上の（または、別の実施形態では、それを上回る）アドレスを有する周辺機器のみに対するアクセスを許可し得る。代替の実施形態では、コア１１０は、ユーザコードに、周辺アドレス範囲指示子未満の（または、別の実施形態では、それ以下の）アドレスを有する周辺機器のみにアクセスすることを許可し得る。
【００５２】
周辺アドレス範囲指示子は、一実施形態では、ユーザコードがアクセスし得る周辺機器の最小のアドレスを指定する。代替的には、周辺アドレス範囲指示子は、管理者コードのみがアクセスし得る周辺機器の最大のアドレスを指定してもよい。代替的には、複数の周辺アドレス範囲指示子が、ユーザコード、管理者コード、またはその両方にとってアクセス可能であり得る複数のグループの周辺機器のアドレスを識別するために使用されてもよい。いずれにせよ、周辺アドレス範囲指示子は、管理者コードのみにとってアクセス可能である周辺機器のグループ、および、管理者コードとユーザコードの両方にとってアクセス可能である周辺機器のグループを画定する。下記の記載は、周辺アドレス範囲指示子が、特定の周辺機器のアドレスを指定するアドレスを含む一実施形態を説明するものであり、このアドレスは本明細書においては「ユーザ周辺ベースアドレス」と称される。一実施形態では、ユーザ周辺ベースアドレスは、システムの初期化コードの実行中にユーザ周辺ＢＡＲ１３４内に確立（記憶）される。
【００５３】
保護レジスタ１３０を使用した資源分割の概念をより十分に伝えるために、図２が提供され、これは、例示的な実施形態による、分割されたコードメモリ２１０（たとえば、フラッシュメモリ１６０）および分割されたデータメモリ２２０（たとえば、ＲＡＭ１６４）の簡略された例である。図２は、ユーザコードＢＡＲ２１２（たとえば、ユーザコードＢＡＲ１３２）およびユーザデータＢＡＲ２２２（たとえば、ユーザデータＢＡＲ１３３）をも示す。管理者状態およびユーザ状態に関連付けられる周辺機器のグループへの分割は図２には描かれていないが、周辺機器の分割は本明細書の他の場所の記載によって理解されるべきである。
【００５４】
一実施形態では、実行保護に関連して、命令アドレス範囲指示子がユーザコードＢＡＲ２１２内に（たとえば、システム初期化中または他の時点において）記憶され、命令アドレス範囲指示子は、管理者コードを記憶するために割り当てられる第１のメモリ領域２１６（「管理者コードメモリ領域」）と、ユーザコードを記憶するために割り当てられる第２のメモリ領域２１８（「ユーザコードメモリ領域」）との間のパーティション２１４を画定する。システム動作中、コア（たとえば、コア１１０）は、フェッチされることになる各次の命令のアドレス（たとえば、ＩＦＡＲ１１７内の値に基づくアドレス）を、命令アドレス範囲指示子と比較する。比較が、フェッチされることになる次の命令のアドレスが第１のメモリ領域２１６内に入ることを示す場合、コアは、フェッチされることになる次の命令が管理者コードであると判定する。逆に、比較が、フェッチされることになる次の命令のアドレスが第２のメモリ領域２１８内に入ることを示す場合、コアは、フェッチされることになる次の命令がユーザコードであると判定する。
【００５５】
コアは、次いで、次の命令がフェッチされることを許可すべきか否か、および／または、フェッチによって必要とされ得る状態変化が許可されるかを判定し得る。以前に言及したように、次の命令フェッチアドレス（たとえば、ＩＦＡＲ１１７内の値に基づくアドレス）が現在の権限状態に関連付けられるメモリ領域内にない場合、コアは、現在の権限状態から異なる権限状態への遷移が許可される場合にのみ、状態変化が発生し次のコンピュータ命令がフェッチされることを許可するように構成され得る。より具体的には、一実施形態では、ユーザ状態と管理者状態との間の状態変化は、特定の条件下でのみ許可され得る。
【００５６】
一実施形態では、現在の権限状態が管理者状態であり、かつ、次の命令フェッチアドレスがユーザコードメモリ領域２１８内にある場合、コアは、「管理者−ユーザ状態適正遷移事象」のみに応答して、管理者状態からユーザ状態への「通常」遷移を許可し得る（また、次の命令がフェッチされることを許可し得る）。たとえば、管理者−ユーザ状態適正遷移事象は、次の命令フェッチアドレス（たとえば、ＩＦＡＲ１１７内の値に基づくアドレス）が更新されるようにした、コアの第１のセットの命令の実行（たとえば、割り込み命令からの復帰を含む）を含み得る。逆に、次の命令フェッチアドレスが管理者−ユーザ状態適正遷移事象以外の何か（たとえば、コアの第１のセットの命令にない命令の実行）に応答して更新された場合、コアは状態変化を不許可とし（また、次の命令がフェッチされることを不許可とし）得る。
【００５７】
さらなる実施形態によれば、現在の権限状態がユーザ状態であり、かつ、次の命令フェッチアドレスが管理者コードメモリ領域２１６内にある場合、コアは、「ユーザ−管理者状態適正遷移事象」のみに応答して、ユーザ状態から管理者状態への「通常」遷移を許可し得る（また、次の命令がフェッチされることを許可し得る）。たとえば、ユーザ−管理者状態適正遷移事象は、１）次の命令フェッチアドレスが更新されるようにした、コアの第２のセットの命令の実行（たとえば、ソフトウェア割り込み命令、トラップ命令など）、および／または、２）コアに、その現在の実行スレッドを（少なくとも一時的に）中断させ、制御を管理者コードに（たとえば、例外条件をハンドリングするように構成されるカーネルの割り込み処理ルーチンに）渡し戻す例外条件の検出を含み得る。たとえば、例外条件は、Ｉ／Ｏ割り込み信号のアサート、または何らかの他の事象を含み得る。ユーザ状態から管理者状態への「通常」遷移に加えて、コアは、ユーザ状態から管理者状態への（たとえば、図３のブロック３１３、３２２に関連して後述するような誤りまたはフォールト状態の検出に応答して）「フォールトに基づく」遷移をも実施し得る。
【００５８】
資源保護に関連して、一実施形態では、データアドレス範囲指示子がユーザデータＢＡＲ２２２内に（たとえば、システム初期化中または他の時点において）記憶され、データアドレス範囲指示子は、管理者データを記憶するために割り当てられる第１のメモリ領域２２６（「管理者データメモリ領域」）と、ユーザデータを記憶するために割り当てられる第２のメモリ領域２２８（「ユーザデータメモリ領域」）との間のパーティション２２４を画定する。システム動作中、コア（たとえば、コア１１０）は、各要求されたデータアクセスのアドレスを、データアドレス範囲指示子と比較する。比較が、アクセスされることになるデータのアドレスが第１のメモリ領域２２６内に入ることを示す場合、コアは、アクセスされることになるデータが管理者データであると判定する。逆に、比較が、アクセスされることになるデータのアドレスが第２のメモリ領域２２８内に入ることを示す場合、コアは、アクセスされることになるデータがユーザデータであると判定する。
【００５９】
コアは、次いで、データアクセスを許可すべきか、または拒否すべきかを判定し得る。以前に言及されたように、管理者コードは、いずれのタイプのメモリ領域内に記憶されたいずれのデータ（たとえば、メモリ領域２２６、２２８内に記憶された管理者データとユーザデータの両方）にアクセスし得るが、ユーザコードは、ユーザデータメモリ領域のみに記憶されたデータにのみ（たとえば、メモリ領域２２８内に記憶されたユーザデータにのみ）アクセスし得る。したがって、現在の権限状態が管理者状態である場合、コアは、いずれの要求されたデータアクセスが実施されることも許可し得る。逆に、現在の権限状態がユーザ状態であり、かつ命令が管理者データメモリ領域２２６内のデータに対する参照を含む場合、コアはデータアクセスを許可しない。現在の権限状態がユーザ状態であり、かつ命令がユーザデータメモリ領域２２８内のデータに対する参照を含む場合、コアはデータアクセスを許可する。
【００６０】
一実施形態では、管理者データメモリ領域２２６の一部は管理者スタック２２７を割り当てられ、データメモリ領域２２８の一部はユーザスタック２２９を割り当てられる。換言すれば、管理者データメモリ領域２２６は管理者スタック２２７を含み、データメモリ領域２２８はユーザスタック２２９を含む。以前に説明されたように、システムは、管理者スタックの最上部のアドレスを指示する管理者スタックポインタ、および、ユーザスタックの最上部のアドレスを指示するユーザスタックポインタを維持する。コアが管理者状態にある間は、管理者スタックポインタがコアのスタック・ポインタ・レジスタ（たとえば、図１のＳＰレジスタ１２０）内に記憶され、コアがユーザ状態にある間は、ユーザスタックポインタがコアのスタック・ポインタ・レジスタ内に記憶される。現在の状態でないいずれかの状態に対応するスタックポインタは、代替スタック・ポインタ・レジスタ（たとえば、図１の代替ＳＰレジスタ１３５）内に維持される。
【００６１】
図３は、例示的な実施形態による、資源および実行保護を実施するシステムを動作させるための方法の流れ図である。より良く理解するために、図３は、例示的な実施形態による、管理者状態４１０およびユーザ状態４２０ならびにそれらの間の遷移を示す簡略化された状態図である図４とともに見られるべきである。図３に描かれている動作の流れの説明の間、図４の管理者状態４１０およびユーザ状態４２０が参照される。理解を容易にするために、図３に描かれている流れ図は、パイプライン型アーキテクチャを実装するシステムにおいて採用され得る並列性は示さない。たとえば、流れ図はＩＦＡＲを更新するステップ（ブロック３０６）、命令をフェッチおよび復号するステップ（ブロック３１４）、および命令を実行するステップ（ブロック３１８）を順次的に描いているが、最初の命令が命令パイプラインを通じて進行し始めると、これらのプロセスのうちの特定のものは、一連の命令の実行とともに並行して実施されてもよいことは理解されたい。パイプライン型アーキテクチャを含むシステムにおいて図３の流れ図にもともと備わっている概念を実装する方法を、当業者は理解するであろう。
【００６２】
方法は、ブロック３０２において、たとえば、コア（たとえば、図１のコア１１０）が電源投入（またはリセット）されると開始し得、システムは初期化コードの実行を通じて初期化される。本明細書において使用される場合、「初期化コード」は、コアによって、システムがいつでも通常動作（ユーザコードの実行を含む）を実施することができる時点までシステムを初期化するために実行される任意のコードを意味する。たとえば、システム初期化は、ＢＩＯＳコード、パワーオン・セルフ・テスト（ＰＯＳＴ）コード、ブートストラップコード、および、オペレーティングシステムを起動する役割を担うカーネルコードの実行を含み得る。より具体的には、電源投入時に、第１の命令に対するアドレスがＩＦＡＲおよびＰＣレジスタ内で確立され（たとえば、リセットベクトルに対応するアドレスが図１のＩＦＡＲ１１７内にロードされ、対応するアドレスがＰＣレジスタ１１８内にロードされ）、対応する命令がメモリからフェッチされ、復号され、実行される。各命令が実行パイプラインを通じて進むと、ＩＦＡＲおよびＰＣレジスタ内のアドレスは更新され、次の命令がフェッチされ、復号され、実行される。最終的には初期化中、コアはカーネルの実行を開始する。一実施形態では、初期化コードは管理者コードであるとみなされ、コアは最初に、現在の権限状態を管理者状態４１０であると定義する。後に、下記に説明されるように、コアは、アドレス範囲指示子（複数の場合もあり）、および、現在実行している命令がメモリからフェッチされた元である命令アドレスに基づいて、現在の権限状態を管理者状態４１０またはユーザ状態４２０であると定義する。
【００６３】
一実施形態では、初期化コードによって実施される１つのプロセスは、システムを、資源および実行保護の目的のために利用されるレジスタ（たとえば、図１の保護レジスタ１３０）内の値の初期化によって資源および実行保護を実施するように構成することである。したがって、初期化コードは、下記に説明されるように、それらのレジスタ値に値を記憶する。より詳細には、また以前に説明されたように、保護レジスタのうちの１つは、１つまたは複数のレジスタ・ロック・フラグおよびイネーブルフラグを含む制御レジスタ（たとえば、図１の制御レジスタ１３１）を含む。一実施形態では、リセット時に、イネーブルフラグがセットされ（資源および実行保護イネーブル信号がシステムに提供されていると仮定する）、レジスタ・ロック・フラグが（または、複数のレジスタ・ロック・フラグが）クリアされる。次いで、初期化コードが、さまざまな保護レジスタ（たとえば、図１のレジスタ１３２〜１３４）内に値を書き込み得る。イネーブルフラグがセットされた状態で、コアは、さまざまな実施形態にしたがって資源および実行保護を実施する。
【００６４】
システムの資源および実行保護機能を構成するために、初期化コードは、保護レジスタ内に少なくとも１つの命令アドレス範囲指示子および少なくとも１つのデータアドレス範囲指示子を記憶する。たとえば、一実施形態では、初期化コードは、ユーザ・コード・ベース・アドレス・レジスタ（たとえば、図１のユーザコードＢＡＲ１３２）内に、メモリ内の（たとえば、図１のフラッシュメモリ１６０内の）管理者コード領域とユーザコード領域との間のパーティションを画定する命令アドレス範囲指示子（たとえば、図１のフラッシュメモリ１６０を参照するアドレス）を記憶し得る。より具体的には、また以前に説明されたように、命令アドレス範囲指示子は、管理者状態（たとえば、管理者状態４１０）に関連付けられるコンピュータ命令を記憶するために割り当てられるメモリ領域を画定し、ユーザ状態（たとえば、ユーザ状態４２０）に関連付けられるコンピュータ命令を記憶するために割り当てられるメモリ領域を画定する。加えて、初期化コードは、データ・コード・ベース・アドレス・レジスタ（たとえば、図１のユーザデータＢＡＲ１３３）内に、メモリ内の（たとえば、図１のＲＡＭ１６４内の）管理者データ領域とユーザデータ領域との間のパーティションを画定するデータアドレス範囲指示子（たとえば、図１のＲＡＭ１６４を参照するアドレス）を記憶し得る。より具体的には、また以前に説明されたように、データアドレス範囲指示子は、管理者状態（たとえば、管理者状態４１０）に関連付けられるデータを記憶するために割り当てられるメモリ領域を画定し、ユーザ状態（たとえば、ユーザ状態４２０）に関連付けられるデータを記憶するために割り当てられるメモリ領域を画定する。最後に、初期化コードは、周辺コード・ベース・アドレス・レジスタ（たとえば、図１のユーザ周辺ＢＡＲ１３４）内に、管理者コードにとってアクセス可能である周辺デバイスのグループ、およびユーザコードにとってアクセス可能である周辺デバイスのグループを画定する周辺アドレス範囲指示子（たとえば、周辺アドレス）を書き込み得る。
【００６５】
システムは、一実施形態では、管理者コードが管理者データ領域および周辺機器とユーザデータ領域および周辺機器の両方にアクセスし得、ユーザコードがユーザデータ領域および周辺機器のみにアクセスし得るように構成される。管理者コード領域、データ領域、および周辺機器ならびにユーザコード領域、データ領域、および周辺機器を画定する保護レジスタが初期化されると、初期化コードは、（たとえば、図１の制御レジスタ１３１内の）対応するレジスタ・ロック・フラグ（複数の場合もあり）をセットし得、それによって、保護レジスタ内の値が不注意に上書きされることがない。一実施形態では、保護レジスタは管理者コードにとってのみアクセス可能であるように設計される周辺機器内にある（たとえば、周辺アドレス範囲指示子は、保護レジスタのための周辺機器が管理者コードのみにとってアクセス可能な周辺機器のグループ内にあるようなものである）。したがって、保護レジスタはユーザコードにとってはアクセス可能でない。
【００６６】
ブロック３０４において、初期化コードは、管理者スタックポインタをスタック・ポインタ・レジスタ（たとえば、図１のＳＰレジスタ１２０）内に書き込むことによって、管理者スタック（たとえば、図２の管理者スタック２２７）をも確立する。以前に説明されたように、初期管理者スタックポインタは、管理者スタックの原点に対応するメモリ内の（たとえば、ＲＡＭ１６４内の）アドレス（たとえば、図２の管理者スタック２２７のベースアドレス）を指定し得る。一実施形態では、初期化コードは、この時点においてユーザスタック（たとえば、図２のユーザスタック２２９）をも確立し得るが、ユーザスタックは後に（たとえば、ユーザコードの最初のインスタンスが実行する直前のような、初期化コードが実行された後に）確立されてもよい。いずれにせよ、コア上で実行する管理者コードは、ユーザスタックの原点に対応するアドレス（たとえば、図２のユーザスタック２２９のベースアドレス）を代替スタック・ポインタ・レジスタ（たとえば、図１の代替ＳＰレジスタ１３５）内に記憶することによって、ユーザスタックを確立し得る。以下の説明によって明らかになるように、コアのスタック・ポインタ・レジスタ（たとえば、図１のＳＰレジスタ１２０）内のスタックポインタは、現在の権限状態のためのスタックに対応し、代替スタック・ポインタ・レジスタ（たとえば、図１の代替ＳＰレジスタ１３５）内のスタックポインタは、現在の権限状態以外の権限状態のためのスタックに対応する。換言すれば、たとえば、現在の権限状態が管理者状態である場合、コアのスタック・ポインタ・レジスタは管理者スタックのためのスタックポインタを含み、代替スタック・ポインタ・レジスタは、ユーザスタックのためのスタックポインタを含み得る。逆に、現在の権限状態がユーザ状態である場合、コアのスタック・ポインタ・レジスタはユーザスタックのためのスタックポインタを含み、代替スタック・ポインタ・レジスタは、管理者スタックのためのスタックポインタを含む。
【００６７】
システム初期化が完了すると、コアは、コアがプログラムフローにしたがって命令をフェッチ、復号、および実行する通常動作モードに入り得る。より具体的には、ブロック３０６において、各命令フェッチの前に、コアはＩＦＡＲ（たとえば、図１のＩＦＡＲ１１７）内のアドレスを、次の命令フェッチアドレスに対応するように更新し、後に、命令が実行パイプラインに入るとＰＣレジスタ（たとえば、図１のＰＣレジスタ１１８）内のアドレスを更新する。先行する命令において指定される分岐またはジャンプがない場合、コアは、ＩＦＡＲおよびＰＣレジスタ内のアドレスを、適切な時点においてそれぞれ命令フェッチ幅および命令長の分だけインクリメントする。そうでなく、先行する命令がメモリ内の不連続のアドレスにあるロケーションへの分岐またはジャンプを指定していた場合、コアは、ＩＦＡＲ内のアドレスを、指定されるアドレスに対応するように更新する。ＩＦＡＲ内のアドレスが更新されると、コアは、次の命令フェッチアドレスを評価する。
【００６８】
ブロック３０８において、評価の一部として、コアは、次の命令フェッチアドレスが、次の命令が現在の権限状態に対応するコードメモリの領域からアクセスされるべきであることを示すか、または、異なる権限状態に対応するコードメモリの領域からアクセスされるべきであることを示すかを判定する。これは、フェッチされるべき次の命令が記憶される領域を判定するために次の命令フェッチアドレスを（たとえば、図１のユーザコードＢＡＲ１３２内の）命令アドレス範囲指示子と（たとえば、図１のフェッチモジュール１２４によって）比較することによって、次いで、その領域が現在の権限状態と関連付けられるかが判定されることによって達成され得る。たとえば、現在の権限状態が管理者状態４１０であり、かつ次の命令フェッチアドレスがユーザコードに割り当てられるコードメモリの領域（たとえば、図２の領域２１８）内にある場合、コアは、次の命令フェッチアドレスは現在の権限状態と関連付けられるコードメモリの領域には対応しないと判定する。同様に、現在の権限状態がユーザ状態４２０であり、かつ次の命令フェッチアドレスが管理者コードに割り当てられるコードメモリの領域（たとえば、図２の領域２１６）内にある場合、コアは、次の命令フェッチアドレスは現在の権限状態と関連付けられるコードメモリの領域には対応しないと判定する。
【００６９】
次の命令フェッチアドレスが、次の命令が異なる権限状態に対応するコードメモリの領域からアクセスされるべきであることを示す場合、ブロック３１０において、状態遷移が適正状態遷移となるかが（たとえば、図１のフェッチモジュール１２４によって）さらに判定され得る。以前に説明されたように、たとえば、コアは、管理者−ユーザ状態適正遷移事象が発生した（たとえば、コアが、割り込み命令からの復帰を含む、第１のセットの命令のうちの１つを実行した）場合に、管理者状態４１０からユーザ状態４２０への状態遷移が許可されると判定し得る。同様に、コアは、ユーザ−管理者状態適正遷移事象が発生した（たとえば、コアが、ソフトウェア割り込み命令、トラップ命令などを含む、第２のセットの命令のうちの１つを実行した）、および／または、コアに、その現在の実行スレッドを中断させ、制御を管理者コードに渡し戻す例外条件（たとえば、Ｉ／Ｏ割り込み信号のアサート）が検出された場合、ユーザ状態４２０から管理者状態４１０への状態遷移が許可されると判定し得る。管理者−ユーザ状態適正遷移およびユーザ−管理者状態適正遷移は、図４において矢印４３０、４３２によって示されている。
【００７０】
コアが、（ブロック３１０において判定されるように）状態遷移が適正であると判定すると、ブロック３１２において、現在の権限状態を、フェッチされるべき次の命令（たとえば、ブロック３１０に関連して評価された命令）と関連付けられる権限状態に（たとえば、図１の状態モジュール１２２によって）変更することによって状態遷移が実施される。加えて、コアのスタック・ポインタ・レジスタ（たとえば、図１のＳＰレジスタ１２０）内に記憶されているスタックポインタが、代替スタック・ポインタ・レジスタ（たとえば、図１の代替ＳＰレジスタ１３５）内に記憶されているスタックポインタと（たとえば、図１のＳＰスワップモジュール１２８によって）スワッピングされる。
【００７１】
ブロック３１０において状態遷移が適正でないと判定される場合、コアは、現在の権限状態を強制的に管理者状態にし（まだそうでない場合）、ブロック３１３において、フォールトハンドリング管理者コードが実行フォールトを生成する。たとえば、現在の権限状態が管理者状態４１０であり、かつ管理者コードが不正な命令（たとえば、割り込みタイプの命令からの復帰以外の命令）を使用してユーザコードへのジャンプを試みる場合、コアは（図４において矢印４３４によって示されるように）管理者状態４１０に留まり、実行フォールトが生成される。逆に、たとえば、現在の権限状態がユーザ状態４２０であり、かつユーザコードが不正な命令（たとえば、ソフトウェア割り込みタイプの命令以外の命令）を使用して管理者コードへのジャンプを試みる場合、コアは（図４において矢印４３６によって示されるように）ユーザ状態４２０から管理者状態４１０への遷移を実施し、実行フォールトが生成される。状態遷移に関連して、コアのスタック・ポインタ・レジスタ（たとえば、図１のＳＰレジスタ１２０）内のスタックポインタは、代替スタック・ポインタ・レジスタ（たとえば、図１の代替ＳＰレジスタ１３５）内のスタックポインタとスワッピングされる。
【００７２】
一実施形態では、実行フォールトの生成は、不正命令に関連付けられるアドレス（すなわち、不正命令に対応するＰＣレジスタ１１８内のアドレス）を記憶する管理者コード（たとえば、カーネルフォールトハンドリングルーチン）を実行することを含む。たとえば、このアドレスは、フォールトの報告およびハンドリングに関連し得る他の情報とともに、保護レジスタ（たとえば、図１の不正ＰＣレジスタ１３６）内に記憶され得る。フォールトが、プログラムフローに大きく割りこむことなくハンドリングされることができると仮定すると、方法は、ブロック３０６に戻って、ＩＦＡＲ内のアドレスを更新して、プログラムフローに関連付けられる命令の実行を継続し得る。そうでない場合、方法は終了し得る。
【００７３】
再びブロック３０８を参照して、現在の権限状態が管理者状態４１０であり、かつ次の命令アドレスが管理者コードに割り当てられるコアメモリの領域（たとえば、図２の領域２１６）内にある場合、コアは、次の命令アドレスは現在の権限状態と関連付けられるコードメモリの領域に対応すると判定し、方法はブロック３１４に進む。同様に、現在の権限状態がユーザ状態４２０であり、かつ次の命令アドレスがユーザコードに割り当てられるコアメモリの領域（たとえば、図２の領域２１８）内にある場合、コアは、次の命令アドレスは現在の権限状態と関連付けられるコードメモリの領域に対応すると判定し、方法はブロック３１４に進む。いずれの事例においても、図４内の矢印４３８、４４０によって示されているように、現在の権限状態は変更されない。
【００７４】
コアが、（ブロック３０８において）次の命令アドレスが現在の権限状態に関連付けられるコードメモリの領域に対応すると判定した場合、または、（ブロック３１２において）適正状態遷移が実施された場合、コアは、ブロック３１４において、ＩＦＡＲ内の次の命令フェッチアドレスに対応する命令をフェッチし得、命令を復号し得る。
【００７５】
ブロック３１６において、次いで、コアは、命令の実行によってデータアクセスが発生することになるかを判定する。たとえば、命令は、データメモリ内の（たとえば、図１のＲＡＭ１６４内の）データが記憶されるロケーションに対する参照を含み得る。命令の実行によってデータアクセスが発生しない場合、コアは、ブロック３１８において命令を実行し、方法は図示されるように（たとえば、プログラムフローに関連付けられる命令の実行を継続するために）反復する。
【００７６】
命令の実行によってデータアクセスが発生することになる場合、コア（たとえば、図１のアクセスモジュール１２６）は、データ・アクセス・アドレスが、現在の権限状態においてアクセスが許可されるデータメモリ（たとえば、図１のＲＡＭ１６４）の領域内にあるかを判定する。たとえば、以前に説明されたように、管理者コードは、管理者データ領域とユーザデータ領域の両方（たとえば、図２の領域２２６、２２８）内のデータにアクセスすることを許可され得、ユーザコードは、ユーザデータ領域ののみの（たとえば、図２の領域２２８）中のデータにアクセスすることを許可され得る。したがって、現在の権限状態が管理者状態である場合、コアは、いずれのデータアクセスも許可し得る。逆に、現在の権限状態がユーザ状態である場合、コアは、データ・アクセス・アドレスが管理者データ領域内のユーザデータ領域（たとえば、図２の領域２２８）内にある場合にのみデータアクセスを許可し得る。
【００７７】
一実施形態では、データ・アクセス・アドレスが位置する領域を判定するために、（たとえば、図１のアクセスモジュール１２６によって）データ・アクセス・アドレスと（たとえば、図１のユーザデータＢＡＲ１３３内の）データアドレス範囲指示子との間で比較が行われる。次いで、コアが現在の権限状態にある（たとえば、復号された命令に対応する権限状態にある）間にその領域内でデータアクセスが許可されるかが判定される。データアクセスが許可される場合、コアは、ブロック３１８において命令を実行し（データアクセスの実施を含む）、方法は図示されるように反復する（たとえば、ブロック３０６においてプログラムカウンタが更新され、方法は継続する）。
【００７８】
ブロック３２０において、データ・アクセス・アドレスが現在の権限状態においてアクセスが許可されないデータメモリ（たとえば、図１のＲＡＭ１６４）の領域内にあると判定される場合、コアは、現在の権限状態を強制的に管理者状態にし（まだなっていない場合）、ブロック３２２において、フォールトハンドリング管理者コードがアクセスフォールトを生成する。たとえば、現在の権限状態がユーザ状態４２０にあり、かつユーザコードが管理者データ領域（たとえば、図２の領域２２６）内にあるデータへのアクセスを試みる場合、コアは、（図４において矢印４３６によって示されているような）ユーザ状態４２０から管理者状態４１０への遷移を実施し、データアクセスが禁止され、アクセスフォールトが生成される。状態遷移に関連して、コアのスタック・ポインタ・レジスタ（たとえば、図１のＳＰレジスタ１２０）内のスタックポインタは、代替スタック・ポインタ・レジスタ（たとえば、図１の代替ＳＰレジスタ１３５）内のスタックポインタとスワッピングされる。
【００７９】
一実施形態では、アクセスフォールトの生成は、不正命令に関連付けられるアドレスを記憶する管理者コード（たとえば、カーネルフォールトハンドリングルーチン）を実行することを含む。たとえば、このアドレスは、フォールトの報告およびハンドリングに関連し得る他の情報とともに、保護レジスタ（たとえば、図１のフォールトＰＣレジスタ１３７）内に記憶され得る。代替の実施形態では、フォールトデータアドレスが、レジスタ１３７内に記憶されてもよい（たとえば、レジスタ１３７は「不正データアドレス」レジスタであってもよい）。フォールトが、プログラムフローに大きく割りこむことなくハンドリングされることができると仮定すると、方法は、ブロック３０６に戻って、プログラムフローに関連付けられる命令の実行を継続し得る。そうでない場合、方法は終了し得る。
【００８０】
図３に示されているプロセスブロックのうちの特定のものは互いに並行してまたは他のプロセスを実行しながら実行されてもよいことを理解されたい。加えて、図３に示されているプロセスブロックの特定の順序は、実質的に同じ結果を達成しながら変更されてもよいことを理解されたい。したがって、このような変更は本発明の主題の範囲内に含まれるように意図される。
【００８１】
上述の実施形態は、主に２つの権限レベル（たとえば、管理者レベルおよびユーザレベル）が実装されるシステムに焦点を当てているが、実施形態は、３つ以上の権限レベルが実装されるシステム（たとえば、３つ以上の権限リングを有するリングベースのセキュリティ方式を実装するシステム）においても実装され得ることは理解されたい。本明細書における記載に基づいて、さまざまな記載されている実施形態を改変して３つ以上の権限レベルをサポートするシステム内で実施形態を実装する方法を、当業者は理解するであろう。加えて、特定のシステム構成が図１に関連して上記に記載されているが、実施形態は、他のアーキテクチャを有するシステム内でも同様に実装されてよい。たとえば、システム１００は、資源および実行保護に関連して使用される値を記憶するのに使用されるさまざまな保護レジスタ１３０を含み、保護レジスタ１３０はコア１１０とは別個のものであり、コア１１０にとってバス１５０および／または他の接続１５２を通してアクセス可能であるモジュール１４０の一部であるが、他の実施形態は、コア１１０自体の中を含む他の場所に値を記憶するように構成されてもよい。さらに、実施形態は、マルチプロセッサシステム、および／または図１のものとは著しく異なるアーキテクチャを有するシステムにおいて実装されてもよい。これらのおよび他の変形形態は本発明の主題の範囲内に含まれるように意図される。
【００８２】
このように、資源および実行保護の方法および装置のさまざまな実施形態が上記で説明されてきた。処理システムの実施形態は、第１のモジュールと第２のモジュールとを含む。第１のモジュールは、メモリからフェッチされた命令のアドレスに基づいて、現在の権限状態が第１の権限状態であるか、または第２の権限状態であるかの知識を維持するように構成される。第２のモジュールは、次の命令フェッチアドレスを少なくとも１つの命令アドレス範囲指示子と比較することによって、次の命令フェッチアドレスが、現在の権限状態に関連付けられる第１のメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられる第２のメモリ領域内のロケーションに対応するかを判定するように構成される。次の命令フェッチアドレスが現在の権限状態に関連付けられる第１のメモリ領域内にない場合は、第２のモジュールは、現在の権限状態から異なる権限状態への遷移が適正である場合にのみ、次のコンピュータ命令がフェッチされることを許可する。
【００８３】
さらなる実施形態では、処理システムは、データ・アクセス・アドレスを少なくとも１つのデータアドレス範囲指示子と比較することによって、データ・アクセス・アドレスが第１の権限状態に関連付けられるか、または第２の権限状態に関連付けられるかを判定するとともに、現在の権限状態がデータ・アクセス・アドレスに対応するメモリロケーションへのアクセスが許可される権限状態である場合にメモリロケーションへのアクセスを許可するために、コンピュータ命令に対するデータ・アクセス・アドレスが生成されると判定するように構成される第３のモジュールを含む。
【００８４】
処理方法の実施形態は、第１の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第１のメモリ領域を画定し、第２の権限状態に関連付けられるコンピュータ命令を記憶するために割り当てられる１つまたは複数の第２のメモリ領域を画定する少なくとも１つの命令アドレス範囲指示子を記憶することを含む。方法は、メモリからフェッチされた命令のアドレスに基づいて、現在の権限状態を第１の権限状態または第２の権限状態として定義することと、次の命令フェッチアドレスを少なくとも１つの命令アドレス範囲指示子と比較することによって、次の命令フェッチアドレスが、現在の権限状態に関連付けられるメモリ領域内のロケーションに対応するか、または異なる権限状態に関連付けられるメモリ領域内のロケーションに対応するかを判定することとをさらに含む。次の命令フェッチアドレスが現在の権限状態に関連付けられるメモリ領域内のロケーションに対応しない場合、次のコンピュータ命令は、現在の権限状態から異なる権限状態への遷移が適正である場合にのみ、フェッチされることを許可される。
【００８５】
さらなる実施形態では、処理方法は、第１の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第３のメモリ領域を画定し、第２の権限状態に関連付けられるデータを記憶するために割り当てられる１つまたは複数の第４のメモリ領域を画定する少なくとも１つのデータアドレス範囲指示子を記憶することを含む。方法は、データ・アクセス・アドレスがコンピュータ命令によって生成されると判定することをさらに含む。データアクセスが発生すると、データ・アクセス・アドレスを少なくとも１つのデータアドレス範囲指示子と比較することによって、データ・アクセス・アドレスが第１の権限状態に関連付けられるメモリロケーションに対するものであるか、または、第２の権限状態に関連付けられるメモリロケーションに対するものであるかが判定される。現在の権限状態が、データ・アクセス・アドレスに対応するメモリロケーションに対するアクセスが許可される権限状態である場合、メモリロケーションに対するアクセスが許可される。
【００８６】
処理方法の別の実施形態は、現在の権限状態を管理者状態またはユーザ状態として定義することと、次の命令フェッチアドレスを命令アドレス範囲指示子と比較することによって、次の命令フェッチアドレスが、現在の権限状態に関連付けられるメモリ領域内のロケーションに対応するか、または、異なる権限状態に関連付けられるメモリ領域内のロケーションに対応するかを判定することとを含む。命令アドレス範囲指示子は、管理者コードを記憶するために割り当てられる管理者コードメモリ領域、およびユーザコードを記憶するために割り当てられるユーザコードメモリ領域を画定する。次の命令フェッチアドレスが現在の権限状態に関連付けられるメモリ領域内のロケーションに対応しない場合、次のコンピュータ命令は、現在の権限状態から異なる権限状態への遷移が適正である場合にのみ、フェッチされることを許可される。
【００８７】
さらなる実施形態では、処理方法は、データ・アクセス・アドレスがコンピュータ命令によって生成されると判定することと、データアクセスが発生する場合には、データ・アクセス・アドレスをデータアドレス範囲指示子と比較することによって、データ・アクセス・アドレスが管理者状態に関連付けられるメモリロケーションに対するものか、またはユーザ状態に関連付けられるメモリロケーションに対するものかを判定することとをも含む。データアドレス範囲指示子は、管理者状態に関連付けられるデータを記憶するために割り当てられる第３のメモリ領域を画定し、ユーザ状態に関連付けられるデータを記憶するために割り当てられる第４のメモリ領域を画定する。現在の権限状態が管理者状態である場合、メモリロケーションに対するアクセスが許可される。現在の権限状態がユーザ状態である場合、メモリロケーションに対するアクセスは、データ・アクセス・アドレスが第４のメモリ領域内のメモリロケーションに対するものである場合にのみ許可される。
【００８８】
本発明の主題の原理が特定のシステム、装置、および方法に関連して上記で説明されてきたが、この説明は例示のみを目的として為されており、本発明の主題に対する限定としてではないことは明瞭に理解されたい。本明細書において述べられ図面内に示されたさまざまな機能または処理ブロックは、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせにおいて実装されることができる。さらに、本明細書において採用されている表現または専門用語は説明を目的としており、限定ではない。
【００８９】
特定の実施形態の上記の記載は、他者が、現在の知識を適用することによって、一般的な概念から逸脱することなくさまざまな用途のためにそれを容易に改変および／または適合することができるだけ十分に本発明の主題の一般的な性質を公開している。したがって、このような適合および改変は開示されている実施形態の均等物の意図および範囲内にある。本発明の主題は、すべてのこのような代替形態、改変形態、均等物、および変形形態を、添付の特許請求の範囲の精神および広い範囲内に入るものとして包含する。
【図１】
2013250980.tif 000003
【図２】
2013250980.tif 000004
【図３】
2013250980.tif 000005
【図４】
2013250980.tif 000006