[Перевод] Альтернативная вселенная старых компьютеров

q1khrjk3gr251ph5reuk4hhlfvu.jpeg

Нет ничего более бесполезного, чем старый компьютер, не так ли? Прогресс движется так быстро, что только что купленная машина устаревает ко времени её доставки, двухлетняя машина уже не актуальна, а пятилетняя машина не представляет собой никакой ценности…

Ну, это не совсем так… Действительно, мощность и производительность компьютерного оборудования выросла экспоненциально со времён первых компьютеров с хранящимися программами, появившихся примерно в 1948 году (Manchester Mark I). Соотношение цены и производительности улучшилось ещё существеннее.

Сложно сказать, насколько быстро происходили эти улучшения. Вполне можно сказать, что «очень быстро». Со времён зарождения технологии интегральных микросхем закон Мура сохранял свою истинность — количество транзисторов, которое можно разместить на кристалле, удваивалось примерно каждые два года. Однако ещё одна версия закона Мура — »производительность удваивается каждые 18 месяцев, или в 10 раз каждые 5 лет» — кажется слишком оптимистичной.
Однако для некоторых семейств микропроцессоров на относительно коротком промежутке времени эта версия тоже была справедливой.
Но несмотря на то, что современные микропроцессоры являются чудом инженерной мысли, и продаются по смехотворно низким ценам, основной рост производительности происходит благодаря технологиям полупроводниковых процессов, а не из-за архитектурных инноваций.

За исключением семейства Intel Itanium, все архитектурные особенности, внёсшие вклад в производительность современных процессоров, впервые появились (и достаточно подробно были изучены) в компьютерах-мейнфреймах, проектировавшихся с конца 1950-х по 1975 год. В частности:

  • 1960 год: IBM 7030 Stretch: конвейерная обработка команд, предварительная выборка, память с чередованием адресов, первое использование 8-битного байта.
  • 1962 год: Atlas: страничная виртуальная память, аппаратная поддержка функций операционных систем.
  • 1962 год: IBM/MIT 7094 для CTSS: два режима (user/supervisor) с привилегированными командами и памятью, зарезервированной для супервизора. Исполнение привилегированной команды в пользовательском режиме перехватывалось кодом режима супервизора.
  • 1964 год: CDC 6600: параллелизм на уровне команд с исполнением вне очерёдности, загрузка/сохранение, т.е. архитектура RISC, многопоточная архитектура периферийных процессоров, максимальная производительность благодаря совместному проектированию архитектуры и электросхем.
  • 1964 год: IBM System/360: 8-битный байт становится стандартом, память с побайтовой адресацией, слово длиной 32 бита, регистры общего назначения, концепция семейства совместимых машин.
  • 1967 год: IBM System/360 Model 67 и CP/67: технология виртуальных машин (CP/67, позже преобразованная в VM/CMS).
  • 1968 год: IBM System/360 Model 85: кэш-память.
  • 1969 год: CDC 7600: инновации модели 6600 плюс конвейерные функциональные блоки.
  • 1975 год: Cray-1: векторная обработка (предшественники: Illiac-IV, CDC Star-100 и TI ASC).

В тот период ни одна машина не сочетала в себе все хорошие особенности, но к концу 1970-х уже появилось несколько примеров «всего хорошего в одном компьютере», за исключением векторной обработки (которая сегодня присутствует в популярных семействах микропроцессоров в виде SSEn и подобных ему расширений наборов команд).

Архитектурная история микропроцессора во многом является повторением архитектурной истории мейнфрейма, только микропроцессор обладает преимуществом того, что он не был первым!

Ведущим архитектором CDC 6600, CDC 7600 и Cray-1 был Сеймур Крэй. Его машины были самыми быстрыми компьютерами общего назначения в мире, по крайней мере, в течение двадцати лет — с 1964 по 1984 год. Наверно, 7600 навсегда сохранит за собой рекорд как самый быстрый компьютер общего назначения, остававшийся таким дольше любых других типов машин — с 1969 по 1975 год.

