В своей предыдущей статье я рассказывал о том, как собирал компьютер для экспериментов с 16-битным защищённым режимом Intel. Там же я анонсировал следующую статью, в которой пообещал установить на этот компьютер ОС, «которая раскроет потенциал 286 процессора наиболее полно», не называя эту ОС. Интрига продержалась недолго − @tormozedison угадал эту ОС с первой попытки, так что я могу с чистой совестью вынести её название в заголовок. Дисклеймер остаётся в силе, только вместо омерзительных фотографий железяк здесь вам будут показаны чудовищные снимки экрана. Intel 80286 имеет двойственную репутацию. С одной стороны, он считается технически отсталым по сравнению со своими менее удачливыми конкурентами, такими, как Motorola 68000, Zilog Z8000 или NatSemi NS32016. С другой стороны, он оказался слишком навороченным для рынка PC-клонов, ждавшего от Intel лишь более быстрого 8086. В действительности 80286 вовсе не был таким уж технически отсталым. В одной своей особенности он даже здорово обогнал время: следующий микропроцессор со встроенным устройством защиты памяти − Motorola 68030 − появился аж на 5 лет позже. Ну и, несмотря на 16 бит и малое число регистров, 80286 не отставал от конкурентов в бенчмарках всю первую половину 1980-х, пока в игру не вступили длинные конвейеры и процессорный кэш. Вот что касается избыточной сложности, то тут есть рациональное зерно. Как мы знаем, с 1976 года две разные команды в Intel параллельно работали над двумя проектами. Первый и основной из них − стековый процессор с объектно-ориентированной памятью, поддержкой ОС и языков высокого уровня в микрокоде − увидел свет в 1981 году под названием iAPX432 и стал оглушительным фиаско. Вторым, запасным, более приземлённым и преемственным по отношению к прежнему опыту проектом и был x86. И защищённый режим в 80286 был спроектирован явно с учётом опыта, полученного при реализации «ОС в кремнии» в iAPX432. С другой стороны, как это видится мне сейчас, первоначальное отношение IBM к PC как к дойной корове способствовало застою и на рынке ПО. Создав компьютер «бизнес-класса» на базе заведомо устаревшего, бюджетного 8088, менеджмент IBM решил попридержать лошадей. Смены процессора потребители ждали два с половиной года: с февраля 1982, когда Intel выпустил 80286, до августа 1984, когда появился первый PC AT. И ещё год прошёл, прежде чем программисты Microsoft и IBM, осознали, что в их распоряжении оказался не просто быстрый ПК, а настоящий UNIX-воркстейшн. И неплохо было бы использовать его возможности по максимуму. Но к этому времени Intel уже подсуетился с 80386, а там и знаменитый демарш Compaq расшевелил сонное PC-совместимое болото. Так 80286 из невостребованного стал бесперспективным, оставаясь при этом лучшим выбором покупателя по параметру “Bang for the buck”. Если рассматривать историю 80286 в таком свете, становится понятным, почему большинство популярных ОС не используют его защищённый режим. Одни работают на 80286 в реальном режиме (MS-DOS и клоны, включая FreeDOS; ELKS), другие не работают вообще (Linux, FreeBSD, Windows NT и 9x). Наш выбор, таким образом, невелик: IBM OS/2 1.x, Microsoft (SCO) Xenix 286, Windows 3.0 или 3.1 («стандартный» режим был удалён из Windows for Workgroups 3.11), Novell NetWare 286, Minix 2.х. В отличие от FreeDOS или ELKS, практически все эти операционки сейчас являются abandonware. А если учесть, что NetWare − специализированная ОС, а Windows 3 − таки не совсем ОС, то ситуация начинает выглядеть ещё печальней. Из всего этого списка Minix выделяется тем, что имеет открытый исходный текст, к тому же её автор написал по ней книгу (точнее, эта ОС была написана как иллюстрация к книге), так что нам вряд ли придётся страдать от недостатка информации по Minix. С другой стороны, Minix − это «учебная» ОС, в которой функциональность заведомо принесена в жертву простоте и читабельности кода. Но нас это не остановит. Minix 2.0.4 − это последняя попытка Танненбаума с друзьями «пригладить» исходники и убрать разные мелкие баги перед тем, как окончательно перейти к новой мажорной версии, Minix 3. Позже Minix 3 станет «самой популярной ОС в мире» благодаря Intel, когда тот выберет её в качестве “backdoor OS” для IME. Но перед этим, увы, из Minix будет удалён код, обеспечивавший поддержку защищённого режима 286. Предыдущая статья подразумевает, что для установки Minix мы будем использовать эмулятор дисковода GoTek с открытой прошивкой FlashFloppy. Поэтому начнём с подготовки образов дискет. Готовить образы дисков будем, конечно, в Linux. Сами образы можно взять здесь. Для установки нужно сначала загрузиться с образа корневого диска (ROOT.MNX), а затем смонтировать временный /usr (USR.MNX). Оба образа по размеру подходят для копирования на 720КБ дискеты, но, поскольку мы эмулируем 1.44МБ, то мы можем просто склеить их: Файл получился размером меньше дискеты, поэтому «добьём» его до 1.44МБ, чтобы не смущать эмулятор: Теперь подготовим образы, на которых мы передадим инсталлятору постоянный /usr. Как видите, файл USR.TAZ не помещается на одну дискету, но это не беда − разобьём его на несколько образов, а последний, неполный − подкорректируем: Такая вольность допустима, потому что файлы *.TAZ − это не образы файловой системы, а архивы tar со сжатыми файлами. Аналогичным образом мы можем подготовить исходные тексты ядра (два диска) и юзерспейса (ещё три диска). А также готовый вариант ядра системы для работы с сетью (один диск), хотя правильнее будет пересобрать ядро из исходников. Заметьте, что я добавляю к имени файла образа номер-префикс, начиная с “00_”. Это чтобы проще было искать образы на цифровом дисплее Готека. Если вы установили на свой Готек графический дисплей вроде такого, то хитрить с названиями файлов не обязательно. Готовые образы копируем на флешку, отформатированную в FAT32, вставляем флешку в GoTek, включаем наш 80286 и приступаем к установке. Если загрузка с дискеты удалась, то инсталлятор поприветствует нас следующим образом: Привычный к хитростям современных интерфейсов, я не сразу понял, что всё, что от меня требуется на данном этапе − нажать клавишу «=». Тогда начнётся загрузка и создание корневого раздела системы на RAM-диске. Разобравшись с корнем, инсталлятор попросит указать раздел, чтобы смонтировать в качестве /usr. Укажите fd0p2, как показано на снимке ниже. Забавный факт: копирайт принадлежит не Танненбауму и не Амстердамскому Свободному Университету, а книжному издательству Прентис-Холл. Теперь можно ввести “root” и запустить команду setup. После небольшой вводной и выбора клавиатуры нам предстоит разметить целевой диск при помощи утилиты part. Интерфейс part не то чтобы слишком сложный, но может обескуражить непривычного пользователя вот таким экраном: На самом деле всё идёт по плану, многочисленные вопросительные знаки не являются индикаторами каких-то проблем. Нужно прежде всего выбрать устройство клавишами “↓” и “↑” (“c0d0” − это master-диск на первом канале контроллера IDE) и нажать “r”, чтобы прочитать таблицу разделов этого устройства. Перед тем, как приступить к созданию разделов, желательно прочитать “more help” и “advice”, а также оживить в памяти всё, что вы когда-то знали об MBR и геометрии дисков, но забыли в пользу GPT и EFI. Надо сказать, что в процессе используется драйвер IDE Minix, то есть ATA-команды, без ограничений, накладываемых вызовами BIOS. Но в записях MBR геометрия диска всё же учитывается. В данном примере я создал раздел размером около 100 МБайт и готов продолжить установку. Здесь стоит учесть мой печальный опыт: fsck в 16-битном Minix исчерпывает доступную память и падает при попытке проверить файловую систему размером более 32 МБайт. В остальном 16-битная Minix нормально работает с дисками размером до 128 МБайт. Однако разбивка диска ещё не закончена. Полученный раздел Minix дополнительно разделит на подразделы: / объёмом 1440 КБ, подкачки (опционально) и /usr. На этапе определения подраздела подкачки инсталлятор скромно порекомендует отказаться от свопинга на системах с достаточным объёмом физической памяти (2 МБ и более), так как “Minix swapping isn't very good yet”. Я пока не в курсе, что здесь имеется ли в виду: отсутствие поддержки страниц или какие-то другие особенности реализации. Дав пользователю последнюю возможность передумать, инсталлятор начинает копировать файлы. Этот этап затянется надолго даже с учётом использования GoTek, который не тратит времени на поиск секторов и дорожек. Сначала инсталлятор копирует файлы со своих / и /usr в целевую систему. Когда этот процесс завершится, набираем halt, а затем boot c0d0p0. Так мы ускоренным образом загружаем систему c жёсткого диска, на который её устанавливаем. Входим как “root”. Теперь мы можем продолжить установку командой setup <path> и развернуть те tar-архивы, которые подготовили вначале. Так мы получим полный набор утилит Minix, а также исходники ядра (SYS.TAZ) и юзерспейса (CMD.TAZ). Но учтите, что сетевой вариант ядра (NET.TAZ), если вы всё-таки решите его установить, нужно разворачивать не в /usr, а в корень: Если же вы, как и я, не ищете лёгких путей, вам определённо понадобятся исходники ядра. В следующей статье, которая станет доступна уже очень скоро, я как раз и расскажу о настройке сети. Краткий туториал, только по делу. Ну, и немного о возможных темах следующих статей. Введение в архитектуру iAPX 432. Бенчмарк 80286 vs 68000. Andrew S. Tanenbaum, Albert S. Woodhull. Operating Systems: Design and Implementation. 2nd edition. Официальный сайт Minix. Сайт поддержки Minix 2.  Python-программист