Patent Description:
Today digital games may include a large amount of data so that a significant amount of content may be loaded for the game when a user launches a game to play. Thus, from launching the game to getting ready to play may take several minutes. The delay in loading games may either deter users from playing the game or users may choose to partake in a secondary activity while the game boots up.

In addition, users have limited options for pausing and/or saving game play. Gaming consoles today can hibernate or suspend a game in active play. However, the gaming consoles must maintain power during the hibernated state so that the game can be persistently stored in memory and rehydrate itself allowing a user to continue to play the same game. Thus, if the console loses power and/or another user played the game or a different game in the interim, the suspended game may not restart.

These and other problems exist in providing gaming content to end users. From the <CIT>, systems and methods are provided for securing a virtual machine by causing a plurality of shares of virtual machine files to be separately stored in response to a stop command. <CIT> discloses a method for saving the state of a session of a game played by at least two players, the game including game elements having chips that are capable of contactless communication with a terminal via an interface. A system and method of pausing a game in a cloud gaming system is known from <CIT>, including playing a game on a first game console included in the cloud gaming system, pausing the game at a selected point in the game and capturing game state data for the paused game. The teaching of <CIT> discloses a game apparatus that obtains where a state saving request is received, information specifying a condition in a game corresponding to that request and state information for initiating a game in a same state as a game screen corresponding to that request and records state saving data associated with the condition information and the state information.

The disclosure provides a method according to claim <NUM>.

The disclosure also provides a computer device according to claim <NUM>.

The description further provides a computer-readable medium storing instructions executable by a computer device. The computer-readable medium may include at least one instruction for causing the computer device to send a message to an application executing on an application virtual machine to prepare for a save operation. The computer-readable medium may include at least one instruction for causing the computer device to process an internal state of an application memory to determine at least one or more of data pages or graphics pages in use for the application. The computer-readable medium may include at least one instruction for causing the computer device to instruct the processing of the application memory to determine at least one or more of code pages or signature pages in use for the application and converting the at least one or more of the code pages or the signature pages into a known memory alias. The computer-readable medium may include at least one instruction for causing the computer device to save an application memory state for the application, wherein the application memory state includes the at least one or more of the data pages or the graphics pages and the known memory alias with the at least one or more of the code pages or the signature pages.

It is also provided by the description a method that may include initiating an application virtual machine restore operation by reading previously stored application memory content for an application. The method may include restoring a hypervisor state by instructing recreation of sensitive application content. The method may include restoring a host state of each input device or output device from a plurality of virtual machines associated with the application. The method may include restoring a system state of each of the input devices or output devices from the plurality of virtual machines associated with the application. The method may include resuming the application virtual machine. The method may include sending a message to the application to resume.

The description also provides a computer device that may include at least one memory to store data and instructions, at least one processor in communication with the at least one memory, and an application virtual machine with an application in communication with the computer device, wherein the at least one processor is operable to: initiate an application virtual machine restore operation by reading previously stored application memory content for an application; restore a hypervisor state by instructing recreation of sensitive application content; restore a host state of each input device or output device from a plurality of virtual machines associated with the application; restore a system state of each of the input devices or output devices from the plurality of virtual machines associated with the application; resume the application virtual machine; and send a message to the application to resume.

It is further provided by the description computer-readable medium storing instructions executable by a computer device that may include at least one instruction for causing the computer device to initiate an application virtual machine restore operation by reading previously stored application memory content for an application. The computer-readable medium may include at least one instruction for causing the computer device to restore a hypervisor state by instructing recreation of sensitive application content. The computer-readable medium may include at least one instruction for causing the computer device to restore a host state of each input device or output device from a plurality of virtual machines associated with the application. The computer-readable medium may include at least one instruction for causing the computer device to restore a system state of each of the input devices or output devices from the plurality of virtual machines associated with the application. The computer-readable medium may include at least one instruction for causing the computer device to resume the application virtual machine. The computer-readable medium may include at least one instruction for causing the computer device to send a message to the application to resume.

Features and advantages of the disclosure may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. Features of the present disclosure will become more fully apparent from the following description and appended claims, or may be learned by the practice of the disclosure as set forth hereinafter.

The present disclosure relates to devices and methods for saving and restoring physical hardware states and virtual machine (VM) states for an application being used. One example application may include a digital game actively being played by a user on a computer device, such as a game console. The present disclosure may save the state of any number of applications (up to n applications, where n is an integer) being used on the computer device. The saved application state may be associated with a user so that a user may not launch a saved state for another user. The present disclosure may allow an application to resume regardless of the number of other applications used in the interim. One example use case may include several games being played in the interim before returning to a saved game.

