Articulo de referencia

Minix 3

Minix 3 es un pequeño sistema operativo tipo Unix publicado bajo una licencia BSD-3-Clause [ a ] , y es un proyecto sucesor de las versiones anteriores, Minix 1.x y 2.0. [ 1 ] E...

Minix 3 es un pequeño sistema operativo tipo Unix publicado bajo una licencia BSD-3-Clause [ a ] , y es un proyecto sucesor de las versiones anteriores, Minix 1.x y 2.0. [ 1 ]

El objetivo principal del proyecto es que el sistema sea tolerante a fallos, detectando y reparando sus fallos sobre la marcha, sin intervención del usuario. Se prevé que los principales usos del sistema sean los sistemas embebidos y la educación. [ 2 ]

A partir de 2017Minix 3 admite procesadores con arquitectura IA-32 y ARM . [ 3 ] También puede ejecutarse en emuladores o máquinas virtuales , como Bochs , [ 4 ] [ 5 ] VMware Workstation , [ 6 ] Microsoft Virtual PC , [ 7 ] Oracle VirtualBox , [ 8 ] y QEMU . Se está desarrollando una versión para la arquitectura PowerPC . [ 9 ] La distribución viene en un CD de arranque y no admite la instalación desde USB de arranque . [ 10 ] El proyecto ha estado inactivo desde finales de 2018, [ 11 ] y la última versión es la 3.4.0 rc6 de 2017, [ 12 ] aunque el grupo de discusión de Minix 3 sigue activo. [ 13 ]

Minix 3 es el sistema operativo Intel Management Engine (ME) que se encuentra en el Intel Platform Controller Hub , a partir de la introducción de ME 11, que se utiliza con los procesadores Skylake y Kaby Lake . [ 14 ] [ 15 ] Se debatió que Minix podría haber sido el sistema operativo más utilizado en procesadores x86 / AMD64 , con más instalaciones que Microsoft Windows, Linux o macOS , debido a su uso en Intel ME. [ 16 ]

Objetivos del proyecto

Estructura de los sistemas operativos monolíticos basados ​​en núcleos y micronúcleos , respectivamente.

Reflexionando sobre la naturaleza de los sistemas monolíticos basados ​​en núcleos, donde un controlador (que tiene, según el creador de Minix, Tanenbaum , aproximadamente de 3 a 7 veces más errores que un programa común) [ 17 ] puede provocar la caída de todo el sistema, [ 18 ] Minix 3 tiene como objetivo crear un sistema operativo que sea un "clon de Unix confiable, autorreparable y multiservidor". [ 19 ]

Para lograrlo, el código que se ejecuta en el núcleo debe ser mínimo, con el servidor de archivos, el servidor de procesos y cada controlador de dispositivo ejecutándose como procesos independientes en modo usuario. Cada controlador es supervisado minuciosamente por una parte del sistema denominada servidor de reinvención . Si un controlador no responde a las solicitudes de este servidor, se desactiva y se reemplaza por una copia nueva.

En un sistema monolítico, un error en un controlador puede fácilmente provocar el fallo de todo el núcleo. Esto es mucho menos probable que ocurra en Minix 3. [ 20 ]

Historia

Minix 3 fue presentado públicamente el 24 de octubre de 2005 por Andrew Tanenbaum durante su discurso de apertura en el simposio de la Association for Computing Machinery (ACM) sobre principios de sistemas operativos. Si bien aún sirve como ejemplo para la tercera edición del libro de texto de Tanenbaum y Woodhull (2006) , ha sido completamente rediseñado para ser "utilizable como un sistema serio en computadoras con recursos limitados y sistemas embebidos, así como para aplicaciones que requieren alta confiabilidad".

Inicialmente publicado bajo la misma licencia BSD-3-Clause bajo la cual Minix estaba licenciado desde 2000, [ 23 ] [ 24 ] a finales de 2005, el propietario de los derechos de autor cambió y se agregó una cuarta cláusula. [ 1 ] [ 25 ] [ 28 ]

