본문 바로가기

Distributed System/이론 공부

분산시스템) 가상화

Virtualization

CPU는 하나이지만 동시에 실행되고 있는 것 같은 환상을 주는 것으로 한 단계 더 확장시키면 자원을 가상화할 수 있다.

예를 들어 윈도우 머신으로 리눅스를 돌리고 싶으면 기본 OS나 하드웨어 플랫폼은 윈도우이지만 그 위에 리눅스의 역할을 흉내 낼 수 있는 가상 머신의 도움을 받아 가상으로 리눅스를 돌릴 수 있다.

1. 작동방식

Virtualization in DS

어떤 애플리케이션인 프로그램이 있는데 특정 타겟 플랫폼을 목적으로 개발이 된다. 윈도우라면 윈도우용 개발 인터페이스를 이용해서 만들어진다. A라는 인터페이스를 이용해서 개발되었고 이 프로그램은 A라는 OS에서 돌아간다. 이것을 또 다른 시스템 B에서 돌아가게 하고 싶으면 B 인터페이스를 이용해서 다시 원래 프로그램 내용을 바꾸든지 해야 한다. 그러지 말고 중간에 레이어를 하나 더 두어 A의 동작을 흉내 낼 수 있는 소프트웨어 레이어를 둔다. 이를 가상화라 한다.

단점

느리다라는 퍼포먼스의 문제가 있다.

2. History

1) Reason for introducing virtualization (1970s)

기존 개발된 소프트웨어를 다른 플랫폼에서 실행시키는 필요성이 나왔다. 그냥은 안되고 새 컴퓨터에 맞게 포팅, 즉 재개발해야 했다.

2) Changing matters (1990s)

가상화가 필요한 또 다른 문제 대두

(1) 하드웨어의 발전

프로그램은 한 번 만들어두면 계속 그 소프트웨어를 사용하는데, 소프트웨어 사용 시간에 비해 하드웨어나 OS의 발전이 빨라서 소프트웨어를 새로운 플랫폼 환경에서도 계속 사용하고자 하는 니즈가 생겼다.

(2) 네트워크의 발전

네트워크 속도 자체가 빨라지자 컴퓨팅 환경 자체를 이동시키는 생각을 하게 되었다. 원격지에서 돌리고 클라이언트는 그것을 받아서 IO만 처리하는 클라우드 컴퓨팅이 생겼다. 시스템 관리자가 관리해야 하는 서버가 여러 대가 되었고 그 서버들이 heterogeneous 하였다. 이런 식으로 관리 오버헤드가 커지면서 가상화 기술을 써서 플랫폼은 서로 다르지만 프로그램 하나를 다 돌릴 수 있는 환경이 필요해졌다.

3. Architectures of virtual machines

하드웨어의 리소스를 사용하는 애플리케이션을 만들려면 OS 단에서 제공해주는 시스템 콜 함수를 사용하여 만들어야한다. 시스템콜 함수는 라이브러리 형태로 제공된다. 아래 그림에서 회색으로 표시된 부분이 인터페이스이다. 인터페이스도 레벨이 있다.

vm architecture

1) Interfaces

Four types of interfaces that computer systems generally offer

(1) General Instrutions

하드웨어와 소프트웨어 사이의 인터페이스로 Machine instructions이 임의의 프로그램에 의해 호출될 수 있다. 즉 애플리케이션이 직접 호출할 수 있다.

(2) Privileged Instructions

하드웨어와 소프트웨어 사이의 또 다른 인터페이스로 privileged programs인 OS가 사용하는 것이다.

(3) System Calls

OS가 애플리케이션 영역에 제공해주는 시스템 콜 인터페이스이다.

(4) Library Functions

In many cases, the aforementioned system calls are hidden by an API

  • The essence of virtualization
  • To mimic the behavior of these interfaces

가상화의 핵심은 다른 인터페이스의 동작을 흉내 내게끔 하는 것이다.

2) Process virtual machine

회색으로 되어있는 부분이 가상화 레이어이다. 원래 이 플랫폼에서 돌아가는 host OS가 있고 그 호스트 os 위에서 가상화 레이어가 덧씌워지는 형태이다. Runtime system 또한 기존 OS 위에서 돌아가는 일종의 애플리케이션이고 다른 OS의 동작을 흉내 내는 애플리케이션이다.

다른 플랫폼에서 돌아가는 애플리케이션을 실행하는데 필요한 추상화된 instruction을 제공한다. 대표적인 예로 자바가 있다. Java Runtime이 가상 머신이고 자바 프로그램은 자바 가상머신 위에서 돌아간다. 일종의 emulator 개념이라고 보면 된다. 에뮬레이터는 시스템 콜 함수의 동작을 모방한다.

process virtual machine

3) Virtual Machine Monitor (VMM)

VMM이라는 가상머신 레이어가 하드웨어 전체를 shielding 한다. 하드웨어 리소스를 직접 사용해서 하드웨어와 OS/어플리케이션 레이어 사이에 위치한다. 하드웨어를 직접 제어하고 VMM 위에 OS나 애플리케이션을 실행시킬 수 있다.

 

하드웨어 전체를 제어할 수 있는 인터페이스를 제공하고 그 위에서 여러 OS를 설치할 수 있다. 하드웨어를 직접 access 할 수 있으므로 성능은 비교적 더 좋다. 대표적인 예로 VMware가 있는데 일반적인 VMware는 Process virtual machine 형태로 돌아가지만 VMM 버전도 있다.

VMM

구현하기는 더 어렵지만 더 중요해질 수 있다. 확장 가능성이 있다. 분산 시스템에서의 신뢰성(reliability)이나 보안(security)을 강화하는데 도움이 될 수 있다.

(1) Security

  • Isolation
    특정 OS에 문제가 생겼을 때 그 부분만 제거하고 다시 설치하면 된다. 다른 OS가 설치된 부분에는 영향을 주지 않는다.
  • Portability
    하드웨어와 소프트웨어 사이의 분리를 더 쉽게 할 수 있다. VMM 위에서 OS까지 포함한 애플리케이션 시스템 환경 자체가 돌아가고 있다. 따라서 극단적인 경우 이 컴퓨터의 하드웨어 문제가 생겼을 때 다른 하드웨어를 마련하고 해당 하드웨어에 VMM만 있으면 기존에 사용하던 OS를 포함한 시스템 환경을 새로운 환경으로 옮길 수 있다는 의미이다. 단순히 애플리케이션이나 데이터만 옮기는 것이 아니고 사용하던 컴퓨터 환경 자체를 옮길 수 있다.