Открыть сервис

Ядро Mach

Ядро Mach — это микроядро операционной системы, разработанное в Университете Карнеги — Меллон (США) в рамках проекта Mach. Оно было создано как замена ядра BSD Unix и предназначалось для обеспечения поддержки распределённых вычислений, многопроцессорности и безопасности. Основной особенностью Mach является минималистичный подход: ядро выполняет только базовые функции управления процессами, потоками, памятью и межпроцессным взаимодействием, в то время как остальные сервисы (файловые системы, сетевые протоколы, драйверы устройств) реализуются на уровне пользовательских процессов. Это отличает Mach от монолитных ядер, таких как ядро Linux, и делает его классическим примером микроядерной архитектуры.

История

Разработка Mach началась в 1985 году в Университете Карнеги — Меллон под руководством Ричарда Рашида (Richard Rashid) и Авива Теваниана (Avie Tevanian). Проект финансировался Агентством перспективных исследовательских проектов Министерства обороны США (DARPA) и Национальным научным фондом (NSF). Целью было создание операционной системы, способной эффективно работать на многопроцессорных системах и поддерживать распределённые вычисления, что было актуально для исследовательских и военных задач.

Первая версия, Mach 1.0, была выпущена в 1986 году и представляла собой модифицированное ядро 4.3BSD Unix. Она сохраняла совместимость с BSD, но добавляла новые механизмы, такие как поддержка потоков и межпроцессное взаимодействие через порты. В 1987 году вышла Mach 2.0, которая уже включала полноценную микроядерную архитектуру: большая часть кода Unix была вынесена в пользовательское пространство, а ядро выполняло только минимальные функции.

В 1990 году была выпущена Mach 3.0, ставшая наиболее известной версией. Она полностью отделила ядро от Unix-совместимой оболочки, что позволило запускать на базе Mach различные операционные системы, включая BSD, System V и даже Windows NT. Mach 3.0 стала основой для нескольких коммерческих и исследовательских проектов, включая операционную систему NeXTSTEP (позже macOS) и GNU Hurd.

После 1994 года разработка оригинального Mach в Университете Карнеги — Меллон была прекращена, однако его идеи и код были использованы в других проектах. В 1997 году компания Apple приобрела NeXT, и Mach стал основой для ядра XNU (X is Not Unix), используемого в macOS и iOS. В настоящее время Mach продолжает развиваться в составе XNU, хотя его архитектура была значительно модифицирована.

Архитектура

Ядро Mach построено на принципе микроядра: оно предоставляет только четыре базовых механизма:

  • Управление задачами и потоками: задача (task) — это контейнер для ресурсов (адресное пространство, права доступа), а поток (thread) — единица выполнения внутри задачи. Mach поддерживает вытесняющую многозадачность и симметричную многопроцессорность (SMP).
  • Управление памятью: виртуальная память с поддержкой страничной организации, отображения файлов в память (memory-mapped files) и разделяемой памяти между задачами. Mach использует механизм «внешнего менеджера памяти» (external memory manager), который позволяет пользовательским процессам управлять подкачкой страниц.
  • Межпроцессное взаимодействие (IPC): основным механизмом IPC являются порты (ports) и сообщения (messages). Каждый порт — это защищённая очередь сообщений, управляемая ядром. Задачи могут отправлять сообщения в порты и получать из них, что позволяет реализовать клиент-серверную архитектуру.
  • Управление устройствами: в оригинальном Mach драйверы устройств выполнялись в пользовательском пространстве, что повышало надёжность системы, но снижало производительность. В более поздних реализациях (например, в XNU) часть драйверов была возвращена в ядро.

Все остальные функции, такие как файловые системы, сетевые протоколы, планировщики задач и системные вызовы, реализуются в виде серверов, работающих в пользовательском режиме. Это делает ядро Mach компактным (обычно менее 100 КБ) и потенциально более безопасным, так как ошибки в серверах не приводят к краху всего ядра.

Версии

Mach 1.0 и 2.0

Первые версии были экспериментальными и использовались в основном в академических целях. Mach 2.0 представила микроядерную архитектуру, но сохранила совместимость с BSD через модуль «Unix-сервер».

Mach 3.0

