| Artículos | 01 SEP 2009

Singularity

Tags: Histórico
Sistema operativo de investigación de Microsoft
Bajo este curioso nombre se esconde un proyecto de investigación del gigante norteamericano del software, cuyo objetivo es la creación de un sencillo sistema operativo en el que implementar algunas innovaciones en el campo del desarrollo de sistemas operativos sin encontrarse atados por las necesidades de retro compatibilidad y rendimiento a las que están sujetos los equipos de desarrollo de Microsoft que se encargan de hacer evolucionar a Windows.

De hecho, se trata de un sistema operativo tan simple que la imagen ISO del mismo ocupa poco más de 5 MB. Como pueden imaginarse, en tan pequeño espacio no es posible implementar una interfaz gráfica de usuario que soporte multitud de configuraciones hardware, por lo que una vez que arrancamos Singularity nos encontramos con una interfaz de usuario de texto que a algunos les recordará la época del viejo MS-DOS.
Una ventaja que puede tener Singularity para muchos usuarios es que Microsoft proporciona todo el código fuente del sistema operativo, tanto el del kernel del sistema como el de las partes de modo usuario, por lo que cualquier programador que desee modificarlo o implementar nuevas características tendrá a su disposición toda la información necesaria para hacerlo.

Instalación del sistema
A diferencia de lo que sucede con las distribuciones de cualquier versión de Windows, Singularity se entrega en formato de código fuente, por lo que el usuario deberá compilarlo para poder obtener una versión binaria que pueda ejecutarse o bien en un sistema físico o bien dentro de una máquina virtual. Ya que una gran parte de este sistema operativo está desarrollada usando C#, será necesario tener instalada al menos la versión 1.1 de la librería CLR (Common Language Runtime).
Para las tareas de depuración Singularity soporta el uso del depurador WinDbg de Microsoft, por lo que si el usuario va a efectuar algún desarrollo serio o a modificar el código fuente de Singularity deberá obtener la última versión de las herramientas de depuración de Microsoft.
El primer paso del proceso de instalación del sistema consiste en obtener una versión ejecutable de Singularity. Para ello deberemos ejecutar el script denominado configure.cmd, el cual reside en el directorio en que hayamos instalado las herramientas y documentación de este sistema operativo. Comentar que los usuarios de Windows Vista deberán ejecutar dicho script como administrador, ya que si no es así no será capaz de crear en el escritorio de Windows el acceso directo que abre la línea de comandos desde la que podremos proceder a compilar una versión ejecutable de Singularity.
Una vez concluida la ejecución del script dispondremos en el escritorio de un acceso directo denominado Singularity RDK 1.1. Al hacer doble clic sobre este acceso directo se abre una ventana de modo texto, la cual tendrá configurado el entorno de compilación necesario para crear una versión binaria del sistema operativo. Para realizar la compilación deberemos teclear msb Distro\Tiny.proj. Una vez hecho esto se inicia un proceso de compilación y enlazado que acaba por generar una imagen ISO que podremos grabar en un CD-ROM o desde la cual arrancar directamente una máquina virtual de Virtual PC. El proceso de compilación y enlazado no es corto, habiendo consumido alrededor de unos cinco minutos en un equipo basado en un procesador Core 2 Duo a 2 GHz equipado con 2 GB de RAM y funcionando bajo Windows Vista. Se aprecia además que este proceso realiza un consumo intensivo de CPU, ya que durante el mismo se aprecia casi constantemente un consumo de alrededor del 70 por ciento del tiempo del procesador del sistema.
La compilación de Singularity implica la compilación de una importante cantidad de código fuente escrito en C#, pero también es necesaria la compilación de porciones escritas en C++ y ensamblador de x86, tanto de 16 como de 32 bits. Hay que tener en cuenta que aunque casi todo el sistema está escrito en C#, es necesario que el arranque del sistema se realice mediante código nativo de x86 de 16 bits, ya que el arranque de cualquier sistema operativo en un compatible PC se realiza con el microprocesador en modo real, es decir, ejecutando código x86 de 16 bits. Posteriormente, este código de arranque de 16 bits será el encargado de pasar el procesador a modo protegido de 32 bits. El estudio de esta parte del código fuente de Singularity será interesante para cualquier programador que quiera comprender cómo hacer un cargador para un sistema operativo que inicialmente arranque con el procesador en modo real y pase posteriormente a modo protegido.
Al concluirse el proceso de compilación y enlazado dispondremos de una imagen ISO en la carpeta Distros con la que podremos instalar Singularity en hardware real o en un sistema virtual. En nuestro caso no tuvimos éxito intentado hacer correr este sistema operativo bajo VMware, por lo que lo intentamos en una máquina física basada en un procesador Pentium 4 (lo que le convierte en apto para ejecutarse tanto en PC portátiles ultraligeros como en netbooks), equipo en el que Singularity arrancó sin problema alguno desde el CD-ROM en que habíamos grabado la imagen ISO resultante del proceso de compilación.

Proceso de arranque
Este proceso se inicia cargando el sector de arranque desde un CD-ROM de arranque, el cual se encargará a su vez de cargar en el PC el código del cargador de 16 bits que mandará cargar el resto del código del sistema operativo. Este cargador de 16 bits también puede realizarse a través de una red local, usando los protocolos PXE. El cargador de 16 bits lo primero que hace es cargar el archivo de secuencia de arranque y lo examina para averiguar los nombres de los archivos que forman parte de la imagen del sistema que debe cargarse (este archivo de secuencia de arranque se denomina Singboot.ini). El primer archivo que debe especificarse en el archivo de secuencia de arranque es la imagen del minidump de Singularity. Una vez cargados todos los archivos indicados en Singboot.ini se procede a obtener información sobre la configuración del equipo, la cual se almacena en un bloque de memoria de tipo bootinfo. A continuación desactiva las interrupciones del hardware, activa la MMU del microprocesador y transfiere la ejecución al código del cargador de 32 bits. Dicho cargador recibe como parámetro un puntero al bloque de memoria de tipo bootinfo en el que el cargador de 16 bits ha almacenado la configuración.
Posteriormente el cargador de 32 bits copia los diversos componentes del minidump a las direcciones virtuales que éste indique. Una vez hecho esto se pasa el control al primer hilo especificado en el minidump. Este primer hilo debe apuntar al punto de entrada del HAL (Hardware Abstraction Layer) de Singularity.
Una vez que el HAL obtiene el control del equipo, éste inicializa un vector de interrupción mediante el cual ya es posible iniciar procesos de depuración del sistema operativo. A continuación se pasa el control al kernel del sistema operativo. Ahora el kernel se encarga de inicializar la runtime del código desarrollado en C#, realiza un análisis del hardware del equipo para detectar los dispositivos físicos presentes en el mismo e inicia la ejecución de los primeros controladores de dispositivo. Una vez hecho esto se inicia el proceso en el que se ejecuta el shell de Singularity. El shell de este sistema operativo es una sencilla línea de comandos que incluye una serie de programas ya compilados y enlazados.

Objetivos

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información