(57)【要約】【課題】  圧縮システムをオペレーティング・システムと統合する方法およびコンピュータ・システムを提供する。【解決手段】  非標準デバイス・ドライバをインストールするときに、非標準デバイスに予定されたドライブ文字が割り当てられることを確実にするために、先にインストールされた圧縮ボリュームに割り当てられたドライブ文字は、再割り当てされる。また、圧縮システムをインストールするときに、未決定搭載リストが、まだ搭載できないそれらの圧縮ボリュームのために保持される。各非標準デバイス・ドライバがインストールされた後に、この未決定搭載リストがチェックされ、どの圧縮ボリュームを搭載できるかが決定される。非標準デバイス・ドライバがインストールされるときに、ドライブ文字が割り当てられる。ドライブ文字が、予定されるドライブ文字でないならば、ドライブ文字の割り当てスキームが、そのドライブ文字を再割り当てするために提供される。【選択図】          図３
2005011371.tif 000002
【特許請求の範囲】
【請求項１】
標準デバイス・ドライバ、圧縮システムのデバイス・ドライバおよび非標準デバイス・ドライバを有するコンピュータ・システムを初期化するための方法であって、
前記標準デバイス・ドライバをコンピュータ・システムにインストールし、
前記圧縮システムのデバイス・ドライバをコンピュータ・システムにインストールし、
前記圧縮システムのデバイス・ドライバのインストール後に、前記非標準デバイス・ドライバが前記コンピュータ・システムにインストールされることを指定する構成情報を読み出し、
前記非標準デバイス・ドライバをコンピュータ・システムにインストールするステップ、
を含む方法。
【請求項２】
前記非標準デバイス・ドライバをインストールするステップが、圧縮システムのデバイス・ドライバを介して圧縮システムにアクセスするステップを含むものである、
請求項１に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
（産業上の利用分野）
この発明は、一般に、デバイス・ドライバを管理するためのコンピュータによる方法およびコンピュータ・システムに関し、具体的には、圧縮システムをオペレーティング・システムと統合するためのコンピュータによる方法およびコンピュータ・システムに関する。
【０００２】
経験則として、コンピュータ・システムのユーザは、補助記憶スペースをいつかは使い果たしてしまう。したがって、補助記憶ボリュームの記憶容量を増加させる新たな方法が常に望まれている。ボリュームの記憶容量を増加させる通常の方法の一つとして、そのボリュームから不要なデータを消去するように、オペレーティング・システムにマニュアルで指示する方法が取られる。これにより、新たなデータ用の空きスペースができる。この方法は、ユーザがどのデータを消去すべきかを慌てて決定した場合に、後にその決定を後悔することがよくあるので、望ましい方法ではない。また、たまに、ボリューム上の全データが重要な場合があり、この場合に、消去の決定が妨げられる。
【０００３】
ファイル・ベースのボリュームの記憶容量を増加させるもう一つの方法として、個々のファイルを圧縮し、圧縮されたファイルをボリュームに記憶する方法がある。この方法によると、ユーザがファイルを圧縮して記憶スペースを節約しなければならず、また、ファイルの使用前には、ユーザがファイルを伸張しなければならないことが要求される。この点が、この方法の好ましくない点である。
【０００４】
さらに、ファイル・ベースのボリュームの記憶容量を効果的に増加させるもう一つの方法として、ファイルを動的に圧縮し、圧縮されたファイルを記憶し、それらが取り出されたときにこの圧縮ファイルを伸張する方法がある。この方法を用いる圧縮システムは、一般に、オペレーティング・システムに追加される追加パッケージの形を採用している。これらの圧縮システムは、一般に、割り当てられたドライブ文字をもつデバイス・ドライバとしてインストールされる。圧縮システムは、一般に、圧縮されたファイルを「圧縮ボリューム」に記憶する。この圧縮ボリュームは、他のファイルまたはディレクトリとともにホスト・ボリュームに記憶される単一のファイル（「圧縮ボリューム・ファイル」）である。圧縮ボリュームは、圧縮ボリューム・ファイルをアクセスするためのそれ自身のデバイス・ドライバをもつ論理的なボリュームとして取り扱われる。コンピュータ・システムの他のボリュームのように、各圧縮ボリュームおよびホスト・ボリュームには、ユニークなドライブ文字（例えば、Ａ、Ｂ、Ｃ等）が割り当てられる。したがって、圧縮ボリューム・ファイルが、ドライブ文字Ｄを割り当てられているホスト・ボリュームに記憶され、かつ、その圧縮ボリュームに、ドライブ文字Ｅが割り当てられている場合に、ドライブ文字Ｅの参照を行うと、ドライブ文字Ｄをもつホスト・ボリューム内に記憶されている圧縮ボリューム・ファイルに記憶されたファイル群へのアクセスが行われる。
【０００５】
図１は、従来のコンピュータ・システム100 を示すブロック図である。コンピュータ・システム100 は、読出し専用メモリ（ＲＯＭ）装置101 、中央処理装置（ＣＰＵ）104 、取外し可能ボリューム・ドライブ105 （すなわち、フロッピィ・ディスク・ドライブ）、固定ボリューム・ドライブ106 （すなわち、ハード・ディスク・ドライブ）、およびランダム・アクセス・メモリ（ＲＡＭ）装置107 を備えている。ブート・プログラム102 および基本入出力システム（ROM-BIOS）103 が、ＲＯＭ装置101 に記憶されている。この図では、MS-DOS 5.0（マイクロソフト社製）のようなオペレーティング・システム110 が、固定ボリュームに記憶されているが、取外し可能ボリュームに記憶することもできる。
【０００６】
圧縮ドライバのようなデバイス・ドライバのインストールは、一般に、システムの初期化のときに行われる。システムの初期化中に、オペレーティング・システムは、標準デバイスおよびそのコンピュータ・システムの特定のハードウェア構成に特有の非標準デバイスの双方のデバイス・ドライバをインストールする。例えば、標準デバイスとして、典型的には、２つのフロッピィ・ディスク・ドライブと１つのハード・ディスク・ドライブがある。これらの標準デバイス用のデバイス・ドライバは、オペレーティング・システムとともに備えられており、オペレーティング・システムによって自動的にインストールされる。MS-DOSでは、これらの標準デバイス・ドライバは、IO.SYSドライバと呼ばれる。コンピュータ・システムが、CD-ROMドライブのような非標準デバイスを有するならば、各非標準デバイス用のデバイス・ドライバがコンフィグレーション・ファイルに指定される。MS-DOSでは、“CONFIG.SYS”という名前が、このファイルに付けられている。このCONFIG.SYSファイルは、ユーザが作成可能なテキスト・ファイルであり、コンピュータ・システムが初期化されるごとに実行されるコマンドを含んでいる。このコマンドは、一定のオペレーションとデバイスをどのように操作するかをオペレーティング・システムに指示するものである。各非標準デバイス用に、ユーザは、デバイス・ドライバを提供し、CONFIG.SYSファイルにこのデバイス・ドライバを指定する。これにより、オペレーティング・システムは、適切なデバイス・ドライバをインストールすることができる。表１は、CONFIG.SYSファイルに共通に見られるコマンドのサンプルを示している。
【０００７】
（表１）
DEVICE=RAMDRIVE.SYS 
DEVICE=CDROM.SYS
DEVICE=SCSI.SYS 
FILES=40
BREAK=ON
LASTDRIVE=E 
BUFFERS=20
SHELL=C:\DOS\COMMAND.COM /P /E:256
DEVICE=C:\WINDOWS\HIMEM.SYS 
STACKS=9,256
【０００８】
コマンド“DEVICE= ”は、これに続くファイル名がインストールされるべきデバイス・ドライバの名前であることを示している。CONFIG.SYSファイルが処理されるとき、オペレーティング・システムは、デバイス・ドライバをロードし、初期化することにより、そのデバイス・ドライバをインストールする。インストールの一部として、一または複数のドライブ文字が、デバイス・ドライバに割り当てられるかもしれない。
【０００９】
初期化において、デバイス・ドライバは、そのドライバによって制御されるドライブの数を指定する。単一のデバイス・ドライバが、複数のドライブを制御することができる。オペレーティング・システムは、ドライブの数を用いて、ドライブ文字を割り当てる。オペレーティング・システムは、コンピュータ・システムの現在利用できるドライブ文字の先頭のものから割り当てていく。例えば、最後に割り当てられたドライブ文字がＥであり、インストール中のデバイス・ドライバが４つのドライブをサポートするならば、オペレーティング・システムは、ドライブ文字としてＦ、Ｇ、ＨおよびＩをその４つのデバイス・ドライバに割り当てる。このように、ドライブ文字の割り当ては、CONFIG.SYSファイルのデバイス・コマンドの順番に依存する。
【００１０】
圧縮ボリュームを用いる典型的なコンピュータ・システムは、圧縮システム・デバイス・ドライバを使用し、圧縮ボリューム・ファイルとのインタフェースを行う。例えば、ライン“device=COMPRESS.SYS ”がCONFIG.SYSファイルにあるならば、このコマンドにより、COMPRESS.SYSファイルに含まれる圧縮システム・デバイス・ドライバがインストールされる。オペレーティング・システムは、ユニークなドライブ文字をこの圧縮ボリュームに割り当てる。
【００１１】
コンピュータ・プログラムが配置されたときに、コンピュータ・プログラムは、一般に、デバイスには決められたドライブ文字の割り当てが予定されているので、ドライブ文字の割り当ては重要となる。異なるドライブ文字がデバイスに割り当てられていると、プログラムは正しく動作しない。このプログラムを、異なるドライブ文字を予定するように再構成することができるが、再構成には、時間を要する。選択的に、ユーザが、予定された割り当てに対応するドライブ文字をマニュアルで再割り当てするように、要求されるかもしれない。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
この技術分野の専門家ならば、圧縮システムがCONFIG.SYSファイルに指定されたデバイス・ドライバとしてインストールされるときに発生する問題を知るであろう。例えば、圧縮ボリューム・デバイスが臨時に生成されると、他の非標準デバイス・ドライバのドライブ文字の割り当てが変えられるかもしれない。また、ユーザが、圧縮システム・デバイス・ドライバを指定するコマンドを不注意に消去するかもしれないし、そのコマンドのパラメータを変化させ、圧縮ボリュームへのアクセスをできなくするかもしれない。
【００１３】
ユーザが、ホスト・ボリューム（例えば、Ｃドライブ）のデータを圧縮するように、コンピュータ・システムに指示したときに、問題が生じる。圧縮システムは、一般に、そのボリュームに記憶されている全てのデータを圧縮し、圧縮されたデータを圧縮ボリューム・ファイルに格納する。続いて、オペレーティング・システムは、ドライブ文字（例えば、Ｄドライブ）をこの圧縮ボリュームに割り当てる。コンピュータ・システム上で実行されるプログラムが、ホスト・ボリュームのドライブ文字をもつ圧縮ファイルを参照しようとすると、不適切なファイル参照が発生するであろう。なぜならば、この圧縮ファイルは、圧縮ボリュームを介してのみアクセスできるからである。このため、圧縮ボリュームのドライブ文字（Ｄ）とそのホスト・ボリュームのドライブ文字（Ｃ）とは、この圧縮ボリュームがドライブ文字Ｃによって識別されるように、一般に交換される。典型的には、圧縮システムがロードされた直後に、圧縮システムは、CONFIG.SYSファイルにコマンド・ラインを置くことにより、ドライブ文字を交換する。しかし、ユーザが、この交換コマンドを不注意に消去することもある。
【００１４】
圧縮システムのインストールに伴うもう一つの問題は、不適切なファイル参照が潜在していることである。圧縮ボリュームがシステムの初期化のために必要とされるファイルを含み、ある理由により、圧縮ボリューム上のデータをアクセスすることができない場合に、コンピュータ・システムは、使用できなくなる。コンピュータ・システムが一時的に使用不可能になる可能性を最小にするために、圧縮システムは、システム・ファイルの複製をホスト・ボリュームと圧縮ボリュームとに保持する。これらの複製ファイルのサイズは、数メガバイトになる。
【００１５】
複製ファイルによる記憶スペースの浪費に加えて、複製ファイルが不適切に更新されることが多いので、この方法では、エラーが起こりやすくなる。すなわち、ユーザは、一般に、ファイルの一つのバージョンの更新は行うが、複製の更新を忘れる。図２は、圧縮ボリューム・ファイル112 およびそのホスト・ボリューム114 のブロック図である。ホスト・ボリューム114 は、任意の補助記憶装置であってもよい。圧縮ボリューム・ファイル112 およびそのホスト・ボリューム114 には、IO.SYSファイル、MSDOS.SYS ファイル、COMMAND.COM ファイル、CONFIG.SYSファイル、AUTOEXEC.BATファイル、圧縮ソフトウェア、CONFIG.SYSファイルの処理中にロードされるデバイス・ドライバ群、およびAUTOEXEC.BATファイルの処理中に実行されるプログラム群の複製が含まれている。
【課題を解決するための手段】
【００１６】
この発明は、圧縮システムをオペレーティング・システムと統合するコンピュータ・システムにおける方法を提供する。好ましい実施例においては、このコンピュータ・システムは、メモリ・デバイスおよび記憶デバイスを備えていることが好ましい。ユーザが提供するデバイス・ドライバは非標準デバイス用に提供され、このデバイス・ドライバにより、コンピュータ・システムは非標準デバイスと通信することができる。コンピュータ・システムの初期化中に、圧縮システムが、どの非標準デバイス・ドライバよりも優先して、インストールされる。非標準デバイス・ドライバをインストールするときに、非標準デバイスに予定されたドライブ文字が割り当てられることを確実にするために、先にインストールされた圧縮ボリュームに割り当てられたドライブ文字は、再割り当てされる。また、圧縮システムをインストールするときに、未決定搭載リストが、まだ搭載できないそれらの圧縮ボリュームのために保持される。各非標準デバイス・ドライバがインストールされた後に、この未決定搭載リストがチェックされ、どの圧縮ボリュームを搭載できるかが決定される。非標準デバイス・ドライバがインストールされるときに、ドライブ文字が割り当てられる。ドライブ文字が、予定されるドライブ文字でないならば、ドライブ文字の割り当てスキームが、そのドライブ文字を再割り当てするために提供される。
【発明を実施するための最良の形態】
【００１７】
この発明の好ましい実施例は、圧縮システムをオペレーティング・システムと統合するためのコンピュータの方法およびコンピュータ・システムを提供する。好ましい実施例においては、オペレーティング・システムは、圧縮システムと通信して、非標準デバイス・ドライバのインストールに先立ち、圧縮システム・デバイス・ドライバをインストールする。コンピュータ・システムの初期化中に、オペレーティング・システムは、まず圧縮システムが、インストールするのに利用可能かどうかを決定する。利用可能でなければ、オペレーティング・システムは、標準的な初期化を続ける。一方、圧縮システムが利用可能な場合には、オペレーティング・システムは、圧縮システムを含むファイルをメモリにロードし、圧縮システムの初期化関数を呼び出す。この初期化関数は、圧縮システムとオペレーティング・システムとの間のバージョン互換性を確実にし、どの圧縮ボリュームが搭載されるべきか（ドライブ文字を割り当てられるべきか）を決定する。そして、初期化関数は、決定された圧縮システム・デバイス・ドライバをインストールする。初期化関数は、圧縮ボリュームとして搭載される圧縮ボリューム・ファイルを示す未決定搭載リストを生成し、圧縮ボリューム用に予約されるべきドライブ文字の個数を求める。続いて、オペレーティング・システムは、ドライブ文字割り当て関数を呼び出し、可能ならば、圧縮ボリューム・ファイルを未決定搭載リストに搭載する。続いて、オペレーティング・システムは、各非標準デバイス・ドライバをインスールし、次に利用可能なドライブ文字をその非標準デバイス・ドライバに割り当てる。非標準デバイス・ドライバをインストールしたときに、次に利用可能なドライブ文字が、圧縮ボリューム用に予約されたドライブ文字のために、予定されたものと異なるかも知れない。その結果、オペレーティング・システムは、圧縮システムのドライブ文字割り当て関数を呼び出して、圧縮ボリューム用のドライブ文字を再割り当てし、新しくインストールされたデバイス・ドライバに予定されているドライブ文字を割り当てる。
【００１８】
図３は、圧縮システムの様々な構成要素を示すブロック図である。圧縮システムは、“DBLSPACE.BIN”301 という名前をもつファイルに記憶されていることが好ましい。このDBLSPACE.BINファイルは、関数302 〜308 を含んでいる。これらの関数は、オペレーティング・システムによって呼び出され、圧縮システムのインストールを行う。関数FirstTime 302 は、圧縮システムの初期化関数である。関数TryToSwap 303 は、圧縮システムのドライブ文字割り当て関数である。関数304 〜308 については、後に詳述する。圧縮／伸張エンジン309 は、圧縮アルゴリズムを実行するコードを含んでいる。ファイル・システム310 は、圧縮ボリューム内のファイルを管理するコードを含んでいる。この圧縮システムは、ファイル名“DBLSPACE.INI”のファイルに記憶されている圧縮ボリューム構成データをアクセスする。このDBLSPACE.INIファイルは、以下の構文をもつ構成情報を含んでいる。
【００１９】
・
・
・
FirstDrive=<DL1>
LastDrive=<DL2>
ActivateDrive=<DL3,CVF>
ActivateDrive=<DL4,CVF>
・
・
・
【００２０】
圧縮システムが最初にコンピュータ・システム内に配置されたときに、“FirstDrive”は、標準デバイス・ドライバがインストールされた後の最初に利用可能なドライブ文字（ＤＬ１）を指定するものである。したがって、FirstDriveは、１回だけ指定され、変えられることはない。“LastDrive ”は、圧縮ボリューム用に予約されたドライブ文字の範囲内の最後のドライブ文字（ＤＬ２）を指定するものである。したがって、FirstDriveがＤで、LastDrive がＨならば、５つのドライブ文字が予約される。標準デバイス・ドライバが追加され、この追加の標準デバイス・ドライバにいずれのドライブ文字も割り当てられていなくても、圧縮システムは、FirstDriveからLastDrive までのドライブ文字を予約する。しかし、この追加の標準デバイス・ドライバがオペレーティング・システム内に配置され、ドライブ文字が割り当てられると、圧縮システム用のドライブ文字は、後述するスキームに従って予約される。予約されたドライブ文字は、初期化の完了後に動的に搭載される圧縮ボリューム用のドライブ文字を一般に含んでいる。“ActivateDrive ”は、“DL3,CVF ”によって指定される圧縮ボリューム・ファイルが、搭載されることを指定するものである。“DL3 ”は、圧縮ボリュームに割り当てられるドライブ文字を指定する。“CVF ”は、ホスト・ボリュームのドライブ文字とシーケンス番号（例えば“C10 ”）を含んでいる。このシーケンス番号は、ホスト・ボリューム上で、ファイル拡張子としてこのシーケンス番号をもつ“DBLSPACE”（例えば“C:\DBLSPACE.010 ”）というファイル名の圧縮ボリューム・ファイルを指定するものである。このシーケンス番号が零の場合には、圧縮ボリュームが搭載された後に、この圧縮ボリューム用のドライブ文字とそのホスト・ボリューム用のドライブ文字とが交換される（後述する）。
【００２１】
ドライブ文字を割り当てられたデバイス・ドライバは、ドライブ・パラメータ・ブロック（ＤＰＢ）を有する。このＤＰＢは、割り当てられた各ドライブ文字用に、オペレーティング・システムによって生成される。オペレーティング・システムは、これらのＤＰＢがリンクされたリストを、ＤＰＢリストとして保持する。ＤＰＢリストの最初のＤＰＢには、ドライブ文字Ａが割り当てられ、２番目のＤＰＢには、ドライブ文字Ｂが割り当てられる。以下同様にして割り当てられる。新しくインストールされたデバイス・ドライバが、ドライブ文字を必要とするときには、そのデバイス・ドライバに対応するＤＰＢが、ＤＰＢリストの最後にリンクされる。その結果、デバイス・ドライバには、次に利用可能なドライブ文字が割り当てられる。
【００２２】
圧縮システムは、予約されるドライブ文字の個数をオペレーティング・システムに示すことにより、ドライブ文字を予約する。オペレーティング・システムは、各ドライブ文字用のＤＰＢを生成し、ＤＰＢリストの最後にその生成されたＤＰＢをリンクする。圧縮ボリュームが後に搭載されたときに、これらのＤＰＢの一つが、圧縮ボリューム・ファイルを表す情報を指すように更新される。
【００２３】
図４は、関数FirstTime の処理の流れを示すフローチャートである。関数FirstTime は、オペレーティング・システムと圧縮システムとのバージョン互換性をチェックし、他の圧縮システム関数を呼び出すための情報を初期化し、DBLSPACE.INIファイルを処理し、圧縮システム・デバイス・ドライバをインストールする。この関数FirstTime には、デバイス・ドライバの初期化パケットを指すポインタ（ES:BX ）およびバージョン番号（AX）を渡すことが好ましい（以下では、インテル80486 の技術を用いて指定されるレジスタを介して、パラメータが渡される。例えば、AXとは、インテル80486 プロセッサのAXレジスタをいう）。この関数は、バージョンに互換性がないときには、互換性エラー（キャリー・ビット・セット）を返し、別のタイプのエラーが発生したときには一般的エラー（AX!=0 ）を返す。この関数は、搭載される圧縮ボリュームの未決定搭載リストを生成し、予約された各ドライブ文字のドライブ・パラメータ・ブロック（Drive Parameter Block ：ＤＰＢ）の配置のために初期化パケットに情報を返す。
【００２４】
ステップ401 において、渡されたオペレーティング・システムのバージョン番号が圧縮システムのバージョン番号と互換性があるならば、関数は、ステップ402 に進み、そうでなければ関数はバージョン互換性エラーを返す。ステップ402 では、DBLSPACE.INIファイルが検索される。この関数は、まず、ブート・ボリュームを検索し、標準ボリューム（後に詳述）を探すかもしれない。ステップ403 において、DBLSPACE.INIファイルが発見されたならば、この関数はステップ404 に進み、そうでなければ関数は一般的なエラーを返す。ステップ404 で、関数は、DBLSPACE.INIファイルをロードし、何らかの理由によりロードが失敗したならば、一般的エラーを返す。ステップ405 において、関数は、圧縮ボリューム用に予約するドライブ文字の個数を決定する。予約するドライブ個数の決定アルゴリズムについては、後に詳述する。ステップ406 〜408 では、関数は、DBLSPACE.INIファイルの各ActivateDrive(AD）ラインを処理するためにループする。関数は、それぞれの未決定搭載リスト（Pending Mount List：ＰＭＬ）にエントリを追加する。未決定搭載リストは、圧縮ボリュームのドライブ文字、ホスト・ボリュームのドライブ文字およびActivateDrive ラインからのシーケンス番号を含んでいる。ステップ406 で、すべてのActivateDrive ラインがすでに処理されているならば、この関数は、呼び出し元にリターンし、そうでなければステップ407 に進む。ステップ407 では、関数は、次のActivateDrive ラインを選択する。ステップ408 では、この関数は、選択されたActivateDrive ライン用の未決定搭載リストにエントリを生成し、記憶する。また、この関数は、次のActivateDrive ラインを選択するためにステップ406 からのループ処理を行う。表２は、サンプルのActivateDrive ラインおよび対応する未決定搭載リストを含んでいる。
【００２５】
（表２）
DBLSPACE.INI
ActivateDrive=H,C0
ActivateDrive=D,C1
ActivateDrive=E,C2
未決定搭載リスト
圧縮ボリューム      ホスト・ボリューム    シーケンス番号
ドライブ文字        ドライブ文字
H                   C                     0
D                   C                     1
E                   C                     2
【００２６】
図５および図６は、圧縮ボリューム用に予約するドライブ文字の個数を決定するルーチンの処理の流れを示すフローチャートである。このルーチンは、ドライブ文字の再割り当てに使用する変数letterFirst とreservedDrivesをセットする。変数letterFirst は、圧縮ボリューム用に予約される最初のドライブ文字を示し、標準デバイス・ドライバのインストール後の最初に利用可能なドライブ文字に対応する。変数reservedDrivesは、圧縮ボリューム用に予約されたドライブ文字の個数を示している。例えば、letterFirst がＤであり、reservedDrivesが５である場合に、ドライブ文字Ｄ、Ｅ、Ｆ、ＧおよびＨが、圧縮ボリューム用に予約される。予約するドライブ文字の個数を決定するときに、このルーチンは、変数letterHighest を、ActivateDrive ラインにおける最も高位の圧縮ボリュームのドライブ文字の割り当てに等しくなるようにセットする。ドライブ文字の予約された個数は、次の式により決定される。
【００２７】
maximum(LastDrive, letterHighest) 
minimun(FirstDrive, letterFirst)
【００２８】
ActivateDrive ラインにおける圧縮ボリュームのドライブ文字が、標準デバイス・ドライバに割り当てられたドライブ文字と競合するならば、圧縮ボリュームのドライブ文字は、予約された範囲（letterFirst とreservedDrives）外の次の高位のドライブ文字に変えられ、letterFirst の値は一つ増加させられる。
【００２９】
ステップ501 で、このルーチンは、変数reservedDrivesを１にセットする。この値は、予約されるドライブ文字の最小の個数である。ステップ502 で、このルーチンは、変数letterFirst を、標準デバイス・ドライバのインストール後に利用可能な最初のドライブ文字にセットする。ステップ503 において、LastDrive の値が変数letterFirst 以上ならば、標準デバイス・ドライバは、ドライブ文字LastDrive を含むように配置されていず、このルーチンはステップ504 に進む。そうでなければ、このルーチンはステップ505 に進む。ステップ504 で、ルーチンは、変数reserveDrives を、letterFirst からLastDrive によって示されるドライブの範囲のドライブ数に等しくなるようにセットする。ステップ505 において、変数letterFirst がFirstDriveラインの値よりも大きいならば、標準デバイス・ドライバが、圧縮システムの初期配置からオペレーティング・システムに加えられており、ルーチンは、ステップ506 に進む。そうでなければ、ルーチンは、ステップ507 に進む。ステップ506 では、ルーチンは、letterFirst とFirstDriveとの間の相違を反映するように、変数reservedDrivesを増加させる。ステップ507 では、ルーチンは、変数letterHighest を、ActivateDrive ライン内の最高位の圧縮ボリューム・ドライブ文字に等しくなるようにセットする。ステップ508 において、letterFirst からletterHighest の範囲のドライブ文字の個数が、変数reservedDrivesよりも大きいならば、ルーチンは、ステップ509 に進み、そうでなければ、ルーチンは、ステップ510 に進む。ステップ509 では、ルーチンは、予約されたドライブ文字の個数を、letterHighest からletterFirst までの範囲のドライブ文字の個数にセットする。
【００３０】
ステップ510 から514 では、ルーチンは、最初に利用可能なドライブ文字（letterFirst ）よりも小さなドライブ文字をもつActivateDrive ラインの圧縮ボリューム・ドライブ文字を調整するためのループ処理を行う。これは、標準デバイス・ドライバが、圧縮システムの初期構成に追加された結果生じるものである。ステップ510 では、ルーチンは、最初から始まるActivateDrive ラインの次のものを選択する。ステップ511 では、すべてのActivateDrive ラインがすでに選択されているならば、ルーチンはリターンし、そうでなければ、ルーチンはステップ512 に進む。ステップ512 では、選択されたActivateDrive ラインの圧縮ボリューム・ドライブ文字が、最初に利用可能なドライブ文字よりも小さいならば、ルーチンはステップ513 に進み、そうでなけばルーチンはステップ510 にループし、次のActivateDrive ラインを選択する。ステップ513 では、ルーチンは、予約されたドライブの個数を１増加させる。ステップ514 では、ルーチンは、選択されたActivateDrive ラインの圧縮ボリューム・ドライブ文字を、最後に予約されたドライブ文字にセットし、ステップ510 にループし、次のActivateDrive ラインを選択する。変形例として、letterFirst よりも小さなドライブ文字を割り当たられた圧縮ボリュームを、圧縮ボリューム用に予約された最初のドライブ文字に再割り当てすることもできる。
【００３１】
図７は、関数TryToSwap の処理の流れを示すフローチャートである。関数TryToSwap には、新しくインストールされたデバイス・ドライバに割り当てる必要のあるドライブ文字の個数、圧縮ボリューム用に予約された最初のドライブ文字（letterBottom）、および予約されたドライブ文字の個数が渡される。この関数は、圧縮ボリューム用に予約されたドライブ文字と、デバイス・ドライバによって予定されたドライブ文字とが競合した場合に、これを回避するものである。この関数は、圧縮ボリューム用に予約された範囲内にあるボリュームを、利用可能なドライブ文字に割り当て、オペレーティング・システムが、新しくインストールされたデバイス・ドライバに、予定されたドライブ文字を割り当てることができるようにする。新しく割り当てられたドライブ文字用のＤＰＢは、この関数が呼び出されたときに、ＤＰＢリストの最後にリンクされる。ドライブ文字を再割り当てした後、この関数は、再割り当てのために搭載可能な未決定搭載リストからドライブを搭載する。渡されたドライブ文字の個数が零の場合には、この関数は、ドライブ文字を再割り当てすることなく、未決定搭載リストからドライブを搭載する。ステップ601 から604 において、関数は、圧縮ボリューム・ファイルを新しいドライブ文字に再割り当てするループ処理を行う。ステップ601 において、必要とされるドライブ文字が零に等しい（nDrives=0 ）の場合には、十分な圧縮ボリュームが再割り当てされたか、いずれも再割り当ての必要がなく、関数はステップ605 に進む。そうでなければ、関数はステップ602 に進む。ステップ602 では、関数は、letterBottomによって示されるドライブ文字に現在割り当てられている圧縮ボリュームを、最初に利用可能なドライブ文字（すなわち、letterBottomによって示されるドライブ文字に予約されたドライブ数（reservedDrives）を加えたドライブ文字）に再割り当てする。この再割り当ては、圧縮ボリューム用のＤＰＢをＤＰＢリストの最後に移動する処理を含んでいる。ステップ603 では、関数は、圧縮ボリュームの新しいドライブ文字の割り当てを反映するように、letterBottomによって示されるドライブ文字用の未決定搭載リストの全ての参照を、新しいドライブ文字に変える。ステップ604 において、関数は、圧縮ボリューム用に予約された最低位のドライブ文字を示すように、変数letterBottomを増加させ、必要とされるドライブ文字の個数を減少させ、ステップ601 へループする。
【００３２】
ステップ605 において、関数は、圧縮ボリュームに先に割り当てられたドライブ文字を、新しくインストールされたデバイス・ドライバに割り当てる。これは、新しくインストールされたデバイス・ドライバ用のＤＰＢ（この関数が呼び出されたときに、このＤＰＢはＤＰＢリストの最後にある）を圧縮ボリューム用に予約されたＤＰＢ（letterFirst ）の前に移動する処理を含んでいる。ステップ606 〜610 において、関数は、それらの圧縮ボリュームを、搭載可能な未決定搭載リストに搭載するループ処理を行う。試行された搭載が不成功に終わるいくつかの理由がある。圧縮ボリュームのホスト・ボリュームが標準デバイスでない場合には、その圧縮ボリュームは、CONFIG.SYSファイルが処理されるまで、搭載できない。また、いくつかの標準デバイス・ドライバが、デバイスからの読み出しをサポートするが、書き込みはサポートしない。一方、非標準デバイス・ドライバは、CONFIG.SYSファイルを処理するときに、インストールされる。ステップ606 において、未決定搭載リストの全てのエントリが処理されたならば、関数は呼び出し元にリターンし、そうでなければ、関数はステップ607 に進む。ステップ607 において、未決定搭載リストの次のエントリの圧縮ボリュームを搭載できるならば、関数はステップ608 に進み、そうでなければ、関数はステップ606 にループする。ホスト・ボリュームのデバイス・ドライバがこの関数の最後の呼び出しからインストールされたならば、圧縮ボリュームは搭載されるであろう。ステップ608 では、関数は、未決定搭載リストの次のエントリによって示される圧縮ボリュームを搭載する。搭載は、圧縮ボリューム用に予約されたＤＰＢを、この圧縮ボリュームを表す情報をポイントするようにセットする処理を含んでいる。ステップ609 では、シーケンス番号が零のときに、関数は、搭載された圧縮ボリュームのドライブ文字と、そのホスト・ボリュームのドライブ文字とを入れ換える（スワップする）。ステップ610 では、関数は、そのエントリを、未決定搭載リストから消去し、ステップ606 へループし、次のエントリの処理を行う。
【００３３】
関数InquireInitSize およびMoveToInitLocationが呼び出され、初期化関数（FirstTime ）の実行後に必要とされる圧縮システム・コードを移動する。この関数InquireInitSize は、初期化関数の実行の後に圧縮システム・コードに必要なメモリの容量を指定するものである。このコードに必要なメモリのパラグラフの個数が、この関数の実行結果として返される（ＡＸ）。関数MoveToInitTimeLocationは、渡されたアドレスに圧縮システム・コードを移動させる。関数MoveToInitTimeLocationには、コードを移動させるべきセグメント・ベース・アドレス（ＥＳ）が渡される。この関数は、その実行結果として、ドライバの低位スタブの終了アドレス（ＡＸ）を返し、移動された圧縮システム・コードの部分が空きになるようにする。
【００３４】
関数InquireResidentImageSizeとPerformFinalPlacement は、CONFIG.SYSファイルを処理した後に必要とされる圧縮システムの常駐部を移動させるために呼び出される。これらの関数は、様々な常駐プログラムの関数を呼び出すために、多重割り込みによって呼び出される。これらの関数は、CONFIG.SYSファイル（後に詳述する）によって指定されたものとして、DBLSPACE.SYSファイルによって呼び出されることが好ましい。MS-DOSでは、多重割り込みはInt2f 割り込みであり、これらの関数のファンクション・ナンバは4A11ｈである。関数InquireResidentImageSizeはBX=1によって指定され、関数PerformFinalPlacement はBX=2によって指定される。関数InquireResidentImageSizeは、圧縮システムの常駐部によって必要とされるパラグラフの個数を指定する。関数InquireResidentImageSizeは、必要とされるメモリのパラグラフの個数（AX）を返す。関数PerformFinalPlacement は圧縮システムの常駐部を移動させる。関数PerformFinalPlacement には、この常駐部を配置すべきセグメント・ベース・アドレス（ＥＳ）が渡される。
【００３５】
関数HooksIntは、割り込みベクタ上のフックをインストールする。好ましい実施例では、圧縮システムは割り込みInt21 、Int26 およびInt2f をフックする。この関数は、オペレーティング・システムが、オペレーティング・システムの割り込みベクタをセットした後に、呼び出される。
【００３６】
図８〜図11は、この発明による圧縮システムのインストールのために適合されたオペレーティング・システムの好ましい初期化処理を示すフローチャートである。コンピュータ・システムが最初にパワー・オンされ、またはブートされるときに、制御はROMBoot ルーチンに渡される。図８は、ROMBoot ルーチンのフローチャートである。ステップ701 では、このルーチンは、どのボリュームからブートを行うべきかを決定し、そのブート・ボリュームからディスク・ブート・セクタをロードする。このディスク・ブート・セクタは、ディスクからブートを行うためのコードを含んでいる。ステップ702 では、このルーチンは、ロードされたコード（DiskBootSectorルーチン）にジャンプする。
【００３７】
図９は、DiskBootSectorルーチンのフローチャートである。DiskBootSectorルーチンは、“IO.SYS”という名前をもつファイルをロードし、そのファイルのSYSINIT ルーチンへジャンプする。IO.SYSファイルは、システムの初期化を続けるためのコードを含んでいる。ステップ801 では、このルーチンは、IO.SYSファイル用のブート・ボリュームを検索する。ステップ802 では、IO.SYSファイルが発見されると、ルーチンはステップ803 に進み、そうでなければ、ルーチンはブート処理をエラーで終了する。ステップ803 では、ルーチンは、IO.SYSファイルをロードする。ステップ804 では、ルーチンは、ロードされたIO.SYSファイルのSYSINIT （システム初期化）ルーチンにジャンプする。
【００３８】
図10および図11は、SYSINIT ルーチンのフローチャートを含んでいる。SYSINIT ルーチンは、標準デバイス・ドライバをインストールし、圧縮システム・デバイス・ドライバをインストールし、非標準デバイス・ドライバをインストールする。このルーチンは、圧縮システムの関数を呼び出して、圧縮システム・デバイス・ドライバのインストールを調整し、ドライブ文字の割り当てを調整する。ステップ901 では、ルーチンは、SYSINIT コードを高位のメモリに再配置する。SYSINIT コードは、最初は、低位のメモリにロードされていた。このルーチンによりロードされるデバイス・ドライバも、低位メモリにロードされるであろう。SYSINIT コードは、システム初期化の後は必要とされないので、デバイス・ドライバを可能な限り最低位のメモリにロードできるように、このルーチンは移動される。SYSINIT コードが移動されなかった場合には、その結果として、ギャップが低位のメモリに発生する。ステップ902 では、ルーチンは“MSDOS.SYS ”という名前を持つファイルを検索する。MSDOS.SYS ファイルは、オペレーティング・システムのカーネルを含んでいる。ステップ903 では、MSDOS.SYS ファイルが発見されると、ルーチンはステップ904 に進み、そうでなければ、この初期化処理はエラーで終了する。ステップ904 では、ルーチンは、MSDOS.SYS ファイルをロードする。ステップ905 において、ルーチンは、標準デバイス・ドライバをロードし、ドライブ文字を割り当てることにより、標準デバイス・ドライバをインストールする。ステップ906 では、ルーチンは、“DBLSPACE.BIN”という名前をもつファイルを検索する。このDBLSPACE.BINファイルは、好ましくは、圧縮システムを初期化するためのコードを含んでいる。ステップ907 において、DBLSPACE.BINファイルが発見されると、ルーチンはステップ908 に進み、そうでなければ、ルーチンはステップ915 に進む。ステップ908 では、ルーチンは、DBLSPACE.BINファイルをロードする。ステップ909 において、DBLSPACE.BINファイルのスタンプ・フィールドが適切ならば、ルーチンはステップ910 に進み、そうでなければルーチンはステップ915 に進む。DBLSPACE.BINファイルは、予め定められた配置（スタンプ・フィールド）に予め定められた値を備えている。この予め定められた値の存在により、DBLSPACE.BINファイルが圧縮システムであり、ユーザが不注意にDBLSPACE.BINと名付けたファイルでないことが二重にチェックされ、DBLSPACE.BINファイルが圧縮システムであることが確実になる。好ましい実施例においては、この予め定められた値は、ASCII 文字のカンマとピリオド（“,.”）であり、予め定められた配置は、ファイルの12ｈである。ステップ910 では、このルーチンは、DBLSPACE.BINファイルの関数FirstTime を呼び出して、圧縮システム・デバイス・ドライバをインストールし、ドライブ文字を予約し、未決定搭載リストを作成する。ステップ911 では、関数FirstTime がエラーなく実行されると、ルーチンはステップ912 に進み、そうでなければルーチンはステップ915 に進む。ステップ912 および913 では、ルーチンは、圧縮システムを指定して、初期化関数（FirstTime ）の実行後に必要とされるそのコードを配置し、非標準デバイス・ドライバが低位のメモリに配置されるようにする。ステップ912 では、ルーチンは、圧縮システムの関数InquireInitSize を呼び出し、圧縮システムが必要とするメモリ容量を決定する。ステップ913 では、ルーチンは、圧縮システム・コードが再配置される場所を決定し、圧縮システムの関数MoveToInitTimeLocationを呼び出して、そのコードを移動させる。ステップ914 では、ルーチンは、ドライブ文字のカウント値０（nDrives=0 ）を渡す圧縮システムの関数TryToSwap を呼び出す。これにより、圧縮システムは、先にインストールされた標準デバイス用のデバイス・ドライバに基づいて搭載できる未決定搭載リストの圧縮ボリュームを搭載する機会を提供される。ステップ915 では、ルーチンは、関数ProcessConfig を呼び出し、CONFIG.SYSファイルを処理する。関数ProcessConfig は、非標準デバイス・ドライバをインストールし、まだ搭載されていない圧縮ボリュームの搭載を指示する。圧縮システムの常駐部は、DBLSPACE.SYSファイル（後の詳述）の参照を含むCONFIG.SYSファイルを処理するときに、メモリ・マネージャによって、その最終配置に移動されていてもよい。ステップ916 および917 では、ルーチンは、圧縮システムがまで移動されていないならば、圧縮システムをその最終の常駐部に移動させる。ステップ916 では、ルーチンは、圧縮システムの関数GetResidentImageSizeを呼び出し、圧縮システムの常駐部に必要なメモリ容量を決定する。ステップ917 では、ルーチンは、圧縮システムの関数PerformFinalPlacement を呼び出し、圧縮システムの常駐部をその最終の常駐配置に移動させる。
【００３９】
図12は、関数ProcessConfig のフローチャートである。この関数ProcessConfig は、非標準デバイス・ドライバをインストールし、圧縮ボリュームの搭載を指示する。ステップ1001では、ルーチンは、CONFIG.SYSファイルを検索し、もしあれば、このファイルをロードする。ステップ1002では、CONFIG.SYSファイルに示された全てのデバイス・ドライバが処理されたならば、関数はリターンし、そうでなければ、関数はステップ1003に進む。ステップ1003では、関数は、CONFIG.SYSファイルに示された次のデバイス・ドライバをインストールする。インストールされたデバイス・ドライバは、それが必要とするドライブ文字の個数（nDrives ）の指定を返し、圧縮システム用に予約されたドライブ文字よりも大きなドライブ文字に、一時的に割り当てられる。この割り当ては、ＤＰＢをＤＰＢリストの最後に追加するという標準的なオペレーティング・システム技術によって達成される。ステップ1004では、必要とされるドライブ文字の個数が零ならば、関数はステップ1002にループし、次のデバイス・ドライバを処理し、そうでなければ関数はステップ1005へ進む。ステップ1005では、関数は、圧縮システムの関数TryToSwap を呼び出し、新しくインストールされたデバイス・ドライバ用のドライブ文字と、圧縮ボリューム用に予約された範囲内のドライブ文字を割り当てられた任意のボリュームのドライブ文字とを入れ換える。そして、関数はステップ1002にループし、次のデバイス・ドライバを処理する。
【００４０】
（表３）
DBLSPACE.INI
FIRSTDRIVE=D
LASTDRIVE=H 
ACTIVATEDRIVE=H,C0
ACTIVATEDRIVE=D,C1
ACTIVATEDRIVE=E,C2
CONFIG.SYS
DEVICE=C:\RD1.SYS 
SHELL=C:\DOS\COMMAND.COM C:\DOS\ /e:1024/p
DEVICE=C:\DOS\HIMEM.SYS 
STACKS=9,256
DOS=HIGH,UMB
FILES=50
DEVICEHIGH=C:\DOS\DBLSPACE.SYS /MOVE
【００４１】
表３は、DBLSPACE.INIファイルおよびCONFIG.SYSファイルのサンプルを示している。ActivateDrive ラインは、３つの圧縮ボリュームが搭載されることを示している。C:\DBLSPACE.000 という名前をもつ圧縮ボリューム・ファイル（CVF0）は、ドライバＣ：として搭載され、そのホスト・ボリュームは、ライン“ACTIVATEDRIVE=H,C0”に示すように、ドライブＨに交換される。C:\DBLSPACE.001 という名前をもつ圧縮ボリューム・ファイル（CVF1）は、ライン“ACTIVATEDRIVE=D,C1”に示すように、ドライブＤとして搭載される。“C:\DBLSPACE.002 ”という名前をもつ圧縮ボリューム・ファイル（CVF2）は、ライン“ACTIVATEDRIVE=E,C2”に示すように、ドライブＥとして搭載される。CONFIG.SYSファイルは、RD1.SYS ファイルの非標準デバイス・ドライバがインストールされることを示している。
【００４２】
図13は、初期化処理中のドライブ文字の割り当てを示している。ルーチンSYSINIT は、２つのフロッピィ・ディスク・ドライブ（ＦＤ）用のデバイス・ドライバと一つのハード・ディスク（ＨＤ）用のデバイス・ドライバに、ドライブ文字Ａ、ＢおよびＣをそれぞれ割り当てる。
【００４３】
続いて、ルーチンSYSINIT は、関数FirstTime を呼び出す。関数FirstTime は、標準デバイス・ドライバをロードした後に利用可能な最初のドライブ文字（letterFirst ）および圧縮ボリューム用に予約されたドライブ文字（reserveDrives ）の個数を決定する。また、関数FirstTime は、搭載される各圧縮ボリューム用の未決定搭載リスト（ＰＭＬ）にエントリを追加する。ライン1101に示すように、ドライブ文字ＡおよびＢは、フロッピィ・ドライブ（ＦＤ）に割り当てられ、ドライブ文字Ｃは、ハード・ドライブ（ＨＤ）に割り当てられ、ドライブ文字ＤからＨは、圧縮ボリューム（ＣＲ）用に予約されている。また、未決定搭載リストが、CVF0、CVF1およびCVF2用のエントリを含んでいる。
【００４４】
続いて、ルーチンSYSINIT は、関数TryToSwap を呼び出し、ドライブ文字が交換される必要のないことの指示およびletterBottomとreserveDrives によって示される予約されたドライブ文字を渡す。関数TryToSwap は、圧縮ボリュームを未決定搭載リストに搭載することを試みる。ライン1102に示すように、この関数は、未決定搭載リストからCVF0のエントリを消去する。関数は、ドライブ文字ＨのＤＰＢを、CVF0をポイントするように更新することにより、CVF0を搭載する。続いて、関数は、ドライブ文字ＣとＨのＤＰＢを交換する。シーケンス番号０が、ホスト用のドライブ文字と圧縮ボリューム用のドライブ文字とが交換されることを示している。ライン1103に示すように、関数は、CVF1のエントリを未決定搭載リストから消去し、CVF1をドライブ文字ＤのＤＰＢを、CVF1をポイントするように更新することにより、CVF1を搭載する。ライン1104に示すように、関数は、CVF2のエントリを未決定搭載リストから消去し、ドライブ文字Ｅ用のＤＰＢを、CVF2をポイントするように更新することにより、CVF2を搭載する。
【００４５】
次に、ルーチンSYSINIT は、CONFIG.SYSファイルを処理する。このルーチンは、RD1.SYS のデバイス・ドライバをインストールし、ドライブ文字ＩをRD1 に一時的に割り当てる。これは、RD1 用のＤＰＢを、ＤＰＢリストの最後に追加することにより行われる。ルーチンSYSINIT は、関数TryToSwap を呼び出し、一つのドライブ文字が交換されることを示すパラメータを渡す。この関数は、CVF0およびRD1 用のＤＰＢを交換し、letterBottomを更新する。
【００４６】
図14は、追加した標準デバイス・ドライバ（RD0 ）がインストールされるときに、表３のサンプルのドライブ文字の割り当てを示すものである。ライン1200に示すように、標準デバイス・ドライバが、ドライブ文字ＡからＤに割り当てられている。ライン1201に示すように、５つのドライブ文字が圧縮ボリューム用に予約され、未決定搭載リストがエントリCVF0、CVF1およびCVF2を含んでいる。追加したデバイス・ドライバRD0 との競合が生じているので、未決定搭載リストのCVF1用の圧縮ボリューム・ドライブ文字は、Ｉに変えられている。ライン1206に示すように、デバイス・ドライバRD1 がインストールされたときに、そのドライブ文字がCVF2用のドライブ文字と競合したので、それらのドライブ文字は交換された。
【００４７】
（表４）
DBLSPACE.INI
FIRSTDRIVE=D
LASTDRIVE=H 
ACTIVATEDRIVE=H,C0
ACTIVATEDRIVE=F,E1
ACTIVATEDRIVE=G,C2
CONFIG.SYS
DEVICE=C:\RD1.SYS 
DEVICE=C:\RD2.SYS 
SHELL=C:\DOS\COMMAND.COM C:\DOS\ /e:1024 /p 
DEVICE=C:\DOS\HIMEM.SYS 
STACKS=9,256
DOS=HIGH,UMB
FILES=50
DEVICEHIGH=C:\DOS\DBLSPACE.SYS /MOVE
【００４８】
表４は、DBLSPACE.INIファイルとCONFIG.SYSファイルのサンプルを示している。ActivateDrive ラインは、３つの圧縮ボリューム・ファイルが搭載されていることを示している。C:\DBLSPACE.000 という名前を持つ圧縮ボリューム・ファイル（CVF0）は、ドライブＣとして搭載され、そのホスト・ボリュームは、ライン“ACTIVATEDRIVE=H,C0”に示すように、ドライブＨに交換される。E:\DBLSPACE.001 という名前をもつ圧縮ボリューム・ファイル（CVF1）は、ライン“ACTIVATEDRIVE=F,E1”に示すように、ドライブＦとして搭載される。“C:\DBLSPACE.002 ”のファイル名をもつ圧縮ボリューム・ファイルは、ライン“ACTIVATEDRIVE=G,C2”に示すように、ドライブＧとして搭載される。この例では、オペレーティング・システムは、４つの標準デバイス・ドライバをインストールすると仮定されている。
【００４９】
図15は、初期化処理中のドライブの割り当てを示している。ルーチンSYSINIT は、２つのフロッピィ・ディスク・ドライブ（FD）、一つのハード・ディスク・ドライブ（HD）および一つのROM ドライブ（RD0 ）を、ドライブ文字Ａ、Ｂ、ＣおよびＤにそれぞれ割り当てる。
【００５０】
続いて、ルーチンSYSINIT は、関数FirstTime を呼び出す。関数FirstTime は、圧縮ボリューム・ファイル用の最初のドライブ文字（letterFirst ）およびその圧縮ボリューム用に予約されたドライブ文字の個数（reservedDrives）を決定する。この関数FirstTime は、また、各圧縮ボリューム用の未決定搭載リストへエントリを追加する。
【００５１】
続いて、ルーチンSYSINIT は、関数TryToSwap を呼び出し、ドライブ文字の交換が不要であることを示す情報を渡す。関数TryToSwap は、圧縮ボリュームを未決定搭載リストを搭載する。ライン1302に示すように、関数は、未決定搭載リストからCVF0用のエントリを消去する。関数は、ドライブ文字ＨのＤＰＢをCVF0をポイントするようにセットし、続いて、そのドライブ文字をドライブ文字ＣのＤＰＢと交換する。ライン1303に示すように、デバイス・ドライバがドライブ文字Ｅに搭載されていないので、関数は、まだCVF1を搭載することができない。この関数は、CVF2用のエントリを未決定搭載リストから消去する。関数は、ドライブ文字ＧのＤＰＢをCVF2をポイントするようにセットする。
【００５２】
続いて、ルーチンSYSINIT は、CONFIG.SYSファイルを処理する。ライン1304に示すように、このルーチンは、RD1.SYS のデバイス・ドライバをインストールし、RD1 にドライブ文字Ｊを一時的に割り当てる。ルーチンSYSINIT は、関数TryToSwap を呼び出し、一つのドライブ文字が交換されることを示すパラメータを渡す。関数TryToSwap は、ライン1305に示すように、ＤＰＢを交換することにより、ドライブ文字Ｅ（letterFirst ）をRD1 に割り当てる。関数は、CVF1のエントリを未決定搭載リストから消去する。関数は、ドライブ文字Ｆ用のＤＰＢをCVF1をポイントするようにセットする。
【００５３】
続いて、ルーチンは、ライン1307に示すように、RD2.SYS ファイルのデバイス・ドライブをインストールし、ドライブ文字ＫをRD2 に一時的に割り当てる。ルーチンSYSINIT は、関数TryToSwap を呼び出し、一つのドライブ文字が交換されることを示すパラメータを渡す。関数は、ライン1308に示すように、ＤＰＢを交換することにより、ドライブ文字Ｆ（letterFirst ）をRD2 に割り当てる。
【００５４】
図16は、この発明の好ましい実施例を実現するコンピュータ・システムのブロック図である。好ましいオペレーティング・システムおよび圧縮システムが、固定ボリューム1406に格納されている。
【００５５】
図17は、固定ボリュームに記憶された好ましい圧縮ボリューム・ファイル1501のブロック図である。オペレーティング／圧縮システム1410のコアを形成するシステム・ファイル（IO.SYS、MSDOS.SYS 、DBLSPACE.BINおよびDBLSPACE.INI）が、固定ボリューム1406に記憶されている。固定ボリューム・ドライブ1406が、圧縮ボリューム・ファイル1501のホスト・ボリュームとして示されているが、ホスト・ボリュームは、取り外し可能なボリューム・ドライブ1405、1408の一つであってもよい。圧縮ボリューム・ファイル1501は、ファイルCOMMAND.COM 、CONFIG.SYSおよびAUTOEXEC.BATを含んでいる。また、圧縮ボリューム・ファイル1501は、CONFIG.SYSファイル内で参照されるデバイス・ドライバおよびAUTOEXEC.BATファイルの処理中にロードされるプログラムを含んでいる。この発明の好ましい実施例によると、圧縮ボリューム・ファイルとホスト・ボリューム内の複製システム・ファイルを記憶する必要性を軽減することができる。
【００５６】
好ましい実施例においては、コンピュータ・システムを取り外し可能なボリュームから初期化することができ、圧縮システムをインストールすることができる。さらに、圧縮ボリュームがコンピュータ・システムに記憶されていることを示す参照を、取り外し可能なボリュームが含んでいない（すなわち、DBLSPACE.INIファイルがない）ときに、これを実行することができる。コンピュータ・システムが取り外し可能ボリューム（例えば、ドライブ文字Ａを割り当てられたフロッピィ・ディスク・ドライブ）から初期化されるときに、圧縮システムをインストールすることができる。IO.SYS、MSDOS.SYS およびDBLSPACE.BINファイルが取り外し可能ボリュームに記憶されているが、DBLSPACE.INIファイルが、固定ボリューム（例えば、ドライブ文字Ｃを割り当てられたハード・ディスク・ドライブ）に記憶されているときに、固定ボリュームのDBLSPACE.INIファイルに指定された圧縮ボリュームが搭載される。
【００５７】
圧縮システムの関数FirstTime は、DBLSPACE.INIファイルを配置する。ブート・ボリュームが、DBLSPACE.INIファイルを含むならば、そのファイルは、圧縮システムによって使用される。ブート・ファイルが、MS-DOSの標準ドライブＣのような固定ドライブであり、かつ、ブート・ボリュームがDBLSPACE.INIファイルを含んでいないならば、圧縮システムは、インストールされない。ブート・ボリュームが取外し可能ドライブであり、かつ、ブート・ボリュームがDBLSPACE.INIを含んでいないならば、関数FirstTime は、MS-DOSの標準ドライブＣのような固定ボリュームを探す。DBLSPACE.INIファイルが発見できない場合には、圧縮システムはインストールされない。
【００５８】
図20は、DBLSPACE.INIファイルの配置を決定するためのフローチャートである。ステップ1801では、このルーチンは、ブート・ドライブを決定する。ステップ1802において、DBLSPACE.INIファイルがブート・ドライブ上に存在するならば、そのファイルが、圧縮システムの初期化に使用され、このルーチンはリターンし、そうでなければ、ルーチンはステップ1803に進む。ステップ1803では、DBLSPACE.INIファイルが標準ドライブ上に存在するならば、そのファイルが、圧縮システムの初期化に使用され、ルーチンはリターンし、そうでなければ、エラーを返す。
【００５９】
図18は、CONFIG.SYSファイルの処理後のコンピュータ・システムのＲＡＭのメモリ・マップである。このＲＡＭは、通常メモリ1601、上位メモリ1602および拡張メモリ1603の３つのメイン・エリアに分割されている。通常メモリ1601は、０KBから640KB までの領域である。上位メモリ1602は、640KB から１MBまでの領域であり、一般に読み出し専用メモリ（ＲＯＭ）およびハードウェア・デバイス・メモリのために予約されている。拡張メモリ1603は、１MBを越えるメモリである。拡張メモリの最初の64KBは、高位メモリ・エリア（High Memory Area：HMA ）として参照される。
【００６０】
通常メモリ1601は、オペレーティング・システムがプログラムをロードし実行するエリアである。プログラムおよびそのデータ・ファイルに加えて、通常メモリは、オペレーティング・システム、CONFIG.SYSファイルで参照されるデバイス・ドライバおよびAUTOEXEC.BATファイルによって指定される任意のメモリ常駐プログラムを含んでいる。BIOS、ビデオ・メモリ、ハードウェア・デバイス・メモリ、インストール可能ＲＯＭ、およびＲＯＭ-BIOS は、上位メモリ1602に記憶される。
【００６１】
MS-DOSおよび互換性のあるオペレーティング・システムにおいて、通常メモリ・エリア1601は、アプリケーション・プログラムによって使用される、できるだけ多くのフリー・スペースをもつことが望ましい。通常メモリ・エリアのフリー・スペースの容量を最大にするために、メモリ・マネージャと呼ばれる分類に属するソフトウェア製品が徐々に現れてきている。例えば、マイクロソフト社のEMM386は、ソフトウェアのメモリ・マネージャである。メモリ・マネージャは、CONFIG.SYSファイルにおいて指定され、オペレーティング・システムによってインストールされる。メモリ・マネージャは、(1) インテル80386 以上のＣＰＵのページング機能、および(2) 上位メモリ1602の利用可能なフリー・スペースを利用する。インテル80386 のページング機能を用いると、これらのメモリ・マネージャは、拡張メモリ1603からメモリ1605、1606、1607および1608の未使用部分にＲＡＭの「マップ・イン」を行うことができ、これにより、上位メモリ・ブロック（Upper Memory Block：ＵＭＢ）として知られているメモリ・ブロックを生成する。ＵＭＢについての詳細な内容を示したものとして、Gookin, DOS 5 のメモリ・マネージング(1991)がある。
【００６２】
メモリ・マネージャは、特別のコマンドを使用して、デバイス・ドライバおよび常駐（Terminate-and-Stay Resident ：ＴＳＲ）プログラムを一または複数のＵＭＢにインストールする。MS-DOSおよび互換性のあるオペレーティング・システムでは、CONFIG.SYSファイルのコマンドDEVICE[HIGH]が、デバイス・ドライバがUMB にインストールされることを示すために使用される。
【００６３】
圧縮システムは大きいので、通常メモリ・エリア1601の代わりにUMB に圧縮システムをインストールすることが望ましい。一方、メモリ・マネージャがCONFIG.SYSファイルの処理中にロードされるまで、圧縮システムをUMB にロードすることはできない。以下に示すように、圧縮システムを、UMB に最終配置することができる。
【００６４】
図19は、ＲＡＭのメモリ・マップであり、初期配置1710、一時配置1712、ならびに圧縮システム用の３つの可能な最終（常駐）配置1714、1716および1718を示している。最終配置1714は、圧縮システム・コードが通常メモリ一時配置1712から最初に利用可能なフリー・スペースに移動された結果として生じる。最終配置1716は、圧縮システム・コードが一時配置1712からＵＭＢに移動された結果として生じる。最終配置1718は、圧縮システム・コードが高位メモリ・エリアに移動された結果として生じる。圧縮システムは、メモリ・マネージャがインストールされたことを知らないかもしれないので、圧縮システムは、ＵＭＢへ効果的に移動することができない。したがって、圧縮システムは、圧縮システムの最終配置を制御する“DBLSPACE.SYS”ファイルを含んでいる。表３に示すように、次のコマンドをCONFIG.SYSファイルに含めることができ、圧縮システムの最終配置を制御する。
【００６５】
DEVICEHIGH=C:\DOS\DBLSPACE.SYS /MOVE
【００６６】
このコマンドの他のフォーマットとして次のものがある。
【００６７】
DEVICE=C:\DBLSPACE.SYS /MOVE
または
DEVICE[HIGH]=C:\DBLSPACE.SYS /MOVE /NOHMA 
【００６８】
これらのフォーマットは、メモリのどの部分が圧縮システムの最終配置のために利用可能であるかを制御する。例えば、圧縮システムをＨＭＡにロードし、一方で、そのスタブ部分を通常メモリに残し、またはＵＭＢに移動することができる。また、選択的に、ＨＭＡが利用可能でない場合には、圧縮システムをＵＭＢまたは通常メモリにロードすることもできる。好ましい実施例では、圧縮システムの圧縮／伸張エンジンを、メモリの一部に記憶し、圧縮システムのファイル・システムをメモリの異なる部分に記憶することができる。DBLSPACE.SYSファイルのコードは、圧縮コードを配置する関数InquireResidentImageSizeとPerformFinalPlacement を呼び出す。上記コマンドは、様々なメモリ・マネージャの構文と適合するように変更することができる。メモリ・マネージャがインストールされない場合には、圧縮システムが最終配置を選択することが好ましい。
【００６９】
データを圧縮および伸張する好ましい方法が、米国特許出願「データ圧縮システムおよび方法（METHOD AND SYSTEM FOR DATA COMPRESSION）」（出願番号08/031,189）に示されている。
【００７０】
この発明による方法およびシステムが、好ましい実施例により説明されてきたが、この発明がこの実施例に制限されるものでないことはいうまでもない。この発明の思想内における変更が、この技術分野の専門家ならば明らかであろう。例えば、この技術分野の専門家ならば、圧縮システムと異なる他のシステム（例えば、暗号システム）のデバイス・ドライバがこの発明に従ってインストールされることも可能であることを知るであろう。この発明の範囲は、特許請求の範囲により定義される。
【図面の簡単な説明】
【００７１】
【図１】従来のコンピュータ・システムのブロック図である。
【図２】従来技術における圧縮ボリューム・ファイル（ＣＶＦ）およびそのホスト・ボリュームのブロック図である。
【図３】圧縮システムの様々な要素を示すブロック図である。
【図４】関数FirstTime の処理の流れを示すフローチャートである。
【図５】圧縮ボリューム用に予約されるドライブ文字の個数を決定するルーチンの処理の流れを示すフローチャートである。
【図６】圧縮ボリューム用に予約されるドライブ文字の個数を決定するルーチンの処理の流れを示すフローチャートである。
【図７】関数TryToSwap の処理の流れを示すフローチャートである。
【図８】ROMBoot ルーチンの処理の流れを示すフローチャートである。
【図９】DiskBootSectorルーチンの処理の流れを示すフローチャートである。
【図１０】SYSINIT ルーチンの処理の流れを示すフローチャートである。
【図１１】SYSINIT ルーチンの処理の流れを示すフローチャートである。
【図１２】関数ProcessConfig の処理の流れを示すフローチャートである。
【図１３】初期化処理中のドライブ文字の割り当てを示すブロック図である。
【図１４】初期化処理中のドライブ文字の割り当てを示すブロック図である。
【図１５】初期化処理中のドライブ文字の割り当てを示すブロック図である。
【図１６】この発明の好ましい実施例を実現するコンピュータ・システムのブロック図である。
【図１７】固定ボリューム上に記憶された好ましい圧縮ボリューム・ファイルのブロック図である。
【図１８】コンピュータ・システムのＲＡＭのメモリ・マップである。
【図１９】圧縮システムの初期配置、一時的配置、および３つの可能な最終（常駐）配置を示すＲＡＭのメモリ・マップである。
【図２０】FindINI ルーチンの処理の流れを示すフローチャートである。
【符号の説明】
【００７２】
300  関数TryToSwap
301  DBLSPACE.BINファイル
302  関数FirstTime
304  関数InquireInitSize
305  関数MoveToInitTimeLocation
306  関数Hooks
307  関数PerformFinalPlacement
309  圧縮／伸張エンジン
310  ファイル・システム
1401  ＲＯＭ
1402  ブート・プログラム
1403  ＢＩＯＳ
1404  ＣＰＵ
1405、1408  取り外し可能ボリューム
1406  固定ボリューム
1407  ＲＡＭ
1410  オペレーティング／圧縮システム
【図１】
2005011371.tif 000003
【図２】
2005011371.tif 000004
【図３】
2005011371.tif 000005
【図４】
2005011371.tif 000006
【図５】
2005011371.tif 000007
【図６】
2005011371.tif 000008
【図７】
2005011371.tif 000009
【図８】
2005011371.tif 000010
【図９】
2005011371.tif 000011
【図１０】
2005011371.tif 000012
【図１１】
2005011371.tif 000013
【図１２】
2005011371.tif 000014
【図１３】
2005011371.tif 000015
【図１４】
2005011371.tif 000016
【図１５】
2005011371.tif 000017
【図１６】
2005011371.tif 000018
【図１７】
2005011371.tif 000019
【図１８】
2005011371.tif 000020
【図１９】
2005011371.tif 000021
【図２０】
2005011371.tif 000022