pleatdlrpvcow9r4a2zrjw87s68.jpeg

Сеймур Крэй — ведущий архитектор CDC 6600 и его потомков. Подробным проектированием 6600 в основном занимался Джеймс Торнтон.

Архитектура CDC 6600 и его потомков особенно интересна благодаря своим инновациям. Некоторые из его инноваций не дожили ни до одной современной машины, особенно концепция «периферийного процессора» (peripheral processor, PP). Он представлял собой группу из десяти или более «мелких» компьютеров общего назначения, выполнявшую все функции ввода-вывода машины, и основную часть задач операционной системы, оставляя «центральный процессор» (central processor, CP) почти полностью свободным для работы пользователей. (Любопытно, что более новые машины и операционные системы перенесли многие функции операционной системы снова в CP.) PP были реализованы при помощи мультиплексирования единого арифметического и логического устройства между десятью (или более) наборами памяти и регистров. Именно поэтому можно сказать, что это была первая система с аппаратной поддержкой многопоточности.

mvca2occo3lkew6q68evbsn2avq.jpeg

CDC 6600

Разумеется, 6600 не был идеален. У него не имелось регистров общего назначения. Вместо них у него были отдельные банки регистров для данных (шириной 60 байт), адресов и коротких integer (шириной по 18 бит). Хотя, по моему мнению, это без сомнений была первая RISC-машина, её команды загрузки/сохранения сегодня выглядят «странно». При сохранении адреса в регистры адресов с A1 по A5 данные из центральной памяти загружались в «партнёрский» регистр данных с X1 по X5. Аналогично, при сохранении адреса в адресный регистр A6 или A7 содержимое регистра данных X6 или X7 сохранялось в центральную память. Лично мне это кажется довольно изящным решением!

Менее изящным был формат integer в обратном коде и формат чисел с плавающей запятой. И, разумеется, машина не имела виртуальной памяти — хотя с достаточным объёмом реальной памяти (как в некоторых современных машинах) это, возможно, и не было бы недостатком… Сегодня сложно осознать, что 8-битный байт использовался не всегда — когда-то вполне разумным выбором были 60-битные слова. Но не в настоящем.

Из-за всех тех особенностей, которые не дожили до современных машин, а также благодаря успешному выполнению своих целей (в основном обеспечению нужной производительности), этот компьютер в какой-то степени можно считать «альтернативой из параллельной вселенной» — направлением, в котором могло бы двигаться развитие. Не стоит воспринимать это особо серьёзно, но концепция PP и снятие задач ОС с основного процессора всё равно остаётся очень интересной идеей, которую вряд ли будут исследовать в ближайшем будущем.

Одной из причин этого является, разумеется, «мейнстримное» современное оборудование. Это оборудование обязано многим IBM System/360. Архитектура ядра Unix и Windows основана на такой структуре процессоров, которая имеет два (или более) режима привилегий ЦП, привилегированные команды ЦП и конкретную модель защиты памяти и системных вызовов. Не говоря уже о 8-битных байтах… Оборудование, которое должно выполнять почти все задачи операционной системы на наборе процессоров за пределами основного ЦП (и сильно от него отличающемся), слишком радикально отличается для совместимости с современными популярными ОС.

Поэтому мы возвращаемся к программному обеспечению, работавшему на «старых компьютерах». Можно решить, что оно было до абсурда примитивным. В конце концов, даже у современных карманных калькуляторов память и производительность больше. Ну, не производительность. Память? Возможно…

На самом деле, операционные системы, работавшие на «старых компьютерах», удивительно изощрённы и сложны. Например, функции защиты памяти операционной системы CTSS в 1962 году — она стала первой «современной» ОС и источником (прямым и косвенным) многого того, что последовало за ней. Эта ОС имела правильно реализованную защиту памяти, появившуюся в Microsoft Windows только в версии NT… А в ОС Apple она появилась только с OSX.

Я не особо много знаю об операционных системах IBM (MVS, VM/CMS и т.д.), и под «старыми компьютерами» я подразумеваю в основном мейнфреймы, а не мини-компьютеры, поэтому ниже в основном буду говорить о CDC NOS.

