Sistemas Operativos, un debate interesante

 El 22 de enero de 1992 tuvo lugar un debate en el grupo de discusión de Usenet: comp.os.minix entre Andrew S. Tanenbaum y Linus Torvalds acerca de las arquitecturas de micronúcleo y monolíticas en los sistemas operativos. El debate fue acalorado y giró en torno a las decisiones de diseño empleadas en MINIX y Linux.

MINIX, sistema operativo desarrollado por el profesor Tanenbaum como herramienta didáctica para sus estudiantes, utilizaba la arquitectura de micronúcleo que se consideraba en ese momento como la forma correcta de hacer un sistema operativo. En ese momento MINIX no era gratuito.

Linux, sistema operativo desarrollado por Linus Torvalds comenzó en parte como un hobby para explorar las capacidades del procesador i386. Diseñado con una arquitectura de núcleo monolítico fue distribuido libremente.

Este debate da una panorámica de la situación existente en el año 1992 y nos demuestra lo impredecible que es el desarrollo, al poder analizarlo 28 años después.

Para poner el debate en perspectiva, debemos decir que en ese momento Microsoft era una pequeña compañía vendiendo DOS. Yahoo!, Google y las redes sociales no existían. La casi totalidad del software existente era cerrado y privativo, propiedad intelectual de corporaciones y empresas. Existía una enorme necesidad por un núcleo libre, de código abierto y de buen rendimiento.

El movimiento del software libre tomaba fuerzas a través de la Free Software Foundation y su proyecto GNU, aunque carecían de un núcleo para ejecutar las herramientas desarrolladas, un lugar que rápidamente llenó Linux.

El debate explora muchos aspectos interesantes en el diseño e implementación de los sistemas operativos y los dispositivos físicos en que estos se ejecutan. Se tocan aspectos como la portabilidad, diseño del núcleo, soporte de multitarea, costos del hardware, software libre, el estándar POSIX, entre otros. Cada uno de esos aspectos son amplios campos de investigación y serán ampliados en entradas posteriores.

¿Qué es un sistema operativo?

Los sistemas operativos son programas de computadora que gestionan los recursos de hardware y brindan servicios a los programas de aplicación, ejecutándose en modo privilegiado con respecto a los demás. Realizan dos funciones fundamentales:

  • Administrador de recursos, entendiendo “recursos” como los componentes tanto físicos como lógicos de una computadora. Garantizando que funcionen correctamente y en el orden adecuado.
  • Capa de abstracción del hardware, mostrando al programador una computadora simplificada que es más fácil de entender y programar que la real.

Modos de ejecución de un CPU

Las computadoras son capaces de ejecutar múltiples programas y manejar diferentes dispositivos de entrada/salida a la misma vez, lo que hace necesario un mecanismo para garantizar que los procesos no interfieran entre sí. Con este objetivo, los fabricantes de hardware ofrecen procesadores con al menos dos modos de funcionamiento: modo usuario (siendo los programas los usuarios) y modo privilegiado, en el que se ejecuta el sistema operativo.

La diferencia entre los modos de funcionamiento del CPU radica en el conjunto de instruccciones que se pueden ejecutar en cada uno, siendo el modo usuario un subconjunto restringido de las posibles.

Cuando un programa de usuario necesita realizar una operación privilegiada, ejecuta una llamada al sistema, que pasa el control del procesador al sistema operativo en modo privilegiado, una vez terminada, este cede el control restableciendo el CPU a modo usuario.

La parte del sistema operativo que se ejecuta en modo privilegiado se denomina núcleo (kernel).

Micronúcleo vs. Monolítico

En un sistema monolítico todo el sistema operativo se ejecuta en modo núcleo, gestionando procesos, memoria, entrada/salida, sistema de ficheros, entre otros. Uno de los principales representates de esta arquitectura es UNIX (en el momento de la discusión).

Sus principales ventajas radican en una mayor facilidad de programación y un mejor rendimiento. Aunque dicho en pocas palabras son ventajas cruciales.

Este núcleo está programado de forma no modular y puede tener un tamaño considerable. A su vez, cada vez que se añada una nueva funcionalidad, deberá ser recompilado en su totalidad y luego reiniciado. Todos los componentes funcionales del núcleo tienen acceso a todas sus estructuras de datos internas y a sus rutinas. Por ende, un error en una rutina podría propagarse a todo el sistema.

En las arquitecturas micronúcleo la mayor parte del sistema operativo corre en procesos separados fuera del núcleo, comunicándose a través de mensajes. El trabajo de este núcleo reducido es gestionar el paso de mensajes, interrupciones, gestión de procesos de bajo nivel y tal vez la entrada/salida. El resto de los servicios se ejecutan en programas servidores en espacio de usuario. Representante de este grupo es MINIX. Inicialmente Windows/NT fue concebido como micronúcleo, pero su implementación es considerada híbrida, un núcleo monolítico estructurado al estilo micronúcleo.

Las principales ventajas de su utilización son la reducción de la complejidad, la descentralización de los fallos (un fallo en una parte del sistema no se propagaría al sistema entero) y la facilidad para crear y depurar controladores de dispositivos. Según los defensores de esta tendencia, esto mejora la tolerancia a fallos y eleva la portabilidad entre plataformas de hardware.

Por otro lado, sus principales dificultades son la complejidad en la sincronización de todos los módulos que componen el micronúcleo y su acceso a la memoria, la anulación de las ventajas de Zero Copy y la integración con las aplicaciones. Además, los procesadores y arquitecturas modernas de hardware están optimizadas para sistemas de núcleo que pueden mapear toda la memoria. Sus detractores le achacan también y fundamentalmente, mayor complejidad en el código, menor rendimiento y limitaciones en diversas funciones.

En la actualidad se utilizan enfoques híbridos, que mezclan ambos conceptos, tratando de adoptar los elementos positivos del otro.

Ambos sistemas fueron diseñados con objetivos diferentes. MINIX, pensado como una herramienta didáctica, implementaba los aportes realizados por la academia en la investigación en sistemas operativos, siendo lo suficientemente pequeño para ser entendido por los estudiantes.

Linux, diseñado con el objetivo de simplicidad y rendimiento, implementaba nativamente la multitarea, lo que finalmente lo convirtió en una excelente herramienta.

En uno de los intercambios el profesor Tanenbaum dice que de ser Torvalds su estudiante, lo calificaría con una baja nota por el diseño planteado, sin embargo, hoy día millones de computadoras personales, teléfonos móviles, servidores, supercomputadoras, utilizan el núcleo Linux.

En varios momentos se les ha preguntado a ambos si guardan algún sentimiento negativo por el otro, lo que ha sido negado por ambos. Sus puntos de vista se originan en sus respectivas necesidades y objetivos. Tanenbaum un académico y Torvalds un desarrollador que necesitaba simplicidad y rendimiento.

El debate completo está disponible aquí.

Comentarios