(57)【要約】【課題】  限られた数の依存するコンポーネントを有する共通オペレーティングシステムを確立する。【解決手段】  カーネル、オペレーティングシステムダイナミックリンクライブラリ、サブシステムダイナミックリンクライブラリレイヤ、およびネットワーキングレイヤは、オペレーティングシステムコンポーネント間の依存関係の数を最小限にするように構成される。【選択図】  図２
2011258242.tif 000002
【特許請求の範囲】
【請求項１】
共通オペレーティングシステムのためのプログラムであって、
オペレーティングシステムコンポーネントとハードウェアデバイスの間でインターフェースを提供するハードウェア抽象化レイヤと、
前記ハードウェア抽象化レイヤに依存し、前記オペレーティングシステムコンポーネントにサービスを提供するカーネルと、
前記カーネルに依存し、オペレーティングシステムアプリケーションを実行するための関数のライブラリを含むオペレーティングシステムダイナミックリンクライブラリと、
前記カーネルに依存し、アプリケーションプログラミングインターフェースが基本オペレーティングシステムコンポーネントに制限されるように、該アプリケーションプログラミングインターフェースをサポートするサブシステムダイナミックリンクライブラリレイヤと、
前記カーネルに依存し、オペレーティングシステムアプリケーションのネットワーク通信機能をサポートするネットワーキングレイヤとを含み、
前記カーネル、前記オペレーティングシステムダイナミックリンクライブラリ、前記サブシステムダイナミックリンクライブラリレイヤ、および前記ネットワーキングレイヤは、前記オペレーティングシステムコンポーネント間の依存関係の数を最小限にするように構成されることを特徴とするプログラム。
【請求項２】
前記カーネルは、
記憶媒体からデータを読み込むファイルシステムと、
前記ハードウェアデバイスを制御するためのデバイスドライバと
を含むことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記アプリケーションプログラミングインターフェースは、
メモリ管理のためのダイナミックリンクライブラリと、
グラフィカルデバイスインターフェースと、
ユーザインターフェース要素と、
通信プログラムと、
セキュリティ−暗号化アプリケーションと
を含むことを特徴とする請求項１に記載のプログラム。
【請求項４】
前記ネットワーキングレイヤは、
伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）スタックと、
動的ホスト構成プロトコルクライアントと、
自動プライベートインターネットプロトコルアドレス指定と、
ドメインネームシステムクライアントと、
ネットワークベーシック入出力オペレーティングシステムオーバＴＣＰ／ＩＰとを含むことを特徴とする請求項１に記載のプログラム。
【請求項５】
ネットワーキングレイヤは、前記オペレーティングシステムコンポーネントのネットワークプロパティを試験することを特徴とする請求項１に記載のプログラム。
【請求項６】
ユーザが共通オペレーティングシステムにログオンすることを可能にするための機能を提供するログオンクライアントをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項７】
セキュリティアプリケーションの基本機能を提供するローカルセキュリティ認証サーバをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項８】
コンポーネントベースのアプリケーションを構築するためのソフトウェアアーキテクチャを提供するコンポーネントオブジェクトモジュールをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項９】
実行中にプログラムにバインドされるルーチンのライブラリを含むランタイムライブラリをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項１０】
オペレーティングシステムサービスの管理を提供するサービス制御マネージャモジュールをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項１１】
複数のユーザセッションを管理するセッション管理サーバをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項１２】
デバイスドライバのプラグアンドプレイインストールをサポートするプラグアンドプレイマネージャをさらに含むことを特徴とする請求項１に記載のプログラム。
【請求項１３】
プロセスが別個のプロセス内のコードを呼び出し可能なリモートプロシージャコールインフラストラクチャをさらに含むことを特徴とする請求項１に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共通オペレーティングシステムを提供するためのプログラムに関する。
【背景技術】
【０００２】
コンピュータオペレーティングシステムは、モノリシック（ｍｏｎｏｌｉｔｈｉｃ）であり、コンポーネントおよびモジュールの間で多数の複雑な依存関係（ｄｅｐｅｎｄｅｎｃｉｅｓ）を含む。オペレーティングシステムコンポーネントは、階層関係に基づいて互いに依存する。階層のより上位のレイヤにおけるコンポーネントは、より下位のレイヤにおけるコンポーネントより多数のコンポーネントに依存する。階層のより下位のレイヤに属するコンポーネントは、より上位のレイヤにおけるコンポーネントに依存しない。この結果、オペレーティングシステム内のより下位のレイヤにおけるコンポーネントは、アクセスできる利用可能なオペレーティングシステムサービスの数がより少なくなる。
【０００３】
オペレーティングシステムのサイズが大きくなるにつれ、試験は、より費用がかかるようになる。あるコンポーネントを除去する、または変更することの効果は、オペレーティングシステムが多数の複雑な依存するコンポーネントを含む場合、理解するのが困難である。試験の有効性は、コンポーネント間の依存関係の数が減少した場合、向上する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
多数の複雑な依存関係は、オペレーティングシステム開発サイクル中に依存関係管理が欠如していたことの結果である。必要とされているのは、限られた数の依存するコンポーネントを有する共通オペレーティングシステムを確立する仕方である。
【課題を解決するための手段】
【０００５】
様々なオペレーティングシステム構成をサポートするための共通オペレーティングシステム機能セットを提供するための方法およびシステムを説明する。共通オペレーティングシステム機能セットは、いくつかの配置（ｄｅｐｌｏｙｍｅｎｔ）デバイスおよび配置方法に適用可能な最小限のメモリフットプリント（ｆｏｏｔｐｒｉｎｔ）を提供するように編成される。共通オペレーティングシステムは、信頼性が検証された一揃いの統合されたコンポーネントを提供するオペレーティングシステムコンポーネント間の依存関係を含む。共通オペレーティングシステムは、様々なオペレーティングシステムシナリオのための機能を提供するアプリケーションプログラミングインターフェース（ＡＰＩ）セットを含む。
【０００６】
方法は、オペレーティングシステムコンポーネントを定義すること、オペレーティングシステムコンポーネントの依存関係を識別すること、グループ内のコンポーネントが共通の依存関係を共有するようにコンポーネントグループを作成すること、コンポーネントグループ間で依存関係規則を確立すること、および依存関係規則を実施することを含む。
【０００７】
共通オペレーティングシステムを提供するための典型的なシステムは、ハードウェア抽象化レイヤ、カーネル、オペレーティングシステムダイナミックリンクライブラリレイヤ、サブシステムダイナミックリンクライブラリ、およびネットワーキングレイヤを含む。ハードウェア抽象化レイヤは、ハードウェアデバイス群との対話を提供する。カーネルは、ハードウェア抽象化レイヤに依存し、オペレーティングシステムコンポーネントに基本的なサービスを提供する。オペレーティングシステムダイナミックリンクライブラリ、サブシステムダイナミックリンクライブラリ、およびネットワーキングレイヤはすべて、カーネルに依存する。オペレーティングシステムダイナミックリンクライブラリレイヤは、オペレーティングシステムアプリケーション群を実行するための関数のライブラリを含む。サブシステムダイナミックリンクライブラリレイヤは、アプリケーションプログラミングインターフェース群が基本的なオペレーティングシステムコンポーネントに制限されるように、アプリケーションプログラミングインターフェース群をサポートする。ネットワーキングレイヤは、オペレーティングシステムアプリケーション群のネットワーク通信機能をサポートする。
【図面の簡単な説明】
【０００８】
【図１】本発明を実施することができる典型的なコンピューティング環境を示す図である。
【図２】本発明による共通オペレーティングシステムを示す典型的な機能ブロック図である。
【図３】本発明によるモノリシックオペレーティングシステムを共通オペレーティングシステムに変換するためのプロセスを示す動作上の流れ図である。
【発明を実施するための最良の形態】
【０００９】
簡単に述べると、本発明は、様々なオペレーティングシステム構成をサポートするための共通オペレーティングシステム機能セットを提供するための方法およびシステムを対象とする。共通オペレーティングシステム機能セットは、いくつかの配置デバイスおよび配置方法に適用可能な最小限のメモリフットプリントを提供するように編成される。共通オペレーティングシステムは、信頼性が検証された一揃いの統合されたコンポーネントを提供するオペレーティングシステムコンポーネント間の依存関係を含む。共通オペレーティングシステムは、様々なオペレーティングシステムシナリオのための機能を提供するアプリケーションプログラミングインターフェース（ＡＰＩ）セットを含む。
【００１０】
（例示的なオペレーティング環境）
図１を参照すると、本発明を実施するための１つの典型的なシステムが、コンピューティングデバイス１００のようなコンピューティングデバイスを含む。基本構成は、破線１０２内のコンポーネントを含む。基本構成において、コンピューティングデバイス１００は、通常、少なくとも１つの処理装置１０４、およびシステムメモリ１０６を含む。コンピューティングデバイスの正確な構成および種類に依存して、システムメモリ１０６は、揮発性（ＲＡＭなどの）、不揮発性（ＲＯＭ、フラッシュメモリ、その他などの）、またはこの２つの何らかの組合せであることが可能である。システムメモリ１０６は、通常、オペレーティングシステム１０８、１つまたは複数のアプリケーション１１０を含み、プログラムデータ１１２を含むことが可能である。
【００１１】
コンピューティングデバイス１００は、追加の機構または機能も含むことが可能である。例えば、コンピューティングデバイス１００は、例えば、磁気ディスク、光ディスク、または着脱式のフラッシュメモリモジュールなどの追加のデータ記憶装置（着脱式の記憶装置および／または固定式の記憶装置）も含むことが可能である。そのような追加のストレージを図１に着脱式のストレージ１１４、および固定式のストレージ１１６で示す。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を格納するために任意の方法または技術で実装された揮発性媒体および不揮発性媒体、着脱式の媒体および固定式の媒体が含まれることが可能である。システムメモリ１０６、着脱式のストレージ１１４、および固定式のストレージ１１６はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピューティングデバイス１００がアクセスすることができる他の任意の媒体が含まれるが、以上には限定されない。任意のそのようなコンピュータ記憶媒体はデバイス１００の一部とすることができる。コンピューティングデバイス１００は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス１１８も有することが可能である。ディスプレイ、スピーカ、プリンタなどの出力デバイス１２０も含まれることが可能である。以上のデバイス群は、当技術分野で周知であり、本明細書で詳述する必要はない。
【００１２】
コンピューティングデバイス１００は、ネットワークなどを介して、デバイスが他のコンピューティングデバイス群１２４と通信することを可能にする通信接続１２２も含むことが可能である。通信接続１２２は、通信媒体の一例である。通信媒体は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータによって実現され、あらゆる情報配信媒体が含まれる。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響媒体、ＲＦ媒体、赤外線媒体、およびその他の無線媒体などの無線媒体が含まれる。本明細書で使用するコンピュータ可読媒体という用語には、記憶媒体と通信媒体がともに含まれる。
【００１３】
（共通オペレーティングシステム）
共通オペレーティングシステムは、すべてのオペレーティングシステム構成において使用される信頼できる基礎レイヤを提供する。共通オペレーティングシステムは、最小限の基礎アプリケーションプログラミングインターフェース（ＡＰＩ）セットを表す。ＡＰＩセットに対して書かれたあらゆるソフトウェアも、オペレーティングシステムのすべての構成に適合する。例えば、ＡＰＩセットに対して書かれた試験コードは、すべてのオペレーティングシステム条件の下で実行可能である。試験手続きを適用して、オペレーティングシステムおよびその他の目標とするプラットフォームに関するパフォーマンスを検査すること、ＡＰＩ適用範囲（ｃｏｖｅｒａｇｅ）を強調すること、および完成させることができる。オペレーティングシステムコンポーネントを試験するのに使用されるコードは、共通オペレーティングシステムに基づく試験プラットフォームに依存する。このため、試験コードを容易に開発することができ、オペレーティングシステムの信頼性を確実にすることができる。
【００１４】
共通オペレーティングシステムは、すべての組み込まれた構成にわたって共有される安定したプラットフォームの集中試験（ｆｏｃｕｓｅｄ  ｔｅｓｔｉｎｇ）を介して、組み込まれたランタイムの一般的な信頼性を高める。試験手続きは、オペレーティングシステムコンポーネントのコアセットを試験することができるように、コンポーネントに分解することができる。試験は、さらなるコンポーネントを追加することによって拡大することができる。例えば、各オペレーティングシステムコンポーネントを個々に試験して、各コンポーネントがコアと一緒に動作できるかどうかを判定することができる。
【００１５】
共通オペレーティングシステムは、コンポーネントベースのエンジニアリングツールを提供する。例えば、共通オペレーティングシステムを使用して、コンポーネントマニフェストを検証する可能な限り最小の構成（すなわち、最小限のフットプリント）を構築することができる。共通オペレーティングシステムは、積極的なフットプリントの縮小をもたらし、組み込まれた相手先ブランド供給（ＯＥＭ）の資材表（ｂｉｌｌ  ｏｆ  ｍａｔｅｒｉａｌｓ）費用が低くなる。共通オペレーティングシステムの信頼性、および最小限の表面エリア（ｓｕｒｆａｃｅ  ａｒｅａ）は、固定機能サーバ群を作成するのによく適している。固定機能サーバ群を作成することの主な利点は、顧客の総所有費用を低減することである。共通オペレーティングシステムのコンポーネントは、オペレーティングシステム構造においてより上位のレイヤの依存関係を有するコンポーネントによって保守されることが可能である（すなわち、バグ修正が行われる、より新しいバージョンで置き換えられるなど）。
【００１６】
共通オペレーティングシステムは、共通オペレーティングシステムを検証するために実行される様々な分析に基づき、コアオペレーティングシステム（メモリ、起動パフォーマンス、およびＡＰＩセットを含む）に関するドキュメンテーションを向上させる。向上したドキュメンテーションは、ＯＥＭおよび独立のソフトウェアベンダによるオペレーティングシステム動作の理解を高める。
【００１７】
共通オペレーティングシステムは、プレブート（ｐｒｅ−ｂｏｏｔ）オペレーティングシステムとして動作する。共通オペレーティングシステムは、オペレーティングシステムのあらかじめ構築済みのカスタマイズされたイメージを対象ハードウェア上に重ね合わせることによってインストールされる。共通オペレーティングシステムがコンピューティングデバイスにインストールされると、次に、共通オペレーティングシステムアプリケーション群が、共通オペレーティングシステムの上に層を成すオペレーティングシステムの残りの部分をインストールすることができ、あるいは、異なるバージョンのオペレーティングシステムをインストールすることができる。
【００１８】
共通オペレーティングシステムは、デジタルコンパクトディスク（ＣＤ）などの読み取り専用媒体から起動されることが可能であることにより、システム回復を助ける。オペレーティングシステム全体をＣＤ上にインストールすることができる。ハードディスク上にインストールされたシステムがクラッシュした場合、オペレーティングシステムは、ＣＤからのオペレーティングシステムでマシンを再起動させることにより、回復することができる。ただし、システムは、ＣＤ上にインストールされたオペレーティングシステムの最小限のサブセットを再起動することによって、より迅速に回復させることもできる。共通オペレーティングシステムは、ハードディスク上にインストールされたオペレーティングシステムを回復させるプラットフォームを提供する。一実施形態では、共通オペレーティングシステムは、ユニバーサルシリアルバスポートにプラグ接続された着脱式のフラッシュメモリモジュールから起動することができる。
【００１９】
図２は、本発明による共通オペレーティングシステムの機能ブロック図を示す。共通オペレーティングシステム２００は、すべてのオペレーティングシステム構成に要求されるコアオペレーティングシステム機能を含むビルディングブロックである。ただし、共通オペレーティングシステム２００は、オペレーティングシステムのハードウェアアーキテクチャ固有の機能をまったく含まない。共通オペレーティングシステム２００は、基礎レイヤであり、このレイヤの上に、オペレーティングシステムの将来のバージョンを構築することができる。共通オペレーティングシステム２００は、他のオペレーティングシステム製品を開発するための標準のビルディングブロックも提供する。
【００２０】
共通オペレーティングシステム２００のコア機能は、ハードウェア抽象化レイヤ（ＨＡＬ）２０２およびカーネル２０４によって提供される。ＨＡＬ２０２は、共通オペレーティングシステム２００が、一般レベルまたは抽象レベルでハードウェアデバイスと対話することを可能にするプログラミングのレイヤである。ＨＡＬ２０２は、カーネル２０４またはデバイスドライバから呼び出すことができる。
【００２１】
カーネル２０４は、共通オペレーティングシステム２００の中心的なモジュールである。共通オペレーティングシステム２００が起動されると、カーネル２０４がロードされる最初のコンポーネントである。ロードされた後、カーネル２０４は、メインメモリの中に留まる。カーネル２０４は、共通オペレーティングシステム２００内の他のコンポーネントによって要求される基本的なサービスを提供する。カーネル２０４は、ＨＡＬ２０２に依存する。カーネルは、デバイスドライバ群２０６およびファイルシステム２０８を含み、それらに依存する。ファイルシステム２０８は、他のオペレーティングシステムコンポーネントおよびアプリケーション群が、ファイルの集合としてストレージファイル群と対話することを可能にする抽象化を提供する。カーネル２０４の諸部分、およびその他のデバイスドライバ群は、ファイルシステム２０８からロードされる。
【００２２】
デバイスドライバ群２０６は、プリンタ、ディスクドライバ、またはキーボードなどのデバイス群を制御するプログラム群を含む。一実施形態では、デバイスドライバ群２０６は、共通オペレーティングシステム２００を含む起動可能なシステムを作成するのに必要である。一部のクラスのデバイスドライバ群を使用して、共通オペレーティングシステム２００の起動可能なイメージを作成することができる。そのようなクラスは、システムデバイス群、ストレージデバイス群、ユーザインターフェースデバイス群、およびネットワーキングデバイス群のためのデバイスドライバ群を含む。ただし、これらのクラスのデバイスドライバ群は、共通オペレーティングシステムビルディングブロックの一部ではない。デバイスドライバクラスは、構築プロセスを介して後に追加されて、インストール可能な共通オペレーティングシステムを作成する。
【００２３】
カーネル２０４より上のプログラミングレイヤ群には、オペレーティングシステムダイナミックリンクライブラリ（ＤＬＬ）２１０、サブシステムＤＬＬ２１２、およびネットワーキングレイヤ２１４が含まれる。オペレーティングシステムＤＬＬ２１０は、オペレーティングシステムによってサポートされるアプリケーションが使用することができる実行可能な関数のライブラリを含む。例えば、Ｗｉｎｄｏｗｓ（登録商標）ＮＴ  ＤＬＬは、Ｗｉｎｄｏｗｓ（登録商標）ＮＴアプリケーション群によって使用される実行可能な関数のライブラリである。ＤＬＬは、いくつかのアプリケーションによって同時に使用されることが可能である。一部のＤＬＬは、オペレーティングシステムを備え、あらゆるアプリケーションに利用可能である。他のＤＬＬは、特定のアプリケーション用に書かれ、そのアプリケーションと一緒にロードされる。
【００２４】
サブシステムＤＬＬ群２１２は、アプリケーション群に機能を提供するＡＰＩ群のサポートを提供する。一実施形態では、ＡＰＩは、ＷＩＮ３２である。共通オペレーティングシステム２００は、ＡＰＩ群を基本的なコンポーネントに制限する。共通オペレーティングシステム２００によってサポートされる基本的なＡＰＩセットには、メモリ管理のためのＤＬＬ群（ＫＥＲＮＥＬ）２１６、グラフィカルデバイスインターフェース（ＧＤＩ）２１８、ユーザインターフェース要素群（ＵＳＥＲ）２２０、およびセキュリティ−暗号化アプリケーション群（ＡＤＶＡＰＩ）２２２が含まれる。
【００２５】
ＫＥＲＮＥＬ２１６は、アトム関数、通信ポートサポート、コンソールサポート、デバッグサポート、デバイスＩ／Ｏ、ＤＬＬ関数、エラー処理、ファイルＩ／Ｏ、ファイルマッピング、ファイルシステム関数、ハンドル−オブジェクト関数、メールスロット、メモリ管理、各国語サポート、名前付きパイプ、プロセスおよびスレッド、リソース読み込み、ストリング、構造化例外処理、同期、システム情報、時刻関数、ツールヘルプ関数、ユニコードおよび文字セットを含む、多数の異なるメモリ管理関数をサポートする。
【００２６】
ＧＤＩ２１８によってサポートされる関数には、次のオペレーティングシステム機能が含まれる。すなわち、ビットマップ、ブラシ、クリッピング、カラー、デバイスコンテキスト、塗りつぶされた図形、フォントおよびテキスト、線および曲線、メタファイル、パス、ペン、印刷、および領域である。
【００２７】
ＵＳＥＲ２２０は、次のオペレーティングシステム機能をサポートする。すなわち、ボタン関数およびメッセージ、キャレット（ｃａｒｅｔ）管理、クリップボードサポート、コンボボックス関数、座標空間−変換関数、カーソル管理、ダイアログボックスメッセージ、動的データ交換、動的データ交換管理、編集コントロール、フック、アイコン読み込み、キーボードアクセラレータ、キーボード入力、リストボックスコントロール、メニューコントロール、ウインドウズメッセージおよびメッセージキュー、マウス入力、マルチディスプレイモニタサポート、マルチドキュメントインターフェース、ペインティングおよびドローイング、未加工（ｒａｗ）の入力、四角形関数、リソース読み込み（アイコンなどの）、スクロールバー、文字列関数、システム情報関数、ログアウト、タイマ関数、ウインドウ管理、ウインドウクラス登録、およびウインドウプロパティ関数である。
【００２８】
次の関数が、ＡＤＶＡＰＩ２２２によってサポートされる。すなわち、アクセス検査、セキュリティ記述子関連関数、プロセス管理関数、レジストリ関数、サービス管理関数、システムシャットダウン関数、およびイベント追跡関数である。
【００２９】
ネットワーキングレイヤ２１４は、サブシステムＤＬＬ群２１２の中のアプリケーション群がネットワークと通信することができるようにネットワーク機能を提供する。ネットワーキングレイヤ２１４は、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）スタック２２４、動的ホスト構成プロトコル（ＤＨＣＰ）クライアント２２６、自動プライベートＩＰアドレス指定（ＡｕｔｏＩＰ）２２８、ドメインネームシステム（ＤＮＳ）クライアント２３０、およびＮｅｔＢＴ（ネットワーク基本入出力オペレーティングシステムオーバTCP/IP ：network basic input output operating system over TCP/IP）２３２を含む。共通オペレーティングシステム２００は、ネットワーキングレイヤ２１４を使用して、コアコンポーネントのネットワークプロパティを試験する。
【００３０】
ＴＣＰ／ＩＰスタック２２４は、インターネット上のホスト群を接続するための通信プロトコルを含む通常のＴＣＰ／ＩＰ動作をサポートする。ＴＣＰ／ＩＰは、ネットワークを介してデータを伝送することに関する標準である。ＴＣＰ／ＩＰスタック２２４は、現在のバージョンのＩＰ（ＩＰｖ４）、およびＩＰｖ６などの将来のＩＰ世代を実装する。ＩＰセキュリティ（ＩＰＳｅｃ）が、ＴＣＰ／ＩＰスタック２２４に組み込まれる。ＩＰＳｅｃは、ＩＰレイヤにおけるセキュリティで保護されたパケット交換をサポートするプロトコルのセットである。
【００３１】
ＴＣＰ／ＩＰスタック２２４は、ユーザデータグラムプロトコル（ＵＤＰ）、インターネット制御メッセージプロトコル（ＩＣＭＰ）、およびアドレス解決プロトコル（ＡＲＰ）を含む、いくつかのプロトコルを実装する。ＵＤＰは、ＩＰネットワークを介してデータグラムを送受信する直接的なやり方を提供する。ＩＣＭＰは、エラーメッセージ、制御メッセージ、および情報メッセージを含むパケットをサポートする。ＡＲＰは、ＩＰアドレスを物理アドレスに変換する。ＴＣＰ／ＩＰスタック２２４は、ＩＰマルチキャストもサポートする。
【００３２】
ＤＨＣＰクライアント２２６は、ＤＨＣＰサーバからネットワーク上のデバイス群に動的ＩＰアドレスを割り当てるためのプロトコルを提供する。ＤＨＣＰクライアント２２６は、マルチキャストグループアドレス割り当てを獲得するためのマルチキャストアドレス動的クライアントアプリケーションプロトコルを含む。ＡｕｔｏＩＰ２２８は、ＤＨＣＰサーバが利用可能でない場合に、ＤＨＣＰクライアント２２６がＩＰアドレスを自動的に自己構成することができるように機能を提供する。ＤＮＳクライアント２３０は、ドメイン名をＩＰアドレスに変換する。
【００３３】
ＮｅｔＢＴ２３２は、ローカルエリアネットワーク（ＬＡＮ）のための特別な関数を追加するＡＰＩである。ＤＮＳサーバがネットワーク上で利用可能でない場合、他のコンピュータ群は、ＮｅｔＢＴ２３２を介するブロードキャスト名解決を介して探し出される。ＮｅｔＢＴ２３２は、ＮｅｔＢＴインターフェースおよび名前解決を要するレガシアプリケーション群のサポートも可能にする。
【００３４】
ＤＬＬ２１０、２１２、およびネットワーキングレイヤ２１４より上の共通オペレーティングシステム２００のレイヤ群には、Ｗｉｎｓｏｃｋ２３４、ログオンクライアント２３６、ローカルセキュリティ認証サーバ（ＬＳＡＳＳ）２３８、コンポーネントオブジェクトモデル（ＣＯＭ）２４０、ランタイムライブラリ（ＲＴＬ）２４２、サービス制御マネージャ（ＳＣＭ）モジュール２４４、セッション管理サーバ（ＳＭＳＳ）２４６、プラグアンドプレイ（ＰｎＰ）マネージャ２４８、およびリモートプロシージャコール（ＲＰＣ）２５０が含まれる。シェル２５２が、共通オペレーティングシステム２００の最も外側のレイヤである。シェル２５２は、シェル２５２の代わりにアプリケーションを代用することができるため、オプションである。
【００３５】
Ｗｉｎｓｏｃｋ２３４は、ＴＣＰ／ＩＰプロトコルを介して他のコンピューティングデバイスと通信することができるプログラム群を開発するためのＡＰＩである。Ｗｉｎｓｏｃｋ機能は、ほとんどすべてのコンピューティングデバイスがネットワークインターフェースを有するため、共通オペレーティングシステム２００の中に含められる。
【００３６】
ログオンクライアント２３６は、ローカルユーザまたはネットワークユーザが、共通オペレーティングシステム２００にログオンすることができるように機能を提供する。ログオンクライアント２３６は、ローカルセキュリティアカウントマネージャ（ＳＡＭ）に対してユーザを認証した後、ユーザの身元を確定するのに必要とされる最小限の機能を含む。ログオンクライアント２３６は、ユーザがログオンすることをすべてのデバイスが要求するわけではないため、共通オペレーティングシステム２００のオプションのコンポーネントである。
【００３７】
ＬＳＡＳＳ２３８は、暗号化やデジタル証明などのセキュリティアプリケーション群のための基本的機能を提供する。ＬＳＡＳＳ２３８は、ＳＡＭに対して認証を行い、ローカルログオン機能をサポートする。ＬＳＡＳＳ２３８は、ログオンクライアント２３６から認証要求を受け取り、適切な認証パッケージを呼び出して、アカウントの確認および検証を実行する。ログオンクライアント２３６に関連するユーザインターフェース（ＵＩ）が、ログオンクライアント／ＬＳＡＳＳプロセスと対話して、ユーザをログインさせる。共通オペレーティングシステム２００は、ローカルログオンに必要とされる最小限の数のセキュリティパッケージを使用して起動することができる。
【００３８】
ＣＯＭ２４０は、コンポーネントベースのアプリケーション群を構築するためのソフトウェアアーキテクチャである。ＣＯＭオブジェクト群は、アプリケーション群、およびその他のコンポーネントがＣＯＭオブジェクトの機能にアクセスすることを可能にするインターフェース群を公開する、それぞれが固有ＩＤを有する別々のコンポーネントである。ＲＬＴ２４２は、実行中にプログラムにバインドされるルーチンのライブラリを含む。ＳＣＭモジュール２４４は、サービスの開始と停止を制御する。ＳＣＭモジュール２４４は、ＤＨＣＰ２２６およびＤＮＳ２３０がサービスとして動作するため、必要である。
【００３９】
ＳＭＳＳ２４６は、複数のサブシステムセッションおよびユーザセッションを管理するためのセッションマネージャである。ＰｎＰマネージャ２４８が、検出されたハードウェアを制御するのに必要とされるドライバ群のプラグアンドプレイインストールをサポートする。ＰｎＰマネージャ２４８は、ハードウェア関連機能であるが、アーキテクチャ固有ではない。ＰｎＰマネージャ２４８は、一部のデバイスがＰｎＰ対応ではないため、オプションのコンポーネントである。
【００４０】
ＲＰＣ２５０は、１つのコンピュータ上のプログラムが、サーバコンピュータ上のコード、または同一のコンピュータ上の異なるプロセス内のコードを実行することを可能にするプロトコルである。ＲＰＣ２５０を使用すると、システム開発者は、サーバのための特別な手続きを開発する必要がない。クライアントプログラムは、適切な引数を有するメッセージをサーバに送信し、サーバは、実行されたコードの結果を含むメッセージを戻す。
【００４１】
共通オペレーティングシステム２００は、コンポーネント化試験、およびコンポーネントベースのユニット試験のための開発ツールとして使用することができる。コンポーネント化は、コンポーネント間の依存関係を理解し、減少させて、オペレーティングシステムをそれほどモノリシックではなくすることに関わる。コンポーネントグループ化は、オペレーティングシステムをモノリシックシステムからコンポーネント化されたシステムに変換するのに役立つフレームワークを提供することにより、オペレーティングシステムの保守のしやすさ（ｓｅｒｖｉｃｉａｂｉｌｉｔｙ）を向上させる。共通オペレーティングシステム２００は、コンポーネント化されたシステムの非常に信頼できる基礎オペレーティングシステムレイヤを提供する。
【００４２】
共通オペレーティングシステム２００は、コンポーネントグループが上に置かれる基礎オペレーティングシステムレイヤを定義することにより、コンポーネントグループを作成する。コンポーネントのグループ化が、慣用のオペレーティングシステムのモノリシック構造を解消する。オペレーティングシステムのどのレイヤ上にコンポーネントが置かれているかに依存して、そのコンポーネントがより上位のレイヤのコンポーネントに依存しないように、ヘッダの適切なサブセットを提供することができる。
【００４３】
共通オペレーティングシステムを作成するためのプロセスを、図３を参照して説明する。共通オペレーティングシステムは、オペレーティングシステムコンポーネント間の依存関係を管理することによって作成される。プロセスは、ブロック３００で始まり、標準のオペレーティングシステムが、多数の互いに依存するコンポーネントを有する。ブロック３１０で、各コンポーネントの機能を特定することにより、コンポーネント定義が提供される。処理は、ブロック３２０に進む。
【００４４】
ブロック３２０で、オペレーティングシステムのモノリシック構造内における各コンポーネントの位置を特定することにより、コンポーネント間の依存関係が明らかにされる。処理は、ブロック３３０に進む。
【００４５】
ブロック３３０で、目標シナリオを可能にするための意味のあるビルディングブロックを表すコンポーネントグループが、識別される。各グループのコンポーネントは、共通の依存関係を共有する。コンポーネントグループの作成は、コンポーネント間の依存関係を解消する。例えば、ＵＳＥＲ、ＧＤＩ、およびＫＥＲＮＥＬ  ＤＬＬのそれぞれの中のコンポーネントがすべて、シェルの中の別のコンポーネントに依存することが可能である。この例では、シェルの中でコンポーネントグループ（例えば、新たなＤＬＬ）を作成することにより、３つの依存関係が解消される。新たなＤＬＬは、３つのコンポーネントを実行するのに要求される最小限の数のＡＰＩを含む。このため、各コンポーネントは、新たなＤＬＬの中のＡＰＩのサブセットを使用して実行される。別の実施形態では、より上のレベルの依存関係がもはや存在しないようにソースコードを変更することにより、コンポーネント間の依存関係が解消される。処理は、ブロック３４０に進む。
【００４６】
ブロック３４０で、コンポーネントグループ間の依存関係規則が確立される。依存関係規則は、各コンポーネント、および各コンポーネントグループにいずれの依存関係が適切であるかを判断する。依存関係規則は、オペレーティングシステムコンポーネント間に存在する依存関係の数を最小限に抑える。処理は、ブロック３５０に進む。
【００４７】
ブロック３５０で、コンポーネントグループ間の依存関係規則が実施される。依存関係規則実施は、コンポーネントが望ましくない依存関係を有することを防止する。依存関係規則実施は、ＤＬＬ群の効率的な使用を確実にする。処理は、ブロック３６０で終了する。
【００４８】
以上の明細書、例、およびデータが、本発明の構成の製造および用法の完全な説明を提供する。本発明の趣旨および範囲を逸脱することなく、本発明の多数の実施形態を実施することができるので、本発明は、本明細書に添付した特許請求の範囲に存する。
【符号の説明】
【００４９】
１００  コンピューティングデバイス
１０４  処理装置
１０６  システムメモリ
１０８  オペレーティングシステム
１１０  アプリケーション
１１２  プログラムデータ
１１４  着脱式のストレージ
１１６  固定式のストレージ
１１８  入力デバイス
１２０  出力デバイス
１２２  通信接続
１２４  他のコンピューティングデバイス
２０４  カーネル
２０６  デバイスドライバ
２０８  ファイルシステム
２１２  サブシステムＤＬＬ
２１４  ネットワーキング
２３６  ログオン
２５２  シェル
【図１】
2011258242.tif 000003
【図２】
2011258242.tif 000004
【図３】
2011258242.tif 000005