Про операционку MINIX

Воинствующие линуксоиды любят упирать на то, что благодаря принципу Open Source, они могут свободно изучать работу операционных систем на примере своего любимого Linux. Интересно, что может почерпнуть обычный среднестатистический программист из (примерно) 5 миллионов строк кода, из которых состоит так называемое “ядро” системы? Наверное, используя Linux, можно научиться только… использовать этот самый Linux, что само по себе тоже неплохо и даже иногда полезно, но имеет ровно то же отношение к “работе операционных систем”, что и кнопконажимательство в Windows.

Что бы там ни говорили фанаты Free Software Foundation, сегодняшний Linux – это абсолютно коммерческий проект с совершенно ясными целями, в которые совершенно не входит доступность ОС для изучения всеми желающими, а если и входит – то на предпоследнем месте (на последнем – увеличение капитала Билла Гейтса, естественно). Если бы я был Биллом Гейтсом и хотел бы окончательно задушить Linux – я бы начал бесплатно раздавать школьникам и студентам исходники, к примеру, Windows 2000 или XP (по своему “развитию” современный Linux примерно соответствует NT 5.0 или 5.1), естественно, с комплектом кривых драйверов :)

ИМХО, без нормального руководства изучить функционирование довольно сложной операционной системы “на самом нижнем уровне” практически невозможно. Так вот, проблема в том, что такое руководство для современного Linux написать не получится – с ним получилось то же самое, что с Unix в 90-е – он стал слишком сложен.

Кроме того, не будем забывать и о прикладных программах. Конечно, патчить KDE 2 под FreeBSD – тоже полезное умение, но ценное только для закоренелых “красноглазиков”. А ведь немалая часть “изучения” Linux или современных *BSD – это преодоление таких вот трудностей.

В общем, сойдемся на том, что так называемое “изучение функционирования ОС” на примере Linux невозможно. Многим оно, естественно, не нужно, но вот лично у меня нашлось некоторое количество условно свободного времени, которое захотелось потратить на чтение приличных книжек по так называемому “Computer Science” (от слов “информатика и вычислительная техника” веет страшными временами, когда Лаврентий Палыч Берия рулил разработкой первых советских ЭВМ :)). Когда-то давно я купил книжку Таненбаума, но так и не сподобился прочитать ее. А вот на днях зашел в википузию и узнал, что Таненбаум все еще жив, здоров и мелко гадит своим студентам, заставляя их отлаживать третью версию своей “передовой” (по мнению Таненбаума) операционки Minix 3, и даже подробно описал ее в книге “Операционные системы: разработка и реализация” (ядро Minix – это около 4 тысяч строк на C, плюс некоторое количество драйверов и т. п. – итого около 20 тысяч строк, вполне обозримо при наличии желания).

Чем интересен Minix, кроме своей “обозримости”? Таненбаум пытается реализовать в нем принцип микроядерной архитектуры, когда драйверы устройств представляют собой выполняемые в user-mode программы. Думаю, ни для кого не секрет, что синие экраны в Windows или kernel panic в Linux в подавляющем большинстве случаев вызваны ошибками в драйверах. Если драйвер работает в ring 0 (то есть без аппаратных блокировок некоторых губительных для ядра ОС действий), то ошибка в нем практически всегда является причиной сбоя всей системы. Продвигаемая Таненбаумом идея состоит в том, чтобы все драйвера устройств выполнялись с минимальными для их работы “правами”, не имея возможности обрушить всю систему разом.

Кстати, в Windows реализовано некоторое подобие “микроядра” (хотя применить слово “микро” к ядру Windows сложновато :)). Особенно хочется обратить внимание на Windows 7. Не буду говорить о том, что часть драйверов (minidriver в терминологии Microsoft) работает в пользовательском режиме во всех версиях Windows, а обращу внимание на довольно серьезное отличие “семерки” от предыдущих версий – Microsoft наконец вынес из пространства ядра видеодрайвер, теперь при его сбое просто погаснет экран, а затем картинка восстановится с уведомлением в правом нижнем углу – “Видеодрайвер был перезапущен, приносим свои извинения, тушите свет, сливайте воду”. UPD: Тут я набрехал, оказывается, видеодрайвер выполняется в user mode уже в Vista.

