stringtranslate.com

Minix 3

Minix 3 es un sistema operativo pequeño, similar a Unix . Se publica bajo una licencia BSD-3-Clause [a] y es un proyecto sucesor de las versiones anteriores, Minix 1 y 2. [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. Los principales usos del sistema están previstos para sistemas embebidos y educación. [2]

A partir de 2017 , Minix 3 admite procesadores de 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 un puerto para la arquitectura PowerPC . [9] La distribución viene en un CD en vivo y no admite la instalación USB en vivo . [10] El proyecto ha estado inactivo desde 2018, [11] y la última versión es 3.4.0 rc6 de 2017, [12] aunque el grupo de discusión de Minix 3 todavía está activo. [13]

Se cree que Minix 3 inspiró el sistema operativo Intel Management Engine (ME) que se encuentra en el Platform Controller Hub de Intel , comenzando con la introducción de ME 11, que se usa 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 basados ​​en núcleo monolítico y micronúcleo , respectivamente

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

Para lograrlo, el código que se ejecuta en el núcleo debe ser mínimo, y el servidor de archivos, el servidor de procesos y cada controlador de dispositivo deben ejecutarse como procesos separados en modo usuario. Cada controlador es monitoreado cuidadosamente por una parte del sistema denominada servidor de reencarnación . Si un controlador no responde a los pings de este servidor, se apaga y se reemplaza por una copia nueva del controlador.

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

Historia

El Minix 3 fue anunciado públicamente el 24 de octubre de 2005 por Andrew Tanenbaum durante su discurso inaugural en la conferencia sobre Principios de Sistemas Operativos del Simposio de la Association for Computing Machinery (ACM). Aunque todavía sirve como ejemplo para la nueva edición del libro de texto de Tanenbaum y Woodhull, ha sido rediseñado de manera integral para que sea "utilizable como un sistema serio en computadoras integradas y con recursos limitados y para aplicaciones que requieran alta confiabilidad".

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

Políticas de confiabilidad

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

Reducir el tamaño del núcleo

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

Enjaular 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 en el núcleo un código desconocido y no confiable. Una línea de código incorrecta en un controlador puede hacer que el sistema se caiga.

En cambio, en Minix 3, cada controlador de dispositivo es un proceso independiente en modo usuario. Los controladores no pueden ejecutar instrucciones privilegiadas, cambiar las tablas de páginas , realizar entradas y salidas arbitrarias (E/S) o escribir en la memoria absoluta. Deben realizar llamadas al núcleo para estos servicios y el núcleo verifica cada llamada para comprobar su autoridad.

Limitar el acceso a la memoria de los conductores

En los núcleos monolíticos, un controlador puede escribir en cualquier palabra de la memoria y así dañar accidentalmente los programas del usuario.

En Minix 3, cuando un usuario espera datos, por ejemplo, del sistema de archivos, crea un descriptor que indica quién tiene acceso y en qué direcciones. Luego pasa un índice de este descriptor al sistema de archivos, que puede pasarlo a un controlador. El sistema de archivos o el controlador solicitan entonces al núcleo que escriba a través del descriptor, lo que hace imposible que escriban en direcciones fuera del búfer.

Sobrevivir a los malos consejos

La anulación de la referencia de un puntero defectuoso dentro de un controlador provocará un bloqueo del proceso del controlador, pero no tendrá ningún efecto en el sistema en su conjunto. El servidor de reincarnación reiniciará automáticamente el controlador dañado. Los usuarios no notarán la recuperación de algunos controladores (por ejemplo, de disco y de red), pero es posible que sí lo hagan en otros (por ejemplo, de audio e impresora). En los núcleos monolíticos, la anulación de la referencia de un puntero defectuoso en un controlador normalmente provoca un bloqueo del sistema.

Domina los bucles infinitos

Si un controlador entra en un bucle infinito , el programador reducirá gradualmente su prioridad hasta que quede inactivo. Finalmente, el servidor de reincarnación verá que no está respondiendo a las solicitudes de estado, por lo que matará y reiniciará el controlador en bucle. 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 desbordando un búfer para engañar al programa para que regrese de una llamada de función utilizando una dirección de retorno de pila sobrescrita que apunta a la memoria controlada por el atacante, generalmente el búfer desbordado. En Minix 3, este ataque se mitiga porque el espacio de instrucciones y datos se divide y solo se puede ejecutar el 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 al retorno ) no se previenen 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) al realizar llamadas al núcleo. El núcleo 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 todas las funciones del núcleo, autorizadas o no.

Restringir el acceso a los puertos de E/S

El núcleo también 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 los núcleos monolíticos, un controlador con errores puede acceder a los puertos de E/S que pertenecen a otro dispositivo.

Restringir la comunicación con los componentes del sistema operativo

No todos los controladores y servidores necesitan comunicarse con todos los demás controladores y servidores. Por lo tanto, un mapa de bits por proceso determina a qué destinos puede enviar cada proceso.

