воскресенье, 10 мая 2015 г.

Alternative OS - Part 3: Hurd/Mach

Это часть содержит в основном историческую часть, которая нужна для общего понимания концепции альтернативных операционных систем. Также в этой части будет некоторый обзор основных концептуальных отличий смежных ОС от ОС с классической архитектурой.



В предыдущей части мы рассмотрели общую классификацию альтернативных операционных систем. Были указаны архитектурные отличия в общей части, а также кратко рассмотрены достоинства и недостатки каждой из трёх существующих архитектур.

В этой части мы будем более подробно рассматривать такое явления среди операционных систем как GNU Hurd/Mach.

Mach(англ. Mach)
Нельзя начинать рассказ не указав основу своей тематики, поэтому повествование мы начнем именно с ядра системы.
Mach была разработана как альтернативная версия ядра ОС для UNIX систем, используя новые концепции для того времени. Являясь продолжателем Accent, Mach положил основу для самого понятия микроядерной операционной системы, т.к. размер ядра был действительно мал по сравнению с имеющимся на тот момент UNIX-клонами.
Также основная заслуга Mach это обновление устаревшей концепции "всё файл" которая была основной для UNIX (и возведена в абсолют для таких архитектур как Inferno и Plan9). Замена была достаточно обоснованной т.к. старая архитектура не позволяло строить высокоэффективные приложения, без модификации ядра ОС.
Поэтому основной концепцией стало утверждение "всё поток" и в функционал ядра ложилось лишь планирование поток и управление их взаимодействием, а также по минимуму управление памятью (на уровне страниц и регионов) и взаимодействие с аппаратным обеспечением на самом низком уровне - BSP.
Mach также следовал концепции истинного микроядра - вынесение всех задач, а также драйверов из ядра операционной системы. Это позволяло разрабатывать систему на достаточно высоком уровне абстракции, где даже дравера устройств были не сложней чем обычные программы пользователя и их можно было отлаживать точно также как и обычные программы.
Вместе с этим также изменился подход к взаимодействию между программами и вообще процессами/потоками в системе (в терминологии Mach процесс это "задача"). Т.к. традиционный UNIX предусматривал каналы (Pipes), то архитекторы Mach решили дальше развить эту концепцию в то что сейчас называется IPC - передача коротких "сообщений" между потоками. Передачей этих сообщений занимается ядро. На них же и строится всё взаимодействие внутри ОС, включая служебные единицы синхронизации (барьеры, мьютексы и семафоры, а также условные единицы и п.р.).
Более подробную информацию вы можете узнать посетив соответствующие ссылки, мы сосредоточимся на основных характеристиках ядра, а точнее на недостатках такого подхода.

Самый главный недостаток данной системы это высокая плата за переключение контекста и вызов системных процедур, т.к. в их обработке участвует большая группа слоёв системы.
Следующим идёт невысокая скорость передачи сообщений, т.к. этим занимается само ядро.
Ну и в довершение - необходимость построения остальных компонентов системы, а также забота о синхронизации всей системы.

Не смотря на все эти недостатки Mach послужил основой для таких операционных систем как XNU (которая в последствии вылилась в Darwin - ядро для операционной системы Mac OS X). И данное ядро послужило примером для последующих разработок, таких как GNU Hurd, QNX.

GNU Hurd
На заре разработки свободного программного обеспечения, не было ядра операционной системы (Linux Kernel появился годами позже), поэтому остро стоял вопрос о разработке подходящего ядра ОС, которое бы могло заменить UNIX.
Ричард Столлман вместе с командой GNU создал ядро на основе Mach -  GNU Hurd. В этом ядре были собраны достаточно передовые концепции разработки ядра: сервисы которые взаимодействовали через тонкий интерфейс и трансляторы которые реализовывали основные понятия UNIX - каналы, файлы и прочее.
Вместе с этим данный подход позволял упрощать и ускорять разработку ПО, а также добавлял лёгкость параллелизма потоков, который вызывал определённые проблемы в классической UNIX системе.
Однако в виду сырости исходного кода, появление достаточного простого ядра Linux, технологические издержки Mach проект так и не  получил должного развития, не смотря на то что на данный момент существую два дистрибутива с ядром GNU Hurd - Debian GNU/Hurd и Arch Hurd.

Подытожив текущую часть хочется заметить, что ядро Mach в составе GNU Hurd является достаточно правильной концепцией (которая используется как в Darwin, так и в QNX) и позволяет увеличивать надёжность и расширяемость ОС без увеличения издержек на усложнение ПО. Недостатки выявленные при разработки микроядерных ОС были учтены как в ОС классических течений, так и в альтернативных ОС следующих поколений, о которых я расскажу в следующей части. А сейчас хочется добавить от себя как от бывшего участника и пользователя этого проекта (4 года назад по отношению к написанию этой части), что проект очень сыр и из-за потери идеологического лидера (Столлман ушёл из проекта в 2002 году) почти не развивается.

В следующей части я также затрону основные принципы построения высокомодульных систем и систем с распределённой архитектурой.