(57)【特許請求の範囲】
【請求項１】
コンピュータをブートする方法であって、
メイン・メモリに第１の初期化コードと第２の初期化コードを含み他のプログラムと実行順序に依存関係があるプログラムをロードするステップと、
ブート期間中に前記第１の初期化コードを実行して前記プログラムを部分的に起動するステップと、
前記第１の初期化コードの実行が終了したことに応答して前記プログラムをアイドル状態に移行させるステップと、
ブートが完了したあとに生成される起動イベントに応答して前記第２の初期化コードを実行し前記プログラムを完全に起動するステップと
を有する方法。
【請求項２】
前記第１の初期化コードは前記コンピュータのブートを完了するために必要な初期化だけを行うコードを含み、前記第２の初期化コードは前記プログラムの初期化を完全に終了するためのコードを含む請求項１に記載の方法。
【請求項３】
前記第１の初期化コードはブート期間中に他のプログラムとの間で実行順序に依存関係がある本体コードを初期化する請求項１または請求項２に記載の方法。
【請求項４】
前記第１の初期化コードおよび前記第２の初期化コードのメモリ・イメージは、それぞれ異なるエントリ・ポイントを備えている請求項１から請求項３のいずれかに記載の方法。
【請求項５】
前記起動イベントに応答して前記プログラムのレジストリから所定の情報を削除する最適化コードを前記第２の初期化コードを実行する前に実行するステップを有する請求項１から請求項４のいずれかに記載の方法。
【請求項６】
前記第２の初期化コードの実行が完了したあとに定期的にまたは所定のタイミングで前記プログラムのレジストリから所定の情報を削除する最適化コードを実行するステップを有する請求項１から請求項５のいずれかに記載の方法。
【請求項７】
前記第１の初期化コードの実行が完了したときに前記プログラムがユーザ・インターフェースとなるウインドウをディスプレイに表示するステップを有する請求項１から請求項６のいずれかに記載の方法。
【請求項８】
前記起動イベントが前記プログラムのウインドウがバックグラウンドからフォアグラウンドに変化したとき、入力デバイスからの入力があったとき、またはシステムにより生成された定期的なイベントのいずれかのタイミングで生成される請求項１から請求項７のいずれかに記載の方法。
【請求項９】
前記プログラムがプログラムを登録する自動起動リストに登録されているか否かを判断するステップと、
前記プログラムが前記自動起動リストに登録されていない場合に前記コンピュータのブートが完了してから前記第１の初期化コードおよび前記第２の初期化コードを連続して実行するステップと
を有する請求項１から請求項８のいずれかに記載の方法。
【請求項１０】
ブートを開始したコンピュータに、
第１の初期化コードと第２の初期化コードを含み他のプログラムと実行順序に依存関係があるブート・プログラムをロードするステップと、
ブート期間中に前記第１の初期化コードを実行して前記ブート・プログラムの起動を部分的に完了するステップと、
前記第１の初期化コードの実行が終了したあとに前記ブート・プログラムをアイドル状態に移行させるステップと
ブート終了後に前記第２の初期化コードを実行して前記ブート・プログラムの起動を完全に完了するステップと
を有する処理を実行させるプログラム。
【請求項１１】
ブートを開始したコンピュータにおいて自動的に起動され他のプログラムと実行順序に依存関係があるブート・プログラムであって、前記コンピュータに、
オペレーティング・システムにそれぞれエントリ・ポイントを有する第１の初期化コードと第２の初期化コードのメモリ・イメージをメイン・メモリに記憶させるステップと、
ブート期間中に前記第１の初期化コードを実行するステップと、
前記第１の初期化コードの実行が終了したあとにアイドル状態に移行するステップと、
前記コンピュータのブートが完了したあとに生成される起動イベントに応答して前記第２の初期化コードを実行するステップと
を有する処理を実行させるブート・プログラム。
【請求項１２】
前記メイン・メモリに記憶させるステップが、独立したエントリ・ポイントを備え、レジストリから所定の情報を削除する最適化コードのメモリ・イメージを記憶させるステップを含む請求項１１に記載のブート・プログラム。
【請求項１３】
前記最適化コードを前記第２の初期化コードを実行する前に前記起動イベントに応答して実行するステップを有する請求項１２に記載のブート・プログラム。
【請求項１４】
前記ブート・プログラムがオペレーティング・システムのモジュールを含む請求項１１から請求項１３のいずれかに記載のブート・プログラム。
【請求項１５】
前記ブート・プログラムがアプリケーション・プログラムを含む請求項１１から請求項１４のいずれかに記載のブート・プログラム。
【請求項１６】
請求項１１から請求項１５のいずれかに記載されたブート・プログラムを格納したディスク・ドライブを有するコンピュータ。
【請求項１７】
ディスク・ドライブと、
前記ディスク・ドライブに格納され第１の初期化コードと第２の初期化コードを含み他のプログラムと実行順序に依存関係があるブート・プログラムと、
前記ブート・プログラムのメモリ・イメージを記憶するメイン・メモリと、
ブート期間中に前記第１の初期化コードを実行したあとに前記ブート・プログラムをアイドル状態に移行させ、ブートが完了して起動イベントが発生したときに前記第２の初期化コードを実行する機能を前記コンピュータに実現させるオペレーティング・システムと
を有するコンピュータ。
【請求項１８】
前記ブート・プログラムがレジストリから所定の情報を削除する最適化コードを含み、前記オペレーティング・システムは前記第２の初期化コードを実行する機能を実現させる前に前記最適化コードを実行させる機能を前記コンピュータに実現させる請求項１７に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのブート時間を短縮する技術に関し、さらに詳細にはブート時間の短縮を図ることができるプログラム構造に関する。
【背景技術】
【０００２】
コンピュータは電源が投入されると、ブート・ディスクから所定の実行可能プログラム（以後、ブート・プログラムという。）を自動的にメイン・メモリに読み出して実行する起動プロセス（ブート・ストラップまたはブートともいう。）を開始する。ユーザは一連のブート・プログラムがロードされかつ実行されてブートが完了してから所定のアプリケーション・プログラム（以後、アプリケーションという。）を利用することができるようになる。
【０００３】
コンピュータの使用を開始した時点ではブート・プログラムの量が比較的少ないためブートは短時間で終了する。しかし、コンピュータを長年使用している間に、ユーザはコンピュータにさまざまなプログラムをインストールする。そして、それらのプログラムはユーザの認識していないところでブート・プログラムに組み込まれて自動起動されるようになりブート時間が長くなる。
【０００４】
特許文献１は、マルチタスク・システムにおいて、システムの起動の高速化を図る発明を開示する。同文献の発明は、オペレーティング・システム(ＯＳ)を初期化する時間内において生成するタスク・オブジェクト(静的生成)を数的に制限して起動時間の短縮を図っている。具体的には、起動完了後にアクセスされるまでの初期アクセス時間が相対的に短いタスク・オブジェクトであれば静的生成の対象にするが、初期アクセス時間が一定以上に長いタスク・オブジェクトは起動完了後にアプリケーション内において特定のシステムコールを呼び出して生成する(動的生成)。特許文献２は、ＯＳと並行して起動するアプリケーションを、さまざまな条件に基づいてタイミングをずらして実行することでＯＳの起動時間を短縮する。一例では、ＯＳの起動が完了したあとに各アプリケーションを異なるタイミングで自動起動する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２１１５９６号公報
【特許文献２】特開２０１０−２１７９４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１および特許文献２の発明は、ブート時にＯＳと並行して自動起動していたアプリケーションの一部をブート完了後に起動するように起動タイミングを変更してブート時間の短縮を図っている。ブート・プログラムは、ＯＳの仕組みとしてあるいはユーザがインストールしたプログラムのインストーラにより起動の順序が決定される。ある種のプログラムは、正常に動作するために他のプログラムを利用する必要があるため起動順序の制約を受ける場合がある。
【０００７】
たとえば、アプリケーションから呼び出されて実行される他のアプリケーションやＯＳのある種のサービス・プログラムは、呼び出しているアプリケーションの実行前に起動している必要がある。このように実行順序に依存関係があるプログラムでは起動順序を自由に変更することはできない。したがって、特許文献１および特許文献２の方法では、あらかじめ依存関係のないプログラムであることを確認したり、依存関係を維持する工夫をしたりする必要があるためブート完了後に起動できるプログラムの範囲は制限を受ける。この制限は、専用のプログラムがブート時に他のプログラムの実行タイミングを制御しようとする際に常に生ずる。
【０００８】
ブート・プログラムは本来の機能を果たす本体コードの他に本体コードを初期化する初期化コードを含んでいる。初期化コードは、当該プログラムが実行されたときに最初にだけ実行されてレジストリや他のデータ・ベースの情報を本体コードに設定する。レジストリは、本体コードが実行されている間に本来は削除されるべき不必要な情報が残留し次第に肥大化する傾向がある。初期化コードが肥大化したレジストリの情報に基づいて本体コードを設定すると、ディスク・ドライブやプロセッサなどのハードウエア・リソースを余分に消費するためブート時間が一層長くなる。
【０００９】
レジストリの不要な情報を消去するためのツールとしてレジストリ・クリーナが知られている。レジストリ・クリーナは、リンク先がないショートカットの削除や一次キャッシュ・ファイルの削除などのように、対象となるプログラム以外のプログラムでも明らかに判断できる情報を、レジストリから削除することができる。レジストリ・クリーナが対象プログラムの事情を考慮しないで大胆にレジストリの情報を削除すると、当該プログラムの動作が不安定になってしまう。また、レジストリ・クリーナの実行はユーザの操作に委ねられているため、ブート時間の短縮と結びついて行われるとは限らない。
【００１０】
そこで、本発明の目的は、短時間でブートできるコンピュータを提供することにある。さらに本発明の目的は、ハードウエアや専用のソフトウエアに依存しないでプログラムが自律的にブート時間を短縮することができるコンピュータを提供することにある。さらに本発明の目的は、安全かつ効果的にブート時間を短縮することができるコンピュータを提供することにある。さらに本発明の目的は、そのようなコンピュータを実現するコンピュータ・プログラムおよびそのようなコンピュータにおけるブート方法を提供することにある。
【課題を解決するための手段】
【００１１】
本発明は、分割して実行できる初期化コードを含むプログラムを提供して、ブート時間の短縮を図る。プログラムが、ブート期間中に他のプログラムとの間の実行順序に依存関係を有する場合には、当該プログラムをブート期間中に起動する必要がある。本発明は、依存関係のあるプログラムであっても、ブート期間中には完全な起動をしないで部分的な起動をすることでブート時間の短縮を図りながら、他のプログラムの実行を妨げないようにして安全にブートを完了する。本発明では、ブート段階で実行しなければならないコードとブート後に実行すればよいコードを選別してコーディングしておくと、プログラムが自律的に動作してブート期間中に使用するリソースを低減することができるので、安全で確実にブート時間の短縮を図ることができる。
【００１２】
本発明にかかるプログラムはＯＳがそれぞれ実行のタイミングを制御することができる第１の初期化コードと第２の初期化コードを含んで構成されている。第１の初期化コードと第２の初期化コードはメイン・メモリにロードされたメモリ・イメージにおいて独立したエントリ・ポイントを備えることができる。コンピュータのブート期間中にＯＳがまず第１の初期化コードを実行する。第１の初期化コードの実行が終了するとプログラムは部分的に起動が完了してアイドル状態に移行する。アイドル状態に移行しているプログラムは、他のプログラムから要求されたときに第１の初期化コードで初期化された本体コードを実行することができる。
【００１３】
この手順によれば、分割された初期化コードを有するプログラムはブート期間中には第１の初期化コードだけが実行されるためブート中のリソースの占有時間が減少し、ブート時間の短縮を図ることができる。プログラムの起動イベントは、コンピュータの起動が完了したあとに生成することができる。この起動イベントは、プログラムのウインドウがバックグラウンドからフォアグラウンドに変化したとき、入力デバイスからの入力があったとき、またはシステムにより生成された定期的なイベントのいずれかのタイミングで生成することができる。起動イベントは、ＯＳがブートの完了を検出したときに生成することもできる。
【００１４】
第１の初期化コードはコンピュータのブートを完了するために必要な初期化だけを行うコードを含み、第２の初期化コードはプログラムの初期化を完全に終了するためのコードを含むようにすることでブート期間中のシステムの負担を軽減しながらブート完了後に当該プログラムを完全に起動することができる。第１の初期化コードはブート期間中に他のプログラムとの間で実行順序に関する依存関係がある本体コードを初期化することができる。最適化コードは、起動イベントに応じて、第２の初期化コードを実行する前にレジストリから不要な情報を削除することができる。最適化コードは、第２の初期化コードの実行前とは別にあるいは併用して定期的にまたはパワー・オフ直前のような所定のタイミングで実行してもよい。
【００１５】
第１の初期化コードと第２の初期化コードを含むプログラムがブート・プログラムを登録する自動起動リストに登録されていないプログラムである場合には、コンピュータのブートが完了してから第１の初期化コードおよび第２の初期化コードを連続して実行することができる。第１の初期化コードと第２の初期化コードを含むプログラムは、オペレーティング・システムのモジュール、デバイス・ドライバ、またはアプリケーションのいずれであってもよい。
【発明の効果】
【００１６】
本発明により、短時間でブートできるコンピュータを提供することができた。さらに本発明により、ハードウエアや専用のソフトウエアに依存しないでプログラムが自律的にブート時間を短縮することができるコンピュータを提供することができた。さらに本発明により、安全かつ効果的にブート時間を短縮することができるコンピュータを提供することができた。さらに本発明により、そのようなコンピュータを実現するコンピュータ・プログラムおよびそのようなコンピュータにおけるブート方法を提供することができた。
【図面の簡単な説明】
【００１７】
【図１】本実施の形態にかかるコンピュータの主要なハードウエア構成を示す機能ブロック図である。
【図２】コンピュータに実装されるソフトウエアの構成を示す機能ブロック図である。
【図３】コンピュータで生成されたプロセスがＯＳで制御されて遷移する様子を示す図である。
【図４】分割型プログラムと非分割型プログラムのメモリ・イメージのデータ構造を説明する図である。
【図５】コンピュータにおいて分割型アプリケーションを実行する手順を説明するフローチャートである。
【図６】分割型アプリケーションおよび非分割型アプリケーションを構成するコードの実行の順番を説明する図である。
【発明を実施するための形態】
【００１８】
［コンピュータ・システムの構成］
図１は、本実施の形態にかかるコンピュータ１０の主要なハードウエア構成を示す機能ブロック図である。コンピュータ１０は、それぞれバス２３に接続されたＣＰＵ１１、メイン・メモリ１３、入力デバイス１５、ハード・ディスク・ドライブ（ＨＤＤ）１７、液晶表示装置（ＬＣＤ）１９、およびＢＩＯＳ＿ＲＯＭ２１などを含んでいる。入力デバイス１５は、マウスおよびキーボードとすることができる。ＬＣＤ１９には、アプリケーションのウインドウを表示する。ＨＤＤ１７は、ブート・プログラムおよび非ブート・プログラムを格納する。これらのハードウエア・デバイスの機能は、本実施の形態に関しては周知であり、本発明はハードウエアに依存しないで実行することができるため説明は省略する。
【００１９】
［定義］
最初に本明細書において使用する用語を定義する。ブート・プログラムとは、コンピュータの電源が起動されたときに自動的にメイン・メモリ１３にロードされて実行されるモジュール、コードまたはファイルなどといわれる実行可能なプログラムまたはＤＬＬファイルをいう。プログラムのロードとは、ディスク・ドライブから読み出されたオブジェクト・コードに対してリンカが他のオブジェクト・コードやライブラリを結合して生成したメモリ・イメージをメイン・メモリに記憶することをいう。プログラムのロードには、当該プログラムの実行という処理を含まない。プログラムの実行状態とは、プリエンプティブなマルチタスキングを行うＯＳにおいて、当該プログラムを実行するためのプロセスがＯＳのタスク・スケジューラの制御により実行状態と実行可能状態の間を遷移している状態をいう。
【００２０】
プログラムのアイドル状態とは、当該プログラムを実行するためのプロセスが特定のＡＰＩ関数が呼び出されることで実行状態から外れてサスペンド状態または実行待ち状態に遷移している状態をいう。ＯＳはサスペンド状態または実行待ち状態のプロセスに、ＣＰＵ１１のタイム・スライスを割り当てることはないが、キーボードやマウスなどからの入力によるイベントが生成したウインドウ・メッセージ、またはＯＳその他のプログラムが生成した当該プロセスを呼び出すための特定のＡＰＩ関数を呼び出すときのプロセス間通信を監視して当該プロセスをレジュームし実行状態に遷移させることができる。
【００２１】
プログラムの未実行状態とは、当該プログラムをロードするためのプロセスが未だ生成されていない状態または当該プログラムはロードされているがそれを実行するためのプロセスが未だ生成されていない状態をいう。特別なプログラムを除いて未実行状態のプログラムは、他のプログラムから呼び出されて起動することはできないが、アイドル状態のプログラムは他のプロセスから呼び出されて実行することができる。
【００２２】
プログラムの起動完了とは、プログラムの初期化がすべて終了して本来の機能を実現する本体コードが実行される直前の状態またはすべての初期化が終了した状態で当該プログラムがアイドル状態に移行している状態をいう。プログラムがユーザ・インターフェースとなるウインドウを有する場合は、ウインドウが表示されたタイミングをプログラムの起動完了ということができる。
【００２３】
さらに本実施の形態におけるプログラムの起動完了には、プログラムの初期化コードの一部が実行されて部分的に初期化が終了し本来の機能の中で初期化が終了した部分の本体コードが実行されているかまたは一部の初期化が終了した状態で当該プログラムがアイドル状態に移行している状態も含む。このように完全な起動は完了していないが一部の本体コードの初期化が完了している状態を部分的な起動完了ということにする。プログラムの依存関係とは、他のプログラムの実行のために呼び出されたときに、サービスを提供するために当該他のプログラムより先に起動を完了しておく必要があるプログラムと当該他のプログラムの間に起動の順序関係がある状態をいう。
【００２４】
ブートの完了とは、コンピュータ全体のＣＰＵ使用率が所定時間の間所定値以下に維持されている状態をいう。コンピュータ全体のＣＰＵ使用率Ｙは、アイドル・プロセスのユーザ・モード時間をＵｉ、アイドル・プロセスのカーネル・モード時間をＫｉ、経過時間をＥｔとしたときに次の式でＯＳの所定のプログラムが計算することができる。
Ｙ＝（１−（Ｕｉ＋Ｋｉ）／Ｅｔ）×１００％
【００２５】
なお、ブートの完了はコンピュータの起動完了と同義である。上記の定義に基づくと、すべてのブート・プログラムの起動が完了すればコンピュータのブートは完了する。ただし、個々のブート・プログラムの起動完了のタイミングとコンピュータのブートが完了するタイミングは一致せず、ブートが完了する前に一部のブート・プログラムは起動を完了する。
【００２６】
［ソフトウエアの構成］
図２は、コンピュータ１０に実装されるソフトウエアの構成を示す機能ブロック図である。本実施の形態にかかるソフトウエアは、分割型アプリケーション１０１、１０２、非分割型アプリケーション１０３、ＯＳ１０７、最適化制御プログラム１１７およびデバイス・ドライバ１１９で構成されている。分割型アプリケーション１０１、１０２、非分割型アプリケーション１０３は、ＯＳ１０７のサービスを利用しながら実行されるプログラムである。図２に示したソフトウエアはＨＤＤ１７に格納されており、ブート時にメイン・メモリ１３にロードされてＣＰＵ１１で実行されることによりコンピュータ１０において所定の機能が実現される。
【００２７】
ＯＳ１０７は、レジストリ１０９、自動起動リスト１１１、ＡＰＩ(Application Programming Interface)１１３、およびカーネル・モジュール１１５を含んで構成されている。ＯＳ１０７は、モジュールが図４に示す分割型プログラム１５０でない場合は、Ｗｉｎｄｏｗｓ(登録商標)やＭＡＣ(登録商標)などの既存のＯＳを採用することができる。ただし、分割型プログラム１５０のデータ構造は、ＯＳ１０７のモジュールにも適用することができるので、その場合は既存のＯＳに対してその部分に限り変更が必要となる。
【００２８】
レジストリ１０９は、コンピュータ１０のハードウエアの設定情報、ソフトウエアの設定情報、セキュリティ情報およびユーザ情報などを記憶するＯＳ１０７の内部データ・ベースである。ソフトウエアの設定情報には、ＯＳ１０７の設定情報、ユーザが導入したアプリケーションの設定情報および周辺機器に付随して導入したデバイス・ドライバの設定情報が含まれる。自動起動リスト１１１は、ブート・プログラムの名称およびロードの順番に関する情報を格納する。自動起動リスト１１１は、ブート・プログラムを登録できるようにユーザに公開するリストと、システムだけが登録できてユーザに非公開のリストのいずれも含んでいる。
【００２９】
ＡＰＩ１１３は、分割型アプリケーション１０１、１０２および非分割型アプリケーション１０３がカーネル・モジュール１１５のサービスを利用するためのインターフェースである。カーネル・モジュール１１５は、仮想メモリ、デバイス・ドライバ、プロセス管理およびファイル・システムなどのＯＳ１０７の基本的な機能を提供する複数のモジュールで構成されている。最適化制御プログラム１１７は、分割型アプリケーション１０１、１０２の最適化コード１５７(図４参照)を定期的に実行する最適化イベントをＯＳ１０７に送る。デバイス・ドライバ１１９は、ＨＤＤ１７に対するハードウエア・インターフェースを設定したり、ＨＤＤ１７とＯＳ１０７との間のデータ転送を制御したりする専用のプログラムである。
【００３０】
［プロセス遷移］
図３は、コンピュータ１０で生成されたプロセスがＯＳ１０７で制御されて遷移する様子を示す図である。プロセスはプロセス制御ブロック（ＰＣＢ）というプロセッサ状態、プロセスの優先度、タイム・スライス情報、プロセスＩＤ、およびデバイス情報などを含むデータ構造体である。実行状態（ＲＵＮ）は、現在プロセスがＣＰＵ１１で実行されている状態であり、割り当てられたタイム・スライスを消費すると実行可能状態（ＲＥＡＤＹ）に移行する。
【００３１】
実行可能状態（ＲＥＡＤＹ）は、プロセスが実行可能であり優先度の順番に実行されるのを待っている状態で、実行可能キューに登録されたＰＣＢがＯＳ１０７のプロセス・スケジューラにより所定の順番でＣＰＵ１１にディスパッチされる。実行待ち状態（ＷＡＩＴ）は、Ｉ／Ｏなどの何らかの条件が成立するまで自ら実行を中断する関数を呼んで実行を待っている状態である。サスペンド状態（ＳＵＳＰＥＮＤ）は、他のプロセスによって強制的に待ち状態にさせられた状態である。
【００３２】
あるプロセスが他のプロセスを実行状態または実行可能状態からサスペンド状態に移行させたり、サスペンド状態からレジュームして実行可能状態に移行させたりするには、特定のＡＰＩ関数を呼び出して行うことができる。このとき、ＯＳがプロセスを直接サスペンドまたはレジュームをするためのＡＰＩ関数を提供していない場合は、当該プロセスにより生成されたすべてのスレッドをサスペンドまたはレジュームの対象にしたＡＰＩ関数を呼び出すことでサスペンド／レジューム実現することができる。
【００３３】
［分割型プログラムと非分割型プログラムの構成］
図４は、分割型プログラムと非分割型プログラムがメイン・メモリに記憶されたときのメモリ・イメージのデータ構造を説明する図である。分割型プログラム１５０は、分割型アプリケーション１０１、１０２のデータ構造に一致し、非分割型プログラム１７０は非分割型アプリケーション１０３のデータ構造に一致する。図４は、ブート時にＯＳ１０７のリンカにより他のオブジェクト・ファイルやライブラリが結合されて、メイン・メモリ１３の仮想アドレス空間に展開されたメモリ・イメージを示している。リンカが、ＨＤＤ１７に格納されたオブジェクト・コードの指示にしたがって生成したメモリ・イメージを、ＯＳ１０７のローダに渡すことでメイン・メモリ１３に図４のメモリ・イメージが記憶される。
【００３４】
分割型プログラム１５０のメモリ・イメージは、セクション・テーブル１５１、第１の初期化コード１５３、第１の本体コード１５５、最適化コード１５７、第２の初期化コード１５９、および第２の本体コード１６１で構成されている。非分割型プログラム１７１のメモリ・イメージは、セクション・テーブル１７１、初期化コード１７３、および本体コード１７５で構成されている。
【００３５】
分割型プログラム１５０では、初期化コードがそれぞれ個別のエントリ・ポイント１、３を有する第１の初期化コート１５３と第２の初期化コード１５９に分割されているが、非分割型プログラム１７０では初期化コード１７３に対するエントリ・ポイントは１個であり、初期化コードは分割されていない点が相違している。非分割型プログラム１７０のデータ構造は周知である。分割型プログラム１５０のセクション・テーブル１５１は、コードおよびデータを記憶するセクションの仮想アドレスを記憶したエントリ・ポイント１、２、３を含む。
【００３６】
エントリ・ポイント１は、第１の初期化コード１５３の先頭の仮想アドレスを指し、エントリ・ポイント２は最適化コード１５７の先頭アドレスを指し、エントリ・ポイント３は第２の初期化コード１５９の先頭アドレスを指す。非分割型プログラム１７０のセクション・テーブル１７１は、エントリ・ポイント１を含む。エントリ・ポイント１は初期化コード１７３の先頭アドレスを指す。
【００３７】
ＯＳ１０７は、セクション・テーブル１５１、１７１のエントリ・ポイントのいずれかを指定して所定のコードだけを実行することができる。したがって、第１の初期化コード１５３、最適化コード１５７、および第２の初期化コード１５９のメイン・メモリ１３上での配置は図４(Ａ)に限定されない。また、第１の本体コード１５５と第２の本体コード１６１はブロックが分離している必要はなく、両者のコードがひとつのブロックのなかで混在していてもよい。
【００３８】
分割型プログラム１５０の第１の本体コード１５５と第２の本体コード１５９を含めた機能と非分割型プログラム１７０の本体コード１７５の機能は同一である。第１の初期化コード１５３はレジストリ１０９またはその他のデータ・ベースを参照して第１の本体コード１５５を初期化して実行させる。第２の初期化コード１５９はレジストリ１０９またはその他のデータ・ベースを参照して第２の本体コード１６１を初期化して実行させる。初期化コード１７３はレジストリ１０９またはその他のデータ・ベースを参照して本体コード１７５を初期化して実行させる。
【００３９】
第１の本体コード１５５と第２の本体コード１６１は、プログラムが目的とする機能を実現するためのコードである。第１の本体コード１５５と第２の本体コード１６１は初期化されたときに実行するためのプロセスを生成し、さらにさまざまな機能を実行するスレッドを生成する。実行プロセスは、プログラムがアイドル状態のときにはサスペンド状態または実行待ち状態に遷移する。ＯＳ１０７のスケジューラは、他のプログラムが呼び出すイベントを検出したときにサスペンド状態または実行待ち状態の実行プロセスを実行状態に遷移させる。
【００４０】
分割型プログラム１５０は、初期化コードに対する複数のエントリ・ポイントを備えることにより、ブート期間中に他のプログラムとの間に依存関係がある場合に適用するとブート時間の短縮に効果的なデータ構造を備えている。第１の初期化コード１５３はブート期間中に実行されて第１の本体コード１５５を初期化する。ブート時間を短縮するためには、第１の初期化コード１５３および第１の本体コード１５５は、ブートを完了するためにブート期間中に必ず実行しなければならないコードだけで構成されていることが望ましい。
【００４１】
また、第１の初期化コード１５３は、第１の本体コード１５５を簡素に初期化しておき、第１の本体コード１５５の完全な初期化と第２の本体コード１６１の初期化を含めた最終的な初期化を第２の初期化コード１５９に委ねることができる。この場合、第２の初期化コード１５９は、第１の本体コード１５５のなかで第１の初期化コード１５３により初期化されなかった部分を初期化することができる。第２の本体コード１６１は、分割型プログラム１５０が所定の機能を実現するためにブートが完了してから初期化してもよいコードで構成することができる。
【００４２】
ＯＳ１０７は分割型プログラム１５０の第１の本体コード１５５を第２の本体コード１６１から分割して初期化できるが、非分割型プログラム１７０では本体コード１７５を分割して初期化することはできない。第１の初期化コード１５３および第２の初期化コード１５９はロードされてからアンロードされるまでの間に一度だけ実行されればよいプログラムであり、実行後にメイン・メモリ１３から消去することができる。
【００４３】
第１の本体コード１５５は、他のプログラムとの間に依存関係がある処理だけを行うコードだけで構成されていることが望ましい。依存関係を確保するために、第１の初期化コード１５３は、第１の本体コード１５５が他のプログラムに公開するインターフェースを備えている場合はそれを初期化する。また、第１の本体コード１５５は、ブート期間中に後続のプログラムをロードするためのプロセスを生成するコードを含む。ブート期間中に第１の初期化コード１５３が実行されて多くのリソースを消費すると、コンピュータ１０のブート時間が遅延するので、第１の初期化コード１５３は実行時にできるだけ少ないリソースを消費するように作成することが望ましい。
【００４４】
第１の初期化コード１５３が本体コード１５５を初期化するために、コンピュータ１０に実装される唯一のハードウエア資源であるＨＤＤ１７にアクセスする必要がある場合は、第１の初期化コード１５３はそのＨＤＤ１７に対するアクセスを最低限に抑えるようにして初期化することが望ましい。たとえば、第１の初期化コード１５３は、第１の本体コード１５５を設定するために、ＨＤＤ１７から多量のファイルを読み出す必要がある場合は、依存関係があるプログラムの実行に支障がでない範囲で設定するための最低限のファイルだけを読み出すように設定することが望ましい。
【００４５】
分割型プログラム１５０がデバイス・ドライバの場合は、第１の本体コード１５５はブート期間中に自らまたは他のプログラムが使用する最低限のハードウエアを設定するコードとすることができる。ＯＳ１０７が提供するサービスは、通常多くのアプリケーションから呼び出される。したがって、分割型プログラム１５０がアプリケーションの場合は、第１の初期化コード１５３はポートの設定のようなＯＳ１０７が提供するサービスを設定するコードとすることができる。
【００４６】
ユーザが分割型プログラム１５０を使用している間に設定したレジストリ１０９の情報は、一般に当該分割型プログラム１５０だけが使用するもので、他のプログラムの実行に必要とされることはほとんどない。したがって、第１の初期化コード１５３は、そのようなレジストリ１０９の情報を利用しない範囲で第１の本体コード１５５を設定することができる。この場合、第１の初期化コード１５３が初期化しなかった第１の本体コード１５５の部分は、ブートが完了したあとに第２の初期化コード１５９が初期化することができる。
【００４７】
分割型プログラム１５０が、ＬＣＤ１９にユーザ・インターフェースとなるアプリケーション・ウインドウ(以後、単にウインドウという。）を表示するタイプの場合は、第１の初期化コード１５３は、第１の本体コード１５５がウインドウを表示できる程度まで初期化してウインドウを通じて完全な起動をするための起動イベントを受け取ることができるようにすることができる。第１の本体コード１５５は、第２の初期化コード１５９を実行するプロセスを生成して、当該プロセスをサスペンド状態に遷移させておき、ロード期間中に他のプログラムから呼び出されたときに当該プロセスを実行状態に遷移させることもできる。第１の初期化コード１５３の実行が完了すると第１の本体コード１５５は実行プロセスを生成して分割型プログラム１５０は部分的に起動が完了する。
【００４８】
第２の本体コード１６１は、他のプログラムとの間に依存関係のないすべての処理を行うコードで構成することができる。第２の初期化コード１５９が実行されると第２の本体コード１６１は実行プロセスを生成し、分割型プログラム１５０は完全に起動する。分割型プログラム１５０が対話型の場合は、完全に起動するとアイドル状態に移行する。この時点では、第１の本体コード１５５を実行するプロセスも実行待ち状態またはサスペンド状態に遷移している。分割型プログラム１５０がデバイス・ドライバの場合は、第２の本体コード１６１はブート完了後に動作するプログラムが使用するハードウエアを設定するコードとすることができる。
【００４９】
分割型プログラム１５０がアプリケーションの場合は、第２の初期化コード１５９は、第２の本体コード１６１に対して当該分割型プログラム１５０が保有するユーザ・データを使用した設定をするコードまたはユーザが分割型プログラム１５０を使用している間に設定したレジストリ１０９の情報を利用して設定するコードとすることができる。
【００５０】
分割型プログラム１５０は、従来の初期化コード１７３の途中に単にエントリ・ポイントを設けて作成したものではない。分割型プログラム１５０の作成者は初期化コード１７３のなかでブート期間中に実行しなければならないコードを第１の初期化コード１５３としてコーディングし、ブート完了後に実行してもよいコードを第２の初期化コード１５９としてコーディングすることになる。
【００５１】
当該プログラムの特質を最もよく知っているプログラム作成者は、従来の本体コード１７５の初期化を第１の初期化コード１５３で行うか第２の初期化コード１５９で行うかを適切に判断することができる。従来の本体コード１７５の初期化の実行タイミングを他のプログラムで制御しようとしても個別のエントリ・ポイントがないので実現できない。
【００５２】
それに加えて、ブート時の作業や依存関係に基づいて第１の初期化コード１５３と第２の初期化コード１５９をコーディングしなければ、依存関係のあるプログラムに本実施の形態のような初期化コードの分割手法を適用することはできない。初期化コードの分割手法を採用すれば、ＯＳ１０７がこれまでと同じタイミングでエントリ・ポイント１を指定すると、ブート期間中は第１の初期化コードが第１の本体コード１５５を初期化して部分的に起動を完了し、ブート期間中の他のプログラムからの呼び出しに対するサービスを提供することができる。
【００５３】
そして、ブート完了後に第２の本体コード１６１を利用するための起動イベントが生成されたときに、第２の初期化コードが第１の本体コードの最終的な初期化と第２の本体コードの初期化を行うことができる。このような意味で初期化コードの分割手法は、それぞれのブート・プログラムが自律的にブート時間の短縮を図る手法であるといえる。
【００５４】
第１の初期化コードが実行される際に使用するレジストリ１０９の情報は、コンピュータ１０の動作にとって基本的なものであるため、一般的に削除することは難しい。そこで最適化コード１５７は、第２の初期化コード１５９が実行される際に使用するレジストリ１０９の情報および分割型プログラム１５０が保有する、設定のためのユーザ・データをクリーン・アップする。最適化コード１５７は、たとえば、分割型プログラム１５０がＷｅｂブラウザの場合は、レジストリ１０９またはＷｅｂブラウザ自体が保持するインターネット・キャッシュ、閲覧履歴、またはリンク先のないショートカットなどの不要な情報を削除する。
【００５５】
最適化コード１５７は、分割型プログラム１５０の作成者が、あらかじめ当該プログラムにとって不要な情報を削除する判断の基準を設定することができるので、レジストリ・クリーナのような他のプログラムが設定した一律の基準で削除するよりもより多くの不要な情報を削除することができる。また、ユーザは最適化コード１５７を設定して当該アプリケーションにとって最も適切なタイミング、削除する情報の時間的な範囲および内容的な範囲を設定することができる。
【００５６】
たとえば、レジストリ・クリーナでは、Ｗｅｂブラウザの１ヶ月前の閲覧履歴までは削除するかもしれないが、最適化コード１５７は当該分割型プログラム１５０にとってすべての閲覧履歴を所定の時期に削除することができる。初期化のためにＨＤＤ１７から読み出す必要がある分割型プログラム１５０が保持しているユーザ・データの量が少なくなると、ブート時にＨＤＤ１７を占有する時間および当該ユーザ・データをロードして実行するためにＣＰＵ１１が提供するタイム・スライスが減少するためにブート時間の短縮を図ることができる。
【００５７】
［非分割型アプリケーションの実行手順］
ここで、分割型アプリケーション１０１、１０２と対比するために非分割型アプリケーション１０３のロードおよび実行手順について説明する。ＯＳ１０７は、非分割型アプリケーション１０３をロードする際に、セクション・テーブル１７１にイメージ・ベースとＲＶＡで構成されるエントリ・ポイント１を設定し、設定したエントリ・ポイント１に対応する仮想アドレスのセクションにそれぞれ初期化コード１７３および本体コード１７５を記憶する。ここに、イメージ・ベースとは、プログラムを仮想アドレス空間にロードする場合の基準となるアドレスに相当する。
【００５８】
ロードされたメモリ・イメージのデータ構造は、たとえばBorland C++ Compilerに付属するtdump.exeを使うことで表示および確認することができる。ＯＳ１０７は、非分割型アプリケーション１０３を所定のセクションにロードしたあとに、エントリ・ポイント１から実行する。非分割型アプリケーション１０３の初期化コード１７３は、本体コード１７５を初期化する。初期化された本体コード１７５は、実行するためのプロセスを生成して非分割型アプリケーション１０３の起動は完了する。
【００５９】
非分割型アプリケーション１０３が、イベント・ドリブン・タイプのプログラムである場合は、起動が完了すると本体コード１７５を実行するプロセスは一旦サスペンド状態または実行待ち状態に遷移する。そして、非分割型アプリケーション１０３は入力デバイス１５によるユーザからの実行イベントやシステムからの実行イベントを待つ。実行イベントを受け取ったＯＳ１０７はプロセスをレジュームさせて実行可能状態に遷移させる。非分割型アプリケーション１０３が、実行イベントを必要としないでロード直後から自動的に実行されるプログラムである場合は、アイドル状態に移行しないで本体コード１７５は初期化コード１７３に連続して実行される。
【００６０】
［分割型アプリケーションの実行手順］
図５は、コンピュータ１０において分割型アプリケーション１０１、１０２を実行する手順を説明するフローチャートである。分割型アプリケーション１０１はブート・プログラムとして自動起動リスト１１１に登録されており、分割型アプリケーション１０２は登録されていないものとする。ブロック２０１では、コンピュータ１０に電源が投入されＢＩＯＳ＿ＲＯＭ２１のＰＯＳＴが実行される。その後、ＨＤＤ１７に格納されたＭＢＲおよびブート・セクタのコードに制御が移る。
【００６１】
ここでの起動ルーチンは、パワー・オフ状態から起動するコールド・ブートまたはＰＯＳＴのすべてまたは一部が省略されるウォーム・ブートのいずれであってもよい。ただし、ハイバネーション状態で直前のメモリ・イメージをＨＤＤ１７からメイン・メモリ１３に復帰させるレジュームは除く。ブロック２０３ではＯＳ１０７のブート・システム・コードが最初に実行されて初期の段階でレジストリ１０９および自動起動リスト１１１がロードされる。
【００６２】
さらに、カーネル・モジュール１１５のブートを処理するコードが所定の順番でロードされる。初期の段階でロードされるＯＳ１０７のモジュールの多くは、ブートを完了するために、ブート期間中に他のプログラムに完全なサービスを提供する必要があるので、分割型プログラム１５０で構成する必要はない。ブートを開始したＯＳ１０７はブロック２０５で、各ブート・プログラムが自動起動リスト１１１に登録されているか否かを判断する。自動起動リスト１１１に登録された分割型アプリケーション１０１の処理はブロック２０７に移行し、登録されていない分割型アプリケーション１０２の処理はブロック２３１に移行して行われる。
【００６３】
ブロック２０７で自動起動リスト１１１に登録されている分割型アプリケーション１０１は順番にＨＤＤ１７から読み出されて実行される。ロードされて実行された分割型アプリケーション１０１は、後続のブート・プログラムをロードするプロセスを生成する。つづいて、後続のブート・プログラムがさらに後続のブート・プログラムをロードするプロセスを生成する。ＯＳ１０７は、分割型アプリケーション１０１のメモリ・イメージをセクション単位でメイン・メモリ１３に対応する仮想メモリのアドレス空間にロードする。
【００６４】
ＨＤＤ１７に格納された分割型アプリケーション１０１のオブジェクト・コードは図４に示したメモリ・イメージで形成されるようにコーディングされている。ＯＳ１０７のリンカは、オブジェクト・コードの指示にしたがって、他のコードやライブラリィを結合して分割型アプリケーション１０１のメモリ・イメージを生成し、ローダがそれをメイン・メモリ１３に記憶する。
【００６５】
ＯＳ１０７は、分割型アプリケーション１０１をロードする際に、セクション・テーブル１５１にイメージ・ベースと相対仮想アドレス(ＲＶＡ)で構成されるエントリ・ポイント１、２、３を設定する。ＯＳ１０７は、設定したエントリ・ポイント１、２、３に対応する仮想アドレスのセクションにそれぞれ第１の初期化コード１５３と第１の本体コード１５５、最適化コード１５７、および第２の初期化コード１５９と第２の本体コード１６１を記憶する。
【００６６】
ブロック２０９では、ＯＳ１０７は、メモリ・イメージのロードが完了するとエントリ・ポイント１を指定して第１の初期化コード１５３を実行する。ロードが完了すると、第１の初期化コード１５３はＯＳ１０７の指示により自動的に実行を開始して第１の本体コード１５５を初期化する。初期化された第１の本体コード１５５は実行プロセスを生成する。ＯＳ１０７は実行プロセスをサスペンド状態または実行待ち状態に遷移させる。分割型アプリケーション１０１が、ユーザ・インターフェースとなるウインドウを表示するタイプの場合は、この時点でウインドウを表示して第２の初期化コードを実行する起動イベントを受け取るようにしてもよい。第１の本体コード１５５は、第２の初期化コード１５９を実行するプロセスを生成して、ブート期間中に他のプログラムから呼び出されたときに実行できるようにしておいてもよい。ブロック２１１で分割型アプリケーション１０１は第１の初期化コード１５３の実行が完了した時点で部分的な起動が完了しアイドル状態に移行する。
【００６７】
アイドル状態に移行した分割型アプリケーション１０１では、第１の本体コード１５５を実行するプロセスがサスペンド状態または実行待ち状態に遷移している。他のプログラムがアイドル状態の分割型アプリケーション１０１を呼び出すと、ＯＳ１０７は当該プロセスを実行状態に遷移させる。したがって、分割型アプリケーション１０１は第１の初期化コード１５３の実行が完了した時点で、他のプログラムに対してロード期間中に提供しなければならないサービスを開始する。
【００６８】
他の分割型プログラム１５０が同じような手順でロードされて第１の初期化コード１５３まで実行される。非分割型アプリケーション１０３では、ロードされると初期化コード１７３と本体コード１７５が実行されていたが、分割型アプリケーション１０１は第１の初期化コード１５３の実行により部分的な起動が完了するだけであるために、消費するＣＰＵ１１やＨＤＤ１７のリソースが少なくブート時間の短縮を図ることができる。
【００６９】
ブロック２１３ではすべてのブート・プログラムの起動が部分的に完了してＣＰＵ使用率が低下するためコンピュータ１０のブートが完了する。ブロック２１５ではＯＳ１０７が、部分的に起動が完了した分割型アプリケーション１０１を最終的に起動する起動イベントを監視する。ただし、ブートが完了するタイミングと個別のプログラムが部分的に起動を完了するタイミングは一致しないので、ブロック２１５の手順はブートの完了前に発生してもよい。
【００７０】
起動イベントは、部分的に起動が完了してアイドル状態に移行している分割型アプリケーション１０１の第２の初期化コード１５９を実行して完全に起動させるイベントである。起動イベントは、当該分割型アプリケーション１０１がブロック２０９でユーザからの入力指示を受け取るウインドウを表示している場合には、当該ウインドウがバックグラウンドからフォアグラウンドに変化した状態を示すイベントや入力デバイス１５からの入力イベントとすることができる。さらに起動イベントとして、ＯＳ１０７による、所定のタイミングでの起動イベントやコンピュータ１０のブート完了のタイミングでの起動イベントとすることができる。後者の起動イベントは、分割型アプリケーション１０１がユーザからの入力を待たないで実行される場合にも利用することができる。
【００７１】
ブロック２１７では、起動イベントを受け取ったＯＳ１０７がエントリ・ポイント２を指定して最適化コード１５７を実行する。最適化コード１５７は、レジストリ１０９および分割型アプリケーション１０１が保有する設定データから不要な情報を削除してクリーン・アップする。なお、最適化コード１５７は必ずしも第２の初期化コード１５９を実行する前に実行する必要はないが、この段階で実行しておくことで、第２の初期化コード１５９が実行するときに使用するリソースを確実に減少させることができる。最適化コード１５７をブート期間中に実行しない場合は、エントリ・ポイント２を設けないで、最適化コード１５７を第２の本体コード１６１の中に組み込むことができる。
【００７２】
最適化コード１５７はブロック２１９で最後にエントリ・ポイント３を指定して第２の初期化コード１５９を実行する。第２の初期化コード１５９はクリーン・アップされたレジスタ１０９を参照して第２の本体コード１６１の初期化と第１の本体コード１５５に対して必要な初期化を行う。ＯＳ１０７は、初期化された第２の本体コード１６１が生成した実行のためのプロセスをサスペンド状態または実行待ち状態に遷移させる。ＯＳ１０７は、追加的に初期化された第１の本体コード１５５により生成された実行のためのプロセスもサスペンド状態または実行待ち状態に遷移させる。
【００７３】
この状態で、分割型アプリケーション１０１は完全に起動が完了して通常の実行状態に移行する。ＬＣＤ１９にウインドウを表示してユーザからの入力を受け付けるタイプのアプリケーションでは、この段階でウインドウを表示することができる。ＯＳ１０７は分割型アプリケーション１０１が他のプログラムから呼び出されたときにサスペンド状態または実行待ち状態のプロセスを実行状態に遷移させる。第２の本体コード１６１は、実行される際に、エントリ・ポイント２を指定した最適化コード１５７を実行するためのプロセスを生成することができる。ブロック２５１では、ＯＳ１０７は最適化制御プログラム１１７が最適化イベントを生成したか否かを監視する。
【００７４】
ＯＳ１０７は最適化イベントを受け取ると特定のグループの分割型アプリケーション１０１またはすべての分割型アプリケーション１０１に対して当該最適化イベントを通知する。最適化イベントを受け取った分割型アプリケーション１０１の最適化コード１５７は、レジストリ１０９および設定に関するユーザ・データから所定の情報を削除する。最適化コード１５７は、ブロック２１７およびブロック２５３またはいずれか一方で実行することができる。最適化制御プログラム１１７は、コンピュータ１０のブートが完了したあとの定期的なタイミングまたはパワー・オフのタイミングで最適化イベントを生成することができる。
【００７５】
自動起動リスト１１１に登録されていない分割型アプリケーション１０２は、ブート期間中に実行されることはなく、ブート完了後に発生した起動イベントでロードされて実行される。分割型プアプリケーション１０２を自動起動リスト１１１に登録しないでもブートが完了できるということは、分割型プアプリケーション１０２は依存関係がないことが前提になるので本来的に非分割型プログラム１７０として構成してもよいものである。
【００７６】
しかし分割型アプリケーション１０２は、依存関係がない場合はブート完了後に起動し、将来的に依存関係が発生した場合には、ブート・プログラムとすることができる。ブロック２３１ではコンピュータ１０のブートが完了する。ブロック２３３ではＯＳ１０７が、分割型アプリケーション１０２に対する起動イベントを監視する。分割型アプリケーション１０２はこの時点では未実行状態なので、分割型アプリケーション１０２を完全に起動させるためには、起動イベントが必要となる。起動イベントは、入力デバイス１５によりＯＳ１０７のファイル・システムに対してアクセスすることで生成することができる。
【００７７】
ブロック２３５ではこの時点で分割型アプリケーション１０２がロードされていない場合は、ＯＳ１０７は起動イベントに基づいて、ＨＤＤ１７から分割型アプリケーション１０２を読み出すためのプロセスを生成する。起動イベントを検出したＯＳ１０７は分割型アプリケーション１０２をメイン・メモリ１３にロードする。ＯＳ１０７は、メモリ・イメージのロードが完了するとエントリ・ポイント１を指定して第１の初期化コード１５３を実行する。
【００７８】
すでに分割型アプリケーション１０２がロードされている場合は、ＯＳ１０７は起動イベントに基づいてエントリ・ポイント１から第１の初期化コード１５３を実行するようにしてもよい。第１の初期化コード１５３は第１の本体コード１５５の初期化を行い、第１の本体コード１５５が実行プロセスを生成するとそれをＯＳ１０７に通知する。つづいてＯＳ１０７はブロック２３７でエントリ・ポイント２を指定して最適化コード１５５を実行する。最適化コード１５５は実行が完了するとエントリ・ポイント３を指定してブロック２３９で第２の初期化コード１５９を実行する。このようにＯＳ１０７は、自動起動リスト１１１に登録されていない分割型アプリケーション１０２の第１の初期化コード１５３、最適化コード１５７、および第２の初期化コード１５９をブート完了後にアイドル状態を挟まないで連続して実行する。
【００７９】
図５の手順では、分割型アプリケーション１０１、１０２の実行手順を説明したが、本発明においてＯＳ１０７はブート期間中に分割型プログラム１０１、１０２と並行して非分割型アプリケーション１０３もロードして実行することができる。分割型プログラム１５０のデータ構造は、ブートが完了するまでにすべての本体コードを初期化する必要のないアプリケーションおよびＯＳのサービス・プログラムに適用することができる。
【００８０】
また、デバイス・ドライバが、他のプログラムを動作させるためにブート期間中にレジスタを初期化しなければならないコードと、ブートが完了したあとで使用されることが明らかなレジスタを初期化するコードに分かれているような場合は、デバイス・ドライバも分割型プログラム１５０のように構成することでブート時間の短縮を図ることができる。ブートが完了したあとにオンデマンドで実行することができるタイプのプログラムは、分割型プログラム１５０から除くことができる。
【００８１】
［ブログラムの実行順序］
図６は、図５の手順で行われた分割型アプリケーション１０１、１０２および非分割型アプリケーション１０３を構成するコードの実行の順番を説明する図である。図６(Ａ)は、分割型アプリケーション１０１を示し、図６(Ｂ)は分割型アプリケーション１０２を示し、図６(Ｃ)は自動起動リスト１１１に登録された非分割型プログラム１７０を示している。分割型アプリケーション１０１では、ブート期間中に第１の初期化コード１５３だけが実行されるので、リソースの消費が少なくＯＳ１０７および他のブート・プログラムと並行して起動されてもブート時間の遅延に対する影響は少ない。
【００８２】
分割型アプリケーション１０２は、ブート・プログラムでないためブート時間の遅延にはまったく影響を与えない。なお、実行しなければブート時間の遅延に与える影響は少ないので分割型アプリケーション１０２のロードだけは、ブート期間中に行うこともできる。非分割型プログラム１７０は、ブートが完了する前に初期化コードの全体が実行されるため、リソースの消費量が多くブート時間の遅延に大きな影響を与える。
【００８３】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【００８４】
１０…コンピュータ
１５０…分割型プログラムのメモリ・イメージのデータ構造
１７０…非分割型プログラムのメモリ・イメージのデータ構造
【図１】
0005200085.tif 000002
【図２】
0005200085.tif 000003
【図３】
0005200085.tif 000004
【図４】
0005200085.tif 000005
【図５】
0005200085.tif 000006
【図６】
0005200085.tif 000007