18. Virtual Machines

가상 기기의 사용, 특성, 구현을 알아보자.

18.1. Overview

가상 기기의 기본 아이디어는 단일 컴퓨터의 하드웨어를 여러 다른 실행 환경에 추상화해 각각 분리된 환경이 그 전용 컴퓨터 내에서 가동되고 있는 것처럼 보이게 하는 것이다. 가상 기기 구현은 여러 컴포넌트를 포함한다. 기본은 가상 기기에서 구동하는 기반 하드웨어 시스템인 호스트이다. 가상 기기 관리자(VMM 또는 하이퍼바이저)는 호스트와 동일한 인터페이스를 만들어 가상 기기를 생성하고 구동한다. 각 게스트 프로세스는 호스트의 가상 복제와 함께 제공된다. 대개 게스트 프로세스는 그 자체로 운영 체제이며, 단일 물리적 기기는 복수의 운영 체제를 그 가상 기기에서 동시에 구동할 수 있다. 가상화와 함께라면 운영 체제의 정의가 흐려지지만, 가상 환경을 제공하는 컴포넌트는 가상 기기 관리자라고 부르도록 하자. 가상 기기 관리자의 구현은 여러 가지가 있다.

  • 가상 기기 생성과 관리에 대한 지원을 펌웨어을 통해 제공하는 하드웨어 기반 해법. 이를 타입 0 하이퍼바이저라 한다.
  • 운영 체제같이 되어 가상화를 제공하는 소프트웨어. 이를 타입 1 하이퍼바이저라 한다.
  • 가상 기기 관리자처럼 일반 함수들을 제공하는 범용 운영 체제. 이들 또한 타입 1이다.
  • 표준 운영 체제에서 구동하지만 게스트 운영 체제에 가상 기기 관리자 특성을 제공하는 애플리케이션. 이를 타입 2 하이퍼바이저라 한다.
  • 게스트 운영 체제가 가상 기기 관리자와 협업하여 성능을 최적화하도록 수정되는 반가상화.
  • 가상 기기 관리자가 실제 하드웨어를 가상화하지는 않지만 최적화된 가상 기기를 만드는 프로그래밍 환경 가상화.
  • 하나의 하드웨어 환경에서 쓰여진 애플리케이션이 다른 하드웨어 환경 (CPU 등)에서도 구동할 수 있게 하는 에뮬레이터.
  • 가상화는 아니지만 애플리케이션을 운영 체제와 분리하는 가상화적인 특성들을 제공하는 애플리케이션 격납.

현대 컴퓨팅의 가상화의 중요성, 널빙, 깊이 면에서 여러 가상화 테크닉은 중요하다.

18.2. History

최초의 가상 기기는 1972년 시작되었다. 이는 IBM의 VM 운영 체제에 미니디스크라는 가상 디스크를 제공함으로써 구현되었다. 가상 기기가 만들어지면 기반 기기에서 가능한 운영 체제나 소프트웨어 패키지를 구동시킬 수 있었다. 이후에 다음의 가상화의 요구 사항이 정립되었다: 충실성, 성능, 안전성. 1990년대 후반에는 Intel 80×86 CPU가 자주 쓰이고 빠르고 풍부한 특성을 갖게 되었다. XenVMware는 게스트 운영 체제가 80×86에서 가동될 수 있도록 하는 기술을 만들었으며 이는 오늘날에도 사용된다.

18.3. Benefits and Features

