АЛЕКСАНДР БАЙРАК
Настоящий UNIX в наши дни
В этой статье я рассмотрю один из вариантов запуска настоящего UNIX на современных компьютерах.
Я думаю, любой юниксоид хотя бы один раз читал историю возникновения UNIX, как он развивался и какие метаморфозы пережил, чтобы дойти до нас в виде множества своих «детей». Глядя на генеалогическое древо UNIX, диву даешься, какое большое количество ответвлений и версий системы было выпущено в прошлом. Некоторые уже давно умерли, иные просто в спячке, но большинство из них выросли и дожили до наших дней. Ну как тут не загореться желанием посмотреть на тот самый настоящий, легендарный AT&T UNIX, с которого все и началось? Конечно, в наши дни достаточно затруднительно найти PDP11 и родной дистрибутив. Так что единственной возможностью погрузиться во времена использования настоящего UNIX на PDP11 нам помогут эмуляторы. Точнее, один из них – simh (Simulator History). Начало данному проекту было положено в 1993 году. Главный разработчик проекта – Robert M Supnik. В настоящее время simh можно запустить почти на всех современных ОС, а именно:
- OpenVMS/VAX
- OpenVMS/Alpha
- Windows 9x/2k/XP
- MacOS X
- Linux
Классический pdp 11/45 был выпущен в 1970 году. Из pdp-серии это был единственный 16-битный компьютер. Хотя были и 24- и 18-битные машины. При рекордно низкой цене (~ 10800$) pdp 11 получил широчайшее распространение. Всего было продано около 600000 (!) экземпляров. Некоторые из них работают и по сей день.
Все свои эксперименты я проводил на P3-550 МГц/320 Мб RAM под управлением FreeBSD 5.3.
Для начала нашего путешествия во времени нам нужен дистрибутив, который можно взять с http://simh.trailing-edge.com/sources/simhv33-0.zip.
Также понадобится дамп диска с установленным UNIX. Его мы берем с http://simh.trailing-edge.com/kits/uv7swve.zip.
Распакуем и установим программу:
# mkdir unixemul
# cd unixemul
# unzip ../simhv33-0.zip
# unzip ../uv7swve.zip
# mkdir BIN
# gmake
Симулятор помещает все свои исполняемые файлы в каталог BIN. Но так как по умолчанию он не существует, создаем его:
# mkdir BIN
# gmake
Если процесс компиляции прошел гладко, приступаем непосредственно к запуску:
# BIN/pdp11
На экране появится приглашение программы.
// Указываем, какой тип процессора мы будем эмулировать:
sim> set cpu 18
// u18 соответствует процессору, установленному на классической pdp 11/45.
// Указываем, что будем использовать консольный терминал DL11. Вывод информации будет производиться в режиме 7 бит на символ.
sim> set tto 7b
// Указываем, что ввод будет также исключительно 7-битный.
sim> set tti 7b
// Присоединяем дамп диска с UNIX к rl. В качестве rl выступает контроллер диска RLV12/RL01.
sim> attach rl unix_v7_rl.dsk
// Указываем, откуда производить загрузку:
sim> boot rl
Начинается загрузка:
@boot
New Boot, known devices are hp ht rk rl rp tm vt
|
Указываем, что именно запускать:
: rl(0,0)rl2unix
Более подробно обо всех опциях, использованных выше, можно прочитать в документации, поставляемой вместе с программой.
Далее нам показывают объем доступной памяти, он равен целым 177 856 байтам! После чего мы попадаем в shell. В принципе можно начинать работу с настоящим UNIX 7-ой версии. По умолчанию мы попадаем в систему с правами root. В документации к эмулятору в качестве примера работы были приведены следующие действия:
// Создадим каталог dmr
# mkdir /usr/dmr
// Сделаем владельцем каталога dmr пользователя dmr
# chown dmr /usr/dmr
// Изменим группу владения каталога на третью
# chgrp 3 /usr/dmr
// Создадим каталог для временных файлов
# mkdir /tmp
// Поставим для него полный доступ для всех
# chmod 777 /tmp
// Нажимаем
# ^D
После чего на экране появляется приглашение к вводу логина.
Restricted rights: Use, duplication, or disclosure is subject to restrictions stated
in your contract with Western Electric Company, Inc.
Thu Sep 22 05:51:05 EDT 1988
|
Идем дальше.
// Вводим логин dmr:
login: dmr
// С помощью редактора ed начинаем редактировать файл hello.c:
$ ed hello.c
?hello.c
a
main()
{
printf(«Hello World!\n»);
}
.
w
40
q
// Скомпилируем написанный нами файл:
$ cc hello.c
// Запустим:
$ a.out
Видим результат:
Кстати, вы еще не догадались, кому принадлежит имя пользователя dmr? Человеку – живой легенде современности – Деннису Ритчи, отцу и основоположнику Юникса!
Согласитесь, что очень неудобно при каждом запуске ОС каждый раз вводить все команды инициализации. Тут нам на помощь приходят команды save и restore. Для «сохранения» ввода команд, необходимых для запуска ОС, нам нужно набрать команду:
sim> save filename
В качестве filename введите имя файла, в который вы хотите сохранить текущий образ эмулятора.
Для «восстановления» состояния набираем:
sim> restore filename
После чего будут актуальны ранее введенные и сохраненные настройки.
Также следует отметить одну очень досадную недоработку по части удобства использования. В оболочке эмулятора нет возможности редактировать вводимые команды.
Про возможность автодополнения команд я вообще молчу. Хотя должен заметить, можно использовать заранее определенные алиасы. Например, для команды attach синонимом будет команда at. Более подробно про алиасы можно прочитать в документации.
Simh поддерживает работу через сеть. Например, у вас нет возможности работать с ОС, запущенной через эмулятор, находясь непосредственно перед монитором компьютера, на котором включен simh. Или вы хотите дать возможность своим знакомым или друзьям поэкспериментировать на запущенной через эмулятор ОС.
Воспользуемся опцией, определяющей консоль:
sim> set console telnet=12345
Назначаем доступ к консоли через порт 12345.
На что эмулятор ответит:
Проверить, действительно ли нас ожидает соединение на указанном порту, мы можем с помощью команд netstat -na или sockstat -4.
Работать по сети мы сможем после ввода на локальной машине параметров, указывающих, откуда нам запускать ОС. В нашем случае это boot rl. После вывода которой мы видим на экране:
Waiting for console Telnet connection. |
После чего мы можем получить доступ к эмулятору через telnet. Пример сессии:
[01mer@darkthrone]:~> telnet marduk 12345
Trying 192.168.1.22
Connected to marduk
Escape charset is ‘^]’
Connected to PDP11 simulator
@
|
Я не буду описывать здесь все свои эксперименты которые проводил в UNIX, чтобы не лишать читателя удовольствия самому заняться исследованием этой ОС. А море различных открытий и удивительных находок я вам обещаю.
Для корректного завершения работы с UNIX надо два раза произвести синхронизацию диска с помощью команды sync. После чего нажать , и вы снова попадете в оболочку эмулятора. Выход из которой осуществляется с помощью команд exit, quit, bye, на выбор.
В конце хотел бы добавить, что рассмотренный эмулятор кроме PDP11 поддерживает еще достаточно большое количество различных компьютеров:
- Data General Nova, Eclipse
- Digital Equipment Corporation PDP-1, PDP-4, PDP-7, PDP-8, PDP-9, PDP-10, PDP-11, PDP-15, VAX
- GRI Corporation GRI-909
- IBM 1401, 1620, 1130, System 3
- Interdata (Perkin-Elmer) 16b and 32b systems
- Hewlett-Packard 2116, 2100, 21MX
- Honeywell H316/H516
- MITS Altair 8800, with both 8080 and Z80
- Royal-Mcbee LGP-30, LGP-21
- Scientific Data Systems SDS 940
Соответственно, если мы найдем ОС для данных компьютеров и приложим немного смекалки и настойчивости, получим в собственное распоряжение целый полигон для изучения истории компьютеров и ОС. Особый интерес (по крайней мере для меня) представляет эмуляция VAX. Особенно при учете того, что на VAX можно запустить OpenBSD, NetBSD, и другие менее известные в настоящее время ОС. Но этому вопросу я намерен посвятить отдельную статью.
Я был бы очень рад всем вашим отзывам c описанием экспериментов, поставленных с помощью этого эмулятора.
Ссылки:
- http://simh.trailing-edge.com/software.html – небольшая коллекция программ и ОС, подходящих для использования под эмулятором simh.
- http://simh.trailing-edge.com/photos.html – фотогалерея различных старых компьютеров.
- http://www.cs.bell-labs.com/who/dmr – домашняя страничка Денниса Ритчи.