
Есть ли у Darwin какие-то особенности, характерные только для него? Есть ли у других Unix-ов особенности, которых нет у Darwin?
решение1
OS X — единственная оставшаяся операционная системана основе микроядра Machчто также все еще актуально с коммерческой точки зрения. Есть несколько текущих исследовательских проектов и устаревших ОС, которые, без сомнения, все еще используются в производственных условиях на старых машинах, но ничего такого, что вы могли бы пойти и купить на новой машине сегодня.
OS X имеет обычный набор несовместимостей функций ядра, которые есть у любого *ix. Самая большая из тех, с которыми мне недавно пришлось иметь дело, это отсутствиеОчереди сообщений System V. ( msgget(2)
и друзья.) Нам пришлось заменить наш код очереди сообщений — который был написан для «реального» варианта System V и позже перенесен на Linux — на TCP/IP, чтобы наше программное обеспечение работало на OS X. Для нашего приложения различия между этими двумя методами IPC имели значение в то время, когда мы сделали выбор в пользу очередей сообщений, но из-за более поздних архитектурных изменений переход на TCP/IP оказался не такой уж большой проблемой.
решение2
Если говорить вкратце, разве Darwin не является всего лишь тонким слоем BSD поверх Mach 2.0?
Раньше я пользовался NeXTStep, не знаю, насколько нынешняя MacOSX отличается от NeXTStep, но...
Mach 2.0 предлагал другой набор абстракций на уровне ядра:
- «Задача»: это адресное пространство + набор «портов», возможно, с запущенным в нем потоком.
- Потоки. Это была планируемая единица выполнения. Задача (адресное пространство) могла иметь более 1 запущенного в ней потока. Я считаю, что файлы Mach-O (формат исполняемых файлов Mach) могли указывать более одного потока во время выполнения процесса: нет функции main(), которая запускала бы больше потоков Cthreads, ОС запускала бы один.
- Порты. Они не похожи на порты TCP или UDP. Они были типизированными, упорядоченными потоками сообщений. Скорее RPC-подобными. Вы составляли файл спецификации протокола, затем пропускали его через компилятор, чтобы получить заглушки на стороне сервера и клиента, процедуры маршалинга и демаршалинга и т. д.
- Пейджеры памяти на уровне пользователя. Вы можете настроить задачу+поток для обработки страниц адресных пространств других задач.
Первоначальные разработчики CMU Mach использовали эти абстракции дляподражатьПроцессы BSD Unix, процессы MS-DOS и в сказочном припадке чудачества задачи VMS. Каждая задача VMS занимала 2 задачи Mach, плюс много потоков. Кто-то продавал эмулятор Mac OS (до OSX) для NeXTStep, который использовал пейджеры пользовательского пространства с хорошим эффектом.
Старая страница публикаций CMU Mach: http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/documents_top.html
Статья VMS-on-Mach: http://www.sture.ch/vms/Usenix_VMS-on-Mach.pdf
решение3
Это не совсем ответ, но,DTrace— великолепный инструмент отладки системы, существующий для Solaris, Darwin/OS X и *BSD, но не для Linux.
решение4
Я думаю, лучше всего описать Дарвина как еще одногоразновидность UNIX. Solaris — один. HP/UX — другой. Есть многоболее, может быть, не такие "громкие", но они есть. И у каждого вкуса есть своя специфика. Вот почему вообще есть вкусы. Какая-то компания придумывает что-то, что поможет это продать (или просто работать с этим или даже администрировать), и создает это и дает ему свое имя.