(57)【特許請求の範囲】
【請求項１】
コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求を受信するステップと、
オペレーティングシステムの状態とは独立に前記アプリケーションの前記ランタイム状態を収集し、さらに前記ランタイム状態を永続化するステップであって、前記ランタイム状態は、前記ランタイム状態が収集されたときに前記アプリケーションにより使用中であった１又は複数のファイルリソースロケーションを有する、ステップと、
前記アプリケーションの前記ランタイム状態を復元する要求を受信するステップと、
前記アプリケーションの前記ランタイム状態を復元する前記要求を受信することに応答して、前記アプリケーションの前記ランタイム状態を復元し、前記復元されたアプリケーションを実行するステップと、
前記ランタイム状態を用いて、前記復元されたアプリケーションからの、リソースについての要求を変換するステップであって、前記復元されたアプリケーションからの該要求が、再開されている前記復元されたアプリケーションの前記ランタイム状態に従う前記リソースと互換性を有するようにし、前記復元されたアプリケーションからの、前記リソースについての要求を変換するステップは、前記復元されたアプリケーションからの、元のファイルリソースロケーションについての要求を新しいファイルリソースロケーションについての要求に変換するステップを有する、ステップと、
を含むコンピュータにより実施される方法。
【請求項２】
前記ランタイム状態を永続化するステップの後、前記ランタイム状態を復元するステップの前に、前記アプリケーションの前記ランタイム状態を、前記コンピュータから第２のコンピュータへ移すステップ、を更に含む請求項１に記載のコンピュータにより実施される方法。
【請求項３】
前記アプリケーションの前記ランタイム状態を永続化するステップの後に変更されたリソースに関する前記アプリケーションからの要求を変換するためのプロキシ層を設けるステップ、をさらに含む請求項１に記載のコンピュータにより実施される方法。
【請求項４】
前記ランタイム状態を永続化するステップの後、前記ランタイム状態を復元するステップの前に、前記コンピュータ上でメンテナンス工程を実行するステップ、をさらに含む請求項１に記載のコンピュータにより実施される方法。
【請求項５】
前記アプリケーションは、仮想化されたアプリケーションを含む請求項１に記載のコンピュータにより実施される方法。
【請求項６】
前記ランタイム状態は、メモリ内容と、レジスタコンテキストと、命令ポインタとを含む請求項５に記載のコンピュータにより実施される方法。
【請求項７】
コンピュータにより実行されると、前記コンピュータに
コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求を受信させ、
オペレーティングシステムの状態とは独立に前記アプリケーションの前記ランタイム状態を収集させ、前記ランタイム状態を永続化させ、前記ランタイム状態は、前記ランタイム状態が収集されたときに前記アプリケーションにより使用中であった１又は複数のファイルリソースロケーションを有し、
前記アプリケーションの前記ランタイム状態を復元する要求を受信させ、
前記アプリケーションの前記ランタイム状態を復元する前記要求を受信させたことに応答して、前記アプリケーションの前記ランタイム状態を復元させ、前記復元されたアプリケーションを実行させ、
前記ランタイム状態を用いて、前記復元されたアプリケーションからの、リソースについての要求を変換させ、前記復元されたアプリケーションからの該要求が、再開されている前記復元されたアプリケーションの前記ランタイム状態に従う前記リソースと互換性を有するようにし、前記復元されたアプリケーションからの、前記リソースについての要求を変換させることは、前記復元されたアプリケーションからの、元のファイルリソースロケーションについての要求を新しいファイルリソースロケーションについての要求に変換させることを有する、
コンピュータプログラム。
【請求項８】
前記コンピュータにより実行されると、前記コンピュータに、前記アプリケーションの前記ランタイム状態を永続化した後に変更された１つまたは複数のリソースに関する前記アプリケーションからの要求を変換するためのプロキシ層を設けさせる、請求項７に記載のコンピュータプログラム。
【請求項９】
前記コンピュータにより実行されると、前記コンピュータに、前記ランタイム状態を、前記コンピュータの処理負荷を負荷分散させるように前記コンピュータから第２のコンピュータに移させる、請求項８に記載のコンピュータプログラム。
【請求項１０】
前記ランタイム状態は、前記ランタイム状態が収集されるときのシステムリソース状態、ユーザインターフェース状態、ネットワーク接続状態、をさらに含むことを特徴とする請求項９に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションランタイム状態の格納、及び、再開に関する。
【背景技術】
【０００２】
サーバファームにおけるサーバコンピュータのメンテナンスは、多くの理由で困難な場合がある。例えば、情報技術（「ＩＴ」）管理者が、サーバコンピュータ上でメンテナンスオペレーションを実行する必要がある場合、サーバコンピュータ上で実行されているオペレーティングシステムをシャットダウンすることができる前に、すべてのユーザセッションを閉じることが、通常必要である。ユーザセッションを適切に閉じるために、ＩＴ管理者は、それらのセッションにおいて実行されているユーザアプリケーションのすべてをシャットダウンしなければならない。ユーザがユーザのアプリケーションを順序正しくシャットダウンすることができない場合、保存されていないデータが、消失される可能性がある。このようなデータの消失は、ユーザとＩＴ管理者の双方に極めて苛立たしい。
【０００３】
本明細書で行われる開示が提示されるのは、上述の内容、および、その他の考慮に関連してである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第７，２２５，２６４号明細書
【特許文献２】米国特許第７，２００，６３２号明細書
【特許文献３】米国特許第７，４５１，４５１号明細書
【特許文献４】米国特許第７，７９７，３７２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
アプリケーションのランタイム状態を格納するため、および再開するための技術が、本明細書で説明される。本明細書で開示される概念および技術の実施形態を介して、実行されているアプリケーションのランタイム状態を、そのアプリケーションが実行されているオペレーティングシステムのランタイム状態とは独立にキャプチャし、保存することができる。次に、そのアプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。また、そのアプリケーションのランタイム状態は、コンピュータの処理負荷を負荷分散するために、別のコンピュータに移されることも可能である。これらのメンテナンス工程が完了すると、アプリケーションのランタイム状態が復元されることが可能であり、さらにアプリケーションの実行が、ランタイム状態がキャプチャされた時点にアプリケーションが入っていた状態で再開されることが可能である。このようにして、保存されていないアプリケーションデータを消失することなしに、メンテナンス工程を実行することができる。
【課題を解決するための手段】
【０００６】
本明細書で提示される一態様によれば、コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求が受信される。例えば、ＩＴ管理者が、そのような要求を行う場合がある。そのような要求を受信したことに応答して、アプリケーションの実行が一時停止され、さらにアプリケーションのランタイム状態が、アプリケーションが実行されているオペレーティングシステムとは独立に収集される。ランタイム状態は、物理メモリおよび仮想メモリ、中央処理装置（「ＣＰＵ」）レジスタ、ならびに命令ポインタの内容を含むことが可能である。また、ランタイム状態は、システムリソース、ユーザインターフェース（「ＵＩ」）リソース、およびネットワーク接続の状態を含むことも可能である。また、ランタイム状態は、ランタイム状態が収集される際にアプリケーションにより使用中の任意のファイルリソースを含むことも可能である。ランタイム状態が収集されると、ランタイム状態は、ランタイム状態を大容量ストレージデバイスに保存することなどにより永続化される。
【０００７】
ランタイム状態が永続化された後、アプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。例えば、アプリケーションが実行されていたコンピュータのハードウェア上で、またはオペレーティングシステム上でメンテナンス工程を実行することができる。さらに、アプリケーションのランタイム状態を、別のコンピュータに移すことが可能である。このことは、例えば、アプリケーションが実行されていたコンピュータの処理負荷を負荷分散するために、望ましい場合がある。
【０００８】
メンテナンス工程が完了すると、ＩＴ管理者などから、アプリケーションの実行を再スタートする要求を受信することができる。アプリケーションの実行を再スタートするために、アプリケーションのランタイム状態が復元される。例えば、メモリ、レジスタ、および命令ポインタの内容を、復元することができる。また、システムリソース、ＵＩリソース、およびネットワーク接続の状態を復元することも可能である。ファイルリソースがランタイム状態に含められていた場合、それらのファイルリソースを復元することも可能である。アプリケーションのランタイム状態を復元すると、アプリケーションの実行を、アプリケーションが一時停止されたポイントから再スタートすることができる。このようにして、アプリケーションは、アプリケーションの実行が一時停止された時点にアプリケーションが入っていた状態で再開することができる。
【０００９】
別の態様によれば、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関して、アプリケーションから受信された要求を変換するためのプロキシ層が提供される。例えば、アプリケーションが、アプリケーション状態のキャプチャの直前に、アプリケーションの実行が再開された際に利用できないネットワークポート番号を利用した場合、プロキシ層が、アプリケーションに知られているネットワークポート番号と新たなネットワークポート番号の間で変換を行う。また、他のタイプの変換を、変更された名前、番号、ロケーション、または他の識別する情報を有する他のタイプのリソースに関して実行することも可能である。
【００１０】
本明細書で開示される実施形態は、仮想化されたアプリケーション、ハードウェア仮想化環境において実行される仮想化されていないアプリケーション、仮想化されていない環境において実行される仮想化されていないアプリケーション、および他のタイプのアプリケーションに関連して利用できることを理解されたい。また、この概要は、特許請求される主題の重要な特徴、または不可欠な特徴を特定することを意図しておらず、この概要が、特許請求される主題の範囲を限定するのに使用されることも意図していないことも理解されたい。さらに、特許請求される主題は、本開示のいずれかの部分に記載されるいずれかの欠点を解決する実施形態にも、そのようなすべての欠点を解決する実施形態にも限定されない。
【図面の簡単な説明】
【００１１】
【図１】本明細書で開示される一実施形態に関する１つの例示的な動作環境を示すコンピュータソフトウェアアーキテクチャ図である。
【図２】本明細書で開示される一実施形態による、アプリケーションのランタイム状態を格納するため、および再開するための本明細書で開示されるいくつかのソフトウェア構成要素の態様を示すコンピュータソフトウェアアーキテクチャ図である。
【図３】本明細書で開示される一実施形態において利用される格納されたアプリケーションランタイム状態の内容を示すデータ構造図である。
【図４】本明細書で提示される一実施形態による、アプリケーションのランタイム状態をキャプチャするため、および永続化するための本明細書で開示される１つの例示的なプロセスの態様を示すフローチャートである。
【図５】本明細書で提示される一実施形態による、アプリケーションの、キャプチャされ、さらに永続化されたランタイム状態を復元するための本明細書で開示される１つの例示的なプロセスの態様を示すフローチャートである。
【図６】本明細書で開示される一実施形態におけるアプリケーション要求を変換するために利用されるプロキシ層の態様を示すコンピュータソフトウェアアーキテクチャ図である。
【図７】一実施形態におけるアプリケーションのランタイム状態を格納するため、および再開するための本明細書で開示される技術を利用する２つのコンピュータシステム間で、実行されるアプリケーションを移行させるための例示的なルーチンを示すフローチャートである。
【図８】一実施形態におけるアプリケーションのランタイム状態を格納するため、および再開するための本明細書で開示される技術を利用してコンピュータ上でメンテナンス工程を実行するための例示的なルーチンを示すフローチャートである。
【図９】本明細書で提示される様々な実施形態を実施することができるコンピューティングシステムに関する例示的なコンピュータハードウェアおよびソフトウェアのアーキテクチャを示すコンピュータアーキテクチャ図である。
【発明を実施するための形態】
【００１２】
以下の詳細な説明は、アプリケーションランタイム状態を格納するため、および再開するための技術を対象とする。上記で簡単に説明したとおり、実行されているアプリケーションのランタイム状態を、そのアプリケーションが実行されているオペレーティングシステムのランタイム状態とは独立にキャプチャし、保存することができる。次に、そのアプリケーションが実行されていたオペレーティングシステム上、またはコンピュータ上でメンテナンス工程を実行することができる。また、そのアプリケーションのランタイム状態を、コンピュータの処理負荷を負荷分散するために、別のコンピュータに移すことも可能である。その後、そのアプリケーションのランタイム状態を復元することができる。アプリケーションのランタイム状態が復元されると、アプリケーションの実行を、アプリケーションが一時停止されたポイントから再スタートすることができる。また、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関して、アプリケーションから受信された要求を変換するのにプロキシ層を利用することも可能である。以上、およびその他の特徴に関するさらなる詳細は、図１乃至図９に関連して以下で説明される。
【００１３】
本明細書で説明される主題は、コンピュータシステム上のオペレーティングシステムおよびアプリケーションプログラムの実行に関連して実行されるプログラムモジュールの一般的な脈絡で提示されるが、他の実施形態が、他のタイプのプログラムモジュールと組み合わせて実行されてもよいことが当業者には認識されよう。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、構成要素、データ構造、および他のタイプの構造が含まれる。さらに、本明細書で説明される主題は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電子機器またはプログラマブル家庭用電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む、他のコンピュータシステム構成で実施されてもよいことが当業者には理解されよう。
【００１４】
以下の詳細な説明において、本明細書の一部分を形成するとともに、特定の実施形態または実施例の例示として示される添付の図面を参照する。以下に、いくつかの図で同様の参照符号が同様の要素を表すそれらの図面を参照して、アプリケーションのランタイム状態を格納するため、および再開するためのコンピューティングシステムおよびコンピューティング方法の態様を説明する。
【００１５】
図１は、本明細書で開示される実施形態に関する１つの例示的な動作環境１００を示すソフトウェアおよびネットワークのアーキテクチャ図である。図１に示される例示的な動作環境１００は、本明細書で「アプリケーション１０６」と呼ぶ場合がある仮想化されたアプリケーション１０６を実行するための環境を提供するように構成されたコンピュータ１０８を含む。この機能を提供するために、コンピュータ１０８は、オペレーティングシステム１０４と、アプリケーション仮想化層１０２とを含む。コンピュータ１０８は、アプリケーションランタイム状態を格納するため、および再開するための本明細書で提示される工程を実行することができる標準のデスクトップコンピュータもしくはラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータ、スマートフォン、または他の任意のコンピューティングデバイスであり得る。
【００１６】
アプリケーション仮想化層１０２は、アプリケーション仮想化環境を提供するように構成されたソフトウェア構成要素である。これに関して、アプリケーション仮想化層１０２は、アプリケーション１０６を実行するように構成される。アプリケーション仮想化層１０２は、アプリケーションの実行をオペレーティングシステム１０４からカプセル化するための機能を提供する。また、アプリケーション仮想化層１０２は、アプリケーション１０６の実行を、コンピュータ１０８の他のアプリケーションプログラムおよびシステムリソースからカプセル化するための機能を提供することも可能である。例えば、アプリケーション仮想化層１０２は、オペレーティングシステム１０４またはコンピュータ１０８のリソースを仮想化することが可能である。アプリケーション１０６が、実際のリソースにアクセスしようと試みた場合、アプリケーション仮想化層１０２が、仮想化されたリソースを、使用されるようにアプリケーション１０６に提示する。このようにして、アプリケーション１０６は、オペレーティングシステム１０４またはコンピュータ１０８により公開される実際のリソースに影響を与えない様態で実行することができる。
【００１７】
他の態様によれば、アプリケーション仮想化層１０２は、サーバコンピュータ（図示せず）からオンデマンドでアプリケーション１０６のいくつかの部分をロードするための機能を提供する。詳細には、アプリケーション仮想化層１０２は、サーバ構成要素と連携して動作して、アプリケーション１０６の必要とされる部分をサーバからコンピュータ１０８にストリーミングする。このようにして、アプリケーション１０６は、コンピュータ１０８においてオンデマンドでアクセスすることができる。さらに、アプリケーション１０６の必要とされる部分だけがサーバからコンピュータ１０８にストリーミングされる場合があるため、アプリケーション１０６全体をサーバからコンピュータ１０８に送ることなしに、アプリケーション１０６へのアクセスを提供することができる。アプリケーション仮想化層１０２の機能に関するさらなる詳細は、参照によりそれぞれ全体が明確に本明細書に組み込まれている、２００７年５月２９日に出願した、「Ｓｙｓｔｅｍ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｄｅｌｉｖｅｒｉｎｇ  Ｃｏｎｔｅｎｔ  ｏｖｅｒ  ａ  Ｃｏｍｐｕｔｅｒ  Ｎｅｔｗｏｒｋ」という名称の米国特許第７，２２５，２６４号明細書、２００７年４月３日に出願した、「Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｓｅｒｖｉｎｇ  Ｓｏｆｔｗａｒｅ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｔｏ  Ｃｌｉｅｎｔ  Ｃｏｍｐｕｔｅｒｓ」という名称の米国特許第７，２００，６３２号明細書、２００８年１１月１１日に出願した、「Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ａｂｓｔｒａｃｔｉｏｎ  ａｎｄ  Ｐｒｏｔｅｃｔｉｏｎ  Ｌａｙｅｒ」という名称の米国特許第７，４５１，４５１号明細書、および２０１０年９月１４日に出願した、「Ｓｅｒｖｉｎｇ  Ｓｏｆｔｗａｒｅ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｆｒｏｍ  Ｓｅｒｖｅｒｓ  ｆｏｒ  Ｃｌｉｅｎｔ  Ｃｏｍｐｕｔｅｒｓ」という名称の米国特許第７，７９７，３７２号明細書において見ることができる。
【００１８】
本明細書で開示される実施形態は、仮想化されたアプリケーション１０６のランタイム状態を格納すること、および再開することの脈絡で主に提示されるが、本明細書で開示される実施形態は、他のタイプのアプリケーションで利用してもよいことを理解されたい。例えば、本明細書で開示される実施形態は、ハードウェア仮想化環境において実行される仮想化されていないアプリケーションを格納し、さらに再開するのに利用することも可能である。また、本明細書で開示される実施形態は、仮想化されていない環境において実行されるアプリケーションに関連して利用することも可能である。また、本明細書で開示される実施形態は、当業者に知られている他のタイプの環境において実行されているアプリケーションに関連して利用することも可能である。アプリケーション１０６のランタイム状態を格納するため、および再開するための本明細書で開示される技術に関するさらなる詳細は、図２乃至図９に関連して以下で提供される。
【００１９】
図２は、本明細書で開示される一実施形態による、アプリケーション１０６のランタイム状態を格納するため、および再開するための本明細書で開示されるいくつかのソフトウェア構成要素の態様を示すコンピュータソフトウェアアーキテクチャ図である。詳細には、図２は、アプリケーション１０６のランタイム状態２０２をキャプチャし、永続化し、さらに復元するように実施形態において構成され得るいくつかのソフトウェア構成要素を示す。ランタイム状態２０２は、アプリケーション１０６の現在の実行コンテキストを定義するデータである。以下でより詳細に説明されるとおり、ランタイム状態２０２は、キャプチャされ、永続化され、さらに後の時点で復元されることが可能である。このようにして、アプリケーション１０６がシャットダウンされることを要求することなしに、コンピュータ１０８上、およびオペレーティングシステム１０４上でメンテナンス工程を実行することができる。
【００２０】
やはり図２に示されるとおり、いくつかの異なるソフトウェア構成要素を、ランタイム状態２０２をキャプチャし、永続化し、さらに復元するのに利用することができる。例えば、一実施形態において、アプリケーション仮想化層１０２は、ランタイム状態２０２をキャプチャするため、永続化するため、および復元するための本明細書で開示される工程を実行するように構成することができる。別の実施形態において、オペレーティングシステム１０４が、ランタイム状態２０２を生成し、さらに復元するように構成される。さらに別の実施形態において、アプリケーション２０４は、アプリケーション１０６に関するランタイム状態２０２を生成するように構成することができる。様々な実施形態において、カーネルドライバ、または他のタイプの低レベルのプログラムコードは、本明細書で説明される機能の様々な態様を可能にするようにアプリケーション２０４またはアプリケーション仮想化１０２によりオペレーティングシステム１０４にインストールできることを理解されたい。他のタイプの実施形態が、当業者には明白であり得る。
【００２１】
以下でより詳細に説明されるとおり、仮想化されたアプリケーション１０６に関するランタイム状態２０２の生成を、ＩＴ管理者などからの要求に応答して実行することができる。そのような要求に応答して、アプリケーション１０６の実行が一時停止される。さらに、アプリケーション１０６により使用中のリソースが列挙され、リソースの現在の状態がキャプチャされ、さらに状態を定義するデータが、ランタイム状態２０２として永続化される。以下でより詳細に説明されるとおり、ランタイム状態２０２は、アプリケーション１０６の実行コンテキストを再作成するために後の時点でストレージから取り出すことができる。さらに、ランタイム状態２０２を、コンピュータ１０８以外のコンピュータに移して、再スタートすることができる。この機能に関するさらなる詳細は、以下で提供される。
【００２２】
アプリケーション１０６をアプリケーション１０６の以前の状態に復元するために、格納されたランタイム状態２０２が、アプリケーション１０６の様々なプロセスを再作成し、さらにアプリケーション１０６により利用されるメモリの内容を復元するのに利用される。また、他のシステムリソース、ファイルリソース、およびＵＩリソースを再作成することもできる。さらに、一実施形態によれば、ランタイム状態２０２を作成した後に変更されたリソースに対するアプリケーション１０６からの要求を変換するのにプロキシ層が利用される。ランタイム状態２０２を復元すると、アプリケーション１０６の実行を再スタートすることができる。以上の工程に関するさらなる詳細は、図３乃至図８に関連して以下で提供される。
【００２３】
図２は、単一のアプリケーション１０６に関するランタイム状態２０２の作成を例示するものの、本明細書で開示される実施形態は、複数のアプリケーション１０６に関するランタイム状態２０２を同時に作成するのに利用できることを理解されたい。例えば、複数のアプリケーションの実行コンテキストを同時にキャプチャするために本明細書で提示される概念を利用してランタイム状態２０２を生成することができる。格納されたランタイム状態２０２は、その後、その複数のアプリケーションの実行を同時に再開するのに利用することができる。
【００２４】
やはり上述したとおり、本明細書で開示される実施形態は、主に、仮想化されたアプリケーション１０６に関するランタイム状態２０２を生成する脈絡で説明されるものの、本明細書で提示される実施形態は、他のタイプのアプリケーションで利用してもよいことを理解されたい。例えば、本明細書で開示される実施形態は、ハードウェア仮想化環境において実行される仮想化されていないアプリケーション、仮想化されていない環境において実行される仮想化されていないアプリケーション、および他のタイプのアプリケーションで利用してもよい。また、ランタイム状態２０２は、オペレーティングシステム１０４の実行状態とは独立に生成されることも理解されたい。このようにして、ランタイム状態２０２は、場合により、オペレーティングシステム１０４の異なるバージョンを実行している別のコンピュータに移行し、さらに元の状態に復元することが可能である。
【００２５】
図３は、本明細書で開示される一実施形態において利用される格納されたランタイム状態２０２（「ランタイム状態２０２」と本明細書で呼ぶ場合がある）の内容を示すデータ構造図である。図３に示されるとおり、アプリケーションランタイム状態２０２は、メモリ内容３０２を含む。メモリ内容３０２は、アプリケーション１０６により使用される任意の仮想メモリ、共有されるメモリ、物理メモリ、または他のメモリの内容である。また、アプリケーションランタイム状態２０２は、レジスタコンテキスト３０４も含む。レジスタコンテキスト３０４は、アプリケーション１０６が実行されているコンピュータ１０８のＣＰＵにおける任意のレジスタの内容である。また、レジスタコンテキスト３０４は、アプリケーション１０６の各スレッド、または各プロセスに関する命令ポインタ３０６を含むことも可能である。
【００２６】
一実施形態において、アプリケーションランタイム状態２０２は、システムリソース状態３０８も含む。システムリソース状態３０８は、アプリケーション１０６の実行が一時停止された時点でアプリケーション１０６により使用中であるシステムリソースのセットの状態を定義するデータである。システムリソース状態３０８は、レジストリキーに対してアプリケーション１０６により開かれたハンドル、カーネルオブジェクトに対して開かれたハンドル、ローカルファイルシステム上、またはネットワーク共有上のファイル、アプリケーション１０６により使用中のＴＣＰポート、および遠隔リソースに対してアプリケーション１０６により開かれた接続の状態を定義するデータを含むことが可能である。また、システムリソース状態３０８は、アプリケーション１０６が一時停止された時点でアプリケーション１０６により使用中の他のタイプのシステムリソースを定義するデータを含むことも可能である。
【００２７】
一実施形態によれば、アプリケーションランタイム状態２０２は、ＵＩリソース状態３１０も含む。ＵＩリソース状態３１０は、アプリケーション１０６が一時停止された時点でアプリケーション１０６により使用中のＵＩ要素を定義するデータを含む。例えば、ＵＩリソース状態３１０は、ＵＩウインドウのロケーション、複数のＵＩ構成要素の間の関係、ウインドウハンドル、ならびに他のタイプのＵＩリソースの状態を定義するデータを定義することが可能である。
【００２８】
一実施形態によれば、アプリケーション１０６により実行されるＵＩ作成工程は、アプリケーション１０６の実行中にログ記録される。ログ記録されたＵＩ作成工程を定義するデータは、アプリケーションランタイム状態２０２の中に格納され、さらにアプリケーション１０６が再スタートされる時点で、アプリケーションが一時停止された時点でアプリケーション１０６により提示されていたＵＩを再作成するのに利用することが可能である。また、他のタイプの機構を利用して、アプリケーション１０６が再スタートされる時点でアプリケーション１０６により提示されるＵＩ要素を再作成するのに利用できるＵＩリソース状態３１０を生成することも可能であることを理解されたい。
【００２９】
また、アプリケーションランタイム状態２０２は、ネットワーク接続状態３１２を含むことも可能である。ネットワーク接続状態３１２は、アプリケーション１０６が一時停止された時点でアプリケーション１０６により利用されていた任意のネットワーク接続の状態を定義するデータである。ネットワーク接続状態３１２は、例えば、ローカルネットワークリソースに対するハンドル、ネットワークポート、および他のネットワーク関連のデータを定義することが可能である。
【００３０】
一実施形態において、アプリケーション１０６が一時停止された時点でアプリケーション１０６により使用中であったすべてのファイルリソースが、アプリケーション１０６が復元された際、ローカルファイルシステム上で同一の名前の下で利用可能である。しかし、他の実施形態において、アプリケーション１０６により使用中のファイルリソース３１４は、アプリケーションランタイム状態２０２に対する追加として束ねられる。また、ファイルリソース３１４は、様々なファイルリソース３１４に対するシークポインタの値を含むことも可能である。以下でより詳細に説明されるとおり、この束ねられたファイルリソース３１４は、アプリケーション１０６にファイルリソース３１４を提示するために、ランタイム状態２０２が再作成される時点で利用することも可能である。
【００３１】
図３に示されるアプリケーションランタイム状態２０２の内容は、単に例示的であることを理解されたい。様々な実施形態によれば、他のデータが、アプリケーションランタイム状態２０２の中に含められることも可能である。しかし、一般に、アプリケーションランタイム状態２０２は、アプリケーション１０６が後の時点で再開できるように、アプリケーション１０６の実行コンテキストを再作成するのに必要なデータを含むことを理解されたい。アプリケーションランタイム状態２０２の作成および使用に関するさらなる詳細は、図４乃至図５に関連して以下で提供される。
【００３２】
図４は、本明細書で提示される一実施形態による、アプリケーション１０６のランタイム状態２０２をキャプチャするため、および永続化するための本明細書で開示される１つの例示的なルーチン４００の態様を示すフローチャートである。図４およびその他の図に関連して本明細書で説明される論理工程は、（１）コンピュータにより実施される工程のシーケンス、もしくはコンピューティングシステム上で実行される複数のプログラムモジュールとして、さらに／または（２）コンピューティングシステム内の互いに接続されたマシン論理回路もしくは回路モジュールとして実施されることを理解されたい。実施形態は、コンピューティングシステムの性能および他の要件に依存する選択の問題である。したがって、本明細書で説明される論理工程は、工程、構造デバイス、作用、またはモジュールという様々な呼ばれ方をする。これらの工程、構造デバイス、作用、およびモジュールは、ソフトウェアで、ファームウェアで、専用のデジタルロジックで、さらに以上の任意の組み合わせで実施することができる。また、図に示され、本明細書で説明されるよりも多い、または少ない工程を実行してもよいことも理解されたい。また、これらの工程は、本明細書で説明されるのとは異なる順序で実行することも可能である。
【００３３】
ルーチン４００は、工程４０２で始まり、アプリケーション１０６の実行が一時停止される。詳細には、アプリケーションプロセスにおけるすべてのスレッドの実行が一時停止される。アプリケーション１０６が一時停止されると、ルーチン４００は、工程４０４に進み、メモリ内容３０２がキャプチャされる。上述したとおり、メモリ内容３０２は、アプリケーション１０６により使用中のすべての物理メモリ、仮想メモリ、および他のタイプのメモリの内容を含む。メモリ内容３０２は、アプリケーションランタイム状態２０２の中に格納される。
【００３４】
工程４０４から、ルーチン４００は、工程４０６に進み、レジスタコンテキスト３０４がキャプチャされ、さらにアプリケーションランタイム状態２０２の中に格納される。上述したとおり、レジスタコンテキスト３０４は、アプリケーション１０６が実行されるコンピュータ１０８の１つまたは複数のＣＰＵまたはＣＰＵコアのレジスタの内容である。レジスタコンテキスト３０４がキャプチャされ、さらにアプリケーションランタイム状態２０２の中に格納されると、ルーチン４００は、工程４０８に進む。
【００３５】
工程４０８で、命令ポインタ３０６がキャプチャされ、さらにアプリケーションランタイム状態２０２の中に格納される。次に、ルーチン４００は、工程４１０に進み、システムリソース状態３０８がキャプチャされ、さらにアプリケーションランタイム状態２０２の中に格納される。上述したとおり、システムリソース状態３０８は、アプリケーション１０６により使用中のリソースを識別するデータを含む。例えば、システムリソース状態３０８は、レジストリキーに対してアプリケーション１０６により開かれたハンドル、カーネルオブジェクトに対して開かれたハンドル、ローカルファイルシステム上、またはネットワーク共有上のファイル、アプリケーション１０６により使用中のＴＣＰポート、遠隔リソースに対してアプリケーション１０６により開かれた接続、および／または他のタイプのシステムリソースの状態を識別するデータを含み得る。
【００３６】
工程４１０から、ルーチン４００は、工程４１２に進み、ＵＩリソース状態３１０がキャプチャされ、さらに格納される。上述したとおり、ＵＩリソース状態３１０は、アプリケーション１０６により表示される任意のＵＩ要素の状態を定義するデータである。ＵＩリソース状態３１０は、ウインドウまたは他のＵＩオブジェクトに対するハンドル、アプリケーション１０６が再スタートされた時点でそれらのＵＩリソースを再作成するためのログデータ、および他のタイプの情報を含み得る。工程４１２から、ルーチン４００は、工程４１４に進む。
【００３７】
工程４１４で、ネットワーク接続状態３１２がキャプチャされ、さらにランタイム状態２０２の中に格納される。上述したとおり、ネットワーク接続状態３１２は、アプリケーションが一時停止された時点でアプリケーション１０６により開かれていた任意のネットワーク接続の状態を定義する。次に、ルーチン４００は、工程４１６に進み、アプリケーション１０６により使用中のファイルリソース３１４もやはり識別され、ランタイム状態２０２の中に格納することができる。上述したとおり、一部の実施形態において、ファイルリソース３１４は、ランタイム状態２０２の中に含められない。しかし、他の実施形態において、任意のファイルリソース３１４、およびそれらのリソース３１４に関連するシークポインタが、ランタイム状態２０２の中に格納される。以下でより詳細に説明されるとおり、アプリケーション１０６の実行を再スタートするのに先立ちファイルリソース３１４を再作成することができる。
【００３８】
メモリコンテンツ３０２、レジスタコンテキスト３０４、命令ポインタ３０６、システムリソース状態３０８、ＵＩリソース状態３１０、ネットワーク接続状態３１２、および、場合により、ファイルリソース３１４がキャプチャされると、ルーチン４００は、工程４１８に進む。工程４１８で、ランタイム状態２０２が、パッケージ化され、さらに永続化される。例えば、コンピュータ１０８がアクセスできる大容量ストレージデバイスにランタイム状態２０２を永続化することができる。代替として、コンピュータ１０８がアクセスできるネットワークロケーションにランタイム状態を永続化してもよい。工程４１８から、ルーチン４００は、工程４２０に進み、ルーチン４００は、終了する。
【００３９】
図５は、本明細書で提示される一実施形態による、アプリケーション１０６のそれまでにキャプチャされ、さらに永続化されたランタイム状態２０２を復元するための本明細書で開示される１つの例示的なルーチン５００の態様を示すフローチャートである。ルーチン５００は、工程５０２で始まり、アプリケーション１０６のスレッドが再作成される。スレッドが再作成されると、ルーチン５００は、工程５０４に進み、メモリの内容が、ランタイム状態２０２の中に格納されたメモリ内容３０２を利用して復元される。メモリの内容が復元されると、ルーチン５００は、工程５０６に進み、ＣＰＵレジスタの内容が、ランタイム状態２０２の中に格納されたレジスタコンテキスト３０４を利用して復元される。また、命令ポインタも、工程５０８で復元される。
【００４０】
工程５０８から、ルーチン５００は、工程５１０に進み、システムリソースの状態が、システム復元状態３０８を利用して復元される。一部のシステムリソースは、ハンドルテーブルを介して間接的にアクセスすることができる。これらの事例において、それらのシステムリソースに対するすべてのハンドルが再び開かれ、さらにアプリケーション１０６とハンドルテーブルの間に間接指定の層が挿入されて、アプリケーションが再開された後のアプリケーションによる索引付きアクセスが、それらの開かれたハンドルの背後の実際のリソースにリダイレクトされるようになる。このプロセスに関するさらなる詳細は、図６に関連して以下で提供される。
【００４１】
工程５１０から、ルーチン５００は、工程５１２に進み、アプリケーション１０６の一時停止の時点でアプリケーション１０６により表示されていた任意のＵＩ要素の状態が復元される。上記で簡単に説明したとおり、このことは、そのＵＩを復元するためにＵＩ作成コマンドのログを再生することを含み得る。ＵＩ要素は、しばしば、ハンドルにより参照されるため、アプリケーション１０６とＵＩリソースの間の間接指定の層もまた、必要な場合がある。このプロセスに関する詳細は、図６を参照して以下で提供される。工程５１２から、ルーチン５００は、工程５１４に進む。
【００４２】
工程５１４で、アプリケーション１０６の一時停止の時点でアプリケーション１０６により開かれていた任意のネットワーク接続の状態が、ランタイム状態２０２の中に格納されたネットワーク接続状態３１２を利用して復元される。図６を参照して以下でより詳細に説明されるとおり、以前に開かれていたポート番号へのアクセスをアプリケーション１０６に提供するのに間接指定の層もまた、必要な場合がある。工程５１４でネットワーク接続状態が復元されると、ルーチン５００は、工程５１６に進む。
【００４３】
工程５１６で、ランタイム状態２０２の中に格納された任意のファイルリソース３１４が復元される。アプリケーション１０６により開かれていたファイルストリーム上のシークポインタもまた、アプリケーション１０６が、アプリケーション１０６が一時停止された時点に最新であったオフセットから読み取ることを再開することができるように、復元される。ランタイム状態２０２に格納されたファイルリソース３１４は、それらのファイルリソースに対するハンドルが開かれ、さらにアプリケーション１０６が再開されるのに先立ち、ファイルリソース３１４の名前付きのロケーションで復元することができる。
【００４４】
工程５１６から、ルーチン５００は、工程５１８に進み、アプリケーション１０６といくつかのタイプの復元されたリソースの間で間接指定の層を提供するようにプロキシ層が実行される。アプリケーション要求を変換するのにプロキシ層を使用することに関するさらなる詳細が、図６に関連して以下で提供される。プロキシ層がインスタンス化されると、ルーチン５００は、工程５２０に進み、アプリケーション１０６の実行が、アプリケーション１０６が、アプリケーション１０６の一時停止の時点で実行されていたポイントで再スタートされる。工程５２０から、ルーチン５００は、工程５２２に進み、ルーチン５００は、終了する。
【００４５】
図６は、本明細書で開示される一実施形態におけるアプリケーション要求６０４を変換するのに利用されるプロキシ層６０２の態様を示すコンピュータソフトウェアアーキテクチャ図である。上記で簡単に説明したとおり、ランタイム状態２０２が作成された後に、いくつかのシステムリソースが変更される可能性がある。その結果、アプリケーション１０６が再開された際、これらのリソースが、利用できない、名前を変更されている、番号を変更されている、またはそれ以外で異なるように識別される可能性がある。アプリケーション１０６の実行が再開された後に、これらのリソースへのアクセスをアプリケーション１０６に提供するために、プロキシ層６０２が設けられる。プロキシ層６０２は、アプリケーション１０６といくつかのタイプのリソースの間に間接指定のレベルを提供する。
【００４６】
図６に示されるとおり、プロキシ層６０２は、システムリソース６０６、ネットワーク接続６０８、ファイルリソース６１０、およびＵＩリソース６１２などの、いくつかのタイプのリソースに関するアプリケーション要求６０４を受信する。プロキシ層６０２は、アプリケーション１０６が再開された際、アプリケーション要求６０４が、システムリソースにより使用されるロケーション、名前、および他のタイプの識別子に適合するように、アプリケーション要求６０４を変換する。例えば、或るファイルが、アプリケーション１０６が一時停止された時点で１つのロケーションに存在し得るが、アプリケーション１０６が再開された際、別のロケーションに位置していることが可能である。プロキシ層６０２は、そのファイルの元のロケーションにおけるそのファイルに関するアプリケーション要求６０４を、その新たなロケーションに変換する。別の例として、或るＵＩウインドウが、アプリケーション１０６が一時停止された時点で１つのハンドルにより識別されるが、アプリケーション１０６が再開された時点で別のハンドルにより識別されることが可能である。プロキシ層６０２は、そのウインドウに関するアプリケーション要求６０４をインターセプトし、さらにアプリケーション要求６０４が成功するようにそれらのハンドルを変換する。同様に、或るネットワークポートが、アプリケーション１０６が一時停止された時点でアプリケーション１０６により使用中であり得るが、アプリケーション１０６が再開された際、利用できない可能性がある。プロキシ層６０２は、元のポート番号を、アプリケーション１０６が実行を再開した際に利用可能である新たなポートに変換する。
【００４７】
プロキシ層６０２は、システムリソース６０６、ネットワーク接続６０８、ファイルリソース６１０、およびＵＩリソース６１２を求める要求を変換するものとして図６に例示されてきたが、プロキシ層６０２は、他のタイプのリソースを求める要求を変換することも可能であることを理解されたい。また、変更されたリソースを求めるアプリケーション要求６０４が、アプリケーション１０６の実行が再開された後に成功し得ることを確実にするために、他のタイプの機構が利用されてもよいことも理解されたい。
【００４８】
図７は、一実施形態におけるアプリケーション１０６のランタイム状態２０２を格納するため、および再開するための本明細書で開示される技術を利用する２つのコンピュータシステム間で、実行されるアプリケーション１０６を移行させるための例示的なルーチン７００を示すフローチャートである。ルーチン７００は、工程７０２で始まり、アプリケーションランタイム状態２０２が、図４に関連して上記で説明した様態でキャプチャされ、さらに永続化される。
【００４９】
アプリケーションランタイム状態２０２が永続化されると、ルーチン７００は、工程７０４に進む。工程７０４で、ランタイム状態２０２が、別のコンピュータに移される。このことは、様々な理由で望ましい可能性がある。例えば、コンピュータの間でアプリケーションランタイム状態２０２を移行させることは、アプリケーション１０６がシャットダウンされ、さらに移行先のコンピュータ上で再スタートされることを要求することなしに、コンピュータの処理負荷が負荷分散されることを許す可能性がある。また、アプリケーションランタイム状態２０２の移行は、他の理由で望ましい可能性もある。
【００５０】
ランタイム状態２０２が、移行先のコンピュータに移行させられると、ルーチン７００は、工程７０６に進み、アプリケーションランタイム状態２０２が、図５を参照して上述した様態で移行先のコンピュータにおいて復元される。工程７０６から、ルーチン７００は、工程７０８に進み、ルーチン７００は、終了する。
【００５１】
図８は、一実施形態におけるアプリケーション１０６のランタイム状態２０２を格納するため、および再開するための本明細書で開示される技術を利用するコンピュータ１０８上でメンテナンス工程を実行するための例示的なルーチン８００を示すフローチャートである。ルーチン８００は、工程８０２で始まり、ランタイム状態２０２が、図４を参照して上述した様態でキャプチャされ、さらに永続化される。工程８０２から、ルーチン８００は、工程８０４に進み、コンピュータ１０８上でシステムメンテナンスが実行される。例えば、オペレーティングシステム１０４上、またはコンピュータ１０８のハードウェア上でメンテナンスまたはアップグレードを実行することができる。メンテナンス工程が実行されると、ルーチン８００は、工程８０６に進み、アプリケーションランタイム状態２０２が、図５に対して上述した様態で復元される。工程８０６から、ルーチン８００は、工程８０８に進み、ルーチン８００は、終了する。図７乃至図８に関連して上述した以外の理由で、実行されているアプリケーションの状態を一時停止し、さらに復元することが望ましい可能性もあることを理解されたい。
【００５２】
図９は、本明細書で提示される様々な実施形態を実施することができるコンピューティングシステムに関する例示的なコンピュータハードウェアおよびソフトウェアのアーキテクチャを示すコンピュータアーキテクチャ図である。図９に示されるコンピュータアーキテクチャは、従来のデスクトップコンピュータ、ラップトップコンピュータ、またはサーバコンピュータを示し、さらに本明細書で説明される様々なソフトウェア構成要素を実行するのに利用することができる。
【００５３】
図９に示されるコンピュータアーキテクチャは、中央処理装置９０２（「ＣＰＵ」）と、ランダムアクセスメモリ９１４（「ＲＡＭ」）および読み取り専用メモリ（「ＲＯＭ」）９１６を含むシステムメモリ９０８と、このメモリをＣＰＵ９０２に結合するシステムバス９０４とを含む。起動中などに、コンピュータ９００内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム（「ＢＩＯＳ」）が、ＲＯＭ９１６の中に格納される。コンピュータ９００は、以下でより詳細に説明される、オペレーティングシステム９１８、アプリケーションプログラム、および他のプログラムモジュールを格納するための大容量ストレージデバイス９１０をさらに含む。
【００５４】
大容量ストレージデバイス９１０は、バス９０４に接続された大容量ストレージコントローラ（図示せず）を介してＣＰＵ９０２に接続される。大容量ストレージデバイス９１０、およびデバイス９１０に関連するコンピュータ可読記録媒体は、コンピュータ９００に不揮発性ストレージを提供する。本明細書に含まれるコンピュータ可読メディアの説明は、ハードディスクドライブまたはＣＤ−ＲＯＭドライブなどの大容量ストレージデバイスについて述べるものの、コンピュータ可読記録媒体は、コンピュータ９００によりアクセスされ得る任意の利用可能なコンピュータストレージメディアであり得ることを理解されたい。
【００５５】
例として、限定としてではなく、コンピュータ可読記録媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するために任意の方法または技術で実施された揮発性メディアおよび不揮発性メディア、リムーバブルメディアと非リムーバブルメディアを含み得る。例えば、コンピュータ可読記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のソリッドステートメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（「ＤＶＤ」）、ＨＤ−ＤＶＤ、ブルーレイ、もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望される情報を格納するのに使用されることが可能であるとともに、コンピュータ９００によりアクセスされ得る他の任意の一時的でないメディアが含まれるが、以上には限定されない。
【００５６】
また、本明細書で開示されるコンピュータ可読メディアは、通信メディアも包含することを理解されたい。通信メディアは、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構としてコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実現し、さらに任意の情報配信メディアを含む。「変調されたデータ信号」という用語は、信号内に情報を符号化するように特性の１つまたは複数が設定された、または変更された信号を意味する。例として、限定としてではなく、通信メディアには、有線ネットワークもしくは直接配線接続などの有線メディア、ならびに音響メディア、ＲＦメディア、赤外線メディア、および他のワイヤレスメディアなどのワイヤレスメディアが含まれる。上述のメディアのうちの任意のメディアの組み合わせもまた、コンピュータ可読メディアの範囲に含められなければならない。コンピュータ可読記録媒体は、通信メディアを包含しない。
【００５７】
様々な実施形態によれば、コンピュータ９００は、ネットワーク９２０のようなネットワークを介して遠隔コンピュータに対する論理接続を使用するネットワーク化された環境において動作することが可能である。バス９０４に接続されたネットワークインターフェースユニット９０６を介してコンピュータ９００をネットワーク９２０に接続することができる。ネットワークインターフェースユニット９０６は、他のタイプのネットワークおよび遠隔コンピュータシステムを接続するのに利用されることも可能であることを理解されたい。また、コンピュータ９００は、キーボード、マウス、または電子スタイラス（図９に示さず）を含む、いくつかの他のデバイスからの入力を受信するため、および処理するための入出力コントローラ９１２を含むことも可能である。同様に、入出力コントローラは、ディスプレイスクリーン、プリンタ、または他のタイプの出力デバイス（やはり、図９に示さず）に出力を供給することも可能である。
【００５８】
上記で簡単に述べたとおり、ネットワーク化されたデスクトップコンピュータ、ラップトップコンピュータ、またはサーバコンピュータの工程を制御するのに適したオペレーティングシステム９１８を含む、いくつかのプログラムモジュールおよびデータファイルを、コンピュータ９００の大容量ストレージデバイス９１０およびＲＡＭ９１４の中に格納することができる。また、大容量ストレージデバイス９１０およびＲＡＭ９１４は、１つまたは複数のプログラムモジュールを格納することも可能である。詳細には、大容量ストレージデバイス９１０およびＲＡＭ９１４は、仮想化されたアプリケーション１０６、アプリケーション仮想化層１０２、および／または上述したその他のソフトウェア構成要素を格納することが可能である。また、大容量ストレージデバイス９１０およびＲＡＭ９１４は、他のプログラムモジュール、ならびにアプリケーション状態２０２などのデータを格納することも可能である。
【００５９】
一般に、ソフトウェアアプリケーションまたはモジュールは、ＣＰＵ９０２にロードされ、さらに実行されると、ＣＰＵ９０２および全体的なコンピュータ９００を汎用コンピューティングシステムから、本明細書で提示される機能を実行するようにカスタマイズされた専用のコンピューティングシステムに変換する。ＣＰＵ９０２は、任意の数の状態を個々に、または集合的にとり得る、任意の数のトランジスタまたは他のディスクリートの回路要素から構築することができる。より具体的には、ＣＰＵ９０２は、ソフトウェア内、またはモジュール内に含まれる実行可能命令に応答して、１つまたは複数の有限状態マシンとして動作することが可能である。これらのコンピュータ実行可能命令は、ＣＰＵ９０２がどのように状態の間を遷移するかを指定することによりＣＰＵ９０２を変換して、その結果、ＣＰＵ９０２を構成するトランジスタ、または他のディスクリートのハードウェア要素を物理的に変換することが可能である。
【００６０】
また、ソフトウェアまたはモジュールを大容量ストレージデバイス上に符号化することは、その大容量ストレージデバイス、または関連するコンピュータ可読記録媒体の物理的構造を変換することも可能である。物理的構造の特定の変換は、この説明の様々な実施形態において、様々な要因に依存し得る。そのような要因の例には、コンピュータ可読記録媒体を実施するのに使用される技術、コンピュータ可読記録媒体が一次ストレージとして特徴付けれるか、または二次ストレージとして特徴付けれるかなどが含まれ得るが、以上には限定されない。例えば、コンピュータ可読記録媒体が半導体ベースのメモリとして実施される場合、ソフトウェアまたはモジュールは、この半導体メモリの物理的状態を、この半導体メモリにソフトウェアが符号化されると、変換することが可能である。例えば、ソフトウェアは、この半導体メモリを構成するトランジスタ、キャパシタ、または他のディスクリートの回路要素の状態を変換することが可能である。
【００６１】
別の例として、コンピュータ可読ストレージメディアは、磁気技術または光学技術を使用して実施することができる。そのような実施形態において、ソフトウェアまたはモジュールは、磁気メディアまたは光メディアの物理的状態を、ソフトウェアが磁気メディアまたは光メディアに符号化されると、変換することが可能である。これらの変換は、所与の磁気メディア内の特定のロケーションの磁気特性を変えることを含むことも可能である。また、これらの変換は、所与の光メディア内の特定のロケーションの物理的特徴または物理的特性を変えて、それらのロケーションの光特性を変化させるようにすることを含むことも可能である。この説明の範囲および趣旨を逸脱することなく、物理メディアの他の変換も可能であり、上述の例は、この説明を容易にするように提供されているに過ぎない。
【００６２】
以上に基づいて、アプリケーションランタイム状態を格納するため、および再開するための技術が本明細書で提示されてきたことが理解されよう。本明細書で提示される主題は、構造上の特徴、方法上の工程、およびコンピュータ可読メディアに特有の言い回しで説明されてきたものの、添付の特許請求の範囲において規定される本発明は、本明細書で説明される特定の特徴、工程、またはメディアに必ずしも限定されないことを理解されたい。むしろ、それらの特定の特徴、工程、およびメディアは、特許請求の範囲を実施する例示的な形態として開示される。
【００６３】
上述した主題は、単に例として提供されており、限定するものと解釈されるべきではない。例示され、説明される例示的な実施形態および応用例に従わずに、添付の特許請求の範囲に記載される本発明の真の趣旨および範囲を逸脱することなしに、本明細書で説明される主題に様々な変形および変更を行うことができる。
【図１】
0006009459.tif 000002
【図２】
0006009459.tif 000003
【図３】
0006009459.tif 000004
【図４】
0006009459.tif 000005
【図５】
0006009459.tif 000006
【図６】
0006009459.tif 000007
【図７】
0006009459.tif 000008
【図８】
0006009459.tif 000009
【図９】
0006009459.tif 000010