In addition, to saving the state of the applications, the present disclosure may save a whole virtual machine state for an application being used. In an implementation, a plurality of virtual machines may be used for the application. For example, a host virtual machine, application virtual machine, and a system virtual machine may be used for the application. By using a plurality of virtual machines for the application, additional security and functionality may be provided for the application content. The present disclosure may save a host state, a hardware state, and/or a system state for each of the virtual machines in use for the application. In addition, the present disclosure may save a hypervisor state for the virtual machines being used for the application. By saving the whole virtual machine state, the present disclosure may be able to reconstruct and/or reestablish the state of the hypervisor state, host services, hardware state, and/or system services for each of the virtual machines in use for the application when resuming an application.

The present disclosure may save and restore the physical hardware states and VM states regardless of a power state of the computer device. As such, saving and restoring the physical hardware states and VM states may be non-volatile and may survive system updates and/or console reboots.

The present disclosure may also reduce the load times of applications allowing for quick returns to an application while maintaining the overall current state for the application. For example, when the application is a game, users may quickly launch and resume playing a game when the user returns to the game at a later time, date, or gaming session. Users may also be able to return to the exact in game state from when they left the game session. As such, users may either return directly to the point they left when they saved or exited the game or start from a menu or submenu system of the game eliminating a cold start load process for the game (e.g., logo parade, opening un-skippable movies, initial loads, etc.). In addition, the present disclosure may allow users to quickly switch between games on the computer device by saving the current game and launching or restoring the next game.

In an implementation, the computer device includes a secure virtual machine with a memory region that uses a special encryption key for different memory regions, namely memory aliases. Different application content is saved in different memory aliases. Application content, such as, but not limited to, game data pages, executable code pages, graphics pages, and/or signature pages is stored in different memory aliases on an application virtual machine. By encrypting different application content using different memory aliases, the application content is isolated providing additional security for the application content. Moreover, by using multiple virtual machines, additional security and functionality is provided for the application content.

The present disclosure may keep track of every memory page and may determine the proper encryption keys for every memory page used by the application so that the memory pages may be read properly by a host operating system on the host virtual machine and saved to a persistent state file on the computer device. Typical save and restore methods for virtual machines may not be used with the present disclosure because of the secure memory aliasing used in the virtual machines.

The present disclosure may allow users to control whether an application resumes using a previously saved state. For example, when the application is a game, a user may want to replay a game level or start a game over. As such, the user may want to force the game to fresh launch even if the game has a previously saved state option. In addition, a user may want to quit a game without saving the current state of the game.

The present disclosure may be used by application developers to aid in identifying and reproducing behaviors within an application. For example, when a developer is reproducing a bug, the developer may want to save the state of the application prior to when the bug is observed. In addition, a developer may want to use a copy of the saved application state to share a representation of the bug with another developer.

In an implementation, a user may designate applications with a priority level. For example, a user may identify one or more applications as a high priority relative to a priority value of other applications. When a user designates an application as a high priority, the present disclosure may preserve the save states for the high priority applications and may not allow the saved states to be overwritten when saving other applications on the computer device. If the system storage on computer device is full or may be running low on space, lower priority applications may not be saved in order to ensure that the higher priority applications are saved.

As such, the present disclosure includes a number of practical applications that provide benefits and/or solve problems associated with providing gaming content to users by allowing a user to suspend a current state of an application session and save the VM and memory state to persistent storage, and later resume the execution of the saved application session by reading the state back into memory and restoring the VM state.

Referring now to <FIG>, illustrated is an example computer device <NUM> for use with saving and restoring applications <NUM> executing on an application virtual machine <NUM> operating on computer device <NUM> and/or in communication with computer device <NUM>.

Computer device <NUM> may include a plurality of virtual machines, such as, but not limited to, a host virtual machine <NUM>, the application virtual machine <NUM>, and a system virtual machine <NUM>. The application virtual machine <NUM> may have one or more applications <NUM> that a user may use. One example application <NUM> may include a digital game actively being played by a user on computer device <NUM> or streamed to computer device <NUM> from a remote computer or server. The application virtual machine <NUM> may access applications <NUM> from computer device <NUM>. For example, applications may be stored on computer device <NUM>. In addition, the application virtual machine <NUM> may access applications <NUM> from remote servers or computing devices in communication with computer device <NUM>. For example, the application virtual machine <NUM> may stream applications <NUM> from a remote server or computing device to computer device <NUM>. A user may want to stop, or otherwise pause, application <NUM> and later resume using application <NUM>. The host virtual machine <NUM> may include a host operating system <NUM> and a VM manager <NUM> that manages the memory of the virtual machines (e.g., host virtual machine <NUM>, application virtual machine <NUM>, and system virtual machine <NUM>). The system virtual machine <NUM> may include any social activities <NUM> associated with application <NUM> and/or other functionality not provided by the host system due to security layering.

Computer device <NUM> may be a video game console in communication with a display device. The computer device <NUM> may also refer to various types of computing devices. For example, the computer device <NUM> may include a mobile device such as a mobile telephone, a smart phone, a personal digital assistant (PDA), a tablet, or a laptop. Additionally, or alternatively, the computer device <NUM> may include one or more non-mobile devices such as a desktop computer, server device, or other non-portable device. In one or more implementations, the computer device <NUM> refers to dedicated gaming devices (e.g., handheld gaming devices) in communication with a display device. In one or more implementations, the computer device <NUM> refers to a game console in communication with remote servers or computing devices. In one or more implementations, the computer device <NUM> includes graphical user interfaces thereon (e.g., a screen of a mobile device). In addition, or as an alternative, computer device <NUM> may be communicatively coupled (e.g., wired or wirelessly) to a display device having a graphical user interface thereon for providing a display of gaming content. Computer device <NUM> may include features and functionality described below in connection with <FIG>.

The plurality of virtual machines <NUM>, <NUM>, <NUM> may communicate with a hypervisor <NUM> component operating on computer device <NUM>. VM manager <NUM> may instruct or otherwise communicate with hypervisor <NUM> to send a message to application virtual machine <NUM> instructing application virtual machine <NUM> to create an application memory state <NUM> in a consistent manner and send the application memory state <NUM> back to host virtual machine <NUM>. VM manager <NUM> may also send a message to application virtual machine <NUM> to pause, or otherwise stop, the execution of application <NUM> (<FIG>). Suspending the application virtual machine <NUM> may place the virtual machine <NUM> in a safe state where the processing of the application virtual machine <NUM> has paused or stopped. For example, VM manager <NUM> may suspend the application virtual machine <NUM> in response to receiving a request to save application <NUM>, pause application <NUM>, or exit application <NUM>.

VM manager <NUM> may traverse a memory tracking table or database for the application virtual machine <NUM> that includes a hierarchy of application content. The memory tracking table may include the memory host virtual machine <NUM> controls for application virtual machine <NUM>. For example, host virtual machine <NUM> may control a subset of application content. The subset of application content controlled by the host virtual machine <NUM> may include, for example, the data pages and/or the graphic pages for application <NUM>. For example, a host virtual machine <NUM> in communication with the application virtual machine <NUM> may include a VM manager <NUM> with the memory tracking table for the application virtual machine <NUM>. The memory tracking table may also identify which application content is currently being used by application <NUM>.

Hypervisor <NUM> may also traverse a memory tracking table for the application virtual machine <NUM> that includes a hierarchy of application content for the application content controlled by hypervisor <NUM>. Hypervisor <NUM> may control a subset of the application content. For example, hypervisor <NUM> may control the code pages and/or the signature pages for application <NUM>. Code pages include pages that contain executable instructions for application virtual machine <NUM>, which will be executed on the processor. In addition, signature pages are used to verify the validity of the code pages. Hypervisor <NUM> may extract the information from the application memory <NUM> to properly transform the encrypted application content from the subset of the memory aliases associated with the code pages and/or signature pages in use for application <NUM> into sensitive application state <NUM> that may be read by the host operating system <NUM>. For example, the subset of memory aliases include memory aliases storing code pages and/or signature pages.

Hypervisor <NUM> may convert the identified memory aliases (e.g., the subset of memory aliases for the code pages and signature pates) into sensitive application state <NUM> so that the host operating system <NUM> on may read the application content and/or the application memory state <NUM> in the original form. The transformation process may include decrypting the application content using the proper encryption keys for each of the identified memory aliases. Hypervisor <NUM> may also generate a hash over the entire hypervisor state <NUM> and/or possible intermediate stages so that hypervisor <NUM> may verify the integrity of the restored virtual machine and/or the hypervisor state <NUM> of the restored virtual machine.

VM manager <NUM> may save the application memory state <NUM> in system storage <NUM> on computer device <NUM>. An encryption process may occur prior to storing the application memory state <NUM>. For example, VM manager <NUM> and/or hypervisor <NUM> may encrypt the application memory state <NUM> prior to storing the application memory <NUM> in system storage <NUM>. In addition, VM manager <NUM> may save the application memory state <NUM>, one or more host states <NUM>, one or more system states <NUM> in use by application <NUM>, one or more hardware states <NUM> in use by application <NUM> in system storage <NUM>, and/or a hypervisor state <NUM> in system storage <NUM>.

Host virtual machine <NUM> may also include a host operating system <NUM> that may be used to manage the physical hardware states and VM states for computer device <NUM>. For example, host operating system <NUM> may include a VM manager <NUM> and/or a VM input/output (I/O) subsystem <NUM>. The VM manager <NUM> may include, for example, a memory manager <NUM> and/or an execution manager <NUM>. The VM manager <NUM> and/or the VM I/O subsystems <NUM> may communicate with hypervisor <NUM> to save and/or restore the physical hardware states and/or VM states for computer device <NUM>.

