(57)【特許請求の範囲】
【請求項１】
方法であって、
実行可能コードに相当するコンテナを受信することと、
前記コンテナを受信したことに応答して、前記コンテナを検証するために、計算環境のメモリ内に存在し、前記計算環境のブートローダによって検証されるコンテナマネージャを実行することと、
前記コンテナマネージャによる前記コンテナの検証後に、前記計算環境のリソースにアクセスする前記コンテナのための許可を判定することと、
前記計算環境の前記リソースに対する前記コンテナのための許可に基づいて、前記計算環境の１つ以上のリソースに対する制御を前記コンテナマネージャから前記コンテナに移すことにより、処理装置によって、前記計算環境の前記１つ以上のリソースにアクセスできるようにすることと、
を含む、方法。
【請求項２】
前記コンテナから第２のコンテナのためのデータを受信することと、
前記データと前記第２のコンテナの識別情報とを前記計算環境の別のメモリに記憶することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記コンテナの実行の終了後に、付加的な実行可能コードに相当する前記第２のコンテナを受信することと、
前記第２のコンテナの識別情報が前記計算環境の別のメモリ内の前記第２のコンテナの識別情報に一致したことに応答して、前記計算環境の前記別のメモリから前記第２のコンテナに前記データを提供することと、
をさらに含む、請求項２に記載の方法。
【請求項４】
前記コンテナマネージャに関連付けられたバージョン番号を受信することと、
前記コンテナマネージャに関連付けられた前記バージョン番号と前記コンテナ内に記憶された前記コンテナマネージャに関連付けられた別のバージョン番号との比較に基づいて前記コンテナを実行することと、
をさらに含む、請求項１に記載の方法。
【請求項５】
前記コンテナから、前記計算環境の外部にあるコンポーネントからデータを受信する要求を受信することと、
データを受信する前記要求の指示を前記計算環境の外部にある前記コンポーネントによってアクセスされる前記計算環境の別のメモリに記憶することと、
をさらに含む、請求項１に記載の方法。
【請求項６】
前記コンテナを実行することと、
前記コンテナの実行後に、前記コンテナに関連付けられた状態情報を前記計算環境の別のメモリに記憶することと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記コンテナの検証は、前記コンテナの暗号署名の検証に相当する、請求項１に記載の方法。
【請求項８】
システムであって、
メモリと、
前記メモリと動作的に結合される処理装置であって、
実行可能コードに相当するコンテナを受信し、
前記コンテナの受信に応答して、前記コンテナを検証するために計算環境の前記メモリ内に存在し、前記計算環境のブートローダによって検証されるコンテナマネージャを実行し、
前記コンテナマネージャによる前記コンテナの検証後に、前記計算環境のリソースにアクセスする前記コンテナのための許可を判定し、
前記計算環境の前記リソースに対する前記コンテナのための許可に基づいて、前記計算環境の１つ以上のリソースに対する制御を前記コンテナマネージャから前記コンテナに移すことにより、前記計算環境の前記１つ以上のリソースにアクセスできるようにする処理装置と、
を備える、システム。
【請求項９】
前記処理装置は、さらに、
前記コンテナから第２のコンテナのためのデータを受信し、
前記データと前記第２のコンテナの識別情報とを前記計算環境の別のメモリに記憶する、
請求項８に記載のシステム。
【請求項１０】
前記処理装置は、さらに、
前記コンテナの実行の終了後に、付加的な実行可能コードに相当する前記第２のコンテナを受信し、
前記第２のコンテナの識別情報が前記計算環境の前記別のメモリ内の前記第２のコンテナの前記識別情報に一致したことに応答して、前記計算環境の前記別のメモリから前記第２のコンテナに前記データを提供する、
請求項９に記載のシステム。
【請求項１１】
前記処理装置は、さらに、
前記コンテナマネージャに関連付けられたバージョン番号を受信し、
前記コンテナマネージャに関連付けられた前記バージョン番号と前記コンテナに記憶された前記コンテナマネージャに関連付けられた別のバージョン番号との比較に基づいて前記コンテナを実行する、
請求項８に記載のシステム。
【請求項１２】
前記処理装置は、さらに、
前記コンテナから、前記計算環境の外部にあるコンポーネントからデータを受信する要求を受信し、
データを受信する前記要求の指示を前記計算環境の外部にある前記コンポーネントによってアクセスされる前記計算環境の前記別のメモリに記憶する、
請求項８に記載のシステム。
【請求項１３】
前記処理装置は、さらに、
前記コンテナを実行し、
前記コンテナの実行後に、前記コンテナに関連付けられた状態情報を前記計算環境の別のメモリに記憶する、
請求項８に記載のシステム。
【請求項１４】
前記コンテナの検証は、前記コンテナの暗号署名の検証に相当する、請求項８に記載のシステム。
【請求項１５】
非一時的なコンピュータ可読媒体であって、
処理装置によって実行されたとき、
実行可能コードに相当するコンテナを受信することと、
前記コンテナを受信したことに応答して、前記コンテナを検証するために、計算環境のメモリ内に存在し、前記計算環境のブートローダによって検証されるコンテナマネージャを実行することと、
前記コンテナマネージャによる前記コンテナの検証後に、前記計算環境のリソースにアクセスする前記コンテナのための許可を判定することと、
前記計算環境の前記リソースに対する前記コンテナのための許可に基づいて、前記計算環境の１つ以上のリソースに対する制御を前記コンテナマネージャから前記コンテナに移すことにより、前記計算環境の前記１つ以上のリソースにアクセスできるようにすることと、
を含む動作を前記処理装置に行わせる命令を含む、非一時的なコンピュータ可読媒体。
【請求項１６】
前記動作は、
前記コンテナから第２のコンテナのためのデータを受信することと、
前記データと前記第２のコンテナの識別情報とを前記計算環境の別のメモリに記憶することと、
をさらに含む、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項１７】
前記動作は、
前記コンテナの実行の終了後に、付加的な実行可能コードに相当する前記第２のコンテナを受信することと、
前記第２のコンテナの識別情報が前記計算環境の前記別のメモリ内の前記第２のコンテナの識別情報に一致したことに応答して、前記計算環境の前記別のメモリから前記第２のコンテナに前記データを提供することと、
をさらに含む、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
前記動作は、
前記コンテナマネージャに関連付けられたバージョン番号を受信することと、
前記コンテナマネージャに関連付けられた前記バージョン番号と前記コンテナ内に記憶された前記コンテナマネージャに関連付けられた別のバージョン番号との比較に基づいて前記コンテナを実行することと、
をさらに含む、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項１９】
前記動作は、
前記コンテナから、前記計算環境の外部にあるコンポーネントからデータを受信する要求を受信することと、
データを受信する前記要求の指示を前記計算環境の外部にある前記コンポーネントによってアクセスされる前記計算環境の別のメモリに記憶することと、
をさらに含む、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項２０】
前記動作は、
前記コンテナを実行することと、
前記コンテナの実行後に、前記コンテナに関連付けられた状態情報を前記計算環境の別のメモリに記憶することと、
をさらに含む、請求項１５に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【図面の簡単な説明】
【０００１】
［0001］  本開示は、本開示の様々な実装についての以下の詳細な説明と添付図面とからより十分に理解されるであろう。
【０００２】
［0002］    
【図１】本開示の一部の実施形態によるブートローダ、コンテナマネージャ、および１つ以上のコンテナを含んでいるセキュア計算環境の実施例を示す図である。［0003］
【図２】一部の実施形態によるセキュア計算環境のアーキテクチャの実施例を示す図である。［0004］
【図３】本開示の一部の実施形態によるセキュア計算環境を提供する方法の実施例のフローチャートである。［0005］
【図４】一部の実施形態によるセキュア計算環境のブートローダを実行する方法の実施例のフローチャートである。［0006］
【図５Ａ】本開示の一部の実施形態によるセキュア計算環境のリソースのタイムシェアリングを提供する方法の実施例のフローチャートである。［0007］
【図５Ｂ】本開示の一部の実施形態によるセキュア計算環境のコンテナマネージャを実行する方法の実施例のフローチャートである。［0008］
【図６】本開示の一部の実施形態によるコンテナマネージャを更新する方法の実施例のフローチャートである。［0009］
【図７】一部の実施形態による１つ以上のコンテナおよびメモリロケーションと相互に作用するコンテナマネージャの実施例を示す図である。［0010］
【図８】本開示の一部の実施形態によるコンテナ間で相互に作用する方法の実施例を示す図である。［0011］
【図９】一部の実施形態によるメモリと相互に作用するコンテナの実施例を示す図である。［0012］
【図１０】一部の実施形態によるセキュア計算環境の外部にあるコンポーネントと相互に作用するコンテナの方法の実施例を示す図である。［0013］
【図１１】本開示の一部の実施形態が動作することがあるコンピュータシステムの実施形態のブロック図を示す図である。
【発明を実施するための形態】
【０００３】
［0014］  本開示の態様は、セキュア計算環境を対象にする。システムまたは装置は、セキュア計算環境を提供するために使用されることがあるブートローダと、コンテナマネージャと、１つ以上のコンテナとを含むことがある。ブートローダは、システムまたは装置の初期化に応答して初期化または実行されることがあるハードウェアベースの状態機械でもよい。ブートローダの実行中に、システムのリード・オンリー・メモリ（ＲＯＭ）などのメモリに記憶された、または、（たとえば、ネットリストによって表現されるような）システムもしくは装置の相互接続を介して記憶された、または、システムもしくは装置上のフラッシュメモリもしくはその他のストレージに記憶されたコンテナマネージャは、ブートローダがセキュア計算環境のための初期化手順を行い、コンテナマネージャを検証した後に、実行されることがある。
【０００４】
［0015］  ブートローダは、コンテナマネージャを検証することがある。検証は、結果をハッシュ化し、期待される結果と比較することを含むことがある。たとえば、ハッシュ化は、ＳＨＡ−２またはＳＨＡ−３の演算などのセキュア・ハッシュ・アルゴリズム（ＳＨＡ）の演算に相当することがある。代替的に、検証は、公開鍵暗号方式を使用するブートローダを含むことがある。たとえば、検証は、楕円曲線暗号デジタル署名（ＥＣＤＳ）の演算に基づくことがある。コンテナマネージャが検証された後、ブートローダは、コンテナマネージャがシステムまたは装置のセキュア計算環境の中の中央処理装置（ＣＰＵ）またはその他の処理装置もしくはハードウェアを制御することを許可することがある。コンテナマネージャは、ある種の機能をセキュアでないユーザコードに対応し、続いて受信されたコンテナに与えるより高いまたは最高の特権をもつシステムまたは装置の中のソフトウェアでもよい。それ故に、ブートローダは、コンテナマネージャを検証し、コンテナマネージャが検証された後に、システムまたは装置のＣＰＵを制御する権限をコンテナマネージャに与えることがある。
【０００５】
［0016］  コンテナマネージャは、コンテナの実行のための枠組みを提供することがある。各コンテナは、（例えば、システムまたは装置の製造後に受信された）実行可能コードまたは命令とシステムまたは装置のある種の機能またはリソースへのアクセス許可とに相当することがある。コンテナマネージャは、システムまたは装置のセキュア計算環境のリソースがコンテナによって共有される、またはタイムシェアリングされるように、順次にコンテナを受信し実行することがある。
【０００６】
［0017］  コンテナマネージャによって提供された枠組みは、コンテナ間の通信または相互作用をさらに促進することがある。たとえば、コンテナマネージャは、第１のコンテナを実行し、第１のコンテナから、プロセス間通信（ＩＰＣ）レジスタまたはメモリに記憶されるべきデータを受信することがある。第１のコンテナは、データを受信する権限が与えられた後続のコンテナの識別情報をコンテナマネージャにさらに指定することがある。コンテナマネージャは、続いて、第１のコンテナから受信されたデータと、受信側コンテナの識別情報（たとえば、データが受信されることが意図された後続のコンテナの識別情報）と、データの発信側（たとえば、第１のコンテナ）の識別情報とをＩＰＣレジスタまたはメモリに記憶することがある。後続のコンテナは、コンテナマネージャによって実行されることがあり、第２のコンテナがコンテナマネージャによって実行されたとき、コンテナマネージャは、データが第２のコンテナの実行中に使用されるように、ＩＰＣレジスタ内に記憶された第１のコンテナからのデータを第２のコンテナに提供することがある。コンテナマネージャは、第２のコンテナの識別情報が受信側コンテナの識別情報とは異なる場合、ＩＰＣレジスタまたはメモリへのアクセスを制限することがある。コンテナマネージャは、発信側コンテナが正しくない識別情報を提供することがないように発信側コンテナ識別情報をＩＰＣ自体のレジスタまたはメモリに記憶することがある。
【０００７】
［0018］  コンテナマネージャは、セキュア計算環境の外部にあるコンポーネントまたはエンティティと通信する機能をコンテナにさらに提供することがある。たとえば、システムは、コンテナからのデータの要求の指示を提供し、セキュア計算環境の外側にある外部エンティティからコンテナのための対応するデータを受信するために使用されることがあるハイレベル・オペレーティング・システム（ＨＬＯＳ）レジスタまたはメモリを含むことがある。たとえば、コンテナは、特定の種類のデータの要求を指示するＨＬＯＳレジスタでの記憶のためデータをコンテナマネージャに送信することがある。外部ソフトウェアアプリケーションまたはコンポーネントは、ＨＬＯＳレジスタにアクセスすることがあり、ＨＬＯＳレジスタが特定の種類のデータの要求を現時点で指示することを確認することがある。これに応じて、外部ソフトウェアアプリケーションまたはコンポーネントは、ＨＬＯＳレジスタのため要求されたデータを提供することがあり、コンテナマネージャは、コンテナが、外部ソフトウェアアプリケーションまたはコンポーネントから受信され、現時点でＨＬＯＳレジスタまたはメモリに記憶されたデータを取り出すことを許可することがある。
【０００８】
［0019］  その上、セキュア計算環境は、コンテナがコンテナマネージャを検証することを許可することがある。たとえば、ブートローダは、ブートローダが実行されたとき、コンテナマネージャのバージョン番号または他のこのような識別情報を提供することがあり、バージョン番号を特定のレジスタまたはメモリロケーションに記憶することがある。コンテナマネージャによって実行されたコンテナは、コンテナマネージャのバージョン番号を検証する命令を含むことがある。たとえば、コンテナは、特定のレジスタまたはメモリロケーション内のバージョン番号にアクセスできるようにされることがあり、コンテナマネージャのバージョン番号に基づいて実行されることがある。たとえば、コンテナマネージャのバージョン番号がコンテナの命令から認可されたコンテナマネージャのバージョン番号と一致する場合、コンテナが実行されることがある。しかしながら、コンテナマネージャのバージョン番号がコンテナの命令から認可されたコンテナマネージャのバージョン番号と一致しない場合、コンテナは、この命令の動作をさらに実行しない、または、行わないことがある。
【０００９】
［0020］  その結果、本開示の態様は、システムまたは装置のブートローダがコンテナの形をしたユーザコードの実行のための枠組みをさらに提供することがあるコンテナマネージャを検証することがあるセキュア計算環境を提供することがある。その上、コンテナは、コンテナの実行がセキュア計算環境において行われるようにコンテナマネージャをさらに検証することがある。
【００１０】
［0021］  図１は、ブートローダ１１０と、リード・オンリー・メモリ１２０に記憶されたコンテナマネージャ１２１と、１つ以上のコンテナ１３０とを含んでいるセキュア計算環境１００の実施例を示す。概して、セキュア計算環境１００は、１つ以上のコンテナ１３０のためのセキュア計算環境を提供するシステムまたは装置の一部に相当することがある。
【００１１】
［0022］  図１に表された通り、セキュア計算環境１００は、セキュア計算環境１００を含む装置のリード・オンリー・メモリ（ＲＯＭ）１２０に記憶されたコンテナマネージャ１２１と相互に作用するブートローダ１１０を含むことがある。ブートローダ１１０は、セキュア計算環境１００、または、セキュア計算環境１００を含む装置の初期化（すなわち、パワーアップ）に応答して実行されるハードウェアベースの状態機械でもよい。さらに、ブートローダ１１０は、セキュア計算環境１００の一連のパワーオン・セルフテスト（たとえば、パワーオンまたはスタートアップの直後に行われる手順）を行うことがある。ブートローダ１１０によって行われるセルフテストは、セキュア計算環境１００のハードウェアコンポーネントの検証または性能テストを含むことがある。たとえば、セルフテストは、セキュア計算環境１００の一部分であるＣＰＵまたは処理装置のテストを含むことがある。ブートローダ１１０は、セキュア計算環境１００のＲＯＭ１２０の内容の完全性チェックをさらに行うことがある。たとえば、ブートローダ１１０は、コンテナマネージャ１２１の内容を取り出し、コンテナマネージャ１２１の内容の完全性チェック値を計算することにより、コンテナマネージャ１２１の検証または完全性チェックを行うことがある。計算された完全性チェック値は、コンテナマネージャ１２１の真正性または検証性を判定するために別の記憶された完全性チェック値と比較されることがある。完全性チェック値は、任意のサイズのデジタルデータ（たとえば、コンテナマネージャ１２１の内容）を固定サイズのデジタルデータ（たとえば、計算された完全性チェック値）にマップするために使用されるハッシュ関数に基づいているハッシュ値に相当することがある。さらに、ブートローダの実行に関する詳細は、図３と併せて説明される。
【００１２】
［0023］  セルフテストの正常終了後、ブートローラ１１０は、ＲＯＭ１２０に記憶されたコンテナマネージャ１２１を起動または実行することがある。たとえば、ブートローダ１１０は、セキュア計算環境１００のＣＰＵとＲＯＭ１２０またはその他のメモリとを検証した後、コンテナマネージャ１２１を起動することがある。セキュア計算環境１００のＣＰＵまたはその他のハードウェアリソースの制御は、その後、ブートローラ１１０からコンテナマネージャ１２１に提供されることがある。一部の実施形態では、コンテナマネージャ１２１は、セキュア計算環境のハードウェアリソースおよびソフトウェアリソースに機能性を与える信頼できる組み込み軽量ソフトウェアに相当することがある。たとえば、コンテナマネージャ１２１は、セキュア計算環境１００のソフトウェアリソースまたはハードウェアリソースにアクセスするシステムコールなどの機能性を定義するアプリケーション・プログラミング・インターフェース（ＡＰＩ）を提供することがある。コンテナマネージャ１２１は、セキュア計算環境１００の外部から受信された、信頼できないユーザコードに相当する１つ以上のコンテナ１３０をさらに受信することがある。コンテナマネージャ１２１は、受信されたコンテナ１３０がセキュア計算環境１００のリソースにアクセスする許可を検証し、受信されたコンテナ１３０の真正性を検証し、コンテナ１３０の間の通信、および、コンテナ１３０とセキュア計算環境１００の外部にある外部エンティティまたはコンポーネントとの間の通信の枠組みを提供することがある。コンテナマネージャ１２１に関するさらなる詳細は、図５Ａから図１０と併せて開示される。
【００１３】
［0024］  コンテナマネージャ１２１は、コンテナ１３０のうちの１つの受信に応答して、または、セキュア計算環境１００のリソースにアクセスするシステムコールを実行するコンテナ１３０のうちの１つに応答して実行されることがある。受信されたコンテナの検証後、コンテナマネージャ１２１は、受信されたコンテナがセキュア計算環境１００のＣＰＵまたは処理装置を制御できるようにすることがある。１つ以上のコンテナ１３０の各々は、セキュア計算環境１００のリソースにアクセスする命令および／またはデータを提供する信頼できないユーザコードに相当することもある。図５Ａに関連してさらに詳細に記載された通り、コンテナ１３０は、セキュア計算環境１００のリソースがコンテナ１３０の間でタイムシェアリングされるように順番に受信されることがある。
【００１４】
［0025］  図２は、セキュア計算環境のアーキテクチャ２００の実施例を示す。概して、アーキテクチャ２００は、図１のブートローダ１１０に相当するブートローダ２１０と、図１のコンテナマネージャ１２１に相当するコンテナマネージャ２５０と、図１の１つ以上のコンテナ１３０に相当するコンテナ２４０とを含むことがある。
【００１５】
［0026］  図２に表された通り、アーキテクチャ２００は、ＣＰＵ２２０またはその他のこのような処理装置を制御するブートローダ２１０と、ＲＯＭまたはその他のこのようなメモリに記憶されたコンテナマネージャ２５０と、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）またはその他のこのようなメモリに記憶されたコンテナ２４０とを含むことがある。メモリバス２３０は、コンテナ２４０およびコンテナマネージャ２５０をアーキテクチャ２００のブートローダ２１０および他のリソース２３２Ａ〜２３２Ｈに結合することがある。
【００１６】
［0027］  アーキテクチャ２００は、アーキテクチャ２００のリソース２３２Ａ〜２３２Ｈへの制御またはアクセスを強化するリソース・エンフォースメント・コア２６０を含むことがある。このようなリソースは、ワン・タイム・プログラマブル（ＯＴＰ）メモリ書き込みまたは焼き付け、ＯＴＰリード、フィーチャー読み取り、フィーチャー書き込み、暗号鍵の読み取り、暗号鍵の更新、汎用入力／出力（ＧＰＩＯ）読み取り、ＧＰＩＯ書き込み、ＣＰＵ２２０を用いてまたはＣＰＵ２２０上でコードまたは命令を実行する能力、ＳＲＡＭの実行可能領域へのアクセス、このようなメモリの特定の部分への読み取りアクセス、このようなメモリの特定の部分への書き込みアクセスなどを含むことがあるが、これらに限定されることはない。アクセスは、細粒化されることがある。たとえば、リソース・エンフォースメント・コアは、ＯＴＰの１バイトへの書き込みアクセスを許可するが、次のバイトへのアクセスを許可しない。その他のリソースは、ＲＯＭに記憶されたコア２５１の機能性へのアクセスを含むことがある。このようなコア２５１は、楕円曲線暗号（ＥＣＣ）鍵生成、ＥＣＣ署名検証、ＥＣＣ署名生成、暗号鍵交換、ＲＳＡ鍵生成、ＲＳＡ暗号または暗号解読、次世代暗号標準（ＡＥＳ）暗号または暗号解読、ＳＨＡ−２またはＳＨＡ−３機能性などに相当することがある。一部の実施形態では、リソース・エンフォースメント・コア２６０は、各コンテナ２４０の実行前にコンテナマネージャ２５０によってプログラムされることがある。たとえば、コンテナ２４０は、フィーチャーまたはリソース２３２Ａ〜２３２Ｈの許可の識別情報を含むことがあり、コンテナマネージャ２５０は、実行されるべきコンテナ２４０による許可に基づいて、リソース・エンフォースメント・コア２６０のレジスタまたはメモリをプログラムすることがある。このようにして、リソース・エンフォースメント・コア２６０は、コンテナマネージャ２４０によって検証されたコンテナ２４０のためリソースバス２３１を用いてリソース２３２Ａ〜２３２Ｈへのアクセスを強制することがある。一部の実施形態では、リソース２３２Ａ〜２３２Ｈのうちの１つ以上は、アーキテクチャ２００を含む装置の外部コンポーネントに結合されることがある。たとえば、リソース２３２Ｂは、別のシステム・オン・チップ（ＳｏＣ）、ＯＴＰメモリ、乱数発生器コンポーネント、または、セキュア計算環境の外部にある他のこのようなコンポーネントに結合されることがある。
【００１７】
［0028］  図３は、セキュア計算環境を提供する方法３００の実施例のフローチャートである。概して、方法３００は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるもしくは実行される命令）、またはこれらの組み合わせを備えることがある処理ロジックによって行われることがある。一部の実施形態では、方法３００は、図１または図２のブートローダ１１０または２１０と、図１または図２のコンテナマネージャ１２１または２５０と、図１または図２のコンテナ１３０または２４０との間の実行フローに相当する。
【００１８】
［0029］  図３に表された通り、方法３００は、処理ロジックがセキュア計算環境を含むシステムまたは装置の初期化に応答してセキュア計算環境の検証を行うことから始まることがある（ブロック３１０）。たとえば、ブートローダは、ハードウェアリソースおよびコンテナマネージャを検証するセキュア計算環境のセルフテストを行うことがある。処理ロジックは、セキュア計算環境の検証後にＣＰＵがコンテナマネージャにさらにアクセスできるようにすることがある（ブロック３２０）。たとえば、ＣＰＵの制御は、ブートローダからコンテナマネージャに移されることがあり、コンテナマネージャは、起動または実行されることがある。処理ロジックは、コンテナをさらに受信することがある（ブロック３３０）。たとえば、実行可能コードが受信されることがある。処理ロジックは、続いて、コンテナの受信に応答して、コンテナマネージャを実行することがある（ブロック３４０）。たとえば、コンテナマネージャは、コンテナが受信されるたびに実行されることがある。それ故に、一部の実施形態では、コンテナは、コンテナがセキュア計算環境のリソースをタイムシェアリングするように順番に受信されることがある。コンテナマネージャは、コンテナのうちの１つが受信されるたびに別々に実行されることがある。それ故に、第１のコンテナが受信され、後続のコンテナが受信された場合、コンテナマネージャは、第１のコンテナの受信に応答して１度目に実行され、コンテナマネージャは、後続のコンテナの受信に応答して２度目に再度実行される。従って、コンテナマネージャは、コンテナの受信に基づいてオンデマンドで実行されることがある。一部の実施形態では、コンテナマネージャは、受信されたコンテナがセキュア計算環境のリソースにアクセスするシステムコールを起動した後に実行されることがある。処理ロジックは、コンテナマネージャに基づいてコンテナを検証することがある（ブロック３５０）。コンテナマネージャによるコンテナの検証に応答して、処理ロジックは、コンテナをさらに実行することがある（ブロック３６０）。たとえば、コンテナの命令が実行されるように、ＣＰＵを制御またはＣＰＵにアクセスできるようにされることがある。それ故に、ＣＰＵのアクセスまたは制御は、コンテナマネージャからコンテナに提供されることがある、
【００１９】
［0030］  図４は、セキュア計算環境のブートローダを実行する方法４００の実施例のフローチャートである。概して、方法４００は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるまたは実行される命令）、またはこれらの組み合わせを備える処理ロジックによって行われることがある。一部の実施形態では、方法４００は、図１または図２のブートローダ１１０または２１０の実行フローに相当する。
【００２０】
［0031］  図４に表された通り、方法４００は、処理ロジックがセキュア計算環境の初期化を検出することから始まることがある（ブロック４１０）。たとえば、セキュア計算環境を含む装置またはシステムは、リセット後にパワーオンまたは初期化されることがある。処理ロジックは、続いてセキュア計算環境のセルフテストを行うことがある（ブロック４２０）。たとえば、ハードウェアベースの状態機械は、セキュア計算環境の１つ以上のコンポーネントの一連のステップまたはテストを行うことがある。このようなコンポーネントの実施例は、セキュア計算環境のＣＰＵまたはメモリを含むが、これらに限定されることはない。処理ロジックは、コンテナマネージャの内容と記憶された完全性チェック値とをさらに取り出すことがある（ブロック４３０）。たとえば、コンテナマネージャの内容は、セキュア計算環境のＲＯＭから取り出されることがあり、記憶された完全性チェック値は、同じＲＯＭ、または、セキュア計算環境の内部の別のメモリロケーションから取り出されることがある。処理ロジックは、続いてコンテナマネージャの内容に基づいてコンテナマネージャ完全性チェック値を計算することがある（ブロック４４０）。たとえば、ハッシュ関数は、コンテナマネージャ完全性チェック値を判定するために、コンテナマネージャの内容または内容の一部分に実行されることがある。
【００２１】
［0032］  処理ロジックは、続いて、記憶された完全性チェック値をコンテナマネージャ完全性チェック値と比較することがある（ブロック４５０）。さらに、処理ロジックは、完全性チェック値の比較に基づいて、コンテナマネージャがセキュア計算環境のＣＰＵ、または、その他のこのような処理装置もしくはハードウェアリソースにアクセスできるようにすることがある（ブロック４６０）。たとえば、コンテナマネージャ完全性チェック値が記憶された完全性チェック値と一致する場合、コンテナマネージャは、検証または認証されると考えられることがあり、ＣＰＵのアクセスまたは制御は、ブートローダからコンテナマネージャに提供されることがある。しかしながら、コンテナマネージャ完全性チェック値が記憶された完全性チェック値と一致しない場合、コンテナマネージャは、未検証または未認証であると考えられることがあり、ＣＰＵのアクセスまたは制御は、ブートローダからコンテナマネージャに提供されないことがある。
【００２２】
［0033］  このように、ブートローダは、セキュア計算環境のリソースのセルフテストとコンテナマネージャの検証とを行うことがある。コンテナマネージャの正常セルフテストおよび正常検証の後、コンテナマネージャは、セキュア計算環境のＣＰＵもしくは処理装置に対する制御またはアクセスができるようにされることがある。一部の実施形態では、コンテナマネージャがＣＰＵもしくは処理装置への制御またはアクセスをできるようにすることは、コンテナマネージャの動作のためのＣＰＵもしくは処理装置の使用に相当することがある。
【００２３】
［0034］  図５Ａは、セキュア計算環境のリソースのタイムシェアリングを提供する方法５００の実施例のフローチャートである。概して、方法５００は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるまたは実行される命令）、またはこれらの組み合わせを備えることがある処理ロジックによって行われることがある。一部の実施形態では、方法５００は、図１または図２のコンテナマネージャ１２１または２５０によって行われることがある。
【００２４】
［0035］  図５Ａに表された通り、方法５００は、処理ロジックが第１のコンテナを受信することから始まることがある（ブロック５０１）。たとえば、コンテナマネージャは、コンテナマネージャの初期化または実行後にコンテナを受信することがある。一部の実施形態では、コンテナマネージャは、セキュア計算環境のリソースにアクセスするためのシステムコールが受信された後に実行されることがある。処理ロジックは、第１のコンテナがセキュア計算環境のリソースにさらにアクセスできるようにする（ブロック５０２）。たとえば、ＣＰＵへのアクセスは、コンテナマネージャから第１のコンテナに提供されることがある。コンテナがＣＰＵまたは処理装置への制御またはアクセスをできるようにすることは、コンテナの動作または命令のためＣＰＵまたは処理装置を使用することに相当することがある。処理ロジックは、続いて第１のコンテナを実行することがある（ブロック５０３）。たとえば、第１のコンテナの命令は、セキュア計算環境のＣＰＵによって行われることがある。コンテナの実行に関するさらなる詳細は、図５Ｂに関して説明される。
【００２５】
［0036］  処理ロジックは、第１のコンテナの実行の終了後に、続いて第２のコンテナを受信することがある（ブロック５０４）。たとえば、第２のコンテナは、第１のコンテナの後にコンテナマネージャによって受信されることがある。処理ロジックは、第２のコンテナがセキュア計算環境のリソースにアクセスできるようにすることがあり（ブロック５０５）、第２のコンテナを実行することがある（ブロック５０６）。
【００２６】
［0037］  このように、セキュア計算環境のリソースは、一連のコンテナの間でタイムシェアリングされることがある。たとえば、リソースの一部は、１度目に第１のコンテナに提供されることがあり、リソースの別の部分の一部は、１度目より後である２度目に後続の第２のコンテナに提供されることがある。
【００２７】
［0038］  図５Ｂは、セキュア計算環境のコンテナマネージャを実行する方法５０９の実施例のフローチャートである。概して、方法５０９は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるまたは実行される命令）、またはこれらの組み合わせを備えることがある処理ロジックによって行われることがある。一部の実施形態では、方法５０９は、図１または図２のコンテナマネージャ１２１または２５０によって行われることがある。
【００２８】
［0039］  図５Ｂに表された通り、方法５０９は、処理ロジックがコンテナマネージャを初期化することから始まることがある（ブロック５１０）。たとえば、コンテナマネージャは、ブートローダによって起動されることがある。コンテナマネージャの起動は、コンテナマネージャの初期セットアップまたは初期化ルーチンを行うことがある。処理ロジックは、第１のコンテナをさらに受信することがある（ブロック５２０）。さらに、処理ロジックは、コンテナマネージャがＣＰＵへの制御またはアクセスをできるようにすることによって、第１のコンテナの受信に応答してコンテナマネージャを実行することがある（ブロック５３０）。処理ロジックは、続いて、第１のコンテナを検証することがある（ブロック５４０）。たとえば、コンテナマネージャは、第１のコンテナの署名を検証することがある。たとえば、コンテナマネージャは、公開鍵にアクセスし、（たとえば、公開鍵と秘密鍵のペアの中の）対応する秘密鍵によって生成された第１のコンテナの署名を検証することがある。たとえば、コンテナマネージャは、対称鍵にアクセスすることがあり、対応する鍵によって生成された第１のコンテナの署名を検証するためにハッシュメッセージ認証コード（ＨＭＡＣ）演算を使用することがある。たとえば、コンテナマネージャは、第１のコンテナが検証されたと無条件に考えることがある。一部の実施形態では、コンテナマネージャは、たとえば、コンテナのフォーマット、コンテナのバージョンなどのコンテナの他の特性をさらに検証することがある。一部の実施形態では、コンテナの検証は、セキュア計算環境のリソースにアクセスするためにコンテナの許可の判定をさらに含むことがある。コンテナの検証後に、リソース・エンフォースメント・コアによってアクセスされた１つ以上のレジスタは、セキュア計算環境のリソースにアクセスするためにコンテナに関連付けられた許可を反映するように更新されることがある。一部の実施形態では、コンテナマネージャは、コンテナが実行するときにリソース・エンフォースメント・コア内のレジスタを動的に修正することがある。このような動的修正は、コンテナに与えられた許可を動的に変更することがある。たとえば、コンテナマネージャは、レジスタの更新を実現しやすくするためにコンテナにアプリケーション・プログラミング・インターフェース（ＡＰＩ）を提供することがある。処理ロジックは、続いて、第１のコンテナがＣＰＵへの制御またはアクセスをできるようにすることによって第１のコンテナの検証に応答して、第１のコンテナを実行することがある（ブロック５５０）。たとえば、第１のコンテナの命令は、コンテナが特定の暗号特性を充足する（たとえば、暗号署名が有効である）場合、ＣＰＵによって実行されることがある。処理ロジックは、第１のコンテナの実行の終了をさらに検出することがある（ブロック５６０）。続いて、処理ロジックは、コンテナマネージャがＣＰＵを制御できるようにすることがある（ブロック５７０）。たとえば、ＣＰＵに対する制御またはアクセスがコンテナからコンテナマネージャへ戻されることがある。処理ロジックは、第１のコンテナの状態情報をメモリにさらに記憶することがある（ブロック５８０）。たとえば、第１のコンテナは、後続のコンテナが使用できるいくつかのデータをＩＰＣメモリまたはレジスタに記憶することがある。たとえば、第１のコンテナは、後続のコンテナが第１のコンテナに起因する一部の許可で動作することを許すことがある。たとえば、コンテナマネージャは、現在までに動作させられたコンテナの数を追跡することがあり、この情報をコンテナまたはＨＬＯＳメモリもしくはレジスタに提供することがある。
【００２９】
［0040］  コンテナマネージャは、コンテナがアクセスすることができることがあるリソースがどれであるかを決めるためにコンテナの識別情報を使用することがある。たとえば、コンテナの識別情報は、これのハッシュ（たとえば、ＳＨＡ−２またはＳＨＡ−３）でもよい。たとえば、識別情報は、コンテナの公開鍵暗号署名（たとえば、ＥＣＳＤＡ）、または、署名を生成するために秘密鍵に対応する公開鍵でもよい。たとえば、識別情報は、コンテナのＨＭＡＣでもよい。場合によっては、識別情報は、コンテナの実行可能コードの改訂履歴を識別するコンテナのバージョン番号または改訂番号をさらに含むことがある。場合によっては、識別情報は、様々なフィールドの組み合わせのハッシュでもよい（たとえば、識別情報は、コンテナの公開鍵と改訂番号とのＳＨＡ−２演算の結果である）。
【００３０】
［0041］  このように、コンテナマネージャは、コンテナおよびその他の後続コンテナの受信に応答して実行されることがある。コンテナは、コンテナマネージャによるコンテナの検証に応答して、セキュア計算環境のＣＰＵまたは他のハードウェアリソースへの制御またはアクセスをできるようにされることがある。コンテナの実行の終了後に、ＣＰＵへの制御またはアクセスは、コンテナマネージャに戻されることがあり、実行されたコンテナの状態情報は、セキュア計算環境のメモリに記憶されることがある。
【００３１】
［0042］  図６は、コンテナマネージャを更新する方法６００の実施例のフローチャートである。概して、方法６００は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるまたは実行される命令）、またはこれらの組み合わせを備えることがある処理ロジックによって行われることがある。一部の実施形態では、方法６００は、図１または図２のセキュア計算環境のコンテナマネージャ１２１もしくは２５０または別のコンポーネントによって行われることがある。
【００３２】
［0043］  図６に表された通り、方法６００は、処理ロジックがコンテナマネージャを更新する要求を受信することから始まることがある（ブロック６１０）。たとえば、コンテナマネージャを更新する要求は、コンテナマネージャの特定の命令または演算とこの命令または演算の内容に対するメモリアドレスロケーションとを識別することがある。処理ロジックは、コンテナマネージャに関連付けられた関数テーブルをさらに取り出すことがある（ブロック６２０）。関数テーブルは、ペアの中の第１のエントリが特定のタイプの命令または演算を識別し、ペアの中の第２のエントリが命令または演算のための内容を含むメモリアドレスロケーションを識別する、エントリの順序付きペアに相当することがある。処理ロジックは、続いて、メモリアドレスに相当する関数テーブルのうちの少なくとも１つのフィールドを更新することがある（ブロック６３０）。たとえば、関数テーブルは、メモリアドレスロケーションを新しいメモリアドレスロケーションに変更するために修正されることがあるメモリに記憶されることがある。
【００３３】
［0044］  コンテナマネージャの実行は、関数テーブルの使用に基づくことがある。たとえば、コンテナマネージャは、命令または演算に対応するメモリアドレスロケーションに基づいて命令または演算を行うために関数テーブルと一緒に使用されることがある。それ故に、コンテナマネージャの更新は、コンテナマネージャの少なくとも１つの命令または演算に対するメモリアドレスロケーションの変更を生じさせることがある。
【００３４】
［0045］  図６を参照すると、処理ロジックは、関数テーブルの更新に応答して、コンテナマネージャに関連付けられたバージョン番号を１つ増やすことがある（ブロック６４０）。たとえば、メモリロケーション内にあるバージョン番号は、コンテナマネージャの更新に応答して、１ずつ増やされる、または、増加させられることがある。一部の実施形態では、バージョン番号は、ブートローダによってＯＴＰ、または、その他の不揮発性媒体（ＮＶＭ）に記憶されることがある。ブートローダは、現在のバージョン番号が以前に記憶されたバージョン番号の全ての中の最大値以上ではない場合、コンテナに対して実行を制限することがある。一部の実施形態では、コンテナマネージャのバージョン番号は、コンテナに提供されることがある。各コンテナは、コンテナマネージャのバージョン番号を取り出すことがあり、コンテナマネージャのバージョン番号をコンテナの内部で識別されたバージョン番号と比較することがある。コンテナマネージャのバージョン番号がコンテナの内部で識別されたバージョン番号と一致しない場合、コンテナは、実行しないことがある（たとえば、コンテナマネージャの命令が行われないことがある）。しかしながら、コンテナマネージャのバージョン番号がコンテナの内部で識別されたバージョン番号と一致する場合、コンテナは、実行することがある。このように、コンテナマネージャのバージョン番号は、コンテナの実行前に、コンテナマネージャを検証するためにコンテナによって使用されることがある。
【００３５】
［0046］  図７は、１つ以上のコンテナと相互に作用するコンテナマネージャ７２０の環境７００の実施例を示す。概して、環境７００は、図１または図２のコンテナマネージャ１２１または２５０に相当するコンテナマネージャ７２０を含むことがある。
【００３６】
［0047］  図７に表された通り、環境７００は、１つ以上のコンテナ７１０を受信するコンテナマネージャ７２０を含むことがある。コンテナマネージャ７２０は、ハイレベル・オペレーティング・システム（ＨＬＯＳ）レジスタまたはメモリ７３０とプロセス間通信（ＩＰＣ）レジスタまたはメモリ７４０とにさらに結合されることがある。コンテナマネージャ７２０は、コンテナ７１０のうちの１つを実行することがあり、ＨＬＯＳメモリ７３０を介して、実行されたコンテナからセキュア計算環境の外部にあるコンポーネントへデータの要求の指示を提供することがある。コンテナマネージャ７２０は、続いて、ＨＬＯＳメモリ７３０からデータを取り出し、データを実行されたコンテナに提供することがある。ＨＬＯＳメモリ７３０に関するさらなる詳細は、図１０と併せて説明される。
【００３７】
［0048］  コンテナマネージャは、さらにコンテナ７１０のうちの少なくとも２つの間で通信を行うためにＩＰＣメモリ７４０にアクセスできることがある。たとえば、データは、受信された第１のコンテナから受信され、コンテナマネージャ７２０によって実行されることがあり、データは、コンテナマネージャ７２０によって受信された後続の第２のコンテナによる取り出しのためＩＰＣメモリ７４０に記憶されることがある。ＩＰＣメモリ７４０に関するさらなる詳細は、図８〜図９と併せて説明される。
【００３８】
［0049］  図８は、コンテナ間に相互作用をもたらす方法８００の実施例を示す。概して、方法８００は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるまたは実行される命令）、またはこれらの組み合わせを備える処理ロジックによって行われることがある。一部の実施形態では、方法８００は、図１または図２のセキュア計算環境のコンテナマネージャ１２１もしくは２５０または別のコンポーネントによって行われることがある。
【００３９】
［0050］  図８に表された通り、方法８００は、処理ロジックが第１のコンテナの実行中に第１のコンテナからデータを受信することから始まることがある（ブロック８１０）。処理ロジックは、第１のコンテナからデータの受信側識別情報をさらに受信することがある（ブロック８２０）。たとえば、受信側識別情報は、別のコンテナの識別情報に相当することがある。処理ロジックは、続いて、受信されたデータと、他のコンテナの受信側識別情報と、第１のコンテナに相当するデータの送信側識別情報とをプロセス間通信（ＩＰＣ）メモリまたはレジスタに記憶することがある（ブロック８３０）。処理ロジックは、続いて第２のコンテナを実行することがある（ブロック８４０）。たとえば、第２のコンテナは、第１のコンテナの受信および実行後に受信されることがある。処理ロジックは、第２のコンテナの識別情報がＩＰＣメモリに記憶されたデータに対する受信側識別情報と一致することを確認することがある（ブロック８５０）。さらに、処理ロジックは、第２のコンテナがＩＰＣメモリでデータおよび送信側識別情報にアクセスできるようにすることがある（ブロック８６０）。
【００４０】
［0051］  一部の実施形態では、第２のコンテナは、データの送信側識別情報に関連付けられた条件に基づいて、ＩＰＣメモリからのデータを使って命令を実行することがある。たとえば、命令は、送信側識別情報が第２のコンテナからの特定の送信側識別情報と一致する場合、実行されることがあり、または、命令は、送信元識別情報が第２のコンテナからの特定の送信側識別情報と一致しない場合、実行されない場合がある。
【００４１】
［0052］  このように、第１のコンテナからのデータは、セキュア計算環境のメモリロケーションに記憶されることがある。第１のコンテナの後に実行される第２のコンテナは、メモリロケーションでデータにアクセスできるようにされることがある。
【００４２】
［0053］  図９は、メモリと相互に作用するコンテナの実施例を示す。概して、図１または図２のコンテナマネージャ１２１または２５０に相当することがあるコンテナマネージャ９１０は、ＩＰＣメモリ９４０に基づいてコンテナ間に相互作用をもたらすことがある。
【００４３】
［0054］  図９に表された通り、コンテナマネージャ９１０は、ＩＰＣメモリ９４０およびコンテナパイプライン９２４に結合されることがある。コンテナパイプライン９２４は、第１のコンテナ９２０‘Ａ’と、第２のコンテナ９２１‘Ｂ’と、第３のコンテナ９２２‘Ｃ’とを含むことがある。コンテナマネージャ９１０は、実行されることがある第１のコンテナ９２０‘Ａ’を受信することがある。第１のコンテナ９２０‘Ａ’の命令は、第３のコンテナ９２２‘Ｃ’のためデータＡがＩＰＣメモリ９４０に記憶されることを指定することがある。たとえば、コンテナマネージャ９１０は、データＡ、第１のコンテナ９２０の指示（たとえば、送信側’Ａ’）、およびデータの受信側（たとえば、受信側’Ｃ’）を含むエントリをＩＰＣ９４０内に記憶することがある。コンテナマネージャ９１０は、続いて、第１のコンテナ９２０‘Ａ’の実行の終了後に第２のコンテナ９２１‘Ｂ’を受信することがある。第２のコンテナ９２１‘Ｂ’は、第２のコンテナ９２１の識別情報（たとえば、‘Ｂ’）がデータの受信側識別情報（たとえば、‘Ｃ’）と一致しないので、ＩＰＣメモリ９４０内のデータへのアクセスを許されないことがある。後の時点で、コンテナマネージャ９１０は、第３のコンテナ９２２‘Ｃ’を受信することがある。第３のコンテナ９２２の識別情報（たとえば、‘Ｃ’）は、ＩＰＣメモリ９４０内のデータに対する受信側識別情報と一致するので、コンテナマネージャ９１０は、‘Ｃ’という識別情報をもつ第３のコンテナ９２２がＩＰＣメモリ９４０内のデータにアクセスできるようにすることがある。
【００４４】
［0055］  図１０は、セキュア計算環境の外部にあるコンポーネントと相互に作用するコンテナの方法１０００の実施例を示す。概して、方法１０００は、ハードウェア（たとえば、処理装置、回路、専用ロジック、プログラマブルロジック、マイクロコード、装置のハードウェア、集積回路など）、ソフトウェア（たとえば、処理装置上で動かされるまたは実行される命令）、またはこれらの組み合わせを備える処理ロジックによって行われることがある。一部の実施形態では、方法１０００は、図１または図２のセキュア計算環境のコンテナマネージャ１２１もしくは２５０または別のコンポーネントによって行われることがある。
【００４５】
［0056］  図１０に表された通り、方法１０００は、処理ロジックがコンテナからセキュア計算環境の外部にあるデータの要求を受信することから始まることがある（ブロック１０１０）。たとえば、データは、セキュア計算環境の内部にはない装置のコンポーネントから受信されたデータに相当することがある。処理ロジックは、続いて、コンテナからの要求をハイレベル・オペレーティング・システム（ＨＬＯＳ）メモリまたはレジスタ内で指示することがある（ブロック１０２０）。たとえば、コンテナマネージャは、セキュア計算環境の内部のコンポーネントがＨＬＯＳメモリに結合されたコンポーネントからのデータを要求したことを指示するためにＨＬＯＳメモリの内容を修正することがある。処理ロジックは、続いて、ＨＬＯＳメモリを介してセキュア計算環境の外部にあるエンティティからデータを受信することがある（ブロック１０３０）。たとえば、セキュア計算環境の内部にはないコンポーネントは、要求されたデータをＨＬＯＳメモリに記憶することによって、要求されたデータを提供することがある。さらに、処理ロジックは、ＨＬＯＳメモリからコンテナにデータを提供することがある（ブロック１０４０）。たとえば、コンテナマネージャは、ＨＬＯＳメモリに記憶されたデータを取り出すことがあり、コンテナによる実行のためこのデータをコンテナに提供することがある。
【００４６】
［0057］  一部の実施形態では、ＨＬＯＳメモリは、セキュア計算環境の内部にあって、セキュア計算環境の外部のエンティティまたはコンポーネントからアクセスできる唯一のメモリロケーションでもよい。
【００４７】
［0058］  図１１は、本書において考察された方法のうちのいずれか１つ以上を機械に行わせる命令のセットが内部で実行されることがあるコンピュータシステム１１００の機械の実施例を示す。代替的な実装では、機械は、ＬＡＮ、イントラネット、エクストラネット、および／またはインターネット内の他の機械に接続される（たとえば、ネットワーク化される）ことがある。機械は、ピア・ツー・ピア（または分散）ネットワーク環境におけるピア機械として、または、クラウド・コンピューティング・インフラストラクチャもしくは環境におけるサーバもしくはクライアント機械として、クライアント・サーバ・ネットワーク環境内のサーバまたはクライアント機械の資格で動作することがある。
【００４８】
［0059］  機械は、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、携帯情報端末（ＰＤＡ）、携帯電話機、ウェブアプライアンス、サーバ、ネットワークルータ、スイッチもしくはブリッジ、または、機械によって行われるアクションを指定する（一連のまたはその他の）命令のセットを実行する能力がある何らかの機械でもよい。さらに、単一の機械が例示されているが、用語「機械」は、本書において考察された方法のうちのいずれか１つ以上を行うために命令のセット（または複数のセット）を個別にまたは共同して実行する機械の何らかの集合体を含むものと解釈されるべきである。
【００４９】
［0060］  コンピュータシステム１１００の実施例は、処理装置１１０２、メインメモリ１１０４（たとえば、リード・オンリー・メモリ（ＲＯＭ）、フラッシュメモリ、シンクロナスＤＲＡＭ(ＳＤＲＡＭ)またはラムバスＤＲＡＭ（ＲＤＲＡＭ）などのダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティックメモリ１１０６（たとえば、フラッシュメモリ、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）など）、およびデータストレージ装置１１１８を含み、これらは、バス１１３０を介して互いに通信する。
【００５０】
［0061］  処理装置１１０２は、たとえば、マイクロプロセッサ、中央処理装置などの１台以上の汎用処理装置を表す。より詳しくは、処理装置は、複合命令セットコンピューティング（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、もしくは、他の命令セットを実施するプロセッサ、または、命令セットの組み合わせを実施するプロセッサでもよい。処理装置１１０２は、また、たとえば、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサなどの１台以上の専用処理装置でもよい。処理装置１１０２は、本書において考察された演算およびステップを行う命令１１２６を実行するように構成される。
【００５１】
［0062］  コンピュータシステム１１００は、ネットワーク１１２０で通信するためにネットワークインターフェース装置１１０８をさらに含むことがある。コンピュータシステム１１００は、ビデオディスプレイ装置１１１０（たとえば、液晶ディスプレイ（ＬＣＤ）または陰極線管（ＣＲＴ））と、英数字入力装置１１１２（たとえば、キーボード）と、カーソル制御装置１１１４（たとえば、マウス）と、グラフィックス処理装置１１２２と、信号発生装置１１１６（たとえば、スピーカ）と、グラフィックス処理装置１１２２と、ビデオ処理装置１１２８と、オーディオ処理装置１１３２とをさらに含むことがある。
【００５２】
［0063］  データストレージ装置１１１８は、本書に記載された方法または機能のうちのいずれか１つ以上を具現化する１つ以上の命令のセットまたはソフトウェア１１２６が記憶されている（コンピュータ可読媒体としても知られている）機械可読記憶媒体１１２４を含むことがある。命令１１２６は、コンピュータシステム１１００によるこれらの実行中にメインメモリ１１０４の内部に、および／または、処理装置１１０２の内部に、完全にまたは少なくとも部分的に存在することもあり、メインメモリ１１０４および処理装置１１０２も機械可読記憶媒体を構成する。
【００５３】
［0064］  一実装では、命令１１２６は、コンテナマネージャ（たとえば、図１または図２のコンテナマネージャ１２１または２００）に相当する機能性を実装する命令を含む。機械可読記憶媒体１１２４は、実装の実施例では、単一の媒体であるように表されているが、用語「機械可読記憶媒体」は、１つ以上の命令のセットを記憶する単一の媒体または複数の媒体（たとえば、集中または分散データベース、および／または、関連したキャッシュおよびサーバ）を含むものと解釈されるべきである。用語「機械可読記憶媒体」は、機械による実行のため命令のセットを記憶またはコード化する能力があり、本開示の方法のうちのいずれか１つ以上を機械に行わせる何らかの媒体を含むものとも解釈されるべきである。用語「機械可読記憶媒体」は、その結果、限定されることはないが、ソリッド・ステート・メモリ、光媒体および磁気媒体を含むものと解釈されるべきである。
【００５４】
［0065］  以上の詳細な説明の一部分は、コンピュータメモリ内部のデータビットへの演算のアルゴリズムおよび記号表現に関して提示されている。これらのアルゴリズムの説明および表現は、データ処理技術における当業者が自分の業績の実体を他の当業者に最も効率的に伝えるために使用される方法である。アルゴリズムは、ここでは、かつ、概して、所望の結果をもたらす首尾一貫した一連の演算であると考えられる。これらの演算は、物理量の物理的操作を必要とする演算である。通常では、必然的ではないが、これらの量は、記憶、合成、比較、および、その他の方法で操作することができる電気または磁気信号の形を取る。主に一般的な用法という理由で、これらの信号をビット、値、要素、記号、文字、項、数などと呼ぶことが時には都合の良いことが判明した。
【００５５】
［0066］  しかしながら、これらの用語および類似した用語の全ては、適切な物理量に関連付けられるべきであり、これらの量に適用される単に便利なラベルであることが念頭に置かれるべきである。以上の考察から明らかであるように、特に断らない限り、説明の全体を通じて、「識別する」または「判定する」または「実行する」または「行う」または「収集する」または「生成する」または「送信する」などの用語を利用する考察は、コンピュータシステムまたは類似した電子コンピューティング装置のアクションおよびプロセスのことを指す。コンピュータシステムのレジスタおよびメモリの内部で物理（電子）量として表現されたデータを操作し、コンピュータシステムのメモリもしくはレジスタまたは他のこのような情報記憶装置の内部で物理量として同様に表現された他のデータに変換することが認められる。
【００５６】
［0067］  本開示は、本書における演算を行う機器にも関係する。この機器は、意図された目的のため特別に構築されることがあり、または、コンピュータ内に記憶されたコンピュータプログラムによって選択的に起動されるまたは再構成される汎用コンピュータを備えることがある。このようなコンピュータプログラムは、限定されることはないが、たとえば、フレキシブルディスク、光ディスク、ＣＤ−ＲＯＭ、および、光磁気ディスクなどのあらゆるタイプのディスクと、リード・オンリー・メモリ（ＲＯＭ）と、ランダム・アクセス・メモリ（ＲＡＭ）と、ＥＰＲＯＭと、ＥＥＰＲＯＭと、磁気もしくは光カードと、または、電子命令を記憶するため適したあらゆるタイプの媒体とを含み、各々がコンピュータシステムバスに結合されているコンピュータ可読記憶媒体に記憶されることがある。
【００５７】
［0068］  本書に提示されたアルゴリズムおよびディスプレイは、本質的には、どのような特定のコンピュータまたは他の装置にも関係しない。様々な汎用システムは、本書における教示に従ってプログラムと共に使用されることがあり、または、方法を行うためにより一層特殊化された装置を構築することは、都合の良いことが判明することがある。多種多様のこれらのシステムのための構造は、以下の説明に記載された通りに見えるであろう。加えて、本開示は、何れかの特定のプログラミング言語に準拠して記載されるものではない。多種多様のプログラミング言語は、本書に記載された通りに開示の教示を実装するために使用されることがあることが認められるであろう。
【００５８】
［0069］  本開示は、コンピュータ・プログラム・プロダクトまたはソフトウェアとして提供されることがあり、これらのコンピュータ・プログラム・プロダクトまたはソフトウェアは、本開示によるプロセスを行うようにコンピュータシステム（またはその他の電子装置）をプログラムするために使用されることがある命令が記憶されている機械可読媒体を含むことがある。機械可読媒体は、機械（たとえば、コンピュータ）により読み取り可能な形式で情報を記憶するどのようなメカニズムでも含む。たとえば、機械可読（たとえば、コンピュータ可読）媒体は、リード・オンリー・メモリ（「ＲＯＭ」）、ランダム・アクセス・メモリ（「ＲＡＭ」）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ装置などの機械（たとえば、コンピュータ）可読記憶媒体を含む。
【００５９】
［0070］  以上の開示では、開示の実装は、これらの具体的な実装の実施例を参照して説明されている。様々な変更が、以下の特許請求の範囲に記載された通りの開示の実装のより広い趣旨および範囲から逸脱することなく、これらの具体的な実装の実施例に対して行われることがあることは明らかであろう。開示および図面は、その結果、限定的な意味ではなく、例示的な意味で考慮されるべきである。
【図１】
0006769999.tif 000002
【図２】
0006769999.tif 000003
【図３】
0006769999.tif 000004
【図４】
0006769999.tif 000005
【図５Ａ】
0006769999.tif 000006
【図５Ｂ】
0006769999.tif 000007
【図６】
0006769999.tif 000008
【図７】
0006769999.tif 000009
【図８】
0006769999.tif 000010
【図９】
0006769999.tif 000011
【図１０】
0006769999.tif 000012
【図１１】
0006769999.tif 000013