JP2014501425A - アプリケーションランタイム状態の格納、及び、再開 - Google Patents

アプリケーションランタイム状態の格納、及び、再開 Download PDF

Info

Publication number
JP2014501425A
JP2014501425A JP2013547619A JP2013547619A JP2014501425A JP 2014501425 A JP2014501425 A JP 2014501425A JP 2013547619 A JP2013547619 A JP 2013547619A JP 2013547619 A JP2013547619 A JP 2013547619A JP 2014501425 A JP2014501425 A JP 2014501425A
Authority
JP
Japan
Prior art keywords
application
computer
runtime state
state
runtime
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013547619A
Other languages
English (en)
Other versions
JP6009459B2 (ja
Inventor
ケカー チャールズ
コーリ アセム
エリオット スターンズ スコット
ヘリック レイアーソン クリストファー
ウェリントン ミフォード ジュニア クリード
メル アンダーソン アンジェラ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014501425A publication Critical patent/JP2014501425A/ja
Application granted granted Critical
Publication of JP6009459B2 publication Critical patent/JP6009459B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Retry When Errors Occur (AREA)
  • Debugging And Monitoring (AREA)

Abstract

アプリケーションの実行が一時停止され、さらにそのアプリケーションのランタイム状態が収集され、さらに永続化される。次に、そのアプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。また、このランタイム状態を、別のコンピュータに移すことも可能である。アプリケーションの実行を再開するために、アプリケーションのランタイム状態が復元される。アプリケーションのランタイム状態が復元されると、アプリケーションの実行は、実行が一時停止されたポイントから再スタートすることができる。また、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関するアプリケーションから受信された要求を変換するのにプロキシ層を利用することも可能である。

Description

本発明は、アプリケーションランタイム状態の格納、及び、再開に関する。
サーバファームにおけるサーバコンピュータのメンテナンスは、多くの理由で困難な場合がある。例えば、情報技術(「IT」)管理者が、サーバコンピュータ上でメンテナンスオペレーションを実行する必要がある場合、サーバコンピュータ上で実行されているオペレーティングシステムをシャットダウンすることができる前に、すべてのユーザセッションを閉じることが、通常必要である。ユーザセッションを適切に閉じるために、IT管理者は、それらのセッションにおいて実行されているユーザアプリケーションのすべてをシャットダウンしなければならない。ユーザがユーザのアプリケーションを順序正しくシャットダウンすることができない場合、保存されていないデータが、消失される可能性がある。このようなデータの消失は、ユーザとIT管理者の双方に極めて苛立たしい。
本明細書で行われる開示が提示されるのは、上述の内容、および、その他の考慮に関連してである。
米国特許第7,225,264号明細書 米国特許第7,200,632号明細書 米国特許第7,451,451号明細書 米国特許第7,797,372号明細書
アプリケーションのランタイム状態を格納するため、および再開するための技術が、本明細書で説明される。本明細書で開示される概念および技術の実施形態を介して、実行されているアプリケーションのランタイム状態を、そのアプリケーションが実行されているオペレーティングシステムのランタイム状態とは独立にキャプチャし、保存することができる。次に、そのアプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。また、そのアプリケーションのランタイム状態は、コンピュータの処理負荷を負荷分散するために、別のコンピュータに移されることも可能である。これらのメンテナンス工程が完了すると、アプリケーションのランタイム状態が復元されることが可能であり、さらにアプリケーションの実行が、ランタイム状態がキャプチャされた時点にアプリケーションが入っていた状態で再開されることが可能である。このようにして、保存されていないアプリケーションデータを消失することなしに、メンテナンス工程を実行することができる。
本明細書で提示される一態様によれば、コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求が受信される。例えば、IT管理者が、そのような要求を行う場合がある。そのような要求を受信したことに応答して、アプリケーションの実行が一時停止され、さらにアプリケーションのランタイム状態が、アプリケーションが実行されているオペレーティングシステムとは独立に収集される。ランタイム状態は、物理メモリおよび仮想メモリ、中央処理装置(「CPU」)レジスタ、ならびに命令ポインタの内容を含むことが可能である。また、ランタイム状態は、システムリソース、ユーザインターフェース(「UI」)リソース、およびネットワーク接続の状態を含むことも可能である。また、ランタイム状態は、ランタイム状態が収集される際にアプリケーションにより使用中の任意のファイルリソースを含むことも可能である。ランタイム状態が収集されると、ランタイム状態は、ランタイム状態を大容量ストレージデバイスに保存することなどにより永続化される。
ランタイム状態が永続化された後、アプリケーションが実行されていたコンピュータ上でメンテナンス工程を実行することができる。例えば、アプリケーションが実行されていたコンピュータのハードウェア上で、またはオペレーティングシステム上でメンテナンス工程を実行することができる。さらに、アプリケーションのランタイム状態を、別のコンピュータに移すことが可能である。このことは、例えば、アプリケーションが実行されていたコンピュータの処理負荷を負荷分散するために、望ましい場合がある。
メンテナンス工程が完了すると、IT管理者などから、アプリケーションの実行を再スタートする要求を受信することができる。アプリケーションの実行を再スタートするために、アプリケーションのランタイム状態が復元される。例えば、メモリ、レジスタ、および命令ポインタの内容を、復元することができる。また、システムリソース、UIリソース、およびネットワーク接続の状態を復元することも可能である。ファイルリソースがランタイム状態に含められていた場合、それらのファイルリソースを復元することも可能である。アプリケーションのランタイム状態を復元すると、アプリケーションの実行を、アプリケーションが一時停止されたポイントから再スタートすることができる。このようにして、アプリケーションは、アプリケーションの実行が一時停止された時点にアプリケーションが入っていた状態で再開することができる。
別の態様によれば、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関して、アプリケーションから受信された要求を変換するためのプロキシ層が提供される。例えば、アプリケーションが、アプリケーション状態のキャプチャの直前に、アプリケーションの実行が再開された際に利用できないネットワークポート番号を利用した場合、プロキシ層が、アプリケーションに知られているネットワークポート番号と新たなネットワークポート番号の間で変換を行う。また、他のタイプの変換を、変更された名前、番号、ロケーション、または他の識別する情報を有する他のタイプのリソースに関して実行することも可能である。
本明細書で開示される実施形態は、仮想化されたアプリケーション、ハードウェア仮想化環境において実行される仮想化されていないアプリケーション、仮想化されていない環境において実行される仮想化されていないアプリケーション、および他のタイプのアプリケーションに関連して利用できることを理解されたい。また、この概要は、特許請求される主題の重要な特徴、または不可欠な特徴を特定することを意図しておらず、この概要が、特許請求される主題の範囲を限定するのに使用されることも意図していないことも理解されたい。さらに、特許請求される主題は、本開示のいずれかの部分に記載されるいずれかの欠点を解決する実施形態にも、そのようなすべての欠点を解決する実施形態にも限定されない。
本明細書で開示される一実施形態に関する1つの例示的な動作環境を示すコンピュータソフトウェアアーキテクチャ図である。 本明細書で開示される一実施形態による、アプリケーションのランタイム状態を格納するため、および再開するための本明細書で開示されるいくつかのソフトウェア構成要素の態様を示すコンピュータソフトウェアアーキテクチャ図である。 本明細書で開示される一実施形態において利用される格納されたアプリケーションランタイム状態の内容を示すデータ構造図である。 本明細書で提示される一実施形態による、アプリケーションのランタイム状態をキャプチャするため、および永続化するための本明細書で開示される1つの例示的なプロセスの態様を示すフローチャートである。 本明細書で提示される一実施形態による、アプリケーションの、キャプチャされ、さらに永続化されたランタイム状態を復元するための本明細書で開示される1つの例示的なプロセスの態様を示すフローチャートである。 本明細書で開示される一実施形態におけるアプリケーション要求を変換するために利用されるプロキシ層の態様を示すコンピュータソフトウェアアーキテクチャ図である。 一実施形態におけるアプリケーションのランタイム状態を格納するため、および再開するための本明細書で開示される技術を利用する2つのコンピュータシステム間で、実行されるアプリケーションを移行させるための例示的なルーチンを示すフローチャートである。 一実施形態におけるアプリケーションのランタイム状態を格納するため、および再開するための本明細書で開示される技術を利用してコンピュータ上でメンテナンス工程を実行するための例示的なルーチンを示すフローチャートである。 本明細書で提示される様々な実施形態を実施することができるコンピューティングシステムに関する例示的なコンピュータハードウェアおよびソフトウェアのアーキテクチャを示すコンピュータアーキテクチャ図である。
以下の詳細な説明は、アプリケーションランタイム状態を格納するため、および再開するための技術を対象とする。上記で簡単に説明したとおり、実行されているアプリケーションのランタイム状態を、そのアプリケーションが実行されているオペレーティングシステムのランタイム状態とは独立にキャプチャし、保存することができる。次に、そのアプリケーションが実行されていたオペレーティングシステム上、またはコンピュータ上でメンテナンス工程を実行することができる。また、そのアプリケーションのランタイム状態を、コンピュータの処理負荷を負荷分散するために、別のコンピュータに移すことも可能である。その後、そのアプリケーションのランタイム状態を復元することができる。アプリケーションのランタイム状態が復元されると、アプリケーションの実行を、アプリケーションが一時停止されたポイントから再スタートすることができる。また、アプリケーションのランタイム状態が永続化された後に変更されたリソースに関して、アプリケーションから受信された要求を変換するのにプロキシ層を利用することも可能である。以上、およびその他の特徴に関するさらなる詳細は、図1乃至図9に関連して以下で説明される。
本明細書で説明される主題は、コンピュータシステム上のオペレーティングシステムおよびアプリケーションプログラムの実行に関連して実行されるプログラムモジュールの一般的な脈絡で提示されるが、他の実施形態が、他のタイプのプログラムモジュールと組み合わせて実行されてもよいことが当業者には認識されよう。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、構成要素、データ構造、および他のタイプの構造が含まれる。さらに、本明細書で説明される主題は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電子機器またはプログラマブル家庭用電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む、他のコンピュータシステム構成で実施されてもよいことが当業者には理解されよう。
以下の詳細な説明において、本明細書の一部分を形成するとともに、特定の実施形態または実施例の例示として示される添付の図面を参照する。以下に、いくつかの図で同様の参照符号が同様の要素を表すそれらの図面を参照して、アプリケーションのランタイム状態を格納するため、および再開するためのコンピューティングシステムおよびコンピューティング方法の態様を説明する。
図1は、本明細書で開示される実施形態に関する1つの例示的な動作環境100を示すソフトウェアおよびネットワークのアーキテクチャ図である。図1に示される例示的な動作環境100は、本明細書で「アプリケーション106」と呼ぶ場合がある仮想化されたアプリケーション106を実行するための環境を提供するように構成されたコンピュータ108を含む。この機能を提供するために、コンピュータ108は、オペレーティングシステム104と、アプリケーション仮想化層102とを含む。コンピュータ108は、アプリケーションランタイム状態を格納するため、および再開するための本明細書で提示される工程を実行することができる標準のデスクトップコンピュータもしくはラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータ、スマートフォン、または他の任意のコンピューティングデバイスであり得る。
アプリケーション仮想化層102は、アプリケーション仮想化環境を提供するように構成されたソフトウェア構成要素である。これに関して、アプリケーション仮想化層102は、アプリケーション106を実行するように構成される。アプリケーション仮想化層102は、アプリケーションの実行をオペレーティングシステム104からカプセル化するための機能を提供する。また、アプリケーション仮想化層102は、アプリケーション106の実行を、コンピュータ108の他のアプリケーションプログラムおよびシステムリソースからカプセル化するための機能を提供することも可能である。例えば、アプリケーション仮想化層102は、オペレーティングシステム104またはコンピュータ108のリソースを仮想化することが可能である。アプリケーション106が、実際のリソースにアクセスしようと試みた場合、アプリケーション仮想化層102が、仮想化されたリソースを、使用されるようにアプリケーション106に提示する。このようにして、アプリケーション106は、オペレーティングシステム104またはコンピュータ108により公開される実際のリソースに影響を与えない様態で実行することができる。
他の態様によれば、アプリケーション仮想化層102は、サーバコンピュータ(図示せず)からオンデマンドでアプリケーション106のいくつかの部分をロードするための機能を提供する。詳細には、アプリケーション仮想化層102は、サーバ構成要素と連携して動作して、アプリケーション106の必要とされる部分をサーバからコンピュータ108にストリーミングする。このようにして、アプリケーション106は、コンピュータ108においてオンデマンドでアクセスすることができる。さらに、アプリケーション106の必要とされる部分だけがサーバからコンピュータ108にストリーミングされる場合があるため、アプリケーション106全体をサーバからコンピュータ108に送ることなしに、アプリケーション106へのアクセスを提供することができる。アプリケーション仮想化層102の機能に関するさらなる詳細は、参照によりそれぞれ全体が明確に本明細書に組み込まれている、2007年5月29日に出願した、「System and Methods for Delivering Content over a Computer Network」という名称の米国特許第7,225,264号明細書、2007年4月3日に出願した、「Method and System for Serving Software Applications to Client Computers」という名称の米国特許第7,200,632号明細書、2008年11月11日に出願した、「Operating System Abstraction and Protection Layer」という名称の米国特許第7,451,451号明細書、および2010年9月14日に出願した、「Serving Software Applications from Servers for Client Computers」という名称の米国特許第7,797,372号明細書において見ることができる。
本明細書で開示される実施形態は、仮想化されたアプリケーション106のランタイム状態を格納すること、および再開することの脈絡で主に提示されるが、本明細書で開示される実施形態は、他のタイプのアプリケーションで利用してもよいことを理解されたい。例えば、本明細書で開示される実施形態は、ハードウェア仮想化環境において実行される仮想化されていないアプリケーションを格納し、さらに再開するのに利用することも可能である。また、本明細書で開示される実施形態は、仮想化されていない環境において実行されるアプリケーションに関連して利用することも可能である。また、本明細書で開示される実施形態は、当業者に知られている他のタイプの環境において実行されているアプリケーションに関連して利用することも可能である。アプリケーション106のランタイム状態を格納するため、および再開するための本明細書で開示される技術に関するさらなる詳細は、図2乃至図9に関連して以下で提供される。
図2は、本明細書で開示される一実施形態による、アプリケーション106のランタイム状態を格納するため、および再開するための本明細書で開示されるいくつかのソフトウェア構成要素の態様を示すコンピュータソフトウェアアーキテクチャ図である。詳細には、図2は、アプリケーション106のランタイム状態202をキャプチャし、永続化し、さらに復元するように実施形態において構成され得るいくつかのソフトウェア構成要素を示す。ランタイム状態202は、アプリケーション106の現在の実行コンテキストを定義するデータである。以下でより詳細に説明されるとおり、ランタイム状態202は、キャプチャされ、永続化され、さらに後の時点で復元されることが可能である。このようにして、アプリケーション106がシャットダウンされることを要求することなしに、コンピュータ108上、およびオペレーティングシステム104上でメンテナンス工程を実行することができる。
やはり図2に示されるとおり、いくつかの異なるソフトウェア構成要素を、ランタイム状態202をキャプチャし、永続化し、さらに復元するのに利用することができる。例えば、一実施形態において、アプリケーション仮想化層102は、ランタイム状態202をキャプチャするため、永続化するため、および復元するための本明細書で開示される工程を実行するように構成することができる。別の実施形態において、オペレーティングシステム104が、ランタイム状態202を生成し、さらに復元するように構成される。さらに別の実施形態において、アプリケーション204は、アプリケーション106に関するランタイム状態202を生成するように構成することができる。様々な実施形態において、カーネルドライバ、または他のタイプの低レベルのプログラムコードは、本明細書で説明される機能の様々な態様を可能にするようにアプリケーション204またはアプリケーション仮想化102によりオペレーティングシステム104にインストールできることを理解されたい。他のタイプの実施形態が、当業者には明白であり得る。
以下でより詳細に説明されるとおり、仮想化されたアプリケーション106に関するランタイム状態202の生成を、IT管理者などからの要求に応答して実行することができる。そのような要求に応答して、アプリケーション106の実行が一時停止される。さらに、アプリケーション106により使用中のリソースが列挙され、リソースの現在の状態がキャプチャされ、さらに状態を定義するデータが、ランタイム状態202として永続化される。以下でより詳細に説明されるとおり、ランタイム状態202は、アプリケーション106の実行コンテキストを再作成するために後の時点でストレージから取り出すことができる。さらに、ランタイム状態202を、コンピュータ108以外のコンピュータに移して、再スタートすることができる。この機能に関するさらなる詳細は、以下で提供される。
アプリケーション106をアプリケーション106の以前の状態に復元するために、格納されたランタイム状態202が、アプリケーション106の様々なプロセスを再作成し、さらにアプリケーション106により利用されるメモリの内容を復元するのに利用される。また、他のシステムリソース、ファイルリソース、およびUIリソースを再作成することもできる。さらに、一実施形態によれば、ランタイム状態202を作成した後に変更されたリソースに対するアプリケーション106からの要求を変換するのにプロキシ層が利用される。ランタイム状態202を復元すると、アプリケーション106の実行を再スタートすることができる。以上の工程に関するさらなる詳細は、図3乃至図8に関連して以下で提供される。
図2は、単一のアプリケーション106に関するランタイム状態202の作成を例示するものの、本明細書で開示される実施形態は、複数のアプリケーション106に関するランタイム状態202を同時に作成するのに利用できることを理解されたい。例えば、複数のアプリケーションの実行コンテキストを同時にキャプチャするために本明細書で提示される概念を利用してランタイム状態202を生成することができる。格納されたランタイム状態202は、その後、その複数のアプリケーションの実行を同時に再開するのに利用することができる。
やはり上述したとおり、本明細書で開示される実施形態は、主に、仮想化されたアプリケーション106に関するランタイム状態202を生成する脈絡で説明されるものの、本明細書で提示される実施形態は、他のタイプのアプリケーションで利用してもよいことを理解されたい。例えば、本明細書で開示される実施形態は、ハードウェア仮想化環境において実行される仮想化されていないアプリケーション、仮想化されていない環境において実行される仮想化されていないアプリケーション、および他のタイプのアプリケーションで利用してもよい。また、ランタイム状態202は、オペレーティングシステム104の実行状態とは独立に生成されることも理解されたい。このようにして、ランタイム状態202は、場合により、オペレーティングシステム104の異なるバージョンを実行している別のコンピュータに移行し、さらに元の状態に復元することが可能である。
図3は、本明細書で開示される一実施形態において利用される格納されたランタイム状態202(「ランタイム状態202」と本明細書で呼ぶ場合がある)の内容を示すデータ構造図である。図3に示されるとおり、アプリケーションランタイム状態202は、メモリ内容302を含む。メモリ内容302は、アプリケーション106により使用される任意の仮想メモリ、共有されるメモリ、物理メモリ、または他のメモリの内容である。また、アプリケーションランタイム状態202は、レジスタコンテキスト304も含む。レジスタコンテキスト304は、アプリケーション106が実行されているコンピュータ108のCPUにおける任意のレジスタの内容である。また、レジスタコンテキスト304は、アプリケーション106の各スレッド、または各プロセスに関する命令ポインタ306を含むことも可能である。
一実施形態において、アプリケーションランタイム状態202は、システムリソース状態308も含む。システムリソース状態308は、アプリケーション106の実行が一時停止された時点でアプリケーション106により使用中であるシステムリソースのセットの状態を定義するデータである。システムリソース状態308は、レジストリキーに対してアプリケーション106により開かれたハンドル、カーネルオブジェクトに対して開かれたハンドル、ローカルファイルシステム上、またはネットワーク共有上のファイル、アプリケーション106により使用中のTCPポート、および遠隔リソースに対してアプリケーション106により開かれた接続の状態を定義するデータを含むことが可能である。また、システムリソース状態308は、アプリケーション106が一時停止された時点でアプリケーション106により使用中の他のタイプのシステムリソースを定義するデータを含むことも可能である。
一実施形態によれば、アプリケーションランタイム状態202は、UIリソース状態310も含む。UIリソース状態310は、アプリケーション106が一時停止された時点でアプリケーション106により使用中のUI要素を定義するデータを含む。例えば、UIリソース状態310は、UIウインドウのロケーション、複数のUI構成要素の間の関係、ウインドウハンドル、ならびに他のタイプのUIリソースの状態を定義するデータを定義することが可能である。
一実施形態によれば、アプリケーション106により実行されるUI作成工程は、アプリケーション106の実行中にログ記録される。ログ記録されたUI作成工程を定義するデータは、アプリケーションランタイム状態202の中に格納され、さらにアプリケーション106が再スタートされる時点で、アプリケーションが一時停止された時点でアプリケーション106により提示されていたUIを再作成するのに利用することが可能である。また、他のタイプの機構を利用して、アプリケーション106が再スタートされる時点でアプリケーション106により提示されるUI要素を再作成するのに利用できるUIリソース状態310を生成することも可能であることを理解されたい。
また、アプリケーションランタイム状態202は、ネットワーク接続状態312を含むことも可能である。ネットワーク接続状態312は、アプリケーション106が一時停止された時点でアプリケーション106により利用されていた任意のネットワーク接続の状態を定義するデータである。ネットワーク接続状態312は、例えば、ローカルネットワークリソースに対するハンドル、ネットワークポート、および他のネットワーク関連のデータを定義することが可能である。
一実施形態において、アプリケーション106が一時停止された時点でアプリケーション106により使用中であったすべてのファイルリソースが、アプリケーション106が復元された際、ローカルファイルシステム上で同一の名前の下で利用可能である。しかし、他の実施形態において、アプリケーション106により使用中のファイルリソース314は、アプリケーションランタイム状態202に対する追加として束ねられる。また、ファイルリソース314は、様々なファイルリソース314に対するシークポインタの値を含むことも可能である。以下でより詳細に説明されるとおり、この束ねられたファイルリソース314は、アプリケーション106にファイルリソース314を提示するために、ランタイム状態202が再作成される時点で利用することも可能である。
図3に示されるアプリケーションランタイム状態202の内容は、単に例示的であることを理解されたい。様々な実施形態によれば、他のデータが、アプリケーションランタイム状態202の中に含められることも可能である。しかし、一般に、アプリケーションランタイム状態202は、アプリケーション106が後の時点で再開できるように、アプリケーション106の実行コンテキストを再作成するのに必要なデータを含むことを理解されたい。アプリケーションランタイム状態202の作成および使用に関するさらなる詳細は、図4乃至図5に関連して以下で提供される。
図4は、本明細書で提示される一実施形態による、アプリケーション106のランタイム状態202をキャプチャするため、および永続化するための本明細書で開示される1つの例示的なルーチン400の態様を示すフローチャートである。図4およびその他の図に関連して本明細書で説明される論理工程は、(1)コンピュータにより実施される工程のシーケンス、もしくはコンピューティングシステム上で実行される複数のプログラムモジュールとして、さらに/または(2)コンピューティングシステム内の互いに接続されたマシン論理回路もしくは回路モジュールとして実施されることを理解されたい。実施形態は、コンピューティングシステムの性能および他の要件に依存する選択の問題である。したがって、本明細書で説明される論理工程は、工程、構造デバイス、作用、またはモジュールという様々な呼ばれ方をする。これらの工程、構造デバイス、作用、およびモジュールは、ソフトウェアで、ファームウェアで、専用のデジタルロジックで、さらに以上の任意の組み合わせで実施することができる。また、図に示され、本明細書で説明されるよりも多い、または少ない工程を実行してもよいことも理解されたい。また、これらの工程は、本明細書で説明されるのとは異なる順序で実行することも可能である。
ルーチン400は、工程402で始まり、アプリケーション106の実行が一時停止される。詳細には、アプリケーションプロセスにおけるすべてのスレッドの実行が一時停止される。アプリケーション106が一時停止されると、ルーチン400は、工程404に進み、メモリ内容302がキャプチャされる。上述したとおり、メモリ内容302は、アプリケーション106により使用中のすべての物理メモリ、仮想メモリ、および他のタイプのメモリの内容を含む。メモリ内容302は、アプリケーションランタイム状態202の中に格納される。
工程404から、ルーチン400は、工程406に進み、レジスタコンテキスト304がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納される。上述したとおり、レジスタコンテキスト304は、アプリケーション106が実行されるコンピュータ108の1つまたは複数のCPUまたはCPUコアのレジスタの内容である。レジスタコンテキスト304がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納されると、ルーチン400は、工程408に進む。
工程408で、命令ポインタ306がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納される。次に、ルーチン400は、工程410に進み、システムリソース状態308がキャプチャされ、さらにアプリケーションランタイム状態202の中に格納される。上述したとおり、システムリソース状態308は、アプリケーション106により使用中のリソースを識別するデータを含む。例えば、システムリソース状態308は、レジストリキーに対してアプリケーション106により開かれたハンドル、カーネルオブジェクトに対して開かれたハンドル、ローカルファイルシステム上、またはネットワーク共有上のファイル、アプリケーション106により使用中のTCPポート、遠隔リソースに対してアプリケーション106により開かれた接続、および/または他のタイプのシステムリソースの状態を識別するデータを含み得る。
工程410から、ルーチン400は、工程412に進み、UIリソース状態310がキャプチャされ、さらに格納される。上述したとおり、UIリソース状態310は、アプリケーション106により表示される任意のUI要素の状態を定義するデータである。UIリソース状態310は、ウインドウまたは他のUIオブジェクトに対するハンドル、アプリケーション106が再スタートされた時点でそれらのUIリソースを再作成するためのログデータ、および他のタイプの情報を含み得る。工程412から、ルーチン400は、工程414に進む。
工程414で、ネットワーク接続状態312がキャプチャされ、さらにランタイム状態202の中に格納される。上述したとおり、ネットワーク接続状態312は、アプリケーションが一時停止された時点でアプリケーション106により開かれていた任意のネットワーク接続の状態を定義する。次に、ルーチン400は、工程416に進み、アプリケーション106により使用中のファイルリソース314もやはり識別され、ランタイム状態202の中に格納することができる。上述したとおり、一部の実施形態において、ファイルリソース314は、ランタイム状態202の中に含められない。しかし、他の実施形態において、任意のファイルリソース314、およびそれらのリソース314に関連するシークポインタが、ランタイム状態202の中に格納される。以下でより詳細に説明されるとおり、アプリケーション106の実行を再スタートするのに先立ちファイルリソース314を再作成することができる。
メモリコンテンツ302、レジスタコンテキスト304、命令ポインタ306、システムリソース状態308、UIリソース状態310、ネットワーク接続状態312、および、場合により、ファイルリソース314がキャプチャされると、ルーチン400は、工程418に進む。工程418で、ランタイム状態202が、パッケージ化され、さらに永続化される。例えば、コンピュータ108がアクセスできる大容量ストレージデバイスにランタイム状態202を永続化することができる。代替として、コンピュータ108がアクセスできるネットワークロケーションにランタイム状態を永続化してもよい。工程418から、ルーチン400は、工程420に進み、ルーチン400は、終了する。
図5は、本明細書で提示される一実施形態による、アプリケーション106のそれまでにキャプチャされ、さらに永続化されたランタイム状態202を復元するための本明細書で開示される1つの例示的なルーチン500の態様を示すフローチャートである。ルーチン500は、工程502で始まり、アプリケーション106のスレッドが再作成される。スレッドが再作成されると、ルーチン500は、工程504に進み、メモリの内容が、ランタイム状態202の中に格納されたメモリ内容302を利用して復元される。メモリの内容が復元されると、ルーチン500は、工程506に進み、CPUレジスタの内容が、ランタイム状態202の中に格納されたレジスタコンテキスト304を利用して復元される。また、命令ポインタも、工程508で復元される。
工程508から、ルーチン500は、工程510に進み、システムリソースの状態が、システム復元状態308を利用して復元される。一部のシステムリソースは、ハンドルテーブルを介して間接的にアクセスすることができる。これらの事例において、それらのシステムリソースに対するすべてのハンドルが再び開かれ、さらにアプリケーション106とハンドルテーブルの間に間接指定の層が挿入されて、アプリケーションが再開された後のアプリケーションによる索引付きアクセスが、それらの開かれたハンドルの背後の実際のリソースにリダイレクトされるようになる。このプロセスに関するさらなる詳細は、図6に関連して以下で提供される。
工程510から、ルーチン500は、工程512に進み、アプリケーション106の一時停止の時点でアプリケーション106により表示されていた任意のUI要素の状態が復元される。上記で簡単に説明したとおり、このことは、そのUIを復元するためにUI作成コマンドのログを再生することを含み得る。UI要素は、しばしば、ハンドルにより参照されるため、アプリケーション106とUIリソースの間の間接指定の層もまた、必要な場合がある。このプロセスに関する詳細は、図6を参照して以下で提供される。工程512から、ルーチン500は、工程514に進む。
工程514で、アプリケーション106の一時停止の時点でアプリケーション106により開かれていた任意のネットワーク接続の状態が、ランタイム状態202の中に格納されたネットワーク接続状態312を利用して復元される。図6を参照して以下でより詳細に説明されるとおり、以前に開かれていたポート番号へのアクセスをアプリケーション106に提供するのに間接指定の層もまた、必要な場合がある。工程514でネットワーク接続状態が復元されると、ルーチン500は、工程516に進む。
工程516で、ランタイム状態202の中に格納された任意のファイルリソース314が復元される。アプリケーション106により開かれていたファイルストリーム上のシークポインタもまた、アプリケーション106が、アプリケーション106が一時停止された時点に最新であったオフセットから読み取ることを再開することができるように、復元される。ランタイム状態202に格納されたファイルリソース314は、それらのファイルリソースに対するハンドルが開かれ、さらにアプリケーション106が再開されるのに先立ち、ファイルリソース314の名前付きのロケーションで復元することができる。
工程516から、ルーチン500は、工程518に進み、アプリケーション106といくつかのタイプの復元されたリソースの間で間接指定の層を提供するようにプロキシ層が実行される。アプリケーション要求を変換するのにプロキシ層を使用することに関するさらなる詳細が、図6に関連して以下で提供される。プロキシ層がインスタンス化されると、ルーチン500は、工程520に進み、アプリケーション106の実行が、アプリケーション106が、アプリケーション106の一時停止の時点で実行されていたポイントで再スタートされる。工程520から、ルーチン500は、工程522に進み、ルーチン500は、終了する。
図6は、本明細書で開示される一実施形態におけるアプリケーション要求604を変換するのに利用されるプロキシ層602の態様を示すコンピュータソフトウェアアーキテクチャ図である。上記で簡単に説明したとおり、ランタイム状態202が作成された後に、いくつかのシステムリソースが変更される可能性がある。その結果、アプリケーション106が再開された際、これらのリソースが、利用できない、名前を変更されている、番号を変更されている、またはそれ以外で異なるように識別される可能性がある。アプリケーション106の実行が再開された後に、これらのリソースへのアクセスをアプリケーション106に提供するために、プロキシ層602が設けられる。プロキシ層602は、アプリケーション106といくつかのタイプのリソースの間に間接指定のレベルを提供する。
図6に示されるとおり、プロキシ層602は、システムリソース606、ネットワーク接続608、ファイルリソース610、およびUIリソース612などの、いくつかのタイプのリソースに関するアプリケーション要求604を受信する。プロキシ層602は、アプリケーション106が再開された際、アプリケーション要求604が、システムリソースにより使用されるロケーション、名前、および他のタイプの識別子に適合するように、アプリケーション要求604を変換する。例えば、或るファイルが、アプリケーション106が一時停止された時点で1つのロケーションに存在し得るが、アプリケーション106が再開された際、別のロケーションに位置していることが可能である。プロキシ層602は、そのファイルの元のロケーションにおけるそのファイルに関するアプリケーション要求604を、その新たなロケーションに変換する。別の例として、或るUIウインドウが、アプリケーション106が一時停止された時点で1つのハンドルにより識別されるが、アプリケーション106が再開された時点で別のハンドルにより識別されることが可能である。プロキシ層602は、そのウインドウに関するアプリケーション要求604をインターセプトし、さらにアプリケーション要求604が成功するようにそれらのハンドルを変換する。同様に、或るネットワークポートが、アプリケーション106が一時停止された時点でアプリケーション106により使用中であり得るが、アプリケーション106が再開された際、利用できない可能性がある。プロキシ層602は、元のポート番号を、アプリケーション106が実行を再開した際に利用可能である新たなポートに変換する。
プロキシ層602は、システムリソース606、ネットワーク接続608、ファイルリソース610、およびUIリソース612を求める要求を変換するものとして図6に例示されてきたが、プロキシ層602は、他のタイプのリソースを求める要求を変換することも可能であることを理解されたい。また、変更されたリソースを求めるアプリケーション要求604が、アプリケーション106の実行が再開された後に成功し得ることを確実にするために、他のタイプの機構が利用されてもよいことも理解されたい。
図7は、一実施形態におけるアプリケーション106のランタイム状態202を格納するため、および再開するための本明細書で開示される技術を利用する2つのコンピュータシステム間で、実行されるアプリケーション106を移行させるための例示的なルーチン700を示すフローチャートである。ルーチン700は、工程702で始まり、アプリケーションランタイム状態202が、図4に関連して上記で説明した様態でキャプチャされ、さらに永続化される。
アプリケーションランタイム状態202が永続化されると、ルーチン700は、工程704に進む。工程704で、ランタイム状態202が、別のコンピュータに移される。このことは、様々な理由で望ましい可能性がある。例えば、コンピュータの間でアプリケーションランタイム状態202を移行させることは、アプリケーション106がシャットダウンされ、さらに移行先のコンピュータ上で再スタートされることを要求することなしに、コンピュータの処理負荷が負荷分散されることを許す可能性がある。また、アプリケーションランタイム状態202の移行は、他の理由で望ましい可能性もある。
ランタイム状態202が、移行先のコンピュータに移行させられると、ルーチン700は、工程706に進み、アプリケーションランタイム状態202が、図5を参照して上述した様態で移行先のコンピュータにおいて復元される。工程706から、ルーチン700は、工程708に進み、ルーチン700は、終了する。
図8は、一実施形態におけるアプリケーション106のランタイム状態202を格納するため、および再開するための本明細書で開示される技術を利用するコンピュータ108上でメンテナンス工程を実行するための例示的なルーチン800を示すフローチャートである。ルーチン800は、工程802で始まり、ランタイム状態202が、図4を参照して上述した様態でキャプチャされ、さらに永続化される。工程802から、ルーチン800は、工程804に進み、コンピュータ108上でシステムメンテナンスが実行される。例えば、オペレーティングシステム104上、またはコンピュータ108のハードウェア上でメンテナンスまたはアップグレードを実行することができる。メンテナンス工程が実行されると、ルーチン800は、工程806に進み、アプリケーションランタイム状態202が、図5に対して上述した様態で復元される。工程806から、ルーチン800は、工程808に進み、ルーチン800は、終了する。図7乃至図8に関連して上述した以外の理由で、実行されているアプリケーションの状態を一時停止し、さらに復元することが望ましい可能性もあることを理解されたい。
図9は、本明細書で提示される様々な実施形態を実施することができるコンピューティングシステムに関する例示的なコンピュータハードウェアおよびソフトウェアのアーキテクチャを示すコンピュータアーキテクチャ図である。図9に示されるコンピュータアーキテクチャは、従来のデスクトップコンピュータ、ラップトップコンピュータ、またはサーバコンピュータを示し、さらに本明細書で説明される様々なソフトウェア構成要素を実行するのに利用することができる。
図9に示されるコンピュータアーキテクチャは、中央処理装置902(「CPU」)と、ランダムアクセスメモリ914(「RAM」)および読み取り専用メモリ(「ROM」)916を含むシステムメモリ908と、このメモリをCPU902に結合するシステムバス904とを含む。起動中などに、コンピュータ900内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム(「BIOS」)が、ROM916の中に格納される。コンピュータ900は、以下でより詳細に説明される、オペレーティングシステム918、アプリケーションプログラム、および他のプログラムモジュールを格納するための大容量ストレージデバイス910をさらに含む。
大容量ストレージデバイス910は、バス904に接続された大容量ストレージコントローラ(図示せず)を介してCPU902に接続される。大容量ストレージデバイス910、およびデバイス910に関連するコンピュータ可読記録媒体は、コンピュータ900に不揮発性ストレージを提供する。本明細書に含まれるコンピュータ可読メディアの説明は、ハードディスクドライブまたはCD−ROMドライブなどの大容量ストレージデバイスについて述べるものの、コンピュータ可読記録媒体は、コンピュータ900によりアクセスされ得る任意の利用可能なコンピュータストレージメディアであり得ることを理解されたい。
例として、限定としてではなく、コンピュータ可読記録媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するために任意の方法または技術で実施された揮発性メディアおよび不揮発性メディア、リムーバブルメディアと非リムーバブルメディアを含み得る。例えば、コンピュータ可読記憶媒体には、RAM、ROM、EPROM、EEPROM、フラッシュメモリもしくは他のソリッドステートメモリ技術、CD−ROM、デジタルバーサタイルディスク(「DVD」)、HD−DVD、ブルーレイ、もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望される情報を格納するのに使用されることが可能であるとともに、コンピュータ900によりアクセスされ得る他の任意の一時的でないメディアが含まれるが、以上には限定されない。
また、本明細書で開示されるコンピュータ可読メディアは、通信メディアも包含することを理解されたい。通信メディアは、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構としてコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実現し、さらに任意の情報配信メディアを含む。「変調されたデータ信号」という用語は、信号内に情報を符号化するように特性の1つまたは複数が設定された、または変更された信号を意味する。例として、限定としてではなく、通信メディアには、有線ネットワークもしくは直接配線接続などの有線メディア、ならびに音響メディア、RFメディア、赤外線メディア、および他のワイヤレスメディアなどのワイヤレスメディアが含まれる。上述のメディアのうちの任意のメディアの組み合わせもまた、コンピュータ可読メディアの範囲に含められなければならない。コンピュータ可読記録媒体は、通信メディアを包含しない。
様々な実施形態によれば、コンピュータ900は、ネットワーク920のようなネットワークを介して遠隔コンピュータに対する論理接続を使用するネットワーク化された環境において動作することが可能である。バス904に接続されたネットワークインターフェースユニット906を介してコンピュータ900をネットワーク920に接続することができる。ネットワークインターフェースユニット906は、他のタイプのネットワークおよび遠隔コンピュータシステムを接続するのに利用されることも可能であることを理解されたい。また、コンピュータ900は、キーボード、マウス、または電子スタイラス(図9に示さず)を含む、いくつかの他のデバイスからの入力を受信するため、および処理するための入出力コントローラ912を含むことも可能である。同様に、入出力コントローラは、ディスプレイスクリーン、プリンタ、または他のタイプの出力デバイス(やはり、図9に示さず)に出力を供給することも可能である。
上記で簡単に述べたとおり、ネットワーク化されたデスクトップコンピュータ、ラップトップコンピュータ、またはサーバコンピュータの工程を制御するのに適したオペレーティングシステム918を含む、いくつかのプログラムモジュールおよびデータファイルを、コンピュータ900の大容量ストレージデバイス910およびRAM914の中に格納することができる。また、大容量ストレージデバイス910およびRAM914は、1つまたは複数のプログラムモジュールを格納することも可能である。詳細には、大容量ストレージデバイス910およびRAM914は、仮想化されたアプリケーション106、アプリケーション仮想化層102、および/または上述したその他のソフトウェア構成要素を格納することが可能である。また、大容量ストレージデバイス910およびRAM914は、他のプログラムモジュール、ならびにアプリケーション状態202などのデータを格納することも可能である。
一般に、ソフトウェアアプリケーションまたはモジュールは、CPU902にロードされ、さらに実行されると、CPU902および全体的なコンピュータ900を汎用コンピューティングシステムから、本明細書で提示される機能を実行するようにカスタマイズされた専用のコンピューティングシステムに変換する。CPU902は、任意の数の状態を個々に、または集合的にとり得る、任意の数のトランジスタまたは他のディスクリートの回路要素から構築することができる。より具体的には、CPU902は、ソフトウェア内、またはモジュール内に含まれる実行可能命令に応答して、1つまたは複数の有限状態マシンとして動作することが可能である。これらのコンピュータ実行可能命令は、CPU902がどのように状態の間を遷移するかを指定することによりCPU902を変換して、その結果、CPU902を構成するトランジスタ、または他のディスクリートのハードウェア要素を物理的に変換することが可能である。
また、ソフトウェアまたはモジュールを大容量ストレージデバイス上に符号化することは、その大容量ストレージデバイス、または関連するコンピュータ可読記録媒体の物理的構造を変換することも可能である。物理的構造の特定の変換は、この説明の様々な実施形態において、様々な要因に依存し得る。そのような要因の例には、コンピュータ可読記録媒体を実施するのに使用される技術、コンピュータ可読記録媒体が一次ストレージとして特徴付けれるか、または二次ストレージとして特徴付けれるかなどが含まれ得るが、以上には限定されない。例えば、コンピュータ可読記録媒体が半導体ベースのメモリとして実施される場合、ソフトウェアまたはモジュールは、この半導体メモリの物理的状態を、この半導体メモリにソフトウェアが符号化されると、変換することが可能である。例えば、ソフトウェアは、この半導体メモリを構成するトランジスタ、キャパシタ、または他のディスクリートの回路要素の状態を変換することが可能である。
別の例として、コンピュータ可読ストレージメディアは、磁気技術または光学技術を使用して実施することができる。そのような実施形態において、ソフトウェアまたはモジュールは、磁気メディアまたは光メディアの物理的状態を、ソフトウェアが磁気メディアまたは光メディアに符号化されると、変換することが可能である。これらの変換は、所与の磁気メディア内の特定のロケーションの磁気特性を変えることを含むことも可能である。また、これらの変換は、所与の光メディア内の特定のロケーションの物理的特徴または物理的特性を変えて、それらのロケーションの光特性を変化させるようにすることを含むことも可能である。この説明の範囲および趣旨を逸脱することなく、物理メディアの他の変換も可能であり、上述の例は、この説明を容易にするように提供されているに過ぎない。
以上に基づいて、アプリケーションランタイム状態を格納するため、および再開するための技術が本明細書で提示されてきたことが理解されよう。本明細書で提示される主題は、構造上の特徴、方法上の工程、およびコンピュータ可読メディアに特有の言い回しで説明されてきたものの、添付の特許請求の範囲において規定される本発明は、本明細書で説明される特定の特徴、工程、またはメディアに必ずしも限定されないことを理解されたい。むしろ、それらの特定の特徴、工程、およびメディアは、特許請求の範囲を実施する例示的な形態として開示される。
上述した主題は、単に例として提供されており、限定するものと解釈されるべきではない。例示され、説明される例示的な実施形態および応用例に従わずに、添付の特許請求の範囲に記載される本発明の真の趣旨および範囲を逸脱することなしに、本明細書で説明される主題に様々な変形および変更を行うことができる。

Claims (10)

  1. コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求を受信するステップと、
    前記要求を受信するステップに応答して、オペレーティングシステムの状態とは独立に前記アプリケーションの前記ランタイム状態を収集し、さらに前記ランタイム状態を永続化するステップと
    のためのコンピュータにより実施される工程を実行することを含むことを特徴とするコンピュータにより実施される方法。
  2. 前記アプリケーションの前記ランタイム状態を復元する要求を受信するステップと、
    前記アプリケーションの前記ランタイム状態を復元する前記要求を受信するステップに応答して、前記アプリケーションの前記ランタイム状態を復元し、さらに前記復元されたアプリケーションを実行するステップと
    をさらに含むことを特徴とする請求項1に記載のコンピュータにより実施される方法。
  3. 前記アプリケーションの前記ランタイム状態を永続化するステップの後に変更されたリソースに関する前記アプリケーションからの要求を変換するためのプロキシ層を設けるステップをさらに含むことを特徴とする請求項2に記載のコンピュータにより実施される方法。
  4. 前記ランタイム状態を永続化するステップの後、前記ランタイム状態を復元するステップの前に、前記コンピュータ上でメンテナンス工程を実行するステップをさらに含むことを特徴とする請求項3に記載のコンピュータにより実施される方法。
  5. 前記アプリケーションは、仮想化されたアプリケーションを含むことを特徴とする請求項3に記載のコンピュータにより実施される方法。
  6. 前記ランタイム状態は、メモリ内容と、レジスタコンテキストと、命令ポインタとを含むことを特徴とする請求項5に記載のコンピュータにより実施される方法。
  7. コンピュータにより実行されると、前記コンピュータに
    コンピュータ上で実行されているアプリケーションのランタイム状態を格納する要求を受信させ、
    前記要求を受信させたことに応答して、オペレーティングシステムの状態とは独立に前記アプリケーションの前記ランタイム状態を収集させ、前記ランタイム状態を永続化させ、
    前記アプリケーションの前記ランタイム状態を復元する要求を受信させ、
    前記アプリケーションの前記ランタイム状態を復元する前記要求を受信させたことに応答して、前記アプリケーションの前記ランタイム状態を復元させ、前記復元されたアプリケーションを実行させる
    コンピュータ実行可能命令をその上に格納していることを特徴とするコンピュータ可読記録媒体。
  8. 前記コンピュータにより実行されると、前記コンピュータに、前記アプリケーションの前記ランタイム状態を永続化した後に変更された1つまたは複数のリソースに関する前記アプリケーションからの要求を変換するためのプロキシ層を設けさせるさらなるコンピュータ実行可能命令をその上に格納していることを特徴とする請求項7に記載のコンピュータ可読記録媒体。
  9. 前記コンピュータにより実行されると、前記コンピュータに、前記ランタイム状態を、前記コンピュータの処理負荷を負荷分散させるように前記コンピュータから第2のコンピュータに移させるさらなるコンピュータ実行可能命令をその上に格納していることを特徴とする請求項8に記載のコンピュータ可読記録媒体。
  10. 前記ランタイム状態は、前記ランタイム状態が収集された時点のシステムリソース状態、ユーザインターフェース状態、ネットワーク接続状態、および前記ランタイム状態が収集された時点で前記アプリケーションにより使用中であった1つまたは複数のファイルリソースをさらに含むことを特徴とする請求項9に記載のコンピュータ可読記録媒体。
JP2013547619A 2010-12-28 2011-12-27 アプリケーションランタイム状態の格納、及び、再開 Active JP6009459B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/979,366 2010-12-28
US12/979,366 US9223611B2 (en) 2010-12-28 2010-12-28 Storing and resuming application runtime state
PCT/US2011/067412 WO2012092289A2 (en) 2010-12-28 2011-12-27 Storing and resuming application runtime state

Publications (2)

Publication Number Publication Date
JP2014501425A true JP2014501425A (ja) 2014-01-20
JP6009459B2 JP6009459B2 (ja) 2016-10-19

Family

ID=46318661

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013547619A Active JP6009459B2 (ja) 2010-12-28 2011-12-27 アプリケーションランタイム状態の格納、及び、再開

Country Status (6)

Country Link
US (3) US9223611B2 (ja)
EP (1) EP2659354B1 (ja)
JP (1) JP6009459B2 (ja)
CN (1) CN103092777B (ja)
TW (1) TWI533213B (ja)
WO (1) WO2012092289A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017529633A (ja) * 2014-09-30 2017-10-05 ソニー インタラクティブ エンタテインメント アメリカ リミテッド ライアビリテイ カンパニー 1つまたは複数のクラウドシステムにアプリケーションを移動可能にデプロイする方法及びシステム

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101375284B (zh) 2004-10-25 2012-02-22 安全第一公司 安全数据分析方法和系统
US9223611B2 (en) 2010-12-28 2015-12-29 Microsoft Technology Licensing, Llc Storing and resuming application runtime state
US8813096B2 (en) * 2011-10-11 2014-08-19 International Business Machines Corporation Predicting the impact of change on events detected in application logic
FR2984552A1 (fr) * 2011-12-16 2013-06-21 France Telecom Procede et dispositif de gestion d'une application referencee par un dispositif
US8700678B1 (en) * 2011-12-21 2014-04-15 Emc Corporation Data provenance in computing infrastructure
US9122595B2 (en) * 2012-01-13 2015-09-01 NetSuite Inc. Fault tolerance for complex distributed computing operations
US20140053128A1 (en) * 2012-08-14 2014-02-20 Microsoft Corporation Persisting state using scripts
US10088986B2 (en) * 2012-11-15 2018-10-02 Samsung Electronics Co., Ltd. User function operation method and electronic device supporting the same
CN105051750B (zh) * 2013-02-13 2018-02-23 安全第一公司 用于加密文件系统层的系统和方法
JP6148129B2 (ja) * 2013-09-10 2017-06-14 Necプラットフォームズ株式会社 情報処理装置、ファームウェア更新方法およびファームウェア更新プログラム
CN104199676A (zh) * 2014-02-24 2014-12-10 无锡天脉聚源传媒科技有限公司 一种还原界面内容的方法及装置
US20160036923A1 (en) * 2014-08-03 2016-02-04 Microsoft Corporation Efficient Migration of Application State Information
US20170235473A1 (en) * 2014-08-11 2017-08-17 Huawei Technologies, Co., Ltd. Method and Apparatus for Loading Application Program View, and Electronic Terminal
US11531672B1 (en) * 2015-02-05 2022-12-20 Bat City Labs, LLC Computerized system and method for electronically synchronizing work station sessions over a network
US10209851B2 (en) * 2015-09-18 2019-02-19 Google Llc Management of inactive windows
US10891106B2 (en) 2015-10-13 2021-01-12 Google Llc Automatic batch voice commands
CN105468358B (zh) * 2015-11-17 2019-11-05 腾讯科技(深圳)有限公司 一种移动游戏的数据处理方法以及装置
US10430266B2 (en) * 2016-06-13 2019-10-01 Vmware, Inc. Full state session reviving, forking, and snapshoting based on an application data dump
US11042450B2 (en) 2016-07-28 2021-06-22 International Business Machines Corporation Mechanism for managing container runtime state
US10579502B2 (en) 2017-02-28 2020-03-03 International Business Machines Corporation Resuming applications using pass-through servers and trace data
KR102514692B1 (ko) 2018-06-04 2023-03-29 삼성전자주식회사 다중 무선 통신 프로토콜들을 지원하는 전자 장치 및 이를 위한 방법
US11055110B2 (en) * 2018-06-05 2021-07-06 Microsoft Technology Licensing, Llc Operating system service for persistently executing programs
DK3649792T3 (da) * 2018-06-08 2022-06-20 Sivantos Pte Ltd Fremgangsmåde til overførsel af en bearbejdningstilstand i en audiologisk tilpasningsapplikation til et høreapparat
CN108932165A (zh) * 2018-07-19 2018-12-04 中山大学 一种计算机集群资源分配与调度系统
US10929200B1 (en) * 2019-09-16 2021-02-23 International Business Machines Corporation Live runtime infrastructure orchestration
FR3118378B1 (fr) * 2020-12-21 2024-01-19 Idemia France Contrôle du traitement de commandes APDU
US11567754B2 (en) * 2021-03-01 2023-01-31 Vmware, Inc. Techniques for non-disruptive operating system upgrade

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002304383A (ja) * 2001-04-05 2002-10-18 Nec Corp プログラム実行サービス提供システム、サーバ及びそのプログラム実行サービス提供方法並びにそのプログラム
JP2004246702A (ja) * 2003-02-14 2004-09-02 Toshiba Corp 計算機システム、計算機装置、計算機システムにおけるデータアクセス方法及びプログラム
US20100005474A1 (en) * 2008-02-29 2010-01-07 Eric Sprangle Distribution of tasks among asymmetric processing elements
JP2010015474A (ja) * 2008-07-07 2010-01-21 Nec Personal Products Co Ltd 情報処理装置および情報処理方法

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6763370B1 (en) 1998-11-16 2004-07-13 Softricity, Inc. Method and apparatus for content protection in a secure content delivery system
US7017188B1 (en) 1998-11-16 2006-03-21 Softricity, Inc. Method and apparatus for secure content delivery over broadband access networks
US7225264B2 (en) 1998-11-16 2007-05-29 Softricity, Inc. Systems and methods for delivering content over a computer network
US7370071B2 (en) 2000-03-17 2008-05-06 Microsoft Corporation Method for serving third party software applications from servers to client computers
US7200632B1 (en) 1999-04-12 2007-04-03 Softricity, Inc. Method and system for serving software applications to client computers
US6938096B1 (en) 1999-04-12 2005-08-30 Softricity, Inc. Method and system for remote networking using port proxying by detecting if the designated port on a client computer is blocked, then encapsulating the communications in a different format and redirecting to an open port
US7730169B1 (en) 1999-04-12 2010-06-01 Softricity, Inc. Business method and system for serving third party software applications
AU8000800A (en) 1999-10-05 2001-05-10 Ejasent Inc. Virtual network environment
US7028305B2 (en) 2001-05-16 2006-04-11 Softricity, Inc. Operating system abstraction and protection layer
US20050066037A1 (en) * 2002-04-10 2005-03-24 Yu Song Browser session mobility system for multi-platform applications
CN100463469C (zh) * 2002-10-25 2009-02-18 国际商业机器公司 在多通道上共享应用程序会话信息的方法、装置和系统
US7484208B1 (en) * 2002-12-12 2009-01-27 Michael Nelson Virtual machine migration
US7080374B2 (en) * 2002-12-18 2006-07-18 Bea Systems, Inc. System and method for using native code interpretation to move threads to a safe state in a run-time environment
US7793286B2 (en) * 2002-12-19 2010-09-07 Intel Corporation Methods and systems to manage machine state in virtual machine operations
US7596790B2 (en) 2003-08-29 2009-09-29 Intel Corporation Allocating computing resources in a distributed environment
US7546598B2 (en) 2003-09-03 2009-06-09 Sap Aktiengesellschaft Measuring software system performance using benchmarks
US7370324B2 (en) 2003-09-30 2008-05-06 Intel Corporation Switching between a service virtual machine and a guest virtual machine in a virtual machine monitor environment
US7590743B2 (en) 2003-12-23 2009-09-15 Softricity, Inc. Method and system for associating a process on a multi-user device with a host address unique to a user session associated with the process
US7559063B2 (en) * 2004-06-03 2009-07-07 International Business Machines Corporation Program flow control in computer systems
CN100498725C (zh) 2004-07-20 2009-06-10 索芙特瑞斯提股份有限公司 用于最小化计算机应用程序中的丢失的方法和系统
US8959299B2 (en) * 2004-11-15 2015-02-17 Commvault Systems, Inc. Using a snapshot as a data source
KR100737521B1 (ko) 2005-11-24 2007-07-10 한국전자통신연구원 어플리케이션 상태 정보 수집 및 복원 방법 및 시스템
US7574591B2 (en) 2006-01-12 2009-08-11 Microsoft Corporation Capturing and restoring application state after unexpected application shutdown
US9424154B2 (en) * 2007-01-10 2016-08-23 Mcafee, Inc. Method of and system for computer system state checks
US7797576B2 (en) 2007-04-27 2010-09-14 International Business Machines Corporation Checkpoint of applications using UNIX® domain sockets
US8856658B2 (en) * 2007-09-20 2014-10-07 Flash Networks Ltd. Representing user interactions as a synchronous action in a business process flow
US8510743B2 (en) * 2007-10-31 2013-08-13 Google Inc. Terminating computer applications
US8352921B2 (en) 2007-11-02 2013-01-08 Klocwork Corp. Static analysis defect detection in the presence of virtual function calls
US8078555B2 (en) * 2007-12-14 2011-12-13 Microsoft Corporation Decoupling static program data and execution data
US7861120B2 (en) * 2007-12-14 2010-12-28 Sap Ag Method and apparatus for runtime error handling
CN101561780A (zh) 2008-04-18 2009-10-21 北京闻言科技有限公司 一种使用文件来存储应用程序状态的方法
US8195774B2 (en) * 2008-05-23 2012-06-05 Vmware, Inc. Distributed virtual switch for virtualized computer systems
US20100023942A1 (en) * 2008-07-23 2010-01-28 Philip Sheu Accelerating virtual machine resume time using a pre-cached working set
US20100042719A1 (en) * 2008-08-12 2010-02-18 Junji Kinoshita Content access to virtual machine resource
US20100070678A1 (en) * 2008-09-12 2010-03-18 Vmware, Inc. Saving and Restoring State Information for Virtualized Computer Systems
US8291261B2 (en) * 2008-11-05 2012-10-16 Vulcan Technologies Llc Lightweight application-level runtime state save-and-restore utility
JP2010114665A (ja) * 2008-11-06 2010-05-20 Toshiba Corp 通信データ制御方法及び計算機システム
US8566821B2 (en) * 2008-11-11 2013-10-22 Netapp Inc. Cloning virtual machines
US8370493B2 (en) * 2008-12-12 2013-02-05 Amazon Technologies, Inc. Saving program execution state
US8539488B1 (en) * 2009-04-10 2013-09-17 Open Invention Network, Llc System and method for application isolation with live migration
CN101459690B (zh) 2008-12-25 2012-05-09 哈尔滨工程大学 一种无线公共对象请求代理结构应用中的容错方法
US9189221B2 (en) * 2009-01-27 2015-11-17 Microsoft Technology Licensing, Llc Consistent operating system servicing for distributed nodes
US7941700B2 (en) 2009-03-02 2011-05-10 Microsoft Corporation Operating system-based application recovery
US8146082B2 (en) * 2009-03-25 2012-03-27 Vmware, Inc. Migrating virtual machines configured with pass-through devices
EP2411923A4 (en) * 2009-03-25 2013-10-30 Hewlett Packard Development Co DETECTING AN APPLICATION STATUS
US8051427B2 (en) 2009-04-06 2011-11-01 Jason Kleban Method of establishing a logical state of an instance using non-deterministic operation results stored in a result log
EP2425341B1 (en) 2009-05-01 2018-07-11 Citrix Systems, Inc. Systems and methods for establishing a cloud bridge between virtual storage resources
US20110023036A1 (en) * 2009-07-24 2011-01-27 International Business Machines Corporation Switching process types in a process engine
US8930652B2 (en) * 2009-11-11 2015-01-06 Red Hat Israel, Ltd. Method for obtaining a snapshot image of a disk shared by multiple virtual machines
US9317314B2 (en) * 2010-06-29 2016-04-19 Microsoft Techology Licensing, Llc Techniques for migrating a virtual machine using shared storage
US8959511B2 (en) * 2010-12-14 2015-02-17 Microsoft Corporation Template virtual machines
US9223611B2 (en) 2010-12-28 2015-12-29 Microsoft Technology Licensing, Llc Storing and resuming application runtime state

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002304383A (ja) * 2001-04-05 2002-10-18 Nec Corp プログラム実行サービス提供システム、サーバ及びそのプログラム実行サービス提供方法並びにそのプログラム
JP2004246702A (ja) * 2003-02-14 2004-09-02 Toshiba Corp 計算機システム、計算機装置、計算機システムにおけるデータアクセス方法及びプログラム
US20100005474A1 (en) * 2008-02-29 2010-01-07 Eric Sprangle Distribution of tasks among asymmetric processing elements
JP2010015474A (ja) * 2008-07-07 2010-01-21 Nec Personal Products Co Ltd 情報処理装置および情報処理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6015051521; 難波 弘樹 外2名: '"TenderにおけるIPCの継続を可能にするプロセス実行途中状態の保存復元機能の設計"' 情報処理学会研究報告 第2008巻,第9号, 20080130, pp.87-94, 社団法人情報処理学会 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017529633A (ja) * 2014-09-30 2017-10-05 ソニー インタラクティブ エンタテインメント アメリカ リミテッド ライアビリテイ カンパニー 1つまたは複数のクラウドシステムにアプリケーションを移動可能にデプロイする方法及びシステム

Also Published As

Publication number Publication date
TWI533213B (zh) 2016-05-11
US9223611B2 (en) 2015-12-29
JP6009459B2 (ja) 2016-10-19
TW201227517A (en) 2012-07-01
WO2012092289A2 (en) 2012-07-05
US9934064B2 (en) 2018-04-03
US20160103701A1 (en) 2016-04-14
CN103092777B (zh) 2016-08-03
US20120167117A1 (en) 2012-06-28
WO2012092289A3 (en) 2012-09-20
EP2659354A2 (en) 2013-11-06
CN103092777A (zh) 2013-05-08
US9600323B2 (en) 2017-03-21
EP2659354A4 (en) 2017-12-27
US20170177409A1 (en) 2017-06-22
EP2659354B1 (en) 2019-06-05

Similar Documents

Publication Publication Date Title
JP6009459B2 (ja) アプリケーションランタイム状態の格納、及び、再開
CN110088733B (zh) 虚拟机迁移的基于存储层的编排
JP6799652B2 (ja) 情報を処理するための方法及び装置
US10599457B2 (en) Importing and exporting virtual disk images
US8055893B2 (en) Techniques for booting a stateless client
JP5689475B2 (ja) ホスト・コンピューティング・システム上に1つまたは複数の仮想計算機を配備するための方法、コンピューティング・システムのメモリに1組のデータをロードするための方法、システム、およびコンピュータ・プログラム(コンピューティング・システムのメモリへのデータの効率的なロード)
US9507623B2 (en) Handling disk state inheritance for forked virtual machines
US9529617B2 (en) Instant virtual machines
JP7016964B2 (ja) マルチテナントコンテナプラットフォーム上でアプリケーションを実行するためのシステム及び方法
US8578214B2 (en) Error handling in a virtualized operating system
US20140007088A1 (en) Method and apparatus to replicate stateful virtual machines between clouds
US11231953B2 (en) Minimizing downtime when importing virtual machines from other platforms
US20230034521A1 (en) Computing cluster bring-up on any one of a plurality of different public cloud infrastructures
US10185573B2 (en) Caching based operating system installation
US11106380B2 (en) Migration of storage for workloads between desktop and cloud environments
US9032199B1 (en) Systems, devices, and methods for capturing information, creating loadable images, and providing for restarts in a computer system
US10102024B2 (en) System and methods to create virtual machines with affinity rules and services asymmetry
US20230252229A1 (en) Fast fill for computerized data input
US20230222041A1 (en) Techniques for package injection for virtual machine configuration
US9372638B1 (en) Systems and methods for backing up virtual machine data
US20230342373A1 (en) Computing resource migration across cloud environments
US20220244979A1 (en) System and method of vm recovery on s3 compatible object storage
US20230289216A1 (en) Dynamic management of version dependencies for executing parallel workloads
US20230359591A1 (en) Offloading data processing into computational storage using journaling
EP3591531B1 (en) Instant restore and instant access of hyper-v vms and applications running inside vms using data domain boostfs

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130905

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130909

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141205

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150523

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151222

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160318

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160816

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160914

R150 Certificate of patent or registration of utility model

Ref document number: 6009459

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250