하이퍼바이저

포스트: 13
Tags

Posts

13 posts

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

Guillermo Austin Kim|2022년 2월 11일

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

[Arm프로세서] 하이퍼바이저: HCR_EL2 레지스터에 접근하는 명령어

Guillermo Austin Kim|2022년 2월 8일

HCR_EL2 레지스터를 구성하는 비트 맵 정보를 파악하면 "이 비트를 어떻게 설정할 수 있을까?"란 의문이 생길 수 있습니다. Armv8 아키텍처에서는 HCR_EL2 레지스터의 값을 읽고 쓸 수 있는 명령어를 제공합니다. HCR_EL2 레지스터의 값을 읽기 위해서 다음과 같은 형식의 명령어를 실행하면 됩니다. 그림 12.4 HCR_EL2 레지스터를 읽는 MRS 명령어 그림 12.4는 HCR_EL2 레지스터의 값을 Xt 레지스터로 로딩하는 명령어입니다. 위 그림에서 보이는 는 Armv8 아키텍처에서 정의된 범용 레지스터를 뜻합니다. x0, x1, x2와 같은 레지스터가 지정될 수 있습니다. 이 명령어로 HCR_EL2 레지스터의 어떤 비트가 활성화돼 있는지 알 수 있습니다. mrs

[Arm프로세서] 하이퍼바이저: wfe/wfi 명령어

Guillermo Austin Kim|2022년 1월 28일

많은 개발자들은 hvc 명령어를 통해서만 EL1에서 EL2로 진입할 수 있다고 알고 있습니다. 사실 그렇지는 않습니다. 게스트 OS에서 하이퍼바이저로 진입하는 다른 방법은 wfe와 wfi 명령어를 실행하는 것입니다. 원래 wfe와 wfi 명령어는 Arm 코어가 저전력 모드(low-power mode)으로 실행될 수 있게 동작합니다. HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 EL2 트랩이 유발되어, EL2로 진입합니다. 시스템에 하나의 운영체제가 존재하는 환경에서는 wfe, wfi 명령어는 저전력 모드용으로 실행되나, 하이퍼바이저와 같이 시스템에 2개 이상의 운영체제가 실행되는 환경에서, HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 hvc 명령어처럼 EL2로

[Arm프로세서] 하이퍼바이저: hvc 명령어(하이퍼바이저 콜)

Guillermo Austin Kim|2022년 1월 26일

먼저 Arm 스팩 문서에서 HVC 명령어를 설명한 부분을 소개합니다. C6.2.94 HVCHypervisor Call causes an exception to EL2. Software executing at EL1 can use this instruction to call the hypervisor to request a service. 스팩 문서의 내용은 다음과 같이 해석할 수 있습니다.  하이퍼바이저 콜은 EL2로의 익셉션을 유발한다. EL1에서 실행되는 소프트웨어는 이 명령어(hvc)를 사용해 하이퍼바이저에게 어떤 서비스를 요청한다. EL1에서 hvc 명령어를 실행해 하이퍼바이저가 구동되는 EL2로 진입하는 동작을 하이퍼바