Информационные технологииStfw.Ru 🔍

Minix: можете считать ее «студебекером»

Начиная новую статью, удержать себя от дичайшей банальности просто невозможно. Поэтому стесняться не буду: мы все очень и очень разные. Андрей Зубинский
🕛 16.12.2005, 05:34
Начиная новую статью, удержать себя от дичайшей банальности просто невозможно. Поэтому стесняться не буду: мы все очень и очень разные. Нам могут казаться невероятной тупостью шутки «не нашего» кино, мы охотно откликаемся на знакомое «не виноватая я...», и ничто не может поколебать нашей уверенности в том, что последняя фраза несоизмеримо умнее всех «не наших» шуток...

- Можете считать нашу машину «студебекером», - сказал Остап злобно, - но до сих пор она называлась «лорен-дитрих». Вы удовлетворены?
И. Ильф, Е. Петров

Операционной системе MINIX «повезло» примерно так же, как и упомянутым выше чуждым шуткам. Но с одним немаловажным уточнением: MINIX стала этакой интернациональной «не нашей шуткой». Интернациональной в том смысле, что ее «чуждость» не знает никаких «национальных» границ - она чужда всем. Она равно чужда и огромной нации «виндузятников», и растущей народности «пингвиноидов», и вырождающимся племенам «юниксоидов». Потому что «виндузятникам» она безразлична, «пингвиноиды» о ней вроде как слышали, а «юниксоиды», в том числе и редкие разработчики той же Linux и клонов ОС UNIX, MINIX в свое время непременно изучали, но сочли ее «чуждой». MINIX - это, если хотите, анекдот из мира операционных систем.

И вот этот самый анекдот, который в приличном обществе и рассказать-то стыдно, вернулся к нам, обросший изрядной бородой, - в третьем издании. Пропустить такое событие было бы просто непозволительно. Тем более что обновленная ОС MINIX стала несоизмеримо доступнее предшествующих версий - теперь с ней, как всегда распространяющейся в исходных текстах, можно делать все, что заблагорассудится. Запрещены разве что самые мелочи: судиться с разработчиками «костяка» системы по любым поводам вроде «...а мне вот не нравится...» и «...а почему вы не...» да не упоминать этих самых разработчиков в собственных надстройках над «костяком». В остальном - полная свобода. Создавайте свои системы на основе кода MINIX, закрывайте их исходные тексты, продавайте получившееся налево и направо. Никаких проблем. Кроме того, в скором времени MINIX третьей версии обретет традиционное сопровождение - третье же издание знаменитой в узких кругах книги «Операционные системы: проектирование и реализация» («Operation Systems: Design and Implementation»). Но даже без этой книги (предварительная цена которой будет впечатляющей для неофитов - без доллара сто) MINIX, безусловно, интересна сама по себе. Хотя бы в силу идеальной пригодности системы к освоению. Ведь MINIX - это Pascal из мира операционных систем. Да-да, тот самый «уродливый», «убогий» Pascal, язык, «совершенно неприемлемый для решения реальных задач». В то же время тот самый Pascal, ставший и учебной партой сотен тысяч высококлассных программистов, и идеологической основой создания десятков мощных инструментов разработки программного обеспечения. Впрочем, всему свое время.

Прежде чем мы начнем движение дальше, позволю себе сделать небольшое вступительное попурри из переводов различных источников. Тем, кто их читал (желательно в оригинале), указывать на происхождение цитат нет нужды: слишком уж они узнаваемы. Ну а тем, кому MINIX внове, нет смысла загромождать и без того непростой текст многочисленными ссылками по двум причинам. Во-первых, маловероятно, что вам захочется пройти по «MINIX way» существенно дальше этой статьи. Во-вторых, если даже случится маловероятное и вы все-таки решите двигаться дальше, поиск необходимой информации будет настолько прост, что избыточный расход бумаги на ссылки кажется преступным.