Políticas de confiabilidad

Uno de los objetivos principales de Minix 3 es la fiabilidad. A continuación, se detallan algunos de los principios más importantes que mejoran su fiabilidad.

Reducir el tamaño del kernel

Los sistemas operativos monolíticos como Linux y FreeBSD , y los híbridos como Windows, tienen millones de líneas de código del núcleo . En cambio, Minix 3 tiene alrededor de 6000 líneas de código ejecutable del núcleo, [ 29 ] lo que puede facilitar la detección de problemas en el código.

Enjaula a los insectos

En los núcleos monolíticos, los controladores de dispositivos residen en el núcleo. Por lo tanto, cuando se instala un nuevo periférico, se inserta código desconocido y no confiable en el núcleo. Una sola línea de código defectuosa en un controlador puede provocar la caída del sistema.

En cambio, en Minix 3, cada controlador de dispositivo es un proceso independiente en modo usuario. Los controladores no pueden ejecutar instrucciones privilegiadas, modificar las tablas de páginas , realizar operaciones de entrada/salida (E/S) arbitrarias ni escribir en memoria absoluta. Deben realizar llamadas al kernel para acceder a estos servicios, y el kernel verifica la autorización de cada llamada.

Limitar el acceso a la memoria de los controladores

En los núcleos monolíticos, un controlador puede escribir en cualquier palabra de memoria y, por lo tanto, corromper accidentalmente los programas de usuario.

En Minix 3, cuando un usuario espera datos del sistema de archivos MINIX , por ejemplo , se crea un descriptor que indica quién tiene acceso y en qué direcciones. Se pasa un índice de este descriptor al sistema de archivos, que a su vez puede pasarlo a un controlador. El sistema de archivos o el controlador solicitan entonces al kernel que escriba a través del descriptor, lo que les impide escribir en direcciones fuera del búfer.

Sobrevive a los malos consejos

Desreferenciar un puntero defectuoso dentro de un controlador provocará el fallo del proceso del controlador, pero no afectará al sistema en su conjunto. El servidor de recuperación reiniciará automáticamente el controlador que falló. Los usuarios no notarán la recuperación en algunos controladores (por ejemplo, disco y red), pero sí en otros (por ejemplo, audio e impresora). En los núcleos monolíticos, desreferenciar un puntero defectuoso en un controlador normalmente provoca un fallo del sistema.

Domar bucles infinitos

Si un controlador entra en un bucle infinito , el planificador reducirá gradualmente su prioridad hasta que quede inactivo. Finalmente, el servidor de reencarnación detectará que no responde a las solicitudes de estado, por lo que lo eliminará y reiniciará. En un núcleo monolítico, un controlador en bucle podría bloquear el sistema.

Limitar los daños causados ​​por desbordamientos de búfer.

Minix 3 utiliza mensajes de longitud fija para la comunicación interna, lo que elimina ciertos desbordamientos de búfer y problemas de gestión de búfer. Además, muchos exploits funcionan sobrescribiendo un búfer para engañar al programa y que regrese de una llamada a función utilizando una dirección de retorno de pila sobrescrita que apunta a memoria controlada por el atacante, generalmente el búfer sobrescrito. En Minix 3, este ataque se mitiga porque el espacio de instrucciones y el espacio de datos están separados y solo se puede ejecutar código en el espacio de instrucciones (de solo lectura), lo que se denomina protección del espacio ejecutable . Sin embargo, los ataques que se basan en ejecutar memoria legítimamente ejecutable de forma maliciosa ( retorno a libc , programación orientada a retorno ) no se evitan con esta mitigación.

Restringir el acceso a las funciones del kernel

Los controladores de dispositivos obtienen servicios del núcleo (como copiar datos a los espacios de direcciones de los usuarios) mediante llamadas al núcleo. El núcleo de Minix 3 tiene un mapa de bits para cada controlador que especifica qué llamadas está autorizado a realizar. En los núcleos monolíticos, cada controlador puede llamar a cualquier función del núcleo, esté o no autorizado.

