앞에서 2개 이상의 운영체제를 동시다발적으로 실행할 수 있는 플랫폼이나 아키텍처를 하이퍼바이저라고 소개했습니다. 이어서 다음 그림을 보면서 하이퍼바이저 아키텍처를 구성하는 주요 기능에 대해 알아봅시다. 

 

 

 

 

 

 

 

 

 

 

 

 


그림 15.3 하이퍼바이저 아키텍처의 전체 구조

위 그림의 가운데 윗부분에 표시된 게스트 OS 1, 게스트 OS 2는 하이퍼바이저에서 실행되는 운영체제입니다. 게스트 OS 1이 안드로이드, 게스트 OS 2는 리눅스가 될 수 있습니다. 

그런데 게스트 OS 1와 게스트 OS 2에서 실행되는 운영체제는 각각 독립적인 EL0와 EL1에서 실행됩니다. 게스트 OS 1의 커널은 EL1, 게스트 OS 1의 애플리케이션은 EL0에서 실행됩니다. 마찬가지로 게스트 OS 2의 커널은 EL1, 게스트 OS 2의 애플리케이션은 EL0에서 실행됩니다.

---
[정보] 가상 머신과 게스트 OS 

하이퍼바이저를 설명하는 다른 기술 문서에서는 가상 머신으로 표기하는데, Arm 스펙 문서에서는 주로 게스트 OS라고 표기합니다. 둘 다 같은 의미입니다.
---

이어서 그림의 아래에 ‘하이퍼바이저’라고 표시된 부분은 하이퍼바이저를 나타내며 EL2에서 실행됩니다. 하이퍼바이저는 여러 게스트 OS가 동시다발적으로 실행될 수 있도록 다음과 같은 역할을 수행합니다. 

 각각 게스트 OS를 로딩(부팅 과정)
 게스트 OS와의 통신
 게스트 OS의 리소스(가상 CPU, 가상 인터럽트) 관리

이어서 그림에서 ②로 표시된 부분을 보겠습니다. 게스트 OS의 EL1에서 실행되는 커널에서 HVC 명령어를 실행하는 것은 EL1에서 EL2로 진입하는 동작을 나타내며, 이는 ①로 표시된 "EL0에서 SVC 명령어를 실행해 EL1으로 진입하는 과정"과 유사합니다.

누군가 "게스트 OS(가상 머신)와 하이퍼바이저는 어떻게 통신할까?"라고 질문하면 다음과 같이 답할 수 있습니다.  

EL0에서 SVC 명령어를 실행하면 슈퍼바이저 콜을 통해 EL1으로 진입하듯이, EL1에서 HVC 명령어를 실행하면 하이퍼바이저 콜을 통해 하이퍼바이저가 구동되는 EL2로 진입한다.

사실 ②로 표시된 부분이 하이퍼바이저를 이해하기 위해 가장 먼저 알아야 하는 동작입니다. 

여기까지 하이퍼바이저를 구성하는 요소를 소개했습니다. 이어서 하이퍼바이저를 왜 알아야 하는지 설명하겠습니다.

---
[정보] 하이퍼바이저가 실행하는 게스트 OS의 개수

그림 15.3은 하이퍼바이저의 예시 중 하나입니다. 하이퍼바이저에는 하나의 시스템에 2개 이상의 게스트 OS가 구동될 수 있는데, 개발하려는 제품의 스펙에 따라 3 ~ 5개의 운영체제가 게스트 OS로 실행될 수 있습니다.

---

 

 

< '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 저자>

<강의 영상>

 

+ Recent posts