В общем, я отвлекся, скажу лишь, почему меня потянуло на операционные системы. Еще лет пять назад я извращался в эмуляторе Unreal Speccy, писал всякую чушь на ассемблере Z80. Например, наколбасил некое подобие “менеджера памяти”. Если кто-то не знает, ZX Spectrum – это семейство компьютеров на восьмиразрядном процессоре Z80. Этот процессор представляет собой клон Intel 8080 с некоторыми расширениями и был очень популярен в 80-е. Как тогда полагалось, Z80 имел 16-разрядную шину памяти и мог адресовать 64 кБ памяти (из 4 страниц по 16 кБ). Существовало два врианта ZX Spectrum. В первом младшие 16 кБ занимала “прошивка”, старшие представляли собой 48 килобайт оперативной памяти, довольно много для начала 80-х. В более поздних вариантах памяти было аж 128 килобайт, доступ к ним был организован довольно нетривиальным образом. Первые 16 килобайт занимала прошивка, затем шли 0 и 1 страницы памяти, в последние 16 килобайт можно было “вставить” любую из остальных страниц. В СССР и позднее – незалежной Рохляндии наши башковитые инженеры разработали несколько вариантов Spectrum-совместимых ПК, но на этом не остановились, а пошли дальше. Примерно таких же образом, через “окно” в памяти, разработчики клонов организовали доступ сначала к 256 кБ, а затем и к 1, 2 и 4 МБ ОЗУ. Существовало несколько “стандартов”, отличавшихся временем переключения страниц и способом доступа к ним. В общем, в порядке изучения ассемблера Z80, я реализовал “подпрограмму” перевода некоего трехбайтового “указателя” в двухбайтовый, загружающую в “окно” нужную страницу. Работала она на всех вариантах подключения дополнительной памяти, которые были реализованы в эмуляторе. В принципе, подобное чудо программирования можно назвать гордым словом “менеджер памяти” :) Было и несколько других “проектов”, уже на микроконтролерах, где приходилось как-то решать проблему с некоторым подобием “многозадачности” (обычно все сводилось к самой примитивной кооперативной многозадачности), так что тема эта мне немного знакома, хоть и в “игрушечном” варианте.

В общем, по жизни мне иногда приходилось сталкиваться с необходимостью реализации чего-то похожего на операционную систему – от переключения между несколькими задачами в микроконтролере PIC до пары более серьезных “изобретений велосипедов” на AVR. Программирование для микроконтролеров, конечно, довольно сильно отличается от программирования для “полноценных” компьютеров, но те же старшие AVR уже не уступают по параметрам тому же Spectrum, а в ближайшие пару лет станут доступны МК, на которых еще нельзя запустить Linux, но уже хочется какого-то подобия операционки. Вот так, окольными путями, меня и занесло в сторону Minix.

Что могу сказать? По удобству настройки и количеству софта Minix далеко позади любой другой современной ОС. Но “пощупать” его я решил не из-за этого, а из-за наличия неплохого описания его работы на самом “нижнем” уровне. В принципе, мне более-менее понравилась документация и я решил поставить операционку на завалявшийся у меня полуубитый винчестер (как-то не хочется мне связываться с мультизагрузчиками, так что пусть стоит совсем отдельно). В ходе установки оказалось, что по дефолту в операционке нет драйвера для моей сетевой карты (на самом деле есть, только в нем не прописаны нужные PCI Vendor и Device ID), поэтому потом я запустил сие чудо под Virtual PC.

Даже конченного виндузятника вроде меня не испугала перспектива оказаться наедине с консолью и компилятором C. Я писал программки в подобной среде, и не особо жаловался – даже находил некоторое извращенское удовольствие. Вывод ясен – дайте две!

Скриншот для порядку

Скриншот для порядку