Restringir el acceso a los puertos de E/S

El núcleo mantiene una tabla que indica a qué puertos de E/S puede acceder cada controlador. Por lo tanto, un controlador solo puede acceder a sus propios puertos de E/S. En núcleos monolíticos, un controlador defectuoso puede acceder a puertos de E/S pertenecientes a otro dispositivo.

Restringir la comunicación con los componentes del sistema operativo.

No todos los controladores y servidores necesitan comunicarse entre sí. Por lo tanto, un mapa de bits por proceso determina a qué destinos puede enviar información cada proceso.

Reencarnar a conductores muertos o enfermos

Un proceso especial, denominado servidor de reencarnación, realiza periódicamente pruebas a cada controlador de dispositivo. Si el controlador falla o no responde correctamente a las pruebas, el servidor de reencarnación lo reemplaza automáticamente por una copia nueva. La detección y el reemplazo de controladores defectuosos son automáticos y no requieren ninguna acción por parte del usuario. Actualmente, esta función no está disponible para controladores de disco, pero en la próxima versión el sistema podrá recuperar incluso los controladores de disco, que estarán almacenados en la memoria RAM. La recuperación de controladores no afecta a los procesos en ejecución.

Integrar interrupciones y mensajes

Cuando se produce una interrupción , esta se convierte a bajo nivel en una notificación que se envía al controlador correspondiente. Si el controlador está esperando un mensaje, recibe la interrupción inmediatamente; de ​​lo contrario, la recibe la próxima vez que intente RECEIVEobtener un mensaje. Este esquema elimina las interrupciones anidadas y simplifica la programación de controladores.

Arquitectura

La arquitectura de Minix 3

Como se puede observar, en el nivel inferior se encuentra el microkernel , que consta de aproximadamente 4000 líneas de código (principalmente en C , además de una pequeña cantidad de lenguaje ensamblador ). Este gestiona las interrupciones , la planificación y el paso de mensajes. También admite una interfaz de programación de aplicaciones (API) con unas 30 llamadas al kernel que los servidores y controladores autorizados pueden realizar. Los programas de usuario no pueden realizar estas llamadas. En su lugar, pueden emitir llamadas al sistema POSIX que envían mensajes a los servidores. Las llamadas al kernel realizan funciones como configurar interrupciones y copiar datos entre espacios de direcciones.

En el siguiente nivel se encuentran los controladores de dispositivos , cada uno ejecutándose como un proceso de espacio de usuario independiente . Cada uno controla algún dispositivo de E/S, como un disco o una impresora. Los controladores no tienen acceso al espacio de puertos de E/S y no pueden emitir instrucciones de E/S directamente. En su lugar, deben realizar llamadas al kernel proporcionando una lista de puertos de E/S en los que escribir y los valores que se van a escribir. Si bien este esquema genera una pequeña sobrecarga (normalmente 500  ns), permite al kernel verificar la autorización, de modo que, por ejemplo, el controlador de audio no pueda escribir en el disco.

En el siguiente nivel se encuentran los servidores . Aquí reside prácticamente toda la funcionalidad del sistema operativo. Los procesos de usuario obtienen acceso a los archivos, por ejemplo, enviando mensajes al servidor de archivos para abrir, cerrar, leer y escribir archivos. A su vez, el servidor de archivos recibe las operaciones de entrada/salida del disco mediante el envío de mensajes al controlador de disco, que controla el disco.

Uno de los servidores clave es el servidor de reencarnación. Su función es consultar periódicamente el estado de todos los demás servidores y controladores. Si un componente no responde correctamente, se cierra o entra en un bucle infinito , el servidor de reencarnación (que es el proceso padre de los controladores y servidores) elimina el componente defectuoso y lo reemplaza por una copia nueva. De esta forma, el sistema se autorrepara automáticamente sin interferir con los programas en ejecución.

