Drivers – Puerto Paralelo José Antonio Álvarez Bermejo Dpt. Arquitectura de Computadores y Eca....

Preview:

Citation preview

Drivers – Puerto Paralelo

José Antonio Álvarez Bermejo

Dpt. Arquitectura de Computadores y Eca.

Universidad de Almería

jaberme@ual.es

Elsa, yo y el resto de vosotros…

Los actores….

• El procesador, como Elsa Pataky

• Sistema Operativo, como mono-karateka

• Periférico 1..N, como frikimonster apaleado.

Los principales actores

• Hardware.

En nuestro ejemplo es ELSA. Todo el mundo quiere comunicarse con ella, pero si lo permitimos, el sistema se colapsará.

• Sistema Operativo.

Es el manager de ELSA, se encarga de pasarle a Elsa las peticiones de procesos y periféricos.

• Proceso.

Programa en ejecución (ser vivo) que quiere contactar con Elsa para poder seguir haciendo su tarea.

• Periférico.

Suele relacionarse con un proceso.

HARDWARE

• Procesador.

• Chipset

• Buses (FSB, …)

• IRQ – Interrupt Request.

• PIC – Programmable Interrupt Circuit

• Puertos – E/S : Fundamental para el subsistema

• BIOS – vectores de interrupción y servicios del sistema.

• Relación con el Sistema Operativo. También dan servicio a las rutinas de interrupción.

Sistema Operativo

• Es quien se encarga de:

• Dar recursos a los procesos.

• Gestionar procesos.

• Proporcionar MEDIOS para usar la RAM y comunicarse con dispositivos periféricos (para cualquier proceso).

• Proporcionar el soporte extendido para funciones de la BIOS.

• Controlar las áreas de memoria restringidas.

• ESPACIO DE USUARIO : PRINGAILLOS SPACE

• ESPECIO DE SISTEMA OPERATIVO : KERNEL SPACE

La película, explicada de otra formaEl h

ard

ware

( p

roce

sad

or

)El h

ard

ware

( p

roce

sad

or

)

La película, explicada de otra forma

¿Quién es en esta peli el Sistema Operativo?¿Quién es en esta peli el Sistema Operativo?

Algunos detalles más…

• ¿Cuál es la RAM?

• El frigorifico / la despensa

• Los perifericos está FUERA de la CASA de GRAN HERMANO.

• Si un PROCESO quiere COMUNICARSE con UN PERIFERICO tendrá que HACERLO a través del SUPER (CONFESIONARIO)

Algunos detalles más…(II)

• Si un proceso quiere COMUNICARSE con un PERIFÉRICO y el SUPER lo autoriza, entonces TAMBIEN PUEDE USAR el *FRIGO* para dejarles noticas.

• Estas direcciones de memorias se LLAMAN PUERTOS !

• No se pueden usar instrucciones NORMALES (caché).

Hasta aquí ….

• Deben estar claros :

• Hardware, es delicado y no se puede andar molestando.

• Sistema Operativo, gestiona la relación HW-SW

• Procesos

• Comunicación entre procesos.

• Comunicación procesos-dispositivos (a través del procesador)

• Un proceso quiere un servicio de un dispositivo…

• Tiene que invocar al Sistema operativo.

• Terminará ejecutando algún servicio de la BIOS.

• Acceso a puertos de E/S.

Un ejemplo, más serio…

int main()int main(){{ char caracter;char caracter; caracter = getch();caracter = getch(); printf(“El carácter es %c \n”, caracter);printf(“El carácter es %c \n”, caracter);}}

Otro ejemplo…

• El dispositivo es el que quiere ser *considerado* … sin intervención (directa) de ningún proceso.

• Línea de interrupción ( atención !! USB vs PS2)

• PIC

• Interrupción del procesador (diferenciar de excepción)

• Ejecución ISR (BIOS)

• Retorno a la normalidad

¿Encuesta (polling) / Interrupción?

• Mejor, Interrupción

¿Encuesta (polling) / Interrupción?

• Aviso: Para recibir los favores del procesador no es necesario ser un periférico *guapo* sino tener una *buena* línea de interrupción asignada.

• IRQ1 – PS/2

• USB Bus de protocolo

¿Qué es un driver?

• Un código que ayuda a que un proceso pueda comunicarse con un dispositivo sin tener que conocer muchos detalles sobre él.

• Sistema Operativo: posee el driver

• Hardware : el driver se comunica con cada controlador hw de cada dispositivo

• Proceso: usa el driver como una librería.

¿Cuántos tipos de drivers?

• Un driver puede ser una DLL.

• Se generan muchos cambios de contexto.

• Un driver puede ser un DRIVER (.sys) (WDM)

• Se ejecuta casi todo en el espacio del kernel :más rápido.

• Puede ser :

__asm{

…..

}

Manos a la obra con el driver

• El código que desarrollemos ha de estar en el espacio de kernel.

• Tenemos que insertar el código en “el sistema operativo”

• Si tuvieramos malas intenciones podríamos corromperlo todo: No cargar drivers hasta que estén bien, bien, bien probados.

WINDOWS !

• Usemos la herramienta WinObj

• Podremos consultar el directorio \Device

http://technet.microsoft.com/

es-es/sysinternals/bb896657.aspx

Acceso al HW en Windows (basico)

ProcessExplorer !!• Podemos ver los manejadores de dispositivos que está usando cada

proceso…

Desarrollando el driver …

• El modo usuario se corresponde con el anillo 3 y el modo kernel se corresponde con el anillo 0. El anillo 0 es el modo de ejecución de las CPU x86 más privilegiado. Y el 3 el que menos. Por tanto si una aplicación que se ejecuta en modo usuario intenta interaccionar directamente con el hardware, no podrá y se generará una excepción del tipo “Exception Privileged Instruction”.

• Los drivers son programas que interaccionan con el hardware y que proporcionan una interfaz para que las aplicaciones que se ejecutan en el modo usuario sean capaces de tratar con el hardware.

• Ms-dos no imponía estas restricciones de seguridad (anillos)

Desarrollando el driver (II)…

• Instalación

• WDK

• Virtual Clone Drive

• No nos hace falta nada más.

Desarrollando el driver (III)…

• Vamos a crear un DRIVER vacío

Desarrollando el driver (IV) …

Desarrollando el driver (V) …

Desarrollando el driver (y VI) …

Explicación detallada …

• #include <wdm.h> : Esta librería es la que permite desarrollar los Drivers, viene incorporada con el DDK. WDM significa Windows Driver Model.

• Los Drivers de dispositivos en Windows funcionan con eventos. La ejecución del driver comienza con la función DriverEntry (es como la función main de un driver)

• Cuando el Driver termina de ejecutarse no muere, todo lo contrario, queda cargado en memoria y se puede volver a usar en cualquier otro momento. Asi que se podría volver a invocar cualquier función del driver cuando ocurra algún evento, por ejemplo al insertar hardware (evento) se puede invocar una función dentro de nuestro driver. Pero como en nuestro DriverBasico sólo hemos escrito la función DriverEntry …

Explicación detallada (II)…

• Si la función DriverEntry tras ser ejecutada no termina devolviendo un STATUS_SUCCESS (algo así como ESTADO_EXITO) entonces Windows pensará que el driver está dando problemas y lo eliminará de memoria.

Explicación detallada (III)…

• Al usar la herramienta msinfo32 para inspeccionar a nuestro driver, lo podemos ver porque tras la ejecución de DriverEntry, el driver queda a la espera de nuevos eventos, pero como no le hemos añadido más funcionalidad, a pesar de estar cargado y a la espera, el driver no puede hacer nada más.

Explicación detallada (IV)…

Extensión : controlar Puerto Paralelo.

Extensión : controlar Puerto Paralelo.

Extensión : controlar Puerto Paralelo.

Extensión : controlar Puerto Paralelo.

Extensión : controlar Puerto Paralelo.

© 2006 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only.MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.