Организация ввода-вывода. Часть 1. Виртуальные драйверы и виртуальное окружение WINDOWS. Рощин А.В. - 52 стр.

UptoLike

Составители: 

52
(Эта последовательность не совпадает с последовательностью завершения,
инициированной неудачей VM_Create.) Заключительная стадия создания
VM_Init. В это время VM уже создана, и в ней становятся доступными для
вызова программные прерывания Simulate_Int и Exec_Int.
Уничтожение VM также совершается в три фазы, снова с
обработчиком VM в EBX. Существующая VM изящно завершается
сообщением VM_Terminate, которым VM сообщает, что "собирается
умирать". (Неправильное завершение сначала произведет Query_Destroy, о
чем будет сказано далее.) Здесь VxD должен выполнить действия,
связанные с Simulate_Int или Exec_Int, пока виртуальная машина еще
существует. Следующая фазаVM_Not_Executeableвыполняется и при
нормальном и при ненормальном выходе. Регистр EDX содержит значения
флагов, которые указывают на фактическую причину завершения.
Эти значения флагов приведены в
табл. 3.3. Поскольку VM уже
закрыта, Simulate_Int и Exec_Int недоступны. Последняя фаза обозначена
Destroy_VM. Если VxD заботит истинная причина завершения работы
VM, и ему не надо использовать Simulate_Int или Exec_Int, он может
отвечать только на это заключительное сообщение.
Прежде, чем SHELL VxD ненормально закроет VM (например, в
ответ на запрос пользователя), он пошлет сообщение Query_Destroy. VxD
может ответить
на это сообщение с установленным флагом переноса,
чтобы указать, что SHELL не должен уничтожать VM. В этом случае, VxD
должен также сообщить пользователю о возникновении проблемы,
используя сервисные сообщения SHELL.
В дополнение к событиям запуска и закрытия VM, VxD также
уведомляется относительно планирования событий, которые изменяют
выполняемую в настоящее время VM. Сообщения VM_Suspend и
                                  52



(Эта последовательность не совпадает с последовательностью завершения,
инициированной неудачей VM_Create.) Заключительная стадия создания –
VM_Init. В это время VM уже создана, и в ней становятся доступными для
вызова программные прерывания Simulate_Int и Exec_Int.
     Уничтожение VM также совершается в три фазы, снова с
обработчиком VM в EBX. Существующая VM изящно завершается
сообщением VM_Terminate, которым VM сообщает, что "собирается
умирать". (Неправильное завершение сначала произведет Query_Destroy, о
чем будет сказано далее.) Здесь VxD должен выполнить действия,
связанные с Simulate_Int или Exec_Int, пока виртуальная машина еще
существует. Следующая фаза – VM_Not_Executeable – выполняется и при
нормальном и при ненормальном выходе. Регистр EDX содержит значения
флагов, которые указывают на фактическую причину завершения.
     Эти значения флагов приведены в табл. 3.3. Поскольку VM уже
закрыта, Simulate_Int и Exec_Int недоступны. Последняя фаза обозначена
Destroy_VM. Если VxD заботит истинная причина      завершения работы
VM, и ему не надо использовать Simulate_Int или Exec_Int, он может
отвечать только на это заключительное сообщение.
     Прежде, чем SHELL VxD ненормально закроет VM (например, в
ответ на запрос пользователя), он пошлет сообщение Query_Destroy. VxD
может ответить на это сообщение с установленным флагом переноса,
чтобы указать, что SHELL не должен уничтожать VM. В этом случае, VxD
должен также сообщить пользователю о возникновении проблемы,
используя сервисные сообщения SHELL.
     В дополнение к событиям запуска и закрытия VM, VxD также
уведомляется относительно планирования событий, которые изменяют
выполняемую в настоящее время VM. Сообщения VM_Suspend и