説明

メイン・メモリのフリー・メモリ量を拡大する方法およびコンピュータ

【課題】フリー・メモリ量を増加させる方法を提供する。
【解決手段】コンピュータはメイン・メモリ13と仮想メモリ領域213を備える。仮想アドレス空間201a〜201cには、メイン・メモリ13に所定のサイズのワーキング・セット203a〜203cが割り当てられる。ワーキング・セットを除いた領域はフリー・メモリ領域207となり、その一部にキャッシュ領域205が設定される。ブート時には、ブートに影響のない所定のプロセスをサスペンドする。サスペンドしたプロセスのワーキング・セットのサイズはメモリ・ページが仮想メモリ領域213にスワップ・アウトされて縮小される。その結果、フリー・メモリ領域が拡大し、それに伴ってOSがキャッシュ領域を拡大するため、より多くのブート・ファイルを先読みしてブート時間の短縮を図ることができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メイン・メモリのフリー・メモリ量を拡大する技術に関し、さらに詳細にはコンピュータのブート処理に影響を与えないようにしながらフリー・メモリ量を拡大する技術に関する。
【背景技術】
【0002】
コンピュータは電源が投入されると、ブート・ディスクから所定のプログラム(以後、ブート・ファイルという。)をメイン・メモリに読み出す起動プロセス(以後、ブートという。)を開始する。ユーザは一連のブート・ファイルがロードされてからアプリケーション・プログラム(以後、アプリケーションという。)を実行して作業をすることができるようになる。コンピュータの使用開始の時点ではブート・ファイルの量が比較的少ないためブートは短時間で終了する。しかし、コンピュータを長年使用している間に、ユーザはさまざまなプログラムを導入する。そして、それらのプログラムはユーザの認識していないところでブート・ファイルに組み込まれて自動起動されるようになりブート時間が長くなる。
【0003】
特許文献1は、無駄なページ・フォルトやシークを省略して起動時間を短縮するプリフェッチングについて記載している。これは前回までのブート時に、ブート中のプログラムの動作をトレースして、ハード・ディスク・ドライブ(HDD)に対するファイルのアクセス状況を調べておき、その結果に基づいて次回以降のブート時に所定のファイルをメイン・メモリのキャッシュ領域に先読みしておくという機能である。アクセス・ログはファイルごとに記録されて所定のディレクトリに格納される。
【0004】
各ファイルには、それぞれのプログラムごとのHDDに対するアクセス・パターンのデータが記録されており、ブート時にはこのアクセス・ログに基づいてファイルがメイン・メモリに先読みされる。近年のWindows(登録商標)のオペレーティング・システム(OS)は、さらに特許文献1のプリフェッチングを発展させたスーパーフェッチ(SuperFetch)という機能を実装している。スーパーフェッチでは、ユーザが操作していない時間帯にウィルス検索やディスクの最適化が行われてアプリケーションが使用するメモリ・ページがキャッシュ領域からスワップ・アウトされる問題に対処するために、ウィルス検索が終了した後にスワップ・アウトされたメモリ・ページをスワップ・インする。
【0005】
特許文献2は、本発明の発明者により発明され本発明の出願人に譲渡されたブート時間を短縮する技術を開示する。同文献の発明は、オンデマンドで実行してもコンピュータの動作に影響がでないようなブート・ファイルのプロセスをブート中に一旦サスペンドし、ブート完了後にオンデマンドでレジュームさせる。その結果、ブートの遅延や停滞などの問題がでないようにしながら、ロードされた後に自動的に実行されるブート・ファイルの数を減らしてブート時間の短縮を図ることができる。
【0006】
特許文献3は、他のワーキング・セットの未使用ページを利用し主記憶装置上にキャッシュ・メモリ空間を動的に設定するワーキング・セット方式の仮想記憶管理システムについて開示する。特許文献4は、メモリ・ページをページ・アウトするプライオリティをユーザが設定または変更してワーキング・セットをジョブ単位で制御する技術を開示する。非特許文献1は、Windows(登録商標)におけるワーキング・セットの管理方法について記載している。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】米国特許第6633968号公報
【特許文献2】特開2011−103093号公報
【特許文献3】特開平5−20201号公報
【特許文献4】特開平10−31624号公報
【非特許文献】
【0008】
【非特許文献1】インサイドMicrosoft Windows(登録商標)第4版、上、マイクロソフト公式解説書、日経BPソフトプレス
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1に記載されたプリフェッチングは、HDDに対するI/Oアクセスの頻度を減らしてシーク時間の短縮を図ることでブート時間を短縮し、特許文献2の発明はブート中には必要がないブート・ファイルの実行を停止して必要なブート・ファイルに割り当てるプロセッサの時間を長くすることでブート時間を短縮する。両者は異なる原理でブート時間を短縮するため、同一のシステムに併存したときにそれぞれの機能を果たすことができる。
【0010】
しかし、プリフェッチングの際に先読みできるブート・ファイルの量は、メイン・メモリ上のキャッシュ領域の制限を受ける。OSはブート・ファイルをロードする際に生成されるプロセスがどれだけのワーキング・セットを必要とするかわからないため、プロセスごとに異なるワーキング・セット・サイズを設定してキャッシュ領域を増大させることはできない。非特許文献1には、OSは新たに生成されるすべてのプロセスに対してディフォルトで定めた一定の最大ワーキング・セット・サイズを割り当てることが記載されている。
【0011】
この場合プロセスは、最大ワーキング・セット・サイズの範囲で新たなメモリ・ページを使用することができる。ページ・フォルトが発生したときは、OSはワーキング・セットが割り当てられていないフリー・メモリ領域の容量(フリー・メモリ量)を調べる。OSは、フリー・メモリ量が多い場合は、ディフォルトで設定した最大ワーキング・セット・サイズ以上の領域にメモリ・ページを追加し、フリー・メモリ量が少ない場合はLRU(Least Recently Used)のアルゴリズムで選択したメモリ・ページをディスク・ドライブの中に構成した仮想メモリにスワップ・アウトして空いた領域に新たに必要となるメモリ・ページを割り当てる。
【0012】
さらにOSは、フリー・メモリ量が逼迫してページ・フォルトが頻発したり、新たなプロセスに対する物理メモリが不足したりしたときには、ワーキング・セット・トリミングという処理を開始して必要なプロセスに対する物理メモリ量を確保する。ワーキング・セット・トリミングでは、最小ワーキング・セット・サイズを超えているプロセス、および長時間アイドル状態にあるプロセスといったような判断基準で全体のプロセスに対して優先順位を設定して、優先順位の高いプロセスから物理メモリ上のメモリ・ページを削除する。
【0013】
このときOSは、新たに生成されたプロセスに必要な物理メモリ量の範囲またはページ・フォルトの許容範囲といったような最低限の基準でメモリ・ページを削除する。このようにOSは、ページ・フォルトの発生状況と現在のフリー・メモリ量に応じてすべてのワーキング・セットを対象にしてプロセス全体に対する物理メモリの利用効率が最適になるように管理する。
【0014】
ところでOSはフリー・メモリ領域の一部をプリフェッチングのキャッシュ領域として利用する。キャッシュ領域の容量はフリー・メモリ量が大きいほど大きくなるため、より多くのブート・ファイルを先読みすることができる。しかし、OSはプロセスの内容を判断できないため、個々のプロセスの個性を無視して全体としてページングが最適になるように最大ワーキング・セット・サイズを制御せざるを得ないため、ワーキング・セット・トリミングでは、積極的にフリー・メモリ量を増大することができない。
【0015】
特許文献2の発明では、ブート・ファイルをロードするプロセスの中から選択したブート時の重要性が低い一部のプロセスをサスペンドすることができる。しかしサスペンドしたプロセスにも一定のサイズのワーキング・セットが割り当てられ、フリー・メモリ量を低下させる原因になっている。サスペンドしたプロセスはレジュームするまで実行されることはない。したがって、サスペンドしたプロセスに割り当てたワーキング・セットを構成するメモリ・ページを仮想メモリにスワップ・アウトしてワーキング・セット・サイズを縮小してもブート処理に支障をきたすことはない。
【0016】
そこで本発明の目的は、メイン・メモリのフリー・メモリ量を増加させる方法を提供することにある。さらに本発明の目的は、ブート時間を短縮する方法を提供することにある。さらに本発明の目的は、そのような方法を実現するコンピュータ・プログラムおよびそのような方法を実行するコンピュータを提供することにある。
【課題を解決するための手段】
【0017】
本発明にかかるコンピュータは、メイン・メモリとオペレーティング・システムを含むブート・ファイルを格納した記憶装置を備える。コンピュータがブートを開始すると、ブート・ファイルをメイン・メモリにロードするプロセスが生成される。オペレーティング・システムは生成されたプロセスに対してディフォルトで設定した所定のサイズのワーキング・セットを割り当てる。ブート・ファイルをロードするプロセスから選択された所定のプロセスがサスペンドされる。サスペンドしたプロセスのメモリ・ページをスワップ・アウトしてワーキング・セットのサイズを縮小する。
【0018】
本発明はこのような構成を備えることにより、ブートに影響を与えないようにしながらオペレーティング・システムがワーキング・セット・トリミングよりも積極的にワーキング・セットのサイズを縮小してフリー・メモリ量を増大させることができる。サスペンドする所定のプロセスは、ユーザの操作に基づいてオンデマンドで実行されるプロセスを含むようにすることができる。さらに所定のプロセスは、レジストリに登録されているすべてのプログラムの中でブート時に実行されないプログラムをロードするプロセスを含むようにすることができる。
【0019】
サスペンドされたプロセスのメモリ・ページは、レジュームするまでの間はすべてスワップ・アウトしてもページ・フォルトを発生することがないので、ワーキング・セットのサイズはオペレーティング・システムが許容する範囲でできるだけ小さいことが望ましい。本発明では縮小されたワーキング・セットのサイズは、オペレーティング・システムがプロセスに対してディフォルトで設定する最低ワーキング・セット・サイズとすることもできる。さらにオペレーティング・システムが許容すれば、ゼロにすることもできる。
【0020】
オペレーティング・システムが縮小されたワーキング・セットのサイズに応じてメイン・メモリに構成されたキャッシュ領域のサイズを拡大すれば、キャッシュ領域をより効果的に利用することができる。オペレーティング・システムは、キャッシュ領域をブート・ファイルの先読みに利用したり、ブート後のファイルの読み出しに使用したりすることができる。
【0021】
サスペンドしたプロセスのメモリ・ページは、サスペンド中はプロセッサから読み出されないためページ・アウトしておいてもよいが、実行時にはページ・フォルトが発生しないようにすることが望ましい。本発明では、サスペンドしたプロセスがレジュームする前またはプロセッサがアクセスする前にスワップ・アウトしたメモリ・ページをスワップ・インすることができる。スワップ・インをする際には、縮小したワーキング・セットのサイズを最大ワーキング・セット・サイズまで拡大することができる。
【0022】
スワップ・インのタイミングは、プロセスがサスペンドしてから一定の時間が経過したときまたはブートが完了したときとすることができる。あるいは、スワップ・インのタイミングは、サスペンドしていた呼び出し先のプロセスのメモリ・ページについては呼び出し元のプロセスと呼び出し先のプロセスの関係を記述したプロセス間通信リストを参照して、呼び出し元のプロセスが生成されたときとすることができる。ウインドウ・ハンドルを備えるプロセスに対してウインドウ・メッセージを送ることで、ウインドウ・メッセージを処理する所定の範囲のコードをスワップ・インすることができる。この場合はスワップ・インのタイミングを、プロセスがサスペンドした直後とすることができる。
【発明の効果】
【0023】
本発明により、メイン・メモリのフリー・メモリ量を増加させる方法を提供するこができた。さらに本発明により、ブート時間を短縮する方法を提供することができた。さらに本発明により、そのような方法を実現するコンピュータ・プログラムおよびそのような方法を実行するコンピュータを提供することができた。
【図面の簡単な説明】
【0024】
【図1】本実施の形態にかかるコンピュータ・システムの主要なハードウエア構成を示す機能ブロック図である。
【図2】本実施の形態にかかる動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。
【図3】コンピュータで生成されたプロセスが消滅するまでの間にプロセス管理部で制御されて遷移する様子を示す図である。
【図4】メイン・メモリ上でワーキング・セットを制御する様子を説明する図である。
【図5】RPLを作成する手順を示すフローチャートである。
【図6】実行可能な全プロセスからRPLを作成するために不要なプロセスを削除する様子を示す図である。
【図7】RPLを利用してメイン・メモリのフリー・メモリ量を拡大する手順を示すフローチャートである。
【発明を実施するための形態】
【0025】
[コンピュータ・システムの構成]
図1は、本実施の形態にかかるコンピュータ・システム10の主要なハードウエア構成を示す機能ブロック図である。コンピュータ・システム10は、それぞれバス23に接続されたCPU11、メイン・メモリ13、入力デバイス15、ハード・ディスク・ドライブ(HDD)17、液晶表示装置(LCD)19、およびBIOS_ROM21などを含んでいる。HDD17は、ブート・ファイルを格納したブート・ディスクである。HDD17はまた、物理メモリとしてのメイン・メモリ13に仮想メモリを提供する記憶領域を含んでいる。これらのハードウエア・デバイスの機能は、本実施の形態に関しては周知であるため詳しい説明は省略する。
【0026】
[定義]
最初に本明細書において使用する用語を定義する。ブート・ファイルとは、電源が投入されてコンピュータが起動されてから自動的にメイン・メモリにロードされるプログラム、プログラム・モジュール、コードまたはファイルなどをいう。ブート・ファイルは、ロードされてから自動的に実行されるプログラムおよびオンデマンドで実行されるプログラムを含む。したがって、実行時にオンデマンドでロードされるプログラムはブート・ファイルには含まない。
【0027】
ここにブートの完了は、コンピュータ全体のCPU使用率が所定値まで下がったことで判断することができる。コンピュータ全体のCPU使用率Yは、アイドル・プロセスのユーザ・モード時間をUi、アイドル・プロセスのカーネル・モード時間をKi、経過時間をEtとしたときに次の式で所定のプログラムが計算することができる。
Y=(1−(Ui+Ki)/Et)×100%
【0028】
プロセスの実行とは、プリエンプティブなマルチタスキングを行うOSにおいて、当該プログラムを実行するためのプロセスが実行状態と実行可能状態の間を遷移している状態をいう。プロセスのサスペンド状態とは、当該プログラムを実行するためのプロセスが特定のAPI関数が呼び出されることで実行状態または実行可能状態から外れ、レジュームするための特定のAPI関数が呼び出されない限り実行可能状態に遷移しない状態をいう。
【0029】
未実行のプロセスとは、プログラムをロードするための未だ生成されていないプロセスおよびロードされているプログラムを実行するために未だ生成されていないプロセスをいう。サスペンド状態のプロセスも未実行のプロセスもともに実行されないが、サスペンド状態のプロセスは、一旦は実行されており他のプロセスから呼び出されたときにレジュームすることができる点で、未実行のプロセスと区別することができる。
【0030】
[ソフトウエアの構成]
図2は、本実施の形態にかかる動作環境を構築するためのソフトウエアの構成を示す機能ブロック図である。OSはマルチタスクに対応し、ブート時にメイン・メモリ13のキャッシュ領域を利用してブート・ファイルの先読みを行い、かつフリー・メモリ量の大きさに応じてキャッシュ領域を調整する。このようなOSとしてWindows(登録商標)を例示することができる。図2に示した各構成要素の機能は、HDD17に格納されブート時にメイン・メモリ13にロードされたプログラムがCPU11で実行されることによりコンピュータ10において実現される。
【0031】
図2において、ブート・システム100以外の要素は周知である。システム・プロセス51は、セッション・マネージャ、Winlogon、サービス・コントロール・マネージャなどを含む。サービス53は、ユーザの操作を介さないでバックグラウンドで動作するプロセスで、Service.exe、SpoolSv.exe、WinMgt.exeなどを含む。アプリケーション55は、ユーザ・アプリケーション、エクスプローラ、およびタスク・マネージャなどを含む。
【0032】
サブシステム57は、環境サブシステム・プロセス、カーネルモード・デバイス・ドライバ、サブシステムDLLなどで構成されている。NTDLL.DLL59は、サブシステムDLLを使用するための関数を提供するサポート・ライブラリで、ユーザ・モードから呼び出すことができるインターフェース機能(System Service Dispatch Stub)と、サブシステムDLLが使用する内部サポート関数で構成されている。カーネル61は、周知のOSの基本コンポーネントで、プロセス管理部63、ファイル・システム71、構成マネージャ73、共有資源管理部75、ハードウエア抽象化層77、およびメモリ・マネージャ81などを含んでいる。
【0033】
プロセス管理部63は、プロセス・リスト65およびプロセス・スケジューラ67を含み、プロセスとスレッドの生成、実行、待機およびサスペンドなどの管理を行う。プロセス・リスト65は、コンピュータ10に現在生成されているプロセスのリストを提供する。プロセス・スケジューラ67は、生成されたプロセスを所定のアルゴリズムに基づいて実行状態(RUN)と実行可能状態(WAIT)との間で遷移させてプリエンプティブなタスク・スイッチを行う。
【0034】
ファイル・システム71は、FAT(File Allocation Table)およびディレクトリを作成してHDD17に関するファイルの記録、読み取り、削除、または移動などを管理する。ファイル・システム71は、最近参照されたHDD17のデータをメイン・メモリ13に先読みして、後続のI/O処理を高速化するキャッシュ・マネージャを含む。キャッシュ・マネージャは、いずれかのブート・ファイルをロードする際に、前回のブートまでに認識していたそれ以降にロードされるブート・ファイルをメイン・メモリ13のキャッシュ領域に先読みする。ファイル・システム71は、ブート・ファイルをロードする際にキャッシュ領域を参照し、キャッシュ領域にブート・ファイルが先読みされている場合はそこからロードする。
【0035】
構成マネージャ73は、システム・レジストリとスタート・アップを管理する。システム・レジストリには、ブート時にユーザの操作を介在しないで自動的に実行するプロセスの情報が登録されている。スタート・アップにはユーザが起動の実行または停止を選択したOSのコンポーネントが登録されている。レジストリおよびスタート・アップに登録されたプロセスは、OS Shell Startupによりブート時に自動起動(AutoRun)される。
【0036】
共有資源管理部75は、プロセス間通信に利用する共有リソースを管理する。プロセス間通信とは、固有の仮想アドレス空間を備える各プロセスの間で情報のやりとりを行うための仕組みで、メッセージ・キュー、ソケット、パイプ、共有メモリなどのさまざまな方法を採用することができる。共有リソースは、たとえば、CreatePipe関数で形成されたメイン・メモリ13の共有領域に、あるプロセスがWriteFile関数を呼んで書き込んだデータを他のプロセスがReadFile関数を呼んで読み取るといったようにして構築することができる。ハードウエア抽象化層77は、ハードウエア・プラットフォームの差異を吸収し抽象化する。
【0037】
メモリ・マネージャ81は、プロセスに提供する仮想アドレスをメイン・メモリ13の物理アドレスに変換したり、当該プロセスに帰属するスレッドが要求したり参照したりするメモリ・ページについて、メイン・メモリ13とHDD17の仮想メモリ領域との間でページング処理をしたりする。メモリ・マネージャ81は、ワーキング・セットのサイズを設定したり、フリー・メモリ量のサイズおよびメモリ・ページに対するページ・フォルトの発生状況に基づいてワーキング・セットのサイズをダイナミックに変更したりする。メモリ・マネージャ81は、プロセス制御部103から要求されプロセスのワーキング・セットのサイズをダイナミックに変更する。
【0038】
ブート・システム100は、ブート管理部101、プロセス制御部103、実行プロセス・リスト105、ラン・プロセス・リスト(RPL)107、プロセス間通信監視部109、プロセス間通信リスト111、およびRPL管理部113で構成されている。ブート管理部101は、ユーザ・アプリケーション55の一部を構成し、ユーザに対して、実行されるプロセスに関する情報の提供とRPL107を編集するための設定画面を提供する。
【0039】
プロセス制御部103は、RPL107に登録されていないプロセスをプロセス・リスト65から検出したときには、API関数を呼び出してプロセス・スケジューラ67を通じて当該プロセスをサスペンドさせる。プロセス制御部103はプロセス間通信監視部109から通知があったプロセスについてAPI関数を呼び出してサスペンドしていたプロセスをレジュームさせる。プロセス制御部103は、サスペンドしていたプロセスを実行させるプロセスを検出したときには、それをレジュームさせる。さらにプロセス制御部103は、サスペンドしてから一定の時間が経過したプロセスをレジュームさせたり、ブートが完了したときにサスペンドしていたプロセスをレジュームさせたりすることができる。
【0040】
プロセス制御部103は、所定のプロセスをサスペンドさせたときに、メモリ・マネージャ81に、当該サスペンドさせたプロセスのワーキング・セット・サイズを縮小するように要求する。プロセス制御部103は、サスペンドさせたプロセスをレジュームする際に、縮小したワーキング・セット・サイズをディフォルトで設定した最大ワーキング・セット・サイズまで拡大するようにメモリ・マネージャ81に要求することができる。
【0041】
実行プロセス・リスト105は、当該ブートにおいてコンピュータ10で実行されたすべてのプロセスのリストである。実行されたプロセスは、実行状態と実行可能状態の間を遷移する。実行プロセス・リスト105は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の1週間の間に一度も実行されないプロセス、および直近の10回のブートで一度も起動されないプロセスなどの種別ごとのリストを構成することができる。RPL107は、ブート・ファイルをロードする複数のプロセスの中で実行を許可するプロセスまたはサスペンドしないプロセスの識別子を登録したリストである。RPL107を作成する方法は、図5を参照して詳しく説明する。
【0042】
プロセス間通信監視部109は、共有資源管理部75を通じて行われるプロセス間通信を監視して、呼び出し元のプロセスと呼び出し先のプロセスからなるプロセスの依存関係をプロセス間通信リスト111に登録する。プロセスの依存関係とは、たとえばプロセスAが実行されるときにプロセスB、C、Dを呼び出すときはプロセスAとプロセスB、C、Dの実行の連携を示す情報である。
【0043】
プロセスの依存関係を登録しておくことで、後に説明するようにプロセスB、C、Dがサスペンドされているときに、プロセスAが実行されたときには共有資源管理部75がプロセスB、C、Dを呼び出すプロセス間通信が行われたことを検出しないでも、いち早くプロセスB、C、Dをレジュームさせて実行時間を短縮することができる。RPL管理部113は、ユーザによるコンピュータ10の実際の使用を通じてOSをブートさせるのに最低限必要なプロセスをRPL107に登録する作業をする。
【0044】
[プロセス遷移]
図3は、コンピュータ10で生成されたプロセスが消滅するまでの間にプロセス管理部63で制御されて遷移する様子を示す図である。プロセスはプロセス制御ブロック(PCB)というプロセッサ状態、プロセスの優先度、タイム・スライス情報、プロセスID、およびデバイス情報などを含むデータ構造体である。プロセッサ状態は、CPU11がプロセスを中断したときのレジスタ、スタック、およびプログラム・カウンタなどの状態に関する情報でコンテキストともいう。
【0045】
プロセスの優先度は、プロセス間におけるコンテキスト・スイッチの優先順位を示す情報である。タイム・スライス情報は、タイム・スライスの初期値や残り時間に関する情報である。タイム・スライスとはプロセスがCPU11に対する一度の実行権を獲得したときに許される最大実行時間をいう。プロセスIDは、各プロセスに割り当てられた一意の番号である。デバイス情報は、当該プロセスに割り当てられたデバイスの識別情報である。なお、PCBには、OSにより異なるその他のさまざまな情報が含まれる。
【0046】
実行状態(RUN)は、現在プロセスがCPU11で実行されている状態であり、割り当てられたタイム・スライスを消費すると実行可能状態(READY)に移行する。実行可能状態(READY)は、プロセスが実行可能であり優先度の順番に実行されるのを待っている状態で、実行可能キューに登録されたPCBがプロセス・スケジューラ67により所定の順番でCPU11にディスパッチされる。実行待ち状態(WAIT)は、I/Oなどの何らかの条件が成立するまで自ら実行を中断する関数を呼んで実行を待っている状態である。サスペンド状態(SUSPEND)は、他のプロセスによって強制的に待ち状態にさせられた状態である。
【0047】
あるプロセスが他のプロセスを実行状態または実行可能状態からサスペンド状態に移行させたり、サスペンド状態からレジュームして実行可能状態に移行させたりするには、特定のAPI関数を呼び出して行うことができる。このとき、OSがプロセスを直接サスペンドまたはレジュームをするためのAPI関数を提供していない場合は、当該プロセスにより生成されたすべてのスレッドをサスペンドまたはレジュームの対象にしたAPI関数を呼び出すことでサスペンド/レジューム実現することができる。
【0048】
図4は、メイン・メモリ13に展開されたワーキング・セットとキャッシュ領域の関係を説明する図である。メモリ・マネージャ81は、各プロセスに対して連続するアドレスで構成された仮想アドレス空間を提供する。仮想アドレス空間のサイズは、CPU11のアーキテクチャに依存し、32ビットのCPUでは4Gバイトとなる。メモリ・マネージャ81はページング方式を採用してメイン・メモリを管理し、仮想アドレス空間を複数のページで構成する。図4には、3つの仮想アドレス空間201a〜201cを例示している。各仮想アドレス空間201a〜201cは、テキスト、データ、およびスタックの3つのセグメントを含んでいる。テキスト・セグメントには、実行ファイルを記憶している。
【0049】
メモリ・マネージャ81は、新たに生成されたプロセスに対してメイン・メモリ13上にワーキング・セットを割り当てる。ワーキング・セットは、メイン・メモリ13に常駐するメモリ・ページの集合で、プロセスを実行するスレッドはワーキング・セットの範囲であればページ・フォルトを発生させないでメイン・メモリ13を使用することができる。図4には、仮想アドレス空間201a〜201cに対応してワーキング・セット203a〜203cが割り当てられている。
【0050】
各ワーキング・セット203a〜203cは、仮想アドレス空間201a〜201cのセグメントに対応するセグメントを含む。それらのセグメントも、仮想アドレス空間201a〜201cのページと同じサイズのページで構成される。各ワーキング・セット203a〜203cにおけるテキスト・セグメントおよびデータ・セグメントを構成するメモリ・ページの配列は、仮想アドレス空間201a〜201cのように連続している必要はない。メモリ・マネージャ81はメイン・メモリ13に記憶したページ・テーブルにより、仮想アドレス空間201a〜201cの仮想アドレスとメイン・メモリ13上の物理アドレスをマッピングする。仮想アドレスから物理アドレスへの動的な変換は、CPU11に内蔵されたり独立して用意されたりしたメモリ管理ユニット(MPU)により行われる。
【0051】
メモリ・マネージャ81は新たに生成されたプロセスのワーキング・セットに対してディフォルト値としての最大ワーキング・セット・サイズと最小ワーキング・セット・サイズをバイト単位またはページ単位で設定する。HDD17は、ブート・ファイルのイメージを記憶する一般記憶領域211とページング・ファイルを記憶する仮想メモリ領域213を含む。
【0052】
特定のプロセスに対して割り当てられたワーキング・セットは、他のプロセスが利用することはできない。最大ワーキング・セット・サイズは当該プロセスが使用する物理メモリ量を決定する。最大ワーキング・セット・サイズと当該プロセスが実際に使用しているメモリ・ページとの差は未使用のメモリ・ページとなる。メモリ・マネージャ81は、新たなプロセスが生成されたり、フリー・メモリ量が逼迫したりしたような場合でも最小ワーキング・セット・サイズのメモリ・ページをメイン・メモリ13に必ず確保するが、それを越えたメモリ・ページはフリー・メモリ量の逼迫状況によりスワップ・アウトすることがある。
【0053】
メモリ・マネージャ81は、プロセスに属するスレッドが新たなメモリ・ページを要求するときに、未使用のメモリ・ページがある場合はそれを使用し、最大ワーキング・セット・サイズを超えるような場合は所定のアルゴリズムで使用中のメモリ・ページを仮想メモリ領域213にスワップ・アウトして、要求されたメモリ・ページを確保する。プロセスは、原則としてディフォルトのワーキング・セット・サイズの範囲で動作するが、より大きなワーキング・セットを必要とする場合は、メモリ・マネージャ81に要求することができる。
【0054】
プロセスは、通常、一旦拡大したワーキング・セット・サイズを縮小するようにメモリ・マネージャ81に要求するようなことはない。メモリ・マネージャ81は、メイン・メモリ13の容量が逼迫して新たなプロセスにワーキング・セットを割り当てることができないような場合には、LRUのアルゴリズムで強制的かつ緩やかにいずれかのワーキング・セットの最大ワーキング・セット・サイズを縮小する。
【0055】
最大ワーキング・セット・サイズが縮小される場合でも、プロセスには最小ワーキング・セット・サイズのメモリ・ページが確保される。キャッシュ領域205のサイズは、ファイル・システム71のキャッシュ・マネージャに対して割り当てられたワーキング・セット・サイズに相当する。メイン・メモリ13の全体からワーキング・セット203a〜203cとキャッシュ領域205を除いた記憶領域はフリー・メモリ領域207に相当する。
【0056】
メモリ・マネージャ81は、メイン・メモリ13の容量と各ワーキング・セットの最大ワーキング・セット・サイズの合計との差に相当するフリー・メモリ領域207の範囲でキャッシュ領域205のサイズを設定する。すなわち、キャッシュ領域205はフリー・メモリ領域207の一部を構成し、メモリ・マネージャ81は、フリー・メモリ領域207のサイズが大きいほどキャッシュ領域205のサイズを増加させる。
【0057】
キャッシュ・マネージャは、いずれかのブート・ファイルを一般記憶領域211からロードする際に、それ以後にロードするブート・ファイルをキャッシュ領域205に先読みする。ブート・ファイルが先読みされたキャッシュ領域205には、一般記憶領域211に記憶されていたファイル・イメージと同じ構造のデータが記憶される。キャッシュ領域205に先読みされたブート・ファイルは、その後ワーキング・セット203a〜203cにロードされた後に消去されるが、HDD17に対する一度のI/Oアクセスで先読みできるブート・ファイルの量はキャッシュ領域205の容量の範囲内に制限される。
【0058】
ファイル・システム71は、プロセスが実行されて一般記憶領域211からブート・ファイルをロードする際に、キャッシュ領域205に目的のブート・ファイルがあれば、キャッシュ領域205からロードしてワーキング・セット203a〜203cの中にメモリ・イメージとして記憶する。メモリ・イメージは、ライブラリがリンクされた実行可能なファイルである。所定の量のブート・ファイルをキャッシュ領域205に一度のI/Oアクセスで読み込んでから各ワーキング・セット203a〜203cにロードする場合は、ブート・ファイルごとにI/Oアクセスをしてワーキング・セット203a〜203cにロードする場合よりも、I/Oアクセスの頻度が少なく、かつ、HDD17のヘッドのシーク時間も短縮できるため短時間でロードを完了することができる。
【0059】
ワーキング・セット203a〜203cのサイズを縮小することができれば、フリー・メモリ領域207のサイズが増加し、その結果キャッシュ領域205を拡大することができるためロード時間の短縮につながる。しかし、すべてのプロセスのワーキング・セット・サイズを縮小したのでは、当該プロセスが実行されるときにページ・フォルトが頻発してページング処理のためのI/Oアクセスによるオーバーヘッドが発生しむしろブート時間が遅延することになる。本実施の形態では、サスペンドしたプロセスに帰属するワーキング・セットについては、できるだけ多くのメモリ・ページをスワップ・アウトして最大ワーキング・セット・サイズを縮小することで、ページ・フォルトの発生を抑制しながらキャッシュ領域205の拡大を図るが、その手順については図5〜図7を参照して説明する。
【0060】
[RPLを作成する手順]
本実施の形態では、ブート・ファイルをロードするプロセスに対してRPL107に基づいてサスペンド/実行の制御をする。ブート・ファイルのなかで、オンデマンドで実行するプログラムおよびオンデマンドで実行するプログラムからだけ呼び出されるプログラムはブート時にサスペンドしておき、ブート後にオンデマンドでレジュームさせることでブート時間の短縮を図りながら、サスペンドしたプログラムの実行を保証する。ここにオンデマンドとは、ユーザの操作に基づいて実行されること、およびユーザの操作に基づいて実行されるプログラムから呼び出されて実行されることを意味しており、自動的に実行されることと対照的である。表1には本実施の形態でサスペンド/レジュームの対象となるプログラムを示す。
【0061】
【表1】

