작성
·
49
0
exception handler 는 소프트웨어 적으로
어떻게 구현이 이루어 지나요?
exception vector 에 써진 주소값에
handler 를 넣어 주어야 할 것 같은데,
주소를 직접 넣어서 프로그래밍 할 수 있는 것인가요?
답변 2
0
익셉션 핸들러의 구현 방식은 아래와 같습니다:
익셉션 핸들러는 관련 코드를 구현한다.
익셥션 핸들러의 베이스 주소를 VBAR 레지스터에 저장하는 명령어를 실행한다.
익셉션이 유발되면 VBAR 레지스터에 저장된 익셉션 벡터 베이스 주소 기준으로 익셉션 벡터 주소로 분기한다.
주신 질문에 대해서는 아래 강의 영상을 추가로 제작해서 설명드렸으니, 강의 영상을 참고해주세요.
'127번째 강의 - Exception handler 구현 방식에 대한 질문'
섹션: Q/A - 수강생 분들 질문
0
안녕하세요, 인프런 AI 인턴입니다.
platformpjt02님이 질문하신 내용은 Arm 아키텍처에서의 익셉션 핸들러 구현과 관련되어 있습니다. 익셉션 핸들러는 인터럽트나 예외 상황이 발생했을 때 이를 처리하기 위한 함수입니다. 일반적으로 Arm 아키텍처에서 이런 핸들러는 익셉션 벡터와 관련이 있는데, 이는 각 익셉션 상황에 대한 엔트리 포인트들을 포함하고 있는 테이블입니다.
설명:
1. 익셉션 벡터 테이블: 이 테이블은 프로세서가 예외 상황을 인식했을 때 실행해야 하는 코드의 시작 주소를 보유하고 있습니다. 각 예외 유형에 대해 지정된 주소로 점프하여 해당 핸들러를 실행합니다.
벡터 테이블 설정: 보통 시스템 부팅 초기에 초기화 루틴에서 이 익셉션 벡터 테이블을 설정합니다. Arm에서, VBAR(Vectored Base Address Register)를 사용하여 이 벡터 테이블의 베이스 주소를 지정합니다.
핸들러 구현: 핸들러는 특정 예외를 처리하도록 설계된 함수이며, C 언어나 어셈블리로 작성될 수 있습니다. 이 코드 내에서 필요한 예외 처리와 관련된 작업을 수행하게 됩니다.
질문하신 “주소를 직접 넣어 프로그래밍 할 수 있는가?“에 관해서, 실제로는 개발자가 핸들러 함수의 주소를 이 벡터 테이블에 설정하며, ARM의 경우 이 작업은 주로 초기화 코드 부분에서 이루어집니다. 따라서 운영체제와 시스템에 따라 이 작업이 어떻게 수행되는지가 많이 다를 수 있습니다.
이와 관련된 더욱 구체적인 구현 방법은 다음 질문에서 자세히 설명되고 있습니다:
- 익셉션 벡터 베이스 주소 질문
위 링크의 질문에서는 각 레벨별로 익셉션 벡터가 어떻게 설정되고, 특정 상황에서 벡터 테이블이 어떻게 구성되는지가 잘 설명되어 있습니다. 이 내용이 질문자님의 이해에 많은 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.