ARMv8-A의 **Exception Level (EL)**은 소프트웨어 실행 권한을 계층적으로 나누는 개념으로, 시스템의 보안 및 관리 목적으로 설계되었습니다. ARMv8-A는 두 가지 실행 상태인 AArch32(32비트)와 AArch64(64비트)를 지원하며, Exception Level은 이 두 상태 모두에서 작동합니다. 아래에서 AArch32와 AArch64 각각의 Exception Level에 대해 자세히 설명하겠습니다.
Exception Level 개요
ARMv8-A는 총 4개의 Exception Level을 정의합니다:
- EL0: 사용자 애플리케이션 (최하위 권한)
- EL1: 운영 체제 커널 (e.g., Linux 커널)
- EL2: 하이퍼바이저 (e.g., KVM 가상화)
- EL3: 펌웨어 및 보안 모니터 (e.g., TrustZone Secure Monitor)
숫자가 높아질수록 권한이 증가하며, EL3은 가장 높은 권한을 가집니다. 각 Exception Level은 고유한 레지스터 집합과 스택 포인터를 가지며, 예외 처리 시 특정 레벨로 전환됩니다
AArch64의 Exception Level
AArch64는 ARMv8-A에서 새롭게 도입된 64비트 실행 상태입니다. 이 상태에서는 A64 명령어 세트를 실행하며, 64비트 범용 레지스터를 사용합니다. AArch64에서의 Exception Level 동작은 다음과 같습니다:
- EL0: 사용자 애플리케이션이 실행됩니다.
- EL1: 운영 체제 커널이 실행됩니다.
- EL2: 하이퍼바이저가 실행되며, 가상화 환경을 관리합니다.
- EL3: 보안 모니터가 실행되며, Secure와 Non-secure 상태 간 전환을 처리합니다.
예외 발생 시, 프로세서는 현재 실행 중인 EL에서 더 높은 EL로 전환되며, 복귀 시 원래 EL로 돌아갑니다. 예를 들어, EL0에서 실행 중인 애플리케이션이 시스템 호출(SVC)을 하면 EL1으로 전환됩니다
AArch32의 Exception Level
AArch32는 ARMv7과의 하위 호환성을 위해 ARMv8-A에 포함된 32비트 실행 상태입니다. 이 상태에서는 기존 ARM(또는 A32) 및 Thumb(T32) 명령어 세트를 실행합니다. AArch32에서의 Exception Level 동작은 다음과 같습니다:
AArch64와 AArch32 간 전환
ARMv8-A에서는 AArch64와 AArch32 간 전환이 가능합니다. 그러나 이러한 전환은 예외 경계를 통해서만 이루어질 수 있습니다:
- 예외 발생 시 AArch32에서 AArch64로 변경 가능.
- 복귀 시 원래 상태(AArch32 또는 AArch64)로 유지.
예를 들어, 64비트 운영 체제(OS)가 32비트 애플리케이션을 지원하려면 EL0에서 AArch32로 전환해야 하며, OS로 복귀할 때 다시 AArch64로 전환됩니다
요약
- ARMv8-A는 EL0~EL3의 4단계 Exception Level을 제공하며, 이는 소프트웨어 권한 계층을 정의합니다.
- AArch64는 64비트 환경에서 동작하며, 새로운 명령어 세트(A64)를 사용합니다.
- AArch32는 기존 ARMv7과 호환성을 유지하며, 32비트 명령어 세트를 사용합니다.
- 두 실행 상태 간 전환은 예외 경계를 통해 이루어지며, 상호 호환성을 제공합니다.
ARMv8-A의 Exception Level 모델은 시스템 보안과 효율적인 자원 관리를 위한 핵심 요소입니다.
'Design > SoC' 카테고리의 다른 글
Arm GIC-v3에 대해서 (0) | 2025.01.05 |
---|