Введение

Серия ICL 2900 – это серия больших ЭВМ, представленная британским производителем International Computers Limited 9 октября 1974 года. Компания начала разработку под кодовым названием "New Range" сразу после своего основания в 1968 году. Серия не была спроектирована с учетом совместимости с ранее выпускавшимися машинами компании или с машинами конкурентов: вместо этого она задумывалась как принципиально новая разработка, объединяющая лучшие идеи, заимствованные из различных источников. С точки зрения маркетинга, серия 2900 была вытеснена серией 39 в середине 1980-х годов; однако серия 39 по сути представляла собой новый набор машин, реализующих архитектуру серии 2900, как и последующие ЭВМ ICL, выпускавшиеся под брендом "Trimetra".

Происхождение

Когда ICL была образована в 1968 году в результате слияния International Computers and Tabulators (ICT) с English Electric Leo Marconi и Elliott Automation, компания рассматривала несколько вариантов для своей будущей продуктовой линейки. Среди них были усовершенствования серии 1900 от ICT или системы System 4 от English Electric, а также разработка на основе Basic Language Machine, созданной Дж. К. Илиффом. В конечном итоге был выбран так называемый "Синтетический вариант" – принципиально новая разработка, созданная с нуля. Как следует из названия, на дизайн повлияло множество источников, включая более ранние машины ICL. Значительное влияние оказала архитектура мейнфреймов Burroughs, однако ICL отказалась от идеи оптимизации дизайна под один язык программирования высокого уровня. Система Multics предложила другие идеи, в частности в области защиты данных. Тем не менее, самым существенным внешним влиянием, вероятно, стала машина MU5, разработанная в Манчестерском университете.

Виртуальная машина

Архитектура серии 2900 использует концепцию виртуальной машины как набора ресурсов, доступных программе. Концепция виртуальной машины в архитектуре серии 2900 отличается от используемого в других средах значения этого термина. Поскольку каждая программа выполняется в своей собственной виртуальной машине, эту концепцию можно сравнить с процессом в других операционных системах, в то время как процесс серии 2900 больше похож на поток. Наиболее очевидным ресурсом в виртуальной машине является виртуальное хранилище (память). Другие ресурсы включают периферийные устройства, файлы и сетевые соединения. В виртуальной машине код может выполняться на любом из шестнадцати уровней защиты, называемых уровнями доступа (или ACR-уровнями, по названию регистра контроля доступа, управляющего этим механизмом). Наиболее привилегированные уровни кода операционной системы (ядро) работают в той же виртуальной машине, что и пользовательское приложение, а также промежуточные уровни, такие как подсистемы, реализующие доступ к файловому хранилищу и сетевое взаимодействие. Таким образом, системные вызовы включают изменение уровня защиты, но не дорогостоящий вызов кода в другой виртуальной машине. Каждый модуль кода выполняется на определенном уровне доступа и может вызывать функции, предоставляемые кодом более низкого уровня (более привилегированным), но не имеет прямого доступа к памяти или другим ресурсам на этом уровне. Архитектура таким образом предлагает встроенный механизм инкапсуляции для обеспечения целостности системы. Сегменты памяти могут совместно использоваться между виртуальными машинами. Существует два типа общей памяти: публичные сегменты, используемые операционной системой (присутствующие во всех виртуальных машинах), и глобальные сегменты, используемые для обмена данными на уровне приложений: последний механизм используется только при наличии требования к приложению для обмена данными между двумя виртуальными машинами. Например, глобальные сегменты памяти используются для таблиц блокировок баз данных. Для синхронизации доступа к таким сегментам доступны аппаратные инструкции семафоров. Любопытно, что две виртуальные машины, совместно использующие глобальный сегмент, используют разные виртуальные адреса для одних и тех же областей памяти, что означает, что виртуальные адреса нельзя безопасно передавать между виртуальными машинами. Термин, используемый в машинах ICL серии 2900 и ICL серии 39 для центрального процессора (CPU), – "процессор команд" (Order Code Processor, OCP).

Механизмы реагирования

