TIL/2025

Overview of Armv8-R AArch32, Cortex-R52

고무 오리 2025. 4. 28. 18:32
728x90
📢 업무를 하며 Cortex-R52 Architecture에 대해 알아봐야해서 Armv8-R AArch32를 알아봤어요

 

 

 

 

Armv8-R AArch32의 등장

2013년 Virtualization 기능을 탑재한 Armv8-R AArch32가 등장 했어요

R 시리즈는 실시간성 보장, 낮은 latency를 요구하는 시스템에서 효율적인 제어를 할 수 있어요

 

 

권한 레벨

안전한 시스템 동작을 위해 존재해요

Application은 PL0 권한을 가져 직접적인 시스템 자원 접근에 제한이 있죠

                      Decreasing privilege ↑
            +-------------------+
            |       Tasks       |  PL0
            +-------------------+
            |       RTOS        |  PL1
            +-------------------+
            |     Hypervisor    |  PL2
            +-------------------+
                      Increasing privilege ↓

 

Level of privilege: PL0 < PL1 < PL2

  • PL0 : Tasks
  • PL1 : Guest OS (RTOS)
  • PL2 : Hypervisor

각각은 Execption Level의 EL0, EL1, EL2와 대응되는 것 같아요

 

 

Virtualization

가상화는 여러 VMs가 같은 물리 머신 위에서 동작하게 해줘요

하나의 프로세서에서 여러 OS를 격리 실행하여 자원 활용률을 높이고 안전성을 확보하기 위해 사용하죠

                     VM1              VM2
                +------------+    +------------+
            PL0 |   Task     |    |   Task     |
                +------------+    +------------+
            PL1 |   RTOS     |    |   RTOS     |
                +------------+    +------------+
                +------------------------------+
            PL2 |           Hypervisor         |
                +------------------------------+

 

PL2(EL2)에서 동작하는 SW인 Hypervisor는 VMs를 스케줄링하고 생성하는 책임을 가져요

 

Hypervisor는...

  • Guest OS(VM, PL1)에서 레지스터 제어를 하면 Trap이 발생하며 Hypervisor(PL2)로 제어권이 넘어가고 동작을 emulation 해요 (Trap and Emulate)
  • Stage2 MPU를 통해 hypervisor가 Guest OS의 허용되지 않은 메모리 주소 접근을 막아줘요
  • Virtual Interrupt 지원을 통해 Hypervisor가 인터럽트를 각 VM으로 전달 할 수 있게 해줘요 (vGIC)

 

 

Memory Protection Unit (MPU)

Armv8-R AArch32는 PMSA를 구현했기 때문에 메모리 보호를 위한 Stage1/Stage2 MPUs를 제공해요

pCPU 별로 EL1, EL2 용 MPU가 존재하는거에요

 

이를 Two stage memory protection이라고 부르죠

  • Stage1 MPU 설정은 VM 내 RTOS(Guest OS)가 해요, VM 내부 Task가 메모리 자원에 접근할 때 올바른지 확인하죠
  • Stage2 MPU 설정은 Hypervisor가 해요, VM 자체가 메모리 Region에 올바르게 접근했는지 확인해요

Two stage memory protection

 

MPU 설정은 pCPU 별 register 설정을 통해 할 수 있어요

  • EL1 MPU register는 EL1에서 접근 가능하죠
  • EL2 MPU register는 EL2에서 접근 가능해요
  • 각 Region 마다 Base와 Limit를 기준으로 메모리 구간을 정의하고, R/W권한·실행금지·메모리속성·캐시·쉐어 속성을 설정 해요

 

Stage1 : Guest OS 내 Task 간 메모리 보호

Guest OS(EL1)는 Task를 생성할 때, 각 Task에 대한 MPU Region 설정 정보를 정적으로 구성해둬요

vCPU위에서 특정 Task가 실행되면 Guest OS는 해당 Task의 mpu region 정보를 pCPU의 mpu register에 설정해요

만약 Task 전환(context switching)이 발생하면 다음 Task의 mpu region 정보를 pCPU의 mpu register에 덮어씌우죠

Task(vCPU) 별 mpu region

 

Stage2 : VM 간 메모리 보호

Hypervisor(EL2)가 각 VM이 시스템 전체 물리 메모리 중 허용된 영역만 접근하도록 제한해

ARMv8-R 아키텍처는 표준 Stage-2 MMU 대신 MPU 기반 보호를 사용하며, Hypervisor는 VM마다 접근 가능한 메모리 영역 정보를 소프트웨어적으로(또는 벤더 확장을 통해) 관리해요

 

같은 VM 내 vCPU들은 동일한 Stage-2 MPU 영역 구성을 공유하며, 이 설정은 소프트웨어에서 Context 형태로 유지하는거죠

즉, Hypervisor는 vCPU가 스케줄링될 때 해당 VM의 MPU Context를 pCPU의 하드웨어 MPU 레지스터에 실시간으로 로드하여 시스템 메모리 보호를 수행 하는거에요

 

Armv8-R AArch32는 Armv8-R AArch64와 달리 MMU나 VMSA는 없고 오직 MPU만 있어요

(MMU는 가상 주소 변환 과정 때문에 overhead가 크니 latency 만족이 까다롭죠)

 

 

Generic Interrupt Controller (GIC)

Interrupt를 처리하는 Generic Interrupt Controllers(GIC)는 GICv3 Architecture를 사용해요

 

 

Reference

모두 Arm 공식 Document에서 발췌한 내용이에요

https://developer.arm.com/documentation/DEN0130/0100/Armv8-R-AArch32?lang=en

https://developer.arm.com/documentation/109997/100/The-Memory-Protection-Unit?lang=en

 

 

728x90