메모리 어보트 타입 익셉션이 발생하면 익셉션 핸들러에서 디버깅 정보를 출력하고 시스템을 리셋시킵니다. 소프트웨어적으로 시스템이 치명적인 오류가 있는 상태로 판단하기 때문입니다.

다음 그림을 보면서 메모리 어보트 타입 익셉션의 전체 실행 흐름을 알아봅시다.  


그림 8.2 메모리 어보트 타입 익셉션이 발생할 때 전체 흐름

익셉션의 전체 실행 흐름도는 4단계로 분류할 수 있는데, 각 단계 별로 어떤 동작을 수행하는지 알아봅시다. 



1단계: 프로세스가 실행하는 도중에 익셉션을 유발하는 명령어 실행 

먼저 ①로 표시된 부분을 눈으로 따라가 봅시다. 프로세스가 메모리 어보트를 유발하는 명령어를 실행하는 부분입니다.



2단계: ARM 프로세서가 익셉션을 감지 

② 로 표시된 부분은 ARM 프로세서가 익셉션을 감지하는 동작입니다. 1단계에서 메모리 어보트를 유발하는 명령어를 ARM 코어가 실행하면 다음과 같은 익셉션을 유발합니다.  

    ❑ Undefined Instruction
    ❑ 프리패치 어보트
    ❑ 데이터 어보트

②~③으로 표기된 부분의 외곽에 보이는 테두리는 ARM 프로세서가 하드웨어적으로 처리되는 부분입니다. 이 동작은 소스 코드 형태로 확인하기 어렵습니다.



3단계: ARM 프로세서가 익셉션에 대한 세부 처리 

③으로 표기된 박스를 보겠습니다. 익셉션을 감지한 ARM 코어는 다음과 같은 동작을 처리합니다.

    ❑ 익셉션이 발생한 시점의 ARM 동작 모드를 나타내는 CPSR 레지스터를 spsr_<mode> 레지스터에 저장한다. 
    ❑ CPSR 레지스터를 변경해 ARM의 동작 모드를 변경한다.
    ❑ 익셉션의 종류에 따라 이미 지정된 주소로 프로그램 카운터를 브랜치한다.

많은 SW 개발자들은 위 동작을 보고 "소스 코드로 보고 싶다"란 생각이 들지도 모르겠지만, 이 동작은 "하드웨어적으로" ARM 프로세서가 처리되는 부분입니다.  



4단계: 익셉션 핸들러 실행 후 시스템 콜 핸들러 호출


④으로 표기된 박스는 SW적으로 처리되는 부분입니다. 3단계에서 익셉션의 종류에 따라 이미 지정된 주소로 프로그램 카운터를 브랜치하면, 익셉션의 종류에 따라 이미 지정된 주소에 위치한 명령어가 실행됩니다. 익셉션의 종류에 따라 이미 지정된 주소를 익셉션 벡터 주소라고 하며, 익셉션의 종류에 따라 이미 지정된 주소에 위치한 코드를 익셉션 벡터 핸들러라고 합니다. 익셉션 벡터로 구성된 익셉션 벡터 테이블은 다음 절에서 자세히 다룰 예정입니다.

 

유튜브 강의 영상

 
 
 

 

 

 

+ Recent posts