Когда ОС UNIX была еще молода (Version 6), ее исходные тексты были широко распространены на основе лицензии AT&T и тщательно изучались. Насколько тщательно, позволяет судить следующий факт: Джон Лайонс из университета Нового Южного Уэльса в Австралии написал небольшую книгу, в которой объяснялось функционирование ОС со степенью детализации... в одну строку кода. Как вы думаете, в каком году это было? В 1976! Почти тридцать лет назад книга Лайонса, которая циркулировала в распечатках по университетам, разжевывала всем желающим работу UNIX V6 на уровне каждой строки кода. А всего этих строк было почти девять тысяч. В те времена детальное объяснение всей «адской механики» UNIX помещалось на скромных двухстах страницах.

Но в книге Лайонса, выдержавшей шесть изданий (последнее - в 2000 г.), сегодня интересно не столько детальное описание функционирования ядра ОС UNIX, сколько... ее изначально подпольный или даже партизанский характер. Ведь Lion's Commentary on UNIX 6th Edition, with Source Code (именно так называется книга) более двадцати лет (!), до 1998 г. она... официально не издавалась. Дело в том, что с появлением ОС UNIX Version 7 в AT&T наконец осознали, что эта система вовсе не потешная (равно как не были потешными и ее предшественницы), и корпорация взяла курс на коммерциализацию разработки. Соответственно, начался период коммерческих секретов, исходные тексты UNIX уже не распространялись по университетам за $50. Более того, с выходом Version 7 изучение исходных текстов UNIX на университетских курсах системного ПО и ОС вообще было запрещено. Но рукописи не горят. Для книги Лайонса была найдена новая, ограниченная, читательская аудитория: компании-партнеры AT&T, имевшие лицензионное право доступа к исходным текстам ОС.

О двадцатилетнем периоде нелегальности в судьбе книги вы наверняка догадываетесь - раз есть интеллектуальный ресурс, который сравнительно легко скопировать и на который есть сравнительно высокой спрос, значит... В общем, все это значит, что книга «Lion's Commentary on UNIX 6th Edition, with Source Code» почти сразу после своего написания стала тем, что сегодня принято называть страшным словом «варез» (warez). Именно так, и никак иначе. На «варезной» книге Лайонса за двадцать лет буквально выросли десятки (и десятки ли?) тысяч системных программистов. Тех самых программистов, благодаря которым современные UNIX-подобные ОС, по большому счету, вообще существуют (о дальнейшей судьбе этой книги в местах скопления «линуксоидов» говорить опасно для здоровья - достаточно упомянуть, что ее первое официальное издание увидело свет благодаря усилиям, не к ночи будь упомянутой, SCO).

Впрочем, хакерство и «варез» - дела сугубо персональные, университетским кафедрам заниматься ими негоже. Но когда после появления UNIX Version 7 университеты потеряли легально доступное учебное пособие, в программах курсов образовались дыры. Заполнить их надо было быстро и без утраты качества подготовки будущих специалистов. Задача не из простых - кому-то из университетской профессуры надо было «поспорить» своими персональными знаниями и бюджетом со специалистами и бюджетом знаменитой Bell Labs. Весовые категории, согласитесь, далеко не равные...
В Греции все есть, в Голландии все уже было

- Позвольте... но ведь в пробеге нет никаких «лорен-дитрихов»! Я читал в газете, что идут два «паккарда», два «фиата» и один «студебекер».
И. Ильф, Е. Петров
Прадед Эндрю Танненбаума в 1914 г. уехал из маленького старинного городка Хоростков. Нынешний Хоростков так и остался маленьким красивым городком Гусятинского района Тернопольской области с населением 7600 человек. И все-таки Эндрю Танненбаум, никогда не видевший Хоросткова, не забывает своих давних корней - он является координатором проекта «Chorostkow Book»

