メインメモリとオペレーティングシステムを含むブートファイルを格納した記憶装置を備えるコンピュータに、前記コンピュータのブートを開始するステップと、前記ブートファイルを前記メインメモリにロードするプロセスを生成するステップと、前記生成されたプロセスに前記オペレーティングシステムが所定のサイズのワーキングセットを割り当てるステップと、前記ブートファイルをロードするプロセスから選択した所定のプロセスをサスペンドするステップと、前記サスペンドした所定のプロセスのメモリページをスワップアウトして前記ワーキングセットのサイズを縮小するステップとを有する処理を実行させるコンピュータプログラム。前記縮小されたワーキングセットのサイズが、前記オペレーティングシステムが各プロセスに対してディフォルトで設定する最低ワーキングセットサイズである請求項1に記載のコンピュータプログラム。前記縮小されたワーキングセットのサイズに応じて前記オペレーティングシステムが使用するキャッシュ領域のサイズを拡大するステップを有する請求項1または請求項2に記載のコンピュータプログラム。前記サスペンドしたプロセスがレジュームする前に前記スワップアウトしたメモリページを前記メインメモリにスワップインするステップを有する請求項1から請求項3のいずれかに記載のコンピュータプログラム。前記スワップインするステップを、前記プロセスがサスペンドしてから一定の時間が経過したときに実行する請求項4に記載のコンピュータプログラム。前記スワップインするステップを、前記ブートが完了したときに実行する請求項4に記載のコンピュータプログラム。前記スワップインするステップにおいて、サスペンドしていた呼び出し先のプロセスのメモリページのスワップインを、呼び出し元のプロセスと前記呼び出し先のプロセスの関係を記述したプロセス間通信リストを参照して、前記呼び出し元のプロセスが生成されたときに実行する請求項4に記載のコンピュータプログラム。前記スワップインするステップが、ウインドウハンドルを備えるプロセスに対してウインドウメッセージを送るステップを含む請求項4から請求項7のいずれかに記載のコンピュータプログラム。前記スワップインするステップを、前記ウインドウハンドルを備えるプロセスがサスペンドした直後に実行する請求項8に記載のコンピュータプログラム。前記所定のプロセスが、ユーザの操作に基づいてオンデマンドで実行されるプロセスを含む請求項1から請求項9のいずれかに記載のコンピュータプログラム。前記所定のプロセスが、レジストリに登録されているすべてのプログラムの中でブート時に実行されないプログラムをロードするプロセスを含む請求項1から請求項10のいずれかに記載のコンピュータプログラム。メインメモリのフリーメモリ領域に設定したキャッシュ領域にブートファイルを先読みし、前記フリーメモリ領域のサイズに応じて前記キャッシュ領域のサイズを変更することが可能なオペレーティングシステムにおいて、ブート時間を短縮する方法であって、前記コンピュータのブートを開始するステップと、前記ブートファイルを前記メインメモリにロードするプロセスを生成するステップと、前記生成されたプロセスに前記オペレーティングシステムが所定のサイズのワーキングセットを割り当てるステップと、前記ブートファイルをロードするプロセスから選択した所定のプロセスをサスペンドするステップと、前記サスペンドした所定のプロセスのメモリページをスワップアウトして前記ワーキングセットのサイズを縮小するステップと、前記縮小したワーキングセットのサイズに応じて前記キャッシュ領域のサイズを拡大するステップとを有する方法。前記拡大したキャッシュ領域に前記ブートファイルを先読みするステップと、前記キャッシュ領域に記憶されたブートファイルをロードするプロセスを生成するステップとを有する請求項12に記載の方法。メインメモリとオペレーティングシステムを含むブートファイルを格納した記憶装置を備えるコンピュータにおいて、前記メインメモリのフリーメモリ領域を拡大する方法であって、前記コンピュータのブートを開始するステップと、前記ブートファイルを前記メインメモリにロードするプロセスを生成するステップと、前記生成されたプロセスに前記オペレーティングシステムが所定のサイズのワーキングセットを割り当てるステップと、前記ブートファイルをロードするプロセスから選択した所定のプロセスをサスペンドするステップと、前記サスペンドした所定のプロセスのメモリページをスワップアウトして前記ワーキングセットのサイズを縮小するステップとを有する方法。プロセッサと、メインメモリと、オペレーティングシステムを含むブートファイルを格納する記憶装置と、仮想メモリと、前記メインメモリに前記ブートファイルをロードするプロセスのなかからサスペンドする所定のプロセスを選択する第1の手段と、前記ブートファイルをロードするプロセスに対して所定のサイズのワーキングセットを割り当て、前記第1の手段が選択した所定のプロセスをサスペンドし、前記サスペンドしたプロセスのメモリページをスワップアウトして前記ワーキングセットのサイズを縮小する第2の手段とを有するコンピュータ。前記メインメモリがキャッシュ領域を含み、前記第2の手段は、前記ワーキングセットのサイズの縮小に応じて前記キャッシュ領域を拡大する請求項15に記載のコンピュータ。前記第1の手段は、前記サスペンドしたプロセスをレジュームさせるように前記第2の手段に要求する請求項16に記載のコンピュータ。前記第1の手段は、前記プロセッサのアクセスに対してページフォルトが発生する前に前記第2の手段を通じて前記スワップアウトしたメモリページをスワップインさせる請求項17に記載のコンピュータ。前記第1の手段は、前記サスペンドしたプロセスがレジュームする前に前記スワップアウトしたメモリページを前記メインメモリにスワップインするように前記第2の手段に要求する請求項18に記載のコンピュータ。前記第1の手段は、ウインドウハンドルを備えるプロセスに対してウインドウメッセージを送るように前記第2の手段に要求する請求項18または請求項19に記載のコンピュータ。特許文献1に記載されたプリフェッチングは、HDDに対するI/Oアクセスの頻度を減らしてシーク時間の短縮を図ることでブート時間を短縮し、特許文献2の発明はブート中には必要がないブートファイルの実行を停止して必要なブートファイルに割り当てるプロセッサの時間を長くすることでブート時間を短縮する。両者は異なる原理でブート時間を短縮するため、同一のシステムに併存したときにそれぞれの機能を果たすことができる。しかし、プリフェッチングの際に先読みできるブートファイルの量は、メインメモリ上のキャッシュ領域の制限を受ける。OSはブートファイルをロードする際に生成されるプロセスがどれだけのワーキングセットを必要とするかわからないため、プロセスごとに異なるワーキングセットサイズを設定してキャッシュ領域を増大させることはできない。非特許文献1には、OSは新たに生成されるすべてのプロセスに対してディフォルトで定めた一定の最大ワーキングセットサイズを割り当てることが記載されている。この場合プロセスは、最大ワーキングセットサイズの範囲で新たなメモリページを使用することができる。ページフォルトが発生したときは、OSはワーキングセットが割り当てられていないフリーメモリ領域の容量フリーメモリ量を調べる。OSは、フリーメモリ量が多い場合は、ディフォルトで設定した最大ワーキングセットサイズ以上の領域にメモリページを追加し、フリーメモリ量が少ない場合はLRULeastRecentlyUsedのアルゴリズムで選択したメモリページをディスクドライブの中に構成した仮想メモリにスワップアウトして空いた領域に新たに必要となるメモリページを割り当てる。さらにOSは、フリーメモリ量が逼迫してページフォルトが頻発したり、新たなプロセスに対する物理メモリが不足したりしたときには、ワーキングセットトリミングという処理を開始して必要なプロセスに対する物理メモリ量を確保する。ワーキングセットトリミングでは、最小ワーキングセットサイズを超えているプロセス、および長時間アイドル状態にあるプロセスといったような判断基準で全体のプロセスに対して優先順位を設定して、優先順位の高いプロセスから物理メモリ上のメモリページを削除する。このときOSは、新たに生成されたプロセスに必要な物理メモリ量の範囲またはページフォルトの許容範囲といったような最低限の基準でメモリページを削除する。このようにOSは、ページフォルトの発生状況と現在のフリーメモリ量に応じてすべてのワーキングセットを対象にしてプロセス全体に対する物理メモリの利用効率が最適になるように管理する。ところでOSはフリーメモリ領域の一部をプリフェッチングのキャッシュ領域として利用する。キャッシュ領域の容量はフリーメモリ量が大きいほど大きくなるため、より多くのブートファイルを先読みすることができる。しかし、OSはプロセスの内容を判断できないため、個々のプロセスの個性を無視して全体としてページングが最適になるように最大ワーキングセットサイズを制御せざるを得ないため、ワーキングセットトリミングでは、積極的にフリーメモリ量を増大することができない。特許文献2の発明では、ブートファイルをロードするプロセスの中から選択したブート時の重要性が低い一部のプロセスをサスペンドすることができる。しかしサスペンドしたプロセスにも一定のサイズのワーキングセットが割り当てられ、フリーメモリ量を低下させる原因になっている。サスペンドしたプロセスはレジュームするまで実行されることはない。したがって、サスペンドしたプロセスに割り当てたワーキングセットを構成するメモリページを仮想メモリにスワップアウトしてワーキングセットサイズを縮小してもブート処理に支障をきたすことはない。そこで本発明の目的は、メインメモリのフリーメモリ量を増加させる方法を提供することにある。さらに本発明の目的は、ブート時間を短縮する方法を提供することにある。さらに本発明の目的は、そのような方法を実現するコンピュータプログラムおよびそのような方法を実行するコンピュータを提供することにある。本発明にかかるコンピュータは、メインメモリとオペレーティングシステムを含むブートファイルを格納した記憶装置を備える。コンピュータがブートを開始すると、ブートファイルをメインメモリにロードするプロセスが生成される。オペレーティングシステムは生成されたプロセスに対してディフォルトで設定した所定のサイズのワーキングセットを割り当てる。ブートファイルをロードするプロセスから選択された所定のプロセスがサスペンドされる。サスペンドしたプロセスのメモリページをスワップアウトしてワーキングセットのサイズを縮小する。本発明はこのような構成を備えることにより、ブートに影響を与えないようにしながらオペレーティングシステムがワーキングセットトリミングよりも積極的にワーキングセットのサイズを縮小してフリーメモリ量を増大させることができる。サスペンドする所定のプロセスは、ユーザの操作に基づいてオンデマンドで実行されるプロセスを含むようにすることができる。さらに所定のプロセスは、レジストリに登録されているすべてのプログラムの中でブート時に実行されないプログラムをロードするプロセスを含むようにすることができる。サスペンドされたプロセスのメモリページは、レジュームするまでの間はすべてスワップアウトしてもページフォルトを発生することがないので、ワーキングセットのサイズはオペレーティングシステムが許容する範囲でできるだけ小さいことが望ましい。本発明では縮小されたワーキングセットのサイズは、オペレーティングシステムがプロセスに対してディフォルトで設定する最低ワーキングセットサイズとすることもできる。さらにオペレーティングシステムが許容すれば、ゼロにすることもできる。オペレーティングシステムが縮小されたワーキングセットのサイズに応じてメインメモリに構成されたキャッシュ領域のサイズを拡大すれば、キャッシュ領域をより効果的に利用することができる。オペレーティングシステムは、キャッシュ領域をブートファイルの先読みに利用したり、ブート後のファイルの読み出しに使用したりすることができる。サスペンドしたプロセスのメモリページは、サスペンド中はプロセッサから読み出されないためページアウトしておいてもよいが、実行時にはページフォルトが発生しないようにすることが望ましい。本発明では、サスペンドしたプロセスがレジュームする前またはプロセッサがアクセスする前にスワップアウトしたメモリページをスワップインすることができる。スワップインをする際には、縮小したワーキングセットのサイズを最大ワーキングセットサイズまで拡大することができる。スワップインのタイミングは、プロセスがサスペンドしてから一定の時間が経過したときまたはブートが完了したときとすることができる。あるいは、スワップインのタイミングは、サスペンドしていた呼び出し先のプロセスのメモリページについては呼び出し元のプロセスと呼び出し先のプロセスの関係を記述したプロセス間通信リストを参照して、呼び出し元のプロセスが生成されたときとすることができる。ウインドウハンドルを備えるプロセスに対してウインドウメッセージを送ることで、ウインドウメッセージを処理する所定の範囲のコードをスワップインすることができる。この場合はスワップインのタイミングを、プロセスがサスペンドした直後とすることができる。本発明により、メインメモリのフリーメモリ量を増加させる方法を提供するこができた。さらに本発明により、ブート時間を短縮する方法を提供することができた。さらに本発明により、そのような方法を実現するコンピュータプログラムおよびそのような方法を実行するコンピュータを提供することができた。[コンピュータシステムの構成]図1は、本実施の形態にかかるコンピュータシステム10の主要なハードウエア構成を示す機能ブロック図である。コンピュータシステム10は、それぞれバス23に接続されたCPU11、メインメモリ13、入力デバイス15、ハードディスクドライブHDD17、液晶表示装置LCD19、およびBIOS_ROM21などを含んでいる。HDD17は、ブートファイルを格納したブートディスクである。HDD17はまた、物理メモリとしてのメインメモリ13に仮想メモリを提供する記憶領域を含んでいる。これらのハードウエアデバイスの機能は、本実施の形態に関しては周知であるため詳しい説明は省略する。[定義]最初に本明細書において使用する用語を定義する。ブートファイルとは、電源が投入されてコンピュータが起動されてから自動的にメインメモリにロードされるプログラム、プログラムモジュール、コードまたはファイルなどをいう。ブートファイルは、ロードされてから自動的に実行されるプログラムおよびオンデマンドで実行されるプログラムを含む。したがって、実行時にオンデマンドでロードされるプログラムはブートファイルには含まない。ここにブートの完了は、コンピュータ全体のCPU使用率が所定値まで下がったことで判断することができる。コンピュータ全体のCPU使用率Yは、アイドルプロセスのユーザモード時間をUi、アイドルプロセスのカーネルモード時間をKi、経過時間をEtとしたときに次の式で所定のプログラムが計算することができる。Y=1-UiKi/Et×100プロセスの実行とは、プリエンプティブなマルチタスキングを行うOSにおいて、当該プログラムを実行するためのプロセスが実行状態と実行可能状態の間を遷移している状態をいう。プロセスのサスペンド状態とは、当該プログラムを実行するためのプロセスが特定のAPI関数が呼び出されることで実行状態または実行可能状態から外れ、レジュームするための特定のAPI関数が呼び出されない限り実行可能状態に遷移しない状態をいう。未実行のプロセスとは、プログラムをロードするための未だ生成されていないプロセスおよびロードされているプログラムを実行するために未だ生成されていないプロセスをいう。サスペンド状態のプロセスも未実行のプロセスもともに実行されないが、サスペンド状態のプロセスは、一旦は実行されており他のプロセスから呼び出されたときにレジュームすることができる点で、未実行のプロセスと区別することができる。[ソフトウエアの構成]図2は、本実施の形態にかかる動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。OSはマルチタスクに対応し、ブート時にメインメモリ13のキャッシュ領域を利用してブートファイルの先読みを行い、かつフリーメモリ量の大きさに応じてキャッシュ領域を調整する。このようなOSとしてWindows登録商標を例示することができる。図2に示した各構成要素の機能は、HDD17に格納されブート時にメインメモリ13にロードされたプログラムがCPU11で実行されることによりコンピュータ10において実現される。図2において、ブートシステム100以外の要素は周知である。システムプロセス51は、セッションマネージャ、Winlogon、サービスコントロールマネージャなどを含む。サービス53は、ユーザの操作を介さないでバックグラウンドで動作するプロセスで、Service.exe、SpoolSv.exe、WinMgt.exeなどを含む。アプリケーション55は、ユーザアプリケーション、エクスプローラ、およびタスクマネージャなどを含む。サブシステム57は、環境サブシステムプロセス、カーネルモードデバイスドライバ、サブシステムDLLなどで構成されている。NTDLL.DLL59は、サブシステムDLLを使用するための関数を提供するサポートライブラリで、ユーザモードから呼び出すことができるインターフェース機能SystemServiceDispatchStubと、サブシステムDLLが使用する内部サポート関数で構成されている。カーネル61は、周知のOSの基本コンポーネントで、プロセス管理部63、ファイルシステム71、構成マネージャ73、共有資源管理部75、ハードウエア抽象化層77、およびメモリマネージャ81などを含んでいる。プロセス管理部63は、プロセスリスト65およびプロセススケジューラ67を含み、プロセスとスレッドの生成、実行、待機およびサスペンドなどの管理を行う。プロセスリスト65は、コンピュータ10に現在生成されているプロセスのリストを提供する。プロセススケジューラ67は、生成されたプロセスを所定のアルゴリズムに基づいて実行状態RUNと実行可能状態WAITとの間で遷移させてプリエンプティブなタスクスイッチを行う。ファイルシステム71は、FATFileAllocationTableおよびディレクトリを作成してHDD17に関するファイルの記録、読み取り、削除、または移動などを管理する。ファイルシステム71は、最近参照されたHDD17のデータをメインメモリ13に先読みして、後続のI/O処理を高速化するキャッシュマネージャを含む。キャッシュマネージャは、いずれかのブートファイルをロードする際に、前回のブートまでに認識していたそれ以降にロードされるブートファイルをメインメモリ13のキャッシュ領域に先読みする。ファイルシステム71は、ブートファイルをロードする際にキャッシュ領域を参照し、キャッシュ領域にブートファイルが先読みされている場合はそこからロードする。構成マネージャ73は、システムレジストリとスタートアップを管理する。システムレジストリには、ブート時にユーザの操作を介在しないで自動的に実行するプロセスの情報が登録されている。スタートアップにはユーザが起動の実行または停止を選択したOSのコンポーネントが登録されている。レジストリおよびスタートアップに登録されたプロセスは、OSShellStartupによりブート時に自動起動AutoRunされる。共有資源管理部75は、プロセス間通信に利用する共有リソースを管理する。プロセス間通信とは、固有の仮想アドレス空間を備える各プロセスの間で情報のやりとりを行うための仕組みで、メッセージキュー、ソケット、パイプ、共有メモリなどのさまざまな方法を採用することができる。共有リソースは、たとえば、CreatePipe関数で形成されたメインメモリ13の共有領域に、あるプロセスがWriteFile関数を呼んで書き込んだデータを他のプロセスがReadFile関数を呼んで読み取るといったようにして構築することができる。ハードウエア抽象化層77は、ハードウエアプラットフォームの差異を吸収し抽象化する。メモリマネージャ81は、プロセスに提供する仮想アドレスをメインメモリ13の物理アドレスに変換したり、当該プロセスに帰属するスレッドが要求したり参照したりするメモリページについて、メインメモリ13とHDD17の仮想メモリ領域との間でページング処理をしたりする。メモリマネージャ81は、ワーキングセットのサイズを設定したり、フリーメモリ量のサイズおよびメモリページに対するページフォルトの発生状況に基づいてワーキングセットのサイズをダイナミックに変更したりする。メモリマネージャ81は、プロセス制御部103から要求されプロセスのワーキングセットのサイズをダイナミックに変更する。ブートシステム100は、ブート管理部101、プロセス制御部103、実行プロセスリスト105、ランプロセスリストRPL107、プロセス間通信監視部109、プロセス間通信リスト111、およびRPL管理部113で構成されている。ブート管理部101は、ユーザアプリケーション55の一部を構成し、ユーザに対して、実行されるプロセスに関する情報の提供とRPL107を編集するための設定画面を提供する。プロセス制御部103は、RPL107に登録されていないプロセスをプロセスリスト65から検出したときには、API関数を呼び出してプロセススケジューラ67を通じて当該プロセスをサスペンドさせる。プロセス制御部103はプロセス間通信監視部109から通知があったプロセスについてAPI関数を呼び出してサスペンドしていたプロセスをレジュームさせる。プロセス制御部103は、サスペンドしていたプロセスを実行させるプロセスを検出したときには、それをレジュームさせる。さらにプロセス制御部103は、サスペンドしてから一定の時間が経過したプロセスをレジュームさせたり、ブートが完了したときにサスペンドしていたプロセスをレジュームさせたりすることができる。プロセス制御部103は、所定のプロセスをサスペンドさせたときに、メモリマネージャ81に、当該サスペンドさせたプロセスのワーキングセットサイズを縮小するように要求する。プロセス制御部103は、サスペンドさせたプロセスをレジュームする際に、縮小したワーキングセットサイズをディフォルトで設定した最大ワーキングセットサイズまで拡大するようにメモリマネージャ81に要求することができる。実行プロセスリスト105は、当該ブートにおいてコンピュータ10で実行されたすべてのプロセスのリストである。実行されたプロセスは、実行状態と実行可能状態の間を遷移する。実行プロセスリスト105は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の1週間の間に一度も実行されないプロセス、および直近の10回のブートで一度も起動されないプロセスなどの種別ごとのリストを構成することができる。RPL107は、ブートファイルをロードする複数のプロセスの中で実行を許可するプロセスまたはサスペンドしないプロセスの識別子を登録したリストである。RPL107を作成する方法は、図5を参照して詳しく説明する。プロセス間通信監視部109は、共有資源管理部75を通じて行われるプロセス間通信を監視して、呼び出し元のプロセスと呼び出し先のプロセスからなるプロセスの依存関係をプロセス間通信リスト111に登録する。プロセスの依存関係とは、たとえばプロセスAが実行されるときにプロセスB、C、Dを呼び出すときはプロセスAとプロセスB、C、Dの実行の連携を示す情報である。プロセスの依存関係を登録しておくことで、後に説明するようにプロセスB、C、Dがサスペンドされているときに、プロセスAが実行されたときには共有資源管理部75がプロセスB、C、Dを呼び出すプロセス間通信が行われたことを検出しないでも、いち早くプロセスB、C、Dをレジュームさせて実行時間を短縮することができる。RPL管理部113は、ユーザによるコンピュータ10の実際の使用を通じてOSをブートさせるのに最低限必要なプロセスをRPL107に登録する作業をする。[プロセス遷移]図3は、コンピュータ10で生成されたプロセスが消滅するまでの間にプロセス管理部63で制御されて遷移する様子を示す図である。プロセスはプロセス制御ブロックPCBというプロセッサ状態、プロセスの優先度、タイムスライス情報、プロセスID、およびデバイス情報などを含むデータ構造体である。プロセッサ状態は、CPU11がプロセスを中断したときのレジスタ、スタック、およびプログラムカウンタなどの状態に関する情報でコンテキストともいう。プロセスの優先度は、プロセス間におけるコンテキストスイッチの優先順位を示す情報である。タイムスライス情報は、タイムスライスの初期値や残り時間に関する情報である。タイムスライスとはプロセスがCPU11に対する一度の実行権を獲得したときに許される最大実行時間をいう。プロセスIDは、各プロセスに割り当てられた一意の番号である。デバイス情報は、当該プロセスに割り当てられたデバイスの識別情報である。なお、PCBには、OSにより異なるその他のさまざまな情報が含まれる。実行状態RUNは、現在プロセスがCPU11で実行されている状態であり、割り当てられたタイムスライスを消費すると実行可能状態READYに移行する。実行可能状態READYは、プロセスが実行可能であり優先度の順番に実行されるのを待っている状態で、実行可能キューに登録されたPCBがプロセススケジューラ67により所定の順番でCPU11にディスパッチされる。実行待ち状態WAITは、I/Oなどの何らかの条件が成立するまで自ら実行を中断する関数を呼んで実行を待っている状態である。サスペンド状態SUSPENDは、他のプロセスによって強制的に待ち状態にさせられた状態である。あるプロセスが他のプロセスを実行状態または実行可能状態からサスペンド状態に移行させたり、サスペンド状態からレジュームして実行可能状態に移行させたりするには、特定のAPI関数を呼び出して行うことができる。このとき、OSがプロセスを直接サスペンドまたはレジュームをするためのAPI関数を提供していない場合は、当該プロセスにより生成されたすべてのスレッドをサスペンドまたはレジュームの対象にしたAPI関数を呼び出すことでサスペンド/レジューム実現することができる。図4は、メインメモリ13に展開されたワーキングセットとキャッシュ領域の関係を説明する図である。メモリマネージャ81は、各プロセスに対して連続するアドレスで構成された仮想アドレス空間を提供する。仮想アドレス空間のサイズは、CPU11のアーキテクチャに依存し、32ビットのCPUでは4Gバイトとなる。メモリマネージャ81はページング方式を採用してメインメモリを管理し、仮想アドレス空間を複数のページで構成する。図4には、3つの仮想アドレス空間201a~201cを例示している。各仮想アドレス空間201a~201cは、テキスト、データ、およびスタックの3つのセグメントを含んでいる。テキストセグメントには、実行ファイルを記憶している。メモリマネージャ81は、新たに生成されたプロセスに対してメインメモリ13上にワーキングセットを割り当てる。ワーキングセットは、メインメモリ13に常駐するメモリページの集合で、プロセスを実行するスレッドはワーキングセットの範囲であればページフォルトを発生させないでメインメモリ13を使用することができる。図4には、仮想アドレス空間201a~201cに対応してワーキングセット203a~203cが割り当てられている。各ワーキングセット203a~203cは、仮想アドレス空間201a~201cのセグメントに対応するセグメントを含む。それらのセグメントも、仮想アドレス空間201a~201cのページと同じサイズのページで構成される。各ワーキングセット203a~203cにおけるテキストセグメントおよびデータセグメントを構成するメモリページの配列は、仮想アドレス空間201a~201cのように連続している必要はない。メモリマネージャ81はメインメモリ13に記憶したページテーブルにより、仮想アドレス空間201a~201cの仮想アドレスとメインメモリ13上の物理アドレスをマッピングする。仮想アドレスから物理アドレスへの動的な変換は、CPU11に内蔵されたり独立して用意されたりしたメモリ管理ユニットMPUにより行われる。メモリマネージャ81は新たに生成されたプロセスのワーキングセットに対してディフォルト値としての最大ワーキングセットサイズと最小ワーキングセットサイズをバイト単位またはページ単位で設定する。HDD17は、ブートファイルのイメージを記憶する一般記憶領域211とページングファイルを記憶する仮想メモリ領域213を含む。特定のプロセスに対して割り当てられたワーキングセットは、他のプロセスが利用することはできない。最大ワーキングセットサイズは当該プロセスが使用する物理メモリ量を決定する。最大ワーキングセットサイズと当該プロセスが実際に使用しているメモリページとの差は未使用のメモリページとなる。メモリマネージャ81は、新たなプロセスが生成されたり、フリーメモリ量が逼迫したりしたような場合でも最小ワーキングセットサイズのメモリページをメインメモリ13に必ず確保するが、それを越えたメモリページはフリーメモリ量の逼迫状況によりスワップアウトすることがある。メモリマネージャ81は、プロセスに属するスレッドが新たなメモリページを要求するときに、未使用のメモリページがある場合はそれを使用し、最大ワーキングセットサイズを超えるような場合は所定のアルゴリズムで使用中のメモリページを仮想メモリ領域213にスワップアウトして、要求されたメモリページを確保する。プロセスは、原則としてディフォルトのワーキングセットサイズの範囲で動作するが、より大きなワーキングセットを必要とする場合は、メモリマネージャ81に要求することができる。プロセスは、通常、一旦拡大したワーキングセットサイズを縮小するようにメモリマネージャ81に要求するようなことはない。メモリマネージャ81は、メインメモリ13の容量が逼迫して新たなプロセスにワーキングセットを割り当てることができないような場合には、LRUのアルゴリズムで強制的かつ緩やかにいずれかのワーキングセットの最大ワーキングセットサイズを縮小する。最大ワーキングセットサイズが縮小される場合でも、プロセスには最小ワーキングセットサイズのメモリページが確保される。キャッシュ領域205のサイズは、ファイルシステム71のキャッシュマネージャに対して割り当てられたワーキングセットサイズに相当する。メインメモリ13の全体からワーキングセット203a~203cとキャッシュ領域205を除いた記憶領域はフリーメモリ領域207に相当する。メモリマネージャ81は、メインメモリ13の容量と各ワーキングセットの最大ワーキングセットサイズの合計との差に相当するフリーメモリ領域207の範囲でキャッシュ領域205のサイズを設定する。すなわち、キャッシュ領域205はフリーメモリ領域207の一部を構成し、メモリマネージャ81は、フリーメモリ領域207のサイズが大きいほどキャッシュ領域205のサイズを増加させる。キャッシュマネージャは、いずれかのブートファイルを一般記憶領域211からロードする際に、それ以後にロードするブートファイルをキャッシュ領域205に先読みする。ブートファイルが先読みされたキャッシュ領域205には、一般記憶領域211に記憶されていたファイルイメージと同じ構造のデータが記憶される。キャッシュ領域205に先読みされたブートファイルは、その後ワーキングセット203a~203cにロードされた後に消去されるが、HDD17に対する一度のI/Oアクセスで先読みできるブートファイルの量はキャッシュ領域205の容量の範囲内に制限される。ファイルシステム71は、プロセスが実行されて一般記憶領域211からブートファイルをロードする際に、キャッシュ領域205に目的のブートファイルがあれば、キャッシュ領域205からロードしてワーキングセット203a~203cの中にメモリイメージとして記憶する。メモリイメージは、ライブラリがリンクされた実行可能なファイルである。所定の量のブートファイルをキャッシュ領域205に一度のI/Oアクセスで読み込んでから各ワーキングセット203a~203cにロードする場合は、ブートファイルごとにI/Oアクセスをしてワーキングセット203a~203cにロードする場合よりも、I/Oアクセスの頻度が少なく、かつ、HDD17のヘッドのシーク時間も短縮できるため短時間でロードを完了することができる。ワーキングセット203a~203cのサイズを縮小することができれば、フリーメモリ領域207のサイズが増加し、その結果キャッシュ領域205を拡大することができるためロード時間の短縮につながる。しかし、すべてのプロセスのワーキングセットサイズを縮小したのでは、当該プロセスが実行されるときにページフォルトが頻発してページング処理のためのI/Oアクセスによるオーバーヘッドが発生しむしろブート時間が遅延することになる。本実施の形態では、サスペンドしたプロセスに帰属するワーキングセットについては、できるだけ多くのメモリページをスワップアウトして最大ワーキングセットサイズを縮小することで、ページフォルトの発生を抑制しながらキャッシュ領域205の拡大を図るが、その手順については図5~図7を参照して説明する。[RPLを作成する手順]本実施の形態では、ブートファイルをロードするプロセスに対してRPL107に基づいてサスペンド/実行の制御をする。ブートファイルのなかで、オンデマンドで実行するプログラムおよびオンデマンドで実行するプログラムからだけ呼び出されるプログラムはブート時にサスペンドしておき、ブート後にオンデマンドでレジュームさせることでブート時間の短縮を図りながら、サスペンドしたプログラムの実行を保証する。ここにオンデマンドとは、ユーザの操作に基づいて実行されること、およびユーザの操作に基づいて実行されるプログラムから呼び出されて実行されることを意味しており、自動的に実行されることと対照的である。表1には本実施の形態でサスペンド/レジュームの対象となるプログラムを示す。図2に示したプログラムは、表1のように5つのグループに分類することができる。表1では、5つのグループについてのブートファイルに含まれるか否かの起動区分、サスペンド/実行の制御対象になるか否かの区分を示している。起動区分が自動のプログラムはブートファイルに相当し、オンデマンドのプログラムはブートファイルではない。第1のグループに属するカーネルは、コンピュータ10を動作させるために必須のプログラムで構成されており、サスペンド/実行の制御対象から除外する。したがって、カーネルはブート時にOSで指定された順番でロードされ実行される。第2のグループに属するOSのサービス、OSのデバイスドライバ、およびサブシステムの中で、ブートファイルに含まれて自動的にロードされるように設定されているプログラムはサスペンド/実行の制御対象とする。また、第3のグループに属するOSのサービス、デバイスドライバ、およびサブシステムの中で、オンデマンドで実行されるように設定されているプログラムはブートファイルではないためサスペンド/実行の制御対象から除外する。第4のグループに属するアプリケーション、アプリケーション用のサービス、および後から導入されたデバイスドライバの中で自動的にロードされるように設定されているプログラムはサスペンド/実行の制御対象とする。第5のグループに属するアプリケーション、アプリケーション用のサービス、および後から導入されたデバイスドライバの中で、オンデマンドで実行されるように設定されているプログラムはブートファイルでなないためサスペンド/実行の制御対象から除外する。図5は、RPLを作成する手順を示すフローチャートである。RPL107は、ブートファイルをロードするプロセスのサスペンド/実行を制御するためにプロセス制御部103により参照される。ブロック301では、メインメモリ13にRPL107をロードする。RPL107は登録されるプロセスが少ないほど短時間でブートを完了して特定のアプリケーションの実行環境を構築することができるが、コンピュータの動作に必要なプロセスをRPL107から除外すると動作が停止したり不安定になったりあるいはブートが遅延したりするので、登録するプロセスを適切に選択する必要がある。本実施の形態では、コンピュータ10の使用に基づいて登録すべきプロセスを抽出しながらRPL107を作成する。最初にプロセス制御部103は、HDD17に格納され構成マネージャ73のレジストリに登録された実行可能なプログラムに対応するすべてのプロセスをRPL107に登録する。ブロック303では、メインメモリ13にいずれのプロセスの依存関係も登録していない空白のプロセス間通信リスト111をロードする。ブロック305では、コンピュータ10に電源を投入してブートを開始する。図5の手順を繰り返すことでRPL107からはサスペンドの対象となるプロセスが削除される。ブロック307では、ブート中に生成されたプロセスに対してRPL107に基づいてプロセス制御部103によりサスペンド/実行の制御が行われるが、その詳細は図7を参照して説明する。ブートが完了するとブロック309では、プロセス制御部103が今回のブート時間が前回のブート時間よりも所定時間以上長くなったか否かを判断する。ブートを複数回実行して図5の手順を繰り返すと、当初はブート時間が短くなり、ある時点でブート時間が長くなることが予想される。このときブート時間が長くなったということは、本来は登録しておくべきプロセスがRPL107から削除されてブート時にサスペンドされたことを意味する。ブート時間が遅延していない場合はブロック311に移行する。ブロック311では、ユーザがコンピュータを使用し始めるとブート後に新たに実行されるアプリケーションなどのブートファイル以外のプログラムに関連するプロセスが発生する。そのプロセスは、ユーザの操作によりプログラムを実行するためのプロセスおよび当該プロセスから呼び出されて実行されるプロセスを含んでいる。ブロック313ではプロセス制御部103はその時点までに実行されたすべてのプロセスをプロセス管理部63から取得して実行プロセスリスト105に登録する。ブロック315では、プロセス間通信監視部109は、共有資源管理部75からプロセス間通信に関する情報を取得し、呼び出し元のプロセスと呼び出し先のプロセスからなる依存関係がプロセス間通信リスト111に登録されているか否かを判断する。登録されていない場合は、ブロック317でプロセス間通信監視部109は、プロセスの依存関係をプロセス間通信リスト111に登録する。ブロック319では、コンピュータ10に入力デバイス15を通じてシャットダウンの指示が行われる。シャットダウンの指示に応じてRPL管理部113は、ブロック321でRPL107から削除するプロセスを選択する。RPL管理部113はHDD17に格納され構成マネージャ73のレジストリに登録された実行可能なすべてのプログラムに対応するプロセスのリストを取得し実行プロセスリスト105と対比して把握したいまだ実行されていない未実行のプロセスをRPL107から削除する。未実行のプロセスは、ロードされたプログラムに対応するプロセスとロードされていないプログラムに対応するプロセスを含む。さらにRPL管理部113は、プロセス間通信リスト111と構成マネージャ73を参照し、自動起動の対象としてレジストリまたはスタートアップに登録されておらず、かつ呼び出し元のプロセスがOSのエクスプローラである呼び出し先のプロセスは、ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスであると判断してそのようなプロセスをRPL107から削除する。このようなプロセスは、自動的に実行されるブートファイルではないため、RPL107に登録する必要はない。したがって、RPL107に残るプロセスは、実行可能な全プロセスの中で主としてOSの仕組みとしてブートされて実行されたプログラムのプロセスおよび当該プロセスから呼び出されて実行されたプロセスとなり、ユーザの操作に基づいてオンデマンドで実行してもコンピュータ10の動作に支障がないようなプロセスはRPL107から削除される。このとき実行可能な全プロセスからRPL107を作成するために所定のプロセスを削除する様子を図6に示す。図6には、今回のブート時にレジストリに登録されている実行可能なすべてのプログラムに対応するプロセスが、未実行のプロセス、自動起動の対象外でユーザ操作に基づいてオンデマンドで実行されたプロセス、およびその他の実行されたプロセスで構成されることが示されている。ここではその他の実行されたプロセスがRPL107に登録される。ブロック309で今回のブート時間が遅い場合は、今回のブートに使用したRPL107から削除された重要なプロセスがサスペンド状態になって実行できない状態が予想される。ブロック320では、RPL管理部113は前回のブートから今回のブートまでの間にRPL107から削除したプロセスをRPL107に復帰させる。そして、ブロック321ではRPL管理部113はこのようにして復帰させたプロセスは、次回以降のブートでは削除の対象から外すようにすることができる。なお、ユーザはブート管理部101を通じて、所定の数のOSのコアプロセスを予めRPL107から削除することを禁止するプロセスとして設定しておくこともできる。ブロック323では、ブート管理部101は所定の回数だけブートが行われたか否かを判断する。所定の回数は、Webサイトの閲覧、文書の作成、画像データの編集あるいは動画の再生といったようなユーザがコンピュータを利用する可能性のある動作環境をすべて含むようにして決定することが望ましい。所定の回数のブートが完了した場合は、RPL107にはユーザのいかなる使用環境に対しても対応できるブートをするのに最低限必要なプロセスが登録され、電源起動後はRPL107を使用してサスペンド/実行の制御をすることでそのような動作環境に短時間で到達することができる。ブロック325でRPL管理部113はRPL107の編集を終了し、プロセス制御部103は編集されたRPL107を使用して次回のブート時のプロセス制御を実行する。プロセス制御の方法については、図7を参照して説明する。ブロック327ではさらにRPL107の編集を続けるために、コンピュータ10をシャットダウンした後に次回のブートが行われる。そして、ブロック329ではコンピュータ10に新たなプログラムが導入されることもある。RPL管理部113は、RPL107の編集が終了したのちに新たに導入されたプログラムおよびそのプログラムからだけ呼び出されるサービスプログラムはすべてRPL107に登録しないようにする。あるいは、RPL管理部113は、コンピュータ10にOSが導入された後に導入されたすべてのプログラムをRPL107に登録しないようにしてもよい。そのようなプログラムは、サスペンドしてもそれまで正常に動作していたOSのブートに支障をきたすことはなく、オンデマンドで実行すればよいからである。次回のブートでブロック329からブロック301に戻ることで、RPL管理部113は次回の動作環境の元でRPL107の編集を行う。[RPLを使用してフリーメモリ量を増加させる手順]図7は、図5の手順に従って作成したRPL107を利用してメインメモリ13のフリーメモリ量を増加させる手順を示すフローチャートである。ブロック401ではコンピュータ10に電源が投入されて図5の手順で前回のブートまでの間に作成したRPL107とプロセス間通信リスト111がメインメモリ13にロードされる。RPL107には、ブート時に実行を許可するプロセスのリストが登録されている。プロセス間通信リスト111には、前回のシャットダウンまでの間にプロセス間通信を行った呼び出し元のプロセスと呼び出し先のプロセスの依存関係を示すリストが登録されている。最初にBIOS_ROM21に格納されているBIOSのPOSTPowerOnSelfTestといわれる初期化プログラムがメインメモリ13に読み出されて実行される。初期化プログラムは、ブートデバイスを診断したり初期化したりする。つぎにBIOSはブートファイルが格納されているHDD17を探す。ブートファイルは表1のグループ1、2、4のプログラムで構成されている。BIOSは、HDD17の先頭セクタに格納されているMBRMasterBootRecordをメインメモリ13にロードしてそれに制御を移す。MBRはディスクからブート可能なパーティションを探してその先頭セクタブートセクタにあるブートストラップローダをメインメモリにロードしてそれに制御を移す。その後ブートストラップローダにつづいてグループ1、2、4のプログラムが所定の順番でメインメモリ13に読み出される。プリエンプティブなマルチタスキングを行うOSは、ブート時もプリエンプティブなタスクスイッチを行うようになっている。OSはブート時にHDD17からOSのプログラムを自動的にロードするために複数のプロセスを生成する。また、OSのエクスプローラもスタートアップやレジストリに登録されたプログラムを自動的にロードするためのプロセスを生成する。プロセスリスト65には、API関数を実行して生成されたプロセスのプロセスIDが書き込まれる。生成されたプロセスは、プロセススケジューラ67により実行可能状態と実行状態の間で遷移しながら実行され、タイムスライスごとに対応するプログラムのコードをロードしていく。プログラムはロードされると自動的に実行を開始したり、ロードされた状態で他のプロセスから呼び出されるのを待っていたりする。ブートの途中段階でブートシステム100がロードされて実行される。プロセス制御部103は、ブートファイルをブートするためのプロセスの生成については何ら制御を加えない。したがって、すべてのブートファイルはロードするためのプロセスが生成されるので、プロセス間通信に必要な共有リソースを確保することができる。共有リソースを確保したプロセスは、サスペンドされている間に他のプロセスから呼び出されたときは、プロセス間通信の発生をトリガにしてレジュームさせることができる。ファイルシステム71は、ブートファイルをHDD17の一般記憶領域211からロードする際に、キャッシュ領域205を参照してそこに目的とするブートファイルが存在すればそこからロードする。キャッシュ領域205からのロードは、一般記憶領域211からのロードに比べてHDD17に対するI/Oアクセスのオーバーヘッドが少ないので短時間で完了することができる。ファイルシステム71は、キャッシュ領域205から読み取ったブートファイルは、キャッシュ領域205から消去して、他のブートファイルの先読みの領域として確保することができる。ファイルシステム71はいずれかのブートファイルを一般記憶領域211からロードする際に、キャッシュ領域205に余裕があるか否かを調べる。キャッシュ領域205に余裕があれば、前回のブートまでに調べておいたブートファイルのロードの順番を利用して、それ以降にロードされる可能性のあるブートファイルを一般記憶領域211からファイルイメージとしてキャッシュ領域205に先読みしておく。ロードされたプロセスは、実行されて他のプロセスをさらにロードしたり、すでにロードされているプロセスを呼び出したりする。ロードされたプロセスの中には実行待ち状態に移行して、何らかのイベントが発生したり他のプロセスから呼び出されたりするまで実行されないプロセスも含まれる。メモリマネージャ81は、ロードのために生成されたすべてのプロセスに対してディフォルトで設定した所定のサイズのワーキングセットを割り当てる。ワーキングセットのサイズは、最大ワーキングセットサイズと最小ワーキングセットサイズで定義される。メモリマネージャ81は、フリーメモリ領域207の一部にキャッシュ領域205を設定する。ブートファイルのプロセスは何ら制限を受けないで生成され、メモリマネージャ81はすべてのブートファイルのプロセスに対して同一サイズのワーキングセットを付与するため、次第にフリーメモリ領域207のサイズが低下しキャッシュ領域205のサイズも低下する。その結果、キャッシュ領域205に先読みできるブートファイルの量も制約を受ける。プロセス制御部103は、OSのプロセスが所定の数だけ生成された後に、ブロック403でRPL107を参照しながらプロセスの制御を開始する。プロセス制御部103は、RPL107に登録されたプロセスとプロセスリスト65に記述されたプロセスを比較する。プロセス制御部103は、プロセスリスト65の中にRPL107に登録されていないプロセスをみつけたときは、プロセススケジューラ67に対して特定の内部関数を実行して当該プロセスをサスペンド状態に遷移させる。サスペンド状態に遷移する時点のプロセスは、予定するプログラムのロードを完了しており実行を開始する直前か実行を開始した直後の状態になっている。サスペンド状態に遷移したプロセスは、以後、プロセス制御部103がレジュームさせるAPI関数を実行しない限りその状態を持続する。その結果、サスペンドされたプロセスは、生成されてからサスペンドされるまでの短い時間の間で割り当てられたタイムスライス分だけ実行状態におかれる。プロセス制御部103は、プロセスリスト65の中にRPL107に登録されたプロセスをみつけたときはなんら制御を加えない。したがって、RPL107に登録されたプロセスだけがスケジューラ67の制御により実行状態と実行可能状態の間を遷移して実行されブートが進行する。RPL107に登録されたプロセスの数はプロセスリスト65に記述されたプロセスの数よりもはるかに少ないのでブート時間は短くなる。サスペンド状態のプロセスは、それが生成された時点でワーキングセットに確保されたメモリページをメインメモリ13に確保しておく必要がない。また、メモリページをメインメモリ13に確保する必要がなければ、ディフォルトで設定されたワーキングセットのサイズを縮小して、フリーメモリ領域207の拡大を図ることができる。ブロック405でプロセス制御部103は、メモリマネージャ81にサスペンド状態に遷移しているプロセスに対してディフォルトで設定した最大ワーキングセットサイズを縮小するように要求する。ワーキングセットの中で未使用のメモリページはスワップアウトしてもレジュームしたときのプロセスの実行にただちに支障をきたすことはない。また、サスペンドしたプロセスがレジュームする前にスワップアウトしていたメモリページをスワップインしておけば、すべてのメモリページをスワップアウトしてもレジュームしたときのプロセスの実行が遅延することはない。さらにプログラムの中には、CPU11がアクセスしたときにページフォルトが発生しても実用上は問題にならないため、ブート時間の短縮を優先してレジュームする前にスワップインさせなくてもよいものがある。プロセス制御部103はOSが許す範囲で、最大ワーキングセットサイズをできるだけ縮小するようにメモリマネージャ81に要求する。たとえば、プロセス制御部103は、最大ワーキングセットサイズおよび最小ワーキングセットサイズをともにゼロまで縮小したり、最大ワーキングセットサイズが最小ワーキングセットサイズに一致するまで縮小したりするように要求する。要求を受けたメモリマネージャ81は、最大ワーキングセットサイズを縮小するために、未使用のメモリページを優先して削除する。さらに使用しているメモリページをスワップアウトする必要が生じた場合は、LRUのアルゴリズムで必要な量のメモリページをスワップアウトしまたはすべてのメモリページをスワップアウトしてから、内部関数を実行してワーキングセットサイズを縮小する。スワップアウトの可能なメモリページまたはスワップアウトを認めるメモリページの範囲は、OSのアーキテクチャおよび当該プログラムの宣言により異なる。ワーキングセットサイズが縮小するとフリーメモリ領域207が拡大する。フリーメモリ領域207のサイズが拡大したことに伴ってブロック407で、メモリマネージャ81はキャッシュ領域205のサイズを拡大する。ファイルシステム71は、キャッシュ領域205のサイズが拡大された後にいずれかのブートファイルをロードする際には、現在のキャッシュ領域205のサイズとブートファイルのサイズを確認して、可能な限りそれに続くブートファイルをキャッシュ領域205に先読みする。ファイルシステム71はブートファイルをロードする際に、ブートファイルがキャッシュ領域205に記憶されていればそこからロードし、そうでないときは一般記憶領域211からロードする。メモリマネージャ81は、ブートファイルをロードするプロセスに対して、キャッシュ領域205からロードされても一般記憶領域211からロードされても同じ構造のワーキングセットを作成する。ブロック408では、ブートが完了する前またはブートが完了した後にアプリケーションなどを実行するために生成された特定のプロセス呼び出し元のプロセスが他のプロセス呼び出し先のプロセスを呼び出す。ブロック409でプロセス制御部103は、プロセス管理部63に呼び出し先のプロセスがサスペンドされているか否かを問い合わせる。呼び出し先のプロセスがサスペンドされていないときは、ブロック417に移行する。サスペンドされているときは、レジュームさせる必要があるのでブロック411に移行し、プロセス制御部103はプロセス間通信監視部109に呼び出し元のプロセスがプロセス間通信リスト111に登録されているか否かを問い合わせる。呼び出し元のプロセスが、プロセス間通信リスト111に登録されていると判断した場合は、プロセス制御部103はブロック413でプロセス間通信リスト111に記述された呼び出し元のプロセスに対応する呼び出し先のプロセスを、プロセス間通信を待たないでレジュームさせる。レジュームしたプロセスはプロセススケジューラ67により実行可能状態に遷移させられる。その結果プロセス間通信が発生してからレジュームさせる際のオーバーヘッドを費やさないでサスペンドされたプロセスを実行することができる。ブロック411でプロセス間通信リスト111に登録されていないプロセスが呼び出されたと判断した場合は、ブロック415でプロセス制御部103は、プロセス間通信監視部109が呼び出し先のプロセスに対するプロセス間通信の発生を認識したことをトリガにして特定の内部関数を実行し、プロセススケジューラ67に呼び出し先のプロセスをレジュームさせる。この場合は、ブロック413の手順に比べて、プロセス間通信の開始や共有資源管理部75へのアクセスのためにレジュームするまでの時間が長くなる。プロセスが実行可能状態に遷移しただけでは最大ワーキングセットサイズは拡大しないが、プロセスが追加のメモリページを要求する場合には、メモリマネージャ81はディフォルトで設定した最大ワーキングセットサイズまで追加のメモリページを割り当てる。レジュームしたプロセスに帰属するワーキングセットに含まれるメモリページはスワップアウトしているため、CPU11が当該メモリページにアクセスするときにはページフォルトが発生する。これを防ぐためにサスペンドしたプロセスがレジュームする前に、またはレジュームの際にスワップインすることが望ましい。ブロック417でプロセス制御部103は、サスペンドしたときにスワップアウトしたメモリページをスワップインするようにメモリマネージャ81に要求する。スワップインのタイミングは、プロセスがサスペンドしてからレジュームするまでの間であればいつでもよいが、スワップインするとワーキングセットサイズが増加してフリーメモリ量が減少するためできるだけ当該プロセスがレジュームする直前に行うことが望ましい。スワップインのタイミングは、ブロック413で説明したようにプロセス間通信リスト111に記述された呼び出し元のプロセスが呼び出されて呼び出し先のプロセスがレジュームする直前のタイミング、プロセスごとに生ずるサスペンドしてから一定の時間が経過したタイミング、または、ブートが完了したタイミングとすることができる。またウインドウを表示するプロセスは、ユーザがアクセスしたときに短時間で実行できる必要があるので、特にレジュームする前にスワップインしておくことが望ましい。あるいは、ウインドウを表示するプロセスのワーキングセットサイズは縮小しない方法を採用することもできる。ウインドウを表示するプロセスをサスペンドする場合は、プロセス制御部103は、ウインドウハンドルを有するサスペンド中のプロセスに対してウインドウメッセージを送る。ウインドウメッセージを受け取ったプロセスは、ウインドウメッセージを処理するコードを実行するために仮想メモリ領域213のページングファイルに記憶していたメモリページの一部をメインメモリ13にスワップインする。ウインドウメッセージを送るタイミングはサスペンドの直後とすることでもよい。ブロック419では、ユーザはブート管理部101が提供するインターフェース画面を通じて、RPL107の編集が必要か否かを判断する。ユーザはRPL107の編集が必要であると判断すると、ブート管理部101は実行プロセスリスト105を通じて、RPL107に登録されたプロセスのなかで実行頻度の少ないプロセスを検索してLCD19に表示する。表示の内容は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の1週間の間に一度も実行されないプロセス、および直近の10回のブートで一度も起動されないプロセスなどの種別ごとのリストとすることができる。ユーザが表示された内容に基づいて、RPL107から削除することができると判断したプロセスを選択すると、RPL管理部113はRPL107からそのプロセスを削除する。図7の手順では、サスペンドしたプロセスがレジュームしたときに、最大ワーキングセットサイズを増加させないでメモリマネージャ81が要求されたメモリページを最大ワーキングセットサイズまで割り当てた。他の方法としては、レジュームする際にプロセス制御部103がメモリマネージャ81に最大ワーキングセットサイズをディフォルト値まで拡大するように要求することができる。本発明は一例としてWindows登録商標のOSに適用できるが、本発明はページング方式による仮想記憶を採用し、各プロセスに割り当てたワーキングセットのサイズの合計を縮小することでフリーメモリ領域を拡大し、それに伴ってさらにキャッシュ領域を拡大するようなOSに広く適用できる。したがって、本明細書に記載したメモリ管理の詳細な方法は本発明を説明するための一例であり、OSがワーキングセットサイズの管理方法やキャッシュ領域の拡大方法などにおいて他のアーキテクチャを採用する場合でも本発明を適用することができる。これまでの手順では、ブートの際にサスペンドしたプロセスのワーキングセットを縮小してキャッシュ領域を拡大し、ブート時間を短縮する例を説明したが拡大されたフリーメモリ領域は、ブート時間の短縮以外にも適用できる。たとえば、サスペンドされたプロセスの中には、当該ブートに続くパワーオン中には実行されないものが含まれる。これまではそのようなプロセスに対しても一定のワーキングセットが割り当てられて他のプロセスのワーキングセットサイズを制限していた。しかし、本発明ではブートが完了した後でもサスペンドしたプロセスの最大ワーキングセットサイズが最小になっているのでその分だけフリーメモリ領域が拡大し、他のプロセスに対してできるだけ大きなサイズのワーキングセットを与えたり、ブート後のファイルの読み出しの際にファイルシステムが使用するキャッシュ領域を増加させたりすることができる。これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。