Title: Programacin de Sistemas
1Programación de Sistemas
- Controlador de Dispositivo Virtual
- (VxD)
2Antecedentes
- 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).
3Problemática
- Los programas DOS y de Windows son dramáticamente
diferentes.
4Solución
5Qué 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).
6Qué es una VMM en Windows?
- Es un programa dedicado a coordinar y supervisar
las VMs. - Es un programa de 32 bits en modo protegido.
- Es responsable de crear, correr y terminar la
ejecución de las VMs. - Es una de las muchas VxDs que están guardadas en
el archivo VMM32.VXD en la carpeta del sistema.
7Secuencia de Arranque de Windows 95
- io.sys es cargado en la memoria.
- config.sys y autoexec.bat son procesados.
- win.com es llamado.
- win.com corre VMM32.VXD que es actualmente un
archivo DOS EXE. - VMM32.VXD carga la VMM en la memoria extendida
haciendo uso del controlador de XMS. - VMM se inicializa a si misma junto con otros
controladores de dispositivos por omisión. - VMM cambia la máquina al modo protegido y crea la
máquina virtual del sistema. - Virtual Shell Device, el cual es cargado al
final, inicia Windows en la máquina virtual del
sistema corriendo el archivo krnl386.exe - krnl386.exe carga el resto de los archivos,
culminando con el shell de Windows 95.
8Consideraciones
- La VMM es el primer VxD cargado en la memoria.
- Crea la máquina virtual del sistema e inicializa
otros VxDs. - También provee varios servicios a esos VxDs.
- La VMM y los VxDs trabajan en un modo latente la
mayorÃa del tiempo. - Mientras los programas de aplicación corren, los
VxDs están inactivos. Son activados cuando
interrupciones u otros eventos demandan su
atención.
9Controlador 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.
10Controlador 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
11Controlador de Dispositivo Virtual (VxD)
12Controlador de Dispositivo Virtual (VxD)
13Controlador de Dispositivo Virtual (VxD)
14Controlador de Dispositivo Virtual (VxD)
15Controlador de Dispositivo Virtual (VxD)
16Hardware 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.
17Hardware Virtual
18El 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.
19El API de Servicio para VxD
20Esqueleto 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.
21Construyendo un VxD en Lenguaje Ensamblador Oney
96
22Esqueleto de un VxD en Lenguaje Ensamblador
.386p include vmm.inc DECLARE_VIRTUAL_DEVICE
PRIMERVXD,1,0, PRIMERVXD_Control,
UNDEFINED_DEVICE_ID, UNDEFINED_INIT_ORDER
Begin_control_dispatch PRIMERVXD
End_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.
23Ejemplo 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_Dispatch Create_VM,
OnVMCreate    Control_Dispatch VM_Terminate2,
OnVMClose End_control_dispatch MENSAJE
VxD_PAGEABLE_DATA_SEG Â Â Â MsgTitle db Cuadro
de dialogo de un VxD",0 Â Â Â VMCreated db Una VM
es creada",0 Â Â Â VMDestroyed db Una VM es
destruida",0 VxD_PAGEABLE_DATA_ENDS
VxD_PAGEABLE_CODE_SEG BeginProc OnVMCreate
   mov ecx, OFFSET32 VMCreated CommonCode
   VMMCall Get_sys_vm_handle    mov
eax,MB_OKMB_ICONEXCLAMATION Â Â Â mov edi,
OFFSET32 MsgTitle    xor esi,esi    xor
edx,edx    VxDCall SHELL_Message    ret
EndProc OnVMCreate BeginProc OnVMClose    mov
ecx,OFFSET32 VMDestroyed    jmp CommonCode
EndProc OnVMClose VxD_PAGEABLE_CODE_ENDS End