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

UptoLike

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

41
буфер, а затем отвести большой буфер, используя сервисную функцию
_PageAllocate. Как правило, используют функцию _HeapAllocate для
отведения небольших областей и _PageAllocate для отведения больших
областей. Границей между большой и маленькой областью является
значение 4Кб.
В то время, как служебная информация о каждом устройстве хорошо
знакома разработчикам драйверов устройств, служебная информация о
каждой виртуальной машине, или о каждой паре устройство/виртуальная
машина менее знакома разработчикам. К счастью VxD может попросить,
чтобы менеджер виртуальных машин (VMM) хранил данные виртуальной
машины от имени VxD. Менеджер виртуальных машин (VMM) сам
отводит и использует управляющий блок для каждой виртуальной
машины. VxD может использовать сервис VMM резервирования его
собственной области данных о виртуальной
машине в пределах
управляющего блока виртуальной машины VM.
Для резервирования этого места в управляющем блоке, VxD
запрашивает сервисную функцию VMM _AlIocate_Device_CB_Area во
время инициализации, запрашивая блок соответствующего размера.
Менеджер виртуальных машин (VMM) возвращает смещение отведенного
блока в пределах всего управляющего блока. Как только VxD запросил эту
область, менеджер виртуальных машин (VMM) будет резервировать ее по
одному и
тому же смещению в управляющем блоке каждой виртуальной
машины (VM). Поскольку VxD всегда будет иметь доступ к обработчику
текущей виртуальной машины, а обработчик виртуальной машины (VM)
фактически является стартовым адресом управляющего блока VM, VxD
будет иметь доступ к данным этого управляющего блока. На рис. 3.1
показано, как данные управляющего блока (CBD) могут использоваться
для сохранения информации о
состоянии виртуальной машины.
                                  41



буфер, а затем отвести большой буфер, используя сервисную функцию
_PageAllocate. Как правило, используют функцию      _HeapAllocate для
отведения небольших областей и _PageAllocate для отведения больших
областей. Границей между большой и маленькой областью является
значение 4Кб.
     В то время, как служебная информация о каждом устройстве хорошо
знакома разработчикам драйверов устройств, служебная информация о
каждой виртуальной машине, или о каждой паре устройство/виртуальная
машина менее знакома разработчикам. К счастью VxD может попросить,
чтобы менеджер виртуальных машин (VMM) хранил данные виртуальной
машины от имени VxD. Менеджер виртуальных машин (VMM) сам
отводит и использует управляющий блок для каждой виртуальной
машины. VxD может использовать сервис VMM резервирования его
собственной области данных о виртуальной машине в пределах
управляющего блока виртуальной машины VM.
     Для резервирования этого места в управляющем блоке, VxD
запрашивает сервисную функцию VMM        _AlIocate_Device_CB_Area во
время инициализации, запрашивая блок соответствующего размера.
Менеджер виртуальных машин (VMM) возвращает смещение отведенного
блока в пределах всего управляющего блока. Как только VxD запросил эту
область, менеджер виртуальных машин (VMM) будет резервировать ее по
одному и тому же смещению в управляющем блоке каждой виртуальной
машины (VM). Поскольку VxD всегда будет иметь доступ к обработчику
текущей виртуальной машины, а обработчик виртуальной машины (VM)
фактически является стартовым адресом управляющего блока VM, VxD
будет иметь доступ к данным этого управляющего блока. На рис. 3.1
показано, как данные управляющего блока (CBD) могут использоваться
для сохранения информации о состоянии виртуальной машины.