Mostrando entradas con la etiqueta SSOO. Mostrar todas las entradas
Mostrando entradas con la etiqueta SSOO. Mostrar todas las entradas

domingo, septiembre 23, 2018

Bootstrapping o la simplificación de la complejidad

Cuando estás en la universidad te enseñan a diseñar sistemas desde cero. Diseñar un microprocesador por medio de dopaciones. Diseñar una PLA con su juego de instrucciones usando puertas lógicas. Diseñar un lenguaje de programación usando autómatas en forma de reconocedores léxicos y sintácticos. Diseñar una red utilizando conexiones y protocolos de red de todo tipo. Diseñar un sistema operativo desde cero añadiendo la gestión de procesos, la gestión de memoria, la gestión de los recursos. 

Figura 1: Bootstrapping o la simplificación de la complejidad

Recuerdo todas esas enseñanzas con mucho cariño. Recuerdo las estrategias algorítmicas para resolución de diversos problemas. Cuando utilizar Dijsktra. Cuando usar una estrategia de Back-tracking, cuando un Divide and Conquer o una solución basada en una recta de barrido. Me ayudaron a tener herramientas en mi caja de destornilladores y martillos para saber que podía probar cosas distintas en cada problema.

De muchas de ellas os he hablado a lo largo de los muchos artículos que le he dedicado a mi relación con la universidad, pero hoy os quiero hablar de una que me ayuda día a día en mi trabajo y que aprendí en la clase de Sistemas Operativos. Se llama Bootstrap o Bootstrapping

Figura 2: Definiciones de Bootstrap

Cuando estudiaba en la universidad cómo se construye un sistema operativo desde cero la pregunta es.. ¿cómo construyo software para un sistema que aún no existe porque está siendo construido? ¿Cómo hago una herramienta de gestión de ficheros gráfico para un sistema operativo que aún no existe? Pues no hay magia. Se trata de hacer Bootstrap, una forma de simplificar la explicación de lo complejo que es sustituir un sistema operativo que funciona por otro.

Si tienes que construir un sistema operativo completo deberás comenzar a hacer un programa que sea capaz de gestionar la memoria, los procesos y la entrada salida. Una vez que tienes los elementos de la gestión mínima, ya puedes comenzar a construir las herramientas mínimas para construir software en él. Construirte tu gestión de ficheros y tu primer compilador. Y una vez que tengas tu compilador ya puedes construir software usando el propio sistema operativo que te estas creando.

No hay magia, solo trabajo y orden. Programar lo mínimo y necesario para que puedas construir software con el sistema operativo que estás desarrollando y completarlo. Es ta sencillo y evidente. Es tan de cómo debe ser todo lo que debe crecer. Construir el círculo virtuoso de éxito de un sistema operativo haciendo varias fases de trabajo en las que priorizas en cada una de ellas lo mínimo que necesitas para que la segunda ola se aproveche de lo construido en la primera versión. En la primera ola de trabajo.

Esta es la estrategia que se debe seguir en cualquier nuevo proyecto que se quiera lanzar en una empresa. Hacer una estrategia de Bootstrapping, poniendo los recursos iniciales necesarios para cumplir con los objetivos de la primera versión, y que estos sirvan para alimentar la segunda versión del proyecto/producto para acelerar su crecimiento.

Yo usé esa estrategia cuando me puse a trabajar con ElevenPaths. No quise muchos más recursos que los que pude manejar. No quise hacer más de lo que pudiera hacer bien y que me pudiera servir para la siguiente evolución. Hice Bootstrapping con ese proyecto.

Trabajar de esa forma te ayuda a priorizar muy mucho. A diferenciar siempre entre qué es lo más importante y necesario y qué es lo que es accesorio en esta fase. Qué es lo que debo tener y qué es lo que es "Nice to have". Algo que una y otra vez comparto con mis compañeros a la hora de hacer el roadmap de los proyectos y decidir en qué invertimos nuestros recursos. Tengo mi regla de las tres "P" repetida una y otra vez con ellos.

Desde luego, construir un sistema operativo completo es complejo. Son muchos los detalles, y herramientas que tiene tu viejo sistema operativo desde el que estás programando el core del nuevo sistema operativo que siempre van a pesar en contra en una posible comparación. Por eso se debe lidiar entre hacer unas cosas con el viejo sistema operativo donde aún puedes programar cosas para el nuevo, y entre hacer cosas desde el nuevo sistema operativo aprovechando las ventajas que tenga el nuevo sistema operativo que has diseñado.  Hay que balancear la transición. Nunca hay que olvidar esto.

Estas enseñanzas las tengo siempre dentro de mí cuando hago algo, y las he usado años después cuando tuve que diseñar la estrategia de la margarita en la 4ª Plataforma para implantar la visión Data-Centric en Telefónica. No se puede cambiar de un día para otro la forma en la que se gestionan los datos y se desarrollan las aplicaciones. Hay que hacer Bootstrapping. Hay que ver cómo se pueden ir diseñando las funciones mínimas del nuevo "sistema operativo" para ir desarrollando las primeras herramientas y poder ir migrando.

Figura 3: La estrategia de la margarita para hacer Bootstrapping con los datos

Cuando diseñas un nuevo proyecto para una empresa que lleva años funcionando no puedes pensar que vas a tener un folio en blanco para ti. Siempre va a haber algo que ya está funcionando y que hay que modificar, cambiar o reemplazar sin que deje de dar servicio. Hay que ver cómo haces el cambio teniendo en cuenta que lo que estás haciendo siempre va a ser más pequeño y sin todas las herramientas que probablemente haya ya en el viejo sistema operativo. No va a ser fácil. Y no lo hagas.

Pensar en hacer un proyecto desde cero siempre es fácil si estás en una página en blanco y no hay nada ya. Pero si estás en una empresa con vida, pasado, clientes y servicios, vas a tener que aprender a hacer Bootstrapping constantemente. A ver qué es lo importante al principio y ver cómo vas decidiendo qué haces en cada sistema operativo (el viejo y el nuevo) hasta que acabe implantado el nuevo sistema operativo por las ventajas que ofrece.

Saludos Malignos!

viernes, julio 15, 2011

Barrelfish: Un Sistema Operativo de Microsoft para múltiples cores heterogéneos

A veces tengo la sensación de que las cosas pasan delante de mis ojos pero no las veo. El mundo avanza, y yo me peleo por seguir enterándome qué está pasando, y cuando creo que entiendo los movimientos tecnológicos, resulta que aparecen nuevas cosas, que llevan trabajándose durante años, y de repente cobran forma.

En el mundo de los sistemas operativos, mientras siguen predominando los Windows, se habla de Windows 8 por todas partes, Apple tiene a punto de caramelo a Mac OS X Lion y siguen utilizándose las múltiples distribuciones de Linux, tenemos otras alternativas que cubren otros huecos.

No hablo de los sistemas de teléfonos móviles como iOS, Windows Phone, Android o Symbian, ni de las alternativas en los sistemas operativos en la web, sino de otros que buscan cubrir algunos entornos más peculiares, y que empujan la investigación.

Me encantó descubrir ReactOS, que hoy en día nos da ya bastante juego en el mundo de la seguridad, o el proyecto del sistema operativo TORO, escrito en Pascal, y centrándonos en Microsoft, la idea de Syngularity también es bastante llamativa, al hacerlo con código manejado.

El otro día me sorprendió el anuncio de la liberación de otro sistema operativo creado en un proyecto de investigación de Microsoft Research, llamado BarrelFish, con un objetivo bastante concreto. Que se ejecute sobre sistemas multicore con hardware heterogéneo.

Tal vez al principio pueda parecer algo extraño la primera vez que se oye por pensar que pueda existir un sistema multicore que funcione con diferentes microprocesadores, pero desde hace bastante tiempo esto sucede con las tarjetas gráficas, por ejemplo, y la CPU principal. Sin embargo, en esos casos el funcionamiento es totalmente independiente y se conforman con un interfaz de comunicación entre ellos, sin haber una gestión coordinada de tareas, como se describe en la siguiente imagen:


Figura 1: Arquitectura SO multicore heterogéneo

Pensando en un futuro más cercano, en el que los equipos informáticos pueden estar formados por un Tablet que se enganché a un equipo más potente, como si fuera una dock station, puede hacer más que necesaria una integración mucho mayor a nivel del sistema operativo.

Además, viendo la patente que ha pedido Microsoft para tener teléfonos móviles con partes independientes que se conectan y desconectan, pero funcionan coordinados, hacen ver que en el futuro los sistemas operativos se verán obligados a funcionar con múltiples cores, y que estos se agreguen y se quiten dinámicamente.

Detrás de Barrelfish se encuentra el Grupo de Sistemas del centro ETH de Zurich, y han puesto disponible el código fuente y la documentación del mismo, junto con un paper que describe toda la arquitectura y otro con las pruebas de benchmarking realizadas con él, comparándolos con otros sistemas operativos multicore como HeliOS o Corey, para los más entendidos en hardware.

En la actualidad el sistema operativo funciona con microprocesadores x86-64 y ARM, o directamente con sistemas que utilizan multiprocesadores multicore con distintos roles en cada core, como son el micro de 48 cores de Intel (single-chip cloud computer) y Beehive del MIT o equipos con múltiples chips construidos con arquitecturas FPGA. Me encantan estos proyectos de investigación en tecnología.

Saludos Malignos!

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares