Mach (núcleo)


Mach ( / m ɑː k / ) [1] es un núcleo desarrollado en la Universidad Carnegie Mellon por Richard Rashid y Avie Tevanian para apoyar la investigación de sistemas operativos , principalmente computación distribuida y paralela . Mach se menciona a menudo como uno de los primeros ejemplos de microkernel . Sin embargo, no todas las versiones de Mach son micronúcleos. Los derivados de Mach son la base del kernel del sistema operativo en GNU Hurd y del kernel XNU de Apple utilizado en macOS ., iOS , iPadOS , tvOS y watchOS .

El proyecto de Carnegie Mellon se desarrolló entre 1985 y 1994, [2] terminando con Mach 3.0, que es un verdadero microkernel . Mach fue desarrollado como un reemplazo del kernel en la versión BSD de Unix , por lo que no tendría que diseñarse un nuevo sistema operativo a su alrededor. Mach y sus derivados existen dentro de varios sistemas operativos comerciales. Estos incluyen todos los que utilizan el kernel del sistema operativo XNU , que incorpora un Mach anterior sin microkernel como componente principal. El sistema de gestión de memoria virtual Mach también fue adoptado en 4.4BSD por los desarrolladores de BSD en CSRG , [3] y aparece en sistemas Unix modernos derivados de BSD, como FreeBSD ..

Mach es el sucesor lógico del kernel Accent de Carnegie Mellon . El desarrollador principal del proyecto Mach, Richard Rashid , trabaja en Microsoft desde 1991; fundó la división de investigación de Microsoft . Otro de los desarrolladores originales de Mach, Avie Tevanian , fue director de software en NeXT y luego director de tecnología de software en Apple Inc. hasta marzo de 2006. [4] [2]

Mientras que los desarrolladores, una vez durante la fase de nomenclatura, tuvieron que ir en bicicleta para almorzar a través de los charcos de lodo lluviosos de Pittsburgh, Tevanian bromeó que la palabra "muck" podría servir como un trasfondo de su M ulti- U ser (o M ultiprocessor Universal ) C ommunication K Ernel. El ingeniero italiano de CMU, Dario Giuse , preguntó más tarde al líder del proyecto Rick Rashid sobre el título actual del proyecto y recibió "MUCK" como respuesta, aunque no se deletrea sino que se pronuncia IPA:  [mʌk] que él, según el alfabeto italiano , escribió como Mach. . A Rashid le gustó tanto la ortografía de Giuse "Mach" que prevaleció.[5] : 103 

Un concepto clave en el sistema operativo Unix original era la idea de una tubería . Una tubería era una abstracción que permitía mover datos como un flujo de bytes no estructurado de un programa a otro. Mediante el uso de canalizaciones, los usuarios (o programadores) podrían vincular varios programas para completar tareas, alimentando datos a través de varios programas pequeños sucesivamente. Esto contrastaba con los sistemas operativos típicos de la época, que requerían un solo programa grande que pudiera manejar toda la tarea, o alternativamente, usaba archivos para pasar datos, lo cual era costoso en recursos y consumía mucho tiempo.

Las tuberías se construyeron sobre el sistema de entrada / salida subyacente . Este sistema, a su vez, se basaba en un modelo en el que se esperaba que los conductores se "bloquearan" periódicamente mientras esperaban que se completaran las tareas. Por ejemplo, un controlador de impresora puede enviar una línea de texto a una impresora de líneay luego no tenga nada que hacer hasta que la impresora termine de imprimir esa línea. En este caso, el controlador indicaría que estaba bloqueado y el sistema operativo permitiría que se ejecutara algún otro programa hasta que la impresora indicara que estaba lista para recibir más datos. En el sistema de tuberías, el recurso limitado era la memoria, y cuando un programa llenaba la memoria asignada a la tubería, naturalmente se bloqueaba. Normalmente, esto haría que el programa consumidor se ejecutara, vaciando la tubería nuevamente. A diferencia de un archivo, donde todo el archivo debe leerse o escribirse antes de que el siguiente programa pueda usarlo, las canalizaciones hicieron que el movimiento de datos a través de múltiples programas ocurriera de manera fragmentada sin la intervención del programador.