Введение
Burroughs B2500 – Burroughs B4900 представляли собой серию больших ЭВМ, разработанных и производившихся компанией Burroughs Corporation в Пасадене, штат Калифорния, США, с 1966 по 1991 год. Они были ориентированы на бизнес-среду и имели набор команд, оптимизированный для языка программирования COBOL. Эти компьютеры также были известны как системы среднего класса Burroughs (Burroughs Medium Systems), в отличие от систем большого класса (Burroughs Large Systems) и систем малого класса (Burroughs Small Systems).
Первое поколение
Компьютеры B2500 и B3500 были анонсированы в 1966 году. Они работали непосредственно с основными десятичными типами данных COBOL 68: строки длиной до 100 цифр, где каждая цифра кодировалась одним символом EBCDIC или ASCII, либо двумя 4-битными двоично-десятичными кодами (BCD) на байт. Переносимые программы на COBOL не использовали двоичные целые числа, поэтому и B2500 их не использовал, даже для адресов памяти. Адресация памяти осуществлялась вплоть до 4-битной цифры в порядке старшинства байтов (big endian), с использованием 5-значных десятичных адресов. Числа с плавающей точкой также использовали основание 10, а не двоичное, и могли содержать до 100 цифр мантиссы. Типичная инструкция COBOL, такая как 'ADD A, B GIVING C', могла оперировать операндами различной длины, с разными представлениями цифр и знаков. Эта инструкция компилировалась в единую 12-байтовую команду с тремя операндами памяти. Сложное форматирование вывода достигалось выполнением единственной инструкции EDIT с подробными дескрипторами формата. Другие высокоуровневые инструкции реализовывали операции вида "преобразовать содержимое этого буфера через эту таблицу преобразования (например, из EBCDIC в ASCII) в другой буфер" и "отсортировать эту таблицу в другую таблицу, используя заданные критерии сортировки". В некоторых случаях выполнение одной инструкции могло занимать несколько сотых долей секунды. MCP мог прерывать длительные инструкции, но не мог прерывать и возобновлять частично выполненные. (Возобновление необходимо для реализации виртуальной памяти постраничного типа, когда операнды пересекают границы страниц.) Машина была настолько тесно связана с COBOL, что компилятор COBOL был простым и быстрым, а программисты на COBOL легко осваивали язык ассемблера. В исходном наборе инструкций все операции выполнялись только с памятью, без использования видимых регистров данных. Арифметические операции выполнялись последовательно, по одной цифре за раз, начиная со старших разрядов и двигаясь вправо к младшим. Это отличалось от ручного метода справа налево и было более сложным, но позволяло подавлять запись результатов в случае переполнения. Последовательная арифметика хорошо подходила для COBOL, но для языков, таких как FORTRAN или BPL, она была значительно менее эффективной, чем на стандартных компьютерах, ориентированных на работу со словами. Три зарезервированных участка памяти использовались в качестве "регистров" для индексации адресов. Третий индексный регистр был предназначен для указания на фрейм стека текущей процедуры в стеке вызовов и возвратов. Другие зарезервированные участки памяти контролировали размеры операндов, если эти размеры не были фиксированными. B3500 был аналогичен B2500, но имел более быстрое время цикла и больше возможностей для расширения. B2500 имел максимальный объем основной памяти 60 К байт и время цикла 2 микросекунды. B3500 имел максимальный объем основной памяти 500 К байт и время цикла 1 микросекунду. Вес компьютеров B2500/3500 составлял около .
Последующие поколения машин
За машинами B2500/B3500 последовали B2700/B3700/B4700 в 1972 году; B2800/B3800/B4800 в 1976 году; B2900/B3900/B4900 в 1980 году (которые первыми в линейке стали загружать свой микрокод с дискеты, а не реализовывать его в виде аппаратной памяти только для чтения), и, наконец, машины Unisys V Series V340 V560 в 1985-90 годах. Машины, предшествовавшие B4800, не имели кэш-памяти. Каждый байт операнда или байт результата требовал отдельного цикла обращения к основной памяти, что ограничивало производительность программ. Для компенсации этого, в поколении B3700/B4700 использовалась полупроводниковая основная память, которая была быстрее, но дороже и потребляла больше энергии, чем DRAM, используемая в конкурирующих машинах. Необычное использование десятичных чисел в качестве адресов памяти поначалу не создавало проблем; это лишь подразумевало использование логики декодера 1 к 5 вместо 1 к 8 при выборе строк и банков основной памяти. Однако более поздние машины использовали стандартные микросхемы памяти, которые ожидали бинарные адреса. Каждый 1000-байтовый блок логической памяти можно было без труда сопоставить с подмножеством 1024 байтов в микросхеме с потерями всего 2,3%. Но для более плотных микросхем и больших объемов памяти весь десятичный адрес приходилось преобразовывать в более короткую квази-бинарную форму перед отправкой адреса в микросхемы, и это повторялось для каждого цикла кэша или памяти. Эта логика преобразования несколько замедляла машинный цикл. Попытка перепроектирования адресного пространства в 1975 году получила название MS 3 ("Medium Systems 3rd Generation"), но проект был отменен. Машины, выпущенные до B2900, допускали ввод чисел со значениями, выходящими за пределы десятичной системы ("нецифровыми" значениями), но результат арифметических операций с ними не был определен. Это использовалось как форма шестнадцатеричной арифметики в MCP, а также некоторыми разработчиками прикладного программного обеспечения. В более поздних версиях эта возможность была отменена и вместо этого были добавлены два новых опкода (двоично-десятичный и десятично-двоичный) для поддержки адресации жестких дисков, ставших доступными после приобретения компанией Burroughs компании Memorex.
Отмена и отмена
Unisys прекратила дальнейшую разработку аппаратного обеспечения серии V в 1991 году, а поддержка была прекращена в 2004 году. В машинах B4900 и более поздних моделях целочисленные операции с 10 или менее десятичных знаков теперь выполнялись параллельно; только операнды большей длины продолжали использовать последовательный метод. Все операции с числами с плавающей запятой были ограничены точностью в 17 знаков. Более поздние машины серии Medium Systems добавили аккумуляторный регистр и инструкции, работающие с аккумулятором и памятью, используя 32-битные целые числа с 7 знаками и числа с плавающей запятой, представленные 48 или 80 битами, все выровненные по 16-битным границам слов.
Операционная система
Операционная система называлась MCP, что расшифровывалось как "Мастер Контрольная Программа". Она имела много общих архитектурных особенностей с MCP стековых машин Burroughs Large Systems, но была совершенно иной по внутренней структуре и написана на языке ассемблера, а не на производном от ALGOL. Программы имели отдельные адресные пространства, динамически переключаемые базовым регистром, но в остальном виртуальной памяти не было: ни постраничного разбиения, ни сегментации. Более крупные программы размещались в ограниченном адресном пространстве кода с помощью явных накладок. Нерезидентные части MCP также интенсивно использовались с накладками. Изначально код и данные совместно использовали единое адресное пространство в 300 000 ячеек. Более поздние модели имели отдельные миллионные пространства для программного кода и данных процессов. Поля адресов инструкций были расширены с пяти до шести ячеек, и были добавлены еще четыре реальных индексных регистра. Первые машины использовали дисковые системы Burroughs с одной головкой на дорожку, а не современные диски с подвижными головками и пластинами. В одной из попыток ускорить работу MCP, его накладки тщательно располагались таким образом, чтобы следующие необходимые накладки вскоре оказались под головкой чтения сразу после завершения текущей. Это напоминало оптимизацию компоновки, зависящую от времени, на ранних компьютерах с линиями задержки и барабанными накопителями. Однако оказалось непрактичным поддерживать это после внесения изменений в программное обеспечение, и более стабильные результаты достигались при полностью случайном расположении всех накладок MCP. Помимо самой операционной системы, все системное программное обеспечение было написано на BPL (Burroughs Programming Language) – языке системного программирования, производном от ALGOL и ESPOL систем Large System. Первоначальный компилятор COBOL поддерживал спецификацию ANSI 68 и синтаксис ENTER SYMBOLIC для встраивания кода на языке ассемблера, но не поддерживал файлы RELATIVE и INDEXED; поддержка этих типов файлов была добавлена в версию компилятора ANSI 74, выпущенную в 1982 году. MCP позволял программам обмениваться данными друг с другом посредством передачи из ядра в ядро (CRCR) или с помощью очередей хранения (STOQ), реализованных в виде системных вызовов с использованием инструкции BCT и доступных языкам (COBOL FILL FROM/INTO). Это было неслыханно, за исключением самых больших систем IBM System/360 того времени, и даже в этом случае управление взаимодействием множества программных потоков было сложной операционной задачей.