인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

platformpjt02님의 프로필 이미지

작성한 질문수

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)

Armv7-익셉션의 실행 흐름

exception handler 구현

작성

·

49

0

exception handler 는 소프트웨어 적으로

어떻게 구현이 이루어 지나요?

exception vector 에 써진 주소값에

handler 를 넣어 주어야 할 것 같은데,

주소를 직접 넣어서 프로그래밍 할 수 있는 것인가요?

답변 2

0

김동현 (Austin Kim)님의 프로필 이미지
김동현 (Austin Kim)
지식공유자

익셉션 핸들러의 구현 방식은 아래와 같습니다:

  • 익셉션 핸들러는 관련 코드를 구현한다.

  • 익셥션 핸들러의 베이스 주소를 VBAR 레지스터에 저장하는 명령어를 실행한다.

  • 익셉션이 유발되면 VBAR 레지스터에 저장된 익셉션 벡터 베이스 주소 기준으로 익셉션 벡터 주소로 분기한다.

주신 질문에 대해서는 아래 강의 영상을 추가로 제작해서 설명드렸으니, 강의 영상을 참고해주세요.

'127번째 강의 - Exception handler 구현 방식에 대한 질문'

섹션: Q/A - 수강생 분들 질문

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

platformpjt02님이 질문하신 내용은 Arm 아키텍처에서의 익셉션 핸들러 구현과 관련되어 있습니다. 익셉션 핸들러는 인터럽트나 예외 상황이 발생했을 때 이를 처리하기 위한 함수입니다. 일반적으로 Arm 아키텍처에서 이런 핸들러는 익셉션 벡터와 관련이 있는데, 이는 각 익셉션 상황에 대한 엔트리 포인트들을 포함하고 있는 테이블입니다.

설명:
1. 익셉션 벡터 테이블: 이 테이블은 프로세서가 예외 상황을 인식했을 때 실행해야 하는 코드의 시작 주소를 보유하고 있습니다. 각 예외 유형에 대해 지정된 주소로 점프하여 해당 핸들러를 실행합니다.

  1. 벡터 테이블 설정: 보통 시스템 부팅 초기에 초기화 루틴에서 이 익셉션 벡터 테이블을 설정합니다. Arm에서, VBAR(Vectored Base Address Register)를 사용하여 이 벡터 테이블의 베이스 주소를 지정합니다.

  2. 핸들러 구현: 핸들러는 특정 예외를 처리하도록 설계된 함수이며, C 언어나 어셈블리로 작성될 수 있습니다. 이 코드 내에서 필요한 예외 처리와 관련된 작업을 수행하게 됩니다.

질문하신 “주소를 직접 넣어 프로그래밍 할 수 있는가?“에 관해서, 실제로는 개발자가 핸들러 함수의 주소를 이 벡터 테이블에 설정하며, ARM의 경우 이 작업은 주로 초기화 코드 부분에서 이루어집니다. 따라서 운영체제와 시스템에 따라 이 작업이 어떻게 수행되는지가 많이 다를 수 있습니다.

이와 관련된 더욱 구체적인 구현 방법은 다음 질문에서 자세히 설명되고 있습니다:
- 익셉션 벡터 베이스 주소 질문

위 링크의 질문에서는 각 레벨별로 익셉션 벡터가 어떻게 설정되고, 특정 상황에서 벡터 테이블이 어떻게 구성되는지가 잘 설명되어 있습니다. 이 내용이 질문자님의 이해에 많은 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.