
Verfügt Darwin über irgendwelche spezifischen Funktionen? Verfügen andere Unix-Systeme über Funktionen, die Darwin fehlen?
Antwort1
OS X ist das einzige verbleibende Betriebssystembasierend auf dem Mach-Mikrokernelwas auch immer noch kommerziell relevant ist. Es gibt einige laufende Forschungsprojekte und veraltete Betriebssysteme, die zweifellos immer noch in Produktionsumgebungen auf alten Maschinen verwendet werden, aber nichts, was man heute auf einer neuen Maschine kaufen kann.
OS X hat die üblichen Inkompatibilitäten mit Kernel-Features, die jedes *ix hat. Das größte Problem, das ich zuletzt umgehen musste, ist der Mangel anSystem V-Nachrichtenwarteschlangen. ( msgget(2)
und Freunde.) Wir mussten unseren Nachrichtenwarteschlangencode – der für eine „echte“ System V-Variante geschrieben und später auf Linux portiert wurde – durch TCP/IP ersetzen, damit unsere Software auf OS X lief. Für unsere Anwendung waren die Unterschiede zwischen diesen beiden IPC-Methoden zu dem Zeitpunkt von Bedeutung, als wir uns für Nachrichtenwarteschlangen entschieden, aber aufgrund späterer Architekturänderungen war der Wechsel zu TCP/IP letztendlich keine große Sache.
Antwort2
Ist Darwin im Grunde nicht nur eine dünne BSD-Schicht über Mach 2.0?
Früher habe ich NeXTStep verwendet. Ich weiß nicht, wie sehr das aktuelle MacOSX von NeXTStep abweicht, aber ...
Mach 2.0 bot einen anderen Satz von Abstraktionen auf Kernelebene:
- Eine „Aufgabe“: das ist ein Adressraum + eine Reihe von „Ports“, möglicherweise mit einem darin laufenden Thread.
- Threads. Dies war die planbare Ausführungseinheit. In einer Aufgabe (Adressraum) konnte mehr als eine ausgeführt werden. Ich glaube, dass Mach-O-Dateien (Machs ausführbares Dateiformat) zur Laufzeit des Prozesses mehr als einen Thread angeben konnten: keine main()-Funktion, die mehrere Cthreads startete, das Betriebssystem würde einen starten.
- Ports. Diese sind nicht wie TCP- oder UDP-Ports. Sie waren typisierte, geordnete Nachrichtenströme. Eher RPC-ähnlich. Sie haben eine Protokollspezifikationsdatei erstellt und diese dann durch einen Compiler laufen lassen, um Server- und Client-seitige Stubs, Marshalling- und Unmarshalling-Routinen usw. zu erhalten.
- Speicherpager auf Benutzerebene. Sie können einen Task+Thread einrichten, um das Paging der Adressräume anderer Tasks zu handhaben.
Die ursprünglichen CMU Mach-Leute nutzten diese Abstraktionen, umemulieren, nacheifernBSD-Unix-Prozesse, MS-DOS-Prozesse und, in einem sagenhaften Anfall von Verrücktheit, VMS-Aufgaben. Jede VMS-Aufgabe nahm 2 Mach-Aufgaben plus viele Threads in Anspruch. Jemand verkaufte einmal einen Mac OS-Emulator (vor OSX) für NeXTStep, der die User-Space-Pager mit gutem Erfolg nutzte.
Die alte CMU Mach-Publikationsseite: http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/documents_top.html
Das VMS-on-Mach-Papier: http://www.sture.ch/vms/Usenix_VMS-on-Mach.pdf
Antwort3
Das ist zwar keine richtige Antwort, aberDTraceist ein fantastisches System-Debugging-Tool, das für Solaris, Darwin/OS X und *BSD, aber nicht für Linux existiert.
Antwort4
Ich denke, man kann Darwin am besten als einen weiterenGeschmack von UNIX. Solaris ist eines. HP/UX ist ein anderes. Es gibt vielemehr, vielleicht nicht so „prominent“, aber es gibt sie. Und jede Geschmacksrichtung hat ihre eigenen Besonderheiten. Deshalb gibt es ja überhaupt Geschmacksrichtungen. Irgendein Unternehmen denkt sich etwas aus, das dabei hilft, sie zu verkaufen (oder einfach damit zu arbeiten oder sie sogar zu verwalten), erstellt sie und gibt ihr einen eigenen Namen.