-
Hypervisor(하이퍼바이저)란?SE Concepts 2023. 11. 15. 00:37반응형
넓은 관점에서, 하이퍼바이저는 리소스의 최종 결정권자입니다. 개념적으로는 물리적인 서버와 서버에서 실행되는 가상 머신(virtual machine)의 중간에 존재하는 소프트웨어 later로 존재하는데요.
하이퍼바이저는 리소스 할당 뿐만 아니라 가상 환경, 가상 네트워크, 클러스터링 등을 기반해 동작하는 가상 머신에 제공해줍니다.
정확히 이해하기 위해서는 무엇보다도 그 이름의 히스토리를 살펴보는게 좋은데요. 초기에 가상 머신 모니터(Virtual machine monitor)가 특정 목적을 위해 생성되었습니다. 그것이 더욱 발전해서 가상 머신 매니저(Virtual machine manager)로 불리게 되었습니다. 이후 VMM 대신에 지금의 하이퍼바이저라는 이름으로 부르게 되었습니다.
초기에 엔지니어들이 풀려고 했던 문제는 리소스 할당에 관한 문제였습니다. 당시 운영체제는 supervisors라고 불리고 있었고, 리소스 할당 문제를 풀려고 만든 코드는 supervisors를 대신할 수 있어서 hypervisor라고 부르게 되었습니다.
하이퍼바이저의 종류
하이퍼바이저는 크게 Type1, Type2라는 2가지 종류가 존재합니다.
Type1
타입1은 기반한 운영체제 없이 서버 하드웨어 위에서 직접 동작합니다. bare-metal로도 불리는 이 구조는 중간(하이퍼바이저 - 하드웨어)에 다른 레이어가 없기에 타입2에 비해 성능적으로 우수합니다.
성능적으로 우수한 부분 외에도, 타입2보다 더 보안적으로 뛰어나다고 평가되고 있습니다. 타입1 구조에서는 하이퍼바이저가 명확하게 하드웨어와 관련된 처리를 일임하기에, 한 가상 머신에서 다른 가상 머신으로 접근하거나 권한을 넘는 접근은 차단되게 됩니다.
Type2
타입2는 그 자체가 기존 운영체제 위에서 동작하는 애플리케이션입니다. 그렇기에 빠르게 제작하기 쉬웠고, 가장 처음 출시된 것도 타입2 하이퍼바이저입니다.
이 구조의 한 가지 장점은 넓은 범위의 운영체제를 지원할 수 있다는 점입니다. 기존의 운영체제가 제공하는 기능을 이용하기에 설치 및 배포도 쉽습니다.
반대로 가상 머신이 디스크 읽기, 네트워크 수행, 하드웨어 인터랙션 등을 처리할 때 게스트 OS로 받은 요청을 하이퍼바이저는 기반한 운영체제로 전달합니다. 이후 하드웨어에서 수행하고 받은 응답을 운영체제는 다시 하이퍼바이저에게 전달하고, 하이퍼바이저는 게스트 OS에 전달합니다. 그렇기에 2 단계가 추가적으로 수행되며 그만큼 성능의 저하를 가져오게 됩니다.
또한, 기반한 운영체제 가용성에 영향을 주는 모든 요소들은 기반한 하이퍼바이저 그리고 가상 머신에 영향을 주기에 타입1에 비해 낮은 신뢰성을 가집니다.
하이퍼바이저의 역할
먼저 하이퍼바이저는 각 게스트에게 실제 물리 머신에서 동작하는 것과 같은 추상화를 제공(abstract the hardware)해줍니다. 각 게스트는 물리 머신에서와 동일하게 하드웨어에 접근하며 이는 중간의 하이퍼바이저가 받아서 실제 물리 머신에 요청을 하여 처리하게 됩니다.
그렇기에 중간의 하이퍼바이저는 여러 게스트에서 발생하는 요청을 중간에서 conflict이 없이, 최대한 효율적으로 처리해야합니다 (traffic control).
또한, 하나의 물리 리소스를 여러 게스트가 공유하여 사용하되 각 게스트는 독립된 실제 물리 머신을 사용하는 것과 같도록 리소스를 구획하고 할당을 관리하는 기능을 담당합니다 (resource allocation).
Reference
[1] Virtualization Essentials
[2] https://zbvs.tistory.com/29
[3] https://rayanfam.com/topics/hypervisor-from-scratch-part-1/
[4] https://revers.engineering/day-2-entering-vmx-operation
반응형'SE Concepts' 카테고리의 다른 글
백엔드 개발자를 위한 네이티브 모바일 앱의 특징 (0) 2023.12.12 가상 머신(Virtual Machine)이란? (0) 2023.11.16 어니언 라우팅(Onion routing)이란? (0) 2022.07.03 Two-Phase Commit이란? (2PC) (0) 2021.10.07 분산처리엔진이란? (Distributed Execution Engine) (0) 2021.08.29 Red-Black Tree란? (1) 2021.08.22 리눅스(Linux) 기초 개념 (0) 2021.05.29 대규모 시스템에서 발생하는 데이터 처리 (feat. 패스트캠퍼스 온라인 'THE RED : 4천만 MAU를 지탱하는 서비스 설계와 데이터 처리 기술') (0) 2021.05.19