Системы VAX-11 были довольно популярны в 80-е, особенно в высшем образовании. Сейчас трудно понять некоторые концепции, описанные в книгах тех лет, без знания особенностей архитектуры этих систем. Они могли эмулировать популярные PDP-11. VAX-11 были дороже PDP-11, но более ориентированы на универсальное программирование и всё же существенно дешевле систем IBM/370. Для архитектуры VAX был к середине 80-х сделан процессор V-11, а до этого времени использовались процессорные сборки.
Архитектура VAX-11 32-разрядная, она использует 16 регистров, среди которых как и на PDP-11 есть счётчик команд. Предполагается использование двух стеков, один из которых используется для хранения кадров-фреймов подпрограмм. Кроме того, один из регистров назначен для работы с аргументами вызываемых функций. Таким образом, для стеков выделены 3 из 16 регистров. Система команд VAX-11 не может не поражать своей огромностью и наличием весьма редкостных и часто уникальных команд, например, для работы с полями битов или несколькими типами очередей, для вычисления CRC, умножения 10-х строк, ... Многие команды есть как в трехадресных вариантах (как ARM), так и в двухадресных (как х86), но есть и четырехадресные команды, например, расширенное деление EDIV. Аппаратная поддержка работы с вещественными числами опциональна и отсутствует на некоторых моделях Ваксов.
Система инструкций VAX отличается возможно наиболее полной реализацией концепции ортогональности – в любой позиции операнда можно использовать любой режим адресации. При этом, в отличие от PDP-11, странные команды типа MOVB #11,#12
запрещены. Сами способы адресации расширяют имеющиеся на PDP-11 тем, что используется 32-разрядная адресация и тем, что в адресе стало возможным использовать опциональный индексный регистр с масштабированием, – последнее потом повторили в 68020 и 80386. Рассмотрим пример команды Вакса.
ADDL3 (R1)+,(R2)+[R3],@(R4)+[R5]
Эта команда сложения эквивалентна следующей последовательности команд для 80386.
LODSD ;ESI - R1
ADD EAX,[EDI+EBX*4] ;EDI - R2, EBX - R3
ADD EDI,4
MOV EDX,[ECX+EBP*4] ;ECX - R4, EBP - R5
MOV [EDX],EAX
ADD ECX,4
Или следующей последовательности команд для ARM.
LDR R0,[R1],4
LDR R6,[R2,R3,LSL 2]
ADD R2,4
LDR R7,[R4,R5,LSL 2]
ADD R4,4
LDR R7,[R7]
ADD R0,R6
STR R0,[R7]
Однако, стоит отметить, что исходная VAX-инструкция скорее всего никогда не использовалась ни в одной программе. Этот пример хорошо иллюстрирует проблему наличия слишком большого набора инструкций и методов адресации – большинство вариантов инструкций попросту практически никогда не используются. Эта проблема стала критической, когда к 90-м произошел переход от микропрограммной реализации инструкций к быстрой, без задержек. А дальнейший переход к суперскалярной архитектуре с такой проблемой стал практически просто невозможным.
В отличие от IBM/370, PDP-11 или 68k, инструкции VAX не обязаны иметь четную длину и могут, как и инструкции x86, быть длиной от одного байта. Это, возможность использования смещений разных размеров (8, 16 или 32 бита) и наличие большого множества различных команд и методов адресации позволяет кодам VAX быть одними из лучших по плотности.
Но VAX-11 – это очень медленная для своего класса и цены система. Даже сверхпростейший 6502 на 4 МГц мог обогнать самый медленный из семейства VAX-11/730, а самые быстрые системы VAX-11 – огромные шкафы и "целые мебельные гарнитуры", по производительности оказываются на уровне первых PC AT. Когда появился 80286 стало ясно, что дни VAX-11 сочтены и даже торможение с внедрением систем на основе 80286 не могло уже ничего принципиально изменить. Более прямолинейные англичане из Acorn, сделав ARM в 1985, ничего не скрывая, заявили что ARM гораздо дешевле и заметно быстрее. VAX-11, тем не менее, сохранял актуальность до начала 90-х, имея всё же некоторые преимущества перед ПК, в частности, более быстрые системы для работы с дисками.
Известно, что среди самых дешёвых VAX-11 были проблемы с совместимостью. В частности, на первые VAX-11/730 не удавалось портировать Unix из-за особенностей реализации на них привилегированных инструкций.
VAX-11 – это наверное последняя массовая система, в которой удобство работы на языке ассемблер считалось важнее быстродействия. В каком-то смысле, такой подход перешел на современные популярные языки сценариев.
VAX-11/785 – это тоже компьютер (1984) – самый быстрый среди VAX-11, по быстродействию процессора сравним с IBM PC AT или ARM Evaluation System
Удивительно, но в открытом доступе очень мало литературы по системам VAX. Как будто действует какой-то странный закон о забвении. Интересно, что торговая марка VAX сейчас используется производителем пылесосов и, кроме того, это слово стало синонимом слова вакцина во времена мощного тренда массовой вакцинации, особенно применительно к тем, кто тут в чем-то сомневается. С историей архитектуры VAX связаны несколько эпизодов, близких к политике и коррелированных с историей СССР. Вполне возможно, что фактический отказ от развития архитектуры PDP-11 был вызван её дешевизной и успехами её клонирование в Советском Союзе. А клонирование VAX стоило на порядок больших ресурсов и вело в тупик. Интерес к VAX создавали, используя, например, используя розыгрыши типа знаменитого Кремлевского Вакса на 1 апреля 1984, в которой тогдашний лидер СССР Константин Черненко предлагал выпить водки по случаю подключения к сети Usenet. Другая шутка заключалась в том, что на некоторые чипы VAX впечатывалось послание на ломаном русском языке о том, как хорош VAX. К этому также примыкает факт завышения быстродействия первого Вакса, заявленное быстродействие было фактически вдвое выше реального. Тут ещё можно отметить, что в отличие от PDP-11, где всегда тщательно документировалось время исполнения инструкций, для Ваксов эта информация никогда официально не публиковалась.
Некоторые первые модели VAX были клонированы в СССР к концу 80-х, но таких клонов было произведено очень мало и они практически не нашли себе применения. Некоторые модели Ваксов клонировались также Великобритании, Китае, ГДР, Венгрии и Чехословакии.
Конечно нужно иметь в виду, что на VAX-11 история компьютеров VAX в DEC не завершилась. Последние модели VAX-11 были сделаны в середине 80-х. Им на смену пришли модели VAX 8000, некоторые из которых относились к семейству VAX-11. Параллельно шло развитие линий MicroVax, VAXstation и VAXserver. VAX 8000 сменили более дешёвые и несколько более быстрые VAX 6000. Уже в начале 90-х MicroVax сменили модели VAX 4000. Процессоры VAX c начала 90-х показывали производительность на уровне 80486, но имели несколько более высокие тактовые частоты. Могу предположить, что 80486DX4 на частоте 100 МГц и первые процессоры Pentium стали обгонять лучшие модели VAX 7000 по производительности. После чего в DEC пришлось отказаться от поддержки системы инструкций VAX и перейти к её эмуляции на системах DEC Alpha. Были ещё и суперкомпьютеры VAX 9000 и многопроцессорные варианты, например, VAX 7000, но это были очень дорогие системы. Можно ещё упомянуть системы повышенной надежности VAXft, в которых функции процессора дублировались, что позволяло преодолевать сбой одного из процессоров. После V11 были процессоры CVAX, Rigel, NVAX и NVAX+. Ваксы после VAX-11 аппаратной поддержки эмуляции PDP-11 уже не имели.
Несколько систем VAX доступны для использования через сеть. И это их выгодно отличает от систем IBM/370, c которыми они конкурировали.
Cтатья опубликована на geektimes, а также переведена на английский.