Введение
Диапазон мейнфрейм-компьютеров 1960-х и 70-х годов.
Группа больших систем Burroughs (Burroughs Large Systems Group) выпустила семейство больших 48-битных мейнфреймов, использующих наборы инструкций, основанные на стеке, с компактными командами. Первой машиной в этом семействе был B5000, выпущенный в 1961 году, который был особенно хорошо оптимизирован для компиляции программ на ALGOL 60, используя однопроходные компиляторы. B5000 эволюционировал в B5500 (с диском вместо барабанной памяти) и B5700 (до четырех систем, работающих в кластере). Последующие значительные переработки включали линейку B6500/B6700 и ее преемников, а также отдельную линейку B8500. В 1970-х годах корпорация Burroughs была реорганизована в три подразделения с существенно различающимися архитектурами продуктовых линеек для высокопроизводительных, средних и начального уровня бизнес-компьютерных систем. Продуктовая линейка каждого подразделения развивалась на основе различных концепций оптимизации набора инструкций компьютера для конкретных языков программирования. Под названием "Большие системы Burroughs" (Burroughs Large Systems) объединялись все эти линейки крупных систем, в отличие от Средних систем, оптимизированных для COBOL (B2000, B3000 и B4000), или Малых систем с гибкой архитектурой (B1000).
The Burroughs Large Systems Group produced a family of large 48 bit mainframes using stack machine instruction sets with dense syllables. The first machine in the family was the B5000 in 1961, which was optimized for compiling ALGOL 60 programs extremely well, using single pass compilers. The B5000 evolved into the B5500 (disk rather than drum) and the B5700 (up to four systems running as a cluster). Subsequent major redesigns include the B6500/B6700 line and its successors, as well as the separate B8500 line. In the 1970s, the Burroughs Corporation was organized into three divisions with very different product line architectures for high end, mid range, and entry level business computer systems. Each division's product line grew from a different concept for how to optimize a computer's instruction set for particular programming languages. "Burroughs Large Systems" referred to all of these large system product lines together, in contrast to the COBOL optimized Medium Systems (B2000, B3000, and B4000) or the flexible architecture Small Systems (B1000).
Языковая поддержка
B5000 был разработан исключительно для поддержки языков высокого уровня. Это происходило в то время, когда такие языки, как FORTRAN, а затем COBOL, только начинали приобретать популярность. Некоторые считали FORTRAN и COBOL менее мощными языками с точки зрения современных программных технологий, поэтому был выбран более новый, в основном неиспытанный язык – ALGOL 60. Диалект ALGOL, выбранный для B5000, был Elliott ALGOL, впервые разработанный и реализованный К. А. Р. Хоаром на компьютере Elliott 503. Это было практическое расширение ALGOL, включающее инструкции ввода-вывода (которые ALGOL игнорировал) и мощные инструкции для обработки строк. Знаменитая лекция Хоара, за которую он получил премию Тьюринга, была посвящена этой теме. Таким образом, B5000 был основан на очень мощном языке. Дональд Кнут ранее реализовал ALGOL 58 на более ранней машине Burroughs в течение трех месяцев летних каникул и был опосредованно вовлечен в разработку B5000 в качестве консультанта. Многие недооценивали ALGOL, ошибочно полагая, что языки высокого уровня не могут обладать той же мощностью, что и ассемблер, и не осознавая потенциал ALGOL как языка системного программирования. Компилятор Burroughs ALGOL был очень быстрым – это произвело впечатление на голландского ученого Эдсгера Дейкстру, когда он отправил программу для компиляции на завод B5000 в Пасадене. Его колода карт была скомпилирована почти мгновенно, и он сразу же захотел несколько машин для своего университета, Технологического университета Эйндховена в Нидерландах. Компилятор был быстрым по нескольким причинам, но основной причиной было то, что он выполнял однопроходную компиляцию. Ранние компьютеры не имели достаточного объема памяти для хранения исходного кода, поэтому компиляторам (и даже ассемблерам) обычно требовалось несколько раз считывать исходный код. Синтаксис Burroughs ALGOL, в отличие от официального стандарта, требовал, чтобы каждая переменная (или другой объект) была объявлена перед использованием, что позволяло создать компилятор ALGOL, который считывает данные только один раз. Эта концепция имеет глубокие теоретические последствия, но также обеспечивает очень быструю компиляцию. Большие системы Burroughs могли компилировать так же быстро, как они могли считывать исходный код с перфокарт, и у них были самые быстрые считыватели карт в отрасли. Мощный компилятор Burroughs COBOL также был однопроходным и столь же быстрым. Программа COBOL, состоящая из 4000 карт, компилировалась так же быстро, как 1000 карт в минуту могли быть считаны. Программа была готова к использованию сразу после прохождения карт через считыватель.
B8500
B8500 – военный компьютер, вдохновленный B5000. B8500 был разработан в 1960-х годах как попытка объединить конструкции B5500 и D825. В системе использовались монолитные интегральные схемы с магнитной тонкопленочной памятью. Архитектура использовала 48-битные слова, стек и дескрипторы, как в B5500, но не позиционировалась как обратно совместимая. В конце 1950-х годов. Однако, даже если эти разработки оказали непосредственное влияние на Burroughs, архитектуры B5000, B6500 и B8500 значительно отличались от архитектур Atlas и машины Rice; они также сильно различаются между собой. Первой из крупных систем Burroughs была B5000. Разработанный в 1961 году, это был компьютер второго поколения, использующий дискретную транзисторную логику и магнитческую память, за которым последовали B5500 и B5700. Первыми машинами, пришедшими на смену архитектуре B5000, были B6500 и B7500. Последующие машины B6500 и B7500 следовали тенденциям развития аппаратного обеспечения, перереализуя архитектуры на новой логической базе в течение следующих 25 лет, включая модели B6500, B7500, B6700, B7700, B6800, B7800, B5900, B7900 и, наконец, серию Burroughs A. После слияния, в результате которого Burroughs приобрела Sperry Corporation и сменила название на Unisys, компания продолжила разработку новых машин на основе MCP CMOS ASIC. Этими машинами были Libra 100, Libra 200, Libra 300, Libra 400 и Libra 500, а Libra 590 была анонсирована в 2005 году. Более поздние модели Libra, включая 590, также включают процессоры Intel Xeon и могут запускать архитектуру крупных систем Burroughs как в эмуляции, так и на процессорах MCP CMOS. Неизвестно, продолжит ли Unisys разработку новых MCP CMOS ASIC. B5000 1961 – начальная система, компьютер 2-го поколения (транзисторный). B5500 1964 – процессор с трехкратным увеличением производительности. Clearpath HMP NX 4000 1996 – ? ? Clearpath HMP NX 5000 1996 – ? ? Libra 100 2002 – ? ? ? Libra 200 200? – ? ? ? Libra 300 200? – ? ? ? Libra 400 200? – ? ? ? Libra 500 2005? Например, Libra 595. Libra 600 2006 – ? ? ? Libra 700 2010, например Libra 750.
Основные линии оборудования
Разработка, проектирование и производство аппаратного и программного обеспечения были распределены между двумя основными площадками: округ Ориндж, штат Калифорния, и окрестности Филадельфии. Изначальный завод Large Systems, разработавший модели B5000 и B5500, находился в Пасадене, штат Калифорния, но затем был перенесен в Сити-оф-Индустри, штат Калифорния, где была разработана модель B6500. Площадка в округе Ориндж, базировавшаяся на заводе в Мишн-Вьехо, штат Калифорния, но иногда включавшая в себя объекты в соседних Ирвайне и Лейк-Форесте, отвечала за линейку меньших моделей B6x00, в то время как подразделения на Восточном побережье, расположенные в Тредифрин, штат Пенсильвания, занимались линейкой более крупных моделей B7x00. Все машины обеих линеек были полностью объектно-совместимы, то есть программа, скомпилированная на одной машине, могла быть выполнена на другой. Более новые и крупные модели имели инструкции, не поддерживаемые старыми и медленными моделями, но аппаратное обеспечение, обнаружив неизвестную инструкцию, вызывало функцию операционной системы для её интерпретации. Другие различия касались обработки переключения процессов и операций ввода-вывода, а также функций обслуживания и холодной загрузки. Более крупные системы включали аппаратное планирование процессов, более производительные модули ввода-вывода и более функциональные процессоры обслуживания. Когда модели Bxx00 были заменены моделями серии A, различия сохранились, но больше не определялись непосредственно по номеру модели.
АЛГОЛ
Большие системы Burroughs используют стековую архитектуру, основанную на ALGOL. B5000 была первой системой, реализованной на стеке. Хотя B5000 изначально разрабатывалась для поддержки ALGOL, это было лишь началом. Другие языки, ориентированные на бизнес, такие как COBOL, также хорошо поддерживались, особенно благодаря мощным строковым операторам, которые были включены для разработки высокоскоростных компиляторов. ALGOL, используемый в B5000, представляет собой расширенное подмножество ALGOL. Он включает в себя мощные инструкции для работы со строками, но исключает некоторые конструкции ALGOL, в частности, не указанные формальные параметры. Механизм DEFINE выполняет аналогичную функцию, что и #define в C, но полностью интегрирован в язык, а не является препроцессором. Тип данных EVENT облегчает координацию между процессами, а блоки ON FAULT обеспечивают обработку ошибок программы. Пользовательский уровень ALGOL не содержит многих небезопасных конструкций, необходимых операционной системе и другому системному программному обеспечению. Два уровня языковых расширений предоставляют дополнительные конструкции: ESPOL и NEWP для написания MCP и тесно связанного с ним программного обеспечения, а также DCALGOL и DMALGOL для предоставления более специфических расширений для различных типов системного программного обеспечения.
ESPOL и NEWP
Первоначально операционная система B5000 MCP была написана на расширении расширенного ALGOL под названием ESPOL (Executive Systems Programming Oriented Language). В середине – конце 70-х годов его заменил язык под названием NEWP. Хотя NEWP, вероятно, означало «Новый язык программирования», вокруг его имени ходит множество легенд. Распространенная (возможно, апокрифическая) история, бытовавшая в то время в Burroughs, гласила, что название произошло от «No Executive Washroom Privileges» (Нет привилегий в туалет для руководства). Другая история утверждает, что примерно в 1976 году Джон Макклинток из Burroughs (инженер-программист, разрабатывавший NEWP) назвал язык «NEWP», когда его в очередной раз спросили: «У него уже есть имя?», ответив «nyoooop», он и принял это за имя. NEWP также являлся подмножеством расширения ALGOL, но был более безопасным, чем ESPOL, и избавлялся от некоторых редко используемых сложностей ALGOL. Фактически, компилятор NEWP отклоняет все небезопасные конструкции, если только блок специально не помечен для разрешения этих инструкций. Такая маркировка блоков обеспечивает многоуровневый механизм защиты. Программы NEWP, содержащие небезопасные конструкции, изначально не могут быть выполнены. Администратор безопасности системы может «разрешить» такие программы и сделать их исполняемыми, но обычные пользователи не имеют такой возможности. (Даже «привилегированные пользователи», которые обычно обладают практически правами root, могут быть лишены этой возможности в зависимости от выбранной конфигурации системы.) Хотя NEWP можно использовать для написания общих программ и он обладает рядом функций, предназначенных для крупных программных проектов, он не поддерживает все возможности ALGOL. NEWP предоставляет ряд средств для реализации крупномасштабных программных проектов, таких как операционная система, включая именованные интерфейсы (функции и данные), группы интерфейсов, модули и супермодули. Модули объединяют данные и функции, обеспечивая легкий доступ к данным как к глобальным внутри модуля. Интерфейсы позволяют модулю импортировать и экспортировать функции и данные. Супермодули позволяют группировать модули.
DCALGOL и системы управления сообщениями (MCS)
В первоначальной реализации система использовала подключенный специализированный процессор передачи данных (DCP) для обработки ввода и вывода сообщений от/к удаленным устройствам. Это был 24-битный мини-компьютер с обычной архитектурой регистров и аппаратными возможностями ввода-вывода для обработки тысяч удаленных терминалов. DCP и B6500 общались сообщениями в памяти, по сути, пакетами в современных терминах, а MCS осуществлял обработку этих сообщений на стороне B6500. В первые годы у DCP был ассемблер (Dacoma) и прикладная программа под названием DCPProgen, написанная на B6500 ALGOL. Позже компилятор NDL (Network Definition Language) генерировал код DCP и NDF (файл определения сети). В конечном итоге, последующее обновление привело к разработке языка и компилятора NDLII, которые использовались в сочетании с моделями 4 и 5 DCP. Для каждого типа инструкции DCP была одна функция ALGOL, и при вызове этой функции соответствующие биты инструкции DCP выдавались на выход. Программа DCP была программой ALGOL, состоящей только из длинного списка вызовов этих функций, по одному для каждого оператора языка ассемблера. По сути, ALGOL действовал как проход макросов макроассемблера. Первым проходом был компилятор ALGOL, вторым – запуск полученной программы (на B6500), которая затем выдавала двоичный код для DCP. Начиная с начала 1980-х годов, технология DCP была заменена на ICP (Integrated Communications Processor), который обеспечивал LAN-подключение для основной системы. Удаленные устройства и удаленные серверы/мейнфреймы подключались к сети через автономные устройства, называемые CP2000. CP2000 были разработаны для обеспечения поддержки сетевых узлов в распределенной сети, в которой узлы соединялись с использованием сетевой технологии BNAV2 (Burroughs Network Architecture Version 2). BNAV2 был функциональным эквивалентом продукта IBM SNA от Burroughs и поддерживал взаимодействие со средами IBM как в режимах передачи PUT2, так и PUT5. Изменение внешнего оборудования для передачи данных не потребовало изменений в существующем программном обеспечении MCS (система управления сообщениями, обсуждаемая ниже). При вводе сообщения передавались из DCP через внутреннюю шину в соответствующий стек процессов DCP MCP Datacom Control (DCC). Для каждого сконфигурированного DCP в системе инициировался один процесс DCC. Стек процессов DCP затем обеспечивал постановку входящего сообщения в очередь для доставки в MCS, идентифицированный для обработки трафика с конкретного исходного устройства, и возврат любого ответа в DCP для доставки в целевое устройство. С точки зрения обработки не требовалось изменений в программном обеспечении MCS для обработки различных типов аппаратного обеспечения шлюза, будь то любой из 5 типов DCP или комбинации ICP или ICP/CP2000. Помимо функции доставки сообщений, MCS является промежуточным уровнем безопасности между кодом операционной системы (в NEWP) и пользовательскими программами (в ALGOL или других языках приложений, включая COBOL, FORTRAN и, позднее, JAVA). MCS можно рассматривать как программу-посредник, написанную на DCALGOL (Data Communications ALGOL). Как указано выше, MCS получал сообщения из очередей, поддерживаемых стеком Datacom Control (DCC), и пересылал эти сообщения в соответствующее приложение/функцию для обработки. Одной из первых MCS была CANDE (Command AND Edit), разработанная как среда разработки онлайн-программ. Университет Отаго в Новой Зеландии разработал облегченную среду разработки программ, эквивалентную CANDE, которую они назвали SCREAM/6700, одновременно с тем, как IBM предлагала услугу удаленного разделения времени/разработки программ, известную как CALL/360, работающую на системах серии IBM 360. Другая MCS под названием COMS была представлена около 1984 года и разработана как высокопроизводительная система управления обработкой транзакций. Существовали предшественники обработки транзакций, включая GEMCOS (Generalized Message Control System), а австралийское подразделение Burroughs разработало MCS под названием TPMCS (Transaction Processing MCS). MCS для обработки транзакций поддерживали доставку данных приложений в онлайн-производственные среды и возврат ответов удаленным пользователям/устройствам/системам. MCS – это программные компоненты, заслуживающие внимания, поскольку они управляют пользовательскими сессиями и обеспечивают отслеживание состояния пользователя без необходимости запуска процессов для каждого пользователя, поскольку один стек MCS может использоваться многими пользователями. Балансировка нагрузки также может быть достигнута на уровне MCS. Например, если требуется обработать 30 пользователей на стек, то при наличии 31–60 пользователей используется два стека, 61–90 пользователей – три стека и т. д. Это дает машинам B5000 значительное преимущество в производительности в качестве сервера, поскольку не нужно запускать новый пользовательский процесс и, следовательно, создавать новый стек каждый раз, когда пользователь подключается к системе. Таким образом, можно эффективно обслуживать пользователей (независимо от того, требуется им состояние или нет) с помощью MCS. MCS также обеспечивают основу для обработки транзакций в больших масштабах. Около 1988 года была разработана реализация TCP/IP, главным образом для государственного заказчика из США, с использованием распределенного коммуникационного процессора CP2000 в качестве хоста протокола. Через два-три года реализация TCP/IP была переписана для работы на основе хоста/сервера со значительными улучшениями производительности и функциональности. Примерно в то же время была реализована реализация стека протоколов OSI, главным образом на CP2000, но большая вспомогательная инфраструктура была реализована на основной системе. Были реализованы все стандартные приложения, определенные стандартом OSI, включая хостинг почты X.400 и службы каталогов X.500.
DMALGOL и базы данных
Другой вариант ALGOL — DMALGOL (Data Management ALGOL). DMALGOL — это расширение ALGOL для компиляции программного обеспечения базы данных DMSII из файлов описания базы данных, созданных компилятором DASDL (язык определения доступа к данным и структуры). Разработчики и администраторы баз данных компилируют описания баз данных для генерации кода DMALGOL, адаптированного к указанным таблицам и индексам. Администраторам никогда не требуется писать DMALGOL самостоятельно. Обычные пользовательские программы получают доступ к базе данных, используя код, написанный на прикладных языках, в основном ALGOL и COBOL, расширенный инструкциями базы данных и директивами обработки транзакций. Наиболее заметной особенностью DMALGOL являются его механизмы предварительной обработки для генерации кода обработки таблиц и индексов. Предварительная обработка DMALGOL включает переменные и циклы и может генерировать имена на основе переменных времени компиляции. Это позволяет добиться гораздо большей степени адаптации, чем при использовании средств предварительной обработки, не поддерживающих циклы. DMALGOL используется для предоставления специализированных подпрограмм доступа к базам данных DMSII. После определения базы данных с использованием языка определения доступа к данным и структуры (DASDL) схема преобразуется препроцессором в специализированные подпрограммы доступа DMALGOL, а затем компилируется. Это означает, что, в отличие от других реализаций СУБД, часто нет необходимости в коде if/then/else, специфичном для базы данных, во время выполнения. В 1970-х годах эта "адаптация" широко использовалась для уменьшения размера кода и времени выполнения. В последующие годы она стала использоваться гораздо реже, отчасти потому, что тонкая настройка памяти и скорости на низком уровне стала менее критичной, а отчасти потому, что исключение предварительной обработки упростило кодирование и позволило проводить более важные оптимизации. Версия ALGOL для приложений, поддерживающая доступ к базам данных из прикладных программ, называется BDMSALGOL и включает команды, такие как "FIND" (НАЙТИ), "LOCK" (ЗАБЛОКИРОВАТЬ), "STORE" (СОХРАНИТЬ), "GET" (ПОЛУЧИТЬ) и "PUT" (ПОМЕСТИТЬ) для доступа к базе данных и манипулирования записями. Кроме того, были реализованы команды "BEGINTRANSACTION" (НАЧАТЬТРАНЗАКЦИЮ) и "ENDTRANSACTION" (ЗАВЕРШИТЬТРАНЗАКЦИЮ) для решения проблемы взаимных блокировок при одновременном доступе и обновлении одних и тех же структур несколькими процессами. Рой Гак из Burroughs был одним из основных разработчиков DMSII. В более поздние годы, когда размер кода компилятора перестал быть серьезной проблемой, большинство конструкций предварительной обработки стали доступны на пользовательском уровне ALGOL. Только небезопасные конструкции и прямая обработка файла описания базы данных остаются ограниченными DMALGOL.
Процедуры
Процедуры могут быть вызваны четырьмя способами: нормальным, вызовом, как процесс и выполнением. Нормальный вызов вызывает процедуру обычным способом, как любой язык вызывает подпрограмму, приостанавливая вызывающую подпрограмму до тех пор, пока вызванная процедура не вернет управление. Механизм вызова вызывает процедуру как сопрограмму. Сопрограммы – это партнерские задачи, созданные как синхронные сущности, работающие в своем собственном стеке на том же лексическом уровне, что и инициирующий процесс. Управление явно передается между инициирующим процессом и сопрограммой посредством инструкции CONTINUE. Механизм процесса вызывает процедуру как асинхронную задачу с отдельным стеком, созданным начиная с лексического уровня вызываемой процедуры. Как асинхронная задача, нет контроля над тем, когда именно управление будет передано между задачами, в отличие от сопрограмм. Вызываемая процедура по-прежнему имеет доступ к окружающей среде, и это очень эффективный механизм межпроцессного взаимодействия (IPC). Поскольку две или более задач теперь имеют доступ к общим переменным, задачи должны быть синхронизированы для предотвращения гонок данных, что обеспечивается типом данных EVENT, где процессы могут ожидать одно или несколько событий, пока они не будут сгенерированы другим взаимодействующим процессом. EVENT также обеспечивают синхронизацию взаимоисключения с помощью функций PROCURE и LIBERATE. Если по какой-либо причине дочерняя задача завершается, вызывающая задача может продолжить работу, однако, если родительский процесс завершается, все дочерние процессы автоматически прекращаются. На машине с более чем одним процессором процессы могут выполняться одновременно. Этот механизм EVENT является базовым средством для многопроцессорной обработки в дополнение к многозадачности.
Тип вызова
Последний тип вызова выполняется. Это запускает процедуру как независимую задачу, которая может продолжать работу даже после завершения исходного процесса. По этой причине дочерний процесс не может получить доступ к переменным в окружении родительского процесса, и все параметры, передаваемые вызываемой процедуре, должны передаваться по значению. Таким образом, Burroughs Extended ALGOL обладал некоторыми функциями многопроцессорности и синхронизации, которые позже появились в языках, таких как Ada. Он использовал аппаратную поддержку асинхронных процессов.
Встроенные процедуры
Последняя возможность заключается в том, что в NEWP процедура может быть объявлена INLINE, то есть при обнаружении компилятором ссылки на неё код процедуры генерируется непосредственно в месте вызова, чтобы избежать накладных расходов, связанных с вызовом процедуры; это наиболее эффективно для небольших участков кода. Инлайн-функции аналогичны параметризованным макросам, таким как C #defines, но в отличие от макросов, они не вызывают проблем с параметрами.
Асинхронные звонки
В примере программы используются только обычные вызовы, поэтому вся информация будет храниться в одном стеке. Для асинхронных вызовов для каждого асинхронного процесса создается отдельный стек, чтобы процессы обменивались данными, но выполнялись асинхронно.
Преимущества стек-структуры
Одна из хороших сторон стековой структуры заключается в том, что если программа все же завершается с ошибкой, создается дамп стека, и программисту очень легко узнать точное состояние работающей программы. Это можно сравнить с дампами памяти и файлами подкачки других систем. Еще одна особенность стековой структуры – программы неявно рекурсивны. FORTRAN не предполагалось поддерживать рекурсию, и, возможно, одним из препятствий для понимания того, как должен быть реализован ALGOL, был вопрос о том, как реализовать рекурсию. На B5000 это не было проблемой – более того, у них была обратная проблема: как предотвратить рекурсивные вызовы программ. В конечном итоге они не стали этим заниматься. Компилятор Burroughs FORTRAN допускал рекурсивные вызовы (как и любой другой компилятор FORTRAN), но, в отличие от многих других компьютеров, на стековой системе возврат из таких вызовов также выполнялся успешно. Это могло приводить к странным эффектам, например, в системе для формальной манипуляции математическими выражениями, где центральные подпрограммы неоднократно вызывали друг друга, никогда не возвращаясь: большие задачи завершались переполнением стека! Таким образом, Burroughs FORTRAN обеспечивал более надежную проверку ошибок, чем другие современные реализации FORTRAN. Например, для подпрограмм и функций он проверял, что они вызываются с правильным количеством параметров, что является обычной практикой для компиляторов в стиле ALGOL. На других компьютерах такие несоответствия часто приводили к сбоям. Аналогично и с проверкой границ массива: программы, которые годами использовались на других системах, часто с позором завершались с ошибкой при запуске в системе Burroughs. Фактически, Burroughs стал известен своими превосходными компиляторами и реализациями языков, включая объектно-ориентированную Simula (расширение ALGOL), а Айверсон, разработчик APL, заявил, что реализация APL от Burroughs была лучшей из всех, что он видел. Джон Маккарти, разработчик языка LISP, не согласился, поскольку LISP был основан на изменяемом коде, и ему не понравился неизменяемый код B5000, но большинство реализаций LISP в любом случае работали в интерпретируемой среде. Память, необходимая для нескольких процессов, выделялась из системного пула памяти по мере необходимости. На системах Burroughs не требовалось выполнять SYSGEN, как на конкурирующих системах, для предварительной настройки разделов памяти для выполнения задач.
Архитектура на основе дескриптора
На рисунке слева показано, что архитектура Burroughs Large System по своей сути являлась аппаратной архитектурой для объектно-ориентированного программирования, чего по-прежнему нет в современных архитектурах.
Набор инструкций
Существует три различных набора команд для больших систем Burroughs. Все три основаны на коротких слогах, которые умещаются в слова без остатка.
B5000, B5500 и B5700
Программы на B5000, B5500 и B5700 состоят из 12-битных слогов, четыре в слове. Архитектура имеет два режима: режим слова и режим символов, и для каждого из них существует отдельный набор слогов. Процессор может находиться в состоянии управления или в нормальном состоянии, при этом некоторые слоги допустимы только в состоянии управления. Архитектура не предусматривает прямого обращения к регистрам или памяти; все обращения осуществляются через таблицу ссылок на программу на 1024 слова, текущий сегмент кода, отмеченные позиции в стеке или к регистрам A и B, содержащим два верхних адреса в стеке. Burroughs нумерует биты в слоге от 0 (старший бит) до 11 (младший бит).
B6500 и его преемники
Программы состоят из 8-битных слогов, которые могут являться вызовом имени, вызовом значения или представлять собой оператор, длина которого может составлять от одного до двенадцати слогов. Существует менее 200 операторов, все из которых помещаются в 8-битные слоги. Многие из этих операторов полиморфны, в зависимости от типа данных, над которыми они выполняются, что определяется тегом. Если не учитывать мощные операторы сканирования, передачи и редактирования строк, то базовый набор содержит около 120 операторов. Если исключить операторы, зарезервированные для операционной системы, такие как MVST и HALT, то набор операторов, обычно используемых программами пользовательского уровня, составляет менее 100. Слоги вызова имени и вызова значения содержат пары адресов; в слогах операторов либо не используются адреса, либо используются управляющие слова и дескрипторы в стеке.
Влияние B5000
Прямое влияние B5000 прослеживается в современной линейке мэйнфреймов Unisys ClearPath, которые являются прямыми потомками B6500, на которую оказал влияние B5000, и до сих пор используют операционную систему MCP после 40 лет последовательной разработки. Эта архитектура теперь называется emode (режим эмуляции), поскольку архитектура B6500 была реализована на машинах, построенных на процессорах Intel Xeon, использующих набор инструкций x86 в качестве нативного, а код, выполняемый на этих процессорах, эмулирует набор инструкций B5000. Изначально в этих машинах планировался также nmode (родной режим), но от него отказались, поэтому машины-преемники B6500 часто называют "emode-машинами". Машины B5000 программировались исключительно на языках высокого уровня; ассемблера не было. Архитектура стека B5000 вдохновила Чака Мура, создателя языка программирования Forth, который познакомился с B5500 в MIT. В книге "Forth: The Early Years" Мур описал это влияние, отметив, что команды DUP, DROP и SWAP в Forth произошли от соответствующих инструкций B5500 (DUPL, DLET, EXCH). Машины B5000 с их стековой архитектурой и тегированной памятью оказали значительное влияние на советскую серию мэйнфреймов и суперкомпьютеров "Эльбрус". Первые два поколения серии отличались тегированной памятью и стековыми процессорами, которые программировались только на языках высокого уровня. Для них существовал язык, близкий к ассемблеру, под названием El 76, но он был скорее модификацией ALGOL 68 и поддерживал структурированное программирование и процедуры первого класса. Однако более поздние поколения серии отказались от этой архитектуры в пользу EPIC-подобных VLIW-процессоров. Разработчики бизнес-системы HP 3000 от Hewlett Packard использовали B5500 и были впечатлены его аппаратным и программным обеспечением; они стремились создать 16-битный миникомпьютер с аналогичным программным обеспечением. Несколько других подразделений HP создали подобные миникомпьютеры или микропроцессорные стек-машины. Работа Боба Бартона над обратной польской нотацией (RPN) также нашла применение в калькуляторах HP, начиная с модели 9100A, и особенно в калькуляторах HP 35 и последующих моделях. Системы NonStop, разработанные Tandem Computers в конце 1970-х и начале 1980-х годов, также были 16-битными стек-машинами, на которые B5000 повлиял косвенно через HP 3000, поскольку несколько ранних инженеров Tandem ранее работали в HP. Около 1990 года эти системы перешли на архитектуру MIPS RISC, но продолжали поддерживать выполнение бинарных файлов стек-машин путем трансляции объектного кода или прямой эмуляции. Вскоре после 2000 года эти системы перешли на архитектуру Itanium и продолжили запускать устаревшие бинарные файлы стековых машин. Боб Бартон также оказал большое влияние на Алана Кея. Кея впечатлила архитектура B5000, основанная на данных и тегах, и это повлияло на его идеи при разработке объектно-ориентированного программирования и Smalltalk. Еще одной особенностью архитектуры B5000 была ее безопасность, обеспечиваемая прямым выполнением кода на аппаратном уровне. Этот подход нашел отражение в современных виртуальных машинах, стремящихся обеспечить безопасную среду. Одним из таких продуктов является Java JVM, предоставляющая безопасную "песочницу" для запуска приложений. Ценность аппаратной привязки, существовавшей до emode, в значительной степени сохранилась в машинах на базе x86, поскольку MCP оставалась единственной управляющей программой, однако поддержка, предоставляемая этими машинами, все еще уступает поддержке на машинах, где набор инструкций B6500 является нативным. Малоизвестная архитектура процессора Intel, iAPX 432, которая предшествовала 32-битным реализациям набора инструкций x86, могла бы обеспечить эквивалентную аппаратную основу, поскольку она также по сути была объектно-ориентированной архитектурой.