Различные порты

В этом документе собраны комментарии об поддерживающихся в Plan 9 аппаратных архитектурах. Система пытается вуалировать множество архитектурных различий, вследствие чего машины, как это кажется пользователю Plan 9, отличаются лишь коммерческим программным обеспечением. Также, поскольку мы небольшая группа, то не в силах сделать и предусмотреть все: использовать каждую оптимизацию, поддерживать каждую модель, управлять каждым устройством. В документе описаны сугубо то, что нам удалось осуществить. В первой части для каждой архитектуры обсуждается тройка компилятор/ассемблер/загрузчик. Во второй идет речь об операционной системе и ее реализации для представленных машин.

Компилятор Motorola MC68020

Самый старый компилятор из рассматриваемой группы. Генерирует довольно хороший код относительно своих коммерческих компиляторов-конкурентов для этого типа машин. Принимает по крайней мере архитектуру 68020: некоторые сгенерированные им режимы адресации не подходят для 68000 и 68010.

Также мы пользуемся этим компилятором для 68040. За исключением нескольких команд и регистров, доступных только посредством языка ассемблера, единственное видимое различие между этими машинами состоит в вычислениях с плавающей точкой. Все наличествующие у нас 68020-е имеют устройства для вычислений с плавающей точкой: 68881 или 68882, так что для выполнения FP-программ мы, разумеется, зависим от соответствующего оборудования. К сожалению, 68040 не досконально чиста в своей реализации стандарта IEEE 754 или предоставлении встроенных команд для трансцендентных функций. Впрочем, мы легко обходим это ограничение, не используя последние на 68020, и отдавая предпочтение собственной библиотеке -l68881, которая необходима при потребности в производительности (что, кстати сказать, бывает вполне обоснованно, например, наш сервер astro получил двойной прирост). Поскольку мы изъявляем желание запускать те же двоичные файлы на обоих машинах без эмуляции FCOSH в операционной системе, то мы не пользуемся этой библиотекой по умолчанию.

Проблема с IEEE намного противней. У нас не было в планах связываться с постепенной потерей значимости (gradual underflow) и ей подобными, поэтому после того как на половине дюжины машин нам понадобилось иметь с ними дело, мы на 68040 реализовали потерю значимости без организации ловушек (non-trapping underflow) как округление до нуля и не трогали денормализированные числа и «не-числа». Посему машины 68020 и 68040 не являются строго совместимыми.

Компилятор Motorola MC68000

Этот компилятор является упрощенной версией компилятора MC68020, построенной для не выпущенного порта процессора Dragonball для Palm Pilot. Он генерирует переместимый код, общее качество которого значительно хуже чем у MC68020.

Компилятор MIPS

Компилятор генерирует код для машин R2000, R3000 и R4000, сконфигурированных как big-endian архитектуры. Хотя ассемблер и загрузчик поддерживают новые команды пользовательского режима, компилятор не генерирует R4000-специфических команд. Машины little-endian не поддерживаются. (Порт little-endian существует, но не включается в дистрибутив. Свяжитесь с нами, если он вам необходим.) Что касается скорости, то хотя компилятор Plan 9 и генерирует хороший код, но, все-же, коммерческий MIPS компилятор со всеми остановками, выпущенными последовательно, бывает проворнее его на 20%, а то и более. Так как наш компилирует в 10 раз быстрее и основное свое время мы тратим на компиляцию, то мы им удовлетворены.

Компилятор довольно-таки стабильный: мы использовали его в нескольких больших проектах и, естественно, генерировали код приложений именно посредством него. Поведение программ с плавающей точкой во многом схоже с 68040: когда необходимо получить потерю значимости без организации ловушек и потерю значимости операционная система эмулирует их; постепенная потеря значимости, денормализированные числа и «не-числа» отсутствуют.

Компилятор SPARC

Компилятор SPARC, также как и предыдущий, довольно стабилен и быстр, хотя мы не использовали его в течение нескольких лет из-за недостатка соответствующих аппаратных средств. Нами был замечен тот факт, что этот компилятор делает лучшую оптимизацию, чем GCC, но, если брать средние значения, то вероятно они одинаковы.

Мы обычно запускали некоторые старые SPARC-машины без команд умножения и деления, так что компилятор не производит их по умолчанию. Взамен он вызывает внутренние подпрограммы. Флаг загрузчика, -M, вызывает выдачу команд. Операционная система владеет кодом прерываний для их эмуляции, но прерывания более медлительны, чем их эмуляция в пользовательском режиме. В любой современной лаборатории, где SPARC машины имеют команды, полезно включить опцию -M по-умолчанию.

Что касается вычислений с плавающей точкой, то здесь та же самая история что и с MIPS.

Компилятор Intel i386

Это настоящий x86-компилятор, для x>2. Он работает только на машинах с 32-битным защищенным режимом. Он быстр и генерирует сносный код; сегодня это наш основной компилятор.

Плавающая точка хоть и хорошо ведет себя, но для выполнения команд компилятор применяет i387-совместимое аппаратное обеспечение. С обеспечением 387 система выполняет работу стандарта IEEE 754, также как MC68881. По-умолчанию, библиотеки не используют внутренние команды 387 для трансцендентных функций. Если же у вас есть желание их использовать, постройте код из каталога /sys/src/libc/386/387.

Компилятор Intel i960

Этот компилятор был создан как «хэк для уикэнда» (weekend hack), для работы с платами Cyclone. Он использовался лишь для запуска одного наплатного кода программы в Cyclone. Компилятор владеет большим количеством не использующихся оптимизаций кода. К примеру, компилятор не поддерживает конвейеры. Код запускается в режиме little-endian.

Компилятор DEC Alpha

Компилятор Alpha основан на порте, который Дэвид Хоган (David Hogan) написал во время обучения в Сиднейском университете, на отделении computer science Бассера. Он был использован для построения текущей версии операционной системы, но не выделялся как другие компиляторы.

Так как Alpha — это 64-битная архитектура, компилятор обрабатывает типы int, long, и указатели как 32-битные. Доступ к 64-битным операциям осуществляется с помощью типа vlong (аналогично другим компиляторам).

Принято, что целевой процессор поддерживает дополнительные операции с памятью: byte и word (расширение «BWX»). Если у вас старая система, вы можете генерировать код без использования расширений путем указания опции -x загрузчику.

Существует большое количество оптимизаций кода, которые рекомендует справочник по архитектуре Alpha, но компилятор их не поддерживает. К настоящему времени нет поддержки выравниванию и планированию оптимизаций кода.

Компилятор пытается соответствовать стандарту IEEE, но некоторые процессоры Alpha не осуществляют все режимы округлений и прерываний в кремнии. Локализация этой проблемы требует программную эмуляцию кода в ядре; к настоящему времени проблема все еще присутствует.

Компилятор PowerPC

Компилятор PowerPC поддерживает лишь 32-битную архитектуру PowerPC; он не поддерживает ни 64-битные расширения, ни POWER-команды совместимости. Он использовался для получения операционной системы для процессоров 603, 603e, 604e, 821, 823 и 860. На процессорах 8xx операции с плавающей точкой должны эмулироваться. Команда планирования не реализована. Компилятор не использует или использует, но совсем ничтожную часть, необычных характеристик PowerPC. К ним относятся: регистр-счетчик, несколько регистров кода завершения, и команды умножения-накапливания, но они иногда используются программами на языке ассемблера в библиотеках.

Компилятор Acorn ARM

Компилятор ARM довольно стабилен; он использовался при работах над операционной системой Inferno и ядром Plan 9 для iPAQ, где используется StrongArm SA1. В компиляторе есть поддержка архитектуры ARMv4, зато нет поддержки для набора команд Thumb. Он эксплуатировался на процессорах ARM7500FE и машинах с Strongarm SA1. Компилятор генерирует команды для ARM-сопроцессора с плавающей точкой.

Компилятор AMD 29000

Компилятор использовался при портировании операционной системы на процессор AMD 29000. Проект давно заброшен, но компилятор все-же существует.

Операционная система Carrera

Данная ОС выполнялась на терминалах: MIPS R4400 PC-подобных устройствах (Carrera) со сделанными на заказ фреймовыми буферами. Теперь почти все они коммисированы, но мы включаем исходный код Carrera в дистрибутив на тот случай, если кто-нибудь захочет запускать MIPS-основанную систему.

Операционная система для IBM PC

PC-версия Plan 9 может загружаться из MS-DOS или непосредственно с созданного при помощи команды format диска (см. prep(8)). Plan 9 запускается в 32-битном режиме, который требует процессор 386 или более поздний, с управляемой прерываниями системой ввода-вывода, т.е. не использующей BIOS (за исключением небольшой части загрузочной программы загрузочного блока дискеты). Это улучшает производительность, но ограничивает набор устройств ввода-вывода, которые могут поддерживаться без какого-либо специального кода.

Plan 9 поддерживает как шины ISA, EISA и PCI, так и устройства PCMCIA. Но, в любом случае, невозможно указать все поддерживаемые машины, потому как рынок PC-клонов слишком изменчив и нет гарантий, что компоненты машины, которую вы купили сегодня, будут совпадать с компонентами завтрашней покупки. (Что касается нашей лаборатории, то мы сами покупаем и собираем машины в попытке уменьшить этот эффект.) Диски IDE/ATA и SCSI поддерживаются, также есть поддержка больших ATA дисков. Приводы CD-ROM поддерживаются в двух вариантах: на шине SCSI и как устройства ATA(PI). SCSI адаптер должен быть экземпляром серии Mylex Multimaster (Buslogic BT-*) или же Symbios 53C8XX. Поддерживаются карты Ethernet, включая AMD79C790, 3COM Etherlink III, серия 3C589, NE2000, WD8003, WD8013, SMC Elite и Elite Ultra, Linksys Combo EthernetCard и EtherFast 10/100, и различные контроллеры, основанные на чипах Intel i8255[789] и Digital (сейчас Intel) 21114x. Мы по большей части используем Etherlink III, i8255[789], и 21114x, так что драйверы этих устройств вероятно должны быть более надежными. Для периферии должен наличествовать явный драйвер Plan 9; драйверы для DOS или Windows не подходят. Также, Plan 9 не может эксплуатировать специальные характеристики аппаратных средств, не входящие в стандартную модель IBM PC, такие как управление питанием, за исключением архитектура-зависимого кода, который добавлен в ядро. За детальной информацией об этих и подобных вещах обращайтесь к man-странице plan9.ini(8).

Годами ОС Plan 9 работала на множестве VGA-карт. Тем не менее, последние изменения в графической системе не были протестированы на большинстве старых карт; все-таки некоторые усилия придется приложить, чтобы заставить их работать вновь. В нашей лаборатории большинство машин используют чипы ATI Mach64, S3 ViRGE, или S3 Savage, так что данные устройства должны быть наиболее надежными. Мы также пользуемся несколькими картами Matrox и TNT. Системе требуется аппаратный курсор. За информацией обращайтесь к man-страницам vgadb(6) и vga(8). Wiki содержит окончательный список поддерживаемых карт.

Что касается аудио, то Plan 9 поддерживает карты семейства Sound Blaster 16 и совместимые. (8-битные карты Sound Blaster не работают в Plan 9.) Существует поддержка USB аудио устройств, см. usb(4).

И наконец, очень важно иметь мышь с тремя кнопками. Plan 9 работает мышками PS/2, COM, а также USB.

Как только вы установили Plan 9 (смотрите документ с установочными инструкциями) запустите программу ld из DOS, или же воспользуйтесь загрузочной дискетой. За детальной информацией обращайтесь к booting(8), 9load(8) и prep(8).

Операционная система для Alpha PC

Plan 9 запускается на машине Alpha PC 164. Порт Alpha не использовался так часто как другие, и должен рассматриваться как предварительная версия.

Он использует изюминку PALcode — OSF/1, и должен загружаться из микропрограммы SRM (загрузка из ARC не поддерживается). Поддерживаемые устройства являются подмножеством PC-единиц, включая DECchip 2114x-основанные Ethernet карты, карты S3 VGA, Sound Blaster 16-совместимые аудио карты, флоппи дисководы, винчестеры ATA интерфейса.

Система должна загружаться посредством tftp (см. booting(8)).

Операционная система для PowerPC

Мы владеем версией операционной системы для архитектуры PowerPC, но она запускается только на машине под названием Viaduct. Viaduct — это небольшой (с габаритами 12x9x3 см) дешевый встраиваемый компьютер, который состоит из: 50 MHz MPC850, 16 MB SDRAM, 2 MB Flash, и двух портов 10 Mb Ethernet. Он разработан для домашних/SOHO сетевых приложений, таких как VPN, брандмауэры, NAT, и т.п.

Ядро также было портировано на встраиваемую материнскую плату Motorola MTX. Порт (включен в дистрибутив) предназначен сугубо для процессора 604e (значительно разнится с 603e) и на текущий момент разрешен лишь один CPU.

Операционная система для Compaq iPAQ

Plan 9 портирована на PDA-компьютер iPAQ Pocket PC (Compaq), в котором используется процессор StrongArm SA1. Порт выполнен для модели 3630, известно, что граничащие с ней модели также функционируют. Ядро распознает контроллер PCMCIA с картой WaveLAN, но другие PCMCIA-устройства портированию подданы еще не были.

