MPC0809: Sistemas operativos y alternativas RTOS Rubén Marrero Gómez Índice 1. Introducción 2 2. Perspectiva histórica 2 3. Definición de sistema operativo y conceptos 3 3.1. Conceptos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.1. Proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.1.2. Hilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.1.3. Núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.1.4. Características Multi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.5. Capa de abstracción de hardware (HAL) . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1.6. Interfaz de programación de aplicaciones (API) . . . . . . . . . . . . . . . . . . . . . . 9 3.1.7. Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1.8. Planificación de tiempo real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4. Tipos de sistemas operativos 12 5. Symbian OS 14 6. Mobilinux 16 7. VxWorks 18 Índice de figuras 1. Modelo de cinco estados. Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Núcleo monolítico. Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3. Micronúcleo. Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4. Exonúcleo. Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5. Logo Symbian OS. www.symbian.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 6. Logo mobilinux. www.mvista.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 7. Características mobilinux. www.mvista.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 8. Logo Wind River Systems. www.windriver.com . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1 1. Introducción En este trabajo se va realizar un pequeño repaso sobre el campo de los sistemas operativos, explicando siempre de forma somera, algunos conceptos y fundamentos para entender el paradigma actual de sistema operativo, intentando atender a las distintas formas en que la literatura trata algunos de estos conceptos. Se darán por sabidos conocimientos básicos sobre la arquitectura de un computador: procesador, registros, buses, I/O, etc. Finalmente se exponen algunos ejemplos de sistemas operativos que cumplen requisitos de tiempo real y están diseñados para sistemas empotrados, con la intención de ver características reales de algunos sistemas actuales que están en boga. 2. Perspectiva histórica Para entender la necesidad de equipar a los sistemas actuales con un sistema operativo, así como también el porqué de algunas características, se hace necesario ver la evolución de los sistemas operativos en el tiempo. Los primeros sistemas de computación, desde finales de los años cuarenta hasta mediados de los años cincuenta, eran máquinas de gran tamaño sin ningún tipo de soporte lógico, en el que el programador interactuaba directamente con el hardware sin ninguna interfaz de por medio. Así, los trabajos que realizaban estas computadoras se ordenaban en serie, existiendo en cada momento un solo operador enfrentándose al hardware. Ésta es la razón por la que este modo de operación se denomina procesamiento serie. Este sistema planteaba varios problemas, de entre los cuales cabe destacar la planificación y el tiempo de configuración. La planificación de trabajo se realizaba de manera estática, siendo el programador quien reservaba bloques de tiempo, usualmente múltiplos de media hora, que podían dejar la máquina ociosa si se terminaba antes de tiempo o al programador sin terminar su trabajo si la reserva de tiempo fuera insuficiente, ya que el tiempo de configuración era largo e indeterminado. En este tiempo de configuración el programador debía especificar al hardware cuál era su propósito, necesitando cargar en memoria el compilador y el programa en el lenguaje de alto nivel, para luego cargar y enlazar el programa objeto. Cada uno de estos pasos podía suponer montar y desmontar cintas, en los que de existir algún error reiniciaban el proceso, pues se hacía necesario volver a comenzar desde el principio. Estos primeros sistemas eran muy caros y se requería maximizar su utilización. Para ello se desarrolló el concepto de sistema operativo en lotes que consistían en el uso de un software al que llamaron monitor. El monitor tenía la responsabilidad de controlar la ejecución de cada uno de los trabajos que se le asignaban al sistema, de modo que se evitaban los tiempos muertos entre trabajos. Además, el monitor era capaz de ejecutar sentencias de preparación para el programa a ejecutar, de modo que la configuración se hacía mucho menos tediosa y menos vulnerable a errores. Son estos los considerados primeros sistemas operativos, destacando el GM-NAA I/O, diseñado por General Motors y North American Aviation para un IBM 704 en el año 1956, basado en otro monitor del año 1955 diseñado sólo por General Motors para un IBM 701. Gracias al denominado monitor, los trabajos se realizan de forma continua, aumentando por tanto el rendimiento, pero el procesador continúa estando ocioso durante largos intervalos, esperando por los lentos dispositivos de entrada y salida. Para aprovechar esos espacios de tiempo se diseñaron los sistemas en lotes multiprogramados que permiten cambiar el contexto del procesador hacia otros trabajos aunque no hayan terminado los anteriores. Este es el enfoque de los sistemas operativos modernos, para el desarrollo de los cuales se hizo necesario la gestión de interrupciones y el aumento del espacio de memoria con el propósito de que pudieran coexistir más de un trabajo a la vez en el sistema. La evolución natural de las computadoras llevó a que se requiriera una interacción con el usuario, lo que priorizaba entre otros aspectos que el tiempo de respuesta fuera mínimo. De la misma forma llegaron los sistemas operativos de tiempo compartido en el que varios usuarios hacen uso del mismo sistema. Éste debía ser multiprogramado para poder satisfacer la necesidad de todos los usuarios que utilizarían distintos programas. Uno de los primeros sistemas operativos de tiempo compartido desarrollados fue el sistema Compatible Time-Sharing System, CTSS, desarrollado en el MIT para el IBM 709 en 1961. No fue hasta la aparición del microprocesador y de las computadoras asequibles para el consumo de masas que la facilidad de uso de los sistemas se hiciera imperante. Con ello, llegaron en los años setenta los primeros 2 ordenadores personales y nuevas interfaces de usuario, los sistemas WIMP (Window-Icon-Menu-Pointing device), que en la actualidad se suelen llamar GUI (Graphical User Interface), desarrollados por Xerox para su ordenador personal Xerox Alto y que fueron popularizados ya en los años ochenta por los ordenadores Macintosh de Apple. Este hecho ayudó a que se entendiera el mercado de los ordenadores personales como un negocio potencial, por lo que aparecieron innumerables sistemas para uso doméstico como el Commodore64, el Amstrad CPC y el ZX Spectrum que incluían un intérprete de BASIC en ROM con el que el usuario podía realizar operaciones de fichero como borrado, copiado y demás. [3] 3. Definición de sistema operativo y conceptos Llegados a este punto se hace necesario definir algunos conceptos para poder abordar el estudio de algunos sistemas operativos en mayor profundidad, así como consensuar una definición para sistema operativo que no está clara en la literatura. La definición de sistema operativo más usual hace siempre referencia a una infraestructura software necesaria en los sistemas actuales para gestionar de forma eficiente los recursos de la máquina. Sin embargo, una definición más completa es la que hace William Stallings[1]: “Un sistema operativo es un programa que controla la ejecución de aplicaciones y programas que actúa como interfaz entre las aplicaciones y el hardware del computador. Se puede considerar que un sistema operativo tiene los siguientes tres objetivos: Facilidad de uso, eficiencia y capacidad para evolucionar”. De esta manera podemos entender el sistema operativo como una interfaz usuario/computadora que facilita el uso del sistema, como un gestor de recursos que aumenta la eficiencia de la computadora, así como un ente capaz de evolucionar para adaptarse a las actualizaciones del hardware, capaz de incluir nuevos servicios para el usuario y resolver fallos que lleva implícito por ser una pieza software de gran complejidad. Es un hecho contrastado la necesidad de abstraer al usuario del hardware en mayor o menor medida, tanto si se trata de un usuario doméstico como de un desarrollador de aplicaciones, en cuyo caso la abstracción no es total. Esta abstracción nos la proporciona el sistema operativo a través de un conjunto de aplicaciones y utilidades para servicios como: Desarrollo de programas, donde el sistema operativo nos brinda herramientas que aunque no están integradas en el núcleo del sistema operativo, se ofrecen para dicho sistema. Ejecución de programas, en el que el usuario no se preocupa de cómo el hardware carga la aplicación en memoria y se prepara en general para hacerla correr. Acceso a dispositivos de E/S, pues para quien está frente al sistema le es completamente transparente cómo se gestionan el disco duro, el teclado, el ratón, etc. así como tampoco conoce cómo controla los ficheros o la protección de recursos y datos. Detección de errores y la posible respuesta para eliminar la condición de error. Contabilidad para monitorizar parámetros y generar estadísticas que permitan mejorar el rendimiento futuro de la computadora. Como gestor de recursos el sistema operativo procura aumentar la eficiencia del sistema aplicando políticas de uso en función del entorno para el cual fue diseñado el sistema. No debemos olvidar que el sistema operativo también es un programa como otro cualquiera, que se ejecuta sobre el hardware, con la particularidad de que es el que controla cómo se ejecutan el resto de programas. Entre los recursos que debe diligenciar se encuentran: CPU, pues cede y tramita el tiempo a otros procesos, quedando el sistema operativo dependiente de que la CPU retorne. 3 Memoria, ya que asigna el espacio de ésta para que se carguen los procesos a ejecutar, así como evita que existan accesos ilegales conociendo qué partes de la memoria están siendo utilizadas y por quién. En la memoria reside también el núcleo del sistema operativo así como otras utilidades del mismo que hayan o vayan a ser ejecutadas. Almacenamiento secundario, donde se dispone la estructura de datos sobre la que se asienta el sistema de ficheros del sistema. El sistema operativo se encarga de gestionar, asignar y proteger su espacio para los datos estáticos o para procesos que no pudieron mantenerse residentes en la memoria principal. E/S en general, con lo que se incluye la gestión de interrupciones para indicar a la máquina cómo responder y qué decisiones tomar en cada caso particular. Aquí se incluyen interfaces de red que nos permiten comunicar nuestra computadora con otros sistemas, creando y supervisando conexiones entre aplicaciones que se ejecuten en otras máquinas (o localmente, en cuyo caso la conexión se denomina virtual). 3.1. Conceptos Se han tratado varias nociones sin ahondar en lo que ellas significan. Con el propósito de dejar claras estas ideas para lo sucesivo, se introduce este apartado en el que se tratarán fundamentalmente aquellos conceptos que servirán para, de igual manera, exponer las características que pueden definir a los distintos sistemas operativos. 3.1.1. Proceso Igual que sucede con la definición de sistema operativo, aclarar lo que llamamos proceso es muy disperso. Entre las posibles definiciones están: Un programa en ejecución. Una instancia de un programa ejecutándose en un computador. La entidad que se puede asignar o ejecutar en un procesador. Una unidad de actividad caracterizada por un solo hilo secuencial de ejecución, un estado actual y un conjunto de recursos del sistema asociados. Sin embargo, desde el punto de vista del sistema operativo, debe considerarse al proceso como un conjunto de piezas, que le dan vida e identifican. Los dos elementos esenciales son el código de programa, que puede compartirse con otros procesos que ejecuten el mismo programa, y un conjunto de datos asociados a dicho código: Identificador. Estado. Prioridad. Contador de programa. Punteros a memoria. Datos de contexto. Información de estado de E/S. Información de auditoría. 4 Estos elementos pueden encontrarse en las distintas lecturas, que versan sobre el tema que tratamos, reunidos en tres grupos: el contexto de ejecución, la memoria que ha reservado con su contenido y otra información que posibilite al sistema operativo realizar una planificación. Así en el contexto de ejecución se pueden agrupar el estado del proceso, que puede ser ejecutando, parado, ...; el contador de programa que indica la dirección de la siguiente instrucción a ejecutar; los punteros a memoria que posibilitan acceder al contenido de la memoria reservada; los datos de contexto que son los valores que se encuentran en los registros del procesador cuando éste está ejecutando el proceso; y la información de estado de E/S que contiene las peticiones a dispositivos así como sus posibles asignaciones, la lista de ficheros que puede estar manejando el proceso, etc. En cuanto a la información que permite al sistema operativo realizar la planificación, se agrupan la prioridad con la que el proceso se ejecuta dentro del sistema respecto a otros procesos y la información de auditoría, que incluye estadísticas de tiempo de uso del procesador, registros usados, dispositivos empleados, etc. El sistema operativo debe controlar el modo en que se ejecutan los procesos y gestionar los recursos que pudieran necesitar, para lo cual se le asignan diversas tareas sobre cada proceso como su creación y terminación, la planificación y activación e intercambio y sincronismo para comunicarse con otros procesos mediante espacio de memoria compartida, paso de mensajes y semáforos. Es por ello que se fijan un conjunto de posibles estados para cada proceso los cuales dependen del modelo empleado por cada sistema operativo. Existen modelos muy simples como el de dos estados que determinan sólo si el proceso está en ejecución o no, siendo útiles para planificaciones simples FIFO; hasta modelos de cinco, siete y nueve estados como el que emplea UNIX. El más empleado es el modelo de cinco estados que se muestra a continuación: Figura 1: Modelo de cinco estados. Wikipedia Nuevo: el proceso es creado pero el sistema operativo aun no ha fijado que recursos le son asignados, pues aun no ha sido admitido y no reside en memoria. Una vez es admitido pasa a estar listo. Listo: el proceso tiene determinados todos sus recursos y se encuentra esperando que el planificador a corto plazo le permita pasar a ejecución. Ejecución: el proceso ha tomado el control del procesador, tiene toda la información para correr dispuesta sobre los registros. El procesador ejecuta las instrucciones del proceso hasta que finaliza o produce 5 una excepción, en cuyo caso pasa al estado terminado; o hasta que es interrumpido por el planificador para que otro proceso se pueda ejecutar pasando al estado listo; o hasta que necesita un evento, ya sea desde un dispositivo de E/S o desde otro proceso, pasando al estado de espera. Espera: el proceso se encuentra bloqueado a la espera de un evento. Una vez se produce el evento pasa a estar listo. Terminado: el proceso es expulsado del grupo de procesos ejecutables y el sistema operativo libera los recursos de la máquina que consumía. En la literatura es usual hacer uso del término tarea o proceso indistintamente, sin embargo, es conveniente explicar que el término tarea se emplea con mayor frecuencia como sinónimo de proceso cuando se tratan los sistemas empotrados o cuando se trata la planificación, pues en la lengua inglesa el término ’multitasking’, que se explica más adelante, es preferible a ’multiprocessing’, ya que se puede confundir con ’multiprocessor’. 3.1.2. Hilo Hilo, hebra, proceso ligero, o ’thread’ en inglés, hace referencia a una unidad de trabajo que contiene información de contexto del procesador y área de datos de la misma manera en que lo hace un proceso. También se ejecuta secuencialmente y puede interrumpirse para dar paso a otro hilo. La diferencia de las hebras respecto de los procesos es que en sistemas ’multithread’ los procesos se definen como conjunto de hilos, de modo que los últimos pueden compartir información en memoria dentro del espacio del proceso al que pertenecen, a diferencia de los sistemas monohilo en los que el concepto de hilo se confunde con el de proceso. Esto es útil para aplicaciones, que siendo modulables, realizan varias labores, esencialmente independientes, que no tienen que ser serializadas. Se presenta a continuación una serie de ventajas de los sistemas multithilo respecto a los monohilo: [1] Lleva mucho menos tiempo crear un nuevo hilo en un proceso existente que en crear un proceso. Lleva menos tiempo finalizar un hilo que un proceso. Lleva menos tiempo cambiar entre dos hilos dentro del mismo proceso. La comunicación entre hilos de una misma aplicación es más eficiente que entre procesos, pues no necesita la intervención del núcleo para realizar labores de protección y comunicación como lo sería necesario entre procesos. 3.1.3. Núcleo El núcleo del sistema operativo, también conocido por su anglicismo kernel, es la pieza fundamental del sistema operativo. Se encarga de gestionar los recursos de la máquina a través de servicios de llamada al sistema: planificación de hilos, el intercambio de procesos, las excepciones, el manejo de interrupciones, la sincronización de multiprocesadores, etc. Existen algunos tipos de núcleo: Monolíticos. Micronúcleos. Híbridos. Exonúcleos. 6 Los núcleos monolíticos son grandes, complejos y engloban la mayoría de los servicios del sistema incluyendo la planificación, los sistemas de ficheros, las redes, los controladores de dispositivos, la gestión de memoria y otras funciones. No tienen estructura modular, implementado como un único proceso con todos los elementos compartiendo el mismo espacio de direcciones. Algunos ejemplos de núcleos monolíticos son los sistemas Unix-like como la propia Unix, BSD y sus derivados, Solaris, Linux y otros como los Microsoft Windows 9x. Figura 2: Núcleo monolítico. Wikipedia Por otra parte los micronúcleos sólo tienen unas pocas funciones esenciales asignadas al núcleo, incluyendo los espacios de almacenamiento, comunicación entre procesos (IPC) y la planificación básica. El resto de servicios como la gestión de memoria, sistema de archivos, operaciones de E/S, etc, se procesan como procesos servidores en el espacio de usuario. Como ventaja respecto a los núcleos monolíticos se encuentran la simplicidad del núcleo, la descentralización de fallos y la facilidad que aporta para crear y depurar controladores de dispositivos. Sin embargo, cuenta con ciertas desventajas como la dificultad para sincronizar los módulos que componen el micronúcleo. Sistemas operativos que emplean micronúcleos entre otros son Minix, QNX y AmigaOS, el sistema operativo por defecto del ordenador personal Amiga de los años ochenta y noventa. Figura 3: Micronúcleo. Wikipedia Existen, aun hoy en día, grandes debates sobre si los sistemas micronúcleo son o no mejores que los monolíticos. Un ejemplo interesante de estos debates es la discusión entre el profesor Tanenbaum y Linus Torvalds, creadores de los sistemas Minix y Linux respectivamente. [4] Los núcleos híbridos son micronúcleos modificados a los que se les ha añadido código que estaría en el espacio de usuario en el caso de ser micronúcleos puros para realizar ciertos servicios de manera más rápida. Ejemplos de sistemas operativos que empleen núcleos híbridos son Microsoft Windows XP, Windows Vista y MAC OS X. Otro tipo de núcleo es el exonúcleo que sigue siendo un tema de investigación, sin existir un sistema comercial que lo emplee. La idea subyacente consiste en abstraer al programador del hardware hasta el punto que 7 considere necesario, pudiendo el programador realizar operaciones de muy bajo nivel como pedir direcciones específicas de memoria, bloques de disco y demás, a través de librerías aportadas por el sistema. La gran ventaja de los exonúcleos es que son muy simples pues están limitados a asegurar la protección y el multiplexado de recursos. Figura 4: Exonúcleo. Wikipedia 3.1.4. Características Multi Multitasking/multiprogramming: Multitarea/Multiprogramación es una característica que hace referencia a la capacidad que tiene el sistema operativo para ejecutar varias tareas/programas de forma intercalada. Cuando el sistema posee más de un procesador algunos autores prefieren el término ’multiprocessing’. Existen esencialmente dos tipos de multitasking: ’cooperative’ (cooperativo) y ’preemptive’ (preferente). En el primero la tarea una vez está en modo ejecución ocupando el procesador decide en qué momento ceder el procesador al sistema operativo o a otro proceso. En el segundo caso el sistema operativo es el que regula los tiempos de ocupación del procesador por parte de todos los procesos del sistema. multithreading: Multihilo es la técnica por la cual un sistema puede gestionar un proceso como un conjunto de hilos (threads) que pueden ejecutarse concurrentemente. multiprocessing: Traducido como multiprocesamiento, se refiere a la capacidad de gestionar varios procesos en un multiprocesador. Existen varios tipos dentro de las distintas categorías de sistemas de computadores. Una posible clasificación de sistemas de computadores es la ’taxonomía de Flynn’ propuesta por Michael J. Flynn en el año 1972[6]: SISD Single instruction single data: un solo procesador ejecuta instrucciones que modifican datos en una única memoria asociada al procesador. Caso de monoprocesador. SIMD Single instruction multiple data: una única instrucción se ejecuta en varios procesadores, los cuales operan sobre memorias independientes asociadas a cada procesador. Caso de los procesadores vectoriales y matriciales. MISD Multiple instruction single data: varias instrucciones se procesan en procesadores distintos actuando sobre el mismo conjunto de datos. No se ha implementado. MIMD Multiple instruction multiple data: varios procesadores ejecutan instrucciones diferentes que operan sobre datos distintos. Atendiendo a esta clasificación y haciendo énfasis en las arquitecturas MIMD, ’múltiples instrucciones, múltiples flujos de datos’, se necesita conocer la forma de comunicación entre los distintos procesadores a través de la memoria. Así, si la memoria es totalmente distribuída, es decir, que está débilmente acoplada, los elementos de proceso son computadoras en sí mismo y se denominan ’clusters’ o multicomputadores. Sin embargo, si 8 la memoria es compartida, es decir, que está fuertemente acoplada, aparecen dos variantes: la arquitectura maestro/esclavo (o multiprocesador asimétrico ASMP) y el multiprocesador simétrico (SMP). En la primera de estas variantes, un procesador ejecuta el núcleo del sistema operativo y se encarga de planificar cómo los procesos se van ejecutando en un procesador y otro. En la segunda variante el núcleo puede ejecutarse en cualquier procesador y normalmente cada procesador realizar su propia planificación del conjunto de procesos e hilos. Los sistemas actuales están basados en esta última variante, SMP, tratando de explotar el paralelismo real que ofrece. multiuser: Multiusuario, en contraposición a monousuario, es la característica que determina si los recursos del sistema pueden ser utilizados por más de un usuario al mismo tiempo. 3.1.5. Capa de abstracción de hardware (HAL) La capa de abstracción hardware (Hardware Abstraction Layer) es un software capaz de aislar las funciones del sistema operativo del hardware sobre el que se encuentra. De esta manera el sistema operativo ve siempre una misma máquina hipotética, sin importar cuál es el verdadero hardware, sobre la que vierte mandatos y respuestas genéricas que la capa de abstracción traduce a la máquina real. 3.1.6. Interfaz de programación de aplicaciones (API) (Application Programming Interface) Es un conjunto de bibliotecas en forma de funciones y procedimientos que aporta una pieza software a otra para que puedan comunicarse a través de llamadas, lo que permite una vez más abstraer las particularidades de una aplicación al resto. El sistema operativo ofrece una API a las aplicaciones que corren sobre él para gestión de dispositivos de E/S, manejo de energía, monitoreo del sistema, gestión de ventanas y sistemas gráficos, etc. Algunos ejemplos de API son: Win32 de Microsoft Windows. Estándar POSIX. OpenGL de Silicon Graphics. Colección DirectX de Microsoft que incluye Direct3D. Carbon de MAC OS X. 3.1.7. Planificación En los sistemas modernos multiprogramados una de las funciones fundamentales que debe realizar el sistema operativo es la planificación de procesos o hilos, pues las tareas residen en memoria de forma concurrente. La política de planificación va a depender fundamentalmente de la aplicación para la cual ha sido diseñado el sistema y de los recursos con los que cuenta la máquina, siendo muy importante saber si la máquina cuenta con un único procesador o varios. Existen cuatro tipos de planificación: Planificación a largo plazo. Planificación a medio plazo. Planificación a corto plazo. Planificación de E/S. 9 En la planificación a largo plazo el sistema operativo se limita a decidir si un proceso se añade o no al conjunto de procesos a ser ejecutados, lo que determina el grado de multiprogramación del sistema; a medio plazo se decide si el proceso debe añadirse al número de procesos que están parcialmente o totalmente en la memoria principal; a corto plazo se decide con los procesos o hilos residentes en memoria cuál es el siguiente a ejecutarse en el procesador; y en la planificación de E/S se establece qué tarea pendiente de una petición de E/S debe ser atendido por un dispositivo de E/S disponible. A continuación se entrará con mayor detalle, aunque de forma somera, en los aspectos más relevantes de la planificación a corto plazo. En síntesis, la planificación a corto plazo debe optimizar uno o más aspectos del sistema asignando tiempos de procesador. Existen sistemas en que a cada proceso se le asigna una prioridad, de modo que la planificación es simple, pues se debe ejecutar con la mayor brevedad posible los procesos con mayor prioridad. Este método tiene el gran inconveniente de poder dejar a los procesos con la prioridad más baja sufriendo inanición. Existen políticas de planificación alternativas que podemos clasificar en dos categorías: sin expulsión (nonpreemptive) y con expulsión (preemptive). Las políticas sin expulsión consisten en dejar al proceso que está en ejecución ocupando el procesador hasta que termine o hasta que se bloquea esperando una petición de E/S o algún servicio del sistema operativo. Por otra parte, las políticas con expulsión permiten interrumpir la ejecución de un proceso aunque no haya terminado o no esté esperando ninguna petición o servicio, para dar paso a otro proceso.1 Algunas de las planificaciones alternativas son: Primero en llegar, primero en servirse (first-come-first-served): Consiste en una cola FIFO de procesos. Es sin expulsión. Se emplea como referencia para el estudio de otras planificaciones. Existe riesgo de inanición penalizando a los procesos cortos. Turno rotatorio (round robin o time slicing): La planificación está basada en el reloj, de forma que van ejecutándose los procesos que están listos de forma cíclica. Es con expulsión. Todos los procesos ocupan el procesador durante el mismo tiempo hasta ser expulsados. Primero el proceso más corto (shortest process next): Se selecciona el proceso con el tiempo de ejecución más corto esperado. No es expulsivo. Posible inanición. Gran overhead para cálculo de tiempo de ejecución. Menor tiempo restante (shortest remaining time): Versión expulsiva del caso anterior, en el que, de entrar un proceso con menor tiempo de ejecución que el proceso que esté ejecutándose en ese momento, pasa a ejecutarse el recién entrado. Inanición posible. Primero el de mayor tasa de respuesta (highest response ratio next): Se prioriza a los procesos de forma dinámica mediante la función (w+s)/s, siendo ’w’ el tiempo invertido en el sistema esperando o en ejecución y ’s’ el tiempo total estimado de ejecución que necesita el proceso para terminar. No expulsivo. De esta forma los procesos cortos son priorizados y los procesos que llevan largo tiempo en cola también. No existe posibilidad de inanición pues los procesos a medida que están más tiempo en el sistema van ganando prioridad. Cuando tratamos sistemas con más de un procesador, es necesario realizar algunas consideraciones de más. Es evidente que el gran potencial que tiene un sistema multiprocesador es su capacidad para realizar tareas de forma realmente concurrente. La necesidad de realizar las tareas de forma concurrente se mide en función del término granularidad, siendo una aplicación de grano fino aquella que tiene paralelismo inherente en un único flujo de instrucciones y de grano muy grueso aquella en que sus procesos no están relacionados. Esta granularidad nos sirve también para clasificar las distintas arquitecturas en función de la capacidad que tienen para explotar el paralelismo de estas aplicaciones. Así, una arquitectura que es capaz de sincronizar procesos dentro de una aplicación con mucho paralelismo, se puede decir que es de grano fino; y una arquitectura de 1 proceso puede hacer referencia a hilo, dependiendo de si el sistema es multithreading o no. 10 grano muy grueso podría ser un grid de computadoras en el que la sincronización entre procesos se puede realizar cada varios miles o millones de instrucciones ejecutadas. En este apartado, toma gran relevancia la diferencia entre procesos e hilos. En los sistemas monoprocesador, los hilos pueden aportar gran beneficio por la facilidad con la que el sistema es capaz de cambiar la asignación del procesador entre hilos de un mismo proceso pues no se ha de cambiar el contexto de memoria como si es necesario hacer cuando cambiamos entre procesos. Pero en un sistema multiprocesador el paralelismo real que existe en la ejecución de los hilos permite una mejora muy importante de prestaciones. Destacan cuatro enfoques dentro de las posibles propuestas para la planificación multiprocesador de hilos: Compartición de carga: Los procesos no se asignan a un procesador particular. Existe una cola global de hilos que van ejecutándose en los distintos procesadores a medida que estos quedan ociosos. Planificación en pandilla: Se ejecutan al mismo tiempo sobre los distintos procesadores un conjunto de hilos relacionados. Asignación de procesador dedicado: Cada proceso ocupa un número de procesadores igual al número de hilos en el programa durante toda la ejecución del programa. Planificación dinámica: El número de hilos de un proceso puede cambiar durante el curso de su ejecución. 3.1.8. Planificación de tiempo real La planificación de tiempo real tiene sentido cuando lo aplicamos a un entorno en el que la obtención del resultado que ofrece una tarea urge o tiene un plazo. Las tareas, denominadas en este contexto como tareas de tiempo real, pueden ser tareas de tiempo real duro o de tiempo real suave. Las primeras son aquellas en las que, de no cumplirse el plazo que la limita, puede ocasionar un error fatal e irreversible en el sistema. Sin embargo, el plazo de las segundas es un límite deseable pero no obligatorio. Otra característica de las tareas de tiempo real es la periodicidad. Una tarea real se dice periódica cuando el requisito de la misma se produce cada cierto tiempo T o cada cierto número de eventos. Por otra parte, una tarea real se dice aperiódica si sólo está limitado su instante de comienzo o finalización. Existen cinco características que definen a un sistema de tiempo real: Determinismo Reactividad Control de usuario Fiabilidad Operación de fallo suave Un sistema operativo se dice determinista si es capaz de realizar las operaciones en instantes de tiempo fijos o dentro de intervalos de tiempo predeterminados. Puesto que es imposible saber a priori en un sistema las circunstancias con las que se puede encontrar, es útil saber el retardo máximo desde la llegada de una interrupción de un dispositivo de alta prioridad hasta que comienza el servicio. La reactividad por otra parte indica el tiempo que necesita para manejar una interrupción dependiendo mucho de la arquitectura hardware sobre la que se sustenta el sistema. El determinismo y la reactividad juntos conforman el tiempo de respuesta a eventos externos. El control del usuario hace referencia a la capacidad que tiene el usuario de interferir en la planificación que hace el sistema operativo sobre las tareas, siendo por norma general mayor en los sitemas de tiempo real, ya que el número de variables que determinan la mejor planificación son mayores que en un sistema no de tiempo real. La fiabilidad es una característica muy importante en los sistemas operativos de tiempo real siendo mucho más importante que en un sistema de no tiempo real, pues la pérdida o degradación de sus 11 prestaciones puede tener consecuencias catastróficas. La operación de fallo suave se refiere a la habilidad que tiene el sistema para minimizar las consecuencias de un fallo, de modo que sea capaz de preservar tanta capacidad y datos como sea posible. Un sistema no de tiempo real, al encontrar un fallo, puede permitirse detener la ejecución tras valorar cuál ha sido el posible daño. Sin embargo, un sistema de tiempo real no puede detenerse, por lo que debe estar preparado para continuar su ejecución a pesar del posible deterioro. Existen cuatro enfoques o tipos de algoritmos para la planificación de tiempo real: Enfoques estáticos dirigidos por tablas Enfoques estáticos expulsivos dirigidos por prioridad Enfoques dinámicos basados en un plan Enfoques dinámicos de mejor esfuerzo El primer enfoque es aplicable a tareas que son periódicas en el que el planificador intenta encontrar un plan que le permita cumplir todos los requisitos de todas las tareas. La entrada de datos para el análisis son: tiempo periódico de llegada, tiempo de ejecución, plazo periódico de finalización y prioridad relativa de cada tarea. La planificación por plazos es un ejemplo de este tipo de algoritmo. El segundo tipo realiza también un análisis estático, pero que en vez de obtener una planificación obtiene una tabla de tareas con su prioridad. en función de esta tabla el planificador expulsa las tareas como en la mayoría de los sistemas multiprogramados que no son de tiempo real. Un ejemplo de este tipo de algoritmo es el algoritmo de tasa monótona. Con la planificación dinámica basada en un plan se realiza una nueva planificación cada vez que llega una tarea a la cola de ejecución teniendo en cuenta todas las tareas que están en cola, de modo que si puede correr la tarea sin que ninguna de las tareas anteriores pierda su plazo, pasa directamente a ejecutarse. En el enfoque dinámico de mejor esfuerzo, cuando llega una tarea, el sistema le asigna una prioridad basada en las características de la misma sin realizar ningún análisis de factibilidad. El sistema intenta cumplir todos los plazos y aborta la ejecución de cualquier proceso cuyo plazo haya fallado. Es fácilmente implementable. Es el tipo más usado en los sistemas operativos de tiempo real disponibles en la actualidad. 4. Tipos de sistemas operativos Existen muchas clasificaciones para los distintos tipos de sistemas operativos, variando mucho en función del año en que se realizara la clasificación. Hoy en día la frontera entre un sistema operativo para sistema empotrado o para un dispositivo móvil de mano es muy difusa, así como también lo es cuando lo comparamos con los sistemas operativos de tiempo real. Una posible ordenación pudiera ser: Sistemas operativos para supercomputación[7] • Suse Linux Server : monolítico • AIX Unix : microkernel • Red Hat Linux : monolítico • UNICOS : monolítico Sistemas operativos para mainframes/servidores/estaciones de trabajo • IBM Z/OS • Solaris 12 Sistemas operativos de propósito general para ordenadores personales • Unix-Like : ◦ Distribuciones Linux : monolítico Debian Ubuntu Red Hat Fedora Gentoo Suse ◦ Minix : micronúcleo ◦ Distribuciones BSD : monolítico FreeBSD OpenBSD ◦ OpenSolaris : monolítico ◦ MAC OS X : Híbrido • Microsoft Windows 9x / XP / Vista : Monolítico / Híbrido / Híbrido Sistemas operativos de tiempo real/empotrados • eCos • Nucleus : microkernel • VRTX : microkernel • QNX : microkernel • VxWorks : microkernel • Symbian : microkernel • Snapgear : monolítico • Palm OS • Windows Mobile / CE : híbrido / híbrido • Openmoko : monolítico • Mobilinux : monolítico • Android : monolítico Sistemas operativos web [8, 9] • WebOS • eyeOS Sistemas operativos de red • Microsoft Windows NT / 2000 : híbrido / híbrido • Novell Netware : monolítico • BSD : monolítico 13 5. Symbian OS Figura 5: Logo Symbian OS. www.symbian.com Symbian es un sistema operativo creado para telefonía móvil por Symbian Ltd. que desciende de los sistemas operativos EPOC desarrollados por Psion. Symbian Ltd nació en 1998 como una asociación de las empresas Nokia, Siemens, Fujitsu, Arima, Samsung, LG, Mitsubishi Electric, Panasonic, Motorola, Lenovo, Sharp, Benq, Sony Ericsson, Sanyo y Sendo con la intención de aprovechar la convergencia entre los teléfonos móviles y las PDAs. Su intención primera era diseñar un sistema operativo que funcionara en un espacio pequeño y además supiera administrar de manera eficiente la energía que por aquel entonces era importante con el surgimiento de las pantallas a color y aplicaciones multimedia. Actualmente Symbian Ltd. es propiedad de Nokia liderando el mercado móvil desde la salida de su versión v7.0, con una cuota actual del 46.6 %, seguido por Apple con un 17.3 % con iPhone OS y por Microsoft con un 13.5 % gracias a Windows CE y Windows Mobile. Está previsto que se libere el código durante la primera mitad del año 2009. Symbian OS se ecuentra en la versión 9.5, diseñado para los requerimientos específicos de los móviles de última generación 2.5G y 3G. Emplea el kernel EKA2 que corre sobre ARM (y puede ser emulado sobre x86), derivado de EKA1 que ya ofrecía preemptive multitasking y protección de memoria pero no garantías de tiempo real. EKA2 incluye como diferencias más relevantes la garantía de tiempo real, la capacidad de gestionar múltiples hilos dentro como fuera del kernel y llevar el microkernel EKA1 al concepto nanokernel, que deja al kernel con lo absolutamente imprescindible, sobre lo cual se construyen el resto de capas de abstracción que se crean convenientes para la aplicación. Las características más relevantes según Symbian son: microkernel con capacidad de tiempo real y multithreading SMP con desconexión de procesadores para ahorro de energía amplio soporte para periféricos y tipos de memoria internas y externas sistemas de ficheros NOR, NAND, SD y MMC capacidad de funcionamiento bajo distintos estándares de red grandes capacidades en multimedia • soporte para grabación de vídeo y audio • soporte para cámaras de gran resolución potentes gráficos • soporte para GUIs (OpenGL, Open VG) amplia suite de aplicaciones de servicio (manejador de contactos, calendario...) 14 Algoritmos criptográficos: DES, 3DES, RC2, Rc4, RC5 y AES Algoritmo symbian Demand Paging que sólo carga las páginas necesarias de los DLL en RAM Soporte para ARMv5, v6 y v7 entornos de desarrollo basados en Eclipse y CodeWarrrior a partir de lenguajes como Java, C++, Visual Basic, Python, Perl y Flash Lite. 15 6. Mobilinux Figura 6: Logo mobilinux. www.mvista.com Montavista Mobilinux es un sistema operativo basado en Linux que fue diseñado especialmente para telefonía móvil por MontaVista Software y presentado en Abril de 2005. Montavista fue fundada en el año 1999 por James “Jim” Ready, creador de VRTX, el primer sistema operativo considerado de tiempo real que salió en 1980. Siguiendo una estrategia basada en el código libre, lo que le ha aportado una vasta comunidad de desarrolladores, Mobilinux copa el 90 % de los móviles con Linux, siendo el sistema operativo empotrado comercial fundamentado en Linux más utilizado. Según MontaVista las características más importantes de este sistema son [10]: Duración de la batería más larga: Con el sistema de gestión de batería Montavista Dynamic Power Management, que implementa un algoritmo de regulación de la frecuencia de CPU y otras funciones [11] , es capaz de aumentar el tiempo de batería hasta cinco veces según benchmarks que ofrece MontaVista como referencia. Conectividad Incorporada: Es capaz de conectar a más tipos de software y dispositivos que cualquier otro Linux. Permite soporte “out-of-the-box” para SDIO, Wi-LAN/Wi-Fi sobre USB, Bluetooth sobre USB, USB On-The-Go, drivers de sonido ALSA (Advanced Linux Sound Architecture), GStreamer. Velocidad en el inicio: Arranca desde cero en menos de 5 segundos y establecer una llamada telefónica en menos de 10 segundos, tres veces más rápido que dispositivos basados en Symbian o en Microsoft y tres veces y medio más rápido que un iPhone de Apple. Capaz de retornar de modo sleep en menos de medio segundo. Figura 7: Características mobilinux. www.mvista.com 16 Pequeño tamaño: Puede ser implementado bajo 2 megabytes y, para un móvil típico con funcionalidad básica, bajo algo menos de 14 megabytes. Seguridad a nivel NSA: Primer sistema operativo que incluye MontaVista microSELinux, una versión reducida de SELinux (Security-Enhanced Linux), desarrollado por la NSA (National Security Agency) para proteger la confidencialidad de los mensajes y la integridad de los archivos y el software del sistema. Respuesta en tiempo real: Mobilinux es 100 % Linux nativo lo que le confiere prestaciones de tiempo real. Montavista Linux preemptible kernel technology: “Preempt_RT”. Version del kernel actual v2.6.21. Soporte para procesadores multinúcleo: Mobilinux soporta tanto procesadores mononúcleo como multinúcleo además de multiprocesamiento síncrono y asíncrono. Reducción de costes BOM: Reducir el BOM (bill of materials) supone grandes beneficios económicos. Mobilinux es capaz de correr sobre una amplia cantidad de arquitecturas y simples, a diferencia de otros sistemas operativos, lo que permite al fabricante mayor flexibilidad para la elección de componentes hardware. Mejor entorno de desarrollo: Está provisto de KGDB (Kernel GNU Debugging) sobre USB, en contraposición a los clásicos debuggers que corren sobre puertos más grandes que por la miniaturización de los móviles no permitían realizar el depurado de forma nativa sobre el propio dispositivo. Además Montavista provee a la comunidad de desarrolladores con herramientas de desarrollo basadas en Eclipse, Platform Development Kit (PDK) y Application Depelopment Kit (ADK). 17 Figura 8: Logo Wind River Systems. www.windriver.com 7. VxWorks VxWorks es un sistema operativo de tiempo real unix-like propietario diseñado por Wind River Systems para sistemas empotrados. Wind River Systems fue fundada en el año 1981 en Berkeley por Jerry Fiddler y David Wilner. Sus primeros clientes fueron la NFL (Liga Nacional de Fútbol Americano) y Francis Ford Coppola, director de cine para quien desarrollaron un sistema de edición de vídeo. Wind River en la actualidad se dedica a crear software y sistemas operativos que son usados en teléfonos móviles, sistemas de frenado en automoción, routers, cámaras digitales, proyectores, “set-top boxes”, señales de tráfico, los Mars Rovers y más. Algunos de los sucesos más recientes que han definido la trayectoria de la compañía es la alianza que creó con Red Hat en 2004 para crear un sistema operativo basado en Linux para sistemas empotrados que salió al mercado en el año 2005 y la cooperación con BMW e Intel desde 2008 para el desarrollo de una plataforma “open-source” para el control de la electrónica dentro de los automóviles. En la actualidad los competidores más importantes con los que cuenta Wind River son Green Hillos Software, creadores de algunos RTOS como VelOSity; QNX, con su sistema operativo homónimo de tiempo real; Mentor Graphics, con el sistema Nucleus; y algunos más como Microsoft, con sus plataformas para dispositivos de mano, y MontaVista con Mobilinux. VxWorks ha sido portado a muchísimas plataformas debido al grán abanico de aplicaciones para el que ha sido diseñado, pudiendo correr sobre casi cualquier arquitectura moderna como la familia x86, MIPS, PowerPC, Freescale ColdFire, Intel i960 o la familia de ARMs. Es de destacar el que Wind River no vende sólo el sistema operativo, sino toda una plataforma de desarrollo incluyendo una gran cantidad de servicios de soporte técnico como la exportación de proyectos a versiones del sistema más recientes. Esta plataforma desde la versión 6.x de VxWorks la denominan simplemente Workbench, a diferencia de la denominación Tornado que empleaban para versiones anteriores. Entre los productos que están basados en VxWorks destacan: El Mars Reconnaisaance Orbiter La Phoenix Mars Lander la sonda Deep Impact Los Mars Rover Spirit y Opportunity El robot ASIMO de Honda El Airbus A400M y el Boeing 787 así como el 747-8 El sistema iDrive de BMW routers Linksys WRT54G wireless procesadores de imagen DIGIC II y DIGIC III de Canon El helicóptero de ataque Apache Longbow 18 Características que definen a VxWorks v6.6 [25]: Gran escalabilidad del SO por estar diseñado para amplio rango de aplicaciones. Algunos profiles: • Minimal kernel profile: small-footprint (36KB-100KB) dependiente de la familia del procesador y algún componente que el diseñador pueda incluir. El kernel es totalmente estático, no permite asignación dinámica de memoria. • Basic kernel profile: permite asignación dinámica de memoria y ocupa unos 150KB aproximadamente. • Basic OS profile: añade al kernel servicios para E/S y soporte para posible coprocesador, 250KB. Gran determinismo en la planificación de tiempo real mediante expulsión basada en prioridades o round-robin con rápida respuesta a interrupciones. opción de SMP como add-on, manteniendo las mismas características y prestaciones de RTOS. Multitasking real con exclusión mutua como protección entre procesos. Capacidad de elegir el diseñador cómo las tareas se distribuyen entre los distintos procesadores del sistema. protección de memorias basadas en MMU (memory management unit). Aislamiento entre el kernel y modo usuario. Rápida y flexible comunicación entre procesos incluyendo TIPC (Transparent IPC). compatibilidad hacia atrás con el resto de versiones. VxSim simulator. Herramientas de análisis Run-Time: provee de detallados análisis y visualización gráfica de los distintos eventos del sistema, interacción entre tareas, interrupciones, prestaciones de tiempo real, aparición de cuellos de botella, análisis de memoria, monitor de datos, variables, localización en memoria... Aseguran un rápido time-to-market a través de su plataforma mediante herramientas de desarrollo y manejadores de error. Soporte para multitud de sistemas de ficheros. Extensible con protocolos de red como IPv4/IPv6. 19 Referencias [1] William Stallings. Sistemas operativos: Aspectos internos y principios de diseño. Prentice Hall. 2005 [2] Abraham Silberschatz. Sistemas operativos: conceptos fundamentales. Editorial Addison-Wesley. 1994 [3] Carlos Tarajano Beracoechea. Trabajo Microarquitectura de Sistemas Integrados. Funcionalidad y Características de: Symbian OS v9 vs eCos. http://www.iuma.ulpgc.es/users/nunez/clases-micros-paracom/mpc0607-trabajos/mpc07-Tarajano-Symbian-eCos.zip [4] Resumen Discusión profesor Tanenbaum vs Linus Torvalds : http://www.dina.dk/~abraham/Linus_vs_Tanenbaum.html [5] Varios artículos Wikipedia : http://wikipedia.org [6] Wikipedia.Taxonomía de Flynn : http://en.wikipedia.org/wiki/Flynn %27s_taxonomy [7] TOP500, Supercomputer Sites : http://www.Top500.org [8] Wikipedia.Web Operating Systems : http://en.wikipedia.org/wiki/Web_operating_system [9] WebOS: Operating System Services http://www.cs.duke.edu/ari/issg/webos/ for Wide Area Applications : [10] MontaVista Mobilinux v5 Datasheet : http://www.mobilinux.com/download/MontaVista-Mobilinux-5datasheet.pdf [11] MontaVista. Dynamic Power Management (DPM) : http://www.mvista.com/opensource_dpm_project.php [12] José Miguel Santos Espino, Alexis Quesada, Francisco Santana. Transparencias asignatura Sistemas Operativos. Informática. ULPGC. [13] Javier Palmero Esteban. Sistemas operativos http://www.gui.uva.es/login/login/15/process.html multiproceso y multithread : [14] z/OS : http://www-03.ibm.com/systems/z/os/zos/ [15] Symbian OS : http://www.symbian.com [16] All About Symbian : http://www.allaboutsymbian.com [17] Microsoft : http://www.microsoft.com [18] Mobilinux : http://www.mobilinux.com [19] Android Depeloper Challenge : http://code.google.com/intl/es-ES/android/adc.html [20] Greg Hawley. Selecting a Real-Time Operating System : http://www.embedded.com/1999/9903/9903sr.htm [21] eCos Kernel Overview : http://ecos.sourceware.org/docs-latest/ref/kernel-overview.html [22] Nucleus OS : http://www.mentor.com/products/embedded_software/nucleus_rtos/ [23] OS DATA : http://www.osdata.com [24] Wind River Systems : http://www.windriver.com [25] Wind River General Purpose Platform, VxWorks Edition http://www.windriver.com/products/product-notes/General-Purpose-Platform-ve-Note.pdf 20 3.6 :