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 동작 방식
- 부팅 시 EL3에서 실행되며, 시스템이 Secure 또는 Non-Secure 모드로 실행될지 결정한다.
- Non-Secure 환경(EL0~EL2)에서 보안 기능을 호출하면 EL3로 전환된다.
- 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 프로세서에서 운영체제 커널, 가상화, 보안 시스템을 효과적으로 설계하고 관리할 수 있다.
'정보기술 > 하드웨어' 카테고리의 다른 글
ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (3. 부트로더 및 시스템 초기화 실습) (0) | 2025.03.07 |
---|---|
ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (2. ARM 예외 처리 및 보안 기능 가이드) (0) | 2025.03.07 |
ARM Core - 3. ARM Assembly 프로그래밍 기초 (2. ARM 어셈블리 기본 명령어 및 최적화) (0) | 2025.03.07 |
ARM Core - 3. ARM Assembly 프로그래밍 기초 (1. ARM Assembly 환경 설정 가이드) (0) | 2025.03.07 |
ARM Core - 2. ARM 아키텍처 및 내부 구조 (4. ARM 최적화 컴파일러 기술) (0) | 2025.03.07 |