As such, VM manager <NUM> may save a whole virtual machine state for the plurality of virtual machines (e.g., host virtual machine <NUM>, application virtual machine <NUM>, and/or system virtual machine <NUM>) being used in connection with application <NUM>. By saving the whole virtual machine state, the state of the hypervisor state, host services, hardware state, and/or system services for each of the plurality of virtual machines may be reestablished when resuming application <NUM>.

As such, computer device <NUM> may be used to suspend a current state of an application session and save the VM and memory state to persistent storage, and later resume the execution of the saved application session by reading the state back into memory and restoring the VM state.

Referring now to <FIG>, illustrated is an example application memory <NUM> for use by the host virtual machine <NUM> and hypervisor <NUM>. Application memory <NUM> may consist of various types of content, where each type of content potentially uses a separate memory alias, and therefore, may use a separate encryption. For example, application memory <NUM> is a secure memory region that uses a special encryption key <NUM>, <NUM>, <NUM>, <NUM> for different memory aliases <NUM>, <NUM>, <NUM>, <NUM>. Application memory includes a plurality of memory aliases <NUM>, <NUM>, <NUM>, <NUM> (up to n memory aliases, where n is an integer). Different encrypted application content <NUM>, <NUM>, <NUM>, <NUM> is saved in different memory aliases <NUM>, <NUM>, <NUM>, <NUM>. For example, game data pages may be saved in alias <NUM>, graphics pages may be saved in alias <NUM>, executable code pages may be saved in alias <NUM>, and signature pages may be stored in memory alias <NUM>. By encrypting different application content <NUM>, <NUM>, <NUM>, <NUM> using different memory aliases <NUM>, <NUM>, <NUM>, <NUM>, the application content is isolated providing additional security for the application content and/or additional security enforcement against hardware attacks from outside the processor.

Host virtual machine <NUM> may control a subset of the memory aliases <NUM>, <NUM>, <NUM>, <NUM>. For example, host virtual machine <NUM> may control memory aliases <NUM>, <NUM> (the memory aliases associated with the game data pages and the graphics pages). Hypervisor <NUM> may control a different subset of the memory aliases <NUM>, <NUM>, <NUM>, <NUM>. For example, hypervisor <NUM> may control memory aliases <NUM>, <NUM> (the memory aliases associated with the code pages and the signature pages). As such, hypervisor <NUM> may control memory aliases with sensitive data, such as, code or signature pages, while the host virtual machine <NUM> may control other memory aliases used for raw data or graphics content.

Hypervisor <NUM> may decrypt the encrypted application content <NUM>, <NUM> from the subset of the memory aliases <NUM>, <NUM> that hypervisor <NUM> controls. For example, the subset of memory aliases may include memory aliases <NUM>, <NUM>. Using the proper encryption keys <NUM>, <NUM> for each of the subset of memory aliases <NUM>, <NUM>, hypervisor <NUM> may convert the encrypted application content <NUM>, <NUM> from the subset of memory aliases <NUM>, <NUM> into sensitive application state <NUM> information in a form that the host operating system <NUM> (<FIG>) may understand.

Referring now to <FIG>, illustrated is an example system storage <NUM> for use with computer device <NUM> (<FIG>) for saving and restoring physical hardware states and VM states for a digital application <NUM> actively being used by a user on computer device <NUM>.

System storage <NUM> may include saved physical hardware states and VM states for a plurality of applications <NUM>, <NUM> (up to x applications, where x is an integer). In addition, for each application <NUM>, <NUM>, a plurality of users (up to y users, where y is an integer) may use the applications <NUM>, <NUM>. As such, system storage <NUM> may save physical hardware states and VM states for each user <NUM>, <NUM>, <NUM>, <NUM> using applications <NUM>, <NUM>.

For example, a first application <NUM> may have two users <NUM>, <NUM> that are using application <NUM> on computer device <NUM>. The user may access application <NUM> at different times. User <NUM> may have an application memory state <NUM>, host state <NUM>, hardware state(s) <NUM>, system state(s) <NUM>, and a hypervisor state <NUM> stored in system storage <NUM> for application <NUM>. While user <NUM> may have a different application memory state <NUM>, application host state <NUM>, hardware state(s) <NUM>, system state(s) <NUM>, and hypervisor state <NUM> stored for application <NUM>.

In addition, a second application <NUM> may also be used on computer device <NUM> by two different users <NUM>, <NUM>. Users <NUM>, <NUM> may use application <NUM> at different times. In addition, the users may be the same users using application <NUM> or may be different users. User <NUM> may have an application memory state <NUM>, host state <NUM>, hardware state(s) <NUM>, system state(s) <NUM>, and a hypervisor state <NUM> stored in system storage <NUM> for application <NUM>. While user <NUM> may have a different application memory state <NUM>, host state <NUM>, hardware state(s) <NUM>, system state(s) <NUM>, and a hypervisor state <NUM> stored for application <NUM>.

As such, system storage <NUM> may associated the physical hardware states and VM states for a digital application with an individual user. Thus, preventing users from accessing other users saved states for applications.

Referring now to <FIG>, an example method <NUM> may be used by computer device <NUM> (<FIG>) for saving an application memory state <NUM> (<FIG>) of an application <NUM> (<FIG>) executing on an application virtual machine <NUM> (<FIG>). The actions of method <NUM> may be discussed below with reference to the architectures of <FIG>.

At <NUM>, method <NUM> may include sending a message to the application virtual machine to prepare for a save operation. VM manager <NUM> may send a message or other communication to the application virtual machine <NUM> to prepare input and/or output devices on the application virtual machine <NUM> for a suspended state (e.g., stopping processing on the application virtual machine <NUM>). VM manager <NUM> may also send a message or other communication to applications <NUM> on the application virtual machine <NUM> to prepare for the save operations.

At <NUM>, method <NUM> includes sending a message to instruct the application virtual machine to suspend processing. VM manager <NUM> may send a message to hypervisor to instruct hypervisor <NUM> to suspend the application virtual machine <NUM>. Hypervisor <NUM> may send a message or other communication to the application virtual machine <NUM> to pause, or otherwise stop, the execution of the applications <NUM> on application virtual machine <NUM> by suspending each virtual processor. Suspending the application virtual machine <NUM> may place the virtual machine <NUM> in a safe state where the processing of the application virtual machine <NUM> has paused or stopped. For example, VM manager <NUM> may suspend the application virtual machine <NUM> in response to receiving a request to save application <NUM>, pause application <NUM>, or exit application <NUM>.

At <NUM>, method <NUM> includes processing an internal state of the application memory to determine data and graphics pages for the application. An application memory <NUM> for application <NUM> includes a plurality of memory aliases where each memory alias includes encrypted application content for use with application <NUM>. Each memory alias includes different encrypted application content. Encrypted application content includes executable code pages for application <NUM>, data pages for application <NUM>, graphics pages for application <NUM>, and/or signature pages for application <NUM>. In addition, each memory alias uses different encryption keys for encrypting the application content. As such, different application content for the same application are stored in different memory aliases using different encryption keys.

For example, in a first memory alias, executable code pages for application <NUM> may be encrypted while graphics pages for application <NUM> may be encrypted in a second memory alias and signature pages for application <NUM> may be encrypted in a third memory alias. In addition, data pages for application <NUM> may be encrypted in a fourth memory alias. By isolating the application content through saving the application content in different memory aliases, additional security for the application content is provided. In addition, additional security for enforcement against hardware attacks from outside the processor is provided by using different memory aliases to encrypt different application content.

VM manager <NUM> may process the proper application memory state <NUM> created by the application virtual machine <NUM> by traversing a memory tracking table or database for the application virtual machine <NUM> that includes a hierarchy of application content for each of the applications <NUM>. For example, a host virtual machine <NUM> in communication with the application virtual machine <NUM> may include a VM manager <NUM> with the memory tracking table for the application virtual machine <NUM>. The memory tracking table may include all the memory host virtual machine <NUM> controls for application virtual machine <NUM>. For example, host virtual machine <NUM> may control a subset of the application content (e.g., the data pages and graphic pages for application <NUM>). As such, a subset of the application content for each of the plurality of applications <NUM> may be controlled by the VM manager <NUM>. The memory tracking table may also identify which application content is currently being used by application <NUM>.

The VM manager <NUM> may review the page table and determine which data pages and/or graphics pages are currently in use for application <NUM> and the associated memory aliases in application memory <NUM> for the data pages and/or graphics pages.

At <NUM>, method <NUM> may include saving individual host states for each input or output device. VM manager <NUM> may save individual host states for each input or output device in use by applications <NUM>. For example, host states may include hardware states <NUM> in use by applications <NUM>. The hardware states <NUM> may include, but are not limited to, audio hardware, storage, and/or graphic states.

At <NUM>, method <NUM> may include saving individual system states for each input or output device. VM manager <NUM> may save individual system states <NUM> for each input or output device in use by applications <NUM> in system storage <NUM>. The one or more system states <NUM> may include, but are not limited to, input state, video state, storage state, and/or a networking state.