가상화를 매력적이도록 하는 몇 가지 이점의 대부분은 같은 하드웨어를 공유하면서 여러 다른 실행 환경을 동시에 실행할 수 있도록 하는 능력과 관계가 있다. 가상화의 중요한 이점 중 하나는 가상 기기가 서로로부터 보호되는 것처럼 호스트 시스템이 가상 기기로부터 보호받는다는 것이다. 이런 고립의 잠재적인 단점은 자원의 공유를 막을 수 있다는 점이다. 공유를 제공하는 방법에는 두 가지가 있는데 첫째는 파일 시스템 볼륨을 공유해 파일을 공유하도록 하는 것이다. 둘째는 가상 기기의 네트워크를 정의해 각각이 가상 기기 네트워크를 통해 정보를 전송하도록 하는 것이다. 대부분의 가상화 구현이 갖는 공통된 특성은 구동 중인 가상 기기를 동결(연기)하는 것이다. 많은 운영 체제들은 프로세스에 대해서는 이를 기본 특성으로 제공하지만, 가상 기기 관리자들은 한 발 더 나아가 게스트로부터 만들어진 카피나 스냅샷을 허용한다. 이는 새 가상 기기를 만들거나 한 기기로부터 다른 기기로 가상 기기를 현재 상태를 보존한 채 이동시킬 수 있다. 게스트는 클론을 만들어서 본래 기기에서 있었던 지점부터 이를 재개할 수 있다. 운영 체제를 직접 변경하는 것은 어렵고 위험하므로, 가상 기기 시스템은 운영 체제 연구와 개발을 위한 완벽한 수단이다. 물론, 운영 체제는 기기 전체에서 가동되고 기기 전체를 제어하므로, 변경이 수행되고 테스트되는 시점에는 시스템은 정지되고 들어내어져야 한다. 이 시점을 시스템 개발 시점이라 하며, 시스템 부하가 적을 때 수행되어야 한다. 가상 기기 시스템은 이 문제의 많은 부분을 해결해 준다. 개발자들에게 있어 가상 기기의 또 다른 이점은 복수의 운영 체제가 개발자의 워크스테이션에서 동시에 가동될 수 있다는 점이다. 상품 데이터 센터에서 사용되는 운영 체제의 큰 이점은 시스템의는 몇 가지 이점의 대부분은 같은 하드웨어를 공유하면서 여러 다른 실행 환경을 동시에 실행할 수 있도록 하는 능력과 관계가 있다. 가상화의 중요한 이점 중 하나는 가상 기기가 서로로부터 보호되는 것처럼 호스트 시스템이 가상 기기로부터 보호받는다는 것이다. 이런 고립의 잠재적인 단점은 자원의 공유를 막을 수 있다는 점이다. 공유를 제공하는 방법에는 두 가지가 있는데 첫째는 파일 시스템 볼륨을 공유해 파일을 공유하도록 하는 것이다. 둘째는 가상 기기의 네트워크를 정의해 각각이 가상 기기 네트워크를 통해 정보를 전송하도록 하는 것이다. 대부분의 가상화 구현이 갖는 공통된 특성은 구동 중인 가상 기기를 동결(연기)하는 것이다. 많은 운영 체제들은 프로세스에 대해서는 이를 기본 특성으로 제공하지만, 가상 기기 관리자들은 한 발 더 나아가 게스트로부터 만들어진 카피나 스냅샷을 허용한다. 이는 새 가상 기기를 만들거나 한 기기로부터 다른 기기로 가상 기기를 현재 상태를 보존한 채 이동시킬 수 있다. 게스트는 클론을 만들어서 본래 기기에서 있었던 지점부터 이를 재개할 수 있다. 운영 체제를 직접 변경하는 것은 어렵고 위험하므로, 가상 기기 시스템은 운영 체제 연구와 개발을 위한 완벽한 수단이다. 물론, 운영 체제는 기기 전체에서 가동되고 기기 전체를 제어하므로, 변경이 수행되고 테스트되는 시점에는 시스템은 정지되고 들어내어져야 한다. 이 시점을 시스템 개발 시점이라 하며, 시스템 부하가 적을 때 수행되어야 한다. 가상 기기 시스템은 이 문제의 많은 부분을 해결해 준다. 개발자들에게 있어 가상 기기의 또 다른 이점은 복수의 운영 체제가 개발자의 워크스테이션에서 동시에 가동될 수 있다는 점이다. 상품 데이터 센터에서 사용되는 운영 체제의 큰 이점은 시스템의 합병으로, 둘 이상의독립된 시스템을 하나의 시스템에서의 가상 기기에서 실행하는 것이다. 또한 가상화를 하면 게스트 운영 체제와 애플리케이션을 설치하고 설정한 하나의 표준 가상 기기 이미지가 저장되어 복수의 구동되는 가상 기기의 소스로 사용되는 템플릿화를 통해 여러 서버를 하나의 시스템 관리자로 관리할 수 있다. 가상화는 자원 활용뿐만 아니라 자원 관리도 개선시킬 수 있다. 어떤 가상 기기 관리자는 구동 중인 게스트를 한 물리적 서버에서 다른 물리적 서버로 그 동작이나 활성화된 네트워크 연결을 중단시키지 않고 이주시킬 수 있는 실시간 이주를 제공한다. 시스템이 가상 기기를 쉽게 추가, 제거, 이동시킬 수 있으면 애플리케이션을 시스템이 아니라 가상 기기 내에서 조정되고록 하는 몇 가지 이점의 대부분은 같은 하드웨어를 공유하면서 여러 다른 실행 환경을 동시에 실행할 수 있도록 하는 능력과 관계가 있다. 가상화의 중요한 이점 중 하나는 가상 기기가 서로로부터 보호되는 것처럼 호스트 시스템이 가상 기기로부터 보호받는다는 것이다. 이런 고립의 잠재적인 단점은 자원의 공유를 막을 수 있다는 점이다. 공유를 제공하는 방법에는 두 가지가 있는데 첫째는 파일 시스템 볼륨을 공유해 파일을 공유하도록 하는 것이다. 둘째는 가상 기기의 네트워크를 정의해 각각이 가상 기기 네트워크를 통해 정보를 전송하도록 하는 것이다. 대부분의 가상화 구현이 갖는 공통된 특성은 구동 중인 가상 기기를 동결(연기)하는 것이다. 많은 운영 체제들은 프로세스에 대해서는 이를 기본 특성으로 제공하지만, 가상 기기 관리자들은 한 발 더 나아가 게스트로부터 만들어진 카피나 스냅샷을 허용한다. 이는 새 가상 기기를 만들거나 한 기기로부터 다른 기기로 가상 기기를 현재 상태를 보존한 채 이동시킬 수 있다. 게스트는 클론을 만들어서 본래 기기에서 있었던 지점부터 이를 재개할 수 있다. 운영 체제를 직접 변경하는 것은 어렵고 위험하므로, 가상 기기 시스템은 운영 체제 연구와 개발을 위한 완벽한 수단이다. 물론, 운영 체제는 기기 전체에서 가동되고 기기 전체를 제어하므로, 변경이 수행되고 테스트되는 시점에는 시스템은 정지되고 들어내어져야 한다. 이 시점을 시스템 개발 시점이라 하며, 시스템 부하가 적을 때 수행되어야 한다. 가상 기기 시스템은 이 문제의 많은 부분을 해결해 준다. 개발자들에게 있어 가상 기기의 또 다른 이점은 복수의 운영 체제가 개발자의 워크스테이션에서 동시에 가동될 수 있다는 점이다. 상품 데이터 센터에서 사용되는 운영 체제의 큰 이점은 시스템의는 몇 가지 이점의 대부분은 같은 하드웨어를 공유하면서 여러 다른 실행 환경을 동시에 실행할 수 있도록 하는 능력과 관계가 있다. 가상화의 중요한 이점 중 하나는 가상 기기가 서로로부터 보호되는 것처럼 호스트 시스템이 가상 기기로부터 보호받는다는 것이다. 이런 고립의 잠재적인 단점은 자원의 공유를 막을 수 있다는 점이다. 공유를 제공하는 방법에는 두 가지가 있는데 첫째는 파일 시스템 볼륨을 공유해 파일을 공유하도록 하는 것이다. 둘째는 가상 기기의 네트워크를 정의해 각각이 가상 기기 네트워크를 통해 정보를 전송하도록 하는 것이다. 대부분의 가상화 구현이 갖는 공통된 특성은 구동 중인 가상 기기를 동결(연기)하는 것이다. 많은 운영 체제들은 프로세스에 대해서는 이를 기본 특성으로 제공하지만, 가상 기기 관리자들은 한 발 더 나아가 게스트로부터 만들어진 카피나 스냅샷을 허용한다. 이는 새 가상 기기를 만들거나 한 기기로부터 다른 기기로 가상 기기를 현재 상태를 보존한 채 이동시킬 수 있다. 게스트는 클론을 만들어서 본래 기기에서 있었던 지점부터 이를 재개할 수 있다. 운영 체제를 직접 변경하는 것은 어렵고 위험하므로, 가상 기기 시스템은 운영 체제 연구와 개발을 위한 완벽한 수단이다. 물론, 운영 체제는 기기 전체에서 가동되고 기기 전체를 제어하므로, 변경이 수행되고 테스트되는 시점에는 시스템은 정지되고 들어내어져야 한다. 이 시점을 시스템 개발 시점이라 하며, 시스템 부하가 적을 때 수행되어야 한다. 가상 기기 시스템은 이 문제의 많은 부분을 해결해 준다. 개발자들에게 있어 가상 기기의 또 다른 이점은 복수의 운영 체제가 개발자의 워크스테이션에서 동시에 가동될 수 있다는 점이다. 상품 데이터 센터에서 사용되는 운영 체제의 큰 이점은 시스템의 합병으로, 둘 이상의독립된 시스템을 하나의 시스템에서의 가상 기기에서 실행하는 것이다. 또한 가상화를 하면 게스트 운영 체제와 애플리케이션을 설치하고 설정한 하나의 표준 가상 기기 이미지가 저장되어 복수의 구동되는 가상 기기의 소스로 사용되는 템플릿화를 통해 여러 서버를 하나의 시스템 관리자로 관리할 수 있다. 가상화는 자원 활용뿐만 아니라 자원 관리도 개선시킬 수 있다. 어떤 가상 기기 관리자는 구동 중인 게스트를 한 물리적 서버에서 다른 물리적 서버로 그 동작이나 활성화된 네트워크 연결을 중단시키지 않고 이주시킬 수 있는 실시간 이주를 제공한다. 시스템이 가상 기기를 쉽게 추가, 제거, 이동시킬 수 있으면 애플리케이션을 시스템이 아니라 가상 기기 내에서 조정되고 맞춤화된 운영 체제에 사전 설치할 수 있다. 가상화는 컴퓨터 설비 구현, 관리, 모니터링에 대한 다른 발전들을 이루었다. 이 중 하나로는 가상화를 통한 클라우드 컴퓨팅으로 CPU, 메모리, I/O와 같은 자원들이 인터넷 기술들을 통해 소비자들에 대한 서비스로 제공되는 것이다. 데스크톱 컴퓨팅의 영역에서 가상화는 데스크탑과 랩탑 컴퓨터들이 원격 데이터 센터에 있는 가상 기기에 원격으로 연결해 로컬 기기에서 접근한 것처럼 그들의 애플리케이션에 접근할 수 있다. 이는 RDP 등의 프로토콜을 통해 이루어진다.

18.4. Building Blocks

가상 기기 개념은 유용하지만, 구현하기는 어렵다. 가상화하기 위한 능력은 CPU로부터 제공되는 특성에 의존한다. 대다수의 가상화 옵션 개념은 유용하지만, 구현하기는 어렵다. 가상화하기 위한 능력은 CPU로부터 제공되는 특성에 의존한다. 대다수의 가상화 옵션들에서 찾을 수 있는 중요한 개념은 가상 CPU(VCPU)의 구현이다. 이는 게스트 기기가 믿는 CPU의 상태이다.

18.4.1. Trap-and-Emulate

일반적인 듀얼 모드 시스템에서는 가상 기기는 사용자 모드로만 실행될 수 있다. 그래서 가상 사용자 모드와 사용자 커널 모드를 물리적 사용자 모드에서 실행해야 하므로, 실제 기기에서 사용자 모드에서 커널 모드로 전환하면 가상 기기에서도 가상 사용자 모드에서 가상 커널 모드로 전환해야 한다. 이는 게스트의 커널이 특권 명령어를 실행하려 할 때 이는 에러로 처리되어 실제 기기의 가상 기기 관리자의 트랩을 일으킨다. 가상 기기 관리자는 제어권을 얻고 게스트의 커널이 시도한 동작을 수행한 뒤 가상 기기로 제어권을 반환한다. 이를 트랩-에뮬레이트 방법이라 한다. 특권 명령어 외에도 시간이 문제가 된다. 이 문제는 여러 방법으로 접근되었다.

18.4.2. Binary Translation

어떤 CPU는 특권 명령어와 비특권 명령어 간 깔끔한 구분이 없다. 이 문제는 이진 번역 방식으로 해결되었는데, 이는 개념상으론 쉽고 구현상으론 어렵다. 방식은 다음과 같다: 게스트 가상 CPU가 사용자 모드에 있을 때는 게스트는 물리적 CPU에서 명령어드을특권 명령어와 비특권 명령어 간 깔끔한 구분이 없다. 이 문제는 이진 번역 방식으로 해결되었는데, 이는 개념상으론 쉽고 구현상으론 어렵다. 방식은 다음과 같다: 게스트 가상 CPU가 사용자 모드에 있을 때는 게스트는 물리적 CPU에서 명령어들을 직접 수행할 수 있다. 게스트 가상 CPU가 커널 모드라면 게스트는 그것이 커널 모드로 동작 중이라고 믿는다. 이는 정확히 동작하지만 성능 상으로는 좋지 않은데, 이를 위해 캐싱을 도입한다. 가상 기기 관리자는 가상 기기 관리자와 게스트들 모두를 위한 페이지 테이블을 어떻게 관리하는가? 범용적인 방법은 중첩 페이지 테이블(NPTs)이다. 각 게스트 운영 체제는 하나 이상의 페이지 테이블을 갖고 있어 가상 메모리로부터 물리적 메모리를 변환한다. 가상 기기 관리자는 중첩 페이지 테이블을 갖고 있어 가상 CPU가 게스트의 CPU 상태를 표현하는 방식과 비슷하게 게스트의 페이지 테이블 상태를 표현한다. 이진 번역 방식은 큰 오버헤드를 일으킬 것으로 보일지 모르지만 Intel x86 기반 시스템을 가상화하는 새 산업 분야를 출범시키기에 충분한 만큼 잘 동작하였다.

18.4.3. Hardware Assistance

얼마간의 하드웨어 지원이 없다면 가상화는 불가능하다. 시스템 내에서 가능한 하드웨어 지원이 더 클수록 가상 기기는 더 많은 특성을 갖고 더 안정적일 수 있으며 그 성능도 더 좋아진다. Intel x86 CPU 군에서는 Intel은 VT-x 명령어로 불리는 새 가상화 지원을 추가하였고 이진 번역은 더 이상 쓰이지 않는다. AMD 가상 기술(AMD-V)는 여러 AMD 프로세서에서 발견된다. 이들 모두 가상 기기 제어 구조 (VMCs)를 제공해서 게스트와 호스트 상태와 여러 게스트 실행 제어, 종료 제어, 게스트가 종료되어 호스트로 복귀하는 원인에 대한 정보 등을 관리한다. AMD와 Intel은 가상 기기에서의 메모리 관리도 다루었다. I/O는 하드웨어 지원으로부터 개선되는 또 다른 영역이다. 우선 가상 기기 관리자가 보호 도메인을 설정해 CPU에 어떤 물리적 메모리가 각 게스트에 속하는지를 알려준다. 이후 이는 I/O 기기를 보호 도메인에 배정해 이들이 이 메모리 영역에 한정해서 접근할 수 있도록 한다. 그리고 하드웨어는 I/O 기기가 한 DMA 요청의 주소를 I/O와 연관된 호스트 물리적 메모리로 전환한다. 이를 통해 DMA 전환은 가상 기기 관리자 간섭 없이 게스트와 디바이스간에 이루어질 수 있다. 비슷하게, 인터럽트는 적절한 게스트에 전달되어야 하고 다른 게스트에 보이면 안 된다. 가상 하드웨어 지원을 받는 CPU는 인터럽트 재맵핑 특성을 통해 이를 이룬다. ARM 아키텍쳐, 특히 ARM v8은 커널보다 더 특권을 받은 전체 예외 층 (EL2)를 통해 가상화에 대한 하드웨어 지원을 한다. 하드웨어 지원 가상화의 흥미로운 부가 효과는 얇은 하이퍼바이저 생성을 허용한다는 것이다.

18.5. Types of VMs and Their Implementations

가상 기기와 구현의 주요 타입을 알아보자.

18.5.1. The Virtual Machine Life Cycle

하이퍼바이저 유형에 상관없이, 가상 기기가 만들어지는 시점에 가상 기기 관리자에게는 게스트를 만들 때 가상 기기 관리자에게 필요한 CPU 수, 메모리의 크기, 네트워킹 세부 사항, 저장소 세부 사항 등의 매개변수들이 주어진다. 이후에 가상 기기 관리자는 이 매개변수들을 통해 가상 기기를 만든다. 가상 기기가 더 필요해지지 않을 때에는 이는 삭제될 수 있다. 이는 물리적 기기를 만들고, 설정하고, 구동하고, 제거하는 것보다는 훨씬 간단하다. 이는 가상 기기 확산을 유도하였다.

18.5.2. Type 0 Hypervisor

타입 0 하이퍼바이저는 파티션이나 도메인 같은 여러 이름으로 존재해왔다. 이들은 하드웨어 특성들이기 때문에 운영 체제가 이의 이점을 누리기 위해 특별한 일을 해야 할 필요가 없다. I/O 기기가 불충분할 때 게스트에게 이를 할당하기 쉽지 않기 때문에 I/O는 더 어려운데, 하이퍼바이저는 모든 기기에 제어 파티션에 대한 공유된 접근을 관리해 이를 해결한다. 타입 0 가상화는 원시 하드웨어 실행과 매우 가까우므로, 이는 다른 방법들과는 구분지어 고려되어야 한다.

18.5.3. Type 1 Hypervisor

타입 1 하이퍼바이저는 데이터 센터나 데이터 센터 운영 체제에서 흔하게 찾을 수 있다. 이는 하드웨어에서 직접 가동되는 특수 목적 운영 체제로서 가동하는 프로그램에 시스템 호출이나 다른 인터페이스를 제공하는 대신 게스트 운영체제를 만들고, 구동하고, 관리한다. 이는 커널 모드에서 동작해 하드웨어 보호의 이점을 누린다. 타입 1 하이퍼바이저를 사용함으로써, 데이터 센터 매니저는 운영 체제와 애플리케이션을 새롭고 복잡한 방식으로 제어하고 관리할 수 있다. 중요한 이점은 더 많은 운영체제와 애플리케이션을 더 적은 시스템에 병합시킬 수 있다는 점이다. 타입 1 하이퍼바이저의 다른 유형은 가상 기기 관리자 기능을 가진 여러 범용 운영 체제들을 포함한다.

18.5.4. Type 2 Hypervisor

타입 2 하이퍼바이저는 애플리케이션 수준 가상 기기 관리자들로 운영 체제는 거의 관여하지 않는다. 이는 다른 타입의 하이퍼바이저들과는 상관이 없는 여러 한계점을 가지고 있지만, 여러 범용 운영 체제에서 호스트 운영 체제의 변경 없이 구동될 수 있다는 장점도 존재한다.

18.5.5. Paravirtualization

반가상화는 다른 가상화와는 다르게 동작한다. 게스트 운영체제가 자체 시스템을 갖고 있는 것처럼 흉내내는 대신 반가상화는 게스트에 그가 선호하는 시스템과 비슷하지만 같지 않은 시스템을 제공한다. Xen VMM은 게스트의 성능과 호스트 시스템의 성능을 최적화함으로써 반가상화를 이끌고 있다. 메모리 관리 면에서 Xen은 중첩 페이지 테이블 대신 페이지 테이블 변화가 필요할 때 게스트로부터 하이퍼바이저 가상 기기 관리자로의 하이퍼 호출을 통해 이를 관리한다. Xen은 x86 CPU에 이진 번역 없이 게스트 운영 체제에 수정을 요구함으로써 가상화를 제공한다.

18.5.6. Programming-Environment Virtualization

프로그래밍 언어 또한 특수 목적으로 설립된 가상 환경에서 구동하도록 설계될 수 있다. Java는 Java 가상 기기(JVM)에서의 구동에 의존하는 보안과 메모리 관리 등 많은 특성을 갖고 있다. 이 때의 가상 환경은 API에 기반해 특정 언어와 그 언어로 쓰여진 프로그램이 활용할 수 있는 특성 집합으로 정의된다. 이는 각 명령어를 읽어 원시 동작으로 통역하는 프로그램 내에서 가동되는 인터프리터 언어에 대해서도 적용될 수 있다.

18.5.7. Emulation

애플리케이션이나 운영 체제가 다른 CPU에서 가동되어야 한다면 어떻게 해야 할까? 이 경우에는 환경은 가상화되는 것이 아니라 완전히 에뮬레이트된다. 이는 호스트 시스템이 한 시스템 아키텍쳐를 갖고 게스트 시스템은 다른 아키텍쳐에서 컴파일되었을 때 유용하다. 이의 주 난점은 성능이다. 이런 난점들에도 불구하고, 에뮬레이션은 특히 게이밍 분야에서 매우 인기가 높다.

18.5.8. Application Containment

가상화의 어떤 목적들은 애플리케이션을 분리해 성능과 자원 사용을 관리하고 실행, 중지, 이동, 관리할 수 있는 쉬운 방법을 만드는 것이다. 이 경우에는 완전한 가상화는 필요치 않으므로, 애플리케이션 격납으로 충분하다. Oracle Solaris는 컨테이너, 등을 통해 이를 이룬다. 컨테이너는 다른 가상화 방법에 비해 훨씬 가볍다. Linux는 LXC 컨테이너 특성을 2014년에 추가하였다. 컨테이너들은 도커쿠버네티스 등의 통합 도구들을 자동화시키고 관리할 수 있게 해 준다.

18.6. Virtualization and Operating-System Components

운영 체제 관점에서의 가상화를 더 알아보자.

18.6.1. CPU Scheduling

단일 CPU 시스템도 가상화가 적용되면 멀티프로세서 시스템처럼 동작하게 된다. 다양한 가상화 기술은 스케쥴링에 있어 가상화의 효과를 요약하기 어렵게 한다. 어려운 경우는 게스트가 시스템 내 존재하는 것보다 더 많은 CPU를 설정하는 과사용의 경우이다. 스케쥴러가 합당하게 동작하더라도, 게스트 운영 체제의 스케쥴링 알고리즘이 주어진 시간에서 일정한 양의 연산 수행을 가정할 경우에는 가상화로부터 악영향을 받을 수 있다. 이런 스케쥴링의 순수한 결과는 가상화된 운영 체제 각각이 가용 CPU 사이클의 일부분만을 받으면서도 모든 사이클을 받고 이를 스케쥴링하는 것처럼 착각하게 된다는 것이다. 이를 보정하기 위해, 가상 기기 관리자는 시스템 관리자가 각 게스트 운영 체제에서 실행 가능한 애플리케이션을 통해 시간 오차를 보정한다.

18.6.2. Memory Management

가상 환경에 있어 메모리 사용자는 더 많으므로 메모리 관리는 더 중요해진다. 이를 위해 가상 기기 관리자는 게스트의 최대 메모리 크기를 평가하고 이후에는 가상 기기 관리자는 각 게스트에 대해 그 게스트에 설정된 메모리, 과사용, 시스템 부하 등 다른 인자를 통해 대상 실제 메모리 할당량을 계산한다. 그리고 3가지의 저수준 메커니즘을 통해 게스트로부터 메모리를 되찾는다: 첫째는 가상 기기 관리자가 게스트의 페이지 테이블을 실제 페이지 테이블로 변환하는 중첩 페이지 테이블을 들고 있는 것을 이용해 게스트의 메모리 사용을 최적화한다. 둘째는 가상 기기 관리자가 가있어 메모리 사용자는 더 많으므로 메모리 관리는 더 중요해진다. 이를 위해 가상 기기 관리자는 게스트의 최대 메모리 크기를 평가하고 이후에는 가상 기기 관리자는 각 게스트에 대해 그 게스트에 설정된 메모리, 과사용, 시스템 부하 등 다른 인자를 통해 대상 실제 메모리 할당량을 계산한다. 그리고 3가지의 저수준 메커니즘을 통해 게스트로부터 메모리를 되찾는다: 첫째는 가상 기기 관리자가 게스트의 페이지 테이블을 실제 페이지 테이블로 변환하는 중첩 페이지 테이블을 들고 있는 것을 이용해 게스트의 메모리 사용을 최적화한다. 둘째는 가상 기기 관리자가 그것이 관리하는 유사 디바이스 드라이버나 커널 모듈을 각 게스트에 설치하는 것이다. 셋째는 가상 기기 관리자가 같은 페이지가 한 번 이상 불러와졌는지를 판정하는 것이다. 이 방법들은 게스트들이 실제 메모리는 그것보다 적더라도 요청한 메모리의 완전한 양을 가진 것처럼 동작하고 가동되도록 한다.

18.6.3. I/O

입출력의 영역에서 하이퍼바이저는 어느 정도 자유가 있으며 기반 하드웨어를 게스트에게 어떻게 표현해야 할지에 대해서는 덜 고려해도 된다. 이에 따라 가상 기기 관리자의 유형은 크게 달라진다. 빠른 입출력 성능을 위해, 하이퍼바이저는 대개 입출력에 관여하지 않고 직접 접근이 이루어진다. 타입 1과 2 하이퍼바이저 내의 직접 기기 접근에서 특정한 하드웨어 지원이 존재한다면 성능은 기반 운영 체제에서 직접 구동하는 것과 비슷해진다. 직접 접근에 추가로, 가상 기기 관리자는 기기에 대한 공유 접근도 지원한다. 네트워크의 영역에서는 가상 기기 관리자는 네트워크 패킷을 게스트에 분배하는 라우터의 역할도 한다. 게스트는 더 넓은 네트워크 쪽에서 보이는 IP 주소를 통해 네트워크에 직접 연결될 수 있다. 이를 브릿징이라 한다. 대안으로 가상 기기 관리자는 네트워크 주소 변환 (NAT) 주소를 제공하기도 한다.

18.6.4. Storage Management

복수의 운영 체제가 설치되었을 때 부트 디스크는 무엇이며 어디에 있는가? 가상 기기가 수백 개 있을 수 있기 때문에 부트 디스크 분할로는 충분치 않다. 이 문제에 대한 해결책은 하이퍼바이저의 유형에 따라 다르다. 타입 0 하이퍼바이저는 루트 디스크 분할을 지원한다. 디스크 매니저가 제어 분할의 일부분일 수도 있다. 타입 1 하이퍼바이저는 게스트 루트 디스크를 가상 기기 관리자로부터 제공되는 파일 시스템의 하나 이상 파일에 저장한다. 타입 2 하이퍼바이저는 동일한 정보(디스크 이미지)를 호스트 운영 체제의 파일 시스템에 저장한다. 게스트는 루트 디스크 이미지에서 가용 가능한 디스크 공간보다 더 큰 공간을 필요로 할 수 있다. 가상 기기 관리자는 물리적 시스템의 현재 설정을 저장해 게스트로 전환시켜 가상 기기 관리자가 관리하고 구동시킬 수 있도록 하는 메커니즘을 빈번하게 제공한다. 이런 물리-가상(P-to-V) 전환은 물리적 시스템의 디스크 블록을 읽어 가상 기기 관리자의 시스템이나 가상 기기 관리자가 접근할 수 있는 공유 저장소의 파일에 이를 저장한다. 가상 기기 관리자는 또한 가상-물리(V-to-P) 과정을 통해 게스트로부터 물리적 시스템으로 전환하기도 한다.

18.6.5. Live Migration

범용 운영 체제에서는 볼 수 없지만 타입 0/타입 1 하이퍼바이저에서 찾을 수 있는 특성은 동작 중인 게스트를 한 시스템에서 다른 시스템으로 이주시킬 수 있는 실시간 이주이다. 이것이 동작할 때는 시스템 내에서 동작 중인 게스트가 같은 가상 기기 관리자를 구동하는 다른 시스템으로 복제된다. 실시간 이주는 각 게스트와 가상 기기 관리자간 잘 정의된 인터페이스와, 가상 기기 관리자가 게스트에 대해 유지하는 제한된 상태로 인해 가능해진다. 이는 다음 단계로 이루어진다: 원본 가상 기기 관리자가 대상 가상 기기 관리자와 연결을 설립하고 게스트 전송이 허용되었음을 확인한다. 대상은 새 가상 CPU, 새 중첩 페이지 테이블, 새 상태 저장소를 만들어 새 게스트를 만든다. 원본은 읽기 전용 메모리 페이지를 대상에 전송한다. 이후 원본은 읽기-쓰기 페이지를 대상에 전달하고 깨끗한 상태로 마킹한다. 게스트가 중간에 페이지를 수정했을 수 있으므로 이 과정은 반복된다. 이 과정이 끝나면 원본 가상 기기 관리자는 게스트를 중지시키고 가상 CPU의 최종 상태와 다른 상태 세부 사항을 전송하고 최종 쓰여진 페이지를 보낸 뒤 대상이 게스트를 구동하도록 지시한다. 몇 가지 흥미로운 세부 사항과 한계점이 있다: 네트워크 연결이 끊기지 않기 위해 네트워크 기반 시설은 시스템간 이동 가능한 MAC 주소를 이해해야 한다. 실시간 이주의 단점은 디스크 상태는 전송되지 않는다는 점이다. 실시간 이주는 데이터 센터를 완전히 새로운 방식으로 관리할 수 있도록 한다.

18.7. Examples

가상 기기의 두 예를 알아보자.

18.7.1. VMware

VMware 워크스테이션은 Intel x86과 호환 가능한 하드웨어를 분리된 가상 기기로 추상화하는 유명한 상업적 애플리케이션이다. VMWare의 심장은 가상화 층으로 물리적 하드웨어를 독립된 가상 기기로 추상화해서 게스트 운영 체제로 가동되도록 한다. 게스트가 소유하고 관리하는 물리적 디스크는 호스트 운영 체제 내의 파일 시스템 내의 파일이다.

18.7.2. The Java Virtual Machine

언어 명세와 거대한 API 라이브러리와 동시에, Java는 Java 가상 머신(JVM)에 대한 명세를 제공한다. 각 Java 클래스에 대해 컴파일러는 어느 JVM 구현에서도 동작할 수 있는 아키텍쳐 중립적인 바이트코드 출력을 낸다. JVM은 추상 컴퓨터의 특정으로, 클래스 로더와 Java 인터프리터로 구성되어 있다. JVM은 더 이상 사용되지 않는 오브젝트로부터 메모리를 되찾아 시스템에 반환하는 쓰레기 수집을 통해 메모리를 관리한다. JVM은 Windows, Linux, macOS 등 호스트 운영 체제에 기반한 소프트웨어나 웹 브라우저의 일부분으로 구현될 수 있다. 빠른 테크닉으로 적기(JIT) 컴파일러가 있으며 이 때는 Java 메소드가 처음 실행된 시점에 메소드의 바이트코드는 호스트 시스템에 대한 기계어로 번역된다. 이 동작들은 캐싱되어 이후의 메소드 실행이 기계 명령어를 통해 실행되도록하고 바이트코드 동작이 또 다시 번역될 필요가 없게 한다.

18.8. Virtualization Research

시스템 호환성 문제를 풀 때 최근에는 기기 가상화가 유행하게 되었다. 클라우드 컴퓨팅에서 같은 애플리케이션이 수천 개의 시스템에서 동작하는 것을 효율적으로 관리하기 위해서 이들은 가상화될 수 있다. 이 때 유니제를 풀 때 최근에는 기기 가상화가 유행하게 되었다. 클라우드 컴퓨팅에서 같은 애플리케이션이 수천 개의 시스템에서 동작하는 것을 효율적으로 관리하기 위해서 이들은 가상화될 수 있다. 이 때 유니커널 같은 프로젝트는 라이브러리 운영 체제에 세워져 이 환경들에 대한 효율성과 보안성을 개선시킨다. 현대 CPU에서 가상화 명령어는 하드웨어의 더 효율적인 사용이 아닌 프로세스에 대한 더 개선된 제어에 집중하는 새로운 가상화 연구를 일으켰다. 각 작업은 가상 기기 내에서 동작하지만 하이퍼바이저는 시스템만을 초기화시키고 작업을 수행할 뿐 계속되는 동작에는 관여하지 않는다. 각 가상 기기는 각 할당된 하드웨어를 갖고 하이퍼바이저로부터의 간섭 없이 그 하드웨어를 자유롭게 관리한다. 하이퍼바이저는 작업 동작을 간섭하지 않고 작업으로부터 호출되지 않으므로, 작업들은 실시간으로 동작할 수 있으며 더 안전하다. 이런 분할 하이퍼바이저 등에는 Quest-V, eVM, Xtratum, Siemens Jailhouse 프로젝트 등이 있다. 이들은 가상화를 통해 분리된 시스템 컴포넌트를 칩 레벨 분산형 시스템으로 분할하는 분할 하이퍼바이저이다.

18.9. Summary

  • 가상화는 게스트에 시스템의 기반 하드웨어의 중복을 제공하는 방법이다. 주어진 시스템에 복수의 게스트가 동작할 수 있으며 이 게스트 각각은 그것이 네이티브 운영 체제이며 완전한 제어를 가지고 있다고 믿는다.
  • 가상화는 IBM이 사용자를 분리하고 그들에게 IBM 중앙 컴퓨터 위에서의 고유의 실행 환경을 제공하도록 하는 방법으로서 시작되었다. 그로부터, 시스템과 CPU 성능의 발전과 혁신적인 소프트웨어 기법 덕에, 가상화는 데이터 센터 그리고 심지어 개인 컴퓨터들에서도 흔한 특성이 되었다. 그 인기로 인해, CPU 설계자들은 가상화를 지원하기 위한 특성들을 추가하였다. 가상화와 그 하드웨어 지원이 시간에 따라 증가하므로, 이 눈덩이 효과는 계속될 가능성이 높다.
  • 가상 기기 관리자 또는 하이퍼바이저는 가싱 기기를 만들고 구동한다. 타입 0 하이퍼바이저는 하드웨어 내에 구현되어 적절한 동작을 보장하기 위한 운영 체제의 수정을 필요로 한다. 어떤 타입 0 하이퍼바이저는 운영 체제가 가상화를 알고 그 실행을 보조할 수 있는 반가상화의 예를 제공한다.
  • 타입 1 하이퍼바이저는 게스트 가상 기기를 만들고, 구동하고, 관리할 수 있는 환경과 특성을 제공한다. 각 게스트는 흔히 완전한 네이티브 시스템과 연관되어 있는 모든 소프트웨어를 포함하며 이에는 운영 체제, 디바이스 드라이버, 애플리케이션, 사용자 계정 등이 있다.
  • 타입 2 하이퍼바이저는 다른 운영 체제에서 가동하는 애플리케이션으로 가상화가 발생하는 것을 알지 못한다. 이 하이퍼바이저는 하드웨어나 호스트의 지원이 없으므로 프로세스의 맥락에서 모든 가상화 활동을 수행해야 한다.
  • 프로그래밍 환경 가상화는 프로그래밍 언어의 설계의 일부분이다. 언어는 프로그램이 동작하는 포함하는 애플리케이션을 특정하고, 이 애플리케이션은 프로그램에 대한 서비스를 제공한다.
  • 에뮬레이션은 호스트 시스템이 하나의 아키텍쳐를 가지지만 게스트는 다른 아키텍쳐에 컴파일되었을 때 사용된다. 게스트가 실행하기 원하는 모든 명령어는 그 명령어 집합으로부터 네이티브 하드웨어의 기계어로 번역된다. 이 방법은 어느 정도의 성능 저하를 일으키지만, 오래된 프로그램을 호환이 안 되는 새 하드웨어에서 실행하거나 오래된 콘솔에서 설계된 게임들을 현대 하드웨어에서 실행할 수 있도록 하므로 유용하다.
  • 가상화를 구현하는 것은 까다로우며, 하드웨어 지원이 최소한도일 때 더 그렇다. 시스템에 의해 더 많은 특성이 지원될 수록, 더 쉬운 가상화가 구현 가능하며 게스트의 성능도 좋아진다.
  • 가상 기기 관리자는 CPU 스케쥴링, 메모리 관리, 입출력 모듈을 최적화할 때 하드웨어 지원이 가능한 경우 이를 이용해 게스트에게 최적의 자원 활용을 제공하면서도 가상 기기 관리자를 게스트로부터 보호하고 게스트를 다른 게스트로부터 보호한다.
  • 현대의 연구는 가상화의 사용처를 확장시키고 있다. 유니커널은 애플리케이션과 그 라이브러리, 애플리케이션이 필요로 하는 커널 자원을 가상 기기에서 구동하는 단일 주소 공간의 단일 바이너리로 컴파일함으로써 효율성을 증가시키고 보안 공격면은 감소시킨다. 분할 하이퍼바이저는 안전한 실행, 실시간 동작, 그리고 전통적으로는 맞춰진 하드웨어에서 가동되는 애플리케이션들에만 제공되던 다른 특성들을 제공한다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중