Есть такая хорошая американская шутка: если вы узнали, что завтра будет конец света, то постарайтесь сегодня же попасть в Голландию. Потому как в Голландии он уже был дней двадцать назад. Так вот, когда вышла UNIX Version 7 и до маленького локального конца света на кафедрах системного программного обеспечения остался этот самый последний день, пришла пора заглянуть в Голландию. А там, как будто по заказу, некто Эндрю Танненбаум, голландец украинско-американского происхождения, уже создал практически идеальный заменитель UNIX Version 6 для учебного процесса. Причем в одиночку. И дополнил свое детище самым необходимым для того, чтобы разработку можно было считать профессиональной, - великолепной документацией, детально описывающей не просто механику функционирования системы, а идеи, лежащие в основе ее построения, логику выбора используемых структур данных и алгоритмов. Операционная система была названа им MINIX, и слышимые в этом слове отзвуки UNIX в какой-то мере обоснованны: Эндрю Танненбаум много времени провел в знаменитой Bell Labs, общаясь там с отцами-основателями UNIX, как говорится, на короткой ноге. По воспоминаниям самого Танненбаума, когда он работал в Bell Labs, он останавливался не в гостинице, а у Роба Пайка. В свою очередь, Деннис Ричи и Питер Уэйнбергер, посещая Амстердам, также предпочитали погостить у Танненбаума. Однако в Bell Labs Танненбаум занимался вовсе не операционными системами, а компиляторами, и, опять же, со слов самого Танненбаума, никто из лаборатории 1127 (той самой, в которой создавалась UNIX) не делился с ним сокровенными тайнами о том, как устроена и работает UNIX. Побудили Танненбаума к написанию MINIX два события - об одном мы уже говорили (запрет на использование исходных текстов UNIX Version 6 в учебном процессе), а вот второе... Вторым было обычное академическое мальчишество - Танненбаум вспомнил и принял вызов Батлера Лэмпсона из университета Беркли, любившего донимать своих студентов фразами вроде «...Ну если никто не может написать операционную систему за месяц, значит, тут собрались одни тупицы...». В общем, Танненбаум написал за месяц костяк новой ОС, в какой-то мере UNIX-подобной, и началась история недолгого триумфа MINIX. На пике своей славы эта маленькая ОС объединяла активное сообщество из более чем 40 тыс. разработчиков - именно разработчиков, потому как использовать полуигрушечную систему вначале можно было разве что вместо конструктора «Сделай сам свою UNIX». Один примечательный исторический факт обычно остается вне внимания пишущих о MINIX. Речь идет о лицензировании. MINIX изначально распространялась как «довесок» к книге «Операционные системы: проектирование и реализация» Танненбаума. Права на книгу и сопутствующие материалы принадлежали издателю - компании Prentice-Hall. В ней относились к MINIX как к коммерческому продукту - пятидискетные дистрибутивы ранних версий системы продавались по цене $60. Цифра эта была более чем либеральной - стоимость коммерческой лицензии UNIX для учебных заведений в те времена достигала 30 тыс. долл. И MINIX сопровождалась исходными текстами, что давало возможность разработчикам законно распространять фрагменты кода с модификациями, а системе - развиваться.

Итак, до краткого знакомства с MINIX остается объяснить разве что неслучайность цитат. Прочитав следующий раздел статьи, вы сами решите, насколько похожа на «студебекер» (т. е. насколько UNIX-подобна) «лорен-дитрих» разработки Эндрю Танненбаума (MINIX).
MINIX 3

- Идите к чертовой матери со своим «студебекером»! - заорал Остап... Русским языком ему говорят, что «студебекер» в последний момент заменен «лорен-дитрихом», а он морочит голову!
И. Ильф, Е. Петров

Доступная сегодня обновленная ОС MINIX третьей редакции была анонсирована 24 октября этого года самим Танненбаумом на симпозиуме знаменитой ACM (Association for Computing Machinery) по операционным системам. Современная классификация ОС помещает MINIX 3 в горячо обсуждаемый, но представленный крайне небольшим числом реально работающих систем класс «чистых микроядерных» ОС. Здесь сразу следует сделать маленькое отступление, объясняющее принципы такой классификации.