At <NUM>, method <NUM> may include saving a hypervisor state. VM manager <NUM> may instruct the hypervisor <NUM> to save the hypervisor state <NUM> associated with application <NUM>. For example, the hypervisor state <NUM> may identify the code and/or signature that are currently in use by application <NUM> and may save the code and/or signature pages currently in use by application <NUM>. The hypervisor state <NUM> may also contain page table information, virtual processor information, interrupt controller information, timers, internal states, and/or other supporting states used by hypervisor <NUM> to virtualize a computer system.

At <NUM>, method <NUM> includes sending a message to instruct the hypervisor to process the application memory and convert the code pages and signature pages to a known memory alias. Code pages include pages that contain executable instructions for application virtual machine <NUM>, which will be executed on the processor. In addition, signature pages are used to verify the validity of the code pages. Hypervisor <NUM> may extract the information from the application memory <NUM> and properly transform the encrypted application content from each of the subset of memory aliases in use for application <NUM> that hypervisor <NUM> may control. For example, hypervisor <NUM> may control the code pages and the signature pages for application <NUM>. As such, VM manager <NUM> may not be able to access the code pages and/or the signature pages for application <NUM>.

Hypervisor <NUM> may process a memory tracking table or database that includes the memory hypervisor <NUM> controls for application virtual machine <NUM>. The memory tracking table or database may identify which code pages and/or signature pages are currently in use for application <NUM>. Hypervisor <NUM> may convert the identified memory aliases and the sensitive application state <NUM> from the identified memory aliases into a known memory aliases so that the host operating system <NUM> on host virtual machine <NUM> may read the sensitive application state <NUM> in the original form. The transformation process for the sensitive application state <NUM> may include decrypting the application content using the proper encryption keys for each of the memory aliases. The transformation process may also include hypervisor <NUM> generating a hash over the entire hypervisor state <NUM> and/or possible intermediate stages so that hypervisor <NUM> may verify the integrity of the restored virtual machine and/or the hypervisor state <NUM> of the restored virtual machine.

At <NUM>, method <NUM> includes saving the application memory states. VM manager <NUM> may save the combined application states in system storage <NUM> on computer device <NUM>. VM manager <NUM> may selectively read from the proper memory aliases in use for application <NUM> and save the application memory state <NUM> from the memory aliases to a persistent location on system storage <NUM>. For example, VM manager <NUM> may save the application memory state <NUM> from identified memory aliases for the data pages and/or graphics pages in use for application <NUM>. In addition, VM manager <NUM> may save the converted sensitive application state <NUM> from hypervisor <NUM> for the code pages and/or signature pages in use for application <NUM>. In an implementation, VM manager <NUM> may perform an encryption on the sensitive application state <NUM> prior to storing the application memory state <NUM>. As such, VM manager <NUM> may save the combined application memory state <NUM> to system storage <NUM>.

Method <NUM> is used to save the application memory state <NUM> from a secure memory used by an application <NUM>. In addition, method <NUM> may be used to save the entire virtual machine state of the application by saving individual states of each component that provides services to an application <NUM> in a persistent location on system storage <NUM>.

Referring now to <FIG>, an example method <NUM> may be used by computer device <NUM> (<FIG>) for resuming a saved application <NUM> executing on an application virtual machine <NUM> (<FIG>). The actions of method <NUM> may be discussed below with reference to the architectures of <FIG>.

At <NUM>, method <NUM> may include initiating an application virtual machine restore operation by reading previously stored application memory content. VM manager <NUM> may initiate an application virtual machine <NUM> restore operation to resume execution of one or more applications <NUM> on application virtual machine <NUM>. VM manager <NUM> may initiate the application virtual machine <NUM> restore operation in response to receiving a request to resume application <NUM>. For example, a user may launch application <NUM> on application virtual machine <NUM>.

VM manager <NUM> may determine whether application <NUM> may be resumed from a previously saved application memory state <NUM>. For example, a user may select to load application <NUM> without using a saved application memory state <NUM> and/or application <NUM> may not have a saved application memory state <NUM>. As such, VM manager <NUM> may instruct application virtual machine <NUM> to load application <NUM> without using a previously stored application memory state <NUM>.

When VM manager <NUM> determines to resume application <NUM> from a previously saved application memory state <NUM>, VM manager <NUM> may read the previously stored application memory state <NUM> from system storage <NUM>. For example, VM manager <NUM> may read the data and/or graphics pages from the application memory state <NUM> and may map the encrypted application content back to the original memory aliases for the data and/or graphics pages.

