APIs_y_DD2010.pdf

Anuncio
Informática Electrónica
Unidad 6
Interfaces y Manejadores de
Dispositivos
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
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
APIs y Device Drivers
Componentes de un API
●
Convenciones de utilización
●
Estructuras de datos
●
Protocolos de invocación
●
Mecanismos de sincronización
APIs y Device Drivers
API: Conceptos
●
●
Conceptualmente, un API expone a los
programas del usuario un conjunto de
funcionalidades accesibles en 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
APIs y Device Drivers
API: Arquitectura
Aplicación
Aplicación
API
Hardware u otras capas de software
APIs y Device Drivers
Aplicación
API: Arquitectura
Llamada
Respuesta
Aplicación
API
APIs y Device Drivers
Código: Ejemplos
●
Funcional:
int nbytes = send(tx_buf, len); /* C */
●
Objetos:
ServerSocket server ( 30000 );
while ( true ){
ServerSocket new_sock;
server.accept ( new_sock );
while ( true ){
std::string data;
new_sock >> data;
new_sock << data;
}
APIs y Device Drivers
// C++
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
APIs y Device Drivers
API's: 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.
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
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
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 linkeditar 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)
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
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
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
APIs y Device Drivers
Caso de Estudio: Garmin GPS SDK
●
●
●
Diseñada por un fabricante de dispositivos de
posicionamiento satelital para la comunicación
de los programas aplicativos con el GPS vía la
interface física RS/232c o USB (Universal
Serial Bus)
Está especificada en protocolos
Permite la comunicación bidireccional con el
dispositivo GPS con un paradigma comandorespuesta.
APIs y Device Drivers
API Garmin: Modelo Arquitectural
Capa de Aplicación
Capa de Enlace
Capa Física
APIs y Device Drivers
Comunicación
Host
GPS
Capa de Aplicación
Protocolo de
Aplicación
Capa de Aplicación
Capa de Enlace
Protocolo de
Enlace
Capa de Enlace
Capa Física
Protocolo Físico
RS232/USB
Capa Física
APIs y Device Drivers
Implementación Windows
Aplicación del Usuario
Garmin Communicator Plugin
S.O. Windows
GPS
Hardware
USB
APIs y Device Drivers
Garmin SDK
http://developer.garmin.com/web-device/device-sdk/
APIs y Device Drivers
Garmin SDK
●
●
Encontramos tres herramientas:
●
La documentación
●
El Software Development Kit
●
Uno o mas ejemplos
Consejo:
●
Leer la documentación
●
Bajar e instalar el SDK
●
Compilar y probar
APIs y Device Drivers
Device Drivers
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.
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
APIs y Device Drivers
open(),
read(),
write()
Arquitectura
Espacio
De
Usuario
Aplicación
Aplicación
Aplicación
Aplicación
API del S.O.
Espacio
Del
Kernel
Device Driver
Device Driver
Device Driver
Kernel
Capa de abstracción del hardware
Hardware
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”
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.
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)
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”
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
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
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/
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)
APIs y Device Drivers
Arquitectura WDM
(Windows kernel mode dd)
Application
I/O request
Win32 API
User Mode
Kernel Mode
Kernel-Mode Driver
Windows Kernel
I/O Manager
KMDF
APIs y Device Drivers
Arquitectura WDM
(Windows user mode dd)
Driver
Manager
Application
I/O request
Win32 API
Host Process
User-mode
Driver
UMDF
Runtime
Environment
User Mode
Kernel Mode
Windows Kernel
I/O Manager
Reflector
APIs y Device Drivers
Arquitectura DD Unix/Linux
Espacio
De
Usuario
Aplicación
Aplicación
Aplicación
Aplicación
System Calls API
Espacio
Del
Kernel
Módulo
Módulo
Kernel
Hardware
APIs y Device Drivers
Módulo
open(),
read(),
write()
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).
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
APIs y Device Drivers
Acceso al DD vía API del S.O.
●
Windows:
●
●
●
●
●
CreateFile()
WriteFile()
ReadFile()
DeviceIoControl()
Linux/Unix:
●
●
●
●
APIs y Device Drivers
open()
read()
write()
ioctl()
Caso de Estudio I: NDIS
●
●
●
NDIS es el API estándar de Windows para el
acceso a las funciones de red
El ejemplo muestra la lectura de configuración
de la capa MAC (Medium Access Control)
Otro ejemplo de acceso a un DD en Windows
es el API Garmin
APIs y Device Drivers
NDIS: ejemplo de uso
●
●
El programa “macaddr2” muestra la utilización
de la interface NDIS en Windows para acceder
a las estadísticas de los adaptadores de red
instalados
Despliega una serie de tareas:
●
●
●
Identifica la versión de Windows
Obtiene del registro de Windows la lista de
adaptadores de red NDIS
Para cada adaptador muestra la información de
configuración (nombre, OID, etc.)
APIs y Device Drivers
NDIS: ejemplo de uso (cont.)
●
●
Para cada adaptador crea un manejador usando
CreateFile() y pide las estadísticas globales al
device driver utilizando DeviceIoControl()
El diagrama adjunto muestra el modelo de
procesamiento
APIs y Device Drivers
Main() Macaddr2
Determinar
versión de
Sistema Operativo
Obtener info del
registro sobre el
adaptador
Encuestar al driver
NDIS vía IOCTRL
por medio de
transmisión
Encuestar al driver
NDIS vía IOCTRL
por estadísticas
globales
Si
802.3 (LAN)?
Si
WAN?
Obtener MAC
address
Obtener WAN
address
Encuestar al driver
NDIS vía IOCTRL
por estado de
enlace
Encuestar al driver
NDIS vía IOCTRL
por velocidad del
enlace
Si
Mas
adaptadores
de red?
APIs y Device
Drivers
Fin
Caso de Estudio II: 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”
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
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
APIs y Device Drivers
Descargar