- 익셉션
- 하이퍼바이저
- 트러스트존
- 익셉션 레벌을 기준으로 익셉션 벡터 테이블을 구성
- el1_sync, el0_irq, ...
- 하이퍼바이저의 구조를 이해하기 위해서 ELx(익셉션 레벨)의 개념을 알고 있어야 함
- EL2에서 하이퍼바이저가 실행, EL1에서 리눅스 커널이 실행
- EL1에서 HVC를 실행하면 EL2로 진입
- 익셉션 레벨의 개념 위에 트러스트존이 구성됨
- 트러스트존에 진입하기 위해서는 EL1에서 EL3로 진입(SMC) 해야 함
- 유저 애플리케이션이 실행
- unprivileged 레벨 혹은 PL0로 실행
-> Privileged : 하드웨어에 직접적으로 접근할 수 있는 권한- EL0에서는 인터럽트, MMU, 캐시 기능을 설정 할 수 없음
- EL1은 PL1 권한이 있는 익셉션 레벨
- 리눅스 커널에서는 인터럽트, MMU, 캐시 설정과 같이 시스템을 설정 가능
- PL2는 EL2에게 부여되는 권한 레벨로 게스트 OS끼리 스위칭하고 게스트 OS의 시스템 리소스에 접근 가능
- 일반적으로 EL2에서 하이퍼바이저가 실행되며, 하이퍼바이저는 PL2 권한 레벨로 실행 됨
- PL3는 EL3 에게 부여되는 권한 레벨로 Highest Privileged Level
- 시스템을 모두 설정할 수 있고, 익셉션 레벨에 존재하는 모든 레지스터에 엑세스 할 수 있어 Booting 과정에서 EL3로 설정
- 아래에서 윗방향으로 함수 호출
- 아래에서 윗방향으로 함수 호출
- ArmV8 아키텍쳐에서는 인터럽트를 익셉션의 한 종류로 관리함
- IRQ = 인터럽트 리퀘스트
- 익셉션이 발생했다고 감지하면 익셉션 종류별로 이미 정해 놓은 주소로 브랜치
- 이미 정해진 주소를 익셉션 벡터(Exception Vector)주소라 하며, 각 익셉션의 종류에 따라 익셉션 벡터 주소의 위치가 다름
- 익셉션 벡터 주소에는 익셉션을 핸들링하는 코드가 있음
-> 익셉션 핸들러
- currnent Exception Level: EL1(리눅스 커널)
- Lower Exception Level: EL0(유저 애플리케이션)
- EL0에서 익셉션 발생
- EL1에서 익셉션 발생