На iPAQ возможен запуск rio. Ввод: небольшое приложение-клавиатура, благодаря которому возможен рукописный ввод в стиле Palm, вместе с тем доступен вариант ввода посредством миниатюрной клавиатуры.

Франциско Дж. Баллестэрос (Fco. J. Ballesteros) добавил поддержку функции перехода в состояние ожидания (hibernation), но, к сожалению, мы не можем заставить ее работать вновь в новом ядре; код открыт, так что добровольцы только приветствуются. За информацией об установке Plan 9 на iPAQ смотрите файл /sys/src/9/bitsy/Booting101.

Файловый сервер

Файловый сервер работает лишь на определенных машинах. Он представляет собой отдельную программную систему, отдаленно имеющую отношение к коду CPU сервера, на нем не выполняется никаких пользовательских процессов: все, что он делает — это постоянно хранит информацию и выдает ее в сеть как иерархию файлов. Он поддерживает SCSI и IDE диски, которые могут чередоваться для высокой производительности. DOS файл на диске IDE может хранить конфигурационную информацию. За информацией как сконфигурировать файловый сервер смотрите fsconfig(8).

Чтобы загрузить файловый сервер, следуйте инструкциям по загрузке CPU сервера с использованием имени файла 9machtypefs, где machtype — это pc, и т.п., соответственно. Мы выпускаем только PC-версию.

Файловый сервер IBM PC

Кроме ограничений на SCSI-диски, файловый сервер PC имеет те же аппаратные требования, что и основная операционная система для этой архитектуры. Тем не менее, только подмножество поддерживаемых SCSI (Adaptec 1542, Mylex Multimaster и Symbios 53C8XX) и Ethernet (Digital 2114x, Intel 8255x и 3Com) контроллеров корректно функционирует. Применен может быть любой из способов загрузки, описанных на странице 9load(8).

Чтобы загрузить любую PC-версию, файл 9load должен быть размещен на MS-DOS-отформатированной дискете, IDE-диске, или SCSI-разделе. Тем не менее, персональные компьютеры не владеют статической памятью RAM, в которой файловый сервер мог бы хранить конфигурационную информацию, так что взамен система хранит ее в файле файловой системы MS-DOS. Впрочем, файл этот не может хранится на SCSI-дисках, таким образом, только на дискете или IDE. (Это ограничение избегает большинство дублирований интерфейсов в системе.) Смотрите plan9.ini(8) за информацией о переменной nvr и определением консольного устройства.

Резервное копирование

Наш главный файловый сервер в лаборатории вряд ли имеет сходство с вашим. Это ПК с 128 MB кеш-памяти, 56 GB SCSI-диском и магнито-оптическим дисковым блоком Hewlett-Packard SureStore Optical 1200ex емкостью 1,2 TB. Драйвер запускает стандартный SCSI jukebox протокол. У нас также есть драйвер для (не стандартного) дисковода с автоматической сменой WORM-дисков SONY WDA-610, который вмещает около 350 GB данных.

WORM представляет собой основной накопитель; SCSI-диск — это не что иное, как кеш-память для улучшения производительности. Каждое утро система создает на WORM-диске образ всей системы предыдущего дня. Следовательно, наша система резервного копирования является файловым сервером, который позволяет просматривать вчерашнюю (или прошлогоднюю) файловую систему.

Если у вас отсутствует магнито-оптический накопитель, вы можете подключить привод CD-R или даже использовать WORM-диск и управлять дампами. Естественно, у вас будет немного меньше автоматики. Но утверждать, что распределенная система для резервного копирования может использовать лишь WORM-накопитель было бы не верно.

На самом деле не каждый может себе позволить такое дорогостоящее аппаратное обеспечение, хотя это было бы очень роскошно. Но существует выход, состоит он в том, чтобы пользоваться сервером mkfs(8) для создания регулярных архивов файловой системы и scuzz(8) — для их направления на ленточный накопитель SCSI 8mm. Затем извлекать данные из этих архивов можно с помощью mkext. Другая альтернатива — использование программы dump9660 (см. mk9660(8)), которая записывает пошаговые «бэкапы» на CD в виде иерархии dump.

Также возможно обращение к обычному диску или даже к его части, как к «псевдо-WORM». Когда он заполнится, данные можно направлять на ленточный накопитель. Это плохая идея для эксплуатации системы, но великолепный путь узнать больше ПО WORM. Чтобы узнать о других особенностях, прочитайте страницу fsconfig(8).

Copyright © 2004 Lucent Technologies Inc. All rights reserved.
© Перевод на русский язык, Андрей С. Кухар, 2004