История операционных систем Apple. Часть 8

История операционных систем Apple. Часть 1
История операционных систем Apple. Часть 2
История операционных систем Apple. Часть 3
История операционных систем Apple. Часть 4
История операционных систем Apple. Часть 5
История операционных систем Apple. Часть 6
История операционных систем Apple. Часть 7

Вместе с операционной системой NeXT на свет также появилось ядро Mach, которое впоследствии послужило фундаментом для операционных систем Apple. Наш рассказ об истории зарождения Mac OS был бы неполным, если бы мы кратко не поведали о происхождении и эволюции Mach.

История операционных систем Apple. Часть 8. Фото.

Rochester Intelligent Gateway

В 1975 году группа исследователей Университета Рочестера (штат Нью-Йорк) начала разработку «интеллектуального шлюза, получившего название RIG (Rochester Intelligent Gateway). RIG был призван предоставить унифицированный доступ (например, при помощи терминалов) к различным вычислительным средствам – как локальным, так и удаленным. Локальными средствами могли стать подключенные диски, магнитные ленты, принтеры, планшеты, компьютеры пакетной обработки, компьютеры с разделением времени и т.д. Доступ к удаленным устройствам мог быть доступен при помощи таких сетей как ARPANET. Операционная система RIG, получившая название Aleph, работала на миникомпьютере Data General Eclipse (фото ниже).

История операционных систем Apple. Часть 8. Rochester Intelligent Gateway. Фото.