Критериями, на основании которых классифицируются ОС, являются сложность и количество абстракций, формируемых ядрами этих систем. В ОС с монолитным ядром абстракции всех сервисов и ресурсов, предлагаемых пользователю и программам операционной системой, овеществлены в одной неделимой программе. Эта программа выполняется машиной в специальном привилегированном режиме и, естественно, называется «монолитным ядром». Большинство популярных на сегодняшний день ОС относятся именно к этому классу - Microsoft Windows, UNIX-подобные системы (в том числе ОС Linux и клоны BSD). В полноценных «микроядерных» ОС, напротив, в привилегированном режиме выполняется программа, овеществляющая минимальный набор абстракций, и в идеале - абстракций ресурсов. Реализации всего остального, в том числе и сервисов, выполняются обычными клиентскими программами, не имеющими никаких привилегий. Гибридные «микроядерные» ОС - дань жестким требованиям реального мира к производительности. В этих ОС за критичными сервисами оставляют право исполнения в привилегированном режиме для общего повышения производительности системы. Наиболее яркий и известный образчик гибридной «микроядерной» ОС - знаменитая система реального времени QNX.

Уточняя особенности MINIX 3, следует указать, что это «многосерверная» ОС, что говорит о формировании ее набором взаимодействующих программ-серверов. Ближайшая по идеологии MINIX 3 разработка - многосерверная, микроядерная и вечно не выходящая из бета-стадии развития ОС GNU Hurd.

Главная особенность MINIX 3 - сокращение до минимума разработчиками списка серверов, функционирующих в привилегированном режиме. А точнее, до одного. Так, все драйверы MINIX 3 - обычные, пользовательского класса, программы. Это одновременно и хорошо, и плохо. Хорошо тем, что в результате сокращения числа привилегированных программ система получается надежнее - «упавший» драйвер в ней не вызывает никаких фатальных последствий, равно как и «упавшая» прикладная программа. Плохо же тем, что за всякое улучшение надо платить, и расплатой здесь является снижение производительности ОС в целом, вызванное необходимостью реализации, на первый взгляд, весьма ресурсоемких механизмов «общения» привилегированного микроядра и непривилегированных серверов. Однако это только на первый взгляд. Разработчики MINIX 3 на ранних этапах проектирования системы построили и исследовали математические модели, позволяющие достаточно точно изучить снижение производительности, вызванное спецификой архитектуры системы. Оказалось, что по сравнению с ОС с монолитным ядром MINIX 3 теряет всего лишь на 0,5% процессорного времени больше из-за «общения» между микроядром и программами-серверами.

В отличие от многих игрушечных микроядерных систем, MINIX 3 обеспечивает все необходимые механизмы для динамического запуска непривилегированных системных серверов в ходе работы ОС. Решение такой задачи далеко не тривиально. Микроядро MINIX, например, и понятия не имеет о существовании сервера, овеществляющего сетевые абстракции. Для микроядра этот сервер ничем не отличается от текстового редактора. Соответственно и запуск сервера ничем не отличается от запуска последнего. Для некритических к производительности сетевых протоколов сервер сетевых абстракций может продолжать выполняться в непривилегированном режиме. Но если расход 0,5% процессорного времени недопустим, создатель сервера вправе воспользоваться предоставляемой микроядром возможностью перевода программ в привилегированный режим.

Основа «общения» между серверами и микроядром MINIX 3 - механизмы межпроцессных взаимодействий (IPC, InterProcess Communication). Как и во многих клиент-серверных системах, здесь эти механизмы строятся на основе принципа передачи сообщений, а точнее, принципа рандеву. Принцип рандеву - это синхронный двунаправленный обмен сообщениями без всякого промежуточного буферирования: процесс, готовый к взаимодействию, останавливается и ожидает готовности своего «собеседника». Когда оба «собеседника» готовы к взаимодействию, сообщения копируются из областей памяти отправителя в области памяти получателя, и оба процесса продолжают исполнение. Эта идеализированная модель, простая в реализации, в MINIX 3 также «подогнана» под требования реальности. Так, от потенциально опасной двунаправленности механизма обмена сообщениями разработчики отказались, кроме того, в MINIX установлена стройная система прав выбора абонента в процедурах «общения» с помощью IPC, действительная для каждого отдельного процесса системы.

Нескольких слов заслуживает и исключительно важная для оценки возможностей любой ОС характеристика механизма системных вызовов. Речь идет об одной важной особенности - так называемой блокировке ядра при обработке системного вызова. С одной стороны, базовая ОС MINIX 3 не обеспечивает асинхронных вызовов микроядра (мы только что говорили о принципиально синхронных механизмах IPC), с другой - в системе есть все необходимое для реализации полной асинхронности. Сделано это для того, чтобы MINIX не усложнялась и не теряла своего «учебного» потенциала.

Для обеспечения способности ОС реагировать на асинхронные события в MINIX 3 реализован так называемый механизм оповещения (notify), работающий как в привилегированном, так и пользовательском режиме. Особенность этого механизма - изящное решение задачи передачи сообщений без блокирования подсистем ОС и без буферирования. В качестве примера его работы можно привести последовательность событий в ОС MINIX 3, вызываемых нажатием пользователем одной из функциональных клавиш F1-F7. Для ОС это событие, естественно, асинхронное. Оно вызывает аппаратное прерывание, специальное оповещение о котором отправляется микроядром соответствующему драйверу - консоли, превращающему машинный код нажатой клавиши в более понятный системе код. У этого драйвера есть персональная таблица допущенных к «общению» с ним серверов. Драйвер оповещает разрешенный «информационный сервер» о событии. «Информационный сервер» имеет право «общаться» с привилегированным микроядром - у него он запрашивает системную информацию (об использовании памяти, выполняющихся процессах и т. д., в зависимости от нажатой клавиши). Получив затребованное, «информационный сервер» инициирует рандеву с драйвером консоли и передает последнему полученную от микроядра информацию, которую драйвер и отображает на экране. Все взаимодействия в этом примере осуществлялись исключительно с помощью двух механизмов: асинхронных оповещений и синхронной однонаправленной передачи сообщений «в момент встречи» (рандеву) двух процессов.

В перечне непривилегированных серверов MINIX 3 кроме упомянутого уже «информационного сервера», поставляющего на пользовательский уровень данные о состоянии микроядра, в системе лишены привилегий сервер памяти, управляющий физической оперативной памятью и памятью привилегированного режима, сервер часов реального времени, серверы жестких и гибких дисков, устройств печати и консоли.

Все эти «удовольствия» в MINIX 3 получены очень малой кровью. Ядро системы уже можно смело называть полноценным «микро-»: оно реализовано всего 7,5 тыс. строк C-кода. Для сравнения: сложность канонического гибридного «микроядра» Mach 3 оценивается 75 тыс. строк.

Насколько POSIX-совместимая MINIX 3 схожа с UNIX - решать вам самим. Да и схожесть, на самом деле, неважна. Эта изящная система сегодня уже не «учебная парта», а вполне самостоятельная и привлекательная для ряда специфических применений ОС. Так, вероятнее всего, разработчики встраиваемых систем первыми оценят ее по достоинству - ведь до 24 октября 2005 г. никаких Open Source альтернатив великолепной, но такой недешевой QNX, просто не существовало. Вам же самим и решать, продолжить ли дальнейшее знакомство с MINIX 3 и стоит ли эта совершенно неоснащенная в пользовательском смысле ОС затрат вашего времени. Если вы все же решитесь, - на сайте проекта доступен ее полный дистрибутив, распространяемый, в том числе, и в виде образа CD-ROM, пригодного к загрузке и содержащего все необходимое для разработки программ.

Разное в ИТ   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