Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

11105
637
415734


[ARM프로세서] 익셉션이 발생할 때 전체 흐름 Arm: Exception Overview

이번에는 익셉션의 전체 실행 흐름도를 보면서 익셉션의 동작 원리를 알아봅시다.

 

그림 7.7 익셉션이 발생할 때 전체 흐름

익셉션의 전체 실행 흐름도는 4단계로 분류할 수 있습니다.

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

먼저 ①로 표시된 부분을 눈으로 따라가 봅시다. 프로세스가 실행하는 도중에 메모리 어보트를 유발하는 명령어를 실행하거나 소프트웨어 인터럽트를 유발하는 명령어를 실행합니다. 또한 외부 하드웨어에서 인터럽트를 유발합니다. 

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

② 로 표시된 부분은 ARM 프로세서가 익셉션을 감지하는 동작입니다. 1단계에서 익셉션을 유발하는 명령어나 외부 하드웨어 인터럽트가 발생하면, ARM 프로세서가 이를 감지하는 것입니다. ②~③으로 표기된 부분의 외곽에 보이는 테두리는 ARM 프로세서가 하드웨어적으로 처리되는 동작을 나타냅니다. 
 
3단계: ARM 프로세서가 익셉션에 대한 세부 처리 

③으로 표기된 박스를 보겠습니다. 익셉션을 감지한 ARM 프로세서(ARMv7 기준)는 다음과 같은 동작을 처리합니다.

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

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

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

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

익셉션의 타입에 따른 후속 처리 방식

익셉션 벡터 핸들러는 소프트웨어적으로 익셉션의 종류에 따라 후속 처리를 하는데, 익셉션의 타입에 따라 처리 방식이 다릅니다.

   ❑ 메모리 어보트 타입 익셉션: 디버깅 정보를 출력하고 시스템을 리부팅시킴
   ❑ 인터럽트 타입 익셉션: 인터럽트에 대한 서비스 루틴(ISR: Interrupt Service Routine) 실행
   ❑ 소프트웨어 인터럽트: 시스템 콜 핸들러 실행

여기까지 ARMv7 아키텍처 기준으로 익셉션의 전체 실행 흐름에 대해 소개했습니다. 여기까지 읽고 나면 "ARMv8 아키텍처에서 익셉션이 실행되는 흐름"도 파악해야 하지 않을까"라는 의문이 생길 수 있습니다. ARMv8 아키텍처의 익셉션의 실행 흐름은 ARMv7 아키텍처와 거의 유사하니 걱정하지 않으셔도 좋습니다.

ARM 프로세서에서 익셉션이 발생하면 익셉션의 종류 별로 이미 지정한 주소로 프로그램 카운터가 브랜치된다고 배웠습니다. 이 부분을 읽으면 "익셉션의 종류와 어떤 기준으로로 익셉션의 종류 별로 프로그램 카운터가 브랜치될까?"라는 의문이 생길 수 있는데, 이 내용은 익셉션 벡터 테이블을 보면 알 수 있습니다.

---
"이 포스팅이 유익하다고 생각되시면 공감 혹은 댓글로 응원해주시면 감사하겠습니다. 
"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!"

​Thanks,
Guillermo Austin Kim(austindh.kim@gmail.com)
---



Reference: ARM 프로세서 익셉션 소개

익셉션이란? 
익셉션의 주요 개념  
    ❑ 익셉션의 타입 소개
익셉션과 같이 배워야 하는 운영체제 지식


Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자



핑백

덧글

댓글 입력 영역