Ядро Aleph было построено на базе междупроцессной коммуникации (IPC). Процессы RIG могли отсылать друг другу сообщения, когда направление указывалось номером процесса или номером порта. Порт представлял собой очередь сообщений внутри ядра, обозначенную тем же кортежем { process #, port # }. Процесс мог иметь несколько портов, определенных внутри его самого. Каждый из них мог использоваться для того, чтобы ждать, когда на него поступит сообщение. Процесс X мог «оттенить» другой процесс Y (X получает копию каждого сообщения, отсылаемого на Y), либо X мог «вмешиваться» в Y (X перехватывает все сообщения, отправляемые на Y или поступающие с него).

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

Accent

Одним из разработчиков RIG являлся инженер Ричард Рашид (Richard Rashid). В 1979 году он перешел в Университет Carnegie Mellon, где работал над созданием Accent – сетевого ядра операционной системы. Как и RIG, ядро Accent в качестве базового инструмента структурирования также использовало IPC. В то же время в Accent были исправлены некоторые недостатки RIG: теперь порты получили «способности», а для обеспечения передачи крупных сообщений использовалось картографирование памяти. Сообщения могли отсылаться процессам на другой машине посредством промежуточного процесса. Accent оснащался гибкой и мощной системой управления виртуальной памятью, которая была интегрирована в IPC и хранилище файлов.

Ядро Accent было разработано таким образом, чтобы поддерживать два проекта в области распределенных вычислений: Spice (распределенные персональные вычисления) и DSN (отказоустойчивая распределенная сенсорная сеть). Accent был назван в честь продукта (приправы), продававшегося компанией Accent Inc. Единственным ингредиентом этого продукта являлся глутамат натрия (MSG). В мире компьютеров эта аббревиатура обычно расшифровывалась как «message» — «сообщение».

Accent. Ричард Рашид. Фото.

Ричард Рашид

Через несколько лет будущее Accent представлялось уже не таким многообещающим. Ядро нуждалось в новой аппаратной базе, включая поддержку мультипроцессоров и возможности портирования на различные устройства. Кроме того, Accent имел проблемы с поддержкой программного обеспечения Unix.

Mach

Следующая инкарнация Accent получила название Mach. Когда была разработана система Mach, UNIX уже успел отметить 15-летний юбилей своего зарождения. Хотя разработчики Mach соглашались с тем, что UNIX является очень значимой и очень полезной платформой, в то же время они отмечали, что UNIX уже не отличается былой легкостью и простотой настройки. Ричард Рашид однажды назвал UNIX «свалкой, на которой оказываются практически все появляющиеся новые функции и службы».

В целом цель создания Mach состояла в реагировании на неуклонно увеличивавшуюся сложность и запутанность UNIX. В частности, при разработке системы создатели поставили перед собой задачу добиться следующего:

  • Полная поддержка мультипроцессинга.
  • Использование других функций современных аппаратных архитектур, которые появлялись в то время. Mac была рассчитана на поддержку различных архитектур, включая схемы общего доступа к памяти, в числе которых память с неунифицированным доступом (NUMA) и память с неудаленным доступом (NORMA).
  • Поддержка прозрачных и незаметно работающих распределительных операций.
  • Сокращение количества функций ядра, что должно было сделать его менее сложным и дать программисту возможность воспользоваться при работе очень малым количеством абстракций. В то же время абстракции должны были иметь достаточно общий характер для того, чтобы позволить разрабатывать на базе Mach несколько операционных систем.
  • Полная совместимость с UNIX.
  • Исправлены недостатки предыдущих систем, таких как Accent.

При разработке Mach в качестве начальной кодовой базы использовалась 4.3BSD. При создании ядер передачи сообщений разработчики Mach обращались к  RIG и Accent. Операционная система Tenex Operating System компании DEC была взята за основу для получения идей относительно создания подсистемы виртуальной памяти Mach. В процессе эволюции Mach части ядра BSD были заменены их эквивалентами из Mach, а также было добавлено несколько других компонентов.

Когда в 1986 году вышла первая корпоративная газета Apple, система называлась «новым ядром-фундаментом для разработки на базе UNIX». И хотя далеко не все смотрели на вещи именно так, Mach в конечном итоге стала довольно успешной операционной системой. К тому же в заголовке газеты фразу «New Kernel» также можно было прочитать «NuKernel».

Интересная история была связана с возникновением названия операционной системы Ричард Рашид вспоминает, что после серии неудачных попыток дать своему детищу имя он решил назвать систему MUCK (Multiprocessor Universal Communication Kernel – мультипроцессорное универсальное коммуникационное ядро). А один из его коллег, итальянец Дарио Джузе (Dario Giuse), неумышленно произносил MUCK как «Mach». В конце концов этот вариант понравился разработчикам больше, и решили оставить его.

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

  • Задача – это контейнер для ресурсов (виртуальная память, порты, процессоры) одного или более процессов.
  • Операция – это базовая единица исполнения. Одна задача может иметь несколько операций. Задача предлагает среду исполнения, в то время как операции непосредственно запускаются. Различные операции задачи делят ее ресурсы, хотя каждая операция имеет собственное состояние исполнения (программный счетчик и другие виды учета).
  • Порт аналогичен портам в Accent. В очереди сообщений внутри ядра с возможностями он формирует основу межпроцессной коммуникации в Mach.
  • Сообщение – это коллекция данных, которые операции в одной или двух разных задачах, либо в одной и той же задаче, могут посылать друг другу при использовании портов.

Еще одной базовой абстракцией Mach стал объект памяти. Объект памяти можно рассматривать как контейнер данных (включая данные о файлах), который встроен в адресное пространство задания. Mach требовалось устройство управления ограниченной (PMMU); к тому же эта система предлагала отличный интерфейс для независимых от машины средств MMU посредством интерфейса pmap. Подсистема виртуальной памяти была призвана поддерживать большие, рассеянные виртуальные адресные пространства и была интегрирована с IPC. В отличие от традиционного UNIX, который подразумевал наличие смежных пространств виртуальной памяти (количество которых постоянно росло, делая систему все более захламленной), Mach позволял использование рассеянных адресных пространств, где участки памяти могли размещаться где угодно в адресном пространстве. Память могла читаться и писаться совместно, в рамках структурного подхода. Кроме того, могло использоваться копирование при записи (COW) как для разделения памяти для задачи, так и для оптимизации копировальных операций. Обобщенная абстракция объекта памяти позволяла использовать «внешние» (вне ядра, в пространстве пользователя) страницы памяти (чтобы обрабатывать ошибки на страницах и запросы на откачку страниц из оперативной памяти данная величина), которые могли базироваться даже на другой машине.

История операционных систем Apple. Часть 8. Mach. Фото.

Важное решение состояло в том, чтобы распространять все программное обеспечение Mach бесплатно, без каких-либо авторских отчислений, при неограниченном лицензировании. Mach не предлагал (и изначально не подразумевал наличия) никаких инструментов ввода-вывода, сетевых служб или файловой системы. Он задумывался как платформа, на базе которой следовало создавать операционную систему. Разработчики надеялись, что это поможет сделать все намного проще и повысить портативность операционных систем. Предполагалось, что реальная операционная система будет выполнять задачи Mach на уровне пользователя. Версия Mach 2.0, а также еще более успешная версия 2.5 обладали монолитными системами: BSD и Mach располагались в одном и том же адресном пространстве. Версия 2.5 использовалась Фондом открытого программного обеспечения (Open Software Foundation (OSF)) в качестве базового ядра для их операционной системы OSF/1. Линейка 2.x также послужила основой для таких систем как Mt. Xinu, NEXTSTEP, OPENSTEP, Omron LUNA/88k, Multimax (Encore) и др.

Проект по разработке Mach 3 стартовал в университете Carnegie Mellon и впоследствии был продолжен в OSF. Это была первая версия с «настоящим микроядром» в том смысле, что BSD запускался в качестве пользовательского пространства задачи Mach, причем только фундаментальные функции выполнялись ядром Mach. Многие операционные системы были портированы на концептуальную «виртуальную машину», созданную на базе Mach API. Кроме того, несколько операционных систем пользовательского режима имели возможность выполнять команды на базе Mach.

Симметричная многосерверная операционная система Mach-US состоит из набора серверов, предлагающих общие системные службы и библиотеку, которая загружена в каждый пользовательский процесс. Примеры общих услуг включают в себя управление файлами, управление терминалами, локальную межпроцессную коммуникацию, управление процессами, сетевые службы и управление устройствами. Эмуляционная библиотека, или множественные библиотеки, используют общие службы для эмуляции различных операционных системы посредством перехвата системных вызовов для каждого процесса и перенаправления их на соответствующие эмуляционные службы. Эмуляторы Mach доступны для различных версий BSD, DOS, OSF/1, SVR4, VMS, OS/2, операционной системы Macintosh, HPUX и так далее.

В число других обновлений и усовершенствований Mach 3.0 входили следующие:

  • Поддержка работы в реальном времени (переключение ядра и платформа планирования в реальном времени)
  • Поддержка устройств низкого уровня (устройства, представленные как порты, на которые могли отправляться данные или контрольные сообщения, при поддержке синхронного и асинхронного ввода-вывода)
  • Полностью видоизмененная реализация IPC
  • Перенаправление системных вызовов (комплект системных вызовов мог обрабатываться кодом в пользовательском пространстве, запускаясь с задачей вызова)
  • Использование продолжений – функция ядра, которая предоставляла операции возможность блокироваться посредством указания функции (функции продолжения), которую можно будет вызвать при запуске операции

Кстати, Ричард Рашид после этого перешел в корпорацию Microsoft, где занял пост отдел разработок. Еще один создатель Mach по имени Ави Теванян (Avie Tevanian) остался в Apple и впоследствии стал топ-менеджером по разработке программных технологий.

MkLinux

История операционных систем Apple. Часть 8. MkLinux. Фото.

Apple и OSF начали проект по разработке порта Linux, предназначенного для различных платформ Power Macintosh, на которых использовалась версия Mach, созданная OSF. В результате разработки было создано ядро под названием «osfmk», а получившаяся система получила наименование MkLinux. Первая версия этого «Linux на базе Mach», основанной на Mach и Linux 1.3.x, вышла в свет в начале 1996 года под названием MkLinux DR1. В более новых версиях системы уже использовалась платформа Linux 2.0.x и новей. Один из релизов также стал частью Apple Reference Release. Стоит отметить, что в MkLinux использован односерверный подход: монолитное ядро Linux работает как одна задача Mach. Mac OS X в качестве своей основы использует osfmk (а частью ядра при этом является BSD) и включает в себя множество функций, появившихся в системе с выходом MkLinux. Организация OSF вскоре была переименована в Open Group, а затем – в Silicomp.

Музыкальные названия операционных систем

Стратегия Apple в сфере операционных систем после приобретения NeXT носила двойственный характер. С одной стороны компания планировала продолжить совершенствовать Mac OS для рынка потребительских компьютеров, а с другой – создавать новую высокопроизводительную операционную систему под названием Rhapsody, основанную на технологии от NeXT. Главным образом, Rhapsody была рассчитана на рынок серверных машин и корпоративный сегмент.

Отказавшись от цветовых аберраций, таких как Pink и Red, компания Apple также решила сменить курс в выборе кодовых обозначений для своих проектов операционных систем. Так, системы Copland и Gerswhin были названы в честь знаменитых американских композиторов Аарона Копланда и Джорджа Гершвина. Что касается Rhapsody, то эта система была названа в честь произведения того же Гершвина «Рапсодия в стиле блюз» (Rhapsody in Blues).