Mach (Kernel)
Mach ist ein Mikrokernel, der 1985–1994 im Rahmen eines DARPA-finanzierten Projekts an der Carnegie Mellon University (CMU) entwickelt wurde. Das Design-Ziel für Mach war ein Unix-kompatibles Betriebssystem, der Kernel ist jedoch prinzipiell für verschiedene Betriebssysteme verwendbar. Bis Version 2 war ein vollständiger 4.3BSD-Kernel Teil von Mach, der jedoch in Mach 3.0 entfernt werden konnte. Für das Betriebssystem OSF/1 wurde der ursprüngliche CMU-Mach3-Kernel weiterentwickelt und von anderen Mach-Implementierungen weiterer Betriebssysteme als Open Software Foundation Mach Kernel, kurz OSF MK, übernommen. An der Universität von Utah wurde in der Flux Research Group bis 1996 an Mach 4 gearbeitet, das als Basis für die freie Implementierung GNU Mach diente.
Mach gilt heute als erste Mikrokernel-Generation. Der L4-Mikrokernel hat die größte Schwäche von Mach, den zu langsamen Interkommunikationsprozess, annähernd behoben und gilt als zweite Mikrokernel-Generation.[1] Deshalb wird Mach manchmal auch als überholt bezeichnet.[2]
Entwicklung
Mach wurde unter Leitung von Richard Rashid und Avie Tevanian an der Carnegie Mellon University, kurz CMU, 1985 als Nachfolger von Accent entwickelt. Accent war ebenfalls von Rashid am CMU zwischen 1979 und 1981 entwickelt worden und lief dort bis 1985 auf den hauseigenen Rechnern, wurde aber schließlich durch den Erfolg von Unix obsolet.[3]
Mach hätte ursprünglich wohl MUCK heißen sollen, für englisch Multiprocessor Universal Communication Kernel.[4] Der endgültige Name „Mach“ war zwar keine Abkürzung mehr, doch waren die wesentlichen Ziele der Entwicklung damit klar abgesteckt: Multiprozessorfähigkeit, leichte Portierbarkeit sowie Nutzung von Interprozesskommunikation (IPC, kurz für englisch interprocess communication). Als Mikrokernel sollte Mach sehr klein bleiben und nur die nötigsten Funktionen erledigen. Das Konzept der Interprozesskommunikation zur Verarbeitung von Mach messages zur Verwaltung einzelner darauf laufender Prozesse wurde von Accent übernommen, die virtuelle Speicherverwaltung sowie die Process- und Thread-Verwaltung sind jedoch Neuentwicklungen.
Zu Entwicklungsbeginn wurde 4.2BSD-Unix als Grundlage für ein Mach-Betriebssystem verwendet. In diesen bestehenden BSD-Kernel wurden nach und nach Mach-Komponenten eingebaut, um die vorhandenen Kernel-Funktionen zu ersetzen bzw. – wie später vorgesehen – diese Funktionen auf die Abstraktion im Mach-Mikrokernel aufbauen zu lassen. Obwohl es hauptsächlich um den Mikrokernel ging, wollte man von Anfang an die Unix-Kompatibilität bewahren. Später war geplant, dass auch andere existierende Betriebssysteme auf Mach als Kernel laufen sollten, darunter auch System V, VMS und sogar MS-DOS.[5]
Das Mach-Betriebssystem wurde auf 4.3BSD aktualisiert, als dieses 1986 verfügbar wurde. Bis zur ersten veröffentlichten Version im selben Jahr, Mach 1.0, wurde an der Verbesserung der Geschwindigkeit gegenüber dem vorhandenen monolithischen Kernel gearbeitet. 1988, mit Mach 2.0, lief der Kernel bereits auf den Architekturen DEC VAX, IBM-RT-PC und Sun 3 und wurde z. B. von BBN Advanced Computers Inc., Evans and Sutherland Computer Division, Encore Computers und NeXT für kommerziell vertriebene Unix-Betriebssysteme, u. a. auf den Rechnerarchitekturen IBM RP3, Sequent Balance, Macintosh II, IBM 370 und Intel 80386 genutzt.[6] Bis Mach 2.6 waren noch große Teile des BSD-Kernels selbst enthalten, womit Mach zwar größer als ein reiner BSD-Kernel war, aber auch voll dazu kompatibel. Mit Mach 3.0 von 1989 wurden alle BSD-Bestandteile ausgelagert und Mach zum Mikrokernel, dem anfänglichen Entwicklungsziel. Der verbleibende reine µ-Kernel war dadurch leichter für weitere Betriebssysteme nutzbar. Nachdem CMU Mach3 veröffentlichte, wurde der µ-Kernel vom OSF Research Institute im Rahmen des OSF/1-Betriebssystems weiterentwickelt. Durch die zahlreichen Verbesserungen erhielt dieser Kernel den Namen OSF MK.[7]
Auf OSF MK, dem verbesserten Mach3-Kernel, wurde ab 1995 MkLinux entwickelt und gleichzeitig OSF MK auf die PowerPC-Plattform portiert. MkLinux ist als Single Server angelegt, das heißt, Linux wird als einzelner Prozess (englisch task) auf dem Mach3-Mikrokernel ausgeführt. Auf OSF MK basiert ebenfalls der in Rhapsody und macOS eingesetzte XNU-Kernel, der jedoch als Hybridkernel ausgelegt ist und somit nicht mehr nur dem Mikrokernel-Konzept von Mach entspricht.
Aufbauend auf CMU Mach3, wurde an der Universität von Utah, kurz UU, in der Flux Research Group der Abteilung Computerwissenschaften (englisch Departement of Computer Science), bis 1996 an Version 4 von Mach gearbeitet. Mach4 hätte als Kernel für ein Betriebssystem im Rahmen des Flux-Projekts dienen sollen, wurde jedoch nach kurzer Zeit nicht mehr weiterentwickelt und zugunsten von OSKit aufgegeben. OSKit beinhaltet die ursprünglich für Mach4 entwickelten Kompatibilitätsschichten (englisch glue-code), um Linux-Treiber und Unix-Komponenten mit relativ geringem Aufwand auf andere Betriebssysteme portieren zu können.
Mach4 diente als Basis für die freie Implementierung GNU Mach, die beim GNU-Betriebssystem eingesetzt wird. Aufbauend auf den Mach-Mikrokernel stellt GNU Hurd die Unix-kompatible Betriebssystemkomponente (analog zu BSD-Unix bei CMU Mach). In den 1990er Jahren wurde Linux als (monolithischer) Kernel benutzt, was GNU/Linux als vorläufiges GNU-Betriebssystem hervorbrachte, bis der GNU-eigene Kernel – GNU Hurd – benutzbar war. (Siehe GNU/Linux-Namensstreit.)
Eigenschaften
Zu den Design-Zielen von Mach zählte zusätzlich auch Multitasking und Speicherschutz. Als Mikrokernel soll Mach so wenig der traditionellen Kernel-Funktionen wie möglich und gleichzeitig so viele wie nötig implementieren. Daraus ergaben sich diese vier Kernaufgaben:
- Prozess- und Thread-Verwaltung, englisch tasks and threads
- Interprozesskommunikation, IPC
- virtueller Speicher
- Scheduling
Als minimale Abstraktion bietet Mach letztlich folgende Systemkomponenten, die sehr stark auf die Interprozesskommunikation (IPC) zurückgreifen:[8]
- task: ein Prozess, der einen oder mehrere Threads enthalten kann
- thread: die kleinste Ausführungseinheit, die Teil eines Prozesses ist
- port: ein einfacher Objektreferenzmechanismus von Mach, implementiert durch den Mach-IPC-Mechanismus
- port set: eine Gruppe von ports, die sich einen gemeinsamen message queue teilen
- message: eine grundlegende Methode zur Kommunikation zwischen Threads
- memory object: ein Speicherobjekt, das von Prozessen genutzt werden kann
Beispiele
- MACH 0.x–2.5 Referenzimplementation
- Mach-Betriebssystem der Carnegie Mellon University (CMU)
- MACH 2.0
- MACH 2.5
- OSF/1 (ab 1989), später Digital UNIX und Tru64 UNIX (HP; bis 2012)
- NeXTStep 1.0–3.3 (1989–1995)
- OPENSTEP 4.0–4.2 (1996–1997)
- CMU Mach3
- OSF/1 (ab 1989)
- OSF MK, verbesserter CMU-Mach3-Kernel durch die Open Software Foundation
- OSF/1 (ab 1990) und dessen Nachfolger Tru64 UNIX (1993–2012)
- MkLinux (1996–2002) – Linux-Kernel als einzelner Task im Mach-Kernel
- Mach4, Weiterentwicklung durch die Universität von Utah
- GNU Mach, Weiterentwicklung von Mach4 durch das GNU-Projekt
- in Form von GNU Hurd, u. a.
- Debian GNU/Hurd (seit 1998)
- in Form von GNU Hurd, u. a.
- Mach-basiert (nur teilweise implementiert oder stark verändert), Beispiele:
Weblinks
Einzelnachweise
- Jason Wu, Dan Williams, Hakim Weatherspoon: Microkernels: Mach and L4. (PDF; 1,6 MB) S. 2, abgerufen am 12. August 2018 (englisch).
- Porting the Hurd to another microkernel. In: GNU Mach. GNU, 17. Februar 2015, abgerufen am 12. August 2018 (englisch): „…assuming that Mach is no longer considered state of the art…“
- Early beginnings. In: GNU Mach History. GNU, 18. Dezember 2016, abgerufen am 12. August 2018 (englisch).
- Amit Singh: What NeXT? The Mach Factor. Mach. In: kernelthread.org. Februar 2004, archiviert vom (nicht mehr online verfügbar) am 24. September 2018; abgerufen am 12. August 2018 (englisch): „Richard Rashid recounts that after a series of unsuccessful naming attempts, he came up with the name MUCK (Multiprocessor Universal Communication Kernel). One of his colleagues, Dario Giuse, who was Italian, inadvertently pronounced MUCK as ‘Mach’, and the name stuck.“ Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- Joseph Boykin, Alan Langerman: Mach/4.3BSD: A Conservative Approach To Parallelization. (PDF; 1,5 MB) In: Computing Systems, Vol. 3. Encore Computer Corporation, 1990, S. 2, abgerufen am 12. August 2018 (englisch): „The designers of Mach intend to produce a compact, efficient kernel on top of which may be layered interfaces for traditional operating systems such as 4.3BSD, System V, MS-DOS, VMS, etc.“
- Richard Rashid, u. a.: Mach: A System Software Kernel. (PDF; 13 kB) Carnegie Mellon University, Department of Computer Science, November 1988, S. 3, abgerufen am 7. Oktober 2018 (englisch, Abschnitt 4. Current Status).
- François Barbou des Places, Nick Stephen, Franklin D. Reynolds: Linux on the OSF Mach3 microkernel. OSF Research Institute, Grenoble and Cambridge, archiviert vom (nicht mehr online verfügbar) am 11. Februar 2012; abgerufen am 5. Oktober 2018 (englisch): „The OSF Research Institute has made significant improvements and extensions to the original CMU Mach3.0 microkernel, and the result, named OSF MK, is still available for free.“ Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- The Mach System. (PDF; 826 kB) Appendix B. In: unbekannt. Abgerufen am 12. August 2018 (englisch).
- OS/2 Warp, PowerPC Edition. The PowerPC adventure—by far the most exotic release of OS/2. In: OS/2 Museum. Abgerufen am 14. Dezember 2018 (englisch): „(OS/2 for PowerPCs System Overview) The product was based on the IBM microkernel, which was a refinement of the Carnegie Mellon University Mach microkernel. The microkernel bore no resemblance to the Intel OS/2 kernel whatsoever and it was also very different from most other operating systems of the time (NeXTSTEP was also based on the Mach microkernel).“