Controlling Virtual Machine Execution

The Close_VM and Nuke_VM services terminate the specified virtual machine. Close_VM gives all virtual devices an opportunity to clean up before the virtual machine terminates by first broadcasting the Close_VM_Notify message to all virtual devices. By comparison, Nuke_VM does not broadcast any notifications before terminating the virtual machine. A virtual device should use Nuke_VM only to terminate a virtual machine that has not terminated normally and does not respond to Close_VM.

The VMM maintains a suspend count for each non-system virtual machine. The execution of a non-system virtual machine is suspended whenever its suspend count is greater than zero. Calling Suspend_VM increments the suspend count; calling Resume_VM decrements it. (As noted previously, this sense of the word "suspend" when applied to virtual machines is different from the sense when applied to threads.)

A virtual device receives the VM_Suspend control message when Suspend_VM changes a virtual machine's suspend count from 0 to 1. It receives the VM_Resume control message when Resume_VM changes the count from 1 to 0. A virtual device can prevent the virtual machine from resuming by setting the carry flag in response to VM_Resume. A virtual device cannot prevent a virtual machine from being suspended. The No_Fail_Resume_VM service is similar to Resume_VM except that it doesn't allow a virtual device to prevent a virtual machine from resuming.

See also Close_VM, No_Fail_Resume_VM, Nuke_VM, Suspend_VM, Resume_VM, VM_Resume, VM_Suspend