【0062】
図2に示したプログラムは、表1のように5つのグループに分類することができる。表1では、5つのグループについてのブート・ファイルに含まれるか否かの起動区分、サスペンド/実行の制御対象になるか否かの区分を示している。起動区分が自動のプログラムはブート・ファイルに相当し、オンデマンドのプログラムはブート・ファイルではない。第1のグループに属するカーネルは、コンピュータ10を動作させるために必須のプログラムで構成されており、サスペンド/実行の制御対象から除外する。したがって、カーネルはブート時にOSで指定された順番でロードされ実行される。第2のグループに属するOSのサービス、OSのデバイス・ドライバ、およびサブシステムの中で、ブート・ファイルに含まれて自動的にロードされるように設定されているプログラムはサスペンド/実行の制御対象とする。
【0063】
また、第3のグループに属するOSのサービス、デバイス・ドライバ、およびサブシステムの中で、オンデマンドで実行されるように設定されているプログラムはブート・ファイルではないためサスペンド/実行の制御対象から除外する。第4のグループに属するアプリケーション、アプリケーション用のサービス、および後から導入されたデバイス・ドライバの中で自動的にロードされるように設定されているプログラムはサスペンド/実行の制御対象とする。第5のグループに属するアプリケーション、アプリケーション用のサービス、および後から導入されたデバイス・ドライバの中で、オンデマンドで実行されるように設定されているプログラムはブート・ファイルでなないためサスペンド/実行の制御対象から除外する。
【0064】
図5は、RPLを作成する手順を示すフローチャートである。RPL107は、ブート・ファイルをロードするプロセスのサスペンド/実行を制御するためにプロセス制御部103により参照される。ブロック301では、メイン・メモリ13にRPL107をロードする。RPL107は登録されるプロセスが少ないほど短時間でブートを完了して特定のアプリケーションの実行環境を構築することができるが、コンピュータの動作に必要なプロセスをRPL107から除外すると動作が停止したり不安定になったりあるいはブートが遅延したりするので、登録するプロセスを適切に選択する必要がある。
【0065】
本実施の形態では、コンピュータ10の使用に基づいて登録すべきプロセスを抽出しながらRPL107を作成する。最初にプロセス制御部103は、HDD17に格納され構成マネージャ73のレジストリに登録された実行可能なプログラムに対応するすべてのプロセスをRPL107に登録する。ブロック303では、メイン・メモリ13にいずれのプロセスの依存関係も登録していない空白のプロセス間通信リスト111をロードする。
【0066】
ブロック305では、コンピュータ10に電源を投入してブートを開始する。図5の手順を繰り返すことでRPL107からはサスペンドの対象となるプロセスが削除される。ブロック307では、ブート中に生成されたプロセスに対してRPL107に基づいてプロセス制御部103によりサスペンド/実行の制御が行われるが、その詳細は図7を参照して説明する。
【0067】
ブートが完了するとブロック309では、プロセス制御部103が今回のブート時間が前回のブート時間よりも所定時間以上長くなったか否かを判断する。ブートを複数回実行して図5の手順を繰り返すと、当初はブート時間が短くなり、ある時点でブート時間が長くなることが予想される。このときブート時間が長くなったということは、本来は登録しておくべきプロセスがRPL107から削除されてブート時にサスペンドされたことを意味する。
【0068】
ブート時間が遅延していない場合はブロック311に移行する。ブロック311では、ユーザがコンピュータを使用し始めるとブート後に新たに実行されるアプリケーションなどのブート・ファイル以外のプログラムに関連するプロセスが発生する。そのプロセスは、ユーザの操作によりプログラムを実行するためのプロセスおよび当該プロセスから呼び出されて実行されるプロセスを含んでいる。ブロック313ではプロセス制御部103はその時点までに実行されたすべてのプロセスをプロセス管理部63から取得して実行プロセス・リスト105に登録する。
【0069】
ブロック315では、プロセス間通信監視部109は、共有資源管理部75からプロセス間通信に関する情報を取得し、呼び出し元のプロセスと呼び出し先のプロセスからなる依存関係がプロセス間通信リスト111に登録されているか否かを判断する。登録されていない場合は、ブロック317でプロセス間通信監視部109は、プロセスの依存関係をプロセス間通信リスト111に登録する。
【0070】
ブロック319では、コンピュータ10に入力デバイス15を通じてシャットダウンの指示が行われる。シャットダウンの指示に応じてRPL管理部113は、ブロック321でRPL107から削除するプロセスを選択する。RPL管理部113はHDD17に格納され構成マネージャ73のレジストリに登録された実行可能なすべてのプログラムに対応するプロセスのリストを取得し実行プロセス・リスト105と対比して把握したいまだ実行されていない未実行のプロセスをRPL107から削除する。
【0071】
未実行のプロセスは、ロードされたプログラムに対応するプロセスとロードされていないプログラムに対応するプロセスを含む。さらにRPL管理部113は、プロセス間通信リスト111と構成マネージャ73を参照し、自動起動の対象としてレジストリまたはスタート・アップに登録されておらず、かつ呼び出し元のプロセスがOSのエクスプローラである呼び出し先のプロセスは、ユーザ操作に基づいて実行されたプログラムにより呼び出されたプログラムを実行するためのプロセスであると判断してそのようなプロセスをRPL107から削除する。
【0072】
このようなプロセスは、自動的に実行されるブート・ファイルではないため、RPL107に登録する必要はない。したがって、RPL107に残るプロセスは、実行可能な全プロセスの中で主としてOSの仕組みとしてブートされて実行されたプログラムのプロセスおよび当該プロセスから呼び出されて実行されたプロセスとなり、ユーザの操作に基づいてオンデマンドで実行してもコンピュータ10の動作に支障がないようなプロセスはRPL107から削除される。
【0073】
このとき実行可能な全プロセスからRPL107を作成するために所定のプロセスを削除する様子を図6に示す。図6には、今回のブート時にレジストリに登録されている実行可能なすべてのプログラムに対応するプロセスが、未実行のプロセス、自動起動の対象外でユーザ操作に基づいてオンデマンドで実行されたプロセス、およびその他の実行されたプロセスで構成されることが示されている。ここでは「その他の実行されたプロセス」がRPL107に登録される。
【0074】
ブロック309で今回のブート時間が遅い場合は、今回のブートに使用したRPL107から削除された重要なプロセスがサスペンド状態になって実行できない状態が予想される。ブロック320では、RPL管理部113は前回のブートから今回のブートまでの間にRPL107から削除したプロセスをRPL107に復帰させる。そして、ブロック321ではRPL管理部113はこのようにして復帰させたプロセスは、次回以降のブートでは削除の対象から外すようにすることができる。なお、ユーザはブート管理部101を通じて、所定の数のOSのコア・プロセスを予めRPL107から削除することを禁止するプロセスとして設定しておくこともできる。
【0075】
ブロック323では、ブート管理部101は所定の回数だけブートが行われたか否かを判断する。所定の回数は、Webサイトの閲覧、文書の作成、画像データの編集あるいは動画の再生といったようなユーザがコンピュータを利用する可能性のある動作環境をすべて含むようにして決定することが望ましい。所定の回数のブートが完了した場合は、RPL107にはユーザのいかなる使用環境に対しても対応できるブートをするのに最低限必要なプロセスが登録され、電源起動後はRPL107を使用してサスペンド/実行の制御をすることでそのような動作環境に短時間で到達することができる。ブロック325でRPL管理部113はRPL107の編集を終了し、プロセス制御部103は編集されたRPL107を使用して次回のブート時のプロセス制御を実行する。プロセス制御の方法については、図7を参照して説明する。
【0076】
ブロック327ではさらにRPL107の編集を続けるために、コンピュータ10をシャットダウンした後に次回のブートが行われる。そして、ブロック329ではコンピュータ10に新たなプログラムが導入されることもある。RPL管理部113は、RPL107の編集が終了したのちに新たに導入されたプログラムおよびそのプログラムからだけ呼び出されるサービス・プログラムはすべてRPL107に登録しないようにする。
【0077】
あるいは、RPL管理部113は、コンピュータ10にOSが導入された後に導入されたすべてのプログラムをRPL107に登録しないようにしてもよい。そのようなプログラムは、サスペンドしてもそれまで正常に動作していたOSのブートに支障をきたすことはなく、オンデマンドで実行すればよいからである。次回のブートでブロック329からブロック301に戻ることで、RPL管理部113は次回の動作環境の元でRPL107の編集を行う。
【0078】
[RPLを使用してフリー・メモリ量を増加させる手順]
図7は、図5の手順に従って作成したRPL107を利用してメイン・メモリ13のフリー・メモリ量を増加させる手順を示すフローチャートである。ブロック401ではコンピュータ10に電源が投入されて図5の手順で前回のブートまでの間に作成したRPL107とプロセス間通信リスト111がメイン・メモリ13にロードされる。RPL107には、ブート時に実行を許可するプロセスのリストが登録されている。プロセス間通信リスト111には、前回のシャットダウンまでの間にプロセス間通信を行った呼び出し元のプロセスと呼び出し先のプロセスの依存関係を示すリストが登録されている。
【0079】
最初にBIOS_ROM21に格納されているBIOSのPOST(Power On Self Test)といわれる初期化プログラムがメイン・メモリ13に読み出されて実行される。初期化プログラムは、ブート・デバイスを診断したり初期化したりする。つぎにBIOSはブート・ファイルが格納されているHDD17を探す。ブート・ファイルは表1のグループ1、2、4のプログラムで構成されている。
【0080】
BIOSは、HDD17の先頭セクタに格納されているMBR(Master Boot Record)をメイン・メモリ13にロードしてそれに制御を移す。MBRはディスクからブート可能なパーティションを探してその先頭セクタ(ブート・セクタ)にあるブート・ストラップ・ローダをメイン・メモリにロードしてそれに制御を移す。その後ブート・ストラップ・ローダにつづいてグループ1、2、4のプログラムが所定の順番でメイン・メモリ13に読み出される。
【0081】
プリエンプティブなマルチタスキングを行うOSは、ブート時もプリエンプティブなタスク・スイッチを行うようになっている。OSはブート時にHDD17からOSのプログラムを自動的にロードするために複数のプロセスを生成する。また、OSのエクスプローラもスタート・アップやレジストリに登録されたプログラムを自動的にロードするためのプロセスを生成する。プロセス・リスト65には、API関数を実行して生成されたプロセスのプロセスIDが書き込まれる。
【0082】
生成されたプロセスは、プロセス・スケジューラ67により実行可能状態と実行状態の間で遷移しながら実行され、タイム・スライスごとに対応するプログラムのコードをロードしていく。プログラムはロードされると自動的に実行を開始したり、ロードされた状態で他のプロセスから呼び出されるのを待っていたりする。ブートの途中段階でブート・システム100がロードされて実行される。
【0083】
プロセス制御部103は、ブート・ファイルをブートするためのプロセスの生成については何ら制御を加えない。したがって、すべてのブート・ファイルはロードするためのプロセスが生成されるので、プロセス間通信に必要な共有リソースを確保することができる。共有リソースを確保したプロセスは、サスペンドされている間に他のプロセスから呼び出されたときは、プロセス間通信の発生をトリガにしてレジュームさせることができる。
【0084】
ファイル・システム71は、ブート・ファイルをHDD17の一般記憶領域211からロードする際に、キャッシュ領域205を参照してそこに目的とするブート・ファイルが存在すればそこからロードする。キャッシュ領域205からのロードは、一般記憶領域211からのロードに比べてHDD17に対するI/Oアクセスのオーバーヘッドが少ないので短時間で完了することができる。ファイル・システム71は、キャッシュ領域205から読み取ったブート・ファイルは、キャッシュ領域205から消去して、他のブート・ファイルの先読みの領域として確保することができる。
【0085】
ファイル・システム71はいずれかのブート・ファイルを一般記憶領域211からロードする際に、キャッシュ領域205に余裕があるか否かを調べる。キャッシュ領域205に余裕があれば、前回のブートまでに調べておいたブート・ファイルのロードの順番を利用して、それ以降にロードされる可能性のあるブート・ファイルを一般記憶領域211からファイル・イメージとしてキャッシュ領域205に先読みしておく。
【0086】
ロードされたプロセスは、実行されて他のプロセスをさらにロードしたり、すでにロードされているプロセスを呼び出したりする。ロードされたプロセスの中には実行待ち状態に移行して、何らかのイベントが発生したり他のプロセスから呼び出されたりするまで実行されないプロセスも含まれる。メモリ・マネージャ81は、ロードのために生成されたすべてのプロセスに対してディフォルトで設定した所定のサイズのワーキング・セットを割り当てる。
【0087】
ワーキング・セットのサイズは、最大ワーキング・セット・サイズと最小ワーキング・セット・サイズで定義される。メモリ・マネージャ81は、フリー・メモリ領域207の一部にキャッシュ領域205を設定する。ブート・ファイルのプロセスは何ら制限を受けないで生成され、メモリ・マネージャ81はすべてのブート・ファイルのプロセスに対して同一サイズのワーキング・セットを付与するため、次第にフリー・メモリ領域207のサイズが低下しキャッシュ領域205のサイズも低下する。その結果、キャッシュ領域205に先読みできるブート・ファイルの量も制約を受ける。
【0088】
プロセス制御部103は、OSのプロセスが所定の数だけ生成された後に、ブロック403でRPL107を参照しながらプロセスの制御を開始する。プロセス制御部103は、RPL107に登録されたプロセスとプロセス・リスト65に記述されたプロセスを比較する。プロセス制御部103は、プロセス・リスト65の中にRPL107に登録されていないプロセスをみつけたときは、プロセス・スケジューラ67に対して特定の内部関数を実行して当該プロセスをサスペンド状態に遷移させる。
【0089】
サスペンド状態に遷移する時点のプロセスは、予定するプログラムのロードを完了しており実行を開始する直前か実行を開始した直後の状態になっている。サスペンド状態に遷移したプロセスは、以後、プロセス制御部103がレジュームさせるAPI関数を実行しない限りその状態を持続する。その結果、サスペンドされたプロセスは、生成されてからサスペンドされるまでの短い時間の間で割り当てられたタイム・スライス分だけ実行状態におかれる。
【0090】
プロセス制御部103は、プロセス・リスト65の中にRPL107に登録されたプロセスをみつけたときはなんら制御を加えない。したがって、RPL107に登録されたプロセスだけがスケジューラ67の制御により実行状態と実行可能状態の間を遷移して実行されブートが進行する。RPL107に登録されたプロセスの数はプロセス・リスト65に記述されたプロセスの数よりもはるかに少ないのでブート時間は短くなる。
【0091】
サスペンド状態のプロセスは、それが生成された時点でワーキング・セットに確保されたメモリ・ページをメイン・メモリ13に確保しておく必要がない。また、メモリ・ページをメイン・メモリ13に確保する必要がなければ、ディフォルトで設定されたワーキング・セットのサイズを縮小して、フリー・メモリ領域207の拡大を図ることができる。ブロック405でプロセス制御部103は、メモリ・マネージャ81にサスペンド状態に遷移しているプロセスに対してディフォルトで設定した最大ワーキング・セット・サイズを縮小するように要求する。
【0092】
ワーキング・セットの中で未使用のメモリ・ページはスワップ・アウトしてもレジュームしたときのプロセスの実行にただちに支障をきたすことはない。また、サスペンドしたプロセスがレジュームする前にスワップ・アウトしていたメモリ・ページをスワップ・インしておけば、すべてのメモリ・ページをスワップ・アウトしてもレジュームしたときのプロセスの実行が遅延することはない。
【0093】
さらにプログラムの中には、CPU11がアクセスしたときにページ・フォルトが発生しても実用上は問題にならないため、ブート時間の短縮を優先してレジュームする前にスワップ・インさせなくてもよいものがある。プロセス制御部103はOSが許す範囲で、最大ワーキング・セット・サイズをできるだけ縮小するようにメモリ・マネージャ81に要求する。たとえば、プロセス制御部103は、最大ワーキング・セット・サイズおよび最小ワーキング・セット・サイズをともにゼロまで縮小したり、最大ワーキング・セット・サイズが最小ワーキング・セット・サイズに一致するまで縮小したりするように要求する。
【0094】
要求を受けたメモリ・マネージャ81は、最大ワーキング・セット・サイズを縮小するために、未使用のメモリ・ページを優先して削除する。さらに使用しているメモリ・ページをスワップ・アウトする必要が生じた場合は、LRUのアルゴリズムで必要な量のメモリ・ページをスワップ・アウトしまたはすべてのメモリ・ページをスワップ・アウトしてから、内部関数を実行してワーキング・セット・サイズを縮小する。スワップ・アウトの可能なメモリ・ページまたはスワップ・アウトを認めるメモリ・ページの範囲は、OSのアーキテクチャおよび当該プログラムの宣言により異なる。ワーキング・セット・サイズが縮小するとフリー・メモリ領域207が拡大する。
【0095】
フリー・メモリ領域207のサイズが拡大したことに伴ってブロック407で、メモリ・マネージャ81はキャッシュ領域205のサイズを拡大する。ファイル・システム71は、キャッシュ領域205のサイズが拡大された後にいずれかのブート・ファイルをロードする際には、現在のキャッシュ領域205のサイズとブート・ファイルのサイズを確認して、可能な限りそれに続くブート・ファイルをキャッシュ領域205に先読みする。
【0096】
ファイル・システム71はブート・ファイルをロードする際に、ブート・ファイルがキャッシュ領域205に記憶されていればそこからロードし、そうでないときは一般記憶領域211からロードする。メモリ・マネージャ81は、ブート・ファイルをロードするプロセスに対して、キャッシュ領域205からロードされても一般記憶領域211からロードされても同じ構造のワーキング・セットを作成する。
【0097】
ブロック408では、ブートが完了する前またはブートが完了した後にアプリケーションなどを実行するために生成された特定のプロセス(呼び出し元のプロセス)が他のプロセス(呼び出し先のプロセス)を呼び出す。ブロック409でプロセス制御部103は、プロセス管理部63に呼び出し先のプロセスがサスペンドされているか否かを問い合わせる。呼び出し先のプロセスがサスペンドされていないときは、ブロック417に移行する。サスペンドされているときは、レジュームさせる必要があるのでブロック411に移行し、プロセス制御部103はプロセス間通信監視部109に呼び出し元のプロセスがプロセス間通信リスト111に登録されているか否かを問い合わせる。
【0098】
呼び出し元のプロセスが、プロセス間通信リスト111に登録されていると判断した場合は、プロセス制御部103はブロック413でプロセス間通信リスト111に記述された呼び出し元のプロセスに対応する呼び出し先のプロセスを、プロセス間通信を待たないでレジュームさせる。レジュームしたプロセスはプロセス・スケジューラ67により実行可能状態に遷移させられる。その結果プロセス間通信が発生してからレジュームさせる際のオーバーヘッドを費やさないでサスペンドされたプロセスを実行することができる。
【0099】
ブロック411でプロセス間通信リスト111に登録されていないプロセスが呼び出されたと判断した場合は、ブロック415でプロセス制御部103は、プロセス間通信監視部109が呼び出し先のプロセスに対するプロセス間通信の発生を認識したことをトリガにして特定の内部関数を実行し、プロセス・スケジューラ67に呼び出し先のプロセスをレジュームさせる。この場合は、ブロック413の手順に比べて、プロセス間通信の開始や共有資源管理部75へのアクセスのためにレジュームするまでの時間が長くなる。
【0100】
プロセスが実行可能状態に遷移しただけでは最大ワーキング・セット・サイズは拡大しないが、プロセスが追加のメモリ・ページを要求する場合には、メモリ・マネージャ81はディフォルトで設定した最大ワーキング・セット・サイズまで追加のメモリ・ページを割り当てる。レジュームしたプロセスに帰属するワーキング・セットに含まれるメモリ・ページはスワップ・アウトしているため、CPU11が当該メモリ・ページにアクセスするときにはページ・フォルトが発生する。
【0101】
これを防ぐためにサスペンドしたプロセスがレジュームする前に、またはレジュームの際にスワップ・インすることが望ましい。ブロック417でプロセス制御部103は、サスペンドしたときにスワップ・アウトしたメモリ・ページをスワップ・インするようにメモリ・マネージャ81に要求する。スワップ・インのタイミングは、プロセスがサスペンドしてからレジュームするまでの間であればいつでもよいが、スワップ・インするとワーキング・セット・サイズが増加してフリー・メモリ量が減少するためできるだけ当該プロセスがレジュームする直前に行うことが望ましい。
【0102】
スワップ・インのタイミングは、ブロック413で説明したようにプロセス間通信リスト111に記述された呼び出し元のプロセスが呼び出されて呼び出し先のプロセスがレジュームする直前のタイミング、プロセスごとに生ずるサスペンドしてから一定の時間が経過したタイミング、または、ブートが完了したタイミングとすることができる。またウインドウを表示するプロセスは、ユーザがアクセスしたときに短時間で実行できる必要があるので、特にレジュームする前にスワップ・インしておくことが望ましい。あるいは、ウインドウを表示するプロセスのワーキング・セット・サイズは縮小しない方法を採用することもできる。
【0103】
ウインドウを表示するプロセスをサスペンドする場合は、プロセス制御部103は、ウインドウ・ハンドルを有するサスペンド中のプロセスに対してウインドウ・メッセージを送る。ウインドウ・メッセージを受け取ったプロセスは、ウインドウ・メッセージを処理するコードを実行するために仮想メモリ領域213のページング・ファイルに記憶していたメモリ・ページの一部をメイン・メモリ13にスワップ・インする。ウインドウ・メッセージを送るタイミングはサスペンドの直後とすることでもよい。
【0104】
ブロック419では、ユーザはブート管理部101が提供するインターフェース画面を通じて、RPL107の編集が必要か否かを判断する。ユーザはRPL107の編集が必要であると判断すると、ブート管理部101は実行プロセス・リスト105を通じて、RPL107に登録されたプロセスのなかで実行頻度の少ないプロセスを検索してLCD19に表示する。
【0105】
表示の内容は、プログラムが導入されてから一度も実行されないプロセスまたは導入直後に実行されただけのプロセス、直近の1週間の間に一度も実行されないプロセス、および直近の10回のブートで一度も起動されないプロセスなどの種別ごとのリストとすることができる。ユーザが表示された内容に基づいて、RPL107から削除することができると判断したプロセスを選択すると、RPL管理部113はRPL107からそのプロセスを削除する。
【0106】
図7の手順では、サスペンドしたプロセスがレジュームしたときに、最大ワーキング・セット・サイズを増加させないでメモリ・マネージャ81が要求されたメモリ・ページを最大ワーキング・セット・サイズまで割り当てた。他の方法としては、レジュームする際にプロセス制御部103がメモリ・マネージャ81に最大ワーキング・セット・サイズをディフォルト値まで拡大するように要求することができる。
【0107】
本発明は一例としてWindows(登録商標)のOSに適用できるが、本発明はページング方式による仮想記憶を採用し、各プロセスに割り当てたワーキング・セットのサイズの合計を縮小することでフリー・メモリ領域を拡大し、それに伴ってさらにキャッシュ領域を拡大するようなOSに広く適用できる。したがって、本明細書に記載したメモリ管理の詳細な方法は本発明を説明するための一例であり、OSがワーキング・セット・サイズの管理方法やキャッシュ領域の拡大方法などにおいて他のアーキテクチャを採用する場合でも本発明を適用することができる。
【0108】
これまでの手順では、ブートの際にサスペンドしたプロセスのワーキング・セットを縮小してキャッシュ領域を拡大し、ブート時間を短縮する例を説明したが拡大されたフリー・メモリ領域は、ブート時間の短縮以外にも適用できる。たとえば、サスペンドされたプロセスの中には、当該ブートに続くパワー・オン中には実行されないものが含まれる。これまではそのようなプロセスに対しても一定のワーキング・セットが割り当てられて他のプロセスのワーキング・セット・サイズを制限していた。
【0109】
しかし、本発明ではブートが完了した後でもサスペンドしたプロセスの最大ワーキング・セット・サイズが最小になっているのでその分だけフリー・メモリ領域が拡大し、他のプロセスに対してできるだけ大きなサイズのワーキング・セットを与えたり、ブート後のファイルの読み出しの際にファイル・システムが使用するキャッシュ領域を増加させたりすることができる。
【0110】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【0111】
10…コンピュータ
13…メイン・メモリ
17…HDD
61…カーネル
100…ブート・システム
201a〜201c…仮想アドレス空間
203a〜203c…ワーキング・セット
205…キャッシュ領域
207…フリー・メモリ領域
211…一般記憶領域
213…仮想メモリ領域

