(57)【要約】【課題】カーネルモード、およびハードウエアアダプタに関するユーザーモードプロセシングの両方に共通の一回の実施操作を可能とする方法、システム、およびコンピュータプログラム製品を提供すること。【解決手段】与えられたプロセスに対して、共通インターフェイスへのコールは、カーネルモードプロセスに対してはカーネルモード実施へ、およびユーザーモードプロセスに対してはユーザーモード実施へマッピングされる。共通の操作は、カーネルモードへ変更すること無しに、ハードウエアアダプタへ情報の送受信に対するような、ユーザーモードプロセスの直接アクセスを提供しうる。実施するためのハードウエアアダプタに対してセキュリティパラメータを指定すること、およびハードウエアアダプタを通して、通信の開始と終了のような、カーネルモードプロセシングに特有な操作に対するカーネルモード実施は、また供給されうる。【選択図】　　　　図３
2004054934.tif 000002
【特許請求の範囲】
【請求項１】
（１）比較的あまり制限されないカーネルモード、および（２）比較的制限されたユーザーモード、のうちの少なくとも１つで動作をすることができる１つ、または２つ以上のプロセス、および前記１つ、または２つ以上のプロセスが通信リンク上で少なくとも１つのハードウエアデバイスと通信することを可能にするハードウエアアダプタを備えるコンピュータシステムに対して、前記ハードウエアアダプタに関係する、カーネルモード処理、およびユーザーモード処理の両方に共通である１つ、または２つ以上の動作の一回の実施を可能にする方法であって、
カーネルモード処理、およびユーザーモード処理に共通である少なくとも１つの動作に対して、共通のインターフェイス名を規定する行為と、
前記名前に対応する前記少なくとも１つの動作のカーネルモード実施を提供する行為と、
前記名前に対応する前記少なくとも１つの動作のユーザーモード実施を提供する行為と、
与えられたプロセスに対して、（１）前記与えられたプロセスがカーネルモードプロセスである場合は、前記カーネルモード実施へ、また（２）前記与えられたプロセスがユーザーモードプロセスである場合は、前記ユーザーモード実施へ、共通のインターフェイスコールのうちの１つ、または２つ以上をマッピングする行為と、を備えることを特徴とする方法。
【請求項２】
前記少なくとも１つの動作は、カーネルモードへ切り替えること無しに、前記ハードウエアアダプタへユーザーモードプロセスの直接のアクセスを提供する通信動作に対応すること特徴とする請求項１記載の方法。
【請求項３】
カーネルモード処理に固有である１つ、または２つ以上の動作のカーネルモード実施を提供する行為をさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
カーネルモード処理に固有である前記１つ、または２つ以上の動作は、前記ハードウエアアダプタを通して、通信の開始および終了に対する通信動作のうちの１つ、または２つ以上に対応し、カーネルモード処理、およびユーザーモード処理に共通である前記少なくとも１つの動作に対する前記共通のインターフェイスは、前記ハードウエアアダプタを通して、情報の送受信に対する通信動作に対応することを特徴とする請求項３記載の方法。
【請求項５】
カーネルモード処理に固有である前記１つ、または２つ以上の動作のうち少なくとも１つは、実施するための前記ハードウエアアダプタに対してセキュリティパラメータを示すことを特徴とする請求項３記載の方法。
【請求項６】
前記マッピングは、実行中で起こることを特徴とする請求項１記載の方法。
【請求項７】
前記マッピングは、静的であることを特徴とする請求項１記載の方法。
【請求項８】
前記ハードウエアアダプタは、ＩｎｆｉｎｉＢａｎｄホストチャネルアダプタであることを特徴とする請求項１記載の方法。
【請求項９】
（１）比較的あまり制限されないカーネルモード、および（２）比較的制限されたユーザーモード、のうちの少なくとも１つで動作をすることができる１つ、または２つ以上のプロセス、および前記１つ、または２つ以上のプロセスが通信リンク上で少なくとも１つのハードウエアデバイスと通信することを可能にするハードウエアアダプタとを備えるコンピュータシステムに対して、前記ハードウエアアダプタに関連する、カーネルモード処理、およびユーザーモード処理の両方に共通である１つ、または２つ以上の動作の一回の方法の実施を可能にするコンピュータ実行可能命令を保持するコンピュータ可読媒体を備えるコンピュータプログラム製品であって、前記方法は、
カーネルモード処理、およびユーザーモード処理に共通である少なくとも１つの動作に対して、共通のインターフェイス名を規定する行為と、
前記名前に対応する前記少なくとも１つの動作のカーネルモード実施を提供する行為と、
前記名前に対応する前記少なくとも１つの動作のユーザーモード実施を提供する行為と、
与えられたプロセスに対して、（１）前記与えられたプロセスがカーネルモードプロセスである場合は、前記カーネルモード実施へ、また（２）前記与えられたプロセスがユーザーモードプロセスである場合は、前記ユーザーモード実施へ、共通のインターフェイスコールのうちの１つ、または２つ以上をマッピングする行為と、を備えることを特徴とする方法。
【請求項１０】
前記少なくとも１つの動作は、カーネルモードへ変更すること無しに、前記ハードウエアアダプタへユーザーモードプロセスの直接のアクセスを提供する通信動作に対応すること特徴とする請求項９記載のコンピュータプログラム製品
【請求項１１】
カーネルモード処理に固有である１つ、または２つ以上の動作のカーネルモード実施を提供するステップをさらに備えることを特徴とする請求項１０記載のコンピュータプログラム製品。
【請求項１２】
カーネルモード処理に固有である前記１つ、または２つ以上の動作は、前記ハードウエアを通して、通信の開始および終了に対する通信動作のうちの１つ、または２つ以上と対応し、および、カーネルモード処理、およびユーザーモード処理に共通である少なくとも１つの動作に対する前記共通のインターフェイスは、前記ハードウエアアダプタを通して、情報の送受信に対する通信動作に対応することを特徴とする請求項１１記載のコンピュータプログラム製品。
【請求項１３】
カーネルモード処理に固有である前記１つ、または２つ以上の動作のうち少なくとも１つは、実施するための前記ハードウエアアダプタに対してセキュリティパラメータを示すことを特徴とする請求項１１記載のコンピュータプログラム製品。
【請求項１４】
前記マッピングは、実行中で起こることを特徴とする請求項９記載のコンピュータプログラム製品。
【請求項１５】
前記マッピングは、静的であることを特徴とする請求項９記載のコンピュータプログラム製品。
【請求項１６】
前記ハードウエアアダプタは、ＩｎｆｉｎｉＢａｎｄホストチャネルアダプタであることを特徴とする請求項９記載のコンピュータプログラム製品。
【請求項１７】
ハードウエア通信アダプタに関して、カーネルモード処理、およびユーザーモード処理の両方に共通である１つ、または２つ以上の動作に関する一回の実行を可能にするコンピュータプログラム製品であって、前記コンピュータプログラム製品は、コンピュータ実行可能な命令を保持しているコンピュータ可読媒体を備え、
カーネルモード処理、およびユーザーモード処理に共通である前記１つ、または２つ以上の動作に対して、共通の名前およびパラメータリストを識別するインターフェイスモジュールと、
カーネルモードでの実行に対する前記１つ、または２つ以上の動作を実施するカーネルモード実施モジュールと、
ユーザーモードでの実行に対する前記１つ、または２つ以上の動作を実施するユーザーモード実施モジュールと、
コーリングプロセスがカーネルモードプロセスである場合は、カーネルモード実施モジュールを呼び出し、および、前記コーリングプロセスがユーザーモードプロセスである場合は、ユーザーモード実施モジュールを呼び出すディスパッチモジュールと、を備えることを特徴とするコンピュータプログラム製品。
【請求項１８】
前記ユーザーモード実施モジュールは、カーネルモードへ切り替えすること無しで、前記ハードウエア通信アダプタに直接のアクセスを提供することを特徴とする請求項１７記載のコンピュータプログラム製品。
【請求項１９】
カーネルプロセシングに固有である１つ、または２つ以上の動作を実施する、カーネルモードのみの実施モジュールをさらに備えることを特徴とする請求項１７記載のコンピュータプログラム製品。
【請求項２０】
カーネルモード処理に固有な前記１つ、または２つ以上の動作のうち少なくとも１つは、実施するための前記ハードウエア通信アダプタに対してセキュリティパラメータを提供することを特徴とする請求項１９記載のコンピュータプログラム製品。
【請求項２１】
カーネルモード処理に固有である前記１つ、または２つ以上の動作は、１つ、または２つ以上の特権動作を備え、および、カーネルモード処理、およびユーザーモード処理に共通である前記１つ、または２つ以上の動作は、非特権動作のうちの１つ、または２つ以上に対応することを特徴とする請求項１９記載のコンピュータプログラム製品。
【請求項２２】
前記特権動作のうちの１つ、または２つ以上は、前記ハードウエア通信アダプタを通して、通信の開始および終了に使用され、および、前記非特権動作のうちの１つ、または２つ以上は、前記ハードウエア通信アダプタを通して、情報の送受信に使用されることを特徴とする請求項２１記載のコンピュータプログラム製品。
【請求項２３】
前記ディスパッチモジュールは、前記カーネルモード実施モジュール、および前記ユーザーモード実施モジュールに静的にリンクされることを特徴とする請求項１７記載のコンピュータプログラム製品。
【請求項２４】
前記ディスパッチモジュールは、実行中で、カーネルモード実施モジュール、およびユーザーモード実施モジュールのどちらかで、動的に呼び出すことを特徴とする請求項１７記載のコンピュータプログラム製品。
【請求項２５】
前記ハードウエア通信アダプタに対して総括的な機能性を実施する、抽象ハードウエア通信アダプタモジュールをさらに備えることを特徴とする請求項１７記載のコンピュータプログラム製品。
【請求項２６】
前記カーネルモード実施モジュールは、前記抽象ハードウエア通信アダプタモジュールの前記総括的な機能性に対して、ハードウエア通信アダプタ固有の動作を実施する、ミニポートモジュールの一部であることを特徴とする請求項２５記載のコンピュータプログラム製品。
【請求項２７】
前記ハードウエア通信アダプタは、ＩｎｆｉｎｉＢａｎｄホストチャネルアダプタであることを特徴とする請求項１７記載のコンピュータプログラム製品。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータハードウエアに対するドライバソフトウエアの分野に関するものである。詳しくは、本発明は、ハードウエアアダプタに関する、カーネルモード処理、およびユーザーモード処理の両方に共通である、１つ、またはそれ以上の動作に関する一回の実施を可能とする方法、システム、およびコンピュータプログラム製品に関するものである。
【０００２】
【従来の技術】
コンピュータハードウエアのパフォーマンスが増加すると共に、コンピュータソフトウエアの動作は、全体のシステムパフォーマンスにおいて、より重要な因子になっている。ハードウエアデバイスと通信するハードウエアアダプタと相互に作用している効率的なコンピュータソフトウエアは、交換される傾向にある情報の頻度と量が与えられ、特に重要である。一般的なある通信障害は、種々のソフトウエア層、およびアプリケーションとハードウエアとの間でしばしば起こるプロセスモード間の推移に対応しているものに関するものである。
【０００３】
多くのオペレーションシステムは、少なくとも２つのプロセスモードを提供する。それは、（１）比較的信頼されず、それゆえに制限されたユーザーモード、および（２）比較的信頼され、それゆえにあまり制限されないカーネルモード、である。一般的に、アプリケーションプロセスがユーザーモード内で作動するのは、それらプロセスが分離し、およびお互いのリソースに干渉できないからである。システムコールを行うとき、例外や失敗が発生するとき、割り込みが起こるとき等に、ユーザープロセスは、カーネルモードに切り替えする。カーネルモードで作動するプロセスは、特権が与えられ、および（全ての利用可能なメモリのような）全てのコンピュータリソースにアクセスを有し、ユーザーモードプロセスに適用するような制限は無い。オペレーティングシステムのカーネルは、コンピュータリソースへの門番として作動するので、リソースへの直接のアクセスを、一般的にカーネルモードプロセスに制限する。ユーザーモードプロセスとカーネルモードプロセスとの間の区別を、また、コンピュータハードウエアによって支援しても良い。例えば、多くのマイクロプロセッサは、ユーザーモードプロセスおよびカーネルモードプロセス間の区別を支援するためのプロセシングモードを有する。
【０００４】
あるリソースへのアクセスをカーネルモードプロセスに制限しているので、ユーザーモードプロセスは、アクセスを得るためにカーネルモードプロセスへ推移、または切り替えしなければならない。アクセスに続いて、そのプロセスは、さらなる実行のためにユーザーモードへ戻る。しかしながら、プロセスモードを切り替えすることにより、パフォーマンスに関して重大な影響を与えることができる。それゆえに、プロセスモードを変更することに関係したパフォーマンス低下を軽減するための努力において、幾つかのハードウエアアダプタは、あるパラメータ内のセキュリティ測定の実施を支援し、そのためユーザーモードアプリケーションは、カーネルモードへの推移をすること無しに、ハードウエアに直接アクセスしうる。したがって、幾つかのソフトウエアドライバは、ある動作に対してカーネルモードを迂回する。
【０００５】
ユーザーモードプロセスがハードウエアリソースへ直接アクセス可能であるにも関わらず、コンピュータシステムの全体のセキュリティは、示されたセキュリティパラメータ内でアクセスを制限することによって、要領のままである。ハードウエアアダプタに対して、これらのセキュリティパラメータを、カーネルモードプロセスを使用するように設定する。本質的に、セキュリティパラメータは、特定のプロセスによりある動作のための直接のアクセスが可能になる、ということを示す。ハードウエアアダプタは、他のプロセスによる同様なアクセス試行を拒絶し、および、そのセキュリティパラメータによって認められた許可の範囲を超えているプロセスによるアクセス試行を拒絶するであろう。
【０００６】
【発明が解決しようとする課題】
ある動作を、ユーザーモードとカーネルモードの両方に対して実施しても良い。しかしながら、各モードにおいてその同じ動作を実施することは、ソフトウエア開発プロセスにおいて、非効率性をもたらす。例えば、メモリの割り付けを考えると良い。各ケースにおいてメモリ領域が割り付けられるが、カーネルモードにおけるメモリ割り付けは、ユーザーモードでのメモリ割り付けよりも異なった条件を持っている。例えば、カーネルモードメモリ割り付けは、ハードウエア相互作用を促進するためのある配列状態を保証しうる一方、その配列状態は、ユーザーモードメモリ割り付けに対して不適切でありうる。しかしながら、ハードウエアドライバの観点から、必要な全てはメモリの領域である。結果として、ハードウエアアダプタにアクセスするための一回の動作は、一般的に別個のユーザーモードおよびカーネルモード実施を有する。従って、ハードウエアアダプタに関する、カーネルモード処理、およびユーザーモード処理の両方に共通である一回の実施の動作を可能にする方法、システム、およびコンピュータプログラム製品が望まれている。
【０００７】
【課題を解決するための手段】
本発明は、ハードウエアアダプタに関する、カーネルモード処理、およびユーザーモード処理の両方に共通である一回の実施動作を可能にする方法、システム、およびプログラム製品に関するものである。ユーザーモード処理、およびカーネルモード処理に共通である少なくとも１つの動作に対して、共通のインターフェイスを定義する。少なくとも１つの動作のカーネルモード、およびユーザーモード実施に対応するものを提供する。与えられたプロセスに対して、インターフェイスへのコールをカーネルモード実施へマッピングし、それは、その与えられたプロセスがカーネルモードプロセスである場合、および、その与えられたプロセスがユーザーモードプロセスであるならばユーザーモード実施である場合である。そのマッピングを実行中で実施しても良く、または、静的であっても良い。
【０００８】
共通の動作は、カーネルモードへ切り替えすること無しで、ハードウエアアダプタへユーザーモードプロセスの直接のアクセスを提供しても良い。カーネルモードプロセスに固有である１つ、または２つ以上の動作に対するカーネルモード実施を、また、提供しても良い。例えば、ハードウエアアダプタを通しての通信の開始および終了に対する動作はカーネルモード処理に固有でありうる一方、そのアダプタを通しての情報の送受信に対する動作は、ユーザーモード処理、およびカーネルモード処理の両方に共通でありうる。詳しくは、カーネルプロセシングに固有な動作のうちの１つは、実施するためのハードウエアアダプタに対するセキュリティパラメータを識別しても良い。
【０００９】
本発明の追加的な特徴と利点を、後に続く記述で説明し、および、一部はその記述から明らかになるであろうし、または、本発明の実施によって、明らかになりうる。本発明の特徴および利点を、特に特許請求の範囲で示される手段および組合せによって、認識し、および得ても良い。本発明に関するこれらの特徴、および他の特徴は、次に続く記述と特許請求の範囲からより十分に明らかになりうるであろうし、また、以下に説明するように、本発明の実施によって明らかになりうる。
【００１０】
【発明の実施の形態】
上記のおよび他の利点、ならびに本発明の特徴を得ることができる方法を記述するために、上記で簡潔に記述された本発明のより特定の記述を、添付した図面に図示されている詳細な実施形態を参照することによって与えるだろう。これらの図面は、本発明の一般的な実施形態のみ描写し、それゆえにその範囲を限定するようには考えられない、という理解のもと、本発明を、添付している図面の使用を通して、追加的な特性、および詳細で記述し、また説明するであろう。
【００１１】
本発明は、ハードウエアアダプタに関する、カーネルモード処理、およびユーザーモード処理の両方に共通である動作に関する一回の実施を可能とする方法、システム、コンピュータ製品に関している。その動作に関するカーネルモード、およびユーザーモード実施への共通のインターフェイスを提供する。コーリングプロセスがユーザーモードプロセスである場合、そのコールをユーザーモード実施へマッピングし、および、コーリングプロセスがカーネルモードプロセスである場合、そのコールをカーネルモード実施へマッピングする。本発明の幾つかの実施形態は、図４に関して以下でより詳細に論じられる種々のコンピュータハードウエアを含む、特別な目的のコンピュータのうちの１つ、または２つ以上、および／または、汎用コンピュータのうちの１つ、または２つ以上を備えていても良い。
【００１２】
図１は、本発明に従って、共通のユーザーモード、およびカーネルモード動作の一回の実施を可能にするハードウエアドライバモデルの高水準ブロック図を示す。アプリケーション１１０は、ユーザーモードインターフェイス１２０を通して、アダプタ１５０にアクセスする。ある動作をカーネルモード実施１４０へマッピングする一方で、他のオペレーションをユーザーモード実施１３０へマッピングする。ユーザーモード実施１３０は、カーネルモードへ切り替えすること無しで、アダプタ１５０へ直接のアクセスを提供する、ということに注意すべきである。従って、アプリケーション１１０は、ユーザーモード実施１３０を通して、アダプタ１５０へアクセスすることができ、カーネルモード実施１４０に対して必要であろう時間より非常に短い時間にする。
【００１３】
ユーザーモード実施１３０、およびカーネルモード実施１４０の両方で実行される動作に対応するものを持つことは、少なくとも２つの理由で望ましい。第１に、カーネルモード実施１４０は、アダプタ１５０に対して可能な全ての動作を含むため、ユーザーモードインターフェイス１２０を持たないアプリケーションがアダプタ１５０と相互に作用できるようにする。カーネルモードからユーザーモードへの変更（および再び戻ること）のオーバーヘッドを与えられると、ユーザーモード実施１３０（ユーザーモードで実施されることができる動作に対する）を呼び出しているカーネルモード実施１４０は、一般的に結果として最適なパフォーマンス以下になるであろう。特に、情報の送受信のような、頻繁に起こる傾向にある動作をユーザーモード実施１３０が実施するときからそうなる。（カーネルモード実施１４０に達するためのアプリケーションに対して、ユーザーモードからカーネルモードへのある変更はすでに行い、他の変更はカーネルモードからユーザーモードへの戻ることに続くであろう、ということにまた注意すべきである。）
【００１４】
第２に、カーネルモード実施１４０は、一般に、カーネルモードに固有である動作を含む。しばしばこれらの動作によって、アダプタ１５０からの情報の送受信に対するより基礎的な動作が使用される。しかしながら、上記したように、情報の送受信のような頻繁に起こる動作は、ユーザーモードからカーネルモードへプロセス推移を回避することのパフォーマンス利点を達成するためにユーザーモード実施１３０に含まれるべき有望な候補である。上述した状況に似ているが、ユーザーモード実施１３０にアクセスすることにおいてカーネルモードからユーザーモードへ切り替えすること、およびカーネルモードへ戻ることのオーバーヘッドは、結果的に最適なパフォーマンスにならない。
【００１５】
ユーザーモード処理、およびカーネルモード処理における違いにより、与えられた動作のユーザーモード実施は、カーネルモード実施と異なる傾向にある。伝統的に、ある動作の各ユーザーモード実施１３０は、その動作のカーネルモード実施１４０に対応するものと同じ機能性を提供するが、ユーザーモード処理に適している。しかしながら、本発明に従って、および図２Ａ〜２Ｃに図示されたハードウエアドライバモデルの例に関してより詳細に記述されるように、ユーザーモード実施１３０およびカーネルモード実施１４０は、共通のインターフェイスを共有している。（図１において、この共通のインターフェイスは、ユーザーモード実施１３０およびカーネルモード実施１４０の一部であり、そして別々に示されていない。）従って、同じソースコードを、カーネルモード通信動作およびユーザーモード通信動作に対して書いても良い。同じソースコードの使用は（例えば、共通のソースから得られる静的ライブラリ）、書かれ、およびテストされる必要があるプログラムコードがより少ないので、開発時間、テスト時間、プログラミングエラーを減少させる重要な利点がある。その共通のインターフェイスは、どのようにしてソフトウエアが設計され、その共通のインターフェイスを通して利用できるルーチンに基づかれるべきか、という意義のあるガイダンスを持った開発者をまた提供しうる。
【００１６】
もちろん、幾つかの動作は、カーネルモード実施１４０に固有である。例えば、カーネルは、セキュリティを実施することに責任を持っているので、アダプタ１５０へのアクセスの開始および終了は、カーネルモード実施１４０を通して起こる。一度、カーネルモード実施１４０（アプリケーション１１０の指示の下）が、適切なセキュリティパラメータをアダプタ１５０へ提供すると、アダプタ１５０は、アクセスプロセスがカーネルモード実施１４０を通して適切に認定されていることを検証するようなときに、それがアクセスされるとき、対応するセキュリティチェックを実行する。
【００１７】
図２Ａ〜２Ｃは、本発明に従って、共通のユーザーモード、およびカーネルモード動作の一回の実施を可能にするハードウエアドライバモデルの１例を図示している。ＩｎｆｉｎｉＢａｎｄアプリケーション２１０Ａは、ユーザーモードライブラリ２３０Ａを通して、およびカーネルモードミニポートドライバ２４０Ａを通して、ホストチャネルアダプタ（“ＨＣＡアダプタ”）２８０Ａにアクセスする。ユーザーモードライブラリ２３０Ａを通しての（カーネルモードミニポートドライバ２４０Ａと対照的に）ＨＣＡアダプタ２８０Ａへのあるアクセスは、実際的である。それは、ＩｎｆｉｎｉＢａｎｄが、あるセキュリティチェック、およびそのアダプタへの他の処理をオフロードするハードウエアアーキテクチャの１例を表しているからである。アクセスの開始および終了を、適切なセキュリティレベルを想定するためのカーネルモード動作を通して、制御する。しかしながら、開始後、データの送受信に関するような頻繁な通信動作に対するセキュリティを、非常に速いユーザーモードアクセスを可能にするＨＣＡハードウエアで実施する。例えば、図２Ａに関して以下に詳細が記述されているように、カーネルモードミニポートドライバ２４０Ａは、通信キューの作成および破壊に対して責任を持っている一方、ユーザーモードライブラリ２３０Ａは、ＨＣＡアダプタ２８０Ａでの通信キューへユーザーモードデータの転送を可能にする。
【００１８】
ＩｎｆｉｎｉＢａｎｄアプリケーション２１０Ａは、ユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ２２０Ａを呼び出し、そのユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ２２０Ａは、レジストリデータベースに保持され示された配置情報によってユーザーモードライブラリ２３０Ａについて知っている。ある意味、ユーザーモードライブラリ２３０Ａを、ユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ２２０Ａの拡張として見なしても良い。ユーザーモードライブラリ２３０Ａは、それが支援するルーチン用の良く知られたアプリケーションプログラムインターフェイス（“ＡＰＩ”）（ディスパッチテーブルの形式で）を書き出す。１つの実施形態において、ユーザーモードライブラリ２３０Ａを、ダイナミックリンクライブラリ（“ＤＬＬ”）として実施する。必ずしも要求されないが、ＩｎｆｉｎｉＢａｎｄの多くの利点は、ユーザーモードライブラリ２３０Ａによって提供されるカーネルバイパスＩＯの特徴を通して、実現されることである。
【００１９】
ＩｎｆｉｎｉＢａｎｄライブラリ２２０Ａは、抽象化された一般のＨＣＡデバイスインターフェイスを表す。ユーザーモードライブラリ２３０Ａのベンダ固有ライブラリ２３２Ａは、ＩｎｆｉｎｉＢａｎｄライブラリ２２０Ａの抽象化をＨＣＡアダプタ２８０Ａのハードウエア固有の動作へマッピングする。その同じベンダ固有ライブラリは、以下でより詳細に記述するように、ミニポートドライバ２４０Ａに関するベンダ固有ライブラリ２４２Ａとして現れる。従って、ベンダ固有ライブラリ２３２Ａ、およびベンダ固有ライブラリ２４２Ａは、少なくともある程度は、プロセスモード独立（“ＰＭＩ”）ＨＣＡＩＯアクセスライブラリを表す。
【００２０】
ユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ２２０Ａは、また、Ｈｃａポート２５０Ａおよびミニポートドライバ２４０Ａを通してＨＣＡアダプタ２８０Ａにアクセスする。ベンダ固有ライブラリ２４２Ａに加えて、ミニポートドライバ２４０Ａも、また、カーネルモードアダプタ制御およびヘルパー機能２４４Ａ、およびクラスエージェント２４６Ａを備えている。Ｈｃａポート２５０Ａ、ミニポートドライバ２４０Ａ、およびＨＣＡアダプタ２８０Ａとの間の関係に関する追加的な詳細は、図２Ｂに関して、以下で提供される。Ｈｃａポート２５０Ａは、また、他のカーネルモードクライアント２７０Ａ（例えば、ＨｃａポートクライアントＡＰＩを使用するＲＮＤＩＳミニポート）からＨＣＡアダプタ２８０Ａへのアクセスを可能にする。そのＨｃａポート２５０Ａは、サブネットマネージャ２６２Ａ、接続マネージャ２６４Ａ，およびパフォーマンスマネージャ２６６Ａを含む、種々のクラスの管理サブシステムを開始する。
【００２１】
次に図２Ｂに移ると、Ｈｃａポート２５０Ｂは、抽象化された一般のＨＣＡデバイスインターフェイスを提供する。ユーザーモードライブラリ２３０Ａおよびベンダ固有ライブラリ２３２Ａと類似している、ミニポートドライバ２４０Ｂおよびベンダ固有ライブラリ２４２Ｂは、Ｈｃａポート２５０Ｂに関する抽象化をＨＣＡアダプタ２８０Ｂのハードウエア固有の動作へマッピングする。上記されたように、その同じベンダ固有ＰＭＩライブラリは、ミニポートドライバ２４０Ｂのベンダ固有ライブラリ２４２Ｂ、およびユーザーモードライブラリ２３０Ａのベンダ固有ライブラリ２３２Ａとして現れる。（カーネル固有ルーチンを、カーネルアダプタ制御およびヘルパー機能２４４Ｂで実施する。）加えて、Ｈｃａポート２５０Ｂは、ミニポートドライバのクラスエージェント２４６Ｂのためにシステム環境を用意する。
【００２２】
Ｈｃａポート２５０Ｂは、処理環境を確立し、その処理環境は、ミニポート２４０Ｂにメモリ割り付け、レジストリアクセス、およびポート／レジスタアクセスのような、オペレーティングシステムの機能性を提供する。オペレーティングシステムへの直接のコールはある設計の複雑さからミニポート開発者を保護する取り組みにおいて認められない場合があり、それによって、ベンダ固有ライブラリ２３２Ａおよびベンダ固有ライブラリ２４２Ｂに対する単一のソースの目標を容易にしうる。Ｈｃａポート２５０Ｂも、また、ミニポートドライバ２４０Ｂの要求を直列化するため、ミニポート開発者が直列化問題に取り組む必要がないようにする。メモリリソースを、オペレーティングシステムのページが付けられていないメモリプールから割り付ける。
【００２３】
Ｈｃａポート２５０ＢがＩｎｆｉｎｉＢａｎｄクライアントにＩｎｆｉｎｉＢａｎｄリソースの管理を提供することに注意する必要がある。対照的に、ミニポート２４０Ｂは、ＩｎｆｉｎｉＢａｎｄリソース管理を提供しないが、Ｈｃａポート管理方法の拡張のようなさらなる行為を提供する。ミニポートドライバ２４０Ｂは、ＨＣＡアダプタ２８０Ｂのベンダ固有の動作の意味論からＨｃａポート２５０Ｂを保護する。ミニポート情報構造は、Ｈｃａポート２５０Ｂにそのミニポート制御／ヘルパー、およびＰＭＩＩＯアクセスコールバックルーチンを提供する。
【００２４】
図２Ｃは、ユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ２２０Ｃ、およびベンダ固有ライブラリ２３２Ｃを持ったユーザーモードライブラリ２３０Ｃアダプタ、またはＨｃａポート２５０Ｃおよびアダプタヘルパー機能２４４Ｃを持ったミニポート２４０Ｃのどちらか一方を通して、ＨＣＡアダプタ２８０ＣにアクセスしているＩｎｆｉｎｉＢａｎｄアプリケーション２１０Ｃを示す。アダプタ制御およびヘルパー機能は、２つの条件を処理する。第１は、ミニポートドライバを開始および停止すること、ＩＯバスリソースの割り当ておよび管理（ＩＯ、メモリおよび割り込み）、プラグアンドプレイコマンドの処理、パワー管理コマンドの処理のような、一般的なドライバセンスにおけるＨＣＡアダプタ２８０Ｃの一般の制御および処理である。
【００２５】
第２の条件は、カーネルモードヘルパー機能の支援に関するものである。これらは、ミニポートによって実行される特権化された機能であり、（１）〜（７）に含まれる整然とした通信リソース管理を提供する。それは、（１）保護領域の作成と破壊、および必要なように、保護領域の割り当てのような、保護領域管理、（２）メモリ領域およびメモリウインドウの作成および破壊とを含む、翻訳テーブルおよび保護テーブルに関する作成および破壊、ならびにテーブル入力制御および操作のような、翻訳テーブルおよび保護テーブルの管理、（３）イベントキューの作成および破壊、ならびにイベントキューからのイベント処理のような、イベント要求管理、（４）完了キューの作成および破壊、ならびにＨＣＡアダプタと完了キューを結びつけることおよび結び付けないことのような、完了キュー管理、（５）作業キューの作成と破壊、プログラム作成作業キューの属性に対する支援、およびＨＣＡアダプタとの作業キューを結びつけることのような、作業キュー管理、（６）アドレスベクタテーブル（幾つかの場合において、これは、領域保護の管理機能性の部分であっても良い）の作成と破壊のような、アドレスベクタテーブル管理、（７）マルチキャストグループの作成と破壊のような、マルチキャスト支援、である。
【００２６】
プロセスモード独立ライブラリ（例えば、ベンダ固有ライブラリ２３２Ｃおよびベンダ固有ライブラリ２４２Ｂ）は、ミニポート２４０Ｃおよびユーザーモードライブラリ２３０Ｃに静的にリンクされる。上記したように、ライブラリを作成することによって、ＨＣＡミニポートの共通コンポーネント、開発、メンテナンス、およびテストを減少しうる。一般に、ＰＭＩライブラリの機能は、それらのうち１つ、または２つ以上を通過したコンテキスト固有の拡張区域を有する。その拡張は、ＰＭＩ作業区域であり、コンテキスト処理を確立するためのＰＭＩ機能によって使用される。そのコンテキスト処理に基づいて、対応するユーザーモード実施、またはカーネルモード実施を、共通に名付けられた機能に対して、呼び出し、またはマッピングする。
【００２７】
ＰＭＩベンダ固有のライブラリは、３つの一般のタイプの機能性を提供する。それは、（１）ユーザーモード側の領域の保護／完了キュー／作業キュー（“ＰＤ／ＣＱ／ＷＱ”）の作成と破壊（２）ユーザーモードプロセスへ割り付けられたキューペアレジスタへＩＯ要求を記録すること、および（３）結びつけ要求を通じたメモリウインドウ操作、である。ＰＤ／ＣＱ／ＷＱの作成と破壊の支援に対するＰＭＩルーチンは、２つのステッププロセスで動作する。第１ステップは、カーネルモードにおけるミニポートによって、キューペアの割り付けに対して必要とされるリソースを獲得することである。第２ステップは、その結果をチェックし、および、要求が失敗である場合は、そのプロセスに割り付けられたリソースを解放する。ＩＯ要求は、割り付けられたキューペアを直接操作する。ＩＯ要求およびメモリウインドウ操作が課せられるアーキテクチャはごく少数である。なぜならば、高いバンド幅と短い待ち時間は、重要な要素になる傾向にあるからである。
【００２８】
図３は、本発明に従って、共通のユーザーモード、およびカーネルモード動作の一回の実施を可能にする動作例を示す。これらの動作は、特定の順番で記述され、または主張されても良いが、本発明は、動作に関し、あらゆる特定の順番、またはコンビネーションに必ずしも制限されない。ハードウエアアダプタに関する、カーネルモード処理、およびユーザーモード処理の両方に共通である１つ、または２つ以上の一回の実施を可能にすることは、カーネルモード処理およびユーザーモード処理に共通である少なくとも１つの動作のための、共通のインターフェイスを規定すること（３１０）に関する行為、その名前に対応する少なくとも１つの動作のカーネルモード実施を提供すること（３２０）、その名前に対応する少なくとも１つの動作のユーザーモード実施を提供すること（３３０）、カーネルモード処理に固有である１つ、または２つ以上の動作のカーネルモード実施を提供すること（３４０）、与えられたプロセスがカーネルモードプロセスである場合は、カーネルモード実施へ、および、与えられたプロセスが、ユーザーモードプロセスである場合は、ユーザーモード実施へ、１つ、または２つ以上の共通インターフェイスコールをマッピングすること（３５０）を含む。
【００２９】
本発明の実施形態は、以下でより詳細に記述するような、種々のコンピュータハードウエアを含む、１つ、または２つ以上の特別な目的のコンピュータ、および／または、１つ、または２つ以上の汎用コンピュータを備えても良い。本発明の範囲内の実施形態は、コンピュータ実行可能な命令、またはその上に格納されるデータ構造を維持しまたは持つためのコンピュータ実行可能媒体をまた備える。このようなコンピュータ実行可能媒体は、汎用、または特別の目的のコンピュータによってアクセスすることができる、あらゆる利用可能媒体でありうる。例えば、それは制限ではないのだが、このようなコンピュータ実行可能媒体は、ＲＡＭ，ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、または他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、または、コンピュータ実行可能な命令またはデータ構造の形式における所望のプログラムコード手段を維持しまたは格納することに使用されることができ、汎用、または特別の目的のコンピュータによってアクセスされることができるあらゆる他の媒体を備えることができる。
【００３０】
情報をネットワークまたはコンピュータへの他の通信接続（配線、無線、または配線か無線の組み合せのどちらか）に転送、または提供するとき、そのコンピュータは、コンピュータ実行可能媒体として接続を適切に見る。従って、あらゆるこのような接続を、コンピュータ可読媒体と適切に呼ぶ。上記の組み合せを、コンピュータ実行可能媒体の範囲内にまた含むべきである。例えば、コンピュータ実行可能な命令は、汎用コンピュータ、特別の目的のコンピュータ、またはある機能や機能のグループを実行するための特別の目的のプロセシングデバイスをもたらす構造とデータを備える。
【００３１】
図４と次に続く議論を、本発明を実行しても良い適切なコンピューティング環境の、簡単で、一般的な記述を提供することを意図している。必要ではないが、本発明を、ネットワーク環境でコンピュータによって実行されているプログラムモジュールのような、コンピュータ実行可能な命令の一般のコンテキストで、記述するであろう。一般的に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等、を含む。データ構造に関係したコンピュータ実行可能な命令、およびプログラムモジュールは、ここで開示された方法のステップを実行するためのプログラムコード手段の例を表す。このような実行可能な指示の、またはデータ構造に関連した特定のシーケンスは、動作の例を表し、このようなステップで記述された機能を実施することに対応している。
【００３２】
当業者は、本発明を多くのタイプのコンピュータシステム配置を持つネットワークコンピューティング環境で実施しても良く、それらコンピュータシステム配置は、パーソナルコンピュータ、携帯型デバイス、マルチプロセッサシステム、マイクロプロセッサに基づいたまたはプログラム可能な家電製品、ネットワークＰＣｓ、ミニコンピュータ、メインフレームコンピュータ、および同種のものを含んでいる、ということを認識するだろう。本発明を、また、分散型コンピューティング環境で実施しても良く、そこでは、タスクを、ローカルおよびリモートプロセシングデバイスによって実行し、そのローカルおよびリモートプロセシングデバイスを、通信ネットワークを通してリンクする（配線によるリンク（ｈａｒｄｗｉｒｅｄ　ｌｉｎｋ）によって、無線リンクによって、または、配線か無線リンクの組合せによって、のどちらか）。分散コンピューティング環境において、プログラムモジュールを、ローカルおよびリモートメモリストレージデバイスの両方に設置しても良い。
【００３３】
図４に関して、本発明を実施するための好例となるシステムは、従来のコンピュータ４２０の形状の汎用コンピューティングデバイスを備え、処理装置４２１、システムメモリ４２２、処理装置４２１へのシステムメモリ４２２、および種々のシステムコンポーネントを接続するシステムバス４２３を含んでいる。システムバス４２３は、メモリバスまたはメモリコントローラ、周辺装置バス、および種々のバスアーキテクチャのあらゆるものにも使用できるローカルバスを含むあらゆるタイプのバス構造であっても良い。システムメモリは、読み出し専用メモリ（ＲＯＭ）４２４、およびランダムアクセスメモリ（ＲＡＭ）４２５を含む。起動中のような、コンピュータ４２０中の要素間の転送情報を助ける基礎的なルーチンを含む、基礎的な出入力システム（ＢＩＯＳ）４２６は、ＲＯＭ４２４の中に格納されていても良い。
【００３４】
コンピュータ４２０は、磁気ハードディスク４３９から読取り、またはその磁気ハードディスク４３９へ書き込むための磁気ハードディスクドライブ４２７、着脱可能な磁気ディスク４２９から読取り、またはその磁気ディスク４２９へ書き込むための磁気ディスクドライブ４２８、およびＣＤ−ＲＯＭや他の光媒体のような、着脱可能な光ディスク４３１から読取り、またはその光ディスク４３１へ書きこむための光ディスクドライブ４３０をまた備えていても良い。磁気ハードディスクドライブ４２７、磁気ディスクドライブ４２８、および光ディスクドライブ４３０を、それぞれ、ハードディスクドライブインターフェイス４３２、磁気ディスクドライブインターフェイス４３３、および光ディスクドライブインターフェイス４３４によって、システムバス４２３に接続する。そのドライブとそれらに関係しているコンピュータ読取可能媒体は、コンピュータ実行可能な命令、データ構造、プログラムモジュール、およびコンピュータ４２０に対するほかのデータの不揮発性のストレージを提供する。ここに記述された好例となる実施形態は、磁気ハードディスク４３９、着脱可能な磁気ディスク４２９、および着脱可能な光ディスク４３１を使用しているが、データを格納するための他のタイプのコンピュータ実行可能媒体を使用することができ、それらは、磁気カセット、カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭ、および同種のものを含んでいる。
【００３５】
オペレーティングシステム４３５、１つ、または２つ以上のアプリケーションプログラム４３６、他のプログラムモジュール４３７、およびプログラムデータ４３８を含む、１つ、または２つ以上のプログラムモジュールを備えるプログラムコード手段を、ハードディスク４３９、磁気ディスク４２９、光ディスク４３１、ＲＯＭ４２４、またはＲＡＭ４２５、オペレーティングシステム４３５上に格納しても良い。ユーザーは、キーボード４４０、ポインティングデバイス４４２、またはマイクロフォン、ジョイスティック、ゲームパッド、衛星放送アンテナ、スキャナ、または同種のもののような、他の入力デバイス（図示しない）を通して、コマンドおよび情報をコンピュータ４２０に入力しても良い。これらおよび他の入力デバイスを、しばしば、システムバス４２３に接続されるシリアルポートインターフェイス４４６を通して、処理装置４２１に接続する。代わりに、その入力デバイスを、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）のような、他のインターフェイスによって接続しても良い。モニタ４４７、または他のディスプレイデバイスを、また、ビデオアダプタ４４８のような、インターフェイスによってシステムバス４２３に接続する。モニタに加えて、パーソナルコンピュータは、スピーカおよびプリンタのような、一般的に、他の周辺機器出力デバイス（図示しない）を含んでいる。
【００３６】
コンピュータ４２０は、リモートコンピュータ４４９ａ、または４４９ｂのような、１つ、または２つ以上のリモートコンピュータへの論理的な接続を使用しているネットワーク化された環境で動作しても良い。リモートコンピュータ４４９ａおよび４４９ｂは、各々、他のコンピュータ、サーバ、ルータ、ネットワークＰＣ，ピアデバイスまたは他の共通のネットワークノード、であっても良く、および、メモリストレージデバイス４５０ａと４５０ｂおよびそれらに関係したアプリケーションプログラム４３６ａと４３６ｂは、図４に図示されているが、一般的に、コンピュータ４２０に関して上述された多くのまたは全ての要素を備えても良い。図４に書かれた論理的接続は、ここで制限ではなく例として示されるローカルエリアネットワーク（ＬＡＮ）４５１およびワイドエリアネットワーク（ＷＡＮ）４５２を含んでいる。このようなネットワーク環境は、オフィス全体、または企業全体に渡るコンピュータネットワーク、イントラネット、およびインターネットにおいてありふれている。
【００３７】
ＬＡＮネットワーク環境の中で使用するとき、コンピュータ４２０を、ネットワークインターフェイスまたはアダプタ４５３を通して、ローカルネットワーク４５１に接続する。ＷＡＮネットワーク環境の中で使用されるとき、コンピュータ４２０は、モデム４５４、無線リンク、またはインターネットのような、ワイドエリアネットワーク４５２と通信を確立するための他の手段を備えていても良い。内部または外部にあっても良いモデム４５４を、シリアルポートインターフェイス４４６によって、システムバス４２３に接続する。ネットワーク化された環境で、コンピュータ４２０に関して書かれたプログラムモジュール、またはその一部分を、リモートメモリストレージデバイスに格納しても良い。示されたネットワーク接続は好例となっており、および、ワイドエリアネットワーク４５２と通信を確立する他の手段を使用しても良い、ということを認識するであろう。
【００３８】
本発明を、その精神または必要な特徴から逸脱すること無しで、他の特定の形態で実施しても良い。記述された実施形態を、全ての点において単なる例証であって限定的でない、と考えるべきである。それゆえに、本発明の範囲を、前述の記述によってではなく、特許請求の範囲によって示す。その意味内、および請求項の均等物の範囲内で起こる全ての変更は、それらの範囲内に包含されている。
【図面の簡単な説明】
【図１】本発明に従って、共通のユーザーモード、およびカーネルモード動作の一回の実施を可能にするハードウエアドライバモデルのハイレベルブロック図を示す図である。
【図２Ａ】本発明に従って、ハードウエアドライバモデルの１例を図示している図である。
【図２Ｂ】本発明に従って、ハードウエアドライバモデルの１例を図示している図である。
【図２Ｃ】本発明に従って、ハードウエアドライバモデルの１例を図示している図である。
【図３】本発明に従って、共通のユーザーモード、およびカーネルモード動作の一回の実施を可能にする方法のための行為例を示す図である。
【図４】本発明に対して適切な動作環境を提供するシステムの１例を図示する図である。
【符号の説明】
１１０　アプリケーション
１２０　ユーザーモードインターフェイス
１３０　ユーザーモード実施
１４０　カーネルモード実施
１５０　アダプタ
２１０Ａ　ＩｎｆｉｎｉＢａｎｄアプリケーション
２２０Ａ　ユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ
２３０Ａ　ユーザーモードライブラリ
２３２Ａ　ベンダ固有ライブラリ
２４０Ａ　ミニポートドライバ
２４２Ａ　ベンダ固有ライブラリ
２４４Ａ　カーネルモードアダプタ制御、およびヘルパー機能
２４６Ａ　クラスエージェント（ＳＭおよびＰＭエージェント）
２５０Ａ　Ｈｃａポート
２６２Ａ　サブネットマネージャ
２６４Ａ　接続マネージャ
２６６Ａ　パフォーマンスマネージャ
２７０Ａ　カーネルモードクライアント
２８０Ａ　ＨＣＡアダプタ
２５０Ｂ　Ｈｃａポート
２４０Ｂ　ミニポートドライバ
２４２Ｂ　ベンダ固有ライブラリ
２４４Ｂ　カーネルモードアダプタ制御、およびヘルパー機能
２４６Ｂ　クラスエージェント（ＳＭおよびＰＭエージェント）
２８０Ｂ　ＨＣＡアダプタ
２１０Ｃ　ＩｎｆｉｎｉＢａｎｄアプリケーション
２２０Ｃ　ユーザーモードＩｎｆｉｎｉＢａｎｄライブラリ
２３０Ｃ　ユーザーモードライブラリ
２３２Ｃ　ベンダ固有ライブラリ
２４０Ｃ　ミニポート
２４４Ｃ　アダプタヘルパー機能
２５０Ｃ　Ｈｃａポート
２８０Ｃ　ＨＣＡアダプタ
４２１　処理装置
４２２　システムメモリ
４２３　システムバス
４２４　ＲＯＭ
４２５　ＲＡＭ
４２６　ＢＩＯＳ
４３２　ハードディスクドライブインターフェイス
４３３　磁気ディスクドライブインターフェイス
４３４　光ドライブインターフェイス
４３５　オペレーティングシステム
４３６、４３６ａ、４３６ｂ　アプリケーションプログラム
４３７　他のプログラムモジュール
４３８　プログラムデータ
４４０　キーボード
４４６　シリアルポートインターフェイス
４４７　モニタ
４４８　ビデオアダプタ
４４９ａ、４４９ｂ　リモートコンピュータ
４５１　ローカルエリアネットワーク
４５２　ワイドエリアネットワーク
４５３　ネットワークインターフェイス
４５４　モデム
【図１】
2004054934.tif 000003
【図２Ａ】
2004054934.tif 000004
【図２Ｂ】
2004054934.tif 000005
【図２Ｃ】
2004054934.tif 000006
【図３】
2004054934.tif 000007
【図４】
2004054934.tif 000008