Наиболее значимая версия, выпущенная в 1990 году. Она полностью отделила ядро от Unix, что позволило запускать на одной системе несколько «персоналий» (personalities) — эмуляций различных операционных систем. Mach 3.0 использовалась в проектах OSF/1 (Open Software Foundation) и GNU Hurd.

Mach 4.0 и 4.1

Версии, разработанные в 1990-х годах в Университете Юты и других учреждениях. Они добавили поддержку новых архитектур (например, PowerPC) и улучшили производительность IPC. Mach 4.1 стала основой для проекта L4, который впоследствии привёл к созданию более быстрых микроядер.

XNU (macOS и iOS)

Ядро XNU, используемое в операционных системах Apple, основано на Mach 3.0, но включает в себя компоненты из FreeBSD и собственные разработки Apple. В XNU Mach отвечает за управление потоками, памятью и IPC, а BSD-слой предоставляет файловые системы, сетевые протоколы и системные вызовы POSIX. Драйверы устройств в XNU реализованы в виде модулей ядра (kexts), что отходит от чистой микроядерной архитектуры.

GNU Hurd

Проект GNU Hurd, начатый в 1990 году, ставил целью создание свободной операционной системы на основе микроядра Mach. Hurd использует Mach 3.0 (позже — GNU Mach) и реализует Unix-совместимую оболочку в виде набора серверов. Однако проект остаётся незавершённым и не получил широкого распространения.

Применение

Ядро Mach и его производные используются в следующих операционных системах:

  • macOS и iOS: ядро XNU, основанное на Mach, является основой всех операционных систем Apple. Оно обеспечивает поддержку многозадачности, безопасности и графического интерфейса.
  • NeXTSTEP: операционная система компании NeXT, основанная на Mach 2.5 и 3.0. NeXTSTEP стала предшественником macOS.
  • OSF/1: операционная система Open Software Foundation, использовавшая Mach 3.0. Была коммерчески доступна на платформах DEC Alpha и Intel.
  • GNU Hurd: экспериментальная операционная система, разрабатываемая в рамках проекта GNU. Несмотря на долгую историю, Hurd не достигла стабильности, достаточной для массового использования.
  • Research Unix: некоторые исследовательские версии Unix, такие как 4.4BSD, использовали компоненты Mach для поддержки многопроцессорности.

Критика

Микроядерная архитектура Mach подвергалась критике за низкую производительность по сравнению с монолитными ядрами. Основные проблемы:

  • Высокие накладные расходы на IPC: каждое взаимодействие между серверами требует переключения контекста и копирования данных, что замедляет работу системы.
  • Сложность реализации: разработка серверов для файловых систем, драйверов и сетевых протоколов в пользовательском пространстве требует больше усилий, чем в монолитном ядре.
  • Проблемы с совместимостью: из-за отличий в архитектуре Mach не всегда удавалось полностью эмулировать поведение Unix, что приводило к ошибкам в приложениях.

В 1990-х годах эти недостатки привели к тому, что коммерческие проекты (например, OSF/1) отказались от Mach в пользу монолитных ядер. Однако идеи Mach повлияли на развитие операционных систем: многие современные микроядра (L4, seL4) используют его концепции, но с улучшенной производительностью.

Интересные факты

  • Название «Mach» не является аббревиатурой; оно было выбрано в честь физика Эрнста Маха, известного работами в области аэродинамики.
  • Разработчики Mach использовали язык программирования C, а также ассемблер для низкоуровневых операций.
  • Ядро Mach стало одной из первых операционных систем, поддерживающих симметричную многопроцессорность (SMP) на стандартных аппаратных платформах.
  • В 1990-х годах на основе Mach была создана операционная система MkLinux, предназначенная для работы на компьютерах Macintosh с процессорами PowerPC.

Источники

  • Rashid, R. F., et al. «Mach: A System Software Kernel». Proceedings of the 1986 ACM Fall Joint Computer Conference, 1986.
  • Accetta, M., et al. «Mach: A New Kernel Foundation for UNIX Development». Proceedings of the USENIX Summer Conference, 1986.
  • Black, D. L. «Scheduling Support for Concurrency and Parallelism in the Mach Operating System». IEEE Computer, 1990.
  • «The Mach Project». Carnegie Mellon University, School of Computer Science, 1994.
  • «XNU: The Kernel of macOS and iOS». Apple Inc., документация разработчика.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →