Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- ARM 아키텍쳐: 메모리 모델과 배리어
- 코멘토실무PT
- ARM 아키텍처: 메모리모델과 배리어
- 빌드 시스템
- Arm 아키텍처: 캐시
- Arm 아키텍처: 메모리 모델과 배리어
- 인프런
- BSP
- arm
- 실무PT후기
- yocto
- 코멘토
- Kernel
- 시스템 소프트웨어 개발을 위한 ARM 아키텍처의 구조와 원리
- udemy
Archives
- Today
- Total
반도체 소프트웨어
요약 6. ARMv8 익셉션 레벨 본문
- 익셉션 레벨 개요
- ARMv8의 기능(익셉션, 하이퍼바이저, 트러스트존)이 Exception Level기반으로 동작하기에 이해는 반드시 필요
- Eln: 익셉션 레벨
- n: PL을 의미
- 익셉션 레벨과 특권 레벨과 거의 같은 개념 ex) EL1은 PL1 권한이 있는 익셉션 레벨
- OS, RTOS를 구현할때 모든 익셉션 레벨을 구현해야할 필요는 없다.
- EL0, EL1은 필수 구현 사항이고 EL2, EL3는 옵션이다.
- EL2, EL3를 구현한다는 의미
- 각 익셉션 레벨별로 익셉션 핸들러를 구현
- 각 익셉션 레벨별로 사용되는 스택을 설정
- 익셉션 핸들러의 베이스 주소를 VBAR_ELx 레지스터를 통해 설정
- 관련 시스템 레지스터 및 MMU 설정
- 익셉션 레벨 종류
- EL0: 유저모드
- EL1: 커널모드
- EL2
- 게스트 OS끼리 스위칭
- 게스트 OS의 시스템 리소스에 접근 가능
- 하이퍼바이저 실행됨
- EL3
- 가장 높은 권한
- 모든 시스템 설정 가능하며 모든 레지스터에 접근 가능
- 부팅 과정에서 EL3로 설정
- 트러스트존에서 많이 사용
- 익셉션 관련 레지스터
- PSTATE
- CurrentEL
- MRS X0, CurrentEL로 익셉션 레벨을 읽으며, 브링업 코드에서 반드시 체크함
- SPSR_ELx: 익셉션이 유발된 시점의 익셉션 레벨과 프로세서 속성 정보 저장
- PSTATE 정보 백업용도
- SPSR_EL1: EL1으로 익셉션이 유발되기 전의 PSTATE
- 주로 IRQ인터럽트 익셉션이 유발된 후 처리되는 인터럽트 서비스 루틴에서 SPSR_ELx를 활용해 인터럽트가 발생한 시점의 익셉션 레벨로 복귀
- ELR_Elx: ELR_EL1: EL1으로 익셉션이 유발된 다음에 복귀할 주소를 저장
- 낮은 익셉션 레벨로 복귀하는 과정
- SPSR_ELx 레지스터 설정(더 낮은 익셉션 레벨값을 저장)
- ELR_ELx 레지스터 설정(더 낮은 익셉션에서 실행할 주소를 저장)
- ERET 실행 ex) EL2에서 EL2으로 가기 위해서는 SPSR_EL2와 ELR_EL2에 익셉션 레벨값과 복귀 후 실행할 주소를 저장한 뒤에 ERET 명령어 실행
- ARM 코어 내부에서 SPSR_ELx를 PSTATE에 로딩하고 ELR_ELx에 저장된 주소로 복귀
- 잘못된 레벨로 복귀할 경우 Unknown Reason으로 익셉션
- 익셉션 관련 설정 어셈블리 코드들이 있는 문서: Bare-metal Boot Code for ARMv8-A processors
- 익셉션 레벨 변경 명령어
- SVC(슈퍼바이저 콜)
- EL0에서 EL1으로 익셉션 레벨이 변경
- EL0 Synchronous 익셉션 벡터 주소(VBAR + 0x400)로 프로그램 카운터 브랜치
- ARM 관점에서는 익셉션 유발
- OS 관점에서는 시스템 콜 유발
- ARMv7: R7 레지스터에 시스템콜 번호 저장
- ARMv8: X8 레지스터에 시스템콜 번호 저장
- HVC(하이퍼바이저 콜)
- EL1에서 EL2로 익셉션 레벨이 변경
- 하이퍼바이저에 존재하는 익셉션 벡터 테이블 기준(VBAR_EL2)으로 EL1 Synchronous 익셉션 벡터 주소(VBAR + 0x400)으로 프로그램 카운터 브랜치
- SMC(시큐어 모니터 콜)
- EL1에서 EL3로 익셉션 레벨이 변경
- EL3 시큐어 모니터 익셉션 벡터 테이블 기준(VBAR_EL3)으로 EL1 Synchronous 익셉션 벡터 주소(VBAR + 0x400)으로 프로그램 카운터 브랜치
- 논시큐어와 시큐어 레벨을 전환
- ERET으로 EL3에서 다시 EL1으로 복귀 가능(wfe, wfi 명령어로도 복귀 가능)
- SVC(슈퍼바이저 콜)
- 기타
- 익셉션 = 트랩
- h(핸들러모드): 익셉션 레벨별로 스택포인터를 각각 설정하는 모드
- CurrentEL의 3,4번 비트가 익셉션 레벨 값
- PSTATE의 M비트는 익셉션 레벨 값을 저장
- 현재 익셉션 레벨도 뱅크드 레지스터이다 ex) SP가 바뀌면 SP_EL2도 같이 바뀐다(뱅크드하는건 ARM 코어 내부적으로 처리함)
- ARMv8은 SP_ELx, ELR_ELx, SPSR_ELx 가 뱅크드됨
출처: 인프런, "시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리", https://inf.run/FiFG
'CPU Architecture > ARM Architecture' 카테고리의 다른 글
요약 8. ARMv8 익셉션 (0) | 2023.12.31 |
---|---|
요약 7. ARMv7 익셉션 (0) | 2023.12.31 |
요약 5. ARMv7 동작모드 (0) | 2023.12.30 |
요약 4. ARM 어셈블리 명령어 (0) | 2023.12.30 |
요약 3. ARM 레지스터 (0) | 2023.12.30 |