Архитектура 2900 поддерживает аппаратный стек вызовов, обеспечивая эффективный механизм для выполнения программ на языках высокого уровня, особенно тех, которые допускают рекурсивные вызовы функций. Это было дальновидным решением в то время, поскольку ожидалось, что доминирующими языками программирования станут COBOL и FORTRAN. Архитектура предоставляет встроенные механизмы для осуществления вызовов процедур с использованием стека, а также специальные регистры для адресации вершины стека и основания текущего фрейма стека. Данные вне стека обычно адресуются через дескриптор – 64-битную структуру, содержащую 32-битный виртуальный адрес и 32 бита управляющей информации. Управляющая информация определяет, является ли адресуемая область кодом или данными; в случае данных – размер адресуемых элементов (1, 8, 32, 64 или 128 бит); флаг, указывающий на необходимость аппаратной проверки границ массива; и различные другие улучшения. 32-битный виртуальный адрес состоит из 14-битного номера сегмента и 18-битного смещения внутри сегмента. Код операций не является неотъемлемой частью архитектуры 2900. Этот факт был использован для эмуляции других машин путем микрокодирования их наборов инструкций. Однако на практике все машины серии 2900 реализуют общий код операций или набор инструкций, известный как PLI (Primitive Level Interface). Он предназначен главным образом как цель для компиляторов языков высокого уровня. Наиболее мощные машины, такие как 2980 и 2988, реализовали все инструкции аппаратно, в то время как остальные использовали микрокодированную прошивку. Существует несколько регистров, каждый из которых предназначен для определенной цели. Регистр-аккумулятор (ACC) доступен для общего назначения и может иметь размер 32, 64 или 128 бит. Регистр B используется для индексации массивов; регистр LNB (Local Name Base) указывает на основание текущего фрейма стека, а регистр SF (Stack Front) – на подвижную "вершину" стека; регистр DR используется для хранения дескрипторов для адресации в кучу и так далее. Также имеются два 32-битных указателя на данные вне стека: XNB (eXtra Name Base) и LTB (Linkage Table Base). Форматы данных, распознаваемые инструкциями PLI, включают 32-битные беззнаковые целые числа; 32-битные и 64-битные целые числа в дополнительном коде; 32-битные, 64-битные и 128-битные числа с плавающей точкой; и 32-битные, 64-битные и 128-битные упакованные десятичные числа. В отличие от соглашений C и UNIX, логическое значение true представлено нулем, а false – минус единицей. Строки хранятся как массивы 8-битных символов, обычно кодируемых в EBCDIC (хотя EBCDIC от ICL имеет незначительные отличия от версии IBM). Вместо EBCDIC можно использовать ISO (по сути ASCII), установив управляющий бит в привилегированном регистре; это, в частности, влияет на некоторые инструкции преобразования десятичных чисел. Поскольку некоторые инструкции PLI, особенно предназначенные для вызова процедур, очень мощны (особенно системные вызовы), скорость выполнения инструкций в серии 2900 не всегда напрямую сопоставима с таковой у оборудования конкурентов. В маркетинговой литературе ICL обычно использовалось понятие "эквивалент IBM MIPS", представляющее собой рейтинг MIPS мейнфрейма IBM, достигшего той же пропускной способности в прикладных тестах. Эффективность, достигнутая архитектурой 2900, в частности, избежание накладных расходов на системные вызовы, компенсировала относительно низкую производительность аппаратного обеспечения.

Р (параллельная) серия

Первыми машинами, анонсированными в серии 2900, были 2980 и 2970. 2980 поддерживал один или два процессора кода заказов (OCP), каждый из которых работал на частоте до 3 миллионов инструкций в секунду, с оперативной памятью, конфигурируемой до 8 мегабайт, с временем доступа 500 наносекунд. 2980 изначально был самым мощным из мейнфреймов ICL New Range. Помимо OCP, он состоял из контроллера множественного доступа к памяти (SMAC) и одного или нескольких контроллеров доступа к памяти (SAC), общего периферийного контроллера (GPC), одного или нескольких контроллеров дисковых файлов (DFC) и контроллера связи (CLC), а также дисковых накопителей (типичная конфигурация включала восемь накопителей EDS 200), магнитных ленточных накопителей, операторской станции (OPER), строчных принтеров и считывателей карт. Он мог работать под управлением операционных систем ICL VME (VME/B, VME/K) или Эдинбургской системы множественного доступа (EMAS). Типичная конфигурация 2980 стоила около 2 миллионов фунтов стерлингов (эквивалент 2,0 фунтов стерлингов в 1977 году соответствует примерно <расчетной сумме> миллионов в настоящее время). В отличие от 2980, 2970 и последующие модели 2960 были микрокодированы, что позволяло эмулировать наборы инструкций, например, более старых серий 1900 или System 4. Машина серии 2900 строилась из ряда функциональных модулей, каждый из которых размещался в отдельном шкафу. Периферийные устройства подключались с помощью примитивного интерфейса ICL (разъем/кабель и набор кабелей) к адаптеру порта на SMAC. Использовалось логическое адресование, применялась групповая схема для идентификации компонентов системы в терминах портов, магистралей и потоков. Магистраль (Trunk) – это общее название и аппаратный адрес в порту, к которому назначался периферийный контроллер. Магистраль (Trunk) – это общее название контроллера для ряда устройств потока (Stream). Поток (Stream) – это общее название канала, через который можно было обращаться к отдельным периферийным устройствам. Процесс загрузки серии 2960 заслуживает особого внимания: OCP содержал мини-терминал OPER и кассетный магнитофон. При загрузке OCP выполнял начальную загрузку программы (IPL) с назначенного устройства IPL. Код IPL предоставлял OCP возможность определить аппаратную конфигурацию системы, запрашивая информацию по потокам (Stream), магистралям (Trunk) и портам, чтобы найти устройство загрузки по умолчанию или выбранное вручную для набора микрокода и/или операционной системы. Этот процесс назывался GROPE, или общая разведка периферийного оборудования. Метод кассетной загрузки также позволял инженерному персоналу загружать и выполнять диагностическое программное обеспечение.

S (серийный) сериал

Первые машины впоследствии были заменены семейством машин, основанных на конструкции среднего класса 2966, которые стоили дешевле в производстве и использовали последовательные, а не параллельные соединения. Модель 2966 была улучшена в плане производительности до 2988 и упрощена до 2958, а также дополнялась двухпроцессорными версиями, чтобы охватить весь спектр производительности.