(57)【特許請求の範囲】
【請求項１】
複数のプロセッサを有するコンピューティング装置の動作方法であって、前記方法は、
不揮発性記憶から第１のハイバネーション情報を読み出して前記コンピューティング装置のオペレーティングシステムの第１の部分を復帰することにより、ハイバネーションモードから前記コンピューティング装置を部分的にレジュームするステップであって、前記オペレーティングシステムの前記第１の部分はマルチプロセッササポートを有する、ステップと、
前記オペレーティングシステムの復帰された前記第１の部分を用いて、前記不揮発性記憶から第２のハイバネーション情報を読み出し、前記コンピューティング装置の前記オペレーティングシステムの追加の第２の部分を復帰し及び前記ハイバネーションモードに入ったときの前記コンピューティング装置の状態を復帰するステップと、
を有し、
前記不揮発性記憶からの前記第２のハイバネーション情報の読み出しは、前記オペレーティングシステムの前記第１の部分を読み出すときのコンピューティング環境でサポートされていない前記プロセッサのうちの１つを用いる、方法。
【請求項２】
前記不揮発性記憶に圧縮形式で前記第２のハイバネーション情報を格納するステップ、
を更に有する請求項１に記載の方法。
【請求項３】
前記コンピューティング装置の状態を復帰するステップは、前記不揮発性記憶から前記の圧縮された第２のハイバネーション情報の第１の部分をリードするステップと、前記圧縮された第２のハイバネーション情報の前記第１の部分をバッファに記録するステップと、を有し、
前記圧縮された第２のハイバネーション情報の前記第１の部分が前記バッファに記録されると、前記第２の圧縮されたハイバネーション情報の前記第１の部分を前記バッファから読み出し、前記不揮発性記憶から前記圧縮された第２のハイバネーション情報の第２の部分をリードするのと同時に前記圧縮された第２のハイバネーション情報の前記第１の部分を解凍する、
請求項２に記載の方法。
【請求項４】
前記バッファからの読み出し及び前記圧縮された第２のハイバネーション情報の前記第１の部分の解凍は、前記複数のプロセッサのうちの第１のプロセッサにより実行され、
前記不揮発性記憶からの前記圧縮された第２のハイバネーション情報の前記第２の部分のリードは、前記複数のプロセッサのうちの第２の異なるプロセッサにより実行される、
請求項３に記載の方法。
【請求項５】
前記第１及び第２のプロセッサのうちの１つは、同期入力／出力動作を介して、前記不揮発性記憶から前記圧縮された第２のハイバネーション情報の前記第１及び第２の部分のうちの１つをリードする、
請求項４に記載の方法。
【請求項６】
前記コンピューティング装置を部分的にレジュームするステップは、前記コンピューティング装置のプレオペレーティングシステム環境でレジュームローダを実行するステップを有し、
前記オペレーティングシステムの前記第１の部分は、前記コンピューティング装置の前記オペレーティングシステム内のカーネルローダを有する、
請求項１に記載の方法。
【請求項７】
前記第１のハイバネーション情報及び前記第２のハイバネーション情報は、ファイルに記録される、
請求項１に記載の方法。
【請求項８】
揮発性記憶媒体と、
第１の部分、第２の部分並びに前記第１の部分及び前記第２の部分を識別するヘッダ情報を含むハイバネーション情報を有する不揮発性記憶媒体と、
コンピュータ実行可能命令を有するファームウェアと、
を有し、
前記コンピュータ実行可能命令は、実行されると、前記第１の部分に基づき前記揮発性記憶媒体に情報を格納するために第１のレジュームローダを実施し、
前記第１の部分は、実行されると、前記第２の部分に基づき前記揮発性記憶媒体に情報を格納するために第２のレジュームローダを実施するコンピュータ実行可能命令の表現を有し、
前記ハイバネーション情報の前記第１の部分は、１より多いプロセッサを有するコンピューティング装置のオペレーティングシステムの一部を復帰するために用いられるデータを有し、前記オペレーティングシステムの前記一部は、マルチプロセッササポートを有し、前記第２のレジュームローダの実施は、不揮発性記憶媒体からの前記ハイバネーション情報の前記第１の部分を読み出すときのコンピューティング環境でサポートされない、前記プロセッサのうちの１つを用いて、前記不揮発性記憶媒体から前記ハイバネーション情報の前記第２の部分を読み出す、
システム。
【請求項９】
前記第２の部分は、前記不揮発性記憶媒体に圧縮形式で格納される、請求項８に記載のシステム。
【請求項１０】
前記第２のレジュームローダは、ハイバネーションのときの前記システムの状態を復帰し、前記の復帰は前記複数のプロセッサを用い、前記複数のプロセッサを用いる前記の復帰は、
前記複数のプロセッサのうちの第１のプロセッサで、前記不揮発性記憶媒体から前記第２の部分のセグメントをリードし、前記第２の部分の圧縮されたセグメントをバッファに記録し、
前記バッファから前記第２の部分のセグメントを読み出し、前記圧縮されたセグメントを解凍する、
ことを有する、請求項９に記載のシステム。
【請求項１１】
複数のプロセッサを有するコンピューティング装置の作動方法であって、前記方法は、
ファームウェアに格納されたコンピュータ実行可能命令により、
不揮発性メモリに格納されたハイバネーション情報の第１の部分にアクセスするステップと、
前記ハイバネーション情報の前記第１の部分に基づき運用メモリに第１の情報を格納するステップと、
前記第１の情報に含まれるコンピュータ実行可能命令により、
不揮発性メモリに格納された前記ハイバネーション情報の第２の部分にアクセスするステップと、
前記ハイバネーション情報の前記第２の部分に基づき運用メモリに第２の情報を格納するステップと、
を有し、
前記第１の情報は、前記コンピューティング装置のオペレーティングシステムの一部を復帰するために用いられる情報を有し、前記オペレーティングシステムの前記一部は、マルチプロセッササポートを有し、前記ハイバネーション情報の前記第２の部分にアクセスするステップは、前記ハイバネーション情報の前記第１の部分にアクセスするときのコンピューティング環境でサポートされない、前記プロセッサのうちの１つを用いる、方法。
【請求項１２】
ハイバネーションのときに、
前記不揮発性メモリ内の前記ハイバネーション情報の前記第１の部分に、前記第１の情報を記録するステップと、
前記不揮発性メモリ内の前記ハイバネーション情報の前記第２の部分に、前記第２の情報を記録するステップであって、前記第２の情報は、前記ハイバネーションのときの前記コンピューティング装置の状態に関する状態情報を有する、ステップと、
を更に有する請求項１１に記載の方法。
【請求項１３】
前記第１の部分に前記第１の情報を記録する前に、前記第１の情報を第１の圧縮アルゴリズムで圧縮するステップと、
前記第２の部分に前記第２の情報を記録する前に、前記第２の情報を第２の圧縮アルゴリズムで圧縮するステップと、
を更に有する請求項１２に記載の方法。
【請求項１４】
前記運用メモリに前記第１の情報を格納するために前記第１の部分にアクセスするために用いられるべき前記コンピューティング装置の少なくとも１つのコンポーネントの能力に基づき、前記第１の情報を圧縮する第１の圧縮アルゴリズムを動的に選択するステップと、
前記運用メモリに前記第２の情報を格納するために前記第２の部分にアクセスするために用いられるべき前記コンピューティング装置の前記複数のプロセッサのうちの一部の能力及びディスク入力速度のうちの少なくとも１つに基づき、前記第２の情報を圧縮する第２の圧縮アルゴリズムを動的に選択するステップと、
を有する請求項１３に記載の方法。
【請求項１５】
前記ハイバネーション情報の前記第２の部分にアクセスするステップは、前記不揮発性メモリから前記第２の部分のセグメントをリードし、前記セグメントをバッファリングするステップを有し、
運用メモリに第２の情報を格納するステップは、前記バッファリングされたセグメントを読み出すステップを有する、
請求項１１に記載の方法。
【請求項１６】
前記第１の情報は、実行されると、前記第１の部分に基づき前記運用メモリに情報を格納するためにブートレベルレジュームローダを実施するコンピュータ実行可能命令を有し、
前記コンピュータ実行可能命令は、実行されると、前記第２の部分に基づき前記運用メモリに情報を格納するためにカーネルレベルレジュームローダを実施する、
請求項１１に記載の方法。
【請求項１７】
前記ハイバネーション情報の前記第２の部分の前記のアクセスは、非同期入力／出力動作を介し、前記ハイバネーション情報の前記第１の部分の前記のアクセスは、非同期ではない入力／出力動作を介する、請求項１１に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータは、完全な動作から完全なシャットダウンまで、幾つかの動作モードを有する。完全な動作中は、オペレーティングシステムの実行中部分を定めるソフトウェアは、不揮発性メモリから運用メモリにロードされている。運用メモリは、通常、揮発性メモリであり、揮発性メモリからはソフトウェアがより早く実行できる。コンピュータは、「起動」プロセスを通じて、この完全な動作モードに入る。起動プロセスは、ハードウェアを設定し、コンピュータのオペレーティングシステムをロードする。起動プロセスの一部として、ドライバがインストールされ、オペレーティングシステムサービスが開始される。
【０００２】
コンピュータがユーザによる動作のための準備が整うと、ユーザは該コンピュータにログオンできる。このログオンは、ログオンするユーザに固有のプロファイルに基づくコンピュータの更なる設定を含み得る。次に、自動的に又はユーザ入力に応答して、アプリケーションがロードされ、該アプリケーションはコンピュータ装置のハードウェア及びオペレーティングシステムサービスの機能を利用して実行可能になっても良い。
【０００３】
ソフトウェアをロードする過程で、オペレーティングシステムのためか又はアプリケーションのためかに拘わらず、メモリが割り当て、ソフトウェアのパラメータがコンピュータのハードウェア設定又はユーザプロファイルに基づき値を割り当てられ、及び他の設定動作が実行されても良い。これらの動作は、コンピューティング装置の「状態」を確立する。ユーザが実行中アプリケーション又はオペレーティングシステムサービスと相互作用するためにコマンドを与えるとき、システムの動作状態を定める該システムのメモリ及び他のパラメータに対する更なる変更が行われても良い。
【０００４】
完全なシャットダウンモードでは、コンピュータのハードウェアコンポーネントに電力が供給されない。揮発性メモリは電源がオフのときには情報を保持しないので、如何なるソフトウェア又は状態情報も揮発性メモリに格納されていない。むしろ、後に完全な動作モードのためにコンピュータを再設定するために用いられる情報は、不揮発性メモリに格納される。
【０００５】
コンピュータは、シャットダウンと呼ばれる過程を通じてシャットダウンモードに入る。
【０００６】
シャットダウン中、コンピュータを再設定するために必要であり得る情報は、不揮発性メモリに未だ格納されていない場合、不揮発性メモリに格納されても良い。
【０００７】
不揮発性メモリから揮発性メモリへコピーされたソフトウェア及び他の設定情報は、後続の起動プロセスのときに再生成できるので、不揮発性メモリにコピーバックされない。
【０００８】
完全なシャットダウンに加えて、コンピュータの一部の又は全部のハードウェアコンポーネントへの電力がオフにされる省電力モードがあっても良い。スリープモードと呼ばれる場合もある省電力モードでは、コンピュータプロセッサ、ネットワークインタフェース、及び場合によっては他のコンポーネントに対して、電力はオフにされる。しかしながら、電力は揮発性メモリのために保持される。このように、ブート又はコンピュータの後続の動作中に生成される状態情報は、揮発性メモリに保持される。再び電力がプロセッサに供給されると、プロセッサは、スリープモードに入るときに中止した状態で動作を再開しても良い。
【０００９】
更なるモードは、ハイバネイトモードと呼ばれることがある。コンピュータは、ハイバネーションと呼ばれる過程を通じてこのモードに入る。ハイバネーション中、コンピュータの動作状態をキャプチャするファイルが生成され、不揮発性メモリ、通常はハードディスクに格納される。システムの状態を表すデータは、ハイバネーションファイルに格納されるときに圧縮されても良い。ハイバネイトからレジュームする過程の間、このファイルは、ディスクからリードされ、解凍され、ハイバネーションのときに存在していたようにコンピュータの状態を復帰するために用いられても良い。ハイバネイトからのレジュームは、ハイバネイトするときに存在していた動作中に設定されたパラメータ又はソフトウェアのコピーを揮発性メモリ内に復帰させ、ユーザ状態も復帰できるようにする。
【００１０】
ハイバネーションからのレジュームは、幾つかの理由で完全な起動を実行するよりも速い。１つの理由は、ハイバネーションファイル内の状態情報を揮発性メモリにコピーすることで、完全な起動プロセスの結果を再生成し、同時に、ＣＰＵ消費、デバイスの初期化、及びブート中に行われるべき多くの他の種類の作業のような起動プロセスのステップを実行するための時間の消費を回避するからである。さらに、起動中にアクセスされる情報は、多くの異なるファイルに格納され、ロード及び設定するためにアクセスされる、場合によってはオペレーティングシステム内の何万個ものコンポーネントであり得る異なるコンポーネントを表す。これらのコンポーネント、及びそれらを設定するためにアクセスされる情報は、ハードディスク全体にランダムに分散し得る。ハードディスクドライブ、及び幾つかの他の形式の大容量記憶装置は、シーケンシャルデータにアクセスするときに最も効率的であり、分散したデータへのランダムなアクセスは、多大なディスクアクセス時間を含み、その結果、長い起動プロセスをもたらし得る。これに対し、ハイバネーションファイル内の情報はディスクにシーケンシャルに格納され得るので、ハイバネーションファイルをリードする際のアクセス時間は短い。
【発明の概要】
【課題を解決するための手段】
【００１１】
コンピューティング装置がハイバネーションモードからレジュームする速度を増大するために、コンピューティング装置はハイバネーションモードから複数段階でレジュームするよう構成されても良い。各段階は、ハイバネーション情報に基づき、コンピューティング装置の状態を部分的に復帰しても良い。複数の段階は異なる環境で実行されても良いので、コンピューティング装置の異なるリソースが異なる段階で用いられる。幾つかの実施形態では、ある段階中の処理は、レジュームの別の段階が実行される環境を確立しても良い。
【００１２】
幾つかの実施形態では、レジューム処理の段階は、第１のコンピュータ実行可能命令セットの実行により行われても良い。これらの命令は、プレオペレーティングシステム環境で実行されても良い。例えば、命令は、コンピューティング装置のＢＩＯＳの一部であるブートローダを有しても良く、又はコンピューティング装置のファ―ムウェア内に存在しても良い。これらの命令は、不揮発性メモリに格納されたハイバネーション情報の第１の部分の運用メモリへの転送を制御しても良い。第１の環境は、プレオペレーティングシステム環境で従来のような比較的希薄な（sparse）環境であっても良い。第１の命令セットは、ハイバネーション情報を有する記憶媒体への非同期アクセスをサポートしない単一のプロセッサで実行されても良い。
【００１３】
第１のコンピュータ実行可能命令セットの実行は、ハイバネーション情報の第２の部分の不揮発性メモリから運用メモリへの転送を制御するために第２のコンピュータ実行可能命令セットが実行され得る第２の環境を確立しても良い。第２の環境は、より豊富なリソースセットを有しても良い。
【００１４】
例えば、第２の環境は、複数のプロセッサに対するサポートを有しても良い。１より多いプロセッサは、第２の段階での処理を実行するために用いられ、ハイバネーションからのレジュームを完了するために必要な処理負荷を共有しても良い。例えば、１又は複数のプロセッサは、ハイバネーション情報をリードして、１又は複数の他のプロセッサによる処理のために利用可能にしても良い。これらのリード動作は、同期して実行されても良い。他のプロセッサは、データを解凍して、必要に応じて運用メモリへ転送しても良い。
【００１５】
代替又は追加で、豊かなリソースセットは、ハイバネーション情報を含む記憶媒体への非同期アクセスを可能にするメモリアクセス機能を有しても良い。例えば、第２の環境は、従来のようにオペレーティングシステム環境で非同期ディスク入力／出力（Ｉ／Ｏ）をサポートしても良い。コンピューティング装置が単一プロセッサを有する場合、プロセッサは、不揮発性記憶からハイバネーション情報の別のセグメントをリードするためにＩ／Ｏ動作が保留されている期間中に、ハイバネーション情報のセグメントに基づき、コンピューティング装置の状態を復帰する処理を実行できるので、非同期アクセスの使用は、レジュームを高速化できる。
【００１６】
ハイバネーションからの複数段階のレジュームを実施するために、各レジューム段階中に復帰される運用メモリからの情報は、別個に記録されても良い。この情報は、各段階で復帰されるべき情報を識別するメタデータとともに格納されても良い。幾つかの実施形態では、ハイバネーション情報は、運用メモリに戻ったときに各先行する段階のために記録された情報が後続の段階のための環境を確立するように区分されても良い。幾つかの実施形態では、第１の段階で復帰した情報は、オペレーティングシステムを通じてレジューム処理を完了するために十分な、該オペレーティングシステムの一部を再生成する。オペレーティングシステムのこれらの部分は、ハードウェアアクセスをサポートするオペレーティングシステムのカーネルの部分及びカーネルモードレジュームローダを有してもよい。
【００１７】
一部又は全部のハイバネーション情報は、圧縮形式で記録されても良い。幾つかの実施形態では、１又は複数の適切な圧縮アルゴリズムは、プロセッサ及びコンピューティング装置のディスクＩ／Ｏの能力に基づき動的に選択されても良い。例えば、圧縮アルゴリズムは、プロセッサの数及び処理速度に基づき、及びコンピューティング装置内のディスクのＩ／Ｏ速度に基づき、選択されても良い。圧縮アルゴリズムは、より多くの処理能力が利用可能なときに更なる圧縮の使用を支持するという基準に基づき選択されても良い。基準は、ハイバネーション情報を格納しているディスク又は他の不揮発性メモリへのアクセス時間が遅いとき、更なる圧縮を支持しても良い。ハイバネーション情報と共に格納されるメタデータは、使用される圧縮の特性を示すパラメータ値を有しても良い。
【００１８】
一態様によると、少なくとも１つのプロセッサを有するコンピューティング装置の動作方法が実施されても良い。方法は、ハイバネーションのときに、少なくとも１つの圧縮アルゴリズムを動的に選択するステップと、ハイバネーション情報の第１の部分を不揮発性メモリに記録するステップであって、前記第１の部分は、前記ハイバネーションのときの前記コンピューティング装置の状態を表す運用メモリからの情報を有する、ステップと、前記ハイバネーション情報の第２の部分を前記不揮発性メモリに記録するステップであって、前記第２の部分は、前記ハイバネーションのときの前記コンピューティング装置の前記状態を表す前記運用メモリからの情報を有する、ステップと、を有しても良い。前記第１及び／又は前記第２の部分は、少なくとも１つの動的に選択された圧縮アルゴリズムのうちの１つの動的に選択された圧縮アルゴリズムに従って圧縮され、前記第１の部分及び前記第２の部分が異なる圧縮量を有するようにしても良い。
【００１９】
別の態様によると、揮発性記憶媒体と、ハイバネーション情報を有する不揮発性記憶媒体とを備えたコンピュータシステムが提供されても良い。前記ハイバネーション情報は、ハイバネーションのときの前記コンピューティング装置の状態の一部を示す第１の情報を格納する第１の部分であって、前記第１の部分は第１の圧縮アルゴリズムで圧縮される、第１の部分と、前記ハイバネーションのときの前記システムの状態に関する第２の情報を格納する第２の部分であって、前記第２の部分は第２の圧縮アルゴリズムで圧縮される、第２の部分と、を有しても良い。前記ハイバネーション情報は、少なくとも前記第２の部分及び前記第２の圧縮アルゴリズムを識別するヘッダ情報を更に有しても良い。
【００２０】
更に別の態様によると、コンピューティング装置の動作方法が提供される。前記方法は、少なくとも１つの圧縮アルゴリズムで、前記コンピューティング装置のオペレーティングシステムの一部を復帰するために用いられる運用メモリからの少なくとも１つの第１の情報、及び前記ハイバネーションのときの前記コンピューティング装置の状態に関する前記運用メモリからの情報を有する第２の情報を圧縮するステップと、不揮発性メモリ内のハイバネーション情報の第１の部分に前記第１の情報を記録するステップと、前記不揮発性メモリ内の前記ハイバネーション情報の第２の部分に前記第２の情報を記録するステップと、前記ハイバネーション情報に関連するメタデータに、前記少なくとも１つの圧縮アルゴリズムの少なくとも１つのパラメータを識別する少なくとも１つの値を記録するステップと、を有する。
【００２１】
以上は、本発明の非限定的な要約であり、添付の請求の範囲により定められる。
【図面の簡単な説明】
【００２２】
添付の図面は、縮尺通りであることを目的としていない。図中、種々の図に示される各々の同一又はほぼ同一の構成要素は、同様の参照符号により表現される。明確化のため、全ての構成要素が全ての図中でラベル付けされない。以下の図面がある。
【図１】本発明の幾つかの実施形態が実装され得るシステムを示す概念的ブロック図である。
【図２】本発明の幾つかの実施形態による、コンピューティング装置におけるハイバネーションシーケンスからのレジュームを説明する機能ブロック図である。
【図３】本発明の幾つかの実施形態による、ハイバネーションシーケンスからコンピューティング装置をレジュームさせるコンピューティング装置の動作方法を説明するフローチャートである。
【図４】本発明の幾つかの実施形態による、複数のプロセッサによるハイバネーション情報のリードを説明するフローチャートである。
【図５】本発明の幾つかの実施形態による、ハイバネーションに入るためのコンピューティング装置の動作方法を説明するフローチャートである。
【図６Ａ】本発明の幾つかの実施形態による、ハイバネーション情報を圧縮する圧縮アルゴリズムを動的に選択する方法のフローチャートである。
【図６Ｂ】本発明の幾つかの実施形態による、ハイバネーション情報を圧縮する圧縮アルゴリズムを動的に選択する方法のフローチャートである。
【図７】本発明の幾つかの実施形態が動作し得る環境を示す、例示的なコンピューティング装置のブロック図である。
【発明を実施するための形態】
【００２３】
出願人は、コンピューティング装置のブートファームウェアの制御下での該コンピューティング装置の状態の復帰を含む、ハイバネーションからの従来のレジュームが、該コンピューティング装置の処理リソースを効率的に利用できないことを認識し及び理解している。コンピューティング装置は、複数のプロセッサを有し得る。しかしながら、ブートファームウェアは、複数のプロセッサをサポートしないかも知れない。さらに、ブートファームウェアは、通常、非同期Ｉ／Ｏをサポートしない。したがって、コンピューティング装置の利用可能リソースは十分に利用されず、これが該コンピューティング装置がハイバネーションモードからレジュームする速度を制限し得る。
【００２４】
出願人は、コンピューティング装置がハイバネーションモードからレジュームする速度を増大するために、コンピューティング装置はハイバネーションモードから複数段階でレジュームするよう構成されても良いことを認識及び理解した。各レジューム段階は、ハイバネーション情報から、コンピューティング装置の状態を部分的に復帰しても良く、後続のレジューム段階の各々は更なる状態情報を復帰する。さらに、各レジューム段階は、連続段階が実行し得る環境を確立しても良い。その結果、レジューム段階は異なる環境で実行されても良く、したがって、コンピューティング装置の異なるリソースが異なる段階で用いられ、レジューム動作を素早く完了するようにできる。
【００２５】
幾つかの実施形態では、ハイバネイト処理からのレジューム段階は、第１のコンピュータ実行可能命令セットの実行により行われても良い。例えば、命令は、コンピューティング装置のＢＩＯＳの一部であるブートローダを有しても良く、又はコンピューティング装置のファ―ムウェア内に存在しても良い。これらの命令は、不揮発性メモリに格納されたハイバネーション情報の第１の部分の運用メモリへの転送を制御しても良い。
【００２６】
これらの命令は、第１の環境で実行されても良い。第１の環境は、プレオペレーティングシステム環境のような比較的希薄な（sparse）環境であっても良い。例えば、第１の命令セットは、ハイバネーション情報を有する記憶媒体への非同期アクセスをサポートしない単一のプロセッサで実行されても良い。
【００２７】
第１のコンピュータ実行可能命令セットの実行は、第２のコンピュータ実行可能命令セットが実行され得る第２の環境を確立しても良い。第２のコンピュータ実行可能命令セットは、不揮発性メモリから運用メモリへのハイバネーション情報の第２の部分の転送を制御しても良い。特殊な例として、プレオペレーティングシステム環境でのブートレベルローダの実行は、結果として、オペレーティングシステムのカーネルレベルローダをレジュームし得る。カーネルレベルローダは、マルチプロセッササポート又は非同期Ｉ／Ｏサポートのような、オペレーティングシステムを通じて提供されるリソースを用いて、揮発性メモリへのハイバネーション情報の転送を制御しても良い。
【００２８】
第２の環境は、第１の環境よりも豊富なリソースセットを有しても良い。オペレーティングシステム環境がマルチプロセッサのサポートを提供するとき、例えば、１より多いプロセッサは、第２の段階での処理を実行するために用いられ、ハイバネーションからのレジュームを完了するために必要な処理負荷を共有しても良い。１又は複数のプロセッサは、不揮発性メモリからハイバネーション情報をリードして、１又は複数の他のプロセッサによる処理のために利用可能にしても良い。例えば、このような１又は複数のプロセッサは、ハイバネーション情報を揮発性メモリ内の共有バッファへ転送しても良い。他のプロセッサは、共有バッファにアクセスし、情報が圧縮形式で格納されている場合は該情報を解凍しても良い。次に、解凍された情報は、運用メモリ内の適切な場所に転送されて戻されても良い。幾つかの実施形態では、不揮発性メモリからハイバネーション情報をリードする１又は複数のプロセッサは、同期Ｉ／Ｏ動作を用いても良い。それにもかかわらず、他のプロセッサが情報を同時に処理して運用メモリへ転送できるので、レジューム処理は、素早く進行し得る。
【００２９】
豊かなオペレーティングシステム環境は、ハイバネーション情報を含む記憶媒体への非同期アクセスを可能にするメモリアクセス機能に対するサポートも有し得る。この機能も、利用可能なプロセッサの数に無関係に、レジューム動作を高速化し得る。例えば、オペレーティングシステム環境は、非同期ディスク入力／出力（Ｉ／Ｏ）をサポートしても良い。したがって、プロセッサは、ハイバネーション情報を不揮発性メモリからバッファとして動作する記憶媒体へ転送しても良い。このバッファは、ハイバネーション情報に基づき状態情報を復帰する処理のためにアクセスされ得る。処理は、他のプロセッサにより実行されても良く、又は非同期リード動作が保留されている間に情報をリードする同じプロセッサにより実行されても良い。したがって、コンピューティング装置が単一プロセッサを有する場合でも、非同期アクセスを用いてレジュームを高速化できる。
【００３０】
別の例として、非同期Ｉ／Ｏがサポートされるとき、非同期Ｉ／Ｏ動作のパラメータは、レジューム動作を高速化するよう設定されても良い。例えば、第２の環境は、保留中の複数のＩ／Ｏ動作を同時にサポートしても良い。このような同時保留動作の数は設定可能であっても良く、このような動作の数は、コンピューティング装置を第２の環境で動作させるための設定の一部として指定されても良い。さらに、各Ｉ／Ｏ動作のサイズを制御するパラメータも、第２の環境の確立の一部として設定されても良い。これらのパラメータは、コンピューティング装置のハードウェアに基づき動的に、又は任意の適切な方法で設定されても良い。
【００３１】
幾つかの実施形態では、ハイバネーションからの複数段階のレジュームを実施するために、各レジューム段階中に復帰される運用メモリからの情報は、別個に記録されても良い。運用メモリからのどの情報を各段階での使用のために格納するかを決定するために、任意の適切な技術が用いられても良い。幾つかの実施形態では、ハイバネーション情報は、ハイバネーションシーケンス中に、コンピューティング装置の状態に基づき動的に決定されても良い。例えば、ハイバネーション情報の格納を管理する、コンピュータオペレーティングシステム内のユーティリティは、第１の段階の後に使用するために復帰されるべき、オペレーティングシステムのコンポーネントのリストでプログラミングされても良い。ハイバネイトユーティリティは、オペレーティングシステムにより保持されるメモリ管理構造の中で、これらのコンポーネントにより用いられるメモリページを識別しても良い。これらのメモリページは、第１の段階に関連するハイバネーション情報の部分の一部として格納されても良い。
【００３２】
ハイバネーション情報は、任意の適切な方法で格納され、各段階に適切なハイバネーション情報の部分が該段階のレジュームローダにより識別できるようにしても良い。例えば、ハイバネーション情報は、多段レジュームの各段階で復帰されるべき情報を識別するメタデータとともに格納されても良い。ハイバネーション情報がハイバネーションファイルとして格納される実施形態では、ファイルのヘッダはメタデータを格納しても良い。しかしながら、他の実装で代替されても良い。
【００３３】
幾つかの実施形態では、一部又は全部のハイバネーション情報は、圧縮形式で記録されても良い。幾つかの実施形態では、適切な圧縮アルゴリズムは、プロセッサ及びコンピューティング装置のディスクＩ／Ｏの能力に基づき動的に選択されても良い。例えば、圧縮アルゴリズムは、プロセッサの数及び処理速度に基づき、及びコンピューティング装置内のディスクのＩ／Ｏ速度に基づき、選択されても良い。
【００３４】
幾つかの実施形態では、圧縮アルゴリズムは、より多くの処理能力が利用可能なときに更なる圧縮の使用を好むという基準に基づき選択されても良い。また、高い圧縮率を有する圧縮アルゴリズムは、ハイバネーション情報を格納しているディスク又は他の不揮発性メモリへのアクセス時間が遅いときに選択されても良い。
【００３５】
幾つかの実施形態では、レジュームの異なる段階は異なる環境で実行されるので、異なる圧縮アルゴリズムは、異なる段階で異なる性能の利益を生み出し得る。したがって、異なる圧縮アルゴリズムは、個々のレジューム段階でコンピューティング装置に利用可能なリソースに基づき、異なる段階のハイバネーション情報を圧縮するために選択されても良い。
【００３６】
ハイバネーション情報と共に格納されるメタデータは、使用される圧縮の特性を示すパラメータ値を有しても良い。これらのパラメータは、ハイバネーションからのレジューム中にアクセスされても良い。したがって、レジューム中、異なる解凍アルゴリズムが、メタデータに基づき選択されても良い。その結果、異なるアルゴリズムは、ハイバネーション情報を圧縮するために選択された対応する圧縮アルゴリズムに基づき、ハイバネーション情報の部分を解凍するために用いられても良い。
【００３７】
図１を参照すると、本発明の実施形態に従い動作するために適応され得るコンピューティング装置１００の機能ブロック図が示される。本例では、コンピューティング装置１００は揮発性メモリ１０２を有する。
【００３８】
揮発性メモリ１０２は、ＤＲＡＭ又は任意の他の適切なメモリコンポーネントを用いて実装されても良い。コンピューティング装置１００は、任意の適切なメモリコンポーネントを用いて実装され得る不揮発性メモリ１０４も有する。
【００３９】
任意の適切な物理装置が、不揮発性メモリ１０４を実装するために用いられても良い。例えば、不揮発性メモリ１０４は、回転式ハードディスク又は固体ドライブのようなディスクであっても良い。
【００４０】
コンピューティング装置１００は、従来知られている任意の他のコンポーネントを有しても良い。これらのコンポーネントは、複数のプロセッサ１０６を有しても良い。各プロセッサ１０６は、従来知られている別個の物理チップ又は他の装置として実装されても良い。しかしながら、幾つかの実施形態では、各プロセッサは、マルチコア装置のコアであっても良い。理解されるべきことに、コンピューティング装置１００は、簡単のために省略された任意の他の適切なコンポーネントを有しても良い。本願明細書に記載する技術は、ハイバネーション処理からのレジュームの少なくとも一部の間に１より多いプロセッサ１０６の利用を可能にする。
【００４１】
揮発性メモリ１０２は、運用メモリの一例であり得る。動作中、揮発性メモリ１０２は、コンピュータシステムを動作させるために用いられる情報を格納しても良い。情報は、実行可能コード、該コードにより用いられるデータ、及び／又は他の状態情報を有しても良い。
【００４２】
本願明細書に記載する技術は、ハイバネーションからのコンピューティング装置１００のレジュームを実施して、コンピューティング装置がハイバネーションからレジュームする速度を増大する。コンピューティング装置１００がハイバネーションモードに入るとき、装置は、ハイバネーションからレジュームするために後に用いられるべきハイバネーション情報の格納を含むハイバネーションシーケンスを実行しても良い。このハイバネーション情報は不揮発性メモリ１０４に格納されても良い。幾つかの実施形態では、ハイバネーション情報は、不揮発性メモリ１０４内の、ハイバファイル（hiberfile）と呼ばれるファイル１０８に格納されても良い。しかしながら、理解されるべきことに、本発明の実施形態は、ハイバネーション情報が不揮発性メモリ１０４に格納される方法に限定されない。また、ハイバネーション情報は、任意の適切な記憶媒体に格納されても良い。特定種類の不揮発性メモリ１０４が重要ではないが、ハードディスク又は固体ディスクのようなシーケンシャルアクセスディスクであっても良い。
【００４３】
幾つかの実施形態では、ハイバネーションからのレジュームは、複数段階で実行されても良い。ここで、２つのレジューム段階が、単に例のために説明される。理解されるべきことに、ハイバネーションからのレジュームは２より多い段階を介して実行され、各段階で復帰される情報が後続の段階のための環境を確立するために用いられても良い。各段階で復帰される情報は、不揮発性メモリに格納されたハイバネーション情報内の別の場所に格納されても良い。
【００４４】
各段階は、レジュームの別の段階が実行され得る環境を確立するために、コンピューティング装置を部分的に復帰しても良い。ハイバネーションからのレジュームは、任意の適切な方法で複数の段階に分けられても良い。
【００４５】
複数の段階を介してハイバネーションからレジュームするために、ハイバネーション情報は、セクションに区分されても良い。各セクションは、運用メモリに戻ったときに後続の段階のための環境を確立する個々の段階の情報を記録しても良い。
【００４６】
したがって、ハイバファイル１０８の異なる部分は、ハイバネーションからのレジュームの異なる段階のために必要な情報を格納しても良い。図示の例では、ハイバファイル１０８は、ヘッダ１１０、第１の部分１１２、及び第２の部分１１４を有しても良い。各部分１１２、１１４は、ハイバネーションからのレジュームの個々の段階中に運用メモリへ転送されるハイバネーション情報を格納しても良い。理解されるべきことに、ハイバファイル１０８の部分１１２、１１４は、単に例として図１に示され、不揮発性メモリ１０４内のハイバネーション情報の任意の適切な構成がハイバネーション情報を格納するために用いられても良い。さらに、ハイバネーション処理からのレジュームは２より多い段階を有しても良いので、この情報は２より多い部分で格納されても良い。
【００４７】
個々のレジューム段階のために後に使用される格納すべき情報を特定するために、任意の適切な技術が用いられても良い。幾つかの実施形態では、運用メモリの内容を識別するハイバネーション情報の異なる部分の場所は、例えばハイバネーションファイル１０８のヘッダ１１０内に、メタデータとして記録されても良い。このメタデータは、代替で又は追加で、ハイバネーション情報の１又は複数の部分を圧縮するために適用される圧縮アルゴリズムの識別情報のような、ハイバネーションからのレジュームで用いられる他の情報を有しても良い。
【００４８】
ハイバファイル１０８の第２の部分１１２は、第１の段階中にコンピューティング装置のオペレーティングシステムの一部を復帰するために用いられる情報を有しても良い。幾つかの実施形態では、オペレーティングシステムのこの部分は、オペレーティングシステムのカーネルの一部を有しても良い。第２の部分１１４は、ハイバネーションモードに入るときにコンピューティング装置１００の状態の復帰を完了するために用いられる情報を有しても良い。ヘッダ１１０は、第１の部分１１２及び第２の部分１１４を識別する情報を有しても良い。
【００４９】
オペレーティングシステムは、ブートファームウェアのプレオペレーティングシステム環境１１８と比べて豊かなリソースを有する環境１１６を提供し得る。したがって、幾つかの実施形態では、プレオペレーティングシステム環境は、オペレーティングシステムを部分的に復帰するのに十分なハイバネーション情報のみを復帰しても良い。復帰された部分は、レジューム処理の大部分が実行され得るオペレーティングシステム環境を確立しても良い。したがって、第１の段階中に運用メモリへ移動されるべきハイバネーション情報の量は、第２の段階中に運用メモリへ移動されるべきハイバネーション情報の量よりも少なくても良い。その結果、オペレーティングシステムのカーネルを部分的に復帰するために十分な状態情報のみが、第１の段階で復帰されるハイバネーションファイル１０８の部分１１２に格納されても良い。コンピューティング装置のハイバネーションからの復帰を完了するために後に用いられる残りの状態情報は、ハイバファイル１０８の部分１１４に格納される。
【００５０】
図１は、オペレーティングシステム環境１１６内で実行されるコンポーネントに関する状態情報が、それぞれ１２０、１２１と付された２つの部分に区分されても良いことを概略的に示す。各部分１２０、１２１は、個々のレジューム段階で復帰され、ハイバファイル１０８内に別個に格納されても良い。したがって、状態情報１２０は、第１のレジューム段階中に復帰される、ハイバファイル１０８の部分１１２に格納されても良い。状態情報１２０は、カーネルレベルレジュームローダ１２２、幾つかのオペレーティングシステムサービス１２４、及びドライバ１２６を実装するためにコードを有しても良い。ドライバ１２６は、第２のレジューム段階中に動作するハードウェアコンポーネントを制御し、例えばディスクハードウェアと通信するための１又は複数のドライバ、クラッシュダンプスタックのためのドライバ、ＡＣＰＩ（Advanced  Configuration  and  Power  Interface）ドライバ、等を有しても良い。
【００５１】
任意の他の適切なコンポーネントに関する情報は、ハイバファイル１０８の部分１１２に格納されても良い。
【００５２】
幾つかの実施形態では、ハイバファイル１０８の第１の部分１１２に格納された情報は、プレオペレーティングシステム環境１１８のファームウェア１３０に格納されたブートレベルレジュームローダ１２８により、再開中に動作中メモリに戻されても良い。ブートローダ１２８は、オペレーティングシステム環境１１６でのカーネルレベルレジュームローダ１２２の動作を可能にするために、ハイバネーションからのコンピューティング装置１００の部分的なレジュームを制御しても良い。
【００５３】
図１に示すように、状態情報１２１は、ハイバファイル１０８の部分１１４に格納されても良い。この情報は、第２のレジューム段階中に運用メモリに戻されるとき、レジューム処理を完了するために用いられても良い。ハイバネーションのときのコンピューティング装置１００の状態に関する情報１２０が部分１１２に部分的に格納されるとき、状態情報１２１は、従来知られている技術を用いて実装されても良い。動作中メモリから不揮発性記憶へ状態情報を転送しても良く、次に従来のコンピューティング装置におけるような技術を用いてコンピューティング装置への電力の遮断をトリガしても良い。状態情報は、メモリマネジャ１３８により定められるメモリページのようなセグメントで転送されても良い。各ページは、格納される前に圧縮されても良い。さらに、各セグメントは、タグ付けされ、又はハイバネーションからレジュームすると、セグメントが動作中メモリ内のコピーされたのと同じメモリ位置に戻されるような特定の方法で識別されても良い。これら全ての動作は、従来の技術又は任意の適切な技術を用いて実行されても良い。しかしながら、ハイバネイトユーティリティ１３２は、多段レジュームをサポートする点で、状態情報を動作中メモリから不揮発性メモリへ転送する従来のユーティリティとは異なる。これらの動作をサポートするために、ハイバネイトユーティリティ１３２は、各段階で復帰されるべき状態情報を格納している動作中メモリのセグメントを識別し、その情報を適切なフォーマットでハイバファイル１０８に格納しても良い。幾つかの実施形態では、ハイバネイトユーティリティは、多段レジュームをサポートするために、ハイバファイルに情報を追加しても良い。一例として、ハイバネイトユーティリティ１３２は、後続の段階のためにローダをどのように呼び出すかに関する情報を追加しても良い。代替又は追加で、ハイバネイトのときに動作中メモリ内にローダ１２２を有するのではなく、ユーティリティ１３２は、ローダ１２２をハイバファイル１０８に追加しても良い。
【００５４】
ハイバファイル１０８の部分１１４に格納された命令は、ハイバネイトユーティリティ１３２を有しても良い。ハイバネイトユーティリティ１３２は、第２のレジューム段階中に、ハイバファイル１０８の部分１１４に格納されたハイバネーション情報の、揮発性メモリ１０２への転送を制御する。ハイバネイトユーティリティ１３２は、ハイバファイル１０８の部分１１４に格納された命令を揮発性メモリ１０２にロードするために実行し得る、第１の段階で有効にされるカーネルレベルレジュームローダ１２２を有しても良い。
【００５５】
状態情報１２１は、レジューム中に復帰されるべき、ハイバネーションのときのコンピューティング装置１００の状態に関する任意の適切な情報を有しても良い。状態情報１２１は、オペレーティングシステムサービス１３４、ドライバ１３６、メモリマネジャ１３８、及び簡単のために示されない任意の他のコンポーネントを有しても良い。ドライバ１３６は、ハードウェアコンポーネントを制御しても良い。メモリマネジャ１３８は、オペレーティングシステムサービス１３４の一例であり、揮発性メモリ１０２内の情報を整理する。オペレーティングシステムにより提供される任意の他の適切なサービス（例えば、ユーザインタフェースとの相互作用、及びネットワークコネクションの確立）が実装され、特定のオペレーティングシステムサービス１３４が本発明を限定しない。
【００５６】
幾つかの実施形態では、ハイバファイル１０８の第１の部分１１２に格納された情報及び第２の部分１１４に格納された情報は、格納される前に圧縮されても良い。各部分１１２、１１４に格納される情報を圧縮するために、異なる圧縮アルゴリズムが選択されても良い。このような実施形態では、ヘッダ１１０は、ハイバファイル１０８又は該ファイルの１若しくは複数の部分の各々に用いられた圧縮アルゴリズムの特性を示すパラメータ値を有するメタデータを含んでも良い。
【００５７】
幾つかの実施形態では、ハイバネイトユーティリティ１３２は、ハイバネイト情報の１又は複数の部分に含まれる情報のための圧縮アルゴリズムを選択しても良い。適切な圧縮アルゴリズムは、情報が解凍される環境の特性を含む多数の基準に基づき動的に選択されても良い。したがって、ハイバファイル１０８の第１の部分１１２に格納された情報を圧縮するための第１の圧縮アルゴリズムは、この情報を運用メモリに格納するために部分１１２にアクセスするために用いられるべきコンピューティング装置１００の少なくとも１つのコンポーネントの能力に基づき動的に選択されても良い。ハイバファイル１０８の第２の部分１１４に格納された情報を圧縮するために、第２の圧縮アルゴリズムは、少なくとも１つのディスク入力（Ｉ／Ｏ）速度、並びに運用メモリ内のこの部分からの情報を格納するために第２の部分１１４にアクセスするために用いられるべきコンピューティング装置１００のプロセッサ１０６の能力に基づき動的に選択されても良い。
【００５８】
理解されるべきことに、幾つかの実施形態では、ハイバファイル１０８の第１の部分１１２に格納された情報のみ、又はハイバファイル１０８の第２の部分１１４に格納された情報のみが、圧縮形式で格納されても良い。
【００５９】
ハイバファイル１０８又は不揮発性メモリ１０４内の他の適切な記憶に格納されたハイバネーション情報は、コンピューティング装置１００をハイバネーションからレジュームするために用いられても良い。図２は、幾つかの実施形態によるハイバネーションシーケンスからのレジューム中のコンピューティング装置１００を示す。図２に示したコンピューティング装置は、図１に示したものと同様のコンポーネントを有する。
【００６０】
幾つかの実施形態では、ハイバネーションからのレジュームは、複数のレジューム段階で実行される。図１に関して議論したように、各レジューム段階中に復帰される運用メモリからの情報（例えば、状態情報１２０及び状態情報１２１）は、不揮発性メモリに格納されたハイバネーション情報内に別個に記録されても良い。図示の例では、ハイバネーション情報は、不揮発性メモリ１０４に格納されたハイバネーションファイル１０８に格納されても良い。ハイバファイル１０８は、第１のレジューム段階で復帰され得る情報を格納する第１の部分１１２、及び第２のレジューム段階で復帰され得る情報を格納する第２の部分１１４を有する。ハイバネーション情報は、各段階で復帰されるべき情報を識別するメタデータとともに格納されても良い。
【００６１】
図示の例では、ハイバファイル１０８内のメタデータは、各レジューム段階で復帰されるべき情報を識別するために用いられても良い。メタデータは、例えばハイバファイル１０８のヘッダ１１０に格納されても良い。しかしながら、理解されるべきことに、異なる個々のレジューム段階で処理されるべきハイバネーション情報は、各段階の部分を示すために所定のアドレスを用いること又は後続の段階の一部を識別する部分の終わりにあるポインタを用いることを含む任意の適切な方法で識別されても良い。ハイバネーションシーケンスからのレジュームは、ブートファームウェア１３０に格納された命令にアクセスすることにより開始しても良い。これらの命令は、例えば複数のプロセッサ１０６のうちのプロセッサ２０２のようなプロセッサに、ハイバネーションファイル１０８にアクセスさせる。本例では、ハイバネーションファイル１０８にアクセスすると、プロセッサ２０２は、ハイバネーションファイル１０８の内容の一部を運用メモリ（例えば、揮発性メモリ１０２）にコピーする。例えば、命令は、プロセッサ２０２に、ブートレベルレジュームローダ１２８を有効にするためにハイバファイル１０８の部分１１２から情報をリードさせる。
【００６２】
ハイバファイル１０８の第１の部分１１２に格納されたハイバネーション情報は、第１のレジューム段階でオペレーティングシステムの一部を再生成するために用いられる、オペレーティングシステムを通じて第２の段階でプロセスのレジュームを完了するのに十分な情報を有しても良い。図示の例では、第１のレジューム段階で、ハイバファイル１０８の第１の部分１１２に格納された状態情報１２０が復帰されても良い。
【００６３】
ハイバファイル１０８の第１の部分１１２は、ブートレベルレジュームローダ１２８により動作中メモリに戻されても良い。ブートローダは、コンピューティング装置のＢＩＯＳの一部であっても良く、又はコンピューティング装置のファ―ムウェア１３０内に存在しても良い。ブートローダ１２８は、ジュライのハイバネイトからのレジューム技術を用いて、ハイバファイル１０８の部分１１２に格納されたハイバネーション情報の、揮発性メモリ１０２への転送を制御しても良い。したがって、ブートレベルレジュームローダ１２８は、プレオペレーティングシステム環境１１８で実行し得る。
【００６４】
ブートレベルレジュームローダ１２８は、レジューム処理中に実行される第１のコンピュータ実行可能命令セットを有しても良い。これらの命令の実行は、カーネルレベルレジュームローダ１２２のような、オペレーティングシステムのカーネルの一部を復帰しても良い。第１のコンピュータ実行可能命令セットが実行されるプレオペレーティングシステム環境１１８は、比較的希薄な環境であっても良い。例えば、ブートレベルレジュームローダ１２８は、複数のプロセッサが存在する場合でも、複数のプロセッサをサポートできなくても良い。したがって、第１の命令セットは、単一のプロセッサ２０２で実行されても良く、ハイバファイル１０８のような、ハイバネーション情報を有する記憶媒体への非同期アクセスをサポートしなくても良い。例えば、プレオペレーティングシステム環境１１８は、非同期Ｉ／Ｏ動作をサポートしなくも良い。
【００６５】
第１のレジューム段階での第１のコンピュータ実行可能命令セットの実行は、第２のコンピュータ実行可能命令セットが実行され得る別の環境を確立しても良い。第２の命令セットは、ハイバファイル１０８の第２の部分１１４に基づき、オペレーティングシステム環境１１６で実行されても良い。この環境は、オペレーティングシステムの一部のみが先行する段階中に復帰されるので、完全なオペレーティングシステム環境とは異なっても良い。ハイバファイル１０８の第２の部分１１４に記録された状態情報１２１からのコンポーネントのような、ハイバファイルに格納された情報を復帰するために用いられる多数のコンポーネントは、この「早期の」オペレーティングシステム環境で実行しても良い。オペレーティングシステム環境１１６での第２のコンピュータ実行可能命令セットの実行は、最終的に、ハイバネーションからのコンピューティング装置１００のレジュームの完了をもたらす。
【００６６】
第１の段階では、ブートレベルローダ１２８は、オペレーティングシステム環境１１６でのカーネルレベルレジュームローダ１２２を有効にするために、ハイバネーションからのコンピューティング装置１００の部分的なレジュームを制御しても良い。ブートレベルローダ１２８は、コンピュータユーザからのレジューム入力又は他の適切なイベントに応答して、動作をトリガされても良い。ブートレベルローダは、従来のコンピュータシステムで動作しても良い。しかしながら、ブートレベルローダは、レジュームの次の段階のローダに制御を移すようプログラミングされても良い。図示の実施形態では、第２の段階で、カーネルレベルレジュームローダ１２２は、ハイバファイル１０８の第２の部分１１４に格納されたハイバネーション情報の、揮発性メモリ１０２への転送を制御しても良い。部分１１４に格納されたハイバネーション情報は、ハイバネーションのときのコンピューティング装置１００の状態を保存する状態情報１２１を有しても良い。カーネルレベルレジュームローダ１２２は、ハイバネーションからのコンピューティング装置１００のレジュームを完了するために、及びハイバネーションのときのコンピューティング装置１００の状態を復帰するために、命令を実行しても良い。
【００６７】
オペレーティングシステム環境１１６のような、第１のコンピュータ実行可能命令セットを実行した結果として確立された環境は、プレオペレーティングシステム環境１１８よりも豊かなリソースセットを有しても良い。したがって、オペレーティングシステム環境１１６は、複数のプロセッサに対するサポートを有しても良い。代替又は追加で、オペレーティングシステム環境１１６の豊かなリソースセットは、ハイバネーションファイル１０８のような、ハイバネーション情報を含む記憶媒体への非同期アクセスを可能にするメモリアクセス機能を有しても良い。
【００６８】
したがって、１より多いプロセッサは、第２の段階での処理を実行するために用いられ、ハイバネーションからのレジュームを完了するために必要な処理負荷を共有しても良い。例えば、１又は複数のプロセッサは、ハイバネーション情報をリードして、１又は複数の他のプロセッサによる処理のために利用可能にしても良い。これらの他のプロセッサは、ハイバネーション情報を解凍して、必要に応じて運用メモリへ転送しても良い。これは、コンピューティング装置がハイバネーションモードを終了して、そのリソースを完全な動作状態に復帰し得る速度を増大させることができる。
【００６９】
レジュームの第２の段階の処理負荷を共有するためにプロセッサ１０６が用いられる方法は、本発明に絶対不可欠ではない。図２に示した実施形態では、プロセッサ２０２のような単一のプロセッサが、ハイバファイル１０８の第２の部分をリードして、複数のプロセッサ１０６のうちの１又は複数の他のプロセッサ２０４による処理のために利用可能にしても良い。プロセッサ２０２は、ページ又はページ群のようなセグメントを、第２の部分１１４からリードし、該セグメントを揮発性メモリ１０２内の共有バッファ２０６に記録しても良い。第２の部分１１４の１又は複数のセグメントが共有バッファ２０６内で利用可能なとき、該セグメントは、他のプロセッサ２０４により読み出されても良い。第２の部分１１４がハイバネーション情報を圧縮形式で格納する実施形態では、共有バッファ２０６からセグメントを読み出すと、プロセッサ２０４は、該セグメントを解凍して、揮発性メモリ１０２内の適切な場所へ転送しても良い。解凍アルゴリズムは、用いられた圧縮に関する情報に基づき選択されても良く、ハイバファイル１０８（例えば、ヘッダ１１０）に格納されたメタデータへのアクセスに基づき決定されても良い。
【００７０】
オペレーティングシステム環境１１６が内の豊かなリソースセットは、プロセッサ２０２によるハイバネーション情報の不揮発性メモリから共有バッファへの同時転送、及びプロセッサ２０４による共有バッファからのハイバネーション情報のセグメントの読み出しを可能にするメモリアクセス機能を有しても良い。これらの豊かなリソースは、非同期入力／出力（Ｉ／Ｏ）動作に対するサポートを有しても良い。
【００７１】
図示の実施形態では、プロセッサ２０２は、不揮発性メモリ１０４に同期アクセスしても良い。同期アクセスは、不揮発性メモリ素子からの情報のリードを加速し得る。他のプロセッサが、それらが不揮発性メモリからリードした後に動作中メモリへセグメントを復帰する追加処理のために利用可能な限り、全体のレジューム処理は素早く実行できる。複数のプロセッサが利用可能な場合、それらは、高速レジューム処理を提供するために任意の適切な方法で用いられても良い。例えば、複数のプロセッサは、不揮発性メモリから情報をリードするために用いられても良い。或いは、幾つかのプロセッサはセグメントを解凍しても良く、他のプロセッサは解凍されたセグメントを動作中メモリ内にコピーしても良い。
【００７２】
理解されるべきことに、コンピューティング装置１００は単一プロセッサを有しても良いので、複数のプロセッサ１０６は単に例として示される。このようなシナリオでは、単一プロセッサは、共有バッファ内の部分のセグメントを記録するために不揮発性記憶からハイバネーション情報の第２の部分をリードすることと、共有バッファからセグメントを読み出すことの両方を実行しても良い。プロセッサは、非同期入力／出力（Ｉ／Ｏ）動作を介して不揮発性記憶から第２の部分をリードしても良い。したがって、コンピューティング装置が単一プロセッサを有する場合、プロセッサは、不揮発性記憶からハイバネーション情報の別のセグメントをリードするためにＩ／Ｏ動作が保留されている期間中に、ハイバネーション情報のセグメントに基づき、コンピューティング装置の状態を復帰する処理を実行できるので、非同期アクセスの使用は、レジュームを高速化できる。
【００７３】
図３は、ハイバネーションモードからコンピューティング装置（例えば、図１、２のコンピューティング装置１００）をレジュームする処理３００を示す。処理３００は、任意の適切なときに開始しても良い。例えば、処理３００は、装置がサービスされ得るようにコンピューティング装置にハイバネーションから周期的にウェイクアップさせるタイマにより生成されるイベントに従って開始しても良い。他のシナリオでは、処理３００は、ユーザからコマンドを受信すると開始しても良い。しかしながら、この点について本発明の実施形態は限定されないので、ハイバネーション処理からのレジュームを開始するために、任意の適切なトリガが用いられても良い。
【００７４】
ブロック３０２で、処理３００は、任意的に、ハイバネーションからレジュームするコマンドの受信を含むように示される。このコマンドは、任意の適切な方法で受信されても良い。例えば、コンピューティング装置のユーザは、ハイバネーションからコンピューティング装置をレジュームするために（例えば、電源ボタン又は他の入力装置を介して）入力を供給しても良い。
【００７５】
代替又は追加で、レジュームコマンドは、コンピューティング装置１００の適切なコンポーネントから受信されても良い。
【００７６】
ブロック３０４で、コンピューティング装置のプレオペレーティングシステム環境におけるブートローダが実行されても良い。ブートローダは、コンピューティング装置のファームウェアに格納されたブートレベルレジュームローダで（例えば、図１及び２のブートレベルレジュームローダ１２８）あっても良い。ブートレベルレジュームローダは、不揮発性メモリ内の適切な場所に格納されたハイバネーション情報の一部の、不揮発性メモリからの転送を制御しても良い。例えば、幾つかの実施形態では、ハイバネーション情報は、ハイバネーションファイル（例えば、図１及び２のハイバファイル）と称されるコンポーネントに格納されても良い。複数段階を介してコンピューティング装置をレジュームするために、ハイバファイル１０８は、各レジューム段階で復帰されるべき情報を別個に格納しても良い。例えば、図２に示すように、第１の段階で復帰されるべき情報は、ハイバファイル１０８の第１の部分１１２に格納されても良い。第２の段階で復帰されるべき情報は、ハイバファイル１０８の第２の部分１１４に格納されても良い。
【００７７】
次に、ブロック３０６で、ハイバネーション情報の第１の部分（例えば、ハイバファイル１０８の第１の部分１１２）は、ハイバネーションファイルからリードされても良い。ブートレベルレジュームローダは、コンピューティング装置で実行され、不揮発性メモリからコンピューティング装置の運用メモリへのハイバネーション情報の転送を制御しても良い。
【００７８】
不揮発性メモリ１０４からハイバネーション情報の第１の部分をリードした結果、ブロック３０８で、ハイバネーション情報の第１の部分の内容は、揮発性メモリ１０２内で復帰され得る。ハイバネーションからのレジュームの第１の段階３０９は、ブロック３０４−３０８の処理を含み、オペレーティングシステムを通じてレジュ―ムを完了するのに十分な、オペレーティングシステムのカーネルの一部の復帰を伴っても良い。
【００７９】
したがって、処理３００は、ブロック３１０へ進み、レジュームローダがカーネルレベルレジュームローダ（例えば、図１及び２のカーネルレベルレジュームローダ１２２）として、オペレーティングシステムのカーネルで実行されても良い。
【００８０】
カーネルレベルレジュームローダへの制御の転送は、任意の適切な方法で生じても良い。例えば、カーネルレベルレジュームローダは、段階１における状態の部分的な復帰の結果として、所定のメモリ位置に格納されても良い。ブートレベルレジュームローダは、制御を転送するために、これらの位置へのブランチを生じても良い。したがって、他のメカニズムが代替又は追加で用いられても良い。例えば、第１の段階の実行後の、カーネルレベルレジュームローダの動作中メモリ内の位置は、ハイバネーション情報と関連するメタデータ内に記録されても良く、ブートレベルローダは、該メタデータをリードし適切な位置へ分岐するよう構成されても良い。更なる可能性として、ブートレベルローダは、ハイバネーション情報以外のソースからカーネルレベルローダをロードし、次いでカーネルレベルローダの実行を開始しても良い。
【００８１】
ブロック３１２で、カーネルレベルレジュームローダは、不揮発性メモリからのハイバネーション情報の第２の部分のリードを制御しても良い。この情報は、ハイバネーションのときのコンピューティング装置の状態に関する情報を有しても良い。ブロック３１４で、ハイバネーション情報の第２の部分の内容は、揮発性メモリ１０２内に復帰されても良い。その結果、ハイバネーションのときのコンピューティング装置の状態は、揮発性メモリ１０２へ転送され、したがってハイバネーションからコンピューティング装置を完全に復帰できる。したがって、ハイバネーションからのレジュームの第２の段階３１５は、ブロック３１０−３１４での処理を含み、ハイバネーションからのレジュームを完了し得る。
【００８２】
理解されるべきことに、図３のハイバネーション処理からのレジュームは２つの段階３０９及び３１５を有するが、幾つかの実施形態によるハイバネーション処理からのレジュームは、２より多いレジューム段階を有しても良い。このようなシナリオでは、各レジューム段階は、コンピューティング装置を更に復帰するために十分なリソースを復帰し及び／又は確立しても良い。このようなハイバネーションからの漸次的レジュームは、最終的に、コンピューティング装置の完全なレジュームをもたらす。
【００８３】
幾つかの実施形態では、ハイバネーション処理からのレジュームを完了するレジューム段階は、豊かなリソースセットを有する環境で実施される。この環境は、例えば、オペレーティングシステムの環境（例えば、図１及び２のオペレーティングシステム環境１１６）を有しても良い。このような環境は、不揮発性メモリから適切な記憶媒体（例えば図２の共有バッファ２０６）に転送されたハイバネーション情報にアクセスし得る複数のプロセッサに対するサポートを提供しても良い。共有バッファ２０６は、揮発性メモリ内の（例えば、ハイバファイル１０８の第２の部分１１４に格納された）ハイバネーション情報の１又は複数の部分の内容の復帰に関与する複数のプロセッサの各々によりアクセス可能なメモリ位置を有しても良い。
【００８４】
単一プロセッサ（例えば、図２のプロセッサ２０２）は、不揮発性メモリからのハイバネーション情報の第２の部分をリードし、その情報を同期ディスクＩ／Ｏ動作を介して共有バッファに記録しても良い。他のプロセッサ（例えば、図２のプロセッサ２０４）は、単一プロセッサにより不揮発性メモリからのハイバネーション情報の第２の部分をリードするのと同時に、共有バッファに記録されたハイバネーション情報にアクセスし読み出しても良い。
【００８５】
メモリリソースを効率的に利用するために、ハイバネーション情報は、不揮発性メモリに圧縮形式で格納されても良い。したがって、共有バッファに記録された情報にアクセスし読み出す複数のプロセッサは、読み出した情報を解凍し、解凍した情報を揮発性メモリに移動しても良い。複数のプロセッサによる共有バッファからのハイバネーション情報の読み出し及び解凍は、コンピューティング装置の目標状態が再生成される速度を増大する。
【００８６】
ハイバネイトからのレジューム中、各段階は、別の段階のための環境を確立しても良い。例えば、コンピューティング装置のオペレーティングシステムのカーネルの一部の復帰を含む段階は、オペレーティングシステム環境のような、豊かなリソースセットを有し得る環境を確立しても良い。このような環境は、複数プロセッサに対するサポートを有しても良い。
【００８７】
図４は、コンピューティング装置１００のオペレーティングシステム環境１１６によりサポートされる複数プロセッサの動作を概略的に示す。ブロック４０２は、例えばカーネルレベルローダ１２２の一部により制御される処理を含む。カーネルレベルレジュームローダ１２２は、ハイバネーションファイルの一部からの情報の転送を制御しても良い。本願明細書に示される例では、このような部分は、ハイバファイル１０８の部分１１４を有する。幾つかの実施形態では、ブロック４０２の処理は、コンピューティング装置の複数のプロセッサ１０６のうちのプロセッサ２０２（図２）のような単一プロセッサにより実行されても良い。
【００８８】
ブロック４０４及び４０６の各々は、複数のプロセッサ１０６のうちの１又は複数のプロセッサ（例えば、図２のプロセッサ２０４）により実行される処理を示す。幾つかの実施形態では、ブロック４０４及び４０６の処理は、ブロック４０２の処理と同時に実行されても良い。
【００８９】
図４に示す処理は、任意の適切なときに開始しても良い。処理は、複数のレジューム段階のうちの１つの間に、ハイバネーション処理からのレジュームの一部として開始される。例えば、処理は、レジュームを完了するのに十分なオペレーティングシステムのリソースを復帰する、先行するレジューム段階が完了すると開始されても良い。
【００９０】
図４は、ブロック４０２がブロック４０８を含み、ブロック４０８で、プロセッサ２０２はハイバネーション情報の第２の部分のセグメントをリードしても良いことを示す。次に、ブロック４１０で、このセグメントは、共有バッファ（例えば、図２の共有バッファ２０６）に記録されても良い。次に、決定ブロック４１２で、共有バッファへ転送されるべき更なるハイバネーション情報が利用可能か否かが決定されても良い。決定ブロック４１２で、ハイバネーション情報が利用可能であると決定された場合、ブロック４０２の処理は、ブロック４０８へ戻っても良い。ブロック４０８では、ハイバネーション情報の別のブロックが、不揮発性記憶からリードされても良い。決定ブロック４１２で、更なるハイバネーション情報が利用可能ではないと決定された場合、ブロック４０２で処理は終了しても良い。プロセッサ２０２は、同期入力／出力（Ｉ／Ｏ）動作を介して不揮発性記憶からハイバネーション情報の第２の部分のセグメントをリードしても良い。
【００９１】
ブロック４０４は、複数のプロセッサのうちのプロセッサ２０４による処理を有する。ブロック４０４で、プロセッサは、共有バッファにアクセスしても良い。次に、決定ブロック４１６で、プロセッサは、ハイバネーション情報の第２の部分の１又は複数のセグメントが共有バッファ内で利用可能か否かを決定しても良い。決定ブロック４１６で少なくとも１つのセグメントが共有バッファ内で利用可能であると決定されるとき、該セグメントは、ブロック４０２の処理を介して共有バッファに記録されたハイバネーション情報の少なくとも一部を示し、プロセッサは、共有バッファから該セグメントを読み出しても良い。
【００９２】
次に、ブロック４２０で、読み出したセグメントは圧縮されても良い。コンピューティング装置の適切なコンポーネントは、情報を圧縮するためにプロセッサが実行するコンピュータ実行可能命令を格納しても良い。適切な圧縮アルゴリズムは、使用された圧縮の特性を示すパラメータ値を格納するハイバネーション情報と関連するメタデータ内で識別される使用された圧縮アルゴリズムに基づき選択されても良い。
【００９３】
ブロック４２２で、解凍された情報は運用メモリに転送されても良い。情報が転送される揮発性メモリ内の位置は、ハイバネーションファイルに情報と一緒にメタデータとして記録されても良い。
【００９４】
情報が共有バッファ内で利用可能でないと決定されたとき、プロセッサはブロック４１４へ戻り、プロセッサは、共有バッファに再びアクセスしても良い。このような動作の間、プロセッサは共有ファイル内のハイバネーション情報の第２の部分のセグメントの存在を絶え間なく調べても良く、このような動作はビジーウェイトと称され得る。図４に矢印４２１により示すように、ブロック４０２及び４０４の処理は、同時に実行されても良い。このような実施形態では、シグナリングメカニズムが用いられ、どのプロセッサが共有バッファ内の各セグメントを処理するかを調整しても良い。幾つかの実施形態では、マルチプロセッサコンピュータのオペレーティングシステムによりサポートされるようなコンテキストスイッチングメカニズムが用いられても良い。しかしながら、図示の実施形態では、図４に示す処理は、オペレーティングシステムの任意の部分が復帰された環境で生じる。したがって、コンテキストスイッチングは利用可能ではなく、セマフォのようなもっと単純なシステムが用いられても良い。
【００９５】
ブロック４０６の処理は、ブロック４０４における個々のブロック４１４、４１６、４１８、４２０及び４２２と同じ動作を実行するブロック４１５、４１７、４１９、４２１及び４２３を含む。ブロック４０４の処理を実行するプロセッサとは異なる、複数のプロセッサのうちの別のプロセッサ２０４は、ブロック４０６の処理を実行しても良い。ブロック４０６は、矢印４２５により示すように複数のプロセッサが、共有ファイルへのアクセスと、共有ファイル内で情報が利用可能な場合には情報のリード及び圧縮と、そして運用メモリへ戻すこととを同時に実行しても良いことを説明する目的で示される。
【００９６】
理解されるべきことに、ハイバネーションからのレジューム中のコンピューティング装置の目標状態の復帰の一部として、プロセッサ２０４により異なる処理が実行されても良い。
【００９７】
図５は、本発明の幾つかの実施形態による、コンピューティング装置によるハイバネーションの開始の処理５００を示す。処理５００は、任意の適切なときに開始しても良い。例えば、処理は、コンピューティング装置にハイバネイトを指示する適切なユーザ入力が受信されると開始しても良い。図５に示さないが、従来知られている種類の処理を含む異なる又は追加の処理が実行されても良い。例えば、ハイバネーション情報をライトする前に、各プロセッサの状態が集められても良く（例えば、スタックポインタ、レジスタカウンタ、等）、状態は、第１の段階で復帰されるべきハイバネーション情報のメタデータの一部として格納されても良い。
【００９８】
幾つかの実施形態では、ハイバネーションからの複数段階のレジュームを実施するために、各レジューム段階中に復帰される運用メモリからの情報は、別個に記録されても良い。したがって、ハイバネーション情報は、運用メモリに戻ったときに各先行する段階のために記録された情報が後続の段階のための環境を確立するように区分されても良い。
【００９９】
処理５００が開始される方法に拘わらず、ブロック５０２で、処理は、ハイバネーションファイル（例えば、図１のハイバファイル１０８）のようなハイバネーション情報の第１の部分に記録するために揮発性メモリ内の第１の情報を決定しても良い。このような第１の情報は、例えば、揮発性メモリ１０２の状態情報１２０（図１）であっても良い。
【０１００】
第１の情報は、任意の適切な方法で決定されても良く、ハイバネイトからのレジュームの第１のレジューム段階中に復帰される情報を有しても良い。この情報は、レジューム中に運用メモリに戻されるとき、該情報が後続のレジューム段階のための環境を確立するように、選択されても良い。
【０１０１】
幾つかの実施形態では、ハイバネーションのときのコンピューティング装置の状態は、どの情報がレジュームの各段階で記録されるかを決定するために用いられても良い。幾つかの実施形態では、ハイバネイトユーティリティ１３２は、レジューム処理の第２の段階を実行するために復帰されるべき、オペレーティングシステムのコンポーネントのセットに関する情報でプログラミングされる。このシナリオでは、ハイバネイトユーティリティ１３２は、これらのコンポーネントに割り当てられた又はこれらのコンポーネントにより使用中の動作中メモリのページを識別することにより、第１の部分を識別しても良い。しかしながら、第１の部分を識別するために任意の適切な技術が用いられても良い。内容を識別する情報は、例えばハイバネーションファイル１０８のヘッダ１１０にメタデータとして記録されても良い。
【０１０２】
幾つかの実施形態では、レジュームの第１の段階は、第２の段階のための環境を確立しても良い。図１及び２と関連して示す例では、第２の段階は、複数のプロセッサをサポートするオペレーティングシステム環境１１６で実行されても良い。したがって、第１のレジューム段階は、十分な量のプロセッサ状態を復帰して、第２の段階中にプロセッサにハイバネーション情報をリードさせ解凍させても良い。
【０１０３】
幾つかの実施形態では、ハイバネーション情報の第１の部分の第１の情報は、圧縮形式で格納されても良い。したがって、次に、ブロック５０４で、ブロック５０２で決定された第１の情報は、第１の圧縮アルゴリズムを用いて圧縮されても良い。第１の情報を圧縮するための圧縮アルゴリズムは、図６Ａ及び６Ｂに関連して議論したように、第１の情報を運用メモリに格納するために第１の部分にアクセスするために用いられるべきコンピューティング装置の少なくとも１つのコンポーネントの能力に基づき動的に選択されても良い。ハイバネーション情報と共に格納されるメタデータは、第１の圧縮アルゴリズムの特性を示すパラメータ値を有しても良い。
【０１０４】
理解されるべきことに、幾つかの実施形態では、第１の情報は、ハイバネーション情報の第１の部分に圧縮形式で格納されなくても良い。このような実施形態では、ブロック５０４の処理は省略されても良く、処理５００は、ハイバネーション情報の第１の部分に圧縮されていない第１の情報を格納しても良い。
【０１０５】
ブロック５０６で、圧縮された第１の情報は、不揮発性メモリ内のハイバファイルの第１の部分に記録されても良い。
【０１０６】
次に、処理５００はブロック５０８へ進み、処理は、ハイバネーション情報の第２の部分に記録すべき揮発性メモリ内の第２の情報を決定しても良い。第２の情報の例は、揮発性メモリ１０２の状態情報１２１（図１）を有しても良い。ハイバネーション情報の第２の部分に記録される第２の情報は、ハイバネーション情報の第１の部分に記録される第１の情報とは別個に記録されても良い。
【０１０７】
ハイバネーション情報の第２の部分に記録される第２の情報は、第２のレジューム段階中に、第１の段階で復帰された情報を用いて復帰される。本例では、第１の段階は、オペレーティングシステムのカーネルの一部を復帰することによりコンピューティング装置を部分的にレジュームしても良い。オペレーティングシステムのカーネルの復帰した部分は、第２の段階で、豊かなリソースセットを有するオペレーティングシステム環境でハードウェアリソース及びコンピューティング装置の目標状態を復帰するために後に用いられても良い。
【０１０８】
ブロック５０８で、第２の情報は任意の適切な方法で決定されても良く、本発明の実施形態はこの点に関して限定されない。例えば、第２の情報は、ハイバネーションのときのコンピューティング装置の状態を有しても良い。次に、ブロック５１０で、第２の情報は圧縮されても良い。適切な第２の圧縮アルゴリズムは、図６Ａ及び６Ｂに関連して議論したように、動的に選択されても良い。第２の圧縮アルゴリズムは、ハイバネーション情報の第１の部分に格納される第１の情報を圧縮するために用いられる第１の圧縮アルゴリズムとは異なっても良い。ハイバネーション情報と共に格納されるメタデータは、第２の圧縮アルゴリズムの特性を示すパラメータ値を有しても良い。
【０１０９】
ブロック５１２で、圧縮された第２の情報は、ハイバファイルの第２の部分に記録されても良い。ハイバネーション情報が不揮発性メモリに記録されるとき、コンピューティング装置のハードウェアは電源を切られ、コンピューティング装置がハイバネイトするときにハードウェアにより電力が消費されないようにしても良い。次に、処理５００は終了しても良い。
【０１１０】
上述のように、一部又は全部のハイバネーション情報は、コンピューティング装置の不揮発性メモリに圧縮形式で記録されても良い。ハイバネーション情報の圧縮は、コンピューティング装置をハイバネーションモードからレジュームするのにかかる時間を削減できる。しかしながら、レジューム処理の速度に与える影響は、計算時間に対するメモリアクセス時間に依存し得る。したがって、圧縮は、不揮発性メモリが低速か又は十分な処理能力が利用可能なシナリオで特に有用である。
【０１１１】
幾つかの実施形態では、ハイバネーション情報を圧縮するために、適切な圧縮アルゴリズムが動的に選択されても良い。圧縮アルゴリズムは、プロセッサ及びコンピューティング装置のディスクＩ／Ｏの能力のような多数の異なる基準に基づき動的に選択されても良い。例えば、圧縮アルゴリズムは、プロセッサの数及び処理速度に基づき、及びコンピューティング装置内のディスクのＩ／Ｏ速度に基づき、選択されても良い。
【０１１２】
幾つかの実施形態では、個々のレジューム段階中に運用メモリに戻されるべきハイバネーション情報の１より多い部分が、圧縮形式で記録されても良い。このような場合には、ハイバネーション情報の異なる部分に格納される情報を圧縮するために、異なる圧縮アルゴリズムが選択されても良い。異なるレジューム段階は異なる環境で実行されるので、コンピューティング装置の異なるリソースが異なる段階で用いられても良い。したがって、圧縮アルゴリズムは、個々のレジューム段階でコンピューティング装置に利用可能なリソースに基づき、ハイバネーション情報内のセクションに格納されるべき情報を圧縮するために動的に選択されても良い。
【０１１３】
圧縮アルゴリズムは、より多くの処理能力が利用可能なときに更なる圧縮を使用するという基準に基づき選択されても良い。基準は、ハイバネーション情報を格納しているディスク又は他の不揮発性メモリへのアクセス時間が遅いとき、更なる圧縮を支持しても良い。図６Ａ及び６Ｂは、幾つかの実施形態による圧縮アルゴリズムを動的に選択する２つの例を示す。圧縮アルゴリズムは、コンピューティング装置の適切なコンポーネント（例えば、図１及び２のハイバネイトユーティリティ１３２）がどの情報がハイバネーション情報として格納されるか、ハイバネーション情報はどのように区分されるか、及びハイバネーションからのレジュームの各段階での使用のためにどんなコンピューティングリソースが利用可能かを決定するとき、ハイバネーションのときに選択されても良い。
【０１１４】
図６Ａは、処理６００のブロック６０２で、圧縮アルゴリズムを選択するために、コンピューティング装置内のプロセッサの能力が先ず評価されることを示す。次に、決定ブロック６０４で、プロセッサの数及び速度が特定の閾より高いか否かが決定されても良い。この閾は、任意の適切な方法で決定されても良い。例えば、オペレーティングシステムは、コンピューティング装置内でどんな処理能力が必要かを決定するためにハードウェア情報にアクセスしても良い。理解されるべきことに、プロセッサの数及び速度の評価は、単に例としてブロック６０４に示される。プロセッサの任意の適切な性能特性が評価されても良く、実施形態はこの点に関して限定されない。
【０１１５】
決定ブロック６０４でプロセッサの数及び速度が閾である又はそれより高いと決定されると、処理６００はブロック６０６へ分岐し、より高い圧縮率を有する圧縮アルゴリズムが選択されても良い。
【０１１６】
代替として、決定ブロック６０４でプロセッサの数及び速度が閾より低いと決定されると、処理６００はブロック６０８へ分岐し、より低い圧縮率を有する圧縮アルゴリズムが選択されても良い。
【０１１７】
図６Ｂは、幾つかの実施形態による圧縮アルゴリズムを動的に選択する技術の別の例を示す。本例では、圧縮アルゴリズムは、プロセッサの能力（例えば、数及び処理速度）に基づき、及びコンピューティング装置内のディスクのＩ／Ｏ速度に基づき、選択されても良い。
【０１１８】
図６Ｂに示すように、処理７００はブロック７０２で開始し、ディスクＩ／Ｏ速度、及びプロセッサの数及び速度のようなプロセッサの能力、又は任意の他の適切なプロセッサの特性が評価されても良い。次に、決定ブロック７０４でディスク速度Ｉ／Ｏがプロセッサのそれより速いと決定されると、処理７００はブロック７０６へ分岐し、より高い圧縮率を有する圧縮アルゴリズムが選択されても良い。決定ブロック７０４でディスク速度Ｉ／Ｏがプロセッサのそれより速くないと決定されると、処理７００はブロック７０８へ分岐し、より低い圧縮率を有する圧縮アルゴリズムが選択されても良い。
【０１１９】
幾つかの実施形態では、ハイバネーション情報と共に格納されるメタデータは、使用される圧縮の特性を示すパラメータ値を有しても良い。したがって、ハイバネーションからのレジューム中、適切な解凍アルゴリズムが、パラメータ値に基づき選択されても良い。異なる圧縮アルゴリズムがハイバネーション情報の部分に用いられても良いので、個々の異なる解凍アルゴリズムが、レジューム段階中に情報を解凍するために用いられても良い。
【０１２０】
理解されるべきことに、圧縮アルゴリズムは任意の適切な基準に基づき選択されても良く、本発明の実施形態はこの点に関して限定されない。例えば、圧縮されるべき情報量が考慮されても良い。
【０１２１】
理解されるべきことに、図６Ａ及び６Ｂは、圧縮アルゴリズムを選択する単純なアプローチを示す。各々の場合に、選択は、単一の基準に基づき、２つの圧縮アルゴリズムの間で行われる。他の実施形態では、選択は、同時に考慮される複数の基準に基づき、２より多いアルゴリズムの間で行われても良い。例えば、コンピューティング装置が使用するよう構成されるアルゴリズム毎に、コンピューティング装置の検出されたハードウェアが与えられた場合のレジューム時間又はレジュームレートが計算されても良い。最速時間又はレートを有するアルゴリズムが選択されても良い。
【０１２２】
図７は、本発明が実施され得る適切なコンピューティングシステム環境８００の一例を示す。
【０１２３】
コンピューティングシステム環境８００は、適切なコンピューティング環境の単なる一例であり、本発明の使用又は機能の範囲に関する限定を示唆するものではない。また、コンピューティング環境８００は、例示的な動作環境８００内に示した１コンポーネントまたはコンポーネントの組合せへの依存性又はそれらに対する要件を有すると解釈されるべきではない。
【０１２４】
本発明は、多数の他の汎用目的の又は特定目的のコンピューティングシステム環境又は構成で動作可能である。本発明と共に使用するのに適するコンピューティングシステム、環境及び／又は構成の良く知られた例は、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルド若しくはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサに基づくシステム、セットトップボックス、プログラマブル消費者電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上述のシステム若しくは装置のうちの任意のものを含む分散型コンピューティング環境、等を含むが、これらに限定されない。
【０１２５】
コンピューティング環境は、プログラムモジュールのようなコンピュータ実行可能命令を実行しても良い。概して、プログラムモジュールは、特定のタスクを実行し又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含む。本発明は、タスクが通信ネットワークを通じて接続されるリモート処理装置により実行される分散型コンピューティング環境で実施されても良い。分散型コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカル及びリモートの両方のコンピュータ記憶媒体に置かれても良い。
【０１２６】
図７を参照すると、本発明を実施する例示的なシステムは、コンピュータ８１０の形式の汎用コンピューティング装置を有する。コンピュータ８１０のコンポーネントは、処理ユニット８２０、システムメモリ８３０、及びシステムメモリを含む種々のシステムコンポーネントを処理ユニット８２０に結合するシステムバス８２１を有し得るが、これらに限定されない。システムバス８２１は、メモリバス又はメモリ制御部、周辺バス、及び種々のバスアーキテクチャのうちの任意のものを用いるローカルバスを含む複数種類のバス構造のうちの任意のものであっても良い。例として、限定ではなく、このようなアーキテクチャは、ＩＳＡ（Industry  Standard  Architecture）バス、ＭＣＡ（Micro  Channel  Architecture）バス、ＥＩＳＡ（Enhanced  ISA）バス、ＶＥＳＡ（Video  Electronics  Standards  Association）ローカルバス、Mezzanineバスとしても知られているＰＣＩ（Peripheral  Component  Interconnect）バスを含む。
【０１２７】
コンピュータ８１０は、通常、種々のコンピュータ可読媒体を有する。コンピュータ可読媒体は、コンピュータ８１０によりアクセス可能な任意の利用可能な媒体であり、揮発性及び不揮発性媒体並びに取り外し可能及び非取り外し可能媒体の両方を含む。例として、限定ではなく、コンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を有しても良い。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール又は他のデータのような情報を記憶する方法又は技術で実装される揮発性及び不揮発性、取り外し可能及び非取り外し可能媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ又は他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（digital  versatile  disk）又は他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶装置、又は所望の情報を格納するために用いることができコンピュータ８１０によりアクセスできる任意の他の媒体を含むがこれらに限定されない。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュール又は搬送波又は他のトランスポート機構のような変調されたデータ信号内の他のデータを具現化しても良く、任意の情報配信媒体を有しても良い。用語「変調データ信号」は、１又は複数の特性セットを有する信号を意味し、又は信号内の情報をエンコードするために変更されても良い。例として限定ではなく、通信媒体は、有線ネットワーク又は直接有線接続のような有線媒体、並びに音響、ＲＦ、赤外線（ＩＲ）のような無線媒体及び他の無線媒体を含む。上述のうちの任意の組合せも、コンピュータ可読媒体の範囲に包含されるべきである。
【０１２８】
システムメモリ８３０は、ＲＯＭ（read  only  memory）８３１及びＲＡＭ（random  access  memory）８３２のような、揮発性メモリ及び／又は不揮発性メモリの形式のコンピュータ記憶媒体を含む。ＢＩＯＳ（basic  input/output  system）８３３は、起動中のような、コンピュータ８１０内の要素間の情報転送を助ける基本ルーチンを含み、通常、ＲＯＭ８３１に格納される。ＲＡＭ８３２は、通常、処理ユニット８２０により直ちにアクセス可能な及び／又はそれにより現在動作中のデータ及び／又はプログラムモジュールを有する。例として、限定ではなく、図７は、オペレーティングシステム８３４、アプリケーションプログラム８３５、他のプログラムモジュール８３６、及びプログラムデータ８３７を示す。
【０１２９】
コンピュータ８１０は、他の取り外し可能／非取り外し可能な、揮発性／不揮発性コンピュータ記憶媒体を有しても良い。単なる例として、図７は、非取り外し可能不揮発性磁気媒体からリードし及びそれにライトするハードディスクドライブ８４０、取り外し可能不揮発性磁気ディスク８５２からリードし又はそれにライトする磁気ディスクドライブ８５１、及びＣＤ  ＲＯＭ若しくは他の光学媒体のような取り外し可能不揮発性光ディスク８５６からリードし又はそれにライトする光ディスクドライブ８５５を示す。ハードディスクドライブ８４０は、磁気媒体にライトし又はそれからリード可能な１又は複数の磁気ヘッドを有する回転式磁気媒体として実装されても良い。例示的な動作環境で使用可能な、他の取り外し可能／非取り外し可能な揮発性／不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、ＤＶＤ（digital  versatile  disk）、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭ、等を有するが、これらに限定されない。ハードディスクドライブ８４１は、通常、インタフェース８４０のような非取り外し可能メモリインタフェースを通じてシステムバス８２１に接続される。磁気ディスクドライブ８５１及び光ディスクドライブ８５５は、通常、インタフェース８５０のような取り外し可能メモリインタフェースによりシステムバス８２１に接続される。
【０１３０】
上述の及び図７に示したドライブ及びそれらの関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ８１０のための他のデータの記憶を提供する。例えば、図７では、ハードディスクドライブ８４１は、オペレーティングシステム８４４、アプリケーションプログラム８４５、他のプログラムモジュール８４６、及びプログラムデータ８４７を格納するとして示される。留意すべきことに、これらのコンポーネントは、オペレーティングシステム８３４、アプリケーションプログラム８３５、他のプログラムモジュール８３６、及びプログラムデータ８３７と同じか又は異なり得る。オペレーティングシステム８４４、アプリケーションプログラム８４５、他のプログラムモジュール８４６、及びプログラムデータ８４７は、少なくともそれらが異なるコピーであることを示すために、ここで異なる番号が与えられる。ユーザは、キーボード８６２及び通常マウス、トラックボール又はタッチパッドと称されるポインティング装置８６１のような入力装置を通じて、コンピュータ８１０にコマンド及び情報を入力しても良い。他の入力装置（図示しない）は、マイクロフォン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、等を有しても良い。上述の及び他の入力装置は、システムバス８２０に結合されるユーザ入力インタフェース８６０を通じて、処理ユニット８２０に接続される場合が多いが、パラレルポート、ゲームポート又はＵＳＢ（universal  serial  bus）ポートのような他のインタフェース及びバス構造により接続することもできる。モニタ８９１又は他の種類のディスプレイ装置は、ビデオインタフェース８９０のようなインタフェースを介してシステムバス８２１にも接続される。モニタに加えて、コンピュータは、スピーカ８９７及びプリンタ８９６のような、出力周辺機器インタフェース８９５を通じて接続され得る他の周辺出力装置を有しても良い。
【０１３１】
コンピュータ８１０は、遠隔コンピュータ８８０のような１又は複数のリモートコンピュータへの論理コネクションを用いてネットワーク環境で動作しても良い。リモートコンピュータ８８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置又は他の一般的なネットワークノードであって良く、通常、コンピュータ８１０に関して上述した要素の多く又は全てを有する。しかしながら、メモリ記憶装置８８１のみを図７に示す。図７に示した論理コネクションは、ＬＡＮ（local  area  network）８７１及びＷＡＮ（wide  area  network）８７３を有するが、他のネットワークも有しても良い。このようなネットワーク環境は、職場、企業規模のコンピュータネットワーク、イントラネット及びインターネットで一般的である。
【０１３２】
ＬＡＮネットワーク環境で用いられるとき、コンピュータ８１０は、ネットワークインタフェース又はアダプタ８７０を通じて、ＬＡＮ８７１に接続される。ＷＡＮネットワーク環境で用いられるとき、コンピュータ８１０は、通常、モデム８７２又はインターネットのようなＷＡＮ８７３を介して通信を確立する他の手段を有する。内蔵又は外付けであって良いモデム８７２は、ユーザ入力インタフェース８６０又は他の適切なメカニズムを介してシステムバス８２１に接続されても良い。ネットワーク環境では、コンピュータ８１０に関連して示されたプログラムモジュール又はその部分は、遠隔メモリ記憶装置に格納されても良い。例として、限定ではなく、図７は、リモートアプリケーションプログラム８８５がメモリ装置８８１に存在するとして示す。理解されるべきことに、図示のネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を用いることが出来る。
【０１３３】
したがって、本発明の少なくとも１つの実施形態の幾つかの態様を記載したが、理解されるべきことに、当業者には種々の変形、修正及び改良が直ちに生じるだろう。
【０１３４】
例えば、幾つかの実施形態によるコンピューティング装置は複数のプロセッサを有しても良いと記載した。レジューム処理は複数のプロセッサをサポートするオペレーティングシステム環境で完了し得るので、オペレーティングシステム環境で生じるレジューム段階中にこれらのプロセッサを用いることは、コンピューティング装置がハイバネーションからレジュームする速度を増大し得る。しかしながら、理解されるべきことに、コンピューティング装置は、単一のプロセッサを有しても良い。このようなシナリオでも、プロセッサは、不揮発性記憶からハイバネーション情報の別のセグメントをリードするためにＩ／Ｏ動作が保留されている期間中に、ハイバネーション情報のセグメントに基づき、コンピューティング装置の状態を復帰する処理を実行できるので、非同期アクセスの使用はレジュームを高速化できる。
【０１３５】
どの情報をハイバネーション情報の各部分に格納するかを決定するために、任意の適切な技術が用いられても良く、この点について本発明の実施形態は限定されない。さらに、実施形態は、ハイバネーション情報の第１及び第２の部分の両方又はこれらの部分の一方のみを圧縮するか否かを決定するために用いられる方法に関して限定されない。圧縮アルゴリズム及び個々の解凍技術は、任意の適切な方法で選択されても良い。
【０１３６】
理解されるべきことに、本願明細書にはハイバネーションからのレジュームの２つの段階が記載されたが、レジュームは任意の適切な数の段階を介して生じても良く、本発明の実施形態はこの点に関して限定されない。各段階は、次の段階が復帰されるポイントにコンピューティング装置を復帰しても良い。レジューム処理は、任意の適切な方法で複数の段階に分けられても良い。
【０１３７】
このような代替、変更及び改良は、本開示の一部であると考えられ、本発明の精神及び範囲内に包含される。したがって、前述の説明及び図面は、単なる例である。
【０１３８】
本発明の上述の実施形態は、種々の方法のうちの任意の方法で実施することができる。例えば、実施形態は、ハードウェア、ソフトウェア又はそれらの組み合わせで実施されても良い。ソフトウェアで実施されるとき、単一のコンピュータで又は複数のコンピュータ間で分散して提供されるかに関わらず、ソフトウェアコードは、任意の適切なプロセッサ又はプロセッサの集合で実行できる。このようなプロセッサは、集積回路として実装され、集積回路コンポーネント内に１又は複数のプロセッサを有しても良い。しかしながら、プロセッサは、任意の適切な形態の回路を用いて実装されても良い。
【０１３９】
さらに、理解されるべきことに、コンピュータは、ラック搭載コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータのような多数の形態のうちの任意の形態で実施されても良い。さらに、コンピュータは、一般的にコンピュータとして考えられないが適切な処理能力を有する、ＰＤＡ（Personal  Digital  Assistant）、スマートフォン又は任意の他の適切なポータブル若しくは固定電子機器を含む装置内に実装されても良い。
【０１４０】
また、コンピュータは、１又は複数の入力及び出力装置を有しても良い。これらの相対は、特にユーザインタフェースを提示するために用いることができる。ユーザインタフェースを提供するために用いることができる出力装置の例は、出力の視覚的提示のためのプリンタ又はディスプレイスクリーン、及び出力の聴覚的提示のためのスピーカ又は他の音響生成装置を含む。ユーザインタフェースのために用いることができる入力装置の例は、キーボード、並びにマウス、タッチパッド及び離散化タブレットのようなポインティング装置を含む。別の例として、コンピュータは、音声認識を通じて又は他の可聴形式で入力情報を受信しても良い。
【０１４１】
このようなコンピュータは、ローカルエリアネットワーク又は企業ネットワーク若しくはインターネットのようなワイドエリアネットワークを含む１又は複数のネットワークにより任意の適切な形式で相互接続されても良い。このようなネットワークは、任意の適切な技術基づき、任意の適切なプロトコルに従って動作し、無線ネットワーク、有線ネットワーク又は光ファイバネットワークを有しても良い。
【０１４２】
また、本願明細書で概説した種々の方法又は処理は、種々のオペレーティングシステム若しくはプラットフォームのうちの任意の１つを用いる１又は複数のプロセッサで実行可能なソフトウェアとして符号化されても良い。さらに、このようなソフトウェアは、多数の適切なプログラミング言語及び／又はプログラミング若しくはスクリプティングツールのうちの任意のものを用いて書かれても良く、フレームワーク若しくは仮想マシンで実行される実行可能機械言語コード若しくは中間コードとしてコンパイルされても良い。
【０１４３】
これに関して、本発明は、１又は複数のプログラムをエンコードされたコンピュータ可読記憶媒体（又は複数のコンピュータ可読媒体）（例えば、コンピュータメモリ、１又は複数のフロッピディスク、ＣＤ（compact  disc）、光ディスク、ＤＶＤ（digital  video  disk）、磁気テープ、フラッシュメモリ、ＦＰＧＡ（Field  Programmable  Gate  Array）若しくは他の半導体素子内の回路構成、又は他の非一時的有形コンピュータ記憶媒体）として実施されても良く、該プログラムは、１又は複数のコンピュータ又は他のプロセッサで実行されると、上述の本発明の種々の実施形態を実施する方法を実行する。１又は複数のコンピュータ可読記憶媒体は持ち運び可能であり、上述の本発明の種々の態様を実施するために、該コンピュータ可読記憶媒体に格納された１又は複数のプログラムが１又は複数の異なるコンピュータ若しくは他のプロセッサにロードできる。本願明細書で用いられるように、用語「非一時的コンピュータか独記憶媒体」は、製造物（つまり、製品）又は機械として考えられるコンピュータ可読媒体のみを含む。代替又は追加で、本発明は、コンピュータ可読記憶媒体以外の、伝搬する信号のようなコンピュータ可読媒体として実施されても良い。
【０１４４】
用語「プログラム」又は「ソフトウェア」は、本願明細書では、上述の本発明の種々の態様を実施するためにコンピュータ又は他のプロセッサをプログラミングするために用いることができる任意の種類のコンピュータコード又はコンピュータ実行可能命令セットを表すために総称的に用いられる。さらに、理解されるべきことに、この実施形態の一態様によると、実行されると本発明の方法を実行する１又は複数のコンピュータプログラムは、単一のコンピュータ又はプロセッサに存在する必要はなく、本発明の種々の態様を実施するために多数の異なるコンピュータ又はプロセッサの間でモジュラ形式で分散されても良い。
【０１４５】
コンピュータ実行可能命令は、プログラムモジュールのような、１又は複数のコンピュータ又は他の装置により実行される多くの形式であっても良い。概して、プログラムモジュールは、特定のタスクを実行し又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含む。通常、プログラムモジュールの機能は、種々の実施形態で必要に応じて結合され又は分散されても良い。
【０１４６】
また、データ構造は、任意の適切な形式でコンピュータ可読媒体に格納されても良い。説明を簡単にするために、データ構造は、該データ構造内の位置を通じて関連するフィールドを有するとして示された。このような関係は、フィールド間の関係を伝達するコンピュータ可読媒体内の位置を有するフィールドに記憶を割り当てることにより達成されても良い。しかしながら、データ構造内の情報間の関係を確立するために、ポインタ、タグ又はデータ要素間の関係を確立する他のメカニズムの使用を含む任意の適切なメカニズムが用いられても良い。
【０１４７】
本発明の種々の態様は、単独で、組合せで、又は上述の実施形態で詳細に議論されていない種々の構成で用いられることができるので、それらの用途は以上に説明された又は図面に記載されたコンポーネントの詳細事項及び構成に限定されない。例えば、一実施形態で説明した態様は、任意の方法で他の実施形態で説明した態様と組合せることができる。
【０１４８】
また、本発明は、一例を提供した方法として実施されても良い。この方法の一部として実行される動作は、任意の適切な方法で順序付けられても良い。したがって、実施形態は、図示した順序と異なる順序で動作が実行されることも想定しており、説明のための実施形態では順次的動作として示していても、幾つかの動作を同時に実行することも含む。
【０１４９】
請求項の要素を修飾するための請求項における「第１」、「第２」、「第３」等のような序数の使用は、それ自体がある請求項の要素の他者に対する優先度、先行若しくは順序、又は方法が実行される時間的順序を示すものではなく、請求項の要素を区別するために特定の名称を有する１つの請求項の要素を（序数の使用以外は）同じ名称を有する別の要素から区別するために単にラベルとして用いられる。
【０１５０】
また、本願明細書で用いられる表現及び用語は、説明を目的としており、限定として見なされるべきではない。「含む、有する（including、comprising、having、containing、involving）」及びそれらの変形は、以降に列挙される項目及びそれらの等価物、並びに追加の項目を包含することを意味する。
【図１】
0005911892.tif 000002
【図２】
0005911892.tif 000003
【図３】
0005911892.tif 000004
【図４】
0005911892.tif 000005
【図５】
0005911892.tif 000006
【図６Ａ】
0005911892.tif 000007
【図６Ｂ】
0005911892.tif 000008
【図７】
0005911892.tif 000009