(57)【要約】【課題】短時間でブートできる動作環境が構築されたコンピュータ・システムを提供する。【解決手段】ＨＤＤ１７はブート・ファイルを格納する。ＲＰＬ１０７には、ブート時に実行するプロセスが登録されている。コンピュータをブートしたときに、ブート・ファイルをロードするプロセスがＲＰＬ１０７に登録されていれば、プロセス制御部１０３はプロセス管理部６５に対して制御を加えないため当該プロセスは通常どおり実行される。登録されていなければプロセス管理部が当該プロセスをサスペンドするように制御する。サスペンドされたプロセスが、後に他のプロセスから呼び出される場合は、プロセス制御部はオンデマンドで当該プロセスをレジュームさせる。【選択図】図２
2011103093.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティング・システムを含むブート・ファイルを格納したブート媒体を備えるコンピュータに、
ブート時に実行を許可するプロセスまたはサスペンドするプロセスを登録したプロセス・リストを提供するステップと、
前記コンピュータをブートするステップと、
前記ブート・ファイルをロードするプロセスを前記プロセス・リストに基づいて、実行またはサスペンドするステップと、
ブートの完了後にアプリケーション・プログラムを実行するステップと、
前記アプリケーション・プログラムの実行に応じて前記サスペンドしたプロセスをレジュームするステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項２】
プロセス間通信を監視するステップを有し、
前記レジュームするステップが、前記サスペンドしたプロセスが前記アプリケーション・プログラムを実行するプロセスから呼び出されたことを前記プロセス間通信の監視により検知したときにレジュームするステップを含む請求項１に記載のコンピュータ・プログラム。
【請求項３】
呼び出し元のプロセスと呼び出し先のプロセスの依存関係を記述したプロセス間通信リストを提供するステップを有し、
前記レジュームするステップが、前記プロセス間通信リストを参照して前記サスペンドしたプロセスが前記アプリケーション・プログラムを実行するプロセスから呼び出されたことを認識してレジュームするステップを含む請求項２に記載のコンピュータ・プログラム。
【請求項４】
前記コンピュータで実行されたプロセスの識別子を取得するステップを有し、
前記プロセス・リストが、実行を許可するプロセスを登録するラン・プロセス・リストであり、
前記プロセス・リストを提供するステップが、
前記ブート媒体に格納された実行可能なプログラムに対応する全プロセスを前記ラン・プロセス・リストに登録するステップと、
前記実行可能なプログラムの中で未実行のプログラムに対応するプロセスを前記ラン・プロセス・リストから削除するステップを
含む請求項１から請求項３のいずれかに記載のコンピュータ・プログラム。
【請求項５】
ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスをさらに前記全ラン・プロセス・リストから除去するステップを有する請求項４に記載のコンピュータ・プログラム。
【請求項６】
ブートを複数回実行するステップと、
ブート時間を計測するステップと、
前回のブートより今回のブートのブート時間が遅延した場合に、前回のブート後に前記ラン・プロセス・リストから除去したプロセスを前記ラン・プロセス・リストに復帰させるステップと
を有する請求項４または請求項５に記載のコンピュータ・プログラム。
【請求項７】
前記ラン・プロセス・リストを作成してから導入されたプログラムおよび該プログラムからのみ呼び出されるプログラムに関連するプロセスを前記ラン・プロセス・リストに登録しない請求項４から請求項６のいずれかに記載のコンピュータ・プログラム。
【請求項８】
前記コンピュータで実行されたプロセスの識別子を取得するステップを有し、
前記プロセス・リストがサスペンドするプロセスを登録するサスペンド・プロセス・リストであり、
前記プロセス・リストを提供するステップが、
未登録の前記サスペンド・プロセス・リストを用意するステップと、
前記ブート媒体に格納された実行可能なプログラムに対応する全プロセスのリストを取得するステップと、
前記実行されたプロセスを前記全プロセスのリストから除去して残った未実行のプログラムに対応するプロセスを前記サスペンド・プロセス・リストに追加するステップと
を含む請求項１から請求項３のいずれかに記載のコンピュータ・プログラム。
【請求項９】
ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスをさらに前記サスペンド・プロセス・リストに追加するステップを有する請求項８に記載のコンピュータ・プログラム。
【請求項１０】
ブートを複数回実行するステップと、
ブート時間を計測するステップと、
前回のブートより今回のブートのブート時間が遅延した場合に、前回のブート後に前記サスペンド・プロセス・リストに追加したプロセスを前記サスペンド・プロセス・リストから削除するステップと
を有する請求項８または請求項９に記載のコンピュータ・プログラム。
【請求項１１】
前記サスペンド・プロセス・リストを作成してから導入されたプログラムおよび該プログラムからのみ呼び出されるプログラムに関連するプロセスを前記サスペンド・プロセス・リストに登録するステップを有する請求項８から請求項１０のいずれかに記載のコンピュータ・プログラム。
【請求項１２】
オペレーティング・システムを含むブート・ファイルを格納したブート媒体と、
ブート時に実行するプロセスを登録したラン・プロセス・リストと、
前記ブート・ファイルをロードするプロセスを前記ラン・プロセス・リストに基づいて実行またはサスペンドする制御手段とを有し、
前記制御手段は、ブートの完了後に実行されたアプリケーション・プログラムが前記サスペンドしたプロセスを呼び出したときに前記サスペンドしたプロセスをレジュームするコンピュータ・システム。
【請求項１３】
前記制御手段は、サスペンドされたプロセスが前記アプリケーション・プログラムを実行するプロセスから呼び出されたことをプロセス間通信の監視により検知したときに前記サスペンドしたプロセスをレジュームする請求項１２に記載のコンピュータ・システム。
【請求項１４】
呼び出し元のプロセスと呼び出し先のプロセスの依存関係を記述したプロセス間通信リストを有し、
前記制御手段は、前記プロセス間通信リストを参照して前記サスペンドしたプロセスが前記アプリケーション・プログラムを実行するプロセスから呼び出されたことを認識してレジュームする請求項１３に記載のコンピュータ・システム。
【請求項１５】
前記ラン・プロセス・リストには、前記コンピュータに導入された実行可能なプログラムに対応する全プロセスから、前記コンピュータの動作時に実行されないプログラムに対応するプロセスとユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスを削除した残りのプロセスが登録されている請求項１２から請求項１４のいずれかに記載のコンピュータ・システム。
【請求項１６】
前記制御手段は、前記オペレーティング・システムが前記コンピュータに導入されてから導入されたプログラムを実行するプロセスの前記ラン・プロセス・リストへの登録を排除する請求項１２から請求項１５のいずれかに記載のコンピュータ・システム。
【請求項１７】
オペレーティング・システムを含むブート・ファイルを格納したブート媒体と、
ブート時にサスペンドするプロセスを登録したサスペンド・プロセス・リストと、
前記ブート・ファイルをロードするプロセスを前記サスペンド・プロセス・リストに基づいて実行またはサスペンドする制御手段とを有し、
前記制御手段は、ブートの完了後に実行されたアプリケーション・プログラムが前記サスペンドしたプロセスを呼び出したときに前記サスペンドしたプロセスをレジュームするコンピュータ・システム。
【請求項１８】
前記制御手段は、サスペンドされたプロセスが前記アプリケーション・プログラムを実行するプロセスから呼び出されたことをプロセス間通信の監視により検知したときに前記サスペンドしたプロセスをレジュームする請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記サスペンド・プロセス・リストには、前記コンピュータの動作時に実行されないプログラムに対応するプロセスとユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスが登録されている請求項１７または請求項１８に記載のコンピュータ・システム。
【請求項２０】
前記サスペンド・プロセス・リストには、前記オペレーティング・システムが前記コンピュータに導入されてから導入されたプログラムを実行するプロセスが登録されている請求項１７から請求項１９のいずれかに記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのブート時間を短縮する技術に関し、さらに詳細にはコンピュータを起動したあとでユーザが利用できる環境を早期に実現する技術に関する。
【背景技術】
【０００２】
コンピュータは電源が投入されると、ブート・ディスクでから所定のプログラム（以後、ブート・ファイルという。）をメイン・メモリに読み出す起動プロセス（ブート・ストラップまたはブートともいう。）を開始する。ユーザは一連のブート・ファイルがロードされてからアプリケーション・プログラム（以後、アプリケーションという。）を実行して作業をすることができるようになる。コンピュータの使用開始の時点ではブート・ファイルの量が比較的少ないためブートは短時間で終了する。しかし、コンピュータを長年使用している間に、ユーザはさまざまなプログラムを導入する。そして、それらのプログラムはユーザの認識していないところでブート・ファイルに組み込まれて自動起動されるようになりブート時間が長くなる。
【０００３】
特許文献１は、各サービス項目が選択されたとき、コンピュータ内において対応して起動されるべき装置、ドライバ、アプリケーションを定義し、いずれかのサービス項目が選択されると、コンピュータ内の選択されたサービス項目に対応する装置、ドライバ、アプリケーションのみを起動することで簡易ブートを実現する技術を開示する。特許文献２は、複数の起動モードの中のいずれか一つを選択してシステムを起動させてシステムが起動するために必要な時間を起動モードにより最小化させる技術を開示する。同文献には、メイン・オペレーティング・システムと、ＤＶＤの再生等を行う複数の補助オペレーティング・システムを有しており、ジョグレバーの操作により、それらを選択して起動することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３２３６２９号公報
【特許文献２】特開２００５−３３２４０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ユーザはコンピュータを起動する際に、メールの確認、Ｗｅｂサイトの閲覧、あるいは文書作成といったように特定された作業をいち早く実行できることを望んでいる。しかし、長期間使用されたコンピュータだけでなく使用開始直後のコンピュータであっても、ブート・ファイルはユーザが必要とする動作環境を実現するために必要な最小限の範囲に限定されているとは限らない。図１０は、コンピュータにおいてブート・ファイルをロードするときの一般的な様子を示す図である。Ｗｉｎｄｏｗｓ（登録商標）のオペレーティング・システム（ＯＳ）はブート時に、カーネル、サービス１、２、サブシステム１などのモジュールを所定の順番で自動的にロードするように構成されている。また、ＯＳのエクスプローラは、スタート・アップやレジストリに登録されたアプリケーション１を自動的にロードする。ＯＳのモジュールおよびエクスプローラは、親プロセスとなってロードするモジュールのプロセスを生成する。
【０００６】
アプリケーション１が実行される際に、サービス１、２が呼び出されて実行される。ブートが完了すると、ユーザはアイコンをクリックしてエクスプローラを通じてアプリケーション２を実行する。アプリケーション２の実行に伴ってサブシステム１、２が呼び出されて実行される。サブシステム１はシャットダウンされるまでどのモジュールからも利用されない。ここで、ユーザがコンピュータを起動した目的が、自ら実行の操作を行った文書作成のアプリケーション２の利用であったとする。ところが、サービス１、２およびアプリケーション１はアプリケーション２の実行とは無関係であり、サブシステム１はアプリケーション２の実行時に実行できればよいので、ブート・ファイルから除外できる可能性がある。ブート・ファイルの量を削減するとブート時間が短くなるが、不用意にコンピュータにより設定されたブート・ファイルからその一部を除去するとコンピュータが動作を停止したり、動作が不安定になったりする可能性がある。したがって、ブートを高速で完了することができ、かつ、コンピュータの動作に支障をきたさないようなブート・システムが望まれる。
【０００７】
そこで、本発明の目的は、短時間でブートできる動作環境が構築されたコンピュータ・システムを提供することにある。さらに本発明の目的は、電源の起動後にユーザが必要とする動作環境を短時間で構築するコンピュータ・システムを提供することにある。さらに本発明の目的はコンピュータ・システムに実装してそのような動作環境を実現できるコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
ブート時に自動的に実行されるブート・ファイルは、ＯＳの仕組みとしてあるいはユーザがインストールしたプログラムのインストーラにより構成される。ブート・ファイルの一部をブート時にロードしないでブート時間を短縮することも考えられるが、コンピュータが正常に動作するために自動的にロードすることが必須のブート・ファイルも存在する。本発明では、ブート・ファイルをロードするためのプロセスはすべて生成するが、そのプロセスの一部をブート中に停止しておき、後にオンデマンドで実行できるような環境を構築することでブート時間の短縮とプログラムの実行保証の両立を図る。本発明では、ブート・ファイルをロードするプロセスに対して、サスペンド／実行の制御を行って実質的にロードされるブート・ファイルの数を減らすとともに、サスペンドしたプロセスが他のプロセスから呼び出されたときにはオンデマンドでレジュームして実行できるようにする。
【０００９】
本発明の一の態様では、ブート時に実行するプロセスを登録したラン・プロセス・リストを使用する。プリエンプティブなＯＳは、実行されたプロセスを実行状態と実行可能状態の間で遷移させる。制御手段は、ブート・ファイルをロードするプロセスをラン・プロセス・リストに基づいて制御する。制御手段はラン・プロセス・リストに登録されたプロセスの実行は許可し、登録されていないプロセスはサスペンドする。実行を許可することは、制御手段はＯＳのプロセス制御にまかせることを意味する。サスペンドされたプロセスは、何らかのトリガがないと実行されない。サスペンドするプロセスが増えるほどブート時間は短縮する。そして制御手段は、サスペンドされたプロセスがアプリケーション・プログラムを実行するプロセスから呼び出されたときにレジュームさせる。
【００１０】
レジュームは、サスペンドしたプロセスがアプリケーション・プログラムを実行するプロセスから呼び出されたことをプロセス間通信の監視により検知したときに行うことができる。レジュームしたプロセスは、ＯＳにより実行可能状態に遷移し、やがて実行状態に遷移する。さらに、コンピュータの使用の間に発生したプロセス間通信の履歴に基づいて、呼び出し元のプロセスと呼び出し先のプロセスの依存関係を記述したプロセス間通信リストを用意することができる。制御手段は、サスペンドされたプロセスがアプリケーション・プログラムを実行するプロセスから呼び出されたときにプロセス間通信リストに基づいて当該プロセスをレジュームする。プロセス間通信リストを使用することで、実際にプロセス間通信が行われる前にサスペンドしたプロセスをレジュームすることができる。
【００１１】
ラン・プロセス・リストには、コンピュータに導入された実行可能なプログラムに対応する全プロセスから、コンピュータの動作時にロードはされたが実行されなかったりロードされなかったりした未実行のプロセスを削除したり、さらに、ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスを削除したりした残りのプロセスを登録することで作成することができる。したがってラン・プロセス・リストには、最小限ブートする必要のあるプログラムのプロセスだけが登録されることになる。
【００１２】
本発明の他の態様では、ブート時にサスペンドするプロセスを登録したサスペンド・プロセス・リストを使用する。制御手段は、ブート・ファイルをロードするプロセスをサスペンド・プロセス・リストに基づいて実行またはサスペンドする。サスペンド・プロセス・リストには、コンピュータに導入された実行可能なプログラムに対応する全プロセスの中でコンピュータの動作時にロードはされたが実行されなかったりロードされなかったりした未実行のプロセスと、ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスが登録される。したがって、サスペンド・プロセス・リストには、最小限ブートする必要のあるプログラムを除いたプロセスが登録される。
【発明の効果】
【００１３】
本発明により、短時間でブートできる動作環境が構築されたコンピュータ・システムを提供することができた。さらに本発明により、電源の起動後にユーザが必要とする動作環境を短時間で構築するコンピュータ・システムを提供することができた。さらに本発明によりコンピュータ・システムに実装してそのような動作環境を実現できるコンピュータ・プログラムを提供することができた。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態にかかるコンピュータ・システムの主要なハードウエア構成を示す機能ブロック図である。
【図２】本実施の形態にかかる動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。
【図３】コンピュータで生成されたプロセスが消滅するまでの間にプロセス管理部で制御されて遷移する様子を示す図である。
【図４】ＲＰＬを作成する手順を示すフローチャートである。
【図５】実行可能な全プロセスからＲＰＬを作成するために不要なプロセスを削除する様子を示す図である。
【図６】ＲＰＬを利用したプロセス制御の手順を示すフローチャートである。
【図７】ＳＰＬを用いて動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。
【図８】ＳＰＬを作成する手順を示すフローチャートである。
【図９】ＳＰＬを利用したプロセス制御の手順を示すフローチャートである。
【図１０】コンピュータにおいてブート・ファイルをロードするときの様子を示す図である。
【発明を実施するための形態】
【００１５】
［コンピュータ・システムの構成］
図１は、本実施の形態にかかるコンピュータ・システム１０の主要なハードウエア構成を示す機能ブロック図である。コンピュータ・システム１０は、それぞれバス２３に接続されたＣＰＵ１１、メイン・メモリ１３、入力デバイス１５、ハード・ディスク・ドライブ（ＨＤＤ）１７、液晶表示装置（ＬＣＤ）１９、およびＢＩＯＳ＿ＲＯＭ２１などを含んでいる。ＨＤＤ１７は、ブート・ファイルを格納したブート・ディスクである。これらのハードウエア・デバイスの機能は、本実施の形態に関しては周知であるため説明は省略する。
【００１６】
［定義］
最初に本明細書において使用する用語を定義する。ブート・ファイルとは、コンピュータの電源が起動されてから自動的にメイン・メモリにロードされて実行されるプログラム、プログラム・モジュール、コードまたはファイルなどをいう。ここにブートの完了は、コンピュータ全体のＣＰＵ使用率が所定値まで下がったことで判断することができる。コンピュータ全体のＣＰＵ使用率Ｙは、アイドル・プロセスのユーザ・モード時間をＵｉ、アイドル・プロセスのカーネル・モード時間をＫｉ、経過時間をＥｔとしたときに次の式で所定のプログラムが計算することができる。
Ｙ＝（１−（Ｕｉ＋Ｋｉ）／Ｅｔ）×１００％
【００１７】
プロセスの実行とは、プリエンプティブなマルチタスキングを行うＯＳにおいて、当該プログラムを実行するためのプロセスが実行状態または実行可能状態の間を遷移している状態をいう。プロセスのサスペンド状態とは、当該プログラムを実行するためのプロセスが特定のＡＰＩ関数が呼び出されることで実行されている状態から外れ、レジュームするための特定のＡＰＩ関数が呼び出されない限り実行可能状態に遷移しない状態をいう。未実行のプロセスとは、当該プログラムをロードするために未だ生成されていないプロセスおよび当該プログラムはロードされているが実行するために生成されていないプロセスをいう。サスペンド状態のプロセスも未実行のプロセスもともに実行されていないが、サスペンド状態のプロセスは一旦は実行され他のプロセスから呼び出されたときにプロセス間通信を監視してレジュームすることができる点で、未実行のプロセスと区別することができる。
【００１８】
［ソフトウエアの構成］
図２は、本実施の形態にかかる動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。図２のブロック図では、ＯＳとしてＷｉｎｄｏｗｓ（登録商標）を例示して、発明の説明に必要なソフトウエアの機能だけを示している。ただし、本発明はＯＳをＷｉｎｄｏｗｓに限定する必要はなく、本発明の実現に必要なＡＰＩ関数を備えた他のマルチタスクＯＳに適用することもできる。図２に示した各構成要素の機能は、ＨＤＤ１７に格納されブート時にメイン・メモリ１３にロードされたプログラムがＣＰＵ１１で実行されることによりコンピュータ１０において実現される。
【００１９】
図２において、ブート管理部１０１は、ブート・システム１００の一部であり、ブート・システム１００以外の要素は周知である。システム・プロセス５１は、セッション・マネージャ、Ｗｉｎｌｏｇｏｎ、サービス・コントロール・マネージャなどを含む。サービス５３は、ユーザの操作を介さないでバックグラウンドで動作するプロセスで、Ｓｅｒｖｉｃｅ．ｅｘｅ、ＳｐｏｏｌＳｖ．ｅｘｅ、ＷｉｎＭｇｔ．ｅｘｅなどを含む。アプリケーション５５は、ユーザ・アプリケーション、エクスプローラ、およびタスク・マネージャなどを含む。
【００２０】
サブシステム５７は、環境サブシステム・プロセス、カーネルモード・デバイス・ドライバ、サブシステムＤＬＬなどで構成されている。ＮＴＤＬＬ．ＤＬＬ５９は、サブシステムＤＬＬを使用するための関数を提供するサポート・ライブラリで、ユーザ・モードから呼び出すことができるインターフェース機能（System Service Dispatch Stub）と、サブシステムＤＬＬが使用する内部サポート関数で構成されている。カーネル６１は、ＯＳの基本コンポーネントで、プロセス管理部６３、ファイル・システム７１、構成マネージャ７３、共有資源管理部７５、およびハードウエア抽象化層７７などを含んでいる。
【００２１】
プロセス管理部６３は、プロセス・リスト６５およびプロセス・スケジューラ６７を含み、プロセスとスレッドの生成、実行、待機および消滅などの管理を行う。プロセス・リスト６５は、コンピュータ１０に現在生成されているプロセスのリストを提供する。プロセス・スケジューラ６７は、生成されたプロセスを所定のアルゴリズムに基づいて実行状態（ＲＵＮ）と実行可能状態（ＷＡＩＴ）との間で遷移させてプリエンプティブなタスク・スイッチを行う。
【００２２】
ファイル・システム７１は、ＦＡＴ（File Allocation Table）およびディレクトリを作成してＨＤＤ１７に関するファイルの記録、読み取り、削除、または移動などを管理する。ファイル・システム７１は、最近参照されたＨＤＤ１７のデータをメイン・メモリ１３に格納しておき、後続のＩ／Ｏ処理を高速化するキャッシュ・マネージャを含む。構成マネージャ７３は、システム・レジストリとスタート・アップを管理する。システム・レジストリには、ブート時にユーザの操作を介在しないで自動的に実行するプロセスの情報が登録されている。スタート・アップにはユーザが起動の実行または停止を選択したＯＳのコンポーネントが登録されている。レジストリおよびスタート・アップに登録されたプロセスは、OS Shell Startupによりブート時に自動起動（AutoRun）される。
【００２３】
共有資源管理部７５は、プロセス間通信に利用する共有リソースを管理する。プロセス間通信とは、固有の仮想アドレス空間を備える各プロセスの間で情報のやりとりを行うための仕組みで、メッセージ・キュー、ソケット、パイプ、共有メモリなどのさまざまな方法を採用することができる。共有リソースは、たとえば、CreatePipe関数で形成されたメイン・メモリの共有領域に、あるプロセスがWriteFile関数を呼んで書き込んだデータを他のプロセスがReadFile関数を呼んで読み取るといったようにして構築することができる。ハードウエア抽象化層７７は、ハードウエア・プラットフォームの差異を吸収し抽象化する。
【００２４】
ブート・システム１００は、ブート管理部１０１、プロセス制御部１０３、実行プロセス・リスト１０５、ラン・プロセス・リスト（ＲＰＬ）１０７、プロセス間通信監視部１０９、プロセス間通信リスト１１１、およびＲＰＬ管理部１１３で構成されている。ブート管理部１０１は、ユーザ・アプリケーション５５の一部を構成し、ユーザに対して実行されるプロセスに関する情報の提供とＲＰＬ１０７を編集するための設定画面を提供する。プロセス制御部１０３は、ＲＰＬ１０７に登録されていないプロセスをプロセス・リスト６５から検出したときには、ＡＰＩ関数を呼び出してプロセス・スケジューラ６７を通じて当該プロセスをサスペンドさせる。プロセス制御部１０３はプロセス間通信監視部１０９から通知があったプロセスについてＡＰＩ関数を呼び出してサスペンドしていたプロセスをレジュームさせる。プロセス制御部１０３は、サスペンドしていたプロセスを実行させるプロセスを検出したときには、それをレジュームさせる。
【００２５】
実行プロセス・リスト１０５は、コンピュータ１０で実行されたすべてのプロセスのリストである。実行されたプロセスは、実行状態と実行可能状態の間を遷移する。実行プロセス・リスト１０５は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の１週間の間に一度も実行されないプロセス、および直近の１０回のブートで一度も起動されないプロセスなどの種別ごとのリストを構成することができる。ＲＰＬ１０７は、ブート・ファイルをロードする複数のプロセスの中で実行を許可するまたはサスペンドしないプロセスの識別子を登録したリストである。ＲＰＬを作成する方法は、図４を参照して詳しく説明する。
【００２６】
プロセス間通信監視部１０９は、共有資源管理部７５を通じて行われるプロセス間通信を監視して、呼び出し元のプロセスと呼び出し先のプロセスからなるプロセスの依存関係をプロセス間通信リスト１１１に登録する。プロセスの依存関係とは、たとえばプロセスＡが実行されるときにプロセスＢ、Ｃ、Ｄを呼び出すときはプロセスＡとプロセスＢ、Ｃ、Ｄの実行の連携を示す情報である。プロセスの依存関係を登録しておくことで、後に説明するようにプロセスＢ、Ｃ、Ｄがサスペンドされているときに、プロセスＡが実行されたときにはプロセス資源管理部７５でプロセスＢ、Ｃ、Ｄを呼び出すプロセス間通信が行われたことを検出しないでも、いち早くプロセスＢ、Ｃ、Ｄをレジュームさせて実行時間を短縮することができる。ＲＰＬ管理部１１３は、ユーザによるコンピュータ１０の実際の使用を通じてＯＳをブートさせるのに最低限必要なプロセスをＲＰＬ１０７に登録する作業をする。
【００２７】
［プロセス遷移］
図３は、コンピュータ１０で生成されたプロセスが消滅するまでの間にプロセス管理部６３で制御されて遷移する様子を示す図である。プロセスはプロセス制御ブロック（ＰＣＢ）というプロセッサ状態、プロセスの優先度、タイム・スライス情報、プロセスＩＤ、およびデバイス情報などを含むデータ構造体である。プロセッサ状態は、ＣＰＵ１１がプロセスを中断したときのレジスタ、スタック、およびプログラム・カウンタなどの状態に関する情報でコンテキストともいう。プロセスの優先度は、プロセス間におけるコンテキスト・スイッチの優先順位を示す情報である。タイム・スライス情報は、タイム・スライスの初期値や残り時間に関する情報である。タイム・スライスとはプロセスがＣＰＵ１１に対する一度の実行権を獲得したときに許される最大実行時間をいう。プロセスＩＤは、各プロセスに割り当てられた一意の番号である。デバイス情報は、当該プロセスに割り当てられたデバイスの識別情報である。なお、ＰＣＢには、ＯＳにより異なるその他のさまざまな情報が含まれる。
【００２８】
実行状態（ＲＵＮ）は、現在プロセスがＣＰＵ１１で実行されている状態であり、割り当てられたタイム・スライスを消費すると実行可能状態（ＲＥＡＤＹ）に移行する。実行可能状態（ＲＥＡＤＹ）は、プロセスが実行可能であり優先度の順番に実行されるのを待っている状態で、実行可能キューに登録されたＰＣＢがプロセス・スケジューラ６７により所定の順番でＣＰＵ１１にディスパッチされる。実行待ち状態（ＷＡＩＴ）は、Ｉ／Ｏなどの何らかの条件が成立するまで自ら実行を中断する関数を呼んで実行を待っている状態である。サスペンド状態（ＳＵＳＰＥＮＤ）は、他のプロセスによって強制的に待ち状態にさせられた状態である。
【００２９】
あるプロセスが他のプロセスを実行状態または実行可能状態からサスペンド状態に移行させたり、サスペンド状態からレジュームして実行可能状態に移行させたりするには、特定のＡＰＩ関数を呼び出して行うことができる。このとき、ＯＳがプロセスを直接サスペンドまたはレジュームをするためのＡＰＩ関数を提供していない場合は、当該プロセスにより生成されたすべてのスレッドをサスペンドまたはレジュームの対象にしたＡＰＩ関数を呼び出すことでサスペンド／レジューム実現することができる。
【００３０】
［ＲＰＬを作成する手順］
本実施の形態では、ブート・ファイルに含まれて自動的にロードされるプログラムのプロセスをＲＰＬ１０７に基づいてサスペンド／停止する。オンデマンドで実行できるプログラムおよびオンデマンドで実行するプログラムからだけ呼び出されるプログラムはブート時にサスペンドしておき、ブート後にオンデマンドでレジュームさせることでブート時間の短縮を図りながら、サスペンドしたプログラムの実行を保証している。ここにオンデマンドとは、ユーザの操作に基づいて実行されること、およびユーザの操作に基づいて実行されるプログラムから呼び出されて実行されることを意味しており、ブート時に自動的にロードされて実行されることと対照的である。表１には本実施の形態でサスペンド／レジュームの対象となるプログラムを示す。
【００３１】
【表１】
2011103093.tif 000003
【００３２】
図２に示したプログラムは、表１のように５つのグループに分類することができる。表１では、５つのグループについてブート・ファイルに含まれるか否かの起動区分、サスペンド／レジュームの制御対象になるか否かの区分を示している。第１のグループに属するカーネルは、コンピュータ１０を動作させるために必須のプログラムで構成されており、サスペンド／レジュームの制御対象から除外する。したがって、カーネルはブート時にＯＳで指定された順番でロードされる。第２のグループに属するＯＳのサービス、ＯＳのデバイス・ドライバ、およびサブシステムの中で、ブート・ファイルに含まれて自動的にロードされるように設定されているプログラムはサスペンド／レジュームの制御対象とする。
【００３３】
また、第３のグループ３に属するＯＳのサービス、デバイス・ドライバ、およびサブシステムの中で、オンデマンドで実行されるように設定されているプログラムはサスペンド／レジュームの制御対象から除外する。第４のグループ４に属するアプリケーション、アプリケーション用のサービス、および後から導入されたデバイス・ドライバの中で自動的にロードされるように設定されているプログラムはサスペンド／レジュームの制御対象とする。第５のグループ５に属するアプリケーション、アプリケーション用のサービス、および後から導入されたデバイス・ドライバの中で、オンデマンドで実行されるように設定されているプログラムはサスペンド／レジュームの制御対象から除外する。
【００３４】
図４は、ＲＰＬを作成する手順を示すフローチャートである。ＲＰＬ１０７は、ブート・ファイルをロードするプロセスのサスペンド／実行を制御するためにプロセス制御部１０３により参照される。ブロック２０１では、メイン・メモリ１１にＲＰＬ１０７をロードする。ＲＰＬ１０７は登録されるプロセスが少ないほど短時間でブートを完了して特定のアプリケーションの実行環境を構築することができるが、コンピュータの動作に必要なプロセスをＲＰＬ１０７から除外すると動作が停止したり不安定になったりあるいはブートが遅延したりするので、登録するプロセスを適切に選択する必要がある。本実施の形態では、コンピュータ１０の使用に基づいて登録すべきプロセスを選択しながらＲＰＬ１０７を作成する。最初にプロセス制御部１０３はＨＤＤ１７に格納され、構成マネージャ７３のレジストリに登録された実行可能なプログラムに対応するすべての全プロセスをＲＰＬ１０７に登録する。ブロック２０３では、メイン・メモリ１３にいずれのプロセスの依存関係も登録していない空白のプロセス間通信リスト１１１をロードする。
【００３５】
ブロック２０５では、コンピュータ１０に電源を投入してブートを実行する。ブロック２０７では、ブート中に生成されたプロセスに対してＲＰＬ１０７に基づいてプロセス制御部１０３によりサスペンド／実行の制御が行われるが、その詳細は図６を参照して説明する。ブートが完了するとブロック２０９では、プロセス制御部１０３が今回のブート時間が前回のブート時間よりも所定時間以上長くなったか否かを判断する。ブートを複数回実行して図４の手順を繰り返すと、当初はブート時間が短くなり、ある時点でブート時間が長くなることが予想される。このときブート時間が長くなったということは、ＲＰＬ１０７から登録しておくべきプロセスが削除されてブート時にサスペンドされたことを意味する。
【００３６】
ブート時間が遅延していない場合はブロック２１１に移行する。ブロック２１１では、ユーザがコンピュータを使用し始めるとブート後に新たに実行されるアプリケーションなどのプログラムに関連するプロセスが発生する。そのプロセスは、ユーザの操作によりプログラムを実行するためのプロセスおよび当該プロセスから呼び出されて実行されるプロセスを含んでいる。ブロック２１３ではプロセス制御部１０３はその時点までに実行されたすべてのプロセスをプロセス管理部６３から取得して実行プロセス・リスト１０５に登録する。
【００３７】
ブロック２１５では、プロセス間通信監視部１０９は、共有資源管理部７５からプロセス間通信に関する情報を取得し、呼び出し元のプロセスと呼び出し先のプロセスからなる依存関係がプロセス間通信リスト１１１に登録されているか否かを判断する。登録されていない場合は、ブロック２１７でプロセス間通信監視部１０９は、プロセスの依存関係をプロセス間通信リスト１１１に登録する。ブロック２１９では、コンピュータ１０に入力デバイス１５を通じてシャットダウンの指示が行われる。シャットダウンの指示に応じてＲＰＬ管理部１１３は、ブロック２２１でＲＰＬ１０７から削除するプロセスを選択する。ＲＰＬ管理部１１３はＨＤＤ１７に格納され構成マネージャ７３のレジストリに登録された実行可能なすべてのプログラムに対応する全プロセスのリストを取得し実行プロセス・リスト１０５と対比して把握したいまだ実行されていない未実行のプログラムに対応する未実行のプロセスをＲＰＬ１０７から削除する。
【００３８】
未実行のプロセスは、ロードされたプログラムに対応するプロセスとロードされていないプログラムに対応するプロセスを含む。さらにＲＰＬ管理部１１３は、プロセス間通信リスト１１１と構成マネージャ７３を参照し、自動起動の対象としてレジストリまたはスタート・アップに登録されておらず、かつ呼び出し元のプロセスがＷｉｎｄｏｗｓ（登録商標）のエクスプローラである呼び出し先のプロセスは、ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスであると判断してそのようなプロセスをＲＰＬ１０７から削除する。したがって、ＲＰＬ１０７に残るプロセスは、実行可能な全プロセスの中で主としてＯＳの仕組みとしてブートされて実行されたプログラムのプロセスおよび当該プロセスから呼び出されて実行されたプロセスとなり、オンデマンドで実行してもコンピュータ１０の動作に支障がないようなプロセスは削除される。
【００３９】
このとき実行可能な全プロセスからＲＰＬ１０７を作成するために所定のプロセスを削除する様子を図５に示す。図５には、今回のブート時にレジストリに登録されている実行可能なすべてのプログラムに対応する全プロセスが、未実行のプロセス、自動起動の対象外でユーザ操作に起因して実行されたプロセスから呼び出されて実行されたプロセス、およびその他の実行されたプロセスで構成されることが示されている。ここでは「その他の実行されたプロセス」がＲＰＬ１０７に登録される。
【００４０】
ブロック２０９で今回のブート時間が遅い場合は、今回のブートに使用したＲＰＬ１０７から重要なプロセスが削除されてサスペンド状態になっているプロセスが実行できない状態が予想される。ブロック２２０では、ＲＰＬ管理部１１３は前回のブートから今回のブートまでの間にＲＰＬ１０７から削除したプロセスをＲＰＬ１０７に復帰させる。そして、ブロック２２１ではＲＰＬ管理部１１３はこのようにして復帰させたプロセスは、次回以降のブートでは削除の対象から外すようにすることができる。なお、ユーザはブート管理部１０１を通じて、所定の数のＯＳのコア・プロセスを予めＲＰＬ１０７からの削除を禁止するプロセスとして設定しておくこともできる。
【００４１】
ブロック２２３では、ブート管理部１０１は所定の回数だけブートが行われたか否かを判断する。所定の回数は、Ｗｅｂサイトの閲覧、文書の作成、画像データの編集あるいは動画の再生といったようなユーザがコンピュータを利用する可能性のある動作環境をすべて含むようにして決定することが望ましい。所定の回数のブートが完了した場合は、ＲＰＬ１０７にはユーザのいかなる使用環境に対しても対応できるブートをするのに最低限必要なプロセスが登録され、電源起動後はＲＰＬ１０７を使用して実行許可およびサスペンドの制御をすることでそのような動作環境に短時間で到達することができる。ブロック２２５でＲＰＬ管理部１１３はＲＰＬ１０７の編集を終了し、プロセス制御部１０３は編集されたＲＰＬ１０７を使用して次回のブート時のプロセス制御を実行する。プロセス制御の方法については、図６を参照して説明する。
【００４２】
ブロック２２７ではさらにＲＰＬ１０７の編集を続けるために、コンピュータ１０をシャットダウンした後に次回のブートが行われる。そして、ブロック２２９ではコンピュータ１０に新たなプログラムが導入されることもある。ＲＰＬ管理部１１３は、ＲＰＬ１０７の編集が終了したのちに新たに導入されたプログラムおよびそのプログラムからだけ呼び出されるサービス・プログラムはすべてＲＰＬ１０７に登録しないようにする。あるいは、ＲＰＬ管理部１１３は、コンピュータ１０にＯＳが導入された後に導入されたすべてのプログラムをＲＰＬ１０７に登録しないようにしてもよい。そのようなプログラムは、サスペンドしてもそれまで正常に動作していたＯＳのブートに支障をきたすことはなく、オンデマンドで実行すればよいからである。次回のブートでブロック２２９からブロック２０１に戻ることで、ＲＰＬ管理部１１３は次回の動作環境の元でＲＰＬ１０７の編集を行う。
【００４３】
［ＲＰＬを使用したプロセス制御の手順］
図６は、図４の手順に従って作成したＲＰＬ１０７を利用してプロセス制御を行う手順を示すフローチャートである。ブロック３０１では図４の手順で前回のブートまでの間に作成されたＲＰＬ１０７がメイン・メモリ１３にロードされる。ＲＰＬ１０７には、ブート時に実行を許可するプロセスのリストが登録されている。ブロック３０３ではプロセス間通信リスト１１１がメイン・メモリ１３にロードされる。プロセス間通信リスト１１１には、前回のシャットダウンまでの間にプロセス間通信を行った呼び出し元のプロセスと呼び出し先のプロセスの依存関係を示すリストが登録されている。ブロック３０５ではブートが開始される。
【００４４】
最初にＢＩＯＳ＿ＲＯＭ２１に格納されているＢＩＯＳのＰＯＳＴ（Power On Self Test）といわれる初期化プログラムがメイン・メモリ１３に読み出されて実行される。初期化プログラムは、ブート・デバイスを診断したり初期化したりする。つぎにＢＩＯＳはブート・ファイルが格納されているＨＤＤ１７を探す。ブート・ファイルは表１のグループ１、２、４のプログラムで構成されている。
【００４５】
ＢＩＯＳは、ＨＤＤ１７の先頭セクタに格納されているＭＢＲ（Master Boot Record）をメイン・メモリ１３にロードしてそれに制御を移す。ＭＢＲはディスクからブート可能なパーティションを探してその先頭セクタ（ブート・セクタ）にあるブート・ストラップ・ローダをメイン・メモリにロードしてそれに制御を移す。その後ブート・ストラップ・ローダにつづいてグループ１、２、４のプログラムが所定の順番でメイン・メモリ１３に読み出される。プリエンプティブなマルチタスキングを行うＯＳは、ブート時もプリエンプティブなタスク・スイッチを行うようになっている。ＯＳはブート時にＨＤＤ１７からＯＳのプログラムを自動的にロードするために複数のプロセスを生成する。また、ＯＳのエクスプローラもスタート・アップやレジストリに登録されたプログラムを自動的にロードするためのプロセスを生成する。プロセス・リスト６５には、ＡＰＩ関数を実行して生成されたプロセスのプロセスＩＤが書き込まれる。
【００４６】
生成されたプロセスは、プロセス・スケジューラ６７により実行可能状態と実行状態の間で遷移しながら実行され、タイム・スライスごとに対応するプログラムのコードをロードしていく。プログラムはロードされると自動的に実行を開始したり、ロードされた状態で他のプロセスから呼び出されるのを待っていたりする。プロセス制御部１０３は、プログラムをブートするためのプロセスの生成については何ら制御を加えない。したがって、ブート・ファイルはすべてロードのためのプロセスが生成されるので、プロセス間通信に必要な共有リソースを確保することができる。共有リソースを確保したプロセスは、サスペンドされている間に他のプロセスから呼び出されたときは、プロセス間通信の発生をトリガにしてレジュームさせることができる。
【００４７】
ブロック３０５では、ブートの途中でブート・システム１００がロードされて実行される。プロセス制御部１０３は、ＯＳのプロセスが所定の数だけ生成された後に、ブロック３０６でＲＰＬ１０７を参照しながらプロセスの制御を開始する。プロセス制御部１０３は、ＲＰＬ１０７に登録されたプロセスとプロセス・リスト６５に記述されたプロセスを比較する。プロセス制御部１０３は、プロセス・リスト６５の中にＲＰＬ１０７に登録されていないプロセスをみつけたときは、プロセス・スケジューラ６７に対して特定のＡＰＩ関数を実行して当該プロセスをサスペンド状態に遷移させる。サスペンド状態に遷移したプロセスは、以後、プロセス制御部１０３がレジュームさせるＡＰＩ関数を実行しない限りその状態を持続する。
【００４８】
その結果、サスペンドされたプロセスは、生成されてからサスペンドされるまでの短い時間の間で割り当てられたタイム・スライス分だけ実行状態におかれ、プログラムの一部のコードだけがロードされた状態で停止する場合もある。予定する量のデータがすべてロードされないためそのようなプログラムは動作しない。プロセス制御部１０３は、プロセス・リスト６５の中にＲＰＬ１０７に登録されたプロセスをみつけたときはなんら制御を加えない。したがって、ＲＰＬ１０７に登録されたプロセスだけが実行状態と実行可能状態の間を遷移してブートが進行する。ＲＰＬ１０７に登録されたプロセスの数はプロセス・リスト６５に記述されたプロセスの数よりもはるかに少ないのでブート時間は短くなる。
【００４９】
ブロック３０７では、ブートが完了する前またはブートが完了した後にアプリケーションなどを実行するためのプロセス（呼び出し元のプロセス）が生成されて他のプロセス（呼び出し先のプロセス）を呼び出す。ブロック３０９でプロセス制御部１０３は、プロセス管理部６３に呼び出し先のプロセスがサスペンドされているか否かを問い合わせる。呼び出し先のプロセスがサスペンドされていないときは、ブロック３１７に移行する。サスペンドされているときは、レジュームさせる必要があるのでブロック３１１に移行し、プロセス制御部１０３はプロセス間通信監視部１０９に呼び出し元のプロセスがプロセス間通信リスト１１１に登録されているか否かを問い合わせる。
【００５０】
呼び出し元のプロセスが、プロセス間通信リスト１１１に登録されていると判断した場合は、プロセス制御部１０３はブロック３１３でプロセス間通信リスト１１１に記述された対応する呼び出し先のプロセスを、プロセス間通信を待たないでレジュームさせる。レジュームしたプロセスはプロセス・スケジューラ６７により実行可能状態に遷移させられる。その結果プロセス間通信によるオーバーヘッドを費やさないでサスペンドされたプロセスを実行することができる。ブロック３１１でプロセス間通信リスト１１１に登録されていないプロセスが呼び出されたと判断した場合は、ブロック３１５でプロセス制御部１０３は、プロセス間通信監視部１０９が呼び出し先のプロセスに対するプロセス間通信の発生を認識したことをトリガにして特定のＡＰＩ関数を実行し、プロセス・スケジューラ６７に呼び出し先のプロセスをレジュームさせる。この場合は、ブロック３１３の手順に比べて、プロセス間通信の開始や共有資源管理部７５へのアクセスのためにレジュームするまでの時間が長くなる。
【００５１】
ブロック３１７では、ユーザはブート管理部１０１が提供するインターフェース画面を通じて、ＲＰＬ１０７の編集が必要か否かを判断する。ユーザはＲＰＬ１０７の編集が必要であると判断すると、ブート管理部１０１は実行プロセス・リスト１０５を通じて、ＲＰＬ１０７に登録されたプロセスのなかで実行頻度の少ないプロセスを検索しブロック３１９でＬＣＤ１９に表示する。表示の内容は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の１週間の間に一度も実行されないプロセス、および直近の１０回のブートで一度も起動されないプロセスなどの種別ごとのリストとすることができる。ユーザが表示された内容に基づいて、ＲＰＬ１０７から削除することができると判断したプロセスを選択すると、ＲＰＬ管理部１１３はＲＰＬ１０７からそのプロセスを削除する。
【００５２】
［ＳＰＬによるプロセスの制御］
これまで、ブート時に実行を許可するプロセスを登録したＲＰＬ１０７作成してブート時のプロセスを制御する方法を説明してきたが、本発明は、ブート時にサスペンドさせるプロセスを登録したサスペンド・プロセス・リスト（ＳＰＬ）を作成してプロセス制御を行うこともできる。図７はＳＰＬを用いて動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。図７のブート・システム４００は、図２のＲＰＬ１０７、ＲＰＬ管理部１１３にそれぞれ代えてＳＰＬ４０７、ＳＰＬ管理部４１３を設けている点が異なっている。ブート・システム４００を構成する各要素の動作は、図８、図９のフローチャートを参照して説明する。
【００５３】
図８は、ＳＰＬ４０７を作成する手順を示すフローチャートである。ＳＰＬ４０７は、ブート・ファイルをロードするプロセスのサスペンド／実行を制御するためにプロセス制御部４０３により参照される。ブロック５０１では、メイン・メモリ１３にＳＰＬ４０７をロードする。ＳＰＬ４０７は登録されるプロセスが多いほど短時間でブートを完了して特定のアプリケーションの実行環境を構築することができるが、コンピュータの動作に必要なプロセスをＳＰＬ４０７に登録すると動作が停止したり不安定になったりあるいはブートが遅延したりするので、登録するプロセスを適切に選択する必要がある。本実施の形態では、コンピュータ１０の使用に基づいて登録すべきプロセスを選択しながらＳＰＬ４０７を作成する。最初は、いずれのプロセスも登録さしない空白のＳＰＬ４０７を用意する。ブロック５０３では、メイン・メモリ１３にいずれのプロセスの依存関係も登録していない空白のプロセス間通信リスト４１１をロードする。
【００５４】
ブロック５０５では、コンピュータ１０に電源を投入してブートを実行する。ブロック５０７では、ブート・ファイルのプロセスに対するサスペンド／実行の制御が行われるが、その詳細は図９を参照して説明する。ブートが完了するとブロック５０９では、プロセス制御部４０３が今回のブート時間が前回のブート時間よりも所定時間以上長くなったか否かを判断する。ブートを複数回実行して図８の手順を繰り返すと、当初はブート時間が短くなり、ある時点でブート時間が長くなることが予想される。このときブート時間が長くなったということは、ＳＰＬ４０７に登録すべきでないプロセスが登録されてブート時にサスペンドされたことを意味する。
【００５５】
ブート時間が遅延していない場合はブロック５１１に移行する。ブロック５１１では、ブート後に新たに実行されるプログラムに起因するプロセスが発生する。ブロック５１３ではプロセス制御部４０３はその時点までに実行された全プロセスを実行プロセス・リスト４０５に登録する。
【００５６】
ブロック５１５では、プロセス間通信監視部４０９は、共有資源管理部７５からプロセス間通信に関する情報を取得し、呼び出し元のプロセスと呼び出し先のプロセスからなる依存関係がプロセス間通信リスト４１１に登録されているか否かを判断する。登録されていない場合は、ブロック５１７でプロセス間通信監視部４０９は、プロセスの依存関係をプロセス間通信リスト４１１に登録する。ブロック５１９では、コンピュータ１０に入力デバイス１５を通じてシャットダウンの指示が行われる。シャットダウンの指示に応じてＳＰＬ管理部４１３は、ブロック５２１でＳＰＬ４０７に追加するプロセスを選択する。ＳＰＬ管理部４１３はＨＤＤ１７に格納され構成マネージャ７３のレジストリに登録された実行可能なすべてのプログラムに対応する全プロセスのリストを取得し実行プロセス・リスト４０５と対比して把握したいまだ実行されていない未実行のプログラムに対応する未実行のプロセスをＳＰＬ４０７に追加する。
【００５７】
未実行のプロセスは、ロードされたプログラムに対応するプロセスとロードされていないプログラムに対応するプロセスを含む。さらにＳＰＬ管理部４１３は、プロセス間通信リスト４１１と構成マネージャ７３を参照し、自動起動の対象としてレジストリに登録されておらず、かつ呼び出し元のプロセスがＷｉｎｄｏｗｓ（登録商標）のエクスプローラである呼び出し先のプロセスは、ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスであると判断してそのようなプロセスをＳＰＬ４０７に追加する。たとえば、プリンタ・スプーラ、アプリケーションのクイックランチャ、インターネット・エクスプローラ（登録商標）のフィルター、モデム・サービス、およびデータ・ベース・アクセスなどのサービスは、ブート完了後にオンデマンドで実行しても作業に始業がないのでＳＰＬ４０７に登録することになる。
【００５８】
ブロック５０９で今回のブート時間が遅い場合は、今回のブートに使用したＳＰＬ４０７に重要なプロセスが登録されてサスペンド状態になっているプロセスが実行できない状態が予想される。ブロック５２０では、ＳＰＬ管理部４１３は前回のブートから今回のブートまでの間にＳＰＬ４０７に登録したプロセスをＳＰＬ４０７に復帰させる。そして、ブロック５２１ではＳＰＬ管理部４１３はこのようにして復帰させたプロセスは、次回以降のブートでは登録の対象から外すようにすることができる。なお、ユーザはブート管理部４０１を通じて、所定の数のＯＳのコア・プロセスを予めＳＰＬ４０７への登録を禁止するプロセスとして設定しておくこともできる。
【００５９】
ブロック５２３では、ブート管理部４０１は所定の回数だけブートが行われたか否かを判断する。所定の回数だけのブートが完了した場合は、ＳＰＬ４０７には、いかなるユーザの使用環境に対しても対応できるブートをするために最低限必要なプロセスを除いたプロセスが登録され、電源起動後はＳＰＬ４０７に基づく実行許可およびサスペンドの制御によりそのような動作環境に短時間で到達することができる。ブロック５２５でＳＰＬ管理部４１３はＳＰＬ４０７の編集を終了し、プロセス制御部４０３は編集されたＳＰＬ４０７を使用して次回のブート時のプロセス制御を実行する。
【００６０】
ブロック５２７では、コンピュータ１０をシャットダウンした後に次回のブートが行われる。そして、ブロック５２９ではコンピュータ１０に新たなプログラムが導入されることもある。ＳＰＬ管理部４１３は、ＳＰＬ４０７の編集が終了したのちに新たに導入されたプログラムおよびそのプログラムだけから呼び出されるサービス・プログラムはすべてＳＰＬ４０７に登録する。あるいは、ＳＰＬ管理部４１３は、コンピュータ１０にＯＳが導入された後に導入されたすべてのプログラムをＳＰＬ４０７に登録してもよい。次回のブートでブロック５２９からブロック５０１に戻るときには、ＳＰＬ管理部４１３は次回の動作環境の元でＲＰＬ１０７の編集を行う。
【００６１】
［ＳＰＬを使用したプロセス制御の手順］
図９は、図８の手順に従って作成したＳＰＬ４０７を利用してプロセス制御を行う手順を示すフローチャートである。ブロック６０１では図８の手順で前回のブートまでの間に作成したＳＰＬ４０７がメイン・メモリ１０にロードされる。ＳＰＬ４０７には、ブート時にサスペンドするプロセスのリストが登録されている。ブロック６０３ではプロセス間通信リスト４１１がメイン・メモリ１３にロードされる。ブロック６０５ではブートが開始され、ブート・ファイルの一部としてブート・システム４００がロードされて実行される。
【００６２】
プロセス制御部４０３は、ＯＳのプロセスが所定の数だけ生成された後に、ＳＰＬ４０７を参照しながらブロック６０６でプロセスの制御を開始する。プロセス制御部４０３は、ＳＰＬ４０７に登録されたプロセスとプロセス・リスト６５に記述されたプロセスを比較する。プロセス制御部４０３は、プロセス・リスト６５の中にＳＰＬ４０７に登録されたプロセスをみつけたときは、プロセス・スケジューラ６７に対してＡＰＩ関数を実行して当該プロセスをサスペンド状態に遷移させる。したがって、ＳＰＬ４０７に登録されていないプロセスだけが実行状態と実行可能状態の間を遷移してブートが進行する。ＳＰＬ４０７に登録されていないブート・ファイルをロードするプロセスの数はプロセス・リスト６５に記述されたプロセスの数よりもはるかに少ないのでブート時間は短くなる。
【００６３】
ブロック６０７では、ブートが完了する前またはブートが完了した後にアプリケーションなどを実行するためのプロセス（呼び出し元のプロセス）が生成されて他のプロセス（呼び出し先のプロセス）を呼び出す。ブロック６０９でプロセス制御部４０３は、プロセス管理部６３に呼び出し先のプロセスがサスペンドされているか否かを問い合わせる。呼び出し先のプロセスがサスペンドされていないときは、ブロック６１７に移行する。サスペンドされているときは、レジュームさせる必要があるのでブロック６１１に移行し、プロセス制御部４０３は呼び出し元のプロセスがプロセス間通信リスト４１１に登録されているか否かをプロセス間通信監視部４０９に問い合わせる。
【００６４】
呼び出し元のプロセスが、プロセス間通信リスト４１１に登録されていると判断した場合は、ブロック６１３でプロセス制御部４０３はプロセス間通信を待たないでＡＰＩ関数を通じて呼び出し先のプロセスをレジュームさせる。ブロック６１１でプロセス間通信リスト４１１に登録されていないプロセスが呼び出されたと判断した場合は、ブロック６１５でプロセス制御部４０３は、プロセス間通信監視部４０９が呼び出し先のプロセスに対するプロセス間通信の発生を認識したことをトリガにして特定のＡＰＩ関数を実行し、プロセス・スケジューラ６７に呼び出し先のプロセスをレジュームさせる。
【００６５】
ブロック６１７では、ユーザはブート管理部４０１が提供するインターフェース画面を通じて、ＳＰＬ４０７の編集が必要か否かを判断する。ユーザはＳＰＬ４０７の編集が必要であると判断すると、ブート管理部４０１は実行プロセス・リスト４０５を通じて、ＳＰＬ４０７に登録されていないプロセスのなかで実行頻度の少ないプロセスを検索しブロック６１９でＬＣＤ１９に表示する。表示の内容は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の１週間の間に一度も実行されないプロセス、および直近の１０回のブートで一度も起動されないプロセスなどの種別ごとのリストとすることができる。ユーザが表示された内容に基づいて、ＳＰＬ４０７に登録することができると判断したプロセスを選択すると、ＳＰＬ管理部４１３はＳＰＬ４０７にそのプロセスを追加する。
【００６６】
図４のフローチャートではＲＰＬ１０７を作成する手順を説明し、図８のフローチャートではＳＰＬ４０７を作成する手順を説明したが、図４の手順でＳＰＬを作成し、図９の手順でＲＰＬを作成することもできる。この場合、図４の手順で作成したＲＰＬに登録されたプロセスを構成マネージャのレジストリに登録されたすべての実行可能なプログラムに対応するプロセスから除いてＳＰＬを作成し、図８の手順で作成したＳＰＬに登録されたプロセスを構成マネージャのレジストリに登録されたすべての実行可能なプログラムに対応するプロセスから除いてＲＰＬを作成することができる。
【００６７】
図４、図８の手順は、ユーザがいかなる使用環境で使用する場合でも、自動的にブートする必要のないプログラムはサスペンドしておき、必要なときにオンデマンドで実行するためのＲＰＬ１０７またはＳＰＬ４０７を作成したが、本発明では、Ｗｅｂサイトの閲覧、または動画の再生といったような特定の使用環境で使用する場合に特化したＲＰＬまたはＳＰＬを作成することができる。その場合は、図４のブロック２２３または図８のブロック５２３におけるブート回数を当該使用環境でのプロセスの実行状態を判断できる程度に選択すればよい。
【００６８】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【００６９】
１０…コンピュータ
６１…カーネル
１００、４００…ブート・システム
【図１】
2011103093.tif 000004
【図２】
2011103093.tif 000005
【図３】
2011103093.tif 000006
【図４】
2011103093.tif 000007
【図５】
2011103093.tif 000008
【図６】
2011103093.tif 000009
【図７】
2011103093.tif 000010
【図８】
2011103093.tif 000011
【図９】
2011103093.tif 000012
【図１０】
2011103093.tif 000013