(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイスを動作させる方法であって、
前記コンピューティングデバイスをスタートアップするためのコマンドを受け取るステップと、
前記コンピューティングデバイスの条件を判定するステップと、
前記判定された条件に基づいて、前記受け取られたスタートアップコマンドを条件付きで処理するステップとを含み、前記判定された条件に基づいて、前記受け取られたスタートアップコマンドを条件付きで処理するステップが、
前記判定された条件が第１の条件であるとき、前記完全スタートアップシーケンスを実行することによって前記スタートアップコマンドに応答するとともに、前記スタートアップコマンドに応答する時間の指標を記録するステップ、および、
前記判定された条件が前記第１の条件以外の条件であるとき、完全スタートアップシーケンスを実行することなく、不揮発性記憶装置に記憶された休止状態ファイルに含まれる状態情報を揮発性記憶装置にコピーすることによって前記スタートアップコマンドに応答するとともに、前記スタートアップコマンドに応答する時間の指標を記録するステップを含み、更に、
シャットダウンコマンドに応答して、
前記完全スタートアップシーケンスを実行することなく、不揮発性記憶装置に記憶された休止状態ファイルに含まれる状態情報を揮発性記憶装置にコピーすることによって以前に記録されたスタートアップコマンドに応答する時間の指標が、前記完全スタートアップシーケンスを実行することによって以前に記録されたスタートアップコマンドに応答する時間の指標よりも小さいときに、新たな休止状態ファイルを不揮発性記憶装置に記憶するステップ
を含む方法であって、
前記第１の条件は、前回シャットダウンコマンドを実行してから前記コンピューティングデバイスのハードウェア構成が変更されたことを検出したこと、前記休止状態ファイルが作成後に修正されたことを検出したこと、前記休止状態ファイルを含むボリュームが前記休止状態ファイルの作成後にマウントされたことを検出したこと、前記休止状態ファイルを含むボリュームのマウントに関連するシーケンス番号が変更されたことを検出したことの、いずれか一つである、
ことを特徴とする方法。
【請求項２】
請求項１に記載の方法を実行するためのプログラム。
【請求項３】
請求項１に記載の方法を実行するためのプログラムを記録した記録媒体。
【請求項４】
コンピューティングデバイスであって、
前記コンピューティングデバイスをスタートアップするためのコマンドを受け取る手段と、
前記コンピューティングデバイスの条件を判定する手段と、
前記判定された条件に基づいて、前記受け取られたスタートアップコマンドを条件付きで処理する手段であって、前記判定された条件に基づいて、前記受け取られたスタートアップコマンドを条件付きで処理する条件付きで処理する手段が、
前記判定された条件が前記第１の条件以外の条件であるとき、前記完全スタートアップシーケンスを実行することによって前記スタートアップコマンドに応答するとともに、前記スタートアップコマンドに応答する時間の指標を記録する手段、および、
前記判定された条件が第１の条件であるとき、完全スタートアップシーケンスを実行することなく、不揮発性記憶装置に記憶された休止状態ファイルに含まれる状態情報を揮発性記憶装置にコピーすることによって前記スタートアップコマンドに応答するとともに、前記スタートアップコマンドに応答する時間の指標を記録する手段を含み、更に、
シャットダウンコマンドに応答して、
前記完全スタートアップシーケンスを実行することなく、不揮発性記憶装置に記憶された休止状態ファイルに含まれる状態情報を揮発性記憶装置にコピーすることによって以前に記録されたスタートアップコマンドに応答する時間の指標が、前記完全スタートアップシーケンスを実行することによって以前に記録されたスタートアップコマンドに応答する時間の指標よりも小さいときに、新たな休止状態ファイルを不揮発性記憶装置に記憶する手段
を含むコンピューティングデバイスであって、
前記第１の条件は、前回シャットダウンコマンドを実行してから前記コンピューティングデバイスのハードウェア構成が変更されたことを検出したとき、前記休止状態ファイルが作成後に修正されたことを検出したとき、前記休止状態ファイルを含むボリュームが前記休止状態ファイルの作成後にマウントされたことを検出したとき、前記休止状態ファイルを含むボリュームのマウントに関連するシーケンス番号が変更されたことを検出したときの、すくなくともいずれか一つである、
ことを特徴とするコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速コンピュータースタートアップに関する。
【背景技術】
【０００２】
[0001]コンピューターは、完全動作から完全シャットダウンにおよぶ、いくつかの動作モードを有する。完全動作では、オペレーティングシステムの実行部分を定義するソフトウェアが不揮発性メモリーから揮発性メモリーに読み込まれており、揮発性メモリーからソフトウェアをより迅速に実行することができる。コンピューターは、「スタートアップ」プロセスを介して、この完全動作モードに入る。スタートアッププロセスは、ハードウェアを構成し、コンピューターのオペレーティングシステムを読み込む。スタートアッププロセスの一部として、ドライバーがインストールされ、オペレーティングシステムサービスが開始される。
【０００３】
[0002]コンピューターが任意のユーザーによる動作の準備ができると、ユーザーはコンピューターにログオンすることができる。このログオンは、ログオンされたユーザーに固有のプロファイルに基づいたコンピューターのさらなる構成を含み得る。次いで、アプリケーションがハードウェアの機能およびコンピューティングデバイスのオペレーティングシステムサービスを利用して実行することができるように、自動的にまたはユーザー入力に応答してのいずれかでアプリケーションが読み込まれ得る。
【０００４】
[0003]ソフトウェアを読み込むプロセスでは、オペレーティングシステム用かアプリケーション用かにかかわらず、メモリーを割り当てることができ、ソフトウェアのパラメーターにコンピューターのハードウェア構成またはユーザープロファイルに基づいた値を割り当てることができ、他の構成アクションを実行することができる。
【０００５】
[0004]これらのアクションは、コンピューティングデバイスの「状態」を確立する。ユーザーが実行アプリケーションまたはオペレーティングシステムサービスと対話するためのコマンドを提供すると、システムの動作状態を定義する、システムのメモリーおよび他のパラメーターに対するさらなる変更も行われ得る。
【０００６】
[0005]完全シャットダウンモードでは、電源はコンピューターのハードウェアコンポーネントに供給されない。電源オフにすると、揮発性メモリーは情報を保持しないので、ソフトウェアまたは状態情報はこのメモリーに保存されない。もっと正確に言えば、コンピューターを完全動作モードに再構成するために後で使用される任意の情報は、不揮発性メモリーに保存される。
【０００７】
[0006]コンピューターは、シャットダウンと呼ばれるプロセスを介して、シャットダウンモードに入る。シャットダウンの間、コンピューターを再構成するために必要になり得る任意の情報は、まだ不揮発性メモリーに保存されていない場合、不揮発性メモリーに保存され得る。不揮発性メモリーから揮発性メモリーにコピーされたソフトウェアおよび他の構成情報は、その後のスタートアッププロセス時に再作成することができるので、不揮発性メモリーにコピーバックされない。しかし、揮発性メモリーが、不揮発性メモリーからコピーされた、コピーされた後で修正されたデータ（時として、「ダーティ」データと呼ばれる）をキャッシュする範囲において、そのデータは、シャットダウンの間、不揮発性メモリーにコピーされる。
【０００８】
[0007]さらなる変形形態は、ログオフと呼ばれる。ユーザーセッションをサポートするコンピューターでは、ユーザーは、その機能にアクセスするためにコンピューターにログオンすることができる。シャットダウンはユーザーを事実上ログオフするが、別個のログオフプロセスを実行することができ、その後、コンピューターの電源は切れない。もっと正確に言えば、オペレーティングシステムは読み込まれたままであり、別のユーザーがログオンする準備ができている。ログオフの間、コンピューターはユーザーセッションを「ブレークダウン」する。ユーザーセッションをブレークダウンすることは、ユーザーによって起動されたアプリケーションを閉じることおよび不揮発性メモリーにまだないユーザー固有のデータを保存することを必要とし得る。
【０００９】
[0008]完全シャットダウンまたはログオフに加えて、コンピューターのハードウェアコンポーネントのいくつかまたはすべてへの電源が切られる省電力モードがあり得る。時としてスリープモードと呼ばれる省電力モードでは、コンピュータープロセッサ、ネットワークインターフェイスおよび場合によっては他のコンポーネントに対する電源が切られる。しかし、揮発性メモリーに対する電源は保持される。このようにして、コンピューターのブートまたはその後の動作の間に作成された任意の状態情報は、揮発性メモリーに保持される。電源が再びプロセッサに供給されるとき、プロセッサはスリープモードに入る際に中断した状態で動作を再開することができる。
【００１０】
[0009]さらなるモードは、時として休止状態モードと呼ばれる。コンピューターは、休止状態と呼ばれるプロセスを介して、このモードに入る。休止状態の間、コンピューターの動作状態をキャプチャするファイルが作成され、不揮発性メモリーに、通常は、ハードディスクに保存される。休止状態から再開するプロセスの間、このファイルがディスクから読み取られ、休止状態時に存在していたコンピューターの状態を再確立するために使用され得る。任意のユーザー状態も再保存されるように、休止状態からの再開は、ソフトウェアのコピーまたは動作の間に設定された、休止状態時に存在していたパラメーターを揮発性メモリーに再保存する。
【００１１】
[0010]休止状態からの再開は、いくつかの理由で、完全スタートアップを実行するよりも高速とすることができる。１つの理由は、休止状態ファイルにおける状態情報を揮発性メモリーにコピーすることで、完全スタートアッププロセスの結果を再作成するとともに、ＣＰＵ消費、デバイス初期化およびブートの間に行われなければならない多くの他のタイプの作業などの、スタートアッププロセスのステップを実行するのに費やされる時間を回避するということである。加えて、スタートアップの間にアクセスされた情報は、オペレーティングシステム内の場合によっては何万にもなり得るコンポーネントを読み込み、構成するためにアクセスされる異なるコンポーネントを表す、多くの異なるファイルに保存される。これらのコンポーネント、およびこれらのコンポーネントを構成するためにアクセスされる情報は、ハードディスク全体にわたってランダムに分散され得る。ハードディスクドライブ、および何らかの他の形態の大容量記憶装置は、順次データにアクセスするのに最も効率的であるので、ランダムに分散されたデータにアクセスすることは、長いスタートアッププロセスをもたらす、かなりのディスクアクセス時間を含み得る。対照的に、休止状態ファイルを読み取る際のアクセス時間はより短く、これは、そのファイル内の情報を順次、ディスク上に保存することができるからである。
【００１２】
[0011]休止状態からの再開とスタートアップとの間のさらなる違いは、休止してから再開すると、コンピューターが休止した際のコンピューターのユーザーに関する任意のユーザー状態を含めた、コンピューターの完全な状態を再保存するということである。対照的に、スタートアップは、ユーザーがログオンするまで、任意のユーザーに対してコンピューターを一般的に構成する。次いで、特定のユーザーがログオンするか、そうでなければ、特定のユーザー自身に対してコンピューターを構成するためのアクションをとることができる。この理由で、休止状態は、しばらくの間コンピューターから離れるつもりであるが、コンピューターに戻ってくるつもりであるユーザーによって一般的に選択される。シャットダウンは、より長い間コンピューターから離れ、場合によっては全くコンピューターに戻ってこないつもりであるユーザーによって、または自分が戻ってくる前に他のユーザーがコンピューターを使用する可能性があると予想するユーザーによって一般的に使用される。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
高速コンピュータースタートアップを提供する。
【課題を解決するための手段】
【００１４】
[0012]ユーザーエクスペリエンスを改善するために、コンピューターは、休止状態モードに入ることによって、シャットダウンするためのユーザーコマンドに応答するように構成され得る。そのようなコンピューターは、ユーザーがコンピューターをスタートアップするためのコマンドを提供した後に、より迅速にユーザーによる動作の準備ができ得る。コンピューターがユーザーの期待と一致した状態で迅速に動作の準備ができることを可能にするために、休止状態ファイルは、ユーザーの期待を実施するターゲット状態をキャプチャする。シャットダウンコマンドに応答して、コンピューターは、シャットダウンプロセスにおけるステップの一部分のみを実行することによって、休止する前にこのターゲット状態を作成する。実行されたステップは、コンピューターを、オペレーティングシステムは読み込まれたままであるが、ユーザーセッションはブレークダウンされている状態に対応するターゲット状態に置くことができる。
【００１５】
[0013]スタートアップコマンドを受け取ると、コンピューターシステムは、ソフトウェアを読み込み、構成することによって動作状態を作成するのではなく、休止状態ファイルを揮発性メモリーにコピーすることによってターゲット状態を再作成することができる。次いで、コンピューターは、スタートアップシーケンスの部分のみを実行することができる。これらの部分は、従来、オペレーティングシステムが読み込まれた後で、スタートアップシーケンスの間に行われる動作を含み得る。これらのステップは、例えば、ユーザーと対話して、ユーザーログオンを実行し、ユーザー状態を定義するアプリケーションを読み込むことを含み得る。
【００１６】
[0014]いくつかの実施形態では、条件付き処理は、シャットダウンを示すユーザーコマンドに応答して実行され得る。コンピューティングデバイスは、例えば、コンピューティングデバイスが完全シャットダウンが要求される動作状態にあるかどうか、またはその後のスタートアップコマンドに応答して使用するための休止状態ファイルを作成することが適切かどうかを判定することができる。
【００１７】
[0015]そのような状態は、何らかのインストールされたコンポーネントの構成設定が変更され、そのコンポーネントが完全スタートアップシーケンスの一部として再び読み込まれるまで適用されないことを判定することによってなど、いくつかの方法のいずれかで識別され得る。あるいは、完全シャットダウンの要求時にアプリケーションコンポーネントを登録することができるプログラミングインターフェイスが提供され得る。
【００１８】
[0016]そのような条件が検出された場合、コンピューティングデバイスの電源が完全に切られるまで、従来のシャットダウン処理が実行され得る。そのような条件が検出されなかった場合、コンピューティングデバイスが、休止状態ファイルを作成することができるターゲット状態になるまで、シャットダウンシーケンスが実行され得る。
【００１９】
[0017]いくつかの実施形態では、条件付き処理は、スタートアップするためのユーザーコマンドに応答して実行され得る。その条件付き処理は、休止状態ファイルが存在するかどうかを判定することを含み得る。休止状態ファイルが存在する場合、休止状態ファイルが作成されたときと、スタートアップコマンドが受け取られたときとの間で、コンピューティングデバイスのターゲット状態が変化した可能性があることがあり得るかどうかについて、さらなるチェックが行われ得る。状態の変化を引き起こした可能性があるイベントが検出された場合、コンピューティングデバイスは完全スタートアップシーケンスを実行し得る。
【００２０】
[0018]上記は本発明の非限定的な概要であり、本発明は添付の特許請求の範囲によって定義される。
[0019]添付の図面は縮尺通りに描かれることを意図していない。図面において、様々な図で示されるそれぞれの同一またはほぼ同一のコンポーネントは、類似の数字によって表される。明確にするために、すべてのコンポーネントがすべての図面においてラベル付けされ得るわけではない。
【図面の簡単な説明】
【００２１】
【図１】[0020]コンピューティングデバイスにおけるスタートアップシーケンスを示す概念ブロック図である。
【図２】[0021]コンピューティングデバイスにおける休止状態シーケンスからの再開を示す機能ブロック図である。
【図３】[0022]本発明のいくつかの実施形態による高速スタートアップシーケンスを示す機能ブロック図である。
【図４】[0023]本発明のいくつかの実施形態による、コンピューターを動作させてスタートアップコマンドに応答する方法を示すフローチャートである。
【図５】[0024]本発明のいくつかの実施形態による、コンピューティングデバイスを動作させてシャットダウンコマンドに応答する方法のフローチャートである。
【図６】[0025]本発明のいくつかの実施形態による、条件付きで実行され得るスタートアップシーケンスの一部分のフローチャートである。
【図７】[0026]ユーザーがシャットダウン時にコンピューティングデバイスの異なる挙動をもたらすコマンドから選択することができるグラフィカルユーザーインターフェイスの一部分のスケッチである。
【図８】[0027]本発明の実施形態が動作し得る環境を示す例示的なコンピューティングデバイスのブロック図である。
【発明を実施するための形態】
【００２２】
[0028]本発明者らは、コンピューティングデバイスのシャットダウンおよび／またはスタートアップシーケンスの部分とともに休止状態ファイルを使用することによって、コンピューティングデバイスのユーザーのエクスペリエンスが改善され得ることを認識し、理解している。そのようなファイルは、コンピューティングデバイスのパフォーマンスがユーザーの期待と一致するように、シャットダウン時に選択的に作成され、スタートアップ時に選択的に使用され得る。休止状態ファイルが作成されるまたは使用されるときでも、従来のシャットダウンまたはスタートアップシーケンスの部分が実行され得る。
【００２３】
[0029]ユーザーの期待と一致するコンピューティングデバイスの動作を提供するために、休止状態は、コンピューティングデバイスをターゲット状態に置く、コンピューティングデバイスの従来のシャットダウンシーケンスの部分とともに使用され得る。これらの部分は、シャットダウンコマンドを受け取ると、ユーザーセッションをブレークダウンする動作を含み得る。さらに、シャットダウンコマンドに応答することの一部として、ユーザーセッションがブレークダウンされた後で揮発性メモリーに保持されるが、不揮発性メモリーに保持されることが意図された情報は、不揮発性メモリーに移動する。例えば、従来のシャットダウンの間に実行されるものに近似した、従来のキャッシュフラッシュ動作が実行され得る。
【００２４】
[0030]逆に、スタートアップコマンドの処理時に、休止状態からの再開は、スタートアップシーケンスの部分と一緒に実行され得る。そのシーケンスは、オペレーティングシステムが読み込まれ、動作の準備ができた後に行われるスタートアップシーケンスの任意の部分を含み得る。スタートアップシーケンスのその部分は、例えば、ユーザーログオンおよびアプリケーションの読み込みを含み得る。
【００２５】
[0031]さらに、ユーザーの期待と一致した動作を提供するために、シャットダウンまたはスタートアップの一部としての休止状態ファイルの作成または使用は、動的に判定されたイベントを条件とすることができる。次にコンポーネントが読み込まれるまで、構成変更が適用されないように、コンポーネントが動作セッションの間に再構成されたシナリオでは、休止状態ファイルを作成することができない。コンピューターは、ユーザーからの次のスタートアップコマンドに応答して、休止状態ファイルが利用可能でないことを検出し、オペレーティングシステムを再度読み込むことによってターゲット状態を作成する。あるいはまたはこれに加えて、オペレーティングシステムは、他のコンポーネントが登録して、効果的に機能するために完全シャットダウンまたはスタートアップを必要とすることを示すことができるインターフェイスを提供し得る。実行コンポーネントが登録されると、完全シャットダウンシーケンスはシャットダウンコマンドに応答して実行され得る。
【００２６】
[0032]さらに、ユーザーの期待と一致して動作するために、いくつかの実施形態では、従来のシャットダウンを実行するか、またはターゲット状態が作成され、次いで休止状態プロセスが実行される修正されたシャットダウンを実行するかをユーザーが指定することができるユーザーインターフェイスが提供され得る。そのようなユーザーインターフェイスは、従来のシャットダウンおよび休止状態を組み込む修正されたシャットダウンシーケンスのための別個のオプションを表示し得る。コンピューティングデバイスは、従来のシャットダウンコマンドとしてラベル付けされた入力に応答して、修正されたシャットダウンシーケンスを条件付きで呼び出すことができる。別個のコマンドオプションは、ユーザーが従来のシャットダウンを指定することができるインターフェイスを介して提供され得る。
【００２７】
[0033]次に図１を参照すると、完全スタートアップシーケンスの機能ブロック図が示されている。図１は、本発明の実施形態に従って動作するように適合され得るコンピューティングデバイス１００の機能ブロック図を示す。
【００２８】
[0034]この例では、コンピューティングデバイス１００は、揮発性メモリー１２０を含む。揮発性メモリー１２０は、ＤＲＡＭまたは任意の他の適切なメモリーコンポーネントを使用して実施され得る。コンピューティングデバイス１００によって実行されるスタートアップシーケンスは、コンピューティングデバイス１００が当技術分野において知られているようなコンピューティング動作を実行することができる状態情報を揮発性メモリー１２０内で作成することを含む。
【００２９】
[0035]この例では、その状態情報は、ユーザー状態情報１３０およびシステム状態情報１４０の２つの部分を有するものとして図示されている。システム状態情報１４０は、概して任意のユーザーによる動作のためにコンピューティングデバイス１００を構成する状態情報を表す。対照的に、ユーザー状態情報１３０は、特定のユーザーによる動作のためにコンピューティングデバイス１００を動作させ、構成するときに生成され得る状態情報を表す。
【００３０】
[0036]システム状態情報１４０およびユーザー状態情報１３０は、当技術分野において知られているようなスタートアッププロセスに従って、揮発性メモリー１２０で作成され得る。図１は、簡略化された概念方法で、従来のスタートアップシーケンスにおけるステップを示す。そのようなシーケンスは、例えば、コンピューティングデバイス１００の電源が入れられたときか、またはスタートアップを示す他のコマンドが提供されたときに開始され得る。
【００３１】
[0037]コンピューティングデバイス１００は、当技術分野において知られているようなコンポーネントを含み得る。これらのコンポーネントは、プロセッサ１１０を含み得る。プロセッサ１１０は、マイクロプロセッサまたは当技術分野において知られているようなマイクロプロセッサもしくはプロセッサコアの集合体として実施され得る。本明細書において記載される動作は、ソフトウェア命令を実行するプロセッサ１１０の結果であり得る。
【００３２】
[0038]加えて、コンピューティングデバイス１００は、複数のタイプのコンピューター記憶媒体を組み込むことができる。この場合、これらのタイプは揮発性メモリーおよび不揮発性メモリーを含む。この例では、揮発性メモリー１２０が示されている。様々なタイプの情報が不揮発性メモリー１５０および１５２に保存される。ブートメモリー１５４も不揮発性メモリーである。異なる物理デバイスを使用して、不揮発性メモリー１５０および１５２ならびにブートメモリー１５４を実施することができる。例えば、不揮発性メモリー１５０は、回転式ハードディスクまたはソリッドステートドライブなどのディスクであってもよい。不揮発性メモリー１５２は同様にディスクであってもよく、不揮発性メモリー１５０を実施するために使用される同じディスク、同じディスク上の異なるパーティションまたは全く異なるディスクであってもよい。
【００３３】
[0039]不揮発性メモリー１５４は同じように、不揮発性メモリー１５０および１５２を実施するために使用される同じデバイスの一部分であってもよい。ただし、示された実施形態では、不揮発性メモリー１５４は、プロセッサ１１０に接続された不揮発性メモリーチップであってもよい。したがって、図１はメモリーアーキテクチャの単なる一例を表しており、任意の適切なメモリーアーキテクチャが使用され得ることを理解されたい。
【００３４】
[0040]この例では、不揮発性メモリーおよび揮発性メモリーが示されている。そのような構成は、従来のコンピューターアーキテクチャを表す。ただし、この特定のアーキテクチャが使用されることは要件ではない。もっと正確に言えば、揮発性メモリー１２０は、動作メモリーの例である。コンピューティングデバイス１００の動作の間、プロセッサ１１０は主にソフトウェアおよびデータにアクセスして、揮発性メモリー１２０から動作を実行することができる。このメモリーは、動作がプロセッサ１１０によって迅速に実行され得るように、比較的高速とすることができる。
【００３５】
[0041]対照的に、不揮発性メモリー１５０および１５２などの不揮発性メモリーは、大量のデータを保存することが可能であってもよいが、揮発性メモリー１２０よりも動作が遅いことがある。概して、そのような不揮発性メモリーに情報を保存するコストは、揮発性メモリー１２０に情報を保存するコストに比べて比較的少額であり得る。コスト効率が良く、しかも高速の動作を実現するために、不揮発性メモリーと揮発性メモリーとの間で情報を転送することができる。これらの転送は、コンピューティングデバイス１００の所望の動作をサポートする状態を揮発性メモリー１２０内に作成するために実行される。
【００３６】
[0042]コンピューターシステムの他のコンポーネントが存在し得るが、簡潔にするために省略されている。他の実施形態において存在し得るコンポーネントのさらなる詳細は、図８に関連して以下に提供される。しかし、図１における簡略化された例示は、スタートアッププロセスの説明に適したものである。
【００３７】
[0043]スタートアップコマンドに応答して、プロセッサ１１０はブートメモリー１５４における命令にアクセスし、命令を実行し得る。ブートメモリー１５４は、プロセッサ１１０に、不揮発性メモリー１５０および１５２に保存されたソフトウェアおよびデータに基づいてこれらのメモリーにアクセスさせ、適切な状態を揮発性メモリー１２０に生成させる命令を含み得る。
【００３８】
[0044]ブートメモリー１５４における命令は、プロセッサ１１０に、不揮発性メモリー１５０からソフトウェアを読み込ませることができる。ソフトウェアコンポーネントを読み込むことの一部として、プロセッサ１１０はソフトウェア命令を揮発性メモリー１２０に転送することができ、揮発性メモリー１２０からそのソフトウェアが実行され得る。ただし、ソフトウェアを読み込むことは、いくつかのコンポーネントの実行を含む、他の動作を含み得る。
【００３９】
[0045]揮発性メモリー１２０からのいくつかのコンポーネントの実行は、ソフトウェアが保存されている状態から、ソフトウェアが使用されるかソフトウェアが他のコンポーネントを不揮発性メモリーから揮発性メモリー１２０に転送させる状態にソフトウェアを変換することができる。ソフトウェアを読み込むプロセスでは、プロセッサ１１０は、不揮発性メモリー１５２に保存されたデータまたは他の情報に基づいて、ソフトウェアを構成することができる。その情報は、例えば、コンピューティングデバイス１００にインストールされたハードウェアコンポーネントについての情報を含み得る。したがって、図１は、スタートアッププロセスの第２および第３のステップが、不揮発性メモリー１５０からソフトウェアを取得し、不揮発性メモリー１５２からデータを取得することであり得ることを示す。
【００４０】
[0046]このプロセスで読み込まれた１番目のソフトウェアは、システム状態１４０を確立することができる。最初に読み込まれたソフトウェアは、システム状態１４０に、ハードウェアコンポーネントを制御するドライバー１４６を追加することができる。ドライバーを読み込む前に、コンピューティングデバイス１００に関連するハードウェアコンポーネントを識別することができ、適切なドライバーを選択することができる。ドライバーがインストールされると、オペレーティングシステムサービス、および他のコンポーネントは、ドライバーを介して制御されるデバイスと対話することができる。
【００４１】
[0047]次いで、オペレーティングシステムサービス１４２が読み込まれ得る。そのようなサービスの一例は、ファイルマネージャー１４４である。ファイルマネージャー１４４は揮発性メモリーにデータをまとめることができ、その結果として、オペレーティングシステムサービスおよびアプリケーションを実行すると、ファイルに従ってまとめられた、不揮発性メモリーにおけるデータにアクセスすることができる。オペレーティングシステムによって提供される他のサービスは、ユーザーインターフェイスと対話すること、ネットワーク接続を確立すること、または情報をプリンターに送ることを含み得る。ただし、特定のオペレーティングシステムサービス１４２は本発明を制限するものではない。
【００４２】
[0048]加えて、システム状態１４０を確立するプロセスの間、プロセッサ１１０はシステム状態データ１４８を保存し得る。そのようなデータは、不揮発性メモリー１５２などの不揮発性メモリーからコピーされ得るか、またはソフトウェアコンポーネントの実行によって生成され得る。データは、例えば、プロセッサ１１０がコンピューティングデバイス１００内にインストールされたデバイスを発見する命令を実行するときに生成され得る。具体的な例として、特定のネットワークインターフェイスカードを発見すると、プロセッサ１１０は、システム状態データ１４８の一部として、ネットワークインターフェイスカードのタイプまたは機能を記録することができる。次いで、このデータはコンピューティングデバイスの動作の間に使用されて、ネットワークインターフェイスカードとの対話を制御し得る。ただし、システム状態データ１４８として保存された特定のデータは本発明に不可欠なものではないことを理解されたい。
【００４３】
[0049]特定のオペレーティングシステムサービス１４２およびシステム状態情報１４０で作成されるシステム状態データ１４８にかかわらず、そのシステム状態情報１４０が作成されると、コンピューティングデバイス１００はユーザーによる動作の準備ができ得る。したがって、スタートアップシーケンスは、時としてユーザーログオンと呼ばれるプロセスを続けることができる。ユーザーログオンの一部として、特定のユーザーを識別することができ、さらなる状態情報を揮発性メモリー１２０に作成して、コンピューティングデバイス１００がそのユーザーのための動作を実行することを可能にすることができる。この例では、ユーザー状態情報１３０は、アプリケーション命令１３２およびユーザー状態データ１３４を含むものとして示されている。
【００４４】
[0050]動作システムコンポーネントを表す命令およびシステム状態を表すデータと同様に、アプリケーション命令１３２は、揮発性メモリー１５０に保存されたソフトウェアに基づいて、メモリーに読み込まれ得る。ただし、ソフトウェアを読み込むプロセスは、ソフトウェアまたはコンピューティングデバイスを動作のために適切に構成する機能を実行することを必要とし得る。その構成は、システム状態データ１４８またはユーザー状態データ１３４に依存し得る。
【００４５】
[0051]単なる一例として、Ｗｅｂブラウザーを実施するアプリケーション命令を読み込むと、プロセッサ１１０は、不揮発性メモリー１５２またはユーザー状態データ１３４のいずれかから、ユーザーデータを表す情報にアクセスすることができ、この情報は、ユーザーが「お気に入り」として識別した特定のＷｅｂサイトを識別する。この例では、ユーザー状態データ１３０を確立すると、ユーザー嗜好に従ってＷｅｂブラウザーを実行するように構成し、このことは、コンピューティングデバイス１００にログオンしている特定のユーザーに対してカスタマイズされたお気に入りのリストを表示することを含む。
【００４６】
[0052]ユーザーログオンが完了すると、ユーザーは次いで、コンピューティングデバイス１００と対話することができる。これらの対話は、より多くのソフトウェアが読み込まれることまたはいくつかの読み込まれたアプリケーションが閉じられることをもたらし得る。加えて、ユーザー対話は、パラメーターを設定するか、またはユーザー状態１３０またはシステム状態１４０のいずれかを変更することができる他のアクションをとることができる。これらの対話は、ユーザーがセッションを終了する意図を示すコマンドを入力するまで続き得る。
【００４７】
[0053]セッションは、複数の方法のうちの１つで終了され得る。例えば、ユーザーがコンピューティングデバイス１００との対話のセッションを完了すると、ユーザーはコンピューティングデバイス１００をログオフおよび／またはシャットダウンすることができる。ログオフはユーザーセッションがブレークダウンされることをもたらし、その結果として、ユーザー状態情報１３０はもはやメモリー１２０で利用することができなくなる。ログオフシーケンスの一部は、ユーザー固有の設定をシステム状態１４０から削除することを必要とし得る。このようにして、第２のユーザーは、前のユーザーに影響されることなく、または前のユーザーによって生成された状態情報にアクセスすることが可能になることなく、コンピューティングデバイス１００にログオンすることができる。この結果を実現するための動作は、時として、ユーザーセッションのブレークダウンとして説明され得る。
【００４８】
[0054]メモリー１２０への電源を維持することができるので、システム状態１４０はログオフの後に保持され得る。対照的に、シャットダウンは、ユーザー状態１３０およびシステム状態１４０の両方が揮発性メモリー１２０から削除されることをもたらし得る。揮発性メモリー１２０への電源が切られるので、シャットダウンシーケンスの終了時の揮発性メモリー１２０におけるいかなる情報も失われる。したがって、その状態を再作成する必要がある任意の情報は、まだ不揮発性メモリーに保存されていない場合、不揮発性メモリーに移動し得る。
【００４９】
[0055]不揮発性メモリーから生成された任意の情報を返す必要がないので、ログオフおよび／またはシャットダウンシーケンスは必ずしもスタートアップシーケンスの逆ではない。その同じ情報を、その後のスタートアップ時に再び生成することができる。しかし、セッションの間に動的に生成され、不揮発性メモリーにおける情報から再作成することができないユーザー状態１３０の部分は、ログオフまたはシャットダウン動作の一部として、不揮発性メモリーに記録され得る。同様に、シャットダウン時に、スタートアップシーケンスの再実行時に再作成することができないシステム状態データ１４８の部分は、シャットダウンシーケンスの一部として、不揮発性メモリーに転送され得る。
【００５０】
[0056]一例として、システム状態データ１４８は、不揮発性メモリー１５２に保存されたデータ項目の作業コピーとして働くことが意図されたキャッシュを含み得る。キャッシュは、不揮発性メモリーに保持されるべき情報のコピーを揮発性メモリーにおいて確立することによって、コンピューティングデバイス１００の動作を速める。より高速の揮発性メモリーロケーションにおいて情報を読み取ることまたは書き込むことは、不揮発性メモリーにおいてその同じデータにアクセスすることに比べて、コンピューティングデバイスの動作を速める。
【００５１】
[0057]揮発性メモリーにおけるデータのコピーが変更されると、そのコピーはもはや不揮発性メモリーにおける対応するデータと一致しない。キャッシュにおけるデータは「ダーティ」であると言われる。不揮発性メモリーをキャッシュにおけるコピーと同期させ続けるために、ダーティデータは時々不揮発性メモリーにコピーされる。通常、ダーティデータは、コンピューターが他の点でビジーでないときにコピーバックされる。
【００５２】
[0058]ただし、ダーティデータのコピーが遅延すると、シャットダウン時に、キャッシュにおけるデータが不揮発性メモリーにおけるデータと一致しないという可能性を生み出す。不一致を回避するために、コンピューティングデバイス１００をシャットダウンする前に、時としてダーティデータをフラッシュすると呼ばれる動作が実行され得る。この動作の間に、ダーティデータは不揮発性記憶装置にコピーされる。
【００５３】
[0059]図１に示されるスタートアップシーケンスは、ユーザーによる動作のためにコンピューティングデバイス１００を構成するので望ましいが、スタートアップシーケンスは、場合によっては、フラストレーションの原因となることがある。ユーザーによって望まれるオペレーティングシステムおよびアプリケーションは、数千または数万ものコンポーネントを集合的に含み得る。したがって、スタートアップシーケンスは、不揮発性メモリー１５０および１５２からの複数の読取り動作を必要とし得る。概して、これらのメモリーは動作が遅いので、全体的なプロセスは比較的遅くなり得る。加えて、スタートアップシーケンスは、記憶装置に関連する動作以外の時間のかかる動作を必要とし得る。例えば、ＣＰＵによる計算またはデバイス初期化にさらなる時間が費やされ得る。
【００５４】
[0060]図２は、揮発性メモリーに状態情報を作成するための代替手法を示す。図２は、状態情報が休止状態シーケンスからの再開の一部として揮発性メモリー１２０に作成される動作のシーケンスの間のコンピューティングデバイス１００を示す。
【００５５】
[0061]休止状態は、状態情報を揮発性メモリーから不揮発性メモリーにコピーすることによって作成され得る動作モードである。そのような状態情報は任意の適切な方法でまとめられ得る。図２に示される実施形態では、その状態情報は、不揮発性メモリー１５２における休止状態ファイル２１０に保存されているものとしてとして示されている。休止状態の間、プロセッサ１１０は、ユーザー状態情報１３０およびシステム状態情報１４０を含む状態情報を休止状態ファイル２１０にコピーすることができる。次いで、コンピューターシステム１００のコンポーネントのすべてまたは一部分への電源を切ることによって、休止状態モードに入る。電源が切られると、揮発性メモリー１２０における状態情報が失われる。しかし、状態情報は、休止状態からの再開時に休止状態ファイルを揮発性メモリーにコピーすることによって、再作成され得る。
【００５６】
[0062]したがって、図２は、休止状態シーケンスからの再開が、ブートメモリー１５４に保存された命令にアクセスするプロセッサ１１０によって、図１に示されるスタートアップシーケンスと同様に開始し得ることを示す。これらの命令は、プロセッサ１１０に休止状態ファイル２１０の存在をチェックさせる。この例では、休止状態ファイル２１０を検出すると、プロセッサ１１０は休止状態ファイル２１０の内容を揮発性メモリー１２０にコピーする。このコピーは、直接コピーを必要とし得るか、またはファイルを展開するなどの、情報がコピーされるときに何らかの方法で情報を変換するための処理を必要とし得る。処理の一部として処理が実行されるかどうかにかかわらず、最終結果は状態情報を再保存することになる。状態情報が再保存されると、ユーザーは、休止状態時に中断されていたコンピューティングセッションを再開することができる。システム状態データ１４８およびユーザー状態データ１３４はいずれも、揮発性メモリー１２０に戻される。加えて、アプリケーション１３２、オペレーティングシステムサービス１４２およびドライバー１４６が同じように揮発性メモリー１２０に戻され、実行の準備ができる。
【００５７】
[0063]休止状態からの再開は、図１に関連して示される完全スタートアップシーケンスを実行することよりも高速であることが多い。休止状態からの再開および完全スタートアップの間に、同じ量の情報が最終的に揮発性メモリー１２０に置かれ得るが、ファイルからその情報を単にコピーすることは、ソフトウェアおよび構成データを読み込むことによって情報を生成することよりも高速であり得る。
【００５８】
[0064]しかし、休止状態モードに入り、次いで、休止状態から再開することは、必ずしも、シャットダウンに次いでスタートアップシーケンスを実行することの適切な代替ではない。出願者らは、ユーザーコマンドに応答して休止状態を実行して、コンピューティングデバイスをシャットダウンすること、およびその後にユーザーからのコマンドに応答して休止状態から再開して、コンピューティングデバイスをスタートアップすることは、ユーザーの期待に応えるコンピューティングデバイスの動作をもたらさないことがあることを認識し、理解している。
【００５９】
[0065]本発明者らは、既存のユーザーの期待を妨害することなく、より高速の動作エクスペリエンスを提供するための方法を特定した。図３は、コンピューティングデバイス１００が休止状態をシャットダウンシーケンスに条件付きで組み込むことができる機能ブロック図を示す。加えて、コンピューティングデバイスは、休止状態からの再開をスタートアップシーケンスに条件付きで組み込むことができる。
【００６０】
[0066]図３に示される実施形態では、コンピューティングデバイス１００は、不揮発性メモリー１５２にコピーされた状態情報を含むように示されている。この実施形態では、状態情報は休止状態ファイル３１０として書式設定される。休止状態ファイル３１０は、当技術分野において知られているような休止状態ファイルの形式であってもよい。ただし、任意の適切な形式が状態情報を不揮発性メモリーに保存するために使用され得ることを理解されたい。
【００６１】
[0067]休止状態ファイル２１０に保存された情報とは対照的に、休止状態ファイル３１０はシステム状態１４０を含む。ユーザー状態１３０を休止状態ファイル３１０の一部として保存する必要はないが、いくつかの実施形態では、ユーザー状態の部分が保存され得る。したがって、ユーザーがスタートアップコマンドをコンピューティングデバイス１００に供給するとき、プロセッサ１１０は、図２に示される動作モードで行われる命令と同様の、ブートメモリー１５４からの命令の実行を開始し得る。休止状態ファイル３１０の存在を検出すると、プロセッサ１１０は休止状態ファイル３１０の内容を揮発性メモリー１２０にコピーすることができる。このコピーは、揮発性メモリー１２０にシステム状態１４０を再作成する。
【００６２】
[0068]この状態は、オペレーティングシステムソフトウェアが読み込まれた後であるが、ユーザーログオンが行われる前の、図１に示されるスタートアップシーケンスの間のコンピューティングデバイス１００の状態に近似し得る。したがって、揮発性メモリー１２０における状態情報の作成を完了するために、プロセッサ１１０は、システム状態が作成された後に行われる、図１に関連して上記に記載されたスタートアップシーケンスのステップを実行することができる。この場合、これらの動作は、アプリケーション命令１３２を読み込むこと、および不揮発性メモリー１５０からソフトウェア命令を読み取り、不揮発性メモリー１５２におけるデータに基づいてユーザー状態データ１３４を構成することによってユーザー状態データ１３４を作成することを含み得る。動作のこれらのシーケンスが完了すると、揮発性メモリー１２０における状態情報は、図１に関連して上記に記載されたスタートアップシーケンスの実行の結果として読み込まれたものと類似したものになり得る。しかし、図３に示されるシーケンスを使用してスタートアップコマンドに応答するのに必要な時間は、図１に関連して記載されたスタートアップシーケンスを実行するのに必要な時間よりも短くなり得る。
【００６３】
[0069]図３に示される例では、休止状態ファイル３１０は、休止状態ファイル２１０（図２）と同じ形式であるが、異なる情報を含む。加えて、休止状態ファイル３１０は休止状態ファイル２１０とは異なる方法で作成される。上記に記載したように、休止状態ファイル２１０（図２）は、コンピューティングデバイス１００の状態を休止状態コマンドの際に揮発性メモリー１２０に表されたものとして記録する。対照的に、休止状態ファイル３１０は、シャットダウンコマンドに応答して作成される。ただし、休止状態ファイル３１０でキャプチャされる状態情報は、シャットダウンコマンドの際のコンピューティングデバイス１００の完全な状態を表すものではない。
【００６４】
[0070]もっと正確に言えば、いくつかの処理を実行して、コンピューティングデバイス１００をターゲット状態に置くことができ、そのときに、休止状態ファイル３１０が作成され得る。示された実施形態では、ターゲット状態は、オペレーティングシステムを読み込んだ際に生成された可能性があるが、ユーザーがコンピューティングデバイス１００にログオンしていない状態を表す。そのようなターゲット状態は、少なくとも部分的に、シャットダウンシーケンスの一部分を実行することによって作成され得る。例えば、その部分は、コンピューティングデバイス１００の１人または複数のユーザーをログオフすること、またはそうでなければユーザー接続をブレークダウンすることを含み得る。そのような処理は、当技術分野において知られているような技法を使用して実行され得る。
【００６５】
[0071]あるいはまたはそれに加えて、コンピューティングデバイス１００をターゲット状態に置くために他の処理を実行することができる。例えば、処理はシステム状態データ１４８からダーティデータをフラッシュすることを含み得る。
【００６６】
[0072]さらに、上記に述べたように、シャットダウンコマンドに対するコンピューティングデバイス１００の反応に関するユーザーの期待を維持するために、休止状態を含むシャットダウンシーケンスは、そのときに存在し得る条件に基づいて条件付きで実行され得る。同様に、スタートアップシーケンスは、休止状態からの再開を条件付きで含み得る。図４、図５および図６は、そのような条件付き処理を示す。
【００６７】
[0073]図４は、スタートアップコマンドに応答してコンピューティングデバイス１００によって実行され得るものなどのスタートアップシーケンスを示す。スタートアップコマンドは、例えば、ユーザーがオンボタンを押すこと、電源をコンピューティングデバイス１００に供給すること、またはそうでなければコンピューティングデバイス１００の動作を開始することによって、コンピューティングデバイス１００に提供され得る。
【００６８】
[0074]スタートアップシーケンスが開始される方法にかかわらず、プロセスはブロック４１０で開始し得る。ブロック４１０では、プロセッサ１１０は、ブートメモリー１５４からプロセスを開始する命令をフェッチし、実行することができる。ただし、プロセスの後のステップでは、命令は、不揮発性メモリー１５０から、またはネットワーク接続を経由してからを含む任意の他の適切なソースからフェッチされ得る。
【００６９】
[0075]プロセッサ１１０を制御して、スタートアップシーケンスを開始するために使用される命令のソースにかかわらず、プロセスは、休止状態ファイルが不揮発性メモリー１５２で検出されたかどうかに応じて、決定ブロック４１２で分岐し得る。休止状態ファイルが不揮発性メモリー１５２で検出された場合、プロセスは終了ポイントＡに分岐して、図６に示されるようにプロセスを続けることができる。逆に、休止状態ファイルが存在しない場合、プロセスはサブプロセス４５０に進むことができる。
【００７０】
[0076]サブプロセス４５０は、概して、当技術分野において知られているようにスタートアップシーケンスを実施する動作のシーケンスを表し得る。この例では、ブロック４２０、４２２、４２４、４２６、４２８、４３０および４３２での処理は、知られているスタートアップシーケンスの場合のような処理を表し得る。ただし、任意の適切な技法を使用して、任意の適切な動作のシーケンスが使用され得ることを理解されたい。
【００７１】
[0077]使用される特定の手法にかかわらず、サブプロセス４５０内の処理は、ブロック４２０で開始し得る。ブロック４２０では、プロセッサ１１０はオペレーティングシステムローダーを実行する。そのようなローダーは、実行されたときに、不揮発性メモリー１５０から揮発性メモリー１２０にオペレーティングシステムのコンポーネントを読み込むソフトウェアコンポーネントであってもよい。
【００７２】
[0078]ブロック４２２では、システム状態１４０の一部として作成されるオペレーティングシステムのイメージを構成する動作が構成され得る。この構成は、揮発性メモリーに読み込まれたコンポーネントのパラメーターの値を設定することまたはシステム状態１４０の他の側面を構成する命令を実行することを含む、任意の適切な処理を含み得る。
【００７３】
[0079]また、スタートアップサブプロセス４５０の一部として、コンピューティングデバイス１００はデバイスを検出することができる。コンピューティングデバイス１００に接続されたプリンター、ネットワークインターフェイスまたは他の周辺装置などの任意の適切なデバイスが検出され得る。検出されたデバイスに基づいて、ドライバーローダーがブロック４２６で実行され得る。ドライバーローダーは、ドライバーを読み込む、知られている技法を使用して構成されたソフトウェアコンポーネントであってもよい。ドライバーローダーの実行は、検出されたデバイスのためのドライバーソフトウェアを識別し、読み込むことを含み得る。ドライバーが読み込まれると、ドライバーはブロック４２８で開始され得る。この処理は、ドライバーおよびドライバーが制御するデバイスを、コンピューティングデバイス１００で読み込まれた他のコンポーネントが利用できるようにする。
【００７４】
[0080]プロセスは、オペレーティングシステムサービスが開始され得るブロック４３０に続き得る。デバイスおよびオペレーティングシステムのサービスが利用できるようになると、処理はブロック４３２に進み得る。ブロック４３２では、アプリケーションコンポーネントが読み込まれ得る。この処理は、当技術分野において知られているような技法を使用して、または任意の他の適切な方法で、ユーザーログオンプロセスの一部として実行され得る。
【００７５】
[0081]アプリケーションコンポーネントが読み込まれると、図４に示されるプロセスは、ブロック４３２で読み込まれたアプリケーションコンポーネントの性質に応じて、分岐し得る。決定ブロック４４４での分岐により、コンピューティングデバイスは、コンピューティングデバイス１００が従来のシャットダウンシーケンスではなく休止状態を使用してシャットダウンシーケンスを実行したときに１つまたは複数のアプリケーションコンポーネントが正常に動作しない場合に起こり得る問題を改善することが可能になる。いくつかのコンポーネントは再起動を必要とすることがあり、これは、読み込みプロセスを使用して状態が再作成されるように、次にコンピューティングデバイスの電源が入れられたときに完全スタートアップシーケンスが実行されることを意味する。
【００７６】
[0082]例として、コンピューティングデバイス１００がスタートアップするときに応じて異なるように動作を実行するアプリケーションコンポーネントは、図３に示されるように休止状態を組み込むシャットダウンシーケンスが実行された場合、ユーザーが期待する通りに実行しないことがある。これらのコンポーネントの場合、その後のスタートアップが実行されると、そのスタートアップが休止状態からの復元に基づいて実行された場合、アプリケーションコンポーネントは、休止状態ファイル３１０から復元された状態情報に基づいて構成され得る。その状態情報は、コンピューターが最後に完全スタートアップシーケンスを実行したときの時間の指標を含み得る。したがって、その状態情報に基づいて読み込み時に構成されるアプリケーションコンポーネントは、図４に示されるスタートアップシーケンスが開始されたときを表す時間値を用いて構成されない。
【００７７】
[0083]考えられるユーザーの期待とは対照的に、そのコンポーネントは、完全スタートアップシーケンスが実行された前の時間を表す時間値を用いて構成される。この場合、ユーザーは、アプリケーションコンポーネントが図４のプロセスが開始した時間に基づいて構成されることを期待するので、アプリケーションコンポーネントの挙動はユーザーの期待とは異なる時間に基づく。
【００７８】
[0084]したがって、そのようなアプリケーションコンポーネントがコンピューティングデバイス１００で読み込まれるとき、コンポーネントがユーザーからのシャットダウンコマンドに応答して完全シャットダウンシーケンスを必要とすると判定することが望ましいことがある。そのようなコンポーネントが実行中であるとき、コンピューティングデバイスは、完全シャットダウンシーケンスを実行することによってシャットダウンコマンドに応答し得る。このようにして、スタートアップコマンドをその後に受け取ると、休止状態ファイルが利用できなくなり、例えば、図１に示されているように、完全スタートアップシーケンスが実行される。他のときには、コンピューティングデバイスは、図３に示されるように、休止状態を組み込むシャットダウンシーケンスを用いてシャットダウンコマンドに応答し得る。
【００７９】
[0085]ユーザーの期待と一致した挙動をサポートするために、アプリケーションプログラムが完全シャットダウンおよび完全スタートアップシーケンスを実行することを要求することを示すための機構がアプリケーションプログラムに提供され得る。図４の例では、その機構はコンピューティングデバイス１００のオペレーティングシステムによってサポートされるアプリケーションプログラミングインターフェイス（ＡＰＩ）を介して実施され得る。いかなる場合にも完全シャットダウンおよび完全スタートアップシーケンスを要求しないアプリケーションコンポーネントでさえも、そのようなＡＰＩを介して呼び出しを行うことがある。
【００８０】
[0086]したがって、読み込まれているアプリケーションコンポーネントが再起動を要求するとブロック４４０で判定された場合、処理はブロック４４２に分岐し得る。ブロック４４２では、アプリケーションプログラミングインターフェイスを呼び出して、そのアプリケーションコンポーネントを登録することができる。この例では、ＡＰＩにより、オペレーティングシステムは、スタートアップコマンドが続いて受け取られたときに再起動を要求するアプリケーションコンポーネントが依然として実行中であるかどうかを追跡することができる。ただし、そのような呼び出しはいつでも行われ得ることを理解されたい。例えば、再構成されたまたはそうでなければコンポーネントが完全シャットダウンおよび完全スタートアップシーケンスを実行すると判定する動作状態が発生した任意のコンポーネントは、ＡＰＩを介して呼び出しを行うことができる。
【００８１】
[0087]そのような呼び出しがＡＰＩを介して行われない場合、シャットダウンコマンドが続いて受け取られると、オペレーティングシステムは、図３に示されるように休止状態を組み込むシャットダウンシーケンスが使用され得ると判定することができる。逆に、呼び出しがＡＰＩを介して行われて、完全シャットダウンおよび完全スタートアップシーケンスが要求されていることを示す場合、オペレーティングシステムは、休止状態ファイルを作成することなく完全シャットダウンシーケンスを実行することができ、その結果として、スタートアップコマンドをその後に受け取ると、完全スタートアップシーケンスを実行することができる。
【００８２】
[0088]任意の適切な機構を使用して、アプリケーションコンポーネントが完全シャットダウンおよびその後の完全スタートアップシーケンスを含む再起動を必要とするかどうかを判定することができる。一例として、アプリケーションコンポーネントをプログラムして、ブロック４４２に示されるＡＰＩを呼び出すことができる。あるいは、オペレーティングシステムは、再起動を要求し得る機能を識別するために読み込まれているときにアプリケーションコンポーネントを解析するためのコンピューター実行可能命令を含み得る。そのシナリオでは、決定ブロック４４０での処理は、読み込まれているときにそれぞれのアプリケーションコンポーネントを解析することを含み得る。ただし、任意の適切な技法を決定ブロック４４０で使用して、読み込まれたアプリケーションコンポーネントに基づいて再起動を必要とし得るかどうかを判定することができる。
【００８３】
[0089]図４は、読み込まれたアプリケーションコンポーネントに基づいて再起動を必要とするかどうかを判定することを示すが、コンピューティングデバイス１００の他の要素について、同様の処理が実行され得る。例えば、オペレーティングシステムコンポーネントについて、同様の処理が実行され得る。あるいはまたはそれに加えて、コンピューティングデバイス１００にインストールされたまたはコンピューティングデバイス１００が接続されたデバイスに基づいて、同様の処理が実行され得る。
【００８４】
[0090]決定ブロック４４０で識別された、再起動の必要性を示し得る条件にかかわらず、これらの条件が識別された場合、処理は指標が保存されるブロック４４２に分岐し得る。その指標はユーザーからのシャットダウンコマンドに応答して完全シャットダウンをトリガーし得るか、あるいはまたはそれに加えて、休止状態ファイルが利用可能であっても、スタートアップするためのユーザーコマンドに応答して完全スタートアップシーケンスをトリガーし得る。これらの条件が検出されなかった場合、処理はブロック４４４に進み得る。
【００８５】
[0091]ブロック４４４では、データを収集して、コンピューティングデバイス１００が休止状態を組み込むスタートアップシーケンスを使用することの有効性を判定することを可能にすることができる。この例では、ブロック４４４での処理は、サブプロセス４５０を実行するための時間を記録し、サブプロセス４５０は、この例では、完全スタートアップシーケンスの実行を示す。この情報は任意の適切な方法で記録され得る。例えば、スタートアップ時間に関する情報が不揮発性メモリー１５２に記録され得る。情報は、完全スタートアップシーケンスが実行されるたびにそのような完全スタートアップシーケンスを実行するのに必要な時間を示す、個々のスタートアップ時間として記録され得る。あるいは、情報は、複数の完全スタートアップシーケンスにおける移動平均として、または任意の他の適切な方法で記録され得る。
【００８６】
[0092]スタートアップ時間に関する情報は、ブロック４４４で任意の適切な方法で判定され得る。一例として、タイマーがサブプロセス４５０の開始時に開始され、処理がブロック４４４に達したときを読み取り得る。ただし、他の時間測定技法が知られており、ブロック４４４で適用され得る。
【００８７】
[0093]スタートアップ時間が記録されると、処理はブロック４４６に進み得る。ここで、コンピューティングデバイス１００の従来の動作が行われ得る。そのような動作は、シャットダウンコマンドが受け取られるまで続き得る。
【００８８】
[0094]図５は、そのようなシャットダウンコマンドに応答して実行され得る処理を示す。図５に示されるプロセスは、当技術分野において知られているような技法を使用してコンピューティングデバイス１００の動作を表すブロック５１０を含む。動作の間に、シャットダウンコマンド５１２が受け取られ得る。シャットダウンコマンド５１２は、グラフィカルユーザーインターフェイスまたはハードウェア制御を介してなどの任意の適切な方法でユーザー入力によって生成され得る。
【００８９】
[0095]いくつかの実施形態では、コンピューティングデバイス１００は、シャットダウンシーケンスをトリガーすることができる複数のタイプのユーザー入力をサポートし得る。図７は、ユーザーがシャットダウンコマンドを入力し得るグラフィカルユーザーインターフェイスの例示である。この例では、グラフィカルユーザーインターフェイス７１０は、コンピューターオペレーティングシステムによって表示されたユーザーインターフェイス上に現れる「スタート」とラベル付けされたボタンを押すことによって呼び出される。ただし、異なるオペレーティングシステムが異なるインターフェイスをサポートし、ユーザーインターフェイスを呼び出すための任意の適切な技法が使用され得ることを理解されたい。
【００９０】
[0096]そのボタンを押すことに応答して、グラフィカルユーザーインターフェイス７１０は、当技術分野において知られているような技法を使用して、オペレーティングシステムによって表示され得る。グラフィカルユーザーインターフェイス７１０を介して、コンピューティングデバイス１００のユーザーは、コンピューティングデバイス上の現在のセッションを終了するための複数の考えられるコマンドのなかから選択することができる。ここでは、３つのオプションが示されている。
【００９１】
[0097]コマンド７１４は、ここでは「シャットダウン」とラベル付けされている。そのようなシャットダウンコマンドは多くのコンピューティングデバイスで慣例的なものであり、コンピューティングデバイスが完全シャットダウンシーケンスを実行すべきであることを示すために従来から使用されている。しかし、図５に示される実施形態では、シャットダウンコマンド７１４のユーザー選択は、コンピューティングデバイス１００のオペレーティングシステムが、その代わりに休止状態を組み込む部分的なシャットダウンシーケンスが実行され得るかどうかを判定することをもたらし得る。この実施形態では、オペレーティングシステムは、ユーザーに対してセマンティックな意味を有するコマンドのラベルを、場合によってはその意味と一致しない方法で使用する。それにもかかわらず、条件付き処理はユーザーの期待を維持する。
【００９２】
[0098]ただし、ユーザーが完全シャットダウンシーケンスが実行されることを保証したい場合、その理由により、異なるラベルを有する別個のコマンドが供給され得る。その後のスタートアップコマンド時に、不揮発性メモリー１５０からソフトウェアを読み込み、不揮発性メモリー１５２からのデータを用いてソフトウェアを構成することによってオペレーティングシステム状態が生成されるように、休止状態ファイルを作成することなく、コンピューティングデバイスに完全シャットダウンを実行するよう命令することをユーザーが望む場合、ユーザーは、コマンド７１５を選択することができる。この例では、コマンド７１５は「再起動」とラベル付けされている。そのようなラベル付けは、その後のスタートアップコマンド時に、完全スタートアップシーケンスが実行されるように、完全シャットダウンシーケンスが実行されることをユーザーに対して識別するために使用される。この場合、コマンド７１５は、「シャットダウン」コマンドが発行されたときに従来のコンピューティングシステムで実行されるものに類似したアクションを実行する。しかし、グラフィカルユーザーインターフェイス７１０を表示するコンピューティングデバイスでは、従来のシャットダウンコマンドに関連するセマンティックラベルはコマンド７１４に適用されている。したがって、コマンド７１５には異なるラベルが与えられる。
【００９３】
[0099]グラフィカルユーザーインターフェイス７１０は、ユーザーセッションを終了するための他のオプションも含み得る。この例では、グラフィカルユーザーインターフェイス７１０は、コマンド７１６を含む。コマンド７１６を選択すると、コンピューティングデバイス１００は、指定されたユーザーのセッションをブレークダウンすることによって応答し得る。コンピューティングデバイスのそのような挙動は当技術分野において知られている。この場合、コマンド７１６は、従来のログオフコマンドに対応し得る。ただし、多くの適切なコマンドオプションをグラフィカルユーザーインターフェイス７１０に含めることができ、示されている実施形態では、コマンド７１４または７１６の選択のみが、図５に示されるプロセスの開始をもたらす。
【００９４】
[00100]シャットダウンコマンドが受け取られる方法およびその性質にかかわらず、コマンドを受け取ったことに応答して、処理はブロック５１０からブロック５１４に移行し得る。ブロック５１４では、シャットダウンシーケンスの冒頭部分が実行され得る。ブロック５１４で実行されるシャットダウンシーケンスの部分は、従来の処理を含み得る。この例では、ブロック５１４での処理は、コンピューティングデバイス１００上の１つまたは複数の任意のユーザーセッションを終了する。図１に関連して上記に記載したように、そのような処理は、アプリケーションを閉じ、ユーザー状態データ１３４を保存することまたは任意の他の適切なアクションを実行することを含み得る。これらのアクションの結果として、１つのユーザーセッションから次のユーザーセッションに持続されるユーザー状態１３０における任意の情報は、ユーザー状態データ１３４から不揮発性メモリー１５２などの不揮発性メモリーに移動する。
【００９５】
[00101]ユーザーセッションを終了するか、そうでなければユーザー状態データ１３４を持続するためにとられた特定のステップにかかわらず、これらのステップが完了すると、処理は、決定ブロック５１６に進み得る。決定ブロック５１６では、図５のプロセスは、再起動が要求されたかどうかに応じて、分岐し得る。ブロック５１６での処理は、任意の適切な方法で実行され得る。任意の１つまたは複数の基準を決定ブロック５１６で適用して、再起動が要求されたかどうかを判定することができる。一例として、ユーザー入力を決定ブロック５１６で使用して、再起動が要求されたかどうかを判定することができる。例えば、ユーザーが再起動コマンド７１５（図７）を選択すると、そのユーザー選択は再起動が要求されたという指標として働き得る。
【００９６】
[00102]別の例として、ブロック４４２（図４）でＡＰＩを呼び出すことなどによって、アプリケーションコンポーネントが再起動を要求し得ることが図４に関連して記載された。そのような呼び出しが行われた場合、決定ブロック５１６での処理は、再起動が要求されたと判定し得る。ただし、いくつかの実施形態では、決定ブロック５１６での処理は、複数の基準を条件とし得る。例えば、処理は、アプリケーションコンポーネントがブロック４４２でのＡＰＩの呼び出しを介して再起動の要求を登録したと判定し得る。決定ブロック５１６でのさらなる処理は、そのような要求に応えるべきかどうかを判定し得る。そのような処理は、例えば、図５のプロセスが実行されたときに、要求しているアプリケーションコンポーネントが依然として実行中であるかどうかを判定することを含み得る。あるいはまたはそれに加えて、決定ブロック５１６での処理は、要求しているコンポーネントが再起動を命令するための十分なアクセス権限を有するかどうかを判定することを必要とし得る。
【００９７】
[00103]決定ブロック５１６で実行される処理の性質にかかわらず、その処理の結果として、再起動が要求されたと判定され、プロセスはブロック５３０に分岐する。このシナリオでは、ブロック５３０は、完全シャットダウンシーケンスを表す。そのような完全シャットダウンシーケンスは、当技術分野において知られているように実行され得る。完全シャットダウンシーケンスは、ユーザーセッションをブレークダウンすること、ダーティデータをフラッシュすること、およびコンピューティングデバイスの電源を切ることを必要とし得る。シャットダウンシーケンスを実行する際にとられた特定のステップにかかわらず、完了すると、図５のプロセスは、コンピューティングデバイス１００を電源オフ状態にして、終了することができる。
【００９８】
[00104]逆に、再起動が決定ブロック５１６で要求されていない場合、プロセスは決定ブロック５１８に進み得る。決定ブロック５１８での処理は、完全シャットダウンシーケンスを実行すべきか、またはその後に休止状態が続く部分的なシャットダウンを実行すべきかを判定するための条件付き処理の例である。概して、決定ブロック５１８での処理は、任意の適切なポリシーのアプリケーションを必要とし得る。そのようなポリシーは、シャットダウンコマンドが受け取られたときに評価され得る。
【００９９】
[00105]示された例では、適用されるポリシーは、休止状態を使用して実現される時間節約に関するものである。決定ブロック５１８では、休止状態からスタートアップすることによって時間節約が実現されるかどうかが判定され得る。そのような判定は、コンピューティングデバイス１００を動作状態に置くための相対時間について記録された情報を、完全スタートアップシーケンスまたはその後に部分的なスタートアップシーケンスが続く休止状態からの再開と比較することによって行われ得る。完全スタートアップを実行するための時間に関する情報は、例えば、ブロック４４４（図４）で保存された情報に基づき得る。休止状態からの再開に続いてコンピューティングデバイス１００を動作状態に置くために必要な時間に関する情報は、同様の方法で、図６のプロセスの実行の終了時に記録された情報に基づいて判定され得る。
【０１００】
[00106]その後に部分的なスタートアップが続く再開に基づいて動作状態を作成するための時間が、完全スタートアップを実行するための時間より遅い場合、処理は決定ブロック５１８からサブプロセス５３０に分岐し得る。逆に、決定ブロック５１８での処理が、その後にスタートアップシーケンスの部分的な実行が続く休止状態からの再開が好ましいと判定した場合、処理は決定ブロック５２０に進み得る。
【０１０１】
[00107]決定ブロック５２０では、さらなる条件付き処理を実行して、コンピューティングデバイス１００が休止状態を組み込む部分的なシャットダウンシーケンスに適した状態にあるかどうかを判定することができる。そのような処理は、現在のセッションの間に、任意のコンポーネントに対して構成変更が指定されたかどうかを判定することを必要とし得る。そのような構成変更が、再起動が有効になることを要求する場合、シャットダウンコマンド７１４（図７）を選択することは、従来であればコンピューティングデバイスに次のスタートアップ時に構成変更を適用させることになるラベルに関連するので、休止状態を含むシャットダウンは、コンピューティングデバイス１００の挙動に関するユーザーの期待を実施しないことがある。
【０１０２】
[00108]コンピューティングデバイス１００が、従来であれば完全スタートアップを示すために使用されるラベルを有するコマンドに応答して、休止状態を含むシャットダウンシーケンスを実施する場合、その後のスタートアップ時に、これらのコンポーネントの状態は、構成変更に基づいた状態ではなく、その以前の状態を再開する。したがって、そうでなければ完全シャットダウンシーケンスに関連し得るコマンドを呼び出すというユーザーの期待が期待された挙動を示さないシナリオが存在し得る。コンピューティングデバイス１００が期待されたユーザー挙動と一致しない方法で動作することを回避するために、図５のプロセスは、コンピューティングデバイスが、ユーザーの期待と一致した動作を得るために完全シャットダウンシーケンスを実行すべきであると自動的に判定するかどうかに応じて、分岐し得る。完全シャットダウンシーケンスを実行すべきであると判定した場合、プロセスはサブプロセス５３０に分岐し、サブプロセス５３０では、完全シャットダウンシーケンスが上記に記載されたように実行され得る。
【０１０３】
[00109]示された実施形態では、完全シャットダウンシーケンスが実行されるべき条件は、任意のコンポーネントが現在のセッションの間に構成設定を変更したかどうかを判定することによって識別される。当技術分野において知られているような、この判定を行うための技法は、決定ブロック５２０で適用され得る。一例として、実行コンポーネントの構成設定を変更するための処理は、フラグを設定すること、またはそうでなければ構成変更の指標を記録することを必要とし得る。そのシナリオでは、決定ブロック５２０での処理は、状態フラグの値をチェックすることを必要とし得る。ただし、あるいはまたはそれに加えて、他の適切な処理が使用され得る。例えば、処理は、１つまたは複数のメモリーロケーションをスキャンして、未適用の構成設定を検出することを必要とし得る。
【０１０４】
[00110]決定ブロック５２０でどのように判定が行われるかにかかわらず、完全シャットダウンおよび／またはその後の完全スタートアップが要求される条件が存在しない場合、処理は決定ブロック５２２に進み得る。ブロック５２２では、コンピューティングデバイス１００を、休止状態が行われるターゲット状態に完全に置くための動作が実行される。図３に関連して上記に記載したように、そのターゲット状態は、オペレーティングシステム状態は維持されるが、すべてのユーザーセッションがブレークダウンされ、ユーザーのその後のログオン時に要求される任意のユーザー状態が持続されている、不揮発性メモリーにおける適切な形態での状態に対応し得る。
【０１０５】
[00111]このターゲット状態を実現するために実行され得る動作の例は、ダーティデータをフラッシュすることである。あるいはこれに加えて、システム状態データ１４８の一部として保存された他のデータがログオンしたユーザーのセッションに関するものである場合、ブロック５２２での処理は、不揮発性メモリー１５２にそのデータを保存することを必要とし得る。
【０１０６】
[00112]ターゲット状態を完全に実現するためにどの動作が実行されるかにかかわらず、処理は次いで、ブロック５２４に進み得る。ブロック５２４では、コンピューティングデバイス１００でターゲット状態を再作成するための休止状態ファイルの適合性を確認するために後で使用され得る情報を取り出すことができる。例として、いくつかのコンピューティングデバイスは、複数のオペレーティングシステムまたはオペレーティングシステムの複数のインスタンスを用いて構成され得る。オペレーティングシステムの特定のインスタンスのシャットダウンの一部として作成された休止状態ファイルを使用して、オペレーティングシステムのその同じインスタンスをスタートアップするためのコマンドに応答して、オペレーティングシステム状態のみを再保存することができる。
【０１０７】
[00113]しかし、休止状態ファイルが作成されたときに使用中であったオペレーティングシステム以外のオペレーティングシステムを用いてコンピューティングデバイスを動作させる場合がある可能性は、休止状態ファイルが作成されたときと、そのファイルに基づいた状態の再作成をトリガーするその後のスタートアップコマンドとの間で、オペレーティングシステムがコンピューティングデバイスで実行中である可能性を生み出す。別のオペレーティングシステムまたは同じオペレーティングシステムのインスタンスによって動作に介入することは、休止状態ファイルにおいてキャプチャされた状態がもはや、ユーザーの期待と一致した動作を実現するために作成されるべきコンピューティングデバイスの状態を表さない可能性を生み出し得る。
【０１０８】
[00114]例えば、ユーザーが、第１のオペレーティングシステムを用いたシャットダウン動作の後に、第２のオペレーティングシステムを読み込み、第１のオペレーティングシステムによって使用された任意のデータまたは他のコンポーネントに対する変更を行った場合、このインスタンスにおける休止状態ファイルからの再開は、介入するユーザー変更を反映しない状態を作成することになる。
【０１０９】
[00115]したがって、その後のスタートアップコマンド時に、休止状態ファイルがコンピューティングデバイス１００の動作状態の再作成に使用するのに適切なものかどうかを判定するための機構を用いることができる。図５に示される実施形態では、その機構は、休止状態ファイルが作成されたときに情報を保存することを必要とする。この特定の例では、その情報は、ファイルシステムによって維持されるシーケンス番号である。具体的には、シーケンス番号は、ＮＴＦＳファイルシステムまたはコンピューティングデバイスで動作させることができる他のファイルシステムによって維持され得る。そのようなシーケンス番号は、ディスク記憶装置のボリュームが読み込まれるたびにインクリメントされ得る。したがって、ブロック５２４での処理は、休止状態ファイルおよびオペレーティングシステムに関連する他のデータを含むボリュームに関連するＮＴＦＳシーケンス番号を保存することを必要とし得る。この値は、その後のスタートアップコマンドに関連してその値にアクセスすることができるように、不揮発性メモリーに保存され得る。
【０１１０】
[00116]休止状態ファイルの適合性のその後の判定を可能にするためにブロック５２４で記録された特定の情報にかかわらず、プロセスはサブプロセス５２６に進み得る。サブプロセス５２６は、休止状態ファイルを保存することを含み得る。ブロック５２６での処理は、コンピューティングデバイスの休止状態に関連する従来の技法を使用して実行され得る。ただし、休止状態ファイルを実行する任意の適切な技法が使用され得ることを理解されたい。
【０１１１】
[00117]サブプロセス５２６の一部として休止状態ファイルを保存するために使用される特定の技法にかかわらず、休止状態ファイルを保存すると、コンピューティングデバイス１００への電源がシャットダウンされ得る。コンピューティングデバイス１００は、スタートアップコマンドが受け取られるまで、電源が切られた状態にとどまり得る。
【０１１２】
[00118]その後のスタートアップコマンドは、図４および図６に示されるように処理され得る。図４は、開始コマンドを受け取ったことに応答して実行され得る処理を示す。その処理は、ブロック４１０および決定ブロック４１２での処理を含む。処理が決定ブロック４１２に達すると、プロセスは、直前に先行するシャットダウンの間にサブプロセス５２６が実行された場合に存在し得るかなど、休止状態ファイルが存在するかどうかに応じて、分岐し得る。その休止状態ファイルが存在する場合、図４のプロセスはＡとラベル付けされた結合子を介して分岐して、図６に示される処理を続けることができる。
【０１１３】
[00119]図６での処理は、休止状態ファイルが存在するときに実行され得るプロセスを示す。図６のプロセスは、ブロック６０１で開始し得る。ブロック６０１では、プロセスは、決定ブロック４１２（図４）で検出された休止状態ファイルが、サブプロセス５２６に関連して示されるものなどの、シャットダウンの間にターゲット状態をキャプチャする休止状態ファイルを表すかどうかに応じて、分岐し得る。当該の休止状態ファイルを表す場合、プロセスは決定ブロック６１０に進み得る。
【０１１４】
[00120]あるいは、休止状態ファイルは、システム状態情報に加えてユーザー状態を組み込む従来の休止状態ファイルを表し得る。そのような休止状態ファイルを従来の技法に従って使用して、その状態を再保存することができる。規則処理をサブプロセス６７０で実行することができ、サブプロセス６７０では、休止状態ファイルを使用して、以前の休止状態時の、ユーザー状態を含むコンピューティングデバイスの状態を再確立する。サブプロセス６７０の完了に続いて、処理はブロック６３８に続き得る。
【０１１５】
[00121]逆に、決定ブロック６０１で判定されたときに、休止状態ファイルがシャットダウンプロセスの一部として記録された場合、プロセスは決定ブロック６１０に続く。決定ブロック６１０で開始すると、１つまたは複数の動作を実行して、スタートアップコマンドに応答して、完全スタートアップシーケンスを実行すべきか、またはその後に部分的なスタートアップシーケンスが続く休止状態からの再開を実行すべきかを判定することができる。この例では、複数の条件がチェックされて、休止状態ファイルが存在すると判定されても、休止状態からの再開を実行すべきかどうかを判定する。決定ブロック６１０でチェックされるそのような条件の１つは、休止状態からの再開が現在のコンピューター構成と一致しない状態情報を再作成することをもたらし得るように、コンピューティングデバイス１００について、ハードウェア構成の変更があったかどうかを判定することを必要とする。そのような変更は、コンピューティングデバイスの最後のセッションの間に作成され、不揮発性メモリーに保存されたハードウェアコンポーネントのインベントリをチェックすることを含む、任意の適切な方法で検出され得る。その後のスタートアップ時のコンピューティングデバイスのハードウェア構成をチェックして、インベントリ上のそれぞれの項目がインストールされていることを保証することができる。ただし、インベントリをチェックすることは、そのような処理がどのように実行され得るかという一例にすぎないことを理解されたい。どのように判定が行われるかにかかわらず、ハードウェア構成が変化した場合、処理は、決定ブロック６１０からサブプロセス６５０に分岐し得る。サブプロセス６５０は、オペレーティングシステムを再読み込みすることを必要とし得る。サブプロセス６５０での処理は、当技術分野で知られているような技法を使用して実行され得る。サブプロセス６５０におけるオペレーティングシステムの読み込みに続いて、プロセスはブロック６３２に進み得る。
【０１１６】
[00122]逆に、決定ブロック６１０での処理が、ハードウェア構成が行われなかったと判定した場合、処理はブロック６１２に進み得る。ブロック６１２では、さらなる処理を実行して、コンピューティングデバイス１００が休止状態からの再開が実行されるべき状態にあるかどうかを動的に判定することができる。この場合、決定ブロック６１２での処理は、休止状態からの再開が実行された場合にユーザーの期待を満たさないように、ブロック５２４（図５）で保存された情報を利用して、休止状態ファイルの作成の間に変更が行われたかどうかを判定することができる。
【０１１７】
[00123]この例では、ブロック６１２での処理は、休止状態ファイルを含むボリュームに関連するＮＴＦＳシーケンス番号をチェックすることを含む。休止状態ファイルが作成されたので、そのボリュームが読み込まれなかった場合、ブロック６１２で読み取られるシーケンス番号は、スタートアップ時のシーケンス番号の確率を表す既知の量だけ、ブロック５２４で保存されたシーケンス番号とは異なる。逆に、シーケンス番号の差が既知の量より大きい場合、ブロック６１２での処理は、休止状態ファイルの作成時と休止状態からの再開をトリガーしたスタートアップコマンドとの間に、変更が行われた可能性があることを識別する。
【０１１８】
[00124]決定ブロック６２０では、プロセスは、ブロック６１２で実行された比較に基づいて分岐し得る。シーケンス番号が一致しない場合、プロセスはサブプロセス７５０に分岐する。シーケンス番号の差が、休止状態ファイルがユーザーの期待と一致したコンピューティングデバイスの動作状態を確立しない可能性があることを示すときに、そのような分岐が起こり得る。したがって、システム状態１４０がオペレーティングシステムソフトウェアを再読み込みすることによって作成されるサブプロセス６５０が実行される。
【０１１９】
[00125]逆に、ブロック６１２で実行された比較が、シーケンス番号が一致することを示す場合、プロセスはサブプロセス６３０に進み得る。その分岐をとるとき、休止状態ファイルは、コンピューティングデバイスの状態を再確立するのに適切であると判定されている。したがって、サブプロセス６３０は、休止状態ファイルからコンピューティングデバイスのターゲット状態を再確立することを必要とする。サブプロセス６３０は、休止状態から再開するための既知の技法を使用して実行され得る。ただし、このシナリオでは、ユーザー状態を含むコンピューティングデバイスの状態を再確立するのではなく、休止状態ファイルに基づいて再開することで、休止状態ファイルが作成されたときのターゲット状態を再作成する。この状態は、例えば、サブプロセス５２６（図５）の開始時のコンピューティングデバイスの状態を表し得る。ただし、他の実施形態では、オペレーティングシステムが、スタートアップシーケンスの完了時にアプリケーションがユーザーによって開かれている可能性があると予測し、これらのアプリケーションが依然として開いている間にコンピューティングデバイスの状態をキャプチャするための休止状態ファイルを保存するときに起こり得るものなどの、部分的なユーザー状態は、休止状態ファイルに保存され得る。
【０１２０】
[00126]サブプロセス６３０が完了すると、図６のプロセスはブロック６３２に進み得る。処理がサブプロセス６３０を介してブロック６３２に達するか、またはサブプロセス６５０を介してブロック６３２に達するかにかかわらず、ブロック６３２では、スタートアップコマンドに応答するのに必要な時間が記録され得る。記録される値の意味は、処理がブロック６３２に達した経路に依存し得る。処理がサブプロセス６３０を介してブロック６３２に達するとき、時間は、処理の一部として休止状態からの再開を使用したスタートアップの時間を表し、それに応じて記録される。逆に、処理がサブプロセス６５０を介してブロック６３２に達するとき、時間は、完全スタートアップシーケンスを使用したスタートアップの時間を表し、それに応じて記録される。ブロック６３２での処理は、ブロック４４４（図４）に関連して記載された技法を使用することを含む、任意の適切な方法で実行され得る。
【０１２１】
[00127]ブロック６３２で情報を記録した結果として、決定ブロック５１８（図５）での処理は、休止状態からの再開およびスタートアップシーケンスの一部分を含む完全スタートアップシーケンスに基づいてスタートアップコマンドに応答する時間を比較するのに利用可能な情報を有し得る。この情報は、任意の適切な方法で記録され、比較され得る。
【０１２２】
[00128]次いで、処理はサブプロセス６３４に進み得る。サブプロセス６３４では、スタートアップシーケンスの一部分を実行して、コンピューティングデバイスの所望の動作状態を作成することができる。この部分は、ユーザーをログオンすることを含み得る。この動作を既知の方法で実行することができ、この動作は自動ログオンを含み得るか、またはユーザーが情報を表示して、手動でログオンプロセスを実行するログオン画面を表示することを含み得る。処理がサブプロセス６５０を介してサブプロセス６３４に達するシナリオでは、サブプロセス６５０およびサブプロセス６３４での処理の組合せは、完全スタートアップシーケンスを表し得る。逆に、処理がサブプロセス６３０を介してサブプロセス６３４に達する場合、スタートアップコマンドへの応答は、休止状態からの再開およびスタートアップシーケンスの一部分を含む。
【０１２３】
[00129]この例では、スタートアップシーケンスのその部分は、サブプロセス６３４においてユーザーをログオンすることを表す。そのような処理は、従来の技法を使用して実行され得る。ただし、休止状態からの再開に続いて、スタートアップシーケンスを完了するために使用される特定のステップは、任意の適切な技法であってもよい。
【０１２４】
[00130]次いで、プロセスは、休止状態ファイルを無効化することができるブロック６３８に進み得る。また、処理は、サブプロセス６７０に続いてブロック６３８に達し得る。処理がどのようにブロック６３８に達するにかかわらず、休止状態ファイルが正しくない動作状態を再作成する可能性があるときに、その休止状態ファイルを後で使用しないことを示す任意の適切な方法で、休止状態ファイルを無効化することができる。例えば、何らかの方法でその内容を変更し、ファイルが無効であることを別個のメモリー構造に記録することによって、またはファイルを削除することによって、休止状態ファイルを無効化することができる。
【０１２５】
[00131]次いで、図６のプロセスは終了し得る。プロセスが終了すると、コンピューティングデバイス１００を動作状態に構成することができ、その後、コンピューティングデバイス１００は、シャットダウンまたは再起動コマンドが受け取られるまで、動作を続けることができる。
【０１２６】
[00132]図８は、本発明が実施され得る適切なコンピューティングシステム環境８００の例を示す。コンピューティングシステム環境８００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に関して任意の限定を示唆することを意図するものではない。コンピューティング環境８００を、例示的な動作環境８００に示されるコンポーネントの任意の１つまたは組合せに関する任意の依存性または要件を有するものとして解釈すべきでもない。
【０１２７】
[00133]本発明は、多くの他の汎用または専用コンピューティングシステム環境または構成で使用可能である。本発明とともに使用するのに適切であり得る周知のコンピューティングシステム、環境、および／または構成の例としては、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブルコンシューマーエレクトロニクス、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが挙げられるが、これらに限定されない。
【０１２８】
[00134]コンピューティング環境は、プログラムモジュールなどのコンピューター実行可能命令を実行し得る。概して、プログラムモジュールは、特定のタスクを実行するまたは特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。また、本発明は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実施され得る。分散コンピューティング環境では、プログラムモジュールは、メモリー記憶デバイスを含む、ローカルおよびリモートの両方のコンピューター記憶媒体に配置され得る。
【０１２９】
[00135]図８を参照すると、本発明を実施するための例示的なシステムは、コンピューター８１０の形態の汎用コンピューティングデバイスを含む。コンピューター８１０のコンポーネントとしては、処理装置８２０、システムメモリー８３０、およびシステムメモリーを含む様々なシステムコンポーネントを処理装置８２０に結合するシステムバス８２１が挙げられ得るが、これらに限定されない。システムバス８２１は、様々なバスアーキテクチャのいずれかを使用するメモリーバスまたはメモリーコントローラー、周辺バス、およびローカルバスを含む、いくつかのタイプのバス構造のいずれかであってもよい。例として、限定することなく、そのようなアーキテクチャは、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ：業界標準アーキテクチャ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ：マイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ：拡張ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ：ビデオ電子規格協会）ローカルバス、およびメザニン（Ｍｅｚｚａｎｉｎｅ）バスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ：周辺コンポーネント相互接続）バスを含む。
【０１３０】
[00136]コンピューター８１０は、典型的には、様々なコンピューター可読媒体を含む。コンピューター可読媒体は、コンピューター８１０によってアクセスすることができる任意の利用可能な媒体とすることができ、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体の両方を含む。例として、限定することなく、コンピューター可読媒体は、コンピューター記憶媒体および通信媒体を含み得る。コンピューター記憶媒体は、コンピューター可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体の両方を含む。コンピューター記憶媒体としては、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリーもしくは他のメモリーテクノロジ、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または所望の情報を保存するために使用することができ、コンピューター８１０によってアクセスすることができる任意の他の媒体が挙げられるが、これらに限定されない。通信媒体は、典型的には、搬送波または他の伝送機構などの変調データ信号におけるコンピューター可読命令、データ構造、プログラムモジュールまたは他のデータを具体化し、任意の情報伝達媒体を含む。「変調データ信号」という用語は、信号内の情報を符号化する方法で設定または変更された特徴のうちの１つまたは複数を有する信号を意味する。例として、限定することなく、通信媒体は、有線ネットワークまたは有線直接接続などの有線媒体、ならびにアコースティック、ＲＦ、赤外線および他のワイヤレス媒体などのワイヤレス媒体を含む。上記のいずれかの組合せも、コンピューター可読媒体の範囲内に含まれるべきである。
【０１３１】
[00137]システムメモリー８３０は、読取り専用メモリー（ＲＯＭ）８３１およびランダムアクセスメモリー（ＲＡＭ）８３２などの揮発性および／または不揮発性メモリーの形態のコンピューター記憶媒体を含む。スタートアップの間などにコンピューター８１０内の要素間で情報を伝送するのに役立つ基本ルーチンを含む基本入力／出力システム８３３（ＢＩＯＳ）は、典型的には、ＲＯＭ８３１に保存される。ＲＡＭ８３２は、典型的には、処理装置８２０に即座にアクセス可能なおよび／または処理装置８２０が現在動作させているデータおよび／またはプログラムモジュールを含む。例として、限定することなく、図８は、オペレーティングシステム８３４、アプリケーションプログラム８３５、他のプログラムモジュール８３６、およびプログラムデータ８３７を示す。
【０１３２】
[00138]コンピューター８１０は、他のリムーバブル／非リムーバブル媒体、揮発性／不揮発性コンピューター記憶媒体も含み得る。例のみとして、図８は、非リムーバブル不揮発性磁気媒体から読み取るまたはこれに書き込むハードディスクドライブ８４０、リムーバブル不揮発性磁気ディスク８５２から読み取るまたはこれに書き込む磁気ディスクドライブ８５１、およびＣＤ  ＲＯＭまたは他の光学式媒体などの、リムーバブル不揮発性光学ディスク８５６から読み取るまたはこれに書き込む光学ディスクドライブ８５５を示す。ハードディスクドライブ８４０は、磁気媒体に書き込むまたはこれから読み取ることができる１つまたは複数の磁気ヘッドを含む回転式磁気媒体として実施され得る。例示的な動作環境で使用することができる他のリムーバブル／非リムーバブル揮発性／不揮発性コンピューター記憶媒体としては、磁気テープカセット、フラッシュメモリーカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが挙げられるが、これらに限定されない。ハードディスクドライブ８４１は、典型的には、インターフェイス８４０などの非リムーバブルメモリーインターフェイスを介してシステムバス８２１に接続され、磁気ディスクドライブ８５１および光学ディスクドライブ８５５は、典型的には、インターフェイス８５０などのリムーバブルメモリーインターフェイスによってシステムバス８２１に接続される。
【０１３３】
[00139]上記に述べ、図８に示されるドライブおよびそれに関連するコンピューター記憶媒体は、コンピューター８１０のコンピューター可読命令、データ構造、プログラムモジュールおよび他のデータの記憶装置を提供する。図８では、例えば、ハードディスクドライブ８４１は、オペレーティングシステム８４４、アプリケーションプログラム８４５、他のプログラムモジュール８４６、およびプログラムデータ８４７を保存するものとして示されている。これらのコンポーネントは、オペレーティングシステム８３４、アプリケーションプログラム８３５、他のプログラムモジュール８３６、およびプログラムデータ８３７と同じであってもよく、これらとは異なっていてもよいことに留意されたい。オペレーティングシステム８４４、アプリケーションプログラム８４５、他のプログラムモジュール８４６、およびプログラムデータ８４７には、ここでは、少なくともこれらが異なるコピーであることを示すために異なる番号が与えられている。ユーザーは、キーボード８６２および一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス８６１などの入力デバイスを介して、コマンドおよび情報をコンピューター８１０に入力することができる。他の入力デバイス（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナーなどを含み得る。これらおよび他の入力デバイスは、多くの場合、システムバスに結合されたユーザー入力インターフェイス８６０を介して処理装置８２０に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェイスおよびバス構造によって接続され得る。モニター８９１または他のタイプのディスプレイデバイスも、ビデオインターフェイス８９０などのインターフェイスを介してシステムバス８２１に接続される。モニターに加えて、コンピューターは、出力周辺インターフェイス８９５を介して接続され得るスピーカー８９７およびプリンター８９６などの他の周辺出力デバイスも含み得る。
【０１３４】
[00140]コンピューター８１０は、リモートコンピューター８８０などの１つまたは複数のリモートコンピューターへの論理接続を使用して、ネットワーク化環境で動作し得る。リモートコンピューター８８０は、パーソナルコンピューター、サーバー、ルーター、ネットワークＰＣ、ピアデバイスまたは他の共通ネットワークノードであってもよく、典型的には、コンピューター８１０に関して上記に記載された要素の多くまたはすべてを含むが、図８にはメモリー記憶デバイス８８１のみが示されている。図８に図示された論理接続は、ローカルエリアネットワーク（ＬＡＮ）８７１およびワイドエリアネットワーク（ＷＡＮ）８７３を含むが、他のネットワークも含み得る。そのようなネットワーキング環境は、オフィス、エンタープライズ規模のコンピューターネットワーク、イントラネットおよびインターネットにおいてありふれたものである。
【０１３５】
[00141]ＬＡＮネットワーキング環境で使用されるとき、コンピューター８１０は、ネットワークインターフェイスまたはアダプター８７０を介してＬＡＮ８７１に接続される。ＷＡＮネットワークキング環境で使用されるとき、コンピューター８１０は、典型的には、モデム８７２またはインターネットなどのＷＡＮ８７３を介して通信を確立するための他の手段を含む。内部でも外部でもよいモデム８７２は、ユーザー入力インターフェイス８６０、または他の適切な機構を介してシステムバス８２１に接続され得る。ネットワーク化環境では、コンピューター８１０に関して図示されたプログラムモジュールまたはその部分は、リモートメモリー記憶デバイスに保存され得る。例として、限定することなく、図８は、メモリーデバイス８８１に常駐するものとしてのリモートアプリケーションプログラム８８５を示す。示されたネットワーク接続は例示的なものであり、コンピューター間の通信リンクを確立する他の手段が使用され得ることを理解されたい。
【０１３６】
[00142]この発明の少なくとも１つの実施形態のいくつかの態様について記載してきたが、当業者であれば、様々な変更、修正、および改善を容易に思いつくことを理解されたい。
【０１３７】
[00143]例えば、それぞれのシーケンスの実行について観測された相対時間に基づいて、スタートアップ時に、完全スタートアップシーケンスを実行するか、またはその後にスタートアップシーケンスの一部分が続く休止状態からの再開を実行するかの判定が行われることが記載されている。シャットダウン時に同様の処理を実行することができることを理解されたい。シャットダウン時に実行される場合、休止状態ファイルを保存することまたは保存しないことによって、決定を実施することができる。したがって、スタートアップ時に行われるものとして記載された動作を、その代わりにシャットダウン時に実行することができ、その逆もまた同様であることを理解されたい。
【０１３８】
[00144]上記に記載された利点は、他の方法で実現され得る。例えば、状態をセットアップするプロセスの間にコンピューターのＣＰＵおよびディスクなどの他のコンポーネントによる作業を回避することに加えて、そのような手法は、シャットダウンコマンドに応答して、休止状態ファイルにデータを保存することを可能にし、その後のスタートアップコマンドへの応答の間および／またはスタートアップコマンドの処理が完了した後にユーザーのエクスペリエンスを促進するのに役立つ。例えば、ユーザーがログオンするとき、いくつかのアプリケーションが起動され得る（例えば、ＷＩＮＤＯＷＳ（登録商標）  ＥＸＰＬＯＲＥＲ  Ｗｅｂブラウザー、スタートアップアプリケーションなど）。オペレーティングシステムは、スタートアップコマンドの処理が完了した後の規定された期間の間にユーザーがアクセスするファイル（およびそのオフセット）を明示的に追跡し得る。これらのアプリケーション、または他のコンポーネントをメモリーに読み込んで、シャットダウンコマンドのその後の処理の間に作成された休止状態ファイルに保存することができる。このようにして、これらのアプリケーション、または他のコンポーネントは、これらのアプリケーションを起動することの一部としてランダムに読み込む必要なく、順次ディスクからメモリーに読み込まれる。
【０１３９】
[00145]また、ユーザーログオンおよびログオフについて記載されている。複数のユーザーがコンピューターにログオンするシナリオにおいて、シャットダウンコマンドが提供され得ることを理解されたい。シャットダウンシーケンスが部分的に実行され、次いで、休止状態動作が実行される場合、部分的なシャットダウンシーケンスは複数のユーザーのログオフをもたらし得るが、それにもかかわらず、上記に記載された技法が適用され得る。
【０１４０】
[00146]例えば、本明細書に記載された技法を使用して、ユーザー介入なしで自動化サービスを提供することができる。例えば、部分的なシャットダウンシーケンスを実行し、次いで、休止することによってシャットダウンコマンドに応答したコンピューティングデバイスは、真夜中などの、ユーザーアクティビティが予期されていないときに自動的に起動（ｗａｋｅ）するように構成され得る。起動すると、コンピューティングデバイスは、ソフトウェア更新を適用するなどのメンテナンスアクティビティを実行し得る。ユーザーにとっては、メンテナンスアクティビティがユーザーに対して透過的になるように、コンピューティングデバイスが一日の終わりにシャットダウンされたかのように見える。そのような機能は、例えば、コンピューティングデバイスが、シャットダウンコマンドに応答して、メンテナンスアクティビティまたは適用すべきパッチがあると検出し、都合の良い時間に起動するように備えた場合に実施され得る。起動すると、コンピューティングデバイスは、必要であれば、パッチを適用するなどのいかなるメンテナンスアクティビティも実行する。次いで、システムは完全再起動を行ってから、その後に休止状態が続く部分的なシャットダウンを再び実行する。このシナリオにより、ソフトウェアベンダーが、メンテナンスアクティビティをユーザーの目に見えないようにするソリューションを提供することが可能になる。この機能をコンシューマーＰＣとエンタープライズＰＣの両方に適用することができる。ユーザーエクスペリエンスを改善することに加えて、そのような手法は、エンタープライズユーザーの場合は特に、電力を節約することもできる。
【０１４１】
[00147]そのような変更形態、修正形態、および改良形態は、この開示の一部であることを意図するものであり、本発明の趣旨および範囲内にあることを意図するものである。したがって、上記の記載および図面は例にすぎない。
【０１４２】
[00148]本発明の上記に記載された実施形態を任意の多数の方法で実施することができる。例えば、実施形態は、ハードウェア、ソフトウェアまたはそれらの組合せを使用して実施され得る。ソフトウェアで実施されるとき、単一のコンピューターにおいて提供されるか、または複数のコンピューター間で分散されるかにかかわらず、任意の適切なプロセッサまたはプロセッサの集合体でソフトウェアコードを実行することができる。そのようなプロセッサは、集積回路コンポーネントに１つまたは複数のプロセッサを有する集積回路として実施され得る。ただし、プロセッサは、任意の適切な形式の回路を使用して実施され得る。
【０１４３】
[00149]さらに、コンピューターは、ラックマウントコンピューター、デスクトップコンピューター、ラップトップコンピューター、またはタブレットコンピューターなどのいくつかの形態のいずれかで具体化され得ることを理解されたい。加えて、コンピューターは、一般的にはコンピューターとはみなされないが、適切な処理機能を有する、携帯情報端末（ＰＤＡ）、スマートフォンまたは任意の他の適切なポータブルもしくは固定電子デバイスを含むデバイスで具体化され得る。
【０１４４】
[00150]また、コンピューターは、１つまたは複数の入力および出力デバイスを有し得る。これらのデバイスを、とりわけ、ユーザーインターフェイスを表示するために使用することができる。ユーザーインターフェイスを提供するために使用することができる出力デバイスの例としては、出力の視覚表現のためのプリンターまたはディスプレイ画面および出力の音響表現のためのスピーカーまたは他のサウンド生成デバイスが挙げられる。ユーザーインターフェイスに使用することができる入力デバイスの例としては、キーボード、およびマウス、タッチパッドなどのポインティングデバイス、およびデジタル化タブレットが挙げられる。別の例として、コンピューターは、音声認識を介してまたは他の可聴形式で入力情報を受け取ることができる。
【０１４５】
[00151]そのようなコンピューターは、ローカルエリアネットワークまたはワイドエリアネットワークとして、エンタープライズネットワークまたはインターネットなどを含む、任意の適切な形態の１つまたは複数のネットワークによって相互接続され得る。そのようなネットワークは、任意の適切な技術に基づくことができ、任意の適切なプロトコルに従って動作することができ、ワイヤレスネットワーク、有線ネットワークまたは光ファイバーネットワークを含み得る。
【０１４６】
[00152]また、本明細書において概説した様々な方法またはプロセスは、様々なオペレーティングシステムまたはプラットフォームのうちの任意の１つを用いる１つまたは複数のプロセッサで実行可能なソフトウェアとして符号化され得る。加えて、いくつかの適切なプログラミング言語および／またはプログラミングツールもしくはスクリプティングツールのいずれかを使用して、そのようなソフトウェアを書くことができ、フレームワークまたは仮想マシンで実行される実行可能な機械言語コードまたは中間コードとしてコンパイルすることもできる。
【０１４７】
[00153]この点において、本発明は、１つまたは複数のコンピューターまたは他のプロセッサで実行されたときに、上記に述べた本発明の様々な実施形態を実施する方法を実行する１つまたは複数のプログラムで符号化されたコンピューター可読記憶媒体（または複数のコンピューター可読媒体）（例えば、コンピューターメモリー、１つまたは複数のフロッピーディスク（登録商標）、コンパクトディスク（ＣＤ）、光学ディスク、デジタルビデオディスク（ＤＶＤ）、磁気テープ、フラッシュメモリー、フィールドプログラマブルゲートアレイもしくは他の半導体デバイスにおける回路構成、または他の非一時的な有形コンピューター記憶媒体）として具体化され得る。１つまたは複数のコンピューター可読記憶媒体は、それに保存された１つまたは複数のプログラムを１つまたは複数の異なるコンピューターまたは他のプロセッサに読み込んで、上記に述べた本発明の様々な態様を実施することができるように、可搬式とすることができる。本明細書において使用される場合、「非一時的コンピューター可読記憶媒体」という用語は、製品（ｍａｎｕｆａｃｔｕｒｅ）（すなわち、製造品（ａｒｔｉｃｌｅ  ｏｆ  ｍａｎｕｆａｃｔｕｒｅ））または機械とみなすことができるコンピューター可読媒体のみを包含する。あるいはまたはそれに加えて、本発明は、伝搬信号などの、コンピューター可読記憶媒体以外のコンピューター可読媒体として具体化され得る。
【０１４８】
[00154]「プログラム」または「ソフトウェア」という用語は、本明細書において概括的な意味で使用されて、コンピューターまたは他のプロセッサが上記に述べた本発明の様々な態様を実施するようにプログラムするのに用いることができる任意のタイプのコンピューターコードまたはコンピューター実行可能命令のセットを指す。加えて、この実施形態の一態様によれば、実行されたときに、本発明の方法を実行する１つまたは複数のコンピュータープログラムは、単一のコンピューターまたはプロセッサに常駐する必要はないが、いくつかの異なるコンピューターまたはプロセッサ間でモジュール式に分散されて、本発明の様々な態様を実施し得ることを理解されたい。
【０１４９】
[00155]コンピューター実行可能命令は、１つまたは複数のコンピューターまたは他のデバイスによって実行される、プログラムモジュールなどの多くの形態であってもよい。概して、プログラムモジュールは、特定のタスクを実行するまたは特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。典型的には、プログラムモジュールの機能を、様々な実施形態において所望通りに組み合わせるまたは分散することができる。
【０１５０】
[00156]また、データ構造は、任意の適切な形態でコンピューター可読媒体に保存され得る。例示を簡略化するために、データ構造はデータ構造内のロケーションを介して関連するフィールドを有するものとして示され得る。そのような関係は、そのフィールド用の記憶装置に、フィールド間の関係を伝えるコンピューター可読媒体内のロケーションを割り当てることによって、同じように実現され得る。しかし、データ要素間の関係を確立するポインター、タグまたは他の機構を使用することによってなど、任意の適切な機構を使用して、データ構造のフィールド内の情報間の関係を確立することができる。
【０１５１】
[00157]本発明の様々な態様を、単独で、組み合わせて、または上記に記載された実施形態において具体的に述べられていない様々な配置で使用することができ、したがって、その適用において、上記の説明に記載されたまたは図面に示されたコンポーネントの詳細および配置に限定されない。例えば、１つの実施形態に記載された態様を、他の実施形態に記載された態様と任意の方法で組み合わせることができる。
【０１５２】
[00158]また、本発明は、その例が提供された方法として具体化され得る。方法の一部として実行される行為は、任意の適切な方法で順序付けられ得る。したがって、示されている順序とは異なる順序で行為が実行される実施形態を構成することができ、これらの実施形態は、例示的な実施形態において順次的な行為として示されていなくても、いくつかの行為を同時に実行することを含み得る。
【０１５３】
[00159]クレーム要素を修正するための、特許請求の範囲における「ｆｉｒｓｔ」、「ｓｅｃｏｎｄ」、「ｔｈｉｒｄ」などの順序を表す語の使用は、それ自体で任意の優先、上位、または別のクレーム要素に対するあるクレーム要素の順序もしくは方法の行為が実行される時間的順序を暗示するものではなく、特定の名前を有するあるクレーム要素を、同じ名前を有する（ただし、順序を表す語を使用するための）別の要素と区別して、これらのクレーム要素を区別するためのラベルとして使用されるにすぎない。
【０１５４】
[00160]また、本明細書において使用される語法および用語は説明を目的とするものであり、限定的であるとみなされるべきではない。本明細書における「ｉｎｃｌｕｄｉｎｇ」、「ｃｏｍｐｒｉｓｉｎｇ」または「ｈａｖｉｎｇ」、「ｃｏｎｔａｉｎｉｎｇ」、「ｉｎｖｏｌｖｉｎｇ」およびその変形形態の使用は、それ以降に列挙される項目およびその等価物ならびに追加の項目を包含するものである。
【図７】
0005937101.tif 000002
【図１】
0005937101.tif 000003
【図２】
0005937101.tif 000004
【図３】
0005937101.tif 000005
【図４】
0005937101.tif 000006
【図５】
0005937101.tif 000007
【図６】
0005937101.tif 000008
【図８】
0005937101.tif 000009