LINUX
¿Por qué Linux?
Linux
es
un sistema operativo derivado de UNIX desarrollado originalmente por Linux
Torvals asistido por la comunidad de desarrolladores a lo largo de
todo el mundo a través de Internet.
Amparado bajo la Licencia Pública
GNU
General Public License (
GPL ), todo el código fuente ( en C en su práctica totalidad
) esta disponible para el público en general.
Proporciona:
-
Multitarea y sincronizacion de procesos.
-
Gestión de memoria virtual.
-
Librerias de código compartido.
-
Carga bajo demanda.
-
Gestión de memoria.
-
Pila TCP/IP nativa.
Inicialmente puede parecer que Linux
es demasiado pesado para ser apropiado para un sistema empotrado, debido
a que normalmente las tipicas distribuciones de Linux incorporan mas funcionalidades
de las que necesitamos, incluso de las que necesita un usuario de PC.
Sin embargo, hemos de recabar en
que básicamente nos interesa el Kernel de Linux, el verdadero
corazón del sistema. Podemos recalcar las siguientes ventajas que
apuntan hacia Linux:
-
Altamente probado y estable.
-
Código público GPL.
-
Desarrollado en C, lo que lo hace altamente
portable.
-
Basado en el compilador GNU C, lo que
permite utilizar una gran cantidad de herramientas de desarrollo.
-
Disponible para sistemas Intel PC.
-
Multitarea real.
-
Soporte de un gran número de
perifericos.
-
Modular, por tanto escalable según
la demanda del sistema.
-
Muy documentado ( Linux
Documentation Project ).
-
Extensión de tiempo real ( RT
Linux).
RT-Linux
Sobre plataformas Intel x86, Linux
dispone de una extensión de tiempo real llamada Real
Time Linux ( RT Linux) . Básicamente
se trata de unas modificaciones realizadas al código fuente del
núcleo de Linux, para incluir un planificador de tiempo real y una
gestión mas eficiente de las interrupciones.

Como se aprecia en la figura, RTLinux
se situa entre el sistema operativo y directamente sobre el hardware. El
núcleo se convierte en una tarea para el planificador de tiempo
real, corriendo a la menor prioridad. Las interrupciones son ahora controladas
por la capa RT, pasando de forma totalmente transparente a Linux. Las tareas
de tiempo real se ejecutan directamente sobre la maquina, siendo planificadas
por la capa de RT atendiendo a la prioridad de cada una y de sus requerimientos
temporales.
Como ventajas tenemos:
-
El sistema linux anterior, que sigue
siendo funcional.
-
Un conjunto de tareas de tiempo real
ejecutandose sobre la máquina.
-
El mismo sistema de desarrollo es el
sistema final.
Para entender como funciona RT necesitamos
comprender algo mas de Linux: Los Módulos Cargables Dinamicamente.
Para saber mas sobre RT, puede consultarse
el articulo [RIPOLL98].
Módulos Cargables Dinámicamente.
Los módulos son trozos del sistema
operativo que se pueden insertar y extraer en tiempo de ejecución.
Aparecieron con las versiones 2.0
del Kernel para facilitar el desarrollo de nuevos drivers, pues anteriormente,
cada vez que se deseaba probar nuevo código, era necesario reiniciar
la maquina.
Cualquier programa en C compuesto
por varios archivos fuente, debe ser:
-
compilado cada uno de los archivos,
generando código objeto ( .o).
-
Enlazado todos juntos para resolver
referencias, generando un unico archivo ejecutable.
Pero supongamos que unicamente necesitasemos
compilar aquel archivo que contiene el Main, y que al ejecutarlo el S.O.
fuese capaz de cargar y enlazar el resto de código a medida que
hiciese falta.
Linux es capaz de hacer esto no
solo con los programas sino TAMBIEN con el propio núcleo.
Cuando este arranca, solo contiene
las partes indispensables. El resto del sistema puede estar contenido en
archivos no cargados en memoria, que pueden ser usados cuando hacen falta
y posteriormente descargados de nuevo.
Con esta capacidad, podemos crear
nuevos modulos y cargarlos sin necesidad de recompilar ni de reiniciar
la máquina.
Una vez cargado un módulo,
este pasa a ser parte del sistema operativo, esto implica:
-
Puede hacer uso de funciones y variables
del nucleo.
-
El código se ejecuta al máximo
nivel de privilegio de CPU.
-
La memoria esta mapeada a memoria fisica,
por lo que no puede sufrir "paging".
Por la propia implementacion, los modulos
ya ofrecen caracteristicas de Tiempo Real:
-
Tiene acceso directo a todos los recursos
de la máquina. ( Control de interrupciones ).
-
No puede sufrir retrasos por fallos
de página.
Para generar un módulo no hace
falta nada especial, simplemente declarar en la cabecera del fuente que
se trata de un módulo. Se compila de la misma manera que un ejecutable,
pero posteriormente no se enlaza con librerias de C. Obviamente, no puede
usar ninguna llamada al sistema , aunque si que puede utilizar funciones
de libreria que no pidan servicios al S. O.
Será el propio nucleo a la
hora de cargarlo el que resuelva las referencias y enlace el nuevo modulo
con el código que ya se está ejecutando.
¿Qué distribución
de Linux es la apropiada?
En el mercado existe un número
de distribuciones comerciales de Linux, que si bien son diferentes, básicamente
son:
-
un kernel determinado de linux
-
un conjunto de utilidades.
Estas utilidades suelen ser las mismas,
pudiendo diferenciarse segun la distribución aquellas para facilitar
la instalación y otras orientadas a mejorar las GUIs. Entre las
más famosas se encuentran
A continuación se muestran otras
ditribuciones orientadas a sistemas empotrados:
-
ETLinux:
Distribución completa diseñada para correr en pequeños
sistemas industriales.
-
LEM:
Distribución para maquinas basadas en Intel 386 con menos de 8 Mb
de RAM.
-
LOAF:
Linux On A Floppy, para máquinas basadas en Intel 386.
-
uClinux:
Linux para sistemas sin MMU.
Para mas informacion, puede consultarse
el articulo [RICK2000].