Введение
Операционная система ICL VME (Virtual Machine Environment) – это операционная система, разработанная британской компанией International Computers Limited (ICL, в настоящее время часть группы Fujitsu). Первоначально разработанная в 1970-х годах (как VME/B, позже VME 2900) для работы с новейшими на тот момент мейнфреймами серии 2900 компании ICL, эта операционная система теперь известна как OpenVME, включающая подсистему Unix, и функционирует на мейнфреймах серий ICL 39 и Trimetra, а также на стандартных x64-серверах.
VME (Virtual Machine Environment) is a mainframe operating system developed by the UK company International Computers Limited (ICL, now part of the Fujitsu group). Originally developed in the 1970s (as VME/B, later VME 2900) to drive ICL's then new 2900 Series mainframes, the operating system is now known as OpenVME incorporating a Unix subsystem, and runs on ICL Series 39 and Trimetra mainframe computers, as well as industry standard x64 servers.
История
Когда New Range был впервые запущен в октябре 1974 года, его операционная система называлась "Система B". К моменту первой поставки она стала "VME/B". VME/K (первоначально известная внутри как "System T" – "Tiny") была разработана независимо (по словам Кэмпбелла Келли, "по прихоти Эда Мака") и поставлялась позже с более компактными мэйнфреймами, такими как 2960. В то время VME/B все еще страдала от проблем с производительностью и надежностью, и команда управления, состоявшая в основном из американцев, испытывала сомнения. Существовал также проект под названием System D – передовая, высокомодульная операционная система, предназначенная для конфигурирования и создания заказных приложений, близких к реальному времени. Хотя она использовалась для участия в тендере на систему для British Rail, впоследствии проект был отменен из-за нехватки инженерных ресурсов. ICL продала крупную систему Европейскому космическому агентству для обработки данных со спутника Meteosat в его операционном центре в Дармштадте. Для удовлетворения требований заказчика на месте была разработана специализированная версия VME/K, известная как VME/ESA. После финансового кризиса в 1980 году в ICL пришло новое руководство (Кристофор Лейдлоу – председатель, Робб Уилмот – управляющий директор). Одним из первых решений нового руководства было прекращение разработки VME/K. Таким образом, в июле 1981 года был представлен "VME2900": хотя он позиционировался как объединение VME/B и VME/K, на самом деле это была база VME/B с небольшим количеством отобранных функций из VME/K, добавленных к ней. Это позволило отказаться от некоторых устаревших функций, которые оставались доступными для клиентов в виде опции "BONVME". Суффикс "2900" был удален в System Version 213 (SV213), когда ICL в 1985 году выпустила Series 39 в качестве преемника оригинальной серии 2900; а префикс "Open" был добавлен после SV294. VME получила возможность запускать приложения, изначально написанные для Unix, через подсистему UNIX System V Release 3 под названием VME/X, адаптированную для работы под VME и использующую кодировку символов ASCII. В 2007 году Fujitsu объявила о версии VME, работающей как размещенная подсистема под названием superNova, в Microsoft Windows, SUSE или Red Hat Enterprise Linux на аппаратном обеспечении x86 64. Fujitsu планировала поддерживать VME на компьютерах клиентов до 2020 года. В 2020 году Fujitsu перенесла 13 приложений HM Revenue and Customs со своих компьютеров на виртуальную управляемую платформу хостинга VME Fujitsu. По состоянию на 2021 год Департамент по труду и пенсиям полностью заменил свои системы на основе VME после завершения отмеченной наградами программы замены VME R. https://www.computerweekly.com/news/252498414/DWP-completes-in-house-VME-replacement-project
Архитектура
VME структурирована как набор слоев, каждый из которых имеет доступ к ресурсам на различных уровнях абстракции. Виртуальные ресурсы, предоставляемые одним слоем, создаются на основе виртуальных ресурсов, предлагаемых слоем ниже. Доступ к ресурсам каждого уровня контролируется посредством набора уровней доступа: для использования ресурса на определенном уровне доступа процессу необходим ключ доступа, обеспечивающий доступ к этому уровню. Эта концепция аналогична "кольцам защиты" в Multics. Архитектура предусматривает 16 уровней доступа, из которых внешние 6 зарезервированы для кода пользовательского уровня. Независимо от уровней доступа, операционная система предоставляет приложениям ресурсы в виде виртуальных машин. Виртуальная машина может выполнять несколько процессов. На практике виртуальная машина VME ближе к понятию процесса в других операционных системах, а процесс VME больше похож на поток. Распределение ресурсов виртуальной машине осуществляется по стековой модели: при извлечении элемента из стека все ресурсы, выделенные на этом уровне стека, освобождаются. Поэтому вызовы из приложения в операционную систему выполняются посредством вызова, сохраняющего стек текущего процесса, но с изменением уровня защиты; высокая эффективность системных вызовов – одна из характеристик, обеспечивающих конкурентоспособность архитектуры. Взаимодействие между виртуальными машинами осуществляется посредством событий (именованных каналов связи) и областей разделяемой памяти. Аппаратная архитектура также предоставляет инструкции семафоров INCT (инкремент и проверка) и TDEC (проверка и декремент). Файлы и другие постоянные объекты хранятся в репозитории, называемом Каталогом. Иерархия имен файлов не зависит от физического расположения файла на ленте или диске. В эпоху, когда оффлайн-хранилища были более востребованы, это упрощало отслеживание файлов независимо от их местоположения и перемещение файлов между носителями без переименования. Помимо файлов, Каталог отслеживает пользователей и группы пользователей, тома, устройства, сетевые соединения и множество других ресурсов. Метаданные файлов могут храниться в объекте, называемом описанием файла. Каталог, вероятно, был первым примером того, что впоследствии стало известно как база данных "сущность-связь". Прерывания обрабатываются путем создания нового фрейма стека для соответствующего процесса, обработки прерывания в этой новой среде и последующего извлечения стека для возврата к прерванному процессу. Исключения времени выполнения, называемые непредвиденными ситуациями, перехватываются обработчиком ошибок объектных программ (OPEH), который может генерировать отчет (эквивалентный трассировке стека) интерактивно или записывать его в журнал.
when the stack is popped, all resources allocated at that stack level are released. Calls from an application to the operating system are therefore made by a call that retains the same process stack, but with a change in protection level; the resulting efficiency of system calls is one of the features that makes the architecture competitive. Communication between Virtual Machines is achieved by means of Events (named communication channels) and shared memory areas. The hardware architecture also provides semaphore instructions INCT (increment and test) and TDEC (test and decrement). Files and other persistent objects are recorded in a repository called the Catalogue. The file naming hierarchy is independent of the location of a file on a particular tape or disk volume. In days where there was more need for offline storage, this made it easy to keep track of files regardless of their location, and to move files between locations without renaming them. As well as files, the Catalogue keeps track of users and user groups, volumes, devices, network connections, and many other resources. Metadata for files can be held in an object called a File Description. The Catalogue was probably the first example of what would later be called an entity relationship database. Interrupts are handled by creating a new stack frame on the stack for the relevant process, handling the interrupt using this new environment, and then popping the stack to return to the interrupted process. Run time exceptions, referred to as contingencies, are captured by the Object Program Error Handler (OPEH), which can produce a report (equivalent to a stack trace), either interactively or written to a journal.
ОМФ
Компилированный объектный код хранится в формате OMF (Object Module Format), который служит результатом работы компилятора и используется загрузчиком. Доступны различные компиляторы, а также утилиты, в частности Collector, объединяющий код из нескольких OMF-модулей в один для более эффективной загрузки во время выполнения, и Module Amender, позволяющий вносить исправления в инструкции OMF-модуля для устранения ошибок, используя синтаксис языка ассемблера.
Улучшенные варианты безопасности
В результате тесной вовлеченности ICL в поставку компьютерных услуг государственному сектору Великобритании, особенно тем, которые предъявляли особые требования к безопасности, таким как OPCON CCIS, компания стала одним из первых игроков на рынке защищенных систем. VME сформировала основу деятельности ICL в сфере защищенных систем. Её преимуществом было то, что, будучи последней крупномасштабной операционной системой, когда-либо разработанной с нуля, её базовая архитектура включала в себя многие примитивы, необходимые для разработки защищенной системы, в частности, аппаратные регистры контроля доступа (ACR) для ограничения привилегий, которые мог получить любой процесс (включая пользователей). Это привело к тому, что Центральное агентство вычислительной техники и телекоммуникаций правительства Великобритании (CCTA) в середине 1980-х годов профинансировало проект Spaceman, поручив Центру оборонных технологий ICL (DTC) разработать версию VME с повышенной безопасностью. ICL представила это как пару взаимодополняющих продуктов: коммерческий выпуск под названием High Security Option (HSO) и выпуск для государственного сектора, включающий технологии Government Furnished Encryption (GFE), под названием Government Security Option (GSO). HSO и GSO были официально протестированы в рамках схемы оценки CESG UK (Security), одного из предшественников ITSEC и Common Criteria, и таким образом стали первой широко используемой операционной системой, получившей официальную сертификацию.
Серия 39
Серия 39 представила архитектуру Nodal – новую реализацию распределенной общей памяти, которую можно рассматривать как гибрид мультипроцессорной системы и кластерной архитектуры. Каждая машина состоит из нескольких узлов, и каждый узел содержит свой процессор (CPU) и основную память. Виртуальные машины обычно располагаются (в любой момент времени) на одном узле, но имеют возможность выполняться на любом узле и перемещаться с одного узла на другой. Диски и другие периферийные устройства совместно используются узлами. Узлы соединены высокоскоростной оптической шиной, которая обеспечивает приложения виртуальной общей памятью. Сегменты памяти, помеченные как общие (публичные или глобальные сегменты), реплицируются на каждом узле, а обновления транслируются по сети между узлами. Процессы, использующие не общие сегменты памяти (узловые или локальные), работают в полной изоляции от других узлов и процессов.
Процесс разработки
VME первоначально был написан почти полностью на S3, специально разработанном языке системного программирования на основе Algol 68R (однако VME/K был написан в основном на языке ассемблера SFL). Хотя использовался язык высокого уровня, операционная система не была спроектирована с учетом независимости от базовой аппаратной архитектуры: напротив, программное и аппаратное обеспечение тесно интегрированы. Начиная с начала 1990-х годов, некоторые совершенно новые подсистемы VME разрабатывались частично или полностью на языке программирования C. С первых дней разработки VME использовалась система репозиториев программной инженерии CADES, первоначально разработанная и поддерживаемая Дэвидом Пирсоном (специалистом в области компьютерных наук) и созданная на основе базы данных IDMS. CADES – это не просто система контроля версий для модулей кода: она управляет всеми аспектами жизненного цикла программного обеспечения, начиная от сбора требований, методологии и спецификации проектирования и заканчивая полевым обслуживанием. В процессе разработки модулей VME CADES использовалась для хранения отдельных определений структур данных (мод), констант (литералов), процедурных интерфейсов и основных алгоритмов. Для каждого из этих компонентов могло существовать несколько версий («жизненных циклов»). Алгоритмы были написаны на языке системного проектирования (SDL), который затем препроцессором преобразовывался в исходный код S3. Можно было генерировать несколько версий одних и тех же модулей.
Языки системного программирования: S3 и SFL
Основным языком, используемым для разработки как самой операционной системы VME, так и другого системного программного обеспечения, такого как компиляторы и мониторы обработки транзакций, является S3. Это язык высокого уровня, во многом основанный на Algol 68, но с типами данных, а также функциями и операторами низкого уровня, тесно согласованными с архитектурой серии 2900. Также доступен язык ассемблера SFL (System Function Language). Он использовался для разработки VME/K, поскольку её разработчики не были уверены, что язык высокого уровня обеспечит достаточную производительность, и для системы баз данных IDMS в связи с её происхождением как продукта стороннего разработчика. Изначально SFL назывался Macro Assembler Programming Language (MAPLE), но поскольку архитектура 2900 позиционировалась как состоящая из машин, работающих на языках высокого уровня, название было изменено по запросу отдела маркетинга ICL. Он был разработан как часть инструментария для системы D, разработка которой впоследствии была прекращена. Для внутреннего использования были разработаны связанные семейства ассемблеров для других архитектур (CALM xx, работающие под управлением VME, и PALM xx, разработанные на Pascal и работающие на различных хостах). Ни S3, ни SFL никогда не продвигались как коммерческие инструменты разработки для пользовательских приложений, поскольку они обычно не поставлялись в составе операционной системы и не продавались как самостоятельные продукты. Однако SFL и S3 были доступны в качестве опций для организаций пользователей и сторонних разработчиков, которым они были необходимы.