ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (1. ARM의 실행 모드 가이드)

2025. 3. 7. 13:31정보기술/하드웨어

운영 모드와 예외 처리, 시스템 초기화 과정을 학습한다.

 

1. ARM의 실행 모드 가이드


1. ARM의 주요 실행 모드 (AArch32 기준)

AArch32 모드(ARMv7 및 ARMv8의 32비트 실행 모드)에서는 총 7가지 실행 모드가 있으며, 각각의 모드는 특정한 역할을 수행한다.

실행 모드 설명
User 모드 일반적인 애플리케이션 코드 실행 (권한 제한)
FIQ 모드 빠른 인터럽트 처리 (Fast Interrupt Request)
IRQ 모드 일반 인터럽트 처리 (Interrupt Request)
Supervisor 모드 OS 커널 실행 (권한 상승 가능)
Abort 모드 메모리 접근 오류 발생 시 실행
Undefined 모드 정의되지 않은 명령어 실행 시 진입
System 모드 User 모드와 유사하지만, 권한이 높은 실행 모드

2. AArch32 vs AArch64 실행 모드 차이점

AArch64(ARMv8 및 이후 아키텍처)에서는 실행 모드가 단순화되었으며, 새로운 Exception Levels (EL0~EL3) 구조를 따른다.

AArch32 실행 모드 AArch64 실행 모드 (EL) 설명
User 모드 EL0 (User Mode) 일반 사용자 프로세스 실행
Supervisor 모드 EL1 (Kernel Mode) 운영체제(OS) 실행
IRQ, FIQ, Abort, Undefined 모드 EL2 (Hypervisor Mode) 가상화(Hypervisor) 실행
System 모드 EL3 (Secure Monitor Mode) 보안 모드(TrustZone) 실행

3. TrustZone과 EL3의 관계

TrustZone은 ARM의 보안 기능을 담당하는 기술로, 프로세서를 Secure World와 Non-Secure World로 나누어 보안이 필요한 작업을 격리한다.

  • EL3 (Secure Monitor Mode)는 TrustZone의 핵심으로, Secure World와 Non-Secure World 간의 전환을 관리한다.
  • SMC(Secure Monitor Call) 명령어를 통해 EL3에서 Secure World로 전환할 수 있다.

EL3와 TrustZone 동작 방식

  1. 부팅 시 EL3에서 실행되며, 시스템이 Secure 또는 Non-Secure 모드로 실행될지 결정한다.
  2. Non-Secure 환경(EL0~EL2)에서 보안 기능을 호출하면 EL3로 전환된다.
  3. EL3은 보안 작업(예: 암호화, 신뢰할 수 있는 부팅 등)을 수행한 후 다시 EL1/EL2로 돌아간다.

TrustZone에서 EL3 모드 확인 코드 (AArch64)

MRS X0, CurrentEL   // 현재 Exception Level 확인
LSR X0, X0, #2      // EL 값 추출
CMP X0, #3          // EL3인지 확인
BNE not_el3
  • MRS X0, CurrentEL → 현재 실행 중인 Exception Level을 X0에 저장
  • LSR X0, X0, #2 → EL 값만 추출
  • CMP X0, #3 → 현재 EL3인지 확인

4. AArch64에서 현재 실행 모드 확인하는 코드 예제

AArch64에서 실행 중인 Exception Level을 확인하는 방법은 CurrentEL 시스템 레지스터를 이용하는 것이다.

AArch64 실행 모드 확인 코드

MRS X0, CurrentEL   // 현재 실행 중인 Exception Level 읽기
LSR X0, X0, #2      // 상위 비트를 이용하여 EL 값을 가져오기

CMP X0, #0          // EL0 (User Mode)인지 확인
BEQ el0_handler

CMP X0, #1          // EL1 (Kernel Mode)인지 확인
BEQ el1_handler

CMP X0, #2          // EL2 (Hypervisor Mode)인지 확인
BEQ el2_handler

CMP X0, #3          // EL3 (Secure Monitor Mode)인지 확인
BEQ el3_handler
  • MRS X0, CurrentEL → 현재 실행 중인 EL 값을 가져옴
  • LSR X0, X0, #2 → EL 값을 추출 (EL은 상위 비트에 위치)
  • CMP X0, #n → 현재 EL 값이 특정 레벨과 같은지 비교

5. 실행 모드 변경 및 CPSR/SPSR 레지스터 설정 (AArch32 & AArch64)

AArch32에서는 CPSR 레지스터를 이용하여 실행 모드를 변경하고 확인할 수 있다.
AArch64에서는 **SPSR(System Program Status Register)**을 사용한다.

AArch32 실행 모드 변경 코드 (User → Supervisor)

MRS R0, CPSR       ; 현재 CPSR 값 읽기
BIC R0, R0, #0x1F  ; 모드 비트 클리어
ORR R0, R0, #0x13  ; Supervisor 모드 (0x13)로 변경
MSR CPSR, R0       ; 변경된 CPSR 값 적용

AArch64에서 EL1(커널)에서 EL2(하이퍼바이저)로 변경

MRS X0, SPSR_EL1   ; 현재 SPSR 값 읽기
ORR X0, X0, #0x08  ; Exception Level 변경
MSR SPSR_EL1, X0   ; 변경된 값 저장
ERET               ; EL2로 전환

6. 실행 모드 요약

모드 (AArch32) 설명
User 모드 일반 사용자 코드 실행
FIQ 모드 고속 인터럽트 처리
IRQ 모드 일반 인터럽트 처리
Supervisor 모드 OS 커널 실행
Abort 모드 메모리 접근 오류 처리
Undefined 모드 지원되지 않는 명령어 실행
System 모드 특권이 있는 User 모드

 

모드 (AArch64) 설명
EL0 사용자 모드 (User Mode)
EL1 운영체제 커널 (Kernel Mode)
EL2 하이퍼바이저 (Hypervisor Mode)
EL3 보안 모드 (Secure Monitor Mode, TrustZone)

7. 결론

  • TrustZone과 EL3는 밀접한 관계가 있으며, EL3는 Secure/Non-Secure 환경 전환을 담당한다.
  • AArch64에서는 CurrentEL 레지스터를 사용하여 현재 실행 모드를 확인할 수 있다.
  • 실행 모드는 운영체제(OS), 보안, 가상화 환경에서 중요한 역할을 하며, 적절한 모드 전환이 필요하다.
  • CPSR(AArch32)와 SPSR(AArch64)을 통해 실행 모드를 확인하고 변경할 수 있다.

이를 통해 ARM 프로세서에서 운영체제 커널, 가상화, 보안 시스템을 효과적으로 설계하고 관리할 수 있다.