Reencarnar conductores muertos o enfermos

Un proceso especial, llamado servidor de reencarnación, envía un ping periódico a cada controlador de dispositivo. Si el controlador deja de funcionar o no responde correctamente a los pings, el servidor de reencarnación lo reemplaza automáticamente con una copia nueva. La detección y el reemplazo de controladores que no funcionan es automático, sin necesidad de que el usuario realice ninguna acción. Esta característica no funciona para los controladores de disco en la actualidad, pero en la próxima versión el sistema podrá recuperar incluso los controladores de disco, que se almacenarán en la memoria de acceso aleatorio (RAM). La recuperación de controladores no afecta a los procesos en ejecución.

Integrar interrupciones y mensajes

Cuando se produce una interrupción , se convierte a un nivel bajo en una notificación enviada al controlador correspondiente. Si el controlador está esperando un mensaje, recibe la interrupción inmediatamente; de ​​lo contrario, recibe la notificación la próxima vez que realiza una operación RECEIVEpara obtener un mensaje. Este esquema elimina las interrupciones anidadas y facilita la programación del controlador.

Arquitectura

La arquitectura de Minix 3

Como se puede ver, en el nivel inferior se encuentra el microkernel , que tiene unas 4.000 líneas de código (en su mayoría en C , más una pequeña cantidad de lenguaje ensamblador ). Maneja las interrupciones , la programación y el paso de mensajes. También admite una interfaz de programación de aplicaciones (API) de unas 30 llamadas al kernel que pueden realizar los servidores y controladores autorizados. Los programas de usuario no pueden realizar estas llamadas. En cambio, pueden emitir llamadas al sistema POSIX que envían mensajes a los servidores. Las llamadas al kernel realizan funciones como establecer interrupciones y copiar datos entre espacios de direcciones.

En el siguiente nivel superior, están los controladores de dispositivos , cada uno de los cuales se ejecuta como un proceso independiente en el espacio de usuario . Cada uno controla algún dispositivo de E/S, como un disco o una impresora. Los controladores no tienen acceso al espacio del puerto de E/S y no pueden emitir instrucciones de E/S directamente. En su lugar, deben realizar llamadas al núcleo que proporcionen una lista de puertos de E/S en los que escribir y los valores que se deben escribir. Si bien esto implica una pequeña cantidad de sobrecarga (normalmente 500 ns), este esquema permite que el núcleo verifique 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í es donde se encuentra casi toda la funcionalidad del sistema operativo. Los procesos de usuario obtienen el servicio de archivos, por ejemplo, enviando mensajes al servidor de archivos para abrir, cerrar, leer y escribir archivos. A su vez, el servidor de archivos realiza la E/S del disco enviando mensajes al controlador del disco, que controla el disco.

Uno de los servidores clave es el servidor de reencarnación. Su trabajo es sondear a todos los demás servidores y controladores para verificar su estado periódicamente. 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 con una copia nueva. De esta manera, el sistema se autocura 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 informática confiable . Si alguno de ellos falla, el sistema se bloquea. Sin embargo, reducir la base informática confiable de 3 a 5 millones de líneas de código, como en los sistemas Linux y Windows, a aproximadamente 20 000 líneas mejora enormemente la confiabilidad del sistema. [ cita requerida ]

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, publicado en 1987, tenía 12.000 líneas de C y algo de lenguaje ensamblador x86 . El código fuente del núcleo, el administrador de memoria y el sistema de archivos de Minix 1.0 están impresos en el libro. Tanenbaum desarrolló originalmente Minix para que fuera compatible con las microcomputadoras IBM PC e IBM PC/AT disponibles en ese momento.

Minix 1.5, lanzado en 1991, incluía soporte para sistemas IBM PS/2 de MicroChannel y también fue adaptado a las arquitecturas Motorola 68000 y SPARC , y era 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 un proceso de usuario en SunOS .

Minix 2.0, lanzado en 1997, sólo estaba disponible para las arquitecturas SPARC alojadas en x86 y Solaris . Minix-vmd fue creado por dos investigadores de la Vrije Universiteit y agregó memoria virtual y soporte para el sistema X Window .

Minix 3 hace lo mismo y proporciona un sistema operativo moderno con muchas herramientas más nuevas 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 comienzo para construir un sistema operativo altamente confiable, autocurativo y libre de hinchazón... MINIX 1 y MINIX 3 están relacionados de la misma manera que Windows 3.1 y Windows XP : mismo nombre. [19]

