Programación de Sistemas

23
Controlador de Dispositivo Virtual (VxD)

description

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. - PowerPoint PPT Presentation

Transcript of Programación de Sistemas

Page 1: Programación de Sistemas

Controlador de Dispositivo Virtual(VxD)

Page 2: Programación de Sistemas

AntecedentesWindows 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).

Page 3: Programación de Sistemas

ProblemáticaLos programas DOS y de Windows son

dramáticamente diferentes.DOS Windows

•Pueden hacer uso de instrucciones privilegiadas del CPU, del puerto de E/S directamente.•Tienen acceso directo a los recursos del sistema: CPU, memoria, teclado, disco, etc.

•Restringidos respecto a lo que pueden hacer en el sistema.•Trabajan bajo el esquema del multitareas cooperativo. i.e. deben compartir el control con otros programas por medio del uso de mensajes (GetMessage o Peek Message).

Page 4: Programación de Sistemas

Solución

Programas de DOS Programas de Windows

Corren en una máquina virtual 8086.

Corren en una máquina virtual llamada SVM (System Virtual Machine).

Page 5: Programación de Sistemas

¿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).

Page 6: Programación de Sistemas

¿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.

Page 7: Programación de Sistemas

Secuencia de Arranque de Windows 951. IO.SYS es cargado en la memoria.2. CONFIG.SYS y AUTOEXEC.BAT son procesados.3. WIN.COM es llamado.4. WIN.COM corre VMM32.VXD que es actualmente un

archivo DOS EXE.5. VMM32.VXD carga la VMM en la memoria extendida

haciendo uso del controlador de XMS.6. VMM se inicializa a si misma junto con otros

controladores de dispositivos por omisión.7. VMM cambia la máquina al modo protegido y crea la

máquina virtual del sistema. 8. Virtual Shell Device, el cual es cargado al final, inicia

Windows en la máquina virtual del sistema corriendo el archivo krnl386.exe

9. KRNL386.EXE carga el resto de los archivos, culminando con el shell de Windows 95.

Page 8: Programación de Sistemas

ConsideracionesLa 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.

Page 9: Programación de Sistemas

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.

Page 10: Programación de Sistemas

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áticaVxD Dinámica

Page 11: Programación de Sistemas

Controlador de Dispositivo Virtual (VxD)

Estática Dinámica

•Cargada durante la inicialización del sistema.•Se mantiene cargada en memoria hasta que el sistema de cierra.•Proviene desde Windows 3.x

•Sólo está disponible para Windows 9.x•Puede ser cargado o descargado cuando sea necesario.•Muchos de ellos controlan dispositivos Plug and Play.

Page 12: Programación de Sistemas

Controlador de Dispositivo Virtual (VxD)

Comunicación entre VxD’s

Las VxD’s, incluyendo la VMM, se comunican entre sí a través de tres mecanismos:

1. Mensajes de control2. API’s de servicio3. Callbacks

Page 13: Programación de Sistemas

Controlador de Dispositivo Virtual (VxD)

Mensajes de Control

•La VMM envía mensajes de control de sistema a todos los VxDs cargados en el sistema cuando ocurre algo importante.•Todo VxD tiene una función que recibe y trata con mensajes de control llamada procedimiento de control de dispositivo (device control procedure)

Page 14: Programación de Sistemas

Controlador de Dispositivo Virtual (VxD)

API’s de Servicio•Un VxD, usualmente exporta un conjunto de funciones públicas que pueden ser llamadas por otros VxDs. Esas funciones se llaman servicios VxD.•Todo VxD que exporta servicios VxD debe tener un número de ID único.•El ID es un número de 16 bits que identifica únicamente un VxD.Ejemplo:

UNDEFINED_DEVICE_ID EQU 00000H VMM_DEVICE_ID EQU 00001H DEBUG_DEVICE_ID EQU 00002H VPICD_DEVICE_ID EQU 00003H VDMAD_DEVICE_ID EQU 00004H VTD_DEVICE_ID EQU 00005H

Page 15: Programación de Sistemas

Controlador de Dispositivo Virtual (VxD)

Callbacks

•Son funciones que existen en las VxD para ser llamadas por otros VxDs. •No son lo mismo que los servicios VxD. •Las callbacks no son públicas como los servicios. Son funciones privadas de las que un VxD da sus direcciones a otros VxDs en situaciones específicas.

Page 16: Programación de Sistemas

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.

Page 17: Programación de Sistemas

Hardware Virtual

VxD

Aplicación en Modo Protegido

Rutina de Servicio de Interrupción en

Modo Real

INT xx

Tabla Descriptora de Interrupciones

Tabla del Vector de Interrupciones

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]

Page 18: Programación de Sistemas

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.

Page 19: Programación de Sistemas

El API de Servicio para VxD

Identificador VxD Índice de servicios

Lista de VxDs

Tabla de Servicio para un VxD

Función de Servicio

Un identificador de Servicio para VxD [Oney 96]

Page 20: Programación de Sistemas

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.11dEl Windows 9x DDK contiene varios archivos tipo

include esenciales no incluidos en el paquete MASM32.

Page 21: Programación de Sistemas

Construyendo un VxD en Lenguaje Ensamblador [Oney 96]

MASM 6.11

LINK

MIVXD.ASM VMM.INC

MIVXD.OBJ(Archivo COFF 32-bit)MIVXD.DEF

MAPSYM

MIVXD.VXD(Archivo

Ejecutable Formato LE)

Archivo de mapeo

MIVXD.SYM(Archivo de

Símbolos para el depurador)

Page 22: Programación de Sistemas

Esqueleto 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.

Page 23: Programación de Sistemas

Ejemplo de un VxD en Lenguaje Ensambladorl .386p include vmm.incinclude 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_OK+MB_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