Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] XEN 하이퍼바이저: 익셉션 핸들러 코드 소개

Guillermo Austin Kim|2022년 2월 15일

운영체제나 RTOS 커널의 세부 동작을 파악하려면 익셉션이 유발되면 처리되는 익셉션 벡터 핸들러를 잘 알아야 합니다. 익셉션 벡터 핸들러의 코드를 보면 Armv8 아키텍처에서 정의된 스팩에 따라 익셉션 벡터 핸들러가 구현됐다는 사실을 알 수 있습니다. XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드도 예외는 아닙니다. 게스트 OS와 하이퍼바이저와 통신하는 주요 인터페이스가 XEN 하이퍼바이저의 익셉션 벡터 핸들러이니 잘 익혀둘 필요가 있습니다. 익셉션 핸들러 코드 소개 포스트에서 분석할 XEN 하이퍼바이저의 익셉션 벡터 핸들러 전체 어셈블리 코드를 소개합니다. 1 000000000026a800 :2 26a800:17fffc00 b269800 &lt

[Arm프로세서] XEN 하이퍼바이저 소개

Guillermo Austin Kim|2022년 2월 14일

그런데 오픈 소스 기반으로 개발되고 있는 하이퍼바이저가 있는데 그 중에서 가장 많이 사용되는 하이퍼바이저는 XEN입니다. XEN은 오픈 소스 프로젝트라서 누구나 XEN 하이퍼바이저의 코드를 내려받아 빌드해 실행할 수 있습니다. XEN에 대한 소개는 다음 홈페이지에서 확인할 수 있습니다.  이번 절에서는 Armv8 아키텍처에서 실행되는 XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드를 분석합니다. 코드 분석을 통해 하이퍼바이저를 지원하기 위해 사용되는 레지스터와 명령어를 분석하고, 게스트 Exit 관점 중심으로 하이퍼바이저의 동작을 설명합니다. [정보]XEN 하이퍼바이저는 오픈 소스 프로젝트라 누구나 소스를 빌드해 실행하고 XEN 프로젝트에 컨트리뷰션(기여)를 할 수 있습니다. 그런데 대부분 상용 소프

[Arm프로세서] XEN 하이퍼바이저 코드 리뷰

Guillermo Austin Kim|2022년 2월 14일

지금까지 하이퍼바이저와 관련된 Arm 아키텍처의 세부 내용을 살펴봤습니다. 하이퍼바이저는 Arm 아키텍처 기반 위에서 실행된다는 사실을 알 수 있습니다. 스팩의 내용을 충분히 숙지하면 "하이퍼바이저의 소스 코드를 직접 분석하면서 하이퍼바이저의 동작 원리를 파악할 수 있을까?"란 의문이 생길 겁니다. 그런데 대부분 하이퍼바이저는 주요 소프트웨어 업체가 상용 제품으로 개발하는데 소스 코드가 공개돼 있지 않습니다. 이게 하이퍼바이저를 배우는 과정에서 만나는 가장 큰 걸림돌 중 하나입니다. 직접 소스 코드를 분석하면서 배운 내용이 어떤 방식으로 구현됐는지를 파악하는게 지름길 중의 하나입니다.

[Arm프로세서] 하이퍼바이저 관점의 익셉션 벡터 테이블 분석하기

Guillermo Austin Kim|2022년 2월 11일

이전 절에서 익셉션 벡터 테이블의 스팩을 분석했습니다. 이어서 EL2가 실행되는 하이퍼바이저 관점에서 익셉션 벡터 테이블을 분석하겠습니다. 다음은 하이퍼바이저가 실행되는 EL2에서 본 익셉션 벡터 테이블의 동작 방식을 나타낸 표입니다. 표 12.2 하이퍼바이저 관점에서 본 익셉션 벡터 테이블 'EL2 with SP_EL0' 열의 내용을 분석하겠습니다. 'EL2 with SP_EL0'은 익셉션 레벨에 상관없이 스택을 설정하는 조건에서 실행되는 익셉션의 종류 별 오프셋을 나타냅니다. 그런데 일반적으로 대부분의 하이퍼바이저에서 지원하지 않습니다. [정보]XEN 하이퍼바이저에서는 'EL2 with SP_EL0' 익셉션을 지원하지 않습니다. 이어서 'EL2에서 발생'로 표기된 부분을 보겠습니다. 0x

[Arm프로세서] 하이퍼바이저 관점으로 익셉션 벡터 테이블 스팩 문서 확인

Guillermo Austin Kim|2022년 2월 11일

Armv8 아키텍처는 하이퍼바이저를 지원하기 위해 다양한 기능을 제공합니다. 이전 절에서 살펴 본 HCR_EL2 레지스터와 hvc, wfe, wfi와 같은 명령어가 가장 큰 예입니다. Armv8 아키텍처 관점으로 하이퍼바이저가 어떤 방식으로 동작하는지 파악하려면 알아야 하는 기능들이 있습니다. 이 중에 가장 중요한 내용은 바로 하이퍼바이저의 익셉션 벡터 핸들러입니다. 이번 절에서는 하이퍼바이저가 구동되는 EL2 관점으로 익셉션 벡터 테이블을 분석하고, XEN 하이퍼바이저의 익셉션 벡터 핸들러의 코드를 분석합니다.먼저 Armv8 아키텍처에서 정의한 익셉션 벡터 테이블 스팩을 보겠습니다. 그림 12.6 Armv8 아키텍처의 익셉션 벡터 테이블