CP/CMS

CP/CMS
개발자IBM 케임브리지 과학 센터
OS 계열VM
상태역사적
소스 형태소스 코드 (상세 내용은 본문 참조)
최초 버전 출시일1968년 5월(58년 전)(1968-05)
최신 버전3.2 / 1972년(54년 전)(1972)
플랫폼IBM 시스템/360-67; 가상 메모리 하드웨어를 갖춘 시스템/370 (초기 S/370 모델에는 미포함); 실험적 하드웨어에서도 사용됨
기본 UI명령줄 인터페이스
라이선스IBM 타입 III 라이브러리 (IBM 고객에게 소스 코드 형태로 무료 제공, 지원 없음)

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의 역사에서 직접적인 인용과 함께 상세히 다루고 있다.

요약하자면 다음과 같다:

개요

CP/CMS는 매사추세츠 공과대학교와 연계된 연구개발 연구소인 IBM 케임브리지 과학 센터(CSC)에서 로버트 크리시의 주도하에 구축되었다. 이 시스템의 목표, 개발 과정, 출시, 그리고 획기적인 기술적 유산은 이 시스템을 당대의 다른 운영체제나 다른 대규모 IBM 프로젝트들과 차별화했다. 이 시스템은 오픈 소스 시스템으로, 지원이 제공되지 않는 IBM Type-III 라이브러리의 일환으로 모든 IBM 고객에게 소스 코드 형태로 무료 제공되었다. CP/CMS 사용자들은 스스로와 서로를 도왔다. 아래의 역사 섹션에 설명된 특이한 상황이 이러한 결과를 낳았다.

CP/CMS는 두 가지 주요 구성 요소로 이루어져 있었다:

CP/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에 큰 빚을 지고 있다.

여러 면에서 IBM의 CP-67 및 CP/CMS 제품은 VM웨어 워크스테이션, Xen, 마이크로소프트 버추얼 PC와 같은 현대의 가상화 소프트웨어를 예견했으며 강력한 영향을 주었다.

관련 용어

같이 보기

각주

  1. ↑ Stuart E. Madnick (1969) “Time-Sharing Systems: Virtual Machine Concept vs. Conventional Approach” (PDF). 2012년 9월 13일에 확인함. Modern Data Systems, Vol. 2, No. 3, pp. 34-36.
  2. ↑ Stuart Madnick (1976) “Virtual Machine Advantages in Security, Integrity, and Decision Support Systems” (PDF). 2012년 9월 13일에 확인함. IBM Systems Journal, Vol. 15, No. 3.
  3. ↑ Creasy, op. cit., p. 488 – "Console Monitor System"
  4. ↑ cf. Hercules 에뮬레이터, 이는 IBM으로부터 불만을 사지 않고 이러한 역사적 시스템을 실행하는 데 사용되는 것으로 보임; 이 시스템들은 기계 판독 가능한 소스 코드 및 마이크로피시 형태로 IBM에 의해 게시됨
  5. ↑ 퍼블릭 도메인: "1988년 베른 협약 이행법 이전에는 적절한 저작권 고지가 없으면 저작권 보호 대상이 될 수 있는 저작물도 퍼블릭 도메인이 되었다...."
  6. ↑ Pugh et al., p. 737, note 166 – C. H. Reynolds의 1965년 8월 PL/I 정책 성명서 인용
  7. ↑ W. R. Brittenham, The development of PL/S, IBM Technical Report (1974) – Pugh에서 인용

참고 자료

CP/CMS 주요 소스
  • 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–90, PDF
    ― CP-40 프로젝트 리더이자 CTSS 작성자가 서술한 CP/CMS 및 VM 역사에 대한 관점
  • 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
    ― 이 기간 동안 IBM이 제공한 제품들에 대한 방대한(819페이지) 처리; 이렇게 결정적인 저서에서 CP/CMS에 대한 제한적인 언급은 시사하는 바가 큼
  • Melinda Varian, VM and the VM community, past present, and future, SHARE 89 Sessions 9059–61, 1997;
    ― CP/CMS 및 VM 역사에 대한 뛰어난 자료
  • Bitsavers, Index of /pdf/ibm/360/cp67
추가 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)
추가 온라인 CP/CMS 리소스
이 문서에서 다룬 지점에 대한 자세한 인용문은 CP/CMS의 역사에서 확인할 수 있다.

외부 링크