Burroughs B5000 — первый компьютер со стековой архитектурой
Начало шестидесятых — эпоха мейнфреймов, время, когда вычислительные машины шагнули за пределы военных лабораторий, превратившись в рабочий инструмент ученых и инженеров. В 1961 году компания Burroughs представила один из самых новаторских компьютеров своего времени — Burroughs B5000. Эта машина радикально отличалась от других мейнфреймов благодаря примененному разработчиками необычному подходу к конструкции и программному обеспечению, и стала первой в истории ЭВМ, в которой была реализована стековая архитектура.
Рождение B5000
Как и многие другие фирмы, заявившие о себе на рынке вычислительной техники на рубеже 50-х и 60-х годов, группа компаний Burroughs Large Systems дебютировала еще в 1880-х с механическими арифмометрами. Однако к 1960 году электронные вычислительные машины уже не считались диковинкой, многие из них имели статус коммерческой продукции. То есть, о массовом серийном производстве речи пока еще не шло, но постройка мейнфреймов под заказ была вполне привычным делом. Чтобы хоть как-то конкурировать на этом растущем рынке, в Burroughs решили спроектировать мейнфрейм с использованием самых передовых и современных технологий своего времени, и самое главное — с прицелом на использование языков высокого уровня. Это позволяло значительно расширить контингент специалистов, способных работать с такой вычислительной машиной, и одновременно сделало бы интерфейс «человек — компьютер» более удобным и понятным для оператора со средним уровнем подготовки.
Первой характерной особенностью B5000 стало то, что разработчики полностью проигнорировали появившийся еще в 1957 году FORTRAN и сделали ставку на менее распространенные языки ALGOL и COBOL. Компьютер создавала команда Роберта Бартона — бывшего сотрудника IBM, выдающегося инженера, специалиста по кибернетике и профессора Университета Юты.
Сам подход к проектированию B5000 считался довольно новаторским для своего времени: обычно инженеры сначала разрабатывали аппаратную архитектуру ЭВМ, а потом предоставляли соответствующую документацию разработчикам ПО, чтобы они написали под эту архитектуру софт. В Burroughs поступили в точности наоборот: сначала подготовили требования к программному обеспечению и языкам программирования, а уже затем начали создавать под них «железо».
Архитектура B5000
В основе архитектуры этой ЭВМ лежало использование аппаратно-управляемого стека для вычислений и широкое применение дескрипторов для доступа к данным. Кроме того, Burroughs B5000 был одним из первых коммерческих компьютеров, использовавших виртуальную память. Для дополнительной безопасности код и данные разделялись в памяти с помощью специального «бита флага», и оборудование не могло обработать данные или изменять код без предварительного явного изменения этого флага. B5000 считается одной из первых машин, в которой использовалась многозадачность и защита памяти на аппаратном уровне. Это было реализовано с использованием системы хранящихся в стеках структур данных, которые позволяли безопасно управлять выполнением нескольких задач. Каждая задача имела свой собственный стек, и процессор мог переключаться между ними, обеспечивая высокую степень параллелизма.
Собственно, стековая архитектура и стала основной «изюминкой» B5000, отличавшей этот компьютер от других ЭВМ того времени. Операции над данными в процессоре B5000 были организованы по принципу LIFO (Last In, First Out), то есть, последний вошедший элемент извлекается первым. Стековая архитектура упрощает управление вычислениями и использование переменных, позволяя процессору автоматически сохранять и восстанавливать данные. Стековые машины работают без использования регистров общего назначения (как в традиционных процессорах), опираясь на стек для всех операций — от арифметики до вызова подпрограмм.
В отличие от большинства других систем, в которых стек реализовывался программно или косвенно через другие ресурсы (например, через регистры), в B5000 стек был встроен в аппаратную конфигурацию машины, что обеспечивало высокую скорость выполнения операций. При этом отпадала необходимость вручную управлять регистрами для каждой переменной.
Стековая машина B5000 организовывала работу таким образом, что каждая операция подразумевала использование данных, уже находящихся в стеке. Например, если нужно было сложить два числа, оба значения сначала помещались в стек, после чего выполнялась операция сложения, и результат сохранялся на вершине стека. Одним из главных преимуществ стековой архитектуры было то, как легко она поддерживала вызов подпрограмм. Каждый раз, когда программа вызывала подпрограмму, машина помещала в стек текущее состояние программы — адрес возврата, значения переменных и другие данные — и передавала управление подпрограмме. После завершения подпрограммы стек очищался и программа продолжала выполнение с того места, где она остановилась.
Иными словами, в этом компьютере было реализовано сразу несколько передовых для 1961 года концепций, которыми не могли похвастаться многие конкуренты, например, компьютер поддерживал концепцию совместного использования времени (timesharing), позволявшую нескольким пользователям одновременно работать с одной машиной.
Программное обеспечение
В качестве основного языка программирования, используемого для работы с Burroughs B5000, был выбран ALGOL-60, вернее, его диалект Elliott ALGOL, впервые разработанный и реализованный английским ученым Чарльзом Энтони Ричардом Хоаром на Elliott 503. Примечательно, что в процессе разработки программного обеспечения для B5000 в качестве консультанта компании выступал небезызвестный Дональд Кнут, уже имевший опыт работы с ALGOL-58 на одной из ранних ЭВМ этой фирмы. При этом пользователю B5000 был недоступен язык Ассемблера.
Большинство ЭВМ в 1961 году не отличались высоким быстродействием, и компиляторы языков высокого уровня работали на них крайне медленно, из-за чего многие программисты отдавали предпочтение Ассемблеру. Основная причина заключалась в том, что ранние компьютеры не имели достаточной оперативной памяти для хранения всего объема исходного кода программы, поэтому им (и даже компиляторам Ассемблера) обычно приходилось читать исходный код в несколько итераций, компилировать программу блоками, а потом собирать ее воедино. Компилятор ALGOL для B5000, напротив, был однопроходным, за счет чего работал очень быстро, настолько, что эта скорость удивляла экспертов. Этому же способствовал и специальный синтаксис «Алгола» для этой ЭВМ: в отличие от «официальной» версии языка диалект ALGOL для B5000 требовал, чтобы все переменные были обязательно объявлены перед использованием, благодаря чему компилятор имел возможность считать все данные за один проход. Считается, что во многом благодаря этой особенности Burroughs получила первые заказы на свою ЭВМ от Эйндховенского университета в Нидерландах.
Компилятор COBOL для B5000 также был однопроходным и очень быстрым: программа на COBOL, занимавшая 4000 перфокарт, компилировалась с той же скоростью, с которой другие компьютеры того времени были способны только прочитать код такой программы.
Дальнейшая эволюция
Burroughs B5000 оказался настолько успешным компьютером, что Burroughs Large Systems в последующие годы начала выпускать усовершенствованные модификации этой ЭВМ. В 1964 году появилась B5500, в 1966-м — B6500, затем B5700 и B6700. Было расширено использование дескрипторов, флаг из однобитного стал трехбитным и внешним по отношению к 48-битному слову данных, а набор команд модифицировали, чтобы воспользоваться этими изменениями. Дескрипторы были инструментом сегментации памяти и использовались для адресации этих сегментов. Изначально их придумали как механизм доступа к массивам: дескрипторы позволяли проверять границы и упрощали динамическое распределение массива (это также важно для программ на ALGOL). С их помощью компилятор мог различать массивы слов и строки символов, и получал размер таких строк в битах. Именно с помощью дескрипторов в B5000 и ЭВМ последующих поколений была реализована виртуальная память.
Аппаратные различия перечисленных выше моделей заключались в количестве и расположении процессоров: например, B6700 мог иметь до трех центральных процессоров и до трех процессоров ввода-вывода, а в более поздней B7700 таких процессоров могло насчитываться до восьми в различных комбинациях. В какой-то момент в архитектуру компьютеров Burroughs добавили аппаратное обеспечение векторного режима, что сделало возможным использование языка APL и расширило способность процессора быстро выполнять повторяющиеся арифметические операции.
В 1970-х годах корпорация Burroughs была разделена на три подразделения, выпускавшие компьютеры разных продуктовых линеек: высокого, среднего и начального уровня. Затем Burroughs приобрела Sperry Corporation и сменила название на Unisys, после чего продолжила разработку новых машин на базе CMOS ASIC.
Одна из главных заслуг B5000 — вклад этого компьютера в развитие языков высокого уровня. Являясь первой системой, созданной специально для выполнения программ на ALGOL, B5000 доказал, что высокоуровневые языки могут быть не только удобными для программистов, но и эффективными на аппаратном уровне. Это стало отправной точкой для создания таких языков, как Pascal, C и других современных языков программирования. Стековая архитектура, реализованная в B5000, позже стала использоваться в микропроцессорах и современных компьютерах. Она продемонстрировала, как использование стека на аппаратном уровне может упростить разработку программного обеспечения и ускорить выполнение операций. Это был важный шаг в эволюции архитектур, ориентированных на работу с языками программирования высокого уровня и решающих задачи, которые сегодня считаются стандартом в компьютерной индустрии. Идеи аппаратной поддержки стеков были использованы в более поздних машинах Burroughs, таких, как B5500 и B6700, а также в ряде других вычислительных систем.
Статья поддерживается командой Serverspace.Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows в 8 дата-центрах: Россия, Беларусь, Казахстан, Нидерланды, Турция, США, Канада и Бразилия. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.
IT-инфраструктура | Удвоение первого платежа по коду HABR