Actualmente, el servidor de reencarnación, el servidor de procesos y el microkernel forman parte de la base de computación confiable . Si alguno de ellos falla, el sistema se bloquea. Sin embargo, reducir la base de computación confiable de 3 a 5 millones de líneas de código, como en los sistemas Linux y Windows, a unas 20 000 líneas mejora considerablemente la fiabilidad del sistema.

Diferencias entre Minix 3 y versiones anteriores

Diagrama de las relaciones entre varios sistemas tipo Unix.

Minix 1.0, 1.5 y 2.0 se desarrollaron como herramientas para ayudar a las personas a aprender sobre el diseño de sistemas operativos.

Minix 1.0, lanzado en 1987, constaba de 12 000 líneas de código C y algo de lenguaje ensamblador x86 . El código fuente del núcleo, el gestor de memoria y el sistema de archivos de Minix 1.0 se incluyen en el libro. Tanenbaum desarrolló originalmente Minix para que fuera compatible con los microordenadores IBM PC e IBM PC/AT disponibles en aquel momento.

Minix 1.5, lanzado en 1991, incluía soporte para sistemas MicroChannel IBM PS/2 y también se adaptó a las arquitecturas Motorola 68000 y SPARC , siendo compatible con las plataformas informáticas Atari ST , Commodore Amiga , Apple Macintosh y Sun Microsystems SPARCstation . También estaba disponible una versión de Minix que se ejecutaba como proceso de usuario en SunOS .

Minix 2.0, lanzado en 1997, solo estaba disponible para las arquitecturas x86 y SPARC alojadas en Solaris . Minix-vmd fue creado por dos investigadores de la Universidad Libre de Ámsterdam y añadió memoria virtual y compatibilidad con el sistema X Window (X11).

Minix 3 hace lo mismo y proporciona un sistema operativo moderno con muchas herramientas más recientes y muchas aplicaciones Unix . [ 30 ] El profesor Tanenbaum dijo una vez:

Tenga en cuenta que MINIX 3 no es el MINIX de su abuelo... MINIX 1 fue escrito como una herramienta educativa... MINIX 3 es eso más un punto de partida para construir un sistema operativo altamente confiable, autorreparable y sin software innecesario... MINIX 1 y MINIX 3 están relacionados de la misma manera que Windows 3.1 y Windows XP : tienen el mismo nombre. [ 19 ]

También se han realizado muchas mejoras en la estructura del núcleo desde el lanzamiento de Minix 2, lo que hace que el sistema sea más fiable. [ 31 ]

Minix 3.1.7 ejecutando el sistema X Window (X11) con el entorno de escritorio Equinox (EDE).

Minix versión 3.1.5 se lanzó el 5 de noviembre de 2009. Incluye X11 , Emacs , vi , cc, GCC , Perl , Python , Almquist shell , Bash , Z shell , cliente FTP , cliente SSH , cliente Telnet , Pine y más de 400 programas de utilidad comunes de Unix. Con la incorporación de X11, esta versión marca la transición de un sistema exclusivamente textual a un sistema basado en código fuente. Otra característica de esta versión, que se mejorará en futuras actualizaciones, es la capacidad del sistema para tolerar fallos en los controladores de dispositivos y, en muchos casos, reemplazarlos automáticamente sin afectar a los procesos en ejecución. De esta forma, Minix se autorrepara y puede utilizarse en aplicaciones que requieren alta fiabilidad.

Minix 3.2.0 se lanzó en febrero de 2012. Esta versión incluye muchas novedades, como el compilador Clang , soporte experimental para multiprocesamiento simétrico , soporte para los sistemas de archivos procfs y ext2fs , y el depurador GNU (GDB). Varias partes de NetBSD también se integraron en esta versión, incluyendo el gestor de arranque, libc y diversas utilidades y otras bibliotecas . [ 32 ]

