sistemas embebidos avanzados dsi-eie-fceia
TRANSCRIPT
Estructura del software en sistemas embebidos
Sistemas Embebidos AvanzadosDSI-EIE-FCEIA
Contenido temático● Parte I:
– 1.1. Introducción: El software en un SE. Arquitecturas. Portabilidad y eficiencia.
– 1.2. Administración y control de los recursos de hardware: Administración de dispositivos de entrada/salida. Administración de la memoria. Niveles de abstracción. Uso y desarrollo de Interfaces de software: Hardware Abstraction Layer, Librerías, Software development Kits, Device Drivers, Application Program Interfaces.
● Parte II:
– 1.3. Sistemas operativos: conceptos generales. Tipos de S.O. Estructura de un Sistema Operativo. Elementos constituyentes. Gestión de recursos, planificación y tiempo. APIs del S.O. Criterios de selección y utilización de SO para SE.
● Parte III:
– 1.4. Diseño y construcción de software en SE: Modelos de desarrollo. Herramientas de programación, entornos integrados de desarrollo y “toolchains”. Herramientas de
versionado. Desarrollo colaborativo. Repositorios.
Parte I: el software en un SE
Sistemas Embebidos Avanzados 4
Factores críticos
● Limitado espacio de memoria● CPUs restringidas en clock y longitud de palabra● Fuertes restricciones al consumo de energía● Conectividad limitada/esporádica ● Dimensiones físicas acotadas● Tiempo real● Aplicación crítica
Sistemas Embebidos Avanzados 5
Arquitectura
• La aplicación D gestiona recursos de hw directamente
• Las aplicaciones A y B deben hacerlo mediante el sistema operativo
• La ap. C interactúa con una máquina virtual
Hardware
Aplicación D
Sistema Operativo
Aplicación A
Máq Virtual
Aplicación C
Sistemas Embebidos Avanzados 6
Portabilidad y eficiencia
● Un programa es portable cuando puede ejecutarse sin grandes cambios en distintas plataformas de cómputo (generalmente recompilando)
● La eficiencia en el software tiene múltiples dimensiones: rapidez de ejecución, recursos de cómputo utilizados, energía consumida, esfuerzo requerido para construirlo, calidad del código, confiabilidad, mantenibilidad, etc.
Sistemas Embebidos Avanzados 7
1.2 Administración de recursos
● Administración y control de los recursos de hardware:
– Administración del procesador– Administración de dispositivos de entrada/salida– Administración de la memoria– Administración del almacenamiento persistente
Sistemas Embebidos Avanzados 8
Administración del procesador
● Gestión de la asignación de los recursos de CPU (procesadores/núcleos/hilos) a las aplicaciones del usuario, el procesamiento de interrupciones y las tareas demandadadas por la plataforma
● Simultaneidad implica planificación
Sistemas Embebidos Avanzados 9
Administración de dispositivos de entrada/salida
● Los dispositivos de E/S acoplados requieren
– Inicialización– Control– Interacción– Manejo de excepciones– Protocolos
Sistemas Embebidos Avanzados 10
Administración de la memoria
● Gestión de bloques asignados y libres● Protección ante violaciones de acceso● Relocalización● Interacción con DMA
Sistemas Embebidos Avanzados 11
Administración del almacenamiento persistente
● Filesystems● Variedad● Estándares
DSI-EIE-FCEIA Sistemas Embebidos Avanzados
Application Program Interfaces
DSI-EIE-FCEIA Sistemas Embebidos Avanzados
Modelo de capas
● Es una concepción arquitectural del desarrollo de software donde la complejidad se subdivide en conjuntos separados (capas)
● En este modelo cada capa tiene una serie de responsabilidades hacia la capa superior, y recibe una serie de servicios de la capa inferior
● Así, cada capa ofrece y utiliza servicios completamente especificados
DSI-EIE-FCEIA Sistemas Embebidos Avanzados
Uso y desarrollo de interfaces de software
Software/hardware
API
Aplicación
DSI-EIE-FCEIA Sistemas Embebidos Avanzados
API: Interacción
API
AplicaciónLlamada Respuesta
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 16
APIs Síncronas / Asíncronas
● En el primer caso, la respuesta se produce como consecuencia de la llamada: existe una relación causal entre ambas y un ordenamiento temporal secuencial
● En el caso asíncrono la respuesta se produce por la ocurrencia de un evento externo, ante el cual la aplicación es informada por el API
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 17
APIs Síncronas
Aplicativo API
t0
t1
solicitud
respuesta
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 18
APIs Asíncronas
t t
Aplicativo API
Evento e
t0
t1
t3
t2
Registra interés en evento “e”
registrado
Suceso: evento “e”
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 19
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, NMEA, ELCOM
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 20
● POSIX: Interface a los servicios de los sistemas operativos UNIX/POSIX
● WIN32: Interface a los servicios de Windows● 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
● NMEA: interface a instrumentos de navegación
API: Ejemplos
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 21
● 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
Componentes de un API
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 22
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
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 23
● 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)
API Basada en Funciones
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 24
API Basada en Funciones
● Es un modelo utilizado en lenguaje C● Ejemplos:
– Placas adquisidoras de datos y conversores A/D– Placas de comunicaciones– Placas de captura de video
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 25
APIs basadas en Eventos
● Utilizadas para comunicaciones asíncronas con dispositivos de interface que producen estímulos desde el entorno, por ejemplo un sensor de nivel o un pulsador
● Frecuentemente la interacción se lleva a cabo mediante “funciones de call-back”
● Similar a las rutinas de atención de interrupción (ISR)
Sistemas Embebidos Avanzados 26
Desarrollo bare metal vs. S.O.
● Determinadas aplicaciones sencillas no justifican la inclusión de un SO:
– Ejecución sincrónica, hilo único– Requerimientos ajustados de tiempo– RAM/ROM muy limitadas– Baja complejidad
Sistemas Embebidos Avanzados 27
Desarrollo bare metal vs. SO (ii)
● Hay condiciones que justifican la inclusión de un SO:
– Concurrencia, ejecución asincrónica, hilos múltiples
– Diversidad de E/S y dispositivos conectados– Plataformas con múltiples CPUs– Alta complejidad
28 / 79
Parte II: Sistemas Operativos
Sistemas Embebidos Avanzados 29
Conceptos generales
● La complejidad creciente de la plataformas de hardware
● Los nuevos requerimientos para las aplicaciones ● La interoperabilidad● La portabilidad● El proceso de desarrollo de software
Sistemas Operativos
● “Máquina ampliada”● El S.O. presenta una abstracción distinta al
hardware subyacente, proveyendo de interfaces de programación de mayor nivel y, en algunos casos, de portabilidad, por ejemplo, UNIX. Su tarea principal es la administración de recursos
Sistemas Embebidos Avanzados 31
Propósito de un Sistema Operativo
● Un SO ofrece un entorno de ejecución para las aplicaciones, en la forma de un conjunto de recursos y servicios
● Se interpone entre el hardware y las aplicaciones mostrando un "máquina extendida"
● Abstrae así la complejidad de la plataforma, y en algunos casos, la existencia de varias aplicaciones corriendo en paralelo
● El SO debe arbitrar el acceso de las aplicaciones a los recursos de hw
Sistemas Embebidos Avanzados 32
Servicios del sistema operativo
● Gestión de los recursos de cómputo● Gestión de la memoria● Gestión de la E/S● Gestión de procesos● Control y arbitración de acceso a recursos● Gestión del almacenamiento masivo● Gestión de las comunicaciones● ...
Sistemas Embebidos Avanzados 33
Tipos de S.O.
● Múltiples tipos, definidos por el campo de aplicación:
– Propósito general: Linux, Windows, Unix, ...– Tiempo real: VxWorks, FreeRTOS, OSEK, …– Aplicación específica: Android, iOS, ...
Multiprogramación
● Un sistema operativo puede brindar distintas abstracciones conceptuales:
– Monoprogramación: cada tarea se ejecuta ininterrumpidamente hasta completarse
– Multiprogramación: pueden ejecutarse dos o mas tareas “simultáneamente”
Multiprogramación
● La capacidad de ejecución de tareas concurrentes depende del diseño del S.O. y del hardware.
● Los S.O. multiprogramables implementan técnicas de 'timesharing', compartiendo la(s) cpu(s) entre todas la tareas a ejecutar.
Multiprogramación
● Todos los S.O. multiprogramables (multitasking) incorporan un gestor de tareas llamado "planificador“ (scheduler)
● El scheduler es responsable de aplicar políticas de planificación de procesos, prioridades de ejecución y control de estado de los procesos
Multiprogramación
● Dependiendo del hardware, la simultaneidad de ejecución puede ser virtual o real
● Si hay mas de un CPU, o si el CPU único tiene capacidades de paralelismo, el S.O. puede aprovechar estas capacidades planificando distintos procesos por CPU o unidad de ejecución
Si hay sólo una CPU
Si hay múltiples CPU
Multiprogramación
Multiprogramación
● Los microprocesadores superescalares son capaces de ejecutar varias instrucciones simultáneamente, brindando paralelismo a nivel de un proceso.
● Los procesadores paralelos soportan dos o mas flujos de instrucciones, brindando paralelismo de múltiples procesos
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 40
● Todos los procesadores modernos permiten distintos “niveles de privilegio” para la ejecución de software
● Cada nivel permite ejecutar un subconjunto específico del set de instrucciones del microprocesador
● En procesadores Intel x86 el nivel 0 permite todas las instrucciones del set, mientras que los siguientes (1, 2...) restringen operaciones como out
● El núcleo del sistema operativo (kernel) corre al nivel 0, es decir, no tiene restricciones de ejecución. Se dice que corre en “modo privilegiado (kernel)”
Niveles de Privilegio (i)
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 41
● La mayoría de las aplicaciones que usamos en un sistema operativo como por ejemplo Linux corre en un modo no privilegiado llamado “modo usuario (user mode)”
● En el “modo usuario” una aplicación no tiene acceso directo a la memoria física, por ejemplo
● Esta política permite arbitrar la concurrencia de aplicaciones
Fuentes: Intel® 64 and IA-32 Architectures Software Developer’s Manual The ARM Architecture With a focus on v7A and Cortex-A8
Niveles de Privilegio (ii)
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 42
● Los niveles de privilegio se representan como anillos concéntricos
● Hacia el centro Þ mayor privilegio
Niveles de Privilegio (iii)
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 43
● Un DD se ejecuta en el nivel de privilegio del kernel y una aplicación lo hace en el nivel de privilegio del usuario
● Esta separación es garantizada por el kernel, y permite proteger a cada aplicación de las demás ejecutándose concurrentemente, tanto el área de memoria asignada como el estado del procesador (contexto)
● Todas las operaciones críticas son ejecutadas en el nivel de privilegio del kernel del S.O.
Espacios del kernel y del usuario
Sistemas Embebidos Avanzados 44
Estructura de un Sistema Operativo
Fuente: https://www.cs.rutgers.edu/~pxk/416/notes/03-concepts.html
Sistemas Embebidos Avanzados 45
Caso de estudio: sistema operativo para dispositivos embebidos
● Operación en tiempo real● Operación reactiva● Configurabilidad● Flexibilidad con dispositivos de E/S● Mecanismos de protección estrictos● Uso directo de interrupciones por parte de las
aplicaciones
Sistemas Embebidos Avanzados 46
Enfoques para el diseño● Modificar un SO existente, por ejemplo, Linux, agregando:
– Capacidades de tiempo real
– Optimización de operaciones
– Otras funcionalidades requeridas● Ventajas:
– Interfaz conocida
– Herramientas y aplicaciones disponibles● Desventajas:
– No optimizado para operación en tiempo real, tampoco para plataformas embebidas
Sistemas Embebidos Avanzados 47
SO preexistentes, modificados
● OpenIL (https://www.openil.org/index.html)
Sistemas Embebidos Avanzados 48
Enfoques para el diseño (ii)
● SO construidos específicamente para SE:
– Conmutación rápida y eficiente entre procesos o hilos
– El planificador es de tiempo real, y el despacho es parte del planificador
– Tamaño minimizado – Rápida respuesta a interrupciones externas
Sistemas Embebidos Avanzados 49
●SO construidos específicamente para SE (ii)
– Minimiza los intervalos con interrupciones inhabilitadas
– Provee flexibilidad en la administración de memoria*
– Proveee mecanismos de escritura de datos a alta velocidad**
*,**: según versiones
Sistemas Embebidos Avanzados 50
Gestión de recursos, planificación y tiempo
● Procesos, hilos, memoria● Prioridades, tipo de planificación● Restricciones en los sistemas de tiempo real
Sistemas Embebidos Avanzados 51
APIs del S.O.
● El S.O. expone sus servicios a los programas mediante interfaces estándares documentadas denominadas como APIs (Application Program Interfaces)
● Los programas acceden a la utilización de los recursos administrados por el S.O. de forma ordenada y controlada
Sistemas Embebidos Avanzados 52
APIs del S.O. (cont.)
● Por ejemplo, solicitar un bloque de memoria, leer un archivo o acceder al I/O físico
● Ejemplo: API POSIX en Linux para acceder a archivos o dispositivos:
– open(), close()– read(), write()– ioctrl()
DSI-EIE-FCEIA Sistemas Embebidos Avanzados
Device Drivers
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 54
● Es una pieza de software que interactúa con (entre) el sistema operativo y con uno o mas dispositivos físicos
● Mientras que las aplicaciones tradicionales ejecutan una o varias tareas desde su arranque hasta el fin de ejecución, un DD se “inicializa” y queda en cargado en memoria a la espera de “peticiones de servicio”
● En algunos casos un DD puede ser “cargado” y “descargado” de memoria dinámicamente, es decir, cuando se lo necesita. Ej.: cuando conectamos una cámara de fotos a la PC
¿Que es un DD?
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 55 APIs y Device Drivers
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()
...
ioctrl()
Arquitectura
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 56
● Caracter: la transferencia de datos se lleva a cabo byte a byte, como por ejemplo en una UART
● Bloque: la transferencia de datos se lleva a cabo en bloques de bytes de longitud fija, como por ejemplo en un disco
● Red: la transferencia tiene lugar en tramas o paquetes de bytes. Ejemplo: un adaptador Ethernet
Clases de Device Drivers
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 57
Ejemplo: DD en Linux
● El comando lsmod informa los DD cargados en memoria
● El comando modinfo informa las características de un DD específico
● insmod carga manualmente un DD en memoria● modprobe carga o descarga un DD
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 58
● Un DD provee un conjunto de características que las aplicaciones pueden usar, llamadas “mecanismo”
● La forma en la que cada aplicación decide usar estas características es privativa de la aplicación y se denomina “política”
Política y Mecanismo
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 59
● Un DD, como toda pieza de software, tiene una fase de diseño, una de construcción y una de utilización
● Las dos primeras son similares a cualquier otra pieza de software
● La fase de utilización es específica:
– Integrado al núcleo del sistema operativo– Cargado y descargado a requerimiento del
usuario
Ciclo de Vida de un DD
DSI-EIE-FCEIA Sistemas Embebidos Avanzados 60
● El DD del disco rígido o el de la placa de red están integrados al núcleo: son necesarios para el arranque del S.O.
● Los DD de dispositivos “plug-and-play” se cargan cuando el dispositivo se conecta físicamente a la computadora, por ejemplo, una cámara o un celular
Fase de Utilización
61 / 79
Modelos de desarrollo
Herramientas: Evolución
● La necesidad de desarrollar software implicó la creación de múltiples herramientas de diseño y construcción de aplicaciones
● En este terreno encontramos desde simples ensambladores hasta herramientas de modelado de sistema, incluyendo lenguajes de alto nivel (C, C++, Java, C#,...)
Lenguajes de Programación
● Podemos ver al lenguaje como otra capa de abstracción, que permite ver a las aplicaciones en el contexto del programador, ‘traduciendo’ este modelo al código ejecutable por la máquina destino
● De acuerdo al ‘nivel’ de esta abstracción, se califica el lenguaje
Lenguajes de Programación
● En orden decreciente de nivel de abstracción:
– Herramienta de modelado (UML, etc.)– Framework (C++ STL, Boost, Java , .NET)– Lenguaje orientado a objetos (C++, Java, C#, etc.)– Lenguaje procedural (C, Pascal, FORTRAN)– Ensamblador (assembler)– Código de máquina
Opcodes, hexCódigo de máquina
MnemónicosEnsamblador
Rutinas, módulosLenguaje procedural
Objetos, clases, mensajesLenguaje orientado a objetos
ComponentesFramework
DiagramasModelador UML
EntidadesHerramienta
Entidades
Niveles
● Cuando usamos una herramienta de mayor nivel, estamos interponiendo mas capas de abstracción entre nuestra aplicación y el hardware
● Generalmente (no siempre), mayor nivel implica mas posibilidades de diseño y menor perfomance
Hardware
Sistema Operativo/Monitor
Máquina VirtualEntorno Runtime
Aplicación AAplicación
B AplicaciónC Aplicación
D
Capas de Abstracción
Sistemas Embebidos Avanzados 68
Herramientas de programación
● Entornos integrados de desarrollo (IDEs)● Herramientas de línea de comando● Depuración● Prueba● Perfilado● "Toolchains"
Sistemas Embebidos Avanzados 69
Desarrollo colaborativo
● El desarrollo de software en equipos dispersos● La experiencia Open Source● Problemas y soluciones
Sistemas Embebidos Avanzados 70
Herramientas de versionado
● Cuando se trabaja en proyectos no triviales es imprescindible el control de cambios
● Si es desarrollo colaborativo resulta inevitable● Múltiples soluciones:
– Git– SubVersion– Mercurial– ...
Sistemas Embebidos Avanzados 71
Repositorios
● Esquema de almacenamiento de los productos del desarrollo: fuentes, documentación, etc.
● Dos modelos:
– Centralizado– Distribuido
Sistemas Embebidos Avanzados 72
Repositorios: modelos
● Distribuido:Cada usuario tiene su propio repositorio. Los distintos repositorios pueden intercambiar y mezclar revisiones entre ellos. Es frecuente el uso de un repositorio, que está normalmente disponible, que sirve de punto de sincronización de los distintosrepositorios locales. Ejemplos: Git yMercurial.
● Centralizado:Existe un repositorio centralizado de todo el código, del cual es responsable un único usuario (o conjunto de ellos). Se facilitan las tareas administrativas a cambio de reducir flexibilidad, pues todas las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable. Algunos ejemplos son CVS, Subversion o Team Foundation Server
Sistemas Embebidos Avanzados 73
Repositorio centralizado
Fuente: http://invernalia.homelinux.net/jstitch/content/versionadores
Sistemas Embebidos Avanzados 74
Repositorio distribuido
Fuente: http://invernalia.homelinux.net/jstitch/content/versionadores
Sistemas Embebidos Avanzados 75
Git: control de versiones distribuido
● Creado en 2005 para controlar el desarrollo del kernel de Linux
● Libre, open source
● No solo para software, documentos en general
● Usado por las mayores compañías de software del mundo (Google, Microsoft, Facebook, …)
● Presentación y documentos en https://git-scm.com/
● Tutorial: https://git-scm.com/docs/gittutorial
● Referencia interactiva: http://ndpsoftware.com/git-cheatsheet.html
Sistemas Embebidos Avanzados 76
Git: flujo e interacciones
Sistemas Embebidos Avanzados 77
Repositorios Git públicos
● GitHub: https://github.com/ repositorios públicos, privados con costo
● BitBucket: https://bitbucket.org/ gratis hasta 5 usuarios, repositorios privados ilimitados
● ...
Sistemas Embebidos Avanzados 78
Ejercitación propuesta● 1: Desarrolle un programa en C o C++ que permita conocer en Linux
los puertos y dispositivos conectados por USB (sugerencia: investigue la librería libusb)
● 2. Investigue el uso y mecanismo de la llamada al sistema select(). ¿Es un API síncrona o asíncrona?
● 3. Investigue el propósito y contenido del filesystem /proc en sistemas Linux. Desarrolle un programa simple que interprete y muestre información allí contenida (no toda, elija una clase)
● 4. Desarrolle un programa que permita conocer los threads de hardware soportados por una plataforma de SE (BB o Raspberry PI)
● 5. En Linux el comando ifconfig -a lista las interfaces de red conocidas por el sistema. Diseñe un programa capaz de entregar la misma información sin usar el comando ifconfig
Sistemas Embebidos Avanzados 79
Bibliografía● Sistemas Operativos Modernos, A. Tanenbaum ISBN 968-880-323-5
● Embedded Operating Systems, Eighth Edition. William Stallings
● OpenIL, Open Industrial Linux www.openil.org
● Linux device drivers third edition, Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman, O'reilly, 2005
● Sistemas Operativos, 7ª edición, Galvin, Silverschatz y Gagne
● Operating System Concepts, Paul Krzyzanowski https://www.cs.rutgers.edu/~pxk/416/notes/03-concepts.html
● Versionando con Git y Github, jsticht http://invernalia.homelinux.net/jstitch/content/versionadores
● Git: --local-branching-on-the-cheap https://git-scm.com/