stringtranslate.com

Minix 3

Minix 3 es un pequeño sistema operativo 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 principal objetivo 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 integrados y la 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 una adaptación a 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 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. [dieciséis]

Objetivos del proyecto

Estructura de sistemas operativos basados ​​en kernel monolítico y microkernel , 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 entre 3 y 7 veces más errores que un programa normal) [17] puede hacer caer todo el sistema, [18] Minix 3 tiene como objetivo crear un sistema operativo que sea un "clon de Unix multiservidor confiable y autorreparable". [19]

Para lograrlo, el código que se ejecuta en el kernel debe ser mínimo, con el servidor de archivos, el servidor de procesos y cada controlador de dispositivo ejecutándose como procesos separados en modo de usuario. Cada conductor es monitoreado cuidadosamente por una parte del sistema llamada servidor de reencarnación . Si un controlador no responde a los pings de este servidor, se cierra y se reemplaza por una copia nueva del controlador.

En un sistema monolítico, un error en un controlador puede bloquear fácilmente todo el núcleo. Es mucho menos probable que esto ocurra en Minix 3. [20]

Historia

Minix 3 fue anunciado públicamente el 24 de octubre de 2005 por Andrew Tanenbaum durante su discurso de apertura en la conferencia de Principios de Sistemas Operativos del Simposio de la Asociación de Maquinaria de Computación (ACM). Aunque todavía sirve como ejemplo para la nueva edición del libro de texto de Tanenbaum y Woodhull, está completamente rediseñado para que sea "utilizable como un sistema serio en computadoras integradas y con recursos limitados y para aplicaciones que requieren alta confiabilidad".

Publicado inicialmente bajo la misma licencia BSD-3-Clause bajo la cual Minix tenía licencia desde 2000. [23] [24] A finales 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 confiabilidad.

Reducir el tamaño del grano

Los sistemas operativos monolíticos como Linux y FreeBSD y los híbridos como Windows tienen millones de líneas de código del kernel . Por el contrario, Minix 3 tiene alrededor de 6.000 líneas de código de núcleo ejecutable, [29] lo que puede hacer que los problemas sean más fáciles de encontrar 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 en el kernel código desconocido y que no es de confianza. Una línea de código incorrecta en un controlador puede provocar la caída del sistema.

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

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, por tanto, dañar accidentalmente los programas del usuario.

En Minix 3, cuando un usuario espera datos de, por ejemplo, el 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. Luego, el sistema de archivos o el controlador le pide al kernel que escriba a través del descriptor, lo que les imposibilita escribir en direcciones fuera del búfer.

Sobrevivir a malos consejos

Eliminar la referencia a un puntero incorrecto dentro de un controlador bloqueará el proceso del controlador, pero no tendrá ningún efecto en el sistema en su conjunto. El servidor de reencarnación reiniciará el controlador bloqueado automáticamente. Los usuarios no notarán la recuperación de algunos controladores (p. ej., disco y red), pero sí de otros (p. ej., audio e impresora). En los núcleos monolíticos, eliminar la referencia a un puntero incorrecto en un controlador normalmente provoca un fallo del sistema.

Domar bucles infinitos

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

Limite el daño causado por desbordamientos del búfer

Minix 3 utiliza mensajes de longitud fija para la comunicación interna, lo que elimina ciertos desbordamientos del búfer y problemas de gestión del búfer. Además, muchos exploits funcionan desbordando un búfer para engañar al programa para que regrese de una llamada a función usando 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 código en el espacio de instrucciones (solo lectura), lo que se denomina protección del espacio ejecutable . Sin embargo, esta mitigación no previene los ataques que dependen de la ejecución de memoria legítimamente ejecutable de forma maliciosa ( retorno a libc , programación orientada al retorno ).

Restringir el acceso a las funciones del kernel

Los controladores de dispositivos obtienen servicios del kernel (como copiar datos a los espacios de direcciones de los usuarios) realizando llamadas al kernel. El kernel 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 kernel también mantiene una tabla que indica a qué puertos de E/S puede acceder cada controlador. Por lo tanto, un controlador sólo puede tocar 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. En consecuencia, 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, hace ping periódicamente a cada controlador de dispositivo. Si el controlador muere o no responde correctamente a los pings, el servidor de reencarnación lo reemplaza automáticamente con una copia nueva. La detección y sustitución de controladores que no funcionan es automática y no es necesaria ninguna acción por parte del usuario. Esta característica no funciona actualmente con los controladores de disco, pero en la próxima versión el sistema podrá recuperar incluso los controladores de disco, que estarán ocultos en la memoria de acceso aleatorio (RAM). La recuperación del controlador no afecta los procesos en ejecución.

Integrar interrupciones y mensajes.

Cuando ocurre una interrupción , se convierte en un nivel bajo en una notificación enviada al controlador apropiado. Si el conductor está esperando un mensaje, recibe la interrupción inmediatamente; de lo contrario, recibirá la notificación la próxima vez que reciba RECEIVEun mensaje. Este esquema elimina las interrupciones anidadas y facilita la programación del controlador.

Arquitectura

La arquitectura de Minix 3

Como puede verse, en el nivel inferior se encuentra el microkernel , que son unas 4.000 líneas de código (principalmente en C , más una pequeña cantidad de lenguaje ensamblador ). Maneja interrupciones , programación y paso de mensajes. También admite una interfaz de programación de aplicaciones (API) de aproximadamente 30 llamadas al kernel que pueden realizar 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 configurar interrupciones y copiar datos entre espacios de direcciones.

En el siguiente nivel, están los controladores de dispositivo , cada uno de los cuales se ejecuta como un proceso 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 del puerto de E/S y no pueden emitir instrucciones de E/S directamente. En cambio, deben realizar llamadas al kernel que proporcionen una lista de puertos de E/S en los que escribir y los valores que se escribirán. Si bien hay una pequeña cantidad de sobrecarga al hacer esto (normalmente 500 ns), este esquema hace posible 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 están los servidores . Aquí es donde se encuentran casi todas las funciones del sistema operativo. Los procesos de usuario obtienen servicios 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 de disco, que controla el disco.

Uno de los servidores clave es el servidor de reencarnación. Su trabajo es sondear todos los demás servidores y controladores para comprobar su estado periódicamente. Si un componente no responde correctamente, sale o entra en un bucle infinito , el servidor de reencarnación (que es el proceso principal de los controladores y servidores) elimina el componente defectuoso y lo reemplaza con una copia nueva. De esta manera, el sistema se recupera 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 colapsa. 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 en gran medida la confiabilidad del sistema. [ cita necesaria ]

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, tenía 12.000 líneas de C y algo de lenguaje ensamblador x86 . El código fuente del kernel, 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 y IBM PC/AT disponibles en ese momento.

Minix 1.5, lanzado en 1991, incluía soporte para sistemas MicroChannel IBM PS/2 y también fue portado a las arquitecturas Motorola 68000 y SPARC , soportando 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 ejecuta como 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 Prof. 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, además de un comienzo en la construcción de un sistema operativo altamente confiable, autocurativo y libre de sobrecargas... MINIX 1 y MINIX 3 están relacionados de la misma manera que Windows 3.1 y Windows XP : el mismo nombre. [19]

También se han realizado muchas mejoras en la estructura del kernel desde el lanzamiento de Minix 2, lo que hace 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 comunes de Unix. Con la incorporació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 versiones, es la capacidad del sistema para soportar fallas de los controladores de dispositivos y, en muchos casos, reemplazarlos automáticamente sin afectar los procesos en ejecución. De esta manera, Minix se repara automáticamente y puede usarse en aplicaciones que exigen alta confiabilidad.

Minix 3.2.0 se lanzó en febrero de 2012. Esta versión tiene muchas características nuevas, incluido el compilador Clang , compatibilidad con multiprocesamiento simétrico experimental , compatibilidad con sistemas de archivos procfs y ext2fs y GNU Debugger (GDB). Varias partes de NetBSD también están integradas en la versión, incluido 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 versión que admite la arquitectura ARM además de x86. También es compatible con un espacio de usuario de NetBSD , con miles de paquetes de NetBSD ejecutándose desde el primer momento.

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 llevó a cabo una vez en 2016. MINIXCon2017 fue cancelada por falta de charlas presentadas. [34] [35]

Ver también

Notas

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

Referencias

  1. ^ abc "La licencia 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 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. ^ "Minix en el procedimiento de instalación de VMWare". Patrick.wagstrom.net. Archivado desde el 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 caja virtual". inopinion.org. 6 de agosto de 2014.
  9. ^ Altitud, Ingmar. "Un puerto 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/Instantánea/".
  13. ^ "minix3 - Grupos de Google". grupos.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 1 de julio de 2017 . Consultado el 28 de agosto de 2017 .
  15. ^ Corna, Nicola (28 de agosto de 2017). "me_cleaner: herramienta para la eliminación parcial de imágenes de firmware Intel ME/TXE". GitHub . Consultado el 28 de agosto de 2017 .
  16. ^ Tanenbaum, Andrew S. "Una 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". SO nuevo . OSnoticias . Consultado el 4 de julio de 2008 . De la sección Rebirth : "Varios estudios han demostrado que el software contiene en términos generales 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. Cuando se combina con el hecho de que El 70% de un sistema operativo típico consta de 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 hacer que los sistemas operativos sean confiables, algo. "Hay que hacer para lidiar con los controladores de dispositivos defectuosos. Construir un sistema confiable a pesar de los errores inevitables en los controladores de dispositivos fue la fuerza impulsora original detrás de Minix 3".
  18. ^ "Calendario de eventos 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 1 de mayo de 2014 .
  20. ^ "Confiabilidad". www.MINIX3.org . Archivado desde el original el 1 de julio de 2006.
  21. ^ "Lanzamientos de Minix - Wiki de Minix". Wiki.minix3.org . Consultado el 1 de mayo de 2014 .
  22. ^ "Versiones Minix y su uso en la docencia". 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. ^ Rápido, Björn Patrick. "Programación del modo de usuario de asignación de programación individual en Minix 3" (PDF) . Minix3.org.
  27. ^ Versión MINIX 3.3.0
  28. ^ "Minix1: Políticas de uso y copia". 2007-02-13. 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 V2". www.minix3.org . Archivado desde el original el 17 de abril de 2006.
  32. ^ "Lanzamientos 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}}: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace )
  35. ^ "Minix3". www.minix3.org . Consultado el 11 de noviembre de 2017 .

Otras lecturas

enlaces externos