CP/CMS

From Wikipedia, the free encyclopedia

CP/CMS
Company/
developer:
IBM Cambridge Scientific Center
OS family: VM
Source model: open-source (see text)
Supported platforms: IBM System/360-67; also System/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)
Working state: Historic

CP/CMS was a remarkable time-sharing operating system of the late 60s and early 70s, known for its excellent performance and advanced features. It had three distinct versions:

  • CP-40/CMS, an important "one-off" research system that established the CP/CMS virtual machine architecture
  • CP-67/CMS, a reimplementation of CP-40/CMS for the IBM System/360-67, and the primary focus of this article
  • CP-370/CMS, a reimplementation of CP-67/CMS for the System/370 – never released as such, but instead becoming the foundation of IBM's VM/370 operating system (announced in 1972 and still in use)

Each reimplementation was a substantial redesign of its predecessor, and represented an evolutionary step forward. CP-67/CMS was the first widely-available implementation of a virtual machine architecture, a concept that IBM had pioneered with its research systems M44/44X (which used partial virtualization) and CP-40 (which used full virtualization).

In addition to its role as the ancestor of the VM family, CP/CMS played an important role in the development of operating system theory, in the design of IBM's System/370 and later product lines, in the creation of the time-sharing industry, and in the creation of a self-supporting user community that anticipated today's open source movement.

See also:

Contents

[edit] Overview

CP/CMS was built by IBM's Cambridge Scientific Center (CSC), an R&D lab with very close ties to MIT. The system's goals, development process, release, and legacy – and its breakthrough technology – all set this system apart from other operating systems of its day, and from other large IBM projects. In particular, it was an open-source system, made available in source code form to all IBM customers at no charge – as part of the unsupported IBM Type-III Library. CP/CMS users supported themselves and each other. Unusual circumstances, described in the History section below, led to this situation.

CP/CMS consisted of two main components:

  • CP, the Control Program, created the virtual machine environment. The widely-used version was CP-67, which ran on the S/360-67. (The research system CP-40 established the architecture. A third version, CP-370, became VM/370.) Instead of explicitly dividing up memory and other resources among users, which had been the traditional approach, CP provided each user with a simulated stand-alone System/360 computer, able to run any S/360 software that ran on the bare machine. This gave each user what was, in effect, a private computer system.
  • CMS, the Cambridge Monitor System (and also Console Monitor System[1] – but renamed Conversational Monitor System in VM) was a lightweight single-user operating system, for interactive timesharing use. By running many copies of CMS in CP's virtual machines – instead of multiple copies of large, traditional multi-tasking operating systems – the overhead per user was less. This allowed a great number of simultaneous users to share a single S/360.

The CP/CMS virtual machine concept was an important step forward in operating system design.

  • By isolating users from each other, CP/CMS greatly improved system reliability and security.
  • By simulating a full, stand-alone computer for each user, CP/CMS could run any S/360 software in a time-sharing environment – not just applications specifically designed for time-sharing.
  • By using lightweight CMS as the primary user interface, CP/CMS achieved unprecedented time-sharing performance. In addition, the simplicity of CMS made it easier to implement user interface enhancements than in traditional operating systems.

IBM reimplemented CP/CMS as its VM/370 product line, released in 1972 when virtual memory was added to the S/370 series. VM/370's successors (such as z/VM) remain in wide use today. (It is important to note that 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 operating system, distinct from the VM family.)

CP/CMS was viewed as "IBM's other operating system" – a poor cousin to IBM's recommended batch-oriented offerings. (Until recently, VM remained in this role.) But CP/CMS rose above limited resources and company politics, to create an enduring and important technical legacy, a fiercely loyal user base, major derivative systems in the time-sharing industry, and, ultimately, a heritage as the grandparent of major 21st-century products from IBM.

[edit] CP/CMS as open-source software

Note: Source code distribution at IBM before 1978 is a murky topic, as are related issues of software copyrights and trade secrets. Operating system source code is not directly discussed in the major references, other than the special cases of CP/CMS and VM. Wikipedia contributors have clear but inconsistent first-hand memories. The following description represents the best information available as of December 2006, but will be revised as better source material can be located.

CP/CMS was distributed in source 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. It is possible that OS/360, DOS/360, and a number of later "mainstream" IBM operating systems were distributed in this way; at any rate, their source code was certainly available in microfiche form, and was widely used by systems programmers at customer sites. With all these systems, some awareness of system source code was also involved in the SYSGEN process (comparable to a kernel build in modern systems); likewise in installing a Starter Set. (Forty years later, the Hercules emulator can be used to run "fossilized" versions of these systems, based on source code that is now treated as part of the public domain.)

The importance of operating system source code has changed over time. Before IBM unbundled software from hardware in 1969, the operating system (and most other software) was included in the cost of the hardware; and a single 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 as IBM System Control Program (SCP) software – eventually in "object code only" form, but still at no additional charge.

For complicated reasons, CP/CMS was not released in the normal way. It was not supported by IBM, but was made part of the unsupported IBM Type-III Library – a collection of software contributed by customers and IBM personnel. 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 them to make modifications and to support each other. CP/CMS and other Type-III products were thus an early form of open-source 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 even TSS/370, which all today are generally considered to be in the public domain – since they were arguably published without a copyright notice before 1978.[2][3] However, the unsupported status of CP/CMS placed different pressures on its user community, and raised the importance for them of source code distribution.

Curiously, CP/CMS was contributed to the Type-III Library by MIT's Lincoln Laboratory – and not by CSC or any other IBM unit – despite the fact that the system was built by IBM's Cambridge Scientific Center. This surprising decision has been described as a form of "collusion" to outmaneuver the IBM political forces opposed to time-sharing. It may also reflect the amount of formal and informal input from MIT (also Union Carbide) that was contributed to the design and implementation of CP-40, the S/360-67, CP-67, and CMS. See History 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 as National 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 a software fork.

After IBM released VM/370, source code distribution of VM continued for several releases. (The VM project did not adopt the use of PL/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 of PL/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.[4][5]) 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.

[edit] History

Main article: History of CP/CMS

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 technical milieu, discussed at some length and supported by first-hand quotes in the Wikipedia article History of CP/CMS. See also CP-40 (historical notes), History of IBM, and System/360 for further background.

In a nutshell:

  • In the early 60's, IBM sought to maintain dominance over scientific computing, where time-sharing efforts such as CTSS and MIT's Project MAC gained focus. But IBM had committed to a huge project, the System/360, which took the company in a different direction.
  • The time-sharing community was disappointed with the S/360's lack of time-sharing capabilities. This led to key IBM sales losses at Project MAC and Bell Laboratories. IBM's Cambridge Scientific Center (CSC), originally established to support Project MAC, began an effort to regain IBM's credibility in time-sharing, by building a time-sharing operating system for the S/360. This system would eventually become CP/CMS. In the same spirit, IBM designed and released a S/360 model with time-sharing features, the IBM System/360-67, and a time-sharing operating system, TSS/360. TSS failed; but the 360-67 and CP/CMS succeeded – despite internal political battles over time-sharing, and concerted efforts at IBM to scrap the CP/CMS effort.
  • In 1967, CP/CMS production use began, first on CSC's CP-40, then later on CP-67 at Lincoln Laboratories and other sites. It was made available via the IBM Type-III Library in 1968. By 1972, CP/CMS had gone through several releases; it was a robust, stable system running on 44 systems; it could support 60 timesharing users on a S/360-67; and at least two commercial timesharing vendors (National CSS and IDC) were reselling S/360-67 time using CP/CMS technology.
  • In 1972, IBM announced the addition of virtual memory to the S/370 series, along with the VM/370 operating system – a reimplementation of CP/CMS for the S/370. This marked the end of CP/CMS releases, although the system continued its independent existence for some time. VM releases continued to include source code for some time, and members of the VM community long remained active contributors.

[edit] Architecture

The CP/CMS architecture was revolutionary for its time. The system consisted of a virtualizing control program (CP) which created multiple independent virtual machines (VMs). Virtualization was possible because of two elements of the IBM System/360-67:

  • Segregation of privileged 'supervisor state' instructions from normal 'problem state' instructions
  • Address translation hardware

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 its virtual console.)

Any S/360 operating system could in fact be run under CP, but normal users ran CMS (Cambridge Monitor System) – a simple, single-user operating system. CMS allowed users to run programs and manage their virtual devices. (Testing and development of CP itself was 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 was a departure from IBM's other monolithic operating systems. CP/CMS segregated complex "big system" problems (dispatching, hardware management, mass storage, etc.) from "little system" capabilities needed by a single user (application program execution, file I/O, console input/output, etc.). Each component was simpler as a result. Isolating users from each other improved system stability: a bug in one user's software could not crash another user's CMS, nor the underlying CP. This architecture would ultimately reach its apotheosis in microkernel operating systems.

IBM's decision to implement these virtualization and virtual memory features in the subsequent S/370 design (although missing from the initial S/370 series) reflects the success of the CP/CMS approach.

[edit] Related terminology

  • CP: Control Program. CP-40 and CP-67 were implementations for CSC's customized S/360-40 and the standard S/360-67, respectively.
  • CMS: Cambridge Monitor System. This portion of the CP/CMS system was renamed Conversational Monitor System when IBM released VM/370. Unlike the CP-to-VM transition, however, which was a reimplementation, much of CMS was moved without modification from CP/CMS into VM/370.
  • VM: Virtual Machine, a term already well-established in CP/CMS by the time IBM reimplemented CP-67 as VM/370. (In the early days of CP-40 design, the term pseudo-machine was used for this concept, but the term virtual machine was soon borrowed from the IBM M44/44X project.)
  • hypervisor: a mechanism for paravirtualization. This term was coined in IBM's reimplementation of CP-67 as VM/370.

[edit] References

Primary CP/CMS sources

  • R. J. Creasy, "The origin of the VM/370 time-sharing system", IBM Journal of Research & Development, Vol. 25, No. 5 (September 1981), pp. 483-490, available on-line at research.ibm.com
    – perspective on CP/CMS and VM history by the CP-40 project lead, also a CTSS author
  • E.W. Pugh, L.R. Johnson, and John H. Palmer, IBM's 360 and early 370 systems, MIT Press, Cambridge MA and London, ISBN 0-262-16123-0
    – extensive (819 pp.) treatment of IBM's offerings during this period; tThe limited coverage of CP/CMS in such a definitive work is telling
  • Melinda Varian, VM and the VM community, past present, and future, SHARE 89 Sessions 9059-9061, 1977; available online at www.princeton.edu/~melinda
    – and outstanding source for CP/CMS and VM history

Additional CP/CMS sources

  • R. J. Adair, R. U. Bayles, L. W. Comeau, and R. J. Creasy, A Virtual Machine System for the 360/40, IBM Corporation, Cambridge Scientific Center Report No. 320-2007 (May 1966)
    – a seminal paper describing implementation of the virtual machine concept, with descriptions of the customized CSC S/360-40 and the CP-40 design
  • International Business Machines Corporation, CP-67/CMS, Program 360D-05.2.005, IBM Program Information Department (June 1969)
    – IBM's reference manual
  • R. A. Meyer and L. H. Seawright, "A virtual machine time-sharing system," IBM Systems Journal, Vol. 9, No. 3, pp. 199-218 (September 1970)
    – describes the CP-67/CMS system, outlining features and applications
  • R. P. Parmelee, T. I. Peterson, C. C. Tillman, and D. J. Hatfield, "Virtual storage and virtual machine concepts," IBM Systems Journal, Vol. 11, No. 2 (June 1972)

Background CP/CMS sources

  • F. J. Corbató, et al., The Compatible Time-Sharing System, A Programmer’s Guide, M.I.T. Press, 1963
  • F. J. Corbató, M. Merwin-Daggett, and R. C. Daley, "An Experimental Time-sharing System," Proc. Spring Joint Computer Conference (AFIPS) 21, pp. 335-344 (1962) – description of CTSS
  • F. J. Corbató and V. A. Vyssotsky, "Introduction and Overview of the MULTICS System", Proc. Fall Joint Computer Conference (AFIPS) 27, pp. 185-196 (1965)
  • P. J. Denning, "Virtual Memory", Computing Surveys Vol. 2, pp. 153-189 (1970)
  • J. B. Dennis, "Segmentation and the Design of Multi-Programmed Computer Systems," JACM Vol. 12, pp. 589-602 (1965)
    – virtual memory requirements for Project MAC, destined for GE 645
  • C. A. R. Hoare and R. H. Perrott, Eds., Operating Systems Techniques, Academic Press, Inc., New York (1972)
  • T. Kilburn, D. B. G. Edwards, M. J. Lanigan, and F. H. Sumner, "One-Level Storage System", IRE Trans. Electron. Computers EC-11, pp. 223-235 (1962)
    – Manchester/Ferranti Atlas
  • R. A. Nelson, "Mapping Devices and the M44 Data Processing System," Research Report RC 1303, IBM Thomas J. Watson Research Center (1964)
    – about the IBM M44/44X
  • R. P. Parmelee, T. I. Peterson, C. C. Tillman, and D. J. Hatfield, "Virtual Storage and Virtual Machine Concepts", IBM Systems Journal, Vol. 11, pp. 99-130 (1972)

Additional on-line CP/CMS resources


Citations

Detailed citations for points made in this article can be found in History of CP/CMS.

  1. ^ Creasy, op. cit., p. 488 – "Console Monitor System"
  2. ^ cf. Hercules emulator, which is apparently used to run these historic systems without raising complaints from IBM; the systems can be argued to have been "published" by IBM – perhaps as machine readable source code, certainly as microfiche
  3. ^ public domain: "Until the Berne Convention Implementation Act of 1988, the lack of a proper copyright notice would force an otherwise copyrightable work into the public domain...."
  4. ^ Pugh et al., p. 737, note 166 – citing the C. H. Reynolds August 1965 PL/I policy statement" mandating use of PL/I
  5. ^ W. R. Brittenham, The development of PL/S, IBM Tchnical Report (1974) – cited in Pugh

[edit] Family tree

CP/CMS family tree
Relationships:    → derivation    >> strong influence    > some influence/precedence
 CTSS 
> IBM M44/44X
>> CP-40/CMSCP[-67]/CMS  VM/370 → VM/XA versions → VM/ESAz/VM
VP/CSS
> TSS/360
> OS/MVT-TSOOS/VS2-TSOMVS-TSOz/OS-TSO
>> MULTICS and most other time-sharing platforms

This is a simplified framework providing links to major time-sharing systems that either influenced or were influenced by CP/CMS. The principal second-generation timesharing systems with lasting impact were CP/CMS and Multics. However, many other important systems emerged during this period, including the Manchester/Ferranti Atlas, and systems from such vendors as Burroughs, Control Data Corporation, DEC, and Honeywell. All helped shaped the time-sharing landscape. See time-sharing system evolution for a more extensive list.