24.10.15 22:36 작성
·
60
1
안녕하세요! 우선 너무 좋은 강의 잘 보고 있습니다.
Current Exception Level 정의를 어떻게 내리는지 질문드립니다.
제가 처음에 이해하기로는 리눅스OS 위에서 User App이 실행 중 Exception이 발생했다면 Current El = EL0 라고 생각했습니다.
하지만 강의를 듣다보니 Exception handler가 어느 EL에 정의 되어있는지에 따라 Current EL을 정의해야하는 것이라고 이해했는데,
위와 같이 이해하면 문제가 없을까요?
답변 1
0
2024. 10. 15. 23:19
Current Exception level을 직역해서 해석하면 현재 익셉션 레벨입니다. 익셉션 벡터 테이블을 해석할 때는 Current Exception level는 익셉션을 핸들링하는 익셉션 벡터 (혹은 익셉션 핸들러)가 존재하는 익셉션 레벨로 해석하시면 됩니다.
예를 드신 내용으로 설명드리면요: User App이 실행 중 Exception이 발생했다면, User App이 실행되는 EL0에서 EL1으로 익셉션이 스위칭됩니다. 즉, EL1에 존재하는 VBAR_EL1에서 해당 익셉션(User App이 실행 중 Exception이 발생)을 처리하는데요, 다음과 같이 해석하시면 됩니다.
Current Exception level = EL1
Lower Exception Level = EL0
따라서 'Lower Exception Level'에 표기된 오프셋을 기준으로 익셉션 벡터 주소로 분기됩니다. 추가로 궁금하신 점이 있으면 질문해주세요.
감사합니다.
2024. 10. 18. 19:01
익셉션을 핸들링하는 루틴이 포함된 익셉션 핸들러는 EL0에서 실행되지 않도록 설계합니다.
익셉션을 처리하는 루틴은 하드웨어 리소스에 직접 접근(인터럽트, 메모리 어보트)해야 하기 때문입니다.
current exception level은 익셉션 핸들러가 위치해 있는 기준으로 보시면 되고,
구체적인 사례는 다음과 같습니다:
1. VBAR_EL1 기준:
current exception level: EL1
lower exception level: EL0
2. VBAR_EL2 기준:
current exception level: EL2
lower exception level: EL1 혹은 EL0
3. VBAR_EL3 기준:
current exception level: EL3
lower exception level: EL2 혹은 EL1 (EL0은 아님)
감사합니다.
2024. 10. 16. 00:22
답변 감사합니다!
수정)
아래 질문은 다시 정리해서 다른 글로 질문 드렸습니다. 한쪽만 답변해주셔도 괜찮을 것 같습니다 😄
감사합니다.
https://www.inflearn.com/questions/1406752
추가로 궁금한 점이 있습니다.위 설명을 기준으로 생각해보았을 때 Arm Core가 Current Exception Level 0 를 지원하는지만 Linux에서 지원하지 않는다는 의미가 이해가 안 갑니다..
제 생각을 정리하면 아래와 같습니다.
Sync Exception ( SVC, Interrupt 등...)발생
H/W :: "VBAR + Offset" 위치로 PC가 브랜치 되도록 설계
VBAR 값을 변경해서 익셉션 벡터 테이블 위치를 바꿀 수 있음
리눅스는 0x...82000 사용
H/W :: PSTATE 업데이트 → EL1로 모드 변경
질문) 하드웨어적으로 Exception 발생 시 PSTATE의 Mode를 EL1로 변경하므로 익셉션 벡터 테이블 & 익셉션 핸들러는 EL1에서 수행될 수 밖에 없으므로 Current Exception Level은 항상 EL1 일 수 밖에 없지 않나 싶습니다.
답변을 듣기 전 스스로 질문에 생각해보면 )
1) Exception 발생 시 Mode는 EL1이 된다.
2) 따라서 EL0의 코드와 EL1의 코드 모두 실행 가능하다.
3) 따라서 익셉션 벡터 테이블 & 익셉션 핸들러 코드 를 EL0 권한으로 작성하여 실행 가능하고, 이 경우가 Current Exception Level == 0 인 경우에 해당한다.
만약 위 답변이 질문에 대한 올바른 답변이라면,
추가로 코드를 작성시 EL1 권한으로 작성할지 EL0 권한으로 작성할지 어떻게 결정하는 것인가요..?