At <NUM>, method <NUM> may include restoring a hypervisor state by instructing the hypervisor to recreate the previous sensitive application content. VM manager <NUM> may instruct the hypervisor <NUM> to restore the hypervisor state <NUM> by recreating the previous sensitive application state <NUM> for application <NUM>. For example, hypervisor <NUM> may access the code and/or signature pages from the saved application memory state <NUM> that were in use by application <NUM> when the application memory state <NUM> was saved. In addition, hypervisor <NUM> may access any page table information, virtual processor information, interrupt controller information, timers, internal states, and/or other supporting states that were in use when the application memory state <NUM> was saved. Hypervisor <NUM> may convert the sensitive application state <NUM> (e.g., the code and/or signature pages) back into the original encrypted application content and may map the encrypted application content back to the original memory aliases for the code and/or signature pages. Hypervisor <NUM> may verify the integrity of the restored hypervisor state <NUM> by checking against previously calculated hashes for various states.

At <NUM>, method <NUM> may include restoring a host state of each input device or output device. Execution manager <NUM> in the host operating system <NUM> may restore one or more saved hardware states <NUM> so that the hardware components used by application <NUM> may resume as before application <NUM> was saved. Saved hardware states <NUM> may include, but are not limited to, audio hardware, storage, and/or graphic states. Execution manager <NUM> may restore the saved hardware states <NUM> from one or more virtual machines in use by application <NUM>. In addition, if any hardware settings changed between creating the saved hardware states <NUM> and when application <NUM> is launched, the new hardware settings may be used by application <NUM>.

When application <NUM> is launched using a previously saved state, the audio settings for the application may be restored so that the audio works as expected by the user. If the audio settings have changed between creating the saved hardware states <NUM> and when application <NUM> is launched, the new audio settings may be used by application <NUM>. For example, if a game was previously played with a headset and the headset is no longer present, the current audio-out settings may be used by the game.

The graphics for application <NUM> may also be restored so that the graphics are working for application <NUM>. For example, the graphics may be restored from a scene where a game stopped so that a user may resume playing the game in the scene where the game was saved. Other media and cut scene states may also be restored for the game.

At <NUM>, method <NUM> may include restoring system states of each input device or output device. Execution manager <NUM> in the host operating system <NUM> may restore one or more saved system states <NUM> so that the system settings used by application <NUM> may resume as before application <NUM> was saved. Saved system states <NUM> may include, but are not limited to, input state, video state, storage state, and/or a networking state. Execution manager <NUM> may restore the saved system states <NUM> from one or more virtual machines in use by application <NUM>. In addition, if any system settings changed between creating the saved system states <NUM> and when application <NUM> is launched, the new system settings may be used by application <NUM>.

The networking settings may also be re-established so that application <NUM> may launch with working networking. If the network connections have changed since the application was previously used (e.g., different Wi-Fi network or switched from wired to Wi-Fi), application <NUM> may resume and reestablish network connectivity with the new network connections using a previously saved state.

In addition, the input may be restored for application <NUM> so that the input may work as expected by the user. If the input changes between creating the saved hardware states <NUM> and when application <NUM> is launched, new input settings may be used by application <NUM> when application <NUM> resumes. For example, if a controller has changed since the hardware state <NUM> was saved, the new controller may be used by application <NUM>. Another example may include when additional input devices are present that were not present when the hardware state <NUM> was saved or previously connected input devices are no longer present, different input devices may be used by application <NUM>. Another example may include if a connection of an input device changes after the hardware state <NUM> was saved (e.g., a connection was previously made wirelessly but is now connected to computer device <NUM> using a USB cable), a different connection for input device may be used by application <NUM>.

The video configurations for application <NUM> may also be restored. For example, previously saved resolutions, reference rate, Standard Dynamic Range (SDR) or High Dynamic Range (HDR) settings may be restored so that application <NUM> may launch with working video.

At <NUM>, method <NUM> may include resuming the application virtual machine. VM manager <NUM> may send a message to hypervisor <NUM> instructing hypervisor <NUM> to resume the processing on the application virtual machine <NUM>.

At <NUM>, method <NUM> may include sending a message to the application to resume. VM manager <NUM> may send a message to the application or application <NUM> to resume processing. For example, the application or application may resume from the previously saved application memory sate <NUM>.

Method <NUM> may be used to restore the complete state of applications or applications by restoring the previously saved application memory state <NUM> and the individual states of each component that provides services to the applications or. As such, method <NUM> may be used to restore the state of all the virtual machines in use with the applications. Method <NUM> may be used to resume an application by either returning directly to the point where a user left when the user saved or exited the application or starting the application from a menu or submenu system of the application eliminating a cold start load process for the application.

