CP/CMS(Control Program/Cambridge Monitor System)는 1960년대 후반과 1970년대 초반에 사용되었던 단종된 시분할운영체제이다. 우수한 성능과 고급 기능으로 잘 알려져 있다. 세 가지 버전 중 CP-40/CMS는 CP/CMS 가상 머신 아키텍처를 확립한 중요한 연구용 시스템이었다. 이후 IBM 시스템/360-67을 위해 CP-40/CMS를 재구현한 CP-67/CMS가 뒤를 이었으며, 이 문서의 주된 초점은 여기에 맞춰져 있다. 마지막으로 VM (운영체제)/CMS는 시스템/370을 위해 CP-67/CMS를 재구현한 버전이다. 이 버전은 정식으로 출시되지는 않았으나, 1972년에 발표된 IBM의 VM/370 운영체제의 기반이 되었다.
각 구현체는 이전 버전을 대대적으로 재설계하고 진화시킨 결과물이었다. CP-67/CMS는 최초로 널리 보급된 가상 머신 아키텍처였다. IBM은 연구용 시스템인 M44/44X(반가상화 사용)와 CP-40(완전 가상화 사용)을 통해 이 개념을 선도했다.
VM 제품군의 전신으로서의 역할 외에도, CP/CMS는 운영체제 이론의 발전, IBM의 시스템/370 설계, 시분할 산업, 그리고 오늘날의 자유 소프트웨어 운동을 예견한 자생적 사용자 커뮤니티 조성에 중요한 역할을 했다.
CP/CMS의 근본적인 아키텍처 및 전략적 매개변수들은 1967년 초 IBM의 케임브리지 과학 센터(CSC)에서 실제 운영에 들어간 CP-40에서 확립되었다. 이 노력은 복잡한 정치적, 기술적 환경 속에서 이루어졌으며, 위키백과 문서인 CP/CMS의 역사에서 직접적인 인용과 함께 상세히 다루고 있다.
요약하자면 다음과 같다:
1960년대 초, IBM은 CTSS나 MIT의 MIT 컴퓨터 과학 및 인공지능 연구소와 같은 시분할 노력들이 집중을 받던 과학적 컴퓨팅 분야에서 지배력을 유지하고자 했다. 하지만 IBM은 이미 IBM 시스템/360이라는 거대한 프로젝트에 매진하고 있었고, 이는 회사를 다른 방향으로 이끌었다.
시분할 커뮤니티는 S/360에 시분할 기능이 부족하다는 점에 실망했다. 이는 MIT 컴퓨터 과학 및 인공지능 연구소와 벨 연구소에서 IBM의 주요 판매 손실로 이어졌다. 원래 Project MAC을 지원하기 위해 설립되었던 IBM의 케임브리지 과학 센터(CSC)는 S/360용 시분할 운영체제를 구축함으로써 IBM의 시분할 분야 신뢰도를 회복하기 위한 노력을 시작했다. 이 시스템이 결국 CP/CMS가 되었다. 같은 맥락에서 IBM은 시분할 기능이 포함된 S/360 모델인 IBM 시스템/360-67과 시분할 운영체제인 TSS/360을 설계 및 출시했다. TSS는 실패했으나, 시분할을 둘러싼 내부 정치적 갈등과 CP/CMS 노력을 폐기하려는 IBM 내부의 조직적인 시도에도 불구하고 360-67과 CP/CMS는 성공을 거두었다.
1967년, CP/CMS는 CSC의 CP-40에서 먼저, 이후 링컨 연구소와 다른 현장의 CP-67에서 실제 운영을 시작했다. 1968년에는 IBM Type-III 라이브러리를 통해 제공되었다. 1972년까지 CP/CMS는 여러 차례 릴리스를 거쳤으며, 44개의 시스템에서 실행되는 견고하고 안정적인 시스템이 되었다. 또한 S/360-67에서 60명의 시분할 사용자를 지원할 수 있었고, 최소 2개의 상용 시분할 업체(National CSS 및 IDC)가 CP/CMS 기술을 사용하여 S/360-67의 시분할 시간을 재판매하고 있었다.
1972년, IBM은 가상 메모리 기능을 S/370 시리즈에 추가함과 동시에 S/370을 위한 CP/CMS의 재구현체인 VM/370 운영체제를 발표했다. 이는 CP/CMS 릴리스의 종료를 의미했으나, 시스템 자체는 한동안 독립적으로 존재했다. VM 릴리스에는 한동안 소스 코드가 포함되었으며 VM 커뮤니티 구성원들은 오랫동안 활발한 기여자로 남았다.
개요
CP/CMS는 매사추세츠 공과대학교와 연계된 연구개발 연구소인 IBM 케임브리지 과학 센터(CSC)에서 로버트 크리시의 주도하에 구축되었다. 이 시스템의 목표, 개발 과정, 출시, 그리고 획기적인 기술적 유산은 이 시스템을 당대의 다른 운영체제나 다른 대규모 IBM 프로젝트들과 차별화했다. 이 시스템은 오픈 소스 시스템으로, 지원이 제공되지 않는 IBM Type-III 라이브러리의 일환으로 모든 IBM 고객에게 소스 코드 형태로 무료 제공되었다. CP/CMS 사용자들은 스스로와 서로를 도왔다. 아래의 역사 섹션에 설명된 특이한 상황이 이러한 결과를 낳았다.
CP/CMS는 두 가지 주요 구성 요소로 이루어져 있었다:
CP: 컨트롤 프로그램은 가상 머신 환경을 생성했다. 널리 사용된 버전은 S/360-67에서 실행된 CP-67이었다. (연구용 시스템인 CP-40이 아키텍처를 확립했다. 세 번째 버전인 CP-370은 VM/370이 되었다.) 기존의 방식처럼 사용자들 사이에 메모리와 기타 자원을 명시적으로 분할하는 대신, CP는 각 사용자에게 시뮬레이션된 독립형 시스템/360 컴퓨터를 제공했다. 각 시스템은 베어 머신에서 실행되는 모든 S/360 소프트웨어를 실행할 수 있었으며, 사실상 각 사용자에게 개인용 컴퓨터 시스템을 제공하는 것과 같았다.
CMS: 케임브리지 모니터 시스템(또한 콘솔 모니터 시스템으로 불리기도 했으나, VM에서 대화형 모니터 시스템으로 개명됨)은 대화형 시분할 사용을 위한 가벼운 단일 사용자 운영체제였다. 크고 전통적인 멀티태스킹 운영체제의 여러 사본 대신 CP의 가상 머신에서 CMS의 여러 사본을 실행함으로써 사용자당 오버헤드가 더 낮아졌다. 이를 통해 많은 수의 동시 사용자가 단일 S/360을 공유할 수 있었다.
CP/CMS 가상 머신 개념은 운영체제 설계에서 중요한 진보였다.
사용자를 서로 격리함으로써 CP/CMS는 시스템 안정성과 보안을 크게 향상시켰다.
각 사용자에게 완전한 독립형 컴퓨터를 시뮬레이션함으로써, CP/CMS는 시분할을 위해 특별히 설계된 응용 프로그램뿐만 아니라 모든 S/360 소프트웨어를 시분할 환경에서 실행할 수 있었다.
가벼운 CMS를 기본 사용자 인터페이스로 사용함으로써 CP/CMS는 전례 없는 시분할 성능을 달성했다. 또한 CMS의 단순성 덕분에 전통적인 운영체제보다 사용자 인터페이스 개선 사항을 구현하기가 더 쉬웠다.
IBM은 가상 메모리가 IBM 시스템/370 시리즈에 추가된 1972년에 CP/CMS를 VM/370 제품군으로 재구현하여 출시했다. VM/370의 후속작(예: Z/VM)은 오늘날에도 널리 사용되고 있다. (IBM은 CP-40을 재구현했듯이 CP-67을 재구현했을 뿐, 단순히 이름을 바꾸거나 재포장하지 않았다. VM은 CP/CMS 및 그 후속 제품들과 수년간 공존했다. 따라서 CP/CMS를 VM 제품군과 별개의 독립적인 운영체제로 보는 것이 타당하다.)
자유 소프트웨어로서의 CP/CMS
CP/CMS는 소스 코드 형태로 배포되었으며, 많은 CP/CMS 사용자들이 해당 소스 코드를 연구하고 수정하는 데 적극적으로 참여했다. 벤더가 제공한 운영체제에 대해 사용자가 이처럼 직접적으로 개입하는 것은 흔치 않은 일이었다.
CP/CMS 시대에는 많은 벤더가 기계 판독이 가능한 소스 코드 형태로 운영체제를 배포했다. IBM은 예를 들어 OS/360, DOS/360, 그리고 나중에 나온 몇몇 주요 IBM 운영체제에 대해 선택적 소스 코드를 제공했다. 이러한 모든 시스템에서 시스템 소스 코드에 대한 약간의 인식은 현대 시스템의 커널 빌드나 스타터 세트 설치와 유사한 SYSGEN 과정과도 관련이 있었다. (40년 후, Hercules 에뮬레이터를 사용하여 오늘날 퍼블릭 도메인의 일부로 간주되는 소스 코드를 기반으로 이러한 시스템의 화석화된 버전을 실행할 수 있게 되었다.)
운영체제 소스 코드의 중요성은 시간이 지남에 따라 변했다. 1969년 IBM이 하드웨어에서 소프트웨어를 분리하기 전까지, 운영체제(및 대부분의 다른 소프트웨어)는 하드웨어 비용에 포함되어 있었다. 각 벤더는 하드웨어와 소프트웨어를 포함한 전체 시스템에 대해 완전한 책임을 졌다. 이는 배포 매체를 비교적 중요하지 않게 만들었다. IBM의 분리 조치 이후, 운영체제 소프트웨어는 IBM 시스템 제어 프로그램(SCP) 소프트웨어, 궁극적으로는 오브젝트 코드 전용(OCO) 형태로 제공되었다.
복잡한 이유로 인해 CP/CMS는 일반적인 방식으로 출시되지 않았다. IBM에 의해 지원받지 못했지만, IBM 직원들이 기여한 소프트웨어 모음인 IBM Type-III 라이브러리의 일부가 되었다(마찬가지로 고객이 기여한 소프트웨어는 Type-IV 라이브러리를 형성했다). IBM은 이 라이브러리를 고객들에게 '있는 그대로(as is)' 사용하도록 배포했다. 이러한 제품에 대한 직접적인 IBM 지원의 부재는 활동적인 사용자들이 스스로를 지원하게 만들었으며, 수정과 상호 지원을 장려했다. CP/CMS 및 기타 Type-III 제품들은 초기 형태의 자유 소프트웨어였다.
다른 IBM 운영체제의 소스 코드 배포는 한동안 계속되었을 수 있다(예: OS/360, DOS/360, VSE (운영 체제), MVS, 심지어 TSS (운영 체제)까지, 이들은 모두 오늘날 일반적으로 퍼블릭 도메인으로 간주된다). 왜냐하면 이들은 1978년 이전에 저작권 고지 없이 게시된 것으로 볼 수 있기 때문이다. 그러나 CP/CMS의 비지원 상태는 사용자 커뮤니티에 다른 압박을 가했고 소스 코드 배포의 필요성을 만들어냈다.
CP/CMS는 IBM의 케임브리지 과학 센터에서 구축되었음에도 불구하고, IBM이 아닌 MIT의 링컨 연구소에 의해 Type-III 라이브러리에 기여되었다. 이 결정은 시분할에 반대하는 IBM 내부의 정치적 세력을 따돌리기 위한 일종의 담합으로 묘사되기도 한다. 또한 이는 CP-40, S/360-67, CP-67, CMS의 설계 및 구현에 기여한 MIT와 유니온 카바이드로부터의 공식적 및 비공식적 입력의 양을 반영할 수도 있다고 여겨진다. 이 주제에 대한 더 자세한 통찰과 참고 문헌은 History of CP/CMS (역사적 기록)를 참조하라.
많은 CP/CMS 사용자들은 자신들의 소스 코드 사본에 광범위한 수정을 가했다. 이러한 작업 중 상당수는 여러 현장 간에 공유되었고, 핵심 시스템에서 발견된 중요한 변경 사항들은 다시 원래 시스템으로 반영되었다. National CSS나 일부 학술 현장과 같은 다른 사용자들은 VM/370을 사용할 수 있게 되었을 때 전환하는 대신 CP/CMS를 독립적으로 계속 개발했다. 이러한 노력들은 오늘날의 용어로 소프트웨어 포크라 불리는 형태로 커뮤니티와 갈라졌다.
IBM이 VM/370을 출시한 후에도 VM의 소스 코드 배포는 여러 릴리스 동안 계속되었다(VM 프로젝트는 많은 유사 프로젝트에서 IBM 내부적으로 사용하도록 의무화된 내부 시스템 프로그래밍 언어인 PL/S를 채택하지 않았다. PL/S를 사용했다면 소스 코드 배포는 불가능했을 것이다. IBM은 1965년부터 어셈블리 언어에서 고수준 언어로 전환하려 시도했으며, 1969년에는 MVS 등에서 PL/S를 상당히 많이 사용하고 있었다. PL/S는 당시 영업 비밀로 간주되어 고객에게 제공되지 않았다. IBM은 훨씬 나중에 이 정책에 예외를 둔 것으로 보인다.). VM 사용자 커뮤니티는 CP/CMS Type-III 기간 동안 그랬던 것처럼 소프트웨어에 중요한 기여를 계속했다. OS나 DOS 현장 중 운영체제 내부 깊숙한 곳까지 사용자가 적극적으로 참여하는 경우는 거의 없었지만, 많은 VM 현장에서는 이런 일이 흔했다. 이러한 역지원은 VM이 IBM 내에서 이등 시민 취급을 받았음에도 불구하고 CP/CMS 개념이 생존하고 진화하는 데 도움을 주었다.
아키텍처
CP/CMS 아키텍처는 당대 혁신적이었다. 시스템은 여러 개의 독립적인 가상 머신(VM)을 생성하는 가상화 제어 프로그램(CP)으로 구성되었다. 플랫폼 가상화가 가능했던 이유는 IBM 시스템/360-67의 두 가지 요소 때문이었다:
특권 "슈퍼바이저 상태" 명령어와 일반 "문제 상태" 명령어의 분리
주소 변환 하드웨어
프로그램이 "문제 상태"에서 실행 중일 때, 특권 명령어를 사용하거나 잘못된 메모리 주소를 사용하면 하드웨어가 예외 조건을 발생시켰다. 이러한 조건을 가로챔으로써 CP는 I/O나 페이징 작업 수행과 같은 적절한 동작을 시뮬레이션할 수 있었다. 베어 머신에서 "슈퍼바이저 상태"로 실행될 게스트 운영체제는 CP 하에서 "문제 상태"로 실행되었다.
결과는 완전히 가상화된 환경이었다. 각 가상 머신은 시스템의 실제 하드웨어 환경에서 매핑된 자체 가상 장치 세트를 가졌다. 따라서 주어진 다이얼업 텔레타이프는 해당 가상 머신 인스턴스에 가상 콘솔로 표시되었다.
CP-67에서는 특정 모델 의존적 명령어와 진단 명령어, 특히 DIAG 명령어가 가상화되지 않았음에 유의해야 한다. 궁극적으로 나중에 IBM과 다른 곳에서 개발하면서 DIAG 명령어는 하이퍼바이저라고 불리게 된 비가상화 인터페이스를 만드는 데 사용되었다. 클라이언트 운영체제는 이 메커니즘을 사용하여 제어 프로그램과 직접 통신할 수 있었으며, 이는 상당한 성능 향상을 가져왔다.
모든 S/360 운영체제는 사실 CP 하에서 실행될 수 있었지만, 일반 사용자들은 간단한 단일 사용자 운영체제인 케임브리지 모니터 시스템(CMS)을 실행했다. CMS를 통해 사용자들은 프로그램을 실행하고 가상 장치를 관리할 수 있었다. CP-67 버전 1과 2는 가상 머신 내부의 가상 메모리를 지원하지 않았다. 이는 버전 3에서 추가되었다. 그 시점부터 CP 자체의 테스트와 개발은 단일 가상 머신 내에서 CP/CMS 전체 사본을 실행함으로써 수행될 수 있었다. CP-370 개발이나 MVS 테스트와 같은 일부 CP/CMS 운영체제 작업은 4~5계층 깊이의 하드웨어 및 운영체제 시뮬레이션을 실행하기도 했다.
CP/CMS 설계는 IBM의 이전 모놀리식 운영체제와는 다르다. 복잡한 "대형 시스템"(디스패칭, 하드웨어 관리, 대용량 저장 장치)과 "소형 시스템"(응용 프로그램 실행, 파일 I/O, 콘솔 입출력)을 분리한다. 두 시스템을 각각 고유한 엔티티로 재분류함으로써 한 사용자 시스템의 버그가 다른 시스템에 영향을 주는 것을 방지한다. 이는 마이크로커널 운영체제의 모델 기능이다.
IBM이 이후 S/370 설계에서 가상화 및 가상 메모리 기능을 구현하기로 한 결정은(초기 S/370 시리즈에는 빠져 있었지만), 적어도 부분적으로는 CP/CMS 접근 방식의 성공을 반영한다. 결과적으로 IBM의 VM 운영체제 제품군의 생존과 성공, 그리고 가상화 기술 전반의 성공은 S/360-67에 큰 빚을 지고 있다.
CP: 컨트롤 프로그램. CP-40과 CP-67은 각각 CSC의 맞춤형 S/360-40과 표준 S/360-67을 위한 구현체였다.
CMS: 케임브리지 모니터 시스템. CP/CMS 시스템의 이 부분은 IBM이 VM/370을 출시할 때 대화형 모니터 시스템으로 이름이 바뀌었다. 그러나 재구현이었던 CP-to-VM 전환과 달리, CMS의 상당 부분은 수정 없이 CP/CMS에서 VM/370으로 이전되었다.
VM: 가상 머신. 초기에는 'pseudo-machine'이라는 용어가 사용되었으나, 곧 IBM M44/44X 프로젝트에서 'virtual machine'이라는 용어를 차용했다. IBM이 VM/370을 도입했을 무렵에는 CP/CMS에서 잘 정착되어 있었다.
하이퍼바이저: 반가상화를 위한 메커니즘. 이 용어는 IBM이 CP-67을 VM/370으로 재구현할 때 만들어졌다.
E.W. Pugh, L.R. Johnson, and John H. Palmer, IBM's 360 and early 370 systems, MIT Press, Cambridge MA and London, ISBN0-262-16123-0 ― 이 기간 동안 IBM이 제공한 제품들에 대한 방대한(819페이지) 처리; 이렇게 결정적인 저서에서 CP/CMS에 대한 제한적인 언급은 시사하는 바가 큼
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) ― 가상 머신 개념의 구현을 설명하는 영향력 있는 논문, 맞춤형 CSC S/360-40 및 CP-40 설계 설명 포함
International Business Machines Corporation, CP-67/CMS, Program 360D-05.2.005, IBM Program Information Department (June 1969) ― IBM의 참조 매뉴얼
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) ― CP-67/CMS 시스템을 설명하며 특징과 응용 분야를 개략적으로 서술
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)
배경 CP/CMS 소스
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–44 (1962) — CTSS에 대한 설명
F. J. Corbató and V. A. Vyssotsky, "Introduction and Overview of the MULTICS System", Proc. Fall Joint Computer Conference (AFIPS) 27, pp. 185–96 (1965)
P. J. Denning, "Virtual Memory", Computing Surveys Vol. 2, pp. 153–89 (1970)
J. B. Dennis, "Segmentation and the Design of Multi-Programmed Computer Systems," JACM Vol. 12, pp. 589–602 (1965) ― GE 645용 Project MAC을 위한 가상 메모리 요구 사항
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–35 (1962) ― 맨체스터/페란티 아틀라스
R. A. Nelson, "Mapping Devices and the M44 Data Processing System," Research Report RC 1303, IBM IBM 왓슨 연구소 (1964) ― 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)