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