가상 기계 (Virtual Machine)
1. 가상 기계란?
운영체제 구조의 계층적 접근 방법은 많은 발전을 거듭하다가 결국 가상 기계의 개념이라는 논리적인 결론에 이르게 된다.
(계층적 접근 방법을 포함한 운영체제 구조에 대한 내용: <http://neos518.tistory.com/118?category=804546> )
가상 기계의 기본적인 착상은 한 컴퓨터의 하드웨어를 다수의 다른 실행 환경으로 추상화하는 것이다. 그리하여 각각의 개별적인 실행 환경이 자신만의 독립된 컴퓨터를 사용한다는 환상을 가지게 만든다.
물론, 일반적으로 프로세스는 순수한 하드웨어(bare machine)에 의해서 제공되지 않는 시스템 호출이나 파일 시스템과 같은 부가적인 기능을 가지고 있다. 반면에, 가상 기계는 어떤 부가적인 기능을 제공하는 것이 아니라 아래에 깔려 있는 순수한 하드웨어와 동일한 인터페이스를 제공한다. 즉, 각 프로세스마다 아래에 깔려 있는 컴퓨터의 (가상적인) 복사본이 제공된다.
가상 기계를 만드는 데에는 많은 이유가 있다. 그러나 그 모든 이유들은 공통적으로 단일 하드웨어를 통해서 다수의 다른 실행 환경(즉, 운영체제)을 동시에 실행시킬 수 있다는 점과 관련이 있다.
가상 기계를 이용한 구조에서 가장 신경 써야 할 부분은 디스크 시스템이다. 실제 기계는 3개의 디스크 드라이브를 가지고 있으나 7개의 가상 기계를 지원하기를 원한다고 가정하자. 그렇다면 분명히, 각 가상기계에 디스크 드라이브를 하나씩 제공할 수 없을 것이다. 설상가상으로, 가상 기계 소프트웨어 자체가 가상 메모리와 스풀링(spooling - 인쇄관련 소프트웨어인 스풀러를 위한 저장 공간을 채우는 작업)을 제공하기 위해서는 대량의 디스크 공간이 필요하다.
이 문제에 대한 해결책으로 제시된 것이 크기만 다르고 나머지는 모든 면이 동일한 가상 디스크를 제공하는 것이다.
2. 가상 기계의 구현 (VM Implementation)
가상 기계 개념이 비록 유용하기는 하지만 구현하기가 어렵다. 저변에 있는 기계의 정확한 복제품을 제공하는 기능을 구현하는 것이 꽤나 까다롭기 때문이다. 알다시피, 저변의 하드웨어는 사용자 모드와 커널 모드를 제공한다. 가상 기계는 기본적으로 사용자 모드에서만 실행될 수 있다. 그러나, 가상 기계 위에서 돌아가는 운영체제는 필요에 따라서 커널 모드에서 실행될 수 있어야 한다. 다시 말해, 물리적인 기계와 마찬가지로 가상 기계도 이중 모드를 제공할 수 있어야 한다.
간단히 정리하자면, 가상 기계 자체는 물리적인 사용자 모드 상에서 실행되어야 한다. 다만, 가상 기계는 가상의 이중 모드를 제공해서 그 위에서 돌아가는 운영체제가 가상의 사용자 모드와 가상의 커널 모드 사이에서 모드 변경을 할 수 있게 해줘야만 한다.
이 가상의 모드 변환은 다음과 같은 방식으로 이루어질 수 있다. 예를 들어, 가상 기계의 가상 사용자 모드에서 실행 중인 프로그램이 시스템 호출을 하면 이는 실제 기계 내의 가상 기계 모니터로 전달되게 된다. 가상 기계 모니터가 제어를 얻으면 시스템 호출의 효과를 흉내내기 위해 가상기계의 레지스터 내용과 프로그램 카운터를 변경할 수 있다. 그 다음, 가상 기계 모니터는 가상 기계를 다시 시작 시킨다. 이때 재시작 되는 가상 기계는 가상 커널 모드 상태이다.
위의 이미지는 가상 기계 구조와 일반 컴퓨터 구조의 차이를 보여준다. 왼쪽이 가상 기계를 사용하지 않은 일반적인 컴퓨터에서의 구조이고, 오른쪽이 가상 기계의 구조이다. 가상 기계 구조에서는 하드웨어 위에 운영체제가 아닌 가상 기계 모니터가 돌아가게 되고, 그 위로 가상 기계들이 작동하게 된다.
3. 가상 기계의 장점
가상 기계 개념은 몇 가지 장점을 가지고 있다. 그 중에서도 가장 큰 장점이라면 역시 시스템 자원 보호에 대한 부분을 꼽을 수 있을 것이다. 이 가상 기계 환경에서는 여러 가지 시스템 자원에 대해 완전한 보호가 이루어진다. 각 가상기계는 다른 모든 가상 기계로부터 완전히 격리되기 때문이다.
그러나 동시에 가상 기계들은 자원을 직접 공유할 수 없다. 이 문제를 해결하기 위해서 두 가지 해결책이 등장하였다.
첫 번째는 가상 디스크(가상 기계에 할당되는 디스크 - 미니 디스크라고도 불리운다)를 공유하는 것으로, 결과적으로 파일을 공유하게 된다. 이 기법은 물리적으로 디스크를 공유하는 방식을 본뜬 것이지만, 소프트웨어로 구현된다.
두 번째는 가상 기계들이 네트워크를 구성하게 하는 것이다. 이 방식을 사용하게 되면, 각각의 가상 기계는 가상 통신 네트워크를 통해 정보를 보낼 수 있다. 물론 물리적인 네트워크 방식을 본뜨지만, 이 역시 모두 소프트웨어로 구현된다.
가상 기계 시스템은 운영체제 연구와 개발을 위한 완벽한 도구이다. 일반적으로 운영체제를 수정하는 것은 어려운 작업이다. 운영체제는 크고 복잡한 프로그램이므로, 한 부분을 수정할 경우 그로 인해 다른 부분에 보이지 않는 오류를 초래하지 않는다는 것을 보장하기가 어렵다. 이러한 상황은 운영체제의 능력 때문에 특히 위험할 수 있다. 운영체제가 커널 모드에서 실행되기 때문에 포인터 하나를 잘못 수정하면 전체 파일 시스템을 파괴하는 오류를 초래할 수 있다. 따라서 운영체제의 모든 수정은 면밀한 검사가 필요하다.
그러나 운영체제는 전체 기계 상에서 실행되고 전체 기계를 제어하는 프로그램이다. 그러므로, 변경하고 검사하는 동안에는 시스템이 반드시 정지되어 사용되지 않아야 한다. 이 기간을 일반적으로 시스템 개발 시간이라 한다. 이 경우 사용자가 시스템을 이용하지 못하기 때문에 시스템 개발 시간은 종종 시스템 부하가 적은 늦은 밤이나 주말에 하도록 예약된다.
가상 기계 시스템은 이러한 문제점을 대부분 제거할 수 있다. 각 시스템 프로그래머에게는 그들 자신의 가상 기계가 주어지고, 시스템 개발은 물리적인 기계 대신에 가상 기계 상에서 행해진다. 시스템 개발을 위해 정규 시스템 동작을 중단할 필요가 거의 없어지는 것이다.
'OS > OS - Overview' 카테고리의 다른 글
운영체제 구조 (0) | 2018.10.01 |
---|---|
운영체제 설계 및 구현 (0) | 2018.10.01 |
하드웨어 타이머 (Hardware Timer) (0) | 2018.09.24 |
운영체제 이중 동작 모드 (OS dual-mode operation) (2) | 2018.09.24 |
입출력 구조 (0) | 2018.09.20 |