Разумеется, у них не было GUI и сетей на основе IP (хотя это и не совсем так — поздние версии CDC NOS поддерживали FTP и подобные ему инструменты). Но у них есть компиляторы, программы-библиотекари, компоновщики/загрузчики, командные языки, интерактивное разделение времени (а также пакетная обработка), отладчики, защита памяти, а ещё полная и высокоэффективная среда для разработки и исполнения ПО. Только не ПО, написанного на C и C++, которое воспринимает как должное среду POSIX…

_wgsd7rhmcnyjq_spodwapkmoiq.jpeg

Интерактивная сессия с разделением времени на CDC NOS

И, к счастью, на этих компьютерах не было раздутого ПО. Наличие всего мегабайта напрямую адресуемой ОЗУ отлично стимулирует концентрацию мозга!

Если не считать «сырую» производительность, то эта нехватка ОЗУ становится самым большим «шоком» при работе с такими машинами. Для тех, кто буквально вырос на виртуальной памяти (да, я несколько лет работал на PDP-11/10 с 56 килобайтами ОЗУ, но это было очень давно), это является самым строгим ограничением возможностей. Да, конечно, в них было «Extended Core Storage» — быстрая память, предназначенная для передачи больших объёмов данных в центральную память и из неё. Она обеспечивает приблизительный эквивалент 16 мегабайт. Но если ты записываешь переменную в ECS, то не можешь использовать эту переменную в выражении — необходимо переместить её в переменную центральной памяти, а потом уже использовать.

Нехватка памяти — не такая большая проблема для размера кода. Благодаря наличию оверлеев и навыкам программистов, в имеющуюся память можно поместить исполняемый код практически любой программы. Но для данных — это основной ограничивающий фактор. Да, можно придумать алгоритмы «вне ядра», способные сделать всё, что вам нужно. Но даже если у вас хватит на это ума, это снижает производительность. Доступ к дискам затратен…

Ещё одна неожиданность NOS (которая, вероятно, относится и к операционным системам мейнфреймов IBM) заключается в том, что в ней содержалось очень мало файлов. Вместо этого единый файл на диске (или ленте) содержал системную библиотеку, составляющие которой были различными компонентами операционной системы. Инструменты библиотеки использовались для поддержки ОС. Это сильно отличается от парадигмы »50 тысяч файлов» Unix и в чём-то похожи концепций NT и VMS. Очень компактная структура.

Пример нового приложения, работающего в NOS, можно увидеть на этой странице.

Где же можно найти работающие старые мейнфреймы? Наиболее практичным способом «запуска» старого «мейнфрейма» часто является его программная эмуляция на PC. Эмулятор создаёт достоверную модель реального оборудования, которая достаточно точна для запуска полнофункциональных операционных систем машины, загружающихся с виртуальных лент или дисков.

Для машин CDC есть эмулятор Desktop Cyber Тома Хантера, а также VIMs Кента Олсена.

xcqwszsnwvfmjd6somhrpldrtgw.jpeg

Консоль оператора с запущенной NOS 1.4 в Desktop Cyber

Проблема заключается в том, где взять операционную систему. К сожалению, основные ОС CDC не выложены в свободный доступ (например, они не стали общественным достоянием), за исключением очень ранней COS (выпущенной примерно в 1965 году и в основном написанной Сеймуром Крэем). Но всё может измениться в любой момент. А пока если у вас нет ленты с NOS (или с другой ОС CDC), то COS — единственная доступная система. К сожалению, у неё есть множество ограничений. Подробную информацию см. на страницах Тома Хантера.

cnl8oyldlrq5gs-du99tifbjxem.jpeg

Старые и затратные компьютерные часы!

Для машин IBM есть эмулятор Hercules. Это прекрасный эмулятор, способный запускать практически любые операционные системы мейнфреймов IBM в том числе и ОС последних 64-битных машин zSeries. Существуют версии MVS VM/CMS конца 1970-х годов, свободно доступные для этой платформы. Кажется, сообщество пользователей Hercules довольно обширно.