【特許請求の範囲】
【請求項1】
メイン・メモリとオペレーティング・システムを含むブート・ファイルを格納した記憶装置を備えるコンピュータに、
前記コンピュータのブートを開始するステップと、
前記ブート・ファイルを前記メイン・メモリにロードするプロセスを生成するステップと、
前記生成されたプロセスに前記オペレーティング・システムが所定のサイズのワーキング・セットを割り当てるステップと、
前記ブート・ファイルをロードするプロセスから選択した所定のプロセスをサスペンドするステップと、
前記サスペンドした所定のプロセスのメモリ・ページをスワップ・アウトして前記ワーキング・セットのサイズを縮小するステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項2】
前記縮小されたワーキング・セットのサイズが、前記オペレーティング・システムが各プロセスに対してディフォルトで設定する最低ワーキング・セット・サイズである請求項1に記載のコンピュータ・プログラム。
【請求項3】
前記縮小されたワーキング・セットのサイズに応じて前記オペレーティング・システムが使用するキャッシュ領域のサイズを拡大するステップを有する請求項1または請求項2に記載のコンピュータ・プログラム。
【請求項4】
前記サスペンドしたプロセスがレジュームする前に前記スワップ・アウトしたメモリ・ページを前記メイン・メモリにスワップ・インするステップを有する請求項1から請求項3のいずれかに記載のコンピュータ・プログラム。
【請求項5】
前記スワップ・インするステップを、前記プロセスがサスペンドしてから一定の時間が経過したときに実行する請求項4に記載のコンピュータ・プログラム。
【請求項6】
前記スワップ・インするステップを、前記ブートが完了したときに実行する請求項4に記載のコンピュータ・プログラム。
【請求項7】
前記スワップ・インするステップにおいて、サスペンドしていた呼び出し先のプロセスのメモリ・ページのスワップ・インを、呼び出し元のプロセスと前記呼び出し先のプロセスの関係を記述したプロセス間通信リストを参照して、前記呼び出し元のプロセスが生成されたときに実行する請求項4に記載のコンピュータ・プログラム。
【請求項8】
前記スワップ・インするステップが、ウインドウ・ハンドルを備えるプロセスに対してウインドウ・メッセージを送るステップを含む請求項4から請求項7のいずれかに記載のコンピュータ・プログラム。
【請求項9】
前記スワップ・インするステップを、前記ウインドウ・ハンドルを備えるプロセスがサスペンドした直後に実行する請求項8に記載のコンピュータ・プログラム。
【請求項10】
前記所定のプロセスが、ユーザの操作に基づいてオンデマンドで実行されるプロセスを含む請求項1から請求項9のいずれかに記載のコンピュータ・プログラム。
【請求項11】
前記所定のプロセスが、レジストリに登録されているすべてのプログラムの中でブート時に実行されないプログラムをロードするプロセスを含む請求項1から請求項10のいずれかに記載のコンピュータ・プログラム。
【請求項12】
メイン・メモリのフリー・メモリ領域に設定したキャッシュ領域にブート・ファイルを先読みし、前記フリー・メモリ領域のサイズに応じて前記キャッシュ領域のサイズを変更することが可能なオペレーティング・システムにおいて、ブート時間を短縮する方法であって、
前記コンピュータのブートを開始するステップと、
前記ブート・ファイルを前記メイン・メモリにロードするプロセスを生成するステップと、
前記生成されたプロセスに前記オペレーティング・システムが所定のサイズのワーキング・セットを割り当てるステップと、
前記ブート・ファイルをロードするプロセスから選択した所定のプロセスをサスペンドするステップと、
前記サスペンドした所定のプロセスのメモリ・ページをスワップ・アウトして前記ワーキング・セットのサイズを縮小するステップと、
前記縮小したワーキング・セットのサイズに応じて前記キャッシュ領域のサイズを拡大するステップと
を有する方法。
【請求項13】
前記拡大したキャッシュ領域に前記ブート・ファイルを先読みするステップと、
前記キャッシュ領域に記憶されたブート・ファイルをロードするプロセスを生成するステップと
を有する請求項12に記載の方法。
【請求項14】
メイン・メモリとオペレーティング・システムを含むブート・ファイルを格納した記憶装置を備えるコンピュータにおいて、前記メイン・メモリのフリー・メモリ領域を拡大する方法であって、
前記コンピュータのブートを開始するステップと、
前記ブート・ファイルを前記メイン・メモリにロードするプロセスを生成するステップと、
前記生成されたプロセスに前記オペレーティング・システムが所定のサイズのワーキング・セットを割り当てるステップと、
前記ブート・ファイルをロードするプロセスから選択した所定のプロセスをサスペンドするステップと、
前記サスペンドした所定のプロセスのメモリ・ページをスワップ・アウトして前記ワーキング・セットのサイズを縮小するステップと
を有する方法。
【請求項15】
プロセッサと、
メイン・メモリと、
オペレーティング・システムを含むブート・ファイルを格納する記憶装置と、
仮想メモリと、
前記メイン・メモリに前記ブート・ファイルをロードするプロセスのなかからサスペンドする所定のプロセスを選択する第1の手段と、
前記ブート・ファイルをロードするプロセスに対して所定のサイズのワーキング・セットを割り当て、前記第1の手段が選択した所定のプロセスをサスペンドし、前記サスペンドしたプロセスのメモリ・ページをスワップ・アウトして前記ワーキング・セットのサイズを縮小する第2の手段と
を有するコンピュータ。
【請求項16】
前記メイン・メモリがキャッシュ領域を含み、
前記第2の手段は、前記ワーキング・セットのサイズの縮小に応じて前記キャッシュ領域を拡大する請求項15に記載のコンピュータ。
【請求項17】
前記第1の手段は、前記サスペンドしたプロセスをレジュームさせるように前記第2の手段に要求する請求項16に記載のコンピュータ。
【請求項18】
前記第1の手段は、前記プロセッサのアクセスに対してページ・フォルトが発生する前に前記第2の手段を通じて前記スワップ・アウトしたメモリ・ページをスワップ・インさせる請求項17に記載のコンピュータ。
【請求項19】
前記第1の手段は、前記サスペンドしたプロセスがレジュームする前に前記スワップ・アウトしたメモリ・ページを前記メイン・メモリにスワップ・インするように前記第2の手段に要求する請求項18に記載のコンピュータ。
【請求項20】
前記第1の手段は、ウインドウ・ハンドルを備えるプロセスに対してウインドウ・メッセージを送るように前記第2の手段に要求する請求項18または請求項19に記載のコンピュータ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2013−33369(P2013−33369A)
【公開日】平成25年2月14日(2013.2.14)
【国際特許分類】
【出願番号】特願2011−168902(P2011−168902)
【出願日】平成23年8月2日(2011.8.2)
【出願人】(505205731)レノボ・シンガポール・プライベート・リミテッド (292)
【復代理人】
【識別番号】100106699
【弁理士】
【氏名又は名称】渡部 弘道
【復代理人】
【識別番号】100077584
【弁理士】
【氏名又は名称】守谷 一雄
【Fターム(参考)】