JP4375629B2 - エミュレーション環境をサポートするディバイスドライバアーキテクチャ - Google Patents
エミュレーション環境をサポートするディバイスドライバアーキテクチャ Download PDFInfo
- Publication number
- JP4375629B2 JP4375629B2 JP51994097A JP51994097A JP4375629B2 JP 4375629 B2 JP4375629 B2 JP 4375629B2 JP 51994097 A JP51994097 A JP 51994097A JP 51994097 A JP51994097 A JP 51994097A JP 4375629 B2 JP4375629 B2 JP 4375629B2
- Authority
- JP
- Japan
- Prior art keywords
- controller
- device driver
- operating system
- interface
- shell
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000006870 function Effects 0.000 claims description 62
- 238000000034 method Methods 0.000 claims description 20
- 238000004458 analytical method Methods 0.000 claims description 7
- 230000007246 mechanism Effects 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 description 36
- 239000010410 layer Substances 0.000 description 34
- 238000003860 storage Methods 0.000 description 30
- 230000008859 change Effects 0.000 description 27
- 230000002093 peripheral effect Effects 0.000 description 13
- 230000004044 response Effects 0.000 description 12
- 238000007726 management method Methods 0.000 description 11
- 230000008901 benefit Effects 0.000 description 10
- 230000001419 dependent effect Effects 0.000 description 10
- 238000012360 testing method Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000002085 persistent effect Effects 0.000 description 6
- 238000010200 validation analysis Methods 0.000 description 6
- 230000009466 transformation Effects 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 238000010926 purge Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 102100024383 Integrator complex subunit 10 Human genes 0.000 description 3
- 101710149805 Integrator complex subunit 10 Proteins 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000013502 data validation Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 206010033546 Pallor Diseases 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000002775 capsule Substances 0.000 description 1
- 230000011748 cell maturation Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 239000012792 core layer Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 229910003460 diamond Inorganic materials 0.000 description 1
- 239000010432 diamond Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 238000012419 revalidation Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000007474 system interaction Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/105—Program control for peripheral devices where the programme performs an input/output emulation function
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Description
発明の分野
本発明は、全体的に、コアオペレーティングシステムと、通常、ハードウェアディバイスとの間のインタフェースを定義および確立するためにコンピュータオペレーティングシステムにおいて用いられるディバイスドライバの設計に関し、詳細には、その中で特に情報ディスプレイ機能を含むオペレーティングシステム機能を一般的にサポートするハードウェアディバイスが作動する、仮想化され、かつ、コンテキスト切り替え可能なインタフェース環境を提供するモジュール式ディバイスドライバアーキテクチャに関する。
関連技術の説明
通常のコンピュータシステムにおいて、ソフトウェアオペレーティングシステムは、ユーティリティ及びデーモンプログラムを含むアプリケーションプログラムに一般化されたシステムサービスを提供する。これらのシステムサービスには、通常、個々のハードウェア周辺ディバイスへのアクセスが含まれ、この場合、各ディバイスが、通常、コンピュータシステムに、明確に定義されたハードウェアインタフェースを提供するこれらのハードウェア周辺ディバイスは、コンピュータシステムに直接的或いは間接的に付加されていても差し支えない。ディバイスドライバは、オペレーティングシステムに一体構造として統合可能なソフトウェアモジュール又は構成要素として実現され、通常、明確に定義されたソフトウェアアプリケーションプログラムインタフェース(API)を、オペレーティングシステム及び各ハードウェアインタフェース用のアプリケーションプログラムに提供するために用いられる。ディバイスドライバは、しばしば、例えばビデオコントローラのような特定クラスのハードウェアインタフェースに関する細目仕様を備えたアプリケーションプログラム又はオペレーティングシステムの対話(インタラクション)を単純化することの出来る程度のディバイス独立性または仮想化を提供する。通常、特定のハードウェアインタフェースの基礎となる各具体化に関しては、アプリケーションプログラム及びオペレーティングシステムに提供される他の点では共通なAPIを実現するために特有のディバイスドライバが用いられる。
従来のディバイスドライバ設計に固有な多くに問題が有る。第1に、従来のディバイスドライバは、特定のハードウェアインタフェース、及び、基礎ディバイス、又は、コントローラシステムの機能にとって特有である。従って、ハードウェアコントローラの新規または異なるバージョンが作成されると、必ず、新規または異なるハードウェアにとって同等に特有な新規ディバイスドライバも開発されなければならない。多数の異なるバージョンのあるハードウェアディバイスの場合には、概して同数のディバイスドライバが開発されなければならない。その代わりに、複数のバージョン又はタイプのディバイスをサポートするように、単一組合わせディバイスドライバを作成することが可能である。この種のディバイスドライバは、通常、他の点では実質的に相互に独立している複数のディバイス特有ドライバを、単一2進ファイルに組み込む。
特定のハードウェア1個をサポートするために必要なディバイスドライバの有効個数も、その中で当該ハードウェアが使用されるオペレーティングシステム環境の個数および差に依存する。極めて密接に関係したオペレーティングシステムにおいて、当該ディバイスドライバの実質的な再開発には、特定のオペレーティングシステムに当該ディバイスドライバを組み込む適切な能力を提供すること、及び、おそらく更に重要なはずであるが、論理的には類似するが、しばしば、全く異なるAPIを当該オペレーティングシステム及びアプリケーションに提供することの両方が必要とされる。通常、当該ディバイスドライバのAPIの詳細な定義は、当該ディバイスドライバ自体の詳細な設計を規制する。従って、ハードウェアは同じであるがオペレーティングシステムの異なる場合のディバイスドライバは、しばしば、殆ど完全に独立して開発される。
特定のハードウェアコントローラをサポートするために必要なディバイスドライバの個数に影響する別の問題は特定のコントローラへ接続される他のハードウェア及びシステムの性質に起因する。再び、コンピュータシステムの詳細な構成に融通性を持たせるために、ハードウェアコントローラは、多数の明確に異なるオペレーションモードをサポート可能であり得る。例えば、ビデオコントローラは、かなりの範囲に亙って、ビデオディスプレイ解像度及び色深度をサポート可能であり得る。ただし、この場合の範囲は、例えば、特定のビデオコントローラに実際に実現されたビデオRAMの量のような、直接的制限条件により、そして、添付ビデオディスプレイの垂直および水平最大周波数によって間接的に拘束されることがある。特定のアプリケーションの必要条件が、ディバイスドライバによってサポートされなければならない特定のオペレーションモードの選択を要求することもあり得る。一般的に、多くのディバイスドライバは、それぞれ、1つ又は複数のオペレーションモード異なる集合をサポートするようなハードウェアコントローラを備える。従って、特定のコンピュータシステムのコンフィギュレーションに直接基づくオペレーティングシステムの組込みに関して、装備されているディバイスドライバのなかの1つが選定されなければならない。所要のオペレーティングモードの集合をサポートするディバイスドライバを選出することが困難であることは別として、異なる個々のディバイスドライバをサポートする多くの種類のモードをプリエンプティブ(割り込み優先的)に決定するには本質的な困難が存在する。個々のドライバは僅かな量だけ異なるとしても、開発対象となるドライバが、かなりの個数に達することはあり得るはずである。
第2の問題は、部分的には第1の問題の結果に関係するが、各ディバイスドライバは、商的に受け入れ可能なオペレーションであることを保証するために、当該ディバイスドライバがその中で使用される可能性のある全ての種類の環境において徹底的にテストされなければならないということである。一般に、ディバイスドライバは、実質的には、オペレーティングシステムに全体として組込まれたモノリシックソフトウェアモジュールである。従って、特定のオペレーティングシステム用の或る1個のディバイスドライバの極く些細な異形部をテストを行う場合であっても、当該ディバイスドライバの正しい動作を立証するために、操作機能及びアプリケーション互換性の全テストを行うことが必要である。選択的機能テストは、モノリシックにコード化されたディバイスドライバのあらゆる修正に起因する付帯的な操作上のエラーの真の可能性により、一般に、不適当である。実際に異なるディバイスドライバの実質的な個数が、適度に複雑なハードウェアコントローラ及び対応するテストの組のサイズ及び範囲に関して、テストの実施を支持したとしても、ディバイスドライバのテストを実施することは、かなりの出費と新規製品または改良バージョンの市販開始の大幅な遅延とを意味する。
従来のディバイスドライバ設計に関する第3の問題は、この種の設計が実質的に静的なタイプのハードウェアコントローラ管理を提供することである。一般に、ディバイスドライバは、当該ディバイスドライバによって管理されるハードウェアコントローラに関して、ただ1組のオペレーティングパラメータを設定する。コンピュータシステムにおいて実行するオペレーティングシステム及びアプリケーションプログラムは、全て、この静的モードのパラメータを許容しなければならず、そうでなければ、正しく作動することに実質的に失敗するはずである。
限られた場合において、従来のディバイスドライバは、ある種のモードを利用可能にするか、或いは、アプリケーションプログラムにとって見える状態にすることが可能である。従って、これらのモードを利用するために、ディバイスドライバは、アプリケーションプログラムを信頼して、実質的にコンパイルされたハードウェア依存性を持つ。このような場合、モードスイッチ(態様切換え)を引き起こすことができるとしても、この種のあらゆるスイッチ(切換え)に実際的に気付かない他の実行プログラムに潜在的な悪影響を及ぼすけれども、アプリケーションプログラムはモード変更を引き起こす。
一般に、或る種の多重タスクオペレーティングシステムは、オペレーティングシステムにサポートされた状態変更に限られるけれども、制限された動的ハードウェアコントローラモード切換えを実施することが出来る。これらの場合、オペレーティングシステムは、新規な作動モードの状態に関して一貫性をもつディバイスドライバ及びハードウェアコントローラの状態を実質的に再ロードする。ただし、実行中のアプリケーションとディバイスドライバ及びハードウェアコントローラの状態との間には直接的関係はない。再び、あらゆる実行中のアプリケーションは、あらゆるモードスイッチに、完全にではないとしても殆ど気付かない。従って、選定されたモードは、いくらかの実行中アプリケーションに関しては最適であっても、現行の実行焦点調節を伴ったアプリケーションに関しては、必ずしも最適であるとは限らないはずである。
発明の要約
従って、本発明の一般的な目的は、動的再構成に基づき独立したハードウェアコンフィギュレーションオプションを提供することのできる融通性に富むモジュール式ディバイスドライバアーキテクチャを提供することにある。
これは、本発明において、プロセッサを有するコンピュータシステムの記憶装置に装備され、複数の機能サブエレメントを含むコントローラディバイスのコンピュータインタフェースにオペレーティングシステムを結合するために作動するディバイスドライバアーキテクチャを提供することによって達成される。ディバイスドライバは、それぞれがオペレーティングシステムへのオペレーティングシステムインタフェース(OSI)を提供する複数のオペレーティングシステムインタフェースオブジェクトと、コントローラディバイスのそれぞれ所定のサブエレメントのオペレーティングモードを確立するためにそれぞれがコンピュータインタフェースへ適用されるべきプログラミング値の生成を提供する複数のコンピュータインタフェースオブジェクトと、データを処理し、そして、所定の組合わせにおける複数のコンピュータインタフェースオブジェクトへのコールを生成するために、複数のオペレーティングシステムインタフェースオブジェクトの各々によってコール可能な処理ルーチンのディバイスドライバライブラリとを有する。
ディバイスドライバライブラリは、その中において、プログラミング値の生成及びコンピュータインタフェースへのプログラミング値の適用を定義するための実行コンテキストの選択を作動可能化する。
本発明の利点は、ハードウェアインタフェースの状態、及び、これに対応して、ハードウェアインタフェースを提供するコントローラの状態が個別コンテキスト内において仮想化および維持されることである。ほかの点においては個々のアプリケーションプログラムによって取り扱い或いは管理されなければならないコントローラの操作上の機能またはモードは、本発明のオペレーションによって仮想化可能である。本発明は、ディバイスドライバのオペレーションによって実行される実質的な専用コンテキスト切換えを介してハードウェアインタフェースの状態のアプリケーション特有の動的変更を提供する。選定されたオペレーティングシステム事象は、新規コンテキストの作成、及び、当該ディバイスドライバによるコンテキスト間の動的切換えを開始するために、修正或いはトラップされる。
本発明の他の利点は、ディバイスドライバが、当該ディバイスドライバを介してコントローラによりサポートされる機能の包括的な最適化を提供することである。ディバイスドライバは、当該ディバイスドライバによってサポートされるAPIゴールインタフェースの仮想化を提供する。オペレーティングシステムインタフェースオブジェクトの使用を介したゴールインタフェースの仮想化は、独立して定義されたAPI、及び、共通実行ストリームによって実質的にサポートされるべき機能的に等価なコールの変換に関して、特有のサポートを提供する。
本発明の更なる利点は、ディバイスドライバのゴールインタフェースの仮想化が、APIコール及びそれらのパラメータの共同評価を構造的に確立し、共同実行ストリーム内における後続するパラメータチェックに関する必要条件を実質的に除去することである。コンテキストデータ構造を参照するポインタと結合した結果としての実質的に線形の実行ストリームは、効率的な実行動作を保証し、同時に、従来のモノリシックディバイスドライバにおいて達成可能であるよりも実質的に更に大きい機能性を作動可能化する。
本発明の更に他の利点は、ディバイスドライバが、実質的に線形の実行ストリームのコンテキスト依存変更を提供することである。コンテキスト間の切換えを作動化またはサポートするために必要な変換機能は、変換機能の実施が必要かどうかを判定するための反復テストを最小限にするように実行ストリームに機能を直接リンクすることによってサポートされる。
本発明の更なる別の利点は、ディバイスドライバが、ハードウェアインタフェースを介してアクセス可能な特定のコントローラコンフィギュレーションをサポートするために必要または最適である実質的な機能オブジェクトの動的ローディング及びコンフィギュレーションを組み込むことである。ディバイスドライバは、当該コントローラを構成する独立した機能的なサブエレメントを識別するためにハードウェアインタフェースを介して、或いは、そうでなければ、コントローラから獲得された符号化済みコンフィギュレーションデータに応答し、サブエレメントをサポートするために適したハードウェアインタフェースオブジェクトの対応する集合を決定し、当該ディバイスドライバの初期化の一部として、オブジェクト集合において動的にロード及びリンクする。
本発明の更に別の利点は、ディバイスドライバが、機能的または操作上の或るアスペクトに関してプログラム可能であるような様々のハードウェアインタフェースオブジェクトをサポートすることである。ハードウェアインタフェースを介して、或いは、そうでなければ、コントローラから獲得された符号化済みのコンフィギュレーションデータに基づき、当該ディバイスドライバは、ハードウェアインタフェースオブジクトがそれらの対応するサブエレメントをどのようにしてサポートするかということの詳細について定義する操作上のコンフィギュレーションデータを用いてハードウェアインタフェースオブジェクトをプログラムするために、システムメモリからのコンフィギュレーションデータを識別し、そして、ロードする。
更に本発明の他の利点は、当該ディバイスドライバが、その中において、他のハードウェアインタフェースオブジェクト、及び、ディバイスドライバの他の構造的構成要素との実質的分離における新規ハードウェアインタフェースオブジェクトが開発可能であるような、確立したアーキテクチャを提供することである。ハードウェアインタフェースオブジェクトの構造的設計は、対応するハードウェアインタフェースオブジェクトをプログラムするために使用される操作上のコンフィギュレーションデータを再定義することによって実施されるべきコンフィギュレーションの実質的な改訂及び改良を前記オブジェクト自体が同様に可能にする。改訂されるか、或いは、新規なコントローラサブエレメントをサポートするディバイスドライバの修正は、サブエレメントに対応するハードウェアインタフェースオブジェクトに対してソースコード修正の準備をすることと対照的に、コンフィギュレーションデータファイルの単なる編集に限られることがある。いずれにせよ、互換性テストは、コントローラの改訂されるか、或いは、新規なサブエレメントをサポートする特定のハードウェアインタフェースオブジェクトのテストに適当に限定することが出来る。
本発明の更に別の利点は、ディバイスドライバが、ビデオディスプレイコントローラによって現在サポートされている色深度について一貫性のある報告を実施するために、オペレーティングシステムの修正を提供することである。異なる色深度コンテキストは、1つ又は複数の実行中アプリケーションの最大許容色深度に対応する各コンテキストを用いて、実行中のアプリケーションの集合に関して確立される。コンテキストが変更されるにつれて、或るアプリケーションの最大色深度が、ビデオディスプレイコントローラの色深度能力を越えた場合、該当する線形実行ストリームにリンクされた色深度変換機能が、ディスプレイデータ色深度変換を提供する。
【図面の簡単な説明】
本発明のこれら及び他の利点及び特徴は、本発明について以下に示す詳細な説明を添付図面と関連して考察することにより一層良く理解されるはずである。この場合、次に示す添付図面全体を通して、同じ参照番号は同じ部分を示すものとする。
図1は本発明に従って作成されたコンピュータシステムの概略構成図である。
図2は本発明のディバイスドライバの初期化期間中における、本発明のアーキテクチャ的コンフィギュレーションの概略構成図を提供する。
図3は本発明の初期化を詳述するフローチャートを提供する。
図4は本発明のディバイスドライバのランタイム実行期間中における、本発明のアーキテクチャ的コンフィギュレーションの概略構成図を提供する。
図5aはディバイスドライバコンテキストを定義する複数のシェルオブジェクトとシェルライブラリと、本発明の好ましい実施例と一貫性をもつオペレーティングシステムの物理的ディバイス構造との間の関係を示す一般的な説明図を提供する。
図5bは本発明の好ましい実施例と一貫性をもつハードウェアインタフェースオブジェクトの複数の例示の間の関係を示す一般化された説明図を提供する。
図6aは、本発明の好ましい実施例に従ったコンテキストスイッチに関して準備する過程の動作を示すフローチャートを提供する。
図6bは、本発明の好ましい実施例に従った新規コンテキストの実現化に用いられる過程を示すフローチャートを提供する。
図7は本発明の好ましい実施例に従って構成されたディバイスドライバの動作を終結させるために用いられる過程のソフトウェアフロー図を提供する。
図8は本発明と一貫性をもつオペレーティングシステム内において実行する多重仮想マシンをサポートする本発明の真、及び、仮想の両アーキテクチュア的コンフィギュレーションの使用を説明する構成図を提供する。
図9は本発明に従って作成された仮想ディバイスドライバのアーキテクチュア的コンフィギュレーションの概略構成図を提供する。
発明の詳細な説明
I.ハードウェアシステムの概観
本発明の利用に適したコンピュータシステム10を図1に示す。コンピュータシステム10は、システムデータバス14を介して主記憶装置16および大容量記憶周辺装置18に結合される中央処理装置(CPU)12を含むことが好ましく、前記の大容量記憶周辺装置はディスクドライブコントローラ及びハードディスクドライブユニットを含むことが好ましい。サポートされている機能が非揮発性資源からの或る実行可能なデータ及び構成ファイルの読取りを可能にする場合には、本発明のためには、大容量記憶周辺装置18の動作だけで十分である。従って、大容量記憶周辺装置18は、一般にファイル指向編成されているコンピュータシステム10によって読取り可能なデータの記憶装置を提供する外部又は遠隔装置、或いは、システムへのアクセスを提供する通信コントローラであっても差し支えない。
ビデオディスプレイコントローラ19も、同様に、システムバス14に結合された周辺ディバイスとして提供される。本発明に用いられるビデオディスプレイコントローラ19のハードウェア具体化例の性質は全体的に従来通りである。ただし、本発明に関係する状況について説明する場合における当該ビデオコントローラ19は、統合的に当該コントローラ19を構成する論理的に独立したサブエレメントの収集体として一意的に記述される。これらのサブエレメントは、全体的に独立した操作プログラミング可能性に関して、これらが特に機能的な独自性(アイデンティティ)を持つことによって論理的に区別される。すなわち、コントローラ19のハードウェア具体化例の機能に関する区分が、本発明のためのコントローラ19を構成する個別サブエレメントを大筋において規制する。
サブエレメントを区別するための別の基準は、プログラムによるCPU12の実行の最終的な結果として、対応するサブエレメントをプログラミングする方法における一般性(コモナリティ)に基づいて機能をグループ化することである。従って、図1に概要的に示すように、ビデオコントローラ19のサブエレメントには、これらに限定されることなく、ビデオディスプレイバッファ20、D−A変換器(DAC)22、ビデオグラフィックスアクセラレータ24、ビデオコントローラ26、プログラム可能なクロックゼネレータ28、ハードウェアカーソルコントローラ、及び、コーダ-デコーダユニット(CODEC)が含まれることが好ましい。コントローラ19を構成するこれらサブエレメントの各々は、システムバス14に適切に結合されるハードウェアレジスタインタフェース30を介して比較的独立的にプログラム可能である。従って、CPU12は、サブエレメント20、22、24、26、28からの情報をプログラム化および獲得可能である。レジスタインタフェース30及び1つ又は複数のサブエレメントは、実際問題として、1つの単一集積回路上に物理的に常駐可能である。1つの単一集積回路上にサブエレメントが共同所在すること、又は、サブエレメントが他のサブエレメントを介してアクセス可能である可能性は、サブエレメントを相互に機能的に区別することには影響を及ぼさない。
サブエレメント20〜28のプログラミングによって、ビデオディスプレイ32は、テキスト及び図式情報の提示(プレゼンテーション)用としてサポートされる。本発明の好ましい実施例において、多重ディスプレイウィンドウ34、36は、ディスプレイ32上に見える現在作動中または「焦点(フォーカス)」ディスプレイウィンドウを選択するために使用できるポインタ38と組合わせてサポートされる。ディスプレイウィンドウ34、36は、多数の個別事象を介して現行焦点を獲得することが出来る。これらの事象には、コンピュータシステム10によって実行するための新規アプリケーションプログラムの開始が含まれる。新規に開始されるアプリケーションのメインウィンドウは、デフォルトにより、ディスプレイ32の現行焦点を獲得する。ポインタ38は、例えば、マウスクリックの発生に際して焦点調節を受けるウィンドウ34、36を選択するためにも利用することができる。最後に、ディスプレイウィンドウ34、36は、別のアプリケーションの終了に際して焦点調節を受けることが可能である。これらの情況の各々において、焦点調節事象が生成され、この生成に際して、オペレーティングシステムの実行を介してCPU12が作動可能である。
他の周辺装置40も、同様に、コンピュータシステム10の構成要素として存在しても差し支えない。これら他の周辺装置40には、オーディオ、リアルタイムビデオ、及び、単独または相互組合わせされた他の複雑な多重機能作動(オペレーション)をサポートする複雑なコントローラが含まれても差し支えない。当該コントローラの機能的動作及び編成が、CPU12によって直接或いは間接的にプログラム可能な非常に多数の機能エレメントとして合理的に細分化されることを条件として、この種の複雑なコントローラは本発明によって効果的にサポート可能である。例えば、システムバス14に呈示されるレジスタインタフェースを介して全て直接或いは間接的に表されるウェーブテーブル合成、FM合成、等化コントローラ、残響コントローラ、及び、多重チャネル増幅器サブエレメントを呈示する高性能オーディオサブシステムは、本発明によって最も適切にサポート可能である。
II.ソフトウェアシステムの概観
本発明は、任意の個数のサブエレメントを備えたあらゆる周辺コントローラを容易にサポート可能であるが、好ましい実施例に示すように、ビデオディスプレイコントローラ19のサポート及び制御用として適用される場合に、最もよく理解されるはずである。図2において、本発明の好ましいディバイスドライバ実施例50は、ビデオディスプレイコントローラ19のレジスタインタフェース30へのディバイスドライバの論理的結合を表すハードウェアインタフェースとオペレーティングシステム層54との間に配置されている。オペレーティングシステム層54には、一般に、オペレーティングシステム核56と、いくらかの基礎的なオペレーティングシステムレベルの機能性を追加する潜在的に1つ又は複数のオペレーティングシステムエキステンション58とが含まれる。最後に、オペレーティングシステム層54は、結果的に、1つ又は複数のアプリケーションプログラム60をサポート可能である。
動作に際して、アプリケーションプログラム60は、アプリケーション60によってコール出来る実行エントリポイントの1つの集合として効果的に提供されるアプリケーションプログラムインタフェース(API)を介してオペレーティングシステム層54サポートサービスを獲得する。本発明の実施例に従い、オペレーティングシステム核APIコールポイントの小さい部分集合62は、ディバイスドライバ50の初期化に際して修正される。これらの修正されたコールポイントには、ウィンドウ焦点調節変化事象をアプリケーション60に報告するエントリポイントルーチン、及び、当該ディスプレイ32の現行カラー深度をアプリケーション60に報告し返すエントリポイントルーチンが含まれる。焦点調節変化事象(イベント)は、当該事象に応答して追加事象処理を提供するオペレーティングシステムエキステンション58へのAPIコールを含むように修正されることが好ましい。この追加事象処理には、焦点調節事象の結果として一般的に開始されるべきアプリケーションの実行環境を定量化するデータを獲得するための構成(コンフィギュレーション)検索の実施が含まれる。検索されたデータには、開始されようとしているアプリケーションのために必要とされるスクリーン解像度およびカラー深度構成(コンフィギュレーション)が含まれることが好ましい。
カラー深度報告ルーチンの修正は、任意のアプリケーション60によって要求された最大カラー深度が当該ディスプレイ32の現行カラー深度としてアプリケーション60に報告されることを保証するために明確に実施される。従って、本発明の好ましい実施例によれば、全てのアプリケーション60は、特にカラー深度に関して、当該ディスプレイ32の完全に仮想化された表現を基準として実行する。即ち、ディバイスドライバ50は、どのようなカラー深度がアプリケーション60によって要求されようとも、要求されたカラー深度が他のアプリケーション60によって扱うことの出来る最大カラー深度、或いは、実際に、当該ディスプレイ32自体の最大カラー深度を超過すると否とに拘わらず、完全なサポートを提供する。
A.ディバイスドライバのソフトウェアアーキテクチャ
上位レベル:
核層54は、オペレーティングシステム核56及びあらゆるエキステンション58に、ディバイスドライバ50へのエントリポイントを提供するオペレーティングシステムAPI(O/S API)を介してディバイスドライバ50に接続する。ディバイスドライバ50内において、O/S APIは、主として、グラフィックスディスプレイインタフェース(GDI)モジュール64、直接ドロー(DD)モジュール66、各々が、例えば、直接3D(D3D)のような現在または将来の定義済みAPIを表す任意の個数の他のモジュール68を含む多数のオペレーティングシステムインタフェースモジュールによってサポートされている。追加APIエントリポイントは、オペレーティングシステム(O/S)モジュール70、グラフィックスインタフェース(GRX)モジュール71、及び、シェルモジュール72によって提供される。これらのモジュールは、当該ディバイスドライバ50のO/S APIを構成するコール可能な実質的にすべてのエントリポイントを集団的に表す。
シェルモジュール72は、システム始動に際してオペレーティングシステム核56の初期化の一部として記憶装置16にロードされるディバイスドライバ50の初期構成要素である。例えば、Microsoft MS−Windows’95TMのような通常のオペレーティングシステムにおいては、例えば、MS−Windows’95のレジストリサービスのような標準初期化構成(コンフィギュレーション)ファイル又はデータベースにおける参照の結果として、オペレーティングシステム核56は、シェルモジュール72を記憶装置16にロードするはずである。
シェルモジュール72によって提供される初期化エントリポイントは、オペレーティングシステム核56がディバイスドライバ50の当該ディバイスドライバ特有の初期化を開始することを可能にする。この初期化の一部分として、シェルモジュールは、ボードドライバ、ハードウェアインタフェースモジュールの集合、及び、オペレーティングシステム層54に呈示されるはずのO/S APIをサポートするようにディバイスドライバ50の具体化を完成するために必要なオペレーティングシステムインタフェースモジュールの補集合を決定する。好ましい実施例において、シェルモジュール72に静的にリンクされなかった場合には、決定されたこれらの追加モジュールが動的にロードされ、その次に、ディバイスドライバ50に論理的にリンクされる。
ディバイスドライバ50の初期化のためのサポートサービスを獲得するために必要なO/S APIへのコールインタフェースを確立するためには、少なくともオペレーティングシステムモジュール70は、シェルモジュール72の必須部分または構成要素としてロードする。GRXモジュール71も同様にシェルモジュール72によってロードされることが好ましい。実用的利便さの問題として、一般的に使用される他のデフォルトオペレーティングシステムインタフェースモジュールも、同様に、オペレーティングシステムモジュール70に静的にリンク可能である。
GDI64,DD66、及び、D3D68モジュールによって特に実演されるように、本発明のディバイスドライバ50は、当該ディバイスドライバ50のO/S APIを、オペレーティングシステム核56、及び/又は、オペレーティングシステムエキステンション58の特定の部分に特有な分離されたユニットとして具体化することが好ましい。従って、好ましい実施例において、GDIモジュール64は、MS−Windows’95TM製品用としてMicrosoftによって事前に定義されたフラットモデルDIBエンジンドライバインタフェースをサポートすることが好ましい。同様に、直接ドローモジュール66は、標準直接ドローAPI用ハードウェア独立インタフェースをサポートする。D3Dモジュール68は、Windows’95TM用として発表済みのMicrosoft直接3D APIをサポートするはずである。これらの各APIに関する文書は、Microsoft,Inc.(Redmond、Washington)の市販製品として入手可能なMicrosoftソフトウェア開発キット(SDK)及びMicrosoftディバイスドライバキット(SDK)の一部として入手可能である。従って、本発明にかかる動的ローディング能力は、ディバイスドライバ50によって提供される包括的APIサポートが、容易に注文作成されることを可能にし、そして、追加オペレーティングシステムインタフェースモジュールの動的ローディングを介して、拡張されることを可能にする。
O/S及びGRXモジュール70、71を含むシェルモジュール72は、ディバイスドライバ50の動作(オペレーション)を介して、通常および所有権を主張できる(プロプラェタリ)両サポート機能をサポートするための必要性に応じて、オペレーティングシステム層54に対し、通常および所有権を主張できる(プロプラェタリ)両APIインタフェース部分を提供する。通常のAP1部分には、記憶装置16へのローディングに際して、オペレーティングシステム層54により、シェルモジュール72の初期化を開始することを可能にする初期化エントリポイントが含まれる。一般的標準終了(ターミネーション)コールエントリポイントも同様に提供される。このエントリポイントは、オペレーティングシステム層54が、オペレーティングシステム層54のシャットダウンが切迫していること、及び、ディバイスドライバの順序立った終了が要求されることをディバイスドライブ50に合図することを可能にする。
シェルモジュール72によって提供される所有権を主張できる(プロプラエタリ)APIエントリポイントには、当該ディスプレイ32上に呈示されるデスクトップを定義するデータの読取り及び書き込み、現行ビューポート、及び、ディバイスドライバ50のオペレーションを定義する或るデータを提供するエントリポイントが含まれる。この後の方の情報には、ディスプレイ32の現在の物理的カラー深度、ディスプレイポインタ38の現行カラー及びパターン、及び、例えば、ディバイスドライバ50のインタレース、ビデオ同期化タイプ、ビデオ高速スクロール、及び、カラーイネイブルオプションのような、大幅にビデオハードウェア特有化された多数の態様の設定が含まれても差し支えない。
最後に、オペレーティングシステムモジュール72は、基礎的なオペレーティングシステムサービスを獲得するためにオペレーティングシステム層54をコールするディバイスドライバサポートルーチンを提供する。本発明の好ましい実施例において、これらのシステムサービスには、記憶装置の割当、既に割当て済みである記憶装置の解放、メモリオブジェクトの実行可能またはロック状態を不能にし、データを読み取り、そして、定義済みI/Oアドレスにデータを書き込み、そして、一般に大容量記憶周辺装置18によって記憶された状態にある名前付きデータファイルを開き、読み取り、そして、閉じるために動的リンクライブラリ、例えばメモリオブジェクトを実行可能にするか、又は、実メモリ内のメモリオブジェクトをロックすることを可能にするような記憶管理機能のローディング及びアンローディングが含まれる。
B.ディバイスドライバソフトウェアのアーキテクチャ
下位レベル:
シェルモジュール72は、ビデオディスプレイコントローラ19の特定の場合に関して、同様に、ディバイスドライバ50の動的構成(コンフィギュレーション)を提供する。コンピュータシステム10においては、機能的に類似する多数のビデオディスプレイコントローラ19のうちの任意の個数を利用可能であるが、本発明のディバイスドライバ50は、特定のビデオディスプレイコントローラ19のハードウェア仕様細目を最適サポートするようにボードドライバ74の動的選択およびディバイスドライバ50への包含(インクリュージョン)を提供する。シェルモジュール72は、任意個数の異形体(バリアント)の中から、特定のビデオディスプレイコントローラ19の主要態様に対応する特定のボードドライバ74を選定する。実際には、特定のビデオディスプレイコントローラ19の主要態様は、コントローラ19の具体化に用いられる集積回路グラフィックスアクセラレータチップ又はチップ集合の特定の構造(アーキテクチャ)である。従って、1つの単一ボードドライバ74は、ディスプレイコントローラ19の特定変形体の適切に定義されたファミリに対応しても差し支えない。他のボードドライバは、定義の異なるコントローラの別のファミリに対応するように構成可能である。
ボードドライバ74は、1組のハードウェアインターフェイスモジュールを選択的にサポートすることにより、ディバイスドライバ50の動的構成(コンフィギュレーション)の追加層を提供する。これらのノードウェアインタフェースモジュールは、ディバイスドライバ50の構成要素として動的にロードすることが可能であり、そして、ビデオディスプレイコントローラ19の特定具体化の個別サブエレメントに実質的に対応する。本発明の好ましい実施例において、ハードウェアインタフェースモジュールの集合には、クロックモジュール76、DACモジュール78、CODBCモジュール80、ハードウェアカーソルサポートモジュール82、ビデオモジュール84、二次元グラフィックス制御モジュール86、及び、三次元グラフィックス制御(3D)モジュール88が含まれる。ディバイスドライバ50に動的にロードされたハードウェアインタフェースモジュールの特定の集合は、ビデオディスプレイコントローラ19の具体化例に存在する特定のサブエレメントに対応するボードドライバ74によって決定される。即ち、クロックサブエレメント28の特定の具体化例に従属する特定の対応するクロックモジュール76は、ボードドライバ74によって識別され、そして、ディバイスドライバ50に動的にロードされる。従って、例えば、DACサブエレメント22の新規バージョンを、ほかの点では一般的に既に存在するビデオディスプレイコントローラ19の設計に包含させることは、ディバイスドライバ50の実質的にはDACモジュール78のみの機能性に関して対応する改訂を実施することにより、即座に収容可能である。従って、ディバイスドライバ50のサブエレメント特有の態様を、動的にロード可能なモジュール内に配分することにより、ディバイスドライバ50の最終的構成性能および動作の有意な改訂が、ディバイスドライバ50を残りの部分から分離することによって実施されることを可能にする。この種のハードウェア特有の変更も、同様に、他のハードウェアインタフェースモジュール及びディバイスドライバ50の更に高位の層から効果的に分離される。従って、ディスプレイコントローラ19の新規バージョンに関するディバイスドライバ50構成(コンフィギュレーション)は、1個または複数の特定の新規または改訂済みハードウェアインターフェイスモジュールのみを基準としてテストすることが可能である。
実際問題として、或る種のハードウェアインタフェースモジュールは、ボードドライバ74と静的にリンクしても差し支えない。モジュールの基礎的な補集合は、必ず、或いは、ほぼ必ず特定のボードドライバ74と共に使用されるが、この場合には、ボードドライバ74と一緒にモジュールをロードすることによって最適化が達成される。静的にリンクされたモジュールを後続使用することは、対応するサブエレメントをサポートするために動的にリンク可能なモジュールを準備することにより、同じく効果的にオーバライド可能である。動的にロードされたモジュールは、静的にリンクされた対応するモジュールに優先して使用することが好ましい。
III.ディバイスドライバの初期化
本発明のディバイスドライバ50を初期化する過程の概要を図3に示す。MS−Windows’95TMオペレーティングシステムによって作動する好ましい実施例に関して、この初期化過程を説明することとする。
A.初期上位レベル初期化
オペレーティングシステム初期化の通常の実行に関連して、シェルモジュール72は、レジストリサービスデータベースファイルにおける通常のシステムドライバ参照(リファレンス)の結果として、記憶装置16にロードされる90。一旦、記憶装置内に常駐した場合には、ディバイスドライバ従属初期化を開始するために、コールが、シェルモジュール72の初期化エントリポイントに対して行われる。シェルモジュール72の初期化ルーチンは、シェルオブジェクト126(SHELLOBJ)の作成92、その次に、93においてオペレーティングシステムオブジェクト128(OSOBJ)の作成を提供する。
シェルオブジェクトは、ディバイスドライバ50の構造と論理的にリンクする最上レベルデータ構造として用いられる。シェルオブジェクトの有意要素を表Iに識別する。
表に示すように、シェルオブジェクトには、いくらかの大域フラグデータ、APTコールエントリポイント、ディバイスドライバ50の構成要素を表す高レベルソフトウェアオブジェクトへのポインタ、及び、多数のシェルライブラリルーチン又はディバイスドライバ50の内部オペレーションをサポートするために用いられる機能が含まれる。
オペレーティングシステムオブジェクトは、オペレーティングシステム層54サポート機能へのAPIコールアクセスを提供する。オペレーティングシステムオブジェクトのエレメントを表IIに識別する。
サポートされるエントリポイント別に示すように、O/Sオブジェクトは、オペレーティングシステム層54へのコールインタフェースを供給する。下位レベル及びBIOS機能へのコールインタフェース、及び、プラットホーム特有機能へのコールインタフェースを提供する。このプラットホーム特有コールインタフェースは、プラットホーム可搬性の細部を隠すために役立つ多数のユーティリティ又はライブラリルーチンを意味する。O/Sオブジェクトの他の機能と必ずしも関連しているとは限らないが、1つのモジュールに全てのプラットホーム特有コール及び機能を収集するために、これらのルーチンはこのモジュールに集中され、それによって、プラットホーム可搬性の変化を実質的にこの1つのモジュールに制限する。更に、これらのルーチンは、当該モジュールの残りの部分と同様に、アセンブラコーディングを用いて、全体的に最も良好に具体化される。
B.下位レベル初期化
シェルモジュール72は、次に、ディバイスドライバ50の残りの部分の動的ローディングを開始する。正しいボードドライバ74を識別するために、シェルモジュール72は、特定のボードタイプを識別するためのビデオディスプレイコントローラ19の初期評価94を実施する。ボード識別子は、コントローラ19に物理的に常駐し、そして、シェルオブジェクトの「BoardData」フィールドに記憶されているデータ構造から、コントローラ19を介して読み取られることが好ましい。好ましい実施例において、ボード識別子は、最初、レジスタインタフェース30を介してアクセス可能なビデオディスプレイコントローラ19に設置されている通常のオンボードROM29に記憶される。表IIIは、ボード識別子データ構造の好ましい構造を提供する。
「ID」フィールドは、ボード識別子構造がディバイスドライバ50に適合することを確認する静的データ値を提供する。「Revision」フィールドは、将来、代替構造が具体化された場合に、ボード識別子構造の特定構造を定義するために用いられる。「StructureSize」フィールドは、構造のサイズを定義する。「BoardFamily」フィールドは、この特定な場合におけるビデオディスプレイコントローラ19をサポートするために必要なディバイスドライバ50の一部分としてロードされることが必要なボードドライバ74を主として識別するために用いることのできる値を記憶する。少なくとも「BoardFamily」値を含むボード識別子構造の値は、board.datファイルにおいてキー名探索(ルックアップ)を実施するためのキーとして用いられる。キーは、有意ボード識別子フィールド値の単純連結として形成されることが好ましい。board.datファイルは、特定の場合におけるボードドライバ74の対応ファイル名にキーを相関関係付けるフラットファイルであることが好ましい。
特定のボードドライバ74が94において一旦識別されると、当該キー値に対応するボードドライバ74をロードするために、シェルモジュール72は、オペレーティングシステムモジュール70を介してコールを発行する。これに応答して、オペレーティングシステム層54は、96において、リクエストされたボードドライバ74を記憶装置16にロードし、そして、メモリポインタをシェルモジュール72に戻す。次に、ボードドライバ74の初期化エントリポイントがコールされる。
ボードドライバ74の初期化の一部分として、ボードオブジェクト98が作成される。ボードオブジェクトは、厳密には、オペレーティングシステムもハードウェアインタフェースモジュールも表さないが、オペレーティングシステム又はハードウェアインタフェースモジュールを表すオブジェクトによって便宜上用いられる基礎データ構造形を確立する。ボードオブジェクトの構造を表IVに示す。
ボードオブジェクト初期化の一部分として、ボード識別子構造へのポインタ「BoardData」は、シェル72から獲得される100。ビデオディスプレイコントローラ19に所在する各サブエレメントの特定のタイプを識別するために、ボード識別子構造における更なるフィールドが調査される。プリセットされたコード化済みの値は、特定の場合におけるサブエレメントを識別するために用いられる。ボード識別子のフィールドは、一般に、コントローラ19のサブエレメントの固定された態様に対応することが好ましい。例えば、DACのタイプ又はビデオメモリ、VRAM又はDRAMのタイプは、ボード識別子構造を介して提供されても差し支えない。
おそらくフィールドがアップグレード可能であるために、サブエレメントの態様が固定されていない場合には、特定の態様は、従来の方法によって決定されることが必要である。例えば、コントローラが一度使用されさえすれば、ビデオディスプレイコントローラ19において利用可能なディスプレイRAMの量(ビデオメモリサイズ)は変更可能である。ただし、ボード識別子は、静的であり、そして、コントローラ19の製造に際して確立される。従って、従来のメモリ走査ルーチンは、そのような場合においてビデオディスプレイコントローラ19に所在するビデオメモリの全体量を正確に決定するために利用することが出来る。ディスプレイコントローラ19は、おそらく、当該コントローラ19が遺産的に具体化されたことにより、同様に、ボード識別子29を持っていないこともあり得る。従って、この場合、当該コントローラ19に所在するサブエレメントの妥当な識別は、通常のInt10 Biosコールを介して獲得された情報から推論可能である。
ボード識別子構造における最後のフィールドは「BoardDependentInfo」フィールドである。このフィールドは、特定のボードタイプ及びモデルの追加操作特性にフラグを立てるために使用されることが好ましいワード-ワイドビットマップデータエリアを提供する。これらのフラグは、従属的かつボードドライバ74によって一意的に復号された具体化である。特に、これらのフラグビットは、識別されなければボード識別子の他のフィールドによってカバーされることのない詳細な構成(コンフィギュレーション)オプションを識別するために使用可能である。例えば、1つのフラグビットは、ディバイスドライバ50のより後の方のバージョンと共に使用可能な些細なサブエレメントオプションの存在を識別するために使用可能である。
従って、ボードドライバ74は、ボード識別子構造から、ビデオディスプレイコントローラ19を最適サポートするために必要なハードウェアインタフェースモジュールの特定の集合を決定する102。次に、ボードドライバ74は、オペレーティングシステムモジュール70を介してボードモジュールと静的にリンクしていないハードウェアインタフェースモジュールの識別済み集合を順次にローディングすること104をリクエストする。各ハードウェアインタフェースモジュール76−88が記憶装置16にロードされるにつれて、対応するソフトウェアオブジェクトを確立するために、各モジュールの初期化ルーチンがコールされる106。好ましいディバイスドライバ50において、各ハードウェアインタフェースオブジェクトは、共通ヘッダ部分とハードウェア従属部分とを含むデータ構造として構成される。共通ヘッダ部分は、表Vに示すフィールドを含むオブジェクトヘッダデータ構造(OBJHDR)であることが好ましい。
「ObjectVer」フィールドは、カプセル封入ハードウェアインタフェースによってサポートされたハードウェアサブエレメントの特定具体化を指定する一意的な識別子を提供する。「Module」フィールドは、カプセル封入されたハードウェアインタフェースモジュールの記憶場所を指示するオペレーティングシステムから戻されたメモリポインタを含む。「ObjDataInstance」フィールドは、ハードウェアインタフェースオブジェクトのこの例示用として予約されている専用データエリアへのポインタを提供する。「RegClassHandler」フィールドは、関連ハードウェアサブエレメントが、モード設定動作呼出しの一部分としてプログラムされなければならないインタフェースレジスタを備えているかどうかを定義する。当該フィールドの値が空白(ナル)である場合には、リクエストされた任意のモード設定プログラミングは、ハードウェアインタフェースによってカプセル封入されたモジュールへハードコード化される。当該フィールドが空白(ナル)でない場合には、当該フィールドの値は、レジスタ名および態様変更のサポート用に使用可能なインタフェース手順の定義を含む構造へのポインタである。RegClassHandlerの構造を表VIに示す。
オブジェクトヘッダの「ObjectInit」及び「ObjUnInit」フィールドは、現在のハードウェアインタフェースオブジェクトによってカプセル封入されたハードウェアインタフェースモジュールを初期化および解放するためのコールアドレスを提供する。オブジェクトヘッダの「ModeSet」フィールドは、態様変更をハードウェアインタフェースオブジェクトに合図するために用いられるハードウェアインタフェースモジュールエントリポイントを確立する。好ましい実施例において、このエントリポイントへの3つの異なるコールが実施可能である。各コールは、1つのモード設定を呼び出すために、1つのモード設定が発生しようとしていること、及び、1つのモード設定が完成したことを指示するためのコールのオペランドによって区別される。
最後に「SetDPMSState」フィールドは、システム10のパワー管理状態の特定モジュールに特有の変更をサポートするためのエントリポイントを提供する。
従って、ハードウェアインタフェースモジュール初期化ルーチンは、ハードウェアインタフェースオブジェクトのハードウェアインタフェース従属部分用の記憶装置を含み、当該オブジェクトのこの実例におけるオブジェクト特有のフィールドを初期化し、そして、当該ハードウェアインタフェースオブジェクトのこの例示に対して専用状態が維持されるべきあらゆる実例データの割当を獲得するために、カプセル封入ハードウェアインタフェースオブジェクトの一例の作成を提供する。当該実例データへのポインタは、オブジェクトヘッダにおける「ObjDataInstance」フィールドに記憶される。次に、初期化ルーチンは、ポインタをハードウェアインタフェースオブジェクトに返す。このポインタは、ボードオブジェクト基礎構造のメンバーフィールドに記憶される108。
基礎ハードウェアインタフェースオブジェクト、特にクロックオブジェクトの定義を表VIIに示す。
表に示すように、クロックサブエレメントと関連したハードウェア特有機能は無い。ただし、クロック周波数は、クロックサブエレメントの一般的なプログラム可能態様であり、更に、モードセットオペレーションに密接に関連している。従って、オブジェクトヘッダ構造のRegClassHandlerフィールドは、コントローラ19において生成されるクロック周波数を最終的に制御するクロックサブエレメントのインタフェースレジスタへのアクセスをサポートするために必要なレジスタの定義を含むRegClassHandler構造へのポインタを含む。
表VIIIは、例えば、ハードウェアカーソルオブジェクトを定義する更に幾分か複雑なオブジェクトを示す。
既に述べたように、オブジェクトヘッダは、カーソルオブジェクトのエレメントとして含まれる。CursorEnableフィールドは、コールパラメータの状態に応じてハードウェアカーソルの可視性をオン(出現)又はオフ(消滅)させるために、ハードウェアカーソルインタフェースモジュールへのエントリポイントに対するポインタを提供する。CursorSetフィールドは、オペランドによりコールに対して指定されたパターンに対するカーソルパターンの設定を提供するエントリポイント15に対するポインタを提供する。CursorMoveフィールドは、コールと共に提供されるX及びYオペランドによりディスプレイ32上におけるカーソルのホットスポットを指定するためのルーチンへのエントリポイントを識別する。CursorSetColorフィールドは、ディスプレイ32上に呈示された二色カーソルを色拡大するために用いられるルーチンを識別する。
他のハードウェアインタフェースオブジェクトには、DACオブジェクト130(DACOBJ;表IX)、ビデオオブジェクト136、グラフィックスオブジェクト138(DRAWENGOBJ;表X)、及び、3Dグラフィックスオブジェクト140が含まれる。
DrawEngObjによって参照される基礎構造には、多数の基礎的な製図機能が含まれる。この基礎構造は、APIコールに応答してGDIオブジェクトからのコールの線形実行内における機能への直接アクセスを可能にするためにGDIオブジェクトのコード空間内に保持された機能ポインタの1つのコピーを用いて、製図エンジンオブジェクト内に確立される。基礎構造の定義を表XIに示す。
これらオブジェクトの定義によって示すように、ハードウェアインタフェースモジュール76−88の各々は、オブジェクト、及び、オブジェクト特有のエントリポイントの固定した集合を提供するハードウェア特有の拡張(エキステンション)の容易な管理を可能にする標準化済み部分を含む対応するハードウェアインタフェースオブジェクトを確立するために初期化する。これらオブジェクト特有のエントリは、カプセル封入されたハードウェアインターフェイスモジュールの初期化ルーチンにより、ポインタリファレンスを用いて充填される。ポインタリファレンスは、論理的に参照される機能を提供するカプセル封入されたモジュール内の機能を対象とする。現行色深度、スクリーン解像度、または、他のコントローラ関連特性に基づいて、論理的機能特有の具体化が異なる場合には、カプセル封入されたモジュールは、対応する特有のエントリポイントを用いて具体化されることが好ましい。エントリポイントの適当な部分集合は、オブジェクトエントリポイントに初期化されたポインタリファレンスによって識別され、それによって、ディバイスドライバ50のオペレーション進行期間中に、当該コントローラ19の現行特性状態のランタイムテストを繰り返すことなしに、特性に適切なオペレーションを暗黙確立する。
従って、個々のオブジェクトは、オブジェクト構造の共通OBJHDR態様に基づき包括的に管理可能であり、同時に、基礎となる機能的および具体化細目から独立し、特に、例えば現行色深度及びスクリーン解像度のような特性に基づく機能の種々異なる具体化例を含むそれぞれ特定タイプのハードウェアインタフェースオブジェクトに対して充分に定義されたエントリポイントインタフェースを確立するためにも用いることが出来る。
本発明の好ましい実施例において、ボード識別子から識別されたboard.dmmファイルが、クロック、DAC、または、ハードウェアカーソルの存在を、ビデオディスプレイコントローラ19における存在程明確には指定しない場合には、ボードドライバ74と静的にリンクした対応するデフォルトモジュールが、デフォルトモジュールとして利用される。従って、ハードウェアインタフェースモジュールの集合が識別され、ロードされ、そして、初期化された後で、ボードオブジェクトにおける空白(ナル)ポインタは、ボードドライバ74によって検出される。例えば、ハードウェアカーソルオブジェクトが存在しない場合には、ボードドライバ74は、オブジェクトを作成し、そして、ハードウェア従属エントリポイントを、ボードドライバ74内の対応するデフォルトルーチンに初期化する。それによって、ハードウェアカーソルの機能性は、ソフトウェアエミュレーションを介してサポートされるか、或いは、更に一般的には、ハードウェアインタフェースオブジェクトのなかの別のオブジェクトの本質的な構成要素としてサポートされる。いずれにしても、デフォルトオブジェクトはボードオブジェクトにリンクされ、その後で、動的にロード及びリンクされたハードウェアカーソルオブジェクトと同じ本質的な機能性を提供する。
C.上位レベル初期化完了
一旦、ハードウェアインタフェースオブジェクトの初期化が完了すると、ボードドライバ74の初期化ルーチンはシェルモジュール72に戻る。次に、シェルモジュール72は、GRX APIオブジェクト71を作成するために進行する109。GRXオブジェクトは、オペレーティングシステムインタフェースオブジェクト64、66、68への内部汎用または仮想化インタフェースとして役立つ。GRXオブジェクト71は、表XIIに示す比較的簡単なインタフェースを提供する。
GrxApiFastCopyコールエントリポイントは、オン-スクリーン及び、オフ-スクリーンビデオメモリ内に配置されたビットマップを操作するために特にシェルモジュールを含む全てのオペレーティングシステムAPIレベルモジュールによって使用可能な共通アクセスポイントを提供する。共通アクセスポイントの確立は、ビデオメモリ管理を簡素化する。同様に、GrxApiColorMatchコールエントリポイントも、スクリーン32の現行色深度における論理的から物理的への色変換を実施するために、全てのオペレーティングシステムAPIレベルモジュールによって使用可能な共通アクセスポイントを提供する。
オペレーティングシステムインタフェースオブジェクト64、66、68の確立を開始するために110、GRXオブジェクト71のOBJHDR内の初期化エントリポイントは、シェルモジュール72によってコールされる。本発明の好ましい実施例において、GDI及びDDオブジェクト64、66は、GRXオブジェクト初期化ルーチン内において静的に識別される。その代わりに、又は、追加的に、オペレーティングシステムインタフェースオブジェクトは、interface.dat構成(コンフィギュレーション)ファイルへの参照によるシェルモジュール72によって識別可能である。識別されたオペレーティングシステムインタフェースモジュールは、シェルモジュール72と静的にリンクしなかった場合、記憶装置16に順次ロードされる112。
各オペレーティングシステムモジュールがロードされるにつれて112、モジュール初期化ルーチン114がコールされる。各オペレーティングシステムインタフェースモジュールの初期化の結果として、は、対応するオペレーティングシステムインタフェースオブジェクトが作成される。ハードウェアインタフェースオブジェクトの場合と同様に、オペレーティングシステムインタフェースオブジェクトは、それぞれ、オペレーティングシステムインタフェースオブジェクトの操作のための共通基準を確立するオブジェクトヘッダ基礎構造(CBJHDR)を含むことが好ましい。同様に、オブジェクトヘッダの使用は、ディバイスドライバ50による態様変更を合図するために、コールに対するサポートを提供する。その結果として、オペレーティングシステムオブジェクトは、必要に応じて、当該オブジェクトの各例示に関する専用データスペースをサポートする。
GDIオブジェクト120は、表XIIIに記載された定義を用いて作成される。
GDIオブジェクト120は、標準Dibエンジンの基礎構造インタフェース(DibengObj)に関するリンク済み参照を含むか、或いは、提供する。基礎構造を表XIVに定義する。
DibengObjの更なる標準基礎構造を表XV及びXVIに定義する。
表XV及びXVIは、直接ドローオブジェクト124を定義するオブジェクトを示す。
16ビット及び32ビット両環境における使用をサポートするためには、16ビット及び32ビット両APIコールをサポートするディバイスドライバ50の構成要素に対する16ビット及び32ビット両ポインタを提供するために、付加ObjInstData基礎構造が用いられる。
最後に、各々のオペレーティングシステムインタフェースオブジェクトの初期化が完了するにつれて、リンク116は、GRXオブジェクト71とGDI及びDDオブジェクト120、122との間で確立される。次に、GRX初期化ルーチンはシェルへ戻る。同様に、全てのオペレーティングシステムインタフェースオブジェクトはシェルオブジェクトにリンクされる。次に、シェルモジュール72の初期化ルーチンが戻る。
IV.操作状態コンフィギュレーション
各オペレーティングシステム及び対応する実行可能モジュールを論理的にカプセル封入するハードウェアインタフェースオブジェクトを備え、単一文脈状態において作動中のディバイスドライバ50の論理的コンフィギュレーションを図4に示す。シェルドライバ74の論理的にカプセル封入されない部分は、一般化されたシェルライブラリ72’として常駐状態を維持する。同様に、ボードドライバ74の論理的にカプセル封入されない部分は、ボードライブラリ74’として常駐状態を維持する。両ライブラリ72’、74’は共通資源として機能し、ディバイスドライバ50の内部機能をサポートイする。従って、初期化されたディバイスドライバ50は、ドライバソフトウェア透視図から、ディバイスドライバ50によって提供されるオペレーティングシステムAPIを凝集的に確立するオペレーティングシステムインタフェースオブジェクト及びディバイスドライバ50とハードウェアインタフェースレジスタ30との間にハードウェアインタフェースを確立するハードウェアインタフェースオブジェクトによって定義される。
A.上位レベル関係
GDIオブジェクト120、直接ドローオブジェクト122、直接3Dオブジェクト124、及び、シャルオブジェクト126を含むオペレーティングシステムインタフェースオブジェクトは、オペレーティングシステム層54に提供される部分APIの定義によって相互に論理的に分割されるオブジェクトの集合を表す。既存のAPIコールサポートの改訂、及び、あらゆる特定のオペレーティングシステムインタフェースオブジェクトへの新規APIコールの追加は、他のオペレーティングシステムインタフェースの具体化または動作(オペレーション)には、設計上、実質的に一切影響を及ぼさない。更に、オペレーティングシステム層54による新規定義によるか、或いは、アプリケーション60から直接発信されたコールをサポートするためかいずれの場合であっても、新規部分APIのサポートは、対応するオペレーティングシステムインタフェースオブジェクト及びカプセル封入されたオペレーティングシステムインタフェースモジュールの定義を介して容易に提供可能である。ただし、新規または改訂したAPIコールが、既存のオペレーティングシステムインタフェースオブジェクトによってサポートされる他のAPIコールのうちの任意のコール以外の非常に異なる機能に関係するか、或いは、前記機能を必要とする場合には、追加ライブラリルーチンが、シェルライブラリ72’に追加されることが必要となることも有り得る。
シェルライブラリ72’は、オペレーティングシステムインターフェイスオブジェクトの全集合によって使用可能な1組の共通または仮想化されたサポート機能を確立するために役立つルーチンのライブラリを提供するために、オペレーティングシステムインタフェースモジュールから論理的に分割される。オペレーティングシステムインタフェースオブジェクトの各々は、(1)明確に定義されたAPIコールセットをサポートし、(2)サポートされた各APIコールに関するパラメータ妥当性検査を提供し、(3)ディバイスドライバ50の動作における文脈変更に際して持続することが望まれるデータオブジェクトに関する専用データスペースを潜在的に管理し、(4)当該オブジェクトによってサポートされるAPIコールの各々を機能的に具体化するために、順序付けられた1つ又は複数の仮想化されたコールをシェルライブラリ72’に発行し、最後に(5)フォーマットし、そして、当該オブジェクトによってサポートされるAPIコールの各々に適した方法においてオペレーティングシステム層54にデータを戻すことが好ましい。
本発明によって認識されるように、ディバイスドライバ50への多くのコールのバリアント(異形体)は、異なる特定のAPIに向けられる。これらのバリアントは、例えば特定の形式およびコールを備えた一連のオペランドデータのように、特有の態様が異なる。従って、特定のオペランドデータ妥当性検査は各APIコールに特有である。従って、各オブジェクトは、APIコール特有のオペランド妥当性検査、および、潜在的には、この或いは他のオペレーティングシステムインタフェースオブジェクトによってサポートされる機能的に類似する他のAPIコールとは対照的に一体化される或るフォーマットへのオペランドデータの変換を実施することが好ましい。従って、1つ又は複数のAPIコールの集合は、ディバイスドライバ50に対して内部的に仮想化される。
各オペレーティングシステムインタフェースオブジェクトは、当該オペレーティングシステムインタフェースオブジェクトによってサポートされるAPIコールのオペランドとして、関係するか、導出されるか、或いは、提供されるデータオブジェクトを保存する必要性に応じて、文脈特有のデータスペースを管理する。
例えば、GDIオブジェクト120は、所定の文脈におけるディスプレイポインタ38の場合と関連したビットマップ済み解像度従属パターン又は色彩を定義するデータオブジェクトを維持可能である。従って、既存の文脈のリザンプションに際して、データオブジェクトは、この文脈においてディスプレイポインタ38のインスタンスを能率的に再実現するために使用可能である。再実現は、一切の参加を必要とすることなしに、或いは、あらゆるアプリケーションプログラム60又は当該オペレーティングシステム層54への通知さえも必要とすることなしに、完全にサポートされることに特に注意されたい。この例におけるデータオブジェクトは、それは、ディスプレイポインタ38のパターン又はカラーを初めにセットしたAPIコールのオペランドとして提供されるオリジナルデータオブジェクトから導出される。例えば新規な色深度に関係する新規文脈が作成される場合において、新規データオブジェクトは、前の文脈のデータオブジェクトからの色深度変換によって導出される。先在している文脈への文脈スイッチに際して、データオブジェクトの先在インスタンスが再使用され、その結果として、当該ディスプレイポインタ38のインスタンスの再実現において情報は一切失われることはない。
同様に、GDIオブジェクト120のインスタンスは、パレット化されたカラーコンテキストにおいて、カラーパレットのみに限らず、順方向及び逆方向のパレット変換表までも、パレット化されたコンテキストに特有のPDevice構造の一部として維持されることが好ましい。Windows’95TMオペレーティングシステムにおいて、オペレーティングシステム層54は、少なくとも当該オペレーティングシステム層54から選定されたコールに関するディスプレイタイプのディバイスドライバにパスされる或る情報を維持するために用いられるフィジカルディバイス(PDevice)構造への単一ポインタをサポートする。PDevice構造の意図は、ハードウェア特有のコンフィギュレーションデータを一般的に記憶するためにディバイスドライバ50によって使用可能な増補可能なデータ構造を提供することにある。本発明は、パレット化されたコンテキストに特有の色変換表を記憶するために用いられるだけでなく、各コンテキストに関する新規PDevice構造を一般的に複製し、そして、対応するコンテキストの色深度と合致する構造を増補する。PDevice構造の好ましい構造を表XVIIに示す。
コンテキスト特有の持続性データオブジェクトとして効果的なカラーパレット表のメンテナンスは、パレット化された文脈への文脈スイッチに際して、カラーパレット及び変換表の迅速な回復を可能にする。特に、パレット化されないコンテキスト期間中、及び、潜在的には、独立したカラーパレット及び変換表定義を備えた独立PDevice構造を使用する他のパレット化されたコンテキスト期間中において、PDevice構造の一部分としてカラーパレット変換表をメンテナンスすることは、同様に、パレットベース製図動作の継続をサポートする。いずれにしても、パレット化されたコンテキストに対して論理的に実行するアプリケーションからドライブされる進行中の製図動作は、カラーパレットデータ及び対応するコンテキストの変換表に対して製図コマンドを変換または分解することによって、現在活動中のコンテキストの色深度またはカラーパレットへ正しく変換可能である。即ち、現在活動中でないコンテキストに対して論理的に実行するアプリケーション60の製図コマンドは、現行コンテキストの色深度において製図コマンドを実施するために現在活動中でないコンテキストのデータオブジェクトの参照により、必要に応じて効果的に再実現される。現在活動中でないコンテキストのデータオブジェクトは、データ構造、特に各コンテキストを定義するために用いられるシェルオブジェクトを探索することによって位置付けすることが出来る。
本発明の好ましい実施例において、オペレーティングシステムインタフェースオブジェクトは、いくぶんの薄い層を表す。当該インタフェースオブジェクトによってサポートされる特有のAPIコールの各々に関する実行のスレッドを定義するために適切であるように、APIコールは、高レベルにおいて、シェルライブラリ72’及びハードウェアオブジェクト130−140に対して実質的に線形コールシーケンスへ仮想化されることが好ましい。一般に、シェルライブラリ72’におけるルーチンへの共通コールの使用を最大化することが望ましい。逆に、オペレーティングシステムインタフェースオブジェクトの機能を実質的にデータ妥当性検査、基礎データ変換、及び、サポートされる各APIコールに関する線形実行スレッドの仕様に制限することが望ましい。
Windows’95TM具体化においては、オペレーティングシステム層54が、かなり原子的なAPIコールをディバイスドライバ50へ発行する。従って、殆ど全てのオペレーティングシステムインタフェースオブジェクトは、APIコールを実施するために必要な実行スレッドを機能的に具体化するために、シェルライブラリ72’及びハードウェアインタフェースオブジェクトに対して少数のコールを実施することになる。性能にとって好都合である場合、或いは、使用が特定のAPIコールに実質的に制限される場合、或る種の実行機能は、オペレーティングシステムインタフェースオブジェクトによって実施可能である。特に、座標の初期クリッピング及び変換は、オブジェクトを描写するためのAPIコールに応答するオペランドの妥当性検査と協調して、オペレーティングシステムインタフェースオブジェクトによって実施可能である。別の出所からの新規データオブジェクトの内容を導出するために色深度変換を実施し、次に、スクリーン32に対して製図動作を実現するために、更に実質的なルーチン、又は、例えば、新規な継続性データオブジェクトの記憶を確立するために用いられるルーチンのような多重APIコールによって一層必要になると推測されるルーチンが、シェルライブラリ72’及びハードウェアインタフェースオブジェクトにおいて適切であるように、実行されることが好ましい。
従って、所要の新規データオブジェクトの作成を要求し、そして、当該オブジェクトに対するポインタを最終的に取り戻して受け取るために、例えば、最初のAPIコールは、オペレーティングシステム54によって、対応するオペレーティングシステムインタフェースオブジェクトに対して行われる。コールの仮想化された線形スレッドは、結果として割当を要求し、記憶装置内にロックし、そして、結果として得られるオブジェクトへポインタを戻すシェルライブラリ72’へのコールと共に始まる。これらのリクエストの実施に際して、シェルライブラリ72’は、オペレーティングシステム層54への要求されるオペレーティングシステムAPIコールを中継する必要性に応じて、オペレーティングシステムインタフェースオブジェクト128を順次にコールする。シェルライブラリ72’によってサポートされるこのような個々の機能の線形化は、プリエンプティブオペランドの妥当性検査およびオペレーティングシステムインタフェースオブジェクトによって実施される仮想化によって可能になる。オペランドデータは、シェルライブラリ72’又はハードウェアインタフェースオブジェクトの任意のオブジェクトが、特定のAPIコールから後続する各処理過程に適したフォーム及びフォーマットにおいてコールされる以前に、確立される。従って、例外的条件を扱うため、或いは、データが利用可能か、又は、処理用として受け入れ可能なフォーマットであるかどうかを決定するための全ての、或いは、殆ど全部の条件付ブランチは、オペレーティングシステムインタフェースオブジェクトのレベル以下が除去される。即ち、オペランドデータの存在、フォーム及びフォーマットに関してチェックするための進行中の条件付きブランチング無しに、仮想化されたAPIコールの具体化が実質的に線形化される。更に、現行色深度および機能に適した解像度に対する機能ポインタを備えたハードウェアインタフェースオブジェクトを初期化すると、ディスプレイ32の現行作動状態に関してチェック及び調節するために進行中の条件付きブランチングを排除する。
次に、オペレーティングシステムオブジェクトに対するその次のAPIコールは、新規に製作されたデータオブジェクトにおける識別されたデータオブジェクトの変換に向けられることもある。オペレーティングシステムインタフェースオブジェクトを介して行われるその次のAPIコールは、以前に作成され、かつ、変換されたAPIコールによって識別されるデータオブジェクトを用いて、特有の製図動作を指定することが出来る。各API製図コールは、1つ又は複数のコールによる実質的に線形のシーケンスを、特定の製図動作を実現するために適切であるように、シェルライブラリ72’及びハードウェアインタフェースオブジェクトへ再び発行することにより、受取りオペレーティングシステムインタフェースオブジェクトによって実行される。
従って、オペレーティングシステムインタフェースオブジェクトの各々は、最小複製コードを含んだ状態で、オペランド検証およびフォーマット変換を実施することによってコールの仮想化を最大にするように定義される。従って、シェルライブラリ72’は、オリジナルのオペランドデータの妥当性再検査、変換、または、再フォーマット化を反復することに起因する実行性能的な罰を受けることなしに最大限に使用される。更に、オペレーティングシステムインタフェースオブジェクトは、コントローラ19の動作特性に関して連続的に再評価および調節する必要性なしに、即座に利用可能な機能ポインタを介して、ハードウェアインタフェースオブジェクトへ直接コールアクセスする機能を備える。
シェルライブラリ72’は、オペレーティングシステムインタフェースオブジェクトから受信した共通仮想化されたコールの効果的拡張および具体化を同様に提供可能である。シェルライブラリ72’へのこの種のコールは、結果的にハードウェア特有の機能を呼び出すために、ハードウェアインタフェースオブジェクトに向けられた一般的に短く実質的に線形のコールシーケンスに拡張されることが好ましい。シェルライブラリ72’によってコールされたハードウェアインタフェースオブジェクトの特定の集合または部分集合は、オペレーティングシステムインタフェースオブジェクトから受信した特定のコールに高度に依存する。ただし、シェルライブラリ72’によって行われたコールの各々は、ハードウェアインタフェースオブジェクトデータ構造の仮想化された定義の結果として、ハードウェアインタフェースオブジェクトの集合と効果的な仮想関係を保持する。即ち、ハードウェア金属製品インタフェースオブジェクトの構造定義は、当該オブジェクトによってカプセル封入された特定のハードウェアインタフェースモジュールの具体化から独立した、各オブジェクトタイプに関して実質的に固定される。
従って、オペレーティングシステムインタフェースオブジェクト並びにシェルライブラリ72’からハードウェアインタフェースにオブジェクトまでのコールは、ハードウェアインターフェイスモジュールの実際の具体化から抽出される。APIコールを実現するために用いられる短く実質的に線形のコールシーケンスを使用することによって、仮想化されたAPIコールの実行速度は最大化される。
B.下位レベル構成(コンフィギュレーション)の関係
ハードウェアインタフェースオブジェクトとオペレーティングシステムインタフェースオブジェクトとは、両者共に、コントローラ19のインタフェースレジスタ30とインターフェイスするために必要とされるハードウェア特有のオペレーションを定義する薄い層として実現されることが好ましいという点において類似する。ハードウェアインタフェースオブジェクトは、(1)サポート支援支持物‖特定タイプのハードウェアサブエレメントに特有の明確に定義されたオペレーションの集合をサポートし、(2)サポートされる各オペレーションの機能を実現するために、関連ハードウェアインタフェースレジスタの少なくとも論理的なプログラミングを提供し、(3)当該ディバイスドライバ50のオペレーションにおいてコンテキストを通じて持続することが望まれるデータオブジェクトに関する専用データスペースを潜在的に管理し、そして、最後に(4)インタフェースレジスタ30から直接的或いは間接的に読取られたデータを返すことに機能的に制約されることが好ましい。
特定のタイプのハードウェアインタフェースオブジェクトによってサポートされるオペレーションは、オブジェクト構造の一部として定義される。一般に、ハードウェアインタフェースオブジェクトへのコールは、結果的に、インタフェースレジスタ30の1つ又は複数のレジスタに対するリファレンス及び参照されたレジスタにプログラムされるべきデータ値のストリングを生成する。レジスタのプログラミングは、実際には、ボードライブラリ74’へのコールに応答して実施されることが好ましい。シェルライブラリ72’の場合と同様に、ボードライブラリ74’は、ハードウェアインタフェースオブジェクトによって使用される一般化されるか或いは共通のルーチンを終結する。従って、コードの重複は全体的に減じられ、そして、記憶装置16のアドレススペース内のディスプレイバッファ20をロードし、定義し、そして、管理するためのルーチンを含む詳細なレジスタインタフェースルーチンは、当該ディバイスドライバ50の他の全ての態様から実質的に分離された明確に定義された場所に主として配置される。この場合における1つの重要な例外は、グラフィックスハードウェアインタフェースオブジェクト138に関係して発生する。性能上の目的から、このオブジェクトは、レジスタインタフェース30及びディスプレイバッファ20に対して直接作動することが好ましい。従って、ボードライブラリ74’は、ディスプレイバッファ20の現行ロケーション及び定義を戻すルーチンを提供することが好ましい。コントローラ19の対応するサブエレメントのハードウェアインタフェースへの直接アクセス機能を備えることにより、ビデオ及び3Dハードウェアインタフェースオブジェクト136、140も、同様に、利益を得るはずであることが予測される。
従って、ハードウェアインタフェースオブジェクトを介してオペレーティングシステムインタフェースの間に成立する効率的に成層化かつ仮想化された関係が、本発明によって確立される。この仮想化された関係は、当該ディバイスドライバ50への2つの異なるAPIコールの実行フローを追跡することにより、実演により容易に示される。
V.操作状態コンテキスト及び態様の切換え(スイッチング)
本発明の好ましい実施例において、ビデオディスプレイコントローラ19は、多くの異なる水平及び垂直或いは空間的解像度、及び、多くの異なる色深度において動作可能である。通常のコンピュータシステム10は、異なる空間解像度および色深度に対して最適的に作動するアプリケーション60の多様性をしばしば実行する。実際問題として、コンピュータシステム10において共同実行することを試みるアプリケーション60の空間および色深度に関する必要条件および操作上の制限条件は、空間解像度と色深度が相互に排他的でない場合には、アプリケーション60を継続実行するためにはしばしば最適でないような空間解像度及び色深度に共同実行を制限することがあり得る。
ディバイスドライバ50のアーキテクチャは、本発明に従い、ディバイスドライバ50の作動状態において、単独およびコンテキストスイッチ(切換え)との組合わせにより、モードスイッチ(切換え)動作を提供する。モードスイッチ及びコンテキストスイチの両切換えは、アプリケーション60及びオペレーティングシステム層54のコンテキスト状態から実質的に独立して実施され、そして、特に管理される。既存のモードの特定のアスペクトに特有なデータが、モードスイッチを通じて継続しなければならない場合には、モードスイッチは単独で実施可能である。コンテキストスイッチは、独立したコンテキストにおけるモードデータの継続的記憶を提供するために、モードスイッチと組合わされてディバイスドライバ50によって実施される。従って、ディバイスドライバコンテキストスイッチ(切換え)は、特定のコンテキストと関連した持続的データオブジェクトにおける状態およびモード特有データの記憶により、状態的コントローラのモード変更をサポートするために用いられる。ディバイスドライバ50によるコンテキスト文スイッチのコンテキスト及び動作の管理は、アプリケーションプログラム60を変更することなく、オペレーティングシステム核56に極く僅かな特有の修正を施すことによりコンテキスト文切換えを可能にする。
A.一定コンテキストモードのスイッチ(切換え)
モードスイッチをサポートするためには、支援支持物にオペレーティングシステム核56は、そのウィンドウが現行ポインタの焦点調節を有するアプリケーション60用として事前に選定された空間解像度へビデオコントローラ19を切換えるために、ディバイスドライバ50に向けてAPIコールを発信する核56へのパッチ62をインストールすることによって修正される。更に進歩したオペレーティングシステム54は、オペレーティングシステムパッチをインストールする必要性なしに使用できる事象の生成を組み込み方式により提供可能である。パッチインモードにおいて設定されたAPIコールはシェルオブジェクトにフックされ、そして、物理的ディスプレイ32の所望新規空間解像度を提供することが好ましい。APIコールは、所要空間解像度と組合わせた色深度も指定するはずである。所望色深度および空間解像度の両方が現行色深および空間解像度と同じである場合には、単にAPIコールが戻るだけである。空間解像度だけが異なる場合には、モード切換え(スイッチ)の実施だけが必要である。モードスイッチを実施するために必要とされるコントローラモード設定変更は、ディバイスドライバ50のその時点現在のコンテキストにおいて実施される。
本発明の好ましい実施例によれば、1つの単一コンテキスト内におけるモード設定変更は、主として、シェルオブジェクト126及びシェルライブラリ72’の制御の下に実施される。シェルオブジェクト126へのAPIコールは、モード設定が実施されるべきであることを指定する。シェルオブジェクト126は、所望の色深度及び空間解像度を獲得するために、O/Sオブジェクト128を介して、オペレーティングシステム層54にコールする。シェルオブジェクト126は、最初に、所望空間解像度を指定する返されたオペランドの妥当性を確認する。次に、オペレーティングシステム及びハードウェアインタフェースオブジェクトの各々を順次にコールするために、最初に「モード変更直前」オペランドを用い、次に、「モード変更」オペランドを使用し、最後に「モード変更完了」オペランドを用いて、シェルライブラリ72’のセットモードルーチンが、シェルオブジェクト126によって、コールされる。
「モード変更直前」オペランドを用いた最初のコールは、コントローラ19に対してドライバ50の状態を静止させるために必要な事象のシーケンスをディバイスドライバ50内において開始する。特に、シェルライブラリ72’のモード設定ルーチンは、モード設定に参加することが必要な現行コンテキスト内においてオペレーティングシステム及びハードウェアインタフェースオブジェクトの各々を識別するために作動する。これらのインタフェースオブジェクトは、オブジェクト特有のRegClassHandler構造に対して有効または非無効のポインタを有するオブジェクトとして識別される。次に、モード設定コールは、参加している各オブジェクトに対して順々に配置される。これに応答して、各オブジェクトは、現行状態データを、例えば現行PDevice及びGDI_Infotable構造のようなシステムデータ構造に、或いは、オブジェクト自体の専用データスペースに、現行コンテキスト内に明確に定義された実行状態を確立するために適切であるように、順々に保管するために実行する。最後の参加オブジェクトの戻りが完了すると、ディバイスドライバ50の動作の実質的な静止が完了する。次に、シェルライブラリ72’は、シェルオブジェクト126に戻る。次に、「モード更変」を指定する第2のモード設定コールは、シェルオブジェクト126によって、シェルライブラリ72’に発信される。「モード変更」オペランドを用いてシェルライブラリ72’によりコールされると、ボードライブラリ74’は、空間解像度と色深度との所望組合わせに対応する「SectionName」を構成する。次に、所定の「SectionName」によって識別されるセクションを位置決めするにはsystem.iniファイルの場合と全体的に同じ構造シンタックス(構文)を有することが好ましいmodes.dmmコンフィギュレーションファイルを走査するために、オペレーティングシステムインタフェースオブジェクト128を介して、O/S APIコールが行われる。Windows’95TMの具体化例において、画素当たり8ビットの色深度であって1024x768の空間解像度を定義するSectionHeaderは、[1024,768,8]として指定される。
所定のSectionHeaderに後続するテキストは、シェルライブラリ72’によって読み取られ、そして、パーズ(オペランド解析)される。このテキストは、オペレーションの新規コントローラモードを設定するためにコントローラ19の各参加サブエレメントに対して実施されなければならない特定のモード設定命令の構造化された仕様を表す。好ましい実施例において、モード設定命令は、RBGISTERCLASS、COMMAND、及び、アーギュメントのようなコンマで区切られた項で構成されたライン指向文である。好ましい実施例において、コントローラ19のどのサブエレメントが特定の命令に応答してプログラムされるべきかを最終的に決定するために、RegClassHandler構造の「クラス名」フィールドは、命令のREGISTERCLASS項に相互関係を持つはずである。
現在4つの直接実行コマンドが有る、即ち、ラン(RUN)、リード/マスク/ライト(RMW)、ディレイ(DLY)、及び、Int10(I10)である。
本発明の好ましい実施例においてサポートされる第5番目の命令は、論理的に含み、それによってパーズすることをシェルライブラリ72’のパージングルーチンに指示する組込み指令疑似命令であり、modes.dmmファイルにおける組込み指令指定されたSectionNameの下で用いられる。ランコマンドの命令フォーマットを次に示す:
REGISTERCLASS、RUN、REGISTERNAME、value1、value2、value3
REGISTERNAME項は、RBGISTERCLASS結合を使用し、RegclassMap構造へのRegclassHandler構造を介して追跡可能な論理名を提供する。論理REGISTERNAME名は、レジスタインタフェース30内の特定レジスタに究極的に分解される論理ポートアドレスに対するRegclassMapにおいて定義される。命令の実行において、シェルライブラリ72’のパージングルーチンは、REGISTERNAMEのポートアドレスに第1の値「value1」を記入する。次に、RegClassMapにおいて識別されるその次の順次的なポートアドレスには、第2の値「value2」が記入される。従って、論理的に順序付けられたポートのアドレスには、特定のランコマンドによって提供される全ての値の記入が完了するまで、連続した値が記入される。
リード/マスク/ライトコマンドの命令フォーマットを次に示す:
REGISTERCLASS、RMW、REGISTERNAME、ANDMask、XORMask
この命令の実行に際して、シェルライブラリ72’のパージングルーチンは、最初に、REGISTERNAMEに対応するポートアドレスから値を読み取り、ANDMaskの値の2進ANDを実施し、そして、XORMaskの結果の2進XORを実施する。次に、上記の結果が、REGISTERNAMEポートのアドレスへ戻って記入される。
ディレイコマンドの命令フォーマットを次に示す:
SHELL、DLY、DelayValue
この命令のRegisterClassは常に「SHELL」である。その理由は、一切のハードウェアインタフェースオブジェクトは、当該命令の実行には直接的に関係していないことに因る。この命令の実行に際して、シェルライブラリ72’のパージングルーチンは、50マイクロ秒の倍数であることが好ましいDelayValueによって指定された期間中、ソフトウェアベース又はハードウェアベースいずれかの待ちを実行する。ディレイ命令は、ハードウェアプログラミングのセットアップタイムは守られなければならないが、レジスタによる読取り可能信号がハードウェアによって供給されない場合に有用である。遅延時間が終了した後においては、パージングルーチンは単純に継続する。
Int10コマンドの命令フォーマットを次に示す:
SHELL、I10、EAX、EBX、ECX、EDX
この場合にも、この命令のRegisterClassは、常に「SHELL」である。その理由は、一切のハードウェアインタフェースオブジェクトは、当該命令の実行には直接的に関係していないことに因る。シェルライブラリ72’のパージングルーチンは、ソフトウェア割込み10を実施し、そして、割込みに際して対応するCPUレジスタ内に、当該命令のアーギュメント(引き数)を提供するためにO/Sオブジェクト128をコールすることによって、この命令を実行する。
最後に、組み込みコマンド特有の命令フォーマットを次に示す:
SHELL、INC、SectionName
組み込みコマンドは、modes.dimmファイルの現行セクションのパージングを効果的に中断し、そして、「SectionName」によって識別されるセクションをパーズすることをシェルライブラリ72’のパージングルーチンに指示する。含まれるセクションのシェルライブラリ72’によるパージングが終了した後で、中断されたセクションのパージングが再開する。
modes.dimmファイルによって提供された命令の実行に際して、シェルライブラリ72’は、特定の命令を対応するハードウェアインタフェースオブジェクトと結合するために、RBGISTERCLASS項を利用する。命令は最終的にコントローラ19のオペレーティングモードのプログラミングに向けられるので、本発明の好ましい実施例において、オペレーティングシステムインタフェースオブジェクトは、命令の一切のREGISTERCLASS項によって引用されることはない。
命令が実行されるにつれて、当該命令の実行に必要なリード/ライトオペレーションを実施するために、対応するRegClassHandler構造におけるRead_reg及びWrite_regエントリがパージングルーチンによってコールされる。RegClassHandler構造はオブジェクトに特有であるので、Read_reg及びWrite_reg機能は、同様に、REGISTERNAME項によって識別される特定のオブジェクトに特有である。
本発明の好ましい実施例において、命令の実行においてレジスタ/アーギュメントペアが獲得される場合には、各オブジェクトのWrite_reg機能は、レジスタ/アーギュメントペアを、実際に記入されるべきレジスタのハードウェア特有表現に効果的に変換することを提供する。レジスタ/アーギュメントペアは、当該命令の実行によって、フラットであって順序付けられた論理的レジスタモデルに効果的に記入される。Write_reg機能は、当該ペアをサブエレメントハードウェア特有モデルに変換する。例えば、DACインタフェースオブジェクト130特有の情況において、論理レジスタ指標値、及び、索引論理レジスタに記憶されるべき値を用いてプログラムされる次の順次ベースレジスタによってベース物理レジスタがプログラムされることを要求する多重化レジスタモデルへの変換が行われる。従って、DACインターフェイスオブジェクト130のWrite_reg機能へのコールにおいては順次レジスタが引用されるが、物理ベースレジスタの単一ペア作成は当該機能によって記入される。
各オブジェクトのRead_reg機能は、同様の変換を実施する。引用された論理レジスタは、対応する物理ベースレジスタに対する基準に変換される。DACインターフェイスオブジェクト130の場合においては、正しい値が読み取り可能であるように、論理レジスタを定義するインデックスを用いたベース物理レジスタのプログラミングが変換に含まれる。
他のインタフェースオブジェクトは、コントローラ19の他のサブエレメントのプログラミングに適するように、当該命令のフラットな順次レジスタモデルの直列またはビット順次モデルへの変換を提供可能である。従って、順次レジスタ/アーギュメントペアは、コントローラ19の特有サブエレメントのプログラミングに適したプログラム値のビット直列シーケンスが後続する論理レジスタ指標値に変換される。
一例として、Diamond Stealth 64 Video DRAMビデオコントローラは、S3 Vision868グラフィックスアクセラレータチップを利用して、グラフィックスモードを作動可能化するように選択的にプログラムすることが可能である:
グラフィックスモードの非作動化:
1024x768x8モードへのスイッチ:
好ましい実施例において、ハードウェアインタフェースオブジェクトのWrite_reg及びRead_reg機能は、レジスタインターフェイス30に対するハードウェア読み及び書きオペレーションを実際に実施するために、ボードライブラリ74’における多数の機能を利用する。この間接性追加レベルは、コントローラ19の異なるハードウェアサブエレメントに関して、コントローラ19の特定モデルに応じて異なる物理アドレスに存在することを可能にする。従って、特定のハードウェアインタフェースオブジェクトは、コントローラ19のサブエレメントの特定プログラミングを十分に表すが、ボードライブラリ74’は、コンピュータシステム10の物理アドレス空間内において、サブ-エレメントを暗黙裡に位置決めする。従って、Write_reg機能コールを介してDACインタフェースオブジェクトによって識別されるベース物理レジスタは、それ自体、DACサブエレメントに論理的に関係する。ボードライブラリ74’は、レジスタインターフェイス30の物理システムアドレス空間内においてレジスタを位置決めするために、DACベース物理レジスタ用の物理アドレッシングオフセットを供給する。
物理アドレッシングオフセットを確立するために、ボードライブラリ74’は、結果的に、コントローラの主要タイプのサブエレメントに特有であるような多数の読み及び書きルーチンを提供する。例えば、クロックインタフェースオブジェクトは、コントローラ19の明確に定義された特有のサブエレメントを制御するが、通常は、DACサブエレメントと関連したレジスタ内に設置されるか或いはこれを介してアクセス可能であるようなプログラム可能クロックゼネレータを参照する。従って、DAC及びClock両インタフェースオブジェクト用としてボードライブラリ74’によって提供される物理アドレッシングオフセットは同じであるはずである。
ボードライブラリ74’は、フラットな順次物理レジスタセットをアドレスするハードウェアインタフェースオブジェクトに関するBoarRead_reg及びBoardWrite_reg機能をサポートすることが好ましい。BoardRead_DAC、BoardWrite_DAC、及び、BoardWrite_DAC_Array機能は、多重化レジスタの読み書きをサポートし、そして、コントローラ19によって確立される場合におけるDACサブエレメントの物理レジスタアドレス空間内に配置されたカラーパレットアレイに記入するために、ボードライブラリ74’によって提供される。
最後に、コントローラ19の直列プログラムされたサブエレメントへの直列記入オペレーションをサポートするために、BoardWrite_SerialDevice_start及びBoardWrite_SerialDevice_end機能が提供される。
modes.dmmファイルから走査された命令が一旦実行されると、コントローラ19のオペレーティングモードは、所望の空間解像度および色深度の対応するいうに変更される。次に、シェルライブラリ72’は、当該コールに対するオペランドとしての「変更モード」を有するインタフェースオブジェクトの参加集合のモード設定機能の各々に対してコールする。インタフェースオブジェクトは、コントローラ19の新規オペレーティングモードを確立するために必要な任意のサブエレメント特有のルーチンを実行するために、このコールを利用する。レジスタインタフェース30におけるレジスタに必要なあらゆるプログラミング又はディスプレイバッファ20の直接操作はこの時に実施される。最後のインタフェースオブジェクトが、このモード設定コールから戻った場合には、シェルライブラリ72’がシェルオブジェクト126へ戻る。
次に、「モード変更完了」オペランドを用いた、当該モード設定における各参加インタフェースオブジェクトへの第3及び最終コールが、シェルライブラリ72’によって行われる。オペレーティングシステムインタフェースオブジェクトに先立って、参加ハードウェアインタフェースオブジェクトがコールされる。各インタフェースオブジェクトがコールされるにつれて、当該オブジェクトは、コントローラ19の新規オペレーティングモードにおけるコントローラ19のサブエレメントのオペレーションをサポートするために必要な任意のハードウェア特有オペレーションを実行する。一般に、ハードウェアインタフェースオブジェクトは、このコールに応答して単純に戻る。特定のオブジェクトが空間解像度、色深度、または、他のディバイス特性に基づく具体化依存性を有する場合には、1つの例外が存在する。例えば、Graphicsオブジェクト138のようなハードウェアインタフェースオブジェクトによってカプセル封入されたモジュールが、例えば色深度によって区別される同じ論理機能をサポートする多重ルーチンを提示する場合には、当該オブジェクト構造のコールエントリポイントにおける機能ポインタは、新規色深度に適したルーチンをポイントするように更新される。
オペレーティングシステムインタフェースオブジェクトは、ディスプレイ解像度、色深度、または、当該コントローラ19の新規オペレーティングモードの他のディバイス特性に対応するように、現行コンテキストにおいて存在するデータオブジェクトを再実現するために、この「変更モード」コールを利用することが好ましい。特に、例えばGDIオブジェクトのようなオペレーティングシステムインタフェースオブジェクトは、ディスプレイ32に目に見える特徴を表示するビットマップデータオブジェクトを管理し続けることが可能である。従って、特定のオペレーティングシステムオブジェクトは、先ず、オペレーティングシステムインタフェースオブジェクトによって頻繁に使用される任意の変更済みハードウェアインタフェースオブジェクト機能ポインタを、時宜を得たコールの発信をサポートするオペレーティングシステムインタフェースオブジェクトのローカルコード空間にコピーすることが好ましい。次に、新規ディスプレイ32の空間解像度にマッチするように実際のビットマップ解像度データオブジェクトを調節するために、ビットマップの線形補間が実施されることが好ましい。
オペレーティングシステムインタフェースオブジェクトは、必要に応じて、対応する更新オペレーションを、ディスプレイ32を効果的にリフレッシュするように導くことにより最終的に「モード変更完了」モード設定コールに応答する。この種の更新は、コントローラ19の新規オペレーティングモードにおいてディスプレイ32上に見えるデータオブジェクトの再実現を完了したあらゆるオペレーティングシステムインタフェースオブジェクトに関して特に実施される。一旦スクリーンリフッレシュが完了すると、シェルライブラリモード設定ルーチンはシェルオブジェクトへ戻り、その結果として、前記のシェルオブジェクトがモード設定APIコールから戻る。このようにして、現行コンテキスト内においてモードを変更する過程が終了する。
A.組合わせコンテキスト及びモードスイッチ(切換え)
好ましい実施例において、コンテキストスイッチ(文脈切換え)は、新規色深度へのコントローラ19モード設定をサポートするために、モードスイッチ(態様切換え)と組合わされて実施される。コントローラ19の現行オペレーティングモードの色深度と異なる特定の色深度を予測して実行するアプリケーション60の代わりのAPIコールは、現行色深度に従わなければならない。特に、この種のAPIコールが、持続的パレット又はカラーマップの存在を信頼して、ディバイスドライバ50に対して行われる場合には、コンテキストのサポートが望ましい。代替案として、オペレーティングシステムによってサポートされても差し支えない。オペレーティングシステム核56へのコール可能なエントリポイントは、目標色深度へのO/S APIコールインタフェースにおけるか、或いは、それ以上において、全ての常駐ビットマップの色深度変換を提供することが可能である。ただし、この種変換の効率及び可逆性、及び、実際に可変であるビットマップの一定のフォーム及びフォーマットに関する持続的な仮定に基づくオペレーティングシステム層54と相互作動するアプリケーションとディバイスドライバとの間の潜在的非互換性に関して問題が存在する可能性がある。従って、ディバイスドライバ自体内におけるコンテキストの切換え、即ち、分離されることは、スイッチング交換切換えは、多くの異なるオペレーティングシステム具体化の中においても一層強固かつ移植的であるものと推察される。
パレット及び他の持続的データは、各コンテキストによって維持され、従って、この種のコンテキストが現在活動中でない場合であっても、基準として利用可能である。コンテキストは、ディバイスドライバ50の初期化に際して、デフォルトによって作成される。追加コンテキストは、新規変更へのモード変更に関してディバイスドライバ50に対して行われたAPIコールに応答して、必要に応じて作成される。
さて、図5aを参照することとし、シェルライブラリ72’は、少なくとも初期において、1つの単一シェルオブジェクト150、及び、潜在的に、追加シェルオブジェクト152、154、156を含むメモリプール148を管理する。シェルオブジェクト150、152、154、156の各々は、ディバイスドライバ50内の独立したコンテキストを表す。1つ又は複数のシェルオブジェクト150、152、154、156は、任意の時点において、1つ又は複数の現在実行中のアプリケーション60の色深度を表すために適切であるように、プール148内に存在可能である。その時に実行中の一切のアプリケーション60がコンテキストによってサポートされる色深度を引用しない場合に、シェルオブジェクト150によって表されるコンテキストを含むコンテキストは、後で閉じていても差し支えない。シェルオブジェクト148のプールを管理することに加えて、シェルライブラリ72’は、同様に、現行コンテキストポインタ158を維持する。このポインタ158は、コントローラ19の現行オペレーティングモードに対応するか、或いは、これを論理的に定義する特定のシェルオブジェクト150、152、154、156を識別するために用いられる。
図5bに全体的に示すように、ディバイスドライバ50のオペレーションにおけるコンテキストを定義するためにシェルオブジェクトを使用することにより、ディバイスドライバ50内のそれぞれのコンテキストにおいて明白なインタフェースオブジェクト170、172の例示を可能にする。インタフェースオブジェクト170、172のそれぞれの例示に関して、専用データ空間174、176は、それぞれのインタフェースオブジェクト170、172に割当てられ、そして、これと対応付けられる。ただし、特定のインターフェイスオブジェクト170の全ての例示は、共用インタフェースモジュール178を共同でカプセル封入する。インタフェースモジュール178の実行に際して、専用データスペース174、176への参照は、それぞれのインタフェースオブジェクト170、172に設立された独立ポインタを介して作動可能化される。従って、インタフェースモジュール178は、特定のコンテキストにおいて、正しいオブジェクトに暗黙裡に接続される。即ち、モジュール178は、多重コンテキストの存在に関するアスペクトを明白に管理することを要求されない。むしろ、コンテキストの管理および操作機能は終結し、そして、シェルライブラリ72’のルーチンによって実施される。
コンテキストスイッチを実施する過程は、図6a及び6bに示す過程段階に従って発生する。コンテキストスイッチは、例えば、現行コンテキストの色深度と異なる色深度へのモード変更のような現行モードの或る種のアスペクトに持続性を要求するオペレーティングモードへのモード変更を少なくとも推論的に指定するAPIコールを受け取るシェルオブジェクトの現在活動中のコンテキスト例示150と共に始まる。前の場合と同様に、シェルオブジェクト150は、APIコールのオペランドの初期妥当性検査を実施し、コンテキストスイッチが必要とされることを判定し、そして、新規コンテキスト作成コール180をシェルライブラリ72’に発信する。シェルライブラリ72’は、所望の色深度を有するコンテキストが既に存在するかどうかを判定するために184その時点においてコンテキストプール148内に存在する可能性のあるシェルオブジェクトの存在例示の各々を調査する。例えば、シェルオブジェクト152のような、所望の色深度を有するシェルオブジェクトの例示が存在する場合には、シェルライブラリ72’への新規コンテキスト作成コールはシェルオブジェクト150に戻る。
ただし、その時点において所望のコンテキストが存在しない場合には、新規シェルオブジェクト例示が作成されるはずである186。この新規シェルオブジェクトの作成に先立ち、コンテキスト変更が、以前にはサポートされなかった色深度に関するサポートを必要とするような第1の変更である場合には、シェルライブラリ72’は、対応する色深度変換に関するサポートを有するように修正可能である。本発明の好ましい実施例において、シェルライブラリ72’は、第2の存在コンテキストの作成に関して、単に利便性に関わる問題として、全ての可能な色深度変換に関するサポートを有するように修正される。詳細には、ただ1つの単一コンテキストが用いられている場合であっても、色深度変換が、各々の、及び、全ての製図オペレーションに適用可能であるかどうかに関する一定の条件付きテストを排除するように、現行色深度と目標色深度とを判定し、両者の間の変換を行うためのルーチンは、シェルライブラリ72’のコードに直接パッチされる。
本発明の色深度ルーチンは、8、16、24、及び、32ビットの色深度の間におけるディバイス従属ビットマップの極めて迅速な変換を提供する。16、24、及び、32ビット色深度の間の変換は、現行ディスプレイ色深度における各ディスプレイ画素に関して記憶されたRGE色値順組(カラーバリュータプル)の間に直接マッピングすることにより実施される。先ず、ソースアプリケーションのコンテキストPDevice記憶されたカラーパレット及び変換表においてRGBカラーバリュータプル(色値順組)を調べ、そして、次に、再び、現行ディスプレイ色深度への直接RGBカラーマッピングを実施することにより、画素当たり8ビットのカラーインデックス(色指標)を用いてパレット化された色空間からの変換が実施される。
16、24、または、32ビットの色深度から8ビットパレット化フォームへの変換は更にある程度複雑である。この変換には、変換されつつある各RGBタプル(順組)のための最適条件(ベストフィット)に関する8ビット色空間の調査が必要である。一般に、最適カラーマッピングを見付けるためには、最小平均二乗アルゴリズムを使用することが出来る。重要な性能改良は、変換された色をキャッシュすることによって達成できる。例えば、32ビットRGBタプルを8ビットパレットインデックスに変換する際には、8,192個の32ビットキャッシュエントリを備えた基礎キャッシュテーブルを用いることが出来る。各10ビットRGB値が3ビットだけ精度低下されると、21ビットタプルになる。従って、現行カラーパレットに対して極めて迅速な最小平均二乗最適化を実施することによって決定される8ビットパレットインデックス値は、迅速変換参照表を確立するために、各21ビットタプルを用いてキャッシュすることが出来る。次に、後続する色変換により、先ず、事前変換されたパレットインデックスに関する表を探索することができる。従って、全ての色深度変換は、シェルライブラリ72’により、各API開始製図オペレーションの一部分として直接サポートされることが可能である。
新規シェルオブジェクトの例示は、シェルインターフェイスモジュールの初期化ルーチンをコールすることによって実施される。ディバイスドライバ50のオリジナルな初期化の場合と同様に、ここではシェルオブジェクト152の相当する新規シェルオブジェクト例示は割当てられ、そして、初期化される。次に、ボードライブラリ74’への初期化コールが行われる。ボードライブラリ74’は、シェルライブラリ72’と同様に、コントローラ19の全てのオペレーティングモードを通じて定数であるので、ボードライブラリ74’に対して必要なリファレンスは、個々のハードウェアインタフェースオブジェクトに対する場合と異なり、新規シェルオブジェクト152に接続される。次に、ボードライブラリ74’は、オブジェクトの新規例示を作成し、そして、オブジェクトを新規シェルオブジェクト152のボード構造へ接続するために、ハードウェアインタフェースモジュールの各々の初期化ルーチンを順々にコールする。例えば各モジュールのRegClassHandler構造の内容のように色深度スイッチを通じて変化しない定数は、完全に再作成されるか、或いは、単にコピーされるか、或いは、現行コンテキスト文のオブジェクトから引用されるかのいずれかであることが可能である。例えば、グラフィックスハードウェアインタフェースオブジェクト138の初期化に際して、新規専用ハードウェアアクセラレータコードデータオブジェクトは作成可能である。このデータオブジェクトによって記憶されたコードは、初期化定数、または、コントローラ19のグラフィックスサブエレメントのハードウェアアクセラレータを初期化するためにダウンロードされるシーケンサコードであっても差し支えない。従って、異なるシーケンサコードの集合および部分集合は、異なるコンテキストにおけるグラフィックスインタフェースオブジェクトによって管理可能である。1つの単一オペレーティングモード内において、アクセラレータコードがグラフィックスサブエレメントのオペレーションに際して、必要に応じて、おそらく、異なる製図コマンドの最適実行に関する加速度アルゴリズムを調節するために動的に交換可能である場合には、この能力は特別の意味を持つ。次に、ボードライブラリ初期化ルーチンは、シェルライブラリ72に戻る。
次に、残りのオペレーティングシステムインタフェースモジュールの初期化ルーチンは、新規シェルオブジェクト152の初期化を完成するためにコールされる。各モジュールは、対応するインタフェースオブジェクトの新規例示を作成し、オブジェクトのために必要なあらゆる専用データ空間を作成し、その後で、当該オブジェクトを新規シェルオブジェクト152に接続する。特に、直接ドローオペレーティングシステムインタフェースオブジェクト122の初期化は、新規コンテキスト特有のPDevice構造、及び、潜在的に、新規GDI_Infotable構造の作成を提供する。ハードウェアインタフェースの場合と同様に、これらの構造によって記憶されているデータは完全に再作成可能であり、或いは、現行コンテキストの対応する構造からのデータは、新規構造を初期化するために用いることが出来る。ただし、新規PDevice構造におけるデータは、新規コンテキストの色深度を定義するために、明確に修正される。同様に、GDI_Infotableの画素深度フィールドは、新規色深度を反映するために、同様に修正される。それ以降はシェルライブラリ72’によって管理されるこれら2つの新規構造に対するポインタは、新規コンテキストのシェルオブジェクト152と論理的に対応付けられる。
従って、当該シェルオブジェクト150によって表される現行コンテキストと論理的に異なるコンテキストを定義するために、オペレーティングシステム及びハードウェアインタフェースオブジェクト両方の完全な補集合が作成される。次に、実行は、シェルライブラリ72’からシェルオブジェクト150に戻る。
次に、シェルオブジェクト150は、新規コンテキストを実現するために、ボードライブラリ72’にコールを発信する200。好ましい実施例においてはコントローラ19の所望オペレーティングモードに関する所望色深度及び空間解像度を含むシェルオブジェクト150は、新規コンテキストの特性を識別するために十分なオペランドを提供する。これに応答して、シェルライブラリ72’は、シェルオブジェクトを選択するために、例えばシェルオブジェクト152のような所望の新規コンテキストに対応するコンテキストプール148を探索する。
次に、コンテキストスイッチ(切換え)を実際に実施するための準備に際して、シェルライブラリ72’は、「モード変更直前」オペランドを有するモード設定コールをモード設定206に参加するはずの各インタフェースオブジェクトへ発信する。以前と同様に、参加するインタフェースオブジェクトの各々は、モードスイッチばかりでなくコンテキストスイッチにおいてもあらゆる状態関連情報が一貫して持続することを保証するために、これらの情報を対応する専用データスペースに保管する。
参加インタフェースオブジェクトの最後のオブジェクトからの復帰に際して、シェルライブラリ72’は、現行コンテキストを定義するシェルオブジェクトとして新規シェルオブジェクト152をインストールする。同時に、シェルライブラリ72’は、PDevice構造、及び、ディバイスドライバ50への次のAPIコールにおいてオペレーティングシステム層によって参照されるはずの構造としてシェルオブジェクト152と論理的に関連したGDI_Infotable構造を確立する。
次に、シェルライブラリ72’のパージングルーチンは、モードスイッチを実行するために必要な命令を実行するためにコールされる。これらの命令の処理及び実行は、ディバイスドライバ50によるコンテキストスイッチと関係しない1つの単純なモードスイッチを実行するために必要な処理と一貫性をもつ。
モード設定命令が一旦実行されると、シェルライブラリ72’は、「モード変更」オペランドを有するモード設定コールを各参加オブジェクトへ発信する。以前の場合と同様に、各オブジェクトは、例えば、新規シーケンサコードをグラフィックスアクセラレータサブエレメントへダウンロードするように、コントローラ19の新規オペレーティングモードを実行またはサポートするために必要な任意のオブジェクト特有のルーチンを実行可能である。
最後に、シェルライブラリ72’は、「モード変更完了」オペランドを有する各参加オブジェクトにモード設定コールを発信する。これに応答して、各参加オブジェクトは、例えば、ディスプレイバッファ20における記憶装置の使用を再割当てし、そして、ディスプレイ32上にハードウェアカーソルの位置を確立することを含むコントローラ19の作動環境を確立するために実行する。更に、フォールスクリーンリフレシャを要求するために、オペレーティングシステムオブジェクト128を介して、コールが行われる。これに応答して、オペレーティングシステム核56は、ディスプレイ32上に見えるビットマップへポインタ基準を提供するディバイスドライバ50への一連のコールを調節する。ディバイスドライバ50を介して各ビットマップが処理されるにつれて、あらゆる必要な色深度変換が、シェルライブラリ72’によって適切に実施される。
最後の参加オブジェクトからの復帰に際して、シェルライブラリ72’は、シェルオブジェクト152を効果的に介してオペレーティングシステム層54へ戻る。従って、ディバイスドライバ50は、アプリケーション60又はオペレーティングシステム層54から実質的に独立し、そして、これらの関連参加なしに、モードスイッチ及びコンテキストスイッチの両方を完了する。
VI.操作状態の終結
図7に全体的に示すように、最後に、本発明は、ディバイスドライバ50のオペレーションを終結させる過程を手お経する。詳細には、例えばWindows’95TMのように、オペレーティングシステム核56の具体化例は、オペレーティングシステム核56の終結に際してコンピュータシステム10内の各ディバイスドライバへ発信される標準コールとしてシャットダウンAPIコールを提供する。シャットダウンAPIコールを受信すると、例えばシェルオブジェクト152のような、現在活動中のコンテキストのシェルオブジェクトは、継続して受信したAPIコールの受入れを、オペレーティングシステムインターフェイスモジュールによって終結させることにより222、ディバイスドライバ50によってこれ以上の一切のAPIコールの処理を作動不可能にするように作動する。従って、次に、ディバイスドライバ50は、整然とした方法により、予期しないAPIコールの受信によって妨害されることなしに、シャットダウンを実施することができる。
次に、modes.dmm構成コンフィギュレーションファイルのデフォルトセクションは、シェルライブラリ72のパージングルーチンによって読取られ、そして、実行される。このデフォルトセクションによって提供される命令は、コントローラ19に関してデフォルトオペレーティングモードを設定するために224用いられる。このようにして、コントローラ19は、オペレーティングシステム核56のシャットダウンに続いて使用される可能性に関して適切であるような公知の安定した状態に設定される。
次に、シェルライブラリ72’は、ディバイスドライバ50のインタフェースオブジェクト及びモジュールによって用いられているシステムメモリを解放するように作動する。詳細には、シェルライブラリ72’は、ディバイスドライバ50の現在の各コンテキストを識別するために作動する。識別された各コンテキスト228に関して、シェルライブラリ72’は、特定のコンテキスト230に特有の各ハードウェアインターフェイスオブジェクトを順次解放するために、ボードライブラリ74’をコールする。結果としてボードライブラリ74’は、識別されたコンテキストのシェルオブジェクトに対応する各ハードウェアインタフェースオブジェクトをコールする。ハードウェアインターフェイスモジュールと対応する最後のオブジェクトを解放した状態で、オブジェクト及びモジュールの両方に対応したメモリスペースが解放される。いったん、全てのコンテキストに関するハードウェアインタフェースオブジェクトの全てが一旦解放されると、ボードライブラリ74’は、それ自体の記憶装置232を解放するために、再びコールされる。
シェルライブラリ72’は、オブジェクト及び対応するモジュールに対応するメモリスペースを解放するために、現在の各コンテキストに関する各々のオペレーティングシステムインタフェースオブジェクト234をコールする。ディバイスドライバ50の現行コンテキストを定義するシェルオブジェクトも同様に解放される。次に、シェルライブラリ72’は、対応する記憶装置を効果的に解放して終結し236、そして、オペレーティングシステム層54の終結を継続するために、実行がオペレーティングシステム核56へ戻る。
V.仮想化されたドライバオペレーション
好ましいMicrosoft Windows’95環境においては、いわゆるDos−Box保護された実行空間において実行中の遺産アプリケーションをサポートすることが必要である。本発明の好ましい具体化に関連して保護されている実行が、フルスクリーン又はウィンドウモードのいずれかにおいて提供される。遺産アプリケーションは、フルスクリーンモードにおけるコントローラ19に対して直接アクセスすること、及び、プログラムすることが可能である。ウィンドウモードにおいて、遺産アプリケーションによって期待されるハードウェアレジスタをエミュレートするために、一般にVxDドライバと呼ばれる仮想化ディバイスドライバが提供される。他のウィンドウアプリケーションと共存および共同実行するためには、遺産アプリケーションによって動的に提供されるハードウェアプログラミングのウィンドウ関係エミュレーションが、VxDドライバによって提供されることが期待される。一般に、VxDドライバは、コントローラ19特有の具体化の完全エミュレーションをサポートする特異モノリシックソフトウェアモジュールとして再び実現される。結果として、通常のVxDドライバは、従来のディバイスドライバと関連する場合と同じ問題に遭遇する。
図8に全体的に示すように、本発明のディバイスドライバ50のアーキテクチャは、特に仮想ディスプレイドライバ(VDD)を含むVxDドライバを実現するために直接的かつ効果的に採用することが出来る。既に述べたように、ディバイスドライバ50は、オペレーティングシステム層54内に従来の方法において設定されたWindows(Win16)仮想マシン(VM)240をサポートして作動する。Dos VM 242は、ハードウェア30への直接アクセスを試行可能な遺産アプリケーションに関して、Dos−Box保護された実行空間を提供する。Dos VM242の中から又はこれによって発行されるハードウェアアクセス試行の結果をトラップし、かつ、適切にエミュレートするために、当該ディバイスドライバ50のバージョン50’が提供される。Dos VM 242内におけるアプリケーションのウィンドウモード実行をサポートして作動中のVDD 50’は、オペレーティングシステムの通常使用を介して、I/Oまたはレジスタインタフェース30に対応するメモリスペースを選択的に確立する。このアクセストラップは、一般に、Dos VM 242がフルスクリーンモードに切り換えられるか、或いは、実行が他の仮想マシン240、244に移動する場合に解放(リリース)される。ウィンドウモードにおけるDos VM 242へ実行が戻る場合、或いは、フルスクリーンモードからウィンドウモードに切り換えられた時にアクセストラップが再表明(リアサート)される。
アクセストラップがアクセス試行を検出すると、当該トラップによって獲得されたアクセス特性情報がVDD 50’に提供される。詳細には、図9に示すように、ボードライブラリ7431には、論理的に接続246を介して、オペレーティングシステム54により、アクセス試行情報が提供される。VDD 50’の構成要素は、ディスプレイドライバ50の単一コンテキストバージョンを実現することが好ましい。ただし、Dos VM 242の下における多重コントローラ19を適切にサポートするために、多重コンテキストは容易にサポートされることが可能である。
単一コンテキスト内において、ハードウェアインタフェースオブジェクト130’、132’、134’、及び、138’は、ハードウェアへ直接アクセスしようとする連続試行に基づくディスプレイの意図的状態の表現を維持するように、アクセス特性データを記憶するために作動する。ハードウェアインタフェースオブジェクトと対応するRegclassMap構造は、ハードウェアサブエレメントの各クラスに対応する状態情報に関する記憶空間へのポインタを用いて増補されることが好ましい。同様に、ハードウェアインタフェースオブジェクトは、意図したスクリーンの外観の適切な表現のディスプレイを生じさせるために、O/Sオブジェクト128’の支援によってオペレーティングシステムコールを生成するエミュレーションルーチンを提供する。これらのコールは、オペレーティングシステム層54に適用され、その結果として、ディスプレイドライバ54へ適宜ルートされる。フルスクリーンモードへのスイッチに際して、ハードウェアインタフェースオブジェクトによって維持されるディスプレイ状態は、状態データをレジスタインターフェイス30へ適用することによって、意図したディスプレイ状態を確立するために直接使用することが可能である。
ディバイスドライバ50’のパーザー(構文解析系)ルーチンは、アクセス特性情報を分析するために、逆に効果的に使用れる。アクセストラップは、暗黙裡におけるクラストラップハンドラへのアドレス割当によって、ディバイスクラスへのアクセス試行を特徴付けるために役立つことが好ましい。従って、クラス、アドレス、及び、アクセスを備えた値は、トラップハンドラによって収集され、そして、逆パーザー(構文解析系)ルーチンに提供される。従って、トラップされた各アクセス試行により、アクセス関連データは、対応するRegClassMap識別された記憶装置に記憶される。同様に、逆パーザー(構文解析系)は、modes.dmmファイルに記憶されているクラスレジスタ命令から究極的に決定されたレジスタ定義に対する分析を実施する。分析結果は、記入されることを意図したレジスタがインデックスレジスタであるか、又は、他の管理機能レジスタであるか、或いは、データレジスタであるかの論理的判定である。意図されたレジスタがインデックスレジスタ又は他の管理機能レジスタである場合には、その結果としての状態変化が記録される。意図されたレジスタがデータレジスタである場合には、レジスタの新規状態が記録され、その後で、いくらかのエミュレーションが必要かどうかに関して判定が行われる。記入中の特定レジスタに応じて、一切のエミュレーションを必要としないか、或いは、フルインデックス及びデータアクセスオペレーションが実施されることもあり得る。
従って、実質的には、同一ハードウェア及びオペレーティングシステムインタフェースオブジェクト定義が用いられることが好ましく、そして、更に、カプセル封入されたハードウェアインターフェイスモジュールによって実現されるディスプレイ特性エミュレーションルーチンの中から選択するためには、異なるディスプレイ特性をサポートする複数の機能の中から選択する場合と同一の方法を用いても差し支えない。パーザー(構文解析系)ルーチンが識別可能なモード集合を検出した場合には、既に説明したようにモード設定オペレーションを実施するために、O/Sオブジェクト128’を介してシェルオブジェクト126’がコールされても差し支えない。オペレーティングシステムオブジェクト120’、122’、126’によって実現される実質的な線形コールシーケンスは、直接的に作動可能化される。従って、オペレーティングシステムインタフェースオブジェクトと残りのVDD 50’との間の機能コール関係は、ディバイスドライバ50の場合と同じである。
V.結論
以上のように、複雑かつ多機能的な周辺コントローラ並びに仮想ディバイスドライバのサポートに適した高度に最適化されたディバイスドライバアーキテクチャについて説明した。ここに説明したディバイスドライバのアーキテクチャは、サブエレメント別に詳述する方式に基づいてハードウェアから直接決定されることが好ましい方法において周辺コントローラのハードウェアコンフィギュレーションに明確にマッチするように、ロードタイムにおいて当該ディバイスドライバの動的コンフィギュレーションを直接サポートし、特有のサブエレメント設計に従ってモジュール変更の機能的分離を本質的にサポートするモジュール式アーキテクチャを採用し、コントローラの作動状態のモードスイッチを実施するための効率的なメカニズムを提供し、モードスイッチの動作を選択的に用いた独立コンテキストのサポートを介して、モードスイッチから独立した持続性データのメンテナンス及び管理を実施するための効率的なメカニズムを提供し、ビデオディスプレイコントローラアプリケーションにおいて色深度変換の効率的な管理を提供する。更に、アーキテクチャはモジュール式であって複雑であるにも拘わらず、モジュール間のサポートされる相互作動的関係は、オペレーティングシステムAPIコールを仮想化および実現するために実質的に線形化されたコールシーケンスを作動可能化する。
本発明の好ましい実施例について既に説明した観点から、開示された実施例の多くの修正及び変形は、当該技術分野における習熟者によって容易に察知可能なはずである。従って、本発明が、添付されている請求の範囲内において、以上に詳細に述べられた場合とは異なって実現可能であることが理解されるはずである。
Claims (3)
- コンピュータシステムのメモリに格納されているディバイスドライバを介して前記コンピュータシステム内のアプリケーションの仮想化された実行をサポートする方法であって、前記方法は、アクセストラップメカニズムをサポートするオペレーティングシステムと共に用いられ、前記ディバイスドライバは、前記オペレーティングシステムに対するインタフェースと、所定の組のモード設定プログラムと、パーサールーチンとを含み、
前記方法は、
a)前記オペレーティングシステムに対する前記インタフェースが、前記コンピュータシステムに結合された所定のコントローラへのアクセスを前記オペレーティングシステムから受信するステップであって、前記アクセスは、前記オペレーティングシステムにおいて実行される所定のアプリケーションによって起動される、ステップと、
b)前記所定の組のモード設定プログラムのそれぞれが、前記所定のコントローラへのアクセスをプログラムすることを定義する命令のシーケンスを含み、前記命令のシーケンスを用いて、前記所定のコントローラの同様の組の動作モードのそれぞれを確立するステップと、
c)前記パーサールーチンが、前記所定の組のモード設定プログラムを参照して連続する受信されたアクセス試行を解析することにより、前記解析の結果に基づいて、前記組の動作モードのうちの1つを前記所定のコントーラの目標動作モードとして識別するステップと
を包含し、
前記所定のコントローラは、複数の機能的サブエレメントを含み、前記複数の機能的サブエレメントは、前記所定のコントローラの同様の複数の動作アスペクトを構成し、前記ディバイスドライバは、同様の複数のインタフェースモジュールを含み、前記複数のインタフェースモジュールのそれぞれは、前記所定のコントローラの前記目標動作モードにおいて前記複数の動作アスペクトが構成されている場合において、前記所定のコントローラの前記複数の動作アスペクトのうちの対応する1つによって実装される機能と同じ機能をエミュレートする、方法。 - 前記複数のインタフェースモジュールは、前記所定のコントローラの前記複数の機能的サブエレメントのそれぞれをさらに選択的にプログラムする、請求項1に記載の方法。
- コンピュータシステム内の仮想化された実行空間においてエミュレーションサービスを提供する方法であって、
前記方法は、
a)所定のレジスタ空間に結合されたコントローラの同様の複数の機能をそれぞれ制御するために、複数のディバイスドライバモジュールを前記所定のレジスタ空間に提供するステップと、
b)前記複数のディバイスドライバモジュールが、前記コンピュータシステム内の仮想マシーンが行う前記複数のディバイスドライバモジュールへのアクセス試行をトラップするステップであって、前記仮想マシーンは、前記コントローラと互換性がない、ステップと、
c)前記アクセス試行に関連して提供されるアクセスアドレス及びデータを記録するステップと、
d)前記アクセスアドレス及びデータを前記所定のレジスタ空間に対応するディバイスドライバに提供するステップと、
e)前記コントローラの複数の動作モードを定義する事前に確立された情報に対して前記アクセスアドレス及びデータを解析することにより、前記解析の結果に基づいて、前記複数の動作モードのうちの1つを前記仮想マシーンに対する前記コントローラの目標動作モードとして選択するステップと、
f)前記コントローラの前記目標動作モードを格納するステップと、
g)前記複数のディバイスドライバモジュールが、前記仮想マシーンにエミュレーションを選択的に提供するステップと
を包含し、
前記仮想マシーンが前記コントローラおよび前記所定のレジスタ空間に直接的にアクセスすることなく、前記エミュレーションは、前記コントローラの前記複数の機能のうち、前記仮想マシーンに対する前記目標動作モードにおいて前記コントローラが構成されている場合に対応する機能と同じ機能をエミュレートする、方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/561,354 | 1995-11-21 | ||
US08/561,354 US6009476A (en) | 1995-11-21 | 1995-11-21 | Device driver architecture supporting emulation environment |
PCT/US1996/018810 WO1997019404A1 (en) | 1995-11-21 | 1996-11-21 | Device driver architecture supporting emulation environment |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000500602A JP2000500602A (ja) | 2000-01-18 |
JP4375629B2 true JP4375629B2 (ja) | 2009-12-02 |
Family
ID=24241593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP51994097A Expired - Fee Related JP4375629B2 (ja) | 1995-11-21 | 1996-11-21 | エミュレーション環境をサポートするディバイスドライバアーキテクチャ |
Country Status (5)
Country | Link |
---|---|
US (1) | US6009476A (ja) |
EP (1) | EP0862760A4 (ja) |
JP (1) | JP4375629B2 (ja) |
KR (1) | KR19990071480A (ja) |
WO (1) | WO1997019404A1 (ja) |
Families Citing this family (70)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5940613A (en) * | 1996-05-01 | 1999-08-17 | Sun Microsystems, Inc. | Method for creating a single binary virtual device driver for a windowing operating system |
US6370591B2 (en) * | 1997-09-30 | 2002-04-09 | Nokia Mobile Phones Ltd. | Method and apparatus for running simultaneous applications through the same port using supplementary drivers through a main driver |
US6188411B1 (en) * | 1998-07-02 | 2001-02-13 | Neomagic Corp. | Closed-loop reading of index registers using wide read and narrow write for multi-threaded system |
US6401128B1 (en) * | 1998-08-07 | 2002-06-04 | Brocade Communiations Systems, Inc. | System and method for sending and receiving frames between a public device and a private device |
US6269459B1 (en) | 1998-08-25 | 2001-07-31 | Advanced Micro Devices, Inc. | Error reporting mechanism for an AGP chipset driver using a registry |
US6243833B1 (en) | 1998-08-26 | 2001-06-05 | International Business Machines Corporation | Apparatus and method for self generating error simulation test data from production code |
US6549918B1 (en) * | 1998-09-21 | 2003-04-15 | Microsoft Corporation | Dynamic information format conversion |
US6446142B1 (en) * | 1998-10-22 | 2002-09-03 | Sony Corporation | Method of and apparatus for dynamically binding subobjects into objects to represent functions and characteristics of a device within an IEEE 1394 serial bus network |
US6366964B1 (en) * | 1998-10-22 | 2002-04-02 | Sony Corporation | Method of and apparatus for dynamically enumerating objects representing devices within an IEEE 1394 serial bus networking |
US6367074B1 (en) * | 1998-12-28 | 2002-04-02 | Intel Corporation | Operation of a system |
US6308184B1 (en) * | 1999-04-09 | 2001-10-23 | Hewlett-Packard Company | Delayed unloading of a dynamically loadable file |
KR100367000B1 (ko) * | 1999-06-29 | 2003-01-06 | 한국전자통신연구원 | 멀티미디어 처리용 가속 기능 및 입출력 기능을 갖는 피씨용 멀티채널 오디오/음성 및 데이터 코덱장치 |
US6343296B1 (en) * | 1999-09-03 | 2002-01-29 | Lucent Technologies Inc. | On-line reorganization in object-oriented databases |
US6792476B1 (en) * | 1999-10-29 | 2004-09-14 | Sony Corporation | Storage medium, and method and apparatus for information processing |
US6880158B1 (en) * | 2000-04-10 | 2005-04-12 | International Business Machines Corporation | Network processor services architecture that is platform and operating system independent |
US6609155B1 (en) * | 2000-05-25 | 2003-08-19 | International Business Machines Corporation | Method and apparatus for providing relationships in simple network management protocol management information base |
US6948001B1 (en) * | 2000-11-02 | 2005-09-20 | Radiant Data Corporation | Modular software method for independent storage nodes |
US7027972B1 (en) * | 2001-01-24 | 2006-04-11 | Ati Technologies, Inc. | System for collecting and analyzing graphics data and method thereof |
US6952746B2 (en) * | 2001-06-14 | 2005-10-04 | International Business Machines Corporation | Method and system for system performance optimization via heuristically optimized buses |
US6970947B2 (en) * | 2001-07-18 | 2005-11-29 | International Business Machines Corporation | Method and apparatus for providing a flexible and scalable context service |
EP1286270A1 (en) * | 2001-07-24 | 2003-02-26 | Deutsche Thomson-Brandt Gmbh | An integrated circuit having a generic communication interface |
US7389332B1 (en) | 2001-09-07 | 2008-06-17 | Cisco Technology, Inc. | Method and apparatus for supporting communications between nodes operating in a master-slave configuration |
US7107597B2 (en) * | 2001-09-10 | 2006-09-12 | Ericom Software 8 2001 Ltd. | Method of and system for controlling task-oriented systems utilizing an application programming interface |
US7093265B1 (en) * | 2001-09-21 | 2006-08-15 | Lsi Logic Corporation | Method and apparatus for providing highly-transparent, host-based multi-pathing support |
US7421478B1 (en) | 2002-03-07 | 2008-09-02 | Cisco Technology, Inc. | Method and apparatus for exchanging heartbeat messages and configuration information between nodes operating in a master-slave configuration |
US7200610B1 (en) | 2002-04-22 | 2007-04-03 | Cisco Technology, Inc. | System and method for configuring fibre-channel devices |
US7587465B1 (en) | 2002-04-22 | 2009-09-08 | Cisco Technology, Inc. | Method and apparatus for configuring nodes as masters or slaves |
US7415535B1 (en) | 2002-04-22 | 2008-08-19 | Cisco Technology, Inc. | Virtual MAC address system and method |
US7165258B1 (en) | 2002-04-22 | 2007-01-16 | Cisco Technology, Inc. | SCSI-based storage area network having a SCSI router that routes traffic between SCSI and IP networks |
US7433952B1 (en) | 2002-04-22 | 2008-10-07 | Cisco Technology, Inc. | System and method for interconnecting a storage area network |
US7188194B1 (en) | 2002-04-22 | 2007-03-06 | Cisco Technology, Inc. | Session-based target/LUN mapping for a storage area network and associated method |
US7240098B1 (en) * | 2002-05-09 | 2007-07-03 | Cisco Technology, Inc. | System, method, and software for a virtual host bus adapter in a storage-area network |
US7120837B1 (en) | 2002-05-09 | 2006-10-10 | Cisco Technology, Inc. | System and method for delayed error handling |
US6934784B2 (en) * | 2002-07-11 | 2005-08-23 | Hewlett-Packard Development Company, L.P. | Systems and methods for managing-system-management-event data |
US20040064828A1 (en) * | 2002-10-01 | 2004-04-01 | Cox David Payton | Supplanting first device objects with second device objects |
US7831736B1 (en) | 2003-02-27 | 2010-11-09 | Cisco Technology, Inc. | System and method for supporting VLANs in an iSCSI |
US7295572B1 (en) | 2003-03-26 | 2007-11-13 | Cisco Technology, Inc. | Storage router and method for routing IP datagrams between data path processors using a fibre channel switch |
US7433300B1 (en) | 2003-03-28 | 2008-10-07 | Cisco Technology, Inc. | Synchronization of configuration data in storage-area networks |
US7904599B1 (en) | 2003-03-28 | 2011-03-08 | Cisco Technology, Inc. | Synchronization and auditing of zone configuration data in storage-area networks |
US7526527B1 (en) | 2003-03-31 | 2009-04-28 | Cisco Technology, Inc. | Storage area network interconnect server |
US7451208B1 (en) | 2003-06-28 | 2008-11-11 | Cisco Technology, Inc. | Systems and methods for network address failover |
US7421710B2 (en) * | 2003-10-08 | 2008-09-02 | Lsi Corporation | System and method of creating virtual data paths using a multiple-path driver |
US7721298B2 (en) * | 2004-12-03 | 2010-05-18 | Microsoft Corporation | Operating system performance |
US8020141B2 (en) * | 2004-12-06 | 2011-09-13 | Microsoft Corporation | Operating-system process construction |
US7882317B2 (en) * | 2004-12-06 | 2011-02-01 | Microsoft Corporation | Process isolation using protection domains |
US7451435B2 (en) * | 2004-12-07 | 2008-11-11 | Microsoft Corporation | Self-describing artifacts and application abstractions |
US7600232B2 (en) * | 2004-12-07 | 2009-10-06 | Microsoft Corporation | Inter-process communications employing bi-directional message conduits |
US7464189B2 (en) | 2005-05-23 | 2008-12-09 | International Business Machines Corporation | System and method for creation/deletion of linear block address table entries for direct I/O |
US20060265525A1 (en) * | 2005-05-23 | 2006-11-23 | Boyd William T | System and method for processor queue to linear block address translation using protection table control based on a protection domain |
US7502872B2 (en) * | 2005-05-23 | 2009-03-10 | International Bsuiness Machines Corporation | Method for out of user space block mode I/O directly between an application instance and an I/O adapter |
US7552240B2 (en) | 2005-05-23 | 2009-06-23 | International Business Machines Corporation | Method for user space operations for direct I/O between an application instance and an I/O adapter |
US20070005815A1 (en) * | 2005-05-23 | 2007-01-04 | Boyd William T | System and method for processing block mode I/O operations using a linear block address translation protection table |
US7502871B2 (en) * | 2005-05-23 | 2009-03-10 | International Business Machines Corporation | Method for query/modification of linear block address table entries for direct I/O |
US8849968B2 (en) | 2005-06-20 | 2014-09-30 | Microsoft Corporation | Secure and stable hosting of third-party extensions to web services |
US7500071B2 (en) * | 2005-08-31 | 2009-03-03 | International Business Machines Corporation | Method for out of user space I/O with server authentication |
US7577761B2 (en) * | 2005-08-31 | 2009-08-18 | International Business Machines Corporation | Out of user space I/O directly between a host system and a physical adapter using file based linear block address translation |
US7657662B2 (en) * | 2005-08-31 | 2010-02-02 | International Business Machines Corporation | Processing user space operations directly between an application instance and an I/O adapter |
US20070168567A1 (en) * | 2005-08-31 | 2007-07-19 | Boyd William T | System and method for file based I/O directly between an application instance and an I/O adapter |
US8074231B2 (en) | 2005-10-26 | 2011-12-06 | Microsoft Corporation | Configuration of isolated extensions and device drivers |
CN101297280B (zh) * | 2005-10-26 | 2013-03-27 | 微软公司 | 隔离扩展和设备驱动程序的配置 |
US7725305B2 (en) * | 2006-06-08 | 2010-05-25 | Microsoft Corporation | Partial virtualization on computing device |
US8032898B2 (en) * | 2006-06-30 | 2011-10-04 | Microsoft Corporation | Kernel interface with categorized kernel objects |
US8789063B2 (en) * | 2007-03-30 | 2014-07-22 | Microsoft Corporation | Master and subordinate operating system kernels for heterogeneous multiprocessor systems |
US20080244507A1 (en) * | 2007-03-30 | 2008-10-02 | Microsoft Corporation | Homogeneous Programming For Heterogeneous Multiprocessor Systems |
JP4482044B2 (ja) * | 2008-03-18 | 2010-06-16 | 株式会社東芝 | 情報処理装置およびデバイスコントローラの駆動制御方法 |
US8819707B2 (en) * | 2009-06-18 | 2014-08-26 | Citrix Systems, Inc. | Methods and systems for importing a device driver into a guest computing environment |
CN102693159B (zh) * | 2012-05-09 | 2015-07-01 | 上海晨思电子科技有限公司 | 基于用户模式多任务下控制硬件设备的方法及其装置 |
US9811319B2 (en) * | 2013-01-04 | 2017-11-07 | Microsoft Technology Licensing, Llc | Software interface for a hardware device |
PT3411785T (pt) * | 2017-04-28 | 2020-11-11 | Lzlabs Gmbh | Implantação em contentores de microsserviços com base em aplicações monolíticas legadas |
US11245679B1 (en) * | 2017-11-15 | 2022-02-08 | Veritas Technologies Llc | Securing external access to runtime services in appliances |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4649479A (en) * | 1985-02-28 | 1987-03-10 | International Business Machines Corp. | Device driver and adapter binding technique |
JPH0664536B2 (ja) * | 1986-01-17 | 1994-08-22 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | 仮想端末サブシステムの制御方法 |
US4975829A (en) * | 1986-09-22 | 1990-12-04 | At&T Bell Laboratories | Communication interface protocol |
US5175855A (en) * | 1987-07-27 | 1992-12-29 | Laboratory Technologies Corporation | Method for communicating information between independently loaded, concurrently executing processes |
US4755478A (en) * | 1987-08-13 | 1988-07-05 | International Business Machines Corporation | Method of forming metal-strapped polysilicon gate electrode for FET device |
US4855936A (en) * | 1987-09-25 | 1989-08-08 | International Business Machines Corp. | Full-screen input/output application program interface |
NL8800222A (nl) * | 1988-01-29 | 1989-08-16 | Philips Nv | Werkwijze voor het vervaardigen van een halfgeleiderinrichting waarbij op zelfregistrerende wijze metaalsilicide wordt aangebracht. |
EP0419064A3 (en) * | 1989-09-22 | 1992-08-05 | International Business Machines Corporation | Computer system having apparatus for providing pointing device independent support in an operating environment |
CA2010591C (en) * | 1989-10-20 | 1999-01-26 | Phillip M. Adams | Kernels, description tables and device drivers |
JPH0727505B2 (ja) * | 1990-02-12 | 1995-03-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | インターフェース方法及びインターフェース・システム |
US5265252A (en) * | 1991-03-26 | 1993-11-23 | International Business Machines Corporation | Device driver system having generic operating system interface |
US5291585A (en) * | 1991-07-29 | 1994-03-01 | Dell Usa, L.P. | Computer system having system feature extension software containing a self-describing feature table for accessing I/O devices according to machine-independent format |
US5319751A (en) * | 1991-12-27 | 1994-06-07 | Intel Corporation | Device driver configuration in a computer system |
US5305461A (en) * | 1992-04-03 | 1994-04-19 | International Business Machines Corporation | Method of transparently interconnecting message passing systems |
US5675762A (en) * | 1992-04-03 | 1997-10-07 | International Business Machines Corporation | System for locking down part of portion of memory and updating page directory with entry corresponding to part of portion of the memory locked down |
EP0584909A1 (en) * | 1992-08-26 | 1994-03-02 | Sun Microsystems, Inc. | Self configuring device system |
US5781797A (en) * | 1992-09-30 | 1998-07-14 | Microsoft Corporation | Method and system for configuring device driver by selecting a plurality of component drivers to be included in the device driver |
US5613123A (en) * | 1992-09-30 | 1997-03-18 | Microsoft Corporation | Method and system for configuring and executing device drivers based on configuration requirements |
US5339432A (en) * | 1992-10-13 | 1994-08-16 | Microsoft Corporation | Method and system for providing user control of device driver configuration |
US5352631A (en) * | 1992-12-16 | 1994-10-04 | Motorola, Inc. | Method for forming a transistor having silicided regions |
US5530858A (en) * | 1993-04-01 | 1996-06-25 | Intel Corporation | Method and apparatus for background processing for PCMCIA card services |
US5581766A (en) * | 1993-05-17 | 1996-12-03 | Compaq Computer Corporation | Selectable video driver system |
US5564011A (en) * | 1993-10-05 | 1996-10-08 | International Business Machines Corporation | System and method for maintaining file data access in case of dynamic critical sector failure |
JP3566975B2 (ja) * | 1993-10-18 | 2004-09-15 | 株式会社日立製作所 | 計算機操作端末装置の自動操作装置 |
US5603014A (en) * | 1993-12-03 | 1997-02-11 | Intel Corporation | Protected mode simulation of a real mode interupt based programming interface in a computer system |
US5394519A (en) * | 1994-01-03 | 1995-02-28 | International Business Machines Corp. | Data processing apparatus for high resolution display in multiple virtual dos applications |
US5459869A (en) * | 1994-02-17 | 1995-10-17 | Spilo; Michael L. | Method for providing protected mode services for device drivers and other resident software |
US5717903A (en) * | 1995-05-15 | 1998-02-10 | Compaq Computer Corporation | Method and appartus for emulating a peripheral device to allow device driver development before availability of the peripheral device |
-
1995
- 1995-11-21 US US08/561,354 patent/US6009476A/en not_active Expired - Lifetime
-
1996
- 1996-11-21 KR KR1019980703751A patent/KR19990071480A/ko not_active Application Discontinuation
- 1996-11-21 JP JP51994097A patent/JP4375629B2/ja not_active Expired - Fee Related
- 1996-11-21 WO PCT/US1996/018810 patent/WO1997019404A1/en not_active Application Discontinuation
- 1996-11-21 EP EP96941455A patent/EP0862760A4/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
JP2000500602A (ja) | 2000-01-18 |
WO1997019404A1 (en) | 1997-05-29 |
US6009476A (en) | 1999-12-28 |
EP0862760A4 (en) | 1999-01-27 |
KR19990071480A (ko) | 1999-09-27 |
EP0862760A1 (en) | 1998-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4375629B2 (ja) | エミュレーション環境をサポートするディバイスドライバアーキテクチャ | |
JP4344403B2 (ja) | コンテキスト仮想化ディバイスドライバアーキテクチャ | |
JP4442732B2 (ja) | 動的プログラム可能なモード切換えディバイスドライバアーキテクチャ | |
US5752032A (en) | Adaptive device driver using controller hardware sub-element identifier | |
US6393495B1 (en) | Modular virtualizing device driver architecture | |
US5964843A (en) | System for enhancing device drivers | |
CA2010591C (en) | Kernels, description tables and device drivers | |
US8214849B2 (en) | System for loading device-specific code and method thereof | |
US5291585A (en) | Computer system having system feature extension software containing a self-describing feature table for accessing I/O devices according to machine-independent format | |
US5355498A (en) | Method and apparatus for booting a computer system without loading a device driver into memory | |
US6959441B2 (en) | Intercepting system API calls | |
US6167565A (en) | Method and system of custom marshaling of inter-language parameters | |
US5269021A (en) | Multiprocessor software interface for a graphics processor subsystem employing partially linked dynamic load modules which are downloaded and fully linked at run time | |
JPH06324849A (ja) | オペレーティング・システム環境の起動方法およびシステム | |
US5504920A (en) | Video driver system for communicating device specific primitive commands to multiple video controller types | |
CA2097541C (en) | Concurrency control through a class library in object oriented technology | |
McAuliffe | Breaking the DOS 640-kByte barrier | |
WO2002042898A2 (en) | Interpretation loop for object oriented processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20031121 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20060213 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20060213 |
|
A072 | Dismissal of procedure [no reply to invitation to correct request for examination] |
Free format text: JAPANESE INTERMEDIATE CODE: A073 Effective date: 20070717 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20070830 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071030 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080128 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080310 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080226 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081118 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090218 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090811 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090903 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120918 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120918 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130918 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |