![]() | This article has multiple issues. Please helpimprove it or discuss these issues on thetalk page.(Learn how and when to remove these messages) (Learn how and when to remove this message)
|
![]() | |
Developer | IBMCambridge Scientific Center |
---|---|
Written in | Assembler (F) |
OS family | VM |
Working state | Historic |
Source model | Source code (see text for details) |
Initial release | May 1968; 57 years ago (1968-05) |
Latest release | 3.2 / 1972; 53 years ago (1972) |
Available in | English |
Platforms | IBM System/360-67; alsoSystem/370 with virtual memory hardware (not present in original S/370 models); also used on experimental hardware |
Default user interface | Command-line interface |
License | IBM Type-III Library (free in source code form at no charge to IBM customers, without support) |
CP/CMS (Control Program/Cambridge Monitor System) is a discontinuedtime-sharingoperating system of the late 1960s and early 1970s. It is known for its excellent performance and advanced features.[1][2] Among its three versions,CP-40/CMS was an important 'one-off' research system that established the CP/CMSvirtual machine architecture. It was followed byCP-67/CMS, a reimplementation of CP-40/CMS for theIBM System/360-67, and the primary focus of this article. Finally,CP-370/CMS was a reimplementation of CP-67/CMS for theSystem/370. While it was never released as such, it became the foundation ofIBM'sVM/370 operating system, announced in 1972.
Each implementation was a substantial redesign of its predecessor and an evolutionary step forward. CP-67/CMS was the first widely available virtual machine architecture. IBM pioneered this idea with its research systemsM44/44X (which usedpartial virtualization) andCP-40 (which usedfull virtualization).
In addition to its role as the predecessor of the VM family, CP/CMS played an important role in the development ofoperating system (OS) theory, the design ofIBM's System/370, thetime-sharing industry, and the creation of a self-supporting user community that anticipated today'sfree software movement.
Fundamental CP/CMS architectural and strategic parameters were established in CP-40, which began production use at IBM's Cambridge Scientific Center in early 1967. This effort occurred in a complex political and technicalmilieu, discussed at some length and supported by first-hand quotes in the Wikipedia articleHistory of CP/CMS.
In a nutshell:
→ derivation >> strong influence > some influence/precedence | ||
CTSS | ||
>IBM M44/44X | ||
>>CP-40/CMS → CP[-67]/CMS | →VM/370 → VM/SE versions → VM/SP versions → VM/XA versions →VM/ESA →z/VM | |
→VP/CSS | ||
>TSS/360 | ||
>TSO forMVT → forOS/VS2 → forMVS → ... → forz/OS | ||
>>MULTICS and most othertime-sharing platforms |
CP/CMS was built by IBM'sCambridge Scientific Center (CSC), aresearch and development lab with ties toMIT, under the leadership ofRobert Creasy. The system's goals, development process, release, and legacy of breakthrough technology, set this system apart from other operating systems of its day and from other large IBM projects. It was anopen-source system, made available in source code form to all IBM customers at no charge – as part of the unsupportedIBM Type-III Library. CP/CMS users supported themselves and each other. Unusual circumstances, described in theHistory section below, led to this situation.
CP/CMS consisted of two main components:
The CP/CMS virtual machine concept was an important step forward in operating system design.
IBM reimplemented CP/CMS as its VM/370 product line, released in 1972 whenvirtual memory was added to theS/370 series. VM/370's successors (such asz/VM) remain in wide use today. (IBM reimplemented CP-67, as it had CP-40, and did not simply rename and repackage it. VM coexisted with CP/CMS and its successors for many years. It is thus appropriate to view CP/CMS as an independent OS, distinct from the VM family.)
CP/CMS was distributed insource code form, and many CP/CMS users were actively involved in studying and modifying that source code. Such direct user involvement with a vendor-supplied operating system was unusual.
In the CP/CMS era, many vendors distributed operating systems in machine-readable source code[clarification needed]. IBM provided optional source code for, e.g.,OS/360,DOS/360, and several later mainstream IBM operating systems. With all these systems, some awareness of system source code was also involved in theSYSGEN process, comparable to akernel build in modern systems also in installing aStarter Set. (Forty years later, theHercules emulator can be used to run fossilized versions of these systems, based on source code that is now treated as part of thepublic domain.)
The importance of operating system source code has changed over time. BeforeIBM unbundled software from hardware in 1969, the OS (and most other software) was included in the cost of the hardware. Each vendor had complete responsibility for the entire system, hardware and software. This made the distribution medium relatively unimportant. After IBM's unbundling, OS software was delivered asIBM System Control Program software IBM System Control Program (SCP) software, eventually in object code only (OCO) form.
For complicated reasons, CP/CMS was not released in the normal way. It was not supported by IBM, but was made part of the unsupportedIBM Type-III Library, a collection of software contributions from IBM staff members (similarly software contributed by customers formed the Type-IV Library). IBM distributed this library to its customers for use 'as is'. The lack of direct IBM support for such products forced active users to support themselves and encouraged modifications and mutual support. CP/CMS and other Type-III products were early forms offree software.
Source code distribution of other IBM operating systems may have continued for some time (e.g.OS/360,DOS/360,DOS/VSE,MVS, and evenTSS/370, which all today are generally considered to be in thepublic domain) since they were arguably published without a copyright notice before 1978.[4][5][This quote needs a citation]} However, the unsupported status of CP/CMS placed different pressures on its user community and created the need for source code distribution.
CP/CMS was contributed to the Type-III Library by MIT'sLincoln Laboratory andnot by IBM, despite the fact that the system was built by IBM'sCambridge Scientific Center. This decision has been described as a form of collusion to outmaneuver the IBM political forces opposed to time-sharing[citation needed]. It is thought that it may also reflect the amount of formal and informal input from MIT andUnion Carbide that contributed to the design and implementation of CP-40, the S/360-67, CP-67, and CMS. SeeHistory of CP/CMS (historical notes) for further insights and references on this topic.
Many CP/CMS users made extensive modifications to their own copies of the source code. Much of this work was shared among sites, and important changes found their way back into the core system. Other users, such asNational CSS and some academic sites, continued independent development of CP/CMS, rather than switching to VM/370 when it became available. These efforts diverged from the community, in what today would be termed asoftware fork.
After IBM released VM/370, source code distribution of VM continued for several releases. (The VM project did not adopt the use ofPL/S, an internal systems programming language mandated for use within IBM on many comparable projects. The use of PL/S would have made source code distribution impossible. IBM attempted to turn away from assembly language to higher level languages as early as 1965, and was making substantial use ofPL/S by 1969, e.g. in MVS. PL/S was considered a trade secret at the time and was not available to customers. IBM apparently made exceptions to this policy much later.[6][7]) The VM user community continued to make important contributions to the software, as it had during the CP/CMS Type-III period. Few OS or DOS sites exhibited active user involvement in deep operating system internals, but this was found at many VM sites. This reverse support helped CP/CMS concepts survive and evolve, despite VM's second class citizen status at IBM.
The CP/CMS architecture was revolutionary for its time. The system consisted of avirtualizing control program (CP) which created multiple independentvirtual machines (VMs).Platform virtualization was possible because of two elements of the IBM System/360-67:
When a program was running in "problem state," using a privileged instruction or an invalid memory address would cause the hardware to raise an exception condition. By trapping these conditions, CP could simulate the appropriate behavior, e.g. performing I/O or paging operations. A guest operating system, which would run in "supervisor state" on a bare machine, was run in "problem state" under CP.
The result was a fully virtualized environment. Each virtual machine had its own set of virtual devices, mapped from the system's real hardware environment. Thus a given dial-up teletype was presented to its VM instance as itsvirtual console.
Note that, in CP-67, certain model-dependent and diagnostic instructions were not virtualized, notably the DIAG instruction. Ultimately, in later development at IBM and elsewhere, DIAG instructions were used to create a non-virtualized interface, to what became called ahypervisor. Client operating systems could use this mechanism to communicate directly with the control program; this offered dramatic performance improvements.
Any S/360 operating system could in fact be run under CP, but normal users ran Cambridge Monitor System (CMS), a simple, single-user operating system. CMS allowed users to run programs and manage their virtual devices. CP-67 versions 1 and 2 did not support virtual memory inside a virtual machine. This was added in version 3. At that point, testing and development of CP itself could be done by running a full copy of CP/CMS inside a single virtual machine. Some CP/CMS operating system work, such as CP-370 development and MVS testing, ran four- or five-level deep stacks of hardware and OS simulations.
The CP/CMS design is different from IBM's previousmonolithic operating systems, it separates complex "big system" (dispatching, hardware management, mass storage) from "little system" (application program execution, file I/O, console input/output). The re-categorization of both systems into their own entities prevents a bug in one users' system from affecting both. This is a model feature inmicrokernel operating systems.
IBM's decision to implementvirtualization andvirtual memory features in the subsequent S/370 design (although missing from the initial S/370 series) reflects, at least in part, the success of the CP/CMS approach. In turn the survival and success of IBM's VM operating system family, and of virtualization technology in general, owe much to the S/360-67.
In many respects, IBM's CP-67 and CP/CMS products anticipated (and heavily influenced) contemporaryvirtualization software, such asVMware Workstation,Xen, andMicrosoft Virtual PC.