Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de...

42
APIs y Device Drivers Informática Electrónica Unidad 6 Interfaces y Manejadores de Dispositivos

Transcript of Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de...

Page 1: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Informática ElectrónicaUnidad 6

Interfaces y Manejadores de Dispositivos

Page 2: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Modalidad y Materiales● Dos clases expositivas a cargo del docente

responsable ([email protected])● Una práctica cargo de los alumnos (Práctica 5)

que deberá entregarse antes del fin de cursado.

● Tres documentos de bibliografía en la página de material de la cátedra

● Documentos complementarios desarrollados en clase

Page 3: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API● Application Program Interface (interface para

programas aplicativos) es el mecanismo mediante el cual un programa aplicativo accede a servicios de otros componentes de software

● Un API puede tomar distintas formas:● Librerías● Procedimientos● Protocolos● Objetos

Page 4: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Componentes de un API● Convenciones de utilización● Estructuras de datos● Protocolos de invocación● Mecanismos de sincronización

Page 5: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API: Conceptos● Conceptualmente, un API expone a los

programas del usuario un conjunto de funcionalidades accesibles un forma controlada

● Un API puede permitir el acceso a dispositivos físicos (device drivers), a servicios de plataforma tales como E/S y comunicaciones o a funcionalidades específicas de una pieza de software

Page 6: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API: Arquitectura

API

Aplicación Aplicación Aplicación

Hardware u otras capas de software

Page 7: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API: Arquitectura

API

AplicaciónLlamada Respuesta

Page 8: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Código: Ejemplos ● Funcional:

int nbytes = send(tx_buf, len); /* C */

● Objetos:sc = new Socket(port);salida = new DataOutputStream(sc.getOutputStream()); salida.write(i); // Java

Page 9: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API: Tipos● Dependiente del lenguaje: disponible para ser

utilizada desde un lenguaje de programación específico. Ejemplo: API de sockets de UNIX (C)

● Independiente del lenguaje: diseñada de forma tal que puede utilizarse por programas escritos en distintos lenguajes de programación. Ejemplo: web services

Page 10: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API: Ejemplos● POSIX: Interface a los servicios de los sistemas

operativos UNIX/POSIX● WIN32: Interface a los servicios de Windows● Linux Standard Base: ídem anteriores para Linux● Nvidia CUDA: (Compute Unified Device

Architecture) compilador y conjunto de herramientas de desarrollo que permiten a los programadores usar una variación del lenguaje C para codificar algoritmos en GPUs de nVidia.

Page 11: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Componentes de un API

● Uno o mas archivos de encabezado (*.h)● Una o mas librerías (*.o, *.lib, *.dll,

etc.)● Un paquete de clases (Java: *.jar)● Usualmente encapsuladas en un “SDK”

(software Development Kit)● Una especificación de protocolo y mensajes

Page 12: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Modelos● Un API puede utilizar uno o mas mecanismos

para comunicarse con los programas aplicativos, por ejemplo:● Llamada a funciones● Invocación de métodos● Paso de mensajes

Page 13: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API Basada en Funciones● Un API basada en funciones se presenta como

una librería que se carga dinámica o estáticamente, y un conjunto de funciones o procedimientos que pueden invocarse desde un programa aplicativo.

● Para utilizarla se debe compilar el aplicativo junto con los encabezados (*.h) y vincular con uno o mas archivos *.lib

● Si la librería es dinámica se carga sólo en el momento de ejecución, y toma la forma de DLLs (Windows) o SO (Unix/Linux)

Page 14: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API Basada en Funciones● Es un modelo muy utilizado● Ejemplos:

● Placas adquisidoras de datos y conversores A/D● Placas de comunicaciones● Placas de captura de video

Page 15: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

API Basada en Mensajes● Establecen protocolos de diálogo en una

arquitectura similar al modelo OSI● Incluyen al menos una capa física, una de

enlace y una de aplicación● Como el intercambio está basado en mensajes,

permiten independizar el lenguaje del aplicativo● Ejemplo:

● NMEA● Garmin● ELCOM

Page 16: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

APIs Basada en Objetos● Utilizable cuando el lenguaje de programación

soporta el modelo de objetos: Java, C++, .NET● Se presenta como un paquete de clases que

brindan las funcionalidades requeridas mediante la instanciación de objetos y la posterior invocación de métodos sobre estos objetos

● Ejemplos:● Java ME para dispositivos móviles● Componentes de comunicaciones

Page 17: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Caso de Estudio:Windows IP Helper API

● Diseñada por Microsoft para el acceso de los programas aplicativos a la configuración y el estado de la red IP

● Está especificada mediante funciones utilizables desde C o C++

● Permite la lectura y modificación de la configuración de red en el equipo

● Es parte integral de los sistemas operativos Windows (XP, 7, 2003, 2008, etc.)

Page 18: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Windows IP Helper API: Componentes

● Un archivo de encabezado: iphlpapi.h que debe incluirse (con #include) en los programas aplicativos que utilicen el API

● Un archivo de vinculación estática iphlpapi.lib que debe incluirse en la lista de librerías estáticas a vincular

● Un archivo de librería dinámica iphlpapi.dll que se carga en el momento de ejecutar los aplicativos que usen el API

Page 19: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Servicios IP Helper API● GetNetworkParams(): devuelve parámetros de

red● GetAdaptersInfo(): devuelve información de

las interfaces de red● GetIPStatistics() devuelve estadísticas de

tráfico IP del equipo● ...

Page 20: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

IP Helper API: Modelo Arquitectural

Capa Física

Sistema Operativo

Aplicaciones

IP Helper API

Red

Enlace

Page 21: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Windows IP Helper API

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366073%28v=vs.85%29.aspx

Page 22: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Device Drivers

Page 23: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Bibliografía● Arquitectura de diseño de Device Drivers para Windows

(en inglés)● Linux Device Drivers (en inglés)● Comparación de arquitecturas de Device Drivers

en Linux y Windows (en inglés)● Todos los buenos libros sobre Sistemas

Operativos, por ejemplo “Sistemas Operativos Modernos” de Tannenbaum tienen capítulos dedicados al tema.

Page 24: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Manejadores de Dispositivos● En inglés “Device Drivers”, son piezas de

software que se adicionan a los sistemas operativos para permitirles operar dispositivos.

● Los viejos kernels monolíticos manejaban un conjunto limitado de dispositivos

● En la actualidad un S.O. debe operar gran multiplicidad de dispositivos, algunos inexistentes cuando el S.O. fue diseñado

Page 25: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Arquitectura

Hardware

Capa de abstracción del hardware

Kernel

Device Driver

API del S.O.

Device Driver Device Driver

Aplicación Aplicación Aplicación Aplicación

EspacioDel

Kernel

EspacioDe

Usuario

open(), read(), write()

Page 26: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

¿Qué es un Device Driver?● Una pieza de software que nos permite acceder

a servicios de uno o mas dispositivos● Puede ser provisto por el fabricante del S.O.,

por el fabricante del dispositivo o por terceros, o incluso, fabricado por el usuario

● Es fuertemente dependiente de la plataforma y del dispositivo, y generalmente no es “portable”

Page 27: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Clases de DD● Kernel Space: el DD es integrado al código del

Kernel del SO, y corre en la región de memoria y con el nivel de privilegio de Kernel. Las fallas del DD pueden comprometer la estabilidad de todo el sistema.

● User Space: el DD corre como una aplicación de usuario, sin privilegios especiales y en su espacio de memoria propio.

Page 28: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Política y Mecanismo● Los DD deben transferir datos desde o hacia la

periferia -un disco rígido, un enlace de comunicaciones o un sensor- a la memoria del computador en forma eficiente y previsible

● Existen distintas técnicas para ejecutar esta tranferencia, entre las mas usadas están● DMA (Direct Memory Access)● Programmed I/O (interrupciones)

Page 29: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Ciclo de Vida de un DD● Un DD puede estar integrado en forma rígida

con el SO o puede ser cargado y descargado bajo demanda.

● Ejemplo del primer caso son los DD de discos internos de una computadora

● Ejemplo del segundo caso es el de los dispositivos “plug-and-play”

Page 30: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Marcos de Desarrollo● Por la complejidad inherente al desarrollo de

DD, los sistemas operativos modernos brindan entornos de programación que proveen funcionalidades de base y permiten al diseñador de DD centrarse en el manejo del dispositivo

● Consisten en especificaciones, librerías y herramientas a disposición del diseñador

Page 31: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Marcos de Desarrollo● Windows:

● Microsoft proporciona el Windows Driver Foundation, que especifica el modelo arquitectural que deben seguir los DD para los sistemas operativos Windows, y el Windows Driver Kit, con las herramientas necesarias para el diseño, la construcción, prueba y certificación de DD

Page 32: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Marcos de Desarrollo● Linux:

● el proyecto Linux Driver Project aspira crear una plataforma común para el desarrollo, prueba y certificación de DD de este sistema operativo.

http://www.linuxdriverproject.org/

Page 33: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Arquitectura● Los distintos sistemas operativos imponen en

mayo o menor medida una arquitectura para los DD que soportan

● En algunos casos la arquitectura es obligatoria (Windows) y en otros hay mas elasticidad (Linux)

Page 34: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Arquitectura WDM (Windows kernel mode dd)

Windows KernelI/O Manager

Kernel Mode

User Mode

KMDF

Application

Win32 API

Kernel-Mode Driver

I/O request

Page 35: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Arquitectura WDM (Windows user mode dd)

Driver Manager

Windows Kernel I/O Manager

Kernel Mode

User Mode

Reflector

Application

Host Process

User-mode Driver

UMDF

Runtime EnvironmentWin32 API

I/O request

Page 36: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Arquitectura DD Unix/Linux

Hardware

Kernel

Módulo

System Calls API

Módulo Módulo

Aplicación Aplicación Aplicación Aplicación

EspacioDel

Kernel

EspacioDe

Usuario

open(), read(), write()

Page 37: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Utilización de un DD● Según la plataforma, existen servicios del S.O.

que permiten acceder en forma controlada a los dispositivos.

● El modelo de acceso sigue la lógica de archivos. El dispositivo es mostrado por el S.O. como un archivo especial, sobre el cual pueden ejecutarse lecturas, escrituras y funciones de control.

● En todo caso el programa que quiere acceder al DD debe obtener un “manejador” (handler).

Page 38: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Device Handlers● En Windows se obtiene mediante la llamada CreateFile(), tomando como argumento el “device path”: \\device\deviceX

● En Unix/Linux, la llamada open() devuelve un “file descriptor” asociado al archivo de dispositivo en el directorio /dev.

● El acceso a los servicios del DD se hace vía el API del sistema operativo

Page 40: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Caso de Estudio: RTC Linux● Todas las computadoras tienen un “Reloj de

Tiempo Real”, encargado de mantener la referencia temporal externa en forma permanente, aún cuando la PC esté apagada

● Es frecuentemente utilizado el chip Motorola MC146818

● En Linux este dispositivo es representado mediante el archivo especial “/dev/rtc”

Page 41: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Lectura del RTC en Linux*

/* Leer los segundos de RTC */unsigned char segundos;int fd;fd = open (“/dev/rtc”, O_RDONLY);ioctl (fd, 0, &segundos);close (fd);

/* Leer fecha y hora del RTC */char fecha_hora[256];int fd;fd = open (“/dev/rtc”, O_RDONLY);read (fd, fecha_hora, 255);close (fd);

* Ubuntu

Page 42: Informática Electrónica Unidad 6 Interfaces y … · Diseñada por Microsoft para el acceso de los ... Uso de Visual C++ (o Visual Studio) en Windows Elementos necesarios para hacer

APIs y Device Drivers

Práctica 5● Para hacerla se debe conocer al menos:

● Uso de gcc y make o gmake en Linux● Uso de Visual C++ (o Visual Studio) en Windows

● Elementos necesarios para hacer el TP:● Una PC con Windows XP, 7, 2003 o 2008, con al

menos una placa de red y el IDE Visual Studio 2010 o 2008 instalado (primera parte)

● Una PC con Linux instalado (cualquier distribución) y los paquetes gcc y make o gmake instalados

● El paquete InfElecTP5.rar bajado de la página de la asignatura