miércoles, 9 de mayo de 2012

Sistemas Operativos Integrados

Para conocer un poco más sobre el funcionamiento de los Embedded Operating Systems, me di a la tarea de investigar sobre ellos, y buscar algunos ejemplos interesantes para poder vincularlos a sus aplicaciones. 


En este post se hablará sobre los sistemas operativos integrados, que son, como funcionan, y algunos ejemplos de ellos.


Sistema Operativo Integrado

Un sistema operativo integrado es un sistema operativo para sistemas integrados de computadora. Estos sistemas están diseñados para ser compactos, eficientes, y confiables, olvidando muchas funciones que los sistemas operativos no integrados proporcionan, ya que no serán usadas por las aplicaciones especializadas que corren. Son también frecuentemente llamados sistemas operativos de tiempo real(Real Time Operating System).
Una diferencia importante entre los sistemas operativos integrados y los de escritorio es que la aplicación, incluyendo el sistema operativo, esta usualmente vinculada estáticamente junto a una sola imagen ejecutable.
También, al contrario de los sistemas operativos de escritorio, los sistemas operativos integrados no cargan y ejecutan aplicaciones. Esto significa que el sistema solo puede correr una sola aplicación.

Entonces, un sistema operativo integrado realiza un propósito muy específico a la exclusión de otras funciones. Estos sistemas son encontrados típicamente en equipo independiente como las máquinas ATM o sistemas de navegación. Un sistema operativo integrado normalmente corre una pieza específica de programación, como el sistema de dirección de un cohete y nada más.
Un sistema operativo integrado la mayoría de veces es una parte de un sistema integrado más grande. Estos sistemas son de propósito reducido y función fija. Este tipo de sistemas se centra en chips microcontroladores. Estos chips funcionan como una pequeña computadora, tomando información, procesandola y entonces produciendo una salida de información. A diferencia de una computadora normal, un típico microcontrolador solo puede hacer una sola cosa. 

Generalmente, para que un sistema integrado pueda garantizar un sistema operativo necesita por lo menos una de dos cosas: complejidad o interactividad. Un sistema complejo necesita tomar información de diferentes fuentes, realizar múltiples operaciones o producir diferentes salidas de información basado en la situación. En esencia debe de poder realizar múltiples tareas.


El otro requerimiento común es la interactividad. Si un usuario tiene que interactuar con la operación, especialmente si la operación depende de tiempo, usualmente tendrá un sistema operativo integrado. Ya que el controlador estándar simplemente toma y envía datos, cualquier momento que un usuario necesita interactuar con la información un sistema mas complejo es necesario.

Algunos Sistemas Operativos Integrados

  • Embedded Linux
Embedded Linux es el uso de Linux en sistemas integrados, como teléfonos celulares, PDAs, reproductores mp3, y otros dispositivos de consumidor, equipo de redes, control de maquinara, automatización industrial, equipo de navegación e instrumentos médicos.
El sistema operativo con Embedded Linux más conocido, es probablemente Android.
Las ventajas de Embedded Linux sobre otros sistemas operativos integrados incluyen que existen múltiples proveedores de software, desarrollo y soporte; no hay cargos por licencias, cuenta con un kernel estable, y su habilidad de leer, modificar y redistribuir el código fuente. 

Las desventajas incluyen una huella de memoria comparativamente grande(el kernel y el sistema de archivos root), la obligación de GPL para compartir las modificaciones, complejidades del acceso a memoria del modo usuario y el modo kernel, y el complejo framework de drivers de dispositivos.

  • Windows CE
Microsoft Windows CE, conocido también como WIndows Embedded Compact o Windows Embedded CE,  es un sistema operativo desarrollado por Microsoft para sistemas integrados. WIndows CE es un kernel y sistema operativo distinto, en vez de una versión ligera del Windows de escritorio. La versón actual de WIndows Embedded Compact soporta Intel x86 y es compatible con procesadores MIPS y ARM.
Windows CE esta optimizado para dispositivos que tienen almacenamiento escaso. Un kernel de Windows CE puede correr en un megabyte de memoria. Los dispositivos son frecuentemente configurados sin un almacenamiento de disco, y pueden ser configurados como sistemas cerrados que no permiten extensiones de los usuarios. 

Muchas plataformas han estado basadas en el núcleo de Windows CE, incluyendo el AutoPC, PocketPC 2002, Windows Mobile 2003, Windows Mobile 203 SE, Windows Mobile 5.0, Windows Mobile 6, Zune, Windows Phone
y demás.

Una característica distintiva de Windows CE comparandolo con otros stemas operativos es que una gran parte de Windows CE esta disponible en forma de código fuente. Primero, el código fuente fue ofrecido a diversos vendedores, para que pudieran ajustarlo a su hardware. Sin embargo, algunos compontentes importantes que no requieren adaptación a específicos ambientes de hardware siguen siendo distribuidos en forma binaria solamente.

  • VxWorks
VxWorks es un sistema operativo de tiempo real que puede ser usado en sistemas integrados. VxWorks puede ser personalizado fácilmente y puede correr en la mayorá de los procesadores diseñados para la computación distribuida.

VxWorks es usada para control de redes y dispositivos de comunicación, pruebas y equipo de medición, periféricos de computadora, sistemas automotivos, aviónicos, equipo y productos de consumo diverso. El sistema operativo incluye un kernel para multitasking preventivo, respuesta a interruptores, comunicación de interprocesos y sistema afiliado.

  • μClinux 
μClinux era una bifurcación del kernel de Linux para microcontroladores(en sistemas integrados) sin unidad de manejo de memora(MMU). 

La diferencia principal entre μClinux y otros sistemas Linux es la falta de manejo de memoria. En Linux, el manejo de memora es logrado mediante el uso de memoria virtual. μClinux fue creado para sistemas que no soportan memoria virtual. Entonces, es normal escuchar el término NOMMU cuando se habla de μClinux.

Sin la memoria virtual, cada proceso debe estar localizado en un lugar en memoria donde pueda ser ejecutado. En el caso más simple, esta área de memoria debe ser contigua. Generalmente no puede ser expandida debido a qu epuede haber otros procesos encima. Esto snigifca que un proceso en μClinux no puede incrementar el tmaaño de su memoria disponible mientras esta corriendo, algo que un proceso tradicional de LInux podría hacer.

Sin la memoria virtual, swawp es efectivamente imposible, aunque esta limitación es raramente un problema en los sistemas que corren μClinux, ya que por lo general no cuentan con suficiente memoria para hacer que el swap valga la pena. 

Ports:
    • DSLinux:
DS Linux es un port del sistema operativo Linux para el Nintendo DS. DSLinux corre una versión modificada de μClinux. Esta basada en uCLinux 2.6.14. Solo corre en modo de texto y nano-x que es mostrado usando un driver de consola personalizado. Un teclado es mostrado en la pantalla touch del Nintendo DS para permitir la entrada de información.
DSLinux es compilado usando un compilador cruzado basado en GCC para procesadores ARM. DSLinux es en teória capaz de correr cualquier aplicación que tenga una interfaz de usuario basada en framebuffer.
Con la excepción del micrófono(que funciona, pero el driver esta incompleto), todo el hardware dentro del Nintendo DS incluyendo el adaptador inalámbrico esta soportado por DSLinux. El firmware del Nintendo DS puede ser leido desde /dev/firmware, pero el soporte para escritura dejado fuera por motivos de seguridad.
DSLinux soporta guardar archivos en una variedad de dispositivos de hardware agregados, ninguno de los cuales es oficialmente aprobado por Nintendo. DSLinux puede almacenar arhivos en la memoria SRAM encontrada en los Flash Carts del Game Boy Advance y en tarjetas CompactFlash y SD.
El Nintendo DS no tiene unidad de manejo de memoria, y solo tiene 4 MB(o 16MB en versiones más actuales) de RAM pero todas las unidades están limitadas por el viejo procesador ARM 7 y ARM9 do que corren. 
    • PSXLinux
PSXLinux también conocido como Runix, es un kernel de Linux y un kit de desarrollo para el PlayStation. PSXLinux está basado en el kernel 
μClinux 2.4.x, y contiene soporte específico para el Sony Playstation.
Debido a que el PlayStation no ofrece manera para que un usuario ejecute su propio código, se debe hacer una solución para poder ejecutar Runix en hardware PlayStation. Existen dos métodos principales: ejecución mediante un dispositivo de terceros conectado al puerto paralelo de la consola, o mediante un CD especialmente diseñado que contenga los datos ejecutables, los cuales no se ejecutarían normalmente en una consola.
    • iPodLinux
iPodLiinux es una distribución de Linux basada en μClinux diseñada especialmente para correr en el iPod de Apple. Cuando el kernel de iPodLinux es booteado, toma el lugar del sistema operativo del iPod y automáticamente carga Podzilla, una interfaz alternativa y el lanzador de un número de adicionales programas incluidos como reproductor de video, visor de imágenes, línea de comandos, juegos, emuladores para video juegos, demos de programación, y otros software experimentales.
iPodLinux es en esencia un kernel de Linux construido desde código de 
µClinux usando la librería estándar uClibc con el código de drivers para los componentes del iPod. 
Además del kernel, iPodLinux cuenta con aplicaciones podzilla y podzilla2 como componentes primarios, que proveen lo siguiente:
    • Interfaz de usuario similar a la de iPod.
    • Playback de Video con sonido.
    • Soporte para playback de AAC, MP3 Y OGG básico.
    • Variedad de juegos, incluyendo TuxCHess, Bluecube, Chopper, StepMania.
    • Grabación de sonido mediante el conector de audio(con una mayor calidad que el original de Apple)-
    • Habilidad para jugar los juegos Doom y Doom II
    • Soporte para esquema de colores
    • Habilidad para correr muchos emuladores como: iBoy, iNES, iDarcNES, iMame, iGPSP.

  • RTLinux
RTLinux es un sistema operativo de tiempo real que ejecuta Linux como un thread (hilo de ejecución) de menos prioridad que las tareas de tiempo real. Con este diseño, las tareas de tiempo real y los manejadores de interrupciones nunca se ven retrasados por operaciones que no son de tiempo real.
La primera versión de RTLinux estaba diseñada para ejecutarse en la plataforma x86 y proporcionaba una pequeña API y un pequeño entorno de programación. La versión 2, que fue totalmente reescrita, fue diseñada para el soporte de multiprocesamiento simétrico (SMP) y para ser ejecutada en una amplia variedad de arquitecturas.


RTLinux proporciona la capacidad de ejecutar tareas de tiempo real y manejadores de interrupciones en la misma máquina que el Linux estándar. Estas tareas y los manejadores ejecutan cuando se necesitan en detrimento de lo que estuviera ejecutando Linux. El peor caso de tiempo es entre que se detecta la interrupción hardware y el procesador ejecuta la primera instrucción del manejador de la interrupción. Este tiempo es del orden de los 10 microsegundos en la plataforma x86.


Referencias:

1 comentario: