ICL VME
VME is a mainframe operating system developed by the UK company International Computers Limited. Originally developed in the 1970s 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.
Origins
The development program for the New Range system started on the merger of International Computers and Tabulators and English Electric Computers in 1968. One of the fundamental decisions was that it would feature a new operating system. A number of different feasibility and design studies were carried out within ICL, the three most notable being:- VME/B, targeted at large processors such as the 2970/2980 and developed in Kidsgrove, Staffordshire and West Gorton, Manchester
- VME/K, targeted at the mid-range systems such as the 2960 and developed at Bracknell after the original design for these small processors, System D, was dropped. VME/K was developed and introduced to the market but was eventually replaced by VME/B
- VME/T, which was never actually launched, but warrants a mention as it was conceived to support "fault tolerance", and predated the efforts of the successful American startup company Tandem Computers in this area.
VME/B was viewed as primarily competing with the System/370 IBM mainframe as a commercial operating system, and adopted the EBCDIC character encoding.
History
When New Range was first launched in October 1974, its operating system was referred to as "System B". By the time it was first delivered it had become "VME/B".VME/K was developed independently, and was delivered later with the smaller mainframes such as the 2960. At the time VME/B was still plagued with performance and reliability problems, and the mainly American management team had misgivings about it.
There was also a project known as System D, which was an advanced, highly modular operating system designed for configuring and building customized near real-time applications. Although it was used to bid on a system for British Rail it was subsequently cancelled because of engineering resource constraints.
ICL had sold a large system to the European Space Agency to process data from Meteosat at its operation centre in Darmstadt. A bespoke variant of VME/K, known as VME/ESA was developed on-site to meet the customer's requirements.
Following a financial crisis in 1980, new management was brought into ICL: Christophor Laidlaw as Chairman, and Robb Wilmot as Managing Director. An early decision of the new management was to drop VME/K. Thus in July 1981, VME 2900 was launched. Although presented to the customer base as a merger of VME/B and VME/K, it was in reality the VME/B base with a few selected features from VME/K grafted on. This provided the opportunity to drop some obsolescent features, which remained available to customers who needed them in the form of the "BONVME" option.
The "2900" suffix was dropped at System Version 213 when ICL launched Series 39 in 1985 as the successor to the original 2900 series, and the "Open" prefix was added after SV294. VME became capable of hosting applications written originally for Unix through a UNIX System V Release 3 based subsystem, called VME/X, adapted to run under VME and using the ASCII character encoding.
In 2007 Fujitsu announced a VME version run as a hosted subsystem, called superNova, within Microsoft Windows, or SUSE or Red Hat Enterprise Linux on x86-64 hardware.
In 2012 the VME user group, AXiS, announced that after almost 40 years it would be disbanding because of the reduced user base.
Fujitsu intended to support VME on customer computers until 2020.
In 2020 Fujitsu transferred 13 HM Revenue and Customs applications from their computers onto Fujitsu's virtual managed VME hosting platform.
As of 2021, the Department for Work and Pensions completely replaced its VME based systems, following the completion of its award winning VME-R replacement programme.
Architecture
VME is structured as a set of layers, each layer having access to resources at different levels of abstraction. Virtual resources provided by one layer are constructed from the virtual resources offered by the layer below. Access to the resources of each layer is controlled through a set of Access Levels: in order for a process to use a resource at a particular access level, it must have an access key offering access to that level. The concept is similar to the "rings of protection" in Multics. The architecture allows 16 access levels, of which the outer 6 are reserved for user-level code.Orthogonally to the access levels, the operating system makes resources available to applications in the form of a Virtual Machine. A VM can run multiple processes. In practice, a VM in VME is closer to the concept of a process in other operating systems, while a VME process is more like a thread in other systems. However, processes running within a VM cannot run concurrently and thus resemble user threads found in other systems. A dedicated instruction is involved in the transfer of control between processes sharing the same VM.
The allocation of resources to a virtual machine uses a stack model: 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 and shared memory areas. The hardware architecture also provides semaphore instructions INCT and TDEC.
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, which can produce a report, either interactively or written to a journal.
OMF
Compiled object code is maintained in a format called OMF, which is both the compiler output and the format used by the loader. Various compilers are available, as well as utilities, notably the Collector, which links the code in several OMF modules into a single module, for more efficient loading at run-time, and the Module Amender, which allows patching of the instructions in an OMF module to fix bugs, using assembly language syntax.SCL
The command language for VME is known as SCL.This is much more recognizably a typed high-level programming language than the job control or shell languages found in most other operating systems: it can be likened to scripting languages such as JavaScript, though its surface syntax is derived from Algol 68.
SCL is designed to allow both line-at-a-time interactive use from a console or from a command file, and creation of executable scripts or programs. The declaration of a procedure within SCL also acts as the definition of a simple form or template allowing the procedure to be invoked from an interactive terminal, with fields validated according to the data types of the underlying procedure parameters or using the default procedure parameter values.
The built-in command vocabulary uses a consistent naming convention with an imperative verb followed by a noun: for example DELETE_FILE or DISPLAY_LIBRARY_DETAILS. The command can be written in full, or in an abbreviated form that combines standard abbreviations for the verb and noun: for example XF or DLBD.
SCL is block-structured, with begin/end blocks serving the dual and complementary roles of defining the lexical scope of variable declarations, and defining the points at which resources acquired from the operating system should be released. Variables in the language can have a number of simple types such as strings, superstrings, booleans, and integers, and are also used to contain references to system resources such as files and network connections.
It is possible to "disassemble" an SCL program from OMF back into SCL source code using the READ_SCL command. However the output is not always perfect, and will often include errors that would stop re-compilation without user intervention.
A simple code example can be seen on the 99 bottles of beer website.
A more realistic example, where SCL is used to compile a program written in S3, is shown below. This example is taken from the Columbia University Archive of implementations of Kermit.
BEGIN
WHENEVER
RESULT GT 0 +_
THEN +_
SEND_RESULT_MESSAGE
FI
INT KMT_SRC, KMT_OMF, KMT_REL
ASSIGN_LIBRARY
ASSIGN_LIBRARY
ASSIGN_LIBRARY
BEGIN
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
DELETE_FILE
END
S3_COMPILE_DEFAULTS
S3_COMPILE,
OMF = *KMT_OMF.KMT_DATA_MODULE)
S3_COMPILE,
OMF = *KMT_OMF.KMT_DH_MODULE)
S3_COMPILE,
OMF = *KMT_OMF.KMT_EH_MODULE)
S3_COMPILE,
OMF = *KMT_OMF.KMT_FH_MODULE)
NEW_MESSAGE_TEXT_MODULE,
OMF = *KMT_OMF.KMT_HELP_MTM)
S3_COMPILE,
OMF = *KMT_OMF.KMT_MAIN_MODULE)
S3_COMPILE,
OMF = *KMT_OMF.KMT_PH_MODULE)
S3_COMPILE,
OMF = *KMT_OMF.KMT_PP_MODULE)
S3_COMPILE,
OMF = *KMT_OMF.KMT_SP_MODULE)
NEW_MESSAGE_TEXT_MODULE,
OMF = *KMT_OMF.KMT_SP_MTM)
S3_COMPILE,
OMF = *KMT_OMF.KMT_UI_MODULE)
COLLECT
----
INPUT &
*KMT_OMF.KMT_DH_MODULE &
*KMT_OMF.KMT_EH_MODULE &
*KMT_OMF.KMT_FH_MODULE &
*KMT_OMF.KMT_HELP_MTM &
*KMT_OMF.KMT_MAIN_MODULE &
*KMT_OMF.KMT_PH_MODULE &
*KMT_OMF.KMT_PP_MODULE &
*KMT_OMF.KMT_SP_MODULE &
*KMT_OMF.KMT_SP_MTM &
*KMT_OMF.KMT_UI_MODULE)
NEWMODULE
SUPPRESS
RETAIN
LISTMODULE
PERFORM
++++
COMPILE_SCL,
OUT = *KMT_REL.KERMIT,
COD = NOTIFWARNINGS,
OPT = FIL)
END
Commands illustrated in this fragment include WHENEVER, ASSIGN_LIBRARY, DELETE_FILE, S3_COMPILE, NEW_MESSAGE_TEXT_MODULE and COMPILE_SCL, which compiles an SCL program into object code.
The COLLECT command combines different object code modules into a single module, and is driven by its own local command file which is incorporated inline in the SCL between the delimiters "----" and "++++". The sub-commands INPUT and NEWMODULE identify the names of the input and output modules; SUPPRESS and RETAIN determine the external visibility of named procedures within the collected module; and LISTMODULE requests a report describing the output module.
Note that "." is used to separate the parts of a hierarchic file name. A leading asterisk denotes a local name for a library, bound using the ASSIGN_LIBRARY command. The number in parentheses after a file name is a generation number. The operating system associates a generation number with every file, and requests for a file get the latest generation unless specified otherwise. Creating a new file will by default create the next generation and leave the previous generation intact; this program however is deliberately choosing to create generation 101, to identify a public release.