También se han realizado muchas mejoras en la estructura del núcleo desde el lanzamiento de Minix 2, haciendo que el sistema sea más confiable. [31] La versión 3.1.5 de Minix se lanzó el 5 de noviembre de 2009. Contiene X11 , Emacs , vi , cc, GCC , Perl , Python , Almquist shell , Bash , Z shell , cliente FTP , cliente SSH , cliente Telnet , Pine y más de 400 otros programas de utilidad Unix comunes. Con la adición de X11, esta versión marca la transición desde un sistema de solo texto. Otra característica de esta versión, que se mejorará en futuras, es la capacidad del sistema para soportar fallas de controladores de dispositivos y, en muchos casos, reemplazarlos automáticamente sin afectar los procesos en ejecución. De esta manera, Minix se autocura y se puede usar en aplicaciones que exigen alta confiabilidad.

Minix 3.2.0 fue lanzado en febrero de 2012. Esta versión tiene muchas características nuevas, incluyendo el compilador Clang , soporte experimental para multiprocesamiento simétrico , soporte para sistemas de archivos procfs y ext2fs , y GNU Debugger (GDB). Varias partes de NetBSD también están integradas en la versión, incluyendo el gestor de arranque, libc y varias utilidades y otras bibliotecas . [32]

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

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. MINIXCon2017 se canceló debido a la falta de charlas presentadas. [34] [35]

Véase también

Notas

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

Referencias

  1. ^ abc "La licencia de Minix". Archivado desde el original el 24 de noviembre de 2005. Consultado el 24 de noviembre de 2005 .
  2. ^ corbet (24 de octubre de 2005). «Minix 3 llega a la red». Lwn.net . Consultado el 1 de mayo de 2014 .
  3. ^ "minix3.org". minix3.org . Consultado el 16 de abril de 2017 .
  4. ^ "Introducción a Minix en Bochs para 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 desde el original el 2013-11-12 . Consultado el 2014-05-01 .
  7. ^ "Minix en Virtual PC: primer vistazo". Woodhull.com . Consultado el 1 de mayo de 2014 .
  8. ^ "Minix 3 en Virtual Box". inopinion.org. 6 de agosto de 2014.
  9. ^ Alting, Ingmar. "Un puerto del sistema operativo MINIX para 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 desde el original el 2017-07-01 . Consultado el 2017-08-28 .
  15. ^ Corna, Nicola (28 de agosto de 2017). "me_cleaner: herramienta para la eliminación parcial de blobs de imágenes de firmware Intel ME/TXE". GitHub . Consultado el 28 de agosto de 2017 .
  16. ^ Tanenbaum, Andrew S. "Carta abierta a Intel". Archivado desde el original el 17 de junio de 2022. Consultado el 6 de septiembre de 2022 .
  17. ^ Tanenbaum, Andy (25 de septiembre de 2006). "Introducción a MINIX 3". OSnew . OSnew . Consultado el 4 de julio de 2008 . De la sección Renacimiento : "Varios estudios han demostrado que el software contiene en líneas generales algo así como 6-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. Cuando se combina con el hecho de que el 70% de un sistema operativo típico consiste en controladores de dispositivos, está claro que los controladores de dispositivos son una gran fuente de problemas. Para 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 hacer algo para solucionar los controladores de dispositivos con errores. Construir un sistema fiable a pesar de los inevitables errores en los controladores de dispositivos fue la fuerza impulsora original detrás de Minix 3".
  18. ^ "Calendario de eventos de CSAIL". Csail.mit.edu. Archivado desde el original el 4 de febrero de 2012. Consultado el 1 de mayo de 2014 .
  19. ^ ab "Debate Tanenbaum-Torvalds, Parte II". Cs.vu.nl. 2006-05-12 . Consultado el 2014-05-01 .
  20. ^ "Fiabilidad". www.MINIX3.org . Archivado desde el 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 desde el original el 11 de julio de 2006. Consultado el 16 de junio de 2021 .
  23. ^ ab "LICENCIA (3.1.0)". GitHub . Consultado el 16 de junio de 2021 .
  24. ^ ab "LICENCIA (3.1.1)" . Consultado el 16 de junio de 2021 .
  25. ^ ab "LICENCIA (3.1.2)". GitHub . Consultado el 16 de junio de 2021 .
  26. ^ Swift, Björn Patrick. "Programación individual en modo usuario en Minix 3" (PDF) . Minix3.org.
  27. ^ Versión 3.3.0 de MINIX
  28. ^ "Minix1: Políticas de copia y uso". 13 de febrero de 2007. Archivado desde el original el 14 de junio de 2020.
  29. ^ "El sistema operativo MINIX 3". minix3.org . Archivado desde el 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 desde el original el 17 de abril de 2006.
  32. ^ "Lanzamientos de MINIX". wiki.minix3.org . Archivado desde el original el 21 de junio de 2012 . Consultado el 29 de febrero de 2012 .
  33. ^ "mascota [Wiki]". wiki.minix3.org . Consultado el 20 de julio de 2017 .
  34. ^ "Minix3". Archivado desde el original el 10 de noviembre de 2017. Consultado el 5 de julio de 2006 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  35. ^ "Minix3". www.minix3.org . Consultado el 11 de noviembre de 2017 .

Lectura adicional

Enlaces externos