익셉션
Posts
27 posts[ARM프로세서] 소프트웨어 관점에서 익셉션(Exception)이란
소프트웨어 입장에서 익셉션이란 무엇일까요? 소프트웨어 입장에서는 익셉션의 종류에 따라 익셉션을 2가지 관점으로 볼 수 있습니다. ❑ 치명적인 오류: 메모리 어보트 타입 익셉션(Prefetch Abort, Data Abort, Undefined Instruction) ❑ 운영체제 커널에서 지원하는 기능: IRQ(인터럽트 서비스 루틴), SW 인터럽트(시스템 콜) 메모리 어보트 타입 익셉션이란 첫 번째, 메모리 어보트 타입 익셉션을 소프트웨어 관점으로 보면, 소프트웨어적으로 치명적인 오류가 발생했다고 볼 수 있습니다. 여기서 말하는 치명적인 오류가 발생하면 시스템이 리셋되는데, 이를 “크래시가 발생했다”라고 말합니다. 프로젝트를 개발하는 도중에 이런 치명적인 오류를 만나
[ARM프로세서] 익셉션(Exception)과 관련된 레지스터
실전 SW 개발자 입장에서 익셉션이 발생했을 때 확인해야 할 가장 중요한 정보는 레지스터입니다. ARM 프로세서는 익셉션을 감지하면 레지스터에 익셉션과 관련된 정보를 업데이트하기 때문입니다. 그렇다면 레지스터를 통해 SW 개발자는 어떤 정보를 얻을 수 있을까요? 먼저, 익셉션이 발생했을 때 실행된 명령어의 정확한 주소를 확인할 수 있습니다. ARMv7 아키텍처에서는 r14_ 레지스터, ARMv8에서는 ELR_ELx 레지스터에 익셉션이 발생한 주소를 저장합니다. 이 정보를 참고로 함수의 호출 흐름까지 파악할 수 있습니다. 만약 익셉션의 타입이 메모리 어보트이면 레지스터 정보를 참고로 정확히 어떤 이유로 익셉션이 발생했는지 디버깅할 수 있습니다. 이 밖에도 ARMv7와 ARMv8 아키
[ARM프로세서] 익셉션 벡터 테이블 소개
이번 포스팅에서는 ARMv7과 ARMv8 아키텍처의 익셉션 벡터 테이블을 차례로 소개합니다. ARMv7 익셉션 벡터 테이블 "표 7.2"는 ARMv7 익셉션 벡터 테이블입니다. 우선 표를 읽고 해석해 봅시다. 표 7.2 ARMv7 익셉션 벡터 테이블 표의 가장 왼쪽 윗 부분에 "익셉션 벡터 베이스 주소"가 보이는데, 이는 익셉션 벡터의 기준이 되는 주소를 뜻합니다. 익셉션 벡터 베이스 주소는 0x0이나 0xffff_0000으로 지정할 수 있는데, 리눅스와 같은 범용 운영체제에서는 0xffff_0000에 익셉션 벡터 베이스 주소를 지정합니다. 이어서 "+0x04"~"+0x1C"로 표기된 부분은 익셉션 벡터 베이스 주소 기준의 오프셋 주소를 나타냅니다. 이해를 돕기 위해 한 가지 예를 들겠습니
[ARM프로세서] 익셉션이 발생할 때 전체 흐름
이번에는 익셉션의 전체 실행 흐름도를 보면서 익셉션의 동작 원리를 알아봅시다. 그림 7.7 익셉션이 발생할 때 전체 흐름 익셉션의 전체 실행 흐름도는 4단계로 분류할 수 있습니다. 1단계: 프로세스가 실행하는 도중에 익셉션을 유발하는 동작 실행 먼저 ①로 표시된 부분을 눈으로 따라가 봅시다. 프로세스가 실행하는 도중에 메모리 어보트를 유발하는 명령어를 실행하거나 소프트웨어 인터럽트를 유발하는 명령어를 실행합니다. 또한 외부 하드웨어에서 인터럽트를 유발합니다. 2단계: ARM 프로세서가 익셉션을 감지 ② 로 표시된 부분은 ARM 프로세서가 익셉션을 감지하는 동작입니다. 1단계에서 익셉션을 유발하는 명령어나 외부 하드웨어 인터럽트가 발생하면, ARM 프로세서가 이를 감



