가상 시스템

Virtual machine

컴퓨팅에서 가상 머신(VM)은 컴퓨터 시스템가상화/에뮬레이션이다.가상 머신은 컴퓨터 아키텍처를 기반으로 하며 물리적 컴퓨터의 기능을 제공한다.이들의 구현에는 전문화된 하드웨어, 소프트웨어 또는 조합이 포함될 수 있다.

가상 머신은 기능별로 다르며 다음과 같이 구성된다.

  • 시스템 가상 시스템(전체 가상화 VM이라고도 함)은 실제 시스템을 대체하는 기능을 제공한다.그것들은 전체 운영 체제를 실행하는 데 필요한 기능을 제공한다.하이퍼바이저는 하드웨어를 공유하고 관리하기 위해 네이티브 실행을 사용하므로 서로 격리되어 있지만 동일한 물리적 시스템에 존재하는 여러 환경을 허용한다.현대의 하이퍼바이저는 주로 호스트 CPU에서 하드웨어 지원 가상화, 가상화 관련 하드웨어를 사용한다.
  • 프로세스 가상 머신은 플랫폼 독립 환경에서 컴퓨터 프로그램을 실행하도록 설계된다.

QEMU비디오 게임 콘솔 에뮬레이터와 같은 일부 가상 머신 에뮬레이터는 서로 다른 시스템 아키텍처도 에뮬레이트(또는 "가상적으로 모방")하도록 설계되어 다른 CPU나 아키텍처를 위해 작성된 소프트웨어 애플리케이션과 운영 체제를 실행할 수 있다.운영 체제 수준 가상화커널을 통해 컴퓨터의 리소스를 분할할 수 있도록 한다.그 용어들은 보편적으로 상호 교환할 수 없다.

정의들

시스템 가상 시스템

"가상 머신"은 원래 포펙과 골드버그에 의해 "실제 컴퓨터 머신의 효율적이고 격리된 복제품"[1]으로 정의되었다.현재 사용에는 실제 하드웨어와 직접 통신하지 않는 가상 시스템이 포함된다.[2]VM을 실행하는 물리적 "실제" 하드웨어를 일반적으로 '호스트'라고 하며, 해당 시스템에서 에뮬레이트된 가상 시스템을 일반적으로 '게스트'라고 한다.호스트는 여러 게스트를 에뮬레이트할 수 있으며, 각 게스트는 서로 다른 운영 체제와 하드웨어 플랫폼을 에뮬레이트할 수 있다.

여러 운영 체제를 실행하려는 욕구는 여러 개의 단일 태스크 운영 체제 간에 시간 공유를 허용하기 위한 가상 시스템의 초기 동기였다.어떤 면에서 시스템 가상 머신은 역사적으로 앞서 있었던 가상 메모리 개념의 일반화로 간주될 수 있다.완전한 가상화를 가능하게 한 최초의 시스템인 IBM의 CP/CMS는 각 사용자에게 단일 사용자 운영 체제인 대화 모니터 시스템(CMS)을 제공함으로써 시간 공유를 구현했다. 가상 메모리와 달리 시스템 가상 머신은 사용자에게 코드에 특권 지침을 작성할 수 있는 권한을 부여했다.이 접근방식은 표준 시스템에서 허용되지 않는 입출력 장치를 추가하는 것과 같은 특정한 장점을 가지고 있었다.[2]

기술이 가상화 목적을 위해 가상 메모리를 진화함에 따라 하나의 컴퓨터 운영 체제에서 여러 가상 머신 간의 메모리 공유를 관리하기 위해 새로운 메모리 오버커밋 시스템을 적용할 수 있다.동일한 물리적 시스템에서 실행되는 여러 가상 시스템 간에 동일한 내용을 가진 메모리 페이지를 공유할 수 있으며, 이를 KSM(Kernel Same-page Merging)이라는 기술로 동일한 물리적 페이지에 매핑할 수 있다.이것은 동일하거나 유사한 소프트웨어, 소프트웨어 라이브러리, 웹 서버, 미들웨어 구성요소 등을 실행하는 여러 가상 머신의 경우에 해당하는 코드 세그먼트를 보유하는 페이지와 같이 읽기 전용 페이지에 특히 유용하다.게스트 운영 체제는 호스트 하드웨어를 준수할 필요가 없으므로, 향후 소프트웨어를 지원하기 위해 동일한 컴퓨터(예: 윈도우즈, 리눅스 또는 이전 버전의 운영 체제)에서 서로 다른 운영 체제를 실행할 수 있다.[3]

임베디드 시스템과 관련하여 별도의 게스트 운영 체제를 지원하기 위해 가상 시스템을 사용하는 것이 일반적이다.일반적인 용도는 Linux나 Windows와 같이 선호되는 복잡한 운영 체제와 동시에 실시간 운영 체제를 실행하는 것이다.또 다른 용도는 아직 개발 단계에 있는 새롭고 검증되지 않은 소프트웨어에 사용될 것이기 때문에 샌드박스 안에서 작동된다.가상 머신은 운영 체제 개발에 다른 이점이 있으며 디버깅 액세스 개선과 빠른 재부팅이 포함될 수 있다.[4]

자체 게스트 운영 체제를 실행하는 여러 VM이 서버 통합을 위해 자주 [5]사용됨

가상 시스템 처리

애플리케이션 가상 시스템 또는 MRE(Managed Runtime Environment)라고도 하는 프로세스 VM은 호스트 OS 내에서 일반 애플리케이션으로 실행되며 단일 프로세스를 지원한다.그것은 그 과정이 시작될 때 만들어지고 그것이 빠져나갈 때 파괴된다.그 목적은 기반 하드웨어 또는 운영체제의 세부사항을 추상화하고 어떤 플랫폼에서도 동일한 방식으로 프로그램이 실행될 수 있도록 하는 플랫폼 독립 프로그래밍 환경을 제공하는 것이다.

프로세스 VM은 높은 수준의 추상화 - 높은 수준의 프로그래밍 언어(시스템 VM의 낮은 수준의 ISA 추상화와 비교)를 제공한다. 프로세스 VM은 인터프리터를 사용하여 구현된다. 컴파일된 프로그래밍 언어에 필적하는 성능은 적시 컴파일을 사용하여 달성할 수 있다.[citation needed]

이러한 유형의 VM은 Java 가상 머신을 사용하여 구현되는 Java 프로그래밍 언어에서 널리 사용되고 있다.다른 예로는 앵무새 가상 시스템과 를 들 수 있다.공통 언어 런타임이라는 VM에서 실행되는 NET Framework.그들 모두는 어떤 컴퓨터 언어의 추상화 계층의 역할을 할 수 있다.

프로세스 VM의 특별한 사례는 (잠재적으로 이기종인) 컴퓨터 클러스터의 통신 메커니즘을 추상화하는 시스템이다.이러한 VM은 단일 프로세스가 아니라 클러스터의 물리적 시스템당 하나의 프로세스로 구성된다.그것들은 프로그래머가 상호연결과 OS에 의해 제공되는 통신 메커니즘이 아닌 알고리즘에 집중하도록 함으로써 동시 어플리케이션을 프로그래밍하는 작업을 용이하게 하기 위한 것이다.그들은 통신이 이루어진다는 사실을 숨기지 않으며, 따라서 클러스터를 단일 기계로 표시하려고 시도하지 않는다.[citation needed]

다른 프로세스 VM과 달리, 이러한 시스템은 특정 프로그래밍 언어를 제공하지 않고 기존 언어에 내장된다. 일반적으로 이러한 시스템은 여러 언어(: C 및 Fortran)에 바인딩을 제공한다.[citation needed]PVM(Parallel Virtual Machine)과 MPI(Message Passing Interface)가 그 예다.위에서 실행되는 애플리케이션은 여전히 모든 OS 서비스에 액세스할 수 있고 따라서 시스템 모델에 국한되지 않기 때문에 엄밀하게 가상 머신이 아니다.

역사

시스템 가상 머신과 프로세스 가상 머신은 모두 1960년대까지 거슬러 올라가고 있으며, 여전히 활발한 개발의 영역이 되고 있다.

시스템 가상 머신은 특히 CTSS(Compatible Time-Sharing System)에서 구현된 시간 공유에서 벗어났다.시간 공유는 여러 사용자가 동시에 컴퓨터를 사용할 수 있도록 했다. 각 프로그램은 기계에 대한 완전한 액세스 권한을 가지고 있는 것처럼 보였지만, 시스템이 시간 슬라이스로 프로그램 사이를 전환하여 매번 상태를 저장 및 복원하면서, 당시에는 한 개의 프로그램만 실행되었다.이는 특히 부분 가상화를 사용한 M44/44X완전한 가상화를 사용한 CP-40SIMMON 등 IBM의 연구 시스템을 통해 가상 머신으로 진화했으며, 이는 하이퍼바이저의 초기 사례였다.널리 사용 가능한 첫 번째 가상 시스템 아키텍처는 CP-67/CMS였습니다(자세한 내용은 CP/CMS 기록 참조).중요한 구별 시분할을 한개의 호스트 시스템에, M44/44X과 CP-40에 원형화를 위한 호스트 시스템에 대해서 하나의 가상 머신을 사용하여 다중 가상 기계 간의, SIMMON.Emulators에, 호환성, 1963,[6][7]에 날짜는 IBM시스템/360고 있는 반면에 소프트웨어 12포인트 전각. 이전 시스템의 하드웨어 에뮬레이션과 함께 있었다.ulati그것을 앞지르다.

프로세스 가상 머신은 원래 컴파일러에 의해 프로그램의 중간 표현으로 사용되는 중간 언어에 대한 추상적인 플랫폼으로서 생겨났다. 초기 예는 1966년경이다.1966년 초기의 예는 BCPL 컴파일러의 프런트 엔드에서 방출된 O-코드(객체 코드)를 실행하는 가상 머신인 O-코드 머신이었다.이 추상화는 기존의 O-코드를 가져가고 그것을 기본 물리적 시스템의 기계 코드로 컴파일하는 새로운 백엔드를 구현함으로써 컴파일러를 새로운 아키텍처에 쉽게 포팅할 수 있게 했다.오일러 언어는 P(휴대용)라는 중간 언어를 가진 유사한 디자인을 사용했다.[8]이것은 1970년경 파스칼에 의해 대중화되었는데, 특히 파스칼-P 시스템(1973년)과 파스칼-S 컴파일러(1975)에서는 p-code라고 불렸고, 그 결과 기계는 p-code 기계로 불렸다.이것은 영향력이 있었고, 이러한 의미에서 가상 머신은 일반적으로 p-code machine이라고 불려왔다.중간 언어일 뿐만 아니라, Pascal p-code는 가상 머신을 구현하는 통역자에 의해 직접 실행되었는데, 특히 UCSD Pascal(1978)에서, 이는 이후의 통역가, 특히 Java 가상 머신(JVM)에 영향을 미쳤다.또 다른 초기 예는 가상 머신의 조립 언어인 SIL(Supplying Language)에 쓰여진 OPESTOL4(1967)로, 이후 매크로 조립자를 통해 본래의 조립자에게 전대함으로써 물리적 머신을 대상으로 했다.[9]그러나 매크로스는 그 이후 인기가 떨어졌기 때문에 이 접근법은 영향력이 적었다.프로세스 가상 머신은 피라미드 2000과 같은 일회성 구현에서 인포콤z-머신과 같은 범용 엔진에 이르기까지 Tiny BASIC과 어드벤처 게임을 포함한 초기 마이크로 컴퓨터 소프트웨어를 구현하는 데 인기 있는 접근방식이었는데, 그레이엄 넬슨은 이것이 "아마도 지금까지 만들어진 것 중 가장 이동성이 높은 가상 머신"이라고 주장한다.[10]

Smalltalk-80,[11] 특히 프로세스 가상 머신을 사용하는 구현 접근방식으로 JIT(Just-in-Time) 컴파일을 추진하는 Deutsch/Schiffmann 구현에서[12] 상당한 진전이 있었다.[13]후에 주목할 만한 스몰토크 VM은 VisualWorks, Spickak Virtual Machine [14]Strongtalk이었습니다.[15]가상 머신 혁신을 많이 낳은 관련 언어는 적응형 최적화[17] 세대별 쓰레기 수거를 개척한 '셀프 프로그래밍 언어'[16]Self programming language'이다.이러한 기술은 1999년 HotSpot Java 가상 머신에서 상업적으로 성공적이었다.[18]다른 혁신으로는 프로그래밍 언어에 더 가까운 스택 기반 가상 머신보다는 기반 하드웨어에 더 잘 맞는 레지스터 기반 가상 머신을 보유하는 것을 들 수 있다. 1995년에는 림보 언어에 대한 디스 가상 머신에 의해 이 가상 머신이 개척되었다.OpenJ9은 OpenJDK의 HotSpot JVM의 대안으로 HotSpot에 비해 시작성이 우수하고 리소스 소모가 적다는 오픈소스 일식 프로젝트다.

전체 가상화

전체 가상화의 논리적 다이어그램

전체 가상화에서 가상 머신은 수정되지 않은 "게스트" OS(동일한 명령 집합용으로 설계된 OS)를 분리하여 실행할 수 있을 만큼 충분한 하드웨어를 시뮬레이션한다.이러한 접근 방식은 VM 제품군의 이전 모델인 IBM CP-40CP-67과 함께 1966년에 개척되었다.

Examples outside the mainframe field include Parallels Workstation, Parallels Desktop for Mac, VirtualBox, Virtual Iron, Oracle VM, Virtual PC, Virtual Server, Hyper-V, VMware Workstation, VMware Server (discontinued, formerly called GSX Server), VMware ESXi, QEMU, Adeos, Mac-on-Linux, Win4BSD, Win4Lin Pro, and Egenera vBlade technology.

하드웨어 지원 가상화

하드웨어 지원 가상화에서 하드웨어는 가상 시스템 모니터를 쉽게 구축하고 게스트 OS를 분리하여 실행할 수 있는 아키텍처 지원을 제공한다.[19]하드웨어 지원 가상화는 IBM이 공식 제품으로 제공하는 최초의 가상 머신 운영 체제인 VM/370과 함께 사용하기 위해 1972년 IBM 시스템/370에서 처음 도입되었다.[20]

2005년과 2006년에 인텔AMD는 가상화를 지원하기 위한 추가 하드웨어를 제공했다.Sun Microsystems(현 Oracle Corporation)는 2005년 UltraSPARC T-Series 프로세서에 유사한 기능을 추가했다.이러한 하드웨어에 적용된 가상화 플랫폼의 예로는 KVM, VMware Workstation, VMware Fusion, Hyper-V, Windows Virtual PC, Xen, Mac용 Parallels Desktop, SPARC용 Oracle VM Server, VirtualBoxParallels Workstation이 있다.

2006년 1세대 32비트 및 64비트 x86 하드웨어 지원은 소프트웨어 가상화에 비해 좀처럼 성능상의 이점을 제공하지 않는 것으로 나타났다.[21]

운영 체제 레벨 가상화

운영 체제 레벨 가상화에서는 운영 체제 레벨에서 물리적 서버를 가상화하여 격리되고 안전한 여러 가상 서버를 단일 물리적 서버에서 실행할 수 있다."게스트" 운영 체제 환경은 운영 체제의 실행 중인 인스턴스를 호스트 시스템과 공유한다.따라서 동일한 운영 체제 커널을 사용하여 "게스트" 환경을 구현하기도 하며, 주어진 "게스트" 환경에서 실행되는 애플리케이션은 이를 독립형 시스템으로 본다.선구적인 구현은 FreeB였다.SD 교도소; 다른 예로는 Docker, Solaris Containers, OpenVZ, Linux-V서버, LXC, AIX Workload Partitions, Parallels Virtuozo Containers 및 iCore Virtual Accounts가 있다.

참고 항목

참조

  1. ^ Popek, Gerald J.; Goldberg, Robert P. (1974). "Formal requirements for virtualizable third generation architectures" (PDF). Communications of the ACM. 17 (7): 412–421. doi:10.1145/361011.361073. S2CID 12680060.
  2. ^ a b Smith, James E.; Nair, Ravi (2005). "The Architecture of Virtual Machines". Computer. 38 (5): 32–38, 395–396. doi:10.1109/MC.2005.173. S2CID 6578280.
  3. ^ Oliphant, Patrick. "Virtual Machines". VirtualComputing. Archived from the original on 2016-07-29. Retrieved 2015-09-23. Some people use that capability to set up a separate virtual machine running Windows on a Mac, giving them access to the full range of applications available for both platforms.
  4. ^ "Super Fast Server Reboots – Another reason Virtualization rocks". vmwarez.com. 2006-05-09. Archived from the original on 2006-06-14. Retrieved 2013-06-14.
  5. ^ "Server Consolidation and Containment With Virtual Infrastructure" (PDF). VMware. 2007. Archived (PDF) from the original on 2013-12-28. Retrieved 2015-09-29.
  6. ^ Pugh, Emerson W. (1995). Building IBM: Shaping an Industry and Its Technology. MIT. p. 274. ISBN 978-0-262-16147-3.
  7. ^ Pugh, Emerson W.; et al. (1991). IBM's 360 and Early 370 Systems. MIT. pp. 160–161. ISBN 978-0-262-16123-7.
  8. ^ Wirth, Niklaus Emil; Weber, Helmut (1966). EULER: a generalization of ALGOL, and its formal definition: Part II, Communications of the Association for Computing Machinery. Vol. 9. New York: ACM. pp. 89–99.
  9. ^ 그리즈월드, 랄프 E.NOTESPOL4의 매크로 구현.샌프란시스코, CA: W. H. Freeman and Company, 1972(ISBN 0-7167-0447-1) 1장.
  10. ^ Nelson, Graham A. "About Interpreters". Inform website. Archived from the original on 2009-12-03. Retrieved 2009-11-07.
  11. ^ Goldberg, Adele; Robson, David (1983). Smalltalk-80: The Language and its Implementation. Addison-Wesley Series in Computer Science. Addison-Wesley. ISBN 978-0-201-11371-6.
  12. ^ Deutsch, L. Peter; Schiffman, Allan M. (1984). "Efficient implementation of the Smalltalk-80 system". POPL. Salt Lake City, Utah: ACM. doi:10.1145/800017.800542. ISBN 0-89791-125-3.
  13. ^ Aycock, John (2003). "A brief history of just-in-time". ACM Comput. Surv. 35 (2): 97–113. doi:10.1145/857076.857077. S2CID 15345671.
  14. ^ Ingalls Jr., Daniel "Dan" Henry Holmes; Kaehler, Ted; Maloney, John; Wallace, Scott; Kay, Alan Curtis (1997). "Back to the future: the story of Squeak, a practical Smalltalk written in itself". OOPSLA '97: Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications. New York, NY, USA: ACM Press. pp. 318–326. doi:10.1145/263698.263754. ISBN 0-89791-908-4.
  15. ^ Bracha, Gilad; Griswold, David (1993). "Strongtalk: Typechecking Smalltalk in a Production Environment". Proceedings of the Eighth Annual Conference on Object-oriented Programming Systems, Languages, and Applications. OOPSLA '93. New York, NY, USA: ACM. pp. 215–230. doi:10.1145/165854.165893. ISBN 978-0-89791-587-8.
  16. ^ Ungar, David Michael; Smith, Randall B. (December 1987). "Self: The power of simplicity". ACM SIGPLAN Notices. 22 (12): 227–242. doi:10.1145/38807.38828. ISSN 0362-1340.
  17. ^ Hölzle, Urs; Ungar, David Michael (1994). "Optimizing dynamically-dispatched calls with run-time type feedback". PLDI. Orlando, Florida, United States: ACM. pp. 326–336. doi:10.1145/178243.178478. ISBN 0-89791-662-X.
  18. ^ Paleczny, Michael; Vick, Christopher; Click, Cliff (2001). "The Java HotSpot server compiler". Proceedings of the Java Virtual Machine Research and Technology Symposium on Java Virtual Machine Research and Technology Symposium. Vol. 1. Monterey, California: USENIX Association.
  19. ^ Uhlig, Rich; Neiger, Gil; Rodgers, Dion; Santoni, Amy L.; Martins, Fernando C. M.; Anderson, Andrew V.; Bennett, Steven M.; Kägi, Alain; Leung, Felix H.; Smith, Larry (May 2005). "Intel virtualization technology". Computer. 38 (5): 48–56. doi:10.1109/MC.2005.163. S2CID 18514555.
  20. ^ 랜달, A. (2019)이상적 대 현실: 가상 머신 및 컨테이너의 역사 재방문
  21. ^ Adams, Keith; Agesen, Ole (2006-10-21). A Comparison of Software and Hardware Techniques for x86 Virtualization (PDF). ASPLOS’06 21–25 October 2006. San Jose, California, USA. Archived (PDF) from the original on 2010-08-20. Surprisingly, we find that the first-generation hardware support rarely offers performance advantages over existing software techniques. We ascribe this situation to high VMM/guest transition costs and a rigid programming model that leaves little room for software flexibility in managing either the frequency or cost of these transitions.

추가 읽기

  • 제임스 E.Smith, Ravi Nair, 가상 머신: 시스템프로세스를 위한 다용도 플랫폼, Morgan Kaufmann, 2005년 5월, ISBN 1-55860-910-5, 656페이지(프로세스 및 시스템 가상 머신 모두 포함)
  • 크레이그, Iain D.가상 시스템.Springer, 2006, ISBN 1-85233-969-1, 269페이지(동반자는 가상 머신만 처리)

외부 링크