(57)【要約】【課題】保全性およびセキュリティについて分析できる、オペレーティングシステムプロセス、特に動的にアセンブルされるプロセスを構築すること。【解決手段】本明細書に記載されているのは、オペレーティングシステムプロセスの構築、識別、および／または最適化のテクノロジの実装である。本明細書に記載の少なくとも１つの実装は、プロセスマニフェストによって定義された内容を有するオペレーティングシステムプロセスを構築する。構築されたならば、オペレーティングシステムプロセスは、変更不能である。【選択図】図１
2006164285.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサによって実行されたときに、
１つまたは複数の構成コンポーネントから１つまたは複数の型付きコード表現を作成する動作と、
前記１つまたは複数の作成された型付きコード表現からプロセッサ実行可能命令ストリームを生成する動作と、
前記生成されたプロセッサ実行可能命令ストリームを含むオペレーティングシステムプロセスを構築する動作であって、前記生成されたプロセッサ実行可能命令ストリームは、前記オペレーティングシステムプロセスが構築された後に変更不能である、動作とを備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項２】
前記１つまたは複数の構成コンポーネントは、１つまたは複数のロードモジュールを含むことを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３】
前記作成動作は、１つまたは複数の型付きコード表現を作成するために複数のロードモジュールを使用することを含むことを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４】
前記構築されたオペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームを実行することをさらに備え、前記生成されたプロセッサ実行可能命令ストリームは、実行中に変更不能であることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５】
前記生成動作の前に、１つまたは複数のエクステンディングコンポーネントの実行に基づいて前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、前記１つまたは複数のエクステンディングコンポーネントは、前記１つまたは複数の構成コンポーネントの一部でないロードモジュールを含むことを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６】
前記生成動作の前に、１つまたは複数のエクステンディングコンポーネントの１つまたは複数のロードモジュールの実行に基づいて前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７】
前記生成動作の前に、１つまたは複数のエクステンディングコンポーネントの実行に基づいて前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、前記更新は、前記１つまたは複数の型付きコード表現に対してランタイムセキュリティ検査を実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加することを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項８】
前記生成動作の前に、１つまたは複数のエクステンディングコンポーネントの実行に基づいて前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、前記更新は、１つまたは複数の型付きコード表現に対するランタイムブックキーピングを実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加することを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項９】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１０】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、前記更新は、前記１つまたは複数の型付きコード表現に対するランタイムセキュリティ検査を実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加することを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１１】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、前記更新は、前記１つまたは複数の型付きコード表現に対してランタイムブックキーピングを実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加することを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１２】
前記生成動作の前に、自己検査機能を実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加するために前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、結果のオペレーティングシステムプロセスは、それ自体のプロパティを検査するように構成されることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１３】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に新しい型を追加することによって、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１４】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に既存の型に関する新しい関数を追加することによって、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１５】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対してグローバル最適化を実行することをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１６】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対して最適化を実行することをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１７】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対して最適化を実行することをさらに備え、上記最適化は、前記オペレーティングシステムプロセスの前の実行の記録に基づくことを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１８】
前記生成動作は、さらに、特権プロセッサ実行可能命令を前記プロセッサ実行可能命令ストリームに条件的に挿入することを備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項１９】
プロセスを構築する要求を受け取ることをさらに備え、前記作成動作、前記生成動作、および前記構築動作は、前記要求の受け取りに応答して実行されることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２０】
前記構築動作の前に、前記動作のうちの１つまたは複数の結果は所望のプロパティおよびポリシの指定されたセットを厳守するかどうかを判定するために前記結果を分析することをさらに備えることを特徴とする請求項７６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２１】
前記構築動作の前に、後に使用するために前記動作のうちの１つまたは複数の結果をキャッシングすることをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２２】
前記プロセスの構築に最終的に必要である内容を定義するプロセスマニフェストを構成し、永続させることをさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２３】
前記プロセスの構築に最終的に必要である内容を定義するプロセスマニフェストを構成し、永続させることと、
プロセスを構築する要求を受け取ることであって、前記作成動作、前記生成動作、および前記構築動作は、前記要求の受け取りに応答して実行される、受け取ることと
をさらに備え、前記構成し永続させる動作は、前記受け取り動作の前に実行されることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２４】
前記オペレーティングシステムプロセスの構築に必要なすべてのコンポーネントは、プロセスマニフェスト内で指名されることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２５】
第１のおよび第２のオペレーティングシステムプロセスを構築するために前記作成動作、前記生成動作、および前記構築動作を少なくとも２回実行することと
前記第１のオペレーティングシステムプロセスをプロセッサによってアドレス可能なメモリ内の定義されたアドレス空間にロードすることと、
前記第２のオペレーティングシステムプロセスを前記プロセッサによってアドレス可能な前記メモリ内の同一の定義されたアドレス空間にロードすることと
をさらに備えることを特徴とする請求項１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２６】
少なくとも１つのプロセッサによって実行されたときに、
１つまたは複数の構成コンポーネントから１つまたは複数のコード表現を作成する動作と、
前記１つまたは複数の作成されたコード表現からプロセッサ実行可能命令ストリームを生成する動作と、
前記生成されたプロセッサ実行可能命令ストリームを含むオペレーティングシステムプロセスを構築する動作であって、前記生成されたプロセッサ実行可能ストリームは、前記オペレーティングシステムプロセスが構築された後に変更不能である、動作と
を備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項２７】
少なくとも１つのプロセッサによって実行されたときに、
オペレーティングシステムプロセスの構築に使用される内容を定義するプロセスマニフェストを入手する動作と、
１つまたは複数のロードモジュールから１つまたは複数の型付きコード表現を作成する動作であって、前記作成動作は、少なくとも部分的に前記プロセスマニフェストに基づく、動作と、
前記１つまたは複数の作成された型付きコード表現からプロセッサ実行可能命令ストリームを生成する動作であって、前記生成動作は、少なくとも部分的に前記プロセスマニフェストに基づく、動作と、
前記生成されたプロセッサ実行可能命令ストリームを含むオペレーティングシステムプロセスを構築する動作であって、前記オペレーティングシステムプロセスの前記生成されたプロセッサ実行可能ストリームは、変更不能である、動作と
を備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項２８】
前記作成動作は、１つまたは複数の型付きコード表現を作成するために複数のロードモジュールを使用することを含むことを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項２９】
前記構築されたオペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームを実行することをさらに備え、前記生成されたプロセッサ実行可能命令ストリームは、実行中に変更不能であることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３０】
前記プロセスマニフェストは、
オペレーティングシステムプロセスの１つまたは複数のロードモジュールのベースセットを定義する構成コンポーネントと、
前記オペレーティングシステムプロセスについて許容されるプロセス外通信インターフェースを定義する外部インターフェースと、
実行時に前記生成されたプロセッサ実行可能命令ストリームを更新する追加のプロセッサ実行可能命令を含み、かつ／または前記生成されたプロセッサ実行可能命令ストリームの前記プロセッサ実行可能命令に対する変更を含む１つまたは複数のロードモジュールのもう１つのセットを定義するエクステンディングコンポーネントと、
前記生成されたプロセッサ実行可能命令ストリームを実行することを意図された１つまたは複数のプロセッサに供給されるネイティブ命令ストリームを作るコードジェネレータと
というタイプのオペレーティングシステムプロセス内容のうちの１つまたは複数を定義することを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３１】
オペレーティングシステムプロセスマニフェストは、
オペレーティングシステムプロセスの１つまたは複数のロードモジュールのベースセットを定義する構成コンポーネントと、
前記オペレーティングシステムプロセスについて許容されるプロセス外通信インターフェースを定義する外部インターフェースと、
実行時に前記生成されたプロセッサ実行可能命令ストリームを更新する追加のプロセッサ実行可能命令を含み、かつ／または前記生成されたプロセッサ実行可能命令ストリームの前記プロセッサ実行可能命令に対する変更を含む１つまたは複数のロードモジュールのもう１つのセットを定義するエクステンディングコンポーネントと、
前記生成されたプロセッサ実行可能命令ストリームを実行することを意図された１つまたは複数のプロセッサに供給されるネイティブ命令ストリームを作るコードジェネレータと
を含むプロセス内容型を定義することを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３２】
プロセスマニフェストを構成することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３３】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３４】
前記生成動作の前に、前記１つまたは複数の型付きコード表現に対するランタイムセキュリティ検査を実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加するために、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３５】
前記生成動作の前に、自己検査機能を実行する追加のプロセッサ実行可能命令を前記生成されたストリームに追加するために前記１つまたは複数の作成された型付きコード表現を更新することをさらに備え、結果のオペレーティングシステムプロセスは、それ自体のプロパティを検査するように構成されることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３６】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に新しい型を追加することによって、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３７】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に既存の型に関する新しい関数を追加することによって、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３８】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対してグローバル最適化を実行することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項３９】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対して最適化を実行することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４０】
前記生成動作は、特権プロセッサ実行可能命令を前記プロセッサ実行可能命令ストリームに条件的に挿入することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４１】
プロセスを構築する要求を受け取ることをさらに備え、前記入手動作、前記作成動作、前記生成動作、および前記構築動作は、前記要求の受け取りに応答して実行されることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４２】
前記構築動作の前に、前記動作のうちの１つまたは複数の結果は所望のプロパティおよびポリシの指定されたセットを厳守するかどうかを判定するために前記結果を分析することをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４３】
前記構築動作の前に、後に使用するために前記動作のうちの１つまたは複数の結果をキャッシングすることをさらに備えることを特徴とする請求項２７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４４】
少なくとも１つのプロセッサによって実行されたときに、
オペレーティングシステムプロセスの構築に使用される内容を定義する明示的プロセスマニフェストを入手する動作と、
前記プロセスマニフェストによって定義された前記内容を有するオペレーティングシステムプロセスを構築する動作であって、前記オペレーティングシステムプロセスは、構築された後に変更不能である、動作と
を備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項４５】
前記構築されたオペレーティングシステムプロセスを実行することをさらに備え、前記構築されたオペレーティングシステムプロセスは、実行中に変更不能であることを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４６】
前記プロセスマニフェストは、
オペレーティングシステムプロセスの１つまたは複数のロードモジュールのベースセットを定義する構成コンポーネントと、
前記オペレーティングシステムプロセスについて許容されるプロセス外通信インターフェースを定義する外部インターフェースと、
前記オペレーティングシステムプロセスの前記内容に適用される１つまたは複数のロードモジュールのセットを定義するエクステンディングコンポーネントと、
前記オペレーティングシステムのプロセッサ実行可能命令ストリームを実行することを意図された１つまたは複数のプロセッサに供給されるネイティブ命令ストリームを作るコードジェネレータと
というタイプのオペレーティングシステムプロセス内容のうちの１つまたは複数を定義することを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４７】
前記構築動作の前に
前記プロセスマニフェストによって指定された１つまたは複数のロードモジュールから１つまたは複数の型付きコード表現を作成することと、
前記１つまたは複数の作成された型付きコード表現からプロセッサ実行可能命令ストリームを生成することであって、前記生成動作は、少なくとも部分的に前記プロセスマニフェストに基づく、生成することと
をさらに備え、前記構築されたオペレーティングシステムプロセスは、前記生成されたプロセッサ実行可能命令ストリームを含むことを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４８】
前記構築動作の前に
前記プロセスマニフェストによって指定された１つまたは複数のロードモジュールから１つまたは複数の型付きコード表現を作成することと、
１つまたは複数のエクステンディングコンポーネントを前記１つまたは複数の作成された型付きコード表現に適用することであって、前記適用動作は、少なくとも部分的に前記プロセスマニフェストに基づく、適用することと、
前記１つまたは複数の作成された型付きコード表現からプロセッサ実行可能命令ストリームを生成することであって、前記生成動作は、少なくとも部分的に前記プロセスマニフェストに基づく、生成することと
をさらに備え、前記構築されたオペレーティングシステムプロセスは、前記生成されたプロセッサ実行可能命令ストリームを含むことを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項４９】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現を更新することをさらに備えることを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５０】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対してグローバル最適化を実行することをさらに備えることを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５１】
前記生成動作の前に、前記１つまたは複数の作成された型付きコード表現に対して最適化を実行することをさらに備えることを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５２】
前記構築されたオペレーティングシステムプロセスのアイデンティティを導出することであって、前記アイデンティティは、前記構築されたオペレーティングシステムプロセス自体の固有プロパティから導出される、導出することと、
前記導出されたプロパティを前記構築されたオペレーティングシステムプロセスに割り当てることと
をさらに備えることを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５３】
アイデンティティに影響する入力を受け取ることと、
前記構築されたオペレーティングシステムプロセスのアイデンティティを導出することであって、前記アイデンティティは、前記構築されたオペレーティングシステムプロセス自体の固有プロパティおよび前記受け取られたアイデンティティに影響する入力から導出されたものに基づく、導出することと、
前記導出されたアイデンティティを前記構築されたオペレーティングシステムプロセスに割り当てることと
をさらに備えることを特徴とする請求項９１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５４】
アイデンティティに影響する入力を受け取ることと、
前記構築されたオペレーティングシステムプロセスのアイデンティティを導出することであって、前記アイデンティティは、前記構築されたオペレーティングシステムプロセス自体の固有プロパティおよび前記受け取られたアイデンティティに影響する入力から導出されたものに基づく、導出することと
をさらに備え、前記導出されたアイデンティティは、他のより有用でない情報を省きながらさらなる検査のために有用な情報を組み込んだ部分的アイデンティティを含むことを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５５】
プロセスを構築する要求を受け取ることをさらに備え、前記入手動作および前記構築動作は、前記要求の受け取りに応答して実行されることを特徴とする請求項４４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５６】
少なくとも１つのプロセッサによって実行されたときに、
１つまたは複数の構成コンポーネントからプロセッサ実行可能命令ストリームを生成する動作と、
オペレーティングシステムプロセスが構築された後に変更不能である前記生成されたプロセッサ実行可能命令ストリームを含む前記オペレーティングシステムプロセスを構築する動作と、
少なくとも部分的に前記生成されたプロセッサ実行可能命令ストリームに基づいて、前記オペレーティングシステムプロセスの少なくとも１つの固定アイデンティティを作成し、前記作成された固定アイデンティティを前記オペレーティングシステムプロセスに関連付ける動作であって、前記固定アイデンティティは、前記構築された変更不能なオペレーティングシステムプロセスを識別し、前記固定アイデンティティは、前記オペレーティングシステムプロセスが構築された後に変更不能である、動作と
を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項５７】
前記１つまたは複数の構成コンポーネントは、１つまたは複数のロードモジュールを含むことを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５８】
前記構築されたオペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームを実行することをさらに備え、前記生成されたプロセッサ実行可能命令ストリームおよびその固定アイデンティティは、オペレーティングシステムプロセスが実行中に変更不能であることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項５９】
前記構築されたオペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームの前記固定アイデンティティを確認することをさらに備えることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６０】
前記構築されたオペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームの前記固定アイデンティティを確認することと、
確認された場合に、前記構築されたオペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームを実行することと
をさらに備えることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６１】
前記構築されたオペレーティングシステムプロセスを、その実行中に、それに関連する固定アイデンティティによって識別することをさらに備えることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６２】
前記作成動作は、少なくとも部分的に、前記構成コンポーネントのうちの１つまたは複数に関数を適用することによって実行されることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６３】
前記作成動作は、少なくとも部分的に、前記オペレーティングシステムプロセスの前記生成されたプロセッサ実行可能命令ストリームの少なくとも一部に関数を適用することによって実行されることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６４】
前記オペレーティングシステムプロセスの構築に必要なすべてのコンポーネントは、プロセスマニフェスト内で指名され、前記作成動作は、少なくとも部分的に、前記プロセスマニフェストの少なくとも一部に関数を適用することによって実行されることを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６５】
前記オペレーティングシステムプロセスの前記固定アイデンティティは、プロセスパブリッシャ識別情報、プロセス原作者識別情報、プロセスアクセス許可情報、発行情報、著作権情報、ライセンス付与情報、前記オペレーティングシステムプロセスの構成コンポーネントを識別する情報、およびプロセスの１つまたは複数のクラスへのメンバシップに関連する情報からなる群から選択された追加の識別情報を含むことを特徴とする請求項５６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６６】
少なくとも１つのプロセッサによって実行されたときに、
構築された後に変更不能であるオペレーティングシステムプロセスを構築する動作と、
前記オペレーティングシステムプロセスの少なくとも１つの固定アイデンティティを作成し、前記作成された固定アイデンティティを前記オペレーティングシステムプロセスに関連付ける動作であって、前記固定アイデンティティは、前記構築された変更不能なオペレーティングシステムプロセスを識別し、これを表し、前記固定アイデンティティは、前記オペレーティングシステムプロセスが構築された後に変更不能である、動作と
を含む動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項６７】
前記作成動作は、前記オペレーティングシステムプロセスのプロセスマニフェストに少なくとも部分的に基づいて前記固定アイデンティティを作成し、前記プロセスマニフェストは、オペレーティングシステムプロセスの構築に使用される内容を定義することを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６８】
前記作成動作は、オペレーティングシステムプロセスの構築に使用される構成コンポーネント、オペレーティングシステムプロセスの構築に使用されるロードモジュール、およびオペレーティングシステムプロセスの構築に使用される型付きコード表現からなる群から選択された１つまたは複数に少なくとも部分的に基づいて前記固定アイデンティティを作成することを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項６９】
前記作成動作は、前記オペレーティングシステムプロセスを含むプロセッサ実行可能命令ストリームに少なくとも部分的に基づいて前記固定アイデンティティを作成することを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７０】
前記構築されたオペレーティングシステムプロセスを実行することをさらに含み、前記オペレーティングシステムプロセスおよびその固定アイデンティティは、前記オペレーティングシステムプロセスが実行中に変更不能であることを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７１】
前記構築されたオペレーティングシステムプロセスの前記固定アイデンティティを確認することをさらに備えることを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７２】
前記構築されたオペレーティングシステムプロセスの前記固定アイデンティティを確認することと、
確認された場合に、前記構築されたオペレーティングシステムプロセスを実行することと
をさらに備えることを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７３】
前記作成動作は、少なくとも部分的に、前記構築されたオペレーティングシステムプロセスの構成コンポーネントのうちの１つまたは複数に関数を適用することによって実行されることを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７４】
前記オペレーティングシステムプロセスの前記固定アイデンティティは、プロセスパブリッシャ識別情報、プロセス原作者識別情報、プロセスアクセス許可情報、発行情報、著作権情報、ライセンス付与情報、前記オペレーティングシステムプロセスの構成コンポーネントを識別する情報、およびプロセスの１つまたは複数のクラスへのメンバシップに関連する情報からなる群から選択された追加の識別情報を含むことを特徴とする請求項６６に記載の１つまたは複数のプロセッサ可読媒体。
【請求項７５】
少なくとも１つのプロセッサによって実行されたときに、
構築された後に変更不能である構築されたオペレーティングシステムプロセスを入手する動作であって、前記構築されたオペレーティングシステムプロセスは、前記構築されたオペレーティングシステムプロセスを識別し、これを表し、これに関連する構築されたプロセス固定アイデンティティを有する、動作と、
前記構築されたオペレーティングシステムプロセスの前記構築されたプロセス固定アイデンティティを確認する動作と、
確認された場合に、前記構築されたオペレーティングシステムプロセスを実行する動作と
を備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項７６】
オペレーティングシステムを用いて構成されたコンピュータであって、
１つまたは複数のオペレーティングシステムプロセスのプロセッサ実行可能命令ストリームを実行するように構成されたプロセッサと、
１つまたは複数のプロセスの前記プロセッサ実行可能命令ストリームがプロセッサによって実行されるときに前記１つまたは複数のオペレーティングシステムプロセスを保持するように構成されたメモリと、
前記１つまたは複数のオペレーティングシステムプロセスの１つである対象オペレーティングシステムプロセスが、実行時に別の実行中のプロセスと干渉しないようにするために、前記対象プロセスの前記プロセッサ実行可能命令ストリームを調整するように構成されたプロセス間干渉エリミネータと
を備えることを特徴とするコンピュータ。
【請求項７７】
前記プロセス間干渉エリミネータは、さらに、前記対象プロセスの前記プロセッサ実行可能命令ストリームの実行に先験的に前記調整を実行するように構成されることを特徴とする請求項７６に記載のコンピュータ。
【請求項７８】
前記プロセス間干渉エリミネータは、さらに、前記対象プロセスの前記プロセッサ実行可能命令ストリームの実行中に前記調整を実行するように構成されることを特徴とする請求項７６に記載のコンピュータ。
【請求項７９】
前記プロセス間干渉エリミネータは、さらに、前記対象プロセスが、実行されたときに前記メモリ内の別の実行中のプロセスと干渉する可能性を有するかどうかを判定するために、前記対象プロセスの前記プロセッサ実行可能命令ストリームを分析するように構成されることを特徴とする請求項７６に記載のコンピュータ。
【請求項８０】
前記プロセス間干渉エリミネータは、さらに、前記対象プロセスの前記プロセッサ実行可能ストリームの実行に先験的に前記分析を実行するように構成されることを特徴とする請求項７９に記載のコンピュータ。
【請求項８１】
前記プロセス間干渉エリミネータは、さらに、前記対象プロセスの前記プロセッサ実行可能ストリームの実行中に前記分析を実行するように構成されることを特徴とする請求項７９に記載のコンピュータ。
【請求項８２】
前記プロセス間干渉エリミネータは、さらに、前記対象プロセスが実行時に前記メモリ内の別の実行中のプロセスと干渉する前記可能性を有するとの判定に応答して、その潜在的干渉を除去するために前記対象プロセスの前記プロセッサ実行可能命令ストリームを調整するように構成されることを特徴とする請求項７９に記載のコンピュータ。
【請求項８３】
前記プロセッサは、複数のオペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームがプロセッサによって実行されるときに、前記複数のプロセスを保持するメモリを同時にアドレッシングするように構成されることを特徴とする請求項７９に記載のコンピュータ。
【請求項８４】
少なくとも１つのプロセッサによって実行されるときに、
１つまたは複数のオペレーティングシステムプロセスを入手する動作であって、各プロセスは、プロセッサ実行可能命令ストリームを含む、動作と、
対象オペレーティングシステムプロセスは、実行時に、前記対象オペレーティングシステムプロセスおよび別のオペレーティングシステムプロセスが実行中に前記別のオペレーティングシステムプロセスに干渉する可能性を有するかどうかを判定する動作であって、前記対象オペレーティングシステムプロセスは、前記１つまたは複数のオペレーティングシステムプロセスのうちの１つである、動作と
を備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項８５】
前記判定動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームの実行に先験的に実行されることを特徴とする請求項８４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項８６】
前記判定動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームの実行中に実行されることを特徴とする請求項８４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項８７】
前記対象オペレーティングシステムプロセスは実行時に別の実行中のプロセスと干渉する前記可能性を有するとの判定に応答して、その潜在的干渉を除去するために前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームを調整することをさらに備えることを特徴とする請求項８４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項８８】
前記調整動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能ストリームの実行に先験的に実行されることを特徴とする請求項８７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項８９】
前記調整動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能ストリームの実行中に実行されることを特徴とする請求項８７に記載の１つまたは複数のプロセッサ可読媒体。
【請求項９０】
メモリ内の共通のプロセッサアドレス可能空間内で複数のオペレーティングシステムプロセスを実行することをさらに備えることを特徴とする請求項８４に記載の１つまたは複数のプロセッサ可読媒体。
【請求項９１】
少なくとも１つのプロセッサによって実行されたときに、
１つまたは複数のオペレーティングシステムプロセスを入手する動作であって、各プロセスは、プロセッサ実行可能命令ストリームを含む、動作と、
対象オペレーティングシステムプロセスは、実行時に、前記対象オペレーティングシステムプロセスおよび別のオペレーティングシステムプロセスがメモリ内の共通のプロセッサアドレス可能空間内で実行中に前記別のオペレーティングシステムプロセスに干渉する可能性を有するかどうかを判定する動作であって、前記対象オペレーティングシステムプロセスは、前記１つまたは複数のオペレーティングシステムプロセスのうちの１つである、動作と
を備える動作を実行するプロセッサ実行可能命令を有することを特徴とする１つまたは複数のプロセッサ可読媒体。
【請求項９２】
前記判定動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームの実行に先験的に実行されることを特徴とする請求項９１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項９３】
前記判定動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームの実行中に実行されることを特徴とする請求項９１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項９４】
前記対象オペレーティングシステムプロセスは実行時に別の実行中のプロセスと干渉する前記可能性を有するとの判定に応答して、その潜在的干渉を除去するために前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能命令ストリームを調整することをさらに備えることを特徴とする請求項９１に記載の１つまたは複数のプロセッサ可読媒体。
【請求項９５】
前記調整動作は、前記対象オペレーティングシステムプロセスの前記プロセッサ実行可能ストリームの実行に先験的にまたはその実行中に実行されることを特徴とする請求項９４に記載の１つまたは複数のプロセッサ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的に、オペレーティングシステムプロセスの構築、識別、および／または最適化のテクノロジに関する。
【背景技術】
【０００２】
コンピュータサイエンスの領域、具体的にはオペレーティングシステムの技術で、用語「オペレーティングシステムプロセス」（または単に「プロセス」）は周知である。
【０００３】
アプリケーションは、しばしば、１つまたは複数のプロセスからなる。プロセスは、１つまたは複数のスレッドを有することができる。プロセスは、通常、ストレージから、１つまたは複数のロードモジュールからロードされる。オペレーティングシステム（ＯＳ）は、コンピュータで動作する１つまたは複数の別々のプロセスを知っており、実際に、これらを管理し、監督することができる。
【０００４】
オペレーティングシステムプロセス
従来、ＯＳは、プログラム実行のためのオペレーティングシステムプロセスの使用をサポートする。オペレーティングシステムプロセスは、コンピュータ実行可能命令の１つまたは複数のストリームの実行状態またはコンテキストを定義する。これらのストリームを、時々「スレッド」と称する。
【０００５】
Ｍｉｃｒｏｓｏｆｔ  Ｄｅｖｅｌｏｐｅｒｓ  Ｎｅｔｗｏｒｋ（ＭＳＤＮ（登録商標））ライブラリ（たとえば、非特許文献１参照）によれば、プロセスおよびスレッドの概念は、次の形で説明される。
【０００６】
各プロセスは、プログラムを実行するのに必要なリソースを提供する。プロセスは、仮想アドレス空間、実行可能コード、システムオブジェクトへのオープンハンドル、セキュリティコンテキスト、一意のプロセス識別子、環境変数、ベース優先順位、最小ワーキングセットサイズ、最大ワーキングセットサイズ、および少なくとも１つの実行のスレッドを有する。各プロセスは、しばしば主スレッドと称する単一のスレッドから開始されるが、そのスレッドのどれからでも追加のスレッドを作成することができる。
【０００７】
スレッドは、実行のためにスケジューリングすることができる、プロセス内のエンティティである。あるプロセスのすべてのスレッドが、その仮想アドレス空間およびシステムリソースを共有する。さらに、各スレッドには、例外ハンドラ、スケジューリング優先順位、スレッドローカルストレージ、一意のスレッド識別子、およびスケジューリングされるまでスレッドコンテキストを保存するのにシステムが使用する構造のセットを有する。スレッドコンテキストに、マシンレジスタのそのスレッドのセット、カーネルスタック、スレッド環境ブロック、およびスレッドのプロセスのアドレス空間内のユーザスタックが含まれる。スレッドは、それ自体のセキュリティコンテキストも有することができ、これをクライアント偽装に使用することができる。
【０００８】
ｗｅｂｏｐｅｄｉａ．ｃｏｍによれば、プロセスは、「実行中のプログラム」である。また、ｗｅｂｏｐｅｄｉａ．ｃｏｍは、「実行中のプログラムおよびオペレーティングシステムによって使用されるブックキーピング情報の組合せを指す、オペレーティングシステムの概念。プログラムを実行するときには、必ず、オペレーティングシステムが、そのプログラムのために新しいプロセスを作成する。プロセスは、プログラムの封筒のようなものであり、プロセス番号を用いてプログラムを識別し、他のブックキーピング情報をプログラムに追加する」とプロセスを定義している。
【０００９】
従来のＯＳでは、プロセスが、静的にまたは動的に作成される。静的に作成されたプロセスのコンポーネントは、「リンク時」にモノリシックロードモジュールにアセンブルされ、これが、その後、ロードされる。動的に作成されたプロセスのコンポーネントは、「ロード時」または「ランタイム」に複数の構成ロードモジュール（一般にダイナミックリンクライブラリ（ＤＬＬ）と称する）から動的にアセンブルされる。
【００１０】
モノリシックプロセスアーキテクチャ（プロセスコンポーネントが「リンク時」にモノリシックロードモジュールに静的にアセンブルされる）では、プロセスのすべての実行可能コードが、単一のロードモジュールに事前にパッケージ化される。単一のロードモジュールだけがあるので、構成要素変更が行われるときのプロセスの構成要素の更新は、プロセスロードモジュール全体の再構成を必要とする。
【００１１】
その故に、静的にモノリシックに作成されたプロセス内の実行可能コードの保全性およびセキュリティを保証することができる。言い換えると、このアーキテクチャは、プロセスのコードを識別する（たとえば、単一のロードモジュールをハッシュ化することを介して）ことを固有に可能にし、その結果、そのコードに対する許可されないまたは不適当な変更を信頼できる形で検出することができるようになる。この形で、悪意のあるコード（たとえば、「ウィルス」、「ワーム」、または「スパイウェア」からの）は、安定した内容および安定したセキュリティステートメントを有するプロセスの実行可能コードに侵入することができない。
【００１２】
プロセスのコードのすべてが、静的にモノリシックにアセンブルされるので、モノリシックロードモジュールの静的分析は、その将来の実行が安定しているかどうかなど、その将来の実行の多数の有用な特性を正確に判定することができる。さらに、モノリシックロードモジュールに対する最適化分析は、その将来の実行のためにコードを正確に最適化することができる。
【００１３】
動的にアセンブルされるプロセスのアーキテクチャは、プロセスのコンポーネントの更新において、モノリシックプロセスアーキテクチャより高い柔軟性を提供する。これらのアーキテクチャは、潜在的に、コンポーネントの単一のコピーを複数のプロセスの間で共有できるときなど、ストレージおよびメモリ空間を節約することができる。
【００１４】
従来の動的にアセンブルされたプロセスのアーキテクチャでは、安定性分析および最適化分析を実行することがむずかしく、これらを無効にすることが簡単である。これは、複数の個々のコンポーネントのそれぞれのコードが、他のコンポーネントと独立にパッケージ化され、各コンポーネントの実行環境が、ロード時の前に未知であるからである。
【００１５】
さらに、従来の動的にアセンブルされるプロセスのコンポーネント（たとえば、ＤＬＬ）は、動作中のプロセスにロードされ、そのプロセスの状態を変更し、その後、そのプロセスからアンロードすることができる。これによって、プロセス状態を任意に変更することが可能になる。この故に、プロセスのコードが実行される前、またはそのコードが実行されているときであっても、従来の動的にアセンブルされるプロセスに対して保全性分析およびセキュリティ分析を実行することは、特にむずかしい。
【００１６】
【非特許文献１】ｍｓｄｎ．ｍｉｃｒｏｓｏｆｔ．ｃｏｍ／ｌｉｂｒａｒｙ／ｄｅｆａｕｌｔ．ａｓｐ？ｕｒｌ＝／ｌｉｂｒａｒｙ／ｅｎ−ｕｓ／ｄｌｌｐｒｏｃ／ｂａｓｅ／ａｂｏｕｔ＿ｐｒｏｃｅｓｓｅｓ＿ａｎｄ＿ｔｈｒｅａｄｓ．ａｓｐ
【発明の開示】
【発明が解決しようとする課題】
【００１７】
最近の管理されたアプリケーションシステム（Ｓｕｎ（登録商標）社のＪａｖａ（登録商標）ＲｕｎｔｉｍｅまたはＭｉｃｒｏｓｏｆｔ（登録商標）社のＣｏｍｍｏｎ  Ｌａｎｇｕａｇｅ  Ｒｕｎｔｉｍｅ（ＣＬＲ）など）は、さらに、ランタイムでの任意のコード生成ならびに任意のコードローディングを可能にし始めている。しかし、これらの進歩を用いても、保全性およびセキュリティについて分析できる、オペレーティングシステムプロセス、特に動的にアセンブルされるプロセスを構築する必要が残されている。
【課題を解決するための手段】
【００１８】
本明細書では、オペレーティングシステムプロセスの構築、識別、および／または最適化のテクノロジの実装を説明する。本明細書に記載の少なくとも１つの実装は、プロセスマニフェストによって定義された内容を有するオペレーティングシステムプロセスを構築する。構築されたならば、オペレーティングシステムプロセスは変更不能である。
【００１９】
複数の図面を通じて、類似する要素および特徴を指すのに同一の符号が使用されている。
【発明を実施するための最良の形態】
【００２０】
次の説明では、「オペレーティングシステムプロセス」（または単に「プロセス」）の構築、識別、および／または最適化のテクノロジを実装する技法を示す。これらの技法の例示的な実装を、「例示的なプロセス構築」と呼ぶ場合がある。
【００２１】
従来の動的にアセンブルされるプロセスの保全性、セキュリティ、および安定性の最適化およびそれらに対する有効な分析を実行することは、むずかしく、時々ほぼ不可能である。主に、これは、プロセス内のコードの完全にアセンブルされたアイデンティティが、ロード時またはランタイムまで未知であり、しばしばプロセスの実行中に変化するからである。異なるダイナミックコンポーネント（たとえば、ＤＬＬ）のリンクは、一般に、プロセスのセマンティクスを任意に変更することができるので、従来の動的にアセンブルされるプロセスの可能な結果に関する確実性は、一般に、ほとんどない。これは、安全であり、安定し、堅牢であり、決定的なシステムを作成する実践面での障害である。既存のワークアラウンドは、その範囲および有用性において制限されている。
【００２２】
本明細書に記載の技法は、動的にアセンブルされるプロセスを含むオペレーティングシステムプロセスの構築に関するコンピュータサイエンス（および、具体的にはオペレーティングシステム）の領域への新鮮で活気付ける手法を提供する。この新しい手法を用いると、システムアーキテクト、デベロッパ、および管理者が、安全であり、安定し、堅牢であり、決定的とすることのできるソフトウェアプロセスおよびオペレーティングシステムプロセスをたやすく信頼できる形で構築することができる。
【００２３】
例示的なプロセス構築
図１に、例示的なプロセス構築の動作シナリオを示す。図１には、コンピュータ１２０に保管され、かつ／またはそこで実行されるオペレーティングシステム１１０の一部としてプロセス構築アーキテクチャ１００が示されている。プロセス構築アーキテクチャ１００は、図１に示されているように、オペレーティングシステムの一部とすることができる。その代わりに、プロセス構築アーキテクチャ１００のすべてまたは一部を、オペレーティングシステムから分離し、なおかつオペレーティングシステムと協力して働くものとすることができる。
【００２４】
プロセス構築アーキテクチャ１００は、コンピュータの作業メモリ内で、エクステンディングコンポーネント（ｅｘｔｅｎｄｉｎｇ  ｃｏｍｐｏｎｅｎｔ）のセットによって編集された構成コンポーネントのダイナミックセットからプロセスを構築する。構築されたならば、アクティブプロセスの実行可能コードが固定される。固定されたならば、アクティブプロセスは、新しいプロセッサ実行可能コードを実行することができない。それを行うためには、プロセスを、その一部として新しいコードを用いて新たに再構築するか、新しいアドオンプロセスを作成しなければならない。
【００２５】
構成コンポーネントおよびエクステンディングコンポーネントのダイナミックセットは、通常、コンピュータストレージに保管されたロードモジュールのセットとしてマニフェストされる。プロセス構築アーキテクチャ１００は、１つまたは複数のさまざまなプロパティ（たとえば、保全性、セキュリティ、信頼性、可用性、リソース使用分析、完全性分析、および／または安定性）に関する分析を実行できると同時に、さまざまな望ましい最適化を実行できるようにする形でプロセスを構築する。
【００２６】
コンピュータ１２０に、ロードモジュール１２４のセットを保管するコンピュータストレージデバイス１２２（たとえば、ハードドライブ、ＲＡＩＤシステムなど）および作業メモリ１３０が含まれる。図１の例では、プロセス構築アーキテクチャ１００が、作業メモリ１３０に保管されるプロセス１４０を構築する。この図に示されているように、プロセス１４０は、ロードモジュール１２４から構築され、ロードモジュール１２４は、プロセスのエクステンディングコンポーネントによって編集される、プロセスの構成コンポーネントのマニフェステーション（ｍａｎｉｆｅｓｔａｔｉｏｎ）である。
【００２７】
プロセス１４０は、プロセスマニフェスト１４２を有し、プロセスマニフェスト１４２は、プロセス１４０の最終的な内容を定義する。この最終的な内容の一部に、プロセスのエクステンディングコンポーネントによって編集された、プロセスの構成物が含まれる。この図に示されているように、プロセスマニフェスト１４２は、その構成をそれが記述するプロセス（プロセス１４０など）に直接に関連する。
【００２８】
プロセスを構築する際に、プロセス構築アーキテクチャ１００は、次の機能コンポーネントのうちの１つまたは複数を使用することができる：プロセスマニフェストコンポーザ１５０、型付きコード表現（ｔｙｐｅｄ−ｃｏｄｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）クリエータ１５２、型付きコード表現アップデータ１５４、オプティマイザ１５６、型付きコード表現コンバータ１５８、プロセス間干渉エリミネータ１６０、および固定アイデンティティクリエータ１６２。図１には、これらの機能コンポーネントが互いに別々のものとして図示されているが、これらの機能コンポーネントのうちの１つまたは複数の機能性を組み合わせることができる。
【００２９】
プロセスマニフェスト
図２に、プロセスマニフェスト２００の例のデータ構造を示す。このデータ構造に、通常、フォーマットされたメタデータが含まれる。プロセスマニフェストは、これから構築されるプロセスを構築するのに最終的に必要な内容の完全なリストを提供する。
【００３０】
図２に示されているように、プロセスマニフェスト２００の例示的なデータ構造に、次のタイプの内容定義のうちの１つまたは複数が含まれる。
【００３１】
・プロセスのロードモジュールを定義する構成コンポーネント。この構成コンポーネントに、プロセス内で動作するコードが含まれる。一実施形態で、ロードモジュールは、命令内のコードおよびこれらの命令によって操作されるデータの型を記述するフォーマットで表される。したがって、このコードを、型付きコードと称する。図２の２１０に、構成コンポーネントの定義の例が示されている。
【００３２】
・構成コンポーネントのコードおよび型に基づいてコードまたはオブジェクトを追加するか変更するエクステンディングコンポーネント。例示的なプロセス構築では、プロセスのコードの拡張が、これによって、制御され予測可能な形でのみ可能にされる。たとえば、エクステンディングコンポーネントは、プロセスの残りがその実行を開始する前にその実行を完了する。エクステンディングコンポーネントは、「エクステンダ」とも呼ばれる。エクステンディングコンポーネントは、しばしば、プロセス構築中に実行されるロードモジュールによってマニフェストされる。図２の２２０に、エクステンディングコンポーネントの定義の例が示されている。
【００３３】
・プロセスの構成コンポーネントによってエクスポートまたはインポートされる外部（または「プロセス外」）通信型のセットを定義する外部インターフェース。これらの外部インターフェースは、システムの他の部分または他のプロセスとのプロセスの通信を定義し、制約する。図２の２３０に、外部インターフェース定義の例が示されている。
【００３４】
・システムプロセッサに最終的に供給されるネイティブ命令ストリームを作成するコードジェネレータ。構成コードは、ネイティブ命令ストリームで記述される必要がなく、したがって、コードジェネレータコンポーネントが、変換に必要になる場合がある。図２の２４０に、コードジェネレータインターフェース定義の例が示されている。
【００３５】
内容定義は、通常、実際のマニフェスト自体の外部にあるエンティティ（ロードモジュールまたはコードジェネレータなど）を定義する。
【００３６】
プロセスマニフェストコンポーザ
プロセスマニフェストコンポーザ１５０は、図１のプロセスマニフェスト１４２および図２のプロセスマニフェスト２００などのプロセスマニフェストを作成するか、その作成を容易にする。
【００３７】
プロセスマニフェストコンポーザ１５０の機能は、別のプロセスによる要求時に、またはソフトウェアをインストールするか更新するシステム管理者の要求によって実行することができる。１つまたは複数の子プロセスを開始するプロセスは、時々「親プロセス」と呼ばれる。
【００３８】
いくつかの場合に、プロセスマニフェストコンポーザ１５０は、親プロセスまたは別の要求するプロセスによって供給された情報から、子プロセスのマニフェストを直接に構成することができる。他の場合に、コンポーザ１５０は、事前に計算されたか事前にインストールされたプロセスマニフェストを使用するか、そのような事前に存在するプロセスマニフェストを拡張することができる。たとえば、プロセスマニフェストコンポーザ１５０は、同一のまたは類似するプロセスマニフェストへのアクセスまたは構成を繰り返すときに、計算または構成を繰り返すのではなく、前の計算または構成の結果を取り出すことができる。その代わりに、コンポーザ１５０は、部分的マニフェストを利用し、他のプロセスまたはオペレーティングシステムからの助けを得てそのマニフェストを完成することができる。
【００３９】
プロセス構築アーキテクチャ１００を使用するＯＳで、ＯＳは、複数のアプリケーション（たとえば、１つまたは複数のプロセスからなるソフトウェアプログラム）および複数の「アプリケーションマニフェスト」を有することができる。コンポーザ１５０は、１つまたは複数のアプリケーションマニフェストからの情報を使用して、１つまたは複数のプロセスマニフェスト、型付きコード表現、プログラム分析、および命令ストリームのすべてまたは一部を事前に計算し、キャッシングすることができる。
【００４０】
型付きコード表現クリエータ
型付きコード表現クリエータ１５２は、指名された構成コンポーネントおよび外部インターフェース（両方がプロセスマニフェストで定義される）のロードモジュールからプロセスの型付きコード表現を作成する。
【００４１】
本明細書では、用語「型付きコード表現」が、ロードモジュール内で表されたすべてのコードおよびそれらのコードによって操作されるデータオブジェクトの型を記述し、どのデータオブジェクトがコードの各要素によって操作されるかを記述した、中間言語（ＩＬ）表現と定義される。追加のコードまたは型は、そのようなプロセスが実行を開始したならば、プロセスに追加されず、これによって、プロセスが実行を開始する前のより広範囲の分析が可能になる。さらに、ＩＬ自体は、分析を可能にする制約されたフォーマットなので、型付きコード表現に対する非常に広範囲のそのような分析が可能である。
【００４２】
本明細書で説明する少なくとも１つの実装で、ロードモジュールの型付きコード表現フォーマットは、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅ（ＭＳＩＬ）である。当業者は、ＭＳＩＬが一例にすぎないことと、他の実装が、Ｊａｖａ（登録商標）バイトコードまたは型付きアセンブリ言語を含むがこれに制限されない他の型付きコード表現フォーマットを使用できることを認めるであろう。もちろん、構成コンポーネントに、型付きコード表現のコードまたはロードモジュール内の型付きコード表現を生成するのに使用できる他のフォーマットのコードも含めることができる。
【００４３】
追加の型およびコードを、プロセスマニフェストで述べられ、参照される外部インターフェースに応じるために、必要に応じて自動的に導入することができる。構成コンポーネントおよび外部インターフェースへのクロスコンポーネント参照は、型付きコード表現で解決される。
【００４４】
型付きコード表現クリエータ１５２は、型付きコード（型付きコード表現で記述されたコード）をプロセスの型付きコード表現に追加する前に、型付きつきコードを検査して、その型付きコードが必要なシステム構成プロパティまたはポリシに準拠することを保証する。たとえば、システムポリシは、ある選択判断基準に従って、一緒に動作することがわかっていないソフトウェアコンポーネントを一緒にリンクしてはならないことを要求することができる。
【００４５】
システム構成プロパティまたはポリシの例が、あるプロセスの各コンポーネントが型安全でなければならず、そのプロセス内のコンポーネントの構成も型安全でなければならないというポリシである。コンポーネントまたはプロセスは、各関連するデータ要素がそれが属する型であり、データ要素がそれが属さない型として扱われない場合に、型安全（型安全性を維持するために）と言われる。
【００４６】
代替案では、型付きコード表現クリエータ１５２が、さらに、型付きコード全体およびプロセスマニフェスト全体も、要求されるシステム構成プロパティまたはポリシと一貫していることを検査する。たとえば、システムポリシは、システム全体が、リアルタイム応答性を保証することを意図されたある分析に合格することを要求することができる。
【００４７】
たとえば、型付きコード表現クリエータ１５２は、型付きコードが型安全性に違反しないこと、または型付きコードがプロセス間通信を正しく実装することを検査することができる。型付きコード表現のプログラムのすべての分析は、型安全性に違反する可能性がある場合に無効にすることができ、通信するプログラムのすべての分析は、通信要件に違反する可能性がある場合に無効化することができる。
【００４８】
型付きコード表現クリエータ１５２は、さらに、コードの１つまたは複数のパブリッシャに基づくポリシ、コードの１つまたは複数のパブリッシャによって確立されたポリシ、管理者によって確立されたポリシ、または他の形で確立されたポリシなど、あるグローバル構成プロパティまたはポリシを満足することを確認することができる。型付きコード表現クリエータ１５２は、さらに、型付きコードが、セキュリティ、保全性、型安全性、通信要件への準拠、コード挙動の部分的指定への準拠などに関連するある所望のグローバルプロパティに違反しないことを確認することができる。
【００４９】
型付きコード表現アップデータ
型付きコード表現アップデータ１５４は、エクステンディングコンポーネントを介して型付きコード表現を更新（または「変更」）する。これらのエクステンディングコンポーネントは、プロセスマニフェストで定義されるか、リストされるか、概要を示される。さらに、特定のシステムが、標準エクステンディングコンポーネントのセットを使用可能または必須にさせることができる。型付きコード表現アップデータ１５４は、各エクステンディングコンポーネントが型付きコード表現を操作することを可能にする。エクステンディングコンポーネントは、入力として、型付きコード表現およびプロセスマニフェストで指定された追加の引数またはパラメータをとる。
【００５０】
１つのエクステンディングコンポーネントの出力を、別のエクステンディングコンポーネントの入力にすることができ、エクステンディングコンポーネントが、その作業を完了するために繰り返して呼び出されることを要求することができる。例示的なプロセス構築では、エクステンディングコンポーネントは、型付きコード表現が収束するまで繰り返して呼び出される。各エクステンディングコンポーネントは、それ以上の更新が不要になるまで、型付きコード表現を更新する機会を繰り返して与えられる。
【００５１】
収束は、作業の終りをシグナリングする。というのは、それ以上の変換が不可能であるからである。型付きコード表現アップデータ１５４は、結果の型付きコード表現が、必要なシステム構成プロパティなどに準拠することを検査する。エクステンディングコンポーネントを、変換の機会が生じたときに便宜主義的に呼び出すことができる。
【００５２】
代替案では、エクステンディングコンポーネントのリストが、順序付きであり、各エクステンディングコンポーネントが、必要に応じて順番に呼び出される。
【００５３】
型付きコード表現アップデータ１５４は、通信マーシャリングエクステンダなどのエクステンディングコンポーネントを呼び出して、プロセス境界をまたいで通信されるデータ構造の各型を列挙し、その型のデータ構造を、プロセス境界をまたぐ通信に適するバイトのストリームにコピーする関数を生成することができる。エクステンディングコンポーネントのもう１つの例が、データ構造の内容およびサイズに対する検査などの追加検査を挿入して、プロセス実行の保全性を検査するプロセス保全性エクステンダである。
【００５４】
例示的なプロセス構築で、型付きコード表現アップデータ１５４による検査は、型付きコードが型付きコード表現に最初に導入されるときなど、以前のステージで検査または生成された情報を使用することによって、潜在的に最適化されるか回避される。代替案では、エクステンダコンポーネントの以前の適用の結果を、キャッシングし、後に再利用して、後続の再適用を回避することができる。
【００５５】
オプティマイザ
オプティマイザ１５６は、型付きコード表現のプロセスグローバル分析およびプロセスグローバル最適化を介して型付きコード表現を最適化する。オプティマイザ１５６は、クロスプロセス分析およびクロスプロセス最適化も実行することができる。
【００５６】
図１に示されているように、オプティマイザ１５６を、プロセス構築アーキテクチャ１００の一部とすることができる。代替案では、オプティマイザを、プロセス構築アーキテクチャ１００の外部とすることができる。オプティマイザを、１つまたは複数の別々のコンポーネントからなるものとすることもできる。
【００５７】
当業者は、プロセスグローバルな基礎で安全に実行できる分析および最適化に、定数伝搬、コード畳み込み、デッドコード除去、関数インライン化、部分的関数インライン化、部分的評価、および関数特殊化が含まれるがこれに制限されないことを認めるであろう。
【００５８】
従来の手法では、そのような「プログラム全体」の最適化は、バイナリ（．ＥＸＥまたは．ＤＬＬなど）全体についてのみ可能であったが、そのような最適化の範囲は、ダイナミックリンクおよびランタイムコード生成の可能性の故にあるプロセスのコードの完全なセットが入手可能にならなかったので、制限されていた。さらに、従来の手法には、あるプロセスの内容全体を記述した適当に構成されたマニフェストまたは型付きコード表現が欠けていた。
【００５９】
オプティマイザ１５６は、プロセス作成時またはその前に型のセットを固定し、すべてのコードおよびすべての型の情報（プロセスの外部インターフェースの型情報を含む）を統一された型付きコード表現に変換することによって、完全にプロセスグローバルな最適化を可能にする。
【００６０】
プロセスグローバル最適化の他に、オプティマイザ１５６は、クロスプロセス最適化を実行することができる。複数の通信するプロセスの型付きコード表現は、その両方が作成された後に安定しているので、通信するプロセスのセットを判定できるならば、複数のプロセスにまたがって最適化を行うことが安全である場合がある。
【００６１】
たとえば、両方のプロセスがデータオブジェクトの同一の内部表現を使用し、交換できることがわかっているときに、データオブジェクトのマーシャリングおよびアンマーシャリング用のマーシャリングコードを除去することなど、相補的な変更がプロセスに対して行われる場合に、しばしば、クロスプロセス通信のコストを下げることができる。両方のプロセスが同一の内部表現を使用するので、データオブジェクトの内部表現を外部表現に変換するマーシャリングコードの必要はない。通常、他の、より詳細なクロスプロセス分析およびクロスプロセス最適化も、通信するプロセスの完全な型付きコード表現が既知になった後に、実行が可能になる。また、より大きい最適化が、コードの実行環境に関するより多くの詳細が入手可能になったときに可能である。
【００６２】
さらに、オプティマイザ１５６は、プロセスのプロセッサ実行可能命令ストリーム（たとえば、実行可能コード）を分析し、変換し、最適化し、検査することができる。
【００６３】
型付きコード表現を更新した後に、オプティマイザ１５６は、プロセスの型付きコード表現が完成しているので、型付きコード表現に対するプロセスグローバル分析を安全に実行することができる。この分析は、プログラムの可能なエラーおよび実際のエラーを検出するのに使用することができる。
【００６４】
当業者は、プロセスグローバルな基礎で安全に実行できる分析に、データフロー分析、抽象解釈、モデル検査、ソフトウェアモデル検査、準拠検査、およびグローバル値フロー分析が含まれるが、これに制限されないことを認めるであろう。検出できるエラーに、バッファオーバーフロー、ヌルポインタ間接参照、未検査のエラー状態、未処理の例外、およびインターフェースプロトコル違反が含まれるが、これに制限はされない。
【００６５】
さらに、オプティマイザ１５６は、プロセスの前の実行のヒストリに基づいて型付きコード表現を最適化することができる。プロセスを、その実行時に分析し、その実際の動作が与えられた場合に、どうすればプロセスを最もよく最適化できるかを判定することができる。その分析を記録することができ、その結果、そのプロセスの型付きコード表現を、その記録された分析に基づいてより正確に最適化できるようになる。
【００６６】
型付きコード表現コンバータ
型付きコード表現コンバータ１５８は、型付きコード表現から（プロセスマニフェストで定義されたコードジェネレータを使用して）プロセッサ実行可能命令ストリームを生成する。結果のストリームは、プロセスが実行されることが意図されているコンピュータの１つまたは複数のプロセッサのネイティブ命令セットを使用する。
【００６７】
型付きコード表現コンバータ１５８は、ローカルプロセッサ用のリストされたまたは指定されたコードジェネレータ（群）を型付きコード表現内の情報に適用することによって、実行可能コードを生成する。型付きコード表現コンバータ１５８は、プロセスが実行を開始する前に、プロセッサ実行可能命令ストリーム全体を作成する。さらに、型付きコード表現コンバータ１５８は、プロセスのコードがシステムにインストールされるときにプロセスのプロセッサ実行可能命令ストリーム全体を作成し、プロセスの構成コンポーネントが再インストールされるか他の形でシステム上において変更されるときに再作成される。
【００６８】
代替案では、プロセッサ実行可能命令ストリームの一部が、当業者に既知のジャストインタイム（ＪＩＴ）コンパイル技法を使用して、実行に間に合うように型付きコード表現から生成される。さらに、プロセッサ実行可能命令ストリーム（またはその一部）は、当業者に既知の技法を使用して性能測定が行われるときに、再生成することができる。他の代替案では、プロセッサ実行可能命令ストリーム（またはその一部）は、プロセスの構成、それが通信するプロセスの構成、またはオペレーティングシステム全体の構成が変更されるときに再生成される。
【００６９】
プロセス間干渉エリミネータ
プロセス間干渉エリミネータ１６０は、プロセス内のプロセス間メモリ干渉またはプロセス間状態干渉を分析し、検査し、かつ／または除去する。プロセス間干渉エリミネータ１６０は、プロセスをそれ自体の「ワークスペース」に分離することによって、従来はオペレーティングシステムによって実行された「プロセスメモリ管理」の要素（プロセス間メモリ干渉またはプロセス間状態干渉の除去である要素）を実行する。
【００７０】
オペレーティングシステムに、「プロセスメモリ管理」コンポーネントが含まれることが一般的である。プロセスメモリ管理の主な目的は、アクティブプロセスが、メモリに保管された他のアクティブプロセスの状態を壊さないことを保証することである。プロセスメモリ管理は、アクティブプロセスの間の制御されないメモリアクセスという形の制御されないプロセス間干渉を制限するか防止する。
【００７１】
プロセスメモリ管理によって提供される保証がないと、あるプロセスのデータおよび実行コードが、別のプロセスによって無差別に一方的に変更され、除去され、変化させられ、修正される可能性があり、そのようなアクションの通知または知識なしにそれを行われる可能性がある。プロセスメモリ管理によって提供される保証があると、プロセスの設計者、実装者、管理者、またはユーザが、そのデータおよび実行コードが無変更のままであることを確信する。プロセスメモリ管理の目的を進めるために、通常は、無差別干渉なしのプロセス間通信のためのある形の制限されたメッセージングまたは選択的共有メモリシステムがある。
【００７２】
アクティブプロセスが「他のプロセスとうまくやる」ことを保証する従来の手法は、アクティブプロセスごとにメモリ内に分離された「ワークスペース」を予約することである。プロセスが作成されるときに、従来のプロセスマネージャは、アクティブプロセスごとに、定義された範囲の中央処理ユニット（ＣＰＵ）のアドレス可能メモリ（「アドレス空間」と呼ぶ）を予約する。従来のプロセスは、その定義された「アドレス空間」内で自由に動作することができるが、そのアドレス空間の外部を直接に操作することはできない。
【００７３】
この従来の手法は、非常に広範囲で使用されているので、多数のＣＰＵ（および他のコンピュータハードウェア）が、ハードウェアレベルでプロセス管理の多くを実行するように設計されている。実際に、従来の用語法の「プロセス」とその「アドレス空間」の間の関連は、非常に強いので、これらの用語は、しばしば、当業者にとって同義と考えられている。
【００７４】
プロセス構築アーキテクチャ１００では、用語「プロセス」および「アドレス空間」は、もはや同義語ではない。実際に、これらの用語の概念は、今は互いに独立である。
【００７５】
従来の手法と異なって、プロセス構築アーキテクチャ１００は、プロセスごとに別々に定義されたアドレス空間を必要としない。プロセス構築アーキテクチャ１００は、各プロセスがそれ自体の分離されたアドレス空間に置かれること、各プロセスが別々の保護リングに置かれること、および／またはプロセスアドレス空間の分離を保証するためにハードウェアベース保護機構が使用されることを必要としない。
【００７６】
各プロセスをそれ自体の「アドレス空間」に分離するプロセス管理の従来の手法を使用するのではなく、例示的なプロセス構築は、プロセスの実行可能コードを管理し、その結果、実行可能コード（その最終的な形の）が、そのようなコードが実行されるときにプロセス間干渉を実行しないようにする。図１からわかるように、プロセス間干渉エリミネータ１６０が、このプロセス管理を行う。
【００７７】
このプロセス管理中に、プロセス間干渉エリミネータ１６０は、プロセス間干渉の可能性を含む可能性があるすべてのアクション（実行されたときに実行可能コードが実行するはずの）を検出する。検出したならば、プロセス間干渉エリミネータ１６０は、結果の実行可能コードを変更し、その結果、そのコードが実行されたときのプロセス間干渉の可能性をなくす。一実施形態で、実行可能コードは、型安全性のプロパティを維持する。
【００７８】
プロセス構築アーキテクチャ１００に従って作成されたプロセスは、ランタイムポリシまたは管理ポリシに基づいて、単一のアドレス空間および／または単一の保護リングに集約することができる。
【００７９】
必要ではないが、プロセス構築アーキテクチャ１００に従って作成されたプロセスを、ハードウェアベースのメモリ保護を用いてそれ自体のアドレス空間に置くことができる。必要ではないが、プロセス構築アーキテクチャ１００に従って作成され、特定のユーザの代わりに動作するプロセスを、単一のアドレス空間に分離して、そのユーザのプロセスを実行するときにまたがれるハードウェアベース保護境界の個数を最小にすることができる。
【００８０】
固定アイデンティティクリエータ
固定アイデンティティクリエータ１６２は、プロセスマニフェスト、プロセス内に含まれる型付きコード表現、およびプロセッサ実行可能命令ストリームを作るのに使用されるコードジェネレータのうちの１つまたは複数から導出される、プロセスの「固定アイデンティティ」を考案する。
【００８１】
この固定アイデンティティは、最終的に、プロセスに含まれる型付きコード表現、コードを変更するのに使用されるエクステンダ、コードを最適化するのに使用されるオプティマイザ、型付きコード表現からネイティブ命令ストリームを作るのに使用されるコードジェネレータのアイデンティティ、ならびに、これらのコンポーネントのそれぞれの固定アイデンティティを含むこれらのコンポーネントのそれぞれに渡される明示的オプションおよび暗黙のオプションの関数である。これらの入力に対する変更のすべてが、出力の異なる別個のアイデンティティを作る。
【００８２】
ある意味で、この固定アイデンティティは、すべての可能なプロセスの空間内でのこのプロセスの指定であり、すべての可能なプロセスの空間は、プロセスを用いて可能な計算の空間と定義される。最も一般的な場合に、プロセスアイデンティティ関数は、前のサブアクションを実行した後に、プロセスに含まれる型付きコード表現全体に対する計算を実行する。しかし、実用のために、より単純な関数が、しばしば適当である。
【００８３】
固定アイデンティティクリエータ１６２は、たとえば、プロセスの構成コンポーネントおよびエクステンディングコンポーネントのディジタル署名などに対してハッシュ関数を実行することができる。この手法は、特に内部接続がコンポーネント内で表されたクロスコンポーネントバインディング依存性に制限され、コンポーネントディジタル署名によって固定されているときに、実用的である。プロセス内容に直接に命名するのではなく、この手法は、入力に命名し、これらが組み合わされる式を指定することによって、プロセスに間接的に命名する。
【００８４】
代替案では、固定アイデンティティクリエータ１６２が、たとえば、プロセスのプロセスマニフェストに対してハッシュ関数を実行することができる。プロセスマニフェストには、プロセスを構成する構成コードコンポーネントおよびエクステンションを識別するのに十分なデータが含まれる。コンポーネントコードのハッシュが、そのようなデータの例である。
【００８５】
例示的なプロセス構築では、実際の構成コンポーネントが、プロセスがロードされつつある間に、必要な値に対して検査される。一致がある場合に、プロセス名が、プロセスマニフェストから導出される。この機構を介して、プロセスに、マニフェスト内のソフトウェアパブリッシャによって提案されたアイデンティティ（たとえば、「ＰｒｏｇｒａｍＸ１１．６５３９．６６６６」）を与えることができる。パブリッシャによって提案されたこの情報は、部分的アイデンティティを与えることができる。この部分的アイデンティティは、さらなる検査のために有用な情報（たとえば、プログラムの販売時の名前、そのバージョン、発行日付など）を組み込まれ、より有用でない情報（たとえば、構成ロードモジュールの名前、作成者の名前など）を省かれる。
【００８６】
この情報を、パブリッシャのアイデンティティ（たとえば、ＣｏｍｐａｎｙＡ）またはプロセスのロードモジュールがそのパブリッシャから来たことの証拠（たとえば、ＣｏｍｐａｎｙＡの秘密鍵を使用して署名されたロードモジュールのダイジェスト）など、プロセスインスタンスに関する情報と組み合わせることができる。同様に、この情報を、パブリッシャによって与えられた権利（たとえば、ある保護されたリソースにアクセスする権利）のインジケータと組み合わせることができる。
【００８７】
例示的なプロセス構築では、入力のクラスおよび式のクラスに命名するか、これらをプロセスアイデンティティと突き合わせることもできる。これによって、たとえば同一の構成コンポーネントを共有するが、これらの構成コンポーネントに基づいて型付きコード表現に対して実行される最適化または分析のセットが異なる可能性がある、プロセスの所与のクラスの固定された名前、アイデンティティ、またはパターンの割り当てが可能になる。
【００８８】
プロセスの「固定アイデンティティ」を、制限されたリソースへのアクセスの許可、ランタイム使用情報の収集、製品サポートオプションの選択、およびシステム互換性パッチの適用を含むがこれに制限されない広範囲の目的に使用できることを、当業者は認めるであろう。プロセスの「固定アイデンティティ」に、さらに、親プロセス、オペレーティングシステム、およびプロセスマニフェストに影響した可能性があるか、その実行に影響する可能性があるか、それと情報を交換する可能性がある他のプロセスのアイデンティティを含めることができることを、当業者はさらに認めるであろう。
【００８９】
代替の実装で、固定アイデンティティクリエータ１６２は、２つの別々のアイデンティティを作成する。１つは、プロセスの内容に関するものであり、もう１つは、そうすることを要求されたときにＯＳによって作成される実行中のプロセスに関するものである。プロセス内容に関するアイデンティティを、その後、同時にまたは経時的に、複数のプロセスに関係させることができる。
【００９０】
プロセスアイデンティティの作成は、本明細書では、グローバル最適化およびネイティブ命令ストリームの生成の後にリストされているが、並べ換えが最終的なプロセスアイデンティティを変更しないか偽装を可能にしないときに、プロセスアイデンティティの作成を並べ替えることができることを、当業者は認めるであろう。
【００９１】
ある実装で、プロセスアイデンティティは、グローバル最適化の前に作成され、これによって、グローバル最適化の詳細から独立にすることができる。もう１つの実装で、プロセスアイデンティティは、グローバル最適化の後だが、ネイティブ命令ストリームの作成の前に作成され、これによって、ネイティブ命令ストリームの生成の詳細から独立にすることができる。もう１つの実施形態では、複数のアイデンティティを、使用可能な情報のさまざまなサブセットおよび組合せを使用して作成することができ、それらの間の関係を、追加のメタデータによって表すことができる。
【００９２】
本明細書に記載の技法によれば、プロセス内で動作する実行可能コードは、プロセスが構築されるときに固定される（または「封印」される）。作成時にプロセスを封印することによって、オペレーティングシステムは、パスワードまたは他の機密情報などの秘密の情報を敵意のある当事者から隠すことができるという高い度合の信頼をプロセスに与えることができる。
【００９３】
プロセス構築アーキテクチャ１００は、偶然にまたは意図的にのいずれかでセキュリティ保護を回避する可能性があるコードのプロセスへのロードを防ぐ。プロセス構築アーキテクチャ１００は、オペレーティングシステムがプロセス内のすべてのコードを検査し、検証する機構を提供する。プロセス構築アーキテクチャ１００は、プロセスの明示的な知識および制御なしでのプロセスの状態へのアクセスも防ぐ。本明細書に記載の技法によれば、プロセスの状態へのアクセスは、デバッギング機構などの外部機構を介するものであっても禁止することができる。
【００９４】
例示的なプロセス構築の方法論的実装
図３に、オペレーティングシステムプロセスを構築するときにプロセス構築アーキテクチャ１００の機能コンポーネントによって実行される方法３００を示す。この方法論的実装は、ソフトウェア、ハードウェア、またはその組合せによって実行することができる。理解を簡単にするために、この方法を、図３では独立のブロックとして表された別々のステップとして区切るが、これらの別々に区切られたステップを、その実行に依存する必要な順序と解釈してはならない。さらに、議論のために、方法３００を、図１のプロセス構築アーキテクチャ１００に関して説明する。
【００９５】
図３の３１０で、プロセスマニフェストコンポーザ１５０が、構築されるプロセスの最終的な内容を定義する明示的「プロセスマニフェスト」（たとえば、プロセスマニフェスト１４２）を構成する。このプロセスマニフェストは、それに関連するプロセスの構築および実行なしで構成することができる。
【００９６】
３１２で、プロセス構築アーキテクチャ１００の１つまたは複数の他の機能コンポーネントが、その明示的プロセスマニフェストに基づいて新しいプロセスを作る（または「構築する」）。プロセス構築アーキテクチャ１００がＯＳの一部であるときに、このアーキテクチャの機能コンポーネントは、通常、プロセスを構築することによって、プロセス作成の要求に応答する。
【００９７】
ブロック３１２の作成アクションは、図２のブロック３２０から３３０に示された複数の別個のサブアクションからなる。これらのサブアクションを、ここで短く説明する（後で詳細に説明する）。
【００９８】
・３２０で、型付きコード表現クリエータ１５２が、指名された構成コンポーネントおよび外部インターフェース（もちろん、両方がプロセスマニフェストで定義されている）からプロセスの型付きコード表現を作成する。
【００９９】
・３２２で、型付きコード表現アップデータ１５４が、エクステンディングコンポーネント（プロセスマニフェストで定義されている）を介して型付きコード表現を更新する。
【０１００】
・３２４で、オプティマイザ１５６が、型付きコード表現を最適化する。
【０１０１】
・３２６で、型付きコード表現コンバータ１５８が、型付きコード表現からプロセッサ実行可能命令ストリームを生成する（プロセスマニフェストで定義されたコードジェネレータを使用する）。結果のストリームは、このプロセスの実行が意図されたコンピュータの１つまたは複数のプロセッサのネイティブ命令セットを使用する。
【０１０２】
・３２８で、プロセス間干渉エリミネータ１６０が、このプロセスのプロセッサ実行可能命令ストリームが他のプロセスの状態に干渉しないことを検査する。プロセス間干渉エリミネータ１６０によって実行される方法を、図４に示し、下で説明する。
【０１０３】
・３３０で、固定アイデンティティクリエータ１６２が、プロセスの「固定アイデンティティ」を考案する。
【０１０４】
これらのプロセス作成サブアクションのそれぞれの出力が、決定的であり、再現可能なので、例示的なプロセス構築は、プロセスマニフェストのすべての部分、型付きコード表現、分析の中間結果または最終結果、あるいはプロセッサ実行可能命令ストリームを含むがこれに制限されないサブアクションからの結果を保管するかキャッシングすることができる。さらに、プロセス生成サブアクションは、たとえばプログラムがシステムにインストールされるときなど、プロセスの実行について要求が行われるより十分前に実行することができる。
【０１０５】
プロセスの構築（ブロック３１２およびブロック３２０から３３０によって示される）の後に、オペレーティングシステムは、新たに構築されたプロセスを実行することができる。実行中になったならば、プロセスがアクティブになる。
【０１０６】
プロセス間干渉除去の方法論的実装
図４に、対象プロセスのプロセス間干渉を分析し、検査し、かつ／または除去するためにプロセス間干渉エリミネータ１６０によって実行される方法４００を示す。方法４００は、図３００のサブアクション３２８の分解である。
【０１０７】
この方法論的実装は、ソフトウェア、ハードウェア、またはその組合せによって実行することができる。理解を簡単にするために、この方法を、図４では独立のブロックとして表された別々のステップとして区切るが、これらの別々に区切られたステップを、その実行に依存する必要な順序と解釈してはならない。
【０１０８】
図４の４１０で、プロセス間干渉エリミネータ１６０が、プロセスの実行可能コードを入手する。エリミネータは、プロセス構築（たとえば、図３に図示の）の一部としてこのコードを受け取ることができる。エリミネータは、型付きコード表現またはシステムプロセッサによって実行可能なネイティブ命令ストリームとしての最終的な形のいずれかでこのコードを処理することができる。
【０１０９】
４１２で、エリミネータ１６０が、静的分析を使用して、プロセスの実行可能コードが、実行されたときに、プロセス間干渉にかかわらないことを検査する。これを「静的検査」と呼ぶ。
【０１１０】
４１４で、エリミネータは、プロセッサ実行可能コードのうちで未検証のままの部分を分析する。この部分を、「信頼されない」部分と呼ぶことができる。エリミネータは、信頼されない部分を必要に応じて変更し、その結果、コードが、実行されたときに他のコードに干渉できないようにする。エリミネータは、既存のコードを挿入し、かつ／または変更することができる。これを「動的検査」と呼ぶ。
【０１１１】
例示的なコンピューティングシステムおよび環境
図５に、本明細書に記載の例示的なプロセス構築を実装できる（完全にまたは部分的にのいずれかで）適切なコンピューティング環境５００の例を示す。コンピューティング環境５００は、本明細書に記載のコンピュータアーキテクチャおよびネットワークアーキテクチャで使用することができる。
【０１１２】
例示的なコンピューティング環境５００は、コンピューティング環境の一例にすぎず、コンピュータアーキテクチャおよびネットワークアーキテクチャの使用または機能性の範囲に関する制限を提案することを意図されたものではない。コンピューティング環境５００を、例示的なコンピューティング環境５００に示されたコンポーネントのいずれかまたはその組合せに関する依存性または要件を有すると解釈してもならない。
【０１１３】
例示的なプロセス構築は、多数の他の汎用のまたは特殊目的のコンピューティングシステム環境またはコンピューティングシステム構成と共に実装することができる。使用に適する可能性がある周知のコンピューティングシステム、コンピューティング環境、および／またはコンピューティング構成の例には、パーソナルコンピュータ、サーバコンピュータ、シンクライアント、シッククライアント、ハンドヘルドデバイス、ラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、携帯情報端末（ＰＤＡ）、アプライアンス、特殊目的エレクトロニクス（たとえば、ＤＶＤプレイヤ）、プログラマブルコンシューマエレクトロニクス、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境、および類似物が含まれるが、これらに制限はされない。
【０１１４】
例示的なプロセス構築を、プログラムモジュールなど、コンピュータによって実行されるプロセッサ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実装するルーチン、プログラム、実行可能コード、オブジェクト、コンポーネント、データ構造などが含まれる。例示的なプロセス構築を、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実践することもできる。分散コンピューティング環境では、プログラムモジュールを、メモリストレージデバイスを含む、ローカルとリモートの両方のコンピュータ記憶媒体に配置することができる。
【０１１５】
コンピューティング環境５００に、コンピュータ５０２の形の汎用コンピューティングデバイスが含まれる。コンピュータ５０２のコンポーネントに、１つまたは複数のプロセッサまたは処理ユニット５０４、システムメモリ５０６、およびプロセッサ５０４を含むさまざまなシステムコンポーネントをシステムメモリ５０６に結合するシステムバス５０８が含まれる。
【０１１６】
システムバス５０８は、メモリバスまたはメモリコントローラ、周辺バス、ａｃｃｅｌｅｒａｔｅｄ  ｇｒａｐｈｉｃｓ  ｐｏｒｔ、およびさまざまなバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含む複数のタイプのバス構造のいずれかの１つまたは複数を表す。たとえば、そのようなアーキテクチャに、ＣａｒｄＢｕｓ、Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉａｔｉｏｎ（ＰＣＭＣＩＡ）、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）、Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（ＵＳＢ）、ＩＥＥＥ  １３９４、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、およびメザニンバスとも称するＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ（ＰＣＩ）バスを含めることができる。
【０１１７】
コンピュータ５０２に、通常はさまざまなプロセッサ可読媒体が含まれる。そのような媒体は、コンピュータ５０２によってアクセス可能な、揮発性および不揮発性の媒体、リムーバブルおよび固定の媒体の両方を含むすべての使用可能な媒体とすることができる。
【０１１８】
システムメモリ５０６に、ランダムアクセスメモリ（ＲＡＭ）５１０などの揮発性メモリおよび／または読取専用メモリ（ＲＯＭ）５１２などの不揮発性メモリの形のプロセッサ可読媒体が含まれる。スタートアップ中などにコンピュータ５０２内の要素の間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）５１４が、ＲＯＭ  ５１２に保管される。ＲＡＭ  ５１０には、通常、処理ユニット５０４によって即座にアクセス可能および／または現在操作されつつあるデータおよび／またはプログラムモジュールが含まれる。
【０１１９】
コンピュータ５０２に、他のリムーバブル／固定、揮発性／不揮発性のコンピュータ記憶媒体を含めることもできる。たとえば、図５に、固定不揮発性磁気媒体（図示せず）から読み取り、これに書き込むハードディスクドライブ５１６、リムーバブル不揮発性磁気ディスク５２０（たとえば、「フロッピディスク」）から読み取り、これに書き込む磁気ディスクドライブ５１８、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体などのリムーバブル不揮発性光学ディスク５２４から読み取り、かつ／またはこれに書き込む光学ディスクドライブ５２２が示されている。ハードディスクドライブ５１６、磁気ディスクドライブ５１８、および光学ディスクドライブ５２２は、それぞれ、１つまたは複数のデータ媒体インターフェース５２５によってシステムバス５０８に接続されている。その代わりに、ハードディスクドライブ５１６、磁気ディスクドライブ５１８、および光学ディスクドライブ５２２を、１つまたは複数のインターフェース（図示せず）によってシステムバス５０８に接続することができる。
【０１２０】
ディスクドライブおよびそれに関連するプロセッサ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージをコンピュータ５０２に提供する。この例には、ハードディスク５１６、リムーバブル磁気ディスク５２０、およびリムーバブル光学ディスク５２４が示されているが、磁気カセットまたは他の磁気記憶デバイス、フラッシュメモリカード、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、または他の光学ストレージ、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）および類似物などの、コンピュータによってアクセス可能なデータを保管できる他のタイプのプロセッサ可読媒体も、例示的なコンピューティグシステムおよびコンピューティング環境を実装するのに使用できることを諒解されたい。
【０１２１】
たとえば、オペレーティングシステム５２６、１つまたは複数のアプリケーションプログラム５２８、他のプログラムモジュール５３０、およびプログラムデータ５３２を含む、任意の個数のプログラムモジュールを、ハードディスク５１６、磁気ディスク５２０、光学ディスク５２４、ＲＯＭ  ５１２、および／またはＲＡＭ  ５１０に保管することができる。
【０１２２】
ユーザは、キーボード５３４およびポインティングデバイス５３６（たとえば、「マウス」）などの入力デバイスを介してコンピュータ５０２にコマンドおよび情報を入力することができる。他の入力デバイス５３８（具体的には図示せず）に、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナ、および／または類似物を含めることができる。これらおよび他の入力デバイスは、システムバス５０８に結合された入出力インターフェース５４０を介して処理ユニット５０４に接続されるが、パラレルポート、ゲームポート、またはｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することができる。
【０１２３】
モニタ５４２または他のタイプのディスプレイデバイスも、ビデオアダプタ５４４などのインターフェースを介してシステムバス５０８に接続することができる。モニタ５４２の他に、他の出力周辺デバイスに、入出力インターフェース５４０を介してコンピュータ５０２に接続することができる、スピーカ（図示せず）およびプリンタ５４６などのコンポーネントを含めることができる。
【０１２４】
コンピュータ５０２は、リモートコンピューティングデバイス５４８などの１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク化された環境で動作することができる。たとえば、リモートコンピューティングデバイス５４８を、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の一般的なネットワークノード、および類似物とすることができる。リモートコンピューティングデバイス５４８は、コンピュータ５０２に関して本明細書で説明した要素および特徴の多くまたはすべてを含めることができるポータブルコンピュータとして図示されている。
【０１２５】
コンピュータ５０２とリモートコンピュータ５４８の間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）５５０および一般的な広域ネットワーク（ＷＡＮ）５５２として図示されている。そのようなネットワーキング環境は、オフィス、会社全体のコンピュータネットワーク、イントラネット、およびインターネットでありふれたものである。そのようなネットワーキング環境は、有線または無線とすることができる。
【０１２６】
ＬＡＮネットワーキング環境で実装されるときに、コンピュータ５０２は、ネットワークインターフェースまたはネットワークアダプタ５５４を介してローカルネットワーク５５０に接続される。ＷＡＮネットワーキング環境で実装されるときに、コンピュータ５０２には、通常、広域ネットワーク５５２を介する通信を確立する、モデム５５６または他の手段が含まれる。モデム５５６は、コンピュータ５０２に内蔵するか外付けとすることができるが、入出力インターフェース５４０または他の適当な機構を介してシステムバス５０８に接続することができる。図示のネットワーク接続が、例示的であることと、コンピュータ５０２と５４８の間の通信リンクを確立する他の手段を使用できることを諒解されたい。
【０１２７】
コンピュータ環境５００と共に図示されたものなどのネットワーク化された環境で、コンピュータ５０２に関して図示されたプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに保管することができる。たとえば、リモートアプリケーションプログラム５５８が、リモートコンピュータ５４８のメモリデバイスに常駐する。例示のために、アプリケーションプログラムと、オペレーティングシステムなどの他の実行可能プログラムコンポーネントが、本明細書では別個のブロックとして示されているが、そのようなプログラムおよびコンポーネントは、さまざまなときにコンピューティングデバイス５０２の異なるストレージコンポーネントに常駐し、コンピュータのデータプロセッサ（群）によって実行されることを諒解されたい。
【０１２８】
プロセッサ実行可能命令
例示的なプロセス構築の実装を、１つまたは複数のコンピュータまたは他のデバイスによって実行されるプログラムモジュールなどのプロセッサ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、実行可能コード、オブジェクト、コンポーネント、データ構造などが含まれる。通常、プログラムモジュールの機能性は、さまざまな実施形態で望み通りに組み合わせるか分散させることができる。
【０１２９】
例示的オペレーティング環境
図５に、例示的なプロセス構築を実装できる適切なオペレーティング環境５００の例を示す。具体的に言うと、本明細書で説明した（複数の）例示的なプロセス構築は、図５のプログラムモジュール５２８〜５３０および／またはオペレーティングシステム５２６またはその一部によって実装することができる（全体的にまたは部分的に）。
【０１３０】
このオペレーティング環境は、適切なオペレーティング環境の一例にすぎず、本明細書に記載の（複数の）例示的なプロセス構築の機能性の範囲または使用に関する制限を提案することを意図されたものではない。使用に適する他の周知のコンピューティングシステム、コンピューティング環境、および／またはコンピューティング構成の例には、パーソナルコンピュータ（ＰＣ）、サーバコンピュータ、ハンドヘルドデバイス、ラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラマブルコンシューマエレクトロニクス、無線電話および機器、汎用および特殊目的のアプライアンス、特定用途向け集積回路（ＡＳＩＣ）、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境、および類似物が含まれるが、これらに制限はされない。
【０１３１】
プロセッサ可読媒体
例示的なプロセス構築の実施形態を、ある形のプロセッサ可読媒体を介して保管または伝送することができる。プロセッサ可読媒体は、コンピュータによってアクセスできる使用可能な媒体とすることができる。たとえば、プロセッサ可読媒体に、「コンピュータ記憶媒体」および「通信媒体」を含めることができるが、これに制限はされない。
【０１３２】
「コンピュータ記憶媒体」には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報のストレージのための方法またはテクノロジで実装された、揮発性および不揮発性、リムーバブルおよび固定の媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリテクノロジ、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気ストレージデバイス、あるいは、所望の情報を保管するのに使用でき、コンピュータによってアクセスできる他のすべての媒体が含まれるが、これに制限はされない。
【０１３３】
「通信媒体」は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号で、プロセッサ可読命令、データ構造、プログラムモジュール、または他のデータを実施する。通信媒体に、すべての情報配布媒体も含まれる。
【０１３４】
結論
本明細書に記載の技法は、プログラムモジュール、汎用および特殊目的のコンピューティングシステム、ネットワークサーバおよび機器、専用エレクトロニクスおよびハードウェア、ならびに１つまたは複数のコンピュータネットワークの一部を含む（これに制限はされない）多数の形で実装することができる。本明細書に記載の技法は、たとえば、図５に示されたコンピュータシステムで実装することができる。具体的に言うと、これらの技法を、たとえば、図５に示されたコンピュータシステムのオペレーティングシステムによって実装することができる。
【０１３５】
１つまたは複数の上で説明した実装を、構造的特徴および／または方法論的ステップに固有のことばで説明したが、他の実装を、説明した特定の特徴またはステップなしで実践できることを理解されたい。そうではなく、その特定の特徴およびステップは、１つまたは複数の実装の好ましい形として開示されたものである。
【図面の簡単な説明】
【０１３６】
【図１】本明細書で説明する実装の例のオペレーティングシナリオを示す図である。
【図２】本明細書で説明する実装によって利用でき、かつ／または構成できるプロセスマニフェストデータ構造の例を示す図である。
【図３】本明細書で説明する方法論的実装を示す流れ図である。
【図４】本明細書で説明する方法論的実装を示す流れ図である。
【図５】本明細書で説明する少なくとも１つの実施形態を実装できる（全体的にまたは部分的に）コンピューティングオペレーティング環境の例を示す図である。
【符号の説明】
【０１３７】
１００  プロセスコンストラクタ
１１０  オペレーティングシステム
１２０  コンピュータ
１２２  コンピュータストレージデバイス
１２４  ロードモジュール
１３０  メモリ
１４０  プロセス
１４２  プロセスマニフェスト
１５０  プロセスマニフェストコンポーザ
１５２  型付きコード表現クリエータ
１５４  型付きコード表現アップデータ
１５６  オプティマイザ
１５８  型付きコード表現コンバータ
１６０  プロセス間干渉エリミネータ
１６２  固定アイデンティティクリエータ
２００  プロセスマニフェスト
２１０  構成コンポーネントの定義の例
２２０  エクステンディングコンポーネントの定義の例
２３０  外部インターフェース定義の例
２４０  コードジェネレータインターフェース定義の例
３００  方法
３１０  明示的プロセスマニフェストを構成する
３１２  マニフェストによって定義された新しいプロセスを作る
３２０  プロセスの型付きコード表現を作成する
３２２  型付きコード表現を更新する
３２４  型付きコード表現を最適化する
３２６  型付きコード表現からプロセッサ実行可能命令ストリームを生成する
３２８  プロセス間干渉を除去する
３３０  プロセスの「固定アイデンティティ」を考案する
４００  方法
４１０  プロセスの実行可能コードを入手する
４１２  プロセスの実行可能コードの静的検査を実行する
４１４  プロセスの実行可能コードの信頼されない部分の動的検査を実行する
５００  コンピューティング環境
５０４  処理ユニット
５０６  システムメモリ
５０８  システムバス
５１０  ＲＡＭ
５１２  ＲＯＭ
５１４  ＢＩＯＳ
５２５  データ媒体インターフェース
５２６  オペレーティングシステム
５２８  アプリケーションプログラム
５３２  プログラムデータ
５３４  キーボード
５３６  マウス
５３８  他のデバイス（群）
５４０  Ｉ／Ｏインターフェース
５４２  モニタ
５４４  ビデオアダプタ
５４６  プリンタ
５４８  リモートコンピューティングデバイス
５５０  ＬＡＮ
５５２  インターネット
５５４  ネットワークアダプタ
５５６  モデム
５５８  リモートアプリケーションプログラム
【図１】
2006164285.tif 000003
【図２】
2006164285.tif 000004
【図３】
2006164285.tif 000005
【図４】
2006164285.tif 000006
【図５】
2006164285.tif 000007
【外国語明細書】
2006164285000001.pdf