…а точнее, о криворукости СУПа, у меня, похоже, завершилось нашествие польских спамеров. Так что открою я сейчас комменты, а с утра посмотрю на результат.
Месяц: Апрель 2011
Экскурсия по исходникам MINIX 3
Что-то я не возвращался к теме запуска разных извращенных ОС на разном извращенном железе, впрочем, на то были свои причины. Если кто еще помнит, я грозился начать портировать MINIX 3 на вогоплеер. Разобрался с toolchain, собрал «железку» — и на этом надолго остановился. Сейчас появилось немного свободного времени, поэтому я и решил написать немножечко о том, что мне предстоит.
В качестве базовой версии я взял MINIX 3.1.8 r8398 — стабильную на начало марта версию. Все дальнейшие разговоры будут вестись именно о ней. Сразу предупрежу (или напомню), что пишу я «для себя», поэтому все эти очень заумные тексты могут содержать кучу намеренных ошибок и/или искренних заблуждений :)
Итак, каждый, кто установил Minix, или хотя бы загрузился с его компакт-диска, может увидеть там директорию /usr/src, в которой и собраны все исходники ОС. Пробежимся по поддиректориям.
benchmarks — разнообразные тесты производительности. Не трогаем.
boot — начальный загрузчик ОС. Очень специфический, предназначен исключительно для IBM PC-совместимых компьютеров. Я планирую использовать вместо него U-Boot.
commands — исходники программ стандартного POSIX-окружения. Предполагаю, что вполне себе кроссплатформенные. Без наличия работающего ядра и серверов бесполезны, не трогаем.
docs — два несчастных текстовых файлика.
drivers — драйверы различной периферии. Абсолютно необходимы из них драйвер консоли (tty), RAM-диска (memory), и системного журнала (log). Остальные отвечают за всякую ерунду — аудио- и сетевые карты, разного рода дисковые интерфейсы и прочую фигню, существующую исключительно на PC.
etc — эта директория превращается в /etc «работающей» системы. В основном содержит конфигурационные файлы. Некоторые из них отражают загружаемые драйверы и сервисы — соответственно, они должны приводиться в «актуальное» состояние. В общем, исправлять по необходимости.
include — разнообразные заголовочные файлы, в основном — стандартная библиотека Си, но есть одна очень важная поддиректория minix. Как нетрудно догадаться, содержит специфичные для Minix определения. Беглый взгляд на нее показывает, что многие файлы там не менялись с 1990-х годов, и в них предусмотрено существование трех различных архитектур. В других, более новых файлах, встречаются x86-специфические вещи. За этим надо внимательно проследить. Кроме того, нельзя забывать про директорию arch, появившуюся сравнительно недавно и предназначенную для «архитектурно-зависимых» вещей.
kernel — видимо, большая часть работы будет происходить именно тут. Это и есть ядро системы, и именно его придется запускать первым. К счастью, объем его не очень велик, и немалая часть кода в нем «переносима». Архитектурные зависимости вынесены в поддиректорию arch (возможно, лишь частично). Судя по коду, сделаны попытки «архитектурно-зависимые» части сделать условно-компилируемыми.
lib — всевозможные библиотеки — от libc до какого-нибудь libaudiodriver. Возможно, что придется довольно серьезно «ковырять» некоторые из них, в первую очередь — libc. Это не радует.
man — страницы документации. Не трогаем.
servers — серверы, они же — службы. Большинство из них необходимы для работы системы. Правда, по опыту мужичка, портировавшего MINIX 2.0.4 на самопальный процессор, они достаточно переносимы. Вторая после ядра часть системы, над которой придется работать.
share — интерес представляет поддиректория mk, в которой лежат некоторые makefile-ы, честно упертые разработчиками Minix из NetBSD. Сразу обращу внимание, что эти файлы немного подправлены, например, во многих явно указана архитектура i386 — а нам надо mipsel. Надо разобраться с их содержимым и при необходимости исправить и дополнить.
test — тесты, показывающие работоспособность POSIX-системы. Разумеется, переносимые, и трогать их не надо.
tools — разного рода вспомогательные утилиты для сборки загрузочного образа. Естественно, что предназначены только для PC.
Дополню это небольшим отступлением по поводу истории MINIX. Первая версия этой ОС была написана Энди Таненбаумом, когда фирма AT&T увидела, что разработанная ее специалистами операционная система UNIX превратилась из игрушки в «продаваемый» продукт. После этого исходники UNIX были «закрыты», а преподавание традиционного для американских университетов курса по архитектуре ОС превратилось в «сухое плавание». MINIX — это Mini-UNIX, то есть внешне похожая на тогдашний UNIX операционная система, но работавшая на сравнительно дешевых IBM PC. Эта версия прилагалась к первому изданию книге Таненбаума «Операционные системы: разработка и реализация», вышедшему в 1987 году. В начале 90-х MINIX активно дорабатывали, а Таненбаум активно «отпихивал» все предлагаемые изменения, утверждая, что хочет сохранить исходный код ОС компактным и доступным для изучения. Собственно, благодаря такой позиции Таненбаума и родился Linux — там «отцы-основатели» включали в ядро все предлагаемые нововведения. В 1991 году вышла версия MINIX, позже получившая индекс 1.5 — в ней появилась поддержка других процессоров (Motorola 68000 и SPARC) и основанных на них популярных тогда «персоналок». Второе издание учебника Таненбаума тоже включало в себя MINIX, но, разумеется, версии 2. В нем исчезла поддержка процессоров Motorola, а x86 и SPARC остались.
Современная версия MINIX, MINIX 3, была анонсирована в 2005 году. Изначально — это существенная переработка MINIX 2.0.4, выполненная студентом Таненбаума Йорритом Хердером (Jorrit Herder) в его дипломной работе. В третьей версии из пространства ядра вынесено все, кроме самых важных компонент (даже управление памятью и приоритетами процессов теперь выполняются в user-space). Тем не менее, после чтения тезисов Хердера (Towards a True Microkernel Operating System) явно прослеживается преемственность между версиями.
Эта преемственность мне явно пригодится — один из «отчетов» о портировании MINIX на новую для него архитектуру написан о версии 2.0.4. Я его уже упоминал, приведу ссылку еще раз:
http://www.homebrewcpu.com/minix_port.htm
Кроме того, нельзя не упомянуть и о том, что в 2006 году Ингмар Альтинг (Ingmar Alting) запустил Minix 3.1.1 на MacBook (с процессором PowerPC) — к сожалению, сделанные им изменения не вошли в «основную ветку» ОС (хотя некоторые «следы» остались). В общем, читаем его тезисы под названием «MinixPPC — a port of the MINIX OS to the PowerPC platform«. Собственно, они объясняют многие отличия нынешнего кода MINIX от того, который описан в книге. Кроме того, они могут послужить своего рода «руководством к действию».
В общем, ситуция пока складывается такая: в MINIX вплоть до «книжной» версии 3.1.0 последовательно сокращали количество возможных архитектур, в конце концов дойдя до одной только x86. Мало кто занимался адаптацией MINIX под другие машины, так что намеки на SPARC и Mototrola 68000 в заголовочных файлах — это «привет из 1997 года». Видимо, больше всего в направлении к портированию MINIX сделал И. Альтинг, выделивший в версии 3.1.1 архитектурно-зависимые части. Благодаря его работе в исходниках MINIX в некоторых местах появились директории arch. Их содержимое, разумеется — предмет для дискуссий. Возможно, что придется выносить туда что-то большее, чем «углядел» Альтинг.
Когда руки дойдут до Minix и его исходников в следующий раз — попытаюсь сделать две вещи: настроить систему компиляции (внеся некоторые изменения в Makefile-ы) и определить, какие различия между MIPS с одной стороны и PowerPC вместе с x86 придется учитывать.
2011 год
С мест сообщают, что Google Talk при установке в Windows 7 выдает такое сообщение:
Если кто не понимает, что означают цифры «6.1» — это версия ядра операционной системы. До 2000 года все версии Windows NT назывались просто — NT 3.51, NT 4.0. Потом Microsoft слегка поменяло политику присвоения названий новым версиям и следующая ОС в этой линейке, с версией ядра 5.0 получила название Windows 2000. Windows XP и Server 2003 — это NT 5.1 и 5.2, Vista и Server 2008 — 6.0, Windows 7 и Server 2008 R2 — 6.1. Google Talk ругается на то, что на компьютере стоит Windows, выпущенная менее 5 лет назад!
Помнится, где-то в 2004-2005 году я писал в техподдержку Webmoney, жаловался на то, что их клиентская программа не работает на Windows XP с ограниченной учетной записью. Напомню, что Windows XP вышла в 2001 году. В ответ получил предложение не выпендриваться и пользоваться Windows 98 (по тем временам — еще не адское старье, но близко к оному).
Все более-менее нормальные разработчики софта под Windows стараются протестировать свой продукт еще под бета-версиями новых версий ОС, и даже реализовать новые, специфичные для них возможности. Видимо, Google к нормальным не относится (про Webmoney все было понятно уже давно).
Забавный текст
Под названием «Что мешает предпринимательству».
http://muacre.livejournal.com/112168.html
По на водке
tarkhil. Если кому многабукав — вот краткий конспект:
— Вся земля мужикам.
— Каждому по сто десятин.
— Чтобы никаких помещиков и духу не было.
— И чтобы на каждые эти сто десятин верная гербовая бумага с печатью — во владение вечное, наследственное, от деда к отцу, от отца к сыну, к внуку и так далее.
— Чтобы никакая шпана из Города не приезжала требовать хлеб. Хлеб мужицкий, никому его не дадим, что сами не съедим, закопаем в землю.
— Чтобы из Города привозили керосин.
Разъясните про «международные права»
Вышел спор с
vanchez по поводу так называемых «международных прав» — что это такое и зачем они нужны.
В чем мы согласны:
— В России на данный момент действительны водительские права трех типов: розовая пластиковая карточка, выдававшаяся где-то до 2009 года, бумажные права формата A6, выдававшиеся с 2009 по 2010 год и пластиковая карточка нового образца, с рисунками машинок на обороте.
— Кроме того, ГИБДД рекламирует услугу по выдаче неких «международных прав» за мзду малую.
— Все действующие в России права более-менее похожи на документы, описанные Женевской конвенцией 1968 года — содержат надпись Permis de conduire и дублированные латиницей данные, и обычно признаются за рубежом как компаниями по прокату автомобилей, так и полицией.
В чем мы не согласны:
— Я утверждаю, что по некоторым видам российских водительских прав можно ездить за рубежом (как минимум — по «пластиковым карточкам» как старого, так и нового образца), братан — что необходимы международные.
А кто знает, как оно на самом деле? Различаются ли ситуации с поездкой, скажем, по Европе на собственном автомобиле и с арендой автомобиля уже «там»?
PS Интерес чисто теоретический, в Буржуиндию пока ни один из нас не собирается.
Ощущаю себя жестоко обманутым
Немножко полистал SICP. Вспоминаю то, чему учили студентов в курсе «Программирование и работа на ЭВМ» на первом курсе мехмата МГУ. Целый год изучался язык Си, точнее, жуткая смесь из Си (указатели, низкоуровневая работа с памятью и т. п.) и несложных задач (вычислить сумму последовательности). В SICP идет разговор о вещах, мехмату гораздо более близких: символьная арифметика, символьное дифференцирование, схемы из функциональных элементов, комплексные числа, определение функций с помощью ряда Тейлора и прочая математика, причем первому курсу вполне доступная.
Ощущаю себя жестоко обманутым.
Еще про недавний скандал с memmove
Вот представьте себе. Стоит в заповедных лесах дальнего Замкадья химкомбинат и делает что-то непонятное, используя в процессе этиловый спирт. Работяги спирт таскают, разбавляют и пьют. Нехорошо, конечно, но других в заповедных лесах дальнего Замкадья нет. И вот кому-то умному приходит в голову мысль заменить дорогой этиловый спирт на дешевую метилку. Работяги, разумеется, массово травятся, летальный исход, инвалидность, все дела.
Вопрос: кто здесь козел? Несуны-алкашики или «рационализатор», не принявший во внимание местные алкогольные традиции?
PS А вот один из ответов на вопрос. В благословенные советские времена на химзаводах использование метилки сводилось к минимуму — именно по той причине, чтобы алкаши травились не сразу и насмерть, а постепенно до цирроза печени и белой горячки.

