익셉션 레벨
익셉션 레벨은 무엇이고 왜 배워야 하는가?
1. Armv8 아키텍처를 이루는 기능을 이해하기 위해서
- 익셉션 : 익셉션은 예외적인 상황이 발생했을 때 처리되는 이벤트 말합니다. 익셉션은 프로세서가 명령어를 실행하는 동안 발생할 수 있는 예기치 않은 상황을 나타냅니다. 익셉션이 유발되면 Arm core가 특정 엔트리 주소로 점프하게 됩니다.
- 인터럽트 : 외부 디바이스나 하드웨어 이벤트로 인해 발생하는 익셉션 입니다
- 예외 : 명령어 실행중에 발생하는 오류나 예외상황으로 인한 익셉션
- 시스템 익셉션 : 아키텍처 전반에 걸쳐 발생하는 익셉션으로 프로세서의 동작에 영향을 주는 중요한 이벤트 처리를 합니다. 예를 들어 system call, 부동 소수점 연산 오류, 메모리 관리 오류 등이 습니다.
- 하이퍼 바이저
- 일반적으로 하이퍼바이저는 EL2 또는 EL1에서 동작하여 VM간의 격리와 리소스 할당을 하게 됩니다.
- 트러스트존
- Arm 프로세서 아키텍처에서 제공하는 하드웨어 기반의 보안기술 입니다. TrustZone은 프로세서를 하나 이상의 보안 도메인으로 분리하여 각 도메인 간의 격리와 보안을 강화하는 것을 목표로 합니다.
- 트러스트존에 진입하기 위해서는 EL1에서 EL3으로 진입해야 합니다.
2. 익셉션 레벨의 정의
Arm 아키텍처에서 프로세서의 권한 수준을 나타내는 데 사용되는 개념입니다.
- EL0 (Exception Level 0): 일반적인 응용 프로그램 및 운영체제의 사용자 모드로, 가장 낮은 권한 수준입니다. 주로 응용 프로그램이 실행되는 레벨입니다.
- EL1 (Exception Level 1): 운영체제의 커널 모드로, EL0보다 높은 권한 수준을 가집니다. 운영체제의 커널이 실행되고 시스템 자원에 접근할 수 있습니다.
- EL2 (Exception Level 2): 하이퍼바이저 모드로, 가상화 관련 작업을 수행합니다. 하이퍼바이저는 가상 머신(VM)을 관리하고 격리된 환경을 제공하는 역할을 합니다.
- EL3 (Exception Level 3): 보안 모드로, 시스템의 가장 높은 권한 수준을 가집니다. 주로 보안 관련 작업과 초기화 및 부팅과정에서 사용됩니다.
익셉션
Synchronous exception(동기적 익셉션)
프로세서가 명령어를 실행하는 동안 발생하는 예외입니다. 이러한 익셉션은 현재 실행 중인 명령어와 밀접한 관련이 있으며, 해당 명령어의 실행 도중에 발생하는 예외 상황을 의미합니다.
IRQ 익셉션
프로세서에게 외부 장치나 이벤트로부터 인터럽트를 요청하는 신호입니다. IRQ 인터럽트는 프로세서의 실행을 중단하고, 특정 인터럽트 서비스 루틴(Interrupt Service Routine)을 실행하여 해당 인터럽트에 대한 처리를 수행합니다.
IRQ 인터럽트가 발생하면 프로세서는 현재 실행 중인 명령어를 중단하고, 예외 처리 메커니즘을 통해 IRQ 예외 루틴으로 제어를 전환합니다. 이때 인터럽트 처리를 위한 전처리 작업이 수행되고, 해당 IRQ 예외 루틴이 실행됩니다. IRQ 예외 루틴은 프로세서가 인터럽트 서비스를 처리하는 코드로 이동하여, 외부 장치의 요청에 따른 작업을 수행합니다.
ESR (Exception Syndrome Register)
Arm 아키텍처에서 예외 발생 시 예외의 세부 정보를 저장하는 레지스터입니다.
ESR은 예외 유형, 예외 원인, 예외 상태 등과 같은 다양한 정보를 제공하여 예외처리에 도움을 줍니다.
EC를 포함하고 있습니다.
기타 용어들
EC (Exception Class)
익셉션이 유발된 세부 유발 인자입니다.
pstate
Armv8 아키텍처에서 사용되는 제어 및 상태 정보를 포함하는 레지스터입니다. PSTATE 레지스터는 현재 프로세서의 실행 상태와 프로그램 제어에 관련된 여러 플래그를 저장합니다.
Armv8 아키텍처에서 익셉션을 처리하는 방식
- 익셉션이 발생했다고 감지하면 익셉션 종류별로 이미 정해놓은 주소로 프로그램 카운터를 브랜치합니다
- 이미 정해진 주소를 익셉션 벡터 주소라 하며, 각 익셉션의 종류에 따라 익셉션 벡터 주소의 위치가 다릅니다 (실제로는 익셉션 벡터 테이블에 명시된 주소로 점프하는 것이 아닌 벡터 테이블의 엔트리 주소(base addr)에 테이블에 해당하는 주소값을 더한 주소로 이동합니다.)
- 익셉션 벡터 주소에는 익셉션을 핸들링하는 코드가 있습니다.