230 likes | 419 Views
Programación de Sistemas. Controlador de Dispositivo Virtual (VxD). Antecedentes. Windows 95 es un sistema operativo multitarea que corre en el anillo cero. Todas las demás aplicaciones lo hacen en el anillo tres.
E N D
Programación de Sistemas Controlador de Dispositivo Virtual (VxD)
Antecedentes • Windows 95 es un sistema operativo multitarea que corre en el anillo cero. • Todas las demás aplicaciones lo hacen en el anillo tres. • GDI32, Kernel32 y USER32 son tres componentes importantes del sistema que corren en el anillo 3. • El sistema operativo está bajo el control de la VMM (Virtual Machine Manager) y los VxD (Virtual Device Drivers).
Problemática • Los programas DOS y de Windows son dramáticamente diferentes.
¿Qué es una VMM? • Es una máquina creada por medio de software. • Reacciona como una máquina real. • Los programas desconocen que corren en una máquina virtual. • Como una VMM responde exactamente igual como una máquina real, puede ser tratada de la misma manera. • La interface entre la máquina y su software es un tipo de API (interrupciones, llamadas al BIOS, y puertos de E/S).
¿Qué es una VMM en Windows? • Es un programa dedicado a coordinar y supervisar las VM’s. • Es un programa de 32 bits en modo protegido. • Es responsable de crear, correr y terminar la ejecución de las VM’s. • Es una de las muchas VxD’s que están guardadas en el archivo VMM32.VXD en la carpeta del sistema.
Secuencia de Arranque de Windows 95 • io.sysescargado en la memoria. • config.sys y autoexec.bat son procesados. • win.comesllamado. • win.comcorre VMM32.VXD queesactualmente un archivo DOS EXE. • VMM32.VXD carga la VMM en la memoriaextendidahaciendouso del controlador de XMS. • VMM se inicializa a simismajunto con otroscontroladores de dispositivosporomisión. • VMM cambia la máquina al modoprotegido y crea la máquina virtual del sistema. • Virtual Shell Device, el cualescargado al final, inicia Windows en la máquina virtual del sistemacorriendo el archivokrnl386.exe • krnl386.execarga el resto de los archivos, culminando con el shell de Windows 95.
Consideraciones • La VMM es el primer VxD cargado en la memoria. • Crea la máquina virtual del sistema e inicializa otros VxD’s. • También provee varios servicios a esos VxD’s. • La VMM y los VxD’s trabajan en un modo latente la mayoría del tiempo. • Mientras los programas de aplicación corren, los VxD’s están inactivos. Son activados cuando interrupciones u otros eventos demandan su atención.
Controlador de Dispositivo Virtual (VxD) • Donde x asume el nombre del dispositivo tal como el controlador de teclado virtual, del ratón, etc. • Es la clave para la virtualización satisfactoria del hardware. • Representa un soporte de entrada para los programas de DOS hacia los dispositivos reales.
Controlador de Dispositivo Virtual (VxD) • Es específico de Windows 9x. No pueden corren en Windows NT. • Es la entidad más poderosa del sistema porque pueden hacer todo en él. • Hay dos tipos de VxD bajo Windows 95: • VxD Estática • VxD Dinámica
Hardware Virtual • Virtualización del Software.- Mecanismos que permiten a los componentes en modo protegido de Windows interactuar con los componentes en modo real de MS-DOS y el BIOS. • Requiere que el sistema operativo intercepte llamadas entre los modos protegido y real. • Cambia el modo de operación del procesador después de ajustar adecuadamente los registros de parámetro.
Hardware Virtual Tabla Descriptora de Interrupciones Tabla del Vector de Interrupciones INT xx Aplicación en Modo Protegido Rutina de Servicio de Interrupción en Modo Real VxD Bloque de Parámetros en Memoria Extendida Bloque de Parámetros en Memoria V86 Modo Protegido Modo V86 Virtualización de Software de MS-DOS y el BIOS [Oney 96]
El API de Servicio para VxD • Los VxDs se comunican con la VMM usando el API de Servicio para VxD. • Esta API provee una comunicación dinámica entre los VxDs usando la int 20h y el conjunto de ordenes de servicio del VxD. • Las órdenes de servicio identifican de manera única un VxD en particular y una función de servicio en el VxD.
El API de Servicio para VxD Identificador VxD Índice de servicios Función de Servicio Tabla de Servicio para un VxD Lista de VxDs Un identificador de Servicio para VxD [Oney 96]
Esqueleto de un VxD en Lenguaje Ensamblador REQUISITOS • Se necesita el Kit de Desarrollo de Controladores de Dispositivos para Windows 95/98 (Windows 95/98 DDK) • Windows 98 DDK contiene el MASM versión 6.11d • El Windows 9x DDK contiene varios archivos tipo include esenciales no incluidos en el paquete MASM32.
Construyendo un VxD en Lenguaje Ensamblador [Oney 96] MIVXD.ASM VMM.INC MASM 6.11 MIVXD.OBJ (Archivo COFF 32-bit) MIVXD.DEF LINK Archivo de mapeo MAPSYM MIVXD.SYM (Archivo de Símbolos para el depurador) MIVXD.VXD (Archivo Ejecutable Formato LE)
Esqueleto de un VxD en Lenguaje Ensamblador .386pinclude vmm.inc DECLARE_VIRTUAL_DEVICE PRIMERVXD,1,0, PRIMERVXD_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER Begin_control_dispatch PRIMERVXDEnd_control_dispatch PRIMERVXD end .386p Indica al ensamblador el uso del set de instrucciones 80386. También puede ser .486p ó .586p include vmm.inc Es indispensable incluir el vmm.inc. Contiene la definición de las macros que debe tener el código fuente. DECLARE_VIRTUAL_DEVICE PRIMERVXD,1,0, PRIMERVXD_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER Declaración de macro de uno de los 22 miembros de la DDB (Device Descriptor Block) Estructura que contiene información vital del VxD. Begin_control_dispatch PRIMERVXD End_control_dispatch PRIMERVXD Macro que define el procedimiento de control del dispositivo que es la función que la VMM llama cuando hay mensajes de control de nuestro VxD.
Ejemplo de un VxD en Lenguaje Ensamblador l .386p include vmm.inc include shell.inc DECLARE_VIRTUAL_DEVICE MENSAJE,1,0, MENSAJE_Control, UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER Begin_control_dispatch MENSAJE Control_DispatchCreate_VM, OnVMCreateControl_Dispatch VM_Terminate2, OnVMCloseEnd_control_dispatch MENSAJE VxD_PAGEABLE_DATA_SEGMsgTitledb “Cuadro de dialogo de un VxD",0 VMCreateddb “Una VM es creada",0 VMDestroyeddb “Una VM es destruida",0 VxD_PAGEABLE_DATA_ENDS VxD_PAGEABLE_CODE_SEGBeginProcOnVMCreatemovecx, OFFSET32 VMCreatedCommonCode: VMMCallGet_sys_vm_handlemoveax,MB_OK+MB_ICONEXCLAMATIONmovedi, OFFSET32 MsgTitlexoresi,esixoredx,edxVxDCallSHELL_MessageretEndProcOnVMCreate BeginProcOnVMClosemov ecx,OFFSET32 VMDestroyedjmpCommonCodeEndProcOnVMClose VxD_PAGEABLE_CODE_ENDS End