그런데 오픈 소스 기반으로 개발되고 있는 하이퍼바이저가 있는데 그 중에서 가장 많이 사용되는 하이퍼바이저는 XEN입니다. XEN은 오픈 소스 프로젝트라서 누구나 XEN 하이퍼바이저의 코드를 내려받아 빌드해 실행할 수 있습니다. XEN에 대한 소개는 다음 홈페이지에서 확인할 수 있습니다.
https://xenproject.org/
이번 절에서는 Armv8 아키텍처에서 실행되는 XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드를 분석합니다. 코드 분석을 통해 하이퍼바이저를 지원하기 위해 사용되는 레지스터와 명령어를 분석하고, 게스트 Exit 관점 중심으로 하이퍼바이저의 동작을 설명합니다.
[정보]
XEN 하이퍼바이저는 오픈 소스 프로젝트라 누구나 소스를 빌드해 실행하고 XEN 프로젝트에 컨트리뷰션(기여)를 할 수 있습니다. 그런데 대부분 상용 소프트웨어 업체가 개발하는 하이퍼바이저는 오픈 소스 프로젝트가 아닙니다. 해당 업체 개발자가 아니면 소스 코드를 볼 수 없죠. 그래서 학생들이나 대학 연구소에 소속된 개발자는 하이퍼바이저의 동작 방식을 소스 분석을 통해 파악할 수 없습니다.
그런데 상용 하이퍼바이저 업체의 소프트웨어 개발자들은 XEN 하이퍼바이저의 코드를 많이 벤치마크하는 경우가 많습니다. XEN 하이퍼바이저의 코드를 분석한 후 적절히 XEN 하이퍼바이저의 코드를 가져온 다음에 자신만의 하이퍼바이저 스팩에 따라 커스터마이즈하는 방식으로 개발합니다. 예를 들어 EL1에서 hvc 명령어를 실행할 때 적절한 아규먼트를 X0--X5 레지스터에 전달하는 방식으로 세부적인 처리를 하도록 시스템을 구성할 수 있습니다.
예를 가상 CPU(VCPU)를 처리하기 위해서 X0 레지스터에 0x0, 가상 인터럽트를 전달하기 위해서는 X0 레지스터에 0x1을 지정해 hvc 명령어를 실행할 수 있습니다.
하이퍼바이저 개발자는 게스트 OS에서 하이퍼바이저에 진입하는 인터페이스까지 함께 개발하는 경우가 많습니다. 그렇다면 하이퍼바이저에서 가장 많이 구동되는 게스트 OS는 무엇일까요? 바로 리눅스입니다. 리눅스 커널 개발자가 하이퍼바이저를 함께 개발하는 경우가 많습니다.
최근 덧글