Представитель Шуры Люберецкого в ЖЖ (brat_luber) wrote,
Представитель Шуры Люберецкого в ЖЖ
brat_luber

Category:

Про операционку 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. Вот тогда заживем! :)

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Tags: миникс, новости и обзоры софта
Subscribe

  • И почему я не удивлен?

    По-моему, если человек ездит по городу на велосипеде – то инстинкт самосохранения у него отсутствует напрочь. Запись опубликована в…

  • Невыполнимые правила

    Ознакомился с забавной темкой на хабре – мужик возмущается, что при “переводе денег” на его карту в чеке распечатываются данные…

  • Про “братьев Навального”

    Знаете, а я верю в то, что задержанные на квартире в Москве “братья Навального” к его штабу отношения не имеют. Только дурак мог…

Comments for this post were disabled by the author