Естественно, не все в Minix так плохо. Портировано довольно много юниксового софта, в том числе X11R6, несколько оконных менеджеров, gcc, браузеры links и lynx, десяток текстовых редакторов – короче говоря, половина пакетов в packman прекрасно заменяется другой половиной. Это очень юниксвейно – у пользователя всегда должен быть выбор, особенно – среди нескольких мало отличающихся текстовых редакторов :)

Конечно, времени “полапать” Minix со всех сторон у меня пока не было, но с запуском X и сетевого драйвера в виртуальной машине я разобрался. Компилятор компилит, а что еще нужно в юниксообразной ОС для счастья? Краткое резюме такое: Minix можно использовать для обучения студентов программированию (особенно, если настроить в компиляторе опцию “Treat warnings as errors”, кто помнит – смахнет скупую слезу), или, что практически эквивалентно, для удовлетворения собственного любопытства.

Любимый аргумент линуксоидов в холиваре “Windows vs Linux” – “Я свою тещу пересадил на Linux, сидит не нарадуется”. Думаю, с пересаживанием тещ на Minix придется подождать, но кое-какой набор софта там есть. Например, я попробовал:

- текстовый редактор elle – такой юниксвейный блокнот (elle looking like emacs), подсказка – для сохранения файла нажмите Ctrl+W (Write), для выхода – Ctrl+X два раза, потом Y.
- teTeX – обычный такой TeX, ничем не примечательный, прикручиваются русские шрифты, можно жить
- ACK – Amsterdam Compiler Kit – укуренный компилятор C, вроде как ANSI C-совместимый
- links – браузер, недалеко ушедший от Opera Mini или прочих “мобильных” браузеров, некий гибрид текстового и нормального браузеров. Шрифты говно.

В принципе, можно поставить сие чудо в компьютерном классе в каком-нибудь техническом ВУЗе, запереть там студентов и ждать самозарождения всяких там линуксов. Можно даже положить на полочку какие-нибудь полезные книжки (пару руководств по ANSI C, плюс талмуд Таненбаума). Система вполне “ковырябельна”, баги есть, что еще нужно для счастья программиста-мазохиста?

PS Кстати, как известно, я ненавижу школьников и преподавателей информатики. Так что надо задуматься по поводу “школьного миникса”, срубить кучу денег с гой-сударства и лично депутата Алксниса, а потом окончательно поработить мир :) Вот вам и про садистское применение Minix.

PPS Кстати, вроде как есть несколько проектов по портированию Minix на архитектуру ARM. Вот тогда заживем! :)