n-_rtsqv_9hvkyckodq4gecqnxc.jpeg

Windows XP, в которой запущена VMware, в которой запущен Linux, в котором запущен Hercules, в котором запущен VM/CMS!

Для широкого ассортимента мини-компьютеров и суперкомпьютеров, например, для эмуляции VAX, способной запускать OpenVMS, существует эмулятор SIMH, который можно скачать здесь: http://simh.trailing-edge.com/. Это впечатляет гораздо больше. В нём есть множество операционных систем. Кроме того, OpenVMS свободно доступна по программе Hobbyist Program: http://www.openvmshobbyist.org/.

xyatxsa_67llj6d-vjnwkkp2v6c.jpeg

Потрёпанная машина на двух P3 800MHz, на которой хостился Cyber Emulator

Какого уровня производительности следует ждать от эмулируемой машины? Машины CDC представляют собой особо сложный случай. Наличие PP означает, что необходимо выполнять эмуляцию сборки из 11 процессоров, а не из одного. Но даже в такой ситуации замеренная мной производительность была не так плоха. Эмулируемая машина работает примерно в 350 раз медленнее, чем машина-хост. То есть она всё равно может работать быстрее, чем в оригинале. Например, я запустил DtCyber на машине с двумя Intel P3 800MHz и получил производительность примерно в два раза выше, чем у реального Cyber 173. Экспоненциальный рост производительности за сорок с лишним лет налицо! Более новые PC на быстрых чипах AMD или Intel обеспечат десятикратную скорость Cyber 173 или даже больше. (По сути, Cyber 173 во многом был более новой реализацией CDC 6400, в которой вместо дискретных транзисторов установили ИС SSI, а вместо памяти на магнитных сердечниках — полупроводниковую ОЗУ. Он появился в 1973 году. Модель 6400 была упрощённой версией 6600, в которой отсутствовали многие функциональные блоки и параллелизм на уровне команд. При эмуляции такие микроархитектурные различия больше не важны.)

jovth-bnygkxk-vycli6w3dbhvg.jpeg

Сдвоенные машины CDC Cyber 175 в Суперкомпьютерном центре Лейбница в Мюнхене (1979 год)

Благодаря эмулируемым машинам можно довольно удобно использовать функции операционной системы хоста для доступа к эмулируемому мейнфрейму. Например, эмулируемый Cyber 173 имеет эмулируемый считыватель перфокарт, перфоратор и построчный принтер. Довольно легко внести небольшие изменения в эмулятор, чтобы «наблюдать» за каталогом, а когда в нём появится файл, «загружать» его содержимое в виртуальный считыватель перфокарт. Аналогично, можно легко настроить каждое задание принтера так, чтобы оно записывалось в отдельный файл, а вспомогательная программа может следить за каталогом вывода построчного принтера и переименовывать файл, чтобы его имя соответствовало имени создавшего его задания. Без особых усилий можно создать для эмулируемого компьютера среду разработки с GUI! Вот как выглядит этот GUI:

wetpz9m8afqyzinptcsg-5egfg4.jpeg

Простой графический интерфейс для эмулируемого мейнфрейма Cyber

Это позволяет обеспечить неуклюжий (но вполне эффективный) интерфейс «drag-and-drop» на машине, которой уже больше сорока лет! На этой странице есть дополнительная информация, а также ПО для скачивания. (CyberClient GUI изначально является свободным ПО! Desktop Cyber защищён авторским правом © Tom Hunter. Его можно использовать бесплатно, однако подробности см. в лицензии.)

Подробнее о мейнфреймах CDC можно прочитать на этих страницах:


На правах рекламы


Если для работы необходимы серверы с мгновенной активацией на Linux или Windows, то вам однозначно к нам — сервер готов к работе через минуту после оплаты!

Подписывайтесь на наш чат в Telegram.

z9ptarc6sq-j36_r3iugpra4ojw.png

© Habrahabr.ru