Minix 3.3.0 se lanzó en septiembre de 2014. Esta versión es la primera en admitir la arquitectura ARM, además de x86. También admite un entorno de usuario NetBSD , con miles de paquetes NetBSD que se ejecutan de inmediato.

En comparación con otros sistemas operativos de enseñanza

Mascota

Rocky Raccoon, la mascota de Minix 3

Rocky Raccoon es la mascota de Minix 3. [ 33 ]

MINIXCon

MINIXCon es una conferencia para compartir charlas, esfuerzos e investigaciones relacionadas con Minix.

Se celebró una vez en 2016. [ 34 ] MINIXCon2017 se canceló debido a la falta de ponencias presentadas. [ 35 ]

Véase también

Notas

  1. 1 2 3 BSD-3-Cláusula con una cuarta cláusula

Referencias

  1. 1 2 3 "La licencia de Minix" . Archivado del original el 24/11/2005 . Recuperado el 24/11/2005 .
  2. corbet (24-10-2005). "Minix 3 llega a la red" . Lwn.net . Consultado el 1-05-2014 .
  3. "minix3.org" . minix3.org . Consultado el 16 de abril de 2017 .
  4. "Primeros pasos con Minix en Bochs en Mac OS" . Woodhull.com . Consultado el 1 de mayo de 2014 .
  5. "OSNews.com" . OSNews.com . Consultado el 1 de mayo de 2014 .
  6. "Cómo instalar Minix en VMWare" . Patrick.wagstrom.net. Archivado del original el 12 de noviembre de 2013. Consultado el 1 de mayo de 2014 .
  7. "Minix en Virtual PC: primer vistazo" . Woodhull.com . Consultado el 1 de mayo de 2014 .
  8. "Minix 3 en VirtualBox" . inopinion.org. 6 de agosto de 2014.
  9. Alting, Ingmar. "Una adaptación del sistema operativo MINIX a la plataforma PowerPC" (PDF) .
  10. "Minix3" . Minix3 . Consultado el 1 de mayo de 2014 .
  11. "git.minix3.org Git - minix.git/summary" . git.minix3.org . Consultado el 3 de mayo de 2022 .
  12. "Índice de /Iso/Snapshot/" .
  13. "minix3 - Grupos de Google" . groups.google.com . Consultado el 3 de mayo de 2022 .
  14. "Intel ME: El camino del análisis estático" . blog.ptsecurity.com . Archivado del original el 1 de julio de 2017. Consultado el 28 de agosto de 2017 .
  15. Corna, Nicola (2017-08-28). "me_cleaner: Herramienta para la eliminación parcial de blobbing de imágenes de firmware Intel ME/TXE" . GitHub . Recuperado el 28 de agosto de 2017 .
  16. Tanenbaum, Andrew S. "Una carta abierta a Intel" . Archivado del original el 17 de junio de 2022. Consultado el 6 de septiembre de 2022 .
  17. Tanenbaum, Andy (25/09/2006). "Introducción a MINIX 3" . OSnew . OSnews . Consultado el 04/07/2008 . De la sección Rebirth : "Diversos estudios han demostrado que el software contiene, en general, entre 6 y 16 errores por cada 1000 líneas de código, y que los controladores de dispositivos tienen entre 3 y 7 veces más errores que el resto del sistema operativo. Si a esto le sumamos que el 70% de un sistema operativo típico está compuesto por controladores de dispositivos, queda claro que estos son una gran fuente de problemas. En Windows XP , el 85% de los fallos se deben a errores en los controladores de dispositivos. Obviamente, para que los sistemas operativos sean fiables, hay que tomar medidas para solucionar los problemas con los controladores de dispositivos. Crear un sistema fiable a pesar de los inevitables errores en los controladores de dispositivos fue la principal motivación para el desarrollo de Minix 3."
  18. "Calendario de eventos de CSAIL" . Csail.mit.edu. Archivado del original el 4 de febrero de 2012. Consultado el 1 de mayo de 2014 .
  19. 1 2 "Debate Tanenbaum-Torvalds, Parte II" . Cs.vu.nl. 12 de mayo de 2006. Consultado el 1 de mayo de 2014 .
  20. "Fiabilidad" . www.MINIX3.org . Archivado del original el 1 de julio de 2006.
  21. "MinixReleases – Minix Wiki" . Wiki.minix3.org . Consultado el 1 de mayo de 2014 .
  22. "Versiones de Minix y su uso en la enseñanza" . Archivado del original el 11 de julio de 2006. Consultado el 16 de junio de 2021 .
  23. 1 2 "LICENCIA (3.1.0)" . GitHub . Consultado el 16 de junio de 2021 .
  24. 1 2 "LICENCIA (3.1.1)" . Recuperado el 16 de junio de 2021 .
  25. 1 2 "LICENCIA (3.1.2)" . GitHub . Consultado el 16 de junio de 2021 .
  26. Swift, Björn Patrick. "Planificación del modo de usuario para la asignación de programación individual en Minix 3" (PDF) . Minix3.org.
  27. MINIX Versión 3.3.0
  28. "Minix1: Políticas de copia y uso" . 13 de febrero de 2007. Archivado del original el 14 de junio de 2020.
  29. "El sistema operativo MINIX 3" . minix3.org . Archivado del original el 13 de enero de 2012.
  30. ^ "Preguntas frecuentes: Minix Wiki" . Minix3.org. 09/11/2013 . Consultado el 1 de mayo de 2014 .
  31. "Mejoras desde la versión 2" . www.minix3.org . Archivado del original el 17 de abril de 2006.
  32. "Lanzamientos de MINIX" . wiki.minix3.org . Archivado del original el 21 de junio de 2012. Consultado el 29 de febrero de 2012 .
  33. "mascota [ Wiki ] " . wiki.minix3.org . Consultado el 2017-07-20 .
  34. "Los vídeos de MINIXCon 2016 ya están disponibles en línea" . www.minix3.org . 10 de marzo de 2016. Archivado del original el 15 de mayo de 2021. Consultado el 11 de junio de 2025 .
  35. "Minix3" . Archivado del original el 5 de septiembre de 2017.

