miércoles, 10 de septiembre de 2008

Haciendo operativo el sistema

Una de las decisiones de diseño a las que me he tenido que enfrentar últimamente es definir, al menos en lo básico, qué sistema software hará funcionar la SRAD.

El "cerebro" de la SRAD es un soft processor del tipo MicroBlaze, es decir, un microprocesador que, en vez de ser un ente hardware estático, es un ente hardware programado en la FPGA, configurable, variable, de propósito específico en cada proyecto. Y como todo microprocesador, su función es ejecutar un software. ¿Qué software?

Prácticamente cada sistema basado en microprocesador que conocemos lleva un sistema operativo. Un sistema operativo es un conjunto de instrucciones software que cumplen unas tareas muy específicas: control de recursos, interfaz de las aplicaciones con el hardware, control de la multitarea... El sentido popular que se le da a "Sistema Operativo" es de un amplio conjunto de programas y aplicaciones de usuario que vienen con el ordenador, pero, como he dicho, es una acepción popular técnicamente incorrecta. Podríamos decir que popularmente me expresaría mejor diciendo software de sistema, pero lo que quiero decir es sistema operativo.

El hardware SRAD, incluyendo el MicroBlaze, es (será) un sistema altamente específico con funcionalidades ad-hoc perfectamente definidas. Las interfaces de comunicación entre los módulos del sistema y entre el sistema y el exterior están perfectamente definidas. De este modo en principio no sería difícil programar directamente un software que accediera a dichas interfaces y, en un puñado de funciones, realizara las tareas necesarias. ¿Por qué, entonces, complicarnos la vida con un sistema operativo? Recordemos que, en todo caso, la SRAD es un sistema minúsculo, escaso de recursos, que se debe mantener tan simple como sea posible. Pues bien, un sistema operativo básico nos ofrece:
- Gestión de las funciones de acceso a los periféricos (comúnmente conocidas como controladores) organizadas en forma de primitivas.
- Control de interrupciones de usuario (tareas que pueden pedir paso de mayor preferencia al sistema).
- Planificador (muy útil): poder ejecutar varias funciones pseudo-simultáneamente.

¿Qué queda por decidir, entonces? Pues obviamente, qué sistema operativo utilizar: Windo... No, qué va, es broma...
- Un sistema extremadamente básico programado por mí mismo.
- Un Xilkernel, de Xilinx, sistema POSIX básico.
- Un núcleo Linux adaptado, como BlueCat.

Un sistema básico que yo me atrevería a hacer en los apretados plazos de los que disponemos sería un conjuntillo de funciones de cambio de contexto basadas en una interrupción por temporizador periódico (con esto obtenemos multitarea). Habría que programar bien los drivers de nuestros periféricos ad-hoc, controlar a mano la memoria y la entrada/salida de datos y tener mucho cuidado con las interrupciones de usuario. Pero eso sí, sería simple y completamente personalizado.

El Xilkernel ha sido un descubrimiento que he hecho recientemente. Me he leído la API completa, me he leído todo el manual y todos los documentos relacionados que he encontrado. Realmente me gusta. Es un sistema que implementa las funciones que he definido hace dos párrafos de forma simple y eficiente, robusta según ellos, y siguiendo el estándar POSIX, al cual estoy habituado, pues Linux es en gran parte POSIX. Realmente parece una buena opción.

BlueCat Linux me ofrece un sistema Linux integrado completo para mi MicroBlaze. Esto implica que programar software para la SRAD será como programar un dispositivo mips integrado de toda la vida con los que llevo años trabajando. Sería realmente sencillo. Pero es un sistema muchísimo más complejo de lo que nos hace falta. Más costoso en recursos hardware, y más difícil de adaptar.

Como habréis adivinado me he decantado por Xilkernel. Estoy aún en fase de adaptación, hay que conocer los entresijos del enjendro antes de hacerle cosquillas, pero creo que nos llevaremos bien. Es suficientemente flexible, muy simple y pequeño y ofrece incluso dos planificadores diferentes, interrupciones de usuario y todo eso de lo que os hablaba.

Dentro de un par de semanas espero tener una sencilla aplicación funcionando sobre un Xilkernel que a su vez funcione sobre un MicroBlaze con algún periférico que mi equipo haga a mano con propósito de prueba. Sobre una base funcional podremos construir un buen sistema simple y robusto de funciones de control que se encarguen de todas esas cosas que dije hace un par de entradas que debía hacer la SRAD.

Aún hay tiempo, hasta el 30 de octubre, para tener a punto la descripción técnica detallada del sistema completo. Poco a poco se van atando cabos. Cada vez me parece más bonito...