(57)【要約】【課題】  アプリケーションの特定のモジュールおよび／またはライブラリ内のサービスに、他のモジュールおよび／またはライブラリ内のサービスから柔軟に保護を与える。【解決手段】  本発明にかかる保護を特権から切り離すことによってコンピュータシステムに柔軟な保護を提供する方法は、２つ以上の保護タイプを記述した情報の受け取りを可能にすること（３０２）と、前記２つ以上の保護タイプと前記コンピュータシステムの同じ特権レベルで実行されるコード部分との間の関係を記述した情報の受け取りを可能にすること（３０２）であって、前記関係は線形である必要はないことと、前記２つ以上の保護タイプを記述した前記情報および前記コード部分との前記関係を記述した前記情報の関連付けを可能にすること（３０６）とを含む。【選択図】図３Ａ
2005216305.tif 000002
【特許請求の範囲】
【請求項１】
保護を特権から切り離すことによってコンピュータシステムに柔軟な保護を提供する方法であって、
２つ以上の保護タイプを記述した情報の受け取りを可能にすること（３０２）と、
前記２つ以上の保護タイプと前記コンピュータシステムの同じ特権レベルで実行されるコード部分との間の関係を記述した情報の受け取りを可能にすること（３０２）であって、前記関係は線形である必要はないことと、
前記２つ以上の保護タイプを記述した前記情報および前記コード部分との前記関係を記述した前記情報の関連付けを可能にすること（３０６）と
を含む方法。
【請求項２】
前記関係は、ユーザ規定可能である
請求項１記載の方法。
【請求項３】
前記コード部分はドメインであり、前記保護タイプはそれぞれ、１つまたは複数のドメイン属性により少なくとも一部規定される
請求項１記載の方法。
【請求項４】
前記１つまたは複数のドメイン属性は、
特定のドメインに一意の値を指定するドメイン識別子
を含む
請求項３記載の方法。
【請求項５】
前記１つまたは複数のドメイン属性は、
特定のドメインを同時に使用する各ユーザを保護する一意の値を指定する秘密鍵を
含む
請求項３記載のコンピュータシステムに柔軟な保護を提供する方法。
【請求項６】
前記１つまたは複数のドメイン属性は、
特定のドメインが別のドメインに関連するコードにアクセスするために使用しなければならない値を指定するコード共有鍵
を含む
請求項３記載の方法。
【請求項７】
前記１つまたは複数のドメイン属性は、
特定のドメインが別のドメインに関連するデータにアクセスするために使用しなければならない値を指定するデータ共有鍵
を含む
請求項３記載の方法。
【請求項８】
前記１つまたは複数のドメイン属性は、
特定のドメインが、別のドメインへのドメイン間切り替えの実行と併せて、前記別のドメインに関連するコードにアクセスするために使用しなければならない値を指定する他許可
を含む
請求項３記載の方法。
【請求項９】
前記１つまたは複数のドメイン属性は、
別のドメインに代わって特定のドメインに関連するコードへのアクセスを要求するために使用される値を指定する他アクセス鍵
を含む
請求項３記載の方法。
【請求項１０】
保護を特権から切り離すことによってコンピュータシステムに柔軟な保護を提供する方法であって、
第１のコード部分からの、第２のコード部分にアクセスする要求を検出すること（３１２）であって、前記第１および第２のコード部分は前記コンピュータシステムの同じ特権レベルで実行されることと、
２つ以上の保護タイプを記述した情報に基づき、また前記２つ以上の保護タイプと前記コード部分との間の関係を記述した情報に基づき、前記第１のコード部分による前記第２のコード部分へのアクセスが許可されているか否かを判断すること（３１２）であって、前記関係は線形である必要はないことと、
前記関係が、前記第１のコード部分による前記第２のコード部分へのアクセスが許可されていることが指定される場合（３１２）、前記第１のコード部分による前記第２のコード部分へのアクセスを許可し（３１６）、その他の場合、前記第１のコード部分による前記第２のコード部分へのアクセスを許可しないこと（３２０）と
を含むコンピュータシステムに柔軟な保護を提供する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コンピュータシステムにおける情報の保護に関する。
より詳細には、本発明の実施形態は、情報の保護を、情報へのアクセスに関連する特権レベルから切り離すことによりコンピュータシステムに関連する情報を保護することに関する。
【背景技術】
【０００２】
今日のコンピュータシステムに関連する１つの問題は、コンピュータシステム内の情報を、偶然的または悪意があり得る望ましくないアクセスから保護することである。
たとえば、特定のコードがどのように働くか、コードが動作する対象データ、またはデータが記憶されるデータ構造がユーザ決定可能なことは望ましくない場合がある。
本明細書では、情報には、コード、データ、および／またはデータが記憶されるフォーマット（「データ構造」としても知られる）が含まれるがこれらに限定されない。
さらに、本願では、情報へのアクセス、変更、および／または実行等のアクティビティを以下「アクセス」と呼ぶ。
【０００３】
コンピュータ用語では、「特権」により、コードがコンピュータシステム内の情報に対して実行許可されるアクションが決まる。
大半のオペレーティングシステムでは、コードが実行許可されているアクションは、コードが実行する、または常駐する特権レベルによって決まる。
たとえば、コードは通常、カーネルおよびユーザとして知られている２つの特権レベルのうちの１つにおいて実行する。
さらに、カーネルに常駐するコードのアクション実行権限量は、コンピュータシステム内の如何なる場所にある情報にもアクセスする等、無限である。
対照的に、ユーザレベルに常駐するコードのアクション実行権限量は限られている。
たとえば、ユーザレベルのコードは、カーネルのコードまたはデータに直接アクセスすることができない。
【０００４】
コンピュータ用語では、「保護」は、コンピュータシステム内の情報を、その情報に対して行われている様々なアクションから保護することを指す。
たとえば、カーネルに常駐するコードまたはデータは、意図的にではなく、または悪意を持って意図的にそのコードまたはデータにアクセスするコンピュータシステムのユーザから保護される。
同様に、カーネルのコードおよびデータは、ユーザレベルのコードによる直接アクセスから保護される。
対照的に、ユーザレベルのコードおよびデータは、意図的にではなく、または悪意を持って意図的にユーザによりアクセス可能である。
【０００５】
通常、オペレーティングシステムはカーネルに常駐し、アプリケーションはユーザレベルに常駐する。
オペレーティングシステムコードは、ユーザアプリケーションが有するよりも高い保護レベルを有する。
しかし一般に、オペレーティングシステムまたはアプリケーションのいずれに対しても粒度の細かい保護はなされない。
たとえば、アプリケーションはモジュールおよび／またはライブラリのセットを含む場合がある。
これらモジュールおよび／またはライブラリのいくつかは第三者からのものであり、したがってあまり信用できないものがあり得る。
アプリケーションの特定のモジュールおよび／またはライブラリ内のサービスに、他のモジュールおよび／またはライブラリ内のサービスから柔軟に保護を提供することが望ましい。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
別の例では、ベンダー供給のアプリケーションライブラリは通常、初期化解除ポインタを逆参照するアプリケーションコード等の不良アプリケーションコードにより破損し得る極めて重要なデータを含む。
これらおよび他の状況では、意図的にではないか、または悪意を持って意図的にであるかに関わらず、こういったモジュールのアクセスならびにこれらモジュールが何にアクセスするかを制御して、より高いアプリケーション信頼性（robustness）を提供することが非常に望ましい。
【課題を解決するための手段】
【０００７】
本発明は、特権レベルに関わりのない粒度の細かい柔軟な保護を可能にする。
本発明は、オーバーヘッドを大幅に低減した柔軟性を可能にする。
さらに、粒度の細かい保護を必要としないコードはオーバーヘッドをまったく追加させない。
本発明は、望ましい保護をアプリケーションモジュールに、そのモジュールをカーネルに移す必要なく提供する。
本発明は、プログラム開発者が、他の特権レベルのコードに関与する、または影響を与えることなく、任意の特権レベルで、それぞれのニーズに合わせて保護レベルをカスタマイズできるようにする。
【０００８】
本発明の実施形態は、同じ特権レベル内で、すなわち言い換えれば、保護を特権レベルから切り離すことにより、コンピュータシステムに粒度の細かい保護を提供する方法およびシステムに関する。
一実施形態では、２つ以上の保護タイプを記述した情報が受け取られる。
さらに、２つ以上の保護タイプとコード部分との間の関係を記述した情報が受け取られる。
関係は線形である必要はない。
コード部分は同じ特権レベルで実行される。
２つ以上の保護タイプおよび関係を記述した情報は、コード部分に関連付けられる。
【０００９】
本明細書に組み込まれてその一部を成す添付図面は本発明の実施形態を示し、説明と併せて本発明の原理を説明する役割を果たす。
【００１０】
この説明において参照される図面は、特に注記される場合を除き、一定の縮尺で描かれているものと理解すべきではない。
【発明を実施するための最良の形態】
【００１１】
これより、例を添付図面に示す本発明の様々な実施形態を詳細に参照する。
本発明はこれら実施形態と併せて説明されるが、本発明をこれら実施形態に限定する意図はないことが理解されよう。
反対に、本発明は、添付の特許請求の範囲に規定される本発明の精神および範囲内に包含することができる代替形態、変更形態、および等価形態を網羅することを意図する。
さらに、本発明の以下の説明では、本発明の完全な理解を提供するためにいくつかの特定の詳細が記される。
場合によっては、既知の方法、手順、構成要素、および回路については、本発明の態様を不必要に曖昧にしないように詳細に説明していない。
【００１２】
［ソフトウェアシステムおよび機能の概観］
すでに述べたように、意図的にではないか、または悪意を持って意図的にであるかに関わらず、アプリケーション内またはカーネル内のコードおよびデータを望ましくないアクセスから細かい粒度で保護することに関して問題が存在する。
この問題に対する１つの解決策は、残りのアプリケーションからの保護を必要とするアプリケーションの部分をカーネルに移すというものである。
この手法は一般に、以下より詳細に説明する「コンテキスト切り替え」として知られているものを含む。
図１Ａ（従来技術）は、アプリケーションの部分がカーネルで実行されるコンピュータシステムのブロック図である。
たとえば、アプリケーションのコード部分（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）およびコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）が動作する対象となるデータ（Ｄ１Ａ、Ｄ２Ａ、Ｄ３Ａ）はカーネル１４０Ａに常駐し、アプリケーションのコード部分（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ）およびコード（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ）が動作する対象となるデータ（Ｄ４Ａ、Ｄ５Ａ、Ｄ６Ａ）はユーザレベル１５０Ａに常駐する。
カーネル１４０Ａに常駐するアプリケーションのコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）およびデータ（Ｄ１Ａ、Ｄ２Ａ、Ｄ３Ａ）は、ユーザアクセスから保護される。
しかし、この解決策には多くの欠点がある。
【００１３】
１つの欠点は、ユーザレベル１５０Ａで実行されるコード（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ）とカーネル１４０Ａで実行されるコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）との間でのコンテキスト切り替えに起因するオーバーヘッドである。
たとえば、ユーザレベル１５０Ａ内のコード（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ）がカーネル１４０Ａ内のコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）を呼び出すときに、かなり多数のレジスタの内容を含む「コンテキスト」を保存する必要がある。
制御権がカーネル１４０Ａ内のコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）からユーザレベル１５０Ａ内のコード（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ）に戻るときに、「コンテキスト」を復元する必要がある。
コンテキスト切り替え中にこれらレジスタの内容を保存し復元するために、多くのＣＰＵサイクルが必要である。
【００１４】
第２の欠点は、カーネルに常駐するアプリケーションの部分（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）がカーネルを不安定にする可能性があることである。
コンピュータが信頼的に作動するためには、オペレーティングシステムが安定している必要がある。
カーネル１４０Ａの主な目的は、高い特権レベルおよび保護をオペレーティングシステムに提供することにある。
潜在的に、カーネル１４０Ａに導入されるいずれのコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）もバグを有する可能性があるため、オペレーティングシステムを不安定にする可能性がある。
【００１５】
第３の欠点は、カーネルでのアプリケーションコードの実行が許可されない場合があることである。
すでに考察したように、オペレーティングシステムは安定している必要がある。
したがって、カーネルで実行されるコードを担当するプログラム開発者は、アプリケーションを担当するプログラム開発者にアプリケーションの部分をカーネルに置くことを許可しない場合がある。
【００１６】
第４の欠点は、アプリケーションのコード部分をカーネルに移すと、他のアプリケーション手順を呼び出すことができなくなることである。
言い換えれば、コールバックはもはや不可能である。
多くの状況では、これは許容されるものではない。
【００１７】
この問題に対する第２の解決策は、ユーザレベルの特権をいくつかの線形信頼度レベル（以下「Ｍｕｌｔｉｃｓ（マルティクス）」と呼ぶ）に分割することを含む。
図１Ｂ（従来技術）は、Ｍｕｌｔｉｃｓアーキテクチャのブロック図である。
たとえば、カーネルは環０において最高の信頼度レベルを有し、ユーザレベルはいくつかのより低い信頼度レベル（環１、２、３）に分割される。
【００１８】
より大きなダメージを引き起こす可能性のあるコードは通常、より多くのデバッグを受けるため、より高い信頼度レベルを有する。
たとえば、環０におけるカーネルは最大量のダメージを引き起こす可能性があるため、環０内のコードは最も多くデバッグされ、最も信頼されるコードである。
さらに、環０には最大量の保護が提供される。
対照的に、環３内のコードは最も少なくデバッグされるため、環３の信頼度は最低であり、最小量の保護が提供される。
以下のルールに、線形の信頼度レベルがＭｕｌｔｉｃｓにおいてどのように働くかをまとめる。
１．環（ｊ）内のコードは環（ｊ）内のコードまたは「ｊ」よりも大きい番号のいずれの環内のコードも呼び出すことが可能であるべきである。
２．環（ｊ）内のコードの、環（ｉ）内のコードを直接呼び出す能力は拒絶されるべきである。
但し、「ｉ」は「ｊ」よりも小さい。
しかし、環（ｊ）は、たとえば、環０におけるカーネルに常駐する「ゲートキーパー」を呼び出すことにより、被制御的に環（ｉ）内のコードを呼び出すことができる。
そうするにあたり、「ゲートキーパー」は環間でコンテキストを切り替える。
３．環（ｊ）内のコードに、環（ｉ）に関連するデータへのアクセスを決して与えてはならない。
但し、「ｉ」は「ｊ」よりも小さい。
【００１９】
この第２の解決策に伴う１つの欠点は、Ｍｕｌｔｉｃｓがもたらすオーバーヘッドである。
たとえば、コンテキスト切り替えが環の間で必要であり、すでに考察したように、コンテキスト切り替えは大きなオーバーヘッドをもたらす。
【００２０】
第２の解決策の第２の欠点は柔軟性の欠如である。
この方式は厳密に線形であり、そのためコールバックは許可されない。
たとえば、環１は環２にアクセスすることができるが、その逆は不可能である。
コールバックは人気のあるプログラミングスタイルであり、多くのアプリケーションでかなり頻出する。
【００２１】
これらおよび他の理由により、大きなオーバーヘッドをもたらさない方法およびシステムが有益である。
カーネルを不安定にしない方法およびシステムも有益である。
コールバックを許可する、柔軟な非線形関係を異なるコード部分と保護タイプの間に規定する方法およびシステムが有益である。
同じ特権レベル（すなわち、ユーザまたはカーネル）内で粒度の細かい保護モデルを可能にする方法およびシステムが有益である。
アプリケーションに対して作業しているプログラム開発者が、各自のコードの保全性を保つために、求める保護を実施する承認をカーネルに対して作業しているプログラム開発者から得る必要がない方法およびシステムもまた有益である。
【００２２】
コンピュータ用語では、「特権」によりコードがコンピュータシステム内の情報に対して実行許可されるアクションが決まる。
コンピュータ用語では、「保護」は、コンピュータシステム内の情報を、その情報に対して行われる様々なアクションから保護することを指す。
今日の典型的なシステムでは、情報の保護は、情報が関連する特権レベルに直接相関する。
たとえば、図１Ａ（従来技術）では、カーネル１４０Ａに常駐するコード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ）およびデータ（Ｄ１Ａ、Ｄ２Ａ、Ｄ３Ａ）は、高いレベルの保護および特権を有する。
対照的に、ユーザレベル１５０Ａに常駐するコード（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ）およびデータ（Ｄ４Ａ、Ｄ５Ａ、Ｄ６Ａ）は、低いレベルの特権および保護を有する。
【００２３】
特権と保護を結びつけるさらに別の例では、図１Ｂ（従来技術）は、コードおよびデータに線形の信頼度レベル、たとえば環を関連付けることにより、異なるレベルの保護および特権が提供されるコードおよびデータを示す。
信頼度レベルは、コードがいかによくデバッグされたかによって決まる。
徹底的にコードがデバッグされるほど、コードに割り当てられる信頼度レベルは高い。
信頼度レベルが高いほど、コードに与えられる特権および保護レベルは高くなる。
したがって、環内のコードと信頼度レベルを通してコードに与えられる保護との間の関係は線形である。
たとえば、環（ｊ）内のコードは環（ｉ）内のコードを呼び出すことができる（但し、「ｉ」は「ｊ」よりも小さい）ため、環（ｊ）内のコードは環（ｉ）内のコードよりも高いレベルの特権を有する。
また、環（ｉ）内のコードは環（ｊ）内のコードを呼び出すことができないため、環（ｊ）内のコードは環（ｉ）内のコードから保護される。
一実施形態によれば、保護の概念は、情報に関連付けられる特権のレベルを、情報に与えられる保護タイプから切り離すことによって拡張される。
【００２４】
図２Ａは、本発明の実施形態による、コードのコンパイル部分および連係編集部分に関する、例示的なコンピュータシステムのブロック図である。
図２Ａのブロックは図示とは別様に構成することが可能であり、また本明細書において説明しない追加の特徴を実施することが可能である。
【００２５】
本発明の一実施形態によれば、コードおよび／またはデータの部分をドメインに分割し、ドメイン属性を使用して保護タイプを規定することにより、保護が特権から切り離される。
たとえば、ソフトウェアシステム２００Ａは、ドメイン１〜９に分割されたコード部分（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ、Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ、Ｃ７Ａ、Ｃ８Ａ、Ｃ９Ａ）およびデータ（Ｄ１Ａ、Ｄ２Ａ、Ｄ３Ａ、Ｄ４Ａ、Ｄ５Ａ、Ｄ６Ａ、Ｄ７Ａ、Ｄ８Ａ、Ｄ９Ａ）を含む。
ソフトウェアシステム２００Ａは、ドメイン属性等、保護タイプを規定する情報を受け取ることができるユーザインタフェース２４０Ａ、コンパイラ２１０Ａ、連係エディタ２２０Ａ、およびエグゼキュータブル（executable）２３０Ａをさらに含む。
【００２６】
本発明の別の実施形態では、ユーザインタフェース２４０Ａは保護タイプを記述した情報を受け取ることができる。
たとえば、ユーザインタフェース２４０Ａは、ドメイン２のコード（Ｃ２Ａ）がドメイン１のコード（Ｃ１Ａ）を呼び出すことができることを指定するドメイン属性を受け取ることができる。
ユーザインタフェース２４０Ａが、その他のドメイン３〜９がコード（Ｃ１Ａ）を呼び出すことができることを指定した情報を受け取らない場合、コードＣ１Ａは、コードＣ１Ａを呼び出すドメイン３〜９のコードから「保護」される。
ドメイン属性について以下より詳細に説明する。
【００２７】
さらに別の一実施形態では、ユーザインタフェース２４０Ａは、保護タイプとコード部分との間の関係を記述した情報を受け取る。
例を続けると、ユーザインタフェース２４０Ａが、ドメイン２のコード（Ｃ２Ａ）がドメイン１のコード（Ｃ１Ａ）を呼び出すことができることを指定した情報を受け取る場合、ドメイン１とドメイン２の間の関係が記述される。
さらに、ユーザインタフェース２４０Ａが受け取った情報は、ドメイン２とその他のドメイン３〜９との間の関係、たとえば、ドメイン２のコード（Ｃ２Ａ）がその他のドメイン（３〜９）のコード（Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ、Ｃ７Ａ、Ｃ８Ａ、Ｃ９Ａ）を呼び出すことができないことも指定する。
【００２８】
Ｍｕｌｔｉｃｓアーキテクチャでは、環内のコードと信頼度レベルを通してコードに与えられる保護との間の関係は線形である。
しかし、本発明の一実施形態では、保護タイプとコード部分との間の関係は線形である必要がない。
例を続けると、ユーザインタフェース２４０Ａが、ドメイン３のコードＣ３Ａがドメイン４のコードＣ４Ａを呼び出すことができることを指定した情報も受け取る場合、どのコードがその他のコードＣ１Ａ〜Ｃ４Ａを呼び出すことができるかについて、ドメイン１〜４のコードＣ１Ａ〜Ｃ４Ａの間に線形の関係はない。
【００２９】
アプリケーションコードをドメイン等の部分に分割し、ドメイン属性等の保護タイプをこれらコード部分に関連付けることにより、本発明の実施形態は特権を保護から切り離す。
したがって、より明らかになるように、コード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ、Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ、Ｃ７Ａ、Ｃ８Ａ、Ｃ９Ａ）がユーザレベル等の低いレベルの特権で実行されている間に、同時に、コンテキスト切り替えを回避し、カーネルの安定性を保ち、アプリケーションプログラム開発者がアプリケーションコードをカーネルに置くことに対する承認をカーネルプログラム開発者から得る必要性をなくすことによってオーバーヘッドを低減しながら、コード（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ、Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ、Ｃ７Ａ、Ｃ８Ａ、Ｃ９Ａ）およびデータ（Ｄ１Ａ、Ｄ２Ａ、Ｄ３Ａ、Ｄ４Ａ、Ｄ５Ａ、Ｄ６Ａ、Ｄ７Ａ、Ｄ８Ａ、Ｄ９Ａ）に高いレベルの保護を提供することができる。
【００３０】
図２Ａに示すように、コンパイラ２１０Ａがコード部分（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ、Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ、Ｃ７Ａ、Ｃ８Ａ、Ｃ９Ａ）およびデータ（Ｄ１Ａ、Ｄ２Ａ、Ｄ３Ａ、Ｄ４Ａ、Ｄ５Ａ、Ｄ６Ａ、Ｄ７Ａ、Ｄ８Ａ、Ｄ９Ａ）をコンパイルし、連係エディタ２２０Ａが編集して、エグゼキュータブル２３０Ａを生成する。
本実施形態によれば、連係エディタ２２０Ａは、保護タイプを記述した情報および関係を記述した情報をコード部分（Ｃ１Ａ、Ｃ２Ａ、Ｃ３Ａ、Ｃ４Ａ、Ｃ５Ａ、Ｃ６Ａ、Ｃ７Ａ、Ｃ８Ａ、Ｃ９Ａ）に関連付ける。
例を続けると、より詳細に説明するように、連係エディタ２２０Ａは、コードＣ２Ａおよび／またはＣ１Ａのエグゼキュータブルのヘッダにおいて、ドメイン２のコード（Ｃ２Ａ）がドメイン１のコード（Ｃ１Ａ）を呼び出すことができることを記述した情報を記憶することができる。
【００３１】
コードがコンパイルされ連係編集されたコンピュータと同じコンピュータで実行されない場合がある。
たとえば、ソフトウェアシステム２００Ａでコンパイルされ連係編集されたエグゼキュータブル２３０Ａが別のコンピュータで実行される場合がある。
【００３２】
図２Ｂは、本発明の実施形態による、コード部分を実行する例示的なソフトウェアシステムのブロック図である。
図２Ｂのブロックは図示とは別様に構成することが可能であり、また本明細書において説明しない追加の特徴を実施することが可能である。
図２Ａに示すエグゼキュータブル２３０Ａは、図２Ｂに示すように、ソフトウェアシステム２００Ｂで実行することが可能である。
【００３３】
ソフトウェアシステム２００Ｂは、カーネル２４０Ｂおよびユーザレベル２５０Ｂの、ドメイン１〜９に分割されたコード（Ｃ１Ｂ、Ｃ２Ｂ、Ｃ３Ｂ、Ｃ４Ｂ、Ｃ５Ｂ、Ｃ６Ｂ、Ｃ７Ｂ、Ｃ８Ｂ、Ｃ９Ｂ）およびデータ（Ｄ１Ｂ、Ｄ２Ｂ、Ｄ３Ｂ、Ｄ４Ｂ、Ｄ５Ｂ、Ｄ６Ｂ、Ｄ７Ｂ、Ｄ８Ｂ、Ｄ９Ｂ）を示す。
ソフトウェアシステム２００Ｂは、コード部分（Ｃ１Ｂ、Ｃ２Ｂ、Ｃ３Ｂ、Ｃ４Ｂ、Ｃ５Ｂ、Ｃ６Ｂ、Ｃ７Ｂ、Ｃ８Ｂ、Ｃ９Ｂ）およびデータ（Ｄ１Ｂ、Ｄ２Ｂ、Ｄ３Ｂ、Ｄ４Ｂ、Ｄ５Ｂ、Ｄ６Ｂ、Ｄ７Ｂ、Ｄ８Ｂ、Ｄ９Ｂ）を図２Ａのエグゼキュータブル２３０Ａからユーザレベル２５０Ｂにロードする、カーネル２４０Ｂ内のローダ２７０Ｂも含む。
メモリマネージャ２６０Ｂもカーネル２４０Ｂ内に常駐する。
メモリマネージャ２６０Ｂは、コード（Ｃ１Ｂ、Ｃ２Ｂ、Ｃ３Ｂ、Ｃ４Ｂ、Ｃ５Ｂ、Ｃ６Ｂ、Ｃ７Ｂ、Ｃ８Ｂ、Ｃ９Ｂ）およびデータ（Ｄ１Ｂ、Ｄ２Ｂ、Ｄ３Ｂ、Ｄ４Ｂ、Ｄ５Ｂ、Ｄ６Ｂ、Ｄ７Ｂ、Ｄ８Ｂ、Ｄ９Ｂ）がアクセスされる際に、コード（Ｃ１Ｂ、Ｃ２Ｂ、Ｃ３Ｂ、Ｃ４Ｂ、Ｃ５Ｂ、Ｃ６Ｂ、Ｃ７Ｂ、Ｃ８Ｂ、Ｃ９Ｂ）およびデータ（Ｄ１Ｂ、Ｄ２Ｂ、Ｄ３Ｂ、Ｄ４Ｂ、Ｄ５Ｂ、Ｄ６Ｂ、Ｄ７Ｂ、Ｄ８Ｂ、Ｄ９Ｂ）の主記憶装置に対してのページインおよびページアウトを行う。
【００３４】
本発明は、一実施形態において、コード部分をコンピュータシステムの同じ特権レベルで実行できるようにする。
例を続けると、コード部分（Ｃ１Ｂ、Ｃ２Ｂ、Ｃ３Ｂ、Ｃ４Ｂ、Ｃ５Ｂ、Ｃ６Ｂ、Ｃ７Ｂ、Ｃ８Ｂ、Ｃ９Ｂ）およびデータ（Ｄ１Ｂ、Ｄ２Ｂ、Ｄ３Ｂ、Ｄ４Ｂ、Ｄ５Ｂ、Ｄ６Ｂ、Ｄ７Ｂ、Ｄ８Ｂ、Ｄ９Ｂ）はアプリケーションのものであり、したがってユーザレベル２５０Ｂで実行することができる。
【００３５】
一実施形態によれば、ローダ２７０Ｂは、保護タイプを記述した情報および関係を記述した情報をコード部分から抽出する。
例を続けると、ローダ２７０Ｂは、ドメイン２のコードＣ２Ｂがドメイン１のコードＣ１Ｂを呼び出すことができることを記述した情報を、図２Ａの連係エディタ２２０Ａが配置したコードＣ２Ｂのエグゼキュータブルのヘッダから抽出することができる。
【００３６】
別の実施形態では、メモリマネージャ２６０Ｂは、保護タイプを記述した情報に基づいて、コード部分による他のコード部分へのアクセスが許可されているか否かを判断する。
例を続けると、コードＣ１Ｂに関連する保護タイプは、コードＣ２Ｂを呼び出すことができることを示す。
しかし、コードＣ２Ｂに関連する保護タイプは、コードＣ１ＢによるコードＣ２Ｂの呼び出しを許可しないことを示す場合がある。
コードＣ１ＢがコードＣ２Ｂを呼び出すと、メモリマネージャ２６０Ｂは、より詳細に以下説明するように、コードＣ１ＢおよびＣ２Ｂに関連する保護タイプを比較して、コードＣ１ＢによるコードＣ２Ｂの呼び出しを許可しないことを決定することができる。
【００３７】
本発明のさらに別の実施形態では、コード部分が互いを呼び出す際にコンテキスト切り替えを行う必要はない。
たとえば、図２Ｂを参照すると、コードＣ１ＢがコードＣ２Ｂを呼び出す場合、それぞれの保護タイプによりＣ１ＢがＣ２Ｂを呼び出し可能であることが示されるため、コンテキスト切り替えを必要としなくてよい。
したがって、大量のレジスタを保存し復元する際のオーバーヘッドが本実施形態によって回避される。
【００３８】
また、本発明の一実施形態では、保護タイプに関連するいくつかの値をレジスタに記憶することができる。
これら値は、ドメイン間の実行制御切り替え（以下「ドメイン間切り替え」と呼ぶ）として記憶し復元する必要があり得る。
たとえば、コードＣ１ＢがコードＣ２Ｂを呼び出す場合、レジスタをドメイン２に関連するドメイン属性の１つまたは複数の値で初期化することができるように、ドメイン１に関連する１つまたは複数のドメイン属性の値を含むレジスタの内容を保存することができる。
コードＣ２Ｂに戻ると、レジスタの保存されている内容を復元することができる。
ドメイン間切り替えは、大量のレジスタの保存および復元が行われていないため、コンテキスト切り替えが必要とするオーバーヘッドを必要としない。
【００３９】
本発明の一実施形態では、保護タイプはドメイン間切り替えが必要か否かを指定する。
例を続けると、より詳細に説明するように、コードＣ２Ａに関連する保護タイプは、コードＣ２ＡがコードＣ１Ａを呼び出す際にドメイン間切り替えが必要であることを指定することができ、コードＣ３Ａに関連する保護タイプは、コードＣ３ＡがコードＣ４Ａを呼び出す際にドメイン間切り替えが必要ないことを指定することができる。
【００４０】
［ドメイン属性］
一実施形態によれば、保護タイプはドメイン属性によって規定される。
これらドメイン属性の例としては、ドメイン識別子、秘密鍵、コード共有鍵、データ共有鍵、他許可鍵、および他アクセス鍵が挙げられるがこれらに限定されない。
以下より詳細に説明するように、ドメイン属性のいくつかはリストとして指定することができる。
たとえば、より詳細に説明するように、いくつかの鍵は、コード共有鍵リストの形で他のドメインのコードを共有する特定のドメインに関連付けることができる。
【００４１】
例示を目的として、以下の説明では図２Ｂに示す構造を参照する。
【００４２】
一実施形態によれば、ドメイン識別子は特定のドメインに一意の値を指定する。
たとえば、ドメイン１〜９はそれぞれ一意のドメイン識別子ＰＤ−ｉｄ１〜ＰＤ−ｉｄ９を有することができる。
これらドメイン識別子を使用して、ドメイン１〜９に関連するコード（Ｃ１Ｂ、Ｃ２Ｂ、Ｃ３Ｂ、Ｃ４Ｂ、Ｃ５Ｂ、Ｃ６Ｂ、Ｃ７Ｂ、Ｃ８Ｂ、Ｃ９Ｂ）を実行した結果行われるプロセスを識別することができる。
【００４３】
別の実施形態では、秘密鍵はプロセスのユーザコンテキスト毎に一意の保護鍵、たとえば、特定のドメインを同時に使用する各ユーザコンテキストを保護する一意の値を指定する。
【００４４】
さらに別の実施形態では、コード共有鍵は、特定のドメインが別のドメインに関連するコードにアクセスするために使用しなければならない値を指定する。
たとえば、値ＰＫ５を、ドメイン１がドメイン６のコードＣ６Ｂにアクセスするために使用しなければならないコード共有鍵として指定することができる。
【００４５】
また、本発明の一実施形態では、コード共有鍵を使用してコードにアクセスする際にドメイン間切り替えを行う必要がない。
例を続けると、制御権がドメイン６のコードＣ６Ｂの実行とドメイン１のコードＣ１Ｂの実行との間で切り替える際にドメイン間切り替えを行う必要がない。
【００４６】
さらに別の実施形態によれば、ドメイン識別子およびコード共有鍵の対が特定のドメインに関連付けられて、指定されたドメインが特定のドメインにアクセスするために使用しなければならない鍵を示す。
例を続けると、ドメイン識別子およびコード共有鍵の対「ＰＤ−ｉｄ１／ＰＫ５」をドメイン６に関連付けることで、ドメイン１（たとえば、ＰＤ−ｉｄ１のドメイン）がドメイン１のコードＣ１Ｂにアクセスする際にコード共有鍵ＰＫ５を使用しなければならないことを示す。
【００４７】
一実施形態によれば、ドメイン識別子およびコード共有鍵のリスト（以下「コード共有鍵リスト」と呼ぶ）が特定のドメインに関連付けられて、指定されたドメインが特定のドメインのコードにアクセスするために使用しなければならない鍵を示す。
例を続けると、コード共有鍵リスト「ＰＤ−ｉｄ１／ＰＫ５：ＰＤ−ｉｄ２／ＰＫ５：ＰＤ−ｉｄ３／ＰＫ５」は、ドメイン６に関連し得る、コロンで区切られた３つのドメイン識別子およびコード共有鍵の対を含み、ドメイン１、ドメイン２、およびドメイン３がドメイン６のコードＣ６ＢにアクセスするためにＰＫ５を使用しなければならないことを示す。
【００４８】
別の実施形態では、コード共有鍵とドメイン識別子の対「＊／ＰＫ５」をドメイン６に関連付けて、他のすべてのドメインがコードＣ５Ｂにアクセスするためにコード共有鍵ＰＫ５を使用しなければならないことを示すことができる。
【００４９】
別の実施形態では、コード共有鍵は、特定のドメインが別のドメインに関連するデータにアクセスするために使用しなければならない値を指定する。
たとえば、値ＰＫ６を、ドメイン１がドメイン６のデータＤ６Ｂにアクセスするために使用しなければならないデータ共有鍵として指定することができる。
一実施形態によれば、データ共有鍵を使用してデータにアクセスする際にドメイン間切り替えを行う必要がない。
例を続けると、ドメイン１のコードＣ１Ｂがドメイン６のデータＤ６Ｂにアクセスする際にドメイン間切り替えを行う必要はない。
【００５０】
一実施形態によれば、ドメイン識別子およびデータ共有鍵の対は特定のドメインに関連付けられて、指定されたドメインが特定のドメインのデータにアクセスするために使用しなければならない鍵を示す。
例を続けると、ドメイン識別子およびデータ共有鍵の対「ＰＤ−ｉｄ１／ＰＫ６」をドメイン６等の特定のドメインに関連付けることで、ドメイン１（たとえば、ＰＤ−ｉｄ１のドメイン）がドメイン１のデータＤ１Ｂにアクセスする際にコード共有鍵ＰＫ６を使用しなければならないことを示す。
【００５１】
一実施形態によれば、ドメイン識別子およびデータ共有鍵のリスト（以下「データ共有鍵リスト」と呼ぶ）は特定のドメインに関連付けられて、指定されたドメインが特定のドメインのデータにアクセスするために使用しなければならない鍵を指定する。
例を続けると、データ共有鍵リスト「ＰＤ−ｉｄ１／ＰＫ６：ＰＤ−ｉｄ２／ＰＫ７：ＰＤ−ｉｄ４／ＰＫ８」は、ドメイン６に関連し得る、コロンで区切られた３つのドメイン識別子およびデータ共有鍵の対を含み、ドメイン１〜４がドメイン６のデータＤ６Ｂにアクセスするために鍵ＰＫ６、ＰＫ７、ＰＫ８をそれぞれ使用しなければならないことを示す。
【００５２】
一実施形態によれば、「＊／ＰＫ９」等のドメイン識別子およびデータ共有鍵の対をドメイン６等のドメインに関連付けて、他のすべてのドメイン、たとえば「＊」が、Ｄ５Ｂ等のデータにアクセスするためにＰＫ９等のデータ共有鍵を使用しなければならないことを示すことができる。
【００５３】
一実施形態では、他許可鍵は、特定のドメインが、ドメイン間切り替えを行う特定のドメインと併せて別のドメインに関連付けられたコードにアクセスするために使用しなければならない値を指定する。
たとえば、「ＰＤ−ｉｄ５：ＰＤ−ｉｄ６」をドメイン３に関連付けることで、ドメイン５およびドメイン６のコード（Ｃ５Ｂ、Ｃ６Ｂ）がドメイン３のコードＣ３Ｂにアクセスするために、ドメイン間切り替えを行わなければならないことを示す。
一実施形態によれば、ドメイン識別子および他許可鍵の対のリストを特定のドメインに関連付けることができる。
たとえば、「ＰＤ−ｉｄ５／ＰＫ３：ＰＤ−ｉｄ６／ＰＫ３」をドメイン３に関連付けることで、ドメイン５およびドメイン６のコードが鍵ＰＫ３を使用してドメイン３のコードにアクセス可能であることを示す。
【００５４】
さらに別の実施形態では、他アクセス鍵は、別のドメインの代わりに特定のドメインに関連付けられたコードへのアクセスを要求するために使用される値を指定する。
たとえば、ＰＫ８を、ドメイン１がドメイン８のコードＣ８Ｂにアクセスするために使用したい鍵として指定することができる。
一実施形態によれば、ドメイン識別子および他アクセス鍵の対のリストを特定のドメインに関連付けることができる。
たとえば、「ＰＤ−ｉｄ８／ＰＫ８：ＰＤ−ｉｄ９／ＰＫ９」をドメイン１に関連付けることで、コードＣ１Ｂが各鍵ＰＫ８およびＰＫ９を使用してコードＣ８ＢおよびＣ９Ｂにアクセスしたいことを示す。
【００５５】
また、一実施形態では、ターゲットドメインのコード共有鍵およびデータ共有鍵が要求側ドメインの他許可鍵と比較されて、要求側ドメインがターゲットドメインのコードにアクセス可能であるか否かが判断される。
例を続けると、連係エディタ２７０Ｂが要求側ドメイン１の他許可鍵「ＰＤ−ｉｄ８／ＰＫ８：ＰＤ−ｉｄ９／ＰＫ９」をターゲットドメイン（たとえば、ドメイン８およびドメイン９）のコード共有鍵およびデータ共有鍵と比較することができる。
たとえば、ドメイン１がＰＫ８を使用してドメイン８のコードにアクセスすることができることを示すコード共有鍵をドメイン８が有する場合、コードＣ１ＢによるコードＣ８Ｂへのアクセスは許可される。
【００５６】
［Ｉｔａｎｉｕｍ（イタニウム）アーキテクチャでの実施形態］
いくつかのコンピュータアーキテクチャは、ページを許可のないアクセスから保護する（「ページレベル保護」としても知られる）。
たとえば、各ページは関連付けられた鍵を有することができる。
そのページへのアクセスを要求するコードはいずれも、そのページへのアクセス許可を得るためにその鍵を有さなければならない。
コードがその鍵を使用してページにアクセスする場合、コードによるページへのアクセスは許可される。
その他の場合、コードによるそのページへのアクセスは拒絶される。
【００５７】
一実施形態によれば、本発明はＩｎｔｅｌのＩｔａｎｉｕｍプロセッサファミリ（ＩＰＦ）アーキテクチャならびに大半の当世のマイクロプロセッサで実施することができる。
ＩＰＦではメモリのページは、ページの鍵を、プログラムまたはＤＬＬの形の、特定のドメインに関連する現在実行中のコードの属性と比較することにより、ハードウェアにより実施されるそれ自体の保護属性を鍵の形で有する。
たとえば、一実施形態によれば、ＩＰＦの保護鍵レジスタ（ＰＫＲ）は、以下より詳細に説明するように、現在実行されているコードのドメインにマッピングされるドメイン属性の値を含むことができる。
ＰＫＲは、制御権が、「ドメイン間切り替え」としても知られているコード部分の間で切り替えられると、ドメイン属性の値に初期化される。
【００５８】
たとえば、ドメイン１のコードが実行されているとき、ＰＫＲはドメイン１に関連するドメイン属性の値を含むことができる。
制御権がドメイン２等の別のドメインに切り替わると、ＰＫＲの内容を記憶することができ、ＰＫＲを、ドメイン２に関連するドメイン属性の値で初期化することができる。
制御権が折り返しドメイン１のコードに切り替えられると、今はドメイン２に関連するドメイン属性の値を含むＰＫＲの内容が記憶され、ＰＫＲは折り返し、ドメイン１に関連するドメイン属性の値で再び初期化される。
【００５９】
さらに別の実施形態によれば、ＰＫＲは、中でも特に、実行されているコードまたはデータのドメインに関連する秘密鍵属性の値を含む。
たとえば、コードＣ１Ｂが実行されているとき、ドメイン１に関連する秘密鍵属性の値をＰＫＲに記憶することができる。
【００６０】
一実施形態によれば、ＩＰＦアーキテクチャは、コード部分がページへのアクセスを要求したときに、ＰＫＲ内のドメイン属性の値をページに関連する鍵と比較する。
ページの鍵がＰＫＲ内の値の中にある場合、アクセスは認可され、その他の場合、アクセスは拒絶される。
【００６１】
さらに別の実施形態によれば、本明細書においてすでに考察したように、リンカはＤＬＬまたはプログラム値をドメイン属性に割り当てることができる。
一実施形態によれば、連係編集中、他アクセス鍵は、リンカにより解析されるウィッシュリストである。
或るコード部分の他アクセス鍵の値を他のコード部分に関連する保護タイプと比較するに際して、リンカは他アクセス鍵の値を変更することができる。
たとえば、ドメイン１は、ＰＫ８を使用してコードＣ８Ａにアクセスしたいことを他アクセス鍵において指定するが、ドメイン８はコード共有鍵において、ドメイン１のコードＣ１ＡがＣ８Ａを呼び出すことができないことを指定する場合、リンカはドメイン１の他アクセス鍵を変更することができる。
【００６２】
また、さらに別の実施形態では、リンカは、コードがドメイン間切り替えを通して他のドメインのコードにより呼び出される際にアクセスされる、あらゆるドメインのコード内の手順にスタブを生成することができる。
【００６３】
一実施形態によれば、ドメインに関連する大域変数は、各ドメインに関連するドメイン属性によって保護される。
たとえば、これは、ページ境界上の大域変数をグループ化することによって実現することができる。
【００６４】
［動作例］
図３Ａおよび図３Ｂは、本発明の実施形態による、保護を特権から切り離すことによってコンピュータシステムにおいて保護を実行するフローチャート３００を示す。
特定の動作がフローチャート３００において開示されるが、このような動作は例示的なものである。
すなわち、本発明の実施形態は、他の様々な動作またはフローチャート３００に記した動作の変形の実行にも適している。
フローチャート３００における動作は提示された順序とは異なる順序で実行することもでき、フローチャート３００における動作をすべては実行しなくてもよいことが理解される。
フローチャート３００に記された実施形態のすべてまたは一部は、たとえば、コンピュータシステムまたは同様の装置のコンピュータ使用可能媒体に常駐するコンピュータ可読かつコンピュータ実行可能な命令を使用して実施することができる。
【００６５】
例示を目的として、フローチャート３００の考察は図２Ａおよび図２Ｂに示す構造を参照する。
【００６６】
一実施形態によれば、３０２において、保護タイプを記述した情報および保護タイプとコード部分との間の関係を記述した情報が受け取られる。
たとえば、連係エディタ２２０Ａは、ドメインＩＤ、秘密鍵、コード共有鍵リスト、または他アクセスリストに関するドメイン属性を各ドメイン１、４、５に関連付けることができることを示す、以下の表１に示すような情報をユーザから受け取る。
【００６７】
【表１】
2005216305.tif 000003
【００６８】
表１では、保護タイプを記述した情報は、ドメインＩＤドメイン属性に値ＰＤ−ｉｄ１、ＰＤ−ｉｄ４、ＰＤ−ｉｄ５、秘密鍵ドメイン属性に値ＰＫ１、ＰＫ４、ＰＫ５、他アクセス鍵リストドメイン属性に値ＰＫ７、ＰＫ５、コード共有鍵リストドメイン属性にＰＫ４、ＰＫ５を含む。
ドメイン属性他アクセス鍵リストおよびコード共有鍵リストはドメインＩＤと鍵の対の形であるため、保護タイプとコード部分の間の関係を記述した情報がこれら２つのドメイン属性を使用して規定される。
【００６９】
図２Ａおよび図２Ｂには他のドメインも示されているが、簡略化のために、この説明はドメイン１、４、５に限定する。
【００７０】
別の実施形態によれば、３０６において、保護タイプを記述した情報および関係を記述した情報がコード部分に割り当てられる。
たとえば、コードＣ１Ａ、Ｃ４Ａ、Ｃ５Ａがコンパイルされ連係編集されると、連係エディタ２２０Ａは表１に示すドメイン属性の値をコード部分Ｃ１Ａ、Ｃ４Ａ、Ｃ５Ａに関連付け、エグゼキュータブル２３０Ａを生成する。
より具体的には、ドメインＩＤに値ＰＤ−ｉｄ１、秘密鍵にＰＫ１、および他アクセス鍵リストにＰＤ−ｉｄ４／ＰＫ７：ＰＤ−ｉｄ５／ＰＫ５を、コード部分Ｃ１Ａのエグゼキュータブルのヘッダに配置することができる。
表１に示すドメイン４、５のドメイン属性値も同様にしてドメイン４、５に関連付けられる。
【００７１】
或るコード部分の他アクセス鍵リストの値を他のコード部分に関連する保護タイプと比較する際に、連係エディタ２２０Ａは他アクセス鍵の値を変更することができる。
たとえば、連係エディタ２２０Ａはドメイン１の他アクセス鍵リストの値ＰＤ−ｉｄ４／ＰＫ７をドメイン４の秘密鍵の値ＰＫ４と比較し、ドメイン１はＰＫ７を使用してコードＣ４Ｂへのアクセスを要求するが、Ｃ４ＢにはＰＫ４を用いてのみアクセス可能であると判断することができる。
この場合、連係エディタ２２０Ａは値ＰＤ−ｉｄ４／ＰＫ７をＰＤ−ｉｄ４／ＰＫ４に変更することができる。
別法として、連係エディタ２２０Ａは値を変更しなくてもよく、以下より詳細に説明するように、実行時に、ドメイン１のコードＣ１ＢによるコードＣ４Ｂへのアクセスを拒絶することができる。
【００７２】
３０８において、保護タイプを記述した情報が検索される。
たとえば、さらに別の実施形態では、コードＣ１Ｂ、Ｃ４Ｂ、Ｃ５Ｂのエグゼキュータブルを含むエグゼキュータブル２３０Ａは、図２Ｂに示すソフトウェアシステム２００Ｂで実行される。
この場合、ローダ２７０Ｂは、エグゼキュータブル２３０Ａを主記憶装置にロードする間、コード部分Ｃ１Ｂ、Ｃ４Ｂ、Ｃ５Ｂの、表１に示すようなドメイン属性の値をエグゼキュータブルから検索する。
一実施形態によれば、ローダ２７０Ｂはドメイン属性の値をメモリマネージャ２６０Ｂに渡す。
【００７３】
３１０において、別の実施形態によれば、第１のコード部分は第２のコード部分へのアクセスを要求する。
たとえば、図２Ｂを参照すると、コードＣ４Ｂは、コードＣ５Ｂ内の手順を呼び出すことによってコードＣ５Ｂへのアクセスを要求することができる。
【００７４】
一実施形態によれば、判断ボックス３１２において、第１のコード部分による第２のコード部分へのアクセスが許可されているか否かを判断する。
メモリマネージャ２６０Ｂは、コードＣ４ＢがコードＣ５Ｂへのアクセスを要求したことを検出する。
Ｃ４Ａの実行中、ＰＫＲはＰＫ４、ＰＫ５を含む。
ここで、ＰＫ４はドメイン４の秘密鍵の値であり、ドメイン５のコード共有鍵リストは、ドメイン４がＰＫ５を使用してドメイン５からのコードを共有可能であることを指定する。
メモリマネージャ２６０Ｂは、コードＣ４ＡがコードＣ５Ａを呼び出すことができるか否かを判断する。
第１のコード部分による第２のコード部分へのアクセスが許可される場合、動作３１６が実行され、その他の場合、動作３２０が実行される。
【００７５】
３１６において、さらに別の実施形態によれば、第１のコード部分による第２のコード部分へのアクセスが許可される。
たとえば、ＰＫＲは、ドメイン５の秘密鍵の値であるＰＫ５を含むため、コードＣ４ＡによるコードＣ５Ａへのアクセスは許可される。
【００７６】
一実施形態によれば、３２０において、第１のコード部分による第２のコード部分へのアクセスは許可されない。
たとえば、ＰＫＲがＰＫ５を含んでいなかった場合、コードＣ４ＡによるコードＣ５Ａへのアクセスは許可されない。
【００７７】
すでに述べたように、一実施形態では、保護タイプとコード部分との間の関係は線形である必要はない。
しかし、本発明の実施形態では関係が線形である必要はないが、本発明の実施形態は線形関係の実施にもやはり使用することが可能である。
以下、本発明の実施形態を使用して線形の信頼度レベルを使用してＭｕｌｔｉｃｓアーキテクチャを実施する別の動作例について説明する。
【００７８】
【表２】
2005216305.tif 000004
【００７９】
表２を参照すると、一実施形態によれば、ドメイン１、たとえばＰＤ−ｉｄ１のコードを実行する間、ＰＫＲは「ＰＫ１、ＰＫ１１、ＰＫ１２」を含むことができる。
ＰＫＲはＰＫ１を含む。
これは、ＰＫ１がドメイン１の秘密鍵であるためである。
ＰＫＲは、ドメイン１のコード共有鍵リストが、他のすべてのドメイン、たとえば「＊」がＰＫ１１を使用してドメイン１のコードにアクセスすることができることを示すことから、ＰＫ１１を含む。
ＰＫＲは、ドメイン１のデータ共有鍵リストが、他のすべてのドメイン、たとえば「＊」がＰＫ１２を使用してドメイン１のデータにアクセスすることができることを示すことから、ＰＫ１２を含む。
【００８０】
一実施形態によれば、ドメイン２、たとえばＰＤ−ｉｄ２のコードを実行する間、ＰＫＲは「ＰＫ２、ＰＫ３、ＰＫ１１、ＰＫ１２」を含むことができる。
ＰＫＲは、ドメイン２が秘密鍵であることからＰＫ２を含む。
ＰＫＲは、ドメイン３の他アクセス鍵リストが、ドメイン２、たとえばＰＤ−ｉｄ２がＰＫ３を使用してドメイン３のコードにアクセスすることができることを示すことから、ＰＫ３を含む。
ＰＫＲは、ドメイン１のコード共有鍵リストが、他のすべてのドメイン、たとえば「＊」がＰＫ１１を使用してドメイン１のコードにアクセスすることができることを示すことから、ＰＫ１１を含む。
ＰＫＲは、ドメイン１のデータ共有鍵リストが、他のすべてのドメイン、たとえば「＊」がＰＫ１２を使用してドメイン１のデータにアクセスすることができることを示すことから、ＰＫ１２を含む。
【００８１】
一実施形態によれば、ドメイン３のコードを実行する間、ＰＫＲは「ＰＫ３、ＰＫ１１、ＰＫ１２」を含むことができる。
ＰＫＲは、ＰＫ３がドメイン３の秘密鍵であることからＰＫ３を含む。
ＰＫＲは、ドメイン１のコード共有鍵リストが、他のすべてのドメイン、たとえば「＊」がＰＫ１１を使用してドメイン１のコードにアクセスすることができることを示すことから、ＰＫ１１を含む。
ＰＫＲは、ドメイン１のデータ共有鍵リストが、他のすべてのドメイン、たとえば「＊」がＰＫ１２を使用してドメイン１のデータにアクセスすることができることを示すことから、ＰＫ１２を含む。
【００８２】
別の実施形態によれば、コンピュータハードウェアは、ドメイン間切り替えの際に、レジスタがドメイン属性のどんな値を含んでいようと、その内容を保存して復元する。
ＩＰＦアーキテクチャの場合、ハードウェアはドメイン間切り替え中にＰＫＲの内容を保存して復元する。
表２に示す例を続けると、ドメイン１に関連するコードを実行する間、ＰＫＲは「ＰＫ１、ＰＫ１１、ＰＫ１２」を含む。
ドメイン間切り替えがドメイン１とドメイン２の間で行われる場合、値「ＰＫ１、ＰＫ１１、ＰＫ１２」を記憶することができ、ＰＫＲを値「ＰＫ２、ＰＫ３、ＰＫ１１、ＰＫ１２」で初期化することができる。
制御権が折り返しドメイン２のコードからドメイン１のコードに切り替えられると、値「ＰＫ２、ＰＫ３、ＰＫ１１、ＰＫ１２」を記憶することができ、ＰＫＲを「ＰＫ１、ＰＫ１１、ＰＫ１２」値で再び初期化することができる。
【００８３】
表１に環１〜３を示すが、環はＭｕｌｔｉｃｓアーキテクチャのいずれの環であってもよい。
但し、ｍａｉｎ（）は、ＳＱＬ／ＭＸおよびユーザライブラリが常駐する環よりも低い信頼度レベルを有する環であり、ユーザライブラリは、ＳＱＬ／ＭＸおよびｍａｉｎ（）が常駐する環よりも高い信頼度を有する環内にあり、ＳＱＬ／ＭＸは、ｍａｉｎ（）が常駐する環の信頼度とユーザライブラリが常駐する環の信頼度の間の信頼度レベルを有する環内にある。
【００８４】
表２に示すように、本発明の実施形態を使用して、保護タイプとコード部分との間の線形関係を実施することができるが、表１に関連する動作例において説明したように、本発明の実施形態では、保護タイプとコード部分との間の関係が線形である必要はない。
【００８５】
［ハードウェア概観］
図４は、本発明の実施形態を実施することができる例示的なコンピュータシステム４９０を示す。
一般に、コンピュータシステム４９０は、情報を通信するバス４００、バス４００に結合され、情報および命令を処理するプロセッサ４０１、バス４００に結合され、プロセッサ４０１のために情報および命令を記憶するランダムアクセス（揮発性）メモリ（ＲＡＭ）４０２、バス４００に結合され、プロセッサ４０１のための静的な情報および命令を記憶する読み出し専用（不揮発性）メモリ（ＲＯＭ）４０３、バス４００に結合され、情報および命令を記憶する、磁気ディスクまたは光ディスク等のデータ記憶装置４０４およびディスクドライブ、バス４００に結合され、コンピュータユーザに対して情報を表示する、表示装置４０５等のオプションのユーザ出力装置、バス４００に結合され、情報およびコマンド選択をプロセッサ４０１に伝達する、英数字キーおよび機能キーを含む英数字入力装置４０６等のオプションの入力装置、ならびにバス４００に結合され、ユーザ入力情報およびコマンド選択をプロセッサ４０１に伝達する、カーソル制御装置４０７等のオプションのユーザ入力装置を備える。
さらに、オプションの入出力（I／Ｏ）装置４０８を使用してコンピュータシステム４９０が、たとえばネットワークに接続される。
【００８６】
コンピュータシステム４９０と共に利用される表示装置４０５は、液晶装置、陰極線管、またはユーザが認識可能なグラフィック画像および英数字キャラクタの作成に適した他の表示装置であることができる。
カーソル制御装置４０７は、コンピュータユーザが表示装置４０５の表示画面上の可視記号（ポインタ）の二次元での動きを動的に通知できるようにする。
トラックボール、マウス、ジョイスティック、または所与の移動方向または変位様式を通知可能な、英数字入力装置４０６上の特殊キー等を含め、カーソル制御装置の多くの実施形態が当該技術分野において既知である。
カーソル制御装置４０７は、特殊キーおよびキーシーケンスコマンドを使用して、キーボードからの入力を介して指示かつ／またはアクティブ化することができることを理解されたい。
別法として、カーソルは、複数の特に適合されたカーソル指示装置からの入力を介して指示かつ／またはアクティブ化することができる。
【００８７】
本実施形態では、ソフトウェアシステム２００Ａおよび２００Ｂは、コンピュータシステム４９０等のコンピュータシステムで実施することができる。
【００８８】
［結論］
アプリケーションコードをドメイン等の部分に分割し、ドメイン属性等の保護タイプをこれらコード部分に関連付けることにより、本発明の実施形態は特権を保護から切り離す。
したがって、コードがユーザレベル等の低レベルの特権で実行される間に、同時に、コンテキスト切り替えを回避し、カーネルの安定性を保ち、アプリケーションプログラム開発者がアプリケーションコードをカーネルに置くことに対する承認をカーネルプログラム開発者から得る必要性をなくすことによってオーバーヘッドを低減しながら、高いレベルの保護をコードに提供することができる。
【００８９】
拡張および代替
本発明の実施形態の多くはＩＰＦアーキテクチャを使用して説明されたが、実施形態はページレベルの保護を提供するいずれのコンピュータアーキテクチャでも実施することが可能である。
【００９０】
本発明の特定の実施形態についてユーザレベルのコード部分を使用して説明したが、本発明は、異なる保護タイプをカーネルのコード部分に関連付けることにも同様に使用することができる。
【００９１】
ドメイン属性の値をエグゼキュータブルのヘッダに記憶する、本発明の特定の実施形態について説明したが、ドメイン属性の値を記憶する他のメカニズムを使用することも可能である。
たとえば、大半のコンピュータアーキテクチャおよびオペレーティングシステムでは、ドメイン属性の値はデータベースに記憶することができる。
メインフレームで実行されている多重仮想記憶（ＭＶＳ）オペレーティングシステムの場合は、値は別法として仮想記憶アクセスメソッド（ＶＳＡＭ）データセットに記憶することができる。
【００９２】
ドメイン属性の値をエグゼキュータブルのヘッダに保持する、本発明の特定の実施形態について説明したが、ドメイン属性の値を保持する他のメカニズムを使用することも可能である。
たとえば、大半のコンピュータアーキテクチャおよびオペレーティングシステムでは、ドメイン属性の値はデータベースに保持することができる。
メインフレームで実行されている多重仮想記憶（ＭＶＳ）オペレーティングシステムの場合は、値は別法として制御ブロックまたは仮想記憶アクセスメソッド（ＶＳＡＭ）データセットに保持することができる。
【００９３】
保護タイプとコード部分との間の関係がドメインＩＤと鍵の対を使用して指定される、本発明の特定の実施形態について説明したが、データベース等の他のメカニズムもこれらの関係を保持するのに使用することが可能である。
【図面の簡単な説明】
【００９４】
【図１Ａ】アプリケーションの部分がカーネルで実行されるコンピュータシステムのブロック図である（従来技術）。
【図１Ｂ】Ｍｕｌｔｉｃｓアーキテクチャのブロック図である（従来技術）。
【図２Ａ】本発明の実施形態による、アプリケーションコードのコンパイル部分および連係編集部分に関する、例示的なコンピュータシステムのブロック図である。
【図２Ｂ】本発明の実施形態による、カーネルコードおよびアプリケーションコードを両方とも示す、例示的なコンピュータシステムのブロック図である。
【図３Ａ】本発明の実施形態による、保護を特権から切り離すことによりコンピュータシステムのアプリケーション内で保護を行うフローチャートを示す。
【図３Ｂ】本発明の実施形態による、保護を特権から切り離すことによりコンピュータシステムのアプリケーション内で保護を行うフローチャートを示す。
【図４】本発明の実施形態を実施することができる例示的なコンピュータシステムのブロック図を示す。
【符号の説明】
【００９５】
２００Ａ・・・コンピュータシステム，
２１０Ａ・・・コンパイラ，
２２０Ａ・・・連係エディタ，
２３０Ａ・・・エグゼキュータブル，
２４０Ａ・・・ユーザインタフェース，
２４０Ｂ・・・カーネル，
２５０Ｂ・・・ユーザ，
２６０Ｂ・・・メモリマネージャ，
２７０Ｂ・・・ローダ，
４０１・・・プロセッサ，
４０２・・・ＲＡＭ揮発性，
４０３・・・ＲＯＭ不揮発性，
４０４・・・データ記憶装置，
４０５・・・表示装置，
４０６・・・英数字入力，
４０７・・・カーソル制御装置，
４０８・・・I／Ｏ装置，
【図１Ａ】
2005216305.tif 000005
【図１Ｂ】
2005216305.tif 000006
【図２Ａ】
2005216305.tif 000007
【図２Ｂ】
2005216305.tif 000008
【図３Ａ】
2005216305.tif 000009
【図３Ｂ】
2005216305.tif 000010
【図４】
2005216305.tif 000011