Lecturas adicionales

  • Tanenbaum, Andrew S .; Woodhull, Albert S. (14 de enero de 2006). Sistemas operativos: diseño e implementación (3.ª  ed.). Prentice Hall . ISBN 0-13-142938-8.
  • Cómo construir un sistema operativo fiable: tolerancia a fallos en MINIX 3, por Jorrit N. Herder (PDF)
  • Reorganización de Unix para mejorar la fiabilidad, por Jorrit N. Herder, Herbert Bos, Ben Gras, Philip Homburg y Andrew S. Tanenbaum (PDF)
  • Programación de sistemas modulares en MINIX 3 por Jorrit N. Herder, Herbert Bos, Ben Gras, Philip Homburg y Andrew S Tanenbaum (PDF)
  • JN Herder et al., Programación de sistemas modulares en MINIX 3 , ;Login , abril de 2006 (PDF)
  • Pablo A. Pessolani. MINIX4RT: Un sistema operativo en tiempo real basado en MINIX. Archivado el 7 de junio de 2023 en Wayback Machine.
  • Creación de herramientas de medición del rendimiento para el sistema operativo MINIX 3 , por Rogier Meurs (PDF)
  • Diseño e implementación del sistema de archivos virtual MINIX (PDF)
  • Manual de referencia para la API del kernel de MINIX 3 (PDF)
  • Hacia un verdadero sistema operativo de microkernel (PDF)
  • Construcción de un sistema operativo altamente confiable (PDF)
  • Minix 3 y la experiencia del microkernel: Smart Kernel por Rüdiger Weis (PDF)
  • Actualización en vivo segura y automática por Cristiano Giuffrida (PDF)
  • Fundación de Investigación Stichting-MINIX en GitHub
Obtenido de " https://en.wikipedia.org/w/index.php?title=Minix_3&oldid=1352199085 "