viernes, 25 de junio de 2010

Kernel de Minix, una arquitectura ARP

En los últimos años han ido apareciendo cada vez más aparatos dotados
de pequeñas unidades de procesamiento. Se pueden encontrar sistemas empotrados
en infinidad de aparatos, la reciente aparición de los ultraportátiles
o la creciente capacidad de procesamiento de los teléfonos móviles necesitan
procesadores distintos a los que podemos encontrar en cualquier computadora
de sobremesa. Estos sistemas, destinados a aparatos portátiles, han de cumplir
unos estrictos requisitos de consumo de energía, sin renunciar por ello a la potencia
de cálculo.
De las diversas familias de procesadores destinadas a satisfacer esta creciente
demanda, destaca la arquitectura ARM, con un dominio abrumador en mercados
como la telefonía móvil, reproductores MP3, consolas portátiles, PDAs
y una infinidad de aparatos más. Esta arquitectura combina diversos factores
que la convierten en idónea para estos sistemas: bajo consumo, buenas prestaciones
de cálculo, una arquitectura RISC que facilita la programación y extensiones
que permiten reducir el tamaño del código y un diseño sencillo.
No sólo al hardware destinado a los sistemas empotrados y a los aparatos
portátiles se le exige un bajo consumo de recursos, también el software destinado
a ser ejecutado en esas plataformas ha de funcionar en sistemas con recursos
limitados: poca memoria, no disponer de sistemas de almacenamiento de
datos, etc. Mientras estos sistemas eran dedicados a tareas relativamente sencillas,
la aproximación más habitual era el desarrollo de programas ad-hoc, sin
embargo, la creciente complejidad de estos aparatos hace necesario un software
cada vez más complejo.
Así pues, es necesario buscar un compromiso entre la necesidad de un software
complejo y un sistema sin demasiados recursos, en especial, poca capacidad
de memoria. Mientras que algunos de estos dispositivos tienen sus propios
sistemas operativos, otros fabricantes han optado por utilizar sistemas operativos
como Linux, diseñados para ser ejecutados en entornos menos limitados, y
modificarlos para funcionar en estos dispositivos. Sin embargo, esta no parece
ser una solución muy acertada, ya que, a pesar de poder realizarse ciertas optimizaciones,
son sistemas operativos pensados para un entorno completamente
distinto, con demasiada complejidad. Esta complejidad implica dos cosas: un
gran volumen de código y una mayor posibilidad de contener algún tipo de
error, asumiendo una cantidad mínima de errores por línea de código.
Minix 3 es un sistema operativo que se ha desarrollado con la idea de los
dispositivos empotrados en mente. Esto hace que disponga de múltiples características
deseables en este tipo de arquitecturas. Para empezar, el sistema al
completo -kernel, servidores, algunos drivers y varias utilidades de usuario- es
capaz de ejecutarse en 16MB de RAM, y aún pueden eliminarse componentes
no esenciales para reducir el espacio ocupado. Además, uno de los objetivos
principales del diseño de Minix 3 es la fiabilidad y la tolerancia a fallos. Cada
dispositivo empotrado requiere el desarrollo de controladores específicos para
su funcionamiento, que deben integrarse en el sistema operativo. Los estudios
han demostrado que el código de los controladores contiene entre 3 y 7 veces
más fallos que el resto. Esto hace que un sistema completo pueda quedarse
totalmente bloqueado a causa de un error en alguno de sus controladores de
dispositivo. En Minix 3, sin embargo, gracias a su arquitectura microkernel y en
capas, es capaz de aislar este tipo de fallos e incluso solucionarlos sin intervención
del usuario mediante el servidor de reencarnación y una política de
planificación adecuada.
Otro punto a favor de Minix 3 es su modularidad. Debido a su estructura
por capas, es sencillo incluir o eliminar servidores y controladores de dispositivos
incluso sin tener que recompilar el kernel. Esto permite adaptar Minix a
cada sistema empotrado con mayor facilidad, lo que sumado al resto de sus
ventajas lo convierten en un sistema operativo idóneo para este tipo de entornos.
Estas ventajas de Minix 3 para el mundo de los sistemas empotrados fue
una de nuestras motivaciones a la hora de iniciar el proyecto: a pesar de ser
un campo donde iniciativas como las distribuciones Debian para ARM son ya conocidas, creemos que Minix puede aportar interesantes alternativas como
plataforma de desarrollo de nuevos sistemas empotrados, en especial de
aquellos que dispongan de menos memoria, o que tengan fuertes requisitos de
fiabilidad. Minix 3 ofrece la posibilidad de implantar un sistema de tipo Unix
en entornos de recursos limitados.