(57)【特許請求の範囲】
【請求項１】
マウス装置と接続されたコンピュータにおいて前記マウス装置に関連した情報を提供するためのプログラムを記録した記録媒体であって、前記プログラムは、前記コンピュータを、
前記マウス装置に対応するマウスサービス手段と、
として機能させ、
前記マウスサービス手段は、ユニフォームリソース識別子によって識別可能なポートと、当該マウスサービスの１つまたは複数の挙動を挙動センテンスにより記述した片務契約を有し、当該片務契約を受け入れた他のサービス手段との間で前記マウス装置に関する情報を通信することを特徴とする、記録媒体。
【請求項２】
前記マウス装置に関する情報は、前記マウス装置内のモーションエンコーダで検出されたモーションに対応するマウスイベントであり、
前記プログラムは、前記コンピュータを、さらにマウスデータサービス手段として機能させ、
前記マウスサービス手段が、前記マウスイベントを前記マウスデータサービス手段へ格納し、
前記マウスデータサービス手段が、前記アプリケーションに対応するアプリケーションサービス手段との間で前記マウスイベントを通信し、
前記マウスサービス手段、前記マウスデータサービス手段及び前記アプリケーションサービス手段は、それぞれユニフォームリソース識別子によって識別可能なポートと、各ポートに対応するサービス手段の１つまたは複数の挙動を挙動センテンスにより記述した片務契約とを有し、当該片務契約を受け入れた他のサービス手段との間で前記ポートを介して前記マウスイベントを通信することを特徴とする請求項１に記載の記録媒体。
【請求項３】
前記マウスデータサービス手段が、前記マウスイベントを当該マウスイベントが発生した時間とともに格納し、前記マウスイベント及び当該マウスイベントが発生した時間を前記アプリケーションサービスとの間で通信することを特徴とする請求項２に記載の記録媒体。
【請求項４】
前記マウスデータサービス手段は、前記マウスイベントを前記アプリケーションサービス手段から要求されるまで保持することを特徴とする請求項２に記載の記録媒体。
【請求項５】
前記プログラムは、前記コンピュータを、
前記マウス装置に関する情報として前記マウス装置のプロパティを格納するマウス情報サービスとして機能させ、
前記マウス情報サービスは、ユニフォームリソース識別子によって識別可能なポートと、当該ポートに対応するサービスの１つまたは複数の挙動を挙動センテンスにより記述した片務契約とを有し、当該片務契約を受け入れた他のサービスとの間で前記ポートを介して前記マウス装置のプロパティを通信することを特徴とする請求項１に記載の記録媒体。
【請求項６】
マウス装置及びキーボード装置に接続されたコンピュータにおいて前記マウス装置に関連した情報及び前記キーボード装置に関連した情報をアプリケーションへ提供するためのプログラムを記録した記録媒体であって、前記プログラムは、前記コンピュータを、
前記マウス装置に対応するマウスサービス手段と、
マウスデータサービス手段と、
前記キーボード装置に対応するキーボードサービス手段と、
キーボードデータサービス手段と
として機能させ、
前記マウスサービス手段は、前記マウス装置内のモーションエンコーダで検出されたモーションに対応するマウスイベントを前記マウスデータサービス手段へ格納し、
前記マウスデータサービス手段が、前記アプリケーションに対応するアプリケーションサービス手段との間で前記マウスイベントを通信し、
前記キーボードサービス手段は、前記キーボード装置内で検出されたキーストロークに対応するキーボードイベントを前記キーボードデータサービス手段へ格納し、
前記キーボードデータサービス手段は、前記キーボードイベントを前記アプリケーションサービス手段へ提供し、
前記マウスサービス手段、前記マウスデータサービス手段、前記キーボードサービス手段、前記キーボードデータサービス手段及び前記アプリケーションサービス手段は、それぞれユニフォームリソース識別子によって識別可能なポートと、各ポートに対応するサービス手段の１つまたは複数の挙動を挙動センテンスにより記述した片務契約とを有し、当該片務契約を受け入れた他のサービス手段との間で前記ポートを介して前記マウスイベントまたは前記キーボードイベントを通信する、ことを特徴とする記録媒体。
【請求項７】
前記キーボードデータサービス手段は、前記キーボードイベントを当該キーボードイベントが発生した時間とともに格納し、前記キーボードイベント及び当該キーボードイベントが発生した時間を前記アプリケーションサービス手段へ提供することを特徴とする請求項６に記載の記録媒体。
【請求項８】
前記キーボードデータサービス手段は、前記キーボードイベントを前記アプリケーションサービス手段から要求されるまで保持することを特徴とする請求項６に記載の記録媒体。
【請求項９】
前記マウスデータサービス手段は、前記マウスイベントを当該マウスイベントが発生した時間とともに格納し、前記マウスイベント及び当該マウスイベントが発生した時間を前記アプリケーションサービス手段へ提供することを特徴とする請求項６に記載の記録媒体。
【請求項１０】
前記マウスデータサービス手段は、前記マウスイベントを前記アプリケーションサービス手段から要求されるまで保持することを特徴とする請求項６に記載の記録媒体。
【請求項１１】
前記プログラムは、前記コンピュータを、
前記キーボード装置に関する情報として前記キーボード装置のプロパティを格納するキーボード情報サービス手段として機能させ、
前記キーボード情報サービス手段は、ユニフォームリソース識別子によって識別可能なポートと、当該ポートに対応するサービスの１つまたは複数の挙動を挙動センテンスにより記述した片務契約とを有し、当該片務契約を受け入れた他のサービス手段との間で前記ポートを介して前記キーボード装置のプロパティを通信することを特徴とする請求項６に記載の記録媒体。
【請求項１２】
前記プログラムは、前記コンピュータを、
前記マウス装置に関する情報として前記マウス装置のプロパティを格納するマウス情報サービスとして機能させ、
前記マウス情報サービスは、ユニフォームリソース識別子によって識別可能なポートと、当該ポートに対応するサービスの１つまたは複数の挙動を挙動センテンスにより記述した片務契約とを有し、当該片務契約を受け入れた他のサービスとの間で前記ポートを介して前記マウス装置のプロパティを送受信することを特徴とする請求項６に記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティングシステムのサブシステムとしての装置に関し、より詳細には、装置が分散型オペレーティングシステムにおいてサービスとして表される基本設計構造に関する。
【背景技術】
【０００２】
パーソナルコンピュータのユーザを恐怖に陥れる青色に輝くものとは何であろうか。それは、ほぼいつもプログラミングエラーによって引き起こされる恐怖の青い画面である。  デバイスドライバは、こうしたエラーの一般的な源である。デバイスドライバとは、コンピュータシステムをある装置と通信できるようにするソフトウェア構成要素である。正しいドライバがシステムにインストールされていない場合、装置は使用できない。というのは、ほとんどの場合ドライバは、装置との通信に使用されるハードウェアをどのように扱うかを理解する唯一のソフトウェアだからである。装置およびデバイスドライバの急増により、プログラミングエラーが急激に増加した。プログラマが装置とコンピュータとの間のすべての対話を視覚化したり、コンピュータと相互接続できる他のすべての装置との対話の結果を決定したりすることは事実上不可能である。図１は、こうした問題および他の問題をより詳しく示すシステム１００を示している。
【０００３】
図１は、集中型オペレーティングシステム、つまりＬｉｎｕｘオペレーティングシステム１０１を示している。Ｌｉｎｕｘオペレーティングシステム１０１は、様々なユーザのアプリケーション１０６間の入力／出力装置１１４などのハードウェアの使用を制御し、調整する。Ｌｉｎｕｘオペレーティングシステム１０１は、カーネル１０２、システムライブラリ１０４、およびシステムユーティリティ（デーモン）１０８など、他のＵＮＩＸ（登録商標）オペレーティングシステムの変形に似たコードの３つの密結合部分を使用することによって制御および調整を集中化する。カーネル１０２は、Ｌｉｎｕｘオペレーティングシステム１０１の核を形成する。カーネル１０２は、プロセスの稼働に必要なすべての機能を提供し、入力／出力装置１１４など、ハードウェアリソースへの保護されたアクセスを提供する。システムライブラリ１０４は、アプリケーションがカーネル１０２と対話できるようにし、Ｌｉｎｕｘオペレーティングシステム１０１の多くを実施する標準の１組の関数およびアプリケーションプログラミングインターフェイスを指定する。ＵＮＩＸ（登録商標）オペレーティングシステムの変形から出発するポイントは、Ｌｉｎｕｘオペレーティングシステム１０１のオペレーティングシステムインターフェイスにあり、カーネル１０２によって直接維持されているものではない。むしろ、アプリケーション１０６がシステムライブラリ１０４への呼出しを行い、システムライブラリ１０４が必要に応じてカーネル１０２のオペレーティングシステム関数を呼び出す。システムユーティリティ（デーモン）１０８は、ユーザによって呼び出されることなく、受信するネットワーク接続への応答、ハウスキーピング、またはメンテナンスユーティリティなど個々の特化された管理タスクを実行するプログラムである。カーネル１０２は、単一のモノリシックアーキテクチャ（Ｌｉｎｕｘオペレーティングシステム１０１のＵＮＩＸ（登録商標）系統を示す）として作成される。単一バイナリの主な理由は、リソースの力（power）、権限（authority）、制御（Control）、および調整（coordination）を集中させることによってＬｉｎｕｘオペレーティングシステム１０１の全体的な性能を向上させることである。カーネルコードおよびデータの構造など、すべてがカーネル１０２内で密結合されている。すべてが単一のアドレス空間に保持されており、したがってあるプロセスがオペレーティングシステム関数を呼び出すとき、またはハードウェア割り込みが配信されるときに、高くつく（expensive）コンテキスト切替は不要である。コアスケジューリングおよび仮想メモリコードだけがこのアドレス空間を占めているのではなく、すべてのデバイスドライバ１１０、ファイルシステム、およびネットワーキングコードを含むすべてのカーネルコードが同じ単一のアドレス空間に存在している。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
こうした密結合設計に関する問題は、その脆弱さである。単一のアドレス空間内のデバイスドライバ１１０が公開されることによって、こうしたデバイスドライバは、Ｌｉｎｕｘオペレーティングシステム１０１をデッドロックさせる可能性のある信頼できないコードを収納するトロイの木馬として働くおそれがある。ほとんどすべての場合、アプリケーション１０６が入力／出力装置１１４と通信するための唯一の方法は、カーネルモードのデバイスドライバ１１０を使用するものである。カーネルモードは、Ｌｉｎｕｘオペレーティングシステム１０１の最も特権的な実行モードである。特権的とは、Ｌｉｎｕｘオペレーティングシステム１０１がデバイスドライバ１１０の稼働中のコードを監視したり、メモリへのアクセスを保護したりする方法がないことを意味する。したがって、誤ったカーネルモードのデバイスドライバ１１０は、Ｌｉｎｕｘオペレーティングシステム１０１による監督無しに、所望のどんなことでも行うことができる。一例には、ハードウェア割り込み生成の処理の問題がある。ハードウェア割り込みの非同期性により、割り込みハンドラのほんの１つのプログラミングエラーがシステムをデッドロックさせたり、まれにしか復元できない異常なやり方でデータを破損させたりする可能性がある。
【０００５】
近年の装置は、数が少なく、コンピュータとの相互接続が単純であったため、安定していたように思われる。今日装置は急増し、ユーザの利益にはなっているが、こうした急増には、アプリケーション１０６と入力／出力装置１１４との間のリンクの提供に必要なデバイスドライバの数の著しい増加が伴う。誤ったデバイスドライバの信頼性の向上に対する解決策が無ければ、ユーザは、最終的にはもはや所望のコンピューティング体験の提供をシステム１００に安心して委ねることができなくなり、それによってシステム１００に対する需要が市場から減ることになる。したがって、既存のシステムに関連する前記および他の問題を回避または低減しながら装置をサービスとして表す方法およびシステムが必要である。
【課題を解決するための手段】
【０００６】
本発明によれば、装置をサービスとして表すシステム、方法、およびコンピュータ可読媒体が提供される。本発明のシステム形態は、ネットワーク式システムにおいてコンピュータサブシステムである装置を含む。装置は、その装置で実行する１つまたは複数のサービスを含む。各サービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポート、およびサービスの１つまたは複数の挙動を記述する契約（ｃｏｎｔｒａｃｔ）を含む。
【０００７】
本発明の別のシステム形態は、ネットワーク式コンピュータシステムにおけるターミナルサービスを含む。ターミナルサービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポート、およびディスプレイサービスの１つまたは複数の挙動を記述する契約を備えるディスプレイサービスを含む。ターミナルサービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポート、およびキーボードサービスの１つまたは複数の挙動を記述する契約を備えるキーボードサービスをさらに含む。ターミナルサービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポート、およびマウスサービスの１つまたは複数の挙動を記述する契約を備えるマウスサービスをさらに含む。
【０００８】
本発明の方法の形態は、サービスとしての装置により入力／出力イベントを処理するコンピュータ実施方法を含む。方法は、ある入力／出力イベントのための装置を表すサービスを要求するステップを含む。サービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポート、およびサービスの１つまたは複数の挙動を記述する契約を含む。方法は、入力／出力イベントを含むカスタマイズ可能なタグベースのメッセージを受信するステップをさらに含む。方法は、入力／出力イベントを削除するようサービスに要求するステップをさらに含む。
【０００９】
本発明のコンピュータ可読形態は、サービスとしての装置により入力／出力イベントを処理するコンピュータ実施方法を実施するコンピュータ実行可能命令を有するコンピュータ可読媒体を含む。方法は、ある入力／出力イベントのための装置を表すサービスを要求するステップを含む。サービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポート、およびサービスの１つまたは複数の挙動を記述する契約を含む。方法は、入力／出力イベントを含むカスタマイズ可能なタグベースのメッセージを受信するステップをさらに含む。方法は、入力／出力イベントを削除するようサービスに要求するステップをさらに含む。
【００１０】
本発明の別のシステム形態は、ネットワーク式システムにおいてコンピュータサブシステムである装置を含む。装置は、装置で実行する１つまたは複数のサービスを含む。各サービスは、ユニフォームリソース識別子を含む識別子によって識別可能なポートを含む。  装置は、ネットワーク式システムに結合してカスタマイズ可能なタグベースのメッセージを交換することができる。
【００１１】
下記の詳細な説明を添付の図面と併せ読むことによって上記の態様、および本発明の付随的な利点の多くがよりよく理解できるようになるにつれて、それらをより容易に理解できるようになる。
【発明を実施するための最良の形態】
【００１２】
本発明の様々な実施形態は、装置を、パーソナルコンピュータなど他の装置と通信することができるＷｅｂサービスまたは専用サーバに変換する。本発明の様々な実施形態によって、低レベルアスペクトの様々なデバイスドライバが装置に常駐できるようになり、それによって装置が従来の仕様との互換性を備えている必要性がなくなる。本発明の様々な実施形態によって、低レベルソフトウェアをすでに組み込んだ状態で様々な装置を工場から出荷することができ、したがってユーザは、デバイスドライバをインストールし、アップグレードする体験を処理する必要性から解放される。本発明の様々な実施形態では、各装置は、ユニフォームリソース識別子（ＵＲＩ）によって識別可能なネットワークノードであることが好ましい。「サービス」という用語は、本明細書で使用する場合、疎結合のサービス（loosely coupled service）の包含を意味する。
【００１３】
図２Ａは、オペレーティングシステムサービスまたは別のサービスの唯一の称号を構成する、ＵＲＩ２１０Ａ−１、２１０Ｂ−１によって識別可能なポート、および片務契約（ｕｎｉｌａｔｅｒａｌ  ｃｏｎｔｒａｃｔ）２１０Ａ−２、２１０Ｂ−２をそれぞれ備える２つのオペレーティングシステムサービス２１０Ａ、２１０Ｂを示している。装置は、サービス２１０Ａ、２１０Ｂなどのサービスとして表すことができる。サービスのポートには、片務契約によって指定された挙動タイプが与えられている。装置の好ましい通信機構は、プログラムによる配線式のポートを介するものである。あるポートの挙動タイプが別のポートの挙動タイプと互換性がある場合、配線式ポートは可能である。ポートが互いにプログラムによって配線されている（ＵＲＩ２１０Ａ−１、２１０Ｂ１により識別可能）とき、サービス２１０Ａ、２１０Ｂは、メッセージを互いに送信することによって通信する。簡単に言えば、片務契約２１０Ａ−２、２１０Ｂ−２は、サービス２１０Ａ、２１０Ｂに流れ込む、またはそこから流れ出すメッセージの順序を指定する言語で表される。
【００１４】
リソースの共有は、リソースの挙動と互換性のある方法で、対話を介して可能である。（サービスによって表される）リソースの挙動は、片務契約で表される。サービスは、片務契約によって規定することができる。したがって、片務契約を介してファイルに挙動条件を添付して、アクセス制御を管理することができる。図２Ｂに片務契約２１０Ａ−２の一部を示している。行２１０Ａ−３は、キーワードＵＮＩＬＡＴＥＲＡＬＣＯＮＴＲＡＣＴ、続いて指示子「ＰＤＡ」、および片務契約２１０Ａ−２の定義を区切る１対の開閉の中括弧「｛｝」を含む。行２１０Ａ−４は、ファイル名「ＦＩＬＥＮＡＭＥ」をパラメータとみなすＯＰＥＮ操作のシグニチャを宣言する。オペレーティングシステムサービス２１０Ａを使用するために、外部サービスは、ＯＰＥＮ操作を介して開くべきファイルの名前を指定する。したがってＯＰＥＮ操作は、セッションごとに他のサービスによって呼び出される第１の操作となるはずである。ＰＬＡＹ操作は、行２１０Ａ−５で宣言されている。ＰＬＡＹ操作は、別のサービスのポートをパラメータとみなす。ＰＬＡＹ操作が他のサービスによって呼び出されると、オペレーティングシステムサービス２１０Ａは、開いたファイルからデータのストリームを読み取り、読み取ったデータを所与のサービスのポートに送信する。オペレーティングシステムサービス２１０Ｂなどの他のサービスは、行２１０Ａ−６で宣言されているＲＥＣＯＲＤ操作を介して、開いたファイルに情報を記録することもできる。ＲＥＣＯＲＤ操作は、データをパラメータとみなす。このデータは、ＲＥＣＯＲＤ操作によって開いたファイルに書き込まれる。所望のすべての操作が開いたファイルに対して実行されると、行２１０Ａ−７で宣言されているＣＬＯＳＥ操作を介して開いたファイルを閉じることができる。ＣＬＯＳＥ操作は、ファイル名「ＦＩＬＥＮＡＭＥ」を引数とみなし、したがってＣＬＯＳＥ操作はどのファイルを閉じるべきかがわかる。
【００１５】
行２１０Ａ−８〜２１０Ａ−９は、オペレーティングシステムサービス２１０Ａの挙動を含む。行２１０Ａ−８は、挙動センテンスＢ＝ＯＰＥＮ．ＢＰＲを含む。ここでは、Ｂは挙動ルール、ＯＰＥＮは、オペレーティングシステムサービス２１０Ａを使用して呼び出される第１の操作がＯＰＥＮ操作であることを示し、ピリオド「．」は、ＯＰＥＮ操作の呼出しの後に追加の挙動が続くことを示し、ＢＰＲは、行２１０Ａ−９でさらに定義されている第２の挙動センテンスを指す。行２１０Ａ−９は、次の挙動センテンスＢＰＲ＝ＰＬＡＹ．ＢＰＲ＋ＲＥＣＯＲＤ．ＢＰＲ＋ＣＬＯＳＥを含む。ここでは、ＢＰＲは第２の挙動を示し、ＰＬＡＹ．ＢＰＲはＰＬＡＹ操作を呼び出し、次いで第２の挙動が再度続く（再帰）ことを示し、ＲＥＣＯＲＤ．ＢＰＲはＲＥＣＯＲＤ操作を呼び出し、次いで再帰的に第２の挙動が続くことを示し、ＣＬＯＳＥはＣＬＯＳＥ操作の呼出しを示し、プラス記号「＋」は、オペレーティングシステムサービス２１０Ｂなどの他のサービスがＰＬＡＹ操作、ＲＥＣＯＲＤ操作、およびＣＬＯＳＥ操作の間で呼出しを行うことができる選択肢を示す。
【００１６】
図２Ｃに片務契約２１０Ｂ−２の一部を示している。行２１０Ｂ−３は、キーワードＵＮＩＬＡＴＥＲＡＬＣＯＮＴＲＡＣＴ、続いて指示子「ＳＰＥＡＫＥＲ」、および片務契約２１０Ｂ−２の部分の定義を区切る１対の開閉の中括弧「｛｝」を含む。行２１０Ｂ−４は、ファイル名「ＦＩＬＥＮＡＭＥ」をパラメータとしてみなすＯＰＥＮ操作のシグニチャを宣言する。ＲＥＰＲＯＤＵＣＥ操作は、行２１０Ｂ−５で宣言されている。ＲＥＰＲＯＤＵＣＥ操作は、別のサービスのポートをパラメータとみなす。ＣＬＯＳＥ操作は、行２１０Ｂ−６で宣言されており、ファイル名「ＦＩＬＥＮＡＭＥ」を引数として扱い、したがってＣＬＯＳＥ操作はどのファイルを閉じるべきかがわかる。
【００１７】
行２１０Ｂ−７〜２１０Ｂ−８は、オペレーティングシステムサービス２１０Ｂの挙動を含む。行２１０Ｂ−７は、挙動センテンスＢ＝ＯＰＥＮ．ＢＰを含む。ここでは、Ｂは挙動ルール、ＯＰＥＮは、オペレーティングシステムサービス２１０Ｂによるセッションで呼び出される第１の操作がＯＰＥＮ操作であることを示し、ピリオド「．」は、ＯＰＥＮ操作の呼出しの後に追加の挙動が続くことを示し、ＢＰは、行２１０Ｂ−８でさらに定義されている第２の挙動センテンスを指す。行２１０Ｂ−８は、次の挙動センテンスＢＰ＝ＲＥＰＯＲＤＵＣＥ．ＢＰ＋ＣＬＯＳＥを含む。ここでは、ＢＰは第２の挙動を示し、ＲＥＰＲＯＤＵＣＥ．ＢＰはＲＥＰＲＯＤＵＣＥ操作を呼び出し、次いで第２の挙動が再度続く（再帰）ことを示し、ＣＬＯＳＥはＣＬＯＳＥ操作の呼出しを示し、プラス記号「＋」はオペレーティングシステムサービス２１０Ａなどの外部サービスがＲＥＰＲＯＤＵＣＥ操作およびＣＬＯＳＥ操作の間で呼出しを行うことができる選択肢を示す。
【００１８】
片務契約２１０Ａ−２がサービス２１０Ｂによって受け入れられ、片務契約２１０Ｂ−２がサービス２１０Ａによって受け入れられると、サービス２１０Ａとサービス２１０Ｂとの間の通信のインスタンスが作成される。各片務契約２１０Ａ−２、２１０Ｂ−２は、サービス２１０Ａ、２１０Ｂによって、単なる実行の約束によって受け入れられることができるが、こうした片務契約に表される挙動に従って片務契約２１０Ａ−２、２１０Ｂ−２の実行によって受け入れられることが好ましい。したがって、サービス２１０Ｂが片務契約２１０Ａ−２の挙動センテンス２１０Ａ−８、２１０Ａ−９によって表されるような挙動に従い、それを実行する場合、サービス２１０Ｂは、約束されたサービスを提供しなければならない。例えば、オペレーティングシステムサービス２１０Ｂが、まず挙動センテンス２１０Ａ−８によって指定されているようにＯＰＥＮ操作を呼び出すことによって動作し、次いで行２１０Ａ−９に示す挙動センテンスによって指定されているようにＰＬＡＹ操作またはＲＥＣＯＲＤ操作またはＣＬＯＳＥ操作のいずれかを呼び出す場合、オペレーティングシステムサービス２１０Ａは、要求された呼出しに従って、ファイルを開く、ファイルの内容を再生する、内容をファイルに記録する、ファイルを閉じるなど、所望のサービスを提供する。
【００１９】
図２Ｄに、いくつかの装置を、識別子（ＵＲＩなど）２１２Ｂ〜２２０Ｂによって識別可能なポート、および片務契約２１２Ａ〜２２０Ａをそれぞれ備えるサービス２１２〜２２０として示している。ディスプレイサービス２１２は、コンピュータの視覚出力装置であるディスプレイを表す。ディスプレイは一般に、ＣＲＴベースのビデオディスプレイであるが、次第にＬＣＤベースまたはガスプラズマベースのフラットパネルディスプレイから成るものが増えつつある。マウスサービス２１４は、一般の位置決め装置である機械式マウスである。機械式マウスの基本的な特徴は、片手で握るように設計されている平底のケースであり、上部には１つまたは複数のボタン、下部には多方向検出装置（ｍｕｌｔｉ−ｄｉｒｅｃｔｉｏｎａｌ  ｄｅｔｅｃｔｉｏｎ  ｄｅｖｉｃｅ）（通常、ボールおよび何らかのシャフトエンコーダ）があり、マウスをコンピュータに接続するケーブルがある。ユーザは一般に、マウスをある面（デスクトップなど）上で移動させることによって画面上のカーソルを制御する。マウスは、相対的な位置決め装置である。というのは、マウスの移動には定義された制限がなく、ある面上にマウスを配置しても、特定の画面位置に直接対応付けられないからである。画面上で項目またはコマンドを選択するには、ユーザは、マウスのボタンのうちの１つを押して「マウスクリック」を生成する。キーボードサービス２１６は、タイプライタのキーボードに似ており、ユーザからコンピュータまたはデータ通信回路に情報を運ぶ１組のスイッチを備えるハードウェアユニットであるキーボードを表す。ＰＤＡサービス２１８は、個人用管理（カレンダ、ノートテーキング（ｎｏｔｅ−ｔａｋｉｎｇ）、データベース、計算機など）、および通信など、特定の機能を提供するように設計された軽量コンピュータであるＰＤＡを表す（ＰＤＡサービス２１８の片務契約２１８Ａの一例には、片務契約２１０Ａ−２がある）。より高度なＰＤＡは、音楽の再生などマルチメディア機能も提供する。多くのＰＤＡは、入力については、キーボードまたはマウスの代わりにペンまたは他の位置決め装置に依存するが、一部のＰＤＡには、タッチタイピングには小さすぎるが、ペンまたは位置決め装置とともに使用することができるキーボードを提供するものもある。ＰＤＡは、データの記憶については、電力を消費するディスクドライブの代わりにフラッシュメモリに依存する。ラウドスピーカサービス２２０は、デジタル符号化サウンドを含むカスタマイズ可能なタグベースのメッセージを受け付け、メッセージの内容をユーザが聞き取るのに十分大きいサウンドに変換する装置であるラウドスピーカを表す（ラウドスピーカサービス２２０の片務契約２２０Ａの一例には、片務契約２１０Ｂ−２がある）。
【００２０】
従来、ディスプレイサービス２１２、マウスサービス２１４、キーボードサービス２１６、ＰＤＡサービス２１８、およびラウドスピーカサービス２２０によって表される各装置は、個別のデバイスドライバを必要としていたが、本発明の様々な実施形態によって、サービス２１２〜２２０のうちの１つによって表される各装置の特定のデバイスドライバが不要になる。様々なサービス２１２〜２２０が分散型オペレーティングシステム２２４および最終的には識別子（ＵＲＩなど）２２６Ｂおよび片務契約２２６Ａによって識別可能なアプリケーションサービス２２６によって表されるアプリケーションと通信するには、１つのネットワークデバイスドライバ２２２のみが存在していればよい。
【００２１】
図２Ｅは、識別子（ＵＲＩなど）２２８Ｂによって識別可能なポート、および片務契約２２８Ａを備える複合サービス（ｃｏｍｐｏｓｅｄ  ｓｅｒｖｉｃｅ）２２８を示している。複合サービス２２８は、マウスサービス２１４、キーボードサービス２１６、およびディスプレイサービス２１２から成る。一般に、ディスプレイ、マウス、およびキーボードは、グループとして動作する。複合サービス２２８は、キーボードサービス２１６の変化をサブスクライブし、キーボードサービス２１６によってキーボードイベントが生成されるとそれらを消費し、対応するキーボードイベントを生成する。各キーボードイベントにおける修飾キーの状態が注目され、したがって修飾キーをマウスイベントに結び付けることができるようになる。複合サービス２２８は、マウスサービス２１４の変化をサブスクライブし、マウスイベントが生成されるとそれらを消費し、（マウスイベントの）相対的なマウスモーションを絶対的なマウスモーションに変換し、画面上のカーソルの絶対位置を更新し、対応する絶対的なマウスイベントを生成する。各キーボードイベントにおける修飾キーの状態が注目され、したがって修飾キーをマウスイベントに結び付けることができるようになる。
【００２２】
図２Ｆは、ディスプレイサービス２１２、マウスサービス２１４、およびキーボードサービス２１６の状態を含む複合サービス２２８の状態を保持するカスタマイズ可能なタグベースの文書２５４を示している。カスタマイズ可能なタグベースの文書２５４は、複合サービス２２８の情報サービス（図示せず）によって生成することが可能である。カスタマイズ可能なタグベースの文書２５４は、開始タグ２５４Ａ＜Ｃ：ＩＮＦＯ＞とその対の終了タグ２５４Ｌ＜／Ｃ：ＩＮＦＯ＞との間で定義される情報要素を含む。タグ２５４Ａと２５４Ｌとの間には、キーボードサービス２１６のデータサービスへのＵＲＩを含むタグ＜Ｃ：ＫＥＹＢＯＡＲＤＤＡＴＡＵＲＩ＞を定義する行２５４Ｂがある。タグ２５４Ａと２５４Ｌとの間には、マウスサービス２１４のデータサービスへのＵＲＩを含むタグ＜Ｃ：ＭＯＵＳＥＤＡＴＡＵＲＩ＞を定義する行２５４Ｃがある。行２５４Ｄは、ディスプレイサービス２１２のカーソル位置サービスへのＵＲＩを含むタグ＜Ｃ：ＤＩＳＰＬＡＹＣＵＲＳＯＲＰＯＳＩＴＩＯＮＵＲＩ＞を定義している。行２５４Ｅは、ディスプレイサービス２１２によって表されるディスプレイの幅を含むタグ＜Ｃ：ＤＩＳＰＬＡＹＷＩＤＴＨ＞を定義している。行２５４Ｆは、ディスプレイサービス２１２によって表されるディスプレイの高さを含むタグ＜Ｃ：ＤＩＳＰＬＡＹＨＥＩＧＨＴ＞を定義している。タグ２５４Ａと２５４Ｌとの間にさらに埋め込まれているのは、タグ２５４Ｈ＜Ｃ：ＭＯＵＳＥＰＯＳＩＴＩＯＮ＞とその対の一方の終了タグ２５４Ｋ＜／Ｃ：ＭＯＵＳＥＰＯＳＩＴＩＯＮ＞との間のマウス位置要素である。タグ２５４Ｈと２５４Ｋとの間には、マウスの横方向（horizontal）位置を示すタグ＜Ｃ：Ｈ＞を定義する行２５４Ｉがある。行２５４Ｊは、マウスの縦方向（vertical）位置を示すタグ＜Ｃ：Ｖ＞を定義している。
【００２３】
図２Ｇには、複合サービス２２８のデータサービス（図示せず）によって再生可能なカスタマイズ可能なタグベースの文書２３２を示している。カスタマイズ可能なタグベースの文書２３２は、マウスサービス２１４およびキーボードサービス２１６によって生成され、しかしアプリケーションサービス２２６によってまだ消費されていないキーボードイベントおよびマウスイベントを保持する。アプリケーションサービス２２６は通常、データサービスの変化をサブスクライブし、したがって新しいイベントが生成され、複合サービス２２８のデータサービスに現れると、アプリケーションサービス２２６に通知される。カスタマイズ可能なタグベースの文書２３２は、タグ２３２Ａ＜Ｃ：ＤＡＴＡ＞とその対の一方の終了タグ２３２ＡＡ＜／Ｃ：ＩＮＦＯ＞との間で定義されたデータ要素を含む。タグ２３２Ａは、名前空間を定義する属性ＸＭＬＮＳ：Ｃを含んでおり、アドレス「ＨＴＴＰ：／／ＳＣＨＥＭＡＳ．ＣＯＭ／ＣＯＯＲＤＩＮＡＴＯＲ」で見つけることができる。タグ２３２Ａと２３２ＡＡとの間には、キーボードサービス２１６によって生成されたキーボードイベント、またはマウスサービス２１４によって生成されたマウスイベントのいずれかを捕捉するゼロ個以上のデータ項目要素が含まれている。キーボードイベントの一例は、タグ２３２Ｂ＜Ｃ：ＤＡＴＡＩＴＥＭ＞とその対の一方の終了タグ＜／Ｃ：ＤＡＴＡＩＴＥＭ＞２３２Ｌとの間で定義されている。時間要素は、行２３２Ｄでタグ＜Ｃ：ＴＩＭＥ＞によって定義されている。時間要素は、システムグローバル時間（ｓｙｓｔｅｍ  ｇｌｏｂａｌ  ｔｉｍｅ）を使用してデータ項目要素が生成されたときを指定している。時間要素によってイベントが行われた順序の把握が容易になる。イベント間の時間が短い（マウスクリックなど）、またはイベントが異なる装置で行われた（コントロール−クリックなど）場合でさえ、行２３２Ｅ〜２３２Ｇは、キーボードサービス２１６によって表されるキーボードの修飾キーの状態を捕捉する。行２３２Ｅは、タグ＜Ｃ：ＣＴＲＬＫＥＹ＞を介してコントロールキーの状態を含む。行２３２Ｆは、タグ＜Ｃ：ＡＬＴＫＥＹ＞によって定義されるＡＬＴキーの状態を含む。行２３２Ｇは、タグ＜Ｃ：ＳＨＩＦＴＫＥＹ＞を介してシフトキーの状態を含む。
【００２４】
キーボード上で作動されたキーは、タグ２３２Η＜Ｃ：ＫＥＹＳＴＲＯＫＥ＞とその対の一方の終了タグ２３２Κ＜／Ｃ：ＫＥＹＳＴＲＯＫＥ＞との間に定義されているキーストローク要素によって捕捉される。タグ２３２Ｈと２３２Ｋとの間には、行２３２Ｉでタグ＜Ｃ：ＥＸＴＥＮＤＥＤ＞によって定義されている要素が含まれており、ここには、下記の＜Ｃ：ＣΟＤＥ＞要素によって表されるコードがファンクションキーなどの拡張コードである場合、ＴＲＵＥ値が含まれる。行２３２Ｊは、キーボード上のキーの作動から生成された文字コードを含むタグ＜Ｃ：ＣΟＤＥ＞を定義している。
【００２５】
カスタマイズ可能なタグベースの文書２３２は、ゼロ個以上のマウスイベントを含む。マウスイベントの一例は、タグ２３２Ｍ＜Ｃ：ＤＡＴＡＩＴＥＭ＞とその対の一方の終了タグ２３２Ζ＜／Ｃ：ＤＡＴＡＩＴＥＭ＞との間で定義されているデータ項目要素によって捕捉される。時間要素は、行２３２Ｏでタグ＜Ｃ：ＴＩＭＥ＞によって定義されている。時間要素は、データ項目要素が生成されたときを指定する。行２３２Ｐ〜２３２Ｒは、キーボードサービス２１６によって表されるキーボード上の修飾キーの状態を捕捉するタグ＜Ｃ：ＣＴＲＬＫＥＹ＞、＜Ｃ：ＡＬＴＫＥＹ＞、および＜Ｃ：ＳＨΙＦＴＫＥＹ＞を含む。シフトキーの状態は、行２３２Ｒのタグ＜Ｃ：ＳＨＩＦＴＫＥＹ＞によって捕捉される。マウスイベントは、タグ２３２Ｓ＜Ｃ：ＭＯＵＳＥ＞とその対の一方の終了タグ２３２Ｙ＜／Ｃ：ＭＯＵＳＥ＞との間で捕捉される。マウスボタンが作動されると、行２３２Ｔのタグ＜Ｃ：ＢＵＴＴＯＮＳ＞は、ボタンコードを捕捉する。タグ２３２Ｕ＜Ｃ：ＰＯＳＩＴＩＯＮ＞とその対の一方の終了タグ２３２Ｘ＜／Ｃ：ＰＯＳＩＴＩＯＮ＞は、マウスの位置に関する情報を含む。行２３２Ｖは、マウスの横方向の位置を示すタグ＜Ｃ：Ｈ＞を記述している。行２３２Ｗは、マウスの縦方向の位置を示すタグ＜Ｃ：Ｖ＞を含む。
【００２６】
図２Ｈは、識別子（ＵＲＩなど）２１４Ｃ−１によって識別可能なポート、および片務契約２１４Ｃ−２を備える情報サービス２１４Ｃ、識別子（ＵＲＩなど）２１４Ｄ−１によって識別可能なポート、および片務契約２１４Ｄ−２を備えるデータサービス２１４Ｄから成るサービスとしてマウスサービス２１４を示している。マウスサービス２１４は、マウスへのインターフェイスを提供する。マウスを動かす、またはマウスボタンを押す、放すなど、マウスの物理的な状態が変わると、マウスイベントがマウスサービス２１４によってデータサービス２１４Ｄに挿入される。アプリケーションサービス２２６などのアプリケーションサービスは、データサービス２１４Ｄをポーリングすることによって直接マウスイベントを読み取ることはできるが、アプリケーションサービス２２６は、変更があったときはいつでもデータサービス２１４Ｄがアプリケーションサービス２２６に知らせることができるようにすることによって、こうした手動の読み取りを回避することができる。マウスモーションは、マウス内のエンコーダによって自然に生成されるどんな単位でも相対的な変化として報告されることが好ましい。有限数のマウスイベントをデータサービス２１４Ｄに挿入することができる。データサービス２１４が扱うことができるのと同じ数のイベントをデータサービス２１４Ｄがすでに含んでいる場合、新しいマウスイベントは破棄されることが好ましい。
【００２７】
図２Ｉに、要求に応じて情報サービス２１４Ｃによって生成できるカスタマイズ可能なタグベースの文書２３４を示している。情報サービス２１４Ｃは、マウスサービス２１４が表すマウスのプロパティのまとめを保持する。タグ２３４Ａ＜Ｍ：ＩＮＦＯ＞は、マウスサービス２１４の名前空間を定義する属性ＸＭＬＮＳ：Ｍを含む。属性ＸＭＬＮＳ：Ｍは、アドレス「ＨＴＴＰ：／／ＳＣＨＥＭＡＳ．ＣＯＭ／Ｍ／Ｉ」を含むように定義されている。行２３４Ｂは、マウスサービス２１４によって表されるマウス上のボタンの数を示すタグ＜Ｍ：ΒＵＴＴＯＮＣＯＵΝΤ＞を定義している。アプリケーションサービス２２６は、タグ＜Ｍ：ＢＵＴＴＯＮＣＯＵＮＴ＞を使用して、そのユーザインターフェイスを構成することができる。行２３４Ｃは、好ましくはある適当な長さ寸法当たりのシャフトエンコーダユニットによるマウスモーションイベントのスケールを示すタグ＜Ｍ：ＭＯＴＩＯＮＳＣＡＬＥ＞を定義する。適当な長さ寸法にはインチがあるが、他を使用してもよい。
【００２８】
図２Ｊは、アプリケーションサービス２２６によってまだ用い尽くされていないマウスイベントを保持するデータサービス２１４Ｄによって管理されるカスタマイズ可能なタグベースの文書２３６を示す。タグ２３６Ａ＜Ｍ：ＥＶＥＮＴＳ＞およびその対の一方の終了タグ２３６Ｊ＜／Ｍ：ＥＶＥＮＴＳ＞は、イベント要素を定義している。タグ２３６Ａと２３６Ｊとの間には、ゼロ個以上のイベント要素が含まれている。イベント要素の一例は、タグ２３６Ｂ＜Ｍ：ＥＶＥＮＴ＞とその対の一方の終了タグ＜／Ｍ：ＥＶＥＮＴ＞２３６Ｉとの間で定義されている。行２３６Ｃのタグ＜Ｍ：ＴＩＭＥ＞によって定義されている時間要素は、システムグローバル時間を使用してイベント要素が生成されたときを指定する。時間要素によって、イベントが行われた順序の把握が容易になる。行２３６Ｄは、好ましくはビットがマウスボタンの状態を指定するものと解釈される符号なし整数のタグ＜Ｍ：ＢＵＴＴＯＮＳ＞を定義している。左ボタンは１０進数字の数字４として識別されることが好ましい。中央ボタンは１０進数字の数字２として識別可能であり、右ボタンは１０進数字の数字１として識別可能である。タグ＜Ｍ：ＢＵＴＴＯＮＳ＞によって定義されるボタン要素がない場合、アプリケーションサービス２２６は、最後のマウスイベント以降、マウスボタンの状態が変わっていないと解釈することができる。タグ＜Ｍ：ＢＵＴＴＯＮＳ＞によって定義されるボタン要素が存在する場合、アプリケーションサービス２２６は、最後のマウスイベント以降、マウスボタンの状態が変わっている可能性があると解釈することができる。タグ２３６Ｅ＜Ｍ：ＭＯＴＩＯＮ＞とその対の一方の終了タグ２３６Ｈ＜／Ｍ：ＭＯＴＩＯＮ＞は、最後のマウスイベント以降、シャフトエンコーダユニットに対してマウスがどれだけ移動したかを指定する。タグ２３６Ｅによって定義されるモーション要素がない場合、アプリケーションサービス２２６は、最後のマウスイベント以降、マウスは移動していないと解釈することができる。タグ２３６Ｅと２３６Ｈとの間には、マウスの横方向の動きのデルタ変化を示すタグ２３６Ｆ＜Ｍ：ＤＨ＞がある。タグ２３６Ｇ＜Ｍ：ＤＶ＞は、マウスの縦方向の動きのデルタ変化を示す。
【００２９】
複合サービスとしてのキーボードサービス２１６は、識別子（ＵＲＩなど）２１６Ｃ−１によって識別可能なポート、および片務契約２１６Ｃ−２を備える情報サービス２１６Ｃ、およびＵＲＩ２１６Ｄ−１で識別可能なポート、および片務契約２１６Ｄ−２を備えるデータサービス２１６Ｄから成る。図２Ｋを参照されたい。キーボードサービス２１６は、標準キーボードへのインターフェイスを提供する。キーが作動されたり、修飾キーが押されたり放されたりすると、キーボードイベントがデータサービス２１６Ｄに自動的に挿入される。アプリケーションサービス２２６は、生成されたイベントをデータサービス２１６Ｄに直接要求したり、そのイベントストアの任意の変化をアプリケーションサービス２２６に自動的に知らせるようデータサービス２１６Ｄに要求したりすることができる。通常、キーの作動は、ユニコード文字として生成されることが好ましい。実際にはキーボードではないもの（ディスプレイ上の仮想キーボードなど）によってキーボードイベントを生成できるようにするには、普通のキーの作動を放したことが報告されないことが好ましい。有限数のキーボードイベントをデータサービス２１６Ｄに挿入することができる。最大数のイベントがすでに含まれている場合、データサービス２１６Ｄは、新しいキーボードイベントを破棄することが好ましい。
【００３０】
図２Ｌは、データサービス２１６Ｄのイベントストアとして働くカスタマイズ可能なタグベースの文書２３８を示す。タグ２３８Ａ＜Ｋ：ＥＶＥＮＴＳ＞およびその対の一方の終了タグ２３８Ｍ＜／Ｋ：ＥＶＥＮＴＳ＞は、キーボードイベントに関するゼロ個以上のイベント要素を含むイベント要素を定義している。タグ２３８Ａは、キーボードサービス２１６の名前空間を定義する属性ＸＭＬＮＳ：Ｋを含む。属性ＸＭＬＮＳ：Ｋは、アドレス「ＨＴＴＰ：／／ＳＣＨＥＭＡＳ．ＣＯＭ／Ｋ／Ｄ」を含む。イベント要素の例は、タグ２３８Ｂ＜Ｋ：ＥＶＥＮＴ＞とその対の一方の終了タグ２３８Ｌ＜／Ｋ：ＥＶＥＮＴ＞との間で定義されている。時間要素は、好ましくはシステムグローバル時間を使用してイベント要素が生成されたときを指定するタグ２３８Ｃ＜Ｋ：ＴＩＭＥ＞によって定義される。時間要素によって、アプリケーションサービス２２６は、イベントが行われた順序を把握することができる。タグ２３８Ｄ＜Ｋ：ＣＴＲＬＫＥＹ＞は、キーボード上のコントロールキーの状態を示す。タグ２３８Ｅ＜Ｋ：ＡＬＴＫＥＹ＞は、キーボード上のＡＬＴキーの状態を示す。ＡＬＴキーは、別のキーとともに使用して何らかの特殊な特徴または機能を生成するものであり、一般にＡＬＴという文字が付されている。タグ２３８Ｆは、別の修飾キー＜Ｋ：ＳＨＩＦＴＫＥＹ＞を定義する。この修飾キーは、例えば文字キーを押すと大文字を生成するなど、（別のキーとともに押すと）そのキーに別の意味を与えるキーボードキーを示す。タグ２３８Ｇ＜Ｋ：ＷＩＮＤＯＷＫＥＹ＞は、ウィンドウキーの状態を含む。タグ２３８Ｂと２３８Ｌとの間で定義されているイベント要素内のタグ２３８Ｄ〜２３８Ｇの外観は任意である。タグ２３８Ｄ〜２３８Ｇが存在していない場合、アプリケーションサービス２２６は、最後のキーボードイベント以降、修飾キーの状態が変わっていないと推測することができる。修飾タグ２３８Ｄ〜２３８Ｇのうちの１つが存在する場合、アプリケーションサービス２２６は、最後のキーボードイベント以降、修飾キーのうちの１つの状態が変わっている可能性があると推測することができる。タグ２３８Ｈ＜Ｋ：ＫＥＹ＞およびその対の一方の終了タグ２３８Ｋ＜／Ｋ：ＫＥＹ＞は、キーストロークの状態を定義する。タグ２３８Ｈと２３８Ｋとの間には、タグ２３８Ｉ＜Ｋ：ＳＰＥＣＩＡＬＣＯＤＥ＞がある。タグ２３８ＩがデフォルトのＦＡＬＳＥ値を含んでいる場合、タグ２３８Ｊ＜Ｋ：ＣＯＤＥ＞はユニコード文字を含む。そうでない場合、タグ２３８ＩはＴＲＵＥ値を含み、タグ２３８Ｊ＜Ｋ：ＣＯＤＥ＞は特殊キーコードを含む。ＴＡＢおよび「ＣＴＲＬ＋Ｉ」のようなものの間の相違を伝えることができるように、ＴＡＢおよびＥＮＴＥＲなどのキーは、特殊キーコードとして報告される（タグ２３８Ｉ＜Ｋ：ＳＰＥＣＩＡＬＣＯＤＥ＞をＴＲＵＥと設定）。
【００３１】
図２Ｍに、要求に応じて情報サービス２１６Ｃによって生成されるカスタマイズ可能なタグベースの文書２４０を示している。タグ２４０Ａ＜Ｋ：ＩＮＦＯ＞およびその対の一方の終了タグ２４０Ｆ＜／Ｋ：ＩＮＦＯ＞は、情報要素を定義する。情報要素は、キーボードサービス２１６の名前空間を定義する属性を含む。属性は、アドレス「ＨＴＴＰ：／／ＳＣＨＥＭＡＳ．ＣＯＭ／Ｋ／Ｉ」を含むＸＭＬＮＳ：Ｋである。タグ２４０Ａと２４０Ｆとの間には、キーボードにＦ１からＦ１２とラベル付けされたキーなどのファンクションキーがある場合、値ＴＲＵＥを有するタグ２４０Ｂ＜Ｋ：ＨＡＳＦＵＮＣＴＩＯＮＫＥＹＳ＞が含まれている。キーボードに４つの矢印キー、ＩＮＳＥＲＴキー、ＤＥＬＥＴＥキー、ＨＯＭＥキー、ＥＮＤキー、ＰＡＧＥ  ＵＰキー、ＰＡＧＥ  ＤＯＷＮキーなどのナビゲーションキーがある場合、タグ２４０Ｃ＜Ｋ：ＨＡＳＮＡＶＩＧＡＴＩＯＮＫＥＹＳ＞はＴＲＵＥに設定される。キーボードに数字キーパッドがある場合、タグ２４０Ｄ＜Ｋ：ＨＡＳＮＵＭＥＲＩＣＰＡＤＫＥＹＳ＞はＴＲＵＥに設定される。ＮＵＭＬＯＣＫキーの状態変化は、アプリケーションサービス２２６に報告されない。代わりに、ＮＵＭＬＯＣＫキーは、数字キーパッドの他のキーによって送信されたコードを変更し、キーボードサービス２１６によって完全に処理される。キーボードにウィンドウズ（登録商標）キーがある場合、タグ２４０Ｅ＜Ｋ：ＨＡＳＷＩＮＤＯＷＳ（登録商標）ＫＥＹＳ＞はＴＲＵＥに設定される。
【００３２】
図２Ｎは、互いに重なり合うウィンドウ２４２Ａおよびウィンドウ２４２Ｂを含むディスプレイ２４２を示している。各ウィンドウ２４２Ａ、２４２Ｂは、それ自体の境界を有し、異なる文書または同じ文書内の別のビューを含むことができる。画面上のカーソル２４２Ｃは、わずかに左に傾いた矢印など、マウスが移動した場所をマークする特殊インジケータである。ディスプレイ２４２は、出力装置であり、サービス２１２Ｃ〜２１２Ｈから成る複合サービスであるディスプレイサービス２１２によって表されることが好ましい。ディスプレイサービス２１２は、ディスプレイ２４２へのインターフェイスを提供する。画面上でのすべてのドローイングは、ディスプレイ２４２の矩形エリアであるウィンドウ２４２Ａ、２４２Ｂなどのウィンドウ内で行われることが好ましい。各ウィンドウは、それ自体の一意のＵＲＩの組を有していることが好ましく、それぞれは、さまざまな方法で指定することができる１組のピクセルを保持する。アプリケーションサービス２２６は、カスタマイズ可能なタグベースのメッセージをディスプレイサービス２１２に送信することによってウィンドウ２４２Ａ、２４２Ｂの属性を作成し、変更する。
【００３３】
ディスプレイサービス２１２は、ＵＲＩ２１２Ｃ−１で識別可能なポート、および片務契約２１２Ｃ−２を備える情報サービス２１２Ｃを含む。図２Ｏを参照されたい。情報サービス２１２Ｃは、カスタマイズ可能なタグベースの文書２４４を含む。図２Ｐを参照されたい。タグ２４４Ａ＜Ｄ：ＩＮＦＯ＞およびその対の一方の終了タグ２４４Ｅ＜／Ｄ：ｌＮＦＯ＞は、ディスプレイ２４２のプロパティのまとめを保持する情報要素を定義する。タグ２４４Ｂ＜Ｄ：Ｗ＞は、ディスプレイ２４２の画面の幅のピクセル単位によるサイズを含む。タグ２４４Ｃ＜Ｄ：Ｈ＞は、ディスプレイ２４２の画面の高さのピクセル単位によるサイズを記述する。タグ２４４Ｄ＜Ｄ：ＦＯＲＭＡＴ＞は、ディスプレイ２４２の画面のネイティブのピクセル形式を記述する。
【００３４】
ディスプレイサービス２１２は、識別子（ＵＲＩなど）２１２Ｄ−１によって識別可能なポート、および片務契約２１２Ｄ−２を備えるカーソル形状サービス２１２Ｄを含む。図２Ｏを参照されたい。カーソル形状サービス２１２Ｄは、画面上のカーソル２４２Ｃの現在の形状を記述する。形状は、カスタマイズ可能なタグベースの文書２４６によって記述される。図２Ｑを参照されたい。タグ２４６Ａ＜Ｄ：ＳＨＡＰＥ＞およびその対の一方の終了タグ２４６Ｇ＜／Ｄ：ＳＨＡＰＥ＞は、画面上のカーソル２４２Ｃの形状要素を定義する。タグ２４６Ｂ＜Ｄ：ＩＭＡＧＥ＞は、３２×３２の２レベルビットマップを表す（ｂａｓｅ６４表記を使用して符号化された）１２８バイトブロックの画像データを含むことが好ましい。データは、ネットワークでは、バイト０の最上位ビットがビットマップの位置（０，０）に対応し、バイト１２７の最下位ビットがビットマップの位置（３１，３１）に対応するように、バイトオーダーであることが好ましい。また、タグ２４６Ｃ＜Ｄ：ＭＡＳＫ＞は、３２×３２の２レベルビットマップを表す（ベース６４表記を使用して符号化された）１２８バイトブロックのデータを保持する。この場合もまた、タグ２４６Ｃによって定義されるマスク要素のデータは、バイト０の最上位ビットがビットマップの位置（０，０）に対応し、バイト１２７の最下位ビットがビットマップの位置（３１，３１）に対応するように、ネットワークではバイトオーダーであることが好ましい。マスク要素のビットマップは、どのピクセルが実際に画面上のカーソル２４２の一部であるかを指定する（１はピクセルが有効であることを意味する）。画面要素のビットマップは、実際のピクセルを指定する（０は黒、１は白を意味する）。画面上のカーソル２４２Ｃは、すべてのビットが０である場合にマスク要素のビットマップを指定することによって非表示にすることができる。タグ２４６Ｄ＜Ｄ：ＨＯＴＳＰＯＴ＞およびその対の一方の終了タグ２４６Η＜／Ｄ：ＨＯＴＳＰＯＴ＞は、カーソルのホットスポット（マウスの現在の位置に実際に結合される位置）とカーソルビットマップの位置（０，０）との間のオフセットを指定する。これは、カーソルビットマップ内の位置であることが好ましいが、オフセットには符号が付けられているため、ホットスポットはビットマップの外側の任意の方向にあってもよい。タグ２４６Ｄと２４６Ｈとの間には、横方向のオフセットを定義するタグ２４６Ｅ＜Ｄ：ＤＨ＞がある。タグ２４６Ｆ＜Ｄ：ＤＶ＞は、ホットスポット要素の縦方向のオフセットを定義する。
【００３５】
ディスプレイサービス２１２は、識別子（ＵＲＩなど）２１２Ｅ−１によって識別可能なポート、および片務契約２１２Ｅ−２を備えるカーソル位置サービス２１２Ｅを含む。図２Ｏを参照されたい。カスタマイズ可能なタグベースの文書２４８は、画面上のカーソル２４２Ｃの現在の、好ましくは絶対位置を記述している。図２Ｒを参照されたい。タグ２４８Ａ＜Ｄ：ＰＯＳＩＴＩＯＮ＞およびその対の一方の終了タグ２４８Ｄ＜／Ｄ：ＰＯＳΙＴＩＯＮ＞は、位置要素を定義する。タグ２４８Ａと２４８Ｄとの間には、画面上のカーソル２４２Ｃの横方向の位置を定義するタグ２４８Ｂ＜Ｄ：Ｈ＞がある。画面上のカーソル２４２Ｃの縦方向の位置は、タグ２４８Ｃ＜Ｄ：Ｖ＞で定義される。タグ２４８Ａは、属性ＸＭＬＮＳ：Ｄを含み、この属性は、アドレス「ＨＴＴＰ：／／ＳＣＨＥＭＡＳ．ＣＯＭ／Ｐ／Ｐ」を含むように定義される。
【００３６】
ディスプレイサービス２１２は、識別子（ＵＲＩなど）２１２Ｆ−１によって識別可能なポート、および片務契約２１２Ｆ−２を備える１つまたは複数のウィンドウサービス２１２Ｆを含む。図２Ｏを参照されたい。ウィンドウサービス２１２Ｆの各インスタンス化は、対応する各ウィンドウ２４２Ａ、２４２Ｂを表す。ウィンドウサービス２１２Ｆは、それが表しているウィンドウ２４２Ａ、２４２Ｂを記述するカスタマイズ可能なタグベースの文書２５０を含む。図２Ｓを参照されたい。タグ２５０Ａ＜Ｄ：ＷＩＮＤＯＷ＞およびその対の一方の終了タグ２５０Ｈ＜／Ｄ：ＷＩＮＤＯＷ＞は、ウィンドウ要素を定義する。タグ２５０Ａは、ウィンドウ要素の名前空間を示す属性ＸＭＬＮＳ：Ｄを含む。属性ＸＭＬＮＳ：Ｄは、アドレス「ＨＴＴＰ：／／ＳＣＨＥＮＡＳ．ＣＯＭ／Ｄ／Ｗ」に相当する。タグ２５０Ａと２５０Ｈとの間には、ウィンドウサービス２１２Ｆによって表されるウィンドウ２４２Ａ、２４２Ｂが表示されるディスプレイ２４２の情報サービスＵＲＩ２１２Ｃ−１を含むタグ２５０Ｂ＜Ｄ：ＵＲＩ＞がある。タグ２５０Ｃ＜Ｄ：Ｔ＞およびタグ２５０Ｄ＜Ｄ：Ｌ＞は、ディスプレイ２４２の画面上のウィンドウ２４２Ａ、２４２Ｂの左上隅の座標を記述している。ウィンドウ２４２Ａ、２４２Ｂの左上隅は、ディスプレイ２４２の画面上にあることが好ましい。タグ２５０Ｅ＜Ｄ：Ｗ＞およびタグ２５０Ｆ＜Ｄ：Ｈ＞は、ウィンドウ２４２Ａ、２４２Ｂのサイズを記述している。タグ２５０Ｅまたはタグ２５０Ｆがゼロ値を含んでいる場合、ウィンドウ２４２Ａ、２４２Ｂは、ディスプレイ２４２の画面上のピクセルを覆わず、不可視である。タグ２５０Ｇ＜Ｄ：ＤＲＯＰＴＩＭＥ＞は、ウィンドウ２４２Ａ、２４２Ｂの自動ドロップタイムを記述する。タグ２５０Ｇによって定義されたドロップタイム要素の値がゼロ以外である場合、ドロップタイム要素の値が現在のシステムグローバル時間より小さければ、ウィンドウ２４２Ａ、２４２Ｂが自動的に削除される。
【００３７】
ディスプレイサービス２１２は、識別子（ＵＲＩなど）２１２Ｇ−１によって識別可能なポート、および片務契約２１２Ｇ−２を備えるウィンドウリストサービス２１２Ｇを含む。図２Ｏを参照されたい。ウィンドウリスト２１２Ｇを使用して、ウィンドウスタック順でディスプレイ２４２の画面上に実際に表示されるウィンドウ２４２Ａ、２４２Ｂのリストを維持する。ウィンドウリストサービス２１２Ｇは、ウィンドウ２４２Ａ、２４２Ｂの提示の順を記述するカスタマイズ可能なタグベースの文書２５２を含む。図２Ｔを参照されたい。タグ２５２Ａ＜Ｄ：ＷＩＮＤＯＷＳ＞およびその対の一方の終了タグ２５２Ｄ＜／Ｄ：ＷＩＮＤＯＷＳ＞は、ウィンドウ要素を定義する。１つまたは複数のタグ＜Ｄ：ＵＲＩ＞２５２Ｂ、２５２Ｃは、ウィンドウサービスＵＲＩ２１２Ｆ−１などのウィンドウサービスのＵＲＩを含んでいる。タグ２５２Ｂ、２５２Ｃは、２つのＵＲＩ要素を定義する。ＵＲＩ要素の順序は、ディスプレイ２４２上のウィンドウスタック順を定義する。  リスト内の第１のＵＲＩ要素は、そのウィンドウがスタックの前部にあることを示し、リスト内の最後のＵＲＩ要素は、そのウィンドウがスタックの後部にあることを示す。
【００３８】
ディスプレイサービス２１２は、識別子（ＵＲＩなど）２１２Ｈ−１によって識別可能なポート、および片務契約２１２Ｈ−２を備える１つまたは複数のウィンドウ更新サービス２１２Ｈを含む。図２Ｐを参照されたい。アプリケーションサービス２２６は、適切な片務契約２１２Ｈ−２を備えるウィンドウ更新サービス２１２Ｈを作成し、ウィンドウ更新サービス２１２Ｈをウィンドウ２４２Ａ、２４２Ｂに関連付け、更新要求をウィンドウ更新サービス２１２Ｈに送信して、ウィンドウ２４２Ａ、２４２Ｂをリフレッシュする、または塗り直すことによってウィンドウ２４２Ａ、２４２Ｂに関連するピクセルを変更する。アプリケーションサービス２２６からのデータの各形式は、それ自体の片務契約２１２Ｈ−２をそれぞれ備えるそれ自体のタイプのウィンドウ更新サービス２１２Ｈを有していることが好ましい。ウィンドウ２４２Ａ、２４２Ｂに関連するピクセルを変更するのに必要なすべてのパラメータは、ウィンドウ更新サービス２１２Ｈの状態の一部であることが好ましい。
【００３９】
図３Ａ〜３Ｆは、サービスとしての装置によりＩ／Ｏイベントを処理する方法３００を示している。簡潔にするために、方法３００の次の説明は、マウスサービス２１４（図２Ｉ）、キーボードサービス２１６（図２Ｌ）、およびディスプレイサービス２１２（図２Ｐ）に関連して示した様々な要素を参照する。方法３００は、開始ブロックから、継続端子（ｃｏｎｔｉｎｕａｔｉｏｎ  ｔｅｒｍｉｎａｌ）（「端子Ａ」）と終了端子（「端子Ｂ」）との間で定義されている１組の方法ステップ３０２に進む。１組の方法ステップ３０２は、キーボードサービスがキーボードイベントを処理するプロセス（図３Ｂ参照）を記述している。
【００４０】
方法３００は、端子Ａ（図３Ｂ）から決定ブロック３０８に進み、キーボード上のキーが作動されたかどうかを決定するための検査が行われる。回答がＮＯである場合、方法３００は、決定ブロック３０８に戻り、上述した処理ステップを繰り返す。そうではなく、決定ブロック３０８に対する回答がＹＥＳである場合、方法３００はブロック３１０に進み、キーボードイベントがデータサービス２１６Ｄに自動的に挿入される。ブロック３１２で、キーボードイベントの挿入がアプリケーションサービス２２６に通知される。アプリケーションサービス２２６は、時間順に各キーボードイベントを処理する。ブロック３１４を参照されたい。方法３００はブロック３１６に進み、アプリケーションサービス２２６は、処理されたキーボードイベントを削除する旨のメッセージをデータサービス２１６Ｄに送信する。ブロック３１８で、キーボードサービス２１６のデータサービス２１６Ｄは、処理されたキーボードイベントを削除する。次いで方法３００は終了端子Ｂに入る。
【００４１】
方法３００は、終了端子Ｂ（図３Ａ）から、継続端子（「端子Ｃ」）と終了端子（「端子Ｄ」）との間で定義されている１組の方法ステップ３０４に進む。１組の方法ステップ３０４は、マウスサービス２１４がマウスイベントを処理するプロセス（図３Ｃ参照）を記述している。
【００４２】
方法３００は、端子Ｃ（図３Ｃ）から決定ブロック３２０に進み、マウスが作動されたかどうかを決定するための検査が行われる。決定ブロック３２０での検査に対する回答がＮＯである場合、方法３００は決定ブロック３２０に戻り、上述した処理ステップが繰り返される。そうではなく、決定ブロック３２０での検査に対する回答がＹＥＳである場合、方法３００はブロック３２２に進み、マウスイベントがデータサービス２１４Ｄに自動的に挿入される。ブロック３２４で、マウスイベントの挿入がアプリケーションサービス２２６に通知される。アプリケーションサービス２２６は、時間順に各マウスイベントを処理する。ブロック３２６を参照されたい。方法３００はブロック３２８に進み、アプリケーションサービス３２６は、処理されたマウスイベントを削除する旨のメッセージをデータサービス２１４Ｄに送信する。ブロック３３０で、マウスサービス２１４のデータサービス２１４Ｄは、処理されたマウスイベントを削除する。方法３００は続いて終了端子Ｄに進む。
【００４３】
方法３００は、終了端子Ｄ（図３Ａ）から、継続端子（「端子Ｅ」）と終了端子（「端子Ｆ」）との間で定義されている１組の方法ステップ３０６に進む。１組の方法ステップ３０６は、ディスプレイサービス２１２がディスプレイイベントを処理するプロセス（図３Ｄ〜３Ｆ参照）を記述している。
【００４４】
方法３００は、端子Ｅ（図３Ｄ）から決定ブロック３３２に進み、ウィンドウを作成すべきかどうかを決定するための検査が行われる。決定ブロック３３２での検査に対する回答がＹＥＳである場合、方法３００はブロック３３４に進み、ウィンドウサービス２１２Ｆを識別するＵＲＩ２１２Ｆ−１を有するウィンドウサービス２１２Ｆが作成される。ブロック３３６で、作成されたウィンドウサービス２１２Ｆは、アプリケーションサービス２２６によってウィンドウリストサービス２１２Ｇに挿入され、それによってディスプレイ２４２の画面上でのウィンドウ２４２Ａ、２４２Ｂのスタック順が制御される。決定ブロック３３２での検査に対する回答がＮＯである場合、方法３００は別の決定ブロック３３８に進む。方法３００は、ブロック３３６からも決定ブロック３３８に進む。決定ブロック３３８で、ウィンドウ２４２Ａ、２４２Ｂを新しいピクセルで更新する必要があるかどうかを決定するための検査が行われる。回答がＹＥＳである場合、アプリケーションサービス２２６は、所望の更新をウィンドウ更新サービス２１２Ｈに送信し、ウィンドウ更新サービス２１２Ｈは、対応するウィンドウ２４２Ａ、２４２Ｂを新しいピクセルで塗り直す。ブロック３４０を参照されたい。決定ブロック３３８での検査に対する回答がＮＯである場合、方法は別の継続端子（「端子Ｅ１」）に進む。
【００４５】
方法３００は、端子Ｅ１（図３Ｅ）から決定ブロック３４２に進み、新しいカーソル形状があるかどうかを決定するための検査が行われる。回答がＹＥＳである場合、カーソル形状サービス２１２Ｄは新しい画像で更新される。ブロック３４６で、カーソル形状サービス２１２Ｄは、新しいマスクで更新される。方法３００は、ブロック３４６から別の決定ブロック３４８に進む。決定ブロック３４２に対する回答がＮＯである場合も、方法３００は決定ブロック３４８に進む。決定ブロック３４８で、マウスイベントがあったかどうかを決定するための検査が行われる。決定ブロック３４８での検査に対する回答がＹＥＳである場合、画面上のカーソル２４２Ｃの位置が更新される。ブロック３５０を参照されたい。決定ブロック３４８での検査に対する回答がＮＯである場合、方法は別の継続端子（「端子Ｆ」）に進む。方法３００は、ブロック３５０からも終了端子Ｆに進む。方法３００は、端子Ｆ（図３Ａ）から実行を終了する。
【００４６】
本発明の好ましい実施形態を例示し、説明してきたが、本発明の意図および範囲から逸脱することなく様々な変更をそこに加えることができることを理解されたい。
【図面の簡単な説明】
【００４７】
【図１】従来のコンピューティングシステム、および入力／出力装置、デバイスドライバ、およびオペレーティングシステムの間の関係を示すブロック図である。
【図２Ａ】サービスの例を示すブロック図である。
【図２Ｂ】図２Ａに示したサービスの片務契約の例を示す構造図である。
【図２Ｃ】図２Ａに示したサービスの片務契約の例を示す構造図である。
【図２Ｄ】分散型オペレーティングシステムにおいて装置をサービスとして示すブロック図である。
【図２Ｅ】端末を表す複合サービスの例を示すブロック図である。
【図２Ｆ】図２Ｅに示した複合サービスのカスタマイズ可能なタグベースの文書の例を示す構造図である。
【図２Ｇ】図２Ｅに示した複合サービスのカスタマイズ可能なタグベースの文書の例を示す構造図である。
【図２Ｈ】マウスサービスの例を示すブロック図である。
【図２Ｉ】図２Ｈに示すマウスサービスに関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｊ】図２Ｈに示すマウスサービスに関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｋ】キーボードサービスの例を示すブロック図である。
【図２Ｌ】図２Ｋに示すキーボードサービスに関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｍ】図２Ｋに示すキーボードサービスに関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｎ】ウィンドウがディスプレイ上に描かれた状態のディスプレイの例を示すブロック図である。
【図２Ｏ】ディスプレイサービスの例を示すブロック図である。
【図２Ｐ】図２Ｏに示すディスプレイサービスの例に関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｑ】図２Ｏに示すディスプレイサービスの例に関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｒ】図２Ｏに示すディスプレイサービスの例に関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｓ】図２Ｏに示すディスプレイサービスの例に関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図２Ｔ】図２Ｏに示すディスプレイサービスの例に関連するカスタマイズ可能なタグベースの文書を示す構造図である。
【図３Ａ】分散型オペレーティングシステムにおいてサービスとしての装置によりＩ／Ｏイベントを処理する方法を示すプロセス図である。
【図３Ｂ】分散型オペレーティングシステムにおいてサービスとしての装置によりＩ／Ｏイベントを処理する方法を示すプロセス図である。
【図３Ｃ】分散型オペレーティングシステムにおいてサービスとしての装置によりＩ／Ｏイベントを処理する方法を示すプロセス図である。
【図３Ｄ】分散型オペレーティングシステムにおいてサービスとしての装置によりＩ／Ｏイベントを処理する方法を示すプロセス図である。
【図３Ｅ】分散型オペレーティングシステムにおいてサービスとしての装置によりＩ／Ｏイベントを処理する方法を示すプロセス図である。
【符号の説明】
【００４８】
２１０Ａ，２１０Ｂ  サービス
２１０Ａ−１，２１０Ｂ−１  ユニフォームリソース識別子（ＵＲＩ）
２１０Ａ−２，２１０Ｂ−２  片務契約
２１２  ディスプレイサービス
２１２Ｂ  識別子（ＵＲＩ）
２１２Ａ  片務契約
２１４  マウスサービス
２１４Ｂ  識別子（ＵＲＩ）
２１４Ａ  片務契約
２１６  キーボードサービス
２１６Ｂ  識別子（ＵＲＩ）
２１６Ａ  片務契約
２１８  ＰＤＡサービス２１８
２１８Ｂ  識別子（ＵＲＩ）
２１８Ａ  片務契約
２２０  ラウドスピーカサービス
２２０Ｂ  識別子（ＵＲＩ）
２２０Ａ  片務契約
２２２  ネットワークデバイスドライバ
２２４  分散型オペレーティングシステム
２２６  アプリケーション
２２６Ｂ  識別子（ＵＲＩ）
２２６Ａ  片務契約
【図１】
0004716715.tif 000002
【図２Ａ】
0004716715.tif 000003
【図２Ｂ】
0004716715.tif 000004
【図２Ｃ】
0004716715.tif 000005
【図２Ｄ】
0004716715.tif 000006
【図２Ｅ】
0004716715.tif 000007
【図２Ｆ】
0004716715.tif 000008
【図２Ｇ】
0004716715.tif 000009
【図２Ｈ】
0004716715.tif 000010
【図２Ｉ】
0004716715.tif 000011
【図２Ｊ】
0004716715.tif 000012
【図２Ｋ】
0004716715.tif 000013
【図２Ｌ】
0004716715.tif 000014
【図２Ｍ】
0004716715.tif 000015
【図２Ｎ】
0004716715.tif 000016
【図２Ｏ】
0004716715.tif 000017
【図２Ｐ】
0004716715.tif 000018
【図２Ｑ】
0004716715.tif 000019
【図２Ｒ】
0004716715.tif 000020
【図２Ｓ】
0004716715.tif 000021
【図２Ｔ】
0004716715.tif 000022
【図３Ａ】
0004716715.tif 000023
【図３Ｂ】
0004716715.tif 000024
【図３Ｃ】
0004716715.tif 000025
【図３Ｄ】
0004716715.tif 000026
【図３Ｅ】
0004716715.tif 000027