LXF130:DrBrown3

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

Мини-Linux

Без Minix, наверное, не было бы и Linux. Рассмотрим же его.

Микроядро, как в Minix, выносит как можно большую функциональность в пространство пользователя и дает более компактное ядро. Объем его кода в Minix всего 4000 строк.

Линус Торвальдс писал исходное ядро Linux под впечатлением от другой Unix­подобной системы, Minix, созданной Эндрю Таненбаумом [Andrew Tanenbaum]. Торвальдсу был знаком Minix, поскольку он первоначально пользовался им как платформой для разработки ядра Linux. И, несомненно, на него повлияла книга Таненбаума «Операционные системы: разработка и реализация»: Торвальдс называл ее «книгой, которая подняла меня на новые высоты». Нельзя сказать, что архитектура Minix нравилась ему на 100 % – вообще­то он относился к ней довольно критически. Почитайте, например, книгу Линуса Торвальдса и Дэвида Даймонда [David Diamond] «Just for FUN. Рассказ нечаянного революционера» или споры Торвальдса и Таненбаума по адресу http://www.dina.dk/~abraham/Linus_vs_Tanenbaum.html. Minix создавался в основном как средство для обучения. Еще в 1987 году Таненбаум (профессор факультета вычислительной техники университета Врейе в Амстердаме) хотел создать операционную систему, которая бы иллюстрировала принципы его книги и которой мог­ли бы пользоваться его студенты.

Довольно долго я имел об этом слабое понятие, пока случайный поиск в Google не привел меня на http://www.minix3.org. Я и не подозревал, что Minix все еще в активной разработке. Оказывается, в 2008 году Таненбаум получил грант в 2,5 млн евро на продолжение развития Minix, и последний релиз вышел в ноябре 2009 года. Minix 3 продолжает играть роль ОС, которую студенты могут расчленить на составляющие, но у него есть и другие цели. Цитирую сайт: «Он примерно основан на предыдущих версиях Minix, но отличается по многим ключевым вопросам. Minix 1 и Minix 2 создавались как средства для обучения, Minix 3 намерен стать полноценной системой для компьютеров с ограниченными ресурсами и встраиваемых, а также для приложений, требующих высокой надежности».

Где­то в другом месте Таненбаум написал: «Minix 3 – это не Minix вашего дедушки. Minix 1 создавался как средство для обучения и все еще широко используется в университетах как таковое. Minix 3 – то же самое плюс отправная точка построения высоконадежной самовосстанавливающейся нераздутой ОС, наверное, подходящей для таких проектов, как стодолларовый ноутбук в помощь детям стран третьего мира или встраиваемая система. Minix 1 и Minix 3 объединяет то же, что и Windows 3.1 и Windows XP – первое слово в названии».

Кто хочет сам поиграть с Minix, загрузите сжатый ISO­-образ с сайта http://www.minix3.org/download. Он распространяется по BSD­-подобной лицензии. CD работает в режиме Live, и вы получите определенное представление о легкости Minix, когда увидите, что командная строка загрузится менее чем за три секунды. После старта системы нетрудно установить ее на жесткий диск.

Низкие требования

Требования к аппаратной части минимальны: стандартная система работает на 16 МБ ОЗУ, а на 1 ГБ дискового пространства умещается весь дистрибутив, включая исходные коды. Поддерживается несколько сетевых карт, но на данный момент нет поддержки Wi­Fi, USB и FireWire. Я установил ее на виртуальную машину VMWare, и она прекрасно работала.

Загрузка Minix – возвращение в более спокойные, простые и в общем более интересные времена начала эпохи Linux и Unix, когда вся схема легко укладывалась в голове. А может, моя голова тогда была больше. Пользователям Linux Minix покажется довольно знакомым, по крайней мере в командной строке: это POSIX­-совместимая ОС, и в нее были портированы многие классические утилиты – ls, Cron, GCC, Perl, SSH, file, find, sort, mount, Vi, grep и прочие. В /usr/bin в общей сложности 338 команд, и многие вы узнаете (сравните с 2048 в моем Ubuntu). Архитектура файловой системы Minix тоже покажется вам весьма знакомой.

А под капотом между Minix и Linux имеются заметные отличия. Например, в Minix единственный дисковый раздел делится на «слайсы», и им даются имена по схеме, похожей на принятую в Solaris. Например, первый диск на первом контроллере будет /dev/c0d0, а первый раздел на этом диске – /dev/c0d0p0. В терминах Linux это были бы /dev/sda и /dev/sda1 соответственно. Сласы именуются как /dev/c0d0p0s1. В Linux нет концепции слайсов, применяемой в Minix.

Более существенное различие между Minix и Linux в том, что архитектура первой построена на основе микроядра. Само ядро предоставляет обработчики прерываний, способ запуска и остановки процессов, планировщик, основы межпроцессной коммуникации, но ничего более. Большая часть функционала, который в Linux находится в ядре, реализована в Minix в пространстве пользователя. Это драйверы устройств, файловая система, стек протоколов TCP/IP и даже высокоуровневое управление памятью. В пространстве пользователя вы увидите процессы для VFS (виртуальной файловой системы), TTY (драйвера терминала) и DS (сервера хранилища данных). Это фундаментальное различие в архитектуре, и здесь взгляды Торвальдса и Таненбаума определенно не сходятся (см. «Типы ядра» и «Что входит в ядро?»). Чтобы вы представили себе масштаб этого различия, скажу, что в ядре Minix 3 около 4000 строк кода, а в ядре Linux 2.6.32 – около 12 млн. Пока вы не начали возмущаться, соглашусь, что это не совсем корректное сравнение размера двух ОС. Но оно иллюстрирует компактность ядра Minix.

Упакуйте это

Minix с оконным менеджером Twm, Xterm, программой для оповещения о новых письмах и Xeyes. По-вашему, он выглядит примитивно? Зато работает на 8 МБ ОЗУ.


В Minix есть примитивный менеджер пакетов Packman. Это сценарий оболочки, и его пользовательский интерфейс довольно громоздок. Зависимостей у него нет, и устанавливается пакет простым копированием архива с CD (или с сайта Minix http://www.minix3.org/packages/i386) и его распаковкой. Архивы с исходным кодом также доступны по адресу http://www.minix3.org/software, и Packman спрашивает, хотите ли вы их установить.

Также есть работающий X­-сервер и два оконных менедже­ра. Первый из них, Twm, сокращение от Tab Window Manager, появился в 1987 году и по сегодняшним меркам довольно примитивен, но в свое время был прорывом. Второй, Ede (Equinox Desktop Environment), выглядит чуть современнее, но все так же легок и быстр. Не ждите от Minix последних новшеств – если вы гони­тесь за этим, вы попали не туда. Minix далеко до всеохватности и элегантности Linux, но он и не пытается таким быть.

Итак, здесь меньше утилит, система управления пакетами примитивна, рабочий стол – древний; в чем же привлекательность Minix? Ну, для разработчика он гораздо проще и доступнее Linux. Например, для повторной сборки и установки опера­ционной системы и всех утилит достаточно двух команд:

#cd /usr/src
#make world

В нашей тестовой системе это заняло минуты три. Не представляю, сколько тут ушло бы времени в Linux, но подозреваю, что займись этим Моцарт, он бы без труда написал пару симфоний, дожидаясь завершения.

Но шутки в сторону: Minix допускает анализ исходного кода реальной операционной системы без вывихивания мозгов. И если вас по­настоящему вдохновили его возможности, взгляните на несколько проектов на http://wiki.minix3.org/en/StudentProjects и прикиньте, как будет смотреться ваша фамилия с приставкой «к.т.н.» или «д­р».

Загружая Minix, я довольно внезапно ощутил беспомощность, сообразив, что не понимаю, как сделать многие простые вещи. Я не знал, как изменить IP-­адрес моего сетевого интерфейса или как назначить сервисы, стартующие во время загрузки. Это напомнило мне неуверенность, которую я испытывал в первые дни работы с Linux, и послужило уместным уроком того, что к новичкам в Linux нужно относиться с огромным терпением и уважением.

Что входит в ядро?

Коды, выполняемые «в привилегированном режиме» (ядро) и «в пространстве пользователя», серьезно различаются. Но что относится к ядру, и что – к пространству пользователя? Есть определенный минимум вещей, которые должны выполняться в привилегированном режиме: низкоуровневое управление памятью, обработка прерыва­ний, планирование процессов и некое минимальное межпроцессное взаимодействие [IPC]. На другом конце шкалы, по общему мнению, находятся пользовательские приложения типа Bash и Firefox – они принадлежат к пространству пользователя. Однако между ними есть «серые зоны». Как насчет библиотеки математических функций, сервера NFS, стека TCP/IP, кода управления доступом, драйверов устройств или файловой системы ext3?

В истории разработки Linux вы найдете примеры, когда те или иные вещи пересекали границу между пространством пользователя и пространством ядра. NFS изначально была демоном в пространстве пользователя, а потом переместилась в ядро. С другой стороны, относительно новая технология Fuse позволяет реализовать в пространстве пользователя файловые системы, обычно принадлежащие ядру.

Архитектуре микроядра посвящен большой объем исследовательской литературы, который вы вряд ли захотите осваивать, если только не пишете главу об истории архитектуры операционной системы в своей диссертации. Тогда загляните на сайт http://en.wikipedia.org/wiki/Microkernel.

Типы ядра

Термин «монолитное ядро» означает две разные вещи, и по этому поводу у меня однажды была запальчивая дискуссия с сертифицированным архитектором Red Hat. В контексте сравнения Minix с Linux монолитное ядро означает, что вся операционная система выполняется в ядре, в отличие от микроядра. Но в последние годы в мире Linux термин «монолитное ядро» начал означать, что весь код ядра статически скомпонован в один исполняемый образ. Такая схема отличается от модульного ядра, многие возможности которого реализованы в динамических модулях, подгружаемых по требованию. В этом смысле слова ранние версии ядра Linux были монолитными, а все последние версии – модульные. Динамическая загрузка модуля, реализующего файловую систему в пространстве ядра (как в Linux), отличается от ее реализации в виде сервиса в пространстве пользователя в Minix.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию