(57)【要約】【課題】大量のブート・ファイルを読み出すプログラムが存在するコンピュータのブート時間を短縮する。【解決手段】ＡＶプログラム５３はブート時に、ブート・システム・コード５１とは並行して独自にブート・ファイルの読み出しを開始する。ブートＩ／Ｏドライバ１０７は、ＡＶプログラムがブート・ファイルを読み出す読み取り速度ＣＶＲを測定する。ＣＶＲに対しては、キューイングのための開始速度閾値ＱＳＴと解除速度閾値ＱＲＴが設定される。ブートＩ／Ｏドライバ１０７は、ＣＶＲがＱＳＴ以上のときにＡＶプログラムが読み出しのために生成したプロセスのキューイングを開始し、ＣＶＲがＱＲＴ未満のときにキューイングを解除する。ＱＳＴおよびＱＲＴの最適値はＩ／Ｏコントロール・サービスが複数回のブートを通じて決定し、ブートＩ／Ｏドライバに設定する。【選択図】図２
2011053908.tif 000002
【特許請求の範囲】
【請求項１】
ブート・ファイルを格納したブート媒体を備えるコンピュータにオペレーティング・システムと協働して、
前記ブート媒体からメイン・メモリの実行領域に前記ブート・ファイルのロードを開始するステップと、
制御対象プログラムが前記ブート媒体から前記メイン・メモリの専用領域に前記ブート・ファイルの読み出しを開始するステップと、
前記制御対象プログラムが前記ブート・ファイルを読み出す読み取り速度を測定するステップと、
前記読み取り速度に基づいて、ブート期間中に前記制御対象プログラムが前記ブート・ファイルの読み出しのために生成したプロセスのキューイングを実行または解除するステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項２】
前記制御対象プログラムがウイルス対策プログラムである請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記プロセスのキューイングを制御する開始速度閾値と該開始速度閾値より小さい解除速度閾値を設定するステップと、
前記読み取り速度が前記開始速度閾値以上のときに前記プロセスをキューイングするステップと、
前記読み取り速度が前記解除速度閾値未満まで低下したときに前記キューイングを解除するステップと
を有する請求項１または請求項２にコンピュータ・プログラム。
【請求項４】
ブートごとに次回のブートにおける前記開始速度閾値を変更してブート完了時間を測定し最適な開始速度閾値を決定するステップを有する請求項３に記載のコンピュータ・プログラム。
【請求項５】
前記最適な開始速度閾値を決定するステップが、前記制御対象プログラムがブート完了までに読み出した前記ブート・ファイルの総量に対する平均読み取り速度を測定するステップを含む請求項４に記載のコンピュータ・プログラム。
【請求項６】
前記最適な開始速度閾値が、ブート完了時間が変化しない範囲において前記平均読み取り速度が最大になったときの値である請求項５に記載のコンピュータ。
【請求項７】
前記最適な開始速度閾値を決定するステップが、前記最適な開始速度閾値を決定するまで前記開始速度閾値をブートごとに減少させるステップを含む請求項４から請求項６のいずれかに記載のコンピュータ・プログラム。
【請求項８】
ブートごとに次回のブートにおける前記解除速度閾値を変更してブート完了時間を測定し最適な解除速度閾値を決定するステップを有する請求項３から請求項７のいずれかに記載のコンピュータ・プログラム。
【請求項９】
最適な開始速度閾値を決定するステップが、前記ブート・ファイルの中で前記専用領域に読み出したブート・ファイルの総量が所定値を越えるプログラムを選定するステップを含む請求項４から請求項８のいずれかに記載のコンピュータ・プログラム。
【請求項１０】
前記開始速度閾値が設定されていないときに前記プロセスに対してキューイングしない通常の処理をする請求項３から請求項９のいずれかに記載のコンピュータ・プログラム。
【請求項１１】
制御対象プログラムを含むブート・ファイルを格納したブート媒体を備えるコンピュータにオペレーティング・システムと協働して、
前記ブート媒体からメイン・メモリの実行領域に前記ブート・ファイルのロードを開始するステップと、
前記制御対象プログラムが前記ブート媒体から前記メイン・メモリの専用領域に前記ブート・ファイルの読み出しを開始するステップと、
前記制御対象プログラムが前記ブート媒体から読み出した前記ブート・ファイルの総量を測定するステップと、
前記制御対象プログラムが前記ブート・ファイルの読み出しのために生成したプロセスのキューイングを制御する総量閾値を設定するステップと、
前記測定したブート・ファイルの総量が前記総量閾値以上のときに前記プロセスをキューイングするステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項１２】
ブート・ファイルを格納したブート・ディスクからブートすることが可能なコンピュータであって、
実行領域と専用領域を備えるメイン・メモリと、
前記コンピュータに前記ブート・ディスクから前記実行領域に前記ブート・ファイルのロードを開始させる機能を実現させるブート・システム・コードと、
制御対象プログラムが前記ブート・ディスクから前記専用領域に前記ブート・ファイルを読み出す読み取り速度を測定する速度測定手段と、
前記読み取り速度に基づいて、ブート期間中に前記制御対象プログラムが前記ブート・ファイルの読み出しのために生成したプロセスのキューイングを実行または解除する制御手段と
を有するコンピュータ。
【請求項１３】
前記制御対象プログラムは、前記ブート・ファイルの読み出しのために生成したプロセスの実行が停止されると警告を出す請求項１２に記載のコンピュータ。
【請求項１４】
前記コンピュータに、前記制御手段に対して前記キューイングの実行および解除に関する速度閾値を設定する機能を実現させるサービス・プログラムを有する請求項１２または請求項１３に記載のコンピュータ。
【請求項１５】
前記サービス・プログラムは前記コンピュータに、ブートごとに測定したブート完了時間に基づいて決定した次回のブートにおける速度閾値を前記制御手段に設定して前記速度閾値の最適値を決定する機能を実現させる請求項１４に記載のコンピュータ。
【請求項１６】
前記サービス・プログラムはさらに前記コンピュータに、前記制御対象プログラムがブート完了までに読み出した前記ブート・ファイルの総量に対する平均読み取り速度に基づいて次回のブートにおける速度閾値を決定する機能を実現させる請求項１５に記載のコンピュータ。
【請求項１７】
ブート・ファイルを格納したブート・ディスクからブートすることが可能なコンピュータであって、
実行領域と専用領域を備えるメイン・メモリと、
前記コンピュータに前記ブート・ディスクから前記実行領域に前記ブート・ファイルのロードを開始させる機能を実現させるブート・システム・コードと、
制御対象プログラムが前記ブート・ディスクから前記専用領域に読み出した前記ブート・ファイルの総量を測定する総量測定手段と、
前記測定したブート・ファイルの総量に基づいて、ブート期間中に前記制御対象プログラムが前記ブート・ファイルの読み出しのために生成したプロセスのキューイングを実行する制御手段と
を有するコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのブート時間を短縮する技術に関し、特にブート時にブート媒体から大量のファイルを読み出すプログラムが存在する場合にブート時間を短縮する技術に関する。
【背景技術】
【０００２】
コンピュータは電源が投入されると、ブート・ディスクまたはブート媒体からブート・ファイルを読み出す起動プロセス（ブート・ストラップまたはブートともいう。）を開始する。最初にＢＩＯＳ＿ＲＯＭに格納されているＢＩＯＳのＰＯＳＴ（Power On Self Test）といわれる初期化プログラムがメイン・メモリに読み出されて実行される。初期化プログラムは、ブート・デバイスを診断したり初期化したりする。つぎにＢＩＯＳはブート・ファイルが格納されているブート・ディスクを探す。ブート・ファイルはオペレーティング・システム、デバイス・ドライバ、およびアプリケーション・プログラムなどを含む。ブート・ディスクとしては通常ハード・ディスク・ドライブ（ＨＤＤ）が使用される。
【０００３】
ＢＩＯＳは、ＨＤＤの先頭セクタに格納されているＭＢＲ（Master Boot Record）をメイン・メモリにロードしてそれに制御を移す。ＭＢＲはディスクからブート可能なパーティションを探してその先頭セクタ（ブート・セクタ）にあるブート・ストラップ・ローダをメイン・メモリにロードしてそれに制御を移す。その後ブート・ストラップ・ローダにつづいてブート・ファイルが順番にメイン・メモリに読み出される。プリエンプティブなマルチタスキングを行うオペレーティング・システム（ＯＳ）は、ブート時もプリエンプティブなタスク・スイッチを行うようになっている。ＯＳはブート時にＨＤＤからブート・ファイルを読み出すために複数のプロセスやスレッドを生成する。
【０００４】
ＯＳは、各プロセスを所定のアルゴリズムでプロセッサにディスパッチする。ディスパッチされたプロセスは、プロセッサにおいて所定のタイム・スライスの間だけ実行されたのちにプリエンプトされて後続のプロセスがディスパッチされる。ブートの後半になると同時に存在するプロセスの数が増大してＨＤＤに多くのシーク時間が発生し、ブートの実行効率が低下してブート時間の遅延を招く。
【０００５】
余分なシークが発生しないようにＨＤＤに単一のブート・イメージを格納して短時間でブートを完了する方法もあるが特殊なＯＳに限定されている。また、ＳＳＤ（Solid State Drive）をブート・デバイスとして利用する方法もあるが、容量およびコストに限界がある。さらに、ＨＤＤに記憶されたブート・ファイルに対してデフラグを実行してシークが発生しにくいように並べ替える方法もある。Ｗｉｎｄｏｗｓ（登録商標）では、無駄なページ・フォルトやシークを省略して起動時間を短縮するためにプリフェッチという機能を導入している。
【０００６】
これは前回までのブート時に、ブート中のプログラムの動作をトレースして、ＨＤＤに対するファイルのアクセス状況を調べておき、その結果に基づいて次回以降のブート時に所定のファイルを先読みしておくという機能である。アクセス・ログはファイルごとに記録されて所定のディレクトリに格納される。各ファイルには、それぞれのプログラムごとのＨＤＤに対するアクセス・パターンのデータが記録されており、ブート時にはこのアクセス・ログに基づいてファイルがメイン・メモリに先読みされる。
【０００７】
特許文献１は、特定のアプリケーションを起動するプロセスのプロセッサ資源、Ｉ／Ｏ資源またはメモリ資源などに対する優先順位を低くするために、スタートアップリケーションの数が増大することによる起動時間の遅延問題を解決する発明を開示する。特許文献２は、所定のプロセスが起動したことを検知してシステム全体のＣＰＵ使用率を測定し、ＣＰＵ使用率に基づいて当該プロセスの停止と実行再開を制御することで、ファイルアクセスにおけるレスポンスの悪化を抑制する発明を開示する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−５１７７８４号公報
【特許文献２】特開２００７−１８２８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ブート時には、多くのブート・ファイルが単一のＨＤＤからメイン・メモリにロードされるため、ＨＤＤへのアクセス頻度が非常に高くなる。ところで、コンピュータに特定のアンチウイルス・プログラム（以下、ＡＶプログラムという。）を導入すると起動時間が遅延することを観測することができる。ＡＶプログラムは、比較的早い段階でロードされて実行を開始すると、ブート期間中にブート・ファイルに対するウイルス・チェックをする。その際に、ＡＶプログラムは、独自にブート・ファイルをＨＤＤから読み出してウイルス・チェックをするので、ＨＤＤに対して、プログラムの実行のためにメイン・メモリの実行領域にロードするための本来のアクセスとは別に、ＡＶプログラムがウイルス・チェックのためにメイン・メモリの専用領域にロードするためのアクセスが発生する。
【００１０】
このように、ＡＶプログラムがブート期間中にＨＤＤにアクセスするためのプロセスが多数発生し、他のブート・ファイルをロードするためのプロセスがＨＤＤにアクセスする頻度が低下したり、単一のＨＤＤに対するアクセスが競合したりしてブート時間の遅延をもたらしている。特許文献２の発明のようにＣＰＵ使用率に基づいてＡＶプログラムの停止と実行再会を制御する方法では、ＡＶプログラムの中にはその実行が停止されるとコンピュータ・ウイルスにより実行が停止されたと判断して、ユーザに警告をしたりブートを停止させたりするものがあるので採用できない。さらに特許文献２の発明はＣＰＵ使用率を増加させないで専らＨＤＤに対するアクセスを頻繁に行うＡＶプログラム以外のプログラムに対しても有効性が低い。
【００１１】
特許文献１の発明は、あらかじめ遅延させる対象となるアプリケーションを選定して優先順位を設定しておく必要がある。したがって、当該アプリケーションはシステム開発者があらかじめ選定してＯＳとともにシステムとして組み込んでいたアプリケーションには有効であるが、その後にユーザが導入したようなアプリケーションに適用することは困難である。
【００１２】
そこで、本発明の目的は、ブート時に大量のブート・ファイルを読み出すプログラムが存在するコンピュータのブート時間を短縮するコンピュータ・プログラムを提供することにある。さらに本発明の目的は、ブート遅延の原因となるプログラムをあらかじめ特定しないでブート時間を短縮することができるコンピュータ・プログラムを提供することにある。さらに本発明の目的は、ブート遅延の原因となるプログラムの動作を停止しないでブート時間を短縮することができるコンピュータ・プログラムを提供することにある。さらに本発明の目的は、ブート時にアプリケーション・プログラムをできるだけ早く動作可能な状態にすることができるコンピュータ・プログラムを提供することにある。さらに本発明の目的は、そのようなコンピュータ・プログラムを実装するコンピュータを提供することにある。
【課題を解決するための手段】
【００１３】
本発明にかかるコンピュータ・プログラムは、ブート時にＯＳと協働して動作することでブート媒体からブート・ファイルをロードする時間を短縮する。ブートが開始されるとブート媒体からメイン・メモリの実行領域にブート・ファイルのロードが開始される。制御対象プログラムは、ブート媒体からメイン・メモリの自らの専用領域に所定の作業のためにブート・ファイルの読み出しを開始する。実行領域は、プロセッサがブート・ファイルを実行するための記憶領域であり、制御対象プログラムがその作業のためにブート・ファイルを読み出す専用領域とは異なる。したがって、コンピュータでは、ブート・ファイルの本来のロードに加えて、制御対象プログラムによる読み出しのためにブート媒体に対するアクセスが発生しブート時間が長くなる。
【００１４】
つづいて、制御対象プログラムがブート媒体からブート・ファイルを読み出す読み取り速度が測定される。そして測定した読み取り速度に基づいて、ブート期間中に制御対象プログラムがブート・ファイルの読み出しのために生成したプロセスのキューイングを実行または解除する。その結果、実行領域にブート・ファイルをロードするためのプロセスに対してブート媒体へのアクセスが制御対象プログラムの読み取り速度に応じてダイナミックに割り当てられ、制御対象プログラムのプロセスを停止することなくブート時間を短縮させることができる。制御対象プログラムは典型的には、ウイルス対策プログラムとすることができる。ウイルス対策プログラムは、ブート時に読み出しのプロセスが停止されると警告したりブートを停止したりする場合があるが、本発明ではブート中にウイルス対策プログラムのプロセスの実行を遅延させるだけで停止させないのでそのような問題はない。
【００１５】
プロセスのキューイングを制御するために、開始速度閾値と開始速度閾値よりも小さい解除速度閾値を設定することができる。そして、読み取り速度が開始速度閾値以上になったときにプロセスのキューイングを開始し、読み取り速度が解除速度閾値未満まで低下したときにキューイングを解除することができる。制御対象プログラムのプロセスをキューイングする時間を徐々に長くしていった場合に、ある限度を越えるとブート完了時間が変化しない状態になる。一方、制御対象プログラム自体もできるだけ早く実行を開始することが望ましい。したがって、開始速度閾値と解除速度閾値にはブート完了時間の短縮に有効で全体のキューイング時間が最低になる状態としての最適値が存在する。
【００１６】
最適な開始速度閾値は、ブートごとに次回のブートにおける開始速度閾値を変更しながらブート完了時間を測定して決定することができる。ブートごとに開始速度閾値を低下させていくと、次第にブート完了時間は短縮していく。そして、ブート完了時間がある程度まで短縮するとブート開始速度閾値をそれ以上低下させてもブート時間が短縮しない状態になる。このときの開始速度閾値を最適値とすることができる。最適値を決定する直前には、今回の開始速度閾値に対して次回の開始速度閾値を若干増加させて確認することが望ましい。さらに、制御対象プログラムがブート完了までに読み出したブート・ファイルの総量に対する平均読み取り速度を測定し、平均読み取り速度を含めて開始速度閾値の最適値を決定することができる。
【００１７】
このときの開始速度閾値の最適値は、ブート完了時間が変化しない範囲において平均読み取り速度が最大になったときの値とすることができる。また、ブートごとに解除速度閾値を変更してブート完了時間を測定し最適な解除速度閾値を決定することができる。最適な開始速度閾値を決定する際に、最初にブート・ファイルの中で専用領域に読み出したブート・ファイルの総量が所定値を越えるプログラムを選定すると、早期に制御対象プログラムを特定してキューイングの制御をすることができる。また、開始速度閾値が設定されていないプロセスをキューイングしない通常処理をすることで、あらかじめ制御対象プログラムを特定しなくても、開始速度閾値が設定されたプロセスを生成したプログラムだけを制御対象プログラムとして扱うことができる。
【発明の効果】
【００１８】
本発明により、ブート時に大量のブート・ファイルを読み出すプログラムが存在するコンピュータのブート時間を短縮するコンピュータ・プログラムを提供することができた。さらに本発明により、ブート遅延の原因となるプログラムをあらかじめ特定しないでブート時間を短縮することができるコンピュータ・プログラムを提供することができた。さらに本発明により、ブート遅延の原因となるプログラムの動作を停止しないでブート時間を短縮することができるコンピュータ・プログラムを提供することができた。さらに本発明により、ブート時にアプリケーション・プログラムをできるだけ早く動作可能な状態にすることができるコンピュータ・プログラムを提供することができた。さらに本発明により、そのようなコンピュータ・プログラムを実装するコンピュータを提供することができた。
【図面の簡単な説明】
【００１９】
【図１】本実施の形態にかかるコンピュータ・システムの主要なハードウエア構成を示す機能ブロック図である
【図２】本実施の形態にかかる高速ブートを実現するためのプログラム・モジュールの構成を示す機能ブロック図である。
【図３】ブートＩ／Ｏドライバの内部テーブル、ブートＩ／Ｏログ、およびブートＩ／Ｏデータ・ベースのデータ構造を示す図である。
【図４】ブートＩ／Ｏドライバが実行する制御対象プログラムに対する遅延処理の手順を示すフローチャートである。
【図５】Ｉ／Ｏコントロール・サービスが実行する制御対象プログラムに対する開始速度閾値ＱＳＴ、解除速度閾値ＱＲＴの最適値を決定する全体の処理の手順を示すフローチャートである。
【図６】Ｉ／Ｏコントロール・サービスが実行する制御対象プログラムに対する開始速度閾値ＱＳＴの最適値を決定する処理の手順を示すフローチャートである。
【図７】Ｉ／Ｏコントロール・サービスが実行する制御対象プログラムに対する解除速度閾値ＱＲＴの最適値を決定する処理の手順を示すフローチャートである。
【図８】ブート完了チェック・プログラムによるブート完了信号の生成方法を示すフローチャートである。
【発明を実施するための形態】
【００２０】
［コンピュータ・システムの構成］
図１は、本実施の形態にかかるコンピュータ・システム１０の主要なハードウエア構成を示す機能ブロック図である。コンピュータ・システム１０は、ＯＳが導入されたサーバやクライアントなどである。コンピュータ・システム１０は、それぞれバス２３に接続されたＣＰＵ１１、メイン・メモリ１３、ネットワーク・カード１５、ＨＤＤ１７、液晶表示装置（ＬＣＤ）１９、およびＢＩＯＳ＿ＲＯＭ２１などを含んでいる。ＨＤＤ１７は、ブート・ファイルを格納したブート・ディスクである。これらのハードウエア・デバイスの機能は、本実施の形態に関しては周知であるため説明は省略する。
【００２１】
［ソフトウエアの構成］
図２は、本実施の形態にかかる高速ブートを実現するためのプログラム・モジュールの構成を示す機能ブロック図である。図２のブロック図では、オペレーティング・システム（ＯＳ）としてＷｉｎｄｏｗｓ（登録商標）を例示して、ブートに関連する主要なソフトウエアだけを示している。ただし、本発明はＯＳをＷｉｎｄｏｗｓに限定する必要はなく、本発明の思想の範囲内で他の周知のＯＳに適用することもできる。
【００２２】
図２では、Ｉ／Ｏコントロール・サービス１０１、ブートＩ／Ｏデータ・ベース１０３、ブートＩ／Ｏログ１０５、Ｉ／Ｏドライバ１０７およびブート完了チェック・プログラム１０９以外のプログラム・モジュール（以下、モジュールという。）は周知である。また、ＡＶプログラム５３、スキャン・リスト５９、フィルタ・ドライバ６５以外はＯＳのモジュールである。ライン１０２より上側に記載されたモジュールはプロセッサ１１のユーザ・モードで動作し、下側に記載されたモジュールはカーネル・モードで動作する。
【００２３】
ブート・システム・コード５１はブート・ファイルをブート・ディスクであるＨＤＤ１７から順番にメイン・メモリ１３の実行領域にロードしていくプログラムである。ＡＶプログラム５３は、ブート時間の遅延の原因となる制御対象プログラムの一例で、本発明によりブート時に実行が遅延される。ブートが開始されてＯＳの主要なモジュールがロードされると、ＡＶプログラム５３は比較的早い段階でロードされて実行を開始する。実行を開始したＡＶプログラム５３は、ブート・システム・コード５１がＨＤＤ１７からブート・ファイルをロードするためにＡＰＩ関数を呼び出すプロセスをフックして、自らが読み出すブート・ファイルのリストをスキャン・リスト５９に生成する。
【００２４】
ここに、ブート・ファイルとは、コンピュータ１０に電源が投入されてからブートが完了するまでにメイン・メモリ１３の実行領域にロードされるデータである。実行領域とは、ブート・ファイルを実行するためにメイン・メモリ１３に割り当てられた記憶領域である。ＡＶプログラム５３は、スキャン・リスト５９に登録されたブート・ファイルを読み取るためのＡＰＩ関数を呼び出すプロセスを生成する。プロセスとはプログラムの実行単位のことで、本発明においてはＯＳがＣＰＵ１１に処理を割り当てる単位であるスレッドも同じ意味として扱うことができる。フィルタ・ドライバ６５は、ブート・システム・コード５１がブート・ファイルをＨＤＤ１７からメイン・メモリ１３の実行領域にロードするタイミングとは非同期で、スキャン・リスト５９に登録されたブート・ファイルをＨＤＤ１７からメイン・メモリ１３の専用領域に読み出す。専用領域とは、ＡＶプログラム５３が作業するためのメイン・メモリ上の記憶領域である。
【００２５】
ＡＶプログラム５３は、専用領域に読み出されたブート・ファイルのウイルス・チェックを行う。したがって、ＡＶプログラム５３は、ブート・システム・コード５１がブート・ファイルをメイン・メモリ１３の実行領域にロードするのとは別に、ウイルス・チェックのためにＨＤＤ１７にアクセスして同じブート・ファイルを順次読み出すためブート遅延の原因になっている。なお、本発明においては、ブート時に実行される制御対象プログラムは１つである必要はなく、ＨＤＤ１７に対して独立して大量の読み取り要求をする複数のプログラムが存在していてもよい。
【００２６】
Kernel32.dll５５は、Ｗｉｎｄｏｗｓ（登録商標）のサブシステムＤＬＬ（Dynamic Link Library）の一部であり、公開されているＷｉｎｄｏｗｓＡＰＩ関数を非公開のカーネル・モード・システム・サービスへの呼び出しに変換する。たとえば、先にロードされたブート・ファイルがつぎのブート・ファイルをＨＤＤ１７からメイン・メモリ１３に読み出すために、ReadFile APIというアプリケーションに公開されている関数を呼び出すと、それに応じて非公開のNtoskrnl６３に実装されているNtReadFileという内部関数が呼び出されてＨＤＤ１７からデータがロードされる。
【００２７】
Ntdll.dll５７は、サブシステムＤＬＬを使用するための関数を提供するサポート・ライブラリである。Ntdll.dll５７は、ユーザ・モードから呼び出すことができるインターフェース機能（System Service Dispatch Stub）と、サブシステムＤＬＬが使用するNtReadFile関数などの内部サポート関数で構成されている。Ntoskrnl６３は、カーネル・モードで実行する内部関数、システム・サービス・ディスパッチャ、割り込みディスパッチ・テーブルなどを含む。ファイル・システム６７は、ＨＤＤ１７に格納されているデータを管理するためにＯＳが提供するソフトウエアである。ファイル・システム６７は、ＦＡＴ（File Allocation Table）およびディレクトリを作成してＨＤＤ１７に関するファイルの記録、読み取り、削除、または移動などを管理する。
【００２８】
ＯＳキャッシュ・マネージャ６９はＨＤＤ１７に対するアクセスのパフォーマンスを向上させるためにＯＳが提供するソフトウエアである。ＯＳキャッシュ・マネージャ６９は、ＨＤＤ１７に対して、ReadFile API関数やWriteFile API関数が呼び出されたときに毎回ＨＤＤ１７にアクセスしないでも処理できるように、ＯＳキャッシュ領域にデータをプリフェッチしてフィルする。ＯＳキャッシュ・マネージャ６９は、コンピュータ１０で実行されるすべてのソフトウエアからのＨＤＤ１７に対するアクセスを対象にして、独自のアルゴリズムに基づいてＯＳキャッシュ領域に対するファイルのフィルおよびフラッシュを管理する。ディスク・ドライバ７１は、ＨＤＤ１７の動作およびデータ転送を制御するためのソフトウエアである。OS Shell Startup６１は、レジストリに登録されたプログラムをブート時に自動起動（AutoRun）するプログラムである。
【００２９】
Ｉ／Ｏコントロール・サービス１０１は、ブートＩ／Ｏドライバ１０７に制御対象プログラムがＨＤＤ１７に読み取り要求をするためのプロセスをキューイングするための閾値を設定したり、最適な閾値を決定したりするプログラムである。ブートＩ／Ｏデータ・ベース１０３は、ブート・ファイルの読み出しを行う制御対象プログラムのプロセスごとに、最適な閾値を登録するファイルである。図３（Ｃ）にブートＩ／Ｏデータ・ベース１０３のデータ構造を示す。ブートＩ／Ｏデータ・ベース１０３には、制御対象プログラムのプロセスごとにキューイングを開始する最適な閾値である開始速度閾値ＱＳＴとキューイングを解除する最適な閾値である解除速度閾値ＱＲＴと、それぞれが設定されたことを示す最適化完了フラグを登録することができる。図３（Ｃ）は一例として、プロセスＡについては、最適な開始速度閾値ＱＳＴと最適な解除速度閾値ＱＲＴが登録され、プロセスＢについては、最適な開始速度閾値ＱＳＴだけが登録され、プロセスＣについてはいずれの閾値も登録されていないことを示している。
【００３０】
ブートＩ／Ｏログ１０５はブートごとに、制御対象プログラムがブート・ファイルの読み出しを行うプロセスに対する最適な閾値をＩ／Ｏコントロール・サービス１０１が決定するまで、ブートＩ／Ｏドライバ１０７がキューイングをするための暫定的な開始速度閾値ＱＳＴ、解除時間閾値ＱＲＴ、ブートが完了するまでのブート完了時間ＢＣＴおよびブート完了まで制御対象プログラムのプロセスが読み取ったブート・ファイルの総バイト数に対する平均読み取り速度ＡＶＲを記録するファイルである。図３（Ｂ）にブートＩ／Ｏログ１０５のデータ構造を示す。図３（Ｂ）には、一例としてプロセスＡについてブート回数が７回行われたときに、ブート回数１〜４回までは開始速度閾値ＱＳＴが初期値としてのＶ０から最適値としてのＶｎまで変化し、解除速度閾値ＱＲＴは、開始速度閾値ＱＳＴから一定の値β０を減算した値が記録されている。
【００３１】
そして、４回目のブートのときに最適な開始速度閾値ＱＳＴがＶｎとして決定されている。４〜７回までは、最適な開始速度閾値ＱＳＴに対して変数である減分βが減算された解除速度閾値ＱＲＴが記録され、７回目のブートで最適な解除速度閾値ＱＲＴがＳnとして記録されている。ブートＩ／Ｏドライバ１０７は、ブート・ファイルの読み出しを行う制御対象プログラムのプロセスをキューイングして実行を遅延させるプログラムである。ブートＩ／Ｏドライバ１０７は、Ｉ／Ｏコントロール・サービス１０１により設定された暫定のまたは最適な開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴに基づいて当該プロセスをキューイングする。
【００３２】
ブートＩ／Ｏドライバ１０７は、内部テーブルを備えている。図３（Ａ）は、内部テーブル１２１のデータ構造を示す。内部テーブルは、制御対象プログラムのプロセスごとのプロセス名、制御対象プログラムのプロセスが現在読み出しているブート・ファイルの読み取り速度ＣＶＲ、キューイング実行中フラグ、キューイングを開始する開始速度閾値ＱＳＴ、キューイングを解除する解除速度閾値ＱＲＴ、およびブートＩ／Ｏドライバ１０７が測定した平均読み取り速度ＡＶＲを記録する。現在の読み取り速度ＣＶＲは、一例として１秒間に読み出すブート・ファイルのバイト数とする。なお、内部テーブル１２１には、一時的に制御対象プログラム以外のプログラムのプロセス名および現在の読み取り速度ＣＶＲも記録する。
【００３３】
ブート完了チェック・プログラム１０９はOS Shell Startup６１のレジストリに登録されブート時に自動的に起動する。ブート完了チェック・プログラム１０９は、コンピュータ１０のブート完了状態を検出してブート完了信号をＩ／Ｏコントロール・サービス１０１に送り、ブート完了時間を計測してブートＩ／Ｏログ１０５に記録するためのプログラムである。以上で説明した、図２のプログラム・モジュールの構成は一例であり、例示したモジュールを本発明の範囲で統合したり分割したりすることができる。また、図２に示したモジュールは、メイン・メモリ１３にロードされてＣＰＵ１１で実行されることにより、コンピュータ１０に所定の機能を実現させる。
【００３４】
［制御対象プログラムの遅延処理の手順］
図４は、ブートＩ／Ｏドライバ１０７が実行する制御対象プログラムに対する遅延処理の手順を示すフローチャートである。ブロック２０１では、図５〜図７の手順で説明するように、Ｉ／Ｏコントロール・サービス１０１がブートＩ／Ｏドライバ１０７のレジストリに制御対象プログラムのプロセスに対する最適な閾値を決定するまでの暫定的なまたは最適な開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴを設定している。なお、図６で説明するように、Ｉ／Ｏコントロール・サービス１０１が、読み取り要求をするプロセスに対して最適な開始速度閾値ＱＳＴを決定するまでは、当該プログラムは制御対象プログラムの候補として扱う。
【００３５】
コンピュータ１０に電源が投入されてＢＩＯＳからＯＳに制御が移り順番にブート・ファイルがロードされていく。ブート・システム・コード５１が動作し始めると、OS Shell Startup６１が、ブート完了チェック・プログラム１０９を自動的に起動する。ブート完了チェック・プログラム１０９は、電源の起動からつねにほぼ一定の時間が経過したときに起動する。ブート完了チェック・プログラム１０９は、コンピュータ全体のＣＰＵ使用率を測定してブートの完了状態を検出する。コンピュータ全体のＣＰＵ使用率Ｙは、アイドル・プロセスのユーザ・モード時間をＵｉ、アイドル・プロセスのカーネル・モード時間をＫｉ、経過時間をＥｔとしたときに次の式で計算することができる。
Ｙ＝（１−（Ｕｉ＋Ｋｉ）／Ｅｔ）×１００％
【００３６】
ブロック２０３でブートＩ／Ｏドライバ１０７は、ＨＤＤ１７にアクセスするプログラムが生成したプロセスが読み取り要求をしているか否かを判断する。なお、判断する対象となるプロセスは制御対象プログラムに限定せずすべてのプログラムを対象にする。書き込み要求や停止要求などのように読み取り要求以外のためのプロセスであれば、ブートＩ／Ｏドライバ１０７はディスク・ドライバ７１に処理させる。読み取り要求のプロセスの場合は、ブロック２０５に移行して、ブートＩ／Ｏドライバ１０７は当該プロセスについて内部テーブル１２１にプロセス名と、当該プロセスの現在の読み取り速度ＣＶＲを記録する。ブートＩ／Ｏドライバ１０７は、当該プロセスに開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴが設定されている場合は、その値を内部テーブル１２１に記録する。
【００３７】
ブロック２０７では、ブートＩ／Ｏドライバ１０７は内部テーブル１２１を参照して、キューイング実行中フラグがオンになっているか否かを検査する。キューイング実行中フラグは、ブロック２０８、２０９、２１１、２１３を経由すれば今回のブートでオンになる。キューイング実行中フラグがオフの場合は、ブロック２０８に移行してブートＩ／Ｏドライバ１０７は当該プロセスに暫定的な値であるか最適な値であるかにかかわらず開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴが設定されているか否かを判断する。Ｉ／Ｏコントロール・サービス１０１により閾値が設定されていない場合は、ブロック２２３に移行してキューイングをしない通常の処理をする。閾値が設定されている場合は、ブロック２０９に移行してブートＩ／Ｏドライバ１０７は、当該プロセスによりＨＤＤ１７から読み出されたブート・ファイルの現在の読み取り速度ＣＶＲが、開始速度閾値ＱＳＴ以上であるか否かを検査する。
【００３８】
現在の読み取り速度ＣＶＲが開始速度閾値ＱＳＴ以上でない場合は今回のブートにおいてはキューイングをしないでブロック２２３で読み取り要求のプロセスをディスク・ドライバ７１に渡して通常の処理をする。ブロック２０９で現在の読み取り速度ＣＶＲが開始速度閾値ＱＳＴ以上の場合は、ブートＩ／Ｏドライバ１０７はブロック２１１で、内部テーブル１２１にキューイング実行中フラグを設定し、ブロック２１３で当該プロセスの読み取り要求に対してキューイングを開始する。なお、キューイングされるプロセスは、制御対象プログラムまたは制御対象プログラムの候補が生成したプロセスであるが、これについては図５〜図７で説明する。プロセスがキューイングされている間は、制御対象プログラムの読み取り要求がディスク・ドライバ７１に渡らないため、制御対象プログラムによりＨＤＤ１７から読み出されるブート・ファイルの読み取り速度が遅くなる。
【００３９】
その後手順はブロック２０３に移行して、ブロック２０３での読み取り要求を確認後に、ブロック２０５に移行して、ブートＩ／Ｏドライバ１０７は、内部テーブル１２１の現在の読み取り速度ＣＶＲを更新する。ブロック２０７で内部テーブル１２１のキューイング実行中フラグがオンの場合は、ブロック２１５に移行して、ブートＩ／Ｏドライバ１０７は、内部テーブル１２１を参照して現在の読み取り速度ＣＶＲが、解除速度閾値ＱＲＴ以下であるか否かを判断する。制御対象プログラムは、ブート・ファイルをＨＤＤ１７から読み出すために複数のプロセスを生成する。キューイングが開始されたあとの制御対象プログラムのプロセスは、実行が遅延するため次第に現在の読み取り速度ＣＶＲが低下する。キューイングにより制御対象プログラムのプロセスがＨＤＤ１７にアクセスする頻度が低下して、他のプログラムによるブート・ファイルのロードのためのＨＤＤ１７に対するアクセスが円滑に進むことになる。
【００４０】
ブロック２１５で現在の読み取り速度ＣＶＲが解除速度閾値ＱＲＴ未満まで下がっていない場合は、キューイングされる以前のプロセスによりブート・ファイルが読み出されているために現在の読み取り速度ＣＶＲが十分に低下していないことになり、ブロック２１７でキューイングを継続しブロック２０３に移行する。ブロック２１５で現在の読み取り速度ＣＶＲが解除速度閾値ＱＲＴ未満の場合は、ブロック２１９でキューイングしていた読み取り要求のプロセスをＦＩＦＯ（First-In First-Out）方式でキューから取り出す。
【００４１】
そしてブロック２２３で、ブートＩ／Ｏドライバ１０７は、読み取り要求のプロセスをディスク・ドライバ７１に渡してＨＤＤ１７にアクセスさせる処理をする。ブロック２２５では、ブート完了チェック・プログラム１０９がＣＰＵ使用率に基づいてブートの完了状態を検知するとＩ／Ｏコントロール・サービス１０１にブート完了信号を送り、ブロック２２７でＩ／Ｏコントロール・サービス１０１はブートＩ／Ｏドライバ１０７の遅延処理を停止させて、それ以後の読み取り要求のプロセスを一切キューイングすることなくディスク・ドライバ７１に渡す。また、ブート完了チェック・プログラム１０９は、ブート完了時間をブートＩ／Ｏログ１０５に記録する。さらに、ブートＩ／Ｏドライバ１０７は、内部テーブル１２１に平均読み取り速度ＡＶＲを記録し、キューイング実行中フラグが当該ブートの間に一度でもオンに設定されたことがあることを示す情報も記録する。
【００４２】
図４による制御対象プログラムの遅延処理によれば、ブート時に制御対象プログラムがブート・ファイルを専用領域に読み出す時間は長くなり、ブート・システム・コード５１がブート・ファイルをロードするまでの時間は短くなる。ブート完了の状態はブート開始後にユーザが利用するアプリケーションを支障なく実行できる状態と定義することができる。そして、制御対象プログラムに対する遅延処理によりユーザが従来よりも早くアプリケーションを実行できる環境を実現することができる。制御対象プログラムがＡＶプログラム５３の場合は、ウイルス・チェックを完了する時間はプロセスがキューイングされている時間だけ遅れるが、新たなファイルをＨＤＤ１７に格納する時点でもウイルス・チェックが行われるので、ロードされたブート・ファイルに対するウイルス・チェックの時間がその分遅延しても通常は問題がない。またプロセスのキューイングはプロセスの停止とは異なり、ＡＶプログラム５３は応答速度の遅いＨＤＤにアクセスしておりプロセスはシステムにより正常に処理されていると判断するので、警告したりブートを停止したりするようなことは行わない。
【００４３】
ここで、ブート完了チェック・プログラム１０９によるブート完了信号の生成方法を図８のフローチャートで説明する。本実施の形態におけるブート完了時間は、ブート時に自動起動するブート完了チェック・プログラム１０９の起動後、全体のＣＰＵ使用率が連続して所定時間以上所定値以下になったときまでの経過時間と定義する。本実施の形態では所定時間として１０秒間を設定し、所定値として１５％を設定する。
【００４４】
ブロック５０１でブート完了チェック・プログラムがブートの所定の段階で起動すると、ブロック５０３でOS Shell Startup６１はブート完了チェック・プログラムがレジストリに登録されているか否かを判断する。登録されていない場合は、ブロック５０５でOS Shell Startup６１に登録し、ブロック５０７で今回はブート完了信号の生成およびブート完了時間の計測をしないで終了する。ブロック５０３でブート完了チェック・プログラム１０９がOS Shell Startup６１に登録されている場合は、ブロック５０９で変数COUNTDOWNを設定し、ブロック５０９、５１１、５１３、５１５、５１７により、ＣＰＵ使用率が１５％以下の状態が１０秒間継続するか否かを判断する。
【００４５】
ブロック５１５で、ＣＰＵ使用率と継続時間の条件が成立するとブート完了チェック・プログラム１０９は、ブロック５１９でブート完了信号をＩ／Ｏコントロール・サービス１０１に送り、ブート完了時間をブートＩ／Ｏログ１０５に記録してブロック５２１で終了する。上記の定義によるブート完了時間は、コンピュータ１０の電源を投入してからアプリケーションが支障なく起動できる状態になるまでの時間ではない。アプリケーションはＣＰＵ使用率が１５％以下になった時点で支障なく起動できるが、本実施の形態では、開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴの最適値を取得するために閾値を変更して実行したブートごとのブート完了時間の差が判明すればよいので、上記の定義を採用している。
【００４６】
［最適閾値の決定処理（全体）］
図５〜図７は、Ｉ／Ｏコントロール・サービス１０１が実行する制御対象プログラムに対する開始速度閾値ＱＳＴ、解除速度閾値ＱＲＴの最適値を決定する処理の手順を示すフローチャートである。図５は、全体の処理手順を示し、図６は最適な開始速度閾値ＱＳＴの決定処理の手順を示し、図７は最適な解除速度閾値ＱＲＴの決定処理の手順を示す。図５において、ブロック３０１では、ブートＩ／Ｏドライバ１０７が図４に示した手順を実行している。ブロック３０３で今回のブートが完了した時点では、ブートＩ／Ｏドライバ１０７の内部テーブル１２１には、前回のブートが終了したときの制御対象プログラムまたは制御対象プログラムの候補のプロセス名、開始速度閾値ＱＳＴ、解除速度ＱＲＴおよび平均読み取り速度ＡＶＲが記録され、ブートＩ／Ｏログ１０５にはブート完了時間ＢＣＴが記録されている。
【００４７】
ブロック３０５では、Ｉ／Ｏコントロール・サービス１０１が、ブートＩ／Ｏドライバ１０７に問い合わせて、内部テーブル１２１に記録された、今回のブート中にキューイング実行中フラグがオンになったことのある制御対象プログラムまたは制御対象プログラムの候補のプロセスに対する平均読み取り速度ＡＶＲ、開始速度閾値ＱＳＴおよび解除速度ＱＲＴを取得してブートＩ／Ｏログ１０５に記録する。ブロック３０７では、開始速度閾値ＱＳＴの最適値の決定処理を行う。ブロック３０９では、Ｉ／Ｏコントロール・サービス１０１が今回のブートで開始速度閾値ＱＳＴの最適値を決定できたか否かを判断する。決定できないと判断した場合はブロック３１１に移行して最適値の決定を次回以降のブートに委ねる。ブロック３０９でＩ／Ｏコントロール・サービス１０１が開始速度閾値ＱＳＴの最適値を決定したと判断したときは、当該プロセスは制御対象プログラムにより生成されたものであると特定し、ブロック３１３に移行して解除速度閾値ＱＲＴの最適値の決定処理を行う。ブロック３１５では、Ｉ／Ｏコントロール・サービス１０１が今回のブートで解除速度閾値ＱＲＴの最適値を決定できたか否かを判断する。決定できないと判断した場合はブロック３１１に移行して最適値の決定を次回以降のブートに委ねる。ブロック３１５でＩ／Ｏコントロール・サービス１０１が解除速度閾値ＱＲＴの最適値を決定したと判断したときは、ブロック３１７で最適値の決定処理がすべて終了する。最適な閾値が決定されると、図４の手順でブートＩ／Ｏドライバ１０７により最適な閾値に基づくキューイングの制御が行われる。
【００４８】
［最適閾値の決定処理（ＱＳＴ）］
つぎに図６に基づいて、開始速度閾値ＱＳＴの最適値を決定する処理を説明する。図６のブロック３５１、３６５は、それぞれ図５のブロック３０７、３１１に対応し、図６のブロック３５９からブロック３７１への移行は、図５のブロック３０９からブロック３１３への移行に対応する。本実施の形態では、ブートＩ／Ｏドライバ１０７は、制御対象プログラムをあらかじめ認識しないでも開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴが設定されたプロセスに対して現在の読み取り速度ＣＶＲに基づいたキューイングを開始する。Ｉ／Ｏコントロール・サービス１０１は、ブートごとにブート完了時間ＢＣＴおよび平均読み取り速度ＡＶＲを測定して制御対象プログラムを特定し最適な開始速度閾値ＱＳＴおよび解除速度閾値ＱＲＴを決定するために、各ブート・ファイルについて複数回のブートを繰り返す必要があり決定までに時間を費やす。
【００４９】
最適な閾値を決定して制御対象プログラムを早期に特定するために、ブロック３５３では、Ｉ／Ｏコントロール・サービス１０１が、ブートを数回実行して全ブート・ファイルの中で専用領域に読み出したブート・ファイルの総バイト数が所定値を越えるプログラムを制御対象プログラムの候補として設定する。読み出しの総バイト数は、ブートＩ／Ｏドライバ１０７が測定する。ブート時に読み出しのバイト数が大きなブート・ファイルは、他のブート・ファイルのロードを遅延させる原因となり易いので、最初に制御対象プログラムの候補として設定することで、Ｉ／Ｏコントロール・サービス１０１が制御対象プログラムを特定して最適な速度閾値を設定するまでの時間を短縮することができる。制御対象プログラムの候補はユーザが設定してもよい。
【００５０】
ブロック３５５で今回のブートが完了すると、Ｉ／Ｏコントロール・サービス１０１はブロック３５７でブートＩ／Ｏログ１０５を参照し、ブロック３５９で開始速度閾値ＱＳＴは最適値だったか否かを判断する。図３のブートＩ／Ｏログ１０５には、ブートごとに開始速度閾値ＱＳＴが初期値としてのＶ０からＶ１、Ｖ２・・・と最適値であるＶｎまで変化している様子を示している。初期値Ｖ０はＩ／Ｏコントロール・サービス１０１が保有している。１回目から４回目までのブートでは、解除速度閾値ＱＲＴは開始速度閾値ＱＳＴから一定値であるβ０だけ小さい値として設定されている。そしてブートＩ／Ｏログ１０５には、各ブートが完了したときのブート完了時間ＢＣＴと平均読み取り速度ＡＶＲが記録されている。
【００５１】
ブートＩ／Ｏログ１０５には、Ｉ／Ｏコントロール・サービス１０１が、初回のブートでは開始速度閾値ＱＳＴを初期値である最大値Ｖ０に設定し、２回目のブートではＶ１＝Ｖ０−α０に設定し、さらに３回目のブートではＶ２＝Ｖ１−α１として設定したことが記録されている。開始速度閾値ＱＳＴを低下させてブートを繰り返していくと、制御対象プログラムが読み取るブート・ファイルの平均読み取り速度ＡＶＲが低下しブート完了時間ＢＣＴが短縮していくが、開始速度閾値ＱＳＴを低下させてもＨＤＤ１７のファイル転送速度に支配されてそれ以上はブート完了時間ＢＣＴが短縮方向に変化しない状態になる。
【００５２】
Ｉ／Ｏコントロール・サービス１０１は開始速度閾値ＱＳＴの最適値を、ブート完了時間ＢＣＴが変化しない範囲で平均読み取り速度ＡＶＲが最大になるときの値Ｖｎとして決定する。Ｉ／Ｏコントロール・サービス１０１は、開始速度閾値ＱＳＴの最適値を決定するために、ブートＩ／Ｏログ１０５を参照して最適化処理の当初は今回ブート時の開始速度閾値ＱＳＴから比較的大きな変化分αを減算した値を次回のブート時の開始速度閾値ＱＳＴに設定するが、ブート回数が多くなるにしたがって、ブート完了時間ＢＣＴの短縮の程度が小さくなるので減算する変化分αを小さくしていく。Ｉ／Ｏコントロール・サービス１０１は、変化分αを次第に小さくしながら、今回の開始速度閾値ＱＳＴに対して変化分αを加算したり減算したりして次回の開始速度閾値ＱＳＴを設定し、最終的に最適な開始速度閾値Ｖｎを決定する。
【００５３】
Ｉ／Ｏコントロール・サービス１０１が最適な開始速度閾値ＱＳＴを決定するまでの手順は、図６においてブロック３５７、３５９、３６１、３６３、３６５に示している。ブロック３５９では、Ｉ／Ｏコントロール・サービス１０１は、最適な開始速度閾値ＱＳＴを決定していないと判断するとブロック３６０に移行して、今回のブートで設定した開始速度閾値ＱＳＴを変化させて生成した次回のブートの開始速度閾値ＱＳＴが最低値以上であるか否かを判断する。Ｉ／Ｏコントロール・サービス１０１は、開始速度閾値ＱＳＴが最低値未満になってもブート完了時間が短縮しないようなプログラムはブロック３６４で制御対象プログラムから除外してブロック３６５に移行する。
【００５４】
ブロック３６０で次回のブートに対して設定する開始速度閾値ＱＳＴが最低値以上の場合は、ブロック３６１で変化させた開始速度閾値ＱＳＴをブートＩ／Ｏドライバ１０７のレジストリに設定し、ブロック３６３でブートＩ／Ｏドライバ１０７のレジストリにＱＲＴ＝ＱＳＴ−βを設定する。ここに変化分βは、開始速度閾値ＱＳＴと解除速度閾値ＱＲＴの間にヒステリシスをもたせるための定数である。本実施の形態ではＩ／Ｏコントロール・サービス１０１は、開始速度閾値ＱＳＴを決定するまで変化分βを定数β０に設定する。そして、ブロック３６５で次回のブートが行われる。
【００５５】
ブロック３６３からブロック３６５を経由してブロック３５３に戻るときは、Ｉ／Ｏコントロール・サービス１０１は最適な開始速度閾値ＱＳＴを決定するまで当該プログラムを制御対象プログラムの候補として設定する。ブロック３６４からブロック３６５を経由してブロック３５３に戻るときは、Ｉ／Ｏコントロール・サービス１０１は、ブロック３５３で当該プログラムを除いた他のプログラムを制御対象プログラムの候補として設定する。
【００５６】
Ｉ／Ｏコントロール・サービス１０１は、ブロック３５９で最適な開始速度閾値ＱＳＴを決定したと判断すると当該プログラムを制御対象プログラムとして特定する。ブロック３６７で最適な開始速度閾値ＱＳＴをブートＩ／Ｏデータ・ベース１０３に登録し、かつ、最適化完了フラグをオンに設定する。Ｉ／Ｏデータ・ベースに最適化完了フラグが設定されている場合は、Ｉ／Ｏコントロール・サービス１０１は、当該プロセスに対してつねにブートＩ／Ｏドライバ１０７のレジストリに最適な開始速度閾値ＱＳＴを設定する。ブロック３６９でＩ／Ｏコントロール・サービス１０１は、最適な開始速度閾値ＱＳＴをブートＩ／Ｏドライバ１０７のレジストリに設定して、ブロック３７１で開始速度閾値ＱＳＴの決定処理を終了する。
【００５７】
［最適閾値の決定処理（ＱＲＴ）］
つぎに図７に基づいて、解除速度閾値ＱＲＴの最適値を決定する処理を説明する。図７のブロック４０１、４１３は、それぞれ図５のブロック３１３、３１１に対応し、図７のブロック４０７からブロック４１９への移行は、図５のブロック３１５からブロック３１７への移行に対応する。解除速度閾値ＱＲＴは、現在の読み取り速度ＣＶＲが一旦開始速度閾値ＱＳＴを越えてプロセスのキューイングが開始されその後、現在の読み取り速度ＣＶＲが低下したときにキューイングを解除するための閾値である。
【００５８】
したがって、解除速度閾値ＱＲＴは、つねに開始速度閾値ＱＳＴよりも小さくなり、開始速度閾値ＱＳＴに対する差が大きくなるほどキューイングの時間は長くなる。解除速度閾値ＱＲＴの最適値も開始速度閾値ＱＳＴの最適値と同様に、ブート完了時間ＢＣＴが変化しない範囲で平均読み取り速度ＡＶＲを最大にするときの値Ｓｎとして決定する。ブロック４０３で最適な開始速度閾値ＱＳＴが設定されて行われた今回のブートが完了すると、Ｉ／Ｏコントロール・サービス１０１はブロック４０５でブートＩ／Ｏログ１０５を参照し、ブロック４０７で解除速度閾値ＱＲＴは最適値だったか否かを判断する。図３のブートＩ／Ｏログ１０５には、４回目のブートで開始速度閾値ＱＳＴが最適値Ｖｎに設定され、４回目のブートから７回目のブートまでブートごとに解除速度閾値ＱＲＴが初期値としてのＳ０からＳ１、Ｓ２・・・と最適値であるＳｎまで変化している様子を示している。また、ブートＩ／Ｏログ１０５には各ブートにおけるブート完了時間ＢＣＴと平均読み取り速度ＡＶＲが記録されている。解除速度閾値ＱＲＴは、開始速度閾値ＱＳＴから減分βを減算した値を設定する。
【００５９】
ブロック４０５ではＩ／Ｏコントロール・サービス１０１が、開始速度閾値ＱＳＴの最適値を取得した後の最初のブートでは最適な開始速度閾値ＱＳＴに対する減分βを比較的小さく設定し、次第に減分βを大きくしながら同時にブート完了時間ＢＣＴを観察する。そして、Ｉ／Ｏコントロール・サービス１０１はブート完了時間ＢＣＴがそれ以上は短縮しないと判断したときに、最適な解除速度閾値ＱＲＴを決定したと判断する。Ｉ／Ｏコントロール・サービス１０１が最適な解除速度閾値ＱＲＴを決定するまでの手順は、図７においてブロック４０７、４０９、４１１、４１３に示している。ブロック４０７でＩ／Ｏコントロール・サービス１０１は最適な解除速度閾値ＱＲＴを決定していないと判断すると、ブロック４０９で減少させた解除速度閾値ＱＲＴをブートＩ／Ｏドライバ１０７のレジストリに設定し、ブロック４１１でブートＩ／Ｏドライバ１０７のレジストリに最適な開始速度閾値ＱＳＴであるＶｎを設定する。そして、ブロック４１３で次回のブートが行われる。
【００６０】
Ｉ／Ｏコントロール・サービス１０１は、ブロック４０７で最適な解除速度閾値ＱＲＴを決定したと判断すると、ブロック４１５で最適な解除速度閾値ＱＲＴをブートＩ／Ｏデータ・ベース１０３に登録し、かつ、最適化完了フラグをオンに設定する。Ｉ／Ｏコントロール・サービス１０１は、ブロック４１９で最適な開始速度閾値ＱＲＴをブートＩ／Ｏドライバ１０７のレジストリに設定して、ブロック４１９で解除速度閾値ＱＲＴの決定処理を終了する。
【００６１】
これまでブート・ディスクとして、ＨＤＤを例示して説明したが、ブート・ディスクは、フラッシュ・ドライブ（ＳＳＤ）または、光学ディスク・ドライブ（ＯＤＤ）であってもよい。また、ブート・ディスクはコンピュータ１０の構成要素である必要はなく、ネットワークを通じて図２のモジュールが実装されたコンピュータと接続されるものであってもよい。
【００６２】
図４〜図７では、ブートＩ／Ｏドライバ１０７が現在の読み取り速度ＣＶＲに基づいて、キューイングの実行および解除をしている。本発明は、キューイングの実行および解除の判断を現在の読み取り速度ＣＶＲ以外のパラメータで行うこともできる。たとえば、ブート段階ではコンピュータ１０が起動してから時間が経過して多くのプログラムがロードされるとそれらが他のファイルを読み出し始めるので、ロードするブート・ファイルの転送速度がより遅くなる。したがって、あるブートの初期の段階では、制御対象プログラムをキューイングしないでブート・ファイルをロードし、制御対象プログラムが読み出したブート・ファイルの総量が一定の量に到達した以降はブート完了まで制御対象プログラムのプロセスをキューイングすることもできる。この場合は、キューイングを開始する閾値に読み取ったブート・ファイルの総バイト数を設定して図４〜図６の手順と同様の手順で最適値を決定してキューイングすることもできる。なおこの場合のキューイングはブート完了信号で解除するので、キューイングを解除する閾値を設定する必要はない。
【００６３】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【００６４】
１０３…ブートＩ／Ｏデータ・ベース
１０５…ブートＩ／Ｏログ
１２１…ブートＩ／Ｏドライバ１０７の内部テーブル
【図１】
2011053908.tif 000003
【図２】
2011053908.tif 000004
【図３】
2011053908.tif 000005
【図４】
2011053908.tif 000006
【図５】
2011053908.tif 000007
【図６】
2011053908.tif 000008
【図７】
2011053908.tif 000009
【図８】
2011053908.tif 000010