Download MPC0809: Sistemas operativos y alternativas RTOS

Document related concepts

Hilo de ejecución wikipedia , lookup

Núcleo (informática) wikipedia , lookup

Proceso (informática) wikipedia , lookup

Anillo (seguridad informática) wikipedia , lookup

Llamada al sistema wikipedia , lookup

Transcript
 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
: