(57)【要約】【課題】サブシステム間のリソース共有を可能にするための技術を提供する。【解決手段】アプリケーションを実行するサブシステム（「ＡＳＳ」）は、ＤＬＬなど、リソースを提供する別のサブシステム（「ＲＳＳ」）からリソースを受け取る。そしてＡＳＳのアプリケーションが実行される場合、そのアプリケーションは、ＤＬＬなど、そのＡＳＳにリソースを要求することができる。ＡＳＳは、要求されたリソースがＲＳＳに関連付けられていると判断すると、ＲＳＳと通信して、そのリソースを要求することができる。そしてＲＳＳは、そのリソースをロードすることができる。アプリケーションが、ＤＬＬのメソッドを呼び出すなどして、ある活動を実行するためにリソースを利用する場合、ＡＳＳは、ＲＳＳと通信して、その活動を実行するためにリソースを要求することができる。ＲＳＳは、活動が完了すると、ＲＳＳに結果の指示を提供することができる。【選択図】図３
2006164265.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムのサブシステム用に設計されたアプリケーションが、前記オペレーティングシステムの第２のサブシステムによって提供されるファシリティを使用できるようにするためのサブシステムであって、
前記アプリケーションからリソースの要求を受け取るコンポーネントと、
前記リソースが前記オペレーティングシステムの第２のサブシステムのファシリティによって提供されることを判定するコンポーネントと、
前記判定に基づいて前記要求を前記オペレーティングシステムの第２のサブシステムに伝達するコンポーネントと、
前記第２のサブシステムから前記要求についての結果の指示を受け取ると、前記結果の指示を前記アプリケーションに伝達するコンポーネントと
を備えたことを特徴とするサブシステム。
【請求項２】
前記要求は、ローカルプロシージャコールを介して伝達されることを特徴とする請求項１に記載のサブシステム。
【請求項３】
前記サブシステムは、ポータブルオペレーティングシステムインターフェース（ＰＯＳＩＸ）の仕様に準拠することを特徴とする請求項１に記載のサブシステム。
【請求項４】
前記第２のサブシステムは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）の１つのバージョンであることを特徴とする請求項３に記載のサブシステム。
【請求項５】
前記サブシステムは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）の１つのバージョンであることを特徴とする請求項１に記載のサブシステム。
【請求項６】
前記第２のサブシステムは、ポータブルオペレーティングシステムインターフェース（ＰＯＳＩＸ）の仕様に準拠することを特徴とする請求項５に記載のサブシステム。
【請求項７】
前記ファシリティは、ダイナミックリンクライブラリであることを特徴とする請求項１に記載のサブシステム。
【請求項８】
前記リソースは、前記ダイナミックリンクライブラリによって実行されるメソッドであることを特徴とする請求項７に記載のサブシステム。
【請求項９】
アプリケーションが複数のサブシステムのリソースを共有できるようにするためのサブシステムによって実行される方法であって、
前記アプリケーションがオペレーティングシステムのサブシステムのリソースにアクセスする際に、
前記複数のサブシステムの中から、前記リソースを提供するサブシステムを識別することと、
前記リソースをロードするよう前記識別したサブシステムに要求することと、
前記リソースにアクセスするよう前記識別したサブシステムに指示することと
を備えることを特徴とする方法。
【請求項１０】
前記リソースをロードするサブシステムは、ポータブルオペレーティングシステムインターフェース（ＰＯＳＩＸ）の仕様に準拠することを特徴とする請求項９に記載の方法。
【請求項１１】
前記リソースをロードするサブシステムは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）の１つのバージョンであることを特徴とする請求項９に記載の方法。
【請求項１２】
前記リソースは、ダイナミックリンクライブラリであることを特徴とする請求項９に記載の方法。
【請求項１３】
前記指示することは、メソッド名を伝達することを含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記指示することは、１つまたは複数のパラメータを伝達することを含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記伝達することは、ローカルプロシージャコールを用いて実行されることを特徴とする請求項１３に記載の方法。
【請求項１６】
前記リソースへのアクセスは、ダイナミックリンクライブラリのメソッドの呼び出しを含むことを特徴とする請求項９に記載の方法。
【請求項１７】
第１のサブシステムのアプリケーションが第２のサブシステムのダイナミックリンクライブラリを共有できるようにするメソッドを実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
前記第１のサブシステムのアプリケーションから前記ダイナミックリンクライブラリのメソッドにアクセスする指示を受け取ることと、
前記ダイナミックリンクライブラリをロードするよう前記第２のサブシステムに要求することと、
前記指示されたメソッドにアクセスするよう前記第２のサブシステムに指示することと
を備えたことを特徴とするコンピュータ可読媒体。
【請求項１８】
前記第２のサブシステムは、ポータブルオペレーティングシステムインターフェース（ＰＯＳＩＸ）の仕様に準拠することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記第２のサブシステムは、前記オペレーティングシステムのアプリケーションプログラムインターフェースを実装することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項２０】
前記オペレーティングシステムは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）の１つのバージョンであることを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２１】
前記第２のサブシステムは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）の１つのバージョンであることを特徴とする請求項１９に記載のコンピュータ可読媒体。
【請求項２２】
前記第２のサブシステムから要求を受け取ると、前記アプリケーションに関連するスレッドのリストを列挙することを含むことを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項２３】
前記アプリケーションに関連する新たなスレッドについて前記第２のサブシステムに知らせることを含むことを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記新たなスレッドは、前記列挙されたスレッドのリストにあるスレッドの子スレッドであることを特徴とする請求項２３に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
記載の技術は、一般にオペレーティングシステムに関し、より詳細には、サブシステム間のリソース共有を可能にすることに関する。
【背景技術】
【０００２】
オペレーティングシステムは、そのハードウェアおよびソフトウェアリソースの管理を含む、コンピュータシステムに関連するさまざまなタスクを実行する。ハードウェアリソースは、プロセッサ、一次ストレージ（たとえばメモリ）、二次ストレージ（たとえばハードディスクや光ディスク）、プリンタ、ディスプレイアダプタ、ネットワークインターフェースカード、入力／出力ポートなどを含む。ソフトウェアリソースは、アプリケーションプログラム、ユーザインターフェース、デバイスドライバ、ネットワークプロトコルスタックなどを含む。オペレーティングシステムは、アプリケーションプログラムの指示の下などでさまざまなタスクを達成するためにこれらのリソースを管理および調整する。
【０００３】
オペレーティングシステムは、サブシステムを用いてアプリケーションプログラムに機能性を提供することができる。サブシステムは、オペレーティングシステムのアプリケーションプログラムインターフェース（「ＡＰＩ」）を実装するオペレーティングシステムコンポーネントである。サブシステムは、カーネルコンポーネントの機能を呼び出すことができる。カーネルコンポーネントは、中核となるオペレーティングシステム機能を提供するオペレーティングシステムコンポーネントである。
【０００４】
オペレーティングシステムは、複数のサブシステムを備えることができ、それぞれがさまざまなオペレーティングシステムの振る舞いを公開している。一例として、オペレーティングシステムは、「ＰＯＳＩＸ」（ｐｏｒｔａｂｌｅ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）およびＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）インターフェースを２つの別々のサブシステムとして実装することがある。これらのサブシステムは、両方とも共通のオペレーティングシステム上で機能することができる。このようなオペレーティングシステムは、ＰＯＳＩＸ用に設計されたアプリケーションおよびＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）用に設計されたアプリケーションの両方と共に機能することができる。
【０００５】
しかしあるサブシステム用に設計されたアプリケーションは、別のサブシステム用に設計されたリソースを共有することができない。一例として、ＰＯＳＩＸアプリケーションは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）用に設計されたダイナミックリンクライブラリ（「ＤＬＬ」）をロードできない場合がある。同様に、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）アプリケーションは、ＰＯＳＩＸ用に設計されたＤＬＬをロードできない場合がある。あるサブシステム用に設計されたＤＬＬを別のサブシステムと共に機能できるようにするために、開発者は、そのＤＬＬを他のサブシステム用に再ビルドすることができるであろう。しかしＤＬＬを再ビルドするには、そのＤＬＬに関連するソースコードが必要となる場合がある。たとえば、そのＤＬＬがソフトウェアベンダによって提供されている場合、ソースコードが入手できないことがある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
一例として、ＵＮＩＸ（登録商標）ベースのアプリケーションを有する顧客は、そのアプリケーションをＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）と共に機能させたいと望む場合がある。このアプリケーションは、顧客によって開発された部分と、データベースソフトウェアベンダなどのソフトウェアベンダによって提供された部分とを有する場合がある。そこでこの顧客は、そのアプリケーションをＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）へ移行する中間ステップとして、その開発した部分をＰＯＳＩＸへ移行することができるであろう。しかしソフトウェアベンダは、その部分をＤＬＬとしてＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）用に利用可能にできても、その部分をＰＯＳＩＸ用に利用可能にできない場合がある。顧客のアプリケーションのＰＯＳＩＸ部分は、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）用に設計されたソフトウェアベンダのＤＬＬを使用することができないので、顧客のアプリケーションは、ＰＯＳＩＸサブシステムと共に十分に機能することはできない。顧客はそのため、そのアプリケーションをＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）へ移行する気持ちをそがれる場合がある。それゆえ、サブシステム間（ｉｎｔｅｒ−ｓｕｂｓｙｓｔｅｍ）でのリソースを共有できるようにすることができれば、非常に望ましいであろう。
【課題を解決するための手段】
【０００７】
サブシステム間でのリソースを共有できるようにするための技術を提供する。さまざまな実施形態において、アプリケーションを実行するサブシステム（「アプリケーションサブシステム」）は、ＤＬＬなど、リソースを提供する別のサブシステム（「リソースサブシステム」）からリソースを受け取る。これらのサブシステムは、互いに機能できるようにすることができる。そして、アプリケーションサブシステムのアプリケーションが実行されると、そのアプリケーションは、ＤＬＬなど、そのアプリケーションサブシステムにリソースを要求することができる。アプリケーションサブシステムは、要求されたリソースがリソースサブシステムに関連付けられていると判断すると、リソースサブシステムと通信して、そのリソースを要求することができる。リソースサブシステムは次いで、いくつかの初期のハウスキーピング活動を行い、そのリソースをロードすることができる。アプリケーションが、ＤＬＬのメソッドを呼び出すことなどによって、ある活動を行うためにリソースを利用する場合、アプリケーションサブシステムは、リソースサブシステムと通信して、その活動を実行するためにリソースを要求することができる。リソースサブシステムは、活動が完了すると、リソースサブシステムに結果の指示（ｉｎｄｉｃａｔｉｏｎ）を提供することができる。このように、あるサブシステムは、別のサブシステム用に設計されたリソースを共有することができる。さまざまな実施形態において、アプリケーションは、リソースサブシステムが初期のハウスキーピングを行った後に、リソースを直接利用することができる。
【０００８】
サブシステム間でのリソースの共有は、サブシステムに共通するファシリティを使用することを伴ってもよい。一例として、ＰＯＳＩＸサブシステムおよびＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）サブシステムの両方が「ＣＲＴ」（“Ｃ”  ｒｕｎｔｉｍｅｓ）を有する。ＣＲＴは、共通して使用される機能を有する１つまたは複数の静的にリンクされたライブラリとすることができる。アプリケーション開発者は時に、アプリケーションを有する静的にリンクされたライブラリを使用する。ライブラリは、アプリケーションによって静的にリンクされると、アプリケーションの実行コードの一部となる。あるアプリケーションから別のオペレーティングシステムへ移行するアプリケーション開発者は、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）用に設計されたライブラリ、およびＰＯＳＩＸ用に設計された別のライブラリなど、さまざまなライブラリによって提供される機能を使用する必要があり、そのためこれらのライブラリをリンクすることがある。リンク付けを行って、コンパイラによって発生したオブジェクトコードを実行コードへと変換する。複数のライブラリがリンクされ、これらのライブラリが共通のメソッド名を有していると、結果としてエラーが生じることがある。一例として、両方のライブラリが「印刷」機能を提供する場合がある。両方のライブラリがリンクされていると、競合によってエラーが生じる。これらのエラーを解消するために、少なくとも３つの方法がある。１つの解決策は、これらのライブラリの１つまたは両方の名前を変更することによって、重複する名前を除去することである。別の解決策は、ＤＬＬを使用することを伴う。ＤＬＬは、それら自身のネームスペースを有するように保証することができる。つまり、ＤＬＬのメソッドは、そのメソッドを提供するＤＬＬによって識別される。結果として、アプリケーションがＤＬＬのメソッドを呼び出す際に、（ＤＬＬと共に識別される）メソッドの名前が、静的にリンクされたライブラリまたは別のＤＬＬの名前と競合することはない。第３の解決策は、両方のライブラリの関数のスーパーセットである統合されたネームスペースを提供する静的にリンクされたライブラリを作成することである。複数の静的にリンクされたライブラリに共通するメソッドは、スーパーセットのライブラリで一度提供されるだけであろう。メソッド名は同一であるが、それらのメソッドが異なるパラメータを受け取るか、または異なる機能を提供する場合は、フラグを提供することなどによって、それらのメソッドを具体的に識別することによって、アプリケーションが異なるメソッドを呼び出すことができる。このように、サブシステム間にわたってリソースを共有しつつも、名前の競合を回避することが可能となる。
【発明を実施するための最良の形態】
【０００９】
ここで図面を参照すると、図１は、この技術またはファシリティを実装することができる適切なコンピューティングシステム環境１１０または動作環境の一例を示している。このコンピューティングシステム環境１１０は適切なコンピューティング環境の一例にすぎず、このファシリティの使用または機能の範囲について何らかの限定を示唆することを意図するものではない。またコンピューティングシステム環境１１０が、この例示的な動作環境１１０中に示されたコンポーネントの任意の１つまたは組合せに関して何らかの依存性または必要性を有するものとも解釈すべきではない。
【００１０】
このファシリティは、数多くの他の汎用または専用のコンピューティングシステム環境または構成と共に動作する。このファシリティと共に使用するのに適する可能性のある周知のコンピューティングシステム、環境、および／または構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、これらには限定されない。
【００１１】
このファシリティは、コンピュータによって実行されている、プログラムモジュールなどのコンピュータ実行可能命令という一般的なコンテキストにおいて説明することができる。一般にプログラムモジュールは、特定のタスクを実行したり特定の抽象データ型を実装したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。このファシリティは、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境において実施することもできる。分散コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを含むローカルおよび／またはリモートのコンピュータストレージメディアに配置することができる。
【００１２】
図１を参照すると、このファシリティを実装するための例示的なシステムは、コンピュータ１１１の形態の汎用コンピューティングデバイスを含む。コンピュータ１１１のコンポーネントは、処理ユニット１２０、システムメモリ１３０、およびシステムメモリ１３０を含むさまざまなシステムコンポーネントを処理ユニット１２０に結合するシステムバス１２１を含むことができるが、これらには限定されない。システムバス１２１は、メモリバスまたはメモリコントローラ、ペリフェラルバス、およびさまざまなバスアーキテクチャのいずれかを使用するローカルバスを含むいくつかのタイプのバス構造のいずれにすることもできる。限定ではなく例として、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニンバスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００１３】
コンピュータ１１１は通常、さまざまなコンピュータ可読メディアを含む。コンピュータ可読メディアは、コンピュータ１１１によってアクセスできる任意の利用可能なメディアとすることができ、揮発性および不揮発性メディア、ならびにリムーバブルおよび非リムーバブルメディアの両方を含む。限定ではなく例として、コンピュータ可読メディアは、コンピュータストレージメディアおよび通信メディアを備えることができる。コンピュータストレージメディアは、コンピュータ可読命令、データ構造、プログラムモジュール、他のデータなどの情報の格納のための任意の方法または技術で実装された揮発性および不揮発性メディア、ならびにリムーバブルメディアおよび非リムーバブルメディアを含む。コンピュータストレージメディアは、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは希望の情報を保存するために使用でき、コンピュータ１１１によってアクセスできる任意の他の媒体を含むが、これらには限定されない。通信メディアは通常、搬送波や他のトランスポートメカニズムなどの変調されたデータ信号中にコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを具体化し、任意の情報伝達メディアを含む。「変調されたデータ信号」という用語は、情報を信号中に符号化するようにその特性の１つまたは複数を設定または変更した信号を意味する。限定ではなく例として、通信メディアは、有線ネットワークや直接配線接続などの有線メディアと、音響、ＲＦ、赤外線、その他の無線メディアなどの無線メディアとを含む。また上記のいずれの組合せも、コンピュータ可読メディアの範囲内に含まれるべきである。
【００１４】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性および／または不揮発性メモリの形態のコンピュータストレージメディアを含む。基本入出力システム（ＢＩＯＳ）１３３は、起動中などにコンピュータ１１１内の要素間で情報の伝達を助ける基本ルーチンを含み、通常はＲＯＭ１３１に格納されている。ＲＡＭ１３２は通常、処理ユニット１２０によってすぐにアクセスできるか、および／または現在操作されているデータおよび／またはプログラムモジュールを収容している。限定ではなく例として、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００１５】
またコンピュータ１１１は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータストレージメディアを含むこともある。例示を目的としてのみ、図１は、非リムーバブル不揮発性の磁気メディアとの間で読み取りや書き込みを行うハードディスクドライブ１４１と、リムーバブル不揮発性の磁気ディスク１５２との間で読み取りや書き込みを行う磁気ディスクドライブ１５１と、ＣＤ−ＲＯＭや他の光メディアなどのリムーバブル不揮発性の光ディスク１５６との間で読み取りや書き込みを行う光ディスクドライブ１５５とを示している。例示的な動作環境で使用できる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータストレージメディアとしては、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどがあるが、これらには限定されない。ハードディスクドライブ１４１は通常、インターフェース１４０などの非リムーバブルメモリインターフェースを介してシステムバス１２１に接続されており、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、インターフェース１５０などのリムーバブルメモリインターフェースによってシステムバス１２１に接続されている。
【００１６】
図１に示した上述のドライブおよびそれらに関連するコンピュータストレージメディアは、コンピュータ１１１用のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの記憶を提供する。図１において、たとえばハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして図示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じでも異なっていてもよいことに留意されたい。ここでは、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７が最低でも異なるコピーであることを示すために、異なる番号が付与されている。ユーザは、タブレットまたは電子デジタイザ１６４、マイクロフォン１６３、キーボード１６２、および通常はマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス１６１などの入力デバイスを介してコンピュータ１１１にコマンドおよび情報を入力することができる。図１に示されていない他の入力デバイスは、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナなどを含むことができる。これらおよび他の入力デバイスは、システムバス１２１に結合されているユーザ入力インターフェース１６０を介して処理ユニット１２０に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することもできる。またモニタ１９１や他のタイプのディスプレイデバイスをビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続することもできる。モニタ１９１は、タッチスクリーンパネルなどと一体化することもできる。モニタ１９１および／またはタッチスクリーンパネルは、タブレットタイプのパーソナルコンピュータにおけるように、コンピュータ１１１が組み込まれている筐体に物理的に結合できることに留意されたい。さらに、コンピュータ１１１などのコンピューティングデバイスは、スピーカ１９５およびプリンタ１９６などの他の周辺出力デバイスを含むこともでき、これらは周辺出力インターフェース１９４などを介して接続することができる。
【００１７】
コンピュータ１１１は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードとすることができ、図１にはメモリストレージデバイス１８１しか示されていないが、通常はコンピュータ１１１に関連して上述した要素の多くまたはすべてを含む。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともできる。こうしたネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。たとえばこのファシリティでは、コンピュータ１１１は、データがそこから移行されるマシンを備えることができ、リモートコンピュータ１８０は、移行先のマシンを備えることができる。しかし移行元および移行先のマシンは、ネットワークまたは他の任意の手段によって接続される必要はなく、代わりに移行元のプラットフォームによる書き込みおよび１つまたは複数の移行先のプラットフォームによる読み取りが可能な任意のメディアを介してデータを移行できることに留意されたい。
【００１８】
ＬＡＮネットワーキング環境において使用する場合、コンピュータ１１１は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境において使用する場合、コンピュータ１１１は通常、モデム１７２、またはインターネットなどのＷＡＮ１７３上で通信を確立するための他の手段を含む。モデム１７２は内蔵または外付けとすることができ、ユーザ入力インターフェース１６０または他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク化された環境では、コンピュータ１１１に関連して示されているプログラムモジュール、またはその一部をリモートメモリストレージデバイス１８１に格納することができる。図１は、例として限定ではなくリモートアプリケーションプログラム１８５をメモリストレージデバイス１８１上に存在するものとして示している。図示したネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を使用できることが理解できるであろう。
【００１９】
さまざまな機能およびデータが、特定の方法で構成される特定のコンピュータシステム上に存在するものとして図１に示されているが、このような機能およびデータは、さまざまな構成のコンピュータシステムにわたってさまざまな他の方法で分散できることを当業者は理解するであろう。上述のように構成されたコンピュータシステムが、ファシリティのオペレーションをサポートするために、通常は使用されるが、当業者はファシリティがさまざまなコンポーネントを有し、さまざまなタイプおよび構成のデバイスを使用して実装できることを理解するであろう。
【００２０】
この技術については、１つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラムモジュールは、特定のタスクを実行したり特定の抽象データ型を実装したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、さまざまな実施形態において希望に応じて組み合わせたり、分散させたりすることができる。
【００２１】
図２は、オペレーティングシステムのコンポーネントを示すブロック図である。オペレーティングシステム２００は、ユーザモード２０２およびカーネルモード２０４で動作する複数のコンポーネントを備える。
【００２２】
ユーザモードで動作するコンポーネントは、たとえばセキュリティサブシステム２０６、ログオンプロセス２０８、ＷＩＮＤＯＷＳ（登録商標）サブシステム２１０、ＷＩＮＤＯＷＳ（登録商標）アプリケーション２１２、ＰＯＳＩＸサブシステム２１４、およびＰＯＳＩＸアプリケーション２１６を含む。
【００２３】
セキュリティサブシステムは、アプリケーションおよびオペレーティングシステムにセキュリティサービスを提供する。一例として、セキュリティサブシステムは、ユーザがオペレーティングシステムにログオンできるようにするログオンプロセス２０８および機能を提供することができる。
【００２４】
ＷＩＮＤＯＷＳ（登録商標）サブシステムは、ＷＩＮＤＯＷＳ（登録商標）アプリケーションなど、アプリケーションにＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）の機能を提供することができる。ＷＩＮＤＯＷＳ（登録商標）サブシステムは、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムに関連するアプリケーションプログラムインターフェースを実装することができる。一例として、ＷＩＮＤＯＷＳ（登録商標）サブシステムは、ＷＩＮＤＯＷＳ（登録商標）アプリケーションによってなされたＷＩＮＤＯＷＳ（登録商標）サブシステムのＡＰＩに対する要求を受け取り、その要求に関連するいくつかの活動を実行し、オペレーティングシステムカーネルをコールして、残りの活動を実行することができる。
【００２５】
またオペレーティングシステムは、ＰＯＳＩＸサブシステム２１４など、さらなるサブシステムを有することもできる。ＰＯＳＩＸサブシステムは、ＰＯＳＩＸの仕様に準拠するオペレーティングシステムに関連するＡＰＩを実装することができる。ＰＯＳＩＸオペレーティングシステムと通信してタスクを実行するために、このＡＰＩは、ＰＯＳＩＸアプリケーション２１６によって使用することができる。
【００２６】
オペレーティングシステムは、複数のサブシステムを備える場合、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）およびＰＯＳＩＸなど、複数の多様なオペレーティングシステムを提供することができる。したがって、これらの多様なオペレーティングシステム用に設計されたアプリケーションは、複数のサブシステムを備えたオペレーティングシステム上で機能することができる。
【００２７】
サブシステムは、カーネルモード２０４で動作するエグゼクティブサービスコンポーネント２１８によって提供されるサービスを利用することができる。エグゼクティブサービスコンポーネントは、ドライバ２２０およびカーネル２２４など、さらなるコンポーネントを備えることができる。これらのドライバは、システムのさまざまなソフトウェアおよびハードウェアコンポーネント間で直接の通信を提供することができる。一例として、ドライバは、ソフトウェアコンポーネントとネットワークインターフェースカードとの間で通信を提供することができる。カーネルは、中核となるオペレーティングシステム機能、およびプロセッサとの通信を提供することができる。一例として、カーネルは、プログラムレジスタをロードし、スレッドの実行を開始するようプロセッサに指示することによって、スレッドの実行をスケジュールすることができる。またハードウェアアブストラクション層２２２は、カーネルモードで動作して、ハードウェアデバイスに関連するオペレーティングシステムコンポーネントおよびインターフェースを提供することもできる。ハードウェアアブストラクション層は、オペレーティングシステムのソフトウェアコンポーネントが、特定のベンダのハードウェアデバイスに固有の機能を提供しなくてもよいようにすることができる。
【００２８】
アプリケーションは、オペレーティングシステムの一部として示されているが、図１に示されているように、オペレーティングシステムによって提供されるさまざまなファシリティを利用することによって実行することもできる。
【００２９】
図３は、一実施形態における複数のサブシステムのサービスを利用するアプリケーションを有するオペレーティングシステムのコンポーネントを示すブロック図である。例示した実施形態では、アプリケーションは、ＷＩＮＤＯＷＳ（登録商標）サブシステムおよびＰＯＳＩＸサブシステムの両方からサービスを受ける。それでアプリケーション３１２は、ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸアプリケーションとみなすことができる。さまざまな実施形態において、ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸアプリケーションは、主にサブシステムの一方、たとえばＷＩＮＤＯＷＳ（登録商標）用に設計することができる。
【００３０】
ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸアプリケーションは、両方のサブシステムによって提供されるリソースを利用できる場合がある。一例として、ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸアプリケーションは、両方のサブシステムに関連するライブラリおよびＤＬＬにアクセスすることができる。このリソースの共有を可能にするために、サブシステムの一方または両方を修正して、他のサブシステムと通信できるようにすることができる。そしてアプリケーションが実行され、そのアプリケーションがリソースにアクセスするとき、ＷＩＮＤＯＷＳ（登録商標）サブシステムは、そのリソースがＰＯＳＩＸサブシステムにおいて利用可能であると判断することができ、そのリソースをロードするようＰＯＳＩＸサブシステムに要求することができる。
【００３１】
リソースをロードする要求を受け取ると、ＰＯＳＩＸサブシステムはまず、そのリソースにアクセスを有するべきアプリケーションのプロセスに関連するスレッドのリストを判定しようと試みることができる。ＰＯＳＩＸサブシステムは、識別されたスレッドによって作成されたさらなるスレッド（たとえば、新たに生み出された子スレッド）にそのリソースへのアクセスを提供することもできる。これを行う際、ＰＯＳＩＸサブシステムは、そのリソースを要求したアプリケーションに関連するＷＩＮＤＯＷＳ（登録商標）サブシステムのスレッドを黙示的に信頼することができる。どのスレッドがそのアプリケーションに関連するかを判断するために、ＰＯＳＩＸサブシステムは、図５に関連して後述する方法を実行することができる。
【００３２】
したがってこのアーキテクチャによって、複数のサブシステムのサービスを利用するプロセスなどの「混合モード」のプロセスが可能となる。このアーキテクチャでは、両方のサブシステムからのサービスを必要としないアプリケーションは、修正されずに機能し続けるであろう。これらのアプリケーションは、そのアプリケーションが設計されたサブシステムのサービスを使用するであろう。
【００３３】
図４は、一実施形態におけるアプリケーションを示すブロック図である。このアプリケーションは、ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸの混合モードのアプリケーションとすることができる。アプリケーション４０２は、Ｃランタイム４０４、ＤＬＬ４０６、およびライブラリ４０８（たとえば、静的にリンクされたライブラリ）を利用することができる。たとえばＣランタイムは、たくさんのスペースを割り当てることなど、標準的なライブラリ機能を提供することができ、ＤＬＬは、ユーザインターフェースをレンダリングすることなど、ＷＩＮＤＯＷＳ（登録商標）サブシステムへのインターフェースを提供することができ、他のライブラリは、サードパーティーベンダがユーティリティライブラリを提供するなど、他のサービスを提供することができる。
【００３４】
アプリケーションは、ＰＯＳＩＸサブシステムのコンポーネントによって提供されるサービスを利用する必要がある場合、ＰＯＳＩＸ．ｅｘｅアプリケーション４１０を呼び出すことができる。このＰＯＳＩＸ．ｅｘｅコンポーネントは、ＷＩＮＤＯＷＳ（登録商標）サブシステムと共に動作するコンポーネントとして書くことができるが、ＰＯＳＩＸサブシステムと通信してＰＯＳＩＸ関連の機能を提供するＰＳＸ  ＤＬＬコンポーネント４１２をロードすることができる。このＰＳＸ  ＤＬＬコンポーネントは、アプリケーションがＰＯＳＩＸサブシステムによって実装されたインターフェースを呼び出すことができるようにするＤＬＬである。さまざまな実施形態において、アプリケーションはＰＳＸ  ＤＬＬコンポーネントを直接ロードすることができ、これによってＰＯＳＩＸ．ｅｘｅコンポーネントを起動することができる。
【００３５】
ＰＯＳＩＸ．ｅｘｅコンポーネントは、（ＰＳＸ  ＤＬＬコンポーネントまたはアプリケーションのいずれかによって）起動されると、ＰＯＳＩＸリソースを要求するプロセスに関連するスレッドのリストについてＷＩＮＤＯＷＳ（登録商標）サブシステムに照会することができる。そしてＰＯＳＩＸ．ｅｘｅコンポーネントは、このスレッドのリストをＰＯＳＩＸサブシステムに提供することができる。するとＰＯＳＩＸサブシステムは、このリスト上にあるスレッドおよびその親がこのリスト上のスレッドであることが示されたさらなるスレッドを信頼することができるであろう。
【００３６】
したがってＰＳＸ  ＤＬＬおよびＰＯＳＩＸ．ｅｘｅコンポーネントなど、もともとはＰＯＳＩＸサブシステムに関連していた可能性のあるコンポーネントを、ＷＩＮＤＯＷＳ（登録商標）サブシステムを利用するコンポーネントとして書き直すことができる。そしてこれらのコンポーネントは、ＰＯＳＩＸサブシステムによって提供されるサービスを使用し続けることができる。
【００３７】
図５は、一実施形態におけるＰＯＳＩＸコンポーネントによって実行されるルーチンを示す流れ図である。このルーチンは、ＰＯＳＩＸ．ＥＸＥコンポーネントによって実行することができる。
【００３８】
このルーチンは、ブロック５０２で始まる。
【００３９】
ブロック５０４では、ルーチンがＰＯＳＩＸのサービスを要求したアプリケーションに関連するスレッドのリストを列挙するようＷＩＮＤＯＷＳ（登録商標）サブシステムに要求する。ＷＩＮＤＯＷＳ（登録商標）サブシステムは、あるプロセスに関連するすべてのスレッドを列挙することができる。
【００４０】
ブロック５０６では、ルーチンが列挙されたスレッドのセットをＷＩＮＤＯＷＳ（登録商標）サブシステムから受け取る。この受け取られたスレッドのリストは、信頼されるよう指示することができる。つまり、これらのスレッドには、ＤＬＬなど、ＰＯＳＩＸのサービスへのアクセスを提供することができる。
【００４１】
ブロック５０８では、列挙されたスレッドと、その列挙されたスレッドによって作成された他のスレッドは、ＰＯＳＩＸサブシステムのリソースへのアクセスを要求する際に信頼することができる。
【００４２】
ブロック５１０において、ルーチンがそのコール元に戻る。
【００４３】
ある意味では、サブシステムは、アプリケーションおよびスレッドにセキュリティを提供する。一例として、あるプロセスは、別のプロセスのメモリやリソースにアクセスできない場合がある。ＰＯＳＩＸサブシステムが、信頼されるスレッドのリストを要求し受け取ることができるようにすることによって、ＰＯＳＩＸサブシステムは、その信頼をＷＩＮＤＯＷＳ（登録商標）サブシステムのプロセスおよびスレッドへ拡張することができる。したがって、ＰＯＳＩＸサブシステムおよびＷＩＮＤＯＷＳ（登録商標）サブシステムは、リソースを共有することができる。
【００４４】
上記より、本明細書では例示の目的で本発明の具体的な実施形態について説明したが、本発明の趣旨および範囲から逸脱することなくさまざまな修正を行い得ることが理解されるであろう。したがって、本発明は、添付の特許請求の範囲によるもの以外で限定されない。
【図面の簡単な説明】
【００４５】
【図１】この技術を実装できる適切なコンピューティング環境の一例を示すブロック図である。
【図２】オペレーティングシステムのコンポーネントを示すブロック図である。
【図３】一実施形態における複数のサブシステムのサービスを利用するアプリケーションを有するオペレーティングシステムのコンポーネントを示すブロック図である。
【図４】一実施形態におけるアプリケーションを示すブロック図である。
【図５】一実施形態におけるＰＯＳＩＸコンポーネントによって実行されるルーチンを示す流れ図である。
【符号の説明】
【００４６】
１１０  コンピューティングシステム環境
１１１  コンピュータ
１２０  処理ユニット
１２１  システムバス
１３０  システムメモリ
１３１  ＲＯＭ
１３２  ＲＡＭ
１３３  ＢＩＯＳ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  非リムーバブル不揮発性メモリインターフェース
１４１  ハードディスクドライブ
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  リムーバブル不揮発性メモリインターフェース
１５１  磁気ディスクドライブ
１５２  磁気ディスク
１５５  光ディスクドライブ
１５６  光ディスク
１６０  ユーザ入力インターフェース
１６１  マウス
１６２  キーボード
１６３  マイクロフォン
１６４  タブレット
１７０  ネットワークインターフェース
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  ワイドエリアネットワーク
１８０  リモートコンピュータ
１８１  メモリストレージデバイス
１８５  リモートアプリケーションプログラム
１９０  ビデオインターフェース
１９１  モニタ
１９４  周辺出力インターフェース
１９５  スピーカ
１９６  プリンタ
２００  オペレーティングシステム
２０２  ユーザモード
２０４  カーネルモード
２０６  セキュリティサブシステム
２０８  ログオンプロセス
２１０  Ｗｉｎｄｏｗｓ（登録商標）サブシステム
２１２  Ｗｉｎｄｏｗｓ（登録商標）アプリケーション
２１４  ＰＯＳＩＸサブシステム
２１６  ＰＯＳＩＸアプリケーション
２１８  エグゼクティブサービス
２２０  ドライバ
２２２  ハードウェアアブストラクション層
２２４  カーネル
３１２  ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸアプリケーション
４０２  ＷＩＮＤＯＷＳ（登録商標）／ＰＯＳＩＸアプリケーション
４０４  Ｃランタイム
４０６  ＤＬＬ
４０８  ライブラリ
４１０  ＰＯＳＩＸ．ｅｘｅ
４１２  ＰＳＸ  ＤＬＬ
【図１】
2006164265.tif 000003
【図２】
2006164265.tif 000004
【図３】
2006164265.tif 000005
【図４】
2006164265.tif 000006
【図５】
2006164265.tif 000007