Referring now to <FIG>, illustrated is an example graphical user interface <NUM> for use with computer device <NUM> (<FIG>) in accordance with an implementation. For example, graphical user interface <NUM> may provide a listing <NUM> of one or more applications <NUM> on computer device <NUM>. The listing <NUM> may indicate whether one or more applications <NUM> allow a user to resume application <NUM> by returning to a previously saved application memory state <NUM> (<FIG>). Resuming an application using a previously saved memory state may allow users to either return directly to the point where they left when the application was saved or exited or start the application from a menu or submenu system, eliminating a cold start load process for application <NUM> (e.g., logo parade, opening un-skippable movies, initial loads, etc.). As such, when users browse applications on computer device <NUM>, users may be able to identify whether the applications may be launched using a previously saved state.

A communication <NUM> displayable via the graphical user interface may be read "launch the application using a saved state?" and a selectable option <NUM> may be presented on the graphical user interface to allow a user to select a previously saved state of application <NUM>. The computer device <NUM> may perform a number of actions in response to a detected selection of the selectable option <NUM> to resume application <NUM> using a previously saved state. Computer device <NUM> may restore the previously saved application memory state <NUM>, system states <NUM>, and/or hardware states <NUM> and resume execution of application <NUM> so that application <NUM> may run just as application had before the application <NUM> was saved.

The computer system <NUM> includes a processor <NUM>. The processor <NUM> may be a general-purpose single or multi-chip microprocessor (e.g., an Advanced RISC (Reduced Instruction Set Computer) Machine (ARM)), a special purpose microprocessor (e.g., a digital signal processor (DSP)), a microcontroller, a programmable gate array, etc. The processor <NUM> may be referred to as a central processing unit (CPU). Although just a single processor <NUM> is shown in the computer system <NUM> of <FIG>, in an alternative configuration, a combination of processors (e.g., an ARM and DSP) could be used.

The computer system <NUM> also includes memory <NUM> in electronic communication with the processor <NUM>. The memory <NUM> may be any electronic component capable of storing electronic information. For example, the memory <NUM> may be embodied as random access memory (RAM), read-only memory (ROM), magnetic disk storage mediums, optical storage mediums, flash memory devices in RAM, on-board memory included with the processor, erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM) memory, registers, and so forth, including combinations thereof.

A computer system <NUM> may also include one or more input devices <NUM> and one or more output devices <NUM>. Some examples of input devices <NUM> include a keyboard, mouse, microphone, remote control device, button, joystick, trackball, touchpad, and lightpen. Some examples of output devices <NUM> include a speaker and a printer. One specific type of output device that is typically included in a computer system <NUM> is a display device <NUM>. Display devices <NUM> used with embodiments disclosed herein may utilize any suitable image projection technology, such as liquid crystal display (LCD), light-emitting diode (LED), gas plasma, electroluminescence, or the like. A display controller <NUM> may also be provided, for converting data <NUM> stored in the memory <NUM> into text, graphics, and/or moving images (as appropriate) shown on the display device <NUM>.

The techniques described herein may be implemented in hardware, software, firmware, or any combination thereof, unless specifically described as being implemented in a specific manner. Any features described as modules, components, or the like may also be implemented together in an integrated logic device or separately as discrete but interoperable logic devices. If implemented in software, the techniques may be realized at least in part by a non-transitory processor-readable storage medium comprising instructions that, when executed by at least one processor, perform one or more of the methods described herein. The instructions may be organized into routines, programs, objects, components, data structures, etc., which may perform particular tasks and/or implement particular data types, and which may be combined or distributed as desired in various embodiments.

The steps and/or actions of the methods described herein may be interchanged with one another without departing from the scope of the claims. In other words, unless a specific order of steps or actions is required for proper operation of the method that is being described, the order and/or use of specific steps and/or actions may be modified without departing from the scope of the claims.

Claim 1:
A method, comprising:
sending a message to an application (<NUM>) executing on an application virtual machine (<NUM>) to prepare for a save operation;
processing an internal state of an application memory (<NUM>) to determine at least one or more of data pages or graphics pages in use for the application (<NUM>);
instructing the processing of the application memory (<NUM>) to determine at least one or more of code pages or signature pages in use for the application (<NUM>) and converting the at least one or more of the code pages or the signature pages into a known memory alias (<NUM>, <NUM>, <NUM>, <NUM>), wherein the code pages include pages that contain executable instructions, wherein the signatures pages are used to verify the validity of the code pages, wherein the memory alias is a memory region that uses an encryption key, wherein the application memory (<NUM>) includes a plurality of memory aliases (<NUM>, <NUM>, <NUM>, <NUM>), and wherein each of the plurality of memory aliases (<NUM>, <NUM>, <NUM>, <NUM>) uses a different encryption key for encrypting application content; and
saving an application memory state (<NUM>) for the application (<NUM>), wherein the application memory state (<NUM>) includes the at least one or more of the data pages or the graphics pages and the known memory alias (<NUM>, <NUM>, <NUM>, <NUM>) with the at least one or more of the code pages or the signature pages.