커널

22. 라즈베리파이 - ArmV8 익셉션

corin13 2025. 7. 17. 14:52

ArmV8 익셉션의 특징

1.계층 구조로 정의

  • 상위 카테고리
  • 하위 카테고리

2.익셉션이 유발된 익셉션 레벨별로 익셉션 벡터가 존재

  • 익셉션 레벨(EL) 기준으로 익셉션을 처리하는데, 레벨 별로 벡터주소가 존재

 

3.벡터 주소는 0x80 바이트 단위로 정렬

  • 0x80바이트 공간 만큼 익셉션 처리 명령어 입력 가능

 

4.Arch32 하위 호환성을 고려한 익셉션 정의

  • 32비트 어플리케이션의 호환성을 지원함

-------

ArmV8 익셉션의 종류와 분류 체계

  • Synchronous 명령어 실행하다가 발생
  • ASynchronous 외부에서 접근

 

동기식

어셈블리어 명령어를 실행하다 유발

  • 메모리 어보트를 유발하는 명령어(크래시 유발)
  • SVC(슈퍼바이저 ) 명령어

세부 원인

  • Instruction Abort
  • Data Abor
  • 스택과 프로그램 카운터 정렬 오류
  • 소프트웨어적 인터럽트를 유발하는 서비스 (SVCs, SMCs, HVCs) // SMC : System Monitor Call

 

익셉션 레벨 분류

  • EL0 : 사용자 공간(애플리케이션 레벨)
  • EL1 : 운영체제 커널
  • EL2 : 하이퍼바이저
  • EL3 : 보안 모니터 레벨

SMC?

ARM 아키텍처는 시스템을 가지 영역으로 분리

  • Secure World Nomal World
  • Non-secure World 구분

이는 민감 데이터나 기능을 보안 세계 내에서만 처리할 있게 하여 보다 강력한 보안 수준 제공

SMC 호출은 이러한 세계 인터페이스 역할 수행

일반 세계 -> 보안 세계의 기능이나 데이터에 접근

SMC -> 보안 세계에 있는 Secure Monitor 요청을 보냄. 이때 SM 요청을 받아 처리한 결과를 일반 세계로 반환

-----

비동기식

어셈블리어 명령어 실행 과정에서 유발 x. IRQ, FIQ, SError 의해 유발됨

IRQ : 외부 I/O 인터럽트

FIQ : ArmV7 ArmV8 모두에서 제공하는 FIQ 시스템의 빠른 인터럽트 응답 기능 제공, ARMv8에서는 보안 옵션을 제공

SError : 외부 메모리 버스에서 어보트 감지시 유발

------

익셉션 신드롬 레지스터(ESR_ELx)

신드롬 : 증상, 상태

arm 프로세서는 익셉션 유발 레지스터를 통해 알려줌

Synchronous 익셉션, SError 익셉션 발생 [31:26] 비트에 원인을 기록

IRQ/FIQ 익셉션은 레지스터가 업데이트되지 않음

----

익셉션 클래스

익셉션 세부 원인에 대해 정의

37, 크게 5 카테고리로 구성

  • 메모리 어보트
  • 트랩 명령어(SVC, HVC ,SMC)
  • MCR, MCRR 트랩 명령어
  • 브레이크 포인트
  • 기타

메모리 어보트

ex. SError "0b101111" SERROR 인터럽트 유발 <- [31:26] 6 비트가 기록됨

 

익셉션 익셉션 신드롬 레지스터에 기록 -> [31:26] 비트에 기록한다

기록되는 값을 정해둔 익셉션 틀래스인데, 구체적인 값이 예시와 같은 비트임

 

======

Armv8 익셉션을 구성하는 주요 개념

그림에서 익셉션 레벨 변경 부분만 차이가 있음

----유발 요인----

Data Abort(잘못된 메모리 접근)

  • 특정 메모리에 접근했는데 주소가 없거나 접근 권한이 없는 경우

Prefetch Abort(실행할 명령어를 불러오는 과정에서 오류)

Undefined Instruction(인식할 없는 명령어)

  • 컴파일러가 다른 경우

외부 인터럽트(하드웨어, 비동기적)

  •  IRQ, FIQ

소프트웨어 인터럽트

  • SVC 명령
  • EL0에서 SVC 실행 자동으로 EL1 진입
  • , svc 전용 익셉션이 유발되지 않고, 동기식 익셉션이 유발됨

거의 흡사하나 소프트웨어 인터럽트만 약간의 차이가 있음

------

레지스터 업데이트 - 특정 익셉션 레벨에서만 접근할 있는 레지스터를 변경

  •  익셉션 발생한 시점의 프로세서 상태를 나타내는 PSTATE SPSP_ELx 레지스터에 저장
  • 복귀한 주소를 ELR_ELx 레지스터에 저장

------

익셉션 벡터 테이블

  • 익셉션 벡터가 Armv7에서는 하나지만, Armv8에서는 익셉션 레벨 별로 존재함

-----

익셉션 핸들러

익셉션 벡터 주소로 프로그램 카운터를 분기, 해당 주소에 명령어 실행

  • Synchronous : 시스템 리셋/시스템 실행
  • IRQ 익셉션 : 인터럽트를 처리하는 서비스 루틴 실행
  • SError : 시스템 리셋