31 комментарий

  1. [info]cupol пишет:

    Ну ты этот… Достоевский.

  2. DI HALT пишет:

    А я тут скоро буду FreeRTOS курить. А то на ARM заехал, а мебели никакой :)

  3. [info]radarytch пишет:

    Спасибо за пост, пригодится. Спасибо.

    Шура, а за “Хайку” что скажешь(серьезно)?

  4. antsnark пишет:

    http://www.sics.se/contiki/

    может будет интересно с познавательной точки зрения :)

  5. antsnark пишет:

    и немного оффтопик: USB под DOS
    U S B – Support for Turbo-Pascal
    http://sgu-wap.narod.ru/DIFF/HUBDISC.rar

    Интерфейс USB. Практика использования и программирования.

    http://sgu-wap.narod.ru/DIFF/Interface_USB_.part1.rar
    http://sgu-wap.narod.ru/DIFF/Interface_USB_.part2.rar

    • User007 пишет:

      Ну а толку с вашего USB для доса? Сколько там под дос драйверов и для какого оборудования есть? Ну вот мой FTDI232 подцепится? В Linux например это выглядит так: воткнули девайс – отрос /dev/ttyUSB0 ака “виртуальный компорт”. Плагнплей полный, можно работать с девайсом не отвлекаясь на всякие побочные сущности. Ну и так далее.

  6. iprog пишет:

    Да, помню когда-то давно решил посмотреть ядро линукса, и меня чуть не стошнило. А в minix’е всё было чисто и понятно, очень хороший код (тогда ещё был просто minix, а не minix 3).

  7. user пишет:

    похоже автор не понимает разницы между “изучать архитектуру ОС” и “писать свою ОС”. Вы когда-нибудь работали в сфере образования? Вы знаете что такое теория? Я вам открою секрет: Для изучения ОС вообще не нужно изучать ни одной строчки кода!

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

    Танненбаум конечно молодец, но его замечательная ОС Minix до сих пор не может побороть тормоза при работе ядра с драйверами. А он над ней бьется уже не первый год :)
    Я пару месяцев назад даже ставил ее на VirtualBox, но после того как посетил форум и увидел количество и частоту постов понял, что пока 3 миллиарда евро не дойдут до автора никаких движений не будет.

    p.s. для непонявших повторяю еще раз – писать красивый код и разрабатывать архитектуру любой системы это разные вещи. И просмор 5 миллионов строк кода нужны только в первом случае.

  8. User007 пишет:

    Minix хорош как учебное пособие. Проблема только в том что это наглядное пособие … о том как НЕ НАДО писать операционки и как НЕ НАДО управлять проектами. Всем в назидание. Мистер Торвальдс писал свою операционку, начав ее писать под Minix-ом. И где сейчас Minix, а где Linux? Первый так и остался учебным пособием. Второй пригоден для реального повседневного юзежа, чему подтверждение – эта ОС :). Запустить операционку в виртуалочке – круто. А на реальном железе как – слабо? Сколько процентов железа миникс там узреет, с учетом того что в нем только недавно сделали виртуальную память? :) Кроме того – у микроядерных систем есть один минус: они ТОРМОЗНЫЕ. А вы думали, переключать контексты в режим ядра и обратно – это нахаляву? А вот и хрен вам. Это довольно неторопливая операция у большинства CPU. Вот и получается что чисто-микроядерные системы никому не нужны. Ну, кроме тех кто управляет реакторами разве что. Остальных устраивает надежность хоть того же линукса. Ну вот например у меня сервак стоит – аптайм 130 дней. Если он и будет перезагружен – то для установки свежего ядра, а вовсе не потому что паника случится. И вообще, микроядро при адаптации к реальной жизни становится макосью и вин нт. Так называемыми “гибридными ядрами”, где предприняты меры для устранения тормознутости идеального сферического микроядра в вакууме. В итоге конечно же получается монструозный уродец. Ничем таким особо не лучше монолитно-модульного линукса/бсд. А вывод простой: или красивый экспонат, или уж для работы в реальном мире, на реальном железе.

    • На реальном железе – работает замечательно. Клавиатура, VESA-видеокарта, мышка (хотя второй и третий пункты – больше заслуга X11), сетевая карта – тоже нормально. Все остальное – shut up and hack. При наличии неограниченного количества человекочасов имеющиеся в системе инструменты позволят написать любой драйвер к любому железу :)

      Насчет аптайма – это крайне косвенный показатель надежности. Если компьютер включить и не трогать, то за некоторое время набежит очень хороший аптайм, можно даже с кем-нибудь мериться. А при работе пользователя “средней криворукости” – аптайм может составлять менее суток, как раз по причине глюков в kernel mode. Два примера:

      - В Windows некоторые версии Agnitum Outpost Firewall (он устанавливает в систему драйвер режима ядра) регулярно вызывали вылеты в “синий экран”.
      - Чтоб линуксоиды не обижались – в “школьном” ALT Linux лично наблюдал kernel panic при всовывании-высовывании флешки.

  9. SyncMaster 913n пишет:

    Линукс не всегда был большим, не знаю возможно ли изучить работу его первых версий.

  10. sangre пишет:

    вроде как есть несколько проектов по портированию Minix на архитектуру ARM
    где можно посмотреть? есть ссылы?

  11. оказывается, видеодрайвер выполняется в user mode уже в Vista.- Курим здесь http://ru.wikipedia.org/wiki/Direct3D_10

Ответить

Или воспользуйтесь входом по OpenID: