Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ)

в 12:14, , рубрики: PDP-11, Карьера в IT-индустрии, карьера программиста

Первая часть тут

Мое программирование продолжилось в сентябре, после поступления в институт (ЛЭТИ). Программировал я вечерами, в совхозе под Любанью (Ленинградская область), после уборки морковки на полях, потому что учеба в ЛЭТИ началась именно с помощи совхозу, причем на это ушел весь сентябрь. На чем же я программировал, спросите вы? Я программировал ручкой в тетрадке, на языке PASCAL. Других студентов это удивляло, но я не был полным ботаником- теперь я понимаю, что в моем поведении был протест и элементы троллинга окружающих.

Писал же я интерпретатор для языка ИИ PLANNER. Этот LISP-подобный язык обладал куда большей простотой и выразительностью, чем LISP, и имел back-tracking. Вскоре после возвращения в город я стал получать машинное время на одной кафедре, где стояли СМ ЭВМ - аналог PDP-11. Выглядели они примерно так:

Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ) - 1

Днем там шли лабы, а ближе к вечеру освобождалось место. Вначале я сидел общем зале, а потом стал вхож в главный зал с фальшполом, где системная консоль - TT0: - разумеется, фрязинский терминал.

СМ ЭВМ работала под управлением операционной системы RSX-11M. Она обеспечивала вытесняющую многозадачность и защиты процессов и системы в разных адресных пространствах (как тебе такое, MS-DOS?). Адресовать можно было только 64K, но общая память была куда больше - 256K, она делилась между многими процессами. Виртуальной памяти не было, поэтому системе приходилось часто память процессов перемещать, чтобы освободить непрерывный кусок. За этим процессом было увлекательно наблюдать в программе, которая называлась RMD:

Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ) - 2

На картинке, которую мне удалось найти, очевидно установлено аж 512K. Но конкуренция была не только за память - была большая конкуренция за диски "с клювиками". Выглядели они вот так:

Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ) - 3

На диске помещалось 4096 блоков по 512 байт, то есть диск имел умопомрачительный объем в 2 мегабайта. RSX-11M умела располагать файлы в виде сегментов, за исключением исполняемых файлов, которые должны были быть непрерывными. Утилит дефрагментации не было, поэтому приходилось применять креативное копирование файлов туда-сюда.

Имена файлов состояли из 9 (не 8!) символов и расиирение - три символа. Тройки символов упаковывались в один байт с помощью кодировки RADIX-50. У файлов были версии (!!!). Были каталоги двух уровней.

В стойке дисков было два - нижний, несъемный, и верхний с клювиком, съемный. После установки надо было закрыть клювик и нажать кнопку, подождать, пока диск раскрутится и загорится зеленая лампочка.

Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ) - 4

Стоек было несколько, да и машин было две, но вот диск работал только на том месте, где его форматировали (хотя и предполагалась взаимозаменяемость). В крайнем случае можно было прочитать диск на "неродном" устройстве, а вот писать диск на "чужом" устройстве категорически не рекомендовалось. Были стойки более совместимые друг с другом и те, которые даже отказывались читать "чужие" диски.

И вот в один прекрасный момент на мой диск с интерпретатором языка PLANNER, который вырос до полутора тысяч строк и компилировался уже более получаса, упали головки, прочертив на диске красивые концентрические борозды. Это была трагедия - бэкапа, разумеется, не было. Диск разобрали, вынув пластину:

Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ) - 5

Да, да, их потом использовали в качестве антенн. Мне дали тряпочку, и я эту пластину полировал целый день. Потом диск собрали, поставили в слот. Диск раскрутился. Вошли головки cо зловещим шипением. В другую стойку поставили чистый диск. Запустили утилиту PRE, которая на низком уровне копировала диски блок в блок, минуя файловую систему. Полученный диск смонтировался без ошибок и... большинство информации было спасено!

После спасения диска я обзавелся вторым диском для бэкапа и после работы копировал свой диск на резервный. Тем более я написал кучу утилит - ждать компиляции PLANNER приходилось все дольше, и я стал одновременно делать всякие полезные программы.

Стоит немного рассказать о программировании в то время. Вот решил я написать утилитку для просмотра текстовых файлов (удобных не было). Чтобы переходить на нужную строку по номеру, на конец файла, на начало, чтобы показывать номера строк итд. Что бы вы сделали? Библиотеки? Нет, тогда исповедовался принцип землекопа: бери больше, кидай дальше. Берешь и пишешь. Перемещаем курсор, читаем файл, проверяем на контрол-символы, а не на 24 строчке ли уже мы? Писалось все в лоб. Интернета не было, внешний софт мы почти не видели, да и зачем брать какую то библиотеку, которая неизвестно сколько отожрет из драгоценных 64K?

И вот однажды, скопировав диск на бэкапный, я увидел, что это не бэкапный диск, а совершенно чужой (диски были подписаны, как правило, фломастерами). Был поздний вечер. Я похолодел. На следующий день я шел на кафедру, как на расcтрел. Бэкапа программ, уничтоженных мной, разумеется, тоже не было. Но мне было предложено написать погибшую программу заливки контуров изнутри цветом - это было уже на ДВК, которые подключались к СМ как терминалы, но могли работать и самостоятельно. Помню, цветной монитор подключался к ДВК как дополнительное устройство, которое стояло рядом.

Я разобрался в программе эмулятора терминала и стал писать на ассемблере PDP-11 для голого железа, без операционки. Это было очень прикольно. Грубо говоря, я мастерил более интеллектуальный терминал. До сих пор мне ассемблер PDP-11 кажется самым прекрасным и ортогональным. Ассемблер VAX пытался сохранить это качество, но оказался переусложненным. А ассемблер Intel это какая-то запредельная эклектика.

Путь в IT, воспоминания бумера. Часть 2, институт, PDP (СМ) - 6

Рассказ про RSX оказался длиннее чем я думал, поэтому и частей повествования будет больше! Stay tuned.